summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/CMakeLists.txt7
-rw-r--r--tests/auto/CMakeLists.txt84
-rw-r--r--tests/auto/bic/data/qt.6.0.0.linux-gcc-amd64.txt26289
-rw-r--r--tests/auto/bic/data/qt.6.1.0.linux-gcc-amd64.txt26806
-rw-r--r--tests/auto/bic/data/qt.6.2.0.linux-gcc-amd64.txt26901
-rw-r--r--tests/auto/bic/data/qt.6.3.0.linux-gcc-amd64.txt26944
-rw-r--r--tests/auto/bic/data/qt.6.4.0.linux-gcc-amd64.txt27176
-rw-r--r--tests/auto/bic/data/qt.6.5.0.linux-gcc-amd64.txt27329
-rw-r--r--tests/auto/bic/data/qt.6.6.0.linux-gcc-amd64.txt27485
-rw-r--r--tests/auto/bic/data/qt.6.7.0.linux-gcc-amd64.txt27743
-rw-r--r--tests/auto/cmake/CMakeLists.txt168
-rw-r--r--tests/auto/cmake/mockplugins/.cmake.conf2
-rw-r--r--tests/auto/cmake/mockplugins/CMakeLists.txt6
-rw-r--r--tests/auto/cmake/mockplugins/mock1plugin/CMakeLists.txt6
-rw-r--r--tests/auto/cmake/mockplugins/mock1plugin/qmock1plugin.h51
-rw-r--r--tests/auto/cmake/mockplugins/mock2plugin/CMakeLists.txt6
-rw-r--r--tests/auto/cmake/mockplugins/mock2plugin/qmock2plugin.h51
-rw-r--r--tests/auto/cmake/mockplugins/mock3plugin/CMakeLists.txt6
-rw-r--r--tests/auto/cmake/mockplugins/mock3plugin/qmock3plugin.h51
-rw-r--r--tests/auto/cmake/mockplugins/mock4plugin/CMakeLists.txt6
-rw-r--r--tests/auto/cmake/mockplugins/mock4plugin/qmock4plugin.h51
-rw-r--r--tests/auto/cmake/mockplugins/mock5plugin/CMakeLists.txt6
-rw-r--r--tests/auto/cmake/mockplugins/mock5plugin/qmock5plugin.h51
-rw-r--r--tests/auto/cmake/mockplugins/mock6plugin/CMakeLists.txt6
-rw-r--r--tests/auto/cmake/mockplugins/mock6plugin/qmock6plugin.h51
-rw-r--r--tests/auto/cmake/mockplugins/mockplugins1/CMakeLists.txt5
-rw-r--r--tests/auto/cmake/mockplugins/mockplugins1/fake.cpp29
-rw-r--r--tests/auto/cmake/mockplugins/mockplugins1/qmockplugin.h55
-rw-r--r--tests/auto/cmake/mockplugins/mockplugins2/CMakeLists.txt4
-rw-r--r--tests/auto/cmake/mockplugins/mockplugins2/fake.cpp29
-rw-r--r--tests/auto/cmake/mockplugins/mockplugins3/CMakeLists.txt5
-rw-r--r--tests/auto/cmake/mockplugins/mockplugins3/fake.cpp29
-rw-r--r--tests/auto/cmake/mockplugins/mockplugins3/qmockauxplugin.h55
-rw-r--r--tests/auto/cmake/test(needsquoting)dirname/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test(needsquoting)dirname/mywidget.cpp29
-rw-r--r--tests/auto/cmake/test(needsquoting)dirname/mywidget.h29
-rw-r--r--tests/auto/cmake/test_QFINDTESTDATA/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_QFINDTESTDATA/tests/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_QFINDTESTDATA/tests/main.cpp29
-rw-r--r--tests/auto/cmake/test_QTBUG-63422/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_QTBUG-63422/mywidget.cpp29
-rw-r--r--tests/auto/cmake/test_QTBUG-63422/mywidget.h29
-rw-r--r--tests/auto/cmake/test_QTP0003/CMakeLists.txt66
-rw-r--r--tests/auto/cmake/test_QTP0003/source.cpp4
-rw-r--r--tests/auto/cmake/test_QT_TESTCASE_BUILDDIR/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_QT_TESTCASE_BUILDDIR/main.cpp29
-rw-r--r--tests/auto/cmake/test_add_big_resource/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_add_big_resource/myobject.cpp29
-rw-r--r--tests/auto/cmake/test_add_big_resource/myobject.h29
-rw-r--r--tests/auto/cmake/test_add_binary_resources_delayed_file/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_add_binary_resources_delayed_file/main.cpp30
-rw-r--r--tests/auto/cmake/test_add_resource_options/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_add_resource_options/myobject.cpp29
-rw-r--r--tests/auto/cmake/test_add_resource_options/myobject.h29
-rw-r--r--tests/auto/cmake/test_add_resource_prefix/CMakeLists.txt25
-rw-r--r--tests/auto/cmake/test_add_resource_prefix/main.cpp26
-rw-r--r--tests/auto/cmake/test_add_resource_prefix/resource_file.txt1
-rw-r--r--tests/auto/cmake/test_add_resources_big_resources/CMakeLists.txt45
-rw-r--r--tests/auto/cmake/test_add_resources_big_resources/intermediate_lib.cpp20
-rw-r--r--tests/auto/cmake/test_add_resources_big_resources/intermediate_lib.h9
-rw-r--r--tests/auto/cmake/test_add_resources_big_resources/leaf_lib.cpp13
-rw-r--r--tests/auto/cmake/test_add_resources_big_resources/leaf_lib.h8
-rw-r--r--tests/auto/cmake/test_add_resources_big_resources/main.cpp35
-rw-r--r--tests/auto/cmake/test_add_resources_big_resources/resource1.txt1
-rw-r--r--tests/auto/cmake/test_add_resources_big_resources/resource2.txt1
-rw-r--r--tests/auto/cmake/test_add_resources_big_resources/resource3.txt1
-rw-r--r--tests/auto/cmake/test_add_resources_binary_generated/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_add_resources_binary_generated/main.cpp33
-rw-r--r--tests/auto/cmake/test_add_resources_delayed_file/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_add_resources_delayed_file/main.cpp29
-rw-r--r--tests/auto/cmake/test_android_multi_abi_forward_vars/CMakeLists.txt33
-rw-r--r--tests/auto/cmake/test_android_multi_abi_forward_vars/main.cpp4
-rw-r--r--tests/auto/cmake/test_build_simple_widget_app/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_build_simple_widget_app/main.cpp40
-rw-r--r--tests/auto/cmake/test_build_simple_widget_app/test_build_simple_widget_app.pro5
-rw-r--r--tests/auto/cmake/test_collecting_plugins/CMakeLists.txt31
-rw-r--r--tests/auto/cmake/test_collecting_plugins/main.cpp7
-rw-r--r--tests/auto/cmake/test_collecting_plugins/plugin.cpp18
-rw-r--r--tests/auto/cmake/test_concurrent_module/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_concurrent_module/main.cpp29
-rw-r--r--tests/auto/cmake/test_config_expressions/CMakeLists.txt134
-rw-r--r--tests/auto/cmake/test_dbus_module/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_dbus_module/mydbusobject.cpp29
-rw-r--r--tests/auto/cmake/test_dbus_module/mydbusobject.h29
-rw-r--r--tests/auto/cmake/test_dependent_modules/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_dependent_modules/mywidget.cpp29
-rw-r--r--tests/auto/cmake/test_dependent_modules/mywidget.h29
-rw-r--r--tests/auto/cmake/test_egl_lib/main.cpp29
-rw-r--r--tests/auto/cmake/test_generating_cpp_exports/.cmake.conf2
-rw-r--r--tests/auto/cmake/test_generating_cpp_exports/CMakeLists.txt5
-rw-r--r--tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/CMakeLists.txt5
-rw-r--r--tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/module_api.cpp40
-rw-r--r--tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/module_api.h45
-rw-r--r--tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/use_api.cpp40
-rw-r--r--tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/CMakeLists.txt5
-rw-r--r--tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/module_api.cpp40
-rw-r--r--tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/module_api.h45
-rw-r--r--tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/use_api.cpp40
-rw-r--r--tests/auto/cmake/test_global_promotion/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_global_promotion/subdir_with_global_qt/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_global_promotion/subdir_with_local_qt/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_import_plugins/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_import_plugins/main.cpp51
-rw-r--r--tests/auto/cmake/test_interface/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_interface/main.cpp29
-rw-r--r--tests/auto/cmake/test_interface/mainwindow.cpp29
-rw-r--r--tests/auto/cmake/test_interface/mainwindow.h29
-rw-r--r--tests/auto/cmake/test_interface/widget_test/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_interface_link_libraries/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_interface_link_libraries/main.cpp29
-rw-r--r--tests/auto/cmake/test_interface_link_libraries/somelib.cpp29
-rw-r--r--tests/auto/cmake/test_interface_link_libraries/somelib.h29
-rw-r--r--tests/auto/cmake/test_json_plugin_includes/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_json_plugin_includes/plugin.cpp29
-rw-r--r--tests/auto/cmake/test_json_plugin_includes/plugin.h29
-rw-r--r--tests/auto/cmake/test_moc_macro_target/CMakeLists.txt32
-rw-r--r--tests/auto/cmake/test_moc_macro_target/check_moc_parameters.cmake15
-rw-r--r--tests/auto/cmake/test_moc_macro_target/interface/myinterface.h29
-rw-r--r--tests/auto/cmake/test_moc_macro_target/main_gen_test.cpp29
-rw-r--r--tests/auto/cmake/test_moc_macro_target/main_wrap_test.cpp29
-rw-r--r--tests/auto/cmake/test_moc_macro_target/mywrapobject.h29
-rw-r--r--tests/auto/cmake/test_multiple_find_package/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_multiple_find_package/main.cpp29
-rw-r--r--tests/auto/cmake/test_multiple_find_package/subdir1/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_opengl_lib/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_opengl_lib/main.cpp29
-rw-r--r--tests/auto/cmake/test_platform_defs_include/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_platform_defs_include/main.cpp29
-rw-r--r--tests/auto/cmake/test_plugin_shared_static_flavor.cmake3
-rw-r--r--tests/auto/cmake/test_plugin_shared_static_flavor/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_plugins/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_private_includes/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_private_includes/main.cpp29
-rw-r--r--tests/auto/cmake/test_private_targets/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_private_targets/main.cpp29
-rw-r--r--tests/auto/cmake/test_qt_add_resources_rebuild/CMakeLists.txt123
-rw-r--r--tests/auto/cmake/test_qt_add_resources_rebuild/sample/CMakeLists.txt45
-rw-r--r--tests/auto/cmake/test_qt_add_resources_rebuild/sample/input.ts1
-rw-r--r--tests/auto/cmake/test_qt_extract_metatypes/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/MetaType.cpp29
-rw-r--r--tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/main.cpp29
-rw-r--r--tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmpty.h29
-rw-r--r--tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmptyWithComment.h29
-rw-r--r--tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECT.h29
-rw-r--r--tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECTandQ_PROPERTY.h29
-rw-r--r--tests/auto/cmake/test_qt_manual_moc/CMakeLists.txt61
-rw-r--r--tests/auto/cmake/test_qt_manual_moc/VerifyDefines.cmake30
-rw-r--r--tests/auto/cmake/test_qt_manual_moc/testclass.cpp8
-rw-r--r--tests/auto/cmake/test_qt_manual_moc/testclass.h17
-rw-r--r--tests/auto/cmake/test_qt_manual_moc/testclass1.h17
-rw-r--r--tests/auto/cmake/test_qtmainwin_library/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_qtmainwin_library/myobject.cpp29
-rw-r--r--tests/auto/cmake/test_qtmainwin_library/myobject.h29
-rw-r--r--tests/auto/cmake/test_resource_without_obj_lib/CMakeLists.txt33
-rw-r--r--tests/auto/cmake/test_resource_without_obj_lib/helper_lib.cpp4
-rw-r--r--tests/auto/cmake/test_resource_without_obj_lib/main.cpp28
-rw-r--r--tests/auto/cmake/test_resource_without_obj_lib/resource.txt1
-rw-r--r--tests/auto/cmake/test_standalone_test/CMakeLists.txt14
-rw-r--r--tests/auto/cmake/test_standalone_test/tst_standalone_test.cpp22
-rw-r--r--tests/auto/cmake/test_static_resources/.cmake.conf2
-rw-r--r--tests/auto/cmake/test_static_resources/CMakeLists.txt5
-rw-r--r--tests/auto/cmake/test_static_resources/mock_static_resources1/CMakeLists.txt4
-rw-r--r--tests/auto/cmake/test_static_resources/mock_static_resources1/dummy.cpp29
-rw-r--r--tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/CMakeLists.txt4
-rw-r--r--tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/pluginmain.cpp40
-rw-r--r--tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/test_init_resources_static_plugin.cpp40
-rw-r--r--tests/auto/cmake/test_static_resources/test_static_resources_propagation/CMakeLists.txt11
-rw-r--r--tests/auto/cmake/test_static_resources/test_static_resources_propagation/main.cpp40
-rw-r--r--tests/auto/cmake/test_testlib_definitions/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_testlib_definitions/core_only/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_testlib_definitions/gui/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_testlib_definitions/main.cpp29
-rw-r--r--tests/auto/cmake/test_testlib_definitions/widgets/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_testlib_no_link_gui/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_testlib_no_link_widgets/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_umbrella_config/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_umbrella_config/components_found/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_umbrella_config/components_not_found/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_versionless_targets/CMakeLists.txt106
-rw-r--r--tests/auto/cmake/test_versionless_targets/default/CMakeLists.txt17
-rw-r--r--tests/auto/cmake/test_versionless_targets/force_off/CMakeLists.txt18
-rw-r--r--tests/auto/cmake/test_versionless_targets/force_old/CMakeLists.txt21
-rw-r--r--tests/auto/cmake/test_versionless_targets/force_on/CMakeLists.txt20
-rw-r--r--tests/auto/cmake/test_widgets_app_deployment/CMakeLists.txt74
-rw-r--r--tests/auto/cmake/test_widgets_app_deployment/main.cpp22
-rw-r--r--tests/auto/cmake/test_wrap_cpp_and_resources/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_wrap_cpp_and_resources/myobject.cpp29
-rw-r--r--tests/auto/cmake/test_wrap_cpp_and_resources/myobject.h29
-rw-r--r--tests/auto/cmake/test_wrap_cpp_moc/CMakeLists.txt19
-rw-r--r--tests/auto/cmake/test_wrap_cpp_moc/main.cpp17
-rw-r--r--tests/auto/cmake/test_wrap_cpp_options/CMakeLists.txt3
-rw-r--r--tests/auto/cmake/test_wrap_cpp_options/myobject.cpp29
-rw-r--r--tests/auto/cmake/test_wrap_cpp_options/myobject.h29
-rw-r--r--tests/auto/cmake/tst_qaddpreroutine/CMakeLists.txt8
-rw-r--r--tests/auto/cmake/tst_qaddpreroutine/plugin.cpp29
-rw-r--r--tests/auto/cmake/tst_qaddpreroutine/tst_qaddpreroutine.cpp29
-rw-r--r--tests/auto/concurrent/CMakeLists.txt3
-rw-r--r--tests/auto/concurrent/qtconcurrentfilter/CMakeLists.txt11
-rw-r--r--tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp83
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/CMakeLists.txt11
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/generation_helpers.h34
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/function_signature.py27
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_excel.py27
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_gui.py27
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_testcase.py27
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generator_main.py27
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/helpers.py27
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/option_management.py27
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrent_selected_tests.cpp29
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrentfiltermapgenerated.cpp29
-rw-r--r--tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrentfiltermapgenerated.h29
-rw-r--r--tests/auto/concurrent/qtconcurrentiteratekernel/CMakeLists.txt11
-rw-r--r--tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp34
-rw-r--r--tests/auto/concurrent/qtconcurrentmap/CMakeLists.txt11
-rw-r--r--tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp118
-rw-r--r--tests/auto/concurrent/qtconcurrentmedian/CMakeLists.txt11
-rw-r--r--tests/auto/concurrent/qtconcurrentmedian/tst_qtconcurrentmedian.cpp34
-rw-r--r--tests/auto/concurrent/qtconcurrentrun/CMakeLists.txt12
-rw-r--r--tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp115
-rw-r--r--tests/auto/concurrent/qtconcurrenttask/CMakeLists.txt11
-rw-r--r--tests/auto/concurrent/qtconcurrenttask/tst_qtconcurrenttask.cpp31
-rw-r--r--tests/auto/concurrent/qtconcurrentthreadengine/CMakeLists.txt11
-rw-r--r--tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp39
-rw-r--r--tests/auto/concurrent/testhelper_functions.h29
-rw-r--r--tests/auto/corelib/CMakeLists.txt4
-rw-r--r--tests/auto/corelib/animation/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/animation/qabstractanimation/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/animation/qabstractanimation/tst_qabstractanimation.cpp29
-rw-r--r--tests/auto/corelib/animation/qanimationgroup/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/animation/qanimationgroup/tst_qanimationgroup.cpp35
-rw-r--r--tests/auto/corelib/animation/qparallelanimationgroup/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/animation/qparallelanimationgroup/tst_qparallelanimationgroup.cpp169
-rw-r--r--tests/auto/corelib/animation/qpauseanimation/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp38
-rw-r--r--tests/auto/corelib/animation/qpropertyanimation/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/animation/qpropertyanimation/tst_qpropertyanimation.cpp107
-rw-r--r--tests/auto/corelib/animation/qsequentialanimationgroup/BLACKLIST1
-rw-r--r--tests/auto/corelib/animation/qsequentialanimationgroup/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/animation/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp136
-rw-r--r--tests/auto/corelib/animation/qvariantanimation/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/animation/qvariantanimation/tst_qvariantanimation.cpp29
-rw-r--r--tests/auto/corelib/global/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/global/q20/CMakeLists.txt1
-rw-r--r--tests/auto/corelib/global/q20/memory/CMakeLists.txt16
-rw-r--r--tests/auto/corelib/global/q20/memory/tst_q20_memory.cpp161
-rw-r--r--tests/auto/corelib/global/q_func_info/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/global/q_func_info/tst_q_func_info.cpp29
-rw-r--r--tests/auto/corelib/global/qcompare/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/global/qcompare/tst_qcompare.cpp784
-rw-r--r--tests/auto/corelib/global/qcomparehelpers/CMakeLists.txt39
-rw-r--r--tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers.cpp600
-rw-r--r--tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers.h63
-rw-r--r--tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers1.cpp59
-rw-r--r--tests/auto/corelib/global/qcomparehelpers/wrappertypes.h116
-rw-r--r--tests/auto/corelib/global/qflags/CMakeLists.txt17
-rw-r--r--tests/auto/corelib/global/qflags/tst_qflags.cpp184
-rw-r--r--tests/auto/corelib/global/qfloat16/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp288
-rw-r--r--tests/auto/corelib/global/qgetputenv/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/global/qgetputenv/tst_qgetputenv.cpp39
-rw-r--r--tests/auto/corelib/global/qglobal/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/global/qglobal/qglobal.c67
-rw-r--r--tests/auto/corelib/global/qglobal/tst_qglobal.cpp285
-rw-r--r--tests/auto/corelib/global/qglobalstatic/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/global/qglobalstatic/tst_qglobalstatic.cpp31
-rw-r--r--tests/auto/corelib/global/qhooks/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/global/qhooks/tst_qhooks.cpp29
-rw-r--r--tests/auto/corelib/global/qkeycombination/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/global/qkeycombination/tst_qkeycombination.cpp96
-rw-r--r--tests/auto/corelib/global/qlogging/BLACKLIST10
-rw-r--r--tests/auto/corelib/global/qlogging/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/global/qlogging/app/main.cpp29
-rw-r--r--tests/auto/corelib/global/qlogging/tst_qlogging.cpp236
-rw-r--r--tests/auto/corelib/global/qlogging/tst_qmessagelogger.cpp29
-rw-r--r--tests/auto/corelib/global/qnativeinterface/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp29
-rw-r--r--tests/auto/corelib/global/qnumeric/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp155
-rw-r--r--tests/auto/corelib/global/qoperatingsystemversion/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp158
-rw-r--r--tests/auto/corelib/global/qrandomgenerator/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/global/qrandomgenerator/tst_qrandomgenerator.cpp47
-rw-r--r--tests/auto/corelib/global/qtendian/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/global/qtendian/tst_qtendian.cpp245
-rw-r--r--tests/auto/corelib/global/qwinregistry/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/global/qwinregistry/tst_qwinregistry.cpp68
-rw-r--r--tests/auto/corelib/global/qxp/CMakeLists.txt2
-rw-r--r--tests/auto/corelib/global/qxp/function_ref/CMakeLists.txt16
-rw-r--r--tests/auto/corelib/global/qxp/function_ref/tst_qxp_function_ref.cpp281
-rw-r--r--tests/auto/corelib/global/qxp/is_virtual_base_of/CMakeLists.txt23
-rw-r--r--tests/auto/corelib/global/qxp/is_virtual_base_of/tst_is_virtual_base_of.cpp102
-rw-r--r--tests/auto/corelib/io/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/io/largefile/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/largefile/tst_largefile.cpp50
-rw-r--r--tests/auto/corelib/io/qabstractfileengine/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp111
-rw-r--r--tests/auto/corelib/io/qbuffer/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp130
-rw-r--r--tests/auto/corelib/io/qdataurl/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp95
-rw-r--r--tests/auto/corelib/io/qdebug/CMakeLists.txt16
-rw-r--r--tests/auto/corelib/io/qdebug/tst_qdebug.cpp603
-rw-r--r--tests/auto/corelib/io/qdir/CMakeLists.txt16
-rw-r--r--tests/auto/corelib/io/qdir/testdir/dir/CMakeLists.txt7
-rw-r--r--tests/auto/corelib/io/qdir/testdir/dir/qdir.pro3
-rw-r--r--tests/auto/corelib/io/qdir/testdir/dir/qrc_qdir.cpp29
-rw-r--r--tests/auto/corelib/io/qdir/testdir/dir/tst_qdir.cpp29
-rw-r--r--tests/auto/corelib/io/qdir/tst_qdir.cpp217
-rw-r--r--tests/auto/corelib/io/qdiriterator/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp175
-rw-r--r--tests/auto/corelib/io/qdirlisting/.gitignore1
-rw-r--r--tests/auto/corelib/io/qdirlisting/CMakeLists.txt46
-rw-r--r--tests/auto/corelib/io/qdirlisting/entrylist/directory/dummy (renamed from tests/auto/corelib/kernel/qtimer/BLACKLIST)0
-rw-r--r--tests/auto/corelib/io/qdirlisting/entrylist/file (renamed from tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor/BLACKLIST)0
-rw-r--r--tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp611
-rw-r--r--tests/auto/corelib/io/qfile/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/io/qfile/stdinprocess/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/io/qfile/stdinprocess/main.cpp38
-rw-r--r--tests/auto/corelib/io/qfile/tst_qfile.cpp705
-rw-r--r--tests/auto/corelib/io/qfileinfo/CMakeLists.txt19
-rw-r--r--tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp275
-rw-r--r--tests/auto/corelib/io/qfileselector/CMakeLists.txt30
-rw-r--r--tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/+wasm/test (renamed from tests/auto/dbus/qdbusconnection_spyhook/BLACKLIST)0
-rw-r--r--tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/test0
-rw-r--r--tests/auto/corelib/io/qfileselector/platforms/+wasm/test0
-rw-r--r--tests/auto/corelib/io/qfileselector/platforms/+wasm/test20
-rw-r--r--tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp34
-rw-r--r--tests/auto/corelib/io/qfilesystementry/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/io/qfilesystementry/tst_qfilesystementry.cpp35
-rw-r--r--tests/auto/corelib/io/qfilesystemmetadata/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qfilesystemmetadata/tst_qfilesystemmetadata.cpp34
-rw-r--r--tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST9
-rw-r--r--tests/auto/corelib/io/qfilesystemwatcher/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp188
-rw-r--r--tests/auto/corelib/io/qiodevice/BLACKLIST2
-rw-r--r--tests/auto/corelib/io/qiodevice/CMakeLists.txt32
-rw-r--r--tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp60
-rw-r--r--tests/auto/corelib/io/qipaddress/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qipaddress/tst_qipaddress.cpp31
-rw-r--r--tests/auto/corelib/io/qlockfile/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt7
-rw-r--r--tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp29
-rw-r--r--tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp67
-rw-r--r--tests/auto/corelib/io/qloggingcategory/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp56
-rw-r--r--tests/auto/corelib/io/qloggingregistry/CMakeLists.txt31
-rw-r--r--tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp29
-rw-r--r--tests/auto/corelib/io/qnodebug/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess-noapplication/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/io/qprocess-noapplication/tst_qprocessnoapplication.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/BLACKLIST6
-rw-r--r--tests/auto/corelib/io/qprocess/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/io/qprocess/crasher.h58
-rw-r--r--tests/auto/corelib/io/qprocess/fileWriterProcess/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/io/qprocess/fileWriterProcess/main.cpp32
-rw-r--r--tests/auto/corelib/io/qprocess/test/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qprocess/testDetached/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/io/qprocess/testDetached/main.cpp31
-rw-r--r--tests/auto/corelib/io/qprocess/testExitCodes/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testExitCodes/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testForwarding/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/io/qprocess/testForwarding/main.cpp31
-rw-r--r--tests/auto/corelib/io/qprocess/testForwardingHelper/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testForwardingHelper/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testGuiProcess/CMakeLists.txt5
-rw-r--r--tests/auto/corelib/io/qprocess/testGuiProcess/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessCrash/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessCrash/main.cpp63
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEOF/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEOF/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEcho/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEcho/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEcho2/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEcho2/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEcho3/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEcho3/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEchoGui/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEchoGui/main_win.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEnvironment/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessEnvironment/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessHang/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessHang/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessNormal/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessNormal/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessOutput/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessOutput/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessSpacesArgs/CMakeLists.txt24
-rw-r--r--tests/auto/corelib/io/qprocess/testProcessSpacesArgs/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testSetWorkingDirectory/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/io/qprocess/testSetWorkingDirectory/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testSoftExit/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testSoftExit/main_unix.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testSoftExit/main_win.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testSpaceInName/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/io/qprocess/testSpaceInName/main.cpp29
-rw-r--r--tests/auto/corelib/io/qprocess/testUnixProcessParameters/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/io/qprocess/testUnixProcessParameters/main.cpp109
-rw-r--r--tests/auto/corelib/io/qprocess/tst_qprocess.cpp916
-rw-r--r--tests/auto/corelib/io/qprocessenvironment/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qprocessenvironment/tst_qprocessenvironment.cpp58
-rw-r--r--tests/auto/corelib/io/qresourceengine/CMakeLists.txt18
-rw-r--r--tests/auto/corelib/io/qresourceengine/staticplugin/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/io/qresourceengine/tst_qresourceengine.cpp68
-rw-r--r--tests/auto/corelib/io/qresourceengine/world.txt1
-rw-r--r--tests/auto/corelib/io/qsavefile/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp35
-rw-r--r--tests/auto/corelib/io/qsettings/.gitattributes2
-rw-r--r--tests/auto/corelib/io/qsettings/CMakeLists.txt44
-rw-r--r--tests/auto/corelib/io/qsettings/qt5settings.ini11
-rw-r--r--tests/auto/corelib/io/qsettings/resourcefile4.ini2
-rw-r--r--tests/auto/corelib/io/qsettings/resourcefile5.ini2
-rw-r--r--tests/auto/corelib/io/qsettings/tst_qsettings.cpp544
-rw-r--r--tests/auto/corelib/io/qsettings/utf8settings.ini11
-rw-r--r--tests/auto/corelib/io/qstandardpaths/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp298
-rw-r--r--tests/auto/corelib/io/qstorageinfo/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/io/qstorageinfo/tst_qstorageinfo.cpp374
-rw-r--r--tests/auto/corelib/io/qtemporarydir/BLACKLIST2
-rw-r--r--tests/auto/corelib/io/qtemporarydir/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp124
-rw-r--r--tests/auto/corelib/io/qtemporaryfile/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp175
-rw-r--r--tests/auto/corelib/io/qurl/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/io/qurl/idna-test.c29
-rw-r--r--tests/auto/corelib/io/qurl/tst_qurl.cpp155
-rw-r--r--tests/auto/corelib/io/qurl/tst_qurl_mac.mm29
-rw-r--r--tests/auto/corelib/io/qurlinternal/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp39
-rw-r--r--tests/auto/corelib/io/qurlinternal/utf8data.cpp31
-rw-r--r--tests/auto/corelib/io/qurlquery/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp192
-rw-r--r--tests/auto/corelib/io/qurluts46/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/io/qurluts46/testdata/IdnaTestV2.txt11022
-rw-r--r--tests/auto/corelib/io/qurluts46/tst_qurluts46.cpp89
-rw-r--r--tests/auto/corelib/io/qzip/.gitignore (renamed from tests/auto/gui/text/qzip/.gitignore)0
-rw-r--r--tests/auto/corelib/io/qzip/CMakeLists.txt26
-rw-r--r--tests/auto/corelib/io/qzip/testdata/symlink.zip (renamed from tests/auto/gui/text/qzip/testdata/symlink.zip)bin289 -> 289 bytes
-rw-r--r--tests/auto/corelib/io/qzip/testdata/test.zip (renamed from tests/auto/gui/text/qzip/testdata/test.zip)bin286 -> 286 bytes
-rw-r--r--tests/auto/corelib/io/qzip/tst_qzip.cpp (renamed from tests/auto/gui/text/qzip/tst_qzip.cpp)37
-rw-r--r--tests/auto/corelib/ipc/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/ipc/ipctestcommon.h83
-rw-r--r--tests/auto/corelib/ipc/qnativeipckey/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/ipc/qnativeipckey/tst_qnativeipckey.cpp442
-rw-r--r--tests/auto/corelib/ipc/qsharedmemory/CMakeLists.txt27
-rw-r--r--tests/auto/corelib/ipc/qsharedmemory/producerconsumer/CMakeLists.txt (renamed from tests/auto/corelib/kernel/qsharedmemory/producerconsumer/CMakeLists.txt)5
-rw-r--r--tests/auto/corelib/ipc/qsharedmemory/producerconsumer/main.cpp (renamed from tests/auto/corelib/kernel/qsharedmemory/producerconsumer/main.cpp)58
-rw-r--r--tests/auto/corelib/ipc/qsharedmemory/tst_qsharedmemory.cpp (renamed from tests/auto/corelib/kernel/qsharedmemory/tst_qsharedmemory.cpp)464
-rw-r--r--tests/auto/corelib/ipc/qsystemsemaphore/CMakeLists.txt (renamed from tests/auto/corelib/kernel/qsystemsemaphore/CMakeLists.txt)9
-rw-r--r--tests/auto/corelib/ipc/qsystemsemaphore/acquirerelease/CMakeLists.txt (renamed from tests/auto/corelib/kernel/qsystemsemaphore/acquirerelease/CMakeLists.txt)5
-rw-r--r--tests/auto/corelib/ipc/qsystemsemaphore/acquirerelease/main.cpp80
-rw-r--r--tests/auto/corelib/ipc/qsystemsemaphore/tst_qsystemsemaphore.cpp (renamed from tests/auto/corelib/kernel/qsystemsemaphore/tst_qsystemsemaphore.cpp)184
-rw-r--r--tests/auto/corelib/itemmodels/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/itemmodels/qabstractitemmodel/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp136
-rw-r--r--tests/auto/corelib/itemmodels/qabstractproxymodel/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp165
-rw-r--r--tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp132
-rw-r--r--tests/auto/corelib/itemmodels/qidentityproxymodel/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp64
-rw-r--r--tests/auto/corelib/itemmodels/qitemmodel/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp29
-rw-r--r--tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp135
-rw-r--r--tests/auto/corelib/itemmodels/qitemselectionmodel/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp241
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp321
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.h29
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/tst_qsortfilterproxymodel_recursive.cpp31
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/tst_qsortfilterproxymodel_regularexpression.cpp33
-rw-r--r--tests/auto/corelib/itemmodels/qstringlistmodel/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/itemmodels/qstringlistmodel/qmodellistener.h29
-rw-r--r--tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp31
-rw-r--r--tests/auto/corelib/itemmodels/qtransposeproxymodel/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/itemmodels/qtransposeproxymodel/tst_qtransposeproxymodel.cpp104
-rw-r--r--tests/auto/corelib/kernel/CMakeLists.txt20
-rw-r--r--tests/auto/corelib/kernel/qapplicationstatic/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/kernel/qapplicationstatic/tst_qapplicationstatic.cpp29
-rw-r--r--tests/auto/corelib/kernel/qchronotimer/.gitignore1
-rw-r--r--tests/auto/corelib/kernel/qchronotimer/CMakeLists.txt33
-rw-r--r--tests/auto/corelib/kernel/qchronotimer/tst_qchronotimer.cpp1266
-rw-r--r--tests/auto/corelib/kernel/qcoreapplication/CMakeLists.txt32
-rw-r--r--tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp189
-rw-r--r--tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h38
-rw-r--r--tests/auto/corelib/kernel/qdeadlinetimer/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp477
-rw-r--r--tests/auto/corelib/kernel/qelapsedtimer/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/kernel/qelapsedtimer/tst_qelapsedtimer.cpp53
-rw-r--r--tests/auto/corelib/kernel/qeventdispatcher/CMakeLists.txt33
-rw-r--r--tests/auto/corelib/kernel/qeventdispatcher/tst_qeventdispatcher.cpp194
-rw-r--r--tests/auto/corelib/kernel/qeventloop/BLACKLIST2
-rw-r--r--tests/auto/corelib/kernel/qeventloop/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qeventloop/tst_qeventloop.cpp67
-rw-r--r--tests/auto/corelib/kernel/qjniarray/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qjniarray/tst_qjniarray.cpp165
-rw-r--r--tests/auto/corelib/kernel/qjnienvironment/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java53
-rw-r--r--tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp179
-rw-r--r--tests/auto/corelib/kernel/qjniobject/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/kernel/qjniobject/testdata/src/org/qtproject/qt/android/testdata/QtJniObjectTestClass.java202
-rw-r--r--tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp867
-rw-r--r--tests/auto/corelib/kernel/qjnitypes/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp284
-rw-r--r--tests/auto/corelib/kernel/qmath/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/kernel/qmath/tst_qmath.cpp42
-rw-r--r--tests/auto/corelib/kernel/qmetacontainer/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/kernel/qmetacontainer/tst_qmetacontainer.cpp39
-rw-r--r--tests/auto/corelib/kernel/qmetaenum/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/kernel/qmetaenum/tst_qmetaenum.cpp32
-rw-r--r--tests/auto/corelib/kernel/qmetamethod/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp77
-rw-r--r--tests/auto/corelib/kernel/qmetaobject/CMakeLists.txt31
-rw-r--r--tests/auto/corelib/kernel/qmetaobject/forwarddeclared.cpp17
-rw-r--r--tests/auto/corelib/kernel/qmetaobject/forwarddeclared.h12
-rw-r--r--tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp1101
-rw-r--r--tests/auto/corelib/kernel/qmetaobjectbuilder/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp83
-rw-r--r--tests/auto/corelib/kernel/qmetaproperty/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp61
-rw-r--r--tests/auto/corelib/kernel/qmetatype/CMakeLists.txt65
-rw-r--r--tests/auto/corelib/kernel/qmetatype/lib1.cpp5
-rw-r--r--tests/auto/corelib/kernel/qmetatype/lib2.cpp5
-rw-r--r--tests/auto/corelib/kernel/qmetatype/lib_common.cpp13
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp874
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype.h57
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype2.cpp295
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype3.cpp29
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype_common.h35
-rw-r--r--tests/auto/corelib/kernel/qmetatype/tst_qmetatype_libs.h24
-rw-r--r--tests/auto/corelib/kernel/qmimedata/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp45
-rw-r--r--tests/auto/corelib/kernel/qobject/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/kernel/qobject/signalbug/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/kernel/qobject/signalbug/signalbug.cpp29
-rw-r--r--tests/auto/corelib/kernel/qobject/signalbug/signalbug.h29
-rw-r--r--tests/auto/corelib/kernel/qobject/tst_qobject.cpp778
-rw-r--r--tests/auto/corelib/kernel/qpermission/.gitignore1
-rw-r--r--tests/auto/corelib/kernel/qpermission/CMakeLists.txt19
-rw-r--r--tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp284
-rw-r--r--tests/auto/corelib/kernel/qpointer/CMakeLists.txt17
-rw-r--r--tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp131
-rw-r--r--tests/auto/corelib/kernel/qproperty/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp778
-rw-r--r--tests/auto/corelib/kernel/qsharedmemory/CMakeLists.txt24
-rw-r--r--tests/auto/corelib/kernel/qsignalblocker/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp40
-rw-r--r--tests/auto/corelib/kernel/qsignalmapper/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/kernel/qsignalmapper/tst_qsignalmapper.cpp29
-rw-r--r--tests/auto/corelib/kernel/qsocketnotifier/BLACKLIST3
-rw-r--r--tests/auto/corelib/kernel/qsocketnotifier/CMakeLists.txt16
-rw-r--r--tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp57
-rw-r--r--tests/auto/corelib/kernel/qsystemsemaphore/acquirerelease/main.cpp101
-rw-r--r--tests/auto/corelib/kernel/qtimer/CMakeLists.txt43
-rw-r--r--tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp408
-rw-r--r--tests/auto/corelib/kernel/qtranslator/CMakeLists.txt17
-rw-r--r--tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp35
-rw-r--r--tests/auto/corelib/kernel/qvariant/CMakeLists.txt36
-rw-r--r--tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp1989
-rw-r--r--tests/auto/corelib/kernel/qwineventnotifier/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/kernel/qwineventnotifier/tst_qwineventnotifier.cpp29
-rw-r--r--tests/auto/corelib/kernel/qwinregistrykey/.gitignore1
-rw-r--r--tests/auto/corelib/kernel/qwinregistrykey/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/kernel/qwinregistrykey/tst_qwinregistrykey.cpp242
-rw-r--r--tests/auto/corelib/mimetypes/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/add-extension.xml7
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/circular-inheritance.xml13
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt31
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/tst_qmimedatabase-cache.cpp35
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt31
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/tst_qmimedatabase-xml.cpp32
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/test.qml29
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/test.txt6
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/text-plain-subclass.xml15
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp432
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.h40
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/webm-glob-deleteall.xml7
-rw-r--r--tests/auto/corelib/mimetypes/qmimetype/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/mimetypes/qmimetype/tst_qmimetype.cpp141
-rw-r--r--tests/auto/corelib/platform/CMakeLists.txt7
-rw-r--r--tests/auto/corelib/platform/android/CMakeLists.txt19
-rw-r--r--tests/auto/corelib/platform/android/testdata/assets/top_level_dir/file_in_top_dir.txt (renamed from tests/auto/other/android/testdata/assets/test.txt)0
-rw-r--r--tests/auto/corelib/platform/android/testdata/assets/top_level_dir/sub_dir/file_in_sub_dir.txt1
-rw-r--r--tests/auto/corelib/platform/android/testdata/assets/top_level_dir/sub_dir/sub_dir_2/sub_dir_3/file_in_sub_dir_3.txt1
-rw-r--r--tests/auto/corelib/platform/android/tst_android.cpp236
-rw-r--r--tests/auto/corelib/platform/android_appless/CMakeLists.txt19
-rw-r--r--tests/auto/corelib/platform/android_appless/tst_android_appless.cpp53
-rw-r--r--tests/auto/corelib/platform/windows/CMakeLists.txt4
-rw-r--r--tests/auto/corelib/platform/windows/qcomobject/CMakeLists.txt19
-rw-r--r--tests/auto/corelib/platform/windows/qcomobject/tst_qcomobject.cpp268
-rw-r--r--tests/auto/corelib/plugin/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/CMakeLists.txt10
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/plugin1/CMakeLists.txt25
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.cpp31
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.h31
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.json5
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/plugin1/plugininterface1.h29
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/plugin2/CMakeLists.txt25
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.cpp31
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.h29
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/plugin2/plugininterface2.h29
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/staticplugin/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/staticplugin/main.cpp22
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/staticplugin/plugin.json3
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/test/CMakeLists.txt61
-rw-r--r--tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp182
-rw-r--r--tests/auto/corelib/plugin/qlibrary/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/plugin/qlibrary/lib/CMakeLists.txt69
-rw-r--r--tests/auto/corelib/plugin/qlibrary/lib/mylib.c29
-rw-r--r--tests/auto/corelib/plugin/qlibrary/lib2/CMakeLists.txt113
-rw-r--r--tests/auto/corelib/plugin/qlibrary/lib2/mylib.c29
-rw-r--r--tests/auto/corelib/plugin/qlibrary/tst/CMakeLists.txt45
-rw-r--r--tests/auto/corelib/plugin/qlibrary/tst_qlibrary.cpp282
-rw-r--r--tests/auto/corelib/plugin/qplugin/CMakeLists.txt45
-rw-r--r--tests/auto/corelib/plugin/qplugin/debugplugin/CMakeLists.txt8
-rw-r--r--tests/auto/corelib/plugin/qplugin/debugplugin/main.cpp29
-rw-r--r--tests/auto/corelib/plugin/qplugin/invalidplugin/CMakeLists.txt6
-rw-r--r--tests/auto/corelib/plugin/qplugin/invalidplugin/main.cpp29
-rw-r--r--tests/auto/corelib/plugin/qplugin/releaseplugin/CMakeLists.txt8
-rw-r--r--tests/auto/corelib/plugin/qplugin/releaseplugin/main.cpp29
-rw-r--r--tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp57
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/BLACKLIST2
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/almostplugin/CMakeLists.txt20
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/almostplugin/almostplugin.cpp29
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/almostplugin/almostplugin.h29
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/fakeplugin.cpp29
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/lib/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/lib/mylib.c29
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/machtest/CMakeLists.txt138
-rwxr-xr-xtests/auto/corelib/plugin/qpluginloader/machtest/generate-bad.pl29
-rwxr-xr-xtests/auto/corelib/plugin/qpluginloader/machtest/ppcconverter.pl99
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/staticplugin/CMakeLists.txt6
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/staticplugin/main.cpp29
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/theplugin/CMakeLists.txt7
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/theplugin/plugininterface.h29
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/theplugin/theoldplugin.cpp29
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/theplugin/theoldplugin.h29
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/theplugin/theplugin.cpp29
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/theplugin/theplugin.h29
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/tst/CMakeLists.txt40
-rw-r--r--tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp170
-rw-r--r--tests/auto/corelib/plugin/quuid/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/plugin/quuid/test/CMakeLists.txt6
-rw-r--r--tests/auto/corelib/plugin/quuid/testProcessUniqueness/CMakeLists.txt5
-rw-r--r--tests/auto/corelib/plugin/quuid/testProcessUniqueness/main.cpp29
-rw-r--r--tests/auto/corelib/plugin/quuid/tst_quuid.cpp119
-rw-r--r--tests/auto/corelib/plugin/quuid/tst_quuid_darwin.mm31
-rw-r--r--tests/auto/corelib/serialization/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/serialization/cborlargedatavalidation.cpp42
-rw-r--r--tests/auto/corelib/serialization/json/CMakeLists.txt49
-rw-r--r--tests/auto/corelib/serialization/json/tst_qtjson.cpp524
-rw-r--r--tests/auto/corelib/serialization/qcborstreamreader/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/serialization/qcborstreamreader/tst_qcborstreamreader.cpp144
-rw-r--r--tests/auto/corelib/serialization/qcborstreamwriter/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/serialization/qcborstreamwriter/tst_qcborstreamwriter.cpp50
-rw-r--r--tests/auto/corelib/serialization/qcborvalue/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp1236
-rw-r--r--tests/auto/corelib/serialization/qcborvalue_json/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/serialization/qcborvalue_json/tst_qcborvalue_json.cpp43
-rw-r--r--tests/auto/corelib/serialization/qdatastream/CMakeLists.txt29
-rw-r--r--tests/auto/corelib/serialization/qdatastream/gen_typedefq5.cpp29
-rw-r--r--tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp150
-rw-r--r--tests/auto/corelib/serialization/qdatastream_core_pixmap/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/serialization/qdatastream_core_pixmap/tst_qdatastream_core_pixmap.cpp35
-rw-r--r--tests/auto/corelib/serialization/qtextstream/BLACKLIST2
-rw-r--r--tests/auto/corelib/serialization/qtextstream/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/main.cpp30
-rw-r--r--tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/main.cpp29
-rw-r--r--tests/auto/corelib/serialization/qtextstream/stdinProcess/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/serialization/qtextstream/stdinProcess/main.cpp29
-rw-r--r--tests/auto/corelib/serialization/qtextstream/test/CMakeLists.txt34
-rw-r--r--tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp180
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/CMakeLists.txt26
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/qc14n.h49
-rwxr-xr-xtests/auto/corelib/serialization/qxmlstream/setupSuite.sh29
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/tokenError/dtdInBody.xml20
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/tokenError/multipleDtd.xml20
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/tokenError/wellFormed.xml15
-rw-r--r--tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp533
-rw-r--r--tests/auto/corelib/text/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/text/qanystringview/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/text/qanystringview/tst_qanystringview.cpp438
-rw-r--r--tests/auto/corelib/text/qbytearray/CMakeLists.txt29
-rw-r--r--tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp748
-rw-r--r--tests/auto/corelib/text/qbytearray/tst_qbytearray_mac.mm33
-rw-r--r--tests/auto/corelib/text/qbytearray_large/.gitattributes (renamed from tests/auto/corelib/text/qbytearray/.gitattributes)0
-rw-r--r--tests/auto/corelib/text/qbytearray_large/CMakeLists.txt24
-rw-r--r--tests/auto/corelib/text/qbytearray_large/rfc3252.txt (renamed from tests/auto/corelib/text/qbytearray/rfc3252.txt)0
-rw-r--r--tests/auto/corelib/text/qbytearray_large/tst_qbytearray_large.cpp224
-rw-r--r--tests/auto/corelib/text/qbytearrayapisymmetry/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qbytearrayapisymmetry/tst_qbytearrayapisymmetry.cpp36
-rw-r--r--tests/auto/corelib/text/qbytearraylist/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qbytearraylist/tst_qbytearraylist.cpp31
-rw-r--r--tests/auto/corelib/text/qbytearraymatcher/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp46
-rw-r--r--tests/auto/corelib/text/qbytearrayview/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qbytearrayview/tst_qbytearrayview.cpp129
-rw-r--r--tests/auto/corelib/text/qbytedatabuffer/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/text/qbytedatabuffer/tst_qbytedatabuffer.cpp29
-rw-r--r--tests/auto/corelib/text/qchar/CMakeLists.txt28
-rw-r--r--tests/auto/corelib/text/qchar/tst_qchar.cpp78
-rw-r--r--tests/auto/corelib/text/qcollator/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/text/qcollator/tst_qcollator.cpp48
-rw-r--r--tests/auto/corelib/text/qlatin1string/.gitignore1
-rw-r--r--tests/auto/corelib/text/qlatin1string/CMakeLists.txt16
-rw-r--r--tests/auto/corelib/text/qlatin1string/tst_qlatin1string.cpp298
-rw-r--r--tests/auto/corelib/text/qlatin1stringmatcher/CMakeLists.txt20
-rw-r--r--tests/auto/corelib/text/qlatin1stringmatcher/tst_qlatin1stringmatcher.cpp567
-rw-r--r--tests/auto/corelib/text/qlatin1stringview/.gitignore1
-rw-r--r--tests/auto/corelib/text/qlatin1stringview/CMakeLists.txt22
-rw-r--r--tests/auto/corelib/text/qlatin1stringview/tst_qlatin1stringview.cpp519
-rw-r--r--tests/auto/corelib/text/qlocale/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qlocale/syslocaleapp/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/text/qlocale/syslocaleapp/syslocaleapp.cpp39
-rw-r--r--tests/auto/corelib/text/qlocale/test/CMakeLists.txt7
-rw-r--r--tests/auto/corelib/text/qlocale/tst_qlocale.cpp1976
-rw-r--r--tests/auto/corelib/text/qregularexpression/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp207
-rw-r--r--tests/auto/corelib/text/qstring/CMakeLists.txt60
-rw-r--r--tests/auto/corelib/text/qstring/double_data.h29
-rw-r--r--tests/auto/corelib/text/qstring/tst_qstring.cpp5752
-rw-r--r--tests/auto/corelib/text/qstring/tst_qstring_mac.mm42
-rw-r--r--tests/auto/corelib/text/qstring/tst_qstring_wasm.cpp29
-rw-r--r--tests/auto/corelib/text/qstring_no_cast_from_bytearray/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qstring_no_cast_from_bytearray/tst_qstring_no_cast_from_bytearray.cpp29
-rw-r--r--tests/auto/corelib/text/qstringapisymmetry/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp1243
-rw-r--r--tests/auto/corelib/text/qstringbuilder/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder1/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder1/stringbuilder.cpp276
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder1/tst_qstringbuilder1.cpp39
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder2/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder2/tst_qstringbuilder2.cpp39
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder3/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder3/tst_qstringbuilder3.cpp39
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder4/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qstringbuilder/qstringbuilder4/tst_qstringbuilder4.cpp39
-rw-r--r--tests/auto/corelib/text/qstringconverter/BLACKLIST3
-rw-r--r--tests/auto/corelib/text/qstringconverter/CMakeLists.txt29
-rw-r--r--tests/auto/corelib/text/qstringconverter/euc_kr.txt1
-rw-r--r--tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp1304
-rw-r--r--tests/auto/corelib/text/qstringconverter/utf8.txt1
-rw-r--r--tests/auto/corelib/text/qstringiterator/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/text/qstringiterator/tst_qstringiterator.cpp29
-rw-r--r--tests/auto/corelib/text/qstringlist/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qstringlist/tst_qstringlist.cpp218
-rw-r--r--tests/auto/corelib/text/qstringmatcher/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qstringmatcher/tst_qstringmatcher.cpp56
-rw-r--r--tests/auto/corelib/text/qstringtokenizer/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/text/qstringtokenizer/tst_qstringtokenizer.cpp45
-rw-r--r--tests/auto/corelib/text/qstringview/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/text/qstringview/tst_qstringview.cpp82
-rw-r--r--tests/auto/corelib/text/qtextboundaryfinder/CMakeLists.txt34
-rw-r--r--tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt731
-rw-r--r--tests/auto/corelib/text/qtextboundaryfinder/data/LineBreakTest.txt3472
-rw-r--r--tests/auto/corelib/text/qtextboundaryfinder/data/LineBreakTest.txt.full7686
-rw-r--r--tests/auto/corelib/text/qtextboundaryfinder/data/ReadMe.full.txt4
-rw-r--r--tests/auto/corelib/text/qtextboundaryfinder/data/SentenceBreakTest.txt22
-rw-r--r--tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.html73
-rw-r--r--tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.txt103
-rw-r--r--tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.txt.full1851
-rw-r--r--tests/auto/corelib/text/qtextboundaryfinder/tst_qtextboundaryfinder.cpp168
-rw-r--r--tests/auto/corelib/text/qunicodetools/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/text/qunicodetools/tst_qunicodetools.cpp31
-rw-r--r--tests/auto/corelib/text/shared/test_number_shared.h32
-rw-r--r--tests/auto/corelib/thread/CMakeLists.txt31
-rw-r--r--tests/auto/corelib/thread/qatomicint/BLACKLIST3
-rw-r--r--tests/auto/corelib/thread/qatomicint/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp50
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/char/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/char16_t/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/char32_t/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/int/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/long/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/qlonglong/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/qptrdiff/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/quintptr/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/qulonglong/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/schar/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/short/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp189
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/uchar/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/uint/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/ulong/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/ushort/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicinteger/wchar_t/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicpointer/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp31
-rw-r--r--tests/auto/corelib/thread/qfuture/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/thread/qfuture/tst_qfuture.cpp1184
-rw-r--r--tests/auto/corelib/thread/qfuturesynchronizer/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qfuturesynchronizer/tst_qfuturesynchronizer.cpp64
-rw-r--r--tests/auto/corelib/thread/qfuturewatcher/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp158
-rw-r--r--tests/auto/corelib/thread/qmutex/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/thread/qmutex/tst_qmutex.cpp248
-rw-r--r--tests/auto/corelib/thread/qmutexlocker/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qmutexlocker/tst_qmutexlocker.cpp109
-rw-r--r--tests/auto/corelib/thread/qpromise/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/thread/qpromise/snippet_qpromise.cpp55
-rw-r--r--tests/auto/corelib/thread/qpromise/tst_qpromise.cpp256
-rw-r--r--tests/auto/corelib/thread/qreadlocker/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qreadlocker/tst_qreadlocker.cpp29
-rw-r--r--tests/auto/corelib/thread/qreadwritelock/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp67
-rw-r--r--tests/auto/corelib/thread/qresultstore/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp129
-rw-r--r--tests/auto/corelib/thread/qsemaphore/BLACKLIST6
-rw-r--r--tests/auto/corelib/thread/qsemaphore/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp29
-rw-r--r--tests/auto/corelib/thread/qthread/BLACKLIST2
-rw-r--r--tests/auto/corelib/thread/qthread/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/thread/qthread/tst_qthread.cpp191
-rw-r--r--tests/auto/corelib/thread/qthreadonce/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qthreadonce/qthreadonce.cpp29
-rw-r--r--tests/auto/corelib/thread/qthreadonce/qthreadonce.h29
-rw-r--r--tests/auto/corelib/thread/qthreadonce/tst_qthreadonce.cpp29
-rw-r--r--tests/auto/corelib/thread/qthreadpool/BLACKLIST4
-rw-r--r--tests/auto/corelib/thread/qthreadpool/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp188
-rw-r--r--tests/auto/corelib/thread/qthreadstorage/BLACKLIST3
-rw-r--r--tests/auto/corelib/thread/qthreadstorage/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qthreadstorage/crashonexit/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/thread/qthreadstorage/crashonexit/crashOnExit.cpp29
-rw-r--r--tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp34
-rw-r--r--tests/auto/corelib/thread/qwaitcondition/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp33
-rw-r--r--tests/auto/corelib/thread/qwritelocker/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/thread/qwritelocker/tst_qwritelocker.cpp29
-rw-r--r--tests/auto/corelib/time/CMakeLists.txt7
-rw-r--r--tests/auto/corelib/time/qcalendar/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp104
-rw-r--r--tests/auto/corelib/time/qdate/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/time/qdate/tst_qdate.cpp891
-rw-r--r--tests/auto/corelib/time/qdatetime/CMakeLists.txt18
-rw-r--r--tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp2354
-rw-r--r--tests/auto/corelib/time/qdatetime/tst_qdatetime_mac.mm33
-rw-r--r--tests/auto/corelib/time/qdatetimeparser/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/time/qdatetimeparser/tst_qdatetimeparser.cpp91
-rw-r--r--tests/auto/corelib/time/qtime/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/time/qtime/tst_qtime.cpp227
-rw-r--r--tests/auto/corelib/time/qtimezone/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp741
-rw-r--r--tests/auto/corelib/time/qtimezone/tst_qtimezone_darwin.mm33
-rw-r--r--tests/auto/corelib/tools/CMakeLists.txt17
-rw-r--r--tests/auto/corelib/tools/collections/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/tools/collections/tst_collections.cpp106
-rw-r--r--tests/auto/corelib/tools/containerapisymmetry/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp528
-rw-r--r--tests/auto/corelib/tools/qalgorithms/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qalgorithms/tst_qalgorithms.cpp101
-rw-r--r--tests/auto/corelib/tools/qarraydata/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qarraydata/simplevector.h47
-rw-r--r--tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp47
-rw-r--r--tests/auto/corelib/tools/qatomicscopedvaluerollback/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp164
-rw-r--r--tests/auto/corelib/tools/qbitarray/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qbitarray/tst_qbitarray.cpp324
-rw-r--r--tests/auto/corelib/tools/qcache/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qcache/tst_qcache.cpp30
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/testhelper/CMakeLists.txt3
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.cpp29
-rw-r--r--tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp84
-rw-r--r--tests/auto/corelib/tools/qcontiguouscache/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qcontiguouscache/tst_qcontiguouscache.cpp57
-rw-r--r--tests/auto/corelib/tools/qcryptographichash/CMakeLists.txt27
-rw-r--r--tests/auto/corelib/tools/qcryptographichash/tst_qcryptographichash.cpp241
-rw-r--r--tests/auto/corelib/tools/qduplicatetracker/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp52
-rw-r--r--tests/auto/corelib/tools/qeasingcurve/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp49
-rw-r--r--tests/auto/corelib/tools/qexplicitlyshareddatapointer/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qexplicitlyshareddatapointer/tst_qexplicitlyshareddatapointer.cpp30
-rw-r--r--tests/auto/corelib/tools/qflatmap/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp177
-rw-r--r--tests/auto/corelib/tools/qfreelist/CMakeLists.txt19
-rw-r--r--tests/auto/corelib/tools/qfreelist/tst_qfreelist.cpp32
-rw-r--r--tests/auto/corelib/tools/qhash/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/tools/qhash/tst_qhash.cpp671
-rw-r--r--tests/auto/corelib/tools/qhashfunctions/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qhashfunctions/tst_qhashfunctions.cpp347
-rw-r--r--tests/auto/corelib/tools/qhashseed/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qhashseed/tst_qhashseed.cpp29
-rw-r--r--tests/auto/corelib/tools/qhashseed/tst_qhashseed_helper.cpp29
-rw-r--r--tests/auto/corelib/tools/qline/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/tools/qline/tst_qline.cpp71
-rw-r--r--tests/auto/corelib/tools/qlist/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/tools/qlist/tst_qlist.cpp296
-rw-r--r--tests/auto/corelib/tools/qmacautoreleasepool/CMakeLists.txt12
-rw-r--r--tests/auto/corelib/tools/qmacautoreleasepool/tst_qmacautoreleasepool.mm52
-rw-r--r--tests/auto/corelib/tools/qmakearray/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/tools/qmakearray/tst_qmakearray.cpp29
-rw-r--r--tests/auto/corelib/tools/qmap/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/tools/qmap/tst_qmap.cpp368
-rw-r--r--tests/auto/corelib/tools/qmargins/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qmargins/tst_qmargins.cpp92
-rw-r--r--tests/auto/corelib/tools/qmessageauthenticationcode/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qmessageauthenticationcode/tst_qmessageauthenticationcode.cpp140
-rw-r--r--tests/auto/corelib/tools/qoffsetstringarray/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/tools/qoffsetstringarray/tst_qoffsetstringarray.cpp40
-rw-r--r--tests/auto/corelib/tools/qpair/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qpair/tst_qpair.cpp31
-rw-r--r--tests/auto/corelib/tools/qpoint/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qpoint/tst_qpoint.cpp80
-rw-r--r--tests/auto/corelib/tools/qpointf/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qpointf/tst_qpointf.cpp51
-rw-r--r--tests/auto/corelib/tools/qqueue/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qqueue/tst_qqueue.cpp29
-rw-r--r--tests/auto/corelib/tools/qrect/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qrect/tst_qrect.cpp98
-rw-r--r--tests/auto/corelib/tools/qringbuffer/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/tools/qringbuffer/tst_qringbuffer.cpp30
-rw-r--r--tests/auto/corelib/tools/qscopedpointer/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp97
-rw-r--r--tests/auto/corelib/tools/qscopedvaluerollback/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp29
-rw-r--r--tests/auto/corelib/tools/qscopeguard/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qscopeguard/tst_qscopeguard.cpp52
-rw-r--r--tests/auto/corelib/tools/qset/CMakeLists.txt14
-rw-r--r--tests/auto/corelib/tools/qset/tst_qset.cpp113
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/externaltests.cpp31
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/externaltests.h29
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/forwarddeclared.cpp31
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/forwarddeclared.h31
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/nontracked.cpp29
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/nontracked.h29
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp242
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/wrapper.cpp29
-rw-r--r--tests/auto/corelib/tools/qsharedpointer/wrapper.h29
-rw-r--r--tests/auto/corelib/tools/qsize/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qsize/tst_qsize.cpp80
-rw-r--r--tests/auto/corelib/tools/qsizef/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qsizef/tst_qsizef.cpp51
-rw-r--r--tests/auto/corelib/tools/qspan/CMakeLists.txt13
-rw-r--r--tests/auto/corelib/tools/qspan/tst_qspan.cpp450
-rw-r--r--tests/auto/corelib/tools/qstl/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qstl/tst_qstl.cpp29
-rw-r--r--tests/auto/corelib/tools/qtaggedpointer/CMakeLists.txt11
-rw-r--r--tests/auto/corelib/tools/qtaggedpointer/tst_qtaggedpointer.cpp71
-rw-r--r--tests/auto/corelib/tools/qtimeline/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qtimeline/tst_qtimeline.cpp83
-rw-r--r--tests/auto/corelib/tools/qtyperevision/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/tools/qtyperevision/tst_qtyperevision.cpp202
-rw-r--r--tests/auto/corelib/tools/quniquehandle/CMakeLists.txt15
-rw-r--r--tests/auto/corelib/tools/quniquehandle/tst_quniquehandle.cpp308
-rw-r--r--tests/auto/corelib/tools/qvarlengtharray/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp199
-rw-r--r--tests/auto/corelib/tools/qversionnumber/CMakeLists.txt9
-rw-r--r--tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp230
-rw-r--r--tests/auto/dbus/CMakeLists.txt4
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/BLACKLIST2
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/myobject.h31
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/qmyserver/CMakeLists.txt7
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/qmyserver/qmyserver.cpp31
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp73
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/CMakeLists.txt13
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/interface.cpp38
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/interface.h29
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/org.qtproject.QtDBus.Pinger.xml2
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface/CMakeLists.txt5
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/qpinger/CMakeLists.txt7
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp31
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp35
-rw-r--r--tests/auto/dbus/qdbusconnection/CMakeLists.txt13
-rw-r--r--tests/auto/dbus/qdbusconnection/tst_qdbusconnection.conf23
-rw-r--r--tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp106
-rw-r--r--tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h46
-rw-r--r--tests/auto/dbus/qdbusconnection_delayed/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbusconnection_delayed/tst_qdbusconnection_delayed.cpp29
-rw-r--r--tests/auto/dbus/qdbusconnection_no_app/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbusconnection_no_app/tst_qdbusconnection_no_app.cpp29
-rw-r--r--tests/auto/dbus/qdbusconnection_no_bus/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbusconnection_no_bus/tst_qdbusconnection_no_bus.cpp29
-rw-r--r--tests/auto/dbus/qdbusconnection_no_libdbus/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbusconnection_no_libdbus/tst_qdbusconnection_no_libdbus.cpp29
-rw-r--r--tests/auto/dbus/qdbusconnection_signalorder/CMakeLists.txt19
-rw-r--r--tests/auto/dbus/qdbusconnection_signalorder/tst_qdbusconnection_signalorder.cpp103
-rw-r--r--tests/auto/dbus/qdbusconnection_spyhook/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbusconnection_spyhook/tst_qdbusconnection_spyhook.cpp29
-rw-r--r--tests/auto/dbus/qdbuscontext/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbuscontext/tst_qdbuscontext.cpp29
-rw-r--r--tests/auto/dbus/qdbusinterface/CMakeLists.txt21
-rw-r--r--tests/auto/dbus/qdbusinterface/myobject.h29
-rw-r--r--tests/auto/dbus/qdbusinterface/qmyserver/CMakeLists.txt7
-rw-r--r--tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp31
-rw-r--r--tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp148
-rw-r--r--tests/auto/dbus/qdbuslocalcalls/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbuslocalcalls/tst_qdbuslocalcalls.cpp57
-rw-r--r--tests/auto/dbus/qdbusmarshall/CMakeLists.txt12
-rw-r--r--tests/auto/dbus/qdbusmarshall/common.h104
-rw-r--r--tests/auto/dbus/qdbusmarshall/qdbusmarshall/CMakeLists.txt9
-rw-r--r--tests/auto/dbus/qdbusmarshall/qpong/CMakeLists.txt5
-rw-r--r--tests/auto/dbus/qdbusmarshall/qpong/qpong.cpp33
-rw-r--r--tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp117
-rw-r--r--tests/auto/dbus/qdbusmetaobject/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbusmetaobject/tst_qdbusmetaobject.cpp29
-rw-r--r--tests/auto/dbus/qdbusmetatype/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbusmetatype/tst_qdbusmetatype.cpp57
-rw-r--r--tests/auto/dbus/qdbuspendingcall/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbuspendingcall/tst_qdbuspendingcall.cpp33
-rw-r--r--tests/auto/dbus/qdbuspendingreply/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbuspendingreply/tst_qdbuspendingreply.cpp29
-rw-r--r--tests/auto/dbus/qdbusreply/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbusreply/tst_qdbusreply.cpp29
-rw-r--r--tests/auto/dbus/qdbusservicewatcher/CMakeLists.txt9
-rw-r--r--tests/auto/dbus/qdbusservicewatcher/tst_qdbusservicewatcher.cpp87
-rw-r--r--tests/auto/dbus/qdbusthreading/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbusthreading/tst_qdbusthreading.cpp29
-rw-r--r--tests/auto/dbus/qdbustype/CMakeLists.txt13
-rw-r--r--tests/auto/dbus/qdbustype/tst_qdbustype.cpp36
-rw-r--r--tests/auto/dbus/qdbusxmlparser/CMakeLists.txt11
-rw-r--r--tests/auto/dbus/qdbusxmlparser/tst_qdbusxmlparser.cpp71
-rw-r--r--tests/auto/gui/CMakeLists.txt3
-rw-r--r--tests/auto/gui/image/CMakeLists.txt8
-rw-r--r--tests/auto/gui/image/qicoimageformat/CMakeLists.txt40
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/masked/24bpp.icobin0 -> 12862 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/masked/24bpp.pngbin0 -> 3911 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/masked/32bpp.icobin0 -> 16958 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/icons/masked/32bpp.pngbin0 -> 5536 bytes
-rw-r--r--tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp58
-rw-r--r--tests/auto/gui/image/qicon/CMakeLists.txt17
-rw-r--r--tests/auto/gui/image/qicon/icons/fallbacktheme/16x16/edit-cut.pngbin0 -> 267 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/fallbacktheme/index.theme8
-rw-r--r--tests/auto/gui/image/qicon/icons/hicolor/16x16/hicolor-icon.pngbin0 -> 267 bytes
-rw-r--r--tests/auto/gui/image/qicon/icons/hicolor/index.theme11
-rw-r--r--tests/auto/gui/image/qicon/icons/testtheme/index.theme2
-rw-r--r--tests/auto/gui/image/qicon/icons/themeparent/index.theme1
-rw-r--r--tests/auto/gui/image/qicon/tst_qicon.cpp84
-rw-r--r--tests/auto/gui/image/qiconhighdpi/CMakeLists.txt11
-rw-r--r--tests/auto/gui/image/qiconhighdpi/tst_qiconhighdpi.cpp47
-rw-r--r--tests/auto/gui/image/qimage/CMakeLists.txt49
-rw-r--r--tests/auto/gui/image/qimage/images/CGATS001Compat-v2-micro.iccbin0 -> 8464 bytes
-rw-r--r--tests/auto/gui/image/qimage/tst_qimage.cpp313
-rw-r--r--tests/auto/gui/image/qimageiohandler/CMakeLists.txt11
-rw-r--r--tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.cpp29
-rw-r--r--tests/auto/gui/image/qimagereader/BLACKLIST8
-rw-r--r--tests/auto/gui/image/qimagereader/CMakeLists.txt32
-rw-r--r--tests/auto/gui/image/qimagereader/images/image.pbm10
-rw-r--r--tests/auto/gui/image/qimagereader/tst_qimagereader.cpp344
-rw-r--r--tests/auto/gui/image/qimagewriter/CMakeLists.txt41
-rw-r--r--tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp31
-rw-r--r--tests/auto/gui/image/qmovie/CMakeLists.txt22
-rw-r--r--tests/auto/gui/image/qmovie/multiframe/Obj_N2_Internal_Mem.icobin0 -> 25214 bytes
-rw-r--r--tests/auto/gui/image/qmovie/tst_qmovie.cpp112
-rw-r--r--tests/auto/gui/image/qpicture/CMakeLists.txt11
-rw-r--r--tests/auto/gui/image/qpicture/tst_qpicture.cpp29
-rw-r--r--tests/auto/gui/image/qpixmap/CMakeLists.txt15
-rw-r--r--tests/auto/gui/image/qpixmap/tst_qpixmap.cpp31
-rw-r--r--tests/auto/gui/image/qpixmapcache/CMakeLists.txt11
-rw-r--r--tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp192
-rw-r--r--tests/auto/gui/itemmodels/CMakeLists.txt3
-rw-r--r--tests/auto/gui/itemmodels/qfilesystemmodel/BLACKLIST3
-rw-r--r--tests/auto/gui/itemmodels/qfilesystemmodel/CMakeLists.txt20
-rw-r--r--tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp221
-rw-r--r--tests/auto/gui/itemmodels/qstandarditem/CMakeLists.txt11
-rw-r--r--tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.cpp79
-rw-r--r--tests/auto/gui/itemmodels/qstandarditemmodel/CMakeLists.txt12
-rw-r--r--tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp268
-rw-r--r--tests/auto/gui/kernel/CMakeLists.txt10
-rw-r--r--tests/auto/gui/kernel/noqteventloop/CMakeLists.txt13
-rw-r--r--tests/auto/gui/kernel/noqteventloop/tst_noqteventloop.cpp32
-rw-r--r--tests/auto/gui/kernel/qaction/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qaction/tst_qaction.cpp91
-rw-r--r--tests/auto/gui/kernel/qactiongroup/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qactiongroup/tst_qactiongroup.cpp29
-rw-r--r--tests/auto/gui/kernel/qaddpostroutine/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qaddpostroutine/tst_qaddpostroutine.cpp29
-rw-r--r--tests/auto/gui/kernel/qbackingstore/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qbackingstore/tst_qbackingstore.cpp117
-rw-r--r--tests/auto/gui/kernel/qclipboard/CMakeLists.txt9
-rw-r--r--tests/auto/gui/kernel/qclipboard/copier/CMakeLists.txt15
-rw-r--r--tests/auto/gui/kernel/qclipboard/copier/main.cpp29
-rw-r--r--tests/auto/gui/kernel/qclipboard/paster/CMakeLists.txt15
-rw-r--r--tests/auto/gui/kernel/qclipboard/paster/main.cpp29
-rw-r--r--tests/auto/gui/kernel/qclipboard/test/BLACKLIST5
-rw-r--r--tests/auto/gui/kernel/qclipboard/test/CMakeLists.txt8
-rw-r--r--tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp111
-rw-r--r--tests/auto/gui/kernel/qcursor/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qcursor/tst_qcursor.cpp29
-rw-r--r--tests/auto/gui/kernel/qdrag/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qdrag/tst_qdrag.cpp29
-rw-r--r--tests/auto/gui/kernel/qevent/CMakeLists.txt12
-rw-r--r--tests/auto/gui/kernel/qevent/tst_qevent.cpp107
-rw-r--r--tests/auto/gui/kernel/qfileopenevent/CMakeLists.txt9
-rw-r--r--tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/CMakeLists.txt8
-rw-r--r--tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/qfileopeneventexternal.cpp33
-rw-r--r--tests/auto/gui/kernel/qfileopenevent/test/CMakeLists.txt5
-rw-r--r--tests/auto/gui/kernel/qfileopenevent/test/tst_qfileopenevent.cpp49
-rw-r--r--tests/auto/gui/kernel/qguiapplication/BLACKLIST4
-rw-r--r--tests/auto/gui/kernel/qguiapplication/CMakeLists.txt58
-rw-r--r--tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp216
-rw-r--r--tests/auto/gui/kernel/qguichronotimer/CMakeLists.txt38
-rw-r--r--tests/auto/gui/kernel/qguieventdispatcher/CMakeLists.txt40
-rw-r--r--tests/auto/gui/kernel/qguieventloop/CMakeLists.txt13
-rw-r--r--tests/auto/gui/kernel/qguimetatype/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp103
-rw-r--r--tests/auto/gui/kernel/qguitimer/CMakeLists.txt39
-rw-r--r--tests/auto/gui/kernel/qguivariant/CMakeLists.txt3
-rw-r--r--tests/auto/gui/kernel/qguivariant/no_application/CMakeLists.txt13
-rw-r--r--tests/auto/gui/kernel/qguivariant/no_application/main.cpp29
-rw-r--r--tests/auto/gui/kernel/qguivariant/test/CMakeLists.txt32
-rw-r--r--tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp31
-rw-r--r--tests/auto/gui/kernel/qhighdpi/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp249
-rw-r--r--tests/auto/gui/kernel/qinputdevice/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qinputdevice/tst_qinputdevice.cpp81
-rw-r--r--tests/auto/gui/kernel/qinputmethod/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qinputmethod/tst_qinputmethod.cpp43
-rw-r--r--tests/auto/gui/kernel/qkeyevent/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qkeyevent/tst_qkeyevent.cpp31
-rw-r--r--tests/auto/gui/kernel/qkeysequence/CMakeLists.txt31
-rw-r--r--tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp38
-rw-r--r--tests/auto/gui/kernel/qmouseevent/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp55
-rw-r--r--tests/auto/gui/kernel/qmouseevent_modal/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp29
-rw-r--r--tests/auto/gui/kernel/qopenglwindow/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qopenglwindow/tst_qopenglwindow.cpp32
-rw-r--r--tests/auto/gui/kernel/qpalette/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qpalette/tst_qpalette.cpp177
-rw-r--r--tests/auto/gui/kernel/qpixelformat/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qpixelformat/tst_qpixelformat.cpp29
-rw-r--r--tests/auto/gui/kernel/qrasterwindow/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qrasterwindow/tst_qrasterwindow.cpp31
-rw-r--r--tests/auto/gui/kernel/qscreen/BLACKLIST4
-rw-r--r--tests/auto/gui/kernel/qscreen/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qscreen/tst_qscreen.cpp74
-rw-r--r--tests/auto/gui/kernel/qshortcut/CMakeLists.txt12
-rw-r--r--tests/auto/gui/kernel/qshortcut/tst_qshortcut.cpp92
-rw-r--r--tests/auto/gui/kernel/qsurfaceformat/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qsurfaceformat/tst_qsurfaceformat.cpp29
-rw-r--r--tests/auto/gui/kernel/qtouchevent/BLACKLIST6
-rw-r--r--tests/auto/gui/kernel/qtouchevent/CMakeLists.txt11
-rw-r--r--tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp267
-rw-r--r--tests/auto/gui/kernel/qwindow/BLACKLIST14
-rw-r--r--tests/auto/gui/kernel/qwindow/CMakeLists.txt35
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_foreignwindow.cpp190
-rw-r--r--tests/auto/gui/kernel/qwindow/tst_qwindow.cpp654
-rw-r--r--tests/auto/gui/math3d/CMakeLists.txt3
-rw-r--r--tests/auto/gui/math3d/qmatrixnxn/CMakeLists.txt13
-rw-r--r--tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp204
-rw-r--r--tests/auto/gui/math3d/qquaternion/CMakeLists.txt11
-rw-r--r--tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp65
-rw-r--r--tests/auto/gui/math3d/qvectornd/CMakeLists.txt11
-rw-r--r--tests/auto/gui/math3d/qvectornd/tst_qvectornd.cpp62
-rw-r--r--tests/auto/gui/painting/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qbrush/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qbrush/tst_qbrush.cpp29
-rw-r--r--tests/auto/gui/painting/qcolor/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qcolor/tst_qcolor.cpp106
-rw-r--r--tests/auto/gui/painting/qcolorspace/CMakeLists.txt40
-rw-r--r--tests/auto/gui/painting/qcolorspace/resources/CGATS001Compat-v2-micro.iccbin0 -> 8464 bytes
-rw-r--r--tests/auto/gui/painting/qcolorspace/resources/VideoHD.iccbin0 -> 786 bytes
-rw-r--r--tests/auto/gui/painting/qcolorspace/resources/sGrey-v4.iccbin0 -> 360 bytes
-rw-r--r--tests/auto/gui/painting/qcolorspace/resources/sRGB_ICC_v4_Appearance.iccbin0 -> 63868 bytes
-rw-r--r--tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp442
-rw-r--r--tests/auto/gui/painting/qcolortransform/CMakeLists.txt20
-rw-r--r--tests/auto/gui/painting/qcolortransform/tst_qcolortransform.cpp380
-rw-r--r--tests/auto/gui/painting/qpagelayout/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qpagelayout/tst_qpagelayout.cpp151
-rw-r--r--tests/auto/gui/painting/qpageranges/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qpageranges/tst_qpageranges.cpp33
-rw-r--r--tests/auto/gui/painting/qpagesize/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qpagesize/tst_qpagesize.cpp31
-rw-r--r--tests/auto/gui/painting/qpaintengine/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qpaintengine/tst_qpaintengine.cpp29
-rw-r--r--tests/auto/gui/painting/qpainter/CMakeLists.txt208
-rw-r--r--tests/auto/gui/painting/qpainter/tst_qpainter.cpp253
-rw-r--r--tests/auto/gui/painting/qpainter/utils/createImages/main.cpp29
-rw-r--r--tests/auto/gui/painting/qpainterpath/BLACKLIST2
-rw-r--r--tests/auto/gui/painting/qpainterpath/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp127
-rw-r--r--tests/auto/gui/painting/qpainterpathstroker/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qpainterpathstroker/tst_qpainterpathstroker.cpp29
-rw-r--r--tests/auto/gui/painting/qpathclipper/CMakeLists.txt16
-rw-r--r--tests/auto/gui/painting/qpathclipper/pathcompare.h29
-rw-r--r--tests/auto/gui/painting/qpathclipper/paths.cpp29
-rw-r--r--tests/auto/gui/painting/qpathclipper/paths.h29
-rw-r--r--tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp57
-rw-r--r--tests/auto/gui/painting/qpdfwriter/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp29
-rw-r--r--tests/auto/gui/painting/qpen/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qpen/tst_qpen.cpp29
-rw-r--r--tests/auto/gui/painting/qpolygon/CMakeLists.txt13
-rw-r--r--tests/auto/gui/painting/qpolygon/tst_qpolygon.cpp45
-rw-r--r--tests/auto/gui/painting/qregion/CMakeLists.txt11
-rw-r--r--tests/auto/gui/painting/qregion/tst_qregion.cpp29
-rw-r--r--tests/auto/gui/painting/qtransform/CMakeLists.txt13
-rw-r--r--tests/auto/gui/painting/qtransform/tst_qtransform.cpp29
-rw-r--r--tests/auto/gui/platform/CMakeLists.txt3
-rw-r--r--tests/auto/gui/platform/qx11info/CMakeLists.txt11
-rw-r--r--tests/auto/gui/platform/qx11info/tst_qx11info.cpp41
-rw-r--r--tests/auto/gui/qopengl/CMakeLists.txt11
-rw-r--r--tests/auto/gui/qopengl/tst_qopengl.cpp54
-rw-r--r--tests/auto/gui/qopenglconfig/CMakeLists.txt11
-rw-r--r--tests/auto/gui/qopenglconfig/tst_qopenglconfig.cpp29
-rw-r--r--tests/auto/gui/qvulkan/CMakeLists.txt11
-rw-r--r--tests/auto/gui/qvulkan/tst_qvulkan.cpp58
-rw-r--r--tests/auto/gui/rhi/CMakeLists.txt3
-rw-r--r--tests/auto/gui/rhi/qrhi/BLACKLIST2
-rw-r--r--tests/auto/gui/rhi/qrhi/CMakeLists.txt32
-rw-r--r--tests/auto/gui/rhi/qrhi/data/buildshaders.bat55
-rw-r--r--tests/auto/gui/rhi/qrhi/data/half.vert10
-rw-r--r--tests/auto/gui/rhi/qrhi/data/half.vert.qsbbin0 -> 815 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/multiview.frag10
-rw-r--r--tests/auto/gui/rhi/qrhi/data/multiview.frag.qsbbin0 -> 2425 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/multiview.vert18
-rw-r--r--tests/auto/gui/rhi/qrhi/data/multiview.vert.qsbbin0 -> 3644 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simpletess.frag10
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simpletess.frag.qsbbin0 -> 591 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simpletess.tesc22
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simpletess.tesc.qsbbin0 -> 1402 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simpletess.tese17
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simpletess.tese.qsbbin0 -> 1401 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simpletess.vert12
-rw-r--r--tests/auto/gui/rhi/qrhi/data/simpletess.vert.qsbbin0 -> 936 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer.comp28
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer.comp.qsbbin0 -> 1262 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.comp25
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.comp.qsbbin0 -> 1415 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.frag33
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.frag.qsbbin0 -> 1259 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tesc42
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tesc.qsbbin0 -> 2024 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tese39
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tese.qsbbin0 -> 1854 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.vert48
-rw-r--r--tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.vert.qsbbin0 -> 2047 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.frag.qsbbin0 -> 590 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tesc56
-rw-r--r--tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tesc.qsbbin0 -> 2873 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tese96
-rw-r--r--tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tese.qsbbin0 -> 4526 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.vert20
-rw-r--r--tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.vert.qsbbin0 -> 1306 bytes
-rw-r--r--tests/auto/gui/rhi/qrhi/tst_qrhi.cpp2441
-rw-r--r--tests/auto/gui/rhi/qshader/CMakeLists.txt32
-rw-r--r--tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.frag.qsbbin0 -> 729 bytes
-rw-r--r--tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.tesc.qsbbin0 -> 1749 bytes
-rw-r--r--tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.tese.qsbbin0 -> 2390 bytes
-rw-r--r--tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.vert.qsbbin0 -> 1106 bytes
-rw-r--r--tests/auto/gui/rhi/qshader/data/storage_buffer_info_v8.comp.qsbbin0 -> 902 bytes
-rw-r--r--tests/auto/gui/rhi/qshader/data_src/color.vert (renamed from tests/auto/gui/rhi/qshader/data/color.vert)0
-rw-r--r--tests/auto/gui/rhi/qshader/data_src/texture.frag (renamed from tests/auto/gui/rhi/qshader/data/texture.frag)0
-rw-r--r--tests/auto/gui/rhi/qshader/data_src/texture_sep.frag (renamed from tests/auto/gui/rhi/qshader/data/texture_sep.frag)0
-rw-r--r--tests/auto/gui/rhi/qshader/tst_qshader.cpp264
-rw-r--r--tests/auto/gui/text/CMakeLists.txt10
-rw-r--r--tests/auto/gui/text/qabstracttextdocumentlayout/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qabstracttextdocumentlayout/tst_qabstracttextdocumentlayout.cpp35
-rw-r--r--tests/auto/gui/text/qcssparser/CMakeLists.txt53
-rw-r--r--tests/auto/gui/text/qcssparser/tst_qcssparser.cpp157
-rw-r--r--tests/auto/gui/text/qfont/BLACKLIST2
-rw-r--r--tests/auto/gui/text/qfont/CMakeLists.txt35
-rw-r--r--tests/auto/gui/text/qfont/tst_qfont.cpp134
-rw-r--r--tests/auto/gui/text/qfontcache/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qfontcache/tst_qfontcache.cpp29
-rw-r--r--tests/auto/gui/text/qfontdatabase/BLACKLIST7
-rw-r--r--tests/auto/gui/text/qfontdatabase/CMakeLists.txt15
-rw-r--r--tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp192
-rw-r--r--tests/auto/gui/text/qfontmetrics/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp51
-rw-r--r--tests/auto/gui/text/qglyphrun/BLACKLIST3
-rw-r--r--tests/auto/gui/text/qglyphrun/CMakeLists.txt27
-rw-r--r--tests/auto/gui/text/qglyphrun/Ligatures.otfbin0 -> 24624 bytes
-rw-r--r--tests/auto/gui/text/qglyphrun/tst_qglyphrun.cpp405
-rw-r--r--tests/auto/gui/text/qinputcontrol/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qinputcontrol/tst_qinputcontrol.cpp29
-rw-r--r--tests/auto/gui/text/qrawfont/BLACKLIST2
-rw-r--r--tests/auto/gui/text/qrawfont/CMakeLists.txt30
-rw-r--r--tests/auto/gui/text/qrawfont/tst_qrawfont.cpp53
-rw-r--r--tests/auto/gui/text/qstatictext/CMakeLists.txt15
-rw-r--r--tests/auto/gui/text/qstatictext/tst_qstatictext.cpp93
-rw-r--r--tests/auto/gui/text/qsyntaxhighlighter/CMakeLists.txt13
-rw-r--r--tests/auto/gui/text/qsyntaxhighlighter/tst_qsyntaxhighlighter.cpp37
-rw-r--r--tests/auto/gui/text/qtextblock/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qtextblock/tst_qtextblock.cpp29
-rw-r--r--tests/auto/gui/text/qtextcursor/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qtextcursor/tst_qtextcursor.cpp280
-rw-r--r--tests/auto/gui/text/qtextdocument/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qtextdocument/common.h29
-rw-r--r--tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp359
-rw-r--r--tests/auto/gui/text/qtextdocumentfragment/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp80
-rw-r--r--tests/auto/gui/text/qtextdocumentlayout/BLACKLIST3
-rw-r--r--tests/auto/gui/text/qtextdocumentlayout/CMakeLists.txt13
-rw-r--r--tests/auto/gui/text/qtextdocumentlayout/tst_qtextdocumentlayout.cpp66
-rw-r--r--tests/auto/gui/text/qtextformat/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qtextformat/tst_qtextformat.cpp59
-rw-r--r--tests/auto/gui/text/qtextimagehandler/CMakeLists.txt29
-rw-r--r--tests/auto/gui/text/qtextimagehandler/tst_qtextimagehandler.cpp60
-rw-r--r--tests/auto/gui/text/qtextlayout/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp200
-rw-r--r--tests/auto/gui/text/qtextlist/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qtextlist/tst_qtextlist.cpp87
-rw-r--r--tests/auto/gui/text/qtextmarkdownimporter/BLACKLIST3
-rw-r--r--tests/auto/gui/text/qtextmarkdownimporter/CMakeLists.txt19
-rw-r--r--tests/auto/gui/text/qtextmarkdownimporter/data/paragraphs.md9
-rw-r--r--tests/auto/gui/text/qtextmarkdownimporter/data/thematicBreaks.md1
-rw-r--r--tests/auto/gui/text/qtextmarkdownimporter/data/yaml-only.md6
-rw-r--r--tests/auto/gui/text/qtextmarkdownimporter/data/yaml.md11
-rw-r--r--tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp361
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/BLACKLIST2
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/CMakeLists.txt17
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/data/blockquotes.md10
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/data/blockquotesWithLists.md14
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/data/example.md2
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/data/links.md3
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/data/listItemWithBlockquote.md6
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/data/longHeadings.md9
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/data/yaml.md11
-rw-r--r--tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp631
-rw-r--r--tests/auto/gui/text/qtextobject/CMakeLists.txt13
-rw-r--r--tests/auto/gui/text/qtextobject/tst_qtextobject.cpp29
-rw-r--r--tests/auto/gui/text/qtextodfwriter/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qtextodfwriter/tst_qtextodfwriter.cpp33
-rw-r--r--tests/auto/gui/text/qtextpiecetable/CMakeLists.txt14
-rw-r--r--tests/auto/gui/text/qtextpiecetable/tst_qtextpiecetable.cpp185
-rw-r--r--tests/auto/gui/text/qtextscriptengine/CMakeLists.txt11
-rw-r--r--tests/auto/gui/text/qtextscriptengine/generate/CMakeLists.txt6
-rw-r--r--tests/auto/gui/text/qtextscriptengine/generate/main.cpp29
-rw-r--r--tests/auto/gui/text/qtextscriptengine/tst_qtextscriptengine.cpp38
-rw-r--r--tests/auto/gui/text/qtexttable/CMakeLists.txt13
-rw-r--r--tests/auto/gui/text/qtexttable/tst_qtexttable.cpp125
-rw-r--r--tests/auto/gui/text/qzip/CMakeLists.txt35
-rw-r--r--tests/auto/gui/util/CMakeLists.txt3
-rw-r--r--tests/auto/gui/util/qdesktopservices/CMakeLists.txt13
-rw-r--r--tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp50
-rw-r--r--tests/auto/gui/util/qdoublevalidator/CMakeLists.txt11
-rw-r--r--tests/auto/gui/util/qdoublevalidator/tst_qdoublevalidator.cpp120
-rw-r--r--tests/auto/gui/util/qintvalidator/CMakeLists.txt11
-rw-r--r--tests/auto/gui/util/qintvalidator/tst_qintvalidator.cpp75
-rw-r--r--tests/auto/gui/util/qregularexpressionvalidator/CMakeLists.txt11
-rw-r--r--tests/auto/gui/util/qregularexpressionvalidator/tst_qregularexpressionvalidator.cpp37
-rw-r--r--tests/auto/gui/util/qtexturefilereader/CMakeLists.txt29
-rw-r--r--tests/auto/gui/util/qtexturefilereader/texturefiles/invalid.ktxbin0 -> 69 bytes
-rw-r--r--tests/auto/gui/util/qtexturefilereader/tst_qtexturefilereader.cpp42
-rw-r--r--tests/auto/gui/util/qundogroup/CMakeLists.txt11
-rw-r--r--tests/auto/gui/util/qundogroup/tst_qundogroup.cpp49
-rw-r--r--tests/auto/gui/util/qundostack/CMakeLists.txt11
-rw-r--r--tests/auto/gui/util/qundostack/tst_qundostack.cpp73
-rw-r--r--tests/auto/guiapplauncher/examples.txt4
-rw-r--r--tests/auto/network-settings.h35
-rw-r--r--tests/auto/network/CMakeLists.txt8
-rw-r--r--tests/auto/network/access/CMakeLists.txt8
-rw-r--r--tests/auto/network/access/hpack/CMakeLists.txt14
-rw-r--r--tests/auto/network/access/hpack/tst_hpack.cpp31
-rw-r--r--tests/auto/network/access/hsts/CMakeLists.txt12
-rw-r--r--tests/auto/network/access/hsts/tst_qhsts.cpp118
-rw-r--r--tests/auto/network/access/http2/BLACKLIST2
-rw-r--r--tests/auto/network/access/http2/CMakeLists.txt12
-rw-r--r--tests/auto/network/access/http2/http2srv.cpp111
-rw-r--r--tests/auto/network/access/http2/http2srv.h45
-rw-r--r--tests/auto/network/access/http2/tst_http2.cpp345
-rw-r--r--tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt14
-rw-r--r--tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp35
-rw-r--r--tests/auto/network/access/qdecompresshelper/CMakeLists.txt16
-rw-r--r--tests/auto/network/access/qdecompresshelper/tst_qdecompresshelper.cpp49
-rw-r--r--tests/auto/network/access/qhttp2connection/CMakeLists.txt16
-rw-r--r--tests/auto/network/access/qhttp2connection/tst_qhttp2connection.cpp397
-rw-r--r--tests/auto/network/access/qhttpheaderparser/CMakeLists.txt19
-rw-r--r--tests/auto/network/access/qhttpheaderparser/tst_qhttpheaderparser.cpp94
-rw-r--r--tests/auto/network/access/qhttpheaders/CMakeLists.txt16
-rw-r--r--tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp552
-rw-r--r--tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt17
-rw-r--r--tests/auto/network/access/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp51
-rw-r--r--tests/auto/network/access/qhttpnetworkreply/CMakeLists.txt14
-rw-r--r--tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp82
-rw-r--r--tests/auto/network/access/qnetworkaccessmanager/CMakeLists.txt11
-rw-r--r--tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp29
-rw-r--r--tests/auto/network/access/qnetworkcachemetadata/CMakeLists.txt11
-rw-r--r--tests/auto/network/access/qnetworkcachemetadata/tst_qnetworkcachemetadata.cpp29
-rw-r--r--tests/auto/network/access/qnetworkcookie/CMakeLists.txt11
-rw-r--r--tests/auto/network/access/qnetworkcookie/tst_qnetworkcookie.cpp249
-rw-r--r--tests/auto/network/access/qnetworkcookiejar/CMakeLists.txt13
-rw-r--r--tests/auto/network/access/qnetworkcookiejar/testdata/publicsuffix/public_suffix_list.dafsabin0 -> 52422 bytes
-rw-r--r--tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp101
-rw-r--r--tests/auto/network/access/qnetworkdiskcache/CMakeLists.txt11
-rw-r--r--tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp74
-rw-r--r--tests/auto/network/access/qnetworkreply/BLACKLIST31
-rw-r--r--tests/auto/network/access/qnetworkreply/CMakeLists.txt9
-rw-r--r--tests/auto/network/access/qnetworkreply/certs/qt-test-server-cacert.pem30
-rw-r--r--tests/auto/network/access/qnetworkreply/certs/server.key38
-rw-r--r--tests/auto/network/access/qnetworkreply/certs/server.pem42
-rw-r--r--tests/auto/network/access/qnetworkreply/echo/CMakeLists.txt5
-rw-r--r--tests/auto/network/access/qnetworkreply/echo/main.cpp35
-rw-r--r--tests/auto/network/access/qnetworkreply/test/CMakeLists.txt23
-rw-r--r--tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp1498
-rw-r--r--tests/auto/network/access/qnetworkrequest/CMakeLists.txt11
-rw-r--r--tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp66
-rw-r--r--tests/auto/network/access/qnetworkrequestfactory/CMakeLists.txt17
-rw-r--r--tests/auto/network/access/qnetworkrequestfactory/tst_qnetworkrequestfactory.cpp423
-rw-r--r--tests/auto/network/access/qrestaccessmanager/CMakeLists.txt17
-rw-r--r--tests/auto/network/access/qrestaccessmanager/httptestserver.cpp268
-rw-r--r--tests/auto/network/access/qrestaccessmanager/httptestserver_p.h90
-rw-r--r--tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp844
-rw-r--r--tests/auto/network/kernel/CMakeLists.txt12
-rw-r--r--tests/auto/network/kernel/qauthenticator/CMakeLists.txt14
-rw-r--r--tests/auto/network/kernel/qauthenticator/tst_qauthenticator.cpp46
-rw-r--r--tests/auto/network/kernel/qdnslookup/BLACKLIST2
-rw-r--r--tests/auto/network/kernel/qdnslookup/CMakeLists.txt17
-rw-r--r--tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp469
-rw-r--r--tests/auto/network/kernel/qdnslookup_appless/CMakeLists.txt11
-rw-r--r--tests/auto/network/kernel/qdnslookup_appless/tst_qdnslookup_appless.cpp29
-rw-r--r--tests/auto/network/kernel/qhostaddress/CMakeLists.txt13
-rw-r--r--tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp41
-rw-r--r--tests/auto/network/kernel/qhostinfo/CMakeLists.txt16
-rw-r--r--tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp396
-rw-r--r--tests/auto/network/kernel/qnetworkaddressentry/CMakeLists.txt11
-rw-r--r--tests/auto/network/kernel/qnetworkaddressentry/tst_qnetworkaddressentry.cpp29
-rw-r--r--tests/auto/network/kernel/qnetworkdatagram/CMakeLists.txt11
-rw-r--r--tests/auto/network/kernel/qnetworkdatagram/tst_qnetworkdatagram.cpp29
-rw-r--r--tests/auto/network/kernel/qnetworkinformation/CMakeLists.txt11
-rw-r--r--tests/auto/network/kernel/qnetworkinformation/tst_qnetworkinformation.cpp41
-rw-r--r--tests/auto/network/kernel/qnetworkinformation_appless/CMakeLists.txt11
-rw-r--r--tests/auto/network/kernel/qnetworkinformation_appless/tst_qnetworkinformation_appless.cpp33
-rw-r--r--tests/auto/network/kernel/qnetworkinterface/CMakeLists.txt14
-rw-r--r--tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp77
-rw-r--r--tests/auto/network/kernel/qnetworkproxy/CMakeLists.txt11
-rw-r--r--tests/auto/network/kernel/qnetworkproxy/tst_qnetworkproxy.cpp29
-rw-r--r--tests/auto/network/kernel/qnetworkproxyfactory/BLACKLIST3
-rw-r--r--tests/auto/network/kernel/qnetworkproxyfactory/CMakeLists.txt11
-rw-r--r--tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp53
-rw-r--r--tests/auto/network/selftest/tst_networkselftest.cpp29
-rw-r--r--tests/auto/network/socket/CMakeLists.txt7
-rw-r--r--tests/auto/network/socket/platformsocketengine/BLACKLIST9
-rw-r--r--tests/auto/network/socket/platformsocketengine/CMakeLists.txt18
-rw-r--r--tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp45
-rw-r--r--tests/auto/network/socket/qabstractsocket/CMakeLists.txt11
-rw-r--r--tests/auto/network/socket/qabstractsocket/tst_qabstractsocket.cpp29
-rw-r--r--tests/auto/network/socket/qhttpsocketengine/BLACKLIST3
-rw-r--r--tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt20
-rw-r--r--tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp37
-rw-r--r--tests/auto/network/socket/qlocalsocket/BLACKLIST3
-rw-r--r--tests/auto/network/socket/qlocalsocket/CMakeLists.txt16
-rw-r--r--tests/auto/network/socket/qlocalsocket/socketprocess/CMakeLists.txt5
-rw-r--r--tests/auto/network/socket/qlocalsocket/socketprocess/main.cpp29
-rw-r--r--tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp249
-rw-r--r--tests/auto/network/socket/qsctpsocket/CMakeLists.txt11
-rw-r--r--tests/auto/network/socket/qsctpsocket/tst_qsctpsocket.cpp40
-rw-r--r--tests/auto/network/socket/qsocks5socketengine/BLACKLIST8
-rw-r--r--tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt20
-rw-r--r--tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp41
-rw-r--r--tests/auto/network/socket/qtcpserver/BLACKLIST10
-rw-r--r--tests/auto/network/socket/qtcpserver/CMakeLists.txt11
-rw-r--r--tests/auto/network/socket/qtcpserver/crashingServer/CMakeLists.txt5
-rw-r--r--tests/auto/network/socket/qtcpserver/crashingServer/main.cpp62
-rw-r--r--tests/auto/network/socket/qtcpserver/test/CMakeLists.txt19
-rw-r--r--tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp176
-rw-r--r--tests/auto/network/socket/qtcpsocket/BLACKLIST26
-rw-r--r--tests/auto/network/socket/qtcpsocket/CMakeLists.txt9
-rw-r--r--tests/auto/network/socket/qtcpsocket/stressTest/CMakeLists.txt9
-rw-r--r--tests/auto/network/socket/qtcpsocket/stressTest/Test.cpp29
-rw-r--r--tests/auto/network/socket/qtcpsocket/stressTest/Test.h29
-rw-r--r--tests/auto/network/socket/qtcpsocket/stressTest/main.cpp29
-rw-r--r--tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt23
-rw-r--r--tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp103
-rw-r--r--tests/auto/network/socket/qudpsocket/BLACKLIST6
-rw-r--r--tests/auto/network/socket/qudpsocket/CMakeLists.txt11
-rw-r--r--tests/auto/network/socket/qudpsocket/clientserver/CMakeLists.txt5
-rw-r--r--tests/auto/network/socket/qudpsocket/clientserver/main.cpp29
-rw-r--r--tests/auto/network/socket/qudpsocket/test/CMakeLists.txt30
-rw-r--r--tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp343
-rw-r--r--tests/auto/network/socket/qudpsocket/udpServer/CMakeLists.txt7
-rw-r--r--tests/auto/network/socket/qudpsocket/udpServer/main.cpp29
-rw-r--r--tests/auto/network/ssl/CMakeLists.txt12
-rw-r--r--tests/auto/network/ssl/qasn1element/CMakeLists.txt17
-rw-r--r--tests/auto/network/ssl/qasn1element/tst_qasn1element.cpp49
-rw-r--r--tests/auto/network/ssl/qdtls/CMakeLists.txt21
-rw-r--r--tests/auto/network/ssl/qdtls/certs/fluke.cert105
-rw-r--r--tests/auto/network/ssl/qdtls/certs/fluke.key67
-rw-r--r--tests/auto/network/ssl/qdtls/tst_qdtls.cpp97
-rw-r--r--tests/auto/network/ssl/qdtlscookie/CMakeLists.txt21
-rw-r--r--tests/auto/network/ssl/qdtlscookie/tst_qdtlscookie.cpp37
-rw-r--r--tests/auto/network/ssl/qocsp/CMakeLists.txt24
-rw-r--r--tests/auto/network/ssl/qocsp/tst_qocsp.cpp51
-rw-r--r--tests/auto/network/ssl/qpassworddigestor/CMakeLists.txt12
-rw-r--r--tests/auto/network/ssl/qpassworddigestor/tst_qpassworddigestor.cpp29
-rw-r--r--tests/auto/network/ssl/qsslcertificate/CMakeLists.txt14
-rwxr-xr-xtests/auto/network/ssl/qsslcertificate/certificates/gencertificates.sh29
-rw-r--r--tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.0.9.842
-rw-r--r--tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.1.0.142
-rw-r--r--tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.1.0.1c41
-rw-r--r--tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.3.0.5 (renamed from tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.1.0.0)4
-rw-r--r--tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp190
-rw-r--r--tests/auto/network/ssl/qsslcipher/CMakeLists.txt21
-rw-r--r--tests/auto/network/ssl/qsslcipher/tst_qsslcipher.cpp29
-rw-r--r--tests/auto/network/ssl/qssldiffiehellmanparameters/CMakeLists.txt12
-rw-r--r--tests/auto/network/ssl/qssldiffiehellmanparameters/tst_qssldiffiehellmanparameters.cpp29
-rw-r--r--tests/auto/network/ssl/qsslellipticcurve/CMakeLists.txt12
-rw-r--r--tests/auto/network/ssl/qsslellipticcurve/tst_qsslellipticcurve.cpp36
-rw-r--r--tests/auto/network/ssl/qsslerror/CMakeLists.txt21
-rw-r--r--tests/auto/network/ssl/qsslerror/tst_qsslerror.cpp29
-rw-r--r--tests/auto/network/ssl/qsslkey/BLACKLIST8
-rw-r--r--tests/auto/network/ssl/qsslkey/CMakeLists.txt21
-rwxr-xr-xtests/auto/network/ssl/qsslkey/keys/genkeys.sh29
-rw-r--r--tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp123
-rw-r--r--tests/auto/network/ssl/qsslserver/CMakeLists.txt29
-rw-r--r--tests/auto/network/ssl/qsslserver/certs/selfsigned-client.crt18
-rw-r--r--tests/auto/network/ssl/qsslserver/certs/selfsigned-client.key27
-rw-r--r--tests/auto/network/ssl/qsslserver/certs/selfsigned-server.crt18
-rw-r--r--tests/auto/network/ssl/qsslserver/certs/selfsigned-server.key27
-rw-r--r--tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp531
-rw-r--r--tests/auto/network/ssl/qsslsocket/BLACKLIST5
-rw-r--r--tests/auto/network/ssl/qsslsocket/CMakeLists.txt33
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/ca-generate.sh21
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/ca.conf10
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/ca.crt70
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/ca.key99
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/inter.conf14
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/inter.crt71
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/inter.key99
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/leaf.conf14
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/leaf.crt73
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/leaf.key127
-rw-r--r--tests/auto/network/ssl/qsslsocket/certs/qt-test-server-cacert.pem30
-rw-r--r--tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp472
-rw-r--r--tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/BLACKLIST7
-rw-r--r--tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt30
-rw-r--r--tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp46
-rw-r--r--tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/BLACKLIST2
-rw-r--r--tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt29
-rw-r--r--tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp29
-rw-r--r--tests/auto/network/ssl/shared/qopenssl_symbols.h58
-rw-r--r--tests/auto/network/ssl/shared/tlshelpers.h34
-rw-r--r--tests/auto/opengl/CMakeLists.txt1
-rw-r--r--tests/auto/other/CMakeLists.txt20
-rw-r--r--tests/auto/other/android/CMakeLists.txt21
-rw-r--r--tests/auto/other/android/tst_android.cpp82
-rw-r--r--tests/auto/other/android_deployment_settings/CMakeLists.txt85
-rw-r--r--tests/auto/other/android_deployment_settings/noop.cpp7
-rw-r--r--tests/auto/other/android_deployment_settings/tst_android_deployment_settings.cpp112
-rw-r--r--tests/auto/other/gestures/BLACKLIST36
-rw-r--r--tests/auto/other/gestures/CMakeLists.txt11
-rw-r--r--tests/auto/other/gestures/tst_gestures.cpp248
-rw-r--r--tests/auto/other/languagechange/CMakeLists.txt17
-rw-r--r--tests/auto/other/languagechange/tst_languagechange.cpp29
-rw-r--r--tests/auto/other/macgui/BLACKLIST3
-rw-r--r--tests/auto/other/macgui/CMakeLists.txt20
-rw-r--r--tests/auto/other/macgui/guitest.cpp30
-rw-r--r--tests/auto/other/macgui/guitest.h29
-rw-r--r--tests/auto/other/macgui/tst_macgui.cpp90
-rw-r--r--tests/auto/other/macnativeevents/CMakeLists.txt16
-rw-r--r--tests/auto/other/macnativeevents/expectedeventlist.cpp29
-rw-r--r--tests/auto/other/macnativeevents/expectedeventlist.h29
-rw-r--r--tests/auto/other/macnativeevents/nativeeventlist.cpp29
-rw-r--r--tests/auto/other/macnativeevents/nativeeventlist.h29
-rw-r--r--tests/auto/other/macnativeevents/qnativeevents.cpp29
-rw-r--r--tests/auto/other/macnativeevents/qnativeevents.h29
-rw-r--r--tests/auto/other/macnativeevents/qnativeevents_mac.cpp29
-rw-r--r--tests/auto/other/macnativeevents/tst_macnativeevents.cpp29
-rw-r--r--tests/auto/other/macplist/BLACKLIST2
-rw-r--r--tests/auto/other/macplist/CMakeLists.txt11
-rw-r--r--tests/auto/other/macplist/app/CMakeLists.txt7
-rw-r--r--tests/auto/other/macplist/app/main.cpp29
-rw-r--r--tests/auto/other/macplist/test/CMakeLists.txt5
-rw-r--r--tests/auto/other/macplist/tst_macplist.cpp29
-rw-r--r--tests/auto/other/networkselftest/BLACKLIST1
-rw-r--r--tests/auto/other/networkselftest/CMakeLists.txt16
-rw-r--r--tests/auto/other/networkselftest/tst_networkselftest.cpp48
-rw-r--r--tests/auto/other/qabstractitemmodelutils/dynamictreemodel.cpp41
-rw-r--r--tests/auto/other/qabstractitemmodelutils/dynamictreemodel.h29
-rw-r--r--tests/auto/other/qaccessibility/CMakeLists.txt22
-rw-r--r--tests/auto/other/qaccessibility/accessiblewidgets.h31
-rw-r--r--tests/auto/other/qaccessibility/tst_qaccessibility.cpp880
-rw-r--r--tests/auto/other/qaccessibilitylinux/CMakeLists.txt16
-rw-r--r--tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp44
-rw-r--r--tests/auto/other/qaccessibilitymac/CMakeLists.txt30
-rw-r--r--tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.cpp150
-rw-r--r--tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.mm (renamed from tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.mm)488
-rw-r--r--tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.h41
-rw-r--r--tests/auto/other/qcomplextext/CMakeLists.txt11
-rw-r--r--tests/auto/other/qcomplextext/bidireorderstring.h29
-rw-r--r--tests/auto/other/qcomplextext/tst_qcomplextext.cpp45
-rw-r--r--tests/auto/other/qfocusevent/CMakeLists.txt12
-rw-r--r--tests/auto/other/qfocusevent/tst_qfocusevent.cpp40
-rw-r--r--tests/auto/other/qnetworkaccessmanager_and_qprogressdialog/CMakeLists.txt12
-rw-r--r--tests/auto/other/qnetworkaccessmanager_and_qprogressdialog/tst_qnetworkaccessmanager_and_qprogressdialog.cpp38
-rw-r--r--tests/auto/other/qobjectrace/CMakeLists.txt13
-rw-r--r--tests/auto/other/qobjectrace/tst_qobjectrace.cpp81
-rw-r--r--tests/auto/other/qprocess_and_guieventloop/CMakeLists.txt12
-rw-r--r--tests/auto/other/qprocess_and_guieventloop/tst_qprocess_and_guieventloop.cpp37
-rw-r--r--tests/auto/other/qprocess_and_guieventloop/write-read-write/CMakeLists.txt9
-rw-r--r--tests/auto/other/qprocess_and_guieventloop/write-read-write/main.cpp29
-rw-r--r--tests/auto/other/qsharedpointer_and_qwidget/CMakeLists.txt11
-rw-r--r--tests/auto/other/qsharedpointer_and_qwidget/tst_qsharedpointer_and_qwidget.cpp29
-rw-r--r--tests/auto/other/qvariant_common/tst_qvariant_common.h29
-rw-r--r--tests/auto/other/sessionmanagement_macos/tst_sessionmanagement_macos.mm29
-rw-r--r--tests/auto/other/toolsupport/BLACKLIST3
-rw-r--r--tests/auto/other/toolsupport/CMakeLists.txt11
-rw-r--r--tests/auto/other/toolsupport/tst_toolsupport.cpp34
-rw-r--r--tests/auto/other/xkbkeyboard/CMakeLists.txt11
-rw-r--r--tests/auto/other/xkbkeyboard/tst_xkbkeyboard.cpp29
-rw-r--r--tests/auto/printsupport/CMakeLists.txt3
-rw-r--r--tests/auto/printsupport/dialogs/CMakeLists.txt3
-rw-r--r--tests/auto/printsupport/dialogs/qabstractprintdialog/CMakeLists.txt11
-rw-r--r--tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp62
-rw-r--r--tests/auto/printsupport/kernel/CMakeLists.txt3
-rw-r--r--tests/auto/printsupport/kernel/qprintdevice/CMakeLists.txt11
-rw-r--r--tests/auto/printsupport/kernel/qprintdevice/tst_qprintdevice.cpp36
-rw-r--r--tests/auto/printsupport/kernel/qprinter/CMakeLists.txt11
-rw-r--r--tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp46
-rw-r--r--tests/auto/printsupport/kernel/qprinterinfo/CMakeLists.txt11
-rw-r--r--tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp43
-rw-r--r--tests/auto/shared/highdpi.h29
-rw-r--r--tests/auto/shared/platformclipboard.h29
-rw-r--r--tests/auto/shared/platforminputcontext.h35
-rw-r--r--tests/auto/shared/resources/test.ttfbin2128 -> 2196 bytes
-rw-r--r--tests/auto/shared/resources/testfont_variable.ttfbin0 -> 28528 bytes
-rw-r--r--tests/auto/sql/CMakeLists.txt3
-rw-r--r--tests/auto/sql/kernel/CMakeLists.txt5
-rw-r--r--tests/auto/sql/kernel/qsql/CMakeLists.txt11
-rw-r--r--tests/auto/sql/kernel/qsql/tst_qsql.cpp57
-rw-r--r--tests/auto/sql/kernel/qsqldatabase/CMakeLists.txt11
-rw-r--r--tests/auto/sql/kernel/qsqldatabase/tst_databases.h450
-rw-r--r--tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp600
-rw-r--r--tests/auto/sql/kernel/qsqldriver/CMakeLists.txt11
-rw-r--r--tests/auto/sql/kernel/qsqldriver/tst_qsqldriver.cpp97
-rw-r--r--tests/auto/sql/kernel/qsqlerror/CMakeLists.txt11
-rw-r--r--tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp39
-rw-r--r--tests/auto/sql/kernel/qsqlfield/CMakeLists.txt11
-rw-r--r--tests/auto/sql/kernel/qsqlfield/tst_qsqlfield.cpp49
-rw-r--r--tests/auto/sql/kernel/qsqlindex/CMakeLists.txt21
-rw-r--r--tests/auto/sql/kernel/qsqlindex/tst_qsqlindex.cpp126
-rw-r--r--tests/auto/sql/kernel/qsqlquery/CMakeLists.txt11
-rw-r--r--tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp5232
-rw-r--r--tests/auto/sql/kernel/qsqlrecord/CMakeLists.txt11
-rw-r--r--tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp118
-rw-r--r--tests/auto/sql/kernel/qsqlresult/CMakeLists.txt11
-rw-r--r--tests/auto/sql/kernel/qsqlresult/testsqldriver.h29
-rw-r--r--tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp63
-rw-r--r--tests/auto/sql/kernel/qsqlthread/CMakeLists.txt11
-rw-r--r--tests/auto/sql/kernel/qsqlthread/tst_qsqlthread.cpp45
-rw-r--r--tests/auto/sql/kernel/qvfssql/CMakeLists.txt30
-rw-r--r--tests/auto/sql/kernel/qvfssql/sample.dbbin0 -> 49152 bytes
-rw-r--r--tests/auto/sql/kernel/qvfssql/tst_qvfssql.cpp94
-rw-r--r--tests/auto/sql/models/CMakeLists.txt3
-rw-r--r--tests/auto/sql/models/qsqlquerymodel/CMakeLists.txt11
-rw-r--r--tests/auto/sql/models/qsqlquerymodel/tst_qsqlquerymodel.cpp89
-rw-r--r--tests/auto/sql/models/qsqlrelationaldelegate/CMakeLists.txt11
-rw-r--r--tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp46
-rw-r--r--tests/auto/sql/models/qsqlrelationaltablemodel/CMakeLists.txt11
-rw-r--r--tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp374
-rw-r--r--tests/auto/sql/models/qsqltablemodel/CMakeLists.txt11
-rw-r--r--tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp233
-rw-r--r--tests/auto/testlib/CMakeLists.txt11
-rw-r--r--tests/auto/testlib/initmain/tst_initmain.cpp29
-rw-r--r--tests/auto/testlib/outformat/tst_outformat.cpp29
-rw-r--r--tests/auto/testlib/qabstractitemmodeltester/CMakeLists.txt13
-rw-r--r--tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp75
-rw-r--r--tests/auto/testlib/qsignalspy/CMakeLists.txt9
-rw-r--r--tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp149
-rw-r--r--tests/auto/testlib/selftests/CMakeLists.txt47
-rw-r--r--tests/auto/testlib/selftests/README7
-rw-r--r--tests/auto/testlib/selftests/assert/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/assert/tst_assert.cpp29
-rw-r--r--tests/auto/testlib/selftests/badxml/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/badxml/tst_badxml.cpp58
-rw-r--r--tests/auto/testlib/selftests/benchlibcallgrind/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp33
-rw-r--r--tests/auto/testlib/selftests/benchlibcounting/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp31
-rw-r--r--tests/auto/testlib/selftests/benchlibeventcounter/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/benchlibeventcounter/tst_benchlibeventcounter.cpp33
-rw-r--r--tests/auto/testlib/selftests/benchliboptions/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/benchliboptions/tst_benchliboptions.cpp44
-rw-r--r--tests/auto/testlib/selftests/benchlibtickcounter/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/benchlibtickcounter/tst_benchlibtickcounter.cpp31
-rw-r--r--tests/auto/testlib/selftests/benchlibwalltime/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/benchlibwalltime/tst_benchlibwalltime.cpp29
-rw-r--r--tests/auto/testlib/selftests/blacklisted/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp34
-rw-r--r--tests/auto/testlib/selftests/catch.cpp40
-rw-r--r--tests/auto/testlib/selftests/catch_p.h40
-rw-r--r--tests/auto/testlib/selftests/catch_p_p.h1133
-rw-r--r--tests/auto/testlib/selftests/cmptest/CMakeLists.txt14
-rw-r--r--tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp228
-rw-r--r--tests/auto/testlib/selftests/commandlinedata/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp29
-rw-r--r--tests/auto/testlib/selftests/counting/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/counting/tst_counting.cpp29
-rw-r--r--tests/auto/testlib/selftests/crashes/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/crashes/tst_crashes.cpp41
-rw-r--r--tests/auto/testlib/selftests/datatable/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/datatable/tst_datatable.cpp29
-rw-r--r--tests/auto/testlib/selftests/datetime/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/datetime/tst_datetime.cpp36
-rw-r--r--tests/auto/testlib/selftests/deleteLater/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/deleteLater/tst_deleteLater.cpp29
-rw-r--r--tests/auto/testlib/selftests/deleteLater_noApp/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/deleteLater_noApp/tst_deleteLater_noApp.cpp29
-rw-r--r--tests/auto/testlib/selftests/differentexec/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/differentexec/tst_differentexec.cpp29
-rw-r--r--tests/auto/testlib/selftests/eventloop/CMakeLists.txt17
-rw-r--r--tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp106
-rw-r--r--tests/auto/testlib/selftests/exceptionthrow/CMakeLists.txt11
-rw-r--r--tests/auto/testlib/selftests/exceptionthrow/tst_exceptionthrow.cpp29
-rw-r--r--tests/auto/testlib/selftests/expected_assert.tap5
-rw-r--r--tests/auto/testlib/selftests/expected_blacklisted.tap63
-rw-r--r--tests/auto/testlib/selftests/expected_cmptest.junitxml46
-rw-r--r--tests/auto/testlib/selftests/expected_cmptest.lightxml58
-rw-r--r--tests/auto/testlib/selftests/expected_cmptest.tap193
-rw-r--r--tests/auto/testlib/selftests/expected_cmptest.teamcity27
-rw-r--r--tests/auto/testlib/selftests/expected_cmptest.txt32
-rw-r--r--tests/auto/testlib/selftests/expected_cmptest.xml58
-rw-r--r--tests/auto/testlib/selftests/expected_commandlinedata.tap12
-rw-r--r--tests/auto/testlib/selftests/expected_counting.tap15
-rw-r--r--tests/auto/testlib/selftests/expected_crashes_3.txt8
-rw-r--r--tests/auto/testlib/selftests/expected_crashes_4.txt6
-rw-r--r--tests/auto/testlib/selftests/expected_crashes_5.txt5
-rw-r--r--tests/auto/testlib/selftests/expected_eventloop.junitxml17
-rw-r--r--tests/auto/testlib/selftests/expected_eventloop.lightxml30
-rw-r--r--tests/auto/testlib/selftests/expected_eventloop.tap17
-rw-r--r--tests/auto/testlib/selftests/expected_eventloop.teamcity14
-rw-r--r--tests/auto/testlib/selftests/expected_eventloop.txt11
-rw-r--r--tests/auto/testlib/selftests/expected_eventloop.xml33
-rw-r--r--tests/auto/testlib/selftests/expected_expectfail.tap207
-rw-r--r--tests/auto/testlib/selftests/expected_extendedcompare.junitxml526
-rw-r--r--tests/auto/testlib/selftests/expected_extendedcompare.lightxml746
-rw-r--r--tests/auto/testlib/selftests/expected_extendedcompare.tap1022
-rw-r--r--tests/auto/testlib/selftests/expected_extendedcompare.teamcity396
-rw-r--r--tests/auto/testlib/selftests/expected_extendedcompare.txt396
-rw-r--r--tests/auto/testlib/selftests/expected_extendedcompare.xml749
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanup.junitxml6
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanup.lightxml8
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanup.tap8
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanup.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanup.txt4
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanup.xml8
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanuptestcase.junitxml13
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanuptestcase.lightxml20
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanuptestcase.tap20
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanuptestcase.teamcity9
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanuptestcase.txt8
-rw-r--r--tests/auto/testlib/selftests/expected_failcleanuptestcase.xml23
-rw-r--r--tests/auto/testlib/selftests/expected_faildatatype.tap8
-rw-r--r--tests/auto/testlib/selftests/expected_failfetchtype.tap5
-rw-r--r--tests/auto/testlib/selftests/expected_fetchbogus.tap5
-rw-r--r--tests/auto/testlib/selftests/expected_findtestdata.tap2
-rw-r--r--tests/auto/testlib/selftests/expected_globaldata.tap176
-rw-r--r--tests/auto/testlib/selftests/expected_globaldata.teamcity90
-rw-r--r--tests/auto/testlib/selftests/expected_maxwarnings.tap6009
-rw-r--r--tests/auto/testlib/selftests/expected_mouse.junitxml3
-rw-r--r--tests/auto/testlib/selftests/expected_mouse.lightxml4
-rw-r--r--tests/auto/testlib/selftests/expected_mouse.tap9
-rw-r--r--tests/auto/testlib/selftests/expected_mouse.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_mouse.txt3
-rw-r--r--tests/auto/testlib/selftests/expected_mouse.xml4
-rw-r--r--tests/auto/testlib/selftests/expected_signaldumper.tap248
-rw-r--r--tests/auto/testlib/selftests/expected_silent.txt5
-rw-r--r--tests/auto/testlib/selftests/expected_silent_fatal.txt5
-rw-r--r--tests/auto/testlib/selftests/expected_skip.tap7
-rw-r--r--tests/auto/testlib/selftests/expected_skipblacklisted.junitxml18
-rw-r--r--tests/auto/testlib/selftests/expected_skipblacklisted.lightxml36
-rw-r--r--tests/auto/testlib/selftests/expected_skipblacklisted.tap13
-rw-r--r--tests/auto/testlib/selftests/expected_skipblacklisted.teamcity19
-rw-r--r--tests/auto/testlib/selftests/expected_skipblacklisted.txt11
-rw-r--r--tests/auto/testlib/selftests/expected_skipblacklisted.xml39
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanup.junitxml6
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanup.lightxml8
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanup.tap4
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanup.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanup.txt4
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanup.xml8
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanuptestcase.junitxml13
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanuptestcase.lightxml20
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanuptestcase.tap9
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanuptestcase.teamcity9
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanuptestcase.txt8
-rw-r--r--tests/auto/testlib/selftests/expected_skipcleanuptestcase.xml23
-rw-r--r--tests/auto/testlib/selftests/expected_strcmp.tap23
-rw-r--r--tests/auto/testlib/selftests/expected_subtest.tap152
-rw-r--r--tests/auto/testlib/selftests/expected_testlib.junitxml5
-rw-r--r--tests/auto/testlib/selftests/expected_testlib.lightxml4
-rw-r--r--tests/auto/testlib/selftests/expected_testlib.tap7
-rw-r--r--tests/auto/testlib/selftests/expected_testlib.teamcity2
-rw-r--r--tests/auto/testlib/selftests/expected_testlib.txt2
-rw-r--r--tests/auto/testlib/selftests/expected_testlib.xml4
-rw-r--r--tests/auto/testlib/selftests/expected_verbose1.tap15
-rw-r--r--tests/auto/testlib/selftests/expected_verbose2.tap51
-rw-r--r--tests/auto/testlib/selftests/expected_warnings.junitxml7
-rw-r--r--tests/auto/testlib/selftests/expected_warnings.lightxml7
-rw-r--r--tests/auto/testlib/selftests/expected_warnings.tap107
-rw-r--r--tests/auto/testlib/selftests/expected_warnings.teamcity3
-rw-r--r--tests/auto/testlib/selftests/expected_warnings.txt5
-rw-r--r--tests/auto/testlib/selftests/expected_warnings.xml7
-rw-r--r--tests/auto/testlib/selftests/expected_watchdog.tap5
-rw-r--r--tests/auto/testlib/selftests/expectfail/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp29
-rw-r--r--tests/auto/testlib/selftests/extendedcompare/CMakeLists.txt14
-rw-r--r--tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp340
-rw-r--r--tests/auto/testlib/selftests/failcleanup/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp35
-rw-r--r--tests/auto/testlib/selftests/failcleanuptestcase/CMakeLists.txt18
-rw-r--r--tests/auto/testlib/selftests/failcleanuptestcase/tst_failcleanuptestcase.cpp25
-rw-r--r--tests/auto/testlib/selftests/faildatatype/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/faildatatype/tst_faildatatype.cpp29
-rw-r--r--tests/auto/testlib/selftests/failfetchtype/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/failfetchtype/tst_failfetchtype.cpp29
-rw-r--r--tests/auto/testlib/selftests/failinit/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/failinit/tst_failinit.cpp29
-rw-r--r--tests/auto/testlib/selftests/failinitdata/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/failinitdata/tst_failinitdata.cpp29
-rw-r--r--tests/auto/testlib/selftests/fetchbogus/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/fetchbogus/tst_fetchbogus.cpp29
-rw-r--r--tests/auto/testlib/selftests/findtestdata/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/findtestdata/findtestdata.cpp33
-rw-r--r--tests/auto/testlib/selftests/float/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/float/tst_float.cpp29
-rwxr-xr-xtests/auto/testlib/selftests/generate_expected_output.py64
-rw-r--r--tests/auto/testlib/selftests/globaldata/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp29
-rw-r--r--tests/auto/testlib/selftests/junit/CMakeLists.txt9
-rw-r--r--tests/auto/testlib/selftests/junit/tst_junit.cpp29
-rw-r--r--tests/auto/testlib/selftests/keyboard/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/keyboard/tst_keyboard.cpp29
-rw-r--r--tests/auto/testlib/selftests/longstring/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/longstring/tst_longstring.cpp29
-rw-r--r--tests/auto/testlib/selftests/maxwarnings/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/maxwarnings/maxwarnings.cpp29
-rw-r--r--tests/auto/testlib/selftests/mouse/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/mouse/tst_mouse.cpp78
-rw-r--r--tests/auto/testlib/selftests/multiexec/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/multiexec/tst_multiexec.cpp29
-rw-r--r--tests/auto/testlib/selftests/pairdiagnostics/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp29
-rw-r--r--tests/auto/testlib/selftests/pass/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/pass/tst_pass.cpp29
-rw-r--r--tests/auto/testlib/selftests/patches/0001-Catch2-Fix-console-width-for-Qt-tests.patch24
-rw-r--r--tests/auto/testlib/selftests/printdatatags/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/printdatatags/tst_printdatatags.cpp29
-rw-r--r--tests/auto/testlib/selftests/printdatatagswithglobaltags/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/printdatatagswithglobaltags/tst_printdatatagswithglobaltags.cpp29
-rw-r--r--tests/auto/testlib/selftests/qexecstringlist/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/qexecstringlist/tst_qexecstringlist.cpp29
-rw-r--r--tests/auto/testlib/selftests/qt_attribution.json4
-rw-r--r--tests/auto/testlib/selftests/signaldumper/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/signaldumper/tst_signaldumper.cpp29
-rw-r--r--tests/auto/testlib/selftests/silent/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/silent/tst_silent.cpp51
-rw-r--r--tests/auto/testlib/selftests/silent_fatal/CMakeLists.txt15
-rw-r--r--tests/auto/testlib/selftests/silent_fatal/tst_silent_fatal.cpp28
-rw-r--r--tests/auto/testlib/selftests/singleskip/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/singleskip/tst_singleskip.cpp29
-rw-r--r--tests/auto/testlib/selftests/skip/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/skip/tst_skip.cpp29
-rw-r--r--tests/auto/testlib/selftests/skipblacklisted/BLACKLIST6
-rw-r--r--tests/auto/testlib/selftests/skipblacklisted/CMakeLists.txt18
-rw-r--r--tests/auto/testlib/selftests/skipblacklisted/tst_skipblacklisted.cpp51
-rw-r--r--tests/auto/testlib/selftests/skipcleanup/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp35
-rw-r--r--tests/auto/testlib/selftests/skipcleanuptestcase/CMakeLists.txt18
-rw-r--r--tests/auto/testlib/selftests/skipcleanuptestcase/tst_skipcleanuptestcase.cpp25
-rw-r--r--tests/auto/testlib/selftests/skipinit/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/skipinit/tst_skipinit.cpp29
-rw-r--r--tests/auto/testlib/selftests/skipinitdata/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/skipinitdata/tst_skipinitdata.cpp29
-rw-r--r--tests/auto/testlib/selftests/sleep/CMakeLists.txt13
-rw-r--r--tests/auto/testlib/selftests/sleep/tst_sleep.cpp60
-rw-r--r--tests/auto/testlib/selftests/strcmp/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp29
-rw-r--r--tests/auto/testlib/selftests/subtest/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/subtest/tst_subtest.cpp33
-rw-r--r--tests/auto/testlib/selftests/testlib/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/testlib/tst_testlib.cpp43
-rw-r--r--tests/auto/testlib/selftests/tst_selftests.cpp193
-rw-r--r--tests/auto/testlib/selftests/tuplediagnostics/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/tuplediagnostics/tst_tuplediagnostics.cpp29
-rw-r--r--tests/auto/testlib/selftests/verbose1/CMakeLists.txt14
-rw-r--r--tests/auto/testlib/selftests/verbose2/CMakeLists.txt14
-rw-r--r--tests/auto/testlib/selftests/verifyexceptionthrown/CMakeLists.txt11
-rw-r--r--tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp29
-rw-r--r--tests/auto/testlib/selftests/warnings/CMakeLists.txt12
-rw-r--r--tests/auto/testlib/selftests/warnings/tst_warnings.cpp55
-rw-r--r--tests/auto/testlib/selftests/watchdog/CMakeLists.txt17
-rw-r--r--tests/auto/testlib/selftests/watchdog/tst_watchdog.cpp34
-rw-r--r--tests/auto/testlib/tostring/CMakeLists.txt13
-rw-r--r--tests/auto/testlib/tostring/tst_tostring.cpp215
-rw-r--r--tests/auto/tools/CMakeLists.txt17
-rw-r--r--tests/auto/tools/macdeployqt/CMakeLists.txt9
-rw-r--r--tests/auto/tools/macdeployqt/source_basicapp/main.cpp29
-rw-r--r--tests/auto/tools/macdeployqt/source_plugin_sqlite/main.cpp29
-rw-r--r--tests/auto/tools/macdeployqt/source_plugin_tls/main.cpp29
-rw-r--r--tests/auto/tools/macdeployqt/tst_macdeployqt.cpp88
-rw-r--r--tests/auto/tools/moc/CMakeLists.txt28
-rw-r--r--tests/auto/tools/moc/Test.framework/Headers/testinterface.h29
-rw-r--r--tests/auto/tools/moc/allmocs_baseline_in.json201
-rw-r--r--tests/auto/tools/moc/assign-namespace.h29
-rw-r--r--tests/auto/tools/moc/backslash-newlines.h30
-rw-r--r--tests/auto/tools/moc/c-comments.h29
-rw-r--r--tests/auto/tools/moc/cstyle-enums.h29
-rw-r--r--tests/auto/tools/moc/cxx-attributes.h31
-rw-r--r--tests/auto/tools/moc/cxx11-enums.h45
-rw-r--r--tests/auto/tools/moc/cxx11-explicit-override-control.h29
-rw-r--r--tests/auto/tools/moc/cxx11-final-classes.h29
-rw-r--r--tests/auto/tools/moc/cxx11-trailing-return.h29
-rw-r--r--tests/auto/tools/moc/cxx17-namespaces.h29
-rw-r--r--tests/auto/tools/moc/dir-in-include-path.h29
-rw-r--r--tests/auto/tools/moc/dollars.h29
-rw-r--r--tests/auto/tools/moc/enum_with_include.h29
-rw-r--r--tests/auto/tools/moc/error-on-wrong-notify.h29
-rw-r--r--tests/auto/tools/moc/escapes-in-string-literals.h29
-rw-r--r--tests/auto/tools/moc/extraqualification.h29
-rw-r--r--tests/auto/tools/moc/forgotten-qinterface.h29
-rw-r--r--tests/auto/tools/moc/forward-declared-param.h29
-rw-r--r--tests/auto/tools/moc/function-with-attributes.h29
-rw-r--r--tests/auto/tools/moc/fwdclass1.h29
-rw-r--r--tests/auto/tools/moc/fwdclass2.h29
-rw-r--r--tests/auto/tools/moc/fwdclass3.h29
-rw-r--r--tests/auto/tools/moc/gadgetwithnoenums.h29
-rw-r--r--tests/auto/tools/moc/grand-parent-gadget-class.h29
-rw-r--r--tests/auto/tools/moc/interface-from-framework.h29
-rw-r--r--tests/auto/tools/moc/interface-from-include.h29
-rw-r--r--tests/auto/tools/moc/macro-on-cmdline.h29
-rw-r--r--tests/auto/tools/moc/moc_include.h29
-rw-r--r--tests/auto/tools/moc/namespace.h29
-rw-r--r--tests/auto/tools/moc/namespace_no_merge.h29
-rw-r--r--tests/auto/tools/moc/namespaced-base-class.h20
-rw-r--r--tests/auto/tools/moc/namespaced-flags.h29
-rw-r--r--tests/auto/tools/moc/no-keywords.h29
-rw-r--r--tests/auto/tools/moc/non-gadget-parent-class.h29
-rw-r--r--tests/auto/tools/moc/oldstyle-casts.h29
-rw-r--r--tests/auto/tools/moc/os9-newlines.h2
-rw-r--r--tests/auto/tools/moc/parse-boost.h29
-rw-r--r--tests/auto/tools/moc/parse-defines.h29
-rw-r--r--tests/auto/tools/moc/plugin_metadata.h29
-rw-r--r--tests/auto/tools/moc/pointery_to_incomplete.h35
-rw-r--r--tests/auto/tools/moc/pp-dollar-signs.h29
-rw-r--r--tests/auto/tools/moc/pure-virtual-signals.h29
-rw-r--r--tests/auto/tools/moc/qinvokable.h29
-rw-r--r--tests/auto/tools/moc/qmlmacro.h19
-rw-r--r--tests/auto/tools/moc/qprivateslots.h29
-rw-r--r--tests/auto/tools/moc/qtbug-35657-gadget.h29
-rw-r--r--tests/auto/tools/moc/related-metaobjects-in-gadget.h29
-rw-r--r--tests/auto/tools/moc/related-metaobjects-in-namespaces.h29
-rw-r--r--tests/auto/tools/moc/related-metaobjects-name-conflict.h29
-rw-r--r--tests/auto/tools/moc/signal-with-default-arg.h16
-rw-r--r--tests/auto/tools/moc/single-quote-digit-separator-n3781.h29
-rw-r--r--tests/auto/tools/moc/single_function_keyword.h29
-rw-r--r--tests/auto/tools/moc/slots-with-void-template.h29
-rw-r--r--tests/auto/tools/moc/task192552.h29
-rw-r--r--tests/auto/tools/moc/task234909.h29
-rw-r--r--tests/auto/tools/moc/task240368.h29
-rw-r--r--tests/auto/tools/moc/task87883.h29
-rw-r--r--tests/auto/tools/moc/tech-preview.h43
-rw-r--r--tests/auto/tools/moc/template-gtgt.h29
-rw-r--r--tests/auto/tools/moc/testproject/Plugin/Plugin.h29
-rw-r--r--tests/auto/tools/moc/trigraphs.h29
-rw-r--r--tests/auto/tools/moc/tst_moc.cpp672
-rw-r--r--tests/auto/tools/moc/unterminated-function-macro.h29
-rw-r--r--tests/auto/tools/moc/using-namespaces.h29
-rw-r--r--tests/auto/tools/moc/warn-on-multiple-qobject-subclasses.h29
-rw-r--r--tests/auto/tools/moc/warn-on-property-without-read.h29
-rw-r--r--tests/auto/tools/moc/win-newlines.h29
-rw-r--r--tests/auto/tools/qdbuscpp2xml/CMakeLists.txt15
-rw-r--r--tests/auto/tools/qdbuscpp2xml/test1.h33
-rw-r--r--tests/auto/tools/qdbuscpp2xml/test2.h24
-rw-r--r--tests/auto/tools/qdbuscpp2xml/tst_qdbuscpp2xml.cpp130
-rw-r--r--tests/auto/tools/qdbusxml2cpp/CMakeLists.txt9
-rw-r--r--tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp338
-rw-r--r--tests/auto/tools/qmake/CMakeLists.txt34
-rw-r--r--tests/auto/tools/qmake/testcompiler.cpp34
-rw-r--r--tests/auto/tools/qmake/testcompiler.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/object1.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/object2.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/object3.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/object4.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/object5.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/object6.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/object7.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/object8.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/object9.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/objecta.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findDeps/objectf.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/digitseparated.h8
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/findMocs.pro3
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/main.cpp37
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/object1.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/object2.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/object3.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/object4.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/object5.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/object6.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/object7.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/object8.h29
-rw-r--r--tests/auto/tools/qmake/testdata/findMocs/object9.h29
-rw-r--r--tests/auto/tools/qmake/testdata/include_dir/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/include_dir/test_file.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/include_dir/test_file.h29
-rw-r--r--tests/auto/tools/qmake/testdata/install_depends/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/install_depends/test_file.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/install_depends/test_file.h29
-rw-r--r--tests/auto/tools/qmake/testdata/one_space/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/project/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/project/test_file.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/project/test_file.h29
-rw-r--r--tests/auto/tools/qmake/testdata/quotedfilenames/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/rawString/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/rawString/object1.h29
-rw-r--r--tests/auto/tools/qmake/testdata/rawString/object2.h40
-rw-r--r--tests/auto/tools/qmake/testdata/resources/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/shadow_files/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/shadow_files/test_file.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/shadow_files/test_file.h29
-rw-r--r--tests/auto/tools/qmake/testdata/simple_app/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/simple_app/test_file.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/simple_app/test_file.h29
-rw-r--r--tests/auto/tools/qmake/testdata/simple_dll/simple.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/simple_dll/simple.h29
-rw-r--r--tests/auto/tools/qmake/testdata/simple_lib/simple.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/simple_lib/simple.h29
-rw-r--r--tests/auto/tools/qmake/testdata/subdir_via_pro_file_extra_target/simple/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/subdirs/simple_app/main.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/subdirs/simple_app/test_file.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/subdirs/simple_app/test_file.h29
-rw-r--r--tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple.cpp29
-rw-r--r--tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple.h29
-rw-r--r--tests/auto/tools/qmake/tst_qmake.cpp31
-rw-r--r--tests/auto/tools/qmakelib/CMakeLists.txt13
-rw-r--r--tests/auto/tools/qmakelib/evaltest.cpp37
-rw-r--r--tests/auto/tools/qmakelib/parsertest.cpp33
-rw-r--r--tests/auto/tools/qmakelib/tst_qmakelib.cpp29
-rw-r--r--tests/auto/tools/qmakelib/tst_qmakelib.h29
-rw-r--r--tests/auto/tools/qt_cmake_create/CMakeLists.txt20
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/cpp_project/CMakeLists.txt.expected14
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/cpp_project/main.cpp7
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/proto_project/CMakeLists.txt.expected17
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/proto_project/test.proto5
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/qml_project/CMakeLists.txt.expected27
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/qml_project/TestComponent.qml4
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/qml_project/main.cpp18
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/qml_project/main.qml16
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/qrc_project/CMakeLists.txt.expected20
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/qrc_project/main.cpp13
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/qrc_project/test.qrc5
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/qrc_project/test.txt1
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/ui_only_project/widget.ui32
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/ui_project/CMakeLists.txt.expected23
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/ui_project/main.cpp11
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.cpp15
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.h21
-rw-r--r--tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.ui32
-rw-r--r--tests/auto/tools/qt_cmake_create/tst_qt_cmake_create.cpp157
-rw-r--r--tests/auto/tools/rcc/BLACKLIST2
-rw-r--r--tests/auto/tools/rcc/CMakeLists.txt14
-rw-r--r--tests/auto/tools/rcc/data/images/images.expected18
-rw-r--r--tests/auto/tools/rcc/data/images/images.expected329
-rw-r--r--tests/auto/tools/rcc/data/sizes/size-0.expected18
-rw-r--r--tests/auto/tools/rcc/data/sizes/size-1.expected18
-rw-r--r--tests/auto/tools/rcc/data/sizes/size-2-0-35-1.expected20
-rw-r--r--tests/auto/tools/rcc/data/sizes/size-2-0-35-1.expected329
-rw-r--r--tests/auto/tools/rcc/tst_rcc.cpp43
-rw-r--r--tests/auto/tools/uic/CMakeLists.txt14
-rw-r--r--tests/auto/tools/uic/baseline/Dialog_with_Buttons_Bottom.ui.h4
-rw-r--r--tests/auto/tools/uic/baseline/Dialog_with_Buttons_Right.ui.h4
-rw-r--r--tests/auto/tools/uic/baseline/Dialog_without_Buttons.ui.h2
-rw-r--r--tests/auto/tools/uic/baseline/Main_Window.ui.h8
-rw-r--r--tests/auto/tools/uic/baseline/Widget.ui.h10
-rw-r--r--tests/auto/tools/uic/baseline/addlinkdialog.ui.h24
-rw-r--r--tests/auto/tools/uic/baseline/addtorrentform.ui.h50
-rw-r--r--tests/auto/tools/uic/baseline/authenticationdialog.ui.h22
-rw-r--r--tests/auto/tools/uic/baseline/backside.ui.h30
-rw-r--r--tests/auto/tools/uic/baseline/batchtranslation.ui32
-rw-r--r--tests/auto/tools/uic/baseline/batchtranslation.ui.h73
-rw-r--r--tests/auto/tools/uic/baseline/bookmarkdialog.ui.h40
-rw-r--r--tests/auto/tools/uic/baseline/bookwindow.ui.h36
-rw-r--r--tests/auto/tools/uic/baseline/browserwidget.ui.h38
-rw-r--r--tests/auto/tools/uic/baseline/bug18156QTreeWidget.ui.h8
-rw-r--r--tests/auto/tools/uic/baseline/buttongroup.ui.h48
-rw-r--r--tests/auto/tools/uic/baseline/calculator.ui.h60
-rw-r--r--tests/auto/tools/uic/baseline/calculatorform.ui.h34
-rw-r--r--tests/auto/tools/uic/baseline/certificateinfo.ui.h22
-rw-r--r--tests/auto/tools/uic/baseline/chatdialog.ui.h16
-rw-r--r--tests/auto/tools/uic/baseline/chatmainwindow.ui.h34
-rw-r--r--tests/auto/tools/uic/baseline/chatsetnickname.ui.h22
-rw-r--r--tests/auto/tools/uic/baseline/config.ui31
-rw-r--r--tests/auto/tools/uic/baseline/config.ui.h145
-rw-r--r--tests/auto/tools/uic/baseline/config.ui.py41
-rw-r--r--tests/auto/tools/uic/baseline/connectdialog.ui.h32
-rw-r--r--tests/auto/tools/uic/baseline/controller.ui.h14
-rw-r--r--tests/auto/tools/uic/baseline/cookies.ui.h20
-rw-r--r--tests/auto/tools/uic/baseline/cookiesexceptions.ui.h42
-rw-r--r--tests/auto/tools/uic/baseline/default.ui.h54
-rw-r--r--tests/auto/tools/uic/baseline/dialog.ui.h10
-rw-r--r--tests/auto/tools/uic/baseline/downloaditem.ui.h32
-rw-r--r--tests/auto/tools/uic/baseline/downloads.ui.h16
-rw-r--r--tests/auto/tools/uic/baseline/embeddeddialog.ui.h20
-rw-r--r--tests/auto/tools/uic/baseline/enumnostdset.ui.h4
-rw-r--r--tests/auto/tools/uic/baseline/filespage.ui.h18
-rw-r--r--tests/auto/tools/uic/baseline/filternamedialog.ui.h18
-rw-r--r--tests/auto/tools/uic/baseline/filterpage.ui2
-rw-r--r--tests/auto/tools/uic/baseline/filterpage.ui.h26
-rw-r--r--tests/auto/tools/uic/baseline/finddialog.ui33
-rw-r--r--tests/auto/tools/uic/baseline/finddialog.ui.h67
-rw-r--r--tests/auto/tools/uic/baseline/form.ui.h24
-rw-r--r--tests/auto/tools/uic/baseline/formwindowsettings.ui31
-rw-r--r--tests/auto/tools/uic/baseline/formwindowsettings.ui.h93
-rw-r--r--tests/auto/tools/uic/baseline/generalpage.ui2
-rw-r--r--tests/auto/tools/uic/baseline/generalpage.ui.h16
-rw-r--r--tests/auto/tools/uic/baseline/gridalignment.ui.h12
-rw-r--r--tests/auto/tools/uic/baseline/gridpanel.ui.h30
-rw-r--r--tests/auto/tools/uic/baseline/helpdialog.ui38
-rw-r--r--tests/auto/tools/uic/baseline/helpdialog.ui.h97
-rw-r--r--tests/auto/tools/uic/baseline/history.ui.h20
-rw-r--r--tests/auto/tools/uic/baseline/icontheme.ui29
-rw-r--r--tests/auto/tools/uic/baseline/icontheme.ui.h43
-rw-r--r--tests/auto/tools/uic/baseline/idbased.ui.h6
-rw-r--r--tests/auto/tools/uic/baseline/identifierpage.ui4
-rw-r--r--tests/auto/tools/uic/baseline/identifierpage.ui.h20
-rw-r--r--tests/auto/tools/uic/baseline/imagedialog.ui.h36
-rw-r--r--tests/auto/tools/uic/baseline/inputpage.ui2
-rw-r--r--tests/auto/tools/uic/baseline/inputpage.ui.h18
-rw-r--r--tests/auto/tools/uic/baseline/installdialog.ui.h32
-rw-r--r--tests/auto/tools/uic/baseline/languagesdialog.ui.h20
-rw-r--r--tests/auto/tools/uic/baseline/listwidgeteditor.ui31
-rw-r--r--tests/auto/tools/uic/baseline/listwidgeteditor.ui.h63
-rw-r--r--tests/auto/tools/uic/baseline/mainwindow.ui.h94
-rw-r--r--tests/auto/tools/uic/baseline/mydialog.ui.h8
-rw-r--r--tests/auto/tools/uic/baseline/myform.ui.h28
-rw-r--r--tests/auto/tools/uic/baseline/newactiondialog.ui31
-rw-r--r--tests/auto/tools/uic/baseline/newactiondialog.ui.h63
-rw-r--r--tests/auto/tools/uic/baseline/newdynamicpropertydialog.ui.h24
-rw-r--r--tests/auto/tools/uic/baseline/newform.ui32
-rw-r--r--tests/auto/tools/uic/baseline/newform.ui.h49
-rw-r--r--tests/auto/tools/uic/baseline/orderdialog.ui31
-rw-r--r--tests/auto/tools/uic/baseline/orderdialog.ui.h51
-rw-r--r--tests/auto/tools/uic/baseline/outputpage.ui2
-rw-r--r--tests/auto/tools/uic/baseline/outputpage.ui.h20
-rw-r--r--tests/auto/tools/uic/baseline/pagefold.ui.h58
-rw-r--r--tests/auto/tools/uic/baseline/paletteeditor.ui31
-rw-r--r--tests/auto/tools/uic/baseline/paletteeditor.ui.h69
-rw-r--r--tests/auto/tools/uic/baseline/passworddialog.ui.h22
-rw-r--r--tests/auto/tools/uic/baseline/pathpage.ui2
-rw-r--r--tests/auto/tools/uic/baseline/pathpage.ui.h26
-rw-r--r--tests/auto/tools/uic/baseline/phrasebookbox.ui33
-rw-r--r--tests/auto/tools/uic/baseline/phrasebookbox.ui.h65
-rw-r--r--tests/auto/tools/uic/baseline/pixmapfunction.ui.h8
-rw-r--r--tests/auto/tools/uic/baseline/plugindialog.ui31
-rw-r--r--tests/auto/tools/uic/baseline/plugindialog.ui.h45
-rw-r--r--tests/auto/tools/uic/baseline/preferencesdialog.ui.h42
-rw-r--r--tests/auto/tools/uic/baseline/previewconfigurationwidget.ui.h26
-rw-r--r--tests/auto/tools/uic/baseline/previewdialogbase.ui.h34
-rw-r--r--tests/auto/tools/uic/baseline/previewwidget.ui33
-rw-r--r--tests/auto/tools/uic/baseline/previewwidget.ui.h77
-rw-r--r--tests/auto/tools/uic/baseline/proxy.ui.h18
-rw-r--r--tests/auto/tools/uic/baseline/qfiledialog.ui31
-rw-r--r--tests/auto/tools/uic/baseline/qfiledialog.ui.h97
-rw-r--r--tests/auto/tools/uic/baseline/qoverload.ui93
-rw-r--r--tests/auto/tools/uic/baseline/qoverload.ui.h98
-rw-r--r--tests/auto/tools/uic/baseline/qpagesetupwidget.ui8
-rw-r--r--tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h92
-rw-r--r--tests/auto/tools/uic/baseline/qprintpropertieswidget.ui.h18
-rw-r--r--tests/auto/tools/uic/baseline/qprintsettingsoutput.ui.h82
-rw-r--r--tests/auto/tools/uic/baseline/qprintwidget.ui.h36
-rw-r--r--tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui2
-rw-r--r--tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui.h46
-rw-r--r--tests/auto/tools/uic/baseline/qtgradientdialog.ui31
-rw-r--r--tests/auto/tools/uic/baseline/qtgradientdialog.ui.h41
-rw-r--r--tests/auto/tools/uic/baseline/qtgradienteditor.ui31
-rw-r--r--tests/auto/tools/uic/baseline/qtgradienteditor.ui.h215
-rw-r--r--tests/auto/tools/uic/baseline/qtgradientview.ui.h20
-rw-r--r--tests/auto/tools/uic/baseline/qtgradientviewdialog.ui31
-rw-r--r--tests/auto/tools/uic/baseline/qtgradientviewdialog.ui.h41
-rw-r--r--tests/auto/tools/uic/baseline/qtresourceeditordialog.ui2
-rw-r--r--tests/auto/tools/uic/baseline/qtresourceeditordialog.ui.h38
-rw-r--r--tests/auto/tools/uic/baseline/qttoolbardialog.ui.h40
-rw-r--r--tests/auto/tools/uic/baseline/qttrid.ui2
-rw-r--r--tests/auto/tools/uic/baseline/qttrid.ui.h62
-rw-r--r--tests/auto/tools/uic/baseline/querywidget.ui.h36
-rw-r--r--tests/auto/tools/uic/baseline/remotecontrol.ui2
-rw-r--r--tests/auto/tools/uic/baseline/remotecontrol.ui.h62
-rw-r--r--tests/auto/tools/uic/baseline/repaintslot.ui.h6
-rw-r--r--tests/auto/tools/uic/baseline/saveformastemplate.ui31
-rw-r--r--tests/auto/tools/uic/baseline/saveformastemplate.ui.h49
-rw-r--r--tests/auto/tools/uic/baseline/settings.ui.h42
-rw-r--r--tests/auto/tools/uic/baseline/signalslotdialog.ui.h34
-rw-r--r--tests/auto/tools/uic/baseline/sslclient.ui.h36
-rw-r--r--tests/auto/tools/uic/baseline/sslerrors.ui.h18
-rw-r--r--tests/auto/tools/uic/baseline/statistics.ui33
-rw-r--r--tests/auto/tools/uic/baseline/statistics.ui.h69
-rw-r--r--tests/auto/tools/uic/baseline/stringlisteditor.ui31
-rw-r--r--tests/auto/tools/uic/baseline/stringlisteditor.ui.h69
-rw-r--r--tests/auto/tools/uic/baseline/stylesheeteditor.ui6
-rw-r--r--tests/auto/tools/uic/baseline/stylesheeteditor.ui.h30
-rw-r--r--tests/auto/tools/uic/baseline/tabbedbrowser.ui32
-rw-r--r--tests/auto/tools/uic/baseline/tabbedbrowser.ui.h63
-rw-r--r--tests/auto/tools/uic/baseline/tablewidgeteditor.ui31
-rw-r--r--tests/auto/tools/uic/baseline/tablewidgeteditor.ui.h111
-rw-r--r--tests/auto/tools/uic/baseline/tetrixwindow.ui.h30
-rw-r--r--tests/auto/tools/uic/baseline/textfinder.ui.h16
-rw-r--r--tests/auto/tools/uic/baseline/topicchooser.ui.h18
-rw-r--r--tests/auto/tools/uic/baseline/translatedialog.ui33
-rw-r--r--tests/auto/tools/uic/baseline/translatedialog.ui.h71
-rw-r--r--tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h2
-rw-r--r--tests/auto/tools/uic/baseline/translationsettings.ui.h18
-rw-r--r--tests/auto/tools/uic/baseline/treewidgeteditor.ui31
-rw-r--r--tests/auto/tools/uic/baseline/treewidgeteditor.ui.h99
-rw-r--r--tests/auto/tools/uic/baseline/trpreviewtool.ui32
-rw-r--r--tests/auto/tools/uic/baseline/trpreviewtool.ui.h73
-rw-r--r--tests/auto/tools/uic/baseline/validators.ui4
-rw-r--r--tests/auto/tools/uic/baseline/validators.ui.h86
-rw-r--r--tests/auto/tools/uic/baseline/wateringconfigdialog.ui10
-rw-r--r--tests/auto/tools/uic/baseline/wateringconfigdialog.ui.h70
-rw-r--r--tests/auto/tools/uic/baseline/window.ui.h32
-rw-r--r--tests/auto/tools/uic/tst_uic.cpp29
-rw-r--r--tests/auto/tools/windeployqt/CMakeLists.txt9
-rw-r--r--tests/auto/tools/windeployqt/test/CMakeLists.txt5
-rw-r--r--tests/auto/tools/windeployqt/testapp/CMakeLists.txt9
-rw-r--r--tests/auto/tools/windeployqt/testapp/main.cpp29
-rw-r--r--tests/auto/tools/windeployqt/tst_windeployqt.cpp29
-rw-r--r--tests/auto/wasm/CMakeLists.txt9
-rw-r--r--tests/auto/wasm/fetchapi/CMakeLists.txt22
-rw-r--r--tests/auto/wasm/fetchapi/tst_fetchapi.cpp86
-rw-r--r--tests/auto/wasm/localfileapi/CMakeLists.txt24
-rw-r--r--tests/auto/wasm/localfileapi/tst_localfileapi.cpp260
-rw-r--r--tests/auto/wasm/qwasmkeytranslator/CMakeLists.txt24
-rw-r--r--tests/auto/wasm/qwasmkeytranslator/tst_qwasmkeytranslator.cpp425
-rw-r--r--tests/auto/wasm/qwasmwindowstack/CMakeLists.txt25
-rw-r--r--tests/auto/wasm/qwasmwindowstack/tst_qwasmwindowstack.cpp714
-rw-r--r--tests/auto/wasm/qwasmwindowtreenode/CMakeLists.txt25
-rw-r--r--tests/auto/wasm/qwasmwindowtreenode/tst_qwasmwindowtreenode.cpp257
-rw-r--r--tests/auto/wasm/selenium/CMakeLists.txt81
-rw-r--r--tests/auto/wasm/selenium/fshader.glsl21
-rw-r--r--tests/auto/wasm/selenium/qwasmwindow.py1042
-rw-r--r--tests/auto/wasm/selenium/run.bat7
-rwxr-xr-xtests/auto/wasm/selenium/run.sh58
-rw-r--r--tests/auto/wasm/selenium/shaders.qrc6
-rw-r--r--tests/auto/wasm/selenium/tst_qwasmwindow_harness.cpp696
-rw-r--r--tests/auto/wasm/selenium/tst_qwasmwindow_harness.html80
-rw-r--r--tests/auto/wasm/selenium/vshader.glsl27
-rw-r--r--tests/auto/widgets/CMakeLists.txt3
-rw-r--r--tests/auto/widgets/dialogs/CMakeLists.txt7
-rw-r--r--tests/auto/widgets/dialogs/qcolordialog/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp113
-rw-r--r--tests/auto/widgets/dialogs/qdialog/BLACKLIST3
-rw-r--r--tests/auto/widgets/dialogs/qdialog/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp44
-rw-r--r--tests/auto/widgets/dialogs/qerrormessage/CMakeLists.txt15
-rw-r--r--tests/auto/widgets/dialogs/qerrormessage/tst_qerrormessage.cpp63
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog/BLACKLIST10
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp221
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog2/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp128
-rw-r--r--tests/auto/widgets/dialogs/qfontdialog/CMakeLists.txt35
-rw-r--r--tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp61
-rw-r--r--tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog_mac_helpers.mm53
-rw-r--r--tests/auto/widgets/dialogs/qinputdialog/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp29
-rw-r--r--tests/auto/widgets/dialogs/qmessagebox/BLACKLIST4
-rw-r--r--tests/auto/widgets/dialogs/qmessagebox/CMakeLists.txt14
-rw-r--r--tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp283
-rw-r--r--tests/auto/widgets/dialogs/qprogressdialog/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp35
-rw-r--r--tests/auto/widgets/dialogs/qsidebar/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/dialogs/qsidebar/tst_qsidebar.cpp37
-rw-r--r--tests/auto/widgets/dialogs/qwizard/CMakeLists.txt31
-rw-r--r--tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp241
-rw-r--r--tests/auto/widgets/dialogs/qwizard/tst_qwizard_2.cpp29
-rw-r--r--tests/auto/widgets/effects/CMakeLists.txt3
-rw-r--r--tests/auto/widgets/effects/qgraphicseffect/BLACKLIST4
-rw-r--r--tests/auto/widgets/effects/qgraphicseffect/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/effects/qgraphicseffect/tst_qgraphicseffect.cpp33
-rw-r--r--tests/auto/widgets/effects/qpixmapfilter/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/effects/qpixmapfilter/tst_qpixmapfilter.cpp29
-rw-r--r--tests/auto/widgets/graphicsview/CMakeLists.txt8
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsanchorlayout/BLACKLIST2
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsanchorlayout/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp29
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsanchorlayout1/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp53
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicseffectsource/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicseffectsource/tst_qgraphicseffectsource.cpp33
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsgridlayout/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp44
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/BLACKLIST4
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp110
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitemanimation/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitemanimation/tst_qgraphicsitemanimation.cpp29
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicslayout/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp41
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicslayoutitem/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicslayoutitem/tst_qgraphicslayoutitem.cpp29
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicslinearlayout/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp37
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsobject/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsobject/tst_qgraphicsobject.cpp97
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicspixmapitem/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicspixmapitem/tst_qgraphicspixmapitem.cpp29
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicspolygonitem/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicspolygonitem/tst_qgraphicspolygonitem.cpp29
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST8
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsproxywidget/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp162
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST5
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsscene/CMakeLists.txt53
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp310
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicssceneindex/CMakeLists.txt14
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicssceneindex/tst_qgraphicssceneindex.cpp86
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicstransform/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicstransform/tst_qgraphicstransform.cpp29
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST26
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/CMakeLists.txt16
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp299
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.h29
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview_2.cpp29
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicswidget/BLACKLIST5
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicswidget/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp190
-rw-r--r--tests/auto/widgets/itemviews/CMakeLists.txt3
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/BLACKLIST9
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp504
-rw-r--r--tests/auto/widgets/itemviews/qcolumnview/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp69
-rw-r--r--tests/auto/widgets/itemviews/qdatawidgetmapper/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/itemviews/qdatawidgetmapper/tst_qdatawidgetmapper.cpp51
-rw-r--r--tests/auto/widgets/itemviews/qfileiconprovider/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qfileiconprovider/tst_qfileiconprovider.cpp30
-rw-r--r--tests/auto/widgets/itemviews/qheaderview/BLACKLIST2
-rw-r--r--tests/auto/widgets/itemviews/qheaderview/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp269
-rw-r--r--tests/auto/widgets/itemviews/qitemdelegate/BLACKLIST6
-rw-r--r--tests/auto/widgets/itemviews/qitemdelegate/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp167
-rw-r--r--tests/auto/widgets/itemviews/qitemeditorfactory/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qitemeditorfactory/tst_qitemeditorfactory.cpp29
-rw-r--r--tests/auto/widgets/itemviews/qitemview/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qitemview/tst_qitemview.cpp29
-rw-r--r--tests/auto/widgets/itemviews/qitemview/viewstotest.cpp29
-rw-r--r--tests/auto/widgets/itemviews/qlistview/BLACKLIST3
-rw-r--r--tests/auto/widgets/itemviews/qlistview/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp129
-rw-r--r--tests/auto/widgets/itemviews/qlistwidget/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp241
-rw-r--r--tests/auto/widgets/itemviews/qtableview/BLACKLIST7
-rw-r--r--tests/auto/widgets/itemviews/qtableview/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp240
-rw-r--r--tests/auto/widgets/itemviews/qtablewidget/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp107
-rw-r--r--tests/auto/widgets/itemviews/qtreeview/BLACKLIST5
-rw-r--r--tests/auto/widgets/itemviews/qtreeview/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp187
-rw-r--r--tests/auto/widgets/itemviews/qtreewidget/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp218
-rw-r--r--tests/auto/widgets/itemviews/qtreewidgetitemiterator/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp31
-rw-r--r--tests/auto/widgets/kernel/CMakeLists.txt8
-rw-r--r--tests/auto/widgets/kernel/qaction/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/kernel/qaction/tst_qaction.cpp96
-rw-r--r--tests/auto/widgets/kernel/qactiongroup/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qactiongroup/tst_qactiongroup.cpp29
-rw-r--r--tests/auto/widgets/kernel/qapplication/BLACKLIST2
-rw-r--r--tests/auto/widgets/kernel/qapplication/CMakeLists.txt14
-rw-r--r--tests/auto/widgets/kernel/qapplication/desktopsettingsaware/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qapplication/desktopsettingsaware/main.cpp29
-rw-r--r--tests/auto/widgets/kernel/qapplication/modal/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qapplication/modal/base.cpp29
-rw-r--r--tests/auto/widgets/kernel/qapplication/modal/base.h29
-rw-r--r--tests/auto/widgets/kernel/qapplication/modal/main.cpp29
-rw-r--r--tests/auto/widgets/kernel/qapplication/test/CMakeLists.txt23
-rw-r--r--tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp312
-rw-r--r--tests/auto/widgets/kernel/qboxlayout/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp37
-rw-r--r--tests/auto/widgets/kernel/qformlayout/BLACKLIST3
-rw-r--r--tests/auto/widgets/kernel/qformlayout/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp230
-rw-r--r--tests/auto/widgets/kernel/qgesturerecognizer/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp33
-rw-r--r--tests/auto/widgets/kernel/qgridlayout/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp45
-rw-r--r--tests/auto/widgets/kernel/qlayout/CMakeLists.txt28
-rw-r--r--tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp41
-rw-r--r--tests/auto/widgets/kernel/qshortcut/CMakeLists.txt26
-rw-r--r--tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp113
-rw-r--r--tests/auto/widgets/kernel/qsizepolicy/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qsizepolicy/tst_qsizepolicy.cpp36
-rw-r--r--tests/auto/widgets/kernel/qstackedlayout/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp39
-rw-r--r--tests/auto/widgets/kernel/qtooltip/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp64
-rw-r--r--tests/auto/widgets/kernel/qwidget/BLACKLIST52
-rw-r--r--tests/auto/widgets/kernel/qwidget/CMakeLists.txt50
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp2029
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget_mac_helpers.h35
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget_mac_helpers.mm57
-rw-r--r--tests/auto/widgets/kernel/qwidget_window/BLACKLIST4
-rw-r--r--tests/auto/widgets/kernel/qwidget_window/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp332
-rw-r--r--tests/auto/widgets/kernel/qwidgetaction/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qwidgetaction/tst_qwidgetaction.cpp33
-rw-r--r--tests/auto/widgets/kernel/qwidgetmetatype/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qwidgetmetatype/tst_qwidgetmetatype.cpp29
-rw-r--r--tests/auto/widgets/kernel/qwidgetrepaintmanager/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qwidgetrepaintmanager/tst_qwidgetrepaintmanager.cpp203
-rw-r--r--tests/auto/widgets/kernel/qwidgetsvariant/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qwidgetsvariant/tst_qwidgetsvariant.cpp29
-rw-r--r--tests/auto/widgets/kernel/qwindowcontainer/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp112
-rw-r--r--tests/auto/widgets/styles/CMakeLists.txt7
-rw-r--r--tests/auto/widgets/styles/qmacstyle/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/styles/qmacstyle/tst_qmacstyle.cpp29
-rw-r--r--tests/auto/widgets/styles/qstyle/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/styles/qstyle/tst_qstyle.cpp139
-rw-r--r--tests/auto/widgets/styles/qstyleoption/CMakeLists.txt14
-rw-r--r--tests/auto/widgets/styles/qstyleoption/tst_qstyleoption.cpp29
-rw-r--r--tests/auto/widgets/styles/qstylesheetstyle/CMakeLists.txt38
-rw-r--r--tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp226
-rw-r--r--tests/auto/widgets/util/CMakeLists.txt3
-rw-r--r--tests/auto/widgets/util/qcompleter/BLACKLIST4
-rw-r--r--tests/auto/widgets/util/qcompleter/CMakeLists.txt15
-rw-r--r--tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp181
-rw-r--r--tests/auto/widgets/util/qscroller/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/util/qscroller/tst_qscroller.cpp99
-rw-r--r--tests/auto/widgets/util/qsystemtrayicon/CMakeLists.txt17
-rw-r--r--tests/auto/widgets/util/qsystemtrayicon/tst_qsystemtrayicon.cpp41
-rw-r--r--tests/auto/widgets/widgets/CMakeLists.txt18
-rw-r--r--tests/auto/widgets/widgets/qabstractbutton/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp109
-rw-r--r--tests/auto/widgets/widgets/qabstractscrollarea/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp82
-rw-r--r--tests/auto/widgets/widgets/qabstractslider/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp77
-rw-r--r--tests/auto/widgets/widgets/qabstractspinbox/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qabstractspinbox/tst_qabstractspinbox.cpp116
-rw-r--r--tests/auto/widgets/widgets/qbuttongroup/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp77
-rw-r--r--tests/auto/widgets/widgets/qcalendarwidget/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp42
-rw-r--r--tests/auto/widgets/widgets/qcheckbox/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp96
-rw-r--r--tests/auto/widgets/widgets/qcombobox/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp570
-rw-r--r--tests/auto/widgets/widgets/qcommandlinkbutton/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp47
-rw-r--r--tests/auto/widgets/widgets/qdatetimeedit/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp414
-rw-r--r--tests/auto/widgets/widgets/qdial/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qdial/tst_qdial.cpp63
-rw-r--r--tests/auto/widgets/widgets/qdialogbuttonbox/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp274
-rw-r--r--tests/auto/widgets/widgets/qdockwidget/BLACKLIST33
-rw-r--r--tests/auto/widgets/widgets/qdockwidget/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp1134
-rw-r--r--tests/auto/widgets/widgets/qdoublespinbox/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp84
-rw-r--r--tests/auto/widgets/widgets/qfocusframe/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qfocusframe/tst_qfocusframe.cpp31
-rw-r--r--tests/auto/widgets/widgets/qfontcombobox/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qfontcombobox/tst_qfontcombobox.cpp49
-rw-r--r--tests/auto/widgets/widgets/qframe/BLACKLIST3
-rw-r--r--tests/auto/widgets/widgets/qframe/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/widgets/qframe/tst_qframe.cpp42
-rw-r--r--tests/auto/widgets/widgets/qgroupbox/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp74
-rw-r--r--tests/auto/widgets/widgets/qkeysequenceedit/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qkeysequenceedit/tst_qkeysequenceedit.cpp112
-rw-r--r--tests/auto/widgets/widgets/qlabel/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp166
-rw-r--r--tests/auto/widgets/widgets/qlcdnumber/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp29
-rw-r--r--tests/auto/widgets/widgets/qlineedit/BLACKLIST6
-rw-r--r--tests/auto/widgets/widgets/qlineedit/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp347
-rw-r--r--tests/auto/widgets/widgets/qmainwindow/BLACKLIST2
-rw-r--r--tests/auto/widgets/widgets/qmainwindow/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp183
-rw-r--r--tests/auto/widgets/widgets/qmdiarea/BLACKLIST8
-rw-r--r--tests/auto/widgets/widgets/qmdiarea/CMakeLists.txt18
-rw-r--r--tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp311
-rw-r--r--tests/auto/widgets/widgets/qmdisubwindow/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp106
-rw-r--r--tests/auto/widgets/widgets/qmenu/BLACKLIST8
-rw-r--r--tests/auto/widgets/widgets/qmenu/CMakeLists.txt14
-rw-r--r--tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp176
-rw-r--r--tests/auto/widgets/widgets/qmenu/tst_qmenu_mac.mm29
-rw-r--r--tests/auto/widgets/widgets/qmenubar/BLACKLIST7
-rw-r--r--tests/auto/widgets/widgets/qmenubar/CMakeLists.txt14
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp323
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm29
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/BLACKLIST6
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp538
-rw-r--r--tests/auto/widgets/widgets/qplaintextedit/BLACKLIST15
-rw-r--r--tests/auto/widgets/widgets/qplaintextedit/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp245
-rw-r--r--tests/auto/widgets/widgets/qprogressbar/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp33
-rw-r--r--tests/auto/widgets/widgets/qpushbutton/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp395
-rw-r--r--tests/auto/widgets/widgets/qradiobutton/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qradiobutton/tst_qradiobutton.cpp29
-rw-r--r--tests/auto/widgets/widgets/qrhiwidget/CMakeLists.txt25
-rw-r--r--tests/auto/widgets/widgets/qrhiwidget/data/simple.frag8
-rw-r--r--tests/auto/widgets/widgets/qrhiwidget/data/simple.frag.qsbbin0 -> 724 bytes
-rw-r--r--tests/auto/widgets/widgets/qrhiwidget/data/simple.vert8
-rw-r--r--tests/auto/widgets/widgets/qrhiwidget/data/simple.vert.qsbbin0 -> 783 bytes
-rw-r--r--tests/auto/widgets/widgets/qrhiwidget/tst_qrhiwidget.cpp834
-rw-r--r--tests/auto/widgets/widgets/qscrollarea/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qscrollarea/tst_qscrollarea.cpp29
-rw-r--r--tests/auto/widgets/widgets/qscrollbar/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp44
-rw-r--r--tests/auto/widgets/widgets/qsizegrip/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp29
-rw-r--r--tests/auto/widgets/widgets/qslider/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qslider/tst_qslider.cpp29
-rw-r--r--tests/auto/widgets/widgets/qspinbox/BLACKLIST2
-rw-r--r--tests/auto/widgets/widgets/qspinbox/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp108
-rw-r--r--tests/auto/widgets/widgets/qsplashscreen/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qsplashscreen/tst_qsplashscreen.cpp47
-rw-r--r--tests/auto/widgets/widgets/qsplitter/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp144
-rw-r--r--tests/auto/widgets/widgets/qstackedwidget/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qstackedwidget/tst_qstackedwidget.cpp33
-rw-r--r--tests/auto/widgets/widgets/qstatusbar/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qstatusbar/tst_qstatusbar.cpp79
-rw-r--r--tests/auto/widgets/widgets/qtabbar/BLACKLIST2
-rw-r--r--tests/auto/widgets/widgets/qtabbar/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp385
-rw-r--r--tests/auto/widgets/widgets/qtabwidget/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp123
-rw-r--r--tests/auto/widgets/widgets/qtextbrowser/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qtextbrowser/tst_qtextbrowser.cpp91
-rw-r--r--tests/auto/widgets/widgets/qtextedit/CMakeLists.txt13
-rw-r--r--tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp214
-rw-r--r--tests/auto/widgets/widgets/qtoolbar/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp191
-rw-r--r--tests/auto/widgets/widgets/qtoolbox/CMakeLists.txt11
-rw-r--r--tests/auto/widgets/widgets/qtoolbox/tst_qtoolbox.cpp29
-rw-r--r--tests/auto/widgets/widgets/qtoolbutton/CMakeLists.txt12
-rw-r--r--tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp91
-rw-r--r--tests/auto/xml/CMakeLists.txt7
-rw-r--r--tests/auto/xml/dom/CMakeLists.txt3
-rw-r--r--tests/auto/xml/dom/qdom/CMakeLists.txt12
-rw-r--r--tests/auto/xml/dom/qdom/tst_qdom.cpp442
-rw-r--r--tests/baseline/CMakeLists.txt5
-rw-r--r--tests/baseline/painting/CMakeLists.txt9
-rw-r--r--tests/baseline/painting/scripts/aliasing.qps13
-rw-r--r--tests/baseline/painting/scripts/cliprects.qps295
-rw-r--r--tests/baseline/painting/scripts/pattern_xform.qps79
-rw-r--r--tests/baseline/painting/scripts/pattern_xform2.qps81
-rw-r--r--tests/baseline/painting/scripts/pixmapfragments.qps65
-rw-r--r--tests/baseline/painting/scripts/text.qps2
-rw-r--r--tests/baseline/painting/tst_baseline_painting.cpp74
-rw-r--r--tests/baseline/shared/baselineprotocol.cpp65
-rw-r--r--tests/baseline/shared/baselineprotocol.h29
-rw-r--r--tests/baseline/shared/lookup3.cpp35
-rw-r--r--tests/baseline/shared/paintcommands.cpp239
-rw-r--r--tests/baseline/shared/paintcommands.h43
-rw-r--r--tests/baseline/shared/qbaselinetest.cpp95
-rw-r--r--tests/baseline/shared/qbaselinetest.h38
-rw-r--r--tests/baseline/shared/qwidgetbaselinetest.cpp126
-rw-r--r--tests/baseline/shared/qwidgetbaselinetest.h31
-rw-r--r--tests/baseline/stylesheet/CMakeLists.txt6
-rw-r--r--tests/baseline/stylesheet/qss/dummy.qss31
-rw-r--r--tests/baseline/stylesheet/qss/qheaderview/selectedFontWeight.qss16
-rw-r--r--tests/baseline/stylesheet/qss/qtoolbutton/menuButton_no_border.qss1
-rw-r--r--tests/baseline/stylesheet/qss/qtoolbutton/menuButton_subcontrol_padding.qss12
-rw-r--r--tests/baseline/stylesheet/qss/qtoolbutton/menuButton_subcontrol_position.qss4
-rw-r--r--tests/baseline/stylesheet/qss/qtreeview/showDecorationSelected.qss3
-rw-r--r--tests/baseline/stylesheet/qss/qtreeview/styledIndicators.qss18
-rw-r--r--tests/baseline/stylesheet/qss/qtreeview/styledItem.qss7
-rw-r--r--tests/baseline/stylesheet/qss/qtreeview/styledSelection.qss10
-rw-r--r--tests/baseline/stylesheet/tst_baseline_stylesheet.cpp127
-rw-r--r--tests/baseline/text/CMakeLists.txt6
-rw-r--r--tests/baseline/text/data/colored_list.html68
-rw-r--r--tests/baseline/text/tst_baseline_text.cpp55
-rw-r--r--tests/baseline/widgets/CMakeLists.txt6
-rw-r--r--tests/baseline/widgets/tst_baseline_widgets.cpp997
-rw-r--r--tests/benchmarks/CMakeLists.txt7
-rw-r--r--tests/benchmarks/corelib/CMakeLists.txt4
-rw-r--r--tests/benchmarks/corelib/io/CMakeLists.txt3
-rw-r--r--tests/benchmarks/corelib/io/qdir/10000/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/io/qdir/10000/tst_bench_qdir_10000.cpp96
-rw-r--r--tests/benchmarks/corelib/io/qdir/tree/4.6.0-list.txt2
-rw-r--r--tests/benchmarks/corelib/io/qdir/tree/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/io/qdir/tree/tst_bench_qdir_tree.cpp31
-rw-r--r--tests/benchmarks/corelib/io/qdiriterator/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.cpp29
-rw-r--r--tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.h29
-rw-r--r--tests/benchmarks/corelib/io/qdiriterator/tst_bench_qdiriterator.cpp107
-rw-r--r--tests/benchmarks/corelib/io/qfile/CMakeLists.txt8
-rw-r--r--tests/benchmarks/corelib/io/qfile/tst_bench_qfile.cpp41
-rw-r--r--tests/benchmarks/corelib/io/qfileinfo/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/io/qfileinfo/tst_bench_qfileinfo.cpp29
-rw-r--r--tests/benchmarks/corelib/io/qiodevice/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/io/qiodevice/tst_bench_qiodevice.cpp29
-rw-r--r--tests/benchmarks/corelib/io/qprocess/CMakeLists.txt3
-rw-r--r--tests/benchmarks/corelib/io/qprocess/test/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/io/qprocess/testProcessLoopback/CMakeLists.txt3
-rw-r--r--tests/benchmarks/corelib/io/qprocess/testProcessLoopback/loopback.cpp29
-rw-r--r--tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp33
-rw-r--r--tests/benchmarks/corelib/io/qtemporaryfile/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/io/qtemporaryfile/tst_bench_qtemporaryfile.cpp29
-rw-r--r--tests/benchmarks/corelib/io/qtextstream/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/io/qtextstream/tst_bench_qtextstream.cpp29
-rw-r--r--tests/benchmarks/corelib/io/qurl/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/io/qurl/tst_bench_qurl.cpp31
-rw-r--r--tests/benchmarks/corelib/itemmodels/qsortfilterproxymodel/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/itemmodels/qsortfilterproxymodel/tst_bench_qsortfilterproxymodel.cpp45
-rw-r--r--tests/benchmarks/corelib/json/CMakeLists.txt8
-rw-r--r--tests/benchmarks/corelib/json/tst_bench_qtjson.cpp30
-rw-r--r--tests/benchmarks/corelib/kernel/CMakeLists.txt3
-rw-r--r--tests/benchmarks/corelib/kernel/events/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/kernel/events/tst_bench_events.cpp30
-rw-r--r--tests/benchmarks/corelib/kernel/qcoreapplication/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/kernel/qcoreapplication/tst_bench_qcoreapplication.cpp55
-rw-r--r--tests/benchmarks/corelib/kernel/qmetaenum/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/kernel/qmetaenum/tst_bench_qmetaenum.cpp29
-rw-r--r--tests/benchmarks/corelib/kernel/qmetaobject/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/kernel/qmetaobject/tst_bench_qmetaobject.cpp29
-rw-r--r--tests/benchmarks/corelib/kernel/qmetatype/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/kernel/qmetatype/tst_bench_qmetatype.cpp29
-rw-r--r--tests/benchmarks/corelib/kernel/qobject/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/kernel/qobject/object.cpp29
-rw-r--r--tests/benchmarks/corelib/kernel/qobject/object.h29
-rw-r--r--tests/benchmarks/corelib/kernel/qobject/tst_bench_qobject.cpp29
-rw-r--r--tests/benchmarks/corelib/kernel/qproperty/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/kernel/qproperty/propertytester.h29
-rw-r--r--tests/benchmarks/corelib/kernel/qproperty/tst_bench_qproperty.cpp29
-rw-r--r--tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/CMakeLists.txt8
-rw-r--r--tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/tst_qtimer_vs_qmetaobject.cpp33
-rw-r--r--tests/benchmarks/corelib/kernel/qvariant/CMakeLists.txt12
-rw-r--r--tests/benchmarks/corelib/kernel/qvariant/tst_bench_qvariant.cpp29
-rw-r--r--tests/benchmarks/corelib/kernel/qwineventnotifier/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/kernel/qwineventnotifier/tst_bench_qwineventnotifier.cpp29
-rw-r--r--tests/benchmarks/corelib/mimetypes/CMakeLists.txt3
-rw-r--r--tests/benchmarks/corelib/mimetypes/qmimedatabase/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/mimetypes/qmimedatabase/tst_bench_qmimedatabase.cpp66
-rw-r--r--tests/benchmarks/corelib/plugin/CMakeLists.txt3
-rw-r--r--tests/benchmarks/corelib/plugin/quuid/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/plugin/quuid/tst_bench_quuid.cpp43
-rw-r--r--tests/benchmarks/corelib/serialization/CMakeLists.txt4
-rw-r--r--tests/benchmarks/corelib/serialization/qcborvalue/CMakeLists.txt10
-rw-r--r--tests/benchmarks/corelib/serialization/qcborvalue/tst_bench_qcborvalue.cpp95
-rw-r--r--tests/benchmarks/corelib/text/CMakeLists.txt4
-rw-r--r--tests/benchmarks/corelib/text/qbytearray/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/text/qbytearray/tst_bench_qbytearray.cpp68
-rw-r--r--tests/benchmarks/corelib/text/qchar/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/text/qchar/tst_bench_qchar.cpp29
-rw-r--r--tests/benchmarks/corelib/text/qlocale/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/text/qlocale/tst_bench_qlocale.cpp250
-rw-r--r--tests/benchmarks/corelib/text/qregularexpression/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/text/qregularexpression/tst_bench_qregularexpression.cpp29
-rw-r--r--tests/benchmarks/corelib/text/qstring/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/text/qstring/tst_bench_qstring.cpp256
-rw-r--r--tests/benchmarks/corelib/text/qstringbuilder/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/text/qstringbuilder/tst_bench_qstringbuilder.cpp29
-rw-r--r--tests/benchmarks/corelib/text/qstringlist/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/text/qstringlist/tst_bench_qstringlist.cpp85
-rw-r--r--tests/benchmarks/corelib/text/qstringtokenizer/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/text/qstringtokenizer/tst_bench_qstringtokenizer.cpp29
-rw-r--r--tests/benchmarks/corelib/text/qutf8stringview/CMakeLists.txt14
-rw-r--r--tests/benchmarks/corelib/text/qutf8stringview/tst_bench_qutf8stringview.cpp263
-rw-r--r--tests/benchmarks/corelib/thread/CMakeLists.txt3
-rw-r--r--tests/benchmarks/corelib/thread/qfuture/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/thread/qfuture/tst_bench_qfuture.cpp47
-rw-r--r--tests/benchmarks/corelib/thread/qmutex/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/thread/qmutex/tst_bench_qmutex.cpp73
-rw-r--r--tests/benchmarks/corelib/thread/qreadwritelock/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/thread/qreadwritelock/tst_bench_qreadwritelock.cpp29
-rw-r--r--tests/benchmarks/corelib/thread/qthreadpool/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/thread/qthreadpool/tst_bench_qthreadpool.cpp29
-rw-r--r--tests/benchmarks/corelib/thread/qthreadstorage/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/thread/qthreadstorage/tst_bench_qthreadstorage.cpp30
-rw-r--r--tests/benchmarks/corelib/thread/qwaitcondition/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/thread/qwaitcondition/tst_bench_qwaitcondition.cpp29
-rw-r--r--tests/benchmarks/corelib/time/CMakeLists.txt3
-rw-r--r--tests/benchmarks/corelib/time/qdate/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/time/qdate/tst_bench_qdate.cpp29
-rw-r--r--tests/benchmarks/corelib/time/qdatetime/CMakeLists.txt6
-rw-r--r--tests/benchmarks/corelib/time/qdatetime/tst_bench_qdatetime.cpp193
-rw-r--r--tests/benchmarks/corelib/time/qtimezone/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/time/qtimezone/tst_bench_qtimezone.cpp77
-rw-r--r--tests/benchmarks/corelib/tools/CMakeLists.txt3
-rw-r--r--tests/benchmarks/corelib/tools/containers-associative/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/containers-associative/tst_bench_containers_associative.cpp31
-rw-r--r--tests/benchmarks/corelib/tools/containers-sequential/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/containers-sequential/tst_bench_containers_sequential.cpp33
-rw-r--r--tests/benchmarks/corelib/tools/qcontiguouscache/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/qcontiguouscache/tst_bench_qcontiguouscache.cpp29
-rw-r--r--tests/benchmarks/corelib/tools/qcryptographichash/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/qcryptographichash/tst_bench_qcryptographichash.cpp221
-rw-r--r--tests/benchmarks/corelib/tools/qhash/CMakeLists.txt7
-rw-r--r--tests/benchmarks/corelib/tools/qhash/outofline.cpp45
-rw-r--r--tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.cpp81
-rw-r--r--tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.h47
-rw-r--r--tests/benchmarks/corelib/tools/qlist/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/qlist/tst_bench_qlist.cpp29
-rw-r--r--tests/benchmarks/corelib/tools/qmap/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/qmap/tst_bench_qmap.cpp29
-rw-r--r--tests/benchmarks/corelib/tools/qrect/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/qrect/tst_bench_qrect.cpp31
-rw-r--r--tests/benchmarks/corelib/tools/qringbuffer/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/qringbuffer/tst_bench_qringbuffer.cpp29
-rw-r--r--tests/benchmarks/corelib/tools/qset/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/qset/tst_bench_qset.cpp103
-rw-r--r--tests/benchmarks/corelib/tools/qsharedpointer/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/qsharedpointer/tst_bench_shared_ptr.cpp42
-rw-r--r--tests/benchmarks/corelib/tools/qstack/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/qstack/tst_bench_qstack.cpp29
-rw-r--r--tests/benchmarks/corelib/tools/qvector/CMakeLists.txt5
-rw-r--r--tests/benchmarks/corelib/tools/qvector/outofline.cpp29
-rw-r--r--tests/benchmarks/corelib/tools/qvector/qrawvector.h29
-rw-r--r--tests/benchmarks/corelib/tools/qvector/tst_bench_qvector.cpp29
-rw-r--r--tests/benchmarks/dbus/CMakeLists.txt3
-rw-r--r--tests/benchmarks/dbus/qdbusperformance/CMakeLists.txt3
-rw-r--r--tests/benchmarks/dbus/qdbusperformance/server/CMakeLists.txt5
-rw-r--r--tests/benchmarks/dbus/qdbusperformance/server/server.cpp29
-rw-r--r--tests/benchmarks/dbus/qdbusperformance/serverobject.h29
-rw-r--r--tests/benchmarks/dbus/qdbusperformance/test/CMakeLists.txt5
-rw-r--r--tests/benchmarks/dbus/qdbusperformance/tst_qdbusperformance.cpp29
-rw-r--r--tests/benchmarks/dbus/qdbustype/CMakeLists.txt7
-rw-r--r--tests/benchmarks/dbus/qdbustype/main.cpp29
-rw-r--r--tests/benchmarks/gui/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/animation/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/animation/qanimation/CMakeLists.txt5
-rw-r--r--tests/benchmarks/gui/animation/qanimation/dummyanimation.cpp29
-rw-r--r--tests/benchmarks/gui/animation/qanimation/dummyanimation.h29
-rw-r--r--tests/benchmarks/gui/animation/qanimation/dummyobject.cpp29
-rw-r--r--tests/benchmarks/gui/animation/qanimation/dummyobject.h29
-rw-r--r--tests/benchmarks/gui/animation/qanimation/main.cpp29
-rw-r--r--tests/benchmarks/gui/animation/qanimation/rectanimation.cpp29
-rw-r--r--tests/benchmarks/gui/animation/qanimation/rectanimation.h29
-rw-r--r--tests/benchmarks/gui/image/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/image/blendbench/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/image/blendbench/main.cpp29
-rw-r--r--tests/benchmarks/gui/image/qimageconversion/CMakeLists.txt9
-rw-r--r--tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp29
-rw-r--r--tests/benchmarks/gui/image/qimagereader/CMakeLists.txt13
-rw-r--r--tests/benchmarks/gui/image/qimagereader/tst_bench_qimagereader.cpp (renamed from tests/benchmarks/gui/image/qimagereader/tst_qimagereader.cpp)91
-rw-r--r--tests/benchmarks/gui/image/qimagescale/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/image/qimagescale/tst_qimagescale.cpp29
-rw-r--r--tests/benchmarks/gui/image/qpixmap/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/image/qpixmap/tst_qpixmap.cpp29
-rw-r--r--tests/benchmarks/gui/image/qpixmapcache/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/image/qpixmapcache/tst_qpixmapcache.cpp29
-rw-r--r--tests/benchmarks/gui/kernel/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/kernel/qguimetatype/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp29
-rw-r--r--tests/benchmarks/gui/kernel/qguivariant/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/kernel/qguivariant/tst_qguivariant.cpp29
-rw-r--r--tests/benchmarks/gui/math3d/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/math3d/qmatrix4x4/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/math3d/qmatrix4x4/tst_qmatrix4x4.cpp29
-rw-r--r--tests/benchmarks/gui/math3d/qquaternion/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/math3d/qquaternion/tst_qquaternion.cpp29
-rw-r--r--tests/benchmarks/gui/painting/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/painting/drawtexture/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/painting/drawtexture/tst_drawtexture.cpp29
-rw-r--r--tests/benchmarks/gui/painting/lancebench/CMakeLists.txt12
-rw-r--r--tests/benchmarks/gui/painting/lancebench/tst_lancebench.cpp35
-rw-r--r--tests/benchmarks/gui/painting/qcolor/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/painting/qcolor/tst_qcolor.cpp29
-rw-r--r--tests/benchmarks/gui/painting/qpainter/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/painting/qpainter/tst_qpainter.cpp86
-rw-r--r--tests/benchmarks/gui/painting/qregion/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/painting/qregion/main.cpp29
-rw-r--r--tests/benchmarks/gui/painting/qtbench/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/painting/qtbench/benchmarktests.h35
-rw-r--r--tests/benchmarks/gui/painting/qtbench/tst_qtbench.cpp36
-rw-r--r--tests/benchmarks/gui/painting/qtransform/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/painting/qtransform/tst_qtransform.cpp71
-rw-r--r--tests/benchmarks/gui/text/CMakeLists.txt3
-rw-r--r--tests/benchmarks/gui/text/qfontmetrics/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/text/qfontmetrics/main.cpp29
-rw-r--r--tests/benchmarks/gui/text/qtext/CMakeLists.txt9
-rw-r--r--tests/benchmarks/gui/text/qtext/main.cpp35
-rw-r--r--tests/benchmarks/gui/text/qtextdocument/CMakeLists.txt8
-rw-r--r--tests/benchmarks/gui/text/qtextdocument/main.cpp29
-rw-r--r--tests/benchmarks/network/CMakeLists.txt5
-rw-r--r--tests/benchmarks/network/access/CMakeLists.txt4
-rw-r--r--tests/benchmarks/network/access/qdecompresshelper/CMakeLists.txt11
-rw-r--r--tests/benchmarks/network/access/qdecompresshelper/main.cpp29
-rw-r--r--tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/CMakeLists.txt8
-rw-r--r--tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp29
-rw-r--r--tests/benchmarks/network/access/qhttpheaders/CMakeLists.txt10
-rw-r--r--tests/benchmarks/network/access/qhttpheaders/tst_bench_qhttpheaders.cpp266
-rw-r--r--tests/benchmarks/network/access/qnetworkdiskcache/CMakeLists.txt8
-rw-r--r--tests/benchmarks/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp29
-rw-r--r--tests/benchmarks/network/access/qnetworkreply/CMakeLists.txt8
-rw-r--r--tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp51
-rw-r--r--tests/benchmarks/network/access/qnetworkreply_from_cache/CMakeLists.txt5
-rw-r--r--tests/benchmarks/network/access/qnetworkreply_from_cache/tst_qnetworkreply_from_cache.cpp29
-rw-r--r--tests/benchmarks/network/kernel/CMakeLists.txt3
-rw-r--r--tests/benchmarks/network/kernel/qhostinfo/CMakeLists.txt8
-rw-r--r--tests/benchmarks/network/kernel/qhostinfo/main.cpp29
-rw-r--r--tests/benchmarks/network/socket/CMakeLists.txt3
-rw-r--r--tests/benchmarks/network/socket/qlocalsocket/CMakeLists.txt8
-rw-r--r--tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp42
-rw-r--r--tests/benchmarks/network/socket/qtcpserver/CMakeLists.txt8
-rw-r--r--tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp29
-rw-r--r--tests/benchmarks/network/socket/qudpsocket/CMakeLists.txt8
-rw-r--r--tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp29
-rw-r--r--tests/benchmarks/network/ssl/CMakeLists.txt3
-rw-r--r--tests/benchmarks/network/ssl/qsslsocket/CMakeLists.txt8
-rw-r--r--tests/benchmarks/network/ssl/qsslsocket/tst_qsslsocket.cpp29
-rw-r--r--tests/benchmarks/plugins/imageformats/jpeg/CMakeLists.txt9
-rw-r--r--tests/benchmarks/plugins/imageformats/jpeg/jpeg.cpp29
-rw-r--r--tests/benchmarks/sql/CMakeLists.txt3
-rw-r--r--tests/benchmarks/sql/kernel/CMakeLists.txt3
-rw-r--r--tests/benchmarks/sql/kernel/qsqlquery/CMakeLists.txt5
-rw-r--r--tests/benchmarks/sql/kernel/qsqlquery/main.cpp216
-rw-r--r--tests/benchmarks/sql/kernel/qsqlrecord/CMakeLists.txt5
-rw-r--r--tests/benchmarks/sql/kernel/qsqlrecord/tst_bench_qsqlrecord.cpp112
-rw-r--r--tests/benchmarks/testlib/CMakeLists.txt3
-rw-r--r--tests/benchmarks/testlib/tostring/CMakeLists.txt5
-rw-r--r--tests/benchmarks/testlib/tostring/tst_tostring.cpp86
-rw-r--r--tests/benchmarks/widgets/CMakeLists.txt3
-rw-r--r--tests/benchmarks/widgets/graphicsview/CMakeLists.txt3
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/CMakeLists.txt1
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/CMakeLists.txt11
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/main.cpp74
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.cpp33
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/button.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/label.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/resourcemoninterface.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview_p.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsanchorlayout/CMakeLists.txt8
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsitem/CMakeLists.txt8
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp59
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicslayout/CMakeLists.txt6
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp31
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicslinearlayout/CMakeLists.txt8
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsscene/CMakeLists.txt8
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/CMakeLists.txt11
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/CMakeLists.txt14
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/chip.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/chip.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/main.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/mainwindow.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/mainwindow.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/moveItems/CMakeLists.txt5
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/scrolltest/CMakeLists.txt5
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chip.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chip.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.cpp32
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.h29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp29
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicswidget/CMakeLists.txt8
-rw-r--r--tests/benchmarks/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp29
-rw-r--r--tests/benchmarks/widgets/itemviews/CMakeLists.txt3
-rw-r--r--tests/benchmarks/widgets/itemviews/qheaderview/CMakeLists.txt8
-rw-r--r--tests/benchmarks/widgets/itemviews/qheaderview/qheaderviewbench.cpp29
-rw-r--r--tests/benchmarks/widgets/itemviews/qlistview/CMakeLists.txt8
-rw-r--r--tests/benchmarks/widgets/itemviews/qlistview/tst_qlistview.cpp29
-rw-r--r--tests/benchmarks/widgets/itemviews/qtableview/CMakeLists.txt8
-rw-r--r--tests/benchmarks/widgets/itemviews/qtableview/tst_qtableview.cpp45
-rw-r--r--tests/benchmarks/widgets/kernel/CMakeLists.txt3
-rw-r--r--tests/benchmarks/widgets/kernel/qapplication/CMakeLists.txt8
-rw-r--r--tests/benchmarks/widgets/kernel/qapplication/main.cpp29
-rw-r--r--tests/benchmarks/widgets/kernel/qwidget/CMakeLists.txt5
-rw-r--r--tests/benchmarks/widgets/kernel/qwidget/tst_qwidget.cpp31
-rw-r--r--tests/benchmarks/widgets/styles/CMakeLists.txt3
-rw-r--r--tests/benchmarks/widgets/styles/qstylesheetstyle/CMakeLists.txt8
-rw-r--r--tests/benchmarks/widgets/styles/qstylesheetstyle/main.cpp29
-rw-r--r--tests/benchmarks/widgets/widgets/CMakeLists.txt3
-rw-r--r--tests/benchmarks/widgets/widgets/qtextbrowser/CMakeLists.txt8
-rw-r--r--tests/benchmarks/widgets/widgets/qtextbrowser/main.cpp29
-rw-r--r--tests/libfuzzer/corelib/serialization/qcborstreamreader/next/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/corelib/serialization/qcborstreamreader/next/main.cpp29
-rw-r--r--tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/main.cpp29
-rw-r--r--tests/libfuzzer/corelib/serialization/qjsondocument/fromjson/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/corelib/serialization/qjsondocument/fromjson/main.cpp29
-rw-r--r--tests/libfuzzer/corelib/serialization/qtextstream/extractionoperator-float/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/corelib/serialization/qtextstream/extractionoperator-float/main.cpp29
-rw-r--r--tests/libfuzzer/corelib/serialization/qxmlstream/qxmlstreamreader/readnext/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/corelib/serialization/qxmlstream/qxmlstreamreader/readnext/main.cpp29
-rw-r--r--tests/libfuzzer/corelib/text/qregularexpression/optimize/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/corelib/text/qregularexpression/optimize/main.cpp29
-rw-r--r--tests/libfuzzer/corelib/time/qdatetime/fromstring/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/corelib/time/qdatetime/fromstring/main.cpp29
-rw-r--r--tests/libfuzzer/corelib/tools/qcryptographichash/result/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/corelib/tools/qcryptographichash/result/main.cpp29
-rw-r--r--tests/libfuzzer/gui/image/qimage/loadfromdata/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/gui/image/qimage/loadfromdata/main.cpp29
-rw-r--r--tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/main.cpp68
-rw-r--r--tests/libfuzzer/gui/text/qtextdocument/sethtml/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/gui/text/qtextdocument/sethtml/main.cpp29
-rw-r--r--tests/libfuzzer/gui/text/qtextdocument/setmarkdown/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/gui/text/qtextdocument/setmarkdown/main.cpp29
-rw-r--r--tests/libfuzzer/gui/text/qtextlayout/beginlayout/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/gui/text/qtextlayout/beginlayout/main.cpp29
-rw-r--r--tests/libfuzzer/network/ssl/qsslcertificate/qsslcertificate/pem/CMakeLists.txt3
-rw-r--r--tests/libfuzzer/network/ssl/qsslcertificate/qsslcertificate/pem/main.cpp29
-rw-r--r--tests/manual/CMakeLists.txt37
-rw-r--r--tests/manual/android_content_uri/CMakeLists.txt13
-rw-r--r--tests/manual/android_content_uri/tst_content_uris.cpp252
-rw-r--r--tests/manual/cmake/test_copy_file_if_different_command/CMakeLists.txt76
-rw-r--r--tests/manual/cmake/test_copy_file_if_different_command/main.cpp36
-rw-r--r--tests/manual/cocoa/appicon/CMakeLists.txt8
-rw-r--r--tests/manual/cocoa/appicon/main.cpp29
-rw-r--r--tests/manual/cocoa/menurama/CMakeLists.txt10
-rw-r--r--tests/manual/cocoa/menurama/main.cpp29
-rw-r--r--tests/manual/cocoa/menurama/mainwindow.cpp29
-rw-r--r--tests/manual/cocoa/menurama/mainwindow.h29
-rw-r--r--tests/manual/cocoa/menurama/menuramaapplication.cpp31
-rw-r--r--tests/manual/cocoa/menurama/menuramaapplication.h29
-rw-r--r--tests/manual/cocoa/menus/CMakeLists.txt8
-rw-r--r--tests/manual/cocoa/menus/main.cpp29
-rw-r--r--tests/manual/cocoa/nativewidgets/CMakeLists.txt8
-rw-r--r--tests/manual/cocoa/nativewidgets/main.cpp29
-rw-r--r--tests/manual/cocoa/popups/CMakeLists.txt5
-rw-r--r--tests/manual/cocoa/popups/main.cpp29
-rw-r--r--tests/manual/cocoa/qsystemtrayicon/CMakeLists.txt9
-rw-r--r--tests/manual/cocoa/qsystemtrayicon/main.cpp29
-rw-r--r--tests/manual/cocoa/qt_on_cocoa/CMakeLists.txt10
-rw-r--r--tests/manual/cocoa/qt_on_cocoa/main.mm29
-rw-r--r--tests/manual/cocoa/qt_on_cocoa/qt_on_cocoa.pro1
-rw-r--r--tests/manual/cocoa/qt_on_cocoa/rasterwindow.cpp29
-rw-r--r--tests/manual/cocoa/qt_on_cocoa/rasterwindow.h29
-rw-r--r--tests/manual/cocoa/wheelevent/CMakeLists.txt8
-rw-r--r--tests/manual/cocoa/wheelevent/main.cpp29
-rw-r--r--tests/manual/cocoa/wheelevent/window.cpp29
-rw-r--r--tests/manual/cocoa/wheelevent/window.h29
-rw-r--r--tests/manual/corelib/CMakeLists.txt6
-rw-r--r--tests/manual/corelib/qdatastream/CMakeLists.txt15
-rw-r--r--tests/manual/corelib/qdatastream/qdatastream.pro6
-rw-r--r--tests/manual/corelib/qdatastream/tst_manualqdatastream.cpp234
-rw-r--r--tests/manual/corelib/time/CMakeLists.txt4
-rwxr-xr-xtests/manual/corelib/time/foreachzone30
-rw-r--r--tests/manual/corelib/time/zonechange/CMakeLists.txt9
-rw-r--r--tests/manual/corelib/time/zonechange/tst_zonechange.cpp60
-rw-r--r--tests/manual/corelib/tools/CMakeLists.txt12
-rw-r--r--tests/manual/corelib/tools/customtype/CMakeLists.txt15
-rw-r--r--tests/manual/corelib/tools/customtype/customtype.pro7
-rw-r--r--tests/manual/corelib/tools/customtype/main.cpp37
-rw-r--r--tests/manual/corelib/tools/customtype/message.cpp38
-rw-r--r--tests/manual/corelib/tools/customtype/message.h38
-rw-r--r--tests/manual/corelib/tools/customtypesending/CMakeLists.txt16
-rw-r--r--tests/manual/corelib/tools/customtypesending/customtypesending.pro9
-rw-r--r--tests/manual/corelib/tools/customtypesending/main.cpp31
-rw-r--r--tests/manual/corelib/tools/customtypesending/message.cpp19
-rw-r--r--tests/manual/corelib/tools/customtypesending/message.h34
-rw-r--r--tests/manual/corelib/tools/customtypesending/window.cpp43
-rw-r--r--tests/manual/corelib/tools/customtypesending/window.h35
-rw-r--r--tests/manual/corelib/tools/qhash/main.cpp29
-rw-r--r--tests/manual/corelib/tools/qlist/main.cpp29
-rw-r--r--tests/manual/corelib/tools/qmap/main.cpp29
-rw-r--r--tests/manual/corelib/tools/qset/main.cpp29
-rw-r--r--tests/manual/corelib/tools/qvarlengtharray/main.cpp29
-rw-r--r--tests/manual/corelib/tools/qvector/main.cpp29
-rw-r--r--tests/manual/diaglib/debugproxystyle.cpp29
-rw-r--r--tests/manual/diaglib/debugproxystyle.h29
-rw-r--r--tests/manual/diaglib/eventfilter.cpp29
-rw-r--r--tests/manual/diaglib/eventfilter.h29
-rw-r--r--tests/manual/diaglib/glinfo.cpp29
-rw-r--r--tests/manual/diaglib/glinfo.h29
-rw-r--r--tests/manual/diaglib/logwidget.cpp29
-rw-r--r--tests/manual/diaglib/logwidget.h29
-rw-r--r--tests/manual/diaglib/nativewindowdump.cpp29
-rw-r--r--tests/manual/diaglib/nativewindowdump.h29
-rw-r--r--tests/manual/diaglib/nativewindowdump_win.cpp29
-rw-r--r--tests/manual/diaglib/qwidgetdump.cpp31
-rw-r--r--tests/manual/diaglib/qwidgetdump.h29
-rw-r--r--tests/manual/diaglib/qwindowdump.cpp29
-rw-r--r--tests/manual/diaglib/qwindowdump.h29
-rw-r--r--tests/manual/diaglib/textdump.cpp29
-rw-r--r--tests/manual/diaglib/textdump.h29
-rw-r--r--tests/manual/dialogs/CMakeLists.txt15
-rw-r--r--tests/manual/dialogs/colordialogpanel.cpp48
-rw-r--r--tests/manual/dialogs/colordialogpanel.h31
-rw-r--r--tests/manual/dialogs/filedialogpanel.cpp63
-rw-r--r--tests/manual/dialogs/filedialogpanel.h38
-rw-r--r--tests/manual/dialogs/fontdialogpanel.cpp46
-rw-r--r--tests/manual/dialogs/fontdialogpanel.h31
-rw-r--r--tests/manual/dialogs/main.cpp29
-rw-r--r--tests/manual/dialogs/messageboxpanel.cpp29
-rw-r--r--tests/manual/dialogs/messageboxpanel.h29
-rw-r--r--tests/manual/dialogs/printdialogpanel.cpp31
-rw-r--r--tests/manual/dialogs/printdialogpanel.h29
-rw-r--r--tests/manual/dialogs/utils.cpp68
-rw-r--r--tests/manual/dialogs/utils.h45
-rw-r--r--tests/manual/dialogs/wizardpanel.cpp53
-rw-r--r--tests/manual/dialogs/wizardpanel.h32
-rw-r--r--tests/manual/embeddedintoforeignwindow/CMakeLists.txt16
-rw-r--r--tests/manual/embeddedintoforeignwindow/itemwindow.cpp31
-rw-r--r--tests/manual/embeddedintoforeignwindow/itemwindow.h32
-rw-r--r--tests/manual/embeddedintoforeignwindow/main.cpp29
-rw-r--r--tests/manual/embeddedwindows/CMakeLists.txt19
-rw-r--r--tests/manual/embeddedwindows/main.cpp110
-rw-r--r--tests/manual/examples/blurpicker/CMakeLists.txt58
-rw-r--r--tests/manual/examples/blurpicker/blureffect.cpp31
-rw-r--r--tests/manual/examples/blurpicker/blureffect.h29
-rw-r--r--tests/manual/examples/blurpicker/blurpicker.cpp122
-rw-r--r--tests/manual/examples/blurpicker/blurpicker.h38
-rw-r--r--tests/manual/examples/blurpicker/blurpicker.pro9
-rw-r--r--tests/manual/examples/blurpicker/blurpicker.qrc14
-rw-r--r--tests/manual/examples/blurpicker/images/README.txt5
-rw-r--r--tests/manual/examples/blurpicker/images/accessories-calculator.pngbin0 -> 3760 bytes
-rw-r--r--tests/manual/examples/blurpicker/images/accessories-text-editor.pngbin0 -> 4746 bytes
-rw-r--r--tests/manual/examples/blurpicker/images/background.jpgbin0 -> 16259 bytes
-rw-r--r--tests/manual/examples/blurpicker/images/help-browser.pngbin0 -> 5392 bytes
-rw-r--r--tests/manual/examples/blurpicker/images/internet-group-chat.pngbin0 -> 2809 bytes
-rw-r--r--tests/manual/examples/blurpicker/images/internet-mail.pngbin0 -> 3899 bytes
-rw-r--r--tests/manual/examples/blurpicker/images/internet-web-browser.pngbin0 -> 6376 bytes
-rw-r--r--tests/manual/examples/blurpicker/images/office-calendar.pngbin0 -> 4010 bytes
-rw-r--r--tests/manual/examples/blurpicker/images/system-users.pngbin0 -> 5353 bytes
-rw-r--r--tests/manual/examples/blurpicker/main.cpp18
-rw-r--r--tests/manual/examples/corelib/permissions/CMakeLists.txt47
-rw-r--r--tests/manual/examples/corelib/permissions/Info.plist59
-rw-r--r--tests/manual/examples/corelib/permissions/android/AndroidManifest.xml52
-rw-r--r--tests/manual/examples/corelib/permissions/main.cpp87
-rw-r--r--tests/manual/examples/opengl/computegles31/CMakeLists.txt49
-rw-r--r--tests/manual/examples/opengl/computegles31/Qt-logo-medium.pngbin0 -> 24817 bytes
-rw-r--r--tests/manual/examples/opengl/computegles31/computegles31.pro11
-rw-r--r--tests/manual/examples/opengl/computegles31/computegles31.qrc5
-rw-r--r--tests/manual/examples/opengl/computegles31/glwindow.cpp372
-rw-r--r--tests/manual/examples/opengl/computegles31/glwindow.h63
-rw-r--r--tests/manual/examples/opengl/computegles31/main.cpp101
-rw-r--r--tests/manual/examples/opengl/contextinfo/CMakeLists.txt39
-rw-r--r--tests/manual/examples/opengl/contextinfo/contextinfo.pro14
-rw-r--r--tests/manual/examples/opengl/contextinfo/main.cpp25
-rw-r--r--tests/manual/examples/opengl/contextinfo/renderwindow.cpp191
-rw-r--r--tests/manual/examples/opengl/contextinfo/renderwindow.h48
-rw-r--r--tests/manual/examples/opengl/contextinfo/widget.cpp360
-rw-r--r--tests/manual/examples/opengl/contextinfo/widget.h46
-rw-r--r--tests/manual/examples/opengl/hellowindow/CMakeLists.txt39
-rw-r--r--tests/manual/examples/opengl/hellowindow/hellowindow.cpp305
-rw-r--r--tests/manual/examples/opengl/hellowindow/hellowindow.h77
-rw-r--r--tests/manual/examples/opengl/hellowindow/hellowindow.pro9
-rw-r--r--tests/manual/examples/opengl/hellowindow/main.cpp125
-rw-r--r--tests/manual/examples/opengl/paintedwindow/CMakeLists.txt37
-rw-r--r--tests/manual/examples/opengl/paintedwindow/main.cpp18
-rw-r--r--tests/manual/examples/opengl/paintedwindow/paintedwindow.cpp185
-rw-r--r--tests/manual/examples/opengl/paintedwindow/paintedwindow.h62
-rw-r--r--tests/manual/examples/opengl/paintedwindow/paintedwindow.pro8
-rw-r--r--tests/manual/examples/opengl/qopenglwidget/CMakeLists.txt53
-rw-r--r--tests/manual/examples/opengl/qopenglwidget/bubble.cpp99
-rw-r--r--tests/manual/examples/opengl/qopenglwidget/bubble.h39
-rw-r--r--tests/manual/examples/opengl/qopenglwidget/glwidget.cpp540
-rw-r--r--tests/manual/examples/opengl/qopenglwidget/glwidget.h85
-rw-r--r--tests/manual/examples/opengl/qopenglwidget/main.cpp42
-rw-r--r--tests/manual/examples/opengl/qopenglwidget/mainwindow.cpp188
-rw-r--r--tests/manual/examples/opengl/qopenglwidget/mainwindow.h39
-rw-r--r--tests/manual/examples/opengl/qopenglwidget/qopenglwidget.pro15
-rw-r--r--tests/manual/examples/opengl/qopenglwidget/qt.pngbin0 -> 2991 bytes
-rw-r--r--tests/manual/examples/opengl/qopenglwidget/texture.qrc5
-rw-r--r--tests/manual/examples/opengl/qopenglwindow/CMakeLists.txt49
-rw-r--r--tests/manual/examples/opengl/qopenglwindow/background.frag30
-rw-r--r--tests/manual/examples/opengl/qopenglwindow/background_renderer.cpp167
-rw-r--r--tests/manual/examples/opengl/qopenglwindow/background_renderer.h46
-rw-r--r--tests/manual/examples/opengl/qopenglwindow/main.cpp154
-rw-r--r--tests/manual/examples/opengl/qopenglwindow/qopenglwindow.pro16
-rw-r--r--tests/manual/examples/opengl/qopenglwindow/shaders.qrc5
-rw-r--r--tests/manual/examples/qpa/CMakeLists.txt8
-rw-r--r--tests/manual/examples/qpa/qpa.pro5
-rw-r--r--tests/manual/examples/qpa/qrasterwindow/CMakeLists.txt35
-rw-r--r--tests/manual/examples/qpa/qrasterwindow/main.cpp91
-rw-r--r--tests/manual/examples/qpa/qrasterwindow/qrasterwindow.pro4
-rw-r--r--tests/manual/examples/qpa/windows/CMakeLists.txt38
-rw-r--r--tests/manual/examples/qpa/windows/main.cpp50
-rw-r--r--tests/manual/examples/qpa/windows/window.cpp164
-rw-r--r--tests/manual/examples/qpa/windows/window.h41
-rw-r--r--tests/manual/examples/qpa/windows/windows.pro9
-rw-r--r--tests/manual/examples/vulkan/hellovulkantexture/CMakeLists.txt50
-rw-r--r--tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.cpp792
-rw-r--r--tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.h66
-rw-r--r--tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.pro7
-rw-r--r--tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.qrc7
-rw-r--r--tests/manual/examples/vulkan/hellovulkantexture/main.cpp32
-rw-r--r--tests/manual/examples/vulkan/hellovulkantexture/qt256.pngbin0 -> 6208 bytes
-rw-r--r--tests/manual/examples/vulkan/hellovulkantexture/texture.frag12
-rw-r--r--tests/manual/examples/vulkan/hellovulkantexture/texture.vert18
-rw-r--r--tests/manual/examples/vulkan/hellovulkantexture/texture_frag.spvbin0 -> 556 bytes
-rw-r--r--tests/manual/examples/vulkan/hellovulkantexture/texture_vert.spvbin0 -> 968 bytes
-rw-r--r--tests/manual/examples/widgets/application/CMakeLists.txt54
-rw-r--r--tests/manual/examples/widgets/application/application.pro13
-rw-r--r--tests/manual/examples/widgets/application/application.qrc10
-rw-r--r--tests/manual/examples/widgets/application/images/copy.pngbin0 -> 1338 bytes
-rw-r--r--tests/manual/examples/widgets/application/images/cut.pngbin0 -> 1323 bytes
-rw-r--r--tests/manual/examples/widgets/application/images/new.pngbin0 -> 852 bytes
-rw-r--r--tests/manual/examples/widgets/application/images/open.pngbin0 -> 2073 bytes
-rw-r--r--tests/manual/examples/widgets/application/images/paste.pngbin0 -> 1645 bytes
-rw-r--r--tests/manual/examples/widgets/application/images/save.pngbin0 -> 2699 bytes
-rw-r--r--tests/manual/examples/widgets/application/main.cpp28
-rw-r--r--tests/manual/examples/widgets/application/mainwindow.cpp306
-rw-r--r--tests/manual/examples/widgets/application/mainwindow.h53
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/CMakeLists.txt55
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/classwizard.cpp394
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/classwizard.h119
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/classwizard.pro10
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/classwizard.qrc11
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/images/background.pngbin0 -> 22578 bytes
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/images/banner.pngbin0 -> 3947 bytes
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/images/logo1.pngbin0 -> 1619 bytes
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/images/logo2.pngbin0 -> 1619 bytes
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/images/logo3.pngbin0 -> 1619 bytes
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/images/watermark1.pngbin0 -> 14516 bytes
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/images/watermark2.pngbin0 -> 14912 bytes
-rw-r--r--tests/manual/examples/widgets/dialogs/classwizard/main.cpp26
-rw-r--r--tests/manual/examples/widgets/dialogs/extension/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/dialogs/extension/extension.pro9
-rw-r--r--tests/manual/examples/widgets/dialogs/extension/finddialog.cpp77
-rw-r--r--tests/manual/examples/widgets/dialogs/extension/finddialog.h41
-rw-r--r--tests/manual/examples/widgets/dialogs/extension/main.cpp16
-rw-r--r--tests/manual/examples/widgets/draganddrop/fridgemagnets/CMakeLists.txt50
-rw-r--r--tests/manual/examples/widgets/draganddrop/fridgemagnets/draglabel.cpp51
-rw-r--r--tests/manual/examples/widgets/draganddrop/fridgemagnets/draglabel.h27
-rw-r--r--tests/manual/examples/widgets/draganddrop/fridgemagnets/dragwidget.cpp176
-rw-r--r--tests/manual/examples/widgets/draganddrop/fridgemagnets/dragwidget.h28
-rw-r--r--tests/manual/examples/widgets/draganddrop/fridgemagnets/fridgemagnets.pro12
-rw-r--r--tests/manual/examples/widgets/draganddrop/fridgemagnets/fridgemagnets.qrc5
-rw-r--r--tests/manual/examples/widgets/draganddrop/fridgemagnets/main.cpp23
-rw-r--r--tests/manual/examples/widgets/draganddrop/fridgemagnets/words.txt48
-rw-r--r--tests/manual/examples/widgets/draganddrop/puzzle/CMakeLists.txt51
-rw-r--r--tests/manual/examples/widgets/draganddrop/puzzle/example.jpgbin0 -> 42654 bytes
-rw-r--r--tests/manual/examples/widgets/draganddrop/puzzle/main.cpp15
-rw-r--r--tests/manual/examples/widgets/draganddrop/puzzle/mainwindow.cpp118
-rw-r--r--tests/manual/examples/widgets/draganddrop/puzzle/mainwindow.h40
-rw-r--r--tests/manual/examples/widgets/draganddrop/puzzle/pieceslist.cpp87
-rw-r--r--tests/manual/examples/widgets/draganddrop/puzzle/pieceslist.h28
-rw-r--r--tests/manual/examples/widgets/draganddrop/puzzle/puzzle.pro17
-rw-r--r--tests/manual/examples/widgets/draganddrop/puzzle/puzzle.qrc5
-rw-r--r--tests/manual/examples/widgets/draganddrop/puzzle/puzzlewidget.cpp167
-rw-r--r--tests/manual/examples/widgets/draganddrop/puzzle/puzzlewidget.h56
-rw-r--r--tests/manual/examples/widgets/effects/fademessage/CMakeLists.txt49
-rw-r--r--tests/manual/examples/widgets/effects/fademessage/README2
-rw-r--r--tests/manual/examples/widgets/effects/fademessage/background.jpgbin0 -> 159108 bytes
-rw-r--r--tests/manual/examples/widgets/effects/fademessage/fademessage.cpp91
-rw-r--r--tests/manual/examples/widgets/effects/fademessage/fademessage.h33
-rw-r--r--tests/manual/examples/widgets/effects/fademessage/fademessage.pro9
-rw-r--r--tests/manual/examples/widgets/effects/fademessage/fademessage.qrc5
-rw-r--r--tests/manual/examples/widgets/effects/fademessage/main.cpp18
-rw-r--r--tests/manual/examples/widgets/graphicsview/embeddeddialogs/CMakeLists.txt50
-rw-r--r--tests/manual/examples/widgets/graphicsview/embeddeddialogs/No-Ones-Laughing-3.jpgbin0 -> 30730 bytes
-rw-r--r--tests/manual/examples/widgets/graphicsview/embeddeddialogs/customproxy.cpp133
-rw-r--r--tests/manual/examples/widgets/graphicsview/embeddeddialogs/customproxy.h39
-rw-r--r--tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.cpp70
-rw-r--r--tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.h33
-rw-r--r--tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.ui88
-rw-r--r--tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialogs.pro18
-rw-r--r--tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialogs.qrc5
-rw-r--r--tests/manual/examples/widgets/graphicsview/embeddeddialogs/main.cpp42
-rw-r--r--tests/manual/examples/widgets/graphicsview/flowlayout/CMakeLists.txt38
-rw-r--r--tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.cpp170
-rw-r--r--tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.h44
-rw-r--r--tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.pro10
-rw-r--r--tests/manual/examples/widgets/graphicsview/flowlayout/main.cpp24
-rw-r--r--tests/manual/examples/widgets/graphicsview/flowlayout/window.cpp24
-rw-r--r--tests/manual/examples/widgets/graphicsview/flowlayout/window.h16
-rw-r--r--tests/manual/examples/widgets/itemviews/chart/CMakeLists.txt56
-rw-r--r--tests/manual/examples/widgets/itemviews/chart/chart.pro14
-rw-r--r--tests/manual/examples/widgets/itemviews/chart/chart.qrc5
-rw-r--r--tests/manual/examples/widgets/itemviews/chart/main.cpp14
-rw-r--r--tests/manual/examples/widgets/itemviews/chart/mainwindow.cpp136
-rw-r--r--tests/manual/examples/widgets/itemviews/chart/mainwindow.h34
-rw-r--r--tests/manual/examples/widgets/itemviews/chart/pieview.cpp506
-rw-r--r--tests/manual/examples/widgets/itemviews/chart/pieview.h66
-rw-r--r--tests/manual/examples/widgets/itemviews/chart/qtdata.cht14
-rw-r--r--tests/manual/examples/widgets/itemviews/dirview/CMakeLists.txt36
-rw-r--r--tests/manual/examples/widgets/itemviews/dirview/dirview.pro8
-rw-r--r--tests/manual/examples/widgets/itemviews/dirview/main.cpp62
-rw-r--r--tests/manual/examples/widgets/itemviews/interview/CMakeLists.txt51
-rw-r--r--tests/manual/examples/widgets/itemviews/interview/README2
-rw-r--r--tests/manual/examples/widgets/itemviews/interview/images/folder.pngbin0 -> 3910 bytes
-rw-r--r--tests/manual/examples/widgets/itemviews/interview/images/interview.pngbin0 -> 174 bytes
-rw-r--r--tests/manual/examples/widgets/itemviews/interview/images/services.pngbin0 -> 3749 bytes
-rw-r--r--tests/manual/examples/widgets/itemviews/interview/interview.pro16
-rw-r--r--tests/manual/examples/widgets/itemviews/interview/interview.qrc7
-rw-r--r--tests/manual/examples/widgets/itemviews/interview/main.cpp55
-rw-r--r--tests/manual/examples/widgets/itemviews/interview/model.cpp110
-rw-r--r--tests/manual/examples/widgets/itemviews/interview/model.h53
-rw-r--r--tests/manual/examples/widgets/itemviews/pixelator/CMakeLists.txt58
-rw-r--r--tests/manual/examples/widgets/itemviews/pixelator/imagemodel.cpp53
-rw-r--r--tests/manual/examples/widgets/itemviews/pixelator/imagemodel.h31
-rw-r--r--tests/manual/examples/widgets/itemviews/pixelator/images.qrc5
-rw-r--r--tests/manual/examples/widgets/itemviews/pixelator/images/qt.pngbin0 -> 1506 bytes
-rw-r--r--tests/manual/examples/widgets/itemviews/pixelator/main.cpp15
-rw-r--r--tests/manual/examples/widgets/itemviews/pixelator/mainwindow.cpp214
-rw-r--r--tests/manual/examples/widgets/itemviews/pixelator/mainwindow.h37
-rw-r--r--tests/manual/examples/widgets/itemviews/pixelator/pixelator.pro16
-rw-r--r--tests/manual/examples/widgets/itemviews/pixelator/pixeldelegate.cpp68
-rw-r--r--tests/manual/examples/widgets/itemviews/pixelator/pixeldelegate.h41
-rw-r--r--tests/manual/examples/widgets/itemviews/puzzle/CMakeLists.txt51
-rw-r--r--tests/manual/examples/widgets/itemviews/puzzle/example.jpgbin0 -> 42654 bytes
-rw-r--r--tests/manual/examples/widgets/itemviews/puzzle/main.cpp15
-rw-r--r--tests/manual/examples/widgets/itemviews/puzzle/mainwindow.cpp115
-rw-r--r--tests/manual/examples/widgets/itemviews/puzzle/mainwindow.h41
-rw-r--r--tests/manual/examples/widgets/itemviews/puzzle/piecesmodel.cpp168
-rw-r--r--tests/manual/examples/widgets/itemviews/puzzle/piecesmodel.h45
-rw-r--r--tests/manual/examples/widgets/itemviews/puzzle/puzzle.pro15
-rw-r--r--tests/manual/examples/widgets/itemviews/puzzle/puzzle.qrc5
-rw-r--r--tests/manual/examples/widgets/itemviews/puzzle/puzzlewidget.cpp163
-rw-r--r--tests/manual/examples/widgets/itemviews/puzzle/puzzlewidget.h56
-rw-r--r--tests/manual/examples/widgets/itemviews/simpledommodel/CMakeLists.txt40
-rw-r--r--tests/manual/examples/widgets/itemviews/simpledommodel/domitem.cpp62
-rw-r--r--tests/manual/examples/widgets/itemviews/simpledommodel/domitem.h29
-rw-r--r--tests/manual/examples/widgets/itemviews/simpledommodel/dommodel.cpp153
-rw-r--r--tests/manual/examples/widgets/itemviews/simpledommodel/dommodel.h38
-rw-r--r--tests/manual/examples/widgets/itemviews/simpledommodel/main.cpp15
-rw-r--r--tests/manual/examples/widgets/itemviews/simpledommodel/mainwindow.cpp47
-rw-r--r--tests/manual/examples/widgets/itemviews/simpledommodel/mainwindow.h33
-rw-r--r--tests/manual/examples/widgets/itemviews/simpledommodel/simpledommodel.pro14
-rw-r--r--tests/manual/examples/widgets/itemviews/simplewidgetmapper/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/itemviews/simplewidgetmapper/main.cpp14
-rw-r--r--tests/manual/examples/widgets/itemviews/simplewidgetmapper/simplewidgetmapper.pro10
-rw-r--r--tests/manual/examples/widgets/itemviews/simplewidgetmapper/window.cpp93
-rw-r--r--tests/manual/examples/widgets/itemviews/simplewidgetmapper/window.h47
-rw-r--r--tests/manual/examples/widgets/itemviews/storageview/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/itemviews/storageview/main.cpp32
-rw-r--r--tests/manual/examples/widgets/itemviews/storageview/storagemodel.cpp164
-rw-r--r--tests/manual/examples/widgets/itemviews/storageview/storagemodel.h46
-rw-r--r--tests/manual/examples/widgets/itemviews/storageview/storageview.pro12
-rw-r--r--tests/manual/examples/widgets/layouts/borderlayout/CMakeLists.txt38
-rw-r--r--tests/manual/examples/widgets/layouts/borderlayout/borderlayout.cpp171
-rw-r--r--tests/manual/examples/widgets/layouts/borderlayout/borderlayout.h50
-rw-r--r--tests/manual/examples/widgets/layouts/borderlayout/borderlayout.pro11
-rw-r--r--tests/manual/examples/widgets/layouts/borderlayout/main.cpp14
-rw-r--r--tests/manual/examples/widgets/layouts/borderlayout/window.cpp31
-rw-r--r--tests/manual/examples/widgets/layouts/borderlayout/window.h24
-rw-r--r--tests/manual/examples/widgets/layouts/dynamiclayouts/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/layouts/dynamiclayouts/dialog.cpp136
-rw-r--r--tests/manual/examples/widgets/layouts/dynamiclayouts/dialog.h53
-rw-r--r--tests/manual/examples/widgets/layouts/dynamiclayouts/dynamiclayouts.pro10
-rw-r--r--tests/manual/examples/widgets/layouts/dynamiclayouts/main.cpp15
-rw-r--r--tests/manual/examples/widgets/mainwindows/dockwidgets/CMakeLists.txt59
-rw-r--r--tests/manual/examples/widgets/mainwindows/dockwidgets/dockwidgets.pro12
-rw-r--r--tests/manual/examples/widgets/mainwindows/dockwidgets/dockwidgets.qrc8
-rw-r--r--tests/manual/examples/widgets/mainwindows/dockwidgets/images/new.pngbin0 -> 977 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/dockwidgets/images/print.pngbin0 -> 1732 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/dockwidgets/images/save.pngbin0 -> 1894 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/dockwidgets/images/undo.pngbin0 -> 1768 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/dockwidgets/main.cpp14
-rw-r--r--tests/manual/examples/widgets/mainwindows/dockwidgets/mainwindow.cpp298
-rw-r--r--tests/manual/examples/widgets/mainwindows/dockwidgets/mainwindow.h46
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/CMakeLists.txt54
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/colorswatch.cpp685
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/colorswatch.h102
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/main.cpp147
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.cpp444
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.h50
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.pro18
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.qrc8
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/qt.pngbin0 -> 2991 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/titlebarCenter.pngbin0 -> 146 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/titlebarLeft.pngbin0 -> 5148 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/titlebarRight.pngbin0 -> 2704 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/toolbar.cpp308
-rw-r--r--tests/manual/examples/widgets/mainwindows/mainwindow/toolbar.h74
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/CMakeLists.txt55
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/images/copy.pngbin0 -> 1338 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/images/cut.pngbin0 -> 1323 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/images/new.pngbin0 -> 852 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/images/open.pngbin0 -> 2073 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/images/paste.pngbin0 -> 1645 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/images/save.pngbin0 -> 2699 bytes
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/main.cpp29
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/mainwindow.cpp476
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/mainwindow.h87
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/mdi.pro13
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/mdi.qrc10
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/mdichild.cpp158
-rw-r--r--tests/manual/examples/widgets/mainwindows/mdi/mdichild.h39
-rw-r--r--tests/manual/examples/widgets/painting/fontsampler/CMakeLists.txt45
-rw-r--r--tests/manual/examples/widgets/painting/fontsampler/fontsampler.pro12
-rw-r--r--tests/manual/examples/widgets/painting/fontsampler/main.cpp14
-rw-r--r--tests/manual/examples/widgets/painting/fontsampler/mainwindow.cpp314
-rw-r--r--tests/manual/examples/widgets/painting/fontsampler/mainwindow.h54
-rw-r--r--tests/manual/examples/widgets/painting/fontsampler/mainwindowbase.ui142
-rw-r--r--tests/manual/examples/widgets/richtext/calendar/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/richtext/calendar/calendar.pro10
-rw-r--r--tests/manual/examples/widgets/richtext/calendar/main.cpp15
-rw-r--r--tests/manual/examples/widgets/richtext/calendar/mainwindow.cpp179
-rw-r--r--tests/manual/examples/widgets/richtext/calendar/mainwindow.h36
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/CMakeLists.txt105
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/example.html84
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/example.md104
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/logo32.pngbin0 -> 1410 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/checkbox-checked.pngbin0 -> 1167 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/checkbox.pngbin0 -> 779 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/editcopy.pngbin0 -> 1468 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/editcut.pngbin0 -> 1512 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/editpaste.pngbin0 -> 1906 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/editredo.pngbin0 -> 1752 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/editundo.pngbin0 -> 1746 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/exportpdf.pngbin0 -> 12637 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/filenew.pngbin0 -> 1172 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/fileopen.pngbin0 -> 2168 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/fileprint.pngbin0 -> 2087 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/filesave.pngbin0 -> 2699 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/format-indent-less.pngbin0 -> 1201 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/format-indent-more.pngbin0 -> 993 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/textbold.pngbin0 -> 1611 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/textcenter.pngbin0 -> 1404 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/textitalic.pngbin0 -> 1164 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/textjustify.pngbin0 -> 1257 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/textleft.pngbin0 -> 1235 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/textright.pngbin0 -> 1406 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/textunder.pngbin0 -> 1183 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/textundercolor.pngbin0 -> 6916 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/zoomin.pngbin0 -> 1696 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/mac/zoomout.pngbin0 -> 1662 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/checkbox-checked.pngbin0 -> 1167 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/checkbox.pngbin0 -> 779 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/editcopy.pngbin0 -> 1325 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/editcut.pngbin0 -> 1896 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/editpaste.pngbin0 -> 1482 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/editredo.pngbin0 -> 1787 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/editundo.pngbin0 -> 1768 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/exportpdf.pngbin0 -> 1215 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/filenew.pngbin0 -> 768 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/fileopen.pngbin0 -> 1662 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/fileprint.pngbin0 -> 1456 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/filesave.pngbin0 -> 1205 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/format-indent-less.pngbin0 -> 1201 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/format-indent-more.pngbin0 -> 993 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/textbold.pngbin0 -> 1134 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/textcenter.pngbin0 -> 627 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/textitalic.pngbin0 -> 829 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/textjustify.pngbin0 -> 695 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/textleft.pngbin0 -> 673 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/textright.pngbin0 -> 677 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/textunder.pngbin0 -> 971 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/textundercolor.pngbin0 -> 6916 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/zoomin.pngbin0 -> 1208 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/images/win/zoomout.pngbin0 -> 1226 bytes
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/main.cpp36
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/textedit.cpp904
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/textedit.h110
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/textedit.pro22
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/textedit.qdoc20
-rw-r--r--tests/manual/examples/widgets/richtext/textedit/textedit.qrc54
-rw-r--r--tests/manual/examples/widgets/scroller/CMakeLists.txt1
-rw-r--r--tests/manual/examples/widgets/scroller/graphicsview/CMakeLists.txt36
-rw-r--r--tests/manual/examples/widgets/scroller/graphicsview/graphicsview.pro8
-rw-r--r--tests/manual/examples/widgets/scroller/graphicsview/main.cpp255
-rw-r--r--tests/manual/examples/widgets/scroller/scroller.pro2
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/CMakeLists.txt18
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/app/CMakeLists.txt36
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/app/app.pro37
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/app/interfaces.h76
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/app/main.cpp19
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/app/mainwindow.cpp282
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/app/mainwindow.h68
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/app/paintarea.cpp152
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/app/paintarea.h54
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/app/plugindialog.cpp118
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/app/plugindialog.h38
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugandpaint.pro7
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/CMakeLists.txt2
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/CMakeLists.txt18
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.json1
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro17
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictoolsplugin.cpp150
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictoolsplugin.h54
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/CMakeLists.txt26
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.json1
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro17
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafiltersplugin.cpp82
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafiltersplugin.h28
-rw-r--r--tests/manual/examples/widgets/tools/plugandpaint/plugins/plugins.pro3
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/CMakeLists.txt20
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/inifiles/licensepage.ini46
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/inifiles/qsa.ini26
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/locationdialog.cpp192
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/locationdialog.h49
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/main.cpp17
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/mainwindow.cpp175
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/mainwindow.h44
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/settingseditor.pro18
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/settingstree.cpp231
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/settingstree.h61
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/variantdelegate.cpp377
-rw-r--r--tests/manual/examples/widgets/tools/settingseditor/variantdelegate.h53
-rw-r--r--tests/manual/examples/widgets/touch/dials/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/touch/dials/dials.pro8
-rw-r--r--tests/manual/examples/widgets/touch/dials/dials.ui77
-rw-r--r--tests/manual/examples/widgets/touch/dials/doc/images/touch-dials-example.pngbin0 -> 17676 bytes
-rw-r--r--tests/manual/examples/widgets/touch/dials/doc/src/touch-dials.qdoc14
-rw-r--r--tests/manual/examples/widgets/touch/dials/main.cpp21
-rw-r--r--tests/manual/examples/widgets/touch/fingerpaint/CMakeLists.txt45
-rw-r--r--tests/manual/examples/widgets/touch/fingerpaint/doc/src/fingerpaint.qdoc18
-rw-r--r--tests/manual/examples/widgets/touch/fingerpaint/fingerpaint.pro13
-rw-r--r--tests/manual/examples/widgets/touch/fingerpaint/main.cpp14
-rw-r--r--tests/manual/examples/widgets/touch/fingerpaint/mainwindow.cpp180
-rw-r--r--tests/manual/examples/widgets/touch/fingerpaint/mainwindow.h51
-rw-r--r--tests/manual/examples/widgets/touch/fingerpaint/scribblearea.cpp190
-rw-r--r--tests/manual/examples/widgets/touch/fingerpaint/scribblearea.h43
-rw-r--r--tests/manual/examples/widgets/touch/pinchzoom/CMakeLists.txt50
-rw-r--r--tests/manual/examples/widgets/touch/pinchzoom/doc/images/pinch-zoom-example.pngbin0 -> 42493 bytes
-rw-r--r--tests/manual/examples/widgets/touch/pinchzoom/doc/src/pinchzoom.qdoc14
-rw-r--r--tests/manual/examples/widgets/touch/pinchzoom/graphicsview.cpp48
-rw-r--r--tests/manual/examples/widgets/touch/pinchzoom/graphicsview.h18
-rw-r--r--tests/manual/examples/widgets/touch/pinchzoom/images/cheese.jpgbin0 -> 3029 bytes
-rw-r--r--tests/manual/examples/widgets/touch/pinchzoom/main.cpp47
-rw-r--r--tests/manual/examples/widgets/touch/pinchzoom/mice.qrc5
-rw-r--r--tests/manual/examples/widgets/touch/pinchzoom/mouse.cpp158
-rw-r--r--tests/manual/examples/widgets/touch/pinchzoom/mouse.h33
-rw-r--r--tests/manual/examples/widgets/touch/pinchzoom/pinchzoom.pro16
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/CMakeLists.txt10
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/README40
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-labeled-layout.pngbin0 -> 19114 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-labeled-screenshot.pngbin0 -> 23223 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-screenshot.pngbin0 -> 9872 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-contact.pngbin0 -> 12936 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-flowchart.pngbin0 -> 23533 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-successful.pngbin0 -> 10825 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-labeled-layout.pngbin0 -> 27103 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-signals-and-slots.pngbin0 -> 9968 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-stretch-effects.pngbin0 -> 12268 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-labeled-layout.pngbin0 -> 27467 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-linkedlist.pngbin0 -> 10209 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-screenshot.pngbin0 -> 14041 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part4-remove.pngbin0 -> 22248 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-finddialog.pngbin0 -> 10046 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-notfound.pngbin0 -> 10789 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-screenshot.pngbin0 -> 15849 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-signals-and-slots.pngbin0 -> 5542 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-load.pngbin0 -> 24797 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-save.pngbin0 -> 24747 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-screenshot.pngbin0 -> 16819 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part7-screenshot.pngbin0 -> 18369 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-screenshot.pngbin0 -> 15275 bytes
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial.qdoc948
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/addressbook.pro6
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part1/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part1/addressbook.cpp30
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part1/addressbook.h29
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part1/main.cpp17
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part1/part1.pro11
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part2/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.cpp123
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.h47
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part2/main.cpp17
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part2/part2.pro11
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part3/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.cpp182
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.h49
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part3/main.cpp15
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part3/part3.pro11
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part4/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part4/addressbook.cpp258
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part4/addressbook.h62
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part4/main.cpp15
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part4/part4.pro11
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part5/CMakeLists.txt38
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part5/addressbook.cpp283
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part5/addressbook.h65
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part5/finddialog.cpp51
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part5/finddialog.h31
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part5/main.cpp15
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part5/part5.pro13
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part6/CMakeLists.txt38
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part6/addressbook.cpp366
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part6/addressbook.h66
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part6/finddialog.cpp47
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part6/finddialog.h31
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part6/main.cpp15
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part6/part6.pro14
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part7/CMakeLists.txt38
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part7/addressbook.cpp419
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part7/addressbook.h68
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part7/finddialog.cpp47
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part7/finddialog.h31
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part7/main.cpp15
-rw-r--r--tests/manual/examples/widgets/tutorials/addressbook/part7/part7.pro14
-rw-r--r--tests/manual/examples/widgets/widgets/charactermap/CMakeLists.txt38
-rw-r--r--tests/manual/examples/widgets/widgets/charactermap/charactermap.pro12
-rw-r--r--tests/manual/examples/widgets/widgets/charactermap/characterwidget.cpp145
-rw-r--r--tests/manual/examples/widgets/widgets/charactermap/characterwidget.h50
-rw-r--r--tests/manual/examples/widgets/widgets/charactermap/main.cpp14
-rw-r--r--tests/manual/examples/widgets/widgets/charactermap/mainwindow.cpp264
-rw-r--r--tests/manual/examples/widgets/widgets/charactermap/mainwindow.h50
-rw-r--r--tests/manual/examples/widgets/widgets/digitalclock/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/widgets/digitalclock/digitalclock.cpp36
-rw-r--r--tests/manual/examples/widgets/widgets/digitalclock/digitalclock.h22
-rw-r--r--tests/manual/examples/widgets/widgets/digitalclock/digitalclock.pro9
-rw-r--r--tests/manual/examples/widgets/widgets/digitalclock/main.cpp14
-rw-r--r--tests/manual/examples/widgets/widgets/icons/CMakeLists.txt44
-rw-r--r--tests/manual/examples/widgets/widgets/icons/iconpreviewarea.cpp130
-rw-r--r--tests/manual/examples/widgets/widgets/icons/iconpreviewarea.h47
-rw-r--r--tests/manual/examples/widgets/widgets/icons/icons.pro20
-rw-r--r--tests/manual/examples/widgets/widgets/icons/iconsizespinbox.cpp33
-rw-r--r--tests/manual/examples/widgets/widgets/icons/iconsizespinbox.h22
-rw-r--r--tests/manual/examples/widgets/widgets/icons/imagedelegate.cpp64
-rw-r--r--tests/manual/examples/widgets/widgets/icons/imagedelegate.h31
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/designer.pngbin0 -> 3604 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/find_disabled.pngbin0 -> 501 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/find_normal.pngbin0 -> 838 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/monkey_off_128x128.pngbin0 -> 7045 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/monkey_off_16x16.pngbin0 -> 683 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/monkey_off_32x32.pngbin0 -> 1609 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/monkey_off_64x64.pngbin0 -> 3533 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/monkey_on_128x128.pngbin0 -> 6909 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/monkey_on_16x16.pngbin0 -> 681 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/monkey_on_32x32.pngbin0 -> 1577 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/monkey_on_64x64.pngbin0 -> 3479 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/qt_extended_16x16.pngbin0 -> 1263 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/qt_extended_32x32.pngbin0 -> 15518 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/images/qt_extended_48x48.pngbin0 -> 789 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/icons/main.cpp34
-rw-r--r--tests/manual/examples/widgets/widgets/icons/mainwindow.cpp478
-rw-r--r--tests/manual/examples/widgets/widgets/icons/mainwindow.h74
-rw-r--r--tests/manual/examples/widgets/widgets/imageviewer/CMakeLists.txt44
-rw-r--r--tests/manual/examples/widgets/widgets/imageviewer/imageviewer.cpp364
-rw-r--r--tests/manual/examples/widgets/widgets/imageviewer/imageviewer.h74
-rw-r--r--tests/manual/examples/widgets/widgets/imageviewer/imageviewer.pro11
-rw-r--r--tests/manual/examples/widgets/widgets/imageviewer/main.cpp24
-rw-r--r--tests/manual/examples/widgets/widgets/movie/CMakeLists.txt37
-rw-r--r--tests/manual/examples/widgets/widgets/movie/animation.gifbin0 -> 42629 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/movie/main.cpp15
-rw-r--r--tests/manual/examples/widgets/widgets/movie/movie.pro12
-rw-r--r--tests/manual/examples/widgets/widgets/movie/movieplayer.cpp180
-rw-r--r--tests/manual/examples/widgets/widgets/movie/movieplayer.h59
-rw-r--r--tests/manual/examples/widgets/widgets/styles/CMakeLists.txt51
-rw-r--r--tests/manual/examples/widgets/widgets/styles/images/woodbackground.pngbin0 -> 7691 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/styles/images/woodbutton.pngbin0 -> 7689 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/styles/main.cpp17
-rw-r--r--tests/manual/examples/widgets/widgets/styles/norwegianwoodstyle.cpp310
-rw-r--r--tests/manual/examples/widgets/widgets/styles/norwegianwoodstyle.h43
-rw-r--r--tests/manual/examples/widgets/widgets/styles/styles.pro13
-rw-r--r--tests/manual/examples/widgets/widgets/styles/styles.qrc6
-rw-r--r--tests/manual/examples/widgets/widgets/styles/widgetgallery.cpp277
-rw-r--r--tests/manual/examples/widgets/widgets/styles/widgetgallery.h86
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/CMakeLists.txt84
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked.pngbin0 -> 263 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked_hover.pngbin0 -> 266 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked_pressed.pngbin0 -> 425 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked.pngbin0 -> 159 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked_hover.pngbin0 -> 159 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked_pressed.pngbin0 -> 320 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/down_arrow.pngbin0 -> 175 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/down_arrow_disabled.pngbin0 -> 174 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/frame.pngbin0 -> 253 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/pagefold.pngbin0 -> 1545 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton.pngbin0 -> 533 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton_hover.pngbin0 -> 525 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton_pressed.pngbin0 -> 513 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked.pngbin0 -> 355 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked_hover.pngbin0 -> 532 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked_pressed.pngbin0 -> 599 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked.pngbin0 -> 240 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked_hover.pngbin0 -> 492 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked_pressed.pngbin0 -> 556 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/sizegrip.pngbin0 -> 129 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/spindown.pngbin0 -> 276 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/spindown_hover.pngbin0 -> 268 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/spindown_off.pngbin0 -> 249 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/spindown_pressed.pngbin0 -> 264 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/spinup.pngbin0 -> 283 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/spinup_hover.pngbin0 -> 277 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/spinup_off.pngbin0 -> 274 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/spinup_pressed.pngbin0 -> 277 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/up_arrow.pngbin0 -> 197 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/images/up_arrow_disabled.pngbin0 -> 172 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/layouts/default.ui329
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/layouts/pagefold.ui349
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/main.cpp14
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/mainwindow.cpp41
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/mainwindow.h29
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/mainwindow.ui356
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/qss/coffee.qss117
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/qss/default.qss1
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/qss/pagefold.qss299
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/stylesheet.pro15
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/stylesheet.qrc39
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.cpp64
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.h30
-rw-r--r--tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.ui171
-rw-r--r--tests/manual/examples/widgets/widgets/tetrix/CMakeLists.txt39
-rw-r--r--tests/manual/examples/widgets/widgets/tetrix/main.cpp14
-rw-r--r--tests/manual/examples/widgets/widgets/tetrix/tetrix.pro13
-rw-r--r--tests/manual/examples/widgets/widgets/tetrix/tetrixboard.cpp371
-rw-r--r--tests/manual/examples/widgets/widgets/tetrix/tetrixboard.h79
-rw-r--r--tests/manual/examples/widgets/widgets/tetrix/tetrixpiece.cpp106
-rw-r--r--tests/manual/examples/widgets/widgets/tetrix/tetrixpiece.h38
-rw-r--r--tests/manual/examples/widgets/widgets/tetrix/tetrixwindow.cpp82
-rw-r--r--tests/manual/examples/widgets/widgets/tetrix/tetrixwindow.h38
-rw-r--r--tests/manual/examples/widgets/widgets/validators/CMakeLists.txt55
-rw-r--r--tests/manual/examples/widgets/widgets/validators/ledoff.pngbin0 -> 562 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/validators/ledon.pngbin0 -> 486 bytes
-rw-r--r--tests/manual/examples/widgets/widgets/validators/ledwidget.cpp25
-rw-r--r--tests/manual/examples/widgets/widgets/validators/ledwidget.h27
-rw-r--r--tests/manual/examples/widgets/widgets/validators/localeselector.cpp48
-rw-r--r--tests/manual/examples/widgets/widgets/validators/localeselector.h23
-rw-r--r--tests/manual/examples/widgets/widgets/validators/main.cpp16
-rw-r--r--tests/manual/examples/widgets/widgets/validators/validators.pro12
-rw-r--r--tests/manual/examples/widgets/widgets/validators/validators.qrc6
-rw-r--r--tests/manual/examples/widgets/widgets/validators/validators.ui468
-rw-r--r--tests/manual/examples/widgets/widgets/validators/validatorwidget.cpp75
-rw-r--r--tests/manual/examples/widgets/widgets/validators/validatorwidget.h22
-rw-r--r--tests/manual/examples/widgets/wiggly/CMakeLists.txt38
-rw-r--r--tests/manual/examples/widgets/wiggly/dialog.cpp27
-rw-r--r--tests/manual/examples/widgets/wiggly/dialog.h19
-rw-r--r--tests/manual/examples/widgets/wiggly/main.cpp16
-rw-r--r--tests/manual/examples/widgets/wiggly/wiggly.pro11
-rw-r--r--tests/manual/examples/widgets/wiggly/wigglywidget.cpp65
-rw-r--r--tests/manual/examples/widgets/wiggly/wigglywidget.h32
-rw-r--r--tests/manual/examples/widgets/windowcontainer/CMakeLists.txt42
-rw-r--r--tests/manual/examples/widgets/windowcontainer/windowcontainer.cpp136
-rw-r--r--tests/manual/examples/widgets/windowcontainer/windowcontainer.pro9
-rw-r--r--tests/manual/filetest/CMakeLists.txt6
-rw-r--r--tests/manual/filetest/main.cpp62
-rw-r--r--tests/manual/findfiles/CMakeLists.txt37
-rw-r--r--tests/manual/findfiles/findfiles.pro10
-rw-r--r--tests/manual/findfiles/findfiles.qdoc269
-rw-r--r--tests/manual/findfiles/main.cpp14
-rw-r--r--tests/manual/findfiles/window.cpp264
-rw-r--r--tests/manual/findfiles/window.h50
-rw-r--r--tests/manual/fontfeatures/fontfeatures.pro17
-rw-r--r--tests/manual/fontfeatures/main.cpp14
-rw-r--r--tests/manual/fontfeatures/mainwindow.cpp225
-rw-r--r--tests/manual/fontfeatures/mainwindow.h32
-rw-r--r--tests/manual/fontfeatures/mainwindow.ui116
-rw-r--r--tests/manual/foreignwindows/CMakeLists.txt14
-rw-r--r--tests/manual/foreignwindows/main.cpp31
-rw-r--r--tests/manual/gestures/CMakeLists.txt3
-rw-r--r--tests/manual/gestures/graphicsview/CMakeLists.txt5
-rw-r--r--tests/manual/gestures/graphicsview/gestures.cpp29
-rw-r--r--tests/manual/gestures/graphicsview/gestures.h29
-rw-r--r--tests/manual/gestures/graphicsview/imageitem.cpp29
-rw-r--r--tests/manual/gestures/graphicsview/imageitem.h29
-rw-r--r--tests/manual/gestures/graphicsview/main.cpp33
-rw-r--r--tests/manual/gestures/graphicsview/mousepangesturerecognizer.cpp29
-rw-r--r--tests/manual/gestures/graphicsview/mousepangesturerecognizer.h29
-rw-r--r--tests/manual/gestures/scrollarea/CMakeLists.txt7
-rw-r--r--tests/manual/gestures/scrollarea/main.cpp31
-rw-r--r--tests/manual/gestures/scrollarea/mousepangesturerecognizer.cpp29
-rw-r--r--tests/manual/gestures/scrollarea/mousepangesturerecognizer.h29
-rw-r--r--tests/manual/graphicsframecapture/CMakeLists.txt35
-rw-r--r--tests/manual/graphicsframecapture/examplewindow.cpp116
-rw-r--r--tests/manual/graphicsframecapture/examplewindow.h31
-rw-r--r--tests/manual/graphicsframecapture/main.cpp128
-rw-r--r--tests/manual/graphicsframecapture/window.cpp256
-rw-r--r--tests/manual/graphicsframecapture/window.h55
-rw-r--r--tests/manual/highdpi/CMakeLists.txt5
-rw-r--r--tests/manual/highdpi/dprgadget/CMakeLists.txt27
-rw-r--r--tests/manual/highdpi/dprgadget/main.cpp39
-rw-r--r--tests/manual/highdpi/highdpi.pro3
-rw-r--r--tests/manual/highdpi/kitchensink/CMakeLists.txt7
-rw-r--r--tests/manual/highdpi/kitchensink/dragwidget.cpp35
-rw-r--r--tests/manual/highdpi/kitchensink/dragwidget.h29
-rw-r--r--tests/manual/highdpi/kitchensink/main.cpp31
-rw-r--r--tests/manual/highdpi/pixelgadget/CMakeLists.txt26
-rw-r--r--tests/manual/highdpi/pixelgadget/main.cpp29
-rw-r--r--tests/manual/highdpi/screengadget/CMakeLists.txt28
-rw-r--r--tests/manual/highdpi/screengadget/main.cpp29
-rw-r--r--tests/manual/iconbrowser/CMakeLists.txt64
-rw-r--r--tests/manual/iconbrowser/Main.qml31
-rw-r--r--tests/manual/iconbrowser/main.cpp570
-rw-r--r--tests/manual/inputdevices/CMakeLists.txt17
-rw-r--r--tests/manual/inputdevices/inputdevicemodel.cpp264
-rw-r--r--tests/manual/inputdevices/inputdevicemodel.h55
-rw-r--r--tests/manual/inputdevices/main.cpp24
-rw-r--r--tests/manual/inputmethodhints/CMakeLists.txt8
-rw-r--r--tests/manual/inputmethodhints/inputmethodhints.cpp29
-rw-r--r--tests/manual/inputmethodhints/inputmethodhints.h29
-rw-r--r--tests/manual/inputmethodhints/main.cpp29
-rw-r--r--tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon1024x1024.pngbin0 -> 22579 bytes
-rw-r--r--tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon167x167.pngbin0 -> 3369 bytes
-rw-r--r--tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon60x60@2x.pngbin0 -> 2335 bytes
-rw-r--r--tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon76x76@2x~ipad.pngbin0 -> 3060 bytes
-rw-r--r--tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/Contents.json102
-rw-r--r--tests/manual/ios_assets/AssetsXcode13.0.xcassets/Contents.json6
-rw-r--r--tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Contents.json23
-rw-r--r--tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-16.pngbin0 -> 173 bytes
-rw-r--r--tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-32.pngbin0 -> 407 bytes
-rw-r--r--tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-48.pngbin0 -> 750 bytes
-rw-r--r--tests/manual/ios_assets/AssetsXcode14.3.xcassets/AppIcon.appiconset/AppIcon1024x1024.pngbin0 -> 22579 bytes
-rw-r--r--tests/manual/ios_assets/AssetsXcode14.3.xcassets/AppIcon.appiconset/Contents.json104
-rw-r--r--tests/manual/ios_assets/AssetsXcode14.3.xcassets/Contents.json6
-rw-r--r--tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Contents.json23
-rw-r--r--tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-16.pngbin0 -> 173 bytes
-rw-r--r--tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-32.pngbin0 -> 407 bytes
-rw-r--r--tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-48.pngbin0 -> 750 bytes
-rw-r--r--tests/manual/ios_assets/CMakeLists.txt114
-rw-r--r--tests/manual/ios_assets/CustomLaunchScreen.storyboard48
-rw-r--r--tests/manual/ios_assets/Info.ios.cmake.xcode.13.0.plist77
-rw-r--r--tests/manual/ios_assets/Info.ios.cmake.xcode.14.3.plist54
-rw-r--r--tests/manual/ios_assets/Info.ios.qmake.xcode.13.0.plist60
-rw-r--r--tests/manual/ios_assets/Info.ios.qmake.xcode.14.3.plist37
-rw-r--r--tests/manual/ios_assets/foo.txt1
-rw-r--r--tests/manual/ios_assets/ios_assets.pro52
-rw-r--r--tests/manual/ios_assets/main.cpp70
-rw-r--r--tests/manual/ios_assets/utils.mm18
-rw-r--r--tests/manual/keyevents/CMakeLists.txt12
-rw-r--r--tests/manual/keyevents/keyevents.pro6
-rw-r--r--tests/manual/keyevents/main.cpp305
-rw-r--r--tests/manual/keypadnavigation/CMakeLists.txt5
-rw-r--r--tests/manual/keypadnavigation/main.cpp29
-rw-r--r--tests/manual/lance/CMakeLists.txt13
-rw-r--r--tests/manual/lance/README4
-rw-r--r--tests/manual/lance/interactivewidget.cpp32
-rw-r--r--tests/manual/lance/interactivewidget.h29
-rw-r--r--tests/manual/lance/lance.pro4
-rw-r--r--tests/manual/lance/main.cpp30
-rw-r--r--tests/manual/lance/widgets.h29
-rw-r--r--tests/manual/manual.pro7
-rw-r--r--tests/manual/markdown/CMakeLists.txt8
-rw-r--r--tests/manual/markdown/html2md.cpp29
-rwxr-xr-xtests/manual/mkspecs/test.sh29
-rw-r--r--tests/manual/network/ssl/client-auth/CMakeLists.txt24
-rw-r--r--tests/manual/network/ssl/client-auth/certs/.gitignore4
-rw-r--r--tests/manual/network/ssl/client-auth/certs/accepted-client.conf14
-rwxr-xr-xtests/manual/network/ssl/client-auth/certs/generate.sh33
-rw-r--r--tests/manual/network/ssl/client-auth/tst_manual_ssl_client_auth.cpp136
-rw-r--r--tests/manual/network_remote_stresstest/CMakeLists.txt5
-rw-r--r--tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp30
-rw-r--r--tests/manual/network_stresstest/CMakeLists.txt11
-rw-r--r--tests/manual/network_stresstest/minihttpserver.cpp29
-rw-r--r--tests/manual/network_stresstest/minihttpserver.h29
-rw-r--r--tests/manual/network_stresstest/network_stresstest.pro1
-rw-r--r--tests/manual/network_stresstest/tst_network_stresstest.cpp30
-rw-r--r--tests/manual/permissions/.gitignore1
-rw-r--r--tests/manual/permissions/CMakeLists.txt61
-rw-r--r--tests/manual/permissions/Info.plist59
-rw-r--r--tests/manual/permissions/android/AndroidManifest.xml48
-rw-r--r--tests/manual/permissions/tst_qpermissions.cpp116
-rw-r--r--tests/manual/qcursor/CMakeLists.txt3
-rw-r--r--tests/manual/qcursor/allcursors/CMakeLists.txt8
-rw-r--r--tests/manual/qcursor/allcursors/main.cpp29
-rw-r--r--tests/manual/qcursor/allcursors/mainwindow.cpp29
-rw-r--r--tests/manual/qcursor/allcursors/mainwindow.h29
-rw-r--r--tests/manual/qcursor/childwidget/CMakeLists.txt8
-rw-r--r--tests/manual/qcursor/childwidget/main.cpp29
-rw-r--r--tests/manual/qcursor/childwindow/CMakeLists.txt8
-rw-r--r--tests/manual/qcursor/childwindow/main.cpp29
-rw-r--r--tests/manual/qcursor/childwindowcontainer/CMakeLists.txt8
-rw-r--r--tests/manual/qcursor/childwindowcontainer/main.cpp29
-rw-r--r--tests/manual/qcursor/grab_override/CMakeLists.txt9
-rw-r--r--tests/manual/qcursor/grab_override/main.cpp29
-rw-r--r--tests/manual/qcursor/grab_override/mainwindow.cpp29
-rw-r--r--tests/manual/qcursor/grab_override/mainwindow.h29
-rw-r--r--tests/manual/qcursor/qcursorhighdpi/CMakeLists.txt10
-rw-r--r--tests/manual/qcursor/qcursorhighdpi/main.cpp29
-rw-r--r--tests/manual/qdesktopservices/CMakeLists.txt11
-rw-r--r--tests/manual/qdesktopservices/tst_qdesktopservices.cpp29
-rw-r--r--tests/manual/qdnslookup/CMakeLists.txt9
-rw-r--r--tests/manual/qdnslookup/main.cpp184
-rw-r--r--tests/manual/qglyphruns/CMakeLists.txt17
-rw-r--r--tests/manual/qglyphruns/controller.cpp57
-rw-r--r--tests/manual/qglyphruns/controller.h29
-rw-r--r--tests/manual/qglyphruns/controller.ui200
-rw-r--r--tests/manual/qglyphruns/glyphruninspector.cpp48
-rw-r--r--tests/manual/qglyphruns/glyphruninspector.h31
-rw-r--r--tests/manual/qglyphruns/main.cpp18
-rw-r--r--tests/manual/qglyphruns/singleglyphrun.cpp73
-rw-r--r--tests/manual/qglyphruns/singleglyphrun.h30
-rw-r--r--tests/manual/qglyphruns/singleglyphrun.ui61
-rw-r--r--tests/manual/qglyphruns/view.cpp70
-rw-r--r--tests/manual/qglyphruns/view.h42
-rw-r--r--tests/manual/qgraphicsitem/CMakeLists.txt5
-rw-r--r--tests/manual/qgraphicsitem/main.cpp29
-rw-r--r--tests/manual/qgraphicsitemgroup/CMakeLists.txt10
-rw-r--r--tests/manual/qgraphicsitemgroup/customitem.cpp37
-rw-r--r--tests/manual/qgraphicsitemgroup/customitem.h29
-rw-r--r--tests/manual/qgraphicsitemgroup/main.cpp29
-rw-r--r--tests/manual/qgraphicsitemgroup/widget.cpp43
-rw-r--r--tests/manual/qgraphicsitemgroup/widget.h29
-rw-r--r--tests/manual/qgraphicslayout/anchorlayout/CMakeLists.txt17
-rw-r--r--tests/manual/qgraphicslayout/anchorlayout/anchorlayout.pro9
-rw-r--r--tests/manual/qgraphicslayout/anchorlayout/main.cpp89
-rw-r--r--tests/manual/qgraphicslayout/flicker/CMakeLists.txt5
-rw-r--r--tests/manual/qgraphicslayout/flicker/main.cpp29
-rw-r--r--tests/manual/qgraphicslayout/flicker/window.cpp29
-rw-r--r--tests/manual/qgraphicslayout/flicker/window.h29
-rw-r--r--tests/manual/qgraphicslayout/weatheranchorlayout/CMakeLists.txt34
-rw-r--r--tests/manual/qgraphicslayout/weatheranchorlayout/images/5days.jpgbin0 -> 5748 bytes
-rw-r--r--tests/manual/qgraphicslayout/weatheranchorlayout/images/details.jpgbin0 -> 5323 bytes
-rw-r--r--tests/manual/qgraphicslayout/weatheranchorlayout/images/place.jpgbin0 -> 62438 bytes
-rw-r--r--tests/manual/qgraphicslayout/weatheranchorlayout/images/tabbar.jpgbin0 -> 849 bytes
-rw-r--r--tests/manual/qgraphicslayout/weatheranchorlayout/images/title.jpgbin0 -> 3472 bytes
-rw-r--r--tests/manual/qgraphicslayout/weatheranchorlayout/images/weather-few-clouds.pngbin0 -> 18976 bytes
-rw-r--r--tests/manual/qgraphicslayout/weatheranchorlayout/main.cpp239
-rw-r--r--tests/manual/qgraphicslayout/weatheranchorlayout/weatheranchorlayout.pro8
-rw-r--r--tests/manual/qgraphicslayout/weatheranchorlayout/weatheranchorlayout.qrc10
-rw-r--r--tests/manual/qhttpnetworkconnection/CMakeLists.txt8
-rw-r--r--tests/manual/qhttpnetworkconnection/main.cpp30
-rw-r--r--tests/manual/qimagereader/CMakeLists.txt14
-rw-r--r--tests/manual/qimagereader/main.cpp35
-rw-r--r--tests/manual/qimagereader/qimagereader.pro1
-rw-r--r--tests/manual/qimagereader/qimagereader.qrc5
-rw-r--r--tests/manual/qlayout/CMakeLists.txt8
-rw-r--r--tests/manual/qlayout/gridwidget.cpp29
-rw-r--r--tests/manual/qlayout/gridwidget.h29
-rw-r--r--tests/manual/qlayout/hbwidget.cpp29
-rw-r--r--tests/manual/qlayout/hbwidget.h29
-rw-r--r--tests/manual/qlayout/main.cpp29
-rw-r--r--tests/manual/qlayout/mainwindow.cpp29
-rw-r--r--tests/manual/qlayout/mainwindow.h29
-rw-r--r--tests/manual/qlayout/vbwidget.cpp29
-rw-r--r--tests/manual/qlayout/vbwidget.h29
-rw-r--r--tests/manual/qlocale/CMakeLists.txt7
-rw-r--r--tests/manual/qlocale/calendar.cpp29
-rw-r--r--tests/manual/qlocale/calendar.h29
-rw-r--r--tests/manual/qlocale/currency.cpp29
-rw-r--r--tests/manual/qlocale/currency.h29
-rw-r--r--tests/manual/qlocale/dateformats.cpp29
-rw-r--r--tests/manual/qlocale/dateformats.h29
-rw-r--r--tests/manual/qlocale/info.cpp29
-rw-r--r--tests/manual/qlocale/info.h29
-rw-r--r--tests/manual/qlocale/languages.cpp31
-rw-r--r--tests/manual/qlocale/languages.h29
-rw-r--r--tests/manual/qlocale/main.cpp29
-rw-r--r--tests/manual/qlocale/miscellaneous.cpp29
-rw-r--r--tests/manual/qlocale/miscellaneous.h29
-rw-r--r--tests/manual/qlocale/numberformats.cpp29
-rw-r--r--tests/manual/qlocale/numberformats.h29
-rw-r--r--tests/manual/qlocale/window.cpp33
-rw-r--r--tests/manual/qlocale/window.h29
-rw-r--r--tests/manual/qmetatype/CMakeLists.txt3
-rw-r--r--tests/manual/qmetatype/declare_metatype_noninline.cpp29
-rw-r--r--tests/manual/qmetatype/declare_metatype_noninline.h29
-rw-r--r--tests/manual/qmetatype/tst_qmetatype.cpp29
-rw-r--r--tests/manual/qmimedatabase/CMakeLists.txt6
-rw-r--r--tests/manual/qmimedatabase/main.cpp31
-rw-r--r--tests/manual/qnetconmonitor/CMakeLists.txt10
-rw-r--r--tests/manual/qnetconmonitor/tst_qnetconmonitor.cpp31
-rw-r--r--tests/manual/qnetworkaccessmanager/qget/CMakeLists.txt11
-rw-r--r--tests/manual/qnetworkaccessmanager/qget/downloadmanager.cpp31
-rw-r--r--tests/manual/qnetworkaccessmanager/qget/qget.cpp31
-rw-r--r--tests/manual/qnetworkaccessmanager/qget/qget.h29
-rw-r--r--tests/manual/qnetworkaccessmanager/qget/transferitem.cpp29
-rw-r--r--tests/manual/qnetworkinformation/CMakeLists.txt6
-rw-r--r--tests/manual/qnetworkinformation/mainwindow.h29
-rw-r--r--tests/manual/qnetworkinformation/tst_qnetworkinformation.cpp31
-rw-r--r--tests/manual/qnetworkreply/CMakeLists.txt10
-rw-r--r--tests/manual/qnetworkreply/main.cpp31
-rw-r--r--tests/manual/qopenglcontext/CMakeLists.txt8
-rw-r--r--tests/manual/qopenglcontext/main.cpp29
-rw-r--r--tests/manual/qopenglcontext/qopenglcontextwindow.cpp29
-rw-r--r--tests/manual/qopenglcontext/qopenglcontextwindow.h29
-rw-r--r--tests/manual/qopengltextureblitter/CMakeLists.txt10
-rw-r--r--tests/manual/qopengltextureblitter/main.cpp29
-rw-r--r--tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp29
-rw-r--r--tests/manual/qopengltextureblitter/qopengltextureblitwindow.h29
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/CMakeLists.txt31
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/cube.pngbin0 -> 30341 bytes
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/fshader.glsl8
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/geometryengine.cpp126
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/geometryengine.h26
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/main.cpp14
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/mainwidget.cpp161
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/mainwidget.h57
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.cpp31
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.h24
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.ui33
-rw-r--r--tests/manual/qopenglwidget/dockedopenglwidget/vshader.glsl12
-rw-r--r--tests/manual/qopenglwidget/openglwidget/CMakeLists.txt12
-rw-r--r--tests/manual/qopenglwidget/openglwidget/main.cpp42
-rw-r--r--tests/manual/qopenglwidget/openglwidget/openglwidget.cpp31
-rw-r--r--tests/manual/qopenglwidget/openglwidget/openglwidget.h31
-rw-r--r--tests/manual/qopenglwindow/multiwindow/CMakeLists.txt8
-rw-r--r--tests/manual/qopenglwindow/multiwindow/main.cpp29
-rw-r--r--tests/manual/qprintdevice_dump/CMakeLists.txt8
-rw-r--r--tests/manual/qprintdevice_dump/main.cpp31
-rw-r--r--tests/manual/qscreen/CMakeLists.txt10
-rw-r--r--tests/manual/qscreen/main.cpp31
-rw-r--r--tests/manual/qscreen/propertyfield.cpp32
-rw-r--r--tests/manual/qscreen/propertyfield.h33
-rw-r--r--tests/manual/qscreen/propertywatcher.cpp33
-rw-r--r--tests/manual/qscreen/propertywatcher.h29
-rw-r--r--tests/manual/qscreen_xrandr/CMakeLists.txt5
-rw-r--r--tests/manual/qscreen_xrandr/tst_qscreen_xrandr.cpp91
-rw-r--r--tests/manual/qssloptions/CMakeLists.txt5
-rw-r--r--tests/manual/qssloptions/main.cpp29
-rw-r--r--tests/manual/qsslsocket/CMakeLists.txt5
-rw-r--r--tests/manual/qsslsocket/main.cpp44
-rw-r--r--tests/manual/qstorageinfo/CMakeLists.txt3
-rw-r--r--tests/manual/qstorageinfo/main.cpp31
-rw-r--r--tests/manual/qstorageinfo/printvolumes.cpp55
-rw-r--r--tests/manual/qsysinfo/CMakeLists.txt6
-rw-r--r--tests/manual/qsysinfo/main.cpp29
-rw-r--r--tests/manual/qt_poll/CMakeLists.txt5
-rw-r--r--tests/manual/qt_poll/tst_qt_poll.cpp29
-rw-r--r--tests/manual/qtabbar/CMakeLists.txt10
-rw-r--r--tests/manual/qtabbar/main.cpp52
-rw-r--r--tests/manual/qtabletevent/CMakeLists.txt5
-rw-r--r--tests/manual/qtabletevent/device_information/CMakeLists.txt33
-rw-r--r--tests/manual/qtabletevent/device_information/main.cpp29
-rw-r--r--tests/manual/qtabletevent/device_information/tabletwidget.cpp32
-rw-r--r--tests/manual/qtabletevent/device_information/tabletwidget.h29
-rw-r--r--tests/manual/qtabletevent/event_compression/CMakeLists.txt5
-rw-r--r--tests/manual/qtabletevent/event_compression/main.cpp29
-rw-r--r--tests/manual/qtabletevent/event_compression/mousestatwidget.cpp29
-rw-r--r--tests/manual/qtabletevent/event_compression/mousestatwidget.h29
-rw-r--r--tests/manual/qtabletevent/regular_widgets/CMakeLists.txt8
-rw-r--r--tests/manual/qtabletevent/regular_widgets/main.cpp31
-rw-r--r--tests/manual/qtbug-52641/CMakeLists.txt8
-rw-r--r--tests/manual/qtbug-52641/main.cpp30
-rw-r--r--tests/manual/qtbug-8933/CMakeLists.txt8
-rw-r--r--tests/manual/qtbug-8933/main.cpp29
-rw-r--r--tests/manual/qtbug-8933/widget.cpp29
-rw-r--r--tests/manual/qtbug-8933/widget.h29
-rw-r--r--tests/manual/qtextcursorinsert/CMakeLists.txt14
-rw-r--r--tests/manual/qtextcursorinsert/main.cpp14
-rw-r--r--tests/manual/qtextcursorinsert/widget.cpp188
-rw-r--r--tests/manual/qtextcursorinsert/widget.h38
-rw-r--r--tests/manual/qtextcursorinsert/widget.ui222
-rw-r--r--tests/manual/qtexteditlist/CMakeLists.txt8
-rw-r--r--tests/manual/qtexteditlist/main.cpp29
-rw-r--r--tests/manual/qtexteditlist/widget.cpp29
-rw-r--r--tests/manual/qtexteditlist/widget.h29
-rw-r--r--tests/manual/qtexttableborders/CMakeLists.txt9
-rw-r--r--tests/manual/qtexttableborders/main.cpp29
-rw-r--r--tests/manual/qtexttableborders/widget.cpp31
-rw-r--r--tests/manual/qtexttableborders/widget.h29
-rw-r--r--tests/manual/qtouchevent/CMakeLists.txt5
-rw-r--r--tests/manual/qtouchevent/main.cpp30
-rw-r--r--tests/manual/qtouchevent/touchwidget.cpp29
-rw-r--r--tests/manual/qtouchevent/touchwidget.h29
-rw-r--r--tests/manual/qvulkaninstance/CMakeLists.txt8
-rw-r--r--tests/manual/qvulkaninstance/main.cpp29
-rw-r--r--tests/manual/qwidget_zorder/CMakeLists.txt5
-rw-r--r--tests/manual/qwidget_zorder/main.cpp29
-rw-r--r--tests/manual/repaint/CMakeLists.txt3
-rw-r--r--tests/manual/repaint/mainwindow/CMakeLists.txt5
-rw-r--r--tests/manual/repaint/mainwindow/main.cpp33
-rw-r--r--tests/manual/repaint/scrollarea/CMakeLists.txt5
-rw-r--r--tests/manual/repaint/scrollarea/main.cpp29
-rw-r--r--tests/manual/repaint/shared/shared.h45
-rw-r--r--tests/manual/repaint/splitter/CMakeLists.txt5
-rw-r--r--tests/manual/repaint/splitter/main.cpp29
-rw-r--r--tests/manual/repaint/tableview/CMakeLists.txt5
-rw-r--r--tests/manual/repaint/tableview/main.cpp29
-rw-r--r--tests/manual/repaint/task141091/CMakeLists.txt5
-rw-r--r--tests/manual/repaint/task141091/main.cpp29
-rw-r--r--tests/manual/repaint/toplevel/CMakeLists.txt5
-rw-r--r--tests/manual/repaint/toplevel/main.cpp29
-rw-r--r--tests/manual/repaint/widget/CMakeLists.txt5
-rw-r--r--tests/manual/repaint/widget/main.cpp29
-rw-r--r--tests/manual/rhi/CMakeLists.txt15
-rw-r--r--tests/manual/rhi/compressedtexture_bc1/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/compressedtexture_bc1/compressedtexture_bc1.cpp51
-rw-r--r--tests/manual/rhi/compressedtexture_bc1_subupload/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/compressedtexture_bc1_subupload/compressedtexture_bc1_subupload.cpp53
-rw-r--r--tests/manual/rhi/computebuffer/CMakeLists.txt6
-rw-r--r--tests/manual/rhi/computebuffer/computebuffer.cpp51
-rw-r--r--tests/manual/rhi/computeimage/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/computeimage/computeimage.cpp51
-rw-r--r--tests/manual/rhi/cubemap/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/cubemap/cubemap.cpp51
-rw-r--r--tests/manual/rhi/cubemap_render/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/cubemap_render/cubemap_render.cpp51
-rw-r--r--tests/manual/rhi/cubemap_scissor/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/cubemap_scissor/cubemap_scissor.cpp51
-rw-r--r--tests/manual/rhi/displacement/CMakeLists.txt26
-rwxr-xr-xtests/manual/rhi/displacement/buildshaders7
-rw-r--r--tests/manual/rhi/displacement/buildshaders.bat8
-rw-r--r--tests/manual/rhi/displacement/displacement.cpp199
-rw-r--r--tests/manual/rhi/displacement/heightmap.pngbin0 -> 336716 bytes
-rw-r--r--tests/manual/rhi/displacement/material.frag10
-rw-r--r--tests/manual/rhi/displacement/material.frag.qsbbin0 -> 837 bytes
-rw-r--r--tests/manual/rhi/displacement/material.tesc32
-rw-r--r--tests/manual/rhi/displacement/material.tesc.qsbbin0 -> 2188 bytes
-rw-r--r--tests/manual/rhi/displacement/material.tese37
-rw-r--r--tests/manual/rhi/displacement/material.tese.qsbbin0 -> 2790 bytes
-rw-r--r--tests/manual/rhi/displacement/material.vert15
-rw-r--r--tests/manual/rhi/displacement/material.vert.qsbbin0 -> 1253 bytes
-rw-r--r--tests/manual/rhi/displacement/material_domain.hlsl54
-rw-r--r--tests/manual/rhi/displacement/material_hull.hlsl52
-rw-r--r--tests/manual/rhi/float16texture_with_compute/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.cpp51
-rw-r--r--tests/manual/rhi/floattexture/CMakeLists.txt6
-rw-r--r--tests/manual/rhi/floattexture/floattexture.cpp53
-rw-r--r--tests/manual/rhi/geometryshader/CMakeLists.txt24
-rwxr-xr-xtests/manual/rhi/geometryshader/buildshaders.bat4
-rw-r--r--tests/manual/rhi/geometryshader/geometryshader.cpp94
-rw-r--r--tests/manual/rhi/geometryshader/test.frag8
-rw-r--r--tests/manual/rhi/geometryshader/test.frag.qsbbin0 -> 456 bytes
-rw-r--r--tests/manual/rhi/geometryshader/test.geom26
-rw-r--r--tests/manual/rhi/geometryshader/test.geom.qsbbin0 -> 1222 bytes
-rw-r--r--tests/manual/rhi/geometryshader/test.vert8
-rw-r--r--tests/manual/rhi/geometryshader/test.vert.qsbbin0 -> 591 bytes
-rw-r--r--tests/manual/rhi/geometryshader/test_geom.hlsl26
-rw-r--r--tests/manual/rhi/hdr/CMakeLists.txt20
-rw-r--r--tests/manual/rhi/hdr/buildshaders.bat2
-rw-r--r--tests/manual/rhi/hdr/hdr.cpp457
-rw-r--r--tests/manual/rhi/hdr/hdrtexture.frag44
-rw-r--r--tests/manual/rhi/hdr/hdrtexture.frag.qsbbin0 -> 2742 bytes
-rw-r--r--tests/manual/rhi/hdr/hdrtexture.vert22
-rw-r--r--tests/manual/rhi/hdr/hdrtexture.vert.qsbbin0 -> 1471 bytes
-rw-r--r--tests/manual/rhi/hellominimalcrossgfxtriangle/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/hellominimalcrossgfxtriangle/hellowindow.cpp53
-rw-r--r--tests/manual/rhi/hellominimalcrossgfxtriangle/hellowindow.h51
-rw-r--r--tests/manual/rhi/hellominimalcrossgfxtriangle/main.cpp65
-rw-r--r--tests/manual/rhi/hellominimalcrossgfxtriangle/window.cpp77
-rw-r--r--tests/manual/rhi/hellominimalcrossgfxtriangle/window.h66
-rw-r--r--tests/manual/rhi/imguirenderer/CMakeLists.txt30
-rw-r--r--tests/manual/rhi/imguirenderer/imguirenderer.cpp128
-rw-r--r--tests/manual/rhi/instancing/CMakeLists.txt13
-rw-r--r--tests/manual/rhi/instancing/instancing.cpp51
-rw-r--r--tests/manual/rhi/mrt/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/mrt/mrt.cpp51
-rw-r--r--tests/manual/rhi/msaarenderbuffer/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/msaarenderbuffer/msaarenderbuffer.cpp51
-rw-r--r--tests/manual/rhi/msaatexture/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/msaatexture/msaatexture.cpp51
-rw-r--r--tests/manual/rhi/msaatextureresolve/CMakeLists.txt41
-rw-r--r--tests/manual/rhi/msaatextureresolve/msaatextureresolve.cpp235
-rw-r--r--tests/manual/rhi/multiview/CMakeLists.txt21
-rw-r--r--tests/manual/rhi/multiview/buildshaders.bat4
-rw-r--r--tests/manual/rhi/multiview/multiview.cpp305
-rw-r--r--tests/manual/rhi/multiview/multiview.frag11
-rw-r--r--tests/manual/rhi/multiview/multiview.frag.qsbbin0 -> 2846 bytes
-rw-r--r--tests/manual/rhi/multiview/multiview.pro8
-rw-r--r--tests/manual/rhi/multiview/multiview.qrc8
-rw-r--r--tests/manual/rhi/multiview/multiview.vert21
-rw-r--r--tests/manual/rhi/multiview/multiview.vert.qsbbin0 -> 4083 bytes
-rw-r--r--tests/manual/rhi/multiview/texture.frag19
-rw-r--r--tests/manual/rhi/multiview/texture.frag.qsbbin0 -> 3595 bytes
-rw-r--r--tests/manual/rhi/multiview/texture.vert20
-rw-r--r--tests/manual/rhi/multiview/texture.vert.qsbbin0 -> 3683 bytes
-rw-r--r--tests/manual/rhi/multiwindow/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/multiwindow/multiwindow.cpp101
-rw-r--r--tests/manual/rhi/multiwindow_threaded/CMakeLists.txt7
-rw-r--r--tests/manual/rhi/multiwindow_threaded/multiwindow_threaded.cpp92
-rw-r--r--tests/manual/rhi/multiwindow_threaded/window.cpp61
-rw-r--r--tests/manual/rhi/multiwindow_threaded/window.h52
-rw-r--r--tests/manual/rhi/noninstanced/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/noninstanced/noninstanced.cpp51
-rw-r--r--tests/manual/rhi/offscreen/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/offscreen/offscreen.cpp107
-rw-r--r--tests/manual/rhi/polygonmode/CMakeLists.txt23
-rwxr-xr-xtests/manual/rhi/polygonmode/buildshaders.bat2
-rw-r--r--tests/manual/rhi/polygonmode/polygonmode.cpp101
-rw-r--r--tests/manual/rhi/polygonmode/test.frag10
-rw-r--r--tests/manual/rhi/polygonmode/test.frag.qsbbin0 -> 769 bytes
-rw-r--r--tests/manual/rhi/polygonmode/test.vert12
-rw-r--r--tests/manual/rhi/polygonmode/test.vert.qsbbin0 -> 930 bytes
-rw-r--r--tests/manual/rhi/rhi.pro30
-rw-r--r--tests/manual/rhi/rhiwidgetproto/CMakeLists.txt33
-rw-r--r--tests/manual/rhi/rhiwidgetproto/examplewidget.cpp182
-rw-r--r--tests/manual/rhi/rhiwidgetproto/examplewidget.h66
-rw-r--r--tests/manual/rhi/rhiwidgetproto/main.cpp97
-rw-r--r--tests/manual/rhi/rhiwidgetproto/rhiwidget.cpp538
-rw-r--r--tests/manual/rhi/rhiwidgetproto/rhiwidget.h56
-rw-r--r--tests/manual/rhi/rhiwidgetproto/rhiwidget_p.h38
-rw-r--r--tests/manual/rhi/shadowmap/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/shadowmap/shadowmap.cpp51
-rw-r--r--tests/manual/rhi/shared/buildshaders.bat8
-rw-r--r--tests/manual/rhi/shared/color.frag.qsbbin1135 -> 1173 bytes
-rw-r--r--tests/manual/rhi/shared/color.vert.qsbbin1235 -> 1282 bytes
-rw-r--r--tests/manual/rhi/shared/cube.h46
-rw-r--r--tests/manual/rhi/shared/dds_bc1.h51
-rw-r--r--tests/manual/rhi/shared/examplefw.h189
-rw-r--r--tests/manual/rhi/shared/imgui/buildshaders.bat2
-rw-r--r--tests/manual/rhi/shared/imgui/fonts/LICENSE.txt202
-rw-r--r--tests/manual/rhi/shared/imgui/fonts/RobotoMono-Medium.ttfbin0 -> 86820 bytes
-rw-r--r--tests/manual/rhi/shared/imgui/imgui.cmakeinc29
-rw-r--r--tests/manual/rhi/shared/imgui/imgui.frag37
-rw-r--r--tests/manual/rhi/shared/imgui/imgui.frag.qsbbin0 -> 2596 bytes
-rw-r--r--tests/manual/rhi/shared/imgui/imgui.vert21
-rw-r--r--tests/manual/rhi/shared/imgui/imgui.vert.qsbbin0 -> 1532 bytes
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/LICENSE.txt21
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/imconfig.h125
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/imgui.cpp13444
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/imgui.h3065
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/imgui_demo.cpp7969
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/imgui_draw.cpp4162
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/imgui_internal.h2975
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/imgui_tables.cpp4068
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/imgui_widgets.cpp8394
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/imstb_rectpack.h627
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/imstb_textedit.h1447
-rw-r--r--tests/manual/rhi/shared/imgui/imgui/imstb_truetype.h5085
-rw-r--r--tests/manual/rhi/shared/imgui/qrhiimgui.cpp612
-rw-r--r--tests/manual/rhi/shared/imgui/qrhiimgui_p.h98
-rw-r--r--tests/manual/rhi/shared/texture.frag.qsbbin1289 -> 1341 bytes
-rw-r--r--tests/manual/rhi/shared/texture.vert.qsbbin1475 -> 1530 bytes
-rw-r--r--tests/manual/rhi/shared/texture_arr.frag.qsbbin1448 -> 1650 bytes
-rw-r--r--tests/manual/rhi/shared/texture_arr.vert.qsbbin1404 -> 1595 bytes
-rw-r--r--tests/manual/rhi/shared/texture_ms4.frag.qsbbin1725 -> 1739 bytes
-rw-r--r--tests/manual/rhi/stenciloutline/CMakeLists.txt19
-rw-r--r--tests/manual/rhi/stenciloutline/buildshaders.bat2
-rw-r--r--tests/manual/rhi/stenciloutline/material.frag13
-rw-r--r--tests/manual/rhi/stenciloutline/material.frag.qsbbin0 -> 897 bytes
-rw-r--r--tests/manual/rhi/stenciloutline/material.vert13
-rw-r--r--tests/manual/rhi/stenciloutline/material.vert.qsbbin0 -> 978 bytes
-rw-r--r--tests/manual/rhi/stenciloutline/stenciloutline.cpp154
-rw-r--r--tests/manual/rhi/stereo/CMakeLists.txt34
-rw-r--r--tests/manual/rhi/stereo/main.cpp36
-rw-r--r--tests/manual/rhi/stereo/stereo.pro12
-rw-r--r--tests/manual/rhi/stereo/stereo.qrc6
-rw-r--r--tests/manual/rhi/stereo/window.cpp313
-rw-r--r--tests/manual/rhi/stereo/window.h58
-rw-r--r--tests/manual/rhi/tessellation/CMakeLists.txt5
-rw-r--r--tests/manual/rhi/tessellation/buildshaders.bat10
-rw-r--r--tests/manual/rhi/tessellation/tessellation.cpp78
-rw-r--r--tests/manual/rhi/tessellation/test.frag.qsbbin425 -> 729 bytes
-rw-r--r--tests/manual/rhi/tessellation/test.tesc6
-rw-r--r--tests/manual/rhi/tessellation/test.tesc.qsbbin840 -> 1765 bytes
-rw-r--r--tests/manual/rhi/tessellation/test.tese13
-rw-r--r--tests/manual/rhi/tessellation/test.tese.qsbbin1174 -> 2436 bytes
-rw-r--r--tests/manual/rhi/tessellation/test.vert.qsbbin527 -> 1106 bytes
-rw-r--r--tests/manual/rhi/tessellation/test_domain.hlsl38
-rw-r--r--tests/manual/rhi/tessellation/test_hull.hlsl40
-rw-r--r--tests/manual/rhi/tex1d/CMakeLists.txt23
-rw-r--r--tests/manual/rhi/tex1d/buildshaders.bat2
-rw-r--r--tests/manual/rhi/tex1d/tex1d.cpp625
-rw-r--r--tests/manual/rhi/tex1d/texture1d.frag51
-rw-r--r--tests/manual/rhi/tex1d/texture1d.frag.qsbbin0 -> 3083 bytes
-rw-r--r--tests/manual/rhi/tex1d/texture1d.vert14
-rw-r--r--tests/manual/rhi/tex1d/texture1d.vert.qsbbin0 -> 967 bytes
-rw-r--r--tests/manual/rhi/tex3d/CMakeLists.txt5
-rw-r--r--tests/manual/rhi/tex3d/tex3d.cpp51
-rw-r--r--tests/manual/rhi/texturearray/CMakeLists.txt5
-rw-r--r--tests/manual/rhi/texturearray/texturearray.cpp59
-rw-r--r--tests/manual/rhi/texuploads/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/texuploads/texuploads.cpp53
-rw-r--r--tests/manual/rhi/triquadcube/CMakeLists.txt9
-rw-r--r--tests/manual/rhi/triquadcube/quadrenderer.cpp53
-rw-r--r--tests/manual/rhi/triquadcube/quadrenderer.h53
-rw-r--r--tests/manual/rhi/triquadcube/texturedcuberenderer.cpp53
-rw-r--r--tests/manual/rhi/triquadcube/texturedcuberenderer.h53
-rw-r--r--tests/manual/rhi/triquadcube/triangleoncuberenderer.cpp53
-rw-r--r--tests/manual/rhi/triquadcube/triangleoncuberenderer.h51
-rw-r--r--tests/manual/rhi/triquadcube/trianglerenderer.cpp53
-rw-r--r--tests/manual/rhi/triquadcube/trianglerenderer.h53
-rw-r--r--tests/manual/rhi/triquadcube/triquadcube.cpp73
-rw-r--r--tests/manual/shortcuts/CMakeLists.txt8
-rw-r--r--tests/manual/shortcuts/main.cpp30
-rw-r--r--tests/manual/socketengine/CMakeLists.txt10
-rw-r--r--tests/manual/socketengine/main.cpp35
-rw-r--r--tests/manual/startsystemmove/main.cpp29
-rw-r--r--tests/manual/stereographicsview/CMakeLists.txt27
-rw-r--r--tests/manual/stereographicsview/main.cpp26
-rw-r--r--tests/manual/stereographicsview/mainwindow.cpp79
-rw-r--r--tests/manual/stereographicsview/mainwindow.h30
-rw-r--r--tests/manual/stereographicsview/mainwindow.ui101
-rw-r--r--tests/manual/stereographicsview/mygraphicsview.cpp209
-rw-r--r--tests/manual/stereographicsview/mygraphicsview.h47
-rw-r--r--tests/manual/stereographicsview/stereographicsview.pro13
-rw-r--r--tests/manual/textrendering/CMakeLists.txt3
-rw-r--r--tests/manual/textrendering/codeeditor/CMakeLists.txt37
-rw-r--r--tests/manual/textrendering/codeeditor/codeeditor.cpp134
-rw-r--r--tests/manual/textrendering/codeeditor/codeeditor.h68
-rw-r--r--tests/manual/textrendering/codeeditor/codeeditor.pro8
-rw-r--r--tests/manual/textrendering/codeeditor/codeeditor.qdoc173
-rw-r--r--tests/manual/textrendering/codeeditor/main.cpp18
-rw-r--r--tests/manual/textrendering/glyphshaping/CMakeLists.txt10
-rw-r--r--tests/manual/textrendering/glyphshaping/main.cpp31
-rw-r--r--tests/manual/textrendering/nativetext/CMakeLists.txt7
-rw-r--r--tests/manual/textrendering/nativetext/main.cpp29
-rw-r--r--tests/manual/textrendering/textperformance/CMakeLists.txt5
-rw-r--r--tests/manual/textrendering/textperformance/main.cpp31
-rw-r--r--tests/manual/touch/CMakeLists.txt8
-rw-r--r--tests/manual/touch/main.cpp33
-rw-r--r--tests/manual/touchGraphicsItem/CMakeLists.txt8
-rw-r--r--tests/manual/touchGraphicsItem/main.cpp51
-rw-r--r--tests/manual/transientwindow/CMakeLists.txt8
-rw-r--r--tests/manual/transientwindow/main.cpp29
-rw-r--r--tests/manual/transientwindow/mainwindow.cpp29
-rw-r--r--tests/manual/transientwindow/mainwindow.h29
-rw-r--r--tests/manual/triangulator/CMakeLists.txt8
-rw-r--r--tests/manual/triangulator/main.cpp29
-rw-r--r--tests/manual/triangulator/triviswidget.cpp29
-rw-r--r--tests/manual/triangulator/triviswidget.h29
-rw-r--r--tests/manual/unc/CMakeLists.txt8
-rw-r--r--tests/manual/unc/main.cpp29
-rw-r--r--tests/manual/wasm/CMakeLists.txt6
-rw-r--r--tests/manual/wasm/README.md1
-rw-r--r--tests/manual/wasm/a11y/CMakeLists.txt3
-rw-r--r--tests/manual/wasm/a11y/basic_widgets/CMakeLists.txt21
-rw-r--r--tests/manual/wasm/a11y/basic_widgets/basic_widgets.html24
-rw-r--r--tests/manual/wasm/a11y/basic_widgets/basica11ywidget.cpp114
-rw-r--r--tests/manual/wasm/a11y/basic_widgets/basica11ywidget.h41
-rw-r--r--tests/manual/wasm/a11y/basic_widgets/main.cpp17
-rw-r--r--tests/manual/wasm/a11y/basic_widgets/tabswidget.cpp63
-rw-r--r--tests/manual/wasm/a11y/basic_widgets/tabswidget.h34
-rw-r--r--tests/manual/wasm/clipboard/CMakeLists.txt18
-rw-r--r--tests/manual/wasm/clipboard/clipboard.pro2
-rw-r--r--tests/manual/wasm/clipboard/main.cpp51
-rw-r--r--tests/manual/wasm/clipboard/mainwindow.cpp125
-rw-r--r--tests/manual/wasm/clipboard/mainwindow.h56
-rw-r--r--tests/manual/wasm/clipboard/mainwindow.ui14
-rw-r--r--tests/manual/wasm/cursors/CMakeLists.txt5
-rw-r--r--tests/manual/wasm/cursors/MainWindow.cpp51
-rw-r--r--tests/manual/wasm/cursors/MainWindow.h51
-rw-r--r--tests/manual/wasm/cursors/main.cpp51
-rw-r--r--tests/manual/wasm/eventloop/CMakeLists.txt4
-rw-r--r--tests/manual/wasm/eventloop/README.md1
-rw-r--r--tests/manual/wasm/eventloop/asyncify_exec/CMakeLists.txt8
-rw-r--r--tests/manual/wasm/eventloop/asyncify_exec/main.cpp61
-rw-r--r--tests/manual/wasm/eventloop/dialog_exec/CMakeLists.txt5
-rw-r--r--tests/manual/wasm/eventloop/dialog_exec/main.cpp51
-rw-r--r--tests/manual/wasm/eventloop/eventloop_auto/CMakeLists.txt43
-rw-r--r--tests/manual/wasm/eventloop/eventloop_auto/eventloop_auto.html10
-rw-r--r--tests/manual/wasm/eventloop/eventloop_auto/eventloop_auto_asyncify.html10
-rw-r--r--tests/manual/wasm/eventloop/eventloop_auto/main.cpp327
-rw-r--r--tests/manual/wasm/eventloop/main_exec/CMakeLists.txt5
-rw-r--r--tests/manual/wasm/eventloop/main_exec/main.cpp51
-rw-r--r--tests/manual/wasm/eventloop/main_noexec/CMakeLists.txt5
-rw-r--r--tests/manual/wasm/eventloop/main_noexec/main.cpp51
-rw-r--r--tests/manual/wasm/eventloop/thread_exec/CMakeLists.txt5
-rw-r--r--tests/manual/wasm/eventloop/thread_exec/main.cpp51
-rw-r--r--tests/manual/wasm/localfiles/CMakeLists.txt5
-rw-r--r--tests/manual/wasm/localfiles/main.cpp228
-rw-r--r--tests/manual/wasm/localfonts/CMakeLists.txt4
-rw-r--r--tests/manual/wasm/localfonts/fontloading/CMakeLists.txt20
-rw-r--r--tests/manual/wasm/localfonts/fontloading/fontloading.html167
-rw-r--r--tests/manual/wasm/localfonts/fontloading/main.cpp78
-rw-r--r--tests/manual/wasm/network/CMakeLists.txt0
-rw-r--r--tests/manual/wasm/network/echo_client_mainthread/CMakeLists.txt8
-rw-r--r--tests/manual/wasm/network/echo_client_mainthread/main.cpp52
-rw-r--r--tests/manual/wasm/network/echo_client_secondarythread/CMakeLists.txt8
-rw-r--r--tests/manual/wasm/network/echo_client_secondarythread/main.cpp50
-rw-r--r--tests/manual/wasm/network/echo_server/CMakeLists.txt14
-rw-r--r--tests/manual/wasm/network/echo_server/main.cpp80
-rw-r--r--tests/manual/wasm/network/sockify_sockets_auto/CMakeLists.txt22
-rw-r--r--tests/manual/wasm/network/sockify_sockets_auto/main.cpp318
-rw-r--r--tests/manual/wasm/network/sockify_sockets_auto/sockify_sockets_auto.html17
-rw-r--r--tests/manual/wasm/qstdweb/CMakeLists.txt97
-rw-r--r--tests/manual/wasm/qstdweb/files_auto.html13
-rw-r--r--tests/manual/wasm/qstdweb/files_main.cpp471
-rw-r--r--tests/manual/wasm/qstdweb/iodevices_auto.html10
-rw-r--r--tests/manual/wasm/qstdweb/iodevices_main.cpp103
-rw-r--r--tests/manual/wasm/qstdweb/promise_auto.html10
-rw-r--r--tests/manual/wasm/qstdweb/promise_main.cpp486
-rw-r--r--tests/manual/wasm/qstdweb/qwasmcompositor_auto.html10
-rw-r--r--tests/manual/wasm/qstdweb/qwasmcompositor_main.cpp172
-rw-r--r--tests/manual/wasm/qtloader/tst_qtloader.html19
-rw-r--r--tests/manual/wasm/qtloader/tst_qtloader.js42
-rw-r--r--tests/manual/wasm/qtloader_integration/CMakeLists.txt45
-rw-r--r--tests/manual/wasm/qtloader_integration/main.cpp183
-rw-r--r--tests/manual/wasm/qtloader_integration/preload.json10
-rw-r--r--tests/manual/wasm/qtloader_integration/test_body.js517
-rw-r--r--tests/manual/wasm/qtloader_integration/tst_qtloader_integration.html13
-rw-r--r--tests/manual/wasm/qtwasmtestlib/README.md75
-rw-r--r--tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.cpp175
-rw-r--r--tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.h73
-rw-r--r--tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.js137
-rw-r--r--tests/manual/wasm/rasterwindow/CMakeLists.txt5
-rw-r--r--tests/manual/wasm/rasterwindow/main.cpp51
-rw-r--r--tests/manual/wasm/rasterwindow/rasterwindow.cpp65
-rw-r--r--tests/manual/wasm/rasterwindow/rasterwindow.h53
-rw-r--r--tests/manual/wasm/shared/.gitignore1
-rwxr-xr-xtests/manual/wasm/shared/run.sh30
-rw-r--r--tests/manual/wasm/shared/testrunner.js161
-rw-r--r--tests/manual/widgetgrab/CMakeLists.txt8
-rw-r--r--tests/manual/widgetgrab/main.cpp29
-rw-r--r--tests/manual/widgets/CMakeLists.txt3
-rw-r--r--tests/manual/widgets/itemviews/CMakeLists.txt3
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/CMakeLists.txt5
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/testtable1.cpp29
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/tablevert/CMakeLists.txt5
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/tablevert/testtable2.cpp29
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/treeview/CMakeLists.txt5
-rw-r--r--tests/manual/widgets/itemviews/autoResizePrecision/treeview/testtree.cpp29
-rw-r--r--tests/manual/widgets/itemviews/delegate/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/itemviews/delegate/example.cpp35
-rw-r--r--tests/manual/widgets/itemviews/qconcatenatetablesproxymodel/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/itemviews/qconcatenatetablesproxymodel/main.cpp29
-rw-r--r--tests/manual/widgets/itemviews/qheaderview/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/itemviews/qheaderview/qheaderviewtest1.cpp29
-rw-r--r--tests/manual/widgets/itemviews/qtreeview/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/itemviews/qtreeview/main.cpp29
-rw-r--r--tests/manual/widgets/itemviews/qtreewidget/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/itemviews/qtreewidget/main.cpp29
-rw-r--r--tests/manual/widgets/itemviews/tableview-span-navigation/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/itemviews/tableview-span-navigation/main.cpp29
-rw-r--r--tests/manual/widgets/kernel/CMakeLists.txt5
-rw-r--r--tests/manual/widgets/kernel/layoutreplace/CMakeLists.txt5
-rw-r--r--tests/manual/widgets/kernel/layoutreplace/main.cpp29
-rw-r--r--tests/manual/widgets/kernel/qtooltip/CMakeLists.txt5
-rw-r--r--tests/manual/widgets/kernel/qtooltip/main.cpp29
-rw-r--r--tests/manual/widgets/kernel/setscreen/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/kernel/setscreen/main.cpp29
-rw-r--r--tests/manual/widgets/kernel/sizeonhide/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/kernel/sizeonhide/main.cpp29
-rw-r--r--tests/manual/widgets/qgraphicsview/CMakeLists.txt3
-rw-r--r--tests/manual/widgets/qgraphicsview/rubberband/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/qgraphicsview/rubberband/rubberbandtest.cpp29
-rw-r--r--tests/manual/widgets/styles/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/styles/main.cpp29
-rw-r--r--tests/manual/widgets/widgets/CMakeLists.txt3
-rw-r--r--tests/manual/widgets/widgets/bigmenucreator/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/widgets/bigmenucreator/bigmenucreator.pro2
-rw-r--r--tests/manual/widgets/widgets/bigmenucreator/main.cpp29
-rw-r--r--tests/manual/widgets/widgets/bigmenucreator/mainwindow.cpp29
-rw-r--r--tests/manual/widgets/widgets/bigmenucreator/mainwindow.h29
-rw-r--r--tests/manual/widgets/widgets/defaultUpMenuBar/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/widgets/defaultUpMenuBar/main.cpp53
-rw-r--r--tests/manual/widgets/widgets/multiscreen-menus/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/widgets/multiscreen-menus/main.cpp29
-rw-r--r--tests/manual/widgets/widgets/multiscreen-menus/mainwindow.cpp29
-rw-r--r--tests/manual/widgets/widgets/multiscreen-menus/mainwindow.h29
-rw-r--r--tests/manual/widgets/widgets/qmainwindow/saveStateSize/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/widgets/qmainwindow/saveStateSize/main.cpp29
-rw-r--r--tests/manual/widgets/widgets/qtabbar/CMakeLists.txt16
-rw-r--r--tests/manual/widgets/widgets/qtabbar/stylesheet/CMakeLists.txt15
-rw-r--r--tests/manual/widgets/widgets/qtabbar/stylesheet/main.cpp51
-rw-r--r--tests/manual/widgets/widgets/qtoolbutton/menuOnMultiScreens/CMakeLists.txt8
-rw-r--r--tests/manual/widgets/widgets/qtoolbutton/menuOnMultiScreens/main.cpp29
-rw-r--r--tests/manual/windowactivation/main.cpp29
-rw-r--r--tests/manual/windowchildgeometry/CMakeLists.txt10
-rw-r--r--tests/manual/windowchildgeometry/controllerwidget.cpp29
-rw-r--r--tests/manual/windowchildgeometry/controllerwidget.h29
-rw-r--r--tests/manual/windowchildgeometry/main.cpp29
-rw-r--r--tests/manual/windowchildgeometry/windowchildgeometry.pro2
-rw-r--r--tests/manual/windowflags/CMakeLists.txt7
-rw-r--r--tests/manual/windowflags/controllerwindow.cpp31
-rw-r--r--tests/manual/windowflags/controllerwindow.h29
-rw-r--r--tests/manual/windowflags/controls.cpp37
-rw-r--r--tests/manual/windowflags/controls.h30
-rw-r--r--tests/manual/windowflags/main.cpp29
-rw-r--r--tests/manual/windowflags/previewwindow.cpp29
-rw-r--r--tests/manual/windowflags/previewwindow.h29
-rw-r--r--tests/manual/windowgeometry/CMakeLists.txt8
-rw-r--r--tests/manual/windowgeometry/controllerwidget.cpp29
-rw-r--r--tests/manual/windowgeometry/controllerwidget.h29
-rw-r--r--tests/manual/windowgeometry/main.cpp29
-rw-r--r--tests/manual/windowmask/CMakeLists.txt14
-rw-r--r--tests/manual/windowmask/main.cpp124
-rw-r--r--tests/manual/windowmodality/CMakeLists.txt5
-rw-r--r--tests/manual/windowmodality/main.cpp29
-rw-r--r--tests/manual/windowtransparency/CMakeLists.txt6
-rw-r--r--tests/manual/windowtransparency/windowtransparency.cpp30
-rw-r--r--tests/manual/xcb_gl_integration/CMakeLists.txt8
-rw-r--r--tests/manual/xcb_gl_integration/main.cpp29
-rwxr-xr-xtests/manual/xembed-raster/gtk-embedder.py61
-rw-r--r--tests/manual/xembed-raster/main.cpp54
-rw-r--r--tests/manual/xembed-raster/rasterwindow.h57
-rwxr-xr-xtests/manual/xembed-widgets/gtk-embedder.py64
-rw-r--r--tests/manual/xembed-widgets/main.cpp57
-rw-r--r--tests/manual/xembed-widgets/window.h61
-rw-r--r--tests/manual/xembed/CMakeLists.txt6
-rw-r--r--tests/manual/xembed/gtk-container/CMakeLists.txt22
-rw-r--r--tests/manual/xembed/gtk-container/gtk-container.cpp43
-rw-r--r--tests/manual/xembed/gtk-container/gtk-container.pro16
-rw-r--r--tests/manual/xembed/qt-client-raster/CMakeLists.txt (renamed from tests/manual/xembed-raster/CMakeLists.txt)12
-rw-r--r--tests/manual/xembed/qt-client-raster/main.cpp29
-rw-r--r--tests/manual/xembed/qt-client-raster/qt-client-raster.pro (renamed from tests/manual/xembed-raster/xembed-raster.pro)2
-rw-r--r--tests/manual/xembed/qt-client-raster/rasterwindow.cpp (renamed from tests/manual/xembed-raster/rasterwindow.cpp)31
-rw-r--r--tests/manual/xembed/qt-client-raster/rasterwindow.h32
-rw-r--r--tests/manual/xembed/qt-client-widget/CMakeLists.txt (renamed from tests/manual/xembed-widgets/CMakeLists.txt)12
-rw-r--r--tests/manual/xembed/qt-client-widget/main.cpp32
-rw-r--r--tests/manual/xembed/qt-client-widget/qt-client-widget.pro (renamed from tests/manual/xembed-widgets/xembed-widgets.pro)2
-rw-r--r--tests/manual/xembed/qt-client-widget/window.cpp (renamed from tests/manual/xembed-widgets/window.cpp)44
-rw-r--r--tests/manual/xembed/qt-client-widget/window.h38
-rw-r--r--tests/manual/xembed/xembed.pro11
-rw-r--r--tests/manual/xmlstreamlint/CMakeLists.txt24
-rw-r--r--tests/manual/xmlstreamlint/doc/src/xmlstreamlint.qdoc51
-rw-r--r--tests/manual/xmlstreamlint/main.cpp90
-rw-r--r--tests/manual/xmlstreamlint/xmlstreamlint.pro7
-rw-r--r--tests/shared/fakedirmodel.h29
-rw-r--r--tests/shared/filesystem.h34
-rw-r--r--tests/shared/localechange.h36
-rw-r--r--tests/shared/nativewindow.h304
-rwxr-xr-xtests/testserver/apache2/apache2.sh31
-rwxr-xr-xtests/testserver/common/ssl.sh31
-rwxr-xr-xtests/testserver/common/startup.sh31
-rwxr-xr-xtests/testserver/cyrus/cyrus.sh31
-rwxr-xr-xtests/testserver/danted/danted.sh31
-rw-r--r--tests/testserver/docker-compose-qemu-bridge-network.yml200
-rwxr-xr-xtests/testserver/ftp-proxy/ftp-proxy.sh31
-rwxr-xr-xtests/testserver/iptables/iptables.sh31
-rwxr-xr-xtests/testserver/squid/squid.sh31
-rwxr-xr-xtests/testserver/vsftpd/vsftpd.sh31
4434 files changed, 448414 insertions, 95655 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 89b196e593..78192ce6ff 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -1,9 +1,9 @@
-# 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
# the standalone tests here.
- # special case begin
# Needed for early feature values, despite it being found later on in qt_build_tests().
# Needs to be find_package, not qt_find_package, because qt_find_package doesn't handle finding
@@ -15,9 +15,8 @@ if(QT_BUILD_STANDALONE_TESTS)
qt_internal_set_up_config_optimizations_like_in_qmake()
qt_find_package(WrapDBus1 PROVIDED_TARGETS dbus-1)
- qt_find_package(ICU COMPONENTS i18n uc data PROVIDED_TARGETS ICU::i18n ICU::uc ICU::data)
+ qt_find_package(ICU 50.1 COMPONENTS i18n uc data PROVIDED_TARGETS ICU::i18n ICU::uc ICU::data)
qt_find_package(WrapOpenSSL PROVIDED_TARGETS WrapOpenSSL::WrapOpenSSL)
qt_find_package(WrapOpenSSLHeaders PROVIDED_TARGETS WrapOpenSSLHeaders::WrapOpenSSLHeaders)
- # special case end
endif()
qt_build_tests()
diff --git a/tests/auto/CMakeLists.txt b/tests/auto/CMakeLists.txt
index 10b6e4f7b8..2a75fb44d5 100644
--- a/tests/auto/CMakeLists.txt
+++ b/tests/auto/CMakeLists.txt
@@ -1,7 +1,32 @@
-# special case begin
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
# Order by dependency [*], then alphabetic. [*] If bugs in part A of
# our source would break tests of part B, then test A before B.
+set(run_dbus_tests OFF)
+if (QT_FEATURE_dbus)
+ set(run_dbus_tests ON)
+ if(NOT CMAKE_CROSSCOMPILING AND TARGET Qt::DBus)
+ execute_process(COMMAND dbus-send --session --type=signal / local.AutotestCheck.Hello
+ TIMEOUT 5
+ RESULT_VARIABLE dbus_session_test
+ OUTPUT_QUIET ERROR_QUIET)
+ if(NOT "${dbus_session_test}" STREQUAL "0")
+ set(run_dbus_tests OFF)
+ if(QT_FEATURE_dbus_linked)
+ message(WARNING
+ " QtDBus is enabled but session bus is not available for testing.\n"
+ " Please check the installation. Skipping QtDBus tests.")
+ else()
+ message(WARNING
+ " QtDBus is enabled with runtime support, but session bus is not available.\n"
+ " Skipping QtDBus tests.")
+ endif()
+ endif()
+ endif()
+endif()
+
if(UIKIT)
# For now, only build CMake auto tests when QT_BUILD_MINIMAL_STATIC_TEST
# is a requested (which is basically what CI will build).
@@ -22,16 +47,43 @@ if(UIKIT)
return()
endif()
+# Limit set of tests to run for Android multi-ABI Qt builds.
+if(QT_BUILD_MINIMAL_ANDROID_MULTI_ABI_TESTS)
+ add_subdirectory(cmake)
+ add_subdirectory(corelib/kernel/qmath)
+ add_subdirectory(widgets/effects/qpixmapfilter)
+ add_subdirectory(corelib/platform)
+ return()
+endif()
+
+if(QT_BUILD_WASM_BATCHED_TESTS)
+ add_subdirectory(corelib/io/qdiriterator)
+ add_subdirectory(corelib/io/largefile)
+ add_subdirectory(corelib/io/qdataurl)
+ add_subdirectory(corelib/io/qbuffer)
+ add_subdirectory(corelib/io/qabstractfileengine)
+ add_subdirectory(corelib/io/qsettings)
+ add_subdirectory(corelib/io/qfileselector)
+ add_subdirectory(corelib/io/qfile)
+ add_subdirectory(corelib/serialization)
+ add_subdirectory(corelib/text)
+ add_subdirectory(corelib/thread)
+ add_subdirectory(wasm)
+ return()
+endif()
+
+if(WASM)
+ add_subdirectory(wasm)
+endif()
+
add_subdirectory(testlib)
if(NOT CMAKE_CROSSCOMPILING AND QT_FEATURE_process)
add_subdirectory(tools)
endif()
add_subdirectory(corelib)
-# special case begin
if (TARGET Qt::Xml AND TARGET Qt::Sql AND TARGET Qt::Network)
add_subdirectory(cmake)
endif()
-# special case end
# Limit set of tests to run for static Qt builds.
if(QT_BUILD_MINIMAL_STATIC_TESTS)
@@ -42,28 +94,8 @@ if (TARGET Qt::Concurrent)
add_subdirectory(concurrent)
endif()
-if (QT_FEATURE_dbus)
- set(run_dbus_tests ON)
- if(NOT CMAKE_CROSSCOMPILING AND TARGET Qt::DBus)
- execute_process(COMMAND dbus-send --session --type=signal / local.AutotestCheck.Hello
- RESULT_VARIABLE dbus_session_test
- OUTPUT_QUIET ERROR_QUIET)
- if(NOT "${dbus_session_test}" STREQUAL "0")
- set(run_dbus_tests OFF)
- if(QT_FEATURE_dbus_linked)
- message(WARNING
- " QtDBus is enabled but session bus is not available for testing.\n"
- " Please check the installation. Skipping QtDBus tests.")
- else()
- message(WARNING
- " QtDBus is enabled with runtime support, but session bus is not available.\n"
- " Skipping QtDBus tests.")
- endif()
- endif()
- endif()
- if(run_dbus_tests)
- add_subdirectory(dbus)
- endif()
+if(run_dbus_tests)
+ add_subdirectory(dbus)
endif()
if (TARGET Qt::Gui)
@@ -89,5 +121,3 @@ if (TARGET Qt::Xml)
endif()
# add_subdirectory(installed_cmake) ## FIXME: Does this still make sense in this form?
add_subdirectory(other)
-
-# special case end
diff --git a/tests/auto/bic/data/qt.6.0.0.linux-gcc-amd64.txt b/tests/auto/bic/data/qt.6.0.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..1ab35372d4
--- /dev/null
+++ b/tests/auto/bic/data/qt.6.0.0.linux-gcc-amd64.txt
@@ -0,0 +1,26289 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f8928334a20) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f89283a7960) 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 (0x0x7f89283a7ba0) 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 (0x0x7f89283d9a80) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f892803e480) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f892808fe40) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f89280c6420) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f89280c6480) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f89280c64e0) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f89280c6540) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f89280c65a0) 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 (0x0x7f89280c6660) 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 (0x0x7f89280c6720) 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 (0x0x7f89280c67e0) 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 (0x0x7f89280c68a0) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f89280c6c00) 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 (0x0x7f89280c6f60) 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 (0x0x7f8928112000) 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 (0x0x7f89281122a0) 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 (0x0x7f8928112300) 0 empty
+
+Class std::__nonesuchbase
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuchbase (0x0x7f8928112c00) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch (0x0x7f89280e1af8) 0 empty
+std::__nonesuchbase (0x0x7f8928112c60) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f892818e240) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f8928210420) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f89282105a0) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f8928210600) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f892546dcc0) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f892546dd20) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f8928171820) 0 empty
+std::input_iterator_tag (0x0x7f892546dd80) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f8928171888) 0 empty
+std::forward_iterator_tag (0x0x7f89281718f0) 0 empty
+std::input_iterator_tag (0x0x7f892546dde0) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f8928171958) 0 empty
+std::bidirectional_iterator_tag (0x0x7f89281719c0) 0 empty
+std::forward_iterator_tag (0x0x7f8928171a28) 0 empty
+std::input_iterator_tag (0x0x7f892546de40) 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 (0x0x7f8925531d80) 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 (0x0x7f8925531ea0) 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 (0x0x7f89255571e0) 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 (0x0x7f89255574e0) 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 (0x0x7f8925557600) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f8925239840) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f8925239ba0) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f8925239c00) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f8925239cc0) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f8925239d20) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f8925239d80) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f8925239de0) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f8925239e40) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f8925276180) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f8925276420) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f8925276480) 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 (0x0x7f892532a240) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 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 (0x0x7f8928171f08) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+std::exception (0x0x7f892532a4e0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f8928171f08)
+
+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 (0x0x7f8928171f70) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+std::bad_alloc (0x0x7f8925340000) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f8928171f70)
+std::exception (0x0x7f892532a720) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f8925340000)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f892532a900) 0 empty
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f89251f4180) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f89251f41e0) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f89251f4360) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f89251f4420) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f8925127dd0) 0
+std::__uses_alloc_base (0x0x7f89251f43c0) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f8924f8da80) 0 empty
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f89250062a0) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f8925006420) 0 empty
+
+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 (0x0x7f8924c87de0) 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 (0x0x7f8924c66c98) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+std::exception (0x0x7f8924cbf1e0) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f8924c66c98)
+
+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 (0x0x7f8924c66d00) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+std::exception (0x0x7f8924cbf3c0) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f8924c66d00)
+
+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 (0x0x7f8924c66d68) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+std::exception (0x0x7f8924cbf5a0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f8924c66d68)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f8924cbf660) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f8924cbf6c0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f8924cbf8a0) 0
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f8924de0300) 0 empty
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f8924a622a0) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f8924a62360) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f8924a62840) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f8924a86780) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f8924a86840) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f8924a868a0) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f8924a86c60) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f8924a86e40) 0
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f892489c2a0) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f8924365360) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f8924247410) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7f8924365ae0) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f89242474e0) 0
+std::_Bit_iterator_base (0x0x7f8924247548) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7f89243940c0) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f8924247680) 0
+std::_Bit_iterator_base (0x0x7f89242476e8) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7f8924394900) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f8924154c60) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f8924154de0) 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 (0x0x7f8924154f60) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f8924181120) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f8923e8c900) 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 (0x0x7f8923e8c960) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f8923f5a900) 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 (0x0x7f8923ed9958) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+std::exception (0x0x7f8923f95e40) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f8923ed9958)
+
+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 (0x0x7f8923ed9b60) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+std::exception (0x0x7f8924000cc0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f8923ed9b60)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f8924000ea0) 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 (0x0x7f8923c44a20) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f8923c69120) 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 (0x0x7f8923ed9bc8) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+std::exception (0x0x7f8923c69360) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f8923ed9bc8)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f8923d70660) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f8923d706c0) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f8923d70960) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f8923dae180) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f8923def420) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f8923a86600) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f8923a1add0) 0
+std::__atomic_flag_base (0x0x7f8923a86660) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f892363e958) 0
+QAtomicInteger<int> (0x0x7f892363e9c0) 0
+QBasicAtomicInteger<int> (0x0x7f8923636d80) 0
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f89232c4000) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f89232c4060) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f892337e840) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f892337ef60) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f89233bc000) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f892330c820) 0
+QGenericArgument (0x0x7f89233bc2a0) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f89233bc780) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f89233bc7e0) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f89233bc720) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f8923406180) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f8923029960) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f8923052360) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f892313b000) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f892313b360) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f89231ccd20) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f8922e21c00) 0
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f8922e21cc0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f8922e21d80) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f8922e21de0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f8922e21e40) 0
+
+Class __jmp_buf_tag
+ size=200 align=8
+ base size=200 base align=8
+__jmp_buf_tag (0x0x7f8922e21ea0) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f8922e21f00) 0
+
+Class __cancel_jmp_buf_tag
+ size=72 align=8
+ base size=72 base align=8
+__cancel_jmp_buf_tag (0x0x7f8922e21f60) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f8922ea0060) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f8922ea00c0) 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 (0x0x7f8922f49de0) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f8922daff60) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f8922dec000) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f8922dec060) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f8922dec0c0) 0
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f89229a64e0) 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 (0x0x7f89229a68a0) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f89229a6b40) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f89229a6d20) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f89225f3c60) 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 (0x0x7f89227fddd0) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+std::exception (0x0x7f89225f3d20) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f89227fddd0)
+
+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 (0x0x7f89227fde38) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+std::logic_error (0x0x7f89227fdea0) 0
+ primary-for std::domain_error (0x0x7f89227fde38)
+std::exception (0x0x7f89225f3d80) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f89227fdea0)
+
+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 (0x0x7f89227fdf08) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+std::logic_error (0x0x7f89227fdf70) 0
+ primary-for std::invalid_argument (0x0x7f89227fdf08)
+std::exception (0x0x7f89225f3de0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f89227fdf70)
+
+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 (0x0x7f8922657000) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+std::logic_error (0x0x7f8922657068) 0
+ primary-for std::length_error (0x0x7f8922657000)
+std::exception (0x0x7f89225f3e40) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f8922657068)
+
+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 (0x0x7f89226570d0) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+std::logic_error (0x0x7f8922657138) 0
+ primary-for std::out_of_range (0x0x7f89226570d0)
+std::exception (0x0x7f89225f3ea0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f8922657138)
+
+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 (0x0x7f89226571a0) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+std::exception (0x0x7f89225f3f00) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f89226571a0)
+
+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 (0x0x7f8922657208) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+std::runtime_error (0x0x7f8922657270) 0
+ primary-for std::range_error (0x0x7f8922657208)
+std::exception (0x0x7f89225f3f60) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f8922657270)
+
+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 (0x0x7f89226572d8) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+std::runtime_error (0x0x7f8922657340) 0
+ primary-for std::overflow_error (0x0x7f89226572d8)
+std::exception (0x0x7f8922672000) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f8922657340)
+
+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 (0x0x7f89226573a8) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+std::runtime_error (0x0x7f8922657410) 0
+ primary-for std::underflow_error (0x0x7f89226573a8)
+std::exception (0x0x7f8922672060) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f8922657410)
+
+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 (0x0x7f89226721e0) 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 (0x0x7f8922672540) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f8922672d20) 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 (0x0x7f8922657820) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+std::runtime_error (0x0x7f8922657888) 0
+ primary-for std::system_error (0x0x7f8922657820)
+std::exception (0x0x7f89226b7900) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f8922657888)
+
+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 (0x0x7f8922657b60) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+std::system_error (0x0x7f8922657bc8) 0
+ primary-for std::ios_base::failure (0x0x7f8922657b60)
+std::runtime_error (0x0x7f8922657c30) 0
+ primary-for std::system_error (0x0x7f8922657bc8)
+std::exception (0x0x7f8922715000) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f8922657c30)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f8922715060) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f89227150c0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f8922715120) 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 (0x0x7f89226edf60) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+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 (0x0x7f89227b1a90) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+std::exception (0x0x7f89224de660) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f89227b1a90)
+
+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 (0x0x7f89227b1af8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+std::exception (0x0x7f89224de780) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f89227b1af8)
+
+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 (0x0x7f89227b1b60) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+std::exception (0x0x7f89224de8a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f89227b1b60)
+
+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 (0x0x7f89227b1c30) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+std::exception (0x0x7f89224de9c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f89227b1c30)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f892250b2a0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f892250b600) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f892250b900) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f892250bc60) 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 (0x0x7f89227b1d00) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+std::exception (0x0x7f892250bf60) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f89227b1d00)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f892257ac00) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f89225a6180) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f89222f1000) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f8922028780) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f892212d8a0) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f8921fbc420) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f8921c581e0) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f8921d825a0) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f8921d829c0) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f8921d82a20) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f8921a0e720) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f8921ac9960) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f8921bb9ea0) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f8921bb9e40) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f89217ffd80) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f89219a52a0) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f89215752a0) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f892156e1a0) 0
+QtPrivate::ArgBase (0x0x7f8921575300) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f892156e270) 0
+QtPrivate::ArgBase (0x0x7f8921575540) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f89211ebf00) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f89211eb360) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f892101d060) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f89210b6120) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f89210b6d80) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f89210dc000) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f8921157840) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f8921036340) 0
+QIODeviceBase (0x0x7f89211578a0) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f8921157a20) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f8920de7d80) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f8921036b60) 0
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f8920de7e40) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f8921036bc8) 0
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f8920de7f00) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f8920f15a20) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f8921036d00) 0
+QMetaContainer (0x0x7f8920f15c00) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f8921036d68) 0
+QMetaContainer (0x0x7f8920f3d000) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f8920b3d480) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f8920acd5b0) 0
+std::__detail::_List_node_base (0x0x7f8920b3d4e0) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f89208155a0) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f8920815900) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f892068c960) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f89206ecf60) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f8920200f60) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f8920233000) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f89200f06c0) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f89200f0a20) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f892015da80) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f892015dba0) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f89201abde0) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f89201abd80) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f89201abe40) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f891fdcf300) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f891fdcf360) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f891fdcf960) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f891fe020c0) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f891fe023c0) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f891fe024e0) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f891fe02720) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f89201b1d68) 0
+QPropertyObserverBase (0x0x7f891fe028a0) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f891fe74780) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f891fe953c0) 0
+
+Class QBindingStatus
+ size=16 align=8
+ base size=16 base align=8
+QBindingStatus (0x0x7f891fed0660) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f891fed06c0) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f891fbd44e0) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f891fc43ae0) 0 empty
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7f891fd0f6c0) 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 (0x0x7f891fd0fb40) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f891fd953c0) 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 (0x0x7f891fd95360) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f891fa54240) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f891fa54ae0) 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 (0x0x7f891fccbd68) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+QObject (0x0x7f891fa54a80) 0
+ primary-for QAbstractAnimation (0x0x7f891fccbd68)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f891fa54e40) 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 (0x0x7f891fa8b000) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+QObject (0x0x7f891fa54de0) 0
+ primary-for QAnimationDriver (0x0x7f891fa8b000)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f891fa97060) 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 (0x0x7f891fa8b068) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+QObject (0x0x7f891fa97000) 0
+ primary-for QEventLoop (0x0x7f891fa8b068)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f891fa974e0) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f891fa975a0) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f891fa97600) 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 (0x0x7f891fa8b1a0) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+QObject (0x0x7f891fa97540) 0
+ primary-for QAbstractEventDispatcher (0x0x7f891fa8b1a0)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f891fb1e000) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f891f5d16c0) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f891f5d1660) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f891f604240) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f891fb70478) 0
+QStringConverterBase (0x0x7f891f6041e0) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f891fb704e0) 0
+QStringConverter (0x0x7f891fb70548) 0
+QStringConverterBase (0x0x7f891f604c00) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f891fb705b0) 0
+QStringConverter (0x0x7f891fb70618) 0
+QStringConverterBase (0x0x7f891f647a80) 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 (0x0x7f891fb70680) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+QIODeviceBase (0x0x7f891f669780) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f891f669e40) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f891f741ea0) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f891f79c540) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f891f79c6c0) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f891f45e5a0) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f891f47e5a0) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f891f43a1a0) 0
+QIODeviceBase (0x0x7f891f47e540) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f891f5ac480) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f891f5ac540) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f891f36a840) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f891f36a8a0) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f891f36a7e0) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f891f117f00) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f891f142180) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f891f142360) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f891f183780) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f891edce840) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f891ee25ba0) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f891eed9000) 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 (0x0x7f891eec63a8) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+QObject (0x0x7f891eeaaf60) 0
+ primary-for QAbstractItemModel (0x0x7f891eec63a8)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f891ebe0d20) 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 (0x0x7f891eec69c0) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+QAbstractItemModel (0x0x7f891eec6a28) 0
+ primary-for QAbstractTableModel (0x0x7f891eec69c0)
+QObject (0x0x7f891ebe0cc0) 0
+ primary-for QAbstractItemModel (0x0x7f891eec6a28)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f891ebe0e40) 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 (0x0x7f891eec6a90) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+QAbstractItemModel (0x0x7f891eec6af8) 0
+ primary-for QAbstractListModel (0x0x7f891eec6a90)
+QObject (0x0x7f891ebe0de0) 0
+ primary-for QAbstractItemModel (0x0x7f891eec6af8)
+
+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 (0x0x7f891ec5a240) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f891ec5a300) 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 (0x0x7f891ec4bdd0) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+QAbstractItemModel (0x0x7f891ec4be38) 0
+ primary-for QAbstractProxyModel (0x0x7f891ec4bdd0)
+QObject (0x0x7f891ec5a2a0) 0
+ primary-for QAbstractItemModel (0x0x7f891ec4be38)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f891ec5a4e0) 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 (0x0x7f891ec4bea0) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+QAbstractAnimation (0x0x7f891ec4bf08) 0
+ primary-for QAnimationGroup (0x0x7f891ec4bea0)
+QObject (0x0x7f891ec5a480) 0
+ primary-for QAbstractAnimation (0x0x7f891ec4bf08)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f891ecb3000) 0
+QIterator<QMetaAssociation> (0x0x7f891ecb3068) 0
+QBaseIterator<QMetaAssociation> (0x0x7f891ec5a900) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f891ecb31a0) 0
+QConstIterator<QMetaAssociation> (0x0x7f891ecb3208) 0
+QBaseIterator<QMetaAssociation> (0x0x7f891ec5aea0) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f891ecb32d8) 0
+QIterable<QMetaAssociation> (0x0x7f891eccd3c0) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f891e9da480) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f891ea2ad20) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f891ea5dc60) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f891eaaeae0) 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 (0x0x7f891eab9380) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+QObject (0x0x7f891eaaea20) 0
+ primary-for QIODevice (0x0x7f891eab9380)
+QIODeviceBase (0x0x7f891eaaea80) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f891eaaeea0) 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 (0x0x7f891eabb410) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+QIODevice (0x0x7f891eab9690) 0
+ primary-for QBuffer (0x0x7f891eabb410)
+QObject (0x0x7f891eaaede0) 0
+ primary-for QIODevice (0x0x7f891eab9690)
+QIODeviceBase (0x0x7f891eaaee40) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f891eb07120) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f891eb070c0) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f891eb072a0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f891eb07240) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f891eb61a80) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f891e879780) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f891e879720) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f891e879ae0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f891e9291e0) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f891e97e5a0) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f891e97e600) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f891e97e540) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f891e608b40) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f891e635300) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f891e6db600) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f891e770060) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f891e7700c0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f891e7702a0) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f891e403120) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f891e4d1cc0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f891e574000) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f891e5740c0) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f891e297780) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f891e2d4cc0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f891e2d4d20) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f891e2d4c60) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f891dfed4e0) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f891dfed540) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f891dfed480) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f891de1cb40) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f891de1cae0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f891df114e0) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f891df58960) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f891df91240) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f891df91420) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f891dc57540) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f891dd28000) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f891dd28060) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f891dd280c0) 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 (0x0x7f891dcd2f60) 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 (0x0x7f891dceb068) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+QEvent (0x0x7f891dd28a20) 0
+ primary-for QTimerEvent (0x0x7f891dceb068)
+
+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 (0x0x7f891dceb0d0) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+QEvent (0x0x7f891dd28f00) 0
+ primary-for QChildEvent (0x0x7f891dceb0d0)
+
+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 (0x0x7f891dceb138) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+QEvent (0x0x7f891dd5f360) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f891dceb138)
+
+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 (0x0x7f891dceb1a0) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+QEvent (0x0x7f891dd5f600) 0
+ primary-for QDeferredDeleteEvent (0x0x7f891dceb1a0)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f891dd5f960) 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 (0x0x7f891dceb208) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+QObject (0x0x7f891dd5f900) 0
+ primary-for QCoreApplication (0x0x7f891dceb208)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f891dd5fb40) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f891dd5fc60) 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 (0x0x7f891dceb270) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+QAbstractItemModel (0x0x7f891dceb2d8) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f891dceb270)
+QObject (0x0x7f891dd5fc00) 0
+ primary-for QAbstractItemModel (0x0x7f891dceb2d8)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f891dd5fde0) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f891dd5ff00) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f891d9cd240) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f891dac23c0) 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 (0x0x7f891dab9958) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+QIODevice (0x0x7f891da2cf50) 0
+ primary-for QFileDevice (0x0x7f891dab9958)
+QObject (0x0x7f891dac2300) 0
+ primary-for QIODevice (0x0x7f891da2cf50)
+QIODeviceBase (0x0x7f891dac2360) 0 empty
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f891dac2f00) 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 (0x0x7f891dab9c30) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+QFileDevice (0x0x7f891dab9c98) 0
+ primary-for QFile (0x0x7f891dab9c30)
+QIODevice (0x0x7f891dafb460) 0
+ primary-for QFileDevice (0x0x7f891dab9c98)
+QObject (0x0x7f891dac2e40) 0
+ primary-for QIODevice (0x0x7f891dafb460)
+QIODeviceBase (0x0x7f891dac2ea0) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f891db781e0) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f891d7ecf00) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f891d8d33c0) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f891d8d3780) 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 (0x0x7f891d5b0478) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+std::exception (0x0x7f891d5ddcc0) 0 nearly-empty
+ primary-for QException (0x0x7f891d5b0478)
+
+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 (0x0x7f891d5b04e0) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+QException (0x0x7f891d5b0548) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f891d5b04e0)
+std::exception (0x0x7f891d5ddd20) 0 nearly-empty
+ primary-for QException (0x0x7f891d5b0548)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f891d629c60) 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 (0x0x7f891d629cc0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f891d629f00) 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 (0x0x7f891d63e8f0) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+QObject (0x0x7f891d629ea0) 0
+ primary-for QFileSelector (0x0x7f891d63e8f0)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f891d65a120) 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 (0x0x7f891d63e958) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+QObject (0x0x7f891d65a0c0) 0
+ primary-for QFileSystemWatcher (0x0x7f891d63e958)
+
+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 (0x0x7f891d65a2a0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f891d65a480) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f891d63e9c0) 0
+QBasicMutex (0x0x7f891d6cc1e0) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f891d6cc600) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f891d6ccc00) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f891d73c240) 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 (0x0x7f891d73ce40) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f891d4ad9c0) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f891d4b9340) 0
+std::__mutex_base (0x0x7f891d4ada20) 0
+
+Class std::__condvar
+ size=48 align=8
+ base size=48 base align=8
+std::__condvar (0x0x7f891d4adc00) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f891d4d9240) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f891d4d92a0) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f891d4d9300) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f891d50e4e0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f891d4b9c30) 0
+std::__recursive_mutex_base (0x0x7f891d50e540) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f891d4fac40) 0
+std::__mutex_base (0x0x7f891d50e9c0) 0
+std::__timed_mutex_impl<std::timed_mutex> (0x0x7f891d50ea20) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f891d48dcb0) 0
+std::__recursive_mutex_base (0x0x7f891d50ede0) 0
+std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f891d50ee40) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f891d54ec00) 0
+
+Class std::once_flag::_Prepare_execution
+ size=1 align=1
+ base size=0 base align=1
+std::once_flag::_Prepare_execution (0x0x7f891d54ec60) 0 empty
+
+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 (0x0x7f891d57c180) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f891d197000) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f891d197480) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f891d1974e0) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f891d2513c0) 0 empty
+
+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 (0x0x7f891d251cc0) 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 (0x0x7f891d251d20) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f891d251c60) 0
+
+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 (0x0x7f891d2bee38) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+std::logic_error (0x0x7f891d2beea0) 0
+ primary-for std::future_error (0x0x7f891d2bee38)
+std::exception (0x0x7f891d2d91e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f891d2beea0)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f891d2d9900) 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 (0x0x7f891d2d98a0) 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 (0x0x7f891d099240) 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 (0x0x7f891d063af8) 0
+std::__at_thread_exit_elt (0x0x7f891d099300) 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 (0x0x7f891d2d9a80) 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 (0x0x7f891d2d9840) 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 (0x0x7f891c9b3ea0) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+std::__future_base::_State_baseV2 (0x0x7f891c9c9d20) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f891c9b3ea0)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f891ca10420) 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 (0x0x7f891ca0a1a0) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+QObject (0x0x7f891ca103c0) 0
+ primary-for QThread (0x0x7f891ca0a1a0)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f891ca107e0) 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 (0x0x7f891ca0a208) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+QObject (0x0x7f891ca10780) 0
+ primary-for QThreadPool (0x0x7f891ca0a208)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f891c7f1840) 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 (0x0x7f891c7bd750) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+QObject (0x0x7f891c7f17e0) 0
+ primary-for QFutureWatcherBase (0x0x7f891c7bd750)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f891c7f1d80) 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 (0x0x7f891c7bd888) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+QAbstractProxyModel (0x0x7f891c7bd8f0) 0
+ primary-for QIdentityProxyModel (0x0x7f891c7bd888)
+QAbstractItemModel (0x0x7f891c7bd958) 0
+ primary-for QAbstractProxyModel (0x0x7f891c7bd8f0)
+QObject (0x0x7f891c7f1d20) 0
+ primary-for QAbstractItemModel (0x0x7f891c7bd958)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f891c7f1f00) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f891c88b180) 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 (0x0x7f891c88f000) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+QObject (0x0x7f891c88b120) 0
+ primary-for QItemSelectionModel (0x0x7f891c88f000)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f891c88f340) 0
+QList<QItemSelectionRange> (0x0x7f891c88f3a8) 0
+QListSpecialMethods<QItemSelectionRange> (0x0x7f891c88f410) 0 empty
+QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f891c88bae0) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f891c55cd20) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f891c5971e0) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f891c5e1660) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f891c5e16c0) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f891c5e1600) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f891c6a0300) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f891c6a0360) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f891c468360) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f891c4683c0) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f891c468300) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f891c535060) 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 (0x0x7f891c529410) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+QObject (0x0x7f891c535000) 0
+ primary-for QLibrary (0x0x7f891c529410)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f891c535660) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f891c535600) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f891c22df60) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f891c2b7780) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f891c2b7840) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f891c341060) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f891bf9a960) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f891c016120) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f891c06da80) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f891c06dcc0) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f891c06dc60) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f891c0b6a20) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f891bd56540) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f891bdf0060) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f891bdf0120) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f891bdf00c0) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f891be5a4e0) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f891be5a480) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f891bea4480) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f891bea4420) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f891bea4b40) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f891bea4ae0) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f891bef5e40) 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 (0x0x7f891bf04618) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+QObject (0x0x7f891bef5de0) 0
+ primary-for QMimeData (0x0x7f891bf04618)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f891bef5c00) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f891bb91960) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f891bb91a20) 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 (0x0x7f891bb98a28) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+QObject (0x0x7f891bb919c0) 0
+ primary-for QObjectCleanupHandler (0x0x7f891bb98a28)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f891bb91ae0) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f891bbf7840) 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 (0x0x7f891bbfea28) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+QAnimationGroup (0x0x7f891bbfea90) 0
+ primary-for QParallelAnimationGroup (0x0x7f891bbfea28)
+QAbstractAnimation (0x0x7f891bbfeaf8) 0
+ primary-for QAnimationGroup (0x0x7f891bbfea90)
+QObject (0x0x7f891bbf77e0) 0
+ primary-for QAbstractAnimation (0x0x7f891bbfeaf8)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f891bbf7a20) 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 (0x0x7f891bbfeb60) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+QAbstractAnimation (0x0x7f891bbfebc8) 0
+ primary-for QPauseAnimation (0x0x7f891bbfeb60)
+QObject (0x0x7f891bbf79c0) 0
+ primary-for QAbstractAnimation (0x0x7f891bbfebc8)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f891bc36540) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f891bc365a0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f891bc78240) 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 (0x0x7f891bc68d68) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+QObject (0x0x7f891bc781e0) 0
+ primary-for QPluginLoader (0x0x7f891bc68d68)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f891bc78300) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f891bcf5c00) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f891bcf5c60) 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 (0x0x7f891bd01750) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+QIODevice (0x0x7f891bc5faf0) 0
+ primary-for QProcess (0x0x7f891bd01750)
+QObject (0x0x7f891bcf5b40) 0
+ primary-for QIODevice (0x0x7f891bc5faf0)
+QIODeviceBase (0x0x7f891bcf5ba0) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f891bd3ea20) 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 (0x0x7f891bd017b8) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+QAbstractAnimation (0x0x7f891bd01820) 0
+ primary-for QVariantAnimation (0x0x7f891bd017b8)
+QObject (0x0x7f891bd3e9c0) 0
+ primary-for QAbstractAnimation (0x0x7f891bd01820)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f891bd3ec60) 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 (0x0x7f891bd01888) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+QVariantAnimation (0x0x7f891bd018f0) 0
+ primary-for QPropertyAnimation (0x0x7f891bd01888)
+QAbstractAnimation (0x0x7f891bd01958) 0
+ primary-for QVariantAnimation (0x0x7f891bd018f0)
+QObject (0x0x7f891bd3ec00) 0
+ primary-for QAbstractAnimation (0x0x7f891bd01958)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f891ba02480) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f891baf97e0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f891baf9780) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f891b8b9f00) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f891b6e6600) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f891b6e65a0) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f891b741e38) 0
+QRandomGenerator (0x0x7f891b367ae0) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f891b38e720) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f891b38e960) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f891b38ede0) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f891b3fe2a0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f891b457e40) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f891b4e67e0) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f891b1c7780) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f891b2aa480) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f891b2aa780) 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 (0x0x7f891b255068) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+QFileDevice (0x0x7f891b2550d0) 0
+ primary-for QSaveFile (0x0x7f891b255068)
+QIODevice (0x0x7f891b2b5540) 0
+ primary-for QFileDevice (0x0x7f891b2550d0)
+QObject (0x0x7f891b2aa6c0) 0
+ primary-for QIODevice (0x0x7f891b2b5540)
+QIODeviceBase (0x0x7f891b2aa720) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f891b2aad80) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f891b304ea0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f8924d2df60) 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 (0x0x7f8924bf90d0) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+QAnimationGroup (0x0x7f8924bf91a0) 0
+ primary-for QSequentialAnimationGroup (0x0x7f8924bf90d0)
+QAbstractAnimation (0x0x7f8924bf9208) 0
+ primary-for QAnimationGroup (0x0x7f8924bf91a0)
+QObject (0x0x7f8924d2d900) 0
+ primary-for QAbstractAnimation (0x0x7f8924bf9208)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f8924bf93a8) 0
+QIterator<QMetaSequence> (0x0x7f8924bf92d8) 0
+QBaseIterator<QMetaSequence> (0x0x7f8924d4d8a0) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f8924bf9548) 0
+QConstIterator<QMetaSequence> (0x0x7f8924bf95b0) 0
+QBaseIterator<QMetaSequence> (0x0x7f8924ab7de0) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f8924bf9618) 0
+QIterable<QMetaSequence> (0x0x7f8924b26960) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f8921d5e0c0) 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 (0x0x7f89249cddd0) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+QObject (0x0x7f8921d5e060) 0
+ primary-for QSettings (0x0x7f89249cddd0)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f8921b9d900) 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 (0x0x7f89249cde38) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+QObject (0x0x7f8921b9d8a0) 0
+ primary-for QSharedMemory (0x0x7f89249cde38)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f8921b9dba0) 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 (0x0x7f89249cdea0) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+QObject (0x0x7f8921b9db40) 0
+ primary-for QSignalMapper (0x0x7f89249cdea0)
+
+Class __uintr_frame
+ size=24 align=8
+ base size=24 base align=8
+__uintr_frame (0x0x7f891ec28540) 0
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f891ac09ae0) 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 (0x0x7f8924a08c30) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+QObject (0x0x7f891ac09a80) 0
+ primary-for QSocketNotifier (0x0x7f8924a08c30)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f891ac09c60) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f891ac22360) 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 (0x0x7f8924a08c98) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+QAbstractProxyModel (0x0x7f8924a08d00) 0
+ primary-for QSortFilterProxyModel (0x0x7f8924a08c98)
+QAbstractItemModel (0x0x7f8924a08d68) 0
+ primary-for QAbstractProxyModel (0x0x7f8924a08d00)
+QObject (0x0x7f891ac22300) 0
+ primary-for QAbstractItemModel (0x0x7f8924a08d68)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f891ac22720) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f891ac3a060) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f891ac49cc0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f891ac70540) 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 (0x0x7f89247f0618) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+QAbstractListModel (0x0x7f89247f0680) 0
+ primary-for QStringListModel (0x0x7f89247f0618)
+QAbstractItemModel (0x0x7f89247f06e8) 0
+ primary-for QAbstractListModel (0x0x7f89247f0680)
+QObject (0x0x7f891ac704e0) 0
+ primary-for QAbstractItemModel (0x0x7f89247f06e8)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f891ac70600) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f891ac706c0) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f891ac70840) 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 (0x0x7f89247f0750) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+QFile (0x0x7f89247f07b8) 0
+ primary-for QTemporaryFile (0x0x7f89247f0750)
+QFileDevice (0x0x7f89247f0888) 0
+ primary-for QFile (0x0x7f89247f07b8)
+QIODevice (0x0x7f891ac73700) 0
+ primary-for QFileDevice (0x0x7f89247f0888)
+QObject (0x0x7f891ac70780) 0
+ primary-for QIODevice (0x0x7f891ac73700)
+QIODeviceBase (0x0x7f891ac707e0) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f891ac70a80) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f891ac92060) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f891ac92720) 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 (0x0x7f89247f09c0) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+QObject (0x0x7f891ac926c0) 0
+ primary-for QTimeLine (0x0x7f89247f09c0)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f891ac92900) 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 (0x0x7f89247f0a28) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+QObject (0x0x7f891ac928a0) 0
+ primary-for QTimer (0x0x7f89247f0a28)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f891aca57e0) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f891aca5780) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f891acc0ba0) 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 (0x0x7f8924816410) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+QObject (0x0x7f891acc0b40) 0
+ primary-for QTranslator (0x0x7f8924816410)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f891acc0d80) 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 (0x0x7f8924816478) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+QAbstractProxyModel (0x0x7f89248164e0) 0
+ primary-for QTransposeProxyModel (0x0x7f8924816478)
+QAbstractItemModel (0x0x7f89248165b0) 0
+ primary-for QAbstractProxyModel (0x0x7f89248164e0)
+QObject (0x0x7f891acc0d20) 0
+ primary-for QAbstractItemModel (0x0x7f89248165b0)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f891acc0f00) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f891acec4e0) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f891acec600) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f891acfa5a0) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f892447e958) 0
+QList<QXmlStreamAttribute> (0x0x7f892447e9c0) 0
+QListSpecialMethods<QXmlStreamAttribute> (0x0x7f892447ea28) 0 empty
+QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f891ad04720) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f891ad04660) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f891ad288a0) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f891ad34180) 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 (0x0x7f891ad3cb40) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f891ad3cba0) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f891ad4f180) 0
+
+Class QtConcurrent::TaskStartParameters
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::TaskStartParameters (0x0x7f891ad4f4e0) 0
+
+Class QtConcurrent::Median
+ size=72 align=8
+ base size=70 base align=8
+QtConcurrent::Median (0x0x7f891a95f900) 0
+
+Class QtConcurrent::ThreadEngineBarrier
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::ThreadEngineBarrier (0x0x7f891a95fd20) 0
+
+Vtable for QtConcurrent::ThreadEngineBase
+QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN12QtConcurrent16ThreadEngineBaseE)
+16 (int (*)(...))QtConcurrent::ThreadEngineBase::run
+24 0
+32 0
+40 (int (*)(...))QtConcurrent::ThreadEngineBase::start
+48 (int (*)(...))QtConcurrent::ThreadEngineBase::finish
+56 (int (*)(...))QtConcurrent::ThreadEngineBase::threadFunction
+64 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldStartThread
+72 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldThrottleThread
+80 (int (*)(...))__cxa_pure_virtual
+
+Class QtConcurrent::ThreadEngineBase
+ size=64 align=8
+ base size=64 base align=8
+QtConcurrent::ThreadEngineBase (0x0x7f89244977b8) 0
+ vptr=((& QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE) + 16)
+QRunnable (0x0x7f891a95fde0) 0
+ primary-for QtConcurrent::ThreadEngineBase (0x0x7f89244977b8)
+
+Class QtConcurrent::BlockSizeManager
+ size=176 align=8
+ base size=172 base align=8
+QtConcurrent::BlockSizeManager (0x0x7f891a96ca20) 0
+
+Class QtPrivate::PushBackWrapper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::PushBackWrapper (0x0x7f891a979720) 0 empty
+
+Class QDBusAbstractAdaptor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractAdaptor::QPrivateSignal (0x0x7f891a9bf660) 0 empty
+
+Vtable for QDBusAbstractAdaptor
+QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDBusAbstractAdaptor)
+16 (int (*)(...))QDBusAbstractAdaptor::metaObject
+24 (int (*)(...))QDBusAbstractAdaptor::qt_metacast
+32 (int (*)(...))QDBusAbstractAdaptor::qt_metacall
+40 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+48 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractAdaptor
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractAdaptor (0x0x7f892449b4e0) 0
+ vptr=((& QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor) + 16)
+QObject (0x0x7f891a9bf600) 0
+ primary-for QDBusAbstractAdaptor (0x0x7f892449b4e0)
+
+Class QDBusError
+ size=64 align=8
+ base size=64 base align=8
+QDBusError (0x0x7f891a9bf7e0) 0
+
+Class QDBusMessage
+ size=8 align=8
+ base size=8 base align=8
+QDBusMessage (0x0x7f891a9d46c0) 0
+
+Class QDBusObjectPath
+ size=24 align=8
+ base size=24 base align=8
+QDBusObjectPath (0x0x7f891a9eaa20) 0
+
+Class QDBusSignature
+ size=24 align=8
+ base size=24 base align=8
+QDBusSignature (0x0x7f891a9fb3c0) 0
+
+Class QDBusVariant
+ size=32 align=8
+ base size=32 base align=8
+QDBusVariant (0x0x7f891aa06e40) 0
+
+Class QDBusConnection
+ size=8 align=8
+ base size=8 base align=8
+QDBusConnection (0x0x7f891aa1a240) 0
+
+Class QDBusPendingCall
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingCall (0x0x7f891aa38f00) 0
+
+Class QDBusPendingCallWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusPendingCallWatcher::QPrivateSignal (0x0x7f891aa61060) 0 empty
+
+Vtable for QDBusPendingCallWatcher
+QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QDBusPendingCallWatcher)
+16 (int (*)(...))QDBusPendingCallWatcher::metaObject
+24 (int (*)(...))QDBusPendingCallWatcher::qt_metacast
+32 (int (*)(...))QDBusPendingCallWatcher::qt_metacall
+40 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+48 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusPendingCallWatcher
+ size=24 align=8
+ base size=24 base align=8
+QDBusPendingCallWatcher (0x0x7f891aa5d380) 0
+ vptr=((& QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher) + 16)
+QObject (0x0x7f891aa5cf60) 0
+ primary-for QDBusPendingCallWatcher (0x0x7f891aa5d380)
+QDBusPendingCall (0x0x7f891aa61000) 16
+
+Vtable for QDBusAbstractInterfaceBase
+QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDBusAbstractInterfaceBase)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QDBusAbstractInterfaceBase::qt_metacall
+40 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+48 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterfaceBase (0x0x7f89245b8dd0) 0
+ vptr=((& QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase) + 16)
+QObject (0x0x7f891aa611e0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f89245b8dd0)
+
+Class QDBusAbstractInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractInterface::QPrivateSignal (0x0x7f891aa61360) 0 empty
+
+Vtable for QDBusAbstractInterface
+QDBusAbstractInterface::_ZTV22QDBusAbstractInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QDBusAbstractInterface)
+16 (int (*)(...))QDBusAbstractInterface::metaObject
+24 (int (*)(...))QDBusAbstractInterface::qt_metacast
+32 (int (*)(...))QDBusAbstractInterface::qt_metacall
+40 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+48 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusAbstractInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterface (0x0x7f89245b8e38) 0
+ vptr=((& QDBusAbstractInterface::_ZTV22QDBusAbstractInterface) + 16)
+QDBusAbstractInterfaceBase (0x0x7f89245b8ea0) 0
+ primary-for QDBusAbstractInterface (0x0x7f89245b8e38)
+QObject (0x0x7f891aa61300) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f89245b8ea0)
+
+Class QDBusArgument
+ size=8 align=8
+ base size=8 base align=8
+QDBusArgument (0x0x7f891aa61720) 0
+
+Class QDBusPendingReplyBase
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingReplyBase (0x0x7f89245c8548) 0
+QDBusPendingCall (0x0x7f891aaa9660) 0
+
+Class QDBusConnectionInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusConnectionInterface::QPrivateSignal (0x0x7f891ab2c720) 0 empty
+
+Vtable for QDBusConnectionInterface
+QDBusConnectionInterface::_ZTV24QDBusConnectionInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QDBusConnectionInterface)
+16 (int (*)(...))QDBusConnectionInterface::metaObject
+24 (int (*)(...))QDBusConnectionInterface::qt_metacast
+32 (int (*)(...))QDBusConnectionInterface::qt_metacall
+40 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+48 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusConnectionInterface::connectNotify
+104 (int (*)(...))QDBusConnectionInterface::disconnectNotify
+
+Class QDBusConnectionInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusConnectionInterface (0x0x7f89245c87b8) 0
+ vptr=((& QDBusConnectionInterface::_ZTV24QDBusConnectionInterface) + 16)
+QDBusAbstractInterface (0x0x7f89245c8820) 0
+ primary-for QDBusConnectionInterface (0x0x7f89245c87b8)
+QDBusAbstractInterfaceBase (0x0x7f89245c8888) 0
+ primary-for QDBusAbstractInterface (0x0x7f89245c8820)
+QObject (0x0x7f891ab2c6c0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f89245c8888)
+
+Class QDBusContext
+ size=8 align=8
+ base size=8 base align=8
+QDBusContext (0x0x7f891ab2cba0) 0
+
+Vtable for QDBusInterface
+QDBusInterface::_ZTV14QDBusInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDBusInterface)
+16 (int (*)(...))QDBusInterface::metaObject
+24 (int (*)(...))QDBusInterface::qt_metacast
+32 (int (*)(...))QDBusInterface::qt_metacall
+40 (int (*)(...))QDBusInterface::~QDBusInterface
+48 (int (*)(...))QDBusInterface::~QDBusInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusInterface (0x0x7f89245c88f0) 0
+ vptr=((& QDBusInterface::_ZTV14QDBusInterface) + 16)
+QDBusAbstractInterface (0x0x7f89245c8958) 0
+ primary-for QDBusInterface (0x0x7f89245c88f0)
+QDBusAbstractInterfaceBase (0x0x7f89245c89c0) 0
+ primary-for QDBusAbstractInterface (0x0x7f89245c8958)
+QObject (0x0x7f891ab2cc00) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f89245c89c0)
+
+Class QDBusMetaType
+ size=1 align=1
+ base size=0 base align=1
+QDBusMetaType (0x0x7f891ab2cd20) 0 empty
+
+Class QDBusServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServer::QPrivateSignal (0x0x7f891ab4d000) 0 empty
+
+Vtable for QDBusServer
+QDBusServer::_ZTV11QDBusServer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDBusServer)
+16 (int (*)(...))QDBusServer::metaObject
+24 (int (*)(...))QDBusServer::qt_metacast
+32 (int (*)(...))QDBusServer::qt_metacall
+40 (int (*)(...))QDBusServer::~QDBusServer
+48 (int (*)(...))QDBusServer::~QDBusServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServer
+ size=24 align=8
+ base size=24 base align=8
+QDBusServer (0x0x7f89245c8a28) 0
+ vptr=((& QDBusServer::_ZTV11QDBusServer) + 16)
+QObject (0x0x7f891ab2cf60) 0
+ primary-for QDBusServer (0x0x7f89245c8a28)
+
+Class QDBusServiceWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServiceWatcher::QPrivateSignal (0x0x7f891ab4d120) 0 empty
+
+Vtable for QDBusServiceWatcher
+QDBusServiceWatcher::_ZTV19QDBusServiceWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDBusServiceWatcher)
+16 (int (*)(...))QDBusServiceWatcher::metaObject
+24 (int (*)(...))QDBusServiceWatcher::qt_metacast
+32 (int (*)(...))QDBusServiceWatcher::qt_metacall
+40 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+48 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServiceWatcher
+ size=16 align=8
+ base size=16 base align=8
+QDBusServiceWatcher (0x0x7f89245c8a90) 0
+ vptr=((& QDBusServiceWatcher::_ZTV19QDBusServiceWatcher) + 16)
+QObject (0x0x7f891ab4d0c0) 0
+ primary-for QDBusServiceWatcher (0x0x7f89245c8a90)
+
+Class QDBusUnixFileDescriptor
+ size=8 align=8
+ base size=8 base align=8
+QDBusUnixFileDescriptor (0x0x7f891ab4d660) 0
+
+Class QDBusVirtualObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusVirtualObject::QPrivateSignal (0x0x7f891a77f2a0) 0 empty
+
+Vtable for QDBusVirtualObject
+QDBusVirtualObject::_ZTV18QDBusVirtualObject: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QDBusVirtualObject)
+16 (int (*)(...))QDBusVirtualObject::metaObject
+24 (int (*)(...))QDBusVirtualObject::qt_metacast
+32 (int (*)(...))QDBusVirtualObject::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 QDBusVirtualObject
+ size=16 align=8
+ base size=16 base align=8
+QDBusVirtualObject (0x0x7f89245d5820) 0
+ vptr=((& QDBusVirtualObject::_ZTV18QDBusVirtualObject) + 16)
+QObject (0x0x7f891a77f240) 0
+ primary-for QDBusVirtualObject (0x0x7f89245d5820)
+
+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 (0x0x7f891a77f360) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f891a77fde0) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f891a7b6d20) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f891a7b6cc0) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f891a7efde0) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f89245f3d00) 0
+QList<QPoint> (0x0x7f89245f3d68) 0
+QListSpecialMethods<QPoint> (0x0x7f89245f3dd0) 0 empty
+QListSpecialMethodsBase<QPoint> (0x0x7f891a82ec00) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f89245fb3a8) 0
+QList<QPointF> (0x0x7f89245fb340) 0
+QListSpecialMethods<QPointF> (0x0x7f89245fb478) 0 empty
+QListSpecialMethodsBase<QPointF> (0x0x7f891a882600) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f891a8bdc00) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f891a8bdba0) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f891a8e6f00) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f891a8e6ea0) 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 (0x0x7f891ecb3b60) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+QPaintDevice (0x0x7f891a906d20) 0
+ primary-for QImage (0x0x7f891ecb3b60)
+
+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 (0x0x7f891e0ac340) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+QPaintDevice (0x0x7f891a94a4e0) 0
+ primary-for QPixmap (0x0x7f891e0ac340)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f891a577300) 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 (0x0x7f891a594480) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f891a594960) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f891a5c3900) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f891a5dba80) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f891a6304e0) 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 (0x0x7f891a5f7138) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+QObject (0x0x7f891a630480) 0
+ primary-for QScreen (0x0x7f891a5f7138)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f891a6306c0) 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 (0x0x7f891a5f71a0) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+QObject (0x0x7f891a630660) 0
+ primary-for QInputDevice (0x0x7f891a5f71a0)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f891a669000) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f891a66fa80) 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 (0x0x7f891a671340) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+QInputDevice (0x0x7f891a6713a8) 0
+ primary-for QPointingDevice (0x0x7f891a671340)
+QObject (0x0x7f891a66fa20) 0
+ primary-for QInputDevice (0x0x7f891a6713a8)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f891a68c120) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f891a6bb180) 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 (0x0x7f891a6de618) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+QEvent (0x0x7f891a6dcf00) 0
+ primary-for QInputEvent (0x0x7f891a6de618)
+
+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 (0x0x7f891a6de680) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+QInputEvent (0x0x7f891a6de6e8) 0
+ primary-for QPointerEvent (0x0x7f891a6de680)
+QEvent (0x0x7f891a6e7420) 0
+ primary-for QInputEvent (0x0x7f891a6de6e8)
+
+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 (0x0x7f891a6de958) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+QPointerEvent (0x0x7f891a6de9c0) 0
+ primary-for QSinglePointEvent (0x0x7f891a6de958)
+QInputEvent (0x0x7f891a6dea28) 0
+ primary-for QPointerEvent (0x0x7f891a6de9c0)
+QEvent (0x0x7f891a6e7f60) 0
+ primary-for QInputEvent (0x0x7f891a6dea28)
+
+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 (0x0x7f891a6dea90) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+QSinglePointEvent (0x0x7f891a6deaf8) 0
+ primary-for QEnterEvent (0x0x7f891a6dea90)
+QPointerEvent (0x0x7f891a6deb60) 0
+ primary-for QSinglePointEvent (0x0x7f891a6deaf8)
+QInputEvent (0x0x7f891a6debc8) 0
+ primary-for QPointerEvent (0x0x7f891a6deb60)
+QEvent (0x0x7f891a728420) 0
+ primary-for QInputEvent (0x0x7f891a6debc8)
+
+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 (0x0x7f891a6dec30) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+QSinglePointEvent (0x0x7f891a6dec98) 0
+ primary-for QMouseEvent (0x0x7f891a6dec30)
+QPointerEvent (0x0x7f891a6ded00) 0
+ primary-for QSinglePointEvent (0x0x7f891a6dec98)
+QInputEvent (0x0x7f891a6ded68) 0
+ primary-for QPointerEvent (0x0x7f891a6ded00)
+QEvent (0x0x7f891a728ba0) 0
+ primary-for QInputEvent (0x0x7f891a6ded68)
+
+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 (0x0x7f891a6dedd0) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+QSinglePointEvent (0x0x7f891a6dee38) 0
+ primary-for QHoverEvent (0x0x7f891a6dedd0)
+QPointerEvent (0x0x7f891a6deea0) 0
+ primary-for QSinglePointEvent (0x0x7f891a6dee38)
+QInputEvent (0x0x7f891a6def08) 0
+ primary-for QPointerEvent (0x0x7f891a6deea0)
+QEvent (0x0x7f891a741180) 0
+ primary-for QInputEvent (0x0x7f891a6def08)
+
+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 (0x0x7f891a6def70) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+QSinglePointEvent (0x0x7f891a6de8f0) 0
+ primary-for QWheelEvent (0x0x7f891a6def70)
+QPointerEvent (0x0x7f891a748000) 0
+ primary-for QSinglePointEvent (0x0x7f891a6de8f0)
+QInputEvent (0x0x7f891a748068) 0
+ primary-for QPointerEvent (0x0x7f891a748000)
+QEvent (0x0x7f891a7415a0) 0
+ primary-for QInputEvent (0x0x7f891a748068)
+
+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 (0x0x7f891a7480d0) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+QSinglePointEvent (0x0x7f891a748138) 0
+ primary-for QTabletEvent (0x0x7f891a7480d0)
+QPointerEvent (0x0x7f891a7481a0) 0
+ primary-for QSinglePointEvent (0x0x7f891a748138)
+QInputEvent (0x0x7f891a748208) 0
+ primary-for QPointerEvent (0x0x7f891a7481a0)
+QEvent (0x0x7f891a741a80) 0
+ primary-for QInputEvent (0x0x7f891a748208)
+
+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 (0x0x7f891a748270) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+QSinglePointEvent (0x0x7f891a7482d8) 0
+ primary-for QNativeGestureEvent (0x0x7f891a748270)
+QPointerEvent (0x0x7f891a748340) 0
+ primary-for QSinglePointEvent (0x0x7f891a7482d8)
+QInputEvent (0x0x7f891a7483a8) 0
+ primary-for QPointerEvent (0x0x7f891a748340)
+QEvent (0x0x7f891a360360) 0
+ primary-for QInputEvent (0x0x7f891a7483a8)
+
+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 (0x0x7f891a748410) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+QInputEvent (0x0x7f891a748478) 0
+ primary-for QKeyEvent (0x0x7f891a748410)
+QEvent (0x0x7f891a360840) 0
+ primary-for QInputEvent (0x0x7f891a748478)
+
+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 (0x0x7f891a7484e0) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+QEvent (0x0x7f891a360e40) 0
+ primary-for QFocusEvent (0x0x7f891a7484e0)
+
+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 (0x0x7f891a748548) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+QEvent (0x0x7f891a37e1e0) 0
+ primary-for QPaintEvent (0x0x7f891a748548)
+
+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 (0x0x7f891a7485b0) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+QEvent (0x0x7f891a37e4e0) 0
+ primary-for QMoveEvent (0x0x7f891a7485b0)
+
+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 (0x0x7f891a748618) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+QEvent (0x0x7f891a37e840) 0
+ primary-for QExposeEvent (0x0x7f891a748618)
+
+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 (0x0x7f891a748680) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+QEvent (0x0x7f891a37eae0) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f891a748680)
+
+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 (0x0x7f891a7486e8) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+QEvent (0x0x7f891a37ede0) 0
+ primary-for QResizeEvent (0x0x7f891a7486e8)
+
+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 (0x0x7f891a748750) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+QEvent (0x0x7f891a39c180) 0
+ primary-for QCloseEvent (0x0x7f891a748750)
+
+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 (0x0x7f891a7487b8) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+QEvent (0x0x7f891a39c1e0) 0
+ primary-for QIconDragEvent (0x0x7f891a7487b8)
+
+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 (0x0x7f891a748820) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+QEvent (0x0x7f891a39c240) 0
+ primary-for QShowEvent (0x0x7f891a748820)
+
+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 (0x0x7f891a748888) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+QEvent (0x0x7f891a39c2a0) 0
+ primary-for QHideEvent (0x0x7f891a748888)
+
+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 (0x0x7f891a7488f0) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+QInputEvent (0x0x7f891a748958) 0
+ primary-for QContextMenuEvent (0x0x7f891a7488f0)
+QEvent (0x0x7f891a39c300) 0
+ primary-for QInputEvent (0x0x7f891a748958)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f891a39c8a0) 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 (0x0x7f891a7489c0) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+QEvent (0x0x7f891a39c840) 0
+ primary-for QInputMethodEvent (0x0x7f891a7489c0)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f891a3eff00) 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 (0x0x7f891a3f99c0) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+QEvent (0x0x7f891a3efea0) 0
+ primary-for QInputMethodQueryEvent (0x0x7f891a3f99c0)
+
+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 (0x0x7f891a441a90) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+QEvent (0x0x7f891a437ea0) 0
+ primary-for QDropEvent (0x0x7f891a441a90)
+
+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 (0x0x7f891a441af8) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+QDropEvent (0x0x7f891a441b60) 0
+ primary-for QDragMoveEvent (0x0x7f891a441af8)
+QEvent (0x0x7f891a44e600) 0
+ primary-for QDropEvent (0x0x7f891a441b60)
+
+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 (0x0x7f891a441bc8) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+QDragMoveEvent (0x0x7f891a441c30) 0
+ primary-for QDragEnterEvent (0x0x7f891a441bc8)
+QDropEvent (0x0x7f891a441c98) 0
+ primary-for QDragMoveEvent (0x0x7f891a441c30)
+QEvent (0x0x7f891a44ea80) 0
+ primary-for QDropEvent (0x0x7f891a441c98)
+
+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 (0x0x7f891a441d00) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+QEvent (0x0x7f891a44eae0) 0
+ primary-for QDragLeaveEvent (0x0x7f891a441d00)
+
+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 (0x0x7f891a441d68) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+QEvent (0x0x7f891a44eb40) 0
+ primary-for QHelpEvent (0x0x7f891a441d68)
+
+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 (0x0x7f891a441dd0) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+QEvent (0x0x7f891a468060) 0
+ primary-for QStatusTipEvent (0x0x7f891a441dd0)
+
+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 (0x0x7f891a441e38) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+QEvent (0x0x7f891a468300) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f891a441e38)
+
+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 (0x0x7f891a441ea0) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+QEvent (0x0x7f891a4685a0) 0
+ primary-for QActionEvent (0x0x7f891a441ea0)
+
+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 (0x0x7f891a441f08) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+QEvent (0x0x7f891a468900) 0
+ primary-for QFileOpenEvent (0x0x7f891a441f08)
+
+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 (0x0x7f891a441f70) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+QEvent (0x0x7f891a468c00) 0
+ primary-for QToolBarChangeEvent (0x0x7f891a441f70)
+
+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 (0x0x7f891a481000) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+QEvent (0x0x7f891a468f00) 0
+ primary-for QShortcutEvent (0x0x7f891a481000)
+
+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 (0x0x7f891a481068) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+QEvent (0x0x7f891a4872a0) 0
+ primary-for QWindowStateChangeEvent (0x0x7f891a481068)
+
+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 (0x0x7f891a4810d0) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+QPointerEvent (0x0x7f891a481138) 0
+ primary-for QTouchEvent (0x0x7f891a4810d0)
+QInputEvent (0x0x7f891a4811a0) 0
+ primary-for QPointerEvent (0x0x7f891a481138)
+QEvent (0x0x7f891a4875a0) 0
+ primary-for QInputEvent (0x0x7f891a4811a0)
+
+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 (0x0x7f891a481208) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+QEvent (0x0x7f891a487900) 0
+ primary-for QScrollPrepareEvent (0x0x7f891a481208)
+
+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 (0x0x7f891a481270) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+QEvent (0x0x7f891a487d20) 0
+ primary-for QScrollEvent (0x0x7f891a481270)
+
+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 (0x0x7f891a4812d8) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+QEvent (0x0x7f891a4a6120) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f891a4812d8)
+
+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 (0x0x7f891a481340) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+QEvent (0x0x7f891a4a6480) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f891a481340)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f891a4a6780) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f891a4f9a20) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f891a4f9c00) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f891a53ede0) 0
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f891a1827e0) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f891a1ac5a0) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f891a1ac7e0) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f891a1ac780) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f891a1adb60) 0
+QGradient (0x0x7f891a1d35a0) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f891a1adbc8) 0
+QGradient (0x0x7f891a1d36c0) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f891a1adc30) 0
+QGradient (0x0x7f891a1d37e0) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f891a1d38a0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f891a228960) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f891a228900) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f891a2426c0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f891a26d540) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f891a2e6c98) 0
+QTextFormat (0x0x7f891a2e1d80) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f891a342d68) 0
+QTextFormat (0x0x7f891a34d480) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f8919f7bea0) 0
+QTextFormat (0x0x7f8919f7cd80) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f8919fa8f70) 0
+QTextCharFormat (0x0x7f8919fbe000) 0
+QTextFormat (0x0x7f8919fbd060) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f8919fe5138) 0
+QTextFormat (0x0x7f8919fe62a0) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f891a018270) 0
+QTextFrameFormat (0x0x7f891a0182d8) 0
+QTextFormat (0x0x7f891a014a80) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f891a04c410) 0
+QTextCharFormat (0x0x7f891a04c478) 0
+QTextFormat (0x0x7f891a053120) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f891a083780) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f891a0fe060) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f891a0fe480) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f891a0fe420) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f8919d72720) 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 (0x0x7f8919d72ba0) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f8919d72e40) 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 (0x0x7f8919d7d068) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+QObject (0x0x7f8919d72de0) 0
+ primary-for QTextDocument (0x0x7f8919d7d068)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f8919db1660) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f8919e4f480) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f8919e4f4e0) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f8919e4f540) 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 (0x0x7f8919e4d5b0) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+QObject (0x0x7f8919e4f420) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f8919e4d5b0)
+
+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 (0x0x7f8919ee4f00) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f8919f02180) 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 (0x0x7f8919f021e0) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f8919f02120) 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 (0x0x7f8919f02a20) 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 (0x0x7f8919f02d80) 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 (0x0x7f8919f02de0) 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 (0x0x7f8919f02e40) 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 (0x0x7f8919f02ea0) 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 (0x0x7f8919f02f00) 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 (0x0x7f8919f02f60) 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 (0x0x7f8919b57060) 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 (0x0x7f8919b570c0) 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 (0x0x7f8919ef7478) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+QAccessibleEvent (0x0x7f8919b57600) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f8919ef7478)
+
+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 (0x0x7f8919ef74e0) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+QAccessibleEvent (0x0x7f8919b579c0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f8919ef74e0)
+
+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 (0x0x7f8919ef7548) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f8919ef75b0) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f8919ef7548)
+QAccessibleEvent (0x0x7f8919b57de0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f8919ef75b0)
+
+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 (0x0x7f8919ef7618) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f8919ef7680) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f8919ef7618)
+QAccessibleEvent (0x0x7f8919b782a0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f8919ef7680)
+
+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 (0x0x7f8919ef76e8) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f8919ef7750) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f8919ef76e8)
+QAccessibleEvent (0x0x7f8919b786c0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f8919ef7750)
+
+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 (0x0x7f8919ef77b8) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f8919ef7820) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f8919ef77b8)
+QAccessibleEvent (0x0x7f8919b78ae0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f8919ef7820)
+
+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 (0x0x7f8919ef7888) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+QAccessibleEvent (0x0x7f8919b78f60) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f8919ef7888)
+
+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 (0x0x7f8919ef78f0) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+QAccessibleEvent (0x0x7f8919b923c0) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f8919ef78f0)
+
+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 (0x0x7f8919b92c60) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f8919b92f00) 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 (0x0x7f8919ef7958) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+QObject (0x0x7f8919b92ea0) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f8919ef7958)
+
+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 (0x0x7f8919ef79c0) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+QAccessibleInterface (0x0x7f8919baa000) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f8919ef79c0)
+
+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 (0x0x7f8919ef7a28) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+QAccessibleObject (0x0x7f8919ef7a90) 0
+ primary-for QAccessibleApplication (0x0x7f8919ef7a28)
+QAccessibleInterface (0x0x7f8919baa060) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f8919ef7a90)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f8919baa120) 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 (0x0x7f8919ef7af8) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+QObject (0x0x7f8919baa0c0) 0
+ primary-for QAccessiblePlugin (0x0x7f8919ef7af8)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f8919baa240) 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 (0x0x7f8919ef7b60) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+QObject (0x0x7f8919baa1e0) 0
+ primary-for QAction (0x0x7f8919ef7b60)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f8919baab40) 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 (0x0x7f8919ef7bc8) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+QObject (0x0x7f8919baaae0) 0
+ primary-for QActionGroup (0x0x7f8919ef7bc8)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f8919baade0) 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 (0x0x7f8919c04660) 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 (0x0x7f8919ef7d00) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+QPixmap (0x0x7f8919ef7d68) 0
+ primary-for QBitmap (0x0x7f8919ef7d00)
+QPaintDevice (0x0x7f8919c04960) 0
+ primary-for QPixmap (0x0x7f8919ef7d68)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f8919c494e0) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f8919c946c0) 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 (0x0x7f8919c23e70) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+QObject (0x0x7f8919c94600) 0
+ primary-for QWindow (0x0x7f8919c23e70)
+QSurface (0x0x7f8919c94660) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f8919c94f00) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f8919ce0060) 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 (0x0x7f8919c96c30) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+QObject (0x0x7f8919ce0000) 0
+ primary-for QClipboard (0x0x7f8919c96c30)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f8919ce0180) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f8919d37480) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f891999a360) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f891999a420) 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 (0x0x7f89199994e0) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+QObject (0x0x7f891999a3c0) 0
+ primary-for QDrag (0x0x7f89199994e0)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f891999a600) 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 (0x0x7f8919999548) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+QAbstractItemModel (0x0x7f89199995b0) 0
+ primary-for QFileSystemModel (0x0x7f8919999548)
+QObject (0x0x7f891999a5a0) 0
+ primary-for QAbstractItemModel (0x0x7f89199995b0)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f891999ac00) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f8919a00780) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f8919a3b420) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f8919ae4360) 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 (0x0x7f8919a72f08) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+QObject (0x0x7f8919ae4300) 0
+ primary-for QGenericPlugin (0x0x7f8919a72f08)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f8919ae4420) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f8919ae44e0) 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 (0x0x7f8919a72f70) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+QObject (0x0x7f8919ae4480) 0
+ primary-for QInputMethod (0x0x7f8919a72f70)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f8919ae4780) 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 (0x0x7f8919afe000) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+QCoreApplication (0x0x7f8919afe068) 0
+ primary-for QGuiApplication (0x0x7f8919afe000)
+QObject (0x0x7f8919ae4720) 0
+ primary-for QCoreApplication (0x0x7f8919afe068)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f8919ae4a20) 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 (0x0x7f8919ae49c0) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f8919ae4ae0) 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 (0x0x7f8919afe0d0) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+QObject (0x0x7f8919ae4a80) 0
+ primary-for QIconEnginePlugin (0x0x7f8919afe0d0)
+
+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 (0x0x7f8919ae4ba0) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f8919ae4de0) 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 (0x0x7f8919afe138) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+QObject (0x0x7f8919ae4d80) 0
+ primary-for QImageIOPlugin (0x0x7f8919afe138)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f8919b3f1e0) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f8919b3f2a0) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f8919b3f360) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f89197ce240) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f8919867900) 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 (0x0x7f8919830618) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+QObject (0x0x7f89198678a0) 0
+ primary-for QMovie (0x0x7f8919830618)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f8919867cc0) 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 (0x0x7f8919863e70) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+QObject (0x0x7f8919867c00) 0
+ primary-for QOffscreenSurface (0x0x7f8919863e70)
+QSurface (0x0x7f8919867c60) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f8919867f00) 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 (0x0x7f8919830680) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+QObject (0x0x7f8919867ea0) 0
+ primary-for QOpenGLContextGroup (0x0x7f8919830680)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f891939e120) 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 (0x0x7f89198306e8) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+QObject (0x0x7f891939e0c0) 0
+ primary-for QOpenGLContext (0x0x7f89198306e8)
+
+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 (0x0x7f891939e2a0) 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 (0x0x7f891939e300) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f891939e360) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f891939e900) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f891939e8a0) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f8919830a90) 0
+QOpenGLFunctions (0x0x7f89194950c0) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f8919495420) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f8919830af8) 0
+QOpenGLFunctionsPrivate (0x0x7f89194953c0) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f89191c8ea0) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f891924ec60) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f89192c6b40) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f89192c6ae0) 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 (0x0x7f8918f6c3a8) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+QPaintDevice (0x0x7f8918f77000) 0
+ primary-for QPagedPaintDevice (0x0x7f8918f6c3a8)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f8918f77180) 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 (0x0x7f8919315e70) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+QWindow (0x0x7f8919315ee0) 0
+ primary-for QPaintDeviceWindow (0x0x7f8919315e70)
+QObject (0x0x7f8918f77060) 0
+ primary-for QWindow (0x0x7f8919315ee0)
+QSurface (0x0x7f8918f770c0) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+QPaintDevice (0x0x7f8918f77120) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f8918f77360) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f8918f77300) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f8918ddef60) 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 (0x0x7f8918e2f9c0) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f8918e82000) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f8918e82a80) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f8918e82a20) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f8918b840c0) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f8918b848a0) 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 (0x0x7f8918ba8150) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+QObject (0x0x7f8918b847e0) 0
+ primary-for QPdfWriter (0x0x7f8918ba8150)
+QPagedPaintDevice (0x0x7f8918b7e4e0) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+QPaintDevice (0x0x7f8918b84840) 16
+ primary-for QPagedPaintDevice (0x0x7f8918b7e4e0)
+
+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 (0x0x7f8918b7e548) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+QPaintDevice (0x0x7f8918b84a80) 0
+ primary-for QPicture (0x0x7f8918b7e548)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f8918c017e0) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f8918c01780) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f8918c6b9c0) 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 (0x0x7f8918c65c98) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+QPaintDeviceWindow (0x0x7f8918c34bd0) 0
+ primary-for QRasterWindow (0x0x7f8918c65c98)
+QWindow (0x0x7f8918c34c40) 0
+ primary-for QPaintDeviceWindow (0x0x7f8918c34bd0)
+QObject (0x0x7f8918c6b8a0) 0
+ primary-for QWindow (0x0x7f8918c34c40)
+QSurface (0x0x7f8918c6b900) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+QPaintDevice (0x0x7f8918c6b960) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f8918c6bba0) 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 (0x0x7f8918c65d68) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+QObject (0x0x7f8918c6bb40) 0
+ primary-for QSessionManager (0x0x7f8918c65d68)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f8918c6bd80) 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 (0x0x7f8918c65dd0) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+QObject (0x0x7f8918c6bd20) 0
+ primary-for QShortcut (0x0x7f8918c65dd0)
+
+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 (0x0x7f8918cbd2a0) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f891898a180) 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 (0x0x7f8918d26548) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+QAbstractItemModel (0x0x7f8918d265b0) 0
+ primary-for QStandardItemModel (0x0x7f8918d26548)
+QObject (0x0x7f891898a120) 0
+ primary-for QAbstractItemModel (0x0x7f8918d265b0)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f891898a4e0) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f8918a45060) 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 (0x0x7f8918a35a28) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+QObject (0x0x7f8918a45000) 0
+ primary-for QStyleHints (0x0x7f8918a35a28)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f8918a45240) 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 (0x0x7f8918a35a90) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+QObject (0x0x7f8918a451e0) 0
+ primary-for QTextObject (0x0x7f8918a35a90)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f8918a45420) 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 (0x0x7f8918a35af8) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+QTextObject (0x0x7f8918a35b60) 0
+ primary-for QTextBlockGroup (0x0x7f8918a35af8)
+QObject (0x0x7f8918a453c0) 0
+ primary-for QTextObject (0x0x7f8918a35b60)
+
+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 (0x0x7f8918a455a0) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f8918a45660) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f8918a456c0) 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 (0x0x7f8918a35bc8) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+QTextObject (0x0x7f8918a35c30) 0
+ primary-for QTextFrame (0x0x7f8918a35bc8)
+QObject (0x0x7f8918a45600) 0
+ primary-for QTextObject (0x0x7f8918a35c30)
+
+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 (0x0x7f8918abd660) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f8918abd720) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f8918abd6c0) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f8918b55300) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f89187983c0) 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 (0x0x7f8918794a28) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+QObject (0x0x7f8918798360) 0
+ primary-for QSyntaxHighlighter (0x0x7f8918794a28)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f8918798540) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f89187985a0) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f8918798660) 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 (0x0x7f8918794a90) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+QTextBlockGroup (0x0x7f8918794af8) 0
+ primary-for QTextList (0x0x7f8918794a90)
+QTextObject (0x0x7f8918794b60) 0
+ primary-for QTextBlockGroup (0x0x7f8918794af8)
+QObject (0x0x7f8918798600) 0
+ primary-for QTextObject (0x0x7f8918794b60)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f8918798a20) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f89187dc2a0) 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 (0x0x7f8918794bc8) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+QTextFrame (0x0x7f8918794c30) 0
+ primary-for QTextTable (0x0x7f8918794bc8)
+QTextObject (0x0x7f8918794c98) 0
+ primary-for QTextFrame (0x0x7f8918794c30)
+QObject (0x0x7f89187dc240) 0
+ primary-for QTextObject (0x0x7f8918794c98)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f89187dc660) 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 (0x0x7f8918794d00) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+QObject (0x0x7f89187dc600) 0
+ primary-for QUndoGroup (0x0x7f8918794d00)
+
+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 (0x0x7f89187dc7e0) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f89187dc8a0) 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 (0x0x7f8918794d68) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+QObject (0x0x7f89187dc840) 0
+ primary-for QUndoStack (0x0x7f8918794d68)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f89187dca80) 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 (0x0x7f8918794dd0) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+QObject (0x0x7f89187dca20) 0
+ primary-for QValidator (0x0x7f8918794dd0)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f89187dcd20) 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 (0x0x7f8918794e38) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+QValidator (0x0x7f8918794ea0) 0
+ primary-for QIntValidator (0x0x7f8918794e38)
+QObject (0x0x7f89187dccc0) 0
+ primary-for QValidator (0x0x7f8918794ea0)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f89187dcf00) 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 (0x0x7f8918794f08) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+QValidator (0x0x7f8918794f70) 0
+ primary-for QDoubleValidator (0x0x7f8918794f08)
+QObject (0x0x7f89187dcea0) 0
+ primary-for QValidator (0x0x7f8918794f70)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f8918846300) 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 (0x0x7f891884a000) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+QValidator (0x0x7f891884a068) 0
+ primary-for QRegularExpressionValidator (0x0x7f891884a000)
+QObject (0x0x7f89188462a0) 0
+ primary-for QValidator (0x0x7f891884a068)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f89188464e0) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f8918846480) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f89188ed5a0) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f89188ed6c0) 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 (0x0x7f89188b2b60) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+QObject (0x0x7f89188ed600) 0
+ primary-for QWidget (0x0x7f89188b2b60)
+QPaintDevice (0x0x7f89188ed660) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f89185b7f60) 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 (0x0x7f89188f05b0) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+QWidget (0x0x7f89185ca4d0) 0
+ primary-for QAbstractButton (0x0x7f89188f05b0)
+QObject (0x0x7f89185b7ea0) 0
+ primary-for QWidget (0x0x7f89185ca4d0)
+QPaintDevice (0x0x7f89185b7f00) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f89185f21e0) 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 (0x0x7f89188f0618) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+QWidget (0x0x7f89185ca690) 0
+ primary-for QAbstractSpinBox (0x0x7f89188f0618)
+QObject (0x0x7f89185f2120) 0
+ primary-for QWidget (0x0x7f89185ca690)
+QPaintDevice (0x0x7f89185f2180) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f89185f2960) 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 (0x0x7f89188f0750) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+QWidget (0x0x7f891863a0e0) 0
+ primary-for QAbstractSlider (0x0x7f89188f0750)
+QObject (0x0x7f89185f28a0) 0
+ primary-for QWidget (0x0x7f891863a0e0)
+QPaintDevice (0x0x7f89185f2900) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f89185f2ba0) 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 (0x0x7f89188f07b8) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+QAbstractSlider (0x0x7f89188f0820) 0
+ primary-for QSlider (0x0x7f89188f07b8)
+QWidget (0x0x7f891863a7e0) 0
+ primary-for QAbstractSlider (0x0x7f89188f0820)
+QObject (0x0x7f89185f2ae0) 0
+ primary-for QWidget (0x0x7f891863a7e0)
+QPaintDevice (0x0x7f89185f2b40) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f89185f2e40) 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 (0x0x7f89188f0888) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+QObject (0x0x7f89185f2de0) 0
+ primary-for QStyle (0x0x7f89188f0888)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f89186c7f00) 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 (0x0x7f89188f0a90) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+QWidget (0x0x7f89186e42a0) 0
+ primary-for QTabBar (0x0x7f89188f0a90)
+QObject (0x0x7f89186c7e40) 0
+ primary-for QWidget (0x0x7f89186e42a0)
+QPaintDevice (0x0x7f89186c7ea0) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f891835a240) 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 (0x0x7f89188f0af8) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+QWidget (0x0x7f89186e4af0) 0
+ primary-for QTabWidget (0x0x7f89188f0af8)
+QObject (0x0x7f891835a180) 0
+ primary-for QWidget (0x0x7f89186e4af0)
+QPaintDevice (0x0x7f891835a1e0) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f891835a600) 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 (0x0x7f89188f0b60) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+QWidget (0x0x7f891837e1c0) 0
+ primary-for QRubberBand (0x0x7f89188f0b60)
+QObject (0x0x7f891835a540) 0
+ primary-for QWidget (0x0x7f891837e1c0)
+QPaintDevice (0x0x7f891835a5a0) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f891835aa20) 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 (0x0x7f89188f0bc8) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+QWidget (0x0x7f891837e690) 0
+ primary-for QFrame (0x0x7f89188f0bc8)
+QObject (0x0x7f891835a960) 0
+ primary-for QWidget (0x0x7f891837e690)
+QPaintDevice (0x0x7f891835a9c0) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f891835ad20) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f89188f0c30) 0
+QStyleOption (0x0x7f891835ad80) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f89245dc0d0) 0
+QStyleOption (0x0x7f89183c6000) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f89245dc208) 0
+QStyleOption (0x0x7f89183c6540) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f89245dc270) 0
+QStyleOption (0x0x7f89183c6780) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f89188f0c98) 0
+QStyleOption (0x0x7f89183c69c0) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f89188f0d00) 0
+QStyleOption (0x0x7f89183c6c00) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f89188f0e38) 0
+QStyleOption (0x0x7f8918443180) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f891847d068) 0
+QStyleOption (0x0x7f89184438a0) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f891847d1a0) 0
+QStyleOption (0x0x7f8918443de0) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f891847d208) 0
+QStyleOption (0x0x7f89184fe060) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f891847d270) 0
+QStyleOption (0x0x7f89184fe2a0) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f891847d2d8) 0
+QStyleOption (0x0x7f89184fe4e0) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f891847d410) 0
+QStyleOption (0x0x7f89184fea20) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f891847d478) 0
+QStyleOption (0x0x7f89184fec60) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f891847d4e0) 0
+QStyleOption (0x0x7f89184fef00) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f891847d548) 0
+QStyleOptionComplex (0x0x7f891847d5b0) 0
+QStyleOption (0x0x7f89181721e0) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f891847d680) 0
+QStyleOptionComplex (0x0x7f891847d6e8) 0
+QStyleOption (0x0x7f89181725a0) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f891847d7b8) 0
+QStyleOptionComplex (0x0x7f891847d820) 0
+QStyleOption (0x0x7f89181727e0) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f891847d958) 0
+QStyleOptionComplex (0x0x7f891847d9c0) 0
+QStyleOption (0x0x7f8918172d20) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f891847da28) 0
+QStyleOptionComplex (0x0x7f891847da90) 0
+QStyleOption (0x0x7f8918172f60) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f891847daf8) 0
+QStyleOptionComplex (0x0x7f891847db60) 0
+QStyleOption (0x0x7f89181dc180) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f891847dbc8) 0
+QStyleOptionComplex (0x0x7f891847dc30) 0
+QStyleOption (0x0x7f89181dc3c0) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f891847dc98) 0
+QStyleOption (0x0x7f89181dc600) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f89181dc960) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f891847dd00) 0
+QStyleHintReturn (0x0x7f89181dc9c0) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f891847ddd0) 0
+QStyleHintReturn (0x0x7f89181dca20) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f89181dcba0) 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 (0x0x7f891847dea0) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+QObject (0x0x7f89181dcb40) 0
+ primary-for QAbstractItemDelegate (0x0x7f891847dea0)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f89181dcde0) 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 (0x0x7f891847df08) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+QFrame (0x0x7f891847df70) 0
+ primary-for QAbstractScrollArea (0x0x7f891847df08)
+QWidget (0x0x7f891821a150) 0
+ primary-for QFrame (0x0x7f891847df70)
+QObject (0x0x7f89181dcd20) 0
+ primary-for QWidget (0x0x7f891821a150)
+QPaintDevice (0x0x7f89181dcd80) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f891823a120) 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 (0x0x7f891847d618) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+QAbstractScrollArea (0x0x7f891823c000) 0
+ primary-for QAbstractItemView (0x0x7f891847d618)
+QFrame (0x0x7f891823c068) 0
+ primary-for QAbstractScrollArea (0x0x7f891823c000)
+QWidget (0x0x7f891821a540) 0
+ primary-for QFrame (0x0x7f891823c068)
+QObject (0x0x7f891823a060) 0
+ primary-for QWidget (0x0x7f891821a540)
+QPaintDevice (0x0x7f891823a0c0) 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 (0x0x7f89182992a0) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+QAccessibleObject (0x0x7f891823c1a0) 0
+ primary-for QAccessibleWidget (0x0x7f89182992a0)
+QAccessibleInterface (0x0x7f891823aa80) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f891823c1a0)
+QAccessibleActionInterface (0x0x7f891823aae0) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f891823ac00) 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 (0x0x7f891823c208) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+QGuiApplication (0x0x7f891823c270) 0
+ primary-for QApplication (0x0x7f891823c208)
+QCoreApplication (0x0x7f891823c2d8) 0
+ primary-for QGuiApplication (0x0x7f891823c270)
+QObject (0x0x7f891823aba0) 0
+ primary-for QCoreApplication (0x0x7f891823c2d8)
+
+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 (0x0x7f891823ae40) 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 (0x0x7f891823c340) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+QLayoutItem (0x0x7f89182eb0c0) 0
+ primary-for QSpacerItem (0x0x7f891823c340)
+
+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 (0x0x7f891823c3a8) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+QLayoutItem (0x0x7f89182eb300) 0
+ primary-for QWidgetItem (0x0x7f891823c3a8)
+
+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 (0x0x7f891823c410) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+QWidgetItem (0x0x7f891823c478) 0
+ primary-for QWidgetItemV2 (0x0x7f891823c410)
+QLayoutItem (0x0x7f89182eb4e0) 0
+ primary-for QWidgetItem (0x0x7f891823c478)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f89182eb660) 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 (0x0x7f8918299b60) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+QObject (0x0x7f89182eb5a0) 0
+ primary-for QLayout (0x0x7f8918299b60)
+QLayoutItem (0x0x7f89182eb600) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f89182eb960) 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 (0x0x7f891823c4e0) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+QLayout (0x0x7f891832c0e0) 0
+ primary-for QGridLayout (0x0x7f891823c4e0)
+QObject (0x0x7f89182eb8a0) 0
+ primary-for QLayout (0x0x7f891832c0e0)
+QLayoutItem (0x0x7f89182eb900) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f89182ebc00) 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 (0x0x7f891823c548) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+QLayout (0x0x7f891832c310) 0
+ primary-for QBoxLayout (0x0x7f891823c548)
+QObject (0x0x7f89182ebb40) 0
+ primary-for QLayout (0x0x7f891832c310)
+QLayoutItem (0x0x7f89182ebba0) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f89182ebe40) 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 (0x0x7f891823c5b0) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+QBoxLayout (0x0x7f891823c618) 0
+ primary-for QHBoxLayout (0x0x7f891823c5b0)
+QLayout (0x0x7f891832c770) 0
+ primary-for QBoxLayout (0x0x7f891823c618)
+QObject (0x0x7f89182ebd80) 0
+ primary-for QLayout (0x0x7f891832c770)
+QLayoutItem (0x0x7f89182ebde0) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f8917f71000) 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 (0x0x7f891823c680) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+QBoxLayout (0x0x7f891823c6e8) 0
+ primary-for QVBoxLayout (0x0x7f891823c680)
+QLayout (0x0x7f891832c850) 0
+ primary-for QBoxLayout (0x0x7f891823c6e8)
+QObject (0x0x7f89182ebf00) 0
+ primary-for QLayout (0x0x7f891832c850)
+QLayoutItem (0x0x7f89182ebf60) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f8917f71120) 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 (0x0x7f891823c750) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+QObject (0x0x7f8917f710c0) 0
+ primary-for QButtonGroup (0x0x7f891823c750)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f8917f71360) 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 (0x0x7f891823c7b8) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+QWidget (0x0x7f891832ca80) 0
+ primary-for QCalendarWidget (0x0x7f891823c7b8)
+QObject (0x0x7f8917f712a0) 0
+ primary-for QWidget (0x0x7f891832ca80)
+QPaintDevice (0x0x7f8917f71300) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f8917f717e0) 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 (0x0x7f891823c820) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+QAbstractButton (0x0x7f891823c888) 0
+ primary-for QCheckBox (0x0x7f891823c820)
+QWidget (0x0x7f8917fa92a0) 0
+ primary-for QAbstractButton (0x0x7f891823c888)
+QObject (0x0x7f8917f71720) 0
+ primary-for QWidget (0x0x7f8917fa92a0)
+QPaintDevice (0x0x7f8917f71780) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f8917f71a20) 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 (0x0x7f891823c8f0) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+QWidget (0x0x7f8917fa9460) 0
+ primary-for QDialog (0x0x7f891823c8f0)
+QObject (0x0x7f8917f71960) 0
+ primary-for QWidget (0x0x7f8917fa9460)
+QPaintDevice (0x0x7f8917f719c0) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f8917f71c60) 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 (0x0x7f891823c958) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+QDialog (0x0x7f891823c9c0) 0
+ primary-for QColorDialog (0x0x7f891823c958)
+QWidget (0x0x7f8917fa9700) 0
+ primary-for QDialog (0x0x7f891823c9c0)
+QObject (0x0x7f8917f71ba0) 0
+ primary-for QWidget (0x0x7f8917fa9700)
+QPaintDevice (0x0x7f8917f71c00) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f89180041e0) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f8918004300) 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 (0x0x7f891823caf8) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+QAbstractItemView (0x0x7f891823cb60) 0
+ primary-for QColumnView (0x0x7f891823caf8)
+QAbstractScrollArea (0x0x7f891823cbc8) 0
+ primary-for QAbstractItemView (0x0x7f891823cb60)
+QFrame (0x0x7f891823cc30) 0
+ primary-for QAbstractScrollArea (0x0x7f891823cbc8)
+QWidget (0x0x7f8917fa9d90) 0
+ primary-for QFrame (0x0x7f891823cc30)
+QObject (0x0x7f8918004240) 0
+ primary-for QWidget (0x0x7f8917fa9d90)
+QPaintDevice (0x0x7f89180042a0) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f8918004540) 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 (0x0x7f891823cc98) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+QWidget (0x0x7f8917fa9f50) 0
+ primary-for QComboBox (0x0x7f891823cc98)
+QObject (0x0x7f8918004480) 0
+ primary-for QWidget (0x0x7f8917fa9f50)
+QPaintDevice (0x0x7f89180044e0) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f8918004ae0) 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 (0x0x7f891823cd00) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+QAbstractButton (0x0x7f891823cd68) 0
+ primary-for QPushButton (0x0x7f891823cd00)
+QWidget (0x0x7f891804a9a0) 0
+ primary-for QAbstractButton (0x0x7f891823cd68)
+QObject (0x0x7f8918004a20) 0
+ primary-for QWidget (0x0x7f891804a9a0)
+QPaintDevice (0x0x7f8918004a80) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f8918004d20) 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 (0x0x7f891823cdd0) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+QPushButton (0x0x7f891823ce38) 0
+ primary-for QCommandLinkButton (0x0x7f891823cdd0)
+QAbstractButton (0x0x7f891823cea0) 0
+ primary-for QPushButton (0x0x7f891823ce38)
+QWidget (0x0x7f891804ab60) 0
+ primary-for QAbstractButton (0x0x7f891823cea0)
+QObject (0x0x7f8918004c60) 0
+ primary-for QWidget (0x0x7f891804ab60)
+QPaintDevice (0x0x7f8918004cc0) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f8918004f00) 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 (0x0x7f891823cf08) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+QStyle (0x0x7f891823cf70) 0
+ primary-for QCommonStyle (0x0x7f891823cf08)
+QObject (0x0x7f8918004ea0) 0
+ primary-for QStyle (0x0x7f891823cf70)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f89180b6120) 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 (0x0x7f89180b7000) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+QObject (0x0x7f89180b60c0) 0
+ primary-for QCompleter (0x0x7f89180b7000)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f89180b6480) 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 (0x0x7f89180b7068) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+QObject (0x0x7f89180b6420) 0
+ primary-for QDataWidgetMapper (0x0x7f89180b7068)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f89180b6780) 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 (0x0x7f89180b70d0) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+QAbstractSpinBox (0x0x7f89180b7138) 0
+ primary-for QDateTimeEdit (0x0x7f89180b70d0)
+QWidget (0x0x7f89180bd770) 0
+ primary-for QAbstractSpinBox (0x0x7f89180b7138)
+QObject (0x0x7f89180b66c0) 0
+ primary-for QWidget (0x0x7f89180bd770)
+QPaintDevice (0x0x7f89180b6720) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f89180b6d20) 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 (0x0x7f89180b7270) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+QDateTimeEdit (0x0x7f89180b72d8) 0
+ primary-for QTimeEdit (0x0x7f89180b7270)
+QAbstractSpinBox (0x0x7f89180b7340) 0
+ primary-for QDateTimeEdit (0x0x7f89180b72d8)
+QWidget (0x0x7f8918127000) 0
+ primary-for QAbstractSpinBox (0x0x7f89180b7340)
+QObject (0x0x7f89180b6c60) 0
+ primary-for QWidget (0x0x7f8918127000)
+QPaintDevice (0x0x7f89180b6cc0) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f89180b6ea0) 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 (0x0x7f89180b73a8) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+QDateTimeEdit (0x0x7f89180b7410) 0
+ primary-for QDateEdit (0x0x7f89180b73a8)
+QAbstractSpinBox (0x0x7f89180b7478) 0
+ primary-for QDateTimeEdit (0x0x7f89180b7410)
+QWidget (0x0x7f89181270e0) 0
+ primary-for QAbstractSpinBox (0x0x7f89180b7478)
+QObject (0x0x7f89180b6de0) 0
+ primary-for QWidget (0x0x7f89181270e0)
+QPaintDevice (0x0x7f89180b6e40) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f8918155180) 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 (0x0x7f89180b74e0) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+QAbstractSlider (0x0x7f89180b7548) 0
+ primary-for QDial (0x0x7f89180b74e0)
+QWidget (0x0x7f8918127310) 0
+ primary-for QAbstractSlider (0x0x7f89180b7548)
+QObject (0x0x7f89181550c0) 0
+ primary-for QWidget (0x0x7f8918127310)
+QPaintDevice (0x0x7f8918155120) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f89181553c0) 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 (0x0x7f89180b75b0) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+QWidget (0x0x7f89181274d0) 0
+ primary-for QDialogButtonBox (0x0x7f89180b75b0)
+QObject (0x0x7f8918155300) 0
+ primary-for QWidget (0x0x7f89181274d0)
+QPaintDevice (0x0x7f8918155360) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f89181559c0) 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 (0x0x7f89180b76e8) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+QWidget (0x0x7f8917d75930) 0
+ primary-for QDockWidget (0x0x7f89180b76e8)
+QObject (0x0x7f8918155900) 0
+ primary-for QWidget (0x0x7f8917d75930)
+QPaintDevice (0x0x7f8918155960) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f8917e18000) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f8917e18660) 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 (0x0x7f89180b78f0) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+QDialog (0x0x7f89180b7958) 0
+ primary-for QErrorMessage (0x0x7f89180b78f0)
+QWidget (0x0x7f8917defaf0) 0
+ primary-for QDialog (0x0x7f89180b7958)
+QObject (0x0x7f8917e185a0) 0
+ primary-for QWidget (0x0x7f8917defaf0)
+QPaintDevice (0x0x7f8917e18600) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f8917e188a0) 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 (0x0x7f89180b79c0) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+QDialog (0x0x7f89180b7a28) 0
+ primary-for QFileDialog (0x0x7f89180b79c0)
+QWidget (0x0x7f8917defcb0) 0
+ primary-for QDialog (0x0x7f89180b7a28)
+QObject (0x0x7f8917e187e0) 0
+ primary-for QWidget (0x0x7f8917defcb0)
+QPaintDevice (0x0x7f8917e18840) 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 (0x0x7f89180b7b60) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+QAbstractFileIconProvider (0x0x7f8917e9c180) 0
+ primary-for QFileIconProvider (0x0x7f89180b7b60)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f8917e9c360) 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 (0x0x7f89180b7bc8) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+QWidget (0x0x7f8917e4be70) 0
+ primary-for QFocusFrame (0x0x7f89180b7bc8)
+QObject (0x0x7f8917e9c2a0) 0
+ primary-for QWidget (0x0x7f8917e4be70)
+QPaintDevice (0x0x7f8917e9c300) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f8917e9c5a0) 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 (0x0x7f89180b7c30) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+QComboBox (0x0x7f89180b7c98) 0
+ primary-for QFontComboBox (0x0x7f89180b7c30)
+QWidget (0x0x7f8917ed1070) 0
+ primary-for QComboBox (0x0x7f89180b7c98)
+QObject (0x0x7f8917e9c4e0) 0
+ primary-for QWidget (0x0x7f8917ed1070)
+QPaintDevice (0x0x7f8917e9c540) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f8917e9cba0) 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 (0x0x7f89180b7dd0) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+QDialog (0x0x7f89180b7e38) 0
+ primary-for QFontDialog (0x0x7f89180b7dd0)
+QWidget (0x0x7f8917ed1690) 0
+ primary-for QDialog (0x0x7f89180b7e38)
+QObject (0x0x7f8917e9cae0) 0
+ primary-for QWidget (0x0x7f8917ed1690)
+QPaintDevice (0x0x7f8917e9cb40) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f8917f4f1e0) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f8917f4f240) 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 (0x0x7f89180b7f70) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+QLayout (0x0x7f8917ed1d20) 0
+ primary-for QFormLayout (0x0x7f89180b7f70)
+QObject (0x0x7f8917f4f120) 0
+ primary-for QLayout (0x0x7f8917ed1d20)
+QLayoutItem (0x0x7f8917f4f180) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f8917ba8f60) 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 (0x0x7f8917baeea0) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+QObject (0x0x7f8917ba8f00) 0
+ primary-for QGesture (0x0x7f8917baeea0)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f8917bd4180) 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 (0x0x7f8917baef08) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+QGesture (0x0x7f8917baef70) 0
+ primary-for QPanGesture (0x0x7f8917baef08)
+QObject (0x0x7f8917bd4120) 0
+ primary-for QGesture (0x0x7f8917baef70)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f8917bd4360) 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 (0x0x7f8917be2000) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+QGesture (0x0x7f8917be2068) 0
+ primary-for QPinchGesture (0x0x7f8917be2000)
+QObject (0x0x7f8917bd4300) 0
+ primary-for QGesture (0x0x7f8917be2068)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f8917bd4ae0) 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 (0x0x7f8917be21a0) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+QGesture (0x0x7f8917be2208) 0
+ primary-for QSwipeGesture (0x0x7f8917be21a0)
+QObject (0x0x7f8917bd4a80) 0
+ primary-for QGesture (0x0x7f8917be2208)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f8917bd4d80) 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 (0x0x7f8917be2270) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+QGesture (0x0x7f8917be22d8) 0
+ primary-for QTapGesture (0x0x7f8917be2270)
+QObject (0x0x7f8917bd4d20) 0
+ primary-for QGesture (0x0x7f8917be22d8)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f8917bd4f60) 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 (0x0x7f8917be2340) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+QGesture (0x0x7f8917be23a8) 0
+ primary-for QTapAndHoldGesture (0x0x7f8917be2340)
+QObject (0x0x7f8917bd4f00) 0
+ primary-for QGesture (0x0x7f8917be23a8)
+
+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 (0x0x7f8917be2410) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+QEvent (0x0x7f8917c4a120) 0
+ primary-for QGestureEvent (0x0x7f8917be2410)
+
+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 (0x0x7f8917c4ac60) 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 (0x0x7f8917c4a900) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f89179f6180) 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 (0x0x7f89179a3e00) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+QObject (0x0x7f89179f60c0) 0
+ primary-for QGraphicsObject (0x0x7f89179a3e00)
+QGraphicsItem (0x0x7f89179f6120) 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 (0x0x7f8917be2c30) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+QGraphicsItem (0x0x7f89179f6240) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8917be2c30)
+
+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 (0x0x7f8917be2c98) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f8917be2d00) 0
+ primary-for QGraphicsPathItem (0x0x7f8917be2c98)
+QGraphicsItem (0x0x7f89179f6360) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8917be2d00)
+
+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 (0x0x7f8917be2d68) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f8917be2dd0) 0
+ primary-for QGraphicsRectItem (0x0x7f8917be2d68)
+QGraphicsItem (0x0x7f89179f6480) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8917be2dd0)
+
+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 (0x0x7f8917be2e38) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f8917be2ea0) 0
+ primary-for QGraphicsEllipseItem (0x0x7f8917be2e38)
+QGraphicsItem (0x0x7f89179f6600) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8917be2ea0)
+
+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 (0x0x7f8917be2f08) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f8917be2f70) 0
+ primary-for QGraphicsPolygonItem (0x0x7f8917be2f08)
+QGraphicsItem (0x0x7f89179f6780) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8917be2f70)
+
+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 (0x0x7f8917be2a28) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+QGraphicsItem (0x0x7f89179f68a0) 0
+ primary-for QGraphicsLineItem (0x0x7f8917be2a28)
+
+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 (0x0x7f8917a64000) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+QGraphicsItem (0x0x7f89179f6a20) 0
+ primary-for QGraphicsPixmapItem (0x0x7f8917a64000)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f89179f6c60) 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 (0x0x7f8917a64068) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+QGraphicsObject (0x0x7f8917a17af0) 0
+ primary-for QGraphicsTextItem (0x0x7f8917a64068)
+QObject (0x0x7f89179f6ba0) 0
+ primary-for QGraphicsObject (0x0x7f8917a17af0)
+QGraphicsItem (0x0x7f89179f6c00) 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 (0x0x7f8917a641a0) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f8917a64208) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f8917a641a0)
+QGraphicsItem (0x0x7f89179f6f00) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f8917a64208)
+
+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 (0x0x7f8917a64270) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+QGraphicsItem (0x0x7f8917aa9060) 0
+ primary-for QGraphicsItemGroup (0x0x7f8917a64270)
+
+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 (0x0x7f8917aa9360) 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 (0x0x7f8917a642d8) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+QGraphicsLayoutItem (0x0x7f8917aa9a20) 0
+ primary-for QGraphicsLayout (0x0x7f8917a642d8)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f8917aa9d20) 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 (0x0x7f8917a64340) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+QObject (0x0x7f8917aa9cc0) 0
+ primary-for QGraphicsAnchor (0x0x7f8917a64340)
+
+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 (0x0x7f8917a643a8) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+QGraphicsLayout (0x0x7f8917a64410) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f8917a643a8)
+QGraphicsLayoutItem (0x0x7f8917aa9ea0) 0
+ primary-for QGraphicsLayout (0x0x7f8917a64410)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f8917b0b060) 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 (0x0x7f8917a64478) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+QObject (0x0x7f8917b0b000) 0
+ primary-for QGraphicsEffect (0x0x7f8917a64478)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f8917b0b600) 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 (0x0x7f8917a645b0) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+QGraphicsEffect (0x0x7f8917a64618) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f8917a645b0)
+QObject (0x0x7f8917b0b5a0) 0
+ primary-for QGraphicsEffect (0x0x7f8917a64618)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f8917b0b7e0) 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 (0x0x7f8917a64680) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+QGraphicsEffect (0x0x7f8917a646e8) 0
+ primary-for QGraphicsBlurEffect (0x0x7f8917a64680)
+QObject (0x0x7f8917b0b780) 0
+ primary-for QGraphicsEffect (0x0x7f8917a646e8)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f8917b0be40) 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 (0x0x7f8917a64820) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+QGraphicsEffect (0x0x7f8917a64888) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f8917a64820)
+QObject (0x0x7f8917b0bde0) 0
+ primary-for QGraphicsEffect (0x0x7f8917a64888)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f89177b22a0) 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 (0x0x7f8917a648f0) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+QGraphicsEffect (0x0x7f8917a64958) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f8917a648f0)
+QObject (0x0x7f89177b2240) 0
+ primary-for QGraphicsEffect (0x0x7f8917a64958)
+
+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 (0x0x7f8917a649c0) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+QGraphicsLayout (0x0x7f8917a64a28) 0
+ primary-for QGraphicsGridLayout (0x0x7f8917a649c0)
+QGraphicsLayoutItem (0x0x7f89177b2420) 0
+ primary-for QGraphicsLayout (0x0x7f8917a64a28)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f89177b2600) 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 (0x0x7f8917a64b60) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+QObject (0x0x7f89177b25a0) 0
+ primary-for QGraphicsItemAnimation (0x0x7f8917a64b60)
+
+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 (0x0x7f8917a64bc8) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+QGraphicsLayout (0x0x7f8917a64c30) 0
+ primary-for QGraphicsLinearLayout (0x0x7f8917a64bc8)
+QGraphicsLayoutItem (0x0x7f89177b26c0) 0
+ primary-for QGraphicsLayout (0x0x7f8917a64c30)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f89177b29c0) 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 (0x0x7f89177b3700) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+QGraphicsObject (0x0x7f89177b3770) 0
+ primary-for QGraphicsWidget (0x0x7f89177b3700)
+QObject (0x0x7f89177b28a0) 0
+ primary-for QGraphicsObject (0x0x7f89177b3770)
+QGraphicsItem (0x0x7f89177b2900) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+QGraphicsLayoutItem (0x0x7f89177b2960) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f89177b2e40) 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 (0x0x7f8917a64d68) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+QGraphicsWidget (0x0x7f89177b3b60) 0
+ primary-for QGraphicsProxyWidget (0x0x7f8917a64d68)
+QGraphicsObject (0x0x7f89177b3bd0) 0
+ primary-for QGraphicsWidget (0x0x7f89177b3b60)
+QObject (0x0x7f89177b2d20) 0
+ primary-for QGraphicsObject (0x0x7f89177b3bd0)
+QGraphicsItem (0x0x7f89177b2d80) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+QGraphicsLayoutItem (0x0x7f89177b2de0) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f891784d1e0) 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 (0x0x7f8917a64f70) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+QObject (0x0x7f891784d180) 0
+ primary-for QGraphicsScene (0x0x7f8917a64f70)
+
+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 (0x0x7f891788d7b8) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+QEvent (0x0x7f89179073c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f891788d7b8)
+
+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 (0x0x7f891788d820) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+QGraphicsSceneEvent (0x0x7f891788d888) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f891788d820)
+QEvent (0x0x7f89179075a0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f891788d888)
+
+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 (0x0x7f891788d8f0) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+QGraphicsSceneEvent (0x0x7f891788d958) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f891788d8f0)
+QEvent (0x0x7f89179076c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f891788d958)
+
+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 (0x0x7f891788d9c0) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+QGraphicsSceneEvent (0x0x7f891788da28) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f891788d9c0)
+QEvent (0x0x7f89179077e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f891788da28)
+
+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 (0x0x7f891788da90) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+QGraphicsSceneEvent (0x0x7f891788daf8) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f891788da90)
+QEvent (0x0x7f8917907900) 0
+ primary-for QGraphicsSceneEvent (0x0x7f891788daf8)
+
+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 (0x0x7f891788db60) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+QGraphicsSceneEvent (0x0x7f891788dbc8) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f891788db60)
+QEvent (0x0x7f8917907a20) 0
+ primary-for QGraphicsSceneEvent (0x0x7f891788dbc8)
+
+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 (0x0x7f891788dc30) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+QGraphicsSceneEvent (0x0x7f891788dc98) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f891788dc30)
+QEvent (0x0x7f8917907b40) 0
+ primary-for QGraphicsSceneEvent (0x0x7f891788dc98)
+
+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 (0x0x7f891788dd00) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+QGraphicsSceneEvent (0x0x7f891788dd68) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f891788dd00)
+QEvent (0x0x7f8917907c60) 0
+ primary-for QGraphicsSceneEvent (0x0x7f891788dd68)
+
+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 (0x0x7f891788ddd0) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+QGraphicsSceneEvent (0x0x7f891788de38) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f891788ddd0)
+QEvent (0x0x7f8917907d80) 0
+ primary-for QGraphicsSceneEvent (0x0x7f891788de38)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f8917907f00) 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 (0x0x7f891788dea0) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+QObject (0x0x7f8917907ea0) 0
+ primary-for QGraphicsTransform (0x0x7f891788dea0)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f8917597120) 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 (0x0x7f891788df08) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+QGraphicsTransform (0x0x7f891788df70) 0
+ primary-for QGraphicsScale (0x0x7f891788df08)
+QObject (0x0x7f89175970c0) 0
+ primary-for QGraphicsTransform (0x0x7f891788df70)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f8917597300) 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 (0x0x7f891788d750) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+QGraphicsTransform (0x0x7f89175a2000) 0
+ primary-for QGraphicsRotation (0x0x7f891788d750)
+QObject (0x0x7f89175972a0) 0
+ primary-for QGraphicsTransform (0x0x7f89175a2000)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f8917597540) 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 (0x0x7f89175a2068) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+QAbstractScrollArea (0x0x7f89175a20d0) 0
+ primary-for QScrollArea (0x0x7f89175a2068)
+QFrame (0x0x7f89175a2138) 0
+ primary-for QAbstractScrollArea (0x0x7f89175a20d0)
+QWidget (0x0x7f8917954af0) 0
+ primary-for QFrame (0x0x7f89175a2138)
+QObject (0x0x7f8917597480) 0
+ primary-for QWidget (0x0x7f8917954af0)
+QPaintDevice (0x0x7f89175974e0) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f8917597780) 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 (0x0x7f89175a21a0) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+QAbstractScrollArea (0x0x7f89175a2208) 0
+ primary-for QGraphicsView (0x0x7f89175a21a0)
+QFrame (0x0x7f89175a2270) 0
+ primary-for QAbstractScrollArea (0x0x7f89175a2208)
+QWidget (0x0x7f8917954cb0) 0
+ primary-for QFrame (0x0x7f89175a2270)
+QObject (0x0x7f89175976c0) 0
+ primary-for QWidget (0x0x7f8917954cb0)
+QPaintDevice (0x0x7f8917597720) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f8917649660) 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 (0x0x7f89175a2478) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+QWidget (0x0x7f891767d000) 0
+ primary-for QGroupBox (0x0x7f89175a2478)
+QObject (0x0x7f89176495a0) 0
+ primary-for QWidget (0x0x7f891767d000)
+QPaintDevice (0x0x7f8917649600) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f89176498a0) 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 (0x0x7f89175a24e0) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+QAbstractItemView (0x0x7f89175a2548) 0
+ primary-for QHeaderView (0x0x7f89175a24e0)
+QAbstractScrollArea (0x0x7f89175a25b0) 0
+ primary-for QAbstractItemView (0x0x7f89175a2548)
+QFrame (0x0x7f89175a2618) 0
+ primary-for QAbstractScrollArea (0x0x7f89175a25b0)
+QWidget (0x0x7f891767d1c0) 0
+ primary-for QFrame (0x0x7f89175a2618)
+QObject (0x0x7f89176497e0) 0
+ primary-for QWidget (0x0x7f891767d1c0)
+QPaintDevice (0x0x7f8917649840) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f8917649d20) 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 (0x0x7f89175a2680) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+QWidget (0x0x7f891767d850) 0
+ primary-for QLineEdit (0x0x7f89175a2680)
+QObject (0x0x7f8917649c60) 0
+ primary-for QWidget (0x0x7f891767d850)
+QPaintDevice (0x0x7f8917649cc0) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f89176f2120) 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 (0x0x7f89175a26e8) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+QDialog (0x0x7f89175a2750) 0
+ primary-for QInputDialog (0x0x7f89175a26e8)
+QWidget (0x0x7f891767de70) 0
+ primary-for QDialog (0x0x7f89175a2750)
+QObject (0x0x7f89176f2060) 0
+ primary-for QWidget (0x0x7f891767de70)
+QPaintDevice (0x0x7f89176f20c0) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f89176f2600) 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 (0x0x7f89175a2888) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+QAbstractItemDelegate (0x0x7f89175a28f0) 0
+ primary-for QItemDelegate (0x0x7f89175a2888)
+QObject (0x0x7f89176f25a0) 0
+ primary-for QAbstractItemDelegate (0x0x7f89175a28f0)
+
+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 (0x0x7f89176f2780) 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 (0x0x7f89176f2ae0) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f8917394000) 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 (0x0x7f89175a2a28) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+QWidget (0x0x7f89176f7af0) 0
+ primary-for QKeySequenceEdit (0x0x7f89175a2a28)
+QObject (0x0x7f89176f2f00) 0
+ primary-for QWidget (0x0x7f89176f7af0)
+QPaintDevice (0x0x7f89176f2f60) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f8917394240) 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 (0x0x7f89175a2a90) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+QFrame (0x0x7f89175a2af8) 0
+ primary-for QLabel (0x0x7f89175a2a90)
+QWidget (0x0x7f89176f7cb0) 0
+ primary-for QFrame (0x0x7f89175a2af8)
+QObject (0x0x7f8917394180) 0
+ primary-for QWidget (0x0x7f89176f7cb0)
+QPaintDevice (0x0x7f89173941e0) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f8917394540) 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 (0x0x7f89175a2b60) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+QFrame (0x0x7f89175a2bc8) 0
+ primary-for QLCDNumber (0x0x7f89175a2b60)
+QWidget (0x0x7f89176f7f50) 0
+ primary-for QFrame (0x0x7f89175a2bc8)
+QObject (0x0x7f8917394480) 0
+ primary-for QWidget (0x0x7f89176f7f50)
+QPaintDevice (0x0x7f89173944e0) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f8917394900) 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 (0x0x7f89175a2c30) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+QAbstractItemView (0x0x7f89175a2c98) 0
+ primary-for QListView (0x0x7f89175a2c30)
+QAbstractScrollArea (0x0x7f89175a2d00) 0
+ primary-for QAbstractItemView (0x0x7f89175a2c98)
+QFrame (0x0x7f89175a2d68) 0
+ primary-for QAbstractScrollArea (0x0x7f89175a2d00)
+QWidget (0x0x7f89173c6620) 0
+ primary-for QFrame (0x0x7f89175a2d68)
+QObject (0x0x7f8917394840) 0
+ primary-for QWidget (0x0x7f89173c6620)
+QPaintDevice (0x0x7f89173948a0) 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 (0x0x7f8917394e40) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f8917425900) 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 (0x0x7f89175a2dd0) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+QListView (0x0x7f89175a2e38) 0
+ primary-for QListWidget (0x0x7f89175a2dd0)
+QAbstractItemView (0x0x7f89175a2ea0) 0
+ primary-for QListView (0x0x7f89175a2e38)
+QAbstractScrollArea (0x0x7f89175a2f08) 0
+ primary-for QAbstractItemView (0x0x7f89175a2ea0)
+QFrame (0x0x7f89175a2f70) 0
+ primary-for QAbstractScrollArea (0x0x7f89175a2f08)
+QWidget (0x0x7f891740cd20) 0
+ primary-for QFrame (0x0x7f89175a2f70)
+QObject (0x0x7f8917425840) 0
+ primary-for QWidget (0x0x7f891740cd20)
+QPaintDevice (0x0x7f89174258a0) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f8917425de0) 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 (0x0x7f8917469000) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+QWidget (0x0x7f8917464230) 0
+ primary-for QMainWindow (0x0x7f8917469000)
+QObject (0x0x7f8917425d20) 0
+ primary-for QWidget (0x0x7f8917464230)
+QPaintDevice (0x0x7f8917425d80) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f891748e4e0) 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 (0x0x7f8917469138) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+QAbstractScrollArea (0x0x7f89174691a0) 0
+ primary-for QMdiArea (0x0x7f8917469138)
+QFrame (0x0x7f8917469208) 0
+ primary-for QAbstractScrollArea (0x0x7f89174691a0)
+QWidget (0x0x7f89174649a0) 0
+ primary-for QFrame (0x0x7f8917469208)
+QObject (0x0x7f891748e420) 0
+ primary-for QWidget (0x0x7f89174649a0)
+QPaintDevice (0x0x7f891748e480) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f891748eba0) 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 (0x0x7f8917469340) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+QWidget (0x0x7f89174fa150) 0
+ primary-for QMdiSubWindow (0x0x7f8917469340)
+QObject (0x0x7f891748eae0) 0
+ primary-for QWidget (0x0x7f89174fa150)
+QPaintDevice (0x0x7f891748eb40) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f891716a120) 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 (0x0x7f8917469478) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+QWidget (0x0x7f89174fa620) 0
+ primary-for QMenu (0x0x7f8917469478)
+QObject (0x0x7f891716a060) 0
+ primary-for QWidget (0x0x7f89174fa620)
+QPaintDevice (0x0x7f891716a0c0) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f891716a4e0) 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 (0x0x7f89174694e0) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+QWidget (0x0x7f89174fa9a0) 0
+ primary-for QMenuBar (0x0x7f89174694e0)
+QObject (0x0x7f891716a420) 0
+ primary-for QWidget (0x0x7f89174fa9a0)
+QPaintDevice (0x0x7f891716a480) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f891716a7e0) 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 (0x0x7f8917469548) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+QDialog (0x0x7f89174695b0) 0
+ primary-for QMessageBox (0x0x7f8917469548)
+QWidget (0x0x7f89174fac40) 0
+ primary-for QDialog (0x0x7f89174695b0)
+QObject (0x0x7f891716a720) 0
+ primary-for QWidget (0x0x7f89174fac40)
+QPaintDevice (0x0x7f891716a780) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f891722e060) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f891722e0c0) 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 (0x0x7f89174696e8) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+QAbstractScrollArea (0x0x7f8917469750) 0
+ primary-for QTextEdit (0x0x7f89174696e8)
+QFrame (0x0x7f89174697b8) 0
+ primary-for QAbstractScrollArea (0x0x7f8917469750)
+QWidget (0x0x7f8917203620) 0
+ primary-for QFrame (0x0x7f89174697b8)
+QObject (0x0x7f891716af60) 0
+ primary-for QWidget (0x0x7f8917203620)
+QPaintDevice (0x0x7f891722e000) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f891722e900) 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 (0x0x7f89174698f0) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+QAbstractScrollArea (0x0x7f8917469958) 0
+ primary-for QPlainTextEdit (0x0x7f89174698f0)
+QFrame (0x0x7f89174699c0) 0
+ primary-for QAbstractScrollArea (0x0x7f8917469958)
+QWidget (0x0x7f891729f000) 0
+ primary-for QFrame (0x0x7f89174699c0)
+QObject (0x0x7f891722e840) 0
+ primary-for QWidget (0x0x7f891729f000)
+QPaintDevice (0x0x7f891722e8a0) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f891722ee40) 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 (0x0x7f8917469a28) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+QAbstractTextDocumentLayout (0x0x7f8917469a90) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f8917469a28)
+QObject (0x0x7f891722ede0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f8917469a90)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f89172e30c0) 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 (0x0x7f8917469af8) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+QWidget (0x0x7f891729f7e0) 0
+ primary-for QProgressBar (0x0x7f8917469af8)
+QObject (0x0x7f89172e3000) 0
+ primary-for QWidget (0x0x7f891729f7e0)
+QPaintDevice (0x0x7f89172e3060) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f89172e33c0) 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 (0x0x7f8917469b60) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+QDialog (0x0x7f8917469bc8) 0
+ primary-for QProgressDialog (0x0x7f8917469b60)
+QWidget (0x0x7f891729fb60) 0
+ primary-for QDialog (0x0x7f8917469bc8)
+QObject (0x0x7f89172e3300) 0
+ primary-for QWidget (0x0x7f891729fb60)
+QPaintDevice (0x0x7f89172e3360) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f89172e35a0) 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 (0x0x7f8917469c30) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+QCommonStyle (0x0x7f8917469c98) 0
+ primary-for QProxyStyle (0x0x7f8917469c30)
+QStyle (0x0x7f8917469d00) 0
+ primary-for QCommonStyle (0x0x7f8917469c98)
+QObject (0x0x7f89172e3540) 0
+ primary-for QStyle (0x0x7f8917469d00)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f89172e37e0) 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 (0x0x7f8917469d68) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+QAbstractButton (0x0x7f8917469dd0) 0
+ primary-for QRadioButton (0x0x7f8917469d68)
+QWidget (0x0x7f891729fe70) 0
+ primary-for QAbstractButton (0x0x7f8917469dd0)
+QObject (0x0x7f89172e3720) 0
+ primary-for QWidget (0x0x7f891729fe70)
+QPaintDevice (0x0x7f89172e3780) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f89172e3a20) 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 (0x0x7f8917469e38) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+QAbstractSlider (0x0x7f8917469ea0) 0
+ primary-for QScrollBar (0x0x7f8917469e38)
+QWidget (0x0x7f891733e070) 0
+ primary-for QAbstractSlider (0x0x7f8917469ea0)
+QObject (0x0x7f89172e3960) 0
+ primary-for QWidget (0x0x7f891733e070)
+QPaintDevice (0x0x7f89172e39c0) 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 (0x0x7f89172e3ba0) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f89172e3f00) 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 (0x0x7f8917469f08) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+QObject (0x0x7f89172e3ea0) 0
+ primary-for QScroller (0x0x7f8917469f08)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f8916f7f240) 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 (0x0x7f8917469f70) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+QWidget (0x0x7f8916f697e0) 0
+ primary-for QSizeGrip (0x0x7f8917469f70)
+QObject (0x0x7f8916f7f180) 0
+ primary-for QWidget (0x0x7f8916f697e0)
+QPaintDevice (0x0x7f8916f7f1e0) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f8916f7f480) 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 (0x0x7f8916f96000) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+QAbstractSpinBox (0x0x7f8916f96068) 0
+ primary-for QSpinBox (0x0x7f8916f96000)
+QWidget (0x0x7f8916f699a0) 0
+ primary-for QAbstractSpinBox (0x0x7f8916f96068)
+QObject (0x0x7f8916f7f3c0) 0
+ primary-for QWidget (0x0x7f8916f699a0)
+QPaintDevice (0x0x7f8916f7f420) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f8916f7f6c0) 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 (0x0x7f8916f960d0) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+QAbstractSpinBox (0x0x7f8916f96138) 0
+ primary-for QDoubleSpinBox (0x0x7f8916f960d0)
+QWidget (0x0x7f8916f69b60) 0
+ primary-for QAbstractSpinBox (0x0x7f8916f96138)
+QObject (0x0x7f8916f7f600) 0
+ primary-for QWidget (0x0x7f8916f69b60)
+QPaintDevice (0x0x7f8916f7f660) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f8916f7f900) 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 (0x0x7f8916f961a0) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+QWidget (0x0x7f8916f69d20) 0
+ primary-for QSplashScreen (0x0x7f8916f961a0)
+QObject (0x0x7f8916f7f840) 0
+ primary-for QWidget (0x0x7f8916f69d20)
+QPaintDevice (0x0x7f8916f7f8a0) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f8916f7fb40) 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 (0x0x7f8916f96208) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+QFrame (0x0x7f8916f96270) 0
+ primary-for QSplitter (0x0x7f8916f96208)
+QWidget (0x0x7f8916f69ee0) 0
+ primary-for QFrame (0x0x7f8916f96270)
+QObject (0x0x7f8916f7fa80) 0
+ primary-for QWidget (0x0x7f8916f69ee0)
+QPaintDevice (0x0x7f8916f7fae0) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f8916f7fd80) 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 (0x0x7f8916f962d8) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+QWidget (0x0x7f8916fe9070) 0
+ primary-for QSplitterHandle (0x0x7f8916f962d8)
+QObject (0x0x7f8916f7fcc0) 0
+ primary-for QWidget (0x0x7f8916fe9070)
+QPaintDevice (0x0x7f8916f7fd20) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f8916ffd000) 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 (0x0x7f8916f96340) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+QLayout (0x0x7f8916fe9230) 0
+ primary-for QStackedLayout (0x0x7f8916f96340)
+QObject (0x0x7f8916f7ff00) 0
+ primary-for QLayout (0x0x7f8916fe9230)
+QLayoutItem (0x0x7f8916f7ff60) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f8916ffd300) 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 (0x0x7f8916f963a8) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+QFrame (0x0x7f8916f96410) 0
+ primary-for QStackedWidget (0x0x7f8916f963a8)
+QWidget (0x0x7f8916fe95b0) 0
+ primary-for QFrame (0x0x7f8916f96410)
+QObject (0x0x7f8916ffd240) 0
+ primary-for QWidget (0x0x7f8916fe95b0)
+QPaintDevice (0x0x7f8916ffd2a0) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f8916ffd540) 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 (0x0x7f8916f96478) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+QWidget (0x0x7f8916fe9770) 0
+ primary-for QStatusBar (0x0x7f8916f96478)
+QObject (0x0x7f8916ffd480) 0
+ primary-for QWidget (0x0x7f8916fe9770)
+QPaintDevice (0x0x7f8916ffd4e0) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f8916ffd720) 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 (0x0x7f8916f964e0) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+QAbstractItemDelegate (0x0x7f8916f96548) 0
+ primary-for QStyledItemDelegate (0x0x7f8916f964e0)
+QObject (0x0x7f8916ffd6c0) 0
+ primary-for QAbstractItemDelegate (0x0x7f8916f96548)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f8916ffd8a0) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f8916f965b0) 0
+QPainter (0x0x7f8916ffd900) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f891705d180) 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 (0x0x7f8916f96618) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+QObject (0x0x7f891705d120) 0
+ primary-for QStylePlugin (0x0x7f8916f96618)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f891705d2a0) 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 (0x0x7f8916f96680) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+QObject (0x0x7f891705d240) 0
+ primary-for QSystemTrayIcon (0x0x7f8916f96680)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f891705d5a0) 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 (0x0x7f8916f966e8) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+QAbstractItemView (0x0x7f8916f96750) 0
+ primary-for QTableView (0x0x7f8916f966e8)
+QAbstractScrollArea (0x0x7f8916f967b8) 0
+ primary-for QAbstractItemView (0x0x7f8916f96750)
+QFrame (0x0x7f8916f96820) 0
+ primary-for QAbstractScrollArea (0x0x7f8916f967b8)
+QWidget (0x0x7f89170589a0) 0
+ primary-for QFrame (0x0x7f8916f96820)
+QObject (0x0x7f891705d4e0) 0
+ primary-for QWidget (0x0x7f89170589a0)
+QPaintDevice (0x0x7f891705d540) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f891705d720) 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 (0x0x7f891705db40) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f89170c1d80) 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 (0x0x7f8916f96f70) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+QTableView (0x0x7f8916f96f08) 0
+ primary-for QTableWidget (0x0x7f8916f96f70)
+QAbstractItemView (0x0x7f8917135000) 0
+ primary-for QTableView (0x0x7f8916f96f08)
+QAbstractScrollArea (0x0x7f8917135068) 0
+ primary-for QAbstractItemView (0x0x7f8917135000)
+QFrame (0x0x7f89171350d0) 0
+ primary-for QAbstractScrollArea (0x0x7f8917135068)
+QWidget (0x0x7f89170a7c40) 0
+ primary-for QFrame (0x0x7f89171350d0)
+QObject (0x0x7f89170c1cc0) 0
+ primary-for QWidget (0x0x7f89170a7c40)
+QPaintDevice (0x0x7f89170c1d20) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f8916d63120) 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 (0x0x7f8917135138) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+QTextEdit (0x0x7f89171351a0) 0
+ primary-for QTextBrowser (0x0x7f8917135138)
+QAbstractScrollArea (0x0x7f8917135208) 0
+ primary-for QTextEdit (0x0x7f89171351a0)
+QFrame (0x0x7f8917135270) 0
+ primary-for QAbstractScrollArea (0x0x7f8917135208)
+QWidget (0x0x7f8916d64000) 0
+ primary-for QFrame (0x0x7f8917135270)
+QObject (0x0x7f8916d63060) 0
+ primary-for QWidget (0x0x7f8916d64000)
+QPaintDevice (0x0x7f8916d630c0) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f8916d63360) 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 (0x0x7f89171352d8) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+QWidget (0x0x7f8916d641c0) 0
+ primary-for QToolBar (0x0x7f89171352d8)
+QObject (0x0x7f8916d632a0) 0
+ primary-for QWidget (0x0x7f8916d641c0)
+QPaintDevice (0x0x7f8916d63300) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f8916d637e0) 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 (0x0x7f8917135340) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+QFrame (0x0x7f89171353a8) 0
+ primary-for QToolBox (0x0x7f8917135340)
+QWidget (0x0x7f8916d64620) 0
+ primary-for QFrame (0x0x7f89171353a8)
+QObject (0x0x7f8916d63720) 0
+ primary-for QWidget (0x0x7f8916d64620)
+QPaintDevice (0x0x7f8916d63780) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f8916d63b40) 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 (0x0x7f8917135410) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+QAbstractButton (0x0x7f8917135478) 0
+ primary-for QToolButton (0x0x7f8917135410)
+QWidget (0x0x7f8916d64930) 0
+ primary-for QAbstractButton (0x0x7f8917135478)
+QObject (0x0x7f8916d63a80) 0
+ primary-for QWidget (0x0x7f8916d64930)
+QPaintDevice (0x0x7f8916d63ae0) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f8916d63d80) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f8916d63f00) 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 (0x0x7f89171354e0) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+QAbstractItemView (0x0x7f8917135548) 0
+ primary-for QTreeView (0x0x7f89171354e0)
+QAbstractScrollArea (0x0x7f89171355b0) 0
+ primary-for QAbstractItemView (0x0x7f8917135548)
+QFrame (0x0x7f8917135618) 0
+ primary-for QAbstractScrollArea (0x0x7f89171355b0)
+QWidget (0x0x7f8916d64d90) 0
+ primary-for QFrame (0x0x7f8917135618)
+QObject (0x0x7f8916d63e40) 0
+ primary-for QWidget (0x0x7f8916d64d90)
+QPaintDevice (0x0x7f8916d63ea0) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f8916e000c0) 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 (0x0x7f8916e00780) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f8916b59360) 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 (0x0x7f8916ee35b0) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+QTreeView (0x0x7f8916ee3618) 0
+ primary-for QTreeWidget (0x0x7f8916ee35b0)
+QAbstractItemView (0x0x7f8916ee3680) 0
+ primary-for QTreeView (0x0x7f8916ee3618)
+QAbstractScrollArea (0x0x7f8916ee36e8) 0
+ primary-for QAbstractItemView (0x0x7f8916ee3680)
+QFrame (0x0x7f8916ee3750) 0
+ primary-for QAbstractScrollArea (0x0x7f8916ee36e8)
+QWidget (0x0x7f8916ed1e70) 0
+ primary-for QFrame (0x0x7f8916ee3750)
+QObject (0x0x7f8916b592a0) 0
+ primary-for QWidget (0x0x7f8916ed1e70)
+QPaintDevice (0x0x7f8916b59300) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f8916b59960) 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 (0x0x7f8916ee3958) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+QListView (0x0x7f8916ee39c0) 0
+ primary-for QUndoView (0x0x7f8916ee3958)
+QAbstractItemView (0x0x7f8916ee3a28) 0
+ primary-for QListView (0x0x7f8916ee39c0)
+QAbstractScrollArea (0x0x7f8916ee3a90) 0
+ primary-for QAbstractItemView (0x0x7f8916ee3a28)
+QFrame (0x0x7f8916ee3af8) 0
+ primary-for QAbstractScrollArea (0x0x7f8916ee3a90)
+QWidget (0x0x7f8916b86310) 0
+ primary-for QFrame (0x0x7f8916ee3af8)
+QObject (0x0x7f8916b598a0) 0
+ primary-for QWidget (0x0x7f8916b86310)
+QPaintDevice (0x0x7f8916b59900) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f8916b59ae0) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f8916b59ba0) 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 (0x0x7f8916ee3b60) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+QAction (0x0x7f8916ee3bc8) 0
+ primary-for QWidgetAction (0x0x7f8916ee3b60)
+QObject (0x0x7f8916b59b40) 0
+ primary-for QAction (0x0x7f8916ee3bc8)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f8916b59de0) 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 (0x0x7f8916ee3c30) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+QDialog (0x0x7f8916ee3c98) 0
+ primary-for QWizard (0x0x7f8916ee3c30)
+QWidget (0x0x7f8916b86620) 0
+ primary-for QDialog (0x0x7f8916ee3c98)
+QObject (0x0x7f8916b59d20) 0
+ primary-for QWidget (0x0x7f8916b86620)
+QPaintDevice (0x0x7f8916b59d80) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f8916be85a0) 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 (0x0x7f8916ee3dd0) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+QWidget (0x0x7f8916bc6d90) 0
+ primary-for QWizardPage (0x0x7f8916ee3dd0)
+QObject (0x0x7f8916be84e0) 0
+ primary-for QWidget (0x0x7f8916bc6d90)
+QPaintDevice (0x0x7f8916be8540) 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 (0x0x7f8916be8720) 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 (0x0x7f8916c50d20) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface) + 16)
+
+Class QDomImplementation
+ size=8 align=8
+ base size=8 base align=8
+QDomImplementation (0x0x7f8916c79180) 0
+
+Class QDomNode
+ size=8 align=8
+ base size=8 base align=8
+QDomNode (0x0x7f8916c791e0) 0
+
+Class QDomNodeList
+ size=8 align=8
+ base size=8 base align=8
+QDomNodeList (0x0x7f8916c79240) 0
+
+Class QDomDocumentType
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentType (0x0x7f8916c5aaf8) 0
+QDomNode (0x0x7f8916c79420) 0
+
+Class QDomDocument
+ size=8 align=8
+ base size=8 base align=8
+QDomDocument (0x0x7f8916c5ab60) 0
+QDomNode (0x0x7f8916c794e0) 0
+
+Class QDomNamedNodeMap
+ size=8 align=8
+ base size=8 base align=8
+QDomNamedNodeMap (0x0x7f8916c795a0) 0
+
+Class QDomDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentFragment (0x0x7f8916c5abc8) 0
+QDomNode (0x0x7f8916c79720) 0
+
+Class QDomCharacterData
+ size=8 align=8
+ base size=8 base align=8
+QDomCharacterData (0x0x7f8916c5ac30) 0
+QDomNode (0x0x7f8916c797e0) 0
+
+Class QDomAttr
+ size=8 align=8
+ base size=8 base align=8
+QDomAttr (0x0x7f8916c5ac98) 0
+QDomNode (0x0x7f8916c79840) 0
+
+Class QDomElement
+ size=8 align=8
+ base size=8 base align=8
+QDomElement (0x0x7f8916c5ad00) 0
+QDomNode (0x0x7f8916c79900) 0
+
+Class QDomText
+ size=8 align=8
+ base size=8 base align=8
+QDomText (0x0x7f8916c5ad68) 0
+QDomCharacterData (0x0x7f8916c5add0) 0
+QDomNode (0x0x7f8916c79b40) 0
+
+Class QDomComment
+ size=8 align=8
+ base size=8 base align=8
+QDomComment (0x0x7f8916c5ae38) 0
+QDomCharacterData (0x0x7f8916c5aea0) 0
+QDomNode (0x0x7f8916c79c00) 0
+
+Class QDomCDATASection
+ size=8 align=8
+ base size=8 base align=8
+QDomCDATASection (0x0x7f8916c5af08) 0
+QDomText (0x0x7f8916c5af70) 0
+QDomCharacterData (0x0x7f8916cf7000) 0
+QDomNode (0x0x7f8916c79cc0) 0
+
+Class QDomNotation
+ size=8 align=8
+ base size=8 base align=8
+QDomNotation (0x0x7f8916cf7068) 0
+QDomNode (0x0x7f8916c79d80) 0
+
+Class QDomEntity
+ size=8 align=8
+ base size=8 base align=8
+QDomEntity (0x0x7f8916cf70d0) 0
+QDomNode (0x0x7f8916c79e40) 0
+
+Class QDomEntityReference
+ size=8 align=8
+ base size=8 base align=8
+QDomEntityReference (0x0x7f8916cf7138) 0
+QDomNode (0x0x7f8916c79f00) 0
+
+Class QDomProcessingInstruction
+ size=8 align=8
+ base size=8 base align=8
+QDomProcessingInstruction (0x0x7f8916cf71a0) 0
+QDomNode (0x0x7f8916d0b000) 0
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f8916d0b0c0) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f8916d0b540) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f8916a0d720) 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 (0x0x7f89169d3ea0) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+QObject (0x0x7f8916a0d6c0) 0
+ primary-for QOpenGLDebugLogger (0x0x7f89169d3ea0)
+
+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 (0x0x7f8916a0da80) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f8916a0dd20) 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 (0x0x7f89169d3f08) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+QPaintDevice (0x0x7f8916a0dd80) 0
+ primary-for QOpenGLPaintDevice (0x0x7f89169d3f08)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f8916ae3000) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f8916b23900) 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 (0x0x7f8916b1ed68) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+QObject (0x0x7f8916b238a0) 0
+ primary-for QOpenGLShader (0x0x7f8916b1ed68)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f8916b23de0) 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 (0x0x7f8916b1eea0) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+QObject (0x0x7f8916b23d80) 0
+ primary-for QOpenGLShaderProgram (0x0x7f8916b1eea0)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f8916b23f60) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f89168720c0) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f8916872300) 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 (0x0x7f8916891000) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+QObject (0x0x7f89168722a0) 0
+ primary-for QOpenGLTimerQuery (0x0x7f8916891000)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f89168724e0) 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 (0x0x7f8916891068) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+QObject (0x0x7f8916872480) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f8916891068)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f8916872660) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f8916560600) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f89165607e0) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f8916560840) 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 (0x0x7f8916560a20) 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 (0x0x7f8916560c00) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f891694c820) 0
+QOpenGLVersionFunctionsBackend (0x0x7f8916560ba0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f8916560f60) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f891694c888) 0
+QOpenGLVersionFunctionsBackend (0x0x7f8916560f00) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f891659b300) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f891694c8f0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891659b2a0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f891659b660) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f891694c958) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891659b600) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f891659b9c0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f891694c9c0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891659b960) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f891659bd20) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f891694ca28) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891659bcc0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f89165c50c0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f891694ca90) 0
+QOpenGLVersionFunctionsBackend (0x0x7f89165c5060) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f89165c5420) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f891694caf8) 0
+QOpenGLVersionFunctionsBackend (0x0x7f89165c53c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f89165c5780) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f891694cb60) 0
+QOpenGLVersionFunctionsBackend (0x0x7f89165c5720) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f89165c5ae0) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f891694cbc8) 0
+QOpenGLVersionFunctionsBackend (0x0x7f89165c5a80) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f89165c5e40) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f891694cc30) 0
+QOpenGLVersionFunctionsBackend (0x0x7f89165c5de0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f891661d1e0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f891694cc98) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891661d180) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f891661d540) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f891694cd00) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891661d4e0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f891661d8a0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f891694cd68) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891661d840) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f891661dc00) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f891694cdd0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891661dba0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f891661df60) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f891694ce38) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891661df00) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f891668b300) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f891694cea0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891668b2a0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f891668b660) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f891694cf08) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891668b600) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f891668b9c0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f891694cf70) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891668b960) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f891668bd20) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f8916711000) 0
+QOpenGLVersionFunctionsBackend (0x0x7f891668bcc0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f89167190c0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f8916711068) 0
+QOpenGLVersionFunctionsBackend (0x0x7f8916719060) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f8916719420) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f89167110d0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f89167193c0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f8916719780) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f8916711138) 0
+QOpenGLVersionFunctionsBackend (0x0x7f8916719720) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f8916719ae0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f89167111a0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f8916719a80) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f8916719e40) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f8916711208) 0
+QOpenGLVersionFunctionsBackend (0x0x7f8916719de0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f89163631e0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f8916711270) 0
+QOpenGLVersionFunctionsBackend (0x0x7f8916363180) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f8916363540) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f89167112d8) 0
+QOpenGLVersionFunctionsBackend (0x0x7f89163634e0) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f8916363840) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f89163639c0) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f8916363ae0) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f8916363b40) 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 (0x0x7f8916711340) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+QObject (0x0x7f8916363a80) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f8916711340)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f891639f240) 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 (0x0x7f89167113a8) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+QPaintDeviceWindow (0x0x7f891639d2a0) 0
+ primary-for QOpenGLWindow (0x0x7f89167113a8)
+QWindow (0x0x7f891639d310) 0
+ primary-for QPaintDeviceWindow (0x0x7f891639d2a0)
+QObject (0x0x7f891639f120) 0
+ primary-for QWindow (0x0x7f891639d310)
+QSurface (0x0x7f891639f180) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+QPaintDevice (0x0x7f891639f1e0) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7f891639f480) 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 (0x0x7f8916711478) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+QWidget (0x0x7f891639d620) 0
+ primary-for QOpenGLWidget (0x0x7f8916711478)
+QObject (0x0x7f891639f3c0) 0
+ primary-for QWidget (0x0x7f891639d620)
+QPaintDevice (0x0x7f891639f420) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QDesignerActionEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerActionEditorInterface::QPrivateSignal (0x0x7f891639f6c0) 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 (0x0x7f8916711548) 0
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 16)
+QWidget (0x0x7f891639d8c0) 0
+ primary-for QDesignerActionEditorInterface (0x0x7f8916711548)
+QObject (0x0x7f891639f600) 0
+ primary-for QWidget (0x0x7f891639d8c0)
+QPaintDevice (0x0x7f891639f660) 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 (0x0x7f891639f780) 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 (0x0x7f891639f7e0) 0
+ vptr=((& QAbstractFormBuilder::_ZTV20QAbstractFormBuilder) + 16)
+
+Class QDesignerFormEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormEditorInterface::QPrivateSignal (0x0x7f891639fa20) 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 (0x0x7f89167115b0) 0
+ vptr=((& QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface) + 16)
+QObject (0x0x7f891639f9c0) 0
+ primary-for QDesignerFormEditorInterface (0x0x7f89167115b0)
+
+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 (0x0x7f891639fb40) 0 nearly-empty
+ vptr=((& QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface) + 16)
+
+Class QDesignerFormWindowInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowInterface::QPrivateSignal (0x0x7f891639fde0) 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 (0x0x7f8916711618) 0
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 16)
+QWidget (0x0x7f891639dd90) 0
+ primary-for QDesignerFormWindowInterface (0x0x7f8916711618)
+QObject (0x0x7f891639fd20) 0
+ primary-for QWidget (0x0x7f891639dd90)
+QPaintDevice (0x0x7f891639fd80) 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 (0x0x7f891639ff60) 0 nearly-empty
+ vptr=((& QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface) + 16)
+
+Class QDesignerFormWindowManagerInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowManagerInterface::QPrivateSignal (0x0x7f8916470060) 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 (0x0x7f8916711680) 0
+ vptr=((& QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface) + 16)
+QObject (0x0x7f8916470000) 0
+ primary-for QDesignerFormWindowManagerInterface (0x0x7f8916711680)
+
+Class QDesignerFormWindowToolInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowToolInterface::QPrivateSignal (0x0x7f8916470360) 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 (0x0x7f89167116e8) 0
+ vptr=((& QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface) + 16)
+QObject (0x0x7f8916470300) 0
+ primary-for QDesignerFormWindowToolInterface (0x0x7f89167116e8)
+
+Class QDesignerIntegrationInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegrationInterface::QPrivateSignal (0x0x7f8916470540) 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 (0x0x7f8916711750) 0
+ vptr=((& QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface) + 16)
+QObject (0x0x7f89164704e0) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f8916711750)
+
+Class QDesignerIntegration::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegration::QPrivateSignal (0x0x7f8916470780) 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 (0x0x7f89167117b8) 0
+ vptr=((& QDesignerIntegration::_ZTV20QDesignerIntegration) + 16)
+QDesignerIntegrationInterface (0x0x7f8916711820) 0
+ primary-for QDesignerIntegration (0x0x7f89167117b8)
+QObject (0x0x7f8916470720) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f8916711820)
+
+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 (0x0x7f89164708a0) 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 (0x0x7f8916470c60) 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 (0x0x7f89164d90c0) 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 (0x0x7f89164d9300) 0 nearly-empty
+ vptr=((& QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface) + 16)
+
+Class QDesignerMetaDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerMetaDataBaseInterface::QPrivateSignal (0x0x7f89164d93c0) 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 (0x0x7f8916711888) 0
+ vptr=((& QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface) + 16)
+QObject (0x0x7f89164d9360) 0
+ primary-for QDesignerMetaDataBaseInterface (0x0x7f8916711888)
+
+Class QDesignerNewFormWidgetInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerNewFormWidgetInterface::QPrivateSignal (0x0x7f89164d9540) 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 (0x0x7f89167118f0) 0
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 16)
+QWidget (0x0x7f89164e5230) 0
+ primary-for QDesignerNewFormWidgetInterface (0x0x7f89167118f0)
+QObject (0x0x7f89164d9480) 0
+ primary-for QWidget (0x0x7f89164e5230)
+QPaintDevice (0x0x7f89164d94e0) 16
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 464)
+
+Class QDesignerObjectInspectorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerObjectInspectorInterface::QPrivateSignal (0x0x7f89164d96c0) 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 (0x0x7f8916711958) 0
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 16)
+QWidget (0x0x7f89164e5310) 0
+ primary-for QDesignerObjectInspectorInterface (0x0x7f8916711958)
+QObject (0x0x7f89164d9600) 0
+ primary-for QWidget (0x0x7f89164e5310)
+QPaintDevice (0x0x7f89164d9660) 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 (0x0x7f89164d9780) 0 nearly-empty
+ vptr=((& QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface) + 16)
+
+Class QDesignerPromotionInterface::PromotedClass
+ size=16 align=8
+ base size=16 base align=8
+QDesignerPromotionInterface::PromotedClass (0x0x7f89164d9840) 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 (0x0x7f89164d97e0) 0 nearly-empty
+ vptr=((& QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface) + 16)
+
+Class QDesignerPropertyEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerPropertyEditorInterface::QPrivateSignal (0x0x7f89164d9960) 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 (0x0x7f89167119c0) 0
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 16)
+QWidget (0x0x7f89164e53f0) 0
+ primary-for QDesignerPropertyEditorInterface (0x0x7f89167119c0)
+QObject (0x0x7f89164d98a0) 0
+ primary-for QWidget (0x0x7f89164e53f0)
+QPaintDevice (0x0x7f89164d9900) 16
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 504)
+
+Class QDesignerResourceBrowserInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerResourceBrowserInterface::QPrivateSignal (0x0x7f89164d9ae0) 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 (0x0x7f8916711a28) 0
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 16)
+QWidget (0x0x7f89164e54d0) 0
+ primary-for QDesignerResourceBrowserInterface (0x0x7f8916711a28)
+QObject (0x0x7f89164d9a20) 0
+ primary-for QWidget (0x0x7f89164e54d0)
+QPaintDevice (0x0x7f89164d9a80) 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 (0x0x7f89164d9ba0) 0 nearly-empty
+ vptr=((& QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface) + 16)
+
+Class QDesignerWidgetBoxInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetBoxInterface::QPrivateSignal (0x0x7f89164d9cc0) 0 empty
+
+Class QDesignerWidgetBoxInterface::Widget
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetBoxInterface::Widget (0x0x7f89164d9d20) 0
+
+Class QDesignerWidgetBoxInterface::Category
+ size=56 align=8
+ base size=56 base align=8
+QDesignerWidgetBoxInterface::Category (0x0x7f89164d9de0) 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 (0x0x7f8916711a90) 0
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 16)
+QWidget (0x0x7f89164e55b0) 0
+ primary-for QDesignerWidgetBoxInterface (0x0x7f8916711a90)
+QObject (0x0x7f89164d9c00) 0
+ primary-for QWidget (0x0x7f89164e55b0)
+QPaintDevice (0x0x7f89164d9c60) 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 (0x0x7f89161e41e0) 0 nearly-empty
+ vptr=((& QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface) + 16)
+
+Class QDesignerWidgetDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetDataBaseInterface::QPrivateSignal (0x0x7f89161e4300) 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 (0x0x7f8916172138) 0
+ vptr=((& QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface) + 16)
+QObject (0x0x7f89161e42a0) 0
+ primary-for QDesignerWidgetDataBaseInterface (0x0x7f8916172138)
+
+Class QDesignerWidgetFactoryInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetFactoryInterface::QPrivateSignal (0x0x7f89161e4ba0) 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 (0x0x7f89161727b8) 0
+ vptr=((& QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface) + 16)
+QObject (0x0x7f89161e4b40) 0
+ primary-for QDesignerWidgetFactoryInterface (0x0x7f89161727b8)
+
+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 (0x0x7f89161e4c60) 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 (0x0x7f89161e4ea0) 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 (0x0x7f8916281120) 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 (0x0x7f8916172820) 0
+ vptr=((& QFormBuilder::_ZTV12QFormBuilder) + 16)
+QAbstractFormBuilder (0x0x7f8916281360) 0
+ primary-for QFormBuilder (0x0x7f8916172820)
+
+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 (0x0x7f89162813c0) 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 (0x0x7f8916281600) 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 (0x0x7f8916281840) 0 nearly-empty
+ vptr=((& QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension) + 16)
+
+Class QExtensionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QExtensionManager::QPrivateSignal (0x0x7f8916281b40) 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 (0x0x7f89162bb310) 0
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 16)
+QObject (0x0x7f8916281a80) 0
+ primary-for QExtensionManager (0x0x7f89162bb310)
+QAbstractExtensionManager (0x0x7f8916281ae0) 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 (0x0x7f89163034e0) 0 nearly-empty
+ vptr=((& QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension) + 16)
+
+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 (0x0x7f8916303a80) 0 nearly-empty
+ vptr=((& QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase) + 16)
+
+Class QSqlDatabase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDatabase (0x0x7f8916303d80) 0
+
+Class QSqlDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriver::QPrivateSignal (0x0x7f8916303e40) 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 (0x0x7f89161720d0) 0
+ vptr=((& QSqlDriver::_ZTV10QSqlDriver) + 16)
+QObject (0x0x7f8916303de0) 0
+ primary-for QSqlDriver (0x0x7f89161720d0)
+
+Class QSqlDriverPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriverPlugin::QPrivateSignal (0x0x7f8915fda000) 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 (0x0x7f8916172750) 0
+ vptr=((& QSqlDriverPlugin::_ZTV16QSqlDriverPlugin) + 16)
+QObject (0x0x7f8916303300) 0
+ primary-for QSqlDriverPlugin (0x0x7f8916172750)
+
+Class QSqlError
+ size=8 align=8
+ base size=8 base align=8
+QSqlError (0x0x7f8915fda0c0) 0
+
+Class QSqlField
+ size=40 align=8
+ base size=40 base align=8
+QSqlField (0x0x7f891604b180) 0
+
+Class QSqlRecord
+ size=8 align=8
+ base size=8 base align=8
+QSqlRecord (0x0x7f891604b540) 0
+
+Class QSqlIndex
+ size=80 align=8
+ base size=80 base align=8
+QSqlIndex (0x0x7f89160448f0) 0
+QSqlRecord (0x0x7f891604b600) 0
+
+Class QSqlQuery
+ size=8 align=8
+ base size=8 base align=8
+QSqlQuery (0x0x7f891604bae0) 0
+
+Class QSqlQueryModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlQueryModel::QPrivateSignal (0x0x7f891604bba0) 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 (0x0x7f8916044bc8) 0
+ vptr=((& QSqlQueryModel::_ZTV14QSqlQueryModel) + 16)
+QAbstractTableModel (0x0x7f8916044c30) 0
+ primary-for QSqlQueryModel (0x0x7f8916044bc8)
+QAbstractItemModel (0x0x7f8916044c98) 0
+ primary-for QAbstractTableModel (0x0x7f8916044c30)
+QObject (0x0x7f891604bb40) 0
+ primary-for QAbstractItemModel (0x0x7f8916044c98)
+
+Class QSqlTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlTableModel::QPrivateSignal (0x0x7f891604bd80) 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 (0x0x7f8916044d00) 0
+ vptr=((& QSqlTableModel::_ZTV14QSqlTableModel) + 16)
+QSqlQueryModel (0x0x7f8916044d68) 0
+ primary-for QSqlTableModel (0x0x7f8916044d00)
+QAbstractTableModel (0x0x7f8916044dd0) 0
+ primary-for QSqlQueryModel (0x0x7f8916044d68)
+QAbstractItemModel (0x0x7f8916044e38) 0
+ primary-for QAbstractTableModel (0x0x7f8916044dd0)
+QObject (0x0x7f891604bd20) 0
+ primary-for QAbstractItemModel (0x0x7f8916044e38)
+
+Class QSqlRelation
+ size=72 align=8
+ base size=72 base align=8
+QSqlRelation (0x0x7f891604bf00) 0
+
+Class QSqlRelationalTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlRelationalTableModel::QPrivateSignal (0x0x7f8916149e40) 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 (0x0x7f891614af70) 0
+ vptr=((& QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel) + 16)
+QSqlTableModel (0x0x7f8915d66000) 0
+ primary-for QSqlRelationalTableModel (0x0x7f891614af70)
+QSqlQueryModel (0x0x7f8915d66068) 0
+ primary-for QSqlTableModel (0x0x7f8915d66000)
+QAbstractTableModel (0x0x7f8915d660d0) 0
+ primary-for QSqlQueryModel (0x0x7f8915d66068)
+QAbstractItemModel (0x0x7f8915d66138) 0
+ primary-for QAbstractTableModel (0x0x7f8915d660d0)
+QObject (0x0x7f8916149de0) 0
+ primary-for QAbstractItemModel (0x0x7f8915d66138)
+
+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 (0x0x7f8915d79000) 0
+ vptr=((& QSqlResult::_ZTV10QSqlResult) + 16)
+
+Class QHelpGlobal
+ size=1 align=1
+ base size=0 base align=1
+QHelpGlobal (0x0x7f8915d79120) 0 empty
+
+Class QCompressedHelpInfo
+ size=8 align=8
+ base size=8 base align=8
+QCompressedHelpInfo (0x0x7f8915d79180) 0
+
+Class QHelpContentItem
+ size=8 align=8
+ base size=8 base align=8
+QHelpContentItem (0x0x7f8915d792a0) 0
+
+Class QHelpContentModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentModel::QPrivateSignal (0x0x7f8915d79360) 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 (0x0x7f8915d661a0) 0
+ vptr=((& QHelpContentModel::_ZTV17QHelpContentModel) + 16)
+QAbstractItemModel (0x0x7f8915d66208) 0
+ primary-for QHelpContentModel (0x0x7f8915d661a0)
+QObject (0x0x7f8915d79300) 0
+ primary-for QAbstractItemModel (0x0x7f8915d66208)
+
+Class QHelpContentWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentWidget::QPrivateSignal (0x0x7f8915d794e0) 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 (0x0x7f8915d66270) 0
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 16)
+QTreeView (0x0x7f8915d662d8) 0
+ primary-for QHelpContentWidget (0x0x7f8915d66270)
+QAbstractItemView (0x0x7f8915d66340) 0
+ primary-for QTreeView (0x0x7f8915d662d8)
+QAbstractScrollArea (0x0x7f8915d663a8) 0
+ primary-for QAbstractItemView (0x0x7f8915d66340)
+QFrame (0x0x7f8915d66410) 0
+ primary-for QAbstractScrollArea (0x0x7f8915d663a8)
+QWidget (0x0x7f8916129bd0) 0
+ primary-for QFrame (0x0x7f8915d66410)
+QObject (0x0x7f8915d79420) 0
+ primary-for QWidget (0x0x7f8916129bd0)
+QPaintDevice (0x0x7f8915d79480) 16
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 816)
+
+Class QHelpEngineCore::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngineCore::QPrivateSignal (0x0x7f8915d79600) 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 (0x0x7f8915d66478) 0
+ vptr=((& QHelpEngineCore::_ZTV15QHelpEngineCore) + 16)
+QObject (0x0x7f8915d795a0) 0
+ primary-for QHelpEngineCore (0x0x7f8915d66478)
+
+Class QHelpEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngine::QPrivateSignal (0x0x7f8915d79720) 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 (0x0x7f8915d664e0) 0
+ vptr=((& QHelpEngine::_ZTV11QHelpEngine) + 16)
+QHelpEngineCore (0x0x7f8915d66548) 0
+ primary-for QHelpEngine (0x0x7f8915d664e0)
+QObject (0x0x7f8915d796c0) 0
+ primary-for QHelpEngineCore (0x0x7f8915d66548)
+
+Class QHelpFilterData
+ size=8 align=8
+ base size=8 base align=8
+QHelpFilterData (0x0x7f8915d797e0) 0
+
+Class QHelpFilterEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterEngine::QPrivateSignal (0x0x7f8915d79960) 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 (0x0x7f8915d665b0) 0
+ vptr=((& QHelpFilterEngine::_ZTV17QHelpFilterEngine) + 16)
+QObject (0x0x7f8915d79900) 0
+ primary-for QHelpFilterEngine (0x0x7f8915d665b0)
+
+Class QHelpFilterSettingsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterSettingsWidget::QPrivateSignal (0x0x7f8915d79ae0) 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 (0x0x7f8915d66618) 0
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 16)
+QWidget (0x0x7f8916129e70) 0
+ primary-for QHelpFilterSettingsWidget (0x0x7f8915d66618)
+QObject (0x0x7f8915d79a20) 0
+ primary-for QWidget (0x0x7f8916129e70)
+QPaintDevice (0x0x7f8915d79a80) 16
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 448)
+
+Class QHelpIndexModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexModel::QPrivateSignal (0x0x7f8915d79d80) 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 (0x0x7f8915d66680) 0
+ vptr=((& QHelpIndexModel::_ZTV15QHelpIndexModel) + 16)
+QStringListModel (0x0x7f8915d666e8) 0
+ primary-for QHelpIndexModel (0x0x7f8915d66680)
+QAbstractListModel (0x0x7f8915d66750) 0
+ primary-for QStringListModel (0x0x7f8915d666e8)
+QAbstractItemModel (0x0x7f8915d667b8) 0
+ primary-for QAbstractListModel (0x0x7f8915d66750)
+QObject (0x0x7f8915d79d20) 0
+ primary-for QAbstractItemModel (0x0x7f8915d667b8)
+
+Class QHelpIndexWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexWidget::QPrivateSignal (0x0x7f8915d79f00) 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 (0x0x7f8915d66820) 0
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 16)
+QListView (0x0x7f8915d66888) 0
+ primary-for QHelpIndexWidget (0x0x7f8915d66820)
+QAbstractItemView (0x0x7f8915d668f0) 0
+ primary-for QListView (0x0x7f8915d66888)
+QAbstractScrollArea (0x0x7f8915d66958) 0
+ primary-for QAbstractItemView (0x0x7f8915d668f0)
+QFrame (0x0x7f8915d669c0) 0
+ primary-for QAbstractScrollArea (0x0x7f8915d66958)
+QWidget (0x0x7f8915e38070) 0
+ primary-for QFrame (0x0x7f8915d669c0)
+QObject (0x0x7f8915d79e40) 0
+ primary-for QWidget (0x0x7f8915e38070)
+QPaintDevice (0x0x7f8915d79ea0) 16
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 800)
+
+Class QHelpLink
+ size=32 align=8
+ base size=32 base align=8
+QHelpLink (0x0x7f8915e4b000) 0
+
+Class QHelpSearchQuery
+ size=32 align=8
+ base size=32 base align=8
+QHelpSearchQuery (0x0x7f8915e4b060) 0
+
+Class QHelpSearchResult
+ size=8 align=8
+ base size=8 base align=8
+QHelpSearchResult (0x0x7f8915e4b540) 0
+
+Class QHelpSearchEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchEngine::QPrivateSignal (0x0x7f8915e4b660) 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 (0x0x7f8915d66a28) 0
+ vptr=((& QHelpSearchEngine::_ZTV17QHelpSearchEngine) + 16)
+QObject (0x0x7f8915e4b600) 0
+ primary-for QHelpSearchEngine (0x0x7f8915d66a28)
+
+Class QHelpSearchQueryWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchQueryWidget::QPrivateSignal (0x0x7f8915e4b7e0) 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 (0x0x7f8915d66a90) 0
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 16)
+QWidget (0x0x7f8915e388c0) 0
+ primary-for QHelpSearchQueryWidget (0x0x7f8915d66a90)
+QObject (0x0x7f8915e4b720) 0
+ primary-for QWidget (0x0x7f8915e388c0)
+QPaintDevice (0x0x7f8915e4b780) 16
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 448)
+
+Class QHelpSearchResultWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchResultWidget::QPrivateSignal (0x0x7f8915e4b960) 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 (0x0x7f8915d66af8) 0
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 16)
+QWidget (0x0x7f8915e389a0) 0
+ primary-for QHelpSearchResultWidget (0x0x7f8915d66af8)
+QObject (0x0x7f8915e4b8a0) 0
+ primary-for QWidget (0x0x7f8915e389a0)
+QPaintDevice (0x0x7f8915e4b900) 16
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 448)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f8915e4ba20) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f8915f18ae0) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f8915bb3420) 0 empty
+
+Vtable for QAbstractNetworkCache
+QAbstractNetworkCache::_ZTV21QAbstractNetworkCache: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractNetworkCache)
+16 (int (*)(...))QAbstractNetworkCache::metaObject
+24 (int (*)(...))QAbstractNetworkCache::qt_metacast
+32 (int (*)(...))QAbstractNetworkCache::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
+
+Class QAbstractNetworkCache
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNetworkCache (0x0x7f8915bb0750) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+QObject (0x0x7f8915bb33c0) 0
+ primary-for QAbstractNetworkCache (0x0x7f8915bb0750)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f8915bb3660) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSocket)
+16 (int (*)(...))QAbstractSocket::metaObject
+24 (int (*)(...))QAbstractSocket::qt_metacast
+32 (int (*)(...))QAbstractSocket::qt_metacall
+40 (int (*)(...))QAbstractSocket::~QAbstractSocket
+48 (int (*)(...))QAbstractSocket::~QAbstractSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7f8915bb07b8) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+QIODevice (0x0x7f8915b85700) 0
+ primary-for QAbstractSocket (0x0x7f8915bb07b8)
+QObject (0x0x7f8915bb35a0) 0
+ primary-for QIODevice (0x0x7f8915b85700)
+QIODeviceBase (0x0x7f8915bb3600) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f8915c38420) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f8915c384e0) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f8915ce9d20) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f891597e5a0) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f89159f0de0) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f8915a85ae0) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f8915b0ca20) 0 empty
+
+Vtable for QDnsLookup
+QDnsLookup::_ZTV10QDnsLookup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDnsLookup)
+16 (int (*)(...))QDnsLookup::metaObject
+24 (int (*)(...))QDnsLookup::qt_metacast
+32 (int (*)(...))QDnsLookup::qt_metacall
+40 (int (*)(...))QDnsLookup::~QDnsLookup
+48 (int (*)(...))QDnsLookup::~QDnsLookup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDnsLookup
+ size=16 align=8
+ base size=16 base align=8
+QDnsLookup (0x0x7f8915b125b0) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+QObject (0x0x7f8915b0c9c0) 0
+ primary-for QDnsLookup (0x0x7f8915b125b0)
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f8915b0cde0) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpSocket)
+16 (int (*)(...))QTcpSocket::metaObject
+24 (int (*)(...))QTcpSocket::qt_metacast
+32 (int (*)(...))QTcpSocket::qt_metacall
+40 (int (*)(...))QTcpSocket::~QTcpSocket
+48 (int (*)(...))QTcpSocket::~QTcpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7f8915b12618) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+QAbstractSocket (0x0x7f8915b12680) 0
+ primary-for QTcpSocket (0x0x7f8915b12618)
+QIODevice (0x0x7f8915b34070) 0
+ primary-for QAbstractSocket (0x0x7f8915b12680)
+QObject (0x0x7f8915b0cd20) 0
+ primary-for QIODevice (0x0x7f8915b34070)
+QIODeviceBase (0x0x7f8915b0cd80) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f8915b4f2a0) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f89158104e0) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f8915874420) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslSocket)
+16 (int (*)(...))QSslSocket::metaObject
+24 (int (*)(...))QSslSocket::qt_metacast
+32 (int (*)(...))QSslSocket::qt_metacall
+40 (int (*)(...))QSslSocket::~QSslSocket
+48 (int (*)(...))QSslSocket::~QSslSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QSslSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QSslSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QSslSocket::bytesAvailable
+184 (int (*)(...))QSslSocket::bytesToWrite
+192 (int (*)(...))QSslSocket::canReadLine
+200 (int (*)(...))QSslSocket::waitForReadyRead
+208 (int (*)(...))QSslSocket::waitForBytesWritten
+216 (int (*)(...))QSslSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QSslSocket::skipData
+240 (int (*)(...))QSslSocket::writeData
+248 (int (*)(...))QSslSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QSslSocket::connectToHost
+272 (int (*)(...))QSslSocket::disconnectFromHost
+280 (int (*)(...))QSslSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QSslSocket::setSocketDescriptor
+304 (int (*)(...))QSslSocket::setSocketOption
+312 (int (*)(...))QSslSocket::socketOption
+320 (int (*)(...))QSslSocket::waitForConnected
+328 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7f8915867c30) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+QTcpSocket (0x0x7f8915867c98) 0
+ primary-for QSslSocket (0x0x7f8915867c30)
+QAbstractSocket (0x0x7f8915867d00) 0
+ primary-for QTcpSocket (0x0x7f8915867c98)
+QIODevice (0x0x7f8915823d90) 0
+ primary-for QAbstractSocket (0x0x7f8915867d00)
+QObject (0x0x7f8915874360) 0
+ primary-for QIODevice (0x0x7f8915823d90)
+QIODeviceBase (0x0x7f89158743c0) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f8915874600) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f8915874660) 0
+
+Vtable for QDtlsClientVerifier
+QDtlsClientVerifier::_ZTV19QDtlsClientVerifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDtlsClientVerifier)
+16 (int (*)(...))QDtlsClientVerifier::metaObject
+24 (int (*)(...))QDtlsClientVerifier::qt_metacast
+32 (int (*)(...))QDtlsClientVerifier::qt_metacall
+40 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+48 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtlsClientVerifier
+ size=16 align=8
+ base size=16 base align=8
+QDtlsClientVerifier (0x0x7f8915867d68) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+QObject (0x0x7f89158745a0) 0
+ primary-for QDtlsClientVerifier (0x0x7f8915867d68)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f8915874840) 0 empty
+
+Vtable for QDtls
+QDtls::_ZTV5QDtls: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDtls)
+16 (int (*)(...))QDtls::metaObject
+24 (int (*)(...))QDtls::qt_metacast
+32 (int (*)(...))QDtls::qt_metacall
+40 (int (*)(...))QDtls::~QDtls
+48 (int (*)(...))QDtls::~QDtls
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtls
+ size=16 align=8
+ base size=16 base align=8
+QDtls (0x0x7f8915867dd0) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+QObject (0x0x7f89158747e0) 0
+ primary-for QDtls (0x0x7f8915867dd0)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f89158749c0) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f8915874ae0) 0
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f891555cae0) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f89155dbf00) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7f8915674ba0) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f8915708600) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f89153a0060) 0 empty
+
+Vtable for QHttpMultiPart
+QHttpMultiPart::_ZTV14QHttpMultiPart: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QHttpMultiPart)
+16 (int (*)(...))QHttpMultiPart::metaObject
+24 (int (*)(...))QHttpMultiPart::qt_metacast
+32 (int (*)(...))QHttpMultiPart::qt_metacall
+40 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+48 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHttpMultiPart
+ size=16 align=8
+ base size=16 base align=8
+QHttpMultiPart (0x0x7f89153949c0) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+QObject (0x0x7f89153a0000) 0
+ primary-for QHttpMultiPart (0x0x7f89153949c0)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f89153a0240) 0 empty
+
+Vtable for QLocalServer
+QLocalServer::_ZTV12QLocalServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalServer)
+16 (int (*)(...))QLocalServer::metaObject
+24 (int (*)(...))QLocalServer::qt_metacast
+32 (int (*)(...))QLocalServer::qt_metacall
+40 (int (*)(...))QLocalServer::~QLocalServer
+48 (int (*)(...))QLocalServer::~QLocalServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalServer::hasPendingConnections
+120 (int (*)(...))QLocalServer::nextPendingConnection
+128 (int (*)(...))QLocalServer::incomingConnection
+
+Class QLocalServer
+ size=16 align=8
+ base size=16 base align=8
+QLocalServer (0x0x7f8915394a28) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+QObject (0x0x7f89153a01e0) 0
+ primary-for QLocalServer (0x0x7f8915394a28)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f89153a0900) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalSocket)
+16 (int (*)(...))QLocalSocket::metaObject
+24 (int (*)(...))QLocalSocket::qt_metacast
+32 (int (*)(...))QLocalSocket::qt_metacall
+40 (int (*)(...))QLocalSocket::~QLocalSocket
+48 (int (*)(...))QLocalSocket::~QLocalSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalSocket::isSequential
+120 (int (*)(...))QLocalSocket::open
+128 (int (*)(...))QLocalSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QLocalSocket::bytesAvailable
+184 (int (*)(...))QLocalSocket::bytesToWrite
+192 (int (*)(...))QLocalSocket::canReadLine
+200 (int (*)(...))QLocalSocket::waitForReadyRead
+208 (int (*)(...))QLocalSocket::waitForBytesWritten
+216 (int (*)(...))QLocalSocket::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QLocalSocket::skipData
+240 (int (*)(...))QLocalSocket::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7f8915394b60) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+QIODevice (0x0x7f891537aee0) 0
+ primary-for QLocalSocket (0x0x7f8915394b60)
+QObject (0x0x7f89153a0840) 0
+ primary-for QIODevice (0x0x7f891537aee0)
+QIODeviceBase (0x0x7f89153a08a0) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f89153a0a80) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f89154c6f60) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f8915157cc0) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QNetworkAccessManager)
+16 (int (*)(...))QNetworkAccessManager::metaObject
+24 (int (*)(...))QNetworkAccessManager::qt_metacast
+32 (int (*)(...))QNetworkAccessManager::qt_metacall
+40 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+48 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkAccessManager::supportedSchemes
+120 (int (*)(...))QNetworkAccessManager::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7f8915164270) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+QObject (0x0x7f8915157c60) 0
+ primary-for QNetworkAccessManager (0x0x7f8915164270)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f8915157e40) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f8915208f00) 0 empty
+
+Vtable for QNetworkCookieJar
+QNetworkCookieJar::_ZTV17QNetworkCookieJar: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkCookieJar)
+16 (int (*)(...))QNetworkCookieJar::metaObject
+24 (int (*)(...))QNetworkCookieJar::qt_metacast
+32 (int (*)(...))QNetworkCookieJar::qt_metacall
+40 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+48 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkCookieJar::cookiesForUrl
+120 (int (*)(...))QNetworkCookieJar::setCookiesFromUrl
+128 (int (*)(...))QNetworkCookieJar::insertCookie
+136 (int (*)(...))QNetworkCookieJar::updateCookie
+144 (int (*)(...))QNetworkCookieJar::deleteCookie
+152 (int (*)(...))QNetworkCookieJar::validateCookie
+
+Class QNetworkCookieJar
+ size=16 align=8
+ base size=16 base align=8
+QNetworkCookieJar (0x0x7f8915214750) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+QObject (0x0x7f8915208ea0) 0
+ primary-for QNetworkCookieJar (0x0x7f8915214750)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f89152300c0) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f891529e600) 0 empty
+
+Vtable for QNetworkDiskCache
+QNetworkDiskCache::_ZTV17QNetworkDiskCache: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkDiskCache)
+16 (int (*)(...))QNetworkDiskCache::metaObject
+24 (int (*)(...))QNetworkDiskCache::qt_metacast
+32 (int (*)(...))QNetworkDiskCache::qt_metacall
+40 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+48 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkDiskCache::metaData
+120 (int (*)(...))QNetworkDiskCache::updateMetaData
+128 (int (*)(...))QNetworkDiskCache::data
+136 (int (*)(...))QNetworkDiskCache::remove
+144 (int (*)(...))QNetworkDiskCache::cacheSize
+152 (int (*)(...))QNetworkDiskCache::prepare
+160 (int (*)(...))QNetworkDiskCache::insert
+168 (int (*)(...))QNetworkDiskCache::clear
+176 (int (*)(...))QNetworkDiskCache::expire
+
+Class QNetworkDiskCache
+ size=16 align=8
+ base size=16 base align=8
+QNetworkDiskCache (0x0x7f8915291f08) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+QAbstractNetworkCache (0x0x7f8915291f70) 0
+ primary-for QNetworkDiskCache (0x0x7f8915291f08)
+QObject (0x0x7f891529e5a0) 0
+ primary-for QAbstractNetworkCache (0x0x7f8915291f70)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f891529e780) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f8915311240) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f8914fb5600) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f8915059e40) 0
+
+Vtable for QNetworkProxyFactory
+QNetworkProxyFactory::_ZTV20QNetworkProxyFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QNetworkProxyFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNetworkProxyFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyFactory (0x0x7f89150fdae0) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f89150fdd20) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QNetworkReply)
+16 (int (*)(...))QNetworkReply::metaObject
+24 (int (*)(...))QNetworkReply::qt_metacast
+32 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::writeData
+248 (int (*)(...))QNetworkReply::setReadBufferSize
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QNetworkReply::ignoreSslErrors
+272 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+288 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7f8915103a28) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+QIODevice (0x0x7f891507fcb0) 0
+ primary-for QNetworkReply (0x0x7f8915103a28)
+QObject (0x0x7f89150fdc60) 0
+ primary-for QIODevice (0x0x7f891507fcb0)
+QIODeviceBase (0x0x7f89150fdcc0) 0 empty
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7f8914d710c0) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f8914dacde0) 0 empty
+
+Vtable for QTcpServer
+QTcpServer::_ZTV10QTcpServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpServer)
+16 (int (*)(...))QTcpServer::metaObject
+24 (int (*)(...))QTcpServer::qt_metacast
+32 (int (*)(...))QTcpServer::qt_metacall
+40 (int (*)(...))QTcpServer::~QTcpServer
+48 (int (*)(...))QTcpServer::~QTcpServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QTcpServer::incomingConnection
+
+Class QTcpServer
+ size=16 align=8
+ base size=16 base align=8
+QTcpServer (0x0x7f8914db6bc8) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+QObject (0x0x7f8914dacd80) 0
+ primary-for QTcpServer (0x0x7f8914db6bc8)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f8914dacf60) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f8914e548a0) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f8914eb4540) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f8914f39000) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f8914b7b240) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f8914bfbc60) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUdpSocket)
+16 (int (*)(...))QUdpSocket::metaObject
+24 (int (*)(...))QUdpSocket::qt_metacast
+32 (int (*)(...))QUdpSocket::qt_metacall
+40 (int (*)(...))QUdpSocket::~QUdpSocket
+48 (int (*)(...))QUdpSocket::~QUdpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7f8914c07958) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+QAbstractSocket (0x0x7f8914c079c0) 0
+ primary-for QUdpSocket (0x0x7f8914c07958)
+QIODevice (0x0x7f8914f41d90) 0
+ primary-for QAbstractSocket (0x0x7f8914c079c0)
+QObject (0x0x7f8914bfbba0) 0
+ primary-for QIODevice (0x0x7f8914f41d90)
+QIODeviceBase (0x0x7f8914bfbc00) 0 empty
+
+Class QAbstractPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractPrintDialog::QPrivateSignal (0x0x7f8914bfbf00) 0 empty
+
+Vtable for QAbstractPrintDialog
+QAbstractPrintDialog::_ZTV20QAbstractPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAbstractPrintDialog)
+16 (int (*)(...))QAbstractPrintDialog::metaObject
+24 (int (*)(...))QAbstractPrintDialog::qt_metacast
+32 (int (*)(...))QAbstractPrintDialog::qt_metacall
+40 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+48 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+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 (*)(...))(& _ZTI20QAbstractPrintDialog)
+488 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD1Ev
+496 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD0Ev
+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 QAbstractPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QAbstractPrintDialog (0x0x7f8914c07a28) 0
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 16)
+QDialog (0x0x7f8914c07a90) 0
+ primary-for QAbstractPrintDialog (0x0x7f8914c07a28)
+QWidget (0x0x7f8914c25000) 0
+ primary-for QDialog (0x0x7f8914c07a90)
+QObject (0x0x7f8914bfbe40) 0
+ primary-for QWidget (0x0x7f8914c25000)
+QPaintDevice (0x0x7f8914bfbea0) 16
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 488)
+
+Class QPageSetupDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPageSetupDialog::QPrivateSignal (0x0x7f8914c3d600) 0 empty
+
+Vtable for QPageSetupDialog
+QPageSetupDialog::_ZTV16QPageSetupDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QPageSetupDialog)
+16 (int (*)(...))QPageSetupDialog::metaObject
+24 (int (*)(...))QPageSetupDialog::qt_metacast
+32 (int (*)(...))QPageSetupDialog::qt_metacall
+40 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+48 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+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 (*)(...))QPageSetupDialog::exec
+448 (int (*)(...))QPageSetupDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI16QPageSetupDialog)
+488 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD1Ev
+496 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD0Ev
+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 QPageSetupDialog
+ size=40 align=8
+ base size=40 base align=8
+QPageSetupDialog (0x0x7f8914c07bc8) 0
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 16)
+QDialog (0x0x7f8914c07c30) 0
+ primary-for QPageSetupDialog (0x0x7f8914c07bc8)
+QWidget (0x0x7f8914c25930) 0
+ primary-for QDialog (0x0x7f8914c07c30)
+QObject (0x0x7f8914c3d540) 0
+ primary-for QWidget (0x0x7f8914c25930)
+QPaintDevice (0x0x7f8914c3d5a0) 16
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 488)
+
+Class QPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintDialog::QPrivateSignal (0x0x7f8914c3d840) 0 empty
+
+Vtable for QPrintDialog
+QPrintDialog::_ZTV12QPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintDialog)
+16 (int (*)(...))QPrintDialog::metaObject
+24 (int (*)(...))QPrintDialog::qt_metacast
+32 (int (*)(...))QPrintDialog::qt_metacall
+40 (int (*)(...))QPrintDialog::~QPrintDialog
+48 (int (*)(...))QPrintDialog::~QPrintDialog
+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 (*)(...))QPrintDialog::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 (*)(...))QPrintDialog::exec
+448 (int (*)(...))QPrintDialog::done
+456 (int (*)(...))QPrintDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QPrintDialog)
+488 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD1Ev
+496 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD0Ev
+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 QPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintDialog (0x0x7f8914c07c98) 0
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 16)
+QAbstractPrintDialog (0x0x7f8914c07d00) 0
+ primary-for QPrintDialog (0x0x7f8914c07c98)
+QDialog (0x0x7f8914c07d68) 0
+ primary-for QAbstractPrintDialog (0x0x7f8914c07d00)
+QWidget (0x0x7f8914c25af0) 0
+ primary-for QDialog (0x0x7f8914c07d68)
+QObject (0x0x7f8914c3d780) 0
+ primary-for QWidget (0x0x7f8914c25af0)
+QPaintDevice (0x0x7f8914c3d7e0) 16
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 488)
+
+Vtable for QPrinter
+QPrinter::_ZTV8QPrinter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPrinter)
+16 (int (*)(...))QPrinter::~QPrinter
+24 (int (*)(...))QPrinter::~QPrinter
+32 (int (*)(...))QPrinter::devType
+40 (int (*)(...))QPrinter::paintEngine
+48 (int (*)(...))QPrinter::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPrinter::newPage
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPrinter
+ size=32 align=8
+ base size=32 base align=8
+QPrinter (0x0x7f8914c07dd0) 0
+ vptr=((& QPrinter::_ZTV8QPrinter) + 16)
+QPagedPaintDevice (0x0x7f8914c07e38) 0
+ primary-for QPrinter (0x0x7f8914c07dd0)
+QPaintDevice (0x0x7f8914c3d9c0) 0
+ primary-for QPagedPaintDevice (0x0x7f8914c07e38)
+
+Vtable for QPrintEngine
+QPrintEngine::_ZTV12QPrintEngine: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintEngine)
+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 QPrintEngine
+ size=8 align=8
+ base size=8 base align=8
+QPrintEngine (0x0x7f8914c3dcc0) 0 nearly-empty
+ vptr=((& QPrintEngine::_ZTV12QPrintEngine) + 16)
+
+Class QPrinterInfo
+ size=8 align=8
+ base size=8 base align=8
+QPrinterInfo (0x0x7f8914c3df00) 0
+
+Class QPrintPreviewDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewDialog::QPrivateSignal (0x0x7f8914ce7180) 0 empty
+
+Vtable for QPrintPreviewDialog
+QPrintPreviewDialog::_ZTV19QPrintPreviewDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+16 (int (*)(...))QPrintPreviewDialog::metaObject
+24 (int (*)(...))QPrintPreviewDialog::qt_metacast
+32 (int (*)(...))QPrintPreviewDialog::qt_metacall
+40 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+48 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+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 (*)(...))QPrintPreviewDialog::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 (*)(...))QPrintPreviewDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+488 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD1Ev
+496 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD0Ev
+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 QPrintPreviewDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewDialog (0x0x7f8914c07ea0) 0
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 16)
+QDialog (0x0x7f8914c07f08) 0
+ primary-for QPrintPreviewDialog (0x0x7f8914c07ea0)
+QWidget (0x0x7f8914cc8380) 0
+ primary-for QDialog (0x0x7f8914c07f08)
+QObject (0x0x7f8914ce70c0) 0
+ primary-for QWidget (0x0x7f8914cc8380)
+QPaintDevice (0x0x7f8914ce7120) 16
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 488)
+
+Class QPrintPreviewWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewWidget::QPrivateSignal (0x0x7f8914ce73c0) 0 empty
+
+Vtable for QPrintPreviewWidget
+QPrintPreviewWidget::_ZTV19QPrintPreviewWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewWidget)
+16 (int (*)(...))QPrintPreviewWidget::metaObject
+24 (int (*)(...))QPrintPreviewWidget::qt_metacast
+32 (int (*)(...))QPrintPreviewWidget::qt_metacall
+40 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+48 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+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 (*)(...))QPrintPreviewWidget::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 (*)(...))(& _ZTI19QPrintPreviewWidget)
+448 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD1Ev
+456 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD0Ev
+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 QPrintPreviewWidget
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewWidget (0x0x7f8914c07f70) 0
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 16)
+QWidget (0x0x7f8914cc8540) 0
+ primary-for QPrintPreviewWidget (0x0x7f8914c07f70)
+QObject (0x0x7f8914ce7300) 0
+ primary-for QWidget (0x0x7f8914cc8540)
+QPaintDevice (0x0x7f8914ce7360) 16
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 448)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f8914ce7540) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f891498e5a0) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f891498e840) 0 empty
+
+Vtable for QJSEngine
+QJSEngine::_ZTV9QJSEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QJSEngine)
+16 (int (*)(...))QJSEngine::metaObject
+24 (int (*)(...))QJSEngine::qt_metacast
+32 (int (*)(...))QJSEngine::qt_metacall
+40 (int (*)(...))QJSEngine::~QJSEngine
+48 (int (*)(...))QJSEngine::~QJSEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QJSEngine
+ size=24 align=8
+ base size=24 base align=8
+QJSEngine (0x0x7f8914d2e618) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+QObject (0x0x7f891498e7e0) 0
+ primary-for QJSEngine (0x0x7f8914d2e618)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f891498ef00) 0
+
+Vtable for QQmlParserStatus
+QQmlParserStatus::_ZTV16QQmlParserStatus: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlParserStatus)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlParserStatus
+ size=16 align=8
+ base size=16 base align=8
+QQmlParserStatus (0x0x7f8914a07120) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f8914a07c00) 0
+
+Vtable for QQmlPropertyValueSource
+QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQmlPropertyValueSource)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlPropertyValueSource
+ size=8 align=8
+ base size=8 base align=8
+QQmlPropertyValueSource (0x0x7f8914a07de0) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=176 align=8
+ base size=170 base align=8
+QQmlPrivate::RegisterType (0x0x7f8914a695a0) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=152 align=8
+ base size=152 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7f8914a69600) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f8914a69660) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f8914a696c0) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f8914a69720) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7f8914a69a80) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f8914a69b40) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f8914a69ba0) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7f8914a69c00) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7f8914a69c60) 0
+
+Class QQmlPrivate::AOTCompiledFunction
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::AOTCompiledFunction (0x0x7f8914a69cc0) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f8914a69d20) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f8914a69d80) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7f8914a69de0) 0
+
+Vtable for QQmlAbstractUrlInterceptor
+QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QQmlAbstractUrlInterceptor)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlAbstractUrlInterceptor
+ size=8 align=8
+ base size=8 base align=8
+QQmlAbstractUrlInterceptor (0x0x7f891482d000) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f891482d060) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7f8914857ae0) 0 empty
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 (int (*)(...))QQmlImageProviderBase::metaObject
+24 (int (*)(...))QQmlImageProviderBase::qt_metacast
+32 (int (*)(...))QQmlImageProviderBase::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 QQmlImageProviderBase
+ size=16 align=8
+ base size=16 base align=8
+QQmlImageProviderBase (0x0x7f8914867410) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+QObject (0x0x7f8914857a80) 0
+ primary-for QQmlImageProviderBase (0x0x7f8914867410)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f8914857f00) 0 empty
+
+Vtable for QQmlEngine
+QQmlEngine::_ZTV10QQmlEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQmlEngine)
+16 (int (*)(...))QQmlEngine::metaObject
+24 (int (*)(...))QQmlEngine::qt_metacast
+32 (int (*)(...))QQmlEngine::qt_metacall
+40 (int (*)(...))QQmlEngine::~QQmlEngine
+48 (int (*)(...))QQmlEngine::~QQmlEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngine (0x0x7f8914867548) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+QJSEngine (0x0x7f89148675b0) 0
+ primary-for QQmlEngine (0x0x7f8914867548)
+QObject (0x0x7f8914857ea0) 0
+ primary-for QJSEngine (0x0x7f89148675b0)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f89148c9240) 0 empty
+
+Vtable for QQmlApplicationEngine
+QQmlApplicationEngine::_ZTV21QQmlApplicationEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlApplicationEngine)
+16 (int (*)(...))QQmlApplicationEngine::metaObject
+24 (int (*)(...))QQmlApplicationEngine::qt_metacast
+32 (int (*)(...))QQmlApplicationEngine::qt_metacall
+40 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+48 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlApplicationEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlApplicationEngine (0x0x7f8914867618) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+QQmlEngine (0x0x7f8914867680) 0
+ primary-for QQmlApplicationEngine (0x0x7f8914867618)
+QJSEngine (0x0x7f89148676e8) 0
+ primary-for QQmlEngine (0x0x7f8914867680)
+QObject (0x0x7f89148c91e0) 0
+ primary-for QJSEngine (0x0x7f89148676e8)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f89148c9420) 0 empty
+
+Vtable for QQmlComponent
+QQmlComponent::_ZTV13QQmlComponent: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlComponent)
+16 (int (*)(...))QQmlComponent::metaObject
+24 (int (*)(...))QQmlComponent::qt_metacast
+32 (int (*)(...))QQmlComponent::qt_metacall
+40 (int (*)(...))QQmlComponent::~QQmlComponent
+48 (int (*)(...))QQmlComponent::~QQmlComponent
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlComponent::create
+120 (int (*)(...))QQmlComponent::beginCreate
+128 (int (*)(...))QQmlComponent::completeCreate
+
+Class QQmlComponent
+ size=16 align=8
+ base size=16 base align=8
+QQmlComponent (0x0x7f8914867750) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+QObject (0x0x7f89148c93c0) 0
+ primary-for QQmlComponent (0x0x7f8914867750)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f89148c9a80) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7f89148c9ae0) 0
+
+Vtable for QQmlContext
+QQmlContext::_ZTV11QQmlContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QQmlContext)
+16 (int (*)(...))QQmlContext::metaObject
+24 (int (*)(...))QQmlContext::qt_metacast
+32 (int (*)(...))QQmlContext::qt_metacall
+40 (int (*)(...))QQmlContext::~QQmlContext
+48 (int (*)(...))QQmlContext::~QQmlContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlContext
+ size=16 align=8
+ base size=16 base align=8
+QQmlContext (0x0x7f89148677b8) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+QObject (0x0x7f89148c9a20) 0
+ primary-for QQmlContext (0x0x7f89148677b8)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f89148c9d80) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f891493f000) 0 empty
+
+Vtable for QQmlExpression
+QQmlExpression::_ZTV14QQmlExpression: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QQmlExpression)
+16 (int (*)(...))QQmlExpression::metaObject
+24 (int (*)(...))QQmlExpression::qt_metacast
+32 (int (*)(...))QQmlExpression::qt_metacall
+40 (int (*)(...))QQmlExpression::~QQmlExpression
+48 (int (*)(...))QQmlExpression::~QQmlExpression
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlExpression
+ size=16 align=8
+ base size=16 base align=8
+QQmlExpression (0x0x7f8914867820) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+QObject (0x0x7f89148c9f60) 0
+ primary-for QQmlExpression (0x0x7f8914867820)
+
+Vtable for QQmlTypesExtensionInterface
+QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QQmlTypesExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlTypesExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlTypesExtensionInterface (0x0x7f891493f180) 0 nearly-empty
+ vptr=((& QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface) + 16)
+
+Vtable for QQmlExtensionInterface
+QQmlExtensionInterface::_ZTV22QQmlExtensionInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QQmlExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlExtensionInterface (0x0x7f8914867888) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+QQmlTypesExtensionInterface (0x0x7f891493f1e0) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f8914867888)
+
+Vtable for QQmlEngineExtensionInterface
+QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QQmlEngineExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlEngineExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlEngineExtensionInterface (0x0x7f891493f240) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f891493f7e0) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+16 (int (*)(...))QQmlExtensionPlugin::metaObject
+24 (int (*)(...))QQmlExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlExtensionPlugin::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 (*)(...))QQmlExtensionPlugin::unregisterTypes
+128 (int (*)(...))QQmlExtensionPlugin::initializeEngine
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+152 0
+160 0
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7f891494a4d0) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+QObject (0x0x7f891493f720) 0
+ primary-for QQmlExtensionPlugin (0x0x7f891494a4d0)
+QQmlExtensionInterface (0x0x7f89148678f0) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+QQmlTypesExtensionInterface (0x0x7f891493f780) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f89148678f0)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7f891493fa20) 0 empty
+
+Vtable for QQmlEngineExtensionPlugin
+QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+16 (int (*)(...))QQmlEngineExtensionPlugin::metaObject
+24 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacall
+40 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+48 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlEngineExtensionPlugin::initializeEngine
+120 (int (*)(...))-16
+128 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+136 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD1Ev
+144 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD0Ev
+152 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlEngineExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngineExtensionPlugin (0x0x7f891494a690) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+QObject (0x0x7f891493f960) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7f891494a690)
+QQmlEngineExtensionInterface (0x0x7f891493f9c0) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f891493fae0) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f891493fba0) 0 empty
+
+Vtable for QQmlFileSelector
+QQmlFileSelector::_ZTV16QQmlFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlFileSelector)
+16 (int (*)(...))QQmlFileSelector::metaObject
+24 (int (*)(...))QQmlFileSelector::qt_metacast
+32 (int (*)(...))QQmlFileSelector::qt_metacall
+40 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+48 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QQmlFileSelector (0x0x7f89148679c0) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+QObject (0x0x7f891493fb40) 0
+ primary-for QQmlFileSelector (0x0x7f89148679c0)
+
+Vtable for QQmlIncubator
+QQmlIncubator::_ZTV13QQmlIncubator: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlIncubator)
+16 (int (*)(...))QQmlIncubator::~QQmlIncubator
+24 (int (*)(...))QQmlIncubator::~QQmlIncubator
+32 (int (*)(...))QQmlIncubator::statusChanged
+40 (int (*)(...))QQmlIncubator::setInitialState
+
+Class QQmlIncubator
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubator (0x0x7f891493fd20) 0
+ vptr=((& QQmlIncubator::_ZTV13QQmlIncubator) + 16)
+
+Vtable for QQmlIncubationController
+QQmlIncubationController::_ZTV24QQmlIncubationController: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQmlIncubationController)
+16 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+24 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+32 (int (*)(...))QQmlIncubationController::incubatingObjectCountChanged
+
+Class QQmlIncubationController
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubationController (0x0x7f891493fd80) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f8914867a28) 0
+QDebug (0x0x7f8914867a90) 0
+QIODeviceBase (0x0x7f891493fde0) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7f8914618e40) 0
+
+Vtable for QQmlNetworkAccessManagerFactory
+QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QQmlNetworkAccessManagerFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlNetworkAccessManagerFactory
+ size=8 align=8
+ base size=8 base align=8
+QQmlNetworkAccessManagerFactory (0x0x7f8914618ea0) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f8914618f00) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f89146a9240) 0 empty
+
+Vtable for QQmlPropertyMap
+QQmlPropertyMap::_ZTV15QQmlPropertyMap: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQmlPropertyMap)
+16 (int (*)(...))QQmlPropertyMap::metaObject
+24 (int (*)(...))QQmlPropertyMap::qt_metacast
+32 (int (*)(...))QQmlPropertyMap::qt_metacall
+40 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+48 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlPropertyMap::updateValue
+
+Class QQmlPropertyMap
+ size=16 align=8
+ base size=16 base align=8
+QQmlPropertyMap (0x0x7f891469fbc8) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+QObject (0x0x7f89146a91e0) 0
+ primary-for QQmlPropertyMap (0x0x7f891469fbc8)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f89146a9480) 0 empty
+
+Vtable for QQuickTransform
+QQuickTransform::_ZTV15QQuickTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQuickTransform)
+16 (int (*)(...))QQuickTransform::metaObject
+24 (int (*)(...))QQuickTransform::qt_metacast
+32 (int (*)(...))QQuickTransform::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 QQuickTransform
+ size=16 align=8
+ base size=16 base align=8
+QQuickTransform (0x0x7f891469fc30) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+QObject (0x0x7f89146a9420) 0
+ primary-for QQuickTransform (0x0x7f891469fc30)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f89146a96c0) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f89146a9720) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f89146a9780) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickItem)
+16 (int (*)(...))QQuickItem::metaObject
+24 (int (*)(...))QQuickItem::qt_metacast
+32 (int (*)(...))QQuickItem::qt_metacall
+40 (int (*)(...))QQuickItem::~QQuickItem
+48 (int (*)(...))QQuickItem::~QQuickItem
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickItem::isTextureProvider
+152 (int (*)(...))QQuickItem::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickItem::updatePaintNode
+368 (int (*)(...))QQuickItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))-16
+392 (int (*)(...))(& _ZTI10QQuickItem)
+400 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7f891468c690) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+QObject (0x0x7f89146a9600) 0
+ primary-for QQuickItem (0x0x7f891468c690)
+QQmlParserStatus (0x0x7f89146a9660) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 400)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f891472b900) 0 empty
+
+Vtable for QQuickFramebufferObject::Renderer
+QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN23QQuickFramebufferObject8RendererE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QQuickFramebufferObject::Renderer::createFramebufferObject
+48 (int (*)(...))QQuickFramebufferObject::Renderer::synchronize
+
+Class QQuickFramebufferObject::Renderer
+ size=16 align=8
+ base size=16 base align=8
+QQuickFramebufferObject::Renderer (0x0x7f891472b960) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+16 (int (*)(...))QQuickFramebufferObject::metaObject
+24 (int (*)(...))QQuickFramebufferObject::qt_metacast
+32 (int (*)(...))QQuickFramebufferObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickFramebufferObject::isTextureProvider
+152 (int (*)(...))QQuickFramebufferObject::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickFramebufferObject::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+368 (int (*)(...))QQuickFramebufferObject::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7f891469fd68) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+QQuickItem (0x0x7f89146d5f50) 0
+ primary-for QQuickFramebufferObject (0x0x7f891469fd68)
+QObject (0x0x7f891472b840) 0
+ primary-for QQuickItem (0x0x7f89146d5f50)
+QQmlParserStatus (0x0x7f891472b8a0) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 408)
+
+Class QQuickGraphicsConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsConfiguration (0x0x7f891472bae0) 0
+
+Class QQuickGraphicsDevice
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsDevice (0x0x7f891472bb40) 0
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f891472bc00) 0 empty
+
+Vtable for QQuickTextureFactory
+QQuickTextureFactory::_ZTV20QQuickTextureFactory: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickTextureFactory)
+16 (int (*)(...))QQuickTextureFactory::metaObject
+24 (int (*)(...))QQuickTextureFactory::qt_metacast
+32 (int (*)(...))QQuickTextureFactory::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 (*)(...))QQuickTextureFactory::image
+
+Class QQuickTextureFactory
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextureFactory (0x0x7f891469fdd0) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+QObject (0x0x7f891472bba0) 0
+ primary-for QQuickTextureFactory (0x0x7f891469fdd0)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f891472bd20) 0 empty
+
+Vtable for QQuickImageResponse
+QQuickImageResponse::_ZTV19QQuickImageResponse: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageResponse)
+16 (int (*)(...))QQuickImageResponse::metaObject
+24 (int (*)(...))QQuickImageResponse::qt_metacast
+32 (int (*)(...))QQuickImageResponse::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 (*)(...))QQuickImageResponse::errorString
+128 (int (*)(...))QQuickImageResponse::cancel
+
+Class QQuickImageResponse
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageResponse (0x0x7f891469fe38) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+QObject (0x0x7f891472bcc0) 0
+ primary-for QQuickImageResponse (0x0x7f891469fe38)
+
+Class QQuickImageProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageProvider::QPrivateSignal (0x0x7f891472bf00) 0 empty
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::qt_metacall
+40 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+48 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickImageProvider (0x0x7f891469fea0) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+QQmlImageProviderBase (0x0x7f891469ff08) 0
+ primary-for QQuickImageProvider (0x0x7f891469fea0)
+QObject (0x0x7f891472bea0) 0
+ primary-for QQmlImageProviderBase (0x0x7f891469ff08)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::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 (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=32 align=8
+ base size=32 base align=8
+QQuickAsyncImageProvider (0x0x7f891469ff70) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+QQuickImageProvider (0x0x7f891439e000) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f891469ff70)
+QQmlImageProviderBase (0x0x7f891439e068) 0
+ primary-for QQuickImageProvider (0x0x7f891439e000)
+QObject (0x0x7f891439f000) 0
+ primary-for QQmlImageProviderBase (0x0x7f891439e068)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f891439f0c0) 0 empty
+
+Vtable for QQuickItemGrabResult
+QQuickItemGrabResult::_ZTV20QQuickItemGrabResult: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickItemGrabResult)
+16 (int (*)(...))QQuickItemGrabResult::metaObject
+24 (int (*)(...))QQuickItemGrabResult::qt_metacast
+32 (int (*)(...))QQuickItemGrabResult::qt_metacall
+40 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+48 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+56 (int (*)(...))QQuickItemGrabResult::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickItemGrabResult
+ size=16 align=8
+ base size=16 base align=8
+QQuickItemGrabResult (0x0x7f891439e0d0) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+QObject (0x0x7f891439f060) 0
+ primary-for QQuickItemGrabResult (0x0x7f891439e0d0)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f891439f300) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+16 (int (*)(...))QQuickPaintedItem::metaObject
+24 (int (*)(...))QQuickPaintedItem::qt_metacast
+32 (int (*)(...))QQuickPaintedItem::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickPaintedItem::isTextureProvider
+152 (int (*)(...))QQuickPaintedItem::textureProvider
+160 (int (*)(...))QQuickPaintedItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickPaintedItem::updatePaintNode
+368 (int (*)(...))QQuickPaintedItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7f891439e138) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+QQuickItem (0x0x7f89143754d0) 0
+ primary-for QQuickPaintedItem (0x0x7f891439e138)
+QObject (0x0x7f891439f240) 0
+ primary-for QQuickItem (0x0x7f89143754d0)
+QQmlParserStatus (0x0x7f891439f2a0) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 408)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f891439f960) 0 empty
+
+Vtable for QQuickRenderControl
+QQuickRenderControl::_ZTV19QQuickRenderControl: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickRenderControl)
+16 (int (*)(...))QQuickRenderControl::metaObject
+24 (int (*)(...))QQuickRenderControl::qt_metacast
+32 (int (*)(...))QQuickRenderControl::qt_metacall
+40 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+48 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickRenderControl::renderWindow
+
+Class QQuickRenderControl
+ size=16 align=8
+ base size=16 base align=8
+QQuickRenderControl (0x0x7f891439e270) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+QObject (0x0x7f891439f900) 0
+ primary-for QQuickRenderControl (0x0x7f891439e270)
+
+Class QQuickRenderTarget
+ size=8 align=8
+ base size=8 base align=8
+QQuickRenderTarget (0x0x7f891439fb40) 0
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f891439fcc0) 0 empty
+
+Vtable for QQuickTextDocument
+QQuickTextDocument::_ZTV18QQuickTextDocument: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QQuickTextDocument)
+16 (int (*)(...))QQuickTextDocument::metaObject
+24 (int (*)(...))QQuickTextDocument::qt_metacast
+32 (int (*)(...))QQuickTextDocument::qt_metacall
+40 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+48 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextDocument (0x0x7f891439e2d8) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+QObject (0x0x7f891439fc60) 0
+ primary-for QQuickTextDocument (0x0x7f891439e2d8)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f891442f120) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f891442f180) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f891442f1e0) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f891442f240) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f891442f2a0) 0
+
+Vtable for QSGGeometry
+QSGGeometry::_ZTV11QSGGeometry: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGGeometry)
+16 (int (*)(...))QSGGeometry::~QSGGeometry
+24 (int (*)(...))QSGGeometry::~QSGGeometry
+
+Class QSGGeometry
+ size=128 align=8
+ base size=128 base align=8
+QSGGeometry (0x0x7f891442f0c0) 0
+ vptr=((& QSGGeometry::_ZTV11QSGGeometry) + 16)
+
+Vtable for QSGNode
+QSGNode::_ZTV7QSGNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSGNode)
+16 (int (*)(...))QSGNode::~QSGNode
+24 (int (*)(...))QSGNode::~QSGNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGNode
+ size=72 align=8
+ base size=72 base align=8
+QSGNode (0x0x7f891442fc60) 0
+ vptr=((& QSGNode::_ZTV7QSGNode) + 16)
+
+Vtable for QSGBasicGeometryNode
+QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGBasicGeometryNode)
+16 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+24 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGBasicGeometryNode
+ size=104 align=8
+ base size=104 base align=8
+QSGBasicGeometryNode (0x0x7f891439e4e0) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+QSGNode (0x0x7f89144af4e0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f891439e4e0)
+
+Vtable for QSGGeometryNode
+QSGGeometryNode::_ZTV15QSGGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSGGeometryNode)
+16 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+24 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGGeometryNode
+ size=136 align=8
+ base size=136 base align=8
+QSGGeometryNode (0x0x7f891439e548) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+QSGBasicGeometryNode (0x0x7f891439e5b0) 0
+ primary-for QSGGeometryNode (0x0x7f891439e548)
+QSGNode (0x0x7f89144af780) 0
+ primary-for QSGBasicGeometryNode (0x0x7f891439e5b0)
+
+Vtable for QSGClipNode
+QSGClipNode::_ZTV11QSGClipNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGClipNode)
+16 (int (*)(...))QSGClipNode::~QSGClipNode
+24 (int (*)(...))QSGClipNode::~QSGClipNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGClipNode
+ size=144 align=8
+ base size=144 base align=8
+QSGClipNode (0x0x7f891439e618) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+QSGBasicGeometryNode (0x0x7f891439e680) 0
+ primary-for QSGClipNode (0x0x7f891439e618)
+QSGNode (0x0x7f89144af960) 0
+ primary-for QSGBasicGeometryNode (0x0x7f891439e680)
+
+Vtable for QSGTransformNode
+QSGTransformNode::_ZTV16QSGTransformNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGTransformNode)
+16 (int (*)(...))QSGTransformNode::~QSGTransformNode
+24 (int (*)(...))QSGTransformNode::~QSGTransformNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGTransformNode
+ size=208 align=8
+ base size=208 base align=8
+QSGTransformNode (0x0x7f891439e6e8) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+QSGNode (0x0x7f89144afa80) 0
+ primary-for QSGTransformNode (0x0x7f891439e6e8)
+
+Vtable for QSGRootNode
+QSGRootNode::_ZTV11QSGRootNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGRootNode)
+16 (int (*)(...))QSGRootNode::~QSGRootNode
+24 (int (*)(...))QSGRootNode::~QSGRootNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGRootNode
+ size=96 align=8
+ base size=96 base align=8
+QSGRootNode (0x0x7f891439e750) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+QSGNode (0x0x7f89144afba0) 0
+ primary-for QSGRootNode (0x0x7f891439e750)
+
+Vtable for QSGOpacityNode
+QSGOpacityNode::_ZTV14QSGOpacityNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGOpacityNode)
+16 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+24 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+32 (int (*)(...))QSGOpacityNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGOpacityNode
+ size=88 align=8
+ base size=88 base align=8
+QSGOpacityNode (0x0x7f891439eea0) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+QSGNode (0x0x7f89144f5480) 0
+ primary-for QSGOpacityNode (0x0x7f891439eea0)
+
+Vtable for QSGNodeVisitor
+QSGNodeVisitor::_ZTV14QSGNodeVisitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGNodeVisitor)
+16 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+24 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+32 (int (*)(...))QSGNodeVisitor::enterTransformNode
+40 (int (*)(...))QSGNodeVisitor::leaveTransformNode
+48 (int (*)(...))QSGNodeVisitor::enterClipNode
+56 (int (*)(...))QSGNodeVisitor::leaveClipNode
+64 (int (*)(...))QSGNodeVisitor::enterGeometryNode
+72 (int (*)(...))QSGNodeVisitor::leaveGeometryNode
+80 (int (*)(...))QSGNodeVisitor::enterOpacityNode
+88 (int (*)(...))QSGNodeVisitor::leaveOpacityNode
+96 (int (*)(...))QSGNodeVisitor::visitNode
+104 (int (*)(...))QSGNodeVisitor::visitChildren
+
+Class QSGNodeVisitor
+ size=8 align=8
+ base size=8 base align=8
+QSGNodeVisitor (0x0x7f89144f55a0) 0 nearly-empty
+ vptr=((& QSGNodeVisitor::_ZTV14QSGNodeVisitor) + 16)
+
+Vtable for QSGRendererInterface
+QSGRendererInterface::_ZTV20QSGRendererInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGRendererInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QSGRendererInterface::getResource
+48 (int (*)(...))QSGRendererInterface::getResource
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRendererInterface
+ size=8 align=8
+ base size=8 base align=8
+QSGRendererInterface (0x0x7f89144f5b40) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f89141f5240) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7f89141f52a0) 0
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QQuickWindow)
+16 (int (*)(...))QQuickWindow::metaObject
+24 (int (*)(...))QQuickWindow::qt_metacast
+32 (int (*)(...))QQuickWindow::qt_metacall
+40 (int (*)(...))QQuickWindow::~QQuickWindow
+48 (int (*)(...))QQuickWindow::~QQuickWindow
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickWindow::keyPressEvent
+232 (int (*)(...))QQuickWindow::keyReleaseEvent
+240 (int (*)(...))QQuickWindow::mousePressEvent
+248 (int (*)(...))QQuickWindow::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickWindow::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI12QQuickWindow)
+328 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+336 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7f89141e9068) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+QWindow (0x0x7f89141a5a80) 0
+ primary-for QQuickWindow (0x0x7f89141e9068)
+QObject (0x0x7f89141f5180) 0
+ primary-for QWindow (0x0x7f89141a5a80)
+QSurface (0x0x7f89141f51e0) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 328)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f89141f5a20) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickView)
+16 (int (*)(...))QQuickView::metaObject
+24 (int (*)(...))QQuickView::qt_metacast
+32 (int (*)(...))QQuickView::qt_metacall
+40 (int (*)(...))QQuickView::~QQuickView
+48 (int (*)(...))QQuickView::~QQuickView
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QQuickView::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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickView::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickView::keyPressEvent
+232 (int (*)(...))QQuickView::keyReleaseEvent
+240 (int (*)(...))QQuickView::mousePressEvent
+248 (int (*)(...))QQuickView::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickView::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI10QQuickView)
+328 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+336 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7f89141e91a0) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+QQuickWindow (0x0x7f89141e9208) 0
+ primary-for QQuickView (0x0x7f89141e91a0)
+QWindow (0x0x7f891422c690) 0
+ primary-for QQuickWindow (0x0x7f89141e9208)
+QObject (0x0x7f89141f5960) 0
+ primary-for QWindow (0x0x7f891422c690)
+QSurface (0x0x7f89141f59c0) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 328)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f89141f5d20) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f89141f5de0) 0
+
+Class QSGMaterialShader::GraphicsPipelineState
+ size=36 align=4
+ base size=36 base align=4
+QSGMaterialShader::GraphicsPipelineState (0x0x7f8914299060) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+24 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+32 (int (*)(...))QSGMaterialShader::updateUniformData
+40 (int (*)(...))QSGMaterialShader::updateSampledImage
+48 (int (*)(...))QSGMaterialShader::updateGraphicsPipelineState
+
+Class QSGMaterialShader
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader (0x0x7f89141f5d80) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16)
+
+Vtable for QSGMaterial
+QSGMaterial::_ZTV11QSGMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGMaterial)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QSGMaterial::compare
+
+Class QSGMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGMaterial (0x0x7f8914299ba0) 0
+ vptr=((& QSGMaterial::_ZTV11QSGMaterial) + 16)
+
+Vtable for QSGFlatColorMaterial
+QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGFlatColorMaterial)
+16 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+24 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+32 (int (*)(...))QSGFlatColorMaterial::type
+40 (int (*)(...))QSGFlatColorMaterial::createShader
+48 (int (*)(...))QSGFlatColorMaterial::compare
+
+Class QSGFlatColorMaterial
+ size=40 align=8
+ base size=40 base align=8
+QSGFlatColorMaterial (0x0x7f89141e95b0) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+QSGMaterial (0x0x7f8914299f60) 0
+ primary-for QSGFlatColorMaterial (0x0x7f89141e95b0)
+
+Vtable for QNativeInterface::QSGOpenGLTexture
+QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGOpenGLTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGOpenGLTexture (0x0x7f8913fab060) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE) + 16)
+
+Vtable for QNativeInterface::QSGVulkanTexture
+QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGVulkanTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGVulkanTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGVulkanTexture (0x0x7f8913fab120) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE) + 16)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f8913fab240) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSGTexture)
+16 (int (*)(...))QSGTexture::metaObject
+24 (int (*)(...))QSGTexture::qt_metacast
+32 (int (*)(...))QSGTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7f89141e9618) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+QObject (0x0x7f8913fab1e0) 0
+ primary-for QSGTexture (0x0x7f89141e9618)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f8913fab480) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGDynamicTexture)
+16 (int (*)(...))QSGDynamicTexture::metaObject
+24 (int (*)(...))QSGDynamicTexture::qt_metacast
+32 (int (*)(...))QSGDynamicTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7f89141e9680) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+QSGTexture (0x0x7f89141e96e8) 0
+ primary-for QSGDynamicTexture (0x0x7f89141e9680)
+QObject (0x0x7f8913fab420) 0
+ primary-for QSGTexture (0x0x7f89141e96e8)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSGImageNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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
+
+Class QSGImageNode
+ size=136 align=8
+ base size=136 base align=8
+QSGImageNode (0x0x7f89141e9750) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+QSGGeometryNode (0x0x7f89141e97b8) 0
+ primary-for QSGImageNode (0x0x7f89141e9750)
+QSGBasicGeometryNode (0x0x7f89141e9820) 0
+ primary-for QSGGeometryNode (0x0x7f89141e97b8)
+QSGNode (0x0x7f8913fab540) 0
+ primary-for QSGBasicGeometryNode (0x0x7f89141e9820)
+
+Vtable for QSGNinePatchNode
+QSGNinePatchNode::_ZTV16QSGNinePatchNode: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGNinePatchNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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 QSGNinePatchNode
+ size=136 align=8
+ base size=136 base align=8
+QSGNinePatchNode (0x0x7f89141e9958) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+QSGGeometryNode (0x0x7f89141e99c0) 0
+ primary-for QSGNinePatchNode (0x0x7f89141e9958)
+QSGBasicGeometryNode (0x0x7f89141e9a28) 0
+ primary-for QSGGeometryNode (0x0x7f89141e99c0)
+QSGNode (0x0x7f8913fab960) 0
+ primary-for QSGBasicGeometryNode (0x0x7f89141e9a28)
+
+Vtable for QSGRectangleNode
+QSGRectangleNode::_ZTV16QSGRectangleNode: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGRectangleNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRectangleNode
+ size=136 align=8
+ base size=136 base align=8
+QSGRectangleNode (0x0x7f89141e9a90) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+QSGGeometryNode (0x0x7f89141e9af8) 0
+ primary-for QSGRectangleNode (0x0x7f89141e9a90)
+QSGBasicGeometryNode (0x0x7f89141e9b60) 0
+ primary-for QSGGeometryNode (0x0x7f89141e9af8)
+QSGNode (0x0x7f8913fab9c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f89141e9b60)
+
+Vtable for QSGRenderNode::RenderState
+QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QSGRenderNode11RenderStateE)
+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 (*)(...))QSGRenderNode::RenderState::get
+
+Class QSGRenderNode::RenderState
+ size=8 align=8
+ base size=8 base align=8
+QSGRenderNode::RenderState (0x0x7f8913fabae0) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSGRenderNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))QSGRenderNode::changedStates
+56 (int (*)(...))QSGRenderNode::prepare
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QSGRenderNode::releaseResources
+80 (int (*)(...))QSGRenderNode::flags
+88 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=80 align=8
+ base size=80 base align=8
+QSGRenderNode (0x0x7f89141e9bc8) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+QSGNode (0x0x7f8913faba80) 0
+ primary-for QSGRenderNode (0x0x7f89141e9bc8)
+
+Vtable for QSGSimpleRectNode
+QSGSimpleRectNode::_ZTV17QSGSimpleRectNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGSimpleRectNode)
+16 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+24 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleRectNode
+ size=312 align=8
+ base size=312 base align=8
+QSGSimpleRectNode (0x0x7f89141e9dd0) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+QSGGeometryNode (0x0x7f89141e9e38) 0
+ primary-for QSGSimpleRectNode (0x0x7f89141e9dd0)
+QSGBasicGeometryNode (0x0x7f89141e9ea0) 0
+ primary-for QSGGeometryNode (0x0x7f89141e9e38)
+QSGNode (0x0x7f891407a180) 0
+ primary-for QSGBasicGeometryNode (0x0x7f89141e9ea0)
+
+Vtable for QSGOpaqueTextureMaterial
+QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QSGOpaqueTextureMaterial)
+16 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+24 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+32 (int (*)(...))QSGOpaqueTextureMaterial::type
+40 (int (*)(...))QSGOpaqueTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGOpaqueTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGOpaqueTextureMaterial (0x0x7f89141e9f08) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+QSGMaterial (0x0x7f891407a240) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f89141e9f08)
+
+Vtable for QSGTextureMaterial
+QSGTextureMaterial::_ZTV18QSGTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureMaterial)
+16 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+24 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+32 (int (*)(...))QSGTextureMaterial::type
+40 (int (*)(...))QSGTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGTextureMaterial (0x0x7f89141e9f70) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+QSGOpaqueTextureMaterial (0x0x7f89140be000) 0
+ primary-for QSGTextureMaterial (0x0x7f89141e9f70)
+QSGMaterial (0x0x7f891407a6c0) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f89140be000)
+
+Vtable for QSGSimpleTextureNode
+QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGSimpleTextureNode)
+16 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+24 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleTextureNode
+ size=376 align=8
+ base size=376 base align=8
+QSGSimpleTextureNode (0x0x7f89140be068) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+QSGGeometryNode (0x0x7f89140be0d0) 0
+ primary-for QSGSimpleTextureNode (0x0x7f89140be068)
+QSGBasicGeometryNode (0x0x7f89140be138) 0
+ primary-for QSGGeometryNode (0x0x7f89140be0d0)
+QSGNode (0x0x7f891407a720) 0
+ primary-for QSGBasicGeometryNode (0x0x7f89140be138)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f891407ade0) 0 empty
+
+Vtable for QSGTextureProvider
+QSGTextureProvider::_ZTV18QSGTextureProvider: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureProvider)
+16 (int (*)(...))QSGTextureProvider::metaObject
+24 (int (*)(...))QSGTextureProvider::qt_metacast
+32 (int (*)(...))QSGTextureProvider::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 QSGTextureProvider
+ size=16 align=8
+ base size=16 base align=8
+QSGTextureProvider (0x0x7f89140be270) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+QObject (0x0x7f891407ad80) 0
+ primary-for QSGTextureProvider (0x0x7f89140be270)
+
+Vtable for QSGVertexColorMaterial
+QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QSGVertexColorMaterial)
+16 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+24 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+32 (int (*)(...))QSGVertexColorMaterial::type
+40 (int (*)(...))QSGVertexColorMaterial::createShader
+48 (int (*)(...))QSGVertexColorMaterial::compare
+
+Class QSGVertexColorMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGVertexColorMaterial (0x0x7f89140be2d8) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+QSGMaterial (0x0x7f891407aea0) 0
+ primary-for QSGVertexColorMaterial (0x0x7f89140be2d8)
+
+Class QAbstractItemModelTester::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModelTester::QPrivateSignal (0x0x7f891407af60) 0 empty
+
+Vtable for QAbstractItemModelTester
+QAbstractItemModelTester::_ZTV24QAbstractItemModelTester: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractItemModelTester)
+16 (int (*)(...))QAbstractItemModelTester::metaObject
+24 (int (*)(...))QAbstractItemModelTester::qt_metacast
+32 (int (*)(...))QAbstractItemModelTester::qt_metacall
+40 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+48 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAbstractItemModelTester
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModelTester (0x0x7f89140be340) 0
+ vptr=((& QAbstractItemModelTester::_ZTV24QAbstractItemModelTester) + 16)
+QObject (0x0x7f891407af00) 0
+ primary-for QAbstractItemModelTester (0x0x7f89140be340)
+
+Class QTest::QBenchmarkIterationController
+ size=4 align=4
+ base size=4 base align=4
+QTest::QBenchmarkIterationController (0x0x7f8914122180) 0
+
+Class QTestEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTestEventLoop::QPrivateSignal (0x0x7f8914122240) 0 empty
+
+Vtable for QTestEventLoop
+QTestEventLoop::_ZTV14QTestEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTestEventLoop)
+16 (int (*)(...))QTestEventLoop::metaObject
+24 (int (*)(...))QTestEventLoop::qt_metacast
+32 (int (*)(...))QTestEventLoop::qt_metacall
+40 (int (*)(...))QTestEventLoop::~QTestEventLoop
+48 (int (*)(...))QTestEventLoop::~QTestEventLoop
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTestEventLoop::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTestEventLoop
+ size=32 align=8
+ base size=32 base align=8
+QTestEventLoop (0x0x7f89140be3a8) 0
+ vptr=((& QTestEventLoop::_ZTV14QTestEventLoop) + 16)
+QObject (0x0x7f89141221e0) 0
+ primary-for QTestEventLoop (0x0x7f89140be3a8)
+
+Vtable for QSignalSpy
+QSignalSpy::_ZTV10QSignalSpy: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSignalSpy)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QSignalSpy::qt_metacall
+40 (int (*)(...))QSignalSpy::~QSignalSpy
+48 (int (*)(...))QSignalSpy::~QSignalSpy
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalSpy
+ size=128 align=8
+ base size=121 base align=8
+QSignalSpy (0x0x7f8914126ee0) 0
+ vptr=((& QSignalSpy::_ZTV10QSignalSpy) + 16)
+QObject (0x0x7f8913d726c0) 0
+ primary-for QSignalSpy (0x0x7f8914126ee0)
+QList<QList<QVariant> > (0x0x7f89140bef70) 16
+QListSpecialMethods<QList<QVariant> > (0x0x7f89140bef08) 16 empty
+QListSpecialMethodsBase<QList<QVariant> > (0x0x7f8913d72720) 16 empty
+
+Class QTestData
+ size=8 align=8
+ base size=8 base align=8
+QTestData (0x0x7f8913eaf2a0) 0
+
+Class QTest::Internal::QCborValueFormatter
+ size=1 align=1
+ base size=0 base align=1
+QTest::Internal::QCborValueFormatter (0x0x7f8913f4ee40) 0 empty
+
+Vtable for QSvgGenerator
+QSvgGenerator::_ZTV13QSvgGenerator: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSvgGenerator)
+16 (int (*)(...))QSvgGenerator::~QSvgGenerator
+24 (int (*)(...))QSvgGenerator::~QSvgGenerator
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))QSvgGenerator::paintEngine
+48 (int (*)(...))QSvgGenerator::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QSvgGenerator
+ size=24 align=8
+ base size=24 base align=8
+QSvgGenerator (0x0x7f8913d35208) 0
+ vptr=((& QSvgGenerator::_ZTV13QSvgGenerator) + 16)
+QPaintDevice (0x0x7f8913d4ff60) 0
+ primary-for QSvgGenerator (0x0x7f8913d35208)
+
+Class QSvgRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSvgRenderer::QPrivateSignal (0x0x7f891397c1e0) 0 empty
+
+Vtable for QSvgRenderer
+QSvgRenderer::_ZTV12QSvgRenderer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSvgRenderer)
+16 (int (*)(...))QSvgRenderer::metaObject
+24 (int (*)(...))QSvgRenderer::qt_metacast
+32 (int (*)(...))QSvgRenderer::qt_metacall
+40 (int (*)(...))QSvgRenderer::~QSvgRenderer
+48 (int (*)(...))QSvgRenderer::~QSvgRenderer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSvgRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSvgRenderer (0x0x7f8913d35270) 0
+ vptr=((& QSvgRenderer::_ZTV12QSvgRenderer) + 16)
+QObject (0x0x7f891397c180) 0
+ primary-for QSvgRenderer (0x0x7f8913d35270)
+
diff --git a/tests/auto/bic/data/qt.6.1.0.linux-gcc-amd64.txt b/tests/auto/bic/data/qt.6.1.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..d8efec90ee
--- /dev/null
+++ b/tests/auto/bic/data/qt.6.1.0.linux-gcc-amd64.txt
@@ -0,0 +1,26806 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f7dfd269f00) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f7dfd30ee40) 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 (0x0x7f7dfd3400c0) 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 (0x0x7f7dfd340f60) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f7dfa7a2960) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f7dfa81f360) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f7dfa81f900) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f7dfa81f960) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f7dfa81f9c0) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f7dfa81fa20) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f7dfa81fa80) 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 (0x0x7f7dfa81fb40) 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 (0x0x7f7dfa81fc00) 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 (0x0x7f7dfa81fcc0) 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 (0x0x7f7dfa81fd80) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f7dfa85c120) 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 (0x0x7f7dfa85c480) 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 (0x0x7f7dfa85c4e0) 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 (0x0x7f7dfa85c780) 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 (0x0x7f7dfa85c7e0) 0 empty
+
+Class std::__nonesuchbase
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuchbase (0x0x7f7dfa8a4120) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch (0x0x7f7dfa8639c0) 0 empty
+std::__nonesuchbase (0x0x7f7dfa8a4180) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f7dfa8ef720) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f7dfa573900) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f7dfa573a80) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f7dfa573ae0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f7dfa6061e0) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f7dfa606240) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f7dfa9616e8) 0 empty
+std::input_iterator_tag (0x0x7f7dfa6062a0) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f7dfa961750) 0 empty
+std::forward_iterator_tag (0x0x7f7dfa9617b8) 0 empty
+std::input_iterator_tag (0x0x7f7dfa606300) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f7dfa961820) 0 empty
+std::bidirectional_iterator_tag (0x0x7f7dfa961888) 0 empty
+std::forward_iterator_tag (0x0x7f7dfa9618f0) 0 empty
+std::input_iterator_tag (0x0x7f7dfa606360) 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 (0x0x7f7dfa6b22a0) 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 (0x0x7f7dfa6b23c0) 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 (0x0x7f7dfa6b26c0) 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 (0x0x7f7dfa6b29c0) 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 (0x0x7f7dfa6b2ae0) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f7dfa399d20) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f7dfa3e00c0) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f7dfa3e0120) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f7dfa3e01e0) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f7dfa3e0240) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f7dfa3e02a0) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f7dfa3e0300) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f7dfa3e0360) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f7dfa3e0660) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f7dfa3e0900) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f7dfa3e0960) 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 (0x0x7f7dfa490720) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 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 (0x0x7f7dfa961dd0) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+std::exception (0x0x7f7dfa4909c0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f7dfa961dd0)
+
+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 (0x0x7f7dfa961e38) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+std::bad_alloc (0x0x7f7dfa961ea0) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f7dfa961e38)
+std::exception (0x0x7f7dfa490c00) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f7dfa961ea0)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f7dfa490de0) 0 empty
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f7dfa355660) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f7dfa3556c0) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f7dfa355840) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f7dfa355900) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f7dfa2a2c98) 0
+std::__uses_alloc_base (0x0x7f7dfa3558a0) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f7dfa0ecf60) 0 empty
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f7dfa16b780) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f7dfa16b900) 0 empty
+
+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 (0x0x7f7df9e1e300) 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 (0x0x7f7df9dddb60) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+std::exception (0x0x7f7df9e1e6c0) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f7df9dddb60)
+
+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 (0x0x7f7df9dddbc8) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+std::exception (0x0x7f7df9e1e8a0) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f7df9dddbc8)
+
+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 (0x0x7f7df9dddc30) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+std::exception (0x0x7f7df9e1ea80) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f7df9dddc30)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f7df9e1eb40) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f7df9e1eba0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f7df9e1ed80) 0
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f7df9f267e0) 0 empty
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f7df9bc9780) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f7df9bc9840) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f7df9bc9d20) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f7df9bf0c60) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f7df9bf0d20) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f7df9bf0d80) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f7df9c19180) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f7df9c19360) 0
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f7df99f7780) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f7df94cd840) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f7df93bc2d8) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7f7df94f6000) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f7df93bc3a8) 0
+std::_Bit_iterator_base (0x0x7f7df93bc410) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7f7df94f65a0) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f7df93bc548) 0
+std::_Bit_iterator_base (0x0x7f7df93bc5b0) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7f7df94f6de0) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f7df9309180) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f7df9309300) 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 (0x0x7f7df9309480) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f7df9309600) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f7df900ade0) 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 (0x0x7f7df900ae40) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f7df90d4de0) 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 (0x0x7f7df9090820) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+std::exception (0x0x7f7df9135360) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f7df9090820)
+
+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 (0x0x7f7df9090a28) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+std::exception (0x0x7f7df8db21e0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f7df9090a28)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f7df8db23c0) 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 (0x0x7f7df8db2f00) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f7df8dee600) 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 (0x0x7f7df9090a90) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+std::exception (0x0x7f7df8dee840) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f7df9090a90)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f7df8eefb40) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f7df8eefba0) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f7df8eefe40) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f7df8f3a6c0) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f7df8b7a900) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f7df8c14ae0) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f7df8bafc98) 0
+std::__atomic_flag_base (0x0x7f7df8c14b40) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f7df87d1820) 0
+QAtomicInteger<int> (0x0x7f7df87d1888) 0
+QBasicAtomicInteger<int> (0x0x7f7df87e22a0) 0
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f7df85dc960) 0 empty
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f7df801a720) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f7df801a780) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f7df80b6f60) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f7df81116c0) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f7df8111720) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f7df8073888) 0
+QGenericArgument (0x0x7f7df81119c0) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f7df8111ea0) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f7df8111f00) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f7df8111e40) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f7df815e8a0) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f7df7db00c0) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f7df7db0a80) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f7df7e9c720) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f7df7e9ca80) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f7df7f50480) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f7df7bc9360) 0
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f7df7bc9420) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f7df7bc94e0) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f7df7bc9540) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f7df7bc95a0) 0
+
+Class __jmp_buf_tag
+ size=200 align=8
+ base size=200 base align=8
+__jmp_buf_tag (0x0x7f7df7bc9600) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f7df7bc9660) 0
+
+Class __cancel_jmp_buf_tag
+ size=72 align=8
+ base size=72 base align=8
+__cancel_jmp_buf_tag (0x0x7f7df7bc96c0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f7df7bc9780) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f7df7bc97e0) 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 (0x0x7f7df7ce7540) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f7df7b566c0) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f7df7b56720) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f7df7b56780) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f7df7b567e0) 0
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f7df7704c00) 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 (0x0x7f7df7753000) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f7df77532a0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f7df7753480) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f7df73a73c0) 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 (0x0x7f7df7581e38) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+std::exception (0x0x7f7df73a7480) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f7df7581e38)
+
+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 (0x0x7f7df7581ea0) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+std::logic_error (0x0x7f7df7581f08) 0
+ primary-for std::domain_error (0x0x7f7df7581ea0)
+std::exception (0x0x7f7df73a74e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f7df7581f08)
+
+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 (0x0x7f7df7581f70) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+std::logic_error (0x0x7f7df73d3000) 0
+ primary-for std::invalid_argument (0x0x7f7df7581f70)
+std::exception (0x0x7f7df73a7540) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f7df73d3000)
+
+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 (0x0x7f7df73d3068) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+std::logic_error (0x0x7f7df73d30d0) 0
+ primary-for std::length_error (0x0x7f7df73d3068)
+std::exception (0x0x7f7df73a75a0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f7df73d30d0)
+
+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 (0x0x7f7df73d3138) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+std::logic_error (0x0x7f7df73d31a0) 0
+ primary-for std::out_of_range (0x0x7f7df73d3138)
+std::exception (0x0x7f7df73a7600) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f7df73d31a0)
+
+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 (0x0x7f7df73d3208) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+std::exception (0x0x7f7df73a7660) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f7df73d3208)
+
+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 (0x0x7f7df73d3270) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+std::runtime_error (0x0x7f7df73d32d8) 0
+ primary-for std::range_error (0x0x7f7df73d3270)
+std::exception (0x0x7f7df73a76c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f7df73d32d8)
+
+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 (0x0x7f7df73d3340) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+std::runtime_error (0x0x7f7df73d33a8) 0
+ primary-for std::overflow_error (0x0x7f7df73d3340)
+std::exception (0x0x7f7df73a7720) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f7df73d33a8)
+
+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 (0x0x7f7df73d3410) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+std::runtime_error (0x0x7f7df73d3478) 0
+ primary-for std::underflow_error (0x0x7f7df73d3410)
+std::exception (0x0x7f7df73a7780) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f7df73d3478)
+
+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 (0x0x7f7df73a7900) 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 (0x0x7f7df73a7c60) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f7df7428480) 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 (0x0x7f7df73d3888) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+std::runtime_error (0x0x7f7df73d38f0) 0
+ primary-for std::system_error (0x0x7f7df73d3888)
+std::exception (0x0x7f7df7459060) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f7df73d38f0)
+
+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 (0x0x7f7df73d3bc8) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+std::system_error (0x0x7f7df73d3c30) 0
+ primary-for std::ios_base::failure (0x0x7f7df73d3bc8)
+std::runtime_error (0x0x7f7df73d3c98) 0
+ primary-for std::system_error (0x0x7f7df73d3c30)
+std::exception (0x0x7f7df7488720) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f7df73d3c98)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f7df7488780) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f7df74887e0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f7df7488840) 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 (0x0x7f7df74886c0) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+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 (0x0x7f7df7533af8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+std::exception (0x0x7f7df7250d80) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f7df7533af8)
+
+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 (0x0x7f7df7533b60) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+std::exception (0x0x7f7df7250ea0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f7df7533b60)
+
+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 (0x0x7f7df7533bc8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+std::exception (0x0x7f7df727d000) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f7df7533bc8)
+
+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 (0x0x7f7df7533c98) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+std::exception (0x0x7f7df727d120) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f7df7533c98)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f7df727d9c0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f7df727dd20) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f7df72a5000) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f7df72a5360) 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 (0x0x7f7df7533d68) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+std::exception (0x0x7f7df72a5660) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f7df7533d68)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f7df731b360) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f7df731b8a0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f7df7061720) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f7df6dc5480) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f7df6ec45a0) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f7df6d5e180) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f7df69fd000) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f7df6b2bc00) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f7df6b58060) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f7df6b580c0) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f7df6791d80) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f7df68c8300) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f7df68c82a0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f7df69291e0) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f7df66906c0) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f7df6282720) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f7df627fc30) 0
+QtPrivate::ArgBase (0x0x7f7df6282780) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f7df627fd00) 0
+QtPrivate::ArgBase (0x0x7f7df62829c0) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f7df6332060) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f7df6332120) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f7df6127300) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f7df5dc4480) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f7df5deb1e0) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f7df5deb420) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f7df5e6dc60) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f7df61243a8) 0
+QIODeviceBase (0x0x7f7df5e6dcc0) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f7df5e6de40) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f7df5b6f1e0) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f7df6124bc8) 0
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f7df5b6f2a0) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f7df6124c30) 0
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f7df5b6f360) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f7df5c2de40) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f7df6124d68) 0
+QMetaContainer (0x0x7f7df5c47060) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f7df6124dd0) 0
+QMetaContainer (0x0x7f7df5c47420) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f7df5d5f420) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f7df5cea618) 0
+std::__detail::_List_node_base (0x0x7f7df5d5f480) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f7df5a39540) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f7df5a398a0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f7df58af900) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f7df5910f00) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f7df5422f00) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f7df5422f60) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f7df5314660) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f7df53149c0) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f7df4f7fa20) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f7df4f7fb40) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f7df4fced80) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f7df4fced20) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f7df4fcede0) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f7df4ff42a0) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f7df4ff4300) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f7df4ff4900) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f7df5028060) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f7df5028360) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f7df5028480) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f7df50286c0) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f7df4fd5dd0) 0
+QPropertyObserverBase (0x0x7f7df5028840) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f7df5097780) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f7df50b5900) 0
+
+Class QBindingStatus
+ size=16 align=8
+ base size=16 base align=8
+QBindingStatus (0x0x7f7df50e5d20) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f7df50e5d80) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f7df4defc60) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f7df4ea92a0) 0 empty
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7f7df4eece40) 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 (0x0x7f7df4bac300) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f7df4bacb40) 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 (0x0x7f7df4bacae0) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f7df4c669c0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f7df4ca22a0) 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 (0x0x7f7df4caa000) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+QObject (0x0x7f7df4ca2240) 0
+ primary-for QAbstractAnimation (0x0x7f7df4caa000)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f7df4ca2600) 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 (0x0x7f7df4caa068) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+QObject (0x0x7f7df4ca25a0) 0
+ primary-for QAnimationDriver (0x0x7f7df4caa068)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f7df4ca27e0) 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 (0x0x7f7df4caa0d0) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+QObject (0x0x7f7df4ca2780) 0
+ primary-for QEventLoop (0x0x7f7df4caa0d0)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f7df4ca2c60) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f7df4ca2d20) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f7df4ca2d80) 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 (0x0x7f7df4caa208) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+QObject (0x0x7f7df4ca2cc0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f7df4caa208)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f7df4d48780) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f7df483e3c0) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f7df483e360) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f7df483ef00) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f7df4d584e0) 0
+QStringConverterBase (0x0x7f7df483eea0) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f7df4d58548) 0
+QStringConverter (0x0x7f7df4d585b0) 0
+QStringConverterBase (0x0x7f7df4893900) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f7df4d58618) 0
+QStringConverter (0x0x7f7df4d58680) 0
+QStringConverterBase (0x0x7f7df48b3780) 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 (0x0x7f7df4d586e8) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+QIODeviceBase (0x0x7f7df48d5480) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f7df48d5b40) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f7df45b1d20) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f7df46123c0) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f7df4612540) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f7df46cd480) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f7df46f03c0) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f7df46a6208) 0
+QIODeviceBase (0x0x7f7df46f0360) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f7df441d2a0) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f7df441d360) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f7df41e0660) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f7df41e06c0) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f7df41e0600) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f7df3fd3060) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f7df3fd32a0) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f7df3fd3480) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f7df40148a0) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f7df405e960) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f7df40b5cc0) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f7df4164120) 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 (0x0x7f7df41547b8) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+QObject (0x0x7f7df41640c0) 0
+ primary-for QAbstractItemModel (0x0x7f7df41547b8)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f7df3e72e40) 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 (0x0x7f7df4154dd0) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+QAbstractItemModel (0x0x7f7df4154e38) 0
+ primary-for QAbstractTableModel (0x0x7f7df4154dd0)
+QObject (0x0x7f7df3e72de0) 0
+ primary-for QAbstractItemModel (0x0x7f7df4154e38)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f7df3e72f60) 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 (0x0x7f7df4154ea0) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+QAbstractItemModel (0x0x7f7df4154f08) 0
+ primary-for QAbstractListModel (0x0x7f7df4154ea0)
+QObject (0x0x7f7df3e72f00) 0
+ primary-for QAbstractItemModel (0x0x7f7df4154f08)
+
+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 (0x0x7f7df3eea360) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f7df3eea420) 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 (0x0x7f7df3eee208) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+QAbstractItemModel (0x0x7f7df3eee270) 0
+ primary-for QAbstractProxyModel (0x0x7f7df3eee208)
+QObject (0x0x7f7df3eea3c0) 0
+ primary-for QAbstractItemModel (0x0x7f7df3eee270)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f7df3eea600) 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 (0x0x7f7df3eee2d8) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+QAbstractAnimation (0x0x7f7df3eee340) 0
+ primary-for QAnimationGroup (0x0x7f7df3eee2d8)
+QObject (0x0x7f7df3eea5a0) 0
+ primary-for QAbstractAnimation (0x0x7f7df3eee340)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f7df3eee478) 0
+QIterator<QMetaAssociation> (0x0x7f7df3eee4e0) 0
+QBaseIterator<QMetaAssociation> (0x0x7f7df3eeaa20) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f7df3eee618) 0
+QConstIterator<QMetaAssociation> (0x0x7f7df3eee680) 0
+QBaseIterator<QMetaAssociation> (0x0x7f7df3eea960) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f7df3eee750) 0
+QIterable<QMetaAssociation> (0x0x7f7df3f614e0) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f7df3c6e5a0) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f7df3cbde40) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f7df3cf0d80) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f7df3d41c00) 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 (0x0x7f7df3d02e00) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+QObject (0x0x7f7df3d41b40) 0
+ primary-for QIODevice (0x0x7f7df3d02e00)
+QIODeviceBase (0x0x7f7df3d41ba0) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f7df398e000) 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 (0x0x7f7df3d4f820) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+QIODevice (0x0x7f7df397a150) 0
+ primary-for QBuffer (0x0x7f7df3d4f820)
+QObject (0x0x7f7df3d41f00) 0
+ primary-for QIODevice (0x0x7f7df397a150)
+QIODeviceBase (0x0x7f7df3d41f60) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f7df398e240) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f7df398e1e0) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f7df398e3c0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f7df398e360) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f7df39f3ba0) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f7df3b198a0) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f7df3b19840) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f7df3b19c00) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f7df37cd300) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f7df38206c0) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f7df3820720) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f7df3820660) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f7df38aac60) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f7df38d9480) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f7df357c720) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f7df3614120) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f7df36141e0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f7df3614360) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f7df36ab4e0) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f7df33bc0c0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f7df34133c0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f7df3413480) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f7df353bb40) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f7df31960c0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f7df3196120) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f7df3196060) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f7df329a8a0) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f7df329a900) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f7df329a840) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f7df30c6f00) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f7df30c6ea0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f7df2dee060) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f7df2e334e0) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f7df2e33d80) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f7df2e33f60) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f7df2f360c0) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f7df2ba8b40) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f7df2ba8ba0) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f7df2ba8c00) 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 (0x0x7f7df2ba8ae0) 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 (0x0x7f7df2bb2548) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+QEvent (0x0x7f7df2c075a0) 0
+ primary-for QTimerEvent (0x0x7f7df2bb2548)
+
+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 (0x0x7f7df2bb25b0) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+QEvent (0x0x7f7df2c07a80) 0
+ primary-for QChildEvent (0x0x7f7df2bb25b0)
+
+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 (0x0x7f7df2bb2618) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+QEvent (0x0x7f7df2c07ea0) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f7df2bb2618)
+
+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 (0x0x7f7df2bb2680) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+QEvent (0x0x7f7df2c3e180) 0
+ primary-for QDeferredDeleteEvent (0x0x7f7df2bb2680)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f7df2c3e4e0) 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 (0x0x7f7df2bb26e8) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+QObject (0x0x7f7df2c3e480) 0
+ primary-for QCoreApplication (0x0x7f7df2bb26e8)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f7df2c3e6c0) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f7df2c3e7e0) 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 (0x0x7f7df2bb2750) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+QAbstractItemModel (0x0x7f7df2bb27b8) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f7df2bb2750)
+QObject (0x0x7f7df2c3e780) 0
+ primary-for QAbstractItemModel (0x0x7f7df2bb27b8)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f7df2c3e960) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f7df2c3ea80) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f7df2c3ed80) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f7df29bbba0) 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 (0x0x7f7df29c0820) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+QIODevice (0x0x7f7df29aa5b0) 0
+ primary-for QFileDevice (0x0x7f7df29c0820)
+QObject (0x0x7f7df29bbae0) 0
+ primary-for QIODevice (0x0x7f7df29aa5b0)
+QIODeviceBase (0x0x7f7df29bbb40) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7f7df2a03660) 0
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7f7df2a7dc00) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f7df2b33060) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7f7df281fd20) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7f7df28fe060) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7f7df28fe000) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7f7df294f600) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7f7df2593180) 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> (0x0x7f7df21b80d0 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> (0x0x7f7df21b81a0 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> (0x0x7f7df21b8618 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> (0x0x7f7df21b86e8 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)
+
+Construction vtable for std::basic_istream<char> (0x0x7f7df222a888 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> (0x0x7f7df222aa90 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> (0x0x7f7df22637e0 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> (0x0x7f7df222ac98 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> (0x0x7f7df222ad68 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> (0x0x7f7df222add0 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> (0x0x7f7df222af70 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> (0x0x7f7df2263bd0 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> (0x0x7f7df22ec1a0 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> (0x0x7f7df22ec270 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 (0x0x7f7df2270f60) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7f7df2319120) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7f7df23192a0) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7f7df23195a0) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7f7df2319720) 0
+
+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 (0x0x7f7df1fddd80) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7f7df1fddd20) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7f7df1fddcc0) 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 (0x0x7f7df1e5c548) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+std::system_error (0x0x7f7df1e5c5b0) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7f7df1e5c548)
+std::runtime_error (0x0x7f7df1e5c618) 0
+ primary-for std::system_error (0x0x7f7df1e5c5b0)
+std::exception (0x0x7f7df1e66900) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f7df1e5c618)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7f7df1e5c8f0) 0
+std::filesystem::__cxx11::path (0x0x7f7df1e66e40) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7f7df1edf420) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7f7df1b71f00) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7f7df1bc9420) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7f7df1c02ae0) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7f7df1c2e2a0) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7f7df1c7ec60) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f7df1d208a0) 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 (0x0x7f7df1ca16e8) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+QFileDevice (0x0x7f7df1ca1750) 0
+ primary-for QFile (0x0x7f7df1ca16e8)
+QIODevice (0x0x7f7df1d14850) 0
+ primary-for QFileDevice (0x0x7f7df1ca1750)
+QObject (0x0x7f7df1d207e0) 0
+ primary-for QIODevice (0x0x7f7df1d14850)
+QIODeviceBase (0x0x7f7df1d20840) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f7df1d20ea0) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f7df1a07000) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f7df1ad0720) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f7df1ad0ae0) 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 (0x0x7f7df17a9f08) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+std::exception (0x0x7f7df17fd060) 0 nearly-empty
+ primary-for QException (0x0x7f7df17a9f08)
+
+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 (0x0x7f7df17a9f70) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+QException (0x0x7f7df1807000) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f7df17a9f70)
+std::exception (0x0x7f7df17fd0c0) 0 nearly-empty
+ primary-for QException (0x0x7f7df1807000)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f7df184d000) 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 (0x0x7f7df184d060) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f7df184d2a0) 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 (0x0x7f7df18443a8) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+QObject (0x0x7f7df184d240) 0
+ primary-for QFileSelector (0x0x7f7df18443a8)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f7df184d480) 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 (0x0x7f7df1844410) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+QObject (0x0x7f7df184d420) 0
+ primary-for QFileSystemWatcher (0x0x7f7df1844410)
+
+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 (0x0x7f7df184d600) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f7df184d7e0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f7df1844478) 0
+QBasicMutex (0x0x7f7df18ca540) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f7df18ca960) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f7df18caf60) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f7df193c5a0) 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 (0x0x7f7df166a1e0) 0
+ vptr=((& QtPrivate::ResultStoreBase::_ZTVN9QtPrivate15ResultStoreBaseE) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f7df16a6d20) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f7df16b1dd0) 0
+std::__mutex_base (0x0x7f7df16a6d80) 0
+
+Class std::__condvar
+ size=48 align=8
+ base size=48 base align=8
+std::__condvar (0x0x7f7df16a6f60) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f7df16d65a0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f7df16d6600) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f7df16d6660) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f7df17050c0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f7df16b1e38) 0
+std::__recursive_mutex_base (0x0x7f7df1705120) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f7df1718150) 0
+std::__mutex_base (0x0x7f7df17055a0) 0
+std::__timed_mutex_impl<std::timed_mutex> (0x0x7f7df1705600) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f7df1718540) 0
+std::__recursive_mutex_base (0x0x7f7df17059c0) 0
+std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f7df1705a20) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f7df17497e0) 0
+
+Class std::once_flag::_Prepare_execution
+ size=1 align=1
+ base size=0 base align=1
+std::once_flag::_Prepare_execution (0x0x7f7df1749840) 0 empty
+
+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 (0x0x7f7df1749d20) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f7df1398ba0) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f7df13f0060) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f7df13f00c0) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f7df13f03c0) 0 empty
+
+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 (0x0x7f7df1485840) 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 (0x0x7f7df14858a0) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f7df14857e0) 0
+
+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 (0x0x7f7df14f0068) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+std::logic_error (0x0x7f7df14f00d0) 0
+ primary-for std::future_error (0x0x7f7df14f0068)
+std::exception (0x0x7f7df14d6d20) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f7df14f00d0)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f7df14fd480) 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 (0x0x7f7df14fd420) 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 (0x0x7f7df1256d80) 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 (0x0x7f7df1261d00) 0
+std::__at_thread_exit_elt (0x0x7f7df1256e40) 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 (0x0x7f7df14fd600) 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 (0x0x7f7df14fd3c0) 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 (0x0x7f7df0bd00d0) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+std::__future_base::_State_baseV2 (0x0x7f7df0bda8a0) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f7df0bd00d0)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f7df0bdaf60) 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 (0x0x7f7df0bd03a8) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+QObject (0x0x7f7df0bdaf00) 0
+ primary-for QThread (0x0x7f7df0bd03a8)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f7df0c27360) 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 (0x0x7f7df0bd0410) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+QObject (0x0x7f7df0c27300) 0
+ primary-for QThreadPool (0x0x7f7df0bd0410)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f7df0a50a80) 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 (0x0x7f7df09a2a90) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+QObject (0x0x7f7df0a50a20) 0
+ primary-for QFutureWatcherBase (0x0x7f7df09a2a90)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f7df0a7a000) 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 (0x0x7f7df09a2bc8) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+QAbstractProxyModel (0x0x7f7df09a2c30) 0
+ primary-for QIdentityProxyModel (0x0x7f7df09a2bc8)
+QAbstractItemModel (0x0x7f7df09a2c98) 0
+ primary-for QAbstractProxyModel (0x0x7f7df09a2c30)
+QObject (0x0x7f7df0a50f60) 0
+ primary-for QAbstractItemModel (0x0x7f7df09a2c98)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f7df0a7a180) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f7df0ae53c0) 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 (0x0x7f7df0ae4340) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+QObject (0x0x7f7df0ae5360) 0
+ primary-for QItemSelectionModel (0x0x7f7df0ae4340)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f7df0ae4680) 0
+QList<QItemSelectionRange> (0x0x7f7df0ae46e8) 0
+QListSpecialMethods<QItemSelectionRange> (0x0x7f7df0ae4750) 0 empty
+QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f7df0ae5d20) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f7df07b7f60) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f7df07f2420) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f7df083e8a0) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f7df083e900) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f7df083e840) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f7df08fb540) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f7df08fb5a0) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f7df06c25a0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f7df06c2600) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f7df06c2540) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f7df038c2a0) 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 (0x0x7f7df0386750) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+QObject (0x0x7f7df038c240) 0
+ primary-for QLibrary (0x0x7f7df0386750)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f7df038c8a0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f7df038c840) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f7df04a81e0) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f7df05139c0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f7df0513a80) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f7df1215660) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f7df9870480) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f7df7d8d240) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f7df6d11ea0) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f7df6acecc0) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f7df6d38b40) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f7df6641ae0) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f7df40b51e0) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f7df322d9c0) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f7df32791e0) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f7df322da20) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f7df299d960) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f7df299d720) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f7df1785b40) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f7df1785300) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f7df14b9de0) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f7df14b9d80) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f7df079c060) 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 (0x0x7f7df957baf8) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+QObject (0x0x7f7df079c000) 0
+ primary-for QMimeData (0x0x7f7df957baf8)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f7df079c720) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f7df086d480) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f7df086d540) 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 (0x0x7f7df958de38) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+QObject (0x0x7f7df086d4e0) 0
+ primary-for QObjectCleanupHandler (0x0x7f7df958de38)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f7df086d600) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f7df1c97540) 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 (0x0x7f7df95dce38) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+QAnimationGroup (0x0x7f7df95dcea0) 0
+ primary-for QParallelAnimationGroup (0x0x7f7df95dce38)
+QAbstractAnimation (0x0x7f7df95dcf08) 0
+ primary-for QAnimationGroup (0x0x7f7df95dcea0)
+QObject (0x0x7f7df1c974e0) 0
+ primary-for QAbstractAnimation (0x0x7f7df95dcf08)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f7df1c97720) 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 (0x0x7f7df95dcf70) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+QAbstractAnimation (0x0x7f7df95df000) 0
+ primary-for QPauseAnimation (0x0x7f7df95dcf70)
+QObject (0x0x7f7df1c976c0) 0
+ primary-for QAbstractAnimation (0x0x7f7df95df000)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f7df1c97900) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f7df1c97960) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f7df1fdf600) 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 (0x0x7f7df95e4618) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+QObject (0x0x7f7df1fdf5a0) 0
+ primary-for QPluginLoader (0x0x7f7df95e4618)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f7df1fdf6c0) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f7df25ec000) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f7df25ec060) 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 (0x0x7f7df95f1548) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+QIODevice (0x0x7f7df5ca7d90) 0
+ primary-for QProcess (0x0x7f7df95f1548)
+QObject (0x0x7f7df23b2f00) 0
+ primary-for QIODevice (0x0x7f7df5ca7d90)
+QIODeviceBase (0x0x7f7df23b2f60) 0 empty
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f7df25ecde0) 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 (0x0x7f7df95f15b0) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+QAbstractAnimation (0x0x7f7df95f1618) 0
+ primary-for QVariantAnimation (0x0x7f7df95f15b0)
+QObject (0x0x7f7df25ecd80) 0
+ primary-for QAbstractAnimation (0x0x7f7df95f1618)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f7df32b4060) 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 (0x0x7f7df95f1680) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+QVariantAnimation (0x0x7f7df95f1750) 0
+ primary-for QPropertyAnimation (0x0x7f7df95f1680)
+QAbstractAnimation (0x0x7f7df95f17b8) 0
+ primary-for QVariantAnimation (0x0x7f7df95f1750)
+QObject (0x0x7f7df32b4000) 0
+ primary-for QAbstractAnimation (0x0x7f7df95f17b8)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f7df40cc840) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f7df8a0aba0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f7df8a0ab40) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f7df66df300) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f7df544f9c0) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f7df544f960) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f7df96023a8) 0
+QRandomGenerator (0x0x7f7df502bea0) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f7df48faae0) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f7df48fad20) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f7df43b91e0) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f7df43b9660) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f7df3b75240) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f7df3a36ba0) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f7df3724b40) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f7df32ac840) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f7df32acb40) 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 (0x0x7f7df96224e0) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+QFileDevice (0x0x7f7df9622548) 0
+ primary-for QSaveFile (0x0x7f7df96224e0)
+QIODevice (0x0x7f7df32e0460) 0
+ primary-for QFileDevice (0x0x7f7df9622548)
+QObject (0x0x7f7df32aca80) 0
+ primary-for QIODevice (0x0x7f7df32e0460)
+QIODeviceBase (0x0x7f7df32acae0) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f7df30fd180) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f7df2bf02a0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f7df2aefde0) 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 (0x0x7f7df962a208) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+QAnimationGroup (0x0x7f7df962a270) 0
+ primary-for QSequentialAnimationGroup (0x0x7f7df962a208)
+QAbstractAnimation (0x0x7f7df962a2d8) 0
+ primary-for QAnimationGroup (0x0x7f7df962a270)
+QObject (0x0x7f7df2aefd80) 0
+ primary-for QAbstractAnimation (0x0x7f7df962a2d8)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f7df962a478) 0
+QIterator<QMetaSequence> (0x0x7f7df962a4e0) 0
+QBaseIterator<QMetaSequence> (0x0x7f7df2b2a180) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f7df962a5b0) 0
+QConstIterator<QMetaSequence> (0x0x7f7df962a618) 0
+QBaseIterator<QMetaSequence> (0x0x7f7df2b2a720) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f7df962a680) 0
+QIterable<QMetaSequence> (0x0x7f7df2b2ac60) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f7df10287e0) 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 (0x0x7f7df97199c0) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+QObject (0x0x7f7df1028780) 0
+ primary-for QSettings (0x0x7f7df97199c0)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f7df1028c00) 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 (0x0x7f7df9719a28) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+QObject (0x0x7f7df1028ba0) 0
+ primary-for QSharedMemory (0x0x7f7df9719a28)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f7df1028de0) 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 (0x0x7f7df9719a90) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+QObject (0x0x7f7df1028d80) 0
+ primary-for QSignalMapper (0x0x7f7df9719a90)
+
+Class __uintr_frame
+ size=24 align=8
+ base size=24 base align=8
+__uintr_frame (0x0x7f7df642b120) 0
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f7def9f9840) 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 (0x0x7f7df9721e38) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+QObject (0x0x7f7def9f97e0) 0
+ primary-for QSocketNotifier (0x0x7f7df9721e38)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f7def9f99c0) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f7defa170c0) 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 (0x0x7f7df9721f08) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+QAbstractProxyModel (0x0x7f7df9721f70) 0
+ primary-for QSortFilterProxyModel (0x0x7f7df9721f08)
+QAbstractItemModel (0x0x7f7df9723000) 0
+ primary-for QAbstractProxyModel (0x0x7f7df9721f70)
+QObject (0x0x7f7defa17060) 0
+ primary-for QAbstractItemModel (0x0x7f7df9723000)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f7defa17480) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f7defa17d80) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f7defa5da20) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f7defa8f2a0) 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 (0x0x7f7df972fc98) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+QAbstractListModel (0x0x7f7df972fd00) 0
+ primary-for QStringListModel (0x0x7f7df972fc98)
+QAbstractItemModel (0x0x7f7df972fd68) 0
+ primary-for QAbstractListModel (0x0x7f7df972fd00)
+QObject (0x0x7f7defa8f240) 0
+ primary-for QAbstractItemModel (0x0x7f7df972fd68)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f7defa8f360) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f7defa8f480) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f7defa8f600) 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 (0x0x7f7df972fdd0) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+QFile (0x0x7f7df972fea0) 0
+ primary-for QTemporaryFile (0x0x7f7df972fdd0)
+QFileDevice (0x0x7f7df972ff08) 0
+ primary-for QFile (0x0x7f7df972fea0)
+QIODevice (0x0x7f7defa91620) 0
+ primary-for QFileDevice (0x0x7f7df972ff08)
+QObject (0x0x7f7defa8f540) 0
+ primary-for QIODevice (0x0x7f7defa91620)
+QIODeviceBase (0x0x7f7defa8f5a0) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f7defa8f840) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f7defa8fde0) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f7defaca4e0) 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 (0x0x7f7df9733068) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+QObject (0x0x7f7defaca480) 0
+ primary-for QTimeLine (0x0x7f7df9733068)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f7defaca6c0) 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 (0x0x7f7df97330d0) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+QObject (0x0x7f7defaca660) 0
+ primary-for QTimer (0x0x7f7df97330d0)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f7defae8480) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f7defae8420) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f7defb0d840) 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 (0x0x7f7df97443a8) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+QObject (0x0x7f7defb0d7e0) 0
+ primary-for QTranslator (0x0x7f7df97443a8)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f7defb0da20) 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 (0x0x7f7df9744478) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+QAbstractProxyModel (0x0x7f7df97444e0) 0
+ primary-for QTransposeProxyModel (0x0x7f7df9744478)
+QAbstractItemModel (0x0x7f7df9744548) 0
+ primary-for QAbstractProxyModel (0x0x7f7df97444e0)
+QObject (0x0x7f7defb0d9c0) 0
+ primary-for QAbstractItemModel (0x0x7f7df9744548)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f7defb0dba0) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f7defb57180) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f7defb572a0) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f7defb6a240) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f7df9758dd0) 0
+QList<QXmlStreamAttribute> (0x0x7f7df9758e38) 0
+QListSpecialMethods<QXmlStreamAttribute> (0x0x7f7df9758d68) 0 empty
+QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f7def7793c0) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f7def779c60) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f7def7af540) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f7def7b6de0) 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 (0x0x7f7def7c57e0) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f7def7c5840) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f7def7c5de0) 0
+
+Class QtConcurrent::TaskStartParameters
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::TaskStartParameters (0x0x7f7def7ee180) 0
+
+Class QtConcurrent::Median
+ size=72 align=8
+ base size=70 base align=8
+QtConcurrent::Median (0x0x7f7def7fd5a0) 0
+
+Class QtConcurrent::ThreadEngineBarrier
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::ThreadEngineBarrier (0x0x7f7def7fd9c0) 0
+
+Vtable for QtConcurrent::ThreadEngineBase
+QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN12QtConcurrent16ThreadEngineBaseE)
+16 (int (*)(...))QtConcurrent::ThreadEngineBase::run
+24 0
+32 0
+40 (int (*)(...))QtConcurrent::ThreadEngineBase::start
+48 (int (*)(...))QtConcurrent::ThreadEngineBase::finish
+56 (int (*)(...))QtConcurrent::ThreadEngineBase::threadFunction
+64 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldStartThread
+72 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldThrottleThread
+80 (int (*)(...))__cxa_pure_virtual
+
+Class QtConcurrent::ThreadEngineBase
+ size=64 align=8
+ base size=64 base align=8
+QtConcurrent::ThreadEngineBase (0x0x7f7df936da28) 0
+ vptr=((& QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE) + 16)
+QRunnable (0x0x7f7def7fda80) 0
+ primary-for QtConcurrent::ThreadEngineBase (0x0x7f7df936da28)
+
+Class QtConcurrent::BlockSizeManager
+ size=176 align=8
+ base size=172 base align=8
+QtConcurrent::BlockSizeManager (0x0x7f7def8115a0) 0
+
+Class QtPrivate::PushBackWrapper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::PushBackWrapper (0x0x7f7def8235a0) 0 empty
+
+Class QDBusAbstractAdaptor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractAdaptor::QPrivateSignal (0x0x7f7def8954e0) 0 empty
+
+Vtable for QDBusAbstractAdaptor
+QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDBusAbstractAdaptor)
+16 (int (*)(...))QDBusAbstractAdaptor::metaObject
+24 (int (*)(...))QDBusAbstractAdaptor::qt_metacast
+32 (int (*)(...))QDBusAbstractAdaptor::qt_metacall
+40 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+48 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractAdaptor
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractAdaptor (0x0x7f7df936e680) 0
+ vptr=((& QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor) + 16)
+QObject (0x0x7f7def895480) 0
+ primary-for QDBusAbstractAdaptor (0x0x7f7df936e680)
+
+Class QDBusError
+ size=64 align=8
+ base size=64 base align=8
+QDBusError (0x0x7f7def895660) 0
+
+Class QDBusMessage
+ size=8 align=8
+ base size=8 base align=8
+QDBusMessage (0x0x7f7def8b4540) 0
+
+Class QDBusObjectPath
+ size=24 align=8
+ base size=24 base align=8
+QDBusObjectPath (0x0x7f7def8cb8a0) 0
+
+Class QDBusSignature
+ size=24 align=8
+ base size=24 base align=8
+QDBusSignature (0x0x7f7def8e0240) 0
+
+Class QDBusVariant
+ size=32 align=8
+ base size=32 base align=8
+QDBusVariant (0x0x7f7def8eecc0) 0
+
+Class QDBusConnection
+ size=8 align=8
+ base size=8 base align=8
+QDBusConnection (0x0x7f7def9170c0) 0
+
+Class QDBusPendingCall
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingCall (0x0x7f7def951d80) 0
+
+Class QDBusPendingCallWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusPendingCallWatcher::QPrivateSignal (0x0x7f7def59dea0) 0 empty
+
+Vtable for QDBusPendingCallWatcher
+QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QDBusPendingCallWatcher)
+16 (int (*)(...))QDBusPendingCallWatcher::metaObject
+24 (int (*)(...))QDBusPendingCallWatcher::qt_metacast
+32 (int (*)(...))QDBusPendingCallWatcher::qt_metacall
+40 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+48 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusPendingCallWatcher
+ size=24 align=8
+ base size=24 base align=8
+QDBusPendingCallWatcher (0x0x7f7def59a4d0) 0
+ vptr=((& QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher) + 16)
+QObject (0x0x7f7def59dde0) 0
+ primary-for QDBusPendingCallWatcher (0x0x7f7def59a4d0)
+QDBusPendingCall (0x0x7f7def59de40) 16
+
+Vtable for QDBusAbstractInterfaceBase
+QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDBusAbstractInterfaceBase)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QDBusAbstractInterfaceBase::qt_metacall
+40 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+48 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterfaceBase (0x0x7f7df0172138) 0
+ vptr=((& QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase) + 16)
+QObject (0x0x7f7def5ab060) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f7df0172138)
+
+Class QDBusAbstractInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractInterface::QPrivateSignal (0x0x7f7def5ab1e0) 0 empty
+
+Vtable for QDBusAbstractInterface
+QDBusAbstractInterface::_ZTV22QDBusAbstractInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QDBusAbstractInterface)
+16 (int (*)(...))QDBusAbstractInterface::metaObject
+24 (int (*)(...))QDBusAbstractInterface::qt_metacast
+32 (int (*)(...))QDBusAbstractInterface::qt_metacall
+40 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+48 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusAbstractInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterface (0x0x7f7df0172958) 0
+ vptr=((& QDBusAbstractInterface::_ZTV22QDBusAbstractInterface) + 16)
+QDBusAbstractInterfaceBase (0x0x7f7df01729c0) 0
+ primary-for QDBusAbstractInterface (0x0x7f7df0172958)
+QObject (0x0x7f7def5ab180) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f7df01729c0)
+
+Class QDBusArgument
+ size=8 align=8
+ base size=8 base align=8
+QDBusArgument (0x0x7f7def5ab5a0) 0
+
+Class QDBusPendingReplyBase
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingReplyBase (0x0x7f7def6760d0) 0
+QDBusPendingCall (0x0x7f7def6234e0) 0
+
+Class QDBusConnectionInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusConnectionInterface::QPrivateSignal (0x0x7f7def6a75a0) 0 empty
+
+Vtable for QDBusConnectionInterface
+QDBusConnectionInterface::_ZTV24QDBusConnectionInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QDBusConnectionInterface)
+16 (int (*)(...))QDBusConnectionInterface::metaObject
+24 (int (*)(...))QDBusConnectionInterface::qt_metacast
+32 (int (*)(...))QDBusConnectionInterface::qt_metacall
+40 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+48 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusConnectionInterface::connectNotify
+104 (int (*)(...))QDBusConnectionInterface::disconnectNotify
+
+Class QDBusConnectionInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusConnectionInterface (0x0x7f7def676340) 0
+ vptr=((& QDBusConnectionInterface::_ZTV24QDBusConnectionInterface) + 16)
+QDBusAbstractInterface (0x0x7f7def6763a8) 0
+ primary-for QDBusConnectionInterface (0x0x7f7def676340)
+QDBusAbstractInterfaceBase (0x0x7f7def676410) 0
+ primary-for QDBusAbstractInterface (0x0x7f7def6763a8)
+QObject (0x0x7f7def6a7540) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f7def676410)
+
+Class QDBusContext
+ size=8 align=8
+ base size=8 base align=8
+QDBusContext (0x0x7f7def6a7a20) 0
+
+Vtable for QDBusInterface
+QDBusInterface::_ZTV14QDBusInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDBusInterface)
+16 (int (*)(...))QDBusInterface::metaObject
+24 (int (*)(...))QDBusInterface::qt_metacast
+32 (int (*)(...))QDBusInterface::qt_metacall
+40 (int (*)(...))QDBusInterface::~QDBusInterface
+48 (int (*)(...))QDBusInterface::~QDBusInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusInterface (0x0x7f7def676478) 0
+ vptr=((& QDBusInterface::_ZTV14QDBusInterface) + 16)
+QDBusAbstractInterface (0x0x7f7def6764e0) 0
+ primary-for QDBusInterface (0x0x7f7def676478)
+QDBusAbstractInterfaceBase (0x0x7f7def676548) 0
+ primary-for QDBusAbstractInterface (0x0x7f7def6764e0)
+QObject (0x0x7f7def6a7a80) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f7def676548)
+
+Class QDBusMetaType
+ size=1 align=1
+ base size=0 base align=1
+QDBusMetaType (0x0x7f7def6a7ba0) 0 empty
+
+Class QDBusServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServer::QPrivateSignal (0x0x7f7def6a7e40) 0 empty
+
+Vtable for QDBusServer
+QDBusServer::_ZTV11QDBusServer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDBusServer)
+16 (int (*)(...))QDBusServer::metaObject
+24 (int (*)(...))QDBusServer::qt_metacast
+32 (int (*)(...))QDBusServer::qt_metacall
+40 (int (*)(...))QDBusServer::~QDBusServer
+48 (int (*)(...))QDBusServer::~QDBusServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServer
+ size=24 align=8
+ base size=24 base align=8
+QDBusServer (0x0x7f7def6765b0) 0
+ vptr=((& QDBusServer::_ZTV11QDBusServer) + 16)
+QObject (0x0x7f7def6a7de0) 0
+ primary-for QDBusServer (0x0x7f7def6765b0)
+
+Class QDBusServiceWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServiceWatcher::QPrivateSignal (0x0x7f7def6a7f60) 0 empty
+
+Vtable for QDBusServiceWatcher
+QDBusServiceWatcher::_ZTV19QDBusServiceWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDBusServiceWatcher)
+16 (int (*)(...))QDBusServiceWatcher::metaObject
+24 (int (*)(...))QDBusServiceWatcher::qt_metacast
+32 (int (*)(...))QDBusServiceWatcher::qt_metacall
+40 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+48 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServiceWatcher
+ size=16 align=8
+ base size=16 base align=8
+QDBusServiceWatcher (0x0x7f7def676618) 0
+ vptr=((& QDBusServiceWatcher::_ZTV19QDBusServiceWatcher) + 16)
+QObject (0x0x7f7def6a7f00) 0
+ primary-for QDBusServiceWatcher (0x0x7f7def676618)
+
+Class QDBusUnixFileDescriptor
+ size=8 align=8
+ base size=8 base align=8
+QDBusUnixFileDescriptor (0x0x7f7def6d84e0) 0
+
+Class QDBusVirtualObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusVirtualObject::QPrivateSignal (0x0x7f7def71b120) 0 empty
+
+Vtable for QDBusVirtualObject
+QDBusVirtualObject::_ZTV18QDBusVirtualObject: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QDBusVirtualObject)
+16 (int (*)(...))QDBusVirtualObject::metaObject
+24 (int (*)(...))QDBusVirtualObject::qt_metacast
+32 (int (*)(...))QDBusVirtualObject::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 QDBusVirtualObject
+ size=16 align=8
+ base size=16 base align=8
+QDBusVirtualObject (0x0x7f7def711c98) 0
+ vptr=((& QDBusVirtualObject::_ZTV18QDBusVirtualObject) + 16)
+QObject (0x0x7f7def71b0c0) 0
+ primary-for QDBusVirtualObject (0x0x7f7def711c98)
+
+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 (0x0x7f7def71b1e0) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f7def71bc60) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f7def75eba0) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f7def75eb40) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f7def3a8c60) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f7def412e38) 0
+QList<QPoint> (0x0x7f7def412ea0) 0
+QListSpecialMethods<QPoint> (0x0x7f7def412f08) 0 empty
+QListSpecialMethodsBase<QPoint> (0x0x7f7def414a80) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f7def485138) 0
+QList<QPointF> (0x0x7f7def4851a0) 0
+QListSpecialMethods<QPointF> (0x0x7f7def485208) 0 empty
+QListSpecialMethodsBase<QPointF> (0x0x7f7def47e480) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f7def4cba80) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f7def4cba20) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f7def50fd80) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f7def50fd20) 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 (0x0x7f7def548208) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+QPaintDevice (0x0x7f7def54bba0) 0
+ primary-for QImage (0x0x7f7def548208)
+
+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 (0x0x7f7def1aee38) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+QPaintDevice (0x0x7f7def1ba360) 0
+ primary-for QPixmap (0x0x7f7def1aee38)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f7def22a180) 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 (0x0x7f7def27b300) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f7def27b7e0) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f7def2d7780) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f7def313900) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f7deef9b360) 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 (0x0x7f7def3591a0) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+QObject (0x0x7f7deef9b300) 0
+ primary-for QScreen (0x0x7f7def3591a0)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f7deef9b540) 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 (0x0x7f7def359208) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+QObject (0x0x7f7deef9b4e0) 0
+ primary-for QInputDevice (0x0x7f7def359208)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f7deef9be40) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f7def005900) 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 (0x0x7f7def00e3a8) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+QInputDevice (0x0x7f7def00e410) 0
+ primary-for QPointingDevice (0x0x7f7def00e3a8)
+QObject (0x0x7f7def0058a0) 0
+ primary-for QInputDevice (0x0x7f7def00e410)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f7def005f60) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f7def0a7000) 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 (0x0x7f7def0f7680) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+QEvent (0x0x7f7def0ead80) 0
+ primary-for QInputEvent (0x0x7f7def0f7680)
+
+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 (0x0x7f7def0f76e8) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+QInputEvent (0x0x7f7def0f7750) 0
+ primary-for QPointerEvent (0x0x7f7def0f76e8)
+QEvent (0x0x7f7def10b2a0) 0
+ primary-for QInputEvent (0x0x7f7def0f7750)
+
+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 (0x0x7f7def0f79c0) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+QPointerEvent (0x0x7f7def0f7a28) 0
+ primary-for QSinglePointEvent (0x0x7f7def0f79c0)
+QInputEvent (0x0x7f7def0f7a90) 0
+ primary-for QPointerEvent (0x0x7f7def0f7a28)
+QEvent (0x0x7f7def10bde0) 0
+ primary-for QInputEvent (0x0x7f7def0f7a90)
+
+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 (0x0x7f7def0f7af8) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+QSinglePointEvent (0x0x7f7def0f7b60) 0
+ primary-for QEnterEvent (0x0x7f7def0f7af8)
+QPointerEvent (0x0x7f7def0f7bc8) 0
+ primary-for QSinglePointEvent (0x0x7f7def0f7b60)
+QInputEvent (0x0x7f7def0f7c30) 0
+ primary-for QPointerEvent (0x0x7f7def0f7bc8)
+QEvent (0x0x7f7def1682a0) 0
+ primary-for QInputEvent (0x0x7f7def0f7c30)
+
+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 (0x0x7f7def0f7c98) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+QSinglePointEvent (0x0x7f7def0f7d00) 0
+ primary-for QMouseEvent (0x0x7f7def0f7c98)
+QPointerEvent (0x0x7f7def0f7d68) 0
+ primary-for QSinglePointEvent (0x0x7f7def0f7d00)
+QInputEvent (0x0x7f7def0f7dd0) 0
+ primary-for QPointerEvent (0x0x7f7def0f7d68)
+QEvent (0x0x7f7def168a20) 0
+ primary-for QInputEvent (0x0x7f7def0f7dd0)
+
+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 (0x0x7f7def0f7e38) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+QSinglePointEvent (0x0x7f7def0f7ea0) 0
+ primary-for QHoverEvent (0x0x7f7def0f7e38)
+QPointerEvent (0x0x7f7def0f7f08) 0
+ primary-for QSinglePointEvent (0x0x7f7def0f7ea0)
+QInputEvent (0x0x7f7def0f7f70) 0
+ primary-for QPointerEvent (0x0x7f7def0f7f08)
+QEvent (0x0x7f7deed83000) 0
+ primary-for QInputEvent (0x0x7f7def0f7f70)
+
+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 (0x0x7f7def0f7958) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+QSinglePointEvent (0x0x7f7deed8f000) 0
+ primary-for QWheelEvent (0x0x7f7def0f7958)
+QPointerEvent (0x0x7f7deed8f068) 0
+ primary-for QSinglePointEvent (0x0x7f7deed8f000)
+QInputEvent (0x0x7f7deed8f0d0) 0
+ primary-for QPointerEvent (0x0x7f7deed8f068)
+QEvent (0x0x7f7deed83420) 0
+ primary-for QInputEvent (0x0x7f7deed8f0d0)
+
+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 (0x0x7f7deed8f138) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+QSinglePointEvent (0x0x7f7deed8f1a0) 0
+ primary-for QTabletEvent (0x0x7f7deed8f138)
+QPointerEvent (0x0x7f7deed8f208) 0
+ primary-for QSinglePointEvent (0x0x7f7deed8f1a0)
+QInputEvent (0x0x7f7deed8f270) 0
+ primary-for QPointerEvent (0x0x7f7deed8f208)
+QEvent (0x0x7f7deed83900) 0
+ primary-for QInputEvent (0x0x7f7deed8f270)
+
+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 (0x0x7f7deed8f2d8) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+QSinglePointEvent (0x0x7f7deed8f340) 0
+ primary-for QNativeGestureEvent (0x0x7f7deed8f2d8)
+QPointerEvent (0x0x7f7deed8f3a8) 0
+ primary-for QSinglePointEvent (0x0x7f7deed8f340)
+QInputEvent (0x0x7f7deed8f410) 0
+ primary-for QPointerEvent (0x0x7f7deed8f3a8)
+QEvent (0x0x7f7deedac1e0) 0
+ primary-for QInputEvent (0x0x7f7deed8f410)
+
+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 (0x0x7f7deed8f478) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+QInputEvent (0x0x7f7deed8f4e0) 0
+ primary-for QKeyEvent (0x0x7f7deed8f478)
+QEvent (0x0x7f7deedac6c0) 0
+ primary-for QInputEvent (0x0x7f7deed8f4e0)
+
+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 (0x0x7f7deed8f548) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+QEvent (0x0x7f7deedaccc0) 0
+ primary-for QFocusEvent (0x0x7f7deed8f548)
+
+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 (0x0x7f7deed8f5b0) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+QEvent (0x0x7f7deedcf060) 0
+ primary-for QPaintEvent (0x0x7f7deed8f5b0)
+
+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 (0x0x7f7deed8f618) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+QEvent (0x0x7f7deedcf360) 0
+ primary-for QMoveEvent (0x0x7f7deed8f618)
+
+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 (0x0x7f7deed8f680) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+QEvent (0x0x7f7deedcf6c0) 0
+ primary-for QExposeEvent (0x0x7f7deed8f680)
+
+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 (0x0x7f7deed8f6e8) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+QEvent (0x0x7f7deedcf960) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f7deed8f6e8)
+
+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 (0x0x7f7deed8f750) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+QEvent (0x0x7f7deedcfc60) 0
+ primary-for QResizeEvent (0x0x7f7deed8f750)
+
+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 (0x0x7f7deed8f7b8) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+QEvent (0x0x7f7deedf5000) 0
+ primary-for QCloseEvent (0x0x7f7deed8f7b8)
+
+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 (0x0x7f7deed8f820) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+QEvent (0x0x7f7deedf5060) 0
+ primary-for QIconDragEvent (0x0x7f7deed8f820)
+
+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 (0x0x7f7deed8f888) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+QEvent (0x0x7f7deedf50c0) 0
+ primary-for QShowEvent (0x0x7f7deed8f888)
+
+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 (0x0x7f7deed8f8f0) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+QEvent (0x0x7f7deedf5120) 0
+ primary-for QHideEvent (0x0x7f7deed8f8f0)
+
+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 (0x0x7f7deed8f958) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+QInputEvent (0x0x7f7deed8f9c0) 0
+ primary-for QContextMenuEvent (0x0x7f7deed8f958)
+QEvent (0x0x7f7deedf5180) 0
+ primary-for QInputEvent (0x0x7f7deed8f9c0)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f7deedf5720) 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 (0x0x7f7deed8fa28) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+QEvent (0x0x7f7deedf56c0) 0
+ primary-for QInputMethodEvent (0x0x7f7deed8fa28)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f7deee71d80) 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 (0x0x7f7deee7ea28) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+QEvent (0x0x7f7deee71d20) 0
+ primary-for QInputMethodQueryEvent (0x0x7f7deee7ea28)
+
+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 (0x0x7f7deeee7af8) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+QEvent (0x0x7f7deeedfd20) 0
+ primary-for QDropEvent (0x0x7f7deeee7af8)
+
+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 (0x0x7f7deeee7b60) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+QDropEvent (0x0x7f7deeee7bc8) 0
+ primary-for QDragMoveEvent (0x0x7f7deeee7b60)
+QEvent (0x0x7f7deef07480) 0
+ primary-for QDropEvent (0x0x7f7deeee7bc8)
+
+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 (0x0x7f7deeee7c30) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+QDragMoveEvent (0x0x7f7deeee7c98) 0
+ primary-for QDragEnterEvent (0x0x7f7deeee7c30)
+QDropEvent (0x0x7f7deeee7d00) 0
+ primary-for QDragMoveEvent (0x0x7f7deeee7c98)
+QEvent (0x0x7f7deef07900) 0
+ primary-for QDropEvent (0x0x7f7deeee7d00)
+
+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 (0x0x7f7deeee7d68) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+QEvent (0x0x7f7deef07960) 0
+ primary-for QDragLeaveEvent (0x0x7f7deeee7d68)
+
+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 (0x0x7f7deeee7dd0) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+QEvent (0x0x7f7deef079c0) 0
+ primary-for QHelpEvent (0x0x7f7deeee7dd0)
+
+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 (0x0x7f7deeee7e38) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+QEvent (0x0x7f7deef07ea0) 0
+ primary-for QStatusTipEvent (0x0x7f7deeee7e38)
+
+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 (0x0x7f7deeee7ea0) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+QEvent (0x0x7f7deef32180) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f7deeee7ea0)
+
+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 (0x0x7f7deeee7f08) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+QEvent (0x0x7f7deef32420) 0
+ primary-for QActionEvent (0x0x7f7deeee7f08)
+
+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 (0x0x7f7deeee7f70) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+QEvent (0x0x7f7deef32780) 0
+ primary-for QFileOpenEvent (0x0x7f7deeee7f70)
+
+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 (0x0x7f7deef50000) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+QEvent (0x0x7f7deef32a80) 0
+ primary-for QToolBarChangeEvent (0x0x7f7deef50000)
+
+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 (0x0x7f7deef50068) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+QEvent (0x0x7f7deef32d80) 0
+ primary-for QShortcutEvent (0x0x7f7deef50068)
+
+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 (0x0x7f7deef500d0) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+QEvent (0x0x7f7deef65120) 0
+ primary-for QWindowStateChangeEvent (0x0x7f7deef500d0)
+
+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 (0x0x7f7deef50138) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+QPointerEvent (0x0x7f7deef501a0) 0
+ primary-for QTouchEvent (0x0x7f7deef50138)
+QInputEvent (0x0x7f7deef50208) 0
+ primary-for QPointerEvent (0x0x7f7deef501a0)
+QEvent (0x0x7f7deef65420) 0
+ primary-for QInputEvent (0x0x7f7deef50208)
+
+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 (0x0x7f7deef50270) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+QEvent (0x0x7f7deef65780) 0
+ primary-for QScrollPrepareEvent (0x0x7f7deef50270)
+
+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 (0x0x7f7deef502d8) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+QEvent (0x0x7f7deef65ba0) 0
+ primary-for QScrollEvent (0x0x7f7deef502d8)
+
+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 (0x0x7f7deef50340) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+QEvent (0x0x7f7deef65f60) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f7deef50340)
+
+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 (0x0x7f7deef503a8) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+QEvent (0x0x7f7dfcfa0300) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f7deef503a8)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f7dfcfa0600) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f7dfd02a8a0) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f7dfd02aa80) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f7dfd0a8c60) 0
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f7dfd134660) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f7dfcd7e420) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f7dfcd7e660) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f7dfcd7e600) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f7dfcd81bc8) 0
+QGradient (0x0x7f7dfcdf73c0) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f7dfcd81c30) 0
+QGradient (0x0x7f7dfcdf74e0) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f7dfcd81c98) 0
+QGradient (0x0x7f7dfcdf7600) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f7dfcdf76c0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f7dfce617e0) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f7dfce61780) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f7dfce96540) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f7dfced73c0) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f7dfcba2d00) 0
+QTextFormat (0x0x7f7dfcb9fc00) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f7dfcc20f70) 0
+QTextFormat (0x0x7f7dfcc2b4e0) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f7dfcc770d0) 0
+QTextFormat (0x0x7f7dfcc67de0) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f7dfccad1a0) 0
+QTextCharFormat (0x0x7f7dfccad208) 0
+QTextFormat (0x0x7f7dfccb20c0) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f7dfccdd340) 0
+QTextFormat (0x0x7f7dfcce3300) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f7dfcd1c478) 0
+QTextFrameFormat (0x0x7f7dfcd1c4e0) 0
+QTextFormat (0x0x7f7dfcd19ae0) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f7dfcd5b618) 0
+QTextCharFormat (0x0x7f7dfcd5b680) 0
+QTextFormat (0x0x7f7dfcd64180) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f7dfc9a17e0) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f7dfca300c0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f7dfca304e0) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f7dfca30480) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f7dfcabf780) 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 (0x0x7f7dfcabfc00) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f7dfcabfea0) 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 (0x0x7f7dfcaca270) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+QObject (0x0x7f7dfcabfe40) 0
+ primary-for QTextDocument (0x0x7f7dfcaca270)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f7dfcb0a6c0) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f7dedbca4e0) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f7dedbca540) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f7dedbca5a0) 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 (0x0x7f7dedbc77b8) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+QObject (0x0x7f7dedbca480) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f7dedbc77b8)
+
+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 (0x0x7f7dedc81f60) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f7dedca21e0) 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 (0x0x7f7dedca2240) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f7dedca2180) 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 (0x0x7f7dedca2a80) 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 (0x0x7f7dedca2de0) 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 (0x0x7f7dedca2e40) 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 (0x0x7f7dedca2ea0) 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 (0x0x7f7dedca2f00) 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 (0x0x7f7dedca2f60) 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 (0x0x7f7dedd03000) 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 (0x0x7f7dedd030c0) 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 (0x0x7f7dedd03120) 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 (0x0x7f7dedc96680) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+QAccessibleEvent (0x0x7f7dedd03660) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f7dedc96680)
+
+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 (0x0x7f7dedc966e8) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+QAccessibleEvent (0x0x7f7dedd03a20) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f7dedc966e8)
+
+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 (0x0x7f7dedc96750) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f7dedc967b8) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f7dedc96750)
+QAccessibleEvent (0x0x7f7dedd03e40) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f7dedc967b8)
+
+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 (0x0x7f7dedc96820) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f7dedc96888) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f7dedc96820)
+QAccessibleEvent (0x0x7f7dedd32300) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f7dedc96888)
+
+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 (0x0x7f7dedc968f0) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f7dedc96958) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f7dedc968f0)
+QAccessibleEvent (0x0x7f7dedd32720) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f7dedc96958)
+
+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 (0x0x7f7dedc969c0) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f7dedc96a28) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f7dedc969c0)
+QAccessibleEvent (0x0x7f7dedd32b40) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f7dedc96a28)
+
+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 (0x0x7f7dedc96a90) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+QAccessibleEvent (0x0x7f7dedd54000) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f7dedc96a90)
+
+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 (0x0x7f7dedc96af8) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+QAccessibleEvent (0x0x7f7dedd54420) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f7dedc96af8)
+
+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 (0x0x7f7dedd54cc0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f7dedd54f60) 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 (0x0x7f7dedc96b60) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+QObject (0x0x7f7dedd54f00) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f7dedc96b60)
+
+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 (0x0x7f7dedc96bc8) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+QAccessibleInterface (0x0x7f7ded977060) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f7dedc96bc8)
+
+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 (0x0x7f7dedc96c30) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+QAccessibleObject (0x0x7f7dedc96c98) 0
+ primary-for QAccessibleApplication (0x0x7f7dedc96c30)
+QAccessibleInterface (0x0x7f7ded9770c0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f7dedc96c98)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f7ded977180) 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 (0x0x7f7dedc96d00) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+QObject (0x0x7f7ded977120) 0
+ primary-for QAccessiblePlugin (0x0x7f7dedc96d00)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f7ded9772a0) 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 (0x0x7f7dedc96d68) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+QObject (0x0x7f7ded977240) 0
+ primary-for QAction (0x0x7f7dedc96d68)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f7ded977ba0) 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 (0x0x7f7dedc96dd0) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+QObject (0x0x7f7ded977b40) 0
+ primary-for QActionGroup (0x0x7f7dedc96dd0)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f7ded977e40) 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 (0x0x7f7ded9d96c0) 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 (0x0x7f7dedc96f08) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+QPixmap (0x0x7f7dedc96f70) 0
+ primary-for QBitmap (0x0x7f7dedc96f08)
+QPaintDevice (0x0x7f7ded9d99c0) 0
+ primary-for QPixmap (0x0x7f7dedc96f70)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f7deda32540) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f7deda8f720) 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 (0x0x7f7deda980e0) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+QObject (0x0x7f7deda8f660) 0
+ primary-for QWindow (0x0x7f7deda980e0)
+QSurface (0x0x7f7deda8f6c0) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f7deda8ff60) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f7dedad80c0) 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 (0x0x7f7deda8be38) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+QObject (0x0x7f7dedad8060) 0
+ primary-for QClipboard (0x0x7f7deda8be38)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f7dedad81e0) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f7dedb4a4e0) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f7ded7c53c0) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f7ded7c5480) 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 (0x0x7f7ded7c46e8) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+QObject (0x0x7f7ded7c5420) 0
+ primary-for QDrag (0x0x7f7ded7c46e8)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f7ded7c5660) 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 (0x0x7f7ded7c4750) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+QAbstractItemModel (0x0x7f7ded7c47b8) 0
+ primary-for QFileSystemModel (0x0x7f7ded7c4750)
+QObject (0x0x7f7ded7c5600) 0
+ primary-for QAbstractItemModel (0x0x7f7ded7c47b8)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f7ded7c5c60) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f7ded8407e0) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f7ded87c480) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f7ded9253c0) 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 (0x0x7f7ded90c138) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+QObject (0x0x7f7ded925360) 0
+ primary-for QGenericPlugin (0x0x7f7ded90c138)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f7ded925480) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f7ded925540) 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 (0x0x7f7ded90c1a0) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+QObject (0x0x7f7ded9254e0) 0
+ primary-for QInputMethod (0x0x7f7ded90c1a0)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f7ded9257e0) 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 (0x0x7f7ded90c208) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+QCoreApplication (0x0x7f7ded90c270) 0
+ primary-for QGuiApplication (0x0x7f7ded90c208)
+QObject (0x0x7f7ded925780) 0
+ primary-for QCoreApplication (0x0x7f7ded90c270)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f7ded925a80) 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 (0x0x7f7ded925a20) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f7ded925b40) 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 (0x0x7f7ded90c2d8) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+QObject (0x0x7f7ded925ae0) 0
+ primary-for QIconEnginePlugin (0x0x7f7ded90c2d8)
+
+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 (0x0x7f7ded925c00) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f7ded925e40) 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 (0x0x7f7ded90c340) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+QObject (0x0x7f7ded925de0) 0
+ primary-for QImageIOPlugin (0x0x7f7ded90c340)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f7ded57e240) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f7ded57e300) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f7ded57e3c0) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f7ded6122a0) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f7ded6db960) 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 (0x0x7f7ded676820) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+QObject (0x0x7f7ded6db900) 0
+ primary-for QMovie (0x0x7f7ded676820)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f7ded6dbd20) 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 (0x0x7f7ded744150) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+QObject (0x0x7f7ded6dbc60) 0
+ primary-for QOffscreenSurface (0x0x7f7ded744150)
+QSurface (0x0x7f7ded6dbcc0) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f7ded6dbf60) 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 (0x0x7f7ded676888) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+QObject (0x0x7f7ded6dbf00) 0
+ primary-for QOpenGLContextGroup (0x0x7f7ded676888)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f7ded332180) 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 (0x0x7f7ded6768f0) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+QObject (0x0x7f7ded332120) 0
+ primary-for QOpenGLContext (0x0x7f7ded6768f0)
+
+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 (0x0x7f7ded332300) 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 (0x0x7f7ded332360) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f7ded3323c0) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f7ded332960) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f7ded332900) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f7ded676c98) 0
+QOpenGLFunctions (0x0x7f7ded0c0120) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f7ded0c0480) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f7ded676d00) 0
+QOpenGLFunctionsPrivate (0x0x7f7ded0c0420) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f7deceae180) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f7decf31f00) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f7decbcede0) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f7decbced80) 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 (0x0x7f7deccac5b0) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+QPaintDevice (0x0x7f7deccb22a0) 0
+ primary-for QPagedPaintDevice (0x0x7f7deccac5b0)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f7deccb2420) 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 (0x0x7f7deccb9150) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+QWindow (0x0x7f7deccb91c0) 0
+ primary-for QPaintDeviceWindow (0x0x7f7deccb9150)
+QObject (0x0x7f7deccb2300) 0
+ primary-for QWindow (0x0x7f7deccb91c0)
+QSurface (0x0x7f7deccb2360) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+QPaintDevice (0x0x7f7deccb23c0) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f7deccb2600) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f7deccb25a0) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f7dec779240) 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 (0x0x7f7dec7a2c60) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f7dec7f72a0) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f7dec7f7d20) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f7dec7f7cc0) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f7dec9243c0) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f7dec924ba0) 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 (0x0x7f7dec948460) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+QObject (0x0x7f7dec924ae0) 0
+ primary-for QPdfWriter (0x0x7f7dec948460)
+QPagedPaintDevice (0x0x7f7dec9206e8) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+QPaintDevice (0x0x7f7dec924b40) 16
+ primary-for QPagedPaintDevice (0x0x7f7dec9206e8)
+
+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 (0x0x7f7dec920750) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+QPaintDevice (0x0x7f7dec924d80) 0
+ primary-for QPicture (0x0x7f7dec920750)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f7dec5aca80) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f7dec5aca20) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f7dec619c60) 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 (0x0x7f7dec616ea0) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+QPaintDeviceWindow (0x0x7f7dec5cbee0) 0
+ primary-for QRasterWindow (0x0x7f7dec616ea0)
+QWindow (0x0x7f7dec5cbf50) 0
+ primary-for QPaintDeviceWindow (0x0x7f7dec5cbee0)
+QObject (0x0x7f7dec619b40) 0
+ primary-for QWindow (0x0x7f7dec5cbf50)
+QSurface (0x0x7f7dec619ba0) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+QPaintDevice (0x0x7f7dec619c00) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f7dec619e40) 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 (0x0x7f7dec616f70) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+QObject (0x0x7f7dec619de0) 0
+ primary-for QSessionManager (0x0x7f7dec616f70)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f7dec64d060) 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 (0x0x7f7dec64c000) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+QObject (0x0x7f7dec64d000) 0
+ primary-for QShortcut (0x0x7f7dec64c000)
+
+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 (0x0x7f7dec64d540) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f7dec73f420) 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 (0x0x7f7dec64c750) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+QAbstractItemModel (0x0x7f7dec64c7b8) 0
+ primary-for QStandardItemModel (0x0x7f7dec64c750)
+QObject (0x0x7f7dec73f3c0) 0
+ primary-for QAbstractItemModel (0x0x7f7dec64c7b8)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f7dec73f780) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f7dec3fc300) 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 (0x0x7f7dec3ecc30) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+QObject (0x0x7f7dec3fc2a0) 0
+ primary-for QStyleHints (0x0x7f7dec3ecc30)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f7dec3fc4e0) 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 (0x0x7f7dec3ecc98) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+QObject (0x0x7f7dec3fc480) 0
+ primary-for QTextObject (0x0x7f7dec3ecc98)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f7dec3fc6c0) 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 (0x0x7f7dec3ecd00) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+QTextObject (0x0x7f7dec3ecd68) 0
+ primary-for QTextBlockGroup (0x0x7f7dec3ecd00)
+QObject (0x0x7f7dec3fc660) 0
+ primary-for QTextObject (0x0x7f7dec3ecd68)
+
+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 (0x0x7f7dec3fc840) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f7dec3fc900) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f7dec3fc960) 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 (0x0x7f7dec3ecdd0) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+QTextObject (0x0x7f7dec3ece38) 0
+ primary-for QTextFrame (0x0x7f7dec3ecdd0)
+QObject (0x0x7f7dec3fc8a0) 0
+ primary-for QTextObject (0x0x7f7dec3ece38)
+
+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 (0x0x7f7dec476900) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f7dec4769c0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f7dec476960) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f7dec5105a0) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f7dec554660) 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 (0x0x7f7dec552c30) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+QObject (0x0x7f7dec554600) 0
+ primary-for QSyntaxHighlighter (0x0x7f7dec552c30)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f7dec5547e0) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f7dec554840) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f7dec554900) 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 (0x0x7f7dec552c98) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+QTextBlockGroup (0x0x7f7dec552d00) 0
+ primary-for QTextList (0x0x7f7dec552c98)
+QTextObject (0x0x7f7dec552d68) 0
+ primary-for QTextBlockGroup (0x0x7f7dec552d00)
+QObject (0x0x7f7dec5548a0) 0
+ primary-for QTextObject (0x0x7f7dec552d68)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f7dec554cc0) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f7dec19a540) 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 (0x0x7f7dec552dd0) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+QTextFrame (0x0x7f7dec552e38) 0
+ primary-for QTextTable (0x0x7f7dec552dd0)
+QTextObject (0x0x7f7dec552ea0) 0
+ primary-for QTextFrame (0x0x7f7dec552e38)
+QObject (0x0x7f7dec19a4e0) 0
+ primary-for QTextObject (0x0x7f7dec552ea0)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f7dec19a900) 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 (0x0x7f7dec552f08) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+QObject (0x0x7f7dec19a8a0) 0
+ primary-for QUndoGroup (0x0x7f7dec552f08)
+
+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 (0x0x7f7dec19aa80) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f7dec19ab40) 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 (0x0x7f7dec552f70) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+QObject (0x0x7f7dec19aae0) 0
+ primary-for QUndoStack (0x0x7f7dec552f70)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f7dec19ad20) 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 (0x0x7f7dec1dd000) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+QObject (0x0x7f7dec19acc0) 0
+ primary-for QValidator (0x0x7f7dec1dd000)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f7dec1f0000) 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 (0x0x7f7dec1dd068) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+QValidator (0x0x7f7dec1dd0d0) 0
+ primary-for QIntValidator (0x0x7f7dec1dd068)
+QObject (0x0x7f7dec19af60) 0
+ primary-for QValidator (0x0x7f7dec1dd0d0)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f7dec1f01e0) 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 (0x0x7f7dec1dd138) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+QValidator (0x0x7f7dec1dd1a0) 0
+ primary-for QDoubleValidator (0x0x7f7dec1dd138)
+QObject (0x0x7f7dec1f0180) 0
+ primary-for QValidator (0x0x7f7dec1dd1a0)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f7dec1f05a0) 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 (0x0x7f7dec1dd208) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+QValidator (0x0x7f7dec1dd270) 0
+ primary-for QRegularExpressionValidator (0x0x7f7dec1dd208)
+QObject (0x0x7f7dec1f0540) 0
+ primary-for QValidator (0x0x7f7dec1dd270)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f7dec1f0780) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f7dec1f0720) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f7dec2ac840) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f7dec2ac960) 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 (0x0x7f7dec268ee0) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+QObject (0x0x7f7dec2ac8a0) 0
+ primary-for QWidget (0x0x7f7dec268ee0)
+QPaintDevice (0x0x7f7dec2ac900) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f7debf99240) 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 (0x0x7f7dec2b27b8) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+QWidget (0x0x7f7debf8d7e0) 0
+ primary-for QAbstractButton (0x0x7f7dec2b27b8)
+QObject (0x0x7f7debf99180) 0
+ primary-for QWidget (0x0x7f7debf8d7e0)
+QPaintDevice (0x0x7f7debf991e0) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f7debf99480) 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 (0x0x7f7dec2b2820) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+QWidget (0x0x7f7debf8d9a0) 0
+ primary-for QAbstractSpinBox (0x0x7f7dec2b2820)
+QObject (0x0x7f7debf993c0) 0
+ primary-for QWidget (0x0x7f7debf8d9a0)
+QPaintDevice (0x0x7f7debf99420) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f7debf99c00) 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 (0x0x7f7dec2b2958) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+QWidget (0x0x7f7debfe23f0) 0
+ primary-for QAbstractSlider (0x0x7f7dec2b2958)
+QObject (0x0x7f7debf99b40) 0
+ primary-for QWidget (0x0x7f7debfe23f0)
+QPaintDevice (0x0x7f7debf99ba0) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f7debf99e40) 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 (0x0x7f7dec2b29c0) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+QAbstractSlider (0x0x7f7dec2b2a28) 0
+ primary-for QSlider (0x0x7f7dec2b29c0)
+QWidget (0x0x7f7debfe2af0) 0
+ primary-for QAbstractSlider (0x0x7f7dec2b2a28)
+QObject (0x0x7f7debf99d80) 0
+ primary-for QWidget (0x0x7f7debfe2af0)
+QPaintDevice (0x0x7f7debf99de0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f7dec043120) 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 (0x0x7f7dec2b2a90) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+QObject (0x0x7f7dec0430c0) 0
+ primary-for QStyle (0x0x7f7dec2b2a90)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f7dec0eb1e0) 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 (0x0x7f7dec2b2c98) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+QWidget (0x0x7f7dec099620) 0
+ primary-for QTabBar (0x0x7f7dec2b2c98)
+QObject (0x0x7f7dec0eb120) 0
+ primary-for QWidget (0x0x7f7dec099620)
+QPaintDevice (0x0x7f7dec0eb180) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f7dec0eb4e0) 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 (0x0x7f7dec2b2d00) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+QWidget (0x0x7f7dec099e70) 0
+ primary-for QTabWidget (0x0x7f7dec2b2d00)
+QObject (0x0x7f7dec0eb420) 0
+ primary-for QWidget (0x0x7f7dec099e70)
+QPaintDevice (0x0x7f7dec0eb480) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f7dec0eb8a0) 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 (0x0x7f7dec2b2d68) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+QWidget (0x0x7f7dec133540) 0
+ primary-for QRubberBand (0x0x7f7dec2b2d68)
+QObject (0x0x7f7dec0eb7e0) 0
+ primary-for QWidget (0x0x7f7dec133540)
+QPaintDevice (0x0x7f7dec0eb840) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f7dec0ebcc0) 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 (0x0x7f7dec2b2dd0) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+QWidget (0x0x7f7dec133a10) 0
+ primary-for QFrame (0x0x7f7dec2b2dd0)
+QObject (0x0x7f7dec0ebc00) 0
+ primary-for QWidget (0x0x7f7dec133a10)
+QPaintDevice (0x0x7f7dec0ebc60) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f7debd81000) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f7dec2b2e38) 0
+QStyleOption (0x0x7f7debd81060) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f7def7620d0) 0
+QStyleOption (0x0x7f7debd812a0) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f7def762208) 0
+QStyleOption (0x0x7f7debd817e0) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f7def762270) 0
+QStyleOption (0x0x7f7debd81a20) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f7dec2b2ea0) 0
+QStyleOption (0x0x7f7debd81c60) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7f7dec2b2f08) 0
+QStyleOptionHeader (0x0x7f7dec2b2f70) 0
+QStyleOption (0x0x7f7debd81ea0) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f7debdfb068) 0
+QStyleOption (0x0x7f7debdff2a0) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f7debdfb1a0) 0
+QStyleOption (0x0x7f7debdff7e0) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f7debdfb3a8) 0
+QStyleOption (0x0x7f7debdfff00) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f7debdfb4e0) 0
+QStyleOption (0x0x7f7debea0480) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f7debdfb548) 0
+QStyleOption (0x0x7f7debea06c0) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f7debdfb5b0) 0
+QStyleOption (0x0x7f7debea0900) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f7debdfb618) 0
+QStyleOption (0x0x7f7debea0b40) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f7debdfb750) 0
+QStyleOption (0x0x7f7debf380c0) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f7debdfb7b8) 0
+QStyleOption (0x0x7f7debf38300) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f7debdfb820) 0
+QStyleOption (0x0x7f7debf385a0) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f7debdfb888) 0
+QStyleOptionComplex (0x0x7f7debdfb8f0) 0
+QStyleOption (0x0x7f7debf38840) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f7debdfb9c0) 0
+QStyleOptionComplex (0x0x7f7debdfba28) 0
+QStyleOption (0x0x7f7debf38c00) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f7debdfbaf8) 0
+QStyleOptionComplex (0x0x7f7debdfbb60) 0
+QStyleOption (0x0x7f7debf38e40) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f7debdfbc98) 0
+QStyleOptionComplex (0x0x7f7debdfbd00) 0
+QStyleOption (0x0x7f7debb88360) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f7debdfbd68) 0
+QStyleOptionComplex (0x0x7f7debdfbdd0) 0
+QStyleOption (0x0x7f7debb885a0) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f7debdfbe38) 0
+QStyleOptionComplex (0x0x7f7debdfbea0) 0
+QStyleOption (0x0x7f7debb887e0) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f7debdfbf08) 0
+QStyleOptionComplex (0x0x7f7debdfbf70) 0
+QStyleOption (0x0x7f7debb88a20) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f7debdfb958) 0
+QStyleOption (0x0x7f7debb88c60) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f7debbf1000) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f7debbf4000) 0
+QStyleHintReturn (0x0x7f7debbf1060) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f7debbf40d0) 0
+QStyleHintReturn (0x0x7f7debbf10c0) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f7debbf1240) 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 (0x0x7f7debbf41a0) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+QObject (0x0x7f7debbf11e0) 0
+ primary-for QAbstractItemDelegate (0x0x7f7debbf41a0)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f7debbf1480) 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 (0x0x7f7debbf4208) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+QFrame (0x0x7f7debbf4270) 0
+ primary-for QAbstractScrollArea (0x0x7f7debbf4208)
+QWidget (0x0x7f7debbed8c0) 0
+ primary-for QFrame (0x0x7f7debbf4270)
+QObject (0x0x7f7debbf13c0) 0
+ primary-for QWidget (0x0x7f7debbed8c0)
+QPaintDevice (0x0x7f7debbf1420) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f7debbf1780) 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 (0x0x7f7debbf42d8) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+QAbstractScrollArea (0x0x7f7debbf4340) 0
+ primary-for QAbstractItemView (0x0x7f7debbf42d8)
+QFrame (0x0x7f7debbf43a8) 0
+ primary-for QAbstractScrollArea (0x0x7f7debbf4340)
+QWidget (0x0x7f7debbedcb0) 0
+ primary-for QFrame (0x0x7f7debbf43a8)
+QObject (0x0x7f7debbf16c0) 0
+ primary-for QWidget (0x0x7f7debbedcb0)
+QPaintDevice (0x0x7f7debbf1720) 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 (0x0x7f7debc61a10) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+QAccessibleObject (0x0x7f7debbf44e0) 0
+ primary-for QAccessibleWidget (0x0x7f7debc61a10)
+QAccessibleInterface (0x0x7f7debca0120) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f7debbf44e0)
+QAccessibleActionInterface (0x0x7f7debca0180) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f7debca02a0) 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 (0x0x7f7debbf4548) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+QGuiApplication (0x0x7f7debbf45b0) 0
+ primary-for QApplication (0x0x7f7debbf4548)
+QCoreApplication (0x0x7f7debbf4618) 0
+ primary-for QGuiApplication (0x0x7f7debbf45b0)
+QObject (0x0x7f7debca0240) 0
+ primary-for QCoreApplication (0x0x7f7debbf4618)
+
+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 (0x0x7f7debca04e0) 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 (0x0x7f7debbf4680) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+QLayoutItem (0x0x7f7debca0720) 0
+ primary-for QSpacerItem (0x0x7f7debbf4680)
+
+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 (0x0x7f7debbf46e8) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+QLayoutItem (0x0x7f7debca0960) 0
+ primary-for QWidgetItem (0x0x7f7debbf46e8)
+
+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 (0x0x7f7debbf4750) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+QWidgetItem (0x0x7f7debbf47b8) 0
+ primary-for QWidgetItemV2 (0x0x7f7debbf4750)
+QLayoutItem (0x0x7f7debca0b40) 0
+ primary-for QWidgetItem (0x0x7f7debbf47b8)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f7debca0cc0) 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 (0x0x7f7debcee310) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+QObject (0x0x7f7debca0c00) 0
+ primary-for QLayout (0x0x7f7debcee310)
+QLayoutItem (0x0x7f7debca0c60) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f7debd28000) 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 (0x0x7f7debbf4820) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+QLayout (0x0x7f7debcee850) 0
+ primary-for QGridLayout (0x0x7f7debbf4820)
+QObject (0x0x7f7debca0f00) 0
+ primary-for QLayout (0x0x7f7debcee850)
+QLayoutItem (0x0x7f7debca0f60) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f7debd282a0) 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 (0x0x7f7debbf4888) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+QLayout (0x0x7f7debceea80) 0
+ primary-for QBoxLayout (0x0x7f7debbf4888)
+QObject (0x0x7f7debd281e0) 0
+ primary-for QLayout (0x0x7f7debceea80)
+QLayoutItem (0x0x7f7debd28240) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f7debd284e0) 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 (0x0x7f7debbf48f0) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+QBoxLayout (0x0x7f7debbf4958) 0
+ primary-for QHBoxLayout (0x0x7f7debbf48f0)
+QLayout (0x0x7f7debceeee0) 0
+ primary-for QBoxLayout (0x0x7f7debbf4958)
+QObject (0x0x7f7debd28420) 0
+ primary-for QLayout (0x0x7f7debceeee0)
+QLayoutItem (0x0x7f7debd28480) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f7debd28660) 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 (0x0x7f7debbf49c0) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+QBoxLayout (0x0x7f7debbf4a28) 0
+ primary-for QVBoxLayout (0x0x7f7debbf49c0)
+QLayout (0x0x7f7deb96f000) 0
+ primary-for QBoxLayout (0x0x7f7debbf4a28)
+QObject (0x0x7f7debd285a0) 0
+ primary-for QLayout (0x0x7f7deb96f000)
+QLayoutItem (0x0x7f7debd28600) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f7debd28780) 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 (0x0x7f7debbf4a90) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+QObject (0x0x7f7debd28720) 0
+ primary-for QButtonGroup (0x0x7f7debbf4a90)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f7debd289c0) 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 (0x0x7f7debbf4af8) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+QWidget (0x0x7f7deb96f230) 0
+ primary-for QCalendarWidget (0x0x7f7debbf4af8)
+QObject (0x0x7f7debd28900) 0
+ primary-for QWidget (0x0x7f7deb96f230)
+QPaintDevice (0x0x7f7debd28960) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f7debd28e40) 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 (0x0x7f7debbf4b60) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+QAbstractButton (0x0x7f7debbf4bc8) 0
+ primary-for QCheckBox (0x0x7f7debbf4b60)
+QWidget (0x0x7f7deb96fa10) 0
+ primary-for QAbstractButton (0x0x7f7debbf4bc8)
+QObject (0x0x7f7debd28d80) 0
+ primary-for QWidget (0x0x7f7deb96fa10)
+QPaintDevice (0x0x7f7debd28de0) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f7deb9c20c0) 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 (0x0x7f7debbf4c30) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+QWidget (0x0x7f7deb96fbd0) 0
+ primary-for QDialog (0x0x7f7debbf4c30)
+QObject (0x0x7f7deb9c2000) 0
+ primary-for QWidget (0x0x7f7deb96fbd0)
+QPaintDevice (0x0x7f7deb9c2060) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f7deb9c2300) 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 (0x0x7f7debbf4c98) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+QDialog (0x0x7f7debbf4d00) 0
+ primary-for QColorDialog (0x0x7f7debbf4c98)
+QWidget (0x0x7f7deb96fe70) 0
+ primary-for QDialog (0x0x7f7debbf4d00)
+QObject (0x0x7f7deb9c2240) 0
+ primary-for QWidget (0x0x7f7deb96fe70)
+QPaintDevice (0x0x7f7deb9c22a0) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f7deb9c2840) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f7deb9c2960) 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 (0x0x7f7debbf4e38) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+QAbstractItemView (0x0x7f7debbf4ea0) 0
+ primary-for QColumnView (0x0x7f7debbf4e38)
+QAbstractScrollArea (0x0x7f7debbf4f08) 0
+ primary-for QAbstractItemView (0x0x7f7debbf4ea0)
+QFrame (0x0x7f7debbf4f70) 0
+ primary-for QAbstractScrollArea (0x0x7f7debbf4f08)
+QWidget (0x0x7f7deb9de540) 0
+ primary-for QFrame (0x0x7f7debbf4f70)
+QObject (0x0x7f7deb9c28a0) 0
+ primary-for QWidget (0x0x7f7deb9de540)
+QPaintDevice (0x0x7f7deb9c2900) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f7deb9c2ba0) 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 (0x0x7f7deba49000) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+QWidget (0x0x7f7deb9de700) 0
+ primary-for QComboBox (0x0x7f7deba49000)
+QObject (0x0x7f7deb9c2ae0) 0
+ primary-for QWidget (0x0x7f7deb9de700)
+QPaintDevice (0x0x7f7deb9c2b40) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f7deba7f180) 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 (0x0x7f7deba49068) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+QAbstractButton (0x0x7f7deba490d0) 0
+ primary-for QPushButton (0x0x7f7deba49068)
+QWidget (0x0x7f7deba7d150) 0
+ primary-for QAbstractButton (0x0x7f7deba490d0)
+QObject (0x0x7f7deba7f0c0) 0
+ primary-for QWidget (0x0x7f7deba7d150)
+QPaintDevice (0x0x7f7deba7f120) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f7deba7f3c0) 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 (0x0x7f7deba49138) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+QPushButton (0x0x7f7deba491a0) 0
+ primary-for QCommandLinkButton (0x0x7f7deba49138)
+QAbstractButton (0x0x7f7deba49208) 0
+ primary-for QPushButton (0x0x7f7deba491a0)
+QWidget (0x0x7f7deba7d310) 0
+ primary-for QAbstractButton (0x0x7f7deba49208)
+QObject (0x0x7f7deba7f300) 0
+ primary-for QWidget (0x0x7f7deba7d310)
+QPaintDevice (0x0x7f7deba7f360) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f7deba7f5a0) 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 (0x0x7f7deba49270) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+QStyle (0x0x7f7deba492d8) 0
+ primary-for QCommonStyle (0x0x7f7deba49270)
+QObject (0x0x7f7deba7f540) 0
+ primary-for QStyle (0x0x7f7deba492d8)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f7deba7f780) 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 (0x0x7f7deba49340) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+QObject (0x0x7f7deba7f720) 0
+ primary-for QCompleter (0x0x7f7deba49340)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f7deba7fae0) 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 (0x0x7f7deba493a8) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+QObject (0x0x7f7deba7fa80) 0
+ primary-for QDataWidgetMapper (0x0x7f7deba493a8)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f7deba7fde0) 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 (0x0x7f7deba49410) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+QAbstractSpinBox (0x0x7f7deba49478) 0
+ primary-for QDateTimeEdit (0x0x7f7deba49410)
+QWidget (0x0x7f7deba7dee0) 0
+ primary-for QAbstractSpinBox (0x0x7f7deba49478)
+QObject (0x0x7f7deba7fd20) 0
+ primary-for QWidget (0x0x7f7deba7dee0)
+QPaintDevice (0x0x7f7deba7fd80) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f7debb1e3c0) 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 (0x0x7f7deba495b0) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+QDateTimeEdit (0x0x7f7deba49618) 0
+ primary-for QTimeEdit (0x0x7f7deba495b0)
+QAbstractSpinBox (0x0x7f7deba49680) 0
+ primary-for QDateTimeEdit (0x0x7f7deba49618)
+QWidget (0x0x7f7debaf5770) 0
+ primary-for QAbstractSpinBox (0x0x7f7deba49680)
+QObject (0x0x7f7debb1e300) 0
+ primary-for QWidget (0x0x7f7debaf5770)
+QPaintDevice (0x0x7f7debb1e360) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f7debb1e540) 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 (0x0x7f7deba496e8) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+QDateTimeEdit (0x0x7f7deba49750) 0
+ primary-for QDateEdit (0x0x7f7deba496e8)
+QAbstractSpinBox (0x0x7f7deba497b8) 0
+ primary-for QDateTimeEdit (0x0x7f7deba49750)
+QWidget (0x0x7f7debaf5850) 0
+ primary-for QAbstractSpinBox (0x0x7f7deba497b8)
+QObject (0x0x7f7debb1e480) 0
+ primary-for QWidget (0x0x7f7debaf5850)
+QPaintDevice (0x0x7f7debb1e4e0) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f7debb1e7e0) 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 (0x0x7f7deba49820) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+QAbstractSlider (0x0x7f7deba49888) 0
+ primary-for QDial (0x0x7f7deba49820)
+QWidget (0x0x7f7debaf5a80) 0
+ primary-for QAbstractSlider (0x0x7f7deba49888)
+QObject (0x0x7f7debb1e720) 0
+ primary-for QWidget (0x0x7f7debaf5a80)
+QPaintDevice (0x0x7f7debb1e780) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f7debb1ea20) 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 (0x0x7f7deba498f0) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+QWidget (0x0x7f7debaf5c40) 0
+ primary-for QDialogButtonBox (0x0x7f7deba498f0)
+QObject (0x0x7f7debb1e960) 0
+ primary-for QWidget (0x0x7f7debaf5c40)
+QPaintDevice (0x0x7f7debb1e9c0) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f7deb7cc060) 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 (0x0x7f7deba49a28) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+QWidget (0x0x7f7deb7bc0e0) 0
+ primary-for QDockWidget (0x0x7f7deba49a28)
+QObject (0x0x7f7debb1ef60) 0
+ primary-for QWidget (0x0x7f7deb7bc0e0)
+QPaintDevice (0x0x7f7deb7cc000) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f7deb7cc660) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f7deb7cccc0) 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 (0x0x7f7deba49c30) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+QDialog (0x0x7f7deba49c98) 0
+ primary-for QErrorMessage (0x0x7f7deba49c30)
+QWidget (0x0x7f7deb8282a0) 0
+ primary-for QDialog (0x0x7f7deba49c98)
+QObject (0x0x7f7deb7ccc00) 0
+ primary-for QWidget (0x0x7f7deb8282a0)
+QPaintDevice (0x0x7f7deb7ccc60) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f7deb7ccf00) 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 (0x0x7f7deba49d00) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+QDialog (0x0x7f7deba49d68) 0
+ primary-for QFileDialog (0x0x7f7deba49d00)
+QWidget (0x0x7f7deb828460) 0
+ primary-for QDialog (0x0x7f7deba49d68)
+QObject (0x0x7f7deb7cce40) 0
+ primary-for QWidget (0x0x7f7deb828460)
+QPaintDevice (0x0x7f7deb7ccea0) 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 (0x0x7f7deba49ea0) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+QAbstractFileIconProvider (0x0x7f7deb8847e0) 0
+ primary-for QFileIconProvider (0x0x7f7deba49ea0)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f7deb8849c0) 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 (0x0x7f7deba49f08) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+QWidget (0x0x7f7deb8a2620) 0
+ primary-for QFocusFrame (0x0x7f7deba49f08)
+QObject (0x0x7f7deb884900) 0
+ primary-for QWidget (0x0x7f7deb8a2620)
+QPaintDevice (0x0x7f7deb884960) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f7deb884c00) 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 (0x0x7f7deba49f70) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+QComboBox (0x0x7f7deb8e0000) 0
+ primary-for QFontComboBox (0x0x7f7deba49f70)
+QWidget (0x0x7f7deb8a27e0) 0
+ primary-for QComboBox (0x0x7f7deb8e0000)
+QObject (0x0x7f7deb884b40) 0
+ primary-for QWidget (0x0x7f7deb8a27e0)
+QPaintDevice (0x0x7f7deb884ba0) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f7deb907240) 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 (0x0x7f7deb8e0138) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+QDialog (0x0x7f7deb8e01a0) 0
+ primary-for QFontDialog (0x0x7f7deb8e0138)
+QWidget (0x0x7f7deb8a2e00) 0
+ primary-for QDialog (0x0x7f7deb8e01a0)
+QObject (0x0x7f7deb907180) 0
+ primary-for QWidget (0x0x7f7deb8a2e00)
+QPaintDevice (0x0x7f7deb9071e0) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f7deb907840) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f7deb9078a0) 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 (0x0x7f7deb8e02d8) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+QLayout (0x0x7f7deb92a4d0) 0
+ primary-for QFormLayout (0x0x7f7deb8e02d8)
+QObject (0x0x7f7deb907780) 0
+ primary-for QLayout (0x0x7f7deb92a4d0)
+QLayoutItem (0x0x7f7deb9077e0) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f7deb5cd600) 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 (0x0x7f7deb5d2208) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+QObject (0x0x7f7deb5cd5a0) 0
+ primary-for QGesture (0x0x7f7deb5d2208)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f7deb5cd7e0) 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 (0x0x7f7deb5d2270) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+QGesture (0x0x7f7deb5d22d8) 0
+ primary-for QPanGesture (0x0x7f7deb5d2270)
+QObject (0x0x7f7deb5cd780) 0
+ primary-for QGesture (0x0x7f7deb5d22d8)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f7deb5cd9c0) 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 (0x0x7f7deb5d2340) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+QGesture (0x0x7f7deb5d23a8) 0
+ primary-for QPinchGesture (0x0x7f7deb5d2340)
+QObject (0x0x7f7deb5cd960) 0
+ primary-for QGesture (0x0x7f7deb5d23a8)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f7deb63f180) 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 (0x0x7f7deb5d24e0) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+QGesture (0x0x7f7deb5d2548) 0
+ primary-for QSwipeGesture (0x0x7f7deb5d24e0)
+QObject (0x0x7f7deb63f120) 0
+ primary-for QGesture (0x0x7f7deb5d2548)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f7deb63f420) 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 (0x0x7f7deb5d25b0) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+QGesture (0x0x7f7deb5d2618) 0
+ primary-for QTapGesture (0x0x7f7deb5d25b0)
+QObject (0x0x7f7deb63f3c0) 0
+ primary-for QGesture (0x0x7f7deb5d2618)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f7deb63f600) 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 (0x0x7f7deb5d2680) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+QGesture (0x0x7f7deb5d26e8) 0
+ primary-for QTapAndHoldGesture (0x0x7f7deb5d2680)
+QObject (0x0x7f7deb63f5a0) 0
+ primary-for QGesture (0x0x7f7deb5d26e8)
+
+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 (0x0x7f7deb5d2750) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+QEvent (0x0x7f7deb63f780) 0
+ primary-for QGestureEvent (0x0x7f7deb5d2750)
+
+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 (0x0x7f7deb6c92a0) 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 (0x0x7f7deb6c9600) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f7deb3fd7e0) 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 (0x0x7f7deb4045b0) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+QObject (0x0x7f7deb3fd720) 0
+ primary-for QGraphicsObject (0x0x7f7deb4045b0)
+QGraphicsItem (0x0x7f7deb3fd780) 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 (0x0x7f7deb5d2f70) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+QGraphicsItem (0x0x7f7deb3fd8a0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f7deb5d2f70)
+
+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 (0x0x7f7deb5d2d68) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f7deb42f000) 0
+ primary-for QGraphicsPathItem (0x0x7f7deb5d2d68)
+QGraphicsItem (0x0x7f7deb3fd9c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f7deb42f000)
+
+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 (0x0x7f7deb42f068) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f7deb42f0d0) 0
+ primary-for QGraphicsRectItem (0x0x7f7deb42f068)
+QGraphicsItem (0x0x7f7deb3fdae0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f7deb42f0d0)
+
+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 (0x0x7f7deb42f138) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f7deb42f1a0) 0
+ primary-for QGraphicsEllipseItem (0x0x7f7deb42f138)
+QGraphicsItem (0x0x7f7deb3fdc60) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f7deb42f1a0)
+
+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 (0x0x7f7deb42f208) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f7deb42f270) 0
+ primary-for QGraphicsPolygonItem (0x0x7f7deb42f208)
+QGraphicsItem (0x0x7f7deb3fdde0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f7deb42f270)
+
+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 (0x0x7f7deb42f2d8) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+QGraphicsItem (0x0x7f7deb3fdf00) 0
+ primary-for QGraphicsLineItem (0x0x7f7deb42f2d8)
+
+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 (0x0x7f7deb42f340) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+QGraphicsItem (0x0x7f7deb4840c0) 0
+ primary-for QGraphicsPixmapItem (0x0x7f7deb42f340)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f7deb484300) 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 (0x0x7f7deb42f3a8) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+QGraphicsObject (0x0x7f7deb4862a0) 0
+ primary-for QGraphicsTextItem (0x0x7f7deb42f3a8)
+QObject (0x0x7f7deb484240) 0
+ primary-for QGraphicsObject (0x0x7f7deb4862a0)
+QGraphicsItem (0x0x7f7deb4842a0) 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 (0x0x7f7deb42f4e0) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f7deb42f548) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f7deb42f4e0)
+QGraphicsItem (0x0x7f7deb4845a0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f7deb42f548)
+
+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 (0x0x7f7deb42f5b0) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+QGraphicsItem (0x0x7f7deb4846c0) 0
+ primary-for QGraphicsItemGroup (0x0x7f7deb42f5b0)
+
+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 (0x0x7f7deb4849c0) 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 (0x0x7f7deb42f618) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+QGraphicsLayoutItem (0x0x7f7deb5070c0) 0
+ primary-for QGraphicsLayout (0x0x7f7deb42f618)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f7deb5073c0) 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 (0x0x7f7deb42f680) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+QObject (0x0x7f7deb507360) 0
+ primary-for QGraphicsAnchor (0x0x7f7deb42f680)
+
+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 (0x0x7f7deb42f6e8) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+QGraphicsLayout (0x0x7f7deb42f750) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f7deb42f6e8)
+QGraphicsLayoutItem (0x0x7f7deb507540) 0
+ primary-for QGraphicsLayout (0x0x7f7deb42f750)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f7deb5076c0) 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 (0x0x7f7deb42f7b8) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+QObject (0x0x7f7deb507660) 0
+ primary-for QGraphicsEffect (0x0x7f7deb42f7b8)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f7deb507c60) 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 (0x0x7f7deb42f8f0) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+QGraphicsEffect (0x0x7f7deb42f958) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f7deb42f8f0)
+QObject (0x0x7f7deb507c00) 0
+ primary-for QGraphicsEffect (0x0x7f7deb42f958)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f7deb507e40) 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 (0x0x7f7deb42f9c0) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+QGraphicsEffect (0x0x7f7deb42fa28) 0
+ primary-for QGraphicsBlurEffect (0x0x7f7deb42f9c0)
+QObject (0x0x7f7deb507de0) 0
+ primary-for QGraphicsEffect (0x0x7f7deb42fa28)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f7deb1934e0) 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 (0x0x7f7deb42fb60) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+QGraphicsEffect (0x0x7f7deb42fbc8) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f7deb42fb60)
+QObject (0x0x7f7deb193480) 0
+ primary-for QGraphicsEffect (0x0x7f7deb42fbc8)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f7deb193900) 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 (0x0x7f7deb42fc30) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+QGraphicsEffect (0x0x7f7deb42fc98) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f7deb42fc30)
+QObject (0x0x7f7deb1938a0) 0
+ primary-for QGraphicsEffect (0x0x7f7deb42fc98)
+
+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 (0x0x7f7deb42fd00) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+QGraphicsLayout (0x0x7f7deb42fd68) 0
+ primary-for QGraphicsGridLayout (0x0x7f7deb42fd00)
+QGraphicsLayoutItem (0x0x7f7deb193a80) 0
+ primary-for QGraphicsLayout (0x0x7f7deb42fd68)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f7deb193c60) 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 (0x0x7f7deb42fea0) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+QObject (0x0x7f7deb193c00) 0
+ primary-for QGraphicsItemAnimation (0x0x7f7deb42fea0)
+
+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 (0x0x7f7deb42ff08) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+QGraphicsLayout (0x0x7f7deb42ff70) 0
+ primary-for QGraphicsLinearLayout (0x0x7f7deb42ff08)
+QGraphicsLayoutItem (0x0x7f7deb193d20) 0
+ primary-for QGraphicsLayout (0x0x7f7deb42ff70)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f7deb229060) 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 (0x0x7f7deb187e70) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+QGraphicsObject (0x0x7f7deb187ee0) 0
+ primary-for QGraphicsWidget (0x0x7f7deb187e70)
+QObject (0x0x7f7deb193f00) 0
+ primary-for QGraphicsObject (0x0x7f7deb187ee0)
+QGraphicsItem (0x0x7f7deb193f60) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+QGraphicsLayoutItem (0x0x7f7deb229000) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f7deb2294e0) 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 (0x0x7f7deb2550d0) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+QGraphicsWidget (0x0x7f7deb253310) 0
+ primary-for QGraphicsProxyWidget (0x0x7f7deb2550d0)
+QGraphicsObject (0x0x7f7deb253380) 0
+ primary-for QGraphicsWidget (0x0x7f7deb253310)
+QObject (0x0x7f7deb2293c0) 0
+ primary-for QGraphicsObject (0x0x7f7deb253380)
+QGraphicsItem (0x0x7f7deb229420) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+QGraphicsLayoutItem (0x0x7f7deb229480) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f7deb229840) 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 (0x0x7f7deb2552d8) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+QObject (0x0x7f7deb2297e0) 0
+ primary-for QGraphicsScene (0x0x7f7deb2552d8)
+
+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 (0x0x7f7deb255af8) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+QEvent (0x0x7f7deb2dda80) 0
+ primary-for QGraphicsSceneEvent (0x0x7f7deb255af8)
+
+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 (0x0x7f7deb255b60) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+QGraphicsSceneEvent (0x0x7f7deb255bc8) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f7deb255b60)
+QEvent (0x0x7f7deb2ddc60) 0
+ primary-for QGraphicsSceneEvent (0x0x7f7deb255bc8)
+
+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 (0x0x7f7deb255c30) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+QGraphicsSceneEvent (0x0x7f7deb255c98) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f7deb255c30)
+QEvent (0x0x7f7deb2ddd80) 0
+ primary-for QGraphicsSceneEvent (0x0x7f7deb255c98)
+
+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 (0x0x7f7deb255d00) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+QGraphicsSceneEvent (0x0x7f7deb255d68) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f7deb255d00)
+QEvent (0x0x7f7deb2ddea0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f7deb255d68)
+
+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 (0x0x7f7deb255dd0) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+QGraphicsSceneEvent (0x0x7f7deb255e38) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f7deb255dd0)
+QEvent (0x0x7f7deb2dd3c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f7deb255e38)
+
+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 (0x0x7f7deb255ea0) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+QGraphicsSceneEvent (0x0x7f7deb255f08) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f7deb255ea0)
+QEvent (0x0x7f7deaf9d0c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f7deb255f08)
+
+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 (0x0x7f7deb255f70) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+QGraphicsSceneEvent (0x0x7f7deb255a90) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f7deb255f70)
+QEvent (0x0x7f7deaf9d1e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f7deb255a90)
+
+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 (0x0x7f7deafaf000) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+QGraphicsSceneEvent (0x0x7f7deafaf068) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f7deafaf000)
+QEvent (0x0x7f7deaf9d300) 0
+ primary-for QGraphicsSceneEvent (0x0x7f7deafaf068)
+
+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 (0x0x7f7deafaf0d0) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+QGraphicsSceneEvent (0x0x7f7deafaf138) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f7deafaf0d0)
+QEvent (0x0x7f7deaf9d420) 0
+ primary-for QGraphicsSceneEvent (0x0x7f7deafaf138)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f7deaf9d5a0) 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 (0x0x7f7deafaf1a0) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+QObject (0x0x7f7deaf9d540) 0
+ primary-for QGraphicsTransform (0x0x7f7deafaf1a0)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f7deaf9d780) 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 (0x0x7f7deafaf208) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+QGraphicsTransform (0x0x7f7deafaf270) 0
+ primary-for QGraphicsScale (0x0x7f7deafaf208)
+QObject (0x0x7f7deaf9d720) 0
+ primary-for QGraphicsTransform (0x0x7f7deafaf270)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f7deaf9d960) 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 (0x0x7f7deafaf2d8) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+QGraphicsTransform (0x0x7f7deafaf340) 0
+ primary-for QGraphicsRotation (0x0x7f7deafaf2d8)
+QObject (0x0x7f7deaf9d900) 0
+ primary-for QGraphicsTransform (0x0x7f7deafaf340)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f7deaf9dba0) 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 (0x0x7f7deafaf3a8) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+QAbstractScrollArea (0x0x7f7deafaf410) 0
+ primary-for QScrollArea (0x0x7f7deafaf3a8)
+QFrame (0x0x7f7deafaf478) 0
+ primary-for QAbstractScrollArea (0x0x7f7deafaf410)
+QWidget (0x0x7f7deafd62a0) 0
+ primary-for QFrame (0x0x7f7deafaf478)
+QObject (0x0x7f7deaf9dae0) 0
+ primary-for QWidget (0x0x7f7deafd62a0)
+QPaintDevice (0x0x7f7deaf9db40) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f7deaf9dde0) 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 (0x0x7f7deafaf4e0) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+QAbstractScrollArea (0x0x7f7deafaf548) 0
+ primary-for QGraphicsView (0x0x7f7deafaf4e0)
+QFrame (0x0x7f7deafaf5b0) 0
+ primary-for QAbstractScrollArea (0x0x7f7deafaf548)
+QWidget (0x0x7f7deafd6460) 0
+ primary-for QFrame (0x0x7f7deafaf5b0)
+QObject (0x0x7f7deaf9dd20) 0
+ primary-for QWidget (0x0x7f7deafd6460)
+QPaintDevice (0x0x7f7deaf9dd80) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f7deb037cc0) 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 (0x0x7f7deafaf7b8) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+QWidget (0x0x7f7deb050770) 0
+ primary-for QGroupBox (0x0x7f7deafaf7b8)
+QObject (0x0x7f7deb037c00) 0
+ primary-for QWidget (0x0x7f7deb050770)
+QPaintDevice (0x0x7f7deb037c60) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f7deb037f00) 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 (0x0x7f7deafaf820) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+QAbstractItemView (0x0x7f7deafaf888) 0
+ primary-for QHeaderView (0x0x7f7deafaf820)
+QAbstractScrollArea (0x0x7f7deafaf8f0) 0
+ primary-for QAbstractItemView (0x0x7f7deafaf888)
+QFrame (0x0x7f7deafaf958) 0
+ primary-for QAbstractScrollArea (0x0x7f7deafaf8f0)
+QWidget (0x0x7f7deb050930) 0
+ primary-for QFrame (0x0x7f7deafaf958)
+QObject (0x0x7f7deb037e40) 0
+ primary-for QWidget (0x0x7f7deb050930)
+QPaintDevice (0x0x7f7deb037ea0) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f7deb0fa3c0) 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 (0x0x7f7deafaf9c0) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+QWidget (0x0x7f7deb101000) 0
+ primary-for QLineEdit (0x0x7f7deafaf9c0)
+QObject (0x0x7f7deb0fa300) 0
+ primary-for QWidget (0x0x7f7deb101000)
+QPaintDevice (0x0x7f7deb0fa360) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f7deb0fa780) 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 (0x0x7f7deafafa28) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+QDialog (0x0x7f7deafafa90) 0
+ primary-for QInputDialog (0x0x7f7deafafa28)
+QWidget (0x0x7f7deb101620) 0
+ primary-for QDialog (0x0x7f7deafafa90)
+QObject (0x0x7f7deb0fa6c0) 0
+ primary-for QWidget (0x0x7f7deb101620)
+QPaintDevice (0x0x7f7deb0fa720) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f7deb0fac60) 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 (0x0x7f7deafafbc8) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+QAbstractItemDelegate (0x0x7f7deafafc30) 0
+ primary-for QItemDelegate (0x0x7f7deafafbc8)
+QObject (0x0x7f7deb0fac00) 0
+ primary-for QAbstractItemDelegate (0x0x7f7deafafc30)
+
+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 (0x0x7f7deb0fade0) 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 (0x0x7f7dead9f180) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f7dead9f660) 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 (0x0x7f7deafafd68) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+QWidget (0x0x7f7deadcc2a0) 0
+ primary-for QKeySequenceEdit (0x0x7f7deafafd68)
+QObject (0x0x7f7dead9f5a0) 0
+ primary-for QWidget (0x0x7f7deadcc2a0)
+QPaintDevice (0x0x7f7dead9f600) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f7dead9f8a0) 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 (0x0x7f7deafafdd0) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+QFrame (0x0x7f7deafafe38) 0
+ primary-for QLabel (0x0x7f7deafafdd0)
+QWidget (0x0x7f7deadcc460) 0
+ primary-for QFrame (0x0x7f7deafafe38)
+QObject (0x0x7f7dead9f7e0) 0
+ primary-for QWidget (0x0x7f7deadcc460)
+QPaintDevice (0x0x7f7dead9f840) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f7dead9fba0) 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 (0x0x7f7deafafea0) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+QFrame (0x0x7f7deafaff08) 0
+ primary-for QLCDNumber (0x0x7f7deafafea0)
+QWidget (0x0x7f7deadcc700) 0
+ primary-for QFrame (0x0x7f7deafaff08)
+QObject (0x0x7f7dead9fae0) 0
+ primary-for QWidget (0x0x7f7deadcc700)
+QPaintDevice (0x0x7f7dead9fb40) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f7dead9ff60) 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 (0x0x7f7deafaff70) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+QAbstractItemView (0x0x7f7deae19000) 0
+ primary-for QListView (0x0x7f7deafaff70)
+QAbstractScrollArea (0x0x7f7deae19068) 0
+ primary-for QAbstractItemView (0x0x7f7deae19000)
+QFrame (0x0x7f7deae190d0) 0
+ primary-for QAbstractScrollArea (0x0x7f7deae19068)
+QWidget (0x0x7f7deadccd90) 0
+ primary-for QFrame (0x0x7f7deae190d0)
+QObject (0x0x7f7dead9fea0) 0
+ primary-for QWidget (0x0x7f7deadccd90)
+QPaintDevice (0x0x7f7dead9ff00) 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 (0x0x7f7deae4a4e0) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f7deae4af60) 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 (0x0x7f7deae19138) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+QListView (0x0x7f7deae191a0) 0
+ primary-for QListWidget (0x0x7f7deae19138)
+QAbstractItemView (0x0x7f7deae19208) 0
+ primary-for QListView (0x0x7f7deae191a0)
+QAbstractScrollArea (0x0x7f7deae19270) 0
+ primary-for QAbstractItemView (0x0x7f7deae19208)
+QFrame (0x0x7f7deae192d8) 0
+ primary-for QAbstractScrollArea (0x0x7f7deae19270)
+QWidget (0x0x7f7deae764d0) 0
+ primary-for QFrame (0x0x7f7deae192d8)
+QObject (0x0x7f7deae4aea0) 0
+ primary-for QWidget (0x0x7f7deae764d0)
+QPaintDevice (0x0x7f7deae4af00) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f7deaea5480) 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 (0x0x7f7deae19340) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+QWidget (0x0x7f7deae769a0) 0
+ primary-for QMainWindow (0x0x7f7deae19340)
+QObject (0x0x7f7deaea53c0) 0
+ primary-for QWidget (0x0x7f7deae769a0)
+QPaintDevice (0x0x7f7deaea5420) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f7deaea5b40) 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 (0x0x7f7deae19478) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+QAbstractScrollArea (0x0x7f7deae194e0) 0
+ primary-for QMdiArea (0x0x7f7deae19478)
+QFrame (0x0x7f7deae19548) 0
+ primary-for QAbstractScrollArea (0x0x7f7deae194e0)
+QWidget (0x0x7f7deaee6150) 0
+ primary-for QFrame (0x0x7f7deae19548)
+QObject (0x0x7f7deaea5a80) 0
+ primary-for QWidget (0x0x7f7deaee6150)
+QPaintDevice (0x0x7f7deaea5ae0) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f7deaf37240) 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 (0x0x7f7deae19680) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+QWidget (0x0x7f7deaee68c0) 0
+ primary-for QMdiSubWindow (0x0x7f7deae19680)
+QObject (0x0x7f7deaf37180) 0
+ primary-for QWidget (0x0x7f7deaee68c0)
+QPaintDevice (0x0x7f7deaf371e0) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f7deaf37780) 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 (0x0x7f7deae197b8) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+QWidget (0x0x7f7deaee6d90) 0
+ primary-for QMenu (0x0x7f7deae197b8)
+QObject (0x0x7f7deaf376c0) 0
+ primary-for QWidget (0x0x7f7deaee6d90)
+QPaintDevice (0x0x7f7deaf37720) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f7deaf37b40) 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 (0x0x7f7deae19820) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+QWidget (0x0x7f7deabe0150) 0
+ primary-for QMenuBar (0x0x7f7deae19820)
+QObject (0x0x7f7deaf37a80) 0
+ primary-for QWidget (0x0x7f7deabe0150)
+QPaintDevice (0x0x7f7deaf37ae0) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f7deaf37e40) 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 (0x0x7f7deae19888) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+QDialog (0x0x7f7deae198f0) 0
+ primary-for QMessageBox (0x0x7f7deae19888)
+QWidget (0x0x7f7deabe03f0) 0
+ primary-for QDialog (0x0x7f7deae198f0)
+QObject (0x0x7f7deaf37d80) 0
+ primary-for QWidget (0x0x7f7deabe03f0)
+QPaintDevice (0x0x7f7deaf37de0) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f7deac336c0) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f7deac33720) 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 (0x0x7f7deae19a28) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+QAbstractScrollArea (0x0x7f7deae19a90) 0
+ primary-for QTextEdit (0x0x7f7deae19a28)
+QFrame (0x0x7f7deae19af8) 0
+ primary-for QAbstractScrollArea (0x0x7f7deae19a90)
+QWidget (0x0x7f7deac06d90) 0
+ primary-for QFrame (0x0x7f7deae19af8)
+QObject (0x0x7f7deac33600) 0
+ primary-for QWidget (0x0x7f7deac06d90)
+QPaintDevice (0x0x7f7deac33660) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f7deac33f60) 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 (0x0x7f7deae19c30) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+QAbstractScrollArea (0x0x7f7deae19c98) 0
+ primary-for QPlainTextEdit (0x0x7f7deae19c30)
+QFrame (0x0x7f7deae19d00) 0
+ primary-for QAbstractScrollArea (0x0x7f7deae19c98)
+QWidget (0x0x7f7deac7b770) 0
+ primary-for QFrame (0x0x7f7deae19d00)
+QObject (0x0x7f7deac33ea0) 0
+ primary-for QWidget (0x0x7f7deac7b770)
+QPaintDevice (0x0x7f7deac33f00) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f7dead1a4e0) 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 (0x0x7f7deae19d68) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+QAbstractTextDocumentLayout (0x0x7f7deae19dd0) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f7deae19d68)
+QObject (0x0x7f7dead1a480) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f7deae19dd0)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f7dead1a720) 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 (0x0x7f7deae19e38) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+QWidget (0x0x7f7deac7bf50) 0
+ primary-for QProgressBar (0x0x7f7deae19e38)
+QObject (0x0x7f7dead1a660) 0
+ primary-for QWidget (0x0x7f7deac7bf50)
+QPaintDevice (0x0x7f7dead1a6c0) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f7dead1aa20) 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 (0x0x7f7deae19ea0) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+QDialog (0x0x7f7deae19f08) 0
+ primary-for QProgressDialog (0x0x7f7deae19ea0)
+QWidget (0x0x7f7dead30310) 0
+ primary-for QDialog (0x0x7f7deae19f08)
+QObject (0x0x7f7dead1a960) 0
+ primary-for QWidget (0x0x7f7dead30310)
+QPaintDevice (0x0x7f7dead1a9c0) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f7dead1ac00) 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 (0x0x7f7deae19f70) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+QCommonStyle (0x0x7f7dead5f000) 0
+ primary-for QProxyStyle (0x0x7f7deae19f70)
+QStyle (0x0x7f7dead5f068) 0
+ primary-for QCommonStyle (0x0x7f7dead5f000)
+QObject (0x0x7f7dead1aba0) 0
+ primary-for QStyle (0x0x7f7dead5f068)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f7dead1ae40) 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 (0x0x7f7dead5f0d0) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+QAbstractButton (0x0x7f7dead5f138) 0
+ primary-for QRadioButton (0x0x7f7dead5f0d0)
+QWidget (0x0x7f7dead30620) 0
+ primary-for QAbstractButton (0x0x7f7dead5f138)
+QObject (0x0x7f7dead1ad80) 0
+ primary-for QWidget (0x0x7f7dead30620)
+QPaintDevice (0x0x7f7dead1ade0) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f7dea9900c0) 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 (0x0x7f7dead5f1a0) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+QAbstractSlider (0x0x7f7dead5f208) 0
+ primary-for QScrollBar (0x0x7f7dead5f1a0)
+QWidget (0x0x7f7dead307e0) 0
+ primary-for QAbstractSlider (0x0x7f7dead5f208)
+QObject (0x0x7f7dea990000) 0
+ primary-for QWidget (0x0x7f7dead307e0)
+QPaintDevice (0x0x7f7dea990060) 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 (0x0x7f7dea990240) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f7dea9905a0) 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 (0x0x7f7dead5f270) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+QObject (0x0x7f7dea990540) 0
+ primary-for QScroller (0x0x7f7dead5f270)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f7dea9908a0) 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 (0x0x7f7dead5f2d8) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+QWidget (0x0x7f7dea9a5700) 0
+ primary-for QSizeGrip (0x0x7f7dead5f2d8)
+QObject (0x0x7f7dea9907e0) 0
+ primary-for QWidget (0x0x7f7dea9a5700)
+QPaintDevice (0x0x7f7dea990840) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f7dea990ae0) 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 (0x0x7f7dead5f340) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+QAbstractSpinBox (0x0x7f7dead5f3a8) 0
+ primary-for QSpinBox (0x0x7f7dead5f340)
+QWidget (0x0x7f7dea9e60e0) 0
+ primary-for QAbstractSpinBox (0x0x7f7dead5f3a8)
+QObject (0x0x7f7dea990a20) 0
+ primary-for QWidget (0x0x7f7dea9e60e0)
+QPaintDevice (0x0x7f7dea990a80) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f7dea990d20) 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 (0x0x7f7dead5f410) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+QAbstractSpinBox (0x0x7f7dead5f478) 0
+ primary-for QDoubleSpinBox (0x0x7f7dead5f410)
+QWidget (0x0x7f7dea9e62a0) 0
+ primary-for QAbstractSpinBox (0x0x7f7dead5f478)
+QObject (0x0x7f7dea990c60) 0
+ primary-for QWidget (0x0x7f7dea9e62a0)
+QPaintDevice (0x0x7f7dea990cc0) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f7dea990f60) 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 (0x0x7f7dead5f4e0) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+QWidget (0x0x7f7dea9e6460) 0
+ primary-for QSplashScreen (0x0x7f7dead5f4e0)
+QObject (0x0x7f7dea990ea0) 0
+ primary-for QWidget (0x0x7f7dea9e6460)
+QPaintDevice (0x0x7f7dea990f00) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f7deaa221e0) 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 (0x0x7f7dead5f548) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+QFrame (0x0x7f7dead5f5b0) 0
+ primary-for QSplitter (0x0x7f7dead5f548)
+QWidget (0x0x7f7dea9e6620) 0
+ primary-for QFrame (0x0x7f7dead5f5b0)
+QObject (0x0x7f7deaa22120) 0
+ primary-for QWidget (0x0x7f7dea9e6620)
+QPaintDevice (0x0x7f7deaa22180) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f7deaa22420) 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 (0x0x7f7dead5f618) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+QWidget (0x0x7f7dea9e67e0) 0
+ primary-for QSplitterHandle (0x0x7f7dead5f618)
+QObject (0x0x7f7deaa22360) 0
+ primary-for QWidget (0x0x7f7dea9e67e0)
+QPaintDevice (0x0x7f7deaa223c0) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f7deaa22660) 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 (0x0x7f7dead5f680) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+QLayout (0x0x7f7dea9e69a0) 0
+ primary-for QStackedLayout (0x0x7f7dead5f680)
+QObject (0x0x7f7deaa225a0) 0
+ primary-for QLayout (0x0x7f7dea9e69a0)
+QLayoutItem (0x0x7f7deaa22600) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f7deaa22960) 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 (0x0x7f7dead5f6e8) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+QFrame (0x0x7f7dead5f750) 0
+ primary-for QStackedWidget (0x0x7f7dead5f6e8)
+QWidget (0x0x7f7dea9e6d20) 0
+ primary-for QFrame (0x0x7f7dead5f750)
+QObject (0x0x7f7deaa228a0) 0
+ primary-for QWidget (0x0x7f7dea9e6d20)
+QPaintDevice (0x0x7f7deaa22900) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f7deaa22ba0) 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 (0x0x7f7dead5f7b8) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+QWidget (0x0x7f7dea9e6ee0) 0
+ primary-for QStatusBar (0x0x7f7dead5f7b8)
+QObject (0x0x7f7deaa22ae0) 0
+ primary-for QWidget (0x0x7f7dea9e6ee0)
+QPaintDevice (0x0x7f7deaa22b40) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f7deaa22d80) 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 (0x0x7f7dead5f820) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+QAbstractItemDelegate (0x0x7f7dead5f888) 0
+ primary-for QStyledItemDelegate (0x0x7f7dead5f820)
+QObject (0x0x7f7deaa22d20) 0
+ primary-for QAbstractItemDelegate (0x0x7f7dead5f888)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f7deaa22f00) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f7dead5f8f0) 0
+QPainter (0x0x7f7deaa22f60) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f7deaaa47e0) 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 (0x0x7f7dead5f958) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+QObject (0x0x7f7deaaa4780) 0
+ primary-for QStylePlugin (0x0x7f7dead5f958)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f7deaaa4900) 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 (0x0x7f7dead5f9c0) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+QObject (0x0x7f7deaaa48a0) 0
+ primary-for QSystemTrayIcon (0x0x7f7dead5f9c0)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f7deaaa4c00) 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 (0x0x7f7dead5fa28) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+QAbstractItemView (0x0x7f7dead5fa90) 0
+ primary-for QTableView (0x0x7f7dead5fa28)
+QAbstractScrollArea (0x0x7f7dead5faf8) 0
+ primary-for QAbstractItemView (0x0x7f7dead5fa90)
+QFrame (0x0x7f7dead5fb60) 0
+ primary-for QAbstractScrollArea (0x0x7f7dead5faf8)
+QWidget (0x0x7f7deaace150) 0
+ primary-for QFrame (0x0x7f7dead5fb60)
+QObject (0x0x7f7deaaa4b40) 0
+ primary-for QWidget (0x0x7f7deaace150)
+QPaintDevice (0x0x7f7deaaa4ba0) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f7deaaa4d80) 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 (0x0x7f7deaafe1e0) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f7dea78f3c0) 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 (0x0x7f7deab1a2d8) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+QTableView (0x0x7f7deab1a340) 0
+ primary-for QTableWidget (0x0x7f7deab1a2d8)
+QAbstractItemView (0x0x7f7deab1a3a8) 0
+ primary-for QTableView (0x0x7f7deab1a340)
+QAbstractScrollArea (0x0x7f7deab1a410) 0
+ primary-for QAbstractItemView (0x0x7f7deab1a3a8)
+QFrame (0x0x7f7deab1a478) 0
+ primary-for QAbstractScrollArea (0x0x7f7deab1a410)
+QWidget (0x0x7f7dea78b3f0) 0
+ primary-for QFrame (0x0x7f7deab1a478)
+QObject (0x0x7f7dea78f300) 0
+ primary-for QWidget (0x0x7f7dea78b3f0)
+QPaintDevice (0x0x7f7dea78f360) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f7dea78f780) 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 (0x0x7f7deab1a4e0) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+QTextEdit (0x0x7f7deab1a548) 0
+ primary-for QTextBrowser (0x0x7f7deab1a4e0)
+QAbstractScrollArea (0x0x7f7deab1a5b0) 0
+ primary-for QTextEdit (0x0x7f7deab1a548)
+QFrame (0x0x7f7deab1a618) 0
+ primary-for QAbstractScrollArea (0x0x7f7deab1a5b0)
+QWidget (0x0x7f7dea78b770) 0
+ primary-for QFrame (0x0x7f7deab1a618)
+QObject (0x0x7f7dea78f6c0) 0
+ primary-for QWidget (0x0x7f7dea78b770)
+QPaintDevice (0x0x7f7dea78f720) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f7dea78f9c0) 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 (0x0x7f7deab1a680) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+QWidget (0x0x7f7dea78b930) 0
+ primary-for QToolBar (0x0x7f7deab1a680)
+QObject (0x0x7f7dea78f900) 0
+ primary-for QWidget (0x0x7f7dea78b930)
+QPaintDevice (0x0x7f7dea78f960) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f7dea78fe40) 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 (0x0x7f7deab1a6e8) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+QFrame (0x0x7f7deab1a750) 0
+ primary-for QToolBox (0x0x7f7deab1a6e8)
+QWidget (0x0x7f7dea78bd90) 0
+ primary-for QFrame (0x0x7f7deab1a750)
+QObject (0x0x7f7dea78fd80) 0
+ primary-for QWidget (0x0x7f7dea78bd90)
+QPaintDevice (0x0x7f7dea78fde0) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f7dea8191e0) 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 (0x0x7f7deab1a7b8) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+QAbstractButton (0x0x7f7deab1a820) 0
+ primary-for QToolButton (0x0x7f7deab1a7b8)
+QWidget (0x0x7f7dea81a0e0) 0
+ primary-for QAbstractButton (0x0x7f7deab1a820)
+QObject (0x0x7f7dea819120) 0
+ primary-for QWidget (0x0x7f7dea81a0e0)
+QPaintDevice (0x0x7f7dea819180) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f7dea819420) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f7dea8195a0) 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 (0x0x7f7deab1a888) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+QAbstractItemView (0x0x7f7deab1a8f0) 0
+ primary-for QTreeView (0x0x7f7deab1a888)
+QAbstractScrollArea (0x0x7f7deab1a958) 0
+ primary-for QAbstractItemView (0x0x7f7deab1a8f0)
+QFrame (0x0x7f7deab1a9c0) 0
+ primary-for QAbstractScrollArea (0x0x7f7deab1a958)
+QWidget (0x0x7f7dea81a540) 0
+ primary-for QFrame (0x0x7f7deab1a9c0)
+QObject (0x0x7f7dea8194e0) 0
+ primary-for QWidget (0x0x7f7dea81a540)
+QPaintDevice (0x0x7f7dea819540) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f7dea819720) 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 (0x0x7f7dea819de0) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f7dea5aa9c0) 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 (0x0x7f7dea8eb958) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+QTreeView (0x0x7f7dea8eb9c0) 0
+ primary-for QTreeWidget (0x0x7f7dea8eb958)
+QAbstractItemView (0x0x7f7dea8eba28) 0
+ primary-for QTreeView (0x0x7f7dea8eb9c0)
+QAbstractScrollArea (0x0x7f7dea8eba90) 0
+ primary-for QAbstractItemView (0x0x7f7dea8eba28)
+QFrame (0x0x7f7dea8ebaf8) 0
+ primary-for QAbstractScrollArea (0x0x7f7dea8eba90)
+QWidget (0x0x7f7dea5bc5b0) 0
+ primary-for QFrame (0x0x7f7dea8ebaf8)
+QObject (0x0x7f7dea5aa900) 0
+ primary-for QWidget (0x0x7f7dea5bc5b0)
+QPaintDevice (0x0x7f7dea5aa960) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f7dea5aade0) 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 (0x0x7f7dea8ebb60) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+QListView (0x0x7f7dea8ebbc8) 0
+ primary-for QUndoView (0x0x7f7dea8ebb60)
+QAbstractItemView (0x0x7f7dea8ebc30) 0
+ primary-for QListView (0x0x7f7dea8ebbc8)
+QAbstractScrollArea (0x0x7f7dea8ebc98) 0
+ primary-for QAbstractItemView (0x0x7f7dea8ebc30)
+QFrame (0x0x7f7dea8ebd00) 0
+ primary-for QAbstractScrollArea (0x0x7f7dea8ebc98)
+QWidget (0x0x7f7dea5bc9a0) 0
+ primary-for QFrame (0x0x7f7dea8ebd00)
+QObject (0x0x7f7dea5aad20) 0
+ primary-for QWidget (0x0x7f7dea5bc9a0)
+QPaintDevice (0x0x7f7dea5aad80) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f7dea5aaf60) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f7dea617060) 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 (0x0x7f7dea8ebd68) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+QAction (0x0x7f7dea8ebdd0) 0
+ primary-for QWidgetAction (0x0x7f7dea8ebd68)
+QObject (0x0x7f7dea617000) 0
+ primary-for QAction (0x0x7f7dea8ebdd0)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f7dea6172a0) 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 (0x0x7f7dea8ebe38) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+QDialog (0x0x7f7dea8ebea0) 0
+ primary-for QWizard (0x0x7f7dea8ebe38)
+QWidget (0x0x7f7dea5bccb0) 0
+ primary-for QDialog (0x0x7f7dea8ebea0)
+QObject (0x0x7f7dea6171e0) 0
+ primary-for QWidget (0x0x7f7dea5bccb0)
+QPaintDevice (0x0x7f7dea617240) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f7dea617a20) 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 (0x0x7f7dea8eb208) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+QWidget (0x0x7f7dea64a460) 0
+ primary-for QWizardPage (0x0x7f7dea8eb208)
+QObject (0x0x7f7dea617960) 0
+ primary-for QWidget (0x0x7f7dea64a460)
+QPaintDevice (0x0x7f7dea6179c0) 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 (0x0x7f7dea617ba0) 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 (0x0x7f7dea6d81e0) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface) + 16)
+
+Class QDomImplementation
+ size=8 align=8
+ base size=8 base align=8
+QDomImplementation (0x0x7f7dea6d8600) 0
+
+Class QDomNode
+ size=8 align=8
+ base size=8 base align=8
+QDomNode (0x0x7f7dea6d8660) 0
+
+Class QDomNodeList
+ size=8 align=8
+ base size=8 base align=8
+QDomNodeList (0x0x7f7dea6d86c0) 0
+
+Class QDomDocumentType
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentType (0x0x7f7dea6bbc98) 0
+QDomNode (0x0x7f7dea6d88a0) 0
+
+Class QDomDocument
+ size=8 align=8
+ base size=8 base align=8
+QDomDocument (0x0x7f7dea6bbd00) 0
+QDomNode (0x0x7f7dea6d8960) 0
+
+Class QDomNamedNodeMap
+ size=8 align=8
+ base size=8 base align=8
+QDomNamedNodeMap (0x0x7f7dea6d8a20) 0
+
+Class QDomDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentFragment (0x0x7f7dea6bbd68) 0
+QDomNode (0x0x7f7dea6d8ba0) 0
+
+Class QDomCharacterData
+ size=8 align=8
+ base size=8 base align=8
+QDomCharacterData (0x0x7f7dea6bbdd0) 0
+QDomNode (0x0x7f7dea6d8c60) 0
+
+Class QDomAttr
+ size=8 align=8
+ base size=8 base align=8
+QDomAttr (0x0x7f7dea6bbe38) 0
+QDomNode (0x0x7f7dea6d8cc0) 0
+
+Class QDomElement
+ size=8 align=8
+ base size=8 base align=8
+QDomElement (0x0x7f7dea6bbea0) 0
+QDomNode (0x0x7f7dea6d8d80) 0
+
+Class QDomText
+ size=8 align=8
+ base size=8 base align=8
+QDomText (0x0x7f7dea6bbf08) 0
+QDomCharacterData (0x0x7f7dea6bbf70) 0
+QDomNode (0x0x7f7dea757000) 0
+
+Class QDomComment
+ size=8 align=8
+ base size=8 base align=8
+QDomComment (0x0x7f7dea75f000) 0
+QDomCharacterData (0x0x7f7dea75f068) 0
+QDomNode (0x0x7f7dea7570c0) 0
+
+Class QDomCDATASection
+ size=8 align=8
+ base size=8 base align=8
+QDomCDATASection (0x0x7f7dea75f0d0) 0
+QDomText (0x0x7f7dea75f138) 0
+QDomCharacterData (0x0x7f7dea75f1a0) 0
+QDomNode (0x0x7f7dea757180) 0
+
+Class QDomNotation
+ size=8 align=8
+ base size=8 base align=8
+QDomNotation (0x0x7f7dea75f208) 0
+QDomNode (0x0x7f7dea757240) 0
+
+Class QDomEntity
+ size=8 align=8
+ base size=8 base align=8
+QDomEntity (0x0x7f7dea75f270) 0
+QDomNode (0x0x7f7dea757300) 0
+
+Class QDomEntityReference
+ size=8 align=8
+ base size=8 base align=8
+QDomEntityReference (0x0x7f7dea75f2d8) 0
+QDomNode (0x0x7f7dea7573c0) 0
+
+Class QDomProcessingInstruction
+ size=8 align=8
+ base size=8 base align=8
+QDomProcessingInstruction (0x0x7f7dea75f340) 0
+QDomNode (0x0x7f7dea757480) 0
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f7dea757540) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f7dea7579c0) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f7dea449ba0) 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 (0x0x7f7dea4be068) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+QObject (0x0x7f7dea449b40) 0
+ primary-for QOpenGLDebugLogger (0x0x7f7dea4be068)
+
+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 (0x0x7f7dea449f00) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f7dea5301e0) 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 (0x0x7f7dea4be0d0) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+QPaintDevice (0x0x7f7dea530240) 0
+ primary-for QOpenGLPaintDevice (0x0x7f7dea4be0d0)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f7dea530480) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f7dea189d80) 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 (0x0x7f7dea18af08) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+QObject (0x0x7f7dea189d20) 0
+ primary-for QOpenGLShader (0x0x7f7dea18af08)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f7dea1b92a0) 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 (0x0x7f7dea1ba068) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+QObject (0x0x7f7dea1b9240) 0
+ primary-for QOpenGLShaderProgram (0x0x7f7dea1ba068)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f7dea1b9420) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f7dea2b6540) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f7dea2b6780) 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 (0x0x7f7dea1ba1a0) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+QObject (0x0x7f7dea2b6720) 0
+ primary-for QOpenGLTimerQuery (0x0x7f7dea1ba1a0)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f7dea2b6960) 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 (0x0x7f7dea1ba208) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+QObject (0x0x7f7dea2b6900) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f7dea1ba208)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f7dea2b6ae0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f7de9fe1a80) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f7de9fe1c60) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f7de9fe1cc0) 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 (0x0x7f7de9fe1ea0) 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 (0x0x7f7dea00b0c0) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f7de9fd69c0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea00b060) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f7dea00b420) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f7de9fd6a28) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea00b3c0) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f7dea00b780) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f7de9fd6a90) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea00b720) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f7dea00bae0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f7de9fd6af8) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea00ba80) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f7dea00be40) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f7de9fd6b60) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea00bde0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f7dea0451e0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f7de9fd6bc8) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea045180) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f7dea045540) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f7de9fd6c30) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea0454e0) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f7dea0458a0) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f7de9fd6c98) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea045840) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f7dea045c00) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f7de9fd6d00) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea045ba0) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f7dea045f60) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f7de9fd6d68) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea045f00) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f7dea09f300) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f7de9fd6dd0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea09f2a0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f7dea09f660) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f7de9fd6e38) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea09f600) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f7dea09f9c0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f7de9fd6ea0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea09f960) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f7dea09fd20) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f7de9fd6f08) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea09fcc0) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f7dea0fc0c0) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f7de9fd6f70) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea0fc060) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f7dea0fc420) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f7dea108000) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea0fc3c0) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f7dea0fc780) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f7dea108068) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea0fc720) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f7dea0fcae0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f7dea1080d0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea0fca80) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f7dea0fce40) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f7dea108138) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7dea0fcde0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f7de9da01e0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f7dea1081a0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7de9da0180) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f7de9da0540) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f7dea108208) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7de9da04e0) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f7de9da08a0) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f7dea108270) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7de9da0840) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f7de9da0c00) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f7dea1082d8) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7de9da0ba0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f7de9da0f60) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f7dea108340) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7de9da0f00) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f7de9de8300) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f7dea1083a8) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7de9de82a0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f7de9de8660) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f7dea108410) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7de9de8600) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f7de9de89c0) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f7dea108478) 0
+QOpenGLVersionFunctionsBackend (0x0x7f7de9de8960) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f7de9de8cc0) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f7de9de8e40) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f7de9de8f60) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f7de9e23000) 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 (0x0x7f7dea1084e0) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+QObject (0x0x7f7de9de8f00) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f7dea1084e0)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f7de9e236c0) 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 (0x0x7f7dea108548) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+QPaintDeviceWindow (0x0x7f7de9e019a0) 0
+ primary-for QOpenGLWindow (0x0x7f7dea108548)
+QWindow (0x0x7f7de9e01a10) 0
+ primary-for QPaintDeviceWindow (0x0x7f7de9e019a0)
+QObject (0x0x7f7de9e235a0) 0
+ primary-for QWindow (0x0x7f7de9e01a10)
+QSurface (0x0x7f7de9e23600) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+QPaintDevice (0x0x7f7de9e23660) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7f7de9e23900) 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 (0x0x7f7dea108618) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+QWidget (0x0x7f7de9e01d20) 0
+ primary-for QOpenGLWidget (0x0x7f7dea108618)
+QObject (0x0x7f7de9e23840) 0
+ primary-for QWidget (0x0x7f7de9e01d20)
+QPaintDevice (0x0x7f7de9e238a0) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QDesignerActionEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerActionEditorInterface::QPrivateSignal (0x0x7f7de9e23b40) 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 (0x0x7f7dea1086e8) 0
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 16)
+QWidget (0x0x7f7de9e61000) 0
+ primary-for QDesignerActionEditorInterface (0x0x7f7dea1086e8)
+QObject (0x0x7f7de9e23a80) 0
+ primary-for QWidget (0x0x7f7de9e61000)
+QPaintDevice (0x0x7f7de9e23ae0) 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 (0x0x7f7de9e23c00) 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 (0x0x7f7de9e23c60) 0
+ vptr=((& QAbstractFormBuilder::_ZTV20QAbstractFormBuilder) + 16)
+
+Class QDesignerFormEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormEditorInterface::QPrivateSignal (0x0x7f7de9e23ea0) 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 (0x0x7f7dea108750) 0
+ vptr=((& QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface) + 16)
+QObject (0x0x7f7de9e23e40) 0
+ primary-for QDesignerFormEditorInterface (0x0x7f7dea108750)
+
+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 (0x0x7f7de9ec7000) 0 nearly-empty
+ vptr=((& QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface) + 16)
+
+Class QDesignerFormWindowInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowInterface::QPrivateSignal (0x0x7f7de9ec72a0) 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 (0x0x7f7dea1087b8) 0
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 16)
+QWidget (0x0x7f7de9e614d0) 0
+ primary-for QDesignerFormWindowInterface (0x0x7f7dea1087b8)
+QObject (0x0x7f7de9ec71e0) 0
+ primary-for QWidget (0x0x7f7de9e614d0)
+QPaintDevice (0x0x7f7de9ec7240) 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 (0x0x7f7de9ec7420) 0 nearly-empty
+ vptr=((& QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface) + 16)
+
+Class QDesignerFormWindowManagerInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowManagerInterface::QPrivateSignal (0x0x7f7de9ec74e0) 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 (0x0x7f7dea108820) 0
+ vptr=((& QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface) + 16)
+QObject (0x0x7f7de9ec7480) 0
+ primary-for QDesignerFormWindowManagerInterface (0x0x7f7dea108820)
+
+Class QDesignerFormWindowToolInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowToolInterface::QPrivateSignal (0x0x7f7de9ec77e0) 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 (0x0x7f7dea108888) 0
+ vptr=((& QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface) + 16)
+QObject (0x0x7f7de9ec7780) 0
+ primary-for QDesignerFormWindowToolInterface (0x0x7f7dea108888)
+
+Class QDesignerIntegrationInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegrationInterface::QPrivateSignal (0x0x7f7de9ec79c0) 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 (0x0x7f7dea1088f0) 0
+ vptr=((& QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface) + 16)
+QObject (0x0x7f7de9ec7960) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f7dea1088f0)
+
+Class QDesignerIntegration::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegration::QPrivateSignal (0x0x7f7de9ec7c00) 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 (0x0x7f7dea108958) 0
+ vptr=((& QDesignerIntegration::_ZTV20QDesignerIntegration) + 16)
+QDesignerIntegrationInterface (0x0x7f7dea1089c0) 0
+ primary-for QDesignerIntegration (0x0x7f7dea108958)
+QObject (0x0x7f7de9ec7ba0) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f7dea1089c0)
+
+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 (0x0x7f7de9ec7d20) 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 (0x0x7f7de9f65120) 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 (0x0x7f7de9f65540) 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 (0x0x7f7de9f65780) 0 nearly-empty
+ vptr=((& QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface) + 16)
+
+Class QDesignerMetaDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerMetaDataBaseInterface::QPrivateSignal (0x0x7f7de9f65840) 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 (0x0x7f7dea108a28) 0
+ vptr=((& QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface) + 16)
+QObject (0x0x7f7de9f657e0) 0
+ primary-for QDesignerMetaDataBaseInterface (0x0x7f7dea108a28)
+
+Class QDesignerNewFormWidgetInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerNewFormWidgetInterface::QPrivateSignal (0x0x7f7de9f659c0) 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 (0x0x7f7dea108a90) 0
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 16)
+QWidget (0x0x7f7de9f5d930) 0
+ primary-for QDesignerNewFormWidgetInterface (0x0x7f7dea108a90)
+QObject (0x0x7f7de9f65900) 0
+ primary-for QWidget (0x0x7f7de9f5d930)
+QPaintDevice (0x0x7f7de9f65960) 16
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 464)
+
+Class QDesignerObjectInspectorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerObjectInspectorInterface::QPrivateSignal (0x0x7f7de9f65b40) 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 (0x0x7f7dea108af8) 0
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 16)
+QWidget (0x0x7f7de9f5da10) 0
+ primary-for QDesignerObjectInspectorInterface (0x0x7f7dea108af8)
+QObject (0x0x7f7de9f65a80) 0
+ primary-for QWidget (0x0x7f7de9f5da10)
+QPaintDevice (0x0x7f7de9f65ae0) 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 (0x0x7f7de9f65c00) 0 nearly-empty
+ vptr=((& QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface) + 16)
+
+Class QDesignerPromotionInterface::PromotedClass
+ size=16 align=8
+ base size=16 base align=8
+QDesignerPromotionInterface::PromotedClass (0x0x7f7de9f65cc0) 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 (0x0x7f7de9f65c60) 0 nearly-empty
+ vptr=((& QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface) + 16)
+
+Class QDesignerPropertyEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerPropertyEditorInterface::QPrivateSignal (0x0x7f7de9f65de0) 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 (0x0x7f7dea108b60) 0
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 16)
+QWidget (0x0x7f7de9f5daf0) 0
+ primary-for QDesignerPropertyEditorInterface (0x0x7f7dea108b60)
+QObject (0x0x7f7de9f65d20) 0
+ primary-for QWidget (0x0x7f7de9f5daf0)
+QPaintDevice (0x0x7f7de9f65d80) 16
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 504)
+
+Class QDesignerResourceBrowserInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerResourceBrowserInterface::QPrivateSignal (0x0x7f7de9f65f60) 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 (0x0x7f7dea108bc8) 0
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 16)
+QWidget (0x0x7f7de9f5dbd0) 0
+ primary-for QDesignerResourceBrowserInterface (0x0x7f7dea108bc8)
+QObject (0x0x7f7de9f65ea0) 0
+ primary-for QWidget (0x0x7f7de9f5dbd0)
+QPaintDevice (0x0x7f7de9f65f00) 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 (0x0x7f7de9bd1060) 0 nearly-empty
+ vptr=((& QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface) + 16)
+
+Class QDesignerWidgetBoxInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetBoxInterface::QPrivateSignal (0x0x7f7de9bd1180) 0 empty
+
+Class QDesignerWidgetBoxInterface::Widget
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetBoxInterface::Widget (0x0x7f7de9bd11e0) 0
+
+Class QDesignerWidgetBoxInterface::Category
+ size=56 align=8
+ base size=56 base align=8
+QDesignerWidgetBoxInterface::Category (0x0x7f7de9bd12a0) 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 (0x0x7f7dea108c30) 0
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 16)
+QWidget (0x0x7f7de9f5dcb0) 0
+ primary-for QDesignerWidgetBoxInterface (0x0x7f7dea108c30)
+QObject (0x0x7f7de9bd10c0) 0
+ primary-for QWidget (0x0x7f7de9f5dcb0)
+QPaintDevice (0x0x7f7de9bd1120) 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 (0x0x7f7de9c78660) 0 nearly-empty
+ vptr=((& QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface) + 16)
+
+Class QDesignerWidgetDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetDataBaseInterface::QPrivateSignal (0x0x7f7de9c78780) 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 (0x0x7f7de9c092d8) 0
+ vptr=((& QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface) + 16)
+QObject (0x0x7f7de9c78720) 0
+ primary-for QDesignerWidgetDataBaseInterface (0x0x7f7de9c092d8)
+
+Class QDesignerWidgetFactoryInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetFactoryInterface::QPrivateSignal (0x0x7f7de9cfd000) 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 (0x0x7f7de9c09958) 0
+ vptr=((& QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface) + 16)
+QObject (0x0x7f7de9c78ea0) 0
+ primary-for QDesignerWidgetFactoryInterface (0x0x7f7de9c09958)
+
+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 (0x0x7f7de9cfd0c0) 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 (0x0x7f7de9cfd300) 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 (0x0x7f7de9cfd5a0) 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 (0x0x7f7de9c099c0) 0
+ vptr=((& QFormBuilder::_ZTV12QFormBuilder) + 16)
+QAbstractFormBuilder (0x0x7f7de9cfd7e0) 0
+ primary-for QFormBuilder (0x0x7f7de9c099c0)
+
+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 (0x0x7f7de9cfd840) 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 (0x0x7f7de9cfda80) 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 (0x0x7f7de9cfdcc0) 0 nearly-empty
+ vptr=((& QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension) + 16)
+
+Class QExtensionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QExtensionManager::QPrivateSignal (0x0x7f7de996c000) 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 (0x0x7f7de9d19a80) 0
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 16)
+QObject (0x0x7f7de9cfdf00) 0
+ primary-for QExtensionManager (0x0x7f7de9d19a80)
+QAbstractExtensionManager (0x0x7f7de9cfdf60) 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 (0x0x7f7de996c960) 0 nearly-empty
+ vptr=((& QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension) + 16)
+
+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 (0x0x7f7de996cf00) 0 nearly-empty
+ vptr=((& QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase) + 16)
+
+Class QSqlDatabase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDatabase (0x0x7f7de9a3e1e0) 0
+
+Class QSqlDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriver::QPrivateSignal (0x0x7f7de9a3e2a0) 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 (0x0x7f7de9a40068) 0
+ vptr=((& QSqlDriver::_ZTV10QSqlDriver) + 16)
+QObject (0x0x7f7de9a3e240) 0
+ primary-for QSqlDriver (0x0x7f7de9a40068)
+
+Class QSqlDriverPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriverPlugin::QPrivateSignal (0x0x7f7de9a3e480) 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 (0x0x7f7de9a400d0) 0
+ vptr=((& QSqlDriverPlugin::_ZTV16QSqlDriverPlugin) + 16)
+QObject (0x0x7f7de9a3e420) 0
+ primary-for QSqlDriverPlugin (0x0x7f7de9a400d0)
+
+Class QSqlError
+ size=8 align=8
+ base size=8 base align=8
+QSqlError (0x0x7f7de9a3e540) 0
+
+Class QSqlField
+ size=40 align=8
+ base size=40 base align=8
+QSqlField (0x0x7f7de9adc600) 0
+
+Class QSqlRecord
+ size=8 align=8
+ base size=8 base align=8
+QSqlRecord (0x0x7f7de9adc9c0) 0
+
+Class QSqlIndex
+ size=80 align=8
+ base size=80 base align=8
+QSqlIndex (0x0x7f7de9adda90) 0
+QSqlRecord (0x0x7f7de9adca80) 0
+
+Class QSqlQuery
+ size=8 align=8
+ base size=8 base align=8
+QSqlQuery (0x0x7f7de9adcf60) 0
+
+Class QSqlQueryModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlQueryModel::QPrivateSignal (0x0x7f7de9785000) 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 (0x0x7f7de9addd68) 0
+ vptr=((& QSqlQueryModel::_ZTV14QSqlQueryModel) + 16)
+QAbstractTableModel (0x0x7f7de9adddd0) 0
+ primary-for QSqlQueryModel (0x0x7f7de9addd68)
+QAbstractItemModel (0x0x7f7de9adde38) 0
+ primary-for QAbstractTableModel (0x0x7f7de9adddd0)
+QObject (0x0x7f7de9adcde0) 0
+ primary-for QAbstractItemModel (0x0x7f7de9adde38)
+
+Class QSqlTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlTableModel::QPrivateSignal (0x0x7f7de97851e0) 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 (0x0x7f7de9addea0) 0
+ vptr=((& QSqlTableModel::_ZTV14QSqlTableModel) + 16)
+QSqlQueryModel (0x0x7f7de9addf08) 0
+ primary-for QSqlTableModel (0x0x7f7de9addea0)
+QAbstractTableModel (0x0x7f7de9addf70) 0
+ primary-for QSqlQueryModel (0x0x7f7de9addf08)
+QAbstractItemModel (0x0x7f7de9addd00) 0
+ primary-for QAbstractTableModel (0x0x7f7de9addf70)
+QObject (0x0x7f7de9785180) 0
+ primary-for QAbstractItemModel (0x0x7f7de9addd00)
+
+Class QSqlRelation
+ size=72 align=8
+ base size=72 base align=8
+QSqlRelation (0x0x7f7de9785360) 0
+
+Class QSqlRelationalTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlRelationalTableModel::QPrivateSignal (0x0x7f7de97f9300) 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 (0x0x7f7de9800138) 0
+ vptr=((& QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel) + 16)
+QSqlTableModel (0x0x7f7de98001a0) 0
+ primary-for QSqlRelationalTableModel (0x0x7f7de9800138)
+QSqlQueryModel (0x0x7f7de9800208) 0
+ primary-for QSqlTableModel (0x0x7f7de98001a0)
+QAbstractTableModel (0x0x7f7de9800270) 0
+ primary-for QSqlQueryModel (0x0x7f7de9800208)
+QAbstractItemModel (0x0x7f7de98002d8) 0
+ primary-for QAbstractTableModel (0x0x7f7de9800270)
+QObject (0x0x7f7de97f92a0) 0
+ primary-for QAbstractItemModel (0x0x7f7de98002d8)
+
+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 (0x0x7f7de97f9480) 0
+ vptr=((& QSqlResult::_ZTV10QSqlResult) + 16)
+
+Class QHelpGlobal
+ size=1 align=1
+ base size=0 base align=1
+QHelpGlobal (0x0x7f7de97f95a0) 0 empty
+
+Class QCompressedHelpInfo
+ size=8 align=8
+ base size=8 base align=8
+QCompressedHelpInfo (0x0x7f7de97f9600) 0
+
+Class QHelpContentItem
+ size=8 align=8
+ base size=8 base align=8
+QHelpContentItem (0x0x7f7de97f9720) 0
+
+Class QHelpContentModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentModel::QPrivateSignal (0x0x7f7de97f97e0) 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 (0x0x7f7de9800340) 0
+ vptr=((& QHelpContentModel::_ZTV17QHelpContentModel) + 16)
+QAbstractItemModel (0x0x7f7de98003a8) 0
+ primary-for QHelpContentModel (0x0x7f7de9800340)
+QObject (0x0x7f7de97f9780) 0
+ primary-for QAbstractItemModel (0x0x7f7de98003a8)
+
+Class QHelpContentWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentWidget::QPrivateSignal (0x0x7f7de97f9960) 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 (0x0x7f7de9800410) 0
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 16)
+QTreeView (0x0x7f7de9800478) 0
+ primary-for QHelpContentWidget (0x0x7f7de9800410)
+QAbstractItemView (0x0x7f7de98004e0) 0
+ primary-for QTreeView (0x0x7f7de9800478)
+QAbstractScrollArea (0x0x7f7de9800548) 0
+ primary-for QAbstractItemView (0x0x7f7de98004e0)
+QFrame (0x0x7f7de98005b0) 0
+ primary-for QAbstractScrollArea (0x0x7f7de9800548)
+QWidget (0x0x7f7de981a2a0) 0
+ primary-for QFrame (0x0x7f7de98005b0)
+QObject (0x0x7f7de97f98a0) 0
+ primary-for QWidget (0x0x7f7de981a2a0)
+QPaintDevice (0x0x7f7de97f9900) 16
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 816)
+
+Class QHelpEngineCore::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngineCore::QPrivateSignal (0x0x7f7de97f9a80) 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 (0x0x7f7de9800618) 0
+ vptr=((& QHelpEngineCore::_ZTV15QHelpEngineCore) + 16)
+QObject (0x0x7f7de97f9a20) 0
+ primary-for QHelpEngineCore (0x0x7f7de9800618)
+
+Class QHelpEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngine::QPrivateSignal (0x0x7f7de97f9ba0) 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 (0x0x7f7de9800680) 0
+ vptr=((& QHelpEngine::_ZTV11QHelpEngine) + 16)
+QHelpEngineCore (0x0x7f7de98006e8) 0
+ primary-for QHelpEngine (0x0x7f7de9800680)
+QObject (0x0x7f7de97f9b40) 0
+ primary-for QHelpEngineCore (0x0x7f7de98006e8)
+
+Class QHelpFilterData
+ size=8 align=8
+ base size=8 base align=8
+QHelpFilterData (0x0x7f7de97f9c60) 0
+
+Class QHelpFilterEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterEngine::QPrivateSignal (0x0x7f7de97f9de0) 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 (0x0x7f7de9800750) 0
+ vptr=((& QHelpFilterEngine::_ZTV17QHelpFilterEngine) + 16)
+QObject (0x0x7f7de97f9d80) 0
+ primary-for QHelpFilterEngine (0x0x7f7de9800750)
+
+Class QHelpFilterSettingsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterSettingsWidget::QPrivateSignal (0x0x7f7de97f9f60) 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 (0x0x7f7de98007b8) 0
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 16)
+QWidget (0x0x7f7de981a540) 0
+ primary-for QHelpFilterSettingsWidget (0x0x7f7de98007b8)
+QObject (0x0x7f7de97f9ea0) 0
+ primary-for QWidget (0x0x7f7de981a540)
+QPaintDevice (0x0x7f7de97f9f00) 16
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 448)
+
+Class QHelpIndexModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexModel::QPrivateSignal (0x0x7f7de98b6240) 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 (0x0x7f7de9800820) 0
+ vptr=((& QHelpIndexModel::_ZTV15QHelpIndexModel) + 16)
+QStringListModel (0x0x7f7de9800888) 0
+ primary-for QHelpIndexModel (0x0x7f7de9800820)
+QAbstractListModel (0x0x7f7de98008f0) 0
+ primary-for QStringListModel (0x0x7f7de9800888)
+QAbstractItemModel (0x0x7f7de9800958) 0
+ primary-for QAbstractListModel (0x0x7f7de98008f0)
+QObject (0x0x7f7de98b61e0) 0
+ primary-for QAbstractItemModel (0x0x7f7de9800958)
+
+Class QHelpIndexWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexWidget::QPrivateSignal (0x0x7f7de98b63c0) 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 (0x0x7f7de98009c0) 0
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 16)
+QListView (0x0x7f7de9800a28) 0
+ primary-for QHelpIndexWidget (0x0x7f7de98009c0)
+QAbstractItemView (0x0x7f7de9800a90) 0
+ primary-for QListView (0x0x7f7de9800a28)
+QAbstractScrollArea (0x0x7f7de9800af8) 0
+ primary-for QAbstractItemView (0x0x7f7de9800a90)
+QFrame (0x0x7f7de9800b60) 0
+ primary-for QAbstractScrollArea (0x0x7f7de9800af8)
+QWidget (0x0x7f7de981a770) 0
+ primary-for QFrame (0x0x7f7de9800b60)
+QObject (0x0x7f7de98b6300) 0
+ primary-for QWidget (0x0x7f7de981a770)
+QPaintDevice (0x0x7f7de98b6360) 16
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 800)
+
+Class QHelpLink
+ size=32 align=8
+ base size=32 base align=8
+QHelpLink (0x0x7f7de98b6480) 0
+
+Class QHelpSearchQuery
+ size=32 align=8
+ base size=32 base align=8
+QHelpSearchQuery (0x0x7f7de98b64e0) 0
+
+Class QHelpSearchResult
+ size=8 align=8
+ base size=8 base align=8
+QHelpSearchResult (0x0x7f7de98b69c0) 0
+
+Class QHelpSearchEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchEngine::QPrivateSignal (0x0x7f7de98b6ae0) 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 (0x0x7f7de9800bc8) 0
+ vptr=((& QHelpSearchEngine::_ZTV17QHelpSearchEngine) + 16)
+QObject (0x0x7f7de98b6a80) 0
+ primary-for QHelpSearchEngine (0x0x7f7de9800bc8)
+
+Class QHelpSearchQueryWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchQueryWidget::QPrivateSignal (0x0x7f7de98b6c60) 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 (0x0x7f7de9800c30) 0
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 16)
+QWidget (0x0x7f7de9915000) 0
+ primary-for QHelpSearchQueryWidget (0x0x7f7de9800c30)
+QObject (0x0x7f7de98b6ba0) 0
+ primary-for QWidget (0x0x7f7de9915000)
+QPaintDevice (0x0x7f7de98b6c00) 16
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 448)
+
+Class QHelpSearchResultWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchResultWidget::QPrivateSignal (0x0x7f7de98b6de0) 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 (0x0x7f7de9800c98) 0
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 16)
+QWidget (0x0x7f7de99150e0) 0
+ primary-for QHelpSearchResultWidget (0x0x7f7de9800c98)
+QObject (0x0x7f7de98b6d20) 0
+ primary-for QWidget (0x0x7f7de99150e0)
+QPaintDevice (0x0x7f7de98b6d80) 16
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 448)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f7de98b6ea0) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f7de95acf60) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f7de96468a0) 0 empty
+
+Vtable for QAbstractNetworkCache
+QAbstractNetworkCache::_ZTV21QAbstractNetworkCache: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractNetworkCache)
+16 (int (*)(...))QAbstractNetworkCache::metaObject
+24 (int (*)(...))QAbstractNetworkCache::qt_metacast
+32 (int (*)(...))QAbstractNetworkCache::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
+
+Class QAbstractNetworkCache
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNetworkCache (0x0x7f7de964d8f0) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+QObject (0x0x7f7de9646840) 0
+ primary-for QAbstractNetworkCache (0x0x7f7de964d8f0)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f7de9646ae0) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSocket)
+16 (int (*)(...))QAbstractSocket::metaObject
+24 (int (*)(...))QAbstractSocket::qt_metacast
+32 (int (*)(...))QAbstractSocket::qt_metacall
+40 (int (*)(...))QAbstractSocket::~QAbstractSocket
+48 (int (*)(...))QAbstractSocket::~QAbstractSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7f7de964d958) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+QIODevice (0x0x7f7de95b6ee0) 0
+ primary-for QAbstractSocket (0x0x7f7de964d958)
+QObject (0x0x7f7de9646a20) 0
+ primary-for QIODevice (0x0x7f7de95b6ee0)
+QIODeviceBase (0x0x7f7de9646a80) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f7de96ae8a0) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f7de96ae960) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f7de939f1e0) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f7de9413a20) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f7de94a52a0) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f7de9517f60) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f7de919eea0) 0 empty
+
+Vtable for QDnsLookup
+QDnsLookup::_ZTV10QDnsLookup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDnsLookup)
+16 (int (*)(...))QDnsLookup::metaObject
+24 (int (*)(...))QDnsLookup::qt_metacast
+32 (int (*)(...))QDnsLookup::qt_metacall
+40 (int (*)(...))QDnsLookup::~QDnsLookup
+48 (int (*)(...))QDnsLookup::~QDnsLookup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDnsLookup
+ size=16 align=8
+ base size=16 base align=8
+QDnsLookup (0x0x7f7de91af750) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+QObject (0x0x7f7de919ee40) 0
+ primary-for QDnsLookup (0x0x7f7de91af750)
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f7de91d22a0) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpSocket)
+16 (int (*)(...))QTcpSocket::metaObject
+24 (int (*)(...))QTcpSocket::qt_metacast
+32 (int (*)(...))QTcpSocket::qt_metacall
+40 (int (*)(...))QTcpSocket::~QTcpSocket
+48 (int (*)(...))QTcpSocket::~QTcpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7f7de91af7b8) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+QAbstractSocket (0x0x7f7de91af820) 0
+ primary-for QTcpSocket (0x0x7f7de91af7b8)
+QIODevice (0x0x7f7de91bd770) 0
+ primary-for QAbstractSocket (0x0x7f7de91af820)
+QObject (0x0x7f7de91d21e0) 0
+ primary-for QIODevice (0x0x7f7de91bd770)
+QIODeviceBase (0x0x7f7de91d2240) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f7de91d2720) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f7de92ab960) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f7de93108a0) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslSocket)
+16 (int (*)(...))QSslSocket::metaObject
+24 (int (*)(...))QSslSocket::qt_metacast
+32 (int (*)(...))QSslSocket::qt_metacall
+40 (int (*)(...))QSslSocket::~QSslSocket
+48 (int (*)(...))QSslSocket::~QSslSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QSslSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QSslSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QSslSocket::bytesAvailable
+184 (int (*)(...))QSslSocket::bytesToWrite
+192 (int (*)(...))QSslSocket::canReadLine
+200 (int (*)(...))QSslSocket::waitForReadyRead
+208 (int (*)(...))QSslSocket::waitForBytesWritten
+216 (int (*)(...))QSslSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QSslSocket::skipData
+240 (int (*)(...))QSslSocket::writeData
+248 (int (*)(...))QSslSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QSslSocket::connectToHost
+272 (int (*)(...))QSslSocket::disconnectFromHost
+280 (int (*)(...))QSslSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QSslSocket::setSocketDescriptor
+304 (int (*)(...))QSslSocket::setSocketOption
+312 (int (*)(...))QSslSocket::socketOption
+320 (int (*)(...))QSslSocket::waitForConnected
+328 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7f7de9303dd0) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+QTcpSocket (0x0x7f7de9303e38) 0
+ primary-for QSslSocket (0x0x7f7de9303dd0)
+QAbstractSocket (0x0x7f7de9303ea0) 0
+ primary-for QTcpSocket (0x0x7f7de9303e38)
+QIODevice (0x0x7f7de92c4a80) 0
+ primary-for QAbstractSocket (0x0x7f7de9303ea0)
+QObject (0x0x7f7de93107e0) 0
+ primary-for QIODevice (0x0x7f7de92c4a80)
+QIODeviceBase (0x0x7f7de9310840) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f7de9310a80) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f7de9310ae0) 0
+
+Vtable for QDtlsClientVerifier
+QDtlsClientVerifier::_ZTV19QDtlsClientVerifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDtlsClientVerifier)
+16 (int (*)(...))QDtlsClientVerifier::metaObject
+24 (int (*)(...))QDtlsClientVerifier::qt_metacast
+32 (int (*)(...))QDtlsClientVerifier::qt_metacall
+40 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+48 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtlsClientVerifier
+ size=16 align=8
+ base size=16 base align=8
+QDtlsClientVerifier (0x0x7f7de9303f08) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+QObject (0x0x7f7de9310a20) 0
+ primary-for QDtlsClientVerifier (0x0x7f7de9303f08)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f7de9310cc0) 0 empty
+
+Vtable for QDtls
+QDtls::_ZTV5QDtls: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDtls)
+16 (int (*)(...))QDtls::metaObject
+24 (int (*)(...))QDtls::qt_metacast
+32 (int (*)(...))QDtls::qt_metacall
+40 (int (*)(...))QDtls::~QDtls
+48 (int (*)(...))QDtls::~QDtls
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtls
+ size=16 align=8
+ base size=16 base align=8
+QDtls (0x0x7f7de9303f70) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+QObject (0x0x7f7de9310c60) 0
+ primary-for QDtls (0x0x7f7de9303f70)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f7de9310e40) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f7de9310f60) 0
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f7de8ff7f60) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f7de90953c0) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7f7de9165060) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f7de8da6a80) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f7de8e384e0) 0 empty
+
+Vtable for QHttpMultiPart
+QHttpMultiPart::_ZTV14QHttpMultiPart: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QHttpMultiPart)
+16 (int (*)(...))QHttpMultiPart::metaObject
+24 (int (*)(...))QHttpMultiPart::qt_metacast
+32 (int (*)(...))QHttpMultiPart::qt_metacall
+40 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+48 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHttpMultiPart
+ size=16 align=8
+ base size=16 base align=8
+QHttpMultiPart (0x0x7f7de8e36b60) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+QObject (0x0x7f7de8e38480) 0
+ primary-for QHttpMultiPart (0x0x7f7de8e36b60)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f7de8e386c0) 0 empty
+
+Vtable for QLocalServer
+QLocalServer::_ZTV12QLocalServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalServer)
+16 (int (*)(...))QLocalServer::metaObject
+24 (int (*)(...))QLocalServer::qt_metacast
+32 (int (*)(...))QLocalServer::qt_metacall
+40 (int (*)(...))QLocalServer::~QLocalServer
+48 (int (*)(...))QLocalServer::~QLocalServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalServer::hasPendingConnections
+120 (int (*)(...))QLocalServer::nextPendingConnection
+128 (int (*)(...))QLocalServer::incomingConnection
+
+Class QLocalServer
+ size=16 align=8
+ base size=16 base align=8
+QLocalServer (0x0x7f7de8e36bc8) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+QObject (0x0x7f7de8e38660) 0
+ primary-for QLocalServer (0x0x7f7de8e36bc8)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f7de8e38d80) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalSocket)
+16 (int (*)(...))QLocalSocket::metaObject
+24 (int (*)(...))QLocalSocket::qt_metacast
+32 (int (*)(...))QLocalSocket::qt_metacall
+40 (int (*)(...))QLocalSocket::~QLocalSocket
+48 (int (*)(...))QLocalSocket::~QLocalSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalSocket::isSequential
+120 (int (*)(...))QLocalSocket::open
+128 (int (*)(...))QLocalSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QLocalSocket::bytesAvailable
+184 (int (*)(...))QLocalSocket::bytesToWrite
+192 (int (*)(...))QLocalSocket::canReadLine
+200 (int (*)(...))QLocalSocket::waitForReadyRead
+208 (int (*)(...))QLocalSocket::waitForBytesWritten
+216 (int (*)(...))QLocalSocket::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QLocalSocket::skipData
+240 (int (*)(...))QLocalSocket::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7f7de8e36d00) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+QIODevice (0x0x7f7de8e3dbd0) 0
+ primary-for QLocalSocket (0x0x7f7de8e36d00)
+QObject (0x0x7f7de8e38cc0) 0
+ primary-for QIODevice (0x0x7f7de8e3dbd0)
+QIODeviceBase (0x0x7f7de8e38d20) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f7de8e38f00) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f7de8b7b420) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f7de8c18180) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QNetworkAccessManager)
+16 (int (*)(...))QNetworkAccessManager::metaObject
+24 (int (*)(...))QNetworkAccessManager::qt_metacast
+32 (int (*)(...))QNetworkAccessManager::qt_metacall
+40 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+48 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkAccessManager::supportedSchemes
+120 (int (*)(...))QNetworkAccessManager::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7f7de8c0b410) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+QObject (0x0x7f7de8c18120) 0
+ primary-for QNetworkAccessManager (0x0x7f7de8c0b410)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f7de8c18300) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f7de8cc1480) 0 empty
+
+Vtable for QNetworkCookieJar
+QNetworkCookieJar::_ZTV17QNetworkCookieJar: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkCookieJar)
+16 (int (*)(...))QNetworkCookieJar::metaObject
+24 (int (*)(...))QNetworkCookieJar::qt_metacast
+32 (int (*)(...))QNetworkCookieJar::qt_metacall
+40 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+48 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkCookieJar::cookiesForUrl
+120 (int (*)(...))QNetworkCookieJar::setCookiesFromUrl
+128 (int (*)(...))QNetworkCookieJar::insertCookie
+136 (int (*)(...))QNetworkCookieJar::updateCookie
+144 (int (*)(...))QNetworkCookieJar::deleteCookie
+152 (int (*)(...))QNetworkCookieJar::validateCookie
+
+Class QNetworkCookieJar
+ size=16 align=8
+ base size=16 base align=8
+QNetworkCookieJar (0x0x7f7de8cbd8f0) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+QObject (0x0x7f7de8cc1420) 0
+ primary-for QNetworkCookieJar (0x0x7f7de8cbd8f0)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f7de8cc1600) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f7de8d42b40) 0 empty
+
+Vtable for QNetworkDiskCache
+QNetworkDiskCache::_ZTV17QNetworkDiskCache: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkDiskCache)
+16 (int (*)(...))QNetworkDiskCache::metaObject
+24 (int (*)(...))QNetworkDiskCache::qt_metacast
+32 (int (*)(...))QNetworkDiskCache::qt_metacall
+40 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+48 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkDiskCache::metaData
+120 (int (*)(...))QNetworkDiskCache::updateMetaData
+128 (int (*)(...))QNetworkDiskCache::data
+136 (int (*)(...))QNetworkDiskCache::remove
+144 (int (*)(...))QNetworkDiskCache::cacheSize
+152 (int (*)(...))QNetworkDiskCache::prepare
+160 (int (*)(...))QNetworkDiskCache::insert
+168 (int (*)(...))QNetworkDiskCache::clear
+176 (int (*)(...))QNetworkDiskCache::expire
+
+Class QNetworkDiskCache
+ size=16 align=8
+ base size=16 base align=8
+QNetworkDiskCache (0x0x7f7de8d530d0) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+QAbstractNetworkCache (0x0x7f7de8d53138) 0
+ primary-for QNetworkDiskCache (0x0x7f7de8d530d0)
+QObject (0x0x7f7de8d42ae0) 0
+ primary-for QAbstractNetworkCache (0x0x7f7de8d53138)
+
+Class QNetworkInformation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkInformation::QPrivateSignal (0x0x7f7de8d42d20) 0 empty
+
+Vtable for QNetworkInformation
+QNetworkInformation::_ZTV19QNetworkInformation: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNetworkInformation)
+16 (int (*)(...))QNetworkInformation::metaObject
+24 (int (*)(...))QNetworkInformation::qt_metacast
+32 (int (*)(...))QNetworkInformation::qt_metacall
+40 (int (*)(...))QNetworkInformation::~QNetworkInformation
+48 (int (*)(...))QNetworkInformation::~QNetworkInformation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkInformation
+ size=16 align=8
+ base size=16 base align=8
+QNetworkInformation (0x0x7f7de8d531a0) 0
+ vptr=((& QNetworkInformation::_ZTV19QNetworkInformation) + 16)
+QObject (0x0x7f7de8d42cc0) 0
+ primary-for QNetworkInformation (0x0x7f7de8d531a0)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f7de897e360) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f7de89eede0) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f7de8add1e0) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f7de8b5ba20) 0
+
+Vtable for QNetworkProxyFactory
+QNetworkProxyFactory::_ZTV20QNetworkProxyFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QNetworkProxyFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNetworkProxyFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyFactory (0x0x7f7de87fd6c0) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f7de87fd900) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QNetworkReply)
+16 (int (*)(...))QNetworkReply::metaObject
+24 (int (*)(...))QNetworkReply::qt_metacast
+32 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::writeData
+248 (int (*)(...))QNetworkReply::setReadBufferSize
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QNetworkReply::ignoreSslErrors
+272 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+288 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7f7de87f5d00) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+QIODevice (0x0x7f7de8807380) 0
+ primary-for QNetworkReply (0x0x7f7de87f5d00)
+QObject (0x0x7f7de87fd840) 0
+ primary-for QIODevice (0x0x7f7de8807380)
+QIODeviceBase (0x0x7f7de87fd8a0) 0 empty
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7f7de87fdc60) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f7de88ad9c0) 0 empty
+
+Vtable for QTcpServer
+QTcpServer::_ZTV10QTcpServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpServer)
+16 (int (*)(...))QTcpServer::metaObject
+24 (int (*)(...))QTcpServer::qt_metacast
+32 (int (*)(...))QTcpServer::qt_metacall
+40 (int (*)(...))QTcpServer::~QTcpServer
+48 (int (*)(...))QTcpServer::~QTcpServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QTcpServer::incomingConnection
+
+Class QTcpServer
+ size=16 align=8
+ base size=16 base align=8
+QTcpServer (0x0x7f7de88a9ea0) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+QObject (0x0x7f7de88ad960) 0
+ primary-for QTcpServer (0x0x7f7de88a9ea0)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f7de88adb40) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f7de8955480) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f7de85b8120) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f7de861aba0) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f7de8662de0) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f7de86fc840) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUdpSocket)
+16 (int (*)(...))QUdpSocket::metaObject
+24 (int (*)(...))QUdpSocket::qt_metacast
+32 (int (*)(...))QUdpSocket::qt_metacall
+40 (int (*)(...))QUdpSocket::~QUdpSocket
+48 (int (*)(...))QUdpSocket::~QUdpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7f7de86ffc30) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+QAbstractSocket (0x0x7f7de86ffc98) 0
+ primary-for QUdpSocket (0x0x7f7de86ffc30)
+QIODevice (0x0x7f7de867b460) 0
+ primary-for QAbstractSocket (0x0x7f7de86ffc98)
+QObject (0x0x7f7de86fc780) 0
+ primary-for QIODevice (0x0x7f7de867b460)
+QIODeviceBase (0x0x7f7de86fc7e0) 0 empty
+
+Class QAbstractPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractPrintDialog::QPrivateSignal (0x0x7f7de86fcae0) 0 empty
+
+Vtable for QAbstractPrintDialog
+QAbstractPrintDialog::_ZTV20QAbstractPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAbstractPrintDialog)
+16 (int (*)(...))QAbstractPrintDialog::metaObject
+24 (int (*)(...))QAbstractPrintDialog::qt_metacast
+32 (int (*)(...))QAbstractPrintDialog::qt_metacall
+40 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+48 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+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 (*)(...))(& _ZTI20QAbstractPrintDialog)
+488 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD1Ev
+496 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD0Ev
+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 QAbstractPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QAbstractPrintDialog (0x0x7f7de86ffd00) 0
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 16)
+QDialog (0x0x7f7de86ffd68) 0
+ primary-for QAbstractPrintDialog (0x0x7f7de86ffd00)
+QWidget (0x0x7f7de867b690) 0
+ primary-for QDialog (0x0x7f7de86ffd68)
+QObject (0x0x7f7de86fca20) 0
+ primary-for QWidget (0x0x7f7de867b690)
+QPaintDevice (0x0x7f7de86fca80) 16
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 488)
+
+Class QPageSetupDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPageSetupDialog::QPrivateSignal (0x0x7f7de875a1e0) 0 empty
+
+Vtable for QPageSetupDialog
+QPageSetupDialog::_ZTV16QPageSetupDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QPageSetupDialog)
+16 (int (*)(...))QPageSetupDialog::metaObject
+24 (int (*)(...))QPageSetupDialog::qt_metacast
+32 (int (*)(...))QPageSetupDialog::qt_metacall
+40 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+48 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+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 (*)(...))QPageSetupDialog::exec
+448 (int (*)(...))QPageSetupDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI16QPageSetupDialog)
+488 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD1Ev
+496 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD0Ev
+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 QPageSetupDialog
+ size=40 align=8
+ base size=40 base align=8
+QPageSetupDialog (0x0x7f7de86ffea0) 0
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 16)
+QDialog (0x0x7f7de86fff08) 0
+ primary-for QPageSetupDialog (0x0x7f7de86ffea0)
+QWidget (0x0x7f7de8373000) 0
+ primary-for QDialog (0x0x7f7de86fff08)
+QObject (0x0x7f7de875a120) 0
+ primary-for QWidget (0x0x7f7de8373000)
+QPaintDevice (0x0x7f7de875a180) 16
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 488)
+
+Class QPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintDialog::QPrivateSignal (0x0x7f7de875a420) 0 empty
+
+Vtable for QPrintDialog
+QPrintDialog::_ZTV12QPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintDialog)
+16 (int (*)(...))QPrintDialog::metaObject
+24 (int (*)(...))QPrintDialog::qt_metacast
+32 (int (*)(...))QPrintDialog::qt_metacall
+40 (int (*)(...))QPrintDialog::~QPrintDialog
+48 (int (*)(...))QPrintDialog::~QPrintDialog
+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 (*)(...))QPrintDialog::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 (*)(...))QPrintDialog::exec
+448 (int (*)(...))QPrintDialog::done
+456 (int (*)(...))QPrintDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QPrintDialog)
+488 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD1Ev
+496 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD0Ev
+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 QPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintDialog (0x0x7f7de86fff70) 0
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 16)
+QAbstractPrintDialog (0x0x7f7de8384000) 0
+ primary-for QPrintDialog (0x0x7f7de86fff70)
+QDialog (0x0x7f7de8384068) 0
+ primary-for QAbstractPrintDialog (0x0x7f7de8384000)
+QWidget (0x0x7f7de83731c0) 0
+ primary-for QDialog (0x0x7f7de8384068)
+QObject (0x0x7f7de875a360) 0
+ primary-for QWidget (0x0x7f7de83731c0)
+QPaintDevice (0x0x7f7de875a3c0) 16
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 488)
+
+Vtable for QPrinter
+QPrinter::_ZTV8QPrinter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPrinter)
+16 (int (*)(...))QPrinter::~QPrinter
+24 (int (*)(...))QPrinter::~QPrinter
+32 (int (*)(...))QPrinter::devType
+40 (int (*)(...))QPrinter::paintEngine
+48 (int (*)(...))QPrinter::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPrinter::newPage
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPrinter
+ size=32 align=8
+ base size=32 base align=8
+QPrinter (0x0x7f7de83840d0) 0
+ vptr=((& QPrinter::_ZTV8QPrinter) + 16)
+QPagedPaintDevice (0x0x7f7de8384138) 0
+ primary-for QPrinter (0x0x7f7de83840d0)
+QPaintDevice (0x0x7f7de875a5a0) 0
+ primary-for QPagedPaintDevice (0x0x7f7de8384138)
+
+Vtable for QPrintEngine
+QPrintEngine::_ZTV12QPrintEngine: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintEngine)
+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 QPrintEngine
+ size=8 align=8
+ base size=8 base align=8
+QPrintEngine (0x0x7f7de875a8a0) 0 nearly-empty
+ vptr=((& QPrintEngine::_ZTV12QPrintEngine) + 16)
+
+Class QPrinterInfo
+ size=8 align=8
+ base size=8 base align=8
+QPrinterInfo (0x0x7f7de875aae0) 0
+
+Class QPrintPreviewDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewDialog::QPrivateSignal (0x0x7f7de875ad20) 0 empty
+
+Vtable for QPrintPreviewDialog
+QPrintPreviewDialog::_ZTV19QPrintPreviewDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+16 (int (*)(...))QPrintPreviewDialog::metaObject
+24 (int (*)(...))QPrintPreviewDialog::qt_metacast
+32 (int (*)(...))QPrintPreviewDialog::qt_metacall
+40 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+48 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+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 (*)(...))QPrintPreviewDialog::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 (*)(...))QPrintPreviewDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+488 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD1Ev
+496 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD0Ev
+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 QPrintPreviewDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewDialog (0x0x7f7de83841a0) 0
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 16)
+QDialog (0x0x7f7de8384208) 0
+ primary-for QPrintPreviewDialog (0x0x7f7de83841a0)
+QWidget (0x0x7f7de83c6a10) 0
+ primary-for QDialog (0x0x7f7de8384208)
+QObject (0x0x7f7de875ac60) 0
+ primary-for QWidget (0x0x7f7de83c6a10)
+QPaintDevice (0x0x7f7de875acc0) 16
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 488)
+
+Class QPrintPreviewWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewWidget::QPrivateSignal (0x0x7f7de875af60) 0 empty
+
+Vtable for QPrintPreviewWidget
+QPrintPreviewWidget::_ZTV19QPrintPreviewWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewWidget)
+16 (int (*)(...))QPrintPreviewWidget::metaObject
+24 (int (*)(...))QPrintPreviewWidget::qt_metacast
+32 (int (*)(...))QPrintPreviewWidget::qt_metacall
+40 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+48 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+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 (*)(...))QPrintPreviewWidget::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 (*)(...))(& _ZTI19QPrintPreviewWidget)
+448 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD1Ev
+456 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD0Ev
+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 QPrintPreviewWidget
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewWidget (0x0x7f7de8384270) 0
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 16)
+QWidget (0x0x7f7de83c6bd0) 0
+ primary-for QPrintPreviewWidget (0x0x7f7de8384270)
+QObject (0x0x7f7de875aea0) 0
+ primary-for QWidget (0x0x7f7de83c6bd0)
+QPaintDevice (0x0x7f7de875af00) 16
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 448)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f7de840a120) 0
+
+Class QJSNumberCoercion
+ size=8 align=8
+ base size=8 base align=8
+QJSNumberCoercion (0x0x7f7de8494180) 0
+
+Class QJSPrimitiveUndefined
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveUndefined (0x0x7f7de8494780) 0 empty
+
+Class QJSPrimitiveNull
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveNull (0x0x7f7de84947e0) 0 empty
+
+Class QJSPrimitiveValue::AddOperators
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveValue::AddOperators (0x0x7f7de8494900) 0 empty
+
+Class QJSPrimitiveValue::SubOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::SubOperators (0x0x7f7de83848f0) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::SubOperators> (0x0x7f7de84949c0) 0 empty
+
+Class QJSPrimitiveValue::MulOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::MulOperators (0x0x7f7de8384958) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::MulOperators> (0x0x7f7de8494a80) 0 empty
+
+Class QJSPrimitiveValue::DivOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::DivOperators (0x0x7f7de83849c0) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::DivOperators> (0x0x7f7de8494b40) 0 empty
+
+Class QJSPrimitiveValue::QJSPrimitiveValuePrivate
+ size=32 align=8
+ base size=25 base align=8
+QJSPrimitiveValue::QJSPrimitiveValuePrivate (0x0x7f7de8494ba0) 0
+
+Class QJSPrimitiveValue
+ size=32 align=8
+ base size=32 base align=8
+QJSPrimitiveValue (0x0x7f7de8494840) 0
+
+Class QJSManagedValue
+ size=8 align=8
+ base size=8 base align=8
+QJSManagedValue (0x0x7f7de81bf900) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f7de81bfc00) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f7de81bfea0) 0 empty
+
+Vtable for QJSEngine
+QJSEngine::_ZTV9QJSEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QJSEngine)
+16 (int (*)(...))QJSEngine::metaObject
+24 (int (*)(...))QJSEngine::qt_metacast
+32 (int (*)(...))QJSEngine::qt_metacall
+40 (int (*)(...))QJSEngine::~QJSEngine
+48 (int (*)(...))QJSEngine::~QJSEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QJSEngine
+ size=24 align=8
+ base size=24 base align=8
+QJSEngine (0x0x7f7de8538a90) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+QObject (0x0x7f7de81bfe40) 0
+ primary-for QJSEngine (0x0x7f7de8538a90)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f7de8222780) 0
+
+Vtable for QQmlParserStatus
+QQmlParserStatus::_ZTV16QQmlParserStatus: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlParserStatus)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlParserStatus
+ size=16 align=8
+ base size=16 base align=8
+QQmlParserStatus (0x0x7f7de8222960) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f7de828f480) 0
+
+Vtable for QQmlPropertyValueSource
+QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQmlPropertyValueSource)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlPropertyValueSource
+ size=8 align=8
+ base size=8 base align=8
+QQmlPropertyValueSource (0x0x7f7de828f660) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=176 align=8
+ base size=170 base align=8
+QQmlPrivate::RegisterType (0x0x7f7de82c4e40) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=152 align=8
+ base size=152 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7f7de82c4ea0) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f7de82c4f00) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f7de82c4f60) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f7de82ed000) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7f7de82ed360) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f7de82ed420) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f7de82ed480) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7f7de82ed4e0) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7f7de82ed540) 0
+
+Class QQmlPrivate::AOTCompiledContext
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::AOTCompiledContext (0x0x7f7de82ed5a0) 0
+
+Class QQmlPrivate::AOTCompiledFunction
+ size=48 align=8
+ base size=48 base align=8
+QQmlPrivate::AOTCompiledFunction (0x0x7f7de82ed600) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f7de82edea0) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f7de82edf00) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7f7de82edf60) 0
+
+Vtable for QQmlAbstractUrlInterceptor
+QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QQmlAbstractUrlInterceptor)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlAbstractUrlInterceptor
+ size=8 align=8
+ base size=8 base align=8
+QQmlAbstractUrlInterceptor (0x0x7f7de80dd000) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f7de80dd060) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7f7de810bae0) 0 empty
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 (int (*)(...))QQmlImageProviderBase::metaObject
+24 (int (*)(...))QQmlImageProviderBase::qt_metacast
+32 (int (*)(...))QQmlImageProviderBase::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 QQmlImageProviderBase
+ size=16 align=8
+ base size=16 base align=8
+QQmlImageProviderBase (0x0x7f7de810cd68) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+QObject (0x0x7f7de810ba80) 0
+ primary-for QQmlImageProviderBase (0x0x7f7de810cd68)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f7de810bf00) 0 empty
+
+Vtable for QQmlEngine
+QQmlEngine::_ZTV10QQmlEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQmlEngine)
+16 (int (*)(...))QQmlEngine::metaObject
+24 (int (*)(...))QQmlEngine::qt_metacast
+32 (int (*)(...))QQmlEngine::qt_metacall
+40 (int (*)(...))QQmlEngine::~QQmlEngine
+48 (int (*)(...))QQmlEngine::~QQmlEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngine (0x0x7f7de810cea0) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+QJSEngine (0x0x7f7de810cf08) 0
+ primary-for QQmlEngine (0x0x7f7de810cea0)
+QObject (0x0x7f7de810bea0) 0
+ primary-for QJSEngine (0x0x7f7de810cf08)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f7de7d79240) 0 empty
+
+Vtable for QQmlApplicationEngine
+QQmlApplicationEngine::_ZTV21QQmlApplicationEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlApplicationEngine)
+16 (int (*)(...))QQmlApplicationEngine::metaObject
+24 (int (*)(...))QQmlApplicationEngine::qt_metacast
+32 (int (*)(...))QQmlApplicationEngine::qt_metacall
+40 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+48 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlApplicationEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlApplicationEngine (0x0x7f7de810cf70) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+QQmlEngine (0x0x7f7de7d7e000) 0
+ primary-for QQmlApplicationEngine (0x0x7f7de810cf70)
+QJSEngine (0x0x7f7de7d7e068) 0
+ primary-for QQmlEngine (0x0x7f7de7d7e000)
+QObject (0x0x7f7de7d791e0) 0
+ primary-for QJSEngine (0x0x7f7de7d7e068)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f7de7d79420) 0 empty
+
+Vtable for QQmlComponent
+QQmlComponent::_ZTV13QQmlComponent: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlComponent)
+16 (int (*)(...))QQmlComponent::metaObject
+24 (int (*)(...))QQmlComponent::qt_metacast
+32 (int (*)(...))QQmlComponent::qt_metacall
+40 (int (*)(...))QQmlComponent::~QQmlComponent
+48 (int (*)(...))QQmlComponent::~QQmlComponent
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlComponent::create
+120 (int (*)(...))QQmlComponent::beginCreate
+128 (int (*)(...))QQmlComponent::completeCreate
+
+Class QQmlComponent
+ size=16 align=8
+ base size=16 base align=8
+QQmlComponent (0x0x7f7de7d7e0d0) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+QObject (0x0x7f7de7d793c0) 0
+ primary-for QQmlComponent (0x0x7f7de7d7e0d0)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f7de7d79a80) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7f7de7d79ae0) 0
+
+Vtable for QQmlContext
+QQmlContext::_ZTV11QQmlContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QQmlContext)
+16 (int (*)(...))QQmlContext::metaObject
+24 (int (*)(...))QQmlContext::qt_metacast
+32 (int (*)(...))QQmlContext::qt_metacall
+40 (int (*)(...))QQmlContext::~QQmlContext
+48 (int (*)(...))QQmlContext::~QQmlContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlContext
+ size=16 align=8
+ base size=16 base align=8
+QQmlContext (0x0x7f7de7d7e138) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+QObject (0x0x7f7de7d79a20) 0
+ primary-for QQmlContext (0x0x7f7de7d7e138)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f7de7d79d80) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f7de7df2000) 0 empty
+
+Vtable for QQmlExpression
+QQmlExpression::_ZTV14QQmlExpression: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QQmlExpression)
+16 (int (*)(...))QQmlExpression::metaObject
+24 (int (*)(...))QQmlExpression::qt_metacast
+32 (int (*)(...))QQmlExpression::qt_metacall
+40 (int (*)(...))QQmlExpression::~QQmlExpression
+48 (int (*)(...))QQmlExpression::~QQmlExpression
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlExpression
+ size=16 align=8
+ base size=16 base align=8
+QQmlExpression (0x0x7f7de7d7e1a0) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+QObject (0x0x7f7de7d79f60) 0
+ primary-for QQmlExpression (0x0x7f7de7d7e1a0)
+
+Vtable for QQmlTypesExtensionInterface
+QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QQmlTypesExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlTypesExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlTypesExtensionInterface (0x0x7f7de7df2180) 0 nearly-empty
+ vptr=((& QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface) + 16)
+
+Vtable for QQmlExtensionInterface
+QQmlExtensionInterface::_ZTV22QQmlExtensionInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QQmlExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlExtensionInterface (0x0x7f7de7d7e208) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+QQmlTypesExtensionInterface (0x0x7f7de7df21e0) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f7de7d7e208)
+
+Vtable for QQmlEngineExtensionInterface
+QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QQmlEngineExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlEngineExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlEngineExtensionInterface (0x0x7f7de7df2240) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f7de7df27e0) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+16 (int (*)(...))QQmlExtensionPlugin::metaObject
+24 (int (*)(...))QQmlExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlExtensionPlugin::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 (*)(...))QQmlExtensionPlugin::unregisterTypes
+128 (int (*)(...))QQmlExtensionPlugin::initializeEngine
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+152 0
+160 0
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7f7de7dade70) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+QObject (0x0x7f7de7df2720) 0
+ primary-for QQmlExtensionPlugin (0x0x7f7de7dade70)
+QQmlExtensionInterface (0x0x7f7de7d7e270) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+QQmlTypesExtensionInterface (0x0x7f7de7df2780) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f7de7d7e270)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7f7de7df2a20) 0 empty
+
+Vtable for QQmlEngineExtensionPlugin
+QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+16 (int (*)(...))QQmlEngineExtensionPlugin::metaObject
+24 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacall
+40 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+48 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlEngineExtensionPlugin::initializeEngine
+120 (int (*)(...))-16
+128 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+136 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD1Ev
+144 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD0Ev
+152 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlEngineExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngineExtensionPlugin (0x0x7f7de7dad4d0) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+QObject (0x0x7f7de7df2960) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7f7de7dad4d0)
+QQmlEngineExtensionInterface (0x0x7f7de7df29c0) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f7de7df2ae0) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f7de7df2ba0) 0 empty
+
+Vtable for QQmlFileSelector
+QQmlFileSelector::_ZTV16QQmlFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlFileSelector)
+16 (int (*)(...))QQmlFileSelector::metaObject
+24 (int (*)(...))QQmlFileSelector::qt_metacast
+32 (int (*)(...))QQmlFileSelector::qt_metacall
+40 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+48 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QQmlFileSelector (0x0x7f7de7d7e340) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+QObject (0x0x7f7de7df2b40) 0
+ primary-for QQmlFileSelector (0x0x7f7de7d7e340)
+
+Vtable for QQmlIncubator
+QQmlIncubator::_ZTV13QQmlIncubator: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlIncubator)
+16 (int (*)(...))QQmlIncubator::~QQmlIncubator
+24 (int (*)(...))QQmlIncubator::~QQmlIncubator
+32 (int (*)(...))QQmlIncubator::statusChanged
+40 (int (*)(...))QQmlIncubator::setInitialState
+
+Class QQmlIncubator
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubator (0x0x7f7de7df2d20) 0
+ vptr=((& QQmlIncubator::_ZTV13QQmlIncubator) + 16)
+
+Vtable for QQmlIncubationController
+QQmlIncubationController::_ZTV24QQmlIncubationController: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQmlIncubationController)
+16 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+24 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+32 (int (*)(...))QQmlIncubationController::incubatingObjectCountChanged
+
+Class QQmlIncubationController
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubationController (0x0x7f7de7df2d80) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f7de7d7e3a8) 0
+QDebug (0x0x7f7de7d7e410) 0
+QIODeviceBase (0x0x7f7de7df2de0) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7f7de7ecbe40) 0
+
+Vtable for QQmlNetworkAccessManagerFactory
+QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QQmlNetworkAccessManagerFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlNetworkAccessManagerFactory
+ size=8 align=8
+ base size=8 base align=8
+QQmlNetworkAccessManagerFactory (0x0x7f7de7ecbea0) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f7de7ecbf00) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f7de7f5d240) 0 empty
+
+Vtable for QQmlPropertyMap
+QQmlPropertyMap::_ZTV15QQmlPropertyMap: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQmlPropertyMap)
+16 (int (*)(...))QQmlPropertyMap::metaObject
+24 (int (*)(...))QQmlPropertyMap::qt_metacast
+32 (int (*)(...))QQmlPropertyMap::qt_metacall
+40 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+48 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlPropertyMap::updateValue
+
+Class QQmlPropertyMap
+ size=16 align=8
+ base size=16 base align=8
+QQmlPropertyMap (0x0x7f7de7f57548) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+QObject (0x0x7f7de7f5d1e0) 0
+ primary-for QQmlPropertyMap (0x0x7f7de7f57548)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f7de7f5d480) 0 empty
+
+Vtable for QQuickTransform
+QQuickTransform::_ZTV15QQuickTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQuickTransform)
+16 (int (*)(...))QQuickTransform::metaObject
+24 (int (*)(...))QQuickTransform::qt_metacast
+32 (int (*)(...))QQuickTransform::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 QQuickTransform
+ size=16 align=8
+ base size=16 base align=8
+QQuickTransform (0x0x7f7de7f575b0) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+QObject (0x0x7f7de7f5d420) 0
+ primary-for QQuickTransform (0x0x7f7de7f575b0)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f7de7f5d6c0) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f7de7f5d720) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f7de7f5d780) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickItem)
+16 (int (*)(...))QQuickItem::metaObject
+24 (int (*)(...))QQuickItem::qt_metacast
+32 (int (*)(...))QQuickItem::qt_metacall
+40 (int (*)(...))QQuickItem::~QQuickItem
+48 (int (*)(...))QQuickItem::~QQuickItem
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickItem::isTextureProvider
+152 (int (*)(...))QQuickItem::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickItem::updatePaintNode
+368 (int (*)(...))QQuickItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))-16
+392 (int (*)(...))(& _ZTI10QQuickItem)
+400 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7f7de7ed1ee0) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+QObject (0x0x7f7de7f5d600) 0
+ primary-for QQuickItem (0x0x7f7de7ed1ee0)
+QQmlParserStatus (0x0x7f7de7f5d660) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 400)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f7de7be3900) 0 empty
+
+Vtable for QQuickFramebufferObject::Renderer
+QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN23QQuickFramebufferObject8RendererE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QQuickFramebufferObject::Renderer::createFramebufferObject
+48 (int (*)(...))QQuickFramebufferObject::Renderer::synchronize
+
+Class QQuickFramebufferObject::Renderer
+ size=16 align=8
+ base size=16 base align=8
+QQuickFramebufferObject::Renderer (0x0x7f7de7be3960) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+16 (int (*)(...))QQuickFramebufferObject::metaObject
+24 (int (*)(...))QQuickFramebufferObject::qt_metacast
+32 (int (*)(...))QQuickFramebufferObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickFramebufferObject::isTextureProvider
+152 (int (*)(...))QQuickFramebufferObject::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickFramebufferObject::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+368 (int (*)(...))QQuickFramebufferObject::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7f7de7f576e8) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+QQuickItem (0x0x7f7de7be2930) 0
+ primary-for QQuickFramebufferObject (0x0x7f7de7f576e8)
+QObject (0x0x7f7de7be3840) 0
+ primary-for QQuickItem (0x0x7f7de7be2930)
+QQmlParserStatus (0x0x7f7de7be38a0) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 408)
+
+Class QQuickGraphicsConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsConfiguration (0x0x7f7de7be3ae0) 0
+
+Class QQuickGraphicsDevice
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsDevice (0x0x7f7de7be3b40) 0
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f7de7be3c00) 0 empty
+
+Vtable for QQuickTextureFactory
+QQuickTextureFactory::_ZTV20QQuickTextureFactory: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickTextureFactory)
+16 (int (*)(...))QQuickTextureFactory::metaObject
+24 (int (*)(...))QQuickTextureFactory::qt_metacast
+32 (int (*)(...))QQuickTextureFactory::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 (*)(...))QQuickTextureFactory::image
+
+Class QQuickTextureFactory
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextureFactory (0x0x7f7de7f57750) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+QObject (0x0x7f7de7be3ba0) 0
+ primary-for QQuickTextureFactory (0x0x7f7de7f57750)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f7de7be3d20) 0 empty
+
+Vtable for QQuickImageResponse
+QQuickImageResponse::_ZTV19QQuickImageResponse: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageResponse)
+16 (int (*)(...))QQuickImageResponse::metaObject
+24 (int (*)(...))QQuickImageResponse::qt_metacast
+32 (int (*)(...))QQuickImageResponse::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 (*)(...))QQuickImageResponse::errorString
+128 (int (*)(...))QQuickImageResponse::cancel
+
+Class QQuickImageResponse
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageResponse (0x0x7f7de7f577b8) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+QObject (0x0x7f7de7be3cc0) 0
+ primary-for QQuickImageResponse (0x0x7f7de7f577b8)
+
+Class QQuickImageProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageProvider::QPrivateSignal (0x0x7f7de7be3f00) 0 empty
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::qt_metacall
+40 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+48 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickImageProvider (0x0x7f7de7f57820) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+QQmlImageProviderBase (0x0x7f7de7f57888) 0
+ primary-for QQuickImageProvider (0x0x7f7de7f57820)
+QObject (0x0x7f7de7be3ea0) 0
+ primary-for QQmlImageProviderBase (0x0x7f7de7f57888)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::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 (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=32 align=8
+ base size=32 base align=8
+QQuickAsyncImageProvider (0x0x7f7de7f578f0) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+QQuickImageProvider (0x0x7f7de7f57958) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f7de7f578f0)
+QQmlImageProviderBase (0x0x7f7de7f579c0) 0
+ primary-for QQuickImageProvider (0x0x7f7de7f57958)
+QObject (0x0x7f7de7c55000) 0
+ primary-for QQmlImageProviderBase (0x0x7f7de7f579c0)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f7de7c550c0) 0 empty
+
+Vtable for QQuickItemGrabResult
+QQuickItemGrabResult::_ZTV20QQuickItemGrabResult: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickItemGrabResult)
+16 (int (*)(...))QQuickItemGrabResult::metaObject
+24 (int (*)(...))QQuickItemGrabResult::qt_metacast
+32 (int (*)(...))QQuickItemGrabResult::qt_metacall
+40 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+48 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+56 (int (*)(...))QQuickItemGrabResult::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickItemGrabResult
+ size=16 align=8
+ base size=16 base align=8
+QQuickItemGrabResult (0x0x7f7de7f57a28) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+QObject (0x0x7f7de7c55060) 0
+ primary-for QQuickItemGrabResult (0x0x7f7de7f57a28)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f7de7c55300) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+16 (int (*)(...))QQuickPaintedItem::metaObject
+24 (int (*)(...))QQuickPaintedItem::qt_metacast
+32 (int (*)(...))QQuickPaintedItem::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickPaintedItem::isTextureProvider
+152 (int (*)(...))QQuickPaintedItem::textureProvider
+160 (int (*)(...))QQuickPaintedItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickPaintedItem::updatePaintNode
+368 (int (*)(...))QQuickPaintedItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7f7de7f57a90) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+QQuickItem (0x0x7f7de7be2e70) 0
+ primary-for QQuickPaintedItem (0x0x7f7de7f57a90)
+QObject (0x0x7f7de7c55240) 0
+ primary-for QQuickItem (0x0x7f7de7be2e70)
+QQmlParserStatus (0x0x7f7de7c552a0) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 408)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f7de7c55960) 0 empty
+
+Vtable for QQuickRenderControl
+QQuickRenderControl::_ZTV19QQuickRenderControl: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickRenderControl)
+16 (int (*)(...))QQuickRenderControl::metaObject
+24 (int (*)(...))QQuickRenderControl::qt_metacast
+32 (int (*)(...))QQuickRenderControl::qt_metacall
+40 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+48 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickRenderControl::renderWindow
+
+Class QQuickRenderControl
+ size=16 align=8
+ base size=16 base align=8
+QQuickRenderControl (0x0x7f7de7f57bc8) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+QObject (0x0x7f7de7c55900) 0
+ primary-for QQuickRenderControl (0x0x7f7de7f57bc8)
+
+Class QQuickRenderTarget
+ size=8 align=8
+ base size=8 base align=8
+QQuickRenderTarget (0x0x7f7de7c55b40) 0
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f7de7c55cc0) 0 empty
+
+Vtable for QQuickTextDocument
+QQuickTextDocument::_ZTV18QQuickTextDocument: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QQuickTextDocument)
+16 (int (*)(...))QQuickTextDocument::metaObject
+24 (int (*)(...))QQuickTextDocument::qt_metacast
+32 (int (*)(...))QQuickTextDocument::qt_metacall
+40 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+48 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextDocument (0x0x7f7de7f57c30) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+QObject (0x0x7f7de7c55c60) 0
+ primary-for QQuickTextDocument (0x0x7f7de7f57c30)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f7de7ce1120) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f7de7ce1180) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f7de7ce11e0) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f7de7ce1240) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f7de7ce12a0) 0
+
+Vtable for QSGGeometry
+QSGGeometry::_ZTV11QSGGeometry: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGGeometry)
+16 (int (*)(...))QSGGeometry::~QSGGeometry
+24 (int (*)(...))QSGGeometry::~QSGGeometry
+
+Class QSGGeometry
+ size=128 align=8
+ base size=128 base align=8
+QSGGeometry (0x0x7f7de7ce10c0) 0
+ vptr=((& QSGGeometry::_ZTV11QSGGeometry) + 16)
+
+Vtable for QSGNode
+QSGNode::_ZTV7QSGNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSGNode)
+16 (int (*)(...))QSGNode::~QSGNode
+24 (int (*)(...))QSGNode::~QSGNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGNode
+ size=72 align=8
+ base size=72 base align=8
+QSGNode (0x0x7f7de7ce1c60) 0
+ vptr=((& QSGNode::_ZTV7QSGNode) + 16)
+
+Vtable for QSGBasicGeometryNode
+QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGBasicGeometryNode)
+16 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+24 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGBasicGeometryNode
+ size=104 align=8
+ base size=104 base align=8
+QSGBasicGeometryNode (0x0x7f7de7f57e38) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+QSGNode (0x0x7f7de7d634e0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f7de7f57e38)
+
+Vtable for QSGGeometryNode
+QSGGeometryNode::_ZTV15QSGGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSGGeometryNode)
+16 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+24 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGGeometryNode
+ size=136 align=8
+ base size=136 base align=8
+QSGGeometryNode (0x0x7f7de7f57ea0) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+QSGBasicGeometryNode (0x0x7f7de7f57f08) 0
+ primary-for QSGGeometryNode (0x0x7f7de7f57ea0)
+QSGNode (0x0x7f7de7d63780) 0
+ primary-for QSGBasicGeometryNode (0x0x7f7de7f57f08)
+
+Vtable for QSGClipNode
+QSGClipNode::_ZTV11QSGClipNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGClipNode)
+16 (int (*)(...))QSGClipNode::~QSGClipNode
+24 (int (*)(...))QSGClipNode::~QSGClipNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGClipNode
+ size=144 align=8
+ base size=144 base align=8
+QSGClipNode (0x0x7f7de7f57f70) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+QSGBasicGeometryNode (0x0x7f7de7991000) 0
+ primary-for QSGClipNode (0x0x7f7de7f57f70)
+QSGNode (0x0x7f7de7d63960) 0
+ primary-for QSGBasicGeometryNode (0x0x7f7de7991000)
+
+Vtable for QSGTransformNode
+QSGTransformNode::_ZTV16QSGTransformNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGTransformNode)
+16 (int (*)(...))QSGTransformNode::~QSGTransformNode
+24 (int (*)(...))QSGTransformNode::~QSGTransformNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGTransformNode
+ size=208 align=8
+ base size=208 base align=8
+QSGTransformNode (0x0x7f7de7991068) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+QSGNode (0x0x7f7de7d63a80) 0
+ primary-for QSGTransformNode (0x0x7f7de7991068)
+
+Vtable for QSGRootNode
+QSGRootNode::_ZTV11QSGRootNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGRootNode)
+16 (int (*)(...))QSGRootNode::~QSGRootNode
+24 (int (*)(...))QSGRootNode::~QSGRootNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGRootNode
+ size=96 align=8
+ base size=96 base align=8
+QSGRootNode (0x0x7f7de79910d0) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+QSGNode (0x0x7f7de7d63ba0) 0
+ primary-for QSGRootNode (0x0x7f7de79910d0)
+
+Vtable for QSGOpacityNode
+QSGOpacityNode::_ZTV14QSGOpacityNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGOpacityNode)
+16 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+24 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+32 (int (*)(...))QSGOpacityNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGOpacityNode
+ size=88 align=8
+ base size=88 base align=8
+QSGOpacityNode (0x0x7f7de7991820) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+QSGNode (0x0x7f7de79aa480) 0
+ primary-for QSGOpacityNode (0x0x7f7de7991820)
+
+Vtable for QSGNodeVisitor
+QSGNodeVisitor::_ZTV14QSGNodeVisitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGNodeVisitor)
+16 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+24 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+32 (int (*)(...))QSGNodeVisitor::enterTransformNode
+40 (int (*)(...))QSGNodeVisitor::leaveTransformNode
+48 (int (*)(...))QSGNodeVisitor::enterClipNode
+56 (int (*)(...))QSGNodeVisitor::leaveClipNode
+64 (int (*)(...))QSGNodeVisitor::enterGeometryNode
+72 (int (*)(...))QSGNodeVisitor::leaveGeometryNode
+80 (int (*)(...))QSGNodeVisitor::enterOpacityNode
+88 (int (*)(...))QSGNodeVisitor::leaveOpacityNode
+96 (int (*)(...))QSGNodeVisitor::visitNode
+104 (int (*)(...))QSGNodeVisitor::visitChildren
+
+Class QSGNodeVisitor
+ size=8 align=8
+ base size=8 base align=8
+QSGNodeVisitor (0x0x7f7de79aa5a0) 0 nearly-empty
+ vptr=((& QSGNodeVisitor::_ZTV14QSGNodeVisitor) + 16)
+
+Vtable for QSGRendererInterface
+QSGRendererInterface::_ZTV20QSGRendererInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGRendererInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QSGRendererInterface::getResource
+48 (int (*)(...))QSGRendererInterface::getResource
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRendererInterface
+ size=8 align=8
+ base size=8 base align=8
+QSGRendererInterface (0x0x7f7de79aab40) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f7de7aad240) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7f7de7aad2a0) 0
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QQuickWindow)
+16 (int (*)(...))QQuickWindow::metaObject
+24 (int (*)(...))QQuickWindow::qt_metacast
+32 (int (*)(...))QQuickWindow::qt_metacall
+40 (int (*)(...))QQuickWindow::~QQuickWindow
+48 (int (*)(...))QQuickWindow::~QQuickWindow
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickWindow::keyPressEvent
+232 (int (*)(...))QQuickWindow::keyReleaseEvent
+240 (int (*)(...))QQuickWindow::mousePressEvent
+248 (int (*)(...))QQuickWindow::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickWindow::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI12QQuickWindow)
+328 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+336 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7f7de7991a28) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+QWindow (0x0x7f7de7a7b2a0) 0
+ primary-for QQuickWindow (0x0x7f7de7991a28)
+QObject (0x0x7f7de7aad180) 0
+ primary-for QWindow (0x0x7f7de7a7b2a0)
+QSurface (0x0x7f7de7aad1e0) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 328)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f7de7aada20) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickView)
+16 (int (*)(...))QQuickView::metaObject
+24 (int (*)(...))QQuickView::qt_metacast
+32 (int (*)(...))QQuickView::qt_metacall
+40 (int (*)(...))QQuickView::~QQuickView
+48 (int (*)(...))QQuickView::~QQuickView
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QQuickView::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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickView::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickView::keyPressEvent
+232 (int (*)(...))QQuickView::keyReleaseEvent
+240 (int (*)(...))QQuickView::mousePressEvent
+248 (int (*)(...))QQuickView::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickView::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI10QQuickView)
+328 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+336 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7f7de7991b60) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+QQuickWindow (0x0x7f7de7991bc8) 0
+ primary-for QQuickView (0x0x7f7de7991b60)
+QWindow (0x0x7f7de7a7be70) 0
+ primary-for QQuickWindow (0x0x7f7de7991bc8)
+QObject (0x0x7f7de7aad960) 0
+ primary-for QWindow (0x0x7f7de7a7be70)
+QSurface (0x0x7f7de7aad9c0) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 328)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f7de7aadd20) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f7de7aadde0) 0
+
+Class QSGMaterialShader::GraphicsPipelineState
+ size=36 align=4
+ base size=36 base align=4
+QSGMaterialShader::GraphicsPipelineState (0x0x7f7de7b4f060) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+24 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+32 (int (*)(...))QSGMaterialShader::updateUniformData
+40 (int (*)(...))QSGMaterialShader::updateSampledImage
+48 (int (*)(...))QSGMaterialShader::updateGraphicsPipelineState
+
+Class QSGMaterialShader
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader (0x0x7f7de7aadd80) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16)
+
+Vtable for QSGMaterial
+QSGMaterial::_ZTV11QSGMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGMaterial)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QSGMaterial::compare
+
+Class QSGMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGMaterial (0x0x7f7de7b4fba0) 0
+ vptr=((& QSGMaterial::_ZTV11QSGMaterial) + 16)
+
+Vtable for QSGFlatColorMaterial
+QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGFlatColorMaterial)
+16 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+24 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+32 (int (*)(...))QSGFlatColorMaterial::type
+40 (int (*)(...))QSGFlatColorMaterial::createShader
+48 (int (*)(...))QSGFlatColorMaterial::compare
+
+Class QSGFlatColorMaterial
+ size=40 align=8
+ base size=40 base align=8
+QSGFlatColorMaterial (0x0x7f7de7991f70) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+QSGMaterial (0x0x7f7de7b4ff60) 0
+ primary-for QSGFlatColorMaterial (0x0x7f7de7991f70)
+
+Vtable for QNativeInterface::QSGOpenGLTexture
+QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGOpenGLTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGOpenGLTexture (0x0x7f7de7864060) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE) + 16)
+
+Vtable for QNativeInterface::QSGVulkanTexture
+QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGVulkanTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGVulkanTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGVulkanTexture (0x0x7f7de7864120) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE) + 16)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f7de7864240) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSGTexture)
+16 (int (*)(...))QSGTexture::metaObject
+24 (int (*)(...))QSGTexture::qt_metacast
+32 (int (*)(...))QSGTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7f7de79917b8) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+QObject (0x0x7f7de78641e0) 0
+ primary-for QSGTexture (0x0x7f7de79917b8)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f7de7864480) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGDynamicTexture)
+16 (int (*)(...))QSGDynamicTexture::metaObject
+24 (int (*)(...))QSGDynamicTexture::qt_metacast
+32 (int (*)(...))QSGDynamicTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7f7de7883000) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+QSGTexture (0x0x7f7de7883068) 0
+ primary-for QSGDynamicTexture (0x0x7f7de7883000)
+QObject (0x0x7f7de7864420) 0
+ primary-for QSGTexture (0x0x7f7de7883068)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSGImageNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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
+
+Class QSGImageNode
+ size=136 align=8
+ base size=136 base align=8
+QSGImageNode (0x0x7f7de78830d0) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+QSGGeometryNode (0x0x7f7de7883138) 0
+ primary-for QSGImageNode (0x0x7f7de78830d0)
+QSGBasicGeometryNode (0x0x7f7de78831a0) 0
+ primary-for QSGGeometryNode (0x0x7f7de7883138)
+QSGNode (0x0x7f7de7864540) 0
+ primary-for QSGBasicGeometryNode (0x0x7f7de78831a0)
+
+Vtable for QSGNinePatchNode
+QSGNinePatchNode::_ZTV16QSGNinePatchNode: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGNinePatchNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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 QSGNinePatchNode
+ size=136 align=8
+ base size=136 base align=8
+QSGNinePatchNode (0x0x7f7de78832d8) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+QSGGeometryNode (0x0x7f7de7883340) 0
+ primary-for QSGNinePatchNode (0x0x7f7de78832d8)
+QSGBasicGeometryNode (0x0x7f7de78833a8) 0
+ primary-for QSGGeometryNode (0x0x7f7de7883340)
+QSGNode (0x0x7f7de7864960) 0
+ primary-for QSGBasicGeometryNode (0x0x7f7de78833a8)
+
+Vtable for QSGRectangleNode
+QSGRectangleNode::_ZTV16QSGRectangleNode: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGRectangleNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRectangleNode
+ size=136 align=8
+ base size=136 base align=8
+QSGRectangleNode (0x0x7f7de7883410) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+QSGGeometryNode (0x0x7f7de7883478) 0
+ primary-for QSGRectangleNode (0x0x7f7de7883410)
+QSGBasicGeometryNode (0x0x7f7de78834e0) 0
+ primary-for QSGGeometryNode (0x0x7f7de7883478)
+QSGNode (0x0x7f7de78649c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f7de78834e0)
+
+Vtable for QSGRenderNode::RenderState
+QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QSGRenderNode11RenderStateE)
+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 (*)(...))QSGRenderNode::RenderState::get
+
+Class QSGRenderNode::RenderState
+ size=8 align=8
+ base size=8 base align=8
+QSGRenderNode::RenderState (0x0x7f7de7864ae0) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSGRenderNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))QSGRenderNode::changedStates
+56 (int (*)(...))QSGRenderNode::prepare
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QSGRenderNode::releaseResources
+80 (int (*)(...))QSGRenderNode::flags
+88 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=80 align=8
+ base size=80 base align=8
+QSGRenderNode (0x0x7f7de7883548) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+QSGNode (0x0x7f7de7864a80) 0
+ primary-for QSGRenderNode (0x0x7f7de7883548)
+
+Vtable for QSGSimpleRectNode
+QSGSimpleRectNode::_ZTV17QSGSimpleRectNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGSimpleRectNode)
+16 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+24 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleRectNode
+ size=312 align=8
+ base size=312 base align=8
+QSGSimpleRectNode (0x0x7f7de7883750) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+QSGGeometryNode (0x0x7f7de78837b8) 0
+ primary-for QSGSimpleRectNode (0x0x7f7de7883750)
+QSGBasicGeometryNode (0x0x7f7de7883820) 0
+ primary-for QSGGeometryNode (0x0x7f7de78837b8)
+QSGNode (0x0x7f7de7934180) 0
+ primary-for QSGBasicGeometryNode (0x0x7f7de7883820)
+
+Vtable for QSGOpaqueTextureMaterial
+QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QSGOpaqueTextureMaterial)
+16 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+24 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+32 (int (*)(...))QSGOpaqueTextureMaterial::type
+40 (int (*)(...))QSGOpaqueTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGOpaqueTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGOpaqueTextureMaterial (0x0x7f7de7883888) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+QSGMaterial (0x0x7f7de7934240) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f7de7883888)
+
+Vtable for QSGTextureMaterial
+QSGTextureMaterial::_ZTV18QSGTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureMaterial)
+16 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+24 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+32 (int (*)(...))QSGTextureMaterial::type
+40 (int (*)(...))QSGTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGTextureMaterial (0x0x7f7de78838f0) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+QSGOpaqueTextureMaterial (0x0x7f7de7883958) 0
+ primary-for QSGTextureMaterial (0x0x7f7de78838f0)
+QSGMaterial (0x0x7f7de79346c0) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f7de7883958)
+
+Vtable for QSGSimpleTextureNode
+QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGSimpleTextureNode)
+16 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+24 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleTextureNode
+ size=376 align=8
+ base size=376 base align=8
+QSGSimpleTextureNode (0x0x7f7de78839c0) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+QSGGeometryNode (0x0x7f7de7883a28) 0
+ primary-for QSGSimpleTextureNode (0x0x7f7de78839c0)
+QSGBasicGeometryNode (0x0x7f7de7883a90) 0
+ primary-for QSGGeometryNode (0x0x7f7de7883a28)
+QSGNode (0x0x7f7de7934720) 0
+ primary-for QSGBasicGeometryNode (0x0x7f7de7883a90)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f7de7934de0) 0 empty
+
+Vtable for QSGTextureProvider
+QSGTextureProvider::_ZTV18QSGTextureProvider: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureProvider)
+16 (int (*)(...))QSGTextureProvider::metaObject
+24 (int (*)(...))QSGTextureProvider::qt_metacast
+32 (int (*)(...))QSGTextureProvider::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 QSGTextureProvider
+ size=16 align=8
+ base size=16 base align=8
+QSGTextureProvider (0x0x7f7de7883bc8) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+QObject (0x0x7f7de7934d80) 0
+ primary-for QSGTextureProvider (0x0x7f7de7883bc8)
+
+Vtable for QSGVertexColorMaterial
+QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QSGVertexColorMaterial)
+16 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+24 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+32 (int (*)(...))QSGVertexColorMaterial::type
+40 (int (*)(...))QSGVertexColorMaterial::createShader
+48 (int (*)(...))QSGVertexColorMaterial::compare
+
+Class QSGVertexColorMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGVertexColorMaterial (0x0x7f7de7883c30) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+QSGMaterial (0x0x7f7de7934ea0) 0
+ primary-for QSGVertexColorMaterial (0x0x7f7de7883c30)
+
+Class QAbstractItemModelTester::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModelTester::QPrivateSignal (0x0x7f7de7934f60) 0 empty
+
+Vtable for QAbstractItemModelTester
+QAbstractItemModelTester::_ZTV24QAbstractItemModelTester: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractItemModelTester)
+16 (int (*)(...))QAbstractItemModelTester::metaObject
+24 (int (*)(...))QAbstractItemModelTester::qt_metacast
+32 (int (*)(...))QAbstractItemModelTester::qt_metacall
+40 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+48 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAbstractItemModelTester
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModelTester (0x0x7f7de7883c98) 0
+ vptr=((& QAbstractItemModelTester::_ZTV24QAbstractItemModelTester) + 16)
+QObject (0x0x7f7de7934f00) 0
+ primary-for QAbstractItemModelTester (0x0x7f7de7883c98)
+
+Class QTest::QBenchmarkIterationController
+ size=4 align=4
+ base size=4 base align=4
+QTest::QBenchmarkIterationController (0x0x7f7de75de180) 0
+
+Class QTestEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTestEventLoop::QPrivateSignal (0x0x7f7de75de240) 0 empty
+
+Vtable for QTestEventLoop
+QTestEventLoop::_ZTV14QTestEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTestEventLoop)
+16 (int (*)(...))QTestEventLoop::metaObject
+24 (int (*)(...))QTestEventLoop::qt_metacast
+32 (int (*)(...))QTestEventLoop::qt_metacall
+40 (int (*)(...))QTestEventLoop::~QTestEventLoop
+48 (int (*)(...))QTestEventLoop::~QTestEventLoop
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTestEventLoop::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTestEventLoop
+ size=32 align=8
+ base size=32 base align=8
+QTestEventLoop (0x0x7f7de7883d00) 0
+ vptr=((& QTestEventLoop::_ZTV14QTestEventLoop) + 16)
+QObject (0x0x7f7de75de1e0) 0
+ primary-for QTestEventLoop (0x0x7f7de7883d00)
+
+Vtable for QSignalSpy
+QSignalSpy::_ZTV10QSignalSpy: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSignalSpy)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QSignalSpy::qt_metacall
+40 (int (*)(...))QSignalSpy::~QSignalSpy
+48 (int (*)(...))QSignalSpy::~QSignalSpy
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalSpy
+ size=128 align=8
+ base size=121 base align=8
+QSignalSpy (0x0x7f7de75f2700) 0
+ vptr=((& QSignalSpy::_ZTV10QSignalSpy) + 16)
+QObject (0x0x7f7de762d6c0) 0
+ primary-for QSignalSpy (0x0x7f7de75f2700)
+QList<QList<QVariant> > (0x0x7f7de76158f0) 16
+QListSpecialMethods<QList<QVariant> > (0x0x7f7de7615958) 16 empty
+QListSpecialMethodsBase<QList<QVariant> > (0x0x7f7de762d720) 16 empty
+
+Class QTestData
+ size=8 align=8
+ base size=8 base align=8
+QTestData (0x0x7f7de736c300) 0
+
+Class QTest::Internal::QCborValueFormatter
+ size=1 align=1
+ base size=0 base align=1
+QTest::Internal::QCborValueFormatter (0x0x7f7de740ae40) 0 empty
+
+Vtable for QSvgGenerator
+QSvgGenerator::_ZTV13QSvgGenerator: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSvgGenerator)
+16 (int (*)(...))QSvgGenerator::~QSvgGenerator
+24 (int (*)(...))QSvgGenerator::~QSvgGenerator
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))QSvgGenerator::paintEngine
+48 (int (*)(...))QSvgGenerator::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QSvgGenerator
+ size=24 align=8
+ base size=24 base align=8
+QSvgGenerator (0x0x7f7de71b8b60) 0
+ vptr=((& QSvgGenerator::_ZTV13QSvgGenerator) + 16)
+QPaintDevice (0x0x7f7de720af60) 0
+ primary-for QSvgGenerator (0x0x7f7de71b8b60)
+
+Class QSvgRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSvgRenderer::QPrivateSignal (0x0x7f7de72341e0) 0 empty
+
+Vtable for QSvgRenderer
+QSvgRenderer::_ZTV12QSvgRenderer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSvgRenderer)
+16 (int (*)(...))QSvgRenderer::metaObject
+24 (int (*)(...))QSvgRenderer::qt_metacast
+32 (int (*)(...))QSvgRenderer::qt_metacall
+40 (int (*)(...))QSvgRenderer::~QSvgRenderer
+48 (int (*)(...))QSvgRenderer::~QSvgRenderer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSvgRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSvgRenderer (0x0x7f7de71b8bc8) 0
+ vptr=((& QSvgRenderer::_ZTV12QSvgRenderer) + 16)
+QObject (0x0x7f7de7234180) 0
+ primary-for QSvgRenderer (0x0x7f7de71b8bc8)
+
diff --git a/tests/auto/bic/data/qt.6.2.0.linux-gcc-amd64.txt b/tests/auto/bic/data/qt.6.2.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..b3720868a4
--- /dev/null
+++ b/tests/auto/bic/data/qt.6.2.0.linux-gcc-amd64.txt
@@ -0,0 +1,26901 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f53d2014780) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f53d20696c0) 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 (0x0x7f53d2069900) 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 (0x0x7f53cf49a7e0) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f53cf4f71e0) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f53cf549ba0) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f53cf580180) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f53cf5801e0) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f53cf580240) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f53cf5802a0) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f53cf580300) 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 (0x0x7f53cf5803c0) 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 (0x0x7f53cf580480) 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 (0x0x7f53cf580540) 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 (0x0x7f53cf580600) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f53cf580960) 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 (0x0x7f53cf580cc0) 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 (0x0x7f53cf580d20) 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 (0x0x7f53cf5ca000) 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 (0x0x7f53cf5ca060) 0 empty
+
+Class std::__nonesuchbase
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuchbase (0x0x7f53cf5ca960) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch (0x0x7f53cf5db208) 0 empty
+std::__nonesuchbase (0x0x7f53cf5ca9c0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f53cf61cf60) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f53cf2c9180) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f53cf2c9360) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f53cf2c93c0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f53cf32fa80) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f53cf32fae0) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f53cf5dbf08) 0 empty
+std::input_iterator_tag (0x0x7f53cf32fb40) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f53cf5dbf70) 0 empty
+std::forward_iterator_tag (0x0x7f53cf353000) 0 empty
+std::input_iterator_tag (0x0x7f53cf32fba0) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f53cf353068) 0 empty
+std::bidirectional_iterator_tag (0x0x7f53cf3530d0) 0 empty
+std::forward_iterator_tag (0x0x7f53cf353138) 0 empty
+std::input_iterator_tag (0x0x7f53cf32fc00) 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 (0x0x7f53cf3eeb40) 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 (0x0x7f53cf3eec60) 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 (0x0x7f53cf3eef60) 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 (0x0x7f53cf41d2a0) 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 (0x0x7f53cf41d3c0) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f53cf0fb600) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f53cf0fb900) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f53cf0fb960) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f53cf0fba20) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f53cf0fba80) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f53cf0fbae0) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f53cf0fbb40) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f53cf0fbba0) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f53cf0fbea0) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f53cf131180) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f53cf1311e0) 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 (0x0x7f53cf131f60) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 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 (0x0x7f53cf353618) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+std::exception (0x0x7f53cf1ed240) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f53cf353618)
+
+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 (0x0x7f53cf353680) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+std::bad_alloc (0x0x7f53cf3536e8) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f53cf353680)
+std::exception (0x0x7f53cf1ed480) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f53cf3536e8)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f53cf1ed660) 0 empty
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f53cf08fea0) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f53cf08ff00) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f53cecb50c0) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f53cecb5180) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f53cf02f4e0) 0
+std::__uses_alloc_base (0x0x7f53cecb5120) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f53cee4d7e0) 0 empty
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f53ceac1000) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f53ceac1180) 0 empty
+
+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 (0x0x7f53ceb45b40) 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 (0x0x7f53ceb513a8) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+std::exception (0x0x7f53ceb45f00) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f53ceb513a8)
+
+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 (0x0x7f53ceb51410) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+std::exception (0x0x7f53ceb7c120) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f53ceb51410)
+
+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 (0x0x7f53ceb51478) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+std::exception (0x0x7f53ceb7c300) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f53ceb51478)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f53ceb7c3c0) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f53ceb7c420) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f53ceb7c600) 0
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f53ce89c060) 0 empty
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f53ce922000) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f53ce9220c0) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f53ce9225a0) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f53ce9444e0) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f53ce9445a0) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f53ce944600) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f53ce9449c0) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f53ce944ba0) 0
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f53ce756000) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f53ce21f0c0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f53ce0e4af8) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7f53ce21f840) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f53ce0e4bc8) 0
+std::_Bit_iterator_base (0x0x7f53ce0e4c30) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7f53ce21fde0) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f53ce0e4d68) 0
+std::_Bit_iterator_base (0x0x7f53ce0e4dd0) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7f53ce259600) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f53ce0329c0) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f53ce032b40) 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 (0x0x7f53ce032cc0) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f53ce032e40) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f53cdd70720) 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 (0x0x7f53cdd70780) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f53cde44720) 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 (0x0x7f53cde4b068) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+std::exception (0x0x7f53cde74c60) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f53cde4b068)
+
+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 (0x0x7f53cde4b270) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+std::exception (0x0x7f53cdae8ae0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f53cde4b270)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f53cdae8cc0) 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 (0x0x7f53cdb1c840) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f53cdb1cf00) 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 (0x0x7f53cde4b2d8) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+std::exception (0x0x7f53cdb43180) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f53cde4b2d8)
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f53cdc524e0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f53cdc52540) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f53cdc527e0) 0
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f53cdc92000) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f53cd8d12a0) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f53cd96b900) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f53cd909548) 0
+std::__atomic_flag_base (0x0x7f53cd96b960) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f53cd5360d0) 0
+QAtomicInteger<int> (0x0x7f53cd536138) 0
+QBasicAtomicInteger<int> (0x0x7f53cd539120) 0
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f53cd3347e0) 0 empty
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f53cce55660) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f53cce556c0) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f53ccaf3ea0) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f53ccb49600) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f53ccb49660) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f53ccb37138) 0
+QGenericArgument (0x0x7f53ccb49900) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f53ccb49de0) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f53ccb49e40) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f53ccb49d80) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f53ccb9d7e0) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f53ccb9de40) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f53ccbcf780) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f53cc8b5420) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f53cc8b5780) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f53cc972c60) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f53cc9d9b40) 0
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f53cc9d9c00) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f53cc9d9cc0) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f53cc9d9d20) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f53cc9d9d80) 0
+
+Class __jmp_buf_tag
+ size=200 align=8
+ base size=200 base align=8
+__jmp_buf_tag (0x0x7f53cc9d9de0) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f53cc9d9e40) 0
+
+Class __cancel_jmp_buf_tag
+ size=72 align=8
+ base size=72 base align=8
+__cancel_jmp_buf_tag (0x0x7f53cc9d9ea0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f53cc9d9f60) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f53cca57000) 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 (0x0x7f53cc700d20) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f53cc567ea0) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f53cc567f00) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f53cc567f60) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f53cc5a3000) 0
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f53cc15f420) 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 (0x0x7f53cc15f7e0) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f53cc15fa80) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f53cc15fc60) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f53cc1a9ba0) 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 (0x0x7f53cc3b3dd0) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+std::exception (0x0x7f53cc1a9c60) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f53cc3b3dd0)
+
+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 (0x0x7f53cc3b3e38) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+std::logic_error (0x0x7f53cc3b3ea0) 0
+ primary-for std::domain_error (0x0x7f53cc3b3e38)
+std::exception (0x0x7f53cc1a9cc0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f53cc3b3ea0)
+
+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 (0x0x7f53cc3b3f08) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+std::logic_error (0x0x7f53cc3b3f70) 0
+ primary-for std::invalid_argument (0x0x7f53cc3b3f08)
+std::exception (0x0x7f53cc1a9d20) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f53cc3b3f70)
+
+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 (0x0x7f53cc20b000) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+std::logic_error (0x0x7f53cc20b068) 0
+ primary-for std::length_error (0x0x7f53cc20b000)
+std::exception (0x0x7f53cc1a9d80) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f53cc20b068)
+
+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 (0x0x7f53cc20b0d0) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+std::logic_error (0x0x7f53cc20b138) 0
+ primary-for std::out_of_range (0x0x7f53cc20b0d0)
+std::exception (0x0x7f53cc1a9de0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f53cc20b138)
+
+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 (0x0x7f53cc20b1a0) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+std::exception (0x0x7f53cc1a9e40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f53cc20b1a0)
+
+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 (0x0x7f53cc20b208) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+std::runtime_error (0x0x7f53cc20b270) 0
+ primary-for std::range_error (0x0x7f53cc20b208)
+std::exception (0x0x7f53cc1a9ea0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f53cc20b270)
+
+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 (0x0x7f53cc20b2d8) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+std::runtime_error (0x0x7f53cc20b340) 0
+ primary-for std::overflow_error (0x0x7f53cc20b2d8)
+std::exception (0x0x7f53cc1a9f00) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f53cc20b340)
+
+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 (0x0x7f53cc20b3a8) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+std::runtime_error (0x0x7f53cc20b410) 0
+ primary-for std::underflow_error (0x0x7f53cc20b3a8)
+std::exception (0x0x7f53cc1a9f60) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f53cc20b410)
+
+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 (0x0x7f53cc238120) 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 (0x0x7f53cc238480) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f53cc238c60) 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 (0x0x7f53cc20b820) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+std::runtime_error (0x0x7f53cc20b888) 0
+ primary-for std::system_error (0x0x7f53cc20b820)
+std::exception (0x0x7f53cc26e840) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f53cc20b888)
+
+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 (0x0x7f53cc20bb60) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+std::system_error (0x0x7f53cc20bbc8) 0
+ primary-for std::ios_base::failure (0x0x7f53cc20bb60)
+std::runtime_error (0x0x7f53cc20bc30) 0
+ primary-for std::system_error (0x0x7f53cc20bbc8)
+std::exception (0x0x7f53cbea3f00) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f53cc20bc30)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f53cbea3f60) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f53cbedf000) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f53cbedf060) 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 (0x0x7f53cbea3ea0) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+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 (0x0x7f53cbf66a90) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+std::exception (0x0x7f53cbc965a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f53cbf66a90)
+
+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 (0x0x7f53cbf66af8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+std::exception (0x0x7f53cbc966c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f53cbf66af8)
+
+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 (0x0x7f53cbf66b60) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+std::exception (0x0x7f53cbc967e0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f53cbf66b60)
+
+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 (0x0x7f53cbf66c30) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+std::exception (0x0x7f53cbc96900) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f53cbf66c30)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f53cbcc31e0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f53cbcc3540) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f53cbcc3840) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f53cbcc3ba0) 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 (0x0x7f53cbf66d00) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+std::exception (0x0x7f53cbcc3ea0) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f53cbf66d00)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f53cbd35b40) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f53cbd5f0c0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f53cbe75f00) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f53cbbe7e40) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f53cb8ebf00) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f53cb787c00) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f53cb801e40) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f53cb590b40) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f53cb590f60) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f53cb5be000) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f53cb5f2cc0) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f53cb32a240) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f53cb32a1e0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f53cb38d120) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f53cb0f5720) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f53cacd86c0) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f53cacd4b60) 0
+QtPrivate::ArgBase (0x0x7f53cacd8720) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f53cacd4c30) 0
+QtPrivate::ArgBase (0x0x7f53cacd8960) 0
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7f53cad472a0) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f53cad8a360) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f53cad8a420) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f53cab8d840) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f53cac319c0) 0 empty
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f53cac5b720) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f53cac5b960) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f53ca90f420) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f53cab1a548) 0
+QIODeviceBase (0x0x7f53ca90f480) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f53ca90f600) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f53ca9e7ae0) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f53cab1ad68) 0
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f53ca9e7ba0) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f53cab1add0) 0
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f53ca9e7c60) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f53ca6ea780) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f53cab1af08) 0
+QMetaContainer (0x0x7f53ca6ea960) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f53cab1af70) 0
+QMetaContainer (0x0x7f53ca6ead20) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f53ca7e4d20) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f53ca79c750) 0
+std::__detail::_List_node_base (0x0x7f53ca7e4d80) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f53ca4d8e40) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f53ca4fc1e0) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f53ca3750c0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f53ca3752a0) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f53ca4342a0) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f53c9f1ecc0) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7f53c9e65f00) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f53c9e65f60) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f53c9b7d000) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f53c9bfe600) 0 empty
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7f53c98e11e0) 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 (0x0x7f53c98e1660) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f53c98e1ea0) 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 (0x0x7f53c98e1e40) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f53c99bcd20) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f53c9a03600) 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 (0x0x7f53c989fd68) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+QObject (0x0x7f53c9a035a0) 0
+ primary-for QAbstractAnimation (0x0x7f53c989fd68)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f53c9a03960) 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 (0x0x7f53c989fdd0) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+QObject (0x0x7f53c9a03900) 0
+ primary-for QAnimationDriver (0x0x7f53c989fdd0)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f53c9a03b40) 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 (0x0x7f53c989fe38) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+QObject (0x0x7f53c9a03ae0) 0
+ primary-for QEventLoop (0x0x7f53c989fe38)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f53c9a66180) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f53c9a66240) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f53c9a662a0) 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 (0x0x7f53c989ff70) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+QObject (0x0x7f53c9a661e0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f53c989ff70)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f53c96adc60) 0 empty
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f53c9878240) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f53c98785a0) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f53c96329c0) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f53c9632960) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f53c9671600) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f53c964e208) 0
+QStringConverterBase (0x0x7f53c96715a0) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f53c964e270) 0
+QStringConverter (0x0x7f53c964e2d8) 0
+QStringConverterBase (0x0x7f53c92b1000) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f53c964e340) 0
+QStringConverter (0x0x7f53c964e3a8) 0
+QStringConverterBase (0x0x7f53c92b1e40) 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 (0x0x7f53c964e410) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+QIODeviceBase (0x0x7f53c92deb40) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f53c9343300) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f53c93df4e0) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f53c9415b40) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f53c9415cc0) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f53c90b7c00) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f53c90cfb40) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f53c964e888) 0
+QIODeviceBase (0x0x7f53c90cfae0) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f53c91e4660) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f53c91e4720) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f53c8faaa20) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f53c8faaa80) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f53c8faa9c0) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f53c8da4420) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f53c8da4660) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f53c8da4840) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f53c8de9c60) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f53c8e35d20) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f53c8aad0c0) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f53c8b065a0) 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 (0x0x7f53c8afbe38) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+QObject (0x0x7f53c8b06540) 0
+ primary-for QAbstractItemModel (0x0x7f53c8afbe38)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f53c8c5a3c0) 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 (0x0x7f53c8b75478) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+QAbstractItemModel (0x0x7f53c8b754e0) 0
+ primary-for QAbstractTableModel (0x0x7f53c8b75478)
+QObject (0x0x7f53c8c5a360) 0
+ primary-for QAbstractItemModel (0x0x7f53c8b754e0)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f53c8c5a4e0) 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 (0x0x7f53c8b75548) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+QAbstractItemModel (0x0x7f53c8b755b0) 0
+ primary-for QAbstractListModel (0x0x7f53c8b75548)
+QObject (0x0x7f53c8c5a480) 0
+ primary-for QAbstractItemModel (0x0x7f53c8b755b0)
+
+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 (0x0x7f53c88a3cc0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f53c88a3d80) 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 (0x0x7f53c88ad8f0) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+QAbstractItemModel (0x0x7f53c88ad958) 0
+ primary-for QAbstractProxyModel (0x0x7f53c88ad8f0)
+QObject (0x0x7f53c88a3d20) 0
+ primary-for QAbstractItemModel (0x0x7f53c88ad958)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f53c88a3f60) 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 (0x0x7f53c88ad9c0) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+QAbstractAnimation (0x0x7f53c88ada28) 0
+ primary-for QAnimationGroup (0x0x7f53c88ad9c0)
+QObject (0x0x7f53c88a3f00) 0
+ primary-for QAbstractAnimation (0x0x7f53c88ada28)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f53c88adb60) 0
+QIterator<QMetaAssociation> (0x0x7f53c88adbc8) 0
+QBaseIterator<QMetaAssociation> (0x0x7f53c88fd3c0) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f53c88add00) 0
+QConstIterator<QMetaAssociation> (0x0x7f53c88add68) 0
+QBaseIterator<QMetaAssociation> (0x0x7f53c88fd960) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f53c88ade38) 0
+QIterable<QMetaAssociation> (0x0x7f53c88fdea0) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f53c8a2af00) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f53c869d7e0) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f53c86cf720) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f53c87205a0) 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 (0x0x7f53c86d7e70) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+QObject (0x0x7f53c87204e0) 0
+ primary-for QIODevice (0x0x7f53c86d7e70)
+QIODeviceBase (0x0x7f53c8720540) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f53c8720a20) 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 (0x0x7f53c8718f08) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+QIODevice (0x0x7f53c874b2a0) 0
+ primary-for QBuffer (0x0x7f53c8718f08)
+QObject (0x0x7f53c8720960) 0
+ primary-for QIODevice (0x0x7f53c874b2a0)
+QIODeviceBase (0x0x7f53c87209c0) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f53c8720c60) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f53c8720c00) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f53c8720de0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f53c8720d80) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f53c87d7420) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f53c84e3420) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7f53c84e3480) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f53c84e33c0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f53c84e3ea0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f53c85995a0) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f53c85eb960) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f53c85eb9c0) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f53c85eb900) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f53c8676f00) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f53c82d04e0) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f53c8386900) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f53c8424300) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f53c84243c0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f53c8424540) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f53c80c4900) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f53c81b13c0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f53c82186c0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f53c8218780) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f53c7f17e40) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f53c7f7b3c0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f53c7f7b420) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f53c7f7b360) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f53c8053b40) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f53c8053ba0) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f53c8053ae0) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f53c7a9f1e0) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f53c7a9f180) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f53c7ba5660) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f53c7bf0ae0) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f53c7c293c0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f53c7c295a0) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f53c78cf300) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f53c79660c0) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f53c7966120) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f53c7966180) 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 (0x0x7f53c7966060) 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 (0x0x7f53c791cf70) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+QEvent (0x0x7f53c7966ae0) 0
+ primary-for QTimerEvent (0x0x7f53c791cf70)
+
+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 (0x0x7f53c79a9000) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+QEvent (0x0x7f53c79aa000) 0
+ primary-for QChildEvent (0x0x7f53c79a9000)
+
+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 (0x0x7f53c79a9068) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+QEvent (0x0x7f53c79aa420) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f53c79a9068)
+
+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 (0x0x7f53c79a90d0) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+QEvent (0x0x7f53c79aa6c0) 0
+ primary-for QDeferredDeleteEvent (0x0x7f53c79a90d0)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f53c79aad20) 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 (0x0x7f53c79a9270) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+QObject (0x0x7f53c79aacc0) 0
+ primary-for QCoreApplication (0x0x7f53c79a9270)
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f53c79aaf60) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f53c7a020c0) 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 (0x0x7f53c79a92d8) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+QAbstractItemModel (0x0x7f53c79a9340) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f53c79a92d8)
+QObject (0x0x7f53c7a02060) 0
+ primary-for QAbstractItemModel (0x0x7f53c79a9340)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f53c7a02240) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f53c7a02360) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f53c7a02660) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f53c778c2a0) 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 (0x0x7f53c7786958) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+QIODevice (0x0x7f53c7782310) 0
+ primary-for QFileDevice (0x0x7f53c7786958)
+QObject (0x0x7f53c778c1e0) 0
+ primary-for QIODevice (0x0x7f53c7782310)
+QIODeviceBase (0x0x7f53c778c240) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7f53c778cf60) 0
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7f53c7869540) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f53c74cf960) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7f53c7617660) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7f53c72bb960) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7f53c72bb900) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7f53c72f5f00) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7f53c7345a80) 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> (0x0x7f53c6f94208 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> (0x0x7f53c6f942d8 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> (0x0x7f53c6f94750 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> (0x0x7f53c6f94820 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)
+
+Construction vtable for std::basic_istream<char> (0x0x7f53c70089c0 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> (0x0x7f53c7008bc8 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> (0x0x7f53c70457e0 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> (0x0x7f53c7008dd0 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> (0x0x7f53c7008ea0 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> (0x0x7f53c7008f08 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> (0x0x7f53c6cbe1a0 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> (0x0x7f53c7045bd0 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> (0x0x7f53c6cbe3a8 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> (0x0x7f53c6cbe478 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 (0x0x7f53c706a8a0) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7f53c706aa20) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7f53c706aba0) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7f53c706aea0) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7f53c6d0c060) 0
+
+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 (0x0x7f53c6de06c0) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7f53c6de0660) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7f53c6de0600) 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 (0x0x7f53c6c3b680) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+std::system_error (0x0x7f53c6c3b6e8) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7f53c6c3b680)
+std::runtime_error (0x0x7f53c6c3b750) 0
+ primary-for std::system_error (0x0x7f53c6c3b6e8)
+std::exception (0x0x7f53c6c52240) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f53c6c3b750)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7f53c6c3ba28) 0
+std::filesystem::__cxx11::path (0x0x7f53c6c52780) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7f53c6c52d80) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7f53c6962840) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7f53c6962d20) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7f53c69f9420) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7f53c69f9ba0) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7f53c6a6b5a0) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f53c671c1e0) 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 (0x0x7f53c6a69820) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+QFileDevice (0x0x7f53c6a69888) 0
+ primary-for QFile (0x0x7f53c6a69820)
+QIODevice (0x0x7f53c66f2850) 0
+ primary-for QFileDevice (0x0x7f53c6a69888)
+QObject (0x0x7f53c671c120) 0
+ primary-for QIODevice (0x0x7f53c66f2850)
+QIODeviceBase (0x0x7f53c671c180) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f53c671c7e0) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f53c67d1660) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f53c64bc180) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f53c64bc600) 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 (0x0x7f53c656a208) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+std::exception (0x0x7f53c6593b40) 0 nearly-empty
+ primary-for QException (0x0x7f53c656a208)
+
+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 (0x0x7f53c656a270) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+QException (0x0x7f53c656a2d8) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f53c656a270)
+std::exception (0x0x7f53c6593ba0) 0 nearly-empty
+ primary-for QException (0x0x7f53c656a2d8)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f53c6593d20) 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 (0x0x7f53c6593d80) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f53c65df000) 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 (0x0x7f53c656a340) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+QObject (0x0x7f53c6593f60) 0
+ primary-for QFileSelector (0x0x7f53c656a340)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f53c65df1e0) 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 (0x0x7f53c656a3a8) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+QObject (0x0x7f53c65df180) 0
+ primary-for QFileSystemWatcher (0x0x7f53c656a3a8)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f53c65df420) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f53c656a410) 0
+QBasicMutex (0x0x7f53c6652180) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f53c66525a0) 0
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f53c6652ba0) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f53c62c21e0) 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 (0x0x7f53c62c2de0) 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 (0x0x7f53c6435960) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f53c647dae0) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f53c6438e38) 0
+std::__mutex_base (0x0x7f53c647db40) 0
+
+Class std::__condvar
+ size=48 align=8
+ base size=48 base align=8
+std::__condvar (0x0x7f53c647dd20) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f53c60c23c0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f53c60c2420) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f53c60c2480) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f53c60c2ea0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f53c6438ea0) 0
+std::__recursive_mutex_base (0x0x7f53c60c2f00) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f53c60e98c0) 0
+std::__mutex_base (0x0x7f53c60fc3c0) 0
+std::__timed_mutex_impl<std::timed_mutex> (0x0x7f53c60fc420) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f53c60e9cb0) 0
+std::__recursive_mutex_base (0x0x7f53c60fc7e0) 0
+std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f53c60fc840) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f53c6139600) 0
+
+Class std::once_flag::_Prepare_execution
+ size=1 align=1
+ base size=0 base align=1
+std::once_flag::_Prepare_execution (0x0x7f53c6139660) 0 empty
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f53c6139b40) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f53c6184000) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f53c6184060) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f53c6184f60) 0 empty
+
+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 (0x0x7f53c62167e0) 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 (0x0x7f53c6216840) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f53c6216780) 0
+
+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 (0x0x7f53c6288000) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+std::logic_error (0x0x7f53c6288068) 0
+ primary-for std::future_error (0x0x7f53c6288000)
+std::exception (0x0x7f53c6268cc0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f53c6288068)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f53c6291420) 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 (0x0x7f53c62913c0) 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 (0x0x7f53c5fe9d20) 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 (0x0x7f53c5ff5c98) 0
+std::__at_thread_exit_elt (0x0x7f53c5fe9de0) 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 (0x0x7f53c62915a0) 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 (0x0x7f53c6291360) 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 (0x0x7f53c5986068) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+std::__future_base::_State_baseV2 (0x0x7f53c596a840) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f53c5986068)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f53c596af00) 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 (0x0x7f53c5986340) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+QObject (0x0x7f53c596aea0) 0
+ primary-for QThread (0x0x7f53c5986340)
+
+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 (0x0x7f53c59be2a0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f53c59be420) 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 (0x0x7f53c59863a8) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+QObject (0x0x7f53c59be3c0) 0
+ primary-for QThreadPool (0x0x7f53c59863a8)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f53c58103c0) 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 (0x0x7f53c57cb820) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+QObject (0x0x7f53c5810360) 0
+ primary-for QFutureWatcherBase (0x0x7f53c57cb820)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f53c5810900) 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 (0x0x7f53c57cb958) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+QAbstractProxyModel (0x0x7f53c57cb9c0) 0
+ primary-for QIdentityProxyModel (0x0x7f53c57cb958)
+QAbstractItemModel (0x0x7f53c57cba28) 0
+ primary-for QAbstractProxyModel (0x0x7f53c57cb9c0)
+QObject (0x0x7f53c58108a0) 0
+ primary-for QAbstractItemModel (0x0x7f53c57cba28)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f53c5810a80) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f53c5886cc0) 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 (0x0x7f53c549d0d0) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+QObject (0x0x7f53c5886c60) 0
+ primary-for QItemSelectionModel (0x0x7f53c549d0d0)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f53c549d410) 0
+QList<QItemSelectionRange> (0x0x7f53c549d478) 0
+QListSpecialMethods<QItemSelectionRange> (0x0x7f53c549d4e0) 0 empty
+QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f53c54cc720) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f53c55bec60) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f53c5606180) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f53c56567e0) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f53c5656840) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f53c5656780) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f53c5310480) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f53c53104e0) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f53c50dc4e0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f53c50dc540) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f53c50dc480) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f53c51a51e0) 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 (0x0x7f53c519baf8) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+QObject (0x0x7f53c51a5180) 0
+ primary-for QLibrary (0x0x7f53c519baf8)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f53c51a58a0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f53c51a5840) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f53c4ec0180) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f53ce5c1de0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f53ce5c1f60) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f53cc92fc00) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f53cb2ecc60) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f53c8dcd780) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f53c81b1de0) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f53c7ef4c00) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f53c7ef4ba0) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f53c7c6e180) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f53c67a4420) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f53c54cca20) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f53c54ccf60) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f53c54cca80) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f53c4ec09c0) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f53c4ec0960) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f53c68c7960) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f53c68c7900) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f53c6dd0000) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f53c68c79c0) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f53c71c4360) 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 (0x0x7f53ce31ff08) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+QObject (0x0x7f53c71c4300) 0
+ primary-for QMimeData (0x0x7f53ce31ff08)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f53c71c44e0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f53c7a260c0) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f53c7a26180) 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 (0x0x7f53ce325478) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+QObject (0x0x7f53c7a26120) 0
+ primary-for QObjectCleanupHandler (0x0x7f53ce325478)
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f53c7a26240) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f53c807d180) 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 (0x0x7f53ce32d820) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+QAnimationGroup (0x0x7f53ce32d888) 0
+ primary-for QParallelAnimationGroup (0x0x7f53ce32d820)
+QAbstractAnimation (0x0x7f53ce32d8f0) 0
+ primary-for QAnimationGroup (0x0x7f53ce32d888)
+QObject (0x0x7f53c807d120) 0
+ primary-for QAbstractAnimation (0x0x7f53ce32d8f0)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f53c807d360) 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 (0x0x7f53ce32d958) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+QAbstractAnimation (0x0x7f53ce32d9c0) 0
+ primary-for QPauseAnimation (0x0x7f53ce32d958)
+QObject (0x0x7f53c807d300) 0
+ primary-for QAbstractAnimation (0x0x7f53ce32d9c0)
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f53c807d540) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f53c807d5a0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f53c8290240) 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 (0x0x7f53ce333e38) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+QObject (0x0x7f53c82901e0) 0
+ primary-for QPluginLoader (0x0x7f53ce333e38)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f53c8290300) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f53c886fe40) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f53c886fea0) 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 (0x0x7f53ce344a28) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+QIODevice (0x0x7f53c8ea4700) 0
+ primary-for QProcess (0x0x7f53ce344a28)
+QObject (0x0x7f53c886fd80) 0
+ primary-for QIODevice (0x0x7f53c8ea4700)
+QIODeviceBase (0x0x7f53c886fde0) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f53c90fe4e0) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f53c90fe600) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f53cb397840) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f53cb3977e0) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7f53cb3978a0) 0
+
+Class QtPrivate::MSVCWorkAround
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::MSVCWorkAround (0x0x7f53cb397900) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f53cb397960) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f53cb397ea0) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f53cb397f00) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f53ccbfd660) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f53ccbfdd80) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f53ce23a120) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f53ce23a240) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f53ce23a480) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f53ce344c30) 0
+QPropertyObserverBase (0x0x7f53ce23a600) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7f53ce344e38) 0
+QPropertyObserver (0x0x7f53ce344ea0) 0
+QPropertyObserverBase (0x0x7f53ce23aae0) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f53ccbbf9c0) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f53ccc08b40) 0
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f53cb966300) 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 (0x0x7f53ce3507b8) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+QAbstractAnimation (0x0x7f53ce350820) 0
+ primary-for QVariantAnimation (0x0x7f53ce3507b8)
+QObject (0x0x7f53cb9662a0) 0
+ primary-for QAbstractAnimation (0x0x7f53ce350820)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f53cb966540) 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 (0x0x7f53ce350888) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+QVariantAnimation (0x0x7f53ce3508f0) 0
+ primary-for QPropertyAnimation (0x0x7f53ce350888)
+QAbstractAnimation (0x0x7f53ce350958) 0
+ primary-for QVariantAnimation (0x0x7f53ce3508f0)
+QObject (0x0x7f53cb9664e0) 0
+ primary-for QAbstractAnimation (0x0x7f53ce350958)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f53cb3a6d20) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f53caa510c0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f53caa51060) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f53c883b7e0) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7f53c8085ea0) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f53c8085f00) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f53c8085e40) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f53ce35e340) 0
+QRandomGenerator (0x0x7f53c7ac6420) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f53c7913060) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f53c79132a0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f53c7913720) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f53c7913ba0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f53c6dc57e0) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f53c69f8420) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f53c567d3c0) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f53cc9d00c0) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f53cc9d03c0) 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 (0x0x7f53ce44bb60) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+QFileDevice (0x0x7f53ce44bbc8) 0
+ primary-for QSaveFile (0x0x7f53ce44bb60)
+QIODevice (0x0x7f53c4edbcb0) 0
+ primary-for QFileDevice (0x0x7f53ce44bbc8)
+QObject (0x0x7f53cc9d0300) 0
+ primary-for QIODevice (0x0x7f53c4edbcb0)
+QIODeviceBase (0x0x7f53cc9d0360) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f53cc9d0720) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f53cea86840) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f53c81ae120) 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 (0x0x7f53ce44ff70) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+QAnimationGroup (0x0x7f53ce451000) 0
+ primary-for QSequentialAnimationGroup (0x0x7f53ce44ff70)
+QAbstractAnimation (0x0x7f53ce451068) 0
+ primary-for QAnimationGroup (0x0x7f53ce451000)
+QObject (0x0x7f53c81ae0c0) 0
+ primary-for QAbstractAnimation (0x0x7f53ce451068)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f53ce4511a0) 0
+QIterator<QMetaSequence> (0x0x7f53ce451208) 0
+QBaseIterator<QMetaSequence> (0x0x7f53c81ae480) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f53ce451340) 0
+QConstIterator<QMetaSequence> (0x0x7f53ce4513a8) 0
+QBaseIterator<QMetaSequence> (0x0x7f53c81aea20) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f53ce451410) 0
+QIterable<QMetaSequence> (0x0x7f53c81aef60) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f53cb762ae0) 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 (0x0x7f53ce46d9c0) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+QObject (0x0x7f53cb762a80) 0
+ primary-for QSettings (0x0x7f53ce46d9c0)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f53cb762f00) 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 (0x0x7f53ce46da28) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+QObject (0x0x7f53cb762ea0) 0
+ primary-for QSharedMemory (0x0x7f53ce46da28)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f53c922c120) 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 (0x0x7f53ce46da90) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+QObject (0x0x7f53c922c0c0) 0
+ primary-for QSignalMapper (0x0x7f53ce46da90)
+
+Class __uintr_frame
+ size=24 align=8
+ base size=24 base align=8
+__uintr_frame (0x0x7f53c4c9b420) 0
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f53c4820b40) 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 (0x0x7f53ce4746e8) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+QObject (0x0x7f53c4820ae0) 0
+ primary-for QSocketNotifier (0x0x7f53ce4746e8)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f53c4820cc0) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f53c484e5a0) 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 (0x0x7f53ce47b068) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+QAbstractProxyModel (0x0x7f53ce47b0d0) 0
+ primary-for QSortFilterProxyModel (0x0x7f53ce47b068)
+QAbstractItemModel (0x0x7f53ce47b138) 0
+ primary-for QAbstractProxyModel (0x0x7f53ce47b0d0)
+QObject (0x0x7f53c484e540) 0
+ primary-for QAbstractItemModel (0x0x7f53ce47b138)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f53c484e960) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f53c4877360) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f53d1c97ea0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f53d1ccd720) 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 (0x0x7f53ce489c30) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+QAbstractListModel (0x0x7f53ce489c98) 0
+ primary-for QStringListModel (0x0x7f53ce489c30)
+QAbstractItemModel (0x0x7f53ce489d00) 0
+ primary-for QAbstractListModel (0x0x7f53ce489c98)
+QObject (0x0x7f53d1ccd6c0) 0
+ primary-for QAbstractItemModel (0x0x7f53ce489d00)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f53d1ccd7e0) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f53d1ccd900) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f53d1ccda80) 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 (0x0x7f53ce489d68) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+QFile (0x0x7f53ce489dd0) 0
+ primary-for QTemporaryFile (0x0x7f53ce489d68)
+QFileDevice (0x0x7f53ce489ea0) 0
+ primary-for QFile (0x0x7f53ce489dd0)
+QIODevice (0x0x7f53d1cdb4d0) 0
+ primary-for QFileDevice (0x0x7f53ce489ea0)
+QObject (0x0x7f53d1ccd9c0) 0
+ primary-for QIODevice (0x0x7f53d1cdb4d0)
+QIODeviceBase (0x0x7f53d1ccda20) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f53d1ccdcc0) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f53d1cf9360) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f53d1cf9a20) 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 (0x0x7f53ce48c000) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+QObject (0x0x7f53d1cf99c0) 0
+ primary-for QTimeLine (0x0x7f53ce48c000)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f53d1cf9c00) 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 (0x0x7f53ce48c068) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+QObject (0x0x7f53d1cf9ba0) 0
+ primary-for QTimer (0x0x7f53ce48c068)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f53d1d2b540) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f53d1d2b4e0) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f53d1d4f900) 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 (0x0x7f53ce098000) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+QObject (0x0x7f53d1d4f8a0) 0
+ primary-for QTranslator (0x0x7f53ce098000)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f53d1d4fae0) 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 (0x0x7f53ce098068) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+QAbstractProxyModel (0x0x7f53ce0980d0) 0
+ primary-for QTransposeProxyModel (0x0x7f53ce098068)
+QAbstractItemModel (0x0x7f53ce098138) 0
+ primary-for QAbstractProxyModel (0x0x7f53ce0980d0)
+QObject (0x0x7f53d1d4fa80) 0
+ primary-for QAbstractItemModel (0x0x7f53ce098138)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f53d1d4fc60) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f53d1d93480) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f53d1d935a0) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f53d1da5540) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f53ce0ac208) 0
+QList<QXmlStreamAttribute> (0x0x7f53ce0ac1a0) 0
+QListSpecialMethods<QXmlStreamAttribute> (0x0x7f53ce0ac2d8) 0 empty
+QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f53d1db46c0) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f53d1db4f60) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f53d1ded840) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f53d1df9120) 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 (0x0x7f53d1e03ae0) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f53d1e03b40) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f53d1e1f120) 0
+
+Class QtConcurrent::TaskStartParameters
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::TaskStartParameters (0x0x7f53d1e1f480) 0
+
+Class QtConcurrent::Median
+ size=72 align=8
+ base size=70 base align=8
+QtConcurrent::Median (0x0x7f53d1e36720) 0
+
+Class QtConcurrent::ThreadEngineBarrier
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::ThreadEngineBarrier (0x0x7f53d1e36b40) 0
+
+Vtable for QtConcurrent::ThreadEngineBase
+QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN12QtConcurrent16ThreadEngineBaseE)
+16 (int (*)(...))QtConcurrent::ThreadEngineBase::run
+24 0
+32 0
+40 (int (*)(...))QtConcurrent::ThreadEngineBase::start
+48 (int (*)(...))QtConcurrent::ThreadEngineBase::finish
+56 (int (*)(...))QtConcurrent::ThreadEngineBase::threadFunction
+64 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldStartThread
+72 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldThrottleThread
+80 (int (*)(...))__cxa_pure_virtual
+
+Class QtConcurrent::ThreadEngineBase
+ size=64 align=8
+ base size=64 base align=8
+QtConcurrent::ThreadEngineBase (0x0x7f53cb2ef548) 0
+ vptr=((& QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE) + 16)
+QRunnable (0x0x7f53d1e36c00) 0
+ primary-for QtConcurrent::ThreadEngineBase (0x0x7f53cb2ef548)
+
+Class QtConcurrent::BlockSizeManager
+ size=176 align=8
+ base size=172 base align=8
+QtConcurrent::BlockSizeManager (0x0x7f53d1e49720) 0
+
+Class QtPrivate::PushBackWrapper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::PushBackWrapper (0x0x7f53d1e57720) 0 empty
+
+Class QDBusAbstractAdaptor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractAdaptor::QPrivateSignal (0x0x7f53d1ae67e0) 0 empty
+
+Vtable for QDBusAbstractAdaptor
+QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDBusAbstractAdaptor)
+16 (int (*)(...))QDBusAbstractAdaptor::metaObject
+24 (int (*)(...))QDBusAbstractAdaptor::qt_metacast
+32 (int (*)(...))QDBusAbstractAdaptor::qt_metacall
+40 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+48 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractAdaptor
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractAdaptor (0x0x7f53cb05dd68) 0
+ vptr=((& QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor) + 16)
+QObject (0x0x7f53d1ae6780) 0
+ primary-for QDBusAbstractAdaptor (0x0x7f53cb05dd68)
+
+Class QDBusError
+ size=64 align=8
+ base size=64 base align=8
+QDBusError (0x0x7f53d1ae6960) 0
+
+Class QDBusMessage
+ size=8 align=8
+ base size=8 base align=8
+QDBusMessage (0x0x7f53d1b1ac00) 0
+
+Class QDBusObjectPath
+ size=24 align=8
+ base size=24 base align=8
+QDBusObjectPath (0x0x7f53d1b52300) 0
+
+Class QDBusSignature
+ size=24 align=8
+ base size=24 base align=8
+QDBusSignature (0x0x7f53d1b69cc0) 0
+
+Class QDBusVariant
+ size=32 align=8
+ base size=32 base align=8
+QDBusVariant (0x0x7f53d1b8d6c0) 0
+
+Class QDBusConnection
+ size=8 align=8
+ base size=8 base align=8
+QDBusConnection (0x0x7f53d1bb5660) 0
+
+Class QDBusPendingCall
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingCall (0x0x7f53d1c0e5a0) 0
+
+Class QDBusPendingCallWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusPendingCallWatcher::QPrivateSignal (0x0x7f53d1c516c0) 0 empty
+
+Vtable for QDBusPendingCallWatcher
+QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QDBusPendingCallWatcher)
+16 (int (*)(...))QDBusPendingCallWatcher::metaObject
+24 (int (*)(...))QDBusPendingCallWatcher::qt_metacast
+32 (int (*)(...))QDBusPendingCallWatcher::qt_metacall
+40 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+48 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusPendingCallWatcher
+ size=24 align=8
+ base size=24 base align=8
+QDBusPendingCallWatcher (0x0x7f53d1c3e7e0) 0
+ vptr=((& QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher) + 16)
+QObject (0x0x7f53d1c51600) 0
+ primary-for QDBusPendingCallWatcher (0x0x7f53d1c3e7e0)
+QDBusPendingCall (0x0x7f53d1c51660) 16
+
+Vtable for QDBusAbstractInterfaceBase
+QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDBusAbstractInterfaceBase)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QDBusAbstractInterfaceBase::qt_metacall
+40 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+48 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterfaceBase (0x0x7f53d1c4fa90) 0
+ vptr=((& QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase) + 16)
+QObject (0x0x7f53d1c51840) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f53d1c4fa90)
+
+Class QDBusAbstractInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractInterface::QPrivateSignal (0x0x7f53d1c519c0) 0 empty
+
+Vtable for QDBusAbstractInterface
+QDBusAbstractInterface::_ZTV22QDBusAbstractInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QDBusAbstractInterface)
+16 (int (*)(...))QDBusAbstractInterface::metaObject
+24 (int (*)(...))QDBusAbstractInterface::qt_metacast
+32 (int (*)(...))QDBusAbstractInterface::qt_metacall
+40 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+48 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusAbstractInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterface (0x0x7f53d1c4faf8) 0
+ vptr=((& QDBusAbstractInterface::_ZTV22QDBusAbstractInterface) + 16)
+QDBusAbstractInterfaceBase (0x0x7f53d1c4fb60) 0
+ primary-for QDBusAbstractInterface (0x0x7f53d1c4faf8)
+QObject (0x0x7f53d1c51960) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f53d1c4fb60)
+
+Class QDBusArgument
+ size=8 align=8
+ base size=8 base align=8
+QDBusArgument (0x0x7f53d1c51d80) 0
+
+Class QDBusPendingReplyBase
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingReplyBase (0x0x7f53d1897bc8) 0
+QDBusPendingCall (0x0x7f53d193c0c0) 0
+
+Class QDBusConnectionInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusConnectionInterface::QPrivateSignal (0x0x7f53d1966180) 0 empty
+
+Vtable for QDBusConnectionInterface
+QDBusConnectionInterface::_ZTV24QDBusConnectionInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QDBusConnectionInterface)
+16 (int (*)(...))QDBusConnectionInterface::metaObject
+24 (int (*)(...))QDBusConnectionInterface::qt_metacast
+32 (int (*)(...))QDBusConnectionInterface::qt_metacall
+40 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+48 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusConnectionInterface::connectNotify
+104 (int (*)(...))QDBusConnectionInterface::disconnectNotify
+
+Class QDBusConnectionInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusConnectionInterface (0x0x7f53d1897e38) 0
+ vptr=((& QDBusConnectionInterface::_ZTV24QDBusConnectionInterface) + 16)
+QDBusAbstractInterface (0x0x7f53d1897ea0) 0
+ primary-for QDBusConnectionInterface (0x0x7f53d1897e38)
+QDBusAbstractInterfaceBase (0x0x7f53d1897f08) 0
+ primary-for QDBusAbstractInterface (0x0x7f53d1897ea0)
+QObject (0x0x7f53d1966120) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f53d1897f08)
+
+Class QDBusContext
+ size=8 align=8
+ base size=8 base align=8
+QDBusContext (0x0x7f53d1966600) 0
+
+Vtable for QDBusInterface
+QDBusInterface::_ZTV14QDBusInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDBusInterface)
+16 (int (*)(...))QDBusInterface::metaObject
+24 (int (*)(...))QDBusInterface::qt_metacast
+32 (int (*)(...))QDBusInterface::qt_metacall
+40 (int (*)(...))QDBusInterface::~QDBusInterface
+48 (int (*)(...))QDBusInterface::~QDBusInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusInterface (0x0x7f53d1897f70) 0
+ vptr=((& QDBusInterface::_ZTV14QDBusInterface) + 16)
+QDBusAbstractInterface (0x0x7f53d1897b60) 0
+ primary-for QDBusInterface (0x0x7f53d1897f70)
+QDBusAbstractInterfaceBase (0x0x7f53d197f000) 0
+ primary-for QDBusAbstractInterface (0x0x7f53d1897b60)
+QObject (0x0x7f53d1966660) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f53d197f000)
+
+Class QDBusMetaType
+ size=1 align=1
+ base size=0 base align=1
+QDBusMetaType (0x0x7f53d1966780) 0 empty
+
+Class QDBusServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServer::QPrivateSignal (0x0x7f53d1966a20) 0 empty
+
+Vtable for QDBusServer
+QDBusServer::_ZTV11QDBusServer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDBusServer)
+16 (int (*)(...))QDBusServer::metaObject
+24 (int (*)(...))QDBusServer::qt_metacast
+32 (int (*)(...))QDBusServer::qt_metacall
+40 (int (*)(...))QDBusServer::~QDBusServer
+48 (int (*)(...))QDBusServer::~QDBusServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServer
+ size=24 align=8
+ base size=24 base align=8
+QDBusServer (0x0x7f53d197f068) 0
+ vptr=((& QDBusServer::_ZTV11QDBusServer) + 16)
+QObject (0x0x7f53d19669c0) 0
+ primary-for QDBusServer (0x0x7f53d197f068)
+
+Class QDBusServiceWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServiceWatcher::QPrivateSignal (0x0x7f53d1966b40) 0 empty
+
+Vtable for QDBusServiceWatcher
+QDBusServiceWatcher::_ZTV19QDBusServiceWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDBusServiceWatcher)
+16 (int (*)(...))QDBusServiceWatcher::metaObject
+24 (int (*)(...))QDBusServiceWatcher::qt_metacast
+32 (int (*)(...))QDBusServiceWatcher::qt_metacall
+40 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+48 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServiceWatcher
+ size=16 align=8
+ base size=16 base align=8
+QDBusServiceWatcher (0x0x7f53d197f0d0) 0
+ vptr=((& QDBusServiceWatcher::_ZTV19QDBusServiceWatcher) + 16)
+QObject (0x0x7f53d1966ae0) 0
+ primary-for QDBusServiceWatcher (0x0x7f53d197f0d0)
+
+Class QDBusUnixFileDescriptor
+ size=8 align=8
+ base size=8 base align=8
+QDBusUnixFileDescriptor (0x0x7f53d19a3180) 0
+
+Class QDBusVirtualObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusVirtualObject::QPrivateSignal (0x0x7f53d19e1b40) 0 empty
+
+Vtable for QDBusVirtualObject
+QDBusVirtualObject::_ZTV18QDBusVirtualObject: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QDBusVirtualObject)
+16 (int (*)(...))QDBusVirtualObject::metaObject
+24 (int (*)(...))QDBusVirtualObject::qt_metacast
+32 (int (*)(...))QDBusVirtualObject::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 QDBusVirtualObject
+ size=16 align=8
+ base size=16 base align=8
+QDBusVirtualObject (0x0x7f53d19eadd0) 0
+ vptr=((& QDBusVirtualObject::_ZTV18QDBusVirtualObject) + 16)
+QObject (0x0x7f53d19e1ae0) 0
+ primary-for QDBusVirtualObject (0x0x7f53d19eadd0)
+
+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 (0x0x7f53d19e1c00) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f53d1a026c0) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f53d1a3b600) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f53d1a3b5a0) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f53d1a956c0) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f53d170af70) 0
+QList<QPoint> (0x0x7f53d170af08) 0
+QListSpecialMethods<QPoint> (0x0x7f53d1763000) 0 empty
+QListSpecialMethodsBase<QPoint> (0x0x7f53d17234e0) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f53d17a2270) 0
+QList<QPointF> (0x0x7f53d17a22d8) 0
+QListSpecialMethods<QPointF> (0x0x7f53d17a2340) 0 empty
+QListSpecialMethodsBase<QPointF> (0x0x7f53d1797ea0) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f53d181f4e0) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f53d181f480) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f53d18827e0) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f53d1882780) 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 (0x0x7f53c34c8340) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+QPaintDevice (0x0x7f53c34d5600) 0
+ primary-for QImage (0x0x7f53c34c8340)
+
+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 (0x0x7f53c354cf70) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+QPaintDevice (0x0x7f53c354ad80) 0
+ primary-for QPixmap (0x0x7f53c354cf70)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f53c35bbba0) 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 (0x0x7f53c360dd20) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f53c3632300) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f53c367f300) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f53c32bc4e0) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f53c3356240) 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 (0x0x7f53c3300410) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+QObject (0x0x7f53c33561e0) 0
+ primary-for QScreen (0x0x7f53c3300410)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f53c3356480) 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 (0x0x7f53c3300478) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+QObject (0x0x7f53c3356420) 0
+ primary-for QInputDevice (0x0x7f53c3300478)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f53c3356f00) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f53c33c79c0) 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 (0x0x7f53c33cf618) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+QInputDevice (0x0x7f53c33cf680) 0
+ primary-for QPointingDevice (0x0x7f53c33cf618)
+QObject (0x0x7f53c33c7960) 0
+ primary-for QInputDevice (0x0x7f53c33cf680)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f53c33fe120) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f53c346c180) 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 (0x0x7f53c30bd8f0) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+QEvent (0x0x7f53c30b1f00) 0
+ primary-for QInputEvent (0x0x7f53c30bd8f0)
+
+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 (0x0x7f53c30bd958) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+QInputEvent (0x0x7f53c30bd9c0) 0
+ primary-for QPointerEvent (0x0x7f53c30bd958)
+QEvent (0x0x7f53c30d6420) 0
+ primary-for QInputEvent (0x0x7f53c30bd9c0)
+
+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 (0x0x7f53c30bdc30) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+QPointerEvent (0x0x7f53c30bdc98) 0
+ primary-for QSinglePointEvent (0x0x7f53c30bdc30)
+QInputEvent (0x0x7f53c30bdd00) 0
+ primary-for QPointerEvent (0x0x7f53c30bdc98)
+QEvent (0x0x7f53c30d6f60) 0
+ primary-for QInputEvent (0x0x7f53c30bdd00)
+
+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 (0x0x7f53c30bdd68) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+QSinglePointEvent (0x0x7f53c30bddd0) 0
+ primary-for QEnterEvent (0x0x7f53c30bdd68)
+QPointerEvent (0x0x7f53c30bde38) 0
+ primary-for QSinglePointEvent (0x0x7f53c30bddd0)
+QInputEvent (0x0x7f53c30bdea0) 0
+ primary-for QPointerEvent (0x0x7f53c30bde38)
+QEvent (0x0x7f53c314d420) 0
+ primary-for QInputEvent (0x0x7f53c30bdea0)
+
+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 (0x0x7f53c30bdf08) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+QSinglePointEvent (0x0x7f53c30bdf70) 0
+ primary-for QMouseEvent (0x0x7f53c30bdf08)
+QPointerEvent (0x0x7f53c30bdbc8) 0
+ primary-for QSinglePointEvent (0x0x7f53c30bdf70)
+QInputEvent (0x0x7f53c3162000) 0
+ primary-for QPointerEvent (0x0x7f53c30bdbc8)
+QEvent (0x0x7f53c314dba0) 0
+ primary-for QInputEvent (0x0x7f53c3162000)
+
+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 (0x0x7f53c3162068) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+QSinglePointEvent (0x0x7f53c31620d0) 0
+ primary-for QHoverEvent (0x0x7f53c3162068)
+QPointerEvent (0x0x7f53c3162138) 0
+ primary-for QSinglePointEvent (0x0x7f53c31620d0)
+QInputEvent (0x0x7f53c31621a0) 0
+ primary-for QPointerEvent (0x0x7f53c3162138)
+QEvent (0x0x7f53c3174180) 0
+ primary-for QInputEvent (0x0x7f53c31621a0)
+
+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 (0x0x7f53c3162208) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+QSinglePointEvent (0x0x7f53c3162270) 0
+ primary-for QWheelEvent (0x0x7f53c3162208)
+QPointerEvent (0x0x7f53c31622d8) 0
+ primary-for QSinglePointEvent (0x0x7f53c3162270)
+QInputEvent (0x0x7f53c3162340) 0
+ primary-for QPointerEvent (0x0x7f53c31622d8)
+QEvent (0x0x7f53c31745a0) 0
+ primary-for QInputEvent (0x0x7f53c3162340)
+
+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 (0x0x7f53c31623a8) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+QSinglePointEvent (0x0x7f53c3162410) 0
+ primary-for QTabletEvent (0x0x7f53c31623a8)
+QPointerEvent (0x0x7f53c3162478) 0
+ primary-for QSinglePointEvent (0x0x7f53c3162410)
+QInputEvent (0x0x7f53c31624e0) 0
+ primary-for QPointerEvent (0x0x7f53c3162478)
+QEvent (0x0x7f53c3174a80) 0
+ primary-for QInputEvent (0x0x7f53c31624e0)
+
+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 (0x0x7f53c3162548) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+QSinglePointEvent (0x0x7f53c31625b0) 0
+ primary-for QNativeGestureEvent (0x0x7f53c3162548)
+QPointerEvent (0x0x7f53c3162618) 0
+ primary-for QSinglePointEvent (0x0x7f53c31625b0)
+QInputEvent (0x0x7f53c3162680) 0
+ primary-for QPointerEvent (0x0x7f53c3162618)
+QEvent (0x0x7f53c31a1360) 0
+ primary-for QInputEvent (0x0x7f53c3162680)
+
+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 (0x0x7f53c31626e8) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+QInputEvent (0x0x7f53c3162750) 0
+ primary-for QKeyEvent (0x0x7f53c31626e8)
+QEvent (0x0x7f53c31a1900) 0
+ primary-for QInputEvent (0x0x7f53c3162750)
+
+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 (0x0x7f53c31627b8) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+QEvent (0x0x7f53c31a1f00) 0
+ primary-for QFocusEvent (0x0x7f53c31627b8)
+
+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 (0x0x7f53c3162820) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+QEvent (0x0x7f53c31d12a0) 0
+ primary-for QPaintEvent (0x0x7f53c3162820)
+
+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 (0x0x7f53c3162888) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+QEvent (0x0x7f53c31d15a0) 0
+ primary-for QMoveEvent (0x0x7f53c3162888)
+
+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 (0x0x7f53c31628f0) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+QEvent (0x0x7f53c31d1900) 0
+ primary-for QExposeEvent (0x0x7f53c31628f0)
+
+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 (0x0x7f53c3162958) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+QEvent (0x0x7f53c31d1ba0) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f53c3162958)
+
+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 (0x0x7f53c31629c0) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+QEvent (0x0x7f53c31d1ea0) 0
+ primary-for QResizeEvent (0x0x7f53c31629c0)
+
+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 (0x0x7f53c3162a28) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+QEvent (0x0x7f53c3202240) 0
+ primary-for QCloseEvent (0x0x7f53c3162a28)
+
+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 (0x0x7f53c3162a90) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+QEvent (0x0x7f53c32022a0) 0
+ primary-for QIconDragEvent (0x0x7f53c3162a90)
+
+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 (0x0x7f53c3162af8) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+QEvent (0x0x7f53c3202300) 0
+ primary-for QShowEvent (0x0x7f53c3162af8)
+
+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 (0x0x7f53c3162b60) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+QEvent (0x0x7f53c3202360) 0
+ primary-for QHideEvent (0x0x7f53c3162b60)
+
+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 (0x0x7f53c3162bc8) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+QInputEvent (0x0x7f53c3162c30) 0
+ primary-for QContextMenuEvent (0x0x7f53c3162bc8)
+QEvent (0x0x7f53c32023c0) 0
+ primary-for QInputEvent (0x0x7f53c3162c30)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f53c3202960) 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 (0x0x7f53c3162c98) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+QEvent (0x0x7f53c3202900) 0
+ primary-for QInputMethodEvent (0x0x7f53c3162c98)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f53c2ec3000) 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 (0x0x7f53c2eadc98) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+QEvent (0x0x7f53c2e9ef60) 0
+ primary-for QInputMethodQueryEvent (0x0x7f53c2eadc98)
+
+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 (0x0x7f53c2f36d68) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+QEvent (0x0x7f53c2f2ef60) 0
+ primary-for QDropEvent (0x0x7f53c2f36d68)
+
+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 (0x0x7f53c2f36dd0) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+QDropEvent (0x0x7f53c2f36e38) 0
+ primary-for QDragMoveEvent (0x0x7f53c2f36dd0)
+QEvent (0x0x7f53c2f5a6c0) 0
+ primary-for QDropEvent (0x0x7f53c2f36e38)
+
+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 (0x0x7f53c2f36ea0) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+QDragMoveEvent (0x0x7f53c2f36f08) 0
+ primary-for QDragEnterEvent (0x0x7f53c2f36ea0)
+QDropEvent (0x0x7f53c2f36f70) 0
+ primary-for QDragMoveEvent (0x0x7f53c2f36f08)
+QEvent (0x0x7f53c2f5ab40) 0
+ primary-for QDropEvent (0x0x7f53c2f36f70)
+
+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 (0x0x7f53c2f71000) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+QEvent (0x0x7f53c2f5aba0) 0
+ primary-for QDragLeaveEvent (0x0x7f53c2f71000)
+
+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 (0x0x7f53c2f71068) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+QEvent (0x0x7f53c2f5ac00) 0
+ primary-for QHelpEvent (0x0x7f53c2f71068)
+
+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 (0x0x7f53c2f710d0) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+QEvent (0x0x7f53c2f82120) 0
+ primary-for QStatusTipEvent (0x0x7f53c2f710d0)
+
+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 (0x0x7f53c2f71138) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+QEvent (0x0x7f53c2f823c0) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f53c2f71138)
+
+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 (0x0x7f53c2f711a0) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+QEvent (0x0x7f53c2f82660) 0
+ primary-for QActionEvent (0x0x7f53c2f711a0)
+
+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 (0x0x7f53c2f71208) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+QEvent (0x0x7f53c2f829c0) 0
+ primary-for QFileOpenEvent (0x0x7f53c2f71208)
+
+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 (0x0x7f53c2f71270) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+QEvent (0x0x7f53c2f82cc0) 0
+ primary-for QToolBarChangeEvent (0x0x7f53c2f71270)
+
+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 (0x0x7f53c2f712d8) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+QEvent (0x0x7f53c2fb0000) 0
+ primary-for QShortcutEvent (0x0x7f53c2f712d8)
+
+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 (0x0x7f53c2f71340) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+QEvent (0x0x7f53c2fb0360) 0
+ primary-for QWindowStateChangeEvent (0x0x7f53c2f71340)
+
+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 (0x0x7f53c2f713a8) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+QPointerEvent (0x0x7f53c2f71410) 0
+ primary-for QTouchEvent (0x0x7f53c2f713a8)
+QInputEvent (0x0x7f53c2f71478) 0
+ primary-for QPointerEvent (0x0x7f53c2f71410)
+QEvent (0x0x7f53c2fb0660) 0
+ primary-for QInputEvent (0x0x7f53c2f71478)
+
+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 (0x0x7f53c2f714e0) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+QEvent (0x0x7f53c2fb09c0) 0
+ primary-for QScrollPrepareEvent (0x0x7f53c2f714e0)
+
+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 (0x0x7f53c2f71548) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+QEvent (0x0x7f53c2fb0de0) 0
+ primary-for QScrollEvent (0x0x7f53c2f71548)
+
+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 (0x0x7f53c2f715b0) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+QEvent (0x0x7f53c2fea1e0) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f53c2f715b0)
+
+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 (0x0x7f53c2f71618) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+QEvent (0x0x7f53c2fea540) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f53c2f71618)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f53c2fea840) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f53c307dae0) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f53c307dcc0) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f53c2cfbf60) 0
+
+Class QBrushDataPointerDeleter
+ size=1 align=1
+ base size=0 base align=1
+QBrushDataPointerDeleter (0x0x7f53c2d8b960) 0 empty
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f53c2d8b9c0) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f53c2b24120) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f53c2b24360) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f53c2b24300) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f53c2b47410) 0
+QGradient (0x0x7f53c2b9d0c0) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f53c2b47478) 0
+QGradient (0x0x7f53c2b9d1e0) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f53c2b474e0) 0
+QGradient (0x0x7f53c2b9d300) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f53c2b9d3c0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f53c2c064e0) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f53c2c06480) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f53c2c4a8a0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f53c2c8f720) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f53c29655b0) 0
+QTextFormat (0x0x7f53c2991060) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f53c29f3820) 0
+QTextFormat (0x0x7f53c29f0900) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f53c2a35958) 0
+QTextFormat (0x0x7f53c2a3d240) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f53c2a6aa28) 0
+QTextCharFormat (0x0x7f53c2a6aa90) 0
+QTextFormat (0x0x7f53c2a704e0) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f53c269ebc8) 0
+QTextFormat (0x0x7f53c26a4720) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f53c26dad00) 0
+QTextFrameFormat (0x0x7f53c26dad68) 0
+QTextFormat (0x0x7f53c26dbf00) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f53c271bea0) 0
+QTextCharFormat (0x0x7f53c271bf08) 0
+QTextFormat (0x0x7f53c27245a0) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f53c2764c00) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f53c27f14e0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f53c27f1900) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f53c27f18a0) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f53c2881ba0) 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 (0x0x7f53c24a7060) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f53c24a7300) 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 (0x0x7f53c288faf8) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+QObject (0x0x7f53c24a72a0) 0
+ primary-for QTextDocument (0x0x7f53c288faf8)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f53c24a7ba0) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f53c259a9c0) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f53c259aa20) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f53c259aa80) 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 (0x0x7f53c25a5068) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+QObject (0x0x7f53c259a960) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f53c25a5068)
+
+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 (0x0x7f53c2673480) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f53c26736c0) 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 (0x0x7f53c2673720) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f53c2673660) 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 (0x0x7f53c22c2060) 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 (0x0x7f53c22c2420) 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 (0x0x7f53c22c2480) 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 (0x0x7f53c22c24e0) 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 (0x0x7f53c22c2540) 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 (0x0x7f53c22c25a0) 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 (0x0x7f53c22c2600) 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 (0x0x7f53c22c26c0) 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 (0x0x7f53c22c2720) 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 (0x0x7f53c22c2780) 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 (0x0x7f53c2669f08) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+QAccessibleEvent (0x0x7f53c22c2cc0) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f53c2669f08)
+
+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 (0x0x7f53c2669f70) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+QAccessibleEvent (0x0x7f53c230b0c0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f53c2669f70)
+
+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 (0x0x7f53c2314000) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f53c2314068) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f53c2314000)
+QAccessibleEvent (0x0x7f53c230b4e0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f53c2314068)
+
+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 (0x0x7f53c23140d0) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f53c2314138) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f53c23140d0)
+QAccessibleEvent (0x0x7f53c230b960) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f53c2314138)
+
+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 (0x0x7f53c23141a0) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f53c2314208) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f53c23141a0)
+QAccessibleEvent (0x0x7f53c230bd80) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f53c2314208)
+
+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 (0x0x7f53c2314270) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7f53c23142d8) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f53c2314270)
+QAccessibleEvent (0x0x7f53c23311e0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f53c23142d8)
+
+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 (0x0x7f53c2314340) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+QAccessibleEvent (0x0x7f53c2331660) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f53c2314340)
+
+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 (0x0x7f53c23143a8) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+QAccessibleEvent (0x0x7f53c2331a80) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f53c23143a8)
+
+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 (0x0x7f53c2353360) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f53c2353600) 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 (0x0x7f53c2314410) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+QObject (0x0x7f53c23535a0) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f53c2314410)
+
+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 (0x0x7f53c2314478) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+QAccessibleInterface (0x0x7f53c23536c0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f53c2314478)
+
+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 (0x0x7f53c23144e0) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+QAccessibleObject (0x0x7f53c2314548) 0
+ primary-for QAccessibleApplication (0x0x7f53c23144e0)
+QAccessibleInterface (0x0x7f53c2353720) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f53c2314548)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f53c23537e0) 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 (0x0x7f53c23145b0) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+QObject (0x0x7f53c2353780) 0
+ primary-for QAccessiblePlugin (0x0x7f53c23145b0)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f53c2353900) 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 (0x0x7f53c2314618) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+QObject (0x0x7f53c23538a0) 0
+ primary-for QAction (0x0x7f53c2314618)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f53c239f240) 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 (0x0x7f53c2314680) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+QObject (0x0x7f53c239f1e0) 0
+ primary-for QActionGroup (0x0x7f53c2314680)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f53c239f4e0) 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 (0x0x7f53c239fde0) 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 (0x0x7f53c2314820) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+QPixmap (0x0x7f53c2314888) 0
+ primary-for QBitmap (0x0x7f53c2314820)
+QPaintDevice (0x0x7f53c23f8480) 0
+ primary-for QPixmap (0x0x7f53c2314888)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f53c2435000) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f53c24951e0) 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 (0x0x7f53c24418c0) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+QObject (0x0x7f53c2495120) 0
+ primary-for QWindow (0x0x7f53c24418c0)
+QSurface (0x0x7f53c2495180) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f53c2495a80) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f53c2495ba0) 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 (0x0x7f53c248d750) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+QObject (0x0x7f53c2495b40) 0
+ primary-for QClipboard (0x0x7f53c248d750)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f53c2495cc0) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f53c211df60) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f53c2198e40) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f53c2198f00) 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 (0x0x7f53c21a2c98) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+QObject (0x0x7f53c2198ea0) 0
+ primary-for QDrag (0x0x7f53c21a2c98)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f53c21be120) 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 (0x0x7f53c21a2d00) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+QAbstractItemModel (0x0x7f53c21a2d68) 0
+ primary-for QFileSystemModel (0x0x7f53c21a2d00)
+QObject (0x0x7f53c21be0c0) 0
+ primary-for QAbstractItemModel (0x0x7f53c21a2d68)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f53c21be7e0) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f53c2234360) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f53c227d000) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f53c1fb1c60) 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 (0x0x7f53c1ebbd68) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+QObject (0x0x7f53c1fb1c00) 0
+ primary-for QGenericPlugin (0x0x7f53c1ebbd68)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f53c1fb1d20) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f53c1fb1de0) 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 (0x0x7f53c1ebbdd0) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+QObject (0x0x7f53c1fb1d80) 0
+ primary-for QInputMethod (0x0x7f53c1ebbdd0)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f53c1ff90c0) 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 (0x0x7f53c1ebbe38) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+QCoreApplication (0x0x7f53c1ebbea0) 0
+ primary-for QGuiApplication (0x0x7f53c1ebbe38)
+QObject (0x0x7f53c1ff9060) 0
+ primary-for QCoreApplication (0x0x7f53c1ebbea0)
+
+Class QNativeInterface::QX11Application::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QX11Application::TypeInfo (0x0x7f53c1ff93c0) 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 (0x0x7f53c1ff9360) 0 nearly-empty
+ vptr=((& QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE) + 16)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f53c1ff9480) 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 (0x0x7f53c1ff9420) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f53c1ff9540) 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 (0x0x7f53c1ebbf08) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+QObject (0x0x7f53c1ff94e0) 0
+ primary-for QIconEnginePlugin (0x0x7f53c1ebbf08)
+
+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 (0x0x7f53c1ff9600) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f53c1ff9840) 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 (0x0x7f53c1ebbf70) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+QObject (0x0x7f53c1ff97e0) 0
+ primary-for QImageIOPlugin (0x0x7f53c1ebbf70)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f53c1ff9cc0) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f53c1ff9d80) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f53c1ff9e40) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f53c1d0fd20) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f53c1e824e0) 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 (0x0x7f53c1dd0478) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+QObject (0x0x7f53c1e82480) 0
+ primary-for QMovie (0x0x7f53c1dd0478)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f53c1e828a0) 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 (0x0x7f53c1ad5230) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+QObject (0x0x7f53c1e827e0) 0
+ primary-for QOffscreenSurface (0x0x7f53c1ad5230)
+QSurface (0x0x7f53c1e82840) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f53c1e82b40) 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 (0x0x7f53c1dd04e0) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+QObject (0x0x7f53c1e82ae0) 0
+ primary-for QOpenGLContextGroup (0x0x7f53c1dd04e0)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f53c1e82d20) 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 (0x0x7f53c1dd0548) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+QObject (0x0x7f53c1e82cc0) 0
+ primary-for QOpenGLContext (0x0x7f53c1dd0548)
+
+Class QNativeInterface::QGLXContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QGLXContext::TypeInfo (0x0x7f53c1e82f60) 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 (0x0x7f53c1e82f00) 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 (0x0x7f53c1734060) 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 (0x0x7f53c1734000) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f53c17340c0) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f53c1734720) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f53c17346c0) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f53c1dd08f0) 0
+QOpenGLFunctions (0x0x7f53c1887ea0) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f53c152c240) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f53c1dd0958) 0
+QOpenGLFunctionsPrivate (0x0x7f53c152c1e0) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f53c1690f00) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f53c1361780) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f53c148a720) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f53c148a6c0) 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 (0x0x7f53c1170068) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+QPaintDevice (0x0x7f53c1157f00) 0
+ primary-for QPagedPaintDevice (0x0x7f53c1170068)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f53c11850c0) 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 (0x0x7f53c117d0e0) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+QWindow (0x0x7f53c117d150) 0
+ primary-for QPaintDeviceWindow (0x0x7f53c117d0e0)
+QObject (0x0x7f53c1157f60) 0
+ primary-for QWindow (0x0x7f53c117d150)
+QSurface (0x0x7f53c1185000) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+QPaintDevice (0x0x7f53c1185060) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f53c11852a0) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f53c1185240) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f53c1035f00) 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 (0x0x7f53c0c96960) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f53c0c96f60) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f53c0cfdc60) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f53c0cfdc00) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f53c0e60300) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f53c0e60ae0) 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 (0x0x7f53c0e7f700) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+QObject (0x0x7f53c0e60a20) 0
+ primary-for QPdfWriter (0x0x7f53c0e7f700)
+QPagedPaintDevice (0x0x7f53c0e66138) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+QPaintDevice (0x0x7f53c0e60a80) 16
+ primary-for QPagedPaintDevice (0x0x7f53c0e66138)
+
+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 (0x0x7f53c0e661a0) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+QPaintDevice (0x0x7f53c0e60cc0) 0
+ primary-for QPicture (0x0x7f53c0e661a0)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f53c0aef9c0) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f53c0aef960) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f53c0b60ba0) 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 (0x0x7f53c0b69958) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+QPaintDeviceWindow (0x0x7f53c0b761c0) 0
+ primary-for QRasterWindow (0x0x7f53c0b69958)
+QWindow (0x0x7f53c0b76230) 0
+ primary-for QPaintDeviceWindow (0x0x7f53c0b761c0)
+QObject (0x0x7f53c0b60a80) 0
+ primary-for QWindow (0x0x7f53c0b76230)
+QSurface (0x0x7f53c0b60ae0) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+QPaintDevice (0x0x7f53c0b60b40) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f53c0b938a0) 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 (0x0x7f53c0b69a28) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+QObject (0x0x7f53c0b93840) 0
+ primary-for QSessionManager (0x0x7f53c0b69a28)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f53c0b93a80) 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 (0x0x7f53c0b69a90) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+QObject (0x0x7f53c0b93a20) 0
+ primary-for QShortcut (0x0x7f53c0b69a90)
+
+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 (0x0x7f53c0b93f60) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f53c0c6bea0) 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 (0x0x7f53c0c72208) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+QAbstractItemModel (0x0x7f53c0c72270) 0
+ primary-for QStandardItemModel (0x0x7f53c0c72208)
+QObject (0x0x7f53c0c6be40) 0
+ primary-for QAbstractItemModel (0x0x7f53c0c72270)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f53c09011e0) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f53c09a60c0) 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 (0x0x7f53c0988750) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+QObject (0x0x7f53c09a6060) 0
+ primary-for QStyleHints (0x0x7f53c0988750)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f53c09a62a0) 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 (0x0x7f53c09887b8) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+QObject (0x0x7f53c09a6240) 0
+ primary-for QTextObject (0x0x7f53c09887b8)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f53c09a6480) 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 (0x0x7f53c0988820) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+QTextObject (0x0x7f53c0988888) 0
+ primary-for QTextBlockGroup (0x0x7f53c0988820)
+QObject (0x0x7f53c09a6420) 0
+ primary-for QTextObject (0x0x7f53c0988888)
+
+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 (0x0x7f53c09a6600) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f53c09a66c0) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f53c09a6720) 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 (0x0x7f53c09888f0) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+QTextObject (0x0x7f53c0988958) 0
+ primary-for QTextFrame (0x0x7f53c09888f0)
+QObject (0x0x7f53c09a6660) 0
+ primary-for QTextObject (0x0x7f53c0988958)
+
+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 (0x0x7f53c0a216c0) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f53c0a21780) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f53c0a21720) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f53c06c5360) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f53c070d420) 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 (0x0x7f53c070a750) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+QObject (0x0x7f53c070d3c0) 0
+ primary-for QSyntaxHighlighter (0x0x7f53c070a750)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f53c070d5a0) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f53c070d600) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f53c070d6c0) 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 (0x0x7f53c070a7b8) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+QTextBlockGroup (0x0x7f53c070a820) 0
+ primary-for QTextList (0x0x7f53c070a7b8)
+QTextObject (0x0x7f53c070a888) 0
+ primary-for QTextBlockGroup (0x0x7f53c070a820)
+QObject (0x0x7f53c070d660) 0
+ primary-for QTextObject (0x0x7f53c070a888)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f53c070da80) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f53c0752300) 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 (0x0x7f53c070a8f0) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+QTextFrame (0x0x7f53c070a958) 0
+ primary-for QTextTable (0x0x7f53c070a8f0)
+QTextObject (0x0x7f53c070a9c0) 0
+ primary-for QTextFrame (0x0x7f53c070a958)
+QObject (0x0x7f53c07522a0) 0
+ primary-for QTextObject (0x0x7f53c070a9c0)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f53c07526c0) 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 (0x0x7f53c070aa28) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+QObject (0x0x7f53c0752660) 0
+ primary-for QUndoGroup (0x0x7f53c070aa28)
+
+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 (0x0x7f53c0752840) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f53c0752900) 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 (0x0x7f53c070aa90) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+QObject (0x0x7f53c07528a0) 0
+ primary-for QUndoStack (0x0x7f53c070aa90)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f53c0752ae0) 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 (0x0x7f53c070aaf8) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+QObject (0x0x7f53c0752a80) 0
+ primary-for QValidator (0x0x7f53c070aaf8)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f53c0752d80) 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 (0x0x7f53c070ab60) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+QValidator (0x0x7f53c070abc8) 0
+ primary-for QIntValidator (0x0x7f53c070ab60)
+QObject (0x0x7f53c0752d20) 0
+ primary-for QValidator (0x0x7f53c070abc8)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f53c0752f60) 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 (0x0x7f53c070ac30) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+QValidator (0x0x7f53c070ac98) 0
+ primary-for QDoubleValidator (0x0x7f53c070ac30)
+QObject (0x0x7f53c0752f00) 0
+ primary-for QValidator (0x0x7f53c070ac98)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f53c07c1360) 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 (0x0x7f53c070ad00) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+QValidator (0x0x7f53c070ad68) 0
+ primary-for QRegularExpressionValidator (0x0x7f53c070ad00)
+QObject (0x0x7f53c07c1300) 0
+ primary-for QValidator (0x0x7f53c070ad68)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f53c07c1540) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f53c07c14e0) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f53c086f6c0) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f53c086f7e0) 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 (0x0x7f53c0825f50) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+QObject (0x0x7f53c086f720) 0
+ primary-for QWidget (0x0x7f53c0825f50)
+QPaintDevice (0x0x7f53c086f780) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f53c0586180) 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 (0x0x7f53c087b2d8) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+QWidget (0x0x7f53c0572930) 0
+ primary-for QAbstractButton (0x0x7f53c087b2d8)
+QObject (0x0x7f53c05860c0) 0
+ primary-for QWidget (0x0x7f53c0572930)
+QPaintDevice (0x0x7f53c0586120) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f53c05863c0) 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 (0x0x7f53c087b340) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+QWidget (0x0x7f53c0572af0) 0
+ primary-for QAbstractSpinBox (0x0x7f53c087b340)
+QObject (0x0x7f53c0586300) 0
+ primary-for QWidget (0x0x7f53c0572af0)
+QPaintDevice (0x0x7f53c0586360) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f53c0586c00) 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 (0x0x7f53c087b478) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+QWidget (0x0x7f53c05c7620) 0
+ primary-for QAbstractSlider (0x0x7f53c087b478)
+QObject (0x0x7f53c0586b40) 0
+ primary-for QWidget (0x0x7f53c05c7620)
+QPaintDevice (0x0x7f53c0586ba0) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f53c0586e40) 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 (0x0x7f53c087b4e0) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+QAbstractSlider (0x0x7f53c087b548) 0
+ primary-for QSlider (0x0x7f53c087b4e0)
+QWidget (0x0x7f53c05c7d20) 0
+ primary-for QAbstractSlider (0x0x7f53c087b548)
+QObject (0x0x7f53c0586d80) 0
+ primary-for QWidget (0x0x7f53c05c7d20)
+QPaintDevice (0x0x7f53c0586de0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f53c063f120) 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 (0x0x7f53c087b5b0) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+QObject (0x0x7f53c063f0c0) 0
+ primary-for QStyle (0x0x7f53c087b5b0)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f53c02d8360) 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 (0x0x7f53c087b7b8) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+QWidget (0x0x7f53c068fa80) 0
+ primary-for QTabBar (0x0x7f53c087b7b8)
+QObject (0x0x7f53c02d82a0) 0
+ primary-for QWidget (0x0x7f53c068fa80)
+QPaintDevice (0x0x7f53c02d8300) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f53c02d8660) 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 (0x0x7f53c087b820) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+QWidget (0x0x7f53c031e310) 0
+ primary-for QTabWidget (0x0x7f53c087b820)
+QObject (0x0x7f53c02d85a0) 0
+ primary-for QWidget (0x0x7f53c031e310)
+QPaintDevice (0x0x7f53c02d8600) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f53c02d8a20) 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 (0x0x7f53c087b888) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+QWidget (0x0x7f53c031e9a0) 0
+ primary-for QRubberBand (0x0x7f53c087b888)
+QObject (0x0x7f53c02d8960) 0
+ primary-for QWidget (0x0x7f53c031e9a0)
+QPaintDevice (0x0x7f53c02d89c0) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f53c02d8e40) 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 (0x0x7f53c087b8f0) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+QWidget (0x0x7f53c031ee70) 0
+ primary-for QFrame (0x0x7f53c087b8f0)
+QObject (0x0x7f53c02d8d80) 0
+ primary-for QWidget (0x0x7f53c031ee70)
+QPaintDevice (0x0x7f53c02d8de0) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f53c039c180) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f53c087b958) 0
+QStyleOption (0x0x7f53c039c1e0) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f53d1a3e208) 0
+QStyleOption (0x0x7f53c039c420) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f53d1a3e340) 0
+QStyleOption (0x0x7f53c039ca20) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f53d1a3e3a8) 0
+QStyleOption (0x0x7f53c039cc60) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f53c087b9c0) 0
+QStyleOption (0x0x7f53c039cea0) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7f53c087ba28) 0
+QStyleOptionHeader (0x0x7f53c087ba90) 0
+QStyleOption (0x0x7f53c0421120) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f53c087bb60) 0
+QStyleOption (0x0x7f53c04214e0) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f53c087bc98) 0
+QStyleOption (0x0x7f53c0421ae0) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f53c087bea0) 0
+QStyleOption (0x0x7f53c00be300) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f53c013a000) 0
+QStyleOption (0x0x7f53c00be900) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f53c013a068) 0
+QStyleOption (0x0x7f53c00beb40) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f53c013a0d0) 0
+QStyleOption (0x0x7f53c00bed80) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f53c013a138) 0
+QStyleOption (0x0x7f53c015e000) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f53c013a270) 0
+QStyleOption (0x0x7f53c015e600) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f53c013a2d8) 0
+QStyleOption (0x0x7f53c015e840) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f53c013a340) 0
+QStyleOption (0x0x7f53c015eae0) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f53c013a3a8) 0
+QStyleOptionComplex (0x0x7f53c013a410) 0
+QStyleOption (0x0x7f53c015ed80) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f53c013a4e0) 0
+QStyleOptionComplex (0x0x7f53c013a548) 0
+QStyleOption (0x0x7f53c01dd120) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f53c013a618) 0
+QStyleOptionComplex (0x0x7f53c013a680) 0
+QStyleOption (0x0x7f53c01dd360) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f53c013a7b8) 0
+QStyleOptionComplex (0x0x7f53c013a820) 0
+QStyleOption (0x0x7f53c01dd960) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f53c013a888) 0
+QStyleOptionComplex (0x0x7f53c013a8f0) 0
+QStyleOption (0x0x7f53c01ddba0) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f53c013a958) 0
+QStyleOptionComplex (0x0x7f53c013a9c0) 0
+QStyleOption (0x0x7f53c01ddde0) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f53c013aa28) 0
+QStyleOptionComplex (0x0x7f53c013aa90) 0
+QStyleOption (0x0x7f53c025e060) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f53c013aaf8) 0
+QStyleOption (0x0x7f53c025e2a0) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f53c025e600) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f53c013ab60) 0
+QStyleHintReturn (0x0x7f53c025e660) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f53c013ac30) 0
+QStyleHintReturn (0x0x7f53c025e6c0) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f53c025e840) 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 (0x0x7f53c013ad00) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+QObject (0x0x7f53c025e7e0) 0
+ primary-for QAbstractItemDelegate (0x0x7f53c013ad00)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f53c025ea80) 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 (0x0x7f53c013ad68) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+QFrame (0x0x7f53c013add0) 0
+ primary-for QAbstractScrollArea (0x0x7f53c013ad68)
+QWidget (0x0x7f53c02872a0) 0
+ primary-for QFrame (0x0x7f53c013add0)
+QObject (0x0x7f53c025e9c0) 0
+ primary-for QWidget (0x0x7f53c02872a0)
+QPaintDevice (0x0x7f53c025ea20) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f53c025ed80) 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 (0x0x7f53c013ae38) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+QAbstractScrollArea (0x0x7f53c013aea0) 0
+ primary-for QAbstractItemView (0x0x7f53c013ae38)
+QFrame (0x0x7f53c013af08) 0
+ primary-for QAbstractScrollArea (0x0x7f53c013aea0)
+QWidget (0x0x7f53c0287690) 0
+ primary-for QFrame (0x0x7f53c013af08)
+QObject (0x0x7f53c025ecc0) 0
+ primary-for QWidget (0x0x7f53c0287690)
+QPaintDevice (0x0x7f53c025ed20) 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 (0x0x7f53bff174d0) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+QAccessibleObject (0x0x7f53bff44000) 0
+ primary-for QAccessibleWidget (0x0x7f53bff174d0)
+QAccessibleInterface (0x0x7f53bfefe7e0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f53bff44000)
+QAccessibleActionInterface (0x0x7f53bfefe840) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f53bfefe960) 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 (0x0x7f53bff44068) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+QGuiApplication (0x0x7f53bff440d0) 0
+ primary-for QApplication (0x0x7f53bff44068)
+QCoreApplication (0x0x7f53bff44138) 0
+ primary-for QGuiApplication (0x0x7f53bff440d0)
+QObject (0x0x7f53bfefe900) 0
+ primary-for QCoreApplication (0x0x7f53bff44138)
+
+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 (0x0x7f53bfefec00) 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 (0x0x7f53bff441a0) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+QLayoutItem (0x0x7f53bfefee40) 0
+ primary-for QSpacerItem (0x0x7f53bff441a0)
+
+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 (0x0x7f53bff44208) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+QLayoutItem (0x0x7f53bff890c0) 0
+ primary-for QWidgetItem (0x0x7f53bff44208)
+
+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 (0x0x7f53bff44270) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+QWidgetItem (0x0x7f53bff442d8) 0
+ primary-for QWidgetItemV2 (0x0x7f53bff44270)
+QLayoutItem (0x0x7f53bff892a0) 0
+ primary-for QWidgetItem (0x0x7f53bff442d8)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f53bff89420) 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 (0x0x7f53bff17e70) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+QObject (0x0x7f53bff89360) 0
+ primary-for QLayout (0x0x7f53bff17e70)
+QLayoutItem (0x0x7f53bff893c0) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f53bff89720) 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 (0x0x7f53bff44340) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+QLayout (0x0x7f53bffa13f0) 0
+ primary-for QGridLayout (0x0x7f53bff44340)
+QObject (0x0x7f53bff89660) 0
+ primary-for QLayout (0x0x7f53bffa13f0)
+QLayoutItem (0x0x7f53bff896c0) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f53bff899c0) 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 (0x0x7f53bff443a8) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+QLayout (0x0x7f53bffa1620) 0
+ primary-for QBoxLayout (0x0x7f53bff443a8)
+QObject (0x0x7f53bff89900) 0
+ primary-for QLayout (0x0x7f53bffa1620)
+QLayoutItem (0x0x7f53bff89960) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f53bff89c00) 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 (0x0x7f53bff44410) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+QBoxLayout (0x0x7f53bff44478) 0
+ primary-for QHBoxLayout (0x0x7f53bff44410)
+QLayout (0x0x7f53bffa1a80) 0
+ primary-for QBoxLayout (0x0x7f53bff44478)
+QObject (0x0x7f53bff89b40) 0
+ primary-for QLayout (0x0x7f53bffa1a80)
+QLayoutItem (0x0x7f53bff89ba0) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f53bff89d80) 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 (0x0x7f53bff444e0) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+QBoxLayout (0x0x7f53bff44548) 0
+ primary-for QVBoxLayout (0x0x7f53bff444e0)
+QLayout (0x0x7f53bffa1b60) 0
+ primary-for QBoxLayout (0x0x7f53bff44548)
+QObject (0x0x7f53bff89cc0) 0
+ primary-for QLayout (0x0x7f53bffa1b60)
+QLayoutItem (0x0x7f53bff89d20) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f53bff89ea0) 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 (0x0x7f53bff445b0) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+QObject (0x0x7f53bff89e40) 0
+ primary-for QButtonGroup (0x0x7f53bff445b0)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f53c0025120) 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 (0x0x7f53bff44618) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+QWidget (0x0x7f53bffa1d90) 0
+ primary-for QCalendarWidget (0x0x7f53bff44618)
+QObject (0x0x7f53c0025060) 0
+ primary-for QWidget (0x0x7f53bffa1d90)
+QPaintDevice (0x0x7f53c00250c0) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f53c00255a0) 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 (0x0x7f53bff44680) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+QAbstractButton (0x0x7f53bff446e8) 0
+ primary-for QCheckBox (0x0x7f53bff44680)
+QWidget (0x0x7f53c00285b0) 0
+ primary-for QAbstractButton (0x0x7f53bff446e8)
+QObject (0x0x7f53c00254e0) 0
+ primary-for QWidget (0x0x7f53c00285b0)
+QPaintDevice (0x0x7f53c0025540) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f53c00257e0) 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 (0x0x7f53bff44750) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+QWidget (0x0x7f53c0028770) 0
+ primary-for QDialog (0x0x7f53bff44750)
+QObject (0x0x7f53c0025720) 0
+ primary-for QWidget (0x0x7f53c0028770)
+QPaintDevice (0x0x7f53c0025780) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f53c0025a20) 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 (0x0x7f53bff447b8) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+QDialog (0x0x7f53bff44820) 0
+ primary-for QColorDialog (0x0x7f53bff447b8)
+QWidget (0x0x7f53c0028a10) 0
+ primary-for QDialog (0x0x7f53bff44820)
+QObject (0x0x7f53c0025960) 0
+ primary-for QWidget (0x0x7f53c0028a10)
+QPaintDevice (0x0x7f53c00259c0) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f53bfccf060) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f53bfccf180) 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 (0x0x7f53bff44958) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+QAbstractItemView (0x0x7f53bff449c0) 0
+ primary-for QColumnView (0x0x7f53bff44958)
+QAbstractScrollArea (0x0x7f53bff44a28) 0
+ primary-for QAbstractItemView (0x0x7f53bff449c0)
+QFrame (0x0x7f53bff44a90) 0
+ primary-for QAbstractScrollArea (0x0x7f53bff44a28)
+QWidget (0x0x7f53bfcce1c0) 0
+ primary-for QFrame (0x0x7f53bff44a90)
+QObject (0x0x7f53bfccf0c0) 0
+ primary-for QWidget (0x0x7f53bfcce1c0)
+QPaintDevice (0x0x7f53bfccf120) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f53bfccf3c0) 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 (0x0x7f53bff44af8) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+QWidget (0x0x7f53bfcce380) 0
+ primary-for QComboBox (0x0x7f53bff44af8)
+QObject (0x0x7f53bfccf300) 0
+ primary-for QWidget (0x0x7f53bfcce380)
+QPaintDevice (0x0x7f53bfccf360) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f53bfccf960) 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 (0x0x7f53bff44b60) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+QAbstractButton (0x0x7f53bff44bc8) 0
+ primary-for QPushButton (0x0x7f53bff44b60)
+QWidget (0x0x7f53bfcced90) 0
+ primary-for QAbstractButton (0x0x7f53bff44bc8)
+QObject (0x0x7f53bfccf8a0) 0
+ primary-for QWidget (0x0x7f53bfcced90)
+QPaintDevice (0x0x7f53bfccf900) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f53bfccfba0) 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 (0x0x7f53bff44c30) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+QPushButton (0x0x7f53bff44c98) 0
+ primary-for QCommandLinkButton (0x0x7f53bff44c30)
+QAbstractButton (0x0x7f53bff44d00) 0
+ primary-for QPushButton (0x0x7f53bff44c98)
+QWidget (0x0x7f53bfccef50) 0
+ primary-for QAbstractButton (0x0x7f53bff44d00)
+QObject (0x0x7f53bfccfae0) 0
+ primary-for QWidget (0x0x7f53bfccef50)
+QPaintDevice (0x0x7f53bfccfb40) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f53bfccfd80) 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 (0x0x7f53bff44d68) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+QStyle (0x0x7f53bff44dd0) 0
+ primary-for QCommonStyle (0x0x7f53bff44d68)
+QObject (0x0x7f53bfccfd20) 0
+ primary-for QStyle (0x0x7f53bff44dd0)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f53bfccff60) 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 (0x0x7f53bff44e38) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+QObject (0x0x7f53bfccff00) 0
+ primary-for QCompleter (0x0x7f53bff44e38)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f53bfd85300) 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 (0x0x7f53bff44ea0) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+QObject (0x0x7f53bfd852a0) 0
+ primary-for QDataWidgetMapper (0x0x7f53bff44ea0)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f53bfd85600) 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 (0x0x7f53bff44f08) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+QAbstractSpinBox (0x0x7f53bff44f70) 0
+ primary-for QDateTimeEdit (0x0x7f53bff44f08)
+QWidget (0x0x7f53bfd51b60) 0
+ primary-for QAbstractSpinBox (0x0x7f53bff44f70)
+QObject (0x0x7f53bfd85540) 0
+ primary-for QWidget (0x0x7f53bfd51b60)
+QPaintDevice (0x0x7f53bfd855a0) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f53bfd85ba0) 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 (0x0x7f53bfdc30d0) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+QDateTimeEdit (0x0x7f53bfdc3138) 0
+ primary-for QTimeEdit (0x0x7f53bfdc30d0)
+QAbstractSpinBox (0x0x7f53bfdc31a0) 0
+ primary-for QDateTimeEdit (0x0x7f53bfdc3138)
+QWidget (0x0x7f53bfda13f0) 0
+ primary-for QAbstractSpinBox (0x0x7f53bfdc31a0)
+QObject (0x0x7f53bfd85ae0) 0
+ primary-for QWidget (0x0x7f53bfda13f0)
+QPaintDevice (0x0x7f53bfd85b40) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f53bfd85d20) 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 (0x0x7f53bfdc3208) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+QDateTimeEdit (0x0x7f53bfdc3270) 0
+ primary-for QDateEdit (0x0x7f53bfdc3208)
+QAbstractSpinBox (0x0x7f53bfdc32d8) 0
+ primary-for QDateTimeEdit (0x0x7f53bfdc3270)
+QWidget (0x0x7f53bfda14d0) 0
+ primary-for QAbstractSpinBox (0x0x7f53bfdc32d8)
+QObject (0x0x7f53bfd85c60) 0
+ primary-for QWidget (0x0x7f53bfda14d0)
+QPaintDevice (0x0x7f53bfd85cc0) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f53bfe240c0) 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 (0x0x7f53bfdc3340) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+QAbstractSlider (0x0x7f53bfdc33a8) 0
+ primary-for QDial (0x0x7f53bfdc3340)
+QWidget (0x0x7f53bfda17e0) 0
+ primary-for QAbstractSlider (0x0x7f53bfdc33a8)
+QObject (0x0x7f53bfe24000) 0
+ primary-for QWidget (0x0x7f53bfda17e0)
+QPaintDevice (0x0x7f53bfe24060) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f53bfe24300) 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 (0x0x7f53bfdc3410) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+QWidget (0x0x7f53bfda19a0) 0
+ primary-for QDialogButtonBox (0x0x7f53bfdc3410)
+QObject (0x0x7f53bfe24240) 0
+ primary-for QWidget (0x0x7f53bfda19a0)
+QPaintDevice (0x0x7f53bfe242a0) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f53bfe249c0) 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 (0x0x7f53bfdc3548) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+QWidget (0x0x7f53bfe3cee0) 0
+ primary-for QDockWidget (0x0x7f53bfdc3548)
+QObject (0x0x7f53bfe24900) 0
+ primary-for QWidget (0x0x7f53bfe3cee0)
+QPaintDevice (0x0x7f53bfe24960) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f53bfafb0c0) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f53bfafb720) 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 (0x0x7f53bfdc3750) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+QDialog (0x0x7f53bfdc37b8) 0
+ primary-for QErrorMessage (0x0x7f53bfdc3750)
+QWidget (0x0x7f53bfb121c0) 0
+ primary-for QDialog (0x0x7f53bfdc37b8)
+QObject (0x0x7f53bfafb660) 0
+ primary-for QWidget (0x0x7f53bfb121c0)
+QPaintDevice (0x0x7f53bfafb6c0) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f53bfafb960) 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 (0x0x7f53bfdc3820) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+QDialog (0x0x7f53bfdc3888) 0
+ primary-for QFileDialog (0x0x7f53bfdc3820)
+QWidget (0x0x7f53bfb12380) 0
+ primary-for QDialog (0x0x7f53bfdc3888)
+QObject (0x0x7f53bfafb8a0) 0
+ primary-for QWidget (0x0x7f53bfb12380)
+QPaintDevice (0x0x7f53bfafb900) 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 (0x0x7f53bfdc39c0) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+QAbstractFileIconProvider (0x0x7f53bfb96300) 0
+ primary-for QFileIconProvider (0x0x7f53bfdc39c0)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f53bfb964e0) 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 (0x0x7f53bfdc3a28) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+QWidget (0x0x7f53bfb93620) 0
+ primary-for QFocusFrame (0x0x7f53bfdc3a28)
+QObject (0x0x7f53bfb96420) 0
+ primary-for QWidget (0x0x7f53bfb93620)
+QPaintDevice (0x0x7f53bfb96480) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f53bfb96720) 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 (0x0x7f53bfdc3a90) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+QComboBox (0x0x7f53bfdc3af8) 0
+ primary-for QFontComboBox (0x0x7f53bfdc3a90)
+QWidget (0x0x7f53bfb937e0) 0
+ primary-for QComboBox (0x0x7f53bfdc3af8)
+QObject (0x0x7f53bfb96660) 0
+ primary-for QWidget (0x0x7f53bfb937e0)
+QPaintDevice (0x0x7f53bfb966c0) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f53bfb96de0) 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 (0x0x7f53bfdc3c30) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+QDialog (0x0x7f53bfdc3c98) 0
+ primary-for QFontDialog (0x0x7f53bfdc3c30)
+QWidget (0x0x7f53bfb93ee0) 0
+ primary-for QDialog (0x0x7f53bfdc3c98)
+QObject (0x0x7f53bfb96d20) 0
+ primary-for QWidget (0x0x7f53bfb93ee0)
+QPaintDevice (0x0x7f53bfb96d80) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f53bfc5e4e0) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f53bfc5e540) 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 (0x0x7f53bfdc3dd0) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+QLayout (0x0x7f53bfc37690) 0
+ primary-for QFormLayout (0x0x7f53bfdc3dd0)
+QObject (0x0x7f53bfc5e420) 0
+ primary-for QLayout (0x0x7f53bfc37690)
+QLayoutItem (0x0x7f53bfc5e480) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f53bf8f8a20) 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 (0x0x7f53bf8e2dd0) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+QObject (0x0x7f53bf8f89c0) 0
+ primary-for QGesture (0x0x7f53bf8e2dd0)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f53bf8f8c00) 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 (0x0x7f53bf8e2e38) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+QGesture (0x0x7f53bf8e2ea0) 0
+ primary-for QPanGesture (0x0x7f53bf8e2e38)
+QObject (0x0x7f53bf8f8ba0) 0
+ primary-for QGesture (0x0x7f53bf8e2ea0)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f53bf8f8de0) 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 (0x0x7f53bf8e2f08) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+QGesture (0x0x7f53bf8e2f70) 0
+ primary-for QPinchGesture (0x0x7f53bf8e2f08)
+QObject (0x0x7f53bf8f8d80) 0
+ primary-for QGesture (0x0x7f53bf8e2f70)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f53bf9cf5a0) 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 (0x0x7f53bf9d9680) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+QGesture (0x0x7f53bf9d96e8) 0
+ primary-for QSwipeGesture (0x0x7f53bf9d9680)
+QObject (0x0x7f53bf9cf540) 0
+ primary-for QGesture (0x0x7f53bf9d96e8)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f53bf9cf840) 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 (0x0x7f53bf9d9750) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+QGesture (0x0x7f53bf9d97b8) 0
+ primary-for QTapGesture (0x0x7f53bf9d9750)
+QObject (0x0x7f53bf9cf7e0) 0
+ primary-for QGesture (0x0x7f53bf9d97b8)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f53bf9cfa20) 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 (0x0x7f53bf9d9820) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+QGesture (0x0x7f53bf9d9888) 0
+ primary-for QTapAndHoldGesture (0x0x7f53bf9d9820)
+QObject (0x0x7f53bf9cf9c0) 0
+ primary-for QGesture (0x0x7f53bf9d9888)
+
+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 (0x0x7f53bf9d98f0) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+QEvent (0x0x7f53bf9cfba0) 0
+ primary-for QGestureEvent (0x0x7f53bf9d98f0)
+
+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 (0x0x7f53bf6eb540) 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 (0x0x7f53bf6eb960) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f53bf7ddc00) 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 (0x0x7f53bf803690) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+QObject (0x0x7f53bf7ddb40) 0
+ primary-for QGraphicsObject (0x0x7f53bf803690)
+QGraphicsItem (0x0x7f53bf7ddba0) 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 (0x0x7f53bf6f3680) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+QGraphicsItem (0x0x7f53bf7ddcc0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f53bf6f3680)
+
+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 (0x0x7f53bf6f36e8) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f53bf6f3750) 0
+ primary-for QGraphicsPathItem (0x0x7f53bf6f36e8)
+QGraphicsItem (0x0x7f53bf7ddde0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f53bf6f3750)
+
+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 (0x0x7f53bf6f37b8) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f53bf6f3820) 0
+ primary-for QGraphicsRectItem (0x0x7f53bf6f37b8)
+QGraphicsItem (0x0x7f53bf7ddf00) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f53bf6f3820)
+
+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 (0x0x7f53bf6f3888) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f53bf6f38f0) 0
+ primary-for QGraphicsEllipseItem (0x0x7f53bf6f3888)
+QGraphicsItem (0x0x7f53bf84e0c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f53bf6f38f0)
+
+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 (0x0x7f53bf6f3958) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f53bf6f39c0) 0
+ primary-for QGraphicsPolygonItem (0x0x7f53bf6f3958)
+QGraphicsItem (0x0x7f53bf84e240) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f53bf6f39c0)
+
+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 (0x0x7f53bf6f3a28) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+QGraphicsItem (0x0x7f53bf84e360) 0
+ primary-for QGraphicsLineItem (0x0x7f53bf6f3a28)
+
+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 (0x0x7f53bf6f3a90) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+QGraphicsItem (0x0x7f53bf84e4e0) 0
+ primary-for QGraphicsPixmapItem (0x0x7f53bf6f3a90)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f53bf84e720) 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 (0x0x7f53bf6f3af8) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+QGraphicsObject (0x0x7f53bf883380) 0
+ primary-for QGraphicsTextItem (0x0x7f53bf6f3af8)
+QObject (0x0x7f53bf84e660) 0
+ primary-for QGraphicsObject (0x0x7f53bf883380)
+QGraphicsItem (0x0x7f53bf84e6c0) 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 (0x0x7f53bf6f3c30) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7f53bf6f3c98) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f53bf6f3c30)
+QGraphicsItem (0x0x7f53bf84e9c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f53bf6f3c98)
+
+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 (0x0x7f53bf6f3d00) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+QGraphicsItem (0x0x7f53bf84eae0) 0
+ primary-for QGraphicsItemGroup (0x0x7f53bf6f3d00)
+
+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 (0x0x7f53bf4e41e0) 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 (0x0x7f53bf6f3dd0) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+QGraphicsLayoutItem (0x0x7f53bf4e48a0) 0
+ primary-for QGraphicsLayout (0x0x7f53bf6f3dd0)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f53bf4e4ba0) 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 (0x0x7f53bf6f3e38) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+QObject (0x0x7f53bf4e4b40) 0
+ primary-for QGraphicsAnchor (0x0x7f53bf6f3e38)
+
+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 (0x0x7f53bf6f3ea0) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+QGraphicsLayout (0x0x7f53bf6f3f08) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f53bf6f3ea0)
+QGraphicsLayoutItem (0x0x7f53bf4e4d20) 0
+ primary-for QGraphicsLayout (0x0x7f53bf6f3f08)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f53bf4e4ea0) 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 (0x0x7f53bf6f3f70) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+QObject (0x0x7f53bf4e4e40) 0
+ primary-for QGraphicsEffect (0x0x7f53bf6f3f70)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f53bf551540) 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 (0x0x7f53bf5500d0) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+QGraphicsEffect (0x0x7f53bf550138) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f53bf5500d0)
+QObject (0x0x7f53bf5514e0) 0
+ primary-for QGraphicsEffect (0x0x7f53bf550138)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f53bf551720) 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 (0x0x7f53bf5501a0) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+QGraphicsEffect (0x0x7f53bf550208) 0
+ primary-for QGraphicsBlurEffect (0x0x7f53bf5501a0)
+QObject (0x0x7f53bf5516c0) 0
+ primary-for QGraphicsEffect (0x0x7f53bf550208)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f53bf551e40) 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 (0x0x7f53bf550340) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+QGraphicsEffect (0x0x7f53bf5503a8) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f53bf550340)
+QObject (0x0x7f53bf551de0) 0
+ primary-for QGraphicsEffect (0x0x7f53bf5503a8)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f53bf60d2a0) 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 (0x0x7f53bf550410) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+QGraphicsEffect (0x0x7f53bf550478) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f53bf550410)
+QObject (0x0x7f53bf60d240) 0
+ primary-for QGraphicsEffect (0x0x7f53bf550478)
+
+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 (0x0x7f53bf5504e0) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+QGraphicsLayout (0x0x7f53bf550548) 0
+ primary-for QGraphicsGridLayout (0x0x7f53bf5504e0)
+QGraphicsLayoutItem (0x0x7f53bf60d420) 0
+ primary-for QGraphicsLayout (0x0x7f53bf550548)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f53bf60d600) 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 (0x0x7f53bf550680) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+QObject (0x0x7f53bf60d5a0) 0
+ primary-for QGraphicsItemAnimation (0x0x7f53bf550680)
+
+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 (0x0x7f53bf5506e8) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+QGraphicsLayout (0x0x7f53bf550750) 0
+ primary-for QGraphicsLinearLayout (0x0x7f53bf5506e8)
+QGraphicsLayoutItem (0x0x7f53bf60d6c0) 0
+ primary-for QGraphicsLayout (0x0x7f53bf550750)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f53bf60d9c0) 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 (0x0x7f53bf65c1c0) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+QGraphicsObject (0x0x7f53bf65c230) 0
+ primary-for QGraphicsWidget (0x0x7f53bf65c1c0)
+QObject (0x0x7f53bf60d8a0) 0
+ primary-for QGraphicsObject (0x0x7f53bf65c230)
+QGraphicsItem (0x0x7f53bf60d900) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+QGraphicsLayoutItem (0x0x7f53bf60d960) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f53bf60de40) 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 (0x0x7f53bf550888) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+QGraphicsWidget (0x0x7f53bf65c620) 0
+ primary-for QGraphicsProxyWidget (0x0x7f53bf550888)
+QGraphicsObject (0x0x7f53bf65c690) 0
+ primary-for QGraphicsWidget (0x0x7f53bf65c620)
+QObject (0x0x7f53bf60dd20) 0
+ primary-for QGraphicsObject (0x0x7f53bf65c690)
+QGraphicsItem (0x0x7f53bf60dd80) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+QGraphicsLayoutItem (0x0x7f53bf60dde0) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f53bf2ae1e0) 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 (0x0x7f53bf550a90) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+QObject (0x0x7f53bf2ae180) 0
+ primary-for QGraphicsScene (0x0x7f53bf550a90)
+
+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 (0x0x7f53bf3152d8) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+QEvent (0x0x7f53bf370480) 0
+ primary-for QGraphicsSceneEvent (0x0x7f53bf3152d8)
+
+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 (0x0x7f53bf315340) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+QGraphicsSceneEvent (0x0x7f53bf3153a8) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f53bf315340)
+QEvent (0x0x7f53bf370660) 0
+ primary-for QGraphicsSceneEvent (0x0x7f53bf3153a8)
+
+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 (0x0x7f53bf315410) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+QGraphicsSceneEvent (0x0x7f53bf315478) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f53bf315410)
+QEvent (0x0x7f53bf370780) 0
+ primary-for QGraphicsSceneEvent (0x0x7f53bf315478)
+
+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 (0x0x7f53bf3154e0) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+QGraphicsSceneEvent (0x0x7f53bf315548) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f53bf3154e0)
+QEvent (0x0x7f53bf3708a0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f53bf315548)
+
+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 (0x0x7f53bf3155b0) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+QGraphicsSceneEvent (0x0x7f53bf315618) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f53bf3155b0)
+QEvent (0x0x7f53bf3709c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f53bf315618)
+
+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 (0x0x7f53bf315680) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+QGraphicsSceneEvent (0x0x7f53bf3156e8) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f53bf315680)
+QEvent (0x0x7f53bf370ae0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f53bf3156e8)
+
+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 (0x0x7f53bf315750) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+QGraphicsSceneEvent (0x0x7f53bf3157b8) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f53bf315750)
+QEvent (0x0x7f53bf370c00) 0
+ primary-for QGraphicsSceneEvent (0x0x7f53bf3157b8)
+
+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 (0x0x7f53bf315820) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+QGraphicsSceneEvent (0x0x7f53bf315888) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f53bf315820)
+QEvent (0x0x7f53bf370d20) 0
+ primary-for QGraphicsSceneEvent (0x0x7f53bf315888)
+
+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 (0x0x7f53bf3158f0) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+QGraphicsSceneEvent (0x0x7f53bf315958) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f53bf3158f0)
+QEvent (0x0x7f53bf370e40) 0
+ primary-for QGraphicsSceneEvent (0x0x7f53bf315958)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f53bf40c000) 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 (0x0x7f53bf3159c0) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+QObject (0x0x7f53bf370f60) 0
+ primary-for QGraphicsTransform (0x0x7f53bf3159c0)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f53bf40c1e0) 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 (0x0x7f53bf315a28) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+QGraphicsTransform (0x0x7f53bf315a90) 0
+ primary-for QGraphicsScale (0x0x7f53bf315a28)
+QObject (0x0x7f53bf40c180) 0
+ primary-for QGraphicsTransform (0x0x7f53bf315a90)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f53bf40c3c0) 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 (0x0x7f53bf315af8) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+QGraphicsTransform (0x0x7f53bf315b60) 0
+ primary-for QGraphicsRotation (0x0x7f53bf315af8)
+QObject (0x0x7f53bf40c360) 0
+ primary-for QGraphicsTransform (0x0x7f53bf315b60)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f53bf40c600) 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 (0x0x7f53bf315bc8) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+QAbstractScrollArea (0x0x7f53bf315c30) 0
+ primary-for QScrollArea (0x0x7f53bf315bc8)
+QFrame (0x0x7f53bf315c98) 0
+ primary-for QAbstractScrollArea (0x0x7f53bf315c30)
+QWidget (0x0x7f53bf3f8690) 0
+ primary-for QFrame (0x0x7f53bf315c98)
+QObject (0x0x7f53bf40c540) 0
+ primary-for QWidget (0x0x7f53bf3f8690)
+QPaintDevice (0x0x7f53bf40c5a0) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f53bf40c840) 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 (0x0x7f53bf315d00) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+QAbstractScrollArea (0x0x7f53bf315d68) 0
+ primary-for QGraphicsView (0x0x7f53bf315d00)
+QFrame (0x0x7f53bf315dd0) 0
+ primary-for QAbstractScrollArea (0x0x7f53bf315d68)
+QWidget (0x0x7f53bf3f8850) 0
+ primary-for QFrame (0x0x7f53bf315dd0)
+QObject (0x0x7f53bf40c780) 0
+ primary-for QWidget (0x0x7f53bf3f8850)
+QPaintDevice (0x0x7f53bf40c7e0) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f53bf0cd8a0) 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 (0x0x7f53bf315270) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+QWidget (0x0x7f53bf481d20) 0
+ primary-for QGroupBox (0x0x7f53bf315270)
+QObject (0x0x7f53bf0cd7e0) 0
+ primary-for QWidget (0x0x7f53bf481d20)
+QPaintDevice (0x0x7f53bf0cd840) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f53bf0cdae0) 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 (0x0x7f53bf139000) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+QAbstractItemView (0x0x7f53bf139068) 0
+ primary-for QHeaderView (0x0x7f53bf139000)
+QAbstractScrollArea (0x0x7f53bf1390d0) 0
+ primary-for QAbstractItemView (0x0x7f53bf139068)
+QFrame (0x0x7f53bf139138) 0
+ primary-for QAbstractScrollArea (0x0x7f53bf1390d0)
+QWidget (0x0x7f53bf481ee0) 0
+ primary-for QFrame (0x0x7f53bf139138)
+QObject (0x0x7f53bf0cda20) 0
+ primary-for QWidget (0x0x7f53bf481ee0)
+QPaintDevice (0x0x7f53bf0cda80) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f53bf0cdf60) 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 (0x0x7f53bf1391a0) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+QWidget (0x0x7f53bf13c5b0) 0
+ primary-for QLineEdit (0x0x7f53bf1391a0)
+QObject (0x0x7f53bf0cdea0) 0
+ primary-for QWidget (0x0x7f53bf13c5b0)
+QPaintDevice (0x0x7f53bf0cdf00) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f53bf19c360) 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 (0x0x7f53bf139208) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+QDialog (0x0x7f53bf139270) 0
+ primary-for QInputDialog (0x0x7f53bf139208)
+QWidget (0x0x7f53bf13cbd0) 0
+ primary-for QDialog (0x0x7f53bf139270)
+QObject (0x0x7f53bf19c2a0) 0
+ primary-for QWidget (0x0x7f53bf13cbd0)
+QPaintDevice (0x0x7f53bf19c300) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f53bf19c900) 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 (0x0x7f53bf1393a8) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+QAbstractItemDelegate (0x0x7f53bf139410) 0
+ primary-for QItemDelegate (0x0x7f53bf1393a8)
+QObject (0x0x7f53bf19c8a0) 0
+ primary-for QAbstractItemDelegate (0x0x7f53bf139410)
+
+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 (0x0x7f53bf19ca80) 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 (0x0x7f53bf19cde0) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f53bf254300) 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 (0x0x7f53bf139548) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+QWidget (0x0x7f53bf1c4930) 0
+ primary-for QKeySequenceEdit (0x0x7f53bf139548)
+QObject (0x0x7f53bf254240) 0
+ primary-for QWidget (0x0x7f53bf1c4930)
+QPaintDevice (0x0x7f53bf2542a0) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f53bf254540) 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 (0x0x7f53bf1395b0) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+QFrame (0x0x7f53bf139618) 0
+ primary-for QLabel (0x0x7f53bf1395b0)
+QWidget (0x0x7f53bf1c4af0) 0
+ primary-for QFrame (0x0x7f53bf139618)
+QObject (0x0x7f53bf254480) 0
+ primary-for QWidget (0x0x7f53bf1c4af0)
+QPaintDevice (0x0x7f53bf2544e0) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f53bf254840) 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 (0x0x7f53bf139680) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+QFrame (0x0x7f53bf1396e8) 0
+ primary-for QLCDNumber (0x0x7f53bf139680)
+QWidget (0x0x7f53bf1c4d90) 0
+ primary-for QFrame (0x0x7f53bf1396e8)
+QObject (0x0x7f53bf254780) 0
+ primary-for QWidget (0x0x7f53bf1c4d90)
+QPaintDevice (0x0x7f53bf2547e0) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f53bf254c00) 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 (0x0x7f53bf139750) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+QAbstractItemView (0x0x7f53bf1397b8) 0
+ primary-for QListView (0x0x7f53bf139750)
+QAbstractScrollArea (0x0x7f53bf139820) 0
+ primary-for QAbstractItemView (0x0x7f53bf1397b8)
+QFrame (0x0x7f53bf139888) 0
+ primary-for QAbstractScrollArea (0x0x7f53bf139820)
+QWidget (0x0x7f53bf28d460) 0
+ primary-for QFrame (0x0x7f53bf139888)
+QObject (0x0x7f53bf254b40) 0
+ primary-for QWidget (0x0x7f53bf28d460)
+QPaintDevice (0x0x7f53bf254ba0) 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 (0x0x7f53beed6180) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f53beed6c00) 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 (0x0x7f53bf1398f0) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+QListView (0x0x7f53bf139958) 0
+ primary-for QListWidget (0x0x7f53bf1398f0)
+QAbstractItemView (0x0x7f53bf1399c0) 0
+ primary-for QListView (0x0x7f53bf139958)
+QAbstractScrollArea (0x0x7f53bf139a28) 0
+ primary-for QAbstractItemView (0x0x7f53bf1399c0)
+QFrame (0x0x7f53bf139a90) 0
+ primary-for QAbstractScrollArea (0x0x7f53bf139a28)
+QWidget (0x0x7f53beedab60) 0
+ primary-for QFrame (0x0x7f53bf139a90)
+QObject (0x0x7f53beed6b40) 0
+ primary-for QWidget (0x0x7f53beedab60)
+QPaintDevice (0x0x7f53beed6ba0) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f53bef38120) 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 (0x0x7f53bf139af8) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+QWidget (0x0x7f53bef36070) 0
+ primary-for QMainWindow (0x0x7f53bf139af8)
+QObject (0x0x7f53bef38060) 0
+ primary-for QWidget (0x0x7f53bef36070)
+QPaintDevice (0x0x7f53bef380c0) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f53bef388a0) 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 (0x0x7f53bf139c30) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+QAbstractScrollArea (0x0x7f53bf139c98) 0
+ primary-for QMdiArea (0x0x7f53bf139c30)
+QFrame (0x0x7f53bf139d00) 0
+ primary-for QAbstractScrollArea (0x0x7f53bf139c98)
+QWidget (0x0x7f53bef368c0) 0
+ primary-for QFrame (0x0x7f53bf139d00)
+QObject (0x0x7f53bef387e0) 0
+ primary-for QWidget (0x0x7f53bef368c0)
+QPaintDevice (0x0x7f53bef38840) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f53bf013060) 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 (0x0x7f53bf139e38) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+QWidget (0x0x7f53beff8150) 0
+ primary-for QMdiSubWindow (0x0x7f53bf139e38)
+QObject (0x0x7f53bef38f60) 0
+ primary-for QWidget (0x0x7f53beff8150)
+QPaintDevice (0x0x7f53bf013000) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f53bf013660) 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 (0x0x7f53bf139f70) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+QWidget (0x0x7f53beff8700) 0
+ primary-for QMenu (0x0x7f53bf139f70)
+QObject (0x0x7f53bf0135a0) 0
+ primary-for QWidget (0x0x7f53beff8700)
+QPaintDevice (0x0x7f53bf013600) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f53bf013a20) 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 (0x0x7f53beca8000) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+QWidget (0x0x7f53beff8a80) 0
+ primary-for QMenuBar (0x0x7f53beca8000)
+QObject (0x0x7f53bf013960) 0
+ primary-for QWidget (0x0x7f53beff8a80)
+QPaintDevice (0x0x7f53bf0139c0) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f53bf013d20) 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 (0x0x7f53beca8068) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+QDialog (0x0x7f53beca80d0) 0
+ primary-for QMessageBox (0x0x7f53beca8068)
+QWidget (0x0x7f53beff8d20) 0
+ primary-for QDialog (0x0x7f53beca80d0)
+QObject (0x0x7f53bf013c60) 0
+ primary-for QWidget (0x0x7f53beff8d20)
+QPaintDevice (0x0x7f53bf013cc0) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f53bed19660) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f53bed196c0) 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 (0x0x7f53beca8208) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+QAbstractScrollArea (0x0x7f53beca8270) 0
+ primary-for QTextEdit (0x0x7f53beca8208)
+QFrame (0x0x7f53beca82d8) 0
+ primary-for QAbstractScrollArea (0x0x7f53beca8270)
+QWidget (0x0x7f53beccc7e0) 0
+ primary-for QFrame (0x0x7f53beca82d8)
+QObject (0x0x7f53bed195a0) 0
+ primary-for QWidget (0x0x7f53beccc7e0)
+QPaintDevice (0x0x7f53bed19600) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f53beddc000) 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 (0x0x7f53beca8410) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+QAbstractScrollArea (0x0x7f53beca8478) 0
+ primary-for QPlainTextEdit (0x0x7f53beca8410)
+QFrame (0x0x7f53beca84e0) 0
+ primary-for QAbstractScrollArea (0x0x7f53beca8478)
+QWidget (0x0x7f53beda62a0) 0
+ primary-for QFrame (0x0x7f53beca84e0)
+QObject (0x0x7f53bed19f00) 0
+ primary-for QWidget (0x0x7f53beda62a0)
+QPaintDevice (0x0x7f53bed19f60) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f53beddc540) 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 (0x0x7f53beca8548) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+QAbstractTextDocumentLayout (0x0x7f53beca85b0) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f53beca8548)
+QObject (0x0x7f53beddc4e0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f53beca85b0)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f53beddc780) 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 (0x0x7f53beca8618) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+QWidget (0x0x7f53beda6a80) 0
+ primary-for QProgressBar (0x0x7f53beca8618)
+QObject (0x0x7f53beddc6c0) 0
+ primary-for QWidget (0x0x7f53beda6a80)
+QPaintDevice (0x0x7f53beddc720) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f53beddca80) 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 (0x0x7f53beca8680) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+QDialog (0x0x7f53beca86e8) 0
+ primary-for QProgressDialog (0x0x7f53beca8680)
+QWidget (0x0x7f53beda6e00) 0
+ primary-for QDialog (0x0x7f53beca86e8)
+QObject (0x0x7f53beddc9c0) 0
+ primary-for QWidget (0x0x7f53beda6e00)
+QPaintDevice (0x0x7f53beddca20) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f53beddcc60) 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 (0x0x7f53beca8750) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+QCommonStyle (0x0x7f53beca87b8) 0
+ primary-for QProxyStyle (0x0x7f53beca8750)
+QStyle (0x0x7f53beca8820) 0
+ primary-for QCommonStyle (0x0x7f53beca87b8)
+QObject (0x0x7f53beddcc00) 0
+ primary-for QStyle (0x0x7f53beca8820)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f53beddcea0) 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 (0x0x7f53beca8888) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+QAbstractButton (0x0x7f53beca88f0) 0
+ primary-for QRadioButton (0x0x7f53beca8888)
+QWidget (0x0x7f53bee6a150) 0
+ primary-for QAbstractButton (0x0x7f53beca88f0)
+QObject (0x0x7f53beddcde0) 0
+ primary-for QWidget (0x0x7f53bee6a150)
+QPaintDevice (0x0x7f53beddce40) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f53bee7e120) 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 (0x0x7f53beca8958) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+QAbstractSlider (0x0x7f53beca89c0) 0
+ primary-for QScrollBar (0x0x7f53beca8958)
+QWidget (0x0x7f53bee6a310) 0
+ primary-for QAbstractSlider (0x0x7f53beca89c0)
+QObject (0x0x7f53bee7e060) 0
+ primary-for QWidget (0x0x7f53bee6a310)
+QPaintDevice (0x0x7f53bee7e0c0) 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 (0x0x7f53bee7e2a0) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f53beb2c4e0) 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 (0x0x7f53beb335b0) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+QObject (0x0x7f53beb2c480) 0
+ primary-for QScroller (0x0x7f53beb335b0)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f53beb2c7e0) 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 (0x0x7f53beb33618) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+QWidget (0x0x7f53beb3e5b0) 0
+ primary-for QSizeGrip (0x0x7f53beb33618)
+QObject (0x0x7f53beb2c720) 0
+ primary-for QWidget (0x0x7f53beb3e5b0)
+QPaintDevice (0x0x7f53beb2c780) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f53beb2ca20) 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 (0x0x7f53beb33680) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+QAbstractSpinBox (0x0x7f53beb336e8) 0
+ primary-for QSpinBox (0x0x7f53beb33680)
+QWidget (0x0x7f53beb3e770) 0
+ primary-for QAbstractSpinBox (0x0x7f53beb336e8)
+QObject (0x0x7f53beb2c960) 0
+ primary-for QWidget (0x0x7f53beb3e770)
+QPaintDevice (0x0x7f53beb2c9c0) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f53beb2cc60) 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 (0x0x7f53beb33750) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+QAbstractSpinBox (0x0x7f53beb337b8) 0
+ primary-for QDoubleSpinBox (0x0x7f53beb33750)
+QWidget (0x0x7f53beb3e930) 0
+ primary-for QAbstractSpinBox (0x0x7f53beb337b8)
+QObject (0x0x7f53beb2cba0) 0
+ primary-for QWidget (0x0x7f53beb3e930)
+QPaintDevice (0x0x7f53beb2cc00) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f53beb2cea0) 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 (0x0x7f53beb33820) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+QWidget (0x0x7f53beb3eaf0) 0
+ primary-for QSplashScreen (0x0x7f53beb33820)
+QObject (0x0x7f53beb2cde0) 0
+ primary-for QWidget (0x0x7f53beb3eaf0)
+QPaintDevice (0x0x7f53beb2ce40) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f53beba3120) 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 (0x0x7f53beb33888) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+QFrame (0x0x7f53beb338f0) 0
+ primary-for QSplitter (0x0x7f53beb33888)
+QWidget (0x0x7f53beb3ecb0) 0
+ primary-for QFrame (0x0x7f53beb338f0)
+QObject (0x0x7f53beba3060) 0
+ primary-for QWidget (0x0x7f53beb3ecb0)
+QPaintDevice (0x0x7f53beba30c0) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f53beba3360) 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 (0x0x7f53beb33958) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+QWidget (0x0x7f53beb3ee70) 0
+ primary-for QSplitterHandle (0x0x7f53beb33958)
+QObject (0x0x7f53beba32a0) 0
+ primary-for QWidget (0x0x7f53beb3ee70)
+QPaintDevice (0x0x7f53beba3300) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f53beba35a0) 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 (0x0x7f53beb339c0) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+QLayout (0x0x7f53bebca070) 0
+ primary-for QStackedLayout (0x0x7f53beb339c0)
+QObject (0x0x7f53beba34e0) 0
+ primary-for QLayout (0x0x7f53bebca070)
+QLayoutItem (0x0x7f53beba3540) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f53beba38a0) 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 (0x0x7f53beb33a28) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+QFrame (0x0x7f53beb33a90) 0
+ primary-for QStackedWidget (0x0x7f53beb33a28)
+QWidget (0x0x7f53bebca3f0) 0
+ primary-for QFrame (0x0x7f53beb33a90)
+QObject (0x0x7f53beba37e0) 0
+ primary-for QWidget (0x0x7f53bebca3f0)
+QPaintDevice (0x0x7f53beba3840) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f53beba3ae0) 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 (0x0x7f53beb33af8) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+QWidget (0x0x7f53bebca5b0) 0
+ primary-for QStatusBar (0x0x7f53beb33af8)
+QObject (0x0x7f53beba3a20) 0
+ primary-for QWidget (0x0x7f53bebca5b0)
+QPaintDevice (0x0x7f53beba3a80) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f53beba3cc0) 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 (0x0x7f53beb33b60) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+QAbstractItemDelegate (0x0x7f53beb33bc8) 0
+ primary-for QStyledItemDelegate (0x0x7f53beb33b60)
+QObject (0x0x7f53beba3c60) 0
+ primary-for QAbstractItemDelegate (0x0x7f53beb33bc8)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f53beba3e40) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f53beb33c30) 0
+QPainter (0x0x7f53beba3ea0) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f53bec25720) 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 (0x0x7f53beb33c98) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+QObject (0x0x7f53bec256c0) 0
+ primary-for QStylePlugin (0x0x7f53beb33c98)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f53bec25840) 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 (0x0x7f53beb33d00) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+QObject (0x0x7f53bec257e0) 0
+ primary-for QSystemTrayIcon (0x0x7f53beb33d00)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f53bec25b40) 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 (0x0x7f53beb33d68) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+QAbstractItemView (0x0x7f53beb33dd0) 0
+ primary-for QTableView (0x0x7f53beb33d68)
+QAbstractScrollArea (0x0x7f53beb33e38) 0
+ primary-for QAbstractItemView (0x0x7f53beb33dd0)
+QFrame (0x0x7f53beb33ea0) 0
+ primary-for QAbstractScrollArea (0x0x7f53beb33e38)
+QWidget (0x0x7f53bec317e0) 0
+ primary-for QFrame (0x0x7f53beb33ea0)
+QObject (0x0x7f53bec25a80) 0
+ primary-for QWidget (0x0x7f53bec317e0)
+QPaintDevice (0x0x7f53bec25ae0) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f53bec25cc0) 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 (0x0x7f53bec7e120) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f53be90e300) 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 (0x0x7f53bec93618) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+QTableView (0x0x7f53bec93680) 0
+ primary-for QTableWidget (0x0x7f53bec93618)
+QAbstractItemView (0x0x7f53bec936e8) 0
+ primary-for QTableView (0x0x7f53bec93680)
+QAbstractScrollArea (0x0x7f53bec93750) 0
+ primary-for QAbstractItemView (0x0x7f53bec936e8)
+QFrame (0x0x7f53bec937b8) 0
+ primary-for QAbstractScrollArea (0x0x7f53bec93750)
+QWidget (0x0x7f53be8f5a80) 0
+ primary-for QFrame (0x0x7f53bec937b8)
+QObject (0x0x7f53be90e240) 0
+ primary-for QWidget (0x0x7f53be8f5a80)
+QPaintDevice (0x0x7f53be90e2a0) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f53be90e6c0) 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 (0x0x7f53bec93820) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+QTextEdit (0x0x7f53bec93888) 0
+ primary-for QTextBrowser (0x0x7f53bec93820)
+QAbstractScrollArea (0x0x7f53bec938f0) 0
+ primary-for QTextEdit (0x0x7f53bec93888)
+QFrame (0x0x7f53bec93958) 0
+ primary-for QAbstractScrollArea (0x0x7f53bec938f0)
+QWidget (0x0x7f53be8f5e00) 0
+ primary-for QFrame (0x0x7f53bec93958)
+QObject (0x0x7f53be90e600) 0
+ primary-for QWidget (0x0x7f53be8f5e00)
+QPaintDevice (0x0x7f53be90e660) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f53be90e900) 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 (0x0x7f53bec939c0) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+QWidget (0x0x7f53be95d000) 0
+ primary-for QToolBar (0x0x7f53bec939c0)
+QObject (0x0x7f53be90e840) 0
+ primary-for QWidget (0x0x7f53be95d000)
+QPaintDevice (0x0x7f53be90e8a0) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f53be90ed80) 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 (0x0x7f53bec93a28) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+QFrame (0x0x7f53bec93a90) 0
+ primary-for QToolBox (0x0x7f53bec93a28)
+QWidget (0x0x7f53be95d460) 0
+ primary-for QFrame (0x0x7f53bec93a90)
+QObject (0x0x7f53be90ecc0) 0
+ primary-for QWidget (0x0x7f53be95d460)
+QPaintDevice (0x0x7f53be90ed20) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f53be9a2120) 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 (0x0x7f53bec93af8) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+QAbstractButton (0x0x7f53bec93b60) 0
+ primary-for QToolButton (0x0x7f53bec93af8)
+QWidget (0x0x7f53be95d770) 0
+ primary-for QAbstractButton (0x0x7f53bec93b60)
+QObject (0x0x7f53be9a2060) 0
+ primary-for QWidget (0x0x7f53be95d770)
+QPaintDevice (0x0x7f53be9a20c0) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f53be9a2360) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f53be9a24e0) 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 (0x0x7f53bec93bc8) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+QAbstractItemView (0x0x7f53bec93c30) 0
+ primary-for QTreeView (0x0x7f53bec93bc8)
+QAbstractScrollArea (0x0x7f53bec93c98) 0
+ primary-for QAbstractItemView (0x0x7f53bec93c30)
+QFrame (0x0x7f53bec93d00) 0
+ primary-for QAbstractScrollArea (0x0x7f53bec93c98)
+QWidget (0x0x7f53be95dbd0) 0
+ primary-for QFrame (0x0x7f53bec93d00)
+QObject (0x0x7f53be9a2420) 0
+ primary-for QWidget (0x0x7f53be95dbd0)
+QPaintDevice (0x0x7f53be9a2480) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f53be9a2660) 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 (0x0x7f53be9a2de0) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f53be74d9c0) 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 (0x0x7f53bea86c98) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+QTreeView (0x0x7f53bea86d00) 0
+ primary-for QTreeWidget (0x0x7f53bea86c98)
+QAbstractItemView (0x0x7f53bea86d68) 0
+ primary-for QTreeView (0x0x7f53bea86d00)
+QAbstractScrollArea (0x0x7f53bea86dd0) 0
+ primary-for QAbstractItemView (0x0x7f53bea86d68)
+QFrame (0x0x7f53bea86e38) 0
+ primary-for QAbstractScrollArea (0x0x7f53bea86dd0)
+QWidget (0x0x7f53be73cd90) 0
+ primary-for QFrame (0x0x7f53bea86e38)
+QObject (0x0x7f53be74d900) 0
+ primary-for QWidget (0x0x7f53be73cd90)
+QPaintDevice (0x0x7f53be74d960) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f53be74dde0) 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 (0x0x7f53bea86ea0) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+QListView (0x0x7f53bea86f08) 0
+ primary-for QUndoView (0x0x7f53bea86ea0)
+QAbstractItemView (0x0x7f53bea86f70) 0
+ primary-for QListView (0x0x7f53bea86f08)
+QAbstractScrollArea (0x0x7f53bea86548) 0
+ primary-for QAbstractItemView (0x0x7f53bea86f70)
+QFrame (0x0x7f53bea86c30) 0
+ primary-for QAbstractScrollArea (0x0x7f53bea86548)
+QWidget (0x0x7f53be794150) 0
+ primary-for QFrame (0x0x7f53bea86c30)
+QObject (0x0x7f53be74dd20) 0
+ primary-for QWidget (0x0x7f53be794150)
+QPaintDevice (0x0x7f53be74dd80) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f53be74df60) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f53be7c9060) 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 (0x0x7f53be7c8000) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+QAction (0x0x7f53be7c8068) 0
+ primary-for QWidgetAction (0x0x7f53be7c8000)
+QObject (0x0x7f53be7c9000) 0
+ primary-for QAction (0x0x7f53be7c8068)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f53be7c92a0) 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 (0x0x7f53be7c80d0) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+QDialog (0x0x7f53be7c8138) 0
+ primary-for QWizard (0x0x7f53be7c80d0)
+QWidget (0x0x7f53be794460) 0
+ primary-for QDialog (0x0x7f53be7c8138)
+QObject (0x0x7f53be7c91e0) 0
+ primary-for QWidget (0x0x7f53be794460)
+QPaintDevice (0x0x7f53be7c9240) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f53be7c9ae0) 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 (0x0x7f53be7c8270) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+QWidget (0x0x7f53be7ddcb0) 0
+ primary-for QWizardPage (0x0x7f53be7c8270)
+QObject (0x0x7f53be7c9a20) 0
+ primary-for QWidget (0x0x7f53be7ddcb0)
+QPaintDevice (0x0x7f53be7c9a80) 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 (0x0x7f53be7c9c60) 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 (0x0x7f53be4982a0) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface) + 16)
+
+Class QDomImplementation
+ size=8 align=8
+ base size=8 base align=8
+QDomImplementation (0x0x7f53be4986c0) 0
+
+Class QDomNode
+ size=8 align=8
+ base size=8 base align=8
+QDomNode (0x0x7f53be498720) 0
+
+Class QDomNodeList
+ size=8 align=8
+ base size=8 base align=8
+QDomNodeList (0x0x7f53be498780) 0
+
+Class QDomDocumentType
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentType (0x0x7f53be4d8000) 0
+QDomNode (0x0x7f53be498960) 0
+
+Class QDomDocument
+ size=8 align=8
+ base size=8 base align=8
+QDomDocument (0x0x7f53be4d8068) 0
+QDomNode (0x0x7f53be498a20) 0
+
+Class QDomNamedNodeMap
+ size=8 align=8
+ base size=8 base align=8
+QDomNamedNodeMap (0x0x7f53be498ae0) 0
+
+Class QDomDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentFragment (0x0x7f53be4d80d0) 0
+QDomNode (0x0x7f53be498c60) 0
+
+Class QDomCharacterData
+ size=8 align=8
+ base size=8 base align=8
+QDomCharacterData (0x0x7f53be4d8138) 0
+QDomNode (0x0x7f53be498d20) 0
+
+Class QDomAttr
+ size=8 align=8
+ base size=8 base align=8
+QDomAttr (0x0x7f53be4d81a0) 0
+QDomNode (0x0x7f53be498d80) 0
+
+Class QDomElement
+ size=8 align=8
+ base size=8 base align=8
+QDomElement (0x0x7f53be4d8208) 0
+QDomNode (0x0x7f53be498e40) 0
+
+Class QDomText
+ size=8 align=8
+ base size=8 base align=8
+QDomText (0x0x7f53be4d8270) 0
+QDomCharacterData (0x0x7f53be4d82d8) 0
+QDomNode (0x0x7f53be51c0c0) 0
+
+Class QDomComment
+ size=8 align=8
+ base size=8 base align=8
+QDomComment (0x0x7f53be4d8340) 0
+QDomCharacterData (0x0x7f53be4d83a8) 0
+QDomNode (0x0x7f53be51c180) 0
+
+Class QDomCDATASection
+ size=8 align=8
+ base size=8 base align=8
+QDomCDATASection (0x0x7f53be4d8410) 0
+QDomText (0x0x7f53be4d8478) 0
+QDomCharacterData (0x0x7f53be4d84e0) 0
+QDomNode (0x0x7f53be51c240) 0
+
+Class QDomNotation
+ size=8 align=8
+ base size=8 base align=8
+QDomNotation (0x0x7f53be4d8548) 0
+QDomNode (0x0x7f53be51c300) 0
+
+Class QDomEntity
+ size=8 align=8
+ base size=8 base align=8
+QDomEntity (0x0x7f53be4d85b0) 0
+QDomNode (0x0x7f53be51c3c0) 0
+
+Class QDomEntityReference
+ size=8 align=8
+ base size=8 base align=8
+QDomEntityReference (0x0x7f53be4d8618) 0
+QDomNode (0x0x7f53be51c480) 0
+
+Class QDomProcessingInstruction
+ size=8 align=8
+ base size=8 base align=8
+QDomProcessingInstruction (0x0x7f53be4d8680) 0
+QDomNode (0x0x7f53be51c540) 0
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f53be51c600) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f53be51cb40) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f53be621f60) 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 (0x0x7f53be6273a8) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+QObject (0x0x7f53be621f00) 0
+ primary-for QOpenGLDebugLogger (0x0x7f53be6273a8)
+
+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 (0x0x7f53be3216c0) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f53be321960) 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 (0x0x7f53be627478) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+QPaintDevice (0x0x7f53be3219c0) 0
+ primary-for QOpenGLPaintDevice (0x0x7f53be627478)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f53be321c00) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f53be3c3540) 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 (0x0x7f53be3cb2d8) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+QObject (0x0x7f53be3c34e0) 0
+ primary-for QOpenGLShader (0x0x7f53be3cb2d8)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f53be3c3ae0) 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 (0x0x7f53be3cb410) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+QObject (0x0x7f53be3c3a80) 0
+ primary-for QOpenGLShaderProgram (0x0x7f53be3cb410)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f53be3c3c60) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f53be0e9e40) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f53be15c0c0) 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 (0x0x7f53be3cb548) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+QObject (0x0x7f53be15c060) 0
+ primary-for QOpenGLTimerQuery (0x0x7f53be3cb548)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f53be15c2a0) 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 (0x0x7f53be3cb5b0) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+QObject (0x0x7f53be15c240) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f53be3cb5b0)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f53be15c420) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f53be23f3c0) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f53be23f5a0) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f53be23f600) 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 (0x0x7f53be23f7e0) 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 (0x0x7f53be23f9c0) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f53be220d68) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be23f960) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f53be23fd20) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f53be220dd0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be23fcc0) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f53be2800c0) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f53be220e38) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be280060) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f53be280420) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f53be220ea0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be2803c0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f53be280780) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f53be220f08) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be280720) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f53be280ae0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f53be220f70) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be280a80) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f53be280e40) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f53bdea4000) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be280de0) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f53bdec41e0) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f53bdea4068) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdec4180) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f53bdec4540) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f53bdea40d0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdec44e0) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f53bdec48a0) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f53bdea4138) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdec4840) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f53bdec4c00) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f53bdea41a0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdec4ba0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f53bdec4f60) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f53bdea4208) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdec4f00) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f53bdf12300) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f53bdea4270) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdf122a0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f53bdf12660) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f53bdea42d8) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdf12600) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f53bdf129c0) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f53bdea4340) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdf12960) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f53bdf12d20) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f53bdea43a8) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdf12cc0) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f53bdf720c0) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f53bdea4410) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdf72060) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f53bdf72420) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f53bdea4478) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdf723c0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f53bdf72780) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f53bdea44e0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdf72720) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f53bdf72ae0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f53bdea4548) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdf72a80) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f53bdf72e40) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f53bdea45b0) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53bdf72de0) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f53be00f1e0) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f53bdea4618) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be00f180) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f53be00f540) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f53bdea4680) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be00f4e0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f53be00f8a0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f53bdea46e8) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be00f840) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f53be00fc00) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f53bdea4750) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be00fba0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f53be00ff60) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f53bdea47b8) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be00ff00) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f53be04e300) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f53bdea4820) 0
+QOpenGLVersionFunctionsBackend (0x0x7f53be04e2a0) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f53be04e600) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f53be04e780) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f53be04e8a0) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f53be04e900) 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 (0x0x7f53bdea4888) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+QObject (0x0x7f53be04e840) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f53bdea4888)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f53be089000) 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 (0x0x7f53bdea48f0) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+QPaintDeviceWindow (0x0x7f53be05f7e0) 0
+ primary-for QOpenGLWindow (0x0x7f53bdea48f0)
+QWindow (0x0x7f53be05f850) 0
+ primary-for QPaintDeviceWindow (0x0x7f53be05f7e0)
+QObject (0x0x7f53be04eea0) 0
+ primary-for QWindow (0x0x7f53be05f850)
+QSurface (0x0x7f53be04ef00) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+QPaintDevice (0x0x7f53be04ef60) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7f53be089240) 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 (0x0x7f53bdea49c0) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+QWidget (0x0x7f53be05fb60) 0
+ primary-for QOpenGLWidget (0x0x7f53bdea49c0)
+QObject (0x0x7f53be089180) 0
+ primary-for QWidget (0x0x7f53be05fb60)
+QPaintDevice (0x0x7f53be0891e0) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QDesignerActionEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerActionEditorInterface::QPrivateSignal (0x0x7f53be089480) 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 (0x0x7f53bdea4a90) 0
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 16)
+QWidget (0x0x7f53be05fe00) 0
+ primary-for QDesignerActionEditorInterface (0x0x7f53bdea4a90)
+QObject (0x0x7f53be0893c0) 0
+ primary-for QWidget (0x0x7f53be05fe00)
+QPaintDevice (0x0x7f53be089420) 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 (0x0x7f53be089540) 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 (0x0x7f53be0895a0) 0
+ vptr=((& QAbstractFormBuilder::_ZTV20QAbstractFormBuilder) + 16)
+
+Class QDesignerFormEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormEditorInterface::QPrivateSignal (0x0x7f53be0897e0) 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 (0x0x7f53bdea4af8) 0
+ vptr=((& QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface) + 16)
+QObject (0x0x7f53be089780) 0
+ primary-for QDesignerFormEditorInterface (0x0x7f53bdea4af8)
+
+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 (0x0x7f53be089900) 0 nearly-empty
+ vptr=((& QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface) + 16)
+
+Class QDesignerFormWindowInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowInterface::QPrivateSignal (0x0x7f53be089ba0) 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 (0x0x7f53bdea4b60) 0
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 16)
+QWidget (0x0x7f53bdcfb310) 0
+ primary-for QDesignerFormWindowInterface (0x0x7f53bdea4b60)
+QObject (0x0x7f53be089ae0) 0
+ primary-for QWidget (0x0x7f53bdcfb310)
+QPaintDevice (0x0x7f53be089b40) 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 (0x0x7f53be089d20) 0 nearly-empty
+ vptr=((& QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface) + 16)
+
+Class QDesignerFormWindowManagerInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowManagerInterface::QPrivateSignal (0x0x7f53be089de0) 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 (0x0x7f53bdea4bc8) 0
+ vptr=((& QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface) + 16)
+QObject (0x0x7f53be089d80) 0
+ primary-for QDesignerFormWindowManagerInterface (0x0x7f53bdea4bc8)
+
+Class QDesignerFormWindowToolInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowToolInterface::QPrivateSignal (0x0x7f53bdd6c120) 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 (0x0x7f53bdea4c30) 0
+ vptr=((& QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface) + 16)
+QObject (0x0x7f53bdd6c0c0) 0
+ primary-for QDesignerFormWindowToolInterface (0x0x7f53bdea4c30)
+
+Class QDesignerIntegrationInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegrationInterface::QPrivateSignal (0x0x7f53bdd6c300) 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 (0x0x7f53bdea4c98) 0
+ vptr=((& QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface) + 16)
+QObject (0x0x7f53bdd6c2a0) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f53bdea4c98)
+
+Class QDesignerIntegration::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegration::QPrivateSignal (0x0x7f53bdd6c540) 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 (0x0x7f53bdea4d00) 0
+ vptr=((& QDesignerIntegration::_ZTV20QDesignerIntegration) + 16)
+QDesignerIntegrationInterface (0x0x7f53bdea4d68) 0
+ primary-for QDesignerIntegration (0x0x7f53bdea4d00)
+QObject (0x0x7f53bdd6c4e0) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f53bdea4d68)
+
+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 (0x0x7f53bdd6c660) 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 (0x0x7f53bdd6ca20) 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 (0x0x7f53bdd6ce40) 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 (0x0x7f53bddd10c0) 0 nearly-empty
+ vptr=((& QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface) + 16)
+
+Class QDesignerMetaDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerMetaDataBaseInterface::QPrivateSignal (0x0x7f53bddd1180) 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 (0x0x7f53bdea4dd0) 0
+ vptr=((& QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface) + 16)
+QObject (0x0x7f53bddd1120) 0
+ primary-for QDesignerMetaDataBaseInterface (0x0x7f53bdea4dd0)
+
+Class QDesignerNewFormWidgetInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerNewFormWidgetInterface::QPrivateSignal (0x0x7f53bddd1300) 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 (0x0x7f53bdea4e38) 0
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 16)
+QWidget (0x0x7f53bddb5770) 0
+ primary-for QDesignerNewFormWidgetInterface (0x0x7f53bdea4e38)
+QObject (0x0x7f53bddd1240) 0
+ primary-for QWidget (0x0x7f53bddb5770)
+QPaintDevice (0x0x7f53bddd12a0) 16
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 464)
+
+Class QDesignerObjectInspectorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerObjectInspectorInterface::QPrivateSignal (0x0x7f53bddd1480) 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 (0x0x7f53bdea4ea0) 0
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 16)
+QWidget (0x0x7f53bddb5850) 0
+ primary-for QDesignerObjectInspectorInterface (0x0x7f53bdea4ea0)
+QObject (0x0x7f53bddd13c0) 0
+ primary-for QWidget (0x0x7f53bddb5850)
+QPaintDevice (0x0x7f53bddd1420) 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 (0x0x7f53bddd1540) 0 nearly-empty
+ vptr=((& QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface) + 16)
+
+Class QDesignerPromotionInterface::PromotedClass
+ size=16 align=8
+ base size=16 base align=8
+QDesignerPromotionInterface::PromotedClass (0x0x7f53bddd1600) 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 (0x0x7f53bddd15a0) 0 nearly-empty
+ vptr=((& QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface) + 16)
+
+Class QDesignerPropertyEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerPropertyEditorInterface::QPrivateSignal (0x0x7f53bddd1720) 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 (0x0x7f53bdea4f08) 0
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 16)
+QWidget (0x0x7f53bddb5930) 0
+ primary-for QDesignerPropertyEditorInterface (0x0x7f53bdea4f08)
+QObject (0x0x7f53bddd1660) 0
+ primary-for QWidget (0x0x7f53bddb5930)
+QPaintDevice (0x0x7f53bddd16c0) 16
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 504)
+
+Class QDesignerResourceBrowserInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerResourceBrowserInterface::QPrivateSignal (0x0x7f53bddd18a0) 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 (0x0x7f53bdea4f70) 0
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 16)
+QWidget (0x0x7f53bddb5a10) 0
+ primary-for QDesignerResourceBrowserInterface (0x0x7f53bdea4f70)
+QObject (0x0x7f53bddd17e0) 0
+ primary-for QWidget (0x0x7f53bddb5a10)
+QPaintDevice (0x0x7f53bddd1840) 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 (0x0x7f53bddd1960) 0 nearly-empty
+ vptr=((& QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface) + 16)
+
+Class QDesignerWidgetBoxInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetBoxInterface::QPrivateSignal (0x0x7f53bddd1a80) 0 empty
+
+Class QDesignerWidgetBoxInterface::Widget
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetBoxInterface::Widget (0x0x7f53bddd1ae0) 0
+
+Class QDesignerWidgetBoxInterface::Category
+ size=56 align=8
+ base size=56 base align=8
+QDesignerWidgetBoxInterface::Category (0x0x7f53bddd1ba0) 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 (0x0x7f53bde29000) 0
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 16)
+QWidget (0x0x7f53bddb5af0) 0
+ primary-for QDesignerWidgetBoxInterface (0x0x7f53bde29000)
+QObject (0x0x7f53bddd19c0) 0
+ primary-for QWidget (0x0x7f53bddb5af0)
+QPaintDevice (0x0x7f53bddd1a20) 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 (0x0x7f53bdae1f00) 0 nearly-empty
+ vptr=((& QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface) + 16)
+
+Class QDesignerWidgetDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetDataBaseInterface::QPrivateSignal (0x0x7f53bdb2b060) 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 (0x0x7f53bdb16bc8) 0
+ vptr=((& QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface) + 16)
+QObject (0x0x7f53bdb2b000) 0
+ primary-for QDesignerWidgetDataBaseInterface (0x0x7f53bdb16bc8)
+
+Class QDesignerWidgetFactoryInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetFactoryInterface::QPrivateSignal (0x0x7f53bdb2b900) 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 (0x0x7f53bdb40270) 0
+ vptr=((& QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface) + 16)
+QObject (0x0x7f53bdb2b8a0) 0
+ primary-for QDesignerWidgetFactoryInterface (0x0x7f53bdb40270)
+
+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 (0x0x7f53bdb2b9c0) 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 (0x0x7f53bdb2bc00) 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 (0x0x7f53bdb2bea0) 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 (0x0x7f53bdb402d8) 0
+ vptr=((& QFormBuilder::_ZTV12QFormBuilder) + 16)
+QAbstractFormBuilder (0x0x7f53bdbcc0c0) 0
+ primary-for QFormBuilder (0x0x7f53bdb402d8)
+
+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 (0x0x7f53bdbcc120) 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 (0x0x7f53bdbcc360) 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 (0x0x7f53bdbcc5a0) 0 nearly-empty
+ vptr=((& QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension) + 16)
+
+Class QExtensionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QExtensionManager::QPrivateSignal (0x0x7f53bdbcc8a0) 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 (0x0x7f53bdb43e70) 0
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 16)
+QObject (0x0x7f53bdbcc7e0) 0
+ primary-for QExtensionManager (0x0x7f53bdb43e70)
+QAbstractExtensionManager (0x0x7f53bdbcc840) 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 (0x0x7f53bdc5b240) 0 nearly-empty
+ vptr=((& QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension) + 16)
+
+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 (0x0x7f53bdc5b8a0) 0 nearly-empty
+ vptr=((& QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase) + 16)
+
+Class QSqlDatabase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDatabase (0x0x7f53bdc5bba0) 0
+
+Class QSqlDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriver::QPrivateSignal (0x0x7f53bdc5bc60) 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 (0x0x7f53bdb40a90) 0
+ vptr=((& QSqlDriver::_ZTV10QSqlDriver) + 16)
+QObject (0x0x7f53bdc5bc00) 0
+ primary-for QSqlDriver (0x0x7f53bdb40a90)
+
+Class QSqlDriverPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriverPlugin::QPrivateSignal (0x0x7f53bdc5be40) 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 (0x0x7f53bdb40af8) 0
+ vptr=((& QSqlDriverPlugin::_ZTV16QSqlDriverPlugin) + 16)
+QObject (0x0x7f53bdc5bde0) 0
+ primary-for QSqlDriverPlugin (0x0x7f53bdb40af8)
+
+Class QSqlError
+ size=8 align=8
+ base size=8 base align=8
+QSqlError (0x0x7f53bdc5bf00) 0
+
+Class QSqlField
+ size=40 align=8
+ base size=40 base align=8
+QSqlField (0x0x7f53bd982f60) 0
+
+Class QSqlRecord
+ size=8 align=8
+ base size=8 base align=8
+QSqlRecord (0x0x7f53bd9b6360) 0
+
+Class QSqlIndex
+ size=80 align=8
+ base size=80 base align=8
+QSqlIndex (0x0x7f53bd99c410) 0
+QSqlRecord (0x0x7f53bd9b6420) 0
+
+Class QSqlQuery
+ size=8 align=8
+ base size=8 base align=8
+QSqlQuery (0x0x7f53bd9b6900) 0
+
+Class QSqlQueryModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlQueryModel::QPrivateSignal (0x0x7f53bda74060) 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 (0x0x7f53bda62f08) 0
+ vptr=((& QSqlQueryModel::_ZTV14QSqlQueryModel) + 16)
+QAbstractTableModel (0x0x7f53bda62f70) 0
+ primary-for QSqlQueryModel (0x0x7f53bda62f08)
+QAbstractItemModel (0x0x7f53bda73000) 0
+ primary-for QAbstractTableModel (0x0x7f53bda62f70)
+QObject (0x0x7f53bda74000) 0
+ primary-for QAbstractItemModel (0x0x7f53bda73000)
+
+Class QSqlTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlTableModel::QPrivateSignal (0x0x7f53bda74240) 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 (0x0x7f53bda73068) 0
+ vptr=((& QSqlTableModel::_ZTV14QSqlTableModel) + 16)
+QSqlQueryModel (0x0x7f53bda730d0) 0
+ primary-for QSqlTableModel (0x0x7f53bda73068)
+QAbstractTableModel (0x0x7f53bda73138) 0
+ primary-for QSqlQueryModel (0x0x7f53bda730d0)
+QAbstractItemModel (0x0x7f53bda731a0) 0
+ primary-for QAbstractTableModel (0x0x7f53bda73138)
+QObject (0x0x7f53bda741e0) 0
+ primary-for QAbstractItemModel (0x0x7f53bda731a0)
+
+Class QSqlRelation
+ size=72 align=8
+ base size=72 base align=8
+QSqlRelation (0x0x7f53bda743c0) 0
+
+Class QSqlRelationalTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlRelationalTableModel::QPrivateSignal (0x0x7f53bd6e8360) 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 (0x0x7f53bd6e6340) 0
+ vptr=((& QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel) + 16)
+QSqlTableModel (0x0x7f53bd6e63a8) 0
+ primary-for QSqlRelationalTableModel (0x0x7f53bd6e6340)
+QSqlQueryModel (0x0x7f53bd6e6410) 0
+ primary-for QSqlTableModel (0x0x7f53bd6e63a8)
+QAbstractTableModel (0x0x7f53bd6e6478) 0
+ primary-for QSqlQueryModel (0x0x7f53bd6e6410)
+QAbstractItemModel (0x0x7f53bd6e64e0) 0
+ primary-for QAbstractTableModel (0x0x7f53bd6e6478)
+QObject (0x0x7f53bd6e8300) 0
+ primary-for QAbstractItemModel (0x0x7f53bd6e64e0)
+
+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 (0x0x7f53bd6e84e0) 0
+ vptr=((& QSqlResult::_ZTV10QSqlResult) + 16)
+
+Class QHelpGlobal
+ size=1 align=1
+ base size=0 base align=1
+QHelpGlobal (0x0x7f53bd6e8600) 0 empty
+
+Class QCompressedHelpInfo
+ size=8 align=8
+ base size=8 base align=8
+QCompressedHelpInfo (0x0x7f53bd6e8660) 0
+
+Class QHelpContentItem
+ size=8 align=8
+ base size=8 base align=8
+QHelpContentItem (0x0x7f53bd6e8780) 0
+
+Class QHelpContentModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentModel::QPrivateSignal (0x0x7f53bd6e8840) 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 (0x0x7f53bd6e6548) 0
+ vptr=((& QHelpContentModel::_ZTV17QHelpContentModel) + 16)
+QAbstractItemModel (0x0x7f53bd6e65b0) 0
+ primary-for QHelpContentModel (0x0x7f53bd6e6548)
+QObject (0x0x7f53bd6e87e0) 0
+ primary-for QAbstractItemModel (0x0x7f53bd6e65b0)
+
+Class QHelpContentWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentWidget::QPrivateSignal (0x0x7f53bd6e89c0) 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 (0x0x7f53bd6e6618) 0
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 16)
+QTreeView (0x0x7f53bd6e6680) 0
+ primary-for QHelpContentWidget (0x0x7f53bd6e6618)
+QAbstractItemView (0x0x7f53bd6e66e8) 0
+ primary-for QTreeView (0x0x7f53bd6e6680)
+QAbstractScrollArea (0x0x7f53bd6e6750) 0
+ primary-for QAbstractItemView (0x0x7f53bd6e66e8)
+QFrame (0x0x7f53bd6e67b8) 0
+ primary-for QAbstractScrollArea (0x0x7f53bd6e6750)
+QWidget (0x0x7f53bd6b3c40) 0
+ primary-for QFrame (0x0x7f53bd6e67b8)
+QObject (0x0x7f53bd6e8900) 0
+ primary-for QWidget (0x0x7f53bd6b3c40)
+QPaintDevice (0x0x7f53bd6e8960) 16
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 816)
+
+Class QHelpEngineCore::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngineCore::QPrivateSignal (0x0x7f53bd6e8ae0) 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 (0x0x7f53bd6e6820) 0
+ vptr=((& QHelpEngineCore::_ZTV15QHelpEngineCore) + 16)
+QObject (0x0x7f53bd6e8a80) 0
+ primary-for QHelpEngineCore (0x0x7f53bd6e6820)
+
+Class QHelpEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngine::QPrivateSignal (0x0x7f53bd6e8c00) 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 (0x0x7f53bd6e6888) 0
+ vptr=((& QHelpEngine::_ZTV11QHelpEngine) + 16)
+QHelpEngineCore (0x0x7f53bd6e68f0) 0
+ primary-for QHelpEngine (0x0x7f53bd6e6888)
+QObject (0x0x7f53bd6e8ba0) 0
+ primary-for QHelpEngineCore (0x0x7f53bd6e68f0)
+
+Class QHelpFilterData
+ size=8 align=8
+ base size=8 base align=8
+QHelpFilterData (0x0x7f53bd6e8cc0) 0
+
+Class QHelpFilterEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterEngine::QPrivateSignal (0x0x7f53bd6e8e40) 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 (0x0x7f53bd6e6958) 0
+ vptr=((& QHelpFilterEngine::_ZTV17QHelpFilterEngine) + 16)
+QObject (0x0x7f53bd6e8de0) 0
+ primary-for QHelpFilterEngine (0x0x7f53bd6e6958)
+
+Class QHelpFilterSettingsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterSettingsWidget::QPrivateSignal (0x0x7f53bd79e000) 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 (0x0x7f53bd6e69c0) 0
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 16)
+QWidget (0x0x7f53bd6b3ee0) 0
+ primary-for QHelpFilterSettingsWidget (0x0x7f53bd6e69c0)
+QObject (0x0x7f53bd6e8f00) 0
+ primary-for QWidget (0x0x7f53bd6b3ee0)
+QPaintDevice (0x0x7f53bd6e8f60) 16
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 448)
+
+Class QHelpIndexModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexModel::QPrivateSignal (0x0x7f53bd79e2a0) 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 (0x0x7f53bd6e6a28) 0
+ vptr=((& QHelpIndexModel::_ZTV15QHelpIndexModel) + 16)
+QStringListModel (0x0x7f53bd6e6a90) 0
+ primary-for QHelpIndexModel (0x0x7f53bd6e6a28)
+QAbstractListModel (0x0x7f53bd6e6af8) 0
+ primary-for QStringListModel (0x0x7f53bd6e6a90)
+QAbstractItemModel (0x0x7f53bd6e6b60) 0
+ primary-for QAbstractListModel (0x0x7f53bd6e6af8)
+QObject (0x0x7f53bd79e240) 0
+ primary-for QAbstractItemModel (0x0x7f53bd6e6b60)
+
+Class QHelpIndexWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexWidget::QPrivateSignal (0x0x7f53bd79e420) 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 (0x0x7f53bd6e6bc8) 0
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 16)
+QListView (0x0x7f53bd6e6c30) 0
+ primary-for QHelpIndexWidget (0x0x7f53bd6e6bc8)
+QAbstractItemView (0x0x7f53bd6e6c98) 0
+ primary-for QListView (0x0x7f53bd6e6c30)
+QAbstractScrollArea (0x0x7f53bd6e6d00) 0
+ primary-for QAbstractItemView (0x0x7f53bd6e6c98)
+QFrame (0x0x7f53bd6e6d68) 0
+ primary-for QAbstractScrollArea (0x0x7f53bd6e6d00)
+QWidget (0x0x7f53bd7b70e0) 0
+ primary-for QFrame (0x0x7f53bd6e6d68)
+QObject (0x0x7f53bd79e360) 0
+ primary-for QWidget (0x0x7f53bd7b70e0)
+QPaintDevice (0x0x7f53bd79e3c0) 16
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 800)
+
+Class QHelpLink
+ size=32 align=8
+ base size=32 base align=8
+QHelpLink (0x0x7f53bd79e4e0) 0
+
+Class QHelpSearchQuery
+ size=32 align=8
+ base size=32 base align=8
+QHelpSearchQuery (0x0x7f53bd79e540) 0
+
+Class QHelpSearchResult
+ size=8 align=8
+ base size=8 base align=8
+QHelpSearchResult (0x0x7f53bd79ea20) 0
+
+Class QHelpSearchEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchEngine::QPrivateSignal (0x0x7f53bd79eb40) 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 (0x0x7f53bd6e6dd0) 0
+ vptr=((& QHelpSearchEngine::_ZTV17QHelpSearchEngine) + 16)
+QObject (0x0x7f53bd79eae0) 0
+ primary-for QHelpSearchEngine (0x0x7f53bd6e6dd0)
+
+Class QHelpSearchQueryWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchQueryWidget::QPrivateSignal (0x0x7f53bd79ecc0) 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 (0x0x7f53bd6e6e38) 0
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 16)
+QWidget (0x0x7f53bd7b7930) 0
+ primary-for QHelpSearchQueryWidget (0x0x7f53bd6e6e38)
+QObject (0x0x7f53bd79ec00) 0
+ primary-for QWidget (0x0x7f53bd7b7930)
+QPaintDevice (0x0x7f53bd79ec60) 16
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 448)
+
+Class QHelpSearchResultWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchResultWidget::QPrivateSignal (0x0x7f53bd79ee40) 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 (0x0x7f53bd6e6ea0) 0
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 16)
+QWidget (0x0x7f53bd7b7a10) 0
+ primary-for QHelpSearchResultWidget (0x0x7f53bd6e6ea0)
+QObject (0x0x7f53bd79ed80) 0
+ primary-for QWidget (0x0x7f53bd7b7a10)
+QPaintDevice (0x0x7f53bd79ede0) 16
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 448)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f53bd79ef00) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f53bd4bb720) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f53bd568060) 0 empty
+
+Vtable for QAbstractNetworkCache
+QAbstractNetworkCache::_ZTV21QAbstractNetworkCache: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractNetworkCache)
+16 (int (*)(...))QAbstractNetworkCache::metaObject
+24 (int (*)(...))QAbstractNetworkCache::qt_metacast
+32 (int (*)(...))QAbstractNetworkCache::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
+
+Class QAbstractNetworkCache
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNetworkCache (0x0x7f53bd55cbc8) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+QObject (0x0x7f53bd568000) 0
+ primary-for QAbstractNetworkCache (0x0x7f53bd55cbc8)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f53bd5682a0) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSocket)
+16 (int (*)(...))QAbstractSocket::metaObject
+24 (int (*)(...))QAbstractSocket::qt_metacast
+32 (int (*)(...))QAbstractSocket::qt_metacall
+40 (int (*)(...))QAbstractSocket::~QAbstractSocket
+48 (int (*)(...))QAbstractSocket::~QAbstractSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7f53bd55cc30) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+QIODevice (0x0x7f53bd4c8930) 0
+ primary-for QAbstractSocket (0x0x7f53bd55cc30)
+QObject (0x0x7f53bd5681e0) 0
+ primary-for QIODevice (0x0x7f53bd4c8930)
+QIODeviceBase (0x0x7f53bd568240) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f53bd296480) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f53bd296540) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f53bd31ad80) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f53bd3b0600) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f53bd425e40) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f53bd0b6b40) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f53bd13ba80) 0 empty
+
+Vtable for QDnsLookup
+QDnsLookup::_ZTV10QDnsLookup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDnsLookup)
+16 (int (*)(...))QDnsLookup::metaObject
+24 (int (*)(...))QDnsLookup::qt_metacast
+32 (int (*)(...))QDnsLookup::qt_metacall
+40 (int (*)(...))QDnsLookup::~QDnsLookup
+48 (int (*)(...))QDnsLookup::~QDnsLookup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDnsLookup
+ size=16 align=8
+ base size=16 base align=8
+QDnsLookup (0x0x7f53bd14d138) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+QObject (0x0x7f53bd13ba20) 0
+ primary-for QDnsLookup (0x0x7f53bd14d138)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f53bd13bd80) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f53bd13bea0) 0
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f53bd22b060) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpSocket)
+16 (int (*)(...))QTcpSocket::metaObject
+24 (int (*)(...))QTcpSocket::qt_metacast
+32 (int (*)(...))QTcpSocket::qt_metacall
+40 (int (*)(...))QTcpSocket::~QTcpSocket
+48 (int (*)(...))QTcpSocket::~QTcpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7f53bd21e3a8) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+QAbstractSocket (0x0x7f53bd21e410) 0
+ primary-for QTcpSocket (0x0x7f53bd21e3a8)
+QIODevice (0x0x7f53bd174a10) 0
+ primary-for QAbstractSocket (0x0x7f53bd21e410)
+QObject (0x0x7f53bd209f60) 0
+ primary-for QIODevice (0x0x7f53bd174a10)
+QIODeviceBase (0x0x7f53bd22b000) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f53bd22b600) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f53bcf1dc00) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f53bcd3d780) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslSocket)
+16 (int (*)(...))QSslSocket::metaObject
+24 (int (*)(...))QSslSocket::qt_metacast
+32 (int (*)(...))QSslSocket::qt_metacall
+40 (int (*)(...))QSslSocket::~QSslSocket
+48 (int (*)(...))QSslSocket::~QSslSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QSslSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QSslSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QSslSocket::bytesAvailable
+184 (int (*)(...))QSslSocket::bytesToWrite
+192 (int (*)(...))QSslSocket::canReadLine
+200 (int (*)(...))QSslSocket::waitForReadyRead
+208 (int (*)(...))QSslSocket::waitForBytesWritten
+216 (int (*)(...))QSslSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QSslSocket::skipData
+240 (int (*)(...))QSslSocket::writeData
+248 (int (*)(...))QSslSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QSslSocket::connectToHost
+272 (int (*)(...))QSslSocket::disconnectFromHost
+280 (int (*)(...))QSslSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QSslSocket::setSocketDescriptor
+304 (int (*)(...))QSslSocket::setSocketOption
+312 (int (*)(...))QSslSocket::socketOption
+320 (int (*)(...))QSslSocket::waitForConnected
+328 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7f53bcd56000) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+QTcpSocket (0x0x7f53bcd56068) 0
+ primary-for QSslSocket (0x0x7f53bcd56000)
+QAbstractSocket (0x0x7f53bcd560d0) 0
+ primary-for QTcpSocket (0x0x7f53bcd56068)
+QIODevice (0x0x7f53bcd1b690) 0
+ primary-for QAbstractSocket (0x0x7f53bcd560d0)
+QObject (0x0x7f53bcd3d6c0) 0
+ primary-for QIODevice (0x0x7f53bcd1b690)
+QIODeviceBase (0x0x7f53bcd3d720) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f53bcd3d960) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f53bcd3d9c0) 0
+
+Vtable for QDtlsClientVerifier
+QDtlsClientVerifier::_ZTV19QDtlsClientVerifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDtlsClientVerifier)
+16 (int (*)(...))QDtlsClientVerifier::metaObject
+24 (int (*)(...))QDtlsClientVerifier::qt_metacast
+32 (int (*)(...))QDtlsClientVerifier::qt_metacall
+40 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+48 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtlsClientVerifier
+ size=16 align=8
+ base size=16 base align=8
+QDtlsClientVerifier (0x0x7f53bcd56138) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+QObject (0x0x7f53bcd3d900) 0
+ primary-for QDtlsClientVerifier (0x0x7f53bcd56138)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f53bcd3dba0) 0 empty
+
+Vtable for QDtls
+QDtls::_ZTV5QDtls: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDtls)
+16 (int (*)(...))QDtls::metaObject
+24 (int (*)(...))QDtls::qt_metacast
+32 (int (*)(...))QDtls::qt_metacall
+40 (int (*)(...))QDtls::~QDtls
+48 (int (*)(...))QDtls::~QDtls
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtls
+ size=16 align=8
+ base size=16 base align=8
+QDtls (0x0x7f53bcd561a0) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+QObject (0x0x7f53bcd3db40) 0
+ primary-for QDtls (0x0x7f53bcd561a0)
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f53bcd3dd20) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f53bce294e0) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7f53bcad4240) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f53bcb52c60) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f53bcbe76c0) 0 empty
+
+Vtable for QHttpMultiPart
+QHttpMultiPart::_ZTV14QHttpMultiPart: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QHttpMultiPart)
+16 (int (*)(...))QHttpMultiPart::metaObject
+24 (int (*)(...))QHttpMultiPart::qt_metacast
+32 (int (*)(...))QHttpMultiPart::qt_metacall
+40 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+48 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHttpMultiPart
+ size=16 align=8
+ base size=16 base align=8
+QHttpMultiPart (0x0x7f53bcbe4bc8) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+QObject (0x0x7f53bcbe7660) 0
+ primary-for QHttpMultiPart (0x0x7f53bcbe4bc8)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f53bcbe78a0) 0 empty
+
+Vtable for QLocalServer
+QLocalServer::_ZTV12QLocalServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalServer)
+16 (int (*)(...))QLocalServer::metaObject
+24 (int (*)(...))QLocalServer::qt_metacast
+32 (int (*)(...))QLocalServer::qt_metacall
+40 (int (*)(...))QLocalServer::~QLocalServer
+48 (int (*)(...))QLocalServer::~QLocalServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalServer::hasPendingConnections
+120 (int (*)(...))QLocalServer::nextPendingConnection
+128 (int (*)(...))QLocalServer::incomingConnection
+
+Class QLocalServer
+ size=16 align=8
+ base size=16 base align=8
+QLocalServer (0x0x7f53bcbe4c30) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+QObject (0x0x7f53bcbe7840) 0
+ primary-for QLocalServer (0x0x7f53bcbe4c30)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f53bcc68060) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalSocket)
+16 (int (*)(...))QLocalSocket::metaObject
+24 (int (*)(...))QLocalSocket::qt_metacast
+32 (int (*)(...))QLocalSocket::qt_metacall
+40 (int (*)(...))QLocalSocket::~QLocalSocket
+48 (int (*)(...))QLocalSocket::~QLocalSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalSocket::isSequential
+120 (int (*)(...))QLocalSocket::open
+128 (int (*)(...))QLocalSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QLocalSocket::bytesAvailable
+184 (int (*)(...))QLocalSocket::bytesToWrite
+192 (int (*)(...))QLocalSocket::canReadLine
+200 (int (*)(...))QLocalSocket::waitForReadyRead
+208 (int (*)(...))QLocalSocket::waitForBytesWritten
+216 (int (*)(...))QLocalSocket::readData
+224 (int (*)(...))QIODevice::readLineData
+232 (int (*)(...))QLocalSocket::skipData
+240 (int (*)(...))QLocalSocket::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7f53bcbe4d68) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+QIODevice (0x0x7f53bcbf7af0) 0
+ primary-for QLocalSocket (0x0x7f53bcbe4d68)
+QObject (0x0x7f53bcbe7f60) 0
+ primary-for QIODevice (0x0x7f53bcbf7af0)
+QIODeviceBase (0x0x7f53bcc68000) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f53bcc68660) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f53bc98ff00) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f53bca60540) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QNetworkAccessManager)
+16 (int (*)(...))QNetworkAccessManager::metaObject
+24 (int (*)(...))QNetworkAccessManager::qt_metacast
+32 (int (*)(...))QNetworkAccessManager::qt_metacall
+40 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+48 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkAccessManager::supportedSchemes
+120 (int (*)(...))QNetworkAccessManager::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7f53bca33680) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+QObject (0x0x7f53bca604e0) 0
+ primary-for QNetworkAccessManager (0x0x7f53bca33680)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f53bca606c0) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f53bc71cc00) 0 empty
+
+Vtable for QNetworkCookieJar
+QNetworkCookieJar::_ZTV17QNetworkCookieJar: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkCookieJar)
+16 (int (*)(...))QNetworkCookieJar::metaObject
+24 (int (*)(...))QNetworkCookieJar::qt_metacast
+32 (int (*)(...))QNetworkCookieJar::qt_metacall
+40 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+48 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkCookieJar::cookiesForUrl
+120 (int (*)(...))QNetworkCookieJar::setCookiesFromUrl
+128 (int (*)(...))QNetworkCookieJar::insertCookie
+136 (int (*)(...))QNetworkCookieJar::updateCookie
+144 (int (*)(...))QNetworkCookieJar::deleteCookie
+152 (int (*)(...))QNetworkCookieJar::validateCookie
+
+Class QNetworkCookieJar
+ size=16 align=8
+ base size=16 base align=8
+QNetworkCookieJar (0x0x7f53bc717bc8) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+QObject (0x0x7f53bc71cba0) 0
+ primary-for QNetworkCookieJar (0x0x7f53bc717bc8)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f53bc71cd80) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f53bc7bd6c0) 0 empty
+
+Vtable for QNetworkDiskCache
+QNetworkDiskCache::_ZTV17QNetworkDiskCache: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkDiskCache)
+16 (int (*)(...))QNetworkDiskCache::metaObject
+24 (int (*)(...))QNetworkDiskCache::qt_metacast
+32 (int (*)(...))QNetworkDiskCache::qt_metacall
+40 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+48 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkDiskCache::metaData
+120 (int (*)(...))QNetworkDiskCache::updateMetaData
+128 (int (*)(...))QNetworkDiskCache::data
+136 (int (*)(...))QNetworkDiskCache::remove
+144 (int (*)(...))QNetworkDiskCache::cacheSize
+152 (int (*)(...))QNetworkDiskCache::prepare
+160 (int (*)(...))QNetworkDiskCache::insert
+168 (int (*)(...))QNetworkDiskCache::clear
+176 (int (*)(...))QNetworkDiskCache::expire
+
+Class QNetworkDiskCache
+ size=16 align=8
+ base size=16 base align=8
+QNetworkDiskCache (0x0x7f53bc7b7410) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+QAbstractNetworkCache (0x0x7f53bc7b7478) 0
+ primary-for QNetworkDiskCache (0x0x7f53bc7b7410)
+QObject (0x0x7f53bc7bd660) 0
+ primary-for QAbstractNetworkCache (0x0x7f53bc7b7478)
+
+Class QNetworkInformation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkInformation::QPrivateSignal (0x0x7f53bc7bd8a0) 0 empty
+
+Vtable for QNetworkInformation
+QNetworkInformation::_ZTV19QNetworkInformation: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNetworkInformation)
+16 (int (*)(...))QNetworkInformation::metaObject
+24 (int (*)(...))QNetworkInformation::qt_metacast
+32 (int (*)(...))QNetworkInformation::qt_metacall
+40 (int (*)(...))QNetworkInformation::~QNetworkInformation
+48 (int (*)(...))QNetworkInformation::~QNetworkInformation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkInformation
+ size=16 align=8
+ base size=16 base align=8
+QNetworkInformation (0x0x7f53bc7b74e0) 0
+ vptr=((& QNetworkInformation::_ZTV19QNetworkInformation) + 16)
+QObject (0x0x7f53bc7bd840) 0
+ primary-for QNetworkInformation (0x0x7f53bc7b74e0)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f53bc7bdf60) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f53bc6422a0) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f53bc360a80) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f53bc40a300) 0
+
+Vtable for QNetworkProxyFactory
+QNetworkProxyFactory::_ZTV20QNetworkProxyFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QNetworkProxyFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNetworkProxyFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyFactory (0x0x7f53bc0f6060) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f53bc0f6660) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QNetworkReply)
+16 (int (*)(...))QNetworkReply::metaObject
+24 (int (*)(...))QNetworkReply::qt_metacast
+32 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::writeData
+248 (int (*)(...))QNetworkReply::setReadBufferSize
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QNetworkReply::ignoreSslErrors
+272 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+288 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7f53bc491f70) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+QIODevice (0x0x7f53bc0a4700) 0
+ primary-for QNetworkReply (0x0x7f53bc491f70)
+QObject (0x0x7f53bc0f65a0) 0
+ primary-for QIODevice (0x0x7f53bc0a4700)
+QIODeviceBase (0x0x7f53bc0f6600) 0 empty
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7f53bc157900) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f53bc1bca20) 0 empty
+
+Vtable for QTcpServer
+QTcpServer::_ZTV10QTcpServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpServer)
+16 (int (*)(...))QTcpServer::metaObject
+24 (int (*)(...))QTcpServer::qt_metacast
+32 (int (*)(...))QTcpServer::qt_metacall
+40 (int (*)(...))QTcpServer::~QTcpServer
+48 (int (*)(...))QTcpServer::~QTcpServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QTcpServer::incomingConnection
+
+Class QTcpServer
+ size=16 align=8
+ base size=16 base align=8
+QTcpServer (0x0x7f53bc1bf7b8) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+QObject (0x0x7f53bc1bc9c0) 0
+ primary-for QTcpServer (0x0x7f53bc1bf7b8)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f53bc1bcba0) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f53bc26f4e0) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f53bc069960) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f53bbce8420) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f53bbd2ba20) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f53bbdcf480) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUdpSocket)
+16 (int (*)(...))QUdpSocket::metaObject
+24 (int (*)(...))QUdpSocket::qt_metacast
+32 (int (*)(...))QUdpSocket::qt_metacall
+40 (int (*)(...))QUdpSocket::~QUdpSocket
+48 (int (*)(...))QUdpSocket::~QUdpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7f53bbdc6e38) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+QAbstractSocket (0x0x7f53bbdc6ea0) 0
+ primary-for QUdpSocket (0x0x7f53bbdc6e38)
+QIODevice (0x0x7f53bbd375b0) 0
+ primary-for QAbstractSocket (0x0x7f53bbdc6ea0)
+QObject (0x0x7f53bbdcf3c0) 0
+ primary-for QIODevice (0x0x7f53bbd375b0)
+QIODeviceBase (0x0x7f53bbdcf420) 0 empty
+
+Class QAbstractPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractPrintDialog::QPrivateSignal (0x0x7f53bbdcf780) 0 empty
+
+Vtable for QAbstractPrintDialog
+QAbstractPrintDialog::_ZTV20QAbstractPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAbstractPrintDialog)
+16 (int (*)(...))QAbstractPrintDialog::metaObject
+24 (int (*)(...))QAbstractPrintDialog::qt_metacast
+32 (int (*)(...))QAbstractPrintDialog::qt_metacall
+40 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+48 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+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 (*)(...))(& _ZTI20QAbstractPrintDialog)
+488 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD1Ev
+496 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD0Ev
+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 QAbstractPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QAbstractPrintDialog (0x0x7f53bbdc6f08) 0
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 16)
+QDialog (0x0x7f53bbdc6f70) 0
+ primary-for QAbstractPrintDialog (0x0x7f53bbdc6f08)
+QWidget (0x0x7f53bbd37850) 0
+ primary-for QDialog (0x0x7f53bbdc6f70)
+QObject (0x0x7f53bbdcf6c0) 0
+ primary-for QWidget (0x0x7f53bbd37850)
+QPaintDevice (0x0x7f53bbdcf720) 16
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 488)
+
+Class QPageSetupDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPageSetupDialog::QPrivateSignal (0x0x7f53bbdcff00) 0 empty
+
+Vtable for QPageSetupDialog
+QPageSetupDialog::_ZTV16QPageSetupDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QPageSetupDialog)
+16 (int (*)(...))QPageSetupDialog::metaObject
+24 (int (*)(...))QPageSetupDialog::qt_metacast
+32 (int (*)(...))QPageSetupDialog::qt_metacall
+40 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+48 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+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 (*)(...))QPageSetupDialog::exec
+448 (int (*)(...))QPageSetupDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI16QPageSetupDialog)
+488 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD1Ev
+496 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD0Ev
+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 QPageSetupDialog
+ size=40 align=8
+ base size=40 base align=8
+QPageSetupDialog (0x0x7f53bbe080d0) 0
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 16)
+QDialog (0x0x7f53bbe08138) 0
+ primary-for QPageSetupDialog (0x0x7f53bbe080d0)
+QWidget (0x0x7f53bbe1e2a0) 0
+ primary-for QDialog (0x0x7f53bbe08138)
+QObject (0x0x7f53bbdcfe40) 0
+ primary-for QWidget (0x0x7f53bbe1e2a0)
+QPaintDevice (0x0x7f53bbdcfea0) 16
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 488)
+
+Class QPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintDialog::QPrivateSignal (0x0x7f53bbe69180) 0 empty
+
+Vtable for QPrintDialog
+QPrintDialog::_ZTV12QPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintDialog)
+16 (int (*)(...))QPrintDialog::metaObject
+24 (int (*)(...))QPrintDialog::qt_metacast
+32 (int (*)(...))QPrintDialog::qt_metacall
+40 (int (*)(...))QPrintDialog::~QPrintDialog
+48 (int (*)(...))QPrintDialog::~QPrintDialog
+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 (*)(...))QPrintDialog::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 (*)(...))QPrintDialog::exec
+448 (int (*)(...))QPrintDialog::done
+456 (int (*)(...))QPrintDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QPrintDialog)
+488 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD1Ev
+496 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD0Ev
+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 QPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintDialog (0x0x7f53bbe081a0) 0
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 16)
+QAbstractPrintDialog (0x0x7f53bbe08208) 0
+ primary-for QPrintDialog (0x0x7f53bbe081a0)
+QDialog (0x0x7f53bbe08270) 0
+ primary-for QAbstractPrintDialog (0x0x7f53bbe08208)
+QWidget (0x0x7f53bbe1e460) 0
+ primary-for QDialog (0x0x7f53bbe08270)
+QObject (0x0x7f53bbe690c0) 0
+ primary-for QWidget (0x0x7f53bbe1e460)
+QPaintDevice (0x0x7f53bbe69120) 16
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 488)
+
+Vtable for QPrinter
+QPrinter::_ZTV8QPrinter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPrinter)
+16 (int (*)(...))QPrinter::~QPrinter
+24 (int (*)(...))QPrinter::~QPrinter
+32 (int (*)(...))QPrinter::devType
+40 (int (*)(...))QPrinter::paintEngine
+48 (int (*)(...))QPrinter::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPrinter::newPage
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPrinter
+ size=32 align=8
+ base size=32 base align=8
+QPrinter (0x0x7f53bbe082d8) 0
+ vptr=((& QPrinter::_ZTV8QPrinter) + 16)
+QPagedPaintDevice (0x0x7f53bbe08340) 0
+ primary-for QPrinter (0x0x7f53bbe082d8)
+QPaintDevice (0x0x7f53bbe69300) 0
+ primary-for QPagedPaintDevice (0x0x7f53bbe08340)
+
+Vtable for QPrintEngine
+QPrintEngine::_ZTV12QPrintEngine: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintEngine)
+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 QPrintEngine
+ size=8 align=8
+ base size=8 base align=8
+QPrintEngine (0x0x7f53bbe69960) 0 nearly-empty
+ vptr=((& QPrintEngine::_ZTV12QPrintEngine) + 16)
+
+Class QPrinterInfo
+ size=8 align=8
+ base size=8 base align=8
+QPrinterInfo (0x0x7f53bbe69ba0) 0
+
+Class QPrintPreviewDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewDialog::QPrivateSignal (0x0x7f53bbe69de0) 0 empty
+
+Vtable for QPrintPreviewDialog
+QPrintPreviewDialog::_ZTV19QPrintPreviewDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+16 (int (*)(...))QPrintPreviewDialog::metaObject
+24 (int (*)(...))QPrintPreviewDialog::qt_metacast
+32 (int (*)(...))QPrintPreviewDialog::qt_metacall
+40 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+48 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+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 (*)(...))QPrintPreviewDialog::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 (*)(...))QPrintPreviewDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+488 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD1Ev
+496 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD0Ev
+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 QPrintPreviewDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewDialog (0x0x7f53bbe08410) 0
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 16)
+QDialog (0x0x7f53bbe08478) 0
+ primary-for QPrintPreviewDialog (0x0x7f53bbe08410)
+QWidget (0x0x7f53bbab6d20) 0
+ primary-for QDialog (0x0x7f53bbe08478)
+QObject (0x0x7f53bbe69d20) 0
+ primary-for QWidget (0x0x7f53bbab6d20)
+QPaintDevice (0x0x7f53bbe69d80) 16
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 488)
+
+Class QPrintPreviewWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewWidget::QPrivateSignal (0x0x7f53bbae6060) 0 empty
+
+Vtable for QPrintPreviewWidget
+QPrintPreviewWidget::_ZTV19QPrintPreviewWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewWidget)
+16 (int (*)(...))QPrintPreviewWidget::metaObject
+24 (int (*)(...))QPrintPreviewWidget::qt_metacast
+32 (int (*)(...))QPrintPreviewWidget::qt_metacall
+40 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+48 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+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 (*)(...))QPrintPreviewWidget::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 (*)(...))(& _ZTI19QPrintPreviewWidget)
+448 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD1Ev
+456 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD0Ev
+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 QPrintPreviewWidget
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewWidget (0x0x7f53bbe084e0) 0
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 16)
+QWidget (0x0x7f53bbab6ee0) 0
+ primary-for QPrintPreviewWidget (0x0x7f53bbe084e0)
+QObject (0x0x7f53bbe69f60) 0
+ primary-for QWidget (0x0x7f53bbab6ee0)
+QPaintDevice (0x0x7f53bbae6000) 16
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 448)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f53bbae61e0) 0
+
+Class QJSNumberCoercion
+ size=8 align=8
+ base size=8 base align=8
+QJSNumberCoercion (0x0x7f53bbb865a0) 0
+
+Class QJSPrimitiveUndefined
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveUndefined (0x0x7f53bbb86ba0) 0 empty
+
+Class QJSPrimitiveNull
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveNull (0x0x7f53bbb86c00) 0 empty
+
+Class QJSPrimitiveValue::AddOperators
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveValue::AddOperators (0x0x7f53bbb86d20) 0 empty
+
+Class QJSPrimitiveValue::SubOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::SubOperators (0x0x7f53bbe08bc8) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::SubOperators> (0x0x7f53bbb86de0) 0 empty
+
+Class QJSPrimitiveValue::MulOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::MulOperators (0x0x7f53bbe08c30) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::MulOperators> (0x0x7f53bbb86ea0) 0 empty
+
+Class QJSPrimitiveValue::DivOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::DivOperators (0x0x7f53bbe08c98) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::DivOperators> (0x0x7f53bbb86f60) 0 empty
+
+Class QJSPrimitiveValue::QJSPrimitiveValuePrivate
+ size=32 align=8
+ base size=25 base align=8
+QJSPrimitiveValue::QJSPrimitiveValuePrivate (0x0x7f53bbbce000) 0
+
+Class QJSPrimitiveValue
+ size=32 align=8
+ base size=32 base align=8
+QJSPrimitiveValue (0x0x7f53bbb86c60) 0
+
+Class QJSManagedValue
+ size=8 align=8
+ base size=8 base align=8
+QJSManagedValue (0x0x7f53bb9045a0) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f53bb9048a0) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f53bb904b40) 0 empty
+
+Vtable for QJSEngine
+QJSEngine::_ZTV9QJSEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QJSEngine)
+16 (int (*)(...))QJSEngine::metaObject
+24 (int (*)(...))QJSEngine::qt_metacast
+32 (int (*)(...))QJSEngine::qt_metacall
+40 (int (*)(...))QJSEngine::~QJSEngine
+48 (int (*)(...))QJSEngine::~QJSEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QJSEngine
+ size=24 align=8
+ base size=24 base align=8
+QJSEngine (0x0x7f53bbc7a618) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+QObject (0x0x7f53bb904ae0) 0
+ primary-for QJSEngine (0x0x7f53bbc7a618)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f53bb9634e0) 0
+
+Vtable for QQmlParserStatus
+QQmlParserStatus::_ZTV16QQmlParserStatus: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlParserStatus)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlParserStatus
+ size=16 align=8
+ base size=16 base align=8
+QQmlParserStatus (0x0x7f53bb9636c0) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f53bb9e71e0) 0
+
+Vtable for QQmlPropertyValueSource
+QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQmlPropertyValueSource)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlPropertyValueSource
+ size=8 align=8
+ base size=8 base align=8
+QQmlPropertyValueSource (0x0x7f53bb9e77e0) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=176 align=8
+ base size=170 base align=8
+QQmlPrivate::RegisterType (0x0x7f53bba47000) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=152 align=8
+ base size=152 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7f53bba47060) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f53bba470c0) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f53bba47120) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f53bba47180) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7f53bba474e0) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f53bba475a0) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f53bba47600) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7f53bba47660) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7f53bba476c0) 0
+
+Class QQmlPrivate::AOTCompiledContext
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::AOTCompiledContext (0x0x7f53bba47720) 0
+
+Class QQmlPrivate::AOTCompiledFunction
+ size=48 align=8
+ base size=48 base align=8
+QQmlPrivate::AOTCompiledFunction (0x0x7f53bba47780) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f53bb6f7000) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f53bb6f7060) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7f53bb6f70c0) 0
+
+Vtable for QQmlAbstractUrlInterceptor
+QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QQmlAbstractUrlInterceptor)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlAbstractUrlInterceptor
+ size=8 align=8
+ base size=8 base align=8
+QQmlAbstractUrlInterceptor (0x0x7f53bb892cc0) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f53bb892d20) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7f53bb4f57e0) 0 empty
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 (int (*)(...))QQmlImageProviderBase::metaObject
+24 (int (*)(...))QQmlImageProviderBase::qt_metacast
+32 (int (*)(...))QQmlImageProviderBase::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 QQmlImageProviderBase
+ size=16 align=8
+ base size=16 base align=8
+QQmlImageProviderBase (0x0x7f53bb4f8af8) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+QObject (0x0x7f53bb4f5780) 0
+ primary-for QQmlImageProviderBase (0x0x7f53bb4f8af8)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f53bc55b720) 0 empty
+
+Vtable for QQmlEngine
+QQmlEngine::_ZTV10QQmlEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQmlEngine)
+16 (int (*)(...))QQmlEngine::metaObject
+24 (int (*)(...))QQmlEngine::qt_metacast
+32 (int (*)(...))QQmlEngine::qt_metacall
+40 (int (*)(...))QQmlEngine::~QQmlEngine
+48 (int (*)(...))QQmlEngine::~QQmlEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngine (0x0x7f53bbc7a270) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+QJSEngine (0x0x7f53bda73680) 0
+ primary-for QQmlEngine (0x0x7f53bbc7a270)
+QObject (0x0x7f53bc55b660) 0
+ primary-for QJSEngine (0x0x7f53bda73680)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f53c5180600) 0 empty
+
+Vtable for QQmlApplicationEngine
+QQmlApplicationEngine::_ZTV21QQmlApplicationEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlApplicationEngine)
+16 (int (*)(...))QQmlApplicationEngine::metaObject
+24 (int (*)(...))QQmlApplicationEngine::qt_metacast
+32 (int (*)(...))QQmlApplicationEngine::qt_metacall
+40 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+48 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlApplicationEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlApplicationEngine (0x0x7f53bda736e8) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+QQmlEngine (0x0x7f53bda737b8) 0
+ primary-for QQmlApplicationEngine (0x0x7f53bda736e8)
+QJSEngine (0x0x7f53bda73820) 0
+ primary-for QQmlEngine (0x0x7f53bda737b8)
+QObject (0x0x7f53c5180000) 0
+ primary-for QJSEngine (0x0x7f53bda73820)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f53c6079de0) 0 empty
+
+Vtable for QQmlComponent
+QQmlComponent::_ZTV13QQmlComponent: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlComponent)
+16 (int (*)(...))QQmlComponent::metaObject
+24 (int (*)(...))QQmlComponent::qt_metacast
+32 (int (*)(...))QQmlComponent::qt_metacall
+40 (int (*)(...))QQmlComponent::~QQmlComponent
+48 (int (*)(...))QQmlComponent::~QQmlComponent
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlComponent::create
+120 (int (*)(...))QQmlComponent::beginCreate
+128 (int (*)(...))QQmlComponent::completeCreate
+
+Class QQmlComponent
+ size=16 align=8
+ base size=16 base align=8
+QQmlComponent (0x0x7f53be3cba90) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+QObject (0x0x7f53c5cdc8a0) 0
+ primary-for QQmlComponent (0x0x7f53be3cba90)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f53cc806a20) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7f53cc7c7f00) 0
+
+Vtable for QQmlContext
+QQmlContext::_ZTV11QQmlContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QQmlContext)
+16 (int (*)(...))QQmlContext::metaObject
+24 (int (*)(...))QQmlContext::qt_metacast
+32 (int (*)(...))QQmlContext::qt_metacall
+40 (int (*)(...))QQmlContext::~QQmlContext
+48 (int (*)(...))QQmlContext::~QQmlContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlContext
+ size=16 align=8
+ base size=16 base align=8
+QQmlContext (0x0x7f53be3cbf70) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+QObject (0x0x7f53cbf46c60) 0
+ primary-for QQmlContext (0x0x7f53be3cbf70)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f53c6a76720) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f53c6d6e060) 0 empty
+
+Vtable for QQmlExpression
+QQmlExpression::_ZTV14QQmlExpression: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QQmlExpression)
+16 (int (*)(...))QQmlExpression::metaObject
+24 (int (*)(...))QQmlExpression::qt_metacast
+32 (int (*)(...))QQmlExpression::qt_metacall
+40 (int (*)(...))QQmlExpression::~QQmlExpression
+48 (int (*)(...))QQmlExpression::~QQmlExpression
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlExpression
+ size=16 align=8
+ base size=16 base align=8
+QQmlExpression (0x0x7f53d1a3e1a0) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+QObject (0x0x7f53c6d6e000) 0
+ primary-for QQmlExpression (0x0x7f53d1a3e1a0)
+
+Vtable for QQmlTypesExtensionInterface
+QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QQmlTypesExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlTypesExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlTypesExtensionInterface (0x0x7f53c6d6e480) 0 nearly-empty
+ vptr=((& QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface) + 16)
+
+Vtable for QQmlExtensionInterface
+QQmlExtensionInterface::_ZTV22QQmlExtensionInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QQmlExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlExtensionInterface (0x0x7f53d1a3ee38) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+QQmlTypesExtensionInterface (0x0x7f53c6d6e4e0) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f53d1a3ee38)
+
+Vtable for QQmlEngineExtensionInterface
+QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QQmlEngineExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlEngineExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlEngineExtensionInterface (0x0x7f53c6d6ec60) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f53c7f93360) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+16 (int (*)(...))QQmlExtensionPlugin::metaObject
+24 (int (*)(...))QQmlExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlExtensionPlugin::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 (*)(...))QQmlExtensionPlugin::unregisterTypes
+128 (int (*)(...))QQmlExtensionPlugin::initializeEngine
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+152 0
+160 0
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7f53c08cf930) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+QObject (0x0x7f53c807da80) 0
+ primary-for QQmlExtensionPlugin (0x0x7f53c08cf930)
+QQmlExtensionInterface (0x0x7f53d1a3eea0) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+QQmlTypesExtensionInterface (0x0x7f53c807dae0) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f53d1a3eea0)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7f53c886f300) 0 empty
+
+Vtable for QQmlEngineExtensionPlugin
+QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+16 (int (*)(...))QQmlEngineExtensionPlugin::metaObject
+24 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacall
+40 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+48 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlEngineExtensionPlugin::initializeEngine
+120 (int (*)(...))-16
+128 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+136 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD1Ev
+144 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD0Ev
+152 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlEngineExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngineExtensionPlugin (0x0x7f53c10704d0) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+QObject (0x0x7f53c7f935a0) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7f53c10704d0)
+QQmlEngineExtensionInterface (0x0x7f53c886f2a0) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f53c886fa80) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f53cc27b4e0) 0 empty
+
+Vtable for QQmlFileSelector
+QQmlFileSelector::_ZTV16QQmlFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlFileSelector)
+16 (int (*)(...))QQmlFileSelector::metaObject
+24 (int (*)(...))QQmlFileSelector::qt_metacast
+32 (int (*)(...))QQmlFileSelector::qt_metacall
+40 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+48 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QQmlFileSelector (0x0x7f53c3300138) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+QObject (0x0x7f53cc27b480) 0
+ primary-for QQmlFileSelector (0x0x7f53c3300138)
+
+Vtable for QQmlIncubator
+QQmlIncubator::_ZTV13QQmlIncubator: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlIncubator)
+16 (int (*)(...))QQmlIncubator::~QQmlIncubator
+24 (int (*)(...))QQmlIncubator::~QQmlIncubator
+32 (int (*)(...))QQmlIncubator::statusChanged
+40 (int (*)(...))QQmlIncubator::setInitialState
+
+Class QQmlIncubator
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubator (0x0x7f53cc27b7e0) 0
+ vptr=((& QQmlIncubator::_ZTV13QQmlIncubator) + 16)
+
+Vtable for QQmlIncubationController
+QQmlIncubationController::_ZTV24QQmlIncubationController: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQmlIncubationController)
+16 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+24 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+32 (int (*)(...))QQmlIncubationController::incubatingObjectCountChanged
+
+Class QQmlIncubationController
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubationController (0x0x7f53cbf124e0) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f53c3300270) 0
+QDebug (0x0x7f53c52eca28) 0
+QIODeviceBase (0x0x7f53cbf12540) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7f53d1b52ea0) 0
+
+Vtable for QQmlNetworkAccessManagerFactory
+QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QQmlNetworkAccessManagerFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlNetworkAccessManagerFactory
+ size=8 align=8
+ base size=8 base align=8
+QQmlNetworkAccessManagerFactory (0x0x7f53d1b52f60) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f53d1b5e060) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f53d1c51240) 0 empty
+
+Vtable for QQmlPropertyMap
+QQmlPropertyMap::_ZTV15QQmlPropertyMap: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQmlPropertyMap)
+16 (int (*)(...))QQmlPropertyMap::metaObject
+24 (int (*)(...))QQmlPropertyMap::qt_metacast
+32 (int (*)(...))QQmlPropertyMap::qt_metacall
+40 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+48 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlPropertyMap::updateValue
+
+Class QQmlPropertyMap
+ size=16 align=8
+ base size=16 base align=8
+QQmlPropertyMap (0x0x7f53ce2ad340) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+QObject (0x0x7f53d1c51180) 0
+ primary-for QQmlPropertyMap (0x0x7f53ce2ad340)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f53d1c87e40) 0 empty
+
+Vtable for QQuickTransform
+QQuickTransform::_ZTV15QQuickTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQuickTransform)
+16 (int (*)(...))QQuickTransform::metaObject
+24 (int (*)(...))QQuickTransform::qt_metacast
+32 (int (*)(...))QQuickTransform::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 QQuickTransform
+ size=16 align=8
+ base size=16 base align=8
+QQuickTransform (0x0x7f53ce2ad3a8) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+QObject (0x0x7f53d1c87d80) 0
+ primary-for QQuickTransform (0x0x7f53ce2ad3a8)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f53d19a3e40) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f53d19a3ea0) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f53d19a3f60) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickItem)
+16 (int (*)(...))QQuickItem::metaObject
+24 (int (*)(...))QQuickItem::qt_metacast
+32 (int (*)(...))QQuickItem::qt_metacall
+40 (int (*)(...))QQuickItem::~QQuickItem
+48 (int (*)(...))QQuickItem::~QQuickItem
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickItem::isTextureProvider
+152 (int (*)(...))QQuickItem::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickItem::updatePaintNode
+368 (int (*)(...))QQuickItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))-16
+392 (int (*)(...))(& _ZTI10QQuickItem)
+400 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7f53c8d47e00) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+QObject (0x0x7f53d19a3600) 0
+ primary-for QQuickItem (0x0x7f53c8d47e00)
+QQmlParserStatus (0x0x7f53d19a3660) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 400)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f53c32a8960) 0 empty
+
+Vtable for QQuickFramebufferObject::Renderer
+QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN23QQuickFramebufferObject8RendererE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QQuickFramebufferObject::Renderer::createFramebufferObject
+48 (int (*)(...))QQuickFramebufferObject::Renderer::synchronize
+
+Class QQuickFramebufferObject::Renderer
+ size=16 align=8
+ base size=16 base align=8
+QQuickFramebufferObject::Renderer (0x0x7f53c32a8ea0) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+16 (int (*)(...))QQuickFramebufferObject::metaObject
+24 (int (*)(...))QQuickFramebufferObject::qt_metacast
+32 (int (*)(...))QQuickFramebufferObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickFramebufferObject::isTextureProvider
+152 (int (*)(...))QQuickFramebufferObject::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickFramebufferObject::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+368 (int (*)(...))QQuickFramebufferObject::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7f53ce7d7d68) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+QQuickItem (0x0x7f53cc76be70) 0
+ primary-for QQuickFramebufferObject (0x0x7f53ce7d7d68)
+QObject (0x0x7f53c32a8300) 0
+ primary-for QQuickItem (0x0x7f53cc76be70)
+QQmlParserStatus (0x0x7f53c32a8900) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 408)
+
+Class QQuickGraphicsConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsConfiguration (0x0x7f53c32e22a0) 0
+
+Class QQuickGraphicsDevice
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsDevice (0x0x7f53c32e2300) 0
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f53c32e2960) 0 empty
+
+Vtable for QQuickTextureFactory
+QQuickTextureFactory::_ZTV20QQuickTextureFactory: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickTextureFactory)
+16 (int (*)(...))QQuickTextureFactory::metaObject
+24 (int (*)(...))QQuickTextureFactory::qt_metacast
+32 (int (*)(...))QQuickTextureFactory::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 (*)(...))QQuickTextureFactory::image
+
+Class QQuickTextureFactory
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextureFactory (0x0x7f53cea72000) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+QObject (0x0x7f53c32e2900) 0
+ primary-for QQuickTextureFactory (0x0x7f53cea72000)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f53c33fe840) 0 empty
+
+Vtable for QQuickImageResponse
+QQuickImageResponse::_ZTV19QQuickImageResponse: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageResponse)
+16 (int (*)(...))QQuickImageResponse::metaObject
+24 (int (*)(...))QQuickImageResponse::qt_metacast
+32 (int (*)(...))QQuickImageResponse::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 (*)(...))QQuickImageResponse::errorString
+128 (int (*)(...))QQuickImageResponse::cancel
+
+Class QQuickImageResponse
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageResponse (0x0x7f53cea72068) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+QObject (0x0x7f53c32e2f00) 0
+ primary-for QQuickImageResponse (0x0x7f53cea72068)
+
+Class QQuickImageProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageProvider::QPrivateSignal (0x0x7f53c343ef60) 0 empty
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::qt_metacall
+40 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+48 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickImageProvider (0x0x7f53cec1a5b0) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+QQmlImageProviderBase (0x0x7f53cec1a618) 0
+ primary-for QQuickImageProvider (0x0x7f53cec1a5b0)
+QObject (0x0x7f53c343eae0) 0
+ primary-for QQmlImageProviderBase (0x0x7f53cec1a618)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::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 (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=32 align=8
+ base size=32 base align=8
+QQuickAsyncImageProvider (0x0x7f53c897b5b0) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+QQuickImageProvider (0x0x7f53c897b7b8) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f53c897b5b0)
+QQmlImageProviderBase (0x0x7f53c897b9c0) 0
+ primary-for QQuickImageProvider (0x0x7f53c897b7b8)
+QObject (0x0x7f53c3454600) 0
+ primary-for QQmlImageProviderBase (0x0x7f53c897b9c0)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f53c30987e0) 0 empty
+
+Vtable for QQuickItemGrabResult
+QQuickItemGrabResult::_ZTV20QQuickItemGrabResult: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickItemGrabResult)
+16 (int (*)(...))QQuickItemGrabResult::metaObject
+24 (int (*)(...))QQuickItemGrabResult::qt_metacast
+32 (int (*)(...))QQuickItemGrabResult::qt_metacall
+40 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+48 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+56 (int (*)(...))QQuickItemGrabResult::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickItemGrabResult
+ size=16 align=8
+ base size=16 base align=8
+QQuickItemGrabResult (0x0x7f53c7ceaa28) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+QObject (0x0x7f53c3454660) 0
+ primary-for QQuickItemGrabResult (0x0x7f53c7ceaa28)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f53c30b1420) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+16 (int (*)(...))QQuickPaintedItem::metaObject
+24 (int (*)(...))QQuickPaintedItem::qt_metacast
+32 (int (*)(...))QQuickPaintedItem::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickPaintedItem::isTextureProvider
+152 (int (*)(...))QQuickPaintedItem::textureProvider
+160 (int (*)(...))QQuickPaintedItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickPaintedItem::updatePaintNode
+368 (int (*)(...))QQuickPaintedItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7f53d1be3680) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+QQuickItem (0x0x7f53ce5d3f50) 0
+ primary-for QQuickPaintedItem (0x0x7f53d1be3680)
+QObject (0x0x7f53c30b11e0) 0
+ primary-for QQuickItem (0x0x7f53ce5d3f50)
+QQmlParserStatus (0x0x7f53c30b13c0) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 408)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f53c2d71540) 0 empty
+
+Vtable for QQuickRenderControl
+QQuickRenderControl::_ZTV19QQuickRenderControl: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickRenderControl)
+16 (int (*)(...))QQuickRenderControl::metaObject
+24 (int (*)(...))QQuickRenderControl::qt_metacast
+32 (int (*)(...))QQuickRenderControl::qt_metacall
+40 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+48 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickRenderControl::renderWindow
+
+Class QQuickRenderControl
+ size=16 align=8
+ base size=16 base align=8
+QQuickRenderControl (0x0x7f53d1be3a28) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+QObject (0x0x7f53c2cfb0c0) 0
+ primary-for QQuickRenderControl (0x0x7f53d1be3a28)
+
+Class QQuickRenderTarget
+ size=8 align=8
+ base size=8 base align=8
+QQuickRenderTarget (0x0x7f53c2d71d80) 0
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f53c2e8f2a0) 0 empty
+
+Vtable for QQuickTextDocument
+QQuickTextDocument::_ZTV18QQuickTextDocument: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QQuickTextDocument)
+16 (int (*)(...))QQuickTextDocument::metaObject
+24 (int (*)(...))QQuickTextDocument::qt_metacast
+32 (int (*)(...))QQuickTextDocument::qt_metacall
+40 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+48 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextDocument (0x0x7f53d1bee618) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+QObject (0x0x7f53c2e8f240) 0
+ primary-for QQuickTextDocument (0x0x7f53d1bee618)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f53c2c4af60) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f53c2c74420) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f53c2c74480) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f53c2c74a80) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f53c2c74ae0) 0
+
+Vtable for QSGGeometry
+QSGGeometry::_ZTV11QSGGeometry: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGGeometry)
+16 (int (*)(...))QSGGeometry::~QSGGeometry
+24 (int (*)(...))QSGGeometry::~QSGGeometry
+
+Class QSGGeometry
+ size=128 align=8
+ base size=128 base align=8
+QSGGeometry (0x0x7f53c2c4af00) 0
+ vptr=((& QSGGeometry::_ZTV11QSGGeometry) + 16)
+
+Vtable for QSGNode
+QSGNode::_ZTV7QSGNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSGNode)
+16 (int (*)(...))QSGNode::~QSGNode
+24 (int (*)(...))QSGNode::~QSGNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGNode
+ size=72 align=8
+ base size=72 base align=8
+QSGNode (0x0x7f53c29f0480) 0
+ vptr=((& QSGNode::_ZTV7QSGNode) + 16)
+
+Vtable for QSGBasicGeometryNode
+QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGBasicGeometryNode)
+16 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+24 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGBasicGeometryNode
+ size=104 align=8
+ base size=104 base align=8
+QSGBasicGeometryNode (0x0x7f53d1c47bc8) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+QSGNode (0x0x7f53c2a3dcc0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f53d1c47bc8)
+
+Vtable for QSGGeometryNode
+QSGGeometryNode::_ZTV15QSGGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSGGeometryNode)
+16 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+24 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGGeometryNode
+ size=136 align=8
+ base size=136 base align=8
+QSGGeometryNode (0x0x7f53d1c47c30) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+QSGBasicGeometryNode (0x0x7f53d1c7d4e0) 0
+ primary-for QSGGeometryNode (0x0x7f53d1c47c30)
+QSGNode (0x0x7f53c2a5a0c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f53d1c7d4e0)
+
+Vtable for QSGClipNode
+QSGClipNode::_ZTV11QSGClipNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGClipNode)
+16 (int (*)(...))QSGClipNode::~QSGClipNode
+24 (int (*)(...))QSGClipNode::~QSGClipNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGClipNode
+ size=144 align=8
+ base size=144 base align=8
+QSGClipNode (0x0x7f53d1c7d548) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+QSGBasicGeometryNode (0x0x7f53d1c7d6e8) 0
+ primary-for QSGClipNode (0x0x7f53d1c7d548)
+QSGNode (0x0x7f53c2a5a540) 0
+ primary-for QSGBasicGeometryNode (0x0x7f53d1c7d6e8)
+
+Vtable for QSGTransformNode
+QSGTransformNode::_ZTV16QSGTransformNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGTransformNode)
+16 (int (*)(...))QSGTransformNode::~QSGTransformNode
+24 (int (*)(...))QSGTransformNode::~QSGTransformNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGTransformNode
+ size=208 align=8
+ base size=208 base align=8
+QSGTransformNode (0x0x7f53d1c7d8f0) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+QSGNode (0x0x7f53c2a5ade0) 0
+ primary-for QSGTransformNode (0x0x7f53d1c7d8f0)
+
+Vtable for QSGRootNode
+QSGRootNode::_ZTV11QSGRootNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGRootNode)
+16 (int (*)(...))QSGRootNode::~QSGRootNode
+24 (int (*)(...))QSGRootNode::~QSGRootNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGRootNode
+ size=96 align=8
+ base size=96 base align=8
+QSGRootNode (0x0x7f53d1c7d958) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+QSGNode (0x0x7f53c2a70e40) 0
+ primary-for QSGRootNode (0x0x7f53d1c7d958)
+
+Vtable for QSGOpacityNode
+QSGOpacityNode::_ZTV14QSGOpacityNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGOpacityNode)
+16 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+24 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+32 (int (*)(...))QSGOpacityNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGOpacityNode
+ size=88 align=8
+ base size=88 base align=8
+QSGOpacityNode (0x0x7f53d197f3a8) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+QSGNode (0x0x7f53c26c5660) 0
+ primary-for QSGOpacityNode (0x0x7f53d197f3a8)
+
+Vtable for QSGNodeVisitor
+QSGNodeVisitor::_ZTV14QSGNodeVisitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGNodeVisitor)
+16 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+24 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+32 (int (*)(...))QSGNodeVisitor::enterTransformNode
+40 (int (*)(...))QSGNodeVisitor::leaveTransformNode
+48 (int (*)(...))QSGNodeVisitor::enterClipNode
+56 (int (*)(...))QSGNodeVisitor::leaveClipNode
+64 (int (*)(...))QSGNodeVisitor::enterGeometryNode
+72 (int (*)(...))QSGNodeVisitor::leaveGeometryNode
+80 (int (*)(...))QSGNodeVisitor::enterOpacityNode
+88 (int (*)(...))QSGNodeVisitor::leaveOpacityNode
+96 (int (*)(...))QSGNodeVisitor::visitNode
+104 (int (*)(...))QSGNodeVisitor::visitChildren
+
+Class QSGNodeVisitor
+ size=8 align=8
+ base size=8 base align=8
+QSGNodeVisitor (0x0x7f53c26c57e0) 0 nearly-empty
+ vptr=((& QSGNodeVisitor::_ZTV14QSGNodeVisitor) + 16)
+
+Vtable for QSGRendererInterface
+QSGRendererInterface::_ZTV20QSGRendererInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGRendererInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QSGRendererInterface::getResource
+48 (int (*)(...))QSGRendererInterface::getResource
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRendererInterface
+ size=8 align=8
+ base size=8 base align=8
+QSGRendererInterface (0x0x7f53c270f0c0) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f53c2554900) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7f53c25549c0) 0
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QQuickWindow)
+16 (int (*)(...))QQuickWindow::metaObject
+24 (int (*)(...))QQuickWindow::qt_metacast
+32 (int (*)(...))QQuickWindow::qt_metacall
+40 (int (*)(...))QQuickWindow::~QQuickWindow
+48 (int (*)(...))QQuickWindow::~QQuickWindow
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickWindow::keyPressEvent
+232 (int (*)(...))QQuickWindow::keyReleaseEvent
+240 (int (*)(...))QQuickWindow::mousePressEvent
+248 (int (*)(...))QQuickWindow::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickWindow::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI12QQuickWindow)
+328 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+336 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7f53d19c3548) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+QWindow (0x0x7f53d1b63070) 0
+ primary-for QQuickWindow (0x0x7f53d19c3548)
+QObject (0x0x7f53c25547e0) 0
+ primary-for QWindow (0x0x7f53d1b63070)
+QSurface (0x0x7f53c2554840) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 328)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f53c1d78c00) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickView)
+16 (int (*)(...))QQuickView::metaObject
+24 (int (*)(...))QQuickView::qt_metacast
+32 (int (*)(...))QQuickView::qt_metacall
+40 (int (*)(...))QQuickView::~QQuickView
+48 (int (*)(...))QQuickView::~QQuickView
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QQuickView::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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickView::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickView::keyPressEvent
+232 (int (*)(...))QQuickView::keyReleaseEvent
+240 (int (*)(...))QQuickView::mousePressEvent
+248 (int (*)(...))QQuickView::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickView::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI10QQuickView)
+328 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+336 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7f53d181dd68) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+QQuickWindow (0x0x7f53d181df08) 0
+ primary-for QQuickView (0x0x7f53d181dd68)
+QWindow (0x0x7f53d1be13f0) 0
+ primary-for QQuickWindow (0x0x7f53d181df08)
+QObject (0x0x7f53c1ccbf60) 0
+ primary-for QWindow (0x0x7f53d1be13f0)
+QSurface (0x0x7f53c1d78ba0) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 328)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f53c159a660) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f53c1626360) 0
+
+Class QSGMaterialShader::GraphicsPipelineState
+ size=36 align=4
+ base size=36 base align=4
+QSGMaterialShader::GraphicsPipelineState (0x0x7f53c1679360) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+24 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+32 (int (*)(...))QSGMaterialShader::updateUniformData
+40 (int (*)(...))QSGMaterialShader::updateSampledImage
+48 (int (*)(...))QSGMaterialShader::updateGraphicsPipelineState
+
+Class QSGMaterialShader
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader (0x0x7f53c15d0f60) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16)
+
+Vtable for QSGMaterial
+QSGMaterial::_ZTV11QSGMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGMaterial)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QSGMaterial::compare
+
+Class QSGMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGMaterial (0x0x7f53c0c96360) 0
+ vptr=((& QSGMaterial::_ZTV11QSGMaterial) + 16)
+
+Vtable for QSGFlatColorMaterial
+QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGFlatColorMaterial)
+16 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+24 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+32 (int (*)(...))QSGFlatColorMaterial::type
+40 (int (*)(...))QSGFlatColorMaterial::createShader
+48 (int (*)(...))QSGFlatColorMaterial::compare
+
+Class QSGFlatColorMaterial
+ size=40 align=8
+ base size=40 base align=8
+QSGFlatColorMaterial (0x0x7f53d1868a28) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+QSGMaterial (0x0x7f53c0acd540) 0
+ primary-for QSGFlatColorMaterial (0x0x7f53d1868a28)
+
+Class QNativeInterface::QSGOpenGLTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGOpenGLTexture::TypeInfo (0x0x7f53c0acd720) 0 empty
+
+Vtable for QNativeInterface::QSGOpenGLTexture
+QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGOpenGLTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGOpenGLTexture (0x0x7f53c0acd6c0) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE) + 16)
+
+Class QNativeInterface::QSGVulkanTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGVulkanTexture::TypeInfo (0x0x7f53c0aef300) 0 empty
+
+Vtable for QNativeInterface::QSGVulkanTexture
+QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGVulkanTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGVulkanTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGVulkanTexture (0x0x7f53c0acdb40) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE) + 16)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f53c0b46480) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSGTexture)
+16 (int (*)(...))QSGTexture::metaObject
+24 (int (*)(...))QSGTexture::qt_metacast
+32 (int (*)(...))QSGTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7f53d1868d00) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+QObject (0x0x7f53c0b46420) 0
+ primary-for QSGTexture (0x0x7f53d1868d00)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f53c0b468a0) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGDynamicTexture)
+16 (int (*)(...))QSGDynamicTexture::metaObject
+24 (int (*)(...))QSGDynamicTexture::qt_metacast
+32 (int (*)(...))QSGDynamicTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7f53d1878000) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+QSGTexture (0x0x7f53d1878068) 0
+ primary-for QSGDynamicTexture (0x0x7f53d1878000)
+QObject (0x0x7f53c0b467e0) 0
+ primary-for QSGTexture (0x0x7f53d1878068)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSGImageNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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
+
+Class QSGImageNode
+ size=136 align=8
+ base size=136 base align=8
+QSGImageNode (0x0x7f53d1878888) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+QSGGeometryNode (0x0x7f53d18788f0) 0
+ primary-for QSGImageNode (0x0x7f53d1878888)
+QSGBasicGeometryNode (0x0x7f53d1878af8) 0
+ primary-for QSGGeometryNode (0x0x7f53d18788f0)
+QSGNode (0x0x7f53c0b46e40) 0
+ primary-for QSGBasicGeometryNode (0x0x7f53d1878af8)
+
+Vtable for QSGNinePatchNode
+QSGNinePatchNode::_ZTV16QSGNinePatchNode: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGNinePatchNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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 QSGNinePatchNode
+ size=136 align=8
+ base size=136 base align=8
+QSGNinePatchNode (0x0x7f53d188a0d0) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+QSGGeometryNode (0x0x7f53d188a208) 0
+ primary-for QSGNinePatchNode (0x0x7f53d188a0d0)
+QSGBasicGeometryNode (0x0x7f53d188a340) 0
+ primary-for QSGGeometryNode (0x0x7f53d188a208)
+QSGNode (0x0x7f53c0957a20) 0
+ primary-for QSGBasicGeometryNode (0x0x7f53d188a340)
+
+Vtable for QSGRectangleNode
+QSGRectangleNode::_ZTV16QSGRectangleNode: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGRectangleNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRectangleNode
+ size=136 align=8
+ base size=136 base align=8
+QSGRectangleNode (0x0x7f53d188a3a8) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+QSGGeometryNode (0x0x7f53c34b6068) 0
+ primary-for QSGRectangleNode (0x0x7f53d188a3a8)
+QSGBasicGeometryNode (0x0x7f53c34b60d0) 0
+ primary-for QSGGeometryNode (0x0x7f53c34b6068)
+QSGNode (0x0x7f53c097b060) 0
+ primary-for QSGBasicGeometryNode (0x0x7f53c34b60d0)
+
+Vtable for QSGRenderNode::RenderState
+QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QSGRenderNode11RenderStateE)
+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 (*)(...))QSGRenderNode::RenderState::get
+
+Class QSGRenderNode::RenderState
+ size=8 align=8
+ base size=8 base align=8
+QSGRenderNode::RenderState (0x0x7f53c0a213c0) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSGRenderNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))QSGRenderNode::changedStates
+56 (int (*)(...))QSGRenderNode::prepare
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QSGRenderNode::releaseResources
+80 (int (*)(...))QSGRenderNode::flags
+88 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=80 align=8
+ base size=80 base align=8
+QSGRenderNode (0x0x7f53c34c8138) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+QSGNode (0x0x7f53c0a21360) 0
+ primary-for QSGRenderNode (0x0x7f53c34c8138)
+
+Vtable for QSGSimpleRectNode
+QSGSimpleRectNode::_ZTV17QSGSimpleRectNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGSimpleRectNode)
+16 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+24 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleRectNode
+ size=312 align=8
+ base size=312 base align=8
+QSGSimpleRectNode (0x0x7f53c34c8c30) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+QSGGeometryNode (0x0x7f53c34c8c98) 0
+ primary-for QSGSimpleRectNode (0x0x7f53c34c8c30)
+QSGBasicGeometryNode (0x0x7f53c35235b0) 0
+ primary-for QSGGeometryNode (0x0x7f53c34c8c98)
+QSGNode (0x0x7f53c084d3c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f53c35235b0)
+
+Vtable for QSGOpaqueTextureMaterial
+QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QSGOpaqueTextureMaterial)
+16 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+24 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+32 (int (*)(...))QSGOpaqueTextureMaterial::type
+40 (int (*)(...))QSGOpaqueTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGOpaqueTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGOpaqueTextureMaterial (0x0x7f53c3523618) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+QSGMaterial (0x0x7f53c084da20) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f53c3523618)
+
+Vtable for QSGTextureMaterial
+QSGTextureMaterial::_ZTV18QSGTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureMaterial)
+16 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+24 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+32 (int (*)(...))QSGTextureMaterial::type
+40 (int (*)(...))QSGTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGTextureMaterial (0x0x7f53c353c6e8) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+QSGOpaqueTextureMaterial (0x0x7f53c353c750) 0
+ primary-for QSGTextureMaterial (0x0x7f53c353c6e8)
+QSGMaterial (0x0x7f53bf60df60) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f53c353c750)
+
+Vtable for QSGSimpleTextureNode
+QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGSimpleTextureNode)
+16 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+24 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleTextureNode
+ size=376 align=8
+ base size=376 base align=8
+QSGSimpleTextureNode (0x0x7f53c353ca28) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+QSGGeometryNode (0x0x7f53c353cd00) 0
+ primary-for QSGSimpleTextureNode (0x0x7f53c353ca28)
+QSGBasicGeometryNode (0x0x7f53c353cd68) 0
+ primary-for QSGGeometryNode (0x0x7f53c353cd00)
+QSGNode (0x0x7f53bf2ae000) 0
+ primary-for QSGBasicGeometryNode (0x0x7f53c353cd68)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f53be1f6180) 0 empty
+
+Vtable for QSGTextureProvider
+QSGTextureProvider::_ZTV18QSGTextureProvider: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureProvider)
+16 (int (*)(...))QSGTextureProvider::metaObject
+24 (int (*)(...))QSGTextureProvider::qt_metacast
+32 (int (*)(...))QSGTextureProvider::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 QSGTextureProvider
+ size=16 align=8
+ base size=16 base align=8
+QSGTextureProvider (0x0x7f53c354c820) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+QObject (0x0x7f53be1f6120) 0
+ primary-for QSGTextureProvider (0x0x7f53c354c820)
+
+Vtable for QSGVertexColorMaterial
+QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QSGVertexColorMaterial)
+16 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+24 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+32 (int (*)(...))QSGVertexColorMaterial::type
+40 (int (*)(...))QSGVertexColorMaterial::createShader
+48 (int (*)(...))QSGVertexColorMaterial::compare
+
+Class QSGVertexColorMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGVertexColorMaterial (0x0x7f53c354ca90) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+QSGMaterial (0x0x7f53be1f6360) 0
+ primary-for QSGVertexColorMaterial (0x0x7f53c354ca90)
+
+Class QAbstractItemModelTester::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModelTester::QPrivateSignal (0x0x7f53be1f6de0) 0 empty
+
+Vtable for QAbstractItemModelTester
+QAbstractItemModelTester::_ZTV24QAbstractItemModelTester: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractItemModelTester)
+16 (int (*)(...))QAbstractItemModelTester::metaObject
+24 (int (*)(...))QAbstractItemModelTester::qt_metacast
+32 (int (*)(...))QAbstractItemModelTester::qt_metacall
+40 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+48 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAbstractItemModelTester
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModelTester (0x0x7f53c354cd68) 0
+ vptr=((& QAbstractItemModelTester::_ZTV24QAbstractItemModelTester) + 16)
+QObject (0x0x7f53be1f6d80) 0
+ primary-for QAbstractItemModelTester (0x0x7f53c354cd68)
+
+Class QTest::QBenchmarkIterationController
+ size=4 align=4
+ base size=4 base align=4
+QTest::QBenchmarkIterationController (0x0x7f53be089e40) 0
+
+Class QTestEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTestEventLoop::QPrivateSignal (0x0x7f53bdae1f60) 0 empty
+
+Vtable for QTestEventLoop
+QTestEventLoop::_ZTV14QTestEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTestEventLoop)
+16 (int (*)(...))QTestEventLoop::metaObject
+24 (int (*)(...))QTestEventLoop::qt_metacast
+32 (int (*)(...))QTestEventLoop::qt_metacall
+40 (int (*)(...))QTestEventLoop::~QTestEventLoop
+48 (int (*)(...))QTestEventLoop::~QTestEventLoop
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTestEventLoop::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTestEventLoop
+ size=32 align=8
+ base size=32 base align=8
+QTestEventLoop (0x0x7f53c354cdd0) 0
+ vptr=((& QTestEventLoop::_ZTV14QTestEventLoop) + 16)
+QObject (0x0x7f53bde5df60) 0
+ primary-for QTestEventLoop (0x0x7f53c354cdd0)
+
+Vtable for QSignalSpy
+QSignalSpy::_ZTV10QSignalSpy: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSignalSpy)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QSignalSpy::qt_metacall
+40 (int (*)(...))QSignalSpy::~QSignalSpy
+48 (int (*)(...))QSignalSpy::~QSignalSpy
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalSpy
+ size=128 align=8
+ base size=121 base align=8
+QSignalSpy (0x0x7f53c2a0d700) 0
+ vptr=((& QSignalSpy::_ZTV10QSignalSpy) + 16)
+QObject (0x0x7f53bd51e4e0) 0
+ primary-for QSignalSpy (0x0x7f53c2a0d700)
+QList<QList<QVariant> > (0x0x7f53c3633ea0) 16
+QListSpecialMethods<QList<QVariant> > (0x0x7f53c3633e38) 16 empty
+QListSpecialMethodsBase<QList<QVariant> > (0x0x7f53bd543c60) 16 empty
+
+Class QTestData
+ size=8 align=8
+ base size=8 base align=8
+QTestData (0x0x7f53bcddbc00) 0
+
+Class QTest::Internal::QCborValueFormatter
+ size=1 align=1
+ base size=0 base align=1
+QTest::Internal::QCborValueFormatter (0x0x7f53bbd0d000) 0 empty
+
+Vtable for QSvgGenerator
+QSvgGenerator::_ZTV13QSvgGenerator: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSvgGenerator)
+16 (int (*)(...))QSvgGenerator::~QSvgGenerator
+24 (int (*)(...))QSvgGenerator::~QSvgGenerator
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))QSvgGenerator::paintEngine
+48 (int (*)(...))QSvgGenerator::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QSvgGenerator
+ size=24 align=8
+ base size=24 base align=8
+QSvgGenerator (0x0x7f53c1145340) 0
+ vptr=((& QSvgGenerator::_ZTV13QSvgGenerator) + 16)
+QPaintDevice (0x0x7f53bd9bc4e0) 0
+ primary-for QSvgGenerator (0x0x7f53c1145340)
+
+Class QSvgRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSvgRenderer::QPrivateSignal (0x0x7f53bd9bc720) 0 empty
+
+Vtable for QSvgRenderer
+QSvgRenderer::_ZTV12QSvgRenderer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSvgRenderer)
+16 (int (*)(...))QSvgRenderer::metaObject
+24 (int (*)(...))QSvgRenderer::qt_metacast
+32 (int (*)(...))QSvgRenderer::qt_metacall
+40 (int (*)(...))QSvgRenderer::~QSvgRenderer
+48 (int (*)(...))QSvgRenderer::~QSvgRenderer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSvgRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSvgRenderer (0x0x7f53c11453a8) 0
+ vptr=((& QSvgRenderer::_ZTV12QSvgRenderer) + 16)
+QObject (0x0x7f53bd9bc6c0) 0
+ primary-for QSvgRenderer (0x0x7f53c11453a8)
+
diff --git a/tests/auto/bic/data/qt.6.3.0.linux-gcc-amd64.txt b/tests/auto/bic/data/qt.6.3.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..5f9c5f81b5
--- /dev/null
+++ b/tests/auto/bic/data/qt.6.3.0.linux-gcc-amd64.txt
@@ -0,0 +1,26944 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7fae78264ae0) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7fae782dca20) 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 (0x0x7fae782dcc60) 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 (0x0x7fae7830eb40) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7fae75770540) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7fae757c2f00) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7fae757f64e0) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7fae757f6540) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7fae757f65a0) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7fae757f6600) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7fae757f6660) 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 (0x0x7fae757f6720) 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 (0x0x7fae757f67e0) 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 (0x0x7fae757f68a0) 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 (0x0x7fae757f6960) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7fae757f6cc0) 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 (0x0x7fae7583f060) 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 (0x0x7fae7583f0c0) 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 (0x0x7fae7583f360) 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 (0x0x7fae7583f3c0) 0 empty
+
+Class std::__nonesuchbase
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuchbase (0x0x7fae7583fcc0) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch (0x0x7fae758582d8) 0 empty
+std::__nonesuchbase (0x0x7fae7583fd20) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7fae758bd300) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7fae759434e0) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7fae755ba5a0) 0 empty
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7fae75640420) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7fae756405a0) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7fae7566e420) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7fae7566e480) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7fae756efc00) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7fae756efc60) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7fae7570f0d0) 0 empty
+std::input_iterator_tag (0x0x7fae756efcc0) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7fae7570f138) 0 empty
+std::forward_iterator_tag (0x0x7fae7570f1a0) 0 empty
+std::input_iterator_tag (0x0x7fae756efd20) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7fae7570f208) 0 empty
+std::bidirectional_iterator_tag (0x0x7fae7570f270) 0 empty
+std::forward_iterator_tag (0x0x7fae7570f2d8) 0 empty
+std::input_iterator_tag (0x0x7fae756efd80) 0 empty
+
+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 (0x0x7fae75721480) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 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 (0x0x7fae7570f410) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+std::exception (0x0x7fae75721720) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7fae7570f410)
+
+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 (0x0x7fae7570f478) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+std::bad_alloc (0x0x7fae7570f4e0) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7fae7570f478)
+std::exception (0x0x7fae75721960) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7fae7570f4e0)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7fae75721b40) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7fae75759a20) 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 (0x0x7fae75759a80) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7fae7542aa20) 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 (0x0x7fae75414208) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+std::exception (0x0x7fae75462f60) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7fae75414208)
+
+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 (0x0x7fae75414410) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+std::exception (0x0x7fae754d2de0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7fae75414410)
+
+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 (0x0x7fae75500000) 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 (0x0x7fae75414478) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+std::exception (0x0x7fae755003c0) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7fae75414478)
+
+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 (0x0x7fae754144e0) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+std::exception (0x0x7fae755005a0) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7fae754144e0)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7fae75500780) 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 (0x0x7fae75530300) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7fae755309c0) 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 (0x0x7fae75414548) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+std::exception (0x0x7fae75530c00) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7fae75414548)
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7fae752b4840) 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 (0x0x7fae752b4960) 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 (0x0x7fae752b4c60) 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 (0x0x7fae752b4f60) 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 (0x0x7fae752e20c0) 0 empty
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7fae74fffea0) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7fae74ffff00) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7fae750230c0) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7fae75023180) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7fae75414f70) 0
+std::__uses_alloc_base (0x0x7fae75023120) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7fae74db74e0) 0 empty
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7fae74e0d7e0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7fae74e0d840) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7fae74e0dae0) 0
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7fae74e54300) 0 empty
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7fae74e54540) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7fae74e97840) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7fae74f35ea0) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7fae74ed8750) 0
+std::__atomic_flag_base (0x0x7fae74f35f00) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7fae74b003a8) 0
+QAtomicInteger<int> (0x0x7fae74b00410) 0
+QBasicAtomicInteger<int> (0x0x7fae74afb780) 0
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7fae7476bd80) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7fae748b40c0) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7fae748b4120) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7fae748b41e0) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7fae748b4240) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7fae748b42a0) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7fae748b4300) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7fae748b4360) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7fae748b4660) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7fae748b4900) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7fae748b4960) 0
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7fae745ac480) 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 (0x0x7fae742fd618) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+std::exception (0x0x7fae7430a7e0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7fae742fd618)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7fae7430a8a0) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7fae7430a900) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7fae7430aae0) 0
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7fae74030480) 0 empty
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7fae74080f60) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7fae740b3000) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7fae740b34e0) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7fae740d9420) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7fae740d94e0) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7fae740d9540) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7fae740d9900) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7fae740d9ae0) 0
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7fae73968540) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7fae73837b60) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7fae73968cc0) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7fae73837c30) 0
+std::_Bit_iterator_base (0x0x7fae73837c98) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7fae735972a0) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7fae73837dd0) 0
+std::_Bit_iterator_base (0x0x7fae73837e38) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7fae73597ae0) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7fae7337ae40) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7fae733a6000) 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 (0x0x7fae733a6180) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7fae733a6300) 0 empty
+
+Class q20::identity::is_transparent
+ size=1 align=1
+ base size=0 base align=1
+q20::identity::is_transparent (0x0x7fae733a6780) 0 empty
+
+Class q20::identity
+ size=1 align=1
+ base size=0 base align=1
+q20::identity (0x0x7fae733a6720) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7fae73475840) 0
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7fae73475900) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7fae734759c0) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7fae73475a20) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7fae73475a80) 0
+
+Class __jmp_buf_tag
+ size=200 align=8
+ base size=200 base align=8
+__jmp_buf_tag (0x0x7fae73475ae0) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7fae73475b40) 0
+
+Class __cancel_jmp_buf_tag
+ size=72 align=8
+ base size=72 base align=8
+__cancel_jmp_buf_tag (0x0x7fae73475ba0) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7fae73475c60) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7fae73475cc0) 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 (0x0x7fae7319ca20) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7fae73013ba0) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7fae73013c00) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7fae73013c60) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7fae73013cc0) 0
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7fae72bf0660) 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 (0x0x7fae72bf0a20) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7fae72bf0cc0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7fae72bf0ea0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7fae72c4bde0) 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 (0x0x7fae72c007b8) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+std::exception (0x0x7fae72c4bea0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fae72c007b8)
+
+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 (0x0x7fae72c00820) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+std::logic_error (0x0x7fae72c00888) 0
+ primary-for std::domain_error (0x0x7fae72c00820)
+std::exception (0x0x7fae72c4bf00) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fae72c00888)
+
+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 (0x0x7fae72c008f0) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+std::logic_error (0x0x7fae72c00958) 0
+ primary-for std::invalid_argument (0x0x7fae72c008f0)
+std::exception (0x0x7fae72c4bf60) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fae72c00958)
+
+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 (0x0x7fae72c009c0) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+std::logic_error (0x0x7fae72c00a28) 0
+ primary-for std::length_error (0x0x7fae72c009c0)
+std::exception (0x0x7fae72cad000) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fae72c00a28)
+
+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 (0x0x7fae72c00a90) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+std::logic_error (0x0x7fae72c00af8) 0
+ primary-for std::out_of_range (0x0x7fae72c00a90)
+std::exception (0x0x7fae72cad060) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fae72c00af8)
+
+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 (0x0x7fae72c00b60) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+std::exception (0x0x7fae72cad0c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fae72c00b60)
+
+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 (0x0x7fae72c00bc8) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+std::runtime_error (0x0x7fae72c00c30) 0
+ primary-for std::range_error (0x0x7fae72c00bc8)
+std::exception (0x0x7fae72cad120) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fae72c00c30)
+
+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 (0x0x7fae72c00c98) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+std::runtime_error (0x0x7fae72c00d00) 0
+ primary-for std::overflow_error (0x0x7fae72c00c98)
+std::exception (0x0x7fae72cad180) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fae72c00d00)
+
+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 (0x0x7fae72c00d68) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+std::runtime_error (0x0x7fae72c00dd0) 0
+ primary-for std::underflow_error (0x0x7fae72c00d68)
+std::exception (0x0x7fae72cad1e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fae72c00dd0)
+
+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 (0x0x7fae72cad360) 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 (0x0x7fae72cad6c0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7fae72cadea0) 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 (0x0x7fae72d01208) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+std::runtime_error (0x0x7fae72d01270) 0
+ primary-for std::system_error (0x0x7fae72d01208)
+std::exception (0x0x7fae72d0fa80) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fae72d01270)
+
+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 (0x0x7fae72d01548) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+std::system_error (0x0x7fae72d015b0) 0
+ primary-for std::ios_base::failure (0x0x7fae72d01548)
+std::runtime_error (0x0x7fae72d01618) 0
+ primary-for std::system_error (0x0x7fae72d015b0)
+std::exception (0x0x7fae7296c180) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fae72d01618)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7fae7296c1e0) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7fae7296c240) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7fae7296c2a0) 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 (0x0x7fae7296c120) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7fae72426c60) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7fae72426cc0) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7fae72508780) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7fae72508ea0) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7fae72508f00) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7fae7248ca90) 0
+QGenericArgument (0x0x7fae725431e0) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7fae725436c0) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7fae72543720) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7fae72543660) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7fae7218c0c0) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7fae721c0600) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7fae721ea000) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7fae722b0c60) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7fae722f5000) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7fae71f71c00) 0 empty
+
+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 (0x0x7fae71f76c30) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+std::exception (0x0x7fae7204e8a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7fae71f76c30)
+
+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 (0x0x7fae71f76c98) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+std::exception (0x0x7fae7204e9c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7fae71f76c98)
+
+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 (0x0x7fae71f76d00) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+std::exception (0x0x7fae7204eae0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7fae71f76d00)
+
+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 (0x0x7fae71f76dd0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+std::exception (0x0x7fae7204ec00) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7fae71f76dd0)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7fae7207b4e0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7fae7207b840) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7fae7207bb40) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7fae7207bea0) 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 (0x0x7fae71f76ea0) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+std::exception (0x0x7fae720a7180) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7fae71f76ea0)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7fae720e7e40) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7fae721123c0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7fae71e5d240) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7fae71bc57e0) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7fae71ce1de0) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7fae71779a80) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7fae717f2cc0) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7fae7157fa20) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7fae7157fe40) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7fae7157fea0) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7fae71607c00) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7fae7171c180) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7fae7171c120) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7fae7135f060) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7fae714fe0c0) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7fae710f2180) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7fae710cf2d8) 0
+QtPrivate::ArgBase (0x0x7fae710f21e0) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7fae710cf3a8) 0
+QtPrivate::ArgBase (0x0x7fae710f2420) 0
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7fae71123d20) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7fae70d5ee40) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7fae70d5ef00) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7fae70b67ea0) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7fae70c32060) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7fae70c32d80) 0
+
+Class QVLABaseBase
+ size=24 align=8
+ base size=24 base align=8
+QVLABaseBase (0x0x7fae70c61840) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7fae70d2f3c0) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7fae70efae38) 0
+QIODeviceBase (0x0x7fae70d2f420) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7fae70d2f5a0) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fae709fec00) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7fae70a024e0) 0
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fae709fecc0) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7fae70a02548) 0
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7fae709fed80) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7fae70b0d8a0) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7fae70a02680) 0
+QMetaContainer (0x0x7fae70b0da80) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7fae70a026e8) 0
+QMetaContainer (0x0x7fae70b0de40) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7fae70809e40) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7fae70823068) 0
+std::__detail::_List_node_base (0x0x7fae70809ea0) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7fae708fef60) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7fae70921300) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7fae703981e0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7fae703983c0) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7fae704554e0) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7fae6ff75060) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7fae6febe300) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7fae6febe360) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7fae6fba3360) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7fae6fc1d960) 0 empty
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7fae6fcf5540) 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 (0x0x7fae6fcf59c0) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7fae6f93f240) 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 (0x0x7fae6f93f1e0) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7fae6fa07180) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7fae6fa07a20) 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 (0x0x7fae6f937680) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+QObject (0x0x7fae6fa079c0) 0
+ primary-for QAbstractAnimation (0x0x7fae6f937680)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7fae6fa07d80) 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 (0x0x7fae6f9376e8) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+QObject (0x0x7fae6fa07d20) 0
+ primary-for QAnimationDriver (0x0x7fae6f9376e8)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7fae6fa07f60) 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 (0x0x7fae6f937750) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+QObject (0x0x7fae6fa07f00) 0
+ primary-for QEventLoop (0x0x7fae6f937750)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7fae6fa5a660) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7fae6fa5a720) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7fae6fa5a780) 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 (0x0x7fae6f937888) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+QObject (0x0x7fae6fa5a6c0) 0
+ primary-for QAbstractEventDispatcher (0x0x7fae6f937888)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7fae6fae6180) 0 empty
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7fae6f8c7420) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7fae6f8c7780) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7fae6f681ba0) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7fae6f681b40) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7fae6f6b78a0) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7fae6f6eb000) 0
+QStringConverterBase (0x0x7fae6f6b7840) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7fae6f6eb068) 0
+QStringConverter (0x0x7fae6f6eb0d0) 0
+QStringConverterBase (0x0x7fae6f7042a0) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7fae6f6eb138) 0
+QStringConverter (0x0x7fae6f6eb1a0) 0
+QStringConverterBase (0x0x7fae6f7262a0) 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 (0x0x7fae6f6eb208) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+QIODeviceBase (0x0x7fae6f726f60) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7fae6f3747e0) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7fae6f4389c0) 0
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7fae6f4a3060) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7fae6f4a31e0) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7fae6f12c1e0) 0 empty
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7fae6f154120) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7fae6f6eb680) 0
+QIODeviceBase (0x0x7fae6f1540c0) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7fae6f260de0) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7fae6f260ea0) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7fae6f050240) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7fae6f0502a0) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7fae6f0501e0) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7fae6ee21c00) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7fae6ee21e40) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7fae6ee4b060) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7fae6ee84480) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7fae6eed4540) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7fae6eb2a8a0) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7fae6ebadb40) 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 (0x0x7fae6ebc33a8) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+QObject (0x0x7fae6ebadae0) 0
+ primary-for QAbstractItemModel (0x0x7fae6ebc33a8)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7fae6eceea20) 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 (0x0x7fae6ebc39c0) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+QAbstractItemModel (0x0x7fae6ebc3a28) 0
+ primary-for QAbstractTableModel (0x0x7fae6ebc39c0)
+QObject (0x0x7fae6ecee9c0) 0
+ primary-for QAbstractItemModel (0x0x7fae6ebc3a28)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7fae6eceeb40) 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 (0x0x7fae6ebc3a90) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+QAbstractItemModel (0x0x7fae6ebc3af8) 0
+ primary-for QAbstractListModel (0x0x7fae6ebc3a90)
+QObject (0x0x7fae6eceeae0) 0
+ primary-for QAbstractItemModel (0x0x7fae6ebc3af8)
+
+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 (0x0x7fae6e97b3c0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7fae6e97b480) 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 (0x0x7fae6e95de38) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+QAbstractItemModel (0x0x7fae6e95dea0) 0
+ primary-for QAbstractProxyModel (0x0x7fae6e95de38)
+QObject (0x0x7fae6e97b420) 0
+ primary-for QAbstractItemModel (0x0x7fae6e95dea0)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7fae6e97b660) 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 (0x0x7fae6e95df08) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+QAbstractAnimation (0x0x7fae6e95df70) 0
+ primary-for QAnimationGroup (0x0x7fae6e95df08)
+QObject (0x0x7fae6e97b600) 0
+ primary-for QAbstractAnimation (0x0x7fae6e95df70)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7fae6e97b8a0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7fae6ea13000) 0
+QBasicMutex (0x0x7fae6ea0a600) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7fae6ea0aa20) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7fae6ea790c0) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7fae6ea79120) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7fae6ea79180) 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 (0x0x7fae6ea79060) 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 (0x0x7fae6ea130d0) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+QEvent (0x0x7fae6ea79ae0) 0
+ primary-for QTimerEvent (0x0x7fae6ea130d0)
+
+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 (0x0x7fae6ea13138) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+QEvent (0x0x7fae6eabd000) 0
+ primary-for QChildEvent (0x0x7fae6ea13138)
+
+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 (0x0x7fae6ea131a0) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+QEvent (0x0x7fae6eabd420) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7fae6ea131a0)
+
+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 (0x0x7fae6ea13208) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+QEvent (0x0x7fae6eabd6c0) 0
+ primary-for QDeferredDeleteEvent (0x0x7fae6ea13208)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7fae6eabdd20) 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 (0x0x7fae6ea133a8) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+QObject (0x0x7fae6eabdcc0) 0
+ primary-for QCoreApplication (0x0x7fae6ea133a8)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7fae6ea13820) 0
+QIterator<QMetaAssociation> (0x0x7fae6ea13888) 0
+QBaseIterator<QMetaAssociation> (0x0x7fae6eb0f900) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7fae6ea139c0) 0
+QConstIterator<QMetaAssociation> (0x0x7fae6ea13a28) 0
+QBaseIterator<QMetaAssociation> (0x0x7fae6eb0fea0) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7fae6ea13af8) 0
+QIterable<QMetaAssociation> (0x0x7fae6e7643c0) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7fae6e871480) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7fae6e8e2300) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7fae6e91a240) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7fae6e5680c0) 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 (0x0x7fae6e55f230) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+QObject (0x0x7fae6e568000) 0
+ primary-for QIODevice (0x0x7fae6e55f230)
+QIODeviceBase (0x0x7fae6e568060) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7fae6e568600) 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 (0x0x7fae6e564270) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+QIODevice (0x0x7fae6e55f700) 0
+ primary-for QBuffer (0x0x7fae6e564270)
+QObject (0x0x7fae6e568540) 0
+ primary-for QIODevice (0x0x7fae6e55f700)
+QIODeviceBase (0x0x7fae6e5685a0) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7fae6e568840) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7fae6e5687e0) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7fae6e568ba0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7fae6e568b40) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7fae6e61f2a0) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7fae6e342a20) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7fae6e342a80) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7fae6e3429c0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7fae6e3bf4e0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7fae6e41aba0) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7fae6e46ef60) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7fae6e48c000) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7fae6e46ef00) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7fae6e5251e0) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7fae6e1597e0) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7fae6e217d80) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7fae6e2c37e0) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7fae6e2c38a0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7fae6e2c3a20) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7fae6df60de0) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7fae6e043de0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7fae6e10b2a0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7fae6e10b360) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7fae6de41cc0) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7fae6dea1240) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7fae6dea12a0) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7fae6dea11e0) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7fae6db769c0) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7fae6db76a20) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7fae6db76960) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7fae6d9c8060) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7fae6d9c8000) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7fae6dad2540) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7fae6db199c0) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7fae6d7542a0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7fae6d754480) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7fae6d7fa1e0) 0
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7fae6d897000) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7fae6d897120) 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 (0x0x7fae6d85d0d0) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+QAbstractItemModel (0x0x7fae6d85d138) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7fae6d85d0d0)
+QObject (0x0x7fae6d8970c0) 0
+ primary-for QAbstractItemModel (0x0x7fae6d85d138)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7fae6d8972a0) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7fae6d8973c0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7fae6d8976c0) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7fae6d627360) 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 (0x0x7fae6d628750) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+QIODevice (0x0x7fae6d560380) 0
+ primary-for QFileDevice (0x0x7fae6d628750)
+QObject (0x0x7fae6d6272a0) 0
+ primary-for QIODevice (0x0x7fae6d560380)
+QIODeviceBase (0x0x7fae6d627300) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7fae6d6e62a0) 0
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7fae6d723840) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7fae6d36cc60) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7fae6d4c6960) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7fae6d166c60) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7fae6d166c00) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7fae6d1f9240) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7fae6d1f9d80) 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> (0x0x7fae6cd869c0 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> (0x0x7fae6ce62000 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> (0x0x7fae6ce62478 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> (0x0x7fae6ce62548 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)
+
+Construction vtable for std::basic_istream<char> (0x0x7fae6cec66e8 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> (0x0x7fae6cec68f0 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> (0x0x7fae6cf01690 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> (0x0x7fae6cec6af8 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> (0x0x7fae6cec6bc8 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> (0x0x7fae6cec67b8 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> (0x0x7fae6cec6a28 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> (0x0x7fae6cf01a80 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> (0x0x7fae6cec6d00 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> (0x0x7fae6cb54000 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 (0x0x7fae6cf1aae0) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7fae6cf1ac60) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7fae6cf1ade0) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7fae6cb7e120) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7fae6cb7e2a0) 0
+
+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 (0x0x7fae6cc56900) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7fae6cc568a0) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7fae6cc56840) 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 (0x0x7fae6caba3a8) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+std::system_error (0x0x7fae6caba410) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7fae6caba3a8)
+std::runtime_error (0x0x7fae6caba478) 0
+ primary-for std::system_error (0x0x7fae6caba410)
+std::exception (0x0x7fae6cac9480) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7fae6caba478)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7fae6caba750) 0
+std::filesystem::__cxx11::path (0x0x7fae6cac99c0) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7fae6cac97e0) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7fae6c7d6a80) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7fae6c7d6f60) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7fae6c86c660) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7fae6c86cde0) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7fae6c8e17e0) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7fae6c58c420) 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 (0x0x7fae6c53c548) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+QFileDevice (0x0x7fae6c53c5b0) 0
+ primary-for QFile (0x0x7fae6c53c548)
+QIODevice (0x0x7fae6c571700) 0
+ primary-for QFileDevice (0x0x7fae6c53c5b0)
+QObject (0x0x7fae6c58c360) 0
+ primary-for QIODevice (0x0x7fae6c571700)
+QIODeviceBase (0x0x7fae6c58c3c0) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7fae6c58cd20) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7fae6c641c00) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7fae6c3138a0) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7fae6c313de0) 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 (0x0x7fae6c3f9f08) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+std::exception (0x0x7fae6c446360) 0 nearly-empty
+ primary-for QException (0x0x7fae6c3f9f08)
+
+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 (0x0x7fae6c3f9f70) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+QException (0x0x7fae6c45a000) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7fae6c3f9f70)
+std::exception (0x0x7fae6c4463c0) 0 nearly-empty
+ primary-for QException (0x0x7fae6c45a000)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7fae6c446540) 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 (0x0x7fae6c4465a0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7fae6c4469c0) 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 (0x0x7fae6c45a138) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+QObject (0x0x7fae6c446960) 0
+ primary-for QFileSelector (0x0x7fae6c45a138)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7fae6c446ba0) 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 (0x0x7fae6c45a1a0) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+QObject (0x0x7fae6c446b40) 0
+ primary-for QFileSystemWatcher (0x0x7fae6c45a1a0)
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7fae6c446d20) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7fae6c4a3360) 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 (0x0x7fae6c4a3f60) 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 (0x0x7fae6c216ae0) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7fae6c260de0) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7fae6c223b60) 0
+std::__mutex_base (0x0x7fae6c260e40) 0
+
+Class std::__condvar
+ size=48 align=8
+ base size=48 base align=8
+std::__condvar (0x0x7fae6c2a5060) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7fae6c2a56c0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7fae6c2a5720) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7fae6c2a5780) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7fae6c2dc1e0) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7fae6c223bc8) 0
+std::__recursive_mutex_base (0x0x7fae6c2dc240) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7fae6c2e9230) 0
+std::__mutex_base (0x0x7fae6c2dc6c0) 0
+std::__timed_mutex_impl<std::timed_mutex> (0x0x7fae6c2dc720) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7fae6c2e9620) 0
+std::__recursive_mutex_base (0x0x7fae6c2dcae0) 0
+std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7fae6c2dcb40) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7fae6bf1f900) 0
+
+Class std::once_flag::_Prepare_execution
+ size=1 align=1
+ base size=0 base align=1
+std::once_flag::_Prepare_execution (0x0x7fae6bf1f960) 0 empty
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7fae6bf1fe40) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7fae6bf5a300) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7fae6bf5a360) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7fae6bfef1e0) 0 empty
+
+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 (0x0x7fae6bfefae0) 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 (0x0x7fae6bfefb40) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7fae6bfefa80) 0
+
+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 (0x0x7fae6c054d00) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+std::logic_error (0x0x7fae6c054d68) 0
+ primary-for std::future_error (0x0x7fae6c054d00)
+std::exception (0x0x7fae6c073000) 0 nearly-empty
+ primary-for std::logic_error (0x0x7fae6c054d68)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7fae6c073720) 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 (0x0x7fae6c0736c0) 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 (0x0x7fae6be25060) 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 (0x0x7fae6bde29c0) 0
+std::__at_thread_exit_elt (0x0x7fae6be25120) 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 (0x0x7fae6c0738a0) 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 (0x0x7fae6c073660) 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 (0x0x7fae6b727d68) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+std::__future_base::_State_baseV2 (0x0x7fae6b74cb40) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7fae6b727d68)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7fae6b790240) 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 (0x0x7fae6b78c068) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+QObject (0x0x7fae6b7901e0) 0
+ primary-for QThread (0x0x7fae6b78c068)
+
+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 (0x0x7fae6b7905a0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7fae6b790720) 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 (0x0x7fae6b78c0d0) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+QObject (0x0x7fae6b7906c0) 0
+ primary-for QThreadPool (0x0x7fae6b78c0d0)
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7fae6b67e180) 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 (0x0x7fae6b580d00) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+QObject (0x0x7fae6b67e120) 0
+ primary-for QFutureWatcherBase (0x0x7fae6b580d00)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7fae6b67e6c0) 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 (0x0x7fae6b580e38) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+QAbstractProxyModel (0x0x7fae6b580ea0) 0
+ primary-for QIdentityProxyModel (0x0x7fae6b580e38)
+QAbstractItemModel (0x0x7fae6b580f08) 0
+ primary-for QAbstractProxyModel (0x0x7fae6b580ea0)
+QObject (0x0x7fae6b67e660) 0
+ primary-for QAbstractItemModel (0x0x7fae6b580f08)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7fae6b67e840) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7fae6b2f7a80) 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 (0x0x7fae6b3035b0) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+QObject (0x0x7fae6b2f7a20) 0
+ primary-for QItemSelectionModel (0x0x7fae6b3035b0)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7fae6b3038f0) 0
+QList<QItemSelectionRange> (0x0x7fae6b303958) 0
+QListSpecialMethods<QItemSelectionRange> (0x0x7fae6b3039c0) 0 empty
+QListSpecialMethodsBase<QItemSelectionRange> (0x0x7fae6b3555a0) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7fae74e97420) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7fae74eb9ae0) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7fae73e20ea0) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7fae73e20f60) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7fae73e20e40) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7fae71cc1de0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7fae71cc1ea0) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7fae6e8bc780) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7fae6e8bc7e0) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7fae6e8bc180) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7fae6d5b7de0) 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 (0x0x7fae73c2a3a8) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+QObject (0x0x7fae6d5b7d80) 0
+ primary-for QLibrary (0x0x7fae73c2a3a8)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7fae6d240ea0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7fae6d1b09c0) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7fae6b3dff00) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7fae6cbf8e40) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7fae6cbf8f00) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7fae6eaea780) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7fae731a2360) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7fae749b2ae0) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7fae7357e480) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7fae7357ec60) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7fae7357ec00) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7fae731a7c00) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7fae72205780) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7fae71d5c720) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7fae71d5c7e0) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7fae71d5c780) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7fae71892ba0) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7fae71892b40) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7fae71513b40) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7fae71513ae0) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7fae715491e0) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7fae71549180) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7fae71176540) 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 (0x0x7fae73aab0d0) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+QObject (0x0x7fae711764e0) 0
+ primary-for QMimeData (0x0x7fae73aab0d0)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7fae711766c0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7fae711b62a0) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7fae711b6360) 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 (0x0x7fae73ab1548) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+QObject (0x0x7fae711b6300) 0
+ primary-for QObjectCleanupHandler (0x0x7fae73ab1548)
+
+Class QOperatingSystemVersionBase
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersionBase (0x0x7fae711b6420) 0
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7fae73ab15b0) 0
+QOperatingSystemVersionBase (0x0x7fae711b6d20) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7fae70a75b40) 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 (0x0x7fae73abc8f0) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+QAnimationGroup (0x0x7fae73abc958) 0
+ primary-for QParallelAnimationGroup (0x0x7fae73abc8f0)
+QAbstractAnimation (0x0x7fae73abc9c0) 0
+ primary-for QAnimationGroup (0x0x7fae73abc958)
+QObject (0x0x7fae70a75ae0) 0
+ primary-for QAbstractAnimation (0x0x7fae73abc9c0)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7fae70a75d20) 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 (0x0x7fae73abca28) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+QAbstractAnimation (0x0x7fae73abca90) 0
+ primary-for QPauseAnimation (0x0x7fae73abca28)
+QObject (0x0x7fae70a75cc0) 0
+ primary-for QAbstractAnimation (0x0x7fae73abca90)
+
+Class QPluginMetaData::Header
+ size=4 align=1
+ base size=4 base align=1
+QPluginMetaData::Header (0x0x7fae70a75f60) 0
+
+Class QPluginMetaData::MagicHeader
+ size=16 align=1
+ base size=16 base align=1
+QPluginMetaData::MagicHeader (0x0x7fae70920000) 0
+
+Class QPluginMetaData::ElfNoteHeader
+ size=32 align=8
+ base size=28 base align=8
+QPluginMetaData::ElfNoteHeader (0x0x7fae70920060) 0
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7fae70a75f00) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7fae709206c0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7fae703cc660) 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 (0x0x7fae73ac2138) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+QObject (0x0x7fae703cc600) 0
+ primary-for QPluginLoader (0x0x7fae73ac2138)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7fae703cc720) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7fae6f3832a0) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7fae6f383300) 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 (0x0x7fae73b0ec98) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+QIODevice (0x0x7fae6f363380) 0
+ primary-for QProcess (0x0x7fae73b0ec98)
+QObject (0x0x7fae6f3831e0) 0
+ primary-for QIODevice (0x0x7fae6f363380)
+QIODeviceBase (0x0x7fae6f383240) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7fae6f383900) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7fae6f383a20) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7fae6eeeaa80) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7fae6eeeaa20) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7fae6eeeaae0) 0
+
+Class QtPrivate::MSVCWorkAround
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::MSVCWorkAround (0x0x7fae6eeeab40) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7fae6eeeaba0) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7fae6ea88120) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7fae6ea88180) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7fae6ea888a0) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7fae6e638000) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7fae6e638360) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7fae6e638480) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7fae6e6386c0) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7fae737996e8) 0
+QPropertyObserverBase (0x0x7fae6e638840) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7fae73799888) 0
+QPropertyObserver (0x0x7fae73799750) 0
+QPropertyObserverBase (0x0x7fae6e638d20) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7fae6e4a4c00) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7fae6df74d80) 0
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7fae6db9a540) 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 (0x0x7fae737b5340) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+QAbstractAnimation (0x0x7fae737b53a8) 0
+ primary-for QVariantAnimation (0x0x7fae737b5340)
+QObject (0x0x7fae6db9a4e0) 0
+ primary-for QAbstractAnimation (0x0x7fae737b53a8)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7fae6db9a780) 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 (0x0x7fae737b5410) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+QVariantAnimation (0x0x7fae737b54e0) 0
+ primary-for QPropertyAnimation (0x0x7fae737b5410)
+QAbstractAnimation (0x0x7fae737b5548) 0
+ primary-for QVariantAnimation (0x0x7fae737b54e0)
+QObject (0x0x7fae6db9a720) 0
+ primary-for QAbstractAnimation (0x0x7fae737b5548)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7fae6db0bf60) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7fae6c5a0300) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7fae6c5a02a0) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7fae6c3a0a20) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7fae6f2eb120) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7fae6f2eb180) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7fae6f2eb0c0) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7fae737c16e8) 0
+QRandomGenerator (0x0x7fae6baa9660) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7fae6f2ee2a0) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7fae6f2ee4e0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7fae6f2ee960) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7fae6f2eede0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7fae6b410a20) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7fae6b426660) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7fae6b44b600) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7fae6b471300) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7fae6b471600) 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 (0x0x7fae737e0a90) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+QFileDevice (0x0x7fae737e0af8) 0
+ primary-for QSaveFile (0x0x7fae737e0a90)
+QIODevice (0x0x7fae6b470620) 0
+ primary-for QFileDevice (0x0x7fae737e0af8)
+QObject (0x0x7fae6b471540) 0
+ primary-for QIODevice (0x0x7fae6b470620)
+QIODeviceBase (0x0x7fae6b4715a0) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7fae6b471960) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7fae6b483c00) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7fae6b49e540) 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 (0x0x7fae737e53a8) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+QAnimationGroup (0x0x7fae737e5410) 0
+ primary-for QSequentialAnimationGroup (0x0x7fae737e53a8)
+QAbstractAnimation (0x0x7fae737e5478) 0
+ primary-for QAnimationGroup (0x0x7fae737e5410)
+QObject (0x0x7fae6b49e4e0) 0
+ primary-for QAbstractAnimation (0x0x7fae737e5478)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7fae737e54e0) 0
+QIterator<QMetaSequence> (0x0x7fae737e5618) 0
+QBaseIterator<QMetaSequence> (0x0x7fae6b49e8a0) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7fae737e56e8) 0
+QConstIterator<QMetaSequence> (0x0x7fae737e5750) 0
+QBaseIterator<QMetaSequence> (0x0x7fae6b49ee40) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7fae737e57b8) 0
+QIterable<QMetaSequence> (0x0x7fae6b4b2360) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7fae6b4e4f00) 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 (0x0x7fae737fa7b8) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+QObject (0x0x7fae6b4e4ea0) 0
+ primary-for QSettings (0x0x7fae737fa7b8)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7fae6b0b7360) 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 (0x0x7fae737fa820) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+QObject (0x0x7fae6b0b7300) 0
+ primary-for QSharedMemory (0x0x7fae737fa820)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7fae6b0b7540) 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 (0x0x7fae737fa8f0) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+QObject (0x0x7fae6b0b74e0) 0
+ primary-for QSignalMapper (0x0x7fae737fa8f0)
+
+Class __uintr_frame
+ size=24 align=8
+ base size=24 base align=8
+__uintr_frame (0x0x7fae6b10f840) 0
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7fae77e08f60) 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 (0x0x7fae73802478) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+QObject (0x0x7fae77e08f00) 0
+ primary-for QSocketNotifier (0x0x7fae73802478)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7fae77e2b120) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7fae77e3aa80) 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 (0x0x7fae73805dd0) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+QAbstractProxyModel (0x0x7fae73805e38) 0
+ primary-for QSortFilterProxyModel (0x0x7fae73805dd0)
+QAbstractItemModel (0x0x7fae73805f08) 0
+ primary-for QAbstractProxyModel (0x0x7fae73805e38)
+QObject (0x0x7fae77e3aa20) 0
+ primary-for QAbstractItemModel (0x0x7fae73805f08)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7fae77e3ae40) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7fae77e5b900) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7fae77e8d4e0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7fae77eb2ea0) 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 (0x0x7fae714a8000) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+QAbstractListModel (0x0x7fae714a8068) 0
+ primary-for QStringListModel (0x0x7fae714a8000)
+QAbstractItemModel (0x0x7fae714a8c30) 0
+ primary-for QAbstractListModel (0x0x7fae714a8068)
+QObject (0x0x7fae77eb2e40) 0
+ primary-for QAbstractItemModel (0x0x7fae714a8c30)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7fae77eb2f60) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7fae77ed10c0) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7fae77ed1240) 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 (0x0x7fae714a8c98) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+QFile (0x0x7fae714c1138) 0
+ primary-for QTemporaryFile (0x0x7fae714a8c98)
+QFileDevice (0x0x7fae714c11a0) 0
+ primary-for QFile (0x0x7fae714c1138)
+QIODevice (0x0x7fae77ecd4d0) 0
+ primary-for QFileDevice (0x0x7fae714c11a0)
+QObject (0x0x7fae77ed1180) 0
+ primary-for QIODevice (0x0x7fae77ecd4d0)
+QIODeviceBase (0x0x7fae77ed11e0) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7fae77ed1480) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7fae77ed1ba0) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7fae77f072a0) 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 (0x0x7fae71304410) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+QObject (0x0x7fae77f07240) 0
+ primary-for QTimeLine (0x0x7fae71304410)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7fae77f07480) 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 (0x0x7fae70f55750) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+QObject (0x0x7fae77f07420) 0
+ primary-for QTimer (0x0x7fae70f55750)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7fae77f07d80) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7fae77f07d20) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7fae77f61180) 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 (0x0x7fae6e403750) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+QObject (0x0x7fae77f61120) 0
+ primary-for QTranslator (0x0x7fae6e403750)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7fae77f61360) 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 (0x0x7fae6e4037b8) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+QAbstractProxyModel (0x0x7fae6e403a90) 0
+ primary-for QTransposeProxyModel (0x0x7fae6e4037b8)
+QAbstractItemModel (0x0x7fae6e403d68) 0
+ primary-for QAbstractProxyModel (0x0x7fae6e403a90)
+QObject (0x0x7fae77f61300) 0
+ primary-for QAbstractItemModel (0x0x7fae6e403d68)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7fae77f614e0) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7fae77badcc0) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7fae77badde0) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7fae77bc9d80) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7fae6c0547b8) 0
+QList<QXmlStreamAttribute> (0x0x7fae6c0c04e0) 0
+QListSpecialMethods<QXmlStreamAttribute> (0x0x7fae6c0c0548) 0 empty
+QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7fae77be7f00) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7fae77c1e780) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7fae77c39060) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7fae77c48960) 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 (0x0x7fae77c68360) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7fae77c683c0) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7fae77c68960) 0
+
+Class QtConcurrent::TaskStartParameters
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::TaskStartParameters (0x0x7fae77c68cc0) 0
+
+Class QtConcurrent::Median
+ size=72 align=8
+ base size=70 base align=8
+QtConcurrent::Median (0x0x7fae77c9bf60) 0
+
+Class QtConcurrent::ThreadEngineBarrier
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::ThreadEngineBarrier (0x0x7fae77caf3c0) 0
+
+Vtable for QtConcurrent::ThreadEngineBase
+QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN12QtConcurrent16ThreadEngineBaseE)
+16 (int (*)(...))QtConcurrent::ThreadEngineBase::run
+24 0
+32 0
+40 (int (*)(...))QtConcurrent::ThreadEngineBase::start
+48 (int (*)(...))QtConcurrent::ThreadEngineBase::finish
+56 (int (*)(...))QtConcurrent::ThreadEngineBase::threadFunction
+64 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldStartThread
+72 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldThrottleThread
+80 (int (*)(...))__cxa_pure_virtual
+
+Class QtConcurrent::ThreadEngineBase
+ size=64 align=8
+ base size=64 base align=8
+QtConcurrent::ThreadEngineBase (0x0x7fae77c67a28) 0
+ vptr=((& QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE) + 16)
+QRunnable (0x0x7fae77caf480) 0
+ primary-for QtConcurrent::ThreadEngineBase (0x0x7fae77c67a28)
+
+Class QtConcurrent::BlockSizeManager
+ size=176 align=8
+ base size=172 base align=8
+QtConcurrent::BlockSizeManager (0x0x7fae77caf420) 0
+
+Class QtPrivate::PushBackWrapper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::PushBackWrapper (0x0x7fae77ccaf60) 0 empty
+
+Class QDBusAbstractAdaptor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractAdaptor::QPrivateSignal (0x0x7fae779771e0) 0 empty
+
+Vtable for QDBusAbstractAdaptor
+QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDBusAbstractAdaptor)
+16 (int (*)(...))QDBusAbstractAdaptor::metaObject
+24 (int (*)(...))QDBusAbstractAdaptor::qt_metacast
+32 (int (*)(...))QDBusAbstractAdaptor::qt_metacall
+40 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+48 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractAdaptor
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractAdaptor (0x0x7fae77d384e0) 0
+ vptr=((& QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor) + 16)
+QObject (0x0x7fae77977180) 0
+ primary-for QDBusAbstractAdaptor (0x0x7fae77d384e0)
+
+Class QDBusError
+ size=64 align=8
+ base size=64 base align=8
+QDBusError (0x0x7fae77977360) 0
+
+Class QDBusMessage
+ size=8 align=8
+ base size=8 base align=8
+QDBusMessage (0x0x7fae779ad660) 0
+
+Class QDBusObjectPath
+ size=24 align=8
+ base size=24 base align=8
+QDBusObjectPath (0x0x7fae779d1d20) 0
+
+Class QDBusSignature
+ size=24 align=8
+ base size=24 base align=8
+QDBusSignature (0x0x7fae779fa6c0) 0
+
+Class QDBusVariant
+ size=32 align=8
+ base size=32 base align=8
+QDBusVariant (0x0x7fae77a34120) 0
+
+Class QDBusConnection
+ size=8 align=8
+ base size=8 base align=8
+QDBusConnection (0x0x7fae77a721e0) 0
+
+Class QDBusPendingCall
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingCall (0x0x7fae77ae9360) 0
+
+Class QDBusPendingCallWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusPendingCallWatcher::QPrivateSignal (0x0x7fae77b33420) 0 empty
+
+Vtable for QDBusPendingCallWatcher
+QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QDBusPendingCallWatcher)
+16 (int (*)(...))QDBusPendingCallWatcher::metaObject
+24 (int (*)(...))QDBusPendingCallWatcher::qt_metacast
+32 (int (*)(...))QDBusPendingCallWatcher::qt_metacall
+40 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+48 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusPendingCallWatcher
+ size=24 align=8
+ base size=24 base align=8
+QDBusPendingCallWatcher (0x0x7fae77acdee0) 0
+ vptr=((& QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher) + 16)
+QObject (0x0x7fae77b33360) 0
+ primary-for QDBusPendingCallWatcher (0x0x7fae77acdee0)
+QDBusPendingCall (0x0x7fae77b333c0) 16
+
+Vtable for QDBusAbstractInterfaceBase
+QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDBusAbstractInterfaceBase)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QDBusAbstractInterfaceBase::qt_metacall
+40 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+48 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterfaceBase (0x0x7fae77b2e9c0) 0
+ vptr=((& QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase) + 16)
+QObject (0x0x7fae77b335a0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7fae77b2e9c0)
+
+Class QDBusAbstractInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractInterface::QPrivateSignal (0x0x7fae77b33720) 0 empty
+
+Vtable for QDBusAbstractInterface
+QDBusAbstractInterface::_ZTV22QDBusAbstractInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QDBusAbstractInterface)
+16 (int (*)(...))QDBusAbstractInterface::metaObject
+24 (int (*)(...))QDBusAbstractInterface::qt_metacast
+32 (int (*)(...))QDBusAbstractInterface::qt_metacall
+40 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+48 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusAbstractInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterface (0x0x7fae77b2ea28) 0
+ vptr=((& QDBusAbstractInterface::_ZTV22QDBusAbstractInterface) + 16)
+QDBusAbstractInterfaceBase (0x0x7fae77b2ea90) 0
+ primary-for QDBusAbstractInterface (0x0x7fae77b2ea28)
+QObject (0x0x7fae77b336c0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7fae77b2ea90)
+
+Class QDBusArgument
+ size=8 align=8
+ base size=8 base align=8
+QDBusArgument (0x0x7fae77b33ae0) 0
+
+Class QDBusPendingReplyBase
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingReplyBase (0x0x7fae69ae6068) 0
+QDBusPendingCall (0x0x7fae69a1ade0) 0
+
+Class QDBusConnectionInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusConnectionInterface::QPrivateSignal (0x0x7fae69b14ea0) 0 empty
+
+Vtable for QDBusConnectionInterface
+QDBusConnectionInterface::_ZTV24QDBusConnectionInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QDBusConnectionInterface)
+16 (int (*)(...))QDBusConnectionInterface::metaObject
+24 (int (*)(...))QDBusConnectionInterface::qt_metacast
+32 (int (*)(...))QDBusConnectionInterface::qt_metacall
+40 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+48 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusConnectionInterface::connectNotify
+104 (int (*)(...))QDBusConnectionInterface::disconnectNotify
+
+Class QDBusConnectionInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusConnectionInterface (0x0x7fae69ae62d8) 0
+ vptr=((& QDBusConnectionInterface::_ZTV24QDBusConnectionInterface) + 16)
+QDBusAbstractInterface (0x0x7fae69ae6340) 0
+ primary-for QDBusConnectionInterface (0x0x7fae69ae62d8)
+QDBusAbstractInterfaceBase (0x0x7fae69ae63a8) 0
+ primary-for QDBusAbstractInterface (0x0x7fae69ae6340)
+QObject (0x0x7fae69b14e40) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7fae69ae63a8)
+
+Class QDBusContext
+ size=8 align=8
+ base size=8 base align=8
+QDBusContext (0x0x7fae69b34360) 0
+
+Vtable for QDBusInterface
+QDBusInterface::_ZTV14QDBusInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDBusInterface)
+16 (int (*)(...))QDBusInterface::metaObject
+24 (int (*)(...))QDBusInterface::qt_metacast
+32 (int (*)(...))QDBusInterface::qt_metacall
+40 (int (*)(...))QDBusInterface::~QDBusInterface
+48 (int (*)(...))QDBusInterface::~QDBusInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusInterface (0x0x7fae69ae6410) 0
+ vptr=((& QDBusInterface::_ZTV14QDBusInterface) + 16)
+QDBusAbstractInterface (0x0x7fae69ae6478) 0
+ primary-for QDBusInterface (0x0x7fae69ae6410)
+QDBusAbstractInterfaceBase (0x0x7fae69ae64e0) 0
+ primary-for QDBusAbstractInterface (0x0x7fae69ae6478)
+QObject (0x0x7fae69b343c0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7fae69ae64e0)
+
+Class QDBusMetaType
+ size=1 align=1
+ base size=0 base align=1
+QDBusMetaType (0x0x7fae69b344e0) 0 empty
+
+Class QDBusServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServer::QPrivateSignal (0x0x7fae69b34780) 0 empty
+
+Vtable for QDBusServer
+QDBusServer::_ZTV11QDBusServer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDBusServer)
+16 (int (*)(...))QDBusServer::metaObject
+24 (int (*)(...))QDBusServer::qt_metacast
+32 (int (*)(...))QDBusServer::qt_metacall
+40 (int (*)(...))QDBusServer::~QDBusServer
+48 (int (*)(...))QDBusServer::~QDBusServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServer
+ size=24 align=8
+ base size=24 base align=8
+QDBusServer (0x0x7fae69ae6548) 0
+ vptr=((& QDBusServer::_ZTV11QDBusServer) + 16)
+QObject (0x0x7fae69b34720) 0
+ primary-for QDBusServer (0x0x7fae69ae6548)
+
+Class QDBusServiceWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServiceWatcher::QPrivateSignal (0x0x7fae69b348a0) 0 empty
+
+Vtable for QDBusServiceWatcher
+QDBusServiceWatcher::_ZTV19QDBusServiceWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDBusServiceWatcher)
+16 (int (*)(...))QDBusServiceWatcher::metaObject
+24 (int (*)(...))QDBusServiceWatcher::qt_metacast
+32 (int (*)(...))QDBusServiceWatcher::qt_metacall
+40 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+48 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServiceWatcher
+ size=16 align=8
+ base size=16 base align=8
+QDBusServiceWatcher (0x0x7fae69ae65b0) 0
+ vptr=((& QDBusServiceWatcher::_ZTV19QDBusServiceWatcher) + 16)
+QObject (0x0x7fae69b34840) 0
+ primary-for QDBusServiceWatcher (0x0x7fae69ae65b0)
+
+Class QDBusUnixFileDescriptor
+ size=8 align=8
+ base size=8 base align=8
+QDBusUnixFileDescriptor (0x0x7fae69b34f60) 0
+
+Class QDBusVirtualObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusVirtualObject::QPrivateSignal (0x0x7fae69bc67e0) 0 empty
+
+Vtable for QDBusVirtualObject
+QDBusVirtualObject::_ZTV18QDBusVirtualObject: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QDBusVirtualObject)
+16 (int (*)(...))QDBusVirtualObject::metaObject
+24 (int (*)(...))QDBusVirtualObject::qt_metacast
+32 (int (*)(...))QDBusVirtualObject::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 QDBusVirtualObject
+ size=16 align=8
+ base size=16 base align=8
+QDBusVirtualObject (0x0x7fae69bd0c30) 0
+ vptr=((& QDBusVirtualObject::_ZTV18QDBusVirtualObject) + 16)
+QObject (0x0x7fae69bc6780) 0
+ primary-for QDBusVirtualObject (0x0x7fae69bd0c30)
+
+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 (0x0x7fae69bc68a0) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7fae697ef360) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7fae698442a0) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7fae69844240) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7fae698ab360) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7fae6991fdd0) 0
+QList<QPoint> (0x0x7fae6991fe38) 0
+QListSpecialMethods<QPoint> (0x0x7fae6991fea0) 0 empty
+QListSpecialMethodsBase<QPoint> (0x0x7fae6994c180) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7fae699cb0d0) 0
+QList<QPointF> (0x0x7fae699cb138) 0
+QListSpecialMethods<QPointF> (0x0x7fae699cb1a0) 0 empty
+QListSpecialMethodsBase<QPointF> (0x0x7fae699adae0) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7fae69637120) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7fae696370c0) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7fae69697240) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7fae696971e0) 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 (0x0x7fae696cfd68) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+QPaintDevice (0x0x7fae696f1060) 0
+ primary-for QImage (0x0x7fae696cfd68)
+
+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 (0x0x7fae697675b0) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+QPaintDevice (0x0x7fae697685a0) 0
+ primary-for QPixmap (0x0x7fae697675b0)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7fae697b9600) 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 (0x0x7fae69411540) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7fae69411ba0) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7fae69470ba0) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7fae694a9d80) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7fae69571ae0) 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 (0x0x7fae694fa2d8) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+QObject (0x0x7fae69571a80) 0
+ primary-for QScreen (0x0x7fae694fa2d8)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7fae69571d20) 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 (0x0x7fae694fa340) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+QObject (0x0x7fae69571cc0) 0
+ primary-for QInputDevice (0x0x7fae694fa340)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7fae695ad960) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7fae69225420) 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 (0x0x7fae692264e0) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+QInputDevice (0x0x7fae69226548) 0
+ primary-for QPointingDevice (0x0x7fae692264e0)
+QObject (0x0x7fae692253c0) 0
+ primary-for QInputDevice (0x0x7fae69226548)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7fae69225c00) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7fae692b9d80) 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 (0x0x7fae693099c0) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+QEvent (0x0x7fae69300b40) 0
+ primary-for QInputEvent (0x0x7fae693099c0)
+
+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 (0x0x7fae69309a28) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+QInputEvent (0x0x7fae69309a90) 0
+ primary-for QPointerEvent (0x0x7fae69309a28)
+QEvent (0x0x7fae69325060) 0
+ primary-for QInputEvent (0x0x7fae69309a90)
+
+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 (0x0x7fae69309d00) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+QPointerEvent (0x0x7fae69309d68) 0
+ primary-for QSinglePointEvent (0x0x7fae69309d00)
+QInputEvent (0x0x7fae69309dd0) 0
+ primary-for QPointerEvent (0x0x7fae69309d68)
+QEvent (0x0x7fae69325b40) 0
+ primary-for QInputEvent (0x0x7fae69309dd0)
+
+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 (0x0x7fae69309e38) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+QSinglePointEvent (0x0x7fae69309ea0) 0
+ primary-for QEnterEvent (0x0x7fae69309e38)
+QPointerEvent (0x0x7fae69309f08) 0
+ primary-for QSinglePointEvent (0x0x7fae69309ea0)
+QInputEvent (0x0x7fae69309f70) 0
+ primary-for QPointerEvent (0x0x7fae69309f08)
+QEvent (0x0x7fae693a1000) 0
+ primary-for QInputEvent (0x0x7fae69309f70)
+
+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 (0x0x7fae69309c98) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+QSinglePointEvent (0x0x7fae693ae000) 0
+ primary-for QMouseEvent (0x0x7fae69309c98)
+QPointerEvent (0x0x7fae693ae068) 0
+ primary-for QSinglePointEvent (0x0x7fae693ae000)
+QInputEvent (0x0x7fae693ae0d0) 0
+ primary-for QPointerEvent (0x0x7fae693ae068)
+QEvent (0x0x7fae693a1780) 0
+ primary-for QInputEvent (0x0x7fae693ae0d0)
+
+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 (0x0x7fae693ae138) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+QSinglePointEvent (0x0x7fae693ae1a0) 0
+ primary-for QHoverEvent (0x0x7fae693ae138)
+QPointerEvent (0x0x7fae693ae208) 0
+ primary-for QSinglePointEvent (0x0x7fae693ae1a0)
+QInputEvent (0x0x7fae693ae270) 0
+ primary-for QPointerEvent (0x0x7fae693ae208)
+QEvent (0x0x7fae693a1d20) 0
+ primary-for QInputEvent (0x0x7fae693ae270)
+
+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 (0x0x7fae693ae2d8) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+QSinglePointEvent (0x0x7fae693ae340) 0
+ primary-for QWheelEvent (0x0x7fae693ae2d8)
+QPointerEvent (0x0x7fae693ae3a8) 0
+ primary-for QSinglePointEvent (0x0x7fae693ae340)
+QInputEvent (0x0x7fae693ae410) 0
+ primary-for QPointerEvent (0x0x7fae693ae3a8)
+QEvent (0x0x7fae693cd180) 0
+ primary-for QInputEvent (0x0x7fae693ae410)
+
+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 (0x0x7fae693ae478) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+QSinglePointEvent (0x0x7fae693ae4e0) 0
+ primary-for QTabletEvent (0x0x7fae693ae478)
+QPointerEvent (0x0x7fae693ae548) 0
+ primary-for QSinglePointEvent (0x0x7fae693ae4e0)
+QInputEvent (0x0x7fae693ae5b0) 0
+ primary-for QPointerEvent (0x0x7fae693ae548)
+QEvent (0x0x7fae693cd660) 0
+ primary-for QInputEvent (0x0x7fae693ae5b0)
+
+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 (0x0x7fae693ae618) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+QSinglePointEvent (0x0x7fae693ae680) 0
+ primary-for QNativeGestureEvent (0x0x7fae693ae618)
+QPointerEvent (0x0x7fae693ae6e8) 0
+ primary-for QSinglePointEvent (0x0x7fae693ae680)
+QInputEvent (0x0x7fae693ae750) 0
+ primary-for QPointerEvent (0x0x7fae693ae6e8)
+QEvent (0x0x7fae693cdf00) 0
+ primary-for QInputEvent (0x0x7fae693ae750)
+
+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 (0x0x7fae693ae7b8) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+QInputEvent (0x0x7fae693ae820) 0
+ primary-for QKeyEvent (0x0x7fae693ae7b8)
+QEvent (0x0x7fae690014e0) 0
+ primary-for QInputEvent (0x0x7fae693ae820)
+
+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 (0x0x7fae693ae888) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+QEvent (0x0x7fae69001ae0) 0
+ primary-for QFocusEvent (0x0x7fae693ae888)
+
+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 (0x0x7fae693ae8f0) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+QEvent (0x0x7fae69001e40) 0
+ primary-for QPaintEvent (0x0x7fae693ae8f0)
+
+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 (0x0x7fae693ae958) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+QEvent (0x0x7fae6902a180) 0
+ primary-for QMoveEvent (0x0x7fae693ae958)
+
+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 (0x0x7fae693ae9c0) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+QEvent (0x0x7fae6902a4e0) 0
+ primary-for QExposeEvent (0x0x7fae693ae9c0)
+
+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 (0x0x7fae693aea28) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+QEvent (0x0x7fae6902a780) 0
+ primary-for QPlatformSurfaceEvent (0x0x7fae693aea28)
+
+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 (0x0x7fae693aea90) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+QEvent (0x0x7fae6902aa80) 0
+ primary-for QResizeEvent (0x0x7fae693aea90)
+
+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 (0x0x7fae693aeaf8) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+QEvent (0x0x7fae6902ade0) 0
+ primary-for QCloseEvent (0x0x7fae693aeaf8)
+
+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 (0x0x7fae693aeb60) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+QEvent (0x0x7fae6902ae40) 0
+ primary-for QIconDragEvent (0x0x7fae693aeb60)
+
+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 (0x0x7fae693aebc8) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+QEvent (0x0x7fae6902aea0) 0
+ primary-for QShowEvent (0x0x7fae693aebc8)
+
+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 (0x0x7fae693aec30) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+QEvent (0x0x7fae6902af00) 0
+ primary-for QHideEvent (0x0x7fae693aec30)
+
+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 (0x0x7fae693aec98) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+QInputEvent (0x0x7fae693aed00) 0
+ primary-for QContextMenuEvent (0x0x7fae693aec98)
+QEvent (0x0x7fae6902af60) 0
+ primary-for QInputEvent (0x0x7fae693aed00)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7fae6906f540) 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 (0x0x7fae693aed68) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+QEvent (0x0x7fae6906f4e0) 0
+ primary-for QInputMethodEvent (0x0x7fae693aed68)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7fae690f4ba0) 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 (0x0x7fae690f6d68) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+QEvent (0x0x7fae690f4b40) 0
+ primary-for QInputMethodQueryEvent (0x0x7fae690f6d68)
+
+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 (0x0x7fae69182e38) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+QEvent (0x0x7fae69180b40) 0
+ primary-for QDropEvent (0x0x7fae69182e38)
+
+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 (0x0x7fae69182ea0) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+QDropEvent (0x0x7fae69182f08) 0
+ primary-for QDragMoveEvent (0x0x7fae69182ea0)
+QEvent (0x0x7fae691ad2a0) 0
+ primary-for QDropEvent (0x0x7fae69182f08)
+
+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 (0x0x7fae69182f70) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+QDragMoveEvent (0x0x7fae691bb000) 0
+ primary-for QDragEnterEvent (0x0x7fae69182f70)
+QDropEvent (0x0x7fae691bb068) 0
+ primary-for QDragMoveEvent (0x0x7fae691bb000)
+QEvent (0x0x7fae691ad720) 0
+ primary-for QDropEvent (0x0x7fae691bb068)
+
+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 (0x0x7fae691bb0d0) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+QEvent (0x0x7fae691ad780) 0
+ primary-for QDragLeaveEvent (0x0x7fae691bb0d0)
+
+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 (0x0x7fae691bb138) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+QEvent (0x0x7fae691ad7e0) 0
+ primary-for QHelpEvent (0x0x7fae691bb138)
+
+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 (0x0x7fae691bb1a0) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+QEvent (0x0x7fae691adcc0) 0
+ primary-for QStatusTipEvent (0x0x7fae691bb1a0)
+
+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 (0x0x7fae691bb208) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+QEvent (0x0x7fae691adf60) 0
+ primary-for QWhatsThisClickedEvent (0x0x7fae691bb208)
+
+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 (0x0x7fae691bb270) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+QEvent (0x0x7fae691de240) 0
+ primary-for QActionEvent (0x0x7fae691bb270)
+
+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 (0x0x7fae691bb2d8) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+QEvent (0x0x7fae691de5a0) 0
+ primary-for QFileOpenEvent (0x0x7fae691bb2d8)
+
+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 (0x0x7fae691bb340) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+QEvent (0x0x7fae691de8a0) 0
+ primary-for QToolBarChangeEvent (0x0x7fae691bb340)
+
+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 (0x0x7fae691bb3a8) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+QEvent (0x0x7fae691deba0) 0
+ primary-for QShortcutEvent (0x0x7fae691bb3a8)
+
+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 (0x0x7fae691bb410) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+QEvent (0x0x7fae691def00) 0
+ primary-for QWindowStateChangeEvent (0x0x7fae691bb410)
+
+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 (0x0x7fae691bb478) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+QPointerEvent (0x0x7fae691bb4e0) 0
+ primary-for QTouchEvent (0x0x7fae691bb478)
+QInputEvent (0x0x7fae691bb548) 0
+ primary-for QPointerEvent (0x0x7fae691bb4e0)
+QEvent (0x0x7fae68e0f240) 0
+ primary-for QInputEvent (0x0x7fae691bb548)
+
+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 (0x0x7fae691bb5b0) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+QEvent (0x0x7fae68e0f5a0) 0
+ primary-for QScrollPrepareEvent (0x0x7fae691bb5b0)
+
+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 (0x0x7fae691bb618) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+QEvent (0x0x7fae68e0f9c0) 0
+ primary-for QScrollEvent (0x0x7fae691bb618)
+
+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 (0x0x7fae691bb680) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+QEvent (0x0x7fae68e0fd80) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7fae691bb680)
+
+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 (0x0x7fae691bb6e8) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+QEvent (0x0x7fae68e44120) 0
+ primary-for QApplicationStateChangeEvent (0x0x7fae691bb6e8)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7fae68e44420) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7fae68eae900) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7fae68eaeae0) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7fae68f480c0) 0
+
+Class QBrushDataPointerDeleter
+ size=1 align=1
+ base size=0 base align=1
+QBrushDataPointerDeleter (0x0x7fae68f7ecc0) 0 empty
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7fae68f7ed20) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7fae68cd8e40) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7fae68cf30c0) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7fae68cf3060) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7fae68d5b068) 0
+QGradient (0x0x7fae68cf3e40) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7fae68d5b0d0) 0
+QGradient (0x0x7fae68cf3f60) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7fae68d5b138) 0
+QGradient (0x0x7fae68d79060) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7fae68d79120) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7fae68dd8000) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7fae68dbef60) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7fae68a214e0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7fae68a64360) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7fae68b17a90) 0
+QTextFormat (0x0x7fae68b10f60) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7fae68ba7d00) 0
+QTextFormat (0x0x7fae68bad840) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7fae687ede38) 0
+QTextFormat (0x0x7fae687fe180) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7fae68825f08) 0
+QTextCharFormat (0x0x7fae68825f70) 0
+QTextFormat (0x0x7fae68830420) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7fae6886e0d0) 0
+QTextFormat (0x0x7fae688676c0) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7fae688ac208) 0
+QTextFrameFormat (0x0x7fae688ac270) 0
+QTextFormat (0x0x7fae688a0ea0) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7fae688ea3a8) 0
+QTextCharFormat (0x0x7fae688ea410) 0
+QTextFormat (0x0x7fae688eb540) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7fae6892cba0) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7fae6898e6c0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7fae6898eae0) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7fae6898ea80) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7fae6861fd80) 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 (0x0x7fae6864a240) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7fae6864a4e0) 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 (0x0x7fae6862bc98) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+QObject (0x0x7fae6864a480) 0
+ primary-for QTextDocument (0x0x7fae6862bc98)
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7fae6864ae40) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7fae6873ba80) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7fae6873bae0) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7fae6873bb40) 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 (0x0x7fae68738d68) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+QObject (0x0x7fae6873ba20) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7fae68738d68)
+
+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 (0x0x7fae68416540) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7fae68416960) 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 (0x0x7fae684169c0) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7fae68416900) 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 (0x0x7fae684493c0) 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 (0x0x7fae68449780) 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 (0x0x7fae684497e0) 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 (0x0x7fae68449840) 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 (0x0x7fae684498a0) 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 (0x0x7fae68449900) 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 (0x0x7fae68449960) 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 (0x0x7fae68449a20) 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 (0x0x7fae68449a80) 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 (0x0x7fae68449ae0) 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 (0x0x7fae68411d00) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+QAccessibleEvent (0x0x7fae684b0060) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7fae68411d00)
+
+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 (0x0x7fae68411d68) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+QAccessibleEvent (0x0x7fae684b0420) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fae68411d68)
+
+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 (0x0x7fae68411dd0) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7fae68411e38) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7fae68411dd0)
+QAccessibleEvent (0x0x7fae684b0840) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fae68411e38)
+
+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 (0x0x7fae68411ea0) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7fae68411f08) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7fae68411ea0)
+QAccessibleEvent (0x0x7fae684b0cc0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fae68411f08)
+
+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 (0x0x7fae68411f70) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7fae684d3000) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7fae68411f70)
+QAccessibleEvent (0x0x7fae684d1120) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fae684d3000)
+
+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 (0x0x7fae684d3068) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7fae684d30d0) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7fae684d3068)
+QAccessibleEvent (0x0x7fae684d1540) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7fae684d30d0)
+
+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 (0x0x7fae684d3138) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+QAccessibleEvent (0x0x7fae684d19c0) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7fae684d3138)
+
+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 (0x0x7fae684d31a0) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+QAccessibleEvent (0x0x7fae684d1de0) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7fae684d31a0)
+
+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 (0x0x7fae684fa8a0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7fae684fab40) 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 (0x0x7fae684d32d8) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+QObject (0x0x7fae684faae0) 0
+ primary-for QAccessibleBridgePlugin (0x0x7fae684d32d8)
+
+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 (0x0x7fae684d3340) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+QAccessibleInterface (0x0x7fae684fac00) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fae684d3340)
+
+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 (0x0x7fae684d33a8) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+QAccessibleObject (0x0x7fae684d3410) 0
+ primary-for QAccessibleApplication (0x0x7fae684d33a8)
+QAccessibleInterface (0x0x7fae684fac60) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fae684d3410)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7fae684fad20) 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 (0x0x7fae684d3478) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+QObject (0x0x7fae684facc0) 0
+ primary-for QAccessiblePlugin (0x0x7fae684d3478)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7fae684fae40) 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 (0x0x7fae684d34e0) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+QObject (0x0x7fae684fade0) 0
+ primary-for QAction (0x0x7fae684d34e0)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7fae6853f780) 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 (0x0x7fae684d3548) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+QObject (0x0x7fae6853f720) 0
+ primary-for QActionGroup (0x0x7fae684d3548)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7fae6853fa20) 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 (0x0x7fae6857b420) 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 (0x0x7fae684d36e8) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+QPixmap (0x0x7fae684d3750) 0
+ primary-for QBitmap (0x0x7fae684d36e8)
+QPaintDevice (0x0x7fae6857bae0) 0
+ primary-for QPixmap (0x0x7fae684d3750)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7fae681fd660) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7fae6826d600) 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 (0x0x7fae685d3cb0) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+QObject (0x0x7fae6826d540) 0
+ primary-for QWindow (0x0x7fae685d3cb0)
+QSurface (0x0x7fae6826d5a0) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7fae6826dea0) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7fae682db000) 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 (0x0x7fae6827a208) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+QObject (0x0x7fae6826df60) 0
+ primary-for QClipboard (0x0x7fae6827a208)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7fae682db120) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7fae683383c0) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7fae683ab3c0) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7fae683ab480) 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 (0x0x7fae683aa410) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+QObject (0x0x7fae683ab420) 0
+ primary-for QDrag (0x0x7fae683aa410)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7fae683ab660) 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 (0x0x7fae683aa478) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+QAbstractItemModel (0x0x7fae683aa4e0) 0
+ primary-for QFileSystemModel (0x0x7fae683aa478)
+QObject (0x0x7fae683ab600) 0
+ primary-for QAbstractItemModel (0x0x7fae683aa4e0)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7fae683abde0) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7fae68069960) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7fae680b9600) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7fae67e3f2a0) 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 (0x0x7fae681c34e0) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+QObject (0x0x7fae67e3f240) 0
+ primary-for QGenericPlugin (0x0x7fae681c34e0)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7fae67e3f360) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7fae67e3f420) 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 (0x0x7fae681c3548) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+QObject (0x0x7fae67e3f3c0) 0
+ primary-for QInputMethod (0x0x7fae681c3548)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7fae67e3f6c0) 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 (0x0x7fae681c35b0) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+QCoreApplication (0x0x7fae681c3618) 0
+ primary-for QGuiApplication (0x0x7fae681c35b0)
+QObject (0x0x7fae67e3f660) 0
+ primary-for QCoreApplication (0x0x7fae681c3618)
+
+Class QNativeInterface::QX11Application::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QX11Application::TypeInfo (0x0x7fae67e3f9c0) 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 (0x0x7fae67e3f960) 0 nearly-empty
+ vptr=((& QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE) + 16)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7fae67e3fa80) 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 (0x0x7fae67e3fa20) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7fae67e3fb40) 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 (0x0x7fae681c3680) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+QObject (0x0x7fae67e3fae0) 0
+ primary-for QIconEnginePlugin (0x0x7fae681c3680)
+
+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 (0x0x7fae67e3fc00) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7fae67e3fe40) 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 (0x0x7fae681c36e8) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+QObject (0x0x7fae67e3fde0) 0
+ primary-for QImageIOPlugin (0x0x7fae681c36e8)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7fae67ebb3c0) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7fae67ebb480) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7fae67ebb540) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7fae67fa3420) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7fae67c92c60) 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 (0x0x7fae67c4bbc8) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+QObject (0x0x7fae67c92c00) 0
+ primary-for QMovie (0x0x7fae67c4bbc8)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7fae67d60060) 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 (0x0x7fae67d0e850) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+QObject (0x0x7fae67c92f60) 0
+ primary-for QOffscreenSurface (0x0x7fae67d0e850)
+QSurface (0x0x7fae67d60000) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7fae67d60300) 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 (0x0x7fae67c4bc30) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+QObject (0x0x7fae67d602a0) 0
+ primary-for QOpenGLContextGroup (0x0x7fae67c4bc30)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7fae67d604e0) 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 (0x0x7fae67c4bc98) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+QObject (0x0x7fae67d60480) 0
+ primary-for QOpenGLContext (0x0x7fae67c4bc98)
+
+Class QNativeInterface::QGLXContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QGLXContext::TypeInfo (0x0x7fae67d60720) 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 (0x0x7fae67d606c0) 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 (0x0x7fae67d607e0) 0 empty
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7fae67d60780) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7fae67d60840) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7fae67d60f60) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7fae67d60f00) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7fae67706068) 0
+QOpenGLFunctions (0x0x7fae6774e720) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7fae6774ea80) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7fae677060d0) 0
+QOpenGLFunctionsPrivate (0x0x7fae6774ea20) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7fae67571780) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7fae6721c240) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7fae6730e300) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7fae6730e2a0) 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 (0x0x7fae673a3dd0) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+QPaintDevice (0x0x7fae673a4c00) 0
+ primary-for QPagedPaintDevice (0x0x7fae673a3dd0)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7fae673a4d80) 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 (0x0x7fae673b14d0) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+QWindow (0x0x7fae673b1540) 0
+ primary-for QPaintDeviceWindow (0x0x7fae673b14d0)
+QObject (0x0x7fae673a4c60) 0
+ primary-for QWindow (0x0x7fae673b1540)
+QSurface (0x0x7fae673a4cc0) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+QPaintDevice (0x0x7fae673a4d20) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7fae673a4f60) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7fae673a4f00) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7fae66c32120) 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 (0x0x7fae66c58b40) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7fae66cbe180) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7fae66d9c0c0) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7fae66d9c060) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7fae66a46720) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7fae66a46f00) 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 (0x0x7fae66a77380) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+QObject (0x0x7fae66a46e40) 0
+ primary-for QPdfWriter (0x0x7fae66a77380)
+QPagedPaintDevice (0x0x7fae66a49af8) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+QPaintDevice (0x0x7fae66a46ea0) 16
+ primary-for QPagedPaintDevice (0x0x7fae66a49af8)
+
+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 (0x0x7fae66a49b60) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+QPaintDevice (0x0x7fae66a920c0) 0
+ primary-for QPicture (0x0x7fae66a49b60)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7fae66ad3de0) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7fae66ad3d80) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7fae66b3e000) 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 (0x0x7fae66b26c30) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+QPaintDeviceWindow (0x0x7fae66afd850) 0
+ primary-for QRasterWindow (0x0x7fae66b26c30)
+QWindow (0x0x7fae66afd8c0) 0
+ primary-for QPaintDeviceWindow (0x0x7fae66afd850)
+QObject (0x0x7fae66b1fea0) 0
+ primary-for QWindow (0x0x7fae66afd8c0)
+QSurface (0x0x7fae66b1ff00) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+QPaintDevice (0x0x7fae66b1ff60) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7fae66b3ecc0) 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 (0x0x7fae66b26d00) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+QObject (0x0x7fae66b3ec60) 0
+ primary-for QSessionManager (0x0x7fae66b26d00)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7fae66b3eea0) 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 (0x0x7fae66b26d68) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+QObject (0x0x7fae66b3ee40) 0
+ primary-for QShortcut (0x0x7fae66b26d68)
+
+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 (0x0x7fae66b943c0) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7fae6689a2a0) 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 (0x0x7fae668334e0) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+QAbstractItemModel (0x0x7fae66833548) 0
+ primary-for QStandardItemModel (0x0x7fae668334e0)
+QObject (0x0x7fae6689a240) 0
+ primary-for QAbstractItemModel (0x0x7fae66833548)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7fae6689a600) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7fae6692b600) 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 (0x0x7fae669206e8) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+QObject (0x0x7fae6692b5a0) 0
+ primary-for QStyleHints (0x0x7fae669206e8)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7fae6692b7e0) 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 (0x0x7fae66920750) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+QObject (0x0x7fae6692b780) 0
+ primary-for QTextObject (0x0x7fae66920750)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7fae6692b9c0) 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 (0x0x7fae669207b8) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+QTextObject (0x0x7fae66920820) 0
+ primary-for QTextBlockGroup (0x0x7fae669207b8)
+QObject (0x0x7fae6692b960) 0
+ primary-for QTextObject (0x0x7fae66920820)
+
+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 (0x0x7fae6692bb40) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7fae6692bc00) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7fae6692bc60) 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 (0x0x7fae66920888) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+QTextObject (0x0x7fae669208f0) 0
+ primary-for QTextFrame (0x0x7fae66920888)
+QObject (0x0x7fae6692bba0) 0
+ primary-for QTextObject (0x0x7fae669208f0)
+
+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 (0x0x7fae669adc00) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7fae669adcc0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7fae669adc60) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7fae6664d8a0) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7fae66698960) 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 (0x0x7fae666a36e8) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+QObject (0x0x7fae66698900) 0
+ primary-for QSyntaxHighlighter (0x0x7fae666a36e8)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7fae66698ae0) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7fae66698b40) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7fae66698c00) 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 (0x0x7fae666a3750) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+QTextBlockGroup (0x0x7fae666a37b8) 0
+ primary-for QTextList (0x0x7fae666a3750)
+QTextObject (0x0x7fae666a3820) 0
+ primary-for QTextBlockGroup (0x0x7fae666a37b8)
+QObject (0x0x7fae66698ba0) 0
+ primary-for QTextObject (0x0x7fae666a3820)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7fae666dc000) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7fae666dc840) 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 (0x0x7fae666a3888) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+QTextFrame (0x0x7fae666a38f0) 0
+ primary-for QTextTable (0x0x7fae666a3888)
+QTextObject (0x0x7fae666a3958) 0
+ primary-for QTextFrame (0x0x7fae666a38f0)
+QObject (0x0x7fae666dc7e0) 0
+ primary-for QTextObject (0x0x7fae666a3958)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7fae666dcc00) 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 (0x0x7fae666a39c0) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+QObject (0x0x7fae666dcba0) 0
+ primary-for QUndoGroup (0x0x7fae666a39c0)
+
+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 (0x0x7fae666dcd80) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7fae666dce40) 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 (0x0x7fae666a3a28) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+QObject (0x0x7fae666dcde0) 0
+ primary-for QUndoStack (0x0x7fae666a3a28)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7fae6672b060) 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 (0x0x7fae666a3a90) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+QObject (0x0x7fae6672b000) 0
+ primary-for QValidator (0x0x7fae666a3a90)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7fae6672b300) 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 (0x0x7fae666a3af8) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+QValidator (0x0x7fae666a3b60) 0
+ primary-for QIntValidator (0x0x7fae666a3af8)
+QObject (0x0x7fae6672b2a0) 0
+ primary-for QValidator (0x0x7fae666a3b60)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7fae6672b4e0) 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 (*)(...))QDoubleValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7fae666a3bc8) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+QValidator (0x0x7fae666a3c30) 0
+ primary-for QDoubleValidator (0x0x7fae666a3bc8)
+QObject (0x0x7fae6672b480) 0
+ primary-for QValidator (0x0x7fae666a3c30)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7fae6672b8a0) 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 (0x0x7fae666a3c98) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+QValidator (0x0x7fae666a3d00) 0
+ primary-for QRegularExpressionValidator (0x0x7fae666a3c98)
+QObject (0x0x7fae6672b840) 0
+ primary-for QValidator (0x0x7fae666a3d00)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7fae6672ba80) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7fae6672ba20) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7fae664570c0) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7fae664571e0) 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 (0x0x7fae664167e0) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+QObject (0x0x7fae66457120) 0
+ primary-for QWidget (0x0x7fae664167e0)
+QPaintDevice (0x0x7fae66457180) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7fae6653bd80) 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 (0x0x7fae66414410) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+QWidget (0x0x7fae6654a4d0) 0
+ primary-for QAbstractButton (0x0x7fae66414410)
+QObject (0x0x7fae6653bcc0) 0
+ primary-for QWidget (0x0x7fae6654a4d0)
+QPaintDevice (0x0x7fae6653bd20) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7fae66578000) 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 (0x0x7fae66414478) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+QWidget (0x0x7fae6654a690) 0
+ primary-for QAbstractSpinBox (0x0x7fae66414478)
+QObject (0x0x7fae6653bf00) 0
+ primary-for QWidget (0x0x7fae6654a690)
+QPaintDevice (0x0x7fae6653bf60) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7fae66578900) 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 (0x0x7fae664145b0) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+QWidget (0x0x7fae665c32a0) 0
+ primary-for QAbstractSlider (0x0x7fae664145b0)
+QObject (0x0x7fae66578840) 0
+ primary-for QWidget (0x0x7fae665c32a0)
+QPaintDevice (0x0x7fae665788a0) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7fae66578b40) 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 (0x0x7fae66414618) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+QAbstractSlider (0x0x7fae66414680) 0
+ primary-for QSlider (0x0x7fae66414618)
+QWidget (0x0x7fae665c39a0) 0
+ primary-for QAbstractSlider (0x0x7fae66414680)
+QObject (0x0x7fae66578a80) 0
+ primary-for QWidget (0x0x7fae665c39a0)
+QPaintDevice (0x0x7fae66578ae0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7fae66578de0) 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 (0x0x7fae664146e8) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+QObject (0x0x7fae66578d80) 0
+ primary-for QStyle (0x0x7fae664146e8)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7fae663021e0) 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 (0x0x7fae664148f0) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+QWidget (0x0x7fae6626fa80) 0
+ primary-for QTabBar (0x0x7fae664148f0)
+QObject (0x0x7fae66302120) 0
+ primary-for QWidget (0x0x7fae6626fa80)
+QPaintDevice (0x0x7fae66302180) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7fae663024e0) 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 (0x0x7fae66414958) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+QWidget (0x0x7fae66319310) 0
+ primary-for QTabWidget (0x0x7fae66414958)
+QObject (0x0x7fae66302420) 0
+ primary-for QWidget (0x0x7fae66319310)
+QPaintDevice (0x0x7fae66302480) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7fae663028a0) 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 (0x0x7fae664149c0) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+QWidget (0x0x7fae663199a0) 0
+ primary-for QRubberBand (0x0x7fae664149c0)
+QObject (0x0x7fae663027e0) 0
+ primary-for QWidget (0x0x7fae663199a0)
+QPaintDevice (0x0x7fae66302840) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7fae66302cc0) 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 (0x0x7fae66414a28) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+QWidget (0x0x7fae66319e70) 0
+ primary-for QFrame (0x0x7fae66414a28)
+QObject (0x0x7fae66302c00) 0
+ primary-for QWidget (0x0x7fae66319e70)
+QPaintDevice (0x0x7fae66302c60) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7fae66398540) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7fae66414c30) 0
+QStyleOption (0x0x7fae663985a0) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7fae69842068) 0
+QStyleOption (0x0x7fae663987e0) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7fae698421a0) 0
+QStyleOption (0x0x7fae66398ea0) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7fae69842208) 0
+QStyleOption (0x0x7fae6601e120) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7fae66414c98) 0
+QStyleOption (0x0x7fae6601e360) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7fae66414d00) 0
+QStyleOptionHeader (0x0x7fae66414d68) 0
+QStyleOption (0x0x7fae6601e5a0) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7fae66414e38) 0
+QStyleOption (0x0x7fae6601e960) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7fae66414f70) 0
+QStyleOption (0x0x7fae660a2060) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7fae660aa1a0) 0
+QStyleOption (0x0x7fae660a2900) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7fae660aa2d8) 0
+QStyleOption (0x0x7fae66181000) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7fae660aa340) 0
+QStyleOption (0x0x7fae66181240) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7fae660aa3a8) 0
+QStyleOption (0x0x7fae66181480) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7fae660aa410) 0
+QStyleOption (0x0x7fae661816c0) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7fae660aa548) 0
+QStyleOption (0x0x7fae66181d80) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7fae660aa5b0) 0
+QStyleOption (0x0x7fae65e12000) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7fae660aa618) 0
+QStyleOption (0x0x7fae65e122a0) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7fae660aa680) 0
+QStyleOptionComplex (0x0x7fae660aa6e8) 0
+QStyleOption (0x0x7fae65e12540) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7fae660aa7b8) 0
+QStyleOptionComplex (0x0x7fae660aa820) 0
+QStyleOption (0x0x7fae65e12900) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7fae660aa8f0) 0
+QStyleOptionComplex (0x0x7fae660aa958) 0
+QStyleOption (0x0x7fae65e12b40) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7fae660aaa90) 0
+QStyleOptionComplex (0x0x7fae660aaaf8) 0
+QStyleOption (0x0x7fae65e7e1e0) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7fae660aab60) 0
+QStyleOptionComplex (0x0x7fae660aabc8) 0
+QStyleOption (0x0x7fae65e7e420) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7fae660aac30) 0
+QStyleOptionComplex (0x0x7fae660aac98) 0
+QStyleOption (0x0x7fae65e7e660) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7fae660aad00) 0
+QStyleOptionComplex (0x0x7fae660aad68) 0
+QStyleOption (0x0x7fae65e7e8a0) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7fae660aadd0) 0
+QStyleOption (0x0x7fae65e7eae0) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7fae65e7ee40) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7fae660aae38) 0
+QStyleHintReturn (0x0x7fae65e7eea0) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7fae660aaf08) 0
+QStyleHintReturn (0x0x7fae65e7ef00) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7fae65ee50c0) 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 (0x0x7fae660aa750) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+QObject (0x0x7fae65ee5060) 0
+ primary-for QAbstractItemDelegate (0x0x7fae660aa750)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7fae65ee5300) 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 (0x0x7fae65ef7000) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+QFrame (0x0x7fae65ef7068) 0
+ primary-for QAbstractScrollArea (0x0x7fae65ef7000)
+QWidget (0x0x7fae65eceaf0) 0
+ primary-for QFrame (0x0x7fae65ef7068)
+QObject (0x0x7fae65ee5240) 0
+ primary-for QWidget (0x0x7fae65eceaf0)
+QPaintDevice (0x0x7fae65ee52a0) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7fae65ee5600) 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 (0x0x7fae65ef70d0) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+QAbstractScrollArea (0x0x7fae65ef7138) 0
+ primary-for QAbstractItemView (0x0x7fae65ef70d0)
+QFrame (0x0x7fae65ef71a0) 0
+ primary-for QAbstractScrollArea (0x0x7fae65ef7138)
+QWidget (0x0x7fae65eceee0) 0
+ primary-for QFrame (0x0x7fae65ef71a0)
+QObject (0x0x7fae65ee5540) 0
+ primary-for QWidget (0x0x7fae65eceee0)
+QPaintDevice (0x0x7fae65ee55a0) 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 (0x0x7fae65f46e70) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+QAccessibleObject (0x0x7fae65ef72d8) 0
+ primary-for QAccessibleWidget (0x0x7fae65f46e70)
+QAccessibleInterface (0x0x7fae65fa7120) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7fae65ef72d8)
+QAccessibleActionInterface (0x0x7fae65fa7180) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7fae65fa72a0) 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 (0x0x7fae65ef7340) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+QGuiApplication (0x0x7fae65ef73a8) 0
+ primary-for QApplication (0x0x7fae65ef7340)
+QCoreApplication (0x0x7fae65ef7410) 0
+ primary-for QGuiApplication (0x0x7fae65ef73a8)
+QObject (0x0x7fae65fa7240) 0
+ primary-for QCoreApplication (0x0x7fae65ef7410)
+
+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 (0x0x7fae65fa7540) 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 (0x0x7fae65ef7478) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+QLayoutItem (0x0x7fae65fa7780) 0
+ primary-for QSpacerItem (0x0x7fae65ef7478)
+
+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 (0x0x7fae65ef74e0) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+QLayoutItem (0x0x7fae65fa79c0) 0
+ primary-for QWidgetItem (0x0x7fae65ef74e0)
+
+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 (0x0x7fae65ef7548) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+QWidgetItem (0x0x7fae65ef75b0) 0
+ primary-for QWidgetItemV2 (0x0x7fae65ef7548)
+QLayoutItem (0x0x7fae65fa7ba0) 0
+ primary-for QWidgetItem (0x0x7fae65ef75b0)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7fae65fa7d20) 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 (0x0x7fae65fe0850) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+QObject (0x0x7fae65fa7c60) 0
+ primary-for QLayout (0x0x7fae65fe0850)
+QLayoutItem (0x0x7fae65fa7cc0) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7fae65c34060) 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 (0x0x7fae65ef7618) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+QLayout (0x0x7fae65fe0d90) 0
+ primary-for QGridLayout (0x0x7fae65ef7618)
+QObject (0x0x7fae65fa7f60) 0
+ primary-for QLayout (0x0x7fae65fe0d90)
+QLayoutItem (0x0x7fae65c34000) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7fae65c34300) 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 (0x0x7fae65ef7680) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+QLayout (0x0x7fae65c54000) 0
+ primary-for QBoxLayout (0x0x7fae65ef7680)
+QObject (0x0x7fae65c34240) 0
+ primary-for QLayout (0x0x7fae65c54000)
+QLayoutItem (0x0x7fae65c342a0) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7fae65c34540) 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 (0x0x7fae65ef76e8) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+QBoxLayout (0x0x7fae65ef7750) 0
+ primary-for QHBoxLayout (0x0x7fae65ef76e8)
+QLayout (0x0x7fae65c54460) 0
+ primary-for QBoxLayout (0x0x7fae65ef7750)
+QObject (0x0x7fae65c34480) 0
+ primary-for QLayout (0x0x7fae65c54460)
+QLayoutItem (0x0x7fae65c344e0) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7fae65c346c0) 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 (0x0x7fae65ef77b8) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+QBoxLayout (0x0x7fae65ef7820) 0
+ primary-for QVBoxLayout (0x0x7fae65ef77b8)
+QLayout (0x0x7fae65c54540) 0
+ primary-for QBoxLayout (0x0x7fae65ef7820)
+QObject (0x0x7fae65c34600) 0
+ primary-for QLayout (0x0x7fae65c54540)
+QLayoutItem (0x0x7fae65c34660) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7fae65c347e0) 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 (0x0x7fae65ef7888) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+QObject (0x0x7fae65c34780) 0
+ primary-for QButtonGroup (0x0x7fae65ef7888)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7fae65c34a20) 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 (0x0x7fae65ef78f0) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+QWidget (0x0x7fae65c54770) 0
+ primary-for QCalendarWidget (0x0x7fae65ef78f0)
+QObject (0x0x7fae65c34960) 0
+ primary-for QWidget (0x0x7fae65c54770)
+QPaintDevice (0x0x7fae65c349c0) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7fae65c34ea0) 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 (0x0x7fae65ef7958) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+QAbstractButton (0x0x7fae65ef79c0) 0
+ primary-for QCheckBox (0x0x7fae65ef7958)
+QWidget (0x0x7fae65c54f50) 0
+ primary-for QAbstractButton (0x0x7fae65ef79c0)
+QObject (0x0x7fae65c34de0) 0
+ primary-for QWidget (0x0x7fae65c54f50)
+QPaintDevice (0x0x7fae65c34e40) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7fae65ccc120) 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 (0x0x7fae65ef7a28) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+QWidget (0x0x7fae65cca150) 0
+ primary-for QDialog (0x0x7fae65ef7a28)
+QObject (0x0x7fae65ccc060) 0
+ primary-for QWidget (0x0x7fae65cca150)
+QPaintDevice (0x0x7fae65ccc0c0) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7fae65ccc360) 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 (0x0x7fae65ef7a90) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+QDialog (0x0x7fae65ef7af8) 0
+ primary-for QColorDialog (0x0x7fae65ef7a90)
+QWidget (0x0x7fae65cca3f0) 0
+ primary-for QDialog (0x0x7fae65ef7af8)
+QObject (0x0x7fae65ccc2a0) 0
+ primary-for QWidget (0x0x7fae65cca3f0)
+QPaintDevice (0x0x7fae65ccc300) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7fae65ccca20) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7fae65cccb40) 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 (0x0x7fae65ef7c30) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+QAbstractItemView (0x0x7fae65ef7c98) 0
+ primary-for QColumnView (0x0x7fae65ef7c30)
+QAbstractScrollArea (0x0x7fae65ef7d00) 0
+ primary-for QAbstractItemView (0x0x7fae65ef7c98)
+QFrame (0x0x7fae65ef7d68) 0
+ primary-for QAbstractScrollArea (0x0x7fae65ef7d00)
+QWidget (0x0x7fae65ccac40) 0
+ primary-for QFrame (0x0x7fae65ef7d68)
+QObject (0x0x7fae65ccca80) 0
+ primary-for QWidget (0x0x7fae65ccac40)
+QPaintDevice (0x0x7fae65cccae0) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7fae65cccd80) 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 (0x0x7fae65ef7dd0) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+QWidget (0x0x7fae65ccae00) 0
+ primary-for QComboBox (0x0x7fae65ef7dd0)
+QObject (0x0x7fae65ccccc0) 0
+ primary-for QWidget (0x0x7fae65ccae00)
+QPaintDevice (0x0x7fae65cccd20) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7fae65da2360) 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 (0x0x7fae65ef7e38) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+QAbstractButton (0x0x7fae65ef7ea0) 0
+ primary-for QPushButton (0x0x7fae65ef7e38)
+QWidget (0x0x7fae65d79850) 0
+ primary-for QAbstractButton (0x0x7fae65ef7ea0)
+QObject (0x0x7fae65da22a0) 0
+ primary-for QWidget (0x0x7fae65d79850)
+QPaintDevice (0x0x7fae65da2300) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7fae65da25a0) 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 (0x0x7fae65ef7f08) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+QPushButton (0x0x7fae65ef7f70) 0
+ primary-for QCommandLinkButton (0x0x7fae65ef7f08)
+QAbstractButton (0x0x7fae65dbf000) 0
+ primary-for QPushButton (0x0x7fae65ef7f70)
+QWidget (0x0x7fae65d79a10) 0
+ primary-for QAbstractButton (0x0x7fae65dbf000)
+QObject (0x0x7fae65da24e0) 0
+ primary-for QWidget (0x0x7fae65d79a10)
+QPaintDevice (0x0x7fae65da2540) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7fae65da2780) 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 (0x0x7fae65dbf068) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+QStyle (0x0x7fae65dbf0d0) 0
+ primary-for QCommonStyle (0x0x7fae65dbf068)
+QObject (0x0x7fae65da2720) 0
+ primary-for QStyle (0x0x7fae65dbf0d0)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7fae65da2960) 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 (0x0x7fae65dbf138) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+QObject (0x0x7fae65da2900) 0
+ primary-for QCompleter (0x0x7fae65dbf138)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7fae65da2cc0) 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 (0x0x7fae65dbf1a0) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+QObject (0x0x7fae65da2c60) 0
+ primary-for QDataWidgetMapper (0x0x7fae65dbf1a0)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7fae65a1f000) 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 (0x0x7fae65dbf208) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+QAbstractSpinBox (0x0x7fae65dbf270) 0
+ primary-for QDateTimeEdit (0x0x7fae65dbf208)
+QWidget (0x0x7fae65a03620) 0
+ primary-for QAbstractSpinBox (0x0x7fae65dbf270)
+QObject (0x0x7fae65da2f00) 0
+ primary-for QWidget (0x0x7fae65a03620)
+QPaintDevice (0x0x7fae65da2f60) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7fae65a1f5a0) 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 (0x0x7fae65dbf3a8) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+QDateTimeEdit (0x0x7fae65dbf410) 0
+ primary-for QTimeEdit (0x0x7fae65dbf3a8)
+QAbstractSpinBox (0x0x7fae65dbf478) 0
+ primary-for QDateTimeEdit (0x0x7fae65dbf410)
+QWidget (0x0x7fae65a03e70) 0
+ primary-for QAbstractSpinBox (0x0x7fae65dbf478)
+QObject (0x0x7fae65a1f4e0) 0
+ primary-for QWidget (0x0x7fae65a03e70)
+QPaintDevice (0x0x7fae65a1f540) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7fae65a1f720) 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 (0x0x7fae65dbf4e0) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+QDateTimeEdit (0x0x7fae65dbf548) 0
+ primary-for QDateEdit (0x0x7fae65dbf4e0)
+QAbstractSpinBox (0x0x7fae65dbf5b0) 0
+ primary-for QDateTimeEdit (0x0x7fae65dbf548)
+QWidget (0x0x7fae65a03f50) 0
+ primary-for QAbstractSpinBox (0x0x7fae65dbf5b0)
+QObject (0x0x7fae65a1f660) 0
+ primary-for QWidget (0x0x7fae65a03f50)
+QPaintDevice (0x0x7fae65a1f6c0) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7fae65a1fb40) 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 (0x0x7fae65dbf618) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+QAbstractSlider (0x0x7fae65dbf680) 0
+ primary-for QDial (0x0x7fae65dbf618)
+QWidget (0x0x7fae65a77380) 0
+ primary-for QAbstractSlider (0x0x7fae65dbf680)
+QObject (0x0x7fae65a1fa80) 0
+ primary-for QWidget (0x0x7fae65a77380)
+QPaintDevice (0x0x7fae65a1fae0) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7fae65a1fd80) 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 (0x0x7fae65dbf6e8) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+QWidget (0x0x7fae65a77540) 0
+ primary-for QDialogButtonBox (0x0x7fae65dbf6e8)
+QObject (0x0x7fae65a1fcc0) 0
+ primary-for QWidget (0x0x7fae65a77540)
+QPaintDevice (0x0x7fae65a1fd20) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7fae65af2540) 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 (0x0x7fae65dbf820) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+QWidget (0x0x7fae65acbb60) 0
+ primary-for QDockWidget (0x0x7fae65dbf820)
+QObject (0x0x7fae65af2480) 0
+ primary-for QWidget (0x0x7fae65acbb60)
+QPaintDevice (0x0x7fae65af24e0) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7fae65af2cc0) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7fae65bbe360) 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 (0x0x7fae65dbfa28) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+QDialog (0x0x7fae65dbfa90) 0
+ primary-for QErrorMessage (0x0x7fae65dbfa28)
+QWidget (0x0x7fae65b6aee0) 0
+ primary-for QDialog (0x0x7fae65dbfa90)
+QObject (0x0x7fae65bbe2a0) 0
+ primary-for QWidget (0x0x7fae65b6aee0)
+QPaintDevice (0x0x7fae65bbe300) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7fae65bbe5a0) 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 (0x0x7fae65dbfaf8) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+QDialog (0x0x7fae65dbfb60) 0
+ primary-for QFileDialog (0x0x7fae65dbfaf8)
+QWidget (0x0x7fae657ed0e0) 0
+ primary-for QDialog (0x0x7fae65dbfb60)
+QObject (0x0x7fae65bbe4e0) 0
+ primary-for QWidget (0x0x7fae657ed0e0)
+QPaintDevice (0x0x7fae65bbe540) 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 (0x0x7fae65dbfc98) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+QAbstractFileIconProvider (0x0x7fae65884000) 0
+ primary-for QFileIconProvider (0x0x7fae65dbfc98)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7fae658841e0) 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 (0x0x7fae65dbfd00) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+QWidget (0x0x7fae65847460) 0
+ primary-for QFocusFrame (0x0x7fae65dbfd00)
+QObject (0x0x7fae65884120) 0
+ primary-for QWidget (0x0x7fae65847460)
+QPaintDevice (0x0x7fae65884180) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7fae65884420) 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 (0x0x7fae65dbfd68) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+QComboBox (0x0x7fae65dbfdd0) 0
+ primary-for QFontComboBox (0x0x7fae65dbfd68)
+QWidget (0x0x7fae65847620) 0
+ primary-for QComboBox (0x0x7fae65dbfdd0)
+QObject (0x0x7fae65884360) 0
+ primary-for QWidget (0x0x7fae65847620)
+QPaintDevice (0x0x7fae658843c0) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7fae65884ba0) 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 (0x0x7fae65dbff08) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+QDialog (0x0x7fae65dbff70) 0
+ primary-for QFontDialog (0x0x7fae65dbff08)
+QWidget (0x0x7fae65847e00) 0
+ primary-for QDialog (0x0x7fae65dbff70)
+QObject (0x0x7fae65884ae0) 0
+ primary-for QWidget (0x0x7fae65847e00)
+QPaintDevice (0x0x7fae65884b40) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7fae65944360) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7fae659443c0) 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 (0x0x7fae659200d0) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+QLayout (0x0x7fae6590c690) 0
+ primary-for QFormLayout (0x0x7fae659200d0)
+QObject (0x0x7fae659442a0) 0
+ primary-for QLayout (0x0x7fae6590c690)
+QLayoutItem (0x0x7fae65944300) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7fae659e98a0) 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 (0x0x7fae659e00d0) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+QObject (0x0x7fae659e9840) 0
+ primary-for QGesture (0x0x7fae659e00d0)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7fae659e9a80) 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 (0x0x7fae659e0138) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+QGesture (0x0x7fae659e01a0) 0
+ primary-for QPanGesture (0x0x7fae659e0138)
+QObject (0x0x7fae659e9a20) 0
+ primary-for QGesture (0x0x7fae659e01a0)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7fae659e9c60) 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 (0x0x7fae659e0208) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+QGesture (0x0x7fae659e0270) 0
+ primary-for QPinchGesture (0x0x7fae659e0208)
+QObject (0x0x7fae659e9c00) 0
+ primary-for QGesture (0x0x7fae659e0270)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7fae656c44e0) 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 (0x0x7fae656ca958) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+QGesture (0x0x7fae656ca9c0) 0
+ primary-for QSwipeGesture (0x0x7fae656ca958)
+QObject (0x0x7fae656c4480) 0
+ primary-for QGesture (0x0x7fae656ca9c0)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7fae656c4780) 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 (0x0x7fae656caa28) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+QGesture (0x0x7fae656caa90) 0
+ primary-for QTapGesture (0x0x7fae656caa28)
+QObject (0x0x7fae656c4720) 0
+ primary-for QGesture (0x0x7fae656caa90)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7fae656c4960) 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 (0x0x7fae656caaf8) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+QGesture (0x0x7fae656cab60) 0
+ primary-for QTapAndHoldGesture (0x0x7fae656caaf8)
+QObject (0x0x7fae656c4900) 0
+ primary-for QGesture (0x0x7fae656cab60)
+
+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 (0x0x7fae656cabc8) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+QEvent (0x0x7fae656c4ae0) 0
+ primary-for QGestureEvent (0x0x7fae656cabc8)
+
+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 (0x0x7fae657e0480) 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 (0x0x7fae657e0960) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7fae654e0ea0) 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 (0x0x7fae65512930) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+QObject (0x0x7fae654e0de0) 0
+ primary-for QGraphicsObject (0x0x7fae65512930)
+QGraphicsItem (0x0x7fae654e0e40) 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 (0x0x7fae657e3a28) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+QGraphicsItem (0x0x7fae654e0f60) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fae657e3a28)
+
+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 (0x0x7fae657e3a90) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7fae657e3af8) 0
+ primary-for QGraphicsPathItem (0x0x7fae657e3a90)
+QGraphicsItem (0x0x7fae655470c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fae657e3af8)
+
+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 (0x0x7fae657e3b60) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7fae657e3bc8) 0
+ primary-for QGraphicsRectItem (0x0x7fae657e3b60)
+QGraphicsItem (0x0x7fae655471e0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fae657e3bc8)
+
+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 (0x0x7fae657e3c30) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7fae657e3c98) 0
+ primary-for QGraphicsEllipseItem (0x0x7fae657e3c30)
+QGraphicsItem (0x0x7fae65547360) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fae657e3c98)
+
+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 (0x0x7fae657e3d00) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7fae657e3d68) 0
+ primary-for QGraphicsPolygonItem (0x0x7fae657e3d00)
+QGraphicsItem (0x0x7fae655474e0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fae657e3d68)
+
+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 (0x0x7fae657e3dd0) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+QGraphicsItem (0x0x7fae65547600) 0
+ primary-for QGraphicsLineItem (0x0x7fae657e3dd0)
+
+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 (0x0x7fae657e3e38) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+QGraphicsItem (0x0x7fae65547780) 0
+ primary-for QGraphicsPixmapItem (0x0x7fae657e3e38)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7fae655479c0) 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 (0x0x7fae657e3ea0) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+QGraphicsObject (0x0x7fae65584620) 0
+ primary-for QGraphicsTextItem (0x0x7fae657e3ea0)
+QObject (0x0x7fae65547900) 0
+ primary-for QGraphicsObject (0x0x7fae65584620)
+QGraphicsItem (0x0x7fae65547960) 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 (0x0x7fae655d3000) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7fae655d3068) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7fae655d3000)
+QGraphicsItem (0x0x7fae65547c60) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7fae655d3068)
+
+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 (0x0x7fae655d30d0) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+QGraphicsItem (0x0x7fae65547d80) 0
+ primary-for QGraphicsItemGroup (0x0x7fae655d30d0)
+
+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 (0x0x7fae651f6480) 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 (0x0x7fae655d3270) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+QGraphicsLayoutItem (0x0x7fae651f6d20) 0
+ primary-for QGraphicsLayout (0x0x7fae655d3270)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7fae65243240) 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 (0x0x7fae655d33a8) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+QObject (0x0x7fae652431e0) 0
+ primary-for QGraphicsAnchor (0x0x7fae655d33a8)
+
+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 (0x0x7fae655d3410) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+QGraphicsLayout (0x0x7fae655d3478) 0
+ primary-for QGraphicsAnchorLayout (0x0x7fae655d3410)
+QGraphicsLayoutItem (0x0x7fae652433c0) 0
+ primary-for QGraphicsLayout (0x0x7fae655d3478)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7fae65243540) 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 (0x0x7fae655d34e0) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+QObject (0x0x7fae652434e0) 0
+ primary-for QGraphicsEffect (0x0x7fae655d34e0)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7fae65243c60) 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 (0x0x7fae655d3618) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+QGraphicsEffect (0x0x7fae655d3680) 0
+ primary-for QGraphicsColorizeEffect (0x0x7fae655d3618)
+QObject (0x0x7fae65243c00) 0
+ primary-for QGraphicsEffect (0x0x7fae655d3680)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7fae65243e40) 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 (0x0x7fae655d36e8) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+QGraphicsEffect (0x0x7fae655d3750) 0
+ primary-for QGraphicsBlurEffect (0x0x7fae655d36e8)
+QObject (0x0x7fae65243de0) 0
+ primary-for QGraphicsEffect (0x0x7fae655d3750)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7fae652e9660) 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 (0x0x7fae655d3888) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+QGraphicsEffect (0x0x7fae655d38f0) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7fae655d3888)
+QObject (0x0x7fae652e9600) 0
+ primary-for QGraphicsEffect (0x0x7fae655d38f0)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7fae652e9a80) 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 (0x0x7fae655d3958) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+QGraphicsEffect (0x0x7fae655d39c0) 0
+ primary-for QGraphicsOpacityEffect (0x0x7fae655d3958)
+QObject (0x0x7fae652e9a20) 0
+ primary-for QGraphicsEffect (0x0x7fae655d39c0)
+
+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 (0x0x7fae655d3a28) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+QGraphicsLayout (0x0x7fae655d3a90) 0
+ primary-for QGraphicsGridLayout (0x0x7fae655d3a28)
+QGraphicsLayoutItem (0x0x7fae652e9c00) 0
+ primary-for QGraphicsLayout (0x0x7fae655d3a90)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7fae652e9de0) 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 (0x0x7fae655d3bc8) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+QObject (0x0x7fae652e9d80) 0
+ primary-for QGraphicsItemAnimation (0x0x7fae655d3bc8)
+
+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 (0x0x7fae655d3c30) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+QGraphicsLayout (0x0x7fae655d3c98) 0
+ primary-for QGraphicsLinearLayout (0x0x7fae655d3c30)
+QGraphicsLayoutItem (0x0x7fae652e9ea0) 0
+ primary-for QGraphicsLayout (0x0x7fae655d3c98)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7fae653a11e0) 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 (0x0x7fae65354620) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+QGraphicsObject (0x0x7fae65354690) 0
+ primary-for QGraphicsWidget (0x0x7fae65354620)
+QObject (0x0x7fae653a10c0) 0
+ primary-for QGraphicsObject (0x0x7fae65354690)
+QGraphicsItem (0x0x7fae653a1120) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+QGraphicsLayoutItem (0x0x7fae653a1180) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7fae653a1660) 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 (0x0x7fae655d3dd0) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+QGraphicsWidget (0x0x7fae65354a80) 0
+ primary-for QGraphicsProxyWidget (0x0x7fae655d3dd0)
+QGraphicsObject (0x0x7fae65354af0) 0
+ primary-for QGraphicsWidget (0x0x7fae65354a80)
+QObject (0x0x7fae653a1540) 0
+ primary-for QGraphicsObject (0x0x7fae65354af0)
+QGraphicsItem (0x0x7fae653a15a0) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+QGraphicsLayoutItem (0x0x7fae653a1600) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7fae653a19c0) 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 (0x0x7fae64ff7000) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+QObject (0x0x7fae653a1960) 0
+ primary-for QGraphicsScene (0x0x7fae64ff7000)
+
+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 (0x0x7fae64ff7820) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+QEvent (0x0x7fae65058d80) 0
+ primary-for QGraphicsSceneEvent (0x0x7fae64ff7820)
+
+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 (0x0x7fae64ff7888) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+QGraphicsSceneEvent (0x0x7fae64ff78f0) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7fae64ff7888)
+QEvent (0x0x7fae65058f60) 0
+ primary-for QGraphicsSceneEvent (0x0x7fae64ff78f0)
+
+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 (0x0x7fae64ff7958) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+QGraphicsSceneEvent (0x0x7fae64ff79c0) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7fae64ff7958)
+QEvent (0x0x7fae6511f060) 0
+ primary-for QGraphicsSceneEvent (0x0x7fae64ff79c0)
+
+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 (0x0x7fae64ff7a28) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+QGraphicsSceneEvent (0x0x7fae64ff7a90) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7fae64ff7a28)
+QEvent (0x0x7fae6511f180) 0
+ primary-for QGraphicsSceneEvent (0x0x7fae64ff7a90)
+
+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 (0x0x7fae64ff7af8) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+QGraphicsSceneEvent (0x0x7fae64ff7b60) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7fae64ff7af8)
+QEvent (0x0x7fae6511f2a0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fae64ff7b60)
+
+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 (0x0x7fae64ff7bc8) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+QGraphicsSceneEvent (0x0x7fae64ff7c30) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7fae64ff7bc8)
+QEvent (0x0x7fae6511f3c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fae64ff7c30)
+
+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 (0x0x7fae64ff7c98) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+QGraphicsSceneEvent (0x0x7fae64ff7d00) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7fae64ff7c98)
+QEvent (0x0x7fae6511f4e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7fae64ff7d00)
+
+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 (0x0x7fae64ff7d68) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+QGraphicsSceneEvent (0x0x7fae64ff7dd0) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7fae64ff7d68)
+QEvent (0x0x7fae6511f600) 0
+ primary-for QGraphicsSceneEvent (0x0x7fae64ff7dd0)
+
+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 (0x0x7fae64ff7e38) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+QGraphicsSceneEvent (0x0x7fae64ff7ea0) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7fae64ff7e38)
+QEvent (0x0x7fae6511f720) 0
+ primary-for QGraphicsSceneEvent (0x0x7fae64ff7ea0)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7fae6511f8a0) 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 (0x0x7fae64ff7f08) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+QObject (0x0x7fae6511f840) 0
+ primary-for QGraphicsTransform (0x0x7fae64ff7f08)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7fae6511fa80) 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 (0x0x7fae64ff7f70) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+QGraphicsTransform (0x0x7fae64ff77b8) 0
+ primary-for QGraphicsScale (0x0x7fae64ff7f70)
+QObject (0x0x7fae6511fa20) 0
+ primary-for QGraphicsTransform (0x0x7fae64ff77b8)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7fae6511fc60) 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 (0x0x7fae65177000) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+QGraphicsTransform (0x0x7fae65177068) 0
+ primary-for QGraphicsRotation (0x0x7fae65177000)
+QObject (0x0x7fae6511fc00) 0
+ primary-for QGraphicsTransform (0x0x7fae65177068)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7fae6511fea0) 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 (0x0x7fae651770d0) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+QAbstractScrollArea (0x0x7fae65177138) 0
+ primary-for QScrollArea (0x0x7fae651770d0)
+QFrame (0x0x7fae651771a0) 0
+ primary-for QAbstractScrollArea (0x0x7fae65177138)
+QWidget (0x0x7fae6511ebd0) 0
+ primary-for QFrame (0x0x7fae651771a0)
+QObject (0x0x7fae6511fde0) 0
+ primary-for QWidget (0x0x7fae6511ebd0)
+QPaintDevice (0x0x7fae6511fe40) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7fae65199120) 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 (0x0x7fae65177208) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+QAbstractScrollArea (0x0x7fae65177270) 0
+ primary-for QGraphicsView (0x0x7fae65177208)
+QFrame (0x0x7fae651772d8) 0
+ primary-for QAbstractScrollArea (0x0x7fae65177270)
+QWidget (0x0x7fae6511ed90) 0
+ primary-for QFrame (0x0x7fae651772d8)
+QObject (0x0x7fae65199060) 0
+ primary-for QWidget (0x0x7fae6511ed90)
+QPaintDevice (0x0x7fae651990c0) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7fae64e97300) 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 (0x0x7fae651774e0) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+QWidget (0x0x7fae64e93460) 0
+ primary-for QGroupBox (0x0x7fae651774e0)
+QObject (0x0x7fae64e97240) 0
+ primary-for QWidget (0x0x7fae64e93460)
+QPaintDevice (0x0x7fae64e972a0) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7fae64e97540) 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 (0x0x7fae65177548) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+QAbstractItemView (0x0x7fae651775b0) 0
+ primary-for QHeaderView (0x0x7fae65177548)
+QAbstractScrollArea (0x0x7fae65177618) 0
+ primary-for QAbstractItemView (0x0x7fae651775b0)
+QFrame (0x0x7fae65177680) 0
+ primary-for QAbstractScrollArea (0x0x7fae65177618)
+QWidget (0x0x7fae64e93620) 0
+ primary-for QFrame (0x0x7fae65177680)
+QObject (0x0x7fae64e97480) 0
+ primary-for QWidget (0x0x7fae64e93620)
+QPaintDevice (0x0x7fae64e974e0) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7fae64e979c0) 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 (0x0x7fae651776e8) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+QWidget (0x0x7fae64e93cb0) 0
+ primary-for QLineEdit (0x0x7fae651776e8)
+QObject (0x0x7fae64e97900) 0
+ primary-for QWidget (0x0x7fae64e93cb0)
+QPaintDevice (0x0x7fae64e97960) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7fae64e97d80) 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 (0x0x7fae65177750) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+QDialog (0x0x7fae651777b8) 0
+ primary-for QInputDialog (0x0x7fae65177750)
+QWidget (0x0x7fae64f13310) 0
+ primary-for QDialog (0x0x7fae651777b8)
+QObject (0x0x7fae64e97cc0) 0
+ primary-for QWidget (0x0x7fae64f13310)
+QPaintDevice (0x0x7fae64e97d20) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7fae64f3e420) 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 (0x0x7fae651778f0) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+QAbstractItemDelegate (0x0x7fae65177958) 0
+ primary-for QItemDelegate (0x0x7fae651778f0)
+QObject (0x0x7fae64f3e3c0) 0
+ primary-for QAbstractItemDelegate (0x0x7fae65177958)
+
+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 (0x0x7fae64f3e5a0) 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 (0x0x7fae64f3e900) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7fae64f3ede0) 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 (0x0x7fae65177a90) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+QWidget (0x0x7fae64fe1150) 0
+ primary-for QKeySequenceEdit (0x0x7fae65177a90)
+QObject (0x0x7fae64f3ed20) 0
+ primary-for QWidget (0x0x7fae64fe1150)
+QPaintDevice (0x0x7fae64f3ed80) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7fae64bf3060) 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 (0x0x7fae65177af8) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+QFrame (0x0x7fae65177b60) 0
+ primary-for QLabel (0x0x7fae65177af8)
+QWidget (0x0x7fae64fe1310) 0
+ primary-for QFrame (0x0x7fae65177b60)
+QObject (0x0x7fae64f3ef60) 0
+ primary-for QWidget (0x0x7fae64fe1310)
+QPaintDevice (0x0x7fae64bf3000) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7fae64bf3360) 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 (0x0x7fae65177bc8) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+QFrame (0x0x7fae65177c30) 0
+ primary-for QLCDNumber (0x0x7fae65177bc8)
+QWidget (0x0x7fae64fe15b0) 0
+ primary-for QFrame (0x0x7fae65177c30)
+QObject (0x0x7fae64bf32a0) 0
+ primary-for QWidget (0x0x7fae64fe15b0)
+QPaintDevice (0x0x7fae64bf3300) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7fae64bf3720) 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 (0x0x7fae65177c98) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+QAbstractItemView (0x0x7fae65177d00) 0
+ primary-for QListView (0x0x7fae65177c98)
+QAbstractScrollArea (0x0x7fae65177d68) 0
+ primary-for QAbstractItemView (0x0x7fae65177d00)
+QFrame (0x0x7fae65177dd0) 0
+ primary-for QAbstractScrollArea (0x0x7fae65177d68)
+QWidget (0x0x7fae64fe1c40) 0
+ primary-for QFrame (0x0x7fae65177dd0)
+QObject (0x0x7fae64bf3660) 0
+ primary-for QWidget (0x0x7fae64fe1c40)
+QPaintDevice (0x0x7fae64bf36c0) 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 (0x0x7fae64bf3c60) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7fae64c7d720) 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 (0x0x7fae65177e38) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+QListView (0x0x7fae65177ea0) 0
+ primary-for QListWidget (0x0x7fae65177e38)
+QAbstractItemView (0x0x7fae65177f08) 0
+ primary-for QListView (0x0x7fae65177ea0)
+QAbstractScrollArea (0x0x7fae65177f70) 0
+ primary-for QAbstractItemView (0x0x7fae65177f08)
+QFrame (0x0x7fae64c97000) 0
+ primary-for QAbstractScrollArea (0x0x7fae65177f70)
+QWidget (0x0x7fae64c8e380) 0
+ primary-for QFrame (0x0x7fae64c97000)
+QObject (0x0x7fae64c7d660) 0
+ primary-for QWidget (0x0x7fae64c8e380)
+QPaintDevice (0x0x7fae64c7d6c0) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7fae64c7dc00) 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 (0x0x7fae64c97068) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+QWidget (0x0x7fae64c8e850) 0
+ primary-for QMainWindow (0x0x7fae64c97068)
+QObject (0x0x7fae64c7db40) 0
+ primary-for QWidget (0x0x7fae64c8e850)
+QPaintDevice (0x0x7fae64c7dba0) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7fae64cff480) 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 (0x0x7fae64c971a0) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+QAbstractScrollArea (0x0x7fae64c97208) 0
+ primary-for QMdiArea (0x0x7fae64c971a0)
+QFrame (0x0x7fae64c97270) 0
+ primary-for QAbstractScrollArea (0x0x7fae64c97208)
+QWidget (0x0x7fae64d251c0) 0
+ primary-for QFrame (0x0x7fae64c97270)
+QObject (0x0x7fae64cff3c0) 0
+ primary-for QWidget (0x0x7fae64d251c0)
+QPaintDevice (0x0x7fae64cff420) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7fae64cffcc0) 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 (0x0x7fae64c973a8) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+QWidget (0x0x7fae64d25af0) 0
+ primary-for QMdiSubWindow (0x0x7fae64c973a8)
+QObject (0x0x7fae64cffc00) 0
+ primary-for QWidget (0x0x7fae64d25af0)
+QPaintDevice (0x0x7fae64cffc60) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7fae649ee3c0) 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 (0x0x7fae64c974e0) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+QWidget (0x0x7fae64a191c0) 0
+ primary-for QMenu (0x0x7fae64c974e0)
+QObject (0x0x7fae649ee300) 0
+ primary-for QWidget (0x0x7fae64a191c0)
+QPaintDevice (0x0x7fae649ee360) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7fae649ee840) 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 (0x0x7fae64c97548) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+QWidget (0x0x7fae64a195b0) 0
+ primary-for QMenuBar (0x0x7fae64c97548)
+QObject (0x0x7fae649ee780) 0
+ primary-for QWidget (0x0x7fae64a195b0)
+QPaintDevice (0x0x7fae649ee7e0) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7fae649eea80) 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 (0x0x7fae64c975b0) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+QDialog (0x0x7fae64c97618) 0
+ primary-for QMessageBox (0x0x7fae64c975b0)
+QWidget (0x0x7fae64a19770) 0
+ primary-for QDialog (0x0x7fae64c97618)
+QObject (0x0x7fae649ee9c0) 0
+ primary-for QWidget (0x0x7fae64a19770)
+QPaintDevice (0x0x7fae649eea20) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7fae64ad9480) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7fae64ad94e0) 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 (0x0x7fae64c97750) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+QAbstractScrollArea (0x0x7fae64c977b8) 0
+ primary-for QTextEdit (0x0x7fae64c97750)
+QFrame (0x0x7fae64c97820) 0
+ primary-for QAbstractScrollArea (0x0x7fae64c977b8)
+QWidget (0x0x7fae64adc310) 0
+ primary-for QFrame (0x0x7fae64c97820)
+QObject (0x0x7fae64ad93c0) 0
+ primary-for QWidget (0x0x7fae64adc310)
+QPaintDevice (0x0x7fae64ad9420) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7fae64ad9ea0) 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 (0x0x7fae64c97958) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+QAbstractScrollArea (0x0x7fae64c979c0) 0
+ primary-for QPlainTextEdit (0x0x7fae64c97958)
+QFrame (0x0x7fae64c97a28) 0
+ primary-for QAbstractScrollArea (0x0x7fae64c979c0)
+QWidget (0x0x7fae64adce70) 0
+ primary-for QFrame (0x0x7fae64c97a28)
+QObject (0x0x7fae64ad9de0) 0
+ primary-for QWidget (0x0x7fae64adce70)
+QPaintDevice (0x0x7fae64ad9e40) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7fae647eb420) 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 (0x0x7fae64c97a90) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+QAbstractTextDocumentLayout (0x0x7fae64c97af8) 0
+ primary-for QPlainTextDocumentLayout (0x0x7fae64c97a90)
+QObject (0x0x7fae647eb3c0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7fae64c97af8)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7fae647eb660) 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 (0x0x7fae64c97b60) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+QWidget (0x0x7fae64be9690) 0
+ primary-for QProgressBar (0x0x7fae64c97b60)
+QObject (0x0x7fae647eb5a0) 0
+ primary-for QWidget (0x0x7fae64be9690)
+QPaintDevice (0x0x7fae647eb600) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7fae647eb960) 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 (0x0x7fae64c97bc8) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+QDialog (0x0x7fae64c97c30) 0
+ primary-for QProgressDialog (0x0x7fae64c97bc8)
+QWidget (0x0x7fae64be9a10) 0
+ primary-for QDialog (0x0x7fae64c97c30)
+QObject (0x0x7fae647eb8a0) 0
+ primary-for QWidget (0x0x7fae64be9a10)
+QPaintDevice (0x0x7fae647eb900) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7fae647ebb40) 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 (0x0x7fae64c97c98) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+QCommonStyle (0x0x7fae64c97d00) 0
+ primary-for QProxyStyle (0x0x7fae64c97c98)
+QStyle (0x0x7fae64c97d68) 0
+ primary-for QCommonStyle (0x0x7fae64c97d00)
+QObject (0x0x7fae647ebae0) 0
+ primary-for QStyle (0x0x7fae64c97d68)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7fae647ebd80) 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 (0x0x7fae64c97dd0) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+QAbstractButton (0x0x7fae64c97e38) 0
+ primary-for QRadioButton (0x0x7fae64c97dd0)
+QWidget (0x0x7fae64be9d20) 0
+ primary-for QAbstractButton (0x0x7fae64c97e38)
+QObject (0x0x7fae647ebcc0) 0
+ primary-for QWidget (0x0x7fae64be9d20)
+QPaintDevice (0x0x7fae647ebd20) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7fae6485e000) 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 (0x0x7fae64c97ea0) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+QAbstractSlider (0x0x7fae64c97f08) 0
+ primary-for QScrollBar (0x0x7fae64c97ea0)
+QWidget (0x0x7fae64be9ee0) 0
+ primary-for QAbstractSlider (0x0x7fae64c97f08)
+QObject (0x0x7fae647ebf00) 0
+ primary-for QWidget (0x0x7fae64be9ee0)
+QPaintDevice (0x0x7fae647ebf60) 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 (0x0x7fae6485e180) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7fae6490f3c0) 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 (0x0x7fae64911af8) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+QObject (0x0x7fae6490f360) 0
+ primary-for QScroller (0x0x7fae64911af8)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7fae6490f6c0) 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 (0x0x7fae64911b60) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+QWidget (0x0x7fae649301c0) 0
+ primary-for QSizeGrip (0x0x7fae64911b60)
+QObject (0x0x7fae6490f600) 0
+ primary-for QWidget (0x0x7fae649301c0)
+QPaintDevice (0x0x7fae6490f660) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7fae6490f900) 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 (0x0x7fae64911bc8) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+QAbstractSpinBox (0x0x7fae64911c30) 0
+ primary-for QSpinBox (0x0x7fae64911bc8)
+QWidget (0x0x7fae64930380) 0
+ primary-for QAbstractSpinBox (0x0x7fae64911c30)
+QObject (0x0x7fae6490f840) 0
+ primary-for QWidget (0x0x7fae64930380)
+QPaintDevice (0x0x7fae6490f8a0) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7fae6490fb40) 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 (0x0x7fae64911c98) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+QAbstractSpinBox (0x0x7fae64911d00) 0
+ primary-for QDoubleSpinBox (0x0x7fae64911c98)
+QWidget (0x0x7fae64930540) 0
+ primary-for QAbstractSpinBox (0x0x7fae64911d00)
+QObject (0x0x7fae6490fa80) 0
+ primary-for QWidget (0x0x7fae64930540)
+QPaintDevice (0x0x7fae6490fae0) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7fae6490fd80) 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 (0x0x7fae64911d68) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+QWidget (0x0x7fae64930700) 0
+ primary-for QSplashScreen (0x0x7fae64911d68)
+QObject (0x0x7fae6490fcc0) 0
+ primary-for QWidget (0x0x7fae64930700)
+QPaintDevice (0x0x7fae6490fd20) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7fae64984000) 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 (0x0x7fae64911dd0) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+QFrame (0x0x7fae64911e38) 0
+ primary-for QSplitter (0x0x7fae64911dd0)
+QWidget (0x0x7fae649308c0) 0
+ primary-for QFrame (0x0x7fae64911e38)
+QObject (0x0x7fae6490ff00) 0
+ primary-for QWidget (0x0x7fae649308c0)
+QPaintDevice (0x0x7fae6490ff60) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7fae64984240) 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 (0x0x7fae64911ea0) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+QWidget (0x0x7fae64930a80) 0
+ primary-for QSplitterHandle (0x0x7fae64911ea0)
+QObject (0x0x7fae64984180) 0
+ primary-for QWidget (0x0x7fae64930a80)
+QPaintDevice (0x0x7fae649841e0) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7fae64984480) 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 (0x0x7fae64911f08) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+QLayout (0x0x7fae64930c40) 0
+ primary-for QStackedLayout (0x0x7fae64911f08)
+QObject (0x0x7fae649843c0) 0
+ primary-for QLayout (0x0x7fae64930c40)
+QLayoutItem (0x0x7fae64984420) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7fae64984780) 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 (0x0x7fae64911f70) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+QFrame (0x0x7fae649c3000) 0
+ primary-for QStackedWidget (0x0x7fae64911f70)
+QWidget (0x0x7fae649c4000) 0
+ primary-for QFrame (0x0x7fae649c3000)
+QObject (0x0x7fae649846c0) 0
+ primary-for QWidget (0x0x7fae649c4000)
+QPaintDevice (0x0x7fae64984720) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7fae649849c0) 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 (0x0x7fae649c3068) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+QWidget (0x0x7fae649c41c0) 0
+ primary-for QStatusBar (0x0x7fae649c3068)
+QObject (0x0x7fae64984900) 0
+ primary-for QWidget (0x0x7fae649c41c0)
+QPaintDevice (0x0x7fae64984960) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7fae64984ba0) 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 (0x0x7fae649c30d0) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+QAbstractItemDelegate (0x0x7fae649c3138) 0
+ primary-for QStyledItemDelegate (0x0x7fae649c30d0)
+QObject (0x0x7fae64984b40) 0
+ primary-for QAbstractItemDelegate (0x0x7fae649c3138)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7fae64984d20) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7fae649c31a0) 0
+QPainter (0x0x7fae64984d80) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7fae64608600) 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 (0x0x7fae649c3208) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+QObject (0x0x7fae646085a0) 0
+ primary-for QStylePlugin (0x0x7fae649c3208)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7fae64608720) 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 (0x0x7fae649c3270) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+QObject (0x0x7fae646086c0) 0
+ primary-for QSystemTrayIcon (0x0x7fae649c3270)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7fae64608a20) 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 (0x0x7fae649c32d8) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+QAbstractItemView (0x0x7fae649c3340) 0
+ primary-for QTableView (0x0x7fae649c32d8)
+QAbstractScrollArea (0x0x7fae649c33a8) 0
+ primary-for QAbstractItemView (0x0x7fae649c3340)
+QFrame (0x0x7fae649c3410) 0
+ primary-for QAbstractScrollArea (0x0x7fae649c33a8)
+QWidget (0x0x7fae646253f0) 0
+ primary-for QFrame (0x0x7fae649c3410)
+QObject (0x0x7fae64608960) 0
+ primary-for QWidget (0x0x7fae646253f0)
+QPaintDevice (0x0x7fae646089c0) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7fae64608ba0) 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 (0x0x7fae646600c0) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7fae646f32a0) 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 (0x0x7fae649c3b60) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+QTableView (0x0x7fae649c3bc8) 0
+ primary-for QTableWidget (0x0x7fae649c3b60)
+QAbstractItemView (0x0x7fae649c3c30) 0
+ primary-for QTableView (0x0x7fae649c3bc8)
+QAbstractScrollArea (0x0x7fae649c3c98) 0
+ primary-for QAbstractItemView (0x0x7fae649c3c30)
+QFrame (0x0x7fae649c3d00) 0
+ primary-for QAbstractScrollArea (0x0x7fae649c3c98)
+QWidget (0x0x7fae646de770) 0
+ primary-for QFrame (0x0x7fae649c3d00)
+QObject (0x0x7fae646f31e0) 0
+ primary-for QWidget (0x0x7fae646de770)
+QPaintDevice (0x0x7fae646f3240) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7fae646f3660) 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 (0x0x7fae649c3d68) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+QTextEdit (0x0x7fae649c3dd0) 0
+ primary-for QTextBrowser (0x0x7fae649c3d68)
+QAbstractScrollArea (0x0x7fae649c3e38) 0
+ primary-for QTextEdit (0x0x7fae649c3dd0)
+QFrame (0x0x7fae649c3ea0) 0
+ primary-for QAbstractScrollArea (0x0x7fae649c3e38)
+QWidget (0x0x7fae646deaf0) 0
+ primary-for QFrame (0x0x7fae649c3ea0)
+QObject (0x0x7fae646f35a0) 0
+ primary-for QWidget (0x0x7fae646deaf0)
+QPaintDevice (0x0x7fae646f3600) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7fae646f38a0) 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 (0x0x7fae649c3f08) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+QWidget (0x0x7fae646decb0) 0
+ primary-for QToolBar (0x0x7fae649c3f08)
+QObject (0x0x7fae646f37e0) 0
+ primary-for QWidget (0x0x7fae646decb0)
+QPaintDevice (0x0x7fae646f3840) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7fae646f3ba0) 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 (0x0x7fae649c3f70) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+QFrame (0x0x7fae649c3af8) 0
+ primary-for QToolBox (0x0x7fae649c3f70)
+QWidget (0x0x7fae646def50) 0
+ primary-for QFrame (0x0x7fae649c3af8)
+QObject (0x0x7fae646f3ae0) 0
+ primary-for QWidget (0x0x7fae646def50)
+QPaintDevice (0x0x7fae646f3b40) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7fae646f3f00) 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 (0x0x7fae6477f000) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+QAbstractButton (0x0x7fae6477f068) 0
+ primary-for QToolButton (0x0x7fae6477f000)
+QWidget (0x0x7fae647792a0) 0
+ primary-for QAbstractButton (0x0x7fae6477f068)
+QObject (0x0x7fae646f3e40) 0
+ primary-for QWidget (0x0x7fae647792a0)
+QPaintDevice (0x0x7fae646f3ea0) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7fae64796180) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7fae64796300) 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 (0x0x7fae6477f0d0) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+QAbstractItemView (0x0x7fae6477f138) 0
+ primary-for QTreeView (0x0x7fae6477f0d0)
+QAbstractScrollArea (0x0x7fae6477f1a0) 0
+ primary-for QAbstractItemView (0x0x7fae6477f138)
+QFrame (0x0x7fae6477f208) 0
+ primary-for QAbstractScrollArea (0x0x7fae6477f1a0)
+QWidget (0x0x7fae64779700) 0
+ primary-for QFrame (0x0x7fae6477f208)
+QObject (0x0x7fae64796240) 0
+ primary-for QWidget (0x0x7fae64779700)
+QPaintDevice (0x0x7fae647962a0) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7fae64796480) 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 (0x0x7fae64796cc0) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7fae6455f8a0) 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 (0x0x7fae644d91a0) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+QTreeView (0x0x7fae644d9208) 0
+ primary-for QTreeWidget (0x0x7fae644d91a0)
+QAbstractItemView (0x0x7fae644d9270) 0
+ primary-for QTreeView (0x0x7fae644d9208)
+QAbstractScrollArea (0x0x7fae644d92d8) 0
+ primary-for QAbstractItemView (0x0x7fae644d9270)
+QFrame (0x0x7fae644d9340) 0
+ primary-for QAbstractScrollArea (0x0x7fae644d92d8)
+QWidget (0x0x7fae6455e930) 0
+ primary-for QFrame (0x0x7fae644d9340)
+QObject (0x0x7fae6455f7e0) 0
+ primary-for QWidget (0x0x7fae6455e930)
+QPaintDevice (0x0x7fae6455f840) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7fae6455fcc0) 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 (0x0x7fae644d93a8) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+QListView (0x0x7fae644d9410) 0
+ primary-for QUndoView (0x0x7fae644d93a8)
+QAbstractItemView (0x0x7fae644d9478) 0
+ primary-for QListView (0x0x7fae644d9410)
+QAbstractScrollArea (0x0x7fae644d94e0) 0
+ primary-for QAbstractItemView (0x0x7fae644d9478)
+QFrame (0x0x7fae644d9548) 0
+ primary-for QAbstractScrollArea (0x0x7fae644d94e0)
+QWidget (0x0x7fae6455ed20) 0
+ primary-for QFrame (0x0x7fae644d9548)
+QObject (0x0x7fae6455fc00) 0
+ primary-for QWidget (0x0x7fae6455ed20)
+QPaintDevice (0x0x7fae6455fc60) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7fae6455fe40) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7fae6455ff00) 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 (0x0x7fae644d95b0) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+QAction (0x0x7fae644d9618) 0
+ primary-for QWidgetAction (0x0x7fae644d95b0)
+QObject (0x0x7fae6455fea0) 0
+ primary-for QAction (0x0x7fae644d9618)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7fae645e7180) 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 (0x0x7fae644d9680) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+QDialog (0x0x7fae644d96e8) 0
+ primary-for QWizard (0x0x7fae644d9680)
+QWidget (0x0x7fae645e8070) 0
+ primary-for QDialog (0x0x7fae644d96e8)
+QObject (0x0x7fae645e70c0) 0
+ primary-for QWidget (0x0x7fae645e8070)
+QPaintDevice (0x0x7fae645e7120) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7fae645e7a80) 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 (0x0x7fae644d9820) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+QWidget (0x0x7fae641ef9a0) 0
+ primary-for QWizardPage (0x0x7fae644d9820)
+QObject (0x0x7fae645e79c0) 0
+ primary-for QWidget (0x0x7fae641ef9a0)
+QPaintDevice (0x0x7fae645e7a20) 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 (0x0x7fae645e7c00) 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 (0x0x7fae642c1420) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface) + 16)
+
+Class QDomImplementation
+ size=8 align=8
+ base size=8 base align=8
+QDomImplementation (0x0x7fae642c1a20) 0
+
+Class QDomNode
+ size=8 align=8
+ base size=8 base align=8
+QDomNode (0x0x7fae642c1a80) 0
+
+Class QDomNodeList
+ size=8 align=8
+ base size=8 base align=8
+QDomNodeList (0x0x7fae642c1ae0) 0
+
+Class QDomDocumentType
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentType (0x0x7fae642b76e8) 0
+QDomNode (0x0x7fae642c1cc0) 0
+
+Class QDomDocument
+ size=8 align=8
+ base size=8 base align=8
+QDomDocument (0x0x7fae642b7750) 0
+QDomNode (0x0x7fae642c1d80) 0
+
+Class QDomNamedNodeMap
+ size=8 align=8
+ base size=8 base align=8
+QDomNamedNodeMap (0x0x7fae642c1e40) 0
+
+Class QDomDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentFragment (0x0x7fae642b77b8) 0
+QDomNode (0x0x7fae64329000) 0
+
+Class QDomCharacterData
+ size=8 align=8
+ base size=8 base align=8
+QDomCharacterData (0x0x7fae642b7820) 0
+QDomNode (0x0x7fae643290c0) 0
+
+Class QDomAttr
+ size=8 align=8
+ base size=8 base align=8
+QDomAttr (0x0x7fae642b7888) 0
+QDomNode (0x0x7fae64329120) 0
+
+Class QDomElement
+ size=8 align=8
+ base size=8 base align=8
+QDomElement (0x0x7fae642b78f0) 0
+QDomNode (0x0x7fae643291e0) 0
+
+Class QDomText
+ size=8 align=8
+ base size=8 base align=8
+QDomText (0x0x7fae642b7958) 0
+QDomCharacterData (0x0x7fae642b79c0) 0
+QDomNode (0x0x7fae64329420) 0
+
+Class QDomComment
+ size=8 align=8
+ base size=8 base align=8
+QDomComment (0x0x7fae642b7a28) 0
+QDomCharacterData (0x0x7fae642b7a90) 0
+QDomNode (0x0x7fae643294e0) 0
+
+Class QDomCDATASection
+ size=8 align=8
+ base size=8 base align=8
+QDomCDATASection (0x0x7fae642b7af8) 0
+QDomText (0x0x7fae642b7b60) 0
+QDomCharacterData (0x0x7fae642b7bc8) 0
+QDomNode (0x0x7fae643295a0) 0
+
+Class QDomNotation
+ size=8 align=8
+ base size=8 base align=8
+QDomNotation (0x0x7fae642b7c30) 0
+QDomNode (0x0x7fae64329660) 0
+
+Class QDomEntity
+ size=8 align=8
+ base size=8 base align=8
+QDomEntity (0x0x7fae642b7c98) 0
+QDomNode (0x0x7fae64329720) 0
+
+Class QDomEntityReference
+ size=8 align=8
+ base size=8 base align=8
+QDomEntityReference (0x0x7fae642b7d00) 0
+QDomNode (0x0x7fae643297e0) 0
+
+Class QDomProcessingInstruction
+ size=8 align=8
+ base size=8 base align=8
+QDomProcessingInstruction (0x0x7fae642b7d68) 0
+QDomNode (0x0x7fae643298a0) 0
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7fae64329960) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7fae64329f60) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7fae6409a840) 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 (0x0x7fae6402f750) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+QObject (0x0x7fae6409a7e0) 0
+ primary-for QOpenGLDebugLogger (0x0x7fae6402f750)
+
+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 (0x0x7fae6409af60) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7fae6418e240) 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 (0x0x7fae6402f820) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+QPaintDevice (0x0x7fae6418e2a0) 0
+ primary-for QOpenGLPaintDevice (0x0x7fae6402f820)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7fae6418e4e0) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7fae63dfdde0) 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 (0x0x7fae63e11680) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+QObject (0x0x7fae63dfdd80) 0
+ primary-for QOpenGLShader (0x0x7fae63e11680)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7fae63e2d480) 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 (0x0x7fae63e117b8) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+QObject (0x0x7fae63e2d420) 0
+ primary-for QOpenGLShaderProgram (0x0x7fae63e117b8)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7fae63e2d600) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7fae63f4f8a0) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7fae63f4fae0) 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 (0x0x7fae63e118f0) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+QObject (0x0x7fae63f4fa80) 0
+ primary-for QOpenGLTimerQuery (0x0x7fae63e118f0)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7fae63f4fcc0) 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 (0x0x7fae63e11958) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+QObject (0x0x7fae63f4fc60) 0
+ primary-for QOpenGLTimeMonitor (0x0x7fae63e11958)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7fae63f4fe40) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7fae63c9bde0) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7fae63cc5000) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7fae63cc5060) 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 (0x0x7fae63cc5240) 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 (0x0x7fae63cc5420) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7fae63cac138) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63cc53c0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7fae63cc5780) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7fae63cac1a0) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63cc5720) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7fae63cc5ae0) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7fae63cac208) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63cc5a80) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7fae63cc5e40) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7fae63cac270) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63cc5de0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7fae63d051e0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7fae63cac2d8) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d05180) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7fae63d05540) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7fae63cac340) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d054e0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7fae63d058a0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7fae63cac3a8) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d05840) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7fae63d05c00) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7fae63cac410) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d05ba0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7fae63d05f60) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7fae63cac478) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d05f00) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7fae63d55300) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7fae63cac4e0) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d552a0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7fae63d55660) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7fae63cac548) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d55600) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7fae63d559c0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7fae63cac5b0) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d55960) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7fae63d55d20) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7fae63cac618) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d55cc0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7fae63d9e0c0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7fae63cac680) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d9e060) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7fae63d9e420) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7fae63cac6e8) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d9e3c0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7fae63d9e780) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7fae63cac750) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d9e720) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7fae63d9eae0) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7fae63cac7b8) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d9ea80) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7fae63d9ee40) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7fae63cac820) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63d9ede0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7fae63a1c1e0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7fae63cac888) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63a1c180) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7fae63a1c540) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7fae63cac8f0) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63a1c4e0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7fae63a1c8a0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7fae63cac958) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63a1c840) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7fae63a1cc00) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7fae63cac9c0) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63a1cba0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7fae63a1cf60) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7fae63caca28) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63a1cf00) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7fae63a9b300) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7fae63caca90) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63a9b2a0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7fae63a9b660) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7fae63cacaf8) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63a9b600) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7fae63a9b9c0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7fae63cacb60) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63a9b960) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7fae63a9bd20) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7fae63cacbc8) 0
+QOpenGLVersionFunctionsBackend (0x0x7fae63a9bcc0) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7fae63ad3060) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7fae63ad31e0) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7fae63ad3300) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7fae63ad3360) 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 (0x0x7fae63cacc30) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+QObject (0x0x7fae63ad32a0) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7fae63cacc30)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7fae63ad3a20) 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 (0x0x7fae63cacc98) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+QPaintDeviceWindow (0x0x7fae63ac59a0) 0
+ primary-for QOpenGLWindow (0x0x7fae63cacc98)
+QWindow (0x0x7fae63ac5a10) 0
+ primary-for QPaintDeviceWindow (0x0x7fae63ac59a0)
+QObject (0x0x7fae63ad3900) 0
+ primary-for QWindow (0x0x7fae63ac5a10)
+QSurface (0x0x7fae63ad3960) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+QPaintDevice (0x0x7fae63ad39c0) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7fae63ad3c60) 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 (0x0x7fae63cacd68) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+QWidget (0x0x7fae63ac5d20) 0
+ primary-for QOpenGLWidget (0x0x7fae63cacd68)
+QObject (0x0x7fae63ad3ba0) 0
+ primary-for QWidget (0x0x7fae63ac5d20)
+QPaintDevice (0x0x7fae63ad3c00) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QDesignerActionEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerActionEditorInterface::QPrivateSignal (0x0x7fae63ad3ea0) 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 (0x0x7fae63cace38) 0
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 16)
+QWidget (0x0x7fae63b27000) 0
+ primary-for QDesignerActionEditorInterface (0x0x7fae63cace38)
+QObject (0x0x7fae63ad3de0) 0
+ primary-for QWidget (0x0x7fae63b27000)
+QPaintDevice (0x0x7fae63ad3e40) 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 (0x0x7fae63ad3f60) 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 (0x0x7fae63b3e000) 0
+ vptr=((& QAbstractFormBuilder::_ZTV20QAbstractFormBuilder) + 16)
+
+Class QDesignerFormEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormEditorInterface::QPrivateSignal (0x0x7fae63b3e240) 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 (0x0x7fae63cacea0) 0
+ vptr=((& QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface) + 16)
+QObject (0x0x7fae63b3e1e0) 0
+ primary-for QDesignerFormEditorInterface (0x0x7fae63cacea0)
+
+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 (0x0x7fae63b3e360) 0 nearly-empty
+ vptr=((& QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface) + 16)
+
+Class QDesignerFormWindowInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowInterface::QPrivateSignal (0x0x7fae63b3e7e0) 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 (0x0x7fae63b9e000) 0
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 16)
+QWidget (0x0x7fae63b274d0) 0
+ primary-for QDesignerFormWindowInterface (0x0x7fae63b9e000)
+QObject (0x0x7fae63b3e720) 0
+ primary-for QWidget (0x0x7fae63b274d0)
+QPaintDevice (0x0x7fae63b3e780) 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 (0x0x7fae63b3e960) 0 nearly-empty
+ vptr=((& QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface) + 16)
+
+Class QDesignerFormWindowManagerInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowManagerInterface::QPrivateSignal (0x0x7fae63b3ea20) 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 (0x0x7fae63b9e068) 0
+ vptr=((& QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface) + 16)
+QObject (0x0x7fae63b3e9c0) 0
+ primary-for QDesignerFormWindowManagerInterface (0x0x7fae63b9e068)
+
+Class QDesignerFormWindowToolInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowToolInterface::QPrivateSignal (0x0x7fae63b3ed20) 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 (0x0x7fae63b9e0d0) 0
+ vptr=((& QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface) + 16)
+QObject (0x0x7fae63b3ecc0) 0
+ primary-for QDesignerFormWindowToolInterface (0x0x7fae63b9e0d0)
+
+Class QDesignerIntegrationInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegrationInterface::QPrivateSignal (0x0x7fae63b3ef00) 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 (0x0x7fae63b9e138) 0
+ vptr=((& QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface) + 16)
+QObject (0x0x7fae63b3eea0) 0
+ primary-for QDesignerIntegrationInterface (0x0x7fae63b9e138)
+
+Class QDesignerIntegration::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegration::QPrivateSignal (0x0x7fae63814180) 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 (0x0x7fae63b9e1a0) 0
+ vptr=((& QDesignerIntegration::_ZTV20QDesignerIntegration) + 16)
+QDesignerIntegrationInterface (0x0x7fae63b9e208) 0
+ primary-for QDesignerIntegration (0x0x7fae63b9e1a0)
+QObject (0x0x7fae63814120) 0
+ primary-for QDesignerIntegrationInterface (0x0x7fae63b9e208)
+
+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 (0x0x7fae638142a0) 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 (0x0x7fae63814840) 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 (0x0x7fae63814e40) 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 (0x0x7fae638572a0) 0 nearly-empty
+ vptr=((& QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface) + 16)
+
+Class QDesignerMetaDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerMetaDataBaseInterface::QPrivateSignal (0x0x7fae63857360) 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 (0x0x7fae63b9e4e0) 0
+ vptr=((& QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface) + 16)
+QObject (0x0x7fae63857300) 0
+ primary-for QDesignerMetaDataBaseInterface (0x0x7fae63b9e4e0)
+
+Class QDesignerNewFormWidgetInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerNewFormWidgetInterface::QPrivateSignal (0x0x7fae638574e0) 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 (0x0x7fae63b9e548) 0
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 16)
+QWidget (0x0x7fae638159a0) 0
+ primary-for QDesignerNewFormWidgetInterface (0x0x7fae63b9e548)
+QObject (0x0x7fae63857420) 0
+ primary-for QWidget (0x0x7fae638159a0)
+QPaintDevice (0x0x7fae63857480) 16
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 464)
+
+Class QDesignerObjectInspectorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerObjectInspectorInterface::QPrivateSignal (0x0x7fae63857660) 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 (0x0x7fae63b9e5b0) 0
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 16)
+QWidget (0x0x7fae63815a80) 0
+ primary-for QDesignerObjectInspectorInterface (0x0x7fae63b9e5b0)
+QObject (0x0x7fae638575a0) 0
+ primary-for QWidget (0x0x7fae63815a80)
+QPaintDevice (0x0x7fae63857600) 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 (0x0x7fae63857720) 0 nearly-empty
+ vptr=((& QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface) + 16)
+
+Class QDesignerPromotionInterface::PromotedClass
+ size=16 align=8
+ base size=16 base align=8
+QDesignerPromotionInterface::PromotedClass (0x0x7fae638577e0) 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 (0x0x7fae63857780) 0 nearly-empty
+ vptr=((& QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface) + 16)
+
+Class QDesignerPropertyEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerPropertyEditorInterface::QPrivateSignal (0x0x7fae63857900) 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 (0x0x7fae63b9e618) 0
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 16)
+QWidget (0x0x7fae63815b60) 0
+ primary-for QDesignerPropertyEditorInterface (0x0x7fae63b9e618)
+QObject (0x0x7fae63857840) 0
+ primary-for QWidget (0x0x7fae63815b60)
+QPaintDevice (0x0x7fae638578a0) 16
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 504)
+
+Class QDesignerResourceBrowserInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerResourceBrowserInterface::QPrivateSignal (0x0x7fae63857a80) 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 (0x0x7fae63b9e680) 0
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 16)
+QWidget (0x0x7fae63815c40) 0
+ primary-for QDesignerResourceBrowserInterface (0x0x7fae63b9e680)
+QObject (0x0x7fae638579c0) 0
+ primary-for QWidget (0x0x7fae63815c40)
+QPaintDevice (0x0x7fae63857a20) 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 (0x0x7fae63857b40) 0 nearly-empty
+ vptr=((& QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface) + 16)
+
+Class QDesignerWidgetBoxInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetBoxInterface::QPrivateSignal (0x0x7fae63857c60) 0 empty
+
+Class QDesignerWidgetBoxInterface::Widget
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetBoxInterface::Widget (0x0x7fae63857cc0) 0
+
+Class QDesignerWidgetBoxInterface::Category
+ size=56 align=8
+ base size=56 base align=8
+QDesignerWidgetBoxInterface::Category (0x0x7fae63857d80) 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 (0x0x7fae63b9e6e8) 0
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 16)
+QWidget (0x0x7fae63815d20) 0
+ primary-for QDesignerWidgetBoxInterface (0x0x7fae63b9e6e8)
+QObject (0x0x7fae63857ba0) 0
+ primary-for QWidget (0x0x7fae63815d20)
+QPaintDevice (0x0x7fae63857c00) 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 (0x0x7fae639a9120) 0 nearly-empty
+ vptr=((& QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface) + 16)
+
+Class QDesignerWidgetDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetDataBaseInterface::QPrivateSignal (0x0x7fae639a9240) 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 (0x0x7fae639a12d8) 0
+ vptr=((& QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface) + 16)
+QObject (0x0x7fae639a91e0) 0
+ primary-for QDesignerWidgetDataBaseInterface (0x0x7fae639a12d8)
+
+Class QDesignerWidgetFactoryInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetFactoryInterface::QPrivateSignal (0x0x7fae639a9ae0) 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 (0x0x7fae639a1958) 0
+ vptr=((& QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface) + 16)
+QObject (0x0x7fae639a9a80) 0
+ primary-for QDesignerWidgetFactoryInterface (0x0x7fae639a1958)
+
+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 (0x0x7fae639a9ba0) 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 (0x0x7fae639a9960) 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 (0x0x7fae6364c420) 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 (0x0x7fae639a1c30) 0
+ vptr=((& QFormBuilder::_ZTV12QFormBuilder) + 16)
+QAbstractFormBuilder (0x0x7fae6364c840) 0
+ primary-for QFormBuilder (0x0x7fae639a1c30)
+
+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 (0x0x7fae6364c8a0) 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 (0x0x7fae6364ccc0) 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 (0x0x7fae6369c120) 0 nearly-empty
+ vptr=((& QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension) + 16)
+
+Class QExtensionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QExtensionManager::QPrivateSignal (0x0x7fae6369c600) 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 (0x0x7fae636b3000) 0
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 16)
+QObject (0x0x7fae6369c540) 0
+ primary-for QExtensionManager (0x0x7fae636b3000)
+QAbstractExtensionManager (0x0x7fae6369c5a0) 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 (0x0x7fae6369cf60) 0 nearly-empty
+ vptr=((& QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension) + 16)
+
+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 (0x0x7fae6374f840) 0 nearly-empty
+ vptr=((& QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase) + 16)
+
+Class QSqlDatabase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDatabase (0x0x7fae6374fb40) 0
+
+Class QSqlDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriver::QPrivateSignal (0x0x7fae6374fc00) 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 (0x0x7fae636ea6e8) 0
+ vptr=((& QSqlDriver::_ZTV10QSqlDriver) + 16)
+QObject (0x0x7fae6374fba0) 0
+ primary-for QSqlDriver (0x0x7fae636ea6e8)
+
+Class QSqlDriverPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriverPlugin::QPrivateSignal (0x0x7fae6374fde0) 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 (0x0x7fae636ea750) 0
+ vptr=((& QSqlDriverPlugin::_ZTV16QSqlDriverPlugin) + 16)
+QObject (0x0x7fae6374fd80) 0
+ primary-for QSqlDriverPlugin (0x0x7fae636ea750)
+
+Class QSqlError
+ size=8 align=8
+ base size=8 base align=8
+QSqlError (0x0x7fae6374fea0) 0
+
+Class QSqlField
+ size=40 align=8
+ base size=40 base align=8
+QSqlField (0x0x7fae63426ba0) 0
+
+Class QSqlRecord
+ size=8 align=8
+ base size=8 base align=8
+QSqlRecord (0x0x7fae63426f60) 0
+
+Class QSqlIndex
+ size=80 align=8
+ base size=80 base align=8
+QSqlIndex (0x0x7fae63435820) 0
+QSqlRecord (0x0x7fae63460060) 0
+
+Class QSqlQuery
+ size=8 align=8
+ base size=8 base align=8
+QSqlQuery (0x0x7fae63460540) 0
+
+Class QSqlQueryModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlQueryModel::QPrivateSignal (0x0x7fae63460900) 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 (0x0x7fae63435af8) 0
+ vptr=((& QSqlQueryModel::_ZTV14QSqlQueryModel) + 16)
+QAbstractTableModel (0x0x7fae63435b60) 0
+ primary-for QSqlQueryModel (0x0x7fae63435af8)
+QAbstractItemModel (0x0x7fae63435bc8) 0
+ primary-for QAbstractTableModel (0x0x7fae63435b60)
+QObject (0x0x7fae634608a0) 0
+ primary-for QAbstractItemModel (0x0x7fae63435bc8)
+
+Class QSqlTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlTableModel::QPrivateSignal (0x0x7fae63460ae0) 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 (0x0x7fae63435c30) 0
+ vptr=((& QSqlTableModel::_ZTV14QSqlTableModel) + 16)
+QSqlQueryModel (0x0x7fae63435c98) 0
+ primary-for QSqlTableModel (0x0x7fae63435c30)
+QAbstractTableModel (0x0x7fae63435d00) 0
+ primary-for QSqlQueryModel (0x0x7fae63435c98)
+QAbstractItemModel (0x0x7fae63435d68) 0
+ primary-for QAbstractTableModel (0x0x7fae63435d00)
+QObject (0x0x7fae63460a80) 0
+ primary-for QAbstractItemModel (0x0x7fae63435d68)
+
+Class QSqlRelation
+ size=72 align=8
+ base size=72 base align=8
+QSqlRelation (0x0x7fae63460c60) 0
+
+Class QSqlRelationalTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlRelationalTableModel::QPrivateSignal (0x0x7fae63549ba0) 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 (0x0x7fae63547ea0) 0
+ vptr=((& QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel) + 16)
+QSqlTableModel (0x0x7fae63547f08) 0
+ primary-for QSqlRelationalTableModel (0x0x7fae63547ea0)
+QSqlQueryModel (0x0x7fae63547f70) 0
+ primary-for QSqlTableModel (0x0x7fae63547f08)
+QAbstractTableModel (0x0x7fae6355f000) 0
+ primary-for QSqlQueryModel (0x0x7fae63547f70)
+QAbstractItemModel (0x0x7fae6355f068) 0
+ primary-for QAbstractTableModel (0x0x7fae6355f000)
+QObject (0x0x7fae63549b40) 0
+ primary-for QAbstractItemModel (0x0x7fae6355f068)
+
+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 (0x0x7fae63549d20) 0
+ vptr=((& QSqlResult::_ZTV10QSqlResult) + 16)
+
+Class QHelpGlobal
+ size=1 align=1
+ base size=0 base align=1
+QHelpGlobal (0x0x7fae63549e40) 0 empty
+
+Class QCompressedHelpInfo
+ size=8 align=8
+ base size=8 base align=8
+QCompressedHelpInfo (0x0x7fae63549ea0) 0
+
+Class QHelpContentItem
+ size=8 align=8
+ base size=8 base align=8
+QHelpContentItem (0x0x7fae635aa000) 0
+
+Class QHelpContentModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentModel::QPrivateSignal (0x0x7fae635aa0c0) 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 (0x0x7fae6355f0d0) 0
+ vptr=((& QHelpContentModel::_ZTV17QHelpContentModel) + 16)
+QAbstractItemModel (0x0x7fae6355f138) 0
+ primary-for QHelpContentModel (0x0x7fae6355f0d0)
+QObject (0x0x7fae635aa060) 0
+ primary-for QAbstractItemModel (0x0x7fae6355f138)
+
+Class QHelpContentWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentWidget::QPrivateSignal (0x0x7fae635aa240) 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 (0x0x7fae6355f1a0) 0
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 16)
+QTreeView (0x0x7fae6355f208) 0
+ primary-for QHelpContentWidget (0x0x7fae6355f1a0)
+QAbstractItemView (0x0x7fae6355f270) 0
+ primary-for QTreeView (0x0x7fae6355f208)
+QAbstractScrollArea (0x0x7fae6355f2d8) 0
+ primary-for QAbstractItemView (0x0x7fae6355f270)
+QFrame (0x0x7fae6355f340) 0
+ primary-for QAbstractScrollArea (0x0x7fae6355f2d8)
+QWidget (0x0x7fae63524a80) 0
+ primary-for QFrame (0x0x7fae6355f340)
+QObject (0x0x7fae635aa180) 0
+ primary-for QWidget (0x0x7fae63524a80)
+QPaintDevice (0x0x7fae635aa1e0) 16
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 816)
+
+Class QHelpEngineCore::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngineCore::QPrivateSignal (0x0x7fae635aa360) 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 (0x0x7fae6355f3a8) 0
+ vptr=((& QHelpEngineCore::_ZTV15QHelpEngineCore) + 16)
+QObject (0x0x7fae635aa300) 0
+ primary-for QHelpEngineCore (0x0x7fae6355f3a8)
+
+Class QHelpEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngine::QPrivateSignal (0x0x7fae635aa480) 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 (0x0x7fae6355f410) 0
+ vptr=((& QHelpEngine::_ZTV11QHelpEngine) + 16)
+QHelpEngineCore (0x0x7fae6355f478) 0
+ primary-for QHelpEngine (0x0x7fae6355f410)
+QObject (0x0x7fae635aa420) 0
+ primary-for QHelpEngineCore (0x0x7fae6355f478)
+
+Class QHelpFilterData
+ size=8 align=8
+ base size=8 base align=8
+QHelpFilterData (0x0x7fae635aa540) 0
+
+Class QHelpFilterEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterEngine::QPrivateSignal (0x0x7fae635aa6c0) 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 (0x0x7fae6355f4e0) 0
+ vptr=((& QHelpFilterEngine::_ZTV17QHelpFilterEngine) + 16)
+QObject (0x0x7fae635aa660) 0
+ primary-for QHelpFilterEngine (0x0x7fae6355f4e0)
+
+Class QHelpFilterSettingsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterSettingsWidget::QPrivateSignal (0x0x7fae635aa840) 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 (0x0x7fae6355f548) 0
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 16)
+QWidget (0x0x7fae63524d20) 0
+ primary-for QHelpFilterSettingsWidget (0x0x7fae6355f548)
+QObject (0x0x7fae635aa780) 0
+ primary-for QWidget (0x0x7fae63524d20)
+QPaintDevice (0x0x7fae635aa7e0) 16
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 448)
+
+Class QHelpIndexModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexModel::QPrivateSignal (0x0x7fae635aaae0) 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 (0x0x7fae6355f5b0) 0
+ vptr=((& QHelpIndexModel::_ZTV15QHelpIndexModel) + 16)
+QStringListModel (0x0x7fae6355f618) 0
+ primary-for QHelpIndexModel (0x0x7fae6355f5b0)
+QAbstractListModel (0x0x7fae6355f680) 0
+ primary-for QStringListModel (0x0x7fae6355f618)
+QAbstractItemModel (0x0x7fae6355f6e8) 0
+ primary-for QAbstractListModel (0x0x7fae6355f680)
+QObject (0x0x7fae635aaa80) 0
+ primary-for QAbstractItemModel (0x0x7fae6355f6e8)
+
+Class QHelpIndexWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexWidget::QPrivateSignal (0x0x7fae635aac60) 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 (0x0x7fae6355f750) 0
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 16)
+QListView (0x0x7fae6355f7b8) 0
+ primary-for QHelpIndexWidget (0x0x7fae6355f750)
+QAbstractItemView (0x0x7fae6355f820) 0
+ primary-for QListView (0x0x7fae6355f7b8)
+QAbstractScrollArea (0x0x7fae6355f888) 0
+ primary-for QAbstractItemView (0x0x7fae6355f820)
+QFrame (0x0x7fae6355f8f0) 0
+ primary-for QAbstractScrollArea (0x0x7fae6355f888)
+QWidget (0x0x7fae63524f50) 0
+ primary-for QFrame (0x0x7fae6355f8f0)
+QObject (0x0x7fae635aaba0) 0
+ primary-for QWidget (0x0x7fae63524f50)
+QPaintDevice (0x0x7fae635aac00) 16
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 800)
+
+Class QHelpLink
+ size=32 align=8
+ base size=32 base align=8
+QHelpLink (0x0x7fae635aad20) 0
+
+Class QHelpSearchQuery
+ size=32 align=8
+ base size=32 base align=8
+QHelpSearchQuery (0x0x7fae635aad80) 0
+
+Class QHelpSearchResult
+ size=8 align=8
+ base size=8 base align=8
+QHelpSearchResult (0x0x7fae6324a2a0) 0
+
+Class QHelpSearchEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchEngine::QPrivateSignal (0x0x7fae6324a3c0) 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 (0x0x7fae6355f958) 0
+ vptr=((& QHelpSearchEngine::_ZTV17QHelpSearchEngine) + 16)
+QObject (0x0x7fae6324a360) 0
+ primary-for QHelpSearchEngine (0x0x7fae6355f958)
+
+Class QHelpSearchQueryWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchQueryWidget::QPrivateSignal (0x0x7fae6324a540) 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 (0x0x7fae6355f9c0) 0
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 16)
+QWidget (0x0x7fae63245770) 0
+ primary-for QHelpSearchQueryWidget (0x0x7fae6355f9c0)
+QObject (0x0x7fae6324a480) 0
+ primary-for QWidget (0x0x7fae63245770)
+QPaintDevice (0x0x7fae6324a4e0) 16
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 448)
+
+Class QHelpSearchResultWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchResultWidget::QPrivateSignal (0x0x7fae6324a6c0) 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 (0x0x7fae6355fa28) 0
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 16)
+QWidget (0x0x7fae63245850) 0
+ primary-for QHelpSearchResultWidget (0x0x7fae6355fa28)
+QObject (0x0x7fae6324a600) 0
+ primary-for QWidget (0x0x7fae63245850)
+QPaintDevice (0x0x7fae6324a660) 16
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 448)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7fae6324a780) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7fae633101e0) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7fae6339cae0) 0 empty
+
+Vtable for QAbstractNetworkCache
+QAbstractNetworkCache::_ZTV21QAbstractNetworkCache: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractNetworkCache)
+16 (int (*)(...))QAbstractNetworkCache::metaObject
+24 (int (*)(...))QAbstractNetworkCache::qt_metacast
+32 (int (*)(...))QAbstractNetworkCache::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
+
+Class QAbstractNetworkCache
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNetworkCache (0x0x7fae633ac410) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+QObject (0x0x7fae6339ca80) 0
+ primary-for QAbstractNetworkCache (0x0x7fae633ac410)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7fae6339cd20) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSocket)
+16 (int (*)(...))QAbstractSocket::metaObject
+24 (int (*)(...))QAbstractSocket::qt_metacast
+32 (int (*)(...))QAbstractSocket::qt_metacall
+40 (int (*)(...))QAbstractSocket::~QAbstractSocket
+48 (int (*)(...))QAbstractSocket::~QAbstractSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7fae633ac478) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+QIODevice (0x0x7fae6337b770) 0
+ primary-for QAbstractSocket (0x0x7fae633ac478)
+QObject (0x0x7fae6339cc60) 0
+ primary-for QIODevice (0x0x7fae6337b770)
+QIODeviceBase (0x0x7fae6339ccc0) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7fae631210c0) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7fae63121180) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7fae63166ae0) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7fae631c4480) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7fae62e06de0) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7fae62e63d20) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7fae62eb1ea0) 0 empty
+
+Vtable for QDnsLookup
+QDnsLookup::_ZTV10QDnsLookup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDnsLookup)
+16 (int (*)(...))QDnsLookup::metaObject
+24 (int (*)(...))QDnsLookup::qt_metacast
+32 (int (*)(...))QDnsLookup::qt_metacall
+40 (int (*)(...))QDnsLookup::~QDnsLookup
+48 (int (*)(...))QDnsLookup::~QDnsLookup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDnsLookup
+ size=16 align=8
+ base size=16 base align=8
+QDnsLookup (0x0x7fae62ec38f0) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+QObject (0x0x7fae62eb1e40) 0
+ primary-for QDnsLookup (0x0x7fae62ec38f0)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7fae62ee51e0) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7fae62ee5300) 0
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7fae62fac540) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpSocket)
+16 (int (*)(...))QTcpSocket::metaObject
+24 (int (*)(...))QTcpSocket::qt_metacast
+32 (int (*)(...))QTcpSocket::qt_metacall
+40 (int (*)(...))QTcpSocket::~QTcpSocket
+48 (int (*)(...))QTcpSocket::~QTcpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7fae62fa8b60) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+QAbstractSocket (0x0x7fae62fa8bc8) 0
+ primary-for QTcpSocket (0x0x7fae62fa8b60)
+QIODevice (0x0x7fae62f33930) 0
+ primary-for QAbstractSocket (0x0x7fae62fa8bc8)
+QObject (0x0x7fae62fac480) 0
+ primary-for QIODevice (0x0x7fae62f33930)
+QIODeviceBase (0x0x7fae62fac4e0) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7fae62facba0) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7fae62ca4180) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7fae62a64960) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslSocket)
+16 (int (*)(...))QSslSocket::metaObject
+24 (int (*)(...))QSslSocket::qt_metacast
+32 (int (*)(...))QSslSocket::qt_metacall
+40 (int (*)(...))QSslSocket::~QSslSocket
+48 (int (*)(...))QSslSocket::~QSslSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QSslSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QSslSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QSslSocket::bytesAvailable
+184 (int (*)(...))QSslSocket::bytesToWrite
+192 (int (*)(...))QSslSocket::canReadLine
+200 (int (*)(...))QSslSocket::waitForReadyRead
+208 (int (*)(...))QSslSocket::waitForBytesWritten
+216 (int (*)(...))QSslSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QSslSocket::skipData
+240 (int (*)(...))QSslSocket::writeData
+248 (int (*)(...))QSslSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QSslSocket::connectToHost
+272 (int (*)(...))QSslSocket::disconnectFromHost
+280 (int (*)(...))QSslSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QSslSocket::setSocketDescriptor
+304 (int (*)(...))QSslSocket::setSocketOption
+312 (int (*)(...))QSslSocket::socketOption
+320 (int (*)(...))QSslSocket::waitForConnected
+328 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7fae62a629c0) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+QTcpSocket (0x0x7fae62a62a28) 0
+ primary-for QSslSocket (0x0x7fae62a629c0)
+QAbstractSocket (0x0x7fae62a62a90) 0
+ primary-for QTcpSocket (0x0x7fae62a62a28)
+QIODevice (0x0x7fae62a535b0) 0
+ primary-for QAbstractSocket (0x0x7fae62a62a90)
+QObject (0x0x7fae62a648a0) 0
+ primary-for QIODevice (0x0x7fae62a535b0)
+QIODeviceBase (0x0x7fae62a64900) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7fae62a64b40) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7fae62a64ba0) 0
+
+Vtable for QDtlsClientVerifier
+QDtlsClientVerifier::_ZTV19QDtlsClientVerifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDtlsClientVerifier)
+16 (int (*)(...))QDtlsClientVerifier::metaObject
+24 (int (*)(...))QDtlsClientVerifier::qt_metacast
+32 (int (*)(...))QDtlsClientVerifier::qt_metacall
+40 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+48 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtlsClientVerifier
+ size=16 align=8
+ base size=16 base align=8
+QDtlsClientVerifier (0x0x7fae62a62af8) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+QObject (0x0x7fae62a64ae0) 0
+ primary-for QDtlsClientVerifier (0x0x7fae62a62af8)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7fae62a64d80) 0 empty
+
+Vtable for QDtls
+QDtls::_ZTV5QDtls: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDtls)
+16 (int (*)(...))QDtls::metaObject
+24 (int (*)(...))QDtls::qt_metacast
+32 (int (*)(...))QDtls::qt_metacall
+40 (int (*)(...))QDtls::~QDtls
+48 (int (*)(...))QDtls::~QDtls
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtls
+ size=16 align=8
+ base size=16 base align=8
+QDtls (0x0x7fae62a62b60) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+QObject (0x0x7fae62a64d20) 0
+ primary-for QDtls (0x0x7fae62a62b60)
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7fae62a64f00) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7fae62b514e0) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7fae62bbc540) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7fae62857f60) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7fae628b7c00) 0 empty
+
+Vtable for QHttpMultiPart
+QHttpMultiPart::_ZTV14QHttpMultiPart: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QHttpMultiPart)
+16 (int (*)(...))QHttpMultiPart::metaObject
+24 (int (*)(...))QHttpMultiPart::qt_metacast
+32 (int (*)(...))QHttpMultiPart::qt_metacall
+40 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+48 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHttpMultiPart
+ size=16 align=8
+ base size=16 base align=8
+QHttpMultiPart (0x0x7fae628c1a90) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+QObject (0x0x7fae628b7ba0) 0
+ primary-for QHttpMultiPart (0x0x7fae628c1a90)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7fae628b7de0) 0 empty
+
+Vtable for QLocalServer
+QLocalServer::_ZTV12QLocalServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalServer)
+16 (int (*)(...))QLocalServer::metaObject
+24 (int (*)(...))QLocalServer::qt_metacast
+32 (int (*)(...))QLocalServer::qt_metacall
+40 (int (*)(...))QLocalServer::~QLocalServer
+48 (int (*)(...))QLocalServer::~QLocalServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalServer::hasPendingConnections
+120 (int (*)(...))QLocalServer::nextPendingConnection
+128 (int (*)(...))QLocalServer::incomingConnection
+
+Class QLocalServer
+ size=16 align=8
+ base size=16 base align=8
+QLocalServer (0x0x7fae628c1af8) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+QObject (0x0x7fae628b7d80) 0
+ primary-for QLocalServer (0x0x7fae628c1af8)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7fae628f1660) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalSocket)
+16 (int (*)(...))QLocalSocket::metaObject
+24 (int (*)(...))QLocalSocket::qt_metacast
+32 (int (*)(...))QLocalSocket::qt_metacall
+40 (int (*)(...))QLocalSocket::~QLocalSocket
+48 (int (*)(...))QLocalSocket::~QLocalSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalSocket::isSequential
+120 (int (*)(...))QLocalSocket::open
+128 (int (*)(...))QLocalSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QLocalSocket::bytesAvailable
+184 (int (*)(...))QLocalSocket::bytesToWrite
+192 (int (*)(...))QLocalSocket::canReadLine
+200 (int (*)(...))QLocalSocket::waitForReadyRead
+208 (int (*)(...))QLocalSocket::waitForBytesWritten
+216 (int (*)(...))QLocalSocket::readData
+224 (int (*)(...))QLocalSocket::readLineData
+232 (int (*)(...))QLocalSocket::skipData
+240 (int (*)(...))QLocalSocket::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7fae628c1c30) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+QIODevice (0x0x7fae628e17e0) 0
+ primary-for QLocalSocket (0x0x7fae628c1c30)
+QObject (0x0x7fae628f15a0) 0
+ primary-for QIODevice (0x0x7fae628e17e0)
+QIODeviceBase (0x0x7fae628f1600) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7fae628f1d20) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7fae6266b840) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7fae626dcd20) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QNetworkAccessManager)
+16 (int (*)(...))QNetworkAccessManager::metaObject
+24 (int (*)(...))QNetworkAccessManager::qt_metacast
+32 (int (*)(...))QNetworkAccessManager::qt_metacall
+40 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+48 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkAccessManager::supportedSchemes
+120 (int (*)(...))QNetworkAccessManager::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7fae626c4d68) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+QObject (0x0x7fae626dccc0) 0
+ primary-for QNetworkAccessManager (0x0x7fae626c4d68)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7fae626dcea0) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7fae6278d660) 0 empty
+
+Vtable for QNetworkCookieJar
+QNetworkCookieJar::_ZTV17QNetworkCookieJar: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkCookieJar)
+16 (int (*)(...))QNetworkCookieJar::metaObject
+24 (int (*)(...))QNetworkCookieJar::qt_metacast
+32 (int (*)(...))QNetworkCookieJar::qt_metacall
+40 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+48 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkCookieJar::cookiesForUrl
+120 (int (*)(...))QNetworkCookieJar::setCookiesFromUrl
+128 (int (*)(...))QNetworkCookieJar::insertCookie
+136 (int (*)(...))QNetworkCookieJar::updateCookie
+144 (int (*)(...))QNetworkCookieJar::deleteCookie
+152 (int (*)(...))QNetworkCookieJar::validateCookie
+
+Class QNetworkCookieJar
+ size=16 align=8
+ base size=16 base align=8
+QNetworkCookieJar (0x0x7fae6277bf70) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+QObject (0x0x7fae6278d600) 0
+ primary-for QNetworkCookieJar (0x0x7fae6277bf70)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7fae6278d7e0) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7fae6240f120) 0 empty
+
+Vtable for QNetworkDiskCache
+QNetworkDiskCache::_ZTV17QNetworkDiskCache: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkDiskCache)
+16 (int (*)(...))QNetworkDiskCache::metaObject
+24 (int (*)(...))QNetworkDiskCache::qt_metacast
+32 (int (*)(...))QNetworkDiskCache::qt_metacall
+40 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+48 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkDiskCache::metaData
+120 (int (*)(...))QNetworkDiskCache::updateMetaData
+128 (int (*)(...))QNetworkDiskCache::data
+136 (int (*)(...))QNetworkDiskCache::remove
+144 (int (*)(...))QNetworkDiskCache::cacheSize
+152 (int (*)(...))QNetworkDiskCache::prepare
+160 (int (*)(...))QNetworkDiskCache::insert
+168 (int (*)(...))QNetworkDiskCache::clear
+176 (int (*)(...))QNetworkDiskCache::expire
+
+Class QNetworkDiskCache
+ size=16 align=8
+ base size=16 base align=8
+QNetworkDiskCache (0x0x7fae623fd138) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+QAbstractNetworkCache (0x0x7fae623fd1a0) 0
+ primary-for QNetworkDiskCache (0x0x7fae623fd138)
+QObject (0x0x7fae6240f0c0) 0
+ primary-for QAbstractNetworkCache (0x0x7fae623fd1a0)
+
+Class QNetworkInformation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkInformation::QPrivateSignal (0x0x7fae6240f300) 0 empty
+
+Vtable for QNetworkInformation
+QNetworkInformation::_ZTV19QNetworkInformation: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNetworkInformation)
+16 (int (*)(...))QNetworkInformation::metaObject
+24 (int (*)(...))QNetworkInformation::qt_metacast
+32 (int (*)(...))QNetworkInformation::qt_metacall
+40 (int (*)(...))QNetworkInformation::~QNetworkInformation
+48 (int (*)(...))QNetworkInformation::~QNetworkInformation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkInformation
+ size=16 align=8
+ base size=16 base align=8
+QNetworkInformation (0x0x7fae623fd208) 0
+ vptr=((& QNetworkInformation::_ZTV19QNetworkInformation) + 16)
+QObject (0x0x7fae6240f2a0) 0
+ primary-for QNetworkInformation (0x0x7fae623fd208)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7fae6240fb40) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7fae6224a960) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7fae62368480) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7fae623b0f00) 0
+
+Vtable for QNetworkProxyFactory
+QNetworkProxyFactory::_ZTV20QNetworkProxyFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QNetworkProxyFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNetworkProxyFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyFactory (0x0x7fae6201df60) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7fae620a25a0) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QNetworkReply)
+16 (int (*)(...))QNetworkReply::metaObject
+24 (int (*)(...))QNetworkReply::qt_metacast
+32 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::writeData
+248 (int (*)(...))QNetworkReply::setReadBufferSize
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QNetworkReply::ignoreSslErrors
+272 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+288 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7fae6202b750) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+QIODevice (0x0x7fae62076380) 0
+ primary-for QNetworkReply (0x0x7fae6202b750)
+QObject (0x0x7fae620a24e0) 0
+ primary-for QIODevice (0x0x7fae62076380)
+QIODeviceBase (0x0x7fae620a2540) 0 empty
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7fae620fd840) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7fae62166960) 0 empty
+
+Vtable for QTcpServer
+QTcpServer::_ZTV10QTcpServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpServer)
+16 (int (*)(...))QTcpServer::metaObject
+24 (int (*)(...))QTcpServer::qt_metacast
+32 (int (*)(...))QTcpServer::qt_metacall
+40 (int (*)(...))QTcpServer::~QTcpServer
+48 (int (*)(...))QTcpServer::~QTcpServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QTcpServer::incomingConnection
+
+Class QTcpServer
+ size=16 align=8
+ base size=16 base align=8
+QTcpServer (0x0x7fae62158f70) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+QObject (0x0x7fae62166900) 0
+ primary-for QTcpServer (0x0x7fae62158f70)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7fae62166ae0) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7fae621df3c0) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7fae61f9b4e0) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7fae61fcbf60) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7fae61c385a0) 0
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7fae61ca2240) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUdpSocket)
+16 (int (*)(...))QUdpSocket::metaObject
+24 (int (*)(...))QUdpSocket::qt_metacast
+32 (int (*)(...))QUdpSocket::qt_metacall
+40 (int (*)(...))QUdpSocket::~QUdpSocket
+48 (int (*)(...))QUdpSocket::~QUdpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7fae61c95e38) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+QAbstractSocket (0x0x7fae61c95ea0) 0
+ primary-for QUdpSocket (0x0x7fae61c95e38)
+QIODevice (0x0x7fae61bfbe70) 0
+ primary-for QAbstractSocket (0x0x7fae61c95ea0)
+QObject (0x0x7fae61ca2180) 0
+ primary-for QIODevice (0x0x7fae61bfbe70)
+QIODeviceBase (0x0x7fae61ca21e0) 0 empty
+
+Class QAbstractPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractPrintDialog::QPrivateSignal (0x0x7fae61ca2540) 0 empty
+
+Vtable for QAbstractPrintDialog
+QAbstractPrintDialog::_ZTV20QAbstractPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAbstractPrintDialog)
+16 (int (*)(...))QAbstractPrintDialog::metaObject
+24 (int (*)(...))QAbstractPrintDialog::qt_metacast
+32 (int (*)(...))QAbstractPrintDialog::qt_metacall
+40 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+48 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+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 (*)(...))(& _ZTI20QAbstractPrintDialog)
+488 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD1Ev
+496 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD0Ev
+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 QAbstractPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QAbstractPrintDialog (0x0x7fae61c95f08) 0
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 16)
+QDialog (0x0x7fae61c95f70) 0
+ primary-for QAbstractPrintDialog (0x0x7fae61c95f08)
+QWidget (0x0x7fae61cbb150) 0
+ primary-for QDialog (0x0x7fae61c95f70)
+QObject (0x0x7fae61ca2480) 0
+ primary-for QWidget (0x0x7fae61cbb150)
+QPaintDevice (0x0x7fae61ca24e0) 16
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 488)
+
+Class QPageSetupDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPageSetupDialog::QPrivateSignal (0x0x7fae61ca2d80) 0 empty
+
+Vtable for QPageSetupDialog
+QPageSetupDialog::_ZTV16QPageSetupDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QPageSetupDialog)
+16 (int (*)(...))QPageSetupDialog::metaObject
+24 (int (*)(...))QPageSetupDialog::qt_metacast
+32 (int (*)(...))QPageSetupDialog::qt_metacall
+40 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+48 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+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 (*)(...))QPageSetupDialog::exec
+448 (int (*)(...))QPageSetupDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI16QPageSetupDialog)
+488 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD1Ev
+496 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD0Ev
+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 QPageSetupDialog
+ size=40 align=8
+ base size=40 base align=8
+QPageSetupDialog (0x0x7fae61cd40d0) 0
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 16)
+QDialog (0x0x7fae61cd4138) 0
+ primary-for QPageSetupDialog (0x0x7fae61cd40d0)
+QWidget (0x0x7fae61cbbc40) 0
+ primary-for QDialog (0x0x7fae61cd4138)
+QObject (0x0x7fae61ca2cc0) 0
+ primary-for QWidget (0x0x7fae61cbbc40)
+QPaintDevice (0x0x7fae61ca2d20) 16
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 488)
+
+Class QPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintDialog::QPrivateSignal (0x0x7fae61d4d000) 0 empty
+
+Vtable for QPrintDialog
+QPrintDialog::_ZTV12QPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintDialog)
+16 (int (*)(...))QPrintDialog::metaObject
+24 (int (*)(...))QPrintDialog::qt_metacast
+32 (int (*)(...))QPrintDialog::qt_metacall
+40 (int (*)(...))QPrintDialog::~QPrintDialog
+48 (int (*)(...))QPrintDialog::~QPrintDialog
+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 (*)(...))QPrintDialog::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 (*)(...))QPrintDialog::exec
+448 (int (*)(...))QPrintDialog::done
+456 (int (*)(...))QPrintDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QPrintDialog)
+488 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD1Ev
+496 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD0Ev
+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 QPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintDialog (0x0x7fae61cd41a0) 0
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 16)
+QAbstractPrintDialog (0x0x7fae61cd4208) 0
+ primary-for QPrintDialog (0x0x7fae61cd41a0)
+QDialog (0x0x7fae61cd4270) 0
+ primary-for QAbstractPrintDialog (0x0x7fae61cd4208)
+QWidget (0x0x7fae61cbbe00) 0
+ primary-for QDialog (0x0x7fae61cd4270)
+QObject (0x0x7fae61ca2f00) 0
+ primary-for QWidget (0x0x7fae61cbbe00)
+QPaintDevice (0x0x7fae61ca2f60) 16
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 488)
+
+Vtable for QPrinter
+QPrinter::_ZTV8QPrinter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPrinter)
+16 (int (*)(...))QPrinter::~QPrinter
+24 (int (*)(...))QPrinter::~QPrinter
+32 (int (*)(...))QPrinter::devType
+40 (int (*)(...))QPrinter::paintEngine
+48 (int (*)(...))QPrinter::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPrinter::newPage
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPrinter
+ size=32 align=8
+ base size=32 base align=8
+QPrinter (0x0x7fae61cd42d8) 0
+ vptr=((& QPrinter::_ZTV8QPrinter) + 16)
+QPagedPaintDevice (0x0x7fae61cd4340) 0
+ primary-for QPrinter (0x0x7fae61cd42d8)
+QPaintDevice (0x0x7fae61d4d180) 0
+ primary-for QPagedPaintDevice (0x0x7fae61cd4340)
+
+Vtable for QPrintEngine
+QPrintEngine::_ZTV12QPrintEngine: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintEngine)
+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 QPrintEngine
+ size=8 align=8
+ base size=8 base align=8
+QPrintEngine (0x0x7fae61d4d7e0) 0 nearly-empty
+ vptr=((& QPrintEngine::_ZTV12QPrintEngine) + 16)
+
+Class QPrinterInfo
+ size=8 align=8
+ base size=8 base align=8
+QPrinterInfo (0x0x7fae61d4da20) 0
+
+Class QPrintPreviewDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewDialog::QPrivateSignal (0x0x7fae61d4dc60) 0 empty
+
+Vtable for QPrintPreviewDialog
+QPrintPreviewDialog::_ZTV19QPrintPreviewDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+16 (int (*)(...))QPrintPreviewDialog::metaObject
+24 (int (*)(...))QPrintPreviewDialog::qt_metacast
+32 (int (*)(...))QPrintPreviewDialog::qt_metacall
+40 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+48 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+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 (*)(...))QPrintPreviewDialog::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 (*)(...))QPrintPreviewDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+488 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD1Ev
+496 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD0Ev
+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 QPrintPreviewDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewDialog (0x0x7fae61cd4410) 0
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 16)
+QDialog (0x0x7fae61cd4478) 0
+ primary-for QPrintPreviewDialog (0x0x7fae61cd4410)
+QWidget (0x0x7fae61d99700) 0
+ primary-for QDialog (0x0x7fae61cd4478)
+QObject (0x0x7fae61d4dba0) 0
+ primary-for QWidget (0x0x7fae61d99700)
+QPaintDevice (0x0x7fae61d4dc00) 16
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 488)
+
+Class QPrintPreviewWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewWidget::QPrivateSignal (0x0x7fae61d4dea0) 0 empty
+
+Vtable for QPrintPreviewWidget
+QPrintPreviewWidget::_ZTV19QPrintPreviewWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewWidget)
+16 (int (*)(...))QPrintPreviewWidget::metaObject
+24 (int (*)(...))QPrintPreviewWidget::qt_metacast
+32 (int (*)(...))QPrintPreviewWidget::qt_metacall
+40 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+48 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+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 (*)(...))QPrintPreviewWidget::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 (*)(...))(& _ZTI19QPrintPreviewWidget)
+448 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD1Ev
+456 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD0Ev
+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 QPrintPreviewWidget
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewWidget (0x0x7fae61cd44e0) 0
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 16)
+QWidget (0x0x7fae61d998c0) 0
+ primary-for QPrintPreviewWidget (0x0x7fae61cd44e0)
+QObject (0x0x7fae61d4dde0) 0
+ primary-for QWidget (0x0x7fae61d998c0)
+QPaintDevice (0x0x7fae61d4de40) 16
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 448)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7fae61de3060) 0
+
+Class QJSNumberCoercion
+ size=8 align=8
+ base size=8 base align=8
+QJSNumberCoercion (0x0x7fae61a75420) 0
+
+Class QJSPrimitiveUndefined
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveUndefined (0x0x7fae61a75a20) 0 empty
+
+Class QJSPrimitiveNull
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveNull (0x0x7fae61a75a80) 0 empty
+
+Class QJSPrimitiveValue::AddOperators
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveValue::AddOperators (0x0x7fae61a75ba0) 0 empty
+
+Class QJSPrimitiveValue::SubOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::SubOperators (0x0x7fae61cd4bc8) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::SubOperators> (0x0x7fae61a75c60) 0 empty
+
+Class QJSPrimitiveValue::MulOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::MulOperators (0x0x7fae61cd4c30) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::MulOperators> (0x0x7fae61a75d20) 0 empty
+
+Class QJSPrimitiveValue::DivOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::DivOperators (0x0x7fae61cd4c98) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::DivOperators> (0x0x7fae61a75de0) 0 empty
+
+Class QJSPrimitiveValue::QJSPrimitiveValuePrivate
+ size=32 align=8
+ base size=25 base align=8
+QJSPrimitiveValue::QJSPrimitiveValuePrivate (0x0x7fae61a75e40) 0
+
+Class QJSPrimitiveValue
+ size=32 align=8
+ base size=32 base align=8
+QJSPrimitiveValue (0x0x7fae61a75ae0) 0
+
+Class QJSManagedValue
+ size=8 align=8
+ base size=8 base align=8
+QJSManagedValue (0x0x7fae73f9ba80) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7fae6c88bd20) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7fae6eaeaea0) 0 empty
+
+Vtable for QJSEngine
+QJSEngine::_ZTV9QJSEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QJSEngine)
+16 (int (*)(...))QJSEngine::metaObject
+24 (int (*)(...))QJSEngine::qt_metacast
+32 (int (*)(...))QJSEngine::qt_metacall
+40 (int (*)(...))QJSEngine::~QJSEngine
+48 (int (*)(...))QJSEngine::~QJSEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QJSEngine
+ size=24 align=8
+ base size=24 base align=8
+QJSEngine (0x0x7fae63435680) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+QObject (0x0x7fae6eaeae40) 0
+ primary-for QJSEngine (0x0x7fae63435680)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7fae72205f00) 0
+
+Vtable for QQmlParserStatus
+QQmlParserStatus::_ZTV16QQmlParserStatus: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlParserStatus)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlParserStatus
+ size=16 align=8
+ base size=16 base align=8
+QQmlParserStatus (0x0x7fae71d25780) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7fae71158e40) 0
+
+Vtable for QQmlPropertyValueSource
+QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQmlPropertyValueSource)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlPropertyValueSource
+ size=8 align=8
+ base size=8 base align=8
+QQmlPropertyValueSource (0x0x7fae703b44e0) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=176 align=8
+ base size=176 base align=8
+QQmlPrivate::RegisterType (0x0x7fae6b49ac60) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=160 align=8
+ base size=157 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7fae6b49e180) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7fae6b49e1e0) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7fae6b4d55a0) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7fae6b4d5600) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7fae78152a80) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7fae78152cc0) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7fae78152d20) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7fae78152d80) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7fae78152f60) 0
+
+Class QQmlPrivate::AOTCompiledContext
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::AOTCompiledContext (0x0x7fae78166000) 0
+
+Class QQmlPrivate::AOTCompiledFunction
+ size=48 align=8
+ base size=48 base align=8
+QQmlPrivate::AOTCompiledFunction (0x0x7fae78166060) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7fae77f53a80) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7fae77f53ae0) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7fae77f618a0) 0
+
+Class QQmlPrivate::SingletonInstanceFunctor
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::SingletonInstanceFunctor (0x0x7fae77f61900) 0
+
+Vtable for QQmlAbstractUrlInterceptor
+QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QQmlAbstractUrlInterceptor)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlAbstractUrlInterceptor
+ size=8 align=8
+ base size=8 base align=8
+QQmlAbstractUrlInterceptor (0x0x7fae692a0c00) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7fae692b9240) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7fae68af58a0) 0 empty
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 (int (*)(...))QQmlImageProviderBase::metaObject
+24 (int (*)(...))QQmlImageProviderBase::qt_metacast
+32 (int (*)(...))QQmlImageProviderBase::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 QQmlImageProviderBase
+ size=16 align=8
+ base size=16 base align=8
+QQmlImageProviderBase (0x0x7fae73a23b60) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+QObject (0x0x7fae68af5420) 0
+ primary-for QQmlImageProviderBase (0x0x7fae73a23b60)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7fae68b9a780) 0 empty
+
+Vtable for QQmlEngine
+QQmlEngine::_ZTV10QQmlEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQmlEngine)
+16 (int (*)(...))QQmlEngine::metaObject
+24 (int (*)(...))QQmlEngine::qt_metacast
+32 (int (*)(...))QQmlEngine::qt_metacall
+40 (int (*)(...))QQmlEngine::~QQmlEngine
+48 (int (*)(...))QQmlEngine::~QQmlEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngine (0x0x7fae73a1f410) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+QJSEngine (0x0x7fae73a1f4e0) 0
+ primary-for QQmlEngine (0x0x7fae73a1f410)
+QObject (0x0x7fae68b9a720) 0
+ primary-for QJSEngine (0x0x7fae73a1f4e0)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7fae68bad3c0) 0 empty
+
+Vtable for QQmlApplicationEngine
+QQmlApplicationEngine::_ZTV21QQmlApplicationEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlApplicationEngine)
+16 (int (*)(...))QQmlApplicationEngine::metaObject
+24 (int (*)(...))QQmlApplicationEngine::qt_metacast
+32 (int (*)(...))QQmlApplicationEngine::qt_metacall
+40 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+48 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlApplicationEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlApplicationEngine (0x0x7fae73a1f680) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+QQmlEngine (0x0x7fae73a1ea28) 0
+ primary-for QQmlApplicationEngine (0x0x7fae73a1f680)
+QJSEngine (0x0x7fae73a1ea90) 0
+ primary-for QQmlEngine (0x0x7fae73a1ea28)
+QObject (0x0x7fae68bad300) 0
+ primary-for QJSEngine (0x0x7fae73a1ea90)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7fae68bceb40) 0 empty
+
+Vtable for QQmlComponent
+QQmlComponent::_ZTV13QQmlComponent: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlComponent)
+16 (int (*)(...))QQmlComponent::metaObject
+24 (int (*)(...))QQmlComponent::qt_metacast
+32 (int (*)(...))QQmlComponent::qt_metacall
+40 (int (*)(...))QQmlComponent::~QQmlComponent
+48 (int (*)(...))QQmlComponent::~QQmlComponent
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlComponent::create
+120 (int (*)(...))QQmlComponent::beginCreate
+128 (int (*)(...))QQmlComponent::completeCreate
+
+Class QQmlComponent
+ size=16 align=8
+ base size=16 base align=8
+QQmlComponent (0x0x7fae73a1ed00) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+QObject (0x0x7fae68bceae0) 0
+ primary-for QQmlComponent (0x0x7fae73a1ed00)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7fae68830e40) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7fae68830f00) 0
+
+Vtable for QQmlContext
+QQmlContext::_ZTV11QQmlContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QQmlContext)
+16 (int (*)(...))QQmlContext::metaObject
+24 (int (*)(...))QQmlContext::qt_metacast
+32 (int (*)(...))QQmlContext::qt_metacall
+40 (int (*)(...))QQmlContext::~QQmlContext
+48 (int (*)(...))QQmlContext::~QQmlContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlContext
+ size=16 align=8
+ base size=16 base align=8
+QQmlContext (0x0x7fae73a14af8) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+QObject (0x0x7fae68830de0) 0
+ primary-for QQmlContext (0x0x7fae73a14af8)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7fae6888a420) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7fae688a0600) 0 empty
+
+Vtable for QQmlExpression
+QQmlExpression::_ZTV14QQmlExpression: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QQmlExpression)
+16 (int (*)(...))QQmlExpression::metaObject
+24 (int (*)(...))QQmlExpression::qt_metacast
+32 (int (*)(...))QQmlExpression::qt_metacall
+40 (int (*)(...))QQmlExpression::~QQmlExpression
+48 (int (*)(...))QQmlExpression::~QQmlExpression
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlExpression
+ size=16 align=8
+ base size=16 base align=8
+QQmlExpression (0x0x7fae739fe208) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+QObject (0x0x7fae688a0540) 0
+ primary-for QQmlExpression (0x0x7fae739fe208)
+
+Vtable for QQmlTypesExtensionInterface
+QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QQmlTypesExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlTypesExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlTypesExtensionInterface (0x0x7fae688bdd20) 0 nearly-empty
+ vptr=((& QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface) + 16)
+
+Vtable for QQmlExtensionInterface
+QQmlExtensionInterface::_ZTV22QQmlExtensionInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QQmlExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlExtensionInterface (0x0x7fae739fe2d8) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+QQmlTypesExtensionInterface (0x0x7fae688bdde0) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7fae739fe2d8)
+
+Vtable for QQmlEngineExtensionInterface
+QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QQmlEngineExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlEngineExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlEngineExtensionInterface (0x0x7fae688bdea0) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7fae686d39c0) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+16 (int (*)(...))QQmlExtensionPlugin::metaObject
+24 (int (*)(...))QQmlExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlExtensionPlugin::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 (*)(...))QQmlExtensionPlugin::unregisterTypes
+128 (int (*)(...))QQmlExtensionPlugin::initializeEngine
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+152 0
+160 0
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7fae77f21c40) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+QObject (0x0x7fae686d38a0) 0
+ primary-for QQmlExtensionPlugin (0x0x7fae77f21c40)
+QQmlExtensionInterface (0x0x7fae7399cea0) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+QQmlTypesExtensionInterface (0x0x7fae686d3900) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7fae7399cea0)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7fae68720600) 0 empty
+
+Vtable for QQmlEngineExtensionPlugin
+QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+16 (int (*)(...))QQmlEngineExtensionPlugin::metaObject
+24 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacall
+40 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+48 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlEngineExtensionPlugin::initializeEngine
+120 (int (*)(...))-16
+128 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+136 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD1Ev
+144 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD0Ev
+152 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlEngineExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngineExtensionPlugin (0x0x7fae77f21f50) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+QObject (0x0x7fae68720480) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7fae77f21f50)
+QQmlEngineExtensionInterface (0x0x7fae687204e0) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7fae68720a20) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7fae6873b240) 0 empty
+
+Vtable for QQmlFileSelector
+QQmlFileSelector::_ZTV16QQmlFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlFileSelector)
+16 (int (*)(...))QQmlFileSelector::metaObject
+24 (int (*)(...))QQmlFileSelector::qt_metacast
+32 (int (*)(...))QQmlFileSelector::qt_metacall
+40 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+48 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QQmlFileSelector (0x0x7fae73d58548) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+QObject (0x0x7fae68720a80) 0
+ primary-for QQmlFileSelector (0x0x7fae73d58548)
+
+Vtable for QQmlIncubator
+QQmlIncubator::_ZTV13QQmlIncubator: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlIncubator)
+16 (int (*)(...))QQmlIncubator::~QQmlIncubator
+24 (int (*)(...))QQmlIncubator::~QQmlIncubator
+32 (int (*)(...))QQmlIncubator::statusChanged
+40 (int (*)(...))QQmlIncubator::setInitialState
+
+Class QQmlIncubator
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubator (0x0x7fae685da300) 0
+ vptr=((& QQmlIncubator::_ZTV13QQmlIncubator) + 16)
+
+Vtable for QQmlIncubationController
+QQmlIncubationController::_ZTV24QQmlIncubationController: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQmlIncubationController)
+16 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+24 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+32 (int (*)(...))QQmlIncubationController::incubatingObjectCountChanged
+
+Class QQmlIncubationController
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubationController (0x0x7fae685da360) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7fae73d58618) 0
+QDebug (0x0x7fae73d324e0) 0
+QIODeviceBase (0x0x7fae685da7e0) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7fae66c58000) 0
+
+Vtable for QQmlNetworkAccessManagerFactory
+QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QQmlNetworkAccessManagerFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlNetworkAccessManagerFactory
+ size=8 align=8
+ base size=8 base align=8
+QQmlNetworkAccessManagerFactory (0x0x7fae66c58540) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7fae66c585a0) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7fae632c5900) 0 empty
+
+Vtable for QQmlPropertyMap
+QQmlPropertyMap::_ZTV15QQmlPropertyMap: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQmlPropertyMap)
+16 (int (*)(...))QQmlPropertyMap::metaObject
+24 (int (*)(...))QQmlPropertyMap::qt_metacast
+32 (int (*)(...))QQmlPropertyMap::qt_metacall
+40 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+48 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlPropertyMap::updateValue
+
+Class QQmlPropertyMap
+ size=16 align=8
+ base size=16 base align=8
+QQmlPropertyMap (0x0x7fae68c86478) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+QObject (0x0x7fae632c5840) 0
+ primary-for QQmlPropertyMap (0x0x7fae68c86478)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7fae632e23c0) 0 empty
+
+Vtable for QQuickTransform
+QQuickTransform::_ZTV15QQuickTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQuickTransform)
+16 (int (*)(...))QQuickTransform::metaObject
+24 (int (*)(...))QQuickTransform::qt_metacast
+32 (int (*)(...))QQuickTransform::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 QQuickTransform
+ size=16 align=8
+ base size=16 base align=8
+QQuickTransform (0x0x7fae68c86820) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+QObject (0x0x7fae632e2300) 0
+ primary-for QQuickTransform (0x0x7fae68c86820)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7fae6339c780) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7fae63166780) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7fae631667e0) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickItem)
+16 (int (*)(...))QQuickItem::metaObject
+24 (int (*)(...))QQuickItem::qt_metacast
+32 (int (*)(...))QQuickItem::qt_metacall
+40 (int (*)(...))QQuickItem::~QQuickItem
+48 (int (*)(...))QQuickItem::~QQuickItem
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickItem::isTextureProvider
+152 (int (*)(...))QQuickItem::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickItem::updatePaintNode
+368 (int (*)(...))QQuickItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))-16
+392 (int (*)(...))(& _ZTI10QQuickItem)
+400 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7fae77a7c5b0) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+QObject (0x0x7fae63310f60) 0
+ primary-for QQuickItem (0x0x7fae77a7c5b0)
+QQmlParserStatus (0x0x7fae6339c720) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 400)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7fae62857c00) 0 empty
+
+Vtable for QQuickFramebufferObject::Renderer
+QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN23QQuickFramebufferObject8RendererE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QQuickFramebufferObject::Renderer::createFramebufferObject
+48 (int (*)(...))QQuickFramebufferObject::Renderer::synchronize
+
+Class QQuickFramebufferObject::Renderer
+ size=16 align=8
+ base size=16 base align=8
+QQuickFramebufferObject::Renderer (0x0x7fae62857c60) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+16 (int (*)(...))QQuickFramebufferObject::metaObject
+24 (int (*)(...))QQuickFramebufferObject::qt_metacast
+32 (int (*)(...))QQuickFramebufferObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickFramebufferObject::isTextureProvider
+152 (int (*)(...))QQuickFramebufferObject::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickFramebufferObject::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+368 (int (*)(...))QQuickFramebufferObject::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7fae688570d0) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+QQuickItem (0x0x7fae698f78c0) 0
+ primary-for QQuickFramebufferObject (0x0x7fae688570d0)
+QObject (0x0x7fae62857480) 0
+ primary-for QQuickItem (0x0x7fae698f78c0)
+QQmlParserStatus (0x0x7fae628574e0) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 408)
+
+Class QQuickGraphicsConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsConfiguration (0x0x7fae6287d960) 0
+
+Class QQuickGraphicsDevice
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsDevice (0x0x7fae6287df60) 0
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7fae628b7540) 0 empty
+
+Vtable for QQuickTextureFactory
+QQuickTextureFactory::_ZTV20QQuickTextureFactory: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickTextureFactory)
+16 (int (*)(...))QQuickTextureFactory::metaObject
+24 (int (*)(...))QQuickTextureFactory::qt_metacast
+32 (int (*)(...))QQuickTextureFactory::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 (*)(...))QQuickTextureFactory::image
+
+Class QQuickTextureFactory
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextureFactory (0x0x7fae68857208) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+QObject (0x0x7fae628b7000) 0
+ primary-for QQuickTextureFactory (0x0x7fae68857208)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7fae62633d20) 0 empty
+
+Vtable for QQuickImageResponse
+QQuickImageResponse::_ZTV19QQuickImageResponse: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageResponse)
+16 (int (*)(...))QQuickImageResponse::metaObject
+24 (int (*)(...))QQuickImageResponse::qt_metacast
+32 (int (*)(...))QQuickImageResponse::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 (*)(...))QQuickImageResponse::errorString
+128 (int (*)(...))QQuickImageResponse::cancel
+
+Class QQuickImageResponse
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageResponse (0x0x7fae68857270) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+QObject (0x0x7fae62633cc0) 0
+ primary-for QQuickImageResponse (0x0x7fae68857270)
+
+Class QQuickImageProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageProvider::QPrivateSignal (0x0x7fae6264b060) 0 empty
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::qt_metacall
+40 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+48 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickImageProvider (0x0x7fae6886e340) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+QQmlImageProviderBase (0x0x7fae6886e3a8) 0
+ primary-for QQuickImageProvider (0x0x7fae6886e340)
+QObject (0x0x7fae62633f60) 0
+ primary-for QQmlImageProviderBase (0x0x7fae6886e3a8)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::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 (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=32 align=8
+ base size=32 base align=8
+QQuickAsyncImageProvider (0x0x7fae68899000) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+QQuickImageProvider (0x0x7fae68899068) 0
+ primary-for QQuickAsyncImageProvider (0x0x7fae68899000)
+QQmlImageProviderBase (0x0x7fae68899208) 0
+ primary-for QQuickImageProvider (0x0x7fae68899068)
+QObject (0x0x7fae6264b180) 0
+ primary-for QQmlImageProviderBase (0x0x7fae68899208)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7fae6264b720) 0 empty
+
+Vtable for QQuickItemGrabResult
+QQuickItemGrabResult::_ZTV20QQuickItemGrabResult: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickItemGrabResult)
+16 (int (*)(...))QQuickItemGrabResult::metaObject
+24 (int (*)(...))QQuickItemGrabResult::qt_metacast
+32 (int (*)(...))QQuickItemGrabResult::qt_metacall
+40 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+48 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+56 (int (*)(...))QQuickItemGrabResult::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickItemGrabResult
+ size=16 align=8
+ base size=16 base align=8
+QQuickItemGrabResult (0x0x7fae68899340) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+QObject (0x0x7fae6264b1e0) 0
+ primary-for QQuickItemGrabResult (0x0x7fae68899340)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7fae6264bf60) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+16 (int (*)(...))QQuickPaintedItem::metaObject
+24 (int (*)(...))QQuickPaintedItem::qt_metacast
+32 (int (*)(...))QQuickPaintedItem::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickPaintedItem::isTextureProvider
+152 (int (*)(...))QQuickPaintedItem::textureProvider
+160 (int (*)(...))QQuickPaintedItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickPaintedItem::updatePaintNode
+368 (int (*)(...))QQuickPaintedItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7fae688993a8) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+QQuickItem (0x0x7fae69630770) 0
+ primary-for QQuickPaintedItem (0x0x7fae688993a8)
+QObject (0x0x7fae6264bde0) 0
+ primary-for QQuickItem (0x0x7fae69630770)
+QQmlParserStatus (0x0x7fae6264bea0) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 408)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7fae62771c60) 0 empty
+
+Vtable for QQuickRenderControl
+QQuickRenderControl::_ZTV19QQuickRenderControl: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickRenderControl)
+16 (int (*)(...))QQuickRenderControl::metaObject
+24 (int (*)(...))QQuickRenderControl::qt_metacast
+32 (int (*)(...))QQuickRenderControl::qt_metacall
+40 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+48 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickRenderControl::renderWindow
+
+Class QQuickRenderControl
+ size=16 align=8
+ base size=16 base align=8
+QQuickRenderControl (0x0x7fae688d61a0) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+QObject (0x0x7fae62771ba0) 0
+ primary-for QQuickRenderControl (0x0x7fae688d61a0)
+
+Class QQuickRenderTarget
+ size=8 align=8
+ base size=8 base align=8
+QQuickRenderTarget (0x0x7fae627d0660) 0
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7fae627d0840) 0 empty
+
+Vtable for QQuickTextDocument
+QQuickTextDocument::_ZTV18QQuickTextDocument: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QQuickTextDocument)
+16 (int (*)(...))QQuickTextDocument::metaObject
+24 (int (*)(...))QQuickTextDocument::qt_metacast
+32 (int (*)(...))QQuickTextDocument::qt_metacall
+40 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+48 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextDocument (0x0x7fae688d6208) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+QObject (0x0x7fae627d07e0) 0
+ primary-for QQuickTextDocument (0x0x7fae688d6208)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7fae6229ea80) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7fae622bd000) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7fae622bd060) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7fae622bd5a0) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7fae622bd600) 0
+
+Vtable for QSGGeometry
+QSGGeometry::_ZTV11QSGGeometry: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGGeometry)
+16 (int (*)(...))QSGGeometry::~QSGGeometry
+24 (int (*)(...))QSGGeometry::~QSGGeometry
+
+Class QSGGeometry
+ size=128 align=8
+ base size=128 base align=8
+QSGGeometry (0x0x7fae6229ea20) 0
+ vptr=((& QSGGeometry::_ZTV11QSGGeometry) + 16)
+
+Vtable for QSGNode
+QSGNode::_ZTV7QSGNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSGNode)
+16 (int (*)(...))QSGNode::~QSGNode
+24 (int (*)(...))QSGNode::~QSGNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGNode
+ size=72 align=8
+ base size=72 base align=8
+QSGNode (0x0x7fae61f7a240) 0
+ vptr=((& QSGNode::_ZTV7QSGNode) + 16)
+
+Vtable for QSGBasicGeometryNode
+QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGBasicGeometryNode)
+16 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+24 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGBasicGeometryNode
+ size=104 align=8
+ base size=104 base align=8
+QSGBasicGeometryNode (0x0x7fae688eadd0) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+QSGNode (0x0x7fae61c16cc0) 0
+ primary-for QSGBasicGeometryNode (0x0x7fae688eadd0)
+
+Vtable for QSGGeometryNode
+QSGGeometryNode::_ZTV15QSGGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSGGeometryNode)
+16 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+24 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGGeometryNode
+ size=136 align=8
+ base size=136 base align=8
+QSGGeometryNode (0x0x7fae688eae38) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+QSGBasicGeometryNode (0x0x7fae688eaea0) 0
+ primary-for QSGGeometryNode (0x0x7fae688eae38)
+QSGNode (0x0x7fae61c7eae0) 0
+ primary-for QSGBasicGeometryNode (0x0x7fae688eaea0)
+
+Vtable for QSGClipNode
+QSGClipNode::_ZTV11QSGClipNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGClipNode)
+16 (int (*)(...))QSGClipNode::~QSGClipNode
+24 (int (*)(...))QSGClipNode::~QSGClipNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGClipNode
+ size=144 align=8
+ base size=144 base align=8
+QSGClipNode (0x0x7fae6891b138) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+QSGBasicGeometryNode (0x0x7fae6891b1a0) 0
+ primary-for QSGClipNode (0x0x7fae6891b138)
+QSGNode (0x0x7fae61b22300) 0
+ primary-for QSGBasicGeometryNode (0x0x7fae6891b1a0)
+
+Vtable for QSGTransformNode
+QSGTransformNode::_ZTV16QSGTransformNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGTransformNode)
+16 (int (*)(...))QSGTransformNode::~QSGTransformNode
+24 (int (*)(...))QSGTransformNode::~QSGTransformNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGTransformNode
+ size=208 align=8
+ base size=208 base align=8
+QSGTransformNode (0x0x7fae6891b478) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+QSGNode (0x0x7fae61b224e0) 0
+ primary-for QSGTransformNode (0x0x7fae6891b478)
+
+Vtable for QSGRootNode
+QSGRootNode::_ZTV11QSGRootNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGRootNode)
+16 (int (*)(...))QSGRootNode::~QSGRootNode
+24 (int (*)(...))QSGRootNode::~QSGRootNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGRootNode
+ size=96 align=8
+ base size=96 base align=8
+QSGRootNode (0x0x7fae6891b4e0) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+QSGNode (0x0x7fae61b22660) 0
+ primary-for QSGRootNode (0x0x7fae6891b4e0)
+
+Vtable for QSGOpacityNode
+QSGOpacityNode::_ZTV14QSGOpacityNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGOpacityNode)
+16 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+24 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+32 (int (*)(...))QSGOpacityNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGOpacityNode
+ size=88 align=8
+ base size=88 base align=8
+QSGOpacityNode (0x0x7fae6898d138) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+QSGNode (0x0x7fae61b68c60) 0
+ primary-for QSGOpacityNode (0x0x7fae6898d138)
+
+Vtable for QSGNodeVisitor
+QSGNodeVisitor::_ZTV14QSGNodeVisitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGNodeVisitor)
+16 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+24 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+32 (int (*)(...))QSGNodeVisitor::enterTransformNode
+40 (int (*)(...))QSGNodeVisitor::leaveTransformNode
+48 (int (*)(...))QSGNodeVisitor::enterClipNode
+56 (int (*)(...))QSGNodeVisitor::leaveClipNode
+64 (int (*)(...))QSGNodeVisitor::enterGeometryNode
+72 (int (*)(...))QSGNodeVisitor::leaveGeometryNode
+80 (int (*)(...))QSGNodeVisitor::enterOpacityNode
+88 (int (*)(...))QSGNodeVisitor::leaveOpacityNode
+96 (int (*)(...))QSGNodeVisitor::visitNode
+104 (int (*)(...))QSGNodeVisitor::visitChildren
+
+Class QSGNodeVisitor
+ size=8 align=8
+ base size=8 base align=8
+QSGNodeVisitor (0x0x7fae61b68d80) 0 nearly-empty
+ vptr=((& QSGNodeVisitor::_ZTV14QSGNodeVisitor) + 16)
+
+Vtable for QSGRendererInterface
+QSGRendererInterface::_ZTV20QSGRendererInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGRendererInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QSGRendererInterface::getResource
+48 (int (*)(...))QSGRendererInterface::getResource
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRendererInterface
+ size=8 align=8
+ base size=8 base align=8
+QSGRendererInterface (0x0x7fae66046600) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7fae65ca1060) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7fae65ca10c0) 0
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QQuickWindow)
+16 (int (*)(...))QQuickWindow::metaObject
+24 (int (*)(...))QQuickWindow::qt_metacast
+32 (int (*)(...))QQuickWindow::qt_metacall
+40 (int (*)(...))QQuickWindow::~QQuickWindow
+48 (int (*)(...))QQuickWindow::~QQuickWindow
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickWindow::keyPressEvent
+232 (int (*)(...))QQuickWindow::keyReleaseEvent
+240 (int (*)(...))QQuickWindow::mousePressEvent
+248 (int (*)(...))QQuickWindow::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickWindow::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI12QQuickWindow)
+328 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+336 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7fae686d61a0) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+QWindow (0x0x7fae685d33f0) 0
+ primary-for QQuickWindow (0x0x7fae686d61a0)
+QObject (0x0x7fae66046f60) 0
+ primary-for QWindow (0x0x7fae685d33f0)
+QSurface (0x0x7fae65ca1000) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 328)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7fae655574e0) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickView)
+16 (int (*)(...))QQuickView::metaObject
+24 (int (*)(...))QQuickView::qt_metacast
+32 (int (*)(...))QQuickView::qt_metacall
+40 (int (*)(...))QQuickView::~QQuickView
+48 (int (*)(...))QQuickView::~QQuickView
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QQuickView::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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickView::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickView::keyPressEvent
+232 (int (*)(...))QQuickView::keyReleaseEvent
+240 (int (*)(...))QQuickView::mousePressEvent
+248 (int (*)(...))QQuickView::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickView::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI10QQuickView)
+328 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+336 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7fae67c4b8f0) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+QQuickWindow (0x0x7fae67c4b958) 0
+ primary-for QQuickView (0x0x7fae67c4b8f0)
+QWindow (0x0x7fae68021e00) 0
+ primary-for QQuickWindow (0x0x7fae67c4b958)
+QObject (0x0x7fae65557420) 0
+ primary-for QWindow (0x0x7fae68021e00)
+QSurface (0x0x7fae65557480) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 328)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7fae655577e0) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7fae655578a0) 0
+
+Class QSGMaterialShader::GraphicsPipelineState
+ size=36 align=4
+ base size=36 base align=4
+QSGMaterialShader::GraphicsPipelineState (0x0x7fae65557ae0) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+24 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+32 (int (*)(...))QSGMaterialShader::updateUniformData
+40 (int (*)(...))QSGMaterialShader::updateSampledImage
+48 (int (*)(...))QSGMaterialShader::updateGraphicsPipelineState
+
+Class QSGMaterialShader
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader (0x0x7fae65557840) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16)
+
+Vtable for QSGMaterial
+QSGMaterial::_ZTV11QSGMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGMaterial)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QSGMaterial::compare
+
+Class QSGMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGMaterial (0x0x7fae64a92ae0) 0
+ vptr=((& QSGMaterial::_ZTV11QSGMaterial) + 16)
+
+Vtable for QSGFlatColorMaterial
+QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGFlatColorMaterial)
+16 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+24 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+32 (int (*)(...))QSGFlatColorMaterial::type
+40 (int (*)(...))QSGFlatColorMaterial::createShader
+48 (int (*)(...))QSGFlatColorMaterial::compare
+
+Class QSGFlatColorMaterial
+ size=40 align=8
+ base size=40 base align=8
+QSGFlatColorMaterial (0x0x7fae677063a8) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+QSGMaterial (0x0x7fae643e2060) 0
+ primary-for QSGFlatColorMaterial (0x0x7fae677063a8)
+
+Class QNativeInterface::QSGOpenGLTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGOpenGLTexture::TypeInfo (0x0x7fae643e2180) 0 empty
+
+Vtable for QNativeInterface::QSGOpenGLTexture
+QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGOpenGLTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGOpenGLTexture (0x0x7fae643e2120) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE) + 16)
+
+Class QNativeInterface::QSGVulkanTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGVulkanTexture::TypeInfo (0x0x7fae643e22a0) 0 empty
+
+Vtable for QNativeInterface::QSGVulkanTexture
+QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGVulkanTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGVulkanTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGVulkanTexture (0x0x7fae643e2240) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE) + 16)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7fae643e23c0) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSGTexture)
+16 (int (*)(...))QSGTexture::metaObject
+24 (int (*)(...))QSGTexture::qt_metacast
+32 (int (*)(...))QSGTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7fae67706478) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+QObject (0x0x7fae643e2360) 0
+ primary-for QSGTexture (0x0x7fae67706478)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7fae643e2660) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGDynamicTexture)
+16 (int (*)(...))QSGDynamicTexture::metaObject
+24 (int (*)(...))QSGDynamicTexture::qt_metacast
+32 (int (*)(...))QSGDynamicTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7fae67706618) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+QSGTexture (0x0x7fae67706680) 0
+ primary-for QSGDynamicTexture (0x0x7fae67706618)
+QObject (0x0x7fae643e2600) 0
+ primary-for QSGTexture (0x0x7fae67706680)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSGImageNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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
+
+Class QSGImageNode
+ size=136 align=8
+ base size=136 base align=8
+QSGImageNode (0x0x7fae675c3340) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+QSGGeometryNode (0x0x7fae675c33a8) 0
+ primary-for QSGImageNode (0x0x7fae675c3340)
+QSGBasicGeometryNode (0x0x7fae675e4410) 0
+ primary-for QSGGeometryNode (0x0x7fae675c33a8)
+QSGNode (0x0x7fae643e2720) 0
+ primary-for QSGBasicGeometryNode (0x0x7fae675e4410)
+
+Vtable for QSGNinePatchNode
+QSGNinePatchNode::_ZTV16QSGNinePatchNode: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGNinePatchNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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 QSGNinePatchNode
+ size=136 align=8
+ base size=136 base align=8
+QSGNinePatchNode (0x0x7fae675e4888) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+QSGGeometryNode (0x0x7fae675e48f0) 0
+ primary-for QSGNinePatchNode (0x0x7fae675e4888)
+QSGBasicGeometryNode (0x0x7fae675e4c98) 0
+ primary-for QSGGeometryNode (0x0x7fae675e48f0)
+QSGNode (0x0x7fae643e2cc0) 0
+ primary-for QSGBasicGeometryNode (0x0x7fae675e4c98)
+
+Vtable for QSGRectangleNode
+QSGRectangleNode::_ZTV16QSGRectangleNode: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGRectangleNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRectangleNode
+ size=136 align=8
+ base size=136 base align=8
+QSGRectangleNode (0x0x7fae675e4d00) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+QSGGeometryNode (0x0x7fae67262680) 0
+ primary-for QSGRectangleNode (0x0x7fae675e4d00)
+QSGBasicGeometryNode (0x0x7fae672626e8) 0
+ primary-for QSGGeometryNode (0x0x7fae67262680)
+QSGNode (0x0x7fae643e2d20) 0
+ primary-for QSGBasicGeometryNode (0x0x7fae672626e8)
+
+Vtable for QSGRenderNode::RenderState
+QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QSGRenderNode11RenderStateE)
+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 (*)(...))QSGRenderNode::RenderState::get
+
+Class QSGRenderNode::RenderState
+ size=8 align=8
+ base size=8 base align=8
+QSGRenderNode::RenderState (0x0x7fae643e2e40) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSGRenderNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))QSGRenderNode::changedStates
+56 (int (*)(...))QSGRenderNode::prepare
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QSGRenderNode::releaseResources
+80 (int (*)(...))QSGRenderNode::flags
+88 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=80 align=8
+ base size=80 base align=8
+QSGRenderNode (0x0x7fae67262e38) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+QSGNode (0x0x7fae643e2de0) 0
+ primary-for QSGRenderNode (0x0x7fae67262e38)
+
+Vtable for QSGSimpleRectNode
+QSGSimpleRectNode::_ZTV17QSGSimpleRectNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGSimpleRectNode)
+16 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+24 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleRectNode
+ size=312 align=8
+ base size=312 base align=8
+QSGSimpleRectNode (0x0x7fae6730da90) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+QSGGeometryNode (0x0x7fae67353410) 0
+ primary-for QSGSimpleRectNode (0x0x7fae6730da90)
+QSGBasicGeometryNode (0x0x7fae67353478) 0
+ primary-for QSGGeometryNode (0x0x7fae67353410)
+QSGNode (0x0x7fae63d697e0) 0
+ primary-for QSGBasicGeometryNode (0x0x7fae67353478)
+
+Vtable for QSGOpaqueTextureMaterial
+QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QSGOpaqueTextureMaterial)
+16 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+24 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+32 (int (*)(...))QSGOpaqueTextureMaterial::type
+40 (int (*)(...))QSGOpaqueTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGOpaqueTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGOpaqueTextureMaterial (0x0x7fae67353bc8) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+QSGMaterial (0x0x7fae63d698a0) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7fae67353bc8)
+
+Vtable for QSGTextureMaterial
+QSGTextureMaterial::_ZTV18QSGTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureMaterial)
+16 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+24 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+32 (int (*)(...))QSGTextureMaterial::type
+40 (int (*)(...))QSGTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGTextureMaterial (0x0x7fae67353c30) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+QSGOpaqueTextureMaterial (0x0x7fae6736f888) 0
+ primary-for QSGTextureMaterial (0x0x7fae67353c30)
+QSGMaterial (0x0x7fae63d69d20) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7fae6736f888)
+
+Vtable for QSGSimpleTextureNode
+QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGSimpleTextureNode)
+16 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+24 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleTextureNode
+ size=376 align=8
+ base size=376 base align=8
+QSGSimpleTextureNode (0x0x7fae6736f8f0) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+QSGGeometryNode (0x0x7fae6736fc98) 0
+ primary-for QSGSimpleTextureNode (0x0x7fae6736f8f0)
+QSGBasicGeometryNode (0x0x7fae6736fd00) 0
+ primary-for QSGGeometryNode (0x0x7fae6736fc98)
+QSGNode (0x0x7fae63d69d80) 0
+ primary-for QSGBasicGeometryNode (0x0x7fae6736fd00)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7fae6358d600) 0 empty
+
+Vtable for QSGTextureProvider
+QSGTextureProvider::_ZTV18QSGTextureProvider: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureProvider)
+16 (int (*)(...))QSGTextureProvider::metaObject
+24 (int (*)(...))QSGTextureProvider::qt_metacast
+32 (int (*)(...))QSGTextureProvider::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 QSGTextureProvider
+ size=16 align=8
+ base size=16 base align=8
+QSGTextureProvider (0x0x7fae6738c138) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+QObject (0x0x7fae6358d5a0) 0
+ primary-for QSGTextureProvider (0x0x7fae6738c138)
+
+Vtable for QSGVertexColorMaterial
+QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QSGVertexColorMaterial)
+16 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+24 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+32 (int (*)(...))QSGVertexColorMaterial::type
+40 (int (*)(...))QSGVertexColorMaterial::createShader
+48 (int (*)(...))QSGVertexColorMaterial::compare
+
+Class QSGVertexColorMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGVertexColorMaterial (0x0x7fae6738c1a0) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+QSGMaterial (0x0x7fae6358d6c0) 0
+ primary-for QSGVertexColorMaterial (0x0x7fae6738c1a0)
+
+Class QAbstractItemModelTester::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModelTester::QPrivateSignal (0x0x7fae6358d780) 0 empty
+
+Vtable for QAbstractItemModelTester
+QAbstractItemModelTester::_ZTV24QAbstractItemModelTester: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractItemModelTester)
+16 (int (*)(...))QAbstractItemModelTester::metaObject
+24 (int (*)(...))QAbstractItemModelTester::qt_metacast
+32 (int (*)(...))QAbstractItemModelTester::qt_metacall
+40 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+48 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAbstractItemModelTester
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModelTester (0x0x7fae6738c410) 0
+ vptr=((& QAbstractItemModelTester::_ZTV24QAbstractItemModelTester) + 16)
+QObject (0x0x7fae6358d720) 0
+ primary-for QAbstractItemModelTester (0x0x7fae6738c410)
+
+Class QTest::QBenchmarkIterationController
+ size=4 align=4
+ base size=4 base align=4
+QTest::QBenchmarkIterationController (0x0x7fae6358d960) 0
+
+Class QTestEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTestEventLoop::QPrivateSignal (0x0x7fae629dd300) 0 empty
+
+Vtable for QTestEventLoop
+QTestEventLoop::_ZTV14QTestEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTestEventLoop)
+16 (int (*)(...))QTestEventLoop::metaObject
+24 (int (*)(...))QTestEventLoop::qt_metacast
+32 (int (*)(...))QTestEventLoop::qt_metacall
+40 (int (*)(...))QTestEventLoop::~QTestEventLoop
+48 (int (*)(...))QTestEventLoop::~QTestEventLoop
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTestEventLoop::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTestEventLoop
+ size=32 align=8
+ base size=32 base align=8
+QTestEventLoop (0x0x7fae6738c478) 0
+ vptr=((& QTestEventLoop::_ZTV14QTestEventLoop) + 16)
+QObject (0x0x7fae629dd2a0) 0
+ primary-for QTestEventLoop (0x0x7fae6738c478)
+
+Vtable for QSignalSpy
+QSignalSpy::_ZTV10QSignalSpy: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSignalSpy)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QSignalSpy::qt_metacall
+40 (int (*)(...))QSignalSpy::~QSignalSpy
+48 (int (*)(...))QSignalSpy::~QSignalSpy
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalSpy
+ size=128 align=8
+ base size=121 base align=8
+QSignalSpy (0x0x7fae631d0690) 0
+ vptr=((& QSignalSpy::_ZTV10QSignalSpy) + 16)
+QObject (0x0x7fae620bba20) 0
+ primary-for QSignalSpy (0x0x7fae631d0690)
+QList<QList<QVariant> > (0x0x7fae66c6e8f0) 16
+QListSpecialMethods<QList<QVariant> > (0x0x7fae66c6e9c0) 16 empty
+QListSpecialMethodsBase<QList<QVariant> > (0x0x7fae620bba80) 16 empty
+
+Class QTestData
+ size=8 align=8
+ base size=8 base align=8
+QTestData (0x0x7fae61ab9f60) 0
+
+Class QTest::Internal::QCborValueFormatter
+ size=1 align=1
+ base size=0 base align=1
+QTest::Internal::QCborValueFormatter (0x0x7fae67a90a80) 0 empty
+
+Vtable for QSvgGenerator
+QSvgGenerator::_ZTV13QSvgGenerator: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSvgGenerator)
+16 (int (*)(...))QSvgGenerator::~QSvgGenerator
+24 (int (*)(...))QSvgGenerator::~QSvgGenerator
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))QSvgGenerator::paintEngine
+48 (int (*)(...))QSvgGenerator::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QSvgGenerator
+ size=24 align=8
+ base size=24 base align=8
+QSvgGenerator (0x0x7fae628530d0) 0
+ vptr=((& QSvgGenerator::_ZTV13QSvgGenerator) + 16)
+QPaintDevice (0x0x7fae67b669c0) 0
+ primary-for QSvgGenerator (0x0x7fae628530d0)
+
+Class QSvgRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSvgRenderer::QPrivateSignal (0x0x7fae67b66c00) 0 empty
+
+Vtable for QSvgRenderer
+QSvgRenderer::_ZTV12QSvgRenderer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSvgRenderer)
+16 (int (*)(...))QSvgRenderer::metaObject
+24 (int (*)(...))QSvgRenderer::qt_metacast
+32 (int (*)(...))QSvgRenderer::qt_metacall
+40 (int (*)(...))QSvgRenderer::~QSvgRenderer
+48 (int (*)(...))QSvgRenderer::~QSvgRenderer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSvgRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSvgRenderer (0x0x7fae628533a8) 0
+ vptr=((& QSvgRenderer::_ZTV12QSvgRenderer) + 16)
+QObject (0x0x7fae67b66ba0) 0
+ primary-for QSvgRenderer (0x0x7fae628533a8)
+
diff --git a/tests/auto/bic/data/qt.6.4.0.linux-gcc-amd64.txt b/tests/auto/bic/data/qt.6.4.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..d2339894d7
--- /dev/null
+++ b/tests/auto/bic/data/qt.6.4.0.linux-gcc-amd64.txt
@@ -0,0 +1,27176 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f9e9f5f8a20) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f9e9f69c240) 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 (0x0x7f9e9f69c480) 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 (0x0x7f9e9f6cf540) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f9e9f6fbd20) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f9e9f77ab40) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f9e9f77ac00) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f9e9cb8a120) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f9e9cb8a180) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f9e9cb8a1e0) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f9e9cb8a240) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f9e9cb8a2a0) 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 (0x0x7f9e9cb8a360) 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 (0x0x7f9e9cb8a420) 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 (0x0x7f9e9cb8a4e0) 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 (0x0x7f9e9cb8a5a0) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f9e9cb8a900) 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 (0x0x7f9e9cb8ac60) 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 (0x0x7f9e9cb8acc0) 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 (0x0x7f9e9cb8af60) 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 (0x0x7f9e9cbd6000) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f9e9cbd6840) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f9e9cc26de0) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f9e9cbd9a90) 0 empty
+ std::__nonesuch (0x0x7f9e9cc58300) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f9e9ccd3060) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f9e9cd481e0) 0 empty
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f9e9c9bf060) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f9e9c9bf1e0) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f9e9c9ec000) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f9e9caa5a80) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f9e9caa5ae0) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f9e9cabd3a8) 0 empty
+ std::input_iterator_tag (0x0x7f9e9caa5b40) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f9e9cabd410) 0 empty
+ std::forward_iterator_tag (0x0x7f9e9cabd478) 0 empty
+ std::input_iterator_tag (0x0x7f9e9caa5ba0) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f9e9cabd4e0) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f9e9cabd548) 0 empty
+ std::forward_iterator_tag (0x0x7f9e9cabd5b0) 0 empty
+ std::input_iterator_tag (0x0x7f9e9caa5c00) 0 empty
+
+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 (0x0x7f9e9cade2a0) 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 (0x0x7f9e9cabd680) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f9e9cade480) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f9e9cabd680)
+
+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 (0x0x7f9e9cade660) 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 (0x0x7f9e9cabd6e8) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f9e9cadea20) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f9e9cabd6e8)
+
+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 (0x0x7f9e9cabd750) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f9e9cadec00) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f9e9cabd750)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f9e9cadede0) 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 (0x0x7f9e9cb17360) 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 (0x0x7f9e9cabd7b8) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f9e9cb17a20) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f9e9cabd7b8)
+
+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 (0x0x7f9e9cabd820) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f9e9cabd888) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f9e9cabd820)
+ std::exception (0x0x7f9e9cb17c00) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f9e9cabd888)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f9e9cb17de0) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f9e9cb4a4e0) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f9e9cb4a540) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f9e9c79f3c0) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f9e9c8258a0) 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 (0x0x7f9e9c825900) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f9e9c9033c0) 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 (0x0x7f9e9c834a90) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f9e9c92c900) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f9e9c834a90)
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7f9e9c61f5a0) 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 (0x0x7f9e9c61f6c0) 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 (0x0x7f9e9c61f9c0) 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 (0x0x7f9e9c61fcc0) 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 (0x0x7f9e9c61fde0) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f9e9c6de5a0) 0
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f9e9c3d0a20) 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 (0x0x7f9e9c3d0ae0) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f9e9c1302a0) 0
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f9e9c130300) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f9e9c1303c0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f9e9c130420) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f9e9c130480) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f9e9c1304e0) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f9e9c130540) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f9e9c1305a0) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f9e9c130600) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f9e9c130660) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f9e9c1306c0) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f9e9c130960) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f9e9c130c00) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f9e9c130d20) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f9e9c130d80) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f9e9bfb8c00) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f9e9bfb8c60) 0
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f9e9bfb8f60) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f9e9c020000) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f9e9c020060) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f9e9c0200c0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f9e9bc3e840) 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 (0x0x7f9e9bbd6c30) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f9e9bc3e900) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f9e9bbd6c30)
+
+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 (0x0x7f9e9bbd6c98) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f9e9bbd6d00) 0
+ primary-for std::domain_error (0x0x7f9e9bbd6c98)
+ std::exception (0x0x7f9e9bc3e960) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f9e9bbd6d00)
+
+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 (0x0x7f9e9bbd6d68) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f9e9bbd6dd0) 0
+ primary-for std::invalid_argument (0x0x7f9e9bbd6d68)
+ std::exception (0x0x7f9e9bc3e9c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f9e9bbd6dd0)
+
+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 (0x0x7f9e9bbd6e38) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f9e9bbd6ea0) 0
+ primary-for std::length_error (0x0x7f9e9bbd6e38)
+ std::exception (0x0x7f9e9bc3ea20) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f9e9bbd6ea0)
+
+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 (0x0x7f9e9bbd6f08) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f9e9bbd6f70) 0
+ primary-for std::out_of_range (0x0x7f9e9bbd6f08)
+ std::exception (0x0x7f9e9bc3ea80) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f9e9bbd6f70)
+
+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 (0x0x7f9e9bc86000) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f9e9bc3eae0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f9e9bc86000)
+
+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 (0x0x7f9e9bc86068) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f9e9bc860d0) 0
+ primary-for std::range_error (0x0x7f9e9bc86068)
+ std::exception (0x0x7f9e9bc3eb40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f9e9bc860d0)
+
+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 (0x0x7f9e9bc86138) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f9e9bc861a0) 0
+ primary-for std::overflow_error (0x0x7f9e9bc86138)
+ std::exception (0x0x7f9e9bc3eba0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f9e9bc861a0)
+
+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 (0x0x7f9e9bc86208) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f9e9bc86270) 0
+ primary-for std::underflow_error (0x0x7f9e9bc86208)
+ std::exception (0x0x7f9e9bc3ec00) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f9e9bc86270)
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f9e9bc3ec60) 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 (0x0x7f9e9bc862d8) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f9e9bc3eea0) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f9e9bc862d8)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f9e9b9724e0) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f9e9b972540) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f9e9b9726c0) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f9e9b972780) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f9e9bc86958) 0
+ std::__uses_alloc_base (0x0x7f9e9b972720) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f9e9baddae0) 0 empty
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f9e9b724de0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f9e9b724e40) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f9e9b771120) 0
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f9e9b771960) 0 empty
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f9e9b771ba0) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f9e9b7b7c60) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f9e9b851f00) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f9e9b7fc340) 0
+ std::__atomic_flag_base (0x0x7f9e9b851f60) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f9e9b3dea28) 0
+ QAtomicInteger<int> (0x0x7f9e9b3dea90) 0
+ QBasicAtomicInteger<int> (0x0x7f9e9b3ed360) 0
+
+Class QtPrivate::QVersionTag
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QVersionTag (0x0x7f9e9af80f60) 0
+
+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 (0x0x7f9e9adf3af8) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f9e9ae1aa80) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f9e9adf3af8)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f9e9ae1ab40) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f9e9ae1aba0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f9e9ae1aea0) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f9e9aef2660) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f9e9aef2720) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f9e9aef2c00) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f9e9ab1ba80) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f9e9ab1bb40) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f9e9ab1bba0) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f9e9ab1bf60) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f9e9ab440c0) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f9e9a8f0cc0) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f9e9a2f8cc0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f9e9a5e9548) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f9e9a31c480) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f9e9a5e9618) 0
+ std::_Bit_iterator_base (0x0x7f9e9a5e9680) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f9e9a31ca20) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f9e9a5e9750) 0
+ std::_Bit_iterator_base (0x0x7f9e9a5e97b8) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f9e9a3521e0) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f9e9a130720) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f9e9a1308a0) 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 (0x0x7f9e9a130a20) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f9e9a130ba0) 0 empty
+
+Class q20::identity::is_transparent
+ size=1 align=1
+ base size=0 base align=1
+q20::identity::is_transparent (0x0x7f9e9a1cb060) 0 empty
+
+Class q20::identity
+ size=1 align=1
+ base size=0 base align=1
+q20::identity (0x0x7f9e9a1cb000) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f9e9a1cb480) 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 (0x0x7f9e9a1cb840) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f9e9a1cbae0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f9e9a1cbcc0) 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 (0x0x7f9e9a21ee40) 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 (0x0x7f9e9a2701e0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f9e9a2709c0) 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 (0x0x7f9e9a2a4138) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f9e9a2a41a0) 0
+ primary-for std::system_error (0x0x7f9e9a2a4138)
+ std::exception (0x0x7f9e9a29d5a0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f9e9a2a41a0)
+
+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 (0x0x7f9e9a2a44e0) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f9e9a2a4548) 0
+ primary-for std::ios_base::failure (0x0x7f9e9a2a44e0)
+ std::runtime_error (0x0x7f9e9a2a45b0) 0
+ primary-for std::system_error (0x0x7f9e9a2a4548)
+ std::exception (0x0x7f9e99ed5d20) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f9e9a2a45b0)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f9e99ed5d80) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f9e99ed5de0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f9e99ed5e40) 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 (0x0x7f9e99ed5cc0) 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 (0x0x7f9e99f919c0) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f9e9a033cc0) 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> (0x0x7f9e99bd5618 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> (0x0x7f9e99bd56e8 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> (0x0x7f9e99bd5c30 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> (0x0x7f9e99bd5d00 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)
+
+Class Qt::Disambiguated_t
+ size=1 align=1
+ base size=0 base align=1
+Qt::Disambiguated_t (0x0x7f9e9984a8a0) 0 empty
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f9e995f9900) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f9e995f9960) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f9e9969df00) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f9e992ea660) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f9e992ea6c0) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f9e9968a548) 0
+ QGenericArgument (0x0x7f9e992ea960) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f9e992eae40) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f9e992eaea0) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f9e992eade0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f9e9933ca20) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f9e99368cc0) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f9e993936c0) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f9e99466240) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f9e994665a0) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f9e9911a240) 0 empty
+
+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 (0x0x7f9e9912d0d0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f9e9911a660) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f9e9912d0d0)
+
+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 (0x0x7f9e9912d138) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f9e9911a780) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f9e9912d138)
+
+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 (0x0x7f9e9912d1a0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f9e9911a8a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f9e9912d1a0)
+
+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 (0x0x7f9e9912d270) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f9e9911a9c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f9e9912d270)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f9e991582a0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f9e99158600) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f9e99158900) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f9e99158c60) 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 (0x0x7f9e9912d3a8) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f9e99207420) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f9e9912d3a8)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f9e992751e0) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f9e99275720) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f9e98fbd540) 0
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f9e98d49000) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f9e98e4f600) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f9e98ca0ae0) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f9e989650c0) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f9e98ab0060) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f9e98ab0480) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f9e98ab04e0) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f9e9873c2a0) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f9e98821600) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f9e988215a0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f9e9886d4e0) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f9e98600a20) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f9e981f4c60) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f9e981f5b60) 0
+ QtPrivate::ArgBase (0x0x7f9e981f4cc0) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f9e981f5c30) 0
+ QtPrivate::ArgBase (0x0x7f9e981f4f00) 0
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7f9e982667e0) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f9e982a27e0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f9e982a28a0) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f9e97cf4300) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f9e97d92480) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f9e97dbc1e0) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f9e97de2480) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f9e97de33a8) 0
+ QIODeviceBase (0x0x7f9e97de24e0) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f9e97de2660) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f9e97a92d80) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f9e97de3d00) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f9e97a92e40) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f9e97de3dd0) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f9e97a92f00) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f9e97b9aa20) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f9e97b720d0) 0
+ QMetaContainer (0x0x7f9e97b9ac00) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f9e97b72138) 0
+ QMetaContainer (0x0x7f9e97bbb000) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f9e978b6120) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f9e97c3ef08) 0
+ std::__detail::_List_node_base (0x0x7f9e978b6180) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f9e97997240) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f9e979975a0) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f9e977fba80) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f9e977fbc60) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f9e97488de0) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f9e973c8900) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7f9e96fd2c60) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f9e96fd2cc0) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f9e96cb0ae0) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f9e96d60840) 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 (0x0x7f9e96e331e0) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f9e96e33b40) 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 (0x0x7f9e96e33ae0) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f9e96b03de0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f9e96b4a6c0) 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 (0x0x7f9e96b34208) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f9e96b4a660) 0
+ primary-for QAbstractAnimation (0x0x7f9e96b34208)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f9e96b4aa20) 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 (0x0x7f9e96b34270) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f9e96b4a9c0) 0
+ primary-for QAnimationDriver (0x0x7f9e96b34270)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f9e96b4ac00) 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 (0x0x7f9e96b342d8) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f9e96b4aba0) 0
+ primary-for QEventLoop (0x0x7f9e96b342d8)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f9e96ba7300) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f9e96ba73c0) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f9e96ba7420) 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 (0x0x7f9e96b34478) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f9e96ba7360) 0
+ primary-for QAbstractEventDispatcher (0x0x7f9e96b34478)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f9e96bf7ba0) 0 empty
+
+Class QHashPrivate::SpanConstants
+ size=1 align=1
+ base size=0 base align=1
+QHashPrivate::SpanConstants (0x0x7f9e96c25900) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f9e969e7c60) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f9e969e7c00) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f9e96a0a960) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f9e96896c30) 0
+ QStringConverterBase (0x0x7f9e96a0a900) 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 (0x0x7f9e96896c98) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f9e96a6b360) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f9e96a6bc60) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f9e967033c0) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f9e96737900) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f9e96737c60) 0 empty
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f9e967a5d80) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f9e967a5f00) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f9e96849000) 0 empty
+
+Class QVLABaseBase::free_deleter
+ size=1 align=1
+ base size=0 base align=1
+QVLABaseBase::free_deleter (0x0x7f9e96625120) 0 empty
+
+Class QVLABaseBase
+ size=24 align=8
+ base size=24 base align=8
+QVLABaseBase (0x0x7f9e966250c0) 0
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f9e96423540) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f9e963ef7b8) 0
+ QIODeviceBase (0x0x7f9e964234e0) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f9e96128e40) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f9e96128f00) 0 empty
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f9e95f029c0) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f9e95f02a20) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f9e95f02960) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f9e95cff840) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f9e95cffa80) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f9e95cffc60) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f9e95d41ba0) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f9e95d8aba0) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f9e95dd5d80) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f9e95e47f00) 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 (0x0x7f9e95e4bf70) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f9e95e47ea0) 0
+ primary-for QAbstractItemModel (0x0x7f9e95e4bf70)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f9e95b80d80) 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 (0x0x7f9e95a9f820) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f9e95a9f888) 0
+ primary-for QAbstractTableModel (0x0x7f9e95a9f820)
+ QObject (0x0x7f9e95b80d20) 0
+ primary-for QAbstractItemModel (0x0x7f9e95a9f888)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f9e95b80ea0) 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 (0x0x7f9e95a9f8f0) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f9e95a9f958) 0
+ primary-for QAbstractListModel (0x0x7f9e95a9f8f0)
+ QObject (0x0x7f9e95b80e40) 0
+ primary-for QAbstractItemModel (0x0x7f9e95a9f958)
+
+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 (0x0x7f9e95c05780) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f9e95c05840) 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 (0x0x7f9e95bf6d68) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f9e95bf6dd0) 0
+ primary-for QAbstractProxyModel (0x0x7f9e95bf6d68)
+ QObject (0x0x7f9e95c057e0) 0
+ primary-for QAbstractItemModel (0x0x7f9e95bf6dd0)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f9e95c05a20) 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 (0x0x7f9e95bf6e38) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f9e95bf6ea0) 0
+ primary-for QAnimationGroup (0x0x7f9e95bf6e38)
+ QObject (0x0x7f9e95c059c0) 0
+ primary-for QAbstractAnimation (0x0x7f9e95bf6ea0)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f9e95c05ea0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f9e95bf6f70) 0
+ QBasicMutex (0x0x7f9e95c73c00) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f9e958c7060) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f9e958c7840) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f9e958c78a0) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f9e958c7900) 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 (0x0x7f9e958c77e0) 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 (0x0x7f9e958da138) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f9e959542a0) 0
+ primary-for QTimerEvent (0x0x7f9e958da138)
+
+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 (0x0x7f9e958da1a0) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f9e95954360) 0
+ primary-for QChildEvent (0x0x7f9e958da1a0)
+
+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 (0x0x7f9e958da208) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f9e95954540) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f9e958da208)
+
+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 (0x0x7f9e958da270) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f9e95954600) 0
+ primary-for QDeferredDeleteEvent (0x0x7f9e958da270)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f9e95954a20) 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 (0x0x7f9e958da410) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f9e959549c0) 0
+ primary-for QCoreApplication (0x0x7f9e958da410)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f9e958da8f0) 0
+ QIterator<QMetaAssociation> (0x0x7f9e958da958) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f9e959ac660) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f9e958daa90) 0
+ QConstIterator<QMetaAssociation> (0x0x7f9e958daaf8) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f9e959acc00) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f9e958dabc8) 0
+ QIterable<QMetaAssociation> (0x0x7f9e959fe120) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f9e956dcc00) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f9e9573aba0) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f9e95769c60) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f9e957b37e0) 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 (0x0x7f9e9574f540) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f9e957b3720) 0
+ primary-for QIODevice (0x0x7f9e9574f540)
+ QIODeviceBase (0x0x7f9e957b3780) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f9e957b3cc0) 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 (0x0x7f9e957a8f08) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f9e9574f5b0) 0
+ primary-for QBuffer (0x0x7f9e957a8f08)
+ QObject (0x0x7f9e957b3c00) 0
+ primary-for QIODevice (0x0x7f9e9574f5b0)
+ QIODeviceBase (0x0x7f9e957b3c60) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f9e957b3f00) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f9e957b3ea0) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f9e958142a0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f9e95814240) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f9e95868960) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f9e955d9120) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7f9e955d9180) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f9e955d90c0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f9e955d9ba0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f9e95658240) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f9e95291480) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f9e952914e0) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f9e95291420) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f9e95349060) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f9e9537e7e0) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f9e95435ba0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f9e950d93c0) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f9e950d9480) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f9e950d9600) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f9e9516b840) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f9e94e795a0) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f9e94ef18a0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f9e94ef1960) 0
+
+Class QCborValueConstRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueConstRef (0x0x7f9e95013e40) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f9e950224e0) 0
+ QCborValueConstRef (0x0x7f9e94c69300) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f9e94ca1900) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f9e94ca1960) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f9e94ca18a0) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f9e94d73f60) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f9e94da1000) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f9e94d73f00) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f9e94be2540) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f9e94be24e0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f9e948d7960) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f9e94924de0) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f9e9495b840) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f9e9495ba20) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f9e949fb180) 0
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f9e94a3be40) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f9e94a3bf60) 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 (0x0x7f9e94a42c98) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f9e94a42d00) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f9e94a42c98)
+ QObject (0x0x7f9e94a3bf00) 0
+ primary-for QAbstractItemModel (0x0x7f9e94a42d00)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f9e946ac120) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f9e946ac240) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f9e946ac540) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f9e947ed5a0) 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 (0x0x7f9e947f90d0) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f9e94738b60) 0
+ primary-for QFileDevice (0x0x7f9e947f90d0)
+ QObject (0x0x7f9e947ed4e0) 0
+ primary-for QIODevice (0x0x7f9e94738b60)
+ QIODeviceBase (0x0x7f9e947ed540) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7f9e944914e0) 0
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7f9e944eaa80) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7f9e944eaf00) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7f9e9456d240) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7f9e9456d1e0) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7f9e945be7e0) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7f9e945fa360) 0 empty
+
+Construction vtable for std::basic_istream<char> (0x0x7f9e940a4000 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> (0x0x7f9e940a4270 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> (0x0x7f9e9434fb60 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> (0x0x7f9e940a44e0 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> (0x0x7f9e940a45b0 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> (0x0x7f9e940a4a90 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> (0x0x7f9e940a4d00 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> (0x0x7f9e9434ff50 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> (0x0x7f9e940a4f70 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> (0x0x7f9e940a41a0 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 (0x0x7f9e94085ae0) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7f9e94085c60) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7f9e94085de0) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7f9e9412a120) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7f9e9412a2a0) 0
+
+Class std::filesystem::__cxx11::path::__null_terminated
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::__null_terminated (0x0x7f9e941f6360) 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 (0x0x7f9e941f6420) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7f9e941f63c0) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7f9e941f6240) 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 (0x0x7f9e94007680) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+ std::system_error (0x0x7f9e940076e8) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7f9e94007680)
+ std::runtime_error (0x0x7f9e94007750) 0
+ primary-for std::system_error (0x0x7f9e940076e8)
+ std::exception (0x0x7f9e940230c0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f9e94007750)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7f9e93c8e0d0) 0
+ std::filesystem::__cxx11::path (0x0x7f9e94023c00) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7f9e93c9de40) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7f9e93d71660) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7f9e93d71b40) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7f9e93e0a240) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7f9e93e0a9c0) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7f9e93a88ae0) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f9e93b54c60) 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 (0x0x7f9e93b67b60) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f9e93b67bc8) 0
+ primary-for QFile (0x0x7f9e93b67b60)
+ QIODevice (0x0x7f9e93d6c3f0) 0
+ primary-for QFileDevice (0x0x7f9e93b67bc8)
+ QObject (0x0x7f9e93b54ba0) 0
+ primary-for QIODevice (0x0x7f9e93d6c3f0)
+ QIODeviceBase (0x0x7f9e93b54c00) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f9e93b9d5a0) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f9e938352a0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f9e938d6cc0) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f9e93967240) 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 (0x0x7f9e939c43a8) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f9e939f8540) 0 nearly-empty
+ primary-for QException (0x0x7f9e939c43a8)
+
+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 (0x0x7f9e939c4410) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f9e939c4478) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f9e939c4410)
+ std::exception (0x0x7f9e939f85a0) 0 nearly-empty
+ primary-for QException (0x0x7f9e939c4478)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f9e939f8720) 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 (0x0x7f9e939f8780) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f9e939f8ba0) 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 (0x0x7f9e939c45b0) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f9e939f8b40) 0
+ primary-for QFileSelector (0x0x7f9e939c45b0)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f9e939f8d80) 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 (0x0x7f9e939c4618) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f9e939f8d20) 0
+ primary-for QFileSystemWatcher (0x0x7f9e939c4618)
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f9e939f8f00) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f9e93650540) 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 (0x0x7f9e937841e0) 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 (0x0x7f9e937b7c00) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f9e937f0f00) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f9e937c3c98) 0
+ std::__mutex_base (0x0x7f9e937f0f60) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f9e9343b180) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f9e9343b1e0) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f9e9343b240) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f9e9343bc60) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f9e937c3d00) 0
+ std::__recursive_mutex_base (0x0x7f9e9343bcc0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f9e939d7bd0) 0
+ std::__mutex_base (0x0x7f9e934730c0) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f9e93473120) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f9e939d7c40) 0
+ std::__recursive_mutex_base (0x0x7f9e934734e0) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f9e93473540) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f9e934aa360) 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 (0x0x7f9e934aa600) 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 (0x0x7f9e934aa660) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f9e934aa5a0) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f9e9326d7e0) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f9e9326dba0) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f9e9326dc00) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f9e93345120) 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 (0x0x7f9e9330f7b8) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f9e9330f820) 0
+ primary-for std::future_error (0x0x7f9e9330f7b8)
+ std::exception (0x0x7f9e93345840) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f9e9330f820)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f9e93345f60) 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 (0x0x7f9e93345f00) 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 (0x0x7f9e930bd9c0) 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 (0x0x7f9e930ec000) 0
+ std::__at_thread_exit_elt (0x0x7f9e930bda80) 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 (0x0x7f9e93379120) 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 (0x0x7f9e93345ea0) 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 (0x0x7f9e92d8d3a8) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f9e92dbe780) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f9e92d8d3a8)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f9e92de9060) 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 (0x0x7f9e92d8d6e8) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f9e92de9000) 0
+ primary-for QThread (0x0x7f9e92d8d6e8)
+
+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 (0x0x7f9e92de93c0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f9e92de9540) 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 (0x0x7f9e92d8d750) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f9e92de94e0) 0
+ primary-for QThreadPool (0x0x7f9e92d8d750)
+
+Class QtPrivate::UnwrapHandler
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::UnwrapHandler (0x0x7f9e92ad7ea0) 0 empty
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f9e928d95a0) 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 (0x0x7f9e92bea9c0) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f9e928d9540) 0
+ primary-for QFutureWatcherBase (0x0x7f9e92bea9c0)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f9e928d9ae0) 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 (0x0x7f9e92beabc8) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f9e92beac30) 0
+ primary-for QIdentityProxyModel (0x0x7f9e92beabc8)
+ QAbstractItemModel (0x0x7f9e92beac98) 0
+ primary-for QAbstractProxyModel (0x0x7f9e92beac30)
+ QObject (0x0x7f9e928d9a80) 0
+ primary-for QAbstractItemModel (0x0x7f9e92beac98)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f9e928d9c60) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f9e92942d80) 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 (0x0x7f9e9294cb60) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f9e92942d20) 0
+ primary-for QItemSelectionModel (0x0x7f9e9294cb60)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f9e92a0d068) 0
+ QList<QItemSelectionRange> (0x0x7f9e92a0d0d0) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f9e92a0d138) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f9e92973900) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f9e9268aae0) 0
+
+Class QJsonValueConstRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueConstRef (0x0x7f9e926f57e0) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f9e926eaea0) 0
+ QJsonValueConstRef (0x0x7f9e927253c0) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f9e92752180) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f9e927521e0) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f9e92752120) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f9e927e7c00) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f9e927e7c60) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f9e925981e0) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f9e92598240) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f9e92598180) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f9e92233d80) 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 (0x0x7f9e9223da28) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f9e92233d20) 0
+ primary-for QLibrary (0x0x7f9e9223da28)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f9e9226f540) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f9e9226f4e0) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f9e9233e3c0) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f9e9aea5b40) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f9e9aea5e40) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f9e99622ba0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f9e98a93180) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f9e96128cc0) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f9e9556d600) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f9e95291300) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f9e952912a0) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f9e94fac240) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f9e94348ba0) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f9e93193300) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f9e93193540) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f9e93193480) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f9e9257b4e0) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f9e9257b480) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f9e9a8af8a0) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f9e9a8af840) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f9e9a8aff60) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f9e9a8aff00) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f9e93ec2d80) 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 (0x0x7f9e9a80f820) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f9e93ec2d20) 0
+ primary-for QMimeData (0x0x7f9e9a80f820)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f9e93ec2f00) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f9e935d18a0) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f9e935d1960) 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 (0x0x7f9e9a81aa28) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f9e935d1900) 0
+ primary-for QObjectCleanupHandler (0x0x7f9e9a81aa28)
+
+Class QOperatingSystemVersionBase
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersionBase (0x0x7f9e935d1a20) 0
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f9e9a81aa90) 0
+ QOperatingSystemVersionBase (0x0x7f9e933c0360) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f9e93220060) 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 (0x0x7f9e9a825dd0) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f9e9a825e38) 0
+ primary-for QParallelAnimationGroup (0x0x7f9e9a825dd0)
+ QAbstractAnimation (0x0x7f9e9a825ea0) 0
+ primary-for QAnimationGroup (0x0x7f9e9a825e38)
+ QObject (0x0x7f9e93220000) 0
+ primary-for QAbstractAnimation (0x0x7f9e9a825ea0)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f9e93220240) 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 (0x0x7f9e9a825f70) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f9e9a827000) 0
+ primary-for QPauseAnimation (0x0x7f9e9a825f70)
+ QObject (0x0x7f9e932201e0) 0
+ primary-for QAbstractAnimation (0x0x7f9e9a827000)
+
+Class QPluginMetaData::Header
+ size=4 align=1
+ base size=4 base align=1
+QPluginMetaData::Header (0x0x7f9e93220480) 0
+
+Class QPluginMetaData::MagicHeader
+ size=16 align=1
+ base size=16 base align=1
+QPluginMetaData::MagicHeader (0x0x7f9e932204e0) 0
+
+Class QPluginMetaData::ElfNoteHeader
+ size=32 align=8
+ base size=28 base align=8
+QPluginMetaData::ElfNoteHeader (0x0x7f9e93220540) 0
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f9e93220420) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f9e93220ba0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f9e92c60900) 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 (0x0x7f9e9a82f0d0) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f9e92c608a0) 0
+ primary-for QPluginLoader (0x0x7f9e9a82f0d0)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f9e92c609c0) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f9e922b4420) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f9e922b4480) 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 (0x0x7f9e9a8342d8) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f9e9a798a80) 0
+ primary-for QProcess (0x0x7f9e9a8342d8)
+ QObject (0x0x7f9e922b4360) 0
+ primary-for QIODevice (0x0x7f9e9a798a80)
+ QIODeviceBase (0x0x7f9e922b43c0) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f9e922b4a80) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f9e922b4ba0) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f9e94250c00) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f9e94250ba0) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7f9e94250c60) 0
+
+Class QtPrivate::MSVCWorkAround
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::MSVCWorkAround (0x0x7f9e94250cc0) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f9e94250d20) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f9e941db2a0) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f9e941db300) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f9e941dba20) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f9e94bed180) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f9e94bed4e0) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f9e94bed600) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f9e94bed840) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f9e9a837958) 0
+ QPropertyObserverBase (0x0x7f9e94bed9c0) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7f9e9a837c98) 0
+ QPropertyObserver (0x0x7f9e9a837d00) 0
+ QPropertyObserverBase (0x0x7f9e94bedea0) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f9e9a32bd80) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f9e9c397f00) 0
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f9e98acd720) 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 (0x0x7f9e9a852e38) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f9e9a852ea0) 0
+ primary-for QVariantAnimation (0x0x7f9e9a852e38)
+ QObject (0x0x7f9e98acd6c0) 0
+ primary-for QAbstractAnimation (0x0x7f9e9a852ea0)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f9e98acd960) 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 (0x0x7f9e9a852f70) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f9e9a853000) 0
+ primary-for QPropertyAnimation (0x0x7f9e9a852f70)
+ QAbstractAnimation (0x0x7f9e9a853068) 0
+ primary-for QVariantAnimation (0x0x7f9e9a853000)
+ QObject (0x0x7f9e98acd900) 0
+ primary-for QAbstractAnimation (0x0x7f9e9a853068)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f9e982be0c0) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f9e960bb540) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f9e960bb4e0) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f9e94a8bcc0) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7f9e9abfa9c0) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f9e9abfaa20) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f9e9abfa960) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f9e9a858d68) 0
+ QRandomGenerator (0x0x7f9e97fd5cc0) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f9e96dae900) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f9e96daeb40) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f9e94d65000) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f9e94d65480) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f9e93c8ff00) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f9e92549a20) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f9e970cf840) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f9e96eda420) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f9e96eda720) 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 (0x0x7f9e9a871c98) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f9e9a871d00) 0
+ primary-for QSaveFile (0x0x7f9e9a871c98)
+ QIODevice (0x0x7f9e9234fa80) 0
+ primary-for QFileDevice (0x0x7f9e9a871d00)
+ QObject (0x0x7f9e96eda660) 0
+ primary-for QIODevice (0x0x7f9e9234fa80)
+ QIODeviceBase (0x0x7f9e96eda6c0) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f9e96edaa80) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f9e947d2420) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f9ea33719c0) 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 (0x0x7f9e9a53e000) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f9e9a53e0d0) 0
+ primary-for QSequentialAnimationGroup (0x0x7f9e9a53e000)
+ QAbstractAnimation (0x0x7f9e9a53e2d8) 0
+ primary-for QAnimationGroup (0x0x7f9e9a53e0d0)
+ QObject (0x0x7f9ea3371960) 0
+ primary-for QAbstractAnimation (0x0x7f9e9a53e2d8)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f9e9a53e340) 0
+ QIterator<QMetaSequence> (0x0x7f9e9a53e478) 0
+ QBaseIterator<QMetaSequence> (0x0x7f9ea3371d20) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f9e9a53e548) 0
+ QConstIterator<QMetaSequence> (0x0x7f9e9a53e618) 0
+ QBaseIterator<QMetaSequence> (0x0x7f9e99fdb2a0) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f9e9a53e680) 0
+ QIterable<QMetaSequence> (0x0x7f9e99fdb7e0) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f9e92366de0) 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 (0x0x7f9e9a55c888) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f9e92366d80) 0
+ primary-for QSettings (0x0x7f9e9a55c888)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f9e9237d240) 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 (0x0x7f9e9a55c8f0) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f9e9237d1e0) 0
+ primary-for QSharedMemory (0x0x7f9e9a55c8f0)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f9e9237d420) 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 (0x0x7f9e9a55c9c0) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f9e9237d3c0) 0
+ primary-for QSignalMapper (0x0x7f9e9a55c9c0)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f9e91ad5a80) 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 (0x0x7f9e9a561d00) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f9e91ad5a20) 0
+ primary-for QSocketNotifier (0x0x7f9e9a561d00)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f9e91ad5c00) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f9e91b03660) 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 (0x0x7f9e9a568820) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f9e9a568888) 0
+ primary-for QSortFilterProxyModel (0x0x7f9e9a568820)
+ QAbstractItemModel (0x0x7f9e9a568958) 0
+ primary-for QAbstractProxyModel (0x0x7f9e9a568888)
+ QObject (0x0x7f9e91b03600) 0
+ primary-for QAbstractItemModel (0x0x7f9e9a568958)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f9e91b03a20) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f9e917304e0) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f9e91759f00) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f9e9a57c068) 0
+ QStringConverter (0x0x7f9e9a57c0d0) 0
+ QStringConverterBase (0x0x7f9e917968a0) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f9e9a57c138) 0
+ QStringConverter (0x0x7f9e9a57c1a0) 0
+ QStringConverterBase (0x0x7f9e917ab720) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f9e917b9480) 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 (0x0x7f9e9a57c208) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f9e9a57c270) 0
+ primary-for QStringListModel (0x0x7f9e9a57c208)
+ QAbstractItemModel (0x0x7f9e9a57c2d8) 0
+ primary-for QAbstractListModel (0x0x7f9e9a57c270)
+ QObject (0x0x7f9e917b9420) 0
+ primary-for QAbstractItemModel (0x0x7f9e9a57c2d8)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f9e917b9540) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f9e917b9660) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f9e917b9a80) 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 (0x0x7f9e9a57c340) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f9e9a57c410) 0
+ primary-for QTemporaryFile (0x0x7f9e9a57c340)
+ QFileDevice (0x0x7f9e9a57c478) 0
+ primary-for QFile (0x0x7f9e9a57c410)
+ QIODevice (0x0x7f9e91799540) 0
+ primary-for QFileDevice (0x0x7f9e9a57c478)
+ QObject (0x0x7f9e917b99c0) 0
+ primary-for QIODevice (0x0x7f9e91799540)
+ QIODeviceBase (0x0x7f9e917b9a20) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f9e917b9cc0) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f9e917e3420) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f9e917e3ae0) 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 (0x0x7f9e9a57c618) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f9e917e3a80) 0
+ primary-for QTimeLine (0x0x7f9e9a57c618)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f9e917e3cc0) 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 (0x0x7f9e9a57c680) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f9e917e3c60) 0
+ primary-for QTimer (0x0x7f9e9a57c680)
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f9e91816660) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f9e91816600) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f9e918486c0) 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 (0x0x7f9e9a584680) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f9e91848660) 0
+ primary-for QTranslator (0x0x7f9e9a584680)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f9e918488a0) 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 (0x0x7f9e9a5846e8) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f9e9a584750) 0
+ primary-for QTransposeProxyModel (0x0x7f9e9a5846e8)
+ QAbstractItemModel (0x0x7f9e9a5847b8) 0
+ primary-for QAbstractProxyModel (0x0x7f9e9a584750)
+ QObject (0x0x7f9e91848840) 0
+ primary-for QAbstractItemModel (0x0x7f9e9a5847b8)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f9e91848a20) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f9e91899540) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f9e91899660) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f9e918b14e0) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f9e9a596bc8) 0
+ QList<QXmlStreamAttribute> (0x0x7f9e9a596c30) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f9e9a596c98) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f9e918cb5a0) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f9e918cbe40) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f9e9190b4e0) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f9e91919b40) 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 (0x0x7f9e91532300) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f9e91532360) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f9e91532900) 0
+
+Class QtConcurrent::TaskStartParameters
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::TaskStartParameters (0x0x7f9e91568300) 0
+
+Class QtConcurrent::Median
+ size=72 align=8
+ base size=70 base align=8
+QtConcurrent::Median (0x0x7f9e9157a5a0) 0
+
+Class QtConcurrent::ThreadEngineBarrier
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::ThreadEngineBarrier (0x0x7f9e9157a9c0) 0
+
+Vtable for QtConcurrent::ThreadEngineBase
+QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN12QtConcurrent16ThreadEngineBaseE)
+16 (int (*)(...))QtConcurrent::ThreadEngineBase::run
+24 0
+32 0
+40 (int (*)(...))QtConcurrent::ThreadEngineBase::start
+48 (int (*)(...))QtConcurrent::ThreadEngineBase::finish
+56 (int (*)(...))QtConcurrent::ThreadEngineBase::threadFunction
+64 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldStartThread
+72 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldThrottleThread
+80 (int (*)(...))__cxa_pure_virtual
+
+Class QtConcurrent::ThreadEngineBase
+ size=64 align=8
+ base size=64 base align=8
+QtConcurrent::ThreadEngineBase (0x0x7f9e9a5a5138) 0
+ vptr=((& QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE) + 16)
+ QRunnable (0x0x7f9e9157aa80) 0
+ primary-for QtConcurrent::ThreadEngineBase (0x0x7f9e9a5a5138)
+
+Class QtConcurrent::BlockSizeManager
+ size=176 align=8
+ base size=172 base align=8
+QtConcurrent::BlockSizeManager (0x0x7f9e9158f5a0) 0
+
+Class QtPrivate::PushBackWrapper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::PushBackWrapper (0x0x7f9e915cb360) 0 empty
+
+Class QDBusAbstractAdaptor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractAdaptor::QPrivateSignal (0x0x7f9e9163e7e0) 0 empty
+
+Vtable for QDBusAbstractAdaptor
+QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDBusAbstractAdaptor)
+16 (int (*)(...))QDBusAbstractAdaptor::metaObject
+24 (int (*)(...))QDBusAbstractAdaptor::qt_metacast
+32 (int (*)(...))QDBusAbstractAdaptor::qt_metacall
+40 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+48 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractAdaptor
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractAdaptor (0x0x7f9e9a2a4e38) 0
+ vptr=((& QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor) + 16)
+ QObject (0x0x7f9e9163e780) 0
+ primary-for QDBusAbstractAdaptor (0x0x7f9e9a2a4e38)
+
+Class QDBusError
+ size=64 align=8
+ base size=64 base align=8
+QDBusError (0x0x7f9e9163e960) 0
+
+Class QDBusMessage
+ size=8 align=8
+ base size=8 base align=8
+QDBusMessage (0x0x7f9e9166ad80) 0
+
+Class QDBusObjectPath
+ size=24 align=8
+ base size=24 base align=8
+QDBusObjectPath (0x0x7f9e9168f240) 0
+
+Class QDBusSignature
+ size=24 align=8
+ base size=24 base align=8
+QDBusSignature (0x0x7f9e916a47e0) 0
+
+Class QDBusVariant
+ size=32 align=8
+ base size=32 base align=8
+QDBusVariant (0x0x7f9e916bcd80) 0
+
+Class QDBusConnection
+ size=8 align=8
+ base size=8 base align=8
+QDBusConnection (0x0x7f9e916e0ba0) 0
+
+Class QDBusPendingCall
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingCall (0x0x7f9e9171c960) 0
+
+Class QDBusPendingCallWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusPendingCallWatcher::QPrivateSignal (0x0x7f9e9135a660) 0 empty
+
+Vtable for QDBusPendingCallWatcher
+QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QDBusPendingCallWatcher)
+16 (int (*)(...))QDBusPendingCallWatcher::metaObject
+24 (int (*)(...))QDBusPendingCallWatcher::qt_metacast
+32 (int (*)(...))QDBusPendingCallWatcher::qt_metacall
+40 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+48 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusPendingCallWatcher
+ size=24 align=8
+ base size=24 base align=8
+QDBusPendingCallWatcher (0x0x7f9e9135c000) 0
+ vptr=((& QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher) + 16)
+ QObject (0x0x7f9e9135a5a0) 0
+ primary-for QDBusPendingCallWatcher (0x0x7f9e9135c000)
+ QDBusPendingCall (0x0x7f9e9135a600) 16
+
+Vtable for QDBusAbstractInterfaceBase
+QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDBusAbstractInterfaceBase)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QDBusAbstractInterfaceBase::qt_metacall
+40 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+48 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterfaceBase (0x0x7f9e9252cd00) 0
+ vptr=((& QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase) + 16)
+ QObject (0x0x7f9e9135a7e0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f9e9252cd00)
+
+Class QDBusAbstractInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractInterface::QPrivateSignal (0x0x7f9e9135a960) 0 empty
+
+Vtable for QDBusAbstractInterface
+QDBusAbstractInterface::_ZTV22QDBusAbstractInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QDBusAbstractInterface)
+16 (int (*)(...))QDBusAbstractInterface::metaObject
+24 (int (*)(...))QDBusAbstractInterface::qt_metacast
+32 (int (*)(...))QDBusAbstractInterface::qt_metacall
+40 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+48 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusAbstractInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterface (0x0x7f9e9252cd68) 0
+ vptr=((& QDBusAbstractInterface::_ZTV22QDBusAbstractInterface) + 16)
+ QDBusAbstractInterfaceBase (0x0x7f9e9255d1a0) 0
+ primary-for QDBusAbstractInterface (0x0x7f9e9252cd68)
+ QObject (0x0x7f9e9135a900) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f9e9255d1a0)
+
+Class QDBusArgument
+ size=8 align=8
+ base size=8 base align=8
+QDBusArgument (0x0x7f9e9135ad20) 0
+
+Class QDBusPendingReplyBase
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingReplyBase (0x0x7f9e91389f70) 0
+ QDBusPendingCall (0x0x7f9e91395ea0) 0
+
+Class QDBusConnectionInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusConnectionInterface::QPrivateSignal (0x0x7f9e9145cf60) 0 empty
+
+Vtable for QDBusConnectionInterface
+QDBusConnectionInterface::_ZTV24QDBusConnectionInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QDBusConnectionInterface)
+16 (int (*)(...))QDBusConnectionInterface::metaObject
+24 (int (*)(...))QDBusConnectionInterface::qt_metacast
+32 (int (*)(...))QDBusConnectionInterface::qt_metacall
+40 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+48 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusConnectionInterface::connectNotify
+104 (int (*)(...))QDBusConnectionInterface::disconnectNotify
+
+Class QDBusConnectionInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusConnectionInterface (0x0x7f9e914482d8) 0
+ vptr=((& QDBusConnectionInterface::_ZTV24QDBusConnectionInterface) + 16)
+ QDBusAbstractInterface (0x0x7f9e91448340) 0
+ primary-for QDBusConnectionInterface (0x0x7f9e914482d8)
+ QDBusAbstractInterfaceBase (0x0x7f9e914483a8) 0
+ primary-for QDBusAbstractInterface (0x0x7f9e91448340)
+ QObject (0x0x7f9e9145cf00) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f9e914483a8)
+
+Class QDBusContext
+ size=8 align=8
+ base size=8 base align=8
+QDBusContext (0x0x7f9e91478420) 0
+
+Vtable for QDBusInterface
+QDBusInterface::_ZTV14QDBusInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDBusInterface)
+16 (int (*)(...))QDBusInterface::metaObject
+24 (int (*)(...))QDBusInterface::qt_metacast
+32 (int (*)(...))QDBusInterface::qt_metacall
+40 (int (*)(...))QDBusInterface::~QDBusInterface
+48 (int (*)(...))QDBusInterface::~QDBusInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusInterface (0x0x7f9e91448478) 0
+ vptr=((& QDBusInterface::_ZTV14QDBusInterface) + 16)
+ QDBusAbstractInterface (0x0x7f9e914484e0) 0
+ primary-for QDBusInterface (0x0x7f9e91448478)
+ QDBusAbstractInterfaceBase (0x0x7f9e91448548) 0
+ primary-for QDBusAbstractInterface (0x0x7f9e914484e0)
+ QObject (0x0x7f9e91478480) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f9e91448548)
+
+Class QDBusMetaType
+ size=1 align=1
+ base size=0 base align=1
+QDBusMetaType (0x0x7f9e914785a0) 0 empty
+
+Class QDBusServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServer::QPrivateSignal (0x0x7f9e91478840) 0 empty
+
+Vtable for QDBusServer
+QDBusServer::_ZTV11QDBusServer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDBusServer)
+16 (int (*)(...))QDBusServer::metaObject
+24 (int (*)(...))QDBusServer::qt_metacast
+32 (int (*)(...))QDBusServer::qt_metacall
+40 (int (*)(...))QDBusServer::~QDBusServer
+48 (int (*)(...))QDBusServer::~QDBusServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServer
+ size=24 align=8
+ base size=24 base align=8
+QDBusServer (0x0x7f9e914485b0) 0
+ vptr=((& QDBusServer::_ZTV11QDBusServer) + 16)
+ QObject (0x0x7f9e914787e0) 0
+ primary-for QDBusServer (0x0x7f9e914485b0)
+
+Class QDBusServiceWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServiceWatcher::QPrivateSignal (0x0x7f9e91478960) 0 empty
+
+Vtable for QDBusServiceWatcher
+QDBusServiceWatcher::_ZTV19QDBusServiceWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDBusServiceWatcher)
+16 (int (*)(...))QDBusServiceWatcher::metaObject
+24 (int (*)(...))QDBusServiceWatcher::qt_metacast
+32 (int (*)(...))QDBusServiceWatcher::qt_metacall
+40 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+48 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServiceWatcher
+ size=16 align=8
+ base size=16 base align=8
+QDBusServiceWatcher (0x0x7f9e91448618) 0
+ vptr=((& QDBusServiceWatcher::_ZTV19QDBusServiceWatcher) + 16)
+ QObject (0x0x7f9e91478900) 0
+ primary-for QDBusServiceWatcher (0x0x7f9e91448618)
+
+Class QDBusUnixFileDescriptor
+ size=8 align=8
+ base size=8 base align=8
+QDBusUnixFileDescriptor (0x0x7f9e914c3060) 0
+
+Class QDBusVirtualObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusVirtualObject::QPrivateSignal (0x0x7f9e914fc720) 0 empty
+
+Vtable for QDBusVirtualObject
+QDBusVirtualObject::_ZTV18QDBusVirtualObject: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QDBusVirtualObject)
+16 (int (*)(...))QDBusVirtualObject::metaObject
+24 (int (*)(...))QDBusVirtualObject::qt_metacast
+32 (int (*)(...))QDBusVirtualObject::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 QDBusVirtualObject
+ size=16 align=8
+ base size=16 base align=8
+QDBusVirtualObject (0x0x7f9e91503a28) 0
+ vptr=((& QDBusVirtualObject::_ZTV18QDBusVirtualObject) + 16)
+ QObject (0x0x7f9e914fc6c0) 0
+ primary-for QDBusVirtualObject (0x0x7f9e91503a28)
+
+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 (0x0x7f9e914fc7e0) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f9e9151f2a0) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f9e9116b420) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f9e9116b3c0) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f9e911f5d20) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f9e91257548) 0
+ QList<QPoint> (0x0x7f9e912575b0) 0
+ QListSpecialMethods<QPoint> (0x0x7f9e91257618) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7f9e91255a20) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f9e912d7548) 0
+ QList<QPointF> (0x0x7f9e912d75b0) 0
+ QListSpecialMethods<QPointF> (0x0x7f9e912d7618) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7f9e912de600) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f9e90f6a000) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f9e90f45f60) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f9e90f9dea0) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f9e90f9de40) 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 (0x0x7f9e90fdac30) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f9e90fe7a80) 0
+ primary-for QImage (0x0x7f9e90fdac30)
+
+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 (0x0x7f9e91058a28) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f9e91055ae0) 0
+ primary-for QPixmap (0x0x7f9e91058a28)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f9e9109c900) 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 (0x0x7f9e910e64e0) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f9e910e6b40) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f9e90d3b900) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f9e90d728a0) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f9e90dff3c0) 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 (0x0x7f9e90e01068) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f9e90dff360) 0
+ primary-for QScreen (0x0x7f9e90e01068)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f9e90dff600) 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 (0x0x7f9e90e010d0) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7f9e90dff5a0) 0
+ primary-for QInputDevice (0x0x7f9e90e010d0)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f9e90e4e240) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f9e90e65ba0) 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 (0x0x7f9e90e67dd0) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7f9e90e67e38) 0
+ primary-for QPointingDevice (0x0x7f9e90e67dd0)
+ QObject (0x0x7f9e90e65b40) 0
+ primary-for QInputDevice (0x0x7f9e90e67e38)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f9e90e943c0) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f9e90ee43c0) 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 (0x0x7f9e90f166e8) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f9e90f09f00) 0
+ primary-for QInputEvent (0x0x7f9e90f166e8)
+
+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 (0x0x7f9e90f16750) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7f9e90f167b8) 0
+ primary-for QPointerEvent (0x0x7f9e90f16750)
+ QEvent (0x0x7f9e90f251e0) 0
+ primary-for QInputEvent (0x0x7f9e90f167b8)
+
+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 (0x0x7f9e90f16b60) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7f9e90f16bc8) 0
+ primary-for QSinglePointEvent (0x0x7f9e90f16b60)
+ QInputEvent (0x0x7f9e90f16c30) 0
+ primary-for QPointerEvent (0x0x7f9e90f16bc8)
+ QEvent (0x0x7f9e90f25840) 0
+ primary-for QInputEvent (0x0x7f9e90f16c30)
+
+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 (0x0x7f9e90f16c98) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7f9e90f16d00) 0
+ primary-for QEnterEvent (0x0x7f9e90f16c98)
+ QPointerEvent (0x0x7f9e90f16d68) 0
+ primary-for QSinglePointEvent (0x0x7f9e90f16d00)
+ QInputEvent (0x0x7f9e90f16dd0) 0
+ primary-for QPointerEvent (0x0x7f9e90f16d68)
+ QEvent (0x0x7f9e90f25b40) 0
+ primary-for QInputEvent (0x0x7f9e90f16dd0)
+
+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 (0x0x7f9e90f16e38) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7f9e90f16ea0) 0
+ primary-for QMouseEvent (0x0x7f9e90f16e38)
+ QPointerEvent (0x0x7f9e90f16f08) 0
+ primary-for QSinglePointEvent (0x0x7f9e90f16ea0)
+ QInputEvent (0x0x7f9e90f16f70) 0
+ primary-for QPointerEvent (0x0x7f9e90f16f08)
+ QEvent (0x0x7f9e90f25f00) 0
+ primary-for QInputEvent (0x0x7f9e90f16f70)
+
+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 (0x0x7f9e90f16af8) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7f9e90b96000) 0
+ primary-for QHoverEvent (0x0x7f9e90f16af8)
+ QPointerEvent (0x0x7f9e90b96068) 0
+ primary-for QSinglePointEvent (0x0x7f9e90b96000)
+ QInputEvent (0x0x7f9e90b960d0) 0
+ primary-for QPointerEvent (0x0x7f9e90b96068)
+ QEvent (0x0x7f9e90b932a0) 0
+ primary-for QInputEvent (0x0x7f9e90b960d0)
+
+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 (0x0x7f9e90b96138) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7f9e90b961a0) 0
+ primary-for QWheelEvent (0x0x7f9e90b96138)
+ QPointerEvent (0x0x7f9e90b96208) 0
+ primary-for QSinglePointEvent (0x0x7f9e90b961a0)
+ QInputEvent (0x0x7f9e90b96270) 0
+ primary-for QPointerEvent (0x0x7f9e90b96208)
+ QEvent (0x0x7f9e90b934e0) 0
+ primary-for QInputEvent (0x0x7f9e90b96270)
+
+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 (0x0x7f9e90b962d8) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7f9e90b96340) 0
+ primary-for QTabletEvent (0x0x7f9e90b962d8)
+ QPointerEvent (0x0x7f9e90b963a8) 0
+ primary-for QSinglePointEvent (0x0x7f9e90b96340)
+ QInputEvent (0x0x7f9e90b96410) 0
+ primary-for QPointerEvent (0x0x7f9e90b963a8)
+ QEvent (0x0x7f9e90b937e0) 0
+ primary-for QInputEvent (0x0x7f9e90b96410)
+
+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 (0x0x7f9e90b96478) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7f9e90b964e0) 0
+ primary-for QNativeGestureEvent (0x0x7f9e90b96478)
+ QPointerEvent (0x0x7f9e90b96548) 0
+ primary-for QSinglePointEvent (0x0x7f9e90b964e0)
+ QInputEvent (0x0x7f9e90b965b0) 0
+ primary-for QPointerEvent (0x0x7f9e90b96548)
+ QEvent (0x0x7f9e90b93ea0) 0
+ primary-for QInputEvent (0x0x7f9e90b965b0)
+
+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 (0x0x7f9e90b96618) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f9e90b96680) 0
+ primary-for QKeyEvent (0x0x7f9e90b96618)
+ QEvent (0x0x7f9e90bc12a0) 0
+ primary-for QInputEvent (0x0x7f9e90b96680)
+
+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 (0x0x7f9e90b966e8) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f9e90bc16c0) 0
+ primary-for QFocusEvent (0x0x7f9e90b966e8)
+
+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 (0x0x7f9e90b96750) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f9e90bc17e0) 0
+ primary-for QPaintEvent (0x0x7f9e90b96750)
+
+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 (0x0x7f9e90b967b8) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f9e90bc1900) 0
+ primary-for QMoveEvent (0x0x7f9e90b967b8)
+
+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 (0x0x7f9e90b96820) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f9e90bc1a20) 0
+ primary-for QExposeEvent (0x0x7f9e90b96820)
+
+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 (0x0x7f9e90b96888) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f9e90bc1ae0) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f9e90b96888)
+
+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 (0x0x7f9e90b968f0) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f9e90bc1ba0) 0
+ primary-for QResizeEvent (0x0x7f9e90b968f0)
+
+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 (*)(...))QCloseEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7f9e90b96958) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f9e90bc1cc0) 0
+ primary-for QCloseEvent (0x0x7f9e90b96958)
+
+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 (*)(...))QIconDragEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7f9e90b969c0) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f9e90bc1d20) 0
+ primary-for QIconDragEvent (0x0x7f9e90b969c0)
+
+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 (*)(...))QShowEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7f9e90b96a28) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f9e90bc1d80) 0
+ primary-for QShowEvent (0x0x7f9e90b96a28)
+
+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 (*)(...))QHideEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7f9e90b96a90) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f9e90bc1de0) 0
+ primary-for QHideEvent (0x0x7f9e90b96a90)
+
+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 (0x0x7f9e90b96af8) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f9e90b96b60) 0
+ primary-for QContextMenuEvent (0x0x7f9e90b96af8)
+ QEvent (0x0x7f9e90bc1e40) 0
+ primary-for QInputEvent (0x0x7f9e90b96b60)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f9e90c0c1e0) 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 (0x0x7f9e90b96bc8) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f9e90c0c180) 0
+ primary-for QInputMethodEvent (0x0x7f9e90b96bc8)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f9e90c76180) 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 (0x0x7f9e90c6f888) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f9e90c76120) 0
+ primary-for QInputMethodQueryEvent (0x0x7f9e90c6f888)
+
+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 (0x0x7f9e90cd34e0) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f9e90cc9a20) 0
+ primary-for QDropEvent (0x0x7f9e90cd34e0)
+
+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 (0x0x7f9e90cd3548) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f9e90cd35b0) 0
+ primary-for QDragMoveEvent (0x0x7f9e90cd3548)
+ QEvent (0x0x7f9e90cc9f00) 0
+ primary-for QDropEvent (0x0x7f9e90cd35b0)
+
+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 (*)(...))QDragEnterEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7f9e90cd3618) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f9e90cd3680) 0
+ primary-for QDragEnterEvent (0x0x7f9e90cd3618)
+ QDropEvent (0x0x7f9e90cd36e8) 0
+ primary-for QDragMoveEvent (0x0x7f9e90cd3680)
+ QEvent (0x0x7f9e90cec180) 0
+ primary-for QDropEvent (0x0x7f9e90cd36e8)
+
+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 (*)(...))QDragLeaveEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7f9e90cd3750) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f9e90cec1e0) 0
+ primary-for QDragLeaveEvent (0x0x7f9e90cd3750)
+
+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 (0x0x7f9e90cd37b8) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f9e90cec240) 0
+ primary-for QHelpEvent (0x0x7f9e90cd37b8)
+
+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 (0x0x7f9e90cd3820) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f9e90cec4e0) 0
+ primary-for QStatusTipEvent (0x0x7f9e90cd3820)
+
+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 (0x0x7f9e90cd3888) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f9e90cec5a0) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f9e90cd3888)
+
+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 (0x0x7f9e90cd38f0) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f9e90cec660) 0
+ primary-for QActionEvent (0x0x7f9e90cd38f0)
+
+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 (0x0x7f9e90cd3958) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f9e90cec780) 0
+ primary-for QFileOpenEvent (0x0x7f9e90cd3958)
+
+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 (0x0x7f9e90cd39c0) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f9e90cec8a0) 0
+ primary-for QToolBarChangeEvent (0x0x7f9e90cd39c0)
+
+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 (0x0x7f9e90cd3a28) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f9e90cec960) 0
+ primary-for QShortcutEvent (0x0x7f9e90cd3a28)
+
+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 (0x0x7f9e90cd3a90) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f9e90cecae0) 0
+ primary-for QWindowStateChangeEvent (0x0x7f9e90cd3a90)
+
+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 (0x0x7f9e90cd3af8) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7f9e90cd3b60) 0
+ primary-for QTouchEvent (0x0x7f9e90cd3af8)
+ QInputEvent (0x0x7f9e90cd3bc8) 0
+ primary-for QPointerEvent (0x0x7f9e90cd3b60)
+ QEvent (0x0x7f9e90cecba0) 0
+ primary-for QInputEvent (0x0x7f9e90cd3bc8)
+
+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 (0x0x7f9e90cd3c30) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f9e90cecd20) 0
+ primary-for QScrollPrepareEvent (0x0x7f9e90cd3c30)
+
+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 (0x0x7f9e90cd3c98) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f9e90cecf00) 0
+ primary-for QScrollEvent (0x0x7f9e90cd3c98)
+
+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 (0x0x7f9e90cd3d00) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f9e9093b0c0) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f9e90cd3d00)
+
+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 (0x0x7f9e90cd3d68) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f9e9093b1e0) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f9e90cd3d68)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f9e9093b2a0) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f9e90997600) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f9e909977e0) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f9e909e2b40) 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 (0x0x7f9e90a32540) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f9e90a327e0) 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 (0x0x7f9e90a2faf8) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f9e90a32780) 0
+ primary-for QTextDocument (0x0x7f9e90a2faf8)
+
+Class QBrushDataPointerDeleter
+ size=1 align=1
+ base size=0 base align=1
+QBrushDataPointerDeleter (0x0x7f9e90a88180) 0 empty
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f9e90a881e0) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f9e90793f60) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f9e907aa1e0) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f9e907aa180) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f9e907a58f0) 0
+ QGradient (0x0x7f9e90804060) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f9e907a5958) 0
+ QGradient (0x0x7f9e90804180) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f9e907a59c0) 0
+ QGradient (0x0x7f9e908042a0) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f9e90804360) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f9e9084bcc0) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f9e9084bc60) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f9e9089a1e0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f9e908b4ea0) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f9e9054e888) 0
+ QTextFormat (0x0x7f9e9056e1e0) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f9e905f1750) 0
+ QTextFormat (0x0x7f9e905f9000) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f9e906243a8) 0
+ QTextFormat (0x0x7f9e90625540) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f9e906554e0) 0
+ QTextCharFormat (0x0x7f9e90655548) 0
+ QTextFormat (0x0x7f9e906507e0) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f9e9067c1a0) 0
+ QTextFormat (0x0x7f9e906796c0) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f9e906b5820) 0
+ QTextFrameFormat (0x0x7f9e906b5888) 0
+ QTextFormat (0x0x7f9e906bc480) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f9e906e99c0) 0
+ QTextCharFormat (0x0x7f9e906e9a28) 0
+ QTextFormat (0x0x7f9e906e6c00) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f9e9032a180) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f9e90360ae0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f9e90360f00) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f9e90360ea0) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f9e903eb000) 0
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f9e903eb480) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f9e9047b120) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f9e9047b180) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f9e9047b1e0) 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 (0x0x7f9e9045fd00) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f9e9047b0c0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f9e9045fd00)
+
+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 (0x0x7f9e90506780) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f9e90506ba0) 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 (0x0x7f9e90506c00) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f9e90506b40) 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 (0x0x7f9e90133600) 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 (0x0x7f9e901339c0) 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 (0x0x7f9e90133a20) 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 (0x0x7f9e90133a80) 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 (0x0x7f9e90133ae0) 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 (0x0x7f9e90133b40) 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 (0x0x7f9e90133ba0) 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 (0x0x7f9e90133c60) 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 (0x0x7f9e90133cc0) 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 (0x0x7f9e90133d20) 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 (0x0x7f9e9050f2d8) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f9e9017e2a0) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f9e9050f2d8)
+
+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 (0x0x7f9e9050f340) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f9e9017e660) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f9e9050f340)
+
+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 (0x0x7f9e9050f3a8) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f9e9050f410) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f9e9050f3a8)
+ QAccessibleEvent (0x0x7f9e9017ea80) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f9e9050f410)
+
+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 (0x0x7f9e9050f478) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f9e9050f4e0) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f9e9050f478)
+ QAccessibleEvent (0x0x7f9e9017ef00) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f9e9050f4e0)
+
+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 (0x0x7f9e9050f548) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f9e9050f5b0) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f9e9050f548)
+ QAccessibleEvent (0x0x7f9e9019c360) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f9e9050f5b0)
+
+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 (0x0x7f9e9050f618) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f9e9050f680) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f9e9050f618)
+ QAccessibleEvent (0x0x7f9e9019c780) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f9e9050f680)
+
+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 (0x0x7f9e9050f6e8) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f9e9019cc00) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f9e9050f6e8)
+
+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 (0x0x7f9e9050f750) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f9e901b6060) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f9e9050f750)
+
+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 (0x0x7f9e901b6ae0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f9e901b6d80) 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 (0x0x7f9e9050f888) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f9e901b6d20) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f9e9050f888)
+
+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 (0x0x7f9e9050f8f0) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f9e901b6e40) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f9e9050f8f0)
+
+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 (0x0x7f9e9050f958) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f9e9050f9c0) 0
+ primary-for QAccessibleApplication (0x0x7f9e9050f958)
+ QAccessibleInterface (0x0x7f9e901b6ea0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f9e9050f9c0)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f9e901b6f60) 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 (0x0x7f9e9050fa28) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f9e901b6f00) 0
+ primary-for QAccessiblePlugin (0x0x7f9e9050fa28)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f9e901dd0c0) 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 (0x0x7f9e9050fa90) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7f9e901dd060) 0
+ primary-for QAction (0x0x7f9e9050fa90)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f9e901dd9c0) 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 (0x0x7f9e9050faf8) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7f9e901dd960) 0
+ primary-for QActionGroup (0x0x7f9e9050faf8)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f9e901ddc60) 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 (0x0x7f9e90226660) 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 (0x0x7f9e9050fd00) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f9e9050fd68) 0
+ primary-for QBitmap (0x0x7f9e9050fd00)
+ QPaintDevice (0x0x7f9e90226d20) 0
+ primary-for QPixmap (0x0x7f9e9050fd68)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f9e90289660) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f9e902e4120) 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 (0x0x7f9e902a5310) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f9e902e4060) 0
+ primary-for QWindow (0x0x7f9e902a5310)
+ QSurface (0x0x7f9e902e40c0) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f9e902e49c0) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f9e902e4ae0) 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 (0x0x7f9e902dc478) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f9e902e4a80) 0
+ primary-for QClipboard (0x0x7f9e902dc478)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f9e902e4c00) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f9e8ff76ba0) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f9e8ffcfa20) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f9e8ffcfae0) 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 (0x0x7f9e8ffd5af8) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f9e8ffcfa80) 0
+ primary-for QDrag (0x0x7f9e8ffd5af8)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f9e8ffcfcc0) 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 (0x0x7f9e8ffd5b60) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7f9e8ffd5bc8) 0
+ primary-for QFileSystemModel (0x0x7f9e8ffd5b60)
+ QObject (0x0x7f9e8ffcfc60) 0
+ primary-for QAbstractItemModel (0x0x7f9e8ffd5bc8)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f9e90013480) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f9e90063d80) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f9e9009d7e0) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f9e8fde27e0) 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 (0x0x7f9e90118d00) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f9e8fde2780) 0
+ primary-for QGenericPlugin (0x0x7f9e90118d00)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f9e8fde28a0) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f9e8fde2960) 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 (0x0x7f9e90118d68) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f9e8fde2900) 0
+ primary-for QInputMethod (0x0x7f9e90118d68)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f9e8fde2c00) 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 (0x0x7f9e90118dd0) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f9e90118e38) 0
+ primary-for QGuiApplication (0x0x7f9e90118dd0)
+ QObject (0x0x7f9e8fde2ba0) 0
+ primary-for QCoreApplication (0x0x7f9e90118e38)
+
+Class QNativeInterface::QX11Application::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QX11Application::TypeInfo (0x0x7f9e8fde2f00) 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 (0x0x7f9e8fde2ea0) 0 nearly-empty
+ vptr=((& QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE) + 16)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f9e8fe40000) 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 (0x0x7f9e8fde2f60) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f9e8fe400c0) 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 (0x0x7f9e90118ea0) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f9e8fe40060) 0
+ primary-for QIconEnginePlugin (0x0x7f9e90118ea0)
+
+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 (0x0x7f9e8fe40180) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f9e8fe403c0) 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 (0x0x7f9e90118f08) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f9e8fe40360) 0
+ primary-for QImageIOPlugin (0x0x7f9e90118f08)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f9e8fe40900) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f9e8fe409c0) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f9e8fe40a80) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f9e8ff147e0) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f9e8fbbfde0) 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 (0x0x7f9e8fb99750) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f9e8fbbfd80) 0
+ primary-for QMovie (0x0x7f9e8fb99750)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f9e8fc731e0) 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 (0x0x7f9e8fb3ccb0) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f9e8fc73120) 0
+ primary-for QOffscreenSurface (0x0x7f9e8fb3ccb0)
+ QSurface (0x0x7f9e8fc73180) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f9e8fc73480) 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 (0x0x7f9e8fb997b8) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f9e8fc73420) 0
+ primary-for QOpenGLContextGroup (0x0x7f9e8fb997b8)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f9e8fc73660) 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 (0x0x7f9e8fb99820) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f9e8fc73600) 0
+ primary-for QOpenGLContext (0x0x7f9e8fb99820)
+
+Class QNativeInterface::QGLXContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QGLXContext::TypeInfo (0x0x7f9e8fc738a0) 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 (0x0x7f9e8fc73840) 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 (0x0x7f9e8fc73960) 0 empty
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7f9e8fc73900) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f9e8fc739c0) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f9e8f88e120) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f9e8f88e0c0) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f9e8fb99c30) 0
+ QOpenGLFunctions (0x0x7f9e8f5718a0) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f9e8f571c00) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f9e8fb99c98) 0
+ QOpenGLFunctionsPrivate (0x0x7f9e8f571ba0) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f9e8f36d900) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f9e8f4222a0) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f9e8f126480) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f9e8f126420) 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 (0x0x7f9e8f1b40d0) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f9e8f1a9b40) 0
+ primary-for QPagedPaintDevice (0x0x7f9e8f1b40d0)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f9e8f1a9cc0) 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 (0x0x7f9e8f1955b0) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f9e8f195620) 0
+ primary-for QPaintDeviceWindow (0x0x7f9e8f1955b0)
+ QObject (0x0x7f9e8f1a9ba0) 0
+ primary-for QWindow (0x0x7f9e8f195620)
+ QSurface (0x0x7f9e8f1a9c00) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7f9e8f1a9c60) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f9e8f1a9ea0) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f9e8f1a9e40) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f9e8edee360) 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 (0x0x7f9e8ee12b40) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f9e8ee6f180) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f9e8eb4b0c0) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f9e8eb4b060) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f9e8ebdf3c0) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f9e8ebdfba0) 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 (0x0x7f9e8ee34e00) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f9e8ebdfae0) 0
+ primary-for QPdfWriter (0x0x7f9e8ee34e00)
+ QPagedPaintDevice (0x0x7f9e8ebd8af8) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7f9e8ebdfb40) 16
+ primary-for QPagedPaintDevice (0x0x7f9e8ebd8af8)
+
+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 (0x0x7f9e8ebd8b60) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f9e8ebdfd80) 0
+ primary-for QPicture (0x0x7f9e8ebd8b60)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f9e8ec5d840) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f9e8ec5d7e0) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f9e8eca2660) 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 (0x0x7f9e8eca6068) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f9e8ec62770) 0
+ primary-for QRasterWindow (0x0x7f9e8eca6068)
+ QWindow (0x0x7f9e8ec627e0) 0
+ primary-for QPaintDeviceWindow (0x0x7f9e8ec62770)
+ QObject (0x0x7f9e8eca2540) 0
+ primary-for QWindow (0x0x7f9e8ec627e0)
+ QSurface (0x0x7f9e8eca25a0) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7f9e8eca2600) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f9e8ecc8420) 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 (0x0x7f9e8eca6138) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f9e8ecc83c0) 0
+ primary-for QSessionManager (0x0x7f9e8eca6138)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f9e8ecc8600) 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 (0x0x7f9e8eca61a0) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7f9e8ecc85a0) 0
+ primary-for QShortcut (0x0x7f9e8eca61a0)
+
+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 (0x0x7f9e8ecc8ae0) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f9e8e9b4c00) 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 (0x0x7f9e8e9b5270) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f9e8e9b52d8) 0
+ primary-for QStandardItemModel (0x0x7f9e8e9b5270)
+ QObject (0x0x7f9e8e9b4ba0) 0
+ primary-for QAbstractItemModel (0x0x7f9e8e9b52d8)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f9e8e9b4f60) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f9e8ea88de0) 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 (0x0x7f9e8ea84dd0) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f9e8ea88d80) 0
+ primary-for QStyleHints (0x0x7f9e8ea84dd0)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f9e8eabf000) 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 (0x0x7f9e8ea84e38) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f9e8ea88f60) 0
+ primary-for QTextObject (0x0x7f9e8ea84e38)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f9e8eabf1e0) 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 (0x0x7f9e8ea84ea0) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f9e8ea84f08) 0
+ primary-for QTextBlockGroup (0x0x7f9e8ea84ea0)
+ QObject (0x0x7f9e8eabf180) 0
+ primary-for QTextObject (0x0x7f9e8ea84f08)
+
+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 (0x0x7f9e8eabf360) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f9e8eabf420) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f9e8eabf480) 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 (0x0x7f9e8ea84f70) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f9e8ead7000) 0
+ primary-for QTextFrame (0x0x7f9e8ea84f70)
+ QObject (0x0x7f9e8eabf3c0) 0
+ primary-for QTextObject (0x0x7f9e8ead7000)
+
+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 (0x0x7f9e8e721300) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f9e8e7213c0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f9e8e721360) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f9e8e790c00) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f9e8e7caa80) 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 (0x0x7f9e8e7dc1a0) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f9e8e7caa20) 0
+ primary-for QSyntaxHighlighter (0x0x7f9e8e7dc1a0)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f9e8e7cac00) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f9e8e7cac60) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f9e8e7cad20) 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 (0x0x7f9e8e7dc208) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f9e8e7dc270) 0
+ primary-for QTextList (0x0x7f9e8e7dc208)
+ QTextObject (0x0x7f9e8e7dc2d8) 0
+ primary-for QTextBlockGroup (0x0x7f9e8e7dc270)
+ QObject (0x0x7f9e8e7cacc0) 0
+ primary-for QTextObject (0x0x7f9e8e7dc2d8)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f9e8e80a120) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f9e8e80a960) 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 (0x0x7f9e8e7dc340) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f9e8e7dc3a8) 0
+ primary-for QTextTable (0x0x7f9e8e7dc340)
+ QTextObject (0x0x7f9e8e7dc410) 0
+ primary-for QTextFrame (0x0x7f9e8e7dc3a8)
+ QObject (0x0x7f9e8e80a900) 0
+ primary-for QTextObject (0x0x7f9e8e7dc410)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f9e8e80ad20) 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 (0x0x7f9e8e7dc478) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7f9e8e80acc0) 0
+ primary-for QUndoGroup (0x0x7f9e8e7dc478)
+
+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 (0x0x7f9e8e80aea0) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f9e8e80af60) 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 (0x0x7f9e8e7dc4e0) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7f9e8e80af00) 0
+ primary-for QUndoStack (0x0x7f9e8e7dc4e0)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f9e8e84f180) 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 (0x0x7f9e8e7dc548) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f9e8e84f120) 0
+ primary-for QValidator (0x0x7f9e8e7dc548)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f9e8e84f420) 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 (0x0x7f9e8e7dc5b0) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f9e8e7dc618) 0
+ primary-for QIntValidator (0x0x7f9e8e7dc5b0)
+ QObject (0x0x7f9e8e84f3c0) 0
+ primary-for QValidator (0x0x7f9e8e7dc618)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f9e8e84f600) 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 (*)(...))QDoubleValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f9e8e7dc680) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f9e8e7dc6e8) 0
+ primary-for QDoubleValidator (0x0x7f9e8e7dc680)
+ QObject (0x0x7f9e8e84f5a0) 0
+ primary-for QValidator (0x0x7f9e8e7dc6e8)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f9e8e84f9c0) 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 (0x0x7f9e8e7dc750) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f9e8e7dc7b8) 0
+ primary-for QRegularExpressionValidator (0x0x7f9e8e7dc750)
+ QObject (0x0x7f9e8e84f960) 0
+ primary-for QValidator (0x0x7f9e8e7dc7b8)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f9e8e84fba0) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f9e8e84fb40) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f9e8e5650c0) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f9e8e5651e0) 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 (0x0x7f9e8e525070) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7f9e8e565120) 0
+ primary-for QWidget (0x0x7f9e8e525070)
+ QPaintDevice (0x0x7f9e8e565180) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f9e8e66dd80) 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 (0x0x7f9e8e619820) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7f9e8e525380) 0
+ primary-for QAbstractButton (0x0x7f9e8e619820)
+ QObject (0x0x7f9e8e66dcc0) 0
+ primary-for QWidget (0x0x7f9e8e525380)
+ QPaintDevice (0x0x7f9e8e66dd20) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f9e8e6a7000) 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 (0x0x7f9e8e619888) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7f9e8e5253f0) 0
+ primary-for QAbstractSpinBox (0x0x7f9e8e619888)
+ QObject (0x0x7f9e8e66df00) 0
+ primary-for QWidget (0x0x7f9e8e5253f0)
+ QPaintDevice (0x0x7f9e8e66df60) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f9e8e6a7900) 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 (0x0x7f9e8e619a28) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7f9e8e5258c0) 0
+ primary-for QAbstractSlider (0x0x7f9e8e619a28)
+ QObject (0x0x7f9e8e6a7840) 0
+ primary-for QWidget (0x0x7f9e8e5258c0)
+ QPaintDevice (0x0x7f9e8e6a78a0) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f9e8e6a7b40) 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 (0x0x7f9e8e619a90) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7f9e8e619af8) 0
+ primary-for QSlider (0x0x7f9e8e619a90)
+ QWidget (0x0x7f9e8e525e70) 0
+ primary-for QAbstractSlider (0x0x7f9e8e619af8)
+ QObject (0x0x7f9e8e6a7a80) 0
+ primary-for QWidget (0x0x7f9e8e525e70)
+ QPaintDevice (0x0x7f9e8e6a7ae0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f9e8e6a7de0) 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 (0x0x7f9e8e619b60) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7f9e8e6a7d80) 0
+ primary-for QStyle (0x0x7f9e8e619b60)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f9e8e4271e0) 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 (0x0x7f9e8e619e38) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7f9e8e37dc40) 0
+ primary-for QTabBar (0x0x7f9e8e619e38)
+ QObject (0x0x7f9e8e427120) 0
+ primary-for QWidget (0x0x7f9e8e37dc40)
+ QPaintDevice (0x0x7f9e8e427180) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f9e8e4274e0) 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 (0x0x7f9e8e619ea0) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7f9e8e43e2a0) 0
+ primary-for QTabWidget (0x0x7f9e8e619ea0)
+ QObject (0x0x7f9e8e427420) 0
+ primary-for QWidget (0x0x7f9e8e43e2a0)
+ QPaintDevice (0x0x7f9e8e427480) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f9e8e4278a0) 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 (0x0x7f9e8e619f08) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7f9e8e43e5b0) 0
+ primary-for QRubberBand (0x0x7f9e8e619f08)
+ QObject (0x0x7f9e8e4277e0) 0
+ primary-for QWidget (0x0x7f9e8e43e5b0)
+ QPaintDevice (0x0x7f9e8e427840) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f9e8e427cc0) 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 (0x0x7f9e8e619f70) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7f9e8e43e700) 0
+ primary-for QFrame (0x0x7f9e8e619f70)
+ QObject (0x0x7f9e8e427c00) 0
+ primary-for QWidget (0x0x7f9e8e43e700)
+ QPaintDevice (0x0x7f9e8e427c60) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f9e8e4b2540) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f9e8e4b11a0) 0
+ QStyleOption (0x0x7f9e8e4b25a0) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f9e91164b60) 0
+ QStyleOption (0x0x7f9e8e4b27e0) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f9e91164d00) 0
+ QStyleOption (0x0x7f9e8e4b2ea0) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f9e8e4b1208) 0
+ QStyleOption (0x0x7f9e8e13a120) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f9e8e4b1270) 0
+ QStyleOption (0x0x7f9e8e13a360) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7f9e8e4b12d8) 0
+ QStyleOptionHeader (0x0x7f9e8e4b1340) 0
+ QStyleOption (0x0x7f9e8e13a5a0) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f9e8e4b1410) 0
+ QStyleOption (0x0x7f9e8e13a960) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f9e8e4b15b0) 0
+ QStyleOption (0x0x7f9e8e1b9060) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f9e8e4b1888) 0
+ QStyleOption (0x0x7f9e8e1b9900) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f9e8e4b1a28) 0
+ QStyleOption (0x0x7f9e8e291000) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f9e8e4b1a90) 0
+ QStyleOption (0x0x7f9e8e291240) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f9e8e4b1af8) 0
+ QStyleOption (0x0x7f9e8e291480) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f9e8e4b1b60) 0
+ QStyleOption (0x0x7f9e8e2916c0) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f9e8e4b1d00) 0
+ QStyleOption (0x0x7f9e8e291d80) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f9e8e4b1d68) 0
+ QStyleOption (0x0x7f9e8df24000) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f9e8e4b1dd0) 0
+ QStyleOption (0x0x7f9e8df242a0) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f9e8e4b1e38) 0
+ QStyleOptionComplex (0x0x7f9e8e4b1ea0) 0
+ QStyleOption (0x0x7f9e8df24540) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f9e8e4b1f70) 0
+ QStyleOptionComplex (0x0x7f9e8e4b1f08) 0
+ QStyleOption (0x0x7f9e8df24900) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f9e8df47068) 0
+ QStyleOptionComplex (0x0x7f9e8df470d0) 0
+ QStyleOption (0x0x7f9e8df24b40) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f9e8df47270) 0
+ QStyleOptionComplex (0x0x7f9e8df472d8) 0
+ QStyleOption (0x0x7f9e8df8f1e0) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f9e8df47340) 0
+ QStyleOptionComplex (0x0x7f9e8df473a8) 0
+ QStyleOption (0x0x7f9e8df8f420) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f9e8df47410) 0
+ QStyleOptionComplex (0x0x7f9e8df47478) 0
+ QStyleOption (0x0x7f9e8df8f660) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f9e8df474e0) 0
+ QStyleOptionComplex (0x0x7f9e8df47548) 0
+ QStyleOption (0x0x7f9e8df8f8a0) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f9e8df475b0) 0
+ QStyleOption (0x0x7f9e8df8fae0) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f9e8df8fe40) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f9e8df47618) 0
+ QStyleHintReturn (0x0x7f9e8df8fea0) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f9e8df476e8) 0
+ QStyleHintReturn (0x0x7f9e8df8ff00) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f9e8dff10c0) 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 (0x0x7f9e8df477b8) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7f9e8dff1060) 0
+ primary-for QAbstractItemDelegate (0x0x7f9e8df477b8)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f9e8dff1300) 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 (0x0x7f9e8df47820) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7f9e8df47888) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8df47820)
+ QWidget (0x0x7f9e8dfb9a10) 0
+ primary-for QFrame (0x0x7f9e8df47888)
+ QObject (0x0x7f9e8dff1240) 0
+ primary-for QWidget (0x0x7f9e8dfb9a10)
+ QPaintDevice (0x0x7f9e8dff12a0) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f9e8dff1600) 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 (0x0x7f9e8df478f0) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7f9e8df47958) 0
+ primary-for QAbstractItemView (0x0x7f9e8df478f0)
+ QFrame (0x0x7f9e8df479c0) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8df47958)
+ QWidget (0x0x7f9e8dfb9bd0) 0
+ primary-for QFrame (0x0x7f9e8df479c0)
+ QObject (0x0x7f9e8dff1540) 0
+ primary-for QWidget (0x0x7f9e8dfb9bd0)
+ QPaintDevice (0x0x7f9e8dff15a0) 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 (0x0x7f9e8e050150) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7f9e8df47b60) 0
+ primary-for QAccessibleWidget (0x0x7f9e8e050150)
+ QAccessibleInterface (0x0x7f9e8e0a9120) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f9e8df47b60)
+ QAccessibleActionInterface (0x0x7f9e8e0a9180) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f9e8e0a92a0) 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 (0x0x7f9e8df47bc8) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7f9e8df47c30) 0
+ primary-for QApplication (0x0x7f9e8df47bc8)
+ QCoreApplication (0x0x7f9e8df47c98) 0
+ primary-for QGuiApplication (0x0x7f9e8df47c30)
+ QObject (0x0x7f9e8e0a9240) 0
+ primary-for QCoreApplication (0x0x7f9e8df47c98)
+
+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 (0x0x7f9e8e0a9540) 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 (0x0x7f9e8df47d00) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7f9e8e0a9780) 0
+ primary-for QSpacerItem (0x0x7f9e8df47d00)
+
+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 (0x0x7f9e8df47d68) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7f9e8e0a99c0) 0
+ primary-for QWidgetItem (0x0x7f9e8df47d68)
+
+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 (0x0x7f9e8df47dd0) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7f9e8df47e38) 0
+ primary-for QWidgetItemV2 (0x0x7f9e8df47dd0)
+ QLayoutItem (0x0x7f9e8e0a9ba0) 0
+ primary-for QWidgetItem (0x0x7f9e8df47e38)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f9e8e0a9d20) 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 (0x0x7f9e8e050310) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7f9e8e0a9c60) 0
+ primary-for QLayout (0x0x7f9e8e050310)
+ QLayoutItem (0x0x7f9e8e0a9cc0) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f9e8dd2b060) 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 (0x0x7f9e8df47ea0) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7f9e8e050620) 0
+ primary-for QGridLayout (0x0x7f9e8df47ea0)
+ QObject (0x0x7f9e8e0a9f60) 0
+ primary-for QLayout (0x0x7f9e8e050620)
+ QLayoutItem (0x0x7f9e8dd2b000) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f9e8dd2b300) 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 (0x0x7f9e8df47f08) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7f9e8e050690) 0
+ primary-for QBoxLayout (0x0x7f9e8df47f08)
+ QObject (0x0x7f9e8dd2b240) 0
+ primary-for QLayout (0x0x7f9e8e050690)
+ QLayoutItem (0x0x7f9e8dd2b2a0) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f9e8dd2b540) 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 (0x0x7f9e8df47f70) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7f9e8dd60000) 0
+ primary-for QHBoxLayout (0x0x7f9e8df47f70)
+ QLayout (0x0x7f9e8e0509a0) 0
+ primary-for QBoxLayout (0x0x7f9e8dd60000)
+ QObject (0x0x7f9e8dd2b480) 0
+ primary-for QLayout (0x0x7f9e8e0509a0)
+ QLayoutItem (0x0x7f9e8dd2b4e0) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f9e8dd2b6c0) 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 (0x0x7f9e8dd60068) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7f9e8dd600d0) 0
+ primary-for QVBoxLayout (0x0x7f9e8dd60068)
+ QLayout (0x0x7f9e8e050a10) 0
+ primary-for QBoxLayout (0x0x7f9e8dd600d0)
+ QObject (0x0x7f9e8dd2b600) 0
+ primary-for QLayout (0x0x7f9e8e050a10)
+ QLayoutItem (0x0x7f9e8dd2b660) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f9e8dd2b7e0) 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 (0x0x7f9e8dd60138) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7f9e8dd2b780) 0
+ primary-for QButtonGroup (0x0x7f9e8dd60138)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f9e8dd2ba20) 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 (0x0x7f9e8dd601a0) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7f9e8e050a80) 0
+ primary-for QCalendarWidget (0x0x7f9e8dd601a0)
+ QObject (0x0x7f9e8dd2b960) 0
+ primary-for QWidget (0x0x7f9e8e050a80)
+ QPaintDevice (0x0x7f9e8dd2b9c0) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f9e8dd2bea0) 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 (0x0x7f9e8dd60208) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7f9e8dd60270) 0
+ primary-for QCheckBox (0x0x7f9e8dd60208)
+ QWidget (0x0x7f9e8e050e70) 0
+ primary-for QAbstractButton (0x0x7f9e8dd60270)
+ QObject (0x0x7f9e8dd2bde0) 0
+ primary-for QWidget (0x0x7f9e8e050e70)
+ QPaintDevice (0x0x7f9e8dd2be40) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f9e8ddb6120) 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 (0x0x7f9e8dd602d8) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7f9e8e050ee0) 0
+ primary-for QDialog (0x0x7f9e8dd602d8)
+ QObject (0x0x7f9e8ddb6060) 0
+ primary-for QWidget (0x0x7f9e8e050ee0)
+ QPaintDevice (0x0x7f9e8ddb60c0) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f9e8ddb6360) 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 (0x0x7f9e8dd60340) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7f9e8dd603a8) 0
+ primary-for QColorDialog (0x0x7f9e8dd60340)
+ QWidget (0x0x7f9e8ddba070) 0
+ primary-for QDialog (0x0x7f9e8dd603a8)
+ QObject (0x0x7f9e8ddb62a0) 0
+ primary-for QWidget (0x0x7f9e8ddba070)
+ QPaintDevice (0x0x7f9e8ddb6300) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f9e8ddb6a20) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f9e8ddb6b40) 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 (0x0x7f9e8dd60548) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7f9e8dd605b0) 0
+ primary-for QColumnView (0x0x7f9e8dd60548)
+ QAbstractScrollArea (0x0x7f9e8dd60618) 0
+ primary-for QAbstractItemView (0x0x7f9e8dd605b0)
+ QFrame (0x0x7f9e8dd60680) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8dd60618)
+ QWidget (0x0x7f9e8ddba380) 0
+ primary-for QFrame (0x0x7f9e8dd60680)
+ QObject (0x0x7f9e8ddb6a80) 0
+ primary-for QWidget (0x0x7f9e8ddba380)
+ QPaintDevice (0x0x7f9e8ddb6ae0) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f9e8ddb6d80) 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 (0x0x7f9e8dd606e8) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7f9e8ddba3f0) 0
+ primary-for QComboBox (0x0x7f9e8dd606e8)
+ QObject (0x0x7f9e8ddb6cc0) 0
+ primary-for QWidget (0x0x7f9e8ddba3f0)
+ QPaintDevice (0x0x7f9e8ddb6d20) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f9e8de83360) 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 (0x0x7f9e8dd60750) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7f9e8dd607b8) 0
+ primary-for QPushButton (0x0x7f9e8dd60750)
+ QWidget (0x0x7f9e8ddba8c0) 0
+ primary-for QAbstractButton (0x0x7f9e8dd607b8)
+ QObject (0x0x7f9e8de832a0) 0
+ primary-for QWidget (0x0x7f9e8ddba8c0)
+ QPaintDevice (0x0x7f9e8de83300) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f9e8de835a0) 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 (0x0x7f9e8dd60820) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7f9e8dd60888) 0
+ primary-for QCommandLinkButton (0x0x7f9e8dd60820)
+ QAbstractButton (0x0x7f9e8dd608f0) 0
+ primary-for QPushButton (0x0x7f9e8dd60888)
+ QWidget (0x0x7f9e8ddba930) 0
+ primary-for QAbstractButton (0x0x7f9e8dd608f0)
+ QObject (0x0x7f9e8de834e0) 0
+ primary-for QWidget (0x0x7f9e8ddba930)
+ QPaintDevice (0x0x7f9e8de83540) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f9e8de83780) 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 (0x0x7f9e8dd60958) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7f9e8dd609c0) 0
+ primary-for QCommonStyle (0x0x7f9e8dd60958)
+ QObject (0x0x7f9e8de83720) 0
+ primary-for QStyle (0x0x7f9e8dd609c0)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f9e8de83960) 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 (0x0x7f9e8dd60a28) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7f9e8de83900) 0
+ primary-for QCompleter (0x0x7f9e8dd60a28)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f9e8de83cc0) 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 (0x0x7f9e8dd60a90) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7f9e8de83c60) 0
+ primary-for QDataWidgetMapper (0x0x7f9e8dd60a90)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f9e8def7000) 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 (0x0x7f9e8dd60af8) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7f9e8dd60b60) 0
+ primary-for QDateTimeEdit (0x0x7f9e8dd60af8)
+ QWidget (0x0x7f9e8ddbad20) 0
+ primary-for QAbstractSpinBox (0x0x7f9e8dd60b60)
+ QObject (0x0x7f9e8de83f00) 0
+ primary-for QWidget (0x0x7f9e8ddbad20)
+ QPaintDevice (0x0x7f9e8de83f60) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f9e8def75a0) 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 (0x0x7f9e8dd60d00) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7f9e8dd60d68) 0
+ primary-for QTimeEdit (0x0x7f9e8dd60d00)
+ QAbstractSpinBox (0x0x7f9e8dd60dd0) 0
+ primary-for QDateTimeEdit (0x0x7f9e8dd60d68)
+ QWidget (0x0x7f9e8def82a0) 0
+ primary-for QAbstractSpinBox (0x0x7f9e8dd60dd0)
+ QObject (0x0x7f9e8def74e0) 0
+ primary-for QWidget (0x0x7f9e8def82a0)
+ QPaintDevice (0x0x7f9e8def7540) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f9e8def7720) 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 (0x0x7f9e8dd60e38) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7f9e8dd60ea0) 0
+ primary-for QDateEdit (0x0x7f9e8dd60e38)
+ QAbstractSpinBox (0x0x7f9e8dd60f08) 0
+ primary-for QDateTimeEdit (0x0x7f9e8dd60ea0)
+ QWidget (0x0x7f9e8def8310) 0
+ primary-for QAbstractSpinBox (0x0x7f9e8dd60f08)
+ QObject (0x0x7f9e8def7660) 0
+ primary-for QWidget (0x0x7f9e8def8310)
+ QPaintDevice (0x0x7f9e8def76c0) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f9e8def7b40) 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 (0x0x7f9e8dd60f70) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7f9e8db88000) 0
+ primary-for QDial (0x0x7f9e8dd60f70)
+ QWidget (0x0x7f9e8def8380) 0
+ primary-for QAbstractSlider (0x0x7f9e8db88000)
+ QObject (0x0x7f9e8def7a80) 0
+ primary-for QWidget (0x0x7f9e8def8380)
+ QPaintDevice (0x0x7f9e8def7ae0) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f9e8def7d80) 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 (0x0x7f9e8db88068) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7f9e8def83f0) 0
+ primary-for QDialogButtonBox (0x0x7f9e8db88068)
+ QObject (0x0x7f9e8def7cc0) 0
+ primary-for QWidget (0x0x7f9e8def83f0)
+ QPaintDevice (0x0x7f9e8def7d20) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f9e8dbc7540) 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 (0x0x7f9e8db88208) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7f9e8db9d4d0) 0
+ primary-for QDockWidget (0x0x7f9e8db88208)
+ QObject (0x0x7f9e8dbc7480) 0
+ primary-for QWidget (0x0x7f9e8db9d4d0)
+ QPaintDevice (0x0x7f9e8dbc74e0) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f9e8dbc7cc0) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f9e8dc91360) 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 (0x0x7f9e8db884e0) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7f9e8db88548) 0
+ primary-for QErrorMessage (0x0x7f9e8db884e0)
+ QWidget (0x0x7f9e8db9dee0) 0
+ primary-for QDialog (0x0x7f9e8db88548)
+ QObject (0x0x7f9e8dc912a0) 0
+ primary-for QWidget (0x0x7f9e8db9dee0)
+ QPaintDevice (0x0x7f9e8dc91300) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f9e8dc915a0) 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 (0x0x7f9e8db885b0) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7f9e8db88618) 0
+ primary-for QFileDialog (0x0x7f9e8db885b0)
+ QWidget (0x0x7f9e8db9df50) 0
+ primary-for QDialog (0x0x7f9e8db88618)
+ QObject (0x0x7f9e8dc914e0) 0
+ primary-for QWidget (0x0x7f9e8db9df50)
+ QPaintDevice (0x0x7f9e8dc91540) 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 (0x0x7f9e8db887b8) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7f9e8d955000) 0
+ primary-for QFileIconProvider (0x0x7f9e8db887b8)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f9e8d9551e0) 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 (0x0x7f9e8db88820) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7f9e8dcbd8c0) 0
+ primary-for QFocusFrame (0x0x7f9e8db88820)
+ QObject (0x0x7f9e8d955120) 0
+ primary-for QWidget (0x0x7f9e8dcbd8c0)
+ QPaintDevice (0x0x7f9e8d955180) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f9e8d955420) 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 (0x0x7f9e8db88888) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7f9e8db888f0) 0
+ primary-for QFontComboBox (0x0x7f9e8db88888)
+ QWidget (0x0x7f9e8dcbd930) 0
+ primary-for QComboBox (0x0x7f9e8db888f0)
+ QObject (0x0x7f9e8d955360) 0
+ primary-for QWidget (0x0x7f9e8dcbd930)
+ QPaintDevice (0x0x7f9e8d9553c0) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f9e8d955ba0) 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 (0x0x7f9e8db88a90) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7f9e8db88af8) 0
+ primary-for QFontDialog (0x0x7f9e8db88a90)
+ QWidget (0x0x7f9e8dcbdbd0) 0
+ primary-for QDialog (0x0x7f9e8db88af8)
+ QObject (0x0x7f9e8d955ae0) 0
+ primary-for QWidget (0x0x7f9e8dcbdbd0)
+ QPaintDevice (0x0x7f9e8d955b40) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f9e8da0f360) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f9e8da0f3c0) 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 (0x0x7f9e8db88c98) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7f9e8dcbdee0) 0
+ primary-for QFormLayout (0x0x7f9e8db88c98)
+ QObject (0x0x7f9e8da0f2a0) 0
+ primary-for QLayout (0x0x7f9e8dcbdee0)
+ QLayoutItem (0x0x7f9e8da0f300) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f9e8daa8720) 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 (0x0x7f9e8da8e820) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7f9e8daa86c0) 0
+ primary-for QGesture (0x0x7f9e8da8e820)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f9e8daa8900) 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 (0x0x7f9e8da8e888) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7f9e8da8e8f0) 0
+ primary-for QPanGesture (0x0x7f9e8da8e888)
+ QObject (0x0x7f9e8daa88a0) 0
+ primary-for QGesture (0x0x7f9e8da8e8f0)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f9e8daa8ae0) 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 (0x0x7f9e8da8e958) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7f9e8da8e9c0) 0
+ primary-for QPinchGesture (0x0x7f9e8da8e958)
+ QObject (0x0x7f9e8daa8a80) 0
+ primary-for QGesture (0x0x7f9e8da8e9c0)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f9e8d7ae480) 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 (0x0x7f9e8d7b52d8) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7f9e8d7b5340) 0
+ primary-for QSwipeGesture (0x0x7f9e8d7b52d8)
+ QObject (0x0x7f9e8d7ae420) 0
+ primary-for QGesture (0x0x7f9e8d7b5340)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f9e8d7ae720) 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 (0x0x7f9e8d7b53a8) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7f9e8d7b5410) 0
+ primary-for QTapGesture (0x0x7f9e8d7b53a8)
+ QObject (0x0x7f9e8d7ae6c0) 0
+ primary-for QGesture (0x0x7f9e8d7b5410)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f9e8d7ae900) 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 (0x0x7f9e8d7b5478) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7f9e8d7b54e0) 0
+ primary-for QTapAndHoldGesture (0x0x7f9e8d7b5478)
+ QObject (0x0x7f9e8d7ae8a0) 0
+ primary-for QGesture (0x0x7f9e8d7b54e0)
+
+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 (0x0x7f9e8d7b5548) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7f9e8d7aea80) 0
+ primary-for QGestureEvent (0x0x7f9e8d7b5548)
+
+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 (0x0x7f9e8d8dc660) 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 (0x0x7f9e8d8dcb40) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f9e8d6270c0) 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 (0x0x7f9e8d550540) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7f9e8d627000) 0
+ primary-for QGraphicsObject (0x0x7f9e8d550540)
+ QGraphicsItem (0x0x7f9e8d627060) 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 (0x0x7f9e8d8e9750) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7f9e8d627180) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f9e8d8e9750)
+
+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 (0x0x7f9e8d8e97b8) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f9e8d8e9820) 0
+ primary-for QGraphicsPathItem (0x0x7f9e8d8e97b8)
+ QGraphicsItem (0x0x7f9e8d6272a0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f9e8d8e9820)
+
+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 (0x0x7f9e8d8e9888) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f9e8d8e98f0) 0
+ primary-for QGraphicsRectItem (0x0x7f9e8d8e9888)
+ QGraphicsItem (0x0x7f9e8d6273c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f9e8d8e98f0)
+
+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 (0x0x7f9e8d8e9958) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f9e8d8e99c0) 0
+ primary-for QGraphicsEllipseItem (0x0x7f9e8d8e9958)
+ QGraphicsItem (0x0x7f9e8d627540) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f9e8d8e99c0)
+
+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 (0x0x7f9e8d8e9a28) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f9e8d8e9a90) 0
+ primary-for QGraphicsPolygonItem (0x0x7f9e8d8e9a28)
+ QGraphicsItem (0x0x7f9e8d6276c0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f9e8d8e9a90)
+
+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 (0x0x7f9e8d8e9af8) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7f9e8d6277e0) 0
+ primary-for QGraphicsLineItem (0x0x7f9e8d8e9af8)
+
+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 (0x0x7f9e8d8e9b60) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7f9e8d627960) 0
+ primary-for QGraphicsPixmapItem (0x0x7f9e8d8e9b60)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f9e8d627ba0) 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 (0x0x7f9e8d8e9bc8) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7f9e8d5509a0) 0
+ primary-for QGraphicsTextItem (0x0x7f9e8d8e9bc8)
+ QObject (0x0x7f9e8d627ae0) 0
+ primary-for QGraphicsObject (0x0x7f9e8d5509a0)
+ QGraphicsItem (0x0x7f9e8d627b40) 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 (0x0x7f9e8d8e9d00) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f9e8d8e9d68) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f9e8d8e9d00)
+ QGraphicsItem (0x0x7f9e8d627e40) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f9e8d8e9d68)
+
+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 (0x0x7f9e8d8e9dd0) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7f9e8d627f60) 0
+ primary-for QGraphicsItemGroup (0x0x7f9e8d8e9dd0)
+
+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 (0x0x7f9e8d6d96c0) 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 (0x0x7f9e8d8e9f70) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7f9e8d6d9f60) 0
+ primary-for QGraphicsLayout (0x0x7f9e8d8e9f70)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f9e8d32f480) 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 (0x0x7f9e8d3350d0) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7f9e8d32f420) 0
+ primary-for QGraphicsAnchor (0x0x7f9e8d3350d0)
+
+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 (0x0x7f9e8d335138) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7f9e8d3351a0) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f9e8d335138)
+ QGraphicsLayoutItem (0x0x7f9e8d32f600) 0
+ primary-for QGraphicsLayout (0x0x7f9e8d3351a0)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f9e8d32f780) 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 (0x0x7f9e8d335208) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7f9e8d32f720) 0
+ primary-for QGraphicsEffect (0x0x7f9e8d335208)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f9e8d32fea0) 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 (0x0x7f9e8d3353a8) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7f9e8d335410) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f9e8d3353a8)
+ QObject (0x0x7f9e8d32fe40) 0
+ primary-for QGraphicsEffect (0x0x7f9e8d335410)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f9e8d3c70c0) 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 (0x0x7f9e8d335478) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7f9e8d3354e0) 0
+ primary-for QGraphicsBlurEffect (0x0x7f9e8d335478)
+ QObject (0x0x7f9e8d3c7060) 0
+ primary-for QGraphicsEffect (0x0x7f9e8d3354e0)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f9e8d3c78a0) 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 (0x0x7f9e8d335680) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7f9e8d3356e8) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f9e8d335680)
+ QObject (0x0x7f9e8d3c7840) 0
+ primary-for QGraphicsEffect (0x0x7f9e8d3356e8)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f9e8d3c7cc0) 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 (0x0x7f9e8d335750) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7f9e8d3357b8) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f9e8d335750)
+ QObject (0x0x7f9e8d3c7c60) 0
+ primary-for QGraphicsEffect (0x0x7f9e8d3357b8)
+
+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 (0x0x7f9e8d335820) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7f9e8d335888) 0
+ primary-for QGraphicsGridLayout (0x0x7f9e8d335820)
+ QGraphicsLayoutItem (0x0x7f9e8d3c7e40) 0
+ primary-for QGraphicsLayout (0x0x7f9e8d335888)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f9e8d467060) 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 (0x0x7f9e8d3359c0) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7f9e8d467000) 0
+ primary-for QGraphicsItemAnimation (0x0x7f9e8d3359c0)
+
+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 (0x0x7f9e8d335a28) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7f9e8d335a90) 0
+ primary-for QGraphicsLinearLayout (0x0x7f9e8d335a28)
+ QGraphicsLayoutItem (0x0x7f9e8d467120) 0
+ primary-for QGraphicsLayout (0x0x7f9e8d335a90)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f9e8d467420) 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 (0x0x7f9e8d6d1620) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7f9e8d6d1690) 0
+ primary-for QGraphicsWidget (0x0x7f9e8d6d1620)
+ QObject (0x0x7f9e8d467300) 0
+ primary-for QGraphicsObject (0x0x7f9e8d6d1690)
+ QGraphicsItem (0x0x7f9e8d467360) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7f9e8d4673c0) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f9e8d4678a0) 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 (0x0x7f9e8d335bc8) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7f9e8d6d17e0) 0
+ primary-for QGraphicsProxyWidget (0x0x7f9e8d335bc8)
+ QGraphicsObject (0x0x7f9e8d6d1850) 0
+ primary-for QGraphicsWidget (0x0x7f9e8d6d17e0)
+ QObject (0x0x7f9e8d467780) 0
+ primary-for QGraphicsObject (0x0x7f9e8d6d1850)
+ QGraphicsItem (0x0x7f9e8d4677e0) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7f9e8d467840) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f9e8d467c00) 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 (0x0x7f9e8d335dd0) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7f9e8d467ba0) 0
+ primary-for QGraphicsScene (0x0x7f9e8d335dd0)
+
+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 (0x0x7f9e8d133820) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7f9e8d1d20c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f9e8d133820)
+
+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 (0x0x7f9e8d133888) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f9e8d1338f0) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f9e8d133888)
+ QEvent (0x0x7f9e8d1d22a0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f9e8d1338f0)
+
+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 (0x0x7f9e8d133958) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f9e8d1339c0) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f9e8d133958)
+ QEvent (0x0x7f9e8d1d23c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f9e8d1339c0)
+
+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 (0x0x7f9e8d133a28) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f9e8d133a90) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f9e8d133a28)
+ QEvent (0x0x7f9e8d1d24e0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f9e8d133a90)
+
+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 (0x0x7f9e8d133af8) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f9e8d133b60) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f9e8d133af8)
+ QEvent (0x0x7f9e8d1d2600) 0
+ primary-for QGraphicsSceneEvent (0x0x7f9e8d133b60)
+
+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 (0x0x7f9e8d133bc8) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f9e8d133c30) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f9e8d133bc8)
+ QEvent (0x0x7f9e8d1d2720) 0
+ primary-for QGraphicsSceneEvent (0x0x7f9e8d133c30)
+
+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 (0x0x7f9e8d133c98) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f9e8d133d00) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f9e8d133c98)
+ QEvent (0x0x7f9e8d1d2840) 0
+ primary-for QGraphicsSceneEvent (0x0x7f9e8d133d00)
+
+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 (0x0x7f9e8d133d68) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f9e8d133dd0) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f9e8d133d68)
+ QEvent (0x0x7f9e8d1d2960) 0
+ primary-for QGraphicsSceneEvent (0x0x7f9e8d133dd0)
+
+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 (0x0x7f9e8d133e38) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f9e8d133ea0) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f9e8d133e38)
+ QEvent (0x0x7f9e8d1d2a80) 0
+ primary-for QGraphicsSceneEvent (0x0x7f9e8d133ea0)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f9e8d1d2c00) 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 (0x0x7f9e8d133f08) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7f9e8d1d2ba0) 0
+ primary-for QGraphicsTransform (0x0x7f9e8d133f08)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f9e8d1d2de0) 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 (0x0x7f9e8d133f70) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7f9e8d1337b8) 0
+ primary-for QGraphicsScale (0x0x7f9e8d133f70)
+ QObject (0x0x7f9e8d1d2d80) 0
+ primary-for QGraphicsTransform (0x0x7f9e8d1337b8)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f9e8d254000) 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 (0x0x7f9e8d250000) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7f9e8d250068) 0
+ primary-for QGraphicsRotation (0x0x7f9e8d250000)
+ QObject (0x0x7f9e8d1d2f60) 0
+ primary-for QGraphicsTransform (0x0x7f9e8d250068)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f9e8d254240) 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 (0x0x7f9e8d2500d0) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7f9e8d250138) 0
+ primary-for QScrollArea (0x0x7f9e8d2500d0)
+ QFrame (0x0x7f9e8d2501a0) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8d250138)
+ QWidget (0x0x7f9e8d25d000) 0
+ primary-for QFrame (0x0x7f9e8d2501a0)
+ QObject (0x0x7f9e8d254180) 0
+ primary-for QWidget (0x0x7f9e8d25d000)
+ QPaintDevice (0x0x7f9e8d2541e0) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f9e8d254480) 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 (0x0x7f9e8d250208) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7f9e8d250270) 0
+ primary-for QGraphicsView (0x0x7f9e8d250208)
+ QFrame (0x0x7f9e8d2502d8) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8d250270)
+ QWidget (0x0x7f9e8d25d070) 0
+ primary-for QFrame (0x0x7f9e8d2502d8)
+ QObject (0x0x7f9e8d2543c0) 0
+ primary-for QWidget (0x0x7f9e8d25d070)
+ QPaintDevice (0x0x7f9e8d254420) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f9e8cf47660) 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 (0x0x7f9e8d2505b0) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7f9e8d25d7e0) 0
+ primary-for QGroupBox (0x0x7f9e8d2505b0)
+ QObject (0x0x7f9e8cf475a0) 0
+ primary-for QWidget (0x0x7f9e8d25d7e0)
+ QPaintDevice (0x0x7f9e8cf47600) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f9e8cf478a0) 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 (0x0x7f9e8d250618) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7f9e8d250680) 0
+ primary-for QHeaderView (0x0x7f9e8d250618)
+ QAbstractScrollArea (0x0x7f9e8d2506e8) 0
+ primary-for QAbstractItemView (0x0x7f9e8d250680)
+ QFrame (0x0x7f9e8d250750) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8d2506e8)
+ QWidget (0x0x7f9e8d25d850) 0
+ primary-for QFrame (0x0x7f9e8d250750)
+ QObject (0x0x7f9e8cf477e0) 0
+ primary-for QWidget (0x0x7f9e8d25d850)
+ QPaintDevice (0x0x7f9e8cf47840) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f9e8cf47d20) 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 (0x0x7f9e8d2507b8) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7f9e8d25daf0) 0
+ primary-for QLineEdit (0x0x7f9e8d2507b8)
+ QObject (0x0x7f9e8cf47c60) 0
+ primary-for QWidget (0x0x7f9e8d25daf0)
+ QPaintDevice (0x0x7f9e8cf47cc0) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f9e8cfdb120) 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 (0x0x7f9e8d250820) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7f9e8d250888) 0
+ primary-for QInputDialog (0x0x7f9e8d250820)
+ QWidget (0x0x7f9e8d25de00) 0
+ primary-for QDialog (0x0x7f9e8d250888)
+ QObject (0x0x7f9e8cfdb060) 0
+ primary-for QWidget (0x0x7f9e8d25de00)
+ QPaintDevice (0x0x7f9e8cfdb0c0) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f9e8cfdb780) 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 (0x0x7f9e8d250a28) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f9e8d250a90) 0
+ primary-for QItemDelegate (0x0x7f9e8d250a28)
+ QObject (0x0x7f9e8cfdb720) 0
+ primary-for QAbstractItemDelegate (0x0x7f9e8d250a90)
+
+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 (0x0x7f9e8cfdb900) 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 (0x0x7f9e8cfdbc60) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f9e8d0a3180) 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 (*)(...))QKeySequenceEdit::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 (0x0x7f9e8d250bc8) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7f9e8cfe5150) 0
+ primary-for QKeySequenceEdit (0x0x7f9e8d250bc8)
+ QObject (0x0x7f9e8d0a30c0) 0
+ primary-for QWidget (0x0x7f9e8cfe5150)
+ QPaintDevice (0x0x7f9e8d0a3120) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f9e8d0a33c0) 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 (0x0x7f9e8d250c30) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7f9e8d250c98) 0
+ primary-for QLabel (0x0x7f9e8d250c30)
+ QWidget (0x0x7f9e8cfe51c0) 0
+ primary-for QFrame (0x0x7f9e8d250c98)
+ QObject (0x0x7f9e8d0a3300) 0
+ primary-for QWidget (0x0x7f9e8cfe51c0)
+ QPaintDevice (0x0x7f9e8d0a3360) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f9e8d0a36c0) 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 (0x0x7f9e8d250d00) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7f9e8d250d68) 0
+ primary-for QLCDNumber (0x0x7f9e8d250d00)
+ QWidget (0x0x7f9e8cfe5230) 0
+ primary-for QFrame (0x0x7f9e8d250d68)
+ QObject (0x0x7f9e8d0a3600) 0
+ primary-for QWidget (0x0x7f9e8cfe5230)
+ QPaintDevice (0x0x7f9e8d0a3660) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f9e8d0a3a80) 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 (0x0x7f9e8d250dd0) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7f9e8d250e38) 0
+ primary-for QListView (0x0x7f9e8d250dd0)
+ QAbstractScrollArea (0x0x7f9e8d250ea0) 0
+ primary-for QAbstractItemView (0x0x7f9e8d250e38)
+ QFrame (0x0x7f9e8d250f08) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8d250ea0)
+ QWidget (0x0x7f9e8cfe55b0) 0
+ primary-for QFrame (0x0x7f9e8d250f08)
+ QObject (0x0x7f9e8d0a39c0) 0
+ primary-for QWidget (0x0x7f9e8cfe55b0)
+ QPaintDevice (0x0x7f9e8d0a3a20) 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 (0x0x7f9e8cd21000) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f9e8cd21b40) 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 (0x0x7f9e8d250f70) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7f9e8cd57000) 0
+ primary-for QListWidget (0x0x7f9e8d250f70)
+ QAbstractItemView (0x0x7f9e8cd57068) 0
+ primary-for QListView (0x0x7f9e8cd57000)
+ QAbstractScrollArea (0x0x7f9e8cd570d0) 0
+ primary-for QAbstractItemView (0x0x7f9e8cd57068)
+ QFrame (0x0x7f9e8cd57138) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8cd570d0)
+ QWidget (0x0x7f9e8cfe5bd0) 0
+ primary-for QFrame (0x0x7f9e8cd57138)
+ QObject (0x0x7f9e8cd21a80) 0
+ primary-for QWidget (0x0x7f9e8cfe5bd0)
+ QPaintDevice (0x0x7f9e8cd21ae0) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f9e8cd80060) 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 (0x0x7f9e8cd571a0) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7f9e8cfe5c40) 0
+ primary-for QMainWindow (0x0x7f9e8cd571a0)
+ QObject (0x0x7f9e8cd21f60) 0
+ primary-for QWidget (0x0x7f9e8cfe5c40)
+ QPaintDevice (0x0x7f9e8cd80000) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f9e8cd808a0) 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 (0x0x7f9e8cd57340) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7f9e8cd573a8) 0
+ primary-for QMdiArea (0x0x7f9e8cd57340)
+ QFrame (0x0x7f9e8cd57410) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8cd573a8)
+ QWidget (0x0x7f9e8cfe5f50) 0
+ primary-for QFrame (0x0x7f9e8cd57410)
+ QObject (0x0x7f9e8cd807e0) 0
+ primary-for QWidget (0x0x7f9e8cfe5f50)
+ QPaintDevice (0x0x7f9e8cd80840) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f9e8ce79120) 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 (0x0x7f9e8cd575b0) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7f9e8ce02310) 0
+ primary-for QMdiSubWindow (0x0x7f9e8cd575b0)
+ QObject (0x0x7f9e8ce79060) 0
+ primary-for QWidget (0x0x7f9e8ce02310)
+ QPaintDevice (0x0x7f9e8ce790c0) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f9e8ce797e0) 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 (0x0x7f9e8cd57750) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7f9e8ce02540) 0
+ primary-for QMenu (0x0x7f9e8cd57750)
+ QObject (0x0x7f9e8ce79720) 0
+ primary-for QWidget (0x0x7f9e8ce02540)
+ QPaintDevice (0x0x7f9e8ce79780) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f9e8ce79c60) 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 (0x0x7f9e8cd577b8) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7f9e8ce025b0) 0
+ primary-for QMenuBar (0x0x7f9e8cd577b8)
+ QObject (0x0x7f9e8ce79ba0) 0
+ primary-for QWidget (0x0x7f9e8ce025b0)
+ QPaintDevice (0x0x7f9e8ce79c00) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f9e8ce79ea0) 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 (0x0x7f9e8cd57820) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7f9e8cd57888) 0
+ primary-for QMessageBox (0x0x7f9e8cd57820)
+ QWidget (0x0x7f9e8ce02620) 0
+ primary-for QDialog (0x0x7f9e8cd57888)
+ QObject (0x0x7f9e8ce79de0) 0
+ primary-for QWidget (0x0x7f9e8ce02620)
+ QPaintDevice (0x0x7f9e8ce79e40) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f9e8cb618a0) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f9e8cb61900) 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 (0x0x7f9e8cd57a28) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f9e8cd57a90) 0
+ primary-for QTextEdit (0x0x7f9e8cd57a28)
+ QFrame (0x0x7f9e8cd57af8) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8cd57a90)
+ QWidget (0x0x7f9e8cb349a0) 0
+ primary-for QFrame (0x0x7f9e8cd57af8)
+ QObject (0x0x7f9e8cb617e0) 0
+ primary-for QWidget (0x0x7f9e8cb349a0)
+ QPaintDevice (0x0x7f9e8cb61840) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f9e8cc34300) 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 (0x0x7f9e8cd57c98) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f9e8cd57d00) 0
+ primary-for QPlainTextEdit (0x0x7f9e8cd57c98)
+ QFrame (0x0x7f9e8cd57d68) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8cd57d00)
+ QWidget (0x0x7f9e8cb34d20) 0
+ primary-for QFrame (0x0x7f9e8cd57d68)
+ QObject (0x0x7f9e8cc34240) 0
+ primary-for QWidget (0x0x7f9e8cb34d20)
+ QPaintDevice (0x0x7f9e8cc342a0) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f9e8cc34840) 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 (0x0x7f9e8cd57dd0) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7f9e8cd57e38) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f9e8cd57dd0)
+ QObject (0x0x7f9e8cc347e0) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f9e8cd57e38)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f9e8cc34a80) 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 (0x0x7f9e8cd57ea0) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7f9e8cb34e70) 0
+ primary-for QProgressBar (0x0x7f9e8cd57ea0)
+ QObject (0x0x7f9e8cc349c0) 0
+ primary-for QWidget (0x0x7f9e8cb34e70)
+ QPaintDevice (0x0x7f9e8cc34a20) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f9e8cc34d80) 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 (0x0x7f9e8cd57f08) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7f9e8cd57f70) 0
+ primary-for QProgressDialog (0x0x7f9e8cd57f08)
+ QWidget (0x0x7f9e8ccb7000) 0
+ primary-for QDialog (0x0x7f9e8cd57f70)
+ QObject (0x0x7f9e8cc34cc0) 0
+ primary-for QWidget (0x0x7f9e8ccb7000)
+ QPaintDevice (0x0x7f9e8cc34d20) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f9e8cc34f60) 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 (0x0x7f9e8cccf000) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7f9e8cccf068) 0
+ primary-for QProxyStyle (0x0x7f9e8cccf000)
+ QStyle (0x0x7f9e8cccf0d0) 0
+ primary-for QCommonStyle (0x0x7f9e8cccf068)
+ QObject (0x0x7f9e8cc34f00) 0
+ primary-for QStyle (0x0x7f9e8cccf0d0)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f9e8cce81e0) 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 (0x0x7f9e8cccf138) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7f9e8cccf1a0) 0
+ primary-for QRadioButton (0x0x7f9e8cccf138)
+ QWidget (0x0x7f9e8ccb7070) 0
+ primary-for QAbstractButton (0x0x7f9e8cccf1a0)
+ QObject (0x0x7f9e8cce8120) 0
+ primary-for QWidget (0x0x7f9e8ccb7070)
+ QPaintDevice (0x0x7f9e8cce8180) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f9e8cce8420) 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 (0x0x7f9e8cccf208) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7f9e8cccf270) 0
+ primary-for QScrollBar (0x0x7f9e8cccf208)
+ QWidget (0x0x7f9e8ccb70e0) 0
+ primary-for QAbstractSlider (0x0x7f9e8cccf270)
+ QObject (0x0x7f9e8cce8360) 0
+ primary-for QWidget (0x0x7f9e8ccb70e0)
+ QPaintDevice (0x0x7f9e8cce83c0) 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 (0x0x7f9e8cce85a0) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f9e8c9bea20) 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 (0x0x7f9e8c9d41a0) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7f9e8c9be9c0) 0
+ primary-for QScroller (0x0x7f9e8c9d41a0)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f9e8c9bed20) 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 (0x0x7f9e8c9d4208) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7f9e8c976b60) 0
+ primary-for QSizeGrip (0x0x7f9e8c9d4208)
+ QObject (0x0x7f9e8c9bec60) 0
+ primary-for QWidget (0x0x7f9e8c976b60)
+ QPaintDevice (0x0x7f9e8c9becc0) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f9e8c9bef60) 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 (0x0x7f9e8c9d4270) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f9e8c9d42d8) 0
+ primary-for QSpinBox (0x0x7f9e8c9d4270)
+ QWidget (0x0x7f9e8c976bd0) 0
+ primary-for QAbstractSpinBox (0x0x7f9e8c9d42d8)
+ QObject (0x0x7f9e8c9beea0) 0
+ primary-for QWidget (0x0x7f9e8c976bd0)
+ QPaintDevice (0x0x7f9e8c9bef00) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f9e8ca151e0) 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 (0x0x7f9e8c9d4340) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f9e8c9d43a8) 0
+ primary-for QDoubleSpinBox (0x0x7f9e8c9d4340)
+ QWidget (0x0x7f9e8c976c40) 0
+ primary-for QAbstractSpinBox (0x0x7f9e8c9d43a8)
+ QObject (0x0x7f9e8ca15120) 0
+ primary-for QWidget (0x0x7f9e8c976c40)
+ QPaintDevice (0x0x7f9e8ca15180) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f9e8ca15420) 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 (0x0x7f9e8c9d4410) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7f9e8c976cb0) 0
+ primary-for QSplashScreen (0x0x7f9e8c9d4410)
+ QObject (0x0x7f9e8ca15360) 0
+ primary-for QWidget (0x0x7f9e8c976cb0)
+ QPaintDevice (0x0x7f9e8ca153c0) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f9e8ca15660) 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 (0x0x7f9e8c9d4478) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7f9e8c9d44e0) 0
+ primary-for QSplitter (0x0x7f9e8c9d4478)
+ QWidget (0x0x7f9e8c976d20) 0
+ primary-for QFrame (0x0x7f9e8c9d44e0)
+ QObject (0x0x7f9e8ca155a0) 0
+ primary-for QWidget (0x0x7f9e8c976d20)
+ QPaintDevice (0x0x7f9e8ca15600) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f9e8ca158a0) 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 (0x0x7f9e8c9d4548) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7f9e8c976d90) 0
+ primary-for QSplitterHandle (0x0x7f9e8c9d4548)
+ QObject (0x0x7f9e8ca157e0) 0
+ primary-for QWidget (0x0x7f9e8c976d90)
+ QPaintDevice (0x0x7f9e8ca15840) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f9e8ca15ae0) 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 (0x0x7f9e8c9d45b0) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7f9e8c976e00) 0
+ primary-for QStackedLayout (0x0x7f9e8c9d45b0)
+ QObject (0x0x7f9e8ca15a20) 0
+ primary-for QLayout (0x0x7f9e8c976e00)
+ QLayoutItem (0x0x7f9e8ca15a80) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f9e8ca15de0) 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 (0x0x7f9e8c9d4618) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7f9e8c9d4680) 0
+ primary-for QStackedWidget (0x0x7f9e8c9d4618)
+ QWidget (0x0x7f9e8c976f50) 0
+ primary-for QFrame (0x0x7f9e8c9d4680)
+ QObject (0x0x7f9e8ca15d20) 0
+ primary-for QWidget (0x0x7f9e8c976f50)
+ QPaintDevice (0x0x7f9e8ca15d80) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f9e8ca8e060) 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 (0x0x7f9e8c9d46e8) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7f9e8c976230) 0
+ primary-for QStatusBar (0x0x7f9e8c9d46e8)
+ QObject (0x0x7f9e8ca15f60) 0
+ primary-for QWidget (0x0x7f9e8c976230)
+ QPaintDevice (0x0x7f9e8ca8e000) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f9e8ca8e240) 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 (0x0x7f9e8c9d4750) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f9e8c9d47b8) 0
+ primary-for QStyledItemDelegate (0x0x7f9e8c9d4750)
+ QObject (0x0x7f9e8ca8e1e0) 0
+ primary-for QAbstractItemDelegate (0x0x7f9e8c9d47b8)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f9e8ca8e3c0) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f9e8c9d4820) 0
+ QPainter (0x0x7f9e8ca8e420) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f9e8ca8ec60) 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 (0x0x7f9e8c9d4888) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7f9e8ca8ec00) 0
+ primary-for QStylePlugin (0x0x7f9e8c9d4888)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f9e8ca8ed80) 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 (0x0x7f9e8c9d48f0) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7f9e8ca8ed20) 0
+ primary-for QSystemTrayIcon (0x0x7f9e8c9d48f0)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f9e8cae10c0) 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 (0x0x7f9e8c9d4958) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7f9e8c9d49c0) 0
+ primary-for QTableView (0x0x7f9e8c9d4958)
+ QAbstractScrollArea (0x0x7f9e8c9d4a28) 0
+ primary-for QAbstractItemView (0x0x7f9e8c9d49c0)
+ QFrame (0x0x7f9e8c9d4a90) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8c9d4a28)
+ QWidget (0x0x7f9e8cac94d0) 0
+ primary-for QFrame (0x0x7f9e8c9d4a90)
+ QObject (0x0x7f9e8cae1000) 0
+ primary-for QWidget (0x0x7f9e8cac94d0)
+ QPaintDevice (0x0x7f9e8cae1060) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f9e8cae1240) 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 (0x0x7f9e8cae1720) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f9e8c788ae0) 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 (0x0x7f9e8c72c3a8) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7f9e8c72c410) 0
+ primary-for QTableWidget (0x0x7f9e8c72c3a8)
+ QAbstractItemView (0x0x7f9e8c72c478) 0
+ primary-for QTableView (0x0x7f9e8c72c410)
+ QAbstractScrollArea (0x0x7f9e8c72c4e0) 0
+ primary-for QAbstractItemView (0x0x7f9e8c72c478)
+ QFrame (0x0x7f9e8c72c548) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8c72c4e0)
+ QWidget (0x0x7f9e8cac9700) 0
+ primary-for QFrame (0x0x7f9e8c72c548)
+ QObject (0x0x7f9e8c788a20) 0
+ primary-for QWidget (0x0x7f9e8cac9700)
+ QPaintDevice (0x0x7f9e8c788a80) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f9e8c788ea0) 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 (0x0x7f9e8c72c5b0) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7f9e8c72c618) 0
+ primary-for QTextBrowser (0x0x7f9e8c72c5b0)
+ QAbstractScrollArea (0x0x7f9e8c72c680) 0
+ primary-for QTextEdit (0x0x7f9e8c72c618)
+ QFrame (0x0x7f9e8c72c6e8) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8c72c680)
+ QWidget (0x0x7f9e8cac9770) 0
+ primary-for QFrame (0x0x7f9e8c72c6e8)
+ QObject (0x0x7f9e8c788de0) 0
+ primary-for QWidget (0x0x7f9e8cac9770)
+ QPaintDevice (0x0x7f9e8c788e40) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f9e8c7f0120) 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 (0x0x7f9e8c72c750) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7f9e8cac97e0) 0
+ primary-for QToolBar (0x0x7f9e8c72c750)
+ QObject (0x0x7f9e8c7f0060) 0
+ primary-for QWidget (0x0x7f9e8cac97e0)
+ QPaintDevice (0x0x7f9e8c7f00c0) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f9e8c7f0420) 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 (0x0x7f9e8c72c7b8) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7f9e8c72c820) 0
+ primary-for QToolBox (0x0x7f9e8c72c7b8)
+ QWidget (0x0x7f9e8cac9850) 0
+ primary-for QFrame (0x0x7f9e8c72c820)
+ QObject (0x0x7f9e8c7f0360) 0
+ primary-for QWidget (0x0x7f9e8cac9850)
+ QPaintDevice (0x0x7f9e8c7f03c0) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f9e8c7f0780) 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 (0x0x7f9e8c72c888) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7f9e8c72c8f0) 0
+ primary-for QToolButton (0x0x7f9e8c72c888)
+ QWidget (0x0x7f9e8cac98c0) 0
+ primary-for QAbstractButton (0x0x7f9e8c72c8f0)
+ QObject (0x0x7f9e8c7f06c0) 0
+ primary-for QWidget (0x0x7f9e8cac98c0)
+ QPaintDevice (0x0x7f9e8c7f0720) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f9e8c7f09c0) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f9e8c7f0b40) 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 (0x0x7f9e8c72c958) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7f9e8c72c9c0) 0
+ primary-for QTreeView (0x0x7f9e8c72c958)
+ QAbstractScrollArea (0x0x7f9e8c72ca28) 0
+ primary-for QAbstractItemView (0x0x7f9e8c72c9c0)
+ QFrame (0x0x7f9e8c72ca90) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8c72ca28)
+ QWidget (0x0x7f9e8cac9a80) 0
+ primary-for QFrame (0x0x7f9e8c72ca90)
+ QObject (0x0x7f9e8c7f0a80) 0
+ primary-for QWidget (0x0x7f9e8cac9a80)
+ QPaintDevice (0x0x7f9e8c7f0ae0) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f9e8c7f0cc0) 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 (0x0x7f9e8c8a0540) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f9e8c621420) 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 (0x0x7f9e8c516dd0) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7f9e8c516e38) 0
+ primary-for QTreeWidget (0x0x7f9e8c516dd0)
+ QAbstractItemView (0x0x7f9e8c516ea0) 0
+ primary-for QTreeView (0x0x7f9e8c516e38)
+ QAbstractScrollArea (0x0x7f9e8c516f08) 0
+ primary-for QAbstractItemView (0x0x7f9e8c516ea0)
+ QFrame (0x0x7f9e8c516f70) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8c516f08)
+ QWidget (0x0x7f9e8c872850) 0
+ primary-for QFrame (0x0x7f9e8c516f70)
+ QObject (0x0x7f9e8c621360) 0
+ primary-for QWidget (0x0x7f9e8c872850)
+ QPaintDevice (0x0x7f9e8c6213c0) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f9e8c621840) 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 (0x0x7f9e8c5164e0) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7f9e8c516d68) 0
+ primary-for QUndoView (0x0x7f9e8c5164e0)
+ QAbstractItemView (0x0x7f9e8c672000) 0
+ primary-for QListView (0x0x7f9e8c516d68)
+ QAbstractScrollArea (0x0x7f9e8c672068) 0
+ primary-for QAbstractItemView (0x0x7f9e8c672000)
+ QFrame (0x0x7f9e8c6720d0) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8c672068)
+ QWidget (0x0x7f9e8c8728c0) 0
+ primary-for QFrame (0x0x7f9e8c6720d0)
+ QObject (0x0x7f9e8c621780) 0
+ primary-for QWidget (0x0x7f9e8c8728c0)
+ QPaintDevice (0x0x7f9e8c6217e0) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f9e8c6219c0) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f9e8c621a80) 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 (0x0x7f9e8c672138) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7f9e8c6721a0) 0
+ primary-for QWidgetAction (0x0x7f9e8c672138)
+ QObject (0x0x7f9e8c621a20) 0
+ primary-for QAction (0x0x7f9e8c6721a0)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f9e8c621cc0) 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 (0x0x7f9e8c672208) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7f9e8c672270) 0
+ primary-for QWizard (0x0x7f9e8c672208)
+ QWidget (0x0x7f9e8c872930) 0
+ primary-for QDialog (0x0x7f9e8c672270)
+ QObject (0x0x7f9e8c621c00) 0
+ primary-for QWidget (0x0x7f9e8c872930)
+ QPaintDevice (0x0x7f9e8c621c60) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f9e8c6b8600) 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 (0x0x7f9e8c672410) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7f9e8c696af0) 0
+ primary-for QWizardPage (0x0x7f9e8c672410)
+ QObject (0x0x7f9e8c6b8540) 0
+ primary-for QWidget (0x0x7f9e8c696af0)
+ QPaintDevice (0x0x7f9e8c6b85a0) 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 (0x0x7f9e8c6b8780) 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 (0x0x7f9e8c345c60) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface) + 16)
+
+Class QDomImplementation
+ size=8 align=8
+ base size=8 base align=8
+QDomImplementation (0x0x7f9e8c3750c0) 0
+
+Class QDomNode
+ size=8 align=8
+ base size=8 base align=8
+QDomNode (0x0x7f9e8c375120) 0
+
+Class QDomNodeList
+ size=8 align=8
+ base size=8 base align=8
+QDomNodeList (0x0x7f9e8c375180) 0
+
+Class QDomDocumentType
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentType (0x0x7f9e8c35e340) 0
+ QDomNode (0x0x7f9e8c375360) 0
+
+Class QDomDocument
+ size=8 align=8
+ base size=8 base align=8
+QDomDocument (0x0x7f9e8c35e3a8) 0
+ QDomNode (0x0x7f9e8c375420) 0
+
+Class QDomNamedNodeMap
+ size=8 align=8
+ base size=8 base align=8
+QDomNamedNodeMap (0x0x7f9e8c3754e0) 0
+
+Class QDomDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentFragment (0x0x7f9e8c35e410) 0
+ QDomNode (0x0x7f9e8c375660) 0
+
+Class QDomCharacterData
+ size=8 align=8
+ base size=8 base align=8
+QDomCharacterData (0x0x7f9e8c35e478) 0
+ QDomNode (0x0x7f9e8c375720) 0
+
+Class QDomAttr
+ size=8 align=8
+ base size=8 base align=8
+QDomAttr (0x0x7f9e8c35e4e0) 0
+ QDomNode (0x0x7f9e8c375780) 0
+
+Class QDomElement
+ size=8 align=8
+ base size=8 base align=8
+QDomElement (0x0x7f9e8c35e548) 0
+ QDomNode (0x0x7f9e8c375840) 0
+
+Class QDomText
+ size=8 align=8
+ base size=8 base align=8
+QDomText (0x0x7f9e8c35e5b0) 0
+ QDomCharacterData (0x0x7f9e8c35e618) 0
+ QDomNode (0x0x7f9e8c375a80) 0
+
+Class QDomComment
+ size=8 align=8
+ base size=8 base align=8
+QDomComment (0x0x7f9e8c35e680) 0
+ QDomCharacterData (0x0x7f9e8c35e6e8) 0
+ QDomNode (0x0x7f9e8c375b40) 0
+
+Class QDomCDATASection
+ size=8 align=8
+ base size=8 base align=8
+QDomCDATASection (0x0x7f9e8c35e750) 0
+ QDomText (0x0x7f9e8c35e7b8) 0
+ QDomCharacterData (0x0x7f9e8c35e820) 0
+ QDomNode (0x0x7f9e8c375c00) 0
+
+Class QDomNotation
+ size=8 align=8
+ base size=8 base align=8
+QDomNotation (0x0x7f9e8c35e888) 0
+ QDomNode (0x0x7f9e8c375cc0) 0
+
+Class QDomEntity
+ size=8 align=8
+ base size=8 base align=8
+QDomEntity (0x0x7f9e8c35e8f0) 0
+ QDomNode (0x0x7f9e8c375d80) 0
+
+Class QDomEntityReference
+ size=8 align=8
+ base size=8 base align=8
+QDomEntityReference (0x0x7f9e8c35e958) 0
+ QDomNode (0x0x7f9e8c375e40) 0
+
+Class QDomProcessingInstruction
+ size=8 align=8
+ base size=8 base align=8
+QDomProcessingInstruction (0x0x7f9e8c35e9c0) 0
+ QDomNode (0x0x7f9e8c375f00) 0
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f9e8c3fc000) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f9e8c3fc600) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f9e8c4c0d80) 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 (0x0x7f9e8c4b4d68) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7f9e8c4c0d20) 0
+ primary-for QOpenGLDebugLogger (0x0x7f9e8c4b4d68)
+
+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 (0x0x7f9e8c1f5540) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f9e8c1f57e0) 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 (0x0x7f9e8c4b4e38) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7f9e8c1f5840) 0
+ primary-for QOpenGLPaintDevice (0x0x7f9e8c4b4e38)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f9e8c1f5a80) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f9e8c29c180) 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 (0x0x7f9e8c292820) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7f9e8c29c120) 0
+ primary-for QOpenGLShader (0x0x7f9e8c292820)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f9e8c29c7e0) 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 (0x0x7f9e8c2929c0) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7f9e8c29c780) 0
+ primary-for QOpenGLShaderProgram (0x0x7f9e8c2929c0)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f9e8c29c960) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f9e8bfbfc00) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f9e8bfbfe40) 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 (0x0x7f9e8c292b60) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7f9e8bfbfde0) 0
+ primary-for QOpenGLTimerQuery (0x0x7f9e8c292b60)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f9e8c051060) 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 (0x0x7f9e8c292bc8) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7f9e8c051000) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f9e8c292bc8)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f9e8c0511e0) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f9e8bd33240) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f9e8bd33420) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f9e8bd33480) 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 (0x0x7f9e8bd33660) 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 (0x0x7f9e8bd33840) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f9e8bd14478) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bd337e0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f9e8bd33ba0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f9e8bd144e0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bd33b40) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f9e8bd33f00) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f9e8bd14548) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bd33ea0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f9e8bd712a0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f9e8bd145b0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bd71240) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f9e8bd71600) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f9e8bd14618) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bd715a0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f9e8bd71960) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f9e8bd14680) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bd71900) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f9e8bd71cc0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f9e8bd146e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bd71c60) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f9e8bdaa060) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f9e8bd14750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bdaa000) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f9e8bdaa3c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f9e8bd147b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bdaa360) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f9e8bdaa720) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f9e8bd14820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bdaa6c0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f9e8bdaaa80) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f9e8bd14888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bdaaa20) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f9e8bdaade0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f9e8bd148f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bdaad80) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f9e8bdf1180) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f9e8bd14958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bdf1120) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f9e8bdf14e0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f9e8bd149c0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bdf1480) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f9e8bdf1840) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f9e8bd14a28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bdf17e0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f9e8bdf1ba0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f9e8bd14a90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bdf1b40) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f9e8bdf1f00) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f9e8bd14af8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bdf1ea0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f9e8be472a0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f9e8bd14b60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8be47240) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f9e8be47600) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f9e8bd14bc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8be475a0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f9e8be47960) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f9e8bd14c30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8be47900) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f9e8be47cc0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f9e8bd14c98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8be47c60) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f9e8bec8060) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f9e8bd14d00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bec8000) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f9e8bec83c0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f9e8bd14d68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bec8360) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f9e8bec8720) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f9e8bd14dd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bec86c0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f9e8bec8a80) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f9e8bd14e38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bec8a20) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f9e8bec8de0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f9e8bd14ea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bec8d80) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f9e8bf05180) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f9e8bd14f08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f9e8bf05120) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f9e8bf05480) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f9e8bf05600) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f9e8bf05720) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f9e8bf05780) 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 (0x0x7f9e8bd14f70) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7f9e8bf056c0) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f9e8bd14f70)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f9e8bf05de0) 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 (0x0x7f9e8bb2e068) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7f9e8bd3dd20) 0
+ primary-for QOpenGLWindow (0x0x7f9e8bb2e068)
+ QWindow (0x0x7f9e8bd3dd90) 0
+ primary-for QPaintDeviceWindow (0x0x7f9e8bd3dd20)
+ QObject (0x0x7f9e8bf05cc0) 0
+ primary-for QWindow (0x0x7f9e8bd3dd90)
+ QSurface (0x0x7f9e8bf05d20) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7f9e8bf05d80) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7f9e8bb4a060) 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 (0x0x7f9e8bb2e138) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+ QWidget (0x0x7f9e8bd3df50) 0
+ primary-for QOpenGLWidget (0x0x7f9e8bb2e138)
+ QObject (0x0x7f9e8bf05f60) 0
+ primary-for QWidget (0x0x7f9e8bd3df50)
+ QPaintDevice (0x0x7f9e8bb4a000) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QDesignerActionEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerActionEditorInterface::QPrivateSignal (0x0x7f9e8bb4a2a0) 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 (0x0x7f9e8bb2e208) 0
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 16)
+ QWidget (0x0x7f9e8bb4f0e0) 0
+ primary-for QDesignerActionEditorInterface (0x0x7f9e8bb2e208)
+ QObject (0x0x7f9e8bb4a1e0) 0
+ primary-for QWidget (0x0x7f9e8bb4f0e0)
+ QPaintDevice (0x0x7f9e8bb4a240) 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 (0x0x7f9e8bb4a360) 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 (0x0x7f9e8bb4a3c0) 0
+ vptr=((& QAbstractFormBuilder::_ZTV20QAbstractFormBuilder) + 16)
+
+Class QDesignerFormEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormEditorInterface::QPrivateSignal (0x0x7f9e8bb4a600) 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 (0x0x7f9e8bb2e270) 0
+ vptr=((& QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface) + 16)
+ QObject (0x0x7f9e8bb4a5a0) 0
+ primary-for QDesignerFormEditorInterface (0x0x7f9e8bb2e270)
+
+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 (0x0x7f9e8bb4a720) 0 nearly-empty
+ vptr=((& QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface) + 16)
+
+Class QDesignerFormWindowInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowInterface::QPrivateSignal (0x0x7f9e8bb4aba0) 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 (0x0x7f9e8bb2e3a8) 0
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 16)
+ QWidget (0x0x7f9e8bb4f230) 0
+ primary-for QDesignerFormWindowInterface (0x0x7f9e8bb2e3a8)
+ QObject (0x0x7f9e8bb4aae0) 0
+ primary-for QWidget (0x0x7f9e8bb4f230)
+ QPaintDevice (0x0x7f9e8bb4ab40) 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 (0x0x7f9e8bb4ad20) 0 nearly-empty
+ vptr=((& QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface) + 16)
+
+Class QDesignerFormWindowManagerInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowManagerInterface::QPrivateSignal (0x0x7f9e8bb4ade0) 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 (0x0x7f9e8bb2e410) 0
+ vptr=((& QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface) + 16)
+ QObject (0x0x7f9e8bb4ad80) 0
+ primary-for QDesignerFormWindowManagerInterface (0x0x7f9e8bb2e410)
+
+Class QDesignerFormWindowToolInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowToolInterface::QPrivateSignal (0x0x7f9e8bc13120) 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 (0x0x7f9e8bb2e478) 0
+ vptr=((& QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface) + 16)
+ QObject (0x0x7f9e8bc130c0) 0
+ primary-for QDesignerFormWindowToolInterface (0x0x7f9e8bb2e478)
+
+Class QDesignerIntegrationInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegrationInterface::QPrivateSignal (0x0x7f9e8bc13300) 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 (0x0x7f9e8bb2e4e0) 0
+ vptr=((& QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface) + 16)
+ QObject (0x0x7f9e8bc132a0) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f9e8bb2e4e0)
+
+Class QDesignerIntegration::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegration::QPrivateSignal (0x0x7f9e8bc13540) 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 (0x0x7f9e8bb2e548) 0
+ vptr=((& QDesignerIntegration::_ZTV20QDesignerIntegration) + 16)
+ QDesignerIntegrationInterface (0x0x7f9e8bb2e5b0) 0
+ primary-for QDesignerIntegration (0x0x7f9e8bb2e548)
+ QObject (0x0x7f9e8bc134e0) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f9e8bb2e5b0)
+
+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 (0x0x7f9e8bc13660) 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 (0x0x7f9e8bc13a20) 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 (0x0x7f9e8bc13e40) 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 (0x0x7f9e8bc7a2a0) 0 nearly-empty
+ vptr=((& QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface) + 16)
+
+Class QDesignerMetaDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerMetaDataBaseInterface::QPrivateSignal (0x0x7f9e8bc7a360) 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 (0x0x7f9e8bb2e8f0) 0
+ vptr=((& QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface) + 16)
+ QObject (0x0x7f9e8bc7a300) 0
+ primary-for QDesignerMetaDataBaseInterface (0x0x7f9e8bb2e8f0)
+
+Class QDesignerNewFormWidgetInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerNewFormWidgetInterface::QPrivateSignal (0x0x7f9e8bc7a4e0) 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 (0x0x7f9e8bb2e958) 0
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 16)
+ QWidget (0x0x7f9e8bc05770) 0
+ primary-for QDesignerNewFormWidgetInterface (0x0x7f9e8bb2e958)
+ QObject (0x0x7f9e8bc7a420) 0
+ primary-for QWidget (0x0x7f9e8bc05770)
+ QPaintDevice (0x0x7f9e8bc7a480) 16
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 464)
+
+Class QDesignerObjectInspectorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerObjectInspectorInterface::QPrivateSignal (0x0x7f9e8bc7a660) 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 (0x0x7f9e8bb2e9c0) 0
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 16)
+ QWidget (0x0x7f9e8bc057e0) 0
+ primary-for QDesignerObjectInspectorInterface (0x0x7f9e8bb2e9c0)
+ QObject (0x0x7f9e8bc7a5a0) 0
+ primary-for QWidget (0x0x7f9e8bc057e0)
+ QPaintDevice (0x0x7f9e8bc7a600) 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 (0x0x7f9e8bc7a720) 0 nearly-empty
+ vptr=((& QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface) + 16)
+
+Class QDesignerPromotionInterface::PromotedClass
+ size=16 align=8
+ base size=16 base align=8
+QDesignerPromotionInterface::PromotedClass (0x0x7f9e8bc7a7e0) 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 (0x0x7f9e8bc7a780) 0 nearly-empty
+ vptr=((& QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface) + 16)
+
+Class QDesignerPropertyEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerPropertyEditorInterface::QPrivateSignal (0x0x7f9e8bc7a900) 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 (0x0x7f9e8bb2ea28) 0
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 16)
+ QWidget (0x0x7f9e8bc05850) 0
+ primary-for QDesignerPropertyEditorInterface (0x0x7f9e8bb2ea28)
+ QObject (0x0x7f9e8bc7a840) 0
+ primary-for QWidget (0x0x7f9e8bc05850)
+ QPaintDevice (0x0x7f9e8bc7a8a0) 16
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 504)
+
+Class QDesignerResourceBrowserInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerResourceBrowserInterface::QPrivateSignal (0x0x7f9e8bc7aa80) 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 (0x0x7f9e8bb2ea90) 0
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 16)
+ QWidget (0x0x7f9e8bc058c0) 0
+ primary-for QDesignerResourceBrowserInterface (0x0x7f9e8bb2ea90)
+ QObject (0x0x7f9e8bc7a9c0) 0
+ primary-for QWidget (0x0x7f9e8bc058c0)
+ QPaintDevice (0x0x7f9e8bc7aa20) 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 (0x0x7f9e8bc7ab40) 0 nearly-empty
+ vptr=((& QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface) + 16)
+
+Class QDesignerWidgetBoxInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetBoxInterface::QPrivateSignal (0x0x7f9e8bc7ac60) 0 empty
+
+Class QDesignerWidgetBoxInterface::Widget
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetBoxInterface::Widget (0x0x7f9e8bc7acc0) 0
+
+Class QDesignerWidgetBoxInterface::Category
+ size=56 align=8
+ base size=56 base align=8
+QDesignerWidgetBoxInterface::Category (0x0x7f9e8bc7ad80) 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 (0x0x7f9e8bb2eaf8) 0
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 16)
+ QWidget (0x0x7f9e8bc05930) 0
+ primary-for QDesignerWidgetBoxInterface (0x0x7f9e8bb2eaf8)
+ QObject (0x0x7f9e8bc7aba0) 0
+ primary-for QWidget (0x0x7f9e8bc05930)
+ QPaintDevice (0x0x7f9e8bc7ac00) 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 (0x0x7f9e8b9d5300) 0 nearly-empty
+ vptr=((& QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface) + 16)
+
+Class QDesignerWidgetDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetDataBaseInterface::QPrivateSignal (0x0x7f9e8b9d5420) 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 (0x0x7f9e8b9d7a28) 0
+ vptr=((& QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface) + 16)
+ QObject (0x0x7f9e8b9d53c0) 0
+ primary-for QDesignerWidgetDataBaseInterface (0x0x7f9e8b9d7a28)
+
+Class QDesignerWidgetFactoryInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetFactoryInterface::QPrivateSignal (0x0x7f9e8b9d5de0) 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 (0x0x7f9e8ba01270) 0
+ vptr=((& QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface) + 16)
+ QObject (0x0x7f9e8b9d5d80) 0
+ primary-for QDesignerWidgetFactoryInterface (0x0x7f9e8ba01270)
+
+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 (0x0x7f9e8b9d5ea0) 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 (0x0x7f9e8ba6e2a0) 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 (0x0x7f9e8ba6e720) 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 (0x0x7f9e8ba01680) 0
+ vptr=((& QFormBuilder::_ZTV12QFormBuilder) + 16)
+ QAbstractFormBuilder (0x0x7f9e8ba6eb40) 0
+ primary-for QFormBuilder (0x0x7f9e8ba01680)
+
+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 (0x0x7f9e8ba6eba0) 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 (0x0x7f9e8babe000) 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 (0x0x7f9e8babe420) 0 nearly-empty
+ vptr=((& QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension) + 16)
+
+Class QExtensionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QExtensionManager::QPrivateSignal (0x0x7f9e8babe900) 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 (0x0x7f9e8b9db4d0) 0
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 16)
+ QObject (0x0x7f9e8babe840) 0
+ primary-for QExtensionManager (0x0x7f9e8b9db4d0)
+ QAbstractExtensionManager (0x0x7f9e8babe8a0) 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 (0x0x7f9e8b7243c0) 0 nearly-empty
+ vptr=((& QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension) + 16)
+
+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 (0x0x7f9e8b724c60) 0 nearly-empty
+ vptr=((& QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase) + 16)
+
+Class QSqlDatabase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDatabase (0x0x7f9e8b724f60) 0
+
+Class QSqlDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriver::QPrivateSignal (0x0x7f9e8b80c000) 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 (0x0x7f9e8b7254e0) 0
+ vptr=((& QSqlDriver::_ZTV10QSqlDriver) + 16)
+ QObject (0x0x7f9e8b7241e0) 0
+ primary-for QSqlDriver (0x0x7f9e8b7254e0)
+
+Class QSqlDriverPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriverPlugin::QPrivateSignal (0x0x7f9e8b80c1e0) 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 (0x0x7f9e8b725548) 0
+ vptr=((& QSqlDriverPlugin::_ZTV16QSqlDriverPlugin) + 16)
+ QObject (0x0x7f9e8b80c180) 0
+ primary-for QSqlDriverPlugin (0x0x7f9e8b725548)
+
+Class QSqlError
+ size=8 align=8
+ base size=8 base align=8
+QSqlError (0x0x7f9e8b80c2a0) 0
+
+Class QSqlField
+ size=40 align=8
+ base size=40 base align=8
+QSqlField (0x0x7f9e8b850d20) 0
+
+Class QSqlRecord
+ size=8 align=8
+ base size=8 base align=8
+QSqlRecord (0x0x7f9e8b876120) 0
+
+Class QSqlIndex
+ size=80 align=8
+ base size=80 base align=8
+QSqlIndex (0x0x7f9e8b84ef08) 0
+ QSqlRecord (0x0x7f9e8b8761e0) 0
+
+Class QSqlQuery
+ size=8 align=8
+ base size=8 base align=8
+QSqlQuery (0x0x7f9e8b876720) 0
+
+Class QSqlQueryModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlQueryModel::QPrivateSignal (0x0x7f9e8b876ae0) 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 (0x0x7f9e8b891340) 0
+ vptr=((& QSqlQueryModel::_ZTV14QSqlQueryModel) + 16)
+ QAbstractTableModel (0x0x7f9e8b8913a8) 0
+ primary-for QSqlQueryModel (0x0x7f9e8b891340)
+ QAbstractItemModel (0x0x7f9e8b891410) 0
+ primary-for QAbstractTableModel (0x0x7f9e8b8913a8)
+ QObject (0x0x7f9e8b876a80) 0
+ primary-for QAbstractItemModel (0x0x7f9e8b891410)
+
+Class QSqlTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlTableModel::QPrivateSignal (0x0x7f9e8b876cc0) 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 (0x0x7f9e8b891478) 0
+ vptr=((& QSqlTableModel::_ZTV14QSqlTableModel) + 16)
+ QSqlQueryModel (0x0x7f9e8b8914e0) 0
+ primary-for QSqlTableModel (0x0x7f9e8b891478)
+ QAbstractTableModel (0x0x7f9e8b891548) 0
+ primary-for QSqlQueryModel (0x0x7f9e8b8914e0)
+ QAbstractItemModel (0x0x7f9e8b8915b0) 0
+ primary-for QAbstractTableModel (0x0x7f9e8b891548)
+ QObject (0x0x7f9e8b876c60) 0
+ primary-for QAbstractItemModel (0x0x7f9e8b8915b0)
+
+Class QSqlRelation
+ size=72 align=8
+ base size=72 base align=8
+QSqlRelation (0x0x7f9e8b876e40) 0
+
+Class QSqlRelationalTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlRelationalTableModel::QPrivateSignal (0x0x7f9e8b55eb40) 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 (0x0x7f9e8b574138) 0
+ vptr=((& QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel) + 16)
+ QSqlTableModel (0x0x7f9e8b5741a0) 0
+ primary-for QSqlRelationalTableModel (0x0x7f9e8b574138)
+ QSqlQueryModel (0x0x7f9e8b574208) 0
+ primary-for QSqlTableModel (0x0x7f9e8b5741a0)
+ QAbstractTableModel (0x0x7f9e8b574270) 0
+ primary-for QSqlQueryModel (0x0x7f9e8b574208)
+ QAbstractItemModel (0x0x7f9e8b5742d8) 0
+ primary-for QAbstractTableModel (0x0x7f9e8b574270)
+ QObject (0x0x7f9e8b55eae0) 0
+ primary-for QAbstractItemModel (0x0x7f9e8b5742d8)
+
+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 (0x0x7f9e8b55ecc0) 0
+ vptr=((& QSqlResult::_ZTV10QSqlResult) + 16)
+
+Class QHelpGlobal
+ size=1 align=1
+ base size=0 base align=1
+QHelpGlobal (0x0x7f9e8b55ede0) 0 empty
+
+Class QCompressedHelpInfo
+ size=8 align=8
+ base size=8 base align=8
+QCompressedHelpInfo (0x0x7f9e8b55ee40) 0
+
+Class QHelpContentItem
+ size=8 align=8
+ base size=8 base align=8
+QHelpContentItem (0x0x7f9e8b55ef60) 0
+
+Class QHelpContentModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentModel::QPrivateSignal (0x0x7f9e8b5bf060) 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 (0x0x7f9e8b574340) 0
+ vptr=((& QHelpContentModel::_ZTV17QHelpContentModel) + 16)
+ QAbstractItemModel (0x0x7f9e8b5743a8) 0
+ primary-for QHelpContentModel (0x0x7f9e8b574340)
+ QObject (0x0x7f9e8b5bf000) 0
+ primary-for QAbstractItemModel (0x0x7f9e8b5743a8)
+
+Class QHelpContentWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentWidget::QPrivateSignal (0x0x7f9e8b5bf1e0) 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 (0x0x7f9e8b574410) 0
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 16)
+ QTreeView (0x0x7f9e8b574478) 0
+ primary-for QHelpContentWidget (0x0x7f9e8b574410)
+ QAbstractItemView (0x0x7f9e8b5744e0) 0
+ primary-for QTreeView (0x0x7f9e8b574478)
+ QAbstractScrollArea (0x0x7f9e8b574548) 0
+ primary-for QAbstractItemView (0x0x7f9e8b5744e0)
+ QFrame (0x0x7f9e8b5745b0) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8b574548)
+ QWidget (0x0x7f9e8b845cb0) 0
+ primary-for QFrame (0x0x7f9e8b5745b0)
+ QObject (0x0x7f9e8b5bf120) 0
+ primary-for QWidget (0x0x7f9e8b845cb0)
+ QPaintDevice (0x0x7f9e8b5bf180) 16
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 816)
+
+Class QHelpEngineCore::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngineCore::QPrivateSignal (0x0x7f9e8b5bf300) 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 (0x0x7f9e8b574618) 0
+ vptr=((& QHelpEngineCore::_ZTV15QHelpEngineCore) + 16)
+ QObject (0x0x7f9e8b5bf2a0) 0
+ primary-for QHelpEngineCore (0x0x7f9e8b574618)
+
+Class QHelpEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngine::QPrivateSignal (0x0x7f9e8b5bf420) 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 (0x0x7f9e8b574680) 0
+ vptr=((& QHelpEngine::_ZTV11QHelpEngine) + 16)
+ QHelpEngineCore (0x0x7f9e8b5746e8) 0
+ primary-for QHelpEngine (0x0x7f9e8b574680)
+ QObject (0x0x7f9e8b5bf3c0) 0
+ primary-for QHelpEngineCore (0x0x7f9e8b5746e8)
+
+Class QHelpFilterData
+ size=8 align=8
+ base size=8 base align=8
+QHelpFilterData (0x0x7f9e8b5bf4e0) 0
+
+Class QHelpFilterEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterEngine::QPrivateSignal (0x0x7f9e8b5bf660) 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 (0x0x7f9e8b574750) 0
+ vptr=((& QHelpFilterEngine::_ZTV17QHelpFilterEngine) + 16)
+ QObject (0x0x7f9e8b5bf600) 0
+ primary-for QHelpFilterEngine (0x0x7f9e8b574750)
+
+Class QHelpFilterSettingsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterSettingsWidget::QPrivateSignal (0x0x7f9e8b5bf7e0) 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 (0x0x7f9e8b5747b8) 0
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 16)
+ QWidget (0x0x7f9e8b845d20) 0
+ primary-for QHelpFilterSettingsWidget (0x0x7f9e8b5747b8)
+ QObject (0x0x7f9e8b5bf720) 0
+ primary-for QWidget (0x0x7f9e8b845d20)
+ QPaintDevice (0x0x7f9e8b5bf780) 16
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 448)
+
+Class QHelpIndexModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexModel::QPrivateSignal (0x0x7f9e8b5bfa80) 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 (0x0x7f9e8b574820) 0
+ vptr=((& QHelpIndexModel::_ZTV15QHelpIndexModel) + 16)
+ QStringListModel (0x0x7f9e8b574888) 0
+ primary-for QHelpIndexModel (0x0x7f9e8b574820)
+ QAbstractListModel (0x0x7f9e8b5748f0) 0
+ primary-for QStringListModel (0x0x7f9e8b574888)
+ QAbstractItemModel (0x0x7f9e8b574958) 0
+ primary-for QAbstractListModel (0x0x7f9e8b5748f0)
+ QObject (0x0x7f9e8b5bfa20) 0
+ primary-for QAbstractItemModel (0x0x7f9e8b574958)
+
+Class QHelpIndexWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexWidget::QPrivateSignal (0x0x7f9e8b5bfc00) 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 (0x0x7f9e8b5749c0) 0
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 16)
+ QListView (0x0x7f9e8b574a28) 0
+ primary-for QHelpIndexWidget (0x0x7f9e8b5749c0)
+ QAbstractItemView (0x0x7f9e8b574a90) 0
+ primary-for QListView (0x0x7f9e8b574a28)
+ QAbstractScrollArea (0x0x7f9e8b574af8) 0
+ primary-for QAbstractItemView (0x0x7f9e8b574a90)
+ QFrame (0x0x7f9e8b574b60) 0
+ primary-for QAbstractScrollArea (0x0x7f9e8b574af8)
+ QWidget (0x0x7f9e8b845d90) 0
+ primary-for QFrame (0x0x7f9e8b574b60)
+ QObject (0x0x7f9e8b5bfb40) 0
+ primary-for QWidget (0x0x7f9e8b845d90)
+ QPaintDevice (0x0x7f9e8b5bfba0) 16
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 800)
+
+Class QHelpLink
+ size=32 align=8
+ base size=32 base align=8
+QHelpLink (0x0x7f9e8b5bfcc0) 0
+
+Class QHelpSearchQuery
+ size=32 align=8
+ base size=32 base align=8
+QHelpSearchQuery (0x0x7f9e8b5bfd20) 0
+
+Class QHelpSearchResult
+ size=8 align=8
+ base size=8 base align=8
+QHelpSearchResult (0x0x7f9e8b656540) 0
+
+Class QHelpSearchEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchEngine::QPrivateSignal (0x0x7f9e8b656660) 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 (0x0x7f9e8b574e38) 0
+ vptr=((& QHelpSearchEngine::_ZTV17QHelpSearchEngine) + 16)
+ QObject (0x0x7f9e8b656600) 0
+ primary-for QHelpSearchEngine (0x0x7f9e8b574e38)
+
+Class QHelpSearchQueryWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchQueryWidget::QPrivateSignal (0x0x7f9e8b6567e0) 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 (0x0x7f9e8b574ea0) 0
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 16)
+ QWidget (0x0x7f9e8b64d0e0) 0
+ primary-for QHelpSearchQueryWidget (0x0x7f9e8b574ea0)
+ QObject (0x0x7f9e8b656720) 0
+ primary-for QWidget (0x0x7f9e8b64d0e0)
+ QPaintDevice (0x0x7f9e8b656780) 16
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 448)
+
+Class QHelpSearchResultWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchResultWidget::QPrivateSignal (0x0x7f9e8b656960) 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 (0x0x7f9e8b574f08) 0
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 16)
+ QWidget (0x0x7f9e8b64d150) 0
+ primary-for QHelpSearchResultWidget (0x0x7f9e8b574f08)
+ QObject (0x0x7f9e8b6568a0) 0
+ primary-for QWidget (0x0x7f9e8b64d150)
+ QPaintDevice (0x0x7f9e8b656900) 16
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 448)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f9e8b656a20) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f9e8b324180) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f9e8b37aa80) 0 empty
+
+Vtable for QAbstractNetworkCache
+QAbstractNetworkCache::_ZTV21QAbstractNetworkCache: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractNetworkCache)
+16 (int (*)(...))QAbstractNetworkCache::metaObject
+24 (int (*)(...))QAbstractNetworkCache::qt_metacast
+32 (int (*)(...))QAbstractNetworkCache::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
+
+Class QAbstractNetworkCache
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNetworkCache (0x0x7f9e8b382820) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+ QObject (0x0x7f9e8b37aa20) 0
+ primary-for QAbstractNetworkCache (0x0x7f9e8b382820)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f9e8b37acc0) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSocket)
+16 (int (*)(...))QAbstractSocket::metaObject
+24 (int (*)(...))QAbstractSocket::qt_metacast
+32 (int (*)(...))QAbstractSocket::qt_metacall
+40 (int (*)(...))QAbstractSocket::~QAbstractSocket
+48 (int (*)(...))QAbstractSocket::~QAbstractSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7f9e8b382888) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+ QIODevice (0x0x7f9e8b6f9850) 0
+ primary-for QAbstractSocket (0x0x7f9e8b382888)
+ QObject (0x0x7f9e8b37ac00) 0
+ primary-for QIODevice (0x0x7f9e8b6f9850)
+ QIODeviceBase (0x0x7f9e8b37ac60) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f9e8b4fe1e0) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f9e8b4fe2a0) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f9e8b150ae0) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f9e8b1a7360) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f9e8b1dfba0) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f9e8b233720) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f9e8b2803c0) 0 empty
+
+Vtable for QDnsLookup
+QDnsLookup::_ZTV10QDnsLookup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDnsLookup)
+16 (int (*)(...))QDnsLookup::metaObject
+24 (int (*)(...))QDnsLookup::qt_metacast
+32 (int (*)(...))QDnsLookup::qt_metacall
+40 (int (*)(...))QDnsLookup::~QDnsLookup
+48 (int (*)(...))QDnsLookup::~QDnsLookup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDnsLookup
+ size=16 align=8
+ base size=16 base align=8
+QDnsLookup (0x0x7f9e8b275dd0) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+ QObject (0x0x7f9e8b280360) 0
+ primary-for QDnsLookup (0x0x7f9e8b275dd0)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f9e8b2806c0) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f9e8b2807e0) 0
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f9e8af567e0) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpSocket)
+16 (int (*)(...))QTcpSocket::metaObject
+24 (int (*)(...))QTcpSocket::qt_metacast
+32 (int (*)(...))QTcpSocket::qt_metacall
+40 (int (*)(...))QTcpSocket::~QTcpSocket
+48 (int (*)(...))QTcpSocket::~QTcpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7f9e8af59af8) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+ QAbstractSocket (0x0x7f9e8af59b60) 0
+ primary-for QTcpSocket (0x0x7f9e8af59af8)
+ QIODevice (0x0x7f9e8af67000) 0
+ primary-for QAbstractSocket (0x0x7f9e8af59b60)
+ QObject (0x0x7f9e8af56720) 0
+ primary-for QIODevice (0x0x7f9e8af67000)
+ QIODeviceBase (0x0x7f9e8af56780) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f9e8af56e40) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f9e8b0560c0) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f9e8adeb9c0) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslSocket)
+16 (int (*)(...))QSslSocket::metaObject
+24 (int (*)(...))QSslSocket::qt_metacast
+32 (int (*)(...))QSslSocket::qt_metacall
+40 (int (*)(...))QSslSocket::~QSslSocket
+48 (int (*)(...))QSslSocket::~QSslSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QSslSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QSslSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QSslSocket::bytesAvailable
+184 (int (*)(...))QSslSocket::bytesToWrite
+192 (int (*)(...))QSslSocket::canReadLine
+200 (int (*)(...))QSslSocket::waitForReadyRead
+208 (int (*)(...))QSslSocket::waitForBytesWritten
+216 (int (*)(...))QSslSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QSslSocket::skipData
+240 (int (*)(...))QSslSocket::writeData
+248 (int (*)(...))QSslSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QSslSocket::connectToHost
+272 (int (*)(...))QSslSocket::disconnectFromHost
+280 (int (*)(...))QSslSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QSslSocket::setSocketDescriptor
+304 (int (*)(...))QSslSocket::setSocketOption
+312 (int (*)(...))QSslSocket::socketOption
+320 (int (*)(...))QSslSocket::waitForConnected
+328 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7f9e8addbdd0) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+ QTcpSocket (0x0x7f9e8addbe38) 0
+ primary-for QSslSocket (0x0x7f9e8addbdd0)
+ QAbstractSocket (0x0x7f9e8addbea0) 0
+ primary-for QTcpSocket (0x0x7f9e8addbe38)
+ QIODevice (0x0x7f9e8add0540) 0
+ primary-for QAbstractSocket (0x0x7f9e8addbea0)
+ QObject (0x0x7f9e8adeb900) 0
+ primary-for QIODevice (0x0x7f9e8add0540)
+ QIODeviceBase (0x0x7f9e8adeb960) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f9e8adebba0) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f9e8adebc00) 0
+
+Vtable for QDtlsClientVerifier
+QDtlsClientVerifier::_ZTV19QDtlsClientVerifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDtlsClientVerifier)
+16 (int (*)(...))QDtlsClientVerifier::metaObject
+24 (int (*)(...))QDtlsClientVerifier::qt_metacast
+32 (int (*)(...))QDtlsClientVerifier::qt_metacall
+40 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+48 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtlsClientVerifier
+ size=16 align=8
+ base size=16 base align=8
+QDtlsClientVerifier (0x0x7f9e8addbf08) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+ QObject (0x0x7f9e8adebb40) 0
+ primary-for QDtlsClientVerifier (0x0x7f9e8addbf08)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f9e8adebde0) 0 empty
+
+Vtable for QDtls
+QDtls::_ZTV5QDtls: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDtls)
+16 (int (*)(...))QDtls::metaObject
+24 (int (*)(...))QDtls::qt_metacast
+32 (int (*)(...))QDtls::qt_metacall
+40 (int (*)(...))QDtls::~QDtls
+48 (int (*)(...))QDtls::~QDtls
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtls
+ size=16 align=8
+ base size=16 base align=8
+QDtls (0x0x7f9e8addbf70) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+ QObject (0x0x7f9e8adebd80) 0
+ primary-for QDtls (0x0x7f9e8addbf70)
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f9e8adebf60) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f9e8aeb3e40) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7f9e8ab1ad20) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f9e8abcf660) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f9e8ac240c0) 0 empty
+
+Vtable for QHttpMultiPart
+QHttpMultiPart::_ZTV14QHttpMultiPart: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QHttpMultiPart)
+16 (int (*)(...))QHttpMultiPart::metaObject
+24 (int (*)(...))QHttpMultiPart::qt_metacast
+32 (int (*)(...))QHttpMultiPart::qt_metacall
+40 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+48 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHttpMultiPart
+ size=16 align=8
+ base size=16 base align=8
+QHttpMultiPart (0x0x7f9e8ac21208) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+ QObject (0x0x7f9e8ac24060) 0
+ primary-for QHttpMultiPart (0x0x7f9e8ac21208)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f9e8ac242a0) 0 empty
+
+Vtable for QLocalServer
+QLocalServer::_ZTV12QLocalServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalServer)
+16 (int (*)(...))QLocalServer::metaObject
+24 (int (*)(...))QLocalServer::qt_metacast
+32 (int (*)(...))QLocalServer::qt_metacall
+40 (int (*)(...))QLocalServer::~QLocalServer
+48 (int (*)(...))QLocalServer::~QLocalServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalServer::hasPendingConnections
+120 (int (*)(...))QLocalServer::nextPendingConnection
+128 (int (*)(...))QLocalServer::incomingConnection
+
+Class QLocalServer
+ size=16 align=8
+ base size=16 base align=8
+QLocalServer (0x0x7f9e8ac21270) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+ QObject (0x0x7f9e8ac24240) 0
+ primary-for QLocalServer (0x0x7f9e8ac21270)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f9e8ac24ae0) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalSocket)
+16 (int (*)(...))QLocalSocket::metaObject
+24 (int (*)(...))QLocalSocket::qt_metacast
+32 (int (*)(...))QLocalSocket::qt_metacall
+40 (int (*)(...))QLocalSocket::~QLocalSocket
+48 (int (*)(...))QLocalSocket::~QLocalSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalSocket::isSequential
+120 (int (*)(...))QLocalSocket::open
+128 (int (*)(...))QLocalSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QLocalSocket::bytesAvailable
+184 (int (*)(...))QLocalSocket::bytesToWrite
+192 (int (*)(...))QLocalSocket::canReadLine
+200 (int (*)(...))QLocalSocket::waitForReadyRead
+208 (int (*)(...))QLocalSocket::waitForBytesWritten
+216 (int (*)(...))QLocalSocket::readData
+224 (int (*)(...))QLocalSocket::readLineData
+232 (int (*)(...))QLocalSocket::skipData
+240 (int (*)(...))QLocalSocket::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7f9e8ac21410) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+ QIODevice (0x0x7f9e8ac28460) 0
+ primary-for QLocalSocket (0x0x7f9e8ac21410)
+ QObject (0x0x7f9e8ac24a20) 0
+ primary-for QIODevice (0x0x7f9e8ac28460)
+ QIODeviceBase (0x0x7f9e8ac24a80) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f9e9f3861e0) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f9e9f42e960) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f9e9f49dcc0) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QNetworkAccessManager)
+16 (int (*)(...))QNetworkAccessManager::metaObject
+24 (int (*)(...))QNetworkAccessManager::qt_metacast
+32 (int (*)(...))QNetworkAccessManager::qt_metacall
+40 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+48 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkAccessManager::supportedSchemes
+120 (int (*)(...))QNetworkAccessManager::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7f9e9f48fc98) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+ QObject (0x0x7f9e9f49dc60) 0
+ primary-for QNetworkAccessManager (0x0x7f9e9f48fc98)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f9e9f49de40) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f9e9f57a180) 0 empty
+
+Vtable for QNetworkCookieJar
+QNetworkCookieJar::_ZTV17QNetworkCookieJar: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkCookieJar)
+16 (int (*)(...))QNetworkCookieJar::metaObject
+24 (int (*)(...))QNetworkCookieJar::qt_metacast
+32 (int (*)(...))QNetworkCookieJar::qt_metacall
+40 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+48 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkCookieJar::cookiesForUrl
+120 (int (*)(...))QNetworkCookieJar::setCookiesFromUrl
+128 (int (*)(...))QNetworkCookieJar::insertCookie
+136 (int (*)(...))QNetworkCookieJar::updateCookie
+144 (int (*)(...))QNetworkCookieJar::deleteCookie
+152 (int (*)(...))QNetworkCookieJar::validateCookie
+
+Class QNetworkCookieJar
+ size=16 align=8
+ base size=16 base align=8
+QNetworkCookieJar (0x0x7f9e9f5538f0) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+ QObject (0x0x7f9e9f57a120) 0
+ primary-for QNetworkCookieJar (0x0x7f9e9f5538f0)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f9e9f57a300) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f9e9f1c98a0) 0 empty
+
+Vtable for QNetworkDiskCache
+QNetworkDiskCache::_ZTV17QNetworkDiskCache: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkDiskCache)
+16 (int (*)(...))QNetworkDiskCache::metaObject
+24 (int (*)(...))QNetworkDiskCache::qt_metacast
+32 (int (*)(...))QNetworkDiskCache::qt_metacall
+40 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+48 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkDiskCache::metaData
+120 (int (*)(...))QNetworkDiskCache::updateMetaData
+128 (int (*)(...))QNetworkDiskCache::data
+136 (int (*)(...))QNetworkDiskCache::remove
+144 (int (*)(...))QNetworkDiskCache::cacheSize
+152 (int (*)(...))QNetworkDiskCache::prepare
+160 (int (*)(...))QNetworkDiskCache::insert
+168 (int (*)(...))QNetworkDiskCache::clear
+176 (int (*)(...))QNetworkDiskCache::expire
+
+Class QNetworkDiskCache
+ size=16 align=8
+ base size=16 base align=8
+QNetworkDiskCache (0x0x7f9e9f1c35b0) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+ QAbstractNetworkCache (0x0x7f9e9f1c3618) 0
+ primary-for QNetworkDiskCache (0x0x7f9e9f1c35b0)
+ QObject (0x0x7f9e9f1c9840) 0
+ primary-for QAbstractNetworkCache (0x0x7f9e9f1c3618)
+
+Class QNetworkInformation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkInformation::QPrivateSignal (0x0x7f9e9f1c9a80) 0 empty
+
+Vtable for QNetworkInformation
+QNetworkInformation::_ZTV19QNetworkInformation: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNetworkInformation)
+16 (int (*)(...))QNetworkInformation::metaObject
+24 (int (*)(...))QNetworkInformation::qt_metacast
+32 (int (*)(...))QNetworkInformation::qt_metacall
+40 (int (*)(...))QNetworkInformation::~QNetworkInformation
+48 (int (*)(...))QNetworkInformation::~QNetworkInformation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkInformation
+ size=16 align=8
+ base size=16 base align=8
+QNetworkInformation (0x0x7f9e9f1c3680) 0
+ vptr=((& QNetworkInformation::_ZTV19QNetworkInformation) + 16)
+ QObject (0x0x7f9e9f1c9a20) 0
+ primary-for QNetworkInformation (0x0x7f9e9f1c3680)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f9e9f221300) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f9e9f0005a0) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f9e9f0fbe40) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f9e9f1737e0) 0
+
+Vtable for QNetworkProxyFactory
+QNetworkProxyFactory::_ZTV20QNetworkProxyFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QNetworkProxyFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNetworkProxyFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyFactory (0x0x7f9e9edd4600) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f9e9edd4c60) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QNetworkReply)
+16 (int (*)(...))QNetworkReply::metaObject
+24 (int (*)(...))QNetworkReply::qt_metacast
+32 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::writeData
+248 (int (*)(...))QNetworkReply::setReadBufferSize
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QNetworkReply::ignoreSslErrors
+272 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+288 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7f9e9edd0548) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+ QIODevice (0x0x7f9e9edaa4d0) 0
+ primary-for QNetworkReply (0x0x7f9e9edd0548)
+ QObject (0x0x7f9e9edd4ba0) 0
+ primary-for QIODevice (0x0x7f9e9edaa4d0)
+ QIODeviceBase (0x0x7f9e9edd4c00) 0 empty
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7f9e9eed0060) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f9e9ef07f60) 0 empty
+
+Vtable for QTcpServer
+QTcpServer::_ZTV10QTcpServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpServer)
+16 (int (*)(...))QTcpServer::metaObject
+24 (int (*)(...))QTcpServer::qt_metacast
+32 (int (*)(...))QTcpServer::qt_metacall
+40 (int (*)(...))QTcpServer::~QTcpServer
+48 (int (*)(...))QTcpServer::~QTcpServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QTcpServer::incomingConnection
+
+Class QTcpServer
+ size=16 align=8
+ base size=16 base align=8
+QTcpServer (0x0x7f9e9ef11958) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+ QObject (0x0x7f9e9ef07f00) 0
+ primary-for QTcpServer (0x0x7f9e9ef11958)
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f9e9ef46120) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f9e89908780) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f9e89a9aae0) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f9e89ae4360) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f9e89726600) 0
+
+Class QSslServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslServer::QPrivateSignal (0x0x7f9e89798000) 0 empty
+
+Vtable for QSslServer
+QSslServer::_ZTV10QSslServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslServer)
+16 (int (*)(...))QSslServer::metaObject
+24 (int (*)(...))QSslServer::qt_metacast
+32 (int (*)(...))QSslServer::qt_metacall
+40 (int (*)(...))QSslServer::~QSslServer
+48 (int (*)(...))QSslServer::~QSslServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QSslServer::incomingConnection
+
+Class QSslServer
+ size=16 align=8
+ base size=16 base align=8
+QSslServer (0x0x7f9e89786a90) 0
+ vptr=((& QSslServer::_ZTV10QSslServer) + 16)
+ QTcpServer (0x0x7f9e89786af8) 0
+ primary-for QSslServer (0x0x7f9e89786a90)
+ QObject (0x0x7f9e89777f60) 0
+ primary-for QTcpServer (0x0x7f9e89786af8)
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f9e89798240) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUdpSocket)
+16 (int (*)(...))QUdpSocket::metaObject
+24 (int (*)(...))QUdpSocket::qt_metacast
+32 (int (*)(...))QUdpSocket::qt_metacall
+40 (int (*)(...))QUdpSocket::~QUdpSocket
+48 (int (*)(...))QUdpSocket::~QUdpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7f9e89786b60) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+ QAbstractSocket (0x0x7f9e89786bc8) 0
+ primary-for QUdpSocket (0x0x7f9e89786b60)
+ QIODevice (0x0x7f9e89aec850) 0
+ primary-for QAbstractSocket (0x0x7f9e89786bc8)
+ QObject (0x0x7f9e89798180) 0
+ primary-for QIODevice (0x0x7f9e89aec850)
+ QIODeviceBase (0x0x7f9e897981e0) 0 empty
+
+Class QAbstractPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractPrintDialog::QPrivateSignal (0x0x7f9e89798540) 0 empty
+
+Vtable for QAbstractPrintDialog
+QAbstractPrintDialog::_ZTV20QAbstractPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAbstractPrintDialog)
+16 (int (*)(...))QAbstractPrintDialog::metaObject
+24 (int (*)(...))QAbstractPrintDialog::qt_metacast
+32 (int (*)(...))QAbstractPrintDialog::qt_metacall
+40 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+48 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+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 (*)(...))(& _ZTI20QAbstractPrintDialog)
+488 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD1Ev
+496 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD0Ev
+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 QAbstractPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QAbstractPrintDialog (0x0x7f9e89786c30) 0
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 16)
+ QDialog (0x0x7f9e89786c98) 0
+ primary-for QAbstractPrintDialog (0x0x7f9e89786c30)
+ QWidget (0x0x7f9e89aec8c0) 0
+ primary-for QDialog (0x0x7f9e89786c98)
+ QObject (0x0x7f9e89798480) 0
+ primary-for QWidget (0x0x7f9e89aec8c0)
+ QPaintDevice (0x0x7f9e897984e0) 16
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 488)
+
+Class QPageSetupDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPageSetupDialog::QPrivateSignal (0x0x7f9e89798d80) 0 empty
+
+Vtable for QPageSetupDialog
+QPageSetupDialog::_ZTV16QPageSetupDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QPageSetupDialog)
+16 (int (*)(...))QPageSetupDialog::metaObject
+24 (int (*)(...))QPageSetupDialog::qt_metacast
+32 (int (*)(...))QPageSetupDialog::qt_metacall
+40 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+48 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+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 (*)(...))QPageSetupDialog::exec
+448 (int (*)(...))QPageSetupDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI16QPageSetupDialog)
+488 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD1Ev
+496 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD0Ev
+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 QPageSetupDialog
+ size=40 align=8
+ base size=40 base align=8
+QPageSetupDialog (0x0x7f9e89786e38) 0
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 16)
+ QDialog (0x0x7f9e89786ea0) 0
+ primary-for QPageSetupDialog (0x0x7f9e89786e38)
+ QWidget (0x0x7f9e89aecd90) 0
+ primary-for QDialog (0x0x7f9e89786ea0)
+ QObject (0x0x7f9e89798cc0) 0
+ primary-for QWidget (0x0x7f9e89aecd90)
+ QPaintDevice (0x0x7f9e89798d20) 16
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 488)
+
+Class QPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintDialog::QPrivateSignal (0x0x7f9e8984a000) 0 empty
+
+Vtable for QPrintDialog
+QPrintDialog::_ZTV12QPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintDialog)
+16 (int (*)(...))QPrintDialog::metaObject
+24 (int (*)(...))QPrintDialog::qt_metacast
+32 (int (*)(...))QPrintDialog::qt_metacall
+40 (int (*)(...))QPrintDialog::~QPrintDialog
+48 (int (*)(...))QPrintDialog::~QPrintDialog
+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 (*)(...))QPrintDialog::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 (*)(...))QPrintDialog::exec
+448 (int (*)(...))QPrintDialog::done
+456 (int (*)(...))QPrintDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QPrintDialog)
+488 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD1Ev
+496 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD0Ev
+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 QPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintDialog (0x0x7f9e89786f08) 0
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 16)
+ QAbstractPrintDialog (0x0x7f9e89786f70) 0
+ primary-for QPrintDialog (0x0x7f9e89786f08)
+ QDialog (0x0x7f9e89848000) 0
+ primary-for QAbstractPrintDialog (0x0x7f9e89786f70)
+ QWidget (0x0x7f9e89aece00) 0
+ primary-for QDialog (0x0x7f9e89848000)
+ QObject (0x0x7f9e89798f00) 0
+ primary-for QWidget (0x0x7f9e89aece00)
+ QPaintDevice (0x0x7f9e89798f60) 16
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 488)
+
+Vtable for QPrinter
+QPrinter::_ZTV8QPrinter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPrinter)
+16 (int (*)(...))QPrinter::~QPrinter
+24 (int (*)(...))QPrinter::~QPrinter
+32 (int (*)(...))QPrinter::devType
+40 (int (*)(...))QPrinter::paintEngine
+48 (int (*)(...))QPrinter::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPrinter::newPage
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPrinter
+ size=32 align=8
+ base size=32 base align=8
+QPrinter (0x0x7f9e89848068) 0
+ vptr=((& QPrinter::_ZTV8QPrinter) + 16)
+ QPagedPaintDevice (0x0x7f9e898480d0) 0
+ primary-for QPrinter (0x0x7f9e89848068)
+ QPaintDevice (0x0x7f9e8984a180) 0
+ primary-for QPagedPaintDevice (0x0x7f9e898480d0)
+
+Vtable for QPrintEngine
+QPrintEngine::_ZTV12QPrintEngine: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintEngine)
+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 QPrintEngine
+ size=8 align=8
+ base size=8 base align=8
+QPrintEngine (0x0x7f9e8984a7e0) 0 nearly-empty
+ vptr=((& QPrintEngine::_ZTV12QPrintEngine) + 16)
+
+Class QPrinterInfo
+ size=8 align=8
+ base size=8 base align=8
+QPrinterInfo (0x0x7f9e8984aa20) 0
+
+Class QPrintPreviewDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewDialog::QPrivateSignal (0x0x7f9e8984ac60) 0 empty
+
+Vtable for QPrintPreviewDialog
+QPrintPreviewDialog::_ZTV19QPrintPreviewDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+16 (int (*)(...))QPrintPreviewDialog::metaObject
+24 (int (*)(...))QPrintPreviewDialog::qt_metacast
+32 (int (*)(...))QPrintPreviewDialog::qt_metacall
+40 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+48 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+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 (*)(...))QPrintPreviewDialog::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 (*)(...))QPrintPreviewDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+488 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD1Ev
+496 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD0Ev
+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 QPrintPreviewDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewDialog (0x0x7f9e898481a0) 0
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 16)
+ QDialog (0x0x7f9e89848208) 0
+ primary-for QPrintPreviewDialog (0x0x7f9e898481a0)
+ QWidget (0x0x7f9e89898070) 0
+ primary-for QDialog (0x0x7f9e89848208)
+ QObject (0x0x7f9e8984aba0) 0
+ primary-for QWidget (0x0x7f9e89898070)
+ QPaintDevice (0x0x7f9e8984ac00) 16
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 488)
+
+Class QPrintPreviewWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewWidget::QPrivateSignal (0x0x7f9e8984aea0) 0 empty
+
+Vtable for QPrintPreviewWidget
+QPrintPreviewWidget::_ZTV19QPrintPreviewWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewWidget)
+16 (int (*)(...))QPrintPreviewWidget::metaObject
+24 (int (*)(...))QPrintPreviewWidget::qt_metacast
+32 (int (*)(...))QPrintPreviewWidget::qt_metacall
+40 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+48 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+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 (*)(...))QPrintPreviewWidget::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 (*)(...))(& _ZTI19QPrintPreviewWidget)
+448 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD1Ev
+456 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD0Ev
+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 QPrintPreviewWidget
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewWidget (0x0x7f9e89848270) 0
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 16)
+ QWidget (0x0x7f9e898980e0) 0
+ primary-for QPrintPreviewWidget (0x0x7f9e89848270)
+ QObject (0x0x7f9e8984ade0) 0
+ primary-for QWidget (0x0x7f9e898980e0)
+ QPaintDevice (0x0x7f9e8984ae40) 16
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 448)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f9e898de060) 0
+
+Class QJSNumberCoercion
+ size=8 align=8
+ base size=8 base align=8
+QJSNumberCoercion (0x0x7f9e8956d540) 0
+
+Class QJSPrimitiveUndefined
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveUndefined (0x0x7f9e8956dba0) 0 empty
+
+Class QJSPrimitiveNull
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveNull (0x0x7f9e8956dc00) 0 empty
+
+Class QJSPrimitiveValue::AddOperators
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveValue::AddOperators (0x0x7f9e8956dd20) 0 empty
+
+Class QJSPrimitiveValue::SubOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::SubOperators (0x0x7f9e89848af8) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::SubOperators> (0x0x7f9e8956dde0) 0 empty
+
+Class QJSPrimitiveValue::MulOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::MulOperators (0x0x7f9e89848b60) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::MulOperators> (0x0x7f9e8956dea0) 0 empty
+
+Class QJSPrimitiveValue::DivOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::DivOperators (0x0x7f9e89848bc8) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::DivOperators> (0x0x7f9e8956df60) 0 empty
+
+Class QJSPrimitiveValue::QJSPrimitiveValuePrivate
+ size=32 align=8
+ base size=25 base align=8
+QJSPrimitiveValue::QJSPrimitiveValuePrivate (0x0x7f9e895b5000) 0
+
+Class QJSPrimitiveValue
+ size=32 align=8
+ base size=32 base align=8
+QJSPrimitiveValue (0x0x7f9e8956dc60) 0
+
+Class QJSManagedValue
+ size=8 align=8
+ base size=8 base align=8
+QJSManagedValue (0x0x7f9e896eb7e0) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f9e896ebae0) 0 empty
+
+Class {anonymous}::QQmlTriviallyDestructibleDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+{anonymous}::QQmlTriviallyDestructibleDebuggingEnabler (0x0x7f9e896ebd20) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f9e8935d300) 0 empty
+
+Vtable for QJSEngine
+QJSEngine::_ZTV9QJSEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QJSEngine)
+16 (int (*)(...))QJSEngine::metaObject
+24 (int (*)(...))QJSEngine::qt_metacast
+32 (int (*)(...))QJSEngine::qt_metacall
+40 (int (*)(...))QJSEngine::~QJSEngine
+48 (int (*)(...))QJSEngine::~QJSEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QJSEngine
+ size=24 align=8
+ base size=24 base align=8
+QJSEngine (0x0x7f9e893533a8) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+ QObject (0x0x7f9e8935d2a0) 0
+ primary-for QJSEngine (0x0x7f9e893533a8)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f9e8935dea0) 0
+
+Vtable for QQmlParserStatus
+QQmlParserStatus::_ZTV16QQmlParserStatus: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlParserStatus)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlParserStatus
+ size=16 align=8
+ base size=16 base align=8
+QQmlParserStatus (0x0x7f9e894010c0) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f9e89401d80) 0
+
+Vtable for QQmlPropertyValueSource
+QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQmlPropertyValueSource)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlPropertyValueSource
+ size=8 align=8
+ base size=8 base align=8
+QQmlPropertyValueSource (0x0x7f9e894303c0) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=176 align=8
+ base size=176 base align=8
+QQmlPrivate::RegisterType (0x0x7f9e89471d20) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=168 align=8
+ base size=168 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7f9e89471d80) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f9e89471de0) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f9e89471e40) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f9e89471ea0) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7f9e8949a240) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f9e8949a300) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f9e8949a360) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7f9e8949a3c0) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7f9e8949a420) 0
+
+Class QQmlPrivate::AOTCompiledContext
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::AOTCompiledContext (0x0x7f9e8949a480) 0
+
+Class QQmlPrivate::AOTCompiledFunction
+ size=48 align=8
+ base size=48 base align=8
+QQmlPrivate::AOTCompiledFunction (0x0x7f9e8949a540) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f9e8949ad20) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f9e8949ad80) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7f9e8949ade0) 0
+
+Class QQmlPrivate::SingletonInstanceFunctor
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::SingletonInstanceFunctor (0x0x7f9e8949ae40) 0
+
+Vtable for QQmlAbstractUrlInterceptor
+QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QQmlAbstractUrlInterceptor)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlAbstractUrlInterceptor
+ size=8 align=8
+ base size=8 base align=8
+QQmlAbstractUrlInterceptor (0x0x7f9e892e0ae0) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f9e892e0b40) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7f9e88f37660) 0 empty
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 (int (*)(...))QQmlImageProviderBase::metaObject
+24 (int (*)(...))QQmlImageProviderBase::qt_metacast
+32 (int (*)(...))QQmlImageProviderBase::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 QQmlImageProviderBase
+ size=16 align=8
+ base size=16 base align=8
+QQmlImageProviderBase (0x0x7f9e88f39958) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+ QObject (0x0x7f9e88f37600) 0
+ primary-for QQmlImageProviderBase (0x0x7f9e88f39958)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f9e88f37c00) 0 empty
+
+Vtable for QQmlEngine
+QQmlEngine::_ZTV10QQmlEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQmlEngine)
+16 (int (*)(...))QQmlEngine::metaObject
+24 (int (*)(...))QQmlEngine::qt_metacast
+32 (int (*)(...))QQmlEngine::qt_metacall
+40 (int (*)(...))QQmlEngine::~QQmlEngine
+48 (int (*)(...))QQmlEngine::~QQmlEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngine (0x0x7f9e88f39af8) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+ QJSEngine (0x0x7f9e88f39b60) 0
+ primary-for QQmlEngine (0x0x7f9e88f39af8)
+ QObject (0x0x7f9e88f37ba0) 0
+ primary-for QJSEngine (0x0x7f9e88f39b60)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f9e88f37f00) 0 empty
+
+Vtable for QQmlApplicationEngine
+QQmlApplicationEngine::_ZTV21QQmlApplicationEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlApplicationEngine)
+16 (int (*)(...))QQmlApplicationEngine::metaObject
+24 (int (*)(...))QQmlApplicationEngine::qt_metacast
+32 (int (*)(...))QQmlApplicationEngine::qt_metacall
+40 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+48 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlApplicationEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlApplicationEngine (0x0x7f9e88f39bc8) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+ QQmlEngine (0x0x7f9e88f39c30) 0
+ primary-for QQmlApplicationEngine (0x0x7f9e88f39bc8)
+ QJSEngine (0x0x7f9e88f39c98) 0
+ primary-for QQmlEngine (0x0x7f9e88f39c30)
+ QObject (0x0x7f9e88f37ea0) 0
+ primary-for QJSEngine (0x0x7f9e88f39c98)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f9e88fdc120) 0 empty
+
+Vtable for QQmlComponent
+QQmlComponent::_ZTV13QQmlComponent: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlComponent)
+16 (int (*)(...))QQmlComponent::metaObject
+24 (int (*)(...))QQmlComponent::qt_metacast
+32 (int (*)(...))QQmlComponent::qt_metacall
+40 (int (*)(...))QQmlComponent::~QQmlComponent
+48 (int (*)(...))QQmlComponent::~QQmlComponent
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlComponent::create
+120 (int (*)(...))QQmlComponent::beginCreate
+128 (int (*)(...))QQmlComponent::completeCreate
+
+Class QQmlComponent
+ size=16 align=8
+ base size=16 base align=8
+QQmlComponent (0x0x7f9e88f39d00) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+ QObject (0x0x7f9e88fdc0c0) 0
+ primary-for QQmlComponent (0x0x7f9e88f39d00)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f9e88fdcf00) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7f9e88fdcf60) 0
+
+Vtable for QQmlContext
+QQmlContext::_ZTV11QQmlContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QQmlContext)
+16 (int (*)(...))QQmlContext::metaObject
+24 (int (*)(...))QQmlContext::qt_metacast
+32 (int (*)(...))QQmlContext::qt_metacall
+40 (int (*)(...))QQmlContext::~QQmlContext
+48 (int (*)(...))QQmlContext::~QQmlContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlContext
+ size=16 align=8
+ base size=16 base align=8
+QQmlContext (0x0x7f9e88f39e38) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+ QObject (0x0x7f9e88fdcea0) 0
+ primary-for QQmlContext (0x0x7f9e88f39e38)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f9e89050120) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f9e89050720) 0 empty
+
+Vtable for QQmlExpression
+QQmlExpression::_ZTV14QQmlExpression: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QQmlExpression)
+16 (int (*)(...))QQmlExpression::metaObject
+24 (int (*)(...))QQmlExpression::qt_metacast
+32 (int (*)(...))QQmlExpression::qt_metacall
+40 (int (*)(...))QQmlExpression::~QQmlExpression
+48 (int (*)(...))QQmlExpression::~QQmlExpression
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlExpression
+ size=16 align=8
+ base size=16 base align=8
+QQmlExpression (0x0x7f9e88f39f08) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+ QObject (0x0x7f9e890506c0) 0
+ primary-for QQmlExpression (0x0x7f9e88f39f08)
+
+Vtable for QQmlTypesExtensionInterface
+QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QQmlTypesExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlTypesExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlTypesExtensionInterface (0x0x7f9e890508a0) 0 nearly-empty
+ vptr=((& QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface) + 16)
+
+Vtable for QQmlExtensionInterface
+QQmlExtensionInterface::_ZTV22QQmlExtensionInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QQmlExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlExtensionInterface (0x0x7f9e88f39f70) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+ QQmlTypesExtensionInterface (0x0x7f9e89050900) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f9e88f39f70)
+
+Vtable for QQmlEngineExtensionInterface
+QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QQmlEngineExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlEngineExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlEngineExtensionInterface (0x0x7f9e89050960) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f9e890ad4e0) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+16 (int (*)(...))QQmlExtensionPlugin::metaObject
+24 (int (*)(...))QQmlExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlExtensionPlugin::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 (*)(...))QQmlExtensionPlugin::unregisterTypes
+128 (int (*)(...))QQmlExtensionPlugin::initializeEngine
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+152 0
+160 0
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7f9e88fe74d0) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+ QObject (0x0x7f9e890ad420) 0
+ primary-for QQmlExtensionPlugin (0x0x7f9e88fe74d0)
+ QQmlExtensionInterface (0x0x7f9e890a1270) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+ QQmlTypesExtensionInterface (0x0x7f9e890ad480) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f9e890a1270)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7f9e890ad720) 0 empty
+
+Vtable for QQmlEngineExtensionPlugin
+QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+16 (int (*)(...))QQmlEngineExtensionPlugin::metaObject
+24 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacall
+40 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+48 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlEngineExtensionPlugin::initializeEngine
+120 (int (*)(...))-16
+128 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+136 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD1Ev
+144 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD0Ev
+152 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlEngineExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngineExtensionPlugin (0x0x7f9e88fe7540) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+ QObject (0x0x7f9e890ad660) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7f9e88fe7540)
+ QQmlEngineExtensionInterface (0x0x7f9e890ad6c0) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f9e890ad7e0) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f9e890ad8a0) 0 empty
+
+Vtable for QQmlFileSelector
+QQmlFileSelector::_ZTV16QQmlFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlFileSelector)
+16 (int (*)(...))QQmlFileSelector::metaObject
+24 (int (*)(...))QQmlFileSelector::qt_metacast
+32 (int (*)(...))QQmlFileSelector::qt_metacall
+40 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+48 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QQmlFileSelector (0x0x7f9e890a1340) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+ QObject (0x0x7f9e890ad840) 0
+ primary-for QQmlFileSelector (0x0x7f9e890a1340)
+
+Vtable for QQmlIncubator
+QQmlIncubator::_ZTV13QQmlIncubator: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlIncubator)
+16 (int (*)(...))QQmlIncubator::~QQmlIncubator
+24 (int (*)(...))QQmlIncubator::~QQmlIncubator
+32 (int (*)(...))QQmlIncubator::statusChanged
+40 (int (*)(...))QQmlIncubator::setInitialState
+
+Class QQmlIncubator
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubator (0x0x7f9e890ada20) 0
+ vptr=((& QQmlIncubator::_ZTV13QQmlIncubator) + 16)
+
+Vtable for QQmlIncubationController
+QQmlIncubationController::_ZTV24QQmlIncubationController: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQmlIncubationController)
+16 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+24 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+32 (int (*)(...))QQmlIncubationController::incubatingObjectCountChanged
+
+Class QQmlIncubationController
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubationController (0x0x7f9e890ada80) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f9e890a13a8) 0
+ QDebug (0x0x7f9e890a1410) 0
+ QIODeviceBase (0x0x7f9e890adae0) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7f9e88d99060) 0
+
+Vtable for QQmlNetworkAccessManagerFactory
+QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QQmlNetworkAccessManagerFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlNetworkAccessManagerFactory
+ size=8 align=8
+ base size=8 base align=8
+QQmlNetworkAccessManagerFactory (0x0x7f9e88d990c0) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f9e88d99120) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f9e88dfd5a0) 0 empty
+
+Vtable for QQmlPropertyMap
+QQmlPropertyMap::_ZTV15QQmlPropertyMap: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQmlPropertyMap)
+16 (int (*)(...))QQmlPropertyMap::metaObject
+24 (int (*)(...))QQmlPropertyMap::qt_metacast
+32 (int (*)(...))QQmlPropertyMap::qt_metacall
+40 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+48 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlPropertyMap::updateValue
+
+Class QQmlPropertyMap
+ size=16 align=8
+ base size=16 base align=8
+QQmlPropertyMap (0x0x7f9e88e00618) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+ QObject (0x0x7f9e88dfd540) 0
+ primary-for QQmlPropertyMap (0x0x7f9e88e00618)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f9e88dfd7e0) 0 empty
+
+Vtable for QQuickTransform
+QQuickTransform::_ZTV15QQuickTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQuickTransform)
+16 (int (*)(...))QQuickTransform::metaObject
+24 (int (*)(...))QQuickTransform::qt_metacast
+32 (int (*)(...))QQuickTransform::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 QQuickTransform
+ size=16 align=8
+ base size=16 base align=8
+QQuickTransform (0x0x7f9e88e00680) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+ QObject (0x0x7f9e88dfd780) 0
+ primary-for QQuickTransform (0x0x7f9e88e00680)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f9e88dfda20) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f9e88dfda80) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f9e88dfdae0) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickItem)
+16 (int (*)(...))QQuickItem::metaObject
+24 (int (*)(...))QQuickItem::qt_metacast
+32 (int (*)(...))QQuickItem::qt_metacall
+40 (int (*)(...))QQuickItem::~QQuickItem
+48 (int (*)(...))QQuickItem::~QQuickItem
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickItem::isTextureProvider
+152 (int (*)(...))QQuickItem::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickItem::updatePaintNode
+368 (int (*)(...))QQuickItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))-16
+392 (int (*)(...))(& _ZTI10QQuickItem)
+400 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7f9e88dec230) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+ QObject (0x0x7f9e88dfd960) 0
+ primary-for QQuickItem (0x0x7f9e88dec230)
+ QQmlParserStatus (0x0x7f9e88dfd9c0) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 400)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f9e88b5e840) 0 empty
+
+Vtable for QQuickFramebufferObject::Renderer
+QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN23QQuickFramebufferObject8RendererE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QQuickFramebufferObject::Renderer::createFramebufferObject
+48 (int (*)(...))QQuickFramebufferObject::Renderer::synchronize
+
+Class QQuickFramebufferObject::Renderer
+ size=16 align=8
+ base size=16 base align=8
+QQuickFramebufferObject::Renderer (0x0x7f9e88b5e8a0) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+16 (int (*)(...))QQuickFramebufferObject::metaObject
+24 (int (*)(...))QQuickFramebufferObject::qt_metacast
+32 (int (*)(...))QQuickFramebufferObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickFramebufferObject::isTextureProvider
+152 (int (*)(...))QQuickFramebufferObject::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickFramebufferObject::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+368 (int (*)(...))QQuickFramebufferObject::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7f9e88b710d0) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+ QQuickItem (0x0x7f9e88b18620) 0
+ primary-for QQuickFramebufferObject (0x0x7f9e88b710d0)
+ QObject (0x0x7f9e88b5e780) 0
+ primary-for QQuickItem (0x0x7f9e88b18620)
+ QQmlParserStatus (0x0x7f9e88b5e7e0) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 408)
+
+Class QQuickGraphicsConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsConfiguration (0x0x7f9e88b5ea20) 0
+
+Class QQuickGraphicsDevice
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsDevice (0x0x7f9e88b5ea80) 0
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f9e88b5eb40) 0 empty
+
+Vtable for QQuickTextureFactory
+QQuickTextureFactory::_ZTV20QQuickTextureFactory: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickTextureFactory)
+16 (int (*)(...))QQuickTextureFactory::metaObject
+24 (int (*)(...))QQuickTextureFactory::qt_metacast
+32 (int (*)(...))QQuickTextureFactory::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 (*)(...))QQuickTextureFactory::image
+
+Class QQuickTextureFactory
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextureFactory (0x0x7f9e88b71138) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+ QObject (0x0x7f9e88b5eae0) 0
+ primary-for QQuickTextureFactory (0x0x7f9e88b71138)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f9e88b5ec60) 0 empty
+
+Vtable for QQuickImageResponse
+QQuickImageResponse::_ZTV19QQuickImageResponse: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageResponse)
+16 (int (*)(...))QQuickImageResponse::metaObject
+24 (int (*)(...))QQuickImageResponse::qt_metacast
+32 (int (*)(...))QQuickImageResponse::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 (*)(...))QQuickImageResponse::errorString
+128 (int (*)(...))QQuickImageResponse::cancel
+
+Class QQuickImageResponse
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageResponse (0x0x7f9e88b711a0) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+ QObject (0x0x7f9e88b5ec00) 0
+ primary-for QQuickImageResponse (0x0x7f9e88b711a0)
+
+Class QQuickImageProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageProvider::QPrivateSignal (0x0x7f9e88b5ee40) 0 empty
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::qt_metacall
+40 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+48 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickImageProvider (0x0x7f9e88b71208) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+ QQmlImageProviderBase (0x0x7f9e88b71270) 0
+ primary-for QQuickImageProvider (0x0x7f9e88b71208)
+ QObject (0x0x7f9e88b5ede0) 0
+ primary-for QQmlImageProviderBase (0x0x7f9e88b71270)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::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 (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=32 align=8
+ base size=32 base align=8
+QQuickAsyncImageProvider (0x0x7f9e88b712d8) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+ QQuickImageProvider (0x0x7f9e88b71340) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f9e88b712d8)
+ QQmlImageProviderBase (0x0x7f9e88b713a8) 0
+ primary-for QQuickImageProvider (0x0x7f9e88b71340)
+ QObject (0x0x7f9e88b5ef00) 0
+ primary-for QQmlImageProviderBase (0x0x7f9e88b713a8)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f9e88bb7000) 0 empty
+
+Vtable for QQuickItemGrabResult
+QQuickItemGrabResult::_ZTV20QQuickItemGrabResult: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickItemGrabResult)
+16 (int (*)(...))QQuickItemGrabResult::metaObject
+24 (int (*)(...))QQuickItemGrabResult::qt_metacast
+32 (int (*)(...))QQuickItemGrabResult::qt_metacall
+40 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+48 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+56 (int (*)(...))QQuickItemGrabResult::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickItemGrabResult
+ size=16 align=8
+ base size=16 base align=8
+QQuickItemGrabResult (0x0x7f9e88b71410) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+ QObject (0x0x7f9e88b5ef60) 0
+ primary-for QQuickItemGrabResult (0x0x7f9e88b71410)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f9e88bb7240) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+16 (int (*)(...))QQuickPaintedItem::metaObject
+24 (int (*)(...))QQuickPaintedItem::qt_metacast
+32 (int (*)(...))QQuickPaintedItem::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickPaintedItem::isTextureProvider
+152 (int (*)(...))QQuickPaintedItem::textureProvider
+160 (int (*)(...))QQuickPaintedItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickPaintedItem::updatePaintNode
+368 (int (*)(...))QQuickPaintedItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7f9e88b71478) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+ QQuickItem (0x0x7f9e88b18690) 0
+ primary-for QQuickPaintedItem (0x0x7f9e88b71478)
+ QObject (0x0x7f9e88bb7180) 0
+ primary-for QQuickItem (0x0x7f9e88b18690)
+ QQmlParserStatus (0x0x7f9e88bb71e0) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 408)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f9e88bb7a20) 0 empty
+
+Vtable for QQuickRenderControl
+QQuickRenderControl::_ZTV19QQuickRenderControl: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickRenderControl)
+16 (int (*)(...))QQuickRenderControl::metaObject
+24 (int (*)(...))QQuickRenderControl::qt_metacast
+32 (int (*)(...))QQuickRenderControl::qt_metacall
+40 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+48 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickRenderControl::renderWindow
+
+Class QQuickRenderControl
+ size=16 align=8
+ base size=16 base align=8
+QQuickRenderControl (0x0x7f9e88b71618) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+ QObject (0x0x7f9e88bb79c0) 0
+ primary-for QQuickRenderControl (0x0x7f9e88b71618)
+
+Class QQuickRenderTarget
+ size=8 align=8
+ base size=8 base align=8
+QQuickRenderTarget (0x0x7f9e88bb7c00) 0
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f9e88bb7d80) 0 empty
+
+Vtable for QQuickTextDocument
+QQuickTextDocument::_ZTV18QQuickTextDocument: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QQuickTextDocument)
+16 (int (*)(...))QQuickTextDocument::metaObject
+24 (int (*)(...))QQuickTextDocument::qt_metacast
+32 (int (*)(...))QQuickTextDocument::qt_metacall
+40 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+48 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextDocument (0x0x7f9e88b71680) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+ QObject (0x0x7f9e88bb7d20) 0
+ primary-for QQuickTextDocument (0x0x7f9e88b71680)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f9e88c65960) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f9e88c659c0) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f9e88c65a20) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f9e88c65a80) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f9e88c65ae0) 0
+
+Vtable for QSGGeometry
+QSGGeometry::_ZTV11QSGGeometry: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGGeometry)
+16 (int (*)(...))QSGGeometry::~QSGGeometry
+24 (int (*)(...))QSGGeometry::~QSGGeometry
+
+Class QSGGeometry
+ size=128 align=8
+ base size=128 base align=8
+QSGGeometry (0x0x7f9e88c65900) 0
+ vptr=((& QSGGeometry::_ZTV11QSGGeometry) + 16)
+
+Vtable for QSGNode
+QSGNode::_ZTV7QSGNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSGNode)
+16 (int (*)(...))QSGNode::~QSGNode
+24 (int (*)(...))QSGNode::~QSGNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGNode
+ size=72 align=8
+ base size=72 base align=8
+QSGNode (0x0x7f9e88ccd4e0) 0
+ vptr=((& QSGNode::_ZTV7QSGNode) + 16)
+
+Vtable for QSGBasicGeometryNode
+QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGBasicGeometryNode)
+16 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+24 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGBasicGeometryNode
+ size=104 align=8
+ base size=104 base align=8
+QSGBasicGeometryNode (0x0x7f9e88b71a28) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+ QSGNode (0x0x7f9e88ccdd20) 0
+ primary-for QSGBasicGeometryNode (0x0x7f9e88b71a28)
+
+Vtable for QSGGeometryNode
+QSGGeometryNode::_ZTV15QSGGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSGGeometryNode)
+16 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+24 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGGeometryNode
+ size=136 align=8
+ base size=136 base align=8
+QSGGeometryNode (0x0x7f9e88b71a90) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+ QSGBasicGeometryNode (0x0x7f9e88b71af8) 0
+ primary-for QSGGeometryNode (0x0x7f9e88b71a90)
+ QSGNode (0x0x7f9e88948000) 0
+ primary-for QSGBasicGeometryNode (0x0x7f9e88b71af8)
+
+Vtable for QSGClipNode
+QSGClipNode::_ZTV11QSGClipNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGClipNode)
+16 (int (*)(...))QSGClipNode::~QSGClipNode
+24 (int (*)(...))QSGClipNode::~QSGClipNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGClipNode
+ size=144 align=8
+ base size=144 base align=8
+QSGClipNode (0x0x7f9e88b71b60) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+ QSGBasicGeometryNode (0x0x7f9e88b71bc8) 0
+ primary-for QSGClipNode (0x0x7f9e88b71b60)
+ QSGNode (0x0x7f9e889481e0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f9e88b71bc8)
+
+Vtable for QSGTransformNode
+QSGTransformNode::_ZTV16QSGTransformNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGTransformNode)
+16 (int (*)(...))QSGTransformNode::~QSGTransformNode
+24 (int (*)(...))QSGTransformNode::~QSGTransformNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGTransformNode
+ size=208 align=8
+ base size=208 base align=8
+QSGTransformNode (0x0x7f9e88b71c30) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+ QSGNode (0x0x7f9e88948300) 0
+ primary-for QSGTransformNode (0x0x7f9e88b71c30)
+
+Vtable for QSGRootNode
+QSGRootNode::_ZTV11QSGRootNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGRootNode)
+16 (int (*)(...))QSGRootNode::~QSGRootNode
+24 (int (*)(...))QSGRootNode::~QSGRootNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGRootNode
+ size=96 align=8
+ base size=96 base align=8
+QSGRootNode (0x0x7f9e88b71c98) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+ QSGNode (0x0x7f9e88948420) 0
+ primary-for QSGRootNode (0x0x7f9e88b71c98)
+
+Vtable for QSGOpacityNode
+QSGOpacityNode::_ZTV14QSGOpacityNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGOpacityNode)
+16 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+24 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+32 (int (*)(...))QSGOpacityNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGOpacityNode
+ size=88 align=8
+ base size=88 base align=8
+QSGOpacityNode (0x0x7f9e8896e5b0) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+ QSGNode (0x0x7f9e88948de0) 0
+ primary-for QSGOpacityNode (0x0x7f9e8896e5b0)
+
+Vtable for QSGNodeVisitor
+QSGNodeVisitor::_ZTV14QSGNodeVisitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGNodeVisitor)
+16 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+24 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+32 (int (*)(...))QSGNodeVisitor::enterTransformNode
+40 (int (*)(...))QSGNodeVisitor::leaveTransformNode
+48 (int (*)(...))QSGNodeVisitor::enterClipNode
+56 (int (*)(...))QSGNodeVisitor::leaveClipNode
+64 (int (*)(...))QSGNodeVisitor::enterGeometryNode
+72 (int (*)(...))QSGNodeVisitor::leaveGeometryNode
+80 (int (*)(...))QSGNodeVisitor::enterOpacityNode
+88 (int (*)(...))QSGNodeVisitor::leaveOpacityNode
+96 (int (*)(...))QSGNodeVisitor::visitNode
+104 (int (*)(...))QSGNodeVisitor::visitChildren
+
+Class QSGNodeVisitor
+ size=8 align=8
+ base size=8 base align=8
+QSGNodeVisitor (0x0x7f9e88948f00) 0 nearly-empty
+ vptr=((& QSGNodeVisitor::_ZTV14QSGNodeVisitor) + 16)
+
+Vtable for QSGRendererInterface
+QSGRendererInterface::_ZTV20QSGRendererInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGRendererInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QSGRendererInterface::getResource
+48 (int (*)(...))QSGRendererInterface::getResource
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRendererInterface
+ size=8 align=8
+ base size=8 base align=8
+QSGRendererInterface (0x0x7f9e889d4780) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f9e8873f1e0) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7f9e8873f240) 0
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QQuickWindow)
+16 (int (*)(...))QQuickWindow::metaObject
+24 (int (*)(...))QQuickWindow::qt_metacast
+32 (int (*)(...))QQuickWindow::qt_metacall
+40 (int (*)(...))QQuickWindow::~QQuickWindow
+48 (int (*)(...))QQuickWindow::~QQuickWindow
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickWindow::keyPressEvent
+232 (int (*)(...))QQuickWindow::keyReleaseEvent
+240 (int (*)(...))QQuickWindow::mousePressEvent
+248 (int (*)(...))QQuickWindow::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickWindow::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI12QQuickWindow)
+328 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+336 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7f9e8896e888) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+ QWindow (0x0x7f9e88a7c2a0) 0
+ primary-for QQuickWindow (0x0x7f9e8896e888)
+ QObject (0x0x7f9e8873f120) 0
+ primary-for QWindow (0x0x7f9e88a7c2a0)
+ QSurface (0x0x7f9e8873f180) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 328)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f9e887c6ae0) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickView)
+16 (int (*)(...))QQuickView::metaObject
+24 (int (*)(...))QQuickView::qt_metacast
+32 (int (*)(...))QQuickView::qt_metacall
+40 (int (*)(...))QQuickView::~QQuickView
+48 (int (*)(...))QQuickView::~QQuickView
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QQuickView::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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickView::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickView::keyPressEvent
+232 (int (*)(...))QQuickView::keyReleaseEvent
+240 (int (*)(...))QQuickView::mousePressEvent
+248 (int (*)(...))QQuickView::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickView::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI10QQuickView)
+328 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+336 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7f9e887cf340) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+ QQuickWindow (0x0x7f9e887cf3a8) 0
+ primary-for QQuickView (0x0x7f9e887cf340)
+ QWindow (0x0x7f9e88a7cb60) 0
+ primary-for QQuickWindow (0x0x7f9e887cf3a8)
+ QObject (0x0x7f9e887c6a20) 0
+ primary-for QWindow (0x0x7f9e88a7cb60)
+ QSurface (0x0x7f9e887c6a80) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 328)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f9e887c6de0) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f9e887c6ea0) 0
+
+Class QSGMaterialShader::GraphicsPipelineState
+ size=40 align=4
+ base size=40 base align=4
+QSGMaterialShader::GraphicsPipelineState (0x0x7f9e8880c120) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+24 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+32 (int (*)(...))QSGMaterialShader::updateUniformData
+40 (int (*)(...))QSGMaterialShader::updateSampledImage
+48 (int (*)(...))QSGMaterialShader::updateGraphicsPipelineState
+
+Class QSGMaterialShader
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader (0x0x7f9e887c6e40) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16)
+
+Vtable for QSGMaterial
+QSGMaterial::_ZTV11QSGMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGMaterial)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QSGMaterial::compare
+
+Class QSGMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGMaterial (0x0x7f9e8856f120) 0
+ vptr=((& QSGMaterial::_ZTV11QSGMaterial) + 16)
+
+Vtable for QSGFlatColorMaterial
+QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGFlatColorMaterial)
+16 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+24 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+32 (int (*)(...))QSGFlatColorMaterial::type
+40 (int (*)(...))QSGFlatColorMaterial::createShader
+48 (int (*)(...))QSGFlatColorMaterial::compare
+
+Class QSGFlatColorMaterial
+ size=40 align=8
+ base size=40 base align=8
+QSGFlatColorMaterial (0x0x7f9e887cf8f0) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+ QSGMaterial (0x0x7f9e8856f660) 0
+ primary-for QSGFlatColorMaterial (0x0x7f9e887cf8f0)
+
+Class QNativeInterface::QSGOpenGLTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGOpenGLTexture::TypeInfo (0x0x7f9e8856f780) 0 empty
+
+Vtable for QNativeInterface::QSGOpenGLTexture
+QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGOpenGLTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGOpenGLTexture (0x0x7f9e8856f720) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE) + 16)
+
+Class QNativeInterface::QSGVulkanTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGVulkanTexture::TypeInfo (0x0x7f9e8856f8a0) 0 empty
+
+Vtable for QNativeInterface::QSGVulkanTexture
+QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGVulkanTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGVulkanTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGVulkanTexture (0x0x7f9e8856f840) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE) + 16)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f9e8856f9c0) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSGTexture)
+16 (int (*)(...))QSGTexture::metaObject
+24 (int (*)(...))QSGTexture::qt_metacast
+32 (int (*)(...))QSGTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7f9e887cf958) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+ QObject (0x0x7f9e8856f960) 0
+ primary-for QSGTexture (0x0x7f9e887cf958)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f9e89a3e180) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGDynamicTexture)
+16 (int (*)(...))QSGDynamicTexture::metaObject
+24 (int (*)(...))QSGDynamicTexture::qt_metacast
+32 (int (*)(...))QSGDynamicTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7f9e89353138) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+ QSGTexture (0x0x7f9e893531a0) 0
+ primary-for QSGDynamicTexture (0x0x7f9e89353138)
+ QObject (0x0x7f9e89a3e120) 0
+ primary-for QSGTexture (0x0x7f9e893531a0)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSGImageNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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
+
+Class QSGImageNode
+ size=136 align=8
+ base size=136 base align=8
+QSGImageNode (0x0x7f9e8b5595b0) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+ QSGGeometryNode (0x0x7f9e8b559618) 0
+ primary-for QSGImageNode (0x0x7f9e8b5595b0)
+ QSGBasicGeometryNode (0x0x7f9e8b559f70) 0
+ primary-for QSGGeometryNode (0x0x7f9e8b559618)
+ QSGNode (0x0x7f9e89a3e2a0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f9e8b559f70)
+
+Vtable for QSGNinePatchNode
+QSGNinePatchNode::_ZTV16QSGNinePatchNode: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGNinePatchNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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 QSGNinePatchNode
+ size=136 align=8
+ base size=136 base align=8
+QSGNinePatchNode (0x0x7f9e8c0c27b8) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+ QSGGeometryNode (0x0x7f9e8c0c28f0) 0
+ primary-for QSGNinePatchNode (0x0x7f9e8c0c27b8)
+ QSGBasicGeometryNode (0x0x7f9e8c0c2a90) 0
+ primary-for QSGGeometryNode (0x0x7f9e8c0c28f0)
+ QSGNode (0x0x7f9e929428a0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f9e8c0c2a90)
+
+Vtable for QSGRectangleNode
+QSGRectangleNode::_ZTV16QSGRectangleNode: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGRectangleNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRectangleNode
+ size=136 align=8
+ base size=136 base align=8
+QSGRectangleNode (0x0x7f9e8c0c2ea0) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+ QSGGeometryNode (0x0x7f9e8c0c2f08) 0
+ primary-for QSGRectangleNode (0x0x7f9e8c0c2ea0)
+ QSGBasicGeometryNode (0x0x7f9e91164270) 0
+ primary-for QSGGeometryNode (0x0x7f9e8c0c2f08)
+ QSGNode (0x0x7f9e92942900) 0
+ primary-for QSGBasicGeometryNode (0x0x7f9e91164270)
+
+Vtable for QSGRenderNode::RenderState
+QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QSGRenderNode11RenderStateE)
+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 (*)(...))QSGRenderNode::RenderState::get
+
+Class QSGRenderNode::RenderState
+ size=8 align=8
+ base size=8 base align=8
+QSGRenderNode::RenderState (0x0x7f9e93b1b2a0) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSGRenderNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))QSGRenderNode::changedStates
+56 (int (*)(...))QSGRenderNode::prepare
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QSGRenderNode::releaseResources
+80 (int (*)(...))QSGRenderNode::flags
+88 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=80 align=8
+ base size=80 base align=8
+QSGRenderNode (0x0x7f9e911642d8) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+ QSGNode (0x0x7f9e938ba720) 0
+ primary-for QSGRenderNode (0x0x7f9e911642d8)
+
+Vtable for QSGSimpleRectNode
+QSGSimpleRectNode::_ZTV17QSGSimpleRectNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGSimpleRectNode)
+16 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+24 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleRectNode
+ size=312 align=8
+ base size=312 base align=8
+QSGSimpleRectNode (0x0x7f9e92585d68) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+ QSGGeometryNode (0x0x7f9e927d6410) 0
+ primary-for QSGSimpleRectNode (0x0x7f9e92585d68)
+ QSGBasicGeometryNode (0x0x7f9e927d6750) 0
+ primary-for QSGGeometryNode (0x0x7f9e927d6410)
+ QSGNode (0x0x7f9e97de2240) 0
+ primary-for QSGBasicGeometryNode (0x0x7f9e927d6750)
+
+Vtable for QSGOpaqueTextureMaterial
+QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QSGOpaqueTextureMaterial)
+16 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+24 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+32 (int (*)(...))QSGOpaqueTextureMaterial::type
+40 (int (*)(...))QSGOpaqueTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGOpaqueTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGOpaqueTextureMaterial (0x0x7f9e92baf1a0) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+ QSGMaterial (0x0x7f9e981d0540) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f9e92baf1a0)
+
+Vtable for QSGTextureMaterial
+QSGTextureMaterial::_ZTV18QSGTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureMaterial)
+16 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+24 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+32 (int (*)(...))QSGTextureMaterial::type
+40 (int (*)(...))QSGTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGTextureMaterial (0x0x7f9e92baf208) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+ QSGOpaqueTextureMaterial (0x0x7f9e92d8d410) 0
+ primary-for QSGTextureMaterial (0x0x7f9e92baf208)
+ QSGMaterial (0x0x7f9e992464e0) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f9e92d8d410)
+
+Vtable for QSGSimpleTextureNode
+QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGSimpleTextureNode)
+16 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+24 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleTextureNode
+ size=376 align=8
+ base size=376 base align=8
+QSGSimpleTextureNode (0x0x7f9e92d3f7b8) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+ QSGGeometryNode (0x0x7f9e92f6ad68) 0
+ primary-for QSGSimpleTextureNode (0x0x7f9e92d3f7b8)
+ QSGBasicGeometryNode (0x0x7f9e92eb7d68) 0
+ primary-for QSGGeometryNode (0x0x7f9e92f6ad68)
+ QSGNode (0x0x7f9e9911a6c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f9e92eb7d68)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f9e9a8af180) 0 empty
+
+Vtable for QSGTextureProvider
+QSGTextureProvider::_ZTV18QSGTextureProvider: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureProvider)
+16 (int (*)(...))QSGTextureProvider::metaObject
+24 (int (*)(...))QSGTextureProvider::qt_metacast
+32 (int (*)(...))QSGTextureProvider::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 QSGTextureProvider
+ size=16 align=8
+ base size=16 base align=8
+QSGTextureProvider (0x0x7f9e93dde750) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+ QObject (0x0x7f9e9a8af120) 0
+ primary-for QSGTextureProvider (0x0x7f9e93dde750)
+
+Vtable for QSGVertexColorMaterial
+QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QSGVertexColorMaterial)
+16 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+24 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+32 (int (*)(...))QSGVertexColorMaterial::type
+40 (int (*)(...))QSGVertexColorMaterial::createShader
+48 (int (*)(...))QSGVertexColorMaterial::compare
+
+Class QSGVertexColorMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGVertexColorMaterial (0x0x7f9e93dde7b8) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+ QSGMaterial (0x0x7f9e9a8af720) 0
+ primary-for QSGVertexColorMaterial (0x0x7f9e93dde7b8)
+
+Class QAbstractItemModelTester::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModelTester::QPrivateSignal (0x0x7f9e99c1c780) 0 empty
+
+Vtable for QAbstractItemModelTester
+QAbstractItemModelTester::_ZTV24QAbstractItemModelTester: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractItemModelTester)
+16 (int (*)(...))QAbstractItemModelTester::metaObject
+24 (int (*)(...))QAbstractItemModelTester::qt_metacast
+32 (int (*)(...))QAbstractItemModelTester::qt_metacall
+40 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+48 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAbstractItemModelTester
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModelTester (0x0x7f9e93d63a28) 0
+ vptr=((& QAbstractItemModelTester::_ZTV24QAbstractItemModelTester) + 16)
+ QObject (0x0x7f9e99c1c720) 0
+ primary-for QAbstractItemModelTester (0x0x7f9e93d63a28)
+
+Class QTest::QBenchmarkIterationController
+ size=4 align=4
+ base size=4 base align=4
+QTest::QBenchmarkIterationController (0x0x7f9e99c1ccc0) 0
+
+Class QTestEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTestEventLoop::QPrivateSignal (0x0x7f9e905e7780) 0 empty
+
+Vtable for QTestEventLoop
+QTestEventLoop::_ZTV14QTestEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTestEventLoop)
+16 (int (*)(...))QTestEventLoop::metaObject
+24 (int (*)(...))QTestEventLoop::qt_metacast
+32 (int (*)(...))QTestEventLoop::qt_metacall
+40 (int (*)(...))QTestEventLoop::~QTestEventLoop
+48 (int (*)(...))QTestEventLoop::~QTestEventLoop
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTestEventLoop::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTestEventLoop
+ size=32 align=8
+ base size=32 base align=8
+QTestEventLoop (0x0x7f9e90fa9750) 0
+ vptr=((& QTestEventLoop::_ZTV14QTestEventLoop) + 16)
+ QObject (0x0x7f9e905e7720) 0
+ primary-for QTestEventLoop (0x0x7f9e90fa9750)
+
+Vtable for QSignalSpy
+QSignalSpy::_ZTV10QSignalSpy: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSignalSpy)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QSignalSpy::qt_metacall
+40 (int (*)(...))QSignalSpy::~QSignalSpy
+48 (int (*)(...))QSignalSpy::~QSignalSpy
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalSpy
+ size=128 align=8
+ base size=121 base align=8
+QSignalSpy (0x0x7f9e9a54b4d0) 0
+ vptr=((& QSignalSpy::_ZTV10QSignalSpy) + 16)
+ QObject (0x0x7f9e906bc060) 0
+ primary-for QSignalSpy (0x0x7f9e9a54b4d0)
+ QList<QList<QVariant> > (0x0x7f9e90eba5b0) 16
+ QListSpecialMethods<QList<QVariant> > (0x0x7f9e90eba548) 16 empty
+ QListSpecialMethodsBase<QList<QVariant> > (0x0x7f9e906bc900) 16 empty
+
+Class QTestData
+ size=8 align=8
+ base size=8 base align=8
+QTestData (0x0x7f9e902894e0) 0
+
+Class QTest::Internal::QCborValueFormatter
+ size=1 align=1
+ base size=0 base align=1
+QTest::Internal::QCborValueFormatter (0x0x7f9e8ec5d0c0) 0 empty
+
+Vtable for QSvgGenerator
+QSvgGenerator::_ZTV13QSvgGenerator: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSvgGenerator)
+16 (int (*)(...))QSvgGenerator::~QSvgGenerator
+24 (int (*)(...))QSvgGenerator::~QSvgGenerator
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))QSvgGenerator::paintEngine
+48 (int (*)(...))QSvgGenerator::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QSvgGenerator
+ size=24 align=8
+ base size=24 base align=8
+QSvgGenerator (0x0x7f9e8ead7410) 0
+ vptr=((& QSvgGenerator::_ZTV13QSvgGenerator) + 16)
+ QPaintDevice (0x0x7f9e8b2694e0) 0
+ primary-for QSvgGenerator (0x0x7f9e8ead7410)
+
+Class QSvgRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSvgRenderer::QPrivateSignal (0x0x7f9e8af365a0) 0 empty
+
+Vtable for QSvgRenderer
+QSvgRenderer::_ZTV12QSvgRenderer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSvgRenderer)
+16 (int (*)(...))QSvgRenderer::metaObject
+24 (int (*)(...))QSvgRenderer::qt_metacast
+32 (int (*)(...))QSvgRenderer::qt_metacall
+40 (int (*)(...))QSvgRenderer::~QSvgRenderer
+48 (int (*)(...))QSvgRenderer::~QSvgRenderer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSvgRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSvgRenderer (0x0x7f9e8ead75b0) 0
+ vptr=((& QSvgRenderer::_ZTV12QSvgRenderer) + 16)
+ QObject (0x0x7f9e8b269f00) 0
+ primary-for QSvgRenderer (0x0x7f9e8ead75b0)
+
+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 (0x0x7f9e8aeb3780) 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 (0x0x7f9e8ab1a720) 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 (0x0x7f9e8abcf180) 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 (0x0x7f9e8ac08900) 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 (0x0x7f9e9f413000) 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 (0x0x7f9e9f42e2a0) 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 (0x0x7f9e9f52f6c0) 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 (0x0x7f9e9f54b540) 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 (0x0x7f9e9f57ad20) 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 (0x0x7f9e9f1aecc0) 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 (0x0x7f9e9f2a5ae0) 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 (0x0x7f9e9f000420) 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 (0x0x7f9e9f0516c0) 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 (0x0x7f9e9f06c3c0) 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 (0x0x7f9e9f173720) 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 (0x0x7f9e9eed08a0) 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 (0x0x7f9e88de0420) 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 (0x0x7f9e88948c60) 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 (0x0x7f9e887a81e0) 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 (0x0x7f9e8856fd80) 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 (0x0x7f9e8856ff00) 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 (0x0x7f9e8ecf81e0) 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 (0x0x7f9e8ecf8360) 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 (0x0x7f9e8ecf86c0) 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 (0x0x7f9e8ecf8840) 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 (0x0x7f9e8ecf8ba0) 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 (0x0x7f9e8ecf8d20) 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 (0x0x7f9e8e8c40c0) 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 (0x0x7f9e8e8c4240) 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 (0x0x7f9e8e8c45a0) 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 (0x0x7f9e8e8c4720) 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 (0x0x7f9e8e8c4a80) 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 (0x0x7f9ea2e24b40) 0
+
diff --git a/tests/auto/bic/data/qt.6.5.0.linux-gcc-amd64.txt b/tests/auto/bic/data/qt.6.5.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..370fd7d5d3
--- /dev/null
+++ b/tests/auto/bic/data/qt.6.5.0.linux-gcc-amd64.txt
@@ -0,0 +1,27329 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f4fd7966e40) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f4fd7a2a660) 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 (0x0x7f4fd7a2a8a0) 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 (0x0x7f4fd7a5c960) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f4fd7ab7180) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f4fd7b08f60) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f4fd4f36060) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f4fd4f36540) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f4fd4f365a0) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f4fd4f36600) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f4fd4f36660) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f4fd4f366c0) 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 (0x0x7f4fd4f36780) 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 (0x0x7f4fd4f36840) 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 (0x0x7f4fd4f36900) 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 (0x0x7f4fd4f369c0) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f4fd4f36d20) 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 (0x0x7f4fd4f7e0c0) 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 (0x0x7f4fd4f7e120) 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 (0x0x7f4fd4f7e3c0) 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 (0x0x7f4fd4f7e420) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f4fd4f7ec60) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f4fd4ffc240) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f4fd4f8baf8) 0 empty
+ std::__nonesuch (0x0x7f4fd4ffc720) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f4fd5081480) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f4fd5081c00) 0 empty
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f4fd5112a80) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f4fd5112c00) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f4fd4d34a20) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f4fd4e1d4e0) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f4fd4e1d540) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f4fd4e0aaf8) 0 empty
+ std::input_iterator_tag (0x0x7f4fd4e1d5a0) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f4fd4e0ab60) 0 empty
+ std::forward_iterator_tag (0x0x7f4fd4e0abc8) 0 empty
+ std::input_iterator_tag (0x0x7f4fd4e1d600) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f4fd4e0ac30) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f4fd4e0ac98) 0 empty
+ std::forward_iterator_tag (0x0x7f4fd4e0ad00) 0 empty
+ std::input_iterator_tag (0x0x7f4fd4e1d660) 0 empty
+
+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 (0x0x7f4fd4e1dcc0) 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 (0x0x7f4fd4e0add0) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f4fd4e1dea0) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f4fd4e0add0)
+
+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 (0x0x7f4fd4e580c0) 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 (0x0x7f4fd4e0ae38) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f4fd4e58480) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f4fd4e0ae38)
+
+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 (0x0x7f4fd4e0aea0) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f4fd4e58660) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f4fd4e0aea0)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f4fd4e58840) 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 (0x0x7f4fd4e58d80) 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 (0x0x7f4fd4e0af08) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f4fd4e8e480) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f4fd4e0af08)
+
+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 (0x0x7f4fd4e0af70) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f4fd4ea4000) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f4fd4e0af70)
+ std::exception (0x0x7f4fd4e8e660) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f4fd4ea4000)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f4fd4e8e840) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f4fd4e8ef00) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f4fd4e8ef60) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f4fd4effde0) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f4fd4baf300) 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 (0x0x7f4fd4baf360) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f4fd4c3cde0) 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 (0x0x7f4fd4c3f208) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f4fd4cab360) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f4fd4c3f208)
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7f4fd49af000) 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 (0x0x7f4fd49af120) 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 (0x0x7f4fd49af420) 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 (0x0x7f4fd49af720) 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 (0x0x7f4fd49af840) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f4fd4a68000) 0
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f4fd4776480) 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 (0x0x7f4fd4776540) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f4fd48a3cc0) 0
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f4fd48a3d20) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f4fd48a3de0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f4fd48a3e40) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f4fd48a3ea0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f4fd48a3f00) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f4fd48a3f60) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f4fd48e1000) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f4fd48e1060) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f4fd48e10c0) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f4fd48e1120) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f4fd48e13c0) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f4fd48e1660) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f4fd48e1780) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f4fd48e17e0) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f4fd435e660) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f4fd435e6c0) 0
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f4fd435e9c0) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f4fd435ea20) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f4fd435ea80) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f4fd435eae0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f4fd3fec2a0) 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 (0x0x7f4fd3feb3a8) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f4fd3fec360) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f4fd3feb3a8)
+
+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 (0x0x7f4fd3feb410) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f4fd3feb478) 0
+ primary-for std::domain_error (0x0x7f4fd3feb410)
+ std::exception (0x0x7f4fd3fec3c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f4fd3feb478)
+
+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 (0x0x7f4fd3feb4e0) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f4fd3feb548) 0
+ primary-for std::invalid_argument (0x0x7f4fd3feb4e0)
+ std::exception (0x0x7f4fd3fec420) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f4fd3feb548)
+
+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 (0x0x7f4fd3feb5b0) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f4fd3feb618) 0
+ primary-for std::length_error (0x0x7f4fd3feb5b0)
+ std::exception (0x0x7f4fd3fec480) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f4fd3feb618)
+
+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 (0x0x7f4fd3feb680) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f4fd3feb6e8) 0
+ primary-for std::out_of_range (0x0x7f4fd3feb680)
+ std::exception (0x0x7f4fd3fec4e0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f4fd3feb6e8)
+
+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 (0x0x7f4fd3feb750) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f4fd3fec540) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f4fd3feb750)
+
+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 (0x0x7f4fd3feb7b8) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f4fd3feb820) 0
+ primary-for std::range_error (0x0x7f4fd3feb7b8)
+ std::exception (0x0x7f4fd3fec5a0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f4fd3feb820)
+
+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 (0x0x7f4fd3feb888) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f4fd3feb8f0) 0
+ primary-for std::overflow_error (0x0x7f4fd3feb888)
+ std::exception (0x0x7f4fd3fec600) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f4fd3feb8f0)
+
+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 (0x0x7f4fd3feb958) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f4fd3feb9c0) 0
+ primary-for std::underflow_error (0x0x7f4fd3feb958)
+ std::exception (0x0x7f4fd3fec660) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f4fd3feb9c0)
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f4fd3fec6c0) 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 (0x0x7f4fd3feba28) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f4fd3fec900) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f4fd3feba28)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f4fd3d1ff00) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f4fd3d1ff60) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f4fd3d42120) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f4fd3d421e0) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f4fd3d450d0) 0
+ std::__uses_alloc_base (0x0x7f4fd3d42180) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f4fd3eaf540) 0 empty
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f4fd3ef98a0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f4fd3ef9900) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f4fd3ef9ba0) 0
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f4fd3b483c0) 0 empty
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f4fd3b48600) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f4fd3b857e0) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f4fd3c1db40) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f4fd3bb5c98) 0
+ std::__atomic_flag_base (0x0x7f4fd3c1dba0) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f4fd37b7478) 0
+ QAtomicInteger<int> (0x0x7f4fd37b74e0) 0
+ QBasicAtomicInteger<int> (0x0x7f4fd37e4060) 0
+
+Class QtPrivate::QVersionTag
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QVersionTag (0x0x7f4fd339bf60) 0
+
+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 (0x0x7f4fd32206e8) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f4fd3238720) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f4fd32206e8)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f4fd32387e0) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f4fd3238840) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f4fd3238b40) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f4fd3313360) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f4fd3313420) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f4fd3313900) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f4fd2f3c780) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f4fd2f3c840) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f4fd2f3c8a0) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f4fd2f3cc60) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f4fd2f3cd80) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f4fd2d1c9c0) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f4fd273e9c0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f4fd2abf138) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f4fd275f180) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f4fd2abf208) 0
+ std::_Bit_iterator_base (0x0x7f4fd2abf270) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f4fd275f720) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f4fd2abf340) 0
+ std::_Bit_iterator_base (0x0x7f4fd2abf3a8) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f4fd275ff00) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f4fd2573420) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f4fd25735a0) 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 (0x0x7f4fd2573720) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f4fd25738a0) 0 empty
+
+Class q20::identity::is_transparent
+ size=1 align=1
+ base size=0 base align=1
+q20::identity::is_transparent (0x0x7f4fd2573d20) 0 empty
+
+Class q20::identity
+ size=1 align=1
+ base size=0 base align=1
+q20::identity (0x0x7f4fd2573cc0) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f4fd2610360) 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 (0x0x7f4fd2610720) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f4fd26109c0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f4fd2610ba0) 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 (0x0x7f4fd266ad20) 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 (0x0x7f4fd26b60c0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f4fd26b68a0) 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 (0x0x7f4fd254dc98) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f4fd254dd00) 0
+ primary-for std::system_error (0x0x7f4fd254dc98)
+ std::exception (0x0x7f4fd26e4480) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f4fd254dd00)
+
+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 (0x0x7f4fd2335068) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f4fd23350d0) 0
+ primary-for std::ios_base::failure (0x0x7f4fd2335068)
+ std::runtime_error (0x0x7f4fd2335138) 0
+ primary-for std::system_error (0x0x7f4fd23350d0)
+ std::exception (0x0x7f4fd2716c00) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f4fd2335138)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f4fd2716c60) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f4fd2716cc0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f4fd2716d20) 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 (0x0x7f4fd2716ba0) 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 (0x0x7f4fd23d58a0) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f4fd2479ba0) 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> (0x0x7f4fd20321a0 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> (0x0x7f4fd2032270 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> (0x0x7f4fd20327b8 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> (0x0x7f4fd2032888 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 (0x0x7f4fd2032e38) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f4fd20855a0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f4fd2032e38)
+
+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 (0x0x7f4fd2032ea0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f4fd20856c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f4fd2032ea0)
+
+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 (0x0x7f4fd2032f08) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f4fd20857e0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f4fd2032f08)
+
+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 (0x0x7f4fd2032340) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f4fd2085900) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f4fd2032340)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f4fd20af1e0) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f4fd20af540) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f4fd20af840) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f4fd20afba0) 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 (0x0x7f4fd2032958) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f4fd1d5d360) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f4fd2032958)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f4fd1dca120) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f4fd1dca660) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f4fd1f13480) 0
+
+Class Qt::Disambiguated_t
+ size=1 align=1
+ base size=0 base align=1
+Qt::Disambiguated_t (0x0x7f4fd1725de0) 0 empty
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f4fd1523000) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f4fd1523060) 0
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f4fd15e76c0) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f4fd15e7e40) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f4fd15e7ea0) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f4fd156ba90) 0
+ QGenericArgument (0x0x7f4fd1623180) 0
+
+Class QMetaMethodArgument
+ size=24 align=8
+ base size=24 base align=8
+QMetaMethodArgument (0x0x7f4fd1623600) 0
+
+Class QMetaMethodReturnArgument
+ size=24 align=8
+ base size=24 base align=8
+QMetaMethodReturnArgument (0x0x7f4fd1623660) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f4fd1623ba0) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f4fd1623c00) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f4fd1623b40) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f4fd16d80c0) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f4fd16d8720) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f4fd170d060) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f4fd13cac60) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f4fd13caf60) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f4fd149f480) 0 empty
+
+Class qxp::nonesuch
+ size=1 align=1
+ base size=0 base align=1
+qxp::nonesuch (0x0x7f4fd149f5a0) 0 empty
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f4fd11def60) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f4fd0f18780) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f4fd0d972a0) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f4fd0e078a0) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f4fd0b8c900) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f4fd0b8cd20) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f4fd0b8cd80) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f4fd0c12c00) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f4fd098f420) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f4fd098f3c0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f4fd09e8300) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f4fd0790900) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f4fd0414f60) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f4fd0418958) 0
+ QtPrivate::ArgBase (0x0x7f4fd044e000) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f4fd0418a28) 0
+ QtPrivate::ArgBase (0x0x7f4fd044e240) 0
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7f4fd0489ae0) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f4fd04bfba0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f4fd04bfc60) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f4fcff145a0) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f4fcffad720) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f4fcffd8480) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f4fcffd8ea0) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f4fd02e85b0) 0
+ QIODeviceBase (0x0x7f4fcffd8f00) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f4fd0033060) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f4fd00a4a80) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f4fd00a4a20) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f4fcfe31540) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f4fcfe00820) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f4fcfe31600) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f4fcfe008f0) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f4fcfe316c0) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f4fcfb111e0) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f4fcfe00c98) 0
+ QMetaContainer (0x0x7f4fcfb113c0) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f4fcfe00d00) 0
+ QMetaContainer (0x0x7f4fcfb11780) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f4fcfbdaba0) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f4fcfb8ba90) 0
+ std::__detail::_List_node_base (0x0x7f4fcfbdac00) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f4fcf8d0cc0) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f4fcf8f1060) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f4fcf751540) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f4fcf751720) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f4fcf7fbae0) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f4fcf329a80) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7f4fcf021360) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f4fcf0213c0) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f4fced091e0) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f4fced6ff00) 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 (0x0x7f4fcee2b8a0) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f4fceead240) 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 (0x0x7f4fceead1e0) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f4fceb644e0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f4fceb64d80) 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 (0x0x7f4fcee9aaf8) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f4fceb64d20) 0
+ primary-for QAbstractAnimation (0x0x7f4fcee9aaf8)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f4fceba9120) 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 (0x0x7f4fcee9ab60) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f4fceba90c0) 0
+ primary-for QAnimationDriver (0x0x7f4fcee9ab60)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f4fceba9300) 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 (0x0x7f4fcee9abc8) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f4fceba92a0) 0
+ primary-for QEventLoop (0x0x7f4fcee9abc8)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f4fceba99c0) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f4fceba9a80) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f4fceba9ae0) 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 (0x0x7f4fcee9ad68) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f4fceba9a20) 0
+ primary-for QAbstractEventDispatcher (0x0x7f4fcee9ad68)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f4fcec3d360) 0 empty
+
+Class QHashPrivate::SpanConstants
+ size=1 align=1
+ base size=0 base align=1
+QHashPrivate::SpanConstants (0x0x7f4fcec740c0) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f4fcea19000) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f4fce9f6f60) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f4fcea19cc0) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f4fcec39f08) 0
+ QStringConverterBase (0x0x7f4fcea19c60) 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 (0x0x7f4fcec39f70) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f4fcea7b6c0) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f4fce712000) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f4fce712720) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f4fce747c60) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f4fce773000) 0 empty
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f4fce7d1120) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f4fce7d12a0) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f4fce85e360) 0 empty
+
+Class QVLABaseBase::free_deleter
+ size=1 align=1
+ base size=0 base align=1
+QVLABaseBase::free_deleter (0x0x7f4fce63d480) 0 empty
+
+Class QVLABaseBase
+ size=24 align=8
+ base size=24 base align=8
+QVLABaseBase (0x0x7f4fce63d420) 0
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f4fce42f660) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f4fce3f8af8) 0
+ QIODeviceBase (0x0x7f4fce42f600) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f4fce158de0) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f4fce158ea0) 0 empty
+
+Class QVariant::CborValueStandIn
+ size=24 align=8
+ base size=24 base align=8
+QVariant::CborValueStandIn (0x0x7f4fcdf39960) 0
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f4fcdf399c0) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f4fcdf39a20) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f4fcdf39900) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f4fcdd5aa80) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f4fcdd5acc0) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f4fcdd5aea0) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f4fcdda2ea0) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f4fcdde9f60) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f4fcde58240) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f4fcdea2900) 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 (0x0x7f4fcdea9750) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f4fcdea28a0) 0
+ primary-for QAbstractItemModel (0x0x7f4fcdea9750)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f4fcdbdf780) 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 (0x0x7f4fcdea9b60) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f4fcdea9f70) 0
+ primary-for QAbstractTableModel (0x0x7f4fcdea9b60)
+ QObject (0x0x7f4fcdbdf720) 0
+ primary-for QAbstractItemModel (0x0x7f4fcdea9f70)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f4fcdbdf8a0) 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 (0x0x7f4fcdc13000) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f4fcdc13068) 0
+ primary-for QAbstractListModel (0x0x7f4fcdc13000)
+ QObject (0x0x7f4fcdbdf840) 0
+ primary-for QAbstractItemModel (0x0x7f4fcdc13068)
+
+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 (0x0x7f4fcd8ef0c0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f4fcd8ef180) 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 (0x0x7f4fcd8cf3a8) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f4fcd8cf410) 0
+ primary-for QAbstractProxyModel (0x0x7f4fcd8cf3a8)
+ QObject (0x0x7f4fcd8ef120) 0
+ primary-for QAbstractItemModel (0x0x7f4fcd8cf410)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f4fcd8ef360) 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 (0x0x7f4fcd8cf478) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f4fcd8cf4e0) 0
+ primary-for QAnimationGroup (0x0x7f4fcd8cf478)
+ QObject (0x0x7f4fcd8ef300) 0
+ primary-for QAbstractAnimation (0x0x7f4fcd8cf4e0)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f4fcd8ef7e0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f4fcd8cf5b0) 0
+ QBasicMutex (0x0x7f4fcd97c540) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f4fcd97c960) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f4fcd9ee180) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f4fcd9ee1e0) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f4fcd9ee240) 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 (0x0x7f4fcd9ee120) 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 (0x0x7f4fcd8cf750) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f4fcd9eeba0) 0
+ primary-for QTimerEvent (0x0x7f4fcd8cf750)
+
+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 (0x0x7f4fcd8cf7b8) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f4fcd9eec60) 0
+ primary-for QChildEvent (0x0x7f4fcd8cf7b8)
+
+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 (0x0x7f4fcd8cf820) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f4fcd9eee40) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f4fcd8cf820)
+
+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 (0x0x7f4fcd8cf888) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f4fcd9eef00) 0
+ primary-for QDeferredDeleteEvent (0x0x7f4fcd8cf888)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f4fcda40360) 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 (0x0x7f4fcd8cfa28) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f4fcda40300) 0
+ primary-for QCoreApplication (0x0x7f4fcd8cfa28)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f4fcd8cff08) 0
+ QIterator<QMetaAssociation> (0x0x7f4fcd8cff70) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f4fcda40f00) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f4fcdab8068) 0
+ QConstIterator<QMetaAssociation> (0x0x7f4fcdab80d0) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f4fcdaad540) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f4fcdab81a0) 0
+ QIterable<QMetaAssociation> (0x0x7f4fcdaada80) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f4fcd7aca80) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f4fcd80db40) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f4fcd841a80) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f4fcd889660) 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 (0x0x7f4fcd815690) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f4fcd8895a0) 0
+ primary-for QIODevice (0x0x7f4fcd815690)
+ QIODeviceBase (0x0x7f4fcd889600) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f4fcd889b40) 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 (0x0x7f4fcd8876e8) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f4fcd815700) 0
+ primary-for QBuffer (0x0x7f4fcd8876e8)
+ QObject (0x0x7f4fcd889a80) 0
+ primary-for QIODevice (0x0x7f4fcd815700)
+ QIODeviceBase (0x0x7f4fcd889ae0) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f4fcd889d20) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f4fcd889cc0) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f4fcd4f30c0) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f4fcd4f3060) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f4fcd52a780) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f4fcd6ab240) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7f4fcd6ab2a0) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f4fcd6ab1e0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f4fcd6abcc0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f4fcd327420) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f4fcd374720) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f4fcd374780) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f4fcd3746c0) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f4fcd4293c0) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f4fcd48f660) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f4fcd141ae0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f4fcd1ea3c0) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f4fcd1ea480) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f4fcd1ea600) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f4fcd27c900) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f4fccf79720) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f4fcd006ae0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f4fcd006ba0) 0
+
+Class QCborValueConstRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueConstRef (0x0x7f4fccd21060) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f4fccd128f0) 0
+ QCborValueConstRef (0x0x7f4fccd584e0) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f4fccdeb060) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f4fccdeb0c0) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f4fccdeb000) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f4fccebd780) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f4fccebd7e0) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f4fccebd720) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f4fcc90ed80) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f4fcc973240) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f4fcc973ae0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f4fcc973cc0) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f4fcca265a0) 0
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f4fcca89360) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f4fcca89480) 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 (0x0x7f4fcca804e0) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f4fcca80548) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f4fcca804e0)
+ QObject (0x0x7f4fcca89420) 0
+ primary-for QAbstractItemModel (0x0x7f4fcca80548)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f4fcca89600) 0
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f4fcca899c0) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f4fcca89ae0) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f4fcc8091e0) 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 (0x0x7f4fcc7fff70) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f4fcc733cb0) 0
+ primary-for QFileDevice (0x0x7f4fcc7fff70)
+ QObject (0x0x7f4fcc809120) 0
+ primary-for QIODevice (0x0x7f4fcc733cb0)
+ QIODeviceBase (0x0x7f4fcc809180) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7f4fcc4d4120) 0
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7f4fcc5006c0) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7f4fcc500b40) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7f4fcc547e40) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7f4fcc547de0) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7f4fcc5da420) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7f4fcc5daf60) 0 empty
+
+Construction vtable for std::basic_istream<char> (0x0x7f4fcc444ea0 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> (0x0x7f4fcc0c1138 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> (0x0x7f4fcc358d20 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> (0x0x7f4fcc0c13a8 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> (0x0x7f4fcc0c1478 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> (0x0x7f4fcc0c1958 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> (0x0x7f4fcc0c1bc8 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> (0x0x7f4fcc10f0e0 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> (0x0x7f4fcc0c1e38 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> (0x0x7f4fcc0c1f08 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 (0x0x7f4fcc0d0720) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7f4fcc0d08a0) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7f4fcc0d0a20) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7f4fcc0d0d20) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7f4fcc0d0ea0) 0
+
+Class std::filesystem::__cxx11::path::__null_terminated
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::__null_terminated (0x0x7f4fcc1cdf60) 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 (0x0x7f4fcc25f060) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7f4fcc25f000) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7f4fcc1cde40) 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 (0x0x7f4fcc05f548) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+ std::system_error (0x0x7f4fcc05f5b0) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7f4fcc05f548)
+ std::runtime_error (0x0x7f4fcc05f618) 0
+ primary-for std::system_error (0x0x7f4fcc05f5b0)
+ std::exception (0x0x7f4fcc053cc0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f4fcc05f618)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7f4fcc05ff70) 0
+ std::filesystem::__cxx11::path (0x0x7f4fcbc85840) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7f4fcbcfca80) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7f4fcbde92a0) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7f4fcbde9780) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7f4fcbe32e40) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7f4fcbe6d600) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7f4fcbae3720) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f4fcbbb28a0) 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 (0x0x7f4fcbbbca28) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f4fcbbbca90) 0
+ primary-for QFile (0x0x7f4fcbbbca28)
+ QIODevice (0x0x7f4fcbda85b0) 0
+ primary-for QFileDevice (0x0x7f4fcbbbca90)
+ QObject (0x0x7f4fcbbb27e0) 0
+ primary-for QIODevice (0x0x7f4fcbda85b0)
+ QIODeviceBase (0x0x7f4fcbbb2840) 0 empty
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f4fcbbf61e0) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f4fcb88e4e0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f4fcb992060) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f4fcb9925a0) 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 (0x0x7f4fcba269c0) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f4fcba58960) 0 nearly-empty
+ primary-for QException (0x0x7f4fcba269c0)
+
+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 (0x0x7f4fcba26a28) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f4fcba26a90) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f4fcba26a28)
+ std::exception (0x0x7f4fcba589c0) 0 nearly-empty
+ primary-for QException (0x0x7f4fcba26a90)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f4fcba58b40) 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 (0x0x7f4fcba58ba0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f4fcb69f000) 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 (0x0x7f4fcba26bc8) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f4fcba58f60) 0
+ primary-for QFileSelector (0x0x7f4fcba26bc8)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f4fcb69f1e0) 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 (0x0x7f4fcba26c30) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f4fcb69f180) 0
+ primary-for QFileSystemWatcher (0x0x7f4fcba26c30)
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f4fcb69f360) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f4fcb69f960) 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 (0x0x7f4fcb723600) 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 (0x0x7f4fcb8360c0) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f4fcb494420) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f4fcb8693a8) 0
+ std::__mutex_base (0x0x7f4fcb494480) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f4fcb494660) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f4fcb4946c0) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f4fcb494720) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f4fcb4ce180) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f4fcb869410) 0
+ std::__recursive_mutex_base (0x0x7f4fcb4ce1e0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f4fcba02f50) 0
+ std::__mutex_base (0x0x7f4fcb4ce5a0) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f4fcb4ce600) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f4fcba02ee0) 0
+ std::__recursive_mutex_base (0x0x7f4fcb4ce9c0) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f4fcb4cea20) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f4fcb50a840) 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 (0x0x7f4fcb50aae0) 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 (0x0x7f4fcb50ab40) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f4fcb50aa80) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f4fcb2d5cc0) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f4fcb30f0c0) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f4fcb30f120) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f4fcb3a3600) 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 (0x0x7f4fcb2dbea0) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f4fcb2dbf08) 0
+ primary-for std::future_error (0x0x7f4fcb2dbea0)
+ std::exception (0x0x7f4fcb3a3d20) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f4fcb2dbf08)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f4fcb3d2480) 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 (0x0x7f4fcb3d2420) 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 (0x0x7f4fcb105f00) 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 (0x0x7f4fcb12b6e8) 0
+ std::__at_thread_exit_elt (0x0x7f4fcb444840) 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 (0x0x7f4fcb3d2600) 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 (0x0x7f4fcb3d23c0) 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 (0x0x7f4fcadcfaf8) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f4fcae0bc60) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f4fcadcfaf8)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f4fcae48540) 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 (0x0x7f4fcadcfe38) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f4fcae484e0) 0
+ primary-for QThread (0x0x7f4fcadcfe38)
+
+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 (0x0x7f4fcae488a0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f4fcae48a20) 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 (0x0x7f4fcadcfea0) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f4fcae489c0) 0
+ primary-for QThreadPool (0x0x7f4fcadcfea0)
+
+Class QtPrivate::UnwrapHandler
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::UnwrapHandler (0x0x7f4fcab683c0) 0 empty
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f4fca93ab40) 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 (0x0x7f4fca8fd1a0) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f4fca93aae0) 0
+ primary-for QFutureWatcherBase (0x0x7f4fca8fd1a0)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f4fca9650c0) 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 (0x0x7f4fca8fd3a8) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f4fca8fd410) 0
+ primary-for QIdentityProxyModel (0x0x7f4fca8fd3a8)
+ QAbstractItemModel (0x0x7f4fca8fd478) 0
+ primary-for QAbstractProxyModel (0x0x7f4fca8fd410)
+ QObject (0x0x7f4fca965060) 0
+ primary-for QAbstractItemModel (0x0x7f4fca8fd478)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f4fca965240) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f4fca9c6420) 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 (0x0x7f4fca9c1410) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f4fca9c63c0) 0
+ primary-for QItemSelectionModel (0x0x7f4fca9c1410)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f4fca9c18f0) 0
+ QList<QItemSelectionRange> (0x0x7f4fca9c1958) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f4fca9c19c0) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f4fca9c6f60) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f4fca714de0) 0
+
+Class QJsonValueConstRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueConstRef (0x0x7f4fcad2c2a0) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f4fcadcfb60) 0
+ QJsonValueConstRef (0x0x7f4fce3ecba0) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f4fdc6b4420) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f4fdb6f2420) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f4fdc6b43c0) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f4fd2244ea0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f4fd2244f60) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f4fd06ddc00) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f4fd0308000) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f4fd06ddba0) 0
+
+Class QtPrivate::QCaseSensitiveLatin1Hash
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QCaseSensitiveLatin1Hash (0x0x7f4fcd86cd20) 0 empty
+
+Class QtPrivate::QCaseInsensitiveLatin1Hash
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QCaseInsensitiveLatin1Hash (0x0x7f4fcd889300) 0 empty
+
+Class QLatin1StringMatcher
+ size=544 align=16
+ base size=544 base align=16
+QLatin1StringMatcher (0x0x7f4fcd632780) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f4fcd654300) 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 (0x0x7f4fd2da3bc8) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f4fcd6542a0) 0
+ primary-for QLibrary (0x0x7f4fd2da3bc8)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f4fcd374180) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f4fcd3740c0) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f4fcbcfc2a0) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f4fca77acc0) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f4fca77ad80) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f4fd0a6e3c0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f4fce22de40) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f4fd2da5540) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f4fcbf12e40) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f4fcae901e0) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f4fcae90180) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f4fcc2313c0) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f4fcc6c6d80) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f4fd1223f60) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f4fd4e66060) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f4fd4e66000) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f4fd3a555a0) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f4fd3a55540) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f4fd236f3c0) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f4fd236f360) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f4fd236fa80) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f4fd236fa20) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f4fd1233960) 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 (0x0x7f4fd2c7c548) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f4fd1233900) 0
+ primary-for QMimeData (0x0x7f4fd2c7c548)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f4fd1233ae0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f4fd0e6c540) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f4fd0e6c600) 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 (0x0x7f4fd2c80410) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f4fd0e6c5a0) 0
+ primary-for QObjectCleanupHandler (0x0x7f4fd2c80410)
+
+Class QOperatingSystemVersionBase
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersionBase (0x0x7f4fd0e6c6c0) 0
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f4fd2c80478) 0
+ QOperatingSystemVersionBase (0x0x7f4fd07f2000) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f4fd0830d80) 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 (0x0x7f4fd2c832d8) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f4fd2c833a8) 0
+ primary-for QParallelAnimationGroup (0x0x7f4fd2c832d8)
+ QAbstractAnimation (0x0x7f4fd2c83410) 0
+ primary-for QAnimationGroup (0x0x7f4fd2c833a8)
+ QObject (0x0x7f4fd0830d20) 0
+ primary-for QAbstractAnimation (0x0x7f4fd2c83410)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f4fd0830f60) 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 (0x0x7f4fd2c83478) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f4fd2c834e0) 0
+ primary-for QPauseAnimation (0x0x7f4fd2c83478)
+ QObject (0x0x7f4fd0830f00) 0
+ primary-for QAbstractAnimation (0x0x7f4fd2c834e0)
+
+Class QPluginMetaData::Header
+ size=4 align=1
+ base size=4 base align=1
+QPluginMetaData::Header (0x0x7f4fd06c11e0) 0
+
+Class QPluginMetaData::MagicHeader
+ size=16 align=1
+ base size=16 base align=1
+QPluginMetaData::MagicHeader (0x0x7f4fd06c1240) 0
+
+Class QPluginMetaData::ElfNoteHeader
+ size=32 align=8
+ base size=28 base align=8
+QPluginMetaData::ElfNoteHeader (0x0x7f4fd06c12a0) 0
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f4fd06c1180) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f4fd06c18a0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f4fd00346c0) 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 (0x0x7f4fd2c8b618) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f4fd0034660) 0
+ primary-for QPluginLoader (0x0x7f4fd2c8b618)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f4fd0034780) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f4fcf77c2a0) 0 empty
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f4fcf77c300) 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 (0x0x7f4fd2c8e820) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f4fd16ba540) 0
+ primary-for QProcess (0x0x7f4fd2c8e820)
+ QObject (0x0x7f4fcf77c1e0) 0
+ primary-for QIODevice (0x0x7f4fd16ba540)
+ QIODeviceBase (0x0x7f4fcf77c240) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f4fcf77c900) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f4fcf77ca20) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f4fce45dc60) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f4fce45dc00) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7f4fce45dcc0) 0
+
+Class QtPrivate::MSVCWorkAround
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::MSVCWorkAround (0x0x7f4fce45dd20) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f4fce45dd80) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f4fce0db300) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f4fce0db360) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f4fce0dbae0) 0
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f4fcda0c240) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f4fcda0c5a0) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f4fcda0c6c0) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f4fcda0c900) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f4fd2c8ebc8) 0
+ QPropertyObserverBase (0x0x7f4fcda0ca80) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7f4fd2c921a0) 0
+ QPropertyObserver (0x0x7f4fd2c92208) 0
+ QPropertyObserverBase (0x0x7f4fcd6c5360) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f4fcd1aa2a0) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f4fcd02f720) 0
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f4fcb05f780) 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 (0x0x7f4fd2980dd0) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f4fd2980e38) 0
+ primary-for QVariantAnimation (0x0x7f4fd2980dd0)
+ QObject (0x0x7f4fcb05f720) 0
+ primary-for QAbstractAnimation (0x0x7f4fd2980e38)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f4fcb05f9c0) 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 (0x0x7f4fd2980f70) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f4fd2984000) 0
+ primary-for QPropertyAnimation (0x0x7f4fd2980f70)
+ QAbstractAnimation (0x0x7f4fd29840d0) 0
+ primary-for QVariantAnimation (0x0x7f4fd2984000)
+ QObject (0x0x7f4fcb05f960) 0
+ primary-for QAbstractAnimation (0x0x7f4fd29840d0)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f4fd0dcf120) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f4fcc2145a0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f4fcc214540) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f4fcf225d20) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7f4fd0cd5a20) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f4fd0cd5a80) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f4fd0cd59c0) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f4fd2992a90) 0
+ QRandomGenerator (0x0x7f4fceff4d20) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f4fcd550960) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f4fcd550ba0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f4fca7a9060) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f4fca7a94e0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f4fca7d3060) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f4fca7efc00) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f4fca832ae0) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f4fca877780) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f4fca877a80) 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 (0x0x7f4fd29af410) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f4fd29af4e0) 0
+ primary-for QSaveFile (0x0x7f4fd29af410)
+ QIODevice (0x0x7f4fca7ea850) 0
+ primary-for QFileDevice (0x0x7f4fd29af4e0)
+ QObject (0x0x7f4fca8779c0) 0
+ primary-for QIODevice (0x0x7f4fca7ea850)
+ QIODeviceBase (0x0x7f4fca877a20) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f4fca877de0) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f4fca3ed960) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f4fca40c240) 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 (0x0x7f4fd29b71a0) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f4fd29b7208) 0
+ primary-for QSequentialAnimationGroup (0x0x7f4fd29b71a0)
+ QAbstractAnimation (0x0x7f4fd29b7270) 0
+ primary-for QAnimationGroup (0x0x7f4fd29b7208)
+ QObject (0x0x7f4fca40c1e0) 0
+ primary-for QAbstractAnimation (0x0x7f4fd29b7270)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f4fd29b73a8) 0
+ QIterator<QMetaSequence> (0x0x7f4fd29b7410) 0
+ QBaseIterator<QMetaSequence> (0x0x7f4fca40c5a0) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f4fd29b74e0) 0
+ QConstIterator<QMetaSequence> (0x0x7f4fd29b7548) 0
+ QBaseIterator<QMetaSequence> (0x0x7f4fca40cb40) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f4fd29b75b0) 0
+ QIterable<QMetaSequence> (0x0x7f4fca430060) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f4fca47a960) 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 (0x0x7f4fd29c5820) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f4fca47a900) 0
+ primary-for QSettings (0x0x7f4fd29c5820)
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f4fca47ad80) 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 (0x0x7f4fd29c5888) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f4fca47ad20) 0
+ primary-for QSharedMemory (0x0x7f4fd29c5888)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f4fca47af60) 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 (0x0x7f4fd29c58f0) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f4fca47af00) 0
+ primary-for QSignalMapper (0x0x7f4fd29c58f0)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f4fc9d19600) 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 (0x0x7f4fd29caa28) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f4fc9d195a0) 0
+ primary-for QSocketNotifier (0x0x7f4fd29caa28)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f4fc9d19780) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f4fc9d4d7e0) 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 (0x0x7f4fd29d3f70) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f4fd29d5000) 0
+ primary-for QSortFilterProxyModel (0x0x7f4fd29d3f70)
+ QAbstractItemModel (0x0x7f4fd29d5068) 0
+ primary-for QAbstractProxyModel (0x0x7f4fd29d5000)
+ QObject (0x0x7f4fc9d4d780) 0
+ primary-for QAbstractItemModel (0x0x7f4fd29d5068)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f4fc9d4dba0) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f4fc9d75660) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f4fc9dac6c0) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f4fd29e0f08) 0
+ QStringConverter (0x0x7f4fd29e0f70) 0
+ QStringConverterBase (0x0x7f4fc99ee000) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f4fd2335478) 0
+ QStringConverter (0x0x7f4fd23354e0) 0
+ QStringConverterBase (0x0x7f4fc99eee40) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f4fc9a01ba0) 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 (0x0x7f4fd23359c0) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f4fd2335a28) 0
+ primary-for QStringListModel (0x0x7f4fd23359c0)
+ QAbstractItemModel (0x0x7f4fd2335f08) 0
+ primary-for QAbstractListModel (0x0x7f4fd2335a28)
+ QObject (0x0x7f4fc9a01b40) 0
+ primary-for QAbstractItemModel (0x0x7f4fd2335f08)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f4fc9a01c60) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f4fc9a01e40) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f4fc9a1f2a0) 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 (0x0x7f4fd2335f70) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f4fd224f820) 0
+ primary-for QTemporaryFile (0x0x7f4fd2335f70)
+ QFileDevice (0x0x7f4fd224f888) 0
+ primary-for QFile (0x0x7f4fd224f820)
+ QIODevice (0x0x7f4fc99da930) 0
+ primary-for QFileDevice (0x0x7f4fd224f888)
+ QObject (0x0x7f4fc9a1f1e0) 0
+ primary-for QIODevice (0x0x7f4fc99da930)
+ QIODeviceBase (0x0x7f4fc9a1f240) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f4fc9a1f4e0) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f4fc9a1fc00) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f4fc9a4c300) 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 (0x0x7f4fd1f5b068) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f4fc9a4c2a0) 0
+ primary-for QTimeLine (0x0x7f4fd1f5b068)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f4fc9a4c4e0) 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 (0x0x7f4fd1f5b9c0) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f4fc9a4c480) 0
+ primary-for QTimer (0x0x7f4fd1f5b9c0)
+
+Class QTimeZone::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone::ShortData (0x0x7f4fc9a4ce40) 0
+
+Class QTimeZone::Data
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone::Data (0x0x7f4fc9a4cea0) 0
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f4fc9a4cf00) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f4fc9a4cde0) 0
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f4fc9aad060) 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 (0x0x7f4fd03ff4e0) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f4fc9aad000) 0
+ primary-for QTranslator (0x0x7f4fd03ff4e0)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f4fc9aad240) 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 (0x0x7f4fd03ff548) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f4fd03fff70) 0
+ primary-for QTransposeProxyModel (0x0x7f4fd03ff548)
+ QAbstractItemModel (0x0x7f4fd0418000) 0
+ primary-for QAbstractProxyModel (0x0x7f4fd03fff70)
+ QObject (0x0x7f4fc9aad1e0) 0
+ primary-for QAbstractItemModel (0x0x7f4fd0418000)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f4fc9aad3c0) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f4fc9af5f60) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f4fc9b020c0) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f4fc9b0db40) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f4fcc393270) 0
+ QList<QXmlStreamAttribute> (0x0x7f4fcc3933a8) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f4fcc393478) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f4fc9b40180) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f4fc9b40a20) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f4fc9b74120) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f4fc9b808a0) 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 (0x0x7f4fc9b9b120) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader::PrivateConstructorTag
+ size=1 align=1
+ base size=0 base align=1
+QXmlStreamReader::PrivateConstructorTag (0x0x7f4fc9b9b1e0) 0 empty
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f4fc9b9b180) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f4fc9b9b840) 0
+
+Class QDomImplementation
+ size=8 align=8
+ base size=8 base align=8
+QDomImplementation (0x0x7f4fc97cc0c0) 0
+
+Class QDomNode
+ size=8 align=8
+ base size=8 base align=8
+QDomNode (0x0x7f4fc97cc120) 0
+
+Class QDomNodeList
+ size=8 align=8
+ base size=8 base align=8
+QDomNodeList (0x0x7f4fc97cc180) 0
+
+Class QDomDocumentType
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentType (0x0x7f4fc9b95888) 0
+ QDomNode (0x0x7f4fc97cc360) 0
+
+Class QDomDocument::ParseResult
+ size=40 align=8
+ base size=40 base align=8
+QDomDocument::ParseResult (0x0x7f4fc97cc480) 0
+
+Class QDomDocument
+ size=8 align=8
+ base size=8 base align=8
+QDomDocument (0x0x7f4fc9b958f0) 0
+ QDomNode (0x0x7f4fc97cc420) 0
+
+Class QDomNamedNodeMap
+ size=8 align=8
+ base size=8 base align=8
+QDomNamedNodeMap (0x0x7f4fc97cc7e0) 0
+
+Class QDomDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentFragment (0x0x7f4fc9b95a90) 0
+ QDomNode (0x0x7f4fc97cc960) 0
+
+Class QDomCharacterData
+ size=8 align=8
+ base size=8 base align=8
+QDomCharacterData (0x0x7f4fc9b95af8) 0
+ QDomNode (0x0x7f4fc97cca20) 0
+
+Class QDomAttr
+ size=8 align=8
+ base size=8 base align=8
+QDomAttr (0x0x7f4fc9b95b60) 0
+ QDomNode (0x0x7f4fc97cca80) 0
+
+Class QDomElement
+ size=8 align=8
+ base size=8 base align=8
+QDomElement (0x0x7f4fc9b95bc8) 0
+ QDomNode (0x0x7f4fc97ccb40) 0
+
+Class QDomText
+ size=8 align=8
+ base size=8 base align=8
+QDomText (0x0x7f4fc9b95c30) 0
+ QDomCharacterData (0x0x7f4fc9b95c98) 0
+ QDomNode (0x0x7f4fc97ccd80) 0
+
+Class QDomComment
+ size=8 align=8
+ base size=8 base align=8
+QDomComment (0x0x7f4fc9b95d00) 0
+ QDomCharacterData (0x0x7f4fc9b95d68) 0
+ QDomNode (0x0x7f4fc97cce40) 0
+
+Class QDomCDATASection
+ size=8 align=8
+ base size=8 base align=8
+QDomCDATASection (0x0x7f4fc9b95dd0) 0
+ QDomText (0x0x7f4fc9b95e38) 0
+ QDomCharacterData (0x0x7f4fc9b95ea0) 0
+ QDomNode (0x0x7f4fc97ccf00) 0
+
+Class QDomNotation
+ size=8 align=8
+ base size=8 base align=8
+QDomNotation (0x0x7f4fc9b95f08) 0
+ QDomNode (0x0x7f4fc9819000) 0
+
+Class QDomEntity
+ size=8 align=8
+ base size=8 base align=8
+QDomEntity (0x0x7f4fc9b95f70) 0
+ QDomNode (0x0x7f4fc98190c0) 0
+
+Class QDomEntityReference
+ size=8 align=8
+ base size=8 base align=8
+QDomEntityReference (0x0x7f4fc981e000) 0
+ QDomNode (0x0x7f4fc9819180) 0
+
+Class QDomProcessingInstruction
+ size=8 align=8
+ base size=8 base align=8
+QDomProcessingInstruction (0x0x7f4fc981e068) 0
+ QDomNode (0x0x7f4fc9819240) 0
+
+Class QtConcurrent::TaskStartParameters
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::TaskStartParameters (0x0x7f4fc9819480) 0
+
+Class QtConcurrent::Median
+ size=72 align=8
+ base size=70 base align=8
+QtConcurrent::Median (0x0x7f4fc9844720) 0
+
+Class QtConcurrent::ThreadEngineBarrier
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::ThreadEngineBarrier (0x0x7f4fc9844b40) 0
+
+Vtable for QtConcurrent::ThreadEngineBase
+QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN12QtConcurrent16ThreadEngineBaseE)
+16 (int (*)(...))QtConcurrent::ThreadEngineBase::run
+24 0
+32 0
+40 (int (*)(...))QtConcurrent::ThreadEngineBase::start
+48 (int (*)(...))QtConcurrent::ThreadEngineBase::finish
+56 (int (*)(...))QtConcurrent::ThreadEngineBase::threadFunction
+64 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldStartThread
+72 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldThrottleThread
+80 (int (*)(...))__cxa_pure_virtual
+
+Class QtConcurrent::ThreadEngineBase
+ size=64 align=8
+ base size=64 base align=8
+QtConcurrent::ThreadEngineBase (0x0x7f4fc981e618) 0
+ vptr=((& QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE) + 16)
+ QRunnable (0x0x7f4fc9844c00) 0
+ primary-for QtConcurrent::ThreadEngineBase (0x0x7f4fc981e618)
+
+Class QtConcurrent::BlockSizeManager
+ size=176 align=8
+ base size=172 base align=8
+QtConcurrent::BlockSizeManager (0x0x7f4fc986a720) 0
+
+Class QtPrivate::PushBackWrapper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::PushBackWrapper (0x0x7f4fc98b64e0) 0 empty
+
+Class QDBusAbstractAdaptor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractAdaptor::QPrivateSignal (0x0x7f4fc9970960) 0 empty
+
+Vtable for QDBusAbstractAdaptor
+QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDBusAbstractAdaptor)
+16 (int (*)(...))QDBusAbstractAdaptor::metaObject
+24 (int (*)(...))QDBusAbstractAdaptor::qt_metacast
+32 (int (*)(...))QDBusAbstractAdaptor::qt_metacall
+40 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+48 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractAdaptor
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractAdaptor (0x0x7f4fc9954208) 0
+ vptr=((& QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor) + 16)
+ QObject (0x0x7f4fc9970900) 0
+ primary-for QDBusAbstractAdaptor (0x0x7f4fc9954208)
+
+Class QDBusError
+ size=64 align=8
+ base size=64 base align=8
+QDBusError (0x0x7f4fc9970ae0) 0
+
+Class QDBusMessage
+ size=8 align=8
+ base size=8 base align=8
+QDBusMessage (0x0x7f4fc95d3540) 0
+
+Class QDBusObjectPath
+ size=24 align=8
+ base size=24 base align=8
+QDBusObjectPath (0x0x7f4fc960e000) 0
+
+Class QDBusSignature
+ size=24 align=8
+ base size=24 base align=8
+QDBusSignature (0x0x7f4fc9634660) 0
+
+Class QDBusVariant
+ size=32 align=8
+ base size=32 base align=8
+QDBusVariant (0x0x7f4fc9655cc0) 0
+
+Class QDBusConnection
+ size=8 align=8
+ base size=8 base align=8
+QDBusConnection (0x0x7f4fc969fc60) 0
+
+Class QDBusPendingCall
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingCall (0x0x7f4fc96f6ae0) 0
+
+Class QDBusPendingCallWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusPendingCallWatcher::QPrivateSignal (0x0x7f4fc97568a0) 0 empty
+
+Vtable for QDBusPendingCallWatcher
+QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QDBusPendingCallWatcher)
+16 (int (*)(...))QDBusPendingCallWatcher::metaObject
+24 (int (*)(...))QDBusPendingCallWatcher::qt_metacast
+32 (int (*)(...))QDBusPendingCallWatcher::qt_metacall
+40 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+48 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusPendingCallWatcher
+ size=24 align=8
+ base size=24 base align=8
+QDBusPendingCallWatcher (0x0x7f4fc96f1540) 0
+ vptr=((& QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher) + 16)
+ QObject (0x0x7f4fc97567e0) 0
+ primary-for QDBusPendingCallWatcher (0x0x7f4fc96f1540)
+ QDBusPendingCall (0x0x7f4fc9756840) 16
+
+Vtable for QDBusAbstractInterfaceBase
+QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDBusAbstractInterfaceBase)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QDBusAbstractInterfaceBase::qt_metacall
+40 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+48 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterfaceBase (0x0x7f4fc97575b0) 0
+ vptr=((& QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase) + 16)
+ QObject (0x0x7f4fc9756a20) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f4fc97575b0)
+
+Class QDBusAbstractInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractInterface::QPrivateSignal (0x0x7f4fc9756ba0) 0 empty
+
+Vtable for QDBusAbstractInterface
+QDBusAbstractInterface::_ZTV22QDBusAbstractInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QDBusAbstractInterface)
+16 (int (*)(...))QDBusAbstractInterface::metaObject
+24 (int (*)(...))QDBusAbstractInterface::qt_metacast
+32 (int (*)(...))QDBusAbstractInterface::qt_metacall
+40 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+48 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusAbstractInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterface (0x0x7f4fc9757618) 0
+ vptr=((& QDBusAbstractInterface::_ZTV22QDBusAbstractInterface) + 16)
+ QDBusAbstractInterfaceBase (0x0x7f4fc9757680) 0
+ primary-for QDBusAbstractInterface (0x0x7f4fc9757618)
+ QObject (0x0x7f4fc9756b40) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f4fc9757680)
+
+Class QDBusArgument
+ size=8 align=8
+ base size=8 base align=8
+QDBusArgument (0x0x7f4fc9756f60) 0
+
+Class QDBusPendingReplyBase
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingReplyBase (0x0x7f4fc97a5f08) 0
+ QDBusPendingCall (0x0x7f4fc93eb780) 0
+
+Class QDBusConnectionInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusConnectionInterface::QPrivateSignal (0x0x7f4fc94b9840) 0 empty
+
+Vtable for QDBusConnectionInterface
+QDBusConnectionInterface::_ZTV24QDBusConnectionInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QDBusConnectionInterface)
+16 (int (*)(...))QDBusConnectionInterface::metaObject
+24 (int (*)(...))QDBusConnectionInterface::qt_metacast
+32 (int (*)(...))QDBusConnectionInterface::qt_metacall
+40 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+48 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusConnectionInterface::connectNotify
+104 (int (*)(...))QDBusConnectionInterface::disconnectNotify
+
+Class QDBusConnectionInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusConnectionInterface (0x0x7f4fc949c270) 0
+ vptr=((& QDBusConnectionInterface::_ZTV24QDBusConnectionInterface) + 16)
+ QDBusAbstractInterface (0x0x7f4fc949c2d8) 0
+ primary-for QDBusConnectionInterface (0x0x7f4fc949c270)
+ QDBusAbstractInterfaceBase (0x0x7f4fc949c340) 0
+ primary-for QDBusAbstractInterface (0x0x7f4fc949c2d8)
+ QObject (0x0x7f4fc94b97e0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f4fc949c340)
+
+Class QDBusContext
+ size=8 align=8
+ base size=8 base align=8
+QDBusContext (0x0x7f4fc94b9cc0) 0
+
+Vtable for QDBusInterface
+QDBusInterface::_ZTV14QDBusInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDBusInterface)
+16 (int (*)(...))QDBusInterface::metaObject
+24 (int (*)(...))QDBusInterface::qt_metacast
+32 (int (*)(...))QDBusInterface::qt_metacall
+40 (int (*)(...))QDBusInterface::~QDBusInterface
+48 (int (*)(...))QDBusInterface::~QDBusInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusInterface (0x0x7f4fc949c410) 0
+ vptr=((& QDBusInterface::_ZTV14QDBusInterface) + 16)
+ QDBusAbstractInterface (0x0x7f4fc949c478) 0
+ primary-for QDBusInterface (0x0x7f4fc949c410)
+ QDBusAbstractInterfaceBase (0x0x7f4fc949c4e0) 0
+ primary-for QDBusAbstractInterface (0x0x7f4fc949c478)
+ QObject (0x0x7f4fc94b9d20) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f4fc949c4e0)
+
+Class QDBusMetaType
+ size=1 align=1
+ base size=0 base align=1
+QDBusMetaType (0x0x7f4fc94b9e40) 0 empty
+
+Class QDBusServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServer::QPrivateSignal (0x0x7f4fc94ea120) 0 empty
+
+Vtable for QDBusServer
+QDBusServer::_ZTV11QDBusServer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDBusServer)
+16 (int (*)(...))QDBusServer::metaObject
+24 (int (*)(...))QDBusServer::qt_metacast
+32 (int (*)(...))QDBusServer::qt_metacall
+40 (int (*)(...))QDBusServer::~QDBusServer
+48 (int (*)(...))QDBusServer::~QDBusServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServer
+ size=24 align=8
+ base size=24 base align=8
+QDBusServer (0x0x7f4fc949c548) 0
+ vptr=((& QDBusServer::_ZTV11QDBusServer) + 16)
+ QObject (0x0x7f4fc94ea0c0) 0
+ primary-for QDBusServer (0x0x7f4fc949c548)
+
+Class QDBusServiceWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServiceWatcher::QPrivateSignal (0x0x7f4fc94ea240) 0 empty
+
+Vtable for QDBusServiceWatcher
+QDBusServiceWatcher::_ZTV19QDBusServiceWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDBusServiceWatcher)
+16 (int (*)(...))QDBusServiceWatcher::metaObject
+24 (int (*)(...))QDBusServiceWatcher::qt_metacast
+32 (int (*)(...))QDBusServiceWatcher::qt_metacall
+40 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+48 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServiceWatcher
+ size=16 align=8
+ base size=16 base align=8
+QDBusServiceWatcher (0x0x7f4fc949c5b0) 0
+ vptr=((& QDBusServiceWatcher::_ZTV19QDBusServiceWatcher) + 16)
+ QObject (0x0x7f4fc94ea1e0) 0
+ primary-for QDBusServiceWatcher (0x0x7f4fc949c5b0)
+
+Class QDBusUnixFileDescriptor
+ size=8 align=8
+ base size=8 base align=8
+QDBusUnixFileDescriptor (0x0x7f4fc94ea900) 0
+
+Class QDBusVirtualObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusVirtualObject::QPrivateSignal (0x0x7f4fc955b540) 0 empty
+
+Vtable for QDBusVirtualObject
+QDBusVirtualObject::_ZTV18QDBusVirtualObject: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QDBusVirtualObject)
+16 (int (*)(...))QDBusVirtualObject::metaObject
+24 (int (*)(...))QDBusVirtualObject::qt_metacast
+32 (int (*)(...))QDBusVirtualObject::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 QDBusVirtualObject
+ size=16 align=8
+ base size=16 base align=8
+QDBusVirtualObject (0x0x7f4fc9562138) 0
+ vptr=((& QDBusVirtualObject::_ZTV18QDBusVirtualObject) + 16)
+ QObject (0x0x7f4fc955b4e0) 0
+ primary-for QDBusVirtualObject (0x0x7f4fc9562138)
+
+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 (0x0x7f4fc955b600) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f4fc957e0c0) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f4fc91cc300) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f4fc91cc2a0) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f4fc92a2960) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f4fc931f1a0) 0
+ QList<QPoint> (0x0x7f4fc931f208) 0
+ QListSpecialMethods<QPoint> (0x0x7f4fc931f270) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7f4fc9307720) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f4fc9391270) 0
+ QList<QPointF> (0x0x7f4fc93912d8) 0
+ QListSpecialMethods<QPointF> (0x0x7f4fc9391340) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7f4fc938d3c0) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f4fc8ff7e40) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f4fc8ff7de0) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f4fc9058000) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f4fc9036f60) 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 (0x0x7f4fc907a9c0) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f4fc9084c60) 0
+ primary-for QImage (0x0x7f4fc907a9c0)
+
+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 (0x0x7f4fc90e65b0) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f4fc90ee0c0) 0
+ primary-for QPixmap (0x0x7f4fc90e65b0)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f4fc9128f60) 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 (0x0x7f4fc9161e40) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f4fc91834e0) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f4fc8dce360) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f4fc8e073c0) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f4fc8ea2060) 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 (0x0x7f4fc8e36ea0) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f4fc8ea2000) 0
+ primary-for QScreen (0x0x7f4fc8e36ea0)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f4fc8ea22a0) 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 (0x0x7f4fc8e36f08) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7f4fc8ea2240) 0
+ primary-for QInputDevice (0x0x7f4fc8e36f08)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f4fc8ea2ea0) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f4fc8f11900) 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 (0x0x7f4fc8f10d00) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7f4fc8f10d68) 0
+ primary-for QPointingDevice (0x0x7f4fc8f10d00)
+ QObject (0x0x7f4fc8f118a0) 0
+ primary-for QInputDevice (0x0x7f4fc8f10d68)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f4fc8f47120) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f4fc8f971e0) 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 (0x0x7f4fc8bc87b8) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f4fc8fbcde0) 0
+ primary-for QInputEvent (0x0x7f4fc8bc87b8)
+
+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 (0x0x7f4fc8bc8820) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7f4fc8bc8888) 0
+ primary-for QPointerEvent (0x0x7f4fc8bc8820)
+ QEvent (0x0x7f4fc8bdb0c0) 0
+ primary-for QInputEvent (0x0x7f4fc8bc8888)
+
+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 (0x0x7f4fc8bc8c30) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7f4fc8bc8c98) 0
+ primary-for QSinglePointEvent (0x0x7f4fc8bc8c30)
+ QInputEvent (0x0x7f4fc8bc8d00) 0
+ primary-for QPointerEvent (0x0x7f4fc8bc8c98)
+ QEvent (0x0x7f4fc8bdb720) 0
+ primary-for QInputEvent (0x0x7f4fc8bc8d00)
+
+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 (0x0x7f4fc8bc8d68) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7f4fc8bc8dd0) 0
+ primary-for QEnterEvent (0x0x7f4fc8bc8d68)
+ QPointerEvent (0x0x7f4fc8bc8e38) 0
+ primary-for QSinglePointEvent (0x0x7f4fc8bc8dd0)
+ QInputEvent (0x0x7f4fc8bc8ea0) 0
+ primary-for QPointerEvent (0x0x7f4fc8bc8e38)
+ QEvent (0x0x7f4fc8bdba20) 0
+ primary-for QInputEvent (0x0x7f4fc8bc8ea0)
+
+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 (0x0x7f4fc8bc8f08) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7f4fc8bc8f70) 0
+ primary-for QMouseEvent (0x0x7f4fc8bc8f08)
+ QPointerEvent (0x0x7f4fc8bc8bc8) 0
+ primary-for QSinglePointEvent (0x0x7f4fc8bc8f70)
+ QInputEvent (0x0x7f4fc8c3f000) 0
+ primary-for QPointerEvent (0x0x7f4fc8bc8bc8)
+ QEvent (0x0x7f4fc8bdbde0) 0
+ primary-for QInputEvent (0x0x7f4fc8c3f000)
+
+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 (0x0x7f4fc8c3f068) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7f4fc8c3f0d0) 0
+ primary-for QHoverEvent (0x0x7f4fc8c3f068)
+ QPointerEvent (0x0x7f4fc8c3f138) 0
+ primary-for QSinglePointEvent (0x0x7f4fc8c3f0d0)
+ QInputEvent (0x0x7f4fc8c3f1a0) 0
+ primary-for QPointerEvent (0x0x7f4fc8c3f138)
+ QEvent (0x0x7f4fc8c4c180) 0
+ primary-for QInputEvent (0x0x7f4fc8c3f1a0)
+
+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 (0x0x7f4fc8c3f208) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7f4fc8c3f270) 0
+ primary-for QWheelEvent (0x0x7f4fc8c3f208)
+ QPointerEvent (0x0x7f4fc8c3f2d8) 0
+ primary-for QSinglePointEvent (0x0x7f4fc8c3f270)
+ QInputEvent (0x0x7f4fc8c3f340) 0
+ primary-for QPointerEvent (0x0x7f4fc8c3f2d8)
+ QEvent (0x0x7f4fc8c4c3c0) 0
+ primary-for QInputEvent (0x0x7f4fc8c3f340)
+
+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 (0x0x7f4fc8c3f3a8) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7f4fc8c3f410) 0
+ primary-for QTabletEvent (0x0x7f4fc8c3f3a8)
+ QPointerEvent (0x0x7f4fc8c3f478) 0
+ primary-for QSinglePointEvent (0x0x7f4fc8c3f410)
+ QInputEvent (0x0x7f4fc8c3f4e0) 0
+ primary-for QPointerEvent (0x0x7f4fc8c3f478)
+ QEvent (0x0x7f4fc8c4c6c0) 0
+ primary-for QInputEvent (0x0x7f4fc8c3f4e0)
+
+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 (0x0x7f4fc8c3f548) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7f4fc8c3f5b0) 0
+ primary-for QNativeGestureEvent (0x0x7f4fc8c3f548)
+ QPointerEvent (0x0x7f4fc8c3f618) 0
+ primary-for QSinglePointEvent (0x0x7f4fc8c3f5b0)
+ QInputEvent (0x0x7f4fc8c3f680) 0
+ primary-for QPointerEvent (0x0x7f4fc8c3f618)
+ QEvent (0x0x7f4fc8c4cd80) 0
+ primary-for QInputEvent (0x0x7f4fc8c3f680)
+
+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 (0x0x7f4fc8c3f6e8) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f4fc8c3f750) 0
+ primary-for QKeyEvent (0x0x7f4fc8c3f6e8)
+ QEvent (0x0x7f4fc8c7a180) 0
+ primary-for QInputEvent (0x0x7f4fc8c3f750)
+
+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 (0x0x7f4fc8c3f7b8) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f4fc8c7a5a0) 0
+ primary-for QFocusEvent (0x0x7f4fc8c3f7b8)
+
+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 (0x0x7f4fc8c3f820) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f4fc8c7a6c0) 0
+ primary-for QPaintEvent (0x0x7f4fc8c3f820)
+
+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 (0x0x7f4fc8c3f888) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f4fc8c7a7e0) 0
+ primary-for QMoveEvent (0x0x7f4fc8c3f888)
+
+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 (0x0x7f4fc8c3f8f0) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f4fc8c7a900) 0
+ primary-for QExposeEvent (0x0x7f4fc8c3f8f0)
+
+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 (0x0x7f4fc8c3f958) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f4fc8c7a9c0) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f4fc8c3f958)
+
+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 (0x0x7f4fc8c3f9c0) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f4fc8c7aa80) 0
+ primary-for QResizeEvent (0x0x7f4fc8c3f9c0)
+
+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 (*)(...))QCloseEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7f4fc8c3fa28) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f4fc8c7aba0) 0
+ primary-for QCloseEvent (0x0x7f4fc8c3fa28)
+
+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 (*)(...))QIconDragEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7f4fc8c3fa90) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f4fc8c7ac00) 0
+ primary-for QIconDragEvent (0x0x7f4fc8c3fa90)
+
+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 (*)(...))QShowEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7f4fc8c3faf8) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f4fc8c7ac60) 0
+ primary-for QShowEvent (0x0x7f4fc8c3faf8)
+
+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 (*)(...))QHideEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7f4fc8c3fb60) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f4fc8c7acc0) 0
+ primary-for QHideEvent (0x0x7f4fc8c3fb60)
+
+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 (0x0x7f4fc8c3fbc8) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f4fc8c3fc30) 0
+ primary-for QContextMenuEvent (0x0x7f4fc8c3fbc8)
+ QEvent (0x0x7f4fc8c7ad20) 0
+ primary-for QInputEvent (0x0x7f4fc8c3fc30)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f4fc8cc30c0) 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 (0x0x7f4fc8c3fc98) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f4fc8cc3060) 0
+ primary-for QInputMethodEvent (0x0x7f4fc8c3fc98)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f4fc8d34120) 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 (0x0x7f4fc8d29a28) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f4fc8d340c0) 0
+ primary-for QInputMethodQueryEvent (0x0x7f4fc8d29a28)
+
+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 (0x0x7f4fc8d95750) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f4fc8d89a80) 0
+ primary-for QDropEvent (0x0x7f4fc8d95750)
+
+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 (0x0x7f4fc8d957b8) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f4fc8d95820) 0
+ primary-for QDragMoveEvent (0x0x7f4fc8d957b8)
+ QEvent (0x0x7f4fc8d89f60) 0
+ primary-for QDropEvent (0x0x7f4fc8d95820)
+
+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 (*)(...))QDragEnterEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7f4fc8d95888) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f4fc8d958f0) 0
+ primary-for QDragEnterEvent (0x0x7f4fc8d95888)
+ QDropEvent (0x0x7f4fc8d95958) 0
+ primary-for QDragMoveEvent (0x0x7f4fc8d958f0)
+ QEvent (0x0x7f4fc8daf1e0) 0
+ primary-for QDropEvent (0x0x7f4fc8d95958)
+
+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 (*)(...))QDragLeaveEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7f4fc8d959c0) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f4fc8daf240) 0
+ primary-for QDragLeaveEvent (0x0x7f4fc8d959c0)
+
+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 (0x0x7f4fc8d95a28) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f4fc8daf2a0) 0
+ primary-for QHelpEvent (0x0x7f4fc8d95a28)
+
+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 (0x0x7f4fc8d95a90) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f4fc8daf540) 0
+ primary-for QStatusTipEvent (0x0x7f4fc8d95a90)
+
+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 (0x0x7f4fc8d95af8) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f4fc8daf600) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f4fc8d95af8)
+
+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 (0x0x7f4fc8d95b60) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f4fc8daf6c0) 0
+ primary-for QActionEvent (0x0x7f4fc8d95b60)
+
+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 (0x0x7f4fc8d95bc8) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f4fc8daf7e0) 0
+ primary-for QFileOpenEvent (0x0x7f4fc8d95bc8)
+
+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 (0x0x7f4fc8d95c30) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f4fc8daf900) 0
+ primary-for QToolBarChangeEvent (0x0x7f4fc8d95c30)
+
+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 (0x0x7f4fc8d95c98) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f4fc8daf9c0) 0
+ primary-for QShortcutEvent (0x0x7f4fc8d95c98)
+
+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 (0x0x7f4fc8d95d00) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f4fc8dafb40) 0
+ primary-for QWindowStateChangeEvent (0x0x7f4fc8d95d00)
+
+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 (0x0x7f4fc8d95d68) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7f4fc8d95dd0) 0
+ primary-for QTouchEvent (0x0x7f4fc8d95d68)
+ QInputEvent (0x0x7f4fc8d95e38) 0
+ primary-for QPointerEvent (0x0x7f4fc8d95dd0)
+ QEvent (0x0x7f4fc8dafc00) 0
+ primary-for QInputEvent (0x0x7f4fc8d95e38)
+
+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 (0x0x7f4fc8d95ea0) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f4fc8dafd80) 0
+ primary-for QScrollPrepareEvent (0x0x7f4fc8d95ea0)
+
+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 (0x0x7f4fc8d95f08) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f4fc8daff60) 0
+ primary-for QScrollEvent (0x0x7f4fc8d95f08)
+
+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 (0x0x7f4fc8d95f70) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f4fc8a02120) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f4fc8d95f70)
+
+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 (0x0x7f4fc8a08000) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f4fc8a02240) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f4fc8a08000)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f4fc8a02300) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f4fc8a5d720) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f4fc8a5d900) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f4fc8aadd20) 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 (0x0x7f4fc8afb7e0) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f4fc8afba80) 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 (0x0x7f4fc8b0b000) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f4fc8afba20) 0
+ primary-for QTextDocument (0x0x7f4fc8b0b000)
+
+Class QBrushDataPointerDeleter
+ size=1 align=1
+ base size=0 base align=1
+QBrushDataPointerDeleter (0x0x7f4fc8b52420) 0 empty
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f4fc8b52480) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f4fc886d300) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f4fc886d540) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f4fc886d4e0) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f4fc886aea0) 0
+ QGradient (0x0x7f4fc88cd3c0) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f4fc886af08) 0
+ QGradient (0x0x7f4fc88cd4e0) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f4fc886af70) 0
+ QGradient (0x0x7f4fc88cd600) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f4fc88cd6c0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f4fc8910420) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f4fc89103c0) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f4fc8953600) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f4fc89893c0) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f4fc861ab60) 0
+ QTextFormat (0x0x7f4fc8622780) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f4fc86c0af8) 0
+ QTextFormat (0x0x7f4fc86c4660) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f4fc86f6820) 0
+ QTextFormat (0x0x7f4fc86f2c60) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f4fc8724a28) 0
+ QTextCharFormat (0x0x7f4fc8724a90) 0
+ QTextFormat (0x0x7f4fc8735000) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f4fc87577b8) 0
+ QTextFormat (0x0x7f4fc874ef60) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f4fc8792f08) 0
+ QTextFrameFormat (0x0x7f4fc8792f70) 0
+ QTextFormat (0x0x7f4fc8798de0) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f4fc83e11a0) 0
+ QTextCharFormat (0x0x7f4fc83e1208) 0
+ QTextFormat (0x0x7f4fc83d9660) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f4fc841cc60) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f4fc847e6c0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f4fc847eae0) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f4fc847ea80) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f4fc85492a0) 0
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f4fc8549720) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f4fc81e96c0) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f4fc81e9720) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f4fc81e9780) 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 (0x0x7f4fc81e1af8) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f4fc81e9660) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f4fc81e1af8)
+
+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 (0x0x7f4fc82acea0) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f4fc82cf300) 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 (0x0x7f4fc82cf360) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f4fc82cf2a0) 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 (0x0x7f4fc82cfd20) 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 (0x0x7f4fc833e180) 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 (0x0x7f4fc833e1e0) 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 (0x0x7f4fc833e240) 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 (0x0x7f4fc833e2a0) 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 (0x0x7f4fc833e300) 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 (0x0x7f4fc833e360) 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 (0x0x7f4fc833e420) 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 (0x0x7f4fc833e480) 0 nearly-empty
+ vptr=((& QAccessibleHyperlinkInterface::_ZTV29QAccessibleHyperlinkInterface) + 16)
+
+Vtable for QAccessibleSelectionInterface
+QAccessibleSelectionInterface::_ZTV29QAccessibleSelectionInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleSelectionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleSelectionInterface::selectedItem
+56 (int (*)(...))QAccessibleSelectionInterface::isSelected
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleSelectionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleSelectionInterface (0x0x7f4fc833e4e0) 0 nearly-empty
+ vptr=((& QAccessibleSelectionInterface::_ZTV29QAccessibleSelectionInterface) + 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 (0x0x7f4fc833e540) 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 (0x0x7f4fc82c8270) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f4fc833ea80) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f4fc82c8270)
+
+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 (0x0x7f4fc82c82d8) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f4fc833ee40) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f4fc82c82d8)
+
+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 (0x0x7f4fc82c8340) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f4fc82c83a8) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f4fc82c8340)
+ QAccessibleEvent (0x0x7f4fc83862a0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f4fc82c83a8)
+
+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 (0x0x7f4fc82c8410) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f4fc82c8478) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f4fc82c8410)
+ QAccessibleEvent (0x0x7f4fc8386720) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f4fc82c8478)
+
+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 (0x0x7f4fc82c84e0) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f4fc82c8548) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f4fc82c84e0)
+ QAccessibleEvent (0x0x7f4fc8386b40) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f4fc82c8548)
+
+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 (0x0x7f4fc82c85b0) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f4fc82c8618) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f4fc82c85b0)
+ QAccessibleEvent (0x0x7f4fc8386f60) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f4fc82c8618)
+
+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 (0x0x7f4fc82c8680) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f4fc83b3420) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f4fc82c8680)
+
+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 (0x0x7f4fc82c86e8) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f4fc83b3840) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f4fc82c86e8)
+
+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 (0x0x7f4fc7fd8300) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f4fc7fd85a0) 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 (0x0x7f4fc82c8820) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f4fc7fd8540) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f4fc82c8820)
+
+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 (0x0x7f4fc82c8888) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f4fc7fd8660) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f4fc82c8888)
+
+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 (0x0x7f4fc82c88f0) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f4fc82c8958) 0
+ primary-for QAccessibleApplication (0x0x7f4fc82c88f0)
+ QAccessibleInterface (0x0x7f4fc7fd86c0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f4fc82c8958)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f4fc7fd8780) 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 (0x0x7f4fc82c89c0) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f4fc7fd8720) 0
+ primary-for QAccessiblePlugin (0x0x7f4fc82c89c0)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f4fc7fd88a0) 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 (0x0x7f4fc82c8a28) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7f4fc7fd8840) 0
+ primary-for QAction (0x0x7f4fc82c8a28)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f4fc802e1e0) 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 (0x0x7f4fc82c8a90) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7f4fc802e180) 0
+ primary-for QActionGroup (0x0x7f4fc82c8a90)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f4fc802e480) 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 (0x0x7f4fc802ee40) 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 (0x0x7f4fc80ac820) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f4fc80ac888) 0
+ primary-for QBitmap (0x0x7f4fc80ac820)
+ QPaintDevice (0x0x7f4fc80bb240) 0
+ primary-for QPixmap (0x0x7f4fc80ac888)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f4fc80e1c00) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f4fc811da80) 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 (0x0x7f4fc8046a80) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f4fc811d9c0) 0
+ primary-for QWindow (0x0x7f4fc8046a80)
+ QSurface (0x0x7f4fc811da20) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f4fc8166360) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f4fc8166480) 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 (0x0x7f4fc8176000) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f4fc8166420) 0
+ primary-for QClipboard (0x0x7f4fc8176000)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f4fc81665a0) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f4fc7dc9600) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f4fc7e22540) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f4fc7e22600) 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 (0x0x7f4fc7e20820) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f4fc7e225a0) 0
+ primary-for QDrag (0x0x7f4fc7e20820)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f4fc7e227e0) 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 (0x0x7f4fc7e20888) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7f4fc7e208f0) 0
+ primary-for QFileSystemModel (0x0x7f4fc7e20888)
+ QObject (0x0x7f4fc7e22780) 0
+ primary-for QAbstractItemModel (0x0x7f4fc7e208f0)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f4fc7e22f60) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f4fc7ebd960) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f4fc7ef9480) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f4fc7cfba80) 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 (0x0x7f4fc7cd4ea0) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f4fc7cfba20) 0
+ primary-for QGenericPlugin (0x0x7f4fc7cd4ea0)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f4fc7cfbb40) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f4fc7cfbc00) 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 (0x0x7f4fc7cd4f08) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f4fc7cfbba0) 0
+ primary-for QInputMethod (0x0x7f4fc7cd4f08)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f4fc7cfbea0) 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 (0x0x7f4fc7cd4f70) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f4fc7d41000) 0
+ primary-for QGuiApplication (0x0x7f4fc7cd4f70)
+ QObject (0x0x7f4fc7cfbe40) 0
+ primary-for QCoreApplication (0x0x7f4fc7d41000)
+
+Class QNativeInterface::QX11Application::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QX11Application::TypeInfo (0x0x7f4fc7d5d1e0) 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 (0x0x7f4fc7d5d180) 0 nearly-empty
+ vptr=((& QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE) + 16)
+
+Class QNativeInterface::QWaylandApplication::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QWaylandApplication::TypeInfo (0x0x7f4fc7d5d2a0) 0 empty
+
+Vtable for QNativeInterface::QWaylandApplication
+QNativeInterface::QWaylandApplication::_ZTVN16QNativeInterface19QWaylandApplicationE: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface19QWaylandApplicationE)
+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 QNativeInterface::QWaylandApplication
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QWaylandApplication (0x0x7f4fc7d5d240) 0 nearly-empty
+ vptr=((& QNativeInterface::QWaylandApplication::_ZTVN16QNativeInterface19QWaylandApplicationE) + 16)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f4fc7d5d3c0) 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 (0x0x7f4fc7d5d360) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f4fc7d5d480) 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 (0x0x7f4fc7d41068) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f4fc7d5d420) 0
+ primary-for QIconEnginePlugin (0x0x7f4fc7d41068)
+
+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 (0x0x7f4fc7d5d540) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f4fc7d5d780) 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 (0x0x7f4fc7d410d0) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f4fc7d5d720) 0
+ primary-for QImageIOPlugin (0x0x7f4fc7d410d0)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f4fc7d5dcc0) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f4fc7d5dd80) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f4fc7d5de40) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f4fc7a65c60) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f4fc77de360) 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 (0x0x7f4fc7b21a90) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f4fc77de300) 0
+ primary-for QMovie (0x0x7f4fc7b21a90)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f4fc77de720) 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 (0x0x7f4fc7a90e70) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f4fc77de660) 0
+ primary-for QOffscreenSurface (0x0x7f4fc7a90e70)
+ QSurface (0x0x7f4fc77de6c0) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f4fc77de9c0) 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 (0x0x7f4fc7b21af8) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f4fc77de960) 0
+ primary-for QOpenGLContextGroup (0x0x7f4fc7b21af8)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f4fc77deba0) 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 (0x0x7f4fc7b21b60) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f4fc77deb40) 0
+ primary-for QOpenGLContext (0x0x7f4fc7b21b60)
+
+Class QNativeInterface::QGLXContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QGLXContext::TypeInfo (0x0x7f4fc77dede0) 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 (0x0x7f4fc77ded80) 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 (0x0x7f4fc77deea0) 0 empty
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+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 QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7f4fc77dee40) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f4fc77def00) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f4fd7819660) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f4fd7819600) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f4fc7b21f70) 0
+ QOpenGLFunctions (0x0x7f4fd7529de0) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f4fd75c7180) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f4fd75c9000) 0
+ QOpenGLFunctionsPrivate (0x0x7f4fd75c7120) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f4fd732fe40) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f4fd741a3c0) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f4fd71691e0) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f4fd7169180) 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 (0x0x7f4fd71fa478) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f4fd71e6f60) 0
+ primary-for QPagedPaintDevice (0x0x7f4fd71fa478)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f4fd721b120) 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 (0x0x7f4fd721a000) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f4fd721a070) 0
+ primary-for QPaintDeviceWindow (0x0x7f4fd721a000)
+ QObject (0x0x7f4fd721b000) 0
+ primary-for QWindow (0x0x7f4fd721a070)
+ QSurface (0x0x7f4fd721b060) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7f4fd721b0c0) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f4fd721b300) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f4fd721b2a0) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f4fc62b1840) 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 (0x0x7f4fc62fc120) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f4fc62fc720) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f4fc5fbd660) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f4fc5fbd600) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f4fc60c1ae0) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f4fc60f82a0) 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 (0x0x7f4fc6030a80) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f4fc60f81e0) 0
+ primary-for QPdfWriter (0x0x7f4fc6030a80)
+ QPagedPaintDevice (0x0x7f4fc60d21a0) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7f4fc60f8240) 16
+ primary-for QPagedPaintDevice (0x0x7f4fc60d21a0)
+
+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 (0x0x7f4fc60d2208) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f4fc60f8480) 0
+ primary-for QPicture (0x0x7f4fc60d2208)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f4fc6162060) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f4fc6162000) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f4fc618af00) 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 (0x0x7f4fc61968f0) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f4fc61714d0) 0
+ primary-for QRasterWindow (0x0x7f4fc61968f0)
+ QWindow (0x0x7f4fc6171540) 0
+ primary-for QPaintDeviceWindow (0x0x7f4fc61714d0)
+ QObject (0x0x7f4fc618ade0) 0
+ primary-for QWindow (0x0x7f4fc6171540)
+ QSurface (0x0x7f4fc618ae40) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7f4fc618aea0) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f4fc5db1cc0) 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 (0x0x7f4fc61969c0) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f4fc5db1c60) 0
+ primary-for QSessionManager (0x0x7f4fc61969c0)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f4fc5db1ea0) 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 (0x0x7f4fc6196a28) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7f4fc5db1e40) 0
+ primary-for QShortcut (0x0x7f4fc6196a28)
+
+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 (0x0x7f4fc5dfc3c0) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f4fc5f3f900) 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 (0x0x7f4fc5eeb618) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f4fc5eeb680) 0
+ primary-for QStandardItemModel (0x0x7f4fc5eeb618)
+ QObject (0x0x7f4fc5f3f8a0) 0
+ primary-for QAbstractItemModel (0x0x7f4fc5eeb680)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f4fc5f3fc60) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f4fc5bfd120) 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 (0x0x7f4fc5bd8750) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f4fc5bfd0c0) 0
+ primary-for QStyleHints (0x0x7f4fc5bd8750)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f4fc5bfd300) 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 (0x0x7f4fc5bd87b8) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f4fc5bfd2a0) 0
+ primary-for QTextObject (0x0x7f4fc5bd87b8)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f4fc5bfd4e0) 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 (0x0x7f4fc5bd8820) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f4fc5bd8888) 0
+ primary-for QTextBlockGroup (0x0x7f4fc5bd8820)
+ QObject (0x0x7f4fc5bfd480) 0
+ primary-for QTextObject (0x0x7f4fc5bd8888)
+
+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 (0x0x7f4fc5bfd660) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f4fc5bfd720) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f4fc5bfd780) 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 (0x0x7f4fc5bd88f0) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f4fc5bd8958) 0
+ primary-for QTextFrame (0x0x7f4fc5bd88f0)
+ QObject (0x0x7f4fc5bfd6c0) 0
+ primary-for QTextObject (0x0x7f4fc5bd8958)
+
+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 (0x0x7f4fc5c746c0) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f4fc5c74780) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f4fc5c74720) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f4fc5cff180) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f4fc5d490c0) 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 (0x0x7f4fc5d37e38) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f4fc5d49060) 0
+ primary-for QSyntaxHighlighter (0x0x7f4fc5d37e38)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f4fc5d49240) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f4fc5d492a0) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f4fc5d49360) 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 (0x0x7f4fc5d37ea0) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f4fc5d37f08) 0
+ primary-for QTextList (0x0x7f4fc5d37ea0)
+ QTextObject (0x0x7f4fc5d37f70) 0
+ primary-for QTextBlockGroup (0x0x7f4fc5d37f08)
+ QObject (0x0x7f4fc5d49300) 0
+ primary-for QTextObject (0x0x7f4fc5d37f70)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f4fc5d49720) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f4fc5d49f60) 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 (0x0x7f4fc5d84000) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f4fc5d84068) 0
+ primary-for QTextTable (0x0x7f4fc5d84000)
+ QTextObject (0x0x7f4fc5d840d0) 0
+ primary-for QTextFrame (0x0x7f4fc5d84068)
+ QObject (0x0x7f4fc5d49f00) 0
+ primary-for QTextObject (0x0x7f4fc5d840d0)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f4fc5d93360) 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 (0x0x7f4fc5d84138) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7f4fc5d93300) 0
+ primary-for QUndoGroup (0x0x7f4fc5d84138)
+
+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 (0x0x7f4fc5d934e0) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f4fc5d935a0) 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 (0x0x7f4fc5d841a0) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7f4fc5d93540) 0
+ primary-for QUndoStack (0x0x7f4fc5d841a0)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f4fc5d93780) 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 (0x0x7f4fc5d84208) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f4fc5d93720) 0
+ primary-for QValidator (0x0x7f4fc5d84208)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f4fc5d93a20) 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 (0x0x7f4fc5d84270) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f4fc5d842d8) 0
+ primary-for QIntValidator (0x0x7f4fc5d84270)
+ QObject (0x0x7f4fc5d939c0) 0
+ primary-for QValidator (0x0x7f4fc5d842d8)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f4fc5d93c00) 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 (*)(...))QDoubleValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f4fc5d84340) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f4fc5d843a8) 0
+ primary-for QDoubleValidator (0x0x7f4fc5d84340)
+ QObject (0x0x7f4fc5d93ba0) 0
+ primary-for QValidator (0x0x7f4fc5d843a8)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f4fc59f7000) 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 (0x0x7f4fc5d84410) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f4fc5d84478) 0
+ primary-for QRegularExpressionValidator (0x0x7f4fc5d84410)
+ QObject (0x0x7f4fc5d93f60) 0
+ primary-for QValidator (0x0x7f4fc5d84478)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f4fc59f71e0) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f4fc59f7180) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f4fc5aa6780) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f4fc5aa68a0) 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 (0x0x7f4fc5a0c5b0) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7f4fc5aa67e0) 0
+ primary-for QWidget (0x0x7f4fc5a0c5b0)
+ QPaintDevice (0x0x7f4fc5aa6840) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f4fc580b480) 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 (0x0x7f4fc57a35b0) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7f4fc5a0c8c0) 0
+ primary-for QAbstractButton (0x0x7f4fc57a35b0)
+ QObject (0x0x7f4fc580b3c0) 0
+ primary-for QWidget (0x0x7f4fc5a0c8c0)
+ QPaintDevice (0x0x7f4fc580b420) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f4fc580b6c0) 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 (0x0x7f4fc57a3618) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7f4fc5a0c930) 0
+ primary-for QAbstractSpinBox (0x0x7f4fc57a3618)
+ QObject (0x0x7f4fc580b600) 0
+ primary-for QWidget (0x0x7f4fc5a0c930)
+ QPaintDevice (0x0x7f4fc580b660) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f4fc58a9000) 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 (0x0x7f4fc57a37b8) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7f4fc5a0ce00) 0
+ primary-for QAbstractSlider (0x0x7f4fc57a37b8)
+ QObject (0x0x7f4fc580bf00) 0
+ primary-for QWidget (0x0x7f4fc5a0ce00)
+ QPaintDevice (0x0x7f4fc580bf60) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f4fc58a9240) 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 (0x0x7f4fc57a3820) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7f4fc57a3888) 0
+ primary-for QSlider (0x0x7f4fc57a3820)
+ QWidget (0x0x7f4fc58ae2a0) 0
+ primary-for QAbstractSlider (0x0x7f4fc57a3888)
+ QObject (0x0x7f4fc58a9180) 0
+ primary-for QWidget (0x0x7f4fc58ae2a0)
+ QPaintDevice (0x0x7f4fc58a91e0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f4fc58a94e0) 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 (0x0x7f4fc57a38f0) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7f4fc58a9480) 0
+ primary-for QStyle (0x0x7f4fc57a38f0)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f4fc59348a0) 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 (0x0x7f4fc57a3bc8) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7f4fc5913070) 0
+ primary-for QTabBar (0x0x7f4fc57a3bc8)
+ QObject (0x0x7f4fc59347e0) 0
+ primary-for QWidget (0x0x7f4fc5913070)
+ QPaintDevice (0x0x7f4fc5934840) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f4fc5934ba0) 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 (0x0x7f4fc57a3c30) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7f4fc5913690) 0
+ primary-for QTabWidget (0x0x7f4fc57a3c30)
+ QObject (0x0x7f4fc5934ae0) 0
+ primary-for QWidget (0x0x7f4fc5913690)
+ QPaintDevice (0x0x7f4fc5934b40) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f4fc5934f60) 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 (0x0x7f4fc57a3c98) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7f4fc59139a0) 0
+ primary-for QRubberBand (0x0x7f4fc57a3c98)
+ QObject (0x0x7f4fc5934ea0) 0
+ primary-for QWidget (0x0x7f4fc59139a0)
+ QPaintDevice (0x0x7f4fc5934f00) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f4fc562f3c0) 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 (0x0x7f4fc57a3d00) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7f4fc5913af0) 0
+ primary-for QFrame (0x0x7f4fc57a3d00)
+ QObject (0x0x7f4fc562f300) 0
+ primary-for QWidget (0x0x7f4fc5913af0)
+ QPaintDevice (0x0x7f4fc562f360) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f4fc562fc00) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f4fc57a3f08) 0
+ QStyleOption (0x0x7f4fc562fc60) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f4fc91c5340) 0
+ QStyleOption (0x0x7f4fc562fea0) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f4fc91c54e0) 0
+ QStyleOption (0x0x7f4fc56795a0) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f4fc57a3f70) 0
+ QStyleOption (0x0x7f4fc56797e0) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f4fc56e7000) 0
+ QStyleOption (0x0x7f4fc5679a20) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7f4fc56e7068) 0
+ QStyleOptionHeader (0x0x7f4fc56e70d0) 0
+ QStyleOption (0x0x7f4fc5679c60) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f4fc56e71a0) 0
+ QStyleOption (0x0x7f4fc5702060) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f4fc56e7340) 0
+ QStyleOption (0x0x7f4fc5702720) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f4fc56e7618) 0
+ QStyleOption (0x0x7f4fc53e2000) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f4fc56e77b8) 0
+ QStyleOption (0x0x7f4fc53e26c0) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f4fc56e7820) 0
+ QStyleOption (0x0x7f4fc53e2900) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f4fc56e7888) 0
+ QStyleOption (0x0x7f4fc53e2b40) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f4fc56e78f0) 0
+ QStyleOption (0x0x7f4fc53e2d80) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f4fc56e7a90) 0
+ QStyleOption (0x0x7f4fc548c480) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f4fc56e7af8) 0
+ QStyleOption (0x0x7f4fc548c6c0) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f4fc56e7b60) 0
+ QStyleOption (0x0x7f4fc548c960) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f4fc56e7bc8) 0
+ QStyleOptionComplex (0x0x7f4fc56e7c30) 0
+ QStyleOption (0x0x7f4fc548cc00) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f4fc56e7d00) 0
+ QStyleOptionComplex (0x0x7f4fc56e7d68) 0
+ QStyleOption (0x0x7f4fc548c9c0) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f4fc56e7e38) 0
+ QStyleOptionComplex (0x0x7f4fc56e7ea0) 0
+ QStyleOption (0x0x7f4fc54ff1e0) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f4fc5564000) 0
+ QStyleOptionComplex (0x0x7f4fc5564068) 0
+ QStyleOption (0x0x7f4fc54ff8a0) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f4fc55640d0) 0
+ QStyleOptionComplex (0x0x7f4fc5564138) 0
+ QStyleOption (0x0x7f4fc54ffae0) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f4fc55641a0) 0
+ QStyleOptionComplex (0x0x7f4fc5564208) 0
+ QStyleOption (0x0x7f4fc54ffd20) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f4fc5564270) 0
+ QStyleOptionComplex (0x0x7f4fc55642d8) 0
+ QStyleOption (0x0x7f4fc54fff60) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f4fc5564340) 0
+ QStyleOption (0x0x7f4fc558f1e0) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f4fc558f540) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f4fc55643a8) 0
+ QStyleHintReturn (0x0x7f4fc558f5a0) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f4fc5564478) 0
+ QStyleHintReturn (0x0x7f4fc558f600) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f4fc558f780) 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 (0x0x7f4fc5564548) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7f4fc558f720) 0
+ primary-for QAbstractItemDelegate (0x0x7f4fc5564548)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f4fc558f9c0) 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 (0x0x7f4fc55645b0) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7f4fc5564618) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc55645b0)
+ QWidget (0x0x7f4fc5503e00) 0
+ primary-for QFrame (0x0x7f4fc5564618)
+ QObject (0x0x7f4fc558f900) 0
+ primary-for QWidget (0x0x7f4fc5503e00)
+ QPaintDevice (0x0x7f4fc558f960) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f4fc558fcc0) 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 (0x0x7f4fc5564680) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7f4fc55646e8) 0
+ primary-for QAbstractItemView (0x0x7f4fc5564680)
+ QFrame (0x0x7f4fc5564750) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc55646e8)
+ QWidget (0x0x7f4fc51dc000) 0
+ primary-for QFrame (0x0x7f4fc5564750)
+ QObject (0x0x7f4fc558fc00) 0
+ primary-for QWidget (0x0x7f4fc51dc000)
+ QPaintDevice (0x0x7f4fc558fc60) 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 (0x0x7f4fc5201540) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7f4fc55648f0) 0
+ primary-for QAccessibleWidget (0x0x7f4fc5201540)
+ QAccessibleInterface (0x0x7f4fc521f7e0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f4fc55648f0)
+ QAccessibleActionInterface (0x0x7f4fc521f840) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f4fc521f960) 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 (0x0x7f4fc5564958) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7f4fc55649c0) 0
+ primary-for QApplication (0x0x7f4fc5564958)
+ QCoreApplication (0x0x7f4fc5564a28) 0
+ primary-for QGuiApplication (0x0x7f4fc55649c0)
+ QObject (0x0x7f4fc521f900) 0
+ primary-for QCoreApplication (0x0x7f4fc5564a28)
+
+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 (0x0x7f4fc521fc00) 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 (0x0x7f4fc5564a90) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7f4fc521fe40) 0
+ primary-for QSpacerItem (0x0x7f4fc5564a90)
+
+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 (0x0x7f4fc5564af8) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7f4fc52b80c0) 0
+ primary-for QWidgetItem (0x0x7f4fc5564af8)
+
+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 (0x0x7f4fc5564b60) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7f4fc5564bc8) 0
+ primary-for QWidgetItemV2 (0x0x7f4fc5564b60)
+ QLayoutItem (0x0x7f4fc52b82a0) 0
+ primary-for QWidgetItem (0x0x7f4fc5564bc8)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f4fc52b8420) 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 (0x0x7f4fc5201700) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7f4fc52b8360) 0
+ primary-for QLayout (0x0x7f4fc5201700)
+ QLayoutItem (0x0x7f4fc52b83c0) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f4fc52b8720) 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 (0x0x7f4fc5564c30) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7f4fc5201a10) 0
+ primary-for QGridLayout (0x0x7f4fc5564c30)
+ QObject (0x0x7f4fc52b8660) 0
+ primary-for QLayout (0x0x7f4fc5201a10)
+ QLayoutItem (0x0x7f4fc52b86c0) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f4fc52b89c0) 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 (0x0x7f4fc5564c98) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7f4fc5201a80) 0
+ primary-for QBoxLayout (0x0x7f4fc5564c98)
+ QObject (0x0x7f4fc52b8900) 0
+ primary-for QLayout (0x0x7f4fc5201a80)
+ QLayoutItem (0x0x7f4fc52b8960) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f4fc52b8c00) 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 (0x0x7f4fc5564d00) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7f4fc5564d68) 0
+ primary-for QHBoxLayout (0x0x7f4fc5564d00)
+ QLayout (0x0x7f4fc5201d90) 0
+ primary-for QBoxLayout (0x0x7f4fc5564d68)
+ QObject (0x0x7f4fc52b8b40) 0
+ primary-for QLayout (0x0x7f4fc5201d90)
+ QLayoutItem (0x0x7f4fc52b8ba0) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f4fc52b8d80) 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 (0x0x7f4fc5564dd0) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7f4fc5564e38) 0
+ primary-for QVBoxLayout (0x0x7f4fc5564dd0)
+ QLayout (0x0x7f4fc5201e00) 0
+ primary-for QBoxLayout (0x0x7f4fc5564e38)
+ QObject (0x0x7f4fc52b8cc0) 0
+ primary-for QLayout (0x0x7f4fc5201e00)
+ QLayoutItem (0x0x7f4fc52b8d20) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f4fc52b8ea0) 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 (0x0x7f4fc5564ea0) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7f4fc52b8e40) 0
+ primary-for QButtonGroup (0x0x7f4fc5564ea0)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f4fc534d120) 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 (0x0x7f4fc5564f08) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7f4fc5201e70) 0
+ primary-for QCalendarWidget (0x0x7f4fc5564f08)
+ QObject (0x0x7f4fc534d060) 0
+ primary-for QWidget (0x0x7f4fc5201e70)
+ QPaintDevice (0x0x7f4fc534d0c0) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f4fc534d5a0) 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 (0x0x7f4fc5564f70) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7f4fc5371000) 0
+ primary-for QCheckBox (0x0x7f4fc5564f70)
+ QWidget (0x0x7f4fc53502a0) 0
+ primary-for QAbstractButton (0x0x7f4fc5371000)
+ QObject (0x0x7f4fc534d4e0) 0
+ primary-for QWidget (0x0x7f4fc53502a0)
+ QPaintDevice (0x0x7f4fc534d540) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f4fc534d7e0) 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 (0x0x7f4fc5371068) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7f4fc5350310) 0
+ primary-for QDialog (0x0x7f4fc5371068)
+ QObject (0x0x7f4fc534d720) 0
+ primary-for QWidget (0x0x7f4fc5350310)
+ QPaintDevice (0x0x7f4fc534d780) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f4fc534da20) 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 (0x0x7f4fc53710d0) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7f4fc5371138) 0
+ primary-for QColorDialog (0x0x7f4fc53710d0)
+ QWidget (0x0x7f4fc5350460) 0
+ primary-for QDialog (0x0x7f4fc5371138)
+ QObject (0x0x7f4fc534d960) 0
+ primary-for QWidget (0x0x7f4fc5350460)
+ QPaintDevice (0x0x7f4fc534d9c0) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f4fc4ffb120) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f4fc4ffb240) 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 (0x0x7f4fc53712d8) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7f4fc5371340) 0
+ primary-for QColumnView (0x0x7f4fc53712d8)
+ QAbstractScrollArea (0x0x7f4fc53713a8) 0
+ primary-for QAbstractItemView (0x0x7f4fc5371340)
+ QFrame (0x0x7f4fc5371410) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc53713a8)
+ QWidget (0x0x7f4fc5350770) 0
+ primary-for QFrame (0x0x7f4fc5371410)
+ QObject (0x0x7f4fc4ffb180) 0
+ primary-for QWidget (0x0x7f4fc5350770)
+ QPaintDevice (0x0x7f4fc4ffb1e0) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f4fc4ffb480) 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 (0x0x7f4fc5371478) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7f4fc53507e0) 0
+ primary-for QComboBox (0x0x7f4fc5371478)
+ QObject (0x0x7f4fc4ffb3c0) 0
+ primary-for QWidget (0x0x7f4fc53507e0)
+ QPaintDevice (0x0x7f4fc4ffb420) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f4fc4ffba20) 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 (0x0x7f4fc53714e0) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7f4fc5371548) 0
+ primary-for QPushButton (0x0x7f4fc53714e0)
+ QWidget (0x0x7f4fc5350cb0) 0
+ primary-for QAbstractButton (0x0x7f4fc5371548)
+ QObject (0x0x7f4fc4ffb960) 0
+ primary-for QWidget (0x0x7f4fc5350cb0)
+ QPaintDevice (0x0x7f4fc4ffb9c0) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f4fc4ffbc60) 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 (0x0x7f4fc53715b0) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7f4fc5371618) 0
+ primary-for QCommandLinkButton (0x0x7f4fc53715b0)
+ QAbstractButton (0x0x7f4fc5371680) 0
+ primary-for QPushButton (0x0x7f4fc5371618)
+ QWidget (0x0x7f4fc5350d20) 0
+ primary-for QAbstractButton (0x0x7f4fc5371680)
+ QObject (0x0x7f4fc4ffbba0) 0
+ primary-for QWidget (0x0x7f4fc5350d20)
+ QPaintDevice (0x0x7f4fc4ffbc00) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f4fc4ffbe40) 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 (0x0x7f4fc53716e8) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7f4fc5371750) 0
+ primary-for QCommonStyle (0x0x7f4fc53716e8)
+ QObject (0x0x7f4fc4ffbde0) 0
+ primary-for QStyle (0x0x7f4fc5371750)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f4fc509d060) 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 (0x0x7f4fc53717b8) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7f4fc509d000) 0
+ primary-for QCompleter (0x0x7f4fc53717b8)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f4fc509d3c0) 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 (0x0x7f4fc5371820) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7f4fc509d360) 0
+ primary-for QDataWidgetMapper (0x0x7f4fc5371820)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f4fc509d6c0) 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 (0x0x7f4fc5371888) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7f4fc53718f0) 0
+ primary-for QDateTimeEdit (0x0x7f4fc5371888)
+ QWidget (0x0x7f4fc50a4150) 0
+ primary-for QAbstractSpinBox (0x0x7f4fc53718f0)
+ QObject (0x0x7f4fc509d600) 0
+ primary-for QWidget (0x0x7f4fc50a4150)
+ QPaintDevice (0x0x7f4fc509d660) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f4fc509dc60) 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 (0x0x7f4fc5371a90) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7f4fc5371af8) 0
+ primary-for QTimeEdit (0x0x7f4fc5371a90)
+ QAbstractSpinBox (0x0x7f4fc5371b60) 0
+ primary-for QDateTimeEdit (0x0x7f4fc5371af8)
+ QWidget (0x0x7f4fc50a4690) 0
+ primary-for QAbstractSpinBox (0x0x7f4fc5371b60)
+ QObject (0x0x7f4fc509dba0) 0
+ primary-for QWidget (0x0x7f4fc50a4690)
+ QPaintDevice (0x0x7f4fc509dc00) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f4fc509dde0) 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 (0x0x7f4fc5371bc8) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7f4fc5371c30) 0
+ primary-for QDateEdit (0x0x7f4fc5371bc8)
+ QAbstractSpinBox (0x0x7f4fc5371c98) 0
+ primary-for QDateTimeEdit (0x0x7f4fc5371c30)
+ QWidget (0x0x7f4fc50a4700) 0
+ primary-for QAbstractSpinBox (0x0x7f4fc5371c98)
+ QObject (0x0x7f4fc509dd20) 0
+ primary-for QWidget (0x0x7f4fc50a4700)
+ QPaintDevice (0x0x7f4fc509dd80) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f4fc514b240) 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 (0x0x7f4fc5371d00) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7f4fc5371d68) 0
+ primary-for QDial (0x0x7f4fc5371d00)
+ QWidget (0x0x7f4fc50a4770) 0
+ primary-for QAbstractSlider (0x0x7f4fc5371d68)
+ QObject (0x0x7f4fc514b180) 0
+ primary-for QWidget (0x0x7f4fc50a4770)
+ QPaintDevice (0x0x7f4fc514b1e0) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f4fc514b480) 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 (0x0x7f4fc5371dd0) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7f4fc50a47e0) 0
+ primary-for QDialogButtonBox (0x0x7f4fc5371dd0)
+ QObject (0x0x7f4fc514b3c0) 0
+ primary-for QWidget (0x0x7f4fc50a47e0)
+ QPaintDevice (0x0x7f4fc514b420) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f4fc514bc00) 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 (0x0x7f4fc5371f70) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7f4fc517c8c0) 0
+ primary-for QDockWidget (0x0x7f4fc5371f70)
+ QObject (0x0x7f4fc514bb40) 0
+ primary-for QWidget (0x0x7f4fc517c8c0)
+ QPaintDevice (0x0x7f4fc514bba0) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f4fc4e233c0) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f4fc4e23a20) 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 (0x0x7f4fc4e04270) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7f4fc4e042d8) 0
+ primary-for QErrorMessage (0x0x7f4fc4e04270)
+ QWidget (0x0x7f4fc4e73310) 0
+ primary-for QDialog (0x0x7f4fc4e042d8)
+ QObject (0x0x7f4fc4e23960) 0
+ primary-for QWidget (0x0x7f4fc4e73310)
+ QPaintDevice (0x0x7f4fc4e239c0) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f4fc4e23c60) 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 (0x0x7f4fc4e04340) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7f4fc4e043a8) 0
+ primary-for QFileDialog (0x0x7f4fc4e04340)
+ QWidget (0x0x7f4fc4e73380) 0
+ primary-for QDialog (0x0x7f4fc4e043a8)
+ QObject (0x0x7f4fc4e23ba0) 0
+ primary-for QWidget (0x0x7f4fc4e73380)
+ QPaintDevice (0x0x7f4fc4e23c00) 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 (0x0x7f4fc4e04548) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7f4fc4ef16c0) 0
+ primary-for QFileIconProvider (0x0x7f4fc4e04548)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f4fc4ef18a0) 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 (0x0x7f4fc4e045b0) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7f4fc4e73cb0) 0
+ primary-for QFocusFrame (0x0x7f4fc4e045b0)
+ QObject (0x0x7f4fc4ef17e0) 0
+ primary-for QWidget (0x0x7f4fc4e73cb0)
+ QPaintDevice (0x0x7f4fc4ef1840) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f4fc4ef1ae0) 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 (0x0x7f4fc4e04618) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7f4fc4e04680) 0
+ primary-for QFontComboBox (0x0x7f4fc4e04618)
+ QWidget (0x0x7f4fc4e73d20) 0
+ primary-for QComboBox (0x0x7f4fc4e04680)
+ QObject (0x0x7f4fc4ef1a20) 0
+ primary-for QWidget (0x0x7f4fc4e73d20)
+ QPaintDevice (0x0x7f4fc4ef1a80) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f4fc4f9a2a0) 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 (0x0x7f4fc4e04820) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7f4fc4e04888) 0
+ primary-for QFontDialog (0x0x7f4fc4e04820)
+ QWidget (0x0x7f4fc4bbe000) 0
+ primary-for QDialog (0x0x7f4fc4e04888)
+ QObject (0x0x7f4fc4f9a1e0) 0
+ primary-for QWidget (0x0x7f4fc4bbe000)
+ QPaintDevice (0x0x7f4fc4f9a240) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f4fc4f9aa20) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f4fc4f9aa80) 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 (0x0x7f4fc4e04a28) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7f4fc4bbe310) 0
+ primary-for QFormLayout (0x0x7f4fc4e04a28)
+ QObject (0x0x7f4fc4f9a960) 0
+ primary-for QLayout (0x0x7f4fc4bbe310)
+ QLayoutItem (0x0x7f4fc4f9a9c0) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f4fc4cd0720) 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 (0x0x7f4fc4c9ce38) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7f4fc4cd06c0) 0
+ primary-for QGesture (0x0x7f4fc4c9ce38)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f4fc4cd0900) 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 (0x0x7f4fc4c9cea0) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7f4fc4c9cf08) 0
+ primary-for QPanGesture (0x0x7f4fc4c9cea0)
+ QObject (0x0x7f4fc4cd08a0) 0
+ primary-for QGesture (0x0x7f4fc4c9cf08)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f4fc4cd0ae0) 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 (0x0x7f4fc4c9cf70) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7f4fc4d0b000) 0
+ primary-for QPinchGesture (0x0x7f4fc4c9cf70)
+ QObject (0x0x7f4fc4cd0a80) 0
+ primary-for QGesture (0x0x7f4fc4d0b000)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f4fc49b3ea0) 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 (0x0x7f4fc49e54e0) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7f4fc49e5548) 0
+ primary-for QSwipeGesture (0x0x7f4fc49e54e0)
+ QObject (0x0x7f4fc49b3e40) 0
+ primary-for QGesture (0x0x7f4fc49e5548)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f4fc49f8180) 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 (0x0x7f4fc49e55b0) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7f4fc49e5618) 0
+ primary-for QTapGesture (0x0x7f4fc49e55b0)
+ QObject (0x0x7f4fc49f8120) 0
+ primary-for QGesture (0x0x7f4fc49e5618)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f4fc49f8360) 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 (0x0x7f4fc49e5680) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7f4fc49e56e8) 0
+ primary-for QTapAndHoldGesture (0x0x7f4fc49e5680)
+ QObject (0x0x7f4fc49f8300) 0
+ primary-for QGesture (0x0x7f4fc49e56e8)
+
+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 (0x0x7f4fc49e5750) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7f4fc49f84e0) 0
+ primary-for QGestureEvent (0x0x7f4fc49e5750)
+
+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 (0x0x7f4fc4b10c00) 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 (0x0x7f4fc4b81120) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f4fc485e660) 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 (0x0x7f4fc4b97a80) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7f4fc485e5a0) 0
+ primary-for QGraphicsObject (0x0x7f4fc4b97a80)
+ QGraphicsItem (0x0x7f4fc485e600) 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 (0x0x7f4fc4b323a8) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7f4fc485e720) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f4fc4b323a8)
+
+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 (0x0x7f4fc4b32410) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f4fc4b32478) 0
+ primary-for QGraphicsPathItem (0x0x7f4fc4b32410)
+ QGraphicsItem (0x0x7f4fc485e840) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f4fc4b32478)
+
+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 (0x0x7f4fc4b324e0) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f4fc4b32548) 0
+ primary-for QGraphicsRectItem (0x0x7f4fc4b324e0)
+ QGraphicsItem (0x0x7f4fc485e960) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f4fc4b32548)
+
+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 (0x0x7f4fc4b325b0) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f4fc4b32618) 0
+ primary-for QGraphicsEllipseItem (0x0x7f4fc4b325b0)
+ QGraphicsItem (0x0x7f4fc485eae0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f4fc4b32618)
+
+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 (0x0x7f4fc4b32680) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f4fc4b326e8) 0
+ primary-for QGraphicsPolygonItem (0x0x7f4fc4b32680)
+ QGraphicsItem (0x0x7f4fc485ec60) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f4fc4b326e8)
+
+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 (0x0x7f4fc4b32750) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7f4fc485ed80) 0
+ primary-for QGraphicsLineItem (0x0x7f4fc4b32750)
+
+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 (0x0x7f4fc4b327b8) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7f4fc485ef00) 0
+ primary-for QGraphicsPixmapItem (0x0x7f4fc4b327b8)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f4fc48ea180) 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 (0x0x7f4fc4b32820) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7f4fc4b97ee0) 0
+ primary-for QGraphicsTextItem (0x0x7f4fc4b32820)
+ QObject (0x0x7f4fc48ea0c0) 0
+ primary-for QGraphicsObject (0x0x7f4fc4b97ee0)
+ QGraphicsItem (0x0x7f4fc48ea120) 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 (0x0x7f4fc4b32958) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f4fc4b329c0) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f4fc4b32958)
+ QGraphicsItem (0x0x7f4fc48ea420) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f4fc4b329c0)
+
+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 (0x0x7f4fc4b32a28) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7f4fc48ea540) 0
+ primary-for QGraphicsItemGroup (0x0x7f4fc4b32a28)
+
+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 (0x0x7f4fc493bb40) 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 (0x0x7f4fc493a750) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7f4fc4980420) 0
+ primary-for QGraphicsLayout (0x0x7f4fc493a750)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f4fc4980900) 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 (0x0x7f4fc493a888) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7f4fc49808a0) 0
+ primary-for QGraphicsAnchor (0x0x7f4fc493a888)
+
+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 (0x0x7f4fc493a8f0) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7f4fc493a958) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f4fc493a8f0)
+ QGraphicsLayoutItem (0x0x7f4fc4980a80) 0
+ primary-for QGraphicsLayout (0x0x7f4fc493a958)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f4fc4980c00) 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 (0x0x7f4fc493a9c0) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7f4fc4980ba0) 0
+ primary-for QGraphicsEffect (0x0x7f4fc493a9c0)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f4fc45db360) 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 (0x0x7f4fc493ab60) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7f4fc493abc8) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f4fc493ab60)
+ QObject (0x0x7f4fc45db300) 0
+ primary-for QGraphicsEffect (0x0x7f4fc493abc8)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f4fc45db540) 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 (0x0x7f4fc493ac30) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7f4fc493ac98) 0
+ primary-for QGraphicsBlurEffect (0x0x7f4fc493ac30)
+ QObject (0x0x7f4fc45db4e0) 0
+ primary-for QGraphicsEffect (0x0x7f4fc493ac98)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f4fc45dbd20) 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 (0x0x7f4fc493ae38) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7f4fc493aea0) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f4fc493ae38)
+ QObject (0x0x7f4fc45dbcc0) 0
+ primary-for QGraphicsEffect (0x0x7f4fc493aea0)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f4fc46ae180) 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 (0x0x7f4fc493af08) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7f4fc493af70) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f4fc493af08)
+ QObject (0x0x7f4fc46ae120) 0
+ primary-for QGraphicsEffect (0x0x7f4fc493af70)
+
+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 (0x0x7f4fc46bb000) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7f4fc46bb068) 0
+ primary-for QGraphicsGridLayout (0x0x7f4fc46bb000)
+ QGraphicsLayoutItem (0x0x7f4fc46ae300) 0
+ primary-for QGraphicsLayout (0x0x7f4fc46bb068)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f4fc46ae4e0) 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 (0x0x7f4fc46bb1a0) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7f4fc46ae480) 0
+ primary-for QGraphicsItemAnimation (0x0x7f4fc46bb1a0)
+
+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 (0x0x7f4fc46bb208) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7f4fc46bb270) 0
+ primary-for QGraphicsLinearLayout (0x0x7f4fc46bb208)
+ QGraphicsLayoutItem (0x0x7f4fc46ae5a0) 0
+ primary-for QGraphicsLayout (0x0x7f4fc46bb270)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f4fc46ae8a0) 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 (0x0x7f4fc490abd0) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7f4fc490ac40) 0
+ primary-for QGraphicsWidget (0x0x7f4fc490abd0)
+ QObject (0x0x7f4fc46ae780) 0
+ primary-for QGraphicsObject (0x0x7f4fc490ac40)
+ QGraphicsItem (0x0x7f4fc46ae7e0) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7f4fc46ae840) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f4fc46aed20) 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 (0x0x7f4fc46bb3a8) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7f4fc490ad90) 0
+ primary-for QGraphicsProxyWidget (0x0x7f4fc46bb3a8)
+ QGraphicsObject (0x0x7f4fc490ae00) 0
+ primary-for QGraphicsWidget (0x0x7f4fc490ad90)
+ QObject (0x0x7f4fc46aec00) 0
+ primary-for QGraphicsObject (0x0x7f4fc490ae00)
+ QGraphicsItem (0x0x7f4fc46aec60) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7f4fc46aecc0) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f4fc47460c0) 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 (0x0x7f4fc46bb5b0) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7f4fc4746060) 0
+ primary-for QGraphicsScene (0x0x7f4fc46bb5b0)
+
+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 (0x0x7f4fc46bbea0) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7f4fc4409360) 0
+ primary-for QGraphicsSceneEvent (0x0x7f4fc46bbea0)
+
+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 (0x0x7f4fc46bbf08) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f4fc46bbf70) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f4fc46bbf08)
+ QEvent (0x0x7f4fc4409540) 0
+ primary-for QGraphicsSceneEvent (0x0x7f4fc46bbf70)
+
+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 (0x0x7f4fc46bbe38) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f4fc446b000) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f4fc46bbe38)
+ QEvent (0x0x7f4fc4409660) 0
+ primary-for QGraphicsSceneEvent (0x0x7f4fc446b000)
+
+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 (0x0x7f4fc446b068) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f4fc446b0d0) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f4fc446b068)
+ QEvent (0x0x7f4fc4409780) 0
+ primary-for QGraphicsSceneEvent (0x0x7f4fc446b0d0)
+
+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 (0x0x7f4fc446b138) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f4fc446b1a0) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f4fc446b138)
+ QEvent (0x0x7f4fc44098a0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f4fc446b1a0)
+
+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 (0x0x7f4fc446b208) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f4fc446b270) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f4fc446b208)
+ QEvent (0x0x7f4fc44099c0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f4fc446b270)
+
+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 (0x0x7f4fc446b2d8) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f4fc446b340) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f4fc446b2d8)
+ QEvent (0x0x7f4fc4409ae0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f4fc446b340)
+
+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 (0x0x7f4fc446b3a8) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f4fc446b410) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f4fc446b3a8)
+ QEvent (0x0x7f4fc4409c00) 0
+ primary-for QGraphicsSceneEvent (0x0x7f4fc446b410)
+
+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 (0x0x7f4fc446b478) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f4fc446b4e0) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f4fc446b478)
+ QEvent (0x0x7f4fc4409d20) 0
+ primary-for QGraphicsSceneEvent (0x0x7f4fc446b4e0)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f4fc4409ea0) 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 (0x0x7f4fc446b548) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7f4fc4409e40) 0
+ primary-for QGraphicsTransform (0x0x7f4fc446b548)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f4fc44b30c0) 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 (0x0x7f4fc446b5b0) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7f4fc446b618) 0
+ primary-for QGraphicsScale (0x0x7f4fc446b5b0)
+ QObject (0x0x7f4fc44b3060) 0
+ primary-for QGraphicsTransform (0x0x7f4fc446b618)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f4fc44b32a0) 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 (0x0x7f4fc446b680) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7f4fc446b6e8) 0
+ primary-for QGraphicsRotation (0x0x7f4fc446b680)
+ QObject (0x0x7f4fc44b3240) 0
+ primary-for QGraphicsTransform (0x0x7f4fc446b6e8)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f4fc44b34e0) 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 (0x0x7f4fc446b750) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7f4fc446b7b8) 0
+ primary-for QScrollArea (0x0x7f4fc446b750)
+ QFrame (0x0x7f4fc446b820) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc446b7b8)
+ QWidget (0x0x7f4fc4742620) 0
+ primary-for QFrame (0x0x7f4fc446b820)
+ QObject (0x0x7f4fc44b3420) 0
+ primary-for QWidget (0x0x7f4fc4742620)
+ QPaintDevice (0x0x7f4fc44b3480) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f4fc44b3720) 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 (0x0x7f4fc446b888) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7f4fc446b8f0) 0
+ primary-for QGraphicsView (0x0x7f4fc446b888)
+ QFrame (0x0x7f4fc446b958) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc446b8f0)
+ QWidget (0x0x7f4fc4742690) 0
+ primary-for QFrame (0x0x7f4fc446b958)
+ QObject (0x0x7f4fc44b3660) 0
+ primary-for QWidget (0x0x7f4fc4742690)
+ QPaintDevice (0x0x7f4fc44b36c0) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f4fc457f900) 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 (0x0x7f4fc446bc30) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7f4fc4742e00) 0
+ primary-for QGroupBox (0x0x7f4fc446bc30)
+ QObject (0x0x7f4fc457f840) 0
+ primary-for QWidget (0x0x7f4fc4742e00)
+ QPaintDevice (0x0x7f4fc457f8a0) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f4fc457fb40) 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 (0x0x7f4fc446bc98) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7f4fc446bd00) 0
+ primary-for QHeaderView (0x0x7f4fc446bc98)
+ QAbstractScrollArea (0x0x7f4fc446bd68) 0
+ primary-for QAbstractItemView (0x0x7f4fc446bd00)
+ QFrame (0x0x7f4fc446bdd0) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc446bd68)
+ QWidget (0x0x7f4fc4742e70) 0
+ primary-for QFrame (0x0x7f4fc446bdd0)
+ QObject (0x0x7f4fc457fa80) 0
+ primary-for QWidget (0x0x7f4fc4742e70)
+ QPaintDevice (0x0x7f4fc457fae0) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f4fc4230000) 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 (0x0x7f4fc446be38) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7f4fc41fc150) 0
+ primary-for QLineEdit (0x0x7f4fc446be38)
+ QObject (0x0x7f4fc457ff00) 0
+ primary-for QWidget (0x0x7f4fc41fc150)
+ QPaintDevice (0x0x7f4fc457ff60) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f4fc42303c0) 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 (0x0x7f4fc446bea0) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7f4fc446bf08) 0
+ primary-for QInputDialog (0x0x7f4fc446bea0)
+ QWidget (0x0x7f4fc41fc460) 0
+ primary-for QDialog (0x0x7f4fc446bf08)
+ QObject (0x0x7f4fc4230300) 0
+ primary-for QWidget (0x0x7f4fc41fc460)
+ QPaintDevice (0x0x7f4fc4230360) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f4fc4230a20) 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 (0x0x7f4fc42780d0) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f4fc4278138) 0
+ primary-for QItemDelegate (0x0x7f4fc42780d0)
+ QObject (0x0x7f4fc42309c0) 0
+ primary-for QAbstractItemDelegate (0x0x7f4fc4278138)
+
+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 (0x0x7f4fc4230ba0) 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 (0x0x7f4fc4230f00) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f4fc431c420) 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 (*)(...))QKeySequenceEdit::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 (0x0x7f4fc4278270) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7f4fc41fc770) 0
+ primary-for QKeySequenceEdit (0x0x7f4fc4278270)
+ QObject (0x0x7f4fc431c360) 0
+ primary-for QWidget (0x0x7f4fc41fc770)
+ QPaintDevice (0x0x7f4fc431c3c0) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f4fc431c660) 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 (0x0x7f4fc42782d8) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7f4fc4278340) 0
+ primary-for QLabel (0x0x7f4fc42782d8)
+ QWidget (0x0x7f4fc41fc7e0) 0
+ primary-for QFrame (0x0x7f4fc4278340)
+ QObject (0x0x7f4fc431c5a0) 0
+ primary-for QWidget (0x0x7f4fc41fc7e0)
+ QPaintDevice (0x0x7f4fc431c600) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f4fc431c960) 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 (0x0x7f4fc42783a8) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7f4fc4278410) 0
+ primary-for QLCDNumber (0x0x7f4fc42783a8)
+ QWidget (0x0x7f4fc41fc850) 0
+ primary-for QFrame (0x0x7f4fc4278410)
+ QObject (0x0x7f4fc431c8a0) 0
+ primary-for QWidget (0x0x7f4fc41fc850)
+ QPaintDevice (0x0x7f4fc431c900) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f4fc431cd20) 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 (0x0x7f4fc4278478) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7f4fc42784e0) 0
+ primary-for QListView (0x0x7f4fc4278478)
+ QAbstractScrollArea (0x0x7f4fc4278548) 0
+ primary-for QAbstractItemView (0x0x7f4fc42784e0)
+ QFrame (0x0x7f4fc42785b0) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc4278548)
+ QWidget (0x0x7f4fc41fcbd0) 0
+ primary-for QFrame (0x0x7f4fc42785b0)
+ QObject (0x0x7f4fc431cc60) 0
+ primary-for QWidget (0x0x7f4fc41fcbd0)
+ QPaintDevice (0x0x7f4fc431ccc0) 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 (0x0x7f4fc439b2a0) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f4fc439bde0) 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 (0x0x7f4fc4278618) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7f4fc4278680) 0
+ primary-for QListWidget (0x0x7f4fc4278618)
+ QAbstractItemView (0x0x7f4fc42786e8) 0
+ primary-for QListView (0x0x7f4fc4278680)
+ QAbstractScrollArea (0x0x7f4fc4278750) 0
+ primary-for QAbstractItemView (0x0x7f4fc42786e8)
+ QFrame (0x0x7f4fc42787b8) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc4278750)
+ QWidget (0x0x7f4fc4371230) 0
+ primary-for QFrame (0x0x7f4fc42787b8)
+ QObject (0x0x7f4fc439bd20) 0
+ primary-for QWidget (0x0x7f4fc4371230)
+ QPaintDevice (0x0x7f4fc439bd80) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f4fc3ff9300) 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 (0x0x7f4fc4278820) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7f4fc43712a0) 0
+ primary-for QMainWindow (0x0x7f4fc4278820)
+ QObject (0x0x7f4fc3ff9240) 0
+ primary-for QWidget (0x0x7f4fc43712a0)
+ QPaintDevice (0x0x7f4fc3ff92a0) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f4fc3ff9b40) 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 (0x0x7f4fc42789c0) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7f4fc4278a28) 0
+ primary-for QMdiArea (0x0x7f4fc42789c0)
+ QFrame (0x0x7f4fc4278a90) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc4278a28)
+ QWidget (0x0x7f4fc43715b0) 0
+ primary-for QFrame (0x0x7f4fc4278a90)
+ QObject (0x0x7f4fc3ff9a80) 0
+ primary-for QWidget (0x0x7f4fc43715b0)
+ QPaintDevice (0x0x7f4fc3ff9ae0) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f4fc40ad3c0) 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 (0x0x7f4fc4278c30) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7f4fc4371930) 0
+ primary-for QMdiSubWindow (0x0x7f4fc4278c30)
+ QObject (0x0x7f4fc40ad300) 0
+ primary-for QWidget (0x0x7f4fc4371930)
+ QPaintDevice (0x0x7f4fc40ad360) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f4fc40ada80) 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 (0x0x7f4fc4278dd0) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7f4fc4371b60) 0
+ primary-for QMenu (0x0x7f4fc4278dd0)
+ QObject (0x0x7f4fc40ad9c0) 0
+ primary-for QWidget (0x0x7f4fc4371b60)
+ QPaintDevice (0x0x7f4fc40ada20) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f4fc40adf00) 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 (0x0x7f4fc4278e38) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7f4fc4371bd0) 0
+ primary-for QMenuBar (0x0x7f4fc4278e38)
+ QObject (0x0x7f4fc40ade40) 0
+ primary-for QWidget (0x0x7f4fc4371bd0)
+ QPaintDevice (0x0x7f4fc40adea0) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f4fc3db3180) 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 (0x0x7f4fc4278ea0) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7f4fc4278f08) 0
+ primary-for QMessageBox (0x0x7f4fc4278ea0)
+ QWidget (0x0x7f4fc4371c40) 0
+ primary-for QDialog (0x0x7f4fc4278f08)
+ QObject (0x0x7f4fc3db30c0) 0
+ primary-for QWidget (0x0x7f4fc4371c40)
+ QPaintDevice (0x0x7f4fc3db3120) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f4fc3db3b40) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f4fc3db3ba0) 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 (0x0x7f4fc3de70d0) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f4fc3de7138) 0
+ primary-for QTextEdit (0x0x7f4fc3de70d0)
+ QFrame (0x0x7f4fc3de71a0) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc3de7138)
+ QWidget (0x0x7f4fc3e53000) 0
+ primary-for QFrame (0x0x7f4fc3de71a0)
+ QObject (0x0x7f4fc3db3a80) 0
+ primary-for QWidget (0x0x7f4fc3e53000)
+ QPaintDevice (0x0x7f4fc3db3ae0) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f4fc3e9f5a0) 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 (0x0x7f4fc3de7340) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f4fc3de73a8) 0
+ primary-for QPlainTextEdit (0x0x7f4fc3de7340)
+ QFrame (0x0x7f4fc3de7410) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc3de73a8)
+ QWidget (0x0x7f4fc3e53380) 0
+ primary-for QFrame (0x0x7f4fc3de7410)
+ QObject (0x0x7f4fc3e9f4e0) 0
+ primary-for QWidget (0x0x7f4fc3e53380)
+ QPaintDevice (0x0x7f4fc3e9f540) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f4fc3e9fae0) 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 (0x0x7f4fc3de7478) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7f4fc3de74e0) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f4fc3de7478)
+ QObject (0x0x7f4fc3e9fa80) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f4fc3de74e0)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f4fc3e9fd20) 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 (0x0x7f4fc3de7548) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7f4fc3e534d0) 0
+ primary-for QProgressBar (0x0x7f4fc3de7548)
+ QObject (0x0x7f4fc3e9fc60) 0
+ primary-for QWidget (0x0x7f4fc3e534d0)
+ QPaintDevice (0x0x7f4fc3e9fcc0) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f4fc3f45060) 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 (0x0x7f4fc3de75b0) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7f4fc3de7618) 0
+ primary-for QProgressDialog (0x0x7f4fc3de75b0)
+ QWidget (0x0x7f4fc3e53620) 0
+ primary-for QDialog (0x0x7f4fc3de7618)
+ QObject (0x0x7f4fc3e9ff60) 0
+ primary-for QWidget (0x0x7f4fc3e53620)
+ QPaintDevice (0x0x7f4fc3f45000) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f4fc3f45240) 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 (0x0x7f4fc3de7680) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7f4fc3de76e8) 0
+ primary-for QProxyStyle (0x0x7f4fc3de7680)
+ QStyle (0x0x7f4fc3de7750) 0
+ primary-for QCommonStyle (0x0x7f4fc3de76e8)
+ QObject (0x0x7f4fc3f451e0) 0
+ primary-for QStyle (0x0x7f4fc3de7750)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f4fc3f45480) 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 (0x0x7f4fc3de77b8) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7f4fc3de7820) 0
+ primary-for QRadioButton (0x0x7f4fc3de77b8)
+ QWidget (0x0x7f4fc3e53690) 0
+ primary-for QAbstractButton (0x0x7f4fc3de7820)
+ QObject (0x0x7f4fc3f453c0) 0
+ primary-for QWidget (0x0x7f4fc3e53690)
+ QPaintDevice (0x0x7f4fc3f45420) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f4fc3f456c0) 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 (0x0x7f4fc3de7888) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7f4fc3de78f0) 0
+ primary-for QScrollBar (0x0x7f4fc3de7888)
+ QWidget (0x0x7f4fc3e53700) 0
+ primary-for QAbstractSlider (0x0x7f4fc3de78f0)
+ QObject (0x0x7f4fc3f45600) 0
+ primary-for QWidget (0x0x7f4fc3e53700)
+ QPaintDevice (0x0x7f4fc3f45660) 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 (0x0x7f4fc3f45840) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f4fc3c8f2a0) 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 (0x0x7f4fc3c8ac98) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7f4fc3c8f240) 0
+ primary-for QScroller (0x0x7f4fc3c8ac98)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f4fc3c8f5a0) 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 (0x0x7f4fc3c8ad00) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7f4fc3c992a0) 0
+ primary-for QSizeGrip (0x0x7f4fc3c8ad00)
+ QObject (0x0x7f4fc3c8f4e0) 0
+ primary-for QWidget (0x0x7f4fc3c992a0)
+ QPaintDevice (0x0x7f4fc3c8f540) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f4fc3c8f7e0) 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 (0x0x7f4fc3c8ad68) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f4fc3c8add0) 0
+ primary-for QSpinBox (0x0x7f4fc3c8ad68)
+ QWidget (0x0x7f4fc3c99310) 0
+ primary-for QAbstractSpinBox (0x0x7f4fc3c8add0)
+ QObject (0x0x7f4fc3c8f720) 0
+ primary-for QWidget (0x0x7f4fc3c99310)
+ QPaintDevice (0x0x7f4fc3c8f780) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f4fc3c8fa20) 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 (0x0x7f4fc3c8ae38) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f4fc3c8aea0) 0
+ primary-for QDoubleSpinBox (0x0x7f4fc3c8ae38)
+ QWidget (0x0x7f4fc3c99380) 0
+ primary-for QAbstractSpinBox (0x0x7f4fc3c8aea0)
+ QObject (0x0x7f4fc3c8f960) 0
+ primary-for QWidget (0x0x7f4fc3c99380)
+ QPaintDevice (0x0x7f4fc3c8f9c0) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f4fc3c8fc60) 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 (0x0x7f4fc3c8af08) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7f4fc3c993f0) 0
+ primary-for QSplashScreen (0x0x7f4fc3c8af08)
+ QObject (0x0x7f4fc3c8fba0) 0
+ primary-for QWidget (0x0x7f4fc3c993f0)
+ QPaintDevice (0x0x7f4fc3c8fc00) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f4fc3c8fea0) 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 (0x0x7f4fc3c8af70) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7f4fc3cfb000) 0
+ primary-for QSplitter (0x0x7f4fc3c8af70)
+ QWidget (0x0x7f4fc3c99460) 0
+ primary-for QFrame (0x0x7f4fc3cfb000)
+ QObject (0x0x7f4fc3c8fde0) 0
+ primary-for QWidget (0x0x7f4fc3c99460)
+ QPaintDevice (0x0x7f4fc3c8fe40) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f4fc3d14120) 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 (0x0x7f4fc3cfb068) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7f4fc3c994d0) 0
+ primary-for QSplitterHandle (0x0x7f4fc3cfb068)
+ QObject (0x0x7f4fc3d14060) 0
+ primary-for QWidget (0x0x7f4fc3c994d0)
+ QPaintDevice (0x0x7f4fc3d140c0) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f4fc3d14360) 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 (0x0x7f4fc3cfb0d0) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7f4fc3c99540) 0
+ primary-for QStackedLayout (0x0x7f4fc3cfb0d0)
+ QObject (0x0x7f4fc3d142a0) 0
+ primary-for QLayout (0x0x7f4fc3c99540)
+ QLayoutItem (0x0x7f4fc3d14300) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f4fc3d14660) 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 (0x0x7f4fc3cfb138) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7f4fc3cfb1a0) 0
+ primary-for QStackedWidget (0x0x7f4fc3cfb138)
+ QWidget (0x0x7f4fc3c99690) 0
+ primary-for QFrame (0x0x7f4fc3cfb1a0)
+ QObject (0x0x7f4fc3d145a0) 0
+ primary-for QWidget (0x0x7f4fc3c99690)
+ QPaintDevice (0x0x7f4fc3d14600) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f4fc3d148a0) 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 (0x0x7f4fc3cfb208) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7f4fc3c99700) 0
+ primary-for QStatusBar (0x0x7f4fc3cfb208)
+ QObject (0x0x7f4fc3d147e0) 0
+ primary-for QWidget (0x0x7f4fc3c99700)
+ QPaintDevice (0x0x7f4fc3d14840) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f4fc3d14a80) 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 (0x0x7f4fc3cfb270) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f4fc3cfb2d8) 0
+ primary-for QStyledItemDelegate (0x0x7f4fc3cfb270)
+ QObject (0x0x7f4fc3d14a20) 0
+ primary-for QAbstractItemDelegate (0x0x7f4fc3cfb2d8)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f4fc3d14c00) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f4fc3cfb340) 0
+ QPainter (0x0x7f4fc3d14c60) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f4fc3d7f4e0) 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 (0x0x7f4fc3cfb3a8) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7f4fc3d7f480) 0
+ primary-for QStylePlugin (0x0x7f4fc3cfb3a8)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f4fc3d7f600) 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 (0x0x7f4fc3cfb410) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7f4fc3d7f5a0) 0
+ primary-for QSystemTrayIcon (0x0x7f4fc3cfb410)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f4fc3d7f900) 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 (0x0x7f4fc3cfb478) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7f4fc3cfb4e0) 0
+ primary-for QTableView (0x0x7f4fc3cfb478)
+ QAbstractScrollArea (0x0x7f4fc3cfb548) 0
+ primary-for QAbstractItemView (0x0x7f4fc3cfb4e0)
+ QFrame (0x0x7f4fc3cfb5b0) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc3cfb548)
+ QWidget (0x0x7f4fc3c99c40) 0
+ primary-for QFrame (0x0x7f4fc3cfb5b0)
+ QObject (0x0x7f4fc3d7f840) 0
+ primary-for QWidget (0x0x7f4fc3c99c40)
+ QPaintDevice (0x0x7f4fc3d7f8a0) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f4fc3d7fa80) 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 (0x0x7f4fc3d7ff60) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f4fc3a6c360) 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 (0x0x7f4fc3cfbea0) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7f4fc3cfbf08) 0
+ primary-for QTableWidget (0x0x7f4fc3cfbea0)
+ QAbstractItemView (0x0x7f4fc3cfbf70) 0
+ primary-for QTableView (0x0x7f4fc3cfbf08)
+ QAbstractScrollArea (0x0x7f4fc3cfbe38) 0
+ primary-for QAbstractItemView (0x0x7f4fc3cfbf70)
+ QFrame (0x0x7f4fc3a75000) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc3cfbe38)
+ QWidget (0x0x7f4fc3c99e70) 0
+ primary-for QFrame (0x0x7f4fc3a75000)
+ QObject (0x0x7f4fc3a6c2a0) 0
+ primary-for QWidget (0x0x7f4fc3c99e70)
+ QPaintDevice (0x0x7f4fc3a6c300) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f4fc3a6c720) 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 (0x0x7f4fc3a75068) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7f4fc3a750d0) 0
+ primary-for QTextBrowser (0x0x7f4fc3a75068)
+ QAbstractScrollArea (0x0x7f4fc3a75138) 0
+ primary-for QTextEdit (0x0x7f4fc3a750d0)
+ QFrame (0x0x7f4fc3a751a0) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc3a75138)
+ QWidget (0x0x7f4fc3c99ee0) 0
+ primary-for QFrame (0x0x7f4fc3a751a0)
+ QObject (0x0x7f4fc3a6c660) 0
+ primary-for QWidget (0x0x7f4fc3c99ee0)
+ QPaintDevice (0x0x7f4fc3a6c6c0) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f4fc3a6c960) 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 (0x0x7f4fc3a75208) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7f4fc3c99f50) 0
+ primary-for QToolBar (0x0x7f4fc3a75208)
+ QObject (0x0x7f4fc3a6c8a0) 0
+ primary-for QWidget (0x0x7f4fc3c99f50)
+ QPaintDevice (0x0x7f4fc3a6c900) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f4fc3a6cc60) 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 (0x0x7f4fc3a75270) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7f4fc3a752d8) 0
+ primary-for QToolBox (0x0x7f4fc3a75270)
+ QWidget (0x0x7f4fc3adb000) 0
+ primary-for QFrame (0x0x7f4fc3a752d8)
+ QObject (0x0x7f4fc3a6cba0) 0
+ primary-for QWidget (0x0x7f4fc3adb000)
+ QPaintDevice (0x0x7f4fc3a6cc00) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f4fc3af5000) 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 (0x0x7f4fc3a75340) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7f4fc3a753a8) 0
+ primary-for QToolButton (0x0x7f4fc3a75340)
+ QWidget (0x0x7f4fc3adb070) 0
+ primary-for QAbstractButton (0x0x7f4fc3a753a8)
+ QObject (0x0x7f4fc3a6cf00) 0
+ primary-for QWidget (0x0x7f4fc3adb070)
+ QPaintDevice (0x0x7f4fc3a6cf60) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f4fc3af5240) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f4fc3af53c0) 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 (0x0x7f4fc3a75410) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7f4fc3a75478) 0
+ primary-for QTreeView (0x0x7f4fc3a75410)
+ QAbstractScrollArea (0x0x7f4fc3a754e0) 0
+ primary-for QAbstractItemView (0x0x7f4fc3a75478)
+ QFrame (0x0x7f4fc3a75548) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc3a754e0)
+ QWidget (0x0x7f4fc3adb230) 0
+ primary-for QFrame (0x0x7f4fc3a75548)
+ QObject (0x0x7f4fc3af5300) 0
+ primary-for QWidget (0x0x7f4fc3adb230)
+ QPaintDevice (0x0x7f4fc3af5360) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f4fc3af5540) 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 (0x0x7f4fc3af5d80) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f4fc38ccc60) 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 (0x0x7f4fc38338f0) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7f4fc3833958) 0
+ primary-for QTreeWidget (0x0x7f4fc38338f0)
+ QAbstractItemView (0x0x7f4fc38339c0) 0
+ primary-for QTreeView (0x0x7f4fc3833958)
+ QAbstractScrollArea (0x0x7f4fc3833a28) 0
+ primary-for QAbstractItemView (0x0x7f4fc38339c0)
+ QFrame (0x0x7f4fc3833a90) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc3833a28)
+ QWidget (0x0x7f4fc3adbb60) 0
+ primary-for QFrame (0x0x7f4fc3833a90)
+ QObject (0x0x7f4fc38ccba0) 0
+ primary-for QWidget (0x0x7f4fc3adbb60)
+ QPaintDevice (0x0x7f4fc38ccc00) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f4fc393e0c0) 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 (0x0x7f4fc3833af8) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7f4fc3833b60) 0
+ primary-for QUndoView (0x0x7f4fc3833af8)
+ QAbstractItemView (0x0x7f4fc3833bc8) 0
+ primary-for QListView (0x0x7f4fc3833b60)
+ QAbstractScrollArea (0x0x7f4fc3833c30) 0
+ primary-for QAbstractItemView (0x0x7f4fc3833bc8)
+ QFrame (0x0x7f4fc3833c98) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc3833c30)
+ QWidget (0x0x7f4fc393d000) 0
+ primary-for QFrame (0x0x7f4fc3833c98)
+ QObject (0x0x7f4fc393e000) 0
+ primary-for QWidget (0x0x7f4fc393d000)
+ QPaintDevice (0x0x7f4fc393e060) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f4fc393e240) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f4fc393e300) 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 (0x0x7f4fc3833d00) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7f4fc3833d68) 0
+ primary-for QWidgetAction (0x0x7f4fc3833d00)
+ QObject (0x0x7f4fc393e2a0) 0
+ primary-for QAction (0x0x7f4fc3833d68)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f4fc393e540) 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 (0x0x7f4fc3833dd0) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7f4fc3833e38) 0
+ primary-for QWizard (0x0x7f4fc3833dd0)
+ QWidget (0x0x7f4fc393d070) 0
+ primary-for QDialog (0x0x7f4fc3833e38)
+ QObject (0x0x7f4fc393e480) 0
+ primary-for QWidget (0x0x7f4fc393d070)
+ QPaintDevice (0x0x7f4fc393e4e0) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f4fc393ee40) 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 (0x0x7f4fc3833000) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7f4fc39672a0) 0
+ primary-for QWizardPage (0x0x7f4fc3833000)
+ QObject (0x0x7f4fc393ed80) 0
+ primary-for QWidget (0x0x7f4fc39672a0)
+ QPaintDevice (0x0x7f4fc393ede0) 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 (0x0x7f4fc35fe000) 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 (0x0x7f4fc3631180) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface) + 16)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f4fc36315a0) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f4fc36856c0) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f4fc373bf00) 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 (0x0x7f4fc372faf8) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7f4fc373bea0) 0
+ primary-for QOpenGLDebugLogger (0x0x7f4fc372faf8)
+
+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 (0x0x7f4fc3473cc0) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f4fc3473f60) 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 (0x0x7f4fc3483208) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7f4fc34c8000) 0
+ primary-for QOpenGLPaintDevice (0x0x7f4fc3483208)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f4fc34c8240) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f4fc35169c0) 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 (0x0x7f4fc351bc98) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7f4fc3516960) 0
+ primary-for QOpenGLShader (0x0x7f4fc351bc98)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f4fc319e060) 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 (0x0x7f4fc351be38) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7f4fc319e000) 0
+ primary-for QOpenGLShaderProgram (0x0x7f4fc351be38)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f4fc319e1e0) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f4fc325f480) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f4fc325f6c0) 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 (0x0x7f4fc32d7000) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7f4fc325f660) 0
+ primary-for QOpenGLTimerQuery (0x0x7f4fc32d7000)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f4fc325f8a0) 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 (0x0x7f4fc32d7068) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7f4fc325f840) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f4fc32d7068)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f4fc325fa20) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f4fc2fb1900) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f4fc2fb1ae0) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f4fc2fb1b40) 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 (0x0x7f4fc2fb1d20) 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 (0x0x7f4fc2fb1f00) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f4fc339d7b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc2fb1ea0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f4fc2fed2a0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f4fc339d820) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc2fed240) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f4fc2fed600) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f4fc339d888) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc2fed5a0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f4fc2fed960) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f4fc339d8f0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc2fed900) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f4fc2fedcc0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f4fc339d958) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc2fedc60) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f4fc301b060) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f4fc339d9c0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc301b000) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f4fc301b3c0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f4fc339da28) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc301b360) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f4fc301b720) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f4fc339da90) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc301b6c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f4fc301ba80) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f4fc339daf8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc301ba20) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f4fc301bde0) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f4fc339db60) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc301bd80) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f4fc3069180) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f4fc339dbc8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc3069120) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f4fc30694e0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f4fc339dc30) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc3069480) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f4fc3069840) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f4fc339dc98) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc30697e0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f4fc3069ba0) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f4fc339dd00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc3069b40) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f4fc3069f00) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f4fc339dd68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc3069ea0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f4fc30bd2a0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f4fc339ddd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc30bd240) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f4fc30bd600) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f4fc339de38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc30bd5a0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f4fc30bd960) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f4fc339dea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc30bd900) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f4fc30bdcc0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f4fc339df08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc30bdc60) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f4fc3144060) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f4fc339df70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc3144000) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f4fc31443c0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f4fc314b000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc3144360) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f4fc3144720) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f4fc314b068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc31446c0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f4fc3144a80) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f4fc314b0d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc3144a20) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f4fc3144de0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f4fc314b138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc3144d80) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f4fc3183180) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f4fc314b1a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc3183120) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f4fc31834e0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f4fc314b208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc3183480) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f4fc3183840) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f4fc314b270) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f4fc31837e0) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f4fc3183b40) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f4fc3183cc0) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f4fc3183de0) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f4fc3183e40) 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 (0x0x7f4fc314b2d8) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7f4fc3183d80) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f4fc314b2d8)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f4fc2dc24e0) 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 (0x0x7f4fc314b3a8) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7f4fc2fd1230) 0
+ primary-for QOpenGLWindow (0x0x7f4fc314b3a8)
+ QWindow (0x0x7f4fc2fd12a0) 0
+ primary-for QPaintDeviceWindow (0x0x7f4fc2fd1230)
+ QObject (0x0x7f4fc2dc23c0) 0
+ primary-for QWindow (0x0x7f4fc2fd12a0)
+ QSurface (0x0x7f4fc2dc2420) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7f4fc2dc2480) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7f4fc2dc2720) 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 (0x0x7f4fc314b478) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+ QWidget (0x0x7f4fc2fd1460) 0
+ primary-for QOpenGLWidget (0x0x7f4fc314b478)
+ QObject (0x0x7f4fc2dc2660) 0
+ primary-for QWidget (0x0x7f4fc2fd1460)
+ QPaintDevice (0x0x7f4fc2dc26c0) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QDesignerActionEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerActionEditorInterface::QPrivateSignal (0x0x7f4fc2dc2ae0) 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 (0x0x7f4fc314b548) 0
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 16)
+ QWidget (0x0x7f4fc2fd1690) 0
+ primary-for QDesignerActionEditorInterface (0x0x7f4fc314b548)
+ QObject (0x0x7f4fc2dc2a20) 0
+ primary-for QWidget (0x0x7f4fc2fd1690)
+ QPaintDevice (0x0x7f4fc2dc2a80) 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 (0x0x7f4fc2dc2ba0) 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 (0x0x7f4fc2dc2c00) 0
+ vptr=((& QAbstractFormBuilder::_ZTV20QAbstractFormBuilder) + 16)
+
+Class QDesignerFormEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormEditorInterface::QPrivateSignal (0x0x7f4fc2dc2e40) 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 (0x0x7f4fc314b5b0) 0
+ vptr=((& QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface) + 16)
+ QObject (0x0x7f4fc2dc2de0) 0
+ primary-for QDesignerFormEditorInterface (0x0x7f4fc314b5b0)
+
+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 (0x0x7f4fc2dc2f60) 0 nearly-empty
+ vptr=((& QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface) + 16)
+
+Class QDesignerFormWindowInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowInterface::QPrivateSignal (0x0x7f4fc2e64420) 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 (0x0x7f4fc314b6e8) 0
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 16)
+ QWidget (0x0x7f4fc2fd17e0) 0
+ primary-for QDesignerFormWindowInterface (0x0x7f4fc314b6e8)
+ QObject (0x0x7f4fc2e64360) 0
+ primary-for QWidget (0x0x7f4fc2fd17e0)
+ QPaintDevice (0x0x7f4fc2e643c0) 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 (0x0x7f4fc2e645a0) 0 nearly-empty
+ vptr=((& QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface) + 16)
+
+Class QDesignerFormWindowManagerInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowManagerInterface::QPrivateSignal (0x0x7f4fc2e64660) 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 (0x0x7f4fc314b750) 0
+ vptr=((& QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface) + 16)
+ QObject (0x0x7f4fc2e64600) 0
+ primary-for QDesignerFormWindowManagerInterface (0x0x7f4fc314b750)
+
+Class QDesignerFormWindowToolInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowToolInterface::QPrivateSignal (0x0x7f4fc2e64960) 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 (0x0x7f4fc314b7b8) 0
+ vptr=((& QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface) + 16)
+ QObject (0x0x7f4fc2e64900) 0
+ primary-for QDesignerFormWindowToolInterface (0x0x7f4fc314b7b8)
+
+Class QDesignerIntegrationInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegrationInterface::QPrivateSignal (0x0x7f4fc2e64b40) 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 (0x0x7f4fc314b820) 0
+ vptr=((& QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface) + 16)
+ QObject (0x0x7f4fc2e64ae0) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f4fc314b820)
+
+Class QDesignerIntegration::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegration::QPrivateSignal (0x0x7f4fc2e64d80) 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 (0x0x7f4fc314b888) 0
+ vptr=((& QDesignerIntegration::_ZTV20QDesignerIntegration) + 16)
+ QDesignerIntegrationInterface (0x0x7f4fc314b8f0) 0
+ primary-for QDesignerIntegration (0x0x7f4fc314b888)
+ QObject (0x0x7f4fc2e64d20) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f4fc314b8f0)
+
+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 (0x0x7f4fc2e64ea0) 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 (0x0x7f4fc2efe2a0) 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 (0x0x7f4fc2efe6c0) 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 (0x0x7f4fc2efeae0) 0 nearly-empty
+ vptr=((& QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface) + 16)
+
+Class QDesignerMetaDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerMetaDataBaseInterface::QPrivateSignal (0x0x7f4fc2efeba0) 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 (0x0x7f4fc314bc30) 0
+ vptr=((& QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface) + 16)
+ QObject (0x0x7f4fc2efeb40) 0
+ primary-for QDesignerMetaDataBaseInterface (0x0x7f4fc314bc30)
+
+Class QDesignerNewFormWidgetInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerNewFormWidgetInterface::QPrivateSignal (0x0x7f4fc2efed20) 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 (0x0x7f4fc314bc98) 0
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 16)
+ QWidget (0x0x7f4fc2e94d20) 0
+ primary-for QDesignerNewFormWidgetInterface (0x0x7f4fc314bc98)
+ QObject (0x0x7f4fc2efec60) 0
+ primary-for QWidget (0x0x7f4fc2e94d20)
+ QPaintDevice (0x0x7f4fc2efecc0) 16
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 464)
+
+Class QDesignerObjectInspectorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerObjectInspectorInterface::QPrivateSignal (0x0x7f4fc2efeea0) 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 (0x0x7f4fc314bd00) 0
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 16)
+ QWidget (0x0x7f4fc2e94d90) 0
+ primary-for QDesignerObjectInspectorInterface (0x0x7f4fc314bd00)
+ QObject (0x0x7f4fc2efede0) 0
+ primary-for QWidget (0x0x7f4fc2e94d90)
+ QPaintDevice (0x0x7f4fc2efee40) 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 (0x0x7f4fc2efef60) 0 nearly-empty
+ vptr=((& QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface) + 16)
+
+Class QDesignerPromotionInterface::PromotedClass
+ size=16 align=8
+ base size=16 base align=8
+QDesignerPromotionInterface::PromotedClass (0x0x7f4fc2f4e060) 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 (0x0x7f4fc2f4e000) 0 nearly-empty
+ vptr=((& QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface) + 16)
+
+Class QDesignerPropertyEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerPropertyEditorInterface::QPrivateSignal (0x0x7f4fc2f4e180) 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 (0x0x7f4fc314bd68) 0
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 16)
+ QWidget (0x0x7f4fc2e94e00) 0
+ primary-for QDesignerPropertyEditorInterface (0x0x7f4fc314bd68)
+ QObject (0x0x7f4fc2f4e0c0) 0
+ primary-for QWidget (0x0x7f4fc2e94e00)
+ QPaintDevice (0x0x7f4fc2f4e120) 16
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 504)
+
+Class QDesignerResourceBrowserInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerResourceBrowserInterface::QPrivateSignal (0x0x7f4fc2f4e300) 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 (0x0x7f4fc314bdd0) 0
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 16)
+ QWidget (0x0x7f4fc2e94e70) 0
+ primary-for QDesignerResourceBrowserInterface (0x0x7f4fc314bdd0)
+ QObject (0x0x7f4fc2f4e240) 0
+ primary-for QWidget (0x0x7f4fc2e94e70)
+ QPaintDevice (0x0x7f4fc2f4e2a0) 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 (0x0x7f4fc2f4e3c0) 0 nearly-empty
+ vptr=((& QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface) + 16)
+
+Class QDesignerWidgetBoxInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetBoxInterface::QPrivateSignal (0x0x7f4fc2f4e4e0) 0 empty
+
+Class QDesignerWidgetBoxInterface::Widget
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetBoxInterface::Widget (0x0x7f4fc2f4e540) 0
+
+Class QDesignerWidgetBoxInterface::Category
+ size=56 align=8
+ base size=56 base align=8
+QDesignerWidgetBoxInterface::Category (0x0x7f4fc2f4e600) 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 (0x0x7f4fc314be38) 0
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 16)
+ QWidget (0x0x7f4fc2e94ee0) 0
+ primary-for QDesignerWidgetBoxInterface (0x0x7f4fc314be38)
+ QObject (0x0x7f4fc2f4e420) 0
+ primary-for QWidget (0x0x7f4fc2e94ee0)
+ QPaintDevice (0x0x7f4fc2f4e480) 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 (0x0x7f4fc2c893c0) 0 nearly-empty
+ vptr=((& QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface) + 16)
+
+Class QDesignerWidgetDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetDataBaseInterface::QPrivateSignal (0x0x7f4fc2c894e0) 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 (0x0x7f4fc2c8d7b8) 0
+ vptr=((& QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface) + 16)
+ QObject (0x0x7f4fc2c89480) 0
+ primary-for QDesignerWidgetDataBaseInterface (0x0x7f4fc2c8d7b8)
+
+Class QDesignerWidgetFactoryInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetFactoryInterface::QPrivateSignal (0x0x7f4fc2c89ea0) 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 (0x0x7f4fc2c8df70) 0
+ vptr=((& QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface) + 16)
+ QObject (0x0x7f4fc2c89e40) 0
+ primary-for QDesignerWidgetFactoryInterface (0x0x7f4fc2c8df70)
+
+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 (0x0x7f4fc2c89f60) 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 (0x0x7f4fc2d26360) 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 (0x0x7f4fc2d267e0) 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 (0x0x7f4fc2d273a8) 0
+ vptr=((& QFormBuilder::_ZTV12QFormBuilder) + 16)
+ QAbstractFormBuilder (0x0x7f4fc2d26c00) 0
+ primary-for QFormBuilder (0x0x7f4fc2d273a8)
+
+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 (0x0x7f4fc2d26c60) 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 (0x0x7f4fc2d730c0) 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 (0x0x7f4fc2d734e0) 0 nearly-empty
+ vptr=((& QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension) + 16)
+
+Class QExtensionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QExtensionManager::QPrivateSignal (0x0x7f4fc2d739c0) 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 (0x0x7f4fc2f7ca80) 0
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 16)
+ QObject (0x0x7f4fc2d73900) 0
+ primary-for QExtensionManager (0x0x7f4fc2f7ca80)
+ QAbstractExtensionManager (0x0x7f4fc2d73960) 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 (0x0x7f4fc29d9480) 0 nearly-empty
+ vptr=((& QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension) + 16)
+
+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 (0x0x7f4fc29d9d20) 0 nearly-empty
+ vptr=((& QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase) + 16)
+
+Class QSqlDatabase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDatabase (0x0x7f4fc2ab3000) 0
+
+Class QSqlDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriver::QPrivateSignal (0x0x7f4fc2ab30c0) 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 (0x0x7f4fc2a46208) 0
+ vptr=((& QSqlDriver::_ZTV10QSqlDriver) + 16)
+ QObject (0x0x7f4fc2ab3060) 0
+ primary-for QSqlDriver (0x0x7f4fc2a46208)
+
+Class QSqlDriverPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriverPlugin::QPrivateSignal (0x0x7f4fc2ab32a0) 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 (0x0x7f4fc2a46270) 0
+ vptr=((& QSqlDriverPlugin::_ZTV16QSqlDriverPlugin) + 16)
+ QObject (0x0x7f4fc2ab3240) 0
+ primary-for QSqlDriverPlugin (0x0x7f4fc2a46270)
+
+Class QSqlError
+ size=8 align=8
+ base size=8 base align=8
+QSqlError (0x0x7f4fc2ab3360) 0
+
+Class QSqlField
+ size=40 align=8
+ base size=40 base align=8
+QSqlField (0x0x7f4fc2b0aea0) 0
+
+Class QSqlRecord
+ size=8 align=8
+ base size=8 base align=8
+QSqlRecord (0x0x7f4fc2b362a0) 0
+
+Class QSqlIndex
+ size=80 align=8
+ base size=80 base align=8
+QSqlIndex (0x0x7f4fc2b0ed68) 0
+ QSqlRecord (0x0x7f4fc2b36360) 0
+
+Class QSqlQuery
+ size=8 align=8
+ base size=8 base align=8
+QSqlQuery (0x0x7f4fc2b368a0) 0
+
+Class QSqlQueryModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlQueryModel::QPrivateSignal (0x0x7f4fc2b36c60) 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 (0x0x7f4fc2b621a0) 0
+ vptr=((& QSqlQueryModel::_ZTV14QSqlQueryModel) + 16)
+ QAbstractTableModel (0x0x7f4fc2b62208) 0
+ primary-for QSqlQueryModel (0x0x7f4fc2b621a0)
+ QAbstractItemModel (0x0x7f4fc2b62270) 0
+ primary-for QAbstractTableModel (0x0x7f4fc2b62208)
+ QObject (0x0x7f4fc2b36c00) 0
+ primary-for QAbstractItemModel (0x0x7f4fc2b62270)
+
+Class QSqlTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlTableModel::QPrivateSignal (0x0x7f4fc2b36e40) 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 (0x0x7f4fc2b622d8) 0
+ vptr=((& QSqlTableModel::_ZTV14QSqlTableModel) + 16)
+ QSqlQueryModel (0x0x7f4fc2b62340) 0
+ primary-for QSqlTableModel (0x0x7f4fc2b622d8)
+ QAbstractTableModel (0x0x7f4fc2b623a8) 0
+ primary-for QSqlQueryModel (0x0x7f4fc2b62340)
+ QAbstractItemModel (0x0x7f4fc2b62410) 0
+ primary-for QAbstractTableModel (0x0x7f4fc2b623a8)
+ QObject (0x0x7f4fc2b36de0) 0
+ primary-for QAbstractItemModel (0x0x7f4fc2b62410)
+
+Class QSqlRelation
+ size=72 align=8
+ base size=72 base align=8
+QSqlRelation (0x0x7f4fc2b36720) 0
+
+Class QSqlRelationalTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlRelationalTableModel::QPrivateSignal (0x0x7f4fc281fd80) 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 (0x0x7f4fc283a068) 0
+ vptr=((& QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel) + 16)
+ QSqlTableModel (0x0x7f4fc283a0d0) 0
+ primary-for QSqlRelationalTableModel (0x0x7f4fc283a068)
+ QSqlQueryModel (0x0x7f4fc283a138) 0
+ primary-for QSqlTableModel (0x0x7f4fc283a0d0)
+ QAbstractTableModel (0x0x7f4fc283a1a0) 0
+ primary-for QSqlQueryModel (0x0x7f4fc283a138)
+ QAbstractItemModel (0x0x7f4fc283a208) 0
+ primary-for QAbstractTableModel (0x0x7f4fc283a1a0)
+ QObject (0x0x7f4fc281fd20) 0
+ primary-for QAbstractItemModel (0x0x7f4fc283a208)
+
+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 (0x0x7f4fc281ff00) 0
+ vptr=((& QSqlResult::_ZTV10QSqlResult) + 16)
+
+Class QHelpGlobal
+ size=1 align=1
+ base size=0 base align=1
+QHelpGlobal (0x0x7f4fc2863060) 0 empty
+
+Class QCompressedHelpInfo
+ size=8 align=8
+ base size=8 base align=8
+QCompressedHelpInfo (0x0x7f4fc28630c0) 0
+
+Class QHelpContentItem
+ size=8 align=8
+ base size=8 base align=8
+QHelpContentItem (0x0x7f4fc28631e0) 0
+
+Class QHelpContentModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentModel::QPrivateSignal (0x0x7f4fc28632a0) 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 (0x0x7f4fc283a270) 0
+ vptr=((& QHelpContentModel::_ZTV17QHelpContentModel) + 16)
+ QAbstractItemModel (0x0x7f4fc283a2d8) 0
+ primary-for QHelpContentModel (0x0x7f4fc283a270)
+ QObject (0x0x7f4fc2863240) 0
+ primary-for QAbstractItemModel (0x0x7f4fc283a2d8)
+
+Class QHelpContentWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentWidget::QPrivateSignal (0x0x7f4fc2863420) 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 (0x0x7f4fc283a340) 0
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 16)
+ QTreeView (0x0x7f4fc283a3a8) 0
+ primary-for QHelpContentWidget (0x0x7f4fc283a340)
+ QAbstractItemView (0x0x7f4fc283a410) 0
+ primary-for QTreeView (0x0x7f4fc283a3a8)
+ QAbstractScrollArea (0x0x7f4fc283a478) 0
+ primary-for QAbstractItemView (0x0x7f4fc283a410)
+ QFrame (0x0x7f4fc283a4e0) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc283a478)
+ QWidget (0x0x7f4fc2838310) 0
+ primary-for QFrame (0x0x7f4fc283a4e0)
+ QObject (0x0x7f4fc2863360) 0
+ primary-for QWidget (0x0x7f4fc2838310)
+ QPaintDevice (0x0x7f4fc28633c0) 16
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 816)
+
+Class QHelpEngineCore::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngineCore::QPrivateSignal (0x0x7f4fc2863540) 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 (0x0x7f4fc283a548) 0
+ vptr=((& QHelpEngineCore::_ZTV15QHelpEngineCore) + 16)
+ QObject (0x0x7f4fc28634e0) 0
+ primary-for QHelpEngineCore (0x0x7f4fc283a548)
+
+Class QHelpEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngine::QPrivateSignal (0x0x7f4fc2863660) 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 (0x0x7f4fc283a5b0) 0
+ vptr=((& QHelpEngine::_ZTV11QHelpEngine) + 16)
+ QHelpEngineCore (0x0x7f4fc283a618) 0
+ primary-for QHelpEngine (0x0x7f4fc283a5b0)
+ QObject (0x0x7f4fc2863600) 0
+ primary-for QHelpEngineCore (0x0x7f4fc283a618)
+
+Class QHelpFilterData
+ size=8 align=8
+ base size=8 base align=8
+QHelpFilterData (0x0x7f4fc2863720) 0
+
+Class QHelpFilterEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterEngine::QPrivateSignal (0x0x7f4fc28638a0) 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 (0x0x7f4fc283a680) 0
+ vptr=((& QHelpFilterEngine::_ZTV17QHelpFilterEngine) + 16)
+ QObject (0x0x7f4fc2863840) 0
+ primary-for QHelpFilterEngine (0x0x7f4fc283a680)
+
+Class QHelpFilterSettingsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterSettingsWidget::QPrivateSignal (0x0x7f4fc2863a20) 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 (0x0x7f4fc283a6e8) 0
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 16)
+ QWidget (0x0x7f4fc2838380) 0
+ primary-for QHelpFilterSettingsWidget (0x0x7f4fc283a6e8)
+ QObject (0x0x7f4fc2863960) 0
+ primary-for QWidget (0x0x7f4fc2838380)
+ QPaintDevice (0x0x7f4fc28639c0) 16
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 448)
+
+Class QHelpIndexModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexModel::QPrivateSignal (0x0x7f4fc2863cc0) 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 (0x0x7f4fc283a750) 0
+ vptr=((& QHelpIndexModel::_ZTV15QHelpIndexModel) + 16)
+ QStringListModel (0x0x7f4fc283a7b8) 0
+ primary-for QHelpIndexModel (0x0x7f4fc283a750)
+ QAbstractListModel (0x0x7f4fc283a820) 0
+ primary-for QStringListModel (0x0x7f4fc283a7b8)
+ QAbstractItemModel (0x0x7f4fc283a888) 0
+ primary-for QAbstractListModel (0x0x7f4fc283a820)
+ QObject (0x0x7f4fc2863c60) 0
+ primary-for QAbstractItemModel (0x0x7f4fc283a888)
+
+Class QHelpIndexWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexWidget::QPrivateSignal (0x0x7f4fc2863e40) 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 (0x0x7f4fc283a8f0) 0
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 16)
+ QListView (0x0x7f4fc283a958) 0
+ primary-for QHelpIndexWidget (0x0x7f4fc283a8f0)
+ QAbstractItemView (0x0x7f4fc283a9c0) 0
+ primary-for QListView (0x0x7f4fc283a958)
+ QAbstractScrollArea (0x0x7f4fc283aa28) 0
+ primary-for QAbstractItemView (0x0x7f4fc283a9c0)
+ QFrame (0x0x7f4fc283aa90) 0
+ primary-for QAbstractScrollArea (0x0x7f4fc283aa28)
+ QWidget (0x0x7f4fc28383f0) 0
+ primary-for QFrame (0x0x7f4fc283aa90)
+ QObject (0x0x7f4fc2863d80) 0
+ primary-for QWidget (0x0x7f4fc28383f0)
+ QPaintDevice (0x0x7f4fc2863de0) 16
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 800)
+
+Class QHelpLink
+ size=32 align=8
+ base size=32 base align=8
+QHelpLink (0x0x7f4fc2863f00) 0
+
+Class QHelpSearchQuery
+ size=32 align=8
+ base size=32 base align=8
+QHelpSearchQuery (0x0x7f4fc2863f60) 0
+
+Class QHelpSearchResult
+ size=8 align=8
+ base size=8 base align=8
+QHelpSearchResult (0x0x7f4fc291d780) 0
+
+Class QHelpSearchEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchEngine::QPrivateSignal (0x0x7f4fc291d8a0) 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 (0x0x7f4fc283ad68) 0
+ vptr=((& QHelpSearchEngine::_ZTV17QHelpSearchEngine) + 16)
+ QObject (0x0x7f4fc291d840) 0
+ primary-for QHelpSearchEngine (0x0x7f4fc283ad68)
+
+Class QHelpSearchQueryWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchQueryWidget::QPrivateSignal (0x0x7f4fc291da20) 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 (0x0x7f4fc283add0) 0
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 16)
+ QWidget (0x0x7f4fc2838770) 0
+ primary-for QHelpSearchQueryWidget (0x0x7f4fc283add0)
+ QObject (0x0x7f4fc291d960) 0
+ primary-for QWidget (0x0x7f4fc2838770)
+ QPaintDevice (0x0x7f4fc291d9c0) 16
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 448)
+
+Class QHelpSearchResultWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchResultWidget::QPrivateSignal (0x0x7f4fc291dba0) 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 (0x0x7f4fc283ae38) 0
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 16)
+ QWidget (0x0x7f4fc28387e0) 0
+ primary-for QHelpSearchResultWidget (0x0x7f4fc283ae38)
+ QObject (0x0x7f4fc291dae0) 0
+ primary-for QWidget (0x0x7f4fc28387e0)
+ QPaintDevice (0x0x7f4fc291db40) 16
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 448)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f4fc291dc60) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f4fc25fe5a0) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f4fc265bf60) 0 empty
+
+Vtable for QAbstractNetworkCache
+QAbstractNetworkCache::_ZTV21QAbstractNetworkCache: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractNetworkCache)
+16 (int (*)(...))QAbstractNetworkCache::metaObject
+24 (int (*)(...))QAbstractNetworkCache::qt_metacast
+32 (int (*)(...))QAbstractNetworkCache::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
+
+Class QAbstractNetworkCache
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNetworkCache (0x0x7f4fc266a8f0) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+ QObject (0x0x7f4fc265bf00) 0
+ primary-for QAbstractNetworkCache (0x0x7f4fc266a8f0)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f4fc26861e0) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSocket)
+16 (int (*)(...))QAbstractSocket::metaObject
+24 (int (*)(...))QAbstractSocket::qt_metacast
+32 (int (*)(...))QAbstractSocket::qt_metacall
+40 (int (*)(...))QAbstractSocket::~QAbstractSocket
+48 (int (*)(...))QAbstractSocket::~QAbstractSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7f4fc266a958) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+ QIODevice (0x0x7f4fc2970f50) 0
+ primary-for QAbstractSocket (0x0x7f4fc266a958)
+ QObject (0x0x7f4fc2686120) 0
+ primary-for QIODevice (0x0x7f4fc2970f50)
+ QIODeviceBase (0x0x7f4fc2686180) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f4fc23fed80) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f4fc23fee40) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f4fc2475780) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f4fc24cc0c0) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f4fc25079c0) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f4fc255a600) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f4fc21ab360) 0 empty
+
+Vtable for QDnsLookup
+QDnsLookup::_ZTV10QDnsLookup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDnsLookup)
+16 (int (*)(...))QDnsLookup::metaObject
+24 (int (*)(...))QDnsLookup::qt_metacast
+32 (int (*)(...))QDnsLookup::qt_metacall
+40 (int (*)(...))QDnsLookup::~QDnsLookup
+48 (int (*)(...))QDnsLookup::~QDnsLookup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDnsLookup
+ size=16 align=8
+ base size=16 base align=8
+QDnsLookup (0x0x7f4fc21a4750) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+ QObject (0x0x7f4fc21ab300) 0
+ primary-for QDnsLookup (0x0x7f4fc21a4750)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f4fc21ab660) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f4fc21ab780) 0
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f4fc2284840) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpSocket)
+16 (int (*)(...))QTcpSocket::metaObject
+24 (int (*)(...))QTcpSocket::qt_metacast
+32 (int (*)(...))QTcpSocket::qt_metacall
+40 (int (*)(...))QTcpSocket::~QTcpSocket
+48 (int (*)(...))QTcpSocket::~QTcpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7f4fc2288548) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+ QAbstractSocket (0x0x7f4fc22885b0) 0
+ primary-for QTcpSocket (0x0x7f4fc2288548)
+ QIODevice (0x0x7f4fc21b9a80) 0
+ primary-for QAbstractSocket (0x0x7f4fc22885b0)
+ QObject (0x0x7f4fc2284780) 0
+ primary-for QIODevice (0x0x7f4fc21b9a80)
+ QIODeviceBase (0x0x7f4fc22847e0) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f4fc2284ea0) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f4fc2377780) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f4fc1dc20c0) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslSocket)
+16 (int (*)(...))QSslSocket::metaObject
+24 (int (*)(...))QSslSocket::qt_metacast
+32 (int (*)(...))QSslSocket::qt_metacall
+40 (int (*)(...))QSslSocket::~QSslSocket
+48 (int (*)(...))QSslSocket::~QSslSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QSslSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QSslSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QSslSocket::bytesAvailable
+184 (int (*)(...))QSslSocket::bytesToWrite
+192 (int (*)(...))QSslSocket::canReadLine
+200 (int (*)(...))QSslSocket::waitForReadyRead
+208 (int (*)(...))QSslSocket::waitForBytesWritten
+216 (int (*)(...))QSslSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QSslSocket::skipData
+240 (int (*)(...))QSslSocket::writeData
+248 (int (*)(...))QSslSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QSslSocket::connectToHost
+272 (int (*)(...))QSslSocket::disconnectFromHost
+280 (int (*)(...))QSslSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QSslSocket::setSocketDescriptor
+304 (int (*)(...))QSslSocket::setSocketOption
+312 (int (*)(...))QSslSocket::socketOption
+320 (int (*)(...))QSslSocket::waitForConnected
+328 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7f4fc213ef08) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+ QTcpSocket (0x0x7f4fc213ef70) 0
+ primary-for QSslSocket (0x0x7f4fc213ef08)
+ QAbstractSocket (0x0x7f4fc213e270) 0
+ primary-for QTcpSocket (0x0x7f4fc213ef70)
+ QIODevice (0x0x7f4fc2140230) 0
+ primary-for QAbstractSocket (0x0x7f4fc213e270)
+ QObject (0x0x7f4fc1dc2000) 0
+ primary-for QIODevice (0x0x7f4fc2140230)
+ QIODeviceBase (0x0x7f4fc1dc2060) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f4fc1dc22a0) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f4fc1dc2300) 0
+
+Vtable for QDtlsClientVerifier
+QDtlsClientVerifier::_ZTV19QDtlsClientVerifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDtlsClientVerifier)
+16 (int (*)(...))QDtlsClientVerifier::metaObject
+24 (int (*)(...))QDtlsClientVerifier::qt_metacast
+32 (int (*)(...))QDtlsClientVerifier::qt_metacall
+40 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+48 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtlsClientVerifier
+ size=16 align=8
+ base size=16 base align=8
+QDtlsClientVerifier (0x0x7f4fc1dec000) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+ QObject (0x0x7f4fc1dc2240) 0
+ primary-for QDtlsClientVerifier (0x0x7f4fc1dec000)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f4fc1dc24e0) 0 empty
+
+Vtable for QDtls
+QDtls::_ZTV5QDtls: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDtls)
+16 (int (*)(...))QDtls::metaObject
+24 (int (*)(...))QDtls::qt_metacast
+32 (int (*)(...))QDtls::qt_metacall
+40 (int (*)(...))QDtls::~QDtls
+48 (int (*)(...))QDtls::~QDtls
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtls
+ size=16 align=8
+ base size=16 base align=8
+QDtls (0x0x7f4fc1dec068) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+ QObject (0x0x7f4fc1dc2480) 0
+ primary-for QDtls (0x0x7f4fc1dec068)
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f4fc1dc2660) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f4fc1e54e40) 0
+
+Class QHttp1Configuration::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QHttp1Configuration::ShortData (0x0x7f4fc1ebde40) 0
+
+Class QHttp1Configuration::U
+ size=8 align=8
+ base size=8 base align=8
+QHttp1Configuration::U (0x0x7f4fc1ebdea0) 0
+
+Class QHttp1Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp1Configuration (0x0x7f4fc1ebdde0) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7f4fc1ba6000) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f4fc1bdf9c0) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f4fc1c374e0) 0 empty
+
+Vtable for QHttpMultiPart
+QHttpMultiPart::_ZTV14QHttpMultiPart: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QHttpMultiPart)
+16 (int (*)(...))QHttpMultiPart::metaObject
+24 (int (*)(...))QHttpMultiPart::qt_metacast
+32 (int (*)(...))QHttpMultiPart::qt_metacall
+40 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+48 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHttpMultiPart
+ size=16 align=8
+ base size=16 base align=8
+QHttpMultiPart (0x0x7f4fc1c36478) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+ QObject (0x0x7f4fc1c37480) 0
+ primary-for QHttpMultiPart (0x0x7f4fc1c36478)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f4fc1c376c0) 0 empty
+
+Vtable for QLocalServer
+QLocalServer::_ZTV12QLocalServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalServer)
+16 (int (*)(...))QLocalServer::metaObject
+24 (int (*)(...))QLocalServer::qt_metacast
+32 (int (*)(...))QLocalServer::qt_metacall
+40 (int (*)(...))QLocalServer::~QLocalServer
+48 (int (*)(...))QLocalServer::~QLocalServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalServer::hasPendingConnections
+120 (int (*)(...))QLocalServer::nextPendingConnection
+128 (int (*)(...))QLocalServer::incomingConnection
+
+Class QLocalServer
+ size=16 align=8
+ base size=16 base align=8
+QLocalServer (0x0x7f4fc1c364e0) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+ QObject (0x0x7f4fc1c37660) 0
+ primary-for QLocalServer (0x0x7f4fc1c364e0)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f4fc1c37f00) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalSocket)
+16 (int (*)(...))QLocalSocket::metaObject
+24 (int (*)(...))QLocalSocket::qt_metacast
+32 (int (*)(...))QLocalSocket::qt_metacall
+40 (int (*)(...))QLocalSocket::~QLocalSocket
+48 (int (*)(...))QLocalSocket::~QLocalSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalSocket::isSequential
+120 (int (*)(...))QLocalSocket::open
+128 (int (*)(...))QLocalSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QLocalSocket::bytesAvailable
+184 (int (*)(...))QLocalSocket::bytesToWrite
+192 (int (*)(...))QLocalSocket::canReadLine
+200 (int (*)(...))QLocalSocket::waitForReadyRead
+208 (int (*)(...))QLocalSocket::waitForBytesWritten
+216 (int (*)(...))QLocalSocket::readData
+224 (int (*)(...))QLocalSocket::readLineData
+232 (int (*)(...))QLocalSocket::skipData
+240 (int (*)(...))QLocalSocket::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7f4fc1c36680) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+ QIODevice (0x0x7f4fc1bf0af0) 0
+ primary-for QLocalSocket (0x0x7f4fc1c36680)
+ QObject (0x0x7f4fc1c37e40) 0
+ primary-for QIODevice (0x0x7f4fc1bf0af0)
+ QIODeviceBase (0x0x7f4fc1c37ea0) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f4fc1cea600) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f4fc19ef480) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f4fc1a90ae0) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QNetworkAccessManager)
+16 (int (*)(...))QNetworkAccessManager::metaObject
+24 (int (*)(...))QNetworkAccessManager::qt_metacast
+32 (int (*)(...))QNetworkAccessManager::qt_metacall
+40 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+48 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkAccessManager::supportedSchemes
+120 (int (*)(...))QNetworkAccessManager::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7f4fc1a8e5b0) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+ QObject (0x0x7f4fc1a90a80) 0
+ primary-for QNetworkAccessManager (0x0x7f4fc1a8e5b0)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f4fc1a90c60) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f4fc1b45600) 0 empty
+
+Vtable for QNetworkCookieJar
+QNetworkCookieJar::_ZTV17QNetworkCookieJar: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkCookieJar)
+16 (int (*)(...))QNetworkCookieJar::metaObject
+24 (int (*)(...))QNetworkCookieJar::qt_metacast
+32 (int (*)(...))QNetworkCookieJar::qt_metacall
+40 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+48 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkCookieJar::cookiesForUrl
+120 (int (*)(...))QNetworkCookieJar::setCookiesFromUrl
+128 (int (*)(...))QNetworkCookieJar::insertCookie
+136 (int (*)(...))QNetworkCookieJar::updateCookie
+144 (int (*)(...))QNetworkCookieJar::deleteCookie
+152 (int (*)(...))QNetworkCookieJar::validateCookie
+
+Class QNetworkCookieJar
+ size=16 align=8
+ base size=16 base align=8
+QNetworkCookieJar (0x0x7f4fc1b33888) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+ QObject (0x0x7f4fc1b455a0) 0
+ primary-for QNetworkCookieJar (0x0x7f4fc1b33888)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f4fc1b45780) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f4fc17bc540) 0 empty
+
+Vtable for QNetworkDiskCache
+QNetworkDiskCache::_ZTV17QNetworkDiskCache: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkDiskCache)
+16 (int (*)(...))QNetworkDiskCache::metaObject
+24 (int (*)(...))QNetworkDiskCache::qt_metacast
+32 (int (*)(...))QNetworkDiskCache::qt_metacall
+40 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+48 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkDiskCache::metaData
+120 (int (*)(...))QNetworkDiskCache::updateMetaData
+128 (int (*)(...))QNetworkDiskCache::data
+136 (int (*)(...))QNetworkDiskCache::remove
+144 (int (*)(...))QNetworkDiskCache::cacheSize
+152 (int (*)(...))QNetworkDiskCache::prepare
+160 (int (*)(...))QNetworkDiskCache::insert
+168 (int (*)(...))QNetworkDiskCache::clear
+176 (int (*)(...))QNetworkDiskCache::expire
+
+Class QNetworkDiskCache
+ size=16 align=8
+ base size=16 base align=8
+QNetworkDiskCache (0x0x7f4fc17a5bc8) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+ QAbstractNetworkCache (0x0x7f4fc17a5c30) 0
+ primary-for QNetworkDiskCache (0x0x7f4fc17a5bc8)
+ QObject (0x0x7f4fc17bc4e0) 0
+ primary-for QAbstractNetworkCache (0x0x7f4fc17a5c30)
+
+Class QNetworkInformation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkInformation::QPrivateSignal (0x0x7f4fc17bc720) 0 empty
+
+Vtable for QNetworkInformation
+QNetworkInformation::_ZTV19QNetworkInformation: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNetworkInformation)
+16 (int (*)(...))QNetworkInformation::metaObject
+24 (int (*)(...))QNetworkInformation::qt_metacast
+32 (int (*)(...))QNetworkInformation::qt_metacall
+40 (int (*)(...))QNetworkInformation::~QNetworkInformation
+48 (int (*)(...))QNetworkInformation::~QNetworkInformation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkInformation
+ size=16 align=8
+ base size=16 base align=8
+QNetworkInformation (0x0x7f4fc17a5c98) 0
+ vptr=((& QNetworkInformation::_ZTV19QNetworkInformation) + 16)
+ QObject (0x0x7f4fc17bc6c0) 0
+ primary-for QNetworkInformation (0x0x7f4fc17a5c98)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f4fc17bcf60) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f4fc15f9300) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f4fc171e720) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f4fc178e180) 0
+
+Vtable for QNetworkProxyFactory
+QNetworkProxyFactory::_ZTV20QNetworkProxyFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QNetworkProxyFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNetworkProxyFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyFactory (0x0x7f4fc144f060) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f4fc144fc60) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QNetworkReply)
+16 (int (*)(...))QNetworkReply::metaObject
+24 (int (*)(...))QNetworkReply::qt_metacast
+32 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::writeData
+248 (int (*)(...))QNetworkReply::setReadBufferSize
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QNetworkReply::ignoreSslErrors
+272 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+288 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7f4fc145e270) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+ QIODevice (0x0x7f4fc13e5150) 0
+ primary-for QNetworkReply (0x0x7f4fc145e270)
+ QObject (0x0x7f4fc144fba0) 0
+ primary-for QIODevice (0x0x7f4fc13e5150)
+ QIODeviceBase (0x0x7f4fc144fc00) 0 empty
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7f4fc14dfa80) 0
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f4fc1574000) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f4fc11af720) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f4fc1343b40) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f4fc1392480) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f4fc0fd2de0) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f4fc103f8a0) 0 empty
+
+Vtable for QTcpServer
+QTcpServer::_ZTV10QTcpServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpServer)
+16 (int (*)(...))QTcpServer::metaObject
+24 (int (*)(...))QTcpServer::qt_metacast
+32 (int (*)(...))QTcpServer::qt_metacall
+40 (int (*)(...))QTcpServer::~QTcpServer
+48 (int (*)(...))QTcpServer::~QTcpServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QTcpServer::incomingConnection
+
+Class QTcpServer
+ size=16 align=8
+ base size=16 base align=8
+QTcpServer (0x0x7f4fc104c270) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+ QObject (0x0x7f4fc103f840) 0
+ primary-for QTcpServer (0x0x7f4fc104c270)
+
+Class QSslServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslServer::QPrivateSignal (0x0x7f4fc103fa80) 0 empty
+
+Vtable for QSslServer
+QSslServer::_ZTV10QSslServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslServer)
+16 (int (*)(...))QSslServer::metaObject
+24 (int (*)(...))QSslServer::qt_metacast
+32 (int (*)(...))QSslServer::qt_metacall
+40 (int (*)(...))QSslServer::~QSslServer
+48 (int (*)(...))QSslServer::~QSslServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QSslServer::incomingConnection
+
+Class QSslServer
+ size=16 align=8
+ base size=16 base align=8
+QSslServer (0x0x7f4fc104c2d8) 0
+ vptr=((& QSslServer::_ZTV10QSslServer) + 16)
+ QTcpServer (0x0x7f4fc104c340) 0
+ primary-for QSslServer (0x0x7f4fc104c2d8)
+ QObject (0x0x7f4fc103fa20) 0
+ primary-for QTcpServer (0x0x7f4fc104c340)
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f4fc103fcc0) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUdpSocket)
+16 (int (*)(...))QUdpSocket::metaObject
+24 (int (*)(...))QUdpSocket::qt_metacast
+32 (int (*)(...))QUdpSocket::qt_metacall
+40 (int (*)(...))QUdpSocket::~QUdpSocket
+48 (int (*)(...))QUdpSocket::~QUdpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7f4fc104c3a8) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+ QAbstractSocket (0x0x7f4fc104c410) 0
+ primary-for QUdpSocket (0x0x7f4fc104c3a8)
+ QIODevice (0x0x7f4fc1399a10) 0
+ primary-for QAbstractSocket (0x0x7f4fc104c410)
+ QObject (0x0x7f4fc103fc00) 0
+ primary-for QIODevice (0x0x7f4fc1399a10)
+ QIODeviceBase (0x0x7f4fc103fc60) 0 empty
+
+Class QAbstractPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractPrintDialog::QPrivateSignal (0x0x7f4fc108a000) 0 empty
+
+Vtable for QAbstractPrintDialog
+QAbstractPrintDialog::_ZTV20QAbstractPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAbstractPrintDialog)
+16 (int (*)(...))QAbstractPrintDialog::metaObject
+24 (int (*)(...))QAbstractPrintDialog::qt_metacast
+32 (int (*)(...))QAbstractPrintDialog::qt_metacall
+40 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+48 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+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 (*)(...))(& _ZTI20QAbstractPrintDialog)
+488 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD1Ev
+496 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD0Ev
+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 QAbstractPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QAbstractPrintDialog (0x0x7f4fc104c478) 0
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 16)
+ QDialog (0x0x7f4fc104c4e0) 0
+ primary-for QAbstractPrintDialog (0x0x7f4fc104c478)
+ QWidget (0x0x7f4fc1399a80) 0
+ primary-for QDialog (0x0x7f4fc104c4e0)
+ QObject (0x0x7f4fc103ff00) 0
+ primary-for QWidget (0x0x7f4fc1399a80)
+ QPaintDevice (0x0x7f4fc103ff60) 16
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 488)
+
+Class QPageSetupDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPageSetupDialog::QPrivateSignal (0x0x7f4fc108a840) 0 empty
+
+Vtable for QPageSetupDialog
+QPageSetupDialog::_ZTV16QPageSetupDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QPageSetupDialog)
+16 (int (*)(...))QPageSetupDialog::metaObject
+24 (int (*)(...))QPageSetupDialog::qt_metacast
+32 (int (*)(...))QPageSetupDialog::qt_metacall
+40 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+48 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+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 (*)(...))QPageSetupDialog::exec
+448 (int (*)(...))QPageSetupDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI16QPageSetupDialog)
+488 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD1Ev
+496 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD0Ev
+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 QPageSetupDialog
+ size=40 align=8
+ base size=40 base align=8
+QPageSetupDialog (0x0x7f4fc104c680) 0
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 16)
+ QDialog (0x0x7f4fc104c6e8) 0
+ primary-for QPageSetupDialog (0x0x7f4fc104c680)
+ QWidget (0x0x7f4fc1399f50) 0
+ primary-for QDialog (0x0x7f4fc104c6e8)
+ QObject (0x0x7f4fc108a780) 0
+ primary-for QWidget (0x0x7f4fc1399f50)
+ QPaintDevice (0x0x7f4fc108a7e0) 16
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 488)
+
+Class QPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintDialog::QPrivateSignal (0x0x7f4fc108aa80) 0 empty
+
+Vtable for QPrintDialog
+QPrintDialog::_ZTV12QPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintDialog)
+16 (int (*)(...))QPrintDialog::metaObject
+24 (int (*)(...))QPrintDialog::qt_metacast
+32 (int (*)(...))QPrintDialog::qt_metacall
+40 (int (*)(...))QPrintDialog::~QPrintDialog
+48 (int (*)(...))QPrintDialog::~QPrintDialog
+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 (*)(...))QPrintDialog::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 (*)(...))QPrintDialog::exec
+448 (int (*)(...))QPrintDialog::done
+456 (int (*)(...))QPrintDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QPrintDialog)
+488 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD1Ev
+496 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD0Ev
+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 QPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintDialog (0x0x7f4fc104c750) 0
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 16)
+ QAbstractPrintDialog (0x0x7f4fc104c7b8) 0
+ primary-for QPrintDialog (0x0x7f4fc104c750)
+ QDialog (0x0x7f4fc104c820) 0
+ primary-for QAbstractPrintDialog (0x0x7f4fc104c7b8)
+ QWidget (0x0x7f4fc1399770) 0
+ primary-for QDialog (0x0x7f4fc104c820)
+ QObject (0x0x7f4fc108a9c0) 0
+ primary-for QWidget (0x0x7f4fc1399770)
+ QPaintDevice (0x0x7f4fc108aa20) 16
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 488)
+
+Vtable for QPrinter
+QPrinter::_ZTV8QPrinter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPrinter)
+16 (int (*)(...))QPrinter::~QPrinter
+24 (int (*)(...))QPrinter::~QPrinter
+32 (int (*)(...))QPrinter::devType
+40 (int (*)(...))QPrinter::paintEngine
+48 (int (*)(...))QPrinter::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPrinter::newPage
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPrinter
+ size=32 align=8
+ base size=32 base align=8
+QPrinter (0x0x7f4fc104c888) 0
+ vptr=((& QPrinter::_ZTV8QPrinter) + 16)
+ QPagedPaintDevice (0x0x7f4fc104c8f0) 0
+ primary-for QPrinter (0x0x7f4fc104c888)
+ QPaintDevice (0x0x7f4fc108ac00) 0
+ primary-for QPagedPaintDevice (0x0x7f4fc104c8f0)
+
+Vtable for QPrintEngine
+QPrintEngine::_ZTV12QPrintEngine: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintEngine)
+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 QPrintEngine
+ size=8 align=8
+ base size=8 base align=8
+QPrintEngine (0x0x7f4fc115a7e0) 0 nearly-empty
+ vptr=((& QPrintEngine::_ZTV12QPrintEngine) + 16)
+
+Class QPrinterInfo
+ size=8 align=8
+ base size=8 base align=8
+QPrinterInfo (0x0x7f4fc115aa20) 0
+
+Class QPrintPreviewDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewDialog::QPrivateSignal (0x0x7f4fc115ac60) 0 empty
+
+Vtable for QPrintPreviewDialog
+QPrintPreviewDialog::_ZTV19QPrintPreviewDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+16 (int (*)(...))QPrintPreviewDialog::metaObject
+24 (int (*)(...))QPrintPreviewDialog::qt_metacast
+32 (int (*)(...))QPrintPreviewDialog::qt_metacall
+40 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+48 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+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 (*)(...))QPrintPreviewDialog::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 (*)(...))QPrintPreviewDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+488 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD1Ev
+496 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD0Ev
+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 QPrintPreviewDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewDialog (0x0x7f4fc104cea0) 0
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 16)
+ QDialog (0x0x7f4fc104cf08) 0
+ primary-for QPrintPreviewDialog (0x0x7f4fc104cea0)
+ QWidget (0x0x7f4fc11752a0) 0
+ primary-for QDialog (0x0x7f4fc104cf08)
+ QObject (0x0x7f4fc115aba0) 0
+ primary-for QWidget (0x0x7f4fc11752a0)
+ QPaintDevice (0x0x7f4fc115ac00) 16
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 488)
+
+Class QPrintPreviewWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewWidget::QPrivateSignal (0x0x7f4fc115aea0) 0 empty
+
+Vtable for QPrintPreviewWidget
+QPrintPreviewWidget::_ZTV19QPrintPreviewWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewWidget)
+16 (int (*)(...))QPrintPreviewWidget::metaObject
+24 (int (*)(...))QPrintPreviewWidget::qt_metacast
+32 (int (*)(...))QPrintPreviewWidget::qt_metacall
+40 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+48 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+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 (*)(...))QPrintPreviewWidget::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 (*)(...))(& _ZTI19QPrintPreviewWidget)
+448 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD1Ev
+456 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD0Ev
+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 QPrintPreviewWidget
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewWidget (0x0x7f4fc104cf70) 0
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 16)
+ QWidget (0x0x7f4fc1175310) 0
+ primary-for QPrintPreviewWidget (0x0x7f4fc104cf70)
+ QObject (0x0x7f4fc115ade0) 0
+ primary-for QWidget (0x0x7f4fc1175310)
+ QPaintDevice (0x0x7f4fc115ae40) 16
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 448)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f4fc0dbb060) 0
+
+Class QJSNumberCoercion
+ size=8 align=8
+ base size=8 base align=8
+QJSNumberCoercion (0x0x7f4fc0e4cd80) 0
+
+Class QJSPrimitiveUndefined
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveUndefined (0x0x7f4fc0e7d420) 0 empty
+
+Class QJSPrimitiveNull
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveNull (0x0x7f4fc0e7d480) 0 empty
+
+Class QJSPrimitiveValue::AddOperators
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveValue::AddOperators (0x0x7f4fc0e7d5a0) 0 empty
+
+Class QJSPrimitiveValue::SubOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::SubOperators (0x0x7f4fc0e611a0) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::SubOperators> (0x0x7f4fc0e7d660) 0 empty
+
+Class QJSPrimitiveValue::MulOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::MulOperators (0x0x7f4fc0e61208) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::MulOperators> (0x0x7f4fc0e7d720) 0 empty
+
+Class QJSPrimitiveValue::DivOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::DivOperators (0x0x7f4fc0e61270) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::DivOperators> (0x0x7f4fc0e7d7e0) 0 empty
+
+Class QJSPrimitiveValue::QJSPrimitiveValuePrivate
+ size=32 align=8
+ base size=25 base align=8
+QJSPrimitiveValue::QJSPrimitiveValuePrivate (0x0x7f4fc0e7d840) 0
+
+Class QJSPrimitiveValue
+ size=32 align=8
+ base size=32 base align=8
+QJSPrimitiveValue (0x0x7f4fc0e7d4e0) 0
+
+Class QJSManagedValue
+ size=8 align=8
+ base size=8 base align=8
+QJSManagedValue (0x0x7f4fc0c0c6c0) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f4fc0c0c9c0) 0 empty
+
+Class {anonymous}::QQmlTriviallyDestructibleDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+{anonymous}::QQmlTriviallyDestructibleDebuggingEnabler (0x0x7f4fc0c0cc00) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f4fc0c7b1e0) 0 empty
+
+Vtable for QJSEngine
+QJSEngine::_ZTV9QJSEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QJSEngine)
+16 (int (*)(...))QJSEngine::metaObject
+24 (int (*)(...))QJSEngine::qt_metacast
+32 (int (*)(...))QJSEngine::qt_metacall
+40 (int (*)(...))QJSEngine::~QJSEngine
+48 (int (*)(...))QJSEngine::~QJSEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QJSEngine
+ size=24 align=8
+ base size=24 base align=8
+QJSEngine (0x0x7f4fc0c71548) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+ QObject (0x0x7f4fc0c7b180) 0
+ primary-for QJSEngine (0x0x7f4fc0c71548)
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f4fc0d23180) 0
+
+Vtable for QQmlParserStatus
+QQmlParserStatus::_ZTV16QQmlParserStatus: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlParserStatus)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlParserStatus
+ size=16 align=8
+ base size=16 base align=8
+QQmlParserStatus (0x0x7f4fc0d23360) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f4fc0d5c060) 0
+
+Vtable for QQmlPropertyValueSource
+QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQmlPropertyValueSource)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlPropertyValueSource
+ size=8 align=8
+ base size=8 base align=8
+QQmlPropertyValueSource (0x0x7f4fc0d88240) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=184 align=8
+ base size=180 base align=8
+QQmlPrivate::RegisterType (0x0x7f4fc09c9c00) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=168 align=8
+ base size=168 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7f4fc09c9cc0) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f4fc09c9d20) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f4fc09c9d80) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f4fc09c9de0) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7f4fc0a03180) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f4fc0a03240) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f4fc0a032a0) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7f4fc0a03300) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7f4fc0a03360) 0
+
+Class QQmlPrivate::AOTCompiledContext
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::AOTCompiledContext (0x0x7f4fc0a033c0) 0
+
+Class QQmlPrivate::TypedFunction
+ size=48 align=8
+ base size=48 base align=8
+QQmlPrivate::TypedFunction (0x0x7f4fc0a03480) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f4fc0a03c60) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f4fc0a03cc0) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7f4fc0a03d20) 0
+
+Class QQmlPrivate::SingletonInstanceFunctor
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::SingletonInstanceFunctor (0x0x7f4fc0a03d80) 0
+
+Class QQmlTypeNotAvailable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlTypeNotAvailable::QPrivateSignal (0x0x7f4fcc183600) 0 empty
+
+Vtable for QQmlTypeNotAvailable
+QQmlTypeNotAvailable::_ZTV20QQmlTypeNotAvailable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQmlTypeNotAvailable)
+16 (int (*)(...))QQmlTypeNotAvailable::metaObject
+24 (int (*)(...))QQmlTypeNotAvailable::qt_metacast
+32 (int (*)(...))QQmlTypeNotAvailable::qt_metacall
+40 (int (*)(...))QQmlTypeNotAvailable::~QQmlTypeNotAvailable
+48 (int (*)(...))QQmlTypeNotAvailable::~QQmlTypeNotAvailable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlTypeNotAvailable
+ size=16 align=8
+ base size=16 base align=8
+QQmlTypeNotAvailable (0x0x7f4fd2ce01a0) 0
+ vptr=((& QQmlTypeNotAvailable::_ZTV20QQmlTypeNotAvailable) + 16)
+ QObject (0x0x7f4fcc1835a0) 0
+ primary-for QQmlTypeNotAvailable (0x0x7f4fd2ce01a0)
+
+Vtable for QQmlAbstractUrlInterceptor
+QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QQmlAbstractUrlInterceptor)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlAbstractUrlInterceptor
+ size=8 align=8
+ base size=8 base align=8
+QQmlAbstractUrlInterceptor (0x0x7f4fca7a9e40) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f4fca7a9ea0) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7f4fc9d944e0) 0 empty
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 (int (*)(...))QQmlImageProviderBase::metaObject
+24 (int (*)(...))QQmlImageProviderBase::qt_metacast
+32 (int (*)(...))QQmlImageProviderBase::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 QQmlImageProviderBase
+ size=16 align=8
+ base size=16 base align=8
+QQmlImageProviderBase (0x0x7f4fd2da3af8) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+ QObject (0x0x7f4fc9d942a0) 0
+ primary-for QQmlImageProviderBase (0x0x7f4fd2da3af8)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f4fc9aa3d20) 0 empty
+
+Vtable for QQmlEngine
+QQmlEngine::_ZTV10QQmlEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQmlEngine)
+16 (int (*)(...))QQmlEngine::metaObject
+24 (int (*)(...))QQmlEngine::qt_metacast
+32 (int (*)(...))QQmlEngine::qt_metacall
+40 (int (*)(...))QQmlEngine::~QQmlEngine
+48 (int (*)(...))QQmlEngine::~QQmlEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngine (0x0x7f4fd30af2d8) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+ QJSEngine (0x0x7f4fd30af3a8) 0
+ primary-for QQmlEngine (0x0x7f4fd30af2d8)
+ QObject (0x0x7f4fc9aa37e0) 0
+ primary-for QJSEngine (0x0x7f4fd30af3a8)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f4fc9ae3000) 0 empty
+
+Vtable for QQmlApplicationEngine
+QQmlApplicationEngine::_ZTV21QQmlApplicationEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlApplicationEngine)
+16 (int (*)(...))QQmlApplicationEngine::metaObject
+24 (int (*)(...))QQmlApplicationEngine::qt_metacast
+32 (int (*)(...))QQmlApplicationEngine::qt_metacall
+40 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+48 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlApplicationEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlApplicationEngine (0x0x7f4fd30af9c0) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+ QQmlEngine (0x0x7f4fd30afa28) 0
+ primary-for QQmlApplicationEngine (0x0x7f4fd30af9c0)
+ QJSEngine (0x0x7f4fd30a30d0) 0
+ primary-for QQmlEngine (0x0x7f4fd30afa28)
+ QObject (0x0x7f4fc9aadf60) 0
+ primary-for QJSEngine (0x0x7f4fd30a30d0)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f4fc9af5720) 0 empty
+
+Vtable for QQmlComponent
+QQmlComponent::_ZTV13QQmlComponent: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlComponent)
+16 (int (*)(...))QQmlComponent::metaObject
+24 (int (*)(...))QQmlComponent::qt_metacast
+32 (int (*)(...))QQmlComponent::qt_metacall
+40 (int (*)(...))QQmlComponent::~QQmlComponent
+48 (int (*)(...))QQmlComponent::~QQmlComponent
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlComponent::create
+120 (int (*)(...))QQmlComponent::beginCreate
+128 (int (*)(...))QQmlComponent::completeCreate
+
+Class QQmlComponent
+ size=16 align=8
+ base size=16 base align=8
+QQmlComponent (0x0x7f4fd30a3138) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+ QObject (0x0x7f4fc9af51e0) 0
+ primary-for QQmlComponent (0x0x7f4fd30a3138)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f4fc9747660) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7f4fc97476c0) 0
+
+Vtable for QQmlContext
+QQmlContext::_ZTV11QQmlContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QQmlContext)
+16 (int (*)(...))QQmlContext::metaObject
+24 (int (*)(...))QQmlContext::qt_metacast
+32 (int (*)(...))QQmlContext::qt_metacall
+40 (int (*)(...))QQmlContext::~QQmlContext
+48 (int (*)(...))QQmlContext::~QQmlContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlContext
+ size=16 align=8
+ base size=16 base align=8
+QQmlContext (0x0x7f4fc9680478) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+ QObject (0x0x7f4fc9747240) 0
+ primary-for QQmlContext (0x0x7f4fc9680478)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f4fc9747f60) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f4fc92584e0) 0 empty
+
+Vtable for QQmlExpression
+QQmlExpression::_ZTV14QQmlExpression: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QQmlExpression)
+16 (int (*)(...))QQmlExpression::metaObject
+24 (int (*)(...))QQmlExpression::qt_metacast
+32 (int (*)(...))QQmlExpression::qt_metacall
+40 (int (*)(...))QQmlExpression::~QQmlExpression
+48 (int (*)(...))QQmlExpression::~QQmlExpression
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlExpression
+ size=16 align=8
+ base size=16 base align=8
+QQmlExpression (0x0x7f4fc97a5478) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+ QObject (0x0x7f4fc9258480) 0
+ primary-for QQmlExpression (0x0x7f4fc97a5478)
+
+Vtable for QQmlTypesExtensionInterface
+QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QQmlTypesExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlTypesExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlTypesExtensionInterface (0x0x7f4fc926f060) 0 nearly-empty
+ vptr=((& QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface) + 16)
+
+Vtable for QQmlExtensionInterface
+QQmlExtensionInterface::_ZTV22QQmlExtensionInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QQmlExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlExtensionInterface (0x0x7f4fc97a54e0) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+ QQmlTypesExtensionInterface (0x0x7f4fc926f120) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f4fc97a54e0)
+
+Vtable for QQmlEngineExtensionInterface
+QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QQmlEngineExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlEngineExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlEngineExtensionInterface (0x0x7f4fc926f1e0) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f4fc8fe5540) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+16 (int (*)(...))QQmlExtensionPlugin::metaObject
+24 (int (*)(...))QQmlExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlExtensionPlugin::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 (*)(...))QQmlExtensionPlugin::unregisterTypes
+128 (int (*)(...))QQmlExtensionPlugin::initializeEngine
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+152 0
+160 0
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7f4fca3f23f0) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+ QObject (0x0x7f4fc938d720) 0
+ primary-for QQmlExtensionPlugin (0x0x7f4fca3f23f0)
+ QQmlExtensionInterface (0x0x7f4fc9543068) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+ QQmlTypesExtensionInterface (0x0x7f4fc938d780) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f4fc9543068)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7f4fc8ff7720) 0 empty
+
+Vtable for QQmlEngineExtensionPlugin
+QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+16 (int (*)(...))QQmlEngineExtensionPlugin::metaObject
+24 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacall
+40 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+48 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlEngineExtensionPlugin::initializeEngine
+120 (int (*)(...))-16
+128 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+136 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD1Ev
+144 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD0Ev
+152 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlEngineExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngineExtensionPlugin (0x0x7f4fca3f2540) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+ QObject (0x0x7f4fc8ff7180) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7f4fca3f2540)
+ QQmlEngineExtensionInterface (0x0x7f4fc8ff71e0) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f4fc901e2a0) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f4fc901e3c0) 0 empty
+
+Vtable for QQmlFileSelector
+QQmlFileSelector::_ZTV16QQmlFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlFileSelector)
+16 (int (*)(...))QQmlFileSelector::metaObject
+24 (int (*)(...))QQmlFileSelector::qt_metacast
+32 (int (*)(...))QQmlFileSelector::qt_metacall
+40 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+48 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QQmlFileSelector (0x0x7f4fc9543208) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+ QObject (0x0x7f4fc901e300) 0
+ primary-for QQmlFileSelector (0x0x7f4fc9543208)
+
+Vtable for QQmlIncubator
+QQmlIncubator::_ZTV13QQmlIncubator: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlIncubator)
+16 (int (*)(...))QQmlIncubator::~QQmlIncubator
+24 (int (*)(...))QQmlIncubator::~QQmlIncubator
+32 (int (*)(...))QQmlIncubator::statusChanged
+40 (int (*)(...))QQmlIncubator::setInitialState
+
+Class QQmlIncubator
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubator (0x0x7f4fc901ef00) 0
+ vptr=((& QQmlIncubator::_ZTV13QQmlIncubator) + 16)
+
+Vtable for QQmlIncubationController
+QQmlIncubationController::_ZTV24QQmlIncubationController: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQmlIncubationController)
+16 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+24 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+32 (int (*)(...))QQmlIncubationController::incubatingObjectCountChanged
+
+Class QQmlIncubationController
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubationController (0x0x7f4fc9036720) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f4fc9543548) 0
+ QDebug (0x0x7f4fc95435b0) 0
+ QIODeviceBase (0x0x7f4fc9036780) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7f4fc8940de0) 0
+
+Vtable for QQmlNetworkAccessManagerFactory
+QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QQmlNetworkAccessManagerFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlNetworkAccessManagerFactory
+ size=8 align=8
+ base size=8 base align=8
+QQmlNetworkAccessManagerFactory (0x0x7f4fc8940e40) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f4fc8953de0) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f4fc8784c60) 0 empty
+
+Vtable for QQmlPropertyMap
+QQmlPropertyMap::_ZTV15QQmlPropertyMap: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQmlPropertyMap)
+16 (int (*)(...))QQmlPropertyMap::metaObject
+24 (int (*)(...))QQmlPropertyMap::qt_metacast
+32 (int (*)(...))QQmlPropertyMap::qt_metacall
+40 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+48 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlPropertyMap::updateValue
+
+Class QQmlPropertyMap
+ size=16 align=8
+ base size=16 base align=8
+QQmlPropertyMap (0x0x7f4fc85205b0) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+ QObject (0x0x7f4fc8784c00) 0
+ primary-for QQmlPropertyMap (0x0x7f4fc85205b0)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f4fc87987e0) 0 empty
+
+Vtable for QQuickTransform
+QQuickTransform::_ZTV15QQuickTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQuickTransform)
+16 (int (*)(...))QQuickTransform::metaObject
+24 (int (*)(...))QQuickTransform::qt_metacast
+32 (int (*)(...))QQuickTransform::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 QQuickTransform
+ size=16 align=8
+ base size=16 base align=8
+QQuickTransform (0x0x7f4fc85207b8) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+ QObject (0x0x7f4fc8798480) 0
+ primary-for QQuickTransform (0x0x7f4fc85207b8)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f4fc87b3ea0) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f4fc87b3f60) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f4fc83c93c0) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickItem)
+16 (int (*)(...))QQuickItem::metaObject
+24 (int (*)(...))QQuickItem::qt_metacast
+32 (int (*)(...))QQuickItem::qt_metacall
+40 (int (*)(...))QQuickItem::~QQuickItem
+48 (int (*)(...))QQuickItem::~QQuickItem
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickItem::isTextureProvider
+152 (int (*)(...))QQuickItem::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickItem::updatePaintNode
+368 (int (*)(...))QQuickItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))-16
+392 (int (*)(...))(& _ZTI10QQuickItem)
+400 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7f4fd16ba310) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+ QObject (0x0x7f4fc87b33c0) 0
+ primary-for QQuickItem (0x0x7f4fd16ba310)
+ QQmlParserStatus (0x0x7f4fc87b3e40) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 400)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f4fc5a881e0) 0 empty
+
+Vtable for QQuickFramebufferObject::Renderer
+QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN23QQuickFramebufferObject8RendererE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QQuickFramebufferObject::Renderer::createFramebufferObject
+48 (int (*)(...))QQuickFramebufferObject::Renderer::synchronize
+
+Class QQuickFramebufferObject::Renderer
+ size=16 align=8
+ base size=16 base align=8
+QQuickFramebufferObject::Renderer (0x0x7f4fc5a88420) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+16 (int (*)(...))QQuickFramebufferObject::metaObject
+24 (int (*)(...))QQuickFramebufferObject::qt_metacast
+32 (int (*)(...))QQuickFramebufferObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickFramebufferObject::isTextureProvider
+152 (int (*)(...))QQuickFramebufferObject::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickFramebufferObject::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+368 (int (*)(...))QQuickFramebufferObject::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7f4fc5e879c0) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+ QQuickItem (0x0x7f4fd24ce620) 0
+ primary-for QQuickFramebufferObject (0x0x7f4fc5e879c0)
+ QObject (0x0x7f4fc5a60d20) 0
+ primary-for QQuickItem (0x0x7f4fd24ce620)
+ QQmlParserStatus (0x0x7f4fc5a88180) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 408)
+
+Class QQuickGraphicsConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsConfiguration (0x0x7f4fc521f8a0) 0
+
+Class QQuickGraphicsDevice
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsDevice (0x0x7f4fc4c7fd20) 0
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f4fc4c7fe40) 0 empty
+
+Vtable for QQuickTextureFactory
+QQuickTextureFactory::_ZTV20QQuickTextureFactory: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickTextureFactory)
+16 (int (*)(...))QQuickTextureFactory::metaObject
+24 (int (*)(...))QQuickTextureFactory::qt_metacast
+32 (int (*)(...))QQuickTextureFactory::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 (*)(...))QQuickTextureFactory::image
+
+Class QQuickTextureFactory
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextureFactory (0x0x7f4fc5e87a28) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+ QObject (0x0x7f4fc4c7fd80) 0
+ primary-for QQuickTextureFactory (0x0x7f4fc5e87a28)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f4fc4c9e000) 0 empty
+
+Vtable for QQuickImageResponse
+QQuickImageResponse::_ZTV19QQuickImageResponse: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageResponse)
+16 (int (*)(...))QQuickImageResponse::metaObject
+24 (int (*)(...))QQuickImageResponse::qt_metacast
+32 (int (*)(...))QQuickImageResponse::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 (*)(...))QQuickImageResponse::errorString
+128 (int (*)(...))QQuickImageResponse::cancel
+
+Class QQuickImageResponse
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageResponse (0x0x7f4fc5ea3ea0) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+ QObject (0x0x7f4fc4c7ff00) 0
+ primary-for QQuickImageResponse (0x0x7f4fc5ea3ea0)
+
+Class QQuickImageProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageProvider::QPrivateSignal (0x0x7f4fc49f8900) 0 empty
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::qt_metacall
+40 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+48 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickImageProvider (0x0x7f4fc5ea3f08) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+ QQmlImageProviderBase (0x0x7f4fc5ebc138) 0
+ primary-for QQuickImageProvider (0x0x7f4fc5ea3f08)
+ QObject (0x0x7f4fc4cd0120) 0
+ primary-for QQmlImageProviderBase (0x0x7f4fc5ebc138)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::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 (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=32 align=8
+ base size=32 base align=8
+QQuickAsyncImageProvider (0x0x7f4fc5ebc1a0) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+ QQuickImageProvider (0x0x7f4fc5ebc5b0) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f4fc5ebc1a0)
+ QQmlImageProviderBase (0x0x7f4fc5ebc618) 0
+ primary-for QQuickImageProvider (0x0x7f4fc5ebc5b0)
+ QObject (0x0x7f4fc4ad3720) 0
+ primary-for QQmlImageProviderBase (0x0x7f4fc5ebc618)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f4fc4ad3840) 0 empty
+
+Vtable for QQuickItemGrabResult
+QQuickItemGrabResult::_ZTV20QQuickItemGrabResult: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickItemGrabResult)
+16 (int (*)(...))QQuickItemGrabResult::metaObject
+24 (int (*)(...))QQuickItemGrabResult::qt_metacast
+32 (int (*)(...))QQuickItemGrabResult::qt_metacall
+40 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+48 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+56 (int (*)(...))QQuickItemGrabResult::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickItemGrabResult
+ size=16 align=8
+ base size=16 base align=8
+QQuickItemGrabResult (0x0x7f4fc5ebc750) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+ QObject (0x0x7f4fc4ad3780) 0
+ primary-for QQuickItemGrabResult (0x0x7f4fc5ebc750)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f4fc48ead20) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+16 (int (*)(...))QQuickPaintedItem::metaObject
+24 (int (*)(...))QQuickPaintedItem::qt_metacast
+32 (int (*)(...))QQuickPaintedItem::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickPaintedItem::isTextureProvider
+152 (int (*)(...))QQuickPaintedItem::textureProvider
+160 (int (*)(...))QQuickPaintedItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickPaintedItem::updatePaintNode
+368 (int (*)(...))QQuickPaintedItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7f4fc5ebc9c0) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+ QQuickItem (0x0x7f4fd2983230) 0
+ primary-for QQuickPaintedItem (0x0x7f4fc5ebc9c0)
+ QObject (0x0x7f4fc48ea360) 0
+ primary-for QQuickItem (0x0x7f4fd2983230)
+ QQmlParserStatus (0x0x7f4fc48eacc0) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 408)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f4fc36664e0) 0 empty
+
+Vtable for QQuickRenderControl
+QQuickRenderControl::_ZTV19QQuickRenderControl: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickRenderControl)
+16 (int (*)(...))QQuickRenderControl::metaObject
+24 (int (*)(...))QQuickRenderControl::qt_metacast
+32 (int (*)(...))QQuickRenderControl::qt_metacall
+40 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+48 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickRenderControl::renderWindow
+
+Class QQuickRenderControl
+ size=16 align=8
+ base size=16 base align=8
+QQuickRenderControl (0x0x7f4fc5eebb60) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+ QObject (0x0x7f4fc3666480) 0
+ primary-for QQuickRenderControl (0x0x7f4fc5eebb60)
+
+Class QQuickRenderTarget
+ size=8 align=8
+ base size=8 base align=8
+QQuickRenderTarget (0x0x7f4fc371de40) 0
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f4fc34735a0) 0 empty
+
+Vtable for QQuickTextDocument
+QQuickTextDocument::_ZTV18QQuickTextDocument: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QQuickTextDocument)
+16 (int (*)(...))QQuickTextDocument::metaObject
+24 (int (*)(...))QQuickTextDocument::qt_metacast
+32 (int (*)(...))QQuickTextDocument::qt_metacall
+40 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+48 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextDocument (0x0x7f4fc5eebbc8) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+ QObject (0x0x7f4fc3473540) 0
+ primary-for QQuickTextDocument (0x0x7f4fc5eebbc8)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f4fc253fe40) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f4fc253ff00) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f4fc255a000) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f4fc255a360) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f4fc255a3c0) 0
+
+Vtable for QSGGeometry
+QSGGeometry::_ZTV11QSGGeometry: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGGeometry)
+16 (int (*)(...))QSGGeometry::~QSGGeometry
+24 (int (*)(...))QSGGeometry::~QSGGeometry
+
+Class QSGGeometry
+ size=128 align=8
+ base size=128 base align=8
+QSGGeometry (0x0x7f4fc253fd80) 0
+ vptr=((& QSGGeometry::_ZTV11QSGGeometry) + 16)
+
+Vtable for QSGNode
+QSGNode::_ZTV7QSGNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSGNode)
+16 (int (*)(...))QSGNode::~QSGNode
+24 (int (*)(...))QSGNode::~QSGNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGNode
+ size=72 align=8
+ base size=72 base align=8
+QSGNode (0x0x7f4fc233c660) 0
+ vptr=((& QSGNode::_ZTV7QSGNode) + 16)
+
+Vtable for QSGBasicGeometryNode
+QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGBasicGeometryNode)
+16 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+24 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGBasicGeometryNode
+ size=104 align=8
+ base size=104 base align=8
+QSGBasicGeometryNode (0x0x7f4fc4c9c618) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+ QSGNode (0x0x7f4fc20efd80) 0
+ primary-for QSGBasicGeometryNode (0x0x7f4fc4c9c618)
+
+Vtable for QSGGeometryNode
+QSGGeometryNode::_ZTV15QSGGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSGGeometryNode)
+16 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+24 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGGeometryNode
+ size=136 align=8
+ base size=136 base align=8
+QSGGeometryNode (0x0x7f4fc4c9c8f0) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+ QSGBasicGeometryNode (0x0x7f4fc4c9c958) 0
+ primary-for QSGGeometryNode (0x0x7f4fc4c9c8f0)
+ QSGNode (0x0x7f4fc21659c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f4fc4c9c958)
+
+Vtable for QSGClipNode
+QSGClipNode::_ZTV11QSGClipNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGClipNode)
+16 (int (*)(...))QSGClipNode::~QSGClipNode
+24 (int (*)(...))QSGClipNode::~QSGClipNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGClipNode
+ size=144 align=8
+ base size=144 base align=8
+QSGClipNode (0x0x7f4fc4d0b6e8) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+ QSGBasicGeometryNode (0x0x7f4fc4d0b750) 0
+ primary-for QSGClipNode (0x0x7f4fc4d0b6e8)
+ QSGNode (0x0x7f4fc1e36660) 0
+ primary-for QSGBasicGeometryNode (0x0x7f4fc4d0b750)
+
+Vtable for QSGTransformNode
+QSGTransformNode::_ZTV16QSGTransformNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGTransformNode)
+16 (int (*)(...))QSGTransformNode::~QSGTransformNode
+24 (int (*)(...))QSGTransformNode::~QSGTransformNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGTransformNode
+ size=208 align=8
+ base size=208 base align=8
+QSGTransformNode (0x0x7f4fc4d0b820) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+ QSGNode (0x0x7f4fc1e54180) 0
+ primary-for QSGTransformNode (0x0x7f4fc4d0b820)
+
+Vtable for QSGRootNode
+QSGRootNode::_ZTV11QSGRootNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGRootNode)
+16 (int (*)(...))QSGRootNode::~QSGRootNode
+24 (int (*)(...))QSGRootNode::~QSGRootNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGRootNode
+ size=96 align=8
+ base size=96 base align=8
+QSGRootNode (0x0x7f4fc4b32888) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+ QSGNode (0x0x7f4fc1e547e0) 0
+ primary-for QSGRootNode (0x0x7f4fc4b32888)
+
+Vtable for QSGOpacityNode
+QSGOpacityNode::_ZTV14QSGOpacityNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGOpacityNode)
+16 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+24 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+32 (int (*)(...))QSGOpacityNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGOpacityNode
+ size=88 align=8
+ base size=88 base align=8
+QSGOpacityNode (0x0x7f4fc361d958) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+ QSGNode (0x0x7f4fc1bdf720) 0
+ primary-for QSGOpacityNode (0x0x7f4fc361d958)
+
+Vtable for QSGNodeVisitor
+QSGNodeVisitor::_ZTV14QSGNodeVisitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGNodeVisitor)
+16 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+24 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+32 (int (*)(...))QSGNodeVisitor::enterTransformNode
+40 (int (*)(...))QSGNodeVisitor::leaveTransformNode
+48 (int (*)(...))QSGNodeVisitor::enterClipNode
+56 (int (*)(...))QSGNodeVisitor::leaveClipNode
+64 (int (*)(...))QSGNodeVisitor::enterGeometryNode
+72 (int (*)(...))QSGNodeVisitor::leaveGeometryNode
+80 (int (*)(...))QSGNodeVisitor::enterOpacityNode
+88 (int (*)(...))QSGNodeVisitor::leaveOpacityNode
+96 (int (*)(...))QSGNodeVisitor::visitNode
+104 (int (*)(...))QSGNodeVisitor::visitChildren
+
+Class QSGNodeVisitor
+ size=8 align=8
+ base size=8 base align=8
+QSGNodeVisitor (0x0x7f4fc1c1b000) 0 nearly-empty
+ vptr=((& QSGNodeVisitor::_ZTV14QSGNodeVisitor) + 16)
+
+Vtable for QSGRendererInterface
+QSGRendererInterface::_ZTV20QSGRendererInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGRendererInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QSGRendererInterface::getResource
+48 (int (*)(...))QSGRendererInterface::getResource
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRendererInterface
+ size=8 align=8
+ base size=8 base align=8
+QSGRendererInterface (0x0x7f4fc19d3de0) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f4fc1b861e0) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7f4fc1b862a0) 0
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QQuickWindow)
+16 (int (*)(...))QQuickWindow::metaObject
+24 (int (*)(...))QQuickWindow::qt_metacast
+32 (int (*)(...))QQuickWindow::qt_metacall
+40 (int (*)(...))QQuickWindow::~QQuickWindow
+48 (int (*)(...))QQuickWindow::~QQuickWindow
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickWindow::keyPressEvent
+232 (int (*)(...))QQuickWindow::keyReleaseEvent
+240 (int (*)(...))QQuickWindow::mousePressEvent
+248 (int (*)(...))QQuickWindow::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickWindow::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI12QQuickWindow)
+328 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+336 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7f4fc367b410) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+ QWindow (0x0x7f4fca2dba10) 0
+ primary-for QQuickWindow (0x0x7f4fc367b410)
+ QObject (0x0x7f4fc1b45000) 0
+ primary-for QWindow (0x0x7f4fca2dba10)
+ QSurface (0x0x7f4fc1b86180) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 328)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f4fc7b77120) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickView)
+16 (int (*)(...))QQuickView::metaObject
+24 (int (*)(...))QQuickView::qt_metacast
+32 (int (*)(...))QQuickView::qt_metacall
+40 (int (*)(...))QQuickView::~QQuickView
+48 (int (*)(...))QQuickView::~QQuickView
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QQuickView::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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickView::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickView::keyPressEvent
+232 (int (*)(...))QQuickView::keyReleaseEvent
+240 (int (*)(...))QQuickView::mousePressEvent
+248 (int (*)(...))QQuickView::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickView::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI10QQuickView)
+328 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+336 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7f4fc23674e0) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+ QQuickWindow (0x0x7f4fc2367548) 0
+ primary-for QQuickView (0x0x7f4fc23674e0)
+ QWindow (0x0x7f4fc9d65c40) 0
+ primary-for QQuickWindow (0x0x7f4fc2367548)
+ QObject (0x0x7f4fc7b77060) 0
+ primary-for QWindow (0x0x7f4fc9d65c40)
+ QSurface (0x0x7f4fc7b770c0) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 328)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f4fc7b77420) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f4fc7b774e0) 0
+
+Class QSGMaterialShader::GraphicsPipelineState
+ size=52 align=4
+ base size=52 base align=4
+QSGMaterialShader::GraphicsPipelineState (0x0x7f4fc7b77720) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+24 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+32 (int (*)(...))QSGMaterialShader::updateUniformData
+40 (int (*)(...))QSGMaterialShader::updateSampledImage
+48 (int (*)(...))QSGMaterialShader::updateGraphicsPipelineState
+
+Class QSGMaterialShader
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader (0x0x7f4fc7b77480) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16)
+
+Vtable for QSGMaterial
+QSGMaterial::_ZTV11QSGMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGMaterial)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QSGMaterial::compare
+
+Class QSGMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGMaterial (0x0x7f4fc610c720) 0
+ vptr=((& QSGMaterial::_ZTV11QSGMaterial) + 16)
+
+Vtable for QSGFlatColorMaterial
+QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGFlatColorMaterial)
+16 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+24 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+32 (int (*)(...))QSGFlatColorMaterial::type
+40 (int (*)(...))QSGFlatColorMaterial::createShader
+48 (int (*)(...))QSGFlatColorMaterial::compare
+
+Class QSGFlatColorMaterial
+ size=40 align=8
+ base size=40 base align=8
+QSGFlatColorMaterial (0x0x7f4fc213ec30) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+ QSGMaterial (0x0x7f4fc610cc60) 0
+ primary-for QSGFlatColorMaterial (0x0x7f4fc213ec30)
+
+Class QNativeInterface::QSGOpenGLTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGOpenGLTexture::TypeInfo (0x0x7f4fc610cd80) 0 empty
+
+Vtable for QNativeInterface::QSGOpenGLTexture
+QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGOpenGLTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGOpenGLTexture (0x0x7f4fc610cd20) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE) + 16)
+
+Class QNativeInterface::QSGVulkanTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGVulkanTexture::TypeInfo (0x0x7f4fc610cea0) 0 empty
+
+Vtable for QNativeInterface::QSGVulkanTexture
+QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGVulkanTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGVulkanTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGVulkanTexture (0x0x7f4fc610ce40) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE) + 16)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f4fc5034000) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSGTexture)
+16 (int (*)(...))QSGTexture::metaObject
+24 (int (*)(...))QSGTexture::qt_metacast
+32 (int (*)(...))QSGTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7f4fc213ee38) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+ QObject (0x0x7f4fc610cf60) 0
+ primary-for QSGTexture (0x0x7f4fc213ee38)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f4fc50342a0) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGDynamicTexture)
+16 (int (*)(...))QSGDynamicTexture::metaObject
+24 (int (*)(...))QSGDynamicTexture::qt_metacast
+32 (int (*)(...))QSGDynamicTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7f4fc1dec618) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+ QSGTexture (0x0x7f4fc1dec680) 0
+ primary-for QSGDynamicTexture (0x0x7f4fc1dec618)
+ QObject (0x0x7f4fc5034240) 0
+ primary-for QSGTexture (0x0x7f4fc1dec680)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSGImageNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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
+
+Class QSGImageNode
+ size=136 align=8
+ base size=136 base align=8
+QSGImageNode (0x0x7f4fc1dec9c0) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+ QSGGeometryNode (0x0x7f4fc1deca28) 0
+ primary-for QSGImageNode (0x0x7f4fc1dec9c0)
+ QSGBasicGeometryNode (0x0x7f4fc1e68618) 0
+ primary-for QSGGeometryNode (0x0x7f4fc1deca28)
+ QSGNode (0x0x7f4fc5034360) 0
+ primary-for QSGBasicGeometryNode (0x0x7f4fc1e68618)
+
+Vtable for QSGNinePatchNode
+QSGNinePatchNode::_ZTV16QSGNinePatchNode: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGNinePatchNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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 QSGNinePatchNode
+ size=136 align=8
+ base size=136 base align=8
+QSGNinePatchNode (0x0x7f4fc1ebc138) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+ QSGGeometryNode (0x0x7f4fc1ebc1a0) 0
+ primary-for QSGNinePatchNode (0x0x7f4fc1ebc138)
+ QSGBasicGeometryNode (0x0x7f4fc1f67ea0) 0
+ primary-for QSGGeometryNode (0x0x7f4fc1ebc1a0)
+ QSGNode (0x0x7f4fc5034900) 0
+ primary-for QSGBasicGeometryNode (0x0x7f4fc1f67ea0)
+
+Vtable for QSGRectangleNode
+QSGRectangleNode::_ZTV16QSGRectangleNode: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGRectangleNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRectangleNode
+ size=136 align=8
+ base size=136 base align=8
+QSGRectangleNode (0x0x7f4fc1f67f08) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+ QSGGeometryNode (0x0x7f4fc1f800d0) 0
+ primary-for QSGRectangleNode (0x0x7f4fc1f67f08)
+ QSGBasicGeometryNode (0x0x7f4fc1f80270) 0
+ primary-for QSGGeometryNode (0x0x7f4fc1f800d0)
+ QSGNode (0x0x7f4fc5034960) 0
+ primary-for QSGBasicGeometryNode (0x0x7f4fc1f80270)
+
+Vtable for QSGRenderNode::RenderState
+QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QSGRenderNode11RenderStateE)
+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 (*)(...))QSGRenderNode::RenderState::get
+
+Class QSGRenderNode::RenderState
+ size=8 align=8
+ base size=8 base align=8
+QSGRenderNode::RenderState (0x0x7f4fc5034a80) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSGRenderNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))QSGRenderNode::changedStates
+56 (int (*)(...))QSGRenderNode::prepare
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QSGRenderNode::releaseResources
+80 (int (*)(...))QSGRenderNode::flags
+88 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=80 align=8
+ base size=80 base align=8
+QSGRenderNode (0x0x7f4fc1f802d8) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+ QSGNode (0x0x7f4fc5034a20) 0
+ primary-for QSGRenderNode (0x0x7f4fc1f802d8)
+
+Vtable for QSGSimpleRectNode
+QSGSimpleRectNode::_ZTV17QSGSimpleRectNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGSimpleRectNode)
+16 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+24 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleRectNode
+ size=312 align=8
+ base size=312 base align=8
+QSGSimpleRectNode (0x0x7f4fc1f97270) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+ QSGGeometryNode (0x0x7f4fc1f974e0) 0
+ primary-for QSGSimpleRectNode (0x0x7f4fc1f97270)
+ QSGBasicGeometryNode (0x0x7f4fc1f977b8) 0
+ primary-for QSGGeometryNode (0x0x7f4fc1f974e0)
+ QSGNode (0x0x7f4fc3b3d420) 0
+ primary-for QSGBasicGeometryNode (0x0x7f4fc1f977b8)
+
+Vtable for QSGOpaqueTextureMaterial
+QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QSGOpaqueTextureMaterial)
+16 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+24 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+32 (int (*)(...))QSGOpaqueTextureMaterial::type
+40 (int (*)(...))QSGOpaqueTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGOpaqueTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGOpaqueTextureMaterial (0x0x7f4fc1f97820) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+ QSGMaterial (0x0x7f4fc3b3d4e0) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f4fc1f97820)
+
+Vtable for QSGTextureMaterial
+QSGTextureMaterial::_ZTV18QSGTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureMaterial)
+16 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+24 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+32 (int (*)(...))QSGTextureMaterial::type
+40 (int (*)(...))QSGTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGTextureMaterial (0x0x7f4fc1f97dd0) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+ QSGOpaqueTextureMaterial (0x0x7f4fc1f97e38) 0
+ primary-for QSGTextureMaterial (0x0x7f4fc1f97dd0)
+ QSGMaterial (0x0x7f4fc3b3d960) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f4fc1f97e38)
+
+Vtable for QSGSimpleTextureNode
+QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGSimpleTextureNode)
+16 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+24 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleTextureNode
+ size=376 align=8
+ base size=376 base align=8
+QSGSimpleTextureNode (0x0x7f4fc1bcb000) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+ QSGGeometryNode (0x0x7f4fc1bcb1a0) 0
+ primary-for QSGSimpleTextureNode (0x0x7f4fc1bcb000)
+ QSGBasicGeometryNode (0x0x7f4fc1bcb208) 0
+ primary-for QSGGeometryNode (0x0x7f4fc1bcb1a0)
+ QSGNode (0x0x7f4fc3b3d9c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f4fc1bcb208)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f4fc2e70240) 0 empty
+
+Vtable for QSGTextureProvider
+QSGTextureProvider::_ZTV18QSGTextureProvider: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureProvider)
+16 (int (*)(...))QSGTextureProvider::metaObject
+24 (int (*)(...))QSGTextureProvider::qt_metacast
+32 (int (*)(...))QSGTextureProvider::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 QSGTextureProvider
+ size=16 align=8
+ base size=16 base align=8
+QSGTextureProvider (0x0x7f4fc1bcbd68) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+ QObject (0x0x7f4fc2e701e0) 0
+ primary-for QSGTextureProvider (0x0x7f4fc1bcbd68)
+
+Vtable for QSGVertexColorMaterial
+QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QSGVertexColorMaterial)
+16 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+24 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+32 (int (*)(...))QSGVertexColorMaterial::type
+40 (int (*)(...))QSGVertexColorMaterial::createShader
+48 (int (*)(...))QSGVertexColorMaterial::compare
+
+Class QSGVertexColorMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGVertexColorMaterial (0x0x7f4fc1bcbdd0) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+ QSGMaterial (0x0x7f4fc2e70300) 0
+ primary-for QSGVertexColorMaterial (0x0x7f4fc1bcbdd0)
+
+Class QAbstractItemModelTester::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModelTester::QPrivateSignal (0x0x7f4fc2e703c0) 0 empty
+
+Vtable for QAbstractItemModelTester
+QAbstractItemModelTester::_ZTV24QAbstractItemModelTester: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractItemModelTester)
+16 (int (*)(...))QAbstractItemModelTester::metaObject
+24 (int (*)(...))QAbstractItemModelTester::qt_metacast
+32 (int (*)(...))QAbstractItemModelTester::qt_metacall
+40 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+48 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAbstractItemModelTester
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModelTester (0x0x7f4fc1bcbf70) 0
+ vptr=((& QAbstractItemModelTester::_ZTV24QAbstractItemModelTester) + 16)
+ QObject (0x0x7f4fc2e70360) 0
+ primary-for QAbstractItemModelTester (0x0x7f4fc1bcbf70)
+
+Class QTest::QBenchmarkIterationController
+ size=4 align=4
+ base size=4 base align=4
+QTest::QBenchmarkIterationController (0x0x7f4fc2e705a0) 0
+
+Class QTestEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTestEventLoop::QPrivateSignal (0x0x7f4fc76c2b40) 0 empty
+
+Vtable for QTestEventLoop
+QTestEventLoop::_ZTV14QTestEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTestEventLoop)
+16 (int (*)(...))QTestEventLoop::metaObject
+24 (int (*)(...))QTestEventLoop::qt_metacast
+32 (int (*)(...))QTestEventLoop::qt_metacall
+40 (int (*)(...))QTestEventLoop::~QTestEventLoop
+48 (int (*)(...))QTestEventLoop::~QTestEventLoop
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTestEventLoop::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTestEventLoop
+ size=32 align=8
+ base size=32 base align=8
+QTestEventLoop (0x0x7f4fc76a3340) 0
+ vptr=((& QTestEventLoop::_ZTV14QTestEventLoop) + 16)
+ QObject (0x0x7f4fc76c2ae0) 0
+ primary-for QTestEventLoop (0x0x7f4fc76a3340)
+
+Vtable for QSignalSpy
+QSignalSpy::_ZTV10QSignalSpy: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSignalSpy)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QSignalSpy::qt_metacall
+40 (int (*)(...))QSignalSpy::~QSignalSpy
+48 (int (*)(...))QSignalSpy::~QSignalSpy
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalSpy
+ size=128 align=8
+ base size=121 base align=8
+QSignalSpy (0x0x7f4fc8eb8a80) 0
+ vptr=((& QSignalSpy::_ZTV10QSignalSpy) + 16)
+ QObject (0x0x7f4fc771d720) 0
+ primary-for QSignalSpy (0x0x7f4fc8eb8a80)
+ QList<QList<QVariant> > (0x0x7f4fc77243a8) 16
+ QListSpecialMethods<QList<QVariant> > (0x0x7f4fc7724410) 16 empty
+ QListSpecialMethodsBase<QList<QVariant> > (0x0x7f4fc771d780) 16 empty
+
+Class QTestData
+ size=8 align=8
+ base size=8 base align=8
+QTestData (0x0x7f4fd7731c60) 0
+
+Class QTest::Internal::QCborValueFormatter
+ size=1 align=1
+ base size=0 base align=1
+QTest::Internal::QCborValueFormatter (0x0x7f4fd75b2720) 0 empty
+
+Vtable for QSvgGenerator
+QSvgGenerator::_ZTV13QSvgGenerator: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSvgGenerator)
+16 (int (*)(...))QSvgGenerator::~QSvgGenerator
+24 (int (*)(...))QSvgGenerator::~QSvgGenerator
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))QSvgGenerator::paintEngine
+48 (int (*)(...))QSvgGenerator::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QSvgGenerator
+ size=24 align=8
+ base size=24 base align=8
+QSvgGenerator (0x0x7f4fc8980820) 0
+ vptr=((& QSvgGenerator::_ZTV13QSvgGenerator) + 16)
+ QPaintDevice (0x0x7f4fc83c1cc0) 0
+ primary-for QSvgGenerator (0x0x7f4fc8980820)
+
+Class QSvgRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSvgRenderer::QPrivateSignal (0x0x7f4fc83c1f00) 0 empty
+
+Vtable for QSvgRenderer
+QSvgRenderer::_ZTV12QSvgRenderer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSvgRenderer)
+16 (int (*)(...))QSvgRenderer::metaObject
+24 (int (*)(...))QSvgRenderer::qt_metacast
+32 (int (*)(...))QSvgRenderer::qt_metacall
+40 (int (*)(...))QSvgRenderer::~QSvgRenderer
+48 (int (*)(...))QSvgRenderer::~QSvgRenderer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSvgRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSvgRenderer (0x0x7f4fc8980888) 0
+ vptr=((& QSvgRenderer::_ZTV12QSvgRenderer) + 16)
+ QObject (0x0x7f4fc83c1ea0) 0
+ primary-for QSvgRenderer (0x0x7f4fc8980888)
+
+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 (0x0x7f4fd73adf60) 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 (0x0x7f4fc633f300) 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 (0x0x7f4fc633f4e0) 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 (0x0x7f4fc633f840) 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 (0x0x7f4fc633fa20) 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 (0x0x7f4fc633fd80) 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 (0x0x7f4fc633ff00) 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 (0x0x7f4fc54f1240) 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 (0x0x7f4fc54f1420) 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 (0x0x7f4fc54f1780) 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 (0x0x7f4fc54f1960) 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 (0x0x7f4fc54f1cc0) 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 (0x0x7f4fc54f1ea0) 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 (0x0x7f4fc3013240) 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 (0x0x7f4fc3013420) 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 (0x0x7f4fc3013780) 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 (0x0x7f4fc1b14060) 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 (0x0x7f4fc1b143c0) 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 (0x0x7f4fc1b14540) 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 (0x0x7f4fc1b148a0) 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 (0x0x7f4fc1b14a20) 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 (0x0x7f4fc1b14d80) 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 (0x0x7f4fc1b14f00) 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 (0x0x7f4fc0fa52a0) 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 (0x0x7f4fc0fa5420) 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 (0x0x7f4fc0fa5780) 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 (0x0x7f4fc0fa5900) 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 (0x0x7f4fc0fa5c60) 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 (0x0x7f4fc0fa5de0) 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 (0x0x7f4fc7bcf180) 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 (0x0x7f4fc7bcf300) 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 (0x0x7f4fc7bcf660) 0 empty
+
+Class QtPrivate::invokeMethodHelper(QMetaMethodReturnArgument, const Args& ...) [with Args = {}]::R
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::invokeMethodHelper(QMetaMethodReturnArgument, const Args& ...) [with Args = {}]::R (0x0x7f4fdb4aa420) 0
+
+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 (0x0x7f4fda85f960) 0
+
diff --git a/tests/auto/bic/data/qt.6.6.0.linux-gcc-amd64.txt b/tests/auto/bic/data/qt.6.6.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..e86ab23ba4
--- /dev/null
+++ b/tests/auto/bic/data/qt.6.6.0.linux-gcc-amd64.txt
@@ -0,0 +1,27485 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7f68c6af06c0) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7f68c6b47ea0) 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 (0x0x7f68c6b73120) 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 (0x0x7f68c6ba31e0) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7f68c6bd19c0) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7f68c404b7e0) 0 empty
+
+Class std::__do_member_type_wrapper
+ size=1 align=1
+ base size=0 base align=1
+std::__do_member_type_wrapper (0x0x7f68c404b8a0) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7f68c404bd80) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7f68c404bde0) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7f68c404be40) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7f68c404bea0) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7f68c404bf00) 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 (0x0x7f68c4079000) 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 (0x0x7f68c40790c0) 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 (0x0x7f68c4079180) 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 (0x0x7f68c4079240) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7f68c40795a0) 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 (0x0x7f68c4079900) 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 (0x0x7f68c4079960) 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 (0x0x7f68c4079c00) 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 (0x0x7f68c4079c60) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuch (0x0x7f68c40cf4e0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7f68c4117a80) 0 empty
+
+Class std::__nonesuch_no_braces
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch_no_braces (0x0x7f68c40ed2d8) 0 empty
+ std::__nonesuch (0x0x7f68c4117f60) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7f68c419bcc0) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7f68c41d97e0) 0 empty
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7f68c3e54660) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7f68c3e547e0) 0 empty
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7f68c3e80600) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7f68c3f6b0c0) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7f68c3f6b120) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7f68c3f642d8) 0 empty
+ std::input_iterator_tag (0x0x7f68c3f6b180) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7f68c3f64340) 0 empty
+ std::forward_iterator_tag (0x0x7f68c3f643a8) 0 empty
+ std::input_iterator_tag (0x0x7f68c3f6b1e0) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7f68c3f64410) 0 empty
+ std::bidirectional_iterator_tag (0x0x7f68c3f64478) 0 empty
+ std::forward_iterator_tag (0x0x7f68c3f644e0) 0 empty
+ std::input_iterator_tag (0x0x7f68c3f6b240) 0 empty
+
+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 (0x0x7f68c3f6b8a0) 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 (0x0x7f68c3f645b0) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+ std::exception (0x0x7f68c3f6ba80) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7f68c3f645b0)
+
+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 (0x0x7f68c3f6bc60) 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 (0x0x7f68c3f64618) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+ std::exception (0x0x7f68c3fa4060) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7f68c3f64618)
+
+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 (0x0x7f68c3f64680) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+ std::exception (0x0x7f68c3fa4240) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7f68c3f64680)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7f68c3fa4420) 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 (0x0x7f68c3fa4960) 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 (0x0x7f68c3f646e8) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+ std::exception (0x0x7f68c3fd9060) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f68c3f646e8)
+
+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 (0x0x7f68c3f64750) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+ std::bad_alloc (0x0x7f68c3f647b8) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7f68c3f64750)
+ std::exception (0x0x7f68c3fd9240) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7f68c3f647b8)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7f68c3fd9420) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7f68c3fd9ae0) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7f68c3fd9b40) 0 empty
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7f68c3c449c0) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7f68c3ccaea0) 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 (0x0x7f68c3ccaf00) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7f68c3d889c0) 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 (0x0x7f68c3ce79c0) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+ std::exception (0x0x7f68c3dd0f00) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7f68c3ce79c0)
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7f68c3aceba0) 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 (0x0x7f68c3acecc0) 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 (0x0x7f68c3af9000) 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 (0x0x7f68c3af9300) 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 (0x0x7f68c3af9420) 0 empty
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7f68c3b83ba0) 0
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7f68c38bb060) 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 (0x0x7f68c38bb120) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7f68c39ec8a0) 0
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7f68c39ec900) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7f68c39ec9c0) 0
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7f68c39eca20) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7f68c39eca80) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7f68c39ecae0) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7f68c39ecb40) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7f68c39ecba0) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7f68c39ecc00) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7f68c39ecc60) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7f68c39eccc0) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7f68c39ecf60) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7f68c3a21240) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7f68c3a21360) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7f68c3a213c0) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7f68c34c0240) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7f68c34c02a0) 0
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7f68c34c05a0) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7f68c34c0600) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7f68c34c0660) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7f68c34c06c0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7f68c30f3e40) 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 (0x0x7f68c30acb60) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+ std::exception (0x0x7f68c30f3f00) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f68c30acb60)
+
+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 (0x0x7f68c30acbc8) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+ std::logic_error (0x0x7f68c30acc30) 0
+ primary-for std::domain_error (0x0x7f68c30acbc8)
+ std::exception (0x0x7f68c30f3f60) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f68c30acc30)
+
+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 (0x0x7f68c30acc98) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+ std::logic_error (0x0x7f68c30acd00) 0
+ primary-for std::invalid_argument (0x0x7f68c30acc98)
+ std::exception (0x0x7f68c3143000) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f68c30acd00)
+
+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 (0x0x7f68c30acd68) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+ std::logic_error (0x0x7f68c30acdd0) 0
+ primary-for std::length_error (0x0x7f68c30acd68)
+ std::exception (0x0x7f68c3143060) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f68c30acdd0)
+
+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 (0x0x7f68c30ace38) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+ std::logic_error (0x0x7f68c30acea0) 0
+ primary-for std::out_of_range (0x0x7f68c30ace38)
+ std::exception (0x0x7f68c31430c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f68c30acea0)
+
+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 (0x0x7f68c30acf08) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+ std::exception (0x0x7f68c3143120) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f68c30acf08)
+
+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 (0x0x7f68c30acf70) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+ std::runtime_error (0x0x7f68c3161000) 0
+ primary-for std::range_error (0x0x7f68c30acf70)
+ std::exception (0x0x7f68c3143180) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f68c3161000)
+
+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 (0x0x7f68c3161068) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+ std::runtime_error (0x0x7f68c31610d0) 0
+ primary-for std::overflow_error (0x0x7f68c3161068)
+ std::exception (0x0x7f68c31431e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f68c31610d0)
+
+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 (0x0x7f68c3161138) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+ std::runtime_error (0x0x7f68c31611a0) 0
+ primary-for std::underflow_error (0x0x7f68c3161138)
+ std::exception (0x0x7f68c3143240) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f68c31611a0)
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7f68c31432a0) 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 (0x0x7f68c3161208) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+ std::exception (0x0x7f68c31434e0) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7f68c3161208)
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7f68c2e62ae0) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7f68c2e62b40) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7f68c2e62cc0) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7f68c2e62d80) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7f68c3161888) 0
+ std::__uses_alloc_base (0x0x7f68c2e62d20) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7f68c3001120) 0 empty
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7f68c2c4b480) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7f68c2c4b4e0) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7f68c2c4b780) 0
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7f68c2c4b540) 0 empty
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7f68c2c941e0) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7f68c2ccc3c0) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7f68c2d2f300) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7f68c2cfc478) 0
+ std::__atomic_flag_base (0x0x7f68c2d2f360) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7f68c2cfcc98) 0
+ QAtomicInteger<int> (0x0x7f68c2cfcd00) 0
+ QBasicAtomicInteger<int> (0x0x7f68c2895960) 0
+
+Class QtPrivate::QVersionTag
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QVersionTag (0x0x7f68c246d7e0) 0
+
+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 (0x0x7f68c22c4dd0) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+ std::exception (0x0x7f68c22e9f60) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7f68c22c4dd0)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7f68c2319060) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7f68c23190c0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7f68c23193c0) 0
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7f68c23beba0) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7f68c23bec60) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7f68c23ef180) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7f68c2416000) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7f68c24160c0) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7f68c2416120) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7f68c24164e0) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7f68c2416600) 0
+
+Class std::__detail::_Equality_base
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Equality_base (0x0x7f68c21fa5a0) 0 empty
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7f68c1c0b5a0) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7f68c1ae2bc8) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f68c1c0bd20) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7f68c1ae2c98) 0
+ std::_Bit_iterator_base (0x0x7f68c1ae2d00) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f68c183a300) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7f68c1ae2dd0) 0
+ std::_Bit_iterator_base (0x0x7f68c1ae2e38) 0
+ std::iterator<std::random_access_iterator_tag, bool> (0x0x7f68c183aae0) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7f68c164c000) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7f68c164c180) 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 (0x0x7f68c164c300) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7f68c164c480) 0 empty
+
+Class q20::identity::is_transparent
+ size=1 align=1
+ base size=0 base align=1
+q20::identity::is_transparent (0x0x7f68c164c900) 0 empty
+
+Class q20::identity
+ size=1 align=1
+ base size=0 base align=1
+q20::identity (0x0x7f68c164c8a0) 0 empty
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7f68c179bae0) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7f68c144c840) 0 empty
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7f68c1589540) 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 (0x0x7f68c1589900) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7f68c1589ba0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7f68c1589d80) 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 (0x0x7f68c15d9f00) 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 (0x0x7f68c162b2a0) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7f68c162ba80) 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 (0x0x7f68c15949c0) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+ std::runtime_error (0x0x7f68c1594a28) 0
+ primary-for std::system_error (0x0x7f68c15949c0)
+ std::exception (0x0x7f68c1255660) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f68c1594a28)
+
+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 (0x0x7f68c1594d68) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+ std::system_error (0x0x7f68c1594dd0) 0
+ primary-for std::ios_base::failure (0x0x7f68c1594d68)
+ std::runtime_error (0x0x7f68c1594e38) 0
+ primary-for std::system_error (0x0x7f68c1594dd0)
+ std::exception (0x0x7f68c1288de0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f68c1594e38)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7f68c1288e40) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7f68c1288ea0) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7f68c1288f00) 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 (0x0x7f68c1288d80) 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 (0x0x7f68c1347a80) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7f68c13ead80) 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> (0x0x7f68c0f4cdd0 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> (0x0x7f68c0f4cea0 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> (0x0x7f68c0fcd2d8 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> (0x0x7f68c0fcd3a8 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 (0x0x7f68c0fcd958) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+ std::exception (0x0x7f68c0ff9600) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7f68c0fcd958)
+
+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 (0x0x7f68c0fcd9c0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+ std::exception (0x0x7f68c0ff9720) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7f68c0fcd9c0)
+
+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 (0x0x7f68c0fcda28) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+ std::exception (0x0x7f68c0ff9840) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7f68c0fcda28)
+
+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 (0x0x7f68c0fcdaf8) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+ std::exception (0x0x7f68c0ff9960) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7f68c0fcdaf8)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7f68c1024240) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7f68c10245a0) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7f68c10248a0) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7f68c1024c00) 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 (0x0x7f68c0fcdc30) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+ std::exception (0x0x7f68c0ccf3c0) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7f68c0fcdc30)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7f68c0d41180) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7f68c0d416c0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7f68c0a854e0) 0
+
+Class Qt::Disambiguated_t
+ size=1 align=1
+ base size=0 base align=1
+Qt::Disambiguated_t (0x0x7f68c0754120) 0 empty
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7f68c04aa300) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7f68c04aa360) 0
+
+Class QtPrivate::QSlotObjectBase::Deleter
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QSlotObjectBase::Deleter (0x0x7f68c05a30c0) 0 empty
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7f68c05a3060) 0
+
+Class QtPrivate::SlotObjSharedPtr
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::SlotObjSharedPtr (0x0x7f68c03009c0) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7f68c03b84e0) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7f68c03b8540) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7f68c039b2d8) 0
+ QGenericArgument (0x0x7f68c03b87e0) 0
+
+Class QMetaMethodArgument
+ size=24 align=8
+ base size=24 base align=8
+QMetaMethodArgument (0x0x7f68c03b8c60) 0
+
+Class QMetaMethodReturnArgument
+ size=24 align=8
+ base size=24 base align=8
+QMetaMethodReturnArgument (0x0x7f68c03b8cc0) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7f68c03e5240) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7f68c03e52a0) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7f68c03e51e0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7f68c0079540) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7f68c0079ba0) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7f68c00a94e0) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7f68c0185120) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7f68c0185420) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7f68bfe3e900) 0 empty
+
+Class qxp::nonesuch
+ size=1 align=1
+ base size=0 base align=1
+qxp::nonesuch (0x0x7f68bfe3ea20) 0 empty
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7f68bff9af00) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7f68bfcd8720) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7f68bfb64360) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7f68bfbcea20) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7f68bf958a80) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7f68bf958d20) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7f68bf6d0060) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7f68bf6d00c0) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7f68bf705c00) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7f68bf4c2420) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7f68bf4c23c0) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7f68bf55fd80) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7f68bee7b060) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7f68bee49a28) 0
+ QtPrivate::ArgBase (0x0x7f68bee7b0c0) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7f68bee49af8) 0
+ QtPrivate::ArgBase (0x0x7f68bee7b300) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7f68bee7ba20) 0 empty
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7f68bef4c540) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7f68bef8e5a0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7f68bef8e660) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7f68bedde060) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7f68bea811e0) 0 empty
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7f68bea81f00) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7f68beaab960) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7f68bee08270) 0
+ QIODeviceBase (0x0x7f68beaab9c0) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7f68beaabb40) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7f68beb73540) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7f68beb734e0) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f68be929420) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7f68be8b19c0) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f68be9294e0) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7f68be8b1a90) 0
+ QtMetaContainerPrivate::QMetaContainerInterface (0x0x7f68be9295a0) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7f68bea000c0) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7f68be8b1e38) 0
+ QMetaContainer (0x0x7f68bea002a0) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7f68be8b1ea0) 0
+ QMetaContainer (0x0x7f68bea006c0) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7f68be6ccb40) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7f68be67ac30) 0
+ std::__detail::_List_node_base (0x0x7f68be6ccba0) 0
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7f68be7c3c60) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7f68be7dd000) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7f68be23f4e0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7f68be23f6c0) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7f68be2e9c00) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7f68be211ba0) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7f68bdb0b360) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7f68bdb0b3c0) 0
+
+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 (0x0x7f68bdb0b600) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7f68bdb0bf60) 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 (0x0x7f68bdb0bf00) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7f68bdc064e0) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7f68bdc06d80) 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 (0x0x7f68bdb2bf70) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+ QObject (0x0x7f68bdc06d20) 0
+ primary-for QAbstractAnimation (0x0x7f68bdb2bf70)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7f68bd843120) 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 (0x0x7f68bdb2b750) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+ QObject (0x0x7f68bd8430c0) 0
+ primary-for QAnimationDriver (0x0x7f68bdb2b750)
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7f68bd843300) 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 (0x0x7f68bd853000) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+ QObject (0x0x7f68bd8432a0) 0
+ primary-for QEventLoop (0x0x7f68bd853000)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7f68bd8439c0) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7f68bd843b40) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7f68bd843ba0) 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 (0x0x7f68bd8531a0) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+ QObject (0x0x7f68bd843ae0) 0
+ primary-for QAbstractEventDispatcher (0x0x7f68bd8531a0)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7f68bd8de420) 0 empty
+
+Class QHashPrivate::SpanConstants
+ size=1 align=1
+ base size=0 base align=1
+QHashPrivate::SpanConstants (0x0x7f68bd914180) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7f68bd6ba000) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7f68bd698f60) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7f68bd6bacc0) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7f68bd6bf3a8) 0
+ QStringConverterBase (0x0x7f68bd6bac60) 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 (0x0x7f68bd6bf410) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+ QIODeviceBase (0x0x7f68bd7216c0) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7f68bd7b2000) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7f68bd7b2720) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7f68bd7e9c60) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7f68bd816000) 0 empty
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7f68bd473120) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7f68bd4732a0) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7f68bd4ff360) 0 empty
+
+Class QVLABaseBase::free_deleter
+ size=1 align=1
+ base size=0 base align=1
+QVLABaseBase::free_deleter (0x0x7f68bd2e6480) 0 empty
+
+Class QVLABaseBase
+ size=24 align=8
+ base size=24 base align=8
+QVLABaseBase (0x0x7f68bd2e6420) 0
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7f68bd0bc8a0) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7f68bd093f70) 0
+ QIODeviceBase (0x0x7f68bd0bc840) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7f68bd1f2ea0) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7f68bd1f2f60) 0 empty
+
+Class QVariant::CborValueStandIn
+ size=24 align=8
+ base size=24 base align=8
+QVariant::CborValueStandIn (0x0x7f68bcfd1a20) 0
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7f68bcfd1a80) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7f68bcfd1b40) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7f68bcfd19c0) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7f68bcdb2660) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7f68bcdb28a0) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7f68bcdb2a80) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7f68bcdfba80) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7f68bca3fb40) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7f68bca90de0) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7f68bcaff4e0) 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 (0x0x7f68bcafe6e8) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+ QObject (0x0x7f68bcaff480) 0
+ primary-for QAbstractItemModel (0x0x7f68bcafe6e8)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7f68bc855420) 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 (0x0x7f68bcafebc8) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+ QAbstractItemModel (0x0x7f68bc85c000) 0
+ primary-for QAbstractTableModel (0x0x7f68bcafebc8)
+ QObject (0x0x7f68bc8553c0) 0
+ primary-for QAbstractItemModel (0x0x7f68bc85c000)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7f68bc855540) 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 (0x0x7f68bc85c068) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+ QAbstractItemModel (0x0x7f68bc85c0d0) 0
+ primary-for QAbstractListModel (0x0x7f68bc85c068)
+ QObject (0x0x7f68bc8554e0) 0
+ primary-for QAbstractItemModel (0x0x7f68bc85c0d0)
+
+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 (0x0x7f68bc922d20) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7f68bc922de0) 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 (0x0x7f68bc92a410) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+ QAbstractItemModel (0x0x7f68bc92a478) 0
+ primary-for QAbstractProxyModel (0x0x7f68bc92a410)
+ QObject (0x0x7f68bc922d80) 0
+ primary-for QAbstractItemModel (0x0x7f68bc92a478)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7f68bc96a000) 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 (0x0x7f68bc92a4e0) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+ QAbstractAnimation (0x0x7f68bc92a548) 0
+ primary-for QAnimationGroup (0x0x7f68bc92a4e0)
+ QObject (0x0x7f68bc922f60) 0
+ primary-for QAbstractAnimation (0x0x7f68bc92a548)
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7f68bc96a180) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7f68bc96a2a0) 0
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7f68bc648ae0) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7f68bc65d1a0) 0
+ QBasicMutex (0x0x7f68bc6b8840) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7f68bc6b8cc0) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7f68bc727720) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7f68bc727780) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7f68bc7277e0) 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 (0x0x7f68bc7276c0) 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 (0x0x7f68bc65d340) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+ QEvent (0x0x7f68bc762180) 0
+ primary-for QTimerEvent (0x0x7f68bc65d340)
+
+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 (0x0x7f68bc65d3a8) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+ QEvent (0x0x7f68bc762240) 0
+ primary-for QChildEvent (0x0x7f68bc65d3a8)
+
+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 (0x0x7f68bc65d410) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+ QEvent (0x0x7f68bc762420) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7f68bc65d410)
+
+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 (0x0x7f68bc65d478) 0
+ vptr=((& QDeferredDeleteEvent::_ZTV20QDeferredDeleteEvent) + 16)
+ QEvent (0x0x7f68bc7624e0) 0
+ primary-for QDeferredDeleteEvent (0x0x7f68bc65d478)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7f68bc762900) 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 (0x0x7f68bc65d618) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+ QObject (0x0x7f68bc7628a0) 0
+ primary-for QCoreApplication (0x0x7f68bc65d618)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7f68bc65d750) 0
+ QIterator<QMetaAssociation> (0x0x7f68bc65d7b8) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f68bc7d8180) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7f68bc65d8f0) 0
+ QConstIterator<QMetaAssociation> (0x0x7f68bc65d958) 0
+ QBaseIterator<QMetaAssociation> (0x0x7f68bc7d8720) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7f68bc65da28) 0
+ QIterable<QMetaAssociation> (0x0x7f68bc7d8c60) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7f68bc4f0c00) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7f68bc553cc0) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7f68bc588c00) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7f68bc5d17e0) 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 (0x0x7f68bc49fd20) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+ QObject (0x0x7f68bc5d1720) 0
+ primary-for QIODevice (0x0x7f68bc49fd20)
+ QIODeviceBase (0x0x7f68bc5d1780) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7f68bc5d1cc0) 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 (0x0x7f68bc5c6f08) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+ QIODevice (0x0x7f68bc49fd90) 0
+ primary-for QBuffer (0x0x7f68bc5c6f08)
+ QObject (0x0x7f68bc5d1c00) 0
+ primary-for QIODevice (0x0x7f68bc49fd90)
+ QIODeviceBase (0x0x7f68bc5d1c60) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7f68bc5d1ea0) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7f68bc5d1e40) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7f68bc22f240) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7f68bc22f1e0) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7f68bc266900) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7f68bc3c7540) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7f68bc3c75a0) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7f68bc3c74e0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7f68bc417000) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7f68bc067720) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7f68bc0b4a20) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7f68bc0b4a80) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7f68bc0b49c0) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7f68bc164360) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7f68bc1c8600) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7f68c688da80) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7f68c6933360) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7f68c6933420) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7f68c69335a0) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7f68c69c98a0) 0
+
+Class QUuid::Id128Bytes
+ size=16 align=16
+ base size=16 base align=16
+QUuid::Id128Bytes (0x0x7f68c674f0c0) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7f68c674f060) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7f68c67d4780) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7f68c67d4840) 0
+
+Class QCborValueConstRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueConstRef (0x0x7f68c64d2cc0) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7f68c64e12d8) 0
+ QCborValueConstRef (0x0x7f68c6526180) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7f68c6562cc0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7f68c6562d20) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7f68c6562c60) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7f68bae7d420) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7f68bae7d480) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7f68bae7d3c0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7f68baccca20) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7f68bad293c0) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7f68bad29c60) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7f68bad29e40) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7f68baddb720) 0
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7f68baa3e4e0) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7f68baa3e600) 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 (0x0x7f68baa30ea0) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+ QAbstractItemModel (0x0x7f68baa30f08) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7f68baa30ea0)
+ QObject (0x0x7f68baa3e5a0) 0
+ primary-for QAbstractItemModel (0x0x7f68baa30f08)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7f68baa3e780) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7f68baa3ec00) 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 (0x0x7f68baa30f70) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+ QIODevice (0x0x7f68baaa32a0) 0
+ primary-for QFileDevice (0x0x7f68baa30f70)
+ QObject (0x0x7f68baa3eb40) 0
+ primary-for QIODevice (0x0x7f68baaa32a0)
+ QIODeviceBase (0x0x7f68baa3eba0) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7f68baae9b40) 0
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7f68babb6120) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7f68babb65a0) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7f68ba81d8a0) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7f68ba81d840) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7f68ba845e40) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7f68ba8959c0) 0 empty
+
+Construction vtable for std::basic_istream<char> (0x0x7f68ba6eeea0 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> (0x0x7f68ba769138 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> (0x0x7f68ba75b310 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> (0x0x7f68ba7693a8 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> (0x0x7f68ba769478 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> (0x0x7f68ba769958 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> (0x0x7f68ba769bc8 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> (0x0x7f68ba75b700 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> (0x0x7f68ba769e38 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> (0x0x7f68ba769f08 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 (0x0x7f68ba7d1180) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7f68ba7d1300) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7f68ba7d1480) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7f68ba7d1780) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7f68ba7d1900) 0
+
+Class std::filesystem::__cxx11::path::__null_terminated
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__cxx11::path::__null_terminated (0x0x7f68ba4929c0) 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 (0x0x7f68ba492a80) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7f68ba492a20) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7f68ba4928a0) 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 (0x0x7f68ba304548) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+ std::system_error (0x0x7f68ba3045b0) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7f68ba304548)
+ std::runtime_error (0x0x7f68ba304618) 0
+ primary-for std::system_error (0x0x7f68ba3045b0)
+ std::exception (0x0x7f68ba30c720) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7f68ba304618)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7f68ba304f70) 0
+ std::filesystem::__cxx11::path (0x0x7f68ba388240) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7f68ba3aa4e0) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7f68ba05fcc0) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7f68ba0ac1e0) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7f68ba0f38a0) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7f68ba11b060) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7f68ba197180) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7f68b9e68300) 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 (0x0x7f68b9e62a28) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+ QFileDevice (0x0x7f68b9e62a90) 0
+ primary-for QFile (0x0x7f68b9e62a28)
+ QIODevice (0x0x7f68ba356bd0) 0
+ primary-for QFileDevice (0x0x7f68b9e62a90)
+ QObject (0x0x7f68b9e68240) 0
+ primary-for QIODevice (0x0x7f68ba356bd0)
+ QIODeviceBase (0x0x7f68b9e682a0) 0 empty
+
+Class QTimeZone::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone::ShortData (0x0x7f68b9e68c60) 0
+
+Class QTimeZone::Data
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone::Data (0x0x7f68b9e68cc0) 0
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7f68b9e68d20) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7f68b9e68c00) 0
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7f68b9f3ad80) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7f68b9ff32a0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7f68b9c97de0) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7f68b9d08360) 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 (0x0x7f68b9d90138) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+ std::exception (0x0x7f68b9d930c0) 0 nearly-empty
+ primary-for QException (0x0x7f68b9d90138)
+
+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 (0x0x7f68b9d901a0) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+ QException (0x0x7f68b9d90208) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7f68b9d901a0)
+ std::exception (0x0x7f68b9d93120) 0 nearly-empty
+ primary-for QException (0x0x7f68b9d90208)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7f68b9d932a0) 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 (0x0x7f68b9d93300) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7f68b9d93720) 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 (0x0x7f68b9d90340) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+ QObject (0x0x7f68b9d936c0) 0
+ primary-for QFileSelector (0x0x7f68b9d90340)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7f68b9d93900) 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 (0x0x7f68b9d903a8) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+ QObject (0x0x7f68b9d938a0) 0
+ primary-for QFileSystemWatcher (0x0x7f68b9d903a8)
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7f68b9d93a80) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7f68b9de20c0) 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 (0x0x7f68b9de2d20) 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 (0x0x7f68b9b508a0) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7f68b9b92c00) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7f68b9b54af8) 0
+ std::__mutex_base (0x0x7f68b9b92c60) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7f68b9b92e40) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7f68b9b92ea0) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7f68b9b92f00) 0 empty
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7f68b9bdb960) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7f68b9b54b60) 0
+ std::__recursive_mutex_base (0x0x7f68b9bdb9c0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7f68b9b61540) 0
+ std::__mutex_base (0x0x7f68b9bdbd80) 0
+ std::__timed_mutex_impl<std::timed_mutex> (0x0x7f68b9bdbde0) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7f68b9b615b0) 0
+ std::__recursive_mutex_base (0x0x7f68b9c181e0) 0
+ std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7f68b9c18240) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7f68b9848060) 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 (0x0x7f68b9848300) 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 (0x0x7f68b9848360) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7f68b98482a0) 0
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7f68b9a134e0) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7f68b9a138a0) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7f68b9a13900) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7f68b96a5e40) 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 (0x0x7f68b96a6618) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+ std::logic_error (0x0x7f68b96a6680) 0
+ primary-for std::future_error (0x0x7f68b96a6618)
+ std::exception (0x0x7f68b96e7540) 0 nearly-empty
+ primary-for std::logic_error (0x0x7f68b96a6680)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7f68b96e7c60) 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 (0x0x7f68b96e7c00) 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 (0x0x7f68b94586c0) 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 (0x0x7f68b9430ea0) 0
+ std::__at_thread_exit_elt (0x0x7f68b9458780) 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 (0x0x7f68b96e7de0) 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 (0x0x7f68b96e7ba0) 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 (0x0x7f68b9159208) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+ std::__future_base::_State_baseV2 (0x0x7f68b9157480) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7f68b9159208)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7f68b9157d20) 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 (0x0x7f68b9159548) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+ QObject (0x0x7f68b9157cc0) 0
+ primary-for QThread (0x0x7f68b9159548)
+
+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 (0x0x7f68b919a0c0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QRunnable::QGenericRunnable::HelperBase
+ size=8 align=8
+ base size=8 base align=8
+QRunnable::QGenericRunnable::HelperBase (0x0x7f68b919a240) 0
+
+Vtable for QRunnable::QGenericRunnable
+QRunnable::QGenericRunnable::_ZTVN9QRunnable16QGenericRunnableE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QRunnable16QGenericRunnableE)
+16 (int (*)(...))QRunnable::QGenericRunnable::run
+24 (int (*)(...))QRunnable::QGenericRunnable::~QGenericRunnable
+32 (int (*)(...))QRunnable::QGenericRunnable::~QGenericRunnable
+
+Class QRunnable::QGenericRunnable
+ size=24 align=8
+ base size=24 base align=8
+QRunnable::QGenericRunnable (0x0x7f68b91595b0) 0
+ vptr=((& QRunnable::QGenericRunnable::_ZTVN9QRunnable16QGenericRunnableE) + 16)
+ QRunnable (0x0x7f68b919a1e0) 0
+ primary-for QRunnable::QGenericRunnable (0x0x7f68b91595b0)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7f68b919aa20) 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 (0x0x7f68b91597b8) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+ QObject (0x0x7f68b919a9c0) 0
+ primary-for QThreadPool (0x0x7f68b91597b8)
+
+Class QtPrivate::UnwrapHandler
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::UnwrapHandler (0x0x7f68b8e8f540) 0 empty
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7f68c2158120) 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 (0x0x7f68baf032d8) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+ QObject (0x0x7f68c21580c0) 0
+ primary-for QFutureWatcherBase (0x0x7f68baf032d8)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7f68c1c3d600) 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 (0x0x7f68bee085b0) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f68c0338138) 0
+ primary-for QIdentityProxyModel (0x0x7f68bee085b0)
+ QAbstractItemModel (0x0x7f68c03389c0) 0
+ primary-for QAbstractProxyModel (0x0x7f68c0338138)
+ QObject (0x0x7f68c1c3d540) 0
+ primary-for QAbstractItemModel (0x0x7f68c03389c0)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7f68c1c3d900) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7f68c04f1300) 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 (0x0x7f68c23a92d8) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+ QObject (0x0x7f68c04f1240) 0
+ primary-for QItemSelectionModel (0x0x7f68c23a92d8)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7f68c2089410) 0
+ QList<QItemSelectionRange> (0x0x7f68c20893a8) 0
+ QListSpecialMethods<QItemSelectionRange> (0x0x7f68c2089750) 0 empty
+ QListSpecialMethodsBase<QItemSelectionRange> (0x0x7f68c003a6c0) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7f68be8a87e0) 0
+
+Class QJsonValueConstRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueConstRef (0x0x7f68bc9dee40) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7f68c1ee32d8) 0
+ QJsonValueConstRef (0x0x7f68bc519c60) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7f68bc0671e0) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7f68bc0674e0) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7f68bc067120) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7f68ba3d9cc0) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7f68ba3d9d20) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7f68ba289780) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7f68ba2897e0) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7f68ba289720) 0
+
+Class QtPrivate::QCaseSensitiveLatin1Hash
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QCaseSensitiveLatin1Hash (0x0x7f68b93fb780) 0 empty
+
+Class QtPrivate::QCaseInsensitiveLatin1Hash
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QCaseInsensitiveLatin1Hash (0x0x7f68b93fb840) 0 empty
+
+Class QLatin1StringMatcher
+ size=544 align=16
+ base size=544 base align=16
+QLatin1StringMatcher (0x0x7f68b93fbae0) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7f68b93fbcc0) 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 (0x0x7f68c1c5c2d8) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+ QObject (0x0x7f68b93fbc60) 0
+ primary-for QLibrary (0x0x7f68c1c5c2d8)
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7f68ba4d7480) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7f68ba4d7420) 0
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7f68be9753c0) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7f68c3838900) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7f68c38389c0) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7f68c15a1180) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7f68c1400c00) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7f68bfcab300) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7f68bfd5ec00) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7f68bfd5ee40) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7f68bfd5ede0) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7f68bf5d04e0) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7f68bf238ea0) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7f68be2580c0) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7f68be258420) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7f68be2583c0) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7f68bd0ee960) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7f68bd0ee900) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7f68bd006780) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7f68bd006720) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7f68bd006e40) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7f68bd006de0) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7f68bc577d20) 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 (0x0x7f68c1d5e270) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+ QObject (0x0x7f68bc577cc0) 0
+ primary-for QMimeData (0x0x7f68c1d5e270)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7f68bc577ea0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7f68bc077900) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7f68bc0779c0) 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 (0x0x7f68c1d65068) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+ QObject (0x0x7f68bc077960) 0
+ primary-for QObjectCleanupHandler (0x0x7f68c1d65068)
+
+Class QOperatingSystemVersionBase
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersionBase (0x0x7f68bc077a80) 0
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7f68c1d650d0) 0
+ QOperatingSystemVersionBase (0x0x7f68c69533c0) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7f68c652c180) 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 (0x0x7f68c1d69ea0) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f68c1d69f70) 0
+ primary-for QParallelAnimationGroup (0x0x7f68c1d69ea0)
+ QAbstractAnimation (0x0x7f68c1d6d000) 0
+ primary-for QAnimationGroup (0x0x7f68c1d69f70)
+ QObject (0x0x7f68c652c120) 0
+ primary-for QAbstractAnimation (0x0x7f68c1d6d000)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7f68c652c360) 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 (0x0x7f68c1d6d068) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+ QAbstractAnimation (0x0x7f68c1d6d0d0) 0
+ primary-for QPauseAnimation (0x0x7f68c1d6d068)
+ QObject (0x0x7f68c652c300) 0
+ primary-for QAbstractAnimation (0x0x7f68c1d6d0d0)
+
+Class QPermission
+ size=40 align=8
+ base size=40 base align=8
+QPermission (0x0x7f68c652c4e0) 0
+
+Class QLocationPermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QLocationPermission::ShortData (0x0x7f68c652c780) 0
+
+Class QLocationPermission::U
+ size=8 align=8
+ base size=8 base align=8
+QLocationPermission::U (0x0x7f68c652c7e0) 0
+
+Class QLocationPermission
+ size=8 align=8
+ base size=8 base align=8
+QLocationPermission (0x0x7f68c652c720) 0
+
+Class QCalendarPermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QCalendarPermission::ShortData (0x0x7f68ba4f4d80) 0
+
+Class QCalendarPermission::U
+ size=8 align=8
+ base size=8 base align=8
+QCalendarPermission::U (0x0x7f68ba4f4de0) 0
+
+Class QCalendarPermission
+ size=8 align=8
+ base size=8 base align=8
+QCalendarPermission (0x0x7f68ba4f4d20) 0
+
+Class QContactsPermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QContactsPermission::ShortData (0x0x7f68ba58d2a0) 0
+
+Class QContactsPermission::U
+ size=8 align=8
+ base size=8 base align=8
+QContactsPermission::U (0x0x7f68ba58d300) 0
+
+Class QContactsPermission
+ size=8 align=8
+ base size=8 base align=8
+QContactsPermission (0x0x7f68ba58d240) 0
+
+Class QBluetoothPermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QBluetoothPermission::ShortData (0x0x7f68c1493780) 0
+
+Class QBluetoothPermission::U
+ size=8 align=8
+ base size=8 base align=8
+QBluetoothPermission::U (0x0x7f68c14937e0) 0
+
+Class QBluetoothPermission
+ size=8 align=8
+ base size=8 base align=8
+QBluetoothPermission (0x0x7f68c1493720) 0
+
+Class QCameraPermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QCameraPermission::ShortData (0x0x7f68bca3c060) 0
+
+Class QCameraPermission::U
+ size=8 align=8
+ base size=8 base align=8
+QCameraPermission::U (0x0x7f68bca3c0c0) 0
+
+Class QCameraPermission
+ size=8 align=8
+ base size=8 base align=8
+QCameraPermission (0x0x7f68bca3c000) 0
+
+Class QMicrophonePermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QMicrophonePermission::ShortData (0x0x7f68c666a6c0) 0
+
+Class QMicrophonePermission::U
+ size=8 align=8
+ base size=8 base align=8
+QMicrophonePermission::U (0x0x7f68c666a720) 0
+
+Class QMicrophonePermission
+ size=8 align=8
+ base size=8 base align=8
+QMicrophonePermission (0x0x7f68c666a660) 0
+
+Class QPluginMetaData::Header
+ size=4 align=1
+ base size=4 base align=1
+QPluginMetaData::Header (0x0x7f68ba06e960) 0
+
+Class QPluginMetaData::MagicHeader
+ size=16 align=1
+ base size=16 base align=1
+QPluginMetaData::MagicHeader (0x0x7f68ba06e9c0) 0
+
+Class QPluginMetaData::ElfNoteHeader
+ size=32 align=8
+ base size=28 base align=8
+QPluginMetaData::ElfNoteHeader (0x0x7f68ba06ea20) 0
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7f68ba06e900) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7f68b9d07060) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7f68b945ce40) 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 (0x0x7f68c1a913a8) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+ QObject (0x0x7f68b945cde0) 0
+ primary-for QPluginLoader (0x0x7f68c1a913a8)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7f68b945cf00) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7f68bdab4a20) 0 empty
+
+Class QProcess::UnixProcessParameters
+ size=32 align=4
+ base size=32 base align=4
+QProcess::UnixProcessParameters (0x0x7f68bdab4a80) 0
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7f68bdab4cc0) 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 (0x0x7f68c1a97680) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+ QIODevice (0x0x7f68bc9b7690) 0
+ primary-for QProcess (0x0x7f68c1a97680)
+ QObject (0x0x7f68bdab4960) 0
+ primary-for QIODevice (0x0x7f68bc9b7690)
+ QIODeviceBase (0x0x7f68bdab49c0) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7f68bfdef5a0) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7f68bfdef6c0) 0
+
+Class QUntypedPropertyData::InheritsQUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData::InheritsQUntypedPropertyData (0x0x7f68bdf18900) 0 empty
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7f68bdf188a0) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7f68bdf18960) 0
+
+Class QtPrivate::MSVCWorkAround
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::MSVCWorkAround (0x0x7f68bdf189c0) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7f68bdf18a20) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7f68bdf18f60) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7f68bdf96000) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7f68bdf96780) 0
+
+Class QScopedPropertyUpdateGroup
+ size=1 align=1
+ base size=0 base align=1
+QScopedPropertyUpdateGroup (0x0x7f68bdf96c00) 0 empty
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7f68bdc8a240) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7f68bdc8a5a0) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7f68bdc8a6c0) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7f68bdc8a900) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7f68c1a97b60) 0
+ QPropertyObserverBase (0x0x7f68bdc8aa80) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7f68c1a9b0d0) 0
+ QPropertyObserver (0x0x7f68c1a9b138) 0
+ QPropertyObserverBase (0x0x7f68bde14360) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7f68bcfc82a0) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7f68bc1b1720) 0
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7f68bdd6e780) 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 (0x0x7f68c0369b60) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+ QAbstractAnimation (0x0x7f68c039b6e8) 0
+ primary-for QVariantAnimation (0x0x7f68c0369b60)
+ QObject (0x0x7f68bdd6e720) 0
+ primary-for QAbstractAnimation (0x0x7f68c039b6e8)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7f68bdd6e9c0) 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 (0x0x7f68c039b820) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+ QVariantAnimation (0x0x7f68c039b888) 0
+ primary-for QPropertyAnimation (0x0x7f68c039b820)
+ QAbstractAnimation (0x0x7f68c039b8f0) 0
+ primary-for QVariantAnimation (0x0x7f68c039b888)
+ QObject (0x0x7f68bdd6e960) 0
+ primary-for QAbstractAnimation (0x0x7f68c039b8f0)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7f68b8f95120) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7f68b8ff45a0) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7f68b8ff4540) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7f68b8ca1d20) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7f68b8d46a20) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7f68b8d46a80) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7f68b8d469c0) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7f68bf32a2d8) 0
+ QRandomGenerator (0x0x7f68b8d6ed20) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7f68b8d7e960) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7f68b8da81e0) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7f68b8da8660) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7f68b8da8ae0) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7f68b8dd1660) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7f68b8dfd240) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7f68b8a41120) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7f68b8a71d80) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7f68b8a8e0c0) 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 (0x0x7f68ba22f208) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+ QFileDevice (0x0x7f68ba29d0d0) 0
+ primary-for QSaveFile (0x0x7f68ba22f208)
+ QIODevice (0x0x7f68b8ddbaf0) 0
+ primary-for QFileDevice (0x0x7f68ba29d0d0)
+ QObject (0x0x7f68b8a8e000) 0
+ primary-for QIODevice (0x0x7f68b8ddbaf0)
+ QIODeviceBase (0x0x7f68b8a8e060) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7f68b8a8e420) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7f68b8a8e840) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7f68b8ac5120) 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 (0x0x7f68ba29dc30) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+ QAnimationGroup (0x0x7f68ba304000) 0
+ primary-for QSequentialAnimationGroup (0x0x7f68ba29dc30)
+ QAbstractAnimation (0x0x7f68ba304068) 0
+ primary-for QAnimationGroup (0x0x7f68ba304000)
+ QObject (0x0x7f68b8ac50c0) 0
+ primary-for QAbstractAnimation (0x0x7f68ba304068)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7f68ba304f08) 0
+ QIterator<QMetaSequence> (0x0x7f68ba304e38) 0
+ QBaseIterator<QMetaSequence> (0x0x7f68b8ac5480) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7f68ba396b60) 0
+ QConstIterator<QMetaSequence> (0x0x7f68ba396dd0) 0
+ QBaseIterator<QMetaSequence> (0x0x7f68b8ac5a20) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7f68ba396e38) 0
+ QIterable<QMetaSequence> (0x0x7f68b8ac5f60) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7f68b8b34840) 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 (0x0x7f68b8b33bc8) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+ QObject (0x0x7f68b8b347e0) 0
+ primary-for QSettings (0x0x7f68b8b33bc8)
+
+Class QNativeIpcKey::TypeAndFlags
+ size=8 align=4
+ base size=8 base align=4
+QNativeIpcKey::TypeAndFlags (0x0x7f68b8b34c60) 0
+
+Class QNativeIpcKey
+ size=40 align=8
+ base size=40 base align=8
+QNativeIpcKey (0x0x7f68b8b34c00) 0
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7f68b8b8de40) 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 (0x0x7f68b8b928f0) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+ QObject (0x0x7f68b8b8dde0) 0
+ primary-for QSharedMemory (0x0x7f68b8b928f0)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7f68b8ba0240) 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 (0x0x7f68b8b92958) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+ QObject (0x0x7f68b8ba01e0) 0
+ primary-for QSignalMapper (0x0x7f68b8b92958)
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7f68b80558a0) 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 (0x0x7f68b80377b8) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+ QObject (0x0x7f68b8055840) 0
+ primary-for QSocketNotifier (0x0x7f68b80377b8)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7f68b8055a20) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7f68b8095a80) 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 (0x0x7f68b8092820) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f68b8092888) 0
+ primary-for QSortFilterProxyModel (0x0x7f68b8092820)
+ QAbstractItemModel (0x0x7f68b80928f0) 0
+ primary-for QAbstractProxyModel (0x0x7f68b8092888)
+ QObject (0x0x7f68b8095a20) 0
+ primary-for QAbstractItemModel (0x0x7f68b80928f0)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7f68b8095e40) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7f68b80b6900) 0
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7f68b8124340) 0
+ QStringConverter (0x0x7f68b81243a8) 0
+ QStringConverterBase (0x0x7f68b8114960) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7f68b8124410) 0
+ QStringConverter (0x0x7f68b8124478) 0
+ QStringConverterBase (0x0x7f68b812e7e0) 0 empty
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7f68b81415a0) 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 (0x0x7f68b81244e0) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+ QAbstractListModel (0x0x7f68b8124548) 0
+ primary-for QStringListModel (0x0x7f68b81244e0)
+ QAbstractItemModel (0x0x7f68b81245b0) 0
+ primary-for QAbstractListModel (0x0x7f68b8124548)
+ QObject (0x0x7f68b8141540) 0
+ primary-for QAbstractItemModel (0x0x7f68b81245b0)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7f68b8141660) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7f68b81418a0) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7f68b8141cc0) 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 (0x0x7f68b8124618) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+ QFile (0x0x7f68b8124680) 0
+ primary-for QTemporaryFile (0x0x7f68b8124618)
+ QFileDevice (0x0x7f68b81246e8) 0
+ primary-for QFile (0x0x7f68b8124680)
+ QIODevice (0x0x7f68b811e690) 0
+ primary-for QFileDevice (0x0x7f68b81246e8)
+ QObject (0x0x7f68b8141c00) 0
+ primary-for QIODevice (0x0x7f68b811e690)
+ QIODeviceBase (0x0x7f68b8141c60) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7f68b8141f00) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7f68b8180660) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7f68b8180d20) 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 (0x0x7f68b8124888) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+ QObject (0x0x7f68b8180cc0) 0
+ primary-for QTimeLine (0x0x7f68b8124888)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7f68b8180f00) 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 (0x0x7f68b81248f0) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+ QObject (0x0x7f68b8180ea0) 0
+ primary-for QTimer (0x0x7f68b81248f0)
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7f68b81c4720) 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 (0x0x7f68b81249c0) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+ QObject (0x0x7f68b81c46c0) 0
+ primary-for QTranslator (0x0x7f68b81249c0)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7f68b81c4900) 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 (0x0x7f68b8124a28) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+ QAbstractProxyModel (0x0x7f68b8124a90) 0
+ primary-for QTransposeProxyModel (0x0x7f68b8124a28)
+ QAbstractItemModel (0x0x7f68b8124af8) 0
+ primary-for QAbstractProxyModel (0x0x7f68b8124a90)
+ QObject (0x0x7f68b81c48a0) 0
+ primary-for QAbstractItemModel (0x0x7f68b8124af8)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7f68b81c4a80) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7f68b7e3f660) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7f68b7e3f780) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7f68b7e6d6c0) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7f68b7e9a680) 0
+ QList<QXmlStreamAttribute> (0x0x7f68b7e9a6e8) 0
+ QListSpecialMethods<QXmlStreamAttribute> (0x0x7f68b7e9a750) 0 empty
+ QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7f68b7e99840) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7f68b7ee7060) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7f68b7efc7e0) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7f68b7f15f00) 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 (0x0x7f68b7f41780) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader::PrivateConstructorTag
+ size=1 align=1
+ base size=0 base align=1
+QXmlStreamReader::PrivateConstructorTag (0x0x7f68b7f41840) 0 empty
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7f68b7f417e0) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7f68b7f41ea0) 0
+
+Class QDomImplementation
+ size=8 align=8
+ base size=8 base align=8
+QDomImplementation (0x0x7f68b7f80720) 0
+
+Class QDomNode
+ size=8 align=8
+ base size=8 base align=8
+QDomNode (0x0x7f68b7f80780) 0
+
+Class QDomNodeList
+ size=8 align=8
+ base size=8 base align=8
+QDomNodeList (0x0x7f68b7f807e0) 0
+
+Class QDomDocumentType
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentType (0x0x7f68b7f457b8) 0
+ QDomNode (0x0x7f68b7f809c0) 0
+
+Class QDomDocument::ParseResult
+ size=40 align=8
+ base size=40 base align=8
+QDomDocument::ParseResult (0x0x7f68b7f80ae0) 0
+
+Class QDomDocument
+ size=8 align=8
+ base size=8 base align=8
+QDomDocument (0x0x7f68b7f45820) 0
+ QDomNode (0x0x7f68b7f80a80) 0
+
+Class QDomNamedNodeMap
+ size=8 align=8
+ base size=8 base align=8
+QDomNamedNodeMap (0x0x7f68b7f80e40) 0
+
+Class QDomDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentFragment (0x0x7f68b7f459c0) 0
+ QDomNode (0x0x7f68b7fe5000) 0
+
+Class QDomCharacterData
+ size=8 align=8
+ base size=8 base align=8
+QDomCharacterData (0x0x7f68b7f45a28) 0
+ QDomNode (0x0x7f68b7fe50c0) 0
+
+Class QDomAttr
+ size=8 align=8
+ base size=8 base align=8
+QDomAttr (0x0x7f68b7f45a90) 0
+ QDomNode (0x0x7f68b7fe5120) 0
+
+Class QDomElement
+ size=8 align=8
+ base size=8 base align=8
+QDomElement (0x0x7f68b7f45af8) 0
+ QDomNode (0x0x7f68b7fe51e0) 0
+
+Class QDomText
+ size=8 align=8
+ base size=8 base align=8
+QDomText (0x0x7f68b7f45b60) 0
+ QDomCharacterData (0x0x7f68b7f45bc8) 0
+ QDomNode (0x0x7f68b7fe5420) 0
+
+Class QDomComment
+ size=8 align=8
+ base size=8 base align=8
+QDomComment (0x0x7f68b7f45c30) 0
+ QDomCharacterData (0x0x7f68b7f45c98) 0
+ QDomNode (0x0x7f68b7fe54e0) 0
+
+Class QDomCDATASection
+ size=8 align=8
+ base size=8 base align=8
+QDomCDATASection (0x0x7f68b7f45d00) 0
+ QDomText (0x0x7f68b7f45d68) 0
+ QDomCharacterData (0x0x7f68b7f45dd0) 0
+ QDomNode (0x0x7f68b7fe55a0) 0
+
+Class QDomNotation
+ size=8 align=8
+ base size=8 base align=8
+QDomNotation (0x0x7f68b7f45e38) 0
+ QDomNode (0x0x7f68b7fe5660) 0
+
+Class QDomEntity
+ size=8 align=8
+ base size=8 base align=8
+QDomEntity (0x0x7f68b7f45ea0) 0
+ QDomNode (0x0x7f68b7fe5720) 0
+
+Class QDomEntityReference
+ size=8 align=8
+ base size=8 base align=8
+QDomEntityReference (0x0x7f68b7f45f08) 0
+ QDomNode (0x0x7f68b7fe57e0) 0
+
+Class QDomProcessingInstruction
+ size=8 align=8
+ base size=8 base align=8
+QDomProcessingInstruction (0x0x7f68b7f45f70) 0
+ QDomNode (0x0x7f68b7fe58a0) 0
+
+Class QtConcurrent::TaskStartParameters
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::TaskStartParameters (0x0x7f68b7fe5ae0) 0
+
+Class QtConcurrent::Median
+ size=72 align=8
+ base size=70 base align=8
+QtConcurrent::Median (0x0x7f68b7c20d80) 0
+
+Class QtConcurrent::ThreadEngineBarrier
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::ThreadEngineBarrier (0x0x7f68b7c4a1e0) 0
+
+Vtable for QtConcurrent::ThreadEngineBase
+QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN12QtConcurrent16ThreadEngineBaseE)
+16 (int (*)(...))QtConcurrent::ThreadEngineBase::run
+24 0
+32 0
+40 (int (*)(...))QtConcurrent::ThreadEngineBase::start
+48 (int (*)(...))QtConcurrent::ThreadEngineBase::finish
+56 (int (*)(...))QtConcurrent::ThreadEngineBase::threadFunction
+64 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldStartThread
+72 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldThrottleThread
+80 (int (*)(...))__cxa_pure_virtual
+
+Class QtConcurrent::ThreadEngineBase
+ size=64 align=8
+ base size=64 base align=8
+QtConcurrent::ThreadEngineBase (0x0x7f68b8010548) 0
+ vptr=((& QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE) + 16)
+ QRunnable (0x0x7f68b7c4a2a0) 0
+ primary-for QtConcurrent::ThreadEngineBase (0x0x7f68b8010548)
+
+Class QtConcurrent::BlockSizeManager
+ size=176 align=8
+ base size=172 base align=8
+QtConcurrent::BlockSizeManager (0x0x7f68b7c4ade0) 0
+
+Class QtPrivate::PushBackWrapper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::PushBackWrapper (0x0x7f68b7c7eb40) 0 empty
+
+Class QDBusAbstractAdaptor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractAdaptor::QPrivateSignal (0x0x7f68b7d76000) 0 empty
+
+Vtable for QDBusAbstractAdaptor
+QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDBusAbstractAdaptor)
+16 (int (*)(...))QDBusAbstractAdaptor::metaObject
+24 (int (*)(...))QDBusAbstractAdaptor::qt_metacast
+32 (int (*)(...))QDBusAbstractAdaptor::qt_metacall
+40 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+48 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractAdaptor
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractAdaptor (0x0x7f68b7d49138) 0
+ vptr=((& QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor) + 16)
+ QObject (0x0x7f68b7d4ff60) 0
+ primary-for QDBusAbstractAdaptor (0x0x7f68b7d49138)
+
+Class QDBusError
+ size=64 align=8
+ base size=64 base align=8
+QDBusError (0x0x7f68b7d76180) 0
+
+Class QDBusMessage
+ size=8 align=8
+ base size=8 base align=8
+QDBusMessage (0x0x7f68b7dbbba0) 0
+
+Class QDBusObjectPath
+ size=24 align=8
+ base size=24 base align=8
+QDBusObjectPath (0x0x7f68b7dfb660) 0
+
+Class QDBusSignature
+ size=24 align=8
+ base size=24 base align=8
+QDBusSignature (0x0x7f68b7a1cd20) 0
+
+Class QDBusVariant
+ size=32 align=8
+ base size=32 base align=8
+QDBusVariant (0x0x7f68b7a53300) 0
+
+Class QDBusConnection
+ size=8 align=8
+ base size=8 base align=8
+QDBusConnection (0x0x7f68b7a9a300) 0
+
+Class QDBusPendingCall
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingCall (0x0x7f68b7b1b180) 0
+
+Class QDBusPendingCallWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusPendingCallWatcher::QPrivateSignal (0x0x7f68b7b41f00) 0 empty
+
+Vtable for QDBusPendingCallWatcher
+QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QDBusPendingCallWatcher)
+16 (int (*)(...))QDBusPendingCallWatcher::metaObject
+24 (int (*)(...))QDBusPendingCallWatcher::qt_metacast
+32 (int (*)(...))QDBusPendingCallWatcher::qt_metacall
+40 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+48 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusPendingCallWatcher
+ size=24 align=8
+ base size=24 base align=8
+QDBusPendingCallWatcher (0x0x7f68b7b452a0) 0
+ vptr=((& QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher) + 16)
+ QObject (0x0x7f68b7b41e40) 0
+ primary-for QDBusPendingCallWatcher (0x0x7f68b7b452a0)
+ QDBusPendingCall (0x0x7f68b7b41ea0) 16
+
+Vtable for QDBusAbstractInterfaceBase
+QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDBusAbstractInterfaceBase)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QDBusAbstractInterfaceBase::qt_metacall
+40 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+48 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterfaceBase (0x0x7f68b7b494e0) 0
+ vptr=((& QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase) + 16)
+ QObject (0x0x7f68b7b550c0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f68b7b494e0)
+
+Class QDBusAbstractInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractInterface::QPrivateSignal (0x0x7f68b7b55240) 0 empty
+
+Vtable for QDBusAbstractInterface
+QDBusAbstractInterface::_ZTV22QDBusAbstractInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QDBusAbstractInterface)
+16 (int (*)(...))QDBusAbstractInterface::metaObject
+24 (int (*)(...))QDBusAbstractInterface::qt_metacast
+32 (int (*)(...))QDBusAbstractInterface::qt_metacall
+40 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+48 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusAbstractInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterface (0x0x7f68b7b49548) 0
+ vptr=((& QDBusAbstractInterface::_ZTV22QDBusAbstractInterface) + 16)
+ QDBusAbstractInterfaceBase (0x0x7f68b7b495b0) 0
+ primary-for QDBusAbstractInterface (0x0x7f68b7b49548)
+ QObject (0x0x7f68b7b551e0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f68b7b495b0)
+
+Class QDBusArgument
+ size=8 align=8
+ base size=8 base align=8
+QDBusArgument (0x0x7f68b7b55600) 0
+
+Class QDBusPendingReplyBase
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingReplyBase (0x0x7f68b78e9068) 0
+ QDBusPendingCall (0x0x7f68b78d4780) 0
+
+Class QDBusConnectionInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusConnectionInterface::QPrivateSignal (0x0x7f68b7922840) 0 empty
+
+Vtable for QDBusConnectionInterface
+QDBusConnectionInterface::_ZTV24QDBusConnectionInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QDBusConnectionInterface)
+16 (int (*)(...))QDBusConnectionInterface::metaObject
+24 (int (*)(...))QDBusConnectionInterface::qt_metacast
+32 (int (*)(...))QDBusConnectionInterface::qt_metacall
+40 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+48 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusConnectionInterface::connectNotify
+104 (int (*)(...))QDBusConnectionInterface::disconnectNotify
+
+Class QDBusConnectionInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusConnectionInterface (0x0x7f68b78e94e0) 0
+ vptr=((& QDBusConnectionInterface::_ZTV24QDBusConnectionInterface) + 16)
+ QDBusAbstractInterface (0x0x7f68b78e9548) 0
+ primary-for QDBusConnectionInterface (0x0x7f68b78e94e0)
+ QDBusAbstractInterfaceBase (0x0x7f68b78e95b0) 0
+ primary-for QDBusAbstractInterface (0x0x7f68b78e9548)
+ QObject (0x0x7f68b79227e0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f68b78e95b0)
+
+Class QDBusContext
+ size=8 align=8
+ base size=8 base align=8
+QDBusContext (0x0x7f68b7922cc0) 0
+
+Vtable for QDBusInterface
+QDBusInterface::_ZTV14QDBusInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDBusInterface)
+16 (int (*)(...))QDBusInterface::metaObject
+24 (int (*)(...))QDBusInterface::qt_metacast
+32 (int (*)(...))QDBusInterface::qt_metacall
+40 (int (*)(...))QDBusInterface::~QDBusInterface
+48 (int (*)(...))QDBusInterface::~QDBusInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusInterface (0x0x7f68b78e9680) 0
+ vptr=((& QDBusInterface::_ZTV14QDBusInterface) + 16)
+ QDBusAbstractInterface (0x0x7f68b78e96e8) 0
+ primary-for QDBusInterface (0x0x7f68b78e9680)
+ QDBusAbstractInterfaceBase (0x0x7f68b78e9750) 0
+ primary-for QDBusAbstractInterface (0x0x7f68b78e96e8)
+ QObject (0x0x7f68b7922d20) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7f68b78e9750)
+
+Class QDBusMetaType
+ size=1 align=1
+ base size=0 base align=1
+QDBusMetaType (0x0x7f68b7922e40) 0 empty
+
+Class QDBusServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServer::QPrivateSignal (0x0x7f68b7950120) 0 empty
+
+Vtable for QDBusServer
+QDBusServer::_ZTV11QDBusServer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDBusServer)
+16 (int (*)(...))QDBusServer::metaObject
+24 (int (*)(...))QDBusServer::qt_metacast
+32 (int (*)(...))QDBusServer::qt_metacall
+40 (int (*)(...))QDBusServer::~QDBusServer
+48 (int (*)(...))QDBusServer::~QDBusServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServer
+ size=24 align=8
+ base size=24 base align=8
+QDBusServer (0x0x7f68b78e97b8) 0
+ vptr=((& QDBusServer::_ZTV11QDBusServer) + 16)
+ QObject (0x0x7f68b79500c0) 0
+ primary-for QDBusServer (0x0x7f68b78e97b8)
+
+Class QDBusServiceWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServiceWatcher::QPrivateSignal (0x0x7f68b7950240) 0 empty
+
+Vtable for QDBusServiceWatcher
+QDBusServiceWatcher::_ZTV19QDBusServiceWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDBusServiceWatcher)
+16 (int (*)(...))QDBusServiceWatcher::metaObject
+24 (int (*)(...))QDBusServiceWatcher::qt_metacast
+32 (int (*)(...))QDBusServiceWatcher::qt_metacall
+40 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+48 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServiceWatcher
+ size=16 align=8
+ base size=16 base align=8
+QDBusServiceWatcher (0x0x7f68b78e9820) 0
+ vptr=((& QDBusServiceWatcher::_ZTV19QDBusServiceWatcher) + 16)
+ QObject (0x0x7f68b79501e0) 0
+ primary-for QDBusServiceWatcher (0x0x7f68b78e9820)
+
+Class QDBusUnixFileDescriptor
+ size=8 align=8
+ base size=8 base align=8
+QDBusUnixFileDescriptor (0x0x7f68b7950900) 0
+
+Class QDBusVirtualObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusVirtualObject::QPrivateSignal (0x0x7f68b79c8540) 0 empty
+
+Vtable for QDBusVirtualObject
+QDBusVirtualObject::_ZTV18QDBusVirtualObject: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QDBusVirtualObject)
+16 (int (*)(...))QDBusVirtualObject::metaObject
+24 (int (*)(...))QDBusVirtualObject::qt_metacast
+32 (int (*)(...))QDBusVirtualObject::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 QDBusVirtualObject
+ size=16 align=8
+ base size=16 base align=8
+QDBusVirtualObject (0x0x7f68b79ce3a8) 0
+ vptr=((& QDBusVirtualObject::_ZTV18QDBusVirtualObject) + 16)
+ QObject (0x0x7f68b79c84e0) 0
+ primary-for QDBusVirtualObject (0x0x7f68b79ce3a8)
+
+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 (0x0x7f68b79c8600) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7f68b79ed0c0) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7f68b763c300) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7f68b763c2a0) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7f68b7706840) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7f68b77804e0) 0
+ QList<QPoint> (0x0x7f68b7780548) 0
+ QListSpecialMethods<QPoint> (0x0x7f68b77805b0) 0 empty
+ QListSpecialMethodsBase<QPoint> (0x0x7f68b7788600) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7f68b78095b0) 0
+ QList<QPointF> (0x0x7f68b7809618) 0
+ QListSpecialMethods<QPointF> (0x0x7f68b7809680) 0 empty
+ QListSpecialMethodsBase<QPointF> (0x0x7f68b78172a0) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7f68b7483d20) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7f68b7483cc0) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7f68b74c9ea0) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7f68b74c9e40) 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 (0x0x7f68b7509d00) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+ QPaintDevice (0x0x7f68b751cb40) 0
+ primary-for QImage (0x0x7f68b7509d00)
+
+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 (0x0x7f68b757e8f0) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+ QPaintDevice (0x0x7f68b7575f60) 0
+ primary-for QPixmap (0x0x7f68b757e8f0)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7f68b75c4e40) 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 (0x0x7f68b75fdd20) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7f68b721c3c0) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7f68b7269240) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7f68b72a32a0) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7f68b7326f00) 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 (0x0x7f68b7331208) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+ QObject (0x0x7f68b7326ea0) 0
+ primary-for QScreen (0x0x7f68b7331208)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7f68b7358180) 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 (0x0x7f68b7331270) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+ QObject (0x0x7f68b7358120) 0
+ primary-for QInputDevice (0x0x7f68b7331270)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7f68b7358d80) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7f68b73b87e0) 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 (0x0x7f68b73c5000) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+ QInputDevice (0x0x7f68b73c5068) 0
+ primary-for QPointingDevice (0x0x7f68b73c5000)
+ QObject (0x0x7f68b73b8780) 0
+ primary-for QInputDevice (0x0x7f68b73c5068)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7f68b73fd000) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7f68b70400c0) 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 (0x0x7f68b706daf8) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+ QEvent (0x0x7f68b7066cc0) 0
+ primary-for QInputEvent (0x0x7f68b706daf8)
+
+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 (0x0x7f68b706db60) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+ QInputEvent (0x0x7f68b706dbc8) 0
+ primary-for QPointerEvent (0x0x7f68b706db60)
+ QEvent (0x0x7f68b7066f60) 0
+ primary-for QInputEvent (0x0x7f68b706dbc8)
+
+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 (0x0x7f68b706df70) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+ QPointerEvent (0x0x7f68b706df08) 0
+ primary-for QSinglePointEvent (0x0x7f68b706df70)
+ QInputEvent (0x0x7f68b70d3000) 0
+ primary-for QPointerEvent (0x0x7f68b706df08)
+ QEvent (0x0x7f68b708a600) 0
+ primary-for QInputEvent (0x0x7f68b70d3000)
+
+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 (0x0x7f68b70d3068) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+ QSinglePointEvent (0x0x7f68b70d30d0) 0
+ primary-for QEnterEvent (0x0x7f68b70d3068)
+ QPointerEvent (0x0x7f68b70d3138) 0
+ primary-for QSinglePointEvent (0x0x7f68b70d30d0)
+ QInputEvent (0x0x7f68b70d31a0) 0
+ primary-for QPointerEvent (0x0x7f68b70d3138)
+ QEvent (0x0x7f68b708a900) 0
+ primary-for QInputEvent (0x0x7f68b70d31a0)
+
+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 (0x0x7f68b70d3208) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+ QSinglePointEvent (0x0x7f68b70d3270) 0
+ primary-for QMouseEvent (0x0x7f68b70d3208)
+ QPointerEvent (0x0x7f68b70d32d8) 0
+ primary-for QSinglePointEvent (0x0x7f68b70d3270)
+ QInputEvent (0x0x7f68b70d3340) 0
+ primary-for QPointerEvent (0x0x7f68b70d32d8)
+ QEvent (0x0x7f68b708acc0) 0
+ primary-for QInputEvent (0x0x7f68b70d3340)
+
+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 (0x0x7f68b70d33a8) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+ QSinglePointEvent (0x0x7f68b70d3410) 0
+ primary-for QHoverEvent (0x0x7f68b70d33a8)
+ QPointerEvent (0x0x7f68b70d3478) 0
+ primary-for QSinglePointEvent (0x0x7f68b70d3410)
+ QInputEvent (0x0x7f68b70d34e0) 0
+ primary-for QPointerEvent (0x0x7f68b70d3478)
+ QEvent (0x0x7f68b70f8060) 0
+ primary-for QInputEvent (0x0x7f68b70d34e0)
+
+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 (0x0x7f68b70d3548) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+ QSinglePointEvent (0x0x7f68b70d35b0) 0
+ primary-for QWheelEvent (0x0x7f68b70d3548)
+ QPointerEvent (0x0x7f68b70d3618) 0
+ primary-for QSinglePointEvent (0x0x7f68b70d35b0)
+ QInputEvent (0x0x7f68b70d3680) 0
+ primary-for QPointerEvent (0x0x7f68b70d3618)
+ QEvent (0x0x7f68b70f82a0) 0
+ primary-for QInputEvent (0x0x7f68b70d3680)
+
+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 (0x0x7f68b70d36e8) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+ QSinglePointEvent (0x0x7f68b70d3750) 0
+ primary-for QTabletEvent (0x0x7f68b70d36e8)
+ QPointerEvent (0x0x7f68b70d37b8) 0
+ primary-for QSinglePointEvent (0x0x7f68b70d3750)
+ QInputEvent (0x0x7f68b70d3820) 0
+ primary-for QPointerEvent (0x0x7f68b70d37b8)
+ QEvent (0x0x7f68b70f85a0) 0
+ primary-for QInputEvent (0x0x7f68b70d3820)
+
+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 (0x0x7f68b70d3888) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+ QSinglePointEvent (0x0x7f68b70d38f0) 0
+ primary-for QNativeGestureEvent (0x0x7f68b70d3888)
+ QPointerEvent (0x0x7f68b70d3958) 0
+ primary-for QSinglePointEvent (0x0x7f68b70d38f0)
+ QInputEvent (0x0x7f68b70d39c0) 0
+ primary-for QPointerEvent (0x0x7f68b70d3958)
+ QEvent (0x0x7f68b70f8c60) 0
+ primary-for QInputEvent (0x0x7f68b70d39c0)
+
+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 (0x0x7f68b70d3a28) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+ QInputEvent (0x0x7f68b70d3a90) 0
+ primary-for QKeyEvent (0x0x7f68b70d3a28)
+ QEvent (0x0x7f68b712b060) 0
+ primary-for QInputEvent (0x0x7f68b70d3a90)
+
+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 (0x0x7f68b70d3af8) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+ QEvent (0x0x7f68b712b480) 0
+ primary-for QFocusEvent (0x0x7f68b70d3af8)
+
+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 (0x0x7f68b70d3b60) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+ QEvent (0x0x7f68b712b5a0) 0
+ primary-for QPaintEvent (0x0x7f68b70d3b60)
+
+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 (0x0x7f68b70d3bc8) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+ QEvent (0x0x7f68b712b6c0) 0
+ primary-for QMoveEvent (0x0x7f68b70d3bc8)
+
+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 (0x0x7f68b70d3c30) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+ QEvent (0x0x7f68b712b7e0) 0
+ primary-for QExposeEvent (0x0x7f68b70d3c30)
+
+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 (0x0x7f68b70d3c98) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+ QEvent (0x0x7f68b712b8a0) 0
+ primary-for QPlatformSurfaceEvent (0x0x7f68b70d3c98)
+
+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 (0x0x7f68b70d3d00) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+ QEvent (0x0x7f68b712b960) 0
+ primary-for QResizeEvent (0x0x7f68b70d3d00)
+
+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 (*)(...))QCloseEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7f68b70d3d68) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+ QEvent (0x0x7f68b712ba80) 0
+ primary-for QCloseEvent (0x0x7f68b70d3d68)
+
+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 (*)(...))QIconDragEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7f68b70d3dd0) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+ QEvent (0x0x7f68b712bae0) 0
+ primary-for QIconDragEvent (0x0x7f68b70d3dd0)
+
+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 (*)(...))QShowEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7f68b70d3e38) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+ QEvent (0x0x7f68b712bb40) 0
+ primary-for QShowEvent (0x0x7f68b70d3e38)
+
+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 (*)(...))QHideEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7f68b70d3ea0) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+ QEvent (0x0x7f68b712bba0) 0
+ primary-for QHideEvent (0x0x7f68b70d3ea0)
+
+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 (0x0x7f68b70d3f08) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+ QInputEvent (0x0x7f68b70d3f70) 0
+ primary-for QContextMenuEvent (0x0x7f68b70d3f08)
+ QEvent (0x0x7f68b712bc00) 0
+ primary-for QInputEvent (0x0x7f68b70d3f70)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7f68b712bf60) 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 (0x0x7f68b7173000) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+ QEvent (0x0x7f68b712bf00) 0
+ primary-for QInputMethodEvent (0x0x7f68b7173000)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7f68b71e8000) 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 (0x0x7f68b71d4d68) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+ QEvent (0x0x7f68b71cdf60) 0
+ primary-for QInputMethodQueryEvent (0x0x7f68b71d4d68)
+
+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 (0x0x7f68b6e44a90) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+ QEvent (0x0x7f68b6e3c960) 0
+ primary-for QDropEvent (0x0x7f68b6e44a90)
+
+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 (0x0x7f68b6e44af8) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+ QDropEvent (0x0x7f68b6e44b60) 0
+ primary-for QDragMoveEvent (0x0x7f68b6e44af8)
+ QEvent (0x0x7f68b6e3ce40) 0
+ primary-for QDropEvent (0x0x7f68b6e44b60)
+
+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 (*)(...))QDragEnterEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7f68b6e44bc8) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+ QDragMoveEvent (0x0x7f68b6e44c30) 0
+ primary-for QDragEnterEvent (0x0x7f68b6e44bc8)
+ QDropEvent (0x0x7f68b6e44c98) 0
+ primary-for QDragMoveEvent (0x0x7f68b6e44c30)
+ QEvent (0x0x7f68b6e640c0) 0
+ primary-for QDropEvent (0x0x7f68b6e44c98)
+
+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 (*)(...))QDragLeaveEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7f68b6e44d00) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+ QEvent (0x0x7f68b6e64120) 0
+ primary-for QDragLeaveEvent (0x0x7f68b6e44d00)
+
+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 (0x0x7f68b6e44d68) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+ QEvent (0x0x7f68b6e64180) 0
+ primary-for QHelpEvent (0x0x7f68b6e44d68)
+
+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 (0x0x7f68b6e44dd0) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+ QEvent (0x0x7f68b6e64420) 0
+ primary-for QStatusTipEvent (0x0x7f68b6e44dd0)
+
+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 (0x0x7f68b6e44e38) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+ QEvent (0x0x7f68b6e644e0) 0
+ primary-for QWhatsThisClickedEvent (0x0x7f68b6e44e38)
+
+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 (0x0x7f68b6e44ea0) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+ QEvent (0x0x7f68b6e645a0) 0
+ primary-for QActionEvent (0x0x7f68b6e44ea0)
+
+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 (0x0x7f68b6e44f08) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+ QEvent (0x0x7f68b6e646c0) 0
+ primary-for QFileOpenEvent (0x0x7f68b6e44f08)
+
+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 (0x0x7f68b6e44f70) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+ QEvent (0x0x7f68b6e647e0) 0
+ primary-for QToolBarChangeEvent (0x0x7f68b6e44f70)
+
+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 (0x0x7f68b6e8f000) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+ QEvent (0x0x7f68b6e648a0) 0
+ primary-for QShortcutEvent (0x0x7f68b6e8f000)
+
+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 (0x0x7f68b6e8f068) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+ QEvent (0x0x7f68b6e64a20) 0
+ primary-for QWindowStateChangeEvent (0x0x7f68b6e8f068)
+
+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 (0x0x7f68b6e8f0d0) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+ QPointerEvent (0x0x7f68b6e8f138) 0
+ primary-for QTouchEvent (0x0x7f68b6e8f0d0)
+ QInputEvent (0x0x7f68b6e8f1a0) 0
+ primary-for QPointerEvent (0x0x7f68b6e8f138)
+ QEvent (0x0x7f68b6e64ae0) 0
+ primary-for QInputEvent (0x0x7f68b6e8f1a0)
+
+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 (0x0x7f68b6e8f208) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+ QEvent (0x0x7f68b6e64c60) 0
+ primary-for QScrollPrepareEvent (0x0x7f68b6e8f208)
+
+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 (0x0x7f68b6e8f270) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+ QEvent (0x0x7f68b6e64e40) 0
+ primary-for QScrollEvent (0x0x7f68b6e8f270)
+
+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 (0x0x7f68b6e8f2d8) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+ QEvent (0x0x7f68b6eba000) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7f68b6e8f2d8)
+
+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 (0x0x7f68b6e8f340) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+ QEvent (0x0x7f68b6eba120) 0
+ primary-for QApplicationStateChangeEvent (0x0x7f68b6e8f340)
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7f68b6eba1e0) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7f68b6f17600) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7f68b6f177e0) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7f68b6f67c00) 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 (0x0x7f68b6fcb6c0) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7f68b6fcb960) 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 (0x0x7f68b6fd0340) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+ QObject (0x0x7f68b6fcb900) 0
+ primary-for QTextDocument (0x0x7f68b6fd0340)
+
+Class QBrushDataPointerDeleter
+ size=1 align=1
+ base size=0 base align=1
+QBrushDataPointerDeleter (0x0x7f68b6c2c300) 0 empty
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7f68b6c2c360) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7f68b6d7f1e0) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7f68b6d7f420) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7f68b6d7f3c0) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7f68b6dad208) 0
+ QGradient (0x0x7f68b6dfe2a0) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7f68b6dad270) 0
+ QGradient (0x0x7f68b6dfe3c0) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7f68b6dad2d8) 0
+ QGradient (0x0x7f68b6dfe4e0) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7f68b6dfe5a0) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7f68b6a49300) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7f68b6a492a0) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7f68b6abf4e0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7f68b6b092a0) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7f68b6bc7ea0) 0
+ QTextFormat (0x0x7f68b6bd3660) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7f68b68b0f08) 0
+ QTextFormat (0x0x7f68b68bb600) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7f68b68fec30) 0
+ QTextFormat (0x0x7f68b68fdc00) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7f68b6937e38) 0
+ QTextCharFormat (0x0x7f68b6937ea0) 0
+ QTextFormat (0x0x7f68b694a060) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7f68b6970bc8) 0
+ QTextFormat (0x0x7f68b697e000) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7f68b69c6340) 0
+ QTextFrameFormat (0x0x7f68b69c63a8) 0
+ QTextFormat (0x0x7f68b69bde40) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7f68b6a075b0) 0
+ QTextCharFormat (0x0x7f68b6a07618) 0
+ QTextFormat (0x0x7f68b6a096c0) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7f68b664dcc0) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7f68b66b1720) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7f68b66b1b40) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7f68b66b1ae0) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7f68b6775300) 0
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7f68b6775780) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7f68b641c780) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7f68b641c7e0) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7f68b641c840) 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 (0x0x7f68b6812f08) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+ QObject (0x0x7f68b641c720) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f68b6812f08)
+
+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 (0x0x7f68b64e0f60) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7f68b65033c0) 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 (0x0x7f68b6503420) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7f68b6503360) 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 (0x0x7f68b6503de0) 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 (0x0x7f68b6572240) 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 (0x0x7f68b65722a0) 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 (0x0x7f68b6572300) 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 (0x0x7f68b6572360) 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 (0x0x7f68b65723c0) 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 (0x0x7f68b6572420) 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 (0x0x7f68b65724e0) 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 (0x0x7f68b6572540) 0 nearly-empty
+ vptr=((& QAccessibleHyperlinkInterface::_ZTV29QAccessibleHyperlinkInterface) + 16)
+
+Vtable for QAccessibleSelectionInterface
+QAccessibleSelectionInterface::_ZTV29QAccessibleSelectionInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleSelectionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleSelectionInterface::selectedItem
+56 (int (*)(...))QAccessibleSelectionInterface::isSelected
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleSelectionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleSelectionInterface (0x0x7f68b65725a0) 0 nearly-empty
+ vptr=((& QAccessibleSelectionInterface::_ZTV29QAccessibleSelectionInterface) + 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 (0x0x7f68b6572600) 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 (0x0x7f68b64f6680) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f68b6572b40) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7f68b64f6680)
+
+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 (0x0x7f68b64f66e8) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+ QAccessibleEvent (0x0x7f68b6572f00) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f68b64f66e8)
+
+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 (0x0x7f68b64f6750) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f68b64f67b8) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7f68b64f6750)
+ QAccessibleEvent (0x0x7f68b65c0360) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f68b64f67b8)
+
+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 (0x0x7f68b64f6820) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f68b64f6888) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7f68b64f6820)
+ QAccessibleEvent (0x0x7f68b65c07e0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f68b64f6888)
+
+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 (0x0x7f68b64f68f0) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f68b64f6958) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7f68b64f68f0)
+ QAccessibleEvent (0x0x7f68b65c0c00) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f68b64f6958)
+
+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 (0x0x7f68b64f69c0) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+ QAccessibleTextCursorEvent (0x0x7f68b64f6a28) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7f68b64f69c0)
+ QAccessibleEvent (0x0x7f68b65e6060) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7f68b64f6a28)
+
+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 (0x0x7f68b64f6a90) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f68b65e64e0) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7f68b64f6a90)
+
+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 (0x0x7f68b64f6af8) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+ QAccessibleEvent (0x0x7f68b65e6900) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7f68b64f6af8)
+
+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 (0x0x7f68b66113c0) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7f68b6611660) 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 (0x0x7f68b64f6c30) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+ QObject (0x0x7f68b6611600) 0
+ primary-for QAccessibleBridgePlugin (0x0x7f68b64f6c30)
+
+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 (0x0x7f68b64f6c98) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+ QAccessibleInterface (0x0x7f68b6611720) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f68b64f6c98)
+
+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 (0x0x7f68b64f6d00) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+ QAccessibleObject (0x0x7f68b64f6d68) 0
+ primary-for QAccessibleApplication (0x0x7f68b64f6d00)
+ QAccessibleInterface (0x0x7f68b6611780) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f68b64f6d68)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7f68b6611840) 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 (0x0x7f68b64f6dd0) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+ QObject (0x0x7f68b66117e0) 0
+ primary-for QAccessiblePlugin (0x0x7f68b64f6dd0)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7f68b6611960) 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 (0x0x7f68b64f6e38) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+ QObject (0x0x7f68b6611900) 0
+ primary-for QAction (0x0x7f68b64f6e38)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7f68b62652a0) 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 (0x0x7f68b64f6ea0) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+ QObject (0x0x7f68b6265240) 0
+ primary-for QActionGroup (0x0x7f68b64f6ea0)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7f68b6265540) 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 (0x0x7f68b6265f00) 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 (0x0x7f68b6297c30) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+ QPixmap (0x0x7f68b6297c98) 0
+ primary-for QBitmap (0x0x7f68b6297c30)
+ QPaintDevice (0x0x7f68b62f5300) 0
+ primary-for QPixmap (0x0x7f68b6297c98)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7f68b6317cc0) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7f68b635bb40) 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 (0x0x7f68b62d2850) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+ QObject (0x0x7f68b635ba80) 0
+ primary-for QWindow (0x0x7f68b62d2850)
+ QSurface (0x0x7f68b635bae0) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7f68b63ad420) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7f68b63ad540) 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 (0x0x7f68b6362410) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+ QObject (0x0x7f68b63ad4e0) 0
+ primary-for QClipboard (0x0x7f68b6362410)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7f68b63ad660) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7f68b60236c0) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7f68b608a600) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7f68b608a6c0) 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 (0x0x7f68b6086c30) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+ QObject (0x0x7f68b608a660) 0
+ primary-for QDrag (0x0x7f68b6086c30)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7f68b608a8a0) 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 (0x0x7f68b6086c98) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+ QAbstractItemModel (0x0x7f68b6086d00) 0
+ primary-for QFileSystemModel (0x0x7f68b6086c98)
+ QObject (0x0x7f68b608a840) 0
+ primary-for QAbstractItemModel (0x0x7f68b6086d00)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7f68b611d060) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7f68b6142a20) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7f68b618c540) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7f68b5c45b40) 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 (0x0x7f68b5c4d2d8) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+ QObject (0x0x7f68b5c45ae0) 0
+ primary-for QGenericPlugin (0x0x7f68b5c4d2d8)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7f68b5c45c00) 0 empty
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7f68b5c45cc0) 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 (0x0x7f68b5c4d340) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+ QObject (0x0x7f68b5c45c60) 0
+ primary-for QInputMethod (0x0x7f68b5c4d340)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7f68b5c45f60) 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 (0x0x7f68b5c4d3a8) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+ QCoreApplication (0x0x7f68b5c4d410) 0
+ primary-for QGuiApplication (0x0x7f68b5c4d3a8)
+ QObject (0x0x7f68b5c45f00) 0
+ primary-for QCoreApplication (0x0x7f68b5c4d410)
+
+Class QNativeInterface::QX11Application::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QX11Application::TypeInfo (0x0x7f68b5ca42a0) 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 (0x0x7f68b5ca4240) 0 nearly-empty
+ vptr=((& QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE) + 16)
+
+Class QNativeInterface::QWaylandApplication::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QWaylandApplication::TypeInfo (0x0x7f68b5ca4360) 0 empty
+
+Vtable for QNativeInterface::QWaylandApplication
+QNativeInterface::QWaylandApplication::_ZTVN16QNativeInterface19QWaylandApplicationE: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface19QWaylandApplicationE)
+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 QNativeInterface::QWaylandApplication
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QWaylandApplication (0x0x7f68b5ca4300) 0 nearly-empty
+ vptr=((& QNativeInterface::QWaylandApplication::_ZTVN16QNativeInterface19QWaylandApplicationE) + 16)
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7f68b5ca4480) 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 (0x0x7f68b5ca4420) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7f68b5ca4540) 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 (0x0x7f68b5c4d478) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+ QObject (0x0x7f68b5ca44e0) 0
+ primary-for QIconEnginePlugin (0x0x7f68b5c4d478)
+
+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 (0x0x7f68b5ca4600) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7f68b5ca4840) 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 (0x0x7f68b5c4d4e0) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+ QObject (0x0x7f68b5ca47e0) 0
+ primary-for QImageIOPlugin (0x0x7f68b5c4d4e0)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7f68b5ca4d80) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7f68b5ca4e40) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7f68b5ca4f00) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7f68b5dacd20) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7f68b5b20420) 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 (0x0x7f68b5a62ea0) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+ QObject (0x0x7f68b5b203c0) 0
+ primary-for QMovie (0x0x7f68b5a62ea0)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7f68b5b207e0) 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 (0x0x7f68b5df2c40) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+ QObject (0x0x7f68b5b20720) 0
+ primary-for QOffscreenSurface (0x0x7f68b5df2c40)
+ QSurface (0x0x7f68b5b20780) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7f68b5b20a80) 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 (0x0x7f68b5a62f08) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+ QObject (0x0x7f68b5b20a20) 0
+ primary-for QOpenGLContextGroup (0x0x7f68b5a62f08)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7f68b5b20c60) 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 (0x0x7f68b5a62f70) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+ QObject (0x0x7f68b5b20c00) 0
+ primary-for QOpenGLContext (0x0x7f68b5a62f70)
+
+Class QNativeInterface::QGLXContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QGLXContext::TypeInfo (0x0x7f68b5b20ea0) 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 (0x0x7f68b5b20e40) 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 (0x0x7f68b5b20f60) 0 empty
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+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 QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7f68b5b20f00) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7f68b57c7000) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7f68b57c7720) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7f68b57c76c0) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7f68b58083a8) 0
+ QOpenGLFunctions (0x0x7f68b5518ea0) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7f68b55b6240) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7f68b5808410) 0
+ QOpenGLFunctionsPrivate (0x0x7f68b55b61e0) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7f68b532ff00) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7f68b5028480) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7f68b517f2a0) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7f68b517f240) 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 (0x0x7f68b520c888) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+ QPaintDevice (0x0x7f68b4e32060) 0
+ primary-for QPagedPaintDevice (0x0x7f68b520c888)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7f68b4e321e0) 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 (0x0x7f68b512be00) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+ QWindow (0x0x7f68b512be70) 0
+ primary-for QPaintDeviceWindow (0x0x7f68b512be00)
+ QObject (0x0x7f68b4e320c0) 0
+ primary-for QWindow (0x0x7f68b512be70)
+ QSurface (0x0x7f68b4e32120) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+ QPaintDevice (0x0x7f68b4e32180) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7f68b4e323c0) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7f68b4e32360) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7f68b4a6d900) 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 (0x0x7f68b4abe1e0) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7f68b4abe7e0) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7f68b4b70720) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7f68b4b706c0) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7f68b4884ba0) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7f68b48b9360) 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 (0x0x7f68b4865850) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+ QObject (0x0x7f68b48b92a0) 0
+ primary-for QPdfWriter (0x0x7f68b4865850)
+ QPagedPaintDevice (0x0x7f68b488d618) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+ QPaintDevice (0x0x7f68b48b9300) 16
+ primary-for QPagedPaintDevice (0x0x7f68b488d618)
+
+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 (0x0x7f68b488d680) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+ QPaintDevice (0x0x7f68b48b9540) 0
+ primary-for QPicture (0x0x7f68b488d680)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7f68b4924120) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7f68b49240c0) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7f68b496d0c0) 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 (0x0x7f68b4955d00) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+ QPaintDeviceWindow (0x0x7f68b49572a0) 0
+ primary-for QRasterWindow (0x0x7f68b4955d00)
+ QWindow (0x0x7f68b4957310) 0
+ primary-for QPaintDeviceWindow (0x0x7f68b49572a0)
+ QObject (0x0x7f68b494ef60) 0
+ primary-for QWindow (0x0x7f68b4957310)
+ QSurface (0x0x7f68b496d000) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+ QPaintDevice (0x0x7f68b496d060) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7f68b496dea0) 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 (0x0x7f68b4955dd0) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+ QObject (0x0x7f68b496de40) 0
+ primary-for QSessionManager (0x0x7f68b4955dd0)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7f68b49a10c0) 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 (0x0x7f68b4955e38) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+ QObject (0x0x7f68b49a1060) 0
+ primary-for QShortcut (0x0x7f68b4955e38)
+
+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 (0x0x7f68b49a15a0) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7f68b46b7cc0) 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 (0x0x7f68b46a2bc8) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+ QAbstractItemModel (0x0x7f68b46a2c30) 0
+ primary-for QStandardItemModel (0x0x7f68b46a2bc8)
+ QObject (0x0x7f68b46b7c60) 0
+ primary-for QAbstractItemModel (0x0x7f68b46a2c30)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7f68b475c000) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7f68b47b74e0) 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 (0x0x7f68b479ed00) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+ QObject (0x0x7f68b47b7480) 0
+ primary-for QStyleHints (0x0x7f68b479ed00)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7f68b47b76c0) 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 (0x0x7f68b479ed68) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+ QObject (0x0x7f68b47b7660) 0
+ primary-for QTextObject (0x0x7f68b479ed68)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7f68b47b78a0) 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 (0x0x7f68b479edd0) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+ QTextObject (0x0x7f68b479ee38) 0
+ primary-for QTextBlockGroup (0x0x7f68b479edd0)
+ QObject (0x0x7f68b47b7840) 0
+ primary-for QTextObject (0x0x7f68b479ee38)
+
+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 (0x0x7f68b47b7a20) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7f68b47b7ae0) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7f68b47b7b40) 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 (0x0x7f68b479eea0) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+ QTextObject (0x0x7f68b479ef08) 0
+ primary-for QTextFrame (0x0x7f68b479eea0)
+ QObject (0x0x7f68b47b7a80) 0
+ primary-for QTextObject (0x0x7f68b479ef08)
+
+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 (0x0x7f68b443da80) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7f68b443db40) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7f68b443dae0) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7f68b44cd540) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7f68b450c480) 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 (0x0x7f68b450f410) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+ QObject (0x0x7f68b450c420) 0
+ primary-for QSyntaxHighlighter (0x0x7f68b450f410)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7f68b450c600) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7f68b450c660) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7f68b450c720) 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 (0x0x7f68b450f478) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+ QTextBlockGroup (0x0x7f68b450f4e0) 0
+ primary-for QTextList (0x0x7f68b450f478)
+ QTextObject (0x0x7f68b450f548) 0
+ primary-for QTextBlockGroup (0x0x7f68b450f4e0)
+ QObject (0x0x7f68b450c6c0) 0
+ primary-for QTextObject (0x0x7f68b450f548)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7f68b450cae0) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7f68b4554360) 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 (0x0x7f68b450f5b0) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+ QTextFrame (0x0x7f68b450f618) 0
+ primary-for QTextTable (0x0x7f68b450f5b0)
+ QTextObject (0x0x7f68b450f680) 0
+ primary-for QTextFrame (0x0x7f68b450f618)
+ QObject (0x0x7f68b4554300) 0
+ primary-for QTextObject (0x0x7f68b450f680)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7f68b4554720) 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 (0x0x7f68b450f6e8) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+ QObject (0x0x7f68b45546c0) 0
+ primary-for QUndoGroup (0x0x7f68b450f6e8)
+
+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 (0x0x7f68b45548a0) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7f68b4554960) 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 (0x0x7f68b450f750) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+ QObject (0x0x7f68b4554900) 0
+ primary-for QUndoStack (0x0x7f68b450f750)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7f68b4554b40) 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 (0x0x7f68b450f7b8) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+ QObject (0x0x7f68b4554ae0) 0
+ primary-for QValidator (0x0x7f68b450f7b8)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7f68b4554de0) 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 (0x0x7f68b450f820) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+ QValidator (0x0x7f68b450f888) 0
+ primary-for QIntValidator (0x0x7f68b450f820)
+ QObject (0x0x7f68b4554d80) 0
+ primary-for QValidator (0x0x7f68b450f888)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7f68b45b3000) 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 (*)(...))QDoubleValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7f68b450f8f0) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+ QValidator (0x0x7f68b450f958) 0
+ primary-for QDoubleValidator (0x0x7f68b450f8f0)
+ QObject (0x0x7f68b4554f60) 0
+ primary-for QValidator (0x0x7f68b450f958)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7f68b45b33c0) 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 (0x0x7f68b450f9c0) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+ QValidator (0x0x7f68b450fa28) 0
+ primary-for QRegularExpressionValidator (0x0x7f68b450f9c0)
+ QObject (0x0x7f68b45b3360) 0
+ primary-for QValidator (0x0x7f68b450fa28)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7f68b45b35a0) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7f68b45b3540) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7f68b4270b40) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7f68b4270c60) 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 (0x0x7f68b460a380) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+ QObject (0x0x7f68b4270ba0) 0
+ primary-for QWidget (0x0x7f68b460a380)
+ QPaintDevice (0x0x7f68b4270c00) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7f68b43d7840) 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 (0x0x7f68b4370b60) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+ QWidget (0x0x7f68b460a690) 0
+ primary-for QAbstractButton (0x0x7f68b4370b60)
+ QObject (0x0x7f68b43d7780) 0
+ primary-for QWidget (0x0x7f68b460a690)
+ QPaintDevice (0x0x7f68b43d77e0) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7f68b43d7a80) 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 (0x0x7f68b4370bc8) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+ QWidget (0x0x7f68b460a700) 0
+ primary-for QAbstractSpinBox (0x0x7f68b4370bc8)
+ QObject (0x0x7f68b43d79c0) 0
+ primary-for QWidget (0x0x7f68b460a700)
+ QPaintDevice (0x0x7f68b43d7a20) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7f68b403c3c0) 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 (0x0x7f68b4370d68) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+ QWidget (0x0x7f68b460abd0) 0
+ primary-for QAbstractSlider (0x0x7f68b4370d68)
+ QObject (0x0x7f68b403c300) 0
+ primary-for QWidget (0x0x7f68b460abd0)
+ QPaintDevice (0x0x7f68b403c360) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7f68b403c600) 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 (0x0x7f68b4370dd0) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+ QAbstractSlider (0x0x7f68b4370e38) 0
+ primary-for QSlider (0x0x7f68b4370dd0)
+ QWidget (0x0x7f68b408a070) 0
+ primary-for QAbstractSlider (0x0x7f68b4370e38)
+ QObject (0x0x7f68b403c540) 0
+ primary-for QWidget (0x0x7f68b408a070)
+ QPaintDevice (0x0x7f68b403c5a0) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7f68b403c8a0) 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 (0x0x7f68b4370ea0) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+ QObject (0x0x7f68b403c840) 0
+ primary-for QStyle (0x0x7f68b4370ea0)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7f68b4102c60) 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 (0x0x7f68b41081a0) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+ QWidget (0x0x7f68b40e5e00) 0
+ primary-for QTabBar (0x0x7f68b41081a0)
+ QObject (0x0x7f68b4102ba0) 0
+ primary-for QWidget (0x0x7f68b40e5e00)
+ QPaintDevice (0x0x7f68b4102c00) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7f68b4102f60) 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 (0x0x7f68b4108208) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+ QWidget (0x0x7f68b41ab460) 0
+ primary-for QTabWidget (0x0x7f68b4108208)
+ QObject (0x0x7f68b4102ea0) 0
+ primary-for QWidget (0x0x7f68b41ab460)
+ QPaintDevice (0x0x7f68b4102f00) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7f68b41ef360) 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 (0x0x7f68b4108270) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+ QWidget (0x0x7f68b41ab770) 0
+ primary-for QRubberBand (0x0x7f68b4108270)
+ QObject (0x0x7f68b41ef2a0) 0
+ primary-for QWidget (0x0x7f68b41ab770)
+ QPaintDevice (0x0x7f68b41ef300) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7f68b41ef780) 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 (0x0x7f68b41082d8) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+ QWidget (0x0x7f68b41ab8c0) 0
+ primary-for QFrame (0x0x7f68b41082d8)
+ QObject (0x0x7f68b41ef6c0) 0
+ primary-for QWidget (0x0x7f68b41ab8c0)
+ QPaintDevice (0x0x7f68b41ef720) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7f68b3e30000) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7f68b41084e0) 0
+ QStyleOption (0x0x7f68b3e30060) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7f68b76325b0) 0
+ QStyleOption (0x0x7f68b3e302a0) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7f68b7632750) 0
+ QStyleOption (0x0x7f68b3e30960) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7f68b4108548) 0
+ QStyleOption (0x0x7f68b3e30ba0) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7f68b41085b0) 0
+ QStyleOption (0x0x7f68b3e30de0) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7f68b4108618) 0
+ QStyleOptionHeader (0x0x7f68b4108680) 0
+ QStyleOption (0x0x7f68b3ecb060) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7f68b4108750) 0
+ QStyleOption (0x0x7f68b3ecb420) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7f68b41088f0) 0
+ QStyleOption (0x0x7f68b3ecbae0) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7f68b4108bc8) 0
+ QStyleOption (0x0x7f68b3f793c0) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7f68b4108d68) 0
+ QStyleOption (0x0x7f68b3f79a80) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7f68b4108dd0) 0
+ QStyleOption (0x0x7f68b3f79cc0) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7f68b4108e38) 0
+ QStyleOption (0x0x7f68b3f79f00) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7f68b4108ea0) 0
+ QStyleOption (0x0x7f68b3c37180) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7f68b3c42068) 0
+ QStyleOption (0x0x7f68b3c37840) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7f68b3c420d0) 0
+ QStyleOption (0x0x7f68b3c37a80) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7f68b3c42138) 0
+ QStyleOption (0x0x7f68b3c37d20) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7f68b3c421a0) 0
+ QStyleOptionComplex (0x0x7f68b3c42208) 0
+ QStyleOption (0x0x7f68b3cc4000) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7f68b3c422d8) 0
+ QStyleOptionComplex (0x0x7f68b3c42340) 0
+ QStyleOption (0x0x7f68b3cc43c0) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7f68b3c42410) 0
+ QStyleOptionComplex (0x0x7f68b3c42478) 0
+ QStyleOption (0x0x7f68b3cc4600) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7f68b3c42618) 0
+ QStyleOptionComplex (0x0x7f68b3c42680) 0
+ QStyleOption (0x0x7f68b3cc4cc0) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7f68b3c426e8) 0
+ QStyleOptionComplex (0x0x7f68b3c42750) 0
+ QStyleOption (0x0x7f68b3cc4f00) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7f68b3c427b8) 0
+ QStyleOptionComplex (0x0x7f68b3c42820) 0
+ QStyleOption (0x0x7f68b3d53120) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7f68b3c42888) 0
+ QStyleOptionComplex (0x0x7f68b3c428f0) 0
+ QStyleOption (0x0x7f68b3d53360) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7f68b3c42958) 0
+ QStyleOption (0x0x7f68b3d535a0) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7f68b3d53900) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7f68b3c429c0) 0
+ QStyleHintReturn (0x0x7f68b3d53960) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7f68b3c42a90) 0
+ QStyleHintReturn (0x0x7f68b3d539c0) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7f68b3d53b40) 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 (0x0x7f68b3c42b60) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+ QObject (0x0x7f68b3d53ae0) 0
+ primary-for QAbstractItemDelegate (0x0x7f68b3c42b60)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7f68b3d53d80) 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 (0x0x7f68b3c42bc8) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+ QFrame (0x0x7f68b3c42c30) 0
+ primary-for QAbstractScrollArea (0x0x7f68b3c42bc8)
+ QWidget (0x0x7f68b3cddc40) 0
+ primary-for QFrame (0x0x7f68b3c42c30)
+ QObject (0x0x7f68b3d53cc0) 0
+ primary-for QWidget (0x0x7f68b3cddc40)
+ QPaintDevice (0x0x7f68b3d53d20) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7f68b3db60c0) 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 (0x0x7f68b3c42c98) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+ QAbstractScrollArea (0x0x7f68b3c42d00) 0
+ primary-for QAbstractItemView (0x0x7f68b3c42c98)
+ QFrame (0x0x7f68b3c42d68) 0
+ primary-for QAbstractScrollArea (0x0x7f68b3c42d00)
+ QWidget (0x0x7f68b3cdde00) 0
+ primary-for QFrame (0x0x7f68b3c42d68)
+ QObject (0x0x7f68b3db6000) 0
+ primary-for QWidget (0x0x7f68b3cdde00)
+ QPaintDevice (0x0x7f68b3db6060) 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 (0x0x7f68b3dde380) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+ QAccessibleObject (0x0x7f68b3c42f08) 0
+ primary-for QAccessibleWidget (0x0x7f68b3dde380)
+ QAccessibleInterface (0x0x7f68b3db6ba0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7f68b3c42f08)
+ QAccessibleActionInterface (0x0x7f68b3db6c00) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7f68b3db6d20) 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 (0x0x7f68b3c42f70) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+ QGuiApplication (0x0x7f68b3c42270) 0
+ primary-for QApplication (0x0x7f68b3c42f70)
+ QCoreApplication (0x0x7f68b3a66000) 0
+ primary-for QGuiApplication (0x0x7f68b3c42270)
+ QObject (0x0x7f68b3db6cc0) 0
+ primary-for QCoreApplication (0x0x7f68b3a66000)
+
+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 (0x0x7f68b3a7f000) 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 (0x0x7f68b3a66068) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+ QLayoutItem (0x0x7f68b3a7f240) 0
+ primary-for QSpacerItem (0x0x7f68b3a66068)
+
+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 (0x0x7f68b3a660d0) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+ QLayoutItem (0x0x7f68b3a7f480) 0
+ primary-for QWidgetItem (0x0x7f68b3a660d0)
+
+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 (0x0x7f68b3a66138) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+ QWidgetItem (0x0x7f68b3a661a0) 0
+ primary-for QWidgetItemV2 (0x0x7f68b3a66138)
+ QLayoutItem (0x0x7f68b3a7f660) 0
+ primary-for QWidgetItem (0x0x7f68b3a661a0)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7f68b3a7f7e0) 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 (0x0x7f68b3dde540) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+ QObject (0x0x7f68b3a7f720) 0
+ primary-for QLayout (0x0x7f68b3dde540)
+ QLayoutItem (0x0x7f68b3a7f780) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7f68b3a7fae0) 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 (0x0x7f68b3a66208) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+ QLayout (0x0x7f68b3dde850) 0
+ primary-for QGridLayout (0x0x7f68b3a66208)
+ QObject (0x0x7f68b3a7fa20) 0
+ primary-for QLayout (0x0x7f68b3dde850)
+ QLayoutItem (0x0x7f68b3a7fa80) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7f68b3a7fd80) 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 (0x0x7f68b3a66270) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+ QLayout (0x0x7f68b3dde8c0) 0
+ primary-for QBoxLayout (0x0x7f68b3a66270)
+ QObject (0x0x7f68b3a7fcc0) 0
+ primary-for QLayout (0x0x7f68b3dde8c0)
+ QLayoutItem (0x0x7f68b3a7fd20) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7f68b3b05000) 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 (0x0x7f68b3a662d8) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+ QBoxLayout (0x0x7f68b3a66340) 0
+ primary-for QHBoxLayout (0x0x7f68b3a662d8)
+ QLayout (0x0x7f68b3ddebd0) 0
+ primary-for QBoxLayout (0x0x7f68b3a66340)
+ QObject (0x0x7f68b3a7ff00) 0
+ primary-for QLayout (0x0x7f68b3ddebd0)
+ QLayoutItem (0x0x7f68b3a7ff60) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7f68b3b05180) 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 (0x0x7f68b3a663a8) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+ QBoxLayout (0x0x7f68b3a66410) 0
+ primary-for QVBoxLayout (0x0x7f68b3a663a8)
+ QLayout (0x0x7f68b3ddec40) 0
+ primary-for QBoxLayout (0x0x7f68b3a66410)
+ QObject (0x0x7f68b3b050c0) 0
+ primary-for QLayout (0x0x7f68b3ddec40)
+ QLayoutItem (0x0x7f68b3b05120) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7f68b3b052a0) 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 (0x0x7f68b3a66478) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+ QObject (0x0x7f68b3b05240) 0
+ primary-for QButtonGroup (0x0x7f68b3a66478)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7f68b3b054e0) 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 (0x0x7f68b3a664e0) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+ QWidget (0x0x7f68b3ddecb0) 0
+ primary-for QCalendarWidget (0x0x7f68b3a664e0)
+ QObject (0x0x7f68b3b05420) 0
+ primary-for QWidget (0x0x7f68b3ddecb0)
+ QPaintDevice (0x0x7f68b3b05480) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7f68b3b05960) 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 (0x0x7f68b3a66548) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+ QAbstractButton (0x0x7f68b3a665b0) 0
+ primary-for QCheckBox (0x0x7f68b3a66548)
+ QWidget (0x0x7f68b3b310e0) 0
+ primary-for QAbstractButton (0x0x7f68b3a665b0)
+ QObject (0x0x7f68b3b058a0) 0
+ primary-for QWidget (0x0x7f68b3b310e0)
+ QPaintDevice (0x0x7f68b3b05900) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7f68b3b05ba0) 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 (0x0x7f68b3a66618) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+ QWidget (0x0x7f68b3b31150) 0
+ primary-for QDialog (0x0x7f68b3a66618)
+ QObject (0x0x7f68b3b05ae0) 0
+ primary-for QWidget (0x0x7f68b3b31150)
+ QPaintDevice (0x0x7f68b3b05b40) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7f68b3b05de0) 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 (0x0x7f68b3a66680) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+ QDialog (0x0x7f68b3a666e8) 0
+ primary-for QColorDialog (0x0x7f68b3a66680)
+ QWidget (0x0x7f68b3b312a0) 0
+ primary-for QDialog (0x0x7f68b3a666e8)
+ QObject (0x0x7f68b3b05d20) 0
+ primary-for QWidget (0x0x7f68b3b312a0)
+ QPaintDevice (0x0x7f68b3b05d80) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7f68b3b9b4e0) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7f68b3b9b600) 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 (0x0x7f68b3a66888) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+ QAbstractItemView (0x0x7f68b3a668f0) 0
+ primary-for QColumnView (0x0x7f68b3a66888)
+ QAbstractScrollArea (0x0x7f68b3a66958) 0
+ primary-for QAbstractItemView (0x0x7f68b3a668f0)
+ QFrame (0x0x7f68b3a669c0) 0
+ primary-for QAbstractScrollArea (0x0x7f68b3a66958)
+ QWidget (0x0x7f68b3b315b0) 0
+ primary-for QFrame (0x0x7f68b3a669c0)
+ QObject (0x0x7f68b3b9b540) 0
+ primary-for QWidget (0x0x7f68b3b315b0)
+ QPaintDevice (0x0x7f68b3b9b5a0) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7f68b3b9b840) 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 (0x0x7f68b3a66a28) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+ QWidget (0x0x7f68b3b31620) 0
+ primary-for QComboBox (0x0x7f68b3a66a28)
+ QObject (0x0x7f68b3b9b780) 0
+ primary-for QWidget (0x0x7f68b3b31620)
+ QPaintDevice (0x0x7f68b3b9b7e0) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7f68b3b9bde0) 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 (0x0x7f68b3a66a90) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+ QAbstractButton (0x0x7f68b3a66af8) 0
+ primary-for QPushButton (0x0x7f68b3a66a90)
+ QWidget (0x0x7f68b3b31af0) 0
+ primary-for QAbstractButton (0x0x7f68b3a66af8)
+ QObject (0x0x7f68b3b9bd20) 0
+ primary-for QWidget (0x0x7f68b3b31af0)
+ QPaintDevice (0x0x7f68b3b9bd80) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7f68b3850060) 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 (0x0x7f68b3a66b60) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+ QPushButton (0x0x7f68b3a66bc8) 0
+ primary-for QCommandLinkButton (0x0x7f68b3a66b60)
+ QAbstractButton (0x0x7f68b3a66c30) 0
+ primary-for QPushButton (0x0x7f68b3a66bc8)
+ QWidget (0x0x7f68b3b31b60) 0
+ primary-for QAbstractButton (0x0x7f68b3a66c30)
+ QObject (0x0x7f68b3b9bf60) 0
+ primary-for QWidget (0x0x7f68b3b31b60)
+ QPaintDevice (0x0x7f68b3850000) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7f68b3850240) 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 (0x0x7f68b3a66c98) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+ QStyle (0x0x7f68b3a66d00) 0
+ primary-for QCommonStyle (0x0x7f68b3a66c98)
+ QObject (0x0x7f68b38501e0) 0
+ primary-for QStyle (0x0x7f68b3a66d00)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7f68b3850420) 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 (0x0x7f68b3a66d68) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+ QObject (0x0x7f68b38503c0) 0
+ primary-for QCompleter (0x0x7f68b3a66d68)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7f68b3850780) 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 (0x0x7f68b3a66dd0) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+ QObject (0x0x7f68b3850720) 0
+ primary-for QDataWidgetMapper (0x0x7f68b3a66dd0)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7f68b3850a80) 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 (0x0x7f68b3a66e38) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+ QAbstractSpinBox (0x0x7f68b3a66ea0) 0
+ primary-for QDateTimeEdit (0x0x7f68b3a66e38)
+ QWidget (0x0x7f68b3b31f50) 0
+ primary-for QAbstractSpinBox (0x0x7f68b3a66ea0)
+ QObject (0x0x7f68b38509c0) 0
+ primary-for QWidget (0x0x7f68b3b31f50)
+ QPaintDevice (0x0x7f68b3850a20) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7f68b38ea060) 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 (0x0x7f68b38d3068) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+ QDateTimeEdit (0x0x7f68b38d30d0) 0
+ primary-for QTimeEdit (0x0x7f68b38d3068)
+ QAbstractSpinBox (0x0x7f68b38d3138) 0
+ primary-for QDateTimeEdit (0x0x7f68b38d30d0)
+ QWidget (0x0x7f68b38aa4d0) 0
+ primary-for QAbstractSpinBox (0x0x7f68b38d3138)
+ QObject (0x0x7f68b3850f60) 0
+ primary-for QWidget (0x0x7f68b38aa4d0)
+ QPaintDevice (0x0x7f68b38ea000) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7f68b38ea1e0) 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 (0x0x7f68b38d31a0) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+ QDateTimeEdit (0x0x7f68b38d3208) 0
+ primary-for QDateEdit (0x0x7f68b38d31a0)
+ QAbstractSpinBox (0x0x7f68b38d3270) 0
+ primary-for QDateTimeEdit (0x0x7f68b38d3208)
+ QWidget (0x0x7f68b38aa540) 0
+ primary-for QAbstractSpinBox (0x0x7f68b38d3270)
+ QObject (0x0x7f68b38ea120) 0
+ primary-for QWidget (0x0x7f68b38aa540)
+ QPaintDevice (0x0x7f68b38ea180) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7f68b38ea600) 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 (0x0x7f68b38d32d8) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+ QAbstractSlider (0x0x7f68b38d3340) 0
+ primary-for QDial (0x0x7f68b38d32d8)
+ QWidget (0x0x7f68b38aa5b0) 0
+ primary-for QAbstractSlider (0x0x7f68b38d3340)
+ QObject (0x0x7f68b38ea540) 0
+ primary-for QWidget (0x0x7f68b38aa5b0)
+ QPaintDevice (0x0x7f68b38ea5a0) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7f68b38ea840) 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 (0x0x7f68b38d33a8) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+ QWidget (0x0x7f68b38aa620) 0
+ primary-for QDialogButtonBox (0x0x7f68b38d33a8)
+ QObject (0x0x7f68b38ea780) 0
+ primary-for QWidget (0x0x7f68b38aa620)
+ QPaintDevice (0x0x7f68b38ea7e0) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7f68b39ca000) 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 (0x0x7f68b38d3548) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+ QWidget (0x0x7f68b3958700) 0
+ primary-for QDockWidget (0x0x7f68b38d3548)
+ QObject (0x0x7f68b38eaf00) 0
+ primary-for QWidget (0x0x7f68b3958700)
+ QPaintDevice (0x0x7f68b38eaf60) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7f68b39ca780) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7f68b39cade0) 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 (0x0x7f68b38d3820) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+ QDialog (0x0x7f68b38d3888) 0
+ primary-for QErrorMessage (0x0x7f68b38d3820)
+ QWidget (0x0x7f68b3651150) 0
+ primary-for QDialog (0x0x7f68b38d3888)
+ QObject (0x0x7f68b39cad20) 0
+ primary-for QWidget (0x0x7f68b3651150)
+ QPaintDevice (0x0x7f68b39cad80) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7f68b367f060) 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 (0x0x7f68b38d38f0) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+ QDialog (0x0x7f68b38d3958) 0
+ primary-for QFileDialog (0x0x7f68b38d38f0)
+ QWidget (0x0x7f68b36511c0) 0
+ primary-for QDialog (0x0x7f68b38d3958)
+ QObject (0x0x7f68b39caf60) 0
+ primary-for QWidget (0x0x7f68b36511c0)
+ QPaintDevice (0x0x7f68b367f000) 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 (0x0x7f68b38d3af8) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+ QAbstractFileIconProvider (0x0x7f68b367fa80) 0
+ primary-for QFileIconProvider (0x0x7f68b38d3af8)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7f68b367fc60) 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 (0x0x7f68b38d3b60) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+ QWidget (0x0x7f68b3651af0) 0
+ primary-for QFocusFrame (0x0x7f68b38d3b60)
+ QObject (0x0x7f68b367fba0) 0
+ primary-for QWidget (0x0x7f68b3651af0)
+ QPaintDevice (0x0x7f68b367fc00) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7f68b367fea0) 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 (0x0x7f68b38d3bc8) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+ QComboBox (0x0x7f68b38d3c30) 0
+ primary-for QFontComboBox (0x0x7f68b38d3bc8)
+ QWidget (0x0x7f68b3651b60) 0
+ primary-for QComboBox (0x0x7f68b38d3c30)
+ QObject (0x0x7f68b367fde0) 0
+ primary-for QWidget (0x0x7f68b3651b60)
+ QPaintDevice (0x0x7f68b367fe40) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7f68b3743660) 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 (0x0x7f68b38d3dd0) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+ QDialog (0x0x7f68b38d3e38) 0
+ primary-for QFontDialog (0x0x7f68b38d3dd0)
+ QWidget (0x0x7f68b3651e00) 0
+ primary-for QDialog (0x0x7f68b38d3e38)
+ QObject (0x0x7f68b37435a0) 0
+ primary-for QWidget (0x0x7f68b3651e00)
+ QPaintDevice (0x0x7f68b3743600) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7f68b3743de0) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7f68b3743e40) 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 (0x0x7f68b380c000) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+ QLayout (0x0x7f68b37a0150) 0
+ primary-for QFormLayout (0x0x7f68b380c000)
+ QObject (0x0x7f68b3743d20) 0
+ primary-for QLayout (0x0x7f68b37a0150)
+ QLayoutItem (0x0x7f68b3743d80) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7f68b34acae0) 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 (0x0x7f68b34b4410) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+ QObject (0x0x7f68b34aca80) 0
+ primary-for QGesture (0x0x7f68b34b4410)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7f68b34accc0) 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 (0x0x7f68b34b4478) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+ QGesture (0x0x7f68b34b44e0) 0
+ primary-for QPanGesture (0x0x7f68b34b4478)
+ QObject (0x0x7f68b34acc60) 0
+ primary-for QGesture (0x0x7f68b34b44e0)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7f68b34acea0) 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 (0x0x7f68b34b4548) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+ QGesture (0x0x7f68b34b45b0) 0
+ primary-for QPinchGesture (0x0x7f68b34b4548)
+ QObject (0x0x7f68b34ace40) 0
+ primary-for QGesture (0x0x7f68b34b45b0)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7f68b35c82a0) 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 (0x0x7f68b35c3a90) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+ QGesture (0x0x7f68b35c3af8) 0
+ primary-for QSwipeGesture (0x0x7f68b35c3a90)
+ QObject (0x0x7f68b35c8240) 0
+ primary-for QGesture (0x0x7f68b35c3af8)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7f68b35c8540) 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 (0x0x7f68b35c3b60) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+ QGesture (0x0x7f68b35c3bc8) 0
+ primary-for QTapGesture (0x0x7f68b35c3b60)
+ QObject (0x0x7f68b35c84e0) 0
+ primary-for QGesture (0x0x7f68b35c3bc8)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7f68b35c8720) 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 (0x0x7f68b35c3c30) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+ QGesture (0x0x7f68b35c3c98) 0
+ primary-for QTapAndHoldGesture (0x0x7f68b35c3c30)
+ QObject (0x0x7f68b35c86c0) 0
+ primary-for QGesture (0x0x7f68b35c3c98)
+
+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 (0x0x7f68b35c3d00) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+ QEvent (0x0x7f68b35c88a0) 0
+ primary-for QGestureEvent (0x0x7f68b35c3d00)
+
+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 (0x0x7f68b331a000) 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 (0x0x7f68b331a4e0) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7f68b3039a20) 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 (0x0x7f68b337f8c0) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+ QObject (0x0x7f68b3039960) 0
+ primary-for QGraphicsObject (0x0x7f68b337f8c0)
+ QGraphicsItem (0x0x7f68b30399c0) 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 (0x0x7f68b3311958) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+ QGraphicsItem (0x0x7f68b3039ae0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f68b3311958)
+
+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 (0x0x7f68b33119c0) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f68b3311a28) 0
+ primary-for QGraphicsPathItem (0x0x7f68b33119c0)
+ QGraphicsItem (0x0x7f68b3039c00) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f68b3311a28)
+
+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 (0x0x7f68b3311a90) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f68b3311af8) 0
+ primary-for QGraphicsRectItem (0x0x7f68b3311a90)
+ QGraphicsItem (0x0x7f68b3039d20) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f68b3311af8)
+
+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 (0x0x7f68b3311b60) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f68b3311bc8) 0
+ primary-for QGraphicsEllipseItem (0x0x7f68b3311b60)
+ QGraphicsItem (0x0x7f68b3039ea0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f68b3311bc8)
+
+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 (0x0x7f68b3311c30) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f68b3311c98) 0
+ primary-for QGraphicsPolygonItem (0x0x7f68b3311c30)
+ QGraphicsItem (0x0x7f68b30a0060) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f68b3311c98)
+
+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 (0x0x7f68b3311d00) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+ QGraphicsItem (0x0x7f68b30a0180) 0
+ primary-for QGraphicsLineItem (0x0x7f68b3311d00)
+
+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 (0x0x7f68b3311d68) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+ QGraphicsItem (0x0x7f68b30a0300) 0
+ primary-for QGraphicsPixmapItem (0x0x7f68b3311d68)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7f68b30a0540) 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 (0x0x7f68b3311dd0) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+ QGraphicsObject (0x0x7f68b337fd20) 0
+ primary-for QGraphicsTextItem (0x0x7f68b3311dd0)
+ QObject (0x0x7f68b30a0480) 0
+ primary-for QGraphicsObject (0x0x7f68b337fd20)
+ QGraphicsItem (0x0x7f68b30a04e0) 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 (0x0x7f68b3311f08) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+ QAbstractGraphicsShapeItem (0x0x7f68b3311f70) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7f68b3311f08)
+ QGraphicsItem (0x0x7f68b30a07e0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7f68b3311f70)
+
+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 (0x0x7f68b30fe000) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+ QGraphicsItem (0x0x7f68b30a0900) 0
+ primary-for QGraphicsItemGroup (0x0x7f68b30fe000)
+
+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 (0x0x7f68b311df00) 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 (0x0x7f68b30fed00) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+ QGraphicsLayoutItem (0x0x7f68b315d7e0) 0
+ primary-for QGraphicsLayout (0x0x7f68b30fed00)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7f68b315dcc0) 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 (0x0x7f68b30fee38) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+ QObject (0x0x7f68b315dc60) 0
+ primary-for QGraphicsAnchor (0x0x7f68b30fee38)
+
+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 (0x0x7f68b30feea0) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+ QGraphicsLayout (0x0x7f68b30fef08) 0
+ primary-for QGraphicsAnchorLayout (0x0x7f68b30feea0)
+ QGraphicsLayoutItem (0x0x7f68b315de40) 0
+ primary-for QGraphicsLayout (0x0x7f68b30fef08)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7f68b319f000) 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 (0x0x7f68b30fef70) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+ QObject (0x0x7f68b315df60) 0
+ primary-for QGraphicsEffect (0x0x7f68b30fef70)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7f68b319f720) 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 (0x0x7f68b31ad138) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+ QGraphicsEffect (0x0x7f68b31ad1a0) 0
+ primary-for QGraphicsColorizeEffect (0x0x7f68b31ad138)
+ QObject (0x0x7f68b319f6c0) 0
+ primary-for QGraphicsEffect (0x0x7f68b31ad1a0)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7f68b319f900) 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 (0x0x7f68b31ad208) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+ QGraphicsEffect (0x0x7f68b31ad270) 0
+ primary-for QGraphicsBlurEffect (0x0x7f68b31ad208)
+ QObject (0x0x7f68b319f8a0) 0
+ primary-for QGraphicsEffect (0x0x7f68b31ad270)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7f68b2e7b120) 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 (0x0x7f68b31ad410) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+ QGraphicsEffect (0x0x7f68b31ad478) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7f68b31ad410)
+ QObject (0x0x7f68b2e7b0c0) 0
+ primary-for QGraphicsEffect (0x0x7f68b31ad478)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7f68b2e7b540) 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 (0x0x7f68b31ad4e0) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+ QGraphicsEffect (0x0x7f68b31ad548) 0
+ primary-for QGraphicsOpacityEffect (0x0x7f68b31ad4e0)
+ QObject (0x0x7f68b2e7b4e0) 0
+ primary-for QGraphicsEffect (0x0x7f68b31ad548)
+
+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 (0x0x7f68b31ad5b0) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+ QGraphicsLayout (0x0x7f68b31ad618) 0
+ primary-for QGraphicsGridLayout (0x0x7f68b31ad5b0)
+ QGraphicsLayoutItem (0x0x7f68b2e7b6c0) 0
+ primary-for QGraphicsLayout (0x0x7f68b31ad618)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7f68b2e7b8a0) 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 (0x0x7f68b31ad750) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+ QObject (0x0x7f68b2e7b840) 0
+ primary-for QGraphicsItemAnimation (0x0x7f68b31ad750)
+
+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 (0x0x7f68b31ad7b8) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+ QGraphicsLayout (0x0x7f68b31ad820) 0
+ primary-for QGraphicsLinearLayout (0x0x7f68b31ad7b8)
+ QGraphicsLayoutItem (0x0x7f68b2e7b960) 0
+ primary-for QGraphicsLayout (0x0x7f68b31ad820)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7f68b2e7bc60) 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 (0x0x7f68b30f1a10) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+ QGraphicsObject (0x0x7f68b30f1a80) 0
+ primary-for QGraphicsWidget (0x0x7f68b30f1a10)
+ QObject (0x0x7f68b2e7bb40) 0
+ primary-for QGraphicsObject (0x0x7f68b30f1a80)
+ QGraphicsItem (0x0x7f68b2e7bba0) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+ QGraphicsLayoutItem (0x0x7f68b2e7bc00) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7f68b2f0d120) 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 (0x0x7f68b31ad958) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+ QGraphicsWidget (0x0x7f68b30f1bd0) 0
+ primary-for QGraphicsProxyWidget (0x0x7f68b31ad958)
+ QGraphicsObject (0x0x7f68b30f1c40) 0
+ primary-for QGraphicsWidget (0x0x7f68b30f1bd0)
+ QObject (0x0x7f68b2f0d000) 0
+ primary-for QGraphicsObject (0x0x7f68b30f1c40)
+ QGraphicsItem (0x0x7f68b2f0d060) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+ QGraphicsLayoutItem (0x0x7f68b2f0d0c0) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7f68b2f0d480) 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 (0x0x7f68b31adb60) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+ QObject (0x0x7f68b2f0d420) 0
+ primary-for QGraphicsScene (0x0x7f68b31adb60)
+
+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 (0x0x7f68b2f8e478) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+ QEvent (0x0x7f68b2fea720) 0
+ primary-for QGraphicsSceneEvent (0x0x7f68b2f8e478)
+
+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 (0x0x7f68b2f8e4e0) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f68b2f8e548) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7f68b2f8e4e0)
+ QEvent (0x0x7f68b2fea900) 0
+ primary-for QGraphicsSceneEvent (0x0x7f68b2f8e548)
+
+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 (0x0x7f68b2f8e5b0) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f68b2f8e618) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7f68b2f8e5b0)
+ QEvent (0x0x7f68b2feaa20) 0
+ primary-for QGraphicsSceneEvent (0x0x7f68b2f8e618)
+
+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 (0x0x7f68b2f8e680) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f68b2f8e6e8) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7f68b2f8e680)
+ QEvent (0x0x7f68b2feab40) 0
+ primary-for QGraphicsSceneEvent (0x0x7f68b2f8e6e8)
+
+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 (0x0x7f68b2f8e750) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f68b2f8e7b8) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7f68b2f8e750)
+ QEvent (0x0x7f68b2feac60) 0
+ primary-for QGraphicsSceneEvent (0x0x7f68b2f8e7b8)
+
+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 (0x0x7f68b2f8e820) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f68b2f8e888) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7f68b2f8e820)
+ QEvent (0x0x7f68b2fead80) 0
+ primary-for QGraphicsSceneEvent (0x0x7f68b2f8e888)
+
+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 (0x0x7f68b2f8e8f0) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f68b2f8e958) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7f68b2f8e8f0)
+ QEvent (0x0x7f68b2feaea0) 0
+ primary-for QGraphicsSceneEvent (0x0x7f68b2f8e958)
+
+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 (0x0x7f68b2f8e9c0) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f68b2f8ea28) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7f68b2f8e9c0)
+ QEvent (0x0x7f68b2c85000) 0
+ primary-for QGraphicsSceneEvent (0x0x7f68b2f8ea28)
+
+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 (0x0x7f68b2f8ea90) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+ QGraphicsSceneEvent (0x0x7f68b2f8eaf8) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7f68b2f8ea90)
+ QEvent (0x0x7f68b2c85120) 0
+ primary-for QGraphicsSceneEvent (0x0x7f68b2f8eaf8)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7f68b2c852a0) 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 (0x0x7f68b2f8eb60) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+ QObject (0x0x7f68b2c85240) 0
+ primary-for QGraphicsTransform (0x0x7f68b2f8eb60)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7f68b2c85480) 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 (0x0x7f68b2f8ebc8) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+ QGraphicsTransform (0x0x7f68b2f8ec30) 0
+ primary-for QGraphicsScale (0x0x7f68b2f8ebc8)
+ QObject (0x0x7f68b2c85420) 0
+ primary-for QGraphicsTransform (0x0x7f68b2f8ec30)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7f68b2c85660) 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 (0x0x7f68b2f8ec98) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+ QGraphicsTransform (0x0x7f68b2f8ed00) 0
+ primary-for QGraphicsRotation (0x0x7f68b2f8ec98)
+ QObject (0x0x7f68b2c85600) 0
+ primary-for QGraphicsTransform (0x0x7f68b2f8ed00)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7f68b2c858a0) 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 (0x0x7f68b2f8ed68) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+ QAbstractScrollArea (0x0x7f68b2f8edd0) 0
+ primary-for QScrollArea (0x0x7f68b2f8ed68)
+ QFrame (0x0x7f68b2f8ee38) 0
+ primary-for QAbstractScrollArea (0x0x7f68b2f8edd0)
+ QWidget (0x0x7f68b2f31460) 0
+ primary-for QFrame (0x0x7f68b2f8ee38)
+ QObject (0x0x7f68b2c857e0) 0
+ primary-for QWidget (0x0x7f68b2f31460)
+ QPaintDevice (0x0x7f68b2c85840) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7f68b2c85ae0) 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 (0x0x7f68b2f8eea0) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+ QAbstractScrollArea (0x0x7f68b2f8ef08) 0
+ primary-for QGraphicsView (0x0x7f68b2f8eea0)
+ QFrame (0x0x7f68b2f8ef70) 0
+ primary-for QAbstractScrollArea (0x0x7f68b2f8ef08)
+ QWidget (0x0x7f68b2f314d0) 0
+ primary-for QFrame (0x0x7f68b2f8ef70)
+ QObject (0x0x7f68b2c85a20) 0
+ primary-for QWidget (0x0x7f68b2f314d0)
+ QPaintDevice (0x0x7f68b2c85a80) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7f68b2d0bcc0) 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 (0x0x7f68b2d0a208) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+ QWidget (0x0x7f68b2f31c40) 0
+ primary-for QGroupBox (0x0x7f68b2d0a208)
+ QObject (0x0x7f68b2d0bc00) 0
+ primary-for QWidget (0x0x7f68b2f31c40)
+ QPaintDevice (0x0x7f68b2d0bc60) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7f68b2d0bf00) 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 (0x0x7f68b2d0a270) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+ QAbstractItemView (0x0x7f68b2d0a2d8) 0
+ primary-for QHeaderView (0x0x7f68b2d0a270)
+ QAbstractScrollArea (0x0x7f68b2d0a340) 0
+ primary-for QAbstractItemView (0x0x7f68b2d0a2d8)
+ QFrame (0x0x7f68b2d0a3a8) 0
+ primary-for QAbstractScrollArea (0x0x7f68b2d0a340)
+ QWidget (0x0x7f68b2f31cb0) 0
+ primary-for QFrame (0x0x7f68b2d0a3a8)
+ QObject (0x0x7f68b2d0be40) 0
+ primary-for QWidget (0x0x7f68b2f31cb0)
+ QPaintDevice (0x0x7f68b2d0bea0) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7f68b2e133c0) 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 (0x0x7f68b2d0a410) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+ QWidget (0x0x7f68b2f31f50) 0
+ primary-for QLineEdit (0x0x7f68b2d0a410)
+ QObject (0x0x7f68b2e13300) 0
+ primary-for QWidget (0x0x7f68b2f31f50)
+ QPaintDevice (0x0x7f68b2e13360) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7f68b2e13780) 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 (0x0x7f68b2d0a478) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+ QDialog (0x0x7f68b2d0a4e0) 0
+ primary-for QInputDialog (0x0x7f68b2d0a478)
+ QWidget (0x0x7f68b2a1d2a0) 0
+ primary-for QDialog (0x0x7f68b2d0a4e0)
+ QObject (0x0x7f68b2e136c0) 0
+ primary-for QWidget (0x0x7f68b2a1d2a0)
+ QPaintDevice (0x0x7f68b2e13720) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7f68b2e13de0) 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 (0x0x7f68b2d0a680) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f68b2d0a6e8) 0
+ primary-for QItemDelegate (0x0x7f68b2d0a680)
+ QObject (0x0x7f68b2e13d80) 0
+ primary-for QAbstractItemDelegate (0x0x7f68b2d0a6e8)
+
+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 (0x0x7f68b2e13f60) 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 (0x0x7f68b2ada300) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7f68b2ada7e0) 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 (*)(...))QKeySequenceEdit::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 (0x0x7f68b2d0a820) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+ QWidget (0x0x7f68b2a1d5b0) 0
+ primary-for QKeySequenceEdit (0x0x7f68b2d0a820)
+ QObject (0x0x7f68b2ada720) 0
+ primary-for QWidget (0x0x7f68b2a1d5b0)
+ QPaintDevice (0x0x7f68b2ada780) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7f68b2adaa20) 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 (0x0x7f68b2d0a888) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+ QFrame (0x0x7f68b2d0a8f0) 0
+ primary-for QLabel (0x0x7f68b2d0a888)
+ QWidget (0x0x7f68b2a1d620) 0
+ primary-for QFrame (0x0x7f68b2d0a8f0)
+ QObject (0x0x7f68b2ada960) 0
+ primary-for QWidget (0x0x7f68b2a1d620)
+ QPaintDevice (0x0x7f68b2ada9c0) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7f68b2adad20) 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 (0x0x7f68b2d0a958) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+ QFrame (0x0x7f68b2d0a9c0) 0
+ primary-for QLCDNumber (0x0x7f68b2d0a958)
+ QWidget (0x0x7f68b2a1d690) 0
+ primary-for QFrame (0x0x7f68b2d0a9c0)
+ QObject (0x0x7f68b2adac60) 0
+ primary-for QWidget (0x0x7f68b2a1d690)
+ QPaintDevice (0x0x7f68b2adacc0) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7f68b2b57120) 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 (0x0x7f68b2d0aa28) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+ QAbstractItemView (0x0x7f68b2d0aa90) 0
+ primary-for QListView (0x0x7f68b2d0aa28)
+ QAbstractScrollArea (0x0x7f68b2d0aaf8) 0
+ primary-for QAbstractItemView (0x0x7f68b2d0aa90)
+ QFrame (0x0x7f68b2d0ab60) 0
+ primary-for QAbstractScrollArea (0x0x7f68b2d0aaf8)
+ QWidget (0x0x7f68b2a1da10) 0
+ primary-for QFrame (0x0x7f68b2d0ab60)
+ QObject (0x0x7f68b2b57060) 0
+ primary-for QWidget (0x0x7f68b2a1da10)
+ QPaintDevice (0x0x7f68b2b570c0) 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 (0x0x7f68b2b57660) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7f68b2bc2300) 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 (0x0x7f68b2d0add0) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+ QListView (0x0x7f68b2d0ae38) 0
+ primary-for QListWidget (0x0x7f68b2d0add0)
+ QAbstractItemView (0x0x7f68b2d0aea0) 0
+ primary-for QListView (0x0x7f68b2d0ae38)
+ QAbstractScrollArea (0x0x7f68b2d0af08) 0
+ primary-for QAbstractItemView (0x0x7f68b2d0aea0)
+ QFrame (0x0x7f68b2d0af70) 0
+ primary-for QAbstractScrollArea (0x0x7f68b2d0af08)
+ QWidget (0x0x7f68b2b8c070) 0
+ primary-for QFrame (0x0x7f68b2d0af70)
+ QObject (0x0x7f68b2bc2240) 0
+ primary-for QWidget (0x0x7f68b2b8c070)
+ QPaintDevice (0x0x7f68b2bc22a0) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7f68b2bc27e0) 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 (0x0x7f68b2bf1000) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+ QWidget (0x0x7f68b2b8c0e0) 0
+ primary-for QMainWindow (0x0x7f68b2bf1000)
+ QObject (0x0x7f68b2bc2720) 0
+ primary-for QWidget (0x0x7f68b2b8c0e0)
+ QPaintDevice (0x0x7f68b2bc2780) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7f68b2872060) 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 (0x0x7f68b2bf11a0) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+ QAbstractScrollArea (0x0x7f68b2bf1208) 0
+ primary-for QMdiArea (0x0x7f68b2bf11a0)
+ QFrame (0x0x7f68b2bf1270) 0
+ primary-for QAbstractScrollArea (0x0x7f68b2bf1208)
+ QWidget (0x0x7f68b2b8c3f0) 0
+ primary-for QFrame (0x0x7f68b2bf1270)
+ QObject (0x0x7f68b2bc2f60) 0
+ primary-for QWidget (0x0x7f68b2b8c3f0)
+ QPaintDevice (0x0x7f68b2872000) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7f68b28728a0) 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 (0x0x7f68b2bf1410) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+ QWidget (0x0x7f68b2b8c700) 0
+ primary-for QMdiSubWindow (0x0x7f68b2bf1410)
+ QObject (0x0x7f68b28727e0) 0
+ primary-for QWidget (0x0x7f68b2b8c700)
+ QPaintDevice (0x0x7f68b2872840) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7f68b2872f60) 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 (0x0x7f68b2bf15b0) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+ QWidget (0x0x7f68b2b8c930) 0
+ primary-for QMenu (0x0x7f68b2bf15b0)
+ QObject (0x0x7f68b2872ea0) 0
+ primary-for QWidget (0x0x7f68b2b8c930)
+ QPaintDevice (0x0x7f68b2872f00) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7f68b298e420) 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 (0x0x7f68b2bf1618) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+ QWidget (0x0x7f68b2b8c9a0) 0
+ primary-for QMenuBar (0x0x7f68b2bf1618)
+ QObject (0x0x7f68b298e360) 0
+ primary-for QWidget (0x0x7f68b2b8c9a0)
+ QPaintDevice (0x0x7f68b298e3c0) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7f68b298e660) 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 (0x0x7f68b2bf1680) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+ QDialog (0x0x7f68b2bf16e8) 0
+ primary-for QMessageBox (0x0x7f68b2bf1680)
+ QWidget (0x0x7f68b2b8ca10) 0
+ primary-for QDialog (0x0x7f68b2bf16e8)
+ QObject (0x0x7f68b298e5a0) 0
+ primary-for QWidget (0x0x7f68b2b8ca10)
+ QPaintDevice (0x0x7f68b298e600) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7f68b264d120) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7f68b264d180) 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 (0x0x7f68b2bf1888) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f68b2bf18f0) 0
+ primary-for QTextEdit (0x0x7f68b2bf1888)
+ QFrame (0x0x7f68b2bf1958) 0
+ primary-for QAbstractScrollArea (0x0x7f68b2bf18f0)
+ QWidget (0x0x7f68b29b2e00) 0
+ primary-for QFrame (0x0x7f68b2bf1958)
+ QObject (0x0x7f68b264d060) 0
+ primary-for QWidget (0x0x7f68b29b2e00)
+ QPaintDevice (0x0x7f68b264d0c0) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7f68b264db40) 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 (0x0x7f68b2bf1af8) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+ QAbstractScrollArea (0x0x7f68b2bf1b60) 0
+ primary-for QPlainTextEdit (0x0x7f68b2bf1af8)
+ QFrame (0x0x7f68b2bf1bc8) 0
+ primary-for QAbstractScrollArea (0x0x7f68b2bf1b60)
+ QWidget (0x0x7f68b26531c0) 0
+ primary-for QFrame (0x0x7f68b2bf1bc8)
+ QObject (0x0x7f68b264da80) 0
+ primary-for QWidget (0x0x7f68b26531c0)
+ QPaintDevice (0x0x7f68b264dae0) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7f68b27190c0) 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 (0x0x7f68b2bf1c30) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+ QAbstractTextDocumentLayout (0x0x7f68b2bf1c98) 0
+ primary-for QPlainTextDocumentLayout (0x0x7f68b2bf1c30)
+ QObject (0x0x7f68b2719060) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7f68b2bf1c98)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7f68b2719300) 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 (0x0x7f68b2bf1d00) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+ QWidget (0x0x7f68b2653310) 0
+ primary-for QProgressBar (0x0x7f68b2bf1d00)
+ QObject (0x0x7f68b2719240) 0
+ primary-for QWidget (0x0x7f68b2653310)
+ QPaintDevice (0x0x7f68b27192a0) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7f68b2719600) 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 (0x0x7f68b2bf1d68) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+ QDialog (0x0x7f68b2bf1dd0) 0
+ primary-for QProgressDialog (0x0x7f68b2bf1d68)
+ QWidget (0x0x7f68b2653460) 0
+ primary-for QDialog (0x0x7f68b2bf1dd0)
+ QObject (0x0x7f68b2719540) 0
+ primary-for QWidget (0x0x7f68b2653460)
+ QPaintDevice (0x0x7f68b27195a0) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7f68b27197e0) 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 (0x0x7f68b2bf1e38) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+ QCommonStyle (0x0x7f68b2bf1ea0) 0
+ primary-for QProxyStyle (0x0x7f68b2bf1e38)
+ QStyle (0x0x7f68b2bf1f08) 0
+ primary-for QCommonStyle (0x0x7f68b2bf1ea0)
+ QObject (0x0x7f68b2719780) 0
+ primary-for QStyle (0x0x7f68b2bf1f08)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7f68b2719a20) 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 (0x0x7f68b2bf1f70) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+ QAbstractButton (0x0x7f68b2771000) 0
+ primary-for QRadioButton (0x0x7f68b2bf1f70)
+ QWidget (0x0x7f68b26534d0) 0
+ primary-for QAbstractButton (0x0x7f68b2771000)
+ QObject (0x0x7f68b2719960) 0
+ primary-for QWidget (0x0x7f68b26534d0)
+ QPaintDevice (0x0x7f68b27199c0) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7f68b2719c60) 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 (0x0x7f68b2771068) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+ QAbstractSlider (0x0x7f68b27710d0) 0
+ primary-for QScrollBar (0x0x7f68b2771068)
+ QWidget (0x0x7f68b2653540) 0
+ primary-for QAbstractSlider (0x0x7f68b27710d0)
+ QObject (0x0x7f68b2719ba0) 0
+ primary-for QWidget (0x0x7f68b2653540)
+ QPaintDevice (0x0x7f68b2719c00) 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 (0x0x7f68b2719de0) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7f68b2477840) 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 (0x0x7f68b2485478) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+ QObject (0x0x7f68b24777e0) 0
+ primary-for QScroller (0x0x7f68b2485478)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7f68b2477b40) 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 (0x0x7f68b24854e0) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+ QWidget (0x0x7f68b2496150) 0
+ primary-for QSizeGrip (0x0x7f68b24854e0)
+ QObject (0x0x7f68b2477a80) 0
+ primary-for QWidget (0x0x7f68b2496150)
+ QPaintDevice (0x0x7f68b2477ae0) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7f68b2477d80) 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 (0x0x7f68b2485548) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f68b24855b0) 0
+ primary-for QSpinBox (0x0x7f68b2485548)
+ QWidget (0x0x7f68b24961c0) 0
+ primary-for QAbstractSpinBox (0x0x7f68b24855b0)
+ QObject (0x0x7f68b2477cc0) 0
+ primary-for QWidget (0x0x7f68b24961c0)
+ QPaintDevice (0x0x7f68b2477d20) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7f68b24d2000) 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 (0x0x7f68b2485618) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+ QAbstractSpinBox (0x0x7f68b2485680) 0
+ primary-for QDoubleSpinBox (0x0x7f68b2485618)
+ QWidget (0x0x7f68b2496230) 0
+ primary-for QAbstractSpinBox (0x0x7f68b2485680)
+ QObject (0x0x7f68b2477f00) 0
+ primary-for QWidget (0x0x7f68b2496230)
+ QPaintDevice (0x0x7f68b2477f60) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7f68b24d2240) 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 (0x0x7f68b24856e8) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+ QWidget (0x0x7f68b24962a0) 0
+ primary-for QSplashScreen (0x0x7f68b24856e8)
+ QObject (0x0x7f68b24d2180) 0
+ primary-for QWidget (0x0x7f68b24962a0)
+ QPaintDevice (0x0x7f68b24d21e0) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7f68b24d2480) 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 (0x0x7f68b2485750) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+ QFrame (0x0x7f68b24857b8) 0
+ primary-for QSplitter (0x0x7f68b2485750)
+ QWidget (0x0x7f68b2496310) 0
+ primary-for QFrame (0x0x7f68b24857b8)
+ QObject (0x0x7f68b24d23c0) 0
+ primary-for QWidget (0x0x7f68b2496310)
+ QPaintDevice (0x0x7f68b24d2420) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7f68b24d26c0) 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 (0x0x7f68b2485820) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+ QWidget (0x0x7f68b2496380) 0
+ primary-for QSplitterHandle (0x0x7f68b2485820)
+ QObject (0x0x7f68b24d2600) 0
+ primary-for QWidget (0x0x7f68b2496380)
+ QPaintDevice (0x0x7f68b24d2660) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7f68b24d2900) 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 (0x0x7f68b2485888) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+ QLayout (0x0x7f68b24963f0) 0
+ primary-for QStackedLayout (0x0x7f68b2485888)
+ QObject (0x0x7f68b24d2840) 0
+ primary-for QLayout (0x0x7f68b24963f0)
+ QLayoutItem (0x0x7f68b24d28a0) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7f68b24d2c00) 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 (0x0x7f68b24858f0) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+ QFrame (0x0x7f68b2485958) 0
+ primary-for QStackedWidget (0x0x7f68b24858f0)
+ QWidget (0x0x7f68b2496540) 0
+ primary-for QFrame (0x0x7f68b2485958)
+ QObject (0x0x7f68b24d2b40) 0
+ primary-for QWidget (0x0x7f68b2496540)
+ QPaintDevice (0x0x7f68b24d2ba0) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7f68b24d2e40) 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 (0x0x7f68b24859c0) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+ QWidget (0x0x7f68b24965b0) 0
+ primary-for QStatusBar (0x0x7f68b24859c0)
+ QObject (0x0x7f68b24d2d80) 0
+ primary-for QWidget (0x0x7f68b24965b0)
+ QPaintDevice (0x0x7f68b24d2de0) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7f68b255d060) 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 (0x0x7f68b2485a28) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+ QAbstractItemDelegate (0x0x7f68b2485a90) 0
+ primary-for QStyledItemDelegate (0x0x7f68b2485a28)
+ QObject (0x0x7f68b255d000) 0
+ primary-for QAbstractItemDelegate (0x0x7f68b2485a90)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7f68b255d1e0) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7f68b2485af8) 0
+ QPainter (0x0x7f68b255d240) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7f68b255da80) 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 (0x0x7f68b2485b60) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+ QObject (0x0x7f68b255da20) 0
+ primary-for QStylePlugin (0x0x7f68b2485b60)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7f68b255dba0) 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 (0x0x7f68b2485bc8) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+ QObject (0x0x7f68b255db40) 0
+ primary-for QSystemTrayIcon (0x0x7f68b2485bc8)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7f68b255dea0) 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 (0x0x7f68b2485c30) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+ QAbstractItemView (0x0x7f68b2485c98) 0
+ primary-for QTableView (0x0x7f68b2485c30)
+ QAbstractScrollArea (0x0x7f68b2485d00) 0
+ primary-for QAbstractItemView (0x0x7f68b2485c98)
+ QFrame (0x0x7f68b2485d68) 0
+ primary-for QAbstractScrollArea (0x0x7f68b2485d00)
+ QWidget (0x0x7f68b2496af0) 0
+ primary-for QFrame (0x0x7f68b2485d68)
+ QObject (0x0x7f68b255dde0) 0
+ primary-for QWidget (0x0x7f68b2496af0)
+ QPaintDevice (0x0x7f68b255de40) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7f68b25c8060) 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 (0x0x7f68b25c8540) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7f68b224e900) 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 (0x0x7f68b25e9680) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+ QTableView (0x0x7f68b25e96e8) 0
+ primary-for QTableWidget (0x0x7f68b25e9680)
+ QAbstractItemView (0x0x7f68b25e9750) 0
+ primary-for QTableView (0x0x7f68b25e96e8)
+ QAbstractScrollArea (0x0x7f68b25e97b8) 0
+ primary-for QAbstractItemView (0x0x7f68b25e9750)
+ QFrame (0x0x7f68b25e9820) 0
+ primary-for QAbstractScrollArea (0x0x7f68b25e97b8)
+ QWidget (0x0x7f68b2496d20) 0
+ primary-for QFrame (0x0x7f68b25e9820)
+ QObject (0x0x7f68b224e840) 0
+ primary-for QWidget (0x0x7f68b2496d20)
+ QPaintDevice (0x0x7f68b224e8a0) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7f68b224ecc0) 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 (0x0x7f68b25e9888) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+ QTextEdit (0x0x7f68b25e98f0) 0
+ primary-for QTextBrowser (0x0x7f68b25e9888)
+ QAbstractScrollArea (0x0x7f68b25e9958) 0
+ primary-for QTextEdit (0x0x7f68b25e98f0)
+ QFrame (0x0x7f68b25e99c0) 0
+ primary-for QAbstractScrollArea (0x0x7f68b25e9958)
+ QWidget (0x0x7f68b2496d90) 0
+ primary-for QFrame (0x0x7f68b25e99c0)
+ QObject (0x0x7f68b224ec00) 0
+ primary-for QWidget (0x0x7f68b2496d90)
+ QPaintDevice (0x0x7f68b224ec60) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7f68b224ef00) 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 (0x0x7f68b25e9a28) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+ QWidget (0x0x7f68b2496e00) 0
+ primary-for QToolBar (0x0x7f68b25e9a28)
+ QObject (0x0x7f68b224ee40) 0
+ primary-for QWidget (0x0x7f68b2496e00)
+ QPaintDevice (0x0x7f68b224eea0) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7f68b22d3240) 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 (0x0x7f68b25e9a90) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+ QFrame (0x0x7f68b25e9af8) 0
+ primary-for QToolBox (0x0x7f68b25e9a90)
+ QWidget (0x0x7f68b2496e70) 0
+ primary-for QFrame (0x0x7f68b25e9af8)
+ QObject (0x0x7f68b22d3180) 0
+ primary-for QWidget (0x0x7f68b2496e70)
+ QPaintDevice (0x0x7f68b22d31e0) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7f68b22d35a0) 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 (0x0x7f68b25e9b60) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+ QAbstractButton (0x0x7f68b25e9bc8) 0
+ primary-for QToolButton (0x0x7f68b25e9b60)
+ QWidget (0x0x7f68b2496ee0) 0
+ primary-for QAbstractButton (0x0x7f68b25e9bc8)
+ QObject (0x0x7f68b22d34e0) 0
+ primary-for QWidget (0x0x7f68b2496ee0)
+ QPaintDevice (0x0x7f68b22d3540) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7f68b22d37e0) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7f68b22d3960) 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 (0x0x7f68b25e9c30) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+ QAbstractItemView (0x0x7f68b25e9c98) 0
+ primary-for QTreeView (0x0x7f68b25e9c30)
+ QAbstractScrollArea (0x0x7f68b25e9d00) 0
+ primary-for QAbstractItemView (0x0x7f68b25e9c98)
+ QFrame (0x0x7f68b25e9d68) 0
+ primary-for QAbstractScrollArea (0x0x7f68b25e9d00)
+ QWidget (0x0x7f68b22f70e0) 0
+ primary-for QFrame (0x0x7f68b25e9d68)
+ QObject (0x0x7f68b22d38a0) 0
+ primary-for QWidget (0x0x7f68b22f70e0)
+ QPaintDevice (0x0x7f68b22d3900) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7f68b22d3ae0) 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 (0x0x7f68b236e360) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7f68b20f7240) 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 (0x0x7f68b209f068) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+ QTreeView (0x0x7f68b209f0d0) 0
+ primary-for QTreeWidget (0x0x7f68b209f068)
+ QAbstractItemView (0x0x7f68b209f138) 0
+ primary-for QTreeView (0x0x7f68b209f0d0)
+ QAbstractScrollArea (0x0x7f68b209f1a0) 0
+ primary-for QAbstractItemView (0x0x7f68b209f138)
+ QFrame (0x0x7f68b209f208) 0
+ primary-for QAbstractScrollArea (0x0x7f68b209f1a0)
+ QWidget (0x0x7f68b22f7e70) 0
+ primary-for QFrame (0x0x7f68b209f208)
+ QObject (0x0x7f68b20f7180) 0
+ primary-for QWidget (0x0x7f68b22f7e70)
+ QPaintDevice (0x0x7f68b20f71e0) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7f68b20f7660) 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 (0x0x7f68b209f270) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+ QListView (0x0x7f68b209f2d8) 0
+ primary-for QUndoView (0x0x7f68b209f270)
+ QAbstractItemView (0x0x7f68b209f340) 0
+ primary-for QListView (0x0x7f68b209f2d8)
+ QAbstractScrollArea (0x0x7f68b209f3a8) 0
+ primary-for QAbstractItemView (0x0x7f68b209f340)
+ QFrame (0x0x7f68b209f410) 0
+ primary-for QAbstractScrollArea (0x0x7f68b209f3a8)
+ QWidget (0x0x7f68b22f7ee0) 0
+ primary-for QFrame (0x0x7f68b209f410)
+ QObject (0x0x7f68b20f75a0) 0
+ primary-for QWidget (0x0x7f68b22f7ee0)
+ QPaintDevice (0x0x7f68b20f7600) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7f68b20f77e0) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7f68b20f78a0) 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 (0x0x7f68b209f478) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+ QAction (0x0x7f68b209f4e0) 0
+ primary-for QWidgetAction (0x0x7f68b209f478)
+ QObject (0x0x7f68b20f7840) 0
+ primary-for QAction (0x0x7f68b209f4e0)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7f68b20f7ae0) 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 (0x0x7f68b209f548) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+ QDialog (0x0x7f68b209f5b0) 0
+ primary-for QWizard (0x0x7f68b209f548)
+ QWidget (0x0x7f68b22f7f50) 0
+ primary-for QDialog (0x0x7f68b209f5b0)
+ QObject (0x0x7f68b20f7a20) 0
+ primary-for QWidget (0x0x7f68b22f7f50)
+ QPaintDevice (0x0x7f68b20f7a80) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7f68b21a4420) 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 (0x0x7f68b209f750) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+ QWidget (0x0x7f68b216e150) 0
+ primary-for QWizardPage (0x0x7f68b209f750)
+ QObject (0x0x7f68b21a4360) 0
+ primary-for QWidget (0x0x7f68b216e150)
+ QPaintDevice (0x0x7f68b21a43c0) 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 (0x0x7f68b21a45a0) 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 (0x0x7f68b1e225a0) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface) + 16)
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7f68b1e229c0) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7f68b1e7aae0) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7f68b2010360) 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 (0x0x7f68b2003068) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+ QObject (0x0x7f68b2010300) 0
+ primary-for QOpenGLDebugLogger (0x0x7f68b2003068)
+
+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 (0x0x7f68b1ca0120) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7f68b1ca03c0) 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 (0x0x7f68b2003750) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+ QPaintDevice (0x0x7f68b1ca0420) 0
+ primary-for QOpenGLPaintDevice (0x0x7f68b2003750)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7f68b1ca0660) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7f68b1d14de0) 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 (0x0x7f68b1d2d208) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+ QObject (0x0x7f68b1d14d80) 0
+ primary-for QOpenGLShader (0x0x7f68b1d2d208)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7f68b1d44480) 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 (0x0x7f68b1d2d3a8) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+ QObject (0x0x7f68b1d44420) 0
+ primary-for QOpenGLShaderProgram (0x0x7f68b1d2d3a8)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7f68b1d44600) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7f68b1a5c8a0) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7f68b1a5cae0) 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 (0x0x7f68b1d2d548) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+ QObject (0x0x7f68b1a5ca80) 0
+ primary-for QOpenGLTimerQuery (0x0x7f68b1d2d548)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7f68b1a5ccc0) 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 (0x0x7f68b1d2d5b0) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+ QObject (0x0x7f68b1a5cc60) 0
+ primary-for QOpenGLTimeMonitor (0x0x7f68b1d2d5b0)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7f68b1a5ce40) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7f68b1babd20) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7f68b1babf00) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7f68b1babf60) 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 (0x0x7f68b1bdd180) 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 (0x0x7f68b1bdd360) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7f68b1b99d00) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1bdd300) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7f68b1bdd6c0) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7f68b1b99d68) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1bdd660) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7f68b1bdda20) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7f68b1b99dd0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1bdd9c0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7f68b1bddd80) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7f68b1b99e38) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1bddd20) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7f68b1c13120) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7f68b1b99ea0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1c130c0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7f68b1c13480) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7f68b1b99f08) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1c13420) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7f68b1c137e0) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7f68b1b99f70) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1c13780) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7f68b1c13b40) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7f68b1841000) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1c13ae0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7f68b1c13ea0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7f68b1841068) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1c13e40) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7f68b1860240) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7f68b18410d0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b18601e0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7f68b18605a0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7f68b1841138) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1860540) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7f68b1860900) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7f68b18411a0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b18608a0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7f68b1860c60) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7f68b1841208) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1860c00) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7f68b189c000) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7f68b1841270) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1860f60) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7f68b189c360) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7f68b18412d8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b189c300) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7f68b189c6c0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7f68b1841340) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b189c660) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7f68b189ca20) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7f68b18413a8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b189c9c0) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7f68b189cd80) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7f68b1841410) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b189cd20) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7f68b190b120) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7f68b1841478) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b190b0c0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7f68b190b480) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7f68b18414e0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b190b420) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7f68b190b7e0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7f68b1841548) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b190b780) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7f68b190bb40) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7f68b18415b0) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b190bae0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7f68b190bea0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7f68b1841618) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b190be40) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7f68b1979240) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7f68b1841680) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b19791e0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7f68b19795a0) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7f68b18416e8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1979540) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7f68b1979900) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7f68b1841750) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b19798a0) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7f68b1979c60) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7f68b18417b8) 0
+ QOpenGLVersionFunctionsBackend (0x0x7f68b1979c00) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7f68b1979f60) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7f68b19b1120) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7f68b19b1240) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7f68b19b12a0) 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 (0x0x7f68b1841820) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+ QObject (0x0x7f68b19b11e0) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7f68b1841820)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7f68b19b1900) 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 (0x0x7f68b18418f0) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+ QPaintDeviceWindow (0x0x7f68b18c30e0) 0
+ primary-for QOpenGLWindow (0x0x7f68b18418f0)
+ QWindow (0x0x7f68b18c3150) 0
+ primary-for QPaintDeviceWindow (0x0x7f68b18c30e0)
+ QObject (0x0x7f68b19b17e0) 0
+ primary-for QWindow (0x0x7f68b18c3150)
+ QSurface (0x0x7f68b19b1840) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+ QPaintDevice (0x0x7f68b19b18a0) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7f68b19b1b40) 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 (0x0x7f68b18419c0) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+ QWidget (0x0x7f68b18c3310) 0
+ primary-for QOpenGLWidget (0x0x7f68b18419c0)
+ QObject (0x0x7f68b19b1a80) 0
+ primary-for QWidget (0x0x7f68b18c3310)
+ QPaintDevice (0x0x7f68b19b1ae0) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QDesignerActionEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerActionEditorInterface::QPrivateSignal (0x0x7f68b19b1f00) 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 (0x0x7f68b1841a90) 0
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 16)
+ QWidget (0x0x7f68b18c3540) 0
+ primary-for QDesignerActionEditorInterface (0x0x7f68b1841a90)
+ QObject (0x0x7f68b19b1e40) 0
+ primary-for QWidget (0x0x7f68b18c3540)
+ QPaintDevice (0x0x7f68b19b1ea0) 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 (0x0x7f68b1a0c000) 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 (0x0x7f68b1a0c060) 0
+ vptr=((& QAbstractFormBuilder::_ZTV20QAbstractFormBuilder) + 16)
+
+Class QDesignerFormEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormEditorInterface::QPrivateSignal (0x0x7f68b1a0c2a0) 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 (0x0x7f68b1841af8) 0
+ vptr=((& QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface) + 16)
+ QObject (0x0x7f68b1a0c240) 0
+ primary-for QDesignerFormEditorInterface (0x0x7f68b1841af8)
+
+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 (0x0x7f68b1a0c3c0) 0 nearly-empty
+ vptr=((& QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface) + 16)
+
+Class QDesignerFormWindowInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowInterface::QPrivateSignal (0x0x7f68b1a0c840) 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 (0x0x7f68b1841c30) 0
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 16)
+ QWidget (0x0x7f68b18c3690) 0
+ primary-for QDesignerFormWindowInterface (0x0x7f68b1841c30)
+ QObject (0x0x7f68b1a0c780) 0
+ primary-for QWidget (0x0x7f68b18c3690)
+ QPaintDevice (0x0x7f68b1a0c7e0) 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 (0x0x7f68b1a0c9c0) 0 nearly-empty
+ vptr=((& QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface) + 16)
+
+Class QDesignerFormWindowManagerInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowManagerInterface::QPrivateSignal (0x0x7f68b1a0ca80) 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 (0x0x7f68b1841c98) 0
+ vptr=((& QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface) + 16)
+ QObject (0x0x7f68b1a0ca20) 0
+ primary-for QDesignerFormWindowManagerInterface (0x0x7f68b1841c98)
+
+Class QDesignerFormWindowToolInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowToolInterface::QPrivateSignal (0x0x7f68b1a0cd80) 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 (0x0x7f68b1841d00) 0
+ vptr=((& QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface) + 16)
+ QObject (0x0x7f68b1a0cd20) 0
+ primary-for QDesignerFormWindowToolInterface (0x0x7f68b1841d00)
+
+Class QDesignerIntegrationInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegrationInterface::QPrivateSignal (0x0x7f68b1a0cf60) 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 (0x0x7f68b1841d68) 0
+ vptr=((& QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface) + 16)
+ QObject (0x0x7f68b1a0cf00) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f68b1841d68)
+
+Class QDesignerIntegration::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegration::QPrivateSignal (0x0x7f68b16d31e0) 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 (0x0x7f68b1841dd0) 0
+ vptr=((& QDesignerIntegration::_ZTV20QDesignerIntegration) + 16)
+ QDesignerIntegrationInterface (0x0x7f68b1841e38) 0
+ primary-for QDesignerIntegration (0x0x7f68b1841dd0)
+ QObject (0x0x7f68b16d3180) 0
+ primary-for QDesignerIntegrationInterface (0x0x7f68b1841e38)
+
+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 (0x0x7f68b16d3300) 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 (0x0x7f68b16d36c0) 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 (0x0x7f68b16d3ae0) 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 (0x0x7f68b16d3f00) 0 nearly-empty
+ vptr=((& QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface) + 16)
+
+Class QDesignerMetaDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerMetaDataBaseInterface::QPrivateSignal (0x0x7f68b1731000) 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 (0x0x7f68b17101a0) 0
+ vptr=((& QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface) + 16)
+ QObject (0x0x7f68b16d3f60) 0
+ primary-for QDesignerMetaDataBaseInterface (0x0x7f68b17101a0)
+
+Class QDesignerNewFormWidgetInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerNewFormWidgetInterface::QPrivateSignal (0x0x7f68b1731180) 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 (0x0x7f68b1710208) 0
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 16)
+ QWidget (0x0x7f68b16a8bd0) 0
+ primary-for QDesignerNewFormWidgetInterface (0x0x7f68b1710208)
+ QObject (0x0x7f68b17310c0) 0
+ primary-for QWidget (0x0x7f68b16a8bd0)
+ QPaintDevice (0x0x7f68b1731120) 16
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 464)
+
+Class QDesignerObjectInspectorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerObjectInspectorInterface::QPrivateSignal (0x0x7f68b1731300) 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 (0x0x7f68b1710270) 0
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 16)
+ QWidget (0x0x7f68b16a8c40) 0
+ primary-for QDesignerObjectInspectorInterface (0x0x7f68b1710270)
+ QObject (0x0x7f68b1731240) 0
+ primary-for QWidget (0x0x7f68b16a8c40)
+ QPaintDevice (0x0x7f68b17312a0) 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 (0x0x7f68b17313c0) 0 nearly-empty
+ vptr=((& QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface) + 16)
+
+Class QDesignerPromotionInterface::PromotedClass
+ size=16 align=8
+ base size=16 base align=8
+QDesignerPromotionInterface::PromotedClass (0x0x7f68b1731480) 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 (0x0x7f68b1731420) 0 nearly-empty
+ vptr=((& QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface) + 16)
+
+Class QDesignerPropertyEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerPropertyEditorInterface::QPrivateSignal (0x0x7f68b17315a0) 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 (0x0x7f68b17102d8) 0
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 16)
+ QWidget (0x0x7f68b16a8cb0) 0
+ primary-for QDesignerPropertyEditorInterface (0x0x7f68b17102d8)
+ QObject (0x0x7f68b17314e0) 0
+ primary-for QWidget (0x0x7f68b16a8cb0)
+ QPaintDevice (0x0x7f68b1731540) 16
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 504)
+
+Class QDesignerResourceBrowserInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerResourceBrowserInterface::QPrivateSignal (0x0x7f68b1731720) 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 (0x0x7f68b1710340) 0
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 16)
+ QWidget (0x0x7f68b16a8d20) 0
+ primary-for QDesignerResourceBrowserInterface (0x0x7f68b1710340)
+ QObject (0x0x7f68b1731660) 0
+ primary-for QWidget (0x0x7f68b16a8d20)
+ QPaintDevice (0x0x7f68b17316c0) 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 (0x0x7f68b17317e0) 0 nearly-empty
+ vptr=((& QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface) + 16)
+
+Class QDesignerWidgetBoxInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetBoxInterface::QPrivateSignal (0x0x7f68b1731900) 0 empty
+
+Class QDesignerWidgetBoxInterface::Widget
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetBoxInterface::Widget (0x0x7f68b1731960) 0
+
+Class QDesignerWidgetBoxInterface::Category
+ size=56 align=8
+ base size=56 base align=8
+QDesignerWidgetBoxInterface::Category (0x0x7f68b1731a20) 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 (0x0x7f68b17103a8) 0
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 16)
+ QWidget (0x0x7f68b16a8d90) 0
+ primary-for QDesignerWidgetBoxInterface (0x0x7f68b17103a8)
+ QObject (0x0x7f68b1731840) 0
+ primary-for QWidget (0x0x7f68b16a8d90)
+ QPaintDevice (0x0x7f68b17318a0) 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 (0x0x7f68b14857e0) 0 nearly-empty
+ vptr=((& QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface) + 16)
+
+Class QDesignerWidgetDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetDataBaseInterface::QPrivateSignal (0x0x7f68b1485900) 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 (0x0x7f68b1493d00) 0
+ vptr=((& QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface) + 16)
+ QObject (0x0x7f68b14858a0) 0
+ primary-for QDesignerWidgetDataBaseInterface (0x0x7f68b1493d00)
+
+Class QDesignerWidgetFactoryInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetFactoryInterface::QPrivateSignal (0x0x7f68b14c4300) 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 (0x0x7f68b14bc548) 0
+ vptr=((& QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface) + 16)
+ QObject (0x0x7f68b14c42a0) 0
+ primary-for QDesignerWidgetFactoryInterface (0x0x7f68b14bc548)
+
+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 (0x0x7f68b14c43c0) 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 (0x0x7f68b14c47e0) 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 (0x0x7f68b14c4c60) 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 (0x0x7f68b14bc958) 0
+ vptr=((& QFormBuilder::_ZTV12QFormBuilder) + 16)
+ QAbstractFormBuilder (0x0x7f68b1560060) 0
+ primary-for QFormBuilder (0x0x7f68b14bc958)
+
+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 (0x0x7f68b15600c0) 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 (0x0x7f68b15604e0) 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 (0x0x7f68b1560900) 0 nearly-empty
+ vptr=((& QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension) + 16)
+
+Class QExtensionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QExtensionManager::QPrivateSignal (0x0x7f68b1560de0) 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 (0x0x7f68b17b4930) 0
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 16)
+ QObject (0x0x7f68b1560d20) 0
+ primary-for QExtensionManager (0x0x7f68b17b4930)
+ QAbstractExtensionManager (0x0x7f68b1560d80) 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 (0x0x7f68b15db8a0) 0 nearly-empty
+ vptr=((& QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension) + 16)
+
+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 (0x0x7f68b12a9120) 0 nearly-empty
+ vptr=((& QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase) + 16)
+
+Class QSqlDatabase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDatabase (0x0x7f68b12a9420) 0
+
+Class QSqlDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriver::QPrivateSignal (0x0x7f68b12a94e0) 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 (0x0x7f68b15e37b8) 0
+ vptr=((& QSqlDriver::_ZTV10QSqlDriver) + 16)
+ QObject (0x0x7f68b12a9480) 0
+ primary-for QSqlDriver (0x0x7f68b15e37b8)
+
+Class QSqlDriverPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriverPlugin::QPrivateSignal (0x0x7f68b12a96c0) 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 (0x0x7f68b15e3820) 0
+ vptr=((& QSqlDriverPlugin::_ZTV16QSqlDriverPlugin) + 16)
+ QObject (0x0x7f68b12a9660) 0
+ primary-for QSqlDriverPlugin (0x0x7f68b15e3820)
+
+Class QSqlError
+ size=8 align=8
+ base size=8 base align=8
+QSqlError (0x0x7f68b12a97e0) 0
+
+Class QSqlField
+ size=40 align=8
+ base size=40 base align=8
+QSqlField (0x0x7f68b133f240) 0
+
+Class QSqlRecord
+ size=8 align=8
+ base size=8 base align=8
+QSqlRecord (0x0x7f68b13a81e0) 0
+
+Class QSqlIndex
+ size=80 align=8
+ base size=80 base align=8
+QSqlIndex (0x0x7f68b13f8820) 0
+ QSqlRecord (0x0x7f68b13eede0) 0
+
+Class QSqlQuery
+ size=8 align=8
+ base size=8 base align=8
+QSqlQuery (0x0x7f68b10b21e0) 0
+
+Class QSqlQueryModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlQueryModel::QPrivateSignal (0x0x7f68b10b25a0) 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 (0x0x7f68b10a6a90) 0
+ vptr=((& QSqlQueryModel::_ZTV14QSqlQueryModel) + 16)
+ QAbstractTableModel (0x0x7f68b10a6af8) 0
+ primary-for QSqlQueryModel (0x0x7f68b10a6a90)
+ QAbstractItemModel (0x0x7f68b10a6b60) 0
+ primary-for QAbstractTableModel (0x0x7f68b10a6af8)
+ QObject (0x0x7f68b10b2540) 0
+ primary-for QAbstractItemModel (0x0x7f68b10a6b60)
+
+Class QSqlTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlTableModel::QPrivateSignal (0x0x7f68b10b2780) 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 (0x0x7f68b10a6bc8) 0
+ vptr=((& QSqlTableModel::_ZTV14QSqlTableModel) + 16)
+ QSqlQueryModel (0x0x7f68b10a6c30) 0
+ primary-for QSqlTableModel (0x0x7f68b10a6bc8)
+ QAbstractTableModel (0x0x7f68b10a6c98) 0
+ primary-for QSqlQueryModel (0x0x7f68b10a6c30)
+ QAbstractItemModel (0x0x7f68b10a6d00) 0
+ primary-for QAbstractTableModel (0x0x7f68b10a6c98)
+ QObject (0x0x7f68b10b2720) 0
+ primary-for QAbstractItemModel (0x0x7f68b10a6d00)
+
+Class QSqlRelation
+ size=72 align=8
+ base size=72 base align=8
+QSqlRelation (0x0x7f68b10b2900) 0
+
+Class QSqlRelationalTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlRelationalTableModel::QPrivateSignal (0x0x7f68b1131720) 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 (0x0x7f68b11349c0) 0
+ vptr=((& QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel) + 16)
+ QSqlTableModel (0x0x7f68b1134a28) 0
+ primary-for QSqlRelationalTableModel (0x0x7f68b11349c0)
+ QSqlQueryModel (0x0x7f68b1134a90) 0
+ primary-for QSqlTableModel (0x0x7f68b1134a28)
+ QAbstractTableModel (0x0x7f68b1134af8) 0
+ primary-for QSqlQueryModel (0x0x7f68b1134a90)
+ QAbstractItemModel (0x0x7f68b1134b60) 0
+ primary-for QAbstractTableModel (0x0x7f68b1134af8)
+ QObject (0x0x7f68b11316c0) 0
+ primary-for QAbstractItemModel (0x0x7f68b1134b60)
+
+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 (0x0x7f68b11318a0) 0
+ vptr=((& QSqlResult::_ZTV10QSqlResult) + 16)
+
+Class QHelpGlobal
+ size=1 align=1
+ base size=0 base align=1
+QHelpGlobal (0x0x7f68b11319c0) 0 empty
+
+Class QCompressedHelpInfo
+ size=8 align=8
+ base size=8 base align=8
+QCompressedHelpInfo (0x0x7f68b1131a20) 0
+
+Class QHelpContentItem
+ size=8 align=8
+ base size=8 base align=8
+QHelpContentItem (0x0x7f68b1131b40) 0
+
+Class QHelpContentModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentModel::QPrivateSignal (0x0x7f68b1131c00) 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 (0x0x7f68b1134bc8) 0
+ vptr=((& QHelpContentModel::_ZTV17QHelpContentModel) + 16)
+ QAbstractItemModel (0x0x7f68b1134c30) 0
+ primary-for QHelpContentModel (0x0x7f68b1134bc8)
+ QObject (0x0x7f68b1131ba0) 0
+ primary-for QAbstractItemModel (0x0x7f68b1134c30)
+
+Class QHelpContentWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentWidget::QPrivateSignal (0x0x7f68b1131d80) 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 (0x0x7f68b1134c98) 0
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 16)
+ QTreeView (0x0x7f68b1134d00) 0
+ primary-for QHelpContentWidget (0x0x7f68b1134c98)
+ QAbstractItemView (0x0x7f68b1134d68) 0
+ primary-for QTreeView (0x0x7f68b1134d00)
+ QAbstractScrollArea (0x0x7f68b1134dd0) 0
+ primary-for QAbstractItemView (0x0x7f68b1134d68)
+ QFrame (0x0x7f68b1134e38) 0
+ primary-for QAbstractScrollArea (0x0x7f68b1134dd0)
+ QWidget (0x0x7f68b115b0e0) 0
+ primary-for QFrame (0x0x7f68b1134e38)
+ QObject (0x0x7f68b1131cc0) 0
+ primary-for QWidget (0x0x7f68b115b0e0)
+ QPaintDevice (0x0x7f68b1131d20) 16
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 816)
+
+Class QHelpEngineCore::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngineCore::QPrivateSignal (0x0x7f68b1131ea0) 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 (0x0x7f68b1134ea0) 0
+ vptr=((& QHelpEngineCore::_ZTV15QHelpEngineCore) + 16)
+ QObject (0x0x7f68b1131e40) 0
+ primary-for QHelpEngineCore (0x0x7f68b1134ea0)
+
+Class QHelpEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngine::QPrivateSignal (0x0x7f68b11c3000) 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 (0x0x7f68b1134f08) 0
+ vptr=((& QHelpEngine::_ZTV11QHelpEngine) + 16)
+ QHelpEngineCore (0x0x7f68b1134f70) 0
+ primary-for QHelpEngine (0x0x7f68b1134f08)
+ QObject (0x0x7f68b1131f60) 0
+ primary-for QHelpEngineCore (0x0x7f68b1134f70)
+
+Class QHelpFilterData
+ size=8 align=8
+ base size=8 base align=8
+QHelpFilterData (0x0x7f68b11c30c0) 0
+
+Class QHelpFilterEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterEngine::QPrivateSignal (0x0x7f68b11c3240) 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 (0x0x7f68b11e3000) 0
+ vptr=((& QHelpFilterEngine::_ZTV17QHelpFilterEngine) + 16)
+ QObject (0x0x7f68b11c31e0) 0
+ primary-for QHelpFilterEngine (0x0x7f68b11e3000)
+
+Class QHelpFilterSettingsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterSettingsWidget::QPrivateSignal (0x0x7f68b11c33c0) 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 (0x0x7f68b11e3068) 0
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 16)
+ QWidget (0x0x7f68b115b150) 0
+ primary-for QHelpFilterSettingsWidget (0x0x7f68b11e3068)
+ QObject (0x0x7f68b11c3300) 0
+ primary-for QWidget (0x0x7f68b115b150)
+ QPaintDevice (0x0x7f68b11c3360) 16
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 448)
+
+Class QHelpIndexModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexModel::QPrivateSignal (0x0x7f68b11c3660) 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 (0x0x7f68b11e30d0) 0
+ vptr=((& QHelpIndexModel::_ZTV15QHelpIndexModel) + 16)
+ QStringListModel (0x0x7f68b11e3138) 0
+ primary-for QHelpIndexModel (0x0x7f68b11e30d0)
+ QAbstractListModel (0x0x7f68b11e31a0) 0
+ primary-for QStringListModel (0x0x7f68b11e3138)
+ QAbstractItemModel (0x0x7f68b11e3208) 0
+ primary-for QAbstractListModel (0x0x7f68b11e31a0)
+ QObject (0x0x7f68b11c3600) 0
+ primary-for QAbstractItemModel (0x0x7f68b11e3208)
+
+Class QHelpIndexWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexWidget::QPrivateSignal (0x0x7f68b11c37e0) 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 (0x0x7f68b11e3270) 0
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 16)
+ QListView (0x0x7f68b11e32d8) 0
+ primary-for QHelpIndexWidget (0x0x7f68b11e3270)
+ QAbstractItemView (0x0x7f68b11e3340) 0
+ primary-for QListView (0x0x7f68b11e32d8)
+ QAbstractScrollArea (0x0x7f68b11e33a8) 0
+ primary-for QAbstractItemView (0x0x7f68b11e3340)
+ QFrame (0x0x7f68b11e3410) 0
+ primary-for QAbstractScrollArea (0x0x7f68b11e33a8)
+ QWidget (0x0x7f68b115b1c0) 0
+ primary-for QFrame (0x0x7f68b11e3410)
+ QObject (0x0x7f68b11c3720) 0
+ primary-for QWidget (0x0x7f68b115b1c0)
+ QPaintDevice (0x0x7f68b11c3780) 16
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 800)
+
+Class QHelpLink
+ size=32 align=8
+ base size=32 base align=8
+QHelpLink (0x0x7f68b11c38a0) 0
+
+Class QHelpSearchQuery
+ size=32 align=8
+ base size=32 base align=8
+QHelpSearchQuery (0x0x7f68b11c3900) 0
+
+Class QHelpSearchResult
+ size=8 align=8
+ base size=8 base align=8
+QHelpSearchResult (0x0x7f68b0e39120) 0
+
+Class QHelpSearchEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchEngine::QPrivateSignal (0x0x7f68b0e39240) 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 (0x0x7f68b11e36e8) 0
+ vptr=((& QHelpSearchEngine::_ZTV17QHelpSearchEngine) + 16)
+ QObject (0x0x7f68b0e391e0) 0
+ primary-for QHelpSearchEngine (0x0x7f68b11e36e8)
+
+Class QHelpSearchQueryWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchQueryWidget::QPrivateSignal (0x0x7f68b0e393c0) 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 (0x0x7f68b11e3750) 0
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 16)
+ QWidget (0x0x7f68b115b540) 0
+ primary-for QHelpSearchQueryWidget (0x0x7f68b11e3750)
+ QObject (0x0x7f68b0e39300) 0
+ primary-for QWidget (0x0x7f68b115b540)
+ QPaintDevice (0x0x7f68b0e39360) 16
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 448)
+
+Class QHelpSearchResultWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchResultWidget::QPrivateSignal (0x0x7f68b0e39540) 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 (0x0x7f68b11e37b8) 0
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 16)
+ QWidget (0x0x7f68b115b5b0) 0
+ primary-for QHelpSearchResultWidget (0x0x7f68b11e37b8)
+ QObject (0x0x7f68b0e39480) 0
+ primary-for QWidget (0x0x7f68b115b5b0)
+ QPaintDevice (0x0x7f68b0e394e0) 16
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 448)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7f68b0e39600) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7f68b0efaf00) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7f68b0f78900) 0 empty
+
+Vtable for QAbstractNetworkCache
+QAbstractNetworkCache::_ZTV21QAbstractNetworkCache: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractNetworkCache)
+16 (int (*)(...))QAbstractNetworkCache::metaObject
+24 (int (*)(...))QAbstractNetworkCache::qt_metacast
+32 (int (*)(...))QAbstractNetworkCache::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
+
+Class QAbstractNetworkCache
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNetworkCache (0x0x7f68b0f82270) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+ QObject (0x0x7f68b0f788a0) 0
+ primary-for QAbstractNetworkCache (0x0x7f68b0f82270)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7f68b0f78b40) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSocket)
+16 (int (*)(...))QAbstractSocket::metaObject
+24 (int (*)(...))QAbstractSocket::qt_metacast
+32 (int (*)(...))QAbstractSocket::qt_metacall
+40 (int (*)(...))QAbstractSocket::~QAbstractSocket
+48 (int (*)(...))QAbstractSocket::~QAbstractSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7f68b0f822d8) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+ QIODevice (0x0x7f68b0ea0d20) 0
+ primary-for QAbstractSocket (0x0x7f68b0f822d8)
+ QObject (0x0x7f68b0f78a80) 0
+ primary-for QIODevice (0x0x7f68b0ea0d20)
+ QIODeviceBase (0x0x7f68b0f78ae0) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7f68b0d15720) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7f68b0d157e0) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7f68b0d8f120) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7f68b0dcba20) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7f68b0a21360) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7f68b0a5af60) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7f68b0aa7cc0) 0 empty
+
+Vtable for QDnsLookup
+QDnsLookup::_ZTV10QDnsLookup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDnsLookup)
+16 (int (*)(...))QDnsLookup::metaObject
+24 (int (*)(...))QDnsLookup::qt_metacast
+32 (int (*)(...))QDnsLookup::qt_metacall
+40 (int (*)(...))QDnsLookup::~QDnsLookup
+48 (int (*)(...))QDnsLookup::~QDnsLookup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDnsLookup
+ size=16 align=8
+ base size=16 base align=8
+QDnsLookup (0x0x7f68b0abb0d0) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+ QObject (0x0x7f68b0aa7c60) 0
+ primary-for QDnsLookup (0x0x7f68b0abb0d0)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7f68b0add000) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7f68b0add120) 0
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7f68b0ba01e0) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpSocket)
+16 (int (*)(...))QTcpSocket::metaObject
+24 (int (*)(...))QTcpSocket::qt_metacast
+32 (int (*)(...))QTcpSocket::qt_metacall
+40 (int (*)(...))QTcpSocket::~QTcpSocket
+48 (int (*)(...))QTcpSocket::~QTcpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7f68b0b8bea0) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+ QAbstractSocket (0x0x7f68b0b8bf08) 0
+ primary-for QTcpSocket (0x0x7f68b0b8bea0)
+ QIODevice (0x0x7f68b0adf8c0) 0
+ primary-for QAbstractSocket (0x0x7f68b0b8bf08)
+ QObject (0x0x7f68b0ba0120) 0
+ primary-for QIODevice (0x0x7f68b0adf8c0)
+ QIODeviceBase (0x0x7f68b0ba0180) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7f68b0ba0840) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7f68b08a4120) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7f68b06b3a20) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslSocket)
+16 (int (*)(...))QSslSocket::metaObject
+24 (int (*)(...))QSslSocket::qt_metacast
+32 (int (*)(...))QSslSocket::qt_metacall
+40 (int (*)(...))QSslSocket::~QSslSocket
+48 (int (*)(...))QSslSocket::~QSslSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QSslSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QSslSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QSslSocket::bytesAvailable
+184 (int (*)(...))QSslSocket::bytesToWrite
+192 (int (*)(...))QSslSocket::canReadLine
+200 (int (*)(...))QSslSocket::waitForReadyRead
+208 (int (*)(...))QSslSocket::waitForBytesWritten
+216 (int (*)(...))QSslSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QSslSocket::skipData
+240 (int (*)(...))QSslSocket::writeData
+248 (int (*)(...))QSslSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QSslSocket::connectToHost
+272 (int (*)(...))QSslSocket::disconnectFromHost
+280 (int (*)(...))QSslSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QSslSocket::setSocketDescriptor
+304 (int (*)(...))QSslSocket::setSocketOption
+312 (int (*)(...))QSslSocket::socketOption
+320 (int (*)(...))QSslSocket::waitForConnected
+328 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7f68b06af820) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+ QTcpSocket (0x0x7f68b06af888) 0
+ primary-for QSslSocket (0x0x7f68b06af820)
+ QAbstractSocket (0x0x7f68b06af8f0) 0
+ primary-for QTcpSocket (0x0x7f68b06af888)
+ QIODevice (0x0x7f68b06d2070) 0
+ primary-for QAbstractSocket (0x0x7f68b06af8f0)
+ QObject (0x0x7f68b06b3960) 0
+ primary-for QIODevice (0x0x7f68b06d2070)
+ QIODeviceBase (0x0x7f68b06b39c0) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7f68b06b3c00) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7f68b06b3c60) 0
+
+Vtable for QDtlsClientVerifier
+QDtlsClientVerifier::_ZTV19QDtlsClientVerifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDtlsClientVerifier)
+16 (int (*)(...))QDtlsClientVerifier::metaObject
+24 (int (*)(...))QDtlsClientVerifier::qt_metacast
+32 (int (*)(...))QDtlsClientVerifier::qt_metacall
+40 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+48 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtlsClientVerifier
+ size=16 align=8
+ base size=16 base align=8
+QDtlsClientVerifier (0x0x7f68b06af958) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+ QObject (0x0x7f68b06b3ba0) 0
+ primary-for QDtlsClientVerifier (0x0x7f68b06af958)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7f68b06b3e40) 0 empty
+
+Vtable for QDtls
+QDtls::_ZTV5QDtls: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDtls)
+16 (int (*)(...))QDtls::metaObject
+24 (int (*)(...))QDtls::qt_metacast
+32 (int (*)(...))QDtls::qt_metacall
+40 (int (*)(...))QDtls::~QDtls
+48 (int (*)(...))QDtls::~QDtls
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtls
+ size=16 align=8
+ base size=16 base align=8
+QDtls (0x0x7f68b06af9c0) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+ QObject (0x0x7f68b06b3de0) 0
+ primary-for QDtls (0x0x7f68b06af9c0)
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7f68b0728000) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7f68b0773720) 0
+
+Class QHttp1Configuration::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QHttp1Configuration::ShortData (0x0x7f68b07d8720) 0
+
+Class QHttp1Configuration::U
+ size=8 align=8
+ base size=8 base align=8
+QHttp1Configuration::U (0x0x7f68b07d8780) 0
+
+Class QHttp1Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp1Configuration (0x0x7f68b07d86c0) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7f68b04a78a0) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7f68b05002a0) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7f68b0535d80) 0 empty
+
+Vtable for QHttpMultiPart
+QHttpMultiPart::_ZTV14QHttpMultiPart: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QHttpMultiPart)
+16 (int (*)(...))QHttpMultiPart::metaObject
+24 (int (*)(...))QHttpMultiPart::qt_metacast
+32 (int (*)(...))QHttpMultiPart::qt_metacall
+40 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+48 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHttpMultiPart
+ size=16 align=8
+ base size=16 base align=8
+QHttpMultiPart (0x0x7f68b053bd00) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+ QObject (0x0x7f68b0535d20) 0
+ primary-for QHttpMultiPart (0x0x7f68b053bd00)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7f68b0535f60) 0 empty
+
+Vtable for QLocalServer
+QLocalServer::_ZTV12QLocalServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalServer)
+16 (int (*)(...))QLocalServer::metaObject
+24 (int (*)(...))QLocalServer::qt_metacast
+32 (int (*)(...))QLocalServer::qt_metacall
+40 (int (*)(...))QLocalServer::~QLocalServer
+48 (int (*)(...))QLocalServer::~QLocalServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalServer::hasPendingConnections
+120 (int (*)(...))QLocalServer::nextPendingConnection
+128 (int (*)(...))QLocalServer::incomingConnection
+
+Class QLocalServer
+ size=16 align=8
+ base size=16 base align=8
+QLocalServer (0x0x7f68b053bd68) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+ QObject (0x0x7f68b0535f00) 0
+ primary-for QLocalServer (0x0x7f68b053bd68)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7f68b05717e0) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalSocket)
+16 (int (*)(...))QLocalSocket::metaObject
+24 (int (*)(...))QLocalSocket::qt_metacast
+32 (int (*)(...))QLocalSocket::qt_metacall
+40 (int (*)(...))QLocalSocket::~QLocalSocket
+48 (int (*)(...))QLocalSocket::~QLocalSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalSocket::isSequential
+120 (int (*)(...))QLocalSocket::open
+128 (int (*)(...))QLocalSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QLocalSocket::bytesAvailable
+184 (int (*)(...))QLocalSocket::bytesToWrite
+192 (int (*)(...))QLocalSocket::canReadLine
+200 (int (*)(...))QLocalSocket::waitForReadyRead
+208 (int (*)(...))QLocalSocket::waitForBytesWritten
+216 (int (*)(...))QLocalSocket::readData
+224 (int (*)(...))QLocalSocket::readLineData
+232 (int (*)(...))QLocalSocket::skipData
+240 (int (*)(...))QLocalSocket::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7f68b053bf08) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+ QIODevice (0x0x7f68b052c850) 0
+ primary-for QLocalSocket (0x0x7f68b053bf08)
+ QObject (0x0x7f68b0571720) 0
+ primary-for QIODevice (0x0x7f68b052c850)
+ QIODeviceBase (0x0x7f68b0571780) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7f68b0571ea0) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7f68b02e9d20) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7f68b03c53c0) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QNetworkAccessManager)
+16 (int (*)(...))QNetworkAccessManager::metaObject
+24 (int (*)(...))QNetworkAccessManager::qt_metacast
+32 (int (*)(...))QNetworkAccessManager::qt_metacall
+40 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+48 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkAccessManager::supportedSchemes
+120 (int (*)(...))QNetworkAccessManager::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7f68b036ee38) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+ QObject (0x0x7f68b03c5360) 0
+ primary-for QNetworkAccessManager (0x0x7f68b036ee38)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7f68b03c5540) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7f68b0042ea0) 0 empty
+
+Vtable for QNetworkCookieJar
+QNetworkCookieJar::_ZTV17QNetworkCookieJar: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkCookieJar)
+16 (int (*)(...))QNetworkCookieJar::metaObject
+24 (int (*)(...))QNetworkCookieJar::qt_metacast
+32 (int (*)(...))QNetworkCookieJar::qt_metacall
+40 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+48 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkCookieJar::cookiesForUrl
+120 (int (*)(...))QNetworkCookieJar::setCookiesFromUrl
+128 (int (*)(...))QNetworkCookieJar::insertCookie
+136 (int (*)(...))QNetworkCookieJar::updateCookie
+144 (int (*)(...))QNetworkCookieJar::deleteCookie
+152 (int (*)(...))QNetworkCookieJar::validateCookie
+
+Class QNetworkCookieJar
+ size=16 align=8
+ base size=16 base align=8
+QNetworkCookieJar (0x0x7f68b0057138) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+ QObject (0x0x7f68b0042e40) 0
+ primary-for QNetworkCookieJar (0x0x7f68b0057138)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7f68b0079060) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7f68b00bdde0) 0 empty
+
+Vtable for QNetworkDiskCache
+QNetworkDiskCache::_ZTV17QNetworkDiskCache: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkDiskCache)
+16 (int (*)(...))QNetworkDiskCache::metaObject
+24 (int (*)(...))QNetworkDiskCache::qt_metacast
+32 (int (*)(...))QNetworkDiskCache::qt_metacall
+40 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+48 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkDiskCache::metaData
+120 (int (*)(...))QNetworkDiskCache::updateMetaData
+128 (int (*)(...))QNetworkDiskCache::data
+136 (int (*)(...))QNetworkDiskCache::remove
+144 (int (*)(...))QNetworkDiskCache::cacheSize
+152 (int (*)(...))QNetworkDiskCache::prepare
+160 (int (*)(...))QNetworkDiskCache::insert
+168 (int (*)(...))QNetworkDiskCache::clear
+176 (int (*)(...))QNetworkDiskCache::expire
+
+Class QNetworkDiskCache
+ size=16 align=8
+ base size=16 base align=8
+QNetworkDiskCache (0x0x7f68b00c9478) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+ QAbstractNetworkCache (0x0x7f68b00c94e0) 0
+ primary-for QNetworkDiskCache (0x0x7f68b00c9478)
+ QObject (0x0x7f68b00bdd80) 0
+ primary-for QAbstractNetworkCache (0x0x7f68b00c94e0)
+
+Class QNetworkInformation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkInformation::QPrivateSignal (0x0x7f68b00f9000) 0 empty
+
+Vtable for QNetworkInformation
+QNetworkInformation::_ZTV19QNetworkInformation: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNetworkInformation)
+16 (int (*)(...))QNetworkInformation::metaObject
+24 (int (*)(...))QNetworkInformation::qt_metacast
+32 (int (*)(...))QNetworkInformation::qt_metacall
+40 (int (*)(...))QNetworkInformation::~QNetworkInformation
+48 (int (*)(...))QNetworkInformation::~QNetworkInformation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkInformation
+ size=16 align=8
+ base size=16 base align=8
+QNetworkInformation (0x0x7f68b00c9548) 0
+ vptr=((& QNetworkInformation::_ZTV19QNetworkInformation) + 16)
+ QObject (0x0x7f68b00bdf60) 0
+ primary-for QNetworkInformation (0x0x7f68b00c9548)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7f68b00f9840) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7f68afefbba0) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7f68afc4d000) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7f68afc91a20) 0
+
+Vtable for QNetworkProxyFactory
+QNetworkProxyFactory::_ZTV20QNetworkProxyFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QNetworkProxyFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNetworkProxyFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyFactory (0x0x7f68afcee900) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7f68afd73540) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QNetworkReply)
+16 (int (*)(...))QNetworkReply::metaObject
+24 (int (*)(...))QNetworkReply::qt_metacast
+32 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::writeData
+248 (int (*)(...))QNetworkReply::setReadBufferSize
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QNetworkReply::ignoreSslErrors
+272 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+288 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7f68afcf4af8) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+ QIODevice (0x0x7f68afc7fe70) 0
+ primary-for QNetworkReply (0x0x7f68afcf4af8)
+ QObject (0x0x7f68afd73480) 0
+ primary-for QIODevice (0x0x7f68afc7fe70)
+ QIODeviceBase (0x0x7f68afd734e0) 0 empty
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7f68afe0b360) 0
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7f68ba388ae0) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7f68be7d6000) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7f68bacb8ba0) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7f68b8def000) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7f68b7dd2a20) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7f68b7b1b780) 0 empty
+
+Vtable for QTcpServer
+QTcpServer::_ZTV10QTcpServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpServer)
+16 (int (*)(...))QTcpServer::metaObject
+24 (int (*)(...))QTcpServer::qt_metacast
+32 (int (*)(...))QTcpServer::qt_metacall
+40 (int (*)(...))QTcpServer::~QTcpServer
+48 (int (*)(...))QTcpServer::~QTcpServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QTcpServer::incomingConnection
+
+Class QTcpServer
+ size=16 align=8
+ base size=16 base align=8
+QTcpServer (0x0x7f68b78a6410) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+ QObject (0x0x7f68b7ae0420) 0
+ primary-for QTcpServer (0x0x7f68b78a6410)
+
+Class QSslServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslServer::QPrivateSignal (0x0x7f68b7b41000) 0 empty
+
+Vtable for QSslServer
+QSslServer::_ZTV10QSslServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslServer)
+16 (int (*)(...))QSslServer::metaObject
+24 (int (*)(...))QSslServer::qt_metacast
+32 (int (*)(...))QSslServer::qt_metacall
+40 (int (*)(...))QSslServer::~QSslServer
+48 (int (*)(...))QSslServer::~QSslServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QSslServer::incomingConnection
+
+Class QSslServer
+ size=16 align=8
+ base size=16 base align=8
+QSslServer (0x0x7f68b78a65b0) 0
+ vptr=((& QSslServer::_ZTV10QSslServer) + 16)
+ QTcpServer (0x0x7f68b78a6618) 0
+ primary-for QSslServer (0x0x7f68b78a65b0)
+ QObject (0x0x7f68b7b1bd20) 0
+ primary-for QTcpServer (0x0x7f68b78a6618)
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7f68b7b41840) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUdpSocket)
+16 (int (*)(...))QUdpSocket::metaObject
+24 (int (*)(...))QUdpSocket::qt_metacast
+32 (int (*)(...))QUdpSocket::qt_metacall
+40 (int (*)(...))QUdpSocket::~QUdpSocket
+48 (int (*)(...))QUdpSocket::~QUdpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7f68b7999548) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+ QAbstractSocket (0x0x7f68b79995b0) 0
+ primary-for QUdpSocket (0x0x7f68b7999548)
+ QIODevice (0x0x7f68bcef4690) 0
+ primary-for QAbstractSocket (0x0x7f68b79995b0)
+ QObject (0x0x7f68b7b416c0) 0
+ primary-for QIODevice (0x0x7f68bcef4690)
+ QIODeviceBase (0x0x7f68b7b41780) 0 empty
+
+Class QAbstractPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractPrintDialog::QPrivateSignal (0x0x7f68b7b87300) 0 empty
+
+Vtable for QAbstractPrintDialog
+QAbstractPrintDialog::_ZTV20QAbstractPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAbstractPrintDialog)
+16 (int (*)(...))QAbstractPrintDialog::metaObject
+24 (int (*)(...))QAbstractPrintDialog::qt_metacast
+32 (int (*)(...))QAbstractPrintDialog::qt_metacall
+40 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+48 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+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 (*)(...))(& _ZTI20QAbstractPrintDialog)
+488 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD1Ev
+496 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD0Ev
+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 QAbstractPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QAbstractPrintDialog (0x0x7f68b79a6068) 0
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 16)
+ QDialog (0x0x7f68b79a60d0) 0
+ primary-for QAbstractPrintDialog (0x0x7f68b79a6068)
+ QWidget (0x0x7f68bcef4700) 0
+ primary-for QDialog (0x0x7f68b79a60d0)
+ QObject (0x0x7f68b7b870c0) 0
+ primary-for QWidget (0x0x7f68bcef4700)
+ QPaintDevice (0x0x7f68b7b872a0) 16
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 488)
+
+Class QPageSetupDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPageSetupDialog::QPrivateSignal (0x0x7f68b7a15c60) 0 empty
+
+Vtable for QPageSetupDialog
+QPageSetupDialog::_ZTV16QPageSetupDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QPageSetupDialog)
+16 (int (*)(...))QPageSetupDialog::metaObject
+24 (int (*)(...))QPageSetupDialog::qt_metacast
+32 (int (*)(...))QPageSetupDialog::qt_metacall
+40 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+48 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+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 (*)(...))QPageSetupDialog::exec
+448 (int (*)(...))QPageSetupDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI16QPageSetupDialog)
+488 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD1Ev
+496 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD0Ev
+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 QPageSetupDialog
+ size=40 align=8
+ base size=40 base align=8
+QPageSetupDialog (0x0x7f68b79a67b8) 0
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 16)
+ QDialog (0x0x7f68b79a6820) 0
+ primary-for QPageSetupDialog (0x0x7f68b79a67b8)
+ QWidget (0x0x7f68bd0ce8c0) 0
+ primary-for QDialog (0x0x7f68b79a6820)
+ QObject (0x0x7f68b79edc00) 0
+ primary-for QWidget (0x0x7f68bd0ce8c0)
+ QPaintDevice (0x0x7f68b79edc60) 16
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 488)
+
+Class QPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintDialog::QPrivateSignal (0x0x7f68b7626d20) 0 empty
+
+Vtable for QPrintDialog
+QPrintDialog::_ZTV12QPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintDialog)
+16 (int (*)(...))QPrintDialog::metaObject
+24 (int (*)(...))QPrintDialog::qt_metacast
+32 (int (*)(...))QPrintDialog::qt_metacall
+40 (int (*)(...))QPrintDialog::~QPrintDialog
+48 (int (*)(...))QPrintDialog::~QPrintDialog
+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 (*)(...))QPrintDialog::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 (*)(...))QPrintDialog::exec
+448 (int (*)(...))QPrintDialog::done
+456 (int (*)(...))QPrintDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QPrintDialog)
+488 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD1Ev
+496 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD0Ev
+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 QPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintDialog (0x0x7f68b79a69c0) 0
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 16)
+ QAbstractPrintDialog (0x0x7f68b79a6bc8) 0
+ primary-for QPrintDialog (0x0x7f68b79a69c0)
+ QDialog (0x0x7f68b79ce680) 0
+ primary-for QAbstractPrintDialog (0x0x7f68b79a6bc8)
+ QWidget (0x0x7f68bd0ce930) 0
+ primary-for QDialog (0x0x7f68b79ce680)
+ QObject (0x0x7f68b7626780) 0
+ primary-for QWidget (0x0x7f68bd0ce930)
+ QPaintDevice (0x0x7f68b76267e0) 16
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 488)
+
+Vtable for QPrinter
+QPrinter::_ZTV8QPrinter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPrinter)
+16 (int (*)(...))QPrinter::~QPrinter
+24 (int (*)(...))QPrinter::~QPrinter
+32 (int (*)(...))QPrinter::devType
+40 (int (*)(...))QPrinter::paintEngine
+48 (int (*)(...))QPrinter::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPrinter::newPage
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPrinter
+ size=32 align=8
+ base size=32 base align=8
+QPrinter (0x0x7f68b79ce6e8) 0
+ vptr=((& QPrinter::_ZTV8QPrinter) + 16)
+ QPagedPaintDevice (0x0x7f68b7623138) 0
+ primary-for QPrinter (0x0x7f68b79ce6e8)
+ QPaintDevice (0x0x7f68b763c8a0) 0
+ primary-for QPagedPaintDevice (0x0x7f68b7623138)
+
+Vtable for QPrintEngine
+QPrintEngine::_ZTV12QPrintEngine: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintEngine)
+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 QPrintEngine
+ size=8 align=8
+ base size=8 base align=8
+QPrintEngine (0x0x7f68b7759ae0) 0 nearly-empty
+ vptr=((& QPrintEngine::_ZTV12QPrintEngine) + 16)
+
+Class QPrinterInfo
+ size=8 align=8
+ base size=8 base align=8
+QPrinterInfo (0x0x7f68b776f120) 0
+
+Class QPrintPreviewDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewDialog::QPrivateSignal (0x0x7f68b77e9780) 0 empty
+
+Vtable for QPrintPreviewDialog
+QPrintPreviewDialog::_ZTV19QPrintPreviewDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+16 (int (*)(...))QPrintPreviewDialog::metaObject
+24 (int (*)(...))QPrintPreviewDialog::qt_metacast
+32 (int (*)(...))QPrintPreviewDialog::qt_metacall
+40 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+48 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+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 (*)(...))QPrintPreviewDialog::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 (*)(...))QPrintPreviewDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+488 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD1Ev
+496 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD0Ev
+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 QPrintPreviewDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewDialog (0x0x7f68b76bf340) 0
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 16)
+ QDialog (0x0x7f68b76cf3a8) 0
+ primary-for QPrintPreviewDialog (0x0x7f68b76bf340)
+ QWidget (0x0x7f68c004c150) 0
+ primary-for QDialog (0x0x7f68b76cf3a8)
+ QObject (0x0x7f68b77889c0) 0
+ primary-for QWidget (0x0x7f68c004c150)
+ QPaintDevice (0x0x7f68b77e9720) 16
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 488)
+
+Class QPrintPreviewWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewWidget::QPrivateSignal (0x0x7f68b77fd960) 0 empty
+
+Vtable for QPrintPreviewWidget
+QPrintPreviewWidget::_ZTV19QPrintPreviewWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewWidget)
+16 (int (*)(...))QPrintPreviewWidget::metaObject
+24 (int (*)(...))QPrintPreviewWidget::qt_metacast
+32 (int (*)(...))QPrintPreviewWidget::qt_metacall
+40 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+48 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+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 (*)(...))QPrintPreviewWidget::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 (*)(...))(& _ZTI19QPrintPreviewWidget)
+448 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD1Ev
+456 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD0Ev
+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 QPrintPreviewWidget
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewWidget (0x0x7f68b76cf410) 0
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 16)
+ QWidget (0x0x7f68c004c1c0) 0
+ primary-for QPrintPreviewWidget (0x0x7f68b76cf410)
+ QObject (0x0x7f68b77fd3c0) 0
+ primary-for QWidget (0x0x7f68c004c1c0)
+ QPaintDevice (0x0x7f68b77fd900) 16
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 448)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7f68b746e480) 0
+
+Class QJSNumberCoercion
+ size=8 align=8
+ base size=8 base align=8
+QJSNumberCoercion (0x0x7f68b73b8660) 0
+
+Class QJSPrimitiveUndefined
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveUndefined (0x0x7f68b6f05cc0) 0 empty
+
+Class QJSPrimitiveNull
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveNull (0x0x7f68b6f05d20) 0 empty
+
+Class QJSPrimitiveValue::AddOperators
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveValue::AddOperators (0x0x7f68b6f171e0) 0 empty
+
+Class QJSPrimitiveValue::SubOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::SubOperators (0x0x7f68b7739138) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::SubOperators> (0x0x7f68b6f17de0) 0 empty
+
+Class QJSPrimitiveValue::MulOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::MulOperators (0x0x7f68b77391a0) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::MulOperators> (0x0x7f68b6f52000) 0 empty
+
+Class QJSPrimitiveValue::DivOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::DivOperators (0x0x7f68b7739208) 0 empty
+ QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::DivOperators> (0x0x7f68b6f52a20) 0 empty
+
+Class QJSPrimitiveValue::QJSPrimitiveValuePrivate
+ size=32 align=8
+ base size=25 base align=8
+QJSPrimitiveValue::QJSPrimitiveValuePrivate (0x0x7f68b6f52a80) 0
+
+Class QJSPrimitiveValue
+ size=32 align=8
+ base size=32 base align=8
+QJSPrimitiveValue (0x0x7f68b6f05de0) 0
+
+Class QJSManagedValue
+ size=8 align=8
+ base size=8 base align=8
+QJSManagedValue (0x0x7f68b4924900) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7f68b494e840) 0 empty
+
+Class {anonymous}::QQmlTriviallyDestructibleDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+{anonymous}::QQmlTriviallyDestructibleDebuggingEnabler (0x0x7f68b466af60) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7f68b34ac420) 0 empty
+
+Vtable for QJSEngine
+QJSEngine::_ZTV9QJSEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QJSEngine)
+16 (int (*)(...))QJSEngine::metaObject
+24 (int (*)(...))QJSEngine::qt_metacast
+32 (int (*)(...))QJSEngine::qt_metacall
+40 (int (*)(...))QJSEngine::~QJSEngine
+48 (int (*)(...))QJSEngine::~QJSEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QJSEngine
+ size=24 align=8
+ base size=24 base align=8
+QJSEngine (0x0x7f68b612e3a8) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+ QObject (0x0x7f68b34ac3c0) 0
+ primary-for QJSEngine (0x0x7f68b612e3a8)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7f68b1485840) 0
+
+Class QJSListIndexClamp
+ size=1 align=1
+ base size=0 base align=1
+QJSListIndexClamp (0x0x7f68b0e39cc0) 0 empty
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7f68b0a77960) 0
+
+Vtable for QQmlParserStatus
+QQmlParserStatus::_ZTV16QQmlParserStatus: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlParserStatus)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlParserStatus
+ size=16 align=8
+ base size=16 base align=8
+QQmlParserStatus (0x0x7f68b0aa74e0) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Vtable for QQmlPropertyValueSource
+QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQmlPropertyValueSource)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlPropertyValueSource
+ size=8 align=8
+ base size=8 base align=8
+QQmlPropertyValueSource (0x0x7f68b0b80480) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=184 align=8
+ base size=180 base align=8
+QQmlPrivate::RegisterType (0x0x7f68b04a7720) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=168 align=8
+ base size=168 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7f68b04de5a0) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7f68b04decc0) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7f68b04ded20) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7f68b0500000) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7f68b0535a80) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7f68b028bba0) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7f68b028bc00) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7f68b028bcc0) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7f68b02d1360) 0
+
+Class QQmlPrivate::AOTCompiledContext
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::AOTCompiledContext (0x0x7f68b02d13c0) 0
+
+Class QQmlPrivate::AOTCompiledFunction
+ size=48 align=8
+ base size=48 base align=8
+QQmlPrivate::AOTCompiledFunction (0x0x7f68b02d1960) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7f68b03c5f00) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7f68b03c5f60) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7f68b0027060) 0
+
+Class QQmlPrivate::SingletonInstanceFunctor
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::SingletonInstanceFunctor (0x0x7f68b0042780) 0
+
+Class QQmlTypeNotAvailable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlTypeNotAvailable::QPrivateSignal (0x0x7f68b4460120) 0 empty
+
+Vtable for QQmlTypeNotAvailable
+QQmlTypeNotAvailable::_ZTV20QQmlTypeNotAvailable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQmlTypeNotAvailable)
+16 (int (*)(...))QQmlTypeNotAvailable::metaObject
+24 (int (*)(...))QQmlTypeNotAvailable::qt_metacast
+32 (int (*)(...))QQmlTypeNotAvailable::qt_metacall
+40 (int (*)(...))QQmlTypeNotAvailable::~QQmlTypeNotAvailable
+48 (int (*)(...))QQmlTypeNotAvailable::~QQmlTypeNotAvailable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlTypeNotAvailable
+ size=16 align=8
+ base size=16 base align=8
+QQmlTypeNotAvailable (0x0x7f68b345df70) 0
+ vptr=((& QQmlTypeNotAvailable::_ZTV20QQmlTypeNotAvailable) + 16)
+ QObject (0x0x7f68b44600c0) 0
+ primary-for QQmlTypeNotAvailable (0x0x7f68b345df70)
+
+Vtable for QQmlAbstractUrlInterceptor
+QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QQmlAbstractUrlInterceptor)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlAbstractUrlInterceptor
+ size=8 align=8
+ base size=8 base align=8
+QQmlAbstractUrlInterceptor (0x0x7f68b3cdf540) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7f68b3cdf5a0) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7f68b3bf5180) 0 empty
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 (int (*)(...))QQmlImageProviderBase::metaObject
+24 (int (*)(...))QQmlImageProviderBase::qt_metacast
+32 (int (*)(...))QQmlImageProviderBase::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 QQmlImageProviderBase
+ size=16 align=8
+ base size=16 base align=8
+QQmlImageProviderBase (0x0x7f68b0ec51a0) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+ QObject (0x0x7f68b3bf5120) 0
+ primary-for QQmlImageProviderBase (0x0x7f68b0ec51a0)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7f68b3bf5720) 0 empty
+
+Vtable for QQmlEngine
+QQmlEngine::_ZTV10QQmlEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQmlEngine)
+16 (int (*)(...))QQmlEngine::metaObject
+24 (int (*)(...))QQmlEngine::qt_metacast
+32 (int (*)(...))QQmlEngine::qt_metacall
+40 (int (*)(...))QQmlEngine::~QQmlEngine
+48 (int (*)(...))QQmlEngine::~QQmlEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngine (0x0x7f68b0f09888) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+ QJSEngine (0x0x7f68b0f098f0) 0
+ primary-for QQmlEngine (0x0x7f68b0f09888)
+ QObject (0x0x7f68b3bf56c0) 0
+ primary-for QJSEngine (0x0x7f68b0f098f0)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7f68b3bf5a80) 0 empty
+
+Vtable for QQmlApplicationEngine
+QQmlApplicationEngine::_ZTV21QQmlApplicationEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlApplicationEngine)
+16 (int (*)(...))QQmlApplicationEngine::metaObject
+24 (int (*)(...))QQmlApplicationEngine::qt_metacast
+32 (int (*)(...))QQmlApplicationEngine::qt_metacall
+40 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+48 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlApplicationEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlApplicationEngine (0x0x7f68b0f09a90) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+ QQmlEngine (0x0x7f68b0f6a208) 0
+ primary-for QQmlApplicationEngine (0x0x7f68b0f09a90)
+ QJSEngine (0x0x7f68b0f6a270) 0
+ primary-for QQmlEngine (0x0x7f68b0f6a208)
+ QObject (0x0x7f68b3bf5a20) 0
+ primary-for QJSEngine (0x0x7f68b0f6a270)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7f68b3bf5c60) 0 empty
+
+Vtable for QQmlComponent
+QQmlComponent::_ZTV13QQmlComponent: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlComponent)
+16 (int (*)(...))QQmlComponent::metaObject
+24 (int (*)(...))QQmlComponent::qt_metacast
+32 (int (*)(...))QQmlComponent::qt_metacall
+40 (int (*)(...))QQmlComponent::~QQmlComponent
+48 (int (*)(...))QQmlComponent::~QQmlComponent
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlComponent::create
+120 (int (*)(...))QQmlComponent::beginCreate
+128 (int (*)(...))QQmlComponent::completeCreate
+
+Class QQmlComponent
+ size=16 align=8
+ base size=16 base align=8
+QQmlComponent (0x0x7f68b0f6a6e8) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+ QObject (0x0x7f68b3bf5c00) 0
+ primary-for QQmlComponent (0x0x7f68b0f6a6e8)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7f68b1947540) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7f68b19475a0) 0
+
+Vtable for QQmlContext
+QQmlContext::_ZTV11QQmlContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QQmlContext)
+16 (int (*)(...))QQmlContext::metaObject
+24 (int (*)(...))QQmlContext::qt_metacast
+32 (int (*)(...))QQmlContext::qt_metacall
+40 (int (*)(...))QQmlContext::~QQmlContext
+48 (int (*)(...))QQmlContext::~QQmlContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlContext
+ size=16 align=8
+ base size=16 base align=8
+QQmlContext (0x0x7f68b0bc4a28) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+ QObject (0x0x7f68b19474e0) 0
+ primary-for QQmlContext (0x0x7f68b0bc4a28)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7f68b1947720) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7f68b04b7a80) 0 empty
+
+Vtable for QQmlExpression
+QQmlExpression::_ZTV14QQmlExpression: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QQmlExpression)
+16 (int (*)(...))QQmlExpression::metaObject
+24 (int (*)(...))QQmlExpression::qt_metacast
+32 (int (*)(...))QQmlExpression::qt_metacall
+40 (int (*)(...))QQmlExpression::~QQmlExpression
+48 (int (*)(...))QQmlExpression::~QQmlExpression
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlExpression
+ size=16 align=8
+ base size=16 base align=8
+QQmlExpression (0x0x7f68b07b8a28) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+ QObject (0x0x7f68b04b7a20) 0
+ primary-for QQmlExpression (0x0x7f68b07b8a28)
+
+Vtable for QQmlTypesExtensionInterface
+QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QQmlTypesExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlTypesExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlTypesExtensionInterface (0x0x7f68b04b7c00) 0 nearly-empty
+ vptr=((& QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface) + 16)
+
+Vtable for QQmlExtensionInterface
+QQmlExtensionInterface::_ZTV22QQmlExtensionInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QQmlExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlExtensionInterface (0x0x7f68b047f750) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+ QQmlTypesExtensionInterface (0x0x7f68b04b7c60) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f68b047f750)
+
+Vtable for QQmlEngineExtensionInterface
+QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QQmlEngineExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlEngineExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlEngineExtensionInterface (0x0x7f68b04b7cc0) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7f68b8cea840) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+16 (int (*)(...))QQmlExtensionPlugin::metaObject
+24 (int (*)(...))QQmlExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlExtensionPlugin::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 (*)(...))QQmlExtensionPlugin::unregisterTypes
+128 (int (*)(...))QQmlExtensionPlugin::initializeEngine
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+152 0
+160 0
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7f68b811e230) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+ QObject (0x0x7f68b8cea780) 0
+ primary-for QQmlExtensionPlugin (0x0x7f68b811e230)
+ QQmlExtensionInterface (0x0x7f68b0498000) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+ QQmlTypesExtensionInterface (0x0x7f68b8cea7e0) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7f68b0498000)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7f68b8ceaa80) 0 empty
+
+Vtable for QQmlEngineExtensionPlugin
+QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+16 (int (*)(...))QQmlEngineExtensionPlugin::metaObject
+24 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacall
+40 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+48 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlEngineExtensionPlugin::initializeEngine
+120 (int (*)(...))-16
+128 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+136 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD1Ev
+144 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD0Ev
+152 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlEngineExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngineExtensionPlugin (0x0x7f68b811e070) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+ QObject (0x0x7f68b8cea9c0) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7f68b811e070)
+ QQmlEngineExtensionInterface (0x0x7f68b8ceaa20) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7f68b8ceab40) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7f68b8ceac00) 0 empty
+
+Vtable for QQmlFileSelector
+QQmlFileSelector::_ZTV16QQmlFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlFileSelector)
+16 (int (*)(...))QQmlFileSelector::metaObject
+24 (int (*)(...))QQmlFileSelector::qt_metacast
+32 (int (*)(...))QQmlFileSelector::qt_metacall
+40 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+48 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QQmlFileSelector (0x0x7f68b0498750) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+ QObject (0x0x7f68b8ceaba0) 0
+ primary-for QQmlFileSelector (0x0x7f68b0498750)
+
+Vtable for QQmlIncubator
+QQmlIncubator::_ZTV13QQmlIncubator: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlIncubator)
+16 (int (*)(...))QQmlIncubator::~QQmlIncubator
+24 (int (*)(...))QQmlIncubator::~QQmlIncubator
+32 (int (*)(...))QQmlIncubator::statusChanged
+40 (int (*)(...))QQmlIncubator::setInitialState
+
+Class QQmlIncubator
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubator (0x0x7f68b8cead80) 0
+ vptr=((& QQmlIncubator::_ZTV13QQmlIncubator) + 16)
+
+Vtable for QQmlIncubationController
+QQmlIncubationController::_ZTV24QQmlIncubationController: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQmlIncubationController)
+16 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+24 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+32 (int (*)(...))QQmlIncubationController::incubatingObjectCountChanged
+
+Class QQmlIncubationController
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubationController (0x0x7f68b8ceade0) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7f68b04988f0) 0
+ QDebug (0x0x7f68b0498af8) 0
+ QIODeviceBase (0x0x7f68b8ceae40) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7f68b58e3d20) 0
+
+Vtable for QQmlNetworkAccessManagerFactory
+QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QQmlNetworkAccessManagerFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlNetworkAccessManagerFactory
+ size=8 align=8
+ base size=8 base align=8
+QQmlNetworkAccessManagerFactory (0x0x7f68b58e3d80) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7f68b58e3de0) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7f68b597b3c0) 0 empty
+
+Vtable for QQmlPropertyMap
+QQmlPropertyMap::_ZTV15QQmlPropertyMap: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQmlPropertyMap)
+16 (int (*)(...))QQmlPropertyMap::metaObject
+24 (int (*)(...))QQmlPropertyMap::qt_metacast
+32 (int (*)(...))QQmlPropertyMap::qt_metacall
+40 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+48 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlPropertyMap::updateValue
+
+Class QQmlPropertyMap
+ size=16 align=8
+ base size=16 base align=8
+QQmlPropertyMap (0x0x7f68b597e2d8) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+ QObject (0x0x7f68b597b360) 0
+ primary-for QQmlPropertyMap (0x0x7f68b597e2d8)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7f68b597b600) 0 empty
+
+Vtable for QQuickTransform
+QQuickTransform::_ZTV15QQuickTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQuickTransform)
+16 (int (*)(...))QQuickTransform::metaObject
+24 (int (*)(...))QQuickTransform::qt_metacast
+32 (int (*)(...))QQuickTransform::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 QQuickTransform
+ size=16 align=8
+ base size=16 base align=8
+QQuickTransform (0x0x7f68b597e340) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+ QObject (0x0x7f68b597b5a0) 0
+ primary-for QQuickTransform (0x0x7f68b597e340)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7f68b597b8a0) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7f68b597b900) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7f68b597b960) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickItem)
+16 (int (*)(...))QQuickItem::metaObject
+24 (int (*)(...))QQuickItem::qt_metacast
+32 (int (*)(...))QQuickItem::qt_metacall
+40 (int (*)(...))QQuickItem::~QQuickItem
+48 (int (*)(...))QQuickItem::~QQuickItem
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickItem::isTextureProvider
+152 (int (*)(...))QQuickItem::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickItem::updatePaintNode
+368 (int (*)(...))QQuickItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))-16
+392 (int (*)(...))(& _ZTI10QQuickItem)
+400 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7f68b7d8d1c0) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+ QObject (0x0x7f68b597b7e0) 0
+ primary-for QQuickItem (0x0x7f68b7d8d1c0)
+ QQmlParserStatus (0x0x7f68b597b840) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 400)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7f68b56fec00) 0 empty
+
+Vtable for QQuickFramebufferObject::Renderer
+QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN23QQuickFramebufferObject8RendererE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QQuickFramebufferObject::Renderer::createFramebufferObject
+48 (int (*)(...))QQuickFramebufferObject::Renderer::synchronize
+
+Class QQuickFramebufferObject::Renderer
+ size=16 align=8
+ base size=16 base align=8
+QQuickFramebufferObject::Renderer (0x0x7f68b56fec60) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+16 (int (*)(...))QQuickFramebufferObject::metaObject
+24 (int (*)(...))QQuickFramebufferObject::qt_metacast
+32 (int (*)(...))QQuickFramebufferObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickFramebufferObject::isTextureProvider
+152 (int (*)(...))QQuickFramebufferObject::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickFramebufferObject::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+368 (int (*)(...))QQuickFramebufferObject::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7f68b5712af8) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+ QQuickItem (0x0x7f68b7b45e00) 0
+ primary-for QQuickFramebufferObject (0x0x7f68b5712af8)
+ QObject (0x0x7f68b56feb40) 0
+ primary-for QQuickItem (0x0x7f68b7b45e00)
+ QQmlParserStatus (0x0x7f68b56feba0) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 408)
+
+Class QQuickGraphicsConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsConfiguration (0x0x7f68b56fede0) 0
+
+Class QQuickGraphicsDevice
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsDevice (0x0x7f68b56fee40) 0
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7f68b56fef00) 0 empty
+
+Vtable for QQuickTextureFactory
+QQuickTextureFactory::_ZTV20QQuickTextureFactory: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickTextureFactory)
+16 (int (*)(...))QQuickTextureFactory::metaObject
+24 (int (*)(...))QQuickTextureFactory::qt_metacast
+32 (int (*)(...))QQuickTextureFactory::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 (*)(...))QQuickTextureFactory::image
+
+Class QQuickTextureFactory
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextureFactory (0x0x7f68b5712b60) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+ QObject (0x0x7f68b56feea0) 0
+ primary-for QQuickTextureFactory (0x0x7f68b5712b60)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7f68b575c060) 0 empty
+
+Vtable for QQuickImageResponse
+QQuickImageResponse::_ZTV19QQuickImageResponse: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageResponse)
+16 (int (*)(...))QQuickImageResponse::metaObject
+24 (int (*)(...))QQuickImageResponse::qt_metacast
+32 (int (*)(...))QQuickImageResponse::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 (*)(...))QQuickImageResponse::errorString
+128 (int (*)(...))QQuickImageResponse::cancel
+
+Class QQuickImageResponse
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageResponse (0x0x7f68b5712bc8) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+ QObject (0x0x7f68b575c000) 0
+ primary-for QQuickImageResponse (0x0x7f68b5712bc8)
+
+Class QQuickImageProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageProvider::QPrivateSignal (0x0x7f68b575c240) 0 empty
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::qt_metacall
+40 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+48 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickImageProvider (0x0x7f68b5712c30) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+ QQmlImageProviderBase (0x0x7f68b5712c98) 0
+ primary-for QQuickImageProvider (0x0x7f68b5712c30)
+ QObject (0x0x7f68b575c1e0) 0
+ primary-for QQmlImageProviderBase (0x0x7f68b5712c98)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::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 (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=32 align=8
+ base size=32 base align=8
+QQuickAsyncImageProvider (0x0x7f68b5712d00) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+ QQuickImageProvider (0x0x7f68b5712d68) 0
+ primary-for QQuickAsyncImageProvider (0x0x7f68b5712d00)
+ QQmlImageProviderBase (0x0x7f68b5712dd0) 0
+ primary-for QQuickImageProvider (0x0x7f68b5712d68)
+ QObject (0x0x7f68b575c300) 0
+ primary-for QQmlImageProviderBase (0x0x7f68b5712dd0)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7f68b575c3c0) 0 empty
+
+Vtable for QQuickItemGrabResult
+QQuickItemGrabResult::_ZTV20QQuickItemGrabResult: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickItemGrabResult)
+16 (int (*)(...))QQuickItemGrabResult::metaObject
+24 (int (*)(...))QQuickItemGrabResult::qt_metacast
+32 (int (*)(...))QQuickItemGrabResult::qt_metacall
+40 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+48 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+56 (int (*)(...))QQuickItemGrabResult::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickItemGrabResult
+ size=16 align=8
+ base size=16 base align=8
+QQuickItemGrabResult (0x0x7f68b5712e38) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+ QObject (0x0x7f68b575c360) 0
+ primary-for QQuickItemGrabResult (0x0x7f68b5712e38)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7f68b575c660) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+16 (int (*)(...))QQuickPaintedItem::metaObject
+24 (int (*)(...))QQuickPaintedItem::qt_metacast
+32 (int (*)(...))QQuickPaintedItem::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickPaintedItem::isTextureProvider
+152 (int (*)(...))QQuickPaintedItem::textureProvider
+160 (int (*)(...))QQuickPaintedItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickPaintedItem::updatePaintNode
+368 (int (*)(...))QQuickPaintedItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7f68b5712ea0) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+ QQuickItem (0x0x7f68b7b45070) 0
+ primary-for QQuickPaintedItem (0x0x7f68b5712ea0)
+ QObject (0x0x7f68b575c5a0) 0
+ primary-for QQuickItem (0x0x7f68b7b45070)
+ QQmlParserStatus (0x0x7f68b575c600) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 408)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7f68b575cea0) 0 empty
+
+Vtable for QQuickRenderControl
+QQuickRenderControl::_ZTV19QQuickRenderControl: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickRenderControl)
+16 (int (*)(...))QQuickRenderControl::metaObject
+24 (int (*)(...))QQuickRenderControl::qt_metacast
+32 (int (*)(...))QQuickRenderControl::qt_metacall
+40 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+48 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickRenderControl::renderWindow
+
+Class QQuickRenderControl
+ size=16 align=8
+ base size=16 base align=8
+QQuickRenderControl (0x0x7f68b57e8068) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+ QObject (0x0x7f68b575ce40) 0
+ primary-for QQuickRenderControl (0x0x7f68b57e8068)
+
+Class QQuickRenderTarget
+ size=8 align=8
+ base size=8 base align=8
+QQuickRenderTarget (0x0x7f68b55590c0) 0
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7f68b5559240) 0 empty
+
+Vtable for QQuickTextDocument
+QQuickTextDocument::_ZTV18QQuickTextDocument: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QQuickTextDocument)
+16 (int (*)(...))QQuickTextDocument::metaObject
+24 (int (*)(...))QQuickTextDocument::qt_metacast
+32 (int (*)(...))QQuickTextDocument::qt_metacall
+40 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+48 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextDocument (0x0x7f68b57e80d0) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+ QObject (0x0x7f68b55591e0) 0
+ primary-for QQuickTextDocument (0x0x7f68b57e80d0)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7f68b55c1780) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7f68b55c17e0) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7f68b55c1840) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7f68b55c18a0) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7f68b55c1900) 0
+
+Vtable for QSGGeometry
+QSGGeometry::_ZTV11QSGGeometry: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGGeometry)
+16 (int (*)(...))QSGGeometry::~QSGGeometry
+24 (int (*)(...))QSGGeometry::~QSGGeometry
+
+Class QSGGeometry
+ size=128 align=8
+ base size=128 base align=8
+QSGGeometry (0x0x7f68b55c1720) 0
+ vptr=((& QSGGeometry::_ZTV11QSGGeometry) + 16)
+
+Vtable for QSGNode
+QSGNode::_ZTV7QSGNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSGNode)
+16 (int (*)(...))QSGNode::~QSGNode
+24 (int (*)(...))QSGNode::~QSGNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGNode
+ size=72 align=8
+ base size=72 base align=8
+QSGNode (0x0x7f68b1be6300) 0
+ vptr=((& QSGNode::_ZTV7QSGNode) + 16)
+
+Vtable for QSGBasicGeometryNode
+QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGBasicGeometryNode)
+16 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+24 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGBasicGeometryNode
+ size=104 align=8
+ base size=104 base align=8
+QSGBasicGeometryNode (0x0x7f68b55bca90) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+ QSGNode (0x0x7f68b1be6b40) 0
+ primary-for QSGBasicGeometryNode (0x0x7f68b55bca90)
+
+Vtable for QSGGeometryNode
+QSGGeometryNode::_ZTV15QSGGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSGGeometryNode)
+16 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+24 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGGeometryNode
+ size=136 align=8
+ base size=136 base align=8
+QSGGeometryNode (0x0x7f68b55bcaf8) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+ QSGBasicGeometryNode (0x0x7f68b55bcb60) 0
+ primary-for QSGGeometryNode (0x0x7f68b55bcaf8)
+ QSGNode (0x0x7f68b1be6de0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f68b55bcb60)
+
+Vtable for QSGClipNode
+QSGClipNode::_ZTV11QSGClipNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGClipNode)
+16 (int (*)(...))QSGClipNode::~QSGClipNode
+24 (int (*)(...))QSGClipNode::~QSGClipNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGClipNode
+ size=144 align=8
+ base size=144 base align=8
+QSGClipNode (0x0x7f68b55bcbc8) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+ QSGBasicGeometryNode (0x0x7f68b55bcc30) 0
+ primary-for QSGClipNode (0x0x7f68b55bcbc8)
+ QSGNode (0x0x7f68b18db000) 0
+ primary-for QSGBasicGeometryNode (0x0x7f68b55bcc30)
+
+Vtable for QSGTransformNode
+QSGTransformNode::_ZTV16QSGTransformNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGTransformNode)
+16 (int (*)(...))QSGTransformNode::~QSGTransformNode
+24 (int (*)(...))QSGTransformNode::~QSGTransformNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGTransformNode
+ size=208 align=8
+ base size=208 base align=8
+QSGTransformNode (0x0x7f68b55bcc98) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+ QSGNode (0x0x7f68b18db120) 0
+ primary-for QSGTransformNode (0x0x7f68b55bcc98)
+
+Vtable for QSGRootNode
+QSGRootNode::_ZTV11QSGRootNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGRootNode)
+16 (int (*)(...))QSGRootNode::~QSGRootNode
+24 (int (*)(...))QSGRootNode::~QSGRootNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGRootNode
+ size=96 align=8
+ base size=96 base align=8
+QSGRootNode (0x0x7f68b55bcd00) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+ QSGNode (0x0x7f68b18db240) 0
+ primary-for QSGRootNode (0x0x7f68b55bcd00)
+
+Vtable for QSGOpacityNode
+QSGOpacityNode::_ZTV14QSGOpacityNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGOpacityNode)
+16 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+24 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+32 (int (*)(...))QSGOpacityNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGOpacityNode
+ size=88 align=8
+ base size=88 base align=8
+QSGOpacityNode (0x0x7f68b18fc618) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+ QSGNode (0x0x7f68b18dbc00) 0
+ primary-for QSGOpacityNode (0x0x7f68b18fc618)
+
+Vtable for QSGNodeVisitor
+QSGNodeVisitor::_ZTV14QSGNodeVisitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGNodeVisitor)
+16 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+24 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+32 (int (*)(...))QSGNodeVisitor::enterTransformNode
+40 (int (*)(...))QSGNodeVisitor::leaveTransformNode
+48 (int (*)(...))QSGNodeVisitor::enterClipNode
+56 (int (*)(...))QSGNodeVisitor::leaveClipNode
+64 (int (*)(...))QSGNodeVisitor::enterGeometryNode
+72 (int (*)(...))QSGNodeVisitor::leaveGeometryNode
+80 (int (*)(...))QSGNodeVisitor::enterOpacityNode
+88 (int (*)(...))QSGNodeVisitor::leaveOpacityNode
+96 (int (*)(...))QSGNodeVisitor::visitNode
+104 (int (*)(...))QSGNodeVisitor::visitChildren
+
+Class QSGNodeVisitor
+ size=8 align=8
+ base size=8 base align=8
+QSGNodeVisitor (0x0x7f68b18dbd20) 0 nearly-empty
+ vptr=((& QSGNodeVisitor::_ZTV14QSGNodeVisitor) + 16)
+
+Vtable for QSGRendererInterface
+QSGRendererInterface::_ZTV20QSGRendererInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGRendererInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QSGRendererInterface::getResource
+48 (int (*)(...))QSGRendererInterface::getResource
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRendererInterface
+ size=8 align=8
+ base size=8 base align=8
+QSGRendererInterface (0x0x7f68b71855a0) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7f68b6965000) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7f68b6965060) 0
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QQuickWindow)
+16 (int (*)(...))QQuickWindow::metaObject
+24 (int (*)(...))QQuickWindow::qt_metacast
+32 (int (*)(...))QQuickWindow::qt_metacall
+40 (int (*)(...))QQuickWindow::~QQuickWindow
+48 (int (*)(...))QQuickWindow::~QQuickWindow
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickWindow::keyPressEvent
+232 (int (*)(...))QQuickWindow::keyReleaseEvent
+240 (int (*)(...))QQuickWindow::mousePressEvent
+248 (int (*)(...))QQuickWindow::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickWindow::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI12QQuickWindow)
+328 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+336 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7f68b18fc8f0) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+ QWindow (0x0x7f68b6fe7460) 0
+ primary-for QQuickWindow (0x0x7f68b18fc8f0)
+ QObject (0x0x7f68b7185f00) 0
+ primary-for QWindow (0x0x7f68b6fe7460)
+ QSurface (0x0x7f68b7185f60) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 328)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7f68b3e3e8a0) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickView)
+16 (int (*)(...))QQuickView::metaObject
+24 (int (*)(...))QQuickView::qt_metacast
+32 (int (*)(...))QQuickView::qt_metacall
+40 (int (*)(...))QQuickView::~QQuickView
+48 (int (*)(...))QQuickView::~QQuickView
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QQuickView::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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickView::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickView::keyPressEvent
+232 (int (*)(...))QQuickView::keyReleaseEvent
+240 (int (*)(...))QQuickView::mousePressEvent
+248 (int (*)(...))QQuickView::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickView::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI10QQuickView)
+328 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+336 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7f68b4780e38) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+ QQuickWindow (0x0x7f68b4780ea0) 0
+ primary-for QQuickView (0x0x7f68b4780e38)
+ QWindow (0x0x7f68b6bcfaf0) 0
+ primary-for QQuickWindow (0x0x7f68b4780ea0)
+ QObject (0x0x7f68b3e3e7e0) 0
+ primary-for QWindow (0x0x7f68b6bcfaf0)
+ QSurface (0x0x7f68b3e3e840) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 328)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7f68b3e3eba0) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7f68b3e3ec60) 0
+
+Class QSGMaterialShader::GraphicsPipelineState
+ size=52 align=4
+ base size=52 base align=4
+QSGMaterialShader::GraphicsPipelineState (0x0x7f68b3e3eea0) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+24 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+32 (int (*)(...))QSGMaterialShader::updateUniformData
+40 (int (*)(...))QSGMaterialShader::updateSampledImage
+48 (int (*)(...))QSGMaterialShader::updateGraphicsPipelineState
+
+Class QSGMaterialShader
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader (0x0x7f68b3e3ec00) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16)
+
+Vtable for QSGMaterial
+QSGMaterial::_ZTV11QSGMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGMaterial)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QSGMaterial::compare
+
+Class QSGMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGMaterial (0x0x7f68b0ec9ea0) 0
+ vptr=((& QSGMaterial::_ZTV11QSGMaterial) + 16)
+
+Vtable for QSGFlatColorMaterial
+QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGFlatColorMaterial)
+16 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+24 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+32 (int (*)(...))QSGFlatColorMaterial::type
+40 (int (*)(...))QSGFlatColorMaterial::createShader
+48 (int (*)(...))QSGFlatColorMaterial::compare
+
+Class QSGFlatColorMaterial
+ size=40 align=8
+ base size=40 base align=8
+QSGFlatColorMaterial (0x0x7f68b1bad410) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+ QSGMaterial (0x0x7f68b5f16420) 0
+ primary-for QSGFlatColorMaterial (0x0x7f68b1bad410)
+
+Class QNativeInterface::QSGOpenGLTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGOpenGLTexture::TypeInfo (0x0x7f68b5f16540) 0 empty
+
+Vtable for QNativeInterface::QSGOpenGLTexture
+QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGOpenGLTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGOpenGLTexture (0x0x7f68b5f164e0) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE) + 16)
+
+Class QNativeInterface::QSGVulkanTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGVulkanTexture::TypeInfo (0x0x7f68b5f16660) 0 empty
+
+Vtable for QNativeInterface::QSGVulkanTexture
+QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGVulkanTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGVulkanTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGVulkanTexture (0x0x7f68b5f16600) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE) + 16)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7f68b5f16780) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSGTexture)
+16 (int (*)(...))QSGTexture::metaObject
+24 (int (*)(...))QSGTexture::qt_metacast
+32 (int (*)(...))QSGTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7f68b1bad478) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+ QObject (0x0x7f68b5f16720) 0
+ primary-for QSGTexture (0x0x7f68b1bad478)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7f68b5f16a20) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGDynamicTexture)
+16 (int (*)(...))QSGDynamicTexture::metaObject
+24 (int (*)(...))QSGDynamicTexture::qt_metacast
+32 (int (*)(...))QSGDynamicTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7f68b1bad4e0) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+ QSGTexture (0x0x7f68b1bad548) 0
+ primary-for QSGDynamicTexture (0x0x7f68b1bad4e0)
+ QObject (0x0x7f68b5f169c0) 0
+ primary-for QSGTexture (0x0x7f68b1bad548)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSGImageNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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
+
+Class QSGImageNode
+ size=136 align=8
+ base size=136 base align=8
+QSGImageNode (0x0x7f68b1bad5b0) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+ QSGGeometryNode (0x0x7f68b1bad618) 0
+ primary-for QSGImageNode (0x0x7f68b1bad5b0)
+ QSGBasicGeometryNode (0x0x7f68b1bad680) 0
+ primary-for QSGGeometryNode (0x0x7f68b1bad618)
+ QSGNode (0x0x7f68b5f16ae0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f68b1bad680)
+
+Vtable for QSGNinePatchNode
+QSGNinePatchNode::_ZTV16QSGNinePatchNode: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGNinePatchNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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 QSGNinePatchNode
+ size=136 align=8
+ base size=136 base align=8
+QSGNinePatchNode (0x0x7f68b1bad820) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+ QSGGeometryNode (0x0x7f68b1bad888) 0
+ primary-for QSGNinePatchNode (0x0x7f68b1bad820)
+ QSGBasicGeometryNode (0x0x7f68b1bad8f0) 0
+ primary-for QSGGeometryNode (0x0x7f68b1bad888)
+ QSGNode (0x0x7f68b32f10c0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f68b1bad8f0)
+
+Vtable for QSGRectangleNode
+QSGRectangleNode::_ZTV16QSGRectangleNode: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGRectangleNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRectangleNode
+ size=136 align=8
+ base size=136 base align=8
+QSGRectangleNode (0x0x7f68b1bad958) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+ QSGGeometryNode (0x0x7f68b1bad9c0) 0
+ primary-for QSGRectangleNode (0x0x7f68b1bad958)
+ QSGBasicGeometryNode (0x0x7f68b1bada28) 0
+ primary-for QSGGeometryNode (0x0x7f68b1bad9c0)
+ QSGNode (0x0x7f68b32f1120) 0
+ primary-for QSGBasicGeometryNode (0x0x7f68b1bada28)
+
+Vtable for QSGRenderNode::RenderState
+QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QSGRenderNode11RenderStateE)
+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 (*)(...))QSGRenderNode::RenderState::get
+
+Class QSGRenderNode::RenderState
+ size=8 align=8
+ base size=8 base align=8
+QSGRenderNode::RenderState (0x0x7f68b32f1240) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSGRenderNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))QSGRenderNode::changedStates
+56 (int (*)(...))QSGRenderNode::prepare
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QSGRenderNode::releaseResources
+80 (int (*)(...))QSGRenderNode::flags
+88 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=80 align=8
+ base size=80 base align=8
+QSGRenderNode (0x0x7f68b1bada90) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+ QSGNode (0x0x7f68b32f11e0) 0
+ primary-for QSGRenderNode (0x0x7f68b1bada90)
+
+Vtable for QSGSimpleRectNode
+QSGSimpleRectNode::_ZTV17QSGSimpleRectNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGSimpleRectNode)
+16 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+24 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleRectNode
+ size=312 align=8
+ base size=312 base align=8
+QSGSimpleRectNode (0x0x7f68b1badd68) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+ QSGGeometryNode (0x0x7f68b1baddd0) 0
+ primary-for QSGSimpleRectNode (0x0x7f68b1badd68)
+ QSGBasicGeometryNode (0x0x7f68b1bade38) 0
+ primary-for QSGGeometryNode (0x0x7f68b1baddd0)
+ QSGNode (0x0x7f68b32f1ba0) 0
+ primary-for QSGBasicGeometryNode (0x0x7f68b1bade38)
+
+Vtable for QSGOpaqueTextureMaterial
+QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QSGOpaqueTextureMaterial)
+16 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+24 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+32 (int (*)(...))QSGOpaqueTextureMaterial::type
+40 (int (*)(...))QSGOpaqueTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGOpaqueTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGOpaqueTextureMaterial (0x0x7f68b1badea0) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+ QSGMaterial (0x0x7f68b32f1c60) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f68b1badea0)
+
+Vtable for QSGTextureMaterial
+QSGTextureMaterial::_ZTV18QSGTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureMaterial)
+16 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+24 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+32 (int (*)(...))QSGTextureMaterial::type
+40 (int (*)(...))QSGTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGTextureMaterial (0x0x7f68b1badf08) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+ QSGOpaqueTextureMaterial (0x0x7f68b1badf70) 0
+ primary-for QSGTextureMaterial (0x0x7f68b1badf08)
+ QSGMaterial (0x0x7f68b4ef0120) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7f68b1badf70)
+
+Vtable for QSGSimpleTextureNode
+QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGSimpleTextureNode)
+16 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+24 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleTextureNode
+ size=376 align=8
+ base size=376 base align=8
+QSGSimpleTextureNode (0x0x7f68b08ff000) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+ QSGGeometryNode (0x0x7f68b08ff068) 0
+ primary-for QSGSimpleTextureNode (0x0x7f68b08ff000)
+ QSGBasicGeometryNode (0x0x7f68b08ff0d0) 0
+ primary-for QSGGeometryNode (0x0x7f68b08ff068)
+ QSGNode (0x0x7f68b4ef0180) 0
+ primary-for QSGBasicGeometryNode (0x0x7f68b08ff0d0)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7f68b4ef09c0) 0 empty
+
+Vtable for QSGTextureProvider
+QSGTextureProvider::_ZTV18QSGTextureProvider: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureProvider)
+16 (int (*)(...))QSGTextureProvider::metaObject
+24 (int (*)(...))QSGTextureProvider::qt_metacast
+32 (int (*)(...))QSGTextureProvider::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 QSGTextureProvider
+ size=16 align=8
+ base size=16 base align=8
+QSGTextureProvider (0x0x7f68b08ff270) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+ QObject (0x0x7f68b4ef0960) 0
+ primary-for QSGTextureProvider (0x0x7f68b08ff270)
+
+Vtable for QSGVertexColorMaterial
+QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QSGVertexColorMaterial)
+16 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+24 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+32 (int (*)(...))QSGVertexColorMaterial::type
+40 (int (*)(...))QSGVertexColorMaterial::createShader
+48 (int (*)(...))QSGVertexColorMaterial::compare
+
+Class QSGVertexColorMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGVertexColorMaterial (0x0x7f68b08ff2d8) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+ QSGMaterial (0x0x7f68b4ef0a80) 0
+ primary-for QSGVertexColorMaterial (0x0x7f68b08ff2d8)
+
+Class QAbstractItemModelTester::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModelTester::QPrivateSignal (0x0x7f68b4ef0b40) 0 empty
+
+Vtable for QAbstractItemModelTester
+QAbstractItemModelTester::_ZTV24QAbstractItemModelTester: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractItemModelTester)
+16 (int (*)(...))QAbstractItemModelTester::metaObject
+24 (int (*)(...))QAbstractItemModelTester::qt_metacast
+32 (int (*)(...))QAbstractItemModelTester::qt_metacall
+40 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+48 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAbstractItemModelTester
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModelTester (0x0x7f68b08ff340) 0
+ vptr=((& QAbstractItemModelTester::_ZTV24QAbstractItemModelTester) + 16)
+ QObject (0x0x7f68b4ef0ae0) 0
+ primary-for QAbstractItemModelTester (0x0x7f68b08ff340)
+
+Class QTest::QBenchmarkIterationController
+ size=4 align=4
+ base size=4 base align=4
+QTest::QBenchmarkIterationController (0x0x7f68b4ef0d20) 0
+
+Class QTestEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTestEventLoop::QPrivateSignal (0x0x7f68b515d3c0) 0 empty
+
+Vtable for QTestEventLoop
+QTestEventLoop::_ZTV14QTestEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTestEventLoop)
+16 (int (*)(...))QTestEventLoop::metaObject
+24 (int (*)(...))QTestEventLoop::qt_metacast
+32 (int (*)(...))QTestEventLoop::qt_metacall
+40 (int (*)(...))QTestEventLoop::~QTestEventLoop
+48 (int (*)(...))QTestEventLoop::~QTestEventLoop
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTestEventLoop::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTestEventLoop
+ size=32 align=8
+ base size=32 base align=8
+QTestEventLoop (0x0x7f68b50378f0) 0
+ vptr=((& QTestEventLoop::_ZTV14QTestEventLoop) + 16)
+ QObject (0x0x7f68b515d360) 0
+ primary-for QTestEventLoop (0x0x7f68b50378f0)
+
+Vtable for QSignalSpy
+QSignalSpy::_ZTV10QSignalSpy: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSignalSpy)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QSignalSpy::qt_metacall
+40 (int (*)(...))QSignalSpy::~QSignalSpy
+48 (int (*)(...))QSignalSpy::~QSignalSpy
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalSpy
+ size=128 align=8
+ base size=121 base align=8
+QSignalSpy (0x0x7f68b512b770) 0
+ vptr=((& QSignalSpy::_ZTV10QSignalSpy) + 16)
+ QObject (0x0x7f68b4a19180) 0
+ primary-for QSignalSpy (0x0x7f68b512b770)
+ QList<QList<QVariant> > (0x0x7f68b4bc4888) 16
+ QListSpecialMethods<QList<QVariant> > (0x0x7f68b4bc48f0) 16 empty
+ QListSpecialMethodsBase<QList<QVariant> > (0x0x7f68b4a191e0) 16 empty
+
+Class QTestData
+ size=8 align=8
+ base size=8 base align=8
+QTestData (0x0x7f68b438a720) 0
+
+Class QTest::Internal::QCborValueFormatter
+ size=1 align=1
+ base size=0 base align=1
+QTest::Internal::QCborValueFormatter (0x0x7f68b3c83360) 0 empty
+
+Vtable for QSvgGenerator
+QSvgGenerator::_ZTV13QSvgGenerator: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSvgGenerator)
+16 (int (*)(...))QSvgGenerator::~QSvgGenerator
+24 (int (*)(...))QSvgGenerator::~QSvgGenerator
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))QSvgGenerator::paintEngine
+48 (int (*)(...))QSvgGenerator::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QSvgGenerator
+ size=24 align=8
+ base size=24 base align=8
+QSvgGenerator (0x0x7f68b37df6e8) 0
+ vptr=((& QSvgGenerator::_ZTV13QSvgGenerator) + 16)
+ QPaintDevice (0x0x7f68b3526a20) 0
+ primary-for QSvgGenerator (0x0x7f68b37df6e8)
+
+Class QSvgRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSvgRenderer::QPrivateSignal (0x0x7f68b3526c60) 0 empty
+
+Vtable for QSvgRenderer
+QSvgRenderer::_ZTV12QSvgRenderer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSvgRenderer)
+16 (int (*)(...))QSvgRenderer::metaObject
+24 (int (*)(...))QSvgRenderer::qt_metacast
+32 (int (*)(...))QSvgRenderer::qt_metacall
+40 (int (*)(...))QSvgRenderer::~QSvgRenderer
+48 (int (*)(...))QSvgRenderer::~QSvgRenderer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSvgRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSvgRenderer (0x0x7f68b359e000) 0
+ vptr=((& QSvgRenderer::_ZTV12QSvgRenderer) + 16)
+ QObject (0x0x7f68b3526c00) 0
+ primary-for QSvgRenderer (0x0x7f68b359e000)
+
+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 (0x0x7f68b32edcc0) 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 (0x0x7f68b3353060) 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 (0x0x7f68b3353240) 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 (0x0x7f68b33535a0) 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 (0x0x7f68b3353780) 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 (0x0x7f68b3353ae0) 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 (0x0x7f68b3353c60) 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 (0x0x7f68b3353180) 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 (0x0x7f68b3413180) 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 (0x0x7f68b34134e0) 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 (0x0x7f68b34136c0) 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 (0x0x7f68b3413a20) 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 (0x0x7f68b3413c00) 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 (0x0x7f68b3413f60) 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 (0x0x7f68b31e3180) 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 (0x0x7f68b31e34e0) 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 (0x0x7f68b2e52d80) 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 (0x0x7f68b2ff7120) 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 (0x0x7f68b2ff72a0) 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 (0x0x7f68b2ff7600) 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 (0x0x7f68b2ff7780) 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 (0x0x7f68b2ff7ae0) 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 (0x0x7f68b2ff7c60) 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 (0x0x7f68b2c29000) 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 (0x0x7f68b2c29180) 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 (0x0x7f68b2c294e0) 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 (0x0x7f68b2c29660) 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 (0x0x7f68b2c299c0) 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 (0x0x7f68b2c29b40) 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 (0x0x7f68b2c29ea0) 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 (0x0x7f68b2d5c060) 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 (0x0x7f68b2d5c3c0) 0 empty
+
+Class QtPrivate::invokeMethodHelper(QMetaMethodReturnArgument, const Args& ...) [with Args = {}]::R
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::invokeMethodHelper(QMetaMethodReturnArgument, const Args& ...) [with Args = {}]::R (0x0x7f68c9c835a0) 0
+
+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 (0x0x7f68aee2d840) 0
+
diff --git a/tests/auto/bic/data/qt.6.7.0.linux-gcc-amd64.txt b/tests/auto/bic/data/qt.6.7.0.linux-gcc-amd64.txt
new file mode 100644
index 0000000000..8225ae0fd5
--- /dev/null
+++ b/tests/auto/bic/data/qt.6.7.0.linux-gcc-amd64.txt
@@ -0,0 +1,27743 @@
+Class std::__failure_type
+ size=1 align=1
+ base size=0 base align=1
+std::__failure_type (0x0x7b9f4d44aae0) 0 empty
+
+Class std::__do_is_destructible_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_is_destructible_impl (0x0x7b9f4d4c8a20) 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 (0x0x7b9f4d4c8c60) 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 (0x0x7b9f4d4fbb40) 0 empty
+
+Class std::__make_unsigned_selector_base
+ size=1 align=1
+ base size=0 base align=1
+std::__make_unsigned_selector_base (0x0x7b9f4d55f4e0) 0 empty
+
+Class std::__do_common_type_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__do_common_type_impl (0x0x7b9f4d5afea0) 0 empty
+
+Class std::__invoke_memfun_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_ref (0x0x7b9f4d5df480) 0 empty
+
+Class std::__invoke_memfun_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memfun_deref (0x0x7b9f4d5df4e0) 0 empty
+
+Class std::__invoke_memobj_ref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_ref (0x0x7b9f4d5df540) 0 empty
+
+Class std::__invoke_memobj_deref
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_memobj_deref (0x0x7b9f4d5df5a0) 0 empty
+
+Class std::__invoke_other
+ size=1 align=1
+ base size=0 base align=1
+std::__invoke_other (0x0x7b9f4d5df600) 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 (0x0x7b9f4d5df6c0) 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 (0x0x7b9f4d5df780) 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 (0x0x7b9f4d5df840) 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 (0x0x7b9f4d5df900) 0 empty
+
+Class std::__result_of_other_impl
+ size=1 align=1
+ base size=0 base align=1
+std::__result_of_other_impl (0x0x7b9f4d5dfc60) 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 (0x0x7b9f4d62d000) 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 (0x0x7b9f4d62d060) 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 (0x0x7b9f4d62d300) 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 (0x0x7b9f4d62d360) 0 empty
+
+Class std::__nonesuchbase
+ size=1 align=1
+ base size=0 base align=1
+std::__nonesuchbase (0x0x7b9f4d62dc60) 0 empty
+
+Class std::__nonesuch
+ size=1 align=1
+ base size=1 base align=1
+std::__nonesuch (0x0x7b9f4fc346e8) 0 empty
+std::__nonesuchbase (0x0x7b9f4d62dcc0) 0 empty
+
+Class std::piecewise_construct_t
+ size=1 align=1
+ base size=0 base align=1
+std::piecewise_construct_t (0x0x7b9f4fcaf1e0) 0 empty
+
+Class std::in_place_t
+ size=1 align=1
+ base size=0 base align=1
+std::in_place_t (0x0x7b9f4fd323c0) 0 empty
+
+Class std::_Enable_default_constructor_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Enable_default_constructor_tag (0x0x7b9f4fd32de0) 0 empty
+
+Class std::_Hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Hash_impl (0x0x7b9f4fdc7c60) 0 empty
+
+Class std::_Fnv_hash_impl
+ size=1 align=1
+ base size=0 base align=1
+std::_Fnv_hash_impl (0x0x7b9f4fdc7de0) 0 empty
+
+Class std::__true_type
+ size=1 align=1
+ base size=0 base align=1
+std::__true_type (0x0x7b9f4fdeec60) 0 empty
+
+Class std::__false_type
+ size=1 align=1
+ base size=0 base align=1
+std::__false_type (0x0x7b9f4fdeecc0) 0 empty
+
+Class std::input_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::input_iterator_tag (0x0x7b9f4faa4480) 0 empty
+
+Class std::output_iterator_tag
+ size=1 align=1
+ base size=0 base align=1
+std::output_iterator_tag (0x0x7b9f4faa44e0) 0 empty
+
+Class std::forward_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::forward_iterator_tag (0x0x7b9f4fa86d68) 0 empty
+std::input_iterator_tag (0x0x7b9f4faa4540) 0 empty
+
+Class std::bidirectional_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::bidirectional_iterator_tag (0x0x7b9f4fa86dd0) 0 empty
+std::forward_iterator_tag (0x0x7b9f4fa86e38) 0 empty
+std::input_iterator_tag (0x0x7b9f4faa45a0) 0 empty
+
+Class std::random_access_iterator_tag
+ size=1 align=1
+ base size=1 base align=1
+std::random_access_iterator_tag (0x0x7b9f4fa86ea0) 0 empty
+std::bidirectional_iterator_tag (0x0x7b9f4fa86f08) 0 empty
+std::forward_iterator_tag (0x0x7b9f4fa86f70) 0 empty
+std::input_iterator_tag (0x0x7b9f4faa4600) 0 empty
+
+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 (0x0x7b9f4faa4cc0) 0 nearly-empty
+ vptr=((& std::exception::_ZTVSt9exception) + 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 (0x0x7b9f4fab80d0) 0 nearly-empty
+ vptr=((& std::bad_alloc::_ZTVSt9bad_alloc) + 16)
+std::exception (0x0x7b9f4faa4f60) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7b9f4fab80d0)
+
+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 (0x0x7b9f4fab8138) 0 nearly-empty
+ vptr=((& std::bad_array_new_length::_ZTVSt20bad_array_new_length) + 16)
+std::bad_alloc (0x0x7b9f4fab81a0) 0 nearly-empty
+ primary-for std::bad_array_new_length (0x0x7b9f4fab8138)
+std::exception (0x0x7b9f4fadc1e0) 0 nearly-empty
+ primary-for std::bad_alloc (0x0x7b9f4fab81a0)
+
+Class std::nothrow_t
+ size=1 align=1
+ base size=0 base align=1
+std::nothrow_t (0x0x7b9f4fadc3c0) 0 empty
+
+Class std::__detail::__variant::__variant_cookie
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::__variant::__variant_cookie (0x0x7b9f4fb0f2a0) 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 (0x0x7b9f4fb0f300) 0 empty
+
+Class std::monostate
+ size=1 align=1
+ base size=0 base align=1
+std::monostate (0x0x7b9f4fbe9300) 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 (0x0x7b9f4fab8ea0) 0
+ vptr=((& std::bad_variant_access::_ZTVSt18bad_variant_access) + 16)
+std::exception (0x0x7b9f4fc10840) 0 nearly-empty
+ primary-for std::bad_variant_access (0x0x7b9f4fab8ea0)
+
+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 (0x0x7b9f4f83f0d0) 0 nearly-empty
+ vptr=((& std::bad_exception::_ZTVSt13bad_exception) + 16)
+std::exception (0x0x7b9f4f88d480) 0 nearly-empty
+ primary-for std::bad_exception (0x0x7b9f4f83f0d0)
+
+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 (0x0x7b9f4f88d660) 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 (0x0x7b9f4f83f138) 0 nearly-empty
+ vptr=((& std::bad_cast::_ZTVSt8bad_cast) + 16)
+std::exception (0x0x7b9f4f88da20) 0 nearly-empty
+ primary-for std::bad_cast (0x0x7b9f4f83f138)
+
+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 (0x0x7b9f4f83f1a0) 0 nearly-empty
+ vptr=((& std::bad_typeid::_ZTVSt10bad_typeid) + 16)
+std::exception (0x0x7b9f4f88dc00) 0 nearly-empty
+ primary-for std::bad_typeid (0x0x7b9f4f83f1a0)
+
+Class std::__exception_ptr::exception_ptr
+ size=8 align=8
+ base size=8 base align=8
+std::__exception_ptr::exception_ptr (0x0x7b9f4f88dde0) 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 (0x0x7b9f4f8c9960) 0
+ vptr=((& std::nested_exception::_ZTVSt16nested_exception) + 16)
+
+Class std::nullopt_t
+ size=1 align=1
+ base size=0 base align=1
+std::nullopt_t (0x0x7b9f4f8f0060) 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 (0x0x7b9f4f83f208) 0 nearly-empty
+ vptr=((& std::bad_optional_access::_ZTVSt19bad_optional_access) + 16)
+std::exception (0x0x7b9f4f8f02a0) 0 nearly-empty
+ primary-for std::bad_optional_access (0x0x7b9f4f83f208)
+
+Class __gnu_cxx::__ops::_Iter_less_iter
+ size=1 align=1
+ base size=0 base align=1
+__gnu_cxx::__ops::_Iter_less_iter (0x0x7b9f4f648ea0) 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 (0x0x7b9f4f67a000) 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 (0x0x7b9f4f67a300) 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 (0x0x7b9f4f67a600) 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 (0x0x7b9f4f67a720) 0 empty
+
+Class std::__erased_type
+ size=1 align=1
+ base size=0 base align=1
+std::__erased_type (0x0x7b9f4f7b2540) 0 empty
+
+Class std::allocator_arg_t
+ size=1 align=1
+ base size=0 base align=1
+std::allocator_arg_t (0x0x7b9f4f7b25a0) 0 empty
+
+Class std::__uses_alloc_base
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc_base (0x0x7b9f4f7b2720) 0 empty
+
+Class std::__uses_alloc0::_Sink
+ size=1 align=1
+ base size=0 base align=1
+std::__uses_alloc0::_Sink (0x0x7b9f4f7b27e0) 0 empty
+
+Class std::__uses_alloc0
+ size=1 align=1
+ base size=1 base align=1
+std::__uses_alloc0 (0x0x7b9f4f83fc30) 0
+std::__uses_alloc_base (0x0x7b9f4f7b2780) 0 empty
+
+Class std::_Swallow_assign
+ size=1 align=1
+ base size=0 base align=1
+std::_Swallow_assign (0x0x7b9f4c344b40) 0 empty
+
+Class QSysInfo
+ size=1 align=1
+ base size=0 base align=1
+QSysInfo (0x0x7b9f4c399ea0) 0 empty
+
+Class QMessageLogContext
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogContext (0x0x7b9f4c399f00) 0
+
+Class QMessageLogger
+ size=32 align=8
+ base size=32 base align=8
+QMessageLogger (0x0x7b9f4c3e91e0) 0
+
+Class QtPrivate::CompareAgainstLiteralZero
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::CompareAgainstLiteralZero (0x0x7b9f4c3e9a20) 0 empty
+
+Class QFlag
+ size=4 align=4
+ base size=4 base align=4
+QFlag (0x0x7b9f4c3e9c60) 0
+
+Class QIncompatibleFlag
+ size=4 align=4
+ base size=4 base align=4
+QIncompatibleFlag (0x0x7b9f4c0572a0) 0
+
+Class std::__atomic_flag_base
+ size=1 align=1
+ base size=1 base align=1
+std::__atomic_flag_base (0x0x7b9f4c0c9900) 0
+
+Class std::atomic_flag
+ size=1 align=1
+ base size=1 base align=1
+std::atomic_flag (0x0x7b9f4c0a61a0) 0
+std::__atomic_flag_base (0x0x7b9f4c0c9960) 0
+
+Class QAtomicInt
+ size=4 align=4
+ base size=4 base align=4
+QAtomicInt (0x0x7b9f4c0a6958) 0
+QAtomicInteger<int> (0x0x7b9f4c0a69c0) 0
+QBasicAtomicInteger<int> (0x0x7b9f4bc54ea0) 0
+
+Class __locale_struct
+ size=232 align=8
+ base size=232 base align=8
+__locale_struct (0x0x7b9f4bce2a20) 0
+
+Class timeval
+ size=16 align=8
+ base size=16 base align=8
+timeval (0x0x7b9f4bce2d20) 0
+
+Class timespec
+ size=16 align=8
+ base size=16 base align=8
+timespec (0x0x7b9f4bce2d80) 0
+
+Class __pthread_internal_list
+ size=16 align=8
+ base size=16 base align=8
+__pthread_internal_list (0x0x7b9f4bce2f00) 0
+
+Class __pthread_internal_slist
+ size=8 align=8
+ base size=8 base align=8
+__pthread_internal_slist (0x0x7b9f4bce2f60) 0
+
+Class __pthread_mutex_s
+ size=40 align=8
+ base size=40 base align=8
+__pthread_mutex_s (0x0x7b9f4be2f000) 0
+
+Class __pthread_rwlock_arch_t
+ size=56 align=8
+ base size=56 base align=8
+__pthread_rwlock_arch_t (0x0x7b9f4be2f060) 0
+
+Class __pthread_cond_s
+ size=48 align=8
+ base size=48 base align=8
+__pthread_cond_s (0x0x7b9f4be2f0c0) 0
+
+Class pthread_attr_t
+ size=56 align=8
+ base size=56 base align=8
+pthread_attr_t (0x0x7b9f4be2f240) 0
+
+Class random_data
+ size=48 align=8
+ base size=48 base align=8
+random_data (0x0x7b9f4be2f4e0) 0
+
+Class drand48_data
+ size=24 align=8
+ base size=24 base align=8
+drand48_data (0x0x7b9f4be2f540) 0
+
+Class std::__numeric_limits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__numeric_limits_base (0x0x7b9f4bb1a060) 0 empty
+
+Class QtPrivate::QVersionTag
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QVersionTag (0x0x7b9f4b914d80) 0
+
+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 (0x0x7b9f4b46d478) 0 nearly-empty
+ vptr=((& std::bad_function_call::_ZTVSt17bad_function_call) + 16)
+std::exception (0x0x7b9f4b4870c0) 0 nearly-empty
+ primary-for std::bad_function_call (0x0x7b9f4b46d478)
+
+Class std::_Nocopy_types
+ size=16 align=8
+ base size=16 base align=8
+std::_Nocopy_types (0x0x7b9f4b487180) 0
+
+Class std::_Any_data
+ size=16 align=8
+ base size=16 base align=8
+std::_Any_data (0x0x7b9f4b4871e0) 0
+
+Class std::_Function_base
+ size=24 align=8
+ base size=24 base align=8
+std::_Function_base (0x0x7b9f4b4873c0) 0
+
+Class std::__allocator_traits_base
+ size=1 align=1
+ base size=0 base align=1
+std::__allocator_traits_base (0x0x7b9f4b55bd80) 0 empty
+
+Class std::__detail::_Identity
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Identity (0x0x7b9f4b1fd840) 0 empty
+
+Class std::__detail::_Select1st
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Select1st (0x0x7b9f4b1fd900) 0 empty
+
+Class std::__detail::_Hash_node_base
+ size=8 align=8
+ base size=8 base align=8
+std::__detail::_Hash_node_base (0x0x7b9f4b1fdde0) 0
+
+Class std::__detail::_Mod_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mod_range_hashing (0x0x7b9f4b22bd20) 0 empty
+
+Class std::__detail::_Default_ranged_hash
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Default_ranged_hash (0x0x7b9f4b22bde0) 0 empty
+
+Class std::__detail::_Prime_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Prime_rehash_policy (0x0x7b9f4b22be40) 0
+
+Class std::__detail::_Mask_range_hashing
+ size=1 align=1
+ base size=0 base align=1
+std::__detail::_Mask_range_hashing (0x0x7b9f4b254240) 0 empty
+
+Class std::__detail::_Power2_rehash_policy
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_Power2_rehash_policy (0x0x7b9f4b254420) 0
+
+Class std::_Bit_reference
+ size=16 align=8
+ base size=16 base align=8
+std::_Bit_reference (0x0x7b9f4aab4f00) 0
+
+Class std::_Bit_iterator_base
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator_base (0x0x7b9f4ad93c30) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7b9f4aada6c0) 0 empty
+
+Class std::_Bit_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_iterator (0x0x7b9f4ad93d00) 0
+std::_Bit_iterator_base (0x0x7b9f4ad93d68) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7b9f4aadac60) 0 empty
+
+Class std::_Bit_const_iterator
+ size=16 align=8
+ base size=12 base align=8
+std::_Bit_const_iterator (0x0x7b9f4ad93ea0) 0
+std::_Bit_iterator_base (0x0x7b9f4ad93f08) 0
+std::iterator<std::random_access_iterator_tag, bool> (0x0x7b9f4ab0d420) 0 empty
+
+Class __pstl::execution::v1::sequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::sequenced_policy (0x0x7b9f4a8db840) 0 empty
+
+Class __pstl::execution::v1::parallel_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::parallel_policy (0x0x7b9f4a8db9c0) 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 (0x0x7b9f4a8dbb40) 0 empty
+
+Class __pstl::execution::v1::unsequenced_policy
+ size=1 align=1
+ base size=0 base align=1
+__pstl::execution::v1::unsequenced_policy (0x0x7b9f4a8dbcc0) 0 empty
+
+Class q20::identity::is_transparent
+ size=1 align=1
+ base size=0 base align=1
+q20::identity::is_transparent (0x0x7b9f4a90f180) 0 empty
+
+Class q20::identity
+ size=1 align=1
+ base size=0 base align=1
+q20::identity (0x0x7b9f4a90f120) 0 empty
+
+Class timex
+ size=208 align=8
+ base size=208 base align=8
+timex (0x0x7b9f4a9cb360) 0
+
+Class tm
+ size=56 align=8
+ base size=56 base align=8
+tm (0x0x7b9f4a9cb3c0) 0
+
+Class itimerspec
+ size=32 align=8
+ base size=32 base align=8
+itimerspec (0x0x7b9f4a9cb420) 0
+
+Class std::chrono::_V2::system_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::system_clock (0x0x7b9f4a6706c0) 0 empty
+
+Class std::chrono::_V2::steady_clock
+ size=1 align=1
+ base size=0 base align=1
+std::chrono::_V2::steady_clock (0x0x7b9f4a6e2ba0) 0 empty
+
+Class std::filesystem::__file_clock
+ size=1 align=1
+ base size=0 base align=1
+std::filesystem::__file_clock (0x0x7b9f4a7aa780) 0 empty
+
+Class lconv
+ size=96 align=8
+ base size=96 base align=8
+lconv (0x0x7b9f4a48fd80) 0
+
+Class sched_param
+ size=4 align=4
+ base size=4 base align=4
+sched_param (0x0x7b9f4a48fe40) 0
+
+Class __jmp_buf_tag
+ size=200 align=8
+ base size=200 base align=8
+__jmp_buf_tag (0x0x7b9f4a48ff00) 0
+
+Class _pthread_cleanup_buffer
+ size=32 align=8
+ base size=32 base align=8
+_pthread_cleanup_buffer (0x0x7b9f4a48ff60) 0
+
+Class __cancel_jmp_buf_tag
+ size=72 align=8
+ base size=72 base align=8
+__cancel_jmp_buf_tag (0x0x7b9f4a52d000) 0
+
+Class __pthread_cleanup_frame
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_frame (0x0x7b9f4a52d0c0) 0
+
+Class __pthread_cleanup_class
+ size=24 align=8
+ base size=24 base align=8
+__pthread_cleanup_class (0x0x7b9f4a52d120) 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 (0x0x7b9f4a5d6e40) 0 nearly-empty
+ vptr=((& __cxxabiv1::__forced_unwind::_ZTVN10__cxxabiv115__forced_unwindE) + 16)
+
+Class _G_fpos_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos_t (0x0x7b9f4a07b000) 0
+
+Class _G_fpos64_t
+ size=16 align=8
+ base size=16 base align=8
+_G_fpos64_t (0x0x7b9f4a07b060) 0
+
+Class _IO_FILE
+ size=216 align=8
+ base size=216 base align=8
+_IO_FILE (0x0x7b9f4a07b0c0) 0
+
+Class _IO_cookie_io_functions_t
+ size=32 align=8
+ base size=32 base align=8
+_IO_cookie_io_functions_t (0x0x7b9f4a07b120) 0
+
+Class std::locale
+ size=8 align=8
+ base size=8 base align=8
+std::locale (0x0x7b9f49c14a20) 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 (0x0x7b9f49c14de0) 0
+ vptr=((& std::locale::facet::_ZTVNSt6locale5facetE) + 16)
+
+Class std::locale::id
+ size=8 align=8
+ base size=8 base align=8
+std::locale::id (0x0x7b9f49c5f0c0) 0
+
+Class std::locale::_Impl
+ size=40 align=8
+ base size=40 base align=8
+std::locale::_Impl (0x0x7b9f49c5f2a0) 0
+
+Class std::__cow_string
+ size=8 align=8
+ base size=8 base align=8
+std::__cow_string (0x0x7b9f49cae1e0) 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 (0x0x7b9f49cb6138) 0
+ vptr=((& std::logic_error::_ZTVSt11logic_error) + 16)
+std::exception (0x0x7b9f49cae2a0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7b9f49cb6138)
+
+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 (0x0x7b9f49cb61a0) 0
+ vptr=((& std::domain_error::_ZTVSt12domain_error) + 16)
+std::logic_error (0x0x7b9f49cb6208) 0
+ primary-for std::domain_error (0x0x7b9f49cb61a0)
+std::exception (0x0x7b9f49cae300) 0 nearly-empty
+ primary-for std::logic_error (0x0x7b9f49cb6208)
+
+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 (0x0x7b9f49cb6270) 0
+ vptr=((& std::invalid_argument::_ZTVSt16invalid_argument) + 16)
+std::logic_error (0x0x7b9f49cb62d8) 0
+ primary-for std::invalid_argument (0x0x7b9f49cb6270)
+std::exception (0x0x7b9f49cae360) 0 nearly-empty
+ primary-for std::logic_error (0x0x7b9f49cb62d8)
+
+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 (0x0x7b9f49cb6340) 0
+ vptr=((& std::length_error::_ZTVSt12length_error) + 16)
+std::logic_error (0x0x7b9f49cb63a8) 0
+ primary-for std::length_error (0x0x7b9f49cb6340)
+std::exception (0x0x7b9f49cae3c0) 0 nearly-empty
+ primary-for std::logic_error (0x0x7b9f49cb63a8)
+
+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 (0x0x7b9f49cb6410) 0
+ vptr=((& std::out_of_range::_ZTVSt12out_of_range) + 16)
+std::logic_error (0x0x7b9f49cb6478) 0
+ primary-for std::out_of_range (0x0x7b9f49cb6410)
+std::exception (0x0x7b9f49cae420) 0 nearly-empty
+ primary-for std::logic_error (0x0x7b9f49cb6478)
+
+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 (0x0x7b9f49cb64e0) 0
+ vptr=((& std::runtime_error::_ZTVSt13runtime_error) + 16)
+std::exception (0x0x7b9f49cae480) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7b9f49cb64e0)
+
+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 (0x0x7b9f49cb6548) 0
+ vptr=((& std::range_error::_ZTVSt11range_error) + 16)
+std::runtime_error (0x0x7b9f49cb65b0) 0
+ primary-for std::range_error (0x0x7b9f49cb6548)
+std::exception (0x0x7b9f49cae4e0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7b9f49cb65b0)
+
+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 (0x0x7b9f49cb6618) 0
+ vptr=((& std::overflow_error::_ZTVSt14overflow_error) + 16)
+std::runtime_error (0x0x7b9f49cb6680) 0
+ primary-for std::overflow_error (0x0x7b9f49cb6618)
+std::exception (0x0x7b9f49cae540) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7b9f49cb6680)
+
+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 (0x0x7b9f49cb66e8) 0
+ vptr=((& std::underflow_error::_ZTVSt15underflow_error) + 16)
+std::runtime_error (0x0x7b9f49cb6750) 0
+ primary-for std::underflow_error (0x0x7b9f49cb66e8)
+std::exception (0x0x7b9f49cae5a0) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7b9f49cb6750)
+
+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 (0x0x7b9f49cae720) 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 (0x0x7b9f49caea80) 0
+
+Class std::error_condition
+ size=16 align=8
+ base size=16 base align=8
+std::error_condition (0x0x7b9f49d2e2a0) 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 (0x0x7b9f49cb6b60) 0
+ vptr=((& std::system_error::_ZTVSt12system_error) + 16)
+std::runtime_error (0x0x7b9f49cb6bc8) 0
+ primary-for std::system_error (0x0x7b9f49cb6b60)
+std::exception (0x0x7b9f49d2ee40) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7b9f49cb6bc8)
+
+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 (0x0x7b9f49cb6ea0) 0
+ vptr=((& std::ios_base::failure::_ZTVNSt8ios_base7failureB5cxx11E) + 16)
+std::system_error (0x0x7b9f49cb6f08) 0
+ primary-for std::ios_base::failure (0x0x7b9f49cb6ea0)
+std::runtime_error (0x0x7b9f49cb6f70) 0
+ primary-for std::system_error (0x0x7b9f49cb6f08)
+std::exception (0x0x7b9f49d93540) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7b9f49cb6f70)
+
+Class std::ios_base::_Callback_list
+ size=24 align=8
+ base size=24 base align=8
+std::ios_base::_Callback_list (0x0x7b9f49d935a0) 0
+
+Class std::ios_base::_Words
+ size=16 align=8
+ base size=16 base align=8
+std::ios_base::_Words (0x0x7b9f49d93600) 0
+
+Class std::ios_base::Init
+ size=1 align=1
+ base size=0 base align=1
+std::ios_base::Init (0x0x7b9f49d93660) 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 (0x0x7b9f49d934e0) 0
+ vptr=((& std::ios_base::_ZTVSt8ios_base) + 16)
+
+Class std::_Rb_tree_node_base
+ size=32 align=8
+ base size=32 base align=8
+std::_Rb_tree_node_base (0x0x7b9f49ab2120) 0
+
+Class std::_Rb_tree_header
+ size=40 align=8
+ base size=40 base align=8
+std::_Rb_tree_header (0x0x7b9f49ab2480) 0
+
+Class std::__mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__mutex_base (0x0x7b9f4992f360) 0
+
+Class std::mutex
+ size=40 align=8
+ base size=40 base align=8
+std::mutex (0x0x7b9f497fec30) 0
+std::__mutex_base (0x0x7b9f4992f420) 0
+
+Class std::__condvar
+ size=48 align=8
+ base size=48 base align=8
+std::__condvar (0x0x7b9f4992f600) 0
+
+Class std::defer_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::defer_lock_t (0x0x7b9f4992fcc0) 0 empty
+
+Class std::try_to_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::try_to_lock_t (0x0x7b9f4992fd20) 0 empty
+
+Class std::adopt_lock_t
+ size=1 align=1
+ base size=0 base align=1
+std::adopt_lock_t (0x0x7b9f4992fd80) 0 empty
+
+Class std::__shared_mutex_pthread
+ size=56 align=8
+ base size=56 base align=8
+std::__shared_mutex_pthread (0x0x7b9f4996f1e0) 0
+
+Class std::shared_mutex
+ size=56 align=8
+ base size=56 base align=8
+std::shared_mutex (0x0x7b9f4996f4e0) 0
+
+Class std::shared_timed_mutex
+ size=56 align=8
+ base size=56 base align=8
+std::shared_timed_mutex (0x0x7b9f497fec98) 0
+std::__shared_mutex_pthread (0x0x7b9f4996f7e0) 0
+
+Vtable for std::pmr::memory_resource
+std::pmr::memory_resource::_ZTVNSt3pmr15memory_resourceE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3pmr15memory_resourceE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class std::pmr::memory_resource
+ size=8 align=8
+ base size=8 base align=8
+std::pmr::memory_resource (0x0x7b9f495f0000) 0 nearly-empty
+ vptr=((& std::pmr::memory_resource::_ZTVNSt3pmr15memory_resourceE) + 16)
+
+Class std::pmr::pool_options
+ size=16 align=8
+ base size=16 base align=8
+std::pmr::pool_options (0x0x7b9f495f0a80) 0
+
+Class std::pmr::__pool_resource
+ size=56 align=8
+ base size=52 base align=8
+std::pmr::__pool_resource (0x0x7b9f495f0ae0) 0
+
+Vtable for std::pmr::synchronized_pool_resource
+std::pmr::synchronized_pool_resource::_ZTVNSt3pmr26synchronized_pool_resourceE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3pmr26synchronized_pool_resourceE)
+16 (int (*)(...))std::pmr::synchronized_pool_resource::~synchronized_pool_resource
+24 (int (*)(...))std::pmr::synchronized_pool_resource::~synchronized_pool_resource
+32 (int (*)(...))std::pmr::synchronized_pool_resource::do_allocate
+40 (int (*)(...))std::pmr::synchronized_pool_resource::do_deallocate
+48 (int (*)(...))std::pmr::synchronized_pool_resource::do_is_equal
+
+Class std::pmr::synchronized_pool_resource
+ size=136 align=8
+ base size=136 base align=8
+std::pmr::synchronized_pool_resource (0x0x7b9f499c0c98) 0
+ vptr=((& std::pmr::synchronized_pool_resource::_ZTVNSt3pmr26synchronized_pool_resourceE) + 16)
+std::pmr::memory_resource (0x0x7b9f49657ba0) 0 nearly-empty
+ primary-for std::pmr::synchronized_pool_resource (0x0x7b9f499c0c98)
+
+Vtable for std::pmr::unsynchronized_pool_resource
+std::pmr::unsynchronized_pool_resource::_ZTVNSt3pmr28unsynchronized_pool_resourceE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3pmr28unsynchronized_pool_resourceE)
+16 (int (*)(...))std::pmr::unsynchronized_pool_resource::~unsynchronized_pool_resource
+24 (int (*)(...))std::pmr::unsynchronized_pool_resource::~unsynchronized_pool_resource
+32 (int (*)(...))std::pmr::unsynchronized_pool_resource::do_allocate
+40 (int (*)(...))std::pmr::unsynchronized_pool_resource::do_deallocate
+48 (int (*)(...))std::pmr::unsynchronized_pool_resource::do_is_equal
+
+Class std::pmr::unsynchronized_pool_resource
+ size=72 align=8
+ base size=72 base align=8
+std::pmr::unsynchronized_pool_resource (0x0x7b9f499c0d00) 0
+ vptr=((& std::pmr::unsynchronized_pool_resource::_ZTVNSt3pmr28unsynchronized_pool_resourceE) + 16)
+std::pmr::memory_resource (0x0x7b9f496ff3c0) 0 nearly-empty
+ primary-for std::pmr::unsynchronized_pool_resource (0x0x7b9f499c0d00)
+
+Vtable for std::pmr::monotonic_buffer_resource
+std::pmr::monotonic_buffer_resource::_ZTVNSt3pmr25monotonic_buffer_resourceE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTINSt3pmr25monotonic_buffer_resourceE)
+16 (int (*)(...))std::pmr::monotonic_buffer_resource::~monotonic_buffer_resource
+24 (int (*)(...))std::pmr::monotonic_buffer_resource::~monotonic_buffer_resource
+32 (int (*)(...))std::pmr::monotonic_buffer_resource::do_allocate
+40 (int (*)(...))std::pmr::monotonic_buffer_resource::do_deallocate
+48 (int (*)(...))std::pmr::monotonic_buffer_resource::do_is_equal
+
+Class std::pmr::monotonic_buffer_resource
+ size=64 align=8
+ base size=64 base align=8
+std::pmr::monotonic_buffer_resource (0x0x7b9f499c0d68) 0
+ vptr=((& std::pmr::monotonic_buffer_resource::_ZTVNSt3pmr25monotonic_buffer_resourceE) + 16)
+std::pmr::memory_resource (0x0x7b9f496ffa20) 0 nearly-empty
+ primary-for std::pmr::monotonic_buffer_resource (0x0x7b9f499c0d68)
+
+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 (0x0x7b9f497d40d0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_lock_error::_ZTVN9__gnu_cxx24__concurrence_lock_errorE) + 16)
+std::exception (0x0x7b9f493df3c0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_lock_error (0x0x7b9f497d40d0)
+
+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 (0x0x7b9f497d4138) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_unlock_error::_ZTVN9__gnu_cxx26__concurrence_unlock_errorE) + 16)
+std::exception (0x0x7b9f493df4e0) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_unlock_error (0x0x7b9f497d4138)
+
+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 (0x0x7b9f497d41a0) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_broadcast_error::_ZTVN9__gnu_cxx29__concurrence_broadcast_errorE) + 16)
+std::exception (0x0x7b9f493df600) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_broadcast_error (0x0x7b9f497d41a0)
+
+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 (0x0x7b9f497d4270) 0 nearly-empty
+ vptr=((& __gnu_cxx::__concurrence_wait_error::_ZTVN9__gnu_cxx24__concurrence_wait_errorE) + 16)
+std::exception (0x0x7b9f493df720) 0 nearly-empty
+ primary-for __gnu_cxx::__concurrence_wait_error (0x0x7b9f497d4270)
+
+Class __gnu_cxx::__mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__mutex (0x0x7b9f49409000) 0
+
+Class __gnu_cxx::__recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+__gnu_cxx::__recursive_mutex (0x0x7b9f49409300) 0
+
+Class __gnu_cxx::__scoped_lock
+ size=8 align=8
+ base size=8 base align=8
+__gnu_cxx::__scoped_lock (0x0x7b9f49409600) 0
+
+Class __gnu_cxx::__cond
+ size=48 align=8
+ base size=48 base align=8
+__gnu_cxx::__cond (0x0x7b9f49409960) 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 (0x0x7b9f497d42d8) 0 nearly-empty
+ vptr=((& std::bad_weak_ptr::_ZTVSt12bad_weak_ptr) + 16)
+std::exception (0x0x7b9f49409c60) 0 nearly-empty
+ primary-for std::bad_weak_ptr (0x0x7b9f497d42d8)
+
+Class std::_Sp_make_shared_tag
+ size=1 align=1
+ base size=0 base align=1
+std::_Sp_make_shared_tag (0x0x7b9f49473960) 0 empty
+
+Class std::__sp_array_delete
+ size=1 align=1
+ base size=0 base align=1
+std::__sp_array_delete (0x0x7b9f49473ea0) 0 empty
+
+Class std::_Sp_locker
+ size=2 align=1
+ base size=2 base align=1
+std::_Sp_locker (0x0x7b9f495b6d20) 0
+
+Class Qt::Disambiguated_t
+ size=1 align=1
+ base size=0 base align=1
+Qt::Disambiguated_t (0x0x7b9f48e7b480) 0 empty
+
+Class QInternal
+ size=1 align=1
+ base size=0 base align=1
+QInternal (0x0x7b9f48bee660) 0 empty
+
+Class QKeyCombination
+ size=4 align=4
+ base size=4 base align=4
+QKeyCombination (0x0x7b9f48bee6c0) 0
+
+Class QtPrivate::QSlotObjectBase::Deleter
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QSlotObjectBase::Deleter (0x0x7b9f48cccd80) 0 empty
+
+Class QtPrivate::QSlotObjectBase
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QSlotObjectBase (0x0x7b9f48cccd20) 0
+
+Class QtPrivate::SlotObjSharedPtr
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::SlotObjSharedPtr (0x0x7b9f48a796c0) 0
+
+Class QMethodRawArguments
+ size=8 align=8
+ base size=8 base align=8
+QMethodRawArguments (0x0x7b9f48ae7360) 0
+
+Class QGenericArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericArgument (0x0x7b9f48ae73c0) 0
+
+Class QGenericReturnArgument
+ size=16 align=8
+ base size=16 base align=8
+QGenericReturnArgument (0x0x7b9f48a86680) 0
+QGenericArgument (0x0x7b9f48ae7660) 0
+
+Class QMetaMethodArgument
+ size=24 align=8
+ base size=24 base align=8
+QMetaMethodArgument (0x0x7b9f48ae7ae0) 0
+
+Class QMetaMethodReturnArgument
+ size=24 align=8
+ base size=24 base align=8
+QMetaMethodReturnArgument (0x0x7b9f48ae7b40) 0
+
+Class QMetaObject::SuperData
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::SuperData (0x0x7b9f48b13120) 0
+
+Class QMetaObject::Data
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject::Data (0x0x7b9f48b13180) 0
+
+Class QMetaObject
+ size=56 align=8
+ base size=56 base align=8
+QMetaObject (0x0x7b9f48b130c0) 0
+
+Class QMetaObject::Connection
+ size=8 align=8
+ base size=8 base align=8
+QMetaObject::Connection (0x0x7b9f48b6d000) 0
+
+Class QLatin1Char
+ size=1 align=1
+ base size=1 base align=1
+QLatin1Char (0x0x7b9f48b6d660) 0
+
+Class QChar
+ size=2 align=2
+ base size=2 base align=2
+QChar (0x0x7b9f48b6d0c0) 0
+
+Class QtPrivate::RefCount
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCount (0x0x7b9f48899000) 0
+
+Class QArrayData
+ size=16 align=8
+ base size=16 base align=8
+QArrayData (0x0x7b9f48899300) 0
+
+Class QtPrivate::AlignedQArrayData
+ size=16 align=16
+ base size=16 base align=16
+QtPrivate::AlignedQArrayData (0x0x7b9f48890270) 0
+QArrayData (0x0x7b9f48899a80) 0
+
+Class QtPrivate::QContainerImplHelper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QContainerImplHelper (0x0x7b9f48957900) 0 empty
+
+Class qxp::nonesuch
+ size=1 align=1
+ base size=0 base align=1
+qxp::nonesuch (0x0x7b9f48957a20) 0 empty
+
+Class QByteArrayView
+ size=16 align=8
+ base size=16 base align=8
+QByteArrayView (0x0x7b9f486c8960) 0
+
+Class QByteArray
+ size=24 align=8
+ base size=24 base align=8
+QByteArray (0x0x7b9f483e64e0) 0
+
+Class QByteArray::FromBase64Result
+ size=32 align=8
+ base size=28 base align=8
+QByteArray::FromBase64Result (0x0x7b9f482ae3c0) 0
+
+Class QStringView
+ size=16 align=8
+ base size=16 base align=8
+QStringView (0x0x7b9f48330f00) 0
+
+Class QChar::fromUcs4(char32_t)::R
+ size=4 align=2
+ base size=4 base align=2
+QChar::fromUcs4(char32_t)::R (0x0x7b9f480e70c0) 0
+
+Class QLatin1String
+ size=16 align=8
+ base size=16 base align=8
+QLatin1String (0x0x7b9f480e7360) 0
+
+Class QtPrivate::hide_char8_t
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::hide_char8_t (0x0x7b9f47e4c900) 0 empty
+
+Class QtPrivate::wrap_char
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::wrap_char (0x0x7b9f47e4c960) 0 empty
+
+Class QAnyStringView
+ size=16 align=8
+ base size=16 base align=8
+QAnyStringView (0x0x7b9f47ede4e0) 0
+
+Class QStringTokenizerBaseBase::tokenizer_state
+ size=24 align=8
+ base size=24 base align=8
+QStringTokenizerBaseBase::tokenizer_state (0x0x7b9f47c52a80) 0
+
+Class QStringTokenizerBaseBase
+ size=8 align=4
+ base size=8 base align=4
+QStringTokenizerBaseBase (0x0x7b9f47c52a20) 0
+
+Class QString
+ size=24 align=8
+ base size=24 base align=8
+QString (0x0x7b9f47d25540) 0
+
+Class QtPrivate::ArgBase
+ size=1 align=1
+ base size=1 base align=1
+QtPrivate::ArgBase (0x0x7b9f476174e0) 0
+
+Class QtPrivate::QStringViewArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QStringViewArg (0x0x7b9f4760b138) 0
+QtPrivate::ArgBase (0x0x7b9f47617540) 0
+
+Class QtPrivate::QLatin1StringArg
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QLatin1StringArg (0x0x7b9f4760b208) 0
+QtPrivate::ArgBase (0x0x7b9f47617780) 0
+
+Class QAbstractConcatenable
+ size=1 align=1
+ base size=0 base align=1
+QAbstractConcatenable (0x0x7b9f47617ea0) 0 empty
+
+Class QStringConverterBase::State
+ size=48 align=8
+ base size=48 base align=8
+QStringConverterBase::State (0x0x7b9f47689e40) 0
+
+Class QStringConverterBase
+ size=1 align=1
+ base size=0 base align=1
+QStringConverterBase (0x0x7b9f47689de0) 0 empty
+
+Class QStringConverter::Interface
+ size=40 align=8
+ base size=40 base align=8
+QStringConverter::Interface (0x0x7b9f476c5b40) 0
+
+Class QStringConverter
+ size=56 align=8
+ base size=56 base align=8
+QStringConverter (0x0x7b9f4760bea0) 0
+QStringConverterBase (0x0x7b9f476c5ae0) 0 empty
+
+Class QStringEncoder
+ size=56 align=8
+ base size=56 base align=8
+QStringEncoder (0x0x7b9f4760bf08) 0
+QStringConverter (0x0x7b9f4760bf70) 0
+QStringConverterBase (0x0x7b9f47725540) 0 empty
+
+Class QStringDecoder
+ size=56 align=8
+ base size=56 base align=8
+QStringDecoder (0x0x7b9f47753000) 0
+QStringConverter (0x0x7b9f47753068) 0
+QStringConverterBase (0x0x7b9f477453c0) 0 empty
+
+Class QHashSeed
+ size=8 align=8
+ base size=8 base align=8
+QHashSeed (0x0x7b9f473b0f00) 0
+
+Class QtPrivate::QHashCombine
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombine (0x0x7b9f4741c0c0) 0 empty
+
+Class QtPrivate::QHashCombineCommutative
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QHashCombineCommutative (0x0x7b9f4741c180) 0 empty
+
+Class QStringMatcher
+ size=312 align=8
+ base size=312 base align=8
+QStringMatcher (0x0x7b9f472287e0) 0
+
+Class QScopedPointerPodDeleter
+ size=1 align=1
+ base size=0 base align=1
+QScopedPointerPodDeleter (0x0x7b9f472d7c00) 0 empty
+
+Class Qt::partial_ordering
+ size=1 align=1
+ base size=1 base align=1
+Qt::partial_ordering (0x0x7b9f473089c0) 0
+
+Class Qt::weak_ordering
+ size=1 align=1
+ base size=1 base align=1
+Qt::weak_ordering (0x0x7b9f47331840) 0
+
+Class Qt::strong_ordering
+ size=1 align=1
+ base size=1 base align=1
+Qt::strong_ordering (0x0x7b9f47363540) 0
+
+Class QPartialOrdering
+ size=1 align=1
+ base size=1 base align=1
+QPartialOrdering (0x0x7b9f4739a900) 0
+
+Class QIODeviceBase
+ size=1 align=1
+ base size=0 base align=1
+QIODeviceBase (0x0x7b9f46fde2a0) 0 empty
+
+Class QDataStream
+ size=32 align=8
+ base size=32 base align=8
+QDataStream (0x0x7b9f474828f0) 0
+QIODeviceBase (0x0x7b9f46fde300) 0 empty
+
+Class QtPrivate::StreamStateSaver
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::StreamStateSaver (0x0x7b9f46fde480) 0
+
+Class qfloat16::Wrap
+ size=2 align=2
+ base size=2 base align=2
+qfloat16::Wrap (0x0x7b9f47099de0) 0
+
+Class qfloat16
+ size=2 align=2
+ base size=2 base align=2
+qfloat16 (0x0x7b9f47099d80) 0
+
+Class QtMetaContainerPrivate::QMetaContainerInterface
+ size=120 align=8
+ base size=120 base align=8
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7b9f46c0ede0) 0
+
+Class QtMetaContainerPrivate::QMetaSequenceInterface
+ size=216 align=8
+ base size=216 base align=8
+QtMetaContainerPrivate::QMetaSequenceInterface (0x0x7b9f46b9cb60) 0
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7b9f46c0eea0) 0
+
+Class QtMetaContainerPrivate::QMetaAssociationInterface
+ size=240 align=8
+ base size=240 base align=8
+QtMetaContainerPrivate::QMetaAssociationInterface (0x0x7b9f46b9cbc8) 0
+QtMetaContainerPrivate::QMetaContainerInterface (0x0x7b9f46c0ef60) 0
+
+Class QMetaContainer
+ size=8 align=8
+ base size=8 base align=8
+QMetaContainer (0x0x7b9f46d20a80) 0
+
+Class QMetaSequence
+ size=8 align=8
+ base size=8 base align=8
+QMetaSequence (0x0x7b9f46b9cd00) 0
+QMetaContainer (0x0x7b9f46d20c60) 0
+
+Class QMetaAssociation
+ size=8 align=8
+ base size=8 base align=8
+QMetaAssociation (0x0x7b9f46b9cd68) 0
+QMetaContainer (0x0x7b9f46d410c0) 0
+
+Class std::__detail::_List_node_base
+ size=16 align=8
+ base size=16 base align=8
+std::__detail::_List_node_base (0x0x7b9f46a26360) 0
+
+Class std::__detail::_List_node_header
+ size=24 align=8
+ base size=24 base align=8
+std::__detail::_List_node_header (0x0x7b9f469ac6e8) 0
+std::__detail::_List_node_base (0x0x7b9f46a263c0) 0
+
+Class QtPrivate::QMetaTypeInterface
+ size=112 align=8
+ base size=112 base align=8
+QtPrivate::QMetaTypeInterface (0x0x7b9f46b043c0) 0
+
+Class QMetaType
+ size=8 align=8
+ base size=8 base align=8
+QMetaType (0x0x7b9f46b045a0) 0
+
+Class QtMetaTypePrivate::QPairVariantInterfaceImpl
+ size=40 align=8
+ base size=40 base align=8
+QtMetaTypePrivate::QPairVariantInterfaceImpl (0x0x7b9f467c6900) 0
+
+Class QtPrivate::QTypeNormalizer
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QTypeNormalizer (0x0x7b9f466e0cc0) 0
+
+Class QBindingStatus
+ size=32 align=8
+ base size=32 base align=8
+QBindingStatus (0x0x7b9f463335a0) 0
+
+Class QBindingStorage
+ size=16 align=8
+ base size=16 base align=8
+QBindingStorage (0x0x7b9f46333600) 0
+
+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 (0x0x7b9f46333840) 0
+ vptr=((& QObjectData::_ZTV11QObjectData) + 16)
+
+Class QObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObject::QPrivateSignal (0x0x7b9f45fc4060) 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 (0x0x7b9f45fc4000) 0
+ vptr=((& QObject::_ZTV7QObject) + 16)
+
+Class QSignalBlocker
+ size=16 align=8
+ base size=10 base align=8
+QSignalBlocker (0x0x7b9f46036120) 0
+
+Class QAbstractAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractAnimation::QPrivateSignal (0x0x7b9f46036a20) 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 (0x0x7b9f45f61410) 0
+ vptr=((& QAbstractAnimation::_ZTV18QAbstractAnimation) + 16)
+QObject (0x0x7b9f460369c0) 0
+ primary-for QAbstractAnimation (0x0x7b9f45f61410)
+
+Class QAnimationDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationDriver::QPrivateSignal (0x0x7b9f46036d80) 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 (0x0x7b9f45f61478) 0
+ vptr=((& QAnimationDriver::_ZTV16QAnimationDriver) + 16)
+QObject (0x0x7b9f46036d20) 0
+ primary-for QAnimationDriver (0x0x7b9f45f61478)
+
+Class QElapsedTimer
+ size=16 align=8
+ base size=16 base align=8
+QElapsedTimer (0x0x7b9f46036f00) 0
+
+Class QDeadlineTimer
+ size=16 align=8
+ base size=16 base align=8
+QDeadlineTimer (0x0x7b9f46083060) 0
+
+Class QEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QEventLoop::QPrivateSignal (0x0x7b9f4614cc60) 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 (0x0x7b9f45d6d4e0) 0
+ vptr=((& QEventLoop::_ZTV10QEventLoop) + 16)
+QObject (0x0x7b9f4614cc00) 0
+ primary-for QEventLoop (0x0x7b9f45d6d4e0)
+
+Class QEventLoopLocker
+ size=8 align=8
+ base size=8 base align=8
+QEventLoopLocker (0x0x7b9f45d9d360) 0
+
+Class QAbstractEventDispatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractEventDispatcher::QPrivateSignal (0x0x7b9f45d9d7e0) 0 empty
+
+Class QAbstractEventDispatcher::TimerInfo
+ size=12 align=4
+ base size=12 base align=4
+QAbstractEventDispatcher::TimerInfo (0x0x7b9f45d9d840) 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 (0x0x7b9f45d6d618) 0
+ vptr=((& QAbstractEventDispatcher::_ZTV24QAbstractEventDispatcher) + 16)
+QObject (0x0x7b9f45d9d780) 0
+ primary-for QAbstractEventDispatcher (0x0x7b9f45d6d618)
+
+Class QHashDummyValue
+ size=1 align=1
+ base size=0 base align=1
+QHashDummyValue (0x0x7b9f45e185a0) 0 empty
+
+Class QHashPrivate::SpanConstants
+ size=1 align=1
+ base size=0 base align=1
+QHashPrivate::SpanConstants (0x0x7b9f45e54300) 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 (0x0x7b9f45e16b60) 0
+ vptr=((& QTextStream::_ZTV11QTextStream) + 16)
+QIODeviceBase (0x0x7b9f45bf0d20) 0 empty
+
+Class QTextStreamManipulator
+ size=40 align=8
+ base size=38 base align=8
+QTextStreamManipulator (0x0x7b9f45c61660) 0
+
+Class QContiguousCacheData
+ size=40 align=8
+ base size=40 base align=8
+QContiguousCacheData (0x0x7b9f45c61d80) 0
+
+Class QSharedData
+ size=4 align=4
+ base size=4 base align=4
+QSharedData (0x0x7b9f45cfa300) 0
+
+Class QAdoptSharedDataTag
+ size=1 align=1
+ base size=0 base align=1
+QAdoptSharedDataTag (0x0x7b9f45cfa660) 0 empty
+
+Class QtSharedPointer::NormalDeleter
+ size=1 align=1
+ base size=0 base align=1
+QtSharedPointer::NormalDeleter (0x0x7b9f45960780) 0 empty
+
+Class QtSharedPointer::ExternalRefCountData
+ size=16 align=8
+ base size=16 base align=8
+QtSharedPointer::ExternalRefCountData (0x0x7b9f45960900) 0
+
+Class QtPrivate::EnableInternalData
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::EnableInternalData (0x0x7b9f459feea0) 0 empty
+
+Class QVLABaseBase::free_deleter
+ size=1 align=1
+ base size=0 base align=1
+QVLABaseBase::free_deleter (0x0x7b9f45810180) 0 empty
+
+Class QVLABaseBase
+ size=24 align=8
+ base size=24 base align=8
+QVLABaseBase (0x0x7b9f45810120) 0
+
+Class QDebug::Stream
+ size=88 align=8
+ base size=88 base align=8
+QDebug::Stream (0x0x7b9f455d9e40) 0
+
+Class QDebug
+ size=8 align=8
+ base size=8 base align=8
+QDebug (0x0x7b9f455adea0) 0
+QIODeviceBase (0x0x7b9f455d9de0) 0 empty
+
+Class QDebugStateSaver
+ size=8 align=8
+ base size=8 base align=8
+QDebugStateSaver (0x0x7b9f4535c420) 0
+
+Class QNoDebug
+ size=1 align=1
+ base size=0 base align=1
+QNoDebug (0x0x7b9f4535c4e0) 0 empty
+
+Class QVariant::CborValueStandIn
+ size=24 align=8
+ base size=24 base align=8
+QVariant::CborValueStandIn (0x0x7b9f45530a80) 0
+
+Class QVariant::PrivateShared
+ size=8 align=8
+ base size=8 base align=8
+QVariant::PrivateShared (0x0x7b9f45530ae0) 0
+
+Class QVariant::Private
+ size=32 align=8
+ base size=32 base align=8
+QVariant::Private (0x0x7b9f45530ba0) 0
+
+Class QVariant
+ size=32 align=8
+ base size=32 base align=8
+QVariant (0x0x7b9f45530a20) 0
+
+Class QtPrivate::QVariantTypeCoercer
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::QVariantTypeCoercer (0x0x7b9f45326240) 0
+
+Class QVariantConstPointer
+ size=32 align=8
+ base size=32 base align=8
+QVariantConstPointer (0x0x7b9f45326480) 0
+
+Class QModelRoleData
+ size=40 align=8
+ base size=40 base align=8
+QModelRoleData (0x0x7b9f45326660) 0
+
+Class QModelRoleDataSpan
+ size=16 align=8
+ base size=16 base align=8
+QModelRoleDataSpan (0x0x7b9f44f6cde0) 0
+
+Class QModelIndex
+ size=24 align=8
+ base size=24 base align=8
+QModelIndex (0x0x7b9f44fe12a0) 0
+
+Class QPersistentModelIndex
+ size=8 align=8
+ base size=8 base align=8
+QPersistentModelIndex (0x0x7b9f4503b960) 0
+
+Class QAbstractItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModel::QPrivateSignal (0x0x7b9f450be240) 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 (0x0x7b9f450b3af8) 0
+ vptr=((& QAbstractItemModel::_ZTV18QAbstractItemModel) + 16)
+QObject (0x0x7b9f450be1e0) 0
+ primary-for QAbstractItemModel (0x0x7b9f450b3af8)
+
+Class QAbstractTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTableModel::QPrivateSignal (0x0x7b9f44e1b1e0) 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 (0x0x7b9f44d9e1a0) 0
+ vptr=((& QAbstractTableModel::_ZTV19QAbstractTableModel) + 16)
+QAbstractItemModel (0x0x7b9f44d9e208) 0
+ primary-for QAbstractTableModel (0x0x7b9f44d9e1a0)
+QObject (0x0x7b9f44e1b180) 0
+ primary-for QAbstractItemModel (0x0x7b9f44d9e208)
+
+Class QAbstractListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractListModel::QPrivateSignal (0x0x7b9f44e1b300) 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 (0x0x7b9f44d9e270) 0
+ vptr=((& QAbstractListModel::_ZTV18QAbstractListModel) + 16)
+QAbstractItemModel (0x0x7b9f44d9e2d8) 0
+ primary-for QAbstractListModel (0x0x7b9f44d9e270)
+QObject (0x0x7b9f44e1b2a0) 0
+ primary-for QAbstractItemModel (0x0x7b9f44d9e2d8)
+
+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 (0x0x7b9f44ee99c0) 0
+ vptr=((& QAbstractNativeEventFilter::_ZTV26QAbstractNativeEventFilter) + 16)
+
+Class QAbstractProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractProxyModel::QPrivateSignal (0x0x7b9f44ee9a80) 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 (0x0x7b9f44eee340) 0
+ vptr=((& QAbstractProxyModel::_ZTV19QAbstractProxyModel) + 16)
+QAbstractItemModel (0x0x7b9f44eee3a8) 0
+ primary-for QAbstractProxyModel (0x0x7b9f44eee340)
+QObject (0x0x7b9f44ee9a20) 0
+ primary-for QAbstractItemModel (0x0x7b9f44eee3a8)
+
+Class QAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAnimationGroup::QPrivateSignal (0x0x7b9f44ee9c60) 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 (0x0x7b9f44eee410) 0
+ vptr=((& QAnimationGroup::_ZTV15QAnimationGroup) + 16)
+QAbstractAnimation (0x0x7b9f44eee478) 0
+ primary-for QAnimationGroup (0x0x7b9f44eee410)
+QObject (0x0x7b9f44ee9c00) 0
+ primary-for QAbstractAnimation (0x0x7b9f44eee478)
+
+Class QBasicMutex
+ size=8 align=8
+ base size=8 base align=8
+QBasicMutex (0x0x7b9f44f38060) 0
+
+Class QMutex
+ size=8 align=8
+ base size=8 base align=8
+QMutex (0x0x7b9f44eee4e0) 0
+QBasicMutex (0x0x7b9f44f38d80) 0
+
+Class QRecursiveMutex
+ size=24 align=8
+ base size=24 base align=8
+QRecursiveMutex (0x0x7b9f44b9b240) 0
+
+Class QEvent::InputEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::InputEventTag (0x0x7b9f44b9bc60) 0 empty
+
+Class QEvent::PointerEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::PointerEventTag (0x0x7b9f44b9bcc0) 0 empty
+
+Class QEvent::SinglePointEventTag
+ size=1 align=1
+ base size=0 base align=1
+QEvent::SinglePointEventTag (0x0x7b9f44b9bd20) 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 (0x0x7b9f44b9bc00) 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 (0x0x7b9f44eee618) 0
+ vptr=((& QTimerEvent::_ZTV11QTimerEvent) + 16)
+QEvent (0x0x7b9f44c276c0) 0
+ primary-for QTimerEvent (0x0x7b9f44eee618)
+
+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 (0x0x7b9f44eee680) 0
+ vptr=((& QChildEvent::_ZTV11QChildEvent) + 16)
+QEvent (0x0x7b9f44c27780) 0
+ primary-for QChildEvent (0x0x7b9f44eee680)
+
+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 (0x0x7b9f44eee6e8) 0
+ vptr=((& QDynamicPropertyChangeEvent::_ZTV27QDynamicPropertyChangeEvent) + 16)
+QEvent (0x0x7b9f44c27960) 0
+ primary-for QDynamicPropertyChangeEvent (0x0x7b9f44eee6e8)
+
+Class QCoreApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCoreApplication::QPrivateSignal (0x0x7b9f44c27d80) 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 (0x0x7b9f44eee888) 0
+ vptr=((& QCoreApplication::_ZTV16QCoreApplication) + 16)
+QObject (0x0x7b9f44c27d20) 0
+ primary-for QCoreApplication (0x0x7b9f44eee888)
+
+Class QAssociativeIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeIterator (0x0x7b9f44c9c208) 0
+QIterator<QMetaAssociation> (0x0x7b9f44c9c270) 0
+QBaseIterator<QMetaAssociation> (0x0x7b9f44c7ed80) 0
+
+Class QAssociativeConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QAssociativeConstIterator (0x0x7b9f44c9c3a8) 0
+QConstIterator<QMetaAssociation> (0x0x7b9f44c9c410) 0
+QBaseIterator<QMetaAssociation> (0x0x7b9f44cd2300) 0
+
+Class QAssociativeIterable
+ size=24 align=8
+ base size=24 base align=8
+QAssociativeIterable (0x0x7b9f44c9c4e0) 0
+QIterable<QMetaAssociation> (0x0x7b9f44cd2840) 0
+
+Class QBasicTimer
+ size=4 align=4
+ base size=4 base align=4
+QBasicTimer (0x0x7b9f44a15ae0) 0
+
+Class QBitArray
+ size=24 align=8
+ base size=24 base align=8
+QBitArray (0x0x7b9f44aaf600) 0
+
+Class QBitRef
+ size=16 align=8
+ base size=16 base align=8
+QBitRef (0x0x7b9f44aeed80) 0
+
+Class QIODevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIODevice::QPrivateSignal (0x0x7b9f44b41f60) 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 (0x0x7b9f44b571c0) 0
+ vptr=((& QIODevice::_ZTV9QIODevice) + 16)
+QObject (0x0x7b9f44b41ea0) 0
+ primary-for QIODevice (0x0x7b9f44b571c0)
+QIODeviceBase (0x0x7b9f44b41f00) 0 empty
+
+Class QBuffer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBuffer::QPrivateSignal (0x0x7b9f4477d4e0) 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 (0x0x7b9f44b566e8) 0
+ vptr=((& QBuffer::_ZTV7QBuffer) + 16)
+QIODevice (0x0x7b9f44b57690) 0
+ primary-for QBuffer (0x0x7b9f44b566e8)
+QObject (0x0x7b9f4477d420) 0
+ primary-for QIODevice (0x0x7b9f44b57690)
+QIODeviceBase (0x0x7b9f4477d480) 0 empty
+
+Class QByteArrayMatcher::Data
+ size=272 align=8
+ base size=272 base align=8
+QByteArrayMatcher::Data (0x0x7b9f4477d6c0) 0
+
+Class QByteArrayMatcher
+ size=1056 align=8
+ base size=1056 base align=8
+QByteArrayMatcher (0x0x7b9f4477d660) 0
+
+Class QStaticByteArrayMatcherBase::Skiptable
+ size=256 align=1
+ base size=256 base align=1
+QStaticByteArrayMatcherBase::Skiptable (0x0x7b9f4477da20) 0
+
+Class QStaticByteArrayMatcherBase
+ size=256 align=16
+ base size=256 base align=16
+QStaticByteArrayMatcherBase (0x0x7b9f4477d9c0) 0
+
+Class QLocale
+ size=8 align=8
+ base size=8 base align=8
+QLocale (0x0x7b9f44802120) 0
+
+Class QCalendar::YearMonthDay
+ size=12 align=4
+ base size=12 base align=4
+QCalendar::YearMonthDay (0x0x7b9f4458e420) 0
+
+Class QCalendar::SystemId
+ size=8 align=8
+ base size=8 base align=8
+QCalendar::SystemId (0x0x7b9f4458e480) 0
+
+Class QCalendar
+ size=8 align=8
+ base size=8 base align=8
+QCalendar (0x0x7b9f4458e3c0) 0
+
+Class QDate
+ size=8 align=8
+ base size=8 base align=8
+QDate (0x0x7b9f4458eea0) 0
+
+Class QTime
+ size=4 align=4
+ base size=4 base align=4
+QTime (0x0x7b9f4463ec00) 0
+
+Class QDateTime::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::ShortData (0x0x7b9f446bb420) 0
+
+Class QDateTime::Data
+ size=8 align=8
+ base size=8 base align=8
+QDateTime::Data (0x0x7b9f446bb480) 0
+
+Class QDateTime
+ size=8 align=8
+ base size=8 base align=8
+QDateTime (0x0x7b9f446bb3c0) 0
+
+Class QCborError
+ size=4 align=4
+ base size=4 base align=4
+QCborError (0x0x7b9f4439c120) 0
+
+Class QRegularExpression
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpression (0x0x7b9f443f30c0) 0
+
+Class QRegularExpressionMatch
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatch (0x0x7b9f444acc60) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIteratorSentinel (0x0x7b9f44136a20) 0 empty
+
+Class QRegularExpressionMatchIterator
+ size=8 align=8
+ base size=8 base align=8
+QRegularExpressionMatchIterator (0x0x7b9f44136ae0) 0
+
+Class QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator
+ size=24 align=8
+ base size=17 base align=8
+QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator (0x0x7b9f44136c60) 0
+
+Class QUrl
+ size=8 align=8
+ base size=8 base align=8
+QUrl (0x0x7b9f441f2480) 0
+
+Class QUuid::Id128Bytes
+ size=16 align=16
+ base size=16 base align=16
+QUuid::Id128Bytes (0x0x7b9f43f94000) 0
+
+Class QUuid
+ size=16 align=4
+ base size=16 base align=4
+QUuid (0x0x7b9f43f69f60) 0
+
+Class QCborParserError
+ size=16 align=8
+ base size=16 base align=8
+QCborParserError (0x0x7b9f4407c9c0) 0
+
+Class QCborValue
+ size=24 align=8
+ base size=20 base align=8
+QCborValue (0x0x7b9f4407ca80) 0
+
+Class QCborValueConstRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueConstRef (0x0x7b9f43d954e0) 0
+
+Class QCborValueRef
+ size=16 align=8
+ base size=16 base align=8
+QCborValueRef (0x0x7b9f43d91958) 0
+QCborValueConstRef (0x0x7b9f43dd3960) 0
+
+Class QCborArray::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::Iterator (0x0x7b9f43e3e4e0) 0
+
+Class QCborArray::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborArray::ConstIterator (0x0x7b9f43e3e540) 0
+
+Class QCborArray
+ size=8 align=8
+ base size=8 base align=8
+QCborArray (0x0x7b9f43e3e480) 0
+
+Class QCborMap::Iterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::Iterator (0x0x7b9f43b75120) 0
+
+Class QCborMap::ConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QCborMap::ConstIterator (0x0x7b9f43b75180) 0
+
+Class QCborMap
+ size=8 align=8
+ base size=8 base align=8
+QCborMap (0x0x7b9f43b750c0) 0
+
+Class QCborStreamReader
+ size=24 align=8
+ base size=20 base align=8
+QCborStreamReader (0x0x7b9f43a01180) 0
+
+Class QCborStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QCborStreamWriter (0x0x7b9f43a4d8a0) 0
+
+Class QCollatorSortKey
+ size=8 align=8
+ base size=8 base align=8
+QCollatorSortKey (0x0x7b9f43a8b0c0) 0
+
+Class QCollator
+ size=8 align=8
+ base size=8 base align=8
+QCollator (0x0x7b9f43a8b2a0) 0
+
+Class QCommandLineOption
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineOption (0x0x7b9f437336c0) 0
+
+Class QCommandLineParser
+ size=8 align=8
+ base size=8 base align=8
+QCommandLineParser (0x0x7b9f437a4840) 0
+
+Class QConcatenateTablesProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QConcatenateTablesProxyModel::QPrivateSignal (0x0x7b9f437a4960) 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 (0x0x7b9f437ac340) 0
+ vptr=((& QConcatenateTablesProxyModel::_ZTV28QConcatenateTablesProxyModel) + 16)
+QAbstractItemModel (0x0x7b9f437ac3a8) 0
+ primary-for QConcatenateTablesProxyModel (0x0x7b9f437ac340)
+QObject (0x0x7b9f437a4900) 0
+ primary-for QAbstractItemModel (0x0x7b9f437ac3a8)
+
+Class QCryptographicHash
+ size=8 align=8
+ base size=8 base align=8
+QCryptographicHash (0x0x7b9f437a4ae0) 0
+
+Class QFileDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDevice::QPrivateSignal (0x0x7b9f437a4f60) 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 (0x0x7b9f437ac410) 0
+ vptr=((& QFileDevice::_ZTV11QFileDevice) + 16)
+QIODevice (0x0x7b9f43813f50) 0
+ primary-for QFileDevice (0x0x7b9f437ac410)
+QObject (0x0x7b9f437a4ea0) 0
+ primary-for QIODevice (0x0x7b9f43813f50)
+QIODeviceBase (0x0x7b9f437a4f00) 0 empty
+
+Class std::filesystem::space_info
+ size=24 align=8
+ base size=24 base align=8
+std::filesystem::space_info (0x0x7b9f43844ea0) 0
+
+Class std::ctype_base
+ size=1 align=1
+ base size=0 base align=1
+std::ctype_base (0x0x7b9f43526480) 0 empty
+
+Class std::__num_base
+ size=1 align=1
+ base size=0 base align=1
+std::__num_base (0x0x7b9f4358e8a0) 0 empty
+
+Class std::time_base
+ size=1 align=1
+ base size=0 base align=1
+std::time_base (0x0x7b9f436d5480) 0 empty
+
+Class std::money_base::pattern
+ size=4 align=1
+ base size=4 base align=1
+std::money_base::pattern (0x0x7b9f43387780) 0
+
+Class std::money_base
+ size=1 align=1
+ base size=0 base align=1
+std::money_base (0x0x7b9f43387720) 0 empty
+
+Class std::messages_base
+ size=1 align=1
+ base size=0 base align=1
+std::messages_base (0x0x7b9f433b2d20) 0 empty
+
+Class std::codecvt_base
+ size=1 align=1
+ base size=0 base align=1
+std::codecvt_base (0x0x7b9f434048a0) 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> (0x0x7b9f42fdc340 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> (0x0x7b9f42fdc410 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> (0x0x7b9f42fdc888 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> (0x0x7b9f42fdc958 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)
+
+Construction vtable for std::basic_istream<char> (0x0x7b9f430acaf8 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> (0x0x7b9f430acd00 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> (0x0x7b9f430f55b0 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> (0x0x7b9f430acf08 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> (0x0x7b9f430acbc8 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> (0x0x7b9f42d650d0 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> (0x0x7b9f42d652d8 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> (0x0x7b9f430f59a0 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> (0x0x7b9f42d654e0 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> (0x0x7b9f42d655b0 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 (0x0x7b9f430f8f60) 0
+
+Class std::_Setiosflags
+ size=4 align=4
+ base size=4 base align=4
+std::_Setiosflags (0x0x7b9f42da3120) 0
+
+Class std::_Setbase
+ size=4 align=4
+ base size=4 base align=4
+std::_Setbase (0x0x7b9f42da32a0) 0
+
+Class std::_Setprecision
+ size=4 align=4
+ base size=4 base align=4
+std::_Setprecision (0x0x7b9f42da35a0) 0
+
+Class std::_Setw
+ size=4 align=4
+ base size=4 base align=4
+std::_Setw (0x0x7b9f42da3720) 0
+
+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 (0x0x7b9f42e65d80) 0 empty
+
+Class std::filesystem::__cxx11::path::_List
+ size=8 align=8
+ base size=8 base align=8
+std::filesystem::__cxx11::path::_List (0x0x7b9f42e65d20) 0
+
+Class std::filesystem::__cxx11::path
+ size=40 align=8
+ base size=40 base align=8
+std::filesystem::__cxx11::path (0x0x7b9f42e65cc0) 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 (0x0x7b9f42c7f9c0) 0
+ vptr=((& std::filesystem::__cxx11::filesystem_error::_ZTVNSt10filesystem7__cxx1116filesystem_errorE) + 16)
+std::system_error (0x0x7b9f42c7fa28) 0
+ primary-for std::filesystem::__cxx11::filesystem_error (0x0x7b9f42c7f9c0)
+std::runtime_error (0x0x7b9f42c7fa90) 0
+ primary-for std::system_error (0x0x7b9f42c7fa28)
+std::exception (0x0x7b9f42c9f960) 0 nearly-empty
+ primary-for std::runtime_error (0x0x7b9f42c7fa90)
+
+Class std::filesystem::__cxx11::path::_Cmpt
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::path::_Cmpt (0x0x7b9f42c7fd68) 0
+std::filesystem::__cxx11::path (0x0x7b9f42c9fea0) 0
+
+Class std::filesystem::__cxx11::path::iterator
+ size=24 align=8
+ base size=17 base align=8
+std::filesystem::__cxx11::path::iterator (0x0x7b9f4291c1e0) 0
+
+Class std::filesystem::file_status
+ size=8 align=4
+ base size=8 base align=4
+std::filesystem::file_status (0x0x7b9f429f33c0) 0
+
+Class std::filesystem::__cxx11::directory_entry
+ size=48 align=8
+ base size=41 base align=8
+std::filesystem::__cxx11::directory_entry (0x0x7b9f429f38a0) 0
+
+Class std::filesystem::__cxx11::__directory_iterator_proxy
+ size=48 align=8
+ base size=48 base align=8
+std::filesystem::__cxx11::__directory_iterator_proxy (0x0x7b9f42a39f60) 0
+
+Class std::filesystem::__cxx11::directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::directory_iterator (0x0x7b9f42a71720) 0
+
+Class std::filesystem::__cxx11::recursive_directory_iterator
+ size=16 align=8
+ base size=16 base align=8
+std::filesystem::__cxx11::recursive_directory_iterator (0x0x7b9f42ada120) 0
+
+Class QFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFile::QPrivateSignal (0x0x7b9f4275bd20) 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 (0x0x7b9f429cd208) 0
+ vptr=((& QFile::_ZTV5QFile) + 16)
+QFileDevice (0x0x7b9f42789000) 0
+ primary-for QFile (0x0x7b9f429cd208)
+QIODevice (0x0x7b9f4274be00) 0
+ primary-for QFileDevice (0x0x7b9f42789000)
+QObject (0x0x7b9f4275bc60) 0
+ primary-for QIODevice (0x0x7b9f4274be00)
+QIODeviceBase (0x0x7b9f4275bcc0) 0 empty
+
+Class QTimeZone::ShortData
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone::ShortData (0x0x7b9f427b46c0) 0
+
+Class QTimeZone::Data
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone::Data (0x0x7b9f427b4720) 0
+
+Class QTimeZone::OffsetData
+ size=48 align=8
+ base size=44 base align=8
+QTimeZone::OffsetData (0x0x7b9f427b4780) 0
+
+Class QTimeZone
+ size=8 align=8
+ base size=8 base align=8
+QTimeZone (0x0x7b9f427b4660) 0
+
+Class QFileInfo
+ size=8 align=8
+ base size=8 base align=8
+QFileInfo (0x0x7b9f4a261180) 0
+
+Class QDir
+ size=8 align=8
+ base size=8 base align=8
+QDir (0x0x7b9f483301e0) 0
+
+Class QDirIterator
+ size=8 align=8
+ base size=8 base align=8
+QDirIterator (0x0x7b9f46109e40) 0
+
+Class QEasingCurve
+ size=8 align=8
+ base size=8 base align=8
+QEasingCurve (0x0x7b9f452e1360) 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 (0x0x7b9f4aea6b60) 0 nearly-empty
+ vptr=((& QException::_ZTV10QException) + 16)
+std::exception (0x0x7b9f4491f420) 0 nearly-empty
+ primary-for QException (0x0x7b9f4aea6b60)
+
+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 (0x0x7b9f4aea6bc8) 0
+ vptr=((& QUnhandledException::_ZTV19QUnhandledException) + 16)
+QException (0x0x7b9f4aea6c30) 0 nearly-empty
+ primary-for QUnhandledException (0x0x7b9f4aea6bc8)
+std::exception (0x0x7b9f4491f480) 0 nearly-empty
+ primary-for QException (0x0x7b9f4aea6c30)
+
+Class QtPrivate::ExceptionStore
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::ExceptionStore (0x0x7b9f44945180) 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 (0x0x7b9f4461b0c0) 0 nearly-empty
+ vptr=((& QFactoryInterface::_ZTV17QFactoryInterface) + 16)
+
+Class QFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSelector::QPrivateSignal (0x0x7b9f4469b1e0) 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 (0x0x7b9f4aea6dd0) 0
+ vptr=((& QFileSelector::_ZTV13QFileSelector) + 16)
+QObject (0x0x7b9f4469b180) 0
+ primary-for QFileSelector (0x0x7b9f4aea6dd0)
+
+Class QFileSystemWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemWatcher::QPrivateSignal (0x0x7b9f4474c720) 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 (0x0x7b9f4aea6ea0) 0
+ vptr=((& QFileSystemWatcher::_ZTV18QFileSystemWatcher) + 16)
+QObject (0x0x7b9f4469bcc0) 0
+ primary-for QFileSystemWatcher (0x0x7b9f4aea6ea0)
+
+Class QtPrivate::ResultItem
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::ResultItem (0x0x7b9f4474cf00) 0
+
+Class QtPrivate::ResultIteratorBase
+ size=16 align=8
+ base size=12 base align=8
+QtPrivate::ResultIteratorBase (0x0x7b9f442c0720) 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 (0x0x7b9f43d73b40) 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 (0x0x7b9f42e23900) 0
+ vptr=((& QFutureInterfaceBase::_ZTV20QFutureInterfaceBase) + 16)
+
+Class std::__recursive_mutex_base
+ size=40 align=8
+ base size=40 base align=8
+std::__recursive_mutex_base (0x0x7b9f46f43d80) 0
+
+Class std::recursive_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_mutex (0x0x7b9f4af65d68) 0
+std::__recursive_mutex_base (0x0x7b9f46f43de0) 0
+
+Class std::timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::timed_mutex (0x0x7b9f47e0a930) 0
+std::__mutex_base (0x0x7b9f42ba42a0) 0
+std::__timed_mutex_impl<std::timed_mutex> (0x0x7b9f42ba4300) 0 empty
+
+Class std::recursive_timed_mutex
+ size=40 align=8
+ base size=40 base align=8
+std::recursive_timed_mutex (0x0x7b9f47bd6c40) 0
+std::__recursive_mutex_base (0x0x7b9f42ba46c0) 0
+std::__timed_mutex_impl<std::recursive_timed_mutex> (0x0x7b9f42ba4720) 0 empty
+
+Class std::once_flag
+ size=4 align=4
+ base size=4 base align=4
+std::once_flag (0x0x7b9f42e484e0) 0
+
+Class std::once_flag::_Prepare_execution
+ size=1 align=1
+ base size=0 base align=1
+std::once_flag::_Prepare_execution (0x0x7b9f42e48540) 0 empty
+
+Class std::condition_variable
+ size=48 align=8
+ base size=48 base align=8
+std::condition_variable (0x0x7b9f42e48a20) 0
+
+Class std::__at_thread_exit_elt
+ size=16 align=8
+ base size=16 base align=8
+std::__at_thread_exit_elt (0x0x7b9f42e48ea0) 0
+
+Class std::_V2::condition_variable_any
+ size=64 align=8
+ base size=64 base align=8
+std::_V2::condition_variable_any (0x0x7b9f42e48f00) 0
+
+Class std::__atomic_futex_unsigned_base
+ size=1 align=1
+ base size=0 base align=1
+std::__atomic_futex_unsigned_base (0x0x7b9f43b8be40) 0 empty
+
+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 (0x0x7b9f47d3a6c0) 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 (0x0x7b9f47d3a720) 0
+
+Class std::thread
+ size=8 align=8
+ base size=8 base align=8
+std::thread (0x0x7b9f47d3a660) 0
+
+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 (0x0x7b9f4af79e38) 0
+ vptr=((& std::future_error::_ZTVSt12future_error) + 16)
+std::logic_error (0x0x7b9f4af79ea0) 0
+ primary-for std::future_error (0x0x7b9f4af79e38)
+std::exception (0x0x7b9f4f8abc00) 0 nearly-empty
+ primary-for std::logic_error (0x0x7b9f4af79ea0)
+
+Class std::__future_base::_Result_base::_Deleter
+ size=1 align=1
+ base size=0 base align=1
+std::__future_base::_Result_base::_Deleter (0x0x7b9f4c188360) 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 (0x0x7b9f4c188300) 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 (0x0x7b9f49983c60) 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 (0x0x7b9f4afdd478) 0
+std::__at_thread_exit_elt (0x0x7b9f49983d20) 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 (0x0x7b9f4c1884e0) 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 (0x0x7b9f4c1882a0) 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 (0x0x7b9f4ac08d68) 0
+ vptr=((& std::__future_base::_Async_state_commonV2::_ZTVNSt13__future_base21_Async_state_commonV2E) + 16)
+std::__future_base::_State_baseV2 (0x0x7b9f45c33780) 0
+ primary-for std::__future_base::_Async_state_commonV2 (0x0x7b9f4ac08d68)
+
+Class QThread::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThread::QPrivateSignal (0x0x7b9f45c33e40) 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 (0x0x7b9f4ac09068) 0
+ vptr=((& QThread::_ZTV7QThread) + 16)
+QObject (0x0x7b9f45c33de0) 0
+ primary-for QThread (0x0x7b9f4ac09068)
+
+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 (0x0x7b9f4564f1e0) 0
+ vptr=((& QRunnable::_ZTV9QRunnable) + 16)
+
+Class QRunnable::QGenericRunnable::HelperBase
+ size=8 align=8
+ base size=8 base align=8
+QRunnable::QGenericRunnable::HelperBase (0x0x7b9f4564f360) 0
+
+Vtable for QRunnable::QGenericRunnable
+QRunnable::QGenericRunnable::_ZTVN9QRunnable16QGenericRunnableE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN9QRunnable16QGenericRunnableE)
+16 (int (*)(...))QRunnable::QGenericRunnable::run
+24 (int (*)(...))QRunnable::QGenericRunnable::~QGenericRunnable
+32 (int (*)(...))QRunnable::QGenericRunnable::~QGenericRunnable
+
+Class QRunnable::QGenericRunnable
+ size=24 align=8
+ base size=24 base align=8
+QRunnable::QGenericRunnable (0x0x7b9f4ac09138) 0
+ vptr=((& QRunnable::QGenericRunnable::_ZTVN9QRunnable16QGenericRunnableE) + 16)
+QRunnable (0x0x7b9f4564f300) 0
+ primary-for QRunnable::QGenericRunnable (0x0x7b9f4ac09138)
+
+Class QThreadPool::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QThreadPool::QPrivateSignal (0x0x7b9f4564fb40) 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 (0x0x7b9f4ac09270) 0
+ vptr=((& QThreadPool::_ZTV11QThreadPool) + 16)
+QObject (0x0x7b9f4564fae0) 0
+ primary-for QThreadPool (0x0x7b9f4ac09270)
+
+Class QtPrivate::UnwrapHandler
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::UnwrapHandler (0x0x7b9f44ffb780) 0 empty
+
+Class QFutureWatcherBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFutureWatcherBase::QPrivateSignal (0x0x7b9f440b85a0) 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 (0x0x7b9f4ac0da28) 0
+ vptr=((& QFutureWatcherBase::_ZTV18QFutureWatcherBase) + 16)
+QObject (0x0x7b9f440b8540) 0
+ primary-for QFutureWatcherBase (0x0x7b9f4ac0da28)
+
+Class QIdentityProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIdentityProxyModel::QPrivateSignal (0x0x7b9f440b8ae0) 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 (0x0x7b9f4ac0db60) 0
+ vptr=((& QIdentityProxyModel::_ZTV19QIdentityProxyModel) + 16)
+QAbstractProxyModel (0x0x7b9f4ac0dbc8) 0
+ primary-for QIdentityProxyModel (0x0x7b9f4ac0db60)
+QAbstractItemModel (0x0x7b9f4ac0dc30) 0
+ primary-for QAbstractProxyModel (0x0x7b9f4ac0dbc8)
+QObject (0x0x7b9f440b8a80) 0
+ primary-for QAbstractItemModel (0x0x7b9f4ac0dc30)
+
+Class QItemSelectionRange
+ size=16 align=8
+ base size=16 base align=8
+QItemSelectionRange (0x0x7b9f440b8c60) 0
+
+Class QItemSelectionModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemSelectionModel::QPrivateSignal (0x0x7b9f43ece240) 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 (0x0x7b9f4ac15c98) 0
+ vptr=((& QItemSelectionModel::_ZTV19QItemSelectionModel) + 16)
+QObject (0x0x7b9f43ece1e0) 0
+ primary-for QItemSelectionModel (0x0x7b9f4ac15c98)
+
+Class QItemSelection
+ size=24 align=8
+ base size=24 base align=8
+QItemSelection (0x0x7b9f4ac18068) 0
+QList<QItemSelectionRange> (0x0x7b9f4ac180d0) 0
+QListSpecialMethods<QItemSelectionRange> (0x0x7b9f4ac18138) 0 empty
+QListSpecialMethodsBase<QItemSelectionRange> (0x0x7b9f43eced20) 0 empty
+
+Class QJsonValue
+ size=24 align=8
+ base size=24 base align=8
+QJsonValue (0x0x7b9f42eac2a0) 0
+
+Class QJsonValueConstRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueConstRef (0x0x7b9f42943540) 0
+
+Class QJsonValueRef
+ size=16 align=8
+ base size=16 base align=8
+QJsonValueRef (0x0x7b9f4ac73f08) 0
+QJsonValueConstRef (0x0x7b9f427de120) 0
+
+Class QJsonArray::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::iterator (0x0x7b9f427deea0) 0
+
+Class QJsonArray::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonArray::const_iterator (0x0x7b9f427def00) 0
+
+Class QJsonArray
+ size=8 align=8
+ base size=8 base align=8
+QJsonArray (0x0x7b9f427dee40) 0
+
+Class QJsonParseError
+ size=8 align=4
+ base size=8 base align=4
+QJsonParseError (0x0x7b9f47bc5f00) 0
+
+Class QJsonDocument
+ size=8 align=8
+ base size=8 base align=8
+QJsonDocument (0x0x7b9f47bc5f60) 0
+
+Class QJsonObject::iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::iterator (0x0x7b9f45de3300) 0
+
+Class QJsonObject::const_iterator
+ size=16 align=8
+ base size=16 base align=8
+QJsonObject::const_iterator (0x0x7b9f45de3360) 0
+
+Class QJsonObject
+ size=8 align=8
+ base size=8 base align=8
+QJsonObject (0x0x7b9f45de32a0) 0
+
+Class QtPrivate::QCaseSensitiveLatin1Hash
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QCaseSensitiveLatin1Hash (0x0x7b9f44814780) 0 empty
+
+Class QtPrivate::QCaseInsensitiveLatin1Hash
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::QCaseInsensitiveLatin1Hash (0x0x7b9f44814840) 0 empty
+
+Class QLatin1StringMatcher
+ size=544 align=16
+ base size=544 base align=16
+QLatin1StringMatcher (0x0x7b9f44814ae0) 0
+
+Class QLibrary::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLibrary::QPrivateSignal (0x0x7b9f44814cc0) 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 (0x0x7b9f4ad2b270) 0
+ vptr=((& QLibrary::_ZTV8QLibrary) + 16)
+QObject (0x0x7b9f44814c60) 0
+ primary-for QLibrary (0x0x7b9f4ad2b270)
+
+Class QTypeRevision
+ size=2 align=1
+ base size=2 base align=1
+QTypeRevision (0x0x7b9f4251d420) 0
+
+Class QVersionNumber::SegmentStorage
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber::SegmentStorage (0x0x7b9f4254b2a0) 0
+
+Class QVersionNumber
+ size=8 align=8
+ base size=8 base align=8
+QVersionNumber (0x0x7b9f4254b240) 0
+
+Class QLibraryInfo
+ size=1 align=1
+ base size=0 base align=1
+QLibraryInfo (0x0x7b9f42581420) 0 empty
+
+Class QPoint
+ size=8 align=4
+ base size=8 base align=4
+QPoint (0x0x7b9f425814e0) 0
+
+Class QPointF
+ size=16 align=8
+ base size=16 base align=8
+QPointF (0x0x7b9f425a20c0) 0
+
+Class QLine
+ size=16 align=4
+ base size=16 base align=4
+QLine (0x0x7b9f425bd060) 0
+
+Class QLineF
+ size=32 align=8
+ base size=32 base align=8
+QLineF (0x0x7b9f425ccb40) 0
+
+Class QLockFile
+ size=8 align=8
+ base size=8 base align=8
+QLockFile (0x0x7b9f425ee8a0) 0
+
+Class QLoggingCategory::AtomicBools
+ size=4 align=1
+ base size=4 base align=1
+QLoggingCategory::AtomicBools (0x0x7b9f425eeae0) 0
+
+Class QLoggingCategory
+ size=24 align=8
+ base size=24 base align=8
+QLoggingCategory (0x0x7b9f425eea80) 0
+
+Class QMargins
+ size=16 align=4
+ base size=16 base align=4
+QMargins (0x0x7b9f42619180) 0
+
+Class QMarginsF
+ size=32 align=8
+ base size=32 base align=8
+QMarginsF (0x0x7b9f42639060) 0
+
+Class QMessageAuthenticationCode
+ size=8 align=8
+ base size=8 base align=8
+QMessageAuthenticationCode (0x0x7b9f426636c0) 0
+
+Class QMetaMethod::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaMethod::Data (0x0x7b9f42663a20) 0
+
+Class QMetaMethod
+ size=16 align=8
+ base size=16 base align=8
+QMetaMethod (0x0x7b9f426639c0) 0
+
+Class QMetaEnum::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaEnum::Data (0x0x7b9f4269a420) 0
+
+Class QMetaEnum
+ size=16 align=8
+ base size=16 base align=8
+QMetaEnum (0x0x7b9f4269a3c0) 0
+
+Class QMetaProperty::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaProperty::Data (0x0x7b9f426b5720) 0
+
+Class QMetaProperty
+ size=32 align=8
+ base size=32 base align=8
+QMetaProperty (0x0x7b9f426b56c0) 0
+
+Class QMetaClassInfo::Data
+ size=8 align=8
+ base size=8 base align=8
+QMetaClassInfo::Data (0x0x7b9f426b5de0) 0
+
+Class QMetaClassInfo
+ size=16 align=8
+ base size=16 base align=8
+QMetaClassInfo (0x0x7b9f426b5d80) 0
+
+Class QMimeData::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMimeData::QPrivateSignal (0x0x7b9f426e2420) 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 (0x0x7b9f446284e0) 0
+ vptr=((& QMimeData::_ZTV9QMimeData) + 16)
+QObject (0x0x7b9f426e23c0) 0
+ primary-for QMimeData (0x0x7b9f446284e0)
+
+Class QMimeType
+ size=8 align=8
+ base size=8 base align=8
+QMimeType (0x0x7b9f426e25a0) 0
+
+Class QMimeDatabase
+ size=8 align=8
+ base size=8 base align=8
+QMimeDatabase (0x0x7b9f42710540) 0
+
+Class QObjectCleanupHandler::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QObjectCleanupHandler::QPrivateSignal (0x0x7b9f42710600) 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 (0x0x7b9f43d260d0) 0
+ vptr=((& QObjectCleanupHandler::_ZTV21QObjectCleanupHandler) + 16)
+QObject (0x0x7b9f427105a0) 0
+ primary-for QObjectCleanupHandler (0x0x7b9f43d260d0)
+
+Class QOperatingSystemVersionBase
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersionBase (0x0x7b9f427106c0) 0
+
+Class QOperatingSystemVersionUnexported
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersionUnexported (0x0x7b9f43d26138) 0
+QOperatingSystemVersionBase (0x0x7b9f4232f000) 0
+
+Class QOperatingSystemVersion
+ size=16 align=4
+ base size=16 base align=4
+QOperatingSystemVersion (0x0x7b9f43d26dd0) 0
+QOperatingSystemVersionUnexported (0x0x7b9f43d26e38) 0
+QOperatingSystemVersionBase (0x0x7b9f4232f240) 0
+
+Class QParallelAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QParallelAnimationGroup::QPrivateSignal (0x0x7b9f4234e3c0) 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 (0x0x7b9f42fdca28) 0
+ vptr=((& QParallelAnimationGroup::_ZTV23QParallelAnimationGroup) + 16)
+QAnimationGroup (0x0x7b9f42fdca90) 0
+ primary-for QParallelAnimationGroup (0x0x7b9f42fdca28)
+QAbstractAnimation (0x0x7b9f42fdcaf8) 0
+ primary-for QAnimationGroup (0x0x7b9f42fdca90)
+QObject (0x0x7b9f4234e360) 0
+ primary-for QAbstractAnimation (0x0x7b9f42fdcaf8)
+
+Class QPauseAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPauseAnimation::QPrivateSignal (0x0x7b9f4234e5a0) 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 (0x0x7b9f42fdcb60) 0
+ vptr=((& QPauseAnimation::_ZTV15QPauseAnimation) + 16)
+QAbstractAnimation (0x0x7b9f42fdcc30) 0
+ primary-for QPauseAnimation (0x0x7b9f42fdcb60)
+QObject (0x0x7b9f4234e540) 0
+ primary-for QAbstractAnimation (0x0x7b9f42fdcc30)
+
+Class QPermission
+ size=40 align=8
+ base size=40 base align=8
+QPermission (0x0x7b9f4234e720) 0
+
+Class QLocationPermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QLocationPermission::ShortData (0x0x7b9f4234e9c0) 0
+
+Class QLocationPermission::U
+ size=8 align=8
+ base size=8 base align=8
+QLocationPermission::U (0x0x7b9f4234ea20) 0
+
+Class QLocationPermission
+ size=8 align=8
+ base size=8 base align=8
+QLocationPermission (0x0x7b9f4234e960) 0
+
+Class QCalendarPermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QCalendarPermission::ShortData (0x0x7b9f42397060) 0
+
+Class QCalendarPermission::U
+ size=8 align=8
+ base size=8 base align=8
+QCalendarPermission::U (0x0x7b9f423970c0) 0
+
+Class QCalendarPermission
+ size=8 align=8
+ base size=8 base align=8
+QCalendarPermission (0x0x7b9f42397000) 0
+
+Class QContactsPermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QContactsPermission::ShortData (0x0x7b9f423c55a0) 0
+
+Class QContactsPermission::U
+ size=8 align=8
+ base size=8 base align=8
+QContactsPermission::U (0x0x7b9f423c5600) 0
+
+Class QContactsPermission
+ size=8 align=8
+ base size=8 base align=8
+QContactsPermission (0x0x7b9f423c5540) 0
+
+Class QBluetoothPermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QBluetoothPermission::ShortData (0x0x7b9f423f7ae0) 0
+
+Class QBluetoothPermission::U
+ size=8 align=8
+ base size=8 base align=8
+QBluetoothPermission::U (0x0x7b9f423f7b40) 0
+
+Class QBluetoothPermission
+ size=8 align=8
+ base size=8 base align=8
+QBluetoothPermission (0x0x7b9f423f7a80) 0
+
+Class QCameraPermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QCameraPermission::ShortData (0x0x7b9f42442420) 0
+
+Class QCameraPermission::U
+ size=8 align=8
+ base size=8 base align=8
+QCameraPermission::U (0x0x7b9f42442480) 0
+
+Class QCameraPermission
+ size=8 align=8
+ base size=8 base align=8
+QCameraPermission (0x0x7b9f424423c0) 0
+
+Class QMicrophonePermission::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QMicrophonePermission::ShortData (0x0x7b9f42470d80) 0
+
+Class QMicrophonePermission::U
+ size=8 align=8
+ base size=8 base align=8
+QMicrophonePermission::U (0x0x7b9f42470de0) 0
+
+Class QMicrophonePermission
+ size=8 align=8
+ base size=8 base align=8
+QMicrophonePermission (0x0x7b9f42470d20) 0
+
+Class QPluginMetaData::Header
+ size=4 align=1
+ base size=4 base align=1
+QPluginMetaData::Header (0x0x7b9f424c9cc0) 0
+
+Class QPluginMetaData::MagicHeader
+ size=16 align=1
+ base size=16 base align=1
+QPluginMetaData::MagicHeader (0x0x7b9f424c9d20) 0
+
+Class QPluginMetaData::ElfNoteHeader
+ size=32 align=8
+ base size=28 base align=8
+QPluginMetaData::ElfNoteHeader (0x0x7b9f424c9d80) 0
+
+Class QPluginMetaData
+ size=16 align=8
+ base size=16 base align=8
+QPluginMetaData (0x0x7b9f424c9c60) 0
+
+Class QStaticPlugin
+ size=24 align=8
+ base size=24 base align=8
+QStaticPlugin (0x0x7b9f424e13c0) 0
+
+Class QPluginLoader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPluginLoader::QPrivateSignal (0x0x7b9f4250a6c0) 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 (0x0x7b9f42509820) 0
+ vptr=((& QPluginLoader::_ZTV13QPluginLoader) + 16)
+QObject (0x0x7b9f4250a660) 0
+ primary-for QPluginLoader (0x0x7b9f42509820)
+
+Class QProcessEnvironment
+ size=8 align=8
+ base size=8 base align=8
+QProcessEnvironment (0x0x7b9f4250a780) 0
+
+Class QProcess::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProcess::QPrivateSignal (0x0x7b9f42153660) 0 empty
+
+Class QProcess::UnixProcessParameters
+ size=32 align=4
+ base size=32 base align=4
+QProcess::UnixProcessParameters (0x0x7b9f421536c0) 0
+
+Class QProcess::Use_setChildProcessModifier_Instead
+ size=1 align=1
+ base size=0 base align=1
+QProcess::Use_setChildProcessModifier_Instead (0x0x7b9f42153900) 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 (0x0x7b9f4215a4e0) 0
+ vptr=((& QProcess::_ZTV8QProcess) + 16)
+QIODevice (0x0x7b9f42113a80) 0
+ primary-for QProcess (0x0x7b9f4215a4e0)
+QObject (0x0x7b9f421535a0) 0
+ primary-for QIODevice (0x0x7b9f42113a80)
+QIODeviceBase (0x0x7b9f42153600) 0 empty
+
+Class QtPrivate::RefCounted
+ size=4 align=4
+ base size=4 base align=4
+QtPrivate::RefCounted (0x0x7b9f421951e0) 0
+
+Class QPropertyBindingPrivatePtr
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingPrivatePtr (0x0x7b9f42195300) 0
+
+Class QUntypedPropertyData
+ size=1 align=1
+ base size=0 base align=1
+QUntypedPropertyData (0x0x7b9f421b14e0) 0 empty
+
+Class QPropertyProxyBindingData
+ size=24 align=8
+ base size=24 base align=8
+QPropertyProxyBindingData (0x0x7b9f421b1540) 0
+
+Class QtPrivate::MSVCWorkAround
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::MSVCWorkAround (0x0x7b9f421b15a0) 0 empty
+
+Class QtPrivate::BindingFunctionVTable
+ size=32 align=8
+ base size=32 base align=8
+QtPrivate::BindingFunctionVTable (0x0x7b9f421b1600) 0
+
+Class QtPrivate::QPropertyBindingFunction
+ size=16 align=8
+ base size=16 base align=8
+QtPrivate::QPropertyBindingFunction (0x0x7b9f421b1b40) 0
+
+Class QtPrivate::QPropertyBindingData
+ size=8 align=8
+ base size=8 base align=8
+QtPrivate::QPropertyBindingData (0x0x7b9f421b1ba0) 0
+
+Class std::experimental::fundamentals_v2::source_location
+ size=24 align=8
+ base size=24 base align=8
+std::experimental::fundamentals_v2::source_location (0x0x7b9f421ca360) 0
+
+Class QScopedPropertyUpdateGroup
+ size=1 align=1
+ base size=0 base align=1
+QScopedPropertyUpdateGroup (0x0x7b9f421ca7e0) 0 empty
+
+Class QPropertyBindingSourceLocation
+ size=24 align=8
+ base size=24 base align=8
+QPropertyBindingSourceLocation (0x0x7b9f421cade0) 0
+
+Class QPropertyBindingError
+ size=8 align=8
+ base size=8 base align=8
+QPropertyBindingError (0x0x7b9f421e5180) 0
+
+Class QUntypedPropertyBinding
+ size=8 align=8
+ base size=8 base align=8
+QUntypedPropertyBinding (0x0x7b9f421e52a0) 0
+
+Class QPropertyObserverBase
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserverBase (0x0x7b9f421e54e0) 0
+
+Class QPropertyObserver
+ size=24 align=8
+ base size=24 base align=8
+QPropertyObserver (0x0x7b9f4215a7b8) 0
+QPropertyObserverBase (0x0x7b9f421e5660) 0
+
+Class QPropertyNotifier
+ size=56 align=8
+ base size=56 base align=8
+QPropertyNotifier (0x0x7b9f4215a958) 0
+QPropertyObserver (0x0x7b9f4215a9c0) 0
+QPropertyObserverBase (0x0x7b9f421e5b40) 0
+
+Class QtPrivate::QBindableInterface
+ size=56 align=8
+ base size=56 base align=8
+QtPrivate::QBindableInterface (0x0x7b9f4223da20) 0
+
+Class QUntypedBindable
+ size=16 align=8
+ base size=16 base align=8
+QUntypedBindable (0x0x7b9f4224fea0) 0
+
+Class QVariantAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVariantAnimation::QPrivateSignal (0x0x7b9f41f2eba0) 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 (0x0x7b9f41f13340) 0
+ vptr=((& QVariantAnimation::_ZTV17QVariantAnimation) + 16)
+QAbstractAnimation (0x0x7b9f41f133a8) 0
+ primary-for QVariantAnimation (0x0x7b9f41f13340)
+QObject (0x0x7b9f41f2eb40) 0
+ primary-for QAbstractAnimation (0x0x7b9f41f133a8)
+
+Class QPropertyAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPropertyAnimation::QPrivateSignal (0x0x7b9f41f2ede0) 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 (0x0x7b9f41f13410) 0
+ vptr=((& QPropertyAnimation::_ZTV18QPropertyAnimation) + 16)
+QVariantAnimation (0x0x7b9f41f13478) 0
+ primary-for QPropertyAnimation (0x0x7b9f41f13410)
+QAbstractAnimation (0x0x7b9f41f134e0) 0
+ primary-for QVariantAnimation (0x0x7b9f41f13478)
+QObject (0x0x7b9f41f2ed80) 0
+ primary-for QAbstractAnimation (0x0x7b9f41f134e0)
+
+Class std::random_device
+ size=5000 align=8
+ base size=5000 base align=8
+std::random_device (0x0x7b9f41fa4600) 0
+
+Class std::bernoulli_distribution::param_type
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution::param_type (0x0x7b9f42029960) 0
+
+Class std::bernoulli_distribution
+ size=8 align=8
+ base size=8 base align=8
+std::bernoulli_distribution (0x0x7b9f42029900) 0
+
+Class std::seed_seq
+ size=24 align=8
+ base size=24 base align=8
+std::seed_seq (0x0x7b9f41d510c0) 0
+
+Class QRandomGenerator::InitialRandomData
+ size=16 align=8
+ base size=16 base align=8
+QRandomGenerator::InitialRandomData (0x0x7b9f41e39780) 0
+
+Class QRandomGenerator::Storage
+ size=2504 align=8
+ base size=2504 base align=8
+QRandomGenerator::Storage (0x0x7b9f41e397e0) 0
+
+Class QRandomGenerator
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator (0x0x7b9f41e39720) 0
+
+Class QRandomGenerator64
+ size=2512 align=8
+ base size=2512 base align=8
+QRandomGenerator64 (0x0x7b9f41e6d9c0) 0
+QRandomGenerator (0x0x7b9f41e85cc0) 0
+
+Class QReadWriteLock
+ size=8 align=8
+ base size=8 base align=8
+QReadWriteLock (0x0x7b9f41e99900) 0
+
+Class QReadLocker
+ size=8 align=8
+ base size=8 base align=8
+QReadLocker (0x0x7b9f41ed8180) 0
+
+Class QWriteLocker
+ size=8 align=8
+ base size=8 base align=8
+QWriteLocker (0x0x7b9f41ed8600) 0
+
+Class QSize
+ size=8 align=4
+ base size=8 base align=4
+QSize (0x0x7b9f41ed8a80) 0
+
+Class QSizeF
+ size=16 align=8
+ base size=16 base align=8
+QSizeF (0x0x7b9f41b20a20) 0
+
+Class QRect
+ size=16 align=4
+ base size=16 base align=4
+QRect (0x0x7b9f41b6aa20) 0
+
+Class QRectF
+ size=32 align=8
+ base size=32 base align=8
+QRectF (0x0x7b9f41bcbd20) 0
+
+Class QResource
+ size=8 align=8
+ base size=8 base align=8
+QResource (0x0x7b9f41c34de0) 0
+
+Class QSaveFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSaveFile::QPrivateSignal (0x0x7b9f41c59120) 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 (0x0x7b9f41c1d6e8) 0
+ vptr=((& QSaveFile::_ZTV9QSaveFile) + 16)
+QFileDevice (0x0x7b9f41c1d750) 0
+ primary-for QSaveFile (0x0x7b9f41c1d6e8)
+QIODevice (0x0x7b9f41c3acb0) 0
+ primary-for QFileDevice (0x0x7b9f41c1d750)
+QObject (0x0x7b9f41c59060) 0
+ primary-for QIODevice (0x0x7b9f41c3acb0)
+QIODeviceBase (0x0x7b9f41c590c0) 0 empty
+
+Class QSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSemaphore (0x0x7b9f41c59480) 0
+
+Class QSemaphoreReleaser
+ size=16 align=8
+ base size=12 base align=8
+QSemaphoreReleaser (0x0x7b9f41c598a0) 0
+
+Class QSequentialAnimationGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSequentialAnimationGroup::QPrivateSignal (0x0x7b9f41ca3180) 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 (0x0x7b9f41c1d7b8) 0
+ vptr=((& QSequentialAnimationGroup::_ZTV25QSequentialAnimationGroup) + 16)
+QAnimationGroup (0x0x7b9f41c1d820) 0
+ primary-for QSequentialAnimationGroup (0x0x7b9f41c1d7b8)
+QAbstractAnimation (0x0x7b9f41c1d888) 0
+ primary-for QAnimationGroup (0x0x7b9f41c1d820)
+QObject (0x0x7b9f41ca3120) 0
+ primary-for QAbstractAnimation (0x0x7b9f41c1d888)
+
+Class QSequentialIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialIterator (0x0x7b9f41c1d9c0) 0
+QIterator<QMetaSequence> (0x0x7b9f41c1da28) 0
+QBaseIterator<QMetaSequence> (0x0x7b9f41ca34e0) 0
+
+Class QSequentialConstIterator
+ size=16 align=8
+ base size=16 base align=8
+QSequentialConstIterator (0x0x7b9f41c1daf8) 0
+QConstIterator<QMetaSequence> (0x0x7b9f41c1db60) 0
+QBaseIterator<QMetaSequence> (0x0x7b9f41ca3a80) 0
+
+Class QSequentialIterable
+ size=24 align=8
+ base size=24 base align=8
+QSequentialIterable (0x0x7b9f41c1dbc8) 0
+QIterable<QMetaSequence> (0x0x7b9f41ca3420) 0
+
+Class QSettings::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSettings::QPrivateSignal (0x0x7b9f419868a0) 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 (0x0x7b9f4198b3a8) 0
+ vptr=((& QSettings::_ZTV9QSettings) + 16)
+QObject (0x0x7b9f41986840) 0
+ primary-for QSettings (0x0x7b9f4198b3a8)
+
+Class QNativeIpcKey::TypeAndFlags
+ size=8 align=4
+ base size=8 base align=4
+QNativeIpcKey::TypeAndFlags (0x0x7b9f41986cc0) 0
+
+Class QNativeIpcKey
+ size=40 align=8
+ base size=40 base align=8
+QNativeIpcKey (0x0x7b9f41986c60) 0
+
+Class QSharedMemory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSharedMemory::QPrivateSignal (0x0x7b9f41a27cc0) 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 (0x0x7b9f41a39068) 0
+ vptr=((& QSharedMemory::_ZTV13QSharedMemory) + 16)
+QObject (0x0x7b9f41a27c60) 0
+ primary-for QSharedMemory (0x0x7b9f41a39068)
+
+Class QSignalMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSignalMapper::QPrivateSignal (0x0x7b9f41a4d0c0) 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 (0x0x7b9f41a390d0) 0
+ vptr=((& QSignalMapper::_ZTV13QSignalMapper) + 16)
+QObject (0x0x7b9f41a4d060) 0
+ primary-for QSignalMapper (0x0x7b9f41a390d0)
+
+Class __uintr_frame
+ size=24 align=8
+ base size=24 base align=8
+__uintr_frame (0x0x7b9f41aab3c0) 0
+
+Class QSocketNotifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSocketNotifier::QPrivateSignal (0x0x7b9f40f11ae0) 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 (0x0x7b9f40ecb820) 0
+ vptr=((& QSocketNotifier::_ZTV15QSocketNotifier) + 16)
+QObject (0x0x7b9f40f11a80) 0
+ primary-for QSocketNotifier (0x0x7b9f40ecb820)
+
+Class QSocketDescriptor
+ size=4 align=4
+ base size=4 base align=4
+QSocketDescriptor (0x0x7b9f40f11c60) 0
+
+Class QSortFilterProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSortFilterProxyModel::QPrivateSignal (0x0x7b9f40f72b40) 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 (0x0x7b9f40f76618) 0
+ vptr=((& QSortFilterProxyModel::_ZTV21QSortFilterProxyModel) + 16)
+QAbstractProxyModel (0x0x7b9f40f76680) 0
+ primary-for QSortFilterProxyModel (0x0x7b9f40f76618)
+QAbstractItemModel (0x0x7b9f40f766e8) 0
+ primary-for QAbstractProxyModel (0x0x7b9f40f76680)
+QObject (0x0x7b9f40f72ae0) 0
+ primary-for QAbstractItemModel (0x0x7b9f40f766e8)
+
+Class QStandardPaths
+ size=1 align=1
+ base size=0 base align=1
+QStandardPaths (0x0x7b9f40fd56c0) 0 empty
+
+Class QStorageInfo
+ size=8 align=8
+ base size=8 base align=8
+QStorageInfo (0x0x7b9f40ffc720) 0
+
+Class QStringListModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStringListModel::QPrivateSignal (0x0x7b9f40c59c00) 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 (0x0x7b9f40c74000) 0
+ vptr=((& QStringListModel::_ZTV16QStringListModel) + 16)
+QAbstractListModel (0x0x7b9f40c74068) 0
+ primary-for QStringListModel (0x0x7b9f40c74000)
+QAbstractItemModel (0x0x7b9f40c740d0) 0
+ primary-for QAbstractListModel (0x0x7b9f40c74068)
+QObject (0x0x7b9f40c59ba0) 0
+ primary-for QAbstractItemModel (0x0x7b9f40c740d0)
+
+Class QSystemSemaphore
+ size=8 align=8
+ base size=8 base align=8
+QSystemSemaphore (0x0x7b9f40c59cc0) 0
+
+Class QTemporaryDir
+ size=8 align=8
+ base size=8 base align=8
+QTemporaryDir (0x0x7b9f40c59f00) 0
+
+Class QTemporaryFile::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTemporaryFile::QPrivateSignal (0x0x7b9f40c99360) 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 (0x0x7b9f40c74138) 0
+ vptr=((& QTemporaryFile::_ZTV14QTemporaryFile) + 16)
+QFile (0x0x7b9f40c741a0) 0
+ primary-for QTemporaryFile (0x0x7b9f40c74138)
+QFileDevice (0x0x7b9f40c74208) 0
+ primary-for QFile (0x0x7b9f40c741a0)
+QIODevice (0x0x7b9f40c6e9a0) 0
+ primary-for QFileDevice (0x0x7b9f40c74208)
+QObject (0x0x7b9f40c992a0) 0
+ primary-for QIODevice (0x0x7b9f40c6e9a0)
+QIODeviceBase (0x0x7b9f40c99300) 0 empty
+
+Class QTextBoundaryFinder
+ size=72 align=8
+ base size=72 base align=8
+QTextBoundaryFinder (0x0x7b9f40c99900) 0
+
+Class QThreadStorageData
+ size=4 align=4
+ base size=4 base align=4
+QThreadStorageData (0x0x7b9f40ccf060) 0
+
+Class QTimeLine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeLine::QPrivateSignal (0x0x7b9f40ccf720) 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 (0x0x7b9f40c74410) 0
+ vptr=((& QTimeLine::_ZTV9QTimeLine) + 16)
+QObject (0x0x7b9f40ccf6c0) 0
+ primary-for QTimeLine (0x0x7b9f40c74410)
+
+Class QTimer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimer::QPrivateSignal (0x0x7b9f40ccf900) 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 (0x0x7b9f40c74478) 0
+ vptr=((& QTimer::_ZTV6QTimer) + 16)
+QObject (0x0x7b9f40ccf8a0) 0
+ primary-for QTimer (0x0x7b9f40c74478)
+
+Class QTranslator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTranslator::QPrivateSignal (0x0x7b9f40d06960) 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 (0x0x7b9f40c74888) 0
+ vptr=((& QTranslator::_ZTV11QTranslator) + 16)
+QObject (0x0x7b9f40d06900) 0
+ primary-for QTranslator (0x0x7b9f40c74888)
+
+Class QTransposeProxyModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTransposeProxyModel::QPrivateSignal (0x0x7b9f40d06b40) 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 (0x0x7b9f40c748f0) 0
+ vptr=((& QTransposeProxyModel::_ZTV20QTransposeProxyModel) + 16)
+QAbstractProxyModel (0x0x7b9f40c74958) 0
+ primary-for QTransposeProxyModel (0x0x7b9f40c748f0)
+QAbstractItemModel (0x0x7b9f40c749c0) 0
+ primary-for QAbstractProxyModel (0x0x7b9f40c74958)
+QObject (0x0x7b9f40d06ae0) 0
+ primary-for QAbstractItemModel (0x0x7b9f40c749c0)
+
+Class QUrlQuery
+ size=8 align=8
+ base size=8 base align=8
+QUrlQuery (0x0x7b9f40d06cc0) 0
+
+Class QWaitCondition
+ size=8 align=8
+ base size=8 base align=8
+QWaitCondition (0x0x7b9f40d937e0) 0
+
+Class QtPrivate::QXmlString
+ size=24 align=8
+ base size=24 base align=8
+QtPrivate::QXmlString (0x0x7b9f40d93900) 0
+
+Class QXmlStreamAttribute
+ size=104 align=8
+ base size=97 base align=8
+QXmlStreamAttribute (0x0x7b9f40dc9c00) 0
+
+Class QXmlStreamAttributes
+ size=24 align=8
+ base size=24 base align=8
+QXmlStreamAttributes (0x0x7b9f40a191a0) 0
+QList<QXmlStreamAttribute> (0x0x7b9f40a19208) 0
+QListSpecialMethods<QXmlStreamAttribute> (0x0x7b9f40a19270) 0 empty
+QListSpecialMethodsBase<QXmlStreamAttribute> (0x0x7b9f40a30120) 0 empty
+
+Class QXmlStreamNamespaceDeclaration
+ size=48 align=8
+ base size=48 base align=8
+QXmlStreamNamespaceDeclaration (0x0x7b9f40a30960) 0
+
+Class QXmlStreamNotationDeclaration
+ size=72 align=8
+ base size=72 base align=8
+QXmlStreamNotationDeclaration (0x0x7b9f40a87720) 0
+
+Class QXmlStreamEntityDeclaration
+ size=120 align=8
+ base size=120 base align=8
+QXmlStreamEntityDeclaration (0x0x7b9f40abe4e0) 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 (0x0x7b9f40aff540) 0 nearly-empty
+ vptr=((& QXmlStreamEntityResolver::_ZTV24QXmlStreamEntityResolver) + 16)
+
+Class QXmlStreamReader::PrivateConstructorTag
+ size=1 align=1
+ base size=0 base align=1
+QXmlStreamReader::PrivateConstructorTag (0x0x7b9f40aff600) 0 empty
+
+Class QXmlStreamReader
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamReader (0x0x7b9f40aff5a0) 0
+
+Class QXmlStreamWriter
+ size=8 align=8
+ base size=8 base align=8
+QXmlStreamWriter (0x0x7b9f40affc60) 0
+
+Class QtConcurrent::TaskStartParameters
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::TaskStartParameters (0x0x7b9f40b55660) 0
+
+Class QtConcurrent::Median
+ size=72 align=8
+ base size=70 base align=8
+QtConcurrent::Median (0x0x7b9f40b8a900) 0
+
+Class QtConcurrent::ThreadEngineBarrier
+ size=16 align=8
+ base size=16 base align=8
+QtConcurrent::ThreadEngineBarrier (0x0x7b9f40b8ad20) 0
+
+Vtable for QtConcurrent::ThreadEngineBase
+QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN12QtConcurrent16ThreadEngineBaseE)
+16 (int (*)(...))QtConcurrent::ThreadEngineBase::run
+24 0
+32 0
+40 (int (*)(...))QtConcurrent::ThreadEngineBase::start
+48 (int (*)(...))QtConcurrent::ThreadEngineBase::finish
+56 (int (*)(...))QtConcurrent::ThreadEngineBase::threadFunction
+64 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldStartThread
+72 (int (*)(...))QtConcurrent::ThreadEngineBase::shouldThrottleThread
+80 (int (*)(...))__cxa_pure_virtual
+
+Class QtConcurrent::ThreadEngineBase
+ size=64 align=8
+ base size=64 base align=8
+QtConcurrent::ThreadEngineBase (0x0x7b9f40b048f0) 0
+ vptr=((& QtConcurrent::ThreadEngineBase::_ZTVN12QtConcurrent16ThreadEngineBaseE) + 16)
+QRunnable (0x0x7b9f40b8ade0) 0
+ primary-for QtConcurrent::ThreadEngineBase (0x0x7b9f40b048f0)
+
+Class QtConcurrent::BlockSizeManager
+ size=176 align=8
+ base size=172 base align=8
+QtConcurrent::BlockSizeManager (0x0x7b9f40bb8900) 0
+
+Class QtPrivate::PushBackWrapper
+ size=1 align=1
+ base size=0 base align=1
+QtPrivate::PushBackWrapper (0x0x7b9f4081a6c0) 0 empty
+
+Class QDBusAbstractAdaptor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractAdaptor::QPrivateSignal (0x0x7b9f4090ad20) 0 empty
+
+Vtable for QDBusAbstractAdaptor
+QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QDBusAbstractAdaptor)
+16 (int (*)(...))QDBusAbstractAdaptor::metaObject
+24 (int (*)(...))QDBusAbstractAdaptor::qt_metacast
+32 (int (*)(...))QDBusAbstractAdaptor::qt_metacall
+40 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+48 (int (*)(...))QDBusAbstractAdaptor::~QDBusAbstractAdaptor
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractAdaptor
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractAdaptor (0x0x7b9f408b33a8) 0
+ vptr=((& QDBusAbstractAdaptor::_ZTV20QDBusAbstractAdaptor) + 16)
+QObject (0x0x7b9f4090acc0) 0
+ primary-for QDBusAbstractAdaptor (0x0x7b9f408b33a8)
+
+Class QDBusError
+ size=64 align=8
+ base size=64 base align=8
+QDBusError (0x0x7b9f4090aea0) 0
+
+Class QDBusMessage
+ size=8 align=8
+ base size=8 base align=8
+QDBusMessage (0x0x7b9f4098fa80) 0
+
+Class QDBusObjectPath
+ size=24 align=8
+ base size=24 base align=8
+QDBusObjectPath (0x0x7b9f409e9a20) 0
+
+Class QDBusSignature
+ size=24 align=8
+ base size=24 base align=8
+QDBusSignature (0x0x7b9f40635720) 0
+
+Class QDBusVariant
+ size=32 align=8
+ base size=32 base align=8
+QDBusVariant (0x0x7b9f4068c4e0) 0
+
+Class QDBusConnection
+ size=8 align=8
+ base size=8 base align=8
+QDBusConnection (0x0x7b9f406faae0) 0
+
+Class QDBusPendingCall
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingCall (0x0x7b9f407d8000) 0
+
+Class QDBusPendingCallWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusPendingCallWatcher::QPrivateSignal (0x0x7b9f4041d420) 0 empty
+
+Vtable for QDBusPendingCallWatcher
+QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QDBusPendingCallWatcher)
+16 (int (*)(...))QDBusPendingCallWatcher::metaObject
+24 (int (*)(...))QDBusPendingCallWatcher::qt_metacast
+32 (int (*)(...))QDBusPendingCallWatcher::qt_metacall
+40 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+48 (int (*)(...))QDBusPendingCallWatcher::~QDBusPendingCallWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusPendingCallWatcher
+ size=24 align=8
+ base size=24 base align=8
+QDBusPendingCallWatcher (0x0x7b9f407d6a10) 0
+ vptr=((& QDBusPendingCallWatcher::_ZTV23QDBusPendingCallWatcher) + 16)
+QObject (0x0x7b9f4041d360) 0
+ primary-for QDBusPendingCallWatcher (0x0x7b9f407d6a10)
+QDBusPendingCall (0x0x7b9f4041d3c0) 16
+
+Vtable for QDBusAbstractInterfaceBase
+QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QDBusAbstractInterfaceBase)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QDBusAbstractInterfaceBase::qt_metacall
+40 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+48 (int (*)(...))QDBusAbstractInterfaceBase::~QDBusAbstractInterfaceBase
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusAbstractInterfaceBase
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterfaceBase (0x0x7b9f40412f08) 0
+ vptr=((& QDBusAbstractInterfaceBase::_ZTV26QDBusAbstractInterfaceBase) + 16)
+QObject (0x0x7b9f4041d4e0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7b9f40412f08)
+
+Class QDBusAbstractInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusAbstractInterface::QPrivateSignal (0x0x7b9f4041d660) 0 empty
+
+Vtable for QDBusAbstractInterface
+QDBusAbstractInterface::_ZTV22QDBusAbstractInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QDBusAbstractInterface)
+16 (int (*)(...))QDBusAbstractInterface::metaObject
+24 (int (*)(...))QDBusAbstractInterface::qt_metacast
+32 (int (*)(...))QDBusAbstractInterface::qt_metacall
+40 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+48 (int (*)(...))QDBusAbstractInterface::~QDBusAbstractInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusAbstractInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusAbstractInterface (0x0x7b9f40412f70) 0
+ vptr=((& QDBusAbstractInterface::_ZTV22QDBusAbstractInterface) + 16)
+QDBusAbstractInterfaceBase (0x0x7b9f40432000) 0
+ primary-for QDBusAbstractInterface (0x0x7b9f40412f70)
+QObject (0x0x7b9f4041d600) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7b9f40432000)
+
+Class QDBusArgument
+ size=8 align=8
+ base size=8 base align=8
+QDBusArgument (0x0x7b9f4041da20) 0
+
+Class QDBusPendingReplyBase
+ size=8 align=8
+ base size=8 base align=8
+QDBusPendingReplyBase (0x0x7b9f405fe8f0) 0
+QDBusPendingCall (0x0x7b9f4021ba80) 0
+
+Class QDBusConnectionInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusConnectionInterface::QPrivateSignal (0x0x7b9f4027bb40) 0 empty
+
+Vtable for QDBusConnectionInterface
+QDBusConnectionInterface::_ZTV24QDBusConnectionInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QDBusConnectionInterface)
+16 (int (*)(...))QDBusConnectionInterface::metaObject
+24 (int (*)(...))QDBusConnectionInterface::qt_metacast
+32 (int (*)(...))QDBusConnectionInterface::qt_metacall
+40 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+48 (int (*)(...))QDBusConnectionInterface::~QDBusConnectionInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusConnectionInterface::connectNotify
+104 (int (*)(...))QDBusConnectionInterface::disconnectNotify
+
+Class QDBusConnectionInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusConnectionInterface (0x0x7b9f405feb60) 0
+ vptr=((& QDBusConnectionInterface::_ZTV24QDBusConnectionInterface) + 16)
+QDBusAbstractInterface (0x0x7b9f405febc8) 0
+ primary-for QDBusConnectionInterface (0x0x7b9f405feb60)
+QDBusAbstractInterfaceBase (0x0x7b9f405fec30) 0
+ primary-for QDBusAbstractInterface (0x0x7b9f405febc8)
+QObject (0x0x7b9f4027bae0) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7b9f405fec30)
+
+Class QDBusContext
+ size=8 align=8
+ base size=8 base align=8
+QDBusContext (0x0x7b9f402b2000) 0
+
+Vtable for QDBusInterface
+QDBusInterface::_ZTV14QDBusInterface: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QDBusInterface)
+16 (int (*)(...))QDBusInterface::metaObject
+24 (int (*)(...))QDBusInterface::qt_metacast
+32 (int (*)(...))QDBusInterface::qt_metacall
+40 (int (*)(...))QDBusInterface::~QDBusInterface
+48 (int (*)(...))QDBusInterface::~QDBusInterface
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QDBusAbstractInterface::connectNotify
+104 (int (*)(...))QDBusAbstractInterface::disconnectNotify
+
+Class QDBusInterface
+ size=16 align=8
+ base size=16 base align=8
+QDBusInterface (0x0x7b9f405fec98) 0
+ vptr=((& QDBusInterface::_ZTV14QDBusInterface) + 16)
+QDBusAbstractInterface (0x0x7b9f405fed00) 0
+ primary-for QDBusInterface (0x0x7b9f405fec98)
+QDBusAbstractInterfaceBase (0x0x7b9f405fed68) 0
+ primary-for QDBusAbstractInterface (0x0x7b9f405fed00)
+QObject (0x0x7b9f402b2060) 0
+ primary-for QDBusAbstractInterfaceBase (0x0x7b9f405fed68)
+
+Class QDBusMetaType
+ size=1 align=1
+ base size=0 base align=1
+QDBusMetaType (0x0x7b9f402b2180) 0 empty
+
+Class QDBusServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServer::QPrivateSignal (0x0x7b9f402b2420) 0 empty
+
+Vtable for QDBusServer
+QDBusServer::_ZTV11QDBusServer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QDBusServer)
+16 (int (*)(...))QDBusServer::metaObject
+24 (int (*)(...))QDBusServer::qt_metacast
+32 (int (*)(...))QDBusServer::qt_metacall
+40 (int (*)(...))QDBusServer::~QDBusServer
+48 (int (*)(...))QDBusServer::~QDBusServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServer
+ size=24 align=8
+ base size=24 base align=8
+QDBusServer (0x0x7b9f405fedd0) 0
+ vptr=((& QDBusServer::_ZTV11QDBusServer) + 16)
+QObject (0x0x7b9f402b23c0) 0
+ primary-for QDBusServer (0x0x7b9f405fedd0)
+
+Class QDBusServiceWatcher::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusServiceWatcher::QPrivateSignal (0x0x7b9f402b2540) 0 empty
+
+Vtable for QDBusServiceWatcher
+QDBusServiceWatcher::_ZTV19QDBusServiceWatcher: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDBusServiceWatcher)
+16 (int (*)(...))QDBusServiceWatcher::metaObject
+24 (int (*)(...))QDBusServiceWatcher::qt_metacast
+32 (int (*)(...))QDBusServiceWatcher::qt_metacall
+40 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+48 (int (*)(...))QDBusServiceWatcher::~QDBusServiceWatcher
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDBusServiceWatcher
+ size=16 align=8
+ base size=16 base align=8
+QDBusServiceWatcher (0x0x7b9f405fee38) 0
+ vptr=((& QDBusServiceWatcher::_ZTV19QDBusServiceWatcher) + 16)
+QObject (0x0x7b9f402b24e0) 0
+ primary-for QDBusServiceWatcher (0x0x7b9f405fee38)
+
+Class QDBusUnixFileDescriptor
+ size=8 align=8
+ base size=8 base align=8
+QDBusUnixFileDescriptor (0x0x7b9f402b2c00) 0
+
+Class QDBusVirtualObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDBusVirtualObject::QPrivateSignal (0x0x7b9f40361cc0) 0 empty
+
+Vtable for QDBusVirtualObject
+QDBusVirtualObject::_ZTV18QDBusVirtualObject: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QDBusVirtualObject)
+16 (int (*)(...))QDBusVirtualObject::metaObject
+24 (int (*)(...))QDBusVirtualObject::qt_metacast
+32 (int (*)(...))QDBusVirtualObject::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 QDBusVirtualObject
+ size=16 align=8
+ base size=16 base align=8
+QDBusVirtualObject (0x0x7b9f4037f0d0) 0
+ vptr=((& QDBusVirtualObject::_ZTV18QDBusVirtualObject) + 16)
+QObject (0x0x7b9f40361c60) 0
+ primary-for QDBusVirtualObject (0x0x7b9f4037f0d0)
+
+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 (0x0x7b9f40361d80) 0
+ vptr=((& QPaintDevice::_ZTV12QPaintDevice) + 16)
+
+Class QRgba64
+ size=8 align=8
+ base size=8 base align=8
+QRgba64 (0x0x7b9f40397840) 0
+
+Class QColor::CT
+ size=10 align=2
+ base size=10 base align=2
+QColor::CT (0x0x7b9f40030ea0) 0
+
+Class QColor
+ size=16 align=4
+ base size=14 base align=4
+QColor (0x0x7b9f40030e40) 0
+
+Class QPixelFormat
+ size=8 align=8
+ base size=8 base align=8
+QPixelFormat (0x0x7b9f400cb4e0) 0
+
+Class QPolygon
+ size=24 align=8
+ base size=24 base align=8
+QPolygon (0x0x7b9f40187c30) 0
+QList<QPoint> (0x0x7b9f40187c98) 0
+QListSpecialMethods<QPoint> (0x0x7b9f40187d00) 0 empty
+QListSpecialMethodsBase<QPoint> (0x0x7b9f401b1660) 0 empty
+
+Class QPolygonF
+ size=24 align=8
+ base size=24 base align=8
+QPolygonF (0x0x7b9f3fe705b0) 0
+QList<QPointF> (0x0x7b9f3fe70618) 0
+QListSpecialMethods<QPointF> (0x0x7b9f3fe70680) 0 empty
+QListSpecialMethodsBase<QPointF> (0x0x7b9f3fe7d360) 0 empty
+
+Class QRegion::QRegionData
+ size=16 align=8
+ base size=16 base align=8
+QRegion::QRegionData (0x0x7b9f3ff24d20) 0
+
+Class QRegion
+ size=8 align=8
+ base size=8 base align=8
+QRegion (0x0x7b9f3ff24cc0) 0
+
+Class QTransform::Affine
+ size=8 align=8
+ base size=8 base align=8
+QTransform::Affine (0x0x7b9f3ffaa3c0) 0
+
+Class QTransform
+ size=80 align=8
+ base size=74 base align=8
+QTransform (0x0x7b9f3ffaa360) 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 (0x0x7b9f40002f08) 0
+ vptr=((& QImage::_ZTV6QImage) + 16)
+QPaintDevice (0x0x7b9f3fc29540) 0
+ primary-for QImage (0x0x7b9f40002f08)
+
+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 (0x0x7b9f3fcc48f0) 0
+ vptr=((& QPixmap::_ZTV7QPixmap) + 16)
+QPaintDevice (0x0x7b9f3fcb7d80) 0
+ primary-for QPixmap (0x0x7b9f3fcc48f0)
+
+Class QIcon
+ size=8 align=8
+ base size=8 base align=8
+QIcon (0x0x7b9f3fd54180) 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 (0x0x7b9f3fdad480) 0
+ vptr=((& QAbstractFileIconProvider::_ZTV25QAbstractFileIconProvider) + 16)
+
+Class QVector2D
+ size=8 align=4
+ base size=8 base align=4
+QVector2D (0x0x7b9f3fdadae0) 0
+
+Class QVector3D
+ size=12 align=4
+ base size=12 base align=4
+QVector3D (0x0x7b9f3fa49e40) 0
+
+Class QVector4D
+ size=16 align=4
+ base size=16 base align=4
+QVector4D (0x0x7b9f3fac13c0) 0
+
+Class QScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScreen::QPrivateSignal (0x0x7b9f3f82e540) 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 (0x0x7b9f3fb2e2d8) 0
+ vptr=((& QScreen::_ZTV7QScreen) + 16)
+QObject (0x0x7b9f3f82e4e0) 0
+ primary-for QScreen (0x0x7b9f3fb2e2d8)
+
+Class QInputMethod::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputMethod::QPrivateSignal (0x0x7b9f3f82e780) 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 (0x0x7b9f3fb2e340) 0
+ vptr=((& QInputMethod::_ZTV12QInputMethod) + 16)
+QObject (0x0x7b9f3f82e720) 0
+ primary-for QInputMethod (0x0x7b9f3fb2e340)
+
+Class QGuiApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGuiApplication::QPrivateSignal (0x0x7b9f3f82ea20) 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 (0x0x7b9f3fb2e3a8) 0
+ vptr=((& QGuiApplication::_ZTV15QGuiApplication) + 16)
+QCoreApplication (0x0x7b9f3fb2e410) 0
+ primary-for QGuiApplication (0x0x7b9f3fb2e3a8)
+QObject (0x0x7b9f3f82e9c0) 0
+ primary-for QCoreApplication (0x0x7b9f3fb2e410)
+
+Class QNativeInterface::QX11Application::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QX11Application::TypeInfo (0x0x7b9f3f82ed20) 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 (0x0x7b9f3f82ecc0) 0 nearly-empty
+ vptr=((& QNativeInterface::QX11Application::_ZTVN16QNativeInterface15QX11ApplicationE) + 16)
+
+Class QNativeInterface::QWaylandApplication::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QWaylandApplication::TypeInfo (0x0x7b9f3f82ede0) 0 empty
+
+Vtable for QNativeInterface::QWaylandApplication
+QNativeInterface::QWaylandApplication::_ZTVN16QNativeInterface19QWaylandApplicationE: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface19QWaylandApplicationE)
+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 QNativeInterface::QWaylandApplication
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QWaylandApplication (0x0x7b9f3f82ed80) 0 nearly-empty
+ vptr=((& QNativeInterface::QWaylandApplication::_ZTVN16QNativeInterface19QWaylandApplicationE) + 16)
+
+Class QNativeInterface::QWaylandScreen::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QWaylandScreen::TypeInfo (0x0x7b9f3f82ef00) 0 empty
+
+Vtable for QNativeInterface::QWaylandScreen
+QNativeInterface::QWaylandScreen::_ZTVN16QNativeInterface14QWaylandScreenE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface14QWaylandScreenE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QWaylandScreen
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QWaylandScreen (0x0x7b9f3f82eea0) 0 nearly-empty
+ vptr=((& QNativeInterface::QWaylandScreen::_ZTVN16QNativeInterface14QWaylandScreenE) + 16)
+
+Class QInputDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDevice::QPrivateSignal (0x0x7b9f3f897000) 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 (0x0x7b9f3fb2e478) 0
+ vptr=((& QInputDevice::_ZTV12QInputDevice) + 16)
+QObject (0x0x7b9f3f82ef60) 0
+ primary-for QInputDevice (0x0x7b9f3fb2e478)
+
+Class QPointingDeviceUniqueId
+ size=8 align=8
+ base size=8 base align=8
+QPointingDeviceUniqueId (0x0x7b9f3f897c00) 0
+
+Class QPointingDevice::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPointingDevice::QPrivateSignal (0x0x7b9f3f948a20) 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 (0x0x7b9f3f94ec30) 0
+ vptr=((& QPointingDevice::_ZTV15QPointingDevice) + 16)
+QInputDevice (0x0x7b9f3f94ec98) 0
+ primary-for QPointingDevice (0x0x7b9f3f94ec30)
+QObject (0x0x7b9f3f9489c0) 0
+ primary-for QInputDevice (0x0x7b9f3f94ec98)
+
+Class QEventPoint
+ size=8 align=8
+ base size=8 base align=8
+QEventPoint (0x0x7b9f3f9a4240) 0
+
+Class QKeySequence
+ size=8 align=8
+ base size=8 base align=8
+QKeySequence (0x0x7b9f3f627720) 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 (0x0x7b9f3f687d68) 0
+ vptr=((& QInputEvent::_ZTV11QInputEvent) + 16)
+QEvent (0x0x7b9f3f6839c0) 0
+ primary-for QInputEvent (0x0x7b9f3f687d68)
+
+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 (0x0x7b9f3f687dd0) 0
+ vptr=((& QPointerEvent::_ZTV13QPointerEvent) + 16)
+QInputEvent (0x0x7b9f3f687e38) 0
+ primary-for QPointerEvent (0x0x7b9f3f687dd0)
+QEvent (0x0x7b9f3f683c60) 0
+ primary-for QInputEvent (0x0x7b9f3f687e38)
+
+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 (0x0x7b9f3f6cf0d0) 0
+ vptr=((& QSinglePointEvent::_ZTV17QSinglePointEvent) + 16)
+QPointerEvent (0x0x7b9f3f6cf138) 0
+ primary-for QSinglePointEvent (0x0x7b9f3f6cf0d0)
+QInputEvent (0x0x7b9f3f6cf1a0) 0
+ primary-for QPointerEvent (0x0x7b9f3f6cf138)
+QEvent (0x0x7b9f3f71f240) 0
+ primary-for QInputEvent (0x0x7b9f3f6cf1a0)
+
+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 (0x0x7b9f3f6cf208) 0
+ vptr=((& QEnterEvent::_ZTV11QEnterEvent) + 16)
+QSinglePointEvent (0x0x7b9f3f6cf270) 0
+ primary-for QEnterEvent (0x0x7b9f3f6cf208)
+QPointerEvent (0x0x7b9f3f6cf2d8) 0
+ primary-for QSinglePointEvent (0x0x7b9f3f6cf270)
+QInputEvent (0x0x7b9f3f6cf340) 0
+ primary-for QPointerEvent (0x0x7b9f3f6cf2d8)
+QEvent (0x0x7b9f3f71f540) 0
+ primary-for QInputEvent (0x0x7b9f3f6cf340)
+
+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 (0x0x7b9f3f6cf3a8) 0
+ vptr=((& QMouseEvent::_ZTV11QMouseEvent) + 16)
+QSinglePointEvent (0x0x7b9f3f6cf410) 0
+ primary-for QMouseEvent (0x0x7b9f3f6cf3a8)
+QPointerEvent (0x0x7b9f3f6cf478) 0
+ primary-for QSinglePointEvent (0x0x7b9f3f6cf410)
+QInputEvent (0x0x7b9f3f6cf4e0) 0
+ primary-for QPointerEvent (0x0x7b9f3f6cf478)
+QEvent (0x0x7b9f3f71f900) 0
+ primary-for QInputEvent (0x0x7b9f3f6cf4e0)
+
+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 (0x0x7b9f3f6cf548) 0
+ vptr=((& QHoverEvent::_ZTV11QHoverEvent) + 16)
+QSinglePointEvent (0x0x7b9f3f6cf5b0) 0
+ primary-for QHoverEvent (0x0x7b9f3f6cf548)
+QPointerEvent (0x0x7b9f3f6cf618) 0
+ primary-for QSinglePointEvent (0x0x7b9f3f6cf5b0)
+QInputEvent (0x0x7b9f3f6cf680) 0
+ primary-for QPointerEvent (0x0x7b9f3f6cf618)
+QEvent (0x0x7b9f3f71fcc0) 0
+ primary-for QInputEvent (0x0x7b9f3f6cf680)
+
+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 (0x0x7b9f3f6cf6e8) 0
+ vptr=((& QWheelEvent::_ZTV11QWheelEvent) + 16)
+QSinglePointEvent (0x0x7b9f3f6cf750) 0
+ primary-for QWheelEvent (0x0x7b9f3f6cf6e8)
+QPointerEvent (0x0x7b9f3f6cf7b8) 0
+ primary-for QSinglePointEvent (0x0x7b9f3f6cf750)
+QInputEvent (0x0x7b9f3f6cf820) 0
+ primary-for QPointerEvent (0x0x7b9f3f6cf7b8)
+QEvent (0x0x7b9f3f71ff00) 0
+ primary-for QInputEvent (0x0x7b9f3f6cf820)
+
+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 (0x0x7b9f3f6cf888) 0
+ vptr=((& QTabletEvent::_ZTV12QTabletEvent) + 16)
+QSinglePointEvent (0x0x7b9f3f6cf8f0) 0
+ primary-for QTabletEvent (0x0x7b9f3f6cf888)
+QPointerEvent (0x0x7b9f3f6cf958) 0
+ primary-for QSinglePointEvent (0x0x7b9f3f6cf8f0)
+QInputEvent (0x0x7b9f3f6cf9c0) 0
+ primary-for QPointerEvent (0x0x7b9f3f6cf958)
+QEvent (0x0x7b9f3f774240) 0
+ primary-for QInputEvent (0x0x7b9f3f6cf9c0)
+
+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 (0x0x7b9f3f6cfa28) 0
+ vptr=((& QNativeGestureEvent::_ZTV19QNativeGestureEvent) + 16)
+QSinglePointEvent (0x0x7b9f3f6cfa90) 0
+ primary-for QNativeGestureEvent (0x0x7b9f3f6cfa28)
+QPointerEvent (0x0x7b9f3f6cfaf8) 0
+ primary-for QSinglePointEvent (0x0x7b9f3f6cfa90)
+QInputEvent (0x0x7b9f3f6cfb60) 0
+ primary-for QPointerEvent (0x0x7b9f3f6cfaf8)
+QEvent (0x0x7b9f3f774900) 0
+ primary-for QInputEvent (0x0x7b9f3f6cfb60)
+
+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 (0x0x7b9f3f6cfbc8) 0
+ vptr=((& QKeyEvent::_ZTV9QKeyEvent) + 16)
+QInputEvent (0x0x7b9f3f6cfc30) 0
+ primary-for QKeyEvent (0x0x7b9f3f6cfbc8)
+QEvent (0x0x7b9f3f774cc0) 0
+ primary-for QInputEvent (0x0x7b9f3f6cfc30)
+
+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 (0x0x7b9f3f6cfc98) 0
+ vptr=((& QFocusEvent::_ZTV11QFocusEvent) + 16)
+QEvent (0x0x7b9f3f7bd120) 0
+ primary-for QFocusEvent (0x0x7b9f3f6cfc98)
+
+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 (0x0x7b9f3f6cfd00) 0
+ vptr=((& QPaintEvent::_ZTV11QPaintEvent) + 16)
+QEvent (0x0x7b9f3f7bd240) 0
+ primary-for QPaintEvent (0x0x7b9f3f6cfd00)
+
+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 (0x0x7b9f3f6cfd68) 0
+ vptr=((& QMoveEvent::_ZTV10QMoveEvent) + 16)
+QEvent (0x0x7b9f3f7bd360) 0
+ primary-for QMoveEvent (0x0x7b9f3f6cfd68)
+
+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 (0x0x7b9f3f6cfdd0) 0
+ vptr=((& QExposeEvent::_ZTV12QExposeEvent) + 16)
+QEvent (0x0x7b9f3f7bd480) 0
+ primary-for QExposeEvent (0x0x7b9f3f6cfdd0)
+
+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 (0x0x7b9f3f6cfe38) 0
+ vptr=((& QPlatformSurfaceEvent::_ZTV21QPlatformSurfaceEvent) + 16)
+QEvent (0x0x7b9f3f7bd540) 0
+ primary-for QPlatformSurfaceEvent (0x0x7b9f3f6cfe38)
+
+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 (0x0x7b9f3f6cfea0) 0
+ vptr=((& QResizeEvent::_ZTV12QResizeEvent) + 16)
+QEvent (0x0x7b9f3f7bd600) 0
+ primary-for QResizeEvent (0x0x7b9f3f6cfea0)
+
+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 (*)(...))QCloseEvent::clone
+
+Class QCloseEvent
+ size=16 align=8
+ base size=16 base align=8
+QCloseEvent (0x0x7b9f3f6cff08) 0
+ vptr=((& QCloseEvent::_ZTV11QCloseEvent) + 16)
+QEvent (0x0x7b9f3f7bd720) 0
+ primary-for QCloseEvent (0x0x7b9f3f6cff08)
+
+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 (*)(...))QIconDragEvent::clone
+
+Class QIconDragEvent
+ size=16 align=8
+ base size=16 base align=8
+QIconDragEvent (0x0x7b9f3f6cff70) 0
+ vptr=((& QIconDragEvent::_ZTV14QIconDragEvent) + 16)
+QEvent (0x0x7b9f3f7bd780) 0
+ primary-for QIconDragEvent (0x0x7b9f3f6cff70)
+
+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 (*)(...))QShowEvent::clone
+
+Class QShowEvent
+ size=16 align=8
+ base size=16 base align=8
+QShowEvent (0x0x7b9f3f6cf068) 0
+ vptr=((& QShowEvent::_ZTV10QShowEvent) + 16)
+QEvent (0x0x7b9f3f7bd7e0) 0
+ primary-for QShowEvent (0x0x7b9f3f6cf068)
+
+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 (*)(...))QHideEvent::clone
+
+Class QHideEvent
+ size=16 align=8
+ base size=16 base align=8
+QHideEvent (0x0x7b9f3f80a000) 0
+ vptr=((& QHideEvent::_ZTV10QHideEvent) + 16)
+QEvent (0x0x7b9f3f7bd840) 0
+ primary-for QHideEvent (0x0x7b9f3f80a000)
+
+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 (0x0x7b9f3f80a068) 0
+ vptr=((& QContextMenuEvent::_ZTV17QContextMenuEvent) + 16)
+QInputEvent (0x0x7b9f3f80a0d0) 0
+ primary-for QContextMenuEvent (0x0x7b9f3f80a068)
+QEvent (0x0x7b9f3f7bd8a0) 0
+ primary-for QInputEvent (0x0x7b9f3f80a0d0)
+
+Class QInputMethodEvent::Attribute
+ size=48 align=8
+ base size=48 base align=8
+QInputMethodEvent::Attribute (0x0x7b9f3f7bdc00) 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 (0x0x7b9f3f80a138) 0
+ vptr=((& QInputMethodEvent::_ZTV17QInputMethodEvent) + 16)
+QEvent (0x0x7b9f3f7bdba0) 0
+ primary-for QInputMethodEvent (0x0x7b9f3f80a138)
+
+Class QInputMethodQueryEvent::QueryPair
+ size=40 align=8
+ base size=40 base align=8
+QInputMethodQueryEvent::QueryPair (0x0x7b9f3f4e0420) 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 (0x0x7b9f3f4d6750) 0
+ vptr=((& QInputMethodQueryEvent::_ZTV22QInputMethodQueryEvent) + 16)
+QEvent (0x0x7b9f3f4e03c0) 0
+ primary-for QInputMethodQueryEvent (0x0x7b9f3f4d6750)
+
+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 (0x0x7b9f3f5a1000) 0
+ vptr=((& QDropEvent::_ZTV10QDropEvent) + 16)
+QEvent (0x0x7b9f3f59a240) 0
+ primary-for QDropEvent (0x0x7b9f3f5a1000)
+
+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 (0x0x7b9f3f5a1068) 0
+ vptr=((& QDragMoveEvent::_ZTV14QDragMoveEvent) + 16)
+QDropEvent (0x0x7b9f3f5a10d0) 0
+ primary-for QDragMoveEvent (0x0x7b9f3f5a1068)
+QEvent (0x0x7b9f3f59a720) 0
+ primary-for QDropEvent (0x0x7b9f3f5a10d0)
+
+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 (*)(...))QDragEnterEvent::clone
+
+Class QDragEnterEvent
+ size=80 align=8
+ base size=80 base align=8
+QDragEnterEvent (0x0x7b9f3f5a1138) 0
+ vptr=((& QDragEnterEvent::_ZTV15QDragEnterEvent) + 16)
+QDragMoveEvent (0x0x7b9f3f5a11a0) 0
+ primary-for QDragEnterEvent (0x0x7b9f3f5a1138)
+QDropEvent (0x0x7b9f3f5a1208) 0
+ primary-for QDragMoveEvent (0x0x7b9f3f5a11a0)
+QEvent (0x0x7b9f3f59a960) 0
+ primary-for QDropEvent (0x0x7b9f3f5a1208)
+
+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 (*)(...))QDragLeaveEvent::clone
+
+Class QDragLeaveEvent
+ size=16 align=8
+ base size=16 base align=8
+QDragLeaveEvent (0x0x7b9f3f5a1270) 0
+ vptr=((& QDragLeaveEvent::_ZTV15QDragLeaveEvent) + 16)
+QEvent (0x0x7b9f3f59a9c0) 0
+ primary-for QDragLeaveEvent (0x0x7b9f3f5a1270)
+
+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 (0x0x7b9f3f5a12d8) 0
+ vptr=((& QHelpEvent::_ZTV10QHelpEvent) + 16)
+QEvent (0x0x7b9f3f59aa20) 0
+ primary-for QHelpEvent (0x0x7b9f3f5a12d8)
+
+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 (0x0x7b9f3f5a1340) 0
+ vptr=((& QStatusTipEvent::_ZTV15QStatusTipEvent) + 16)
+QEvent (0x0x7b9f3f59acc0) 0
+ primary-for QStatusTipEvent (0x0x7b9f3f5a1340)
+
+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 (0x0x7b9f3f5a13a8) 0
+ vptr=((& QWhatsThisClickedEvent::_ZTV22QWhatsThisClickedEvent) + 16)
+QEvent (0x0x7b9f3f59ad80) 0
+ primary-for QWhatsThisClickedEvent (0x0x7b9f3f5a13a8)
+
+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 (0x0x7b9f3f5a1410) 0
+ vptr=((& QActionEvent::_ZTV12QActionEvent) + 16)
+QEvent (0x0x7b9f3f59ae40) 0
+ primary-for QActionEvent (0x0x7b9f3f5a1410)
+
+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 (0x0x7b9f3f5a1478) 0
+ vptr=((& QFileOpenEvent::_ZTV14QFileOpenEvent) + 16)
+QEvent (0x0x7b9f3f59af60) 0
+ primary-for QFileOpenEvent (0x0x7b9f3f5a1478)
+
+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 (0x0x7b9f3f5a14e0) 0
+ vptr=((& QToolBarChangeEvent::_ZTV19QToolBarChangeEvent) + 16)
+QEvent (0x0x7b9f3f5ff0c0) 0
+ primary-for QToolBarChangeEvent (0x0x7b9f3f5a14e0)
+
+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 (0x0x7b9f3f5a1548) 0
+ vptr=((& QShortcutEvent::_ZTV14QShortcutEvent) + 16)
+QEvent (0x0x7b9f3f5ff180) 0
+ primary-for QShortcutEvent (0x0x7b9f3f5a1548)
+
+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 (0x0x7b9f3f5a15b0) 0
+ vptr=((& QWindowStateChangeEvent::_ZTV23QWindowStateChangeEvent) + 16)
+QEvent (0x0x7b9f3f5ff300) 0
+ primary-for QWindowStateChangeEvent (0x0x7b9f3f5a15b0)
+
+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 (0x0x7b9f3f5a1618) 0
+ vptr=((& QTouchEvent::_ZTV11QTouchEvent) + 16)
+QPointerEvent (0x0x7b9f3f5a1680) 0
+ primary-for QTouchEvent (0x0x7b9f3f5a1618)
+QInputEvent (0x0x7b9f3f5a16e8) 0
+ primary-for QPointerEvent (0x0x7b9f3f5a1680)
+QEvent (0x0x7b9f3f5ff3c0) 0
+ primary-for QInputEvent (0x0x7b9f3f5a16e8)
+
+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 (0x0x7b9f3f5a1750) 0
+ vptr=((& QScrollPrepareEvent::_ZTV19QScrollPrepareEvent) + 16)
+QEvent (0x0x7b9f3f5ff540) 0
+ primary-for QScrollPrepareEvent (0x0x7b9f3f5a1750)
+
+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 (0x0x7b9f3f5a17b8) 0
+ vptr=((& QScrollEvent::_ZTV12QScrollEvent) + 16)
+QEvent (0x0x7b9f3f5ff720) 0
+ primary-for QScrollEvent (0x0x7b9f3f5a17b8)
+
+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 (0x0x7b9f3f5a1820) 0
+ vptr=((& QScreenOrientationChangeEvent::_ZTV29QScreenOrientationChangeEvent) + 16)
+QEvent (0x0x7b9f3f5ff8a0) 0
+ primary-for QScreenOrientationChangeEvent (0x0x7b9f3f5a1820)
+
+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 (0x0x7b9f3f5a1888) 0
+ vptr=((& QApplicationStateChangeEvent::_ZTV28QApplicationStateChangeEvent) + 16)
+QEvent (0x0x7b9f3f5ff9c0) 0
+ primary-for QApplicationStateChangeEvent (0x0x7b9f3f5a1888)
+
+Vtable for QChildWindowEvent
+QChildWindowEvent::_ZTV17QChildWindowEvent: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QChildWindowEvent)
+16 (int (*)(...))QChildWindowEvent::~QChildWindowEvent
+24 (int (*)(...))QChildWindowEvent::~QChildWindowEvent
+32 (int (*)(...))QEvent::setAccepted
+40 (int (*)(...))QChildWindowEvent::clone
+
+Class QChildWindowEvent
+ size=24 align=8
+ base size=24 base align=8
+QChildWindowEvent (0x0x7b9f3f5a18f0) 0
+ vptr=((& QChildWindowEvent::_ZTV17QChildWindowEvent) + 16)
+QEvent (0x0x7b9f3f5ffa80) 0
+ primary-for QChildWindowEvent (0x0x7b9f3f5a18f0)
+
+Class QFont::Tag
+ size=4 align=4
+ base size=4 base align=4
+QFont::Tag (0x0x7b9f3f5ffba0) 0
+
+Class QFont
+ size=16 align=8
+ base size=12 base align=8
+QFont (0x0x7b9f3f5ffb40) 0
+
+Class QFontDatabase
+ size=1 align=1
+ base size=0 base align=1
+QFontDatabase (0x0x7b9f3f0172a0) 0 empty
+
+Class QRawFont
+ size=8 align=8
+ base size=8 base align=8
+QRawFont (0x0x7b9f3f017480) 0
+
+Class QGlyphRun
+ size=8 align=8
+ base size=8 base align=8
+QGlyphRun (0x0x7b9f3f093d80) 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 (0x0x7b9f3f13ed20) 0 nearly-empty
+ vptr=((& QAbstractUndoItem::_ZTV17QAbstractUndoItem) + 16)
+
+Class QTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextDocument::QPrivateSignal (0x0x7b9f3f164000) 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 (0x0x7b9f3f150888) 0
+ vptr=((& QTextDocument::_ZTV13QTextDocument) + 16)
+QObject (0x0x7b9f3f13ef60) 0
+ primary-for QTextDocument (0x0x7b9f3f150888)
+
+Class QBrushDataPointerDeleter
+ size=1 align=1
+ base size=0 base align=1
+QBrushDataPointerDeleter (0x0x7b9f3f164960) 0 empty
+
+Class QBrush
+ size=8 align=8
+ base size=8 base align=8
+QBrush (0x0x7b9f3f1649c0) 0
+
+Class QBrushData
+ size=104 align=8
+ base size=104 base align=8
+QBrushData (0x0x7b9f3efaee40) 0
+
+Class QGradient::QGradientData
+ size=48 align=8
+ base size=48 base align=8
+QGradient::QGradientData (0x0x7b9f3efd40c0) 0
+
+Class QGradient
+ size=88 align=8
+ base size=88 base align=8
+QGradient (0x0x7b9f3efd4060) 0
+
+Class QLinearGradient
+ size=88 align=8
+ base size=88 base align=8
+QLinearGradient (0x0x7b9f3efcd750) 0
+QGradient (0x0x7b9f3efd4e40) 0
+
+Class QRadialGradient
+ size=88 align=8
+ base size=88 base align=8
+QRadialGradient (0x0x7b9f3efcd7b8) 0
+QGradient (0x0x7b9f3efd4f60) 0
+
+Class QConicalGradient
+ size=88 align=8
+ base size=88 base align=8
+QConicalGradient (0x0x7b9f3efcd820) 0
+QGradient (0x0x7b9f3ec75060) 0
+
+Class QPen
+ size=8 align=8
+ base size=8 base align=8
+QPen (0x0x7b9f3ec75180) 0
+
+Class QTextOption::Tab
+ size=16 align=8
+ base size=14 base align=8
+QTextOption::Tab (0x0x7b9f3ece22a0) 0
+
+Class QTextOption
+ size=24 align=8
+ base size=24 base align=8
+QTextOption (0x0x7b9f3ece2240) 0
+
+Class QTextLength
+ size=16 align=8
+ base size=16 base align=8
+QTextLength (0x0x7b9f3ed873c0) 0
+
+Class QTextFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFormat (0x0x7b9f3edd85a0) 0
+
+Class QTextCharFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextCharFormat (0x0x7b9f3eadf270) 0
+QTextFormat (0x0x7b9f3ead2a80) 0
+
+Class QTextBlockFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextBlockFormat (0x0x7b9f3ec0b270) 0
+QTextFormat (0x0x7b9f3ec00540) 0
+
+Class QTextListFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextListFormat (0x0x7b9f3e8639c0) 0
+QTextFormat (0x0x7b9f3e8771e0) 0
+
+Class QTextImageFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextImageFormat (0x0x7b9f3e8d05b0) 0
+QTextCharFormat (0x0x7b9f3e8d0618) 0
+QTextFormat (0x0x7b9f3e8bbba0) 0
+
+Class QTextFrameFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextFrameFormat (0x0x7b9f3e913d68) 0
+QTextFormat (0x0x7b9f3e92d1e0) 0
+
+Class QTextTableFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableFormat (0x0x7b9f3e98ce38) 0
+QTextFrameFormat (0x0x7b9f3e98cea0) 0
+QTextFormat (0x0x7b9f3e99f540) 0
+
+Class QTextTableCellFormat
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCellFormat (0x0x7b9f3e9fba90) 0
+QTextCharFormat (0x0x7b9f3e9fbaf8) 0
+QTextFormat (0x0x7b9f3ea0b360) 0
+
+Class QTextCursor
+ size=8 align=8
+ base size=8 base align=8
+QTextCursor (0x0x7b9f3e662d20) 0
+
+Class QTextInlineObject
+ size=16 align=8
+ base size=16 base align=8
+QTextInlineObject (0x0x7b9f3e6e8ba0) 0
+
+Class QTextLayout::FormatRange
+ size=24 align=8
+ base size=24 base align=8
+QTextLayout::FormatRange (0x0x7b9f3e714000) 0
+
+Class QTextLayout
+ size=8 align=8
+ base size=8 base align=8
+QTextLayout (0x0x7b9f3e6e8f60) 0
+
+Class QTextLine
+ size=16 align=8
+ base size=16 base align=8
+QTextLine (0x0x7b9f3e7c9c00) 0
+
+Class QPalette
+ size=16 align=8
+ base size=12 base align=8
+QPalette (0x0x7b9f3e4410c0) 0
+
+Class QAbstractTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractTextDocumentLayout::QPrivateSignal (0x0x7b9f3e4c8ea0) 0 empty
+
+Class QAbstractTextDocumentLayout::Selection
+ size=24 align=8
+ base size=24 base align=8
+QAbstractTextDocumentLayout::Selection (0x0x7b9f3e4c8f00) 0
+
+Class QAbstractTextDocumentLayout::PaintContext
+ size=80 align=8
+ base size=80 base align=8
+QAbstractTextDocumentLayout::PaintContext (0x0x7b9f3e4c8f60) 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 (0x0x7b9f3e4d1bc8) 0
+ vptr=((& QAbstractTextDocumentLayout::_ZTV27QAbstractTextDocumentLayout) + 16)
+QObject (0x0x7b9f3e4c8e40) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7b9f3e4d1bc8)
+
+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 (0x0x7b9f3e212060) 0 nearly-empty
+ vptr=((& QTextObjectInterface::_ZTV20QTextObjectInterface) + 16)
+
+Class QAccessible::State
+ size=8 align=8
+ base size=5 base align=8
+QAccessible::State (0x0x7b9f3e212480) 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 (0x0x7b9f3e2124e0) 0 nearly-empty
+ vptr=((& QAccessible::ActivationObserver::_ZTVN11QAccessible18ActivationObserverE) + 16)
+
+Class QAccessible
+ size=1 align=1
+ base size=0 base align=1
+QAccessible (0x0x7b9f3e212420) 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 (0x0x7b9f3e212ea0) 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 (0x0x7b9f3e2a0300) 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 (0x0x7b9f3e2a0360) 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 (0x0x7b9f3e2a03c0) 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 (0x0x7b9f3e2a0420) 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 (0x0x7b9f3e2a0480) 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 (0x0x7b9f3e2a04e0) 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 (0x0x7b9f3e2a05a0) 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 (0x0x7b9f3e2a0600) 0 nearly-empty
+ vptr=((& QAccessibleHyperlinkInterface::_ZTV29QAccessibleHyperlinkInterface) + 16)
+
+Vtable for QAccessibleSelectionInterface
+QAccessibleSelectionInterface::_ZTV29QAccessibleSelectionInterface: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI29QAccessibleSelectionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QAccessibleSelectionInterface::selectedItem
+56 (int (*)(...))QAccessibleSelectionInterface::isSelected
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+80 (int (*)(...))__cxa_pure_virtual
+88 (int (*)(...))__cxa_pure_virtual
+
+Class QAccessibleSelectionInterface
+ size=8 align=8
+ base size=8 base align=8
+QAccessibleSelectionInterface (0x0x7b9f3e2a0660) 0 nearly-empty
+ vptr=((& QAccessibleSelectionInterface::_ZTV29QAccessibleSelectionInterface) + 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 (0x0x7b9f3e2a06c0) 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 (0x0x7b9f3e6067b8) 0
+ vptr=((& QAccessibleStateChangeEvent::_ZTV27QAccessibleStateChangeEvent) + 16)
+QAccessibleEvent (0x0x7b9f3e2a0c00) 0
+ primary-for QAccessibleStateChangeEvent (0x0x7b9f3e6067b8)
+
+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 (0x0x7b9f3e606820) 0
+ vptr=((& QAccessibleTextCursorEvent::_ZTV26QAccessibleTextCursorEvent) + 16)
+QAccessibleEvent (0x0x7b9f3e2f7000) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7b9f3e606820)
+
+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 (0x0x7b9f3e606888) 0
+ vptr=((& QAccessibleTextSelectionEvent::_ZTV29QAccessibleTextSelectionEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7b9f3e6068f0) 0
+ primary-for QAccessibleTextSelectionEvent (0x0x7b9f3e606888)
+QAccessibleEvent (0x0x7b9f3e2f7420) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7b9f3e6068f0)
+
+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 (0x0x7b9f3e606958) 0
+ vptr=((& QAccessibleTextInsertEvent::_ZTV26QAccessibleTextInsertEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7b9f3e6069c0) 0
+ primary-for QAccessibleTextInsertEvent (0x0x7b9f3e606958)
+QAccessibleEvent (0x0x7b9f3e2f78a0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7b9f3e6069c0)
+
+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 (0x0x7b9f3e606a28) 0
+ vptr=((& QAccessibleTextRemoveEvent::_ZTV26QAccessibleTextRemoveEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7b9f3e606a90) 0
+ primary-for QAccessibleTextRemoveEvent (0x0x7b9f3e606a28)
+QAccessibleEvent (0x0x7b9f3e2f7cc0) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7b9f3e606a90)
+
+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 (0x0x7b9f3e606af8) 0
+ vptr=((& QAccessibleTextUpdateEvent::_ZTV26QAccessibleTextUpdateEvent) + 16)
+QAccessibleTextCursorEvent (0x0x7b9f3e606b60) 0
+ primary-for QAccessibleTextUpdateEvent (0x0x7b9f3e606af8)
+QAccessibleEvent (0x0x7b9f3e32a120) 0
+ primary-for QAccessibleTextCursorEvent (0x0x7b9f3e606b60)
+
+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 (0x0x7b9f3e606bc8) 0
+ vptr=((& QAccessibleValueChangeEvent::_ZTV27QAccessibleValueChangeEvent) + 16)
+QAccessibleEvent (0x0x7b9f3e32a5a0) 0
+ primary-for QAccessibleValueChangeEvent (0x0x7b9f3e606bc8)
+
+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 (0x0x7b9f3e606c30) 0
+ vptr=((& QAccessibleTableModelChangeEvent::_ZTV32QAccessibleTableModelChangeEvent) + 16)
+QAccessibleEvent (0x0x7b9f3e32a9c0) 0
+ primary-for QAccessibleTableModelChangeEvent (0x0x7b9f3e606c30)
+
+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 (0x0x7b9f3e35d480) 0 nearly-empty
+ vptr=((& QAccessibleBridge::_ZTV17QAccessibleBridge) + 16)
+
+Class QAccessibleBridgePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessibleBridgePlugin::QPrivateSignal (0x0x7b9f3e35d720) 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 (0x0x7b9f3e606d68) 0
+ vptr=((& QAccessibleBridgePlugin::_ZTV23QAccessibleBridgePlugin) + 16)
+QObject (0x0x7b9f3e35d6c0) 0
+ primary-for QAccessibleBridgePlugin (0x0x7b9f3e606d68)
+
+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 (0x0x7b9f3e606dd0) 0
+ vptr=((& QAccessibleObject::_ZTV17QAccessibleObject) + 16)
+QAccessibleInterface (0x0x7b9f3e35d7e0) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7b9f3e606dd0)
+
+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 (0x0x7b9f3e606e38) 0
+ vptr=((& QAccessibleApplication::_ZTV22QAccessibleApplication) + 16)
+QAccessibleObject (0x0x7b9f3e606ea0) 0
+ primary-for QAccessibleApplication (0x0x7b9f3e606e38)
+QAccessibleInterface (0x0x7b9f3e35d840) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7b9f3e606ea0)
+
+Class QAccessiblePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAccessiblePlugin::QPrivateSignal (0x0x7b9f3e35d900) 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 (0x0x7b9f3e606f08) 0
+ vptr=((& QAccessiblePlugin::_ZTV17QAccessiblePlugin) + 16)
+QObject (0x0x7b9f3e35d8a0) 0
+ primary-for QAccessiblePlugin (0x0x7b9f3e606f08)
+
+Class QAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAction::QPrivateSignal (0x0x7b9f3e35da20) 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 (0x0x7b9f3e606f70) 0
+ vptr=((& QAction::_ZTV7QAction) + 16)
+QObject (0x0x7b9f3e35d9c0) 0
+ primary-for QAction (0x0x7b9f3e606f70)
+
+Class QActionGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QActionGroup::QPrivateSignal (0x0x7b9f3e3c9360) 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 (0x0x7b9f3e3cd000) 0
+ vptr=((& QActionGroup::_ZTV12QActionGroup) + 16)
+QObject (0x0x7b9f3e3c9300) 0
+ primary-for QActionGroup (0x0x7b9f3e3cd000)
+
+Class QSurfaceFormat
+ size=8 align=8
+ base size=8 base align=8
+QSurfaceFormat (0x0x7b9f3e3c9600) 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 (0x0x7b9f3e04f000) 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 (0x0x7b9f3e3cdd00) 0
+ vptr=((& QBitmap::_ZTV7QBitmap) + 16)
+QPixmap (0x0x7b9f3e3cdd68) 0
+ primary-for QBitmap (0x0x7b9f3e3cdd00)
+QPaintDevice (0x0x7b9f3e078360) 0
+ primary-for QPixmap (0x0x7b9f3e3cdd68)
+
+Class QCursor
+ size=8 align=8
+ base size=8 base align=8
+QCursor (0x0x7b9f3e0cb240) 0
+
+Class QWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWindow::QPrivateSignal (0x0x7b9f3e11e5a0) 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 (0x0x7b9f3e0c4af0) 0
+ vptr=((& QWindow::_ZTV7QWindow) + 16)
+QObject (0x0x7b9f3e11e4e0) 0
+ primary-for QWindow (0x0x7b9f3e0c4af0)
+QSurface (0x0x7b9f3e11e540) 16
+ vptr=((& QWindow::_ZTV7QWindow) + 328)
+
+Class QBackingStore
+ size=8 align=8
+ base size=8 base align=8
+QBackingStore (0x0x7b9f3e11ee40) 0
+
+Class QClipboard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QClipboard::QPrivateSignal (0x0x7b9f3e11ef60) 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 (0x0x7b9f3e12d0d0) 0
+ vptr=((& QClipboard::_ZTV10QClipboard) + 16)
+QObject (0x0x7b9f3e11ef00) 0
+ primary-for QClipboard (0x0x7b9f3e12d0d0)
+
+Class QColorTransform
+ size=8 align=8
+ base size=8 base align=8
+QColorTransform (0x0x7b9f3e1a00c0) 0
+
+Class QColorSpace
+ size=8 align=8
+ base size=8 base align=8
+QColorSpace (0x0x7b9f3e1f4780) 0
+
+Class QDesktopServices
+ size=1 align=1
+ base size=0 base align=1
+QDesktopServices (0x0x7b9f3de6cae0) 0 empty
+
+Class QDrag::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDrag::QPrivateSignal (0x0x7b9f3de6cba0) 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 (0x0x7b9f3de72f08) 0
+ vptr=((& QDrag::_ZTV5QDrag) + 16)
+QObject (0x0x7b9f3de6cb40) 0
+ primary-for QDrag (0x0x7b9f3de72f08)
+
+Class QFileSystemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileSystemModel::QPrivateSignal (0x0x7b9f3de6cd80) 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 (0x0x7b9f3de72f70) 0
+ vptr=((& QFileSystemModel::_ZTV16QFileSystemModel) + 16)
+QAbstractItemModel (0x0x7b9f3de9b000) 0
+ primary-for QFileSystemModel (0x0x7b9f3de72f70)
+QObject (0x0x7b9f3de6cd20) 0
+ primary-for QAbstractItemModel (0x0x7b9f3de9b000)
+
+Class QFontInfo
+ size=8 align=8
+ base size=8 base align=8
+QFontInfo (0x0x7b9f3decd540) 0
+
+Class QFontMetrics
+ size=8 align=8
+ base size=8 base align=8
+QFontMetrics (0x0x7b9f3df57420) 0
+
+Class QFontMetricsF
+ size=8 align=8
+ base size=8 base align=8
+QFontMetricsF (0x0x7b9f3dfb1420) 0
+
+Class QGenericPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGenericPlugin::QPrivateSignal (0x0x7b9f3da3f900) 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 (0x0x7b9f3da48138) 0
+ vptr=((& QGenericPlugin::_ZTV14QGenericPlugin) + 16)
+QObject (0x0x7b9f3da3f8a0) 0
+ primary-for QGenericPlugin (0x0x7b9f3da48138)
+
+Class QGenericPluginFactory
+ size=1 align=1
+ base size=0 base align=1
+QGenericPluginFactory (0x0x7b9f3da3f9c0) 0 empty
+
+Class QIconEngine::ScaledPixmapArgument
+ size=48 align=8
+ base size=48 base align=8
+QIconEngine::ScaledPixmapArgument (0x0x7b9f3da3fa80) 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 (0x0x7b9f3da3fa20) 0 nearly-empty
+ vptr=((& QIconEngine::_ZTV11QIconEngine) + 16)
+
+Class QIconEnginePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIconEnginePlugin::QPrivateSignal (0x0x7b9f3da3fb40) 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 (0x0x7b9f3da481a0) 0
+ vptr=((& QIconEnginePlugin::_ZTV17QIconEnginePlugin) + 16)
+QObject (0x0x7b9f3da3fae0) 0
+ primary-for QIconEnginePlugin (0x0x7b9f3da481a0)
+
+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 (0x0x7b9f3da3fc00) 0
+ vptr=((& QImageIOHandler::_ZTV15QImageIOHandler) + 16)
+
+Class QImageIOPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QImageIOPlugin::QPrivateSignal (0x0x7b9f3da3fe40) 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 (0x0x7b9f3da48208) 0
+ vptr=((& QImageIOPlugin::_ZTV14QImageIOPlugin) + 16)
+QObject (0x0x7b9f3da3fde0) 0
+ primary-for QImageIOPlugin (0x0x7b9f3da48208)
+
+Class QImageReader
+ size=8 align=8
+ base size=8 base align=8
+QImageReader (0x0x7b9f3daa63c0) 0
+
+Class QImageWriter
+ size=8 align=8
+ base size=8 base align=8
+QImageWriter (0x0x7b9f3daa6480) 0
+
+Class QQuaternion
+ size=16 align=4
+ base size=16 base align=4
+QQuaternion (0x0x7b9f3daa6540) 0
+
+Class QMatrix4x4
+ size=68 align=4
+ base size=68 base align=4
+QMatrix4x4 (0x0x7b9f3dba19c0) 0
+
+Class QMovie::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMovie::QPrivateSignal (0x0x7b9f3d9315a0) 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 (0x0x7b9f3d878340) 0
+ vptr=((& QMovie::_ZTV6QMovie) + 16)
+QObject (0x0x7b9f3d931540) 0
+ primary-for QMovie (0x0x7b9f3d878340)
+
+Class QOffscreenSurface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOffscreenSurface::QPrivateSignal (0x0x7b9f3d931960) 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 (0x0x7b9f3d976460) 0
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 16)
+QObject (0x0x7b9f3d9318a0) 0
+ primary-for QOffscreenSurface (0x0x7b9f3d976460)
+QSurface (0x0x7b9f3d931900) 16
+ vptr=((& QOffscreenSurface::_ZTV17QOffscreenSurface) + 160)
+
+Class QOpenGLContextGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContextGroup::QPrivateSignal (0x0x7b9f3d931c00) 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 (0x0x7b9f3d8783a8) 0
+ vptr=((& QOpenGLContextGroup::_ZTV19QOpenGLContextGroup) + 16)
+QObject (0x0x7b9f3d931ba0) 0
+ primary-for QOpenGLContextGroup (0x0x7b9f3d8783a8)
+
+Class QOpenGLContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLContext::QPrivateSignal (0x0x7b9f3d931de0) 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 (0x0x7b9f3d878410) 0
+ vptr=((& QOpenGLContext::_ZTV14QOpenGLContext) + 16)
+QObject (0x0x7b9f3d931d80) 0
+ primary-for QOpenGLContext (0x0x7b9f3d878410)
+
+Class QNativeInterface::QGLXContext::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QGLXContext::TypeInfo (0x0x7b9f3d5ea060) 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 (0x0x7b9f3d5ea000) 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 (0x0x7b9f3d5ea120) 0 empty
+
+Vtable for QNativeInterface::QEGLContext
+QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE: 8 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface11QEGLContextE)
+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 QNativeInterface::QEGLContext
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QEGLContext (0x0x7b9f3d5ea0c0) 0 nearly-empty
+ vptr=((& QNativeInterface::QEGLContext::_ZTVN16QNativeInterface11QEGLContextE) + 16)
+
+Class QOpenGLFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFunctions (0x0x7b9f3d5ea180) 0
+
+Class QOpenGLFunctionsPrivate::Functions
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate::Functions (0x0x7b9f3d5ea8a0) 0
+
+Class QOpenGLFunctionsPrivate
+ size=1152 align=8
+ base size=1152 base align=8
+QOpenGLFunctionsPrivate (0x0x7b9f3d5ea840) 0
+
+Class QOpenGLExtraFunctions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLExtraFunctions (0x0x7b9f3d8787b8) 0
+QOpenGLFunctions (0x0x7b9f3d39d060) 0
+
+Class QOpenGLExtraFunctionsPrivate::Functions
+ size=1728 align=8
+ base size=1728 base align=8
+QOpenGLExtraFunctionsPrivate::Functions (0x0x7b9f3d39d3c0) 0
+
+Class QOpenGLExtraFunctionsPrivate
+ size=2880 align=8
+ base size=2880 base align=8
+QOpenGLExtraFunctionsPrivate (0x0x7b9f3d878820) 0
+QOpenGLFunctionsPrivate (0x0x7b9f3d39d360) 0
+
+Class QPageSize
+ size=8 align=8
+ base size=8 base align=8
+QPageSize (0x0x7b9f3d1b40c0) 0
+
+Class QPageLayout
+ size=8 align=8
+ base size=8 base align=8
+QPageLayout (0x0x7b9f3ce03a20) 0
+
+Class QPageRanges::Range
+ size=8 align=4
+ base size=8 base align=4
+QPageRanges::Range (0x0x7b9f3cf37a20) 0
+
+Class QPageRanges
+ size=8 align=8
+ base size=8 base align=8
+QPageRanges (0x0x7b9f3cf379c0) 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 (0x0x7b9f3cc068f0) 0
+ vptr=((& QPagedPaintDevice::_ZTV17QPagedPaintDevice) + 16)
+QPaintDevice (0x0x7b9f3cc24000) 0
+ primary-for QPagedPaintDevice (0x0x7b9f3cc068f0)
+
+Class QPaintDeviceWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPaintDeviceWindow::QPrivateSignal (0x0x7b9f3cc24180) 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 (0x0x7b9f3cc161c0) 0
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 16)
+QWindow (0x0x7b9f3cc16230) 0
+ primary-for QPaintDeviceWindow (0x0x7b9f3cc161c0)
+QObject (0x0x7b9f3cc24060) 0
+ primary-for QWindow (0x0x7b9f3cc16230)
+QSurface (0x0x7b9f3cc240c0) 16
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 344)
+QPaintDevice (0x0x7b9f3cc24120) 40
+ vptr=((& QPaintDeviceWindow::_ZTV18QPaintDeviceWindow) + 408)
+
+Class QPainter::PixmapFragment
+ size=80 align=8
+ base size=80 base align=8
+QPainter::PixmapFragment (0x0x7b9f3cc24360) 0
+
+Class QPainter
+ size=8 align=8
+ base size=8 base align=8
+QPainter (0x0x7b9f3cc24300) 0
+
+Class QTextItem
+ size=1 align=1
+ base size=0 base align=1
+QTextItem (0x0x7b9f3c89d840) 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 (0x0x7b9f3c8f1600) 0
+ vptr=((& QPaintEngine::_ZTV12QPaintEngine) + 16)
+
+Class QPaintEngineState
+ size=4 align=4
+ base size=4 base align=4
+QPaintEngineState (0x0x7b9f3c8f1c00) 0
+
+Class QPainterPath::Element
+ size=24 align=8
+ base size=24 base align=8
+QPainterPath::Element (0x0x7b9f3c984b40) 0
+
+Class QPainterPath
+ size=8 align=8
+ base size=8 base align=8
+QPainterPath (0x0x7b9f3c984ae0) 0
+
+Class QPainterPathStroker
+ size=8 align=8
+ base size=8 base align=8
+QPainterPathStroker (0x0x7b9f3c6f98a0) 0
+
+Class QPdfWriter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPdfWriter::QPrivateSignal (0x0x7b9f3c73b060) 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 (0x0x7b9f3c7322a0) 0
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 16)
+QObject (0x0x7b9f3c6f9360) 0
+ primary-for QPdfWriter (0x0x7b9f3c7322a0)
+QPagedPaintDevice (0x0x7b9f3c6f8f08) 16
+ vptr=((& QPdfWriter::_ZTV10QPdfWriter) + 152)
+QPaintDevice (0x0x7b9f3c73b000) 16
+ primary-for QPagedPaintDevice (0x0x7b9f3c6f8f08)
+
+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 (0x0x7b9f3c6f8f70) 0
+ vptr=((& QPicture::_ZTV8QPicture) + 16)
+QPaintDevice (0x0x7b9f3c73b240) 0
+ primary-for QPicture (0x0x7b9f3c6f8f70)
+
+Class QPixmapCache::Key
+ size=8 align=8
+ base size=8 base align=8
+QPixmapCache::Key (0x0x7b9f3c3af300) 0
+
+Class QPixmapCache
+ size=1 align=1
+ base size=0 base align=1
+QPixmapCache (0x0x7b9f3c3af2a0) 0 empty
+
+Class QRasterWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRasterWindow::QPrivateSignal (0x0x7b9f3c3f4900) 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 (*)(...))QRasterWindow::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 (0x0x7b9f3c3f2d00) 0
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 16)
+QPaintDeviceWindow (0x0x7b9f3c3c4a10) 0
+ primary-for QRasterWindow (0x0x7b9f3c3f2d00)
+QWindow (0x0x7b9f3c3c4a80) 0
+ primary-for QPaintDeviceWindow (0x0x7b9f3c3c4a10)
+QObject (0x0x7b9f3c3f47e0) 0
+ primary-for QWindow (0x0x7b9f3c3c4a80)
+QSurface (0x0x7b9f3c3f4840) 16
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 352)
+QPaintDevice (0x0x7b9f3c3f48a0) 40
+ vptr=((& QRasterWindow::_ZTV13QRasterWindow) + 416)
+
+Class QSessionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSessionManager::QPrivateSignal (0x0x7b9f3c42f720) 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 (0x0x7b9f3c3f2dd0) 0
+ vptr=((& QSessionManager::_ZTV15QSessionManager) + 16)
+QObject (0x0x7b9f3c42f6c0) 0
+ primary-for QSessionManager (0x0x7b9f3c3f2dd0)
+
+Class QShortcut::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QShortcut::QPrivateSignal (0x0x7b9f3c42f900) 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 (0x0x7b9f3c3f2e38) 0
+ vptr=((& QShortcut::_ZTV9QShortcut) + 16)
+QObject (0x0x7b9f3c42f8a0) 0
+ primary-for QShortcut (0x0x7b9f3c3f2e38)
+
+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 (0x0x7b9f3c42fde0) 0
+ vptr=((& QStandardItem::_ZTV13QStandardItem) + 16)
+
+Class QStandardItemModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStandardItemModel::QPrivateSignal (0x0x7b9f3c1d31e0) 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 (0x0x7b9f3c564618) 0
+ vptr=((& QStandardItemModel::_ZTV18QStandardItemModel) + 16)
+QAbstractItemModel (0x0x7b9f3c564680) 0
+ primary-for QStandardItemModel (0x0x7b9f3c564618)
+QObject (0x0x7b9f3c1d3180) 0
+ primary-for QAbstractItemModel (0x0x7b9f3c564680)
+
+Class QStaticText
+ size=8 align=8
+ base size=8 base align=8
+QStaticText (0x0x7b9f3c1d3540) 0
+
+Class QStyleHints::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyleHints::QPrivateSignal (0x0x7b9f3c26be40) 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 (0x0x7b9f3c27e340) 0
+ vptr=((& QStyleHints::_ZTV11QStyleHints) + 16)
+QObject (0x0x7b9f3c26bde0) 0
+ primary-for QStyleHints (0x0x7b9f3c27e340)
+
+Class QTextObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextObject::QPrivateSignal (0x0x7b9f3c2a3060) 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 (0x0x7b9f3c27e3a8) 0
+ vptr=((& QTextObject::_ZTV11QTextObject) + 16)
+QObject (0x0x7b9f3c2a3000) 0
+ primary-for QTextObject (0x0x7b9f3c27e3a8)
+
+Class QTextBlockGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBlockGroup::QPrivateSignal (0x0x7b9f3c2a3240) 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 (0x0x7b9f3c27e410) 0
+ vptr=((& QTextBlockGroup::_ZTV15QTextBlockGroup) + 16)
+QTextObject (0x0x7b9f3c27e478) 0
+ primary-for QTextBlockGroup (0x0x7b9f3c27e410)
+QObject (0x0x7b9f3c2a31e0) 0
+ primary-for QTextObject (0x0x7b9f3c27e478)
+
+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 (0x0x7b9f3c2a33c0) 0 nearly-empty
+ vptr=((& QTextFrameLayoutData::_ZTV20QTextFrameLayoutData) + 16)
+
+Class QTextFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextFrame::QPrivateSignal (0x0x7b9f3c2a3480) 0 empty
+
+Class QTextFrame::iterator
+ size=32 align=8
+ base size=28 base align=8
+QTextFrame::iterator (0x0x7b9f3c2a34e0) 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 (0x0x7b9f3c27e4e0) 0
+ vptr=((& QTextFrame::_ZTV10QTextFrame) + 16)
+QTextObject (0x0x7b9f3c27e548) 0
+ primary-for QTextFrame (0x0x7b9f3c27e4e0)
+QObject (0x0x7b9f3c2a3420) 0
+ primary-for QTextObject (0x0x7b9f3c27e548)
+
+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 (0x0x7b9f3c3167e0) 0 nearly-empty
+ vptr=((& QTextBlockUserData::_ZTV18QTextBlockUserData) + 16)
+
+Class QTextBlock::iterator
+ size=24 align=8
+ base size=20 base align=8
+QTextBlock::iterator (0x0x7b9f3c3168a0) 0
+
+Class QTextBlock
+ size=16 align=8
+ base size=12 base align=8
+QTextBlock (0x0x7b9f3c316840) 0
+
+Class QTextFragment
+ size=16 align=8
+ base size=16 base align=8
+QTextFragment (0x0x7b9f3bfbfb40) 0
+
+Class QSyntaxHighlighter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSyntaxHighlighter::QPrivateSignal (0x0x7b9f3c00cf60) 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 (0x0x7b9f3c01cbc8) 0
+ vptr=((& QSyntaxHighlighter::_ZTV18QSyntaxHighlighter) + 16)
+QObject (0x0x7b9f3c00cf00) 0
+ primary-for QSyntaxHighlighter (0x0x7b9f3c01cbc8)
+
+Class QTextDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentFragment (0x0x7b9f3c03c120) 0
+
+Class QTextDocumentWriter
+ size=8 align=8
+ base size=8 base align=8
+QTextDocumentWriter (0x0x7b9f3c03c180) 0
+
+Class QTextList::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextList::QPrivateSignal (0x0x7b9f3c03c240) 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 (0x0x7b9f3c01cc30) 0
+ vptr=((& QTextList::_ZTV9QTextList) + 16)
+QTextBlockGroup (0x0x7b9f3c01cc98) 0
+ primary-for QTextList (0x0x7b9f3c01cc30)
+QTextObject (0x0x7b9f3c01cd00) 0
+ primary-for QTextBlockGroup (0x0x7b9f3c01cc98)
+QObject (0x0x7b9f3c03c1e0) 0
+ primary-for QTextObject (0x0x7b9f3c01cd00)
+
+Class QTextTableCell
+ size=16 align=8
+ base size=12 base align=8
+QTextTableCell (0x0x7b9f3c03c600) 0
+
+Class QTextTable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextTable::QPrivateSignal (0x0x7b9f3c03ce40) 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 (0x0x7b9f3c01cd68) 0
+ vptr=((& QTextTable::_ZTV10QTextTable) + 16)
+QTextFrame (0x0x7b9f3c01cdd0) 0
+ primary-for QTextTable (0x0x7b9f3c01cd68)
+QTextObject (0x0x7b9f3c01ce38) 0
+ primary-for QTextFrame (0x0x7b9f3c01cdd0)
+QObject (0x0x7b9f3c03cde0) 0
+ primary-for QTextObject (0x0x7b9f3c01ce38)
+
+Class QUndoGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoGroup::QPrivateSignal (0x0x7b9f3c080240) 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 (0x0x7b9f3c01cea0) 0
+ vptr=((& QUndoGroup::_ZTV10QUndoGroup) + 16)
+QObject (0x0x7b9f3c0801e0) 0
+ primary-for QUndoGroup (0x0x7b9f3c01cea0)
+
+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 (0x0x7b9f3c0803c0) 0
+ vptr=((& QUndoCommand::_ZTV12QUndoCommand) + 16)
+
+Class QUndoStack::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoStack::QPrivateSignal (0x0x7b9f3c080480) 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 (0x0x7b9f3c01cf08) 0
+ vptr=((& QUndoStack::_ZTV10QUndoStack) + 16)
+QObject (0x0x7b9f3c080420) 0
+ primary-for QUndoStack (0x0x7b9f3c01cf08)
+
+Class QValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QValidator::QPrivateSignal (0x0x7b9f3c080660) 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 (0x0x7b9f3c01cf70) 0
+ vptr=((& QValidator::_ZTV10QValidator) + 16)
+QObject (0x0x7b9f3c080600) 0
+ primary-for QValidator (0x0x7b9f3c01cf70)
+
+Class QIntValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QIntValidator::QPrivateSignal (0x0x7b9f3c080900) 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 (0x0x7b9f3c0c3000) 0
+ vptr=((& QIntValidator::_ZTV13QIntValidator) + 16)
+QValidator (0x0x7b9f3c0c3068) 0
+ primary-for QIntValidator (0x0x7b9f3c0c3000)
+QObject (0x0x7b9f3c0808a0) 0
+ primary-for QValidator (0x0x7b9f3c0c3068)
+
+Class QDoubleValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleValidator::QPrivateSignal (0x0x7b9f3c080ae0) 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 (*)(...))QDoubleValidator::fixup
+
+Class QDoubleValidator
+ size=40 align=8
+ base size=36 base align=8
+QDoubleValidator (0x0x7b9f3c0c30d0) 0
+ vptr=((& QDoubleValidator::_ZTV16QDoubleValidator) + 16)
+QValidator (0x0x7b9f3c0c3138) 0
+ primary-for QDoubleValidator (0x0x7b9f3c0c30d0)
+QObject (0x0x7b9f3c080a80) 0
+ primary-for QValidator (0x0x7b9f3c0c3138)
+
+Class QRegularExpressionValidator::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRegularExpressionValidator::QPrivateSignal (0x0x7b9f3c080ea0) 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 (0x0x7b9f3c0c31a0) 0
+ vptr=((& QRegularExpressionValidator::_ZTV27QRegularExpressionValidator) + 16)
+QValidator (0x0x7b9f3c0c3208) 0
+ primary-for QRegularExpressionValidator (0x0x7b9f3c0c31a0)
+QObject (0x0x7b9f3c080e40) 0
+ primary-for QValidator (0x0x7b9f3c0c3208)
+
+Class QSizePolicy::Bits
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy::Bits (0x0x7b9f3c0f60c0) 0
+
+Class QSizePolicy
+ size=4 align=4
+ base size=4 base align=4
+QSizePolicy (0x0x7b9f3c0f6060) 0
+
+Class QWidgetData
+ size=88 align=8
+ base size=88 base align=8
+QWidgetData (0x0x7b9f3bda4900) 0
+
+Class QWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidget::QPrivateSignal (0x0x7b9f3bda4a20) 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 (0x0x7b9f3bdce310) 0
+ vptr=((& QWidget::_ZTV7QWidget) + 16)
+QObject (0x0x7b9f3bda4960) 0
+ primary-for QWidget (0x0x7b9f3bdce310)
+QPaintDevice (0x0x7b9f3bda49c0) 16
+ vptr=((& QWidget::_ZTV7QWidget) + 448)
+
+Class QAbstractButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractButton::QPrivateSignal (0x0x7b9f3bee5600) 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 (0x0x7b9f3bd94d68) 0
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 16)
+QWidget (0x0x7b9f3bef4070) 0
+ primary-for QAbstractButton (0x0x7b9f3bd94d68)
+QObject (0x0x7b9f3bee5540) 0
+ primary-for QWidget (0x0x7b9f3bef4070)
+QPaintDevice (0x0x7b9f3bee55a0) 16
+ vptr=((& QAbstractButton::_ZTV15QAbstractButton) + 472)
+
+Class QAbstractSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSpinBox::QPrivateSignal (0x0x7b9f3bee5840) 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 (0x0x7b9f3bd94dd0) 0
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 16)
+QWidget (0x0x7b9f3bef4230) 0
+ primary-for QAbstractSpinBox (0x0x7b9f3bd94dd0)
+QObject (0x0x7b9f3bee5780) 0
+ primary-for QWidget (0x0x7b9f3bef4230)
+QPaintDevice (0x0x7b9f3bee57e0) 16
+ vptr=((& QAbstractSpinBox::_ZTV16QAbstractSpinBox) + 496)
+
+Class QAbstractSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSlider::QPrivateSignal (0x0x7b9f3bf81180) 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 (0x0x7b9f3bd94f08) 0
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 16)
+QWidget (0x0x7b9f3bef4e00) 0
+ primary-for QAbstractSlider (0x0x7b9f3bd94f08)
+QObject (0x0x7b9f3bf810c0) 0
+ primary-for QWidget (0x0x7b9f3bef4e00)
+QPaintDevice (0x0x7b9f3bf81120) 16
+ vptr=((& QAbstractSlider::_ZTV15QAbstractSlider) + 456)
+
+Class QSlider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSlider::QPrivateSignal (0x0x7b9f3bf813c0) 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 (0x0x7b9f3bd94f70) 0
+ vptr=((& QSlider::_ZTV7QSlider) + 16)
+QAbstractSlider (0x0x7b9f3bbaa000) 0
+ primary-for QSlider (0x0x7b9f3bd94f70)
+QWidget (0x0x7b9f3bb96540) 0
+ primary-for QAbstractSlider (0x0x7b9f3bbaa000)
+QObject (0x0x7b9f3bf81300) 0
+ primary-for QWidget (0x0x7b9f3bb96540)
+QPaintDevice (0x0x7b9f3bf81360) 16
+ vptr=((& QSlider::_ZTV7QSlider) + 464)
+
+Class QStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyle::QPrivateSignal (0x0x7b9f3bf81660) 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 (0x0x7b9f3bbaa068) 0
+ vptr=((& QStyle::_ZTV6QStyle) + 16)
+QObject (0x0x7b9f3bf81600) 0
+ primary-for QStyle (0x0x7b9f3bbaa068)
+
+Class QTabBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabBar::QPrivateSignal (0x0x7b9f3bc1ba20) 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 (0x0x7b9f3bbaa270) 0
+ vptr=((& QTabBar::_ZTV7QTabBar) + 16)
+QWidget (0x0x7b9f3bc1a690) 0
+ primary-for QTabBar (0x0x7b9f3bbaa270)
+QObject (0x0x7b9f3bc1b960) 0
+ primary-for QWidget (0x0x7b9f3bc1a690)
+QPaintDevice (0x0x7b9f3bc1b9c0) 16
+ vptr=((& QTabBar::_ZTV7QTabBar) + 496)
+
+Class QTabWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTabWidget::QPrivateSignal (0x0x7b9f3bc1bd20) 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 (0x0x7b9f3bbaa2d8) 0
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 16)
+QWidget (0x0x7b9f3bc1aee0) 0
+ primary-for QTabWidget (0x0x7b9f3bbaa2d8)
+QObject (0x0x7b9f3bc1bc60) 0
+ primary-for QWidget (0x0x7b9f3bc1aee0)
+QPaintDevice (0x0x7b9f3bc1bcc0) 16
+ vptr=((& QTabWidget::_ZTV10QTabWidget) + 472)
+
+Class QRubberBand::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRubberBand::QPrivateSignal (0x0x7b9f3bd0e120) 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 (0x0x7b9f3bbaa340) 0
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 16)
+QWidget (0x0x7b9f3bcf0540) 0
+ primary-for QRubberBand (0x0x7b9f3bbaa340)
+QObject (0x0x7b9f3bd0e060) 0
+ primary-for QWidget (0x0x7b9f3bcf0540)
+QPaintDevice (0x0x7b9f3bd0e0c0) 16
+ vptr=((& QRubberBand::_ZTV11QRubberBand) + 456)
+
+Class QFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFrame::QPrivateSignal (0x0x7b9f3bd0e540) 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 (0x0x7b9f3bbaa3a8) 0
+ vptr=((& QFrame::_ZTV6QFrame) + 16)
+QWidget (0x0x7b9f3bcf0a10) 0
+ primary-for QFrame (0x0x7b9f3bbaa3a8)
+QObject (0x0x7b9f3bd0e480) 0
+ primary-for QWidget (0x0x7b9f3bcf0a10)
+QPaintDevice (0x0x7b9f3bd0e4e0) 16
+ vptr=((& QFrame::_ZTV6QFrame) + 456)
+
+Class QStyleOption
+ size=64 align=8
+ base size=64 base align=8
+QStyleOption (0x0x7b9f3bd0ed80) 0
+
+Class QStyleOptionFocusRect
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFocusRect (0x0x7b9f3bbaa5b0) 0
+QStyleOption (0x0x7b9f3bd0ede0) 0
+
+Class QStyleOptionFrame
+ size=80 align=8
+ base size=80 base align=8
+QStyleOptionFrame (0x0x7b9f40075000) 0
+QStyleOption (0x0x7b9f3bd66060) 0
+
+Class QStyleOptionTabWidgetFrame
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionTabWidgetFrame (0x0x7b9f40075138) 0
+QStyleOption (0x0x7b9f3bd66720) 0
+
+Class QStyleOptionTabBarBase
+ size=104 align=8
+ base size=101 base align=8
+QStyleOptionTabBarBase (0x0x7b9f400751a0) 0
+QStyleOption (0x0x7b9f3bd66960) 0
+
+Class QStyleOptionHeader
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionHeader (0x0x7b9f3bbaa618) 0
+QStyleOption (0x0x7b9f3bd66ba0) 0
+
+Class QStyleOptionHeaderV2
+ size=136 align=8
+ base size=136 base align=8
+QStyleOptionHeaderV2 (0x0x7b9f3bbaa680) 0
+QStyleOptionHeader (0x0x7b9f3bbaa6e8) 0
+QStyleOption (0x0x7b9f3bd66de0) 0
+
+Class QStyleOptionButton
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionButton (0x0x7b9f3bbaa7b8) 0
+QStyleOption (0x0x7b9f3b9f31e0) 0
+
+Class QStyleOptionTab
+ size=160 align=8
+ base size=156 base align=8
+QStyleOptionTab (0x0x7b9f3bbaa8f0) 0
+QStyleOption (0x0x7b9f3b9f38a0) 0
+
+Class QStyleOptionToolBar
+ size=88 align=8
+ base size=88 base align=8
+QStyleOptionToolBar (0x0x7b9f3bbaaaf8) 0
+QStyleOption (0x0x7b9f3babc180) 0
+
+Class QStyleOptionProgressBar
+ size=112 align=8
+ base size=111 base align=8
+QStyleOptionProgressBar (0x0x7b9f3bbaac30) 0
+QStyleOption (0x0x7b9f3babc840) 0
+
+Class QStyleOptionMenuItem
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionMenuItem (0x0x7b9f3bbaac98) 0
+QStyleOption (0x0x7b9f3babca80) 0
+
+Class QStyleOptionDockWidget
+ size=96 align=8
+ base size=92 base align=8
+QStyleOptionDockWidget (0x0x7b9f3bbaad00) 0
+QStyleOption (0x0x7b9f3babccc0) 0
+
+Class QStyleOptionViewItem
+ size=208 align=8
+ base size=208 base align=8
+QStyleOptionViewItem (0x0x7b9f3bbaad68) 0
+QStyleOption (0x0x7b9f3babcf00) 0
+
+Class QStyleOptionToolBox
+ size=104 align=8
+ base size=104 base align=8
+QStyleOptionToolBox (0x0x7b9f3bbaaea0) 0
+QStyleOption (0x0x7b9f3bb5c600) 0
+
+Class QStyleOptionRubberBand
+ size=72 align=8
+ base size=69 base align=8
+QStyleOptionRubberBand (0x0x7b9f3bbaaf08) 0
+QStyleOption (0x0x7b9f3bb5c840) 0
+
+Class QStyleOptionComplex
+ size=72 align=8
+ base size=72 base align=8
+QStyleOptionComplex (0x0x7b9f3bbaaf70) 0
+QStyleOption (0x0x7b9f3bb5cae0) 0
+
+Class QStyleOptionSlider
+ size=128 align=8
+ base size=128 base align=8
+QStyleOptionSlider (0x0x7b9f3b7dd000) 0
+QStyleOptionComplex (0x0x7b9f3b7dd068) 0
+QStyleOption (0x0x7b9f3bb5cd80) 0
+
+Class QStyleOptionSpinBox
+ size=88 align=8
+ base size=81 base align=8
+QStyleOptionSpinBox (0x0x7b9f3b7dd138) 0
+QStyleOptionComplex (0x0x7b9f3b7dd1a0) 0
+QStyleOption (0x0x7b9f3b7ed120) 0
+
+Class QStyleOptionToolButton
+ size=152 align=8
+ base size=152 base align=8
+QStyleOptionToolButton (0x0x7b9f3b7dd270) 0
+QStyleOptionComplex (0x0x7b9f3b7dd2d8) 0
+QStyleOption (0x0x7b9f3b7ed360) 0
+
+Class QStyleOptionComboBox
+ size=144 align=8
+ base size=140 base align=8
+QStyleOptionComboBox (0x0x7b9f3b7dd410) 0
+QStyleOptionComplex (0x0x7b9f3b7dd478) 0
+QStyleOption (0x0x7b9f3b7eda20) 0
+
+Class QStyleOptionTitleBar
+ size=112 align=8
+ base size=112 base align=8
+QStyleOptionTitleBar (0x0x7b9f3b7dd4e0) 0
+QStyleOptionComplex (0x0x7b9f3b7dd548) 0
+QStyleOption (0x0x7b9f3b7edc60) 0
+
+Class QStyleOptionGroupBox
+ size=136 align=8
+ base size=132 base align=8
+QStyleOptionGroupBox (0x0x7b9f3b7dd5b0) 0
+QStyleOptionComplex (0x0x7b9f3b7dd618) 0
+QStyleOption (0x0x7b9f3b7edea0) 0
+
+Class QStyleOptionSizeGrip
+ size=80 align=8
+ base size=76 base align=8
+QStyleOptionSizeGrip (0x0x7b9f3b7dd680) 0
+QStyleOptionComplex (0x0x7b9f3b7dd6e8) 0
+QStyleOption (0x0x7b9f3b87d120) 0
+
+Class QStyleOptionGraphicsItem
+ size=96 align=8
+ base size=96 base align=8
+QStyleOptionGraphicsItem (0x0x7b9f3b7dd750) 0
+QStyleOption (0x0x7b9f3b87d360) 0
+
+Class QStyleHintReturn
+ size=8 align=4
+ base size=8 base align=4
+QStyleHintReturn (0x0x7b9f3b87d6c0) 0
+
+Class QStyleHintReturnMask
+ size=16 align=8
+ base size=16 base align=8
+QStyleHintReturnMask (0x0x7b9f3b7dd7b8) 0
+QStyleHintReturn (0x0x7b9f3b87d720) 0
+
+Class QStyleHintReturnVariant
+ size=40 align=8
+ base size=40 base align=8
+QStyleHintReturnVariant (0x0x7b9f3b7dd888) 0
+QStyleHintReturn (0x0x7b9f3b87d780) 0
+
+Class QAbstractItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemDelegate::QPrivateSignal (0x0x7b9f3b87d900) 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 (0x0x7b9f3b7dd958) 0
+ vptr=((& QAbstractItemDelegate::_ZTV21QAbstractItemDelegate) + 16)
+QObject (0x0x7b9f3b87d8a0) 0
+ primary-for QAbstractItemDelegate (0x0x7b9f3b7dd958)
+
+Class QAbstractScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractScrollArea::QPrivateSignal (0x0x7b9f3b87db40) 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 (0x0x7b9f3b7dd9c0) 0
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 16)
+QFrame (0x0x7b9f3b7dda28) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3b7dd9c0)
+QWidget (0x0x7b9f3b891770) 0
+ primary-for QFrame (0x0x7b9f3b7dda28)
+QObject (0x0x7b9f3b87da80) 0
+ primary-for QWidget (0x0x7b9f3b891770)
+QPaintDevice (0x0x7b9f3b87dae0) 16
+ vptr=((& QAbstractScrollArea::_ZTV19QAbstractScrollArea) + 488)
+
+Class QAbstractItemView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemView::QPrivateSignal (0x0x7b9f3b87de40) 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 (0x0x7b9f3b7dda90) 0
+ vptr=((& QAbstractItemView::_ZTV17QAbstractItemView) + 16)
+QAbstractScrollArea (0x0x7b9f3b7ddaf8) 0
+ primary-for QAbstractItemView (0x0x7b9f3b7dda90)
+QFrame (0x0x7b9f3b7ddb60) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3b7ddaf8)
+QWidget (0x0x7b9f3b891b60) 0
+ primary-for QFrame (0x0x7b9f3b7ddb60)
+QObject (0x0x7b9f3b87dd80) 0
+ primary-for QWidget (0x0x7b9f3b891b60)
+QPaintDevice (0x0x7b9f3b87dde0) 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 (0x0x7b9f3b90daf0) 0
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 16)
+QAccessibleObject (0x0x7b9f3b7ddc98) 0
+ primary-for QAccessibleWidget (0x0x7b9f3b90daf0)
+QAccessibleInterface (0x0x7b9f3b91d960) 0 nearly-empty
+ primary-for QAccessibleObject (0x0x7b9f3b7ddc98)
+QAccessibleActionInterface (0x0x7b9f3b91d9c0) 16 nearly-empty
+ vptr=((& QAccessibleWidget::_ZTV17QAccessibleWidget) + 224)
+
+Class QApplication::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QApplication::QPrivateSignal (0x0x7b9f3b91dae0) 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 (0x0x7b9f3b7ddd00) 0
+ vptr=((& QApplication::_ZTV12QApplication) + 16)
+QGuiApplication (0x0x7b9f3b7ddd68) 0
+ primary-for QApplication (0x0x7b9f3b7ddd00)
+QCoreApplication (0x0x7b9f3b7dddd0) 0
+ primary-for QGuiApplication (0x0x7b9f3b7ddd68)
+QObject (0x0x7b9f3b91da80) 0
+ primary-for QCoreApplication (0x0x7b9f3b7dddd0)
+
+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 (0x0x7b9f3b91dd80) 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 (0x0x7b9f3b7dde38) 0
+ vptr=((& QSpacerItem::_ZTV11QSpacerItem) + 16)
+QLayoutItem (0x0x7b9f3b5b0000) 0
+ primary-for QSpacerItem (0x0x7b9f3b7dde38)
+
+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 (0x0x7b9f3b7ddea0) 0
+ vptr=((& QWidgetItem::_ZTV11QWidgetItem) + 16)
+QLayoutItem (0x0x7b9f3b5b0240) 0
+ primary-for QWidgetItem (0x0x7b9f3b7ddea0)
+
+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 (0x0x7b9f3b7ddf08) 0
+ vptr=((& QWidgetItemV2::_ZTV13QWidgetItemV2) + 16)
+QWidgetItem (0x0x7b9f3b7ddf70) 0
+ primary-for QWidgetItemV2 (0x0x7b9f3b7ddf08)
+QLayoutItem (0x0x7b9f3b5b0420) 0
+ primary-for QWidgetItem (0x0x7b9f3b7ddf70)
+
+Class QLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLayout::QPrivateSignal (0x0x7b9f3b5b05a0) 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 (0x0x7b9f3b5af4d0) 0
+ vptr=((& QLayout::_ZTV7QLayout) + 16)
+QObject (0x0x7b9f3b5b04e0) 0
+ primary-for QLayout (0x0x7b9f3b5af4d0)
+QLayoutItem (0x0x7b9f3b5b0540) 16
+ vptr=((& QLayout::_ZTV7QLayout) + 272)
+
+Class QGridLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGridLayout::QPrivateSignal (0x0x7b9f3b5b08a0) 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 (0x0x7b9f3b7dd0d0) 0
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 16)
+QLayout (0x0x7b9f3b5afa10) 0
+ primary-for QGridLayout (0x0x7b9f3b7dd0d0)
+QObject (0x0x7b9f3b5b07e0) 0
+ primary-for QLayout (0x0x7b9f3b5afa10)
+QLayoutItem (0x0x7b9f3b5b0840) 16
+ vptr=((& QGridLayout::_ZTV11QGridLayout) + 304)
+
+Class QBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QBoxLayout::QPrivateSignal (0x0x7b9f3b5b0b40) 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 (0x0x7b9f3b615000) 0
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 16)
+QLayout (0x0x7b9f3b5afc40) 0
+ primary-for QBoxLayout (0x0x7b9f3b615000)
+QObject (0x0x7b9f3b5b0a80) 0
+ primary-for QLayout (0x0x7b9f3b5afc40)
+QLayoutItem (0x0x7b9f3b5b0ae0) 16
+ vptr=((& QBoxLayout::_ZTV10QBoxLayout) + 304)
+
+Class QHBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHBoxLayout::QPrivateSignal (0x0x7b9f3b5b0d80) 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 (0x0x7b9f3b615068) 0
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 16)
+QBoxLayout (0x0x7b9f3b6150d0) 0
+ primary-for QHBoxLayout (0x0x7b9f3b615068)
+QLayout (0x0x7b9f3b6320e0) 0
+ primary-for QBoxLayout (0x0x7b9f3b6150d0)
+QObject (0x0x7b9f3b5b0cc0) 0
+ primary-for QLayout (0x0x7b9f3b6320e0)
+QLayoutItem (0x0x7b9f3b5b0d20) 16
+ vptr=((& QHBoxLayout::_ZTV11QHBoxLayout) + 304)
+
+Class QVBoxLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QVBoxLayout::QPrivateSignal (0x0x7b9f3b5b0f00) 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 (0x0x7b9f3b615138) 0
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 16)
+QBoxLayout (0x0x7b9f3b6151a0) 0
+ primary-for QVBoxLayout (0x0x7b9f3b615138)
+QLayout (0x0x7b9f3b6321c0) 0
+ primary-for QBoxLayout (0x0x7b9f3b6151a0)
+QObject (0x0x7b9f3b5b0e40) 0
+ primary-for QLayout (0x0x7b9f3b6321c0)
+QLayoutItem (0x0x7b9f3b5b0ea0) 16
+ vptr=((& QVBoxLayout::_ZTV11QVBoxLayout) + 304)
+
+Class QButtonGroup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QButtonGroup::QPrivateSignal (0x0x7b9f3b64e060) 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 (0x0x7b9f3b615208) 0
+ vptr=((& QButtonGroup::_ZTV12QButtonGroup) + 16)
+QObject (0x0x7b9f3b64e000) 0
+ primary-for QButtonGroup (0x0x7b9f3b615208)
+
+Class QCalendarWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCalendarWidget::QPrivateSignal (0x0x7b9f3b64e2a0) 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 (0x0x7b9f3b615270) 0
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 16)
+QWidget (0x0x7b9f3b6323f0) 0
+ primary-for QCalendarWidget (0x0x7b9f3b615270)
+QObject (0x0x7b9f3b64e1e0) 0
+ primary-for QWidget (0x0x7b9f3b6323f0)
+QPaintDevice (0x0x7b9f3b64e240) 16
+ vptr=((& QCalendarWidget::_ZTV15QCalendarWidget) + 456)
+
+Class QCheckBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCheckBox::QPrivateSignal (0x0x7b9f3b64e720) 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 (0x0x7b9f3b6152d8) 0
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 16)
+QAbstractButton (0x0x7b9f3b615340) 0
+ primary-for QCheckBox (0x0x7b9f3b6152d8)
+QWidget (0x0x7b9f3b632bd0) 0
+ primary-for QAbstractButton (0x0x7b9f3b615340)
+QObject (0x0x7b9f3b64e660) 0
+ primary-for QWidget (0x0x7b9f3b632bd0)
+QPaintDevice (0x0x7b9f3b64e6c0) 16
+ vptr=((& QCheckBox::_ZTV9QCheckBox) + 480)
+
+Class QDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialog::QPrivateSignal (0x0x7b9f3b64e960) 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 (0x0x7b9f3b6153a8) 0
+ vptr=((& QDialog::_ZTV7QDialog) + 16)
+QWidget (0x0x7b9f3b632d90) 0
+ primary-for QDialog (0x0x7b9f3b6153a8)
+QObject (0x0x7b9f3b64e8a0) 0
+ primary-for QWidget (0x0x7b9f3b632d90)
+QPaintDevice (0x0x7b9f3b64e900) 16
+ vptr=((& QDialog::_ZTV7QDialog) + 488)
+
+Class QColorDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColorDialog::QPrivateSignal (0x0x7b9f3b64eba0) 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 (0x0x7b9f3b615410) 0
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 16)
+QDialog (0x0x7b9f3b615478) 0
+ primary-for QColorDialog (0x0x7b9f3b615410)
+QWidget (0x0x7b9f3b6ae070) 0
+ primary-for QDialog (0x0x7b9f3b615478)
+QObject (0x0x7b9f3b64eae0) 0
+ primary-for QWidget (0x0x7b9f3b6ae070)
+QPaintDevice (0x0x7b9f3b64eb40) 16
+ vptr=((& QColorDialog::_ZTV12QColorDialog) + 488)
+
+Class QColormap
+ size=8 align=8
+ base size=8 base align=8
+QColormap (0x0x7b9f3b6ed2a0) 0
+
+Class QColumnView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QColumnView::QPrivateSignal (0x0x7b9f3b6ed3c0) 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 (0x0x7b9f3b6155b0) 0
+ vptr=((& QColumnView::_ZTV11QColumnView) + 16)
+QAbstractItemView (0x0x7b9f3b615618) 0
+ primary-for QColumnView (0x0x7b9f3b6155b0)
+QAbstractScrollArea (0x0x7b9f3b615680) 0
+ primary-for QAbstractItemView (0x0x7b9f3b615618)
+QFrame (0x0x7b9f3b6156e8) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3b615680)
+QWidget (0x0x7b9f3b6ae930) 0
+ primary-for QFrame (0x0x7b9f3b6156e8)
+QObject (0x0x7b9f3b6ed300) 0
+ primary-for QWidget (0x0x7b9f3b6ae930)
+QPaintDevice (0x0x7b9f3b6ed360) 16
+ vptr=((& QColumnView::_ZTV11QColumnView) + 808)
+
+Class QComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QComboBox::QPrivateSignal (0x0x7b9f3b6ed600) 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 (0x0x7b9f3b615750) 0
+ vptr=((& QComboBox::_ZTV9QComboBox) + 16)
+QWidget (0x0x7b9f3b6aeaf0) 0
+ primary-for QComboBox (0x0x7b9f3b615750)
+QObject (0x0x7b9f3b6ed540) 0
+ primary-for QWidget (0x0x7b9f3b6aeaf0)
+QPaintDevice (0x0x7b9f3b6ed5a0) 16
+ vptr=((& QComboBox::_ZTV9QComboBox) + 480)
+
+Class QPushButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPushButton::QPrivateSignal (0x0x7b9f3b6edba0) 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 (0x0x7b9f3b6157b8) 0
+ vptr=((& QPushButton::_ZTV11QPushButton) + 16)
+QAbstractButton (0x0x7b9f3b615820) 0
+ primary-for QPushButton (0x0x7b9f3b6157b8)
+QWidget (0x0x7b9f3b76d540) 0
+ primary-for QAbstractButton (0x0x7b9f3b615820)
+QObject (0x0x7b9f3b6edae0) 0
+ primary-for QWidget (0x0x7b9f3b76d540)
+QPaintDevice (0x0x7b9f3b6edb40) 16
+ vptr=((& QPushButton::_ZTV11QPushButton) + 480)
+
+Class QCommandLinkButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommandLinkButton::QPrivateSignal (0x0x7b9f3b6edde0) 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 (0x0x7b9f3b615888) 0
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 16)
+QPushButton (0x0x7b9f3b6158f0) 0
+ primary-for QCommandLinkButton (0x0x7b9f3b615888)
+QAbstractButton (0x0x7b9f3b615958) 0
+ primary-for QPushButton (0x0x7b9f3b6158f0)
+QWidget (0x0x7b9f3b76d700) 0
+ primary-for QAbstractButton (0x0x7b9f3b615958)
+QObject (0x0x7b9f3b6edd20) 0
+ primary-for QWidget (0x0x7b9f3b76d700)
+QPaintDevice (0x0x7b9f3b6edd80) 16
+ vptr=((& QCommandLinkButton::_ZTV18QCommandLinkButton) + 480)
+
+Class QCommonStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCommonStyle::QPrivateSignal (0x0x7b9f3b3a7000) 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 (0x0x7b9f3b6159c0) 0
+ vptr=((& QCommonStyle::_ZTV12QCommonStyle) + 16)
+QStyle (0x0x7b9f3b615a28) 0
+ primary-for QCommonStyle (0x0x7b9f3b6159c0)
+QObject (0x0x7b9f3b6edf60) 0
+ primary-for QStyle (0x0x7b9f3b615a28)
+
+Class QCompleter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QCompleter::QPrivateSignal (0x0x7b9f3b3a71e0) 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 (0x0x7b9f3b615a90) 0
+ vptr=((& QCompleter::_ZTV10QCompleter) + 16)
+QObject (0x0x7b9f3b3a7180) 0
+ primary-for QCompleter (0x0x7b9f3b615a90)
+
+Class QDataWidgetMapper::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDataWidgetMapper::QPrivateSignal (0x0x7b9f3b3a7540) 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 (0x0x7b9f3b615af8) 0
+ vptr=((& QDataWidgetMapper::_ZTV17QDataWidgetMapper) + 16)
+QObject (0x0x7b9f3b3a74e0) 0
+ primary-for QDataWidgetMapper (0x0x7b9f3b615af8)
+
+Class QDateTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateTimeEdit::QPrivateSignal (0x0x7b9f3b3a7840) 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 (0x0x7b9f3b615b60) 0
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 16)
+QAbstractSpinBox (0x0x7b9f3b615bc8) 0
+ primary-for QDateTimeEdit (0x0x7b9f3b615b60)
+QWidget (0x0x7b9f3b3e1310) 0
+ primary-for QAbstractSpinBox (0x0x7b9f3b615bc8)
+QObject (0x0x7b9f3b3a7780) 0
+ primary-for QWidget (0x0x7b9f3b3e1310)
+QPaintDevice (0x0x7b9f3b3a77e0) 16
+ vptr=((& QDateTimeEdit::_ZTV13QDateTimeEdit) + 512)
+
+Class QTimeEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTimeEdit::QPrivateSignal (0x0x7b9f3b3a7de0) 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 (0x0x7b9f3b615d00) 0
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 16)
+QDateTimeEdit (0x0x7b9f3b615d68) 0
+ primary-for QTimeEdit (0x0x7b9f3b615d00)
+QAbstractSpinBox (0x0x7b9f3b615dd0) 0
+ primary-for QDateTimeEdit (0x0x7b9f3b615d68)
+QWidget (0x0x7b9f3b3e1b60) 0
+ primary-for QAbstractSpinBox (0x0x7b9f3b615dd0)
+QObject (0x0x7b9f3b3a7d20) 0
+ primary-for QWidget (0x0x7b9f3b3e1b60)
+QPaintDevice (0x0x7b9f3b3a7d80) 16
+ vptr=((& QTimeEdit::_ZTV9QTimeEdit) + 512)
+
+Class QDateEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDateEdit::QPrivateSignal (0x0x7b9f3b3a7f60) 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 (0x0x7b9f3b615e38) 0
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 16)
+QDateTimeEdit (0x0x7b9f3b615ea0) 0
+ primary-for QDateEdit (0x0x7b9f3b615e38)
+QAbstractSpinBox (0x0x7b9f3b615f08) 0
+ primary-for QDateTimeEdit (0x0x7b9f3b615ea0)
+QWidget (0x0x7b9f3b3e1c40) 0
+ primary-for QAbstractSpinBox (0x0x7b9f3b615f08)
+QObject (0x0x7b9f3b3a7ea0) 0
+ primary-for QWidget (0x0x7b9f3b3e1c40)
+QPaintDevice (0x0x7b9f3b3a7f00) 16
+ vptr=((& QDateEdit::_ZTV9QDateEdit) + 512)
+
+Class QDial::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDial::QPrivateSignal (0x0x7b9f3b44b3c0) 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 (0x0x7b9f3b615f70) 0
+ vptr=((& QDial::_ZTV5QDial) + 16)
+QAbstractSlider (0x0x7b9f3b48e000) 0
+ primary-for QDial (0x0x7b9f3b615f70)
+QWidget (0x0x7b9f3b48d070) 0
+ primary-for QAbstractSlider (0x0x7b9f3b48e000)
+QObject (0x0x7b9f3b44b300) 0
+ primary-for QWidget (0x0x7b9f3b48d070)
+QPaintDevice (0x0x7b9f3b44b360) 16
+ vptr=((& QDial::_ZTV5QDial) + 464)
+
+Class QDialogButtonBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDialogButtonBox::QPrivateSignal (0x0x7b9f3b44b600) 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 (0x0x7b9f3b48e068) 0
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 16)
+QWidget (0x0x7b9f3b48d230) 0
+ primary-for QDialogButtonBox (0x0x7b9f3b48e068)
+QObject (0x0x7b9f3b44b540) 0
+ primary-for QWidget (0x0x7b9f3b48d230)
+QPaintDevice (0x0x7b9f3b44b5a0) 16
+ vptr=((& QDialogButtonBox::_ZTV16QDialogButtonBox) + 448)
+
+Class QDockWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDockWidget::QPrivateSignal (0x0x7b9f3b44bd80) 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 (0x0x7b9f3b48e1a0) 0
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 16)
+QWidget (0x0x7b9f3b4a5850) 0
+ primary-for QDockWidget (0x0x7b9f3b48e1a0)
+QObject (0x0x7b9f3b44bcc0) 0
+ primary-for QWidget (0x0x7b9f3b4a5850)
+QPaintDevice (0x0x7b9f3b44bd20) 16
+ vptr=((& QDockWidget::_ZTV11QDockWidget) + 456)
+
+Class QTileRules
+ size=8 align=4
+ base size=8 base align=4
+QTileRules (0x0x7b9f3b5415a0) 0
+
+Class QErrorMessage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QErrorMessage::QPrivateSignal (0x0x7b9f3b541c00) 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 (0x0x7b9f3b48e3a8) 0
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 16)
+QDialog (0x0x7b9f3b48e410) 0
+ primary-for QErrorMessage (0x0x7b9f3b48e3a8)
+QWidget (0x0x7b9f3b56cc40) 0
+ primary-for QDialog (0x0x7b9f3b48e410)
+QObject (0x0x7b9f3b541b40) 0
+ primary-for QWidget (0x0x7b9f3b56cc40)
+QPaintDevice (0x0x7b9f3b541ba0) 16
+ vptr=((& QErrorMessage::_ZTV13QErrorMessage) + 488)
+
+Class QFileDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFileDialog::QPrivateSignal (0x0x7b9f3b541e40) 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 (0x0x7b9f3b48e478) 0
+ vptr=((& QFileDialog::_ZTV11QFileDialog) + 16)
+QDialog (0x0x7b9f3b48e4e0) 0
+ primary-for QFileDialog (0x0x7b9f3b48e478)
+QWidget (0x0x7b9f3b56ce00) 0
+ primary-for QDialog (0x0x7b9f3b48e4e0)
+QObject (0x0x7b9f3b541d80) 0
+ primary-for QWidget (0x0x7b9f3b56ce00)
+QPaintDevice (0x0x7b9f3b541de0) 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 (0x0x7b9f3b48e618) 0
+ vptr=((& QFileIconProvider::_ZTV17QFileIconProvider) + 16)
+QAbstractFileIconProvider (0x0x7b9f3b2078a0) 0
+ primary-for QFileIconProvider (0x0x7b9f3b48e618)
+
+Class QFocusFrame::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFocusFrame::QPrivateSignal (0x0x7b9f3b207a80) 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 (0x0x7b9f3b48e680) 0
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 16)
+QWidget (0x0x7b9f3b25f1c0) 0
+ primary-for QFocusFrame (0x0x7b9f3b48e680)
+QObject (0x0x7b9f3b2079c0) 0
+ primary-for QWidget (0x0x7b9f3b25f1c0)
+QPaintDevice (0x0x7b9f3b207a20) 16
+ vptr=((& QFocusFrame::_ZTV11QFocusFrame) + 456)
+
+Class QFontComboBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontComboBox::QPrivateSignal (0x0x7b9f3b207cc0) 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 (0x0x7b9f3b48e6e8) 0
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 16)
+QComboBox (0x0x7b9f3b48e750) 0
+ primary-for QFontComboBox (0x0x7b9f3b48e6e8)
+QWidget (0x0x7b9f3b25f380) 0
+ primary-for QComboBox (0x0x7b9f3b48e750)
+QObject (0x0x7b9f3b207c00) 0
+ primary-for QWidget (0x0x7b9f3b25f380)
+QPaintDevice (0x0x7b9f3b207c60) 16
+ vptr=((& QFontComboBox::_ZTV13QFontComboBox) + 480)
+
+Class QFontDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFontDialog::QPrivateSignal (0x0x7b9f3b2b2480) 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 (0x0x7b9f3b48e888) 0
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 16)
+QDialog (0x0x7b9f3b48e8f0) 0
+ primary-for QFontDialog (0x0x7b9f3b48e888)
+QWidget (0x0x7b9f3b25fb60) 0
+ primary-for QDialog (0x0x7b9f3b48e8f0)
+QObject (0x0x7b9f3b2b23c0) 0
+ primary-for QWidget (0x0x7b9f3b25fb60)
+QPaintDevice (0x0x7b9f3b2b2420) 16
+ vptr=((& QFontDialog::_ZTV11QFontDialog) + 488)
+
+Class QFormLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QFormLayout::QPrivateSignal (0x0x7b9f3b2b2c00) 0 empty
+
+Class QFormLayout::TakeRowResult
+ size=16 align=8
+ base size=16 base align=8
+QFormLayout::TakeRowResult (0x0x7b9f3b2b2c60) 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 (0x0x7b9f3b48ea28) 0
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 16)
+QLayout (0x0x7b9f3b3263f0) 0
+ primary-for QFormLayout (0x0x7b9f3b48ea28)
+QObject (0x0x7b9f3b2b2b40) 0
+ primary-for QLayout (0x0x7b9f3b3263f0)
+QLayoutItem (0x0x7b9f3b2b2ba0) 16
+ vptr=((& QFormLayout::_ZTV11QFormLayout) + 296)
+
+Class QGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGesture::QPrivateSignal (0x0x7b9f3b00ede0) 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 (0x0x7b9f3b016750) 0
+ vptr=((& QGesture::_ZTV8QGesture) + 16)
+QObject (0x0x7b9f3b00ed80) 0
+ primary-for QGesture (0x0x7b9f3b016750)
+
+Class QPanGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPanGesture::QPrivateSignal (0x0x7b9f3b03f000) 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 (0x0x7b9f3b0167b8) 0
+ vptr=((& QPanGesture::_ZTV11QPanGesture) + 16)
+QGesture (0x0x7b9f3b016820) 0
+ primary-for QPanGesture (0x0x7b9f3b0167b8)
+QObject (0x0x7b9f3b00ef60) 0
+ primary-for QGesture (0x0x7b9f3b016820)
+
+Class QPinchGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPinchGesture::QPrivateSignal (0x0x7b9f3b03f1e0) 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 (0x0x7b9f3b016888) 0
+ vptr=((& QPinchGesture::_ZTV13QPinchGesture) + 16)
+QGesture (0x0x7b9f3b0168f0) 0
+ primary-for QPinchGesture (0x0x7b9f3b016888)
+QObject (0x0x7b9f3b03f180) 0
+ primary-for QGesture (0x0x7b9f3b0168f0)
+
+Class QSwipeGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSwipeGesture::QPrivateSignal (0x0x7b9f3b10a480) 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 (0x0x7b9f3b10eb60) 0
+ vptr=((& QSwipeGesture::_ZTV13QSwipeGesture) + 16)
+QGesture (0x0x7b9f3b10ebc8) 0
+ primary-for QSwipeGesture (0x0x7b9f3b10eb60)
+QObject (0x0x7b9f3b10a420) 0
+ primary-for QGesture (0x0x7b9f3b10ebc8)
+
+Class QTapGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapGesture::QPrivateSignal (0x0x7b9f3b10a720) 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 (0x0x7b9f3b10ec30) 0
+ vptr=((& QTapGesture::_ZTV11QTapGesture) + 16)
+QGesture (0x0x7b9f3b10ec98) 0
+ primary-for QTapGesture (0x0x7b9f3b10ec30)
+QObject (0x0x7b9f3b10a6c0) 0
+ primary-for QGesture (0x0x7b9f3b10ec98)
+
+Class QTapAndHoldGesture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTapAndHoldGesture::QPrivateSignal (0x0x7b9f3b10a900) 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 (0x0x7b9f3b10ed00) 0
+ vptr=((& QTapAndHoldGesture::_ZTV18QTapAndHoldGesture) + 16)
+QGesture (0x0x7b9f3b10ed68) 0
+ primary-for QTapAndHoldGesture (0x0x7b9f3b10ed00)
+QObject (0x0x7b9f3b10a8a0) 0
+ primary-for QGesture (0x0x7b9f3b10ed68)
+
+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 (0x0x7b9f3b10edd0) 0
+ vptr=((& QGestureEvent::_ZTV13QGestureEvent) + 16)
+QEvent (0x0x7b9f3b10aa80) 0
+ primary-for QGestureEvent (0x0x7b9f3b10edd0)
+
+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 (0x0x7b9f3ae1cf60) 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 (0x0x7b9f3ae5b480) 0
+ vptr=((& QGraphicsItem::_ZTV13QGraphicsItem) + 16)
+
+Class QGraphicsObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsObject::QPrivateSignal (0x0x7b9f3af7f9c0) 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 (0x0x7b9f3af79b60) 0
+ vptr=((& QGraphicsObject::_ZTV15QGraphicsObject) + 16)
+QObject (0x0x7b9f3af7f900) 0
+ primary-for QGraphicsObject (0x0x7b9f3af79b60)
+QGraphicsItem (0x0x7b9f3af7f960) 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 (0x0x7b9f3ae50680) 0
+ vptr=((& QAbstractGraphicsShapeItem::_ZTV26QAbstractGraphicsShapeItem) + 16)
+QGraphicsItem (0x0x7b9f3af7fa80) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7b9f3ae50680)
+
+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 (0x0x7b9f3ae506e8) 0
+ vptr=((& QGraphicsPathItem::_ZTV17QGraphicsPathItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7b9f3ae50750) 0
+ primary-for QGraphicsPathItem (0x0x7b9f3ae506e8)
+QGraphicsItem (0x0x7b9f3af7fba0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7b9f3ae50750)
+
+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 (0x0x7b9f3ae507b8) 0
+ vptr=((& QGraphicsRectItem::_ZTV17QGraphicsRectItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7b9f3ae50820) 0
+ primary-for QGraphicsRectItem (0x0x7b9f3ae507b8)
+QGraphicsItem (0x0x7b9f3af7fcc0) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7b9f3ae50820)
+
+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 (0x0x7b9f3ae50888) 0
+ vptr=((& QGraphicsEllipseItem::_ZTV20QGraphicsEllipseItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7b9f3ae508f0) 0
+ primary-for QGraphicsEllipseItem (0x0x7b9f3ae50888)
+QGraphicsItem (0x0x7b9f3af7fe40) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7b9f3ae508f0)
+
+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 (0x0x7b9f3ae50958) 0
+ vptr=((& QGraphicsPolygonItem::_ZTV20QGraphicsPolygonItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7b9f3ae509c0) 0
+ primary-for QGraphicsPolygonItem (0x0x7b9f3ae50958)
+QGraphicsItem (0x0x7b9f3abec000) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7b9f3ae509c0)
+
+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 (0x0x7b9f3ae50a28) 0
+ vptr=((& QGraphicsLineItem::_ZTV17QGraphicsLineItem) + 16)
+QGraphicsItem (0x0x7b9f3abec120) 0
+ primary-for QGraphicsLineItem (0x0x7b9f3ae50a28)
+
+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 (0x0x7b9f3ae50a90) 0
+ vptr=((& QGraphicsPixmapItem::_ZTV19QGraphicsPixmapItem) + 16)
+QGraphicsItem (0x0x7b9f3abec2a0) 0
+ primary-for QGraphicsPixmapItem (0x0x7b9f3ae50a90)
+
+Class QGraphicsTextItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTextItem::QPrivateSignal (0x0x7b9f3abec4e0) 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 (0x0x7b9f3ae50af8) 0
+ vptr=((& QGraphicsTextItem::_ZTV17QGraphicsTextItem) + 16)
+QGraphicsObject (0x0x7b9f3abd5850) 0
+ primary-for QGraphicsTextItem (0x0x7b9f3ae50af8)
+QObject (0x0x7b9f3abec420) 0
+ primary-for QGraphicsObject (0x0x7b9f3abd5850)
+QGraphicsItem (0x0x7b9f3abec480) 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 (0x0x7b9f3ae50c30) 0
+ vptr=((& QGraphicsSimpleTextItem::_ZTV23QGraphicsSimpleTextItem) + 16)
+QAbstractGraphicsShapeItem (0x0x7b9f3ae50c98) 0
+ primary-for QGraphicsSimpleTextItem (0x0x7b9f3ae50c30)
+QGraphicsItem (0x0x7b9f3abec780) 0
+ primary-for QAbstractGraphicsShapeItem (0x0x7b9f3ae50c98)
+
+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 (0x0x7b9f3ae50d00) 0
+ vptr=((& QGraphicsItemGroup::_ZTV18QGraphicsItemGroup) + 16)
+QGraphicsItem (0x0x7b9f3abec8a0) 0
+ primary-for QGraphicsItemGroup (0x0x7b9f3ae50d00)
+
+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 (0x0x7b9f3ac72d80) 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 (0x0x7b9f3ac70958) 0
+ vptr=((& QGraphicsLayout::_ZTV15QGraphicsLayout) + 16)
+QGraphicsLayoutItem (0x0x7b9f3acad660) 0
+ primary-for QGraphicsLayout (0x0x7b9f3ac70958)
+
+Class QGraphicsAnchor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsAnchor::QPrivateSignal (0x0x7b9f3acadb40) 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 (0x0x7b9f3ac70a90) 0
+ vptr=((& QGraphicsAnchor::_ZTV15QGraphicsAnchor) + 16)
+QObject (0x0x7b9f3acadae0) 0
+ primary-for QGraphicsAnchor (0x0x7b9f3ac70a90)
+
+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 (0x0x7b9f3ac70af8) 0
+ vptr=((& QGraphicsAnchorLayout::_ZTV21QGraphicsAnchorLayout) + 16)
+QGraphicsLayout (0x0x7b9f3ac70b60) 0
+ primary-for QGraphicsAnchorLayout (0x0x7b9f3ac70af8)
+QGraphicsLayoutItem (0x0x7b9f3acadcc0) 0
+ primary-for QGraphicsLayout (0x0x7b9f3ac70b60)
+
+Class QGraphicsEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsEffect::QPrivateSignal (0x0x7b9f3acade40) 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 (0x0x7b9f3ac70bc8) 0
+ vptr=((& QGraphicsEffect::_ZTV15QGraphicsEffect) + 16)
+QObject (0x0x7b9f3acadde0) 0
+ primary-for QGraphicsEffect (0x0x7b9f3ac70bc8)
+
+Class QGraphicsColorizeEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsColorizeEffect::QPrivateSignal (0x0x7b9f3acff5a0) 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 (0x0x7b9f3ac70d00) 0
+ vptr=((& QGraphicsColorizeEffect::_ZTV23QGraphicsColorizeEffect) + 16)
+QGraphicsEffect (0x0x7b9f3ac70d68) 0
+ primary-for QGraphicsColorizeEffect (0x0x7b9f3ac70d00)
+QObject (0x0x7b9f3acff540) 0
+ primary-for QGraphicsEffect (0x0x7b9f3ac70d68)
+
+Class QGraphicsBlurEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsBlurEffect::QPrivateSignal (0x0x7b9f3acff780) 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 (0x0x7b9f3ac70dd0) 0
+ vptr=((& QGraphicsBlurEffect::_ZTV19QGraphicsBlurEffect) + 16)
+QGraphicsEffect (0x0x7b9f3ac70e38) 0
+ primary-for QGraphicsBlurEffect (0x0x7b9f3ac70dd0)
+QObject (0x0x7b9f3acff720) 0
+ primary-for QGraphicsEffect (0x0x7b9f3ac70e38)
+
+Class QGraphicsDropShadowEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsDropShadowEffect::QPrivateSignal (0x0x7b9f3acfff60) 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 (0x0x7b9f3ac70f70) 0
+ vptr=((& QGraphicsDropShadowEffect::_ZTV25QGraphicsDropShadowEffect) + 16)
+QGraphicsEffect (0x0x7b9f3a9d5000) 0
+ primary-for QGraphicsDropShadowEffect (0x0x7b9f3ac70f70)
+QObject (0x0x7b9f3acfff00) 0
+ primary-for QGraphicsEffect (0x0x7b9f3a9d5000)
+
+Class QGraphicsOpacityEffect::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsOpacityEffect::QPrivateSignal (0x0x7b9f3a9e73c0) 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 (0x0x7b9f3a9d5068) 0
+ vptr=((& QGraphicsOpacityEffect::_ZTV22QGraphicsOpacityEffect) + 16)
+QGraphicsEffect (0x0x7b9f3a9d50d0) 0
+ primary-for QGraphicsOpacityEffect (0x0x7b9f3a9d5068)
+QObject (0x0x7b9f3a9e7360) 0
+ primary-for QGraphicsEffect (0x0x7b9f3a9d50d0)
+
+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 (0x0x7b9f3a9d5138) 0
+ vptr=((& QGraphicsGridLayout::_ZTV19QGraphicsGridLayout) + 16)
+QGraphicsLayout (0x0x7b9f3a9d51a0) 0
+ primary-for QGraphicsGridLayout (0x0x7b9f3a9d5138)
+QGraphicsLayoutItem (0x0x7b9f3a9e7540) 0
+ primary-for QGraphicsLayout (0x0x7b9f3a9d51a0)
+
+Class QGraphicsItemAnimation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsItemAnimation::QPrivateSignal (0x0x7b9f3a9e7720) 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 (0x0x7b9f3a9d52d8) 0
+ vptr=((& QGraphicsItemAnimation::_ZTV22QGraphicsItemAnimation) + 16)
+QObject (0x0x7b9f3a9e76c0) 0
+ primary-for QGraphicsItemAnimation (0x0x7b9f3a9d52d8)
+
+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 (0x0x7b9f3a9d5340) 0
+ vptr=((& QGraphicsLinearLayout::_ZTV21QGraphicsLinearLayout) + 16)
+QGraphicsLayout (0x0x7b9f3a9d53a8) 0
+ primary-for QGraphicsLinearLayout (0x0x7b9f3a9d5340)
+QGraphicsLayoutItem (0x0x7b9f3a9e77e0) 0
+ primary-for QGraphicsLayout (0x0x7b9f3a9d53a8)
+
+Class QGraphicsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsWidget::QPrivateSignal (0x0x7b9f3a9e7ae0) 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 (0x0x7b9f3a9b6a80) 0
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 16)
+QGraphicsObject (0x0x7b9f3a9b6af0) 0
+ primary-for QGraphicsWidget (0x0x7b9f3a9b6a80)
+QObject (0x0x7b9f3a9e79c0) 0
+ primary-for QGraphicsObject (0x0x7b9f3a9b6af0)
+QGraphicsItem (0x0x7b9f3a9e7a20) 16
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 376)
+QGraphicsLayoutItem (0x0x7b9f3a9e7a80) 32
+ vptr=((& QGraphicsWidget::_ZTV15QGraphicsWidget) + 688)
+
+Class QGraphicsProxyWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsProxyWidget::QPrivateSignal (0x0x7b9f3a9e7f60) 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 (0x0x7b9f3a9d54e0) 0
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 16)
+QGraphicsWidget (0x0x7b9f3a9b6ee0) 0
+ primary-for QGraphicsProxyWidget (0x0x7b9f3a9d54e0)
+QGraphicsObject (0x0x7b9f3a9b6f50) 0
+ primary-for QGraphicsWidget (0x0x7b9f3a9b6ee0)
+QObject (0x0x7b9f3a9e7e40) 0
+ primary-for QGraphicsObject (0x0x7b9f3a9b6f50)
+QGraphicsItem (0x0x7b9f3a9e7ea0) 16
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 496)
+QGraphicsLayoutItem (0x0x7b9f3a9e7f00) 32
+ vptr=((& QGraphicsProxyWidget::_ZTV20QGraphicsProxyWidget) + 808)
+
+Class QGraphicsScene::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScene::QPrivateSignal (0x0x7b9f3aa86300) 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 (0x0x7b9f3a9d56e8) 0
+ vptr=((& QGraphicsScene::_ZTV14QGraphicsScene) + 16)
+QObject (0x0x7b9f3aa862a0) 0
+ primary-for QGraphicsScene (0x0x7b9f3a9d56e8)
+
+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 (0x0x7b9f3a9d5e38) 0
+ vptr=((& QGraphicsSceneEvent::_ZTV19QGraphicsSceneEvent) + 16)
+QEvent (0x0x7b9f3ab50540) 0
+ primary-for QGraphicsSceneEvent (0x0x7b9f3a9d5e38)
+
+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 (0x0x7b9f3a9d5ea0) 0
+ vptr=((& QGraphicsSceneMouseEvent::_ZTV24QGraphicsSceneMouseEvent) + 16)
+QGraphicsSceneEvent (0x0x7b9f3a9d5f08) 0
+ primary-for QGraphicsSceneMouseEvent (0x0x7b9f3a9d5ea0)
+QEvent (0x0x7b9f3ab50720) 0
+ primary-for QGraphicsSceneEvent (0x0x7b9f3a9d5f08)
+
+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 (0x0x7b9f3a9d5f70) 0
+ vptr=((& QGraphicsSceneWheelEvent::_ZTV24QGraphicsSceneWheelEvent) + 16)
+QGraphicsSceneEvent (0x0x7b9f3a9d5dd0) 0
+ primary-for QGraphicsSceneWheelEvent (0x0x7b9f3a9d5f70)
+QEvent (0x0x7b9f3ab50840) 0
+ primary-for QGraphicsSceneEvent (0x0x7b9f3a9d5dd0)
+
+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 (0x0x7b9f3a7ca000) 0
+ vptr=((& QGraphicsSceneContextMenuEvent::_ZTV30QGraphicsSceneContextMenuEvent) + 16)
+QGraphicsSceneEvent (0x0x7b9f3a7ca068) 0
+ primary-for QGraphicsSceneContextMenuEvent (0x0x7b9f3a7ca000)
+QEvent (0x0x7b9f3ab50960) 0
+ primary-for QGraphicsSceneEvent (0x0x7b9f3a7ca068)
+
+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 (0x0x7b9f3a7ca0d0) 0
+ vptr=((& QGraphicsSceneHoverEvent::_ZTV24QGraphicsSceneHoverEvent) + 16)
+QGraphicsSceneEvent (0x0x7b9f3a7ca138) 0
+ primary-for QGraphicsSceneHoverEvent (0x0x7b9f3a7ca0d0)
+QEvent (0x0x7b9f3ab50a80) 0
+ primary-for QGraphicsSceneEvent (0x0x7b9f3a7ca138)
+
+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 (0x0x7b9f3a7ca1a0) 0
+ vptr=((& QGraphicsSceneHelpEvent::_ZTV23QGraphicsSceneHelpEvent) + 16)
+QGraphicsSceneEvent (0x0x7b9f3a7ca208) 0
+ primary-for QGraphicsSceneHelpEvent (0x0x7b9f3a7ca1a0)
+QEvent (0x0x7b9f3ab50ba0) 0
+ primary-for QGraphicsSceneEvent (0x0x7b9f3a7ca208)
+
+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 (0x0x7b9f3a7ca270) 0
+ vptr=((& QGraphicsSceneDragDropEvent::_ZTV27QGraphicsSceneDragDropEvent) + 16)
+QGraphicsSceneEvent (0x0x7b9f3a7ca2d8) 0
+ primary-for QGraphicsSceneDragDropEvent (0x0x7b9f3a7ca270)
+QEvent (0x0x7b9f3ab50cc0) 0
+ primary-for QGraphicsSceneEvent (0x0x7b9f3a7ca2d8)
+
+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 (0x0x7b9f3a7ca340) 0
+ vptr=((& QGraphicsSceneResizeEvent::_ZTV25QGraphicsSceneResizeEvent) + 16)
+QGraphicsSceneEvent (0x0x7b9f3a7ca3a8) 0
+ primary-for QGraphicsSceneResizeEvent (0x0x7b9f3a7ca340)
+QEvent (0x0x7b9f3ab50de0) 0
+ primary-for QGraphicsSceneEvent (0x0x7b9f3a7ca3a8)
+
+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 (0x0x7b9f3a7ca410) 0
+ vptr=((& QGraphicsSceneMoveEvent::_ZTV23QGraphicsSceneMoveEvent) + 16)
+QGraphicsSceneEvent (0x0x7b9f3a7ca478) 0
+ primary-for QGraphicsSceneMoveEvent (0x0x7b9f3a7ca410)
+QEvent (0x0x7b9f3ab50f00) 0
+ primary-for QGraphicsSceneEvent (0x0x7b9f3a7ca478)
+
+Class QGraphicsTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsTransform::QPrivateSignal (0x0x7b9f3a7ff0c0) 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 (0x0x7b9f3a7ca4e0) 0
+ vptr=((& QGraphicsTransform::_ZTV18QGraphicsTransform) + 16)
+QObject (0x0x7b9f3a7ff060) 0
+ primary-for QGraphicsTransform (0x0x7b9f3a7ca4e0)
+
+Class QGraphicsScale::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsScale::QPrivateSignal (0x0x7b9f3a7ff2a0) 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 (0x0x7b9f3a7ca548) 0
+ vptr=((& QGraphicsScale::_ZTV14QGraphicsScale) + 16)
+QGraphicsTransform (0x0x7b9f3a7ca5b0) 0
+ primary-for QGraphicsScale (0x0x7b9f3a7ca548)
+QObject (0x0x7b9f3a7ff240) 0
+ primary-for QGraphicsTransform (0x0x7b9f3a7ca5b0)
+
+Class QGraphicsRotation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsRotation::QPrivateSignal (0x0x7b9f3a7ff480) 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 (0x0x7b9f3a7ca618) 0
+ vptr=((& QGraphicsRotation::_ZTV17QGraphicsRotation) + 16)
+QGraphicsTransform (0x0x7b9f3a7ca680) 0
+ primary-for QGraphicsRotation (0x0x7b9f3a7ca618)
+QObject (0x0x7b9f3a7ff420) 0
+ primary-for QGraphicsTransform (0x0x7b9f3a7ca680)
+
+Class QScrollArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollArea::QPrivateSignal (0x0x7b9f3a7ff6c0) 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 (0x0x7b9f3a7ca6e8) 0
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 16)
+QAbstractScrollArea (0x0x7b9f3a7ca750) 0
+ primary-for QScrollArea (0x0x7b9f3a7ca6e8)
+QFrame (0x0x7b9f3a7ca7b8) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a7ca750)
+QWidget (0x0x7b9f3a825070) 0
+ primary-for QFrame (0x0x7b9f3a7ca7b8)
+QObject (0x0x7b9f3a7ff600) 0
+ primary-for QWidget (0x0x7b9f3a825070)
+QPaintDevice (0x0x7b9f3a7ff660) 16
+ vptr=((& QScrollArea::_ZTV11QScrollArea) + 488)
+
+Class QGraphicsView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGraphicsView::QPrivateSignal (0x0x7b9f3a7ff900) 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 (0x0x7b9f3a7ca820) 0
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 16)
+QAbstractScrollArea (0x0x7b9f3a7ca888) 0
+ primary-for QGraphicsView (0x0x7b9f3a7ca820)
+QFrame (0x0x7b9f3a7ca8f0) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a7ca888)
+QWidget (0x0x7b9f3a825230) 0
+ primary-for QFrame (0x0x7b9f3a7ca8f0)
+QObject (0x0x7b9f3a7ff840) 0
+ primary-for QWidget (0x0x7b9f3a825230)
+QPaintDevice (0x0x7b9f3a7ff8a0) 16
+ vptr=((& QGraphicsView::_ZTV13QGraphicsView) + 512)
+
+Class QGroupBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QGroupBox::QPrivateSignal (0x0x7b9f3a8c1ae0) 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 (0x0x7b9f3a7caaf8) 0
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 16)
+QWidget (0x0x7b9f3a8cd8c0) 0
+ primary-for QGroupBox (0x0x7b9f3a7caaf8)
+QObject (0x0x7b9f3a8c1a20) 0
+ primary-for QWidget (0x0x7b9f3a8cd8c0)
+QPaintDevice (0x0x7b9f3a8c1a80) 16
+ vptr=((& QGroupBox::_ZTV9QGroupBox) + 456)
+
+Class QHeaderView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHeaderView::QPrivateSignal (0x0x7b9f3a8c1d20) 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 (0x0x7b9f3a7cab60) 0
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 16)
+QAbstractItemView (0x0x7b9f3a7cabc8) 0
+ primary-for QHeaderView (0x0x7b9f3a7cab60)
+QAbstractScrollArea (0x0x7b9f3a7cac30) 0
+ primary-for QAbstractItemView (0x0x7b9f3a7cabc8)
+QFrame (0x0x7b9f3a7cac98) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a7cac30)
+QWidget (0x0x7b9f3a8cda80) 0
+ primary-for QFrame (0x0x7b9f3a7cac98)
+QObject (0x0x7b9f3a8c1c60) 0
+ primary-for QWidget (0x0x7b9f3a8cda80)
+QPaintDevice (0x0x7b9f3a8c1cc0) 16
+ vptr=((& QHeaderView::_ZTV11QHeaderView) + 832)
+
+Class QLineEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLineEdit::QPrivateSignal (0x0x7b9f3a5951e0) 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 (0x0x7b9f3a7cad00) 0
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 16)
+QWidget (0x0x7b9f3a594150) 0
+ primary-for QLineEdit (0x0x7b9f3a7cad00)
+QObject (0x0x7b9f3a595120) 0
+ primary-for QWidget (0x0x7b9f3a594150)
+QPaintDevice (0x0x7b9f3a595180) 16
+ vptr=((& QLineEdit::_ZTV9QLineEdit) + 456)
+
+Class QInputDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QInputDialog::QPrivateSignal (0x0x7b9f3a5955a0) 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 (0x0x7b9f3a7cad68) 0
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 16)
+QDialog (0x0x7b9f3a7cadd0) 0
+ primary-for QInputDialog (0x0x7b9f3a7cad68)
+QWidget (0x0x7b9f3a594770) 0
+ primary-for QDialog (0x0x7b9f3a7cadd0)
+QObject (0x0x7b9f3a5954e0) 0
+ primary-for QWidget (0x0x7b9f3a594770)
+QPaintDevice (0x0x7b9f3a595540) 16
+ vptr=((& QInputDialog::_ZTV12QInputDialog) + 488)
+
+Class QItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QItemDelegate::QPrivateSignal (0x0x7b9f3a595c00) 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 (0x0x7b9f3a7caf08) 0
+ vptr=((& QItemDelegate::_ZTV13QItemDelegate) + 16)
+QAbstractItemDelegate (0x0x7b9f3a7caf70) 0
+ primary-for QItemDelegate (0x0x7b9f3a7caf08)
+QObject (0x0x7b9f3a595ba0) 0
+ primary-for QAbstractItemDelegate (0x0x7b9f3a7caf70)
+
+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 (0x0x7b9f3a595d80) 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 (0x0x7b9f3a664120) 0
+ vptr=((& QItemEditorFactory::_ZTV18QItemEditorFactory) + 16)
+
+Class QKeySequenceEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QKeySequenceEdit::QPrivateSignal (0x0x7b9f3a664600) 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 (*)(...))QKeySequenceEdit::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 (0x0x7b9f3a65f0d0) 0
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 16)
+QWidget (0x0x7b9f3a65c5b0) 0
+ primary-for QKeySequenceEdit (0x0x7b9f3a65f0d0)
+QObject (0x0x7b9f3a664540) 0
+ primary-for QWidget (0x0x7b9f3a65c5b0)
+QPaintDevice (0x0x7b9f3a6645a0) 16
+ vptr=((& QKeySequenceEdit::_ZTV16QKeySequenceEdit) + 448)
+
+Class QLabel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLabel::QPrivateSignal (0x0x7b9f3a664840) 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 (0x0x7b9f3a65f138) 0
+ vptr=((& QLabel::_ZTV6QLabel) + 16)
+QFrame (0x0x7b9f3a65f1a0) 0
+ primary-for QLabel (0x0x7b9f3a65f138)
+QWidget (0x0x7b9f3a65c770) 0
+ primary-for QFrame (0x0x7b9f3a65f1a0)
+QObject (0x0x7b9f3a664780) 0
+ primary-for QWidget (0x0x7b9f3a65c770)
+QPaintDevice (0x0x7b9f3a6647e0) 16
+ vptr=((& QLabel::_ZTV6QLabel) + 456)
+
+Class QLCDNumber::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLCDNumber::QPrivateSignal (0x0x7b9f3a664b40) 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 (0x0x7b9f3a65f208) 0
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 16)
+QFrame (0x0x7b9f3a65f270) 0
+ primary-for QLCDNumber (0x0x7b9f3a65f208)
+QWidget (0x0x7b9f3a65ca10) 0
+ primary-for QFrame (0x0x7b9f3a65f270)
+QObject (0x0x7b9f3a664a80) 0
+ primary-for QWidget (0x0x7b9f3a65ca10)
+QPaintDevice (0x0x7b9f3a664ae0) 16
+ vptr=((& QLCDNumber::_ZTV10QLCDNumber) + 456)
+
+Class QListView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListView::QPrivateSignal (0x0x7b9f3a664f00) 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 (0x0x7b9f3a65f2d8) 0
+ vptr=((& QListView::_ZTV9QListView) + 16)
+QAbstractItemView (0x0x7b9f3a65f340) 0
+ primary-for QListView (0x0x7b9f3a65f2d8)
+QAbstractScrollArea (0x0x7b9f3a65f3a8) 0
+ primary-for QAbstractItemView (0x0x7b9f3a65f340)
+QFrame (0x0x7b9f3a65f410) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a65f3a8)
+QWidget (0x0x7b9f3a6e20e0) 0
+ primary-for QFrame (0x0x7b9f3a65f410)
+QObject (0x0x7b9f3a664e40) 0
+ primary-for QWidget (0x0x7b9f3a6e20e0)
+QPaintDevice (0x0x7b9f3a664ea0) 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 (0x0x7b9f3a714480) 0
+ vptr=((& QListWidgetItem::_ZTV15QListWidgetItem) + 16)
+
+Class QListWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QListWidget::QPrivateSignal (0x0x7b9f3a754120) 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 (0x0x7b9f3a65f680) 0
+ vptr=((& QListWidget::_ZTV11QListWidget) + 16)
+QListView (0x0x7b9f3a65f6e8) 0
+ primary-for QListWidget (0x0x7b9f3a65f680)
+QAbstractItemView (0x0x7b9f3a65f750) 0
+ primary-for QListView (0x0x7b9f3a65f6e8)
+QAbstractScrollArea (0x0x7b9f3a65f7b8) 0
+ primary-for QAbstractItemView (0x0x7b9f3a65f750)
+QFrame (0x0x7b9f3a65f820) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a65f7b8)
+QWidget (0x0x7b9f3a7358c0) 0
+ primary-for QFrame (0x0x7b9f3a65f820)
+QObject (0x0x7b9f3a754060) 0
+ primary-for QWidget (0x0x7b9f3a7358c0)
+QPaintDevice (0x0x7b9f3a7540c0) 16
+ vptr=((& QListWidget::_ZTV11QListWidget) + 832)
+
+Class QMainWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMainWindow::QPrivateSignal (0x0x7b9f3a754600) 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 (0x0x7b9f3a65f888) 0
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 16)
+QWidget (0x0x7b9f3a735d90) 0
+ primary-for QMainWindow (0x0x7b9f3a65f888)
+QObject (0x0x7b9f3a754540) 0
+ primary-for QWidget (0x0x7b9f3a735d90)
+QPaintDevice (0x0x7b9f3a7545a0) 16
+ vptr=((& QMainWindow::_ZTV11QMainWindow) + 456)
+
+Class QMdiArea::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiArea::QPrivateSignal (0x0x7b9f3a754e40) 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 (0x0x7b9f3a65f9c0) 0
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 16)
+QAbstractScrollArea (0x0x7b9f3a65fa28) 0
+ primary-for QMdiArea (0x0x7b9f3a65f9c0)
+QFrame (0x0x7b9f3a65fa90) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a65fa28)
+QWidget (0x0x7b9f3a786700) 0
+ primary-for QFrame (0x0x7b9f3a65fa90)
+QObject (0x0x7b9f3a754d80) 0
+ primary-for QWidget (0x0x7b9f3a786700)
+QPaintDevice (0x0x7b9f3a754de0) 16
+ vptr=((& QMdiArea::_ZTV8QMdiArea) + 488)
+
+Class QMdiSubWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMdiSubWindow::QPrivateSignal (0x0x7b9f3a4276c0) 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 (0x0x7b9f3a65fbc8) 0
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 16)
+QWidget (0x0x7b9f3a487070) 0
+ primary-for QMdiSubWindow (0x0x7b9f3a65fbc8)
+QObject (0x0x7b9f3a427600) 0
+ primary-for QWidget (0x0x7b9f3a487070)
+QPaintDevice (0x0x7b9f3a427660) 16
+ vptr=((& QMdiSubWindow::_ZTV13QMdiSubWindow) + 448)
+
+Class QMenu::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenu::QPrivateSignal (0x0x7b9f3a427d80) 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 (0x0x7b9f3a65fd00) 0
+ vptr=((& QMenu::_ZTV5QMenu) + 16)
+QWidget (0x0x7b9f3a487700) 0
+ primary-for QMenu (0x0x7b9f3a65fd00)
+QObject (0x0x7b9f3a427cc0) 0
+ primary-for QWidget (0x0x7b9f3a487700)
+QPaintDevice (0x0x7b9f3a427d20) 16
+ vptr=((& QMenu::_ZTV5QMenu) + 456)
+
+Class QMenuBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMenuBar::QPrivateSignal (0x0x7b9f3a52e240) 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 (0x0x7b9f3a65fd68) 0
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 16)
+QWidget (0x0x7b9f3a487af0) 0
+ primary-for QMenuBar (0x0x7b9f3a65fd68)
+QObject (0x0x7b9f3a52e180) 0
+ primary-for QWidget (0x0x7b9f3a487af0)
+QPaintDevice (0x0x7b9f3a52e1e0) 16
+ vptr=((& QMenuBar::_ZTV8QMenuBar) + 456)
+
+Class QMessageBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QMessageBox::QPrivateSignal (0x0x7b9f3a52e480) 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 (0x0x7b9f3a65fdd0) 0
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 16)
+QDialog (0x0x7b9f3a65fe38) 0
+ primary-for QMessageBox (0x0x7b9f3a65fdd0)
+QWidget (0x0x7b9f3a487cb0) 0
+ primary-for QDialog (0x0x7b9f3a65fe38)
+QObject (0x0x7b9f3a52e3c0) 0
+ primary-for QWidget (0x0x7b9f3a487cb0)
+QPaintDevice (0x0x7b9f3a52e420) 16
+ vptr=((& QMessageBox::_ZTV11QMessageBox) + 488)
+
+Class QTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextEdit::QPrivateSignal (0x0x7b9f3a1f60c0) 0 empty
+
+Class QTextEdit::ExtraSelection
+ size=24 align=8
+ base size=24 base align=8
+QTextEdit::ExtraSelection (0x0x7b9f3a1f6120) 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 (0x0x7b9f3a65ff70) 0
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 16)
+QAbstractScrollArea (0x0x7b9f3a1f5000) 0
+ primary-for QTextEdit (0x0x7b9f3a65ff70)
+QFrame (0x0x7b9f3a1f5068) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a1f5000)
+QWidget (0x0x7b9f3a555b60) 0
+ primary-for QFrame (0x0x7b9f3a1f5068)
+QObject (0x0x7b9f3a1f6000) 0
+ primary-for QWidget (0x0x7b9f3a555b60)
+QPaintDevice (0x0x7b9f3a1f6060) 16
+ vptr=((& QTextEdit::_ZTV9QTextEdit) + 528)
+
+Class QPlainTextEdit::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextEdit::QPrivateSignal (0x0x7b9f3a1f6ae0) 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 (0x0x7b9f3a1f51a0) 0
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 16)
+QAbstractScrollArea (0x0x7b9f3a1f5208) 0
+ primary-for QPlainTextEdit (0x0x7b9f3a1f51a0)
+QFrame (0x0x7b9f3a1f5270) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a1f5208)
+QWidget (0x0x7b9f3a231700) 0
+ primary-for QFrame (0x0x7b9f3a1f5270)
+QObject (0x0x7b9f3a1f6a20) 0
+ primary-for QWidget (0x0x7b9f3a231700)
+QPaintDevice (0x0x7b9f3a1f6a80) 16
+ vptr=((& QPlainTextEdit::_ZTV14QPlainTextEdit) + 528)
+
+Class QPlainTextDocumentLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPlainTextDocumentLayout::QPrivateSignal (0x0x7b9f3a2cc060) 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 (0x0x7b9f3a1f52d8) 0
+ vptr=((& QPlainTextDocumentLayout::_ZTV24QPlainTextDocumentLayout) + 16)
+QAbstractTextDocumentLayout (0x0x7b9f3a1f5340) 0
+ primary-for QPlainTextDocumentLayout (0x0x7b9f3a1f52d8)
+QObject (0x0x7b9f3a2cc000) 0
+ primary-for QAbstractTextDocumentLayout (0x0x7b9f3a1f5340)
+
+Class QProgressBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressBar::QPrivateSignal (0x0x7b9f3a2cc2a0) 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 (0x0x7b9f3a1f53a8) 0
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 16)
+QWidget (0x0x7b9f3a231ee0) 0
+ primary-for QProgressBar (0x0x7b9f3a1f53a8)
+QObject (0x0x7b9f3a2cc1e0) 0
+ primary-for QWidget (0x0x7b9f3a231ee0)
+QPaintDevice (0x0x7b9f3a2cc240) 16
+ vptr=((& QProgressBar::_ZTV12QProgressBar) + 464)
+
+Class QProgressDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProgressDialog::QPrivateSignal (0x0x7b9f3a2cc5a0) 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 (0x0x7b9f3a1f5410) 0
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 16)
+QDialog (0x0x7b9f3a1f5478) 0
+ primary-for QProgressDialog (0x0x7b9f3a1f5410)
+QWidget (0x0x7b9f3a2e22a0) 0
+ primary-for QDialog (0x0x7b9f3a1f5478)
+QObject (0x0x7b9f3a2cc4e0) 0
+ primary-for QWidget (0x0x7b9f3a2e22a0)
+QPaintDevice (0x0x7b9f3a2cc540) 16
+ vptr=((& QProgressDialog::_ZTV15QProgressDialog) + 488)
+
+Class QProxyStyle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QProxyStyle::QPrivateSignal (0x0x7b9f3a2cc780) 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 (0x0x7b9f3a1f54e0) 0
+ vptr=((& QProxyStyle::_ZTV11QProxyStyle) + 16)
+QCommonStyle (0x0x7b9f3a1f5548) 0
+ primary-for QProxyStyle (0x0x7b9f3a1f54e0)
+QStyle (0x0x7b9f3a1f55b0) 0
+ primary-for QCommonStyle (0x0x7b9f3a1f5548)
+QObject (0x0x7b9f3a2cc720) 0
+ primary-for QStyle (0x0x7b9f3a1f55b0)
+
+Class QRadioButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRadioButton::QPrivateSignal (0x0x7b9f3a2cc9c0) 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 (0x0x7b9f3a1f5618) 0
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 16)
+QAbstractButton (0x0x7b9f3a1f5680) 0
+ primary-for QRadioButton (0x0x7b9f3a1f5618)
+QWidget (0x0x7b9f3a2e25b0) 0
+ primary-for QAbstractButton (0x0x7b9f3a1f5680)
+QObject (0x0x7b9f3a2cc900) 0
+ primary-for QWidget (0x0x7b9f3a2e25b0)
+QPaintDevice (0x0x7b9f3a2cc960) 16
+ vptr=((& QRadioButton::_ZTV12QRadioButton) + 480)
+
+Class QRhiWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRhiWidget::QPrivateSignal (0x0x7b9f3a2ccc00) 0 empty
+
+Vtable for QRhiWidget
+QRhiWidget::_ZTV10QRhiWidget: 67 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QRhiWidget)
+16 (int (*)(...))QRhiWidget::metaObject
+24 (int (*)(...))QRhiWidget::qt_metacast
+32 (int (*)(...))QRhiWidget::qt_metacall
+40 (int (*)(...))QRhiWidget::~QRhiWidget
+48 (int (*)(...))QRhiWidget::~QRhiWidget
+56 (int (*)(...))QRhiWidget::event
+64 (int (*)(...))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 (*)(...))QRhiWidget::paintEvent
+264 (int (*)(...))QWidget::moveEvent
+272 (int (*)(...))QRhiWidget::resizeEvent
+280 (int (*)(...))QWidget::closeEvent
+288 (int (*)(...))QWidget::contextMenuEvent
+296 (int (*)(...))QWidget::tabletEvent
+304 (int (*)(...))QWidget::actionEvent
+312 (int (*)(...))QWidget::dragEnterEvent
+320 (int (*)(...))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 (*)(...))QRhiWidget::initialize
+440 (int (*)(...))QRhiWidget::render
+448 (int (*)(...))QRhiWidget::releaseResources
+456 (int (*)(...))-16
+464 (int (*)(...))(& _ZTI10QRhiWidget)
+472 (int (*)(...))QRhiWidget::_ZThn16_N10QRhiWidgetD1Ev
+480 (int (*)(...))QRhiWidget::_ZThn16_N10QRhiWidgetD0Ev
+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 QRhiWidget
+ size=40 align=8
+ base size=40 base align=8
+QRhiWidget (0x0x7b9f3a1f56e8) 0
+ vptr=((& QRhiWidget::_ZTV10QRhiWidget) + 16)
+QWidget (0x0x7b9f3a2e2770) 0
+ primary-for QRhiWidget (0x0x7b9f3a1f56e8)
+QObject (0x0x7b9f3a2ccb40) 0
+ primary-for QWidget (0x0x7b9f3a2e2770)
+QPaintDevice (0x0x7b9f3a2ccba0) 16
+ vptr=((& QRhiWidget::_ZTV10QRhiWidget) + 472)
+
+Class QScrollBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScrollBar::QPrivateSignal (0x0x7b9f3a35d060) 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 (0x0x7b9f3a1f5750) 0
+ vptr=((& QScrollBar::_ZTV10QScrollBar) + 16)
+QAbstractSlider (0x0x7b9f3a1f57b8) 0
+ primary-for QScrollBar (0x0x7b9f3a1f5750)
+QWidget (0x0x7b9f3a35c000) 0
+ primary-for QAbstractSlider (0x0x7b9f3a1f57b8)
+QObject (0x0x7b9f3a2ccf60) 0
+ primary-for QWidget (0x0x7b9f3a35c000)
+QPaintDevice (0x0x7b9f3a35d000) 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 (0x0x7b9f3a35d1e0) 0
+ vptr=((& QScrollerProperties::_ZTV19QScrollerProperties) + 16)
+
+Class QScroller::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QScroller::QPrivateSignal (0x0x7b9f3a029960) 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 (0x0x7b9f3a0397b8) 0
+ vptr=((& QScroller::_ZTV9QScroller) + 16)
+QObject (0x0x7b9f3a029900) 0
+ primary-for QScroller (0x0x7b9f3a0397b8)
+
+Class QSizeGrip::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSizeGrip::QPrivateSignal (0x0x7b9f3a029c60) 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 (0x0x7b9f3a039820) 0
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 16)
+QWidget (0x0x7b9f3a04a540) 0
+ primary-for QSizeGrip (0x0x7b9f3a039820)
+QObject (0x0x7b9f3a029ba0) 0
+ primary-for QWidget (0x0x7b9f3a04a540)
+QPaintDevice (0x0x7b9f3a029c00) 16
+ vptr=((& QSizeGrip::_ZTV9QSizeGrip) + 448)
+
+Class QSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSpinBox::QPrivateSignal (0x0x7b9f3a029ea0) 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 (0x0x7b9f3a039888) 0
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 16)
+QAbstractSpinBox (0x0x7b9f3a0398f0) 0
+ primary-for QSpinBox (0x0x7b9f3a039888)
+QWidget (0x0x7b9f3a04a700) 0
+ primary-for QAbstractSpinBox (0x0x7b9f3a0398f0)
+QObject (0x0x7b9f3a029de0) 0
+ primary-for QWidget (0x0x7b9f3a04a700)
+QPaintDevice (0x0x7b9f3a029e40) 16
+ vptr=((& QSpinBox::_ZTV8QSpinBox) + 512)
+
+Class QDoubleSpinBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDoubleSpinBox::QPrivateSignal (0x0x7b9f3a085120) 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 (0x0x7b9f3a039958) 0
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 16)
+QAbstractSpinBox (0x0x7b9f3a0399c0) 0
+ primary-for QDoubleSpinBox (0x0x7b9f3a039958)
+QWidget (0x0x7b9f3a04a8c0) 0
+ primary-for QAbstractSpinBox (0x0x7b9f3a0399c0)
+QObject (0x0x7b9f3a085060) 0
+ primary-for QWidget (0x0x7b9f3a04a8c0)
+QPaintDevice (0x0x7b9f3a0850c0) 16
+ vptr=((& QDoubleSpinBox::_ZTV14QDoubleSpinBox) + 512)
+
+Class QSplashScreen::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplashScreen::QPrivateSignal (0x0x7b9f3a085360) 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 (0x0x7b9f3a039a28) 0
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 16)
+QWidget (0x0x7b9f3a04aa80) 0
+ primary-for QSplashScreen (0x0x7b9f3a039a28)
+QObject (0x0x7b9f3a0852a0) 0
+ primary-for QWidget (0x0x7b9f3a04aa80)
+QPaintDevice (0x0x7b9f3a085300) 16
+ vptr=((& QSplashScreen::_ZTV13QSplashScreen) + 456)
+
+Class QSplitter::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitter::QPrivateSignal (0x0x7b9f3a0855a0) 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 (0x0x7b9f3a039a90) 0
+ vptr=((& QSplitter::_ZTV9QSplitter) + 16)
+QFrame (0x0x7b9f3a039af8) 0
+ primary-for QSplitter (0x0x7b9f3a039a90)
+QWidget (0x0x7b9f3a04ac40) 0
+ primary-for QFrame (0x0x7b9f3a039af8)
+QObject (0x0x7b9f3a0854e0) 0
+ primary-for QWidget (0x0x7b9f3a04ac40)
+QPaintDevice (0x0x7b9f3a085540) 16
+ vptr=((& QSplitter::_ZTV9QSplitter) + 464)
+
+Class QSplitterHandle::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSplitterHandle::QPrivateSignal (0x0x7b9f3a0857e0) 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 (0x0x7b9f3a039b60) 0
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 16)
+QWidget (0x0x7b9f3a04ae00) 0
+ primary-for QSplitterHandle (0x0x7b9f3a039b60)
+QObject (0x0x7b9f3a085720) 0
+ primary-for QWidget (0x0x7b9f3a04ae00)
+QPaintDevice (0x0x7b9f3a085780) 16
+ vptr=((& QSplitterHandle::_ZTV15QSplitterHandle) + 448)
+
+Class QStackedLayout::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedLayout::QPrivateSignal (0x0x7b9f3a085a20) 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 (0x0x7b9f3a039bc8) 0
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 16)
+QLayout (0x0x7b9f3a0dd000) 0
+ primary-for QStackedLayout (0x0x7b9f3a039bc8)
+QObject (0x0x7b9f3a085960) 0
+ primary-for QLayout (0x0x7b9f3a0dd000)
+QLayoutItem (0x0x7b9f3a0859c0) 16
+ vptr=((& QStackedLayout::_ZTV14QStackedLayout) + 296)
+
+Class QStackedWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStackedWidget::QPrivateSignal (0x0x7b9f3a085d20) 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 (0x0x7b9f3a039c30) 0
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 16)
+QFrame (0x0x7b9f3a039c98) 0
+ primary-for QStackedWidget (0x0x7b9f3a039c30)
+QWidget (0x0x7b9f3a0dd380) 0
+ primary-for QFrame (0x0x7b9f3a039c98)
+QObject (0x0x7b9f3a085c60) 0
+ primary-for QWidget (0x0x7b9f3a0dd380)
+QPaintDevice (0x0x7b9f3a085cc0) 16
+ vptr=((& QStackedWidget::_ZTV14QStackedWidget) + 456)
+
+Class QStatusBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStatusBar::QPrivateSignal (0x0x7b9f3a085f60) 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 (0x0x7b9f3a039d00) 0
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 16)
+QWidget (0x0x7b9f3a0dd540) 0
+ primary-for QStatusBar (0x0x7b9f3a039d00)
+QObject (0x0x7b9f3a085ea0) 0
+ primary-for QWidget (0x0x7b9f3a0dd540)
+QPaintDevice (0x0x7b9f3a085f00) 16
+ vptr=((& QStatusBar::_ZTV10QStatusBar) + 448)
+
+Class QStyledItemDelegate::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStyledItemDelegate::QPrivateSignal (0x0x7b9f3a11d180) 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 (0x0x7b9f3a039d68) 0
+ vptr=((& QStyledItemDelegate::_ZTV19QStyledItemDelegate) + 16)
+QAbstractItemDelegate (0x0x7b9f3a039dd0) 0
+ primary-for QStyledItemDelegate (0x0x7b9f3a039d68)
+QObject (0x0x7b9f3a11d120) 0
+ primary-for QAbstractItemDelegate (0x0x7b9f3a039dd0)
+
+Class QStyleFactory
+ size=1 align=1
+ base size=0 base align=1
+QStyleFactory (0x0x7b9f3a11d300) 0 empty
+
+Class QStylePainter
+ size=24 align=8
+ base size=24 base align=8
+QStylePainter (0x0x7b9f3a039e38) 0
+QPainter (0x0x7b9f3a11d360) 0
+
+Class QStylePlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QStylePlugin::QPrivateSignal (0x0x7b9f3a11dba0) 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 (0x0x7b9f3a039ea0) 0
+ vptr=((& QStylePlugin::_ZTV12QStylePlugin) + 16)
+QObject (0x0x7b9f3a11db40) 0
+ primary-for QStylePlugin (0x0x7b9f3a039ea0)
+
+Class QSystemTrayIcon::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSystemTrayIcon::QPrivateSignal (0x0x7b9f3a11dcc0) 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 (0x0x7b9f3a039f08) 0
+ vptr=((& QSystemTrayIcon::_ZTV15QSystemTrayIcon) + 16)
+QObject (0x0x7b9f3a11dc60) 0
+ primary-for QSystemTrayIcon (0x0x7b9f3a039f08)
+
+Class QTableView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableView::QPrivateSignal (0x0x7b9f3a168000) 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 (0x0x7b9f3a039f70) 0
+ vptr=((& QTableView::_ZTV10QTableView) + 16)
+QAbstractItemView (0x0x7b9f3a166000) 0
+ primary-for QTableView (0x0x7b9f3a039f70)
+QAbstractScrollArea (0x0x7b9f3a166068) 0
+ primary-for QAbstractItemView (0x0x7b9f3a166000)
+QFrame (0x0x7b9f3a1660d0) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a166068)
+QWidget (0x0x7b9f3a146770) 0
+ primary-for QFrame (0x0x7b9f3a1660d0)
+QObject (0x0x7b9f3a11df00) 0
+ primary-for QWidget (0x0x7b9f3a146770)
+QPaintDevice (0x0x7b9f3a11df60) 16
+ vptr=((& QTableView::_ZTV10QTableView) + 800)
+
+Class QTableWidgetSelectionRange
+ size=16 align=4
+ base size=16 base align=4
+QTableWidgetSelectionRange (0x0x7b9f3a168180) 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 (0x0x7b9f3a168660) 0
+ vptr=((& QTableWidgetItem::_ZTV16QTableWidgetItem) + 16)
+
+Class QTableWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTableWidget::QPrivateSignal (0x0x7b9f39e1a900) 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 (0x0x7b9f3a166820) 0
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 16)
+QTableView (0x0x7b9f3a166888) 0
+ primary-for QTableWidget (0x0x7b9f3a166820)
+QAbstractItemView (0x0x7b9f3a1668f0) 0
+ primary-for QTableView (0x0x7b9f3a166888)
+QAbstractScrollArea (0x0x7b9f3a166958) 0
+ primary-for QAbstractItemView (0x0x7b9f3a1668f0)
+QFrame (0x0x7b9f3a1669c0) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a166958)
+QWidget (0x0x7b9f39e14bd0) 0
+ primary-for QFrame (0x0x7b9f3a1669c0)
+QObject (0x0x7b9f39e1a840) 0
+ primary-for QWidget (0x0x7b9f39e14bd0)
+QPaintDevice (0x0x7b9f39e1a8a0) 16
+ vptr=((& QTableWidget::_ZTV12QTableWidget) + 832)
+
+Class QTextBrowser::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTextBrowser::QPrivateSignal (0x0x7b9f39e1acc0) 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 (0x0x7b9f3a166a28) 0
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 16)
+QTextEdit (0x0x7b9f3a166a90) 0
+ primary-for QTextBrowser (0x0x7b9f3a166a28)
+QAbstractScrollArea (0x0x7b9f3a166af8) 0
+ primary-for QTextEdit (0x0x7b9f3a166a90)
+QFrame (0x0x7b9f3a166b60) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a166af8)
+QWidget (0x0x7b9f39e14f50) 0
+ primary-for QFrame (0x0x7b9f3a166b60)
+QObject (0x0x7b9f39e1ac00) 0
+ primary-for QWidget (0x0x7b9f39e14f50)
+QPaintDevice (0x0x7b9f39e1ac60) 16
+ vptr=((& QTextBrowser::_ZTV12QTextBrowser) + 568)
+
+Class QToolBar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBar::QPrivateSignal (0x0x7b9f39e1af00) 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 (0x0x7b9f3a166bc8) 0
+ vptr=((& QToolBar::_ZTV8QToolBar) + 16)
+QWidget (0x0x7b9f39e7f150) 0
+ primary-for QToolBar (0x0x7b9f3a166bc8)
+QObject (0x0x7b9f39e1ae40) 0
+ primary-for QWidget (0x0x7b9f39e7f150)
+QPaintDevice (0x0x7b9f39e1aea0) 16
+ vptr=((& QToolBar::_ZTV8QToolBar) + 456)
+
+Class QToolBox::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolBox::QPrivateSignal (0x0x7b9f39ea5240) 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 (0x0x7b9f3a166c30) 0
+ vptr=((& QToolBox::_ZTV8QToolBox) + 16)
+QFrame (0x0x7b9f3a166c98) 0
+ primary-for QToolBox (0x0x7b9f3a166c30)
+QWidget (0x0x7b9f39e7f3f0) 0
+ primary-for QFrame (0x0x7b9f3a166c98)
+QObject (0x0x7b9f39ea5180) 0
+ primary-for QWidget (0x0x7b9f39e7f3f0)
+QPaintDevice (0x0x7b9f39ea51e0) 16
+ vptr=((& QToolBox::_ZTV8QToolBox) + 472)
+
+Class QToolButton::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QToolButton::QPrivateSignal (0x0x7b9f39ea55a0) 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 (0x0x7b9f3a166d00) 0
+ vptr=((& QToolButton::_ZTV11QToolButton) + 16)
+QAbstractButton (0x0x7b9f3a166d68) 0
+ primary-for QToolButton (0x0x7b9f3a166d00)
+QWidget (0x0x7b9f39e7f700) 0
+ primary-for QAbstractButton (0x0x7b9f3a166d68)
+QObject (0x0x7b9f39ea54e0) 0
+ primary-for QWidget (0x0x7b9f39e7f700)
+QPaintDevice (0x0x7b9f39ea5540) 16
+ vptr=((& QToolButton::_ZTV11QToolButton) + 480)
+
+Class QToolTip
+ size=1 align=1
+ base size=0 base align=1
+QToolTip (0x0x7b9f39ea57e0) 0 empty
+
+Class QTreeView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeView::QPrivateSignal (0x0x7b9f39ea5960) 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 (0x0x7b9f3a166dd0) 0
+ vptr=((& QTreeView::_ZTV9QTreeView) + 16)
+QAbstractItemView (0x0x7b9f3a166e38) 0
+ primary-for QTreeView (0x0x7b9f3a166dd0)
+QAbstractScrollArea (0x0x7b9f3a166ea0) 0
+ primary-for QAbstractItemView (0x0x7b9f3a166e38)
+QFrame (0x0x7b9f3a166f08) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3a166ea0)
+QWidget (0x0x7b9f39e7fb60) 0
+ primary-for QFrame (0x0x7b9f3a166f08)
+QObject (0x0x7b9f39ea58a0) 0
+ primary-for QWidget (0x0x7b9f39e7fb60)
+QPaintDevice (0x0x7b9f39ea5900) 16
+ vptr=((& QTreeView::_ZTV9QTreeView) + 816)
+
+Class QTreeWidgetItemIterator
+ size=24 align=8
+ base size=20 base align=8
+QTreeWidgetItemIterator (0x0x7b9f39ea5ae0) 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 (0x0x7b9f39f48360) 0
+ vptr=((& QTreeWidgetItem::_ZTV15QTreeWidgetItem) + 16)
+
+Class QTreeWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTreeWidget::QPrivateSignal (0x0x7b9f39cd9000) 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 (0x0x7b9f39bb3ea0) 0
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 16)
+QTreeView (0x0x7b9f39bb3f08) 0
+ primary-for QTreeWidget (0x0x7b9f39bb3ea0)
+QAbstractItemView (0x0x7b9f39bb3f70) 0
+ primary-for QTreeView (0x0x7b9f39bb3f08)
+QAbstractScrollArea (0x0x7b9f39bb3750) 0
+ primary-for QAbstractItemView (0x0x7b9f39bb3f70)
+QFrame (0x0x7b9f39bb3e38) 0
+ primary-for QAbstractScrollArea (0x0x7b9f39bb3750)
+QWidget (0x0x7b9f39c7de70) 0
+ primary-for QFrame (0x0x7b9f39bb3e38)
+QObject (0x0x7b9f39c28f60) 0
+ primary-for QWidget (0x0x7b9f39c7de70)
+QPaintDevice (0x0x7b9f39c282a0) 16
+ vptr=((& QTreeWidget::_ZTV11QTreeWidget) + 848)
+
+Class QUndoView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUndoView::QPrivateSignal (0x0x7b9f39cd9420) 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 (0x0x7b9f39d20000) 0
+ vptr=((& QUndoView::_ZTV9QUndoView) + 16)
+QListView (0x0x7b9f39d20068) 0
+ primary-for QUndoView (0x0x7b9f39d20000)
+QAbstractItemView (0x0x7b9f39d200d0) 0
+ primary-for QListView (0x0x7b9f39d20068)
+QAbstractScrollArea (0x0x7b9f39d20138) 0
+ primary-for QAbstractItemView (0x0x7b9f39d200d0)
+QFrame (0x0x7b9f39d201a0) 0
+ primary-for QAbstractScrollArea (0x0x7b9f39d20138)
+QWidget (0x0x7b9f39cfc2a0) 0
+ primary-for QFrame (0x0x7b9f39d201a0)
+QObject (0x0x7b9f39cd9360) 0
+ primary-for QWidget (0x0x7b9f39cfc2a0)
+QPaintDevice (0x0x7b9f39cd93c0) 16
+ vptr=((& QUndoView::_ZTV9QUndoView) + 800)
+
+Class QWhatsThis
+ size=1 align=1
+ base size=0 base align=1
+QWhatsThis (0x0x7b9f39cd95a0) 0 empty
+
+Class QWidgetAction::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWidgetAction::QPrivateSignal (0x0x7b9f39cd9660) 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 (0x0x7b9f39d20208) 0
+ vptr=((& QWidgetAction::_ZTV13QWidgetAction) + 16)
+QAction (0x0x7b9f39d20270) 0
+ primary-for QWidgetAction (0x0x7b9f39d20208)
+QObject (0x0x7b9f39cd9600) 0
+ primary-for QAction (0x0x7b9f39d20270)
+
+Class QWizard::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizard::QPrivateSignal (0x0x7b9f39cd98a0) 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 (0x0x7b9f39d202d8) 0
+ vptr=((& QWizard::_ZTV7QWizard) + 16)
+QDialog (0x0x7b9f39d20340) 0
+ primary-for QWizard (0x0x7b9f39d202d8)
+QWidget (0x0x7b9f39cfc5b0) 0
+ primary-for QDialog (0x0x7b9f39d20340)
+QObject (0x0x7b9f39cd97e0) 0
+ primary-for QWidget (0x0x7b9f39cfc5b0)
+QPaintDevice (0x0x7b9f39cd9840) 16
+ vptr=((& QWizard::_ZTV7QWizard) + 520)
+
+Class QWizardPage::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QWizardPage::QPrivateSignal (0x0x7b9f399be1e0) 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 (0x0x7b9f39d20478) 0
+ vptr=((& QWizardPage::_ZTV11QWizardPage) + 16)
+QWidget (0x0x7b9f39d4bee0) 0
+ primary-for QWizardPage (0x0x7b9f39d20478)
+QObject (0x0x7b9f399be120) 0
+ primary-for QWidget (0x0x7b9f39d4bee0)
+QPaintDevice (0x0x7b9f399be180) 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 (0x0x7b9f399be360) 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 (0x0x7b9f39a0f2a0) 0 nearly-empty
+ vptr=((& QDesignerCustomWidgetCollectionInterface::_ZTV40QDesignerCustomWidgetCollectionInterface) + 16)
+
+Class QDomImplementation
+ size=8 align=8
+ base size=8 base align=8
+QDomImplementation (0x0x7b9f39a0f6c0) 0
+
+Class QDomNode
+ size=8 align=8
+ base size=8 base align=8
+QDomNode (0x0x7b9f39a0f720) 0
+
+Class QDomNodeList
+ size=8 align=8
+ base size=8 base align=8
+QDomNodeList (0x0x7b9f39a0f780) 0
+
+Class QDomDocumentType
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentType (0x0x7b9f39a05c30) 0
+QDomNode (0x0x7b9f39a0f960) 0
+
+Class QDomDocument::ParseResult
+ size=40 align=8
+ base size=40 base align=8
+QDomDocument::ParseResult (0x0x7b9f39a0fa80) 0
+
+Class QDomDocument
+ size=8 align=8
+ base size=8 base align=8
+QDomDocument (0x0x7b9f39a05c98) 0
+QDomNode (0x0x7b9f39a0fa20) 0
+
+Class QDomNamedNodeMap
+ size=8 align=8
+ base size=8 base align=8
+QDomNamedNodeMap (0x0x7b9f39a0fde0) 0
+
+Class QDomDocumentFragment
+ size=8 align=8
+ base size=8 base align=8
+QDomDocumentFragment (0x0x7b9f39a05dd0) 0
+QDomNode (0x0x7b9f39a0ff60) 0
+
+Class QDomCharacterData
+ size=8 align=8
+ base size=8 base align=8
+QDomCharacterData (0x0x7b9f39a05e38) 0
+QDomNode (0x0x7b9f39a96060) 0
+
+Class QDomAttr
+ size=8 align=8
+ base size=8 base align=8
+QDomAttr (0x0x7b9f39a05ea0) 0
+QDomNode (0x0x7b9f39a960c0) 0
+
+Class QDomElement
+ size=8 align=8
+ base size=8 base align=8
+QDomElement (0x0x7b9f39a05f08) 0
+QDomNode (0x0x7b9f39a96180) 0
+
+Class QDomText
+ size=8 align=8
+ base size=8 base align=8
+QDomText (0x0x7b9f39a05f70) 0
+QDomCharacterData (0x0x7b9f39ab7000) 0
+QDomNode (0x0x7b9f39a963c0) 0
+
+Class QDomComment
+ size=8 align=8
+ base size=8 base align=8
+QDomComment (0x0x7b9f39ab7068) 0
+QDomCharacterData (0x0x7b9f39ab70d0) 0
+QDomNode (0x0x7b9f39a96480) 0
+
+Class QDomCDATASection
+ size=8 align=8
+ base size=8 base align=8
+QDomCDATASection (0x0x7b9f39ab7138) 0
+QDomText (0x0x7b9f39ab71a0) 0
+QDomCharacterData (0x0x7b9f39ab7208) 0
+QDomNode (0x0x7b9f39a96540) 0
+
+Class QDomNotation
+ size=8 align=8
+ base size=8 base align=8
+QDomNotation (0x0x7b9f39ab7270) 0
+QDomNode (0x0x7b9f39a96600) 0
+
+Class QDomEntity
+ size=8 align=8
+ base size=8 base align=8
+QDomEntity (0x0x7b9f39ab72d8) 0
+QDomNode (0x0x7b9f39a966c0) 0
+
+Class QDomEntityReference
+ size=8 align=8
+ base size=8 base align=8
+QDomEntityReference (0x0x7b9f39ab7340) 0
+QDomNode (0x0x7b9f39a96780) 0
+
+Class QDomProcessingInstruction
+ size=8 align=8
+ base size=8 base align=8
+QDomProcessingInstruction (0x0x7b9f39ab73a8) 0
+QDomNode (0x0x7b9f39a96840) 0
+
+Class QOpenGLBuffer
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLBuffer (0x0x7b9f39a96900) 0
+
+Class QOpenGLDebugMessage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLDebugMessage (0x0x7b9f39b17f00) 0
+
+Class QOpenGLDebugLogger::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLDebugLogger::QPrivateSignal (0x0x7b9f39838b40) 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 (0x0x7b9f397ebaf8) 0
+ vptr=((& QOpenGLDebugLogger::_ZTV18QOpenGLDebugLogger) + 16)
+QObject (0x0x7b9f39838ae0) 0
+ primary-for QOpenGLDebugLogger (0x0x7b9f397ebaf8)
+
+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 (0x0x7b9f39942900) 0
+ vptr=((& QOpenGLFramebufferObject::_ZTV24QOpenGLFramebufferObject) + 16)
+
+Class QOpenGLFramebufferObjectFormat
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLFramebufferObjectFormat (0x0x7b9f39942ba0) 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 (0x0x7b9f399461a0) 0
+ vptr=((& QOpenGLPaintDevice::_ZTV18QOpenGLPaintDevice) + 16)
+QPaintDevice (0x0x7b9f39942c00) 0
+ primary-for QOpenGLPaintDevice (0x0x7b9f399461a0)
+
+Class QOpenGLPixelTransferOptions
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLPixelTransferOptions (0x0x7b9f39942e40) 0
+
+Class QOpenGLShader::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShader::QPrivateSignal (0x0x7b9f4a5e1a80) 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 (0x0x7b9f4ad4ec98) 0
+ vptr=((& QOpenGLShader::_ZTV13QOpenGLShader) + 16)
+QObject (0x0x7b9f4a5e1a20) 0
+ primary-for QOpenGLShader (0x0x7b9f4ad4ec98)
+
+Class QOpenGLShaderProgram::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLShaderProgram::QPrivateSignal (0x0x7b9f484490c0) 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 (0x0x7b9f4ad4c000) 0
+ vptr=((& QOpenGLShaderProgram::_ZTV20QOpenGLShaderProgram) + 16)
+QObject (0x0x7b9f48449000) 0
+ primary-for QOpenGLShaderProgram (0x0x7b9f4ad4c000)
+
+Class QOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTexture (0x0x7b9f484494e0) 0
+
+Class QOpenGLTextureBlitter
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLTextureBlitter (0x0x7b9f4608ccc0) 0
+
+Class QOpenGLTimerQuery::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimerQuery::QPrivateSignal (0x0x7b9f45c21120) 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 (0x0x7b9f4ad4b0d0) 0
+ vptr=((& QOpenGLTimerQuery::_ZTV17QOpenGLTimerQuery) + 16)
+QObject (0x0x7b9f45c210c0) 0
+ primary-for QOpenGLTimerQuery (0x0x7b9f4ad4b0d0)
+
+Class QOpenGLTimeMonitor::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLTimeMonitor::QPrivateSignal (0x0x7b9f45c21600) 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 (0x0x7b9f4ad4b3a8) 0
+ vptr=((& QOpenGLTimeMonitor::_ZTV18QOpenGLTimeMonitor) + 16)
+QObject (0x0x7b9f45c21540) 0
+ primary-for QOpenGLTimeMonitor (0x0x7b9f4ad4b3a8)
+
+Class QOpenGLVersionStatus
+ size=12 align=4
+ base size=12 base align=4
+QOpenGLVersionStatus (0x0x7b9f446fcc00) 0
+
+Class QOpenGLVersionFunctionsBackend
+ size=16 align=8
+ base size=12 base align=8
+QOpenGLVersionFunctionsBackend (0x0x7b9f426cfae0) 0
+
+Class QOpenGLVersionFunctionsStorage
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionFunctionsStorage (0x0x7b9f426cfd80) 0
+
+Class QAbstractOpenGLFunctionsPrivate
+ size=16 align=8
+ base size=9 base align=8
+QAbstractOpenGLFunctionsPrivate (0x0x7b9f426cfde0) 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 (0x0x7b9f426d92a0) 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 (0x0x7b9f426d9cc0) 0
+
+Class QOpenGLFunctions_1_0_CoreBackend
+ size=400 align=8
+ base size=400 base align=8
+QOpenGLFunctions_1_0_CoreBackend (0x0x7b9f4afe12d8) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f426d9c00) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend::Functions
+ size=128 align=8
+ base size=128 base align=8
+QOpenGLFunctions_1_1_CoreBackend::Functions (0x0x7b9f42389180) 0
+
+Class QOpenGLFunctions_1_1_CoreBackend
+ size=144 align=8
+ base size=144 base align=8
+QOpenGLFunctions_1_1_CoreBackend (0x0x7b9f4afdf1a0) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f42705ba0) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_1_2_CoreBackend::Functions (0x0x7b9f423e9c60) 0
+
+Class QOpenGLFunctions_1_2_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_1_2_CoreBackend (0x0x7b9f4afdf208) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f423e9c00) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_3_CoreBackend::Functions (0x0x7b9f424645a0) 0
+
+Class QOpenGLFunctions_1_3_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_1_3_CoreBackend (0x0x7b9f4afdf478) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f42464540) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend::Functions
+ size=56 align=8
+ base size=56 base align=8
+QOpenGLFunctions_1_4_CoreBackend::Functions (0x0x7b9f424703c0) 0
+
+Class QOpenGLFunctions_1_4_CoreBackend
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_1_4_CoreBackend (0x0x7b9f4afdf6e8) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f42470360) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_5_CoreBackend::Functions (0x0x7b9f424f51e0) 0
+
+Class QOpenGLFunctions_1_5_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_1_5_CoreBackend (0x0x7b9f4afdfa28) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f424f5180) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend::Functions
+ size=744 align=8
+ base size=744 base align=8
+QOpenGLFunctions_2_0_CoreBackend::Functions (0x0x7b9f422a8a80) 0
+
+Class QOpenGLFunctions_2_0_CoreBackend
+ size=760 align=8
+ base size=760 base align=8
+QOpenGLFunctions_2_0_CoreBackend (0x0x7b9f4afdfaf8) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f422a8a20) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend::Functions
+ size=48 align=8
+ base size=48 base align=8
+QOpenGLFunctions_2_1_CoreBackend::Functions (0x0x7b9f422e3660) 0
+
+Class QOpenGLFunctions_2_1_CoreBackend
+ size=64 align=8
+ base size=64 base align=8
+QOpenGLFunctions_2_1_CoreBackend (0x0x7b9f4afdfb60) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f422e35a0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend::Functions
+ size=672 align=8
+ base size=672 base align=8
+QOpenGLFunctions_3_0_CoreBackend::Functions (0x0x7b9f41d513c0) 0
+
+Class QOpenGLFunctions_3_0_CoreBackend
+ size=688 align=8
+ base size=688 base align=8
+QOpenGLFunctions_3_0_CoreBackend (0x0x7b9f4afdfdd0) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f41d51360) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_3_1_CoreBackend::Functions (0x0x7b9f41f0d480) 0
+
+Class QOpenGLFunctions_3_1_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_3_1_CoreBackend (0x0x7b9f4afdfe38) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f41f0d3c0) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend::Functions
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_3_2_CoreBackend::Functions (0x0x7b9f41b6af00) 0
+
+Class QOpenGLFunctions_3_2_CoreBackend
+ size=168 align=8
+ base size=168 base align=8
+QOpenGLFunctions_3_2_CoreBackend (0x0x7b9f4afdff70) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f41b429c0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend::Functions
+ size=464 align=8
+ base size=464 base align=8
+QOpenGLFunctions_3_3_CoreBackend::Functions (0x0x7b9f41bcb8a0) 0
+
+Class QOpenGLFunctions_3_3_CoreBackend
+ size=480 align=8
+ base size=480 base align=8
+QOpenGLFunctions_3_3_CoreBackend (0x0x7b9f4afdd138) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f41bcb7e0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend::Functions
+ size=368 align=8
+ base size=368 base align=8
+QOpenGLFunctions_4_0_CoreBackend::Functions (0x0x7b9f4191f9c0) 0
+
+Class QOpenGLFunctions_4_0_CoreBackend
+ size=384 align=8
+ base size=384 base align=8
+QOpenGLFunctions_4_0_CoreBackend (0x0x7b9f4afdd208) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f4191f960) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend::Functions
+ size=704 align=8
+ base size=704 base align=8
+QOpenGLFunctions_4_1_CoreBackend::Functions (0x0x7b9f41986720) 0
+
+Class QOpenGLFunctions_4_1_CoreBackend
+ size=720 align=8
+ base size=720 base align=8
+QOpenGLFunctions_4_1_CoreBackend (0x0x7b9f4afdd2d8) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f419866c0) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_2_CoreBackend::Functions (0x0x7b9f40e3f300) 0
+
+Class QOpenGLFunctions_4_2_CoreBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_2_CoreBackend (0x0x7b9f4afdd6e8) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f41a12cc0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend::Functions
+ size=344 align=8
+ base size=344 base align=8
+QOpenGLFunctions_4_3_CoreBackend::Functions (0x0x7b9f40e3fae0) 0
+
+Class QOpenGLFunctions_4_3_CoreBackend
+ size=360 align=8
+ base size=360 base align=8
+QOpenGLFunctions_4_3_CoreBackend (0x0x7b9f4afdd750) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f40e3f900) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend::Functions
+ size=72 align=8
+ base size=72 base align=8
+QOpenGLFunctions_4_4_CoreBackend::Functions (0x0x7b9f40f3fba0) 0
+
+Class QOpenGLFunctions_4_4_CoreBackend
+ size=88 align=8
+ base size=88 base align=8
+QOpenGLFunctions_4_4_CoreBackend (0x0x7b9f4af8d340) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f40e53120) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend::Functions
+ size=848 align=8
+ base size=848 base align=8
+QOpenGLFunctions_4_5_CoreBackend::Functions (0x0x7b9f40c2b660) 0
+
+Class QOpenGLFunctions_4_5_CoreBackend
+ size=864 align=8
+ base size=864 base align=8
+QOpenGLFunctions_4_5_CoreBackend (0x0x7b9f4af8d3a8) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f40c2b5a0) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend::Functions
+ size=2064 align=8
+ base size=2064 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend::Functions (0x0x7b9f40d61300) 0
+
+Class QOpenGLFunctions_1_0_DeprecatedBackend
+ size=2080 align=8
+ base size=2080 base align=8
+QOpenGLFunctions_1_0_DeprecatedBackend (0x0x7b9f4af8dbc8) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f40d610c0) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend::Functions
+ size=136 align=8
+ base size=136 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend::Functions (0x0x7b9f40d7ee40) 0
+
+Class QOpenGLFunctions_1_1_DeprecatedBackend
+ size=152 align=8
+ base size=152 base align=8
+QOpenGLFunctions_1_1_DeprecatedBackend (0x0x7b9f4af89d00) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f40d7ede0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend::Functions
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend::Functions (0x0x7b9f40a874e0) 0
+
+Class QOpenGLFunctions_1_2_DeprecatedBackend
+ size=272 align=8
+ base size=272 base align=8
+QOpenGLFunctions_1_2_DeprecatedBackend (0x0x7b9f4af89dd0) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f40a30000) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend::Functions
+ size=296 align=8
+ base size=296 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend::Functions (0x0x7b9f40aff0c0) 0
+
+Class QOpenGLFunctions_1_3_DeprecatedBackend
+ size=312 align=8
+ base size=312 base align=8
+QOpenGLFunctions_1_3_DeprecatedBackend (0x0x7b9f4af79478) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f40aff060) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend::Functions
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend::Functions (0x0x7b9f409549c0) 0
+
+Class QOpenGLFunctions_1_4_DeprecatedBackend
+ size=320 align=8
+ base size=320 base align=8
+QOpenGLFunctions_1_4_DeprecatedBackend (0x0x7b9f4af794e0) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f409548a0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend::Functions
+ size=288 align=8
+ base size=288 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend::Functions (0x0x7b9f409af5a0) 0
+
+Class QOpenGLFunctions_2_0_DeprecatedBackend
+ size=304 align=8
+ base size=304 base align=8
+QOpenGLFunctions_2_0_DeprecatedBackend (0x0x7b9f4af79750) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f409af540) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend::Functions
+ size=160 align=8
+ base size=160 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend::Functions (0x0x7b9f40a06600) 0
+
+Class QOpenGLFunctions_3_0_DeprecatedBackend
+ size=176 align=8
+ base size=176 base align=8
+QOpenGLFunctions_3_0_DeprecatedBackend (0x0x7b9f4af76680) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f40a065a0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend::Functions
+ size=240 align=8
+ base size=240 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend::Functions (0x0x7b9f40a06cc0) 0
+
+Class QOpenGLFunctions_3_3_DeprecatedBackend
+ size=256 align=8
+ base size=256 base align=8
+QOpenGLFunctions_3_3_DeprecatedBackend (0x0x7b9f4af766e8) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f40a06a80) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend::Functions
+ size=96 align=8
+ base size=96 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend::Functions (0x0x7b9f4061b960) 0
+
+Class QOpenGLFunctions_4_5_DeprecatedBackend
+ size=112 align=8
+ base size=112 base align=8
+QOpenGLFunctions_4_5_DeprecatedBackend (0x0x7b9f4af69ea0) 0
+QOpenGLVersionFunctionsBackend (0x0x7b9f4061b8a0) 0
+
+Class QOpenGLVersionProfile
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVersionProfile (0x0x7b9f4065a600) 0
+
+Class QOpenGLVersionFunctionsFactory
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVersionFunctionsFactory (0x0x7b9f4065a840) 0 empty
+
+Class QOpenGLVertexArrayObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLVertexArrayObject::QPrivateSignal (0x0x7b9f4065aba0) 0 empty
+
+Class QOpenGLVertexArrayObject::Binder
+ size=8 align=8
+ base size=8 base align=8
+QOpenGLVertexArrayObject::Binder (0x0x7b9f4065ac60) 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 (0x0x7b9f4af69f08) 0
+ vptr=((& QOpenGLVertexArrayObject::_ZTV24QOpenGLVertexArrayObject) + 16)
+QObject (0x0x7b9f4065aae0) 0
+ primary-for QOpenGLVertexArrayObject (0x0x7b9f4af69f08)
+
+Class QOpenGLWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWindow::QPrivateSignal (0x0x7b9f406c0ea0) 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 (0x0x7b9f4af61270) 0
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 16)
+QPaintDeviceWindow (0x0x7b9f422f01c0) 0
+ primary-for QOpenGLWindow (0x0x7b9f4af61270)
+QWindow (0x0x7b9f422f0230) 0
+ primary-for QPaintDeviceWindow (0x0x7b9f422f01c0)
+QObject (0x0x7b9f406c0480) 0
+ primary-for QWindow (0x0x7b9f422f0230)
+QSurface (0x0x7b9f406c04e0) 16
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 392)
+QPaintDevice (0x0x7b9f406c0e40) 40
+ vptr=((& QOpenGLWindow::_ZTV13QOpenGLWindow) + 456)
+
+Class QOpenGLWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QOpenGLWidget::QPrivateSignal (0x0x7b9f406fa5a0) 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 (0x0x7b9f4af617b8) 0
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 16)
+QWidget (0x0x7b9f41dcac40) 0
+ primary-for QOpenGLWidget (0x0x7b9f4af617b8)
+QObject (0x0x7b9f406fa480) 0
+ primary-for QWidget (0x0x7b9f41dcac40)
+QPaintDevice (0x0x7b9f406fa4e0) 16
+ vptr=((& QOpenGLWidget::_ZTV13QOpenGLWidget) + 472)
+
+Class QDesignerActionEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerActionEditorInterface::QPrivateSignal (0x0x7b9f4073ede0) 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 (0x0x7b9f4af61bc8) 0
+ vptr=((& QDesignerActionEditorInterface::_ZTV30QDesignerActionEditorInterface) + 16)
+QWidget (0x0x7b9f41b69d90) 0
+ primary-for QDesignerActionEditorInterface (0x0x7b9f4af61bc8)
+QObject (0x0x7b9f4073ecc0) 0
+ primary-for QWidget (0x0x7b9f41b69d90)
+QPaintDevice (0x0x7b9f4073ed80) 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 (0x0x7b9f407550c0) 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 (0x0x7b9f40755180) 0
+ vptr=((& QAbstractFormBuilder::_ZTV20QAbstractFormBuilder) + 16)
+
+Class QDesignerFormEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormEditorInterface::QPrivateSignal (0x0x7b9f40755c00) 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 (0x0x7b9f4af61ea0) 0
+ vptr=((& QDesignerFormEditorInterface::_ZTV28QDesignerFormEditorInterface) + 16)
+QObject (0x0x7b9f40755b40) 0
+ primary-for QDesignerFormEditorInterface (0x0x7b9f4af61ea0)
+
+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 (0x0x7b9f407d8900) 0 nearly-empty
+ vptr=((& QDesignerFormEditorPluginInterface::_ZTV34QDesignerFormEditorPluginInterface) + 16)
+
+Class QDesignerFormWindowInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowInterface::QPrivateSignal (0x0x7b9f40805420) 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 (0x0x7b9f4af5c3a8) 0
+ vptr=((& QDesignerFormWindowInterface::_ZTV28QDesignerFormWindowInterface) + 16)
+QWidget (0x0x7b9f419a6b60) 0
+ primary-for QDesignerFormWindowInterface (0x0x7b9f4af5c3a8)
+QObject (0x0x7b9f40805120) 0
+ primary-for QWidget (0x0x7b9f419a6b60)
+QPaintDevice (0x0x7b9f408053c0) 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 (0x0x7b9f40805b40) 0 nearly-empty
+ vptr=((& QDesignerFormWindowCursorInterface::_ZTV34QDesignerFormWindowCursorInterface) + 16)
+
+Class QDesignerFormWindowManagerInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowManagerInterface::QPrivateSignal (0x0x7b9f40468060) 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 (0x0x7b9f4af5c410) 0
+ vptr=((& QDesignerFormWindowManagerInterface::_ZTV35QDesignerFormWindowManagerInterface) + 16)
+QObject (0x0x7b9f40805c00) 0
+ primary-for QDesignerFormWindowManagerInterface (0x0x7b9f4af5c410)
+
+Class QDesignerFormWindowToolInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerFormWindowToolInterface::QPrivateSignal (0x0x7b9f4047ff60) 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 (0x0x7b9f4af5c6e8) 0
+ vptr=((& QDesignerFormWindowToolInterface::_ZTV32QDesignerFormWindowToolInterface) + 16)
+QObject (0x0x7b9f4047ff00) 0
+ primary-for QDesignerFormWindowToolInterface (0x0x7b9f4af5c6e8)
+
+Class QDesignerIntegrationInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegrationInterface::QPrivateSignal (0x0x7b9f405e11e0) 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 (0x0x7b9f4af5c750) 0
+ vptr=((& QDesignerIntegrationInterface::_ZTV29QDesignerIntegrationInterface) + 16)
+QObject (0x0x7b9f405e1180) 0
+ primary-for QDesignerIntegrationInterface (0x0x7b9f4af5c750)
+
+Class QDesignerIntegration::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerIntegration::QPrivateSignal (0x0x7b9f405e18a0) 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 (0x0x7b9f4af5ca90) 0
+ vptr=((& QDesignerIntegration::_ZTV20QDesignerIntegration) + 16)
+QDesignerIntegrationInterface (0x0x7b9f4af5caf8) 0
+ primary-for QDesignerIntegration (0x0x7b9f4af5ca90)
+QObject (0x0x7b9f405e1840) 0
+ primary-for QDesignerIntegrationInterface (0x0x7b9f4af5caf8)
+
+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 (0x0x7b9f4033fde0) 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 (0x0x7b9f40030240) 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 (0x0x7b9f4015c420) 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 (0x0x7b9f3fe36ae0) 0 nearly-empty
+ vptr=((& QDesignerMetaDataBaseItemInterface::_ZTV34QDesignerMetaDataBaseItemInterface) + 16)
+
+Class QDesignerMetaDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerMetaDataBaseInterface::QPrivateSignal (0x0x7b9f3fe58300) 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 (0x0x7b9f4b184820) 0
+ vptr=((& QDesignerMetaDataBaseInterface::_ZTV30QDesignerMetaDataBaseInterface) + 16)
+QObject (0x0x7b9f3fe36b40) 0
+ primary-for QDesignerMetaDataBaseInterface (0x0x7b9f4b184820)
+
+Class QDesignerNewFormWidgetInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerNewFormWidgetInterface::QPrivateSignal (0x0x7b9f3ff04420) 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 (0x0x7b9f4b184888) 0
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 16)
+QWidget (0x0x7b9f40e4bc40) 0
+ primary-for QDesignerNewFormWidgetInterface (0x0x7b9f4b184888)
+QObject (0x0x7b9f3ff042a0) 0
+ primary-for QWidget (0x0x7b9f40e4bc40)
+QPaintDevice (0x0x7b9f3ff04300) 16
+ vptr=((& QDesignerNewFormWidgetInterface::_ZTV31QDesignerNewFormWidgetInterface) + 464)
+
+Class QDesignerObjectInspectorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerObjectInspectorInterface::QPrivateSignal (0x0x7b9f3ff24060) 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 (0x0x7b9f4b1715b0) 0
+ vptr=((& QDesignerObjectInspectorInterface::_ZTV33QDesignerObjectInspectorInterface) + 16)
+QWidget (0x0x7b9f40e4be00) 0
+ primary-for QDesignerObjectInspectorInterface (0x0x7b9f4b1715b0)
+QObject (0x0x7b9f3ff04a80) 0
+ primary-for QWidget (0x0x7b9f40e4be00)
+QPaintDevice (0x0x7b9f3ff04ae0) 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 (0x0x7b9f3ff5d180) 0 nearly-empty
+ vptr=((& QDesignerOptionsPageInterface::_ZTV29QDesignerOptionsPageInterface) + 16)
+
+Class QDesignerPromotionInterface::PromotedClass
+ size=16 align=8
+ base size=16 base align=8
+QDesignerPromotionInterface::PromotedClass (0x0x7b9f3ff5d2a0) 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 (0x0x7b9f3ff5d1e0) 0 nearly-empty
+ vptr=((& QDesignerPromotionInterface::_ZTV27QDesignerPromotionInterface) + 16)
+
+Class QDesignerPropertyEditorInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerPropertyEditorInterface::QPrivateSignal (0x0x7b9f3ff5dc60) 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 (0x0x7b9f4b171bc8) 0
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 16)
+QWidget (0x0x7b9f40e4bee0) 0
+ primary-for QDesignerPropertyEditorInterface (0x0x7b9f4b171bc8)
+QObject (0x0x7b9f3ff5d780) 0
+ primary-for QWidget (0x0x7b9f40e4bee0)
+QPaintDevice (0x0x7b9f3ff5d7e0) 16
+ vptr=((& QDesignerPropertyEditorInterface::_ZTV32QDesignerPropertyEditorInterface) + 504)
+
+Class QDesignerResourceBrowserInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerResourceBrowserInterface::QPrivateSignal (0x0x7b9f3ff88960) 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 (0x0x7b9f4b171c30) 0
+ vptr=((& QDesignerResourceBrowserInterface::_ZTV33QDesignerResourceBrowserInterface) + 16)
+QWidget (0x0x7b9f40e54150) 0
+ primary-for QDesignerResourceBrowserInterface (0x0x7b9f4b171c30)
+QObject (0x0x7b9f3ff88180) 0
+ primary-for QWidget (0x0x7b9f40e54150)
+QPaintDevice (0x0x7b9f3ff881e0) 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 (0x0x7b9f3ffe40c0) 0 nearly-empty
+ vptr=((& QDesignerSettingsInterface::_ZTV26QDesignerSettingsInterface) + 16)
+
+Class QDesignerWidgetBoxInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetBoxInterface::QPrivateSignal (0x0x7b9f3ffe42a0) 0 empty
+
+Class QDesignerWidgetBoxInterface::Widget
+ size=8 align=8
+ base size=8 base align=8
+QDesignerWidgetBoxInterface::Widget (0x0x7b9f3ffe48a0) 0
+
+Class QDesignerWidgetBoxInterface::Category
+ size=56 align=8
+ base size=56 base align=8
+QDesignerWidgetBoxInterface::Category (0x0x7b9f3ffe4e40) 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 (0x0x7b9f4b171d00) 0
+ vptr=((& QDesignerWidgetBoxInterface::_ZTV27QDesignerWidgetBoxInterface) + 16)
+QWidget (0x0x7b9f40e54310) 0
+ primary-for QDesignerWidgetBoxInterface (0x0x7b9f4b171d00)
+QObject (0x0x7b9f3ffe4120) 0
+ primary-for QWidget (0x0x7b9f40e54310)
+QPaintDevice (0x0x7b9f3ffe4240) 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 (0x0x7b9f3ef88d20) 0 nearly-empty
+ vptr=((& QDesignerWidgetDataBaseItemInterface::_ZTV36QDesignerWidgetDataBaseItemInterface) + 16)
+
+Class QDesignerWidgetDataBaseInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetDataBaseInterface::QPrivateSignal (0x0x7b9f3ec755a0) 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 (0x0x7b9f423f28f0) 0
+ vptr=((& QDesignerWidgetDataBaseInterface::_ZTV32QDesignerWidgetDataBaseInterface) + 16)
+QObject (0x0x7b9f3ec75540) 0
+ primary-for QDesignerWidgetDataBaseInterface (0x0x7b9f423f28f0)
+
+Class QDesignerWidgetFactoryInterface::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDesignerWidgetFactoryInterface::QPrivateSignal (0x0x7b9f3edb1600) 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 (0x0x7b9f42434478) 0
+ vptr=((& QDesignerWidgetFactoryInterface::_ZTV31QDesignerWidgetFactoryInterface) + 16)
+QObject (0x0x7b9f3edb15a0) 0
+ primary-for QDesignerWidgetFactoryInterface (0x0x7b9f42434478)
+
+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 (0x0x7b9f3ea893c0) 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 (0x0x7b9f3eb5ac60) 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 (0x0x7b9f3ebc3c00) 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 (0x0x7b9f4243e068) 0
+ vptr=((& QFormBuilder::_ZTV12QFormBuilder) + 16)
+QAbstractFormBuilder (0x0x7b9f3ebe1ae0) 0
+ primary-for QFormBuilder (0x0x7b9f4243e068)
+
+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 (0x0x7b9f3ebe1ba0) 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 (0x0x7b9f3e838a80) 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 (0x0x7b9f3e877ba0) 0 nearly-empty
+ vptr=((& QDesignerPropertySheetExtension::_ZTV31QDesignerPropertySheetExtension) + 16)
+
+Class QExtensionManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QExtensionManager::QPrivateSignal (0x0x7b9f3e89d4e0) 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 (0x0x7b9f4062dcb0) 0
+ vptr=((& QExtensionManager::_ZTV17QExtensionManager) + 16)
+QObject (0x0x7b9f3e89d360) 0
+ primary-for QExtensionManager (0x0x7b9f4062dcb0)
+QAbstractExtensionManager (0x0x7b9f3e89d420) 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 (0x0x7b9f3e909840) 0 nearly-empty
+ vptr=((& QDesignerTaskMenuExtension::_ZTV26QDesignerTaskMenuExtension) + 16)
+
+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 (0x0x7b9f3e99f900) 0 nearly-empty
+ vptr=((& QSqlDriverCreatorBase::_ZTV21QSqlDriverCreatorBase) + 16)
+
+Class QSqlDatabase
+ size=8 align=8
+ base size=8 base align=8
+QSqlDatabase (0x0x7b9f3e9cba20) 0
+
+Class QSqlDriver::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriver::QPrivateSignal (0x0x7b9f3e9cbb40) 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 (0x0x7b9f424ab208) 0
+ vptr=((& QSqlDriver::_ZTV10QSqlDriver) + 16)
+QObject (0x0x7b9f3e9cbae0) 0
+ primary-for QSqlDriver (0x0x7b9f424ab208)
+
+Class QSqlDriverPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlDriverPlugin::QPrivateSignal (0x0x7b9f3e9e72a0) 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 (0x0x7b9f424ab4e0) 0
+ vptr=((& QSqlDriverPlugin::_ZTV16QSqlDriverPlugin) + 16)
+QObject (0x0x7b9f3e9e7000) 0
+ primary-for QSqlDriverPlugin (0x0x7b9f424ab4e0)
+
+Class QSqlError
+ size=8 align=8
+ base size=8 base align=8
+QSqlError (0x0x7b9f3e9e78a0) 0
+
+Class QSqlField
+ size=40 align=8
+ base size=40 base align=8
+QSqlField (0x0x7b9f3dfe9240) 0
+
+Class QSqlRecord
+ size=8 align=8
+ base size=8 base align=8
+QSqlRecord (0x0x7b9f3c78b0c0) 0
+
+Class QSqlIndex
+ size=80 align=8
+ base size=80 base align=8
+QSqlIndex (0x0x7b9f4076ca28) 0
+QSqlRecord (0x0x7b9f3ac72480) 0
+
+Class QSqlQuery
+ size=8 align=8
+ base size=8 base align=8
+QSqlQuery (0x0x7b9f3ba10900) 0
+
+Class QSqlQueryModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlQueryModel::QPrivateSignal (0x0x7b9f3ba10cc0) 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 (0x0x7b9f400026e8) 0
+ vptr=((& QSqlQueryModel::_ZTV14QSqlQueryModel) + 16)
+QAbstractTableModel (0x0x7b9f40002750) 0
+ primary-for QSqlQueryModel (0x0x7b9f400026e8)
+QAbstractItemModel (0x0x7b9f40002888) 0
+ primary-for QAbstractTableModel (0x0x7b9f40002750)
+QObject (0x0x7b9f3ba10c60) 0
+ primary-for QAbstractItemModel (0x0x7b9f40002888)
+
+Class QSqlTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlTableModel::QPrivateSignal (0x0x7b9f3ba10ea0) 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 (0x0x7b9f3fc989c0) 0
+ vptr=((& QSqlTableModel::_ZTV14QSqlTableModel) + 16)
+QSqlQueryModel (0x0x7b9f3fc98a28) 0
+ primary-for QSqlTableModel (0x0x7b9f3fc989c0)
+QAbstractTableModel (0x0x7b9f3fc98d00) 0
+ primary-for QSqlQueryModel (0x0x7b9f3fc98a28)
+QAbstractItemModel (0x0x7b9f3fcad000) 0
+ primary-for QAbstractTableModel (0x0x7b9f3fc98d00)
+QObject (0x0x7b9f3ba10e40) 0
+ primary-for QAbstractItemModel (0x0x7b9f3fcad000)
+
+Class QSqlRelation
+ size=72 align=8
+ base size=72 base align=8
+QSqlRelation (0x0x7b9f3b8f3060) 0
+
+Class QSqlRelationalTableModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSqlRelationalTableModel::QPrivateSignal (0x0x7b9f3b3ae360) 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 (0x0x7b9f3f310a28) 0
+ vptr=((& QSqlRelationalTableModel::_ZTV24QSqlRelationalTableModel) + 16)
+QSqlTableModel (0x0x7b9f3f310a90) 0
+ primary-for QSqlRelationalTableModel (0x0x7b9f3f310a28)
+QSqlQueryModel (0x0x7b9f3f310bc8) 0
+ primary-for QSqlTableModel (0x0x7b9f3f310a90)
+QAbstractTableModel (0x0x7b9f3f3bfc30) 0
+ primary-for QSqlQueryModel (0x0x7b9f3f310bc8)
+QAbstractItemModel (0x0x7b9f3f3bfc98) 0
+ primary-for QAbstractTableModel (0x0x7b9f3f3bfc30)
+QObject (0x0x7b9f3b3ae300) 0
+ primary-for QAbstractItemModel (0x0x7b9f3f3bfc98)
+
+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 (0x0x7b9f3b3ae4e0) 0
+ vptr=((& QSqlResult::_ZTV10QSqlResult) + 16)
+
+Class QHelpGlobal
+ size=1 align=1
+ base size=0 base align=1
+QHelpGlobal (0x0x7b9f3b3ae600) 0 empty
+
+Class QCompressedHelpInfo
+ size=8 align=8
+ base size=8 base align=8
+QCompressedHelpInfo (0x0x7b9f3b3ae660) 0
+
+Class QHelpContentItem
+ size=8 align=8
+ base size=8 base align=8
+QHelpContentItem (0x0x7b9f3b3ae780) 0
+
+Class QHelpContentModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentModel::QPrivateSignal (0x0x7b9f3b3ae840) 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 (0x0x7b9f3f3bff70) 0
+ vptr=((& QHelpContentModel::_ZTV17QHelpContentModel) + 16)
+QAbstractItemModel (0x0x7b9f3f3eb270) 0
+ primary-for QHelpContentModel (0x0x7b9f3f3bff70)
+QObject (0x0x7b9f3b3ae7e0) 0
+ primary-for QAbstractItemModel (0x0x7b9f3f3eb270)
+
+Class QHelpContentWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpContentWidget::QPrivateSignal (0x0x7b9f3b3ae9c0) 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 (0x0x7b9f3f3eb2d8) 0
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 16)
+QTreeView (0x0x7b9f3f407138) 0
+ primary-for QHelpContentWidget (0x0x7b9f3f3eb2d8)
+QAbstractItemView (0x0x7b9f3f4071a0) 0
+ primary-for QTreeView (0x0x7b9f3f407138)
+QAbstractScrollArea (0x0x7b9f3f4072d8) 0
+ primary-for QAbstractItemView (0x0x7b9f3f4071a0)
+QFrame (0x0x7b9f3f407958) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3f4072d8)
+QWidget (0x0x7b9f3eba8a80) 0
+ primary-for QFrame (0x0x7b9f3f407958)
+QObject (0x0x7b9f3b3ae900) 0
+ primary-for QWidget (0x0x7b9f3eba8a80)
+QPaintDevice (0x0x7b9f3b3ae960) 16
+ vptr=((& QHelpContentWidget::_ZTV18QHelpContentWidget) + 816)
+
+Class QHelpEngineCore::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngineCore::QPrivateSignal (0x0x7b9f3b3aeae0) 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 (0x0x7b9f3f407a90) 0
+ vptr=((& QHelpEngineCore::_ZTV15QHelpEngineCore) + 16)
+QObject (0x0x7b9f3b3aea80) 0
+ primary-for QHelpEngineCore (0x0x7b9f3f407a90)
+
+Class QHelpEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpEngine::QPrivateSignal (0x0x7b9f3b3aec00) 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 (0x0x7b9f3f407af8) 0
+ vptr=((& QHelpEngine::_ZTV11QHelpEngine) + 16)
+QHelpEngineCore (0x0x7b9f3f08a7b8) 0
+ primary-for QHelpEngine (0x0x7b9f3f407af8)
+QObject (0x0x7b9f3b3aeba0) 0
+ primary-for QHelpEngineCore (0x0x7b9f3f08a7b8)
+
+Class QHelpFilterData
+ size=8 align=8
+ base size=8 base align=8
+QHelpFilterData (0x0x7b9f3b3aecc0) 0
+
+Class QHelpFilterEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterEngine::QPrivateSignal (0x0x7b9f3b3aee40) 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 (0x0x7b9f3f08a820) 0
+ vptr=((& QHelpFilterEngine::_ZTV17QHelpFilterEngine) + 16)
+QObject (0x0x7b9f3b3aede0) 0
+ primary-for QHelpFilterEngine (0x0x7b9f3f08a820)
+
+Class QHelpFilterSettingsWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpFilterSettingsWidget::QPrivateSignal (0x0x7b9f3a410000) 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 (0x0x7b9f3f08a958) 0
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 16)
+QWidget (0x0x7b9f3e830620) 0
+ primary-for QHelpFilterSettingsWidget (0x0x7b9f3f08a958)
+QObject (0x0x7b9f3b3aef00) 0
+ primary-for QWidget (0x0x7b9f3e830620)
+QPaintDevice (0x0x7b9f3b3aef60) 16
+ vptr=((& QHelpFilterSettingsWidget::_ZTV25QHelpFilterSettingsWidget) + 448)
+
+Class QHelpIndexModel::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexModel::QPrivateSignal (0x0x7b9f3a4102a0) 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 (0x0x7b9f3f0a0000) 0
+ vptr=((& QHelpIndexModel::_ZTV15QHelpIndexModel) + 16)
+QStringListModel (0x0x7b9f3f0a0208) 0
+ primary-for QHelpIndexModel (0x0x7b9f3f0a0000)
+QAbstractListModel (0x0x7b9f3f0a0270) 0
+ primary-for QStringListModel (0x0x7b9f3f0a0208)
+QAbstractItemModel (0x0x7b9f3f0a0f08) 0
+ primary-for QAbstractListModel (0x0x7b9f3f0a0270)
+QObject (0x0x7b9f3a410240) 0
+ primary-for QAbstractItemModel (0x0x7b9f3f0a0f08)
+
+Class QHelpIndexWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpIndexWidget::QPrivateSignal (0x0x7b9f3a410420) 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 (0x0x7b9f3f0a0f70) 0
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 16)
+QListView (0x0x7b9f3f150000) 0
+ primary-for QHelpIndexWidget (0x0x7b9f3f0a0f70)
+QAbstractItemView (0x0x7b9f3f150068) 0
+ primary-for QListView (0x0x7b9f3f150000)
+QAbstractScrollArea (0x0x7b9f3f1501a0) 0
+ primary-for QAbstractItemView (0x0x7b9f3f150068)
+QFrame (0x0x7b9f3f150820) 0
+ primary-for QAbstractScrollArea (0x0x7b9f3f1501a0)
+QWidget (0x0x7b9f3e830230) 0
+ primary-for QFrame (0x0x7b9f3f150820)
+QObject (0x0x7b9f3a410360) 0
+ primary-for QWidget (0x0x7b9f3e830230)
+QPaintDevice (0x0x7b9f3a4103c0) 16
+ vptr=((& QHelpIndexWidget::_ZTV16QHelpIndexWidget) + 800)
+
+Class QHelpLink
+ size=32 align=8
+ base size=32 base align=8
+QHelpLink (0x0x7b9f3a4104e0) 0
+
+Class QHelpSearchQuery
+ size=32 align=8
+ base size=32 base align=8
+QHelpSearchQuery (0x0x7b9f3a410540) 0
+
+Class QHelpSearchResult
+ size=8 align=8
+ base size=8 base align=8
+QHelpSearchResult (0x0x7b9f3a410a20) 0
+
+Class QHelpSearchEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchEngine::QPrivateSignal (0x0x7b9f3a410b40) 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 (0x0x7b9f3ee1ad68) 0
+ vptr=((& QHelpSearchEngine::_ZTV17QHelpSearchEngine) + 16)
+QObject (0x0x7b9f3a410ae0) 0
+ primary-for QHelpSearchEngine (0x0x7b9f3ee1ad68)
+
+Class QHelpSearchQueryWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchQueryWidget::QPrivateSignal (0x0x7b9f3a410cc0) 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 (0x0x7b9f3ee1add0) 0
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 16)
+QWidget (0x0x7b9f3e8e80e0) 0
+ primary-for QHelpSearchQueryWidget (0x0x7b9f3ee1add0)
+QObject (0x0x7b9f3a410c00) 0
+ primary-for QWidget (0x0x7b9f3e8e80e0)
+QPaintDevice (0x0x7b9f3a410c60) 16
+ vptr=((& QHelpSearchQueryWidget::_ZTV22QHelpSearchQueryWidget) + 448)
+
+Class QHelpSearchResultWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHelpSearchResultWidget::QPrivateSignal (0x0x7b9f3a410e40) 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 (0x0x7b9f3ee3c3a8) 0
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 16)
+QWidget (0x0x7b9f3e8e81c0) 0
+ primary-for QHelpSearchResultWidget (0x0x7b9f3ee3c3a8)
+QObject (0x0x7b9f3a410d80) 0
+ primary-for QWidget (0x0x7b9f3e8e81c0)
+QPaintDevice (0x0x7b9f3a410de0) 16
+ vptr=((& QHelpSearchResultWidget::_ZTV23QHelpSearchResultWidget) + 448)
+
+Class QNetworkRequest
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequest (0x0x7b9f3a410f00) 0
+
+Class QNetworkCacheMetaData
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCacheMetaData (0x0x7b9f41b7c960) 0
+
+Class QAbstractNetworkCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractNetworkCache::QPrivateSignal (0x0x7b9f3d651720) 0 empty
+
+Vtable for QAbstractNetworkCache
+QAbstractNetworkCache::_ZTV21QAbstractNetworkCache: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QAbstractNetworkCache)
+16 (int (*)(...))QAbstractNetworkCache::metaObject
+24 (int (*)(...))QAbstractNetworkCache::qt_metacast
+32 (int (*)(...))QAbstractNetworkCache::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
+
+Class QAbstractNetworkCache
+ size=16 align=8
+ base size=16 base align=8
+QAbstractNetworkCache (0x0x7b9f3d210b60) 0
+ vptr=((& QAbstractNetworkCache::_ZTV21QAbstractNetworkCache) + 16)
+QObject (0x0x7b9f3d6516c0) 0
+ primary-for QAbstractNetworkCache (0x0x7b9f3d210b60)
+
+Class QAbstractSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractSocket::QPrivateSignal (0x0x7b9f3d651960) 0 empty
+
+Vtable for QAbstractSocket
+QAbstractSocket::_ZTV15QAbstractSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QAbstractSocket)
+16 (int (*)(...))QAbstractSocket::metaObject
+24 (int (*)(...))QAbstractSocket::qt_metacast
+32 (int (*)(...))QAbstractSocket::qt_metacall
+40 (int (*)(...))QAbstractSocket::~QAbstractSocket
+48 (int (*)(...))QAbstractSocket::~QAbstractSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QAbstractSocket
+ size=16 align=8
+ base size=16 base align=8
+QAbstractSocket (0x0x7b9f3d210bc8) 0
+ vptr=((& QAbstractSocket::_ZTV15QAbstractSocket) + 16)
+QIODevice (0x0x7b9f3d183c40) 0
+ primary-for QAbstractSocket (0x0x7b9f3d210bc8)
+QObject (0x0x7b9f3d6518a0) 0
+ primary-for QIODevice (0x0x7b9f3d183c40)
+QIODeviceBase (0x0x7b9f3d651900) 0 empty
+
+Class QAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QAuthenticator (0x0x7b9f3d6fb3c0) 0
+
+Class QDnsDomainNameRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsDomainNameRecord (0x0x7b9f3d6fb480) 0
+
+Class QDnsHostAddressRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsHostAddressRecord (0x0x7b9f3d72a180) 0
+
+Class QDnsMailExchangeRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsMailExchangeRecord (0x0x7b9f3d74ae40) 0
+
+Class QDnsServiceRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsServiceRecord (0x0x7b9f3d77db40) 0
+
+Class QDnsTextRecord
+ size=8 align=8
+ base size=8 base align=8
+QDnsTextRecord (0x0x7b9f3d7afde0) 0
+
+Class QDnsLookup::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDnsLookup::QPrivateSignal (0x0x7b9f3d7e9300) 0 empty
+
+Vtable for QDnsLookup
+QDnsLookup::_ZTV10QDnsLookup: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QDnsLookup)
+16 (int (*)(...))QDnsLookup::metaObject
+24 (int (*)(...))QDnsLookup::qt_metacast
+32 (int (*)(...))QDnsLookup::qt_metacall
+40 (int (*)(...))QDnsLookup::~QDnsLookup
+48 (int (*)(...))QDnsLookup::~QDnsLookup
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDnsLookup
+ size=16 align=8
+ base size=16 base align=8
+QDnsLookup (0x0x7b9f3d7e4f70) 0
+ vptr=((& QDnsLookup::_ZTV10QDnsLookup) + 16)
+QObject (0x0x7b9f3d7e92a0) 0
+ primary-for QDnsLookup (0x0x7b9f3d7e4f70)
+
+Class QIPv6Address
+ size=16 align=1
+ base size=16 base align=1
+QIPv6Address (0x0x7b9f3d7e9600) 0
+
+Class QHostAddress
+ size=8 align=8
+ base size=8 base align=8
+QHostAddress (0x0x7b9f3d7e9720) 0
+
+Class QTcpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpSocket::QPrivateSignal (0x0x7b9f3d453cc0) 0 empty
+
+Vtable for QTcpSocket
+QTcpSocket::_ZTV10QTcpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpSocket)
+16 (int (*)(...))QTcpSocket::metaObject
+24 (int (*)(...))QTcpSocket::qt_metacast
+32 (int (*)(...))QTcpSocket::qt_metacall
+40 (int (*)(...))QTcpSocket::~QTcpSocket
+48 (int (*)(...))QTcpSocket::~QTcpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QTcpSocket
+ size=16 align=8
+ base size=16 base align=8
+QTcpSocket (0x0x7b9f3d456820) 0
+ vptr=((& QTcpSocket::_ZTV10QTcpSocket) + 16)
+QAbstractSocket (0x0x7b9f3d456888) 0
+ primary-for QTcpSocket (0x0x7b9f3d456820)
+QIODevice (0x0x7b9f3d4583f0) 0
+ primary-for QAbstractSocket (0x0x7b9f3d456888)
+QObject (0x0x7b9f3d453c00) 0
+ primary-for QIODevice (0x0x7b9f3d4583f0)
+QIODeviceBase (0x0x7b9f3d453c60) 0 empty
+
+Class QSslCertificate
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificate (0x0x7b9f3d470ae0) 0
+
+Class QSslError
+ size=8 align=8
+ base size=8 base align=8
+QSslError (0x0x7b9f3d4e59c0) 0
+
+Class QSslSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslSocket::QPrivateSignal (0x0x7b9f3d29b3c0) 0 empty
+
+Vtable for QSslSocket
+QSslSocket::_ZTV10QSslSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslSocket)
+16 (int (*)(...))QSslSocket::metaObject
+24 (int (*)(...))QSslSocket::qt_metacast
+32 (int (*)(...))QSslSocket::qt_metacall
+40 (int (*)(...))QSslSocket::~QSslSocket
+48 (int (*)(...))QSslSocket::~QSslSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QSslSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QSslSocket::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QSslSocket::bytesAvailable
+184 (int (*)(...))QSslSocket::bytesToWrite
+192 (int (*)(...))QSslSocket::canReadLine
+200 (int (*)(...))QSslSocket::waitForReadyRead
+208 (int (*)(...))QSslSocket::waitForBytesWritten
+216 (int (*)(...))QSslSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QSslSocket::skipData
+240 (int (*)(...))QSslSocket::writeData
+248 (int (*)(...))QSslSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QSslSocket::connectToHost
+272 (int (*)(...))QSslSocket::disconnectFromHost
+280 (int (*)(...))QSslSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QSslSocket::setSocketDescriptor
+304 (int (*)(...))QSslSocket::setSocketOption
+312 (int (*)(...))QSslSocket::socketOption
+320 (int (*)(...))QSslSocket::waitForConnected
+328 (int (*)(...))QSslSocket::waitForDisconnected
+
+Class QSslSocket
+ size=16 align=8
+ base size=16 base align=8
+QSslSocket (0x0x7b9f3d298618) 0
+ vptr=((& QSslSocket::_ZTV10QSslSocket) + 16)
+QTcpSocket (0x0x7b9f3d298680) 0
+ primary-for QSslSocket (0x0x7b9f3d298618)
+QAbstractSocket (0x0x7b9f3d2986e8) 0
+ primary-for QTcpSocket (0x0x7b9f3d298680)
+QIODevice (0x0x7b9f3d592ee0) 0
+ primary-for QAbstractSocket (0x0x7b9f3d2986e8)
+QObject (0x0x7b9f3d29b300) 0
+ primary-for QIODevice (0x0x7b9f3d592ee0)
+QIODeviceBase (0x0x7b9f3d29b360) 0 empty
+
+Class QDtlsClientVerifier::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtlsClientVerifier::QPrivateSignal (0x0x7b9f3d29b720) 0 empty
+
+Class QDtlsClientVerifier::GeneratorParameters
+ size=32 align=8
+ base size=32 base align=8
+QDtlsClientVerifier::GeneratorParameters (0x0x7b9f3d29b780) 0
+
+Vtable for QDtlsClientVerifier
+QDtlsClientVerifier::_ZTV19QDtlsClientVerifier: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QDtlsClientVerifier)
+16 (int (*)(...))QDtlsClientVerifier::metaObject
+24 (int (*)(...))QDtlsClientVerifier::qt_metacast
+32 (int (*)(...))QDtlsClientVerifier::qt_metacall
+40 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+48 (int (*)(...))QDtlsClientVerifier::~QDtlsClientVerifier
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtlsClientVerifier
+ size=16 align=8
+ base size=16 base align=8
+QDtlsClientVerifier (0x0x7b9f3d298750) 0
+ vptr=((& QDtlsClientVerifier::_ZTV19QDtlsClientVerifier) + 16)
+QObject (0x0x7b9f3d29b6c0) 0
+ primary-for QDtlsClientVerifier (0x0x7b9f3d298750)
+
+Class QDtls::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QDtls::QPrivateSignal (0x0x7b9f3d29b960) 0 empty
+
+Vtable for QDtls
+QDtls::_ZTV5QDtls: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI5QDtls)
+16 (int (*)(...))QDtls::metaObject
+24 (int (*)(...))QDtls::qt_metacast
+32 (int (*)(...))QDtls::qt_metacall
+40 (int (*)(...))QDtls::~QDtls
+48 (int (*)(...))QDtls::~QDtls
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QDtls
+ size=16 align=8
+ base size=16 base align=8
+QDtls (0x0x7b9f3d2987b8) 0
+ vptr=((& QDtls::_ZTV5QDtls) + 16)
+QObject (0x0x7b9f3d29b900) 0
+ primary-for QDtls (0x0x7b9f3d2987b8)
+
+Class QHostInfo
+ size=8 align=8
+ base size=8 base align=8
+QHostInfo (0x0x7b9f3d29bae0) 0
+
+Class QHstsPolicy
+ size=8 align=8
+ base size=8 base align=8
+QHstsPolicy (0x0x7b9f3d3ea720) 0
+
+Class QHttp1Configuration::ShortData
+ size=8 align=1
+ base size=8 base align=1
+QHttp1Configuration::ShortData (0x0x7b9f3d01db40) 0
+
+Class QHttp1Configuration::U
+ size=8 align=8
+ base size=8 base align=8
+QHttp1Configuration::U (0x0x7b9f3d01dba0) 0
+
+Class QHttp1Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp1Configuration (0x0x7b9f3d01dae0) 0
+
+Class QHttp2Configuration
+ size=8 align=8
+ base size=8 base align=8
+QHttp2Configuration (0x0x7b9f4096fd20) 0
+
+Class QHttpHeaders
+ size=8 align=8
+ base size=8 base align=8
+QHttpHeaders (0x0x7b9f3dccfb40) 0
+
+Class QHttpPart
+ size=8 align=8
+ base size=8 base align=8
+QHttpPart (0x0x7b9f3fb58b40) 0
+
+Class QHttpMultiPart::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QHttpMultiPart::QPrivateSignal (0x0x7b9f3fbabb40) 0 empty
+
+Vtable for QHttpMultiPart
+QHttpMultiPart::_ZTV14QHttpMultiPart: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QHttpMultiPart)
+16 (int (*)(...))QHttpMultiPart::metaObject
+24 (int (*)(...))QHttpMultiPart::qt_metacast
+32 (int (*)(...))QHttpMultiPart::qt_metacall
+40 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+48 (int (*)(...))QHttpMultiPart::~QHttpMultiPart
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QHttpMultiPart
+ size=16 align=8
+ base size=16 base align=8
+QHttpMultiPart (0x0x7b9f3fbacaf8) 0
+ vptr=((& QHttpMultiPart::_ZTV14QHttpMultiPart) + 16)
+QObject (0x0x7b9f3fbabae0) 0
+ primary-for QHttpMultiPart (0x0x7b9f3fbacaf8)
+
+Class QLocalServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalServer::QPrivateSignal (0x0x7b9f3fbabd20) 0 empty
+
+Vtable for QLocalServer
+QLocalServer::_ZTV12QLocalServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalServer)
+16 (int (*)(...))QLocalServer::metaObject
+24 (int (*)(...))QLocalServer::qt_metacast
+32 (int (*)(...))QLocalServer::qt_metacall
+40 (int (*)(...))QLocalServer::~QLocalServer
+48 (int (*)(...))QLocalServer::~QLocalServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalServer::hasPendingConnections
+120 (int (*)(...))QLocalServer::nextPendingConnection
+128 (int (*)(...))QLocalServer::incomingConnection
+
+Class QLocalServer
+ size=16 align=8
+ base size=16 base align=8
+QLocalServer (0x0x7b9f3fbacb60) 0
+ vptr=((& QLocalServer::_ZTV12QLocalServer) + 16)
+QObject (0x0x7b9f3fbabcc0) 0
+ primary-for QLocalServer (0x0x7b9f3fbacb60)
+
+Class QLocalSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QLocalSocket::QPrivateSignal (0x0x7b9f3fbc25a0) 0 empty
+
+Vtable for QLocalSocket
+QLocalSocket::_ZTV12QLocalSocket: 31 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QLocalSocket)
+16 (int (*)(...))QLocalSocket::metaObject
+24 (int (*)(...))QLocalSocket::qt_metacast
+32 (int (*)(...))QLocalSocket::qt_metacall
+40 (int (*)(...))QLocalSocket::~QLocalSocket
+48 (int (*)(...))QLocalSocket::~QLocalSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QLocalSocket::isSequential
+120 (int (*)(...))QLocalSocket::open
+128 (int (*)(...))QLocalSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QLocalSocket::bytesAvailable
+184 (int (*)(...))QLocalSocket::bytesToWrite
+192 (int (*)(...))QLocalSocket::canReadLine
+200 (int (*)(...))QLocalSocket::waitForReadyRead
+208 (int (*)(...))QLocalSocket::waitForBytesWritten
+216 (int (*)(...))QLocalSocket::readData
+224 (int (*)(...))QLocalSocket::readLineData
+232 (int (*)(...))QLocalSocket::skipData
+240 (int (*)(...))QLocalSocket::writeData
+
+Class QLocalSocket
+ size=16 align=8
+ base size=16 base align=8
+QLocalSocket (0x0x7b9f3fbacc98) 0
+ vptr=((& QLocalSocket::_ZTV12QLocalSocket) + 16)
+QIODevice (0x0x7b9f3fbbd8c0) 0
+ primary-for QLocalSocket (0x0x7b9f3fbacc98)
+QObject (0x0x7b9f3fbc24e0) 0
+ primary-for QIODevice (0x0x7b9f3fbbd8c0)
+QIODeviceBase (0x0x7b9f3fbc2540) 0 empty
+
+Class QSslConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QSslConfiguration (0x0x7b9f3fbc2c60) 0
+
+Class QSslPreSharedKeyAuthenticator
+ size=8 align=8
+ base size=8 base align=8
+QSslPreSharedKeyAuthenticator (0x0x7b9f3da5a120) 0
+
+Class QNetworkAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkAccessManager::QPrivateSignal (0x0x7b9f3d6c5d20) 0 empty
+
+Vtable for QNetworkAccessManager
+QNetworkAccessManager::_ZTV21QNetworkAccessManager: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QNetworkAccessManager)
+16 (int (*)(...))QNetworkAccessManager::metaObject
+24 (int (*)(...))QNetworkAccessManager::qt_metacast
+32 (int (*)(...))QNetworkAccessManager::qt_metacall
+40 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+48 (int (*)(...))QNetworkAccessManager::~QNetworkAccessManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkAccessManager::supportedSchemes
+120 (int (*)(...))QNetworkAccessManager::createRequest
+
+Class QNetworkAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QNetworkAccessManager (0x0x7b9f3d79b000) 0
+ vptr=((& QNetworkAccessManager::_ZTV21QNetworkAccessManager) + 16)
+QObject (0x0x7b9f3d6c5cc0) 0
+ primary-for QNetworkAccessManager (0x0x7b9f3d79b000)
+
+Class QNetworkCookie
+ size=8 align=8
+ base size=8 base align=8
+QNetworkCookie (0x0x7b9f3d6c5ea0) 0
+
+Class QNetworkCookieJar::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkCookieJar::QPrivateSignal (0x0x7b9f3d29cf60) 0 empty
+
+Vtable for QNetworkCookieJar
+QNetworkCookieJar::_ZTV17QNetworkCookieJar: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkCookieJar)
+16 (int (*)(...))QNetworkCookieJar::metaObject
+24 (int (*)(...))QNetworkCookieJar::qt_metacast
+32 (int (*)(...))QNetworkCookieJar::qt_metacall
+40 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+48 (int (*)(...))QNetworkCookieJar::~QNetworkCookieJar
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkCookieJar::cookiesForUrl
+120 (int (*)(...))QNetworkCookieJar::setCookiesFromUrl
+128 (int (*)(...))QNetworkCookieJar::insertCookie
+136 (int (*)(...))QNetworkCookieJar::updateCookie
+144 (int (*)(...))QNetworkCookieJar::deleteCookie
+152 (int (*)(...))QNetworkCookieJar::validateCookie
+
+Class QNetworkCookieJar
+ size=16 align=8
+ base size=16 base align=8
+QNetworkCookieJar (0x0x7b9f3d29ad68) 0
+ vptr=((& QNetworkCookieJar::_ZTV17QNetworkCookieJar) + 16)
+QObject (0x0x7b9f3d29cf00) 0
+ primary-for QNetworkCookieJar (0x0x7b9f3d29ad68)
+
+Class QNetworkDatagram
+ size=8 align=8
+ base size=8 base align=8
+QNetworkDatagram (0x0x7b9f3d014120) 0
+
+Class QNetworkDiskCache::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkDiskCache::QPrivateSignal (0x0x7b9f3d05a4e0) 0 empty
+
+Vtable for QNetworkDiskCache
+QNetworkDiskCache::_ZTV17QNetworkDiskCache: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QNetworkDiskCache)
+16 (int (*)(...))QNetworkDiskCache::metaObject
+24 (int (*)(...))QNetworkDiskCache::qt_metacast
+32 (int (*)(...))QNetworkDiskCache::qt_metacall
+40 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+48 (int (*)(...))QNetworkDiskCache::~QNetworkDiskCache
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QNetworkDiskCache::metaData
+120 (int (*)(...))QNetworkDiskCache::updateMetaData
+128 (int (*)(...))QNetworkDiskCache::data
+136 (int (*)(...))QNetworkDiskCache::remove
+144 (int (*)(...))QNetworkDiskCache::cacheSize
+152 (int (*)(...))QNetworkDiskCache::prepare
+160 (int (*)(...))QNetworkDiskCache::insert
+168 (int (*)(...))QNetworkDiskCache::clear
+176 (int (*)(...))QNetworkDiskCache::expire
+
+Class QNetworkDiskCache
+ size=16 align=8
+ base size=16 base align=8
+QNetworkDiskCache (0x0x7b9f3d049a90) 0
+ vptr=((& QNetworkDiskCache::_ZTV17QNetworkDiskCache) + 16)
+QAbstractNetworkCache (0x0x7b9f3d049af8) 0
+ primary-for QNetworkDiskCache (0x0x7b9f3d049a90)
+QObject (0x0x7b9f3d05a480) 0
+ primary-for QAbstractNetworkCache (0x0x7b9f3d049af8)
+
+Class QNetworkInformation::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkInformation::QPrivateSignal (0x0x7b9f3d05a6c0) 0 empty
+
+Vtable for QNetworkInformation
+QNetworkInformation::_ZTV19QNetworkInformation: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QNetworkInformation)
+16 (int (*)(...))QNetworkInformation::metaObject
+24 (int (*)(...))QNetworkInformation::qt_metacast
+32 (int (*)(...))QNetworkInformation::qt_metacall
+40 (int (*)(...))QNetworkInformation::~QNetworkInformation
+48 (int (*)(...))QNetworkInformation::~QNetworkInformation
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QNetworkInformation
+ size=16 align=8
+ base size=16 base align=8
+QNetworkInformation (0x0x7b9f3d049b60) 0
+ vptr=((& QNetworkInformation::_ZTV19QNetworkInformation) + 16)
+QObject (0x0x7b9f3d05a660) 0
+ primary-for QNetworkInformation (0x0x7b9f3d049b60)
+
+Class QNetworkAddressEntry
+ size=8 align=8
+ base size=8 base align=8
+QNetworkAddressEntry (0x0x7b9f3d05af00) 0
+
+Class QNetworkInterface
+ size=8 align=8
+ base size=8 base align=8
+QNetworkInterface (0x0x7b9f3baa10c0) 0
+
+Class QNetworkProxyQuery
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyQuery (0x0x7b9f3b6e6a20) 0
+
+Class QNetworkProxy
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxy (0x0x7b9f3b47a840) 0
+
+Vtable for QNetworkProxyFactory
+QNetworkProxyFactory::_ZTV20QNetworkProxyFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QNetworkProxyFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNetworkProxyFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkProxyFactory (0x0x7b9f3b577c00) 0 nearly-empty
+ vptr=((& QNetworkProxyFactory::_ZTV20QNetworkProxyFactory) + 16)
+
+Class QNetworkReply::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QNetworkReply::QPrivateSignal (0x0x7b9f3b2c87e0) 0 empty
+
+Vtable for QNetworkReply
+QNetworkReply::_ZTV13QNetworkReply: 37 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QNetworkReply)
+16 (int (*)(...))QNetworkReply::metaObject
+24 (int (*)(...))QNetworkReply::qt_metacast
+32 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QNetworkReply::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 (*)(...))QNetworkReply::writeData
+248 (int (*)(...))QNetworkReply::setReadBufferSize
+256 (int (*)(...))__cxa_pure_virtual
+264 (int (*)(...))QNetworkReply::ignoreSslErrors
+272 (int (*)(...))QNetworkReply::sslConfigurationImplementation
+280 (int (*)(...))QNetworkReply::setSslConfigurationImplementation
+288 (int (*)(...))QNetworkReply::ignoreSslErrorsImplementation
+
+Class QNetworkReply
+ size=16 align=8
+ base size=16 base align=8
+QNetworkReply (0x0x7b9f3b232bc8) 0
+ vptr=((& QNetworkReply::_ZTV13QNetworkReply) + 16)
+QIODevice (0x0x7b9f3b2585b0) 0
+ primary-for QNetworkReply (0x0x7b9f3b232bc8)
+QObject (0x0x7b9f3b2c8720) 0
+ primary-for QIODevice (0x0x7b9f3b2585b0)
+QIODeviceBase (0x0x7b9f3b2c8780) 0 empty
+
+Class QNetworkRequestFactory
+ size=8 align=8
+ base size=8 base align=8
+QNetworkRequestFactory (0x0x7b9f3b088540) 0
+
+Class QOcspResponse
+ size=8 align=8
+ base size=8 base align=8
+QOcspResponse (0x0x7b9f3af451e0) 0
+
+Class QRestAccessManager::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QRestAccessManager::QPrivateSignal (0x0x7b9f3ad44c00) 0 empty
+
+Vtable for QRestAccessManager
+QRestAccessManager::_ZTV18QRestAccessManager: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QRestAccessManager)
+16 (int (*)(...))QRestAccessManager::metaObject
+24 (int (*)(...))QRestAccessManager::qt_metacast
+32 (int (*)(...))QRestAccessManager::qt_metacall
+40 (int (*)(...))QRestAccessManager::~QRestAccessManager
+48 (int (*)(...))QRestAccessManager::~QRestAccessManager
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QRestAccessManager
+ size=16 align=8
+ base size=16 base align=8
+QRestAccessManager (0x0x7b9f3ad37e38) 0
+ vptr=((& QRestAccessManager::_ZTV18QRestAccessManager) + 16)
+QObject (0x0x7b9f3ad44ba0) 0
+ primary-for QRestAccessManager (0x0x7b9f3ad37e38)
+
+Class QRestReply
+ size=24 align=8
+ base size=24 base align=8
+QRestReply (0x0x7b9f3a8a0180) 0
+
+Class QSslCertificateExtension
+ size=8 align=8
+ base size=8 base align=8
+QSslCertificateExtension (0x0x7b9f3a612840) 0
+
+Class QSslCipher
+ size=8 align=8
+ base size=8 base align=8
+QSslCipher (0x0x7b9f3a3dd480) 0
+
+Class QSslDiffieHellmanParameters
+ size=8 align=8
+ base size=8 base align=8
+QSslDiffieHellmanParameters (0x0x7b9f39d04900) 0
+
+Class QSslEllipticCurve
+ size=4 align=4
+ base size=4 base align=4
+QSslEllipticCurve (0x0x7b9f3999aa20) 0
+
+Class QSslKey
+ size=8 align=8
+ base size=8 base align=8
+QSslKey (0x0x7b9f39b609c0) 0
+
+Class QTcpServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTcpServer::QPrivateSignal (0x0x7b9f3983d960) 0 empty
+
+Vtable for QTcpServer
+QTcpServer::_ZTV10QTcpServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QTcpServer)
+16 (int (*)(...))QTcpServer::metaObject
+24 (int (*)(...))QTcpServer::qt_metacast
+32 (int (*)(...))QTcpServer::qt_metacall
+40 (int (*)(...))QTcpServer::~QTcpServer
+48 (int (*)(...))QTcpServer::~QTcpServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QTcpServer::incomingConnection
+
+Class QTcpServer
+ size=16 align=8
+ base size=16 base align=8
+QTcpServer (0x0x7b9f398408f0) 0
+ vptr=((& QTcpServer::_ZTV10QTcpServer) + 16)
+QObject (0x0x7b9f3983d900) 0
+ primary-for QTcpServer (0x0x7b9f398408f0)
+
+Class QSslServer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSslServer::QPrivateSignal (0x0x7b9f3983db40) 0 empty
+
+Vtable for QSslServer
+QSslServer::_ZTV10QSslServer: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSslServer)
+16 (int (*)(...))QSslServer::metaObject
+24 (int (*)(...))QSslServer::qt_metacast
+32 (int (*)(...))QSslServer::qt_metacall
+40 (int (*)(...))QSslServer::~QSslServer
+48 (int (*)(...))QSslServer::~QSslServer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QTcpServer::hasPendingConnections
+120 (int (*)(...))QTcpServer::nextPendingConnection
+128 (int (*)(...))QSslServer::incomingConnection
+
+Class QSslServer
+ size=16 align=8
+ base size=16 base align=8
+QSslServer (0x0x7b9f39840958) 0
+ vptr=((& QSslServer::_ZTV10QSslServer) + 16)
+QTcpServer (0x0x7b9f398409c0) 0
+ primary-for QSslServer (0x0x7b9f39840958)
+QObject (0x0x7b9f3983dae0) 0
+ primary-for QTcpServer (0x0x7b9f398409c0)
+
+Class QUdpSocket::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QUdpSocket::QPrivateSignal (0x0x7b9f3983dd80) 0 empty
+
+Vtable for QUdpSocket
+QUdpSocket::_ZTV10QUdpSocket: 42 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QUdpSocket)
+16 (int (*)(...))QUdpSocket::metaObject
+24 (int (*)(...))QUdpSocket::qt_metacast
+32 (int (*)(...))QUdpSocket::qt_metacall
+40 (int (*)(...))QUdpSocket::~QUdpSocket
+48 (int (*)(...))QUdpSocket::~QUdpSocket
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QAbstractSocket::isSequential
+120 (int (*)(...))QIODevice::open
+128 (int (*)(...))QAbstractSocket::close
+136 (int (*)(...))QIODevice::pos
+144 (int (*)(...))QIODevice::size
+152 (int (*)(...))QIODevice::seek
+160 (int (*)(...))QIODevice::atEnd
+168 (int (*)(...))QIODevice::reset
+176 (int (*)(...))QAbstractSocket::bytesAvailable
+184 (int (*)(...))QAbstractSocket::bytesToWrite
+192 (int (*)(...))QIODevice::canReadLine
+200 (int (*)(...))QAbstractSocket::waitForReadyRead
+208 (int (*)(...))QAbstractSocket::waitForBytesWritten
+216 (int (*)(...))QAbstractSocket::readData
+224 (int (*)(...))QAbstractSocket::readLineData
+232 (int (*)(...))QAbstractSocket::skipData
+240 (int (*)(...))QAbstractSocket::writeData
+248 (int (*)(...))QAbstractSocket::resume
+256 (int (*)(...))QAbstractSocket::bind
+264 (int (*)(...))QAbstractSocket::connectToHost
+272 (int (*)(...))QAbstractSocket::disconnectFromHost
+280 (int (*)(...))QAbstractSocket::setReadBufferSize
+288 (int (*)(...))QAbstractSocket::socketDescriptor
+296 (int (*)(...))QAbstractSocket::setSocketDescriptor
+304 (int (*)(...))QAbstractSocket::setSocketOption
+312 (int (*)(...))QAbstractSocket::socketOption
+320 (int (*)(...))QAbstractSocket::waitForConnected
+328 (int (*)(...))QAbstractSocket::waitForDisconnected
+
+Class QUdpSocket
+ size=16 align=8
+ base size=16 base align=8
+QUdpSocket (0x0x7b9f39840a28) 0
+ vptr=((& QUdpSocket::_ZTV10QUdpSocket) + 16)
+QAbstractSocket (0x0x7b9f39840a90) 0
+ primary-for QUdpSocket (0x0x7b9f39840a28)
+QIODevice (0x0x7b9f39b51f50) 0
+ primary-for QAbstractSocket (0x0x7b9f39840a90)
+QObject (0x0x7b9f3983dcc0) 0
+ primary-for QIODevice (0x0x7b9f39b51f50)
+QIODeviceBase (0x0x7b9f3983dd20) 0 empty
+
+Class QAbstractPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractPrintDialog::QPrivateSignal (0x0x7b9f398b20c0) 0 empty
+
+Vtable for QAbstractPrintDialog
+QAbstractPrintDialog::_ZTV20QAbstractPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QAbstractPrintDialog)
+16 (int (*)(...))QAbstractPrintDialog::metaObject
+24 (int (*)(...))QAbstractPrintDialog::qt_metacast
+32 (int (*)(...))QAbstractPrintDialog::qt_metacall
+40 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+48 (int (*)(...))QAbstractPrintDialog::~QAbstractPrintDialog
+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 (*)(...))(& _ZTI20QAbstractPrintDialog)
+488 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD1Ev
+496 (int (*)(...))QAbstractPrintDialog::_ZThn16_N20QAbstractPrintDialogD0Ev
+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 QAbstractPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QAbstractPrintDialog (0x0x7b9f39840af8) 0
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 16)
+QDialog (0x0x7b9f39840b60) 0
+ primary-for QAbstractPrintDialog (0x0x7b9f39840af8)
+QWidget (0x0x7b9f398b0150) 0
+ primary-for QDialog (0x0x7b9f39840b60)
+QObject (0x0x7b9f398b2000) 0
+ primary-for QWidget (0x0x7b9f398b0150)
+QPaintDevice (0x0x7b9f398b2060) 16
+ vptr=((& QAbstractPrintDialog::_ZTV20QAbstractPrintDialog) + 488)
+
+Class QPageSetupDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPageSetupDialog::QPrivateSignal (0x0x7b9f398b2900) 0 empty
+
+Vtable for QPageSetupDialog
+QPageSetupDialog::_ZTV16QPageSetupDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QPageSetupDialog)
+16 (int (*)(...))QPageSetupDialog::metaObject
+24 (int (*)(...))QPageSetupDialog::qt_metacast
+32 (int (*)(...))QPageSetupDialog::qt_metacall
+40 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+48 (int (*)(...))QPageSetupDialog::~QPageSetupDialog
+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 (*)(...))QPageSetupDialog::exec
+448 (int (*)(...))QPageSetupDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI16QPageSetupDialog)
+488 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD1Ev
+496 (int (*)(...))QPageSetupDialog::_ZThn16_N16QPageSetupDialogD0Ev
+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 QPageSetupDialog
+ size=40 align=8
+ base size=40 base align=8
+QPageSetupDialog (0x0x7b9f39840c98) 0
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 16)
+QDialog (0x0x7b9f39840d00) 0
+ primary-for QPageSetupDialog (0x0x7b9f39840c98)
+QWidget (0x0x7b9f398b0c40) 0
+ primary-for QDialog (0x0x7b9f39840d00)
+QObject (0x0x7b9f398b2840) 0
+ primary-for QWidget (0x0x7b9f398b0c40)
+QPaintDevice (0x0x7b9f398b28a0) 16
+ vptr=((& QPageSetupDialog::_ZTV16QPageSetupDialog) + 488)
+
+Class QPrintDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintDialog::QPrivateSignal (0x0x7b9f398b2b40) 0 empty
+
+Vtable for QPrintDialog
+QPrintDialog::_ZTV12QPrintDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintDialog)
+16 (int (*)(...))QPrintDialog::metaObject
+24 (int (*)(...))QPrintDialog::qt_metacast
+32 (int (*)(...))QPrintDialog::qt_metacall
+40 (int (*)(...))QPrintDialog::~QPrintDialog
+48 (int (*)(...))QPrintDialog::~QPrintDialog
+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 (*)(...))QPrintDialog::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 (*)(...))QPrintDialog::exec
+448 (int (*)(...))QPrintDialog::done
+456 (int (*)(...))QPrintDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI12QPrintDialog)
+488 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD1Ev
+496 (int (*)(...))QPrintDialog::_ZThn16_N12QPrintDialogD0Ev
+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 QPrintDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintDialog (0x0x7b9f39840d68) 0
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 16)
+QAbstractPrintDialog (0x0x7b9f39840dd0) 0
+ primary-for QPrintDialog (0x0x7b9f39840d68)
+QDialog (0x0x7b9f39840e38) 0
+ primary-for QAbstractPrintDialog (0x0x7b9f39840dd0)
+QWidget (0x0x7b9f398b0e00) 0
+ primary-for QDialog (0x0x7b9f39840e38)
+QObject (0x0x7b9f398b2a80) 0
+ primary-for QWidget (0x0x7b9f398b0e00)
+QPaintDevice (0x0x7b9f398b2ae0) 16
+ vptr=((& QPrintDialog::_ZTV12QPrintDialog) + 488)
+
+Vtable for QPrinter
+QPrinter::_ZTV8QPrinter: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI8QPrinter)
+16 (int (*)(...))QPrinter::~QPrinter
+24 (int (*)(...))QPrinter::~QPrinter
+32 (int (*)(...))QPrinter::devType
+40 (int (*)(...))QPrinter::paintEngine
+48 (int (*)(...))QPrinter::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+80 (int (*)(...))QPrinter::newPage
+88 (int (*)(...))QPagedPaintDevice::setPageLayout
+96 (int (*)(...))QPagedPaintDevice::setPageSize
+104 (int (*)(...))QPagedPaintDevice::setPageOrientation
+112 (int (*)(...))QPagedPaintDevice::setPageMargins
+120 (int (*)(...))QPagedPaintDevice::setPageRanges
+
+Class QPrinter
+ size=32 align=8
+ base size=32 base align=8
+QPrinter (0x0x7b9f39840ea0) 0
+ vptr=((& QPrinter::_ZTV8QPrinter) + 16)
+QPagedPaintDevice (0x0x7b9f39840f08) 0
+ primary-for QPrinter (0x0x7b9f39840ea0)
+QPaintDevice (0x0x7b9f398b2cc0) 0
+ primary-for QPagedPaintDevice (0x0x7b9f39840f08)
+
+Vtable for QPrintEngine
+QPrintEngine::_ZTV12QPrintEngine: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QPrintEngine)
+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 QPrintEngine
+ size=8 align=8
+ base size=8 base align=8
+QPrintEngine (0x0x7b9f416ac8a0) 0 nearly-empty
+ vptr=((& QPrintEngine::_ZTV12QPrintEngine) + 16)
+
+Class QPrinterInfo
+ size=8 align=8
+ base size=8 base align=8
+QPrinterInfo (0x0x7b9f416acae0) 0
+
+Class QPrintPreviewDialog::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewDialog::QPrivateSignal (0x0x7b9f416acd20) 0 empty
+
+Vtable for QPrintPreviewDialog
+QPrintPreviewDialog::_ZTV19QPrintPreviewDialog: 69 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+16 (int (*)(...))QPrintPreviewDialog::metaObject
+24 (int (*)(...))QPrintPreviewDialog::qt_metacast
+32 (int (*)(...))QPrintPreviewDialog::qt_metacall
+40 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+48 (int (*)(...))QPrintPreviewDialog::~QPrintPreviewDialog
+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 (*)(...))QPrintPreviewDialog::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 (*)(...))QPrintPreviewDialog::done
+456 (int (*)(...))QDialog::accept
+464 (int (*)(...))QDialog::reject
+472 (int (*)(...))-16
+480 (int (*)(...))(& _ZTI19QPrintPreviewDialog)
+488 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD1Ev
+496 (int (*)(...))QPrintPreviewDialog::_ZThn16_N19QPrintPreviewDialogD0Ev
+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 QPrintPreviewDialog
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewDialog (0x0x7b9f40f014e0) 0
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 16)
+QDialog (0x0x7b9f40f01548) 0
+ primary-for QPrintPreviewDialog (0x0x7b9f40f014e0)
+QWidget (0x0x7b9f40f21770) 0
+ primary-for QDialog (0x0x7b9f40f01548)
+QObject (0x0x7b9f416acc60) 0
+ primary-for QWidget (0x0x7b9f40f21770)
+QPaintDevice (0x0x7b9f416accc0) 16
+ vptr=((& QPrintPreviewDialog::_ZTV19QPrintPreviewDialog) + 488)
+
+Class QPrintPreviewWidget::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QPrintPreviewWidget::QPrivateSignal (0x0x7b9f416acf60) 0 empty
+
+Vtable for QPrintPreviewWidget
+QPrintPreviewWidget::_ZTV19QPrintPreviewWidget: 64 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QPrintPreviewWidget)
+16 (int (*)(...))QPrintPreviewWidget::metaObject
+24 (int (*)(...))QPrintPreviewWidget::qt_metacast
+32 (int (*)(...))QPrintPreviewWidget::qt_metacall
+40 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+48 (int (*)(...))QPrintPreviewWidget::~QPrintPreviewWidget
+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 (*)(...))QPrintPreviewWidget::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 (*)(...))(& _ZTI19QPrintPreviewWidget)
+448 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD1Ev
+456 (int (*)(...))QPrintPreviewWidget::_ZThn16_N19QPrintPreviewWidgetD0Ev
+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 QPrintPreviewWidget
+ size=40 align=8
+ base size=40 base align=8
+QPrintPreviewWidget (0x0x7b9f40f015b0) 0
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 16)
+QWidget (0x0x7b9f40f21930) 0
+ primary-for QPrintPreviewWidget (0x0x7b9f40f015b0)
+QObject (0x0x7b9f416acea0) 0
+ primary-for QWidget (0x0x7b9f40f21930)
+QPaintDevice (0x0x7b9f416acf00) 16
+ vptr=((& QPrintPreviewWidget::_ZTV19QPrintPreviewWidget) + 448)
+
+Class QJSValue
+ size=8 align=8
+ base size=8 base align=8
+QJSValue (0x0x7b9f41e6a120) 0
+
+Class QJSNumberCoercion
+ size=8 align=8
+ base size=8 base align=8
+QJSNumberCoercion (0x0x7b9f400d6d80) 0
+
+Class QJSPrimitiveUndefined
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveUndefined (0x0x7b9f400ec600) 0 empty
+
+Class QJSPrimitiveNull
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveNull (0x0x7b9f400ec660) 0 empty
+
+Class QJSPrimitiveValue::AddOperators
+ size=1 align=1
+ base size=0 base align=1
+QJSPrimitiveValue::AddOperators (0x0x7b9f400ec780) 0 empty
+
+Class QJSPrimitiveValue::SubOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::SubOperators (0x0x7b9f400e1680) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::SubOperators> (0x0x7b9f400ec840) 0 empty
+
+Class QJSPrimitiveValue::MulOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::MulOperators (0x0x7b9f400e16e8) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::MulOperators> (0x0x7b9f400ec900) 0 empty
+
+Class QJSPrimitiveValue::DivOperators
+ size=1 align=1
+ base size=1 base align=1
+QJSPrimitiveValue::DivOperators (0x0x7b9f400e1750) 0 empty
+QJSPrimitiveValue::StringNaNOperators<QJSPrimitiveValue::DivOperators> (0x0x7b9f400ec9c0) 0 empty
+
+Class QJSPrimitiveValue::QJSPrimitiveValuePrivate
+ size=32 align=8
+ base size=25 base align=8
+QJSPrimitiveValue::QJSPrimitiveValuePrivate (0x0x7b9f400eca20) 0
+
+Class QJSPrimitiveValue
+ size=32 align=8
+ base size=32 base align=8
+QJSPrimitiveValue (0x0x7b9f400ec6c0) 0
+
+Class QJSManagedValue
+ size=8 align=8
+ base size=8 base align=8
+QJSManagedValue (0x0x7b9f3caa4060) 0
+
+Class QQmlDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+QQmlDebuggingEnabler (0x0x7b9f3caa4360) 0 empty
+
+Class {anonymous}::QQmlTriviallyDestructibleDebuggingEnabler
+ size=1 align=1
+ base size=0 base align=1
+{anonymous}::QQmlTriviallyDestructibleDebuggingEnabler (0x0x7b9f3caa45a0) 0 empty
+
+Class QJSEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QJSEngine::QPrivateSignal (0x0x7b9f3c4dcd80) 0 empty
+
+Vtable for QJSEngine
+QJSEngine::_ZTV9QJSEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI9QJSEngine)
+16 (int (*)(...))QJSEngine::metaObject
+24 (int (*)(...))QJSEngine::qt_metacast
+32 (int (*)(...))QJSEngine::qt_metacall
+40 (int (*)(...))QJSEngine::~QJSEngine
+48 (int (*)(...))QJSEngine::~QJSEngine
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QJSEngine
+ size=24 align=8
+ base size=24 base align=8
+QJSEngine (0x0x7b9f3c209bc8) 0
+ vptr=((& QJSEngine::_ZTV9QJSEngine) + 16)
+QObject (0x0x7b9f3c4dcd20) 0
+ primary-for QJSEngine (0x0x7b9f3c209bc8)
+
+Class QQmlListReference
+ size=8 align=8
+ base size=8 base align=8
+QQmlListReference (0x0x7b9f3ba39720) 0
+
+Class QJSListIndexClamp
+ size=1 align=1
+ base size=0 base align=1
+QJSListIndexClamp (0x0x7b9f3bb17840) 0 empty
+
+Class QJSListForInIterator
+ size=8 align=4
+ base size=8 base align=4
+QJSListForInIterator (0x0x7b9f3b471360) 0
+
+Class QJSListForOfIterator
+ size=4 align=4
+ base size=4 base align=4
+QJSListForOfIterator (0x0x7b9f3b471d80) 0
+
+Class QJSValueIterator
+ size=8 align=8
+ base size=8 base align=8
+QJSValueIterator (0x0x7b9f3b2487e0) 0
+
+Vtable for QQmlParserStatus
+QQmlParserStatus::_ZTV16QQmlParserStatus: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlParserStatus)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlParserStatus
+ size=16 align=8
+ base size=16 base align=8
+QQmlParserStatus (0x0x7b9f3b2489c0) 0
+ vptr=((& QQmlParserStatus::_ZTV16QQmlParserStatus) + 16)
+
+Vtable for QQmlPropertyValueSource
+QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQmlPropertyValueSource)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlPropertyValueSource
+ size=8 align=8
+ base size=8 base align=8
+QQmlPropertyValueSource (0x0x7b9f3b248d80) 0 nearly-empty
+ vptr=((& QQmlPropertyValueSource::_ZTV23QQmlPropertyValueSource) + 16)
+
+Class QQmlPrivate::RegisterType
+ size=184 align=8
+ base size=180 base align=8
+QQmlPrivate::RegisterType (0x0x7b9f3a9a1780) 0
+
+Class QQmlPrivate::RegisterTypeAndRevisions
+ size=168 align=8
+ base size=168 base align=8
+QQmlPrivate::RegisterTypeAndRevisions (0x0x7b9f3a9a1840) 0
+
+Class QQmlPrivate::RegisterInterface
+ size=48 align=8
+ base size=42 base align=8
+QQmlPrivate::RegisterInterface (0x0x7b9f3a9a18a0) 0
+
+Class QQmlPrivate::RegisterAutoParent
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterAutoParent (0x0x7b9f3a9a1900) 0
+
+Class QQmlPrivate::RegisterSingletonType
+ size=136 align=8
+ base size=130 base align=8
+QQmlPrivate::RegisterSingletonType (0x0x7b9f3a9a1960) 0
+
+Class QQmlPrivate::RegisterSingletonTypeAndRevisions
+ size=104 align=8
+ base size=104 base align=8
+QQmlPrivate::RegisterSingletonTypeAndRevisions (0x0x7b9f3a9a1cc0) 0
+
+Class QQmlPrivate::RegisterCompositeType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeType (0x0x7b9f3a9a1d80) 0
+
+Class QQmlPrivate::RegisterCompositeSingletonType
+ size=40 align=8
+ base size=40 base align=8
+QQmlPrivate::RegisterCompositeSingletonType (0x0x7b9f3a9a1de0) 0
+
+Class QQmlPrivate::RegisterSequentialContainer
+ size=56 align=8
+ base size=50 base align=8
+QQmlPrivate::RegisterSequentialContainer (0x0x7b9f3a9a1e40) 0
+
+Class QQmlPrivate::RegisterSequentialContainerAndRevisions
+ size=56 align=8
+ base size=56 base align=8
+QQmlPrivate::RegisterSequentialContainerAndRevisions (0x0x7b9f3a9a1ea0) 0
+
+Class QQmlPrivate::AOTCompiledContext
+ size=32 align=8
+ base size=32 base align=8
+QQmlPrivate::AOTCompiledContext (0x0x7b9f3a9a1f00) 0
+
+Class QQmlPrivate::AOTCompiledFunction
+ size=48 align=8
+ base size=48 base align=8
+QQmlPrivate::AOTCompiledFunction (0x0x7b9f3a454060) 0
+
+Class QQmlPrivate::CachedQmlUnit
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::CachedQmlUnit (0x0x7b9f3a454900) 0
+
+Class QQmlPrivate::RegisterQmlUnitCacheHook
+ size=16 align=8
+ base size=16 base align=8
+QQmlPrivate::RegisterQmlUnitCacheHook (0x0x7b9f3a454960) 0
+
+Class QQmlPrivate::SingletonFunctor
+ size=24 align=8
+ base size=17 base align=8
+QQmlPrivate::SingletonFunctor (0x0x7b9f3a4549c0) 0
+
+Class QQmlPrivate::SingletonInstanceFunctor
+ size=24 align=8
+ base size=24 base align=8
+QQmlPrivate::SingletonInstanceFunctor (0x0x7b9f3a454c00) 0
+
+Class QQmlTypeNotAvailable::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlTypeNotAvailable::QPrivateSignal (0x0x7b9f39897ae0) 0 empty
+
+Vtable for QQmlTypeNotAvailable
+QQmlTypeNotAvailable::_ZTV20QQmlTypeNotAvailable: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQmlTypeNotAvailable)
+16 (int (*)(...))QQmlTypeNotAvailable::metaObject
+24 (int (*)(...))QQmlTypeNotAvailable::qt_metacast
+32 (int (*)(...))QQmlTypeNotAvailable::qt_metacall
+40 (int (*)(...))QQmlTypeNotAvailable::~QQmlTypeNotAvailable
+48 (int (*)(...))QQmlTypeNotAvailable::~QQmlTypeNotAvailable
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlTypeNotAvailable
+ size=16 align=8
+ base size=16 base align=8
+QQmlTypeNotAvailable (0x0x7b9f398db548) 0
+ vptr=((& QQmlTypeNotAvailable::_ZTV20QQmlTypeNotAvailable) + 16)
+QObject (0x0x7b9f39897a80) 0
+ primary-for QQmlTypeNotAvailable (0x0x7b9f398db548)
+
+Vtable for QQmlAbstractUrlInterceptor
+QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI26QQmlAbstractUrlInterceptor)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlAbstractUrlInterceptor
+ size=8 align=8
+ base size=8 base align=8
+QQmlAbstractUrlInterceptor (0x0x7b9f54906f00) 0 nearly-empty
+ vptr=((& QQmlAbstractUrlInterceptor::_ZTV26QQmlAbstractUrlInterceptor) + 16)
+
+Class QQmlError
+ size=8 align=8
+ base size=8 base align=8
+QQmlError (0x0x7b9f54906f60) 0
+
+Class QQmlImageProviderBase::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlImageProviderBase::QPrivateSignal (0x0x7b9f54958060) 0 empty
+
+Vtable for QQmlImageProviderBase
+QQmlImageProviderBase::_ZTV21QQmlImageProviderBase: 16 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlImageProviderBase)
+16 (int (*)(...))QQmlImageProviderBase::metaObject
+24 (int (*)(...))QQmlImageProviderBase::qt_metacast
+32 (int (*)(...))QQmlImageProviderBase::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 QQmlImageProviderBase
+ size=16 align=8
+ base size=16 base align=8
+QQmlImageProviderBase (0x0x7b9f5494ce38) 0
+ vptr=((& QQmlImageProviderBase::_ZTV21QQmlImageProviderBase) + 16)
+QObject (0x0x7b9f54958000) 0
+ primary-for QQmlImageProviderBase (0x0x7b9f5494ce38)
+
+Class QQmlEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngine::QPrivateSignal (0x0x7b9f54958600) 0 empty
+
+Vtable for QQmlEngine
+QQmlEngine::_ZTV10QQmlEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQmlEngine)
+16 (int (*)(...))QQmlEngine::metaObject
+24 (int (*)(...))QQmlEngine::qt_metacast
+32 (int (*)(...))QQmlEngine::qt_metacall
+40 (int (*)(...))QQmlEngine::~QQmlEngine
+48 (int (*)(...))QQmlEngine::~QQmlEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngine (0x0x7b9f5494cf70) 0
+ vptr=((& QQmlEngine::_ZTV10QQmlEngine) + 16)
+QJSEngine (0x0x7b9f54978000) 0
+ primary-for QQmlEngine (0x0x7b9f5494cf70)
+QObject (0x0x7b9f549585a0) 0
+ primary-for QJSEngine (0x0x7b9f54978000)
+
+Class QQmlApplicationEngine::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlApplicationEngine::QPrivateSignal (0x0x7b9f54958960) 0 empty
+
+Vtable for QQmlApplicationEngine
+QQmlApplicationEngine::_ZTV21QQmlApplicationEngine: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQmlApplicationEngine)
+16 (int (*)(...))QQmlApplicationEngine::metaObject
+24 (int (*)(...))QQmlApplicationEngine::qt_metacast
+32 (int (*)(...))QQmlApplicationEngine::qt_metacall
+40 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+48 (int (*)(...))QQmlApplicationEngine::~QQmlApplicationEngine
+56 (int (*)(...))QQmlEngine::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlApplicationEngine
+ size=24 align=8
+ base size=24 base align=8
+QQmlApplicationEngine (0x0x7b9f54978068) 0
+ vptr=((& QQmlApplicationEngine::_ZTV21QQmlApplicationEngine) + 16)
+QQmlEngine (0x0x7b9f549780d0) 0
+ primary-for QQmlApplicationEngine (0x0x7b9f54978068)
+QJSEngine (0x0x7b9f54978138) 0
+ primary-for QQmlEngine (0x0x7b9f549780d0)
+QObject (0x0x7b9f54958900) 0
+ primary-for QJSEngine (0x0x7b9f54978138)
+
+Class QQmlComponent::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlComponent::QPrivateSignal (0x0x7b9f54958b40) 0 empty
+
+Vtable for QQmlComponent
+QQmlComponent::_ZTV13QQmlComponent: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlComponent)
+16 (int (*)(...))QQmlComponent::metaObject
+24 (int (*)(...))QQmlComponent::qt_metacast
+32 (int (*)(...))QQmlComponent::qt_metacall
+40 (int (*)(...))QQmlComponent::~QQmlComponent
+48 (int (*)(...))QQmlComponent::~QQmlComponent
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlComponent::create
+120 (int (*)(...))QQmlComponent::beginCreate
+128 (int (*)(...))QQmlComponent::completeCreate
+
+Class QQmlComponent
+ size=16 align=8
+ base size=16 base align=8
+QQmlComponent (0x0x7b9f549781a0) 0
+ vptr=((& QQmlComponent::_ZTV13QQmlComponent) + 16)
+QObject (0x0x7b9f54958ae0) 0
+ primary-for QQmlComponent (0x0x7b9f549781a0)
+
+Class QQmlContext::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlContext::QPrivateSignal (0x0x7b9f54958f60) 0 empty
+
+Class QQmlContext::PropertyPair
+ size=56 align=8
+ base size=56 base align=8
+QQmlContext::PropertyPair (0x0x7b9f549b7000) 0
+
+Vtable for QQmlContext
+QQmlContext::_ZTV11QQmlContext: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QQmlContext)
+16 (int (*)(...))QQmlContext::metaObject
+24 (int (*)(...))QQmlContext::qt_metacast
+32 (int (*)(...))QQmlContext::qt_metacall
+40 (int (*)(...))QQmlContext::~QQmlContext
+48 (int (*)(...))QQmlContext::~QQmlContext
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlContext
+ size=16 align=8
+ base size=16 base align=8
+QQmlContext (0x0x7b9f54978208) 0
+ vptr=((& QQmlContext::_ZTV11QQmlContext) + 16)
+QObject (0x0x7b9f54958f00) 0
+ primary-for QQmlContext (0x0x7b9f54978208)
+
+Class QQmlScriptString
+ size=8 align=8
+ base size=8 base align=8
+QQmlScriptString (0x0x7b9f549b7180) 0
+
+Class QQmlExpression::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExpression::QPrivateSignal (0x0x7b9f549e03c0) 0 empty
+
+Vtable for QQmlExpression
+QQmlExpression::_ZTV14QQmlExpression: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QQmlExpression)
+16 (int (*)(...))QQmlExpression::metaObject
+24 (int (*)(...))QQmlExpression::qt_metacast
+32 (int (*)(...))QQmlExpression::qt_metacall
+40 (int (*)(...))QQmlExpression::~QQmlExpression
+48 (int (*)(...))QQmlExpression::~QQmlExpression
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlExpression
+ size=16 align=8
+ base size=16 base align=8
+QQmlExpression (0x0x7b9f54978e38) 0
+ vptr=((& QQmlExpression::_ZTV14QQmlExpression) + 16)
+QObject (0x0x7b9f549e0360) 0
+ primary-for QQmlExpression (0x0x7b9f54978e38)
+
+Vtable for QQmlTypesExtensionInterface
+QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI27QQmlTypesExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlTypesExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlTypesExtensionInterface (0x0x7b9f549e0540) 0 nearly-empty
+ vptr=((& QQmlTypesExtensionInterface::_ZTV27QQmlTypesExtensionInterface) + 16)
+
+Vtable for QQmlExtensionInterface
+QQmlExtensionInterface::_ZTV22QQmlExtensionInterface: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QQmlExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlExtensionInterface (0x0x7b9f54978ea0) 0 nearly-empty
+ vptr=((& QQmlExtensionInterface::_ZTV22QQmlExtensionInterface) + 16)
+QQmlTypesExtensionInterface (0x0x7b9f549e05a0) 0 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7b9f54978ea0)
+
+Vtable for QQmlEngineExtensionInterface
+QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI28QQmlEngineExtensionInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlEngineExtensionInterface
+ size=8 align=8
+ base size=8 base align=8
+QQmlEngineExtensionInterface (0x0x7b9f549e0600) 0 nearly-empty
+ vptr=((& QQmlEngineExtensionInterface::_ZTV28QQmlEngineExtensionInterface) + 16)
+
+Class QQmlExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlExtensionPlugin::QPrivateSignal (0x0x7b9f54a04180) 0 empty
+
+Vtable for QQmlExtensionPlugin
+QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+16 (int (*)(...))QQmlExtensionPlugin::metaObject
+24 (int (*)(...))QQmlExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlExtensionPlugin::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 (*)(...))QQmlExtensionPlugin::unregisterTypes
+128 (int (*)(...))QQmlExtensionPlugin::initializeEngine
+136 (int (*)(...))-16
+144 (int (*)(...))(& _ZTI19QQmlExtensionPlugin)
+152 0
+160 0
+168 (int (*)(...))__cxa_pure_virtual
+176 (int (*)(...))QQmlExtensionPlugin::_ZThn16_N19QQmlExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlExtensionPlugin (0x0x7b9f549af9a0) 0
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 16)
+QObject (0x0x7b9f54a040c0) 0
+ primary-for QQmlExtensionPlugin (0x0x7b9f549af9a0)
+QQmlExtensionInterface (0x0x7b9f549f91a0) 16 nearly-empty
+ vptr=((& QQmlExtensionPlugin::_ZTV19QQmlExtensionPlugin) + 152)
+QQmlTypesExtensionInterface (0x0x7b9f54a04120) 16 nearly-empty
+ primary-for QQmlExtensionInterface (0x0x7b9f549f91a0)
+
+Class QQmlEngineExtensionPlugin::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlEngineExtensionPlugin::QPrivateSignal (0x0x7b9f54a043c0) 0 empty
+
+Vtable for QQmlEngineExtensionPlugin
+QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+16 (int (*)(...))QQmlEngineExtensionPlugin::metaObject
+24 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacast
+32 (int (*)(...))QQmlEngineExtensionPlugin::qt_metacall
+40 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+48 (int (*)(...))QQmlEngineExtensionPlugin::~QQmlEngineExtensionPlugin
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlEngineExtensionPlugin::initializeEngine
+120 (int (*)(...))-16
+128 (int (*)(...))(& _ZTI25QQmlEngineExtensionPlugin)
+136 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD1Ev
+144 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPluginD0Ev
+152 (int (*)(...))QQmlEngineExtensionPlugin::_ZThn16_N25QQmlEngineExtensionPlugin16initializeEngineEP10QQmlEnginePKc
+
+Class QQmlEngineExtensionPlugin
+ size=24 align=8
+ base size=24 base align=8
+QQmlEngineExtensionPlugin (0x0x7b9f549afb60) 0
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 16)
+QObject (0x0x7b9f54a04300) 0
+ primary-for QQmlEngineExtensionPlugin (0x0x7b9f549afb60)
+QQmlEngineExtensionInterface (0x0x7b9f54a04360) 16 nearly-empty
+ vptr=((& QQmlEngineExtensionPlugin::_ZTV25QQmlEngineExtensionPlugin) + 136)
+
+Class QQmlFile
+ size=8 align=8
+ base size=8 base align=8
+QQmlFile (0x0x7b9f54a04480) 0
+
+Class QQmlFileSelector::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlFileSelector::QPrivateSignal (0x0x7b9f54a04540) 0 empty
+
+Vtable for QQmlFileSelector
+QQmlFileSelector::_ZTV16QQmlFileSelector: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QQmlFileSelector)
+16 (int (*)(...))QQmlFileSelector::metaObject
+24 (int (*)(...))QQmlFileSelector::qt_metacast
+32 (int (*)(...))QQmlFileSelector::qt_metacall
+40 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+48 (int (*)(...))QQmlFileSelector::~QQmlFileSelector
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQmlFileSelector
+ size=16 align=8
+ base size=16 base align=8
+QQmlFileSelector (0x0x7b9f549f9270) 0
+ vptr=((& QQmlFileSelector::_ZTV16QQmlFileSelector) + 16)
+QObject (0x0x7b9f54a044e0) 0
+ primary-for QQmlFileSelector (0x0x7b9f549f9270)
+
+Vtable for QQmlIncubator
+QQmlIncubator::_ZTV13QQmlIncubator: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQmlIncubator)
+16 (int (*)(...))QQmlIncubator::~QQmlIncubator
+24 (int (*)(...))QQmlIncubator::~QQmlIncubator
+32 (int (*)(...))QQmlIncubator::statusChanged
+40 (int (*)(...))QQmlIncubator::setInitialState
+
+Class QQmlIncubator
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubator (0x0x7b9f54a046c0) 0
+ vptr=((& QQmlIncubator::_ZTV13QQmlIncubator) + 16)
+
+Vtable for QQmlIncubationController
+QQmlIncubationController::_ZTV24QQmlIncubationController: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQmlIncubationController)
+16 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+24 (int (*)(...))QQmlIncubationController::~QQmlIncubationController
+32 (int (*)(...))QQmlIncubationController::incubatingObjectCountChanged
+
+Class QQmlIncubationController
+ size=16 align=8
+ base size=16 base align=8
+QQmlIncubationController (0x0x7b9f54a04720) 0
+ vptr=((& QQmlIncubationController::_ZTV24QQmlIncubationController) + 16)
+
+Class QQmlInfo
+ size=16 align=8
+ base size=16 base align=8
+QQmlInfo (0x0x7b9f549f92d8) 0
+QDebug (0x0x7b9f549f9340) 0
+QIODeviceBase (0x0x7b9f54a04780) 0 empty
+
+Class QQmlModuleRegistration
+ size=8 align=8
+ base size=8 base align=8
+QQmlModuleRegistration (0x0x7b9f54a691e0) 0
+
+Vtable for QQmlNetworkAccessManagerFactory
+QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI31QQmlNetworkAccessManagerFactory)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QQmlNetworkAccessManagerFactory
+ size=8 align=8
+ base size=8 base align=8
+QQmlNetworkAccessManagerFactory (0x0x7b9f54a69240) 0 nearly-empty
+ vptr=((& QQmlNetworkAccessManagerFactory::_ZTV31QQmlNetworkAccessManagerFactory) + 16)
+
+Class QQmlProperty
+ size=8 align=8
+ base size=8 base align=8
+QQmlProperty (0x0x7b9f54a692a0) 0
+
+Class QQmlPropertyMap::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQmlPropertyMap::QPrivateSignal (0x0x7b9f54aabba0) 0 empty
+
+Vtable for QQmlPropertyMap
+QQmlPropertyMap::_ZTV15QQmlPropertyMap: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQmlPropertyMap)
+16 (int (*)(...))QQmlPropertyMap::metaObject
+24 (int (*)(...))QQmlPropertyMap::qt_metacast
+32 (int (*)(...))QQmlPropertyMap::qt_metacall
+40 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+48 (int (*)(...))QQmlPropertyMap::~QQmlPropertyMap
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQmlPropertyMap::updateValue
+
+Class QQmlPropertyMap
+ size=16 align=8
+ base size=16 base align=8
+QQmlPropertyMap (0x0x7b9f54ab0a28) 0
+ vptr=((& QQmlPropertyMap::_ZTV15QQmlPropertyMap) + 16)
+QObject (0x0x7b9f54aabb40) 0
+ primary-for QQmlPropertyMap (0x0x7b9f54ab0a28)
+
+Class QQuickTransform::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTransform::QPrivateSignal (0x0x7b9f54aabde0) 0 empty
+
+Vtable for QQuickTransform
+QQuickTransform::_ZTV15QQuickTransform: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QQuickTransform)
+16 (int (*)(...))QQuickTransform::metaObject
+24 (int (*)(...))QQuickTransform::qt_metacast
+32 (int (*)(...))QQuickTransform::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 QQuickTransform
+ size=16 align=8
+ base size=16 base align=8
+QQuickTransform (0x0x7b9f54ab0a90) 0
+ vptr=((& QQuickTransform::_ZTV15QQuickTransform) + 16)
+QObject (0x0x7b9f54aabd80) 0
+ primary-for QQuickTransform (0x0x7b9f54ab0a90)
+
+Class QQuickItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItem::QPrivateSignal (0x0x7b9f54ad20c0) 0 empty
+
+Class QQuickItem::ItemChangeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::ItemChangeData (0x0x7b9f54ad2120) 0
+
+Class QQuickItem::UpdatePaintNodeData
+ size=8 align=8
+ base size=8 base align=8
+QQuickItem::UpdatePaintNodeData (0x0x7b9f54ad2180) 0
+
+Vtable for QQuickItem
+QQuickItem::_ZTV10QQuickItem: 54 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickItem)
+16 (int (*)(...))QQuickItem::metaObject
+24 (int (*)(...))QQuickItem::qt_metacast
+32 (int (*)(...))QQuickItem::qt_metacall
+40 (int (*)(...))QQuickItem::~QQuickItem
+48 (int (*)(...))QQuickItem::~QQuickItem
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickItem::isTextureProvider
+152 (int (*)(...))QQuickItem::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickItem::updatePaintNode
+368 (int (*)(...))QQuickItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))-16
+392 (int (*)(...))(& _ZTI10QQuickItem)
+400 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD1Ev
+408 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItemD0Ev
+416 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickItem (0x0x7b9f54ad1000) 0
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 16)
+QObject (0x0x7b9f54ad2000) 0
+ primary-for QQuickItem (0x0x7b9f54ad1000)
+QQmlParserStatus (0x0x7b9f54ad2060) 16
+ vptr=((& QQuickItem::_ZTV10QQuickItem) + 400)
+
+Class QQuickFramebufferObject::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickFramebufferObject::QPrivateSignal (0x0x7b9f5472c240) 0 empty
+
+Vtable for QQuickFramebufferObject::Renderer
+QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN23QQuickFramebufferObject8RendererE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QQuickFramebufferObject::Renderer::createFramebufferObject
+48 (int (*)(...))QQuickFramebufferObject::Renderer::synchronize
+
+Class QQuickFramebufferObject::Renderer
+ size=16 align=8
+ base size=16 base align=8
+QQuickFramebufferObject::Renderer (0x0x7b9f5472c2a0) 0
+ vptr=((& QQuickFramebufferObject::Renderer::_ZTVN23QQuickFramebufferObject8RendererE) + 16)
+
+Vtable for QQuickFramebufferObject
+QQuickFramebufferObject::_ZTV23QQuickFramebufferObject: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+16 (int (*)(...))QQuickFramebufferObject::metaObject
+24 (int (*)(...))QQuickFramebufferObject::qt_metacast
+32 (int (*)(...))QQuickFramebufferObject::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickFramebufferObject::isTextureProvider
+152 (int (*)(...))QQuickFramebufferObject::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickFramebufferObject::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickFramebufferObject::updatePaintNode
+368 (int (*)(...))QQuickFramebufferObject::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI23QQuickFramebufferObject)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickFramebufferObject
+ size=32 align=8
+ base size=32 base align=8
+QQuickFramebufferObject (0x0x7b9f54ab0bc8) 0
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 16)
+QQuickItem (0x0x7b9f5471d9a0) 0
+ primary-for QQuickFramebufferObject (0x0x7b9f54ab0bc8)
+QObject (0x0x7b9f5472c180) 0
+ primary-for QQuickItem (0x0x7b9f5471d9a0)
+QQmlParserStatus (0x0x7b9f5472c1e0) 16
+ vptr=((& QQuickFramebufferObject::_ZTV23QQuickFramebufferObject) + 408)
+
+Class QQuickGraphicsConfiguration
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsConfiguration (0x0x7b9f5472c420) 0
+
+Class QQuickGraphicsDevice
+ size=8 align=8
+ base size=8 base align=8
+QQuickGraphicsDevice (0x0x7b9f5472c480) 0
+
+Class QQuickTextureFactory::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextureFactory::QPrivateSignal (0x0x7b9f5472c540) 0 empty
+
+Vtable for QQuickTextureFactory
+QQuickTextureFactory::_ZTV20QQuickTextureFactory: 18 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickTextureFactory)
+16 (int (*)(...))QQuickTextureFactory::metaObject
+24 (int (*)(...))QQuickTextureFactory::qt_metacast
+32 (int (*)(...))QQuickTextureFactory::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 (*)(...))QQuickTextureFactory::image
+
+Class QQuickTextureFactory
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextureFactory (0x0x7b9f54ab0c30) 0
+ vptr=((& QQuickTextureFactory::_ZTV20QQuickTextureFactory) + 16)
+QObject (0x0x7b9f5472c4e0) 0
+ primary-for QQuickTextureFactory (0x0x7b9f54ab0c30)
+
+Class QQuickImageResponse::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageResponse::QPrivateSignal (0x0x7b9f5472c660) 0 empty
+
+Vtable for QQuickImageResponse
+QQuickImageResponse::_ZTV19QQuickImageResponse: 17 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageResponse)
+16 (int (*)(...))QQuickImageResponse::metaObject
+24 (int (*)(...))QQuickImageResponse::qt_metacast
+32 (int (*)(...))QQuickImageResponse::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 (*)(...))QQuickImageResponse::errorString
+128 (int (*)(...))QQuickImageResponse::cancel
+
+Class QQuickImageResponse
+ size=16 align=8
+ base size=16 base align=8
+QQuickImageResponse (0x0x7b9f54ab0c98) 0
+ vptr=((& QQuickImageResponse::_ZTV19QQuickImageResponse) + 16)
+QObject (0x0x7b9f5472c600) 0
+ primary-for QQuickImageResponse (0x0x7b9f54ab0c98)
+
+Class QQuickImageProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickImageProvider::QPrivateSignal (0x0x7b9f5472c840) 0 empty
+
+Vtable for QQuickImageProvider
+QQuickImageProvider::_ZTV19QQuickImageProvider: 19 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::qt_metacall
+40 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+48 (int (*)(...))QQuickImageProvider::~QQuickImageProvider
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+
+Class QQuickImageProvider
+ size=24 align=8
+ base size=24 base align=8
+QQuickImageProvider (0x0x7b9f54ab0d00) 0
+ vptr=((& QQuickImageProvider::_ZTV19QQuickImageProvider) + 16)
+QQmlImageProviderBase (0x0x7b9f54ab0d68) 0
+ primary-for QQuickImageProvider (0x0x7b9f54ab0d00)
+QObject (0x0x7b9f5472c7e0) 0
+ primary-for QQmlImageProviderBase (0x0x7b9f54ab0d68)
+
+Vtable for QQuickAsyncImageProvider
+QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider: 20 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QQuickAsyncImageProvider)
+16 (int (*)(...))QQuickImageProvider::metaObject
+24 (int (*)(...))QQuickImageProvider::qt_metacast
+32 (int (*)(...))QQuickImageProvider::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 (*)(...))QQuickImageProvider::imageType
+120 (int (*)(...))QQuickImageProvider::flags
+128 (int (*)(...))QQuickImageProvider::requestImage
+136 (int (*)(...))QQuickImageProvider::requestPixmap
+144 (int (*)(...))QQuickImageProvider::requestTexture
+152 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickAsyncImageProvider
+ size=32 align=8
+ base size=32 base align=8
+QQuickAsyncImageProvider (0x0x7b9f54ab0dd0) 0
+ vptr=((& QQuickAsyncImageProvider::_ZTV24QQuickAsyncImageProvider) + 16)
+QQuickImageProvider (0x0x7b9f54ab0e38) 0
+ primary-for QQuickAsyncImageProvider (0x0x7b9f54ab0dd0)
+QQmlImageProviderBase (0x0x7b9f54ab0ea0) 0
+ primary-for QQuickImageProvider (0x0x7b9f54ab0e38)
+QObject (0x0x7b9f5472c900) 0
+ primary-for QQmlImageProviderBase (0x0x7b9f54ab0ea0)
+
+Class QQuickItemGrabResult::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickItemGrabResult::QPrivateSignal (0x0x7b9f5472c9c0) 0 empty
+
+Vtable for QQuickItemGrabResult
+QQuickItemGrabResult::_ZTV20QQuickItemGrabResult: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QQuickItemGrabResult)
+16 (int (*)(...))QQuickItemGrabResult::metaObject
+24 (int (*)(...))QQuickItemGrabResult::qt_metacast
+32 (int (*)(...))QQuickItemGrabResult::qt_metacall
+40 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+48 (int (*)(...))QQuickItemGrabResult::~QQuickItemGrabResult
+56 (int (*)(...))QQuickItemGrabResult::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickItemGrabResult
+ size=16 align=8
+ base size=16 base align=8
+QQuickItemGrabResult (0x0x7b9f54ab0f08) 0
+ vptr=((& QQuickItemGrabResult::_ZTV20QQuickItemGrabResult) + 16)
+QObject (0x0x7b9f5472c960) 0
+ primary-for QQuickItemGrabResult (0x0x7b9f54ab0f08)
+
+Class QQuickPaintedItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickPaintedItem::QPrivateSignal (0x0x7b9f5472cc60) 0 empty
+
+Vtable for QQuickPaintedItem
+QQuickPaintedItem::_ZTV17QQuickPaintedItem: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+16 (int (*)(...))QQuickPaintedItem::metaObject
+24 (int (*)(...))QQuickPaintedItem::qt_metacast
+32 (int (*)(...))QQuickPaintedItem::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickPaintedItem::isTextureProvider
+152 (int (*)(...))QQuickPaintedItem::textureProvider
+160 (int (*)(...))QQuickPaintedItem::itemChange
+168 (int (*)(...))QQuickItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickPaintedItem::updatePaintNode
+368 (int (*)(...))QQuickPaintedItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI17QQuickPaintedItem)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickPaintedItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickPaintedItem (0x0x7b9f54ab0f70) 0
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 16)
+QQuickItem (0x0x7b9f54765000) 0
+ primary-for QQuickPaintedItem (0x0x7b9f54ab0f70)
+QObject (0x0x7b9f5472cba0) 0
+ primary-for QQuickItem (0x0x7b9f54765000)
+QQmlParserStatus (0x0x7b9f5472cc00) 16
+ vptr=((& QQuickPaintedItem::_ZTV17QQuickPaintedItem) + 408)
+
+Class QQuickRenderControl::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRenderControl::QPrivateSignal (0x0x7b9f547854e0) 0 empty
+
+Vtable for QQuickRenderControl
+QQuickRenderControl::_ZTV19QQuickRenderControl: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI19QQuickRenderControl)
+16 (int (*)(...))QQuickRenderControl::metaObject
+24 (int (*)(...))QQuickRenderControl::qt_metacast
+32 (int (*)(...))QQuickRenderControl::qt_metacall
+40 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+48 (int (*)(...))QQuickRenderControl::~QQuickRenderControl
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickRenderControl::renderWindow
+
+Class QQuickRenderControl
+ size=16 align=8
+ base size=16 base align=8
+QQuickRenderControl (0x0x7b9f5477b0d0) 0
+ vptr=((& QQuickRenderControl::_ZTV19QQuickRenderControl) + 16)
+QObject (0x0x7b9f54785480) 0
+ primary-for QQuickRenderControl (0x0x7b9f5477b0d0)
+
+Class QQuickRenderTarget
+ size=8 align=8
+ base size=8 base align=8
+QQuickRenderTarget (0x0x7b9f547856c0) 0
+
+Vtable for QQuickRhiItemRenderer
+QQuickRhiItemRenderer::_ZTV21QQuickRhiItemRenderer: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI21QQuickRhiItemRenderer)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))__cxa_pure_virtual
+
+Class QQuickRhiItemRenderer
+ size=16 align=8
+ base size=16 base align=8
+QQuickRhiItemRenderer (0x0x7b9f547857e0) 0
+ vptr=((& QQuickRhiItemRenderer::_ZTV21QQuickRhiItemRenderer) + 16)
+
+Class QQuickRhiItem::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickRhiItem::QPrivateSignal (0x0x7b9f54785900) 0 empty
+
+Vtable for QQuickRhiItem
+QQuickRhiItem::_ZTV13QQuickRhiItem: 55 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QQuickRhiItem)
+16 (int (*)(...))QQuickRhiItem::metaObject
+24 (int (*)(...))QQuickRhiItem::qt_metacast
+32 (int (*)(...))QQuickRhiItem::qt_metacall
+40 0
+48 0
+56 (int (*)(...))QQuickRhiItem::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+112 (int (*)(...))QQuickItem::boundingRect
+120 (int (*)(...))QQuickItem::clipRect
+128 (int (*)(...))QQuickItem::contains
+136 (int (*)(...))QQuickItem::inputMethodQuery
+144 (int (*)(...))QQuickRhiItem::isTextureProvider
+152 (int (*)(...))QQuickRhiItem::textureProvider
+160 (int (*)(...))QQuickItem::itemChange
+168 (int (*)(...))QQuickRhiItem::geometryChange
+176 (int (*)(...))QQuickItem::classBegin
+184 (int (*)(...))QQuickItem::componentComplete
+192 (int (*)(...))QQuickItem::keyPressEvent
+200 (int (*)(...))QQuickItem::keyReleaseEvent
+208 (int (*)(...))QQuickItem::inputMethodEvent
+216 (int (*)(...))QQuickItem::focusInEvent
+224 (int (*)(...))QQuickItem::focusOutEvent
+232 (int (*)(...))QQuickItem::mousePressEvent
+240 (int (*)(...))QQuickItem::mouseMoveEvent
+248 (int (*)(...))QQuickItem::mouseReleaseEvent
+256 (int (*)(...))QQuickItem::mouseDoubleClickEvent
+264 (int (*)(...))QQuickItem::mouseUngrabEvent
+272 (int (*)(...))QQuickItem::touchUngrabEvent
+280 (int (*)(...))QQuickItem::wheelEvent
+288 (int (*)(...))QQuickItem::touchEvent
+296 (int (*)(...))QQuickItem::hoverEnterEvent
+304 (int (*)(...))QQuickItem::hoverMoveEvent
+312 (int (*)(...))QQuickItem::hoverLeaveEvent
+320 (int (*)(...))QQuickItem::dragEnterEvent
+328 (int (*)(...))QQuickItem::dragMoveEvent
+336 (int (*)(...))QQuickItem::dragLeaveEvent
+344 (int (*)(...))QQuickItem::dropEvent
+352 (int (*)(...))QQuickItem::childMouseEventFilter
+360 (int (*)(...))QQuickRhiItem::updatePaintNode
+368 (int (*)(...))QQuickRhiItem::releaseResources
+376 (int (*)(...))QQuickItem::updatePolish
+384 (int (*)(...))__cxa_pure_virtual
+392 (int (*)(...))-16
+400 (int (*)(...))(& _ZTI13QQuickRhiItem)
+408 0
+416 0
+424 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem10classBeginEv
+432 (int (*)(...))QQuickItem::_ZThn16_N10QQuickItem17componentCompleteEv
+
+Class QQuickRhiItem
+ size=32 align=8
+ base size=32 base align=8
+QQuickRhiItem (0x0x7b9f5477b138) 0
+ vptr=((& QQuickRhiItem::_ZTV13QQuickRhiItem) + 16)
+QQuickItem (0x0x7b9f54765bd0) 0
+ primary-for QQuickRhiItem (0x0x7b9f5477b138)
+QObject (0x0x7b9f54785840) 0
+ primary-for QQuickItem (0x0x7b9f54765bd0)
+QQmlParserStatus (0x0x7b9f547858a0) 16
+ vptr=((& QQuickRhiItem::_ZTV13QQuickRhiItem) + 408)
+
+Class QQuickTextDocument::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickTextDocument::QPrivateSignal (0x0x7b9f54785ba0) 0 empty
+
+Vtable for QQuickTextDocument
+QQuickTextDocument::_ZTV18QQuickTextDocument: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QQuickTextDocument)
+16 (int (*)(...))QQuickTextDocument::metaObject
+24 (int (*)(...))QQuickTextDocument::qt_metacast
+32 (int (*)(...))QQuickTextDocument::qt_metacall
+40 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+48 (int (*)(...))QQuickTextDocument::~QQuickTextDocument
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QQuickTextDocument
+ size=16 align=8
+ base size=16 base align=8
+QQuickTextDocument (0x0x7b9f5477b1a0) 0
+ vptr=((& QQuickTextDocument::_ZTV18QQuickTextDocument) + 16)
+QObject (0x0x7b9f54785b40) 0
+ primary-for QQuickTextDocument (0x0x7b9f5477b1a0)
+
+Class QSGGeometry::Attribute
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::Attribute (0x0x7b9f54785ea0) 0
+
+Class QSGGeometry::AttributeSet
+ size=16 align=8
+ base size=16 base align=8
+QSGGeometry::AttributeSet (0x0x7b9f54785f00) 0
+
+Class QSGGeometry::Point2D
+ size=8 align=4
+ base size=8 base align=4
+QSGGeometry::Point2D (0x0x7b9f54785f60) 0
+
+Class QSGGeometry::TexturedPoint2D
+ size=16 align=4
+ base size=16 base align=4
+QSGGeometry::TexturedPoint2D (0x0x7b9f547cf000) 0
+
+Class QSGGeometry::ColoredPoint2D
+ size=12 align=4
+ base size=12 base align=4
+QSGGeometry::ColoredPoint2D (0x0x7b9f547cf060) 0
+
+Vtable for QSGGeometry
+QSGGeometry::_ZTV11QSGGeometry: 4 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGGeometry)
+16 (int (*)(...))QSGGeometry::~QSGGeometry
+24 (int (*)(...))QSGGeometry::~QSGGeometry
+
+Class QSGGeometry
+ size=128 align=8
+ base size=128 base align=8
+QSGGeometry (0x0x7b9f54785e40) 0
+ vptr=((& QSGGeometry::_ZTV11QSGGeometry) + 16)
+
+Vtable for QSGNode
+QSGNode::_ZTV7QSGNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI7QSGNode)
+16 (int (*)(...))QSGNode::~QSGNode
+24 (int (*)(...))QSGNode::~QSGNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGNode
+ size=72 align=8
+ base size=72 base align=8
+QSGNode (0x0x7b9f547cfa20) 0
+ vptr=((& QSGNode::_ZTV7QSGNode) + 16)
+
+Vtable for QSGBasicGeometryNode
+QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGBasicGeometryNode)
+16 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+24 (int (*)(...))QSGBasicGeometryNode::~QSGBasicGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGBasicGeometryNode
+ size=104 align=8
+ base size=104 base align=8
+QSGBasicGeometryNode (0x0x7b9f5477b3a8) 0
+ vptr=((& QSGBasicGeometryNode::_ZTV20QSGBasicGeometryNode) + 16)
+QSGNode (0x0x7b9f5480d2a0) 0
+ primary-for QSGBasicGeometryNode (0x0x7b9f5477b3a8)
+
+Vtable for QSGGeometryNode
+QSGGeometryNode::_ZTV15QSGGeometryNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI15QSGGeometryNode)
+16 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+24 (int (*)(...))QSGGeometryNode::~QSGGeometryNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGGeometryNode
+ size=136 align=8
+ base size=136 base align=8
+QSGGeometryNode (0x0x7b9f5477b410) 0
+ vptr=((& QSGGeometryNode::_ZTV15QSGGeometryNode) + 16)
+QSGBasicGeometryNode (0x0x7b9f5477b478) 0
+ primary-for QSGGeometryNode (0x0x7b9f5477b410)
+QSGNode (0x0x7b9f5480d540) 0
+ primary-for QSGBasicGeometryNode (0x0x7b9f5477b478)
+
+Vtable for QSGClipNode
+QSGClipNode::_ZTV11QSGClipNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGClipNode)
+16 (int (*)(...))QSGClipNode::~QSGClipNode
+24 (int (*)(...))QSGClipNode::~QSGClipNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGClipNode
+ size=144 align=8
+ base size=144 base align=8
+QSGClipNode (0x0x7b9f5477b4e0) 0
+ vptr=((& QSGClipNode::_ZTV11QSGClipNode) + 16)
+QSGBasicGeometryNode (0x0x7b9f5477b548) 0
+ primary-for QSGClipNode (0x0x7b9f5477b4e0)
+QSGNode (0x0x7b9f5480d720) 0
+ primary-for QSGBasicGeometryNode (0x0x7b9f5477b548)
+
+Vtable for QSGTransformNode
+QSGTransformNode::_ZTV16QSGTransformNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGTransformNode)
+16 (int (*)(...))QSGTransformNode::~QSGTransformNode
+24 (int (*)(...))QSGTransformNode::~QSGTransformNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGTransformNode
+ size=208 align=8
+ base size=208 base align=8
+QSGTransformNode (0x0x7b9f5477b5b0) 0
+ vptr=((& QSGTransformNode::_ZTV16QSGTransformNode) + 16)
+QSGNode (0x0x7b9f5480d840) 0
+ primary-for QSGTransformNode (0x0x7b9f5477b5b0)
+
+Vtable for QSGRootNode
+QSGRootNode::_ZTV11QSGRootNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGRootNode)
+16 (int (*)(...))QSGRootNode::~QSGRootNode
+24 (int (*)(...))QSGRootNode::~QSGRootNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGRootNode
+ size=96 align=8
+ base size=96 base align=8
+QSGRootNode (0x0x7b9f5477b618) 0
+ vptr=((& QSGRootNode::_ZTV11QSGRootNode) + 16)
+QSGNode (0x0x7b9f5480d960) 0
+ primary-for QSGRootNode (0x0x7b9f5477b618)
+
+Vtable for QSGOpacityNode
+QSGOpacityNode::_ZTV14QSGOpacityNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGOpacityNode)
+16 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+24 (int (*)(...))QSGOpacityNode::~QSGOpacityNode
+32 (int (*)(...))QSGOpacityNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGOpacityNode
+ size=88 align=8
+ base size=88 base align=8
+QSGOpacityNode (0x0x7b9f5477bd68) 0
+ vptr=((& QSGOpacityNode::_ZTV14QSGOpacityNode) + 16)
+QSGNode (0x0x7b9f5484b240) 0
+ primary-for QSGOpacityNode (0x0x7b9f5477bd68)
+
+Vtable for QSGNodeVisitor
+QSGNodeVisitor::_ZTV14QSGNodeVisitor: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QSGNodeVisitor)
+16 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+24 (int (*)(...))QSGNodeVisitor::~QSGNodeVisitor
+32 (int (*)(...))QSGNodeVisitor::enterTransformNode
+40 (int (*)(...))QSGNodeVisitor::leaveTransformNode
+48 (int (*)(...))QSGNodeVisitor::enterClipNode
+56 (int (*)(...))QSGNodeVisitor::leaveClipNode
+64 (int (*)(...))QSGNodeVisitor::enterGeometryNode
+72 (int (*)(...))QSGNodeVisitor::leaveGeometryNode
+80 (int (*)(...))QSGNodeVisitor::enterOpacityNode
+88 (int (*)(...))QSGNodeVisitor::leaveOpacityNode
+96 (int (*)(...))QSGNodeVisitor::visitNode
+104 (int (*)(...))QSGNodeVisitor::visitChildren
+
+Class QSGNodeVisitor
+ size=8 align=8
+ base size=8 base align=8
+QSGNodeVisitor (0x0x7b9f5484b360) 0 nearly-empty
+ vptr=((& QSGNodeVisitor::_ZTV14QSGNodeVisitor) + 16)
+
+Vtable for QSGRendererInterface
+QSGRendererInterface::_ZTV20QSGRendererInterface: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGRendererInterface)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))QSGRendererInterface::getResource
+48 (int (*)(...))QSGRendererInterface::getResource
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRendererInterface
+ size=8 align=8
+ base size=8 base align=8
+QSGRendererInterface (0x0x7b9f5484bc00) 0 nearly-empty
+ vptr=((& QSGRendererInterface::_ZTV20QSGRendererInterface) + 16)
+
+Class QQuickWindow::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickWindow::QPrivateSignal (0x0x7b9f548b0600) 0 empty
+
+Class QQuickWindow::GraphicsStateInfo
+ size=8 align=4
+ base size=8 base align=4
+QQuickWindow::GraphicsStateInfo (0x0x7b9f548b0660) 0
+
+Vtable for QQuickWindow
+QQuickWindow::_ZTV12QQuickWindow: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QQuickWindow)
+16 (int (*)(...))QQuickWindow::metaObject
+24 (int (*)(...))QQuickWindow::qt_metacast
+32 (int (*)(...))QQuickWindow::qt_metacall
+40 (int (*)(...))QQuickWindow::~QQuickWindow
+48 (int (*)(...))QQuickWindow::~QQuickWindow
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickWindow::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickWindow::keyPressEvent
+232 (int (*)(...))QQuickWindow::keyReleaseEvent
+240 (int (*)(...))QQuickWindow::mousePressEvent
+248 (int (*)(...))QQuickWindow::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickWindow::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI12QQuickWindow)
+328 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD1Ev
+336 (int (*)(...))QQuickWindow::_ZThn16_N12QQuickWindowD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickWindow
+ size=40 align=8
+ base size=40 base align=8
+QQuickWindow (0x0x7b9f5477bf70) 0
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 16)
+QWindow (0x0x7b9f54897930) 0
+ primary-for QQuickWindow (0x0x7b9f5477bf70)
+QObject (0x0x7b9f548b0540) 0
+ primary-for QWindow (0x0x7b9f54897930)
+QSurface (0x0x7b9f548b05a0) 16
+ vptr=((& QQuickWindow::_ZTV12QQuickWindow) + 328)
+
+Class QQuickView::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QQuickView::QPrivateSignal (0x0x7b9f53b01960) 0 empty
+
+Vtable for QQuickView
+QQuickView::_ZTV10QQuickView: 47 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QQuickView)
+16 (int (*)(...))QQuickView::metaObject
+24 (int (*)(...))QQuickView::qt_metacast
+32 (int (*)(...))QQuickView::qt_metacall
+40 (int (*)(...))QQuickView::~QQuickView
+48 (int (*)(...))QQuickView::~QQuickView
+56 (int (*)(...))QQuickWindow::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QQuickView::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 (*)(...))QQuickWindow::accessibleRoot
+144 (int (*)(...))QQuickWindow::focusObject
+152 (int (*)(...))QQuickWindow::exposeEvent
+160 (int (*)(...))QQuickView::resizeEvent
+168 (int (*)(...))QWindow::paintEvent
+176 (int (*)(...))QWindow::moveEvent
+184 (int (*)(...))QQuickWindow::focusInEvent
+192 (int (*)(...))QQuickWindow::focusOutEvent
+200 (int (*)(...))QQuickWindow::showEvent
+208 (int (*)(...))QQuickWindow::hideEvent
+216 (int (*)(...))QQuickWindow::closeEvent
+224 (int (*)(...))QQuickView::keyPressEvent
+232 (int (*)(...))QQuickView::keyReleaseEvent
+240 (int (*)(...))QQuickView::mousePressEvent
+248 (int (*)(...))QQuickView::mouseReleaseEvent
+256 (int (*)(...))QQuickWindow::mouseDoubleClickEvent
+264 (int (*)(...))QQuickView::mouseMoveEvent
+272 (int (*)(...))QQuickWindow::wheelEvent
+280 (int (*)(...))QWindow::touchEvent
+288 (int (*)(...))QQuickWindow::tabletEvent
+296 (int (*)(...))QWindow::nativeEvent
+304 (int (*)(...))QWindow::surfaceHandle
+312 (int (*)(...))-16
+320 (int (*)(...))(& _ZTI10QQuickView)
+328 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD1Ev
+336 (int (*)(...))QQuickView::_ZThn16_N10QQuickViewD0Ev
+344 (int (*)(...))QWindow::_ZThn16_NK7QWindow6formatEv
+352 (int (*)(...))QWindow::_ZThn16_NK7QWindow13surfaceHandleEv
+360 (int (*)(...))QWindow::_ZThn16_NK7QWindow11surfaceTypeEv
+368 (int (*)(...))QWindow::_ZThn16_NK7QWindow4sizeEv
+
+Class QQuickView
+ size=40 align=8
+ base size=40 base align=8
+QQuickView (0x0x7b9f53b060d0) 0
+ vptr=((& QQuickView::_ZTV10QQuickView) + 16)
+QQuickWindow (0x0x7b9f53b06138) 0
+ primary-for QQuickView (0x0x7b9f53b060d0)
+QWindow (0x0x7b9f548d59a0) 0
+ primary-for QQuickWindow (0x0x7b9f53b06138)
+QObject (0x0x7b9f53b018a0) 0
+ primary-for QWindow (0x0x7b9f548d59a0)
+QSurface (0x0x7b9f53b01900) 16
+ vptr=((& QQuickView::_ZTV10QQuickView) + 328)
+
+Class QSGMaterialType
+ size=1 align=1
+ base size=0 base align=1
+QSGMaterialType (0x0x7b9f53b01c60) 0 empty
+
+Class QSGMaterialShader::RenderState
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader::RenderState (0x0x7b9f53b01d20) 0
+
+Class QSGMaterialShader::GraphicsPipelineState
+ size=52 align=4
+ base size=52 base align=4
+QSGMaterialShader::GraphicsPipelineState (0x0x7b9f53b01f60) 0
+
+Vtable for QSGMaterialShader
+QSGMaterialShader::_ZTV17QSGMaterialShader: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGMaterialShader)
+16 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+24 (int (*)(...))QSGMaterialShader::~QSGMaterialShader
+32 (int (*)(...))QSGMaterialShader::updateUniformData
+40 (int (*)(...))QSGMaterialShader::updateSampledImage
+48 (int (*)(...))QSGMaterialShader::updateGraphicsPipelineState
+
+Class QSGMaterialShader
+ size=16 align=8
+ base size=16 base align=8
+QSGMaterialShader (0x0x7b9f53b01cc0) 0
+ vptr=((& QSGMaterialShader::_ZTV17QSGMaterialShader) + 16)
+
+Vtable for QSGMaterial
+QSGMaterial::_ZTV11QSGMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGMaterial)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+48 (int (*)(...))QSGMaterial::compare
+
+Class QSGMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGMaterial (0x0x7b9f53b34f60) 0
+ vptr=((& QSGMaterial::_ZTV11QSGMaterial) + 16)
+
+Vtable for QSGFlatColorMaterial
+QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGFlatColorMaterial)
+16 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+24 (int (*)(...))QSGFlatColorMaterial::~QSGFlatColorMaterial
+32 (int (*)(...))QSGFlatColorMaterial::type
+40 (int (*)(...))QSGFlatColorMaterial::createShader
+48 (int (*)(...))QSGFlatColorMaterial::compare
+
+Class QSGFlatColorMaterial
+ size=40 align=8
+ base size=40 base align=8
+QSGFlatColorMaterial (0x0x7b9f53b064e0) 0
+ vptr=((& QSGFlatColorMaterial::_ZTV20QSGFlatColorMaterial) + 16)
+QSGMaterial (0x0x7b9f53b854e0) 0
+ primary-for QSGFlatColorMaterial (0x0x7b9f53b064e0)
+
+Class QNativeInterface::QSGOpenGLTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGOpenGLTexture::TypeInfo (0x0x7b9f53b85600) 0 empty
+
+Vtable for QNativeInterface::QSGOpenGLTexture
+QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE: 5 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGOpenGLTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGOpenGLTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGOpenGLTexture (0x0x7b9f53b855a0) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGOpenGLTexture::_ZTVN16QNativeInterface16QSGOpenGLTextureE) + 16)
+
+Class QNativeInterface::QSGVulkanTexture::TypeInfo
+ size=1 align=1
+ base size=0 base align=1
+QNativeInterface::QSGVulkanTexture::TypeInfo (0x0x7b9f53b85720) 0 empty
+
+Vtable for QNativeInterface::QSGVulkanTexture
+QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN16QNativeInterface16QSGVulkanTextureE)
+16 0
+24 0
+32 (int (*)(...))__cxa_pure_virtual
+40 (int (*)(...))__cxa_pure_virtual
+
+Class QNativeInterface::QSGVulkanTexture
+ size=8 align=8
+ base size=8 base align=8
+QNativeInterface::QSGVulkanTexture (0x0x7b9f53b856c0) 0 nearly-empty
+ vptr=((& QNativeInterface::QSGVulkanTexture::_ZTVN16QNativeInterface16QSGVulkanTextureE) + 16)
+
+Class QSGTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTexture::QPrivateSignal (0x0x7b9f53b85840) 0 empty
+
+Vtable for QSGTexture
+QSGTexture::_ZTV10QSGTexture: 23 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSGTexture)
+16 (int (*)(...))QSGTexture::metaObject
+24 (int (*)(...))QSGTexture::qt_metacast
+32 (int (*)(...))QSGTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+
+Class QSGTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGTexture (0x0x7b9f53b06548) 0
+ vptr=((& QSGTexture::_ZTV10QSGTexture) + 16)
+QObject (0x0x7b9f53b857e0) 0
+ primary-for QSGTexture (0x0x7b9f53b06548)
+
+Class QSGDynamicTexture::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGDynamicTexture::QPrivateSignal (0x0x7b9f53b85ae0) 0 empty
+
+Vtable for QSGDynamicTexture
+QSGDynamicTexture::_ZTV17QSGDynamicTexture: 24 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGDynamicTexture)
+16 (int (*)(...))QSGDynamicTexture::metaObject
+24 (int (*)(...))QSGDynamicTexture::qt_metacast
+32 (int (*)(...))QSGDynamicTexture::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 (*)(...))QSGTexture::rhiTexture
+128 (int (*)(...))__cxa_pure_virtual
+136 (int (*)(...))__cxa_pure_virtual
+144 (int (*)(...))__cxa_pure_virtual
+152 (int (*)(...))QSGTexture::normalizedTextureSubRect
+160 (int (*)(...))QSGTexture::isAtlasTexture
+168 (int (*)(...))QSGTexture::removedFromAtlas
+176 (int (*)(...))QSGTexture::commitTextureOperations
+184 (int (*)(...))__cxa_pure_virtual
+
+Class QSGDynamicTexture
+ size=16 align=8
+ base size=16 base align=8
+QSGDynamicTexture (0x0x7b9f53b065b0) 0
+ vptr=((& QSGDynamicTexture::_ZTV17QSGDynamicTexture) + 16)
+QSGTexture (0x0x7b9f53b06618) 0
+ primary-for QSGDynamicTexture (0x0x7b9f53b065b0)
+QObject (0x0x7b9f53b85a80) 0
+ primary-for QSGTexture (0x0x7b9f53b06618)
+
+Vtable for QSGImageNode
+QSGImageNode::_ZTV12QSGImageNode: 22 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSGImageNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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
+
+Class QSGImageNode
+ size=136 align=8
+ base size=136 base align=8
+QSGImageNode (0x0x7b9f53b06680) 0
+ vptr=((& QSGImageNode::_ZTV12QSGImageNode) + 16)
+QSGGeometryNode (0x0x7b9f53b066e8) 0
+ primary-for QSGImageNode (0x0x7b9f53b06680)
+QSGBasicGeometryNode (0x0x7b9f53b06750) 0
+ primary-for QSGGeometryNode (0x0x7b9f53b066e8)
+QSGNode (0x0x7b9f53b85ba0) 0
+ primary-for QSGBasicGeometryNode (0x0x7b9f53b06750)
+
+Vtable for QSGNinePatchNode
+QSGNinePatchNode::_ZTV16QSGNinePatchNode: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGNinePatchNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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 QSGNinePatchNode
+ size=136 align=8
+ base size=136 base align=8
+QSGNinePatchNode (0x0x7b9f53b06888) 0
+ vptr=((& QSGNinePatchNode::_ZTV16QSGNinePatchNode) + 16)
+QSGGeometryNode (0x0x7b9f53b068f0) 0
+ primary-for QSGNinePatchNode (0x0x7b9f53b06888)
+QSGBasicGeometryNode (0x0x7b9f53b06958) 0
+ primary-for QSGGeometryNode (0x0x7b9f53b068f0)
+QSGNode (0x0x7b9f53be1180) 0
+ primary-for QSGBasicGeometryNode (0x0x7b9f53b06958)
+
+Vtable for QSGRectangleNode
+QSGRectangleNode::_ZTV16QSGRectangleNode: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI16QSGRectangleNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))__cxa_pure_virtual
+56 (int (*)(...))__cxa_pure_virtual
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))__cxa_pure_virtual
+
+Class QSGRectangleNode
+ size=136 align=8
+ base size=136 base align=8
+QSGRectangleNode (0x0x7b9f53b069c0) 0
+ vptr=((& QSGRectangleNode::_ZTV16QSGRectangleNode) + 16)
+QSGGeometryNode (0x0x7b9f53b06a28) 0
+ primary-for QSGRectangleNode (0x0x7b9f53b069c0)
+QSGBasicGeometryNode (0x0x7b9f53b06a90) 0
+ primary-for QSGGeometryNode (0x0x7b9f53b06a28)
+QSGNode (0x0x7b9f53be11e0) 0
+ primary-for QSGBasicGeometryNode (0x0x7b9f53b06a90)
+
+Vtable for QSGRenderNode::RenderState
+QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE: 11 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTIN13QSGRenderNode11RenderStateE)
+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 (*)(...))QSGRenderNode::RenderState::get
+
+Class QSGRenderNode::RenderState
+ size=8 align=8
+ base size=8 base align=8
+QSGRenderNode::RenderState (0x0x7b9f53be1300) 0 nearly-empty
+ vptr=((& QSGRenderNode::RenderState::_ZTVN13QSGRenderNode11RenderStateE) + 16)
+
+Vtable for QSGRenderNode
+QSGRenderNode::_ZTV13QSGRenderNode: 12 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSGRenderNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+48 (int (*)(...))QSGRenderNode::changedStates
+56 (int (*)(...))QSGRenderNode::prepare
+64 (int (*)(...))__cxa_pure_virtual
+72 (int (*)(...))QSGRenderNode::releaseResources
+80 (int (*)(...))QSGRenderNode::flags
+88 (int (*)(...))QSGRenderNode::rect
+
+Class QSGRenderNode
+ size=80 align=8
+ base size=80 base align=8
+QSGRenderNode (0x0x7b9f53b06af8) 0
+ vptr=((& QSGRenderNode::_ZTV13QSGRenderNode) + 16)
+QSGNode (0x0x7b9f53be12a0) 0
+ primary-for QSGRenderNode (0x0x7b9f53b06af8)
+
+Vtable for QSGSimpleRectNode
+QSGSimpleRectNode::_ZTV17QSGSimpleRectNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI17QSGSimpleRectNode)
+16 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+24 (int (*)(...))QSGSimpleRectNode::~QSGSimpleRectNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleRectNode
+ size=312 align=8
+ base size=312 base align=8
+QSGSimpleRectNode (0x0x7b9f53b06d00) 0
+ vptr=((& QSGSimpleRectNode::_ZTV17QSGSimpleRectNode) + 16)
+QSGGeometryNode (0x0x7b9f53b06d68) 0
+ primary-for QSGSimpleRectNode (0x0x7b9f53b06d00)
+QSGBasicGeometryNode (0x0x7b9f53b06dd0) 0
+ primary-for QSGGeometryNode (0x0x7b9f53b06d68)
+QSGNode (0x0x7b9f53be1c60) 0
+ primary-for QSGBasicGeometryNode (0x0x7b9f53b06dd0)
+
+Vtable for QSGOpaqueTextureMaterial
+QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QSGOpaqueTextureMaterial)
+16 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+24 (int (*)(...))QSGOpaqueTextureMaterial::~QSGOpaqueTextureMaterial
+32 (int (*)(...))QSGOpaqueTextureMaterial::type
+40 (int (*)(...))QSGOpaqueTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGOpaqueTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGOpaqueTextureMaterial (0x0x7b9f53b06e38) 0
+ vptr=((& QSGOpaqueTextureMaterial::_ZTV24QSGOpaqueTextureMaterial) + 16)
+QSGMaterial (0x0x7b9f53be1d20) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7b9f53b06e38)
+
+Vtable for QSGTextureMaterial
+QSGTextureMaterial::_ZTV18QSGTextureMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureMaterial)
+16 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+24 (int (*)(...))QSGTextureMaterial::~QSGTextureMaterial
+32 (int (*)(...))QSGTextureMaterial::type
+40 (int (*)(...))QSGTextureMaterial::createShader
+48 (int (*)(...))QSGOpaqueTextureMaterial::compare
+
+Class QSGTextureMaterial
+ size=40 align=8
+ base size=36 base align=8
+QSGTextureMaterial (0x0x7b9f53b06ea0) 0
+ vptr=((& QSGTextureMaterial::_ZTV18QSGTextureMaterial) + 16)
+QSGOpaqueTextureMaterial (0x0x7b9f53b06f08) 0
+ primary-for QSGTextureMaterial (0x0x7b9f53b06ea0)
+QSGMaterial (0x0x7b9f53c341e0) 0
+ primary-for QSGOpaqueTextureMaterial (0x0x7b9f53b06f08)
+
+Vtable for QSGSimpleTextureNode
+QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode: 6 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI20QSGSimpleTextureNode)
+16 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+24 (int (*)(...))QSGSimpleTextureNode::~QSGSimpleTextureNode
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+
+Class QSGSimpleTextureNode
+ size=376 align=8
+ base size=376 base align=8
+QSGSimpleTextureNode (0x0x7b9f53b06f70) 0
+ vptr=((& QSGSimpleTextureNode::_ZTV20QSGSimpleTextureNode) + 16)
+QSGGeometryNode (0x0x7b9f53c37000) 0
+ primary-for QSGSimpleTextureNode (0x0x7b9f53b06f70)
+QSGBasicGeometryNode (0x0x7b9f53c37068) 0
+ primary-for QSGGeometryNode (0x0x7b9f53c37000)
+QSGNode (0x0x7b9f53c34240) 0
+ primary-for QSGBasicGeometryNode (0x0x7b9f53c37068)
+
+Vtable for QSGTextNode
+QSGTextNode::_ZTV11QSGTextNode: 29 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI11QSGTextNode)
+16 0
+24 0
+32 (int (*)(...))QSGNode::isSubtreeBlocked
+40 (int (*)(...))QSGNode::preprocess
+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
+
+Class QSGTextNode
+ size=208 align=8
+ base size=208 base align=8
+QSGTextNode (0x0x7b9f53c371a0) 0
+ vptr=((& QSGTextNode::_ZTV11QSGTextNode) + 16)
+QSGTransformNode (0x0x7b9f53c37208) 0
+ primary-for QSGTextNode (0x0x7b9f53c371a0)
+QSGNode (0x0x7b9f53c34a20) 0
+ primary-for QSGTransformNode (0x0x7b9f53c37208)
+
+Class QSGTextureProvider::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSGTextureProvider::QPrivateSignal (0x0x7b9f53c34ba0) 0 empty
+
+Vtable for QSGTextureProvider
+QSGTextureProvider::_ZTV18QSGTextureProvider: 15 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI18QSGTextureProvider)
+16 (int (*)(...))QSGTextureProvider::metaObject
+24 (int (*)(...))QSGTextureProvider::qt_metacast
+32 (int (*)(...))QSGTextureProvider::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 QSGTextureProvider
+ size=16 align=8
+ base size=16 base align=8
+QSGTextureProvider (0x0x7b9f53c37340) 0
+ vptr=((& QSGTextureProvider::_ZTV18QSGTextureProvider) + 16)
+QObject (0x0x7b9f53c34b40) 0
+ primary-for QSGTextureProvider (0x0x7b9f53c37340)
+
+Vtable for QSGVertexColorMaterial
+QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial: 7 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI22QSGVertexColorMaterial)
+16 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+24 (int (*)(...))QSGVertexColorMaterial::~QSGVertexColorMaterial
+32 (int (*)(...))QSGVertexColorMaterial::type
+40 (int (*)(...))QSGVertexColorMaterial::createShader
+48 (int (*)(...))QSGVertexColorMaterial::compare
+
+Class QSGVertexColorMaterial
+ size=24 align=8
+ base size=24 base align=8
+QSGVertexColorMaterial (0x0x7b9f53c373a8) 0
+ vptr=((& QSGVertexColorMaterial::_ZTV22QSGVertexColorMaterial) + 16)
+QSGMaterial (0x0x7b9f53c34c60) 0
+ primary-for QSGVertexColorMaterial (0x0x7b9f53c373a8)
+
+Class QAbstractItemModelTester::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QAbstractItemModelTester::QPrivateSignal (0x0x7b9f53c34d20) 0 empty
+
+Vtable for QAbstractItemModelTester
+QAbstractItemModelTester::_ZTV24QAbstractItemModelTester: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI24QAbstractItemModelTester)
+16 (int (*)(...))QAbstractItemModelTester::metaObject
+24 (int (*)(...))QAbstractItemModelTester::qt_metacast
+32 (int (*)(...))QAbstractItemModelTester::qt_metacall
+40 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+48 (int (*)(...))QAbstractItemModelTester::~QAbstractItemModelTester
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QAbstractItemModelTester
+ size=16 align=8
+ base size=16 base align=8
+QAbstractItemModelTester (0x0x7b9f53c37410) 0
+ vptr=((& QAbstractItemModelTester::_ZTV24QAbstractItemModelTester) + 16)
+QObject (0x0x7b9f53c34cc0) 0
+ primary-for QAbstractItemModelTester (0x0x7b9f53c37410)
+
+Class QTest::QBenchmarkIterationController
+ size=4 align=4
+ base size=4 base align=4
+QTest::QBenchmarkIterationController (0x0x7b9f53c34f00) 0
+
+Class QTestEventLoop::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QTestEventLoop::QPrivateSignal (0x0x7b9f53aa4780) 0 empty
+
+Vtable for QTestEventLoop
+QTestEventLoop::_ZTV14QTestEventLoop: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI14QTestEventLoop)
+16 (int (*)(...))QTestEventLoop::metaObject
+24 (int (*)(...))QTestEventLoop::qt_metacast
+32 (int (*)(...))QTestEventLoop::qt_metacall
+40 (int (*)(...))QTestEventLoop::~QTestEventLoop
+48 (int (*)(...))QTestEventLoop::~QTestEventLoop
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QTestEventLoop::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QTestEventLoop
+ size=32 align=8
+ base size=32 base align=8
+QTestEventLoop (0x0x7b9f53a7e478) 0
+ vptr=((& QTestEventLoop::_ZTV14QTestEventLoop) + 16)
+QObject (0x0x7b9f53aa4720) 0
+ primary-for QTestEventLoop (0x0x7b9f53a7e478)
+
+Vtable for QSignalSpy
+QSignalSpy::_ZTV10QSignalSpy: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI10QSignalSpy)
+16 (int (*)(...))QObject::metaObject
+24 (int (*)(...))QObject::qt_metacast
+32 (int (*)(...))QSignalSpy::qt_metacall
+40 (int (*)(...))QSignalSpy::~QSignalSpy
+48 (int (*)(...))QSignalSpy::~QSignalSpy
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSignalSpy
+ size=128 align=8
+ base size=121 base align=8
+QSignalSpy (0x0x7b9f53ac1690) 0
+ vptr=((& QSignalSpy::_ZTV10QSignalSpy) + 16)
+QObject (0x0x7b9f536dc8a0) 0
+ primary-for QSignalSpy (0x0x7b9f53ac1690)
+QList<QList<QVariant> > (0x0x7b9f536d7c30) 16
+QListSpecialMethods<QList<QVariant> > (0x0x7b9f536d7c98) 16 empty
+QListSpecialMethodsBase<QList<QVariant> > (0x0x7b9f536dc900) 16 empty
+
+Class QTestData
+ size=8 align=8
+ base size=8 base align=8
+QTestData (0x0x7b9f5372de40) 0
+
+Class QTest::Internal::QCborValueFormatter
+ size=1 align=1
+ base size=0 base align=1
+QTest::Internal::QCborValueFormatter (0x0x7b9f537d0780) 0 empty
+
+Vtable for QSvgGenerator
+QSvgGenerator::_ZTV13QSvgGenerator: 10 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI13QSvgGenerator)
+16 (int (*)(...))QSvgGenerator::~QSvgGenerator
+24 (int (*)(...))QSvgGenerator::~QSvgGenerator
+32 (int (*)(...))QPaintDevice::devType
+40 (int (*)(...))QSvgGenerator::paintEngine
+48 (int (*)(...))QSvgGenerator::metric
+56 (int (*)(...))QPaintDevice::initPainter
+64 (int (*)(...))QPaintDevice::redirected
+72 (int (*)(...))QPaintDevice::sharedPainter
+
+Class QSvgGenerator
+ size=24 align=8
+ base size=24 base align=8
+QSvgGenerator (0x0x7b9f5350c340) 0
+ vptr=((& QSvgGenerator::_ZTV13QSvgGenerator) + 16)
+QPaintDevice (0x0x7b9f5352a420) 0
+ primary-for QSvgGenerator (0x0x7b9f5350c340)
+
+Class QSvgRenderer::QPrivateSignal
+ size=1 align=1
+ base size=0 base align=1
+QSvgRenderer::QPrivateSignal (0x0x7b9f5352a660) 0 empty
+
+Vtable for QSvgRenderer
+QSvgRenderer::_ZTV12QSvgRenderer: 14 entries
+0 (int (*)(...))0
+8 (int (*)(...))(& _ZTI12QSvgRenderer)
+16 (int (*)(...))QSvgRenderer::metaObject
+24 (int (*)(...))QSvgRenderer::qt_metacast
+32 (int (*)(...))QSvgRenderer::qt_metacall
+40 (int (*)(...))QSvgRenderer::~QSvgRenderer
+48 (int (*)(...))QSvgRenderer::~QSvgRenderer
+56 (int (*)(...))QObject::event
+64 (int (*)(...))QObject::eventFilter
+72 (int (*)(...))QObject::timerEvent
+80 (int (*)(...))QObject::childEvent
+88 (int (*)(...))QObject::customEvent
+96 (int (*)(...))QObject::connectNotify
+104 (int (*)(...))QObject::disconnectNotify
+
+Class QSvgRenderer
+ size=16 align=8
+ base size=16 base align=8
+QSvgRenderer (0x0x7b9f5350c3a8) 0
+ vptr=((& QSvgRenderer::_ZTV12QSvgRenderer) + 16)
+QObject (0x0x7b9f5352a600) 0
+ primary-for QSvgRenderer (0x0x7b9f5350c3a8)
+
diff --git a/tests/auto/cmake/CMakeLists.txt b/tests/auto/cmake/CMakeLists.txt
index 8073a47c16..3331ad260d 100644
--- a/tests/auto/cmake/CMakeLists.txt
+++ b/tests/auto/cmake/CMakeLists.txt
@@ -1,4 +1,5 @@
-# special case skip regeneration
+# 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,
@@ -43,6 +44,7 @@
cmake_minimum_required(VERSION 3.16)
project(cmake_usage_tests)
+include(GNUInstallDirs)
# Building the CMake tests as part of a Qt prefix build + in-tree tests, currently doesn't work.
# Each CMake test will fail with a message like
@@ -67,7 +69,8 @@ enable_testing()
# flag. Notably -rpath is specified which should implicitly enable -rpath-link, but that
# doesn't seem to be the case.
# Until this is figured out, disable the tests when cross-compiling to Linux.
-if(UNIX AND NOT APPLE AND NOT WIN32 AND CMAKE_CROSSCOMPILING AND NOT QT_ENABLE_CMAKE_BOOT2QT_TESTS)
+if(UNIX AND NOT APPLE AND NOT WIN32 AND CMAKE_CROSSCOMPILING AND NOT QT_ENABLE_CMAKE_BOOT2QT_TESTS
+ AND NOT QT_BUILD_MINIMAL_ANDROID_MULTI_ABI_TESTS)
message(STATUS "Running CMake tests is disabled when cross-compiling to Linux / Boot2Qt.")
return()
endif()
@@ -109,8 +112,63 @@ endif()
include("${_Qt6CTestMacros}")
+# Test only multi-abi specific functionality when QT_BUILD_MINIMAL_ANDROID_MULTI_ABI_TESTS is ON.
+# Qt::Gui is the prerequisite for all Android tests.
+if(QT_BUILD_MINIMAL_ANDROID_MULTI_ABI_TESTS AND NOT NO_GUI)
+ unset(multi_abi_vars)
+ foreach(abi IN LISTS QT_ANDROID_ABIS)
+ list(APPEND multi_abi_vars "-DQT_PATH_ANDROID_ABI_${abi}=${QT_PATH_ANDROID_ABI_${abi}}")
+ endforeach()
+ if(QT_ANDROID_BUILD_ALL_ABIS)
+ list(APPEND multi_abi_vars "-DQT_ANDROID_BUILD_ALL_ABIS=${QT_ANDROID_BUILD_ALL_ABIS}")
+ endif()
+
+ list(APPEND multi_abi_vars "-DQT_HOST_PATH=${QT_HOST_PATH}")
+
+ set(multi_abi_forward_vars
+ TEST_SINGLE_VALUE_ARG
+ TEST_SPACES_VALUE_ARG
+ TEST_LIST_VALUE_ARG
+ TEST_ESCAPING_VALUE_ARG
+ )
+ string(REPLACE ";" "[[;]]" multi_abi_forward_vars "${multi_abi_forward_vars}")
+
+ set(single_value "TestValue")
+ set(list_value "TestValue[[;]]TestValue2[[;]]TestValue3")
+ set(escaping_value "TestValue\\\\[[;]]TestValue2\\\\[[;]]TestValue3")
+ set(spaces_value "TestValue TestValue2 TestValue3")
+ _qt_internal_test_expect_pass(test_android_multi_abi_forward_vars
+ BUILD_OPTIONS
+ ${multi_abi_vars}
+ "-DQT_ANDROID_MULTI_ABI_FORWARD_VARS=${multi_abi_forward_vars}"
+ "-DTEST_SINGLE_VALUE_ARG=${single_value}"
+ "-DTEST_LIST_VALUE_ARG=${list_value}"
+ "-DTEST_ESCAPING_VALUE_ARG=${escaping_value}"
+ "-DTEST_SPACES_VALUE_ARG=${spaces_value}"
+ )
+ return()
+endif()
+
if(NOT NO_WIDGETS)
_qt_internal_test_expect_pass(test_build_simple_widget_app)
+ set(extra_widget_app_options "")
+ if(IOS)
+ list(APPEND extra_widget_app_options
+ QMAKE_OPTIONS CONFIG+=iossimulator
+ )
+ endif()
+ if(CMAKE_HOST_WIN32)
+ # Unset MAKEFLAGS environment variable when invoking build tool, it might
+ # have options incompatible with nmake.
+ list(APPEND extra_widget_app_options
+ BUILD_ENVIRONMENT MAKEFLAGS ""
+ )
+ endif()
+
+ _qt_internal_add_qmake_test(test_build_simple_widget_app
+ TESTNAME test_build_simple_widget_app_qmake
+ ${extra_widget_app_options}
+ )
endif()
# We only support a limited subset of cmake tests when targeting iOS:
@@ -124,14 +182,22 @@ if(IOS)
return()
endif()
+set(is_qt_build_platform TRUE)
+# macOS versions less than 10.15 are not supported for building Qt.
+if(CMAKE_HOST_APPLE AND CMAKE_HOST_SYSTEM_VERSION VERSION_LESS "19.0.0")
+ set(is_qt_build_platform FALSE)
+endif()
+
_qt_internal_test_expect_pass(test_umbrella_config)
_qt_internal_test_expect_pass(test_wrap_cpp_and_resources)
if (NOT NO_WIDGETS)
_qt_internal_test_expect_pass(test_dependent_modules)
_qt_internal_test_expect_pass("test(needsquoting)dirname")
endif()
+_qt_internal_test_expect_pass(test_add_resource_prefix BINARY test_add_resource_prefix)
_qt_internal_test_expect_build_fail(test_add_resource_options)
_qt_internal_test_expect_build_fail(test_wrap_cpp_options)
+_qt_internal_test_expect_pass(test_wrap_cpp_moc)
_qt_internal_test_expect_pass(test_platform_defs_include)
_qt_internal_test_expect_pass(test_qtmainwin_library)
@@ -156,6 +222,8 @@ endif()
_qt_internal_test_expect_pass(test_multiple_find_package)
_qt_internal_test_expect_pass(test_add_resources_delayed_file)
_qt_internal_test_expect_pass(test_add_binary_resources_delayed_file BINARY test_add_binary_resources_delayed_file)
+_qt_internal_test_expect_pass(test_qt_add_resources_rebuild)
+_qt_internal_test_expect_pass(test_resource_without_obj_lib BINARY test_resource_without_obj_lib)
if(NOT NO_GUI)
_qt_internal_test_expect_pass(test_private_includes)
@@ -167,13 +235,12 @@ _qt_internal_test_expect_pass(test_json_plugin_includes)
if(NOT NO_GUI)
_qt_internal_test_expect_build_fail(test_testlib_no_link_gui)
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy
+ "${CMAKE_CURRENT_SOURCE_DIR}/test_testlib_definitions/main.cpp"
+ "${CMAKE_CURRENT_BINARY_DIR}/failbuild/test_testlib_no_link_gui/test_testlib_no_link_gui/"
+ )
endif()
-execute_process(COMMAND ${CMAKE_COMMAND} -E copy
- "${CMAKE_CURRENT_SOURCE_DIR}/test_testlib_definitions/main.cpp"
- "${CMAKE_CURRENT_BINARY_DIR}/failbuild/test_testlib_no_link_gui/test_testlib_no_link_gui/"
-)
-
if (NOT NO_WIDGETS)
_qt_internal_test_expect_build_fail(test_testlib_no_link_widgets)
execute_process(COMMAND ${CMAKE_COMMAND} -E copy
@@ -246,23 +313,37 @@ if(QT_BUILD_INTERNALS_RELOCATABLE_INSTALL_PREFIX)
elseif(QT6_INSTALL_PREFIX)
set(qt_install_prefix "${QT6_INSTALL_PREFIX}")
endif()
-if(INSTALL_BINDIR)
- set(qt_install_bin_dir "${INSTALL_BINDIR}")
-elseif(QT6_INSTALL_BINS)
- set(qt_install_bin_dir "${QT6_INSTALL_BINS}")
+
+if(INSTALL_LIBEXECDIR)
+ set(qt_install_libexec_dir "${INSTALL_LIBEXECDIR}")
+elseif(QT6_INSTALL_LIBEXECS)
+ set(qt_install_libexec_dir "${QT6_INSTALL_LIBEXECS}")
endif()
# Test building and installing a few dummy Qt modules and plugins.
-_qt_internal_test_expect_pass(mockplugins
- BINARY "${CMAKE_COMMAND}"
- BINARY_ARGS
- "-DQT_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR}/mockplugins"
- -P "${qt_install_prefix}/${qt_install_bin_dir}/qt-cmake-private-install.cmake")
-set_tests_properties(mockplugins PROPERTIES FIXTURES_SETUP build_mockplugins)
+if(is_qt_build_platform)
+ set(mockplugins_test_args "")
+ if(NOT QT_FEATURE_no_prefix)
+ list(APPEND mockplugins_test_args
+ BINARY "${CMAKE_COMMAND}"
+ BINARY_ARGS
+ "-DQT_BUILD_DIR=${CMAKE_CURRENT_BINARY_DIR}/mockplugins"
+ -P "${qt_install_prefix}/${qt_install_libexec_dir}/qt-cmake-private-install.cmake"
+ )
+ endif()
+ _qt_internal_test_expect_pass(mockplugins ${mockplugins_test_args})
+ set_tests_properties(mockplugins PROPERTIES FIXTURES_SETUP build_mockplugins)
-# Test importing the plugins built in the project above.
-_qt_internal_test_expect_pass(test_import_plugins BINARY ${CMAKE_CTEST_COMMAND} BINARY_ARGS -V)
-set_tests_properties(test_import_plugins PROPERTIES FIXTURES_REQUIRED build_mockplugins)
+ # Test importing the plugins built in the project above.
+ _qt_internal_test_expect_pass(test_import_plugins BINARY ${CMAKE_CTEST_COMMAND} BINARY_ARGS -V)
+ set_tests_properties(test_import_plugins PROPERTIES FIXTURES_REQUIRED build_mockplugins)
+endif()
+
+if(NOT NO_GUI)
+ _qt_internal_test_expect_pass(test_standalone_test
+ BINARY "${CMAKE_CTEST_COMMAND}"
+ BINARY_ARGS "-V")
+endif()
_qt_internal_test_expect_pass(test_versionless_targets)
@@ -272,15 +353,54 @@ endif()
_qt_internal_test_expect_pass(test_add_resources_binary_generated
BINARY test_add_resources_binary_generated)
+if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.17")
+ _qt_internal_test_expect_pass(test_add_resources_big_resources
+ BINARY test_add_resources_big_resources)
+endif()
include(test_plugin_shared_static_flavor.cmake)
_qt_internal_test_expect_pass(tst_qaddpreroutine
BINARY tst_qaddpreroutine)
-_qt_internal_test_expect_pass(test_static_resources
- BINARY "${CMAKE_CTEST_COMMAND}"
- BINARY_ARGS "-V")
+if(is_qt_build_platform)
+ _qt_internal_test_expect_pass(test_static_resources
+ BINARY "${CMAKE_CTEST_COMMAND}"
+ BINARY_ARGS "-V")
-_qt_internal_test_expect_pass(test_generating_cpp_exports)
+ _qt_internal_test_expect_pass(test_generating_cpp_exports)
+endif()
_qt_internal_test_expect_pass(test_qt_extract_metatypes)
+
+set(deploy_args
+ test_widgets_app_deployment
+ BINARY "${CMAKE_CTEST_COMMAND}"
+ BINARY_ARGS "-V"
+ # Need to explicitly specify a writable install prefix.
+ BUILD_OPTIONS
+ -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/test_widgets_app_deployment_installed
+ NO_RUN_ENVIRONMENT_PLUGIN_PATH
+)
+
+set(is_desktop_linux FALSE)
+if(UNIX AND NOT APPLE AND NOT ANDROID AND NOT CMAKE_CROSSCOMPILING)
+ set(is_desktop_linux TRUE)
+endif()
+
+# For now, the test should only pass on Windows, macOS and desktop Linux shared and static builds
+# and fail on other platforms, because there is no support for runtime dependency deployment on
+# those platforms.
+# With static builds the runtime dependencies are just skipped, but the test should still pass.
+if(WIN32 OR (APPLE AND NOT IOS) OR is_desktop_linux)
+ _qt_internal_test_expect_pass(${deploy_args})
+else()
+ _qt_internal_test_expect_fail(${deploy_args})
+endif()
+
+_qt_internal_test_expect_pass(test_config_expressions)
+_qt_internal_test_expect_pass(test_QTP0003)
+if(NOT NO_GUI)
+ _qt_internal_test_expect_pass(test_collecting_plugins)
+endif()
+
+_qt_internal_test_expect_pass(test_qt_manual_moc)
diff --git a/tests/auto/cmake/mockplugins/.cmake.conf b/tests/auto/cmake/mockplugins/.cmake.conf
index 4e73b3d607..10bc1fd407 100644
--- a/tests/auto/cmake/mockplugins/.cmake.conf
+++ b/tests/auto/cmake/mockplugins/.cmake.conf
@@ -1 +1 @@
-set(QT_REPO_MODULE_VERSION "6.2.0")
+set(QT_REPO_MODULE_VERSION "6.8.0")
diff --git a/tests/auto/cmake/mockplugins/CMakeLists.txt b/tests/auto/cmake/mockplugins/CMakeLists.txt
index 7f61b562bc..1bde9aedb1 100644
--- a/tests/auto/cmake/mockplugins/CMakeLists.txt
+++ b/tests/auto/cmake/mockplugins/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtsvg.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
cmake_minimum_required(VERSION 3.16)
@@ -11,6 +12,8 @@ project(QtMockPlugins
)
find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
+qt_internal_project_setup()
+
find_package(Qt6 ${PROJECT_VERSION} QUIET CONFIG OPTIONAL_COMPONENTS Gui Widgets Xml)
qt_build_repo_begin()
@@ -26,4 +29,5 @@ add_subdirectory(mock4plugin)
add_subdirectory(mock5plugin)
add_subdirectory(mock6plugin)
+qt_build_repo_post_process()
qt_build_repo_end()
diff --git a/tests/auto/cmake/mockplugins/mock1plugin/CMakeLists.txt b/tests/auto/cmake/mockplugins/mock1plugin/CMakeLists.txt
index 5bb7d6cc76..5a37ef9ea0 100644
--- a/tests/auto/cmake/mockplugins/mock1plugin/CMakeLists.txt
+++ b/tests/auto/cmake/mockplugins/mock1plugin/CMakeLists.txt
@@ -1,9 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_plugin(QMock1Plugin
+ NO_UNITY_BUILD
CLASS_NAME QMock1Plugin
PLUGIN_TYPE mockplugin
SOURCES
qmock1plugin.cpp qmock1plugin.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::MockPlugins1
)
diff --git a/tests/auto/cmake/mockplugins/mock1plugin/qmock1plugin.h b/tests/auto/cmake/mockplugins/mock1plugin/qmock1plugin.h
index e2e114b1d9..324d0c38f4 100644
--- a/tests/auto/cmake/mockplugins/mock1plugin/qmock1plugin.h
+++ b/tests/auto/cmake/mockplugins/mock1plugin/qmock1plugin.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Kitware, Inc.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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) 2018 Kitware, Inc.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QMOCK1PLUGIN_H
#define QMOCK1PLUGIN_H
diff --git a/tests/auto/cmake/mockplugins/mock2plugin/CMakeLists.txt b/tests/auto/cmake/mockplugins/mock2plugin/CMakeLists.txt
index d8d28ea6eb..f2705335f5 100644
--- a/tests/auto/cmake/mockplugins/mock2plugin/CMakeLists.txt
+++ b/tests/auto/cmake/mockplugins/mock2plugin/CMakeLists.txt
@@ -1,9 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_plugin(QMock2Plugin
+ NO_UNITY_BUILD
CLASS_NAME QMock2Plugin
PLUGIN_TYPE mockplugin
SOURCES
qmock2plugin.cpp qmock2plugin.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::MockPlugins1
)
diff --git a/tests/auto/cmake/mockplugins/mock2plugin/qmock2plugin.h b/tests/auto/cmake/mockplugins/mock2plugin/qmock2plugin.h
index be99133dc8..a1217ff4d6 100644
--- a/tests/auto/cmake/mockplugins/mock2plugin/qmock2plugin.h
+++ b/tests/auto/cmake/mockplugins/mock2plugin/qmock2plugin.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Kitware, Inc.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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) 2018 Kitware, Inc.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QMOCK2PLUGIN_H
#define QMOCK2PLUGIN_H
diff --git a/tests/auto/cmake/mockplugins/mock3plugin/CMakeLists.txt b/tests/auto/cmake/mockplugins/mock3plugin/CMakeLists.txt
index 0a5e1fc5e4..b165353b24 100644
--- a/tests/auto/cmake/mockplugins/mock3plugin/CMakeLists.txt
+++ b/tests/auto/cmake/mockplugins/mock3plugin/CMakeLists.txt
@@ -1,9 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_plugin(QMock3Plugin
+ NO_UNITY_BUILD
CLASS_NAME QMock3Plugin
PLUGIN_TYPE mockplugin
SOURCES
qmock3plugin.cpp qmock3plugin.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::MockPlugins1
)
diff --git a/tests/auto/cmake/mockplugins/mock3plugin/qmock3plugin.h b/tests/auto/cmake/mockplugins/mock3plugin/qmock3plugin.h
index 08d1aa68ce..3e152784e0 100644
--- a/tests/auto/cmake/mockplugins/mock3plugin/qmock3plugin.h
+++ b/tests/auto/cmake/mockplugins/mock3plugin/qmock3plugin.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Kitware, Inc.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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) 2018 Kitware, Inc.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QMOCK3PLUGIN_H
#define QMOCK3PLUGIN_H
diff --git a/tests/auto/cmake/mockplugins/mock4plugin/CMakeLists.txt b/tests/auto/cmake/mockplugins/mock4plugin/CMakeLists.txt
index f269ad3f82..cf09fb294b 100644
--- a/tests/auto/cmake/mockplugins/mock4plugin/CMakeLists.txt
+++ b/tests/auto/cmake/mockplugins/mock4plugin/CMakeLists.txt
@@ -1,10 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_plugin(QMock4Plugin
+ NO_UNITY_BUILD
CLASS_NAME QMock4Plugin
PLUGIN_TYPE mockplugin
DEFAULT_IF FALSE
SOURCES
qmock4plugin.cpp qmock4plugin.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::MockPlugins1
)
diff --git a/tests/auto/cmake/mockplugins/mock4plugin/qmock4plugin.h b/tests/auto/cmake/mockplugins/mock4plugin/qmock4plugin.h
index 0776bef002..1895367575 100644
--- a/tests/auto/cmake/mockplugins/mock4plugin/qmock4plugin.h
+++ b/tests/auto/cmake/mockplugins/mock4plugin/qmock4plugin.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Kitware, Inc.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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) 2018 Kitware, Inc.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QMOCK4PLUGIN_H
#define QMOCK4PLUGIN_H
diff --git a/tests/auto/cmake/mockplugins/mock5plugin/CMakeLists.txt b/tests/auto/cmake/mockplugins/mock5plugin/CMakeLists.txt
index da1b8a9b33..1d34cabe1f 100644
--- a/tests/auto/cmake/mockplugins/mock5plugin/CMakeLists.txt
+++ b/tests/auto/cmake/mockplugins/mock5plugin/CMakeLists.txt
@@ -1,10 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_plugin(QMock5Plugin
+ NO_UNITY_BUILD
CLASS_NAME QMock5Plugin
PLUGIN_TYPE mockplugin
DEFAULT_IF FALSE
SOURCES
qmock5plugin.cpp qmock5plugin.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::MockPlugins3
)
diff --git a/tests/auto/cmake/mockplugins/mock5plugin/qmock5plugin.h b/tests/auto/cmake/mockplugins/mock5plugin/qmock5plugin.h
index 2f387da203..4b6c95fb23 100644
--- a/tests/auto/cmake/mockplugins/mock5plugin/qmock5plugin.h
+++ b/tests/auto/cmake/mockplugins/mock5plugin/qmock5plugin.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Kitware, Inc.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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) 2018 Kitware, Inc.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QMOCK5PLUGIN_H
#define QMOCK5PLUGIN_H
diff --git a/tests/auto/cmake/mockplugins/mock6plugin/CMakeLists.txt b/tests/auto/cmake/mockplugins/mock6plugin/CMakeLists.txt
index 3f203bed6e..5d80407d57 100644
--- a/tests/auto/cmake/mockplugins/mock6plugin/CMakeLists.txt
+++ b/tests/auto/cmake/mockplugins/mock6plugin/CMakeLists.txt
@@ -1,9 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_plugin(QMock6Plugin
+ NO_UNITY_BUILD
CLASS_NAME QMock6Plugin
PLUGIN_TYPE mockauxplugin
SOURCES
qmock6plugin.cpp qmock6plugin.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::MockPlugins3
)
diff --git a/tests/auto/cmake/mockplugins/mock6plugin/qmock6plugin.h b/tests/auto/cmake/mockplugins/mock6plugin/qmock6plugin.h
index 6b29b6703b..5278d67960 100644
--- a/tests/auto/cmake/mockplugins/mock6plugin/qmock6plugin.h
+++ b/tests/auto/cmake/mockplugins/mock6plugin/qmock6plugin.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Kitware, Inc.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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) 2018 Kitware, Inc.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QMOCK6PLUGIN_H
#define QMOCK6PLUGIN_H
diff --git a/tests/auto/cmake/mockplugins/mockplugins1/CMakeLists.txt b/tests/auto/cmake/mockplugins/mockplugins1/CMakeLists.txt
index 705885c7fa..adba60e42d 100644
--- a/tests/auto/cmake/mockplugins/mockplugins1/CMakeLists.txt
+++ b/tests/auto/cmake/mockplugins/mockplugins1/CMakeLists.txt
@@ -1,6 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_module(MockPlugins1
+ NO_UNITY_BUILD
PLUGIN_TYPES mockplugin
SOURCES
+ qmockplugin.h
fake.cpp
LIBRARIES
Qt::CorePrivate
diff --git a/tests/auto/cmake/mockplugins/mockplugins1/fake.cpp b/tests/auto/cmake/mockplugins/mockplugins1/fake.cpp
index f95eba6055..6cdf6a09ce 100644
--- a/tests/auto/cmake/mockplugins/mockplugins1/fake.cpp
+++ b/tests/auto/cmake/mockplugins/mockplugins1/fake.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QtGlobal>
diff --git a/tests/auto/cmake/mockplugins/mockplugins1/qmockplugin.h b/tests/auto/cmake/mockplugins/mockplugins1/qmockplugin.h
index 9427ae9212..d4dcea5c20 100644
--- a/tests/auto/cmake/mockplugins/mockplugins1/qmockplugin.h
+++ b/tests/auto/cmake/mockplugins/mockplugins1/qmockplugin.h
@@ -1,58 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Kitware, Inc.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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) 2018 Kitware, Inc.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QMOCKPLUGIN_H
#define QMOCKPLUGIN_H
-#include <QString>
-#include <QtPlugin>
+#include <QtCore/QString>
+#include <QtCore/QtPlugin>
QT_BEGIN_NAMESPACE
diff --git a/tests/auto/cmake/mockplugins/mockplugins2/CMakeLists.txt b/tests/auto/cmake/mockplugins/mockplugins2/CMakeLists.txt
index 9d406ef483..a797206cd6 100644
--- a/tests/auto/cmake/mockplugins/mockplugins2/CMakeLists.txt
+++ b/tests/auto/cmake/mockplugins/mockplugins2/CMakeLists.txt
@@ -1,4 +1,8 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_module(MockPlugins2
+ NO_UNITY_BUILD
SOURCES
fake.cpp
LIBRARIES
diff --git a/tests/auto/cmake/mockplugins/mockplugins2/fake.cpp b/tests/auto/cmake/mockplugins/mockplugins2/fake.cpp
index 384623d646..9256ef181f 100644
--- a/tests/auto/cmake/mockplugins/mockplugins2/fake.cpp
+++ b/tests/auto/cmake/mockplugins/mockplugins2/fake.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QtGlobal>
diff --git a/tests/auto/cmake/mockplugins/mockplugins3/CMakeLists.txt b/tests/auto/cmake/mockplugins/mockplugins3/CMakeLists.txt
index fc7c7aa944..b8e3c54535 100644
--- a/tests/auto/cmake/mockplugins/mockplugins3/CMakeLists.txt
+++ b/tests/auto/cmake/mockplugins/mockplugins3/CMakeLists.txt
@@ -1,6 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_module(MockPlugins3
+ NO_UNITY_BUILD
PLUGIN_TYPES mockauxplugin
SOURCES
+ qmockauxplugin.h
fake.cpp
LIBRARIES
Qt::CorePrivate
diff --git a/tests/auto/cmake/mockplugins/mockplugins3/fake.cpp b/tests/auto/cmake/mockplugins/mockplugins3/fake.cpp
index 9ec2b42181..9ca82b9ef7 100644
--- a/tests/auto/cmake/mockplugins/mockplugins3/fake.cpp
+++ b/tests/auto/cmake/mockplugins/mockplugins3/fake.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QtGlobal>
diff --git a/tests/auto/cmake/mockplugins/mockplugins3/qmockauxplugin.h b/tests/auto/cmake/mockplugins/mockplugins3/qmockauxplugin.h
index 25e4762bac..599c3ecbb4 100644
--- a/tests/auto/cmake/mockplugins/mockplugins3/qmockauxplugin.h
+++ b/tests/auto/cmake/mockplugins/mockplugins3/qmockauxplugin.h
@@ -1,58 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Kitware, Inc.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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) 2018 Kitware, Inc.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QMOCKAUXPLUGIN_H
#define QMOCKAUXPLUGIN_H
-#include <QString>
-#include <QtPlugin>
+#include <QtCore/QString>
+#include <QtCore/QtPlugin>
QT_BEGIN_NAMESPACE
diff --git a/tests/auto/cmake/test(needsquoting)dirname/CMakeLists.txt b/tests/auto/cmake/test(needsquoting)dirname/CMakeLists.txt
index c2a575af65..1916c048d3 100644
--- a/tests/auto/cmake/test(needsquoting)dirname/CMakeLists.txt
+++ b/tests/auto/cmake/test(needsquoting)dirname/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test(needsquoting)dirname/mywidget.cpp b/tests/auto/cmake/test(needsquoting)dirname/mywidget.cpp
index 67cda1c329..da7f51d286 100644
--- a/tests/auto/cmake/test(needsquoting)dirname/mywidget.cpp
+++ b/tests/auto/cmake/test(needsquoting)dirname/mywidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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 "mywidget.h"
#include "ui_mywidget.h"
diff --git a/tests/auto/cmake/test(needsquoting)dirname/mywidget.h b/tests/auto/cmake/test(needsquoting)dirname/mywidget.h
index dfa65a8503..4517670b56 100644
--- a/tests/auto/cmake/test(needsquoting)dirname/mywidget.h
+++ b/tests/auto/cmake/test(needsquoting)dirname/mywidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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 MYWIDGET_H
#define MYWIDGET_H
diff --git a/tests/auto/cmake/test_QFINDTESTDATA/CMakeLists.txt b/tests/auto/cmake/test_QFINDTESTDATA/CMakeLists.txt
index b67ff560e4..12ac9c9d6a 100644
--- a/tests/auto/cmake/test_QFINDTESTDATA/CMakeLists.txt
+++ b/tests/auto/cmake/test_QFINDTESTDATA/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_QFINDTESTDATA/tests/CMakeLists.txt b/tests/auto/cmake/test_QFINDTESTDATA/tests/CMakeLists.txt
index df91a7d84b..6d49ab8c3b 100644
--- a/tests/auto/cmake/test_QFINDTESTDATA/tests/CMakeLists.txt
+++ b/tests/auto/cmake/test_QFINDTESTDATA/tests/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
add_executable(test_QFINDTESTDATA WIN32 main.cpp)
diff --git a/tests/auto/cmake/test_QFINDTESTDATA/tests/main.cpp b/tests/auto/cmake/test_QFINDTESTDATA/tests/main.cpp
index 56996814c2..7938bbb863 100644
--- a/tests/auto/cmake/test_QFINDTESTDATA/tests/main.cpp
+++ b/tests/auto/cmake/test_QFINDTESTDATA/tests/main.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 <QCoreApplication>
#include <QtTest/QTest>
diff --git a/tests/auto/cmake/test_QTBUG-63422/CMakeLists.txt b/tests/auto/cmake/test_QTBUG-63422/CMakeLists.txt
index a256cfc067..535af3d4b5 100644
--- a/tests/auto/cmake/test_QTBUG-63422/CMakeLists.txt
+++ b/tests/auto/cmake/test_QTBUG-63422/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
if(POLICY CMP0099)
cmake_policy(SET CMP0099 NEW) # Avoid CMP0099 related warnings.
diff --git a/tests/auto/cmake/test_QTBUG-63422/mywidget.cpp b/tests/auto/cmake/test_QTBUG-63422/mywidget.cpp
index 7bc42537d5..adbfcd35e8 100644
--- a/tests/auto/cmake/test_QTBUG-63422/mywidget.cpp
+++ b/tests/auto/cmake/test_QTBUG-63422/mywidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Kevin Funk <kevin.funk@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) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Kevin Funk <kevin.funk@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "mywidget.h"
#include "ui_mywidget.h"
diff --git a/tests/auto/cmake/test_QTBUG-63422/mywidget.h b/tests/auto/cmake/test_QTBUG-63422/mywidget.h
index d0c79c0538..f975ae2fa3 100644
--- a/tests/auto/cmake/test_QTBUG-63422/mywidget.h
+++ b/tests/auto/cmake/test_QTBUG-63422/mywidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Kevin Funk <kevin.funk@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) 2017 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Kevin Funk <kevin.funk@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef MYWIDGET_H
#define MYWIDGET_H
diff --git a/tests/auto/cmake/test_QTP0003/CMakeLists.txt b/tests/auto/cmake/test_QTP0003/CMakeLists.txt
new file mode 100644
index 0000000000..8dda76fdb0
--- /dev/null
+++ b/tests/auto/cmake/test_QTP0003/CMakeLists.txt
@@ -0,0 +1,66 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_QTP0003)
+
+find_package(Qt6 COMPONENTS Core REQUIRED)
+
+if(QT6_IS_SHARED_LIBS_BUILD)
+ set(qt_build_type "SHARED_LIBRARY")
+else()
+ set(qt_build_type "STATIC_LIBRARY")
+endif()
+
+set(BUILD_SHARED_LIBS ON)
+qt6_add_library(MyLib source.cpp)
+get_target_property(type MyLib TYPE)
+if(NOT "${type}" STREQUAL "${qt_build_type}")
+ message(FATAL_ERROR "The library uses the default type different from Qt build type when"
+ "QTP0003 is not set")
+endif()
+
+set(BUILD_SHARED_LIBS OFF)
+qt6_add_library(MyLib2 source.cpp)
+get_target_property(type MyLib2 TYPE)
+if(NOT "${type}" STREQUAL "${qt_build_type}")
+ message(FATAL_ERROR "The library uses the default type different from Qt build type when"
+ "QTP0003 is not set")
+endif()
+
+set(BUILD_SHARED_LIBS ON)
+qt_policy(SET QTP0003 OLD)
+qt6_add_library(MyLib3 source.cpp)
+get_target_property(type MyLib3 TYPE)
+if(NOT "${type}" STREQUAL "${qt_build_type}")
+ message(FATAL_ERROR "The library uses the default type different from Qt build type when"
+ "QTP0003 is set to OLD")
+endif()
+
+set(BUILD_SHARED_LIBS OFF)
+qt_policy(SET QTP0003 OLD)
+qt6_add_library(MyLib4 source.cpp)
+get_target_property(type MyLib4 TYPE)
+if(NOT "${type}" STREQUAL "${qt_build_type}")
+ message(FATAL_ERROR "The library uses the default type different from Qt build type when"
+ "QTP0003 is set to OLD")
+endif()
+
+set(BUILD_SHARED_LIBS ON)
+qt_policy(SET QTP0003 NEW)
+qt6_add_library(MyLib5 source.cpp)
+get_target_property(type MyLib5 TYPE)
+if(NOT "${type}" STREQUAL "SHARED_LIBRARY")
+ message(FATAL_ERROR "The library doesn't consider the BUILD_SHARED_LIBS when"
+ "QTP0003 is set to NEW")
+endif()
+
+set(BUILD_SHARED_LIBS OFF)
+qt_policy(SET QTP0003 NEW)
+qt6_add_library(MyLib6 source.cpp)
+get_target_property(type MyLib6 TYPE)
+if(NOT "${type}" STREQUAL "STATIC_LIBRARY")
+ message(FATAL_ERROR "The library doesn't consider the BUILD_SHARED_LIBS when"
+ "QTP0003 is set to NEW")
+endif()
diff --git a/tests/auto/cmake/test_QTP0003/source.cpp b/tests/auto/cmake/test_QTP0003/source.cpp
new file mode 100644
index 0000000000..273d7dade4
--- /dev/null
+++ b/tests/auto/cmake/test_QTP0003/source.cpp
@@ -0,0 +1,4 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+class Noop {};
diff --git a/tests/auto/cmake/test_QT_TESTCASE_BUILDDIR/CMakeLists.txt b/tests/auto/cmake/test_QT_TESTCASE_BUILDDIR/CMakeLists.txt
index 92ce28a5b9..6e2a7d57bf 100644
--- a/tests/auto/cmake/test_QT_TESTCASE_BUILDDIR/CMakeLists.txt
+++ b/tests/auto/cmake/test_QT_TESTCASE_BUILDDIR/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
# The test is simply testing that manual specification of QT_TESTCASE_BUILDDIR works,
# despite the weird paths.
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_QT_TESTCASE_BUILDDIR/main.cpp b/tests/auto/cmake/test_QT_TESTCASE_BUILDDIR/main.cpp
index 8965e0dac3..ae34d13ff1 100644
--- a/tests/auto/cmake/test_QT_TESTCASE_BUILDDIR/main.cpp
+++ b/tests/auto/cmake/test_QT_TESTCASE_BUILDDIR/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QCoreApplication>
#include <QtTest/QTest>
diff --git a/tests/auto/cmake/test_add_big_resource/CMakeLists.txt b/tests/auto/cmake/test_add_big_resource/CMakeLists.txt
index b712f5a23d..bee8472475 100644
--- a/tests/auto/cmake/test_add_big_resource/CMakeLists.txt
+++ b/tests/auto/cmake/test_add_big_resource/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(test_add_big_resource)
diff --git a/tests/auto/cmake/test_add_big_resource/myobject.cpp b/tests/auto/cmake/test_add_big_resource/myobject.cpp
index 5d320b8592..34c2ccc6bf 100644
--- a/tests/auto/cmake/test_add_big_resource/myobject.cpp
+++ b/tests/auto/cmake/test_add_big_resource/myobject.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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 "myobject.h"
diff --git a/tests/auto/cmake/test_add_big_resource/myobject.h b/tests/auto/cmake/test_add_big_resource/myobject.h
index c5b32c680d..87d7bfa3df 100644
--- a/tests/auto/cmake/test_add_big_resource/myobject.h
+++ b/tests/auto/cmake/test_add_big_resource/myobject.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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
diff --git a/tests/auto/cmake/test_add_binary_resources_delayed_file/CMakeLists.txt b/tests/auto/cmake/test_add_binary_resources_delayed_file/CMakeLists.txt
index 1ca2c0940a..9a247bc684 100644
--- a/tests/auto/cmake/test_add_binary_resources_delayed_file/CMakeLists.txt
+++ b/tests/auto/cmake/test_add_binary_resources_delayed_file/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_add_binary_resources_delayed_file/main.cpp b/tests/auto/cmake/test_add_binary_resources_delayed_file/main.cpp
index ce4a9a60da..f0bc74403c 100644
--- a/tests/auto/cmake/test_add_binary_resources_delayed_file/main.cpp
+++ b/tests/auto/cmake/test_add_binary_resources_delayed_file/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 André Klitzing <aklitzing@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) 2015 André Klitzing <aklitzing@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QFile>
#include <QResource>
@@ -34,6 +9,7 @@ int main(int argc, char **argv)
if (QResource::registerResource("rcc_file.rcc") &&
QFile::exists("://resource_file.txt") && QFile::exists("://resource_file_two.txt"))
{
+ QResource::unregisterResource("rcc_file.rcc"); // avoid leaks
return 0;
}
diff --git a/tests/auto/cmake/test_add_resource_options/CMakeLists.txt b/tests/auto/cmake/test_add_resource_options/CMakeLists.txt
index 4692cdbdc6..d7bb053714 100644
--- a/tests/auto/cmake/test_add_resource_options/CMakeLists.txt
+++ b/tests/auto/cmake/test_add_resource_options/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_add_resource_options/myobject.cpp b/tests/auto/cmake/test_add_resource_options/myobject.cpp
index 600281e1db..14e00e789a 100644
--- a/tests/auto/cmake/test_add_resource_options/myobject.cpp
+++ b/tests/auto/cmake/test_add_resource_options/myobject.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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 "myobject.h"
diff --git a/tests/auto/cmake/test_add_resource_options/myobject.h b/tests/auto/cmake/test_add_resource_options/myobject.h
index c5b32c680d..87d7bfa3df 100644
--- a/tests/auto/cmake/test_add_resource_options/myobject.h
+++ b/tests/auto/cmake/test_add_resource_options/myobject.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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
diff --git a/tests/auto/cmake/test_add_resource_prefix/CMakeLists.txt b/tests/auto/cmake/test_add_resource_prefix/CMakeLists.txt
new file mode 100644
index 0000000000..65faa4cb09
--- /dev/null
+++ b/tests/auto/cmake/test_add_resource_prefix/CMakeLists.txt
@@ -0,0 +1,25 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_add_resource_prefix)
+
+find_package(Qt6 REQUIRED
+ COMPONENTS Core Test
+)
+
+set(CMAKE_AUTOMOC ON)
+
+add_executable(test_add_resource_prefix main.cpp)
+
+# Tests if "/" is being used when PREFIX is missing
+qt_add_resources(test_add_resource_prefix "resources_without_prefix"
+ FILES resource_file.txt)
+
+# Tests if the PREFIX parameter is being respected
+qt_add_resources(test_add_resource_prefix "resources_with_prefix"
+ PREFIX "/resources"
+ FILES resource_file.txt)
+
+target_link_libraries(test_add_resource_prefix PRIVATE Qt::Core Qt::Test)
diff --git a/tests/auto/cmake/test_add_resource_prefix/main.cpp b/tests/auto/cmake/test_add_resource_prefix/main.cpp
new file mode 100644
index 0000000000..1a8b37715b
--- /dev/null
+++ b/tests/auto/cmake/test_add_resource_prefix/main.cpp
@@ -0,0 +1,26 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QFile>
+#include <QtTest>
+
+class TestAddResourcePrefix : public QObject
+{
+ Q_OBJECT
+private slots:
+ void resourceInDefaultPathExists();
+ void resourceInGivenPathExists();
+};
+
+void TestAddResourcePrefix::resourceInDefaultPathExists()
+{
+ QVERIFY(QFile::exists(":/resource_file.txt"));
+}
+
+void TestAddResourcePrefix::resourceInGivenPathExists()
+{
+ QVERIFY(QFile::exists(":/resources/resource_file.txt"));
+}
+
+QTEST_MAIN(TestAddResourcePrefix)
+#include "main.moc"
diff --git a/tests/auto/cmake/test_add_resource_prefix/resource_file.txt b/tests/auto/cmake/test_add_resource_prefix/resource_file.txt
new file mode 100644
index 0000000000..2c604a4f18
--- /dev/null
+++ b/tests/auto/cmake/test_add_resource_prefix/resource_file.txt
@@ -0,0 +1 @@
+Ken sent me.
diff --git a/tests/auto/cmake/test_add_resources_big_resources/CMakeLists.txt b/tests/auto/cmake/test_add_resources_big_resources/CMakeLists.txt
new file mode 100644
index 0000000000..9f9ae6a43c
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_big_resources/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_add_resources_big_resources)
+
+if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/FindPackageHints.cmake")
+ include("${CMAKE_CURRENT_LIST_DIR}/FindPackageHints.cmake")
+endif()
+
+find_package(Qt6 REQUIRED
+ COMPONENTS Core Test
+ HINTS ${Qt6Tests_PREFIX_PATH}
+)
+
+qt6_add_library(leaf_lib STATIC leaf_lib.cpp)
+qt6_add_resources(leaf_lib resources2
+ FILES resource2.txt PREFIX "/" BIG_RESOURCES)
+target_link_libraries(leaf_lib PRIVATE Qt6::Core)
+
+if(NOT TARGET leaf_lib_resources2_obj)
+ message(FATAL_ERROR "Object library for resources2 was not created.")
+endif()
+
+qt6_add_library(intermediate_lib STATIC intermediate_lib.cpp)
+qt6_add_resources(intermediate_lib resources3
+ FILES resource3.txt PREFIX "/" BIG_RESOURCES
+)
+target_link_libraries(intermediate_lib PRIVATE Qt6::Core leaf_lib)
+
+if(NOT TARGET intermediate_lib_resources3_obj)
+ message(FATAL_ERROR "Object library for resources3 was not created.")
+endif()
+
+set(CMAKE_AUTOMOC ON)
+
+qt6_add_executable(test_add_resources_big_resources main.cpp)
+qt6_add_resources(test_add_resources_big_resources resources1
+ FILES resource1.txt PREFIX "/" BIG_RESOURCES)
+target_link_libraries(test_add_resources_big_resources PRIVATE Qt6::Test intermediate_lib)
+
+if(NOT TARGET test_add_resources_big_resources_resources1_obj)
+ message(FATAL_ERROR "Object library for resources1 was not created.")
+endif()
diff --git a/tests/auto/cmake/test_add_resources_big_resources/intermediate_lib.cpp b/tests/auto/cmake/test_add_resources_big_resources/intermediate_lib.cpp
new file mode 100644
index 0000000000..a8f2be6955
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_big_resources/intermediate_lib.cpp
@@ -0,0 +1,20 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "leaf_lib.h"
+
+#include <QtCore/qfile.h>
+
+namespace intermediate_lib {
+
+bool isLeafLibResourceAvailable()
+{
+ return leaf_lib::isResourceAvailable();
+}
+
+bool isResourceAvailable()
+{
+ return QFile::exists(u":/resource3.txt"_qs);
+}
+
+} // namespace
diff --git a/tests/auto/cmake/test_add_resources_big_resources/intermediate_lib.h b/tests/auto/cmake/test_add_resources_big_resources/intermediate_lib.h
new file mode 100644
index 0000000000..efa03e8a5e
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_big_resources/intermediate_lib.h
@@ -0,0 +1,9 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#pragma once
+
+namespace intermediate_lib {
+bool isLeafLibResourceAvailable();
+bool isResourceAvailable();
+} //namespace
diff --git a/tests/auto/cmake/test_add_resources_big_resources/leaf_lib.cpp b/tests/auto/cmake/test_add_resources_big_resources/leaf_lib.cpp
new file mode 100644
index 0000000000..8363ceec0a
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_big_resources/leaf_lib.cpp
@@ -0,0 +1,13 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/qfile.h>
+
+namespace leaf_lib {
+
+bool isResourceAvailable()
+{
+ return QFile::exists(u":/resource2.txt"_qs);
+}
+
+} // namespace
diff --git a/tests/auto/cmake/test_add_resources_big_resources/leaf_lib.h b/tests/auto/cmake/test_add_resources_big_resources/leaf_lib.h
new file mode 100644
index 0000000000..71195a7c74
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_big_resources/leaf_lib.h
@@ -0,0 +1,8 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#pragma once
+
+namespace leaf_lib {
+bool isResourceAvailable();
+} // namespace
diff --git a/tests/auto/cmake/test_add_resources_big_resources/main.cpp b/tests/auto/cmake/test_add_resources_big_resources/main.cpp
new file mode 100644
index 0000000000..8ff0c4f54c
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_big_resources/main.cpp
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "intermediate_lib.h"
+
+#include <QtCore/qfile.h>
+#include <QtTest/QtTest>
+
+class TestAddResourcesBigResources : public QObject
+{
+ Q_OBJECT
+private slots:
+ void resourceInApplicationExists();
+ void resourceInIntermediateLibExists();
+ void resourceInLeafLibExists();
+};
+
+void TestAddResourcesBigResources::resourceInApplicationExists()
+{
+ QVERIFY(QFile::exists(":/resource1.txt"));
+}
+
+void TestAddResourcesBigResources::resourceInIntermediateLibExists()
+{
+ QVERIFY(intermediate_lib::isResourceAvailable());
+}
+
+void TestAddResourcesBigResources::resourceInLeafLibExists()
+{
+ QVERIFY(intermediate_lib::isLeafLibResourceAvailable());
+}
+
+QTEST_MAIN(TestAddResourcesBigResources)
+#include "main.moc"
+
diff --git a/tests/auto/cmake/test_add_resources_big_resources/resource1.txt b/tests/auto/cmake/test_add_resources_big_resources/resource1.txt
new file mode 100644
index 0000000000..bc06a6d721
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_big_resources/resource1.txt
@@ -0,0 +1 @@
+Test resource1
diff --git a/tests/auto/cmake/test_add_resources_big_resources/resource2.txt b/tests/auto/cmake/test_add_resources_big_resources/resource2.txt
new file mode 100644
index 0000000000..b8f9e67458
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_big_resources/resource2.txt
@@ -0,0 +1 @@
+Test resource2
diff --git a/tests/auto/cmake/test_add_resources_big_resources/resource3.txt b/tests/auto/cmake/test_add_resources_big_resources/resource3.txt
new file mode 100644
index 0000000000..0ed6318a85
--- /dev/null
+++ b/tests/auto/cmake/test_add_resources_big_resources/resource3.txt
@@ -0,0 +1 @@
+Test resource3
diff --git a/tests/auto/cmake/test_add_resources_binary_generated/CMakeLists.txt b/tests/auto/cmake/test_add_resources_binary_generated/CMakeLists.txt
index 2d5a399a0c..df9ef0c3bb 100644
--- a/tests/auto/cmake/test_add_resources_binary_generated/CMakeLists.txt
+++ b/tests/auto/cmake/test_add_resources_binary_generated/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(test_add_resources_binary_generated)
diff --git a/tests/auto/cmake/test_add_resources_binary_generated/main.cpp b/tests/auto/cmake/test_add_resources_binary_generated/main.cpp
index bee714bcf9..73177555d4 100644
--- a/tests/auto/cmake/test_add_resources_binary_generated/main.cpp
+++ b/tests/auto/cmake/test_add_resources_binary_generated/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QFile>
#include <QResource>
@@ -37,5 +12,9 @@ int main(int, char **)
|| !QFile::exists(":/resource2.txt")) {
return -1;
}
+
+ // Avoid leaks
+ QResource::unregisterResource(RESOURCE1_FULL_PATH);
+ QResource::unregisterResource(RESOURCE2_FULL_PATH);
return 0;
}
diff --git a/tests/auto/cmake/test_add_resources_delayed_file/CMakeLists.txt b/tests/auto/cmake/test_add_resources_delayed_file/CMakeLists.txt
index 49bc5cbb2b..1a320dadf0 100644
--- a/tests/auto/cmake/test_add_resources_delayed_file/CMakeLists.txt
+++ b/tests/auto/cmake/test_add_resources_delayed_file/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_add_resources_delayed_file/main.cpp b/tests/auto/cmake/test_add_resources_delayed_file/main.cpp
index 59371ed6cb..1a1596dd6a 100644
--- a/tests/auto/cmake/test_add_resources_delayed_file/main.cpp
+++ b/tests/auto/cmake/test_add_resources_delayed_file/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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 <qglobal.h>
diff --git a/tests/auto/cmake/test_android_multi_abi_forward_vars/CMakeLists.txt b/tests/auto/cmake/test_android_multi_abi_forward_vars/CMakeLists.txt
new file mode 100644
index 0000000000..0f84d5ff3e
--- /dev/null
+++ b/tests/auto/cmake/test_android_multi_abi_forward_vars/CMakeLists.txt
@@ -0,0 +1,33 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_android_multi_abi_forward_vars)
+
+find_package(Qt6 COMPONENTS Core Gui REQUIRED)
+
+if(NOT TEST_SINGLE_VALUE_ARG STREQUAL "TestValue")
+ message(FATAL_ERROR
+ "TEST_SINGLE_VALUE_ARG is not valid: ${TEST_SINGLE_VALUE_ARG}")
+endif()
+
+if(NOT TEST_LIST_VALUE_ARG STREQUAL "TestValue;TestValue2;TestValue3")
+ message(FATAL_ERROR
+ "TEST_LIST_VALUE_ARG is not valid: ${TEST_LIST_VALUE_ARG}")
+endif()
+
+if(NOT TEST_ESCAPING_VALUE_ARG STREQUAL "TestValue\;TestValue2\;TestValue3")
+ message(FATAL_ERROR
+ "TEST_ESCAPING_VALUE_ARG is not valid: ${TEST_ESCAPING_VALUE_ARG}")
+endif()
+
+if(NOT TEST_SPACES_VALUE_ARG STREQUAL "TestValue TestValue2 TestValue3")
+ message(FATAL_ERROR
+ "TEST_SPACES_VALUE_ARG is not valid: ${TEST_SPACES_VALUE_ARG}")
+endif()
+
+# Make sure that ABI external projects are created
+qt6_add_executable(test_executable main.cpp)
+
+target_link_libraries(test_executable PRIVATE Qt::Core Qt::Gui)
diff --git a/tests/auto/cmake/test_android_multi_abi_forward_vars/main.cpp b/tests/auto/cmake/test_android_multi_abi_forward_vars/main.cpp
new file mode 100644
index 0000000000..304c7b20dc
--- /dev/null
+++ b/tests/auto/cmake/test_android_multi_abi_forward_vars/main.cpp
@@ -0,0 +1,4 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+int main(int, char *[]) { return 0; }
diff --git a/tests/auto/cmake/test_build_simple_widget_app/CMakeLists.txt b/tests/auto/cmake/test_build_simple_widget_app/CMakeLists.txt
index daccf5bb80..1fcd026cce 100644
--- a/tests/auto/cmake/test_build_simple_widget_app/CMakeLists.txt
+++ b/tests/auto/cmake/test_build_simple_widget_app/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(ios_projects LANGUAGES CXX)
diff --git a/tests/auto/cmake/test_build_simple_widget_app/main.cpp b/tests/auto/cmake/test_build_simple_widget_app/main.cpp
index fa4f75ae7b..b4502fa05a 100644
--- a/tests/auto/cmake/test_build_simple_widget_app/main.cpp
+++ b/tests/auto/cmake/test_build_simple_widget_app/main.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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: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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QApplication>
#include <QWidget>
diff --git a/tests/auto/cmake/test_build_simple_widget_app/test_build_simple_widget_app.pro b/tests/auto/cmake/test_build_simple_widget_app/test_build_simple_widget_app.pro
new file mode 100644
index 0000000000..30834e2ee2
--- /dev/null
+++ b/tests/auto/cmake/test_build_simple_widget_app/test_build_simple_widget_app.pro
@@ -0,0 +1,5 @@
+TEMPLATE = app
+SOURCES += main.cpp
+QT += widgets
+CONFIG += app_bundle
+TARGET = simple_widget_app
diff --git a/tests/auto/cmake/test_collecting_plugins/CMakeLists.txt b/tests/auto/cmake/test_collecting_plugins/CMakeLists.txt
new file mode 100644
index 0000000000..246acd4c71
--- /dev/null
+++ b/tests/auto/cmake/test_collecting_plugins/CMakeLists.txt
@@ -0,0 +1,31 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_collecting_plugins
+ VERSION
+ "${CMAKE_Core_MODULE_MAJOR_VERSION}.${CMAKE_Core_MODULE_MINOR_VERSION}.${CMAKE_Core_MODULE_PATCH_VERSION}")
+
+find_package(Qt6 COMPONENTS Core Gui BuildInternals REQUIRED)
+
+qt_prepare_standalone_project()
+
+qt_internal_add_plugin(QTestImagePlugin
+ SHARED
+ PLUGIN_TYPE imageformats
+ SOURCES
+ plugin.cpp
+ LIBRARIES
+ Qt6::Gui
+ SKIP_INSTALL # Make sure that we do not package this plugin
+)
+
+qt_add_executable(TestExecutable main.cpp)
+target_link_libraries(TestExecutable PRIVATE Qt6::Gui)
+
+__qt_internal_collect_plugin_targets_from_dependencies(TestExecutable plugin_targets)
+
+if(NOT "QTestImagePlugin" IN_LIST plugin_targets)
+ message(FATAL_ERROR "QTestImagePlugin plugin is missing")
+endif()
diff --git a/tests/auto/cmake/test_collecting_plugins/main.cpp b/tests/auto/cmake/test_collecting_plugins/main.cpp
new file mode 100644
index 0000000000..09225de205
--- /dev/null
+++ b/tests/auto/cmake/test_collecting_plugins/main.cpp
@@ -0,0 +1,7 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+int main(int, char *[])
+{
+ return 0;
+}
diff --git a/tests/auto/cmake/test_collecting_plugins/plugin.cpp b/tests/auto/cmake/test_collecting_plugins/plugin.cpp
new file mode 100644
index 0000000000..f844d86c4e
--- /dev/null
+++ b/tests/auto/cmake/test_collecting_plugins/plugin.cpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <qimageiohandler.h>
+
+class TestImagePlugin : public QImageIOPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface")
+public:
+ Capabilities capabilities(QIODevice *, const QByteArray &) const override { return {}; }
+ QImageIOHandler *create(QIODevice *, const QByteArray & = QByteArray()) const override
+ {
+ return nullptr;
+ }
+};
+
+#include "plugin.moc"
diff --git a/tests/auto/cmake/test_concurrent_module/CMakeLists.txt b/tests/auto/cmake/test_concurrent_module/CMakeLists.txt
index 3294535319..f2d108274c 100644
--- a/tests/auto/cmake/test_concurrent_module/CMakeLists.txt
+++ b/tests/auto/cmake/test_concurrent_module/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_concurrent_module/main.cpp b/tests/auto/cmake/test_concurrent_module/main.cpp
index 1164b555f0..9412c60638 100644
--- a/tests/auto/cmake/test_concurrent_module/main.cpp
+++ b/tests/auto/cmake/test_concurrent_module/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 <QtConcurrent>
#include <QtConcurrent/QtConcurrent>
diff --git a/tests/auto/cmake/test_config_expressions/CMakeLists.txt b/tests/auto/cmake/test_config_expressions/CMakeLists.txt
new file mode 100644
index 0000000000..e3863b738a
--- /dev/null
+++ b/tests/auto/cmake/test_config_expressions/CMakeLists.txt
@@ -0,0 +1,134 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_config_expressions)
+
+find_package(Qt6 REQUIRED)
+include(QtFeature)
+
+function(assert expected_value)
+ set(expression ${ARGN})
+ qt_evaluate_config_expression(result ${expression})
+ if(NOT "${result}" STREQUAL "${expected_value}")
+ message(FATAL_ERROR
+ "Unexpected value '${result}' when evaluating expression '${expression}'.")
+ endif()
+endfunction()
+
+function(assert_T)
+ assert(ON ${ARGN})
+endfunction()
+
+function(assert_F)
+ assert(OFF ${ARGN})
+endfunction()
+
+function(expect_failure expected_value)
+ set(expression ${ARGN})
+ qt_evaluate_config_expression(result ${expression})
+ if("${result}" STREQUAL "${expected_value}")
+ message(FATAL_ERROR
+ "Expression '${expression}' unexpectedly evaluated to the correct value '${result}'.")
+ endif()
+endfunction()
+
+function(expect_failure_T)
+ expect_failure(ON ${ARGN})
+endfunction()
+
+function(expect_failure_F)
+ expect_failure(OFF ${ARGN})
+endfunction()
+
+assert_T(ON)
+assert_T(TRUE)
+assert_F(OFF)
+assert_F(FALSE)
+
+assert_T(NOT FALSE)
+assert_F(NOT TRUE)
+
+assert_T(TRUE OR TRUE)
+assert_T(TRUE OR FALSE)
+assert_T(FALSE OR TRUE)
+assert_F(FALSE OR FALSE)
+
+assert_T(TRUE AND TRUE)
+assert_F(TRUE AND FALSE)
+assert_F(FALSE AND TRUE)
+assert_F(FALSE AND FALSE)
+
+# string comparison
+set(str1 "foo")
+set(str2 "bar")
+assert_T(str1 STREQUAL "foo")
+assert_T(str1 STREQUAL 'foo')
+expect_failure_T(str1 STREQUAL str1) # variable on rhs not supported
+expect_failure_T("foo" STREQUAL "foo") # literal on lhs not supported
+expect_failure_T('foo' STREQUAL 'foo') # literal on lhs not supported
+
+# comparison with empty string
+set(empty_string "")
+assert_T(empty_string STREQUAL '')
+assert_F(empty_string STREQUAL "x")
+
+# string matching
+set(processor ppc64)
+assert_T(${processor} MATCHES "(ppc|ppc64)$")
+assert_F(${processor} MATCHES "i[3-6]86$")
+
+# logical operators and parentheses
+set(A TRUE)
+set(B FALSE)
+set(C TRUE)
+assert_F(B OR B)
+assert_F(A AND B)
+assert_T(A AND (B OR C))
+assert_T((A AND B) OR C)
+assert_T((A AND B) OR (NOT B AND C))
+assert_F(NOT (B OR C))
+assert_T(NOT (A AND B))
+assert_F(NOT (B OR C))
+
+# target check
+set(lib1_cpp "${CMAKE_CURRENT_BINARY_DIR}/lib1.cpp")
+file(WRITE "${lib1_cpp}" "int foo() { return 42; }")
+add_library(lib1 STATIC EXCLUDE_FROM_ALL "${lib1_cpp}")
+assert_T(TARGET lib1)
+assert_F(TARGET does_not_exist)
+
+# IN_LIST
+set(primary_colors red yellow blue)
+assert_T(yellow IN_LIST primary_colors)
+assert_F(mauve IN_LIST primary_colors)
+
+# more complex string check from a real world feature
+set(INPUT_xcb "")
+set(INPUT_xkbcommon no)
+assert_F(NOT INPUT_xcb STREQUAL '' AND ( NOT INPUT_xcb STREQUAL 'no' )
+ AND INPUT_xkbcommon STREQUAL 'no')
+set(INPUT_xcb no)
+set(INPUT_xkbcommon no)
+assert_F(NOT INPUT_xcb STREQUAL '' AND ( NOT INPUT_xcb STREQUAL 'no' )
+ AND INPUT_xkbcommon STREQUAL 'no')
+set(INPUT_xcb yes)
+set(INPUT_xkbcommon no)
+assert_T(NOT INPUT_xcb STREQUAL '' AND ( NOT INPUT_xcb STREQUAL 'no' )
+ AND INPUT_xkbcommon STREQUAL 'no')
+set(INPUT_xcb no)
+set(INPUT_xkbcommon yes)
+assert_F(NOT INPUT_xcb STREQUAL '' AND ( NOT INPUT_xcb STREQUAL 'no' )
+ AND INPUT_xkbcommon STREQUAL 'no')
+
+set(FEATURE_shared ON)
+set(FEATURE_debug ON)
+set(FEATURE_debug_and_release OFF)
+set(FEATURE_force_debug_info OFF)
+set(TEST_separate_debug_info ON)
+assert_T(
+ ( FEATURE_shared )
+ AND ( FEATURE_debug OR FEATURE_debug_and_release OR FEATURE_force_debug_info )
+ AND ( MSVC OR APPLE OR TEST_separate_debug_info )
+)
diff --git a/tests/auto/cmake/test_dbus_module/CMakeLists.txt b/tests/auto/cmake/test_dbus_module/CMakeLists.txt
index 6159456197..014aae974c 100644
--- a/tests/auto/cmake/test_dbus_module/CMakeLists.txt
+++ b/tests/auto/cmake/test_dbus_module/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_dbus_module/mydbusobject.cpp b/tests/auto/cmake/test_dbus_module/mydbusobject.cpp
index 40e2ae0b41..c9420812b4 100644
--- a/tests/auto/cmake/test_dbus_module/mydbusobject.cpp
+++ b/tests/auto/cmake/test_dbus_module/mydbusobject.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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 "mydbusobject.h"
#include "mydbusobjectadaptor.h"
diff --git a/tests/auto/cmake/test_dbus_module/mydbusobject.h b/tests/auto/cmake/test_dbus_module/mydbusobject.h
index 5a2c69cdae..8a95c99f04 100644
--- a/tests/auto/cmake/test_dbus_module/mydbusobject.h
+++ b/tests/auto/cmake/test_dbus_module/mydbusobject.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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 MYDBUSOBJECT_H
#define MYDBUSOBJECT_H
diff --git a/tests/auto/cmake/test_dependent_modules/CMakeLists.txt b/tests/auto/cmake/test_dependent_modules/CMakeLists.txt
index 679f7fed27..47ced6ccda 100644
--- a/tests/auto/cmake/test_dependent_modules/CMakeLists.txt
+++ b/tests/auto/cmake/test_dependent_modules/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_dependent_modules/mywidget.cpp b/tests/auto/cmake/test_dependent_modules/mywidget.cpp
index 67cda1c329..da7f51d286 100644
--- a/tests/auto/cmake/test_dependent_modules/mywidget.cpp
+++ b/tests/auto/cmake/test_dependent_modules/mywidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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 "mywidget.h"
#include "ui_mywidget.h"
diff --git a/tests/auto/cmake/test_dependent_modules/mywidget.h b/tests/auto/cmake/test_dependent_modules/mywidget.h
index dfa65a8503..4517670b56 100644
--- a/tests/auto/cmake/test_dependent_modules/mywidget.h
+++ b/tests/auto/cmake/test_dependent_modules/mywidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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 MYWIDGET_H
#define MYWIDGET_H
diff --git a/tests/auto/cmake/test_egl_lib/main.cpp b/tests/auto/cmake/test_egl_lib/main.cpp
index b4f937b380..b5faa46dd3 100644
--- a/tests/auto/cmake/test_egl_lib/main.cpp
+++ b/tests/auto/cmake/test_egl_lib/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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) 2013 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 <EGL/egl.h>
diff --git a/tests/auto/cmake/test_generating_cpp_exports/.cmake.conf b/tests/auto/cmake/test_generating_cpp_exports/.cmake.conf
index 4e73b3d607..10bc1fd407 100644
--- a/tests/auto/cmake/test_generating_cpp_exports/.cmake.conf
+++ b/tests/auto/cmake/test_generating_cpp_exports/.cmake.conf
@@ -1 +1 @@
-set(QT_REPO_MODULE_VERSION "6.2.0")
+set(QT_REPO_MODULE_VERSION "6.8.0")
diff --git a/tests/auto/cmake/test_generating_cpp_exports/CMakeLists.txt b/tests/auto/cmake/test_generating_cpp_exports/CMakeLists.txt
index 7b5666c3f7..564d23ca05 100644
--- a/tests/auto/cmake/test_generating_cpp_exports/CMakeLists.txt
+++ b/tests/auto/cmake/test_generating_cpp_exports/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
include(.cmake.conf)
@@ -10,10 +13,12 @@ project(TestGeneratingCppExports
)
find_package(Qt6 COMPONENTS Core BuildInternals Test CONFIG REQUIRED)
+qt_internal_project_setup()
qt_build_repo_begin()
add_subdirectory(test_autogenerating_cpp_exports)
add_subdirectory(test_autogenerating_cpp_exports_custom_name)
+qt_build_repo_post_process()
qt_build_repo_end()
diff --git a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/CMakeLists.txt b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/CMakeLists.txt
index 805bce2a93..0e446dd108 100644
--- a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/CMakeLists.txt
+++ b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/CMakeLists.txt
@@ -1,4 +1,8 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_module(TestAutogeneratingCppExports
+ NO_UNITY_BUILD
GENERATE_CPP_EXPORTS
SOURCES
module_api.h
@@ -15,3 +19,4 @@ qt_internal_extend_target(TestAutogeneratingCppExports
add_executable(TestAutogeneratingCppExportsApp use_api.cpp)
target_link_libraries(TestAutogeneratingCppExportsApp PRIVATE TestAutogeneratingCppExports)
+set_target_properties(TestAutogeneratingCppExportsApp PROPERTIES UNITY_BUILD OFF)
diff --git a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/module_api.cpp b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/module_api.cpp
index bc88991ec1..e77895e719 100644
--- a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/module_api.cpp
+++ b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/module_api.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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: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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "module_api.h"
diff --git a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/module_api.h b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/module_api.h
index 8d7e897157..6c8112c617 100644
--- a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/module_api.h
+++ b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/module_api.h
@@ -1,45 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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: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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef MODULE_API_H
#define MODULE_API_H
+#if 0
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
+#endif
+
#include <QtTestAutogeneratingCppExports/qttestautogeneratingcppexportsexports.h>
struct Q_TESTAUTOGENERATINGCPPEXPORTS_EXPORT TestApi
diff --git a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/use_api.cpp b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/use_api.cpp
index 40d9469416..f84931300f 100644
--- a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/use_api.cpp
+++ b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports/use_api.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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: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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "module_api.h"
diff --git a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/CMakeLists.txt b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/CMakeLists.txt
index e1735a3f9f..8473979c70 100644
--- a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/CMakeLists.txt
+++ b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/CMakeLists.txt
@@ -1,4 +1,8 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_module(TestAutogeneratingCppExportsCustomName
+ NO_UNITY_BUILD
GENERATE_CPP_EXPORTS
CPP_EXPORT_HEADER_BASE_NAME
"customname_exports"
@@ -17,3 +21,4 @@ qt_internal_extend_target(TestAutogeneratingCppExportsCustomName
add_executable(testapp2 use_api.cpp)
target_link_libraries(testapp2 PRIVATE TestAutogeneratingCppExportsCustomName)
+set_target_properties(testapp2 PROPERTIES UNITY_BUILD OFF)
diff --git a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/module_api.cpp b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/module_api.cpp
index bc88991ec1..e77895e719 100644
--- a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/module_api.cpp
+++ b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/module_api.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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: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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "module_api.h"
diff --git a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/module_api.h b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/module_api.h
index b797609fad..62c1b31ac4 100644
--- a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/module_api.h
+++ b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/module_api.h
@@ -1,45 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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: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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef MODULE_API_H
#define MODULE_API_H
+#if 0
+#pragma qt_sync_skip_header_check
+#pragma qt_sync_stop_processing
+#endif
+
#include <QtTestAutogeneratingCppExportsCustomName/customname_exports.h>
struct Q_TESTAUTOGENERATINGCPPEXPORTSCUSTOMNAME_EXPORT TestApi
diff --git a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/use_api.cpp b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/use_api.cpp
index 40d9469416..f84931300f 100644
--- a/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/use_api.cpp
+++ b/tests/auto/cmake/test_generating_cpp_exports/test_autogenerating_cpp_exports_custom_name/use_api.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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: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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "module_api.h"
diff --git a/tests/auto/cmake/test_global_promotion/CMakeLists.txt b/tests/auto/cmake/test_global_promotion/CMakeLists.txt
index 1ad6c5e7ad..24b2eacaf1 100644
--- a/tests/auto/cmake/test_global_promotion/CMakeLists.txt
+++ b/tests/auto/cmake/test_global_promotion/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(global_promotion)
diff --git a/tests/auto/cmake/test_global_promotion/subdir_with_global_qt/CMakeLists.txt b/tests/auto/cmake/test_global_promotion/subdir_with_global_qt/CMakeLists.txt
index a8808a8c83..26e3d6e025 100644
--- a/tests/auto/cmake/test_global_promotion/subdir_with_global_qt/CMakeLists.txt
+++ b/tests/auto/cmake/test_global_promotion/subdir_with_global_qt/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
message(STATUS "Entered subdir_with_global_qt subdirectory")
set(file_path "${CMAKE_CURRENT_BINARY_DIR}/lib.cpp")
diff --git a/tests/auto/cmake/test_global_promotion/subdir_with_local_qt/CMakeLists.txt b/tests/auto/cmake/test_global_promotion/subdir_with_local_qt/CMakeLists.txt
index 1bed5a2f99..820282b7c1 100644
--- a/tests/auto/cmake/test_global_promotion/subdir_with_local_qt/CMakeLists.txt
+++ b/tests/auto/cmake/test_global_promotion/subdir_with_local_qt/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
message(STATUS "Entered subdir_with_local_qt subdirectory")
set(file_path "${CMAKE_CURRENT_BINARY_DIR}/lib.cpp")
diff --git a/tests/auto/cmake/test_import_plugins/CMakeLists.txt b/tests/auto/cmake/test_import_plugins/CMakeLists.txt
index be85af2091..5f6d629c20 100644
--- a/tests/auto/cmake/test_import_plugins/CMakeLists.txt
+++ b/tests/auto/cmake/test_import_plugins/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(import_plugins_advanced)
diff --git a/tests/auto/cmake/test_import_plugins/main.cpp b/tests/auto/cmake/test_import_plugins/main.cpp
index 2bb316368d..69293f3abd 100644
--- a/tests/auto/cmake/test_import_plugins/main.cpp
+++ b/tests/auto/cmake/test_import_plugins/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Kitware, Inc.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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) 2018 Kitware, Inc.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QList>
#include <QPluginLoader>
diff --git a/tests/auto/cmake/test_interface/CMakeLists.txt b/tests/auto/cmake/test_interface/CMakeLists.txt
index 22e9a0b3ac..7028b41f7b 100644
--- a/tests/auto/cmake/test_interface/CMakeLists.txt
+++ b/tests/auto/cmake/test_interface/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_interface/main.cpp b/tests/auto/cmake/test_interface/main.cpp
index 491c7bf016..56b442a4ce 100644
--- a/tests/auto/cmake/test_interface/main.cpp
+++ b/tests/auto/cmake/test_interface/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 <QApplication>
diff --git a/tests/auto/cmake/test_interface/mainwindow.cpp b/tests/auto/cmake/test_interface/mainwindow.cpp
index 56bf81611a..2fec6400f6 100644
--- a/tests/auto/cmake/test_interface/mainwindow.cpp
+++ b/tests/auto/cmake/test_interface/mainwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 "mainwindow.h"
diff --git a/tests/auto/cmake/test_interface/mainwindow.h b/tests/auto/cmake/test_interface/mainwindow.h
index 2dd52efd01..345c4f69e9 100644
--- a/tests/auto/cmake/test_interface/mainwindow.h
+++ b/tests/auto/cmake/test_interface/mainwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/tests/auto/cmake/test_interface/widget_test/CMakeLists.txt b/tests/auto/cmake/test_interface/widget_test/CMakeLists.txt
index 229b1bf962..dd4c8fff28 100644
--- a/tests/auto/cmake/test_interface/widget_test/CMakeLists.txt
+++ b/tests/auto/cmake/test_interface/widget_test/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(test_interface_try_compile)
diff --git a/tests/auto/cmake/test_interface_link_libraries/CMakeLists.txt b/tests/auto/cmake/test_interface_link_libraries/CMakeLists.txt
index 28f8b9aefe..6a38d263cd 100644
--- a/tests/auto/cmake/test_interface_link_libraries/CMakeLists.txt
+++ b/tests/auto/cmake/test_interface_link_libraries/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_interface_link_libraries/main.cpp b/tests/auto/cmake/test_interface_link_libraries/main.cpp
index b035460587..7d4ca031db 100644
--- a/tests/auto/cmake/test_interface_link_libraries/main.cpp
+++ b/tests/auto/cmake/test_interface_link_libraries/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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) 2013 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 "somelib.h"
diff --git a/tests/auto/cmake/test_interface_link_libraries/somelib.cpp b/tests/auto/cmake/test_interface_link_libraries/somelib.cpp
index acb4b3fa68..de51a8e60f 100644
--- a/tests/auto/cmake/test_interface_link_libraries/somelib.cpp
+++ b/tests/auto/cmake/test_interface_link_libraries/somelib.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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) 2013 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 "somelib.h"
diff --git a/tests/auto/cmake/test_interface_link_libraries/somelib.h b/tests/auto/cmake/test_interface_link_libraries/somelib.h
index 9cad2931af..d2f0cfd554 100644
--- a/tests/auto/cmake/test_interface_link_libraries/somelib.h
+++ b/tests/auto/cmake/test_interface_link_libraries/somelib.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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) 2013 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 SOMELIB_H
#define SOMELIB_H
diff --git a/tests/auto/cmake/test_json_plugin_includes/CMakeLists.txt b/tests/auto/cmake/test_json_plugin_includes/CMakeLists.txt
index 0f5dc99206..15ea1ccadf 100644
--- a/tests/auto/cmake/test_json_plugin_includes/CMakeLists.txt
+++ b/tests/auto/cmake/test_json_plugin_includes/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_json_plugin_includes/plugin.cpp b/tests/auto/cmake/test_json_plugin_includes/plugin.cpp
index c9626d6433..5554fe737a 100644
--- a/tests/auto/cmake/test_json_plugin_includes/plugin.cpp
+++ b/tests/auto/cmake/test_json_plugin_includes/plugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 "plugin.h"
diff --git a/tests/auto/cmake/test_json_plugin_includes/plugin.h b/tests/auto/cmake/test_json_plugin_includes/plugin.h
index 79ec252734..7e3e9b4569 100644
--- a/tests/auto/cmake/test_json_plugin_includes/plugin.h
+++ b/tests/auto/cmake/test_json_plugin_includes/plugin.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 JSON_TEST_PLUGIN_H
#define JSON_TEST_PLUGIN_H
diff --git a/tests/auto/cmake/test_moc_macro_target/CMakeLists.txt b/tests/auto/cmake/test_moc_macro_target/CMakeLists.txt
index eaf8bda1bb..f9ca294bd2 100644
--- a/tests/auto/cmake/test_moc_macro_target/CMakeLists.txt
+++ b/tests/auto/cmake/test_moc_macro_target/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
@@ -11,7 +14,14 @@ qt_generate_moc(main_gen_test.cpp
"${CMAKE_CURRENT_BINARY_DIR}/main_gen_test.moc"
TARGET QtGenerateMacroTest
)
+list(APPEND CMAKE_AUTOMOC_MACRO_NAMES MySpecialMacro)
add_executable(QtGenerateMacroTest main_gen_test.cpp "${CMAKE_CURRENT_BINARY_DIR}/main_gen_test.moc")
+get_target_property(current_macros QtGenerateMacroTest AUTOMOC_MACRO_NAMES)
+
+if(NOT "${CMAKE_AUTOMOC_MACRO_NAMES}" STREQUAL "${current_macros}")
+ message(FATAL_ERROR "Expected ${CMAKE_AUTOMOC_MACRO_NAMES} but received ${current_macros}")
+endif()
+
target_include_directories(QtGenerateMacroTest PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/interface")
target_link_libraries(QtGenerateMacroTest PRIVATE Qt6::Core)
@@ -21,3 +31,25 @@ qt_wrap_cpp(moc_file mywrapobject.h
add_executable(QtWrapMacroTest main_wrap_test.cpp ${moc_file})
target_include_directories(QtWrapMacroTest PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/interface")
target_link_libraries(QtWrapMacroTest PRIVATE Qt::Core)
+
+target_compile_definitions(QtWrapMacroTest PRIVATE "$<$<BOOL:TRUE>:MY_OPTION>"
+ "$<$<BOOL:TRUE>:DEFINE_CMDLINE_SIGNAL=void cmdlineSignal(const QMap<int$<COMMA> int$<ANGLE-R> &i)>"
+ "DEFINE_CMDLINE_SIGNAL=void cmdlineSignal(const QMap<int, int> &i)")
+
+set(parameters_file_base "${CMAKE_CURRENT_BINARY_DIR}/moc_mywrapobject.cpp_parameters")
+# check if generator is multi-config
+if(CMAKE_CONFIGURATION_TYPES)
+ set(parameters_file "${parameters_file_base}_$<CONFIG>")
+else()
+ if(NOT CMAKE_BUILD_TYPE STREQUAL "")
+ set(parameters_file "${parameters_file_base}_${CMAKE_BUILD_TYPE}")
+ else()
+ set(parameters_file "${parameters_file_base}")
+ endif()
+endif()
+
+add_custom_command(TARGET QtWrapMacroTest
+ POST_BUILD
+ COMMAND ${CMAKE_COMMAND} "-DPARAMETERS_FILE_PATH=${parameters_file}" -P check_moc_parameters.cmake
+ WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+)
diff --git a/tests/auto/cmake/test_moc_macro_target/check_moc_parameters.cmake b/tests/auto/cmake/test_moc_macro_target/check_moc_parameters.cmake
new file mode 100644
index 0000000000..4ca8fab119
--- /dev/null
+++ b/tests/auto/cmake/test_moc_macro_target/check_moc_parameters.cmake
@@ -0,0 +1,15 @@
+
+function(check_parameters file_path)
+ file(READ ${file_path} file_content)
+ foreach(compile_option IN ITEMS "-DDEFINE_CMDLINE_SIGNAL" "-DMY_OPTION")
+ string(REGEX MATCHALL "${compile_option}" matches ${file_content})
+ list(LENGTH matches matches_length)
+ if(matches_length GREATER 1)
+ message(FATAL_ERROR "${compile_option} is defined multiple times in ${file_path}")
+ elseif(matches_length EQUAL 0)
+ message(FATAL_ERROR "${compile_option} is not defined in ${file_path}")
+ endif()
+ endforeach()
+endfunction()
+
+check_parameters(${PARAMETERS_FILE_PATH})
diff --git a/tests/auto/cmake/test_moc_macro_target/interface/myinterface.h b/tests/auto/cmake/test_moc_macro_target/interface/myinterface.h
index 3d5dbf98ef..3c18c9a10d 100644
--- a/tests/auto/cmake/test_moc_macro_target/interface/myinterface.h
+++ b/tests/auto/cmake/test_moc_macro_target/interface/myinterface.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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) 2013 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 MYINTERFACE_H
#define MYINTERFACE_H
diff --git a/tests/auto/cmake/test_moc_macro_target/main_gen_test.cpp b/tests/auto/cmake/test_moc_macro_target/main_gen_test.cpp
index 3e6c4acd4e..ef58aa025a 100644
--- a/tests/auto/cmake/test_moc_macro_target/main_gen_test.cpp
+++ b/tests/auto/cmake/test_moc_macro_target/main_gen_test.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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) 2013 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 <QObject>
diff --git a/tests/auto/cmake/test_moc_macro_target/main_wrap_test.cpp b/tests/auto/cmake/test_moc_macro_target/main_wrap_test.cpp
index 002422eec4..bf4b6193fe 100644
--- a/tests/auto/cmake/test_moc_macro_target/main_wrap_test.cpp
+++ b/tests/auto/cmake/test_moc_macro_target/main_wrap_test.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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) 2013 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 <QObject>
diff --git a/tests/auto/cmake/test_moc_macro_target/mywrapobject.h b/tests/auto/cmake/test_moc_macro_target/mywrapobject.h
index a4be007110..28030a5832 100644
--- a/tests/auto/cmake/test_moc_macro_target/mywrapobject.h
+++ b/tests/auto/cmake/test_moc_macro_target/mywrapobject.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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) 2013 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 MYWRAPOBJECT_H
#define MYWRAPOBJECT_H
diff --git a/tests/auto/cmake/test_multiple_find_package/CMakeLists.txt b/tests/auto/cmake/test_multiple_find_package/CMakeLists.txt
index 48864f2b22..1b50c204ca 100644
--- a/tests/auto/cmake/test_multiple_find_package/CMakeLists.txt
+++ b/tests/auto/cmake/test_multiple_find_package/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_multiple_find_package/main.cpp b/tests/auto/cmake/test_multiple_find_package/main.cpp
index 926dee98b3..820a550917 100644
--- a/tests/auto/cmake/test_multiple_find_package/main.cpp
+++ b/tests/auto/cmake/test_multiple_find_package/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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) 2013 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 <QtCore/QString>
diff --git a/tests/auto/cmake/test_multiple_find_package/subdir1/CMakeLists.txt b/tests/auto/cmake/test_multiple_find_package/subdir1/CMakeLists.txt
index 61a273424e..abf9abf8a7 100644
--- a/tests/auto/cmake/test_multiple_find_package/subdir1/CMakeLists.txt
+++ b/tests/auto/cmake/test_multiple_find_package/subdir1/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
find_package(Qt6Core REQUIRED)
diff --git a/tests/auto/cmake/test_opengl_lib/CMakeLists.txt b/tests/auto/cmake/test_opengl_lib/CMakeLists.txt
index 020d7fbf2a..b5672b4393 100644
--- a/tests/auto/cmake/test_opengl_lib/CMakeLists.txt
+++ b/tests/auto/cmake/test_opengl_lib/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_opengl_lib/main.cpp b/tests/auto/cmake/test_opengl_lib/main.cpp
index e3d9b6af15..b29d11f667 100644
--- a/tests/auto/cmake/test_opengl_lib/main.cpp
+++ b/tests/auto/cmake/test_opengl_lib/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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) 2013 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 <qglobal.h>
diff --git a/tests/auto/cmake/test_platform_defs_include/CMakeLists.txt b/tests/auto/cmake/test_platform_defs_include/CMakeLists.txt
index 34a22b056a..ab3a935894 100644
--- a/tests/auto/cmake/test_platform_defs_include/CMakeLists.txt
+++ b/tests/auto/cmake/test_platform_defs_include/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_platform_defs_include/main.cpp b/tests/auto/cmake/test_platform_defs_include/main.cpp
index fcfd3b4718..30d2e2065a 100644
--- a/tests/auto/cmake/test_platform_defs_include/main.cpp
+++ b/tests/auto/cmake/test_platform_defs_include/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 "qplatformdefs.h"
diff --git a/tests/auto/cmake/test_plugin_shared_static_flavor.cmake b/tests/auto/cmake/test_plugin_shared_static_flavor.cmake
index a906bfebbc..ffe5fb5447 100644
--- a/tests/auto/cmake/test_plugin_shared_static_flavor.cmake
+++ b/tests/auto/cmake/test_plugin_shared_static_flavor.cmake
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
_qt_internal_test_expect_pass(test_plugin_shared_static_flavor
TESTNAME test_plugin_flavor_static
BUILD_OPTIONS
diff --git a/tests/auto/cmake/test_plugin_shared_static_flavor/CMakeLists.txt b/tests/auto/cmake/test_plugin_shared_static_flavor/CMakeLists.txt
index 0a79038e8a..fda0c69d07 100644
--- a/tests/auto/cmake/test_plugin_shared_static_flavor/CMakeLists.txt
+++ b/tests/auto/cmake/test_plugin_shared_static_flavor/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(test_plugin_flavor)
diff --git a/tests/auto/cmake/test_plugins/CMakeLists.txt b/tests/auto/cmake/test_plugins/CMakeLists.txt
index 9870db9ce4..5b6c4eea4e 100644
--- a/tests/auto/cmake/test_plugins/CMakeLists.txt
+++ b/tests/auto/cmake/test_plugins/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_private_includes/CMakeLists.txt b/tests/auto/cmake/test_private_includes/CMakeLists.txt
index 402ae73def..d4ba8ab888 100644
--- a/tests/auto/cmake/test_private_includes/CMakeLists.txt
+++ b/tests/auto/cmake/test_private_includes/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_private_includes/main.cpp b/tests/auto/cmake/test_private_includes/main.cpp
index 83146dd7d9..6dc90fbae0 100644
--- a/tests/auto/cmake/test_private_includes/main.cpp
+++ b/tests/auto/cmake/test_private_includes/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 <QGuiApplication>
#include <QScreen>
diff --git a/tests/auto/cmake/test_private_targets/CMakeLists.txt b/tests/auto/cmake/test_private_targets/CMakeLists.txt
index f703b7af20..72e06b044c 100644
--- a/tests/auto/cmake/test_private_targets/CMakeLists.txt
+++ b/tests/auto/cmake/test_private_targets/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_private_targets/main.cpp b/tests/auto/cmake/test_private_targets/main.cpp
index 40dc4c243c..4566fd6ce6 100644
--- a/tests/auto/cmake/test_private_targets/main.cpp
+++ b/tests/auto/cmake/test_private_targets/main.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 <QGuiApplication>
diff --git a/tests/auto/cmake/test_qt_add_resources_rebuild/CMakeLists.txt b/tests/auto/cmake/test_qt_add_resources_rebuild/CMakeLists.txt
new file mode 100644
index 0000000000..e7b35b332f
--- /dev/null
+++ b/tests/auto/cmake/test_qt_add_resources_rebuild/CMakeLists.txt
@@ -0,0 +1,123 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_qt_add_resources_rebuild)
+
+set(test_project_source_dir "${CMAKE_CURRENT_SOURCE_DIR}/sample")
+set(test_project_build_dir "${CMAKE_CURRENT_BINARY_DIR}/build_sample")
+
+# Make sure that file paths are 'real' paths
+get_filename_component(test_project_source_dir "${test_project_source_dir}" REALPATH)
+get_filename_component(test_project_build_dir "${test_project_build_dir}" REALPATH)
+
+file(REMOVE_RECURSE "${test_project_build_dir}")
+file(MAKE_DIRECTORY "${test_project_build_dir}")
+
+# For access to _qt_internal_get_cmake_test_configure_options
+find_package(Qt6 COMPONENTS Core REQUIRED)
+include("${_Qt6CTestMacros}")
+
+set(indent " ")
+list(APPEND CMAKE_MESSAGE_INDENT "${indent}")
+
+function(configure_project)
+ message(STATUS "Configuring build")
+ _qt_internal_get_cmake_test_configure_options(option_list)
+ execute_process(COMMAND
+ "${CMAKE_COMMAND}"
+ "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH}"
+ "-G${CMAKE_GENERATOR}"
+ ${option_list}
+ -B "${test_project_build_dir}"
+ -S "${test_project_source_dir}"
+ RESULT_VARIABLE result
+ )
+ if(NOT result EQUAL 0)
+ message(FATAL_ERROR "Unable to configure sample project")
+ endif()
+endfunction()
+
+function(try_build)
+ message(STATUS "Building project")
+ execute_process(COMMAND
+ "${CMAKE_COMMAND}"
+ --build "${test_project_build_dir}"
+ RESULT_VARIABLE result
+ )
+ if(NOT result EQUAL 0)
+ message(FATAL_ERROR "Unable to build test project")
+ endif()
+endfunction()
+
+function(get_target_path out_var)
+ file(STRINGS "${test_project_build_dir}/targets.txt" targets)
+ list(GET targets 0 first_target_path)
+ message(STATUS "Built target is at '${first_target_path}'")
+ set(${out_var} "${first_target_path}" PARENT_SCOPE)
+endfunction()
+
+function(get_timestamp file_path out_var)
+ message(STATUS "Getting timestamp of built target.")
+ file(TIMESTAMP "${file_path}" value "%s")
+ set(${out_var} "${value}" PARENT_SCOPE)
+endfunction()
+
+function(sleep)
+ # Avoids issues with low resolution modification times (like HFS on macOS).
+ set(seconds 2)
+ message(STATUS "Sleeping for ${seconds} seconds.")
+ execute_process(COMMAND "${CMAKE_COMMAND}" -E sleep ${seconds})
+endfunction()
+
+function(touch_file)
+ set(input "input.ts")
+ set(input_path "${test_project_source_dir}/${input}")
+ message(STATUS "Touching ${input_path}")
+ file(TOUCH "${input_path}")
+endfunction()
+
+function(assert_timestamp_is_equal before after)
+ set(timestamps "\n${indent}Before TS: ${before}\n${indent} After TS: ${after}")
+ if("${after}" EQUAL "${before}")
+ message(STATUS "Target was not rebuilt. ${timestamps}")
+ else()
+ message(FATAL_ERROR "Target WAS rebuilt. ${timestamps}")
+ endif()
+endfunction()
+
+function(assert_timestamp_is_greater before after)
+ set(timestamps "\n${indent}Before TS: ${before}\n${indent} After TS: ${after}")
+ if("${after}" GREATER "${before}")
+ message(STATUS "Target was correctly rebuilt. ${timestamps}")
+ else()
+ message(FATAL_ERROR "Target was NOT rebuilt. ${timestamps}")
+ endif()
+endfunction()
+
+configure_project()
+try_build()
+get_target_path(target_path)
+
+# Make sure that a second build without changes doesn't rebuild the executable.
+get_timestamp("${target_path}" ts_1)
+sleep()
+try_build()
+get_timestamp("${target_path}" ts_2)
+assert_timestamp_is_equal("${ts_1}" "${ts_2}")
+
+# Touching the input file should cause rcc to rerun, then the compiler, then the linker,
+# and thus the executable timestamp should be updated.
+touch_file()
+try_build()
+get_timestamp("${target_path}" ts_3)
+assert_timestamp_is_greater("${ts_2}" "${ts_3}")
+
+# Check that building again doesn't rebuild the executable.
+sleep()
+try_build()
+get_timestamp("${target_path}" ts_4)
+assert_timestamp_is_equal("${ts_3}" "${ts_4}")
+
+list(POP_BACK CMAKE_MESSAGE_INDENT)
diff --git a/tests/auto/cmake/test_qt_add_resources_rebuild/sample/CMakeLists.txt b/tests/auto/cmake/test_qt_add_resources_rebuild/sample/CMakeLists.txt
new file mode 100644
index 0000000000..0a40a948c6
--- /dev/null
+++ b/tests/auto/cmake/test_qt_add_resources_rebuild/sample/CMakeLists.txt
@@ -0,0 +1,45 @@
+cmake_minimum_required(VERSION 3.16)
+project(sample LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core)
+
+set(source "${CMAKE_BINARY_DIR}/main.cpp")
+file(GENERATE OUTPUT "${source}" CONTENT "int main() { return 0; }")
+
+qt_add_executable(${PROJECT_NAME} ${source})
+
+# This is a poor man's implementation of qt_add_lupdate.
+set(input "${CMAKE_SOURCE_DIR}/input.ts")
+set(output "${CMAKE_BINARY_DIR}/output.qm")
+add_custom_command(
+ OUTPUT "${output}"
+ COMMAND ${CMAKE_COMMAND} -E copy "${input}" "${output}"
+ DEPENDS "${input}"
+ VERBATIM
+)
+
+# This is where the bug happened before. Adding the target dependency properties used the target
+# as an order-only dependency, instead of depending on the actual dependency file.
+set_source_files_properties("${output}"
+ PROPERTIES _qt_resource_target_dependency "output_target")
+
+add_custom_target(output_target
+ DEPENDS "${output}"
+)
+
+qt_add_resources(${PROJECT_NAME} "res"
+ PREFIX "/"
+ BASE "${CMAKE_CURRENT_BINARY_DIR}"
+ FILES "${output}"
+)
+
+# Write out the location of the binary so its timestamp can be checked by the driving parent
+# project.
+set(target_file_out "${CMAKE_BINARY_DIR}/targets.txt")
+add_custom_target(all_built ALL
+ COMMAND
+ ${CMAKE_COMMAND} -E echo "$<TARGET_FILE:${PROJECT_NAME}>" > "${target_file_out}"
+ VERBATIM
+)
+# Make sure the file path is written out after the executable is linked.
+add_dependencies(all_built ${PROJECT_NAME})
diff --git a/tests/auto/cmake/test_qt_add_resources_rebuild/sample/input.ts b/tests/auto/cmake/test_qt_add_resources_rebuild/sample/input.ts
new file mode 100644
index 0000000000..20a96e90c4
--- /dev/null
+++ b/tests/auto/cmake/test_qt_add_resources_rebuild/sample/input.ts
@@ -0,0 +1 @@
+bonk
diff --git a/tests/auto/cmake/test_qt_extract_metatypes/CMakeLists.txt b/tests/auto/cmake/test_qt_extract_metatypes/CMakeLists.txt
index 51d78dd833..26944b1192 100644
--- a/tests/auto/cmake/test_qt_extract_metatypes/CMakeLists.txt
+++ b/tests/auto/cmake/test_qt_extract_metatypes/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(test_qt_extract_metatypes VERSION 0.1 LANGUAGES CXX)
diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/CMakeLists.txt b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/CMakeLists.txt
index 88e51a0ed1..328f20aaab 100644
--- a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/CMakeLists.txt
+++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(qt_extract_metatypes_test_project VERSION 0.1 LANGUAGES CXX)
diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/MetaType.cpp b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/MetaType.cpp
index 1b1d060c6a..40fb1dffbe 100644
--- a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/MetaType.cpp
+++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/MetaType.cpp
@@ -1,29 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "MetaType.h"
diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/main.cpp b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/main.cpp
index 7c8b707b6e..b141c894ab 100644
--- a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/main.cpp
+++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 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/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmpty.h b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmpty.h
index aa76129a06..bcd7594d9a 100644
--- a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmpty.h
+++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmpty.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#pragma once
diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmptyWithComment.h b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmptyWithComment.h
index 5135ee098d..1c38ae2f5e 100644
--- a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmptyWithComment.h
+++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeEmptyWithComment.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#pragma once
diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECT.h b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECT.h
index 2fcaf3c1bb..104dd6d7a9 100644
--- a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECT.h
+++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECT.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#pragma once
#include <QObject>
diff --git a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECTandQ_PROPERTY.h b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECTandQ_PROPERTY.h
index 680e2a8982..f3a9ececb7 100644
--- a/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECTandQ_PROPERTY.h
+++ b/tests/auto/cmake/test_qt_extract_metatypes/test_qt_extract_metatypes_project/testdata/MetaTypeQ_OBJECTandQ_PROPERTY.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#pragma once
diff --git a/tests/auto/cmake/test_qt_manual_moc/CMakeLists.txt b/tests/auto/cmake/test_qt_manual_moc/CMakeLists.txt
new file mode 100644
index 0000000000..513995c4cf
--- /dev/null
+++ b/tests/auto/cmake/test_qt_manual_moc/CMakeLists.txt
@@ -0,0 +1,61 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+find_package(Qt6 ${PROJECT_VERSION} CONFIG REQUIRED COMPONENTS BuildInternals Core)
+
+set(CMAKE_AUTOMOC FALSE)
+
+qt_manual_moc(moc_files testclass.h
+ DEFINITIONS
+ -DMY_FIRST_DEF
+ MY_SECOND_DEF
+ -DMY_THIRD_DEF=1
+ MY_FOURTH_DEF=1
+)
+
+add_custom_target(verify_testclass ALL COMMAND ${CMAKE_COMMAND}
+ "-DMOC_ARGS=moc_testclass.cpp_parameters$<$<BOOL:$<CONFIG>>:_$<CONFIG>>"
+ "-DDEFINITIONS=MY_FIRST_DEF;MY_SECOND_DEF;MY_THIRD_DEF=1;MY_FOURTH_DEF=1"
+ -P "${CMAKE_CURRENT_SOURCE_DIR}/VerifyDefines.cmake"
+ VERBATIM
+)
+
+add_library(MyInterfaceLib INTERFACE)
+target_compile_definitions(MyInterfaceLib INTERFACE -DMY_TRANSITIVE_DEF=1)
+
+add_library(MyLib SHARED testclass1.h testclass.cpp)
+target_link_libraries(MyLib PRIVATE Qt6::Core MyInterfaceLib)
+target_compile_definitions(MyLib PRIVATE
+ -DMY_FIRST_DEF
+ MY_SECOND_DEF
+ -DMY_THIRD_DEF=1
+ MY_FOURTH_DEF=1
+)
+
+add_library(MyLib2 SHARED testclass1.h testclass.cpp)
+target_link_libraries(MyLib2 PRIVATE Qt6::Core)
+target_compile_definitions(MyLib2 PRIVATE
+ -DMY_FOREIGN_DEF
+)
+
+qt_manual_moc(moc_files testclass1.h TARGETS MyLib MyLib2)
+target_sources(MyLib PRIVATE ${moc_files})
+target_sources(MyLib2 PRIVATE ${moc_files})
+
+string(JOIN ";" expected
+ "MY_FIRST_DEF"
+ "MY_SECOND_DEF"
+ "MY_THIRD_DEF=1"
+ "MY_FOURTH_DEF=1"
+ "MY_TRANSITIVE_DEF=1"
+ "MY_FOREIGN_DEF"
+)
+
+add_custom_target(verify_testclass1 ALL COMMAND ${CMAKE_COMMAND}
+ "-DMOC_ARGS=moc_testclass1.cpp_parameters$<$<BOOL:$<CONFIG>>:_$<CONFIG>>"
+ "-DDEFINITIONS=${expected}"
+ -P "${CMAKE_CURRENT_SOURCE_DIR}/VerifyDefines.cmake"
+ VERBATIM
+)
diff --git a/tests/auto/cmake/test_qt_manual_moc/VerifyDefines.cmake b/tests/auto/cmake/test_qt_manual_moc/VerifyDefines.cmake
new file mode 100644
index 0000000000..b3acedb014
--- /dev/null
+++ b/tests/auto/cmake/test_qt_manual_moc/VerifyDefines.cmake
@@ -0,0 +1,30 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+if(NOT DEFINITIONS)
+ message(FATAL_ERROR "No definitions are provided to test")
+endif()
+
+if(NOT MOC_ARGS)
+ message(FATAL_ERROR "The moc RSP file is not specified")
+endif()
+
+file(READ "${MOC_ARGS}" moc_args_data)
+
+string(REPLACE "\n" ";" moc_args_data "${moc_args_data}")
+
+foreach(def IN LISTS DEFINITIONS)
+ set(found FALSE)
+ foreach(data IN LISTS moc_args_data)
+ if(data MATCHES "^(-D)?${def}")
+ set(found TRUE)
+ break()
+ endif()
+ endforeach()
+ if(NOT found)
+ message(FATAL_ERROR "The ${def} is missing in the moc argument list:\n${moc_args_data}")
+ endif()
+endforeach()
+
diff --git a/tests/auto/cmake/test_qt_manual_moc/testclass.cpp b/tests/auto/cmake/test_qt_manual_moc/testclass.cpp
new file mode 100644
index 0000000000..5323e18136
--- /dev/null
+++ b/tests/auto/cmake/test_qt_manual_moc/testclass.cpp
@@ -0,0 +1,8 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include "testclass.h"
+
+TestClass::TestClass(QObject *parent) : QObject(parent)
+{
+
+}
diff --git a/tests/auto/cmake/test_qt_manual_moc/testclass.h b/tests/auto/cmake/test_qt_manual_moc/testclass.h
new file mode 100644
index 0000000000..84fc656f1a
--- /dev/null
+++ b/tests/auto/cmake/test_qt_manual_moc/testclass.h
@@ -0,0 +1,17 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef TESTCLASS_H
+#define TESTCLASS_H
+
+#include <QObject>
+
+class TestClass : public QObject
+{
+ Q_OBJECT
+
+public:
+ TestClass(QObject *parent = nullptr);
+};
+
+#endif // TESTCLASS_H
diff --git a/tests/auto/cmake/test_qt_manual_moc/testclass1.h b/tests/auto/cmake/test_qt_manual_moc/testclass1.h
new file mode 100644
index 0000000000..84fc656f1a
--- /dev/null
+++ b/tests/auto/cmake/test_qt_manual_moc/testclass1.h
@@ -0,0 +1,17 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef TESTCLASS_H
+#define TESTCLASS_H
+
+#include <QObject>
+
+class TestClass : public QObject
+{
+ Q_OBJECT
+
+public:
+ TestClass(QObject *parent = nullptr);
+};
+
+#endif // TESTCLASS_H
diff --git a/tests/auto/cmake/test_qtmainwin_library/CMakeLists.txt b/tests/auto/cmake/test_qtmainwin_library/CMakeLists.txt
index 387fbd81f7..4719d9c332 100644
--- a/tests/auto/cmake/test_qtmainwin_library/CMakeLists.txt
+++ b/tests/auto/cmake/test_qtmainwin_library/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_qtmainwin_library/myobject.cpp b/tests/auto/cmake/test_qtmainwin_library/myobject.cpp
index ea4ebbbe3f..bb06a5bb8b 100644
--- a/tests/auto/cmake/test_qtmainwin_library/myobject.cpp
+++ b/tests/auto/cmake/test_qtmainwin_library/myobject.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 "myobject.h"
diff --git a/tests/auto/cmake/test_qtmainwin_library/myobject.h b/tests/auto/cmake/test_qtmainwin_library/myobject.h
index df0e377a60..90bb75640f 100644
--- a/tests/auto/cmake/test_qtmainwin_library/myobject.h
+++ b/tests/auto/cmake/test_qtmainwin_library/myobject.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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
diff --git a/tests/auto/cmake/test_resource_without_obj_lib/CMakeLists.txt b/tests/auto/cmake/test_resource_without_obj_lib/CMakeLists.txt
new file mode 100644
index 0000000000..16563141f4
--- /dev/null
+++ b/tests/auto/cmake/test_resource_without_obj_lib/CMakeLists.txt
@@ -0,0 +1,33 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_resource_without_obj_lib)
+
+if (EXISTS "${CMAKE_CURRENT_LIST_DIR}/FindPackageHints.cmake")
+ include("${CMAKE_CURRENT_LIST_DIR}/FindPackageHints.cmake")
+endif()
+
+find_package(Qt6 REQUIRED
+ COMPONENTS Core Test
+ HINTS ${Qt6Tests_PREFIX_PATH}
+)
+
+qt6_add_library(helper_lib STATIC helper_lib.cpp)
+qt6_add_resources(helper_lib "helper_res" FILES resource.txt PREFIX "/")
+
+# Link to Core, to ensure both the helper_lib and the main executable
+# inherit the QT_NAMESPACE if it is set, otherwise we get undefined
+# linker errors due to the mismatch in symbol names.
+target_link_libraries(helper_lib PRIVATE Qt6::Core)
+
+set(CMAKE_AUTOMOC ON)
+
+qt6_add_executable(test_resource_without_obj_lib main.cpp)
+target_link_libraries(test_resource_without_obj_lib PRIVATE Qt6::Core Qt6::Test)
+
+# Link against the library file and not the target, so that we can confirm
+# the ability to manually initialize the resource via Q_INIT_RESOURCE.
+target_link_libraries(test_resource_without_obj_lib PRIVATE $<TARGET_FILE:helper_lib>)
+
diff --git a/tests/auto/cmake/test_resource_without_obj_lib/helper_lib.cpp b/tests/auto/cmake/test_resource_without_obj_lib/helper_lib.cpp
new file mode 100644
index 0000000000..cd21e6c476
--- /dev/null
+++ b/tests/auto/cmake/test_resource_without_obj_lib/helper_lib.cpp
@@ -0,0 +1,4 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+void nothing() {}
diff --git a/tests/auto/cmake/test_resource_without_obj_lib/main.cpp b/tests/auto/cmake/test_resource_without_obj_lib/main.cpp
new file mode 100644
index 0000000000..bffbf81b87
--- /dev/null
+++ b/tests/auto/cmake/test_resource_without_obj_lib/main.cpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/qtresource.h>
+#include <QtTest/QtTest>
+
+class TestManualResourceInit : public QObject
+{
+ Q_OBJECT
+private slots:
+ void initTestCase();
+ void resourceExistsAfterManualInit();
+};
+
+void TestManualResourceInit::initTestCase()
+{
+ // Manually initialize the resource like we used to do it in qt5 + qmake times.
+ Q_INIT_RESOURCE(helper_res);
+}
+
+void TestManualResourceInit::resourceExistsAfterManualInit()
+{
+ QVERIFY(QFile::exists(":/resource.txt"));
+}
+
+QTEST_MAIN(TestManualResourceInit)
+#include "main.moc"
+
diff --git a/tests/auto/cmake/test_resource_without_obj_lib/resource.txt b/tests/auto/cmake/test_resource_without_obj_lib/resource.txt
new file mode 100644
index 0000000000..7804a324a4
--- /dev/null
+++ b/tests/auto/cmake/test_resource_without_obj_lib/resource.txt
@@ -0,0 +1 @@
+Test resource
diff --git a/tests/auto/cmake/test_standalone_test/CMakeLists.txt b/tests/auto/cmake/test_standalone_test/CMakeLists.txt
new file mode 100644
index 0000000000..169d824c88
--- /dev/null
+++ b/tests/auto/cmake/test_standalone_test/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(tststandalone_test LANGUAGES CXX)
+find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+
+qt_internal_add_test(tst_standalone_test
+ GUI
+ SOURCES
+ tst_standalone_test.cpp
+ LIBRARIES
+ Qt::Gui
+)
diff --git a/tests/auto/cmake/test_standalone_test/tst_standalone_test.cpp b/tests/auto/cmake/test_standalone_test/tst_standalone_test.cpp
new file mode 100644
index 0000000000..fa533602ec
--- /dev/null
+++ b/tests/auto/cmake/test_standalone_test/tst_standalone_test.cpp
@@ -0,0 +1,22 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QWindow>
+
+class tst_standalone_test : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void testLaunched()
+ {
+ QWindow w;
+ w.show();
+ QVERIFY(QTest::qWaitForWindowActive(&w));
+ }
+};
+
+QTEST_MAIN(tst_standalone_test)
+
+#include "tst_standalone_test.moc"
diff --git a/tests/auto/cmake/test_static_resources/.cmake.conf b/tests/auto/cmake/test_static_resources/.cmake.conf
index 4e73b3d607..10bc1fd407 100644
--- a/tests/auto/cmake/test_static_resources/.cmake.conf
+++ b/tests/auto/cmake/test_static_resources/.cmake.conf
@@ -1 +1 @@
-set(QT_REPO_MODULE_VERSION "6.2.0")
+set(QT_REPO_MODULE_VERSION "6.8.0")
diff --git a/tests/auto/cmake/test_static_resources/CMakeLists.txt b/tests/auto/cmake/test_static_resources/CMakeLists.txt
index b159f43b78..e3cab9cf4a 100644
--- a/tests/auto/cmake/test_static_resources/CMakeLists.txt
+++ b/tests/auto/cmake/test_static_resources/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
include(.cmake.conf)
@@ -10,6 +13,7 @@ project(TestStaticResources
)
find_package(Qt6 COMPONENTS Core BuildInternals Test CONFIG REQUIRED)
+qt_internal_project_setup()
qt_build_repo_begin()
@@ -18,4 +22,5 @@ add_subdirectory(mock_static_resources1)
add_subdirectory(test_init_resources_static_plugin)
add_subdirectory(test_static_resources_propagation)
+qt_build_repo_post_process()
qt_build_repo_end()
diff --git a/tests/auto/cmake/test_static_resources/mock_static_resources1/CMakeLists.txt b/tests/auto/cmake/test_static_resources/mock_static_resources1/CMakeLists.txt
index 973f8b3279..f866f0af46 100644
--- a/tests/auto/cmake/test_static_resources/mock_static_resources1/CMakeLists.txt
+++ b/tests/auto/cmake/test_static_resources/mock_static_resources1/CMakeLists.txt
@@ -1,4 +1,8 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_module(MockStaticResources1
+ NO_UNITY_BUILD
STATIC
PLUGIN_TYPES mockstaticresources
SOURCES
diff --git a/tests/auto/cmake/test_static_resources/mock_static_resources1/dummy.cpp b/tests/auto/cmake/test_static_resources/mock_static_resources1/dummy.cpp
index 47a48945a2..b6c23a82eb 100644
--- a/tests/auto/cmake/test_static_resources/mock_static_resources1/dummy.cpp
+++ b/tests/auto/cmake/test_static_resources/mock_static_resources1/dummy.cpp
@@ -1,29 +1,4 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
void dummy() { }
diff --git a/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/CMakeLists.txt b/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/CMakeLists.txt
index 99cb4a286e..dec5588a6d 100644
--- a/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/CMakeLists.txt
+++ b/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/CMakeLists.txt
@@ -1,4 +1,8 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_plugin(TestInitResourcesStaticPlugin STATIC
+ NO_UNITY_BUILD
OUTPUT_NAME
testinitresourcesstaticplugin
PLUGIN_TYPE mockstaticresources
diff --git a/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/pluginmain.cpp b/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/pluginmain.cpp
index 992c948e55..a95e54ee4f 100644
--- a/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/pluginmain.cpp
+++ b/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/pluginmain.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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: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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/qfile.h>
#include <QtCore/qdebug.h>
diff --git a/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/test_init_resources_static_plugin.cpp b/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/test_init_resources_static_plugin.cpp
index 73452258e4..2067b8c920 100644
--- a/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/test_init_resources_static_plugin.cpp
+++ b/tests/auto/cmake/test_static_resources/test_init_resources_static_plugin/test_init_resources_static_plugin.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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: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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtCore/qfile.h>
diff --git a/tests/auto/cmake/test_static_resources/test_static_resources_propagation/CMakeLists.txt b/tests/auto/cmake/test_static_resources/test_static_resources_propagation/CMakeLists.txt
index 44d4839084..b802323cfc 100644
--- a/tests/auto/cmake/test_static_resources/test_static_resources_propagation/CMakeLists.txt
+++ b/tests/auto/cmake/test_static_resources/test_static_resources_propagation/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
# TODO: Revisit which of these tests makes sense to keep now that we depend on CMake 3.21 to
# properly place object libraries object files on the link line.
# See QTBUG-95601
@@ -8,6 +11,7 @@
# Add a dummy library that links the static "Qt" module containing resources
file(GENERATE OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp" CONTENT "void dummy() { }")
add_library(dummy STATIC "${CMAKE_CURRENT_BINARY_DIR}/dummy.cpp")
+set_target_properties(dummy PROPERTIES UNITY_BUILD OFF)
target_link_libraries(dummy PRIVATE MockStaticResources1)
# Add the executable using qt_add_executable that needs to initialize the propagated resources.
@@ -16,6 +20,7 @@ if(CMAKE_VERSION VERSION_GREATER_EQUAL 3.19)
qt_add_executable(test_static_resources_propagation main.cpp)
set_target_properties(test_static_resources_propagation PROPERTIES
AUTOMOC TRUE
+ UNITY_BUILD OFF
)
target_link_libraries(test_static_resources_propagation
PRIVATE
@@ -34,6 +39,7 @@ endif()
qt_add_executable(test_static_resources_propagation_manual_finalize main.cpp MANUAL_FINALIZATION)
set_target_properties(test_static_resources_propagation_manual_finalize PROPERTIES
AUTOMOC TRUE
+ UNITY_BUILD OFF
)
target_link_libraries(test_static_resources_propagation_manual_finalize
PRIVATE
@@ -51,6 +57,7 @@ add_test(NAME test_static_resources_propagation_manual_finalize
add_executable(test_static_resources_propagation_non_qt main.cpp)
set_target_properties(test_static_resources_propagation_non_qt PROPERTIES
AUTOMOC TRUE
+ UNITY_BUILD OFF
)
target_link_libraries(test_static_resources_propagation_non_qt
PRIVATE
@@ -73,6 +80,7 @@ if(NOT link_order_matters)
add_executable(test_static_resources_propagation_non_ld main.cpp)
set_target_properties(test_static_resources_propagation_non_ld PROPERTIES
AUTOMOC TRUE
+ UNITY_BUILD OFF
)
target_link_libraries(test_static_resources_propagation_non_ld
PRIVATE
@@ -120,6 +128,7 @@ if(POLICY CMP0099)
add_executable(test_static_resources_propagation_cmp0099_old_finalize main.cpp)
set_target_properties(test_static_resources_propagation_cmp0099_old_finalize PROPERTIES
AUTOMOC TRUE
+ UNITY_BUILD OFF
)
target_link_libraries(test_static_resources_propagation_cmp0099_old_finalize
PRIVATE
@@ -139,6 +148,7 @@ if(POLICY CMP0099)
add_executable(test_static_resources_propagation_cmp0099_new main.cpp)
set_target_properties(test_static_resources_propagation_cmp0099_new PROPERTIES
AUTOMOC TRUE
+ UNITY_BUILD OFF
)
target_link_libraries(test_static_resources_propagation_cmp0099_new
PRIVATE
@@ -154,6 +164,7 @@ if(POLICY CMP0099)
add_executable(test_static_resources_propagation_cmp0099_new_genex main.cpp)
set_target_properties(test_static_resources_propagation_cmp0099_new_genex PROPERTIES
AUTOMOC TRUE
+ UNITY_BUILD OFF
)
target_link_libraries(test_static_resources_propagation_cmp0099_new_genex
PRIVATE
diff --git a/tests/auto/cmake/test_static_resources/test_static_resources_propagation/main.cpp b/tests/auto/cmake/test_static_resources/test_static_resources_propagation/main.cpp
index 4dee8eb0c7..c5d5312eb8 100644
--- a/tests/auto/cmake/test_static_resources/test_static_resources_propagation/main.cpp
+++ b/tests/auto/cmake/test_static_resources/test_static_resources_propagation/main.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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: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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QtTest>
#include <QtCore/qfile.h>
diff --git a/tests/auto/cmake/test_testlib_definitions/CMakeLists.txt b/tests/auto/cmake/test_testlib_definitions/CMakeLists.txt
index b6ac6434e8..3c83af7e0a 100644
--- a/tests/auto/cmake/test_testlib_definitions/CMakeLists.txt
+++ b/tests/auto/cmake/test_testlib_definitions/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_testlib_definitions/core_only/CMakeLists.txt b/tests/auto/cmake/test_testlib_definitions/core_only/CMakeLists.txt
index cc68be18b8..872f291eeb 100644
--- a/tests/auto/cmake/test_testlib_definitions/core_only/CMakeLists.txt
+++ b/tests/auto/cmake/test_testlib_definitions/core_only/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
project(core_only)
diff --git a/tests/auto/cmake/test_testlib_definitions/gui/CMakeLists.txt b/tests/auto/cmake/test_testlib_definitions/gui/CMakeLists.txt
index 528ec7dc4e..737de2c95f 100644
--- a/tests/auto/cmake/test_testlib_definitions/gui/CMakeLists.txt
+++ b/tests/auto/cmake/test_testlib_definitions/gui/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
project(gui)
diff --git a/tests/auto/cmake/test_testlib_definitions/main.cpp b/tests/auto/cmake/test_testlib_definitions/main.cpp
index dce6db51ed..9452adb817 100644
--- a/tests/auto/cmake/test_testlib_definitions/main.cpp
+++ b/tests/auto/cmake/test_testlib_definitions/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 <QObject>
#include <QTest>
diff --git a/tests/auto/cmake/test_testlib_definitions/widgets/CMakeLists.txt b/tests/auto/cmake/test_testlib_definitions/widgets/CMakeLists.txt
index 0dbf9139e6..5aae260fa8 100644
--- a/tests/auto/cmake/test_testlib_definitions/widgets/CMakeLists.txt
+++ b/tests/auto/cmake/test_testlib_definitions/widgets/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
project(widgets)
diff --git a/tests/auto/cmake/test_testlib_no_link_gui/CMakeLists.txt b/tests/auto/cmake/test_testlib_no_link_gui/CMakeLists.txt
index cc126ab87f..2515f61d05 100644
--- a/tests/auto/cmake/test_testlib_no_link_gui/CMakeLists.txt
+++ b/tests/auto/cmake/test_testlib_no_link_gui/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_testlib_no_link_widgets/CMakeLists.txt b/tests/auto/cmake/test_testlib_no_link_widgets/CMakeLists.txt
index b88ad60d44..89965032b2 100644
--- a/tests/auto/cmake/test_testlib_no_link_widgets/CMakeLists.txt
+++ b/tests/auto/cmake/test_testlib_no_link_widgets/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_umbrella_config/CMakeLists.txt b/tests/auto/cmake/test_umbrella_config/CMakeLists.txt
index a7c31971fb..624374b8b2 100644
--- a/tests/auto/cmake/test_umbrella_config/CMakeLists.txt
+++ b/tests/auto/cmake/test_umbrella_config/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_umbrella_config/components_found/CMakeLists.txt b/tests/auto/cmake/test_umbrella_config/components_found/CMakeLists.txt
index 999aaccdd2..7341c9ab19 100644
--- a/tests/auto/cmake/test_umbrella_config/components_found/CMakeLists.txt
+++ b/tests/auto/cmake/test_umbrella_config/components_found/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
# The module finds its dependencies
find_package(Qt6 6.0.0
diff --git a/tests/auto/cmake/test_umbrella_config/components_not_found/CMakeLists.txt b/tests/auto/cmake/test_umbrella_config/components_not_found/CMakeLists.txt
index aa56559c8f..dee3edb3fd 100644
--- a/tests/auto/cmake/test_umbrella_config/components_not_found/CMakeLists.txt
+++ b/tests/auto/cmake/test_umbrella_config/components_not_found/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
# The module finds its dependencies
find_package(Qt6
diff --git a/tests/auto/cmake/test_versionless_targets/CMakeLists.txt b/tests/auto/cmake/test_versionless_targets/CMakeLists.txt
index 278586fb1d..1afcaa6a93 100644
--- a/tests/auto/cmake/test_versionless_targets/CMakeLists.txt
+++ b/tests/auto/cmake/test_versionless_targets/CMakeLists.txt
@@ -1,23 +1,103 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(versionless_targets)
-set(QT_NO_CREATE_VERSIONLESS_TARGETS ON)
+function(check_versionless_targets)
+ set(known_interface_properties
+ QT_MAJOR_VERSION
+ AUTOMOC_MACRO_NAMES
+ AUTOUIC_OPTIONS
+ COMPILE_DEFINITIONS
+ COMPILE_FEATURES
+ COMPILE_OPTIONS
+ CXX_MODULE_SETS
+ HEADER_SETS
+ HEADER_SETS_TO_VERIFY
+ INCLUDE_DIRECTORIES
+ LINK_DEPENDS
+ LINK_DIRECTORIES
+ LINK_LIBRARIES
+ LINK_LIBRARIES_DIRECT
+ LINK_LIBRARIES_DIRECT_EXCLUDE
+ LINK_OPTIONS
+ POSITION_INDEPENDENT_CODE
+ PRECOMPILE_HEADERS
+ SOURCES
+ SYSTEM_INCLUDE_DIRECTORIES
+ )
+
+ set(known_qt_exported_properties
+ MODULE_PLUGIN_TYPES
+ QT_DISABLED_PRIVATE_FEATURES
+ QT_DISABLED_PUBLIC_FEATURES
+ QT_ENABLED_PRIVATE_FEATURES
+ QT_ENABLED_PUBLIC_FEATURES
+ QT_QMAKE_PRIVATE_CONFIG
+ QT_QMAKE_PUBLIC_CONFIG
+ QT_QMAKE_PUBLIC_QT_CONFIG
+ _qt_config_module_name
+ _qt_is_public_module
+ _qt_module_has_headers
+ _qt_module_has_private_headers
+ _qt_module_has_public_headers
+ _qt_module_has_qpa_headers
+ _qt_module_has_rhi_headers
+ _qt_module_include_name
+ _qt_module_interface_name
+ _qt_package_name
+ _qt_package_version
+ _qt_private_module_target_name
+ )
-find_package(Qt6Core REQUIRED)
+ foreach(prop ${known_interface_properties})
+ set(versionless_prop "")
+ set(versioned_prop "")
+ get_target_property(versionless_prop Qt::Core INTERFACE_${prop})
+ get_target_property(versioned_prop Qt6::Core INTERFACE_${prop})
+ if(NOT versionless_prop AND NOT versioned_prop)
+ continue()
+ endif()
-if (NOT TARGET Qt6::Core)
- message(SEND_ERROR "Qt6::Core target not defined!")
-endif()
+ if(NOT "${versionless_prop}" STREQUAL "${versioned_prop}")
+ message(SEND_ERROR "INTERFACE_${prop} doesn't match versionless ${versionless_prop}"
+ " versioned ${versioned_prop}")
+ endif()
+ endforeach()
-if (TARGET Qt::Core)
- message(SEND_ERROR "Qt::Core target defined despite QT_NO_CREATE_VERSIONLESS_TARGETS!")
-endif()
+ foreach(prop ${known_qt_exported_properties})
+ set(versionless_prop "")
+ set(versioned_prop "")
+ get_target_property(versionless_prop Qt::Core ${prop})
+ get_target_property(versioned_prop Qt6::Core ${prop})
+ if(NOT versionless_prop AND NOT versioned_prop)
+ continue()
+ endif()
-set(QT_NO_CREATE_VERSIONLESS_TARGETS OFF)
+ if(NOT "${versionless_prop}" STREQUAL "${versioned_prop}")
+ message(SEND_ERROR "${prop} doesn't match versionless ${versionless_prop}"
+ " versioned ${versioned_prop}")
+ endif()
+ endforeach()
-find_package(Qt6Core REQUIRED)
+ foreach(conf "" _RELEASE _DEBUG _RELWITHDEBINFO _MINSIZEREL)
+ set(versionless_prop "")
+ set(versioned_prop "")
+ get_target_property(versionless_prop Qt::Core IMPORTED_LOCATION${conf})
+ get_target_property(versioned_prop Qt6::Core IMPORTED_LOCATION${conf})
+ if(NOT versionless_prop AND NOT versioned_prop)
+ continue()
+ endif()
+ if(NOT "${versionless_prop}" STREQUAL "${versioned_prop}")
+ message(SEND_ERROR "IMPORTED_LOCATION${conf} doesn't match versionless ${versionless_prop}"
+ " versioned ${versioned_prop}")
+ endif()
+ endforeach()
+endfunction()
-if (NOT TARGET Qt::Core)
- message(SEND_ERROR "Qt::Core target not defined!")
-endif()
+add_subdirectory(default)
+add_subdirectory(force_off)
+add_subdirectory(force_on)
+add_subdirectory(force_old)
diff --git a/tests/auto/cmake/test_versionless_targets/default/CMakeLists.txt b/tests/auto/cmake/test_versionless_targets/default/CMakeLists.txt
new file mode 100644
index 0000000000..a8757607cf
--- /dev/null
+++ b/tests/auto/cmake/test_versionless_targets/default/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+message("Test default creating of versionless targets")
+find_package(Qt6Core REQUIRED)
+
+if(NOT TARGET Qt6::Core)
+ message(SEND_ERROR "Qt6::Core target not defined!")
+endif()
+
+if(NOT TARGET Qt::Core)
+ message(SEND_ERROR "Qt::Core target not defined!")
+endif()
+
+check_versionless_targets()
diff --git a/tests/auto/cmake/test_versionless_targets/force_off/CMakeLists.txt b/tests/auto/cmake/test_versionless_targets/force_off/CMakeLists.txt
new file mode 100644
index 0000000000..247b1b8c27
--- /dev/null
+++ b/tests/auto/cmake/test_versionless_targets/force_off/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+message("Test disabled versionless targets")
+
+set(QT_NO_CREATE_VERSIONLESS_TARGETS ON)
+
+find_package(Qt6Core REQUIRED)
+
+if(NOT TARGET Qt6::Core)
+ message(SEND_ERROR "Qt6::Core target not defined!")
+endif()
+
+if(TARGET Qt::Core)
+ message(SEND_ERROR "Qt::Core target defined despite QT_NO_CREATE_VERSIONLESS_TARGETS!")
+endif()
diff --git a/tests/auto/cmake/test_versionless_targets/force_old/CMakeLists.txt b/tests/auto/cmake/test_versionless_targets/force_old/CMakeLists.txt
new file mode 100644
index 0000000000..9e83fec7b3
--- /dev/null
+++ b/tests/auto/cmake/test_versionless_targets/force_old/CMakeLists.txt
@@ -0,0 +1,21 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+message("Test force old versionless targets")
+
+set(QT_USE_OLD_VERSION_LESS_TARGETS ON)
+
+find_package(Qt6Core REQUIRED)
+
+if(NOT TARGET Qt6::Core)
+ message(SEND_ERROR "Qt6::Core target not defined!")
+endif()
+
+if(NOT TARGET Qt::Core)
+ message(SEND_ERROR "Qt::Core target not defined!")
+endif()
+
+check_versionless_targets()
+
diff --git a/tests/auto/cmake/test_versionless_targets/force_on/CMakeLists.txt b/tests/auto/cmake/test_versionless_targets/force_on/CMakeLists.txt
new file mode 100644
index 0000000000..b3d7596143
--- /dev/null
+++ b/tests/auto/cmake/test_versionless_targets/force_on/CMakeLists.txt
@@ -0,0 +1,20 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+message("Test enabled versionless targets")
+
+set(QT_NO_CREATE_VERSIONLESS_TARGETS OFF)
+
+find_package(Qt6Core REQUIRED)
+
+if(NOT TARGET Qt6::Core)
+ message(SEND_ERROR "Qt6::Core target not defined!")
+endif()
+
+if(NOT TARGET Qt::Core)
+ message(SEND_ERROR "Qt::Core target not defined!")
+endif()
+
+check_versionless_targets()
diff --git a/tests/auto/cmake/test_widgets_app_deployment/CMakeLists.txt b/tests/auto/cmake/test_widgets_app_deployment/CMakeLists.txt
new file mode 100644
index 0000000000..9457278e12
--- /dev/null
+++ b/tests/auto/cmake/test_widgets_app_deployment/CMakeLists.txt
@@ -0,0 +1,74 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(deployment_api)
+enable_testing()
+
+find_package(Qt6 COMPONENTS REQUIRED Widgets Test)
+
+qt6_standard_project_setup()
+
+function(create_test_executable target)
+ cmake_parse_arguments(arg "" "" "" ${ARGN})
+
+ if(CMAKE_VERSION VERSION_LESS "3.19")
+ qt_add_executable(${target} MANUAL_FINALIZATION main.cpp)
+ else()
+ qt_add_executable(${target} main.cpp)
+ endif()
+
+ set_target_properties(${target} PROPERTIES
+ # We explicitly don't set WIN32_EXECUTABLE to ensure we see errors from stderr when
+ # something fails and not having to use DebugView.
+
+ MACOSX_BUNDLE TRUE
+ )
+ target_link_libraries(${target} PRIVATE Qt::Widgets Qt::Test)
+
+ install(TARGETS ${target}
+ BUNDLE DESTINATION .
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+ )
+
+ qt_generate_deploy_app_script(
+ TARGET ${target}
+ OUTPUT_SCRIPT deploy_script
+ # Don't fail at configure time on unsupported platforms
+ NO_UNSUPPORTED_PLATFORM_ERROR
+ )
+ install(SCRIPT ${deploy_script})
+
+ if(CMAKE_VERSION VERSION_LESS "3.19")
+ qt_finalize_target(${target})
+ endif()
+
+ if(APPLE AND NOT IOS)
+ set(installed_app_location "${CMAKE_INSTALL_PREFIX}/${target}.app/Contents/MacOS/${target}")
+ elseif(WIN32)
+ set(installed_app_location "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${target}.exe")
+ elseif(UNIX AND NOT APPLE AND NOT ANDROID AND NOT CMAKE_CROSSCOMPILING)
+ set(installed_app_location "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}/${target}")
+ endif()
+
+ # There's no nice way to get the location of an installed binary, so we need to construct
+ # the binary install path by hand, somewhat similar to how it's done in
+ # the implementation of qt_deploy_runtime_dependencies.
+ # On unsupported deployment platforms, either the install_ test will fail not finding
+ # the location of the app (because we do not set a installed_app_location value)
+ # or the run_deployed_ test will fail because we didn't deploy the runtime dependencies.
+ # When support for additional platforms is added, these locations will have to be augmented.
+ add_test(install_${target} "${CMAKE_COMMAND}" --install .)
+ set_tests_properties(install_${target} PROPERTIES FIXTURES_SETUP deploy_step)
+ add_test(NAME run_deployed_${target}
+ COMMAND "${installed_app_location}"
+ # Make sure that we don't use the default working directory which is
+ # CMAKE_CURRENT_BINARY_DIR because on Windows the loader might pick up dlls
+ # from the working directory instead of the installed app dir, if the dll is
+ # missing in the app dir.
+ WORKING_DIRECTORY "${CMAKE_INSTALL_PREFIX}")
+ set_tests_properties(run_deployed_${target} PROPERTIES FIXTURES_REQUIRED deploy_step)
+endfunction()
+
+create_test_executable(App)
+
diff --git a/tests/auto/cmake/test_widgets_app_deployment/main.cpp b/tests/auto/cmake/test_widgets_app_deployment/main.cpp
new file mode 100644
index 0000000000..939cd72380
--- /dev/null
+++ b/tests/auto/cmake/test_widgets_app_deployment/main.cpp
@@ -0,0 +1,22 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include <QtTest>
+#include <QMainWindow>
+
+class test_widgets_app_deployment : public QObject
+{
+ Q_OBJECT
+private slots:
+ void canRun();
+};
+
+void test_widgets_app_deployment::canRun()
+{
+ QMainWindow mw;
+ mw.show();
+ QVERIFY(QTest::qWaitForWindowActive(&mw));
+}
+
+QTEST_MAIN(test_widgets_app_deployment)
+
+#include "main.moc"
diff --git a/tests/auto/cmake/test_wrap_cpp_and_resources/CMakeLists.txt b/tests/auto/cmake/test_wrap_cpp_and_resources/CMakeLists.txt
index 8452bf8c91..da413168ff 100644
--- a/tests/auto/cmake/test_wrap_cpp_and_resources/CMakeLists.txt
+++ b/tests/auto/cmake/test_wrap_cpp_and_resources/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_wrap_cpp_and_resources/myobject.cpp b/tests/auto/cmake/test_wrap_cpp_and_resources/myobject.cpp
index c4889d0882..3adda87348 100644
--- a/tests/auto/cmake/test_wrap_cpp_and_resources/myobject.cpp
+++ b/tests/auto/cmake/test_wrap_cpp_and_resources/myobject.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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 "myobject.h"
diff --git a/tests/auto/cmake/test_wrap_cpp_and_resources/myobject.h b/tests/auto/cmake/test_wrap_cpp_and_resources/myobject.h
index c5b32c680d..87d7bfa3df 100644
--- a/tests/auto/cmake/test_wrap_cpp_and_resources/myobject.h
+++ b/tests/auto/cmake/test_wrap_cpp_and_resources/myobject.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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
diff --git a/tests/auto/cmake/test_wrap_cpp_moc/CMakeLists.txt b/tests/auto/cmake/test_wrap_cpp_moc/CMakeLists.txt
new file mode 100644
index 0000000000..c00a9d83c5
--- /dev/null
+++ b/tests/auto/cmake/test_wrap_cpp_moc/CMakeLists.txt
@@ -0,0 +1,19 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+project(test_wrap_cpp_and_resources)
+
+find_package(Qt6Core REQUIRED)
+
+add_executable(example main.cpp)
+
+qt_wrap_cpp(moc_files main.cpp TARGET example)
+
+# expect the generated moc files to be empty when a source file is passed
+if (NOT moc_files STREQUAL "")
+ message(FATAL_ERROR "test_qt_wrap_cpp_moc: moc_files should be empty")
+endif()
+
+target_link_libraries(example PRIVATE Qt::Core)
diff --git a/tests/auto/cmake/test_wrap_cpp_moc/main.cpp b/tests/auto/cmake/test_wrap_cpp_moc/main.cpp
new file mode 100644
index 0000000000..28ebfe0536
--- /dev/null
+++ b/tests/auto/cmake/test_wrap_cpp_moc/main.cpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QObject>
+
+class MyObject2 : public QObject {
+ Q_OBJECT
+public:
+ MyObject2() = default;
+};
+
+#include "main.moc"
+
+int main()
+{
+ return 0;
+}
diff --git a/tests/auto/cmake/test_wrap_cpp_options/CMakeLists.txt b/tests/auto/cmake/test_wrap_cpp_options/CMakeLists.txt
index 17f8fd7a48..80f4992da7 100644
--- a/tests/auto/cmake/test_wrap_cpp_options/CMakeLists.txt
+++ b/tests/auto/cmake/test_wrap_cpp_options/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
diff --git a/tests/auto/cmake/test_wrap_cpp_options/myobject.cpp b/tests/auto/cmake/test_wrap_cpp_options/myobject.cpp
index 600281e1db..14e00e789a 100644
--- a/tests/auto/cmake/test_wrap_cpp_options/myobject.cpp
+++ b/tests/auto/cmake/test_wrap_cpp_options/myobject.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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 "myobject.h"
diff --git a/tests/auto/cmake/test_wrap_cpp_options/myobject.h b/tests/auto/cmake/test_wrap_cpp_options/myobject.h
index c5b32c680d..87d7bfa3df 100644
--- a/tests/auto/cmake/test_wrap_cpp_options/myobject.h
+++ b/tests/auto/cmake/test_wrap_cpp_options/myobject.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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) 2011 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
diff --git a/tests/auto/cmake/tst_qaddpreroutine/CMakeLists.txt b/tests/auto/cmake/tst_qaddpreroutine/CMakeLists.txt
index 624a1214c8..bc1a6339db 100644
--- a/tests/auto/cmake/tst_qaddpreroutine/CMakeLists.txt
+++ b/tests/auto/cmake/tst_qaddpreroutine/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qaddpreroutine Test:
#####################################################################
@@ -22,6 +25,7 @@ qt_prepare_standalone_project()
find_package(Qt6 COMPONENTS Gui Test CONFIG REQUIRED)
qt_internal_add_plugin(QTBUG_90341ThemePlugin
+ NO_UNITY_BUILD
OUTPUT_NAME QTBUG_90341
OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
CLASS_NAME ThemePlugin
@@ -30,7 +34,7 @@ qt_internal_add_plugin(QTBUG_90341ThemePlugin
SOURCES
plugin.cpp
SKIP_INSTALL
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Gui
Qt::GuiPrivate
@@ -39,7 +43,7 @@ qt_internal_add_plugin(QTBUG_90341ThemePlugin
qt_internal_add_test(tst_qaddpreroutine
SOURCES
tst_qaddpreroutine.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/cmake/tst_qaddpreroutine/plugin.cpp b/tests/auto/cmake/tst_qaddpreroutine/plugin.cpp
index bbc27f5443..1647d8d3a8 100644
--- a/tests/auto/cmake/tst_qaddpreroutine/plugin.cpp
+++ b/tests/auto/cmake/tst_qaddpreroutine/plugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 zccrs <zccrs@live.com>, JiDe Zhang <zhangjide@uniontech.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) 2021 zccrs <zccrs@live.com>, JiDe Zhang <zhangjide@uniontech.com>.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qpa/qplatformthemeplugin.h>
#include <qpa/qplatformtheme.h>
diff --git a/tests/auto/cmake/tst_qaddpreroutine/tst_qaddpreroutine.cpp b/tests/auto/cmake/tst_qaddpreroutine/tst_qaddpreroutine.cpp
index fd6fde30ce..21394648c0 100644
--- a/tests/auto/cmake/tst_qaddpreroutine/tst_qaddpreroutine.cpp
+++ b/tests/auto/cmake/tst_qaddpreroutine/tst_qaddpreroutine.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 zccrs <zccrs@live.com>, JiDe Zhang <zhangjide@uniontech.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) 2021 zccrs <zccrs@live.com>, JiDe Zhang <zhangjide@uniontech.com>.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QGuiApplication>
diff --git a/tests/auto/concurrent/CMakeLists.txt b/tests/auto/concurrent/CMakeLists.txt
index 1d7b8cefb4..0088ebfcf6 100644
--- a/tests/auto/concurrent/CMakeLists.txt
+++ b/tests/auto/concurrent/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from concurrent.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qtconcurrentfilter)
add_subdirectory(qtconcurrentiteratekernel)
diff --git a/tests/auto/concurrent/qtconcurrentfilter/CMakeLists.txt b/tests/auto/concurrent/qtconcurrentfilter/CMakeLists.txt
index f81bed27d6..3c00393d39 100644
--- a/tests/auto/concurrent/qtconcurrentfilter/CMakeLists.txt
+++ b/tests/auto/concurrent/qtconcurrentfilter/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qtconcurrentfilter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtconcurrentfilter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtconcurrentfilter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtconcurrentfilter
SOURCES
tst_qtconcurrentfilter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
)
diff --git a/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp b/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp
index f9e68bd5f6..e19a596d5d 100644
--- a/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp
+++ b/tests/auto/concurrent/qtconcurrentfilter/tst_qtconcurrentfilter.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** 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 <qtconcurrentfilter.h>
#include <QCoreApplication>
#include <QList>
#include <QTest>
+#include <QSet>
#include "../testhelper_functions.h"
@@ -51,6 +27,7 @@ private slots:
void filteredReducedInitialValueThreadPool();
void filteredReducedInitialValueWithMoveOnlyCallables();
void filteredReducedDifferentTypeInitialValue();
+ void filteredReduceOptionConvertableToResultType();
void resultAt();
void incrementalResults();
void noDetach();
@@ -1362,6 +1339,56 @@ void tst_QtConcurrentFilter::filteredReducedDifferentTypeInitialValue()
CHECK_FAIL("lambda-lambda");
}
+void tst_QtConcurrentFilter::filteredReduceOptionConvertableToResultType()
+{
+ const QList<int> intList { 1, 2, 3 };
+ const int sum = 4;
+ QThreadPool p;
+ ReduceOption ro = OrderedReduce;
+
+ // With container
+ QCOMPARE(QtConcurrent::filteredReduced(intList, keepOddIntegers, intSumReduce, ro).result(),
+ sum);
+ QCOMPARE(QtConcurrent::blockingFilteredReduced(intList, keepOddIntegers, intSumReduce, ro),
+ sum);
+
+ // With iterators
+ QCOMPARE(QtConcurrent::filteredReduced(intList.begin(), intList.end(), keepOddIntegers,
+ intSumReduce, ro).result(), sum);
+ QCOMPARE(QtConcurrent::blockingFilteredReduced(intList.begin(), intList.end(), keepOddIntegers,
+ intSumReduce, ro), sum);
+
+ // With custom QThreadPool;
+ QCOMPARE(QtConcurrent::filteredReduced(&p, intList, keepOddIntegers, intSumReduce, ro).result(),
+ sum);
+ QCOMPARE(QtConcurrent::blockingFilteredReduced(&p, intList, keepOddIntegers, intSumReduce, ro),
+ sum);
+ QCOMPARE(QtConcurrent::filteredReduced(&p, intList.begin(), intList.end(), keepOddIntegers,
+ intSumReduce, ro).result(), sum);
+ QCOMPARE(QtConcurrent::blockingFilteredReduced(&p, intList.begin(), intList.end(),
+ keepOddIntegers, intSumReduce, ro), sum);
+
+ // The same as above, but specify the result type explicitly (this invokes different overloads)
+ QCOMPARE(QtConcurrent::filteredReduced<int>(intList, keepOddIntegers, intSumReduce,
+ ro).result(), sum);
+ QCOMPARE(QtConcurrent::blockingFilteredReduced<int>(intList, keepOddIntegers, intSumReduce, ro),
+ sum);
+
+ QCOMPARE(QtConcurrent::filteredReduced<int>(intList.begin(), intList.end(), keepOddIntegers,
+ intSumReduce, ro).result(), sum);
+ QCOMPARE(QtConcurrent::blockingFilteredReduced<int>(intList.begin(), intList.end(),
+ keepOddIntegers, intSumReduce, ro), sum);
+
+ QCOMPARE(QtConcurrent::filteredReduced<int>(&p, intList, keepOddIntegers, intSumReduce,
+ ro).result(), sum);
+ QCOMPARE(QtConcurrent::blockingFilteredReduced<int>(&p, intList, keepOddIntegers, intSumReduce,
+ ro), sum);
+ QCOMPARE(QtConcurrent::filteredReduced<int>(&p, intList.begin(), intList.end(), keepOddIntegers,
+ intSumReduce, ro).result(),sum);
+ QCOMPARE(QtConcurrent::blockingFilteredReduced<int>(&p, intList.begin(), intList.end(),
+ keepOddIntegers, intSumReduce, ro), sum);
+}
+
bool filterfn(int i)
{
return (i % 2);
@@ -1407,7 +1434,7 @@ void tst_QtConcurrentFilter::incrementalResults()
QCOMPARE(future.isFinished(), true);
QCOMPARE(future.resultCount(), count / 2);
- QCOMPARE(future.results().count(), count / 2);
+ QCOMPARE(future.results().size(), count / 2);
}
void tst_QtConcurrentFilter::noDetach()
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/CMakeLists.txt b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/CMakeLists.txt
index 1933365e86..12545702eb 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/CMakeLists.txt
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtconcurrentfiltermapgenerated.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtconcurrentfiltermapgenerated Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtconcurrentfiltermapgenerated LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtconcurrentfiltermapgenerated
SOURCES
tst_qtconcurrent_selected_tests.cpp
tst_qtconcurrentfiltermapgenerated.cpp tst_qtconcurrentfiltermapgenerated.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
)
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generation_helpers.h b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generation_helpers.h
index ab8385b30b..aaa0d85002 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generation_helpers.h
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generation_helpers.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef QTBASE_GENERATION_HELPERS_H
#define QTBASE_GENERATION_HELPERS_H
@@ -156,10 +131,7 @@ public:
bool operator()(const T &el)
{
- if (!movedFrom)
- return el.isOdd();
- else
- return -1;
+ return movedFrom || el.isOdd();
}
};
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/function_signature.py b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/function_signature.py
index 049eea8d43..d87c8a2e9b 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/function_signature.py
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/function_signature.py
@@ -1,30 +1,5 @@
-#############################################################################
-#
# 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$
-#
-#############################################################################
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
from option_management import need_separate_output_sequence
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_excel.py b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_excel.py
index b9aad29e5a..d05e31fc21 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_excel.py
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_excel.py
@@ -1,30 +1,5 @@
-#############################################################################
-#
# 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$
-#
-#############################################################################
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
import pandas as pd
from option_management import function_describing_options
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_gui.py b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_gui.py
index 050ccb5839..54c1285e74 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_gui.py
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_gui.py
@@ -1,30 +1,5 @@
-#############################################################################
-#
# 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$
-#
-#############################################################################
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
import importlib
import sys
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_testcase.py b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_testcase.py
index 9ba03a31a0..d35a7e9065 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_testcase.py
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generate_testcase.py
@@ -1,30 +1,5 @@
-#############################################################################
-#
# 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$
-#
-#############################################################################
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
import textwrap
import time
from subprocess import Popen, PIPE
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generator_main.py b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generator_main.py
index 399488bb59..87cb4c7bc4 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generator_main.py
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/generator_main.py
@@ -1,30 +1,5 @@
-#############################################################################
-#
# 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$
-#
-#############################################################################
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
from option_management import function_describing_options, skip_function_description, testcase_describing_options
from generate_testcase import generate_testcase
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/helpers.py b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/helpers.py
index ed485ac3da..fbe969789c 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/helpers.py
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/helpers.py
@@ -1,30 +1,5 @@
-#############################################################################
-#
# 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$
-#
-#############################################################################
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
def insert_testcases_into_file(filename, testcases):
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/option_management.py b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/option_management.py
index bac2a8d368..6a1fc87f9f 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/option_management.py
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/generator/option_management.py
@@ -1,30 +1,5 @@
-#############################################################################
-#
# 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$
-#
-#############################################################################
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
import itertools
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrent_selected_tests.cpp b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrent_selected_tests.cpp
index 6b72648720..edb7cce4c9 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrent_selected_tests.cpp
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrent_selected_tests.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 "tst_qtconcurrentfiltermapgenerated.h"
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrentfiltermapgenerated.cpp b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrentfiltermapgenerated.cpp
index 5983d6cf76..089ca3f867 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrentfiltermapgenerated.cpp
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrentfiltermapgenerated.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <qtconcurrentfilter.h>
#include <qtconcurrentmap.h>
#include <QCoreApplication>
diff --git a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrentfiltermapgenerated.h b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrentfiltermapgenerated.h
index 1b49a523f8..31b62ac4fd 100644
--- a/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrentfiltermapgenerated.h
+++ b/tests/auto/concurrent/qtconcurrentfiltermapgenerated/tst_qtconcurrentfiltermapgenerated.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <qtconcurrentfilter.h>
#include <qtconcurrentmap.h>
#include <QTest>
diff --git a/tests/auto/concurrent/qtconcurrentiteratekernel/CMakeLists.txt b/tests/auto/concurrent/qtconcurrentiteratekernel/CMakeLists.txt
index 2c74f6542e..2eea340795 100644
--- a/tests/auto/concurrent/qtconcurrentiteratekernel/CMakeLists.txt
+++ b/tests/auto/concurrent/qtconcurrentiteratekernel/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qtconcurrentiteratekernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtconcurrentiteratekernel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtconcurrentiteratekernel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtconcurrentiteratekernel
SOURCES
tst_qtconcurrentiteratekernel.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
)
diff --git a/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp b/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
index 4163883a5b..27113ad8b7 100644
--- a/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
+++ b/tests/auto/concurrent/qtconcurrentiteratekernel/tst_qtconcurrentiteratekernel.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** 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 <QThread>
+#include <QSet>
struct TestIterator
{
@@ -245,7 +221,7 @@ void tst_QtConcurrentIterateKernel::throttling()
QCOMPARE(iterations.loadRelaxed(), totalIterations);
- QCOMPARE(threads.count(), 1);
+ QCOMPARE(threads.size(), 1);
}
class MultipleResultsFor : public IterateKernel<TestIterator, int>
@@ -263,7 +239,7 @@ public:
void tst_QtConcurrentIterateKernel::multipleResults()
{
QFuture<int> f = startThreadEngine(new MultipleResultsFor(0, 10)).startAsynchronously();
- QCOMPARE(f.results().count() , 10);
+ QCOMPARE(f.results().size() , 10);
QCOMPARE(f.resultAt(0), 0);
QCOMPARE(f.resultAt(5), 5);
QCOMPARE(f.resultAt(9), 9);
diff --git a/tests/auto/concurrent/qtconcurrentmap/CMakeLists.txt b/tests/auto/concurrent/qtconcurrentmap/CMakeLists.txt
index 20ccbdf374..62b434a25f 100644
--- a/tests/auto/concurrent/qtconcurrentmap/CMakeLists.txt
+++ b/tests/auto/concurrent/qtconcurrentmap/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtconcurrentmap.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtconcurrentmap Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtconcurrentmap LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtconcurrentmap
SOURCES
tst_qtconcurrentmap.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
)
diff --git a/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp b/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp
index 973a9b4fa5..3e3165013f 100644
--- a/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.cpp
+++ b/tests/auto/concurrent/qtconcurrentmap/tst_qtconcurrentmap.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 <qtconcurrentmap.h>
#include <qexception.h>
#include <qdebug.h>
@@ -32,6 +7,7 @@
#include <QThread>
#include <QMutex>
#include <QTest>
+#include <QSet>
#include <QRandomGenerator>
#include "../testhelper_functions.h"
@@ -54,6 +30,7 @@ private slots:
void mappedReducedInitialValueThreadPool();
void mappedReducedInitialValueWithMoveOnlyCallable();
void mappedReducedDifferentTypeInitialValue();
+ void mappedReduceOptionConvertableToResultType();
void assignResult();
void functionOverloads();
void noExceptFunctionOverloads();
@@ -73,7 +50,7 @@ public slots:
using namespace QtConcurrent;
-void multiplyBy2Immutable(int x)
+void multiplyBy2Immutable([[maybe_unused]] int x)
{
x *= 2;
}
@@ -81,7 +58,7 @@ void multiplyBy2Immutable(int x)
class MultiplyBy2Immutable
{
public:
- void operator()(int x)
+ void operator()([[maybe_unused]] int x)
{
x *= 2;
}
@@ -186,9 +163,9 @@ void tst_QtConcurrentMap::map()
QCOMPARE(list, QList<int>() << 1 << 2 << 3);
// lambda
- QtConcurrent::map(list, [](int x){x *= 2;}).waitForFinished();
+ QtConcurrent::map(list, []([[maybe_unused]] int x){x *= 2;}).waitForFinished();
QCOMPARE(list, QList<int>() << 1 << 2 << 3);
- QtConcurrent::map(list.begin(), list.end(), [](int x){x *= 2;}).waitForFinished();
+ QtConcurrent::map(list.begin(), list.end(), []([[maybe_unused]] int x){x *= 2;}).waitForFinished();
QCOMPARE(list, QList<int>() << 1 << 2 << 3);
}
@@ -208,6 +185,17 @@ void tst_QtConcurrentMap::map()
QCOMPARE(list, NonTemplateSequence({ 2, 4, 6 }));
}
+ // custom pool with invalid number of threads
+ {
+ QList<int> list;
+ list << 1 << 2 << 3;
+ QThreadPool pool;
+ pool.setMaxThreadCount(0); // explicitly set incorrect value
+ // This should not crash
+ QtConcurrent::map(&pool, list, MultiplyBy2InPlace()).waitForFinished();
+ QCOMPARE(list, QList<int>() << 2 << 4 << 6);
+ }
+
#if 0
// not allowed: map() with immutable sequences makes no sense
{
@@ -238,7 +226,7 @@ void tst_QtConcurrentMap::map()
#if 0
// not allowed: map() on a const list, where functors try to modify the items in the list
{
- const QList<int> list = QList<int>() << 1 << 2 << 3;;
+ const QList<int> list = QList<int>() << 1 << 2 << 3;
QtConcurrent::map(list, MultiplyBy2InPlace());
QtConcurrent::map(list, multiplyBy2InPlace);
@@ -332,9 +320,9 @@ void tst_QtConcurrentMap::blockingMap()
QCOMPARE(list, QList<int>() << 1 << 2 << 3);
// lambda
- QtConcurrent::blockingMap(list, [](int x) { x *= 2; });
+ QtConcurrent::blockingMap(list, []([[maybe_unused]] int x) { x *= 2; });
QCOMPARE(list, QList<int>() << 1 << 2 << 3);
- QtConcurrent::blockingMap(list.begin(), list.end(), [](int x) { x *= 2; });
+ QtConcurrent::blockingMap(list.begin(), list.end(), []([[maybe_unused]] int x) { x *= 2; });
QCOMPARE(list, QList<int>() << 1 << 2 << 3);
}
@@ -375,7 +363,7 @@ void tst_QtConcurrentMap::blockingMap()
#if 0
// not allowed: map() on a const list, where functors try to modify the items in the list
{
- const QList<int> list = QList<int>() << 1 << 2 << 3;;
+ const QList<int> list = QList<int>() << 1 << 2 << 3;
QtConcurrent::blockingMap(list, MultiplyBy2InPlace());
QtConcurrent::blockingMap(list, multiplyBy2InPlace);
@@ -1098,6 +1086,17 @@ void tst_QtConcurrentMap::mappedReducedThreadPool()
intCube, intSumReduce);
QCOMPARE(result, sumOfCubes);
}
+
+ {
+ // pool with invalid number of threads
+ QThreadPool pool;
+ pool.setMaxThreadCount(0); // explicitly set incorrect value
+
+ // This should not crash
+ NonTemplateSequence list { 1, 2, 3 };
+ auto future = QtConcurrent::mappedReduced(&pool, list, multiplyBy2, intSumReduce);
+ QCOMPARE(future.result(), 12);
+ }
}
void tst_QtConcurrentMap::mappedReducedWithMoveOnlyCallable()
@@ -1629,6 +1628,51 @@ void tst_QtConcurrentMap::mappedReducedDifferentTypeInitialValue()
CHECK_FAIL("lambda-lambda");
}
+void tst_QtConcurrentMap::mappedReduceOptionConvertableToResultType()
+{
+ const QList<int> intList { 1, 2, 3 };
+ const int sum = 12;
+ QThreadPool p;
+ ReduceOption ro = OrderedReduce;
+
+ // With container
+ QCOMPARE(QtConcurrent::mappedReduced(intList, multiplyBy2, intSumReduce, ro).result(), sum);
+ QCOMPARE(QtConcurrent::blockingMappedReduced(intList, multiplyBy2, intSumReduce, ro), sum);
+
+ // With iterators
+ QCOMPARE(QtConcurrent::mappedReduced(intList.begin(), intList.end(), multiplyBy2, intSumReduce,
+ ro).result(), sum);
+ QCOMPARE(QtConcurrent::blockingMappedReduced(intList.begin(), intList.end(), multiplyBy2,
+ intSumReduce, ro), sum);
+
+ // With custom QThreadPool;
+ QCOMPARE(QtConcurrent::mappedReduced(&p, intList, multiplyBy2, intSumReduce, ro).result(), sum);
+ QCOMPARE(QtConcurrent::blockingMappedReduced(&p, intList, multiplyBy2, intSumReduce, ro), sum);
+ QCOMPARE(QtConcurrent::mappedReduced(&p, intList.begin(), intList.end(), multiplyBy2,
+ intSumReduce, ro).result(), sum);
+ QCOMPARE(QtConcurrent::blockingMappedReduced(&p, intList.begin(), intList.end(), multiplyBy2,
+ intSumReduce, ro), sum);
+
+ // The same as above, but specify the result type explicitly (this invokes different overloads)
+ QCOMPARE(QtConcurrent::mappedReduced<int>(intList, multiplyBy2, intSumReduce, ro).result(),
+ sum);
+ QCOMPARE(QtConcurrent::blockingMappedReduced<int>(intList, multiplyBy2, intSumReduce, ro), sum);
+
+ QCOMPARE(QtConcurrent::mappedReduced<int>(intList.begin(), intList.end(), multiplyBy2,
+ intSumReduce, ro).result(), sum);
+ QCOMPARE(QtConcurrent::blockingMappedReduced<int>(intList.begin(), intList.end(), multiplyBy2,
+ intSumReduce, ro), sum);
+
+ QCOMPARE(QtConcurrent::mappedReduced<int>(&p, intList, multiplyBy2, intSumReduce, ro).result(),
+ sum);
+ QCOMPARE(QtConcurrent::blockingMappedReduced<int>(&p, intList, multiplyBy2, intSumReduce, ro),
+ sum);
+ QCOMPARE(QtConcurrent::mappedReduced<int>(&p, intList.begin(), intList.end(), multiplyBy2,
+ intSumReduce, ro).result(), sum);
+ QCOMPARE(QtConcurrent::blockingMappedReduced<int>(&p, intList.begin(), intList.end(),
+ multiplyBy2, intSumReduce, ro), sum);
+}
+
int sleeper(int val)
{
QTest::qSleep(100);
@@ -1934,7 +1978,7 @@ void tst_QtConcurrentMap::incrementalResults()
QCOMPARE(future.isFinished(), true);
QCOMPARE(future.resultCount(), count);
- QCOMPARE(future.results().count(), count);
+ QCOMPARE(future.results().size(), count);
}
/*
@@ -2025,7 +2069,7 @@ void tst_QtConcurrentMap::stlContainersLambda()
QtConcurrent::mapped(list, [](const int &i) { return mapper(i); }).waitForFinished();
- QtConcurrent::blockingMap(list, [](int x) { x *= 2; });
+ QtConcurrent::blockingMap(list, []([[maybe_unused]] int x) { x *= 2; });
}
InstanceCounter ic_fn(const InstanceCounter & ic)
diff --git a/tests/auto/concurrent/qtconcurrentmedian/CMakeLists.txt b/tests/auto/concurrent/qtconcurrentmedian/CMakeLists.txt
index cbae4d1fb1..63f0135467 100644
--- a/tests/auto/concurrent/qtconcurrentmedian/CMakeLists.txt
+++ b/tests/auto/concurrent/qtconcurrentmedian/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qtconcurrentmedian.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtconcurrentmedian Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtconcurrentmedian LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtconcurrentmedian
SOURCES
tst_qtconcurrentmedian.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
)
diff --git a/tests/auto/concurrent/qtconcurrentmedian/tst_qtconcurrentmedian.cpp b/tests/auto/concurrent/qtconcurrentmedian/tst_qtconcurrentmedian.cpp
index 8a797447bb..7eea013c8b 100644
--- a/tests/auto/concurrent/qtconcurrentmedian/tst_qtconcurrentmedian.cpp
+++ b/tests/auto/concurrent/qtconcurrentmedian/tst_qtconcurrentmedian.cpp
@@ -1,30 +1,6 @@
-/****************************************************************************
-**
-** 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 <qtconcurrentmedian.h>
#include <QTest>
@@ -73,11 +49,11 @@ void tst_QtConcurrentMedian::median_data()
void tst_QtConcurrentMedian::median()
{
- QFETCH(QList<double> , values);
+ QFETCH(const QList<double> , values);
QFETCH(double, expectedMedian);
QtConcurrent::Median m;
- foreach (double value, values)
+ for (double value : values)
m.addValue(value);
QCOMPARE(m.median(), expectedMedian);
}
diff --git a/tests/auto/concurrent/qtconcurrentrun/CMakeLists.txt b/tests/auto/concurrent/qtconcurrentrun/CMakeLists.txt
index 9f3b60481d..a8b6792570 100644
--- a/tests/auto/concurrent/qtconcurrentrun/CMakeLists.txt
+++ b/tests/auto/concurrent/qtconcurrentrun/CMakeLists.txt
@@ -1,14 +1,22 @@
-# Generated from qtconcurrentrun.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtconcurrentrun Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtconcurrentrun LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtconcurrentrun
SOURCES
tst_qtconcurrentrun.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
+ Qt::TestPrivate
)
## Scopes:
diff --git a/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp b/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp
index 0ff98c42f5..0bc2961903 100644
--- a/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.cpp
+++ b/tests/auto/concurrent/qtconcurrentrun/tst_qtconcurrentrun.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 <qtconcurrentrun.h>
#include <QFuture>
#include <QMutex>
@@ -35,12 +10,15 @@
#include <QTimer>
#include <QFutureSynchronizer>
+#include <QtTest/private/qemulationdetector_p.h>
+
using namespace QtConcurrent;
class tst_QtConcurrentRun: public QObject
{
Q_OBJECT
private slots:
+ void initTestCase();
void runLightFunction();
void runHeavyFunction();
void returnValue();
@@ -66,6 +44,7 @@ private slots:
void customPromise();
void nonDefaultConstructibleValue();
void nullThreadPool();
+ void nullThreadPoolNoLeak();
};
void light()
@@ -107,6 +86,13 @@ void heavy()
qDebug("done function");
}
+void tst_QtConcurrentRun::initTestCase()
+{
+ // proxy check for QEMU; catches slightly more though
+ if (QTestPrivate::isRunningArmOnX86())
+ QSKIP("Runs into spurious crashes on QEMU -- QTBUG-106906");
+}
+
void tst_QtConcurrentRun::runLightFunction()
{
qDebug("starting function");
@@ -680,10 +666,10 @@ void tst_QtConcurrentRun::implicitConvertibleTypes()
{
QThreadPool pool;
- double d;
+ double d = 0.0;
run(doubleFunction, d).waitForFinished();
run(&pool, doubleFunction, d).waitForFinished();
- int i;
+ int i = 0;
run(doubleFunction, d).waitForFinished();
run(&pool, doubleFunction, d).waitForFinished();
run(doubleFunction, i).waitForFinished();
@@ -829,7 +815,7 @@ public:
void run() override {
int iter = 60;
while (--iter && !cancel.loadRelaxed())
- QThread::currentThread()->msleep(25);
+ QThread::currentThread()->sleep(std::chrono::milliseconds{25});
}
};
@@ -1103,12 +1089,25 @@ void report3(QPromise<int> &promise)
promise.addResult(1);
}
+static void staticReport3(QPromise<int> &promise)
+{
+ promise.addResult(0);
+ promise.addResult(2);
+ promise.addResult(1);
+}
+
void reportN(QPromise<double> &promise, int n)
{
for (int i = 0; i < n; ++i)
promise.addResult(0);
}
+static void staticReportN(QPromise<double> &promise, int n)
+{
+ for (int i = 0; i < n; ++i)
+ promise.addResult(0);
+}
+
void reportString1(QPromise<QString> &promise, const QString &s)
{
promise.addResult(s);
@@ -1182,11 +1181,21 @@ void tst_QtConcurrentRun::withPromise()
QCOMPARE(run(report3).results(),
QList<int>({0, 2, 1}));
- QCOMPARE(run(reportN, 4).results(),
- QList<double>({0, 0, 0, 0}));
+ QCOMPARE(run(&staticReport3).results(),
+ QList<int>({0, 2, 1}));
+ QCOMPARE(run(staticReport3).results(),
+ QList<int>({0, 2, 1}));
+
+ QCOMPARE(run(&reportN, 2).results(),
+ QList<double>({0, 0}));
QCOMPARE(run(reportN, 2).results(),
QList<double>({0, 0}));
+ QCOMPARE(run(&staticReportN, 2).results(),
+ QList<double>({0, 0}));
+ QCOMPARE(run(staticReportN, 2).results(),
+ QList<double>({0, 0}));
+
QString s = QLatin1String("string");
const QString &crs = QLatin1String("cr string");
const QString cs = QLatin1String("c string");
@@ -1273,11 +1282,21 @@ void tst_QtConcurrentRun::withPromiseInThreadPool()
QCOMPARE(run(pool.data(), report3).results(),
QList<int>({0, 2, 1}));
- QCOMPARE(run(pool.data(), reportN, 4).results(),
- QList<double>({0, 0, 0, 0}));
+ QCOMPARE(run(pool.data(), &staticReport3).results(),
+ QList<int>({0, 2, 1}));
+ QCOMPARE(run(pool.data(), staticReport3).results(),
+ QList<int>({0, 2, 1}));
+
+ QCOMPARE(run(pool.data(), &reportN, 2).results(),
+ QList<double>({0, 0}));
QCOMPARE(run(pool.data(), reportN, 2).results(),
QList<double>({0, 0}));
+ QCOMPARE(run(pool.data(), &staticReportN, 2).results(),
+ QList<double>({0, 0}));
+ QCOMPARE(run(pool.data(), staticReportN, 2).results(),
+ QList<double>({0, 0}));
+
QString s = QLatin1String("string");
const QString &crs = QLatin1String("cr string");
const QString cs = QLatin1String("c string");
@@ -1407,7 +1426,7 @@ void tst_QtConcurrentRun::withPromiseAndThen()
setFlag(syncEnd);
future.waitForFinished();
- QCOMPARE(future.results().count(), 0);
+ QCOMPARE(future.results().size(), 0);
QVERIFY(runExecuted);
QVERIFY(!cancelReceivedBeforeSync);
QVERIFY(cancelReceivedAfterSync);
@@ -1427,7 +1446,7 @@ void tst_QtConcurrentRun::withPromiseAndThen()
setFlag(syncEnd);
resultFuture.waitForFinished();
- QCOMPARE(future.results().count(), 1);
+ QCOMPARE(future.results().size(), 1);
QCOMPARE(future.result(), 1);
QVERIFY(runExecuted);
QVERIFY(thenExecuted);
@@ -1450,7 +1469,7 @@ void tst_QtConcurrentRun::withPromiseAndThen()
setFlag(syncEnd);
resultFuture.waitForFinished();
- QCOMPARE(future.results().count(), 0);
+ QCOMPARE(future.results().size(), 0);
QVERIFY(runExecuted);
QVERIFY(!thenExecuted);
QVERIFY(cancelExecuted);
@@ -1589,5 +1608,27 @@ void tst_QtConcurrentRun::nullThreadPool()
QVERIFY(!isInvoked);
}
+struct LifetimeChecker
+{
+ LifetimeChecker() { ++count; }
+ LifetimeChecker(const LifetimeChecker &) { ++count; }
+ ~LifetimeChecker() { --count; }
+
+ void operator()() { }
+
+ static std::atomic<int> count;
+};
+std::atomic<int> LifetimeChecker::count = 0;
+
+void tst_QtConcurrentRun::nullThreadPoolNoLeak()
+{
+ {
+ QThreadPool *pool = nullptr;
+ auto future = run(pool, LifetimeChecker());
+ future.waitForFinished();
+ }
+ QCOMPARE(LifetimeChecker::count, 0);
+}
+
QTEST_MAIN(tst_QtConcurrentRun)
#include "tst_qtconcurrentrun.moc"
diff --git a/tests/auto/concurrent/qtconcurrenttask/CMakeLists.txt b/tests/auto/concurrent/qtconcurrenttask/CMakeLists.txt
index 60f5cb47e3..89226eaacc 100644
--- a/tests/auto/concurrent/qtconcurrenttask/CMakeLists.txt
+++ b/tests/auto/concurrent/qtconcurrenttask/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qtconcurrenttask.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtconcurrenttask Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtconcurrenttask LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtconcurrenttask
SOURCES
tst_qtconcurrenttask.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
)
diff --git a/tests/auto/concurrent/qtconcurrenttask/tst_qtconcurrenttask.cpp b/tests/auto/concurrent/qtconcurrenttask/tst_qtconcurrenttask.cpp
index a95f424d0b..d570b0f974 100644
--- a/tests/auto/concurrent/qtconcurrenttask/tst_qtconcurrenttask.cpp
+++ b/tests/auto/concurrent/qtconcurrenttask/tst_qtconcurrenttask.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <qtconcurrenttask.h>
@@ -57,7 +32,7 @@ void tst_QtConcurrentTask::taskWithFreeFunction()
{
QVariant value(42);
- auto result = task(&qvariant_cast<int>)
+ auto result = task([](const QVariant &var){ return qvariant_cast<int>(var); })
.withArguments(value)
.spawn()
.result();
diff --git a/tests/auto/concurrent/qtconcurrentthreadengine/CMakeLists.txt b/tests/auto/concurrent/qtconcurrentthreadengine/CMakeLists.txt
index 8a7f006674..c3c8c9ea59 100644
--- a/tests/auto/concurrent/qtconcurrentthreadengine/CMakeLists.txt
+++ b/tests/auto/concurrent/qtconcurrentthreadengine/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qtconcurrentthreadengine.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtconcurrentthreadengine Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtconcurrentthreadengine LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtconcurrentthreadengine
SOURCES
tst_qtconcurrentthreadengine.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
)
diff --git a/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp b/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
index 12a7aa4bf0..0151b13693 100644
--- a/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
+++ b/tests/auto/concurrent/qtconcurrentthreadengine/tst_qtconcurrentthreadengine.cpp
@@ -1,35 +1,14 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include <qtconcurrentthreadengine.h>
#include <qexception.h>
#include <QThread>
#include <QElapsedTimer>
#include <QTest>
+#include <QSet>
using namespace QtConcurrent;
@@ -258,7 +237,7 @@ void tst_QtConcurrentThreadEngine::threadCount()
const int repeats = 10;
for (int i = 0; i < repeats; ++i) {
(new ThreadCountUser())->startAsynchronously().waitForFinished();
- const auto count = threads.count();
+ const auto count = threads.size();
const auto maxThreadCount = QThreadPool::globalInstance()->maxThreadCount();
QVERIFY(count <= maxThreadCount);
QVERIFY(!threads.contains(QThread::currentThread()));
@@ -267,7 +246,7 @@ void tst_QtConcurrentThreadEngine::threadCount()
// Set the finish flag immediately, this should give us one thread only.
for (int i = 0; i < repeats; ++i) {
(new ThreadCountUser(true /*finishImmediately*/))->startAsynchronously().waitForFinished();
- const auto count = threads.count();
+ const auto count = threads.size();
QCOMPARE(count, 1);
QVERIFY(!threads.contains(QThread::currentThread()));
}
@@ -295,7 +274,7 @@ void tst_QtConcurrentThreadEngine::multipleResults()
{
MultipleResultsUser *engine = new MultipleResultsUser();
QFuture<int> f = engine->startAsynchronously();
- QCOMPARE(f.results().count() , 10);
+ QCOMPARE(f.results().size() , 10);
QCOMPARE(f.resultAt(0), 0);
QCOMPARE(f.resultAt(5), 5);
QCOMPARE(f.resultAt(9), 9);
diff --git a/tests/auto/concurrent/testhelper_functions.h b/tests/auto/concurrent/testhelper_functions.h
index a34e0f4ce9..88c2e28910 100644
--- a/tests/auto/concurrent/testhelper_functions.h
+++ b/tests/auto/concurrent/testhelper_functions.h
@@ -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
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
diff --git a/tests/auto/corelib/CMakeLists.txt b/tests/auto/corelib/CMakeLists.txt
index b9bf269745..7654fe0c20 100644
--- a/tests/auto/corelib/CMakeLists.txt
+++ b/tests/auto/corelib/CMakeLists.txt
@@ -1,10 +1,12 @@
-# Generated from corelib.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(kernel)
if(NOT UIKIT)
add_subdirectory(animation)
add_subdirectory(global)
add_subdirectory(io)
+ add_subdirectory(ipc)
add_subdirectory(itemmodels)
add_subdirectory(mimetypes)
add_subdirectory(plugin)
diff --git a/tests/auto/corelib/animation/CMakeLists.txt b/tests/auto/corelib/animation/CMakeLists.txt
index 79c2d6c4e9..85c121d243 100644
--- a/tests/auto/corelib/animation/CMakeLists.txt
+++ b/tests/auto/corelib/animation/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from animation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qabstractanimation)
add_subdirectory(qanimationgroup)
diff --git a/tests/auto/corelib/animation/qabstractanimation/CMakeLists.txt b/tests/auto/corelib/animation/qabstractanimation/CMakeLists.txt
index 1ab378546d..6e1ac655ba 100644
--- a/tests/auto/corelib/animation/qabstractanimation/CMakeLists.txt
+++ b/tests/auto/corelib/animation/qabstractanimation/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qabstractanimation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractanimation Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractanimation LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractanimation
SOURCES
tst_qabstractanimation.cpp
diff --git a/tests/auto/corelib/animation/qabstractanimation/tst_qabstractanimation.cpp b/tests/auto/corelib/animation/qabstractanimation/tst_qabstractanimation.cpp
index 65e57e2d84..6c87428d75 100644
--- a/tests/auto/corelib/animation/qabstractanimation/tst_qabstractanimation.cpp
+++ b/tests/auto/corelib/animation/qabstractanimation/tst_qabstractanimation.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 <QtCore/qabstractanimation.h>
diff --git a/tests/auto/corelib/animation/qanimationgroup/CMakeLists.txt b/tests/auto/corelib/animation/qanimationgroup/CMakeLists.txt
index 5dcdf49836..a8160051a3 100644
--- a/tests/auto/corelib/animation/qanimationgroup/CMakeLists.txt
+++ b/tests/auto/corelib/animation/qanimationgroup/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qanimationgroup.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qanimationgroup Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qanimationgroup LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qanimationgroup
SOURCES
tst_qanimationgroup.cpp
diff --git a/tests/auto/corelib/animation/qanimationgroup/tst_qanimationgroup.cpp b/tests/auto/corelib/animation/qanimationgroup/tst_qanimationgroup.cpp
index 8892a0b1ab..5345283252 100644
--- a/tests/auto/corelib/animation/qanimationgroup/tst_qanimationgroup.cpp
+++ b/tests/auto/corelib/animation/qanimationgroup/tst_qanimationgroup.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 <QTest>
#include <QPauseAnimation>
@@ -134,7 +109,7 @@ void tst_QAnimationGroup::emptyGroup()
QCOMPARE(group.state(), QAnimationGroup::Stopped);
group.start();
- QCOMPARE(groupStateChangedSpy.count(), 2);
+ QCOMPARE(groupStateChangedSpy.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(groupStateChangedSpy.at(0).first()),
QAnimationGroup::Running);
@@ -146,7 +121,7 @@ void tst_QAnimationGroup::emptyGroup()
QTest::ignoreMessage(QtWarningMsg, "QAbstractAnimation::pause: Cannot pause a stopped animation");
group.pause();
- QCOMPARE(groupStateChangedSpy.count(), 2);
+ QCOMPARE(groupStateChangedSpy.size(), 2);
QCOMPARE(group.state(), QAnimationGroup::Stopped);
group.start();
@@ -160,7 +135,7 @@ void tst_QAnimationGroup::emptyGroup()
group.stop();
- QCOMPARE(groupStateChangedSpy.count(), 4);
+ QCOMPARE(groupStateChangedSpy.size(), 4);
QCOMPARE(group.state(), QAnimationGroup::Stopped);
}
diff --git a/tests/auto/corelib/animation/qparallelanimationgroup/CMakeLists.txt b/tests/auto/corelib/animation/qparallelanimationgroup/CMakeLists.txt
index 9a6c9f45db..c532ad7327 100644
--- a/tests/auto/corelib/animation/qparallelanimationgroup/CMakeLists.txt
+++ b/tests/auto/corelib/animation/qparallelanimationgroup/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qparallelanimationgroup.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qparallelanimationgroup Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qparallelanimationgroup LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qparallelanimationgroup
SOURCES
tst_qparallelanimationgroup.cpp
diff --git a/tests/auto/corelib/animation/qparallelanimationgroup/tst_qparallelanimationgroup.cpp b/tests/auto/corelib/animation/qparallelanimationgroup/tst_qparallelanimationgroup.cpp
index 6cf7e5cb94..c47ce53364 100644
--- a/tests/auto/corelib/animation/qparallelanimationgroup/tst_qparallelanimationgroup.cpp
+++ b/tests/auto/corelib/animation/qparallelanimationgroup/tst_qparallelanimationgroup.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 <QTest>
#include <QVariantAnimation>
@@ -32,6 +7,7 @@
#include <QSignalSpy>
#include <QtCore/qparallelanimationgroup.h>
+#include <QtCore/qscopeguard.h>
Q_DECLARE_METATYPE(QAbstractAnimation::State)
@@ -259,38 +235,38 @@ void tst_QParallelAnimationGroup::stateChanged()
//first; let's start forward
group.start();
//all the animations should be started
- QCOMPARE(spy1.count(), 1);
+ QCOMPARE(spy1.size(), 1);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy1.last().first()), TestAnimation::Running);
- QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy2.size(), 1);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy2.last().first()), TestAnimation::Running);
- QCOMPARE(spy3.count(), 1);
+ QCOMPARE(spy3.size(), 1);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy3.last().first()), TestAnimation::Running);
- QCOMPARE(spy4.count(), 1);
+ QCOMPARE(spy4.size(), 1);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy4.last().first()), TestAnimation::Running);
group.setCurrentTime(1500); //anim1 should be finished
QCOMPARE(group.state(), QAnimationGroup::Running);
- QCOMPARE(spy1.count(), 2);
+ QCOMPARE(spy1.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy1.last().first()), TestAnimation::Stopped);
- QCOMPARE(spy2.count(), 1); //no change
- QCOMPARE(spy3.count(), 1); //no change
- QCOMPARE(spy4.count(), 1); //no change
+ QCOMPARE(spy2.size(), 1); //no change
+ QCOMPARE(spy3.size(), 1); //no change
+ QCOMPARE(spy4.size(), 1); //no change
group.setCurrentTime(2500); //anim2 should be finished
QCOMPARE(group.state(), QAnimationGroup::Running);
- QCOMPARE(spy1.count(), 2); //no change
- QCOMPARE(spy2.count(), 2);
+ QCOMPARE(spy1.size(), 2); //no change
+ QCOMPARE(spy2.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy2.last().first()), TestAnimation::Stopped);
- QCOMPARE(spy3.count(), 1); //no change
- QCOMPARE(spy4.count(), 1); //no change
+ QCOMPARE(spy3.size(), 1); //no change
+ QCOMPARE(spy4.size(), 1); //no change
group.setCurrentTime(3500); //everything should be finished
QCOMPARE(group.state(), QAnimationGroup::Stopped);
- QCOMPARE(spy1.count(), 2); //no change
- QCOMPARE(spy2.count(), 2); //no change
- QCOMPARE(spy3.count(), 2);
+ QCOMPARE(spy1.size(), 2); //no change
+ QCOMPARE(spy2.size(), 2); //no change
+ QCOMPARE(spy3.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy3.last().first()), TestAnimation::Stopped);
- QCOMPARE(spy4.count(), 2);
+ QCOMPARE(spy4.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy4.last().first()), TestAnimation::Stopped);
//cleanup
@@ -305,38 +281,38 @@ void tst_QParallelAnimationGroup::stateChanged()
//only anim3 and anim4 should be started
QCOMPARE(group.state(), QAnimationGroup::Running);
- QCOMPARE(spy1.count(), 0);
- QCOMPARE(spy2.count(), 0);
- QCOMPARE(spy3.count(), 1);
+ QCOMPARE(spy1.size(), 0);
+ QCOMPARE(spy2.size(), 0);
+ QCOMPARE(spy3.size(), 1);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy3.last().first()), TestAnimation::Running);
- QCOMPARE(spy4.count(), 1);
+ QCOMPARE(spy4.size(), 1);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy4.last().first()), TestAnimation::Running);
group.setCurrentTime(1500); //anim2 should be started
QCOMPARE(group.state(), QAnimationGroup::Running);
- QCOMPARE(spy1.count(), 0); //no change
- QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy1.size(), 0); //no change
+ QCOMPARE(spy2.size(), 1);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy2.last().first()), TestAnimation::Running);
- QCOMPARE(spy3.count(), 1); //no change
- QCOMPARE(spy4.count(), 1); //no change
+ QCOMPARE(spy3.size(), 1); //no change
+ QCOMPARE(spy4.size(), 1); //no change
group.setCurrentTime(500); //anim1 is finally also started
QCOMPARE(group.state(), QAnimationGroup::Running);
- QCOMPARE(spy1.count(), 1);
+ QCOMPARE(spy1.size(), 1);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy1.last().first()), TestAnimation::Running);
- QCOMPARE(spy2.count(), 1); //no change
- QCOMPARE(spy3.count(), 1); //no change
- QCOMPARE(spy4.count(), 1); //no change
+ QCOMPARE(spy2.size(), 1); //no change
+ QCOMPARE(spy3.size(), 1); //no change
+ QCOMPARE(spy4.size(), 1); //no change
group.setCurrentTime(0); //everything should be stopped
QCOMPARE(group.state(), QAnimationGroup::Stopped);
- QCOMPARE(spy1.count(), 2);
+ QCOMPARE(spy1.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy1.last().first()), TestAnimation::Stopped);
- QCOMPARE(spy2.count(), 2);
+ QCOMPARE(spy2.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy2.last().first()), TestAnimation::Stopped);
- QCOMPARE(spy3.count(), 2);
+ QCOMPARE(spy3.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy3.last().first()), TestAnimation::Stopped);
- QCOMPARE(spy4.count(), 2);
+ QCOMPARE(spy4.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy4.last().first()), TestAnimation::Stopped);
}
@@ -430,8 +406,8 @@ void tst_QParallelAnimationGroup::updateChildrenWithRunningGroup()
QVERIFY(groupStateChangedSpy.isValid());
QVERIFY(childStateChangedSpy.isValid());
- QCOMPARE(groupStateChangedSpy.count(), 0);
- QCOMPARE(childStateChangedSpy.count(), 0);
+ QCOMPARE(groupStateChangedSpy.size(), 0);
+ QCOMPARE(childStateChangedSpy.size(), 0);
QCOMPARE(group.state(), QAnimationGroup::Stopped);
QCOMPARE(anim.state(), QAnimationGroup::Stopped);
@@ -442,8 +418,8 @@ void tst_QParallelAnimationGroup::updateChildrenWithRunningGroup()
QCOMPARE(group.state(), QAnimationGroup::Running);
QCOMPARE(anim.state(), QAnimationGroup::Running);
- QCOMPARE(groupStateChangedSpy.count(), 1);
- QCOMPARE(childStateChangedSpy.count(), 1);
+ QCOMPARE(groupStateChangedSpy.size(), 1);
+ QCOMPARE(childStateChangedSpy.size(), 1);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(groupStateChangedSpy.at(0).first()),
QAnimationGroup::Running);
@@ -453,8 +429,8 @@ void tst_QParallelAnimationGroup::updateChildrenWithRunningGroup()
// starting directly a running child will not have any effect
anim.start();
- QCOMPARE(groupStateChangedSpy.count(), 1);
- QCOMPARE(childStateChangedSpy.count(), 1);
+ QCOMPARE(groupStateChangedSpy.size(), 1);
+ QCOMPARE(childStateChangedSpy.size(), 1);
anim.pause();
@@ -597,8 +573,8 @@ void tst_QParallelAnimationGroup::startGroupWithRunningChild()
QVERIFY(stateChangedSpy1.isValid());
QVERIFY(stateChangedSpy2.isValid());
- QCOMPARE(stateChangedSpy1.count(), 0);
- QCOMPARE(stateChangedSpy2.count(), 0);
+ QCOMPARE(stateChangedSpy1.size(), 0);
+ QCOMPARE(stateChangedSpy2.size(), 0);
QCOMPARE(group.state(), QAnimationGroup::Stopped);
QCOMPARE(anim1.state(), QAnimationGroup::Stopped);
QCOMPARE(anim2.state(), QAnimationGroup::Stopped);
@@ -623,13 +599,13 @@ void tst_QParallelAnimationGroup::startGroupWithRunningChild()
group.start();
- QCOMPARE(stateChangedSpy1.count(), 3);
+ QCOMPARE(stateChangedSpy1.size(), 3);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy1.at(1).first()),
QAnimationGroup::Stopped);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy1.at(2).first()),
QAnimationGroup::Running);
- QCOMPARE(stateChangedSpy2.count(), 4);
+ QCOMPARE(stateChangedSpy2.size(), 4);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy2.at(2).first()),
QAnimationGroup::Stopped);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy2.at(3).first()),
@@ -680,22 +656,22 @@ void tst_QParallelAnimationGroup::zeroDurationAnimation()
group.addAnimation(&anim1);
group.addAnimation(&anim2);
group.addAnimation(&anim3);
- QCOMPARE(stateChangedSpy1.count(), 0);
+ QCOMPARE(stateChangedSpy1.size(), 0);
group.start();
- QCOMPARE(stateChangedSpy1.count(), 2);
- QCOMPARE(finishedSpy1.count(), 1);
+ QCOMPARE(stateChangedSpy1.size(), 2);
+ QCOMPARE(finishedSpy1.size(), 1);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy1.at(0).first()),
QAnimationGroup::Running);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy1.at(1).first()),
QAnimationGroup::Stopped);
- QCOMPARE(stateChangedSpy2.count(), 1);
- QCOMPARE(finishedSpy2.count(), 0);
+ QCOMPARE(stateChangedSpy2.size(), 1);
+ QCOMPARE(finishedSpy2.size(), 0);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy1.at(0).first()),
QAnimationGroup::Running);
- QCOMPARE(stateChangedSpy3.count(), 1);
- QCOMPARE(finishedSpy3.count(), 0);
+ QCOMPARE(stateChangedSpy3.size(), 1);
+ QCOMPARE(finishedSpy3.size(), 0);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy3.at(0).first()),
QAnimationGroup::Running);
@@ -713,21 +689,21 @@ void tst_QParallelAnimationGroup::zeroDurationAnimation()
stateChangedSpy3.clear();
group.start();
- QCOMPARE(stateChangedSpy1.count(), 2);
- QCOMPARE(stateChangedSpy2.count(), 1);
- QCOMPARE(stateChangedSpy3.count(), 1);
+ QCOMPARE(stateChangedSpy1.size(), 2);
+ QCOMPARE(stateChangedSpy2.size(), 1);
+ QCOMPARE(stateChangedSpy3.size(), 1);
group.setCurrentTime(50);
- QCOMPARE(stateChangedSpy1.count(), 2);
- QCOMPARE(stateChangedSpy2.count(), 1);
- QCOMPARE(stateChangedSpy3.count(), 2);
+ QCOMPARE(stateChangedSpy1.size(), 2);
+ QCOMPARE(stateChangedSpy2.size(), 1);
+ QCOMPARE(stateChangedSpy3.size(), 2);
group.setCurrentTime(150);
- QCOMPARE(stateChangedSpy1.count(), 4);
- QCOMPARE(stateChangedSpy2.count(), 3);
- QCOMPARE(stateChangedSpy3.count(), 4);
+ QCOMPARE(stateChangedSpy1.size(), 4);
+ QCOMPARE(stateChangedSpy2.size(), 3);
+ QCOMPARE(stateChangedSpy3.size(), 4);
group.setCurrentTime(50);
- QCOMPARE(stateChangedSpy1.count(), 6);
- QCOMPARE(stateChangedSpy2.count(), 5);
- QCOMPARE(stateChangedSpy3.count(), 6);
+ QCOMPARE(stateChangedSpy1.size(), 6);
+ QCOMPARE(stateChangedSpy2.size(), 5);
+ QCOMPARE(stateChangedSpy3.size(), 6);
}
@@ -759,7 +735,7 @@ void tst_QParallelAnimationGroup::stopUncontrolledAnimations()
group.start();
- QCOMPARE(stateChangedSpy.count(), 2);
+ QCOMPARE(stateChangedSpy.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy.at(0).first()),
QAnimationGroup::Running);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy.at(1).first()),
@@ -953,6 +929,7 @@ void tst_QParallelAnimationGroup::autoAdd()
test = static_cast<TestAnimation2*>(group.animationAt(0));
test->setParent(0); // remove the last one (with duration = 250)
+ const auto deleteParentlessObject = qScopeGuard([test] { delete test; });
QCOMPARE(test->group(), static_cast<QAnimationGroup*>(0));
QCOMPARE(group.duration(), 0);
}
@@ -968,7 +945,7 @@ void tst_QParallelAnimationGroup::pauseResume()
QTest::qWait(100);
QCOMPARE(group.state(), QAnimationGroup::Running);
QCOMPARE(anim->state(), QAnimationGroup::Running);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
const int currentTime = group.currentLoopTime();
QCOMPARE(anim->currentLoopTime(), currentTime);
@@ -978,7 +955,7 @@ void tst_QParallelAnimationGroup::pauseResume()
QCOMPARE(group.currentLoopTime(), currentTime);
QCOMPARE(anim->state(), QAnimationGroup::Paused);
QCOMPARE(anim->currentLoopTime(), currentTime);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
group.resume();
@@ -986,21 +963,21 @@ void tst_QParallelAnimationGroup::pauseResume()
QCOMPARE(group.currentLoopTime(), currentTime);
QCOMPARE(anim->state(), QAnimationGroup::Running);
QCOMPARE(anim->currentLoopTime(), currentTime);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
group.stop();
spy.clear();
new TestAnimation2(500, &group);
group.start();
- QCOMPARE(spy.count(), 1); //the animation should have been started
+ QCOMPARE(spy.size(), 1); //the animation should have been started
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy.last().first()), TestAnimation::Running);
group.setCurrentTime(250); //end of first animation
- QCOMPARE(spy.count(), 2); //the animation should have been stopped
+ QCOMPARE(spy.size(), 2); //the animation should have been stopped
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(spy.last().first()), TestAnimation::Stopped);
group.pause();
- QCOMPARE(spy.count(), 2); //this shouldn't have changed
+ QCOMPARE(spy.size(), 2); //this shouldn't have changed
group.resume();
- QCOMPARE(spy.count(), 2); //this shouldn't have changed
+ QCOMPARE(spy.size(), 2); //this shouldn't have changed
}
// This is a regression test for QTBUG-8910, where a crash occurred when the
diff --git a/tests/auto/corelib/animation/qpauseanimation/CMakeLists.txt b/tests/auto/corelib/animation/qpauseanimation/CMakeLists.txt
index bc846d33e7..aa0cb1edc5 100644
--- a/tests/auto/corelib/animation/qpauseanimation/CMakeLists.txt
+++ b/tests/auto/corelib/animation/qpauseanimation/CMakeLists.txt
@@ -1,12 +1,20 @@
-# Generated from qpauseanimation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpauseanimation Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpauseanimation LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpauseanimation
SOURCES
tst_qpauseanimation.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp b/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp
index 0688eafda8..8b11656706 100644
--- a/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp
+++ b/tests/auto/corelib/animation/qpauseanimation/tst_qpauseanimation.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <QtTest/private/qpropertytesthelper_p.h>
#include <QtCore/qpauseanimation.h>
#include <QtCore/qpropertyanimation.h>
@@ -36,7 +12,7 @@
#include <private/qabstractanimation_p.h>
-#if defined(Q_OS_WIN) || defined(Q_OS_ANDROID)
+#if defined(Q_OS_WIN) || defined(Q_OS_ANDROID) || defined(Q_OS_QNX)
# define BAD_TIMER_RESOLUTION
#endif
@@ -481,6 +457,12 @@ void tst_QPauseAnimation::bindings()
"QPauseAnimation::setDuration: cannot set a negative duration");
animation.setDuration(-1);
QCOMPARE(durationObserver, 46);
+
+ QTestPrivate::testReadWritePropertyBasics(animation, 10, 20, "duration");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QPauseAnimation::duration");
+ return;
+ }
}
QTEST_MAIN(tst_QPauseAnimation)
diff --git a/tests/auto/corelib/animation/qpropertyanimation/CMakeLists.txt b/tests/auto/corelib/animation/qpropertyanimation/CMakeLists.txt
index 89a4d0a8e1..38383aff46 100644
--- a/tests/auto/corelib/animation/qpropertyanimation/CMakeLists.txt
+++ b/tests/auto/corelib/animation/qpropertyanimation/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qpropertyanimation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpropertyanimation Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpropertyanimation LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpropertyanimation
SOURCES
tst_qpropertyanimation.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::Widgets
diff --git a/tests/auto/corelib/animation/qpropertyanimation/tst_qpropertyanimation.cpp b/tests/auto/corelib/animation/qpropertyanimation/tst_qpropertyanimation.cpp
index 88bfe0dc9f..03755fa7ab 100644
--- a/tests/auto/corelib/animation/qpropertyanimation/tst_qpropertyanimation.cpp
+++ b/tests/auto/corelib/animation/qpropertyanimation/tst_qpropertyanimation.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 <QTest>
#include <QtTest/private/qpropertytesthelper_p.h>
@@ -308,9 +283,9 @@ void tst_QPropertyAnimation::statesAndSignals()
anim->setCurrentTime(1);
anim->setCurrentTime(100);
- QCOMPARE(finishedSpy.count(), 0);
- QCOMPARE(runningSpy.count(), 0);
- QCOMPARE(currentLoopSpy.count(), 0);
+ QCOMPARE(finishedSpy.size(), 0);
+ QCOMPARE(runningSpy.size(), 0);
+ QCOMPARE(currentLoopSpy.size(), 0);
QCOMPARE(anim->state(), QAnimationGroup::Stopped);
anim->setLoopCount(3);
@@ -319,26 +294,26 @@ void tst_QPropertyAnimation::statesAndSignals()
if (uncontrolled)
QSKIP("Uncontrolled animations don't handle looping");
- QCOMPARE(currentLoopSpy.count(), 1);
+ QCOMPARE(currentLoopSpy.size(), 1);
QCOMPARE(anim->currentLoop(), 1);
anim->setCurrentTime(0);
- QCOMPARE(currentLoopSpy.count(), 2);
+ QCOMPARE(currentLoopSpy.size(), 2);
QCOMPARE(anim->currentLoop(), 0);
anim->start();
QCOMPARE(anim->state(), QAnimationGroup::Running);
- QCOMPARE(runningSpy.count(), 1); //anim must have started
+ QCOMPARE(runningSpy.size(), 1); //anim must have started
QCOMPARE(anim->currentLoop(), 0);
runningSpy.clear();
anim->stop();
QCOMPARE(anim->state(), QAnimationGroup::Stopped);
- QCOMPARE(runningSpy.count(), 1); //anim must have stopped
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(runningSpy.size(), 1); //anim must have stopped
+ QCOMPARE(finishedSpy.size(), 0);
QCOMPARE(anim->currentLoopTime(), 0);
QCOMPARE(anim->currentLoop(), 0);
- QCOMPARE(currentLoopSpy.count(), 2);
+ QCOMPARE(currentLoopSpy.size(), 2);
runningSpy.clear();
{
@@ -346,30 +321,30 @@ void tst_QPropertyAnimation::statesAndSignals()
anim->start();
timeDriver.wait(1000);
QCOMPARE(anim->state(), QAnimationGroup::Stopped);
- QCOMPARE(runningSpy.count(), 2); //started and stopped again
+ QCOMPARE(runningSpy.size(), 2); //started and stopped again
runningSpy.clear();
- QCOMPARE(finishedSpy.count(), 1);
+ QCOMPARE(finishedSpy.size(), 1);
QCOMPARE(anim->currentLoopTime(), 100);
QCOMPARE(anim->currentLoop(), 2);
- QCOMPARE(currentLoopSpy.count(), 4);
+ QCOMPARE(currentLoopSpy.size(), 4);
anim->start(); // auto-rewinds
QCOMPARE(anim->state(), QAnimationGroup::Running);
QCOMPARE(anim->currentTime(), 0);
QCOMPARE(anim->currentLoop(), 0);
- QCOMPARE(currentLoopSpy.count(), 5);
- QCOMPARE(runningSpy.count(), 1); // anim has started
- QCOMPARE(finishedSpy.count(), 1);
+ QCOMPARE(currentLoopSpy.size(), 5);
+ QCOMPARE(runningSpy.size(), 1); // anim has started
+ QCOMPARE(finishedSpy.size(), 1);
QCOMPARE(anim->currentLoop(), 0);
runningSpy.clear();
timeDriver.wait(1000);
- QCOMPARE(currentLoopSpy.count(), 7);
+ QCOMPARE(currentLoopSpy.size(), 7);
QCOMPARE(anim->state(), QAnimationGroup::Stopped);
QCOMPARE(anim->currentLoop(), 2);
- QCOMPARE(runningSpy.count(), 1); // anim has stopped
- QCOMPARE(finishedSpy.count(), 2);
+ QCOMPARE(runningSpy.size(), 1); // anim has stopped
+ QCOMPARE(finishedSpy.size(), 2);
QCOMPARE(anim->currentLoopTime(), 100);
}
}
@@ -389,8 +364,8 @@ void tst_QPropertyAnimation::deletion1()
anim->setEndValue(20);
anim->setDuration(200);
anim->start();
- QCOMPARE(runningSpy.count(), 1);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(runningSpy.size(), 1);
+ QCOMPARE(finishedSpy.size(), 0);
QVERIFY(anim);
QCOMPARE(anim->state(), QAnimationGroup::Running);
@@ -400,8 +375,8 @@ void tst_QPropertyAnimation::deletion1()
timeDriver.wait(150);
QVERIFY(anim); //The animation should not have been deleted
QCOMPARE(anim->state(), QAnimationGroup::Stopped);
- QCOMPARE(runningSpy.count(), 2);
- QCOMPARE(finishedSpy.count(), 1);
+ QCOMPARE(runningSpy.size(), 2);
+ QCOMPARE(finishedSpy.size(), 1);
anim->start(QVariantAnimation::DeleteWhenStopped);
QVERIFY(anim);
@@ -410,8 +385,8 @@ void tst_QPropertyAnimation::deletion1()
QVERIFY(anim);
QCOMPARE(anim->state(), QAnimationGroup::Running);
timeDriver.wait(150);
- QCOMPARE(runningSpy.count(), 4);
- QCOMPARE(finishedSpy.count(), 2);
+ QCOMPARE(runningSpy.size(), 4);
+ QCOMPARE(finishedSpy.size(), 2);
QVERIFY(!anim); //The animation must have been deleted
delete object;
}
@@ -442,8 +417,8 @@ void tst_QPropertyAnimation::deletion2()
QVERIFY(anim);
QCOMPARE(anim->state(), QAnimationGroup::Running);
- QCOMPARE(runningSpy.count(), 1);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(runningSpy.size(), 1);
+ QCOMPARE(finishedSpy.size(), 0);
//we can't call deletaLater directly because the delete would only happen in the next loop of _this_ event loop
QTimer::singleShot(0, object, SLOT(deleteLater()));
@@ -476,11 +451,11 @@ void tst_QPropertyAnimation::deletion3()
timeDriver.wait(50);
QCOMPARE(anim->state(), QAnimationGroup::Running);
- QCOMPARE(runningSpy.count(), 1);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(runningSpy.size(), 1);
+ QCOMPARE(finishedSpy.size(), 0);
delete anim;
- QCOMPARE(runningSpy.count(), 2);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(runningSpy.size(), 2);
+ QCOMPARE(finishedSpy.size(), 0);
}
void tst_QPropertyAnimation::duration0()
@@ -572,7 +547,7 @@ void tst_QPropertyAnimation::startWhenAnotherIsRunning()
QVERIFY(runningSpy.isValid());
anim->start(QVariantAnimation::DeleteWhenStopped);
timeDriver.wait(anim->duration());
- QCOMPARE(runningSpy.count(), 2); //started and then stopped
+ QCOMPARE(runningSpy.size(), 2); //started and then stopped
QVERIFY(!anim);
}
{
@@ -584,7 +559,7 @@ void tst_QPropertyAnimation::startWhenAnotherIsRunning()
timeDriver.wait(anim->duration()/2);
QPointer<QVariantAnimation> anim2 = new QPropertyAnimation(&o, "ole");
anim2->setEndValue(100);
- QCOMPARE(runningSpy.count(), 1);
+ QCOMPARE(runningSpy.size(), 1);
QCOMPARE(anim->state(), QVariantAnimation::Running);
//anim2 will interrupt anim1
@@ -933,7 +908,7 @@ void tst_QPropertyAnimation::zeroDurationStart()
anim.start();
//the animation stops immediately
QCOMPARE(anim.state(), QAbstractAnimation::Stopped);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
//let's check the first state change
const QVariantList firstChange = spy.first();
@@ -1218,8 +1193,8 @@ void tst_QPropertyAnimation::valueChanged()
QCOMPARE(anim.currentTime(), anim.duration());
//let's check that the values go forward
- QCOMPARE(spy.count(), 6); //we should have got everything from 0 to 5
- for (int i = 0; i < spy.count(); ++i) {
+ QCOMPARE(spy.size(), 6); //we should have got everything from 0 to 5
+ for (int i = 0; i < spy.size(); ++i) {
QCOMPARE(qvariant_cast<QVariant>(spy.at(i).first()).toInt(), i);
}
}
@@ -1349,15 +1324,15 @@ void tst_QPropertyAnimation::zeroLoopCount()
QCOMPARE(anim->state(), QAnimationGroup::Stopped);
QCOMPARE(anim->currentValue().toInt(), 0);
- QCOMPARE(runningSpy.count(), 0);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(runningSpy.size(), 0);
+ QCOMPARE(finishedSpy.size(), 0);
anim->start();
QCOMPARE(anim->state(), QAnimationGroup::Stopped);
QCOMPARE(anim->currentValue().toInt(), 0);
- QCOMPARE(runningSpy.count(), 0);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(runningSpy.size(), 0);
+ QCOMPARE(finishedSpy.size(), 0);
}
diff --git a/tests/auto/corelib/animation/qsequentialanimationgroup/BLACKLIST b/tests/auto/corelib/animation/qsequentialanimationgroup/BLACKLIST
index f07c0ec4a1..79053cbf68 100644
--- a/tests/auto/corelib/animation/qsequentialanimationgroup/BLACKLIST
+++ b/tests/auto/corelib/animation/qsequentialanimationgroup/BLACKLIST
@@ -1,5 +1,4 @@
[finishWithUncontrolledAnimation]
-windows-10 msvc-2015
macos
[groupWithZeroDurationAnimations]
macos
diff --git a/tests/auto/corelib/animation/qsequentialanimationgroup/CMakeLists.txt b/tests/auto/corelib/animation/qsequentialanimationgroup/CMakeLists.txt
index e56f9f6ff8..e2ebe8baa9 100644
--- a/tests/auto/corelib/animation/qsequentialanimationgroup/CMakeLists.txt
+++ b/tests/auto/corelib/animation/qsequentialanimationgroup/CMakeLists.txt
@@ -1,10 +1,19 @@
-# Generated from qsequentialanimationgroup.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsequentialanimationgroup Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsequentialanimationgroup LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsequentialanimationgroup
SOURCES
tst_qsequentialanimationgroup.cpp
+ LIBRARIES
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/animation/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp b/tests/auto/corelib/animation/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
index fbe3ffe4ae..7555622162 100644
--- a/tests/auto/corelib/animation/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
+++ b/tests/auto/corelib/animation/qsequentialanimationgroup/tst_qsequentialanimationgroup.cpp
@@ -1,32 +1,9 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <QtTest/private/qpropertytesthelper_p.h>
+
#include <QVariantAnimation>
#include <QProperty>
#include <QPropertyAnimation>
@@ -576,8 +553,8 @@ using StateList = QList<QAbstractAnimation::State>;
static bool compareStates(const QSignalSpy& spy, const StateList &expectedStates)
{
bool equals = true;
- for (int i = 0; i < qMax(expectedStates.count(), spy.count()); ++i) {
- if (i >= spy.count() || i >= expectedStates.count()) {
+ for (int i = 0; i < qMax(expectedStates.size(), spy.size()); ++i) {
+ if (i >= spy.size() || i >= expectedStates.size()) {
equals = false;
break;
}
@@ -592,14 +569,14 @@ static bool compareStates(const QSignalSpy& spy, const StateList &expectedStates
if (!equals) {
const char *stateStrings[] = {"Stopped", "Paused", "Running"};
QString e,a;
- for (int i = 0; i < qMax(expectedStates.count(), spy.count()); ++i) {
- if (i < expectedStates.count()) {
+ for (int i = 0; i < qMax(expectedStates.size(), spy.size()); ++i) {
+ if (i < expectedStates.size()) {
int exp = int(expectedStates.at(i));
if (!e.isEmpty())
e += QLatin1String(", ");
e += QLatin1String(stateStrings[exp]);
}
- if (i < spy.count()) {
+ if (i < spy.size()) {
QList<QVariant> args = spy.at(i);
QAbstractAnimation::State actual = qvariant_cast<QAbstractAnimation::State>(args.value(1));
if (!a.isEmpty())
@@ -614,7 +591,7 @@ static bool compareStates(const QSignalSpy& spy, const StateList &expectedStates
}
qDebug("\n"
"expected (count == %zd): %s\n"
- "actual (count == %zd): %s\n", size_t(expectedStates.count()), qPrintable(e), size_t(spy.count()), qPrintable(a));
+ "actual (count == %zd): %s\n", size_t(expectedStates.size()), qPrintable(e), size_t(spy.size()), qPrintable(a));
}
return equals;
}
@@ -661,8 +638,8 @@ void tst_QSequentialAnimationGroup::pauseAndResume()
QCOMPARE(a2_s_o1->state(), QAnimationGroup::Stopped);
QCOMPARE(a3_s_o1->state(), QAnimationGroup::Paused);
- QCOMPARE(a1StateChangedSpy.count(), 5); // Running,Paused,Stopped,Running,Stopped
- QCOMPARE(seqStateChangedSpy.count(), 2); // Running,Paused
+ QCOMPARE(a1StateChangedSpy.size(), 5); // Running,Paused,Stopped,Running,Stopped
+ QCOMPARE(seqStateChangedSpy.size(), 2); // Running,Paused
QVERIFY(compareStates(a1StateChangedSpy, (StateList() << QAbstractAnimation::Running
<< QAbstractAnimation::Paused
@@ -703,7 +680,7 @@ void tst_QSequentialAnimationGroup::pauseAndResume()
QCOMPARE(a3_s_o1->currentLoop(), 0);
QVERIFY(a3_s_o1->currentLoopTime() >= 1);
- QCOMPARE(seqStateChangedSpy.count(), 3); // Running,Paused,Running
+ QCOMPARE(seqStateChangedSpy.size(), 3); // Running,Paused,Running
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(seqStateChangedSpy.at(2).first()),
QAnimationGroup::Running);
@@ -724,13 +701,13 @@ void tst_QSequentialAnimationGroup::pauseAndResume()
QCOMPARE(a3_s_o1->currentLoop(), 0);
QVERIFY(a3_s_o1->currentLoopTime() >= 1);
- QCOMPARE(seqStateChangedSpy.count(), 4); // Running,Paused,Running,Paused
+ QCOMPARE(seqStateChangedSpy.size(), 4); // Running,Paused,Running,Paused
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(seqStateChangedSpy.at(3).first()),
QAnimationGroup::Paused);
group.stop();
- QCOMPARE(seqStateChangedSpy.count(), 5); // Running,Paused,Running,Paused,Stopped
+ QCOMPARE(seqStateChangedSpy.size(), 5); // Running,Paused,Running,Paused,Stopped
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(seqStateChangedSpy.at(4).first()),
QAnimationGroup::Stopped);
}
@@ -774,7 +751,7 @@ void tst_QSequentialAnimationGroup::restart()
QTRY_COMPARE(group.state(), QAnimationGroup::Stopped);
for (int i = 0; i < 3; i++) {
- QCOMPARE(animsStateChanged[i]->count(), 4);
+ QCOMPARE(animsStateChanged[i]->size(), 4);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(animsStateChanged[i]->at(0).first()),
QAnimationGroup::Running);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(animsStateChanged[i]->at(1).first()),
@@ -785,22 +762,22 @@ void tst_QSequentialAnimationGroup::restart()
QAnimationGroup::Stopped);
}
- QCOMPARE(seqStateChangedSpy.count(), 2);
+ QCOMPARE(seqStateChangedSpy.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(seqStateChangedSpy.at(0).first()),
QAnimationGroup::Running);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(seqStateChangedSpy.at(1).first()),
QAnimationGroup::Stopped);
- QCOMPARE(seqCurrentAnimChangedSpy.count(), 6);
- for(int i=0; i<seqCurrentAnimChangedSpy.count(); i++)
+ QCOMPARE(seqCurrentAnimChangedSpy.size(), 6);
+ for(int i=0; i<seqCurrentAnimChangedSpy.size(); i++)
QCOMPARE(static_cast<QAbstractAnimation*>(anims[i%3]), qvariant_cast<QAbstractAnimation*>(seqCurrentAnimChangedSpy.at(i).at(0)));
group.start();
- QCOMPARE(animsStateChanged[0]->count(), 5);
- QCOMPARE(animsStateChanged[1]->count(), 4);
- QCOMPARE(animsStateChanged[2]->count(), 4);
- QCOMPARE(seqStateChangedSpy.count(), 3);
+ QCOMPARE(animsStateChanged[0]->size(), 5);
+ QCOMPARE(animsStateChanged[1]->size(), 4);
+ QCOMPARE(animsStateChanged[2]->size(), 4);
+ QCOMPARE(seqStateChangedSpy.size(), 3);
}
void tst_QSequentialAnimationGroup::looping()
@@ -856,21 +833,21 @@ void tst_QSequentialAnimationGroup::looping()
QCOMPARE(a2_s_o1->state(), QAnimationGroup::Stopped);
QCOMPARE(a3_s_o1->state(), QAnimationGroup::Paused);
- QCOMPARE(a1Spy.count(), 5); // Running,Paused,Stopped,Running,Stopped
+ QCOMPARE(a1Spy.size(), 5); // Running,Paused,Stopped,Running,Stopped
QVERIFY(compareStates(a1Spy, (StateList() << QAbstractAnimation::Running
<< QAbstractAnimation::Paused
<< QAbstractAnimation::Stopped
<< QAbstractAnimation::Running
<< QAbstractAnimation::Stopped)));
- QCOMPARE(a2Spy.count(), 4); // Running,Stopped,Running,Stopped
+ QCOMPARE(a2Spy.size(), 4); // Running,Stopped,Running,Stopped
QVERIFY(compareStates(a3Spy, (StateList() << QAbstractAnimation::Running
<< QAbstractAnimation::Stopped
<< QAbstractAnimation::Running
<< QAbstractAnimation::Paused)));
- QCOMPARE(seqSpy.count(), 2); // Running,Paused
- QCOMPARE(groupSpy.count(), 2); // Running,Paused
+ QCOMPARE(seqSpy.size(), 2); // Running,Paused
+ QCOMPARE(groupSpy.size(), 2); // Running,Paused
// Looping, current time = duration + 1
group.setCurrentTime(group.duration() + 1);
@@ -891,8 +868,8 @@ void tst_QSequentialAnimationGroup::looping()
QCOMPARE(a2_s_o1->state(), QAnimationGroup::Stopped);
QCOMPARE(a3_s_o1->state(), QAnimationGroup::Stopped);
- QCOMPARE(a1Spy.count(), 7); // Running,Paused,Stopped,Running,Stopped,Running,Stopped
- QCOMPARE(a2Spy.count(), 4); // Running, Stopped, Running, Stopped
+ QCOMPARE(a1Spy.size(), 7); // Running,Paused,Stopped,Running,Stopped,Running,Stopped
+ QCOMPARE(a2Spy.size(), 4); // Running, Stopped, Running, Stopped
QVERIFY(compareStates(a3Spy, (StateList() << QAbstractAnimation::Running
<< QAbstractAnimation::Stopped
<< QAbstractAnimation::Running
@@ -903,7 +880,7 @@ void tst_QSequentialAnimationGroup::looping()
<< QAbstractAnimation::Stopped
<< QAbstractAnimation::Running
<< QAbstractAnimation::Paused)));
- QCOMPARE(groupSpy.count(), 2);
+ QCOMPARE(groupSpy.size(), 2);
}
void tst_QSequentialAnimationGroup::startDelay()
@@ -1102,8 +1079,8 @@ void tst_QSequentialAnimationGroup::updateChildrenWithRunningGroup()
QVERIFY(groupStateChangedSpy.isValid());
QVERIFY(childStateChangedSpy.isValid());
- QCOMPARE(groupStateChangedSpy.count(), 0);
- QCOMPARE(childStateChangedSpy.count(), 0);
+ QCOMPARE(groupStateChangedSpy.size(), 0);
+ QCOMPARE(childStateChangedSpy.size(), 0);
QCOMPARE(group.state(), QAnimationGroup::Stopped);
QCOMPARE(anim.state(), QAnimationGroup::Stopped);
@@ -1114,8 +1091,8 @@ void tst_QSequentialAnimationGroup::updateChildrenWithRunningGroup()
QCOMPARE(group.state(), QAnimationGroup::Running);
QCOMPARE(anim.state(), QAnimationGroup::Running);
- QCOMPARE(groupStateChangedSpy.count(), 1);
- QCOMPARE(childStateChangedSpy.count(), 1);
+ QCOMPARE(groupStateChangedSpy.size(), 1);
+ QCOMPARE(childStateChangedSpy.size(), 1);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(groupStateChangedSpy.at(0).first()),
QAnimationGroup::Running);
@@ -1125,8 +1102,8 @@ void tst_QSequentialAnimationGroup::updateChildrenWithRunningGroup()
// starting directly a running child will not have any effect
anim.start();
- QCOMPARE(groupStateChangedSpy.count(), 1);
- QCOMPARE(childStateChangedSpy.count(), 1);
+ QCOMPARE(groupStateChangedSpy.size(), 1);
+ QCOMPARE(childStateChangedSpy.size(), 1);
anim.pause();
@@ -1269,8 +1246,8 @@ void tst_QSequentialAnimationGroup::startGroupWithRunningChild()
QVERIFY(stateChangedSpy1.isValid());
QVERIFY(stateChangedSpy2.isValid());
- QCOMPARE(stateChangedSpy1.count(), 0);
- QCOMPARE(stateChangedSpy2.count(), 0);
+ QCOMPARE(stateChangedSpy1.size(), 0);
+ QCOMPARE(stateChangedSpy2.size(), 0);
QCOMPARE(group.state(), QAnimationGroup::Stopped);
QCOMPARE(anim1->state(), QAnimationGroup::Stopped);
QCOMPARE(anim2->state(), QAnimationGroup::Stopped);
@@ -1308,7 +1285,7 @@ void tst_QSequentialAnimationGroup::startGroupWithRunningChild()
QCOMPARE(group.state(), QAnimationGroup::Running);
QCOMPARE(anim2->state(), QAnimationGroup::Running);
- QCOMPARE(stateChangedSpy2.count(), 4);
+ QCOMPARE(stateChangedSpy2.size(), 4);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy2.at(2).first()),
QAnimationGroup::Stopped);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy2.at(3).first()),
@@ -1348,7 +1325,7 @@ void tst_QSequentialAnimationGroup::zeroDurationAnimation()
group.setLoopCount(2);
group.start();
- QCOMPARE(stateChangedSpy.count(), 2);
+ QCOMPARE(stateChangedSpy.size(), 2);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy.at(0).first()),
QAnimationGroup::Running);
QCOMPARE(qvariant_cast<QAbstractAnimation::State>(stateChangedSpy.at(1).first()),
@@ -1425,7 +1402,7 @@ void tst_QSequentialAnimationGroup::finishWithUncontrolledAnimation()
const int actualDuration = notTimeDriven.currentLoopTime();
QCOMPARE(group.state(), QAnimationGroup::Stopped);
QCOMPARE(group.currentLoopTime(), actualDuration);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
//2nd case:
// lets make sure the seeking will work again
@@ -1441,29 +1418,29 @@ void tst_QSequentialAnimationGroup::finishWithUncontrolledAnimation()
//3rd case:
//now let's add a perfectly defined animation at the end
- QCOMPARE(animStateChangedSpy.count(), 0);
+ QCOMPARE(animStateChangedSpy.size(), 0);
group.start();
QCOMPARE(group.state(), QAnimationGroup::Running);
QCOMPARE(notTimeDriven.state(), QAnimationGroup::Running);
QCOMPARE(group.currentLoopTime(), 0);
QCOMPARE(notTimeDriven.currentLoopTime(), 0);
- QCOMPARE(animStateChangedSpy.count(), 0);
+ QCOMPARE(animStateChangedSpy.size(), 0);
QTest::qWait(300); //wait for the end of notTimeDriven
QTRY_COMPARE(notTimeDriven.state(), QAnimationGroup::Stopped);
QCOMPARE(group.state(), QAnimationGroup::Running);
QCOMPARE(anim.state(), QAnimationGroup::Running);
QCOMPARE(group.currentAnimation(), static_cast<QAbstractAnimation*>(&anim));
- QCOMPARE(animStateChangedSpy.count(), 1);
+ QCOMPARE(animStateChangedSpy.size(), 1);
QTest::qWait(300); //wait for the end of anim
QTRY_COMPARE(anim.state(), QAnimationGroup::Stopped);
QCOMPARE(anim.currentLoopTime(), anim.duration());
//we should simply be at the end
- QCOMPARE(spy.count(), 1);
- QCOMPARE(animStateChangedSpy.count(), 2);
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(animStateChangedSpy.size(), 2);
QCOMPARE(group.currentLoopTime(), notTimeDriven.currentLoopTime() + anim.currentLoopTime());
}
@@ -1648,7 +1625,7 @@ void tst_QSequentialAnimationGroup::pauseResume()
QTest::qWait(100);
QTRY_COMPARE(group.state(), QAnimationGroup::Running);
QCOMPARE(anim->state(), QAnimationGroup::Running);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
const int currentTime = group.currentLoopTime();
QCOMPARE(anim->currentLoopTime(), currentTime);
@@ -1658,7 +1635,7 @@ void tst_QSequentialAnimationGroup::pauseResume()
QCOMPARE(group.currentLoopTime(), currentTime);
QCOMPARE(anim->state(), QAnimationGroup::Paused);
QCOMPARE(anim->currentLoopTime(), currentTime);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
group.resume();
@@ -1666,7 +1643,7 @@ void tst_QSequentialAnimationGroup::pauseResume()
QCOMPARE(group.currentLoopTime(), currentTime);
QCOMPARE(anim->state(), QAnimationGroup::Running);
QCOMPARE(anim->currentLoopTime(), currentTime);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QSequentialAnimationGroup::bindings()
@@ -1692,24 +1669,33 @@ void tst_QSequentialAnimationGroup::bindings()
group.setCurrentTime(int(totalDuration * 0.5 / 3));
QCOMPARE(currentAnim.value(), anim1.get());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
group.setCurrentTime(int(totalDuration * 1.5 / 3));
QCOMPARE(currentAnim.value(), anim2.get());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
// change to other style of formulating a binding to test both
currentAnim.setBinding(group.bindableCurrentAnimation().makeBinding());
group.setCurrentTime(int(totalDuration * 2.5 / 3));
QCOMPARE(currentAnim.value(), anim3.get());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
// currentAnimation is read-only. Binding it to something should have no effect
QProperty<QAbstractAnimation *> leader;
group.bindableCurrentAnimation().setBinding([&]() { return leader.value(); });
QCOMPARE(group.currentAnimation(), anim3.get());
+
+ QTestPrivate::testReadOnlyPropertyBasics(group, anim3.get(), anim2.get(), "currentAnimation",
+ [&group, totalDuration]() {
+ group.setCurrentTime(int(totalDuration * 1.5 / 3));
+ });
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QSequentialAnimationGroup::currentAnimation");
+ return;
+ }
}
QTEST_MAIN(tst_QSequentialAnimationGroup)
diff --git a/tests/auto/corelib/animation/qvariantanimation/CMakeLists.txt b/tests/auto/corelib/animation/qvariantanimation/CMakeLists.txt
index 08fd743e33..9abc16040f 100644
--- a/tests/auto/corelib/animation/qvariantanimation/CMakeLists.txt
+++ b/tests/auto/corelib/animation/qvariantanimation/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qvariantanimation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qvariantanimation Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qvariantanimation LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qvariantanimation
SOURCES
tst_qvariantanimation.cpp
diff --git a/tests/auto/corelib/animation/qvariantanimation/tst_qvariantanimation.cpp b/tests/auto/corelib/animation/qvariantanimation/tst_qvariantanimation.cpp
index cbb73296b4..661c4b8108 100644
--- a/tests/auto/corelib/animation/qvariantanimation/tst_qvariantanimation.cpp
+++ b/tests/auto/corelib/animation/qvariantanimation/tst_qvariantanimation.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 <QtCore/qvariantanimation.h>
diff --git a/tests/auto/corelib/global/CMakeLists.txt b/tests/auto/corelib/global/CMakeLists.txt
index fe63402288..7970116672 100644
--- a/tests/auto/corelib/global/CMakeLists.txt
+++ b/tests/auto/corelib/global/CMakeLists.txt
@@ -1,7 +1,10 @@
-# Generated from global.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
if(NOT INTEGRITY)
add_subdirectory(qcompare)
endif()
+add_subdirectory(qcomparehelpers)
add_subdirectory(qflags)
add_subdirectory(q_func_info)
add_subdirectory(qgetputenv)
@@ -18,6 +21,5 @@ add_subdirectory(qtendian)
add_subdirectory(qglobalstatic)
add_subdirectory(qhooks)
add_subdirectory(qoperatingsystemversion)
-if(WIN32)
- add_subdirectory(qwinregistry)
-endif()
+add_subdirectory(qxp)
+add_subdirectory(q20)
diff --git a/tests/auto/corelib/global/q20/CMakeLists.txt b/tests/auto/corelib/global/q20/CMakeLists.txt
new file mode 100644
index 0000000000..bd28f8b999
--- /dev/null
+++ b/tests/auto/corelib/global/q20/CMakeLists.txt
@@ -0,0 +1 @@
+add_subdirectory(memory)
diff --git a/tests/auto/corelib/global/q20/memory/CMakeLists.txt b/tests/auto/corelib/global/q20/memory/CMakeLists.txt
new file mode 100644
index 0000000000..f36ff0f592
--- /dev/null
+++ b/tests/auto/corelib/global/q20/memory/CMakeLists.txt
@@ -0,0 +1,16 @@
+# 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_q20_memory LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_q20_memory
+ EXCEPTIONS
+ SOURCES
+ tst_q20_memory.cpp
+ LIBRARIES
+ Qt::Core
+)
diff --git a/tests/auto/corelib/global/q20/memory/tst_q20_memory.cpp b/tests/auto/corelib/global/q20/memory/tst_q20_memory.cpp
new file mode 100644
index 0000000000..22dbb09e7c
--- /dev/null
+++ b/tests/auto/corelib/global/q20/memory/tst_q20_memory.cpp
@@ -0,0 +1,161 @@
+// Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+#include <q20memory.h>
+#include <QtCore/q20memory.h>
+
+#include <QTest>
+#include <QObject>
+#include <QExplicitlySharedDataPointer>
+#include <QSharedDataPointer>
+
+struct Private : QSharedData {};
+
+class tst_q20_memory : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void raw();
+ void smart();
+ void recursion();
+ void usesPointerTraits();
+ void prefersPointerTraits();
+
+private Q_SLOTS:
+ void to_address_broken_const_propagation_QExplicitlySharedDataPointer()
+ { to_address_broken_const_propagation<QExplicitlySharedDataPointer<Private>>(); }
+ void to_address_broken_const_propagation_QSharedDataPointer()
+ { to_address_broken_const_propagation<QSharedDataPointer<Private>>(); }
+ void to_address_broken_const_propagation_shared_ptr()
+ { to_address_broken_const_propagation<std::shared_ptr<Private>>(); }
+ void to_address_broken_const_propagation_unique_ptr()
+ { to_address_broken_const_propagation<std::unique_ptr<Private>>(); }
+
+private:
+ template <typename Pointer>
+ void to_address_broken_const_propagation();
+};
+
+void tst_q20_memory::raw()
+{
+ auto i = 0;
+ auto p = &i;
+ QVERIFY(q20::to_address(p) == &i);
+}
+
+template <typename T>
+class MinimalPtr {
+public:
+ using element_type = T;
+
+ explicit MinimalPtr(T *d) : d(d) {}
+
+ T *operator->() const noexcept { return d; }
+
+private:
+ T *d;
+};
+
+void tst_q20_memory::smart()
+{
+ int i;
+ MinimalPtr ptr(&i);
+ QCOMPARE_EQ(q20::to_address(ptr), &i);
+}
+
+template <typename T>
+class RecursivePtr {
+public:
+ using element_type = T;
+
+ explicit RecursivePtr(T *d) : d(d) {}
+
+ MinimalPtr<T> operator->() const noexcept { return d; }
+
+private:
+ MinimalPtr<T> d;
+};
+
+void tst_q20_memory::recursion()
+{
+ int i;
+ RecursivePtr ptr(&i);
+ QCOMPARE_EQ(q20::to_address(ptr), &i);
+}
+
+template <typename T>
+class NoDerefOperatorPtr {
+public:
+ using element_type = T;
+
+ explicit NoDerefOperatorPtr(T *d) : d(d) {}
+
+ T *get() const noexcept { return d; }
+
+private:
+ T *d;
+};
+
+namespace std {
+template <typename T>
+struct pointer_traits<NoDerefOperatorPtr<T>>
+{
+ static T *to_address(const NoDerefOperatorPtr<T> &ptr) noexcept { return ptr.get(); }
+};
+} // namespace std
+
+void tst_q20_memory::usesPointerTraits()
+{
+ int i;
+ NoDerefOperatorPtr ptr(&i);
+ QCOMPARE_EQ(q20::to_address(ptr), &i);
+}
+
+template <typename T>
+class PrefersPointerTraitsPtr
+{
+public:
+ using element_type = T;
+
+ explicit PrefersPointerTraitsPtr(T *d) : d(d) {}
+
+ T *operator->() const noexcept { return nullptr; }
+
+ T *get() const noexcept { return d; }
+
+private:
+ T *d;
+};
+
+namespace std {
+template <typename T>
+struct pointer_traits<PrefersPointerTraitsPtr<T>>
+{
+ static T *to_address(const PrefersPointerTraitsPtr<T> &p) noexcept { return p.get(); }
+};
+} // namespace std
+
+void tst_q20_memory::prefersPointerTraits()
+{
+ int i;
+ PrefersPointerTraitsPtr ptr(&i);
+ QCOMPARE_EQ(q20::to_address(ptr), &i);
+}
+
+template <typename Pointer>
+void tst_q20_memory::to_address_broken_const_propagation()
+{
+ Pointer p(nullptr);
+ QCOMPARE_EQ(q20::to_address(p), nullptr);
+ p = Pointer{new Private()};
+ QCOMPARE_EQ(q20::to_address(p), p.operator->());
+ static_assert(std::is_same_v<decltype(q20::to_address(p)),
+ decltype(std::as_const(p).operator->())>);
+}
+
+QTEST_GUILESS_MAIN(tst_q20_memory)
+#include "tst_q20_memory.moc"
+
diff --git a/tests/auto/corelib/global/q_func_info/CMakeLists.txt b/tests/auto/corelib/global/q_func_info/CMakeLists.txt
index 93257c31de..88119484cd 100644
--- a/tests/auto/corelib/global/q_func_info/CMakeLists.txt
+++ b/tests/auto/corelib/global/q_func_info/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from q_func_info.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_q_func_info Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_q_func_info LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_q_func_info
SOURCES
tst_q_func_info.cpp
diff --git a/tests/auto/corelib/global/q_func_info/tst_q_func_info.cpp b/tests/auto/corelib/global/q_func_info/tst_q_func_info.cpp
index 9d6bc15d73..b288f1d3a1 100644
--- a/tests/auto/corelib/global/q_func_info/tst_q_func_info.cpp
+++ b/tests/auto/corelib/global/q_func_info/tst_q_func_info.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 <QString>
diff --git a/tests/auto/corelib/global/qcompare/CMakeLists.txt b/tests/auto/corelib/global/qcompare/CMakeLists.txt
index 0fbf696d0e..b29dcae618 100644
--- a/tests/auto/corelib/global/qcompare/CMakeLists.txt
+++ b/tests/auto/corelib/global/qcompare/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qcompare.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcompare Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcompare LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcompare
SOURCES
tst_qcompare.cpp
diff --git a/tests/auto/corelib/global/qcompare/tst_qcompare.cpp b/tests/auto/corelib/global/qcompare/tst_qcompare.cpp
index 61ea0eddc4..e36429e62b 100644
--- a/tests/auto/corelib/global/qcompare/tst_qcompare.cpp
+++ b/tests/auto/corelib/global/qcompare/tst_qcompare.cpp
@@ -1,54 +1,36 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
-** Contact: http://www.qt.io/licensing/
-**
-** This file is part of the QtCore module 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 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QtCompare>
#include <QtTest/QTest>
+#ifdef __cpp_lib_three_way_comparison
+#include <compare>
+#endif // __cpp_lib_three_way_comparison
+
class tst_QCompare: public QObject
{
Q_OBJECT
private slots:
+ void legacyPartialOrdering();
+ void legacyConversions();
+ void stdQtBinaryCompatibility();
void partialOrdering();
+ void weakOrdering();
+ void strongOrdering();
+ void threeWayCompareWithLiteralZero();
+ void conversions();
+ void is_eq_overloads();
+ void compareThreeWay();
};
-void tst_QCompare::partialOrdering()
+void tst_QCompare::legacyPartialOrdering()
{
+ static_assert(QPartialOrdering::Unordered == QPartialOrdering::unordered);
+ static_assert(QPartialOrdering::Less == QPartialOrdering::less);
+ static_assert(QPartialOrdering::Equivalent == QPartialOrdering::equivalent);
+ static_assert(QPartialOrdering::Greater == QPartialOrdering::greater);
+
static_assert(QPartialOrdering::Unordered == QPartialOrdering::Unordered);
static_assert(QPartialOrdering::Unordered != QPartialOrdering::Less);
static_assert(QPartialOrdering::Unordered != QPartialOrdering::Equivalent);
@@ -69,6 +51,12 @@ void tst_QCompare::partialOrdering()
static_assert(QPartialOrdering::Greater != QPartialOrdering::Equivalent);
static_assert(QPartialOrdering::Greater == QPartialOrdering::Greater);
+ static_assert(!is_eq (QPartialOrdering::Unordered));
+ static_assert(!is_neq (QPartialOrdering::Unordered));
+ static_assert(!is_lt (QPartialOrdering::Unordered));
+ static_assert(!is_lteq(QPartialOrdering::Unordered));
+ static_assert(!is_gt (QPartialOrdering::Unordered));
+ static_assert(!is_gteq(QPartialOrdering::Unordered));
static_assert(!(QPartialOrdering::Unordered == 0));
static_assert(!(QPartialOrdering::Unordered != 0));
@@ -85,6 +73,13 @@ void tst_QCompare::partialOrdering()
static_assert(!(0 >= QPartialOrdering::Unordered));
+ static_assert(!is_eq (QPartialOrdering::Less));
+ static_assert( is_neq (QPartialOrdering::Less));
+ static_assert( is_lt (QPartialOrdering::Less));
+ static_assert( is_lteq(QPartialOrdering::Less));
+ static_assert(!is_gt (QPartialOrdering::Less));
+ static_assert(!is_gteq(QPartialOrdering::Less));
+
static_assert(!(QPartialOrdering::Less == 0));
static_assert( (QPartialOrdering::Less != 0));
static_assert( (QPartialOrdering::Less < 0));
@@ -100,6 +95,13 @@ void tst_QCompare::partialOrdering()
static_assert( (0 >= QPartialOrdering::Less));
+ static_assert( is_eq (QPartialOrdering::Equivalent));
+ static_assert(!is_neq (QPartialOrdering::Equivalent));
+ static_assert(!is_lt (QPartialOrdering::Equivalent));
+ static_assert( is_lteq(QPartialOrdering::Equivalent));
+ static_assert(!is_gt (QPartialOrdering::Equivalent));
+ static_assert( is_gteq(QPartialOrdering::Equivalent));
+
static_assert( (QPartialOrdering::Equivalent == 0));
static_assert(!(QPartialOrdering::Equivalent != 0));
static_assert(!(QPartialOrdering::Equivalent < 0));
@@ -115,6 +117,13 @@ void tst_QCompare::partialOrdering()
static_assert( (0 >= QPartialOrdering::Equivalent));
+ static_assert(!is_eq (QPartialOrdering::Greater));
+ static_assert( is_neq (QPartialOrdering::Greater));
+ static_assert(!is_lt (QPartialOrdering::Greater));
+ static_assert(!is_lteq(QPartialOrdering::Greater));
+ static_assert( is_gt (QPartialOrdering::Greater));
+ static_assert( is_gteq(QPartialOrdering::Greater));
+
static_assert(!(QPartialOrdering::Greater == 0));
static_assert( (QPartialOrdering::Greater != 0));
static_assert(!(QPartialOrdering::Greater < 0));
@@ -130,5 +139,702 @@ void tst_QCompare::partialOrdering()
static_assert(!(0 >= QPartialOrdering::Greater));
}
+void tst_QCompare::legacyConversions()
+{
+#define CHECK_CONVERTS(Lhs, Rhs) static_assert(std::is_convertible_v<Lhs, Rhs>)
+#define CHECK_ALL(NS) do { \
+ CHECK_CONVERTS(QPartialOrdering, NS ::partial_ordering); \
+ static_assert(QPartialOrdering::Less == NS ::partial_ordering::less); \
+ static_assert(QPartialOrdering::Greater == NS ::partial_ordering::greater); \
+ static_assert(QPartialOrdering::Equivalent == NS ::partial_ordering::equivalent); \
+ static_assert(QPartialOrdering::Unordered == NS ::partial_ordering::unordered); \
+ \
+ CHECK_CONVERTS(NS ::partial_ordering, QPartialOrdering); \
+ CHECK_CONVERTS(NS ::weak_ordering, QPartialOrdering); \
+ CHECK_CONVERTS(NS ::strong_ordering, QPartialOrdering); \
+ } while (false)
+
+ CHECK_ALL(Qt);
+#ifdef __cpp_lib_three_way_comparison
+ CHECK_ALL(std);
+#endif // __cpp_lib_three_way_comparison
+
+#undef CHECK_ALL
+#undef CHECK_CONVERTS
+}
+
+void tst_QCompare::stdQtBinaryCompatibility()
+{
+#ifndef __cpp_lib_three_way_comparison
+ QSKIP("This test requires C++20 three-way-comparison support enabled in the stdlib.");
+#else
+ QCOMPARE_EQ(sizeof(std::partial_ordering), 1U);
+ QCOMPARE_EQ(sizeof( Qt::partial_ordering), 1U);
+ QCOMPARE_EQ(sizeof(std:: weak_ordering), 1U);
+ QCOMPARE_EQ(sizeof( Qt:: weak_ordering), 1U);
+ QCOMPARE_EQ(sizeof(std:: strong_ordering), 1U);
+ QCOMPARE_EQ(sizeof( Qt:: strong_ordering), 1U);
+
+ auto valueOf = [](auto obj) {
+ typename QIntegerForSizeof<decltype(obj)>::Unsigned value;
+ memcpy(&value, &obj, sizeof(obj));
+ return value;
+ };
+#define CHECK(type, flag) \
+ QCOMPARE_EQ(valueOf( Qt:: type ## _ordering :: flag), \
+ valueOf(std:: type ## _ordering :: flag)) \
+ /* end */
+ CHECK(partial, unordered);
+ CHECK(partial, less);
+ CHECK(partial, greater);
+ CHECK(partial, equivalent);
+
+ CHECK(weak, less);
+ CHECK(weak, greater);
+ CHECK(weak, equivalent);
+
+ CHECK(strong, less);
+ CHECK(strong, greater);
+ CHECK(strong, equivalent);
+ CHECK(strong, equal);
+#undef CHECK
+#endif //__cpp_lib_three_way_comparison
+}
+
+void tst_QCompare::partialOrdering()
+{
+ static_assert(Qt::partial_ordering::unordered == Qt::partial_ordering::unordered);
+ static_assert(Qt::partial_ordering::unordered != Qt::partial_ordering::less);
+ static_assert(Qt::partial_ordering::unordered != Qt::partial_ordering::equivalent);
+ static_assert(Qt::partial_ordering::unordered != Qt::partial_ordering::greater);
+
+ static_assert(Qt::partial_ordering::less != Qt::partial_ordering::unordered);
+ static_assert(Qt::partial_ordering::less == Qt::partial_ordering::less);
+ static_assert(Qt::partial_ordering::less != Qt::partial_ordering::equivalent);
+ static_assert(Qt::partial_ordering::less != Qt::partial_ordering::greater);
+
+ static_assert(Qt::partial_ordering::equivalent != Qt::partial_ordering::unordered);
+ static_assert(Qt::partial_ordering::equivalent != Qt::partial_ordering::less);
+ static_assert(Qt::partial_ordering::equivalent == Qt::partial_ordering::equivalent);
+ static_assert(Qt::partial_ordering::equivalent != Qt::partial_ordering::greater);
+
+ static_assert(Qt::partial_ordering::greater != Qt::partial_ordering::unordered);
+ static_assert(Qt::partial_ordering::greater != Qt::partial_ordering::less);
+ static_assert(Qt::partial_ordering::greater != Qt::partial_ordering::equivalent);
+ static_assert(Qt::partial_ordering::greater == Qt::partial_ordering::greater);
+
+ static_assert(!is_eq (Qt::partial_ordering::unordered));
+ static_assert(!is_neq (Qt::partial_ordering::unordered));
+ static_assert(!is_lt (Qt::partial_ordering::unordered));
+ static_assert(!is_lteq(Qt::partial_ordering::unordered));
+ static_assert(!is_gt (Qt::partial_ordering::unordered));
+ static_assert(!is_gteq(Qt::partial_ordering::unordered));
+
+ static_assert(!(Qt::partial_ordering::unordered == 0));
+ static_assert(!(Qt::partial_ordering::unordered != 0));
+ static_assert(!(Qt::partial_ordering::unordered < 0));
+ static_assert(!(Qt::partial_ordering::unordered <= 0));
+ static_assert(!(Qt::partial_ordering::unordered > 0));
+ static_assert(!(Qt::partial_ordering::unordered >= 0));
+
+ static_assert(!(0 == Qt::partial_ordering::unordered));
+ static_assert(!(0 != Qt::partial_ordering::unordered));
+ static_assert(!(0 < Qt::partial_ordering::unordered));
+ static_assert(!(0 <= Qt::partial_ordering::unordered));
+ static_assert(!(0 > Qt::partial_ordering::unordered));
+ static_assert(!(0 >= Qt::partial_ordering::unordered));
+
+
+ static_assert(!is_eq (Qt::partial_ordering::less));
+ static_assert( is_neq (Qt::partial_ordering::less));
+ static_assert( is_lt (Qt::partial_ordering::less));
+ static_assert( is_lteq(Qt::partial_ordering::less));
+ static_assert(!is_gt (Qt::partial_ordering::less));
+ static_assert(!is_gteq(Qt::partial_ordering::less));
+
+ static_assert(!(Qt::partial_ordering::less == 0));
+ static_assert( (Qt::partial_ordering::less != 0));
+ static_assert( (Qt::partial_ordering::less < 0));
+ static_assert( (Qt::partial_ordering::less <= 0));
+ static_assert(!(Qt::partial_ordering::less > 0));
+ static_assert(!(Qt::partial_ordering::less >= 0));
+
+ static_assert(!(0 == Qt::partial_ordering::less));
+ static_assert( (0 != Qt::partial_ordering::less));
+ static_assert(!(0 < Qt::partial_ordering::less));
+ static_assert(!(0 <= Qt::partial_ordering::less));
+ static_assert( (0 > Qt::partial_ordering::less));
+ static_assert( (0 >= Qt::partial_ordering::less));
+
+
+ static_assert( is_eq (Qt::partial_ordering::equivalent));
+ static_assert(!is_neq (Qt::partial_ordering::equivalent));
+ static_assert(!is_lt (Qt::partial_ordering::equivalent));
+ static_assert( is_lteq(Qt::partial_ordering::equivalent));
+ static_assert(!is_gt (Qt::partial_ordering::equivalent));
+ static_assert( is_gteq(Qt::partial_ordering::equivalent));
+
+ static_assert( (Qt::partial_ordering::equivalent == 0));
+ static_assert(!(Qt::partial_ordering::equivalent != 0));
+ static_assert(!(Qt::partial_ordering::equivalent < 0));
+ static_assert( (Qt::partial_ordering::equivalent <= 0));
+ static_assert(!(Qt::partial_ordering::equivalent > 0));
+ static_assert( (Qt::partial_ordering::equivalent >= 0));
+
+ static_assert( (0 == Qt::partial_ordering::equivalent));
+ static_assert(!(0 != Qt::partial_ordering::equivalent));
+ static_assert(!(0 < Qt::partial_ordering::equivalent));
+ static_assert( (0 <= Qt::partial_ordering::equivalent));
+ static_assert(!(0 > Qt::partial_ordering::equivalent));
+ static_assert( (0 >= Qt::partial_ordering::equivalent));
+
+
+ static_assert(!is_eq (Qt::partial_ordering::greater));
+ static_assert( is_neq (Qt::partial_ordering::greater));
+ static_assert(!is_lt (Qt::partial_ordering::greater));
+ static_assert(!is_lteq(Qt::partial_ordering::greater));
+ static_assert( is_gt (Qt::partial_ordering::greater));
+ static_assert( is_gteq(Qt::partial_ordering::greater));
+
+ static_assert(!(Qt::partial_ordering::greater == 0));
+ static_assert( (Qt::partial_ordering::greater != 0));
+ static_assert(!(Qt::partial_ordering::greater < 0));
+ static_assert(!(Qt::partial_ordering::greater <= 0));
+ static_assert( (Qt::partial_ordering::greater > 0));
+ static_assert( (Qt::partial_ordering::greater >= 0));
+
+ static_assert(!(0 == Qt::partial_ordering::greater));
+ static_assert( (0 != Qt::partial_ordering::greater));
+ static_assert( (0 < Qt::partial_ordering::greater));
+ static_assert( (0 <= Qt::partial_ordering::greater));
+ static_assert(!(0 > Qt::partial_ordering::greater));
+ static_assert(!(0 >= Qt::partial_ordering::greater));
+}
+
+void tst_QCompare::weakOrdering()
+{
+ static_assert(Qt::weak_ordering::less == Qt::weak_ordering::less);
+ static_assert(Qt::weak_ordering::less != Qt::weak_ordering::equivalent);
+ static_assert(Qt::weak_ordering::less != Qt::weak_ordering::greater);
+
+ static_assert(Qt::weak_ordering::equivalent != Qt::weak_ordering::less);
+ static_assert(Qt::weak_ordering::equivalent == Qt::weak_ordering::equivalent);
+ static_assert(Qt::weak_ordering::equivalent != Qt::weak_ordering::greater);
+
+ static_assert(Qt::weak_ordering::greater != Qt::weak_ordering::less);
+ static_assert(Qt::weak_ordering::greater != Qt::weak_ordering::equivalent);
+ static_assert(Qt::weak_ordering::greater == Qt::weak_ordering::greater);
+
+ static_assert(!is_eq (Qt::weak_ordering::less));
+ static_assert( is_neq (Qt::weak_ordering::less));
+ static_assert( is_lt (Qt::weak_ordering::less));
+ static_assert( is_lteq(Qt::weak_ordering::less));
+ static_assert(!is_gt (Qt::weak_ordering::less));
+ static_assert(!is_gteq(Qt::weak_ordering::less));
+
+ static_assert(!(Qt::weak_ordering::less == 0));
+ static_assert( (Qt::weak_ordering::less != 0));
+ static_assert( (Qt::weak_ordering::less < 0));
+ static_assert( (Qt::weak_ordering::less <= 0));
+ static_assert(!(Qt::weak_ordering::less > 0));
+ static_assert(!(Qt::weak_ordering::less >= 0));
+
+ static_assert(!(0 == Qt::weak_ordering::less));
+ static_assert( (0 != Qt::weak_ordering::less));
+ static_assert(!(0 < Qt::weak_ordering::less));
+ static_assert(!(0 <= Qt::weak_ordering::less));
+ static_assert( (0 > Qt::weak_ordering::less));
+ static_assert( (0 >= Qt::weak_ordering::less));
+
+
+ static_assert( is_eq (Qt::weak_ordering::equivalent));
+ static_assert(!is_neq (Qt::weak_ordering::equivalent));
+ static_assert(!is_lt (Qt::weak_ordering::equivalent));
+ static_assert( is_lteq(Qt::weak_ordering::equivalent));
+ static_assert(!is_gt (Qt::weak_ordering::equivalent));
+ static_assert( is_gteq(Qt::weak_ordering::equivalent));
+
+ static_assert( (Qt::weak_ordering::equivalent == 0));
+ static_assert(!(Qt::weak_ordering::equivalent != 0));
+ static_assert(!(Qt::weak_ordering::equivalent < 0));
+ static_assert( (Qt::weak_ordering::equivalent <= 0));
+ static_assert(!(Qt::weak_ordering::equivalent > 0));
+ static_assert( (Qt::weak_ordering::equivalent >= 0));
+
+ static_assert( (0 == Qt::weak_ordering::equivalent));
+ static_assert(!(0 != Qt::weak_ordering::equivalent));
+ static_assert(!(0 < Qt::weak_ordering::equivalent));
+ static_assert( (0 <= Qt::weak_ordering::equivalent));
+ static_assert(!(0 > Qt::weak_ordering::equivalent));
+ static_assert( (0 >= Qt::weak_ordering::equivalent));
+
+
+ static_assert(!is_eq (Qt::weak_ordering::greater));
+ static_assert( is_neq (Qt::weak_ordering::greater));
+ static_assert(!is_lt (Qt::weak_ordering::greater));
+ static_assert(!is_lteq(Qt::weak_ordering::greater));
+ static_assert( is_gt (Qt::weak_ordering::greater));
+ static_assert( is_gteq(Qt::weak_ordering::greater));
+
+ static_assert(!(Qt::weak_ordering::greater == 0));
+ static_assert( (Qt::weak_ordering::greater != 0));
+ static_assert(!(Qt::weak_ordering::greater < 0));
+ static_assert(!(Qt::weak_ordering::greater <= 0));
+ static_assert( (Qt::weak_ordering::greater > 0));
+ static_assert( (Qt::weak_ordering::greater >= 0));
+
+ static_assert(!(0 == Qt::weak_ordering::greater));
+ static_assert( (0 != Qt::weak_ordering::greater));
+ static_assert( (0 < Qt::weak_ordering::greater));
+ static_assert( (0 <= Qt::weak_ordering::greater));
+ static_assert(!(0 > Qt::weak_ordering::greater));
+ static_assert(!(0 >= Qt::weak_ordering::greater));
+}
+
+void tst_QCompare::strongOrdering()
+{
+ static_assert(Qt::strong_ordering::less == Qt::strong_ordering::less);
+ static_assert(Qt::strong_ordering::less != Qt::strong_ordering::equal);
+ static_assert(Qt::strong_ordering::less != Qt::strong_ordering::equivalent);
+ static_assert(Qt::strong_ordering::less != Qt::strong_ordering::greater);
+
+ static_assert(Qt::strong_ordering::equal != Qt::strong_ordering::less);
+ static_assert(Qt::strong_ordering::equal == Qt::strong_ordering::equal);
+ static_assert(Qt::strong_ordering::equal == Qt::strong_ordering::equivalent);
+ static_assert(Qt::strong_ordering::equal != Qt::strong_ordering::greater);
+
+ static_assert(Qt::strong_ordering::equivalent != Qt::strong_ordering::less);
+ static_assert(Qt::strong_ordering::equivalent == Qt::strong_ordering::equal);
+ static_assert(Qt::strong_ordering::equivalent == Qt::strong_ordering::equivalent);
+ static_assert(Qt::strong_ordering::equivalent != Qt::strong_ordering::greater);
+
+ static_assert(Qt::strong_ordering::greater != Qt::strong_ordering::less);
+ static_assert(Qt::strong_ordering::greater != Qt::strong_ordering::equal);
+ static_assert(Qt::strong_ordering::greater != Qt::strong_ordering::equivalent);
+ static_assert(Qt::strong_ordering::greater == Qt::strong_ordering::greater);
+
+ static_assert(!is_eq (Qt::strong_ordering::less));
+ static_assert( is_neq (Qt::strong_ordering::less));
+ static_assert( is_lt (Qt::strong_ordering::less));
+ static_assert( is_lteq(Qt::strong_ordering::less));
+ static_assert(!is_gt (Qt::strong_ordering::less));
+ static_assert(!is_gteq(Qt::strong_ordering::less));
+
+ static_assert(!(Qt::strong_ordering::less == 0));
+ static_assert( (Qt::strong_ordering::less != 0));
+ static_assert( (Qt::strong_ordering::less < 0));
+ static_assert( (Qt::strong_ordering::less <= 0));
+ static_assert(!(Qt::strong_ordering::less > 0));
+ static_assert(!(Qt::strong_ordering::less >= 0));
+
+ static_assert(!(0 == Qt::strong_ordering::less));
+ static_assert( (0 != Qt::strong_ordering::less));
+ static_assert(!(0 < Qt::strong_ordering::less));
+ static_assert(!(0 <= Qt::strong_ordering::less));
+ static_assert( (0 > Qt::strong_ordering::less));
+ static_assert( (0 >= Qt::strong_ordering::less));
+
+
+ static_assert( is_eq (Qt::strong_ordering::equal));
+ static_assert(!is_neq (Qt::strong_ordering::equal));
+ static_assert(!is_lt (Qt::strong_ordering::equal));
+ static_assert( is_lteq(Qt::strong_ordering::equal));
+ static_assert(!is_gt (Qt::strong_ordering::equal));
+ static_assert( is_gteq(Qt::strong_ordering::equal));
+
+ static_assert( (Qt::strong_ordering::equal == 0));
+ static_assert(!(Qt::strong_ordering::equal != 0));
+ static_assert(!(Qt::strong_ordering::equal < 0));
+ static_assert( (Qt::strong_ordering::equal <= 0));
+ static_assert(!(Qt::strong_ordering::equal > 0));
+ static_assert( (Qt::strong_ordering::equal >= 0));
+
+ static_assert( (0 == Qt::strong_ordering::equal));
+ static_assert(!(0 != Qt::strong_ordering::equal));
+ static_assert(!(0 < Qt::strong_ordering::equal));
+ static_assert( (0 <= Qt::strong_ordering::equal));
+ static_assert(!(0 > Qt::strong_ordering::equal));
+ static_assert( (0 >= Qt::strong_ordering::equal));
+
+
+ static_assert( is_eq (Qt::strong_ordering::equivalent));
+ static_assert(!is_neq (Qt::strong_ordering::equivalent));
+ static_assert(!is_lt (Qt::strong_ordering::equivalent));
+ static_assert( is_lteq(Qt::strong_ordering::equivalent));
+ static_assert(!is_gt (Qt::strong_ordering::equivalent));
+ static_assert( is_gteq(Qt::strong_ordering::equivalent));
+
+ static_assert( (Qt::strong_ordering::equivalent == 0));
+ static_assert(!(Qt::strong_ordering::equivalent != 0));
+ static_assert(!(Qt::strong_ordering::equivalent < 0));
+ static_assert( (Qt::strong_ordering::equivalent <= 0));
+ static_assert(!(Qt::strong_ordering::equivalent > 0));
+ static_assert( (Qt::strong_ordering::equivalent >= 0));
+
+ static_assert( (0 == Qt::strong_ordering::equivalent));
+ static_assert(!(0 != Qt::strong_ordering::equivalent));
+ static_assert(!(0 < Qt::strong_ordering::equivalent));
+ static_assert( (0 <= Qt::strong_ordering::equivalent));
+ static_assert(!(0 > Qt::strong_ordering::equivalent));
+ static_assert( (0 >= Qt::strong_ordering::equivalent));
+
+
+ static_assert(!is_eq (Qt::strong_ordering::greater));
+ static_assert( is_neq (Qt::strong_ordering::greater));
+ static_assert(!is_lt (Qt::strong_ordering::greater));
+ static_assert(!is_lteq(Qt::strong_ordering::greater));
+ static_assert( is_gt (Qt::strong_ordering::greater));
+ static_assert( is_gteq(Qt::strong_ordering::greater));
+
+ static_assert(!(Qt::strong_ordering::greater == 0));
+ static_assert( (Qt::strong_ordering::greater != 0));
+ static_assert(!(Qt::strong_ordering::greater < 0));
+ static_assert(!(Qt::strong_ordering::greater <= 0));
+ static_assert( (Qt::strong_ordering::greater > 0));
+ static_assert( (Qt::strong_ordering::greater >= 0));
+
+ static_assert(!(0 == Qt::strong_ordering::greater));
+ static_assert( (0 != Qt::strong_ordering::greater));
+ static_assert( (0 < Qt::strong_ordering::greater));
+ static_assert( (0 <= Qt::strong_ordering::greater));
+ static_assert(!(0 > Qt::strong_ordering::greater));
+ static_assert(!(0 >= Qt::strong_ordering::greater));
+}
+
+void tst_QCompare::threeWayCompareWithLiteralZero()
+{
+#ifndef __cpp_lib_three_way_comparison
+ QSKIP("This test requires C++20 <=> support enabled in the compiler and the stdlib.");
+#else
+ // the result of <=> is _always_ a std::_ordering type:
+#define CHECK(O) do { \
+ using StdO = typename QtOrderingPrivate::StdOrdering<O>::type; \
+ static_assert(std::is_same_v<decltype(0 <=> std::declval<O&>()), StdO>); \
+ static_assert(std::is_same_v<decltype(std::declval<O&>() <=> 0), StdO>); \
+ } while (false)
+
+ CHECK(Qt::partial_ordering);
+ CHECK(Qt::weak_ordering);
+ CHECK(Qt::strong_ordering);
+ CHECK(QPartialOrdering);
+ // API symmetry check:
+ CHECK(std::partial_ordering);
+ CHECK(std::weak_ordering);
+ CHECK(std::strong_ordering);
+
+#undef CHECK
+
+#define CHECK(O, what, reversed) do { \
+ using StdO = typename QtOrderingPrivate::StdOrdering<O>::type; \
+ static_assert((O :: what <=> 0) == StdO:: what); \
+ static_assert((0 <=> O :: what) == StdO:: reversed); \
+ } while (false)
+
+ CHECK(Qt::partial_ordering, unordered, unordered);
+ CHECK(Qt::partial_ordering, equivalent, equivalent);
+ CHECK(Qt::partial_ordering, less, greater);
+ CHECK(Qt::partial_ordering, greater, less);
+
+ CHECK(Qt::weak_ordering, equivalent, equivalent);
+ CHECK(Qt::weak_ordering, less, greater);
+ CHECK(Qt::weak_ordering, greater, less);
+
+ CHECK(Qt::strong_ordering, equal, equal);
+ CHECK(Qt::strong_ordering, less, greater);
+ CHECK(Qt::strong_ordering, greater, less);
+
+ CHECK(QPartialOrdering, unordered, unordered);
+ CHECK(QPartialOrdering, equivalent, equivalent);
+ CHECK(QPartialOrdering, less, greater);
+ CHECK(QPartialOrdering, greater, less);
+
+ // API symmetry check:
+
+ CHECK(std::partial_ordering, unordered, unordered);
+ CHECK(std::partial_ordering, equivalent, equivalent);
+ CHECK(std::partial_ordering, less, greater);
+ CHECK(std::partial_ordering, greater, less);
+
+ CHECK(std::weak_ordering, equivalent, equivalent);
+ CHECK(std::weak_ordering, less, greater);
+ CHECK(std::weak_ordering, greater, less);
+
+ CHECK(std::strong_ordering, equal, equal);
+ CHECK(std::strong_ordering, less, greater);
+ CHECK(std::strong_ordering, greater, less);
+
+#undef CHECK
+#endif // __cpp_lib_three_way_comparisons
+
+}
+
+void tst_QCompare::conversions()
+{
+ // Qt::weak_ordering -> Qt::partial_ordering
+ {
+ constexpr Qt::partial_ordering less = Qt::weak_ordering::less;
+ static_assert(less == Qt::partial_ordering::less);
+ constexpr Qt::partial_ordering equivalent = Qt::weak_ordering::equivalent;
+ static_assert(equivalent == Qt::partial_ordering::equivalent);
+ constexpr Qt::partial_ordering greater = Qt::weak_ordering::greater;
+ static_assert(greater == Qt::partial_ordering::greater);
+ }
+ // Qt::strong_ordering -> Qt::partial_ordering
+ {
+ constexpr Qt::partial_ordering less = Qt::strong_ordering::less;
+ static_assert(less == Qt::partial_ordering::less);
+ constexpr Qt::partial_ordering equal = Qt::strong_ordering::equal;
+ static_assert(equal == Qt::partial_ordering::equivalent);
+ constexpr Qt::partial_ordering equivalent = Qt::strong_ordering::equivalent;
+ static_assert(equivalent == Qt::partial_ordering::equivalent);
+ constexpr Qt::partial_ordering greater = Qt::strong_ordering::greater;
+ static_assert(greater == Qt::partial_ordering::greater);
+ }
+ // Qt::strong_ordering -> Qt::weak_ordering
+ {
+ constexpr Qt::weak_ordering less = Qt::strong_ordering::less;
+ static_assert(less == Qt::weak_ordering::less);
+ constexpr Qt::weak_ordering equal = Qt::strong_ordering::equal;
+ static_assert(equal == Qt::weak_ordering::equivalent);
+ constexpr Qt::weak_ordering equivalent = Qt::strong_ordering::equivalent;
+ static_assert(equivalent == Qt::weak_ordering::equivalent);
+ constexpr Qt::weak_ordering greater = Qt::strong_ordering::greater;
+ static_assert(greater == Qt::weak_ordering::greater);
+ }
+ // Mixed types
+ {
+ static_assert(Qt::partial_ordering::less == Qt::strong_ordering::less);
+ static_assert(Qt::partial_ordering::equivalent != Qt::strong_ordering::less);
+ static_assert(Qt::partial_ordering::equivalent == Qt::strong_ordering::equal);
+ static_assert(Qt::partial_ordering::greater == Qt::strong_ordering::greater);
+
+ static_assert(Qt::partial_ordering::less == Qt::weak_ordering::less);
+ static_assert(Qt::partial_ordering::equivalent == Qt::weak_ordering::equivalent);
+ static_assert(Qt::partial_ordering::greater == Qt::weak_ordering::greater);
+
+ static_assert(Qt::weak_ordering::less == Qt::strong_ordering::less);
+ static_assert(Qt::weak_ordering::equivalent != Qt::strong_ordering::greater);
+ static_assert(Qt::weak_ordering::equivalent == Qt::strong_ordering::equal);
+ static_assert(Qt::weak_ordering::greater == Qt::strong_ordering::greater);
+
+ static_assert(Qt::weak_ordering::less == Qt::partial_ordering::less);
+ static_assert(Qt::weak_ordering::equivalent == Qt::partial_ordering::equivalent);
+ static_assert(Qt::weak_ordering::greater == Qt::partial_ordering::greater);
+
+ static_assert(Qt::strong_ordering::less == Qt::partial_ordering::less);
+ static_assert(Qt::strong_ordering::equivalent == Qt::partial_ordering::equivalent);
+ static_assert(Qt::strong_ordering::equal == Qt::partial_ordering::equivalent);
+ static_assert(Qt::strong_ordering::greater == Qt::partial_ordering::greater);
+
+ static_assert(Qt::strong_ordering::less == Qt::weak_ordering::less);
+ static_assert(Qt::strong_ordering::equivalent == Qt::weak_ordering::equivalent);
+ static_assert(Qt::strong_ordering::equal == Qt::weak_ordering::equivalent);
+ static_assert(Qt::strong_ordering::greater == Qt::weak_ordering::greater);
+ }
+#ifdef __cpp_lib_three_way_comparison
+ // Qt::partial_ordering <-> std::partial_ordering
+ {
+ static_assert(Qt::partial_ordering::less == std::partial_ordering::less);
+ static_assert(Qt::partial_ordering::less != std::partial_ordering::greater);
+ static_assert(std::partial_ordering::unordered != Qt::partial_ordering::equivalent);
+ static_assert(std::partial_ordering::unordered == Qt::partial_ordering::unordered);
+
+ static_assert((Qt::partial_ordering(std::partial_ordering::less) ==
+ std::partial_ordering::less));
+ static_assert((Qt::partial_ordering(std::partial_ordering::equivalent) ==
+ std::partial_ordering::equivalent));
+ static_assert((Qt::partial_ordering(std::partial_ordering::greater) ==
+ std::partial_ordering::greater));
+ static_assert((Qt::partial_ordering(std::partial_ordering::unordered) ==
+ std::partial_ordering::unordered));
+ }
+ // Qt::weak_ordering <-> std::weak_ordering
+ {
+ static_assert(Qt::weak_ordering::less == std::weak_ordering::less);
+ static_assert(Qt::weak_ordering::less != std::weak_ordering::equivalent);
+ static_assert(std::weak_ordering::greater != Qt::weak_ordering::less);
+ static_assert(std::weak_ordering::equivalent == Qt::weak_ordering::equivalent);
+
+ static_assert((Qt::weak_ordering(std::weak_ordering::less) ==
+ std::weak_ordering::less));
+ static_assert((Qt::weak_ordering(std::weak_ordering::equivalent) ==
+ std::weak_ordering::equivalent));
+ static_assert((Qt::weak_ordering(std::weak_ordering::greater) ==
+ std::weak_ordering::greater));
+ }
+ // Qt::strong_ordering <-> std::strong_ordering
+ {
+ static_assert(Qt::strong_ordering::less == std::strong_ordering::less);
+ static_assert(Qt::strong_ordering::less != std::strong_ordering::equivalent);
+ static_assert(std::strong_ordering::greater != Qt::strong_ordering::less);
+ static_assert(std::strong_ordering::equivalent == Qt::strong_ordering::equivalent);
+
+ static_assert((Qt::strong_ordering(std::strong_ordering::less) ==
+ std::strong_ordering::less));
+ static_assert((Qt::strong_ordering(std::strong_ordering::equivalent) ==
+ std::strong_ordering::equivalent));
+ static_assert((Qt::strong_ordering(std::strong_ordering::greater) ==
+ std::strong_ordering::greater));
+ }
+ // Mixed Qt::*_ordering <> std::*_ordering types
+ {
+ static_assert(Qt::strong_ordering::less == std::partial_ordering::less);
+ static_assert(Qt::strong_ordering::less != std::partial_ordering::greater);
+ static_assert(Qt::strong_ordering::equal == std::weak_ordering::equivalent);
+ static_assert(Qt::strong_ordering::equivalent != std::weak_ordering::less);
+
+ static_assert(Qt::weak_ordering::less != std::partial_ordering::greater);
+ static_assert(Qt::weak_ordering::less == std::partial_ordering::less);
+ static_assert(Qt::weak_ordering::equivalent == std::strong_ordering::equivalent);
+ static_assert(Qt::weak_ordering::equivalent != std::strong_ordering::less);
+
+ static_assert(Qt::partial_ordering::less != std::weak_ordering::greater);
+ static_assert(Qt::partial_ordering::less == std::weak_ordering::less);
+ static_assert(Qt::partial_ordering::equivalent == std::strong_ordering::equivalent);
+ static_assert(Qt::partial_ordering::equivalent != std::strong_ordering::less);
+ }
+#endif
+
+}
+
+void tst_QCompare::is_eq_overloads()
+{
+#ifndef __cpp_lib_three_way_comparison
+ QSKIP("This test requires C++20 three-way-comparison support enabled in the stdlib.");
+#else
+ constexpr auto u = std::partial_ordering::unordered;
+ constexpr auto l = std::weak_ordering::less;
+ constexpr auto g = std::strong_ordering::greater;
+ constexpr auto e = std::weak_ordering::equivalent;
+ constexpr auto s = std::strong_ordering::equal;
+
+ // This is a compile-time check that unqualified name lookup of
+ // std::is_eq-like functions isn't ambiguous, so we can recommend it to our
+ // users for minimizing porting on the way to C++20.
+
+ // The goal is to check each std::ordering and each is_eq function at least
+ // once, not to test all combinations (we're not the stdlib test suite here).
+
+ QVERIFY(is_eq(s));
+ QVERIFY(is_neq(u));
+ QVERIFY(is_lt(l));
+ QVERIFY(is_gt(g));
+ QVERIFY(is_lteq(e));
+ QVERIFY(is_gteq(s));
+#endif // __cpp_lib_three_way_comparison
+}
+
+class StringWrapper
+{
+public:
+ explicit StringWrapper() {}
+ explicit StringWrapper(const QString &val) : m_val(val) {}
+ QString value() const { return m_val; }
+
+private:
+ static Qt::weak_ordering compareHelper(const QString &lhs, const QString &rhs) noexcept
+ {
+ const int res = QString::compare(lhs, rhs, Qt::CaseInsensitive);
+ if (res < 0)
+ return Qt::weak_ordering::less;
+ else if (res > 0)
+ return Qt::weak_ordering::greater;
+ else
+ return Qt::weak_ordering::equivalent;
+ }
+
+ friend bool comparesEqual(const StringWrapper &lhs, const StringWrapper &rhs) noexcept
+ { return QString::compare(lhs.m_val, rhs.m_val, Qt::CaseInsensitive) == 0; }
+ friend Qt::weak_ordering
+ compareThreeWay(const StringWrapper &lhs, const StringWrapper &rhs) noexcept
+ { return compareHelper(lhs.m_val, rhs.m_val); }
+ Q_DECLARE_WEAKLY_ORDERED(StringWrapper)
+
+ // these helper functions are intentionally non-noexcept
+ friend bool comparesEqual(const StringWrapper &lhs, int rhs)
+ { return comparesEqual(lhs, StringWrapper(QString::number(rhs))); }
+ friend Qt::weak_ordering compareThreeWay(const StringWrapper &lhs, int rhs)
+ { return compareHelper(lhs.m_val, QString::number(rhs)); }
+ Q_DECLARE_WEAKLY_ORDERED(StringWrapper, int)
+
+ QString m_val;
+};
+
+void tst_QCompare::compareThreeWay()
+{
+ // test noexcept
+
+ // for custom types
+ static_assert(noexcept(qCompareThreeWay(std::declval<StringWrapper>(),
+ std::declval<StringWrapper>())));
+ static_assert(!noexcept(qCompareThreeWay(std::declval<StringWrapper>(),
+ std::declval<int>())));
+ static_assert(!noexcept(qCompareThreeWay(std::declval<int>(),
+ std::declval<StringWrapper>())));
+ // for built-in types
+ static_assert(noexcept(qCompareThreeWay(std::declval<int>(), std::declval<int>())));
+ static_assert(noexcept(qCompareThreeWay(std::declval<float>(), std::declval<int>())));
+ static_assert(noexcept(qCompareThreeWay(std::declval<double>(), std::declval<float>())));
+ static_assert(noexcept(qCompareThreeWay(std::declval<int>(), std::declval<int>())));
+
+ // enums
+ enum TestEnum : int {
+ Smaller,
+ Bigger
+ };
+ static_assert(noexcept(qCompareThreeWay(std::declval<TestEnum>(), std::declval<TestEnum>())));
+
+ // pointers
+ static_assert(noexcept(qCompareThreeWay(std::declval<StringWrapper *>(),
+ std::declval<StringWrapper *>())));
+ static_assert(noexcept(qCompareThreeWay(std::declval<StringWrapper *>(), nullptr)));
+
+ // Test some actual comparison results
+
+ // for custom types
+ QCOMPARE_EQ(qCompareThreeWay(StringWrapper("ABC"), StringWrapper("abc")),
+ Qt::weak_ordering::equivalent);
+ QVERIFY(StringWrapper("ABC") == StringWrapper("abc"));
+ QCOMPARE_EQ(qCompareThreeWay(StringWrapper("ABC"), StringWrapper("qwe")),
+ Qt::weak_ordering::less);
+ QVERIFY(StringWrapper("ABC") != StringWrapper("qwe"));
+ QCOMPARE_EQ(qCompareThreeWay(StringWrapper("qwe"), StringWrapper("ABC")),
+ Qt::weak_ordering::greater);
+ QVERIFY(StringWrapper("qwe") != StringWrapper("ABC"));
+ QCOMPARE_EQ(qCompareThreeWay(StringWrapper("10"), 10), Qt::weak_ordering::equivalent);
+ QVERIFY(StringWrapper("10") == 10);
+ QCOMPARE_EQ(qCompareThreeWay(StringWrapper("10"), 12), Qt::weak_ordering::less);
+ QVERIFY(StringWrapper("10") != 12);
+ QCOMPARE_EQ(qCompareThreeWay(StringWrapper("12"), 10), Qt::weak_ordering::greater);
+ QVERIFY(StringWrapper("12") != 10);
+
+ // reversed compareThreeWay()
+ auto result = qCompareThreeWay(10, StringWrapper("12"));
+ QCOMPARE_EQ(result, Qt::weak_ordering::less);
+ static_assert(std::is_same_v<decltype(result), Qt::weak_ordering>);
+ QVERIFY(10 != StringWrapper("12"));
+ result = qCompareThreeWay(12, StringWrapper("10"));
+ QCOMPARE_EQ(result, Qt::weak_ordering::greater);
+ static_assert(std::is_same_v<decltype(result), Qt::weak_ordering>);
+ QVERIFY(12 != StringWrapper("10"));
+ result = qCompareThreeWay(10, StringWrapper("10"));
+ QCOMPARE_EQ(result, Qt::weak_ordering::equivalent);
+ static_assert(std::is_same_v<decltype(result), Qt::weak_ordering>);
+ QVERIFY(10 == StringWrapper("10"));
+
+ // built-in types
+ QCOMPARE_EQ(qCompareThreeWay(1, 1.0), Qt::partial_ordering::equivalent);
+ QCOMPARE_EQ(qCompareThreeWay(1, 2), Qt::strong_ordering::less);
+ QCOMPARE_EQ(qCompareThreeWay(2.0f, 1.0), Qt::partial_ordering::greater);
+
+ // enums
+ QCOMPARE_EQ(qCompareThreeWay(Smaller, Bigger), Qt::strong_ordering::less);
+
+ // pointers
+ std::array<int, 2> arr{1, 0};
+ QCOMPARE_EQ(qCompareThreeWay(&arr[1], &arr[0]), Qt::strong_ordering::greater);
+ QCOMPARE_EQ(qCompareThreeWay(arr.data(), &arr[0]), Qt::strong_ordering::equivalent);
+}
+
QTEST_MAIN(tst_QCompare)
#include "tst_qcompare.moc"
diff --git a/tests/auto/corelib/global/qcomparehelpers/CMakeLists.txt b/tests/auto/corelib/global/qcomparehelpers/CMakeLists.txt
new file mode 100644
index 0000000000..4bfdccdf86
--- /dev/null
+++ b/tests/auto/corelib/global/qcomparehelpers/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Copyright (C) 2023 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_qcomparehelpers LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qcomparehelpers
+ SOURCES
+ tst_qcomparehelpers.h tst_qcomparehelpers.cpp tst_qcomparehelpers1.cpp
+ wrappertypes.h
+ LIBRARIES
+ Qt::TestPrivate
+)
+
+# CMake recognizes CXX_STANDARD=23 only starting from version 3.20
+# macOS has some issues with concepts, see QTBUG-117765
+if (CMAKE_VERSION VERSION_GREATER_EQUAL "3.20" AND NOT MACOS AND NOT VXWORKS AND NOT (LINUX AND ${CMAKE_SYSTEM_PROCESSOR} MATCHES "aarch64"))
+ qt_internal_add_test(tst_qcomparehelpers_cpp23
+ SOURCES
+ tst_qcomparehelpers.h tst_qcomparehelpers.cpp tst_qcomparehelpers1.cpp
+ wrappertypes.h
+ DEFINES
+ tst_QCompareHelpers=tst_QCompareHelpersCpp23
+ LIBRARIES
+ Qt::TestPrivate
+ )
+
+ # Try to build this test in C++23 mode to test std::float16_t support.
+ # Use CXX_STANDARD_REQUIRED OFF, so that we just fall back to C++17 if the
+ # compiler does not support C++23.
+ set_target_properties(tst_qcomparehelpers_cpp23
+ PROPERTIES
+ CXX_STANDARD 23
+ CXX_STANDARD_REQUIRED OFF
+ )
+endif()
diff --git a/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers.cpp b/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers.cpp
new file mode 100644
index 0000000000..f140c23ed0
--- /dev/null
+++ b/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers.cpp
@@ -0,0 +1,600 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "tst_qcomparehelpers.h"
+#include "wrappertypes.h"
+
+#if defined(__STDCPP_FLOAT16_T__) && __has_include(<stdfloat>)
+#include <stdfloat>
+#endif
+
+/*
+ NOTE: Do not add any other test cases to this cpp file!
+ minGW already complains about a too large tst_qcomparehelpers.cpp.obj
+ object file.
+
+ Create a new cpp file and add new tests there.
+*/
+
+template<typename LeftType, typename RightType, typename OrderingType>
+void tst_QCompareHelpers::compareImpl()
+{
+ QFETCH(LeftType, lhs);
+ QFETCH(RightType, rhs);
+ QFETCH(OrderingType, expectedOrdering);
+
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs, expectedOrdering);
+#ifdef __cpp_lib_three_way_comparison
+ // Also check std types.
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs, QtOrderingPrivate::to_std(expectedOrdering));
+#endif // __cpp_lib_three_way_comparison
+}
+
+template<typename LeftType, typename RightType>
+void tst_QCompareHelpers::compareIntData()
+{
+ QTest::addColumn<LeftType>("lhs");
+ QTest::addColumn<RightType>("rhs");
+ QTest::addColumn<Qt::strong_ordering>("expectedOrdering");
+
+ auto createRow = [](auto lhs, auto rhs, Qt::strong_ordering ordering) {
+ QTest::addRow("%d vs %d", lhs, rhs) << LeftType(lhs) << RightType(rhs) << ordering;
+ };
+
+ createRow(0, 0, Qt::strong_ordering::equivalent);
+ createRow(-1, 0, Qt::strong_ordering::less);
+ createRow(1, 0, Qt::strong_ordering::greater);
+ constexpr int max = std::numeric_limits<int>::max();
+ constexpr int min = std::numeric_limits<int>::min();
+ createRow(max, max, Qt::strong_ordering::equivalent);
+ createRow(min, min, Qt::strong_ordering::equivalent);
+ createRow(max, min, Qt::strong_ordering::greater);
+ createRow(min, max, Qt::strong_ordering::less);
+}
+
+template<typename LeftType, typename RightType>
+void tst_QCompareHelpers::compareFloatData()
+{
+ QTest::addColumn<LeftType>("lhs");
+ QTest::addColumn<RightType>("rhs");
+ QTest::addColumn<Qt::partial_ordering>("expectedOrdering");
+
+ auto createRow = [](auto lhs, auto rhs, Qt::partial_ordering ordering) {
+ QTest::addRow("%f vs %f", lhs, rhs) << LeftType(lhs) << RightType(rhs) << ordering;
+ };
+
+ createRow(0.0, 0.0, Qt::partial_ordering::equivalent);
+ createRow(-0.000001, 0.0, Qt::partial_ordering::less);
+ createRow(0.000001, 0.0, Qt::partial_ordering::greater);
+
+ const double nan = qQNaN();
+ createRow(nan, 0.0, Qt::partial_ordering::unordered);
+ createRow(0.0, nan, Qt::partial_ordering::unordered);
+ createRow(nan, nan, Qt::partial_ordering::unordered);
+
+ const double inf = qInf();
+ createRow(inf, 0.0, Qt::partial_ordering::greater);
+ createRow(0.0, inf, Qt::partial_ordering::less);
+ createRow(-inf, 0.0, Qt::partial_ordering::less);
+ createRow(0.0, -inf, Qt::partial_ordering::greater);
+ createRow(inf, inf, Qt::partial_ordering::equivalent);
+ createRow(-inf, -inf, Qt::partial_ordering::equivalent);
+ createRow(-inf, inf, Qt::partial_ordering::less);
+ createRow(inf, -inf, Qt::partial_ordering::greater);
+
+ createRow(nan, inf, Qt::partial_ordering::unordered);
+ createRow(inf, nan, Qt::partial_ordering::unordered);
+ createRow(nan, -inf, Qt::partial_ordering::unordered);
+ createRow(-inf, nan, Qt::partial_ordering::unordered);
+}
+
+template<typename LeftType, typename RightType>
+void tst_QCompareHelpers::compareStringData()
+{
+ QTest::addColumn<LeftType>("lhs");
+ QTest::addColumn<RightType>("rhs");
+ QTest::addColumn<Qt::weak_ordering>("expectedOrdering");
+
+ auto createRow = [](auto lhs, auto rhs, Qt::weak_ordering ordering) {
+ QTest::addRow("'%s' vs '%s'", lhs, rhs) << LeftType(lhs) << RightType(rhs) << ordering;
+ };
+
+ createRow("", "", Qt::weak_ordering::equivalent);
+ createRow("Ab", "abc", Qt::weak_ordering::less);
+ createRow("aBc", "AB", Qt::weak_ordering::greater);
+ createRow("ab", "AB", Qt::weak_ordering::equivalent);
+ createRow("ABC", "abc", Qt::weak_ordering::equivalent);
+}
+
+void tst_QCompareHelpers::comparisonCompiles()
+{
+ QTestPrivate::testAllComparisonOperatorsCompile<IntWrapper>();
+ if (QTest::currentTestFailed())
+ return;
+
+ QTestPrivate::testAllComparisonOperatorsCompile<IntWrapper, int>();
+ if (QTest::currentTestFailed())
+ return;
+
+ QTestPrivate::testAllComparisonOperatorsCompile<DoubleWrapper>();
+ if (QTest::currentTestFailed())
+ return;
+
+ QTestPrivate::testAllComparisonOperatorsCompile<DoubleWrapper, double>();
+ if (QTest::currentTestFailed())
+ return;
+
+ QTestPrivate::testAllComparisonOperatorsCompile<DoubleWrapper, IntWrapper>();
+ if (QTest::currentTestFailed())
+ return;
+
+ QTestPrivate::testAllComparisonOperatorsCompile<StringWrapper<QString>>();
+ if (QTest::currentTestFailed())
+ return;
+
+ QTestPrivate::testAllComparisonOperatorsCompile<StringWrapper<QString>, QAnyStringView>();
+ if (QTest::currentTestFailed())
+ return;
+}
+
+void tst_QCompareHelpers::compare_IntWrapper_data()
+{
+ compareIntData<IntWrapper, IntWrapper>();
+}
+
+void tst_QCompareHelpers::compare_IntWrapper()
+{
+ compareImpl<IntWrapper, IntWrapper, Qt::strong_ordering>();
+}
+
+void tst_QCompareHelpers::compare_IntWrapper_int_data()
+{
+ compareIntData<IntWrapper, int>();
+}
+
+void tst_QCompareHelpers::compare_IntWrapper_int()
+{
+ compareImpl<IntWrapper, int, Qt::strong_ordering>();
+}
+
+void tst_QCompareHelpers::compare_DoubleWrapper_data()
+{
+ compareFloatData<DoubleWrapper, DoubleWrapper>();
+}
+
+void tst_QCompareHelpers::compare_DoubleWrapper()
+{
+ compareImpl<DoubleWrapper, DoubleWrapper, Qt::partial_ordering>();
+}
+
+void tst_QCompareHelpers::compare_DoubleWrapper_double_data()
+{
+ compareFloatData<DoubleWrapper, double>();
+}
+
+void tst_QCompareHelpers::compare_DoubleWrapper_double()
+{
+ compareImpl<DoubleWrapper, double, Qt::partial_ordering>();
+}
+
+void tst_QCompareHelpers::compare_IntWrapper_DoubleWrapper_data()
+{
+ QTest::addColumn<IntWrapper>("lhs");
+ QTest::addColumn<DoubleWrapper>("rhs");
+ QTest::addColumn<Qt::partial_ordering>("expectedOrdering");
+
+ auto createRow = [](auto lhs, auto rhs, Qt::partial_ordering ordering) {
+ QTest::addRow("%d vs %f", lhs, rhs) << IntWrapper(lhs) << DoubleWrapper(rhs) << ordering;
+ };
+
+ createRow(0, 0.0, Qt::partial_ordering::equivalent);
+ createRow(-1, 0.0, Qt::partial_ordering::less);
+ createRow(1, 0.0, Qt::partial_ordering::greater);
+ createRow(0, -0.000001, Qt::partial_ordering::greater);
+ createRow(0, 0.000001, Qt::partial_ordering::less);
+
+ constexpr int max = std::numeric_limits<int>::max();
+ constexpr int min = std::numeric_limits<int>::min();
+ const double nan = qQNaN();
+ createRow(0, nan, Qt::partial_ordering::unordered);
+ createRow(max, nan, Qt::partial_ordering::unordered);
+ createRow(min, nan, Qt::partial_ordering::unordered);
+
+ const double inf = qInf();
+ createRow(0, inf, Qt::partial_ordering::less);
+ createRow(0, -inf, Qt::partial_ordering::greater);
+ createRow(max, inf, Qt::partial_ordering::less);
+ createRow(max, -inf, Qt::partial_ordering::greater);
+ createRow(min, inf, Qt::partial_ordering::less);
+ createRow(min, -inf, Qt::partial_ordering::greater);
+}
+
+void tst_QCompareHelpers::compare_IntWrapper_DoubleWrapper()
+{
+ compareImpl<IntWrapper, DoubleWrapper, Qt::partial_ordering>();
+}
+
+void tst_QCompareHelpers::compare_StringWrapper_data()
+{
+ compareStringData<StringWrapper<QString>, StringWrapper<QString>>();
+}
+
+void tst_QCompareHelpers::compare_StringWrapper()
+{
+ compareImpl<StringWrapper<QString>, StringWrapper<QString>, Qt::weak_ordering>();
+}
+
+void tst_QCompareHelpers::compare_StringWrapper_AnyStringView_data()
+{
+ compareStringData<StringWrapper<QString>, QAnyStringView>();
+}
+
+void tst_QCompareHelpers::compare_StringWrapper_AnyStringView()
+{
+ compareImpl<StringWrapper<QString>, QAnyStringView, Qt::weak_ordering>();
+}
+
+#define DECLARE_TYPE(Name, Type, Attrs, RetType, Constexpr, Suffix) \
+class Dummy ## Name \
+{ \
+public: \
+ Constexpr Dummy ## Name () {} \
+\
+private: \
+ friend Attrs Constexpr bool \
+ comparesEqual(const Dummy ## Name &lhs, const Dummy ## Name &rhs) noexcept; \
+ friend Attrs Constexpr RetType \
+ compareThreeWay(const Dummy ## Name &lhs, const Dummy ## Name &rhs) noexcept; \
+ friend Attrs Constexpr bool \
+ comparesEqual(const Dummy ## Name &lhs, int rhs) noexcept; \
+ friend Attrs Constexpr RetType \
+ compareThreeWay(const Dummy ## Name &lhs, int rhs) noexcept; \
+ Q_DECLARE_ ## Type ##_ORDERED ## Suffix (Dummy ## Name) \
+ Q_DECLARE_ ## Type ##_ORDERED ## Suffix (Dummy ## Name, int) \
+}; \
+\
+Attrs Constexpr bool comparesEqual(const Dummy ## Name &lhs, const Dummy ## Name &rhs) noexcept \
+{ Q_UNUSED(lhs); Q_UNUSED(rhs); return true; } \
+Attrs Constexpr RetType \
+compareThreeWay(const Dummy ## Name &lhs, const Dummy ## Name &rhs) noexcept \
+{ Q_UNUSED(lhs); Q_UNUSED(rhs); return RetType::equivalent; } \
+Attrs Constexpr bool comparesEqual(const Dummy ## Name &lhs, int rhs) noexcept \
+{ Q_UNUSED(lhs); Q_UNUSED(rhs); return true; } \
+Attrs Constexpr RetType compareThreeWay(const Dummy ## Name &lhs, int rhs) noexcept \
+{ Q_UNUSED(lhs); Q_UNUSED(rhs); return RetType::equivalent; }
+
+DECLARE_TYPE(PartialConstAttr, PARTIALLY, Q_DECL_PURE_FUNCTION, Qt::partial_ordering, constexpr,
+ _LITERAL_TYPE)
+DECLARE_TYPE(PartialConst, PARTIALLY, /* no attrs */, Qt::partial_ordering, constexpr, _LITERAL_TYPE)
+DECLARE_TYPE(PartialAttr, PARTIALLY, Q_DECL_CONST_FUNCTION, Qt::partial_ordering, , )
+DECLARE_TYPE(Partial, PARTIALLY, /* no attrs */, Qt::partial_ordering, , )
+
+DECLARE_TYPE(WeakConstAttr, WEAKLY, Q_DECL_PURE_FUNCTION, Qt::weak_ordering, constexpr, _LITERAL_TYPE)
+DECLARE_TYPE(WeakConst, WEAKLY, /* no attrs */, Qt::weak_ordering, constexpr, _LITERAL_TYPE)
+DECLARE_TYPE(WeakAttr, WEAKLY, Q_DECL_CONST_FUNCTION, Qt::weak_ordering, , )
+DECLARE_TYPE(Weak, WEAKLY, /* no attrs */, Qt::weak_ordering, , )
+
+DECLARE_TYPE(StrongConstAttr, STRONGLY, Q_DECL_PURE_FUNCTION, Qt::strong_ordering, constexpr,
+ _LITERAL_TYPE)
+DECLARE_TYPE(StrongConst, STRONGLY, /* no attrs */, Qt::strong_ordering, constexpr, _LITERAL_TYPE)
+DECLARE_TYPE(StrongAttr, STRONGLY, Q_DECL_CONST_FUNCTION, Qt::strong_ordering, , )
+DECLARE_TYPE(Strong, STRONGLY, /* no attrs */, Qt::strong_ordering, , )
+
+#define DECLARE_EQUALITY_COMPARABLE(Name, Attrs, Constexpr, Suffix) \
+class Dummy ## Name \
+{ \
+public: \
+ Constexpr Dummy ## Name (int) {} \
+\
+private: \
+ friend Attrs Constexpr bool \
+ comparesEqual(const Dummy ## Name &lhs, const Dummy ## Name &rhs) noexcept; \
+ friend Attrs Constexpr bool comparesEqual(const Dummy ## Name &lhs, int rhs) noexcept; \
+ Q_DECLARE_EQUALITY_COMPARABLE ## Suffix (Dummy ## Name) \
+ Q_DECLARE_EQUALITY_COMPARABLE ## Suffix (Dummy ## Name, int) \
+}; \
+\
+Attrs Constexpr bool comparesEqual(const Dummy ## Name &lhs, const Dummy ## Name &rhs) noexcept \
+{ Q_UNUSED(lhs); Q_UNUSED(rhs); return true; } \
+Attrs Constexpr bool comparesEqual(const Dummy ## Name &lhs, int rhs) noexcept \
+{ Q_UNUSED(lhs); Q_UNUSED(rhs); return true; } \
+
+DECLARE_EQUALITY_COMPARABLE(ConstAttr, Q_DECL_PURE_FUNCTION, constexpr, _LITERAL_TYPE)
+DECLARE_EQUALITY_COMPARABLE(Const, /* no attrs */, constexpr, _LITERAL_TYPE)
+DECLARE_EQUALITY_COMPARABLE(Attr, Q_DECL_CONST_FUNCTION, , )
+DECLARE_EQUALITY_COMPARABLE(None, /* no attrs */, , )
+
+void tst_QCompareHelpers::generatedClasses()
+{
+#define COMPARE(ClassName) \
+ do { \
+ QTestPrivate::testAllComparisonOperatorsCompile<ClassName>(); \
+ QTestPrivate::testAllComparisonOperatorsCompile<ClassName, int>(); \
+ } while (0)
+
+ COMPARE(DummyPartialConstAttr);
+ COMPARE(DummyPartialConst);
+ COMPARE(DummyPartialAttr);
+ COMPARE(DummyPartial);
+
+ COMPARE(DummyWeakConstAttr);
+ COMPARE(DummyWeakConst);
+ COMPARE(DummyWeakAttr);
+ COMPARE(DummyWeak);
+
+ COMPARE(DummyStrongConstAttr);
+ COMPARE(DummyStrongConst);
+ COMPARE(DummyStrongAttr);
+ COMPARE(DummyStrong);
+#undef COMPARE
+
+ QTestPrivate::testEqualityOperatorsCompile<DummyConstAttr>();
+ QTestPrivate::testEqualityOperatorsCompile<DummyConstAttr, int>();
+
+ QTestPrivate::testEqualityOperatorsCompile<DummyConst>();
+ QTestPrivate::testEqualityOperatorsCompile<DummyConst, int>();
+
+ QTestPrivate::testEqualityOperatorsCompile<DummyAttr>();
+ QTestPrivate::testEqualityOperatorsCompile<DummyAttr, int>();
+
+ QTestPrivate::testEqualityOperatorsCompile<DummyNone>();
+ QTestPrivate::testEqualityOperatorsCompile<DummyNone, int>();
+}
+
+template <typename LeftType, typename RightType,
+ Qt::if_integral<LeftType> = true,
+ Qt::if_integral<RightType> = true>
+void testOrderForTypes()
+{
+ LeftType l0{0};
+ LeftType l1{1};
+ RightType r0{0};
+ RightType r1{1};
+ QCOMPARE_EQ(Qt::compareThreeWay(l0, r1), Qt::strong_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(l1, r0), Qt::strong_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(l1, r1), Qt::strong_ordering::equivalent);
+ // also swap types
+ QCOMPARE_EQ(Qt::compareThreeWay(r1, l0), Qt::strong_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(r0, l1), Qt::strong_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(r1, l1), Qt::strong_ordering::equivalent);
+
+#ifdef __cpp_lib_three_way_comparison
+ QCOMPARE_EQ(Qt::compareThreeWay(l0, r1), std::strong_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(l1, r0), std::strong_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(l1, r1), std::strong_ordering::equivalent);
+
+ QCOMPARE_EQ(Qt::compareThreeWay(r1, l0), std::strong_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(r0, l1), std::strong_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(r1, l1), std::strong_ordering::equivalent);
+#endif // __cpp_lib_three_way_comparison
+
+ if constexpr (std::is_signed_v<LeftType>) {
+ LeftType lm1{-1};
+ QCOMPARE_EQ(Qt::compareThreeWay(lm1, r1), Qt::strong_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(r1, lm1), Qt::strong_ordering::greater);
+#ifdef __cpp_lib_three_way_comparison
+ QCOMPARE_EQ(Qt::compareThreeWay(lm1, r1), std::strong_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(r1, lm1), std::strong_ordering::greater);
+#endif // __cpp_lib_three_way_comparison
+ }
+ if constexpr (std::is_signed_v<RightType>) {
+ RightType rm1{-1};
+ QCOMPARE_EQ(Qt::compareThreeWay(rm1, l1), Qt::strong_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(l1, rm1), Qt::strong_ordering::greater);
+#ifdef __cpp_lib_three_way_comparison
+ QCOMPARE_EQ(Qt::compareThreeWay(rm1, l1), std::strong_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(l1, rm1), std::strong_ordering::greater);
+#endif // __cpp_lib_three_way_comparison
+ }
+}
+
+template <typename LeftType, typename RightType,
+ Qt::if_floating_point<LeftType> = true,
+ Qt::if_floating_point<RightType> = true>
+void testOrderForTypes()
+{
+ constexpr auto lNeg = LeftType(-1);
+ constexpr auto lPos = LeftType( 1);
+
+ constexpr auto rNeg = RightType(-1);
+ constexpr auto rPos = RightType( 1);
+
+ QCOMPARE_EQ(Qt::compareThreeWay(lNeg, rPos), Qt::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(lPos, rNeg), Qt::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNeg, lPos), Qt::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(rPos, lNeg), Qt::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(lNeg, rNeg), Qt::partial_ordering::equivalent);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNeg, lNeg), Qt::partial_ordering::equivalent);
+
+ LeftType lNaN{std::numeric_limits<LeftType>::quiet_NaN()};
+ LeftType lInf{std::numeric_limits<LeftType>::infinity()};
+
+ RightType rNaN{std::numeric_limits<RightType>::quiet_NaN()};
+ RightType rInf{std::numeric_limits<RightType>::infinity()};
+
+ QCOMPARE_EQ(Qt::compareThreeWay(lNaN, rPos), Qt::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNeg, lNaN), Qt::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(lNeg, rNaN), Qt::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNaN, lPos), Qt::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNaN, lNaN), Qt::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(lNaN, rNaN), Qt::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(lNaN, rInf), Qt::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNaN, -lInf), Qt::partial_ordering::unordered);
+
+ QCOMPARE_EQ(Qt::compareThreeWay(lInf, rPos), Qt::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(rPos, lInf), Qt::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(rInf, lNeg), Qt::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(lNeg, rInf), Qt::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(lInf, -rInf), Qt::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(-lInf, rInf), Qt::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(-rInf, lInf), Qt::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(rInf, -lInf), Qt::partial_ordering::greater);
+
+#ifdef __cpp_lib_three_way_comparison
+ QCOMPARE_EQ(Qt::compareThreeWay(lNeg, rPos), std::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(lPos, rNeg), std::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNeg, lPos), std::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(rPos, lNeg), std::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(lNeg, rNeg), std::partial_ordering::equivalent);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNeg, lNeg), std::partial_ordering::equivalent);
+
+ QCOMPARE_EQ(Qt::compareThreeWay(lNaN, rPos), std::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNeg, lNaN), std::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(lNeg, rNaN), std::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNaN, lPos), std::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNaN, lNaN), std::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(lNaN, rNaN), std::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(lNaN, rInf), std::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNaN, -lInf), std::partial_ordering::unordered);
+
+ QCOMPARE_EQ(Qt::compareThreeWay(lInf, rPos), std::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(rPos, lInf), std::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(rInf, lNeg), std::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(lNeg, rInf), std::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(lInf, -rInf), std::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(-lInf, rInf), std::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(-rInf, lInf), std::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(rInf, -lInf), std::partial_ordering::greater);
+#endif // __cpp_lib_three_way_comparison
+}
+
+template <typename IntType, typename FloatType,
+ Qt::if_integral<IntType> = true,
+ Qt::if_floating_point<FloatType> = true>
+void testOrderForTypes()
+{
+ IntType l0{0};
+ IntType l1{1};
+
+ constexpr FloatType r0{0};
+ constexpr FloatType r1{1};
+ FloatType rNaN{std::numeric_limits<FloatType>::quiet_NaN()};
+
+ QCOMPARE_EQ(Qt::compareThreeWay(l0, r1), Qt::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(l1, r0), Qt::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(r1, l0), Qt::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(r0, l1), Qt::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(l0, r0), Qt::partial_ordering::equivalent);
+ QCOMPARE_EQ(Qt::compareThreeWay(r0, l0), Qt::partial_ordering::equivalent);
+ QCOMPARE_EQ(Qt::compareThreeWay(l0, rNaN), Qt::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNaN, l1), Qt::partial_ordering::unordered);
+#ifdef __cpp_lib_three_way_comparison
+ QCOMPARE_EQ(Qt::compareThreeWay(l0, r1), std::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(l1, r0), std::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(r1, l0), std::partial_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(r0, l1), std::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(l0, r0), std::partial_ordering::equivalent);
+ QCOMPARE_EQ(Qt::compareThreeWay(r0, l0), std::partial_ordering::equivalent);
+ QCOMPARE_EQ(Qt::compareThreeWay(l0, rNaN), std::partial_ordering::unordered);
+ QCOMPARE_EQ(Qt::compareThreeWay(rNaN, l1), std::partial_ordering::unordered);
+#endif // __cpp_lib_three_way_comparison
+}
+
+enum class TestEnum : quint8 {
+ Smaller,
+ Bigger
+};
+
+void tst_QCompareHelpers::builtinOrder()
+{
+#define TEST_BUILTIN(Left, Right) \
+ testOrderForTypes<Left, Right>(); \
+ if (QTest::currentTestFailed()) { \
+ qDebug("Failed Qt::compareThreeWay() test for builtin types " #Left " and " #Right); \
+ return; \
+ }
+
+ // some combinations
+ TEST_BUILTIN(char, char)
+#if CHAR_MIN < 0
+ TEST_BUILTIN(char, short)
+ TEST_BUILTIN(qint8, char)
+#else
+ TEST_BUILTIN(char, ushort)
+ TEST_BUILTIN(quint8, char)
+#endif
+ TEST_BUILTIN(qint8, qint8)
+ TEST_BUILTIN(qint8, int)
+ TEST_BUILTIN(ulong, quint8)
+ TEST_BUILTIN(ushort, uchar)
+ TEST_BUILTIN(int, int)
+ TEST_BUILTIN(uint, ulong)
+ TEST_BUILTIN(long, int)
+ TEST_BUILTIN(uint, quint64)
+ TEST_BUILTIN(qint64, short)
+ TEST_BUILTIN(wchar_t, wchar_t)
+ TEST_BUILTIN(uint, char16_t)
+ TEST_BUILTIN(char32_t, char32_t)
+ TEST_BUILTIN(char32_t, ushort)
+#ifdef __cpp_char8_t
+ TEST_BUILTIN(char8_t, char8_t)
+ TEST_BUILTIN(char8_t, ushort)
+ TEST_BUILTIN(char8_t, uint)
+ TEST_BUILTIN(char8_t, quint64)
+#endif // __cpp_char8_t
+#ifdef QT_SUPPORTS_INT128
+ TEST_BUILTIN(qint128, qint128)
+ TEST_BUILTIN(quint128, quint128)
+ TEST_BUILTIN(qint128, int)
+ TEST_BUILTIN(ushort, quint128)
+#endif
+ TEST_BUILTIN(float, double)
+ TEST_BUILTIN(double, float)
+ TEST_BUILTIN(quint64, float)
+ TEST_BUILTIN(qint64, double)
+#ifdef __STDCPP_FLOAT16_T__
+ TEST_BUILTIN(std::float16_t, std::float16_t)
+ TEST_BUILTIN(std::float16_t, double)
+ TEST_BUILTIN(qint64, std::float16_t)
+ TEST_BUILTIN(uint, std::float16_t)
+#endif
+ TEST_BUILTIN(long double, long double)
+ TEST_BUILTIN(float, long double)
+ TEST_BUILTIN(double, long double)
+ TEST_BUILTIN(quint64, long double)
+ TEST_BUILTIN(ushort, long double)
+
+#if QFLOAT16_IS_NATIVE
+ {
+ // Cannot use TEST_BUILTIN here, because std::numeric_limits are not defined
+ // for QtPrivate::NativeFloat16Type.
+ constexpr auto smaller = QtPrivate::NativeFloat16Type(1);
+ constexpr auto bigger = QtPrivate::NativeFloat16Type(2);
+ // native vs native
+ QCOMPARE_EQ(Qt::compareThreeWay(smaller, smaller), Qt::partial_ordering::equivalent);
+ QCOMPARE_EQ(Qt::compareThreeWay(smaller, bigger), Qt::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(bigger, smaller), Qt::partial_ordering::greater);
+ // native vs float
+ QCOMPARE_EQ(Qt::compareThreeWay(smaller, 1.0f), Qt::partial_ordering::equivalent);
+ QCOMPARE_EQ(Qt::compareThreeWay(1.0f, bigger), Qt::partial_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(bigger, 1.0f), Qt::partial_ordering::greater);
+ const auto floatNaN = std::numeric_limits<float>::quiet_NaN();
+ QCOMPARE_EQ(Qt::compareThreeWay(bigger, floatNaN), Qt::partial_ordering::unordered);
+ }
+#endif
+
+ QCOMPARE_EQ(Qt::compareThreeWay(TestEnum::Smaller, TestEnum::Bigger),
+ Qt::strong_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(TestEnum::Bigger, TestEnum::Smaller),
+ Qt::strong_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(TestEnum::Smaller, TestEnum::Smaller),
+ Qt::strong_ordering::equivalent);
+
+ std::array<int, 2> arr{1, 0};
+ QCOMPARE_EQ(Qt::compareThreeWay(&arr[0], &arr[1]), Qt::strong_ordering::less);
+ QCOMPARE_EQ(Qt::compareThreeWay(arr.data(), &arr[0]), Qt::strong_ordering::equivalent);
+
+ class Base {};
+ class Derived : public Base {};
+
+ auto b = std::make_unique<Base>();
+ auto d = std::make_unique<Derived>();
+ QCOMPARE_NE(Qt::compareThreeWay(b.get(), d.get()), Qt::strong_ordering::equivalent);
+ QCOMPARE_EQ(Qt::compareThreeWay(b.get(), nullptr), Qt::strong_ordering::greater);
+ QCOMPARE_EQ(Qt::compareThreeWay(nullptr, d.get()), Qt::strong_ordering::less);
+
+#undef TEST_BUILTIN
+}
+
+QTEST_MAIN(tst_QCompareHelpers)
+#include "tst_qcomparehelpers.moc"
diff --git a/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers.h b/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers.h
new file mode 100644
index 0000000000..16398b0978
--- /dev/null
+++ b/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers.h
@@ -0,0 +1,63 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef TST_QCOMPAREHELPERS_H
+#define TST_QCOMPAREHELPERS_H
+
+#include <QtCore/qcompare.h>
+
+#include <QtTest/qtest.h>
+#include <QtTest/private/qcomparisontesthelper_p.h>
+
+class tst_QCompareHelpers : public QObject
+{
+ Q_OBJECT
+
+private:
+ template <typename LeftType, typename RightType, typename OrderingType>
+ void compareImpl();
+
+ template <typename LeftType, typename RightType>
+ void compareIntData();
+
+ template <typename LeftType, typename RightType>
+ void compareFloatData();
+
+ template <typename LeftType, typename RightType>
+ void compareStringData();
+
+private Q_SLOTS:
+ // tst_qcomparehelpers.cpp
+ void comparisonCompiles();
+
+ void compare_IntWrapper_data();
+ void compare_IntWrapper();
+
+ void compare_IntWrapper_int_data();
+ void compare_IntWrapper_int();
+
+ void compare_DoubleWrapper_data();
+ void compare_DoubleWrapper();
+
+ void compare_DoubleWrapper_double_data();
+ void compare_DoubleWrapper_double();
+
+ void compare_IntWrapper_DoubleWrapper_data();
+ void compare_IntWrapper_DoubleWrapper();
+
+ void compare_StringWrapper_data();
+ void compare_StringWrapper();
+
+ void compare_StringWrapper_AnyStringView_data();
+ void compare_StringWrapper_AnyStringView();
+
+ void generatedClasses();
+
+ void builtinOrder();
+
+ // Add new test cases to tst_qcomparehelpers1.cpp, because minGW already
+ // complains about a too large tst_qcomparehelpers.cpp.obj object file
+ void compareWithAttributes();
+};
+
+#endif // TST_QCOMPAREHELPERS_H
diff --git a/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers1.cpp b/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers1.cpp
new file mode 100644
index 0000000000..a3b8200a63
--- /dev/null
+++ b/tests/auto/corelib/global/qcomparehelpers/tst_qcomparehelpers1.cpp
@@ -0,0 +1,59 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "tst_qcomparehelpers.h"
+
+#define DECLARE_TYPE(Name, Type, RetType, Constexpr, Suffix) \
+class Deprecated ## Name \
+{ \
+public: \
+ Constexpr Deprecated ## Name () {} \
+\
+private: \
+ friend Constexpr bool \
+ comparesEqual(const Deprecated ## Name &lhs, int rhs) noexcept; \
+ friend Constexpr RetType \
+ compareThreeWay(const Deprecated ## Name &lhs, int rhs) noexcept; \
+ Q_DECLARE_ ## Type ## _ORDERED ## Suffix (Deprecated ## Name, int, \
+ Q_DECL_DEPRECATED_X("This op is deprecated")) \
+}; \
+\
+Constexpr bool comparesEqual(const Deprecated ## Name &lhs, int rhs) noexcept \
+{ Q_UNUSED(lhs); Q_UNUSED(rhs); return true; } \
+Constexpr RetType compareThreeWay(const Deprecated ## Name &lhs, int rhs) noexcept \
+{ Q_UNUSED(lhs); Q_UNUSED(rhs); return RetType::equivalent; }
+
+DECLARE_TYPE(PartialConst, PARTIALLY, Qt::partial_ordering, constexpr, _LITERAL_TYPE)
+DECLARE_TYPE(Partial, PARTIALLY, Qt::partial_ordering, , )
+DECLARE_TYPE(WeakConst, WEAKLY, Qt::weak_ordering, constexpr, _LITERAL_TYPE)
+DECLARE_TYPE(Weak, WEAKLY, Qt::weak_ordering, , )
+DECLARE_TYPE(StrongConst, STRONGLY, Qt::strong_ordering, constexpr, _LITERAL_TYPE)
+DECLARE_TYPE(Strong, STRONGLY, Qt::strong_ordering, , )
+
+#undef DECLARE_TYPE
+
+void tst_QCompareHelpers::compareWithAttributes()
+{
+ // All these comparisons would trigger deprecation warnings.
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+
+#define COMPARE(ClassName) \
+ do { \
+ ClassName c; \
+ QCOMPARE_EQ(c, 0); \
+ QCOMPARE_LE(c, 0); \
+ QCOMPARE_GE(0, c); \
+ } while (false)
+
+ COMPARE(DeprecatedPartialConst);
+ COMPARE(DeprecatedPartial);
+ COMPARE(DeprecatedWeakConst);
+ COMPARE(DeprecatedWeak);
+ COMPARE(DeprecatedStrongConst);
+ COMPARE(DeprecatedStrong);
+
+#undef COMPARE
+
+QT_WARNING_POP
+}
diff --git a/tests/auto/corelib/global/qcomparehelpers/wrappertypes.h b/tests/auto/corelib/global/qcomparehelpers/wrappertypes.h
new file mode 100644
index 0000000000..1dd221a8b0
--- /dev/null
+++ b/tests/auto/corelib/global/qcomparehelpers/wrappertypes.h
@@ -0,0 +1,116 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef TST_QCOMPAREHELPERS_WRAPPERTYPES_H
+#define TST_QCOMPAREHELPERS_WRAPPERTYPES_H
+
+#include <QtCore/qanystringview.h>
+#include <QtCore/qcompare.h>
+
+class IntWrapper
+{
+public:
+ // implicit constructor and operator int() to simulate the case that
+ // triggers a bug on MSVC < 19.36.
+ IntWrapper(int val) : m_val(val) {}
+ operator int() const noexcept { return m_val; }
+
+ int value() const { return m_val; }
+
+private:
+ friend bool comparesEqual(const IntWrapper &lhs, const IntWrapper &rhs) noexcept
+ { return lhs.m_val == rhs.m_val; }
+ friend Qt::strong_ordering
+ compareThreeWay(const IntWrapper &lhs, const IntWrapper &rhs) noexcept
+ {
+ return Qt::compareThreeWay(lhs.m_val, rhs.m_val);
+ }
+ friend bool comparesEqual(const IntWrapper &lhs, int rhs) noexcept
+ { return lhs.m_val == rhs; }
+ friend Qt::strong_ordering compareThreeWay(const IntWrapper &lhs, int rhs) noexcept
+ { return compareThreeWay(lhs, IntWrapper(rhs)); }
+
+ Q_DECLARE_STRONGLY_ORDERED(IntWrapper)
+ Q_DECLARE_STRONGLY_ORDERED(IntWrapper, int)
+
+ int m_val = 0;
+};
+
+class DoubleWrapper
+{
+public:
+ explicit DoubleWrapper(double val) : m_val(val) {}
+ double value() const { return m_val; }
+
+private:
+ friend bool comparesEqual(const DoubleWrapper &lhs, const DoubleWrapper &rhs) noexcept
+ { return lhs.m_val == rhs.m_val; }
+ friend Qt::partial_ordering
+ compareThreeWay(const DoubleWrapper &lhs, const DoubleWrapper &rhs) noexcept
+ {
+ return Qt::compareThreeWay(lhs.m_val, rhs.m_val);
+ }
+ friend bool comparesEqual(const DoubleWrapper &lhs, const IntWrapper &rhs) noexcept
+ { return comparesEqual(lhs, DoubleWrapper(rhs.value())); }
+ friend Qt::partial_ordering
+ compareThreeWay(const DoubleWrapper &lhs, const IntWrapper &rhs) noexcept
+ { return compareThreeWay(lhs, DoubleWrapper(rhs.value())); }
+ friend bool comparesEqual(const DoubleWrapper &lhs, double rhs) noexcept
+ { return lhs.m_val == rhs; }
+ friend Qt::partial_ordering compareThreeWay(const DoubleWrapper &lhs, double rhs) noexcept
+ {
+ return Qt::compareThreeWay(lhs.m_val, rhs);
+ }
+
+ Q_DECLARE_PARTIALLY_ORDERED(DoubleWrapper)
+ Q_DECLARE_PARTIALLY_ORDERED(DoubleWrapper, IntWrapper)
+ Q_DECLARE_PARTIALLY_ORDERED(DoubleWrapper, double)
+
+ double m_val = 0.0;
+};
+
+template <typename String>
+class StringWrapper
+{
+public:
+ explicit StringWrapper(String val) : m_val(val) {}
+ String value() const { return m_val; }
+
+private:
+ static bool equalsHelper(QAnyStringView lhs, QAnyStringView rhs) noexcept
+ { return QAnyStringView::compare(lhs, rhs, Qt::CaseInsensitive) == 0; }
+
+ static Qt::weak_ordering compareHelper(QAnyStringView lhs, QAnyStringView rhs) noexcept
+ {
+ const int res = QAnyStringView::compare(lhs, rhs, Qt::CaseInsensitive);
+ if (res < 0)
+ return Qt::weak_ordering::less;
+ else if (res > 0)
+ return Qt::weak_ordering::greater;
+ else
+ return Qt::weak_ordering::equivalent;
+ }
+
+ // Some of the helper functions are intentionally NOT marked as noexcept
+ // to test the conditional noexcept in the macros.
+ template <typename T>
+ friend bool comparesEqual(const StringWrapper<T> &lhs, const StringWrapper<T> &rhs) noexcept
+ { return StringWrapper<T>::equalsHelper(lhs.m_val, rhs.m_val); }
+ template <typename T>
+ friend Qt::weak_ordering
+ compareThreeWay(const StringWrapper<T> &lhs, const StringWrapper<T> &rhs) noexcept
+ { return StringWrapper<T>::compareHelper(lhs.m_val, rhs.m_val); }
+ template <typename T>
+ friend bool comparesEqual(const StringWrapper<T> &lhs, QAnyStringView rhs)
+ { return StringWrapper<T>::equalsHelper(lhs.m_val, rhs); }
+ template <typename T>
+ friend Qt::weak_ordering compareThreeWay(const StringWrapper<T> &lhs, QAnyStringView rhs)
+ { return StringWrapper<T>::compareHelper(lhs.m_val, rhs); }
+
+ Q_DECLARE_WEAKLY_ORDERED(StringWrapper)
+ Q_DECLARE_WEAKLY_ORDERED(StringWrapper, QAnyStringView)
+
+ String m_val;
+};
+
+#endif // TST_QCOMPAREHELPERS_WRAPPERTYPES_H
diff --git a/tests/auto/corelib/global/qflags/CMakeLists.txt b/tests/auto/corelib/global/qflags/CMakeLists.txt
index 998834d619..8b01ea774f 100644
--- a/tests/auto/corelib/global/qflags/CMakeLists.txt
+++ b/tests/auto/corelib/global/qflags/CMakeLists.txt
@@ -1,13 +1,24 @@
-# Generated from qflags.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qflags Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qflags LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qflags
SOURCES
tst_qflags.cpp
)
-## Scopes:
-#####################################################################
+qt_internal_add_test(tst_qflags_non_typesafe
+ SOURCES
+ tst_qflags.cpp
+ DEFINES
+ QFLAGS_TEST_NO_TYPESAFE_FLAGS
+)
diff --git a/tests/auto/corelib/global/qflags/tst_qflags.cpp b/tests/auto/corelib/global/qflags/tst_qflags.cpp
index 3179cfc9d2..d226e8d6b4 100644
--- a/tests/auto/corelib/global/qflags/tst_qflags.cpp
+++ b/tests/auto/corelib/global/qflags/tst_qflags.cpp
@@ -1,38 +1,25 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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 <QTest>
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifdef QFLAGS_TEST_NO_TYPESAFE_FLAGS
+# ifdef QT_TYPESAFE_FLAGS
+# undef QT_TYPESAFE_FLAGS
+# endif
+#else
+# ifndef QT_TYPESAFE_FLAGS
+# define QT_TYPESAFE_FLAGS
+# endif
+#endif
-QT_WARNING_DISABLE_DEPRECATED
+#include <QTest>
class tst_QFlags: public QObject
{
Q_OBJECT
private slots:
+ void boolCasts() const;
+ void operators() const;
+ void mixingDifferentEnums() const;
void testFlag() const;
void testFlagZeroFlag() const;
void testFlagMultiBits() const;
@@ -46,6 +33,105 @@ private slots:
void adl();
};
+void tst_QFlags::boolCasts() const
+{
+ // This tests that the operator overloading is sufficient so that common
+ // idioms involving flags -> bool casts work as expected:
+
+ const Qt::Alignment nonNull = Qt::AlignCenter;
+ const Qt::Alignment null = {};
+
+ // basic premiss:
+ QVERIFY(bool(nonNull));
+ QVERIFY(!bool(null));
+
+ // The rest is just checking that stuff compiles:
+
+ // QVERIFY should compile:
+ QVERIFY(nonNull);
+ QVERIFY(!null);
+
+ // ifs should compile:
+ if (null) QFAIL("Can't contextually convert QFlags to bool!");
+ if (!nonNull) QFAIL("Missing operator! on QFlags (shouldn't be necessary).");
+
+ // ternary should compile:
+ QVERIFY(nonNull ? true : false);
+ QVERIFY(!null ? true : false);
+
+ // logical operators should compile:
+ QVERIFY(nonNull && true);
+ QVERIFY(nonNull || false);
+ QVERIFY(!null && true);
+ QVERIFY(!null || false);
+
+ // ... in both directions:
+ QVERIFY(true && nonNull);
+ QVERIFY(false || nonNull);
+ QVERIFY(true && !null);
+ QVERIFY(false || !null);
+
+ // ... and mixed:
+ QVERIFY(null || nonNull);
+ QVERIFY(!(null && nonNull));
+}
+
+void tst_QFlags::operators() const
+{
+#define CHECK(op, LHS, RHS, RES) \
+ do { \
+ QCOMPARE((LHS op RHS), (RES)); \
+ QCOMPARE(( /*CTAD*/ QFlags(LHS) op RHS), (RES)); \
+ QCOMPARE((LHS op QFlags(RHS)), (RES)); \
+ QCOMPARE((QFlags(LHS) op QFlags(RHS)), (RES)); \
+ QCOMPARE((QFlags(LHS) op ## = RHS), (RES)); \
+ QCOMPARE((QFlags(LHS) op ## = QFlags(RHS)), (RES)); \
+ } while (false)
+
+ CHECK(|, Qt::AlignHCenter, Qt::AlignVCenter, Qt::AlignCenter);
+ CHECK(|, Qt::AlignHCenter, Qt::AlignHCenter, Qt::AlignHCenter);
+ CHECK(&, Qt::AlignHCenter, Qt::AlignVCenter, Qt::Alignment());
+ CHECK(&, Qt::AlignHCenter, Qt::AlignHCenter, Qt::AlignHCenter);
+ CHECK(^, Qt::AlignHCenter, Qt::AlignVCenter, Qt::AlignCenter);
+ CHECK(^, Qt::AlignHCenter, Qt::AlignHCenter, Qt::Alignment());
+#undef CHECK
+}
+
+void tst_QFlags::mixingDifferentEnums() const
+{
+#define CHECK(op, LHS, RHS, RES) \
+ /* LHS must be QFlags'able */ \
+ do { \
+ QCOMPARE((LHS op RHS), (RES)); \
+ QCOMPARE((RHS op LHS), (RES)); \
+ /*QCOMPARE(( / *CTAD* / QFlags(LHS) op RHS), (RES));*/ \
+ /*QCOMPARE((QFlags(LHS) op ## = RHS), (RES));*/ \
+ } while (false)
+
+ // AlignmentFlags <-> TextFlags
+ {
+ CHECK(|, Qt::AlignCenter, Qt::TextSingleLine, 0x0184);
+ CHECK(&, Qt::AlignCenter, Qt::TextSingleLine, 0x0000);
+ CHECK(^, Qt::AlignCenter, Qt::TextSingleLine, 0x0184);
+ }
+ // QFlags<AlignmentFlags> <-> TextFlags
+ {
+#ifndef QT_TYPESAFE_FLAGS // QTBUG-101344
+ Qt::Alignment MyAlignCenter = Qt::AlignCenter; // convert enum to QFlags
+ CHECK(|, MyAlignCenter, Qt::TextSingleLine, 0x0184U); // yes, unsigned!
+ CHECK(&, MyAlignCenter, Qt::TextSingleLine, 0x0000U); // yes, unsigned!
+ CHECK(^, MyAlignCenter, Qt::TextSingleLine, 0x0184U); // yes, unsigned!
+#endif
+ }
+ // TextElideMode <-> TextFlags
+ {
+ CHECK(|, Qt::ElideNone, Qt::TextSingleLine, 0x0103);
+ CHECK(&, Qt::ElideNone, Qt::TextSingleLine, 0x0000);
+ CHECK(^, Qt::ElideNone, Qt::TextSingleLine, 0x0103);
+ }
+#undef CHECK
+}
+
void tst_QFlags::testFlag() const
{
Qt::MouseButtons btn = Qt::LeftButton | Qt::RightButton;
@@ -150,6 +236,7 @@ void tst_QFlags::testAnyFlag()
}
template <unsigned int N, typename T> bool verifyConstExpr(T n) { return n == N; }
+template <unsigned int N, typename T> bool verifyConstExpr(QFlags<T> n) { return n.toInt() == N; }
constexpr Qt::MouseButtons testRelaxedConstExpr()
{
@@ -164,25 +251,32 @@ constexpr Qt::MouseButtons testRelaxedConstExpr()
void tst_QFlags::constExpr()
{
Qt::MouseButtons btn = Qt::LeftButton | Qt::RightButton;
- switch (btn) {
+ switch (btn.toInt()) {
case Qt::LeftButton: QVERIFY(false); break;
case Qt::RightButton: QVERIFY(false); break;
- case int(Qt::LeftButton | Qt::RightButton): QVERIFY(true); break;
- default: QFAIL(qPrintable(QStringLiteral("Unexpected button: %1").arg(btn)));
+ case (Qt::LeftButton | Qt::RightButton).toInt(): QVERIFY(true); break;
+ default: QFAIL(qPrintable(QStringLiteral("Unexpected button: %1").arg(btn.toInt())));
}
- QVERIFY(verifyConstExpr<uint((Qt::LeftButton | Qt::RightButton) & Qt::LeftButton)>(Qt::LeftButton));
- QVERIFY(verifyConstExpr<uint((Qt::LeftButton | Qt::RightButton) & Qt::MiddleButton)>(0));
- QVERIFY(verifyConstExpr<uint((Qt::LeftButton | Qt::RightButton) | Qt::MiddleButton)>(Qt::LeftButton | Qt::RightButton | Qt::MiddleButton));
- QVERIFY(verifyConstExpr<uint(~(Qt::LeftButton | Qt::RightButton))>(~(Qt::LeftButton | Qt::RightButton)));
- QVERIFY(verifyConstExpr<uint(Qt::MouseButtons(Qt::LeftButton) ^ Qt::RightButton)>(Qt::LeftButton ^ Qt::RightButton));
- QVERIFY(verifyConstExpr<uint(Qt::MouseButtons(0))>(0));
- QVERIFY(verifyConstExpr<uint(Qt::MouseButtons(Qt::RightButton) & 0xff)>(Qt::RightButton));
- QVERIFY(verifyConstExpr<uint(Qt::MouseButtons(Qt::RightButton) | 0xff)>(0xff));
+#define VERIFY_CONSTEXPR(expression, expected) \
+ QVERIFY(verifyConstExpr<(expression).toInt()>(expected))
+
+ VERIFY_CONSTEXPR((Qt::LeftButton | Qt::RightButton) & Qt::LeftButton, Qt::LeftButton);
+ VERIFY_CONSTEXPR((Qt::LeftButton | Qt::RightButton) & Qt::MiddleButton, 0);
+ VERIFY_CONSTEXPR((Qt::LeftButton | Qt::RightButton) | Qt::MiddleButton, Qt::LeftButton | Qt::RightButton | Qt::MiddleButton);
+ VERIFY_CONSTEXPR(~(Qt::LeftButton | Qt::RightButton), ~(Qt::LeftButton | Qt::RightButton));
+ VERIFY_CONSTEXPR(Qt::MouseButtons(Qt::LeftButton) ^ Qt::RightButton, Qt::LeftButton ^ Qt::RightButton);
+ VERIFY_CONSTEXPR(Qt::MouseButtons(0), 0);
+#ifndef QT_TYPESAFE_FLAGS
+ QVERIFY(verifyConstExpr<(Qt::MouseButtons(Qt::RightButton) & 0xff)>(Qt::RightButton));
+ QVERIFY(verifyConstExpr<(Qt::MouseButtons(Qt::RightButton) | 0xff)>(0xff));
+#endif
QVERIFY(!verifyConstExpr<Qt::RightButton>(~Qt::MouseButtons(Qt::LeftButton)));
- QVERIFY(verifyConstExpr<uint(testRelaxedConstExpr())>(Qt::MiddleButton));
+ VERIFY_CONSTEXPR(testRelaxedConstExpr(), Qt::MiddleButton);
+
+#undef VERIFY_CONSTEXPR
}
void tst_QFlags::signedness()
@@ -207,7 +301,7 @@ Q_DECLARE_FLAGS( MyStrictNoOpFlags, MyStrictNoOpEnum )
static_assert( !QTypeInfo<MyStrictFlags>::isComplex );
static_assert( QTypeInfo<MyStrictFlags>::isRelocatable );
-static_assert( !QTypeInfo<MyStrictFlags>::isPointer );
+static_assert( !std::is_pointer_v<MyStrictFlags> );
void tst_QFlags::classEnum()
{
@@ -233,11 +327,14 @@ void tst_QFlags::classEnum()
QVERIFY(!f0);
+#ifndef QT_TYPESAFE_FLAGS
QCOMPARE(f3 & int(1), 1);
QCOMPARE(f3 & uint(1), 1);
+#endif
QCOMPARE(f3 & MyStrictEnum::StrictOne, 1);
MyStrictFlags aux;
+#ifndef QT_TYPESAFE_FLAGS
aux = f3;
aux &= int(1);
QCOMPARE(aux, 1);
@@ -245,6 +342,7 @@ void tst_QFlags::classEnum()
aux = f3;
aux &= uint(1);
QCOMPARE(aux, 1);
+#endif
aux = f3;
aux &= MyStrictEnum::StrictOne;
@@ -377,7 +475,7 @@ Q_DECLARE_OPERATORS_FOR_FLAGS( MyFlags )
static_assert( !QTypeInfo<MyFlags>::isComplex );
static_assert( QTypeInfo<MyFlags>::isRelocatable );
-static_assert( !QTypeInfo<MyFlags>::isPointer );
+static_assert( !std::is_pointer_v<MyFlags> );
QTEST_MAIN(tst_QFlags)
#include "tst_qflags.moc"
diff --git a/tests/auto/corelib/global/qfloat16/CMakeLists.txt b/tests/auto/corelib/global/qfloat16/CMakeLists.txt
index 1dbc95ec95..f6ca52b0df 100644
--- a/tests/auto/corelib/global/qfloat16/CMakeLists.txt
+++ b/tests/auto/corelib/global/qfloat16/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qfloat16.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfloat16 Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfloat16 LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfloat16
SOURCES
tst_qfloat16.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::TestPrivate
)
diff --git a/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp b/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp
index 90e131a7ef..7acf8c2cf6 100644
--- a/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp
+++ b/tests/auto/corelib/global/qfloat16/tst_qfloat16.cpp
@@ -1,34 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2016 by Southwest Research Institute (R)
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2016 by Southwest Research Institute (R)
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QFloat16>
+#include <QMetaType>
+#include <QTextStream>
+
+#include <private/qcomparisontesthelper_p.h>
#include <math.h>
@@ -41,6 +20,10 @@ class tst_qfloat16: public QObject
Q_OBJECT
private slots:
+ void compareCompiles();
+ void relationalOperatorsAreConstexpr();
+ void ordering_data();
+ void ordering();
void fuzzyCompare_data();
void fuzzyCompare();
void fuzzyIsNull_data();
@@ -66,8 +49,180 @@ private slots:
void properties();
void limits();
void mantissaOverflow();
+ void dataStream();
+ void textStream();
};
+void tst_qfloat16::compareCompiles()
+{
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, float>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, double>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, long double>();
+#if QFLOAT16_IS_NATIVE
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, qfloat16::NativeType>();
+#endif
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, int>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, qint8>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, quint8>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, qint16>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, quint16>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, char16_t>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, long>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, unsigned long>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, wchar_t>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, qint32>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, quint32>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, qint64>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, quint64>();
+#ifdef QT_SUPPORTS_INT128
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, qint128>();
+ QTestPrivate::testAllComparisonOperatorsCompile<qfloat16, quint128>();
+#endif
+}
+
+void tst_qfloat16::relationalOperatorsAreConstexpr()
+{
+#if QFLOAT16_IS_NATIVE
+
+#define CHECK_CONSTEXPR(Type) \
+ do { \
+ constexpr qfloat16 lhs = qfloat16(0.0f); \
+ constexpr Type rhs = 1; \
+ static_assert(lhs < rhs); \
+ static_assert(rhs >= lhs); \
+ } while (false)
+
+ CHECK_CONSTEXPR(qfloat16);
+ CHECK_CONSTEXPR(float);
+ CHECK_CONSTEXPR(double);
+ CHECK_CONSTEXPR(long double);
+ CHECK_CONSTEXPR(qfloat16::NativeType);
+ CHECK_CONSTEXPR(qint8);
+ CHECK_CONSTEXPR(quint8);
+ CHECK_CONSTEXPR(qint16);
+ CHECK_CONSTEXPR(quint16);
+ CHECK_CONSTEXPR(qint32);
+ CHECK_CONSTEXPR(quint32);
+ CHECK_CONSTEXPR(long);
+ CHECK_CONSTEXPR(unsigned long);
+ CHECK_CONSTEXPR(qint64);
+ CHECK_CONSTEXPR(quint64);
+#ifdef QT_SUPPORTS_INT128
+ CHECK_CONSTEXPR(qint128);
+ CHECK_CONSTEXPR(quint128);
+#endif
+
+#undef CHECK_CONSTEXPR
+
+#else
+ QSKIP("This check is only relevant for native float16 types");
+#endif // QFLOAT16_IS_NATIVE
+}
+
+void tst_qfloat16::ordering_data()
+{
+ QTest::addColumn<float>("left");
+ QTest::addColumn<float>("right");
+
+ auto row = [](float left, float right) {
+ QTest::addRow("%f_vs_%f", left, right) << left << right;
+ };
+
+ row(0.0f, 0.0f);
+ row(0.000001f, 0.0f);
+ row(0.0f, 0.000001f);
+ row(-1.000001f, 1.000001f);
+ const float nan = std::numeric_limits<float>::quiet_NaN();
+ const float inf = std::numeric_limits<float>::infinity();
+ row(nan, nan);
+ row(nan, inf);
+ row(inf, nan);
+ row(-inf, nan);
+ row(nan, -inf);
+ row(-inf, inf);
+ row(inf, -inf);
+ row(-inf, 0.0f);
+ row(0.0f, inf);
+ row(0.0f, nan);
+ row(nan, 0.0f);
+ row(2.0f, 314.159f);
+ row(-314.159f, 2.0f);
+ row(-2.0f, 314.159f);
+ row(nan, 314.159f);
+ row(-314.159f, inf);
+ row(-inf, 314.159f);
+ row(2.0f, -inf);
+ row(-2.0f, nan);
+ row(-inf, -2.0f);
+ // testing with values outside qfloat16 range
+ row(0.0f, 13e5f);
+ // generateRow(inf, 13e5f); // fails qfloat16 vs qfloat16 and qfloat16 vs int (QTBUG-118193)
+ row(0.0f, -13e5f);
+ // generateRow(-inf, -13e5f); // fails qfloat16 vs qfloat16 and qfloat16 vs int (QTBUG-118193)
+}
+
+void tst_qfloat16::ordering()
+{
+ QFETCH(float, left);
+ QFETCH(float, right);
+
+ const auto expectedOrder = Qt::compareThreeWay(left, right);
+ const auto lhs = qfloat16(left);
+
+#define POSTCHECK(msg) \
+ if (QTest::currentTestFailed()) { qDebug(msg); return; }
+
+#define CHECK_FP(RHS) \
+ do { \
+ QTestPrivate::testAllComparisonOperators(lhs, static_cast<RHS>(right), expectedOrder); \
+ POSTCHECK("qfloat16 vs " #RHS " comparison failed") \
+ } while (false) \
+ /* END */
+
+ CHECK_FP(qfloat16);
+ CHECK_FP(float);
+ CHECK_FP(double);
+ CHECK_FP(long double);
+
+#undef CHECK_FP
+
+#define CHECK_INT(RHS) \
+ do { \
+ const auto rhs = static_cast<RHS>(right); \
+ const auto expectedRes = Qt::compareThreeWay(left, rhs); \
+ QTestPrivate::testAllComparisonOperators(lhs, rhs, expectedRes); \
+ POSTCHECK("qfloat16 vs " #RHS " comparison failed") \
+ } while (false) \
+ /* END */
+
+ if (qIsFinite(right)) {
+ CHECK_INT(int);
+ CHECK_INT(qint8);
+ CHECK_INT(signed char);
+ CHECK_INT(qint16);
+ CHECK_INT(qint32);
+ CHECK_INT(qint64);
+#if QT_SUPPORTS_INT128
+ CHECK_INT(qint128);
+#endif
+ if (right >= 0) {
+ CHECK_INT(unsigned int);
+ CHECK_INT(quint8);
+ CHECK_INT(unsigned char);
+ CHECK_INT(quint16);
+ CHECK_INT(quint32);
+ CHECK_INT(quint64);
+ #if QT_SUPPORTS_INT128
+ CHECK_INT(quint128);
+ #endif
+ }
+ }
+
+#undef CHECK_INT
+#undef POSTCHECK
+}
+
void tst_qfloat16::fuzzyCompare_data()
{
QTest::addColumn<qfloat16>("val1");
@@ -213,13 +368,7 @@ void tst_qfloat16::qNaN()
QVERIFY(qIsNaN(nan));
QVERIFY(qIsNaN(nan + one));
QVERIFY(qIsNaN(-nan));
-#ifdef Q_CC_INTEL
- QEXPECT_FAIL("", "ICC optimizes zero * anything to zero", Continue);
-#endif
QVERIFY(qIsNaN(nan * zero));
-#ifdef Q_CC_INTEL
- QEXPECT_FAIL("", "ICC optimizes zero * anything to zero", Continue);
-#endif
QVERIFY(qIsNaN(Bounds::infinity() * zero));
QVERIFY(!nan.isNormal());
@@ -332,7 +481,7 @@ void tst_qfloat16::promotionTests()
QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)*1));
QCOMPARE(sizeof(double),sizeof(qfloat16(1.f)/1));
- QCOMPARE(QString::number(1.f),QString::number(qfloat16(1.f)));
+ QCOMPARE(QString::number(1.f),QString::number(double(qfloat16(1.f))));
}
void tst_qfloat16::arithOps_data()
@@ -550,17 +699,25 @@ void tst_qfloat16::properties()
// and the same supposed to be for qfloat16.
#if !defined(Q_CC_GHS)
QVERIFY(Bounds::is_iec559);
-#else
+#endif //Q_CC_GHS
+#if QT_CONFIG(signaling_nan)
// Technically, presence of NaN and infinities are implied from the above check, but that checkings GHS compiler complies.
QVERIFY(Bounds::has_infinity && Bounds::has_quiet_NaN && Bounds::has_signaling_NaN);
-#endif // Q_CC_GHS
+#endif
QVERIFY(Bounds::is_bounded);
QVERIFY(!Bounds::is_modulo);
QVERIFY(!Bounds::traps);
QVERIFY(Bounds::has_infinity);
QVERIFY(Bounds::has_quiet_NaN);
+#if QT_CONFIG(signaling_nan)
QVERIFY(Bounds::has_signaling_NaN);
+#endif
+#if !defined(Q_CC_GHS)
QCOMPARE(Bounds::has_denorm, std::denorm_present);
+#else
+ // For GHS compiler the "denorm_indeterminite" is the expected return value.
+ QCOMPARE(Bounds::has_denorm, std::denorm_indeterminate);
+#endif // Q_CC_GHS
QCOMPARE(Bounds::round_style, std::round_to_nearest);
QCOMPARE(Bounds::radix, 2);
// Untested: has_denorm_loss
@@ -647,12 +804,67 @@ void tst_qfloat16::mantissaOverflow()
float f;
memcpy(&f, &in, 4);
- qfloat16 f16 = f;
+ qfloat16 f16 = qfloat16(f);
qfloat16 f16s[1];
qFloatToFloat16(f16s, &f, 1);
QCOMPARE(f16, f16s[0]);
QVERIFY(qIsNaN(f16));
}
+void tst_qfloat16::dataStream()
+{
+ QByteArray ba;
+ QDataStream ds(&ba, QIODevice::ReadWrite);
+ ds << qfloat16(1.5) << qfloat16(-1);
+ QCOMPARE(ba.size(), 4);
+ QCOMPARE(ds.status(), QDataStream::Ok);
+ QCOMPARE(ba, QByteArray("\x3e\0\xbc\0", 4));
+
+ ds.device()->seek(0);
+ ds.resetStatus();
+ ds.setByteOrder(QDataStream::LittleEndian);
+ ds << qfloat16(0) << qfloat16(-1);
+ QCOMPARE(ds.status(), QDataStream::Ok);
+ QCOMPARE(ba, QByteArray("\0\0\0\xbc", 4));
+
+ ds.device()->seek(0);
+ ds.resetStatus();
+ qfloat16 zero = 1;
+ ds >> zero;
+ QCOMPARE(ds.status(), QDataStream::Ok);
+ QCOMPARE(zero, qfloat16(0));
+
+ ds.device()->seek(0);
+ ds.resetStatus();
+ QMetaType mt = QMetaType(QMetaType::Float16);
+ QVERIFY(mt.save(ds, &zero));
+
+ ds.device()->seek(0);
+ ds.resetStatus();
+ zero = -1;
+ QVERIFY(mt.load(ds, &zero));
+ QCOMPARE(zero, qfloat16(0));
+}
+
+void tst_qfloat16::textStream()
+{
+ QString buffer;
+ {
+ QTextStream ts(&buffer);
+ ts << qfloat16(0) << Qt::endl << qfloat16(1.5);
+ QCOMPARE(ts.status(), QTextStream::Ok);
+ }
+ QCOMPARE(buffer, "0\n1.5");
+
+ {
+ QTextStream ts(&buffer);
+ qfloat16 zero = qfloat16(-2.5), threehalves = 1234;
+ ts >> zero >> threehalves;
+ QCOMPARE(ts.status(), QTextStream::Ok);
+ QCOMPARE(zero, qfloat16(0));
+ QCOMPARE(threehalves, 1.5);
+ }
+}
+
QTEST_APPLESS_MAIN(tst_qfloat16)
#include "tst_qfloat16.moc"
diff --git a/tests/auto/corelib/global/qgetputenv/CMakeLists.txt b/tests/auto/corelib/global/qgetputenv/CMakeLists.txt
index 79d45c58b0..f1a5cbeef3 100644
--- a/tests/auto/corelib/global/qgetputenv/CMakeLists.txt
+++ b/tests/auto/corelib/global/qgetputenv/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qgetputenv.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgetputenv Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgetputenv LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgetputenv
SOURCES
tst_qgetputenv.cpp
diff --git a/tests/auto/corelib/global/qgetputenv/tst_qgetputenv.cpp b/tests/auto/corelib/global/qgetputenv/tst_qgetputenv.cpp
index 519c5fa88d..96f2ce853c 100644
--- a/tests/auto/corelib/global/qgetputenv/tst_qgetputenv.cpp
+++ b/tests/auto/corelib/global/qgetputenv/tst_qgetputenv.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qdebug.h>
#include <QTest>
@@ -85,7 +60,11 @@ void tst_QGetPutEnv::getSetCheck()
QCOMPARE(sresult, QString());
#endif
- QVERIFY(qputenv(varName, QByteArray("supervalue")));
+ constexpr char varValueFullString[] = "supervalue123";
+ const auto varValueQBA = QByteArray::fromRawData(varValueFullString, sizeof varValueFullString - 4);
+ QCOMPARE_EQ(varValueQBA, "supervalue");
+
+ QVERIFY(qputenv(varName, varValueQBA));
QVERIFY(qEnvironmentVariableIsSet(varName));
QVERIFY(!qEnvironmentVariableIsEmpty(varName));
@@ -212,7 +191,7 @@ void tst_QGetPutEnv::intValue()
bool actualOk = !ok;
// Self-test: confirm that it was like the docs said it should be
- if (value.length() < maxlen) {
+ if (value.size() < maxlen) {
QCOMPARE(value.toInt(&actualOk, 0), expected);
QCOMPARE(actualOk, ok);
}
diff --git a/tests/auto/corelib/global/qglobal/CMakeLists.txt b/tests/auto/corelib/global/qglobal/CMakeLists.txt
index de9a94629a..5a0877663b 100644
--- a/tests/auto/corelib/global/qglobal/CMakeLists.txt
+++ b/tests/auto/corelib/global/qglobal/CMakeLists.txt
@@ -1,13 +1,22 @@
-# Generated from qglobal.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qglobal Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qglobal LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qglobal
SOURCES
qglobal.c
tst_qglobal.cpp
+ NO_PCH_SOURCES
+ tst_qglobal.cpp # undef QT_NO_FOREACH
)
## Scopes:
diff --git a/tests/auto/corelib/global/qglobal/qglobal.c b/tests/auto/corelib/global/qglobal/qglobal.c
index b577a6f71f..2cfbd5e3be 100644
--- a/tests/auto/corelib/global/qglobal/qglobal.c
+++ b/tests/auto/corelib/global/qglobal/qglobal.c
@@ -1,41 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/qglobal.h>
-
-#if __has_include(<stdbool.h>) || __STDC_VERSION__ >= 199901L
-# include <stdbool.h>
-#else
-# undef true
-# define true 1
-# undef false
-# define false 0
-#endif
+#include <QtCore/qtversion.h>
+#include <QtCore/qyieldcpu.h>
+#include <QtCore/qtypes.h>
#ifdef Q_COMPILER_THREAD_LOCAL
# include <threads.h>
@@ -46,6 +15,11 @@
* everything works.
*/
+#if defined(Q_OS_VXWORKS) && !defined(thread_local)
+// threads.h forgot to define this (should be fixed for version 23.11)
+# define thread_local _Thread_local
+#endif
+
/* Types and Q_UNUSED */
void tst_GlobalTypes()
{
@@ -77,15 +51,28 @@ void tst_GlobalTypes()
qintptr qip;
quintptr qup;
Q_UNUSED(qs); Q_UNUSED(qp); Q_UNUSED(qip); Q_UNUSED(qup);
+
+#ifdef QT_SUPPORTS_INT128
+ qint128 s128;
+ quint128 u128;
+ Q_UNUSED(s128); Q_UNUSED(u128);
+#endif /* QT_SUPPORTS_INT128 */
}
+#if QT_SUPPORTS_INT128
+qint128 tst_qint128_min() { return Q_INT128_MIN + 0; }
+qint128 tst_qint128_max() { return 0 + Q_INT128_MAX; }
+quint128 tst_quint128_max() { return Q_UINT128_MAX - 1 + 1; }
+#endif
+
/* Qt version */
int tst_QtVersion()
{
return QT_VERSION;
}
-const char *tst_qVersion() Q_DECL_NOEXCEPT
+const char *tst_qVersion() Q_DECL_NOEXCEPT;
+const char *tst_qVersion()
{
#if !defined(QT_NAMESPACE)
return qVersion();
@@ -94,6 +81,12 @@ const char *tst_qVersion() Q_DECL_NOEXCEPT
#endif
}
+void tst_qYieldCpu(void) Q_DECL_NOEXCEPT;
+void tst_qYieldCpu(void)
+{
+ qYieldCpu();
+}
+
/* Static assertion */
Q_STATIC_ASSERT(true);
Q_STATIC_ASSERT(1);
diff --git a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
index 7323cfe545..1a19048bbe 100644
--- a/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
+++ b/tests/auto/corelib/global/qglobal/tst_qglobal.cpp
@@ -1,40 +1,20 @@
-/****************************************************************************
-**
-** 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
+#undef QT_NO_FOREACH // this file tests Q_FOREACH!
+
#include <QTest>
#include <QPair>
#include <QSysInfo>
#include <QLatin1String>
#include <QString>
+#include <QtVersion>
#include <cmath>
+#include <limits>
+#include <type_traits>
class tst_QGlobal: public QObject
{
@@ -52,6 +32,7 @@ private slots:
void qCoreAppStartupFunction();
void qCoreAppStartupFunctionRestart();
void integerForSize();
+ void int128Literals();
void buildAbiEndianness();
void testqOverload();
void testqMinMax();
@@ -61,12 +42,19 @@ private slots:
void qRoundDoubles();
void PRImacros();
void testqToUnderlying();
+ void nodiscard();
};
extern "C" { // functions in qglobal.c
void tst_GlobalTypes();
int tst_QtVersion();
const char *tst_qVersion();
+#if QT_SUPPORTS_INT128
+qint128 tst_qint128_min();
+qint128 tst_qint128_max();
+quint128 tst_quint128_max();
+#endif
+
}
void tst_QGlobal::cMode()
@@ -109,7 +97,7 @@ void tst_QGlobal::for_each()
foreach(int i, list) {
QCOMPARE(i, counter++);
}
- QCOMPARE(counter, list.count());
+ QCOMPARE(counter, list.size());
// do it again, to make sure we don't have any for-scoping
// problems with older compilers
@@ -117,21 +105,21 @@ void tst_QGlobal::for_each()
foreach(int i, list) {
QCOMPARE(i, counter++);
}
- QCOMPARE(counter, list.count());
+ QCOMPARE(counter, list.size());
// check whether we can pass a constructor as container argument
counter = 0;
foreach (int i, QList<int>(list)) {
QCOMPARE(i, counter++);
}
- QCOMPARE(counter, list.count());
+ QCOMPARE(counter, list.size());
// check whether we can use a lambda
counter = 0;
foreach (int i, [&](){ return list; }()) {
QCOMPARE(i, counter++);
}
- QCOMPARE(counter, list.count());
+ QCOMPARE(counter, list.size());
// Should also work with an existing variable
int local = 0;
@@ -139,7 +127,7 @@ void tst_QGlobal::for_each()
foreach (local, list) {
QCOMPARE(local, counter++);
}
- QCOMPARE(counter, list.count());
+ QCOMPARE(counter, list.size());
QCOMPARE(local, counter - 1);
// Test the macro does not mess if/else conditions
@@ -149,7 +137,7 @@ void tst_QGlobal::for_each()
QCOMPARE(i, counter++);
else
QFAIL("If/Else mismatch");
- QCOMPARE(counter, list.count());
+ QCOMPARE(counter, list.size());
counter = 0;
if (false)
@@ -160,7 +148,7 @@ void tst_QGlobal::for_each()
foreach (int i, list)
if (false) { }
else QCOMPARE(i, counter++);
- QCOMPARE(counter, list.count());
+ QCOMPARE(counter, list.size());
// break and continue
counter = 0;
@@ -445,11 +433,166 @@ void tst_QGlobal::integerForSize()
static_assert(sizeof(QIntegerForSize<2>::Signed) == 2);
static_assert(sizeof(QIntegerForSize<4>::Signed) == 4);
static_assert(sizeof(QIntegerForSize<8>::Signed) == 8);
+#ifdef QT_SUPPORTS_INT128
+ static_assert(sizeof(QIntegerForSize<16>::Signed) == 16);
+#endif
static_assert(sizeof(QIntegerForSize<1>::Unsigned) == 1);
static_assert(sizeof(QIntegerForSize<2>::Unsigned) == 2);
static_assert(sizeof(QIntegerForSize<4>::Unsigned) == 4);
static_assert(sizeof(QIntegerForSize<8>::Unsigned) == 8);
+#ifdef QT_SUPPORTS_INT128
+ static_assert(sizeof(QIntegerForSize<16>::Unsigned) == 16);
+#endif
+}
+
+void tst_QGlobal::int128Literals()
+{
+#ifdef QT_SUPPORTS_INT128
+#define COMPARE_EQ(lhs, rhs, Expected128) do { \
+ constexpr auto lhs_ = lhs; \
+ static_assert(std::is_same_v<std::remove_cv_t<decltype(lhs_)>, Expected128>); \
+ QCOMPARE_EQ(lhs_, rhs); \
+ } while (0)
+ COMPARE_EQ(Q_INT128_MIN, std::numeric_limits<qint128>::min(), qint128);
+ COMPARE_EQ(Q_INT128_MAX, std::numeric_limits<qint128>::max(), qint128);
+ COMPARE_EQ(Q_UINT128_MAX, std::numeric_limits<quint128>::max(), quint128);
+ QCOMPARE_EQ(tst_qint128_min(), Q_INT128_MIN);
+ QCOMPARE_EQ(tst_qint128_max(), Q_INT128_MAX);
+ QCOMPARE_EQ(tst_quint128_max(), Q_UINT128_MAX);
+ {
+ #define CHECK_S(x) COMPARE_EQ(Q_INT128_C(x), Q_INT64_C(x), qint128)
+ #define CHECK_U(x) COMPARE_EQ(Q_UINT128_C(x), Q_UINT64_C(x), quint128);
+ #define CHECK(x) do { CHECK_S(x); CHECK_U(x); } while (0)
+ // basics:
+ CHECK(0);
+ CHECK(1);
+ CHECK_S(-1);
+ QCOMPARE_EQ(Q_INT64_C(9223372036854775807), std::numeric_limits<qint64>::max());
+ CHECK(9223372036854775807); // LLONG_MAX
+ // Q_INT64_C(-9223372036854775808) gives -Wimplicitly-unsigned-literal on GCC, so use numeric_limits:
+ {
+ constexpr auto i = Q_INT128_C(-9223372036854775808); // LLONG_MIN
+ static_assert(std::is_same_v<decltype(i), const qint128>);
+ QCOMPARE_EQ(i, std::numeric_limits<qint64>::min());
+ }
+ // actual 128-bit numbers
+ {
+ constexpr auto i = Q_INT128_C( 9223372036854775808); // LLONG_MAX + 1
+ constexpr auto u = Q_UINT128_C(9223372036854775808); // LLONG_MAX + 1
+ static_assert(std::is_same_v<decltype(i), const qint128>);
+ static_assert(std::is_same_v<decltype(u), const quint128>);
+ QCOMPARE_EQ(i, qint128{ std::numeric_limits<qint64>::max()} + 1);
+ QCOMPARE_EQ(u, quint128{std::numeric_limits<qint64>::max()} + 1);
+ }
+ {
+ constexpr auto i = Q_INT128_C(-9223372036854775809); // LLONG_MIN - 1
+ static_assert(std::is_same_v<decltype(i), const qint128>);
+ QCOMPARE_EQ(i, qint128{std::numeric_limits<qint64>::min()} - 1);
+ }
+ {
+ constexpr auto i = Q_INT128_C( 18446744073709551616); // ULLONG_MAX + 1
+ constexpr auto u = Q_UINT128_C(18446744073709551616);
+ constexpr auto expected = qint128{1} << 64;
+ static_assert(std::is_same_v<decltype(i), const qint128>);
+ static_assert(std::is_same_v<decltype(expected), const qint128>);
+ static_assert(std::is_same_v<decltype(u), const quint128>);
+ QCOMPARE_EQ(i, expected);
+ QCOMPARE_EQ(u, quint128{expected});
+ }
+ {
+ // compilers don't let one write signed _MIN literals, so use MIN + 1:
+ // Q_INT128_C(-170141183460469231731687303715884105728) gives
+ // ERROR: ~~~ outside range of representable values of type qint128
+ // This is because the unary minus is technically speaking not part of
+ // the literal, but called on the result of the literal.
+ constexpr auto i = Q_INT128_C(-170141183460469231731687303715884105727); // 128-bit MIN + 1
+ static_assert(std::is_same_v<decltype(i), const qint128>);
+ QCOMPARE_EQ(i, std::numeric_limits<qint128>::min() + 1);
+ }
+ {
+ constexpr auto i = Q_INT128_C( 170141183460469231731687303715884105727); // MAX
+ constexpr auto u = Q_UINT128_C(340282366920938463463374607431768211455); // UMAX
+ static_assert(std::is_same_v<decltype(i), const qint128>);
+ static_assert(std::is_same_v<decltype(u), const quint128>);
+ QCOMPARE_EQ(i, std::numeric_limits<qint128>::max());
+ QCOMPARE_EQ(u, std::numeric_limits<quint128>::max());
+ QCOMPARE_EQ(u, Q_UINT128_C(-1));
+ }
+
+ // binary literals:
+ CHECK(0b0);
+ CHECK(0b1);
+ CHECK_S(-0b1);
+ CHECK(0b01);
+ CHECK(0b10);
+ CHECK(0b1'1); // with digit separator
+ CHECK(0b0111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111);
+ //bytes |---1---| |---2---| |---3---| |---4---| |---5---| |---6---| |---7---| |---8---|
+ {
+ // bytes: |---1---| |---2---| |---3---| |---4---| |---5---| |---6---| |---7---| |---8---| |---9---| |--10---| |--11---| |--12---| |--13---| |--14---| |--15---| |--16---|
+ constexpr auto i = Q_INT128_C( 0b0111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111);
+ constexpr auto u = Q_UINT128_C(0b1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111'1111);
+ static_assert(std::is_same_v<decltype(i), const qint128>);
+ static_assert(std::is_same_v<decltype(u), const quint128>);
+ QCOMPARE_EQ(i, std::numeric_limits<qint128>::max());
+ QCOMPARE_EQ(u, std::numeric_limits<quint128>::max());
+ QCOMPARE_EQ(u, Q_UINT128_C(-0b1));
+ }
+
+ // octal literals:
+ CHECK(00);
+ CHECK(01);
+ CHECK(02);
+ CHECK(03);
+ CHECK(04);
+ CHECK(05);
+ CHECK(06);
+ CHECK(07);
+ CHECK_S(-01);
+ CHECK(010);
+ CHECK_S(-01'0); // with digit separator
+ CHECK(07'7777'7777'7777'7777'7777); // LLONG_MAX
+ {
+ // bits: 120| 108| 96| 84| 72| 60| 48| 36| 24| 12| 0|
+ constexpr auto i = Q_INT128_C( 0177'7777'7777'7777'7777'7777'7777'7777'7777'7777'7777);
+ constexpr auto u = Q_UINT128_C(0377'7777'7777'7777'7777'7777'7777'7777'7777'7777'7777);
+ static_assert(std::is_same_v<decltype(i), const qint128>);
+ static_assert(std::is_same_v<decltype(u), const quint128>);
+ QCOMPARE_EQ(i, std::numeric_limits<qint128>::max());
+ QCOMPARE_EQ(u, std::numeric_limits<quint128>::max());
+ QCOMPARE_EQ(u, Q_UINT128_C(-01));
+ }
+
+ // hex literals:
+ CHECK(0x0);
+ CHECK(0x1);
+ CHECK(0x9);
+ CHECK(0xA);
+ CHECK(0xB);
+ CHECK(0xC);
+ CHECK(0xD);
+ CHECK(0xE);
+ CHECK(0x0F);
+ CHECK(0x10);
+ CHECK_S(-0x1);
+ CHECK_S(-0x1'0); // with digit separator
+ CHECK(0x7FFF'FFFF'FFFF'FFFF);
+ {
+ constexpr auto i = Q_INT128_C( 0x7FFF'FFFF'FFFF'FFFF'FFFF'FFFF'FFFF'FFFF);
+ constexpr auto u = Q_UINT128_C(0xFFFF'FFFF'FFFF'FFFF'FFFF'FFFF'FFFF'FFFF);
+ static_assert(std::is_same_v<decltype(i), const qint128>);
+ static_assert(std::is_same_v<decltype(u), const quint128>);
+ QCOMPARE_EQ(i, std::numeric_limits<qint128>::max());
+ QCOMPARE_EQ(u, std::numeric_limits<quint128>::max());
+ QCOMPARE_EQ(Q_UINT128_C(-1), u);
+ }
+ #undef CHECK
+ }
+#undef COMPARE_EQ
+#else
+ QSKIP("This test requires 128-bit integer support enabled in the compiler.");
+#endif
}
typedef QPair<const char *, const char *> stringpair;
@@ -715,5 +858,79 @@ void tst_QGlobal::testqToUnderlying()
QCOMPARE(qToUnderlying(EE2), 456UL);
}
+void tst_QGlobal::nodiscard()
+{
+ // Syntax-only test, just to make sure that the Q_NODISCARD_* compile
+ // on all platforms.
+ // Other code is just to silence all various compiler warnings about
+ // unused private members or methods.
+ class Test {
+ public:
+ Q_NODISCARD_CTOR_X("Why construct a Test instead of just passing the int through?")
+ explicit Test(int val) : m_val(val) {}
+ Q_NODISCARD_CTOR explicit Test(float val) : m_val(int(val)) {}
+
+ Q_NODISCARD_X("Why call get() if you don't use the returned value, hu?") // NOT idiomatic use!
+ int get() const { return m_val; }
+
+ private:
+ int m_val;
+ };
+
+ Test t{42};
+ QCOMPARE(t.get(), 42);
+ Test t2{42.0f};
+ QCOMPARE(t2.get(), 42);
+}
+
+QT_BEGIN_NAMESPACE
+
+// Compile-time typeinfo tests
+struct Complex1
+{
+ ~Complex1();
+};
+static_assert(QTypeInfo<Complex1>::isComplex);
+static_assert(!QTypeInfo<Complex1>::isRelocatable);
+
+struct Complex2
+{
+ Complex2(Complex2 &&);
+};
+static_assert(QTypeInfo<Complex2>::isComplex);
+static_assert(!QTypeInfo<Complex2>::isRelocatable);
+
+struct Complex3
+{
+ Complex3(int);
+};
+static_assert(QTypeInfo<Complex3>::isComplex);
+static_assert(QTypeInfo<Complex3>::isRelocatable);
+
+struct Relocatable1
+{
+ ~Relocatable1();
+};
+Q_DECLARE_TYPEINFO(Relocatable1, Q_RELOCATABLE_TYPE);
+static_assert(QTypeInfo<Relocatable1>::isComplex);
+static_assert(QTypeInfo<Relocatable1>::isRelocatable);
+
+struct Relocatable2
+{
+ Relocatable2(int);
+};
+Q_DECLARE_TYPEINFO(Relocatable2, Q_RELOCATABLE_TYPE);
+static_assert(QTypeInfo<Relocatable2>::isComplex);
+static_assert(QTypeInfo<Relocatable2>::isRelocatable);
+
+struct Trivial1
+{
+ int x[42];
+};
+static_assert(!QTypeInfo<Trivial1>::isComplex);
+static_assert(QTypeInfo<Trivial1>::isRelocatable);
+
+QT_END_NAMESPACE
+
QTEST_APPLESS_MAIN(tst_QGlobal)
#include "tst_qglobal.moc"
diff --git a/tests/auto/corelib/global/qglobalstatic/CMakeLists.txt b/tests/auto/corelib/global/qglobalstatic/CMakeLists.txt
index ea978bdadb..6707e46dff 100644
--- a/tests/auto/corelib/global/qglobalstatic/CMakeLists.txt
+++ b/tests/auto/corelib/global/qglobalstatic/CMakeLists.txt
@@ -1,14 +1,21 @@
-# Generated from qglobalstatic.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qglobalstatic Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qglobalstatic LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qglobalstatic
EXCEPTIONS
SOURCES
tst_qglobalstatic.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::TestPrivate
)
diff --git a/tests/auto/corelib/global/qglobalstatic/tst_qglobalstatic.cpp b/tests/auto/corelib/global/qglobalstatic/tst_qglobalstatic.cpp
index ee85a3b77f..b8836668f5 100644
--- a/tests/auto/corelib/global/qglobalstatic/tst_qglobalstatic.cpp
+++ b/tests/auto/corelib/global/qglobalstatic/tst_qglobalstatic.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Thiago Macieira <thiago@kde.org>
-** Copyright (C) 2016 Intel Corporation.
-** 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 Thiago Macieira <thiago@kde.org>
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QThread>
#include <QTest>
diff --git a/tests/auto/corelib/global/qhooks/CMakeLists.txt b/tests/auto/corelib/global/qhooks/CMakeLists.txt
index c8d6f1a769..2d2051015f 100644
--- a/tests/auto/corelib/global/qhooks/CMakeLists.txt
+++ b/tests/auto/corelib/global/qhooks/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qhooks.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qhooks Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhooks LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qhooks
SOURCES
tst_qhooks.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/global/qhooks/tst_qhooks.cpp b/tests/auto/corelib/global/qhooks/tst_qhooks.cpp
index 5a24275177..efdd9d7da1 100644
--- a/tests/auto/corelib/global/qhooks/tst_qhooks.cpp
+++ b/tests/auto/corelib/global/qhooks/tst_qhooks.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Volker Krause <volker.krause@kdab.com>
-** 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) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Volker Krause <volker.krause@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/corelib/global/qkeycombination/CMakeLists.txt b/tests/auto/corelib/global/qkeycombination/CMakeLists.txt
index 9553a35dea..911eef7289 100644
--- a/tests/auto/corelib/global/qkeycombination/CMakeLists.txt
+++ b/tests/auto/corelib/global/qkeycombination/CMakeLists.txt
@@ -1,10 +1,19 @@
-# Generated from qkeycombination.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qkeycombination Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qkeycombination LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qkeycombination
SOURCES
tst_qkeycombination.cpp
+ LIBRARIES
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/global/qkeycombination/tst_qkeycombination.cpp b/tests/auto/corelib/global/qkeycombination/tst_qkeycombination.cpp
index 7e70cdb70f..9941f8e154 100644
--- a/tests/auto/corelib/global/qkeycombination/tst_qkeycombination.cpp
+++ b/tests/auto/corelib/global/qkeycombination/tst_qkeycombination.cpp
@@ -1,38 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@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) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QObject>
#include <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
class tst_QKeyCombination : public QObject
{
Q_OBJECT
private slots:
+ void compareCompiles();
void construction();
void operator_eq();
void operator_or();
@@ -49,6 +26,11 @@ constexpr auto bitwiseOr(T ... args)
return (... | ((int)args));
}
+void tst_QKeyCombination::compareCompiles()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QKeyCombination>();
+}
+
void tst_QKeyCombination::construction()
{
{
@@ -156,145 +138,125 @@ void tst_QKeyCombination::operator_eq()
// default
{
QKeyCombination a, b;
- QVERIFY(a == b);
- QVERIFY(!(a != b));
+ QT_TEST_EQUALITY_OPS(a, b, true);
}
// key only
{
QKeyCombination a;
QKeyCombination b(Qt::Key_X);
- QVERIFY(a != b);
- QVERIFY(!(a == b));
+ QT_TEST_EQUALITY_OPS(a, b, false);
}
{
QKeyCombination a(Qt::Key_Y);
QKeyCombination b;
- QVERIFY(a != b);
- QVERIFY(!(a == b));
+ QT_TEST_EQUALITY_OPS(a, b, false);
}
{
QKeyCombination a(Qt::Key_Y);
QKeyCombination b(Qt::Key_X);
- QVERIFY(a != b);
- QVERIFY(!(a == b));
+ QT_TEST_EQUALITY_OPS(a, b, false);
}
{
QKeyCombination a(Qt::Key_F1);
QKeyCombination b(Qt::Key_F1);
- QVERIFY(a == b);
- QVERIFY(!(a != b));
+ QT_TEST_EQUALITY_OPS(a, b, true);
}
// modifier only
{
QKeyCombination a;
QKeyCombination b(Qt::CTRL);
- QVERIFY(a != b);
- QVERIFY(!(a == b));
+ QT_TEST_EQUALITY_OPS(a, b, false);
}
{
QKeyCombination a(Qt::CTRL);
QKeyCombination b;
- QVERIFY(a != b);
- QVERIFY(!(a == b));
+ QT_TEST_EQUALITY_OPS(a, b, false);
}
{
QKeyCombination a(Qt::CTRL);
QKeyCombination b(Qt::SHIFT);
- QVERIFY(a != b);
- QVERIFY(!(a == b));
+ QT_TEST_EQUALITY_OPS(a, b, false);
}
{
QKeyCombination a(Qt::CTRL);
QKeyCombination b(Qt::CTRL);
- QVERIFY(a == b);
- QVERIFY(!(a != b));
+ QT_TEST_EQUALITY_OPS(a, b, true);
}
{
QKeyCombination a(Qt::CTRL);
QKeyCombination b(Qt::ControlModifier);
- QVERIFY(a == b);
- QVERIFY(!(a != b));
+ QT_TEST_EQUALITY_OPS(a, b, true);
}
{
QKeyCombination a(Qt::ControlModifier);
QKeyCombination b(Qt::CTRL);
- QVERIFY(a == b);
- QVERIFY(!(a != b));
+ QT_TEST_EQUALITY_OPS(a, b, true);
}
{
QKeyCombination a(Qt::ControlModifier);
QKeyCombination b(Qt::ControlModifier);
- QVERIFY(a == b);
- QVERIFY(!(a != b));
+ QT_TEST_EQUALITY_OPS(a, b, true);
}
// key and modifier
{
QKeyCombination a(Qt::Key_A);
QKeyCombination b(Qt::SHIFT, Qt::Key_A);
- QVERIFY(a != b);
- QVERIFY(!(a == b));
+ QT_TEST_EQUALITY_OPS(a, b, false);
}
{
QKeyCombination a(Qt::CTRL, Qt::Key_A);
QKeyCombination b(Qt::SHIFT, Qt::Key_A);
- QVERIFY(a != b);
- QVERIFY(!(a == b));
+ QT_TEST_EQUALITY_OPS(a, b, false);
}
{
QKeyCombination a(Qt::SHIFT, Qt::Key_A);
QKeyCombination b(Qt::SHIFT, Qt::Key_A);
- QVERIFY(a == b);
- QVERIFY(!(a != b));
+ QT_TEST_EQUALITY_OPS(a, b, true);
}
{
QKeyCombination a(Qt::SHIFT, Qt::Key_A);
QKeyCombination b(Qt::SHIFT, Qt::Key_Escape);
- QVERIFY(a != b);
- QVERIFY(!(a == b));
+ QT_TEST_EQUALITY_OPS(a, b, false);
}
{
QKeyCombination a(Qt::SHIFT, Qt::Key_A);
QKeyCombination b(Qt::ShiftModifier, Qt::Key_A);
- QVERIFY(a == b);
- QVERIFY(!(a != b));
+ QT_TEST_EQUALITY_OPS(a, b, true);
}
{
QKeyCombination a(Qt::SHIFT | Qt::CTRL, Qt::Key_A);
QKeyCombination b(Qt::ControlModifier | Qt::ShiftModifier, Qt::Key_A);
- QVERIFY(a == b);
- QVERIFY(!(a != b));
+ QT_TEST_EQUALITY_OPS(a, b, true);
}
// corner cases
{
QKeyCombination a(Qt::CTRL);
QKeyCombination b(Qt::Key_Control);
- QVERIFY(a != b);
- QVERIFY(!(a == b));
+ QT_TEST_EQUALITY_OPS(a, b, false);
}
{
QKeyCombination a(Qt::ALT);
QKeyCombination b(Qt::Key_Alt);
- QVERIFY(a != b);
- QVERIFY(!(a == b));
+ QT_TEST_EQUALITY_OPS(a, b, false);
}
}
diff --git a/tests/auto/corelib/global/qlogging/BLACKLIST b/tests/auto/corelib/global/qlogging/BLACKLIST
index e2d930e37b..6cd7fc045d 100644
--- a/tests/auto/corelib/global/qlogging/BLACKLIST
+++ b/tests/auto/corelib/global/qlogging/BLACKLIST
@@ -1,9 +1,7 @@
[qMessagePattern:backtrace]
-# QTBUG-63915
-b2qt 64bit
+# QTBUG-121389
+b2qt 32bit
[qMessagePattern:backtrace depth,separator]
-# QTBUG-63915
-b2qt 64bit
-# QTBUG-85364
-b2qt cmake
+# QTBUG-121389
+b2qt 32bit
diff --git a/tests/auto/corelib/global/qlogging/CMakeLists.txt b/tests/auto/corelib/global/qlogging/CMakeLists.txt
index a9950d3414..b3c66aeb2e 100644
--- a/tests/auto/corelib/global/qlogging/CMakeLists.txt
+++ b/tests/auto/corelib/global/qlogging/CMakeLists.txt
@@ -1,6 +1,11 @@
-# Generated from qlogging.pro.
-# This file is almost completely custom written
-# special case skip regeneration
+# 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_qlogging LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
qt_internal_add_executable(qlogging_helper
NO_INSTALL
@@ -18,12 +23,12 @@ set_target_properties(qlogging_helper PROPERTIES CXX_VISIBILITY_PRESET default)
qt_internal_add_test(tst_qlogging SOURCES tst_qlogging.cpp
DEFINES
QT_MESSAGELOGCONTEXT
- QT_DISABLE_DEPRECATED_BEFORE=0
HELPER_BINARY="${CMAKE_CURRENT_BINARY_DIR}/qlogging_helper"
)
+add_dependencies(tst_qlogging qlogging_helper)
+
qt_internal_add_test(tst_qmessagelogger SOURCES tst_qmessagelogger.cpp
DEFINES
QT_MESSAGELOGCONTEXT
- QT_DISABLE_DEPRECATED_BEFORE=0
)
diff --git a/tests/auto/corelib/global/qlogging/app/main.cpp b/tests/auto/corelib/global/qlogging/app/main.cpp
index 4c26bb85e3..e5b669e14f 100644
--- a/tests/auto/corelib/global/qlogging/app/main.cpp
+++ b/tests/auto/corelib/global/qlogging/app/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 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 <QCoreApplication>
#include <QLoggingCategory>
diff --git a/tests/auto/corelib/global/qlogging/tst_qlogging.cpp b/tests/auto/corelib/global/qlogging/tst_qlogging.cpp
index af4a5989d8..861e60e256 100644
--- a/tests/auto/corelib/global/qlogging/tst_qlogging.cpp
+++ b/tests/auto/corelib/global/qlogging/tst_qlogging.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2014 Olivier Goffart <ogoffart@woboq.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) 2022 The Qt Company Ltd.
+// Copyright (C) 2022 Intel Corporation.
+// Copyright (C) 2014 Olivier Goffart <ogoffart@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qdebug.h>
#include <qglobal.h>
@@ -33,6 +9,8 @@
# include <QtCore/QProcess>
#endif
#include <QtTest/QTest>
+#include <QList>
+#include <QMap>
class tst_qmessagehandler : public QObject
{
@@ -52,6 +30,8 @@ private slots:
#ifdef QT_BUILD_INTERNAL
void cleanupFuncinfo_data();
void cleanupFuncinfo();
+ void cleanupFuncinfoBad_data();
+ void cleanupFuncinfoBad();
#endif
void qMessagePattern_data();
@@ -62,7 +42,10 @@ private slots:
void formatLogMessage();
private:
- QStringList m_baseEnvironment;
+ QString backtraceHelperPath();
+#if QT_CONFIG(process)
+ QProcessEnvironment m_baseEnvironment;
+#endif
};
static QtMsgType s_type;
@@ -89,13 +72,9 @@ tst_qmessagehandler::tst_qmessagehandler()
void tst_qmessagehandler::initTestCase()
{
#if QT_CONFIG(process)
- m_baseEnvironment = QProcess::systemEnvironment();
- for (int i = 0; i < m_baseEnvironment.count(); ++i) {
- if (m_baseEnvironment.at(i).startsWith("QT_MESSAGE_PATTERN=")) {
- m_baseEnvironment.removeAt(i);
- break;
- }
- }
+ m_baseEnvironment = QProcessEnvironment::systemEnvironment();
+ m_baseEnvironment.remove("QT_MESSAGE_PATTERN");
+ m_baseEnvironment.insert("QT_FORCE_STDERR_LOGGING", "1");
#endif // QT_CONFIG(process)
}
@@ -189,9 +168,13 @@ public:
int operator%(int) { ADD("TestClass1::operator%"); return 0; }
int x;
int &operator++() { ADD("TestClass1::operator++"); return x; }
- int operator++(int) { ADD("TestClass1::operator++"); return 0; }
int &operator--() { ADD("TestClass1::operator--"); return x; }
- int operator--(int) { ADD("TestClass1::operator--"); return 0; }
+
+ // slightly different to avoid duplicate test rows
+#define ADD2(x) QTest::newRow(x ".postfix") << Q_FUNC_INFO << x;
+ int operator++(int) { ADD2("TestClass1::operator++"); return 0; }
+ int operator--(int) { ADD2("TestClass1::operator--"); return 0; }
+#undef ADD2
int nested_struct()
{
@@ -553,7 +536,7 @@ void tst_qmessagehandler::cleanupFuncinfo_data()
QTest::newRow("msvc_28")
<< "class std::map<long,void const *,struct std::less<long>,class std::allocator<struct std::pair<long const ,void const *> > > *__thiscall TestClass2<class std::map<long,void const *,struct std::less<long>,class std::allocator<struct std::pair<long const ,void const *> > > >::func_template1<class TestClass2<class std::map<long,void const *,struct std::less<long>,class std::allocator<struct std::pair<long const ,void const *> > > >>(void)"
<< "TestClass2::func_template1";
- QTest::newRow("gcc_21")
+ QTest::newRow("gcc_28")
<< "T* TestClass2<T>::func_template1() [with S = TestClass2<std::map<long int, const void*, std::less<long int>, std::allocator<std::pair<const long int, const void*> > > >, T = std::map<long int, const void*, std::less<long int>, std::allocator<std::pair<const long int, const void*> > >]"
<< "TestClass2::func_template1";
@@ -622,6 +605,34 @@ void tst_qmessagehandler::cleanupFuncinfo_data()
<< "int TestClass1::operator>(int)"
<< "TestClass1::operator>";
+ QTest::newRow("gcc_40")
+ << "Polymorphic<void (*)(int)>::~Polymorphic()"
+ << "Polymorphic::~Polymorphic";
+
+ QTest::newRow("gcc_41")
+ << "function<void (int*)>()::S::f()"
+ << "function()::S::f";
+
+ QTest::newRow("msvc_41")
+ << "void `void function<void __cdecl(int *)>(void)'::`2'::S::f(void)"
+ << "function(void)'::`2'::S::f";
+
+ QTest::newRow("gcc_42")
+ << "function<Polymorphic<void (int*)> >()::S::f(Polymorphic<void (int*)>*)"
+ << "function()::S::f";
+
+ QTest::newRow("msvc_42")
+ << "void `void function<Polymorphic<void __cdecl(int *)> >(void)'::`2'::S::f(Polymorphic<void __cdecl(int *)> *)"
+ << "function(void)'::`2'::S::f";
+
+ QTest::newRow("gcc_lambda_1") << "main(int, char**)::<lambda()>"
+ << "main(int, char**)::<lambda()>";
+
+ QTest::newRow("gcc_lambda_with_auto_1")
+ << "SomeClass::someMethod(const QString&, const QString&)::<lambda(auto:57)> [with "
+ "auto:57 = QNetworkReply::NetworkError]"
+ << "SomeClass::someMethod(const QString&, const QString&)::<lambda(auto:57)>";
+
QTest::newRow("objc_1")
<< "-[SomeClass someMethod:withArguments:]"
<< "-[SomeClass someMethod:withArguments:]";
@@ -637,6 +648,14 @@ void tst_qmessagehandler::cleanupFuncinfo_data()
QTest::newRow("objc_4")
<< "__31-[SomeClass someMethodSchedulingBlock]_block_invoke"
<< "__31-[SomeClass someMethodSchedulingBlock]_block_invoke";
+
+ QTest::newRow("thunk-1")
+ << "non-virtual thunk to QFutureWatcherBasePrivate::postCallOutEvent(QFutureCallOutEvent const&)"
+ << "QFutureWatcherBasePrivate::postCallOutEvent";
+
+ QTest::newRow("thunk-2")
+ << "virtual thunk to std::basic_iostream<char, std::char_traits<char> >::~basic_iostream()"
+ << "std::basic_iostream::~basic_iostream";
}
#endif
@@ -657,6 +676,41 @@ void tst_qmessagehandler::cleanupFuncinfo()
QEXPECT_FAIL("TestClass1::nested_struct_const", "Nested function processing is broken", Continue);
QTEST(QString::fromLatin1(result), "expected");
}
+
+void tst_qmessagehandler::cleanupFuncinfoBad_data()
+{
+ QTest::addColumn<QByteArray>("funcinfo");
+
+ auto addBadFrame = [i = 0](const char *symbol) mutable {
+ QTest::addRow("%d", ++i) << QByteArray(symbol);
+ };
+ addBadFrame("typeinfo for QEventLoop");
+ addBadFrame("typeinfo name for QtPrivate::ResultStoreBase");
+ addBadFrame("typeinfo name for ._anon_476");
+ addBadFrame("typeinfo name for std::__1::__function::__base<bool (void*, void*)>");
+ addBadFrame("vtable for BezierEase");
+ addBadFrame("vtable for Polymorphic<void ()>");
+ addBadFrame("vtable for Polymorphic<void (*)(int)>");
+ addBadFrame("TLS wrapper function for (anonymous namespace)::jitStacks");
+ addBadFrame("lcCheckIndex()::category");
+ addBadFrame("guard variable for lcEPDetach()::category");
+ addBadFrame("guard variable for QImageReader::read(QImage*)::disableNxImageLoading");
+ addBadFrame("VTT for std::__1::ostrstream");
+ addBadFrame("qIsRelocatable<(anonymous namespace)::Data>");
+ addBadFrame("qt_incomplete_metaTypeArray<(anonymous namespace)::qt_meta_stringdata_CLASSQNonContiguousByteDeviceIoDeviceImplENDCLASS_t, QtPrivate::TypeAndForceComplete<void, std::integral_constant<bool, true> > >");
+ addBadFrame("f()::i");
+}
+
+void tst_qmessagehandler::cleanupFuncinfoBad()
+{
+ QFETCH(QByteArray, funcinfo);
+
+ // A corrupted stack trace may find non-sensical symbols that aren't
+ // functions. The result doesn't matter, so long as we don't crash or hang.
+
+ QByteArray result = qCleanupFuncinfo(funcinfo);
+ qDebug() << "Decode of" << funcinfo << "produced" << result;
+}
#endif
void tst_qmessagehandler::qMessagePattern_data()
@@ -667,16 +721,16 @@ void tst_qmessagehandler::qMessagePattern_data()
// %{file} is tricky because of shadow builds
QTest::newRow("basic") << "%{type} %{appname} %{line} %{function} %{message}" << true << (QList<QByteArray>()
- << "debug 39 T::T static constructor"
+ << "debug 14 T::T static constructor"
// we can't be sure whether the QT_MESSAGE_PATTERN is already destructed
<< "static destructor"
- << "debug tst_qlogging 60 MyClass::myFunction from_a_function 34"
- << "debug tst_qlogging 70 main qDebug"
- << "info tst_qlogging 71 main qInfo"
- << "warning tst_qlogging 72 main qWarning"
- << "critical tst_qlogging 73 main qCritical"
- << "warning tst_qlogging 76 main qDebug with category"
- << "debug tst_qlogging 80 main qDebug2");
+ << "debug tst_qlogging 35 MyClass::myFunction from_a_function 34"
+ << "debug tst_qlogging 45 main qDebug"
+ << "info tst_qlogging 46 main qInfo"
+ << "warning tst_qlogging 47 main qWarning"
+ << "critical tst_qlogging 48 main qCritical"
+ << "warning tst_qlogging 51 main qDebug with category"
+ << "debug tst_qlogging 55 main qDebug2");
QTest::newRow("invalid") << "PREFIX: %{unknown} %{message}" << false << (QList<QByteArray>()
@@ -739,28 +793,42 @@ void tst_qmessagehandler::qMessagePattern_data()
#define BACKTRACE_HELPER_NAME "qlogging_helper"
-#ifdef __GLIBC__
#ifdef QT_NAMESPACE
#define QT_NAMESPACE_STR QT_STRINGIFY(QT_NAMESPACE::)
#else
#define QT_NAMESPACE_STR ""
#endif
-#if QT_CONFIG(static)
- QSKIP("These test cases don't work with static Qt builds");
-#else
-#ifndef QT_NO_DEBUG
- QTest::newRow("backtrace") << "[%{backtrace}] %{message}" << true << (QList<QByteArray>()
- // MyClass::qt_static_metacall is explicitly marked as hidden in the Q_OBJECT macro
- << "[MyClass::myFunction|MyClass::mySlot1|?" BACKTRACE_HELPER_NAME "?|" QT_NAMESPACE_STR "QMetaMethod::invoke|" QT_NAMESPACE_STR "QMetaObject::invokeMethod] from_a_function 34");
-#endif
+#ifdef __GLIBC__
+# if QT_CONFIG(static)
+ // These test cases don't work with static Qt builds
+# elif !defined(Q_PROCESSOR_X86)
+ // On most RISC platforms, call frames do not have to be stored to the
+ // stack (the return pointer may be saved in any callee-saved register), so
+ // this test isn't reliable.
+# elif defined(QT_ASAN_ENABLED)
+ // These tests produce far more call frames under ASan
+# else
+# ifndef QT_NO_DEBUG
+ QList<QByteArray> expectedBacktrace = {
+ // MyClass::qt_static_metacall is explicitly marked as hidden in the
+ // Q_OBJECT macro hence the ?helper? frame
+ "[MyClass::myFunction|MyClass::mySlot1|?" BACKTRACE_HELPER_NAME "?|",
+
+ // QMetaObject::invokeMethodImpl calls internal function
+ // (QMetaMethodPrivate::invokeImpl, at the time of this writing), which
+ // will usually show only as ?libQt6Core.so? or equivalent, so we skip
+
+ "|" QT_NAMESPACE_STR "QMetaObject::invokeMethodImpl] from_a_function 34"
+ };
+ QTest::newRow("backtrace") << "[%{backtrace}] %{message}" << true << expectedBacktrace;
+# endif
QTest::newRow("backtrace depth,separator") << "[%{backtrace depth=2 separator=\"\n\"}] %{message}" << true << (QList<QByteArray>()
<< "[MyClass::myFunction\nMyClass::mySlot1] from_a_function 34"
<< "[T::T\n");
-#endif // #if !QT_CONFIG(process)
+# endif // #if !QT_CONFIG(static)
#endif // #ifdef __GLIBC__
-
}
@@ -777,18 +845,14 @@ void tst_qmessagehandler::qMessagePattern()
QFETCH(QList<QByteArray>, expected);
QProcess process;
-#ifndef Q_OS_ANDROID
- const QString appExe(QLatin1String(HELPER_BINARY));
-#else
- const QString appExe(QCoreApplication::applicationDirPath() + QLatin1String("/lib" BACKTRACE_HELPER_NAME ".so"));
-#endif
+ const QString appExe(backtraceHelperPath());
//
// test QT_MESSAGE_PATTERN
//
- QStringList environment = m_baseEnvironment;
- environment.prepend("QT_MESSAGE_PATTERN=\"" + pattern + QLatin1Char('"'));
- process.setEnvironment(environment);
+ QProcessEnvironment environment = m_baseEnvironment;
+ environment.insert("QT_MESSAGE_PATTERN", pattern);
+ process.setProcessEnvironment(environment);
process.start(appExe);
QVERIFY2(process.waitForStarted(), qPrintable(
@@ -801,15 +865,16 @@ void tst_qmessagehandler::qMessagePattern()
QVERIFY(!output.isEmpty());
QCOMPARE(!output.contains("QT_MESSAGE_PATTERN"), valid);
- for (const QByteArray &e : qAsConst(expected)) {
+ for (const QByteArray &e : std::as_const(expected)) {
if (!output.contains(e)) {
- qDebug() << output;
- qDebug() << "expected: " << e;
- QVERIFY(output.contains(e));
+ // use QDebug so we get proper string escaping for the newlines
+ QString buf;
+ QDebug(&buf) << "Got:" << output << "; Expected:" << e;
+ QVERIFY2(output.contains(e), qPrintable(buf));
}
}
if (pattern.startsWith("%{pid}"))
- QVERIFY2(output.startsWith('"' + pid), "PID: " + pid + "\noutput:\n" + output);
+ QVERIFY2(output.startsWith(pid), "PID: " + pid + "\noutput:\n" + output);
#endif
}
@@ -827,22 +892,10 @@ void tst_qmessagehandler::setMessagePattern()
//
QProcess process;
-#ifndef Q_OS_ANDROID
- const QString appExe(QLatin1String(HELPER_BINARY));
-#else
- const QString appExe(QCoreApplication::applicationDirPath() + QLatin1String("/libhelper.so"));
-#endif
+ const QString appExe(backtraceHelperPath());
// make sure there is no QT_MESSAGE_PATTERN in the environment
- QStringList environment;
- environment.reserve(m_baseEnvironment.size());
- const auto doesNotStartWith = [](QLatin1String s) {
- return [s](const QString &str) { return !str.startsWith(s); };
- };
- std::copy_if(m_baseEnvironment.cbegin(), m_baseEnvironment.cend(),
- std::back_inserter(environment),
- doesNotStartWith(QLatin1String("QT_MESSAGE_PATTERN")));
- process.setEnvironment(environment);
+ process.setProcessEnvironment(m_baseEnvironment);
process.start(appExe);
QVERIFY2(process.waitForStarted(), qPrintable(
@@ -928,6 +981,19 @@ void tst_qmessagehandler::formatLogMessage()
QCOMPARE(r, result);
}
+QString tst_qmessagehandler::backtraceHelperPath()
+{
+#ifdef Q_OS_ANDROID
+ QString appExe(QCoreApplication::applicationDirPath()
+ + QLatin1String("/lib" BACKTRACE_HELPER_NAME ".so"));
+#elif defined(Q_OS_WEBOS)
+ QString appExe(QCoreApplication::applicationDirPath()
+ + QLatin1String("/" BACKTRACE_HELPER_NAME));
+#else
+ QString appExe(QLatin1String(HELPER_BINARY));
+#endif
+ return appExe;
+}
QTEST_MAIN(tst_qmessagehandler)
#include "tst_qlogging.moc"
diff --git a/tests/auto/corelib/global/qlogging/tst_qmessagelogger.cpp b/tests/auto/corelib/global/qlogging/tst_qmessagelogger.cpp
index 4ff0469a49..9c6b9e275d 100644
--- a/tests/auto/corelib/global/qlogging/tst_qmessagelogger.cpp
+++ b/tests/auto/corelib/global/qlogging/tst_qmessagelogger.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <qlogging.h>
#include <qloggingcategory.h>
diff --git a/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt b/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt
index 52242b4292..2c87e07b21 100644
--- a/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt
+++ b/tests/auto/corelib/global/qnativeinterface/CMakeLists.txt
@@ -1,3 +1,12 @@
+# 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_qnativeinterface LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnativeinterface
SOURCES
tst_qnativeinterface.cpp
diff --git a/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp b/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp
index 5291133406..602342770e 100644
--- a/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp
+++ b/tests/auto/corelib/global/qnativeinterface/tst_qnativeinterface.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/corelib/global/qnumeric/CMakeLists.txt b/tests/auto/corelib/global/qnumeric/CMakeLists.txt
index f86ddffc1d..e53a096c92 100644
--- a/tests/auto/corelib/global/qnumeric/CMakeLists.txt
+++ b/tests/auto/corelib/global/qnumeric/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qnumeric.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnumeric Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnumeric LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnumeric
SOURCES
tst_qnumeric.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp b/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp
index 5dbe6663b9..d21fabd74e 100644
--- a/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp
+++ b/tests/auto/corelib/global/qnumeric/tst_qnumeric.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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) 2022 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -116,7 +91,7 @@ void tst_QNumeric::fuzzyCompare_data()
QTest::addColumn<bool>("isEqual");
const F zero(0), one(1), ten(10);
const F huge = Fuzzy<F>::scale, tiny = one / huge;
- const F deci(.1), giga(1e9), nano(1e-9), big(1e7), small(1e-10);
+ const F deci(.1f), giga(1e9f), nano(1e-9f), big(1e7f), small(1e-10f);
QTest::newRow("zero") << zero << zero << true;
QTest::newRow("ten") << ten << ten << true;
@@ -179,6 +154,15 @@ void tst_QNumeric::fuzzyIsNull()
QCOMPARE(::qFuzzyIsNull(-value), isNull);
}
+static void clearFpExceptions()
+{
+ // Call after any functions that exercise floating-point exceptions, such as
+ // sqrt(-1) or log(0).
+#ifdef Q_OS_WIN
+ _clearfp();
+#endif
+}
+
#if defined __FAST_MATH__ && (__GNUC__ * 100 + __GNUC_MINOR__ >= 404)
// turn -ffast-math off
# pragma GCC optimize "no-fast-math"
@@ -187,6 +171,7 @@ void tst_QNumeric::fuzzyIsNull()
template<typename F>
void tst_QNumeric::checkNaN(F nan)
{
+ const auto cleanup = qScopeGuard([]() { clearFpExceptions(); });
#define CHECKNAN(value) \
do { \
const F v = (value); \
@@ -195,21 +180,23 @@ void tst_QNumeric::checkNaN(F nan)
QVERIFY(!qIsFinite(v)); \
QVERIFY(!qIsInf(v)); \
} while (0)
+ const F zero(0), one(1), two(2);
- QVERIFY(!(0 > nan));
- QVERIFY(!(0 < nan));
- QVERIFY(!(0 == nan));
+ QVERIFY(!(zero > nan));
+ QVERIFY(!(zero < nan));
+ QVERIFY(!(zero == nan));
QVERIFY(!(nan == nan));
CHECKNAN(nan);
- CHECKNAN(nan + 1);
- CHECKNAN(nan - 1);
+ CHECKNAN(nan + one);
+ CHECKNAN(nan - one);
CHECKNAN(-nan);
- CHECKNAN(nan * 2.0);
- CHECKNAN(nan / 2.0);
- CHECKNAN(1.0 / nan);
- CHECKNAN(0.0 / nan);
- CHECKNAN(0.0 * nan);
+ CHECKNAN(nan * two);
+ CHECKNAN(nan / two);
+ CHECKNAN(one / nan);
+ CHECKNAN(zero / nan);
+ CHECKNAN(zero * nan);
+ CHECKNAN(sqrt(-one));
// When any NaN is expected, any NaN will do:
QCOMPARE(nan, nan);
@@ -297,6 +284,7 @@ void tst_QNumeric::generalNaN()
template<typename F>
void tst_QNumeric::infinity()
{
+ const auto cleanup = qScopeGuard([]() { clearFpExceptions(); });
const F inf = qInf();
const F zero(0), one(1), two(2);
QVERIFY(inf > zero);
@@ -319,6 +307,7 @@ void tst_QNumeric::infinity()
QCOMPARE(one / -inf, zero);
QVERIFY(qIsNaN(zero * inf));
QVERIFY(qIsNaN(zero * -inf));
+ QCOMPARE(log(zero), -inf);
}
template<typename F>
@@ -332,8 +321,11 @@ void tst_QNumeric::classifyfp()
QCOMPARE(qFpClassify(inf), FP_INFINITE);
QCOMPARE(qFpClassify(-inf), FP_INFINITE);
+ QT_WARNING_PUSH;
+ QT_WARNING_DISABLE_MSVC(4056);
QCOMPARE(qFpClassify(huge * two), FP_INFINITE);
QCOMPARE(qFpClassify(huge * -two), FP_INFINITE);
+ QT_WARNING_POP;
QCOMPARE(qFpClassify(one), FP_NORMAL);
QCOMPARE(qFpClassify(huge), FP_NORMAL);
@@ -402,6 +394,11 @@ void tst_QNumeric::distance()
QFETCH(F, from);
QFETCH(F, stop);
QFETCH(Count, expectedDistance);
+ if constexpr (std::numeric_limits<F>::has_denorm != std::denorm_present) {
+ if (qstrcmp(QTest::currentDataTag(), "denormal") == 0) {
+ QSKIP("Skipping 'denorm' as this type lacks denormals on this system");
+ }
+ }
QCOMPARE(qFloatDistance(from, stop), expectedDistance);
QCOMPARE(qFloatDistance(stop, from), expectedDistance);
}
@@ -440,33 +437,33 @@ template <typename Int> static void addOverflow_template()
#define ADD_COMPARE_NONOVF(v1, v2, expected) \
do { \
- QCOMPARE(add_overflow(Int(v1), Int(v2), &r), false); \
+ QCOMPARE(qAddOverflow(Int(v1), Int(v2), &r), false); \
QCOMPARE(r, Int(expected)); \
- QCOMPARE(add_overflow(Int(v1), (std::integral_constant<Int, Int(v2)>()), &r), false); \
+ QCOMPARE(qAddOverflow(Int(v1), (std::integral_constant<Int, Int(v2)>()), &r), false); \
QCOMPARE(r, Int(expected)); \
- QCOMPARE(add_overflow<v2>(Int(v1), &r), false); \
+ QCOMPARE(qAddOverflow<v2>(Int(v1), &r), false); \
QCOMPARE(r, Int(expected)); \
} while (false)
#define ADD_COMPARE_OVF(v1, v2) \
do { \
- QCOMPARE(add_overflow(Int(v1), Int(v2), &r), true); \
- QCOMPARE(add_overflow(Int(v1), (std::integral_constant<Int, Int(v2)>()), &r), true); \
- QCOMPARE(add_overflow<v2>(Int(v1), &r), true); \
+ QCOMPARE(qAddOverflow(Int(v1), Int(v2), &r), true); \
+ QCOMPARE(qAddOverflow(Int(v1), (std::integral_constant<Int, Int(v2)>()), &r), true); \
+ QCOMPARE(qAddOverflow<v2>(Int(v1), &r), true); \
} while (false)
#define SUB_COMPARE_NONOVF(v1, v2, expected) \
do { \
- QCOMPARE(sub_overflow(Int(v1), Int(v2), &r), false); \
+ QCOMPARE(qSubOverflow(Int(v1), Int(v2), &r), false); \
QCOMPARE(r, Int(expected)); \
- QCOMPARE(sub_overflow(Int(v1), (std::integral_constant<Int, Int(v2)>()), &r), false); \
+ QCOMPARE(qSubOverflow(Int(v1), (std::integral_constant<Int, Int(v2)>()), &r), false); \
QCOMPARE(r, Int(expected)); \
- QCOMPARE(sub_overflow<v2>(Int(v1), &r), false); \
+ QCOMPARE(qSubOverflow<v2>(Int(v1), &r), false); \
QCOMPARE(r, Int(expected)); \
} while (false)
#define SUB_COMPARE_OVF(v1, v2) \
do { \
- QCOMPARE(sub_overflow(Int(v1), Int(v2), &r), true); \
- QCOMPARE(sub_overflow(Int(v1), (std::integral_constant<Int, Int(v2)>()), &r), true); \
- QCOMPARE(sub_overflow<v2>(Int(v1), &r), true); \
+ QCOMPARE(qSubOverflow(Int(v1), Int(v2), &r), true); \
+ QCOMPARE(qSubOverflow(Int(v1), (std::integral_constant<Int, Int(v2)>()), &r), true); \
+ QCOMPARE(qSubOverflow<v2>(Int(v1), &r), true); \
} while (false)
// basic values
@@ -617,18 +614,18 @@ template <typename Int> static void mulOverflow_template()
#define MUL_COMPARE_NONOVF(v1, v2, expected) \
do { \
- QCOMPARE(mul_overflow(Int(v1), Int(v2), &r), false); \
+ QCOMPARE(qMulOverflow(Int(v1), Int(v2), &r), false); \
QCOMPARE(r, Int(expected)); \
- QCOMPARE(mul_overflow(Int(v1), (std::integral_constant<Int, v2>()), &r), false); \
+ QCOMPARE(qMulOverflow(Int(v1), (std::integral_constant<Int, v2>()), &r), false); \
QCOMPARE(r, Int(expected)); \
- QCOMPARE(mul_overflow<v2>(Int(v1), &r), false); \
+ QCOMPARE(qMulOverflow<v2>(Int(v1), &r), false); \
QCOMPARE(r, Int(expected)); \
} while (false);
#define MUL_COMPARE_OVF(v1, v2) \
do { \
- QCOMPARE(mul_overflow(Int(v1), Int(v2), &r), true); \
- QCOMPARE(mul_overflow(Int(v1), (std::integral_constant<Int, v2>()), &r), true); \
- QCOMPARE(mul_overflow<v2>(Int(v1), &r), true); \
+ QCOMPARE(qMulOverflow(Int(v1), Int(v2), &r), true); \
+ QCOMPARE(qMulOverflow(Int(v1), (std::integral_constant<Int, v2>()), &r), true); \
+ QCOMPARE(qMulOverflow<v2>(Int(v1), &r), true); \
} while (false);
// basic multiplications
@@ -729,28 +726,28 @@ void tst_QNumeric::signedOverflow()
const int maxInt = std::numeric_limits<int>::max();
int r;
- QCOMPARE(add_overflow(minInt + 1, int(-1), &r), false);
- QCOMPARE(add_overflow(minInt, int(-1), &r), true);
- QCOMPARE(add_overflow(minInt, minInt, &r), true);
- QCOMPARE(add_overflow(maxInt - 1, int(1), &r), false);
- QCOMPARE(add_overflow(maxInt, int(1), &r), true);
- QCOMPARE(add_overflow(maxInt, maxInt, &r), true);
-
- QCOMPARE(sub_overflow(minInt + 1, int(1), &r), false);
- QCOMPARE(sub_overflow(minInt, int(1), &r), true);
- QCOMPARE(sub_overflow(minInt, maxInt, &r), true);
- QCOMPARE(sub_overflow(maxInt - 1, int(-1), &r), false);
- QCOMPARE(sub_overflow(maxInt, int(-1), &r), true);
- QCOMPARE(sub_overflow(maxInt, minInt, &r), true);
-
- QCOMPARE(mul_overflow(minInt, int(1), &r), false);
- QCOMPARE(mul_overflow(minInt, int(-1), &r), true);
- QCOMPARE(mul_overflow(minInt, int(2), &r), true);
- QCOMPARE(mul_overflow(minInt, minInt, &r), true);
- QCOMPARE(mul_overflow(maxInt, int(1), &r), false);
- QCOMPARE(mul_overflow(maxInt, int(-1), &r), false);
- QCOMPARE(mul_overflow(maxInt, int(2), &r), true);
- QCOMPARE(mul_overflow(maxInt, maxInt, &r), true);
+ QCOMPARE(qAddOverflow(minInt + 1, int(-1), &r), false);
+ QCOMPARE(qAddOverflow(minInt, int(-1), &r), true);
+ QCOMPARE(qAddOverflow(minInt, minInt, &r), true);
+ QCOMPARE(qAddOverflow(maxInt - 1, int(1), &r), false);
+ QCOMPARE(qAddOverflow(maxInt, int(1), &r), true);
+ QCOMPARE(qAddOverflow(maxInt, maxInt, &r), true);
+
+ QCOMPARE(qSubOverflow(minInt + 1, int(1), &r), false);
+ QCOMPARE(qSubOverflow(minInt, int(1), &r), true);
+ QCOMPARE(qSubOverflow(minInt, maxInt, &r), true);
+ QCOMPARE(qSubOverflow(maxInt - 1, int(-1), &r), false);
+ QCOMPARE(qSubOverflow(maxInt, int(-1), &r), true);
+ QCOMPARE(qSubOverflow(maxInt, minInt, &r), true);
+
+ QCOMPARE(qMulOverflow(minInt, int(1), &r), false);
+ QCOMPARE(qMulOverflow(minInt, int(-1), &r), true);
+ QCOMPARE(qMulOverflow(minInt, int(2), &r), true);
+ QCOMPARE(qMulOverflow(minInt, minInt, &r), true);
+ QCOMPARE(qMulOverflow(maxInt, int(1), &r), false);
+ QCOMPARE(qMulOverflow(maxInt, int(-1), &r), false);
+ QCOMPARE(qMulOverflow(maxInt, int(2), &r), true);
+ QCOMPARE(qMulOverflow(maxInt, maxInt, &r), true);
}
QTEST_APPLESS_MAIN(tst_QNumeric)
diff --git a/tests/auto/corelib/global/qoperatingsystemversion/CMakeLists.txt b/tests/auto/corelib/global/qoperatingsystemversion/CMakeLists.txt
index 619297fdab..f0e682d664 100644
--- a/tests/auto/corelib/global/qoperatingsystemversion/CMakeLists.txt
+++ b/tests/auto/corelib/global/qoperatingsystemversion/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qoperatingsystemversion.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qoperatingsystemversion Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qoperatingsystemversion LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qoperatingsystemversion
SOURCES
tst_qoperatingsystemversion.cpp
diff --git a/tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp b/tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp
index d1f9279b57..4c4ff72722 100644
--- a/tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp
+++ b/tests/auto/corelib/global/qoperatingsystemversion/tst_qoperatingsystemversion.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <qoperatingsystemversion.h>
@@ -35,11 +10,15 @@ class tst_QOperatingSystemVersion : public QObject
private slots:
void construction_data();
void construction();
+ void globals_data();
+ void globals();
void anyOf();
void comparison_data();
void comparison();
+ void comparison2_data();
+ void comparison2();
void mixedComparison();
};
@@ -77,6 +56,34 @@ void tst_QOperatingSystemVersion::construction()
QVERIFY(!systemVersion.name().isEmpty());
}
+void tst_QOperatingSystemVersion::globals_data()
+{
+ QTest::addColumn<QOperatingSystemVersion>("osver");
+ QTest::addColumn<QOperatingSystemVersion::OSType>("osType");
+
+#define ADDROW(os) QTest::newRow(#os) << QOperatingSystemVersion(QOperatingSystemVersion::os)
+ // legacy ones (global variables)
+ ADDROW(Windows7) << QOperatingSystemVersion::Windows;
+ ADDROW(Windows10) << QOperatingSystemVersion::Windows;
+ ADDROW(OSXMavericks) << QOperatingSystemVersion::MacOS;
+ ADDROW(MacOSMonterey) << QOperatingSystemVersion::MacOS;
+ ADDROW(AndroidJellyBean) << QOperatingSystemVersion::Android;
+ ADDROW(Android11) << QOperatingSystemVersion::Android;
+
+ // new ones (static constexpr)
+ ADDROW(Windows11) << QOperatingSystemVersion::Windows;
+ ADDROW(Android12) << QOperatingSystemVersion::Android;
+#undef ADDROW
+}
+
+void tst_QOperatingSystemVersion::globals()
+{
+ QFETCH(QOperatingSystemVersion, osver);
+ QFETCH(QOperatingSystemVersion::OSType, osType);
+ QCOMPARE(osver.type(), osType);
+ QCOMPARE_NE(osver.majorVersion(), 0);
+}
+
void tst_QOperatingSystemVersion::anyOf()
{
std::initializer_list<QOperatingSystemVersion::OSType> typesToCheck = {
@@ -107,47 +114,44 @@ void tst_QOperatingSystemVersion::comparison_data()
QTest::addColumn<int>("rhsMinor");
QTest::addColumn<int>("rhsMicro");
- QTest::addColumn<bool>("lessResult");
- QTest::addColumn<bool>("lessEqualResult");
- QTest::addColumn<bool>("moreResult");
- QTest::addColumn<bool>("moreEqualResult");
+ QTest::addColumn<Qt::partial_ordering>("expectedResult");
QTest::addRow("mismatching types") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
<< QOperatingSystemVersion::OSType::MacOS << 1 << 2 << 3
- << false << false << false << false;
+ << Qt::partial_ordering::unordered;
QTest::addRow("equal versions") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
- << false << true << false << true;
+ << Qt::partial_ordering::equivalent;
QTest::addRow("lhs micro less") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 2
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
- << true << true << false << false;
+ << Qt::partial_ordering::less;
QTest::addRow("rhs micro less") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 2
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << 1
- << false << false << true << true;
+ << Qt::partial_ordering::greater;
QTest::addRow("lhs minor less") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
<< QOperatingSystemVersion::OSType::Windows << 1 << 3 << 3
- << true << true << false << false;
+ << Qt::partial_ordering::less;
QTest::addRow("rhs minor less") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 2
<< QOperatingSystemVersion::OSType::Windows << 1 << 1 << 3
- << false << false << true << true;
+ << Qt::partial_ordering::greater;
QTest::addRow("lhs major less") << QOperatingSystemVersion::OSType::Windows << 0 << 5 << 6
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
- << true << true << false << false;
+ << Qt::partial_ordering::less;
QTest::addRow("rhs major less") << QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
<< QOperatingSystemVersion::OSType::Windows << 0 << 2 << 3
- << false << false << true << true;
+ << Qt::partial_ordering::greater;
QTest::addRow("different segmentCount")
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << 3
<< QOperatingSystemVersion::OSType::Windows << 1 << 2 << -1
- << false << true << false << true;
+ << Qt::partial_ordering::equivalent;
}
void tst_QOperatingSystemVersion::comparison()
@@ -166,17 +170,75 @@ void tst_QOperatingSystemVersion::comparison()
const QOperatingSystemVersion rhsSystemInfo(rhsType, rhsMajor, rhsMinor, rhsMicro);
- QFETCH(bool, lessResult);
- QCOMPARE(lhsSystemInfo < rhsSystemInfo, lessResult);
+ QFETCH(const Qt::partial_ordering, expectedResult);
- QFETCH(bool, lessEqualResult);
- QCOMPARE(lhsSystemInfo <= rhsSystemInfo, lessEqualResult);
+ QCOMPARE_EQ(lhsSystemInfo < rhsSystemInfo, is_lt(expectedResult));
+ QCOMPARE_EQ(lhsSystemInfo <= rhsSystemInfo, is_lteq(expectedResult));
+ QCOMPARE_EQ(lhsSystemInfo > rhsSystemInfo, is_gt(expectedResult));
+ QCOMPARE_EQ(lhsSystemInfo >= rhsSystemInfo, is_gteq(expectedResult));
+#ifdef __cpp_lib_three_way_comparison
+ QCOMPARE_EQ(lhsSystemInfo <=> rhsSystemInfo, expectedResult);
+#endif
+}
- QFETCH(bool, moreResult);
- QCOMPARE(lhsSystemInfo > rhsSystemInfo, moreResult);
+void tst_QOperatingSystemVersion::comparison2_data()
+{
+ QTest::addColumn<QOperatingSystemVersion>("lhs");
+ QTest::addColumn<QOperatingSystemVersion>("rhs");
+ QTest::addColumn<Qt::partial_ordering>("result");
+
+#define ADDROW(os1, os2) \
+ QTest::newRow(#os1 "-vs-" #os2) << QOperatingSystemVersion(QOperatingSystemVersion::os1) \
+ << QOperatingSystemVersion(QOperatingSystemVersion::os2)
+
+ // Cross-OS testing: not comparables.
+ ADDROW(Windows10, MacOSMonterey) << Qt::partial_ordering::unordered;
+ ADDROW(Windows11, MacOSMonterey) << Qt::partial_ordering::unordered;
+ ADDROW(MacOSMonterey, Windows10) << Qt::partial_ordering::unordered;
+ ADDROW(MacOSMonterey, Windows11) << Qt::partial_ordering::unordered;
+ ADDROW(Windows10, MacOSVentura) << Qt::partial_ordering::unordered;
+ ADDROW(Windows11, MacOSVentura) << Qt::partial_ordering::unordered;
+ ADDROW(MacOSVentura, Windows10) << Qt::partial_ordering::unordered;
+ ADDROW(MacOSVentura, Windows11) << Qt::partial_ordering::unordered;
+ ADDROW(Windows10, Android10) << Qt::partial_ordering::unordered;
+ ADDROW(Windows11, Android11) << Qt::partial_ordering::unordered;
+
+ // Same-OS tests. This list does not have to be exhaustive.
+ ADDROW(Windows7, Windows7) << Qt::partial_ordering::equivalent;
+ ADDROW(Windows7, Windows8) << Qt::partial_ordering::less;
+ ADDROW(Windows8, Windows7) << Qt::partial_ordering::greater;
+ ADDROW(Windows8, Windows10) << Qt::partial_ordering::less;
+ ADDROW(Windows10, Windows8) << Qt::partial_ordering::greater;
+ ADDROW(Windows10, Windows10_21H1) << Qt::partial_ordering::less;
+ ADDROW(Windows10_21H1, Windows10) << Qt::partial_ordering::greater;
+ ADDROW(Windows10, Windows11) << Qt::partial_ordering::less;
+ ADDROW(MacOSCatalina, MacOSCatalina) << Qt::partial_ordering::equivalent;
+ ADDROW(MacOSCatalina, MacOSBigSur) << Qt::partial_ordering::less;
+ ADDROW(MacOSBigSur, MacOSCatalina) << Qt::partial_ordering::greater;
+ ADDROW(MacOSMonterey, MacOSVentura) << Qt::partial_ordering::less;
+ ADDROW(MacOSVentura, MacOSVentura) << Qt::partial_ordering::equivalent;
+ ADDROW(MacOSVentura, MacOSMonterey) << Qt::partial_ordering::greater;
+#undef ADDROW
+}
- QFETCH(bool, moreEqualResult);
- QCOMPARE(lhsSystemInfo >= rhsSystemInfo, moreEqualResult);
+void tst_QOperatingSystemVersion::comparison2()
+{
+ QFETCH(QOperatingSystemVersion, lhs);
+ QFETCH(QOperatingSystemVersion, rhs);
+ QFETCH(const Qt::partial_ordering, result);
+
+ QEXPECT_FAIL("Windows10-vs-Windows10_21H1", "QTBUG-107907: Unexpected behavior", Abort);
+ QEXPECT_FAIL("Windows10-vs-Windows11", "QTBUG-107907: Unexpected behavior", Abort);
+
+ const bool comparable = (result != Qt::partial_ordering::unordered);
+ QCOMPARE_EQ(lhs < rhs, is_lt(result) && comparable);
+ QEXPECT_FAIL("Windows10_21H1-vs-Windows10", "QTBUG-107907: Unexpected behavior", Abort);
+ QCOMPARE_EQ(lhs <= rhs, is_lteq(result) && comparable);
+ QCOMPARE_EQ(lhs > rhs, is_gt(result) && comparable);
+ QCOMPARE_EQ(lhs >= rhs, is_gteq(result) && comparable);
+#ifdef __cpp_lib_three_way_comparison
+ QCOMPARE_EQ(lhs <=> rhs, result);
+#endif
}
void tst_QOperatingSystemVersion::mixedComparison()
diff --git a/tests/auto/corelib/global/qrandomgenerator/CMakeLists.txt b/tests/auto/corelib/global/qrandomgenerator/CMakeLists.txt
index 54fa36b5df..3d8f892414 100644
--- a/tests/auto/corelib/global/qrandomgenerator/CMakeLists.txt
+++ b/tests/auto/corelib/global/qrandomgenerator/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qrandomgenerator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qrandomgenerator Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qrandomgenerator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qrandomgenerator
SOURCES
tst_qrandomgenerator.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/global/qrandomgenerator/tst_qrandomgenerator.cpp b/tests/auto/corelib/global/qrandomgenerator/tst_qrandomgenerator.cpp
index 30e170b65d..a32045bbbb 100644
--- a/tests/auto/corelib/global/qrandomgenerator/tst_qrandomgenerator.cpp
+++ b/tests/auto/corelib/global/qrandomgenerator/tst_qrandomgenerator.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qlist.h>
@@ -39,7 +14,6 @@
# define HAVE_FALLBACK_ENGINE
#endif
-#define COMMA ,
#define QVERIFY_3TIMES(statement) \
do {\
if (!static_cast<bool>(statement))\
@@ -154,6 +128,9 @@ void tst_QRandomGenerator::basics()
QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wself-move")
QT_WARNING_DISABLE_CLANG("-Wself-assign-overloaded")
+#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU >= 1301
+QT_WARNING_DISABLE_GCC("-Wself-move")
+#endif
// copyable && movable
rng = rng;
rng = std::move(rng);
@@ -190,8 +167,8 @@ QT_WARNING_POP
QRandomGenerator64 systemRng64 = *system64;
systemRng64 = *system64;
- static_assert(std::is_same<decltype(rng64.generate()) COMMA quint64>::value);
- static_assert(std::is_same<decltype(system64->generate()) COMMA quint64>::value);
+ static_assert(std::is_same_v<decltype(rng64.generate()), quint64>);
+ static_assert(std::is_same_v<decltype(system64->generate()), quint64>);
}
void tst_QRandomGenerator::knownSequence()
@@ -636,7 +613,7 @@ template <typename UInt> static void boundedQuality_template()
QVector<UInt> buffer(BufferCount, filler);
generate(buffer.begin(), buffer.end(), [&] { return rng.bounded(Bound); });
- for (UInt value : qAsConst(buffer)) {
+ for (UInt value : std::as_const(buffer)) {
QVERIFY(value < Bound);
histogram[value]++;
}
@@ -920,18 +897,20 @@ void tst_QRandomGenerator::stdGenerateCanonical()
{
QFETCH(uint, control);
RandomGenerator rng(control);
+ auto generate_canonical = [&rng]() {
+ return std::generate_canonical<qreal, 32>(rng);
+ };
for (int i = 0; i < 4; ++i) {
QVERIFY_3TIMES([&] {
- qreal value = std::generate_canonical<qreal COMMA 32>(rng);
+ qreal value = generate_canonical();
return value > 0 && value < 1 && value != RandomValueFP;
}());
}
// and should hopefully be different from repeated calls
for (int i = 0; i < 4; ++i)
- QVERIFY_3TIMES(std::generate_canonical<qreal COMMA 32>(rng) !=
- std::generate_canonical<qreal COMMA 32>(rng));
+ QVERIFY_3TIMES(generate_canonical() != generate_canonical());
}
void tst_QRandomGenerator::stdUniformRealDistribution_data()
diff --git a/tests/auto/corelib/global/qtendian/CMakeLists.txt b/tests/auto/corelib/global/qtendian/CMakeLists.txt
index acd0981991..cf1a22f678 100644
--- a/tests/auto/corelib/global/qtendian/CMakeLists.txt
+++ b/tests/auto/corelib/global/qtendian/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qtendian.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtendian Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtendian LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtendian
SOURCES
tst_qtendian.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/global/qtendian/tst_qtendian.cpp b/tests/auto/corelib/global/qtendian/tst_qtendian.cpp
index 74c2deff52..8e50b2bd08 100644
--- a/tests/auto/corelib/global/qtendian/tst_qtendian.cpp
+++ b/tests/auto/corelib/global/qtendian/tst_qtendian.cpp
@@ -1,40 +1,27 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/qendian.h>
#include <QtCore/private/qendian_p.h>
+#include <QtCore/qsysinfo.h>
+#if QT_SUPPORTS_INT128
+#define ONLY_INT128(...) __VA_ARGS__
+#else
+#define ONLY_INT128(...)
+#endif
class tst_QtEndian: public QObject
{
Q_OBJECT
+public:
+ enum Signedness {
+ Unsigned,
+ Signed
+ };
+ Q_ENUM(Signedness);
private slots:
void fromBigEndian();
@@ -54,11 +41,15 @@ private slots:
void endianIntegers_data();
void endianIntegers();
- void endianBitfields();
+ void endianBitfieldUnions_data();
+ void endianBitfieldUnions();
};
struct TestData
{
+ ONLY_INT128(
+ quint128 data128;
+ )
quint64 data64;
quint32 data32;
quint16 data16;
@@ -75,6 +66,9 @@ template <> quint8 getData(const TestData &d) { return d.data8; }
template <> quint16 getData(const TestData &d) { return d.data16; }
template <> quint32 getData(const TestData &d) { return d.data32; }
template <> quint64 getData(const TestData &d) { return d.data64; }
+ONLY_INT128(
+template <> quint128 getData(const TestData &d) { return d.data128; }
+)
template <> float getData(const TestData &d) { return d.dataFloat; }
union RawTestData
@@ -92,6 +86,9 @@ Float int2Float(typename QIntegerForSizeof<Float>::Unsigned i)
}
static const TestData inNativeEndian = {
+ ONLY_INT128(
+ Q_UINT128_C(0x0123'4567'89ab'cdef'18ba'df00'd1da'cafe),
+ )
Q_UINT64_C(0x0123456789abcdef),
0x00c0ffee,
0xcafe,
@@ -101,6 +98,9 @@ static const TestData inNativeEndian = {
'\0'
};
static const RawTestData inBigEndian = {
+ ONLY_INT128(
+ "\x01\x23\x45\x67\x89\xab\xcd\xef\x18\xba\xdf\x00\xd1\xda\xca\xfe"
+ )
"\x01\x23\x45\x67\x89\xab\xcd\xef"
"\x00\xc0\xff\xee"
"\xca\xfe"
@@ -109,6 +109,9 @@ static const RawTestData inBigEndian = {
"\x01\x23\x45\x67\x89\xab\xcd\xef"
};
static const RawTestData inLittleEndian = {
+ ONLY_INT128(
+ "\xfe\xca\xda\xd1\x00\xdf\xba\x18\xef\xcd\xab\x89\x67\x45\x23\x01"
+ )
"\xef\xcd\xab\x89\x67\x45\x23\x01"
"\xee\xff\xc0\x00"
"\xfe\xca"
@@ -120,27 +123,37 @@ static const RawTestData inLittleEndian = {
#define EXPAND_ENDIAN_TEST(endian) \
do { \
/* Unsigned tests */ \
- ENDIAN_TEST(endian, quint, 64); \
- ENDIAN_TEST(endian, quint, 32); \
- ENDIAN_TEST(endian, quint, 16); \
- ENDIAN_TEST(endian, quint, 8); \
+ ONLY_INT128( \
+ ENDIAN_TEST_INT(endian, ui, 128); \
+ ) \
+ ENDIAN_TEST_INT(endian, ui, 64); \
+ ENDIAN_TEST_INT(endian, ui, 32); \
+ ENDIAN_TEST_INT(endian, ui, 16); \
+ ENDIAN_TEST_INT(endian, ui, 8); \
\
/* Signed tests */ \
- ENDIAN_TEST(endian, qint, 64); \
- ENDIAN_TEST(endian, qint, 32); \
- ENDIAN_TEST(endian, qint, 16); \
- ENDIAN_TEST(endian, qint, 8); \
+ ONLY_INT128( \
+ ENDIAN_TEST_INT(endian, i, 128); \
+ ) \
+ ENDIAN_TEST_INT(endian, i, 64); \
+ ENDIAN_TEST_INT(endian, i, 32); \
+ ENDIAN_TEST_INT(endian, i, 16); \
+ ENDIAN_TEST_INT(endian, i, 8); \
} while (false) \
/**/
-#define ENDIAN_TEST(endian, type, size) \
+#define ENDIAN_TEST_INT(Endian, Uns, Size) \
+ ENDIAN_TEST(Endian, q ## Uns ## nt ## Size, data ## Size)
+
+#define ENDIAN_TEST(endian, Type, Data) \
do { \
+ static_assert(std::is_same_v<decltype(qbswap(std::declval<Type>())), Type>); \
QCOMPARE(qFrom ## endian ## Endian( \
- (type ## size)(in ## endian ## Endian.data.data ## size)), \
- (type ## size)(inNativeEndian.data ## size)); \
- QCOMPARE(qFrom ## endian ## Endian<type ## size>( \
- in ## endian ## Endian.rawData + offsetof(TestData, data ## size)), \
- (type ## size)(inNativeEndian.data ## size)); \
+ (Type)(in ## endian ## Endian.data.Data)), \
+ (Type)(inNativeEndian.Data)); \
+ QCOMPARE(qFrom ## endian ## Endian<Type>( \
+ in ## endian ## Endian.rawData + offsetof(TestData, Data)), \
+ (Type)(inNativeEndian.Data)); \
} while (false) \
/**/
@@ -261,18 +274,18 @@ void tst_QtEndian::fromLittleEndianRegion()
}
}
-#define ENDIAN_TEST(endian, type, size) \
- do { \
- QCOMPARE(qTo ## endian ## Endian( \
- (type ## size)(inNativeEndian.data ## size)), \
- (type ## size)(in ## endian ## Endian.data.data ## size)); \
- \
- RawTestData test; \
- qTo ## endian ## Endian( \
- (type ## size)(inNativeEndian.data ## size), \
- test.rawData + offsetof(TestData, data ## size)); \
- QCOMPARE(test.data.data ## size, in ## endian ## Endian.data.data ## size ); \
- } while (false) \
+#define ENDIAN_TEST(endian, Type, Data) \
+ do { \
+ QCOMPARE(qTo ## endian ## Endian( \
+ (Type)(inNativeEndian.Data)), \
+ (Type)(in ## endian ## Endian.data.Data)); \
+ \
+ RawTestData test; \
+ qTo ## endian ## Endian( \
+ (Type)(inNativeEndian.Data), \
+ test.rawData + offsetof(TestData, Data)); \
+ QCOMPARE(test.data.Data, in ## endian ## Endian.data.Data ); \
+ } while (false) \
/**/
void tst_QtEndian::toBigEndian()
@@ -360,32 +373,108 @@ void tst_QtEndian::endianIntegers()
#endif
}
-void tst_QtEndian::endianBitfields()
+template<template<typename... Accessors> typename Union, template<int, int, typename> typename Member>
+void testBitfieldUnion()
+{
+ using upper = Member<21, 11, uint>;
+ using lower = Member<10, 11, uint>;
+ using bottom = Member<0, 10, int>;
+ using all = Member<0, 32, uint>;
+
+ using UnionType = Union<upper, lower, bottom, all>;
+ UnionType u;
+
+ u.template set<upper>(200);
+ QCOMPARE(u.template get<upper>(), 200U);
+ u.template set<lower>(1000);
+ u.template set<bottom>(-8);
+ QCOMPARE(u.template get<lower>(), 1000U);
+ QCOMPARE(u.template get<upper>(), 200U);
+
+ u.template set<lower>(u.template get<lower>() + u.template get<upper>());
+ QCOMPARE(u.template get<upper>(), 200U);
+ QCOMPARE(u.template get<lower>(), 1200U);
+
+ u.template set<upper>(65536 + 7);
+ u.template set<lower>(65535);
+ QCOMPARE(u.template get<lower>(), 65535U & ((1<<11) - 1));
+ QCOMPARE(u.template get<upper>(), 7U);
+
+ QCOMPARE(u.template get<bottom>(), -8);
+
+ UnionType u2(QSpecialIntegerBitfieldZero);
+ QCOMPARE(u2.data(), 0U);
+
+ u2.template set<all>(std::numeric_limits<uint>::max());
+ QCOMPARE(u2.template get<all>(), std::numeric_limits<uint>::max());
+
+ u2.template set<all>(453);
+ QCOMPARE(u2.template get<all>(), 453U);
+
+ u2.template set<all>(0);
+ QCOMPARE(u2.template get<all>(), 0U);
+
+ UnionType u3(42U);
+ QCOMPARE(u3.data(), 42U);
+
+ using BEUintAccessor = QSpecialIntegerAccessor<QBigEndianStorageType<uint>, 21, 11>;
+ using LEUintAccessor = QSpecialIntegerAccessor<QLittleEndianStorageType<uint>, 21, 11>;
+ using BEIntAccessor = QSpecialIntegerAccessor<QBigEndianStorageType<int>, 0, 10>;
+ using LEIntAccessor = QSpecialIntegerAccessor<QLittleEndianStorageType<int>, 0, 10>;
+
+ if constexpr (std::is_same_v<BEUintAccessor, upper>) {
+ QCOMPARE(u.template get<BEUintAccessor>(), 7U);
+ } else if constexpr (std::is_same_v<LEUintAccessor, upper>) {
+ QCOMPARE(u.template get<LEUintAccessor>(), 7U);
+ } else if constexpr (std::is_same_v<BEIntAccessor, bottom>) {
+ QCOMPARE(u.template get<BEIntAccessor>(), -8);
+ } else if constexpr (std::is_same_v<LEIntAccessor, bottom>) {
+ QCOMPARE(u.template get<LEIntAccessor>(), -8);
+ } else {
+ QFAIL("none of the manually defined accessors match");
+ }
+}
+
+void tst_QtEndian::endianBitfieldUnions_data()
+{
+ QTest::addColumn<QSysInfo::Endian>("byteOrder");
+ QTest::addColumn<Signedness>("signedness");
+
+ QTest::addRow("little endian unsigned") << QSysInfo::LittleEndian << Unsigned;
+ QTest::addRow("little endian signed") << QSysInfo::LittleEndian << Signed;
+ QTest::addRow("big endian unsigned") << QSysInfo::BigEndian << Unsigned;
+ QTest::addRow("big endian signed") << QSysInfo::BigEndian << Signed;
+}
+
+void tst_QtEndian::endianBitfieldUnions()
{
- union {
- quint32_be_bitfield<21, 11> upper;
- quint32_be_bitfield<10, 11> lower;
- qint32_be_bitfield<0, 10> bottom;
- } u;
-
- u.upper = 200;
- QCOMPARE(u.upper, 200U);
- u.lower = 1000;
- u.bottom = -8;
- QCOMPARE(u.lower, 1000U);
- QCOMPARE(u.upper, 200U);
-
- u.lower += u.upper;
- QCOMPARE(u.upper, 200U);
- QCOMPARE(u.lower, 1200U);
-
- u.upper = 65536 + 7;
- u.lower = 65535;
- QCOMPARE(u.lower, 65535U & ((1<<11) - 1));
- QCOMPARE(u.upper, 7U);
-
- QCOMPARE(u.bottom, -8);
+ QFETCH(QSysInfo::Endian, byteOrder);
+ QFETCH(Signedness, signedness);
+
+ switch (byteOrder) {
+ case QSysInfo::LittleEndian:
+ switch (signedness) {
+ case Unsigned:
+ testBitfieldUnion<quint32_le_bitfield_union, quint32_le_bitfield_member>();
+ return;
+ case Signed:
+ testBitfieldUnion<qint32_le_bitfield_union, qint32_le_bitfield_member>();
+ return;
+ }
+ Q_UNREACHABLE_RETURN();
+ case QSysInfo::BigEndian:
+ switch (signedness) {
+ case Unsigned:
+ testBitfieldUnion<quint32_be_bitfield_union, quint32_be_bitfield_member>();
+ return;
+ case Signed:
+ testBitfieldUnion<qint32_be_bitfield_union, qint32_be_bitfield_member>();
+ return;
+ }
+ Q_UNREACHABLE_RETURN();
+ }
}
+
QTEST_MAIN(tst_QtEndian)
#include "tst_qtendian.moc"
diff --git a/tests/auto/corelib/global/qwinregistry/CMakeLists.txt b/tests/auto/corelib/global/qwinregistry/CMakeLists.txt
deleted file mode 100644
index 95d591a125..0000000000
--- a/tests/auto/corelib/global/qwinregistry/CMakeLists.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-# Generated from qwinregistry.pro.
-
-#####################################################################
-## tst_qwinregistry Test:
-#####################################################################
-
-qt_internal_add_test(tst_qwinregistry
- SOURCES
- tst_qwinregistry.cpp
- PUBLIC_LIBRARIES
- Qt::CorePrivate
-)
diff --git a/tests/auto/corelib/global/qwinregistry/tst_qwinregistry.cpp b/tests/auto/corelib/global/qwinregistry/tst_qwinregistry.cpp
deleted file mode 100644
index c73a0a7575..0000000000
--- a/tests/auto/corelib/global/qwinregistry/tst_qwinregistry.cpp
+++ /dev/null
@@ -1,68 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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 <QTest>
-
-#include <QtCore/qoperatingsystemversion.h>
-
-#include <QtCore/private/qwinregistry_p.h>
-
-class tst_QWinRegistry : public QObject
-{
- Q_OBJECT
-
-public Q_SLOTS:
- void initTestCase();
-
-private Q_SLOTS:
- void values();
-};
-
-void tst_QWinRegistry::initTestCase()
-{
- if (QOperatingSystemVersion::current() < QOperatingSystemVersion::Windows10)
- QSKIP("This test requires registry values present in Windows 10");
-}
-
-void tst_QWinRegistry::values()
-{
- QWinRegistryKey key(HKEY_LOCAL_MACHINE, LR"(SOFTWARE\Microsoft\Windows NT\CurrentVersion)");
- QVERIFY(key.isValid());
- QVERIFY(!key.stringValue(L"ProductName").isEmpty());
- QVERIFY(key.stringValue(L"NonExistingKey").isEmpty());
- auto majorVersion = key.dwordValue(L"CurrentMajorVersionNumber");
- QVERIFY(majorVersion.second);
- QVERIFY(majorVersion.first > 0);
- auto nonExistingValue = key.dwordValue(L"NonExistingKey");
- QVERIFY(!nonExistingValue.second);
- QCOMPARE(nonExistingValue.first, 0u);
-}
-
-QTEST_APPLESS_MAIN(tst_QWinRegistry);
-
-#include "tst_qwinregistry.moc"
diff --git a/tests/auto/corelib/global/qxp/CMakeLists.txt b/tests/auto/corelib/global/qxp/CMakeLists.txt
new file mode 100644
index 0000000000..2178f446db
--- /dev/null
+++ b/tests/auto/corelib/global/qxp/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_subdirectory(function_ref)
+add_subdirectory(is_virtual_base_of)
diff --git a/tests/auto/corelib/global/qxp/function_ref/CMakeLists.txt b/tests/auto/corelib/global/qxp/function_ref/CMakeLists.txt
new file mode 100644
index 0000000000..351fe24b22
--- /dev/null
+++ b/tests/auto/corelib/global/qxp/function_ref/CMakeLists.txt
@@ -0,0 +1,16 @@
+# 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_qxp_function_ref LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qxp_function_ref
+ EXCEPTIONS
+ SOURCES
+ tst_qxp_function_ref.cpp
+ LIBRARIES
+ Qt::Core
+)
diff --git a/tests/auto/corelib/global/qxp/function_ref/tst_qxp_function_ref.cpp b/tests/auto/corelib/global/qxp/function_ref/tst_qxp_function_ref.cpp
new file mode 100644
index 0000000000..ee50a311ef
--- /dev/null
+++ b/tests/auto/corelib/global/qxp/function_ref/tst_qxp_function_ref.cpp
@@ -0,0 +1,281 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/qxpfunctional.h>
+
+#include <QTest>
+
+#include <type_traits>
+
+// checking dependency q20::remove_cvref_t:
+#define CHECK(in, out) \
+ static_assert(std::is_same_v<q20::remove_cvref_t< in >, out >)
+CHECK(int, int);
+CHECK(const int, int);
+CHECK(int &, int);
+CHECK(const int &, int);
+CHECK(int &&, int);
+CHECK(const int &&, int);
+CHECK(int *, int *);
+CHECK(const int *, const int *);
+CHECK(int[4], int[4]);
+CHECK(const int (&)[4], int[4]);
+#undef CHECK
+
+template <typename T> constexpr inline bool
+is_noexcept_function_ref_helper_v = false;
+template <typename R, typename...Args> constexpr inline bool
+is_noexcept_function_ref_helper_v<qxp::function_ref<R(Args...) noexcept(true)>> = true;
+template <typename R, typename...Args> constexpr inline bool
+is_noexcept_function_ref_helper_v<qxp::function_ref<R(Args...) const noexcept(true)>> = true;
+
+template <typename T> constexpr inline bool
+is_noexcept_function_ref_v = is_noexcept_function_ref_helper_v<q20::remove_cvref_t<T>>;
+
+class tst_qxp_function_ref : public QObject
+{
+ Q_OBJECT
+public:
+ using QObject::QObject;
+
+private Q_SLOTS:
+ void basics();
+ void constOverloads();
+ void constExpr();
+ void voidReturning();
+ void ctad();
+};
+
+void tst_qxp_function_ref::basics()
+{
+ static_assert(std::is_trivially_copyable_v<qxp::function_ref<int(int)>>);
+ static_assert(std::is_trivially_copyable_v<qxp::function_ref<int()>>);
+ static_assert(std::is_trivially_copyable_v<qxp::function_ref<void()>>);
+
+ {
+ Q_CONSTINIT static int invoked = 0;
+ auto lambda = [](int i) noexcept { ++invoked; return i; };
+ const qxp::function_ref<int(int)> f = lambda;
+ QCOMPARE(invoked, 0);
+ QCOMPARE(f(42), 42);
+ QCOMPARE(invoked, 1);
+
+ const int fourtyTwo = 42;
+
+ const qxp::function_ref<int(int) noexcept> f2 = std::move(lambda);
+ QCOMPARE(invoked, 1);
+ QCOMPARE(f2(fourtyTwo), 42);
+ QCOMPARE(invoked, 2);
+
+ int (*fpr)(int) = lambda;
+
+ const qxp::function_ref f3 = fpr;
+ static_assert(!is_noexcept_function_ref_v<decltype(f3)>);
+ QCOMPARE(invoked, 2);
+ QCOMPARE(f3(42), 42);
+ QCOMPARE(invoked, 3);
+
+ int (*fpr2)(int) noexcept = lambda;
+
+ const qxp::function_ref f4 = fpr2;
+ static_assert(is_noexcept_function_ref_v<decltype(f4)>);
+ QCOMPARE(invoked, 3);
+ QCOMPARE(f4(42), 42);
+ QCOMPARE(invoked, 4);
+ }
+ {
+ Q_CONSTINIT static int invoked = 0;
+ auto lambda = [] { ++invoked; return 42; };
+ const qxp::function_ref<int()> f = lambda;
+ QCOMPARE(invoked, 0);
+ QCOMPARE(f(), 42);
+ QCOMPARE(invoked, 1);
+
+ const qxp::function_ref<int()> f2 = std::move(lambda);
+ QCOMPARE(invoked, 1);
+ QCOMPARE(f2(), 42);
+ QCOMPARE(invoked, 2);
+
+ int (*fpr)() = lambda;
+
+ const qxp::function_ref f3 = fpr;
+ static_assert(!is_noexcept_function_ref_v<decltype(f3)>);
+ QCOMPARE(invoked, 2);
+ QCOMPARE(f3(), 42);
+ QCOMPARE(invoked, 3);
+ }
+ {
+ Q_CONSTINIT static int invoked = 0;
+ auto lambda = [] { ++invoked; };
+ const qxp::function_ref<void()> f = lambda;
+ QCOMPARE(invoked, 0);
+ f();
+ QCOMPARE(invoked, 1);
+
+ const qxp::function_ref<void()> f2 = std::move(lambda);
+ QCOMPARE(invoked, 1);
+ f2();
+ QCOMPARE(invoked, 2);
+
+ void (*fpr)() = lambda;
+
+ const qxp::function_ref f3 = fpr;
+ QCOMPARE(invoked, 2);
+ f3();
+ QCOMPARE(invoked, 3);
+ }
+}
+
+void tst_qxp_function_ref::constOverloads()
+{
+ auto func_c = [](qxp::function_ref<int() const> callable)
+ {
+ return callable();
+ };
+ auto func_m = [](qxp::function_ref<int() /*mutable*/> callable)
+ {
+ return callable();
+ };
+
+ struct S
+ {
+ int operator()() { return 1; }
+ int operator()() const { return 2; }
+ };
+ S s;
+ QCOMPARE(func_c(s), 2);
+ QCOMPARE(func_m(s), 1);
+ const S cs;
+ QCOMPARE(func_c(cs), 2);
+#if 0
+ // this should not compile (and doesn't, but currently fails with an error in the impl,
+ // not by failing a constructor constaint → spec issue?).
+ QCOMPARE(func_m(cs), 2);
+#endif
+}
+
+void tst_qxp_function_ref::constExpr()
+{
+ Q_CONSTINIT static int invoked = 0;
+ {
+ Q_CONSTINIT static auto lambda = [] (int i) { ++invoked; return i; };
+ // the function object constructor is constexpr, so this should be constinit:
+ Q_CONSTINIT static qxp::function_ref<int(int)> f = lambda;
+
+ QCOMPARE(invoked, 0);
+ QCOMPARE(f(15), 15);
+ QCOMPARE(invoked, 1);
+ }
+ {
+ constexpr static auto lambda = [] (int i) { ++invoked; return i; };
+ // the function object constructor is constexpr, so this should be constinit:
+ Q_CONSTINIT static qxp::function_ref<int(int) const> f = lambda;
+
+ QCOMPARE(invoked, 1);
+ QCOMPARE(f(51), 51);
+ QCOMPARE(invoked, 2);
+
+#if 0 // ### should this work?:
+ Q_CONSTINIT static qxp::function_ref<int(int)> f2 = lambda;
+
+ QCOMPARE(invoked, 2);
+ QCOMPARE(f(150), 150);
+ QCOMPARE(invoked, 3);
+#endif
+
+ }
+}
+
+int i_f_i_nx(int i) noexcept { return i; }
+void v_f_i_nx(int) noexcept {}
+int i_f_v_nx() noexcept { return 42; }
+void v_f_v_nx() noexcept {}
+
+int i_f_i_ex(int i) { return i; }
+void v_f_i_ex(int) {}
+int i_f_v_ex() { return 42; }
+void v_f_v_ex() {}
+
+void tst_qxp_function_ref::voidReturning()
+{
+ // check that "casting" int to void returns works:
+
+ using Fi = qxp::function_ref<void(int)>;
+ using Fv = qxp::function_ref<void()>;
+
+ {
+ Fi fi = i_f_i_nx;
+ fi(42);
+ Fv fv = i_f_v_nx;
+ fv();
+ }
+
+ {
+ Fi fi = i_f_i_ex;
+ fi(42);
+ Fv fv = i_f_v_ex;
+ fv();
+ }
+
+ // now with lambdas
+
+ bool ok = false; // prevent lambdas from decaying to function pointers
+ {
+ auto lambda1 = [&](int i) noexcept { return i + int(ok); };
+ Fi fi = lambda1;
+ fi(42);
+ auto lambda2 = [&]() noexcept { return int(ok); };
+ Fv fv = lambda2;
+ fv();
+ }
+
+ {
+ auto lambda1 = [&](int i) { return i + int(ok); };
+ Fi fi = lambda1;
+ fi(42);
+ auto lambda2 = [&]() { return int(ok); };
+ Fv fv = lambda2;
+ fv();
+ }
+}
+
+void tst_qxp_function_ref::ctad()
+{
+#define CHECK(fun, sig) \
+ do { \
+ qxp::function_ref f = fun; \
+ static_assert(std::is_same_v<decltype(f), \
+ qxp::function_ref<sig>>); \
+ qxp::function_ref f2 = &fun; \
+ static_assert(std::is_same_v<decltype(f2), \
+ qxp::function_ref<sig>>); \
+ static_assert(std::is_trivially_copyable_v<decltype(f)>); \
+ static_assert(std::is_trivially_copyable_v<decltype(f2)>); \
+ } while (false)
+
+ CHECK(i_f_i_nx, int (int) noexcept);
+ CHECK(v_f_i_nx, void(int) noexcept);
+ CHECK(i_f_v_nx, int ( ) noexcept);
+ CHECK(v_f_v_nx, void( ) noexcept);
+
+ CHECK(i_f_i_ex, int (int));
+ CHECK(v_f_i_ex, void(int));
+ CHECK(i_f_v_ex, int ( ));
+ CHECK(v_f_v_ex, void( ));
+
+#undef CHECK
+
+#if 0 // no deduction guides for the non-function-pointer case, so no CTAD for lambdas
+ {
+ auto lambda = [](int i) -> int { return i; };
+ qxp::function_ref f = lambda;
+ static_assert(std::is_same_v<decltype(f),
+ qxp::function_ref<int(int)>>);
+ }
+#endif
+}
+
+
+QTEST_APPLESS_MAIN(tst_qxp_function_ref);
+
+#include "tst_qxp_function_ref.moc"
diff --git a/tests/auto/corelib/global/qxp/is_virtual_base_of/CMakeLists.txt b/tests/auto/corelib/global/qxp/is_virtual_base_of/CMakeLists.txt
new file mode 100644
index 0000000000..85a6daab7c
--- /dev/null
+++ b/tests/auto/corelib/global/qxp/is_virtual_base_of/CMakeLists.txt
@@ -0,0 +1,23 @@
+# 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_qxp_is_virtual_base_of LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qxp_is_virtual_base_of
+ EXCEPTIONS
+ SOURCES
+ tst_is_virtual_base_of.cpp
+ LIBRARIES
+ Qt::Core
+)
+
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90449
+# GCCs < 10 have no way to suppress "inaccessible base" warnings, except by disabling all warnings:
+qt_internal_extend_target(tst_qxp_is_virtual_base_of
+ CONDITION GCC AND (CMAKE_CXX_COMPILER_VERSION VERSION_LESS "10")
+ COMPILE_OPTIONS -w
+)
diff --git a/tests/auto/corelib/global/qxp/is_virtual_base_of/tst_is_virtual_base_of.cpp b/tests/auto/corelib/global/qxp/is_virtual_base_of/tst_is_virtual_base_of.cpp
new file mode 100644
index 0000000000..e50575f5ec
--- /dev/null
+++ b/tests/auto/corelib/global/qxp/is_virtual_base_of/tst_is_virtual_base_of.cpp
@@ -0,0 +1,102 @@
+// Copyright (C) 2023 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/qxptype_traits.h>
+
+#include <QTest>
+
+class tst_qxp_is_virtual_base_of : public QObject
+{
+ Q_OBJECT
+};
+
+class Base {
+public:
+ virtual ~Base() {}
+};
+
+// Only works with classes
+static_assert(!qxp::is_virtual_base_of_v<int, int>);
+static_assert(!qxp::is_virtual_base_of_v<int, Base>);
+static_assert(!qxp::is_virtual_base_of_v<Base, int>);
+
+// A class isn't a virtual base of itself
+static_assert(!qxp::is_virtual_base_of_v<Base, Base>);
+
+// Non-virtual bases
+class NonVirtualDerived : public Base {};
+class NonVirtualPrivateDerived : private Base {};
+
+static_assert(!qxp::is_virtual_base_of_v<Base, NonVirtualDerived>);
+static_assert(!qxp::is_virtual_base_of_v<Base, NonVirtualPrivateDerived>);
+
+static_assert(!qxp::is_virtual_base_of_v<NonVirtualPrivateDerived, NonVirtualDerived>);
+static_assert(!qxp::is_virtual_base_of_v<NonVirtualDerived, NonVirtualPrivateDerived>);
+
+static_assert(!qxp::is_virtual_base_of_v<tst_qxp_is_virtual_base_of, QObject>);
+
+// Virtual bases
+class VirtualDerived1 : public virtual Base {};
+class VirtualDerived2 : public virtual Base {};
+class VirtualDerived3 : public VirtualDerived1, public VirtualDerived2 {};
+class VirtualDerived4 : public VirtualDerived3, public virtual Base {};
+class VirtualPrivateDerived : private virtual Base {};
+
+static_assert(qxp::is_virtual_base_of_v<Base, VirtualDerived1>);
+static_assert(qxp::is_virtual_base_of_v<Base, VirtualDerived2>);
+static_assert(qxp::is_virtual_base_of_v<Base, VirtualDerived3>);
+static_assert(!qxp::is_virtual_base_of_v<VirtualDerived1, VirtualDerived3>);
+static_assert(qxp::is_virtual_base_of_v<Base, VirtualDerived4>);
+static_assert(qxp::is_virtual_base_of_v<Base, VirtualPrivateDerived>);
+
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_GCC("-Winaccessible-base")
+QT_WARNING_DISABLE_CLANG("-Winaccessible-base")
+// Ambiguous non-virtual base
+class IntermediateDerived : public Base {};
+class AmbiguousBase1 : public IntermediateDerived, public Base {};
+class AmbiguousBase2 : public IntermediateDerived, public virtual Base {};
+
+static_assert(!qxp::is_virtual_base_of_v<Base, AmbiguousBase1>);
+#ifndef Q_CC_MSVC_ONLY // https://developercommunity.visualstudio.com/t/c-templates-multiple-inheritance-ambiguous-access/185674
+static_assert(!qxp::is_virtual_base_of_v<Base, AmbiguousBase2>);
+#endif
+QT_WARNING_POP
+
+// Const
+static_assert(!qxp::is_virtual_base_of_v< Base, const NonVirtualDerived>);
+static_assert(!qxp::is_virtual_base_of_v<const Base, NonVirtualDerived>);
+static_assert(!qxp::is_virtual_base_of_v<const Base, const NonVirtualDerived>);
+
+static_assert(!qxp::is_virtual_base_of_v< Base, const NonVirtualPrivateDerived>);
+static_assert(!qxp::is_virtual_base_of_v<const Base, NonVirtualPrivateDerived>);
+static_assert(!qxp::is_virtual_base_of_v<const Base, const NonVirtualPrivateDerived>);
+
+static_assert(qxp::is_virtual_base_of_v< Base, const VirtualDerived1>);
+static_assert(qxp::is_virtual_base_of_v<const Base, VirtualDerived1>);
+static_assert(qxp::is_virtual_base_of_v<const Base, const VirtualDerived1>);
+
+static_assert(qxp::is_virtual_base_of_v< Base, const VirtualDerived2>);
+static_assert(qxp::is_virtual_base_of_v<const Base, VirtualDerived2>);
+static_assert(qxp::is_virtual_base_of_v<const Base, const VirtualDerived2>);
+
+static_assert(qxp::is_virtual_base_of_v< Base, const VirtualDerived3>);
+static_assert(qxp::is_virtual_base_of_v<const Base, VirtualDerived3>);
+static_assert(qxp::is_virtual_base_of_v<const Base, const VirtualDerived3>);
+
+static_assert(qxp::is_virtual_base_of_v< Base, const VirtualDerived4>);
+static_assert(qxp::is_virtual_base_of_v<const Base, VirtualDerived4>);
+static_assert(qxp::is_virtual_base_of_v<const Base, const VirtualDerived4>);
+
+static_assert(qxp::is_virtual_base_of_v< Base, const VirtualDerived4>);
+static_assert(qxp::is_virtual_base_of_v<const Base, VirtualDerived4>);
+static_assert(qxp::is_virtual_base_of_v<const Base, const VirtualDerived4>);
+
+static_assert(qxp::is_virtual_base_of_v< Base, const VirtualPrivateDerived>);
+static_assert(qxp::is_virtual_base_of_v<const Base, VirtualPrivateDerived>);
+static_assert(qxp::is_virtual_base_of_v<const Base, const VirtualPrivateDerived>);
+
+
+QTEST_APPLESS_MAIN(tst_qxp_is_virtual_base_of);
+
+#include "tst_is_virtual_base_of.moc"
diff --git a/tests/auto/corelib/io/CMakeLists.txt b/tests/auto/corelib/io/CMakeLists.txt
index f4cfc16f06..7fdf4b52b0 100644
--- a/tests/auto/corelib/io/CMakeLists.txt
+++ b/tests/auto/corelib/io/CMakeLists.txt
@@ -1,4 +1,6 @@
-# Generated from io.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
# There is no mounted filesystem for IO testing on INTEGRITY yet.
if(INTEGRITY)
return()
@@ -14,6 +16,7 @@ endif()
add_subdirectory(qbuffer)
add_subdirectory(qdataurl)
add_subdirectory(qdiriterator)
+add_subdirectory(qdirlisting)
add_subdirectory(qfile)
add_subdirectory(largefile)
add_subdirectory(qfileselector)
@@ -40,10 +43,10 @@ if(NOT ANDROID)
add_subdirectory(qdir)
add_subdirectory(qresourceengine)
endif()
-if(QT_FEATURE_private_tests OR UNIX)
+if(QT_FEATURE_private_tests)
add_subdirectory(qfilesystementry)
endif()
-# QTBUG-88508 # special case
+# QTBUG-88508
if(QT_FEATURE_filesystemwatcher AND NOT ANDROID)
add_subdirectory(qfilesystemwatcher)
endif()
@@ -62,3 +65,6 @@ endif()
if(QT_FEATURE_settings AND TARGET Qt::Gui)
add_subdirectory(qsettings)
endif()
+if(QT_FEATURE_private_tests)
+ add_subdirectory(qzip)
+endif()
diff --git a/tests/auto/corelib/io/largefile/CMakeLists.txt b/tests/auto/corelib/io/largefile/CMakeLists.txt
index a82aa0c985..17b411ab33 100644
--- a/tests/auto/corelib/io/largefile/CMakeLists.txt
+++ b/tests/auto/corelib/io/largefile/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from largefile.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_largefile Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_largefile LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_largefile
SOURCES
tst_largefile.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::TestPrivate
)
diff --git a/tests/auto/corelib/io/largefile/tst_largefile.cpp b/tests/auto/corelib/io/largefile/tst_largefile.cpp
index 088f3e96f2..6fa3569c4f 100644
--- a/tests/auto/corelib/io/largefile/tst_largefile.cpp
+++ b/tests/auto/corelib/io/largefile/tst_largefile.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 <QTest>
@@ -62,9 +37,7 @@ public:
, fd_(-1)
, stream_(0)
{
- #if defined(QT_LARGEFILE_SUPPORT) && !defined(Q_OS_MAC) && !defined(Q_OS_QNX)
- maxSizeBits = 36; // 64 GiB
- #elif defined(Q_OS_MAC)
+ #if defined(Q_OS_DARWIN)
// HFS+ does not support sparse files, so we limit file size for the test
// on Mac OS.
maxSizeBits = 24; // 16 MiB
@@ -73,6 +46,10 @@ public:
// This means that files are limited to 2 GB − 1 bytes.
// Limit max size to 256MB
maxSizeBits = 28; // 256 MiB
+ #elif defined (Q_OS_WASM)
+ maxSizeBits = 28; // 256 MiB
+ #elif defined(QT_LARGEFILE_SUPPORT)
+ maxSizeBits = 36; // 64 GiB
#else
maxSizeBits = 24; // 16 MiB
#endif
@@ -516,19 +493,22 @@ void tst_LargeFile::mapFile()
//Linux: memory-mapping beyond EOF usually succeeds, but depends on the filesystem
// 32-bit: limited to 44-bit offsets (when sizeof(off_t) == 8)
//Windows: memory-mapping beyond EOF is not allowed
+//wasm: as for linux
void tst_LargeFile::mapOffsetOverflow()
{
enum {
-#ifdef Q_OS_WIN
+#if defined(Q_OS_WIN)
Succeeds = false,
MaxOffset = 63
-#else
+#elif defined(Q_OS_WASM)
Succeeds = true,
-# if (defined(Q_OS_LINUX) || defined(Q_OS_ANDROID)) && Q_PROCESSOR_WORDSIZE == 4
MaxOffset = sizeof(QT_OFF_T) > 4 ? 43 : 30
-# else
+#elif (defined(Q_OS_LINUX) || defined(Q_OS_ANDROID)) && (Q_PROCESSOR_WORDSIZE == 4)
+ Succeeds = true,
+ MaxOffset = sizeof(QT_OFF_T) > 4 ? 43 : 30
+#else
+ Succeeds = true,
MaxOffset = 8 * sizeof(QT_OFF_T) - 1
-# endif
#endif
};
diff --git a/tests/auto/corelib/io/qabstractfileengine/CMakeLists.txt b/tests/auto/corelib/io/qabstractfileengine/CMakeLists.txt
index 7e3b79403d..7e7ad98d73 100644
--- a/tests/auto/corelib/io/qabstractfileengine/CMakeLists.txt
+++ b/tests/auto/corelib/io/qabstractfileengine/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qabstractfileengine.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractfileengine Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractfileengine LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractfileengine
SOURCES
tst_qabstractfileengine.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp b/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp
index edb5ec05a5..a2747f55a7 100644
--- a/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp
+++ b/tests/auto/corelib/io/qabstractfileengine/tst_qabstractfileengine.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the FOO 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 <QtCore/private/qabstractfileengine_p.h>
#include <QtCore/private/qfsfileengine_p.h>
@@ -42,6 +17,8 @@
#include <QtCore/QDebug>
#include "../../../../shared/filesystem.h"
+using namespace Qt::StringLiterals;
+
class tst_QAbstractFileEngine
: public QObject
{
@@ -240,6 +217,8 @@ public:
return QLatin1String("AbsolutePathName");
case AbsoluteLinkTarget:
return QLatin1String("AbsoluteLinkTarget");
+ case RawLinkPath:
+ return QLatin1String("RawLinkPath");
case CanonicalName:
return QLatin1String("CanonicalName");
case CanonicalPathName:
@@ -308,19 +287,19 @@ public:
return QString();
}
- QDateTime fileTime(FileTime time) const override
+ QDateTime fileTime(QFile::FileTime time) const override
{
QSharedPointer<File> file = resolveFile(false);
if (file) {
QMutexLocker lock(&file->mutex);
switch (time) {
- case BirthTime:
+ case QFile::FileBirthTime:
return file->birth;
- case MetadataChangeTime:
+ case QFile::FileMetadataChangeTime:
return file->change;
- case ModificationTime:
+ case QFile::FileModificationTime:
return file->modification;
- case AccessTime:
+ case QFile::FileAccessTime:
return file->access;
}
}
@@ -453,8 +432,8 @@ public:
class Iterator : public QAbstractFileEngineIterator
{
public:
- Iterator(QDir::Filters filters, const QStringList &filterNames)
- : QAbstractFileEngineIterator(filters, filterNames)
+ Iterator(const QString &path, QDir::Filters filters, const QStringList &filterNames)
+ : QAbstractFileEngineIterator(path, filters, filterNames)
{
names.append("foo");
names.append("bar");
@@ -462,18 +441,19 @@ public:
}
QString currentFileName() const override
{
- return names.at(index);
- }
- bool hasNext() const override
- {
- return index < names.size() - 1;
+ if (!names.isEmpty() && index < names.size())
+ return names.at(index);
+ return {};
}
- QString next() override
+ bool advance() override
{
- if (!hasNext())
- return QString();
- ++index;
- return currentFilePath();
+ if (names.isEmpty())
+ return false;
+ if (index < names.size() - 1) {
+ ++index;
+ return true;
+ }
+ return false;
}
QStringList names;
int index;
@@ -482,9 +462,11 @@ public:
: QFSFileEngine(fileName)
{
}
- Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) override
+
+ IteratorUniquePtr
+ beginEntryList(const QString &path, QDir::Filters filters, const QStringList &filterNames) override
{
- return new Iterator(filters, filterNames);
+ return std::make_unique<Iterator>(path, filters, filterNames);
}
FileFlags fileFlags(FileFlags type) const override
{
@@ -508,18 +490,27 @@ QHash<QString, QSharedPointer<ReferenceFileEngine::File> > ReferenceFileEngine::
class FileEngineHandler
: QAbstractFileEngineHandler
{
- QAbstractFileEngine *create(const QString &fileName) const override
+ Q_DISABLE_COPY_MOVE(FileEngineHandler)
+ std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override
{
if (fileName.endsWith(".tar") || fileName.contains(".tar/"))
- return new MountingFileEngine(fileName);
- if (fileName.startsWith("QFSFileEngine:"))
- return new QFSFileEngine(fileName.mid(14));
- if (fileName.startsWith("reference-file-engine:"))
- return new ReferenceFileEngine(fileName.mid(22));
- if (fileName.startsWith("resource:"))
- return QAbstractFileEngine::create(QLatin1String(":/tst_qabstractfileengine/resources/") + fileName.mid(9));
- return 0;
+ return std::make_unique<MountingFileEngine>(fileName);
+
+ if (auto l1 = "QFSFileEngine:"_L1; fileName.startsWith(l1))
+ return std::make_unique<QFSFileEngine>(fileName.sliced(l1.size()));
+
+ if (auto l1 = "reference-file-engine:"_L1; fileName.startsWith(l1))
+ return std::make_unique<ReferenceFileEngine>(fileName.sliced(l1.size()));
+
+ if (auto l1 = "resource:"_L1; fileName.startsWith(l1)) {
+ const auto p = ":/tst_qabstractfileengine/resources/"_L1 + fileName.sliced(l1.size());
+ return QAbstractFileEngine::create(p);
+ }
+
+ return nullptr;
}
+public:
+ FileEngineHandler() = default;
};
void tst_QAbstractFileEngine::initTestCase()
@@ -535,12 +526,13 @@ void tst_QAbstractFileEngine::cleanupTestCase()
bool failed = false;
FileEngineHandler handler;
- Q_FOREACH(QString file, filesForRemoval)
+ for (const QString &file : std::as_const(filesForRemoval)) {
if (!QFile::remove(file)
|| QFile::exists(file)) {
failed = true;
qDebug() << "Couldn't remove file:" << file;
}
+ }
QVERIFY(!failed);
@@ -549,9 +541,9 @@ void tst_QAbstractFileEngine::cleanupTestCase()
void tst_QAbstractFileEngine::customHandler()
{
- QScopedPointer<QAbstractFileEngine> file;
+ std::unique_ptr<QAbstractFileEngine> file;
{
- file.reset(QAbstractFileEngine::create("resource:file.txt"));
+ file = QAbstractFileEngine::create(u"resource:file.txt"_s);
QVERIFY(file);
}
@@ -846,7 +838,8 @@ void tst_QAbstractFileEngine::mounting()
QCOMPARE(dir.entryList(), (QStringList() << "bar" << "foo"));
QDir dir2(fs.path());
bool found = false;
- foreach (QFileInfo info, dir2.entryInfoList()) {
+ const auto entries = dir2.entryInfoList();
+ for (const QFileInfo &info : entries) {
if (info.fileName() == QLatin1String("test.tar")) {
QVERIFY(!found);
found = true;
diff --git a/tests/auto/corelib/io/qbuffer/CMakeLists.txt b/tests/auto/corelib/io/qbuffer/CMakeLists.txt
index 7d57d78b3f..87022451a0 100644
--- a/tests/auto/corelib/io/qbuffer/CMakeLists.txt
+++ b/tests/auto/corelib/io/qbuffer/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qbuffer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qbuffer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qbuffer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qbuffer
SOURCES
tst_qbuffer.cpp
diff --git a/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp b/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp
index 7a68da8192..acfd60e224 100644
--- a/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp
+++ b/tests/auto/corelib/io/qbuffer/tst_qbuffer.cpp
@@ -1,48 +1,28 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QTestEventLoop>
#include <QBuffer>
#include <QByteArray>
+#include <QElapsedTimer>
+
+#include <string>
class tst_QBuffer : public QObject
{
Q_OBJECT
private slots:
void open();
+ void openWriteOnlyDoesNotTruncate();
void getSetCheck();
void readBlock();
void readBlockPastEnd();
void writeBlock_data();
void writeBlock();
void seek();
+ void invalidSeeks();
void seekTest_data();
void seekTest();
void read_rawdata();
@@ -58,6 +38,7 @@ private slots:
void readLineBoundaries();
void getAndUngetChar();
void writeAfterQByteArrayResize();
+ void writeOfMoreThan2GiB();
void read_null();
protected slots:
@@ -131,6 +112,29 @@ void tst_QBuffer::open()
b.close();
}
+void tst_QBuffer::openWriteOnlyDoesNotTruncate()
+{
+ QBuffer b;
+ const auto data = QByteArrayLiteral("Hey, presto!");
+
+ {
+ QVERIFY(b.open(QIODevice::WriteOnly));
+ b.write(data);
+ b.close();
+ }
+ {
+ QVERIFY(b.open(QIODevice::ReadOnly));
+ QCOMPARE(b.readAll(), data);
+ b.close();
+ }
+ {
+ QVERIFY(b.open(QIODevice::WriteOnly));
+ QCOMPARE(b.size(), data.size());
+ QCOMPARE(b.pos(), 0);
+ b.close();
+ }
+}
+
// some status() tests, too
void tst_QBuffer::readBlock()
{
@@ -287,6 +291,29 @@ void tst_QBuffer::seek()
QCOMPARE(buffer.size(), pos);
}
+void tst_QBuffer::invalidSeeks()
+{
+ if constexpr (sizeof(qsizetype) == sizeof(qint64)) {
+ // sizeof(qsizetype) == sizeof(qint64), so +1 would overflow
+ QSKIP("This is a 32-bit-only test.");
+ } else {
+ QBuffer buffer;
+ buffer.open(QIODevice::WriteOnly);
+ QCOMPARE(buffer.buffer().size(), qsizetype(0));
+ QCOMPARE(buffer.pos(), qint64(0));
+ constexpr qint64 MaxQByteArrayCapacity = (std::numeric_limits<qsizetype>::max)();
+ // this should fail fast, not after trying to allocate nearly 2 GiB of data,
+ // potentially crashing in the process:
+ QVERIFY(!buffer.seek(2 * MaxQByteArrayCapacity - 1));
+ QCOMPARE(buffer.buffer().size(), qsizetype(0));
+ QCOMPARE(buffer.pos(), qint64(0));
+ // ditto:
+ QVERIFY(!buffer.seek(MaxQByteArrayCapacity + 1));
+ QCOMPARE(buffer.buffer().size(), qsizetype(0));
+ QCOMPARE(buffer.pos(), qint64(0));
+ }
+}
+
void tst_QBuffer::seekTest_data()
{
writeBlock_data();
@@ -599,6 +626,55 @@ void tst_QBuffer::writeAfterQByteArrayResize()
QCOMPARE(buffer.buffer().size(), 1000);
}
+void tst_QBuffer::writeOfMoreThan2GiB()
+{
+ if constexpr (sizeof(void*) == 4)
+ QSKIP("This is a 64-bit-only test");
+
+ [[maybe_unused]] constexpr size_t GiB = 1024 * 1024 * 1024;
+
+#ifndef QT_NO_EXCEPTIONS
+
+ try {
+ //
+ // GIVEN: an empty QBuffer open for writing
+ //
+ QBuffer buffer;
+ QVERIFY(buffer.open(QIODevice::WriteOnly));
+
+ //
+ // WHEN: writing more than 2GiB in a singe chunk:
+ //
+ QElapsedTimer timer;
+ timer.start();
+
+ const std::string input(2 * GiB + 1, 42);
+
+ qDebug("created dataset in %lld ms", timer.restart());
+
+ const auto inputSize = qint64(input.size());
+
+ QCOMPARE(buffer.write(input.data(), inputSize), inputSize);
+
+ qDebug("performed write in %lld ms", timer.restart());
+
+ //
+ // THEN: the buffer contains the written data
+ //
+ QCOMPARE(buffer.buffer().size(), inputSize);
+ QVERIFY(buffer.buffer() == QByteArrayView{input});
+
+ qDebug("verified result in %lld ms", timer.elapsed());
+
+ } catch (const std::bad_alloc &) {
+ QSKIP("Cannot allocate enough memory for this test");
+ }
+
+#else
+ QSKIP("This test requires exceptions enabled.");
+#endif // QT_NO_EXCEPTIONS
+}
+
void tst_QBuffer::read_null()
{
QByteArray buffer;
diff --git a/tests/auto/corelib/io/qdataurl/CMakeLists.txt b/tests/auto/corelib/io/qdataurl/CMakeLists.txt
index b13a235d3b..4157db90d8 100644
--- a/tests/auto/corelib/io/qdataurl/CMakeLists.txt
+++ b/tests/auto/corelib/io/qdataurl/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdataurl.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdataurl Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdataurl LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdataurl
SOURCES
tst_qdataurl.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp
index 9be0463b99..e694a79101 100644
--- a/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp
+++ b/tests/auto/corelib/io/qdataurl/tst_qdataurl.cpp
@@ -1,77 +1,58 @@
-/****************************************************************************
-**
-** 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 "private/qdataurl_p.h"
#include <QTest>
#include <QtCore/QDebug>
+using namespace Qt::Literals;
+
class tst_QDataUrl : public QObject
{
Q_OBJECT
private slots:
- void nonData();
- void emptyData();
- void alreadyPercentageEncoded();
+ void decode_data();
+ void decode();
};
-void tst_QDataUrl::nonData()
+void tst_QDataUrl::decode_data()
{
- QLatin1String data("http://test.com");
- QUrl url(data);
- QString mimeType;
- QByteArray payload;
- bool result = qDecodeDataUrl(url, mimeType, payload);
- QVERIFY(!result);
-}
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<bool>("result");
+ QTest::addColumn<QString>("mimeType");
+ QTest::addColumn<QByteArray>("payload");
-void tst_QDataUrl::emptyData()
-{
- QLatin1String data("data:text/plain");
- QUrl url(data);
- QString mimeType;
- QByteArray payload;
- bool result = qDecodeDataUrl(url, mimeType, payload);
- QVERIFY(result);
- QCOMPARE(mimeType, QLatin1String("text/plain;charset=US-ASCII"));
- QVERIFY(payload.isNull());
+ auto row = [](const char *tag, const char *url, bool success, QString mimeType = {}, QByteArray payload = {}) {
+ QTest::newRow(tag) << url << success <<mimeType << payload;
+ };
+
+ row("nonData", "http://test.com", false);
+ row("emptyData", "data:text/plain", true,
+ "text/plain;charset=US-ASCII"_L1);
+ row("alreadyPercentageEncoded", "data:text/plain,%E2%88%9A", true,
+ "text/plain"_L1, QByteArray::fromPercentEncoding("%E2%88%9A"));
+ row("everythingIsCaseInsensitive", "Data:texT/PlaiN;charSet=iSo-8859-1;Base64,SGVsbG8=", true,
+ "texT/PlaiN;charSet=iSo-8859-1"_L1, QByteArrayLiteral("Hello"));
}
-void tst_QDataUrl::alreadyPercentageEncoded()
+void tst_QDataUrl::decode()
{
- QLatin1String data("data:text/plain,%E2%88%9A");
- QUrl url(data);
- QString mimeType;
- QByteArray payload;
- bool result = qDecodeDataUrl(url, mimeType, payload);
- QVERIFY(result);
- QCOMPARE(mimeType, QLatin1String("text/plain"));
- QCOMPARE(payload, QByteArray::fromPercentEncoding("%E2%88%9A"));
+ QFETCH(const QString, input);
+ QFETCH(const bool, result);
+ QFETCH(const QString, mimeType);
+ QFETCH(const QByteArray, payload);
+
+ QString actualMimeType;
+ QByteArray actualPayload;
+
+ QUrl url(input);
+ const bool actualResult = qDecodeDataUrl(url, actualMimeType, actualPayload);
+
+ QCOMPARE(actualResult, result);
+ QCOMPARE(actualMimeType, mimeType);
+ QCOMPARE(actualPayload, payload);
+ QCOMPARE(actualPayload.isNull(), payload.isNull()); // assume nullness is significant
}
QTEST_MAIN(tst_QDataUrl)
diff --git a/tests/auto/corelib/io/qdebug/CMakeLists.txt b/tests/auto/corelib/io/qdebug/CMakeLists.txt
index 39b92b9d2f..89d39c4375 100644
--- a/tests/auto/corelib/io/qdebug/CMakeLists.txt
+++ b/tests/auto/corelib/io/qdebug/CMakeLists.txt
@@ -1,12 +1,24 @@
-# Generated from qdebug.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdebug Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdebug LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdebug
SOURCES
tst_qdebug.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
)
+
+if (APPLE)
+ enable_language(OBJCXX)
+ set_source_files_properties(tst_qdebug.cpp PROPERTIES LANGUAGE OBJCXX)
+endif()
diff --git a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
index 9b9696d7c1..15da0758d0 100644
--- a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
+++ b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
@@ -39,8 +14,23 @@
#include <QLine>
#include <QMimeType>
#include <QMimeDatabase>
+#include <QMetaType>
+
+#include <q20chrono.h>
+
+#ifdef __cpp_lib_memory_resource
+# include <memory_resource>
+namespace pmr = std::pmr;
+#else
+namespace pmr = std;
+#endif
+
+using namespace std::chrono;
+using namespace q20::chrono;
+using namespace Qt::StringLiterals;
static_assert(QTypeTraits::has_ostream_operator_v<QDebug, int>);
+static_assert(QTypeTraits::has_ostream_operator_v<QDebug, QMetaType>);
static_assert(QTypeTraits::has_ostream_operator_v<QDebug, QList<int>>);
static_assert(QTypeTraits::has_ostream_operator_v<QDebug, QMap<int, QString>>);
struct NonStreamable {};
@@ -52,6 +42,10 @@ struct ConvertsToQVariant {
};
static_assert(!QTypeTraits::has_ostream_operator_v<QDebug, ConvertsToQVariant>);
+#if defined(Q_OS_DARWIN)
+#include <objc/runtime.h>
+#include <Foundation/Foundation.h>
+#endif
class tst_QDebug: public QObject
{
@@ -75,19 +69,39 @@ private slots:
void stateSaver() const;
void veryLongWarningMessage() const;
void qDebugQChar() const;
+ void qDebugQMetaType() const;
void qDebugQString() const;
void qDebugQStringView() const;
void qDebugQUtf8StringView() const;
void qDebugQLatin1String() const;
+ void qDebugStdString() const;
+ void qDebugStdStringView() const;
+ void qDebugStdWString() const;
+ void qDebugStdWStringView() const;
+ void qDebugStdU8String() const;
+ void qDebugStdU8StringView() const;
+ void qDebugStdU16String() const;
+ void qDebugStdU16StringView() const;
+ void qDebugStdU32String() const;
+ void qDebugStdU32StringView() const;
void qDebugQByteArray() const;
void qDebugQByteArrayView() const;
void qDebugQFlags() const;
+ void qDebugStdChrono_data() const;
+ void qDebugStdChrono() const;
+ void qDebugStdOptional() const;
void textStreamModifiers() const;
void resetFormat() const;
void defaultMessagehandler() const;
void threadSafety() const;
void toString() const;
void noQVariantEndlessRecursion() const;
+#if defined(Q_OS_DARWIN)
+ void objcInCppMode_data() const;
+ void objcInCppMode() const;
+ void objcInObjcMode_data() const;
+ void objcInObjcMode() const;
+#endif
};
void tst_QDebug::assignment() const
@@ -305,11 +319,17 @@ void tst_QDebug::debugNoQuotes() const
MessageHandlerSetter mhs(myMessageHandler);
{
QDebug d = qDebug();
+ QVERIFY(d.quoteStrings());
d << QStringLiteral("Hello");
+ QVERIFY(d.quoteStrings());
d.noquote();
+ QVERIFY(!d.quoteStrings());
d << QStringLiteral("Hello");
+ QVERIFY(!d.quoteStrings());
d.quote();
+ QVERIFY(d.quoteStrings());
d << QStringLiteral("Hello");
+ QVERIFY(d.quoteStrings());
}
QCOMPARE(s_msg, QString::fromLatin1("\"Hello\" Hello \"Hello\""));
@@ -318,7 +338,7 @@ void tst_QDebug::debugNoQuotes() const
d << QChar('H');
d << QLatin1String("Hello");
d << QByteArray("Hello");
- d.noquote();
+ d.setQuoteStrings(false);
d << QChar('H');
d << QLatin1String("Hello");
d << QByteArray("Hello");
@@ -443,6 +463,25 @@ void tst_QDebug::qDebugQChar() const
}
+void tst_QDebug::qDebugQMetaType() const
+{
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ QDebug d = qDebug();
+ d << QMetaType::fromType<int>() << QMetaType::fromType<QString>();
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 4; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, R"(QMetaType(int) QMetaType(QString))"_L1);
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+}
+
void tst_QDebug::qDebugQString() const
{
/* Use a basic string. */
@@ -639,6 +678,324 @@ void tst_QDebug::qDebugQLatin1String() const
QCOMPARE(s_msg, QString("\"\\nSm\\u00F8rg\\u00E5sbord\\\\\""));
}
+void tst_QDebug::qDebugStdString() const
+{
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ QDebug d = qDebug();
+ d << pmr::string("foo") << std::string("") << std::string("barbaz", 3);
+ d.nospace().noquote() << std::string("baz");
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz"));
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+
+ /* simpler tests from now on */
+ std::string string("\"Hello\"");
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\""));
+
+ qDebug().noquote().nospace() << string;
+ QCOMPARE(s_msg, QString::fromStdString(string));
+
+ qDebug().noquote().nospace() << qSetFieldWidth(8) << string;
+ QCOMPARE(s_msg, " " + QString::fromStdString(string));
+}
+
+void tst_QDebug::qDebugStdStringView() const
+{
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ QDebug d = qDebug();
+ d << std::string_view("foo") << std::string_view("") << std::string_view("barbaz", 3);
+ d.nospace().noquote() << std::string_view("baz");
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz"));
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+
+ /* simpler tests from now on */
+ std::string_view string("\"Hello\"");
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\""));
+
+ qDebug().noquote().nospace() << string;
+ QCOMPARE(s_msg, QString::fromStdString(std::string(string)));
+
+ qDebug().noquote().nospace() << qSetFieldWidth(8) << string;
+ QCOMPARE(s_msg, " " + QString::fromStdString(std::string(string)));
+}
+
+void tst_QDebug::qDebugStdWString() const
+{
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ QDebug d = qDebug();
+ d << pmr::wstring(L"foo") << std::wstring(L"") << std::wstring(L"barbaz", 3);
+ d.nospace().noquote() << std::wstring(L"baz");
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz"));
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+
+ /* simpler tests from now on */
+ std::wstring string(L"\"Hello\"");
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\""));
+
+ qDebug().noquote().nospace() << string;
+ QCOMPARE(s_msg, QString::fromStdWString(string));
+
+ qDebug().noquote().nospace() << qSetFieldWidth(8) << string;
+ QCOMPARE(s_msg, " " + QString::fromStdWString(string));
+}
+
+void tst_QDebug::qDebugStdWStringView() const
+{
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ QDebug d = qDebug();
+ d << std::wstring_view(L"foo") << std::wstring_view(L"") << std::wstring_view(L"barbaz", 3);
+ d.nospace().noquote() << std::wstring_view(L"baz");
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz"));
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+
+ /* simpler tests from now on */
+ std::wstring_view string(L"\"Hello\"");
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\""));
+
+ qDebug().noquote().nospace() << string;
+ QCOMPARE(s_msg, QString::fromStdWString(std::wstring(string)));
+
+ qDebug().noquote().nospace() << qSetFieldWidth(8) << string;
+ QCOMPARE(s_msg, " " + QString::fromStdWString(std::wstring(string)));
+}
+
+void tst_QDebug::qDebugStdU8String() const
+{
+#ifndef __cpp_lib_char8_t
+ QSKIP("This test requires C++20 char8_t support enabled in the compiler.");
+#else
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ QDebug d = qDebug();
+ d << pmr::u8string(u8"foo") << std::u8string(u8"") << std::u8string(u8"barbaz", 3);
+ d.nospace().noquote() << std::u8string(u8"baz");
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz"));
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+
+ /* simpler tests from now on */
+ std::u8string string(u8"\"Hello\"");
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\""));
+
+ qDebug().noquote().nospace() << string;
+ QCOMPARE(s_msg, QUtf8StringView(string).toString());
+
+ qDebug().noquote().nospace() << qSetFieldWidth(8) << string;
+ QCOMPARE(s_msg, " " + QUtf8StringView(string).toString());
+#endif // __cpp_lib_char8_t
+}
+
+void tst_QDebug::qDebugStdU8StringView() const
+{
+#ifndef __cpp_lib_char8_t
+ QSKIP("This test requires C++20 char8_t support enabled in the compiler.");
+#else
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ QDebug d = qDebug();
+ d << std::u16string_view(u"foo") << std::u16string_view(u"") << std::u16string_view(u"barbaz", 3);
+ d.nospace().noquote() << std::u16string_view(u"baz");
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz"));
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+
+ /* simpler tests from now on */
+ std::u16string_view string(u"\"Hello\"");
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\""));
+
+ qDebug().noquote().nospace() << string;
+ QCOMPARE(s_msg, QString::fromStdU16String(std::u16string(string)));
+
+ qDebug().noquote().nospace() << qSetFieldWidth(8) << string;
+ QCOMPARE(s_msg, " " + QString::fromStdU16String(std::u16string(string)));
+#endif // __cpp_lib_char8_t
+}
+
+void tst_QDebug::qDebugStdU16String() const
+{
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ QDebug d = qDebug();
+ d << pmr::u16string(u"foo") << std::u16string(u"") << std::u16string(u"barbaz", 3);
+ d.nospace().noquote() << std::u16string(u"baz");
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz"));
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+
+ /* simpler tests from now on */
+ std::u16string string(u"\"Hello\"");
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\""));
+
+ qDebug().noquote().nospace() << string;
+ QCOMPARE(s_msg, QString::fromStdU16String(string));
+
+ qDebug().noquote().nospace() << qSetFieldWidth(8) << string;
+ QCOMPARE(s_msg, " " + QString::fromStdU16String(string));
+}
+
+void tst_QDebug::qDebugStdU16StringView() const
+{
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ QDebug d = qDebug();
+ d << std::u16string_view(u"foo") << std::u16string_view(u"") << std::u16string_view(u"barbaz", 3);
+ d.nospace().noquote() << std::u16string_view(u"baz");
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz"));
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+
+ /* simpler tests from now on */
+ std::u16string_view string(u"\"Hello\"");
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\""));
+
+ qDebug().noquote().nospace() << string;
+ QCOMPARE(s_msg, QString::fromStdU16String(std::u16string(string)));
+
+ qDebug().noquote().nospace() << qSetFieldWidth(8) << string;
+ QCOMPARE(s_msg, " " + QString::fromStdU16String(std::u16string(string)));
+}
+
+void tst_QDebug::qDebugStdU32String() const
+{
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ QDebug d = qDebug();
+ d << pmr::u32string(U"foo") << std::u32string(U"") << std::u32string(U"barbaz", 3);
+ d.nospace().noquote() << std::u32string(U"baz");
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz"));
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+
+ /* simpler tests from now on */
+ std::u32string string(U"\"Hello\"");
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\""));
+
+ qDebug().noquote().nospace() << string;
+ QCOMPARE(s_msg, QString::fromStdU32String(string));
+
+ qDebug().noquote().nospace() << qSetFieldWidth(8) << string;
+ QCOMPARE(s_msg, " " + QString::fromStdU32String(string));
+}
+
+void tst_QDebug::qDebugStdU32StringView() const
+{
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ QDebug d = qDebug();
+ d << std::u32string_view(U"foo") << std::u32string_view(U"") << std::u32string_view(U"barbaz", 3);
+ d.nospace().noquote() << std::u32string_view(U"baz");
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 5; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromLatin1("\"foo\" \"\" \"bar\" baz"));
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+
+ /* simpler tests from now on */
+ std::u32string_view string(U"\"Hello\"");
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\\"Hello\\\"\""));
+
+ qDebug().noquote().nospace() << string;
+ QCOMPARE(s_msg, QString::fromStdU32String(std::u32string(string)));
+
+ qDebug().noquote().nospace() << qSetFieldWidth(8) << string;
+ QCOMPARE(s_msg, " " + QString::fromStdU32String(std::u32string(string)));
+}
+
void tst_QDebug::qDebugQByteArray() const
{
QString file, function;
@@ -758,6 +1115,129 @@ void tst_QDebug::qDebugQFlags() const
QCOMPARE(s_msg, QString::fromLatin1("QFlags<tst_QDebug::FlagType>(EnumFlag1)"));
}
+using ToStringFunction = std::function<QString()>;
+void tst_QDebug::qDebugStdChrono_data() const
+{
+ using attoseconds = duration<int64_t, std::atto>;
+ using femtoseconds = duration<int64_t, std::femto>;
+ using picoseconds = duration<int64_t, std::pico>;
+ using centiseconds = duration<int64_t, std::centi>;
+ using deciseconds = duration<int64_t, std::deci>;
+
+ using quadriennia = duration<int, std::ratio_multiply<std::ratio<4>, years::period>>;
+ using decades = duration<int, std::ratio_multiply<years::period, std::deca>>; // decayears
+ using centuries = duration<int16_t, std::ratio_multiply<years::period, std::hecto>>; // hectoyears
+ using millennia = duration<int16_t, std::ratio_multiply<years::period, std::kilo>>; // kiloyears
+ using gigayears = duration<int8_t, std::ratio_multiply<years::period, std::giga>>;
+ using fortnights = duration<int, std::ratio_multiply<days::period, std::ratio<14>>>;
+ using microfortnights = duration<int64_t, std::ratio_multiply<fortnights::period, std::micro>>;
+ using telecom = duration<int64_t, std::ratio<1, 8000>>; // 8 kHz
+
+ using kiloseconds = duration<int64_t, std::kilo>;
+ using exaseconds = duration<int8_t, std::exa>;
+ using meter_per_light = duration<int64_t, std::ratio<1, 299'792'458>>;
+ using kilometer_per_light = duration<int64_t, std::ratio<1000, 299'792'458>>;
+
+ QTest::addColumn<ToStringFunction>("fn");
+ QTest::addColumn<QString>("expected");
+
+ auto addRow = [](const char *name, auto duration, const char *expected) {
+ auto toString = [duration]() { return QDebug::toString(duration); };
+ QTest::newRow(name) << ToStringFunction(toString) << expected;
+ };
+
+ addRow("1as", attoseconds{1}, "1as");
+ addRow("1fs", femtoseconds{1}, "1fs");
+ addRow("1ps", picoseconds{1}, "1ps");
+ addRow("0ns", 0ns, "0ns");
+ addRow("1000ns", 1000ns, "1000ns");
+ addRow("0us", 0us, "0us");
+ addRow("0ms", 0ms, "0ms");
+ addRow("1cs", centiseconds{1}, "1cs");
+ addRow("2ds", deciseconds{2}, "2ds");
+ addRow("-1s", -1s, "-1s");
+ addRow("0s", 0s, "0s");
+ addRow("1s", 1s, "1s");
+ addRow("60s", 60s, "60s");
+ addRow("1min", 1min, "1min");
+ addRow("1h", 1h, "1h");
+ addRow("1days", days{1}, "1d");
+ addRow("365days", days{365}, "365d");
+ addRow("1weeks", weeks{1}, "1wk");
+ addRow("1years", years{1}, "1yr"); // 365.2425 days
+ addRow("42years", years{42}, "42yr");
+
+ addRow("1ks", kiloseconds{1}, "1[1000]s");
+ addRow("2fortnights", fortnights{2}, "2[2]wk");
+ addRow("1quadriennia", quadriennia{1}, "1[4]yr");
+ addRow("1decades", decades{1}, "1[10]yr");
+ addRow("1centuries", centuries{1}, "1[100]yr");
+ addRow("1millennia", millennia{1}, "1[1000]yr");
+#if defined(Q_OS_LINUX) || defined(Q_OS_DARWIN)
+ // some OSes print the exponent differently
+ addRow("1Es", exaseconds{1}, "1[1e+18]s");
+ addRow("13gigayears", gigayears{13}, "13[1e+09]yr");
+#endif
+
+ // months are one twelfth of a Gregorian year, not 30 days
+ addRow("1months", months{1}, "1[2629746]s");
+
+ // weird units
+ addRow("2microfortnights", microfortnights{2}, "2[756/625]s");
+ addRow("1telecom", telecom{1}, "1[1/8000]s");
+ addRow("10m/c", meter_per_light{10}, "10[1/299792458]s");
+ addRow("10km/c", kilometer_per_light{10}, "10[500/149896229]s");
+
+ // real floting point
+ using fpsec = duration<double>;
+ using fpmsec = duration<double, std::milli>;
+ using fpnsec = duration<double, std::nano>;
+ addRow("1.0s", fpsec{1}, "1s");
+ addRow("1.5s", fpsec{1.5}, "1.5s");
+ addRow("1.0ms", fpmsec{1}, "1ms");
+ addRow("1.5ms", fpmsec{1.5}, "1.5ms");
+ addRow("1.0ns", fpnsec{1}, "1ns");
+ addRow("1.5ns", fpnsec{1.5}, "1.5ns");
+
+ // and some precision setting too
+ QTest::newRow("1.00000ns")
+ << ToStringFunction([]() {
+ QString buffer;
+ QDebug d(&buffer);
+ d.nospace() << qSetRealNumberPrecision(5) << Qt::fixed << fpnsec{1};
+ return buffer;
+ }) << "1.00000ns";
+}
+
+void tst_QDebug::qDebugStdChrono() const
+{
+ QFETCH(ToStringFunction, fn);
+ QFETCH(QString, expected);
+ QCOMPARE(fn(), expected);
+}
+
+void tst_QDebug::qDebugStdOptional() const
+{
+ QString file, function;
+ int line = 0;
+ MessageHandlerSetter mhs(myMessageHandler);
+ {
+ std::optional<QByteArray> notSet = std::nullopt;
+ std::optional<QByteArray> set("foo");
+ auto no = std::nullopt;
+ QDebug d = qDebug();
+ d << notSet << set << no;
+ }
+#ifndef QT_NO_MESSAGELOGCONTEXT
+ file = __FILE__; line = __LINE__ - 4; function = Q_FUNC_INFO;
+#endif
+ QCOMPARE(s_msgType, QtDebugMsg);
+ QCOMPARE(s_msg, QString::fromLatin1("nullopt std::optional(\"foo\") nullopt"));
+ QCOMPARE(QString::fromLatin1(s_file), file);
+ QCOMPARE(s_line, line);
+ QCOMPARE(QString::fromLatin1(s_function), function);
+}
+
void tst_QDebug::textStreamModifiers() const
{
QString file, function;
@@ -837,7 +1317,7 @@ void tst_QDebug::threadSafety() const
s_sema.release(numThreads);
sync.waitForFinished();
QMutexLocker lock(&s_mutex);
- QCOMPARE(s_messages.count(), numThreads);
+ QCOMPARE(s_messages.size(), numThreads);
for (int i = 0; i < numThreads; ++i) {
QCOMPARE(s_messages.at(i), QStringLiteral("doDebug"));
}
@@ -873,6 +1353,69 @@ void tst_QDebug::noQVariantEndlessRecursion() const
qDebug() << var;
}
+#if defined(Q_OS_DARWIN)
+
+@interface MyObjcClass : NSObject
+@end
+
+@implementation MyObjcClass : NSObject
+- (NSString *)description
+{
+ return @"MyObjcClass is the best";
+}
+@end
+
+void tst_QDebug::objcInCppMode_data() const
+{
+ QTest::addColumn<objc_object *>("object");
+ QTest::addColumn<QString>("message");
+
+ QTest::newRow("nil") << static_cast<objc_object*>(nullptr) << QString::fromLatin1("(null)");
+
+ // Not an NSObject subclass
+ auto *nsproxy = reinterpret_cast<objc_object *>(class_createInstance(objc_getClass("NSProxy"), 0));
+ QTest::newRow("NSProxy") << nsproxy << QString::fromLatin1("<NSProxy: 0x%1>").arg(uintptr_t(nsproxy), 1, 16);
+
+ // Plain NSObject
+ auto *nsobject = reinterpret_cast<objc_object *>(class_createInstance(objc_getClass("NSObject"), 0));
+ QTest::newRow("NSObject") << nsobject << QString::fromLatin1("<NSObject: 0x%1>").arg(uintptr_t(nsobject), 1, 16);
+
+ auto str = QString::fromLatin1("foo");
+ QTest::newRow("NSString") << reinterpret_cast<objc_object*>(str.toNSString()) << str;
+
+ // Custom debug description
+ QTest::newRow("MyObjcClass") << reinterpret_cast<objc_object*>([[MyObjcClass alloc] init])
+ << QString::fromLatin1("MyObjcClass is the best");
+}
+
+void tst_QDebug::objcInCppMode() const
+{
+ QFETCH(objc_object *, object);
+ QFETCH(QString, message);
+
+ MessageHandlerSetter mhs(myMessageHandler);
+ { qDebug() << object; }
+
+ QCOMPARE(s_msg, message);
+}
+
+void tst_QDebug::objcInObjcMode_data() const
+{
+ objcInCppMode_data();
+}
+
+void tst_QDebug::objcInObjcMode() const
+{
+ QFETCH(objc_object *, object);
+ QFETCH(QString, message);
+
+ MessageHandlerSetter mhs(myMessageHandler);
+ { qDebug() << static_cast<id>(object); }
+
+ QCOMPARE(s_msg, message);
+}
+#endif
+
// Should compile: instentiation of unrelated operator<< should not cause cause compilation
// error in QDebug operators (QTBUG-47375)
class TestClassA {};
diff --git a/tests/auto/corelib/io/qdir/CMakeLists.txt b/tests/auto/corelib/io/qdir/CMakeLists.txt
index ee24703bd3..4032d7ac19 100644
--- a/tests/auto/corelib/io/qdir/CMakeLists.txt
+++ b/tests/auto/corelib/io/qdir/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qdir.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdir Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdir LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "testdir")
list(APPEND test_data "testData")
@@ -16,8 +23,9 @@ list(APPEND test_data "tst_qdir.cpp")
qt_internal_add_test(tst_qdir
SOURCES
tst_qdir.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
TESTDATA ${test_data}
)
@@ -33,13 +41,9 @@ qt_internal_add_resource(tst_qdir "qdir"
${qdir_resource_files}
)
-
## Scopes:
#####################################################################
-#### Keys ignored in scope 2:.:.:qdir.pro:IOS:
-# QMAKE_INFO_PLIST = "Info.plist"
-
qt_internal_extend_target(tst_qdir CONDITION CONFIG___contains___builtin_testdata
DEFINES
BUILTIN_TESTDATA
diff --git a/tests/auto/corelib/io/qdir/testdir/dir/CMakeLists.txt b/tests/auto/corelib/io/qdir/testdir/dir/CMakeLists.txt
index 92ce7b4e89..d0ec6dee9a 100644
--- a/tests/auto/corelib/io/qdir/testdir/dir/CMakeLists.txt
+++ b/tests/auto/corelib/io/qdir/testdir/dir/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qdir.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qdir Binary:
@@ -6,8 +7,6 @@
qt_internal_add_executable(qdir
GUI
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/corelib/io/qdir/testdir/dir/qdir.pro b/tests/auto/corelib/io/qdir/testdir/dir/qdir.pro
index 856d5ea2fb..e69de29bb2 100644
--- a/tests/auto/corelib/io/qdir/testdir/dir/qdir.pro
+++ b/tests/auto/corelib/io/qdir/testdir/dir/qdir.pro
@@ -1,3 +0,0 @@
-
-
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/auto/corelib/io/qdir/testdir/dir/qrc_qdir.cpp b/tests/auto/corelib/io/qdir/testdir/dir/qrc_qdir.cpp
index a1d5c2c9ff..b9f84b6006 100644
--- a/tests/auto/corelib/io/qdir/testdir/dir/qrc_qdir.cpp
+++ b/tests/auto/corelib/io/qdir/testdir/dir/qrc_qdir.cpp
@@ -1,29 +1,4 @@
-/****************************************************************************
-**
-** 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
diff --git a/tests/auto/corelib/io/qdir/testdir/dir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/testdir/dir/tst_qdir.cpp
index a1d5c2c9ff..b9f84b6006 100644
--- a/tests/auto/corelib/io/qdir/testdir/dir/tst_qdir.cpp
+++ b/tests/auto/corelib/io/qdir/testdir/dir/tst_qdir.cpp
@@ -1,29 +1,4 @@
-/****************************************************************************
-**
-** 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
diff --git a/tests/auto/corelib/io/qdir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/tst_qdir.cpp
index d0d6588446..b19f158746 100644
--- a/tests/auto/corelib/io/qdir/tst_qdir.cpp
+++ b/tests/auto/corelib/io/qdir/tst_qdir.cpp
@@ -1,33 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2017 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2017 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
#include <QTemporaryFile>
#if QT_CONFIG(process)
#include <QProcess>
@@ -37,12 +13,10 @@
#include <qdebug.h>
#include <qdir.h>
#include <qfileinfo.h>
-#include <qscopedvaluerollback.h>
#include <qstringlist.h>
#if defined(Q_OS_WIN)
#include <QtCore/private/qfsfileengine_p.h>
-#include "../../../network-settings.h"
#endif
#if defined(Q_OS_WIN) && !defined(_WIN32_WINNT)
@@ -66,7 +40,6 @@
#ifdef Q_OS_WIN
#define DRIVE "Q:"
-extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
#else
#define DRIVE
#endif
@@ -75,6 +48,8 @@ extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
#include "private/qdir_p.h"
#endif
+using namespace Qt::StringLiterals;
+
static QByteArray msgDoesNotExist(const QString &name)
{
return (QLatin1Char('"') + QDir::toNativeSeparators(name)
@@ -152,6 +127,7 @@ private slots:
void normalizePathSegments();
#endif
+ void compareCompiles();
void compare();
void QDir_default();
@@ -231,12 +207,18 @@ private slots:
void stdfilesystem();
private:
-#ifdef BUILTIN_TESTDATA
- QString m_dataPath;
QSharedPointer<QTemporaryDir> m_dataDir;
-#else
- const QString m_dataPath;
-#endif
+ QString m_dataPath;
+
+ constexpr static const std::array m_testDirs = {
+ "entrylist"_L1,
+ "resources"_L1,
+ "searchdir"_L1,
+ "testData"_L1,
+ "testdir"_L1,
+ "types"_L1,
+ "tst_qdir.cpp"_L1,
+ };
};
Q_DECLARE_METATYPE(tst_QDir::UncHandling)
@@ -284,6 +266,20 @@ void tst_QDir::initTestCase()
m_dataDir = QEXTRACTTESTDATA("/");
QVERIFY2(!m_dataDir.isNull(), qPrintable("Did not find testdata. Is this builtin?"));
m_dataPath = m_dataDir->path();
+#elif QT_CONFIG(cxx17_filesystem) // This code doesn't work in QNX on the CI
+ m_dataDir.reset(new QTemporaryDir);
+ m_dataPath = m_dataDir->path();
+
+ QString sourceDir = QFileInfo(QFINDTESTDATA(m_testDirs[0])).absolutePath();
+ namespace fs = std::filesystem;
+ for (const auto &entry : m_testDirs) {
+ auto l1 = QLatin1StringView(entry);
+ const auto src = fs::path(QString(sourceDir + u'/' + l1).toStdString());
+ const auto dest = fs::path(QString(m_dataPath + u'/' + l1).toStdString());
+ std::error_code ec;
+ fs::copy(src, dest, fs::copy_options::recursive, ec);
+ QCOMPARE(ec.value(), 0);
+ }
#endif
QVERIFY2(!m_dataPath.isEmpty(), "test data not found");
@@ -345,6 +341,7 @@ void tst_QDir::setPath()
QFETCH(QString, dir1);
QFETCH(QString, dir2);
+ QDir::setCurrent(m_dataPath + "/entrylist"_L1);
QDir shared;
QDir qDir1(dir1);
QStringList entries1 = qDir1.entryList();
@@ -477,8 +474,7 @@ void tst_QDir::mkdirWithPermissions()
QFETCH(QFile::Permissions, permissions);
#ifdef Q_OS_WIN
- QScopedValueRollback<int> ntfsMode(qt_ntfs_permission_lookup);
- ++qt_ntfs_permission_lookup;
+ QNtfsPermissionCheckGuard permissionGuard;
#endif
#ifdef Q_OS_UNIX
auto restoreMask = qScopeGuard([oldMask = umask(0)] { umask(oldMask); });
@@ -490,7 +486,7 @@ void tst_QDir::mkdirWithPermissions()
QFile::ReadOwner, QFile::WriteOwner, QFile::ExeOwner
};
- const QString path = u"tmpdir"_qs;
+ const QString path = u"tmpdir"_s;
QDir dir;
auto deleteDirectory = qScopeGuard([&dir, &path] { dir.rmdir(path); });
@@ -524,7 +520,7 @@ void tst_QDir::makedirReturnCode()
// Remove the directory and create a file with the same path
QDir::current().rmdir(dirName);
QVERIFY(!f.exists());
- f.open(QIODevice::WriteOnly);
+ QVERIFY(f.open(QIODevice::WriteOnly));
f.write("test");
f.close();
QVERIFY2(f.exists(), msgDoesNotExist(f.fileName()).constData());
@@ -545,12 +541,12 @@ void tst_QDir::removeRecursively_data()
<< tmpdir + "two/three"
<< "relative";
QDir dir;
- for (int i = 0; i < dirs.count(); ++i)
+ for (int i = 0; i < dirs.size(); ++i)
dir.mkpath(dirs.at(i));
QStringList files;
files << tmpdir + "one/file";
files << tmpdir + "two/three/file";
- for (int i = 0; i < files.count(); ++i) {
+ for (int i = 0; i < files.size(); ++i) {
QFile file(files.at(i));
QVERIFY(file.open(QIODevice::WriteOnly));
file.write("Hello");
@@ -618,7 +614,7 @@ void tst_QDir::removeRecursivelySymlink()
QDir().mkpath(tmpdir);
QDir currentDir;
currentDir.mkdir("myDir");
- QFile("testfile").open(QIODevice::WriteOnly);
+ QVERIFY(QFile("testfile").open(QIODevice::WriteOnly));
const QString link = tmpdir + "linkToDir.lnk";
const QString linkToFile = tmpdir + "linkToFile.lnk";
#ifndef Q_NO_SYMLINKS_TO_DIRS
@@ -650,7 +646,7 @@ void tst_QDir::exists_data()
QTest::newRow("simple dir") << (m_dataPath + "/resources") << true;
QTest::newRow("simple dir with slash") << (m_dataPath + "/resources/") << true;
#if defined(Q_OS_WIN)
- const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName();
+ const QString uncRoot = QStringLiteral("//") + QTest::uncServerName();
QTest::newRow("unc 1") << uncRoot << true;
QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << true;
QTest::newRow("unc 3") << uncRoot + "/testshare" << true;
@@ -728,32 +724,29 @@ void tst_QDir::QDir_default()
QCOMPARE(dir.absolutePath(), QDir::currentPath());
}
-void tst_QDir::compare()
+void tst_QDir::compareCompiles()
{
- // operator==
-
- // Not using QCOMPARE to test result of QDir::operator==
+ QTestPrivate::testEqualityOperatorsCompile<QDir>();
+}
+void tst_QDir::compare()
+{
QDir dir;
dir.makeAbsolute();
- QVERIFY(dir == QDir::currentPath());
+ QT_TEST_EQUALITY_OPS(dir, QDir::currentPath(), true);
QCOMPARE(QDir(), QDir(QDir::currentPath()));
- QVERIFY(QDir("../") == QDir(QDir::currentPath() + "/.."));
+
+ QT_TEST_EQUALITY_OPS(QDir("../"), QDir(QDir::currentPath() + "/.."), true);
}
-static QStringList filterLinks(const QStringList &list)
+static QStringList filterLinks(QStringList &&list)
{
-#ifndef Q_NO_SYMLINKS
- return list;
-#else
- QStringList result;
- foreach (QString str, list) {
- if (!str.endsWith(QLatin1String(".lnk")))
- result.append(str);
- }
- return result;
+#ifdef Q_NO_SYMLINKS
+ auto isDotLnk = [](const auto &s) { return s.endsWith(".lnk"_L1); };
+ list.removeIf(isDotLnk);
#endif
+ return std::move(list);
}
void tst_QDir::entryList_data()
@@ -820,6 +813,12 @@ void tst_QDir::entryListWithTestFiles_data()
QTest::newRow("QDir::AllEntries") << (m_dataPath + "/entrylist/") << QStringList("*")
<< int(QDir::AllEntries) << int(QDir::Name)
<< filterLinks(QString(".,..,directory,file,linktodirectory.lnk,linktofile.lnk,writable").split(','));
+ // Tests an assert in QDirSortItemComparator, when QDir::LocaleAware is set
+ // a QCollator is used
+ QTest::newRow("QDir::AllEntries")
+ << (m_dataPath + "/entrylist/") << QStringList("*")
+ << int(QDir::AllEntries) << int(QDir::Name | QDir::LocaleAware)
+ << filterLinks(QString(".,..,directory,file,linktodirectory.lnk,linktofile.lnk,writable").split(','));
QTest::newRow("QDir::Files") << (m_dataPath + "/entrylist/") << QStringList("*")
<< int(QDir::Files) << int(QDir::Name)
<< filterLinks(QString("file,linktofile.lnk,writable").split(','));
@@ -1023,7 +1022,7 @@ void tst_QDir::entryListTimedSort()
QFileInfo aFileInfo(aFile);
QFileInfo bFileInfo(bFile);
- QVERIFY(bFileInfo.lastModified().msecsTo(aFileInfo.lastModified()) < 0);
+ QVERIFY(bFileInfo.lastModified(QTimeZone::UTC).msecsTo(aFileInfo.lastModified(QTimeZone::UTC)) < 0);
QCOMPARE(actual.size(), 2);
QCOMPARE(actual.first(), bFileInfo.fileName());
@@ -1043,7 +1042,7 @@ void tst_QDir::entryListSimple_data()
QTest::newRow("simple dir with slash") << (m_dataPath + "/resources/") << 2;
#if defined(Q_OS_WIN)
- const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName();
+ const QString uncRoot = QStringLiteral("//") + QTest::uncServerName();
QTest::newRow("unc 1") << uncRoot << 2;
QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << 2;
QTest::newRow("unc 3") << uncRoot + "/testshare" << 2;
@@ -1069,7 +1068,7 @@ void tst_QDir::entryListSimple()
QDir dir(dirName);
QStringList actual = dir.entryList();
- QVERIFY2(actual.count() >= countMin, msgEntryListFailed(actual.count(), countMin, dirName).constData());
+ QVERIFY2(actual.size() >= countMin, msgEntryListFailed(actual.size(), countMin, dirName).constData());
}
void tst_QDir::entryListWithSymLinks()
@@ -1082,7 +1081,7 @@ void tst_QDir::entryListWithSymLinks()
QFile::remove("testfile.cpp");
QDir dir;
dir.mkdir("myDir");
- QFile("testfile.cpp").open(QIODevice::WriteOnly);
+ QVERIFY(QFile("testfile.cpp").open(QIODevice::WriteOnly));
# ifndef Q_NO_SYMLINKS_TO_DIRS
QVERIFY(QFile::link("myDir", "myLinkToDir.lnk"));
# endif
@@ -1278,11 +1277,11 @@ void tst_QDir::setNameFilters()
dir.setNameFilters(nameFilters);
QStringList actual = dir.entryList();
- int max = qMin(actual.count(), expected.count());
+ int max = qMin(actual.size(), expected.size());
for (int i=0; i<max; ++i)
QCOMPARE(actual[i], expected[i]);
- QCOMPARE(actual.count(), expected.count());
+ QCOMPARE(actual.size(), expected.size());
}
void
@@ -1332,19 +1331,19 @@ tst_QDir::cleanPath_data()
QTest::newRow("unc-server-up") << "//server/path/.." << "//server";
QTest::newRow("unc-server-above-root") << "//server/.." << "//server/..";
- QTest::newRow("longpath") << uR"(\\?\d:\)"_qs << u"d:/"_qs;
- QTest::newRow("longpath-slash") << u"//?/d:/"_qs << u"d:/"_qs;
- QTest::newRow("longpath-mixed-slashes") << uR"(//?/d:\)"_qs << u"d:/"_qs;
- QTest::newRow("longpath-mixed-slashes-2") << uR"(\\?\d:/)"_qs << u"d:/"_qs;
-
- QTest::newRow("unc-network-share") << uR"(\\?\UNC\localhost\c$\tmp.txt)"_qs
- << u"//localhost/c$/tmp.txt"_qs;
- QTest::newRow("unc-network-share-slash") << u"//?/UNC/localhost/c$/tmp.txt"_qs
- << u"//localhost/c$/tmp.txt"_qs;
- QTest::newRow("unc-network-share-mixed-slashes") << uR"(//?/UNC/localhost\c$\tmp.txt)"_qs
- << u"//localhost/c$/tmp.txt"_qs;
- QTest::newRow("unc-network-share-mixed-slashes-2") << uR"(\\?\UNC\localhost/c$/tmp.txt)"_qs
- << u"//localhost/c$/tmp.txt"_qs;
+ QTest::newRow("longpath") << uR"(\\?\d:\)"_s << u"d:/"_s;
+ QTest::newRow("longpath-slash") << u"//?/d:/"_s << u"d:/"_s;
+ QTest::newRow("longpath-mixed-slashes") << uR"(//?/d:\)"_s << u"d:/"_s;
+ QTest::newRow("longpath-mixed-slashes-2") << uR"(\\?\d:/)"_s << u"d:/"_s;
+
+ QTest::newRow("unc-network-share") << uR"(\\?\UNC\localhost\c$\tmp.txt)"_s
+ << u"//localhost/c$/tmp.txt"_s;
+ QTest::newRow("unc-network-share-slash") << u"//?/UNC/localhost/c$/tmp.txt"_s
+ << u"//localhost/c$/tmp.txt"_s;
+ QTest::newRow("unc-network-share-mixed-slashes") << uR"(//?/UNC/localhost\c$\tmp.txt)"_s
+ << u"//localhost/c$/tmp.txt"_s;
+ QTest::newRow("unc-network-share-mixed-slashes-2") << uR"(\\?\UNC\localhost/c$/tmp.txt)"_s
+ << u"//localhost/c$/tmp.txt"_s;
#else
QTest::newRow("data15") << "//c:/foo" << "/c:/foo";
#endif // non-windows
@@ -1624,7 +1623,7 @@ void tst_QDir::filePath()
void tst_QDir::remove()
{
QFile f("remove-test");
- f.open(QIODevice::WriteOnly);
+ QVERIFY(f.open(QIODevice::WriteOnly));
f.close();
QDir dir;
QVERIFY(dir.remove("remove-test"));
@@ -1637,12 +1636,12 @@ void tst_QDir::remove()
void tst_QDir::rename()
{
QFile f("rename-test");
- f.open(QIODevice::WriteOnly);
+ QVERIFY(f.open(QIODevice::WriteOnly));
f.close();
QDir dir;
QVERIFY(dir.rename("rename-test", "rename-test-renamed"));
QVERIFY(dir.rename("rename-test-renamed", "rename-test"));
-#if defined(Q_OS_MAC)
+#if defined(Q_OS_DARWIN)
QVERIFY(!dir.rename("rename-test", "/etc/rename-test-renamed"));
#elif !defined(Q_OS_WIN)
// on windows this is possible - maybe make the test a bit better
@@ -1743,9 +1742,9 @@ void tst_QDir::dotAndDotDot()
{
QDir dir(QString((m_dataPath + "/testdir/")));
QStringList entryList = dir.entryList(QDir::Dirs);
- QCOMPARE(entryList, QStringList({ u"."_qs, u".."_qs, u"dir"_qs, u"dir.lnk"_qs, u"spaces"_qs }));
+ QCOMPARE(entryList, QStringList({ u"."_s, u".."_s, u"dir"_s, u"dir.lnk"_s, u"spaces"_s }));
entryList = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
- QCOMPARE(entryList, QStringList({ u"dir"_qs, u"dir.lnk"_qs, u"spaces"_qs }));
+ QCOMPARE(entryList, QStringList({ u"dir"_s, u"dir.lnk"_s, u"spaces"_s }));
}
void tst_QDir::homePath()
@@ -1758,7 +1757,7 @@ void tst_QDir::homePath()
QVERIFY(QDir::isAbsolutePath(strHome));
#ifdef Q_OS_UNIX
- if (strHome.length() > 1) // root dir = "/"
+ if (strHome.size() > 1) // root dir = "/"
QVERIFY(!strHome.endsWith('/'));
QByteArray envHome = qgetenv("HOME");
@@ -1772,7 +1771,7 @@ void tst_QDir::homePath()
#endif
QStringList entries = homeDir.entryList();
- for (int i = 0; i < entries.count(); ++i) {
+ for (int i = 0; i < entries.size(); ++i) {
QFileInfo fi(QDir::homePath() + "/" + entries[i]);
QCOMPARE(fi.exists(), true);
}
@@ -1788,7 +1787,7 @@ void tst_QDir::tempPath()
QVERIFY(QDir::isAbsolutePath(path));
#ifdef Q_OS_UNIX
- if (path.length() > 1) // root dir = "/"
+ if (path.size() > 1) // root dir = "/"
QVERIFY(!path.endsWith('/'));
#elif defined(Q_OS_WIN)
if (path.length() > 3) // root dir = "c:/"; "//" is not really valid...
@@ -1820,10 +1819,10 @@ void tst_QDir::nativeSeparators()
QCOMPARE(QDir::fromNativeSeparators(QLatin1String("/")), QString("/"));
QCOMPARE(QDir::fromNativeSeparators(QLatin1String("\\")), QString("/"));
QCOMPARE(QDir::fromNativeSeparators(QLatin1String("\\\\?\\C:\\")), QString("C:/"));
- QCOMPARE(QDir::fromNativeSeparators(uR"(\\?\UNC\localhost\c$\tmp.txt)"_qs),
- u"//localhost/c$/tmp.txt"_qs);
- QCOMPARE(QDir::fromNativeSeparators(uR"(//?/UNC/localhost\c$\tmp.txt)"_qs),
- u"//localhost/c$/tmp.txt"_qs);
+ QCOMPARE(QDir::fromNativeSeparators(uR"(\\?\UNC\localhost\c$\tmp.txt)"_s),
+ u"//localhost/c$/tmp.txt"_s);
+ QCOMPARE(QDir::fromNativeSeparators(uR"(//?/UNC/localhost\c$\tmp.txt)"_s),
+ u"//localhost/c$/tmp.txt"_s);
#else
QCOMPARE(QDir::toNativeSeparators(QLatin1String("/")), QString("/"));
QCOMPARE(QDir::toNativeSeparators(QLatin1String("\\")), QString("\\"));
@@ -1869,10 +1868,10 @@ void tst_QDir::searchPaths()
QFETCH(QString, expectedAbsolutePath);
bool exists = !expectedAbsolutePath.isEmpty();
- for (int i = 0; i < searchPathPrefixList.count(); ++i) {
+ for (int i = 0; i < searchPathPrefixList.size(); ++i) {
QDir::setSearchPaths(searchPathPrefixList.at(i), searchPathsList.at(i).split(","));
}
- for (int i = 0; i < searchPathPrefixList.count(); ++i) {
+ for (int i = 0; i < searchPathPrefixList.size(); ++i) {
QCOMPARE(QDir::searchPaths(searchPathPrefixList.at(i)), searchPathsList.at(i).split(","));
}
@@ -1883,19 +1882,19 @@ void tst_QDir::searchPaths()
QCOMPARE(QFileInfo(filename).absoluteFilePath(), expectedAbsolutePath);
}
- for (int i = 0; i < searchPathPrefixList.count(); ++i) {
+ for (int i = 0; i < searchPathPrefixList.size(); ++i) {
QDir::setSearchPaths(searchPathPrefixList.at(i), QStringList());
}
- for (int i = 0; i < searchPathPrefixList.count(); ++i) {
+ for (int i = 0; i < searchPathPrefixList.size(); ++i) {
QVERIFY(QDir::searchPaths(searchPathPrefixList.at(i)).isEmpty());
}
- for (int i = 0; i < searchPathPrefixList.count(); ++i) {
- foreach (QString path, searchPathsList.at(i).split(",")) {
+ for (int i = 0; i < searchPathPrefixList.size(); ++i) {
+ const auto parts = searchPathsList.at(i).split(",");
+ for (const QString &path : parts)
QDir::addSearchPath(searchPathPrefixList.at(i), path);
- }
}
- for (int i = 0; i < searchPathPrefixList.count(); ++i) {
+ for (int i = 0; i < searchPathPrefixList.size(); ++i) {
QCOMPARE(QDir::searchPaths(searchPathPrefixList.at(i)), searchPathsList.at(i).split(","));
}
@@ -1906,10 +1905,10 @@ void tst_QDir::searchPaths()
QCOMPARE(QFileInfo(filename).absoluteFilePath(), expectedAbsolutePath);
}
- for (int i = 0; i < searchPathPrefixList.count(); ++i) {
+ for (int i = 0; i < searchPathPrefixList.size(); ++i) {
QDir::setSearchPaths(searchPathPrefixList.at(i), QStringList());
}
- for (int i = 0; i < searchPathPrefixList.count(); ++i) {
+ for (int i = 0; i < searchPathPrefixList.size(); ++i) {
QVERIFY(QDir::searchPaths(searchPathPrefixList.at(i)).isEmpty());
}
}
@@ -2219,7 +2218,7 @@ void tst_QDir::match()
void tst_QDir::drives()
{
- QFileInfoList list(QDir::drives());
+ const QFileInfoList list(QDir::drives());
#if defined(Q_OS_WIN)
QVERIFY(list.count() >= 1); //system
QLatin1Char systemdrive('c');
@@ -2227,7 +2226,7 @@ void tst_QDir::drives()
#if defined(Q_OS_WIN)
QVERIFY(list.count() <= 26);
bool foundsystem = false;
- foreach (QFileInfo fi, list) {
+ for (const QFileInfo &fi : list) {
QCOMPARE(fi.absolutePath().size(), 3); //"x:/"
QCOMPARE(fi.absolutePath().at(1), QChar(QLatin1Char(':')));
QCOMPARE(fi.absolutePath().at(2), QChar(QLatin1Char('/')));
@@ -2236,7 +2235,7 @@ void tst_QDir::drives()
}
QCOMPARE(foundsystem, true);
#else
- QCOMPARE(list.count(), 1); //root
+ QCOMPARE(list.size(), 1); //root
QCOMPARE(list.at(0).absolutePath(), QLatin1String("/"));
#endif
}
@@ -2248,7 +2247,7 @@ void tst_QDir::arrayOperator()
QStringList entries(dir1.entryList());
int i = dir2.count();
- QCOMPARE(i, entries.count());
+ QCOMPARE(i, entries.size());
--i;
for (;i>=0;--i) {
QCOMPARE(dir2[i], entries.at(i));
@@ -2351,9 +2350,9 @@ void tst_QDir::isRelative_data()
QTest::newRow("homepath") << QDir::homePath() << false;
QTest::newRow("temppath") << QDir::tempPath() << false;
QTest::newRow("rootpath") << QDir::rootPath() << false;
- foreach (QFileInfo root, QDir::drives()) {
+ const auto drives = QDir::drives();
+ for (const QFileInfo &root : drives)
QTest::newRow(root.absolutePath().toLocal8Bit()) << root.absolutePath() << false;
- }
QTest::newRow("resource") << ":/prefix" << false;
}
@@ -2416,7 +2415,7 @@ void tst_QDir::cdBelowRoot_data()
const QString systemRoot = QString::fromLocal8Bit(qgetenv("SystemRoot"));
QTest::newRow("windows-drive")
<< systemDrive << systemRoot.mid(3) << QDir::cleanPath(systemRoot);
- const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName();
+ const QString uncRoot = QStringLiteral("//") + QTest::uncServerName();
const QString testDirectory = QStringLiteral("testshare");
QTest::newRow("windows-share")
<< uncRoot << testDirectory << QDir::cleanPath(uncRoot + QLatin1Char('/') + testDirectory);
@@ -2501,7 +2500,7 @@ void tst_QDir::stdfilesystem()
QCOMPARE(entries, QStringList() << "subdir2" << "subdir1");
QCOMPARE(filteredDir.sorting(), QDir::SortFlag::Reversed);
QCOMPARE(filteredDir.filter(), QDir::Filter::Dirs);
- QCOMPARE(filteredDir.nameFilters().length(), 1);
+ QCOMPARE(filteredDir.nameFilters().size(), 1);
QCOMPARE(filteredDir.nameFilters().first(), "subdir*");
}
#else
diff --git a/tests/auto/corelib/io/qdiriterator/CMakeLists.txt b/tests/auto/corelib/io/qdiriterator/CMakeLists.txt
index feb742396d..41784546aa 100644
--- a/tests/auto/corelib/io/qdiriterator/CMakeLists.txt
+++ b/tests/auto/corelib/io/qdiriterator/CMakeLists.txt
@@ -1,16 +1,23 @@
-# Generated from qdiriterator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdiriterator Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdiriterator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "entrylist")
qt_internal_add_test(tst_qdiriterator
SOURCES
tst_qdiriterator.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp
index 9761fbcfb3..a0a8917c27 100644
--- a/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp
+++ b/tests/auto/corelib/io/qdiriterator/tst_qdiriterator.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -34,6 +8,8 @@
#include <qdiriterator.h>
#include <qfileinfo.h>
#include <qstringlist.h>
+#include <QSet>
+#include <QString>
#include <QtCore/private/qfsfileengine_p.h>
@@ -41,14 +17,14 @@
#define Q_NO_SYMLINKS
#endif
-#if defined(Q_OS_WIN)
-# include "../../../network-settings.h"
-#endif
+#include "../../../../shared/filesystem.h"
#ifdef Q_OS_ANDROID
#include <QStandardPaths>
#endif
+using namespace Qt::StringLiterals;
+
Q_DECLARE_METATYPE(QDirIterator::IteratorFlags)
Q_DECLARE_METATYPE(QDir::Filters)
@@ -70,16 +46,10 @@ private: // convenience functions
return false;
}
- enum Cleanup { DoDelete, DontDelete };
- bool createFile(const QString &fileName, Cleanup cleanup = DoDelete)
+ bool createFile(const QString &fileName)
{
QFile file(fileName);
- if (file.open(QIODevice::WriteOnly)) {
- if (cleanup == DoDelete)
- createdFiles << fileName;
- return true;
- }
- return false;
+ return file.open(QIODevice::WriteOnly);
}
bool createLink(const QString &destination, const QString &linkName)
@@ -93,7 +63,6 @@ private: // convenience functions
private slots:
void initTestCase();
- void cleanupTestCase();
void iterateRelativeDirectory_data();
void iterateRelativeDirectory();
void iterateResource_data();
@@ -101,6 +70,8 @@ private slots:
void stopLinkLoop();
#ifdef QT_BUILD_INTERNAL
void engineWithNoIterator();
+ void testQFsFileEngineIterator_data() { iterateRelativeDirectory_data(); }
+ void testQFsFileEngineIterator();
#endif
void absoluteFilePathsFromRelativeIteratorPath();
void recurseWithFilters() const;
@@ -114,16 +85,16 @@ private slots:
#ifndef Q_OS_WIN
void hiddenDirs_hiddenFiles();
#endif
-#ifdef BUILTIN_TESTDATA
+
private:
QSharedPointer<QTemporaryDir> m_dataDir;
-#endif
};
void tst_QDirIterator::initTestCase()
{
+ QString testdata_dir;
#ifdef Q_OS_ANDROID
- QString testdata_dir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
+ testdata_dir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
QString resourceSourcePath = QStringLiteral(":/testdata");
QDirIterator it(resourceSourcePath, QDirIterator::Subdirectories);
while (it.hasNext()) {
@@ -146,29 +117,22 @@ void tst_QDirIterator::initTestCase()
#elif defined(BUILTIN_TESTDATA)
m_dataDir = QEXTRACTTESTDATA("/testdata");
QVERIFY2(!m_dataDir.isNull(), qPrintable("Could not extract test data"));
- QString testdata_dir = m_dataDir->path();
+ testdata_dir = m_dataDir->path();
#else
-
- // chdir into testdata directory, then find testdata by relative paths.
- QString testdata_dir = QFileInfo(QFINDTESTDATA("entrylist")).absolutePath();
+ m_dataDir.reset(new QTemporaryDir);
+ testdata_dir = m_dataDir->path();
#endif
+ QVERIFY(!testdata_dir.isEmpty());
+ // Must call QDir::setCurrent() here because all the tests that use relative
+ // paths depend on that.
QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir));
- QFile::remove("entrylist/entrylist1.lnk");
- QFile::remove("entrylist/entrylist2.lnk");
- QFile::remove("entrylist/entrylist3.lnk");
- QFile::remove("entrylist/entrylist4.lnk");
- QFile::remove("entrylist/directory/entrylist1.lnk");
- QFile::remove("entrylist/directory/entrylist2.lnk");
- QFile::remove("entrylist/directory/entrylist3.lnk");
- QFile::remove("entrylist/directory/entrylist4.lnk");
-
createDirectory("entrylist");
createDirectory("entrylist/directory");
- createFile("entrylist/file", DontDelete);
+ createFile("entrylist/file");
createFile("entrylist/writable");
- createFile("entrylist/directory/dummy", DontDelete);
+ createFile("entrylist/directory/dummy");
createDirectory("recursiveDirs");
createDirectory("recursiveDirs/dir1");
@@ -216,15 +180,6 @@ void tst_QDirIterator::initTestCase()
#endif
}
-void tst_QDirIterator::cleanupTestCase()
-{
- Q_FOREACH(QString fileName, createdFiles)
- QFile::remove(fileName);
-
- Q_FOREACH(QString dirName, createdDirectories)
- currentDir.rmdir(dirName);
-}
-
void tst_QDirIterator::iterateRelativeDirectory_data()
{
QTest::addColumn<QString>("dirName"); // relative from current path or abs
@@ -349,7 +304,7 @@ void tst_QDirIterator::iterateRelativeDirectory()
QFETCH(QDirIterator::IteratorFlags, flags);
QFETCH(QDir::Filters, filters);
QFETCH(QStringList, nameFilters);
- QFETCH(QStringList, entries);
+ QFETCH(const QStringList, entries);
QDirIterator it(dirName, nameFilters, filters, flags);
QStringList list;
@@ -377,13 +332,13 @@ void tst_QDirIterator::iterateRelativeDirectory()
list.sort();
QStringList sortedEntries;
- foreach(QString item, entries)
+ for (const QString &item : entries)
sortedEntries.append(QFileInfo(item).canonicalFilePath());
sortedEntries.sort();
if (sortedEntries != list) {
- qDebug() << "EXPECTED:" << sortedEntries;
qDebug() << "ACTUAL: " << list;
+ qDebug() << "EXPECTED:" << sortedEntries;
}
QCOMPARE(list, sortedEntries);
@@ -400,13 +355,14 @@ void tst_QDirIterator::iterateResource_data()
QTest::newRow("invalid") << QString::fromLatin1(":/testdata/burpaburpa") << QDirIterator::IteratorFlags{}
<< QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*"))
<< QStringList();
- QTest::newRow(":/testdata") << QString::fromLatin1(":/testdata/") << QDirIterator::IteratorFlags{}
+ QTest::newRow("qrc:/testdata") << u":/testdata/"_s << QDirIterator::IteratorFlags{}
<< QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*"))
<< QString::fromLatin1(":/testdata/entrylist").split(QLatin1String(","));
- QTest::newRow(":/testdata/entrylist") << QString::fromLatin1(":/testdata/entrylist") << QDirIterator::IteratorFlags{}
+ QTest::newRow("qrc:/testdata/entrylist") << u":/testdata/entrylist"_s << QDirIterator::IteratorFlags{}
<< QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*"))
<< QString::fromLatin1(":/testdata/entrylist/directory,:/testdata/entrylist/file").split(QLatin1String(","));
- QTest::newRow(":/testdata recursive") << QString::fromLatin1(":/testdata") << QDirIterator::IteratorFlags(QDirIterator::Subdirectories)
+ QTest::newRow("qrc:/testdata recursive") << u":/testdata"_s
+ << QDirIterator::IteratorFlags(QDirIterator::Subdirectories)
<< QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*"))
<< QString::fromLatin1(":/testdata/entrylist,:/testdata/entrylist/directory,:/testdata/entrylist/directory/dummy,:/testdata/entrylist/file").split(QLatin1String(","));
}
@@ -432,8 +388,8 @@ void tst_QDirIterator::iterateResource()
sortedEntries.sort();
if (sortedEntries != list) {
- qDebug() << "EXPECTED:" << sortedEntries;
qDebug() << "ACTUAL:" << list;
+ qDebug() << "EXPECTED:" << sortedEntries;
}
QCOMPARE(list, sortedEntries);
@@ -480,16 +436,20 @@ public:
: QFSFileEngine(fileName)
{ }
- QAbstractFileEngineIterator *beginEntryList(QDir::Filters, const QStringList &) override
- { return 0; }
+ IteratorUniquePtr
+ beginEntryList(const QString &, QDir::Filters, const QStringList &) override
+ { return nullptr; }
};
class EngineWithNoIteratorHandler : public QAbstractFileEngineHandler
{
+ Q_DISABLE_COPY_MOVE(EngineWithNoIteratorHandler)
public:
- QAbstractFileEngine *create(const QString &fileName) const override
+ EngineWithNoIteratorHandler() = default;
+
+ std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override
{
- return new EngineWithNoIterator(fileName);
+ return std::make_unique<EngineWithNoIterator>(fileName);
}
};
#endif
@@ -502,6 +462,41 @@ void tst_QDirIterator::engineWithNoIterator()
QDir("entrylist").entryList();
QVERIFY(true); // test that the above line doesn't crash
}
+
+class CustomEngineHandler : public QAbstractFileEngineHandler
+{
+ Q_DISABLE_COPY_MOVE(CustomEngineHandler)
+public:
+ CustomEngineHandler() = default;
+
+ std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override
+ {
+ // We want to test QFSFileEngine specifically, so force QDirIterator to use it
+ // over the default QFileSystemEngine
+ return std::make_unique<QFSFileEngine>(fileName);
+ }
+};
+
+void tst_QDirIterator::testQFsFileEngineIterator()
+{
+ QFETCH(QString, dirName);
+ QFETCH(QStringList, nameFilters);
+ QFETCH(QDir::Filters, filters);
+ QFETCH(QDirIterator::IteratorFlags, flags);
+
+ if (dirName == u"empty")
+ return; // This row isn't useful in this test
+
+ CustomEngineHandler handler;
+ bool isEmpty = true;
+ QDirIterator iter(dirName, nameFilters, filters, flags);
+ while (iter.hasNext()) {
+ const QFileInfo &fi = iter.nextFileInfo();
+ if (fi.filePath().contains(u"entrylist"))
+ isEmpty = false; // At least one entry in `entrylist` dir
+ }
+ QVERIFY(!isEmpty);
+}
#endif
void tst_QDirIterator::absoluteFilePathsFromRelativeIteratorPath()
@@ -544,8 +539,15 @@ void tst_QDirIterator::longPath()
while (dir.exists(dirName) || dir.mkdir(dirName)) {
++n;
dirName.append('x');
+ if (n >= 20480)
+ {
+ break;
+ }
+ }
+ if (n >= 20480)
+ {
+ qWarning("No maximum length on directory names");
}
-
QDirIterator it(dir.absolutePath(), QDir::NoDotAndDotDot|QDir::Dirs, QDirIterator::Subdirectories);
int m = 0;
while (it.hasNext()) {
@@ -554,13 +556,14 @@ void tst_QDirIterator::longPath()
}
QCOMPARE(n, m);
-
dirName.chop(1);
- while (dirName.length() > 0 && dir.exists(dirName) && dir.rmdir(dirName)) {
+ while (dirName.size() > 0 && dir.exists(dirName) && dir.rmdir(dirName)) {
+ --n;
dirName.chop(1);
}
- dir.cdUp();
- dir.rmdir("longpaths");
+ QCOMPARE(n, 0);
+ QVERIFY(dir.cdUp());
+ QVERIFY(dir.rmdir("longpaths"));
}
void tst_QDirIterator::dirorder()
@@ -586,11 +589,11 @@ void tst_QDirIterator::uncPaths_data()
{
QTest::addColumn<QString>("dirName");
QTest::newRow("uncserver")
- <<QString("//" + QtNetworkSettings::winServerName());
+ <<QString("//" + QTest::uncServerName());
QTest::newRow("uncserver/testshare")
- <<QString("//" + QtNetworkSettings::winServerName() + "/testshare");
+ <<QString("//" + QTest::uncServerName() + "/testshare");
QTest::newRow("uncserver/testshare/tmp")
- <<QString("//" + QtNetworkSettings::winServerName() + "/testshare/tmp");
+ <<QString("//" + QTest::uncServerName() + "/testshare/tmp");
}
void tst_QDirIterator::uncPaths()
{
diff --git a/tests/auto/corelib/io/qdirlisting/.gitignore b/tests/auto/corelib/io/qdirlisting/.gitignore
new file mode 100644
index 0000000000..4965f97d03
--- /dev/null
+++ b/tests/auto/corelib/io/qdirlisting/.gitignore
@@ -0,0 +1 @@
+tst_qdirlisting
diff --git a/tests/auto/corelib/io/qdirlisting/CMakeLists.txt b/tests/auto/corelib/io/qdirlisting/CMakeLists.txt
new file mode 100644
index 0000000000..77431776d9
--- /dev/null
+++ b/tests/auto/corelib/io/qdirlisting/CMakeLists.txt
@@ -0,0 +1,46 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qdirlisting Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdirlisting LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+# Collect test data
+list(APPEND test_data "entrylist")
+
+qt_internal_add_test(tst_qdirlisting
+ SOURCES
+ tst_qdirlisting.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::CorePrivate
+ TESTDATA ${test_data}
+)
+
+# Resources:
+set(qdirlisting_resource_files
+ "entrylist/directory/dummy"
+ "entrylist/file"
+)
+
+qt_internal_add_resource(tst_qdirlisting "qdirlisting"
+ PREFIX
+ "/testdata/"
+ FILES
+ ${qdirlisting_resource_files}
+)
+
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qdirlisting CONDITION CONFIG___contains___builtin_testdata
+ DEFINES
+ BUILTIN_TESTDATA
+)
diff --git a/tests/auto/corelib/kernel/qtimer/BLACKLIST b/tests/auto/corelib/io/qdirlisting/entrylist/directory/dummy
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/corelib/kernel/qtimer/BLACKLIST
+++ b/tests/auto/corelib/io/qdirlisting/entrylist/directory/dummy
diff --git a/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor/BLACKLIST b/tests/auto/corelib/io/qdirlisting/entrylist/file
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor/BLACKLIST
+++ b/tests/auto/corelib/io/qdirlisting/entrylist/file
diff --git a/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp b/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp
new file mode 100644
index 0000000000..bb4e1b30d2
--- /dev/null
+++ b/tests/auto/corelib/io/qdirlisting/tst_qdirlisting.cpp
@@ -0,0 +1,611 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+
+#include <qcoreapplication.h>
+#include <qdebug.h>
+#include <qdirlisting.h>
+#include <qfileinfo.h>
+#include <qstringlist.h>
+#include <QSet>
+#include <QString>
+
+#include <QtCore/private/qfsfileengine_p.h>
+
+#if defined(Q_OS_VXWORKS)
+#define Q_NO_SYMLINKS
+#endif
+
+#include "../../../../shared/filesystem.h"
+
+#ifdef Q_OS_ANDROID
+#include <QStandardPaths>
+#endif
+
+using namespace Qt::StringLiterals;
+
+Q_DECLARE_METATYPE(QDirListing::IteratorFlags)
+Q_DECLARE_METATYPE(QDir::Filters)
+
+using ItFlag = QDirListing::IteratorFlag;
+
+class tst_QDirListing : public QObject
+{
+ Q_OBJECT
+
+private: // convenience functions
+ QStringList createdDirectories;
+ QStringList createdFiles;
+
+ QDir currentDir;
+ bool createDirectory(const QString &dirName)
+ {
+ if (currentDir.mkdir(dirName)) {
+ createdDirectories.prepend(dirName);
+ return true;
+ }
+ return false;
+ }
+
+ bool createFile(const QString &fileName)
+ {
+ QFile file(fileName);
+ return file.open(QIODevice::WriteOnly);
+ }
+
+ bool createLink(const QString &destination, const QString &linkName)
+ {
+ if (QFile::link(destination, linkName)) {
+ createdFiles << linkName;
+ return true;
+ }
+ return false;
+ }
+
+private slots:
+ void initTestCase();
+ void iterateRelativeDirectory_data();
+ void iterateRelativeDirectory();
+ void iterateResource_data();
+ void iterateResource();
+ void stopLinkLoop();
+#ifdef QT_BUILD_INTERNAL
+ void engineWithNoIterator();
+ void testQFsFileEngineIterator_data() { iterateRelativeDirectory_data(); }
+ void testQFsFileEngineIterator();
+#endif
+ void absoluteFilePathsFromRelativeIteratorPath();
+ void recurseWithFilters() const;
+ void longPath();
+ void dirorder();
+ void relativePaths();
+#if defined(Q_OS_WIN)
+ void uncPaths_data();
+ void uncPaths();
+#endif
+#ifndef Q_OS_WIN
+ void hiddenDirs_hiddenFiles();
+#endif
+
+private:
+ QSharedPointer<QTemporaryDir> m_dataDir;
+};
+
+void tst_QDirListing::initTestCase()
+{
+ QString testdata_dir;
+#ifdef Q_OS_ANDROID
+ testdata_dir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
+ QString resourceSourcePath = QStringLiteral(":/testdata");
+ for (const auto &dirEntry : QDirListing(resourceSourcePath, ItFlag::Recursive)) {
+ if (!dirEntry.isDir()) {
+ const QString &filePath = dirEntry.filePath();
+ QString destination = testdata_dir + QLatin1Char('/')
+ + filePath.sliced(resourceSourcePath.length());
+ QFileInfo destinationFileInfo(destination);
+ if (!destinationFileInfo.exists()) {
+ QDir().mkpath(destinationFileInfo.path());
+ if (!QFile::copy(filePath, destination))
+ qWarning("Failed to copy %s", qPrintable(filePath));
+ }
+ }
+
+ }
+
+ testdata_dir += QStringLiteral("/entrylist");
+#elif defined(BUILTIN_TESTDATA)
+ m_dataDir = QEXTRACTTESTDATA("/testdata");
+ QVERIFY2(!m_dataDir.isNull(), qPrintable("Could not extract test data"));
+ testdata_dir = m_dataDir->path();
+#else
+ m_dataDir.reset(new QTemporaryDir);
+ testdata_dir = m_dataDir->path();
+#endif
+
+ QVERIFY(!testdata_dir.isEmpty());
+ // Must call QDir::setCurrent() here because all the tests that use relative
+ // paths depend on that.
+ QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir));
+
+ createDirectory("entrylist");
+ createDirectory("entrylist/directory");
+ createFile("entrylist/file");
+ createFile("entrylist/writable");
+ createFile("entrylist/directory/dummy");
+
+ createDirectory("recursiveDirs");
+ createDirectory("recursiveDirs/dir1");
+ createFile("recursiveDirs/textFileA.txt");
+ createFile("recursiveDirs/dir1/aPage.html");
+ createFile("recursiveDirs/dir1/textFileB.txt");
+
+ createDirectory("foo");
+ createDirectory("foo/bar");
+ createFile("foo/bar/readme.txt");
+
+ createDirectory("empty");
+
+#ifndef Q_NO_SYMLINKS
+# if defined(Q_OS_WIN)
+ // ### Sadly, this is a platform difference right now.
+ createLink("entrylist/file", "entrylist/linktofile.lnk");
+# ifndef Q_NO_SYMLINKS_TO_DIRS
+ createLink("entrylist/directory", "entrylist/linktodirectory.lnk");
+# endif
+ createLink("entrylist/nothing", "entrylist/brokenlink.lnk");
+# else
+ createLink("file", "entrylist/linktofile.lnk");
+# ifndef Q_NO_SYMLINKS_TO_DIRS
+ createLink("directory", "entrylist/linktodirectory.lnk");
+# endif
+ createLink("nothing", "entrylist/brokenlink.lnk");
+# endif
+#endif
+
+#if !defined(Q_OS_WIN)
+ createDirectory("hiddenDirs_hiddenFiles");
+ createFile("hiddenDirs_hiddenFiles/normalFile");
+ createFile("hiddenDirs_hiddenFiles/.hiddenFile");
+ createDirectory("hiddenDirs_hiddenFiles/normalDirectory");
+ createDirectory("hiddenDirs_hiddenFiles/.hiddenDirectory");
+ createFile("hiddenDirs_hiddenFiles/normalDirectory/normalFile");
+ createFile("hiddenDirs_hiddenFiles/normalDirectory/.hiddenFile");
+ createFile("hiddenDirs_hiddenFiles/.hiddenDirectory/normalFile");
+ createFile("hiddenDirs_hiddenFiles/.hiddenDirectory/.hiddenFile");
+ createDirectory("hiddenDirs_hiddenFiles/normalDirectory/normalDirectory");
+ createDirectory("hiddenDirs_hiddenFiles/normalDirectory/.hiddenDirectory");
+ createDirectory("hiddenDirs_hiddenFiles/.hiddenDirectory/normalDirectory");
+ createDirectory("hiddenDirs_hiddenFiles/.hiddenDirectory/.hiddenDirectory");
+#endif
+}
+
+void tst_QDirListing::iterateRelativeDirectory_data()
+{
+ QTest::addColumn<QString>("dirName"); // relative from current path or abs
+ QTest::addColumn<QDirListing::IteratorFlags>("flags");
+ QTest::addColumn<QDir::Filters>("filters");
+ QTest::addColumn<QStringList>("nameFilters");
+ QTest::addColumn<QStringList>("entries");
+
+ QTest::newRow("no flags")
+ << QString("entrylist") << QDirListing::IteratorFlags{}
+ << QDir::Filters(QDir::NoFilter) << QStringList("*")
+ << QString(
+ "entrylist/.,"
+ "entrylist/..,"
+ "entrylist/file,"
+#ifndef Q_NO_SYMLINKS
+ "entrylist/linktofile.lnk,"
+#endif
+ "entrylist/directory,"
+#if !defined(Q_NO_SYMLINKS) && !defined(Q_NO_SYMLINKS_TO_DIRS)
+ "entrylist/linktodirectory.lnk,"
+#endif
+ "entrylist/writable").split(',');
+
+ QTest::newRow("NoDot")
+ << QString("entrylist") << QDirListing::IteratorFlags{}
+ << QDir::Filters(QDir::AllEntries | QDir::NoDot) << QStringList("*")
+ << QString(
+ "entrylist/..,"
+ "entrylist/file,"
+#ifndef Q_NO_SYMLINKS
+ "entrylist/linktofile.lnk,"
+#endif
+ "entrylist/directory,"
+#if !defined(Q_NO_SYMLINKS) && !defined(Q_NO_SYMLINKS_TO_DIRS)
+ "entrylist/linktodirectory.lnk,"
+#endif
+ "entrylist/writable").split(',');
+
+ QTest::newRow("NoDotDot")
+ << QString("entrylist") << QDirListing::IteratorFlags{}
+ << QDir::Filters(QDir::AllEntries | QDir::NoDotDot) << QStringList("*")
+ << QString(
+ "entrylist/.,"
+ "entrylist/file,"
+#ifndef Q_NO_SYMLINKS
+ "entrylist/linktofile.lnk,"
+#endif
+ "entrylist/directory,"
+#if !defined(Q_NO_SYMLINKS) && !defined(Q_NO_SYMLINKS_TO_DIRS)
+ "entrylist/linktodirectory.lnk,"
+#endif
+ "entrylist/writable").split(',');
+
+ QTest::newRow("NoDotAndDotDot")
+ << QString("entrylist") << QDirListing::IteratorFlags{}
+ << QDir::Filters(QDir::AllEntries | QDir::NoDotAndDotDot) << QStringList("*")
+ << QString(
+ "entrylist/file,"
+#ifndef Q_NO_SYMLINKS
+ "entrylist/linktofile.lnk,"
+#endif
+ "entrylist/directory,"
+#if !defined(Q_NO_SYMLINKS) && !defined(Q_NO_SYMLINKS_TO_DIRS)
+ "entrylist/linktodirectory.lnk,"
+#endif
+ "entrylist/writable").split(',');
+
+ QTest::newRow("QDir::Subdirectories | QDir::FollowSymlinks")
+ << QString("entrylist") << QDirListing::IteratorFlags(ItFlag::Recursive | ItFlag::FollowSymlinks)
+ << QDir::Filters(QDir::NoFilter) << QStringList("*")
+ << QString(
+ "entrylist/.,"
+ "entrylist/..,"
+ "entrylist/directory/.,"
+ "entrylist/directory/..,"
+ "entrylist/file,"
+#ifndef Q_NO_SYMLINKS
+ "entrylist/linktofile.lnk,"
+#endif
+ "entrylist/directory,"
+ "entrylist/directory/dummy,"
+#if !defined(Q_NO_SYMLINKS) && !defined(Q_NO_SYMLINKS_TO_DIRS)
+ "entrylist/linktodirectory.lnk,"
+#endif
+ "entrylist/writable").split(',');
+
+ QTest::newRow("QDir::Subdirectories / QDir::Files")
+ << QString("entrylist") << QDirListing::IteratorFlags(ItFlag::Recursive)
+ << QDir::Filters(QDir::Files) << QStringList("*")
+ << QString("entrylist/directory/dummy,"
+ "entrylist/file,"
+#ifndef Q_NO_SYMLINKS
+ "entrylist/linktofile.lnk,"
+#endif
+ "entrylist/writable").split(',');
+
+ QTest::newRow("QDir::Subdirectories | QDir::FollowSymlinks / QDir::Files")
+ << QString("entrylist") << QDirListing::IteratorFlags(ItFlag::Recursive | QDirListing::IteratorFlag::FollowSymlinks)
+ << QDir::Filters(QDir::Files) << QStringList("*")
+ << QString("entrylist/file,"
+#ifndef Q_NO_SYMLINKS
+ "entrylist/linktofile.lnk,"
+#endif
+ "entrylist/directory/dummy,"
+ "entrylist/writable").split(',');
+
+ QTest::newRow("empty, default")
+ << QString("empty") << QDirListing::IteratorFlags{}
+ << QDir::Filters(QDir::NoFilter) << QStringList("*")
+ << QString("empty/.,empty/..").split(',');
+
+ QTest::newRow("empty, QDir::NoDotAndDotDot")
+ << QString("empty") << QDirListing::IteratorFlags{}
+ << QDir::Filters(QDir::NoDotAndDotDot) << QStringList("*")
+ << QStringList();
+}
+
+void tst_QDirListing::iterateRelativeDirectory()
+{
+ QFETCH(QString, dirName);
+ QFETCH(QDirListing::IteratorFlags, flags);
+ QFETCH(QDir::Filters, filters);
+ QFETCH(QStringList, nameFilters);
+ QFETCH(const QStringList, entries);
+
+ QStringList list;
+ for (const auto &dirEntry : QDirListing(dirName, nameFilters, filters, flags)) {
+ // Using canonical file paths for final comparison
+ list << dirEntry.fileInfo().canonicalFilePath();
+ }
+
+ // The order of items returned by QDirListing is not guaranteed.
+ list.sort();
+
+ QStringList sortedEntries;
+ for (const QString &item : entries)
+ sortedEntries.append(QFileInfo(item).canonicalFilePath());
+ sortedEntries.sort();
+
+ if (sortedEntries != list) {
+ qDebug() << "ACTUAL: " << list;
+ qDebug() << "EXPECTED:" << sortedEntries;
+ }
+
+ QCOMPARE(list, sortedEntries);
+}
+
+void tst_QDirListing::iterateResource_data()
+{
+ QTest::addColumn<QString>("dirName"); // relative from current path or abs
+ QTest::addColumn<QDirListing::IteratorFlags>("flags");
+ QTest::addColumn<QDir::Filters>("filters");
+ QTest::addColumn<QStringList>("nameFilters");
+ QTest::addColumn<QStringList>("entries");
+
+ QTest::newRow("invalid") << QString::fromLatin1(":/testdata/burpaburpa") << QDirListing::IteratorFlags{}
+ << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*"))
+ << QStringList();
+ QTest::newRow("qrc:/testdata") << u":/testdata/"_s << QDirListing::IteratorFlags{}
+ << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*"))
+ << QString::fromLatin1(":/testdata/entrylist").split(QLatin1String(","));
+ QTest::newRow("qrc:/testdata/entrylist") << u":/testdata/entrylist"_s << QDirListing::IteratorFlags{}
+ << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*"))
+ << QString::fromLatin1(":/testdata/entrylist/directory,:/testdata/entrylist/file").split(QLatin1String(","));
+ QTest::newRow("qrc:/testdata recursive") << u":/testdata"_s
+ << QDirListing::IteratorFlags(ItFlag::Recursive)
+ << QDir::Filters(QDir::NoFilter) << QStringList(QLatin1String("*"))
+ << QString::fromLatin1(":/testdata/entrylist,:/testdata/entrylist/directory,:/testdata/entrylist/directory/dummy,:/testdata/entrylist/file").split(QLatin1String(","));
+}
+
+void tst_QDirListing::iterateResource()
+{
+ QFETCH(QString, dirName);
+ QFETCH(QDirListing::IteratorFlags, flags);
+ QFETCH(QDir::Filters, filters);
+ QFETCH(QStringList, nameFilters);
+ QFETCH(QStringList, entries);
+
+ QStringList list;
+ for (const auto &dirEntry : QDirListing(dirName, nameFilters, filters, flags)) {
+ QString dir = dirEntry.fileInfo().filePath();
+ if (!dir.startsWith(":/qt-project.org"))
+ list.emplace_back(std::move(dir));
+ }
+
+ list.sort();
+ QStringList sortedEntries = entries;
+ sortedEntries.sort();
+
+ if (sortedEntries != list) {
+ qDebug() << "ACTUAL:" << list;
+ qDebug() << "EXPECTED:" << sortedEntries;
+ }
+
+ QCOMPARE(list, sortedEntries);
+}
+
+void tst_QDirListing::stopLinkLoop()
+{
+#ifdef Q_OS_WIN
+ // ### Sadly, this is a platform difference right now.
+ createLink(QDir::currentPath() + QLatin1String("/entrylist"), "entrylist/entrylist1.lnk");
+ createLink("entrylist/.", "entrylist/entrylist2.lnk");
+ createLink("entrylist/../entrylist/.", "entrylist/entrylist3.lnk");
+ createLink("entrylist/..", "entrylist/entrylist4.lnk");
+ createLink(QDir::currentPath() + QLatin1String("/entrylist"), "entrylist/directory/entrylist1.lnk");
+ createLink("entrylist/.", "entrylist/directory/entrylist2.lnk");
+ createLink("entrylist/../directory/.", "entrylist/directory/entrylist3.lnk");
+ createLink("entrylist/..", "entrylist/directory/entrylist4.lnk");
+#else
+ createLink(QDir::currentPath() + QLatin1String("/entrylist"), "entrylist/entrylist1.lnk");
+ createLink(".", "entrylist/entrylist2.lnk");
+ createLink("../entrylist/.", "entrylist/entrylist3.lnk");
+ createLink("..", "entrylist/entrylist4.lnk");
+ createLink(QDir::currentPath() + QLatin1String("/entrylist"), "entrylist/directory/entrylist1.lnk");
+ createLink(".", "entrylist/directory/entrylist2.lnk");
+ createLink("../directory/.", "entrylist/directory/entrylist3.lnk");
+ createLink("..", "entrylist/directory/entrylist4.lnk");
+#endif
+
+ constexpr auto flags = ItFlag::Recursive | ItFlag::FollowSymlinks;
+ QDirListing dirIter(u"entrylist"_s, flags);
+ QStringList list;
+ int max = 200;
+ auto it = dirIter.begin();
+ while (--max && it != dirIter.end())
+ ++it;
+ QCOMPARE_GT(max, 0);
+
+ // The goal of this test is only to ensure that the test above don't malfunction
+}
+
+#ifdef QT_BUILD_INTERNAL
+class EngineWithNoIterator : public QFSFileEngine
+{
+public:
+ EngineWithNoIterator(const QString &fileName)
+ : QFSFileEngine(fileName)
+ { }
+
+ IteratorUniquePtr beginEntryList(const QString &, QDir::Filters, const QStringList &) override
+ { return nullptr; }
+};
+
+class EngineWithNoIteratorHandler : public QAbstractFileEngineHandler
+{
+ Q_DISABLE_COPY_MOVE(EngineWithNoIteratorHandler)
+public:
+ EngineWithNoIteratorHandler() = default;
+
+ std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override
+ {
+ return std::make_unique<EngineWithNoIterator>(fileName);
+ }
+};
+#endif
+
+#ifdef QT_BUILD_INTERNAL
+void tst_QDirListing::engineWithNoIterator()
+{
+ EngineWithNoIteratorHandler handler;
+
+ QDir("entrylist").entryList();
+ QVERIFY(true); // test that the above line doesn't crash
+}
+
+class CustomEngineHandler : public QAbstractFileEngineHandler
+{
+ Q_DISABLE_COPY_MOVE(CustomEngineHandler)
+public:
+ CustomEngineHandler() = default;
+
+ std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override
+ {
+ // We want to test QFSFileEngine specifically, so force QDirListing to use it
+ // over the default QFileSystemEngine
+ return std::make_unique<QFSFileEngine>(fileName);
+ }
+};
+
+void tst_QDirListing::testQFsFileEngineIterator()
+{
+ QFETCH(QString, dirName);
+ QFETCH(QStringList, nameFilters);
+ QFETCH(QDir::Filters, filters);
+ QFETCH(QDirListing::IteratorFlags, flags);
+
+ if (dirName == u"empty")
+ return; // This row isn't useful in this test
+
+ CustomEngineHandler handler;
+ bool isEmpty = true;
+ for (const auto &dirEntry : QDirListing(u"entrylist"_s, nameFilters, filters, flags)) {
+ if (dirEntry.filePath().contains(u"entrylist"))
+ isEmpty = false; // At least one entry in `entrylist` dir
+ }
+ QVERIFY(!isEmpty); // At least one entry
+}
+#endif
+
+void tst_QDirListing::absoluteFilePathsFromRelativeIteratorPath()
+{
+ for (const auto &dirEntry : QDirListing(u"entrylist/"_s, QDir::NoDotAndDotDot))
+ QVERIFY(dirEntry.absoluteFilePath().contains("entrylist"));
+}
+
+void tst_QDirListing::recurseWithFilters() const
+{
+ QSet<QString> actualEntries;
+ QSet<QString> expectedEntries;
+ expectedEntries.insert(QString::fromLatin1("recursiveDirs/dir1/textFileB.txt"));
+ expectedEntries.insert(QString::fromLatin1("recursiveDirs/textFileA.txt"));
+
+ for (const auto &dirEntry : QDirListing(u"recursiveDirs/"_s, QStringList{u"*.txt"_s},
+ QDir::Files, ItFlag::Recursive)) {
+ actualEntries.insert(dirEntry.filePath());
+ }
+
+ QCOMPARE(actualEntries, expectedEntries);
+}
+
+void tst_QDirListing::longPath()
+{
+ QDir dir;
+ dir.mkdir("longpaths");
+ dir.cd("longpaths");
+
+ QString dirName = "x";
+ qsizetype n = 0;
+ while (dir.exists(dirName) || dir.mkdir(dirName)) {
+ ++n;
+ dirName.append('x');
+ }
+
+ QDirListing dirList(dir.absolutePath(), QDir::NoDotAndDotDot|QDir::Dirs, ItFlag::Recursive);
+ qsizetype m = 0;
+ for (auto it = dirList.begin(); it != dirList.end(); ++it)
+ ++m;
+
+ QCOMPARE(n, m);
+
+ dirName.chop(1);
+ while (dirName.size() > 0 && dir.exists(dirName) && dir.rmdir(dirName))
+ dirName.chop(1);
+
+ dir.cdUp();
+ dir.rmdir("longpaths");
+}
+
+void tst_QDirListing::dirorder()
+{
+ QStringList entries;
+ for (const auto &dirEntry : QDirListing(u"foo"_s, ItFlag::Recursive))
+ entries.append(dirEntry.filePath());
+
+ QCOMPARE_GT(entries.indexOf(u"foo/bar"_s), entries.indexOf(u"foo"_s));
+}
+
+void tst_QDirListing::relativePaths()
+{
+ for (const auto &dirEntry : QDirListing(u"*"_s, ItFlag::Recursive))
+ QCOMPARE(dirEntry.filePath(), QDir::cleanPath(dirEntry.filePath()));
+}
+
+#if defined(Q_OS_WIN)
+void tst_QDirListing::uncPaths_data()
+{
+ QTest::addColumn<QString>("dirName");
+ QTest::newRow("uncserver")
+ <<QString("//" + QTest::uncServerName());
+ QTest::newRow("uncserver/testshare")
+ <<QString("//" + QTest::uncServerName() + "/testshare");
+ QTest::newRow("uncserver/testshare/tmp")
+ <<QString("//" + QTest::uncServerName() + "/testshare/tmp");
+}
+void tst_QDirListing::uncPaths()
+{
+ QFETCH(QString, dirName);
+ constexpr auto dirFilters = QDir::AllEntries | QDir::NoDotAndDotDot;
+ for (const auto &dirEntry : QDirListing(dirName, dirFilters, ItFlag::Recursive)) {
+ const QString &filePath = dirEntry.filePath();
+ QCOMPARE(filePath, QDir::cleanPath(filePath));
+ }
+}
+#endif
+
+#ifndef Q_OS_WIN
+// In Unix it is easy to create hidden files, but in Windows it requires
+// a special call since hidden files need to be "marked" while in Unix
+// anything starting by a '.' is a hidden file.
+// For that reason this test is not run in Windows.
+void tst_QDirListing::hiddenDirs_hiddenFiles()
+{
+ // Only files
+ {
+ int matches = 0;
+ int failures = 0;
+ constexpr auto filters = QDir::Files | QDir::Hidden | QDir::NoDotAndDotDot;
+ for (const auto &dirEntry : QDirListing(u"hiddenDirs_hiddenFiles"_s, filters,
+ ItFlag::Recursive)) {
+ ++matches;
+ if (dirEntry.isDir())
+ ++failures; // search was only supposed to find files
+ }
+ QCOMPARE(matches, 6);
+ QCOMPARE(failures, 0);
+ }
+ // Only directories
+ {
+ int matches = 0;
+ int failures = 0;
+ constexpr auto filters = QDir::Dirs | QDir::Hidden | QDir::NoDotAndDotDot;
+ for (const auto &dirEntry : QDirListing(u"hiddenDirs_hiddenFiles"_s, filters,
+ ItFlag::Recursive)) {
+ ++matches;
+ if (!dirEntry.isDir())
+ ++failures; // search was only supposed to find files
+ }
+ QCOMPARE(matches, 6);
+ QCOMPARE(failures, 0);
+ }
+}
+#endif // Q_OS_WIN
+
+QTEST_MAIN(tst_QDirListing)
+
+#include "tst_qdirlisting.moc"
+
diff --git a/tests/auto/corelib/io/qfile/CMakeLists.txt b/tests/auto/corelib/io/qfile/CMakeLists.txt
index d9c148e9db..567dcc8a2e 100644
--- a/tests/auto/corelib/io/qfile/CMakeLists.txt
+++ b/tests/auto/corelib/io/qfile/CMakeLists.txt
@@ -1,7 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qfile Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfile LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "dosfile.txt")
list(APPEND test_data "noendofline.txt")
@@ -16,7 +25,7 @@ list(APPEND test_data "resources/file1.ext1")
qt_internal_add_test(tst_qfile
SOURCES
tst_qfile.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::TestPrivate
TESTDATA ${test_data}
@@ -59,7 +68,7 @@ qt_internal_add_resource(tst_qfile "copy-fallback"
#####################################################################
qt_internal_extend_target(tst_qfile CONDITION TARGET Qt::Network
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
@@ -74,7 +83,7 @@ qt_internal_extend_target(tst_qfile CONDITION CONFIG___contains___builtin_testda
)
qt_internal_extend_target(tst_qfile CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
ole32
uuid
)
diff --git a/tests/auto/corelib/io/qfile/stdinprocess/CMakeLists.txt b/tests/auto/corelib/io/qfile/stdinprocess/CMakeLists.txt
index e034e0502c..2a4c2a9615 100644
--- a/tests/auto/corelib/io/qfile/stdinprocess/CMakeLists.txt
+++ b/tests/auto/corelib/io/qfile/stdinprocess/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from stdinprocess.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## stdinprocess_helper Binary:
diff --git a/tests/auto/corelib/io/qfile/stdinprocess/main.cpp b/tests/auto/corelib/io/qfile/stdinprocess/main.cpp
index 77a1932bd5..0f92ba2670 100644
--- a/tests/auto/corelib/io/qfile/stdinprocess/main.cpp
+++ b/tests/auto/corelib/io/qfile/stdinprocess/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 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/QCoreApplication>
@@ -41,13 +16,16 @@ int main(int argc, char *argv[])
QFile file;
if (strcmp(argv[1], "all") == 0) {
- file.open(stdin, QFile::ReadWrite);
+ if (!file.open(stdin, QFile::ReadWrite))
+ return 1;
printf("%s", file.readAll().constData());
} else if (strcmp(argv[1], "line") == 0) {
if (strcmp(argv[2], "0") == 0) {
- file.open(stdin, QFile::ReadWrite);
+ if (!file.open(stdin, QFile::ReadWrite))
+ return 1;
} else {
- file.open(0, QFile::ReadWrite);
+ if (!file.open(0, QFile::ReadWrite))
+ return 1;
}
char line[1024];
diff --git a/tests/auto/corelib/io/qfile/tst_qfile.cpp b/tests/auto/corelib/io/qfile/tst_qfile.cpp
index 8ea01b4680..d69cc167d6 100644
--- a/tests/auto/corelib/io/qfile/tst_qfile.cpp
+++ b/tests/auto/corelib/io/qfile/tst_qfile.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2021 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2021 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#define _CRT_SECURE_NO_WARNINGS 1
@@ -38,16 +13,22 @@
#include <QDir>
#include <QFile>
#include <QFileInfo>
-#include <QTemporaryDir>
-#include <QTemporaryFile>
#include <QOperatingSystemVersion>
+#include <QRandomGenerator>
#include <QStorageInfo>
#include <QScopeGuard>
+#include <QStandardPaths>
+#include <QTemporaryDir>
+#include <QTemporaryFile>
#include <private/qabstractfileengine_p.h>
#include <private/qfsfileengine_p.h>
#include <private/qfilesystemengine_p.h>
+#ifdef Q_OS_WIN
+#include <QtCore/private/qfunctions_win_p.h>
+#endif
+
#include <QtTest/private/qemulationdetector_p.h>
#ifdef Q_OS_WIN
@@ -69,10 +50,12 @@ QT_END_NAMESPACE
# include <unistd.h>
# include <private/qcore_unix_p.h>
#endif
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
# include <sys/mount.h>
#elif defined(Q_OS_LINUX)
+# include <sys/eventfd.h>
# include <sys/vfs.h>
+# include <sys/wait.h>
#elif defined(Q_OS_FREEBSD)
# include <sys/param.h>
# include <sys/mount.h>
@@ -99,9 +82,7 @@ QT_END_NAMESPACE
# undef fileno
#endif
-#if defined(Q_OS_WIN)
-#include "../../../network-settings.h"
-#endif
+#include "../../../../shared/filesystem.h"
#ifndef STDIN_FILENO
#define STDIN_FILENO 0
@@ -119,6 +100,8 @@ QT_END_NAMESPACE
#define QT_OPEN_BINARY 0
#endif
+using namespace Qt::StringLiterals;
+
Q_DECLARE_METATYPE(QFile::FileError)
@@ -192,7 +175,11 @@ private slots:
#ifdef Q_OS_WIN
void permissionsNtfs_data();
void permissionsNtfs();
+#if QT_DEPRECATED_SINCE(6,6)
+ void deprecatedNtfsPermissionCheck();
#endif
+#endif
+ void setPermissions_data();
void setPermissions();
void copy();
void copyAfterFail();
@@ -215,8 +202,12 @@ private slots:
void flush();
void bufferedRead();
#ifdef Q_OS_UNIX
+ void isSequential_data();
void isSequential();
#endif
+ void decodeName_data();
+ void decodeName();
+ void encodeName_data() { decodeName_data(); }
void encodeName();
void truncate();
void seekToPos();
@@ -238,12 +229,15 @@ private slots:
void writeLargeDataBlock();
void readFromWriteOnlyFile();
void writeToReadOnlyFile();
-#if defined(Q_OS_LINUX) || defined(Q_OS_AIX) || defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
+#if defined(Q_OS_LINUX)
+ void virtualFile_data();
void virtualFile();
#endif
-#ifdef Q_OS_UNIX
+#if defined(Q_OS_UNIX) && !defined(Q_OS_WASM)
void unixPipe_data();
void unixPipe();
+ void unixFifo_data() { unixPipe_data(); }
+ void unixFifo();
void socketPair_data() { unixPipe_data(); }
void socketPair();
#endif
@@ -295,6 +289,10 @@ private slots:
void moveToTrash_data();
void moveToTrash();
+ void moveToTrashDuplicateName();
+ void moveToTrashOpenFile_data();
+ void moveToTrashOpenFile();
+ void moveToTrashXdgSafety();
void stdfilesystem();
@@ -422,7 +420,8 @@ void tst_QFile::cleanup()
// Clean out everything except the readonly-files.
const QDir dir(m_temporaryDir.path());
- foreach (const QFileInfo &fi, dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot)) {
+ const auto entries = dir.entryInfoList(QDir::AllEntries | QDir::NoDotAndDotDot);
+ for (const QFileInfo &fi : entries) {
const QString fileName = fi.fileName();
if (fileName != QLatin1String(noReadFile) && fileName != QLatin1String(readOnlyFile)) {
const QString absoluteFilePath = fi.absoluteFilePath();
@@ -440,6 +439,8 @@ void tst_QFile::cleanup()
tst_QFile::tst_QFile() : m_oldDir(QDir::currentPath())
{
+ QStandardPaths::setTestModeEnabled(true);
+ QDir().mkpath(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation));
}
static QByteArray msgOpenFailed(QIODevice::OpenMode om, const QFile &file)
@@ -565,7 +566,7 @@ void tst_QFile::exists()
QVERIFY(!file.exists());
#if defined(Q_OS_WIN)
- const QString uncPath = "//" + QtNetworkSettings::winServerName() + "/testshare/readme.txt";
+ const QString uncPath = "//" + QTest::uncServerName() + "/testshare/readme.txt";
QFile unc(uncPath);
QVERIFY2(unc.exists(), msgFileDoesNotExist(uncPath).constData());
#endif
@@ -631,7 +632,7 @@ void tst_QFile::open_data()
QTest::newRow("//./PhysicalDrive0") << QString("//./PhysicalDrive0") << int(QIODevice::ReadOnly)
<< false << QFile::OpenError;
}
- QTest::newRow("uncFile") << "//" + QtNetworkSettings::winServerName() + "/testshare/test.pri" << int(QIODevice::ReadOnly)
+ QTest::newRow("uncFile") << "//" + QTest::uncServerName() + "/testshare/test.pri" << int(QIODevice::ReadOnly)
<< true << QFile::NoError;
#endif
}
@@ -645,7 +646,7 @@ void tst_QFile::open()
QFETCH( bool, ok );
-#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS)
+#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS) && !defined(Q_OS_WASM)
if (::getuid() == 0)
// root and Chuck Norris don't care for file permissions. Skip.
QSKIP("Running this test as root doesn't make sense");
@@ -705,7 +706,7 @@ void tst_QFile::size_data()
QTest::newRow( "exist01" ) << m_testFile << (qint64)245;
#if defined(Q_OS_WIN)
// Only test UNC on Windows./
- QTest::newRow("unc") << "//" + QString(QtNetworkSettings::winServerName() + "/testshare/test.pri") << (qint64)34;
+ QTest::newRow("unc") << "//" + QString(QTest::uncServerName() + "/testshare/test.pri") << (qint64)34;
#endif
}
@@ -1003,7 +1004,6 @@ void tst_QFile::readAllStdin()
process.start(m_stdinProcess, QStringList(QStringLiteral("all")));
QVERIFY2(process.waitForStarted(), qPrintable(process.errorString()));
for (int i = 0; i < 5; ++i) {
- QTest::qWait(1000);
process.write(lotsOfData);
while (process.bytesToWrite() > 0)
QVERIFY(process.waitForBytesWritten());
@@ -1038,7 +1038,6 @@ void tst_QFile::readLineStdin()
QIODevice::Text | QIODevice::ReadWrite);
QVERIFY2(process.waitForStarted(), qPrintable(process.errorString()));
for (int i = 0; i < 5; ++i) {
- QTest::qWait(1000);
process.write(lotsOfData);
while (process.bytesToWrite() > 0)
QVERIFY(process.waitForBytesWritten());
@@ -1119,7 +1118,7 @@ void tst_QFile::missingEndOfLine()
void tst_QFile::readBlock()
{
QFile f( m_testFile );
- f.open( QIODevice::ReadOnly );
+ QVERIFY( f.open( QIODevice::ReadOnly ) );
int length = 0;
char p[256];
@@ -1134,7 +1133,7 @@ void tst_QFile::readBlock()
void tst_QFile::getch()
{
QFile f( m_testFile );
- f.open( QIODevice::ReadOnly );
+ QVERIFY( f.open( QIODevice::ReadOnly ) );
char c;
int i = 0;
@@ -1221,6 +1220,11 @@ static inline QChar invalidDriveLetter()
void tst_QFile::invalidFile_data()
{
QTest::addColumn<QString>("fileName");
+
+#if defined(Q_OS_WASM)
+ QSKIP("No invalid files on wasm");
+#endif
+
#if !defined(Q_OS_WIN)
QTest::newRow( "x11" ) << QString( "qwe//" );
#else
@@ -1235,7 +1239,6 @@ void tst_QFile::invalidFile_data()
QTest::newRow( "pipe" ) << QString( "fail|invalid" );
#endif
}
-
void tst_QFile::invalidFile()
{
QFETCH( QString, fileName );
@@ -1289,8 +1292,7 @@ void tst_QFile::createFilePermissions()
QFETCH(QFile::Permissions, permissions);
#ifdef Q_OS_WIN
- QScopedValueRollback<int> ntfsMode(qt_ntfs_permission_lookup);
- ++qt_ntfs_permission_lookup;
+ QNtfsPermissionCheckGuard permissionGuard;
#endif
#ifdef Q_OS_UNIX
auto restoreMask = qScopeGuard([oldMask = umask(0)] { umask(oldMask); });
@@ -1302,7 +1304,7 @@ void tst_QFile::createFilePermissions()
QFile::ReadOwner, QFile::WriteOwner, QFile::ExeOwner
};
- const QString fileName = u"createme.txt"_qs;
+ const QString fileName = u"createme.txt"_s;
QFile::remove(fileName);
QVERIFY(!QFile::exists(fileName));
@@ -1379,7 +1381,10 @@ void tst_QFile::permissions_data()
QTest::addColumn<bool>("expected");
QTest::addColumn<bool>("create");
+#ifndef Q_OS_WASM
+ // Application path is empty on wasm
QTest::newRow("data0") << QCoreApplication::instance()->applicationFilePath() << uint(QFile::ExeUser) << true << false;
+#endif
QTest::newRow("data1") << m_testSourceFile << uint(QFile::ReadUser) << true << false;
QTest::newRow("readonly") << QString::fromLatin1("readonlyfile") << uint(QFile::WriteUser) << false << false;
QTest::newRow("longfile") << QString::fromLatin1("longFileNamelongFileNamelongFileNamelongFileName"
@@ -1410,11 +1415,11 @@ void tst_QFile::permissions()
QFile::Permissions staticResult = QFile::permissions(file) & perms;
if (create) {
- QFile::remove(file);
+ QVERIFY(QFile::remove(file));
}
#if defined(Q_OS_WIN)
- if (qt_ntfs_permission_lookup)
+ if (qAreNtfsPermissionChecksEnabled())
QEXPECT_FAIL("readonly", "QTBUG-25630", Abort);
#endif
#ifdef Q_OS_UNIX
@@ -1436,27 +1441,61 @@ void tst_QFile::permissionsNtfs_data()
void tst_QFile::permissionsNtfs()
{
- QScopedValueRollback<int> ntfsMode(qt_ntfs_permission_lookup);
- qt_ntfs_permission_lookup++;
+ QNtfsPermissionCheckGuard permissionGuard;
permissions();
}
+
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+#if QT_DEPRECATED_SINCE(6,6)
+void tst_QFile::deprecatedNtfsPermissionCheck()
+{
+ QScopedValueRollback<int> guard(qt_ntfs_permission_lookup);
+
+ QCOMPARE(qAreNtfsPermissionChecksEnabled(), false);
+ qt_ntfs_permission_lookup++;
+ QCOMPARE(qAreNtfsPermissionChecksEnabled(), true);
+ qt_ntfs_permission_lookup--;
+ QCOMPARE(qAreNtfsPermissionChecksEnabled(), false);
+}
+#endif
+QT_WARNING_POP
+
#endif
+void tst_QFile::setPermissions_data()
+{
+ QTest::addColumn<bool>("opened");
+ QTest::newRow("closed") << false; // chmod()
+ QTest::newRow("opened") << true; // fchmod()
+}
+
void tst_QFile::setPermissions()
{
- if ( QFile::exists( "createme.txt" ) )
- QFile::remove( "createme.txt" );
+#ifdef Q_OS_UNIX
+ if (::getuid() == 0)
+ QSKIP("Running this test as root doesn't make sense");
+#endif
+ QFETCH(bool, opened);
+
+ auto remove = []() { QFile::remove("createme.txt"); };
+ auto guard = qScopeGuard(remove);
+ remove();
QVERIFY( !QFile::exists( "createme.txt" ) );
QFile f("createme.txt");
QVERIFY2(f.open(QIODevice::WriteOnly | QIODevice::Truncate), msgOpenFailed(f).constData());
f.putChar('a');
- f.close();
+ if (!opened)
+ f.close();
QFile::Permissions perms(QFile::WriteUser | QFile::ReadUser);
+ QVERIFY(f.setPermissions(QFile::ReadUser));
+ QVERIFY((f.permissions() & perms) == QFile::ReadUser);
QVERIFY(f.setPermissions(perms));
QVERIFY((f.permissions() & perms) == perms);
+ // we should end the test with the file in writeable state
}
void tst_QFile::copy()
@@ -1562,16 +1601,11 @@ void tst_QFile::copyFallback()
#if defined(Q_OS_WIN)
static QString getWorkingDirectoryForLink(const QString &linkFileName)
{
- bool neededCoInit = false;
QString ret;
+ QComHelper comHelper;
IShellLink *psl;
HRESULT hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl);
- if (hres == CO_E_NOTINITIALIZED) { // COM was not initialized
- neededCoInit = true;
- CoInitialize(NULL);
- hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&psl);
- }
if (SUCCEEDED(hres)) { // Get pointer to the IPersistFile interface.
IPersistFile *ppf;
@@ -1590,10 +1624,6 @@ static QString getWorkingDirectoryForLink(const QString &linkFileName)
psl->Release();
}
- if (neededCoInit) {
- CoUninitialize();
- }
-
return ret;
}
#endif
@@ -1648,7 +1678,7 @@ void tst_QFile::absolutePathLinkToRelativePath()
QFile::remove("myDir/myLink.lnk");
QDir dir;
dir.mkdir("myDir");
- QFile("myDir/test.txt").open(QFile::WriteOnly);
+ QVERIFY(QFile("myDir/test.txt").open(QFile::WriteOnly));
#ifdef Q_OS_WIN
QVERIFY(QFile::link("test.txt", "myDir/myLink.lnk"));
@@ -1752,7 +1782,7 @@ void tst_QFile::writeTextFile()
QCOMPARE(file.write(in), qlonglong(in.size()));
file.close();
- file.open(QFile::ReadOnly);
+ QVERIFY(file.open(QFile::ReadOnly));
QCOMPARE(file.readAll(), out);
}
@@ -1792,7 +1822,7 @@ void tst_QFile::largeUncFileSupport()
qint64 size = Q_INT64_C(8589934592);
qint64 dataOffset = Q_INT64_C(8589914592);
QByteArray knownData("LargeFile content at offset 8589914592");
- QString largeFile("//" + QtNetworkSettings::winServerName() + "/testsharelargefile/file.bin");
+ QString largeFile("//" + QTest::uncServerName() + "/testsharelargefile/file.bin");
const QByteArray largeFileEncoded = QFile::encodeName(largeFile);
{
@@ -1889,26 +1919,64 @@ void tst_QFile::bufferedRead()
}
#ifdef Q_OS_UNIX
-void tst_QFile::isSequential()
+void tst_QFile::isSequential_data()
{
- QFile zero("/dev/zero");
- QVERIFY2(zero.open(QFile::ReadOnly), msgOpenFailed(zero).constData());
- QVERIFY(zero.isSequential());
+ QTest::addColumn<QString>("deviceName");
+ QTest::addColumn<bool>("acceptFailOpen");
- QFile null("/dev/null");
- QVERIFY(null.open(QFile::ReadOnly));
- QVERIFY(null.isSequential());
+ QTest::newRow("/dev/null") << QString("/dev/null") << false;
+ QTest::newRow("/dev/tty") << QString("/dev/tty") << true;
+ QTest::newRow("/dev/zero") << QString("/dev/zero") << false;
+}
+
+void tst_QFile::isSequential()
+{
+ QFETCH(QString, deviceName);
+ QFETCH(bool, acceptFailOpen);
- // /dev/tty will fail to open if we don't have a controlling TTY
- QFile tty("/dev/tty");
- if (tty.open(QFile::ReadOnly))
- QVERIFY(tty.isSequential());
+ if (access(deviceName.toUtf8().data(), R_OK) == 0) {
+ QFile device(deviceName);
+ QVERIFY2(device.open(QFile::ReadOnly) || acceptFailOpen, msgOpenFailed(device).constData());
+ QVERIFY(!device.isOpen() || device.isSequential());
+ }
}
#endif
+void tst_QFile::decodeName_data()
+{
+ QTest::addColumn<QByteArray>("bytearray");
+ QTest::addColumn<QString>("qstring");
+
+ QTest::newRow("null") << QByteArray() << QString();
+ QTest::newRow("simple") << "/path/to/file"_ba << u"/path/to/file"_s;
+
+#ifndef Q_OS_WIN
+# ifdef Q_OS_DARWIN
+ // Mac always expects filenames in UTF-8... and decomposed...
+ QTest::newRow("filé") << "/path/to/file\xCC\x81"_ba << u"/path/to/filé"_s;
+# else
+ QTest::newRow("filé") << "/path/to/fil\xC3\xA9"_ba << u"/path/to/filé"_s;
+# endif
+ QTest::newRow("fraction-slash")
+ << "/path\342\201\204to\342\201\204file"_ba << u"/pathâ„toâ„file"_s;
+ QTest::newRow("fraction-slash-u16") << "/path\u2044to\u2044file"_ba << u"/pathâ„toâ„file"_s;
+#endif // !Q_OS_WIN
+}
+
+void tst_QFile::decodeName()
+{
+ QFETCH(QByteArray, bytearray);
+ QFETCH(QString, qstring);
+
+ QCOMPARE(QFile::decodeName(bytearray), qstring);
+}
+
void tst_QFile::encodeName()
{
- QCOMPARE(QFile::encodeName(QString()), QByteArray());
+ QFETCH(QString, qstring);
+ QFETCH(QByteArray, bytearray);
+
+ QCOMPARE(QFile::encodeName(qstring), bytearray);
}
void tst_QFile::truncate()
@@ -2266,19 +2334,24 @@ private:
class MyHandler : public QAbstractFileEngineHandler
{
+ Q_DISABLE_COPY_MOVE(MyHandler)
public:
- inline QAbstractFileEngine *create(const QString &) const override
+ MyHandler() = default;
+ std::unique_ptr<QAbstractFileEngine> create(const QString &) const override
{
- return new MyEngine(1);
+ return std::make_unique<MyEngine>(1);
}
};
class MyHandler2 : public QAbstractFileEngineHandler
{
+ Q_DISABLE_COPY_MOVE(MyHandler2)
public:
- inline QAbstractFileEngine *create(const QString &) const override
+ MyHandler2() = default;
+
+ std::unique_ptr<QAbstractFileEngine> create(const QString &) const override
{
- return new MyEngine(2);
+ return std::make_unique<MyEngine>(2);
}
};
#endif
@@ -2306,8 +2379,11 @@ void tst_QFile::fileEngineHandler()
#ifdef QT_BUILD_INTERNAL
class MyRecursiveHandler : public QAbstractFileEngineHandler
{
+ Q_DISABLE_COPY_MOVE(MyRecursiveHandler)
public:
- inline QAbstractFileEngine *create(const QString &fileName) const override
+ MyRecursiveHandler() = default;
+
+ std::unique_ptr<QAbstractFileEngine> create(const QString &fileName) const override
{
if (fileName.startsWith(":!")) {
QDir dir;
@@ -2318,9 +2394,9 @@ public:
const QString realFile = m_dataDir->filePath(fileName.mid(2));
#endif
if (dir.exists(realFile))
- return new QFSFileEngine(realFile);
+ return std::make_unique<QFSFileEngine>(realFile);
}
- return 0;
+ return nullptr;
}
#ifdef BUILTIN_TESTDATA
@@ -2345,7 +2421,7 @@ void tst_QFile::useQFileInAFileHandler()
void tst_QFile::getCharFF()
{
QFile file("file.txt");
- file.open(QFile::ReadWrite);
+ QVERIFY(file.open(QFile::ReadWrite));
file.write("\xff\xff\xff");
file.flush();
file.seek(0);
@@ -2448,7 +2524,7 @@ void tst_QFile::fullDisk()
QVERIFY(!file.isOpen());
QCOMPARE(file.error(), QFile::ResourceError);
- file.open(QIODevice::WriteOnly);
+ QVERIFY2(file.open(QIODevice::WriteOnly), msgOpenFailed(file).constData());
QCOMPARE(file.error(), QFile::NoError);
QVERIFY(file.flush()); // Shouldn't inherit write buffer
file.close();
@@ -2473,7 +2549,7 @@ void tst_QFile::writeLargeDataBlock_data()
#if defined(Q_OS_WIN) && !defined(QT_NO_NETWORK)
// Some semi-randomness to avoid collisions.
QTest::newRow("unc file")
- << QString("//" + QtNetworkSettings::winServerName() + "/TESTSHAREWRITABLE/largefile-%1-%2.txt")
+ << QString("//" + QTest::uncServerName() + "/TESTSHAREWRITABLE/largefile-%1-%2.txt")
.arg(QHostInfo::localHostName())
.arg(QTime::currentTime().msec()) << (int)OpenQFile;
#endif
@@ -2566,19 +2642,42 @@ void tst_QFile::writeToReadOnlyFile()
QCOMPARE(file.write(&c, 1), qint64(-1));
}
-#if defined(Q_OS_LINUX) || defined(Q_OS_AIX) || defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
+#if defined(Q_OS_LINUX)
// This platform have 0-sized virtual files
+void tst_QFile::virtualFile_data()
+{
+ QTest::addColumn<QIODevice::OpenMode>("mode");
+ QTest::newRow("buffered") << QIODevice::OpenMode();
+ QTest::newRow("unbuffered") << QIODevice::OpenMode(QIODevice::Unbuffered);
+}
+
void tst_QFile::virtualFile()
{
- // test if QFile works with virtual files
- QString fname;
-#if defined(Q_OS_LINUX)
- fname = "/proc/self/maps";
-#elif defined(Q_OS_AIX)
- fname = QString("/proc/%1/map").arg(getpid());
-#else // defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
- fname = "/proc/curproc/map";
-#endif
+ QFETCH(QIODevice::OpenMode, mode);
+
+ // We need to test a large-ish /proc file on Linux, one that is usually
+ // over 4 kB (because the kernel writes in chunks of that), has a
+ // cross-platform file format, and is definitely readable. The best
+ // candidate and the one we can verify anything in is /proc/<PID>/maps.
+ // However, our act of reading may change the map because we allocate
+ // memory, so we fork() here so we have a frozen snapshot of the file.
+
+ int efd = eventfd(0, EFD_CLOEXEC);
+ pid_t pid = fork();
+ if (pid == 0) {
+ // child
+ uint64_t val;
+ eventfd_read(efd, &val);
+ _exit(0);
+ }
+ QVERIFY2(pid > 0, "fork failed: " + qt_error_string().toLocal8Bit());
+ auto waitForChild = qScopeGuard([=] {
+ eventfd_write(efd, 1);
+ close(efd);
+ waitpid(pid, nullptr, 0);
+ });
+
+ QString fname = u"/proc/%1/maps"_s.arg(pid);
// consistency check
QFileInfo fi(fname);
@@ -2588,12 +2687,8 @@ void tst_QFile::virtualFile()
// open the file
QFile f(fname);
- QVERIFY2(f.open(QIODevice::ReadOnly), msgOpenFailed(f).constData());
- if (QTestPrivate::isRunningArmOnX86())
- QEXPECT_FAIL("","QEMU does not read /proc/self/maps size correctly", Continue);
+ QVERIFY2(f.open(QIODevice::ReadOnly | mode), msgOpenFailed(f).constData());
QCOMPARE(f.size(), Q_INT64_C(0));
- if (QTestPrivate::isRunningArmOnX86())
- QEXPECT_FAIL("","QEMU does not read /proc/self/maps size correctly", Continue);
QVERIFY(f.atEnd());
// read data
@@ -2601,22 +2696,59 @@ void tst_QFile::virtualFile()
QCOMPARE(data.size(), 16);
QCOMPARE(f.pos(), Q_INT64_C(16));
+ // seeking
+ QVERIFY(f.seek(1));
+ QCOMPARE(f.pos(), Q_INT64_C(1));
+ QVERIFY(f.seek(0));
+ QCOMPARE(f.pos(), Q_INT64_C(0));
+
// line-reading
- data = f.readLine();
- QVERIFY(!data.isEmpty());
+ QList<QByteArray> lines;
+ for (data = f.readLine(); !data.isEmpty(); data = f.readLine()) {
+ // chop the newline -- not using .trimmed() so cut exactly one byte
+ data.chop(1);
+ lines += std::move(data);
+ }
+
+ if (!QT_CONFIG(static) && !QTestPrivate::isRunningArmOnX86()) {
+ // we must be able to find QtCore and QtTest somewhere
+ static const char corelib[] = "libQt" QT_STRINGIFY(QT_VERSION_MAJOR) "Core";
+ static const char testlib[] = "libQt" QT_STRINGIFY(QT_VERSION_MAJOR) "Test";
+ auto contains = [&](QByteArrayView text, quintptr ptr = 0) {
+ // this is not the same a QList::contains()
+ return std::any_of(lines.constBegin(), lines.constEnd(), [=](QByteArrayView entry) {
+ if (!entry.contains(text))
+ return false;
+ if (!ptr)
+ return true;
+ qsizetype dash = entry.indexOf('-');
+ qsizetype space = entry.indexOf(' ', dash);
+ quintptr start = entry.left(dash).toULong(nullptr, 16);
+ quintptr end = entry.left(space).mid(dash + 1).toULong(nullptr, 16);
+ return start <= ptr && ptr <= end;
+ });
+ };
+ QVERIFY(contains(corelib, quintptr(f.metaObject())));
+ QVERIFY(contains(testlib));
+ }
// read all:
+ QVERIFY(f.seek(0));
data = f.readAll();
QVERIFY(f.pos() != 0);
QVERIFY(!data.isEmpty());
- // seeking
- QVERIFY(f.seek(1));
- QCOMPARE(f.pos(), Q_INT64_C(1));
+ QCOMPARE(data, lines.join('\n') + '\n');
}
#endif // defined(Q_OS_LINUX) || defined(Q_OS_AIX) || defined(Q_OS_FREEBSD) || defined(Q_OS_NETBSD)
-#ifdef Q_OS_UNIX
+#if defined (Q_OS_UNIX) && !defined(Q_OS_WASM)
+// wasm does not have working fifo
+// https://github.com/nodejs/node/issues/38344
+// wasm does not have blocking pipe I/O
+// https://github.com/emscripten-core/emscripten/issues/13214
+// wasm does not, by default, have socketpair
+// https://emscripten.org/docs/porting/networking.html
static void unixPipe_helper(int pipes[2])
{
// start a thread and wait for it to write a first byte
@@ -2628,6 +2760,7 @@ static void unixPipe_helper(int pipes[2])
c = 2;
qt_safe_write(fd, &c, 1);
}));
+
thr->start();
// synchronize with the thread having started
@@ -2636,12 +2769,11 @@ static void unixPipe_helper(int pipes[2])
QCOMPARE(c, '\1');
QFETCH(bool, useStdio);
- QElapsedTimer timer;
- timer.start();
QFile f;
if (useStdio) {
FILE *fh = fdopen(pipes[0], "rb");
- QVERIFY(f.open(fh, QIODevice::ReadOnly | QIODevice::Unbuffered));
+ QVERIFY(f.open(fh, QIODevice::ReadOnly | QIODevice::Unbuffered, QFileDevice::AutoCloseHandle));
+ pipes[0] = -1; // QFile fclose()s the FILE* and that close()s the fd
} else {
QVERIFY(f.open(pipes[0], QIODevice::ReadOnly | QIODevice::Unbuffered));
}
@@ -2650,8 +2782,6 @@ static void unixPipe_helper(int pipes[2])
c = 0;
QCOMPARE(f.read(&c, 1), 1);
QCOMPARE(c, '\2');
- int elapsed = timer.elapsed();
- QVERIFY2(elapsed >= Timeout, QByteArray::number(elapsed));
thr->wait();
}
@@ -2668,25 +2798,81 @@ void tst_QFile::unixPipe()
int pipes[2] = { -1, -1 };
QVERIFY2(pipe(pipes) == 0, qPrintable(qt_error_string()));
unixPipe_helper(pipes);
- qt_safe_close(pipes[0]);
+ if (pipes[0] != -1)
+ qt_safe_close(pipes[0]);
qt_safe_close(pipes[1]);
}
+void tst_QFile::unixFifo()
+{
+ QByteArray fifopath = []() -> QByteArray {
+ QByteArray dir = qgetenv("XDG_RUNTIME_DIR");
+ if (dir.isEmpty())
+ dir = QFile::encodeName(QDir::tempPath());
+
+ // try to create a FIFO
+ for (int attempts = 10; attempts; --attempts) {
+ QByteArray fifopath = dir + "/tst_qfile_fifo." +
+ QByteArray::number(QRandomGenerator::global()->generate());
+ int ret = mkfifo(fifopath, 0600);
+ if (ret == 0)
+ return fifopath;
+ }
+
+ qWarning("Failed to create a FIFO at %s; last error was %s",
+ dir.constData(), strerror(errno));
+ return {};
+ }();
+ if (fifopath.isEmpty())
+ return;
+
+ auto removeFifo = qScopeGuard([&fifopath] { unlink(fifopath); });
+
+ // with a FIFO, the two open() system calls synchronize
+ QScopedPointer<QThread> thr(QThread::create([&fifopath]() {
+ int fd = qt_safe_open(fifopath, O_WRONLY);
+ QTest::qSleep(500);
+ char c = 2;
+ qt_safe_write(fd, &c, 1);
+ qt_safe_close(fd);
+ }));
+ thr->start();
+
+ QFETCH(bool, useStdio);
+ QFile f;
+ if (useStdio) {
+ FILE *fh = fopen(fifopath, "rb");
+ QVERIFY(f.open(fh, QIODevice::ReadOnly | QIODevice::Unbuffered, QFileDevice::AutoCloseHandle));
+ } else {
+ f.setFileName(QFile::decodeName(fifopath));
+ QVERIFY(f.open(QIODevice::ReadOnly | QIODevice::Unbuffered));
+ }
+
+ char c = 0;
+ QCOMPARE(f.read(&c, 1), 1); // this ought to block
+ QCOMPARE(c, '\2');
+ thr->wait();
+}
+
void tst_QFile::socketPair()
{
+#if defined(Q_OS_VXWORKS)
+ QSKIP("socketpair is not available on Vxworks");
+#else
int pipes[2] = { -1, -1 };
QVERIFY2(socketpair(AF_UNIX, SOCK_STREAM, 0, pipes) == 0, qPrintable(qt_error_string()));
unixPipe_helper(pipes);
- qt_safe_close(pipes[0]);
+ if (pipes[0] != -1)
+ qt_safe_close(pipes[0]);
qt_safe_close(pipes[1]);
-}
#endif
+}
+#endif /* UNIX && !WASM; */
void tst_QFile::textFile()
{
- const char *openMode = QOperatingSystemVersion::current().type() != QOperatingSystemVersion::Windows
- ? "w" : "wt";
- StdioFileGuard fs(fopen("writeabletextfile", openMode));
+ // The "t" is ignored everywhere except on Windows
+ StdioFileGuard fs(fopen("writeabletextfile", "wt"));
QVERIFY(fs);
QFile f;
QByteArray part1("This\nis\na\nfile\nwith\nnewlines\n");
@@ -2898,7 +3084,7 @@ void tst_QFile::miscWithUncPathAsCurrentDir()
{
#if defined(Q_OS_WIN)
QString current = QDir::currentPath();
- const QString path = QLatin1String("//") + QtNetworkSettings::winServerName()
+ const QString path = QLatin1String("//") + QTest::uncServerName()
+ QLatin1String("/testshare");
QVERIFY2(QDir::setCurrent(path), qPrintable(QDir::toNativeSeparators(path)));
QFile file("test.pri");
@@ -2935,7 +3121,7 @@ void tst_QFile::handle()
// test if the QFile and the handle remain in sync
QVERIFY(file.getChar(&c));
- QCOMPARE(c, '*');
+ QCOMPARE(c, '/');
// same, but read from QFile first now
file.close();
@@ -2950,13 +3136,13 @@ void tst_QFile::handle()
QCOMPARE(QT_READ(fd, &c, 1), 1);
#endif
- QCOMPARE(c, '*');
+ QCOMPARE(c, '/');
//test round trip of adopted stdio file handle
QFile file2;
StdioFileGuard fp(fopen(qPrintable(m_testSourceFile), "r"));
QVERIFY(fp);
- file2.open(fp, QIODevice::ReadOnly);
+ QVERIFY(file2.open(fp, QIODevice::ReadOnly));
QCOMPARE(int(file2.handle()), int(QT_FILENO(fp)));
QCOMPARE(int(file2.handle()), int(QT_FILENO(fp)));
fp.close();
@@ -2965,7 +3151,7 @@ void tst_QFile::handle()
#ifdef Q_OS_UNIX
QFile file3;
fd = QT_OPEN(qPrintable(m_testSourceFile), QT_OPEN_RDONLY);
- file3.open(fd, QIODevice::ReadOnly);
+ QVERIFY(file3.open(fd, QIODevice::ReadOnly));
QCOMPARE(int(file3.handle()), fd);
QT_CLOSE(fd);
#endif
@@ -3277,13 +3463,15 @@ void tst_QFile::mapResource_data()
QString validFile = ":/tst_qfileinfo/resources/file1.ext1";
QString invalidFile = ":/tst_qfileinfo/resources/filefoo.ext1";
+ const char modes[] = "invalid";
for (int i = 0; i < 2; ++i) {
QString file = (i == 0) ? validFile : invalidFile;
- QTest::newRow("0, 0") << 0 << 0 << QFile::UnspecifiedError << file;
- QTest::newRow("0, BIG") << 0 << 4096 << QFile::UnspecifiedError << file;
- QTest::newRow("-1, 0") << -1 << 0 << QFile::UnspecifiedError << file;
- QTest::newRow("0, -1") << 0 << -1 << QFile::UnspecifiedError << file;
+ const char *mode = i == 0 ? modes + 2 : modes;
+ QTest::addRow("0, 0 (%s)", mode) << 0 << 0 << QFile::UnspecifiedError << file;
+ QTest::addRow("0, BIG (%s)", mode) << 0 << 4096 << QFile::UnspecifiedError << file;
+ QTest::addRow("-1, 0 (%s)", mode) << -1 << 0 << QFile::UnspecifiedError << file;
+ QTest::addRow("0, -1 (%s)", mode) << 0 << -1 << QFile::UnspecifiedError << file;
}
QTest::newRow("0, 1") << 0 << 1 << QFile::NoError << validFile;
@@ -3354,7 +3542,7 @@ void tst_QFile::mapOpenMode()
*memory = 'a';
file.unmap(memory);
file.close();
- file.open(QIODevice::OpenMode(openMode));
+ QVERIFY(file.open(QIODevice::OpenMode(openMode)));
file.seek(0);
char c;
QVERIFY(file.getChar(&c));
@@ -3501,7 +3689,7 @@ void tst_QFile::openStandardStreamsFileDescriptors()
{
QFile in;
- in.open(STDIN_FILENO, QIODevice::ReadOnly);
+ QVERIFY(in.open(STDIN_FILENO, QIODevice::ReadOnly));
QCOMPARE( in.pos(), streamCurrentPosition(STDIN_FILENO) );
QCOMPARE( in.size(), streamExpectedSize(STDIN_FILENO) );
}
@@ -3515,7 +3703,7 @@ void tst_QFile::openStandardStreamsFileDescriptors()
{
QFile err;
- err.open(STDERR_FILENO, QIODevice::WriteOnly);
+ QVERIFY(err.open(STDERR_FILENO, QIODevice::WriteOnly));
QCOMPARE( err.pos(), streamCurrentPosition(STDERR_FILENO) );
QCOMPARE( err.size(), streamExpectedSize(STDERR_FILENO) );
}
@@ -3531,21 +3719,21 @@ void tst_QFile::openStandardStreamsBufferedStreams()
// Using streams
{
QFile in;
- in.open(stdin, QIODevice::ReadOnly);
+ QVERIFY(in.open(stdin, QIODevice::ReadOnly));
QCOMPARE( in.pos(), streamCurrentPosition(stdin) );
QCOMPARE( in.size(), streamExpectedSize(QT_FILENO(stdin)) );
}
{
QFile out;
- out.open(stdout, QIODevice::WriteOnly);
+ QVERIFY(out.open(stdout, QIODevice::WriteOnly));
QCOMPARE( out.pos(), streamCurrentPosition(stdout) );
QCOMPARE( out.size(), streamExpectedSize(QT_FILENO(stdout)) );
}
{
QFile err;
- err.open(stderr, QIODevice::WriteOnly);
+ QVERIFY(err.open(stderr, QIODevice::WriteOnly));
QCOMPARE( err.pos(), streamCurrentPosition(stderr) );
QCOMPARE( err.size(), streamExpectedSize(QT_FILENO(stderr)) );
}
@@ -3599,7 +3787,7 @@ void tst_QFile::caseSensitivity()
{
#if defined(Q_OS_WIN)
const bool caseSensitive = false;
-#elif defined(Q_OS_MAC)
+#elif defined(Q_OS_DARWIN)
const bool caseSensitive = pathconf(QDir::currentPath().toLatin1().constData(), _PC_CASE_SENSITIVE);
#else
const bool caseSensitive = true;
@@ -3613,11 +3801,16 @@ void tst_QFile::caseSensitivity()
QVERIFY(f.write(testData));
f.close();
}
- QStringList alternates;
QFileInfo fi(filename);
QVERIFY(fi.exists());
- alternates << "file.txt" << "File.TXT" << "fIlE.TxT" << fi.absoluteFilePath().toUpper() << fi.absoluteFilePath().toLower();
- foreach (QString alt, alternates) {
+ const auto alternates = {
+ u"file.txt"_s,
+ u"File.TXT"_s,
+ u"fIlE.TxT"_s,
+ fi.absoluteFilePath().toUpper(),
+ fi.absoluteFilePath().toLower(),
+ };
+ for (const QString &alt : alternates) {
QFileInfo fi2(alt);
QCOMPARE(fi2.exists(), !caseSensitive);
QCOMPARE(fi.size() == fi2.size(), !caseSensitive);
@@ -3780,26 +3973,34 @@ void tst_QFile::moveToTrash_data()
// success cases
{
- QTemporaryFile temp;
+ QTemporaryFile temp(QDir::tempPath() + "/tst_qfile-moveToTrash-XXXXXX");
if (!temp.open())
QSKIP("Failed to create temporary file!");
QTest::newRow("temporary file") << temp.fileName() << true << true;
+#if defined(Q_OS_UNIX) && !defined(Q_OS_WASM)
+ if (QDir::tempPath() == "/tmp")
+ QTest::newRow("var-temporary file") << "/var" + temp.fileName() << true << true;
+#endif
}
{
- QTemporaryDir tempDir;
+ QTemporaryDir tempDir(QDir::tempPath() + "/tst_qfile-moveToTrash-XXXXXX");
if (!tempDir.isValid())
QSKIP("Failed to create temporary directory!");
tempDir.setAutoRemove(false);
QTest::newRow("temporary dir")
<< tempDir.path() + QLatin1Char('/')
<< true << true;
+#if defined(Q_OS_UNIX) && !defined(Q_OS_WASM)
+ if (QDir::tempPath() == "/tmp")
+ QTest::newRow("var-temporary dir") << "/var" + tempDir.path() << true << true;
+#endif
}
{
- QTemporaryDir homeDir(QDir::homePath() + QLatin1String("/XXXXXX"));
+ QTemporaryDir homeDir(QDir::homePath() + QLatin1String("/tst_qfile.moveToTrash-XXXXXX"));
if (!homeDir.isValid())
QSKIP("Failed to create temporary directory in $HOME!");
QTemporaryFile homeFile(homeDir.path()
- + QLatin1String("/tst_qfile-XXXXXX"));
+ + QLatin1String("/tst_qfile-moveToTrash-XXXXX"));
if (!homeFile.open())
QSKIP("Failed to create temporary file in $HOME");
homeDir.setAutoRemove(false);
@@ -3811,7 +4012,7 @@ void tst_QFile::moveToTrash_data()
<< homeDir.path() + QLatin1Char('/')
<< true << true;
}
- QTest::newRow("relative") << QStringLiteral("tst_qfile_moveToTrash.tmp") << true << true;
+ QTest::newRow("relative") << QStringLiteral("tst_qfile-moveToTrash.tmp") << true << true;
// failure cases
QTest::newRow("root") << QDir::rootPath() << false << false;
@@ -3820,8 +4021,8 @@ void tst_QFile::moveToTrash_data()
void tst_QFile::moveToTrash()
{
-#ifdef Q_OS_ANDROID
- QSKIP("Android doesn't implement a trash bin");
+#if defined(Q_OS_ANDROID) or defined(Q_OS_WEBOS) or defined(Q_OS_VXWORKS)
+ QSKIP("This platform doesn't implement a trash bin");
#endif
QFETCH(QString, source);
QFETCH(bool, create);
@@ -3853,6 +4054,7 @@ void tst_QFile::moveToTrash()
};
ensureFile(source, create);
+ if (!QFileInfo::exists(source) && create) return;
/* This test makes assumptions about the file system layout
which might be wrong - moveToTrash may fail if the file lives
@@ -3900,6 +4102,7 @@ void tst_QFile::moveToTrash()
// static version
{
ensureFile(source, create);
+ if (!QFileInfo::exists(source) && create) return;
QString pathInTrash;
const bool success = QFile::moveToTrash(source, &pathInTrash);
QCOMPARE(success, result);
@@ -3918,6 +4121,210 @@ void tst_QFile::moveToTrash()
}
}
+void tst_QFile::moveToTrashDuplicateName()
+{
+#if defined(Q_OS_ANDROID) || defined(Q_OS_WEBOS) || defined(Q_OS_VXWORKS)
+ QSKIP("This platform doesn't implement a trash bin");
+#endif
+ QString origFileName = []() {
+ QTemporaryFile temp(QDir::homePath() + "/tst_qfile.moveToTrashOpenFile.XXXXXX");
+ temp.setAutoRemove(false);
+ if (!temp.open())
+ qWarning("Failed to create temporary file: %ls", qUtf16Printable(temp.errorString()));
+ return temp.fileName();
+ }();
+
+ QFile f1(origFileName);
+ QFile f2(origFileName);
+ [&] {
+ QByteArrayView message1 = "Hello, World\n";
+ QVERIFY2(f1.open(QIODevice::ReadWrite | QIODevice::Unbuffered), qPrintable(f1.errorString()));
+ f1.write(message1.data(), message1.size());
+ QVERIFY2(f1.moveToTrash(), qPrintable(f1.errorString()));
+
+ QByteArrayView message2 = "Good morning, Vietnam!\n";
+ QVERIFY2(f2.open(QIODevice::ReadWrite | QIODevice::Unbuffered | QIODevice::NewOnly),
+ qPrintable(f2.errorString()));
+ f2.write(message2.data(), message2.size());
+ QVERIFY2(f2.moveToTrash(), qPrintable(f2.errorString()));
+
+ QCOMPARE_NE(f1.fileName(), f2.fileName());
+ }();
+ f1.remove();
+ if (!f2.fileName().isEmpty())
+ f2.remove();
+ QFile::remove(origFileName);
+}
+
+void tst_QFile::moveToTrashOpenFile_data()
+{
+ QTest::addColumn<bool>("useStatic");
+ QTest::addColumn<bool>("success");
+
+ // QFile::moveToTrash() non-static member closes the file before trashing,
+ // so this must always succeed.
+ QTest::newRow("member") << false << true;
+
+ // QFile::moveToTrash() static member cannot close the file because it
+ // operates on another QFile, so this operation will fail on OSes that do
+ // not permit deleting open files.
+ QTest::newRow("static") << true
+#ifdef Q_OS_WIN
+ << false;
+#else
+ << true;
+#endif
+}
+
+void tst_QFile::moveToTrashOpenFile()
+{
+#if defined(Q_OS_ANDROID) || defined(Q_OS_WEBOS) || defined(Q_OS_VXWORKS)
+ QSKIP("This platform doesn't implement a trash bin");
+#endif
+ QFETCH(bool, useStatic);
+ QFETCH(bool, success);
+ const QByteArrayView contents = "Hello, World\n";
+
+ QString newFileName, origFileName;
+ auto cleanup = qScopeGuard([&] {
+ if (!origFileName.isEmpty())
+ QFile::remove(origFileName);
+ if (!newFileName.isEmpty() && newFileName != origFileName)
+ QFile::remove(newFileName);
+ });
+
+ origFileName = []() {
+ QTemporaryFile temp(QDir::homePath() + "/tst_qfile.moveToTrashOpenFile.XXXXXX");
+ temp.setAutoRemove(false);
+ if (!temp.open())
+ qWarning("Failed to create temporary file: %ls", qUtf16Printable(temp.errorString()));
+ return temp.fileName();
+ }();
+
+ QFile f;
+ f.setFileName(origFileName);
+ QVERIFY2(f.open(QIODevice::ReadWrite | QIODevice::Unbuffered), qPrintable(f.errorString()));
+ f.write(contents.data(), contents.size());
+
+ QString errorString;
+ auto doMoveToTrash = [&](QFile *f) {
+ if (!f->moveToTrash())
+ errorString = f->errorString();
+ newFileName = f->fileName();
+ };
+ if (useStatic) {
+ // it's the same as the static QFile::moveToTrash(), but gives us
+ // the error string
+ QFile other(origFileName);
+ doMoveToTrash(&other);
+ } else {
+ doMoveToTrash(&f);
+ }
+ QCOMPARE_NE(f.fileName(), QString());
+
+ if (success) {
+ QCOMPARE(errorString, QString());
+ QCOMPARE_NE(newFileName, origFileName); // must have changed!
+ QVERIFY(!QFile::exists(origFileName));
+ QVERIFY(QFile::exists(newFileName));
+ QCOMPARE(QFileInfo(newFileName).size(), contents.size());
+ } else {
+ QCOMPARE_NE(errorString, QString());
+ QCOMPARE(newFileName, origFileName); // mustn't have changed!
+ QVERIFY(QFile::exists(origFileName));
+ QCOMPARE(QFileInfo(origFileName).size(), contents.size());
+ }
+}
+
+void tst_QFile::moveToTrashXdgSafety()
+{
+#if defined(Q_OS_VXWORKS)
+ QSKIP("This platform doesn't implement a trash bin");
+#endif
+#if defined(Q_OS_WIN) || defined(Q_OS_DARWIN) || defined(Q_OS_ANDROID) || defined(Q_OS_WEBOS)
+ QSKIP("This test is specific to XDG Unix systems");
+#else
+ QDir(m_temporaryDir.path()).mkdir("emptydir");
+
+ // See if we can find a writable volume to conduct our tests on
+ QString volumeRoot;
+ QStorageInfo homeVolume(QDir::homePath());
+ auto isVolumeSuitable = [this](const QString &rootPath) {
+ return QFile::link(m_temporaryDir.path() + "/emptydir", rootPath + "/.Trash");
+ };
+ for (const QStorageInfo &volume : QStorageInfo::mountedVolumes()) {
+ if (volume.isRoot())
+ continue;
+ if (volume == homeVolume)
+ continue;
+
+ if (isVolumeSuitable(volume.rootPath())) {
+ volumeRoot = volume.rootPath();
+ break;
+ }
+ }
+
+# ifdef Q_OS_LINUX
+ // fallback to /dev/shm, which is usually a tmpfs but is ignored by
+ // QStorageInfo as a virtual filesystem
+ if (volumeRoot.isEmpty() && isVolumeSuitable("/dev/shm"))
+ volumeRoot = "/dev/shm";
+# endif
+
+ if (volumeRoot.isEmpty())
+ QSKIP("Could not find any suitable volume to run this test with");
+
+ QDir genericTrashDir = volumeRoot + "/.Trash";
+ auto cleanup = qScopeGuard([&] {
+ if (QFileInfo(genericTrashDir.path()).isDir())
+ genericTrashDir.removeRecursively();
+ else
+ QFile::remove(genericTrashDir.path());
+ });
+
+ QString testFileName = volumeRoot + "/tst_qfile.moveToTrashSafety." + QString::number(getpid());
+ auto tryTrashing = [&] {
+ static int counter = 0;
+ QFile f(testFileName + u'.' + QString::number(counter++));
+ if (!f.open(QIODevice::ReadWrite | QIODevice::Truncate)) {
+ qWarning("Failed to create temporary file: %ls", qUtf16Printable(f.errorString()));
+ return false;
+ }
+ bool ok = f.moveToTrash();
+ f.remove();
+ f.close();
+ return ok;
+ };
+
+ QTest::ignoreMessage(QtCriticalMsg,
+ "Warning: '" + QFile::encodeName(genericTrashDir.absolutePath())
+ + "' is a symlink to '" + QFile::encodeName(m_temporaryDir.path())
+ + "/emptydir'");
+ QVERIFY(tryTrashing());
+ QVERIFY(genericTrashDir.entryList(QDir::NoDotAndDotDot).isEmpty());
+
+ QFile::remove(genericTrashDir.path());
+ genericTrashDir.mkdir(genericTrashDir.path(), QFile::ExeOwner | QFile::ReadOwner);
+ QTest::ignoreMessage(QtCriticalMsg, "Warning: '" + QFile::encodeName(genericTrashDir.absolutePath())
+ + "' doesn't have sticky bit set!");
+ QVERIFY(tryTrashing());
+ QVERIFY(genericTrashDir.entryList(QDir::NoDotAndDotDot).isEmpty());
+
+ if (geteuid() != 0) {
+ // set the sticky bit, but make the dir unwritable; there'll be no
+ // warning and we should just fall back to the next option
+ chmod(QFile::encodeName(genericTrashDir.path()), 01555);
+ QVERIFY(tryTrashing());
+ QVERIFY(genericTrashDir.entryList(QDir::NoDotAndDotDot).isEmpty());
+
+ // ditto for our user's subdir now
+ chmod(QFile::encodeName(genericTrashDir.path()), 01755);
+ genericTrashDir.mkdir(QString::number(getuid()), QFile::ReadOwner);
+ QVERIFY(tryTrashing());
+ }
+#endif
+}
+
void tst_QFile::stdfilesystem()
{
#if QT_CONFIG(cxx17_filesystem)
diff --git a/tests/auto/corelib/io/qfileinfo/CMakeLists.txt b/tests/auto/corelib/io/qfileinfo/CMakeLists.txt
index da955ff6a6..3b997e1bca 100644
--- a/tests/auto/corelib/io/qfileinfo/CMakeLists.txt
+++ b/tests/auto/corelib/io/qfileinfo/CMakeLists.txt
@@ -1,14 +1,22 @@
-# Generated from qfileinfo.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfileinfo Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfileinfo LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfileinfo
SOURCES
tst_qfileinfo.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
)
# Resources:
@@ -41,7 +49,12 @@ qt_internal_add_resource(tst_qfileinfo "testdata"
#####################################################################
qt_internal_extend_target(tst_qfileinfo CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
advapi32
netapi32
)
+
+if (APPLE)
+ enable_language(OBJCXX)
+ set_source_files_properties(tst_qfileinfo.cpp PROPERTIES LANGUAGE OBJCXX)
+endif()
diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
index 395db040b0..f7d531f61f 100644
--- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
+++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
@@ -1,35 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
#include <QStandardPaths>
#include <QScopeGuard>
-#include <QScopedValueRollback>
#include <qfile.h>
#include <qdir.h>
@@ -56,23 +31,23 @@
#endif
#include <qplatformdefs.h>
#include <qdebug.h>
-#if defined(Q_OS_WIN)
-#include "../../../network-settings.h"
-#endif
#include <private/qfileinfo_p.h>
#include "../../../../shared/filesystem.h"
+#if defined(Q_OS_MACOS)
+#include <Foundation/Foundation.h>
+#endif
+
#if defined(Q_OS_VXWORKS)
#define Q_NO_SYMLINKS
#endif
#if defined(Q_OS_WIN)
-QT_BEGIN_NAMESPACE
-extern Q_CORE_EXPORT int qt_ntfs_permission_lookup;
-QT_END_NAMESPACE
bool IsUserAdmin();
#endif
+using namespace Qt::StringLiterals;
+
inline bool qIsLikelyToBeFat(const QString &path)
{
QByteArray name = QStorageInfo(path).fileSystemType().toLower();
@@ -198,6 +173,7 @@ private slots:
void systemFiles();
+ void compareCompiles();
void compare_data();
void compare();
@@ -206,6 +182,7 @@ private slots:
void fileTimes_data();
void fileTimes();
+ void setFileTimes();
void fakeFileTimes_data();
void fakeFileTimes();
@@ -218,12 +195,15 @@ private slots:
void isShortcut_data();
void isShortcut();
+ void isAlias_data();
+ void isAlias();
+
void link_data();
void link();
void isHidden_data();
void isHidden();
-#if defined(Q_OS_MAC)
+#if defined(Q_OS_DARWIN)
void isHiddenFromFinder();
#endif
@@ -260,6 +240,7 @@ private slots:
void nonExistingFile();
void stdfilesystem();
+ void readSymLink();
private:
const QString m_currentDir;
@@ -372,7 +353,7 @@ void tst_QFileInfo::isDir_data()
QFile::remove("brokenlink.lnk");
QFile::remove("dummyfile");
QFile file3("dummyfile");
- file3.open(QIODevice::WriteOnly);
+ QVERIFY(file3.open(QIODevice::WriteOnly));
if (file3.link("brokenlink.lnk")) {
file3.remove();
QFileInfo info3("brokenlink.lnk");
@@ -399,7 +380,7 @@ void tst_QFileInfo::isDir_data()
//QTest::newRow("drive 2") << "t:s" << false;
#endif
#if defined(Q_OS_WIN)
- const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName();
+ const QString uncRoot = QStringLiteral("//") + QTest::uncServerName();
QTest::newRow("unc 1") << uncRoot << true;
QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << true;
QTest::newRow("unc 3") << uncRoot + "/testshare" << true;
@@ -442,7 +423,7 @@ void tst_QFileInfo::isRoot_data()
#endif
#if defined(Q_OS_WIN)
- const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName();
+ const QString uncRoot = QStringLiteral("//") + QTest::uncServerName();
QTest::newRow("unc 1") << uncRoot << true;
QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << true;
QTest::newRow("unc 3") << uncRoot + "/testshare" << false;
@@ -486,7 +467,7 @@ void tst_QFileInfo::exists_data()
QTest::newRow("simple dir with slash") << (m_resourcesDir + QLatin1Char('/')) << true;
#if defined(Q_OS_WIN)
- const QString uncRoot = QStringLiteral("//") + QtNetworkSettings::winServerName();
+ const QString uncRoot = QStringLiteral("//") + QTest::uncServerName();
QTest::newRow("unc 1") << uncRoot << true;
QTest::newRow("unc 2") << uncRoot + QLatin1Char('/') << true;
QTest::newRow("unc 3") << uncRoot + "/testshare" << true;
@@ -677,7 +658,7 @@ void tst_QFileInfo::canonicalFilePath()
QFile file(QDir::currentPath());
if (file.link(link)) {
QFile tempfile("tempfile.txt");
- tempfile.open(QIODevice::ReadWrite);
+ QVERIFY(tempfile.open(QIODevice::ReadWrite));
tempfile.write("This file is generated by the QFileInfo autotest.");
QVERIFY(tempfile.flush());
tempfile.close();
@@ -783,7 +764,7 @@ void tst_QFileInfo::bundleName_data()
QTest::newRow("root") << "/" << "";
QTest::newRow("etc") << "/etc" << "";
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
QTest::newRow("safari") << "/Applications/Safari.app" << "Safari";
#endif
}
@@ -1014,6 +995,11 @@ void tst_QFileInfo::systemFiles()
QVERIFY(fi.birthTime() <= fi.lastModified());
}
+void tst_QFileInfo::compareCompiles()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QFileInfo>();
+}
+
void tst_QFileInfo::compare_data()
{
QTest::addColumn<QString>("file1");
@@ -1040,7 +1026,7 @@ void tst_QFileInfo::compare_data()
<< m_sourceFile
#if defined(Q_OS_WIN)
<< true;
-#elif defined(Q_OS_MAC)
+#elif defined(Q_OS_DARWIN)
<< !pathconf(QDir::currentPath().toLatin1().constData(), _PC_CASE_SENSITIVE);
#else
<< false;
@@ -1049,7 +1035,7 @@ void tst_QFileInfo::compare_data()
void tst_QFileInfo::compare()
{
-#if defined(Q_OS_MAC)
+#if defined(Q_OS_DARWIN)
if (qstrcmp(QTest::currentDataTag(), "casesense1") == 0)
QSKIP("Qt thinks all UNIX filesystems are case sensitive, see QTBUG-28246");
#endif
@@ -1058,7 +1044,7 @@ void tst_QFileInfo::compare()
QFETCH(QString, file2);
QFETCH(bool, same);
QFileInfo fi1(file1), fi2(file2);
- QCOMPARE(fi1 == fi2, same);
+ QT_TEST_EQUALITY_OPS(fi1, fi2, same);
}
void tst_QFileInfo::consistent_data()
@@ -1126,8 +1112,8 @@ void tst_QFileInfo::fileTimes()
{
// try to guess if file times on this filesystem round to the second
QFileInfo cwd(".");
- if (cwd.lastModified().toMSecsSinceEpoch() % 1000 == 0
- && cwd.lastRead().toMSecsSinceEpoch() % 1000 == 0) {
+ if (cwd.lastModified(QTimeZone::UTC).toMSecsSinceEpoch() % 1000 == 0
+ && cwd.lastRead(QTimeZone::UTC).toMSecsSinceEpoch() % 1000 == 0) {
fsClockSkew = sleepTime = 1000;
noAccessTime = qIsLikelyToBeFat(fileName);
@@ -1147,46 +1133,46 @@ void tst_QFileInfo::fileTimes()
QDateTime birthTime, writeTime, metadataChangeTime, readTime;
// --- Create file and write to it
- beforeBirth = QDateTime::currentDateTime().addMSecs(-fsClockSkew);
+ beforeBirth = QDateTime::currentDateTimeUtc().addMSecs(-fsClockSkew);
{
QFile file(fileName);
QVERIFY(file.open(QFile::WriteOnly | QFile::Text));
QFileInfo fileInfo(fileName);
- birthTime = fileInfo.birthTime();
+ birthTime = fileInfo.birthTime(QTimeZone::UTC);
QVERIFY2(!birthTime.isValid() || birthTime > beforeBirth,
datePairString(birthTime, beforeBirth));
QTest::qSleep(sleepTime);
- beforeWrite = QDateTime::currentDateTime().addMSecs(-fsClockSkew);
+ beforeWrite = QDateTime::currentDateTimeUtc().addMSecs(-fsClockSkew);
QTextStream ts(&file);
ts << fileName << Qt::endl;
}
{
QFileInfo fileInfo(fileName);
- writeTime = fileInfo.lastModified();
+ writeTime = fileInfo.lastModified(QTimeZone::UTC);
QVERIFY2(writeTime > beforeWrite, datePairString(writeTime, beforeWrite));
- QCOMPARE(fileInfo.birthTime(), birthTime); // mustn't have changed
+ QCOMPARE(fileInfo.birthTime(QTimeZone::UTC), birthTime); // mustn't have changed
}
// --- Change the file's metadata
QTest::qSleep(sleepTime);
- beforeMetadataChange = QDateTime::currentDateTime().addMSecs(-fsClockSkew);
+ beforeMetadataChange = QDateTime::currentDateTimeUtc().addMSecs(-fsClockSkew);
{
QFile file(fileName);
file.setPermissions(file.permissions());
}
{
QFileInfo fileInfo(fileName);
- metadataChangeTime = fileInfo.metadataChangeTime();
+ metadataChangeTime = fileInfo.metadataChangeTime(QTimeZone::UTC);
QVERIFY2(metadataChangeTime > beforeMetadataChange,
datePairString(metadataChangeTime, beforeMetadataChange));
QVERIFY(metadataChangeTime >= writeTime); // not all filesystems can store both times
- QCOMPARE(fileInfo.birthTime(), birthTime); // mustn't have changed
+ QCOMPARE(fileInfo.birthTime(QTimeZone::UTC), birthTime); // mustn't have changed
}
// --- Read the file
QTest::qSleep(sleepTime);
- beforeRead = QDateTime::currentDateTime().addMSecs(-fsClockSkew);
+ beforeRead = QDateTime::currentDateTimeUtc().addMSecs(-fsClockSkew);
{
QFile file(fileName);
QVERIFY(file.open(QFile::ReadOnly | QFile::Text));
@@ -1196,9 +1182,9 @@ void tst_QFileInfo::fileTimes()
}
QFileInfo fileInfo(fileName);
- readTime = fileInfo.lastRead();
- QCOMPARE(fileInfo.lastModified(), writeTime); // mustn't have changed
- QCOMPARE(fileInfo.birthTime(), birthTime); // mustn't have changed
+ readTime = fileInfo.lastRead(QTimeZone::UTC);
+ QCOMPARE(fileInfo.lastModified(QTimeZone::UTC), writeTime); // mustn't have changed
+ QCOMPARE(fileInfo.birthTime(QTimeZone::UTC), birthTime); // mustn't have changed
QVERIFY(readTime.isValid());
#if defined(Q_OS_QNX) || defined(Q_OS_ANDROID)
@@ -1222,6 +1208,21 @@ void tst_QFileInfo::fileTimes()
QVERIFY(writeTime < beforeRead);
}
+void tst_QFileInfo::setFileTimes()
+{
+ QByteArray data("OLE\nOLE\nOLE");
+ QTemporaryFile file;
+
+ QVERIFY(file.open());
+ QCOMPARE(file.write(data), data.size());
+ QCOMPARE(file.size(), data.size());
+
+ const QDateTime before = QDateTime::currentDateTimeUtc().addMSecs(-5000);
+ QVERIFY(file.setFileTime(before, QFile::FileModificationTime));
+ const QDateTime mtime = file.fileTime(QFile::FileModificationTime).toUTC();
+ QCOMPARE(mtime, before);
+}
+
void tst_QFileInfo::fakeFileTimes_data()
{
QTest::addColumn<QDateTime>("when");
@@ -1239,7 +1240,7 @@ void tst_QFileInfo::fakeFileTimes()
QFETCH(QDateTime, when);
QFile file("faketimefile.txt");
- file.open(QIODevice::WriteOnly);
+ QVERIFY(file.open(QIODevice::WriteOnly));
file.write("\n", 1);
file.close();
@@ -1248,12 +1249,12 @@ void tst_QFileInfo::fakeFileTimes()
the file is open at the time. Of course, when writing, close() changes
modification time, so need to re-open for read in order to setFileTime().
*/
- file.open(QIODevice::ReadOnly);
+ QVERIFY(file.open(QIODevice::ReadOnly));
bool ok = file.setFileTime(when, QFileDevice::FileModificationTime);
file.close();
if (ok)
- QCOMPARE(QFileInfo(file.fileName()).lastModified(), when);
+ QCOMPARE(QFileInfo(file.fileName()).lastModified(QTimeZone::UTC), when);
else
QSKIP("Unable to set file metadata to contrived values");
}
@@ -1270,7 +1271,7 @@ void tst_QFileInfo::isSymLink_data()
QVERIFY(file1.link("link.lnk"));
QFile file2("dummyfile");
- file2.open(QIODevice::WriteOnly);
+ QVERIFY(file2.open(QIODevice::WriteOnly));
QVERIFY(file2.link("brokenlink.lnk"));
file2.remove();
@@ -1345,6 +1346,57 @@ void tst_QFileInfo::isShortcut()
QCOMPARE(fi.isShortcut(), isShortcut);
}
+void tst_QFileInfo::isAlias_data()
+{
+ QFile::remove("symlink");
+ QFile::remove("file-alias");
+ QFile::remove("directory-alias");
+
+ QTest::addColumn<QString>("path");
+ QTest::addColumn<bool>("isAlias");
+
+ QFile regularFile(m_sourceFile);
+ QTest::newRow("regular-file") << regularFile.fileName() << false;
+ QTest::newRow("directory") << QDir::currentPath() << false;
+
+#if defined(Q_OS_MACOS)
+ auto createAlias = [](const QString &target, const QString &alias) {
+ NSURL *targetUrl = [NSURL fileURLWithPath:target.toNSString()];
+ NSURL *aliasUrl = [NSURL fileURLWithPath:alias.toNSString()];
+ NSData *bookmarkData = [targetUrl bookmarkDataWithOptions:NSURLBookmarkCreationSuitableForBookmarkFile
+ includingResourceValuesForKeys:nil relativeToURL:nil error:nullptr];
+ Q_ASSERT(bookmarkData);
+
+ bool success = [NSURL writeBookmarkData:bookmarkData toURL:aliasUrl
+ options:NSURLBookmarkCreationSuitableForBookmarkFile error:nullptr];
+ Q_ASSERT(success);
+ };
+
+ regularFile.link("symlink");
+ QTest::newRow("symlink") << "symlink" << false;
+
+ createAlias(regularFile.fileName(), QDir::current().filePath("file-alias"));
+ QTest::newRow("file-alias") << "file-alias" << true;
+
+ createAlias(QDir::currentPath(), QDir::current().filePath("directory-alias"));
+ QTest::newRow("directory-alias") << "directory-alias" << true;
+
+ regularFile.copy("non-existing-file");
+ createAlias("non-existing-file", QDir::current().filePath("non-existing-file-alias"));
+ QDir::current().remove("non-existing-file");
+ QTest::newRow("non-existing-file-alias") << "non-existing-file-alias" << true;
+#endif
+}
+
+void tst_QFileInfo::isAlias()
+{
+ QFETCH(QString, path);
+ QFETCH(bool, isAlias);
+
+ QFileInfo fi(path);
+ QCOMPARE(fi.isAlias(), isAlias);
+}
+
void tst_QFileInfo::isSymbolicLink_data()
{
QTest::addColumn<QString>("path");
@@ -1405,7 +1457,7 @@ void tst_QFileInfo::link_data()
QFile file1(m_sourceFile);
QFile file2("dummyfile");
- file2.open(QIODevice::WriteOnly);
+ QVERIFY(file2.open(QIODevice::WriteOnly));
QTest::newRow("existent file") << m_sourceFile << false << false << "";
#if defined(Q_OS_WIN)
@@ -1473,9 +1525,9 @@ void tst_QFileInfo::isHidden_data()
{
QTest::addColumn<QString>("path");
QTest::addColumn<bool>("isHidden");
- foreach (const QFileInfo& info, QDir::drives()) {
+ const auto drives = QDir::drives();
+ for (const QFileInfo& info : drives)
QTest::newRow(qPrintable("drive." + info.path())) << info.path() << false;
- }
#if defined(Q_OS_WIN)
QVERIFY(QDir("./hidden-directory").exists() || QDir().mkdir("./hidden-directory"));
@@ -1490,14 +1542,14 @@ void tst_QFileInfo::isHidden_data()
QTest::newRow("/path/to/.hidden-directory/..") << QDir::currentPath() + QString("/.hidden-directory/..") << true;
#endif
-#if defined(Q_OS_MAC)
+#if defined(Q_OS_DARWIN)
// /bin has the hidden attribute on OS X
QTest::newRow("/bin/") << QString::fromLatin1("/bin/") << true;
#elif !defined(Q_OS_WIN)
QTest::newRow("/bin/") << QString::fromLatin1("/bin/") << false;
#endif
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
QTest::newRow("mac_etc") << QString::fromLatin1("/etc") << true;
QTest::newRow("mac_private_etc") << QString::fromLatin1("/private/etc") << false;
QTest::newRow("mac_Applications") << QString::fromLatin1("/Applications") << false;
@@ -1513,7 +1565,7 @@ void tst_QFileInfo::isHidden()
QCOMPARE(fi.isHidden(), isHidden);
}
-#if defined(Q_OS_MAC)
+#if defined(Q_OS_DARWIN)
void tst_QFileInfo::isHiddenFromFinder()
{
const char *filename = "test_foobar.txt";
@@ -1539,7 +1591,7 @@ void tst_QFileInfo::isBundle_data()
QTest::addColumn<QString>("path");
QTest::addColumn<bool>("isBundle");
QTest::newRow("root") << QString::fromLatin1("/") << false;
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
QTest::newRow("mac_Applications") << QString::fromLatin1("/Applications") << false;
QTest::newRow("mac_Applications") << QString::fromLatin1("/Applications/Safari.app") << true;
#endif
@@ -1593,14 +1645,14 @@ void tst_QFileInfo::refresh()
file.flush();
QFileInfo info(file);
- QDateTime lastModified = info.lastModified();
+ QDateTime lastModified = info.lastModified(QTimeZone::UTC);
QCOMPARE(info.size(), qint64(7));
QTest::qSleep(sleepTime);
QCOMPARE(file.write("JOJOJO"), qint64(6));
file.flush();
- QCOMPARE(info.lastModified(), lastModified);
+ QCOMPARE(info.lastModified(QTimeZone::UTC), lastModified);
QCOMPARE(info.size(), qint64(7));
#if defined(Q_OS_WIN)
@@ -1608,7 +1660,7 @@ void tst_QFileInfo::refresh()
#endif
info.refresh();
QCOMPARE(info.size(), qint64(13));
- QVERIFY(info.lastModified() > lastModified);
+ QVERIFY(info.lastModified(QTimeZone::UTC) > lastModified);
QFileInfo info2 = info;
QCOMPARE(info2.size(), info.size());
@@ -1697,7 +1749,7 @@ void tst_QFileInfo::ntfsJunctionPointsAndSymlinks_data()
{
// Symlink to UNC share
pwd.mkdir("unc");
- QString uncTarget = QStringLiteral("//") + QtNetworkSettings::winServerName() + "/testshare";
+ QString uncTarget = QStringLiteral("//") + QTest::uncServerName() + "/testshare";
QString uncSymlink = QDir::toNativeSeparators(pwd.absolutePath().append("\\unc\\link_to_unc"));
QTest::newRow("UNC symlink")
<< NtfsTestResource(NtfsTestResource::SymLink, uncSymlink, uncTarget)
@@ -1795,14 +1847,14 @@ void tst_QFileInfo::ntfsJunctionPointsAndSymlinks()
creationResult.target = creationResult.target.sliced(4);
// resolve volume to drive letter
- static const QRegularExpression matchVolumeRe(uR"(^Volume\{([a-z]|[0-9]|-)+\}\\)"_qs,
+ static const QRegularExpression matchVolumeRe(uR"(^Volume\{([a-z]|[0-9]|-)+\}\\)"_s,
QRegularExpression::CaseInsensitiveOption);
auto matchVolume = matchVolumeRe.match(creationResult.target);
if (matchVolume.hasMatch()) {
Q_ASSERT(matchVolume.capturedStart() == 0);
DWORD len;
wchar_t buffer[MAX_PATH];
- const QString volumeName = uR"(\\?\)"_qs + matchVolume.captured();
+ const QString volumeName = uR"(\\?\)"_s + matchVolume.captured();
if (GetVolumePathNamesForVolumeName(reinterpret_cast<LPCWSTR>(volumeName.utf16()),
buffer, MAX_PATH, &len) != 0) {
creationResult.target.replace(0, matchVolume.capturedLength(),
@@ -1842,7 +1894,7 @@ void tst_QFileInfo::brokenShortcut()
void tst_QFileInfo::isWritable()
{
QFile tempfile("tempfile.txt");
- tempfile.open(QIODevice::WriteOnly);
+ QVERIFY(tempfile.open(QIODevice::WriteOnly));
tempfile.write("This file is generated by the QFileInfo autotest.");
tempfile.close();
@@ -1856,8 +1908,7 @@ void tst_QFileInfo::isWritable()
#endif
#if defined (Q_OS_WIN)
- QScopedValueRollback<int> ntfsMode(qt_ntfs_permission_lookup);
- qt_ntfs_permission_lookup = 1;
+ QNtfsPermissionCheckGuard permissionGuard;
QFileInfo fi2(QFile::decodeName(qgetenv("SystemRoot") + "/system.ini"));
QVERIFY(fi2.exists());
QCOMPARE(fi2.isWritable(), IsUserAdmin());
@@ -1878,7 +1929,13 @@ void tst_QFileInfo::isExecutable()
{
QString appPath = QCoreApplication::applicationDirPath();
#ifdef Q_OS_ANDROID
- appPath += "/libtst_qfileinfo.so";
+ QDir dir(appPath);
+ QVERIFY(dir.exists());
+ dir.setNameFilters({ "libtst_qfileinfo*.so" });
+ QStringList entries = dir.entryList();
+ QCOMPARE(entries.size(), 1);
+
+ appPath += "/" + entries[0];
#else
appPath += "/tst_qfileinfo";
# if defined(Q_OS_WIN)
@@ -1886,6 +1943,7 @@ void tst_QFileInfo::isExecutable()
# endif
#endif
QFileInfo fi(appPath);
+ QVERIFY(fi.exists());
QCOMPARE(fi.isExecutable(), true);
QCOMPARE(QFileInfo(m_proFile).isExecutable(), false);
@@ -1956,7 +2014,7 @@ private:
void tst_QFileInfo::testDecomposedUnicodeNames()
{
-#ifndef Q_OS_MAC
+#ifndef Q_OS_DARWIN
QSKIP("This is a OS X only test (unless you know more about filesystems, then maybe you should try it ;)");
#else
QFETCH(QString, filePath);
@@ -2100,7 +2158,7 @@ void tst_QFileInfo::owner()
NetApiBufferFree(pBuf);
}
}
- qt_ntfs_permission_lookup = 1;
+ QNtfsPermissionCheckGuard permissionGuard;
#endif
if (userName.isEmpty())
QSKIP("Can't retrieve the user name");
@@ -2117,9 +2175,6 @@ void tst_QFileInfo::owner()
QCOMPARE(fi.owner(), userName);
QFile::remove(fileName);
-#if defined(Q_OS_WIN)
- qt_ntfs_permission_lookup = 0;
-#endif
}
void tst_QFileInfo::group()
@@ -2203,10 +2258,10 @@ static void stateCheck(const QFileInfo &info, const QString &dirname, const QStr
QCOMPARE(info.permissions(), QFile::Permissions());
- QVERIFY(!info.birthTime().isValid());
- QVERIFY(!info.metadataChangeTime().isValid());
- QVERIFY(!info.lastRead().isValid());
- QVERIFY(!info.lastModified().isValid());
+ QVERIFY(!info.birthTime(QTimeZone::UTC).isValid());
+ QVERIFY(!info.metadataChangeTime(QTimeZone::UTC).isValid());
+ QVERIFY(!info.lastRead(QTimeZone::UTC).isValid());
+ QVERIFY(!info.lastModified(QTimeZone::UTC).isValid());
};
void tst_QFileInfo::invalidState_data()
@@ -2255,13 +2310,15 @@ void tst_QFileInfo::stdfilesystem()
// We compare using absoluteFilePath since QFileInfo::operator== ends up using
// canonicalFilePath which evaluates to empty-string for non-existent paths causing
// these tests to always succeed.
-#define COMPARE_CONSTRUCTION(filepath) \
- QCOMPARE(QFileInfo(fs::path(filepath)).absoluteFilePath(), \
- QFileInfo(QString::fromLocal8Bit(filepath)).absoluteFilePath()); \
- QCOMPARE(QFileInfo(base, fs::path(filepath)).absoluteFilePath(), \
- QFileInfo(base, QString::fromLocal8Bit(filepath)).absoluteFilePath())
-
QDir base{ "../" }; // Used for the QFileInfo(QDir, <path>) ctor
+ auto doCompare = [&base](const char *filepath) {
+ QCOMPARE(QFileInfo(fs::path(filepath)).absoluteFilePath(),
+ QFileInfo(QString::fromLocal8Bit(filepath)).absoluteFilePath());
+ QCOMPARE(QFileInfo(base, fs::path(filepath)).absoluteFilePath(),
+ QFileInfo(base, QString::fromLocal8Bit(filepath)).absoluteFilePath());
+ };
+#define COMPARE_CONSTRUCTION(filepath) \
+ doCompare(filepath); if (QTest::currentTestFailed()) return
COMPARE_CONSTRUCTION("./file");
@@ -2274,7 +2331,22 @@ void tst_QFileInfo::stdfilesystem()
COMPARE_CONSTRUCTION("/path/TO/file.txt");
COMPARE_CONSTRUCTION("./path/TO/file.txt");
COMPARE_CONSTRUCTION("../file.txt");
+#if !(defined(__GLIBCXX__) && defined(Q_OS_WIN32))
+ // libstdc++ bug on Windows - https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111244
COMPARE_CONSTRUCTION("./filæ.txt");
+#endif
+
+ // Test unicode strings
+ QCOMPARE(QFileInfo(fs::path(u"./filæ.txt")).absoluteFilePath(),
+ QFileInfo(u"./filæ.txt"_s).absoluteFilePath());
+ QCOMPARE(QFileInfo(base, fs::path(u"./filæ.txt")).absoluteFilePath(),
+ QFileInfo(base, u"./filæ.txt"_s).absoluteFilePath());
+#ifdef __cpp_char8_t
+ QCOMPARE(QFileInfo(fs::path(u8"./filæ.txt")).absoluteFilePath(),
+ QFileInfo(u8"./filæ.txt").absoluteFilePath());
+ QCOMPARE(QFileInfo(base, fs::path(u8"./filæ.txt")).absoluteFilePath(),
+ QFileInfo(base, u8"./filæ.txt").absoluteFilePath());
+#endif
#undef COMPARE_CONSTRUCTION
{
@@ -2336,5 +2408,20 @@ void tst_QFileInfo::stdfilesystem()
#endif
}
+void tst_QFileInfo::readSymLink()
+{
+ QString symLinkName("./a.link");
+ const auto tidier = qScopeGuard([symLinkName]() { QFile::remove(symLinkName); });
+
+#ifdef Q_OS_WIN
+ QVERIFY2(CreateSymbolicLink(L"a.link", L"..\\..\\a", SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE)
+ != 0,
+ "Failed to create symlink for test");
+#else
+ QVERIFY2(QFile::link("../../a", symLinkName), "Failed to create symlink for test");
+#endif
+ QFileInfo info(symLinkName);
+ QCOMPARE(info.readSymLink(), QString("../../a"));
+}
QTEST_MAIN(tst_QFileInfo)
#include "tst_qfileinfo.moc"
diff --git a/tests/auto/corelib/io/qfileselector/CMakeLists.txt b/tests/auto/corelib/io/qfileselector/CMakeLists.txt
index 5f254044df..c27c4f4f96 100644
--- a/tests/auto/corelib/io/qfileselector/CMakeLists.txt
+++ b/tests/auto/corelib/io/qfileselector/CMakeLists.txt
@@ -1,15 +1,15 @@
-# Generated from qfileselector.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfileselectors Test:
#####################################################################
-qt_internal_add_test(tst_qfileselectors
- SOURCES
- tst_qfileselector.cpp
- PUBLIC_LIBRARIES
- Qt::CorePrivate
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfileselectors LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Resources:
set(qfileselector_resource_files
@@ -32,10 +32,14 @@ set(qfileselector_resource_files
"platforms/+ios/test2"
"platforms/+linux/test"
"platforms/+linux/test2"
+ "platforms/+wasm/test"
+ "platforms/+wasm/test2"
"platforms/+macos/test"
"platforms/+macos/test2"
"platforms/+qnx/test"
"platforms/+qnx/test2"
+ "platforms/+unix/+emscripten/+wasm/test"
+ "platforms/+unix/+emscripten/test"
"platforms/+unix/+android/test"
"platforms/+unix/+darwin/+ios/test"
"platforms/+unix/+darwin/+macos/test"
@@ -62,10 +66,12 @@ set(qfileselector_resource_files
"platforms/test5"
)
-qt_internal_add_resource(tst_qfileselectors "qfileselector"
- PREFIX
- "/"
- FILES
- ${qfileselector_resource_files}
+qt_internal_add_test(tst_qfileselectors
+ SOURCES
+ tst_qfileselector.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ TESTDATA ${qfileselector_resource_files}
+ BUILTIN_TESTDATA
)
diff --git a/tests/auto/dbus/qdbusconnection_spyhook/BLACKLIST b/tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/+wasm/test
index e69de29bb2..e69de29bb2 100644
--- a/tests/auto/dbus/qdbusconnection_spyhook/BLACKLIST
+++ b/tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/+wasm/test
diff --git a/tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/test b/tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/test
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/auto/corelib/io/qfileselector/platforms/+unix/+emscripten/test
diff --git a/tests/auto/corelib/io/qfileselector/platforms/+wasm/test b/tests/auto/corelib/io/qfileselector/platforms/+wasm/test
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/auto/corelib/io/qfileselector/platforms/+wasm/test
diff --git a/tests/auto/corelib/io/qfileselector/platforms/+wasm/test2 b/tests/auto/corelib/io/qfileselector/platforms/+wasm/test2
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/auto/corelib/io/qfileselector/platforms/+wasm/test2
diff --git a/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp b/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
index 3d79507050..626166c8b8 100644
--- a/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
+++ b/tests/auto/corelib/io/qfileselector/tst_qfileselector.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 BlackBerry Limited. All rights reserved.
-** 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) 2013 BlackBerry Limited. All rights reserved.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qplatformdefs.h>
@@ -85,7 +60,7 @@ void tst_QFileSelector::basicTest_data()
QString expectedPlatform1File(":/platforms");
QString expectedPlatform2File(""); //Only the last selector
QString expectedPlatform3File; // Only the first selector (the family)
-#if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) && \
+#if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID) && !defined(Q_OS_WASM) && \
!defined(Q_OS_DARWIN) && !defined(Q_OS_LINUX) && !defined(Q_OS_HAIKU) && !defined(Q_OS_QNX)
/* We are only aware of specific unixes, and do not have test files for any of the others.
However those unixes can get a selector added from the result of a uname call, so this will
@@ -99,7 +74,8 @@ void tst_QFileSelector::basicTest_data()
# if (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)) || defined(Q_OS_FREEBSD)
distributionName = QSysInfo::productType();
# endif
- foreach (const QString &selector, QFileSelectorPrivate::platformSelectors()) {
+ const auto platformSelectors = QFileSelectorPrivate::platformSelectors();
+ for (const QString &selector : platformSelectors) {
// skip the Linux distribution name (if any) since we don't have files for them
if (selector == distributionName)
continue;
diff --git a/tests/auto/corelib/io/qfilesystementry/CMakeLists.txt b/tests/auto/corelib/io/qfilesystementry/CMakeLists.txt
index 84758836f2..85686a12b1 100644
--- a/tests/auto/corelib/io/qfilesystementry/CMakeLists.txt
+++ b/tests/auto/corelib/io/qfilesystementry/CMakeLists.txt
@@ -1,14 +1,20 @@
-# Generated from qfilesystementry.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfilesystementry Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfilesystementry LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfilesystementry
SOURCES
- ../../../../../src/corelib/io/qfilesystementry.cpp
- ../../../../../src/corelib/io/qfilesystementry_p.h
tst_qfilesystementry.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/io/qfilesystementry/tst_qfilesystementry.cpp b/tests/auto/corelib/io/qfilesystementry/tst_qfilesystementry.cpp
index a9ae848251..b35d89cbf3 100644
--- a/tests/auto/corelib/io/qfilesystementry/tst_qfilesystementry.cpp
+++ b/tests/auto/corelib/io/qfilesystementry/tst_qfilesystementry.cpp
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QtCore/private/qfilesystementry_p.h>
+using namespace Qt::StringLiterals;
+
class tst_QFileSystemEntry : public QObject
{
Q_OBJECT
@@ -106,12 +83,12 @@ void tst_QFileSystemEntry::getSetCheck_data()
<< "A:dir/without/leading/backslash.bat" << "backslash.bat" << "backslash" << "backslash" << "bat" << "bat" << false << false;
QTest::newRow("longpath")
- << uR"(\\?\D:\)"_qs
+ << uR"(\\?\D:\)"_s
<< absPrefix + QLatin1String(R"(D:\)")
<< "D:/" << "" << "" << "" << "" << "" << true << false;
QTest::newRow("uncprefix")
- << uR"(\\?\UNC\localhost\C$\tmp.txt)"_qs
+ << uR"(\\?\UNC\localhost\C$\tmp.txt)"_s
<< absPrefix + QLatin1String(R"(UNC\localhost\C$\tmp.txt)")
<< "//localhost/C$/tmp.txt" << "tmp.txt" << "tmp" << "tmp" << "txt" << "txt" << true
<< false;
diff --git a/tests/auto/corelib/io/qfilesystemmetadata/CMakeLists.txt b/tests/auto/corelib/io/qfilesystemmetadata/CMakeLists.txt
index 9b1705f072..cf9f647eda 100644
--- a/tests/auto/corelib/io/qfilesystemmetadata/CMakeLists.txt
+++ b/tests/auto/corelib/io/qfilesystemmetadata/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qfilesystemmetadata.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfilesystemmetadata Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfilesystemmetadata LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfilesystemmetadata
SOURCES
tst_qfilesystemmetadata.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/io/qfilesystemmetadata/tst_qfilesystemmetadata.cpp b/tests/auto/corelib/io/qfilesystemmetadata/tst_qfilesystemmetadata.cpp
index 880c88c441..9ec49999ca 100644
--- a/tests/auto/corelib/io/qfilesystemmetadata/tst_qfilesystemmetadata.cpp
+++ b/tests/auto/corelib/io/qfilesystemmetadata/tst_qfilesystemmetadata.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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
#include <QTest>
+#include <QtCore/QDateTime>
#include <QtCore/private/qfilesystemmetadata_p.h>
class tst_QFileSystemMetaData : public QObject
@@ -67,14 +43,14 @@ void tst_QFileSystemMetaData::timeSinceEpoch()
data.ftCreationTime = epochToFileTime(afterEpochUtc);
meta.fillFromFindData(data);
QCOMPARE(meta.birthTime().toUTC(),
- QDateTime::fromMSecsSinceEpoch(afterEpochUtc * qint64(1000), Qt::UTC));
+ QDateTime::fromMSecsSinceEpoch(afterEpochUtc * qint64(1000), QTimeZone::UTC));
#else
QT_STATBUF data;
memset(&data, 0, sizeof(data));
data.st_ctime = afterEpochUtc;
meta.fillFromStatBuf(data);
QCOMPARE(meta.metadataChangeTime().toUTC(),
- QDateTime::fromMSecsSinceEpoch(afterEpochUtc * qint64(1000), Qt::UTC));
+ QDateTime::fromMSecsSinceEpoch(afterEpochUtc * qint64(1000), QTimeZone::UTC));
#endif
}
#else // i.e. no Q_AUTOTEST_EXPORT
diff --git a/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST b/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST
index 457499591d..3b59c6477a 100644
--- a/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST
+++ b/tests/auto/corelib/io/qfilesystemwatcher/BLACKLIST
@@ -1,10 +1,15 @@
# QTBUG-33574 QTBUG-30943
[signalsEmittedAfterFileMoved]
-windows-7sp1
-windows-10
+windows
[watchFileAndItsDirectory:native backend-testfile]
osx
windows
[watchFileAndItsDirectory:native backend-specialchars]
osx
windows
+# QTBUG-102095
+[watchDirectory]
+macos arm ci
+# QTBUG-102096
+[signalsEmittedAfterFileMoved]
+macos arm ci
diff --git a/tests/auto/corelib/io/qfilesystemwatcher/CMakeLists.txt b/tests/auto/corelib/io/qfilesystemwatcher/CMakeLists.txt
index 7523122907..0a48155895 100644
--- a/tests/auto/corelib/io/qfilesystemwatcher/CMakeLists.txt
+++ b/tests/auto/corelib/io/qfilesystemwatcher/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qfilesystemwatcher.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfilesystemwatcher Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfilesystemwatcher LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfilesystemwatcher
SOURCES
tst_qfilesystemwatcher.cpp
diff --git a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
index eda146dd02..a5b0087f9c 100644
--- a/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
+++ b/tests/auto/corelib/io/qfilesystemwatcher/tst_qfilesystemwatcher.cpp
@@ -1,30 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
#include <QTest>
#include <QCoreApplication>
@@ -33,6 +9,8 @@
#include <QFileSystemWatcher>
#include <QElapsedTimer>
#include <QTextStream>
+#include <QMap>
+#include <QString>
#include <QDir>
#include <QSignalSpy>
#include <QTimer>
@@ -45,6 +23,19 @@
#include <QStandardPaths>
#endif
+using namespace std::chrono_literals;
+
+#if defined(Q_OS_QNX)
+// Longer polling times on QNX, otherwise the tests fail on the CI
+constexpr auto nativeEngineTimeout = 1s;
+constexpr auto pollingEngineTimeout = 1s;
+constexpr bool isQNX = true;
+#else
+constexpr auto nativeEngineTimeout = 0ms;
+constexpr auto pollingEngineTimeout = 20ms;
+constexpr bool isQNX = false;
+#endif
+
/* All tests need to run in temporary directories not used
* by the application to avoid non-deterministic failures on Windows
* due to locked directories and left-overs from previous tests. */
@@ -152,26 +143,27 @@ void tst_QFileSystemWatcher::basicTest()
watcher.setObjectName(QLatin1String("_qt_autotest_force_engine_") + backend);
QVERIFY(watcher.addPath(testFile.fileName()));
+ const bool isPollerBackend = backend == u"poller";
+
QSignalSpy changedSpy(&watcher, &QFileSystemWatcher::fileChanged);
QVERIFY(changedSpy.isValid());
QEventLoop eventLoop;
QTimer timer;
+ timer.setInterval(isPollerBackend ? pollingEngineTimeout : nativeEngineTimeout);
connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit()));
// modify the file, should get a signal from the watcher
- // resolution of the modification time is system dependent, but it's at most 1 second when using
- // the polling engine. I've heard rumors that FAT32 has a 2 second resolution. So, we have to
- // wait a bit before we can modify the file (hrmph)...
- QTest::qWait(2000);
+ if (isPollerBackend || isQNX)
+ QTest::qWait(pollingEngineTimeout);
- testFile.open(QIODevice::WriteOnly | QIODevice::Append);
+ QVERIFY(testFile.open(QIODevice::WriteOnly | QIODevice::Append));
testFile.write(QByteArray("world"));
testFile.close();
// waiting max 5 seconds for notification for file modification to trigger
- QTRY_COMPARE(changedSpy.count(), 1);
- QCOMPARE(changedSpy.at(0).count(), 1);
+ QTRY_COMPARE(changedSpy.size(), 1);
+ QCOMPARE(changedSpy.at(0).size(), 1);
QString fileName = changedSpy.at(0).at(0).toString();
QCOMPARE(fileName, testFile.fileName());
@@ -180,25 +172,25 @@ void tst_QFileSystemWatcher::basicTest()
// remove the watch and modify the file, should not get a signal from the watcher
QVERIFY(watcher.removePath(testFile.fileName()));
- testFile.open(QIODevice::WriteOnly | QIODevice::Truncate);
+ QVERIFY(testFile.open(QIODevice::WriteOnly | QIODevice::Truncate));
testFile.write(QByteArray("hello universe!"));
testFile.close();
- // waiting max 5 seconds for notification for file modification to trigger
- timer.start(5000);
+ // waiting for notification for file modification to trigger
+ timer.start();
eventLoop.exec();
- QCOMPARE(changedSpy.count(), 0);
+ QCOMPARE(changedSpy.size(), 0);
// readd the file watch with a relative path
const QString relativeTestFileName = QDir::current().relativeFilePath(testFile.fileName());
QVERIFY(!relativeTestFileName.isEmpty());
QVERIFY(watcher.addPath(relativeTestFileName));
- testFile.open(QIODevice::WriteOnly | QIODevice::Truncate);
+ QVERIFY(testFile.open(QIODevice::WriteOnly | QIODevice::Truncate));
testFile.write(QByteArray("hello multiverse!"));
testFile.close();
- QTRY_VERIFY(changedSpy.count() > 0);
+ QTRY_VERIFY(changedSpy.size() > 0);
QVERIFY(watcher.removePath(relativeTestFileName));
@@ -214,8 +206,8 @@ void tst_QFileSystemWatcher::basicTest()
#if !defined(Q_OS_QNX)
// waiting max 5 seconds for notification for file permission modification to trigger
- QTRY_COMPARE(changedSpy.count(), 1);
- QCOMPARE(changedSpy.at(0).count(), 1);
+ QTRY_COMPARE(changedSpy.size(), 1);
+ QCOMPARE(changedSpy.at(0).size(), 1);
fileName = changedSpy.at(0).at(0).toString();
QCOMPARE(fileName, testFile.fileName());
@@ -228,11 +220,11 @@ void tst_QFileSystemWatcher::basicTest()
QVERIFY(watcher.removePath(testFile.fileName()));
testFile.setPermissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOther);
- // waiting max 5 seconds for notification for file modification to trigger
- timer.start(5000);
+ // waiting for notification for file modification to trigger
+ timer.start();
eventLoop.exec();
- QCOMPARE(changedSpy.count(), 0);
+ QCOMPARE(changedSpy.size(), 0);
// readd the file watch
QVERIFY(watcher.addPath(testFile.fileName()));
@@ -243,8 +235,8 @@ void tst_QFileSystemWatcher::basicTest()
// waiting max 5 seconds for notification for file removal to trigger
// > 0 && < 3 because some platforms may emit two changes
// XXX: which platforms? (QTBUG-23370)
- QTRY_VERIFY(changedSpy.count() > 0 && changedSpy.count() < 3);
- QCOMPARE(changedSpy.at(0).count(), 1);
+ QTRY_VERIFY(changedSpy.size() > 0 && changedSpy.size() < 3);
+ QCOMPARE(changedSpy.at(0).size(), 1);
fileName = changedSpy.at(0).at(0).toString();
QCOMPARE(fileName, testFile.fileName());
@@ -256,11 +248,11 @@ void tst_QFileSystemWatcher::basicTest()
testFile.write(QByteArray("hello"));
testFile.close();
- // waiting max 5 seconds for notification for file recreation to trigger
- timer.start(5000);
+ // waiting for notification for file recreation to trigger
+ timer.start();
eventLoop.exec();
- QCOMPARE(changedSpy.count(), 0);
+ QCOMPARE(changedSpy.size(), 0);
QVERIFY(testFile.remove());
}
@@ -271,7 +263,9 @@ void tst_QFileSystemWatcher::watchDirectory_data()
QTest::addColumn<QStringList>("testDirNames");
const QStringList testDirNames = {QStringLiteral("testdir"), QStringLiteral("testdir2")};
+#if !defined(QT_NO_INOTIFY)
QTest::newRow("native backend") << "native" << testDirNames;
+#endif
QTest::newRow("poller backend") << "poller" << testDirNames;
}
@@ -302,16 +296,18 @@ void tst_QFileSystemWatcher::watchDirectory()
watcher.setObjectName(QLatin1String("_qt_autotest_force_engine_") + backend);
QVERIFY(watcher.addPaths(testDirs).isEmpty());
+ const bool isPollerBackend = backend == u"poller";
+
QSignalSpy changedSpy(&watcher, &QFileSystemWatcher::directoryChanged);
QVERIFY(changedSpy.isValid());
QEventLoop eventLoop;
QTimer timer;
+ timer.setInterval(isPollerBackend ? pollingEngineTimeout : nativeEngineTimeout);
connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit()));
- // resolution of the modification time is system dependent, but it's at most 1 second when using
- // the polling engine. From what I know, FAT32 has a 2 second resolution. So we have to
- // wait before modifying the directory...
- QTest::qWait(2000);
+ if (isPollerBackend || isQNX)
+ QTest::qWait(pollingEngineTimeout);
+
// remove the watch, should not get notification of a new file
QVERIFY(watcher.removePaths(testDirs).isEmpty());
for (const auto &testFileName : testFiles) {
@@ -320,11 +316,11 @@ void tst_QFileSystemWatcher::watchDirectory()
testFile.close();
}
- // waiting max 5 seconds for notification for file recreationg to trigger
- timer.start(5000);
+ // waiting for notification for file recreation to trigger
+ timer.start();
eventLoop.exec();
- QCOMPARE(changedSpy.count(), 0);
+ QCOMPARE(changedSpy.size(), 0);
QVERIFY(watcher.addPaths(testDirs).isEmpty());
@@ -332,7 +328,7 @@ void tst_QFileSystemWatcher::watchDirectory()
for (const auto &testFileName : testFiles)
QVERIFY(QFile::remove(testFileName));
- timer.start(5000);
+ timer.start();
eventLoop.exec();
// remove the directory, should get a signal from the watcher
@@ -344,10 +340,10 @@ void tst_QFileSystemWatcher::watchDirectory()
signalCounter[testDirName] = 0;
// waiting max 5 seconds for notification for directory removal to trigger
- QTRY_COMPARE(changedSpy.count(), testDirs.size() * 2);
- for (int i = 0; i < changedSpy.count(); i++) {
+ QTRY_COMPARE(changedSpy.size(), testDirs.size() * 2);
+ for (int i = 0; i < changedSpy.size(); i++) {
const auto &signal = changedSpy.at(i);
- QCOMPARE(signal.count(), 1);
+ QCOMPARE(signal.size(), 1);
auto it = signalCounter.find(signal.at(0).toString());
QVERIFY(it != signalCounter.end());
@@ -359,7 +355,7 @@ void tst_QFileSystemWatcher::watchDirectory()
QCOMPARE(count, 2);
// flush pending signals (like the one from the rmdir above)
- timer.start(5000);
+ timer.start();
eventLoop.exec();
changedSpy.clear();
@@ -371,11 +367,11 @@ void tst_QFileSystemWatcher::watchDirectory()
}
}
- // waiting max 5 seconds for notification for dir recreation to trigger
- timer.start(5000);
+ // waiting for notification for dir recreation to trigger
+ timer.start();
eventLoop.exec();
- QCOMPARE(changedSpy.count(), 0);
+ QCOMPARE(changedSpy.size(), 0);
for (const auto &testDirName : testDirs)
QVERIFY(temporaryDir.rmdir(testDirName));
@@ -387,12 +383,12 @@ void tst_QFileSystemWatcher::addPath()
QFileSystemWatcher watcher;
QString home = QDir::homePath();
QVERIFY(watcher.addPath(home));
- QCOMPARE(watcher.directories().count(), 1);
+ QCOMPARE(watcher.directories().size(), 1);
QCOMPARE(watcher.directories().first(), home);
// second watch on an already-watched path should fail
QVERIFY(!watcher.addPath(home));
- QCOMPARE(watcher.directories().count(), 1);
+ QCOMPARE(watcher.directories().size(), 1);
// With empty string
QTest::ignoreMessage(QtWarningMsg, "QFileSystemWatcher::addPath: path is empty");
@@ -405,9 +401,9 @@ void tst_QFileSystemWatcher::removePath()
QString home = QDir::homePath();
QVERIFY(watcher.addPath(home));
QVERIFY(watcher.removePath(home));
- QCOMPARE(watcher.directories().count(), 0);
+ QCOMPARE(watcher.directories().size(), 0);
QVERIFY(!watcher.removePath(home));
- QCOMPARE(watcher.directories().count(), 0);
+ QCOMPARE(watcher.directories().size(), 0);
// With empty string
QTest::ignoreMessage(QtWarningMsg, "QFileSystemWatcher::removePath: path is empty");
@@ -419,8 +415,14 @@ void tst_QFileSystemWatcher::addPaths()
QFileSystemWatcher watcher;
QStringList paths;
paths << QDir::homePath() << QDir::tempPath();
+#ifndef Q_OS_QNX
+ // Adding this makes QNX fail and we haven't investigated why
+ for (const QFileInfo &fi : QDir::drives())
+ paths << fi.absoluteFilePath(); // on Unix, this will be just "/"
+#endif
+
QCOMPARE(watcher.addPaths(paths), QStringList());
- QCOMPARE(watcher.directories().count(), 2);
+ QCOMPARE(watcher.directories().size(), paths.size());
// With empty list
paths.clear();
@@ -487,10 +489,16 @@ void tst_QFileSystemWatcher::removePaths()
QFileSystemWatcher watcher;
QStringList paths;
paths << QDir::homePath() << QDir::tempPath();
+#ifndef Q_OS_QNX
+ // Adding this makes QNX fail and we haven't investigated why
+ for (const QFileInfo &fi : QDir::drives())
+ paths << fi.absoluteFilePath(); // on Unix, this will be just "/"
+#endif
+
QCOMPARE(watcher.addPaths(paths), QStringList());
- QCOMPARE(watcher.directories().count(), 2);
+ QCOMPARE(watcher.directories().size(), paths.size());
QCOMPARE(watcher.removePaths(paths), QStringList());
- QCOMPARE(watcher.directories().count(), 0);
+ QCOMPARE(watcher.directories().size(), 0);
//With empty list
paths.clear();
@@ -558,28 +566,29 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory()
QVERIFY(watcher.addPath(testDir.absolutePath()));
QVERIFY(watcher.addPath(testFileName));
+ const bool isPollerBackend = backend == u"poller";
+
QSignalSpy fileChangedSpy(&watcher, &QFileSystemWatcher::fileChanged);
FileSystemWatcherSpy dirChangedSpy(&watcher, FileSystemWatcherSpy::SpyOnDirectoryChanged);
QVERIFY(fileChangedSpy.isValid());
QEventLoop eventLoop;
QTimer timer;
+ timer.setInterval(isPollerBackend ? pollingEngineTimeout : nativeEngineTimeout);
connect(&timer, SIGNAL(timeout()), &eventLoop, SLOT(quit()));
- // resolution of the modification time is system dependent, but it's at most 1 second when using
- // the polling engine. From what I know, FAT32 has a 2 second resolution. So we have to
- // wait before modifying the directory...
- QTest::qWait(2000);
+ if (isPollerBackend || isQNX)
+ QTest::qWait(pollingEngineTimeout);
QVERIFY2(testFile.open(QIODevice::WriteOnly | QIODevice::Truncate), msgFileOperationFailed("open", testFile));
QVERIFY2(testFile.write(QByteArrayLiteral("hello again")), msgFileOperationFailed("write", testFile));
testFile.close();
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
// wait again for the file's atime to be updated
QTest::qWait(2000);
#endif
- QTRY_VERIFY(fileChangedSpy.count() > 0);
+ QTRY_VERIFY(fileChangedSpy.size() > 0);
QVERIFY2(dirChangedSpy.count() == 0, dirChangedSpy.receivedFilesMessage());
fileChangedSpy.clear();
@@ -588,9 +597,9 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory()
QVERIFY2(secondFile.write(QByteArrayLiteral("Foo")) > 0, msgFileOperationFailed("write", secondFile));
secondFile.close();
- timer.start(3000);
+ timer.start();
eventLoop.exec();
- int fileChangedSpyCount = fileChangedSpy.count();
+ int fileChangedSpyCount = fileChangedSpy.size();
#ifdef Q_OS_WIN
if (fileChangedSpyCount != 0)
QEXPECT_FAIL("", "See QTBUG-30943", Continue);
@@ -602,7 +611,7 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory()
QVERIFY(QFile::remove(testFileName));
- QTRY_VERIFY(fileChangedSpy.count() > 0);
+ QTRY_VERIFY(fileChangedSpy.size() > 0);
QTRY_COMPARE(dirChangedSpy.count(), 1);
fileChangedSpy.clear();
@@ -612,9 +621,9 @@ void tst_QFileSystemWatcher::watchFileAndItsDirectory()
QVERIFY(!watcher.removePath(testFileName));
QVERIFY(QFile::remove(secondFileName));
- timer.start(3000);
+ timer.start();
eventLoop.exec();
- QCOMPARE(fileChangedSpy.count(), 0);
+ QCOMPARE(fileChangedSpy.size(), 0);
QCOMPARE(dirChangedSpy.count(), 1);
// QTBUG-61792, removal should succeed (bug on Windows which uses one change
@@ -636,9 +645,11 @@ void tst_QFileSystemWatcher::nonExistingFile()
QStringList() << "../..//./does-not-exist");
// empty path is not actually a failure
+ QTest::ignoreMessage(QtWarningMsg, "QFileSystemWatcher::addPaths: list is empty");
QCOMPARE(watcher.addPaths(QStringList() << QString()), QStringList());
// empty path is not actually a failure
+ QTest::ignoreMessage(QtWarningMsg, "QFileSystemWatcher::removePaths: list is empty");
QCOMPARE(watcher.removePaths(QStringList() << QString()), QStringList());
}
@@ -717,7 +728,7 @@ void tst_QFileSystemWatcher::QTBUG2331()
// remove directory, we should get one change signal, and we should no longer
// be watching the directory.
QVERIFY(temporaryDirectory.remove());
- QTRY_COMPARE(changedSpy.count(), 1);
+ QTRY_COMPARE(changedSpy.size(), 1);
QCOMPARE(watcher.directories(), QStringList());
}
#endif // QT_BUILD_INTERNAL
@@ -745,7 +756,8 @@ public slots:
QCOMPARE(finfo.absolutePath(), moveSrcDir.absolutePath());
if (!added) {
- foreach (const QFileInfo &fi, moveDestination.entryInfoList(QDir::Files | QDir::NoSymLinks))
+ const auto entries = moveDestination.entryInfoList(QDir::Files | QDir::NoSymLinks);
+ for (const QFileInfo &fi : entries)
watcher->addPath(fi.absoluteFilePath());
added = true;
}
@@ -785,9 +797,9 @@ void tst_QFileSystemWatcher::signalsEmittedAfterFileMoved()
QVERIFY(watcher.addPath(movePath));
// add files to watcher
- QFileInfoList files = testDir.entryInfoList(QDir::Files | QDir::NoSymLinks);
+ const QFileInfoList files = testDir.entryInfoList(QDir::Files | QDir::NoSymLinks);
QCOMPARE(files.size(), fileCount);
- foreach (const QFileInfo &finfo, files)
+ for (const QFileInfo &finfo : files)
QVERIFY(watcher.addPath(finfo.absoluteFilePath()));
// create the signal receiver
@@ -799,7 +811,7 @@ void tst_QFileSystemWatcher::signalsEmittedAfterFileMoved()
QCOMPARE(changedSpy.count(), 0);
// move files to second directory
- foreach (const QFileInfo &finfo, files)
+ for (const QFileInfo &finfo : files)
QVERIFY(testDir.rename(finfo.fileName(), QString("movehere/%2").arg(finfo.fileName())));
QCoreApplication::processEvents();
diff --git a/tests/auto/corelib/io/qiodevice/BLACKLIST b/tests/auto/corelib/io/qiodevice/BLACKLIST
deleted file mode 100644
index b8a61d3ca9..0000000000
--- a/tests/auto/corelib/io/qiodevice/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[unget]
-redhatenterpriselinuxworkstation-6.6
diff --git a/tests/auto/corelib/io/qiodevice/CMakeLists.txt b/tests/auto/corelib/io/qiodevice/CMakeLists.txt
index 2bd6033440..18cae40663 100644
--- a/tests/auto/corelib/io/qiodevice/CMakeLists.txt
+++ b/tests/auto/corelib/io/qiodevice/CMakeLists.txt
@@ -1,36 +1,24 @@
-# Generated from qiodevice.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qiodevice Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qiodevice LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "tst_qiodevice.cpp")
qt_internal_add_test(tst_qiodevice
SOURCES
tst_qiodevice.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
TESTDATA ${test_data}
+ QT_TEST_SERVER_LIST "apache2" "cyrus"
)
-
-#### Keys ignored in scope 1:.:.:qiodevice.pro:<TRUE>:
-# MOC_DIR = "tmp"
-
-## Scopes:
-#####################################################################
-
-if(ANDROID)
- # Resources:
- set(android_testdata_resource_files
- "tst_qiodevice.cpp"
- )
-
- qt_internal_add_resource(tst_qiodevice "android_testdata"
- PREFIX
- "/"
- FILES
- ${android_testdata_resource_files}
- )
-endif()
diff --git a/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp b/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp
index 87e46bff09..ad88d14bc9 100644
--- a/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp
+++ b/tests/auto/corelib/io/qiodevice/tst_qiodevice.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
#include <QtNetwork/QtNetwork>
@@ -104,15 +79,20 @@ void tst_QIODevice::getSetCheck()
//----------------------------------------------------------------------------------
void tst_QIODevice::constructing_QTcpSocket()
{
+#ifdef QT_TEST_SERVER
+ if (!QtNetworkSettings::verifyConnection(QtNetworkSettings::imapServerName(), 143))
+ QSKIP("No network test server available");
+#else
if (!QtNetworkSettings::verifyTestNetworkSettings())
QSKIP("No network test server available");
+#endif
QTcpSocket socket;
QIODevice *device = &socket;
QVERIFY(!device->isOpen());
- socket.connectToHost(QtNetworkSettings::serverName(), 143);
+ socket.connectToHost(QtNetworkSettings::imapServerName(), 143);
QVERIFY(socket.waitForConnected(30000));
QVERIFY(device->isOpen());
QCOMPARE(device->readChannelCount(), 1);
@@ -130,7 +110,7 @@ void tst_QIODevice::constructing_QTcpSocket()
socket.close();
QCOMPARE(socket.readChannelCount(), 0);
QCOMPARE(socket.writeChannelCount(), 0);
- socket.connectToHost(QtNetworkSettings::serverName(), 143);
+ socket.connectToHost(QtNetworkSettings::imapServerName(), 143);
QVERIFY(socket.waitForConnected(30000));
QVERIFY(device->isOpen());
@@ -191,16 +171,16 @@ void tst_QIODevice::constructing_QFile()
void tst_QIODevice::read_QByteArray()
{
QFile f(QFINDTESTDATA("tst_qiodevice.cpp"));
- f.open(QIODevice::ReadOnly);
+ QVERIFY(f.open(QIODevice::ReadOnly));
QByteArray b = f.read(10);
- QCOMPARE(b.length(), 10);
+ QCOMPARE(b.size(), 10);
b = f.read(256);
- QCOMPARE(b.length(), 256);
+ QCOMPARE(b.size(), 256);
b = f.read(0);
- QCOMPARE(b.length(), 0);
+ QCOMPARE(b.size(), 0);
}
//--------------------------------------------------------------------
@@ -270,9 +250,17 @@ void tst_QIODevice::unget()
result = QByteArray("ZXCV");
lineResult = "ZXCV";
} else {
- if (!QtNetworkSettings::verifyTestNetworkSettings())
- QSKIP("No network test server available");
- socket.connectToHost(QtNetworkSettings::serverName(), 80);
+#ifdef QT_TEST_SERVER
+ const bool hasNetworkServer =
+ QtNetworkSettings::verifyConnection(QtNetworkSettings::httpServerName(), 80);
+#else
+ const bool hasNetworkServer = QtNetworkSettings::verifyTestNetworkSettings();
+#endif
+ if (!hasNetworkServer) {
+ qInfo("No network test server: skipping QTcpSocket part of test.");
+ continue;
+ }
+ socket.connectToHost(QtNetworkSettings::httpServerName(), 80);
socket.write("GET / HTTP/1.0\r\n\r\n");
QVERIFY(socket.waitForReadyRead());
dev = &socket;
diff --git a/tests/auto/corelib/io/qipaddress/CMakeLists.txt b/tests/auto/corelib/io/qipaddress/CMakeLists.txt
index b4801c2ab2..c57ef52c1d 100644
--- a/tests/auto/corelib/io/qipaddress/CMakeLists.txt
+++ b/tests/auto/corelib/io/qipaddress/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qipaddress.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qipaddress Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qipaddress LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qipaddress
SOURCES
tst_qipaddress.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/io/qipaddress/tst_qipaddress.cpp b/tests/auto/corelib/io/qipaddress/tst_qipaddress.cpp
index 60b0c697c5..c0a738e22d 100644
--- a/tests/auto/corelib/io/qipaddress/tst_qipaddress.cpp
+++ b/tests/auto/corelib/io/qipaddress/tst_qipaddress.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#define _CRT_SECURE_NO_WARNINGS 1
@@ -95,7 +70,7 @@ namespace QTest {
char *toString(const Ip6 &ip6)
{
char buf[sizeof "1111:2222:3333:4444:5555:6666:7777:8888" + 2];
- sprintf(buf, "%x:%x:%x:%x:%x:%x:%x:%x",
+ snprintf(buf, sizeof(buf), "%x:%x:%x:%x:%x:%x:%x:%x",
ip6.u8[0] << 8 | ip6.u8[1],
ip6.u8[2] << 8 | ip6.u8[3],
ip6.u8[4] << 8 | ip6.u8[5],
diff --git a/tests/auto/corelib/io/qlockfile/CMakeLists.txt b/tests/auto/corelib/io/qlockfile/CMakeLists.txt
index 456ee88bb0..1dda272d52 100644
--- a/tests/auto/corelib/io/qlockfile/CMakeLists.txt
+++ b/tests/auto/corelib/io/qlockfile/CMakeLists.txt
@@ -1,11 +1,20 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qlockfile Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qlockfile LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qlockfile
SOURCES
tst_qlockfile.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
Qt::CorePrivate
)
@@ -14,7 +23,7 @@ qt_internal_add_test(tst_qlockfile
#####################################################################
qt_internal_extend_target(tst_qlockfile CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
advapi32
)
add_subdirectory(qlockfiletesthelper)
diff --git a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt
index 8917f2aa34..c8bde9d606 100644
--- a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt
+++ b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/CMakeLists.txt
@@ -1,11 +1,12 @@
-# Generated from qlockfile_test_helper.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qlockfile_test_helper Binary:
#####################################################################
-qt_internal_add_test_helper(qlockfile_test_helper # special case
- OVERRIDE_OUTPUT_DIRECTORY # special case
+qt_internal_add_test_helper(qlockfile_test_helper
+ OVERRIDE_OUTPUT_DIRECTORY
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
SOURCES
qlockfile_test_helper.cpp
diff --git a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp
index e086bf1904..b990209f32 100644
--- a/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp
+++ b/tests/auto/corelib/io/qlockfile/qlockfiletesthelper/qlockfile_test_helper.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org>
-** 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) 2013 David Faure <faure+bluesystems@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QCoreApplication>
diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp
index 2766ea51d5..b7056e20c9 100644
--- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp
+++ b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2013 David Faure <faure+bluesystems@kde.org>
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2013 David Faure <faure+bluesystems@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QTest>
#include <QtConcurrentRun>
@@ -41,6 +17,8 @@
#include <qsysinfo.h>
#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS)
#include <unistd.h>
+
+#include <sys/stat.h> // utimensat
#include <sys/time.h>
#elif defined(Q_OS_WIN)
# include <qt_windows.h>
@@ -49,6 +27,8 @@
#include <private/qlockfile_p.h> // for getLockFileHandle()
+using namespace std::chrono_literals;
+
class tst_QLockFile : public QObject
{
Q_OBJECT
@@ -119,7 +99,7 @@ void tst_QLockFile::lockUnlock()
QVERIFY(lockFile.getLockInfo(&pid, &hostname, &appname));
QCOMPARE(pid, QCoreApplication::applicationPid());
QCOMPARE(appname, qAppName());
- QVERIFY(!lockFile.tryLock(200));
+ QVERIFY(!lockFile.tryLock(200ms));
QCOMPARE(int(lockFile.error()), int(QLockFile::LockFailedError));
// Unlock deletes the lock file
@@ -364,8 +344,8 @@ void tst_QLockFile::staleLongLockFromBusyProcess()
QTRY_VERIFY(QFile::exists(fileName));
QLockFile secondLock(fileName);
- secondLock.setStaleLockTime(0);
- QVERIFY(!secondLock.tryLock(100)); // never stale
+ secondLock.setStaleLockTime(0ms);
+ QVERIFY(!secondLock.tryLock(100ms)); // never stale
QCOMPARE(int(secondLock.error()), int(QLockFile::LockFailedError));
qint64 pid;
QTRY_VERIFY(secondLock.getLockInfo(&pid, NULL, NULL));
@@ -533,15 +513,15 @@ void tst_QLockFile::corruptedLockFile()
}
QLockFile secondLock(fileName);
- secondLock.setStaleLockTime(100);
- QVERIFY(secondLock.tryLock(10000));
+ secondLock.setStaleLockTime(100ms);
+ QVERIFY(secondLock.tryLock(10s));
QCOMPARE(int(secondLock.error()), int(QLockFile::NoError));
}
void tst_QLockFile::corruptedLockFileInTheFuture()
{
-#if !defined(Q_OS_UNIX)
- QSKIP("This tests needs utimes");
+#if !defined(Q_OS_UNIX) || defined(Q_OS_VXWORKS)
+ QSKIP("This test needs utimensat");
#else
// This test is the same as the previous one, but the corruption was so there is a corrupted
// .rmlock whose timestamp is in the future
@@ -553,11 +533,12 @@ void tst_QLockFile::corruptedLockFileInTheFuture()
QVERIFY(file.open(QFile::WriteOnly));
}
- struct timeval times[2];
- gettimeofday(times, 0);
- times[1].tv_sec = (times[0].tv_sec += 600);
- times[1].tv_usec = times[0].tv_usec;
- utimes(fileName.toLocal8Bit(), times);
+ struct timespec times[2];
+ clock_gettime(CLOCK_REALTIME, times);
+ times[0].tv_sec += 600;
+ times[1].tv_sec = times[0].tv_sec;
+ times[1].tv_nsec = times[0].tv_nsec;
+ utimensat(0 /* ignored */, fileName.toLocal8Bit(), times, 0);
QTest::ignoreMessage(QtInfoMsg, "QLockFile: Lock file '" + fileName.toUtf8() + "' has a modification time in the future");
corruptedLockFile();
@@ -586,7 +567,7 @@ void tst_QLockFile::hostnameChange()
{
// we should fail to lock
QLockFile lock2(lockFile);
- QVERIFY(!lock2.tryLock(1000));
+ QVERIFY(!lock2.tryLock(1s));
}
}
@@ -613,7 +594,7 @@ void tst_QLockFile::differentMachines()
{
// we should fail to lock
QLockFile lock2(lockFile);
- QVERIFY(!lock2.tryLock(1000));
+ QVERIFY(!lock2.tryLock(1s));
}
}
@@ -642,7 +623,7 @@ void tst_QLockFile::reboot()
f.close();
// we should succeed in locking
- QVERIFY(lock1.tryLock(0));
+ QVERIFY(lock1.tryLock(0ms));
}
bool tst_QLockFile::overwritePidInLockFile(const QString &filePath, qint64 pid)
diff --git a/tests/auto/corelib/io/qloggingcategory/CMakeLists.txt b/tests/auto/corelib/io/qloggingcategory/CMakeLists.txt
index 13ee586696..0e9fc98fae 100644
--- a/tests/auto/corelib/io/qloggingcategory/CMakeLists.txt
+++ b/tests/auto/corelib/io/qloggingcategory/CMakeLists.txt
@@ -1,15 +1,19 @@
-# Generated from qloggingcategory.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qloggingcategory Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qloggingcategory LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qloggingcategory
SOURCES
tst_qloggingcategory.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
-
-#### Keys ignored in scope 1:.:.:qloggingcategory.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp
index a2a96e32d3..476ca275a4 100644
--- a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp
+++ b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QMutexLocker>
#include <QLoggingCategory>
+#include <QMap>
+#include <QStringList>
Q_LOGGING_CATEGORY(TST_LOG, "tst.log")
Q_LOGGING_CATEGORY(Digia_Oslo_Office_com, "Digia.Oslo.Office.com")
@@ -101,7 +78,7 @@ public:
{
QString ret;
QTextStream out(&ret);
- for (int a = 0; a < _configitemEntryOrder.count(); a++) {
+ for (int a = 0; a < _configitemEntryOrder.size(); a++) {
out << _configitemEntryOrder[a]
<< " = "
<< _values.value(_configitemEntryOrder[a]) << Qt::endl;
@@ -176,7 +153,7 @@ inline QString cleanLogLine(const QString &qstring)
buf.remove("../");
buf.remove("qlog/");
QString ret;
- for (int i = 0; i < buf.length(); i++) {
+ for (int i = 0; i < buf.size(); i++) {
if (buf[i] >= '!' && buf[i] <= 'z')
ret += buf[i];
}
@@ -204,7 +181,7 @@ private slots:
void initTestCase()
{
qputenv("XDG_CONFIG_DIRS", "/does/not/exist");
- qputenv("QT_MESSAGE_PATTERN", QByteArray("%{category}: %{type},%{message}"));
+ qputenv("QT_MESSAGE_PATTERN", "%{category}: %{type},%{message}");
oldMessageHandler = qInstallMessageHandler(myCustomMessageHandler);
// Create configuration
_config = new Configuration();
@@ -926,7 +903,7 @@ private slots:
buf = QStringLiteral("Digia.Berlin.Office.com.debug: Berlin \"from Thread 2\" :false");
compareagainst.append(cleanLogLine(buf));
- for (int i = 0; i < threadtest.count(); i++) {
+ for (int i = 0; i < threadtest.size(); i++) {
if (!compareagainst.contains(cleanLogLine(threadtest[i]))){
fprintf(stdout, "%s\r\n", threadtest[i].toLatin1().constData());
QVERIFY2(false, "Multithread log is not complete!");
@@ -939,6 +916,23 @@ private slots:
delete _config;
qInstallMessageHandler(oldMessageHandler);
}
+
+ void qFatalMacros()
+ {
+ QLoggingCategory customCategory("custom");
+
+ // compile-only test for fatal macros
+ return;
+
+ qFatal("Message");
+ qFatal("Message %d", 42);
+ qFatal(customCategory, "Message %d", 42);
+ qFatal(TST_LOG, "Message %d", 42);
+
+ qFatal() << "Message" << 42;
+ qCFatal(customCategory) << "Message" << 42;
+ qCFatal(TST_LOG) << "Message" << 42;
+ }
};
QTEST_MAIN(tst_QLogging)
diff --git a/tests/auto/corelib/io/qloggingregistry/CMakeLists.txt b/tests/auto/corelib/io/qloggingregistry/CMakeLists.txt
index a00fb8cb32..5442c76e7f 100644
--- a/tests/auto/corelib/io/qloggingregistry/CMakeLists.txt
+++ b/tests/auto/corelib/io/qloggingregistry/CMakeLists.txt
@@ -1,36 +1,23 @@
-# Generated from qloggingregistry.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qloggingregistry Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qloggingregistry LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "qtlogging.ini")
qt_internal_add_test(tst_qloggingregistry
SOURCES
tst_qloggingregistry.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
TESTDATA ${test_data}
)
-
-#### Keys ignored in scope 1:.:.:qloggingregistry.pro:<TRUE>:
-# TEMPLATE = "app"
-
-## Scopes:
-#####################################################################
-
-if(ANDROID)
- # Resources:
- set(android_testdata_resource_files
- "qtlogging.ini"
- )
-
- qt_internal_add_resource(tst_qloggingregistry "android_testdata"
- PREFIX
- "/"
- FILES
- ${android_testdata_resource_files}
- )
-endif()
diff --git a/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp b/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp
index d46dc4b98c..b3af31ac27 100644
--- a/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.cpp
+++ b/tests/auto/corelib/io/qloggingregistry/tst_qloggingregistry.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 <QTest>
#include <QLoggingCategory>
diff --git a/tests/auto/corelib/io/qnodebug/CMakeLists.txt b/tests/auto/corelib/io/qnodebug/CMakeLists.txt
index 5fd4a3738c..5fc64976c3 100644
--- a/tests/auto/corelib/io/qnodebug/CMakeLists.txt
+++ b/tests/auto/corelib/io/qnodebug/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qnodebug.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnodebug Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnodebug LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnodebug
SOURCES
tst_qnodebug.cpp
diff --git a/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp b/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp
index 7279aad287..0ff46c45a4 100644
--- a/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp
+++ b/tests/auto/corelib/io/qnodebug/tst_qnodebug.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
// This test is for "release" mode, with -DQT_NO_DEBUG -DQT_NO_DEBUG_OUTPUT
#ifndef QT_NO_DEBUG
diff --git a/tests/auto/corelib/io/qprocess-noapplication/CMakeLists.txt b/tests/auto/corelib/io/qprocess-noapplication/CMakeLists.txt
index 0118d46ae8..fd4312baf7 100644
--- a/tests/auto/corelib/io/qprocess-noapplication/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess-noapplication/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qprocess-noapplication.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qprocess-noapplication Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(qprocess-noapplication LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(qprocess-noapplication
SOURCES
tst_qprocessnoapplication.cpp
diff --git a/tests/auto/corelib/io/qprocess-noapplication/tst_qprocessnoapplication.cpp b/tests/auto/corelib/io/qprocess-noapplication/tst_qprocessnoapplication.cpp
index c9949b4932..c84651913d 100644
--- a/tests/auto/corelib/io/qprocess-noapplication/tst_qprocessnoapplication.cpp
+++ b/tests/auto/corelib/io/qprocess-noapplication/tst_qprocessnoapplication.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
#include <QtCore/QProcess>
diff --git a/tests/auto/corelib/io/qprocess/BLACKLIST b/tests/auto/corelib/io/qprocess/BLACKLIST
deleted file mode 100644
index 682bcbc60c..0000000000
--- a/tests/auto/corelib/io/qprocess/BLACKLIST
+++ /dev/null
@@ -1,6 +0,0 @@
-[lockupsInStartDetached]
-redhatenterpriselinuxworkstation-6.6
-# QTBUG-48455
-[fileWriterProcess]
-windows-10 msvc-2017
-
diff --git a/tests/auto/corelib/io/qprocess/CMakeLists.txt b/tests/auto/corelib/io/qprocess/CMakeLists.txt
index 2cd25cd07c..17dea9688f 100644
--- a/tests/auto/corelib/io/qprocess/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/CMakeLists.txt
@@ -1,3 +1,12 @@
+# 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(qprocess LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
add_subdirectory(test)
add_subdirectory(testProcessCrash)
add_subdirectory(testProcessEcho)
@@ -25,3 +34,6 @@ if(WIN32)
add_subdirectory(testProcessEchoGui)
add_subdirectory(testSetNamedPipeHandleState)
endif()
+if(UNIX)
+ add_subdirectory(testUnixProcessParameters)
+endif()
diff --git a/tests/auto/corelib/io/qprocess/crasher.h b/tests/auto/corelib/io/qprocess/crasher.h
new file mode 100644
index 0000000000..7d55bf980f
--- /dev/null
+++ b/tests/auto/corelib/io/qprocess/crasher.h
@@ -0,0 +1,58 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// Copyright (C) 2020 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#if defined(_MSC_VER)
+# include <intrin.h>
+#endif
+#if __has_include(<signal.h>)
+# include <signal.h>
+#endif
+#if __has_include(<sys/resource.h>)
+# include <sys/resource.h>
+#endif
+
+#ifndef __has_builtin
+# define __has_builtin(x) 0
+#endif
+
+namespace tst_QProcessCrash {
+struct NoCoreDumps
+{
+#if defined(RLIMIT_CORE)
+ struct rlimit rlim;
+ NoCoreDumps()
+ {
+ if (getrlimit(RLIMIT_CORE, &rlim) == 0 && rlim.rlim_cur != 0) {
+ struct rlimit newrlim = rlim;
+ newrlim.rlim_cur = 0;
+ setrlimit(RLIMIT_CORE, &newrlim);
+ }
+ }
+ ~NoCoreDumps()
+ {
+ setrlimit(RLIMIT_CORE, &rlim);
+ }
+#endif // RLIMIT_CORE
+};
+
+void crashFallback(volatile int *ptr = nullptr)
+{
+ *ptr = 0;
+}
+
+void crash()
+{
+#if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_X64))
+ __ud2();
+#elif __has_builtin(__builtin_trap)
+ __builtin_trap();
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+ asm("ud2");
+#elif defined(SIGILL)
+ raise(SIGILL);
+#endif
+
+ crashFallback();
+}
+} // namespace tst_QProcessCrash
diff --git a/tests/auto/corelib/io/qprocess/fileWriterProcess/CMakeLists.txt b/tests/auto/corelib/io/qprocess/fileWriterProcess/CMakeLists.txt
index ce4519ce99..d431ba2c3f 100644
--- a/tests/auto/corelib/io/qprocess/fileWriterProcess/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/fileWriterProcess/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from fileWriterProcess.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## fileWriterProcess Binary:
diff --git a/tests/auto/corelib/io/qprocess/fileWriterProcess/main.cpp b/tests/auto/corelib/io/qprocess/fileWriterProcess/main.cpp
index efeadadb93..0349a48067 100644
--- a/tests/auto/corelib/io/qprocess/fileWriterProcess/main.cpp
+++ b/tests/auto/corelib/io/qprocess/fileWriterProcess/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 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 <QCoreApplication>
#include <QFile>
@@ -34,7 +9,8 @@ int main(int argc, char **argv)
{
QCoreApplication ca(argc, argv);
QFile f;
- f.open(stdin, QIODevice::ReadOnly);
+ if (!f.open(stdin, QIODevice::ReadOnly))
+ return 1;
QByteArray input;
char buf[1024];
qint64 len;
diff --git a/tests/auto/corelib/io/qprocess/test/CMakeLists.txt b/tests/auto/corelib/io/qprocess/test/CMakeLists.txt
index 9cd8fee6e8..89893583ac 100644
--- a/tests/auto/corelib/io/qprocess/test/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/test/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qprocess Test:
#####################################################################
@@ -6,9 +9,10 @@ qt_internal_add_test(tst_qprocess
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../tst_qprocess.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
+ Qt::TestPrivate
)
## Build assorted sub-programs called from the test:
@@ -39,5 +43,6 @@ if(WIN32)
add_dependencies(tst_qprocess testProcessEchoGui testSetNamedPipeHandleState)
endif()
-#### Keys ignored in scope 2:.:.:test.pro:WIN32:
-# TESTDATA = "../testBatFiles/*"
+if(UNIX)
+ add_dependencies(tst_qprocess testUnixProcessParameters)
+endif()
diff --git a/tests/auto/corelib/io/qprocess/testDetached/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testDetached/CMakeLists.txt
index 368ca92f09..2439fc67a7 100644
--- a/tests/auto/corelib/io/qprocess/testDetached/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testDetached/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from testDetached.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## testDetached Binary:
diff --git a/tests/auto/corelib/io/qprocess/testDetached/main.cpp b/tests/auto/corelib/io/qprocess/testDetached/main.cpp
index c10e32d584..9b0b3855a0 100644
--- a/tests/auto/corelib/io/qprocess/testDetached/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testDetached/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 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 <QCoreApplication>
#include <QDebug>
#include <QStringList>
@@ -66,7 +41,7 @@ struct Args
static Args parseArguments(const QStringList &args)
{
Args result;
- if (args.count() < 2) {
+ if (args.size() < 2) {
result.exitCode = 128;
result.errorMessage = "Usage: testDetached [--out-channel={stdout|stderr}] filename.txt\n";
return result;
diff --git a/tests/auto/corelib/io/qprocess/testExitCodes/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testExitCodes/CMakeLists.txt
index c9baab6cfc..bc03f52d00 100644
--- a/tests/auto/corelib/io/qprocess/testExitCodes/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testExitCodes/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testExitCodes Binary:
#####################################################################
-add_executable(testExitCodes main.cpp)
+qt_internal_add_executable(testExitCodes
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testExitCodes/main.cpp b/tests/auto/corelib/io/qprocess/testExitCodes/main.cpp
index f681870609..3f186d2272 100644
--- a/tests/auto/corelib/io/qprocess/testExitCodes/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testExitCodes/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 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 <stdlib.h>
diff --git a/tests/auto/corelib/io/qprocess/testForwarding/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testForwarding/CMakeLists.txt
index adadbeca7a..77739d2c68 100644
--- a/tests/auto/corelib/io/qprocess/testForwarding/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testForwarding/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testForwarding Binary:
#####################################################################
diff --git a/tests/auto/corelib/io/qprocess/testForwarding/main.cpp b/tests/auto/corelib/io/qprocess/testForwarding/main.cpp
index b5d56a1138..774a8622e1 100644
--- a/tests/auto/corelib/io/qprocess/testForwarding/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testForwarding/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 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/QCoreApplication>
#include <QtCore/QDeadlineTimer>
@@ -38,7 +13,7 @@ static bool waitForDoneFileWritten(const QString &filePath, int msecs = 30000)
{
QDeadlineTimer t(msecs);
do {
- QThread::msleep(250);
+ QThread::sleep(std::chrono::milliseconds{250});
QFile file(filePath);
if (!file.open(QIODevice::ReadOnly))
continue;
diff --git a/tests/auto/corelib/io/qprocess/testForwardingHelper/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testForwardingHelper/CMakeLists.txt
index 80b0001a39..9f5f064307 100644
--- a/tests/auto/corelib/io/qprocess/testForwardingHelper/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testForwardingHelper/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testForwardingHelper Binary:
#####################################################################
-add_executable(testForwardingHelper main.cpp)
+qt_internal_add_executable(testForwardingHelper
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testForwardingHelper/main.cpp b/tests/auto/corelib/io/qprocess/testForwardingHelper/main.cpp
index c902db9410..4b4d9d4715 100644
--- a/tests/auto/corelib/io/qprocess/testForwardingHelper/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testForwardingHelper/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 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <fstream>
#include <stdio.h>
diff --git a/tests/auto/corelib/io/qprocess/testGuiProcess/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testGuiProcess/CMakeLists.txt
index e36a33bfa4..781f49e515 100644
--- a/tests/auto/corelib/io/qprocess/testGuiProcess/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testGuiProcess/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from testGuiProcess.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## testGuiProcess Binary:
@@ -8,7 +9,7 @@ qt_internal_add_executable(testGuiProcess
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/corelib/io/qprocess/testGuiProcess/main.cpp b/tests/auto/corelib/io/qprocess/testGuiProcess/main.cpp
index 98babfacb8..1c65268511 100644
--- a/tests/auto/corelib/io/qprocess/testGuiProcess/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testGuiProcess/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 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 <QtWidgets/QApplication>
#include <QtWidgets/QLabel>
#include <stdio.h>
diff --git a/tests/auto/corelib/io/qprocess/testProcessCrash/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessCrash/CMakeLists.txt
index 230148ba22..2f167899eb 100644
--- a/tests/auto/corelib/io/qprocess/testProcessCrash/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessCrash/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessCrash Binary:
#####################################################################
-add_executable(testProcessCrash main.cpp)
+qt_internal_add_executable(testProcessCrash
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testProcessCrash/main.cpp b/tests/auto/corelib/io/qprocess/testProcessCrash/main.cpp
index 298a74d2b0..a5f1eef88a 100644
--- a/tests/auto/corelib/io/qprocess/testProcessCrash/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessCrash/main.cpp
@@ -1,59 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2020 Intel Corporation.
-** 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.
+// Copyright (C) 2020 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-void crashFallback(volatile int *ptr = nullptr)
-{
- *ptr = 0;
-}
-
-#if defined(_MSC_VER)
-# include <intrin.h>
-
-int main()
-{
-# if defined(_M_IX86) || defined(_M_X64)
- __ud2();
-# endif
-
- crashFallback();
-}
-#elif defined(__MINGW32__)
-int main()
-{
- asm("ud2");
- crashFallback();
-}
-#else
-# include <stdlib.h>
+#include "../crasher.h"
+using namespace tst_QProcessCrash;
int main()
{
- abort();
+ [[maybe_unused]] // NoCoreDumps may be an empty struct, not a RAII class
+ NoCoreDumps disableCoreDumps;
+ crash();
+ return 0;
}
-#endif
diff --git a/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/CMakeLists.txt
index 24e4e8f58c..bdd82c6419 100644
--- a/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessDeadWhileReading Binary:
#####################################################################
-add_executable(testProcessDeadWhileReading main.cpp)
+qt_internal_add_executable(testProcessDeadWhileReading
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/main.cpp b/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/main.cpp
index eb780fbc3a..0add9d56de 100644
--- a/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessDeadWhileReading/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 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 <stdio.h>
diff --git a/tests/auto/corelib/io/qprocess/testProcessEOF/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEOF/CMakeLists.txt
index 6de59f67fe..8914bf181d 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEOF/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessEOF/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessEOF Binary:
#####################################################################
-add_executable(testProcessEOF main.cpp)
+qt_internal_add_executable(testProcessEOF
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testProcessEOF/main.cpp b/tests/auto/corelib/io/qprocess/testProcessEOF/main.cpp
index 4fb2e29c2d..a0efdbd271 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEOF/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessEOF/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 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 <stdio.h>
diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEcho/CMakeLists.txt
index 55b9537fe1..071156f759 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEcho/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessEcho/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessEcho Binary:
#####################################################################
-add_executable(testProcessEcho main.cpp)
+qt_internal_add_executable(testProcessEcho
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho/main.cpp b/tests/auto/corelib/io/qprocess/testProcessEcho/main.cpp
index e18e48e516..7b87380900 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEcho/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessEcho/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 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 <stdio.h>
diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho2/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEcho2/CMakeLists.txt
index b805dc2d85..9f71b1ebb6 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEcho2/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessEcho2/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessEcho2 Binary:
#####################################################################
-add_executable(testProcessEcho2 main.cpp)
+qt_internal_add_executable(testProcessEcho2
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho2/main.cpp b/tests/auto/corelib/io/qprocess/testProcessEcho2/main.cpp
index ce4494b048..b67480e6bb 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEcho2/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessEcho2/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 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 <stdio.h>
diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho3/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEcho3/CMakeLists.txt
index dc1d262462..badc9ef82d 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEcho3/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessEcho3/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessEcho3 Binary:
#####################################################################
-add_executable(testProcessEcho3 main.cpp)
+qt_internal_add_executable(testProcessEcho3
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testProcessEcho3/main.cpp b/tests/auto/corelib/io/qprocess/testProcessEcho3/main.cpp
index dfd6e009db..161f8bd547 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEcho3/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessEcho3/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 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 <stdio.h>
diff --git a/tests/auto/corelib/io/qprocess/testProcessEchoGui/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEchoGui/CMakeLists.txt
index 3cc5e3641d..43663e62e8 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEchoGui/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessEchoGui/CMakeLists.txt
@@ -1,6 +1,15 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessEchoGui Binary:
#####################################################################
-add_executable(testProcessEchoGui WIN32 main_win.cpp)
+qt_internal_add_executable(testProcessEchoGui
+ GUI
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main_win.cpp
+)
target_link_libraries(testProcessEchoGui PRIVATE user32)
diff --git a/tests/auto/corelib/io/qprocess/testProcessEchoGui/main_win.cpp b/tests/auto/corelib/io/qprocess/testProcessEchoGui/main_win.cpp
index abe957c1ea..ab54e4a328 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEchoGui/main_win.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessEchoGui/main_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 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 <windows.h>
diff --git a/tests/auto/corelib/io/qprocess/testProcessEnvironment/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessEnvironment/CMakeLists.txt
index ec725b67ca..9069bbc7c8 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEnvironment/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessEnvironment/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessEnvironment Binary:
#####################################################################
-add_executable(testProcessEnvironment main.cpp)
+qt_internal_add_executable(testProcessEnvironment
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testProcessEnvironment/main.cpp b/tests/auto/corelib/io/qprocess/testProcessEnvironment/main.cpp
index 9f13f5c00f..dae98c3af6 100644
--- a/tests/auto/corelib/io/qprocess/testProcessEnvironment/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessEnvironment/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 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 <stdio.h>
#include <stdlib.h>
diff --git a/tests/auto/corelib/io/qprocess/testProcessHang/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessHang/CMakeLists.txt
index 2c63be7ce9..cb6f490c40 100644
--- a/tests/auto/corelib/io/qprocess/testProcessHang/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessHang/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessHang Binary:
#####################################################################
-add_executable(testProcessHang main.cpp)
+qt_internal_add_executable(testProcessHang
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testProcessHang/main.cpp b/tests/auto/corelib/io/qprocess/testProcessHang/main.cpp
index cb904134f9..89fcadfb8f 100644
--- a/tests/auto/corelib/io/qprocess/testProcessHang/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessHang/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <stdio.h>
diff --git a/tests/auto/corelib/io/qprocess/testProcessNormal/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessNormal/CMakeLists.txt
index 10bbf3840d..7eb6388792 100644
--- a/tests/auto/corelib/io/qprocess/testProcessNormal/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessNormal/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessNormal Binary:
#####################################################################
-add_executable(testProcessNormal main.cpp)
+qt_internal_add_executable(testProcessNormal
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testProcessNormal/main.cpp b/tests/auto/corelib/io/qprocess/testProcessNormal/main.cpp
index 4611ed4547..a714713cf2 100644
--- a/tests/auto/corelib/io/qprocess/testProcessNormal/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessNormal/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 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()
diff --git a/tests/auto/corelib/io/qprocess/testProcessOutput/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessOutput/CMakeLists.txt
index cc621d62f6..78005b2b93 100644
--- a/tests/auto/corelib/io/qprocess/testProcessOutput/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessOutput/CMakeLists.txt
@@ -1,5 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessOutput Binary:
#####################################################################
-add_executable(testProcessOutput main.cpp)
+qt_internal_add_executable(testProcessOutput
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testProcessOutput/main.cpp b/tests/auto/corelib/io/qprocess/testProcessOutput/main.cpp
index 4934708153..08d059e0f9 100644
--- a/tests/auto/corelib/io/qprocess/testProcessOutput/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessOutput/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 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 <stdio.h>
diff --git a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/CMakeLists.txt
index 0d2fff73c8..5ea7bf53f4 100644
--- a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/CMakeLists.txt
@@ -1,7 +1,25 @@
-add_executable(nospace main.cpp)
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-add_executable(onespace main.cpp)
+qt_internal_add_executable(nospace
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
+
+qt_internal_add_executable(onespace
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
set_target_properties(onespace PROPERTIES OUTPUT_NAME "one space")
-add_executable(twospaces main.cpp)
+qt_internal_add_executable(twospaces
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
set_target_properties(twospaces PROPERTIES OUTPUT_NAME "two space s")
diff --git a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/main.cpp b/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/main.cpp
index 0d40a9b83c..2c319fa9af 100644
--- a/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testProcessSpacesArgs/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 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 <stdio.h>
diff --git a/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/CMakeLists.txt
index a68d434f52..5e532aa017 100644
--- a/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/CMakeLists.txt
@@ -1,6 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testSetNamedPipeHandleState Binary:
#####################################################################
-add_executable(testSetNamedPipeHandleState main.cpp)
+qt_internal_add_executable(testSetNamedPipeHandleState
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
target_link_libraries(testSetNamedPipeHandleState PRIVATE kernel32.lib)
diff --git a/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/main.cpp b/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/main.cpp
index 488b03ab57..ace55e9058 100644
--- a/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testSetNamedPipeHandleState/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 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 <windows.h>
diff --git a/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/CMakeLists.txt
index 97410c1b49..f5b9c22c90 100644
--- a/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from testSetWorkingDirectory.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## testSetWorkingDirectory Binary:
diff --git a/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/main.cpp b/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/main.cpp
index 37d7deb1ac..c12ca2de7a 100644
--- a/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testSetWorkingDirectory/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 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 <QCoreApplication>
diff --git a/tests/auto/corelib/io/qprocess/testSoftExit/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testSoftExit/CMakeLists.txt
index f6088e1032..44099dcab1 100644
--- a/tests/auto/corelib/io/qprocess/testSoftExit/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testSoftExit/CMakeLists.txt
@@ -1,13 +1,19 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testSoftExit Binary:
#####################################################################
-add_executable(testSoftExit)
+qt_internal_add_executable(testSoftExit
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+)
qt_internal_extend_target(testSoftExit CONDITION WIN32
SOURCES
main_win.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
diff --git a/tests/auto/corelib/io/qprocess/testSoftExit/main_unix.cpp b/tests/auto/corelib/io/qprocess/testSoftExit/main_unix.cpp
index ed0f16ac17..6d5078e75e 100644
--- a/tests/auto/corelib/io/qprocess/testSoftExit/main_unix.cpp
+++ b/tests/auto/corelib/io/qprocess/testSoftExit/main_unix.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 <sys/types.h>
diff --git a/tests/auto/corelib/io/qprocess/testSoftExit/main_win.cpp b/tests/auto/corelib/io/qprocess/testSoftExit/main_win.cpp
index 898029483f..cbef8418e6 100644
--- a/tests/auto/corelib/io/qprocess/testSoftExit/main_win.cpp
+++ b/tests/auto/corelib/io/qprocess/testSoftExit/main_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 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 <windows.h>
diff --git a/tests/auto/corelib/io/qprocess/testSpaceInName/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testSpaceInName/CMakeLists.txt
index 28107c9009..9cc05bfc3d 100644
--- a/tests/auto/corelib/io/qprocess/testSpaceInName/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocess/testSpaceInName/CMakeLists.txt
@@ -1,7 +1,15 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testSpaceInName Binary:
#####################################################################
-add_executable(testSpaceInName main.cpp)
+qt_internal_add_executable(testSpaceInName
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
set_property(TARGET testSpaceInName PROPERTY
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../test Space In Name")
diff --git a/tests/auto/corelib/io/qprocess/testSpaceInName/main.cpp b/tests/auto/corelib/io/qprocess/testSpaceInName/main.cpp
index 0e2374de06..ca54a6bfde 100644
--- a/tests/auto/corelib/io/qprocess/testSpaceInName/main.cpp
+++ b/tests/auto/corelib/io/qprocess/testSpaceInName/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 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 <stdio.h>
diff --git a/tests/auto/corelib/io/qprocess/testUnixProcessParameters/CMakeLists.txt b/tests/auto/corelib/io/qprocess/testUnixProcessParameters/CMakeLists.txt
new file mode 100644
index 0000000000..9b6c48933c
--- /dev/null
+++ b/tests/auto/corelib/io/qprocess/testUnixProcessParameters/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2023 Intel Corporation.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## testProcessNormal Binary:
+#####################################################################
+
+qt_internal_add_executable(testUnixProcessParameters
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ CORE_LIBRARY None
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/corelib/io/qprocess/testUnixProcessParameters/main.cpp b/tests/auto/corelib/io/qprocess/testUnixProcessParameters/main.cpp
new file mode 100644
index 0000000000..42a173debe
--- /dev/null
+++ b/tests/auto/corelib/io/qprocess/testUnixProcessParameters/main.cpp
@@ -0,0 +1,109 @@
+// Copyright (C) 2023 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <string_view>
+
+#include <errno.h>
+#include <fcntl.h>
+#include <sched.h>
+#include <signal.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/resource.h>
+#include <unistd.h>
+
+int main(int argc, char **argv)
+{
+ if (argc < 2) {
+ printf("Usage: %s command [extra]\nSee source code for commands\n",
+ argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ std::string_view cmd = argv[1];
+ errno = 0;
+
+ if (cmd.size() == 0) {
+ // just checking that we did get here
+ return EXIT_SUCCESS;
+ }
+
+ if (cmd == "reset-ids") {
+ if (getuid() == geteuid() && getgid() == getegid())
+ return EXIT_SUCCESS;
+ fprintf(stderr, "Real: %d %d; Effective: %d %d\n",
+ getuid(), getgid(), geteuid(), getegid());
+ return EXIT_FAILURE;
+ }
+
+ if (cmd == "reset-sighand") {
+ bool ok = true;
+
+ // confirm our signal block mask is empty
+ sigset_t set;
+ sigprocmask(SIG_SETMASK, nullptr, &set);
+ for (int signo = 1; signo < NSIG; ++signo) {
+ if (sigismember(&set, signo)) {
+ fprintf(stderr, "'%s' is blocked.\n", strsignal(signo));
+ ok = false;
+ }
+ }
+
+ // confirm SIGUSR1 was not ignored
+ struct sigaction action;
+ sigaction(SIGUSR1, nullptr, &action);
+ if (action.sa_handler != SIG_DFL) {
+ fprintf(stderr, "SIGUSR1 is SIG_IGN\n");
+ ok = false;
+ }
+ return ok ? EXIT_SUCCESS : EXIT_FAILURE;
+ }
+
+ if (cmd == "ignore-sigpipe") {
+ // confirm SIGPIPE was ignored
+ struct sigaction action;
+ sigaction(SIGPIPE, nullptr, &action);
+ if (action.sa_handler == SIG_IGN)
+ return EXIT_SUCCESS;
+ fprintf(stderr, "SIGPIPE is SIG_DFL\n");
+ return EXIT_FAILURE;
+ }
+
+ if (cmd == "file-descriptors") {
+ int fd = atoi(argv[2]);
+ if (close(fd) < 0 && errno == EBADF)
+ return EXIT_SUCCESS;
+ fprintf(stderr, "%d is a valid file descriptor\n", fd);
+ return EXIT_FAILURE;
+ }
+
+ if (cmd == "file-descriptors2") {
+ int fd1 = atoi(argv[2]); // should be open
+ int fd2 = atoi(argv[3]); // should be closed
+ if (close(fd1) < 0)
+ fprintf(stderr, "%d was not a valid file descriptor\n", fd1);
+ if (close(fd2) == 0 || errno != EBADF)
+ fprintf(stderr, "%d is a valid file descriptor\n", fd2);
+ return EXIT_SUCCESS;
+ }
+
+ if (cmd == "noctty") {
+ int fd = open("/dev/tty", O_RDONLY);
+ if (fd == -1)
+ return EXIT_SUCCESS;
+ fprintf(stderr, "Could open /dev/tty\n");
+ return EXIT_FAILURE;
+ }
+
+ if (cmd == "setsid") {
+ pid_t pgid = getpgrp();
+ if (pgid == getpid())
+ return EXIT_SUCCESS;
+ fprintf(stderr, "Process group was %d\n", pgid);
+ return EXIT_FAILURE;
+ }
+
+ fprintf(stderr, "Unknown command \"%s\"", cmd.data());
+ return EXIT_FAILURE;
+}
diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
index 63f2a816fc..1056eaa107 100644
--- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
+++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2020 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2022 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QTestEventLoop>
@@ -46,10 +21,17 @@
#include <qplatformdefs.h>
#ifdef Q_OS_UNIX
# include <private/qcore_unix_p.h>
+# include <sys/wait.h>
#endif
+#include <QtTest/private/qemulationdetector_p.h>
+
#include <stdlib.h>
+#include "crasher.h"
+
+using namespace Qt::StringLiterals;
+
typedef void (QProcess::*QProcessErrorSignal)(QProcess::ProcessError);
class tst_QProcess : public QObject
@@ -65,7 +47,6 @@ private slots:
void getSetCheck();
void constructing();
void simpleStart();
- void setChildProcessModifier();
void startCommand();
void startWithOpen();
void startWithOldOpen();
@@ -107,8 +88,11 @@ private slots:
void environmentIsSorted();
void spaceInName();
void setStandardInputFile();
+ void setStandardInputFileFailure();
void setStandardOutputFile_data();
void setStandardOutputFile();
+ void setStandardOutputFileFailure_data() { setStandardOutputFile_data(); }
+ void setStandardOutputFileFailure();
void setStandardOutputFileNullDevice();
void setStandardOutputFileAndWaitForBytesWritten();
void setStandardOutputProcess_data();
@@ -134,6 +118,22 @@ private slots:
void nativeArguments();
void createProcessArgumentsModifier();
#endif // Q_OS_WIN
+#if defined(Q_OS_UNIX)
+ void setChildProcessModifier_data();
+ void setChildProcessModifier();
+ void failChildProcessModifier_data() { setChildProcessModifier_data(); }
+ void failChildProcessModifier();
+ void throwInChildProcessModifier();
+ void terminateInChildProcessModifier_data();
+ void terminateInChildProcessModifier();
+ void raiseInChildProcessModifier();
+ void unixProcessParameters_data();
+ void unixProcessParameters();
+ void impossibleUnixProcessParameters_data();
+ void impossibleUnixProcessParameters();
+ void unixProcessParametersAndChildModifier();
+ void unixProcessParametersOtherFileDescriptors();
+#endif
void exitCodeTest();
void systemEnvironment();
void lockupsInStartDetached();
@@ -151,6 +151,8 @@ private slots:
void startStopStartStopBuffers();
void processEventsInAReadyReadSlot_data();
void processEventsInAReadyReadSlot();
+ void startFromCurrentWorkingDir_data();
+ void startFromCurrentWorkingDir();
// keep these at the end, since they use lots of processes and sometimes
// caused obscure failures to occur in tests that followed them (esp. on the Mac)
@@ -169,16 +171,28 @@ protected slots:
void waitForBytesWrittenInABytesWrittenSlotSlot();
private:
+ QString nonExistentFileName = u"/this/file/cant/exist/hopefully"_s;
+
qint64 bytesAvailable;
QTemporaryDir m_temporaryDir;
+ bool haveWorkingVFork = false;
};
void tst_QProcess::initTestCase()
{
+#if defined(QT_ASAN_ENABLED)
+ QSKIP("Skipping QProcess tests under ASAN as they are flaky (QTBUG-109329)");
+#endif
QVERIFY2(m_temporaryDir.isValid(), qPrintable(m_temporaryDir.errorString()));
// chdir to our testdata path and execute helper apps relative to that.
QString testdata_dir = QFileInfo(QFINDTESTDATA("testProcessNormal")).absolutePath();
QVERIFY2(QDir::setCurrent(testdata_dir), qPrintable("Could not chdir to " + testdata_dir));
+
+#if defined(Q_OS_LINUX) && QT_CONFIG(forkfd_pidfd)
+ // see detect_clone_pidfd_support() in forkfd_linux.c for explanation
+ waitid(/*P_PIDFD*/ idtype_t(3), INT_MAX, NULL, WEXITED|WNOHANG);
+ haveWorkingVFork = (errno == EBADF);
+#endif
}
void tst_QProcess::cleanupTestCase()
@@ -265,50 +279,12 @@ void tst_QProcess::simpleStart()
process.reset();
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
QCOMPARE(qvariant_cast<QProcess::ProcessState>(spy.at(0).at(0)), QProcess::Starting);
QCOMPARE(qvariant_cast<QProcess::ProcessState>(spy.at(1).at(0)), QProcess::Running);
QCOMPARE(qvariant_cast<QProcess::ProcessState>(spy.at(2).at(0)), QProcess::NotRunning);
}
-#ifdef Q_OS_UNIX
-static const char messageFromChildProcess[] = "Message from the child process";
-static void childProcessModifier(int fd)
-{
- QT_WRITE(fd, messageFromChildProcess, sizeof(messageFromChildProcess) - 1);
- QT_CLOSE(fd);
-}
-#endif
-
-void tst_QProcess::setChildProcessModifier()
-{
-#ifdef Q_OS_UNIX
- int pipes[2] = { -1 , -1 };
- QVERIFY(qt_safe_pipe(pipes) == 0);
-
- QProcess process;
- process.setChildProcessModifier([pipes]() {
- ::childProcessModifier(pipes[1]);
- });
- process.start("testProcessNormal/testProcessNormal");
- if (process.state() != QProcess::Starting)
- QCOMPARE(process.state(), QProcess::Running);
- QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString()));
-
- char buf[sizeof messageFromChildProcess] = {};
- qt_safe_close(pipes[1]);
- QCOMPARE(qt_safe_read(pipes[0], buf, sizeof(buf)), qint64(sizeof(messageFromChildProcess)) - 1);
- QCOMPARE(buf, messageFromChildProcess);
- qt_safe_close(pipes[0]);
-
- QVERIFY2(process.waitForFinished(5000), qPrintable(process.errorString()));
- QCOMPARE(process.exitStatus(), QProcess::NormalExit);
- QCOMPARE(process.exitCode(), 0);
-#else
- QSKIP("Unix-only test");
-#endif
-}
-
void tst_QProcess::startCommand()
{
QProcess process;
@@ -376,9 +352,7 @@ void tst_QProcess::readFromProcess()
{
QProcess *process = qobject_cast<QProcess *>(sender());
QVERIFY(process);
- int lines = 0;
while (process->canReadLine()) {
- ++lines;
process->readLine();
}
}
@@ -402,10 +376,10 @@ void tst_QProcess::crashTest()
QVERIFY(process->waitForFinished(30000));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const QProcess::ProcessError *>(spy.at(0).at(0).constData()), QProcess::Crashed);
- QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy2.size(), 1);
QCOMPARE(*static_cast<const QProcess::ExitStatus *>(spy2.at(0).at(1).constData()), QProcess::CrashExit);
QCOMPARE(process->exitStatus(), QProcess::CrashExit);
@@ -413,7 +387,7 @@ void tst_QProcess::crashTest()
// delete process;
process.reset();
- QCOMPARE(stateSpy.count(), 3);
+ QCOMPARE(stateSpy.size(), 3);
QCOMPARE(qvariant_cast<QProcess::ProcessState>(stateSpy.at(0).at(0)), QProcess::Starting);
QCOMPARE(qvariant_cast<QProcess::ProcessState>(stateSpy.at(1).at(0)), QProcess::Running);
QCOMPARE(qvariant_cast<QProcess::ProcessState>(stateSpy.at(2).at(0)), QProcess::NotRunning);
@@ -440,10 +414,10 @@ void tst_QProcess::crashTest2()
if (QTestEventLoop::instance().timeout())
QFAIL("Failed to detect crash : operation timed out");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const QProcess::ProcessError *>(spy.at(0).at(0).constData()), QProcess::Crashed);
- QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy2.size(), 1);
QCOMPARE(*static_cast<const QProcess::ExitStatus *>(spy2.at(0).at(1).constData()), QProcess::CrashExit);
QCOMPARE(process.exitStatus(), QProcess::CrashExit);
@@ -549,9 +523,9 @@ void tst_QProcess::echoTest2()
break;
}
- QVERIFY(spy0.count() > 0);
- QVERIFY(spy1.count() > 0);
- QVERIFY(spy2.count() > 0);
+ QVERIFY(spy0.size() > 0);
+ QVERIFY(spy1.size() > 0);
+ QVERIFY(spy2.size() > 0);
QCOMPARE(process.readAllStandardOutput(), QByteArray("Hello"));
QCOMPARE(process.readAllStandardError(), QByteArray("Hello"));
@@ -652,8 +626,8 @@ void tst_QProcess::exitStatus()
QFETCH(QStringList, processList);
QFETCH(QList<QProcess::ExitStatus>, exitStatus);
- QCOMPARE(exitStatus.count(), processList.count());
- for (int i = 0; i < processList.count(); ++i) {
+ QCOMPARE(exitStatus.size(), processList.size());
+ for (int i = 0; i < processList.size(); ++i) {
process.start(processList.at(i));
QVERIFY(process.waitForStarted(5000));
QVERIFY(process.waitForFinished(30000));
@@ -706,7 +680,7 @@ void tst_QProcess::readTimeoutAndThenCrash()
QVERIFY(process.waitForFinished(5000));
QCOMPARE(process.state(), QProcess::NotRunning);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const QProcess::ProcessError *>(spy.at(0).at(0).constData()), QProcess::Crashed);
}
@@ -883,7 +857,7 @@ void tst_QProcess::emitReadyReadOnlyWhenNewDataArrives()
proc.start("testProcessEcho/testProcessEcho");
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
proc.write("A");
@@ -891,7 +865,7 @@ void tst_QProcess::emitReadyReadOnlyWhenNewDataArrives()
if (QTestEventLoop::instance().timeout())
QFAIL("Operation timed out");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QTestEventLoop::instance().enterLoop(1);
QVERIFY(QTestEventLoop::instance().timeout());
@@ -1080,6 +1054,16 @@ void tst_QProcess::mergedChannels()
QVERIFY(process.waitForStarted(5000));
+ {
+ QCOMPARE(process.write("abc"), qlonglong(3));
+ while (process.bytesAvailable() < 6)
+ QVERIFY(process.waitForReadyRead(5000));
+ QCOMPARE(process.readAllStandardOutput(), QByteArray("aabbcc"));
+ QTest::ignoreMessage(QtWarningMsg,
+ "QProcess::readAllStandardError: Called with MergedChannels");
+ QCOMPARE(process.readAllStandardError(), QByteArray());
+ }
+
for (int i = 0; i < 100; ++i) {
QCOMPARE(process.write("abc"), qlonglong(3));
while (process.bytesAvailable() < 6)
@@ -1236,6 +1220,9 @@ void tst_QProcess::processInAThread()
void tst_QProcess::processesInMultipleThreads()
{
+ if (QTestPrivate::isRunningArmOnX86())
+ QSKIP("Test is too slow to run on emulator");
+
#if defined(Q_OS_QNX)
QSKIP("QNX: Large amount of threads is unstable and do not finish in given time");
#endif
@@ -1290,7 +1277,7 @@ void tst_QProcess::waitForReadyReadInAReadyReadSlot()
QTestEventLoop::instance().enterLoop(30);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
process.disconnect();
QVERIFY(process.waitForFinished(5000));
@@ -1326,7 +1313,7 @@ void tst_QProcess::waitForBytesWrittenInABytesWrittenSlot()
QTestEventLoop::instance().enterLoop(30);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
process.write("", 1);
process.disconnect();
QVERIFY(process.waitForFinished());
@@ -1479,6 +1466,479 @@ void tst_QProcess::createProcessArgumentsModifier()
}
#endif // Q_OS_WIN
+#ifdef Q_OS_UNIX
+static constexpr int sigs[] = { SIGABRT, SIGILL, SIGSEGV };
+struct DisableCrashLogger
+{
+ // disable core dumps too
+ tst_QProcessCrash::NoCoreDumps disableCoreDumps {};
+ std::array<struct sigaction, std::size(sigs)> oldhandlers;
+ DisableCrashLogger()
+ {
+ struct sigaction def = {};
+ def.sa_handler = SIG_DFL;
+ for (uint i = 0; i < std::size(sigs); ++i)
+ sigaction(sigs[i], &def, &oldhandlers[i]);
+ }
+ ~DisableCrashLogger()
+ {
+ // restore them
+ for (uint i = 0; i < std::size(sigs); ++i)
+ sigaction(sigs[i], &oldhandlers[i], nullptr);
+ }
+};
+
+QT_BEGIN_NAMESPACE
+Q_AUTOTEST_EXPORT bool _qprocessUsingVfork() noexcept;
+QT_END_NAMESPACE
+static constexpr char messageFromChildProcess[] = "Message from the child process";
+static_assert(std::char_traits<char>::length(messageFromChildProcess) <= PIPE_BUF);
+static void childProcessModifier(int fd)
+{
+ QT_WRITE(fd, messageFromChildProcess, strlen(messageFromChildProcess));
+ QT_CLOSE(fd);
+}
+
+void tst_QProcess::setChildProcessModifier_data()
+{
+ QTest::addColumn<bool>("detached");
+ QTest::addColumn<bool>("useVfork");
+ QTest::newRow("normal") << false << false;
+ QTest::newRow("detached") << true << false;
+
+#ifdef QT_BUILD_INTERNAL
+ if (_qprocessUsingVfork()) {
+ QTest::newRow("normal-vfork") << false << true;
+ QTest::newRow("detached-vfork") << true << true;
+ }
+#endif
+}
+
+void tst_QProcess::setChildProcessModifier()
+{
+ QFETCH(bool, detached);
+ QFETCH(bool, useVfork);
+ int pipes[2] = { -1 , -1 };
+ QVERIFY(qt_safe_pipe(pipes) == 0);
+
+ QProcess process;
+ if (useVfork)
+ process.setUnixProcessParameters(QProcess::UnixProcessFlag::UseVFork);
+ process.setChildProcessModifier([pipes]() {
+ ::childProcessModifier(pipes[1]);
+ });
+ process.setProgram("testProcessNormal/testProcessNormal");
+ if (detached) {
+ process.startDetached();
+ } else {
+ process.start("testProcessNormal/testProcessNormal");
+ if (process.state() != QProcess::Starting)
+ QCOMPARE(process.state(), QProcess::Running);
+ QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString()));
+ QVERIFY2(process.waitForFinished(5000), qPrintable(process.errorString()));
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+ QCOMPARE(process.exitCode(), 0);
+ }
+
+ char buf[sizeof messageFromChildProcess] = {};
+ qt_safe_close(pipes[1]);
+ QCOMPARE(qt_safe_read(pipes[0], buf, sizeof(buf)), qint64(sizeof(messageFromChildProcess)) - 1);
+ QCOMPARE(buf, messageFromChildProcess);
+ qt_safe_close(pipes[0]);
+}
+
+void tst_QProcess::failChildProcessModifier()
+{
+ static const char failureMsg[] =
+ "Some error message from the child process would go here if this were a "
+ "real application";
+ static_assert(sizeof(failureMsg) < _POSIX_PIPE_BUF / 2,
+ "Implementation detail: the length of the message is limited");
+
+ QFETCH(bool, detached);
+ QFETCH(bool, useVfork);
+
+ QProcess process;
+ if (useVfork)
+ process.setUnixProcessParameters(QProcess::UnixProcessFlag::UseVFork);
+ process.setChildProcessModifier([&process]() {
+ process.failChildProcessModifier(failureMsg, EPERM);
+ });
+ process.setProgram("testProcessNormal/testProcessNormal");
+
+ if (detached) {
+ qint64 pid;
+ QVERIFY(!process.startDetached(&pid));
+ QCOMPARE(pid, -1);
+ } else {
+ process.start();
+ QVERIFY(!process.waitForStarted(5000));
+ }
+
+ QString errMsg = process.errorString();
+ QVERIFY2(errMsg.startsWith("Child process modifier reported error: "_L1 + failureMsg),
+ qPrintable(errMsg));
+ QVERIFY2(errMsg.endsWith(strerror(EPERM)), qPrintable(errMsg));
+}
+
+void tst_QProcess::throwInChildProcessModifier()
+{
+#ifndef __cpp_exceptions
+ Q_SKIP("Exceptions disabled.");
+#else
+ static constexpr char What[] = "tst_QProcess::throwInChildProcessModifier()::MyException";
+ struct MyException : std::exception {
+ const char *what() const noexcept override { return What; }
+ };
+ QProcess process;
+ process.setChildProcessModifier([]() {
+ throw MyException();
+ });
+ process.setProgram("testProcessNormal/testProcessNormal");
+
+ process.start();
+ QVERIFY(!process.waitForStarted(5000));
+ QCOMPARE(process.state(), QProcess::NotRunning);
+ QCOMPARE(process.error(), QProcess::FailedToStart);
+ QVERIFY2(process.errorString().contains("Child process modifier threw an exception"),
+ qPrintable(process.errorString()));
+ QVERIFY2(process.errorString().contains(What),
+ qPrintable(process.errorString()));
+
+ // try again, to ensure QProcess internal state wasn't corrupted
+ process.start();
+ QVERIFY(!process.waitForStarted(5000));
+ QCOMPARE(process.state(), QProcess::NotRunning);
+ QCOMPARE(process.error(), QProcess::FailedToStart);
+ QVERIFY2(process.errorString().contains("Child process modifier threw an exception"),
+ qPrintable(process.errorString()));
+ QVERIFY2(process.errorString().contains(What),
+ qPrintable(process.errorString()));
+#endif
+}
+
+void tst_QProcess::terminateInChildProcessModifier_data()
+{
+ using F = std::function<void(void)>;
+ QTest::addColumn<F>("function");
+ QTest::addColumn<QProcess::ExitStatus>("exitStatus");
+ QTest::addColumn<bool>("stderrIsEmpty");
+
+ QTest::newRow("_exit") << F([]() { _exit(0); }) << QProcess::NormalExit << true;
+ QTest::newRow("abort") << F(std::abort) << QProcess::CrashExit << true;
+ QTest::newRow("sigkill") << F([]() { raise(SIGKILL); }) << QProcess::CrashExit << true;
+ QTest::newRow("terminate") << F(std::terminate) << QProcess::CrashExit
+ << (std::get_terminate() == std::abort);
+ QTest::newRow("crash") << F([]() { tst_QProcessCrash::crash(); }) << QProcess::CrashExit << true;
+}
+
+void tst_QProcess::terminateInChildProcessModifier()
+{
+ QFETCH(std::function<void(void)>, function);
+ QFETCH(QProcess::ExitStatus, exitStatus);
+ QFETCH(bool, stderrIsEmpty);
+
+ // temporarily disable QTest's crash logger
+ DisableCrashLogger disableCrashLogging;
+
+ // testForwardingHelper prints to both stdout and stderr, so if we fail to
+ // fail we should be able to tell too
+ QProcess process;
+ process.setChildProcessModifier(function);
+ process.setProgram("testForwardingHelper/testForwardingHelper");
+ process.setArguments({ "/dev/null" });
+
+ // temporarily disable QTest's crash logger while starting the child process
+ {
+ DisableCrashLogger d;
+ process.start();
+ }
+
+ QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString()));
+ QVERIFY2(process.waitForFinished(5000), qPrintable(process.errorString()));
+ QCOMPARE(process.exitStatus(), exitStatus);
+ QCOMPARE(process.readAllStandardOutput(), QByteArray());
+
+ // some environments print extra stuff to stderr when we crash
+#ifndef Q_OS_QNX
+ if (!QTestPrivate::isRunningArmOnX86()) {
+ QByteArray standardError = process.readAllStandardError();
+ QVERIFY2(standardError.isEmpty() == stderrIsEmpty,
+ "stderr was: " + standardError);
+ }
+#endif
+}
+
+void tst_QProcess::raiseInChildProcessModifier()
+{
+#ifdef QT_BUILD_INTERNAL
+ // This is similar to the above, but knowing that raise() doesn't unblock
+ // signals, unlike abort(), this implies that
+ // 1) the raise() in the child modifier will not run our handler
+ // 2) the write() to stdout after that will run
+ // 3) QProcess resets the signal handlers to the defaults, then unblocks
+ // 4) at that point, the signal will be delivered to the child, but our
+ // handler is no longer active so there'll be no write() to stderr
+ //
+ // Note for maintenance: if in the future this test causes the parent
+ // process to die with SIGUSR1, it means the C library is buggy and is
+ // using a cached PID in the child process after vfork().
+ if (!QT_PREPEND_NAMESPACE(_qprocessUsingVfork()))
+ QSKIP("QProcess will only block Unix signals when using vfork()");
+
+ // we use SIGUSR1 because QtTest doesn't log it and because its default
+ // action is termination, not core dumping
+ struct SigUsr1Handler {
+ SigUsr1Handler()
+ {
+ struct sigaction sa = {};
+ sa.sa_flags = SA_RESETHAND;
+ sa.sa_handler = [](int) {
+ static const char msg[] = "SIGUSR1 handler was run";
+ write(STDERR_FILENO, msg, strlen(msg));
+ raise(SIGUSR1); // re-raise
+ };
+ sigaction(SIGUSR1, &sa, nullptr);
+ }
+ ~SigUsr1Handler() { restore(); }
+ static void restore() { signal(SIGUSR1, SIG_DFL); }
+ } sigUsr1Handler;
+
+ QProcess process;
+
+ // QProcess will block signals with UseVFork
+ process.setUnixProcessParameters(QProcess::UnixProcessFlag::UseVFork |
+ QProcess::UnixProcessFlag::ResetSignalHandlers);
+ process.setChildProcessModifier([]() {
+ raise(SIGUSR1);
+ ::childProcessModifier(STDOUT_FILENO);
+ });
+
+ // testForwardingHelper prints to both stdout and stderr, so if we fail to
+ // fail we should be able to tell too
+ process.setProgram("testForwardingHelper/testForwardingHelper");
+ process.setArguments({ "/dev/null" });
+
+ process.start();
+ QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString()));
+ QVERIFY2(process.waitForFinished(5000), qPrintable(process.errorString()));
+ QCOMPARE(process.error(), QProcess::Crashed);
+
+ // ensure the write() from the child modifier DID get run
+ QCOMPARE(process.readAllStandardOutput(), messageFromChildProcess);
+
+ // some environments print extra stuff to stderr when we crash
+ if (!QTestPrivate::isRunningArmOnX86()) {
+ // and write() from the SIGUSR1 handler did not
+ QCOMPARE(process.readAllStandardError(), QByteArray());
+ }
+#else
+ QSKIP("Requires QT_BUILD_INTERNAL symbols");
+#endif
+}
+
+void tst_QProcess::unixProcessParameters_data()
+{
+ QTest::addColumn<QProcess::UnixProcessParameters>("params");
+ QTest::addColumn<QString>("cmd");
+ QTest::newRow("defaults") << QProcess::UnixProcessParameters{} << QString();
+
+ auto addRow = [](const char *cmd, QProcess::UnixProcessFlags flags) {
+ QProcess::UnixProcessParameters params = {};
+ params.flags = flags;
+ QTest::addRow("%s", cmd) << params << cmd;
+ };
+ using P = QProcess::UnixProcessFlag;
+ addRow("reset-sighand", P::ResetSignalHandlers);
+ addRow("ignore-sigpipe", P::IgnoreSigPipe);
+ addRow("file-descriptors", P::CloseFileDescriptors);
+ addRow("setsid", P::CreateNewSession);
+ addRow("reset-ids", P::ResetIds);
+
+ // On FreeBSD, we need to be session leader to disconnect from the CTTY
+ addRow("noctty", P::DisconnectControllingTerminal | P::CreateNewSession);
+}
+
+void tst_QProcess::unixProcessParameters()
+{
+ QFETCH(QProcess::UnixProcessParameters, params);
+ QFETCH(QString, cmd);
+
+ // set up a few things
+ struct Scope {
+ int devnull;
+ struct sigaction old_sigusr1, old_sigpipe;
+ Scope()
+ {
+ int fd = open("/dev/null", O_RDONLY);
+ devnull = fcntl(fd, F_DUPFD, 100);
+ close(fd);
+
+ // we ignore SIGUSR1 and reset SIGPIPE to Terminate
+ struct sigaction act = {};
+ sigemptyset(&act.sa_mask);
+ act.sa_handler = SIG_IGN;
+ sigaction(SIGUSR1, &act, &old_sigusr1);
+ act.sa_handler = SIG_DFL;
+ sigaction(SIGPIPE, &act, &old_sigpipe);
+
+ // and we block SIGUSR2
+ sigset_t *set = &act.sa_mask; // reuse this sigset_t
+ sigaddset(set, SIGUSR2);
+ sigprocmask(SIG_BLOCK, set, nullptr);
+ }
+ ~Scope()
+ {
+ if (devnull != -1)
+ dismiss();
+ }
+ void dismiss()
+ {
+ close(devnull);
+ sigaction(SIGUSR1, &old_sigusr1, nullptr);
+ sigaction(SIGPIPE, &old_sigpipe, nullptr);
+ devnull = -1;
+
+ sigset_t *set = &old_sigusr1.sa_mask; // reuse this sigset_t
+ sigaddset(set, SIGUSR2);
+ sigprocmask(SIG_BLOCK, set, nullptr);
+ }
+ } scope;
+
+ if (params.flags & QProcess::UnixProcessFlag::ResetIds) {
+ if (getuid() == geteuid() && getgid() == getegid())
+ qInfo("Process has identical real and effective IDs; this test will do nothing");
+ }
+
+ if (params.flags & QProcess::UnixProcessFlag::DisconnectControllingTerminal) {
+ if (int fd = open("/dev/tty", O_RDONLY); fd < 0) {
+ qInfo("Process has no controlling terminal; this test will do nothing");
+ close(fd);
+ }
+ }
+
+ QProcess process;
+ process.setUnixProcessParameters(params);
+ process.setStandardInputFile(QProcess::nullDevice()); // so we can't mess with SIGPIPE
+ process.setProgram("testUnixProcessParameters/testUnixProcessParameters");
+ process.setArguments({ cmd, QString::number(scope.devnull) });
+ process.start();
+ QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString()));
+ QVERIFY(process.waitForFinished(5000));
+
+ const QString stdErr = process.readAllStandardError();
+ QCOMPARE(stdErr, QString());
+ QCOMPARE(process.readAll(), QString());
+ QCOMPARE(process.exitCode(), 0);
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+}
+
+void tst_QProcess::impossibleUnixProcessParameters_data()
+{
+ using P = QProcess::UnixProcessParameters;
+ QTest::addColumn<P>("params");
+ QTest::newRow("setsid") << P{ QProcess::UnixProcessFlag::CreateNewSession };
+}
+
+void tst_QProcess::impossibleUnixProcessParameters()
+{
+ QFETCH(QProcess::UnixProcessParameters, params);
+
+ QProcess process;
+ if (params.flags & QProcess::UnixProcessFlag::CreateNewSession) {
+ process.setChildProcessModifier([]() {
+ // double setsid() should cause the second to fail
+ setsid();
+ });
+ }
+ process.setUnixProcessParameters(params);
+ process.start("testProcessNormal/testProcessNormal");
+
+ QVERIFY(!process.waitForStarted(5000));
+ qDebug() << process.errorString();
+}
+
+void tst_QProcess::unixProcessParametersAndChildModifier()
+{
+ static constexpr char message[] = "Message from the handler function\n";
+ static_assert(std::char_traits<char>::length(message) <= PIPE_BUF);
+ QProcess process;
+ QAtomicInt vforkControl;
+ int pipes[2];
+
+ pid_t oldpgid = getpgrp();
+
+ QVERIFY2(pipe(pipes) == 0, qPrintable(qt_error_string()));
+ auto pipeGuard0 = qScopeGuard([=] { close(pipes[0]); });
+ {
+ auto pipeGuard1 = qScopeGuard([=] { close(pipes[1]); });
+
+ // verify that our modifier runs before the parameters are applied
+ process.setChildProcessModifier([=, &vforkControl] {
+ const char *pgidmsg = "PGID mismatch. ";
+ if (getpgrp() != oldpgid)
+ write(pipes[1], pgidmsg, strlen(pgidmsg));
+ write(pipes[1], message, strlen(message));
+ vforkControl.storeRelaxed(1);
+ });
+ auto flags = QProcess::UnixProcessFlag::CloseFileDescriptors |
+ QProcess::UnixProcessFlag::CreateNewSession |
+ QProcess::UnixProcessFlag::UseVFork;
+ process.setUnixProcessParameters({ flags });
+ process.setProgram("testUnixProcessParameters/testUnixProcessParameters");
+ process.setArguments({ "file-descriptors", QString::number(pipes[1]) });
+ process.start();
+ QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString()));
+ } // closes the writing end of the pipe
+
+ QVERIFY(process.waitForFinished(5000));
+ QCOMPARE(process.readAllStandardError(), QString());
+ QCOMPARE(process.readAll(), QString());
+
+ char buf[2 * sizeof(message)];
+ int r = read(pipes[0], buf, sizeof(buf));
+ QVERIFY2(r >= 0, qPrintable(qt_error_string()));
+ QCOMPARE(QByteArrayView(buf, r), message);
+
+ if (haveWorkingVFork)
+ QVERIFY2(vforkControl.loadRelaxed(), "QProcess doesn't appear to have used vfork()");
+}
+
+void tst_QProcess::unixProcessParametersOtherFileDescriptors()
+{
+ constexpr int TargetFileDescriptor = 3;
+ int fd1 = open("/dev/null", O_RDONLY);
+ int devnull = fcntl(fd1, F_DUPFD, 100); // instead of F_DUPFD_CLOEXEC
+ close(fd1);
+
+ auto closeFds = qScopeGuard([&] {
+ close(devnull);
+ });
+
+ QProcess process;
+ QProcess::UnixProcessParameters params;
+ params.flags = QProcess::UnixProcessFlag::CloseFileDescriptors
+ | QProcess::UnixProcessFlag::UseVFork;
+ params.lowestFileDescriptorToClose = 4;
+ process.setUnixProcessParameters(params);
+ process.setChildProcessModifier([devnull, &process]() {
+ if (dup2(devnull, TargetFileDescriptor) != TargetFileDescriptor)
+ process.failChildProcessModifier("dup2", errno);
+ });
+ process.setProgram("testUnixProcessParameters/testUnixProcessParameters");
+ process.setArguments({ "file-descriptors2", QString::number(TargetFileDescriptor),
+ QString::number(devnull) });
+ process.start();
+
+ QVERIFY2(process.waitForStarted(5000), qPrintable(process.errorString()));
+ QVERIFY(process.waitForFinished(5000));
+ QCOMPARE(process.readAllStandardError(), QString());
+ QCOMPARE(process.readAll(), QString());
+ QCOMPARE(process.exitCode(), 0);
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+}
+#endif
+
void tst_QProcess::exitCodeTest()
{
for (int i = 0; i < 255; ++i) {
@@ -1508,7 +1968,7 @@ void tst_QProcess::failToStart()
// to many processes here will cause test failures later on.
#if defined Q_OS_HPUX
const int attempts = 15;
-#elif defined Q_OS_MAC
+#elif defined Q_OS_DARWIN
const int attempts = 15;
#else
const int attempts = 50;
@@ -1516,7 +1976,7 @@ void tst_QProcess::failToStart()
for (int j = 0; j < 8; ++j) {
for (int i = 0; i < attempts; ++i) {
- QCOMPARE(errorSpy.count(), j * attempts + i);
+ QCOMPARE(errorSpy.size(), j * attempts + i);
process.start("/blurp");
switch (j) {
@@ -1540,12 +2000,12 @@ void tst_QProcess::failToStart()
}
QCOMPARE(process.error(), QProcess::FailedToStart);
- QCOMPARE(errorSpy.count(), j * attempts + i + 1);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(errorSpy.size(), j * attempts + i + 1);
+ QCOMPARE(finishedSpy.size(), 0);
int it = j * attempts + i + 1;
- QCOMPARE(stateSpy.count(), it * 2);
+ QCOMPARE(stateSpy.size(), it * 2);
QCOMPARE(qvariant_cast<QProcess::ProcessState>(stateSpy.at(it * 2 - 2).at(0)), QProcess::Starting);
QCOMPARE(qvariant_cast<QProcess::ProcessState>(stateSpy.at(it * 2 - 1).at(0)), QProcess::NotRunning);
}
@@ -1569,8 +2029,8 @@ void tst_QProcess::failToStartWithWait()
process.waitForStarted();
QCOMPARE(process.error(), QProcess::FailedToStart);
- QCOMPARE(errorSpy.count(), i + 1);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(errorSpy.size(), i + 1);
+ QCOMPARE(finishedSpy.size(), 0);
}
}
@@ -1596,8 +2056,8 @@ void tst_QProcess::failToStartWithEventLoop()
loop.exec();
QCOMPARE(process.error(), QProcess::FailedToStart);
- QCOMPARE(errorSpy.count(), i + 1);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(errorSpy.size(), i + 1);
+ QCOMPARE(finishedSpy.size(), 0);
}
}
@@ -1629,7 +2089,7 @@ void tst_QProcess::failToStartEmptyArgs()
};
QVERIFY(!process.waitForStarted());
- QCOMPARE(errorSpy.count(), 1);
+ QCOMPARE(errorSpy.size(), 1);
QCOMPARE(process.error(), QProcess::FailedToStart);
}
@@ -1868,9 +2328,9 @@ void tst_QProcess::waitForReadyReadForNonexistantProcess()
QVERIFY(!process.waitForReadyRead()); // used to crash
process.start("doesntexist");
QVERIFY(!process.waitForReadyRead());
- QCOMPARE(errorSpy.count(), 1);
+ QCOMPARE(errorSpy.size(), 1);
QCOMPARE(errorSpy.at(0).at(0).toInt(), 0);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(finishedSpy.size(), 0);
}
void tst_QProcess::setStandardInputFile()
@@ -1879,12 +2339,21 @@ void tst_QProcess::setStandardInputFile()
QProcess process;
QFile file(m_temporaryDir.path() + QLatin1String("/data-sif"));
+ QSignalSpy stateSpy(&process, &QProcess::stateChanged);
+ QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred);
+
QVERIFY(file.open(QIODevice::WriteOnly));
file.write(data, sizeof data);
file.close();
process.setStandardInputFile(file.fileName());
process.start("testProcessEcho/testProcessEcho");
+ QVERIFY(process.waitForStarted());
+ QCOMPARE(errorOccurredSpy.size(), 0);
+ QCOMPARE(stateSpy.size(), 2);
+ QCOMPARE(stateSpy[0][0].value<QProcess::ProcessState>(), QProcess::Starting);
+ QCOMPARE(stateSpy[1][0].value<QProcess::ProcessState>(), QProcess::Running);
+ stateSpy.clear();
QVERIFY(process.waitForFinished());
QCOMPARE(process.exitStatus(), QProcess::NormalExit);
@@ -1901,31 +2370,50 @@ void tst_QProcess::setStandardInputFile()
QCOMPARE(all.size(), 0);
}
+void tst_QProcess::setStandardInputFileFailure()
+{
+ QProcess process;
+ process.setStandardInputFile(nonExistentFileName);
+
+ QSignalSpy stateSpy(&process, &QProcess::stateChanged);
+ QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred);
+
+ process.start("testProcessEcho/testProcessEcho");
+ QVERIFY(!process.waitForStarted());
+
+ QCOMPARE(errorOccurredSpy.size(), 1);
+ QCOMPARE(errorOccurredSpy[0][0].value<QProcess::ProcessError>(), QProcess::FailedToStart);
+
+ QCOMPARE(stateSpy.size(), 2);
+ QCOMPARE(stateSpy[0][0].value<QProcess::ProcessState>(), QProcess::Starting);
+ QCOMPARE(stateSpy[1][0].value<QProcess::ProcessState>(), QProcess::NotRunning);
+}
+
void tst_QProcess::setStandardOutputFile_data()
{
- QTest::addColumn<int>("channelToTest");
- QTest::addColumn<int>("_channelMode");
+ QTest::addColumn<QProcess::ProcessChannel>("channelToTest");
+ QTest::addColumn<QProcess::ProcessChannelMode>("channelMode");
QTest::addColumn<bool>("append");
- QTest::newRow("stdout-truncate") << int(QProcess::StandardOutput)
- << int(QProcess::SeparateChannels)
+ QTest::newRow("stdout-truncate") << QProcess::StandardOutput
+ << QProcess::SeparateChannels
<< false;
- QTest::newRow("stdout-append") << int(QProcess::StandardOutput)
- << int(QProcess::SeparateChannels)
+ QTest::newRow("stdout-append") << QProcess::StandardOutput
+ << QProcess::SeparateChannels
<< true;
- QTest::newRow("stderr-truncate") << int(QProcess::StandardError)
- << int(QProcess::SeparateChannels)
+ QTest::newRow("stderr-truncate") << QProcess::StandardError
+ << QProcess::SeparateChannels
<< false;
- QTest::newRow("stderr-append") << int(QProcess::StandardError)
- << int(QProcess::SeparateChannels)
+ QTest::newRow("stderr-append") << QProcess::StandardError
+ << QProcess::SeparateChannels
<< true;
- QTest::newRow("merged-truncate") << int(QProcess::StandardOutput)
- << int(QProcess::MergedChannels)
+ QTest::newRow("merged-truncate") << QProcess::StandardOutput
+ << QProcess::MergedChannels
<< false;
- QTest::newRow("merged-append") << int(QProcess::StandardOutput)
- << int(QProcess::MergedChannels)
+ QTest::newRow("merged-append") << QProcess::StandardOutput
+ << QProcess::MergedChannels
<< true;
}
@@ -1934,11 +2422,10 @@ void tst_QProcess::setStandardOutputFile()
static const char data[] = "Original data. ";
static const char testdata[] = "Test data.";
- QFETCH(int, channelToTest);
- QFETCH(int, _channelMode);
+ QFETCH(QProcess::ProcessChannel, channelToTest);
+ QFETCH(QProcess::ProcessChannelMode, channelMode);
QFETCH(bool, append);
- QProcess::ProcessChannelMode channelMode = QProcess::ProcessChannelMode(_channelMode);
QIODevice::OpenMode mode = append ? QIODevice::Append : QIODevice::Truncate;
// create the destination file with data
@@ -1955,7 +2442,17 @@ void tst_QProcess::setStandardOutputFile()
else
process.setStandardErrorFile(file.fileName(), mode);
+ QSignalSpy stateSpy(&process, &QProcess::stateChanged);
+ QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred);
+
process.start("testProcessEcho2/testProcessEcho2");
+ QVERIFY(process.waitForStarted());
+ QCOMPARE(errorOccurredSpy.size(), 0);
+ QCOMPARE(stateSpy.size(), 2);
+ QCOMPARE(stateSpy[0][0].value<QProcess::ProcessState>(), QProcess::Starting);
+ QCOMPARE(stateSpy[1][0].value<QProcess::ProcessState>(), QProcess::Running);
+ stateSpy.clear();
+
process.write(testdata, sizeof testdata);
QVERIFY(process.waitForFinished());
QCOMPARE(process.exitStatus(), QProcess::NormalExit);
@@ -1980,6 +2477,34 @@ void tst_QProcess::setStandardOutputFile()
QCOMPARE(all.size(), expectedsize);
}
+void tst_QProcess::setStandardOutputFileFailure()
+{
+ QFETCH(QProcess::ProcessChannel, channelToTest);
+ QFETCH(QProcess::ProcessChannelMode, channelMode);
+ QFETCH(bool, append);
+
+ QIODevice::OpenMode mode = append ? QIODevice::Append : QIODevice::Truncate;
+
+ // run the process
+ QProcess process;
+ process.setProcessChannelMode(channelMode);
+ if (channelToTest == QProcess::StandardOutput)
+ process.setStandardOutputFile(nonExistentFileName, mode);
+ else
+ process.setStandardErrorFile(nonExistentFileName, mode);
+
+ QSignalSpy stateSpy(&process, &QProcess::stateChanged);
+ QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred);
+
+ process.start("testProcessEcho2/testProcessEcho2");
+ QVERIFY(!process.waitForStarted());
+ QCOMPARE(errorOccurredSpy.size(), 1);
+ QCOMPARE(errorOccurredSpy[0][0].value<QProcess::ProcessError>(), QProcess::FailedToStart);
+ QCOMPARE(stateSpy.size(), 2);
+ QCOMPARE(stateSpy[0][0].value<QProcess::ProcessState>(), QProcess::Starting);
+ QCOMPARE(stateSpy[1][0].value<QProcess::ProcessState>(), QProcess::NotRunning);
+}
+
void tst_QProcess::setStandardOutputFileNullDevice()
{
static const char testdata[] = "Test data.";
@@ -2255,13 +2780,21 @@ void tst_QProcess::setWorkingDirectory()
void tst_QProcess::setNonExistentWorkingDirectory()
{
QProcess process;
- process.setWorkingDirectory("this/directory/should/not/exist/for/sure");
+ process.setWorkingDirectory(nonExistentFileName);
+
+ QSignalSpy stateSpy(&process, &QProcess::stateChanged);
+ QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred);
// use absolute path because on Windows, the executable is relative to the parent's CWD
// while on Unix with fork it's relative to the child's (with posix_spawn, it could be either).
process.start(QFileInfo("testSetWorkingDirectory/testSetWorkingDirectory").absoluteFilePath());
+
QVERIFY(!process.waitForFinished());
- QCOMPARE(int(process.error()), int(QProcess::FailedToStart));
+ QCOMPARE(errorOccurredSpy.size(), 1);
+ QCOMPARE(process.error(), QProcess::FailedToStart);
+ QCOMPARE(stateSpy.size(), 2);
+ QCOMPARE(stateSpy[0][0].value<QProcess::ProcessState>(), QProcess::Starting);
+ QCOMPARE(stateSpy[1][0].value<QProcess::ProcessState>(), QProcess::NotRunning);
#ifdef Q_OS_UNIX
QVERIFY2(process.errorString().startsWith("chdir:"), process.errorString().toLocal8Bit());
@@ -2271,7 +2804,9 @@ void tst_QProcess::setNonExistentWorkingDirectory()
void tst_QProcess::detachedSetNonExistentWorkingDirectory()
{
QProcess process;
- process.setWorkingDirectory("this/directory/should/not/exist/for/sure");
+ process.setWorkingDirectory(nonExistentFileName);
+
+ QSignalSpy errorOccurredSpy(&process, &QProcess::errorOccurred);
// use absolute path because on Windows, the executable is relative to the parent's CWD
// while on Unix with fork it's relative to the child's (with posix_spawn, it could be either).
@@ -2283,6 +2818,9 @@ void tst_QProcess::detachedSetNonExistentWorkingDirectory()
QCOMPARE(process.error(), QProcess::FailedToStart);
QVERIFY(process.errorString() != "Unknown error");
+ QCOMPARE(errorOccurredSpy.size(), 1);
+ QCOMPARE(process.error(), QProcess::FailedToStart);
+
#ifdef Q_OS_UNIX
QVERIFY2(process.errorString().startsWith("chdir:"), process.errorString().toLocal8Bit());
#endif
@@ -2325,7 +2863,7 @@ void tst_QProcess::invalidProgramString()
process.start(programString);
QCOMPARE(process.error(), QProcess::FailedToStart);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(!QProcess::startDetached(programString));
}
@@ -2344,8 +2882,8 @@ void tst_QProcess::onlyOneStartedSignal()
process.start("testProcessNormal/testProcessNormal");
QVERIFY(process.waitForStarted(5000));
QVERIFY(process.waitForFinished(5000));
- QCOMPARE(spyStarted.count(), 1);
- QCOMPARE(spyFinished.count(), 1);
+ QCOMPARE(spyStarted.size(), 1);
+ QCOMPARE(spyFinished.size(), 1);
spyStarted.clear();
spyFinished.clear();
@@ -2354,8 +2892,8 @@ void tst_QProcess::onlyOneStartedSignal()
QVERIFY(process.waitForFinished(5000));
QCOMPARE(process.exitStatus(), QProcess::NormalExit);
QCOMPARE(process.exitCode(), 0);
- QCOMPARE(spyStarted.count(), 1);
- QCOMPARE(spyFinished.count(), 1);
+ QCOMPARE(spyStarted.size(), 1);
+ QCOMPARE(spyFinished.size(), 1);
}
class BlockOnReadStdOut : public QObject
@@ -2370,7 +2908,7 @@ public:
public slots:
void block()
{
- QThread::sleep(1);
+ QThread::sleep(std::chrono::seconds{1});
}
};
@@ -2422,23 +2960,23 @@ void tst_QProcess::startStopStartStop()
//-----------------------------------------------------------------------------
void tst_QProcess::startStopStartStopBuffers_data()
{
- QTest::addColumn<int>("channelMode1");
- QTest::addColumn<int>("channelMode2");
+ QTest::addColumn<QProcess::ProcessChannelMode>("channelMode1");
+ QTest::addColumn<QProcess::ProcessChannelMode>("channelMode2");
- QTest::newRow("separate-separate") << int(QProcess::SeparateChannels) << int(QProcess::SeparateChannels);
- QTest::newRow("separate-merged") << int(QProcess::SeparateChannels) << int(QProcess::MergedChannels);
- QTest::newRow("merged-separate") << int(QProcess::MergedChannels) << int(QProcess::SeparateChannels);
- QTest::newRow("merged-merged") << int(QProcess::MergedChannels) << int(QProcess::MergedChannels);
- QTest::newRow("merged-forwarded") << int(QProcess::MergedChannels) << int(QProcess::ForwardedChannels);
+ QTest::newRow("separate-separate") << QProcess::SeparateChannels << QProcess::SeparateChannels;
+ QTest::newRow("separate-merged") << QProcess::SeparateChannels << QProcess::MergedChannels;
+ QTest::newRow("merged-separate") << QProcess::MergedChannels << QProcess::SeparateChannels;
+ QTest::newRow("merged-merged") << QProcess::MergedChannels << QProcess::MergedChannels;
+ QTest::newRow("merged-forwarded") << QProcess::MergedChannels << QProcess::ForwardedChannels;
}
void tst_QProcess::startStopStartStopBuffers()
{
- QFETCH(int, channelMode1);
- QFETCH(int, channelMode2);
+ QFETCH(QProcess::ProcessChannelMode, channelMode1);
+ QFETCH(QProcess::ProcessChannelMode, channelMode2);
QProcess process;
- process.setProcessChannelMode(QProcess::ProcessChannelMode(channelMode1));
+ process.setProcessChannelMode(channelMode1);
process.start("testProcessHang/testProcessHang");
QVERIFY2(process.waitForReadyRead(), process.errorString().toLocal8Bit());
if (channelMode1 == QProcess::SeparateChannels || channelMode1 == QProcess::ForwardedOutputChannel) {
@@ -2449,14 +2987,18 @@ void tst_QProcess::startStopStartStopBuffers()
}
// We want to test that the write buffer still has bytes after the child
- // exiting. We do that by writing to a child process that never reads. We
- // just have to write more data than a pipe can hold, so that even if
- // QProcess finds the pipe writable (during waitForFinished() or in the
- // QWindowsPipeWriter thread), some data will remain. The worst case I know
- // of is Linux, which defaults to 64 kB of buffer.
+ // exits. We can do that by writing data until the OS stops consuming data,
+ // indicating that the pipe buffers are full. The initial value of 128 kB
+ // should make this loop typicall run only once; the worst case I know of
+ // is Linux, which defaults to 64 kB of buffer.
- process.write(QByteArray(128 * 1024, 'a'));
- QVERIFY(process.bytesToWrite() > 0);
+ QByteArray chunk(128 * 1024, 'a');
+ do {
+ process.write(chunk);
+ QVERIFY(process.bytesToWrite() > 0);
+ process.waitForBytesWritten(1);
+ } while (process.bytesToWrite() == 0);
+ chunk = {};
process.kill();
QVERIFY(process.waitForFinished());
@@ -2464,7 +3006,8 @@ void tst_QProcess::startStopStartStopBuffers()
#ifndef Q_OS_WIN
// confirm that our buffers are still full
// Note: this doesn't work on Windows because our buffers are drained into
- // QWindowsPipeWriter before being sent to the child process.
+ // QWindowsPipeWriter before being sent to the child process and are lost
+ // in waitForFinished() -> processFinished() -> cleanup().
QVERIFY(process.bytesToWrite() > 0);
QVERIFY(process.bytesAvailable() > 0); // channelMode1 is not ForwardedChannels
if (channelMode1 == QProcess::SeparateChannels || channelMode1 == QProcess::ForwardedOutputChannel) {
@@ -2474,7 +3017,7 @@ void tst_QProcess::startStopStartStopBuffers()
}
#endif
- process.setProcessChannelMode(QProcess::ProcessChannelMode(channelMode2));
+ process.setProcessChannelMode(channelMode2);
process.start("testProcessEcho2/testProcessEcho2", {}, QIODevice::ReadWrite | QIODevice::Text);
// the buffers should now be empty
@@ -2524,5 +3067,94 @@ void tst_QProcess::processEventsInAReadyReadSlot()
QVERIFY(process.waitForFinished());
}
+enum class ChdirMode {
+ None = 0,
+ InParent,
+ InChild
+};
+Q_DECLARE_METATYPE(ChdirMode)
+
+void tst_QProcess::startFromCurrentWorkingDir_data()
+{
+ qRegisterMetaType<ChdirMode>();
+ QTest::addColumn<QString>("programPrefix");
+ QTest::addColumn<ChdirMode>("chdirMode");
+ QTest::addColumn<bool>("success");
+
+ constexpr bool IsWindows = true
+#ifdef Q_OS_UNIX
+ && false
+#endif
+ ;
+
+ // baseline: trying to execute the directory, this can't possibly succeed!
+ QTest::newRow("plain-same-cwd") << QString() << ChdirMode::None << false;
+
+ // cross-platform behavior: neither OS searches the setWorkingDirectory()
+ // dir without "./"
+ QTest::newRow("plain-child-chdir") << QString() << ChdirMode::InChild << false;
+
+ // cross-platform behavior: both OSes search the parent's CWD with "./"
+ QTest::newRow("prefixed-parent-chdir") << "./" << ChdirMode::InParent << true;
+
+ // opposite behaviors: Windows searches the parent's CWD and Unix searches
+ // the child's with "./"
+ QTest::newRow("prefixed-child-chdir") << "./" << ChdirMode::InChild << !IsWindows;
+
+ // Windows searches the parent's CWD without "./"
+ QTest::newRow("plain-parent-chdir") << QString() << ChdirMode::InParent << IsWindows;
+}
+
+void tst_QProcess::startFromCurrentWorkingDir()
+{
+ QFETCH(QString, programPrefix);
+ QFETCH(ChdirMode, chdirMode);
+ QFETCH(bool, success);
+
+ QProcess process;
+ qRegisterMetaType<QProcess::ProcessError>();
+ QSignalSpy errorSpy(&process, &QProcess::errorOccurred);
+ QVERIFY(errorSpy.isValid());
+
+ // both the dir name and the executable name
+ const QString target = QStringLiteral("testProcessNormal");
+ process.setProgram(programPrefix + target);
+
+#ifdef Q_OS_UNIX
+ // Reset PATH, to be sure it doesn't contain . or the empty path.
+ // We can't do this on Windows because DLLs are searched in PATH
+ // and Windows always searches "." anyway.
+ auto restoreEnv = qScopeGuard([old = qgetenv("PATH")] {
+ qputenv("PATH", old);
+ });
+ qputenv("PATH", "/");
+#endif
+
+ switch (chdirMode) {
+ case ChdirMode::InParent: {
+ auto restoreCwd = qScopeGuard([old = QDir::currentPath()] {
+ QDir::setCurrent(old);
+ });
+ QVERIFY(QDir::setCurrent(target));
+ process.start();
+ break;
+ }
+ case ChdirMode::InChild:
+ process.setWorkingDirectory(target);
+ Q_FALLTHROUGH();
+ case ChdirMode::None:
+ process.start();
+ break;
+ }
+
+ QCOMPARE(process.waitForStarted(), success);
+ QCOMPARE(errorSpy.size(), int(!success));
+ if (success) {
+ QVERIFY(process.waitForFinished());
+ } else {
+ QCOMPARE(process.error(), QProcess::FailedToStart);
+ }
+}
+
QTEST_MAIN(tst_QProcess)
#include "tst_qprocess.moc"
diff --git a/tests/auto/corelib/io/qprocessenvironment/CMakeLists.txt b/tests/auto/corelib/io/qprocessenvironment/CMakeLists.txt
index d612a32374..02c6909031 100644
--- a/tests/auto/corelib/io/qprocessenvironment/CMakeLists.txt
+++ b/tests/auto/corelib/io/qprocessenvironment/CMakeLists.txt
@@ -1,10 +1,19 @@
-# Generated from qprocessenvironment.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qprocessenvironment Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qprocessenvironment LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qprocessenvironment
SOURCES
tst_qprocessenvironment.cpp
+ LIBRARIES
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/io/qprocessenvironment/tst_qprocessenvironment.cpp b/tests/auto/corelib/io/qprocessenvironment/tst_qprocessenvironment.cpp
index d1035cb8c2..6a2a3daaa2 100644
--- a/tests/auto/corelib/io/qprocessenvironment/tst_qprocessenvironment.cpp
+++ b/tests/auto/corelib/io/qprocessenvironment/tst_qprocessenvironment.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
#include <QObject>
#include <QProcessEnvironment>
@@ -34,6 +10,7 @@ class tst_QProcessEnvironment: public QObject
{
Q_OBJECT
private slots:
+ void compareCompiles();
void operator_eq();
void clearAndIsEmpty();
void clearAndInheritsFromParent();
@@ -48,6 +25,11 @@ private slots:
void putenv();
};
+void tst_QProcessEnvironment::compareCompiles()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QProcessEnvironment>();
+}
+
void tst_QProcessEnvironment::operator_eq()
{
QProcessEnvironment e1;
@@ -60,8 +42,7 @@ void tst_QProcessEnvironment::operator_eq()
QCOMPARE(e1, e2);
auto parentEnv = QProcessEnvironment(QProcessEnvironment::InheritFromParent);
- QVERIFY(parentEnv != e2);
- QVERIFY(e2 != parentEnv);
+ QT_TEST_EQUALITY_OPS(parentEnv, e2, false);
e1.clear();
QCOMPARE(e1, e2);
@@ -70,16 +51,15 @@ void tst_QProcessEnvironment::operator_eq()
QCOMPARE(e1, e2);
e1.insert("FOO", "bar");
- QVERIFY(e1 != e2);
+ QT_TEST_EQUALITY_OPS(e1, e2, false);
e2.insert("FOO", "bar");
QCOMPARE(e1, e2);
e2.insert("FOO", "baz");
- QVERIFY(e1 != e2);
+ QT_TEST_EQUALITY_OPS(e1, e2, false);
- QVERIFY(e2 != parentEnv);
- QVERIFY(parentEnv != e2);
+ QT_TEST_EQUALITY_OPS(e2, parentEnv, false);
}
void tst_QProcessEnvironment::clearAndIsEmpty()
@@ -155,7 +135,7 @@ void tst_QProcessEnvironment::toStringList()
e.insert("FOO", "bar");
QStringList result = e.toStringList();
QVERIFY(!result.isEmpty());
- QCOMPARE(result.length(), 1);
+ QCOMPARE(result.size(), 1);
QCOMPARE(result.at(0), QString("FOO=bar"));
e.clear();
@@ -167,7 +147,7 @@ void tst_QProcessEnvironment::toStringList()
e.insert("A", "bc");
e.insert("HELLO", "World");
result = e.toStringList();
- QCOMPARE(result.length(), 4);
+ QCOMPARE(result.size(), 4);
// order is not specified, so use contains()
QVERIFY(result.contains("FOO=bar"));
@@ -184,7 +164,7 @@ void tst_QProcessEnvironment::keys()
e.insert("FOO", "bar");
QStringList result = e.keys();
- QCOMPARE(result.length(), 1);
+ QCOMPARE(result.size(), 1);
QCOMPARE(result.at(0), QString("FOO"));
e.clear();
@@ -196,7 +176,7 @@ void tst_QProcessEnvironment::keys()
e.insert("A", "bc");
e.insert("HELLO", "World");
result = e.keys();
- QCOMPARE(result.length(), 4);
+ QCOMPARE(result.size(), 4);
// order is not specified, so use contains()
QVERIFY(result.contains("FOO"));
@@ -219,7 +199,7 @@ void tst_QProcessEnvironment::insertEnv()
e.insert(e2);
QStringList keys = e.keys();
- QCOMPARE(keys.length(), 5);
+ QCOMPARE(keys.size(), 5);
QCOMPARE(e.value("FOO"), QString("bar"));
QCOMPARE(e.value("A"), QString("bc"));
@@ -269,7 +249,7 @@ void tst_QProcessEnvironment::caseSensitivity()
QCOMPARE(e.value("foo"), QString("bar"));
QStringList list = e.toStringList();
- QCOMPARE(list.length(), 2);
+ QCOMPARE(list.size(), 2);
QVERIFY(list.contains("foo=bar"));
QVERIFY(list.contains("FOO=baz"));
#endif
diff --git a/tests/auto/corelib/io/qresourceengine/CMakeLists.txt b/tests/auto/corelib/io/qresourceengine/CMakeLists.txt
index b6b3c588d5..a86cc8e76a 100644
--- a/tests/auto/corelib/io/qresourceengine/CMakeLists.txt
+++ b/tests/auto/corelib/io/qresourceengine/CMakeLists.txt
@@ -1,11 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qresourceengine Test:
#####################################################################
-if (NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
cmake_minimum_required(VERSION 3.16)
project(tst_qresourceengine LANGUAGES C CXX ASM)
- find_package(Qt6BuildInternals COMPONENTS STANDALONE_TEST)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
endif()
# Collect test data
@@ -28,6 +31,17 @@ qt_internal_add_test(tst_qresourceengine
TESTDATA ${test_data}
)
+set_source_files_properties("world.txt"
+ PROPERTIES QT_DISCARD_FILE_CONTENTS TRUE
+)
+
+qt_internal_add_resource(tst_qresourceengine "qt_resource_empty"
+ PREFIX
+ "/empty"
+ FILES
+ "world.txt"
+)
+
qt_add_resources(additional_sources testqrc/test.qrc)
target_sources(tst_qresourceengine PRIVATE ${additional_sources})
diff --git a/tests/auto/corelib/io/qresourceengine/staticplugin/CMakeLists.txt b/tests/auto/corelib/io/qresourceengine/staticplugin/CMakeLists.txt
index 5e2e374310..1012fcaa62 100644
--- a/tests/auto/corelib/io/qresourceengine/staticplugin/CMakeLists.txt
+++ b/tests/auto/corelib/io/qresourceengine/staticplugin/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## moctestplugin Generic Library:
#####################################################################
diff --git a/tests/auto/corelib/io/qresourceengine/tst_qresourceengine.cpp b/tests/auto/corelib/io/qresourceengine/tst_qresourceengine.cpp
index 1de5749d6e..fc9b9ee201 100644
--- a/tests/auto/corelib/io/qresourceengine/tst_qresourceengine.cpp
+++ b/tests/auto/corelib/io/qresourceengine/tst_qresourceengine.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2019 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2019 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QResource>
@@ -62,9 +37,11 @@ private slots:
void searchPath_data();
void searchPath();
void doubleSlashInRoot();
+ void setLocale_data();
void setLocale();
void lastModified();
void resourcesInStaticPlugins();
+ void qtResourceEmpty();
private:
const QString m_runtimeResourceRcc;
@@ -192,6 +169,7 @@ void tst_QResourceEngine::checkStructure_data()
#ifdef Q_OS_ANDROID
<< QLatin1String("android_testdata")
#endif
+ << QLatin1String("empty")
<< QLatin1String("otherdir")
<< QLatin1String("runtime_resource")
<< QLatin1String("searchpath1")
@@ -308,7 +286,7 @@ void tst_QResourceEngine::checkStructure_data()
info = QFileInfo(QFINDTESTDATA("testqrc/test/test/test2.txt"));
- QTest::addRow("%s test1 text", qPrintable(root)) << QString(root + "test/test/test2.txt")
+ QTest::addRow("%s test2 text", qPrintable(root)) << QString(root + "test/test/test2.txt")
<< QByteArray("def\n")
<< QStringList()
<< QStringList()
@@ -404,7 +382,7 @@ void tst_QResourceEngine::checkStructure_data()
<< qlonglong(info.size());
QFile file(QFINDTESTDATA("testqrc/aliasdir/compressme.txt"));
- file.open(QFile::ReadOnly);
+ QVERIFY(file.open(QFile::ReadOnly));
info = QFileInfo(QFINDTESTDATA("testqrc/aliasdir/compressme.txt"));
QTest::addRow("%s compressed text", qPrintable(root)) << QString(root + "aliasdir/aliasdir.txt")
<< file.readAll()
@@ -491,7 +469,7 @@ void tst_QResourceEngine::checkStructure()
void tst_QResourceEngine::searchPath_data()
{
- auto searchPath = QFileInfo(QT_TESTCASE_SOURCEDIR "/testqrc").canonicalFilePath();
+ auto searchPath = QFileInfo(QFINDTESTDATA("testqrc/test.qrc")).canonicalPath();
QTest::addColumn<QString>("searchPathPrefix");
QTest::addColumn<QString>("searchPath");
@@ -565,6 +543,15 @@ void tst_QResourceEngine::checkUnregisterResource()
QVERIFY(QFile::exists(file_check));
QVERIFY(QResource::unregisterResource(rcc_file, root));
QVERIFY(!QFile::exists(file_check));
+ {
+ // QTBUG-86088
+ QVERIFY(QResource::registerResource(rcc_file, root));
+ QFile file(file_check);
+ QVERIFY(file.open(QFile::ReadOnly));
+ QVERIFY(!QResource::unregisterResource(rcc_file, root));
+ file.close();
+ QVERIFY(!QFile::exists(file_check));
+ }
QVERIFY(QResource::registerResource(rcc_file, root));
QVERIFY(QFile::exists(file_check));
QFileInfo fileInfo(file_check);
@@ -581,13 +568,22 @@ void tst_QResourceEngine::doubleSlashInRoot()
QVERIFY(QFile::exists("://secondary_root/runtime_resource/search_file.txt"));
}
+void tst_QResourceEngine::setLocale_data()
+{
+ QTest::addColumn<QString>("prefix");
+ QTest::newRow("built-in") << QString();
+ QTest::newRow("runtime") << "/runtime_resource/";
+}
+
void tst_QResourceEngine::setLocale()
{
+ QFETCH(QString, prefix);
QLocale::setDefault(QLocale::c());
// default constructed QResource gets the default locale
QResource resource;
- resource.setFileName("aliasdir/aliasdir.txt");
+ resource.setFileName(prefix + "aliasdir/aliasdir.txt");
+ QVERIFY(resource.isValid());
QCOMPARE(resource.compressionAlgorithm(), QResource::NoCompression);
// change the default locale and make sure it doesn't affect the resource
@@ -626,6 +622,14 @@ void tst_QResourceEngine::resourcesInStaticPlugins()
QVERIFY(QFile::exists(":/staticplugin/main.cpp"));
}
+void tst_QResourceEngine::qtResourceEmpty()
+{
+ QFile f(":/empty/world.txt");
+ QVERIFY(f.exists());
+ QVERIFY(f.open(QIODevice::ReadOnly));
+ QVERIFY(f.readAll().isEmpty());
+}
+
QTEST_MAIN(tst_QResourceEngine)
#include "tst_qresourceengine.moc"
diff --git a/tests/auto/corelib/io/qresourceengine/world.txt b/tests/auto/corelib/io/qresourceengine/world.txt
new file mode 100644
index 0000000000..ce01362503
--- /dev/null
+++ b/tests/auto/corelib/io/qresourceengine/world.txt
@@ -0,0 +1 @@
+hello
diff --git a/tests/auto/corelib/io/qsavefile/CMakeLists.txt b/tests/auto/corelib/io/qsavefile/CMakeLists.txt
index 0b41340279..26869eb163 100644
--- a/tests/auto/corelib/io/qsavefile/CMakeLists.txt
+++ b/tests/auto/corelib/io/qsavefile/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qsavefile.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsavefile Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsavefile LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "tst_qsavefile.cpp")
diff --git a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
index 3d09ea291d..fbb6a29f26 100644
--- a/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
+++ b/tests/auto/corelib/io/qsavefile/tst_qsavefile.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 David Faure <faure@kde.org>
-** 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) 2012 David Faure <faure@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSaveFile>
@@ -35,7 +10,7 @@
#include <qdir.h>
#include <qset.h>
-#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS)
+#if defined(Q_OS_UNIX)
#include <unistd.h> // for geteuid
#endif
@@ -130,7 +105,7 @@ void tst_QSaveFile::transactionalWrite()
const QString otherFile = dir.path() + QString::fromLatin1("/otherfile");
QFile::remove(otherFile);
QFile other(otherFile);
- other.open(QIODevice::WriteOnly);
+ QVERIFY(other.open(QIODevice::WriteOnly));
other.close();
QCOMPARE(QFile::permissions(targetFile), QFile::permissions(otherFile));
}
@@ -145,7 +120,7 @@ void tst_QSaveFile::retryTransactionalWrite()
// root can open the read-only file for writing...
if (geteuid() == 0)
QSKIP("This test does not work as the root user");
-#endif
+#endif //Q_OS_UNIX
QTemporaryDir dir;
QVERIFY2(dir.isValid(), qPrintable(dir.errorString()));
diff --git a/tests/auto/corelib/io/qsettings/.gitattributes b/tests/auto/corelib/io/qsettings/.gitattributes
index a4ad8d7644..920df33b54 100644
--- a/tests/auto/corelib/io/qsettings/.gitattributes
+++ b/tests/auto/corelib/io/qsettings/.gitattributes
@@ -1,5 +1,3 @@
resourcefile.ini -crlf
resourcefile2.ini -crlf
resourcefile3.ini -crlf
-resourcefile4.ini -crlf
-resourcefile5.ini -crlf
diff --git a/tests/auto/corelib/io/qsettings/CMakeLists.txt b/tests/auto/corelib/io/qsettings/CMakeLists.txt
index 55a360166b..e68b2644af 100644
--- a/tests/auto/corelib/io/qsettings/CMakeLists.txt
+++ b/tests/auto/corelib/io/qsettings/CMakeLists.txt
@@ -1,39 +1,39 @@
-# Generated from qsettings.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsettings Test:
#####################################################################
-qt_internal_add_test(tst_qsettings
- SOURCES
- tst_qsettings.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
- INCLUDE_DIRECTORIES
- ../../kernel/qmetatype
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Gui
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsettings LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
-# Resources:
+# Test:
set(qsettings_resource_files
"bom.ini"
"resourcefile.ini"
"resourcefile2.ini"
"resourcefile3.ini"
- "resourcefile4.ini"
- "resourcefile5.ini"
"resourcefile6.plist"
"withcomments.ini"
"float.ini"
+ "qt5settings.ini"
+ "utf8settings.ini"
)
-qt_internal_add_resource(tst_qsettings "qsettings"
- PREFIX
- "/"
- FILES
- ${qsettings_resource_files}
+qt_internal_add_test(tst_qsettings
+ SOURCES
+ tst_qsettings.cpp
+ INCLUDE_DIRECTORIES
+ ../../kernel/qmetatype
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ TESTDATA ${qsettings_resource_files}
+ BUILTIN_TESTDATA
)
@@ -41,11 +41,11 @@ qt_internal_add_resource(tst_qsettings "qsettings"
#####################################################################
qt_internal_extend_target(tst_qsettings CONDITION MSVC
- PUBLIC_LIBRARIES
+ LIBRARIES
advapi32
)
qt_internal_extend_target(tst_qsettings CONDITION APPLE
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWCoreFoundation}
)
diff --git a/tests/auto/corelib/io/qsettings/qt5settings.ini b/tests/auto/corelib/io/qsettings/qt5settings.ini
new file mode 100644
index 0000000000..59239d29f3
--- /dev/null
+++ b/tests/auto/corelib/io/qsettings/qt5settings.ini
@@ -0,0 +1,11 @@
+[General]
+.%2C%27%25U%U0430%U0431%U0432%U0433%22%09=".,'%!@#$"
+%U265F=\x2658\x265a
+%UD83C%UDF0D=\xd83c\xdf10
+
+[Test]
+BAR=BAR
+B%C4R=B\xc4R
+OST=OST
+%D6SE=\xd6SE
+%U042D%U0442%U043E\%U0442%U0435%U0441%U0442=\x42d\x442\x43e \x442\x435\x441\x442
diff --git a/tests/auto/corelib/io/qsettings/resourcefile4.ini b/tests/auto/corelib/io/qsettings/resourcefile4.ini
deleted file mode 100644
index 09c21b1591..0000000000
--- a/tests/auto/corelib/io/qsettings/resourcefile4.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[Fa%E7ade]
-QU%C9BEC=Façade/QUÉBEC
diff --git a/tests/auto/corelib/io/qsettings/resourcefile5.ini b/tests/auto/corelib/io/qsettings/resourcefile5.ini
deleted file mode 100644
index d2d2103560..0000000000
--- a/tests/auto/corelib/io/qsettings/resourcefile5.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-[Fa%E7ade]
-QU%C9BEC=Façade/QUÉBEC
diff --git a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
index 48087b6a65..f4d7f076ef 100644
--- a/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
+++ b/tests/auto/corelib/io/qsettings/tst_qsettings.cpp
@@ -1,52 +1,23 @@
-/****************************************************************************
-**
-** 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/QSettings>
#include <private/qsettings_p.h>
+
+#include "tst_qmetatype_common.h"
+
#include <QtCore/QCoreApplication>
-#include <QtCore/QDateTime>
-#include <QtCore/QtGlobal>
-#include <QtCore/QMetaType>
-#include <QtCore/QString>
#include <QtCore/QDir>
+#include <QtCore/QEventLoop>
+#include <QtCore/QtGlobal>
#include <QtCore/QThread>
#include <QtCore/QSysInfo>
#if QT_CONFIG(shortcut)
# include <QtGui/QKeySequence>
#endif
-#include <QtCore>
-#include <QtGui>
-#include "tst_qmetatype_common.h"
-
#include <cctype>
#include <stdlib.h>
#if defined(Q_OS_WIN) && defined(Q_CC_GNU)
@@ -71,6 +42,13 @@
#include "qplatformdefs.h"
#endif
+#if defined(Q_OS_WASM)
+#include <QtCore/private/qstdweb_p.h>
+
+#include "emscripten/threading.h"
+#include "emscripten/val.h"
+#endif
+
Q_DECLARE_METATYPE(QSettings::Format)
#ifndef QSETTINGS_P_H_VERSION
@@ -108,6 +86,20 @@ static inline bool canWriteNativeSystemSettings()
static const char insufficientPermissionSkipMessage[] = "Insufficient permissions for this test.";
+static void populateWithFormats()
+{
+ QTest::addColumn<QSettings::Format>("format");
+
+ QTest::newRow("native") << QSettings::NativeFormat;
+#if defined(Q_OS_WASM)
+ if (qstdweb::haveJspi())
+ QTest::newRow("idb") << QSettings::WebIndexedDBFormat;
+#endif // defined(Q_OS_WASM)
+ QTest::newRow("ini") << QSettings::IniFormat;
+ QTest::newRow("custom1") << QSettings::CustomFormat1;
+ QTest::newRow("custom2") << QSettings::CustomFormat2;
+}
+
class tst_QSettings : public QObject
{
Q_OBJECT
@@ -120,8 +112,11 @@ public slots:
void cleanup() { cleanupTestFiles(); }
private slots:
void getSetCheck();
- void ctor_data();
+ void ctor_data() { populateWithFormats(); }
void ctor();
+#ifdef Q_OS_WASM
+ void idb();
+#endif
void beginGroup();
void setValue();
void remove();
@@ -132,16 +127,16 @@ private slots:
void syncAlternateDataStream();
#endif
void setFallbacksEnabled();
- void setFallbacksEnabled_data();
- void fromFile_data();
+ void setFallbacksEnabled_data() { populateWithFormats(); }
+ void fromFile_data() { populateWithFormats(); }
void fromFile();
- void testArrays_data();
+ void testArrays_data() { populateWithFormats(); }
void testArrays();
- void testCaseSensitivity_data();
+ void testCaseSensitivity_data() { populateWithFormats(); }
void testCaseSensitivity();
void testErrorHandling_data();
void testErrorHandling();
- void testChildKeysAndGroups_data();
+ void testChildKeysAndGroups_data() { populateWithFormats(); }
void testChildKeysAndGroups();
void testUpdateRequestEvent();
void testThreadSafety();
@@ -151,10 +146,10 @@ private slots:
void testRegistryShortRootNames();
void testRegistry32And64Bit();
void trailingWhitespace();
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
void fileName();
#endif
- void isWritable_data();
+ void isWritable_data() { populateWithFormats(); }
void isWritable();
void registerFormat();
void setPath();
@@ -168,23 +163,23 @@ private slots:
#endif
#ifdef QT_BUILD_INTERNAL
- void allKeys_data();
+ void allKeys_data() { populateWithFormats(); }
void allKeys();
- void childGroups_data();
+ void childGroups_data() { populateWithFormats(); }
void childGroups();
- void childKeys_data();
+ void childKeys_data() { populateWithFormats(); }
void childKeys();
void testIniParsing_data();
void testIniParsing();
void testEscapes();
void testNormalizedKey_data();
void testNormalizedKey();
- void testVariantTypes_data();
+ void testVariantTypes_data() { populateWithFormats(); }
void testVariantTypes();
void testMetaTypes_data();
void testMetaTypes();
#endif
- void rainersSyncBugOnMac_data();
+ void rainersSyncBugOnMac_data() { populateWithFormats(); }
void rainersSyncBugOnMac();
void recursionBug();
@@ -198,6 +193,10 @@ private slots:
void floatAsQVariant();
void testXdg();
+
+ void testReadKeys_data();
+ void testReadKeys();
+
private:
void cleanupTestFiles();
@@ -280,16 +279,6 @@ static bool writeCustom3File(QIODevice &device, const QSettings::SettingsMap &ma
return true;
}
-static void populateWithFormats()
-{
- QTest::addColumn<QSettings::Format>("format");
-
- QTest::newRow("native") << QSettings::NativeFormat;
- QTest::newRow("ini") << QSettings::IniFormat;
- QTest::newRow("custom1") << QSettings::CustomFormat1;
- QTest::newRow("custom2") << QSettings::CustomFormat2;
-}
-
tst_QSettings::tst_QSettings()
: m_canWriteNativeSystemSettings(canWriteNativeSystemSettings())
{
@@ -349,6 +338,32 @@ void tst_QSettings::cleanupTestFiles()
QSettings(QSettings::UserScope, "other.software.org").clear();
QSettings(QSettings::SystemScope, "other.software.org").clear();
#endif
+#if defined(Q_OS_WASM)
+ emscripten::val::global("window")["localStorage"].call<void>("clear");
+ if (qstdweb::haveJspi()) {
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "software.org",
+ "KillerAPP")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope, "software.org",
+ "KillerAPP")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "other.software.org",
+ "KillerAPP")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope,
+ "other.software.org", "KillerAPP")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "software.org")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope, "software.org")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::UserScope, "other.software.org")
+ .clear();
+ QSettings(QSettings::Format::WebIndexedDBFormat, QSettings::SystemScope,
+ "other.software.org")
+ .clear();
+ }
+#endif
const QString foo(QLatin1String("foo"));
@@ -361,11 +376,6 @@ void tst_QSettings::cleanupTestFiles()
Test the constructors and the assignment operator.
*/
-void tst_QSettings::ctor_data()
-{
- populateWithFormats();
-}
-
void tst_QSettings::ctor()
{
QFETCH(QSettings::Format, format);
@@ -528,10 +538,10 @@ void tst_QSettings::ctor()
QSettings settings5(format, QSettings::UserScope, "SoftWare.ORG", "killerApp");
bool caseSensitive = true;
-#if defined(Q_OS_MAC)
+#if defined(Q_OS_DARWIN)
if (format == QSettings::NativeFormat) {
// more details in QMacSettingsPrivate::QMacSettingsPrivate(), organization was comify()-ed
- caseSensitive = settings5.fileName().contains("SoftWare.ORG");;
+ caseSensitive = settings5.fileName().contains("SoftWare.ORG");
} else {
caseSensitive = pathconf(settings5.fileName().toLatin1().constData(), _PC_CASE_SENSITIVE);
}
@@ -581,7 +591,7 @@ void tst_QSettings::ctor()
QCOMPARE(settings1.value("alpha/beta/geometry/width").toInt(), 3);
QCOMPARE(settings1.value("alpha/beta/geometry/height").toInt(), 4);
QCOMPARE(settings1.value("alpha/gamma/splitter").toInt(), 5);
- QCOMPARE(settings1.allKeys().count(), 6);
+ QCOMPARE(settings1.allKeys().size(), 6);
QCOMPARE(settings2.value("alpha/beta/geometry").toInt(), -7);
QCOMPARE(settings2.value("alpha/beta/geometry/x").toInt(), 1);
@@ -589,7 +599,7 @@ void tst_QSettings::ctor()
QCOMPARE(settings2.value("alpha/beta/geometry/width").toInt(), 3);
QCOMPARE(settings2.value("alpha/beta/geometry/height").toInt(), 4);
QCOMPARE(settings2.value("alpha/gamma/splitter").toInt(), 5);
- QCOMPARE(settings2.allKeys().count(), 6);
+ QCOMPARE(settings2.allKeys().size(), 6);
}
{
@@ -600,7 +610,7 @@ void tst_QSettings::ctor()
QCOMPARE(settings1.value("alpha/beta/geometry/width").toInt(), 3);
QCOMPARE(settings1.value("alpha/beta/geometry/height").toInt(), 4);
QCOMPARE(settings1.value("alpha/gamma/splitter").toInt(), 5);
- QCOMPARE(settings1.allKeys().count(), 6);
+ QCOMPARE(settings1.allKeys().size(), 6);
}
{
@@ -609,7 +619,7 @@ void tst_QSettings::ctor()
QCoreApplication::instance()->setOrganizationName("");
QCoreApplication::instance()->setApplicationName("");
QSettings settings;
-#if defined(Q_OS_MAC)
+#if defined(Q_OS_DARWIN)
QEXPECT_FAIL("native", "Default settings on Mac are valid, despite organization domain, name, and app name being null", Continue);
#endif
QCOMPARE(settings.status(), QSettings::AccessError);
@@ -624,7 +634,7 @@ void tst_QSettings::ctor()
}
QSettings settings(format, QSettings::UserScope, "", "");
-#if defined(Q_OS_MAC)
+#if defined(Q_OS_DARWIN)
QEXPECT_FAIL("native", "Default settings on Mac are valid, despite organization domain, name, and app name being null", Continue);
#endif
QCOMPARE(settings.status(), QSettings::AccessError);
@@ -649,6 +659,50 @@ void tst_QSettings::ctor()
}
}
+#if defined(Q_OS_WASM)
+void tst_QSettings::idb()
+{
+ if (!qstdweb::haveJspi())
+ QSKIP("JSPI needed for IndexedDB format");
+
+ QString systemScopeOrganizationWideFile;
+ {
+ QSettings settingsUserScopeAppSpecific(QSettings::Format::WebIndexedDBFormat,
+ QSettings::UserScope, "software.org", "KillerAPP");
+ QSettings settingsUserScopeOrganizationWide(QSettings::Format::WebIndexedDBFormat,
+ QSettings::UserScope, "software.org");
+ QSettings settingsSystemScopeAppSpecific(QSettings::Format::WebIndexedDBFormat,
+ QSettings::SystemScope, "software.org",
+ "KillerAPP");
+ QSettings settingsSystemScopeOrganizationWide(QSettings::Format::WebIndexedDBFormat,
+ QSettings::SystemScope, "software.org");
+
+ settingsSystemScopeOrganizationWide.setValue("testKey", 1);
+ systemScopeOrganizationWideFile = settingsSystemScopeOrganizationWide.fileName();
+ }
+
+ // Emscripten's memfs has a bug that makes a file appear twice in the hashmap.
+ while (QFile::exists(systemScopeOrganizationWideFile)) {
+ Q_ASSERT(QFile::remove(systemScopeOrganizationWideFile));
+ }
+
+ QEventLoop loop;
+ QTimer timer;
+ timer.setInterval(1);
+
+ connect(&timer, &QTimer::timeout, [&loop]() { loop.quit(); });
+ timer.start();
+
+ loop.exec();
+ {
+ QSettings settingsUserScopeAppSpecific(QSettings::Format::WebIndexedDBFormat,
+ QSettings::UserScope, "software.org", "KillerAPP");
+
+ QCOMPARE(settingsUserScopeAppSpecific.value("testKey").toInt(), 1);
+ }
+}
+#endif // Q_OS_WASM
+
void tst_QSettings::testByteArray_data()
{
QTest::addColumn<QByteArray>("data");
@@ -955,7 +1009,7 @@ void tst_QSettings::testIniParsing()
if ( settings.status() == QSettings::NoError ) { // else no point proceeding
QVariant v = settings.value(key);
if (expect.isValid())
- QVERIFY(v.canConvert(expect.type()));
+ QVERIFY(v.canConvert(expect.metaType()));
// check some types so as to give prettier error messages
if ( v.typeId() == QMetaType::QString ) {
QCOMPARE(v.toString(), expect.toString());
@@ -1183,7 +1237,7 @@ template<int MetaTypeId>
static void testMetaTypesHelper(QSettings::Format format)
{
typedef typename MetaEnumToType<MetaTypeId>::Type Type;
- const char *key = QMetaType::typeName(MetaTypeId);
+ const char *key = QMetaType(MetaTypeId).name();
Type *value = TestValueFactory<MetaTypeId>::create();
QVariant inputVariant = QVariant::fromValue(*value);
@@ -1202,8 +1256,8 @@ static void testMetaTypesHelper(QSettings::Format format)
QSettings settings(format, scope, organization, applicationName);
QVariant outputVariant = settings.value(key);
if (MetaTypeId != QMetaType::QVariant)
- QVERIFY(outputVariant.canConvert(MetaTypeId));
- if (outputVariant.type() != inputVariant.type())
+ QVERIFY(outputVariant.canConvert(QMetaType(MetaTypeId)));
+ if (outputVariant.typeId() != inputVariant.typeId())
qWarning() << "type mismatch between" << inputVariant << "and" << outputVariant;
QCOMPARE(qvariant_cast<Type >(outputVariant), *value);
}
@@ -1242,7 +1296,7 @@ void tst_QSettings::testMetaTypes_data()
#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType) \
{ \
const char *formatName = QMetaEnum::fromType<QSettings::Format>().valueToKey(formats[i]); \
- const char *typeName = QMetaType::typeName(QMetaType::MetaTypeName); \
+ const char *typeName = QMetaType(QMetaType::MetaTypeName).name(); \
QTest::newRow(QString("%1:%2").arg(formatName).arg(typeName).toLatin1().constData()) \
<< QSettings::Format(formats[i]) << int(QMetaType::MetaTypeName); \
}
@@ -1277,106 +1331,102 @@ FOR_EACH_CORE_METATYPE(RETURN_CREATE_FUNCTION)
TypeTestFunctionGetter::get(type)(format);
}
-
-void tst_QSettings::testVariantTypes_data()
-{
- populateWithFormats();
-}
#endif
#ifdef QT_BUILD_INTERNAL
void tst_QSettings::testVariantTypes()
{
-#define testVal(key, val, tp, rtype) \
- { \
- QSettings settings1(format, QSettings::UserScope, "software.org", "KillerAPP"); \
- settings1.setValue(key, QVariant::fromValue(val)); \
- } \
- QConfFile::clearCache(); \
- { \
- QSettings settings2(format, QSettings::UserScope, "software.org", "KillerAPP"); \
- QVariant v = settings2.value(key); \
- QVERIFY(qvariant_cast<tp >(v) == val); \
- QVERIFY(v.type() == QVariant::rtype); \
+ QFETCH(QSettings::Format, format);
+
+ {
+ QSettings settings(format, QSettings::UserScope, "software.org", "KillerAPP");
+ QVERIFY(!settings.contains("empty"));
+ QCOMPARE(settings.value("empty"), QVariant());
+
+ settings.setValue("empty", QVariant());
+ QVERIFY(settings.contains("empty"));
+ QCOMPARE(settings.value("empty"), QVariant());
+
+ settings.setValue("empty", QVariant(1));
+ QVERIFY(settings.contains("empty"));
+ QCOMPARE(settings.value("empty"), QVariant(1));
+
+ settings.setValue("empty", QVariant());
+ QVERIFY(settings.contains("empty"));
+ QCOMPARE(settings.value("empty"), QVariant());
+
+ settings.remove("empty");
+ QVERIFY(!settings.contains("empty"));
+ QCOMPARE(settings.value("empty"), QVariant());
}
- typedef QMap<QString, QVariant> TestVariantMap;
+ auto checker = [format](const char *key, auto value, QMetaType::Type expected) {
+ {
+ QSettings settings(format, QSettings::UserScope, "software.org", "KillerAPP");
+ settings.setValue(key, QVariant::fromValue(value));
+ }
+ QConfFile::clearCache();
+ {
+ QSettings settings(format, QSettings::UserScope, "software.org", "KillerAPP");
+ QVariant actual = settings.value(key);
+ QCOMPARE(actual.metaType().id(), expected);
+ QCOMPARE(qvariant_cast<decltype(value)>(actual), value);
+ }
+ };
+#define testValue(key, supplied, expected) do { \
+ checker(key, supplied, QMetaType::expected); \
+ if (QTest::currentTestFailed()) \
+ return; \
+ } while (0)
- QFETCH(QSettings::Format, format);
+ typedef QMap<QString, QVariant> TestVariantMap;
TestVariantMap m2;
m2.insert("ene", "due");
m2.insert("rike", "fake");
m2.insert("borba", "dorba");
- testVal("key2", m2, TestVariantMap, Map);
-
- QStringList l2;
+ testValue("customMap", m2, QVariantMap);
- l2 << "ene" << "due" << "@Point(1 2)" << "@fake";
- testVal("key3", l2, QStringList, StringList);
+ QStringList l2 { "ene", "due", "@Point(1 2)", "@fake" };
+ testValue("stringsAt", l2, QStringList);
- l2.clear();
- l2 << "ene" << "due" << "rike" << "fake";
- testVal("key3", l2, QStringList, StringList);
+ l2 = { "ene", "due", "rike", "fake" };
+ testValue("strings", l2, QStringList);
- QList<QVariant> l3;
QDate date = QDate::currentDate();
QTime time = QTime::currentTime();
- l3 << QString("ene") << 10 << QVariant::fromValue(QColor(1, 2, 3)) << QVariant(QRect(1, 2, 3, 4))
- << QVariant(QSize(4, 56)) << QVariant(QPoint(4, 2)) << true << false << date << time;
- testVal("key3", l3, QVariantList, List);
-
- testVal("key4", QString("hello"), QString, String);
- testVal("key5", QColor(1, 2, 3), QColor, Color);
- testVal("key6", QRect(1, 2, 3, 4), QRect, Rect);
- testVal("key7", QSize(4, 56), QSize, Size);
- testVal("key8", QPoint(4, 2), QPoint, Point);
- testVal("key10", date, QDate, Date);
- testVal("key11", time, QTime, Time);
- testVal("key12", QByteArray("foo bar"), QByteArray, ByteArray);
-
- {
- QSettings settings(format, QSettings::UserScope, "software.org", "KillerAPP");
- QVERIFY(!settings.contains("key99"));
- QCOMPARE(settings.value("key99"), QVariant());
+ QList<QVariant> l3 { QString("ene"), 10, QVariant::fromValue(QColor(1, 2, 3)),
+ QVariant(QRect(1, 2, 3, 4)), QVariant(QSize(4, 56)), QVariant(QPoint(4, 2)),
+ true, false, date, time };
+ testValue("mixedList", l3, QVariantList);
+
+ testValue("string", QString("hello"), QString);
+ testValue("color", QColor(1, 2, 3), QColor);
+ testValue("rect", QRect(1, 2, 3, 4), QRect);
+ testValue("size", QSize(4, 56), QSize);
+ testValue("point", QPoint(4, 2), QPoint);
+ testValue("date", date, QDate);
+ testValue("time", time, QTime);
+ testValue("byteArray", QByteArray("foo bar"), QByteArray);
+
+ QList<QVariant> l4 { QVariant(m2), QVariant(l2), QVariant(l3) };
+ testValue("collectList", l4, QVariantList);
- settings.setValue("key99", QVariant());
- QVERIFY(settings.contains("key99"));
- QCOMPARE(settings.value("key99"), QVariant());
-
- settings.setValue("key99", QVariant(1));
- QVERIFY(settings.contains("key99"));
- QCOMPARE(settings.value("key99"), QVariant(1));
-
- settings.setValue("key99", QVariant());
- QVERIFY(settings.contains("key99"));
- QCOMPARE(settings.value("key99"), QVariant());
-
- settings.remove("key99");
- QVERIFY(!settings.contains("key99"));
- QCOMPARE(settings.value("key99"), QVariant());
- }
-
- QList<QVariant> l4;
- l4 << QVariant(m2) << QVariant(l2) << QVariant(l3);
- testVal("key13", l4, QVariantList, List);
QDateTime dt = QDateTime::currentDateTime();
- dt.setOffsetFromUtc(3600);
- testVal("key14", dt, QDateTime, DateTime);
+ dt.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(3600));
+ testValue("dateTime", dt, QDateTime);
#if QT_CONFIG(shortcut)
// We store key sequences as strings instead of binary variant blob, for improved
// readability in the resulting format.
- if (format >= QSettings::InvalidFormat) {
- testVal("keysequence", QKeySequence(Qt::ControlModifier + Qt::Key_F1), QKeySequence, KeySequence);
- } else {
- testVal("keysequence",
- QKeySequence(Qt::ControlModifier + Qt::Key_F1).toString(QKeySequence::NativeText),
- QString, String);
- }
+ QKeySequence seq(Qt::ControlModifier | Qt::Key_F1);
+ if (format >= QSettings::InvalidFormat)
+ testValue("keySequence", seq, QKeySequence);
+ else
+ testValue("keySequence", seq.toString(QKeySequence::NativeText), QString);
#endif // QT_CONFIG(shortcut)
-#undef testVal
+#undef testValue
}
#endif
@@ -1766,12 +1816,12 @@ void tst_QSettings::sync()
QCOMPARE(settings2.value("moo/beta/geometry/width").toInt(), 3);
QCOMPARE(settings2.value("moo/beta/geometry/height").toInt(), 4);
QCOMPARE(settings2.value("moo/gamma/splitter").toInt(), 5);
- QCOMPARE(settings2.allKeys().count(), 11);
+ QCOMPARE(settings2.allKeys().size(), 11);
// Now, software.org.ini no longer exists, this is same as another app
// clearing all settings.
settings1.sync();
- QCOMPARE(settings1.allKeys().count(), 0);
+ QCOMPARE(settings1.allKeys().size(), 0);
// Now "some other app" will change software.org.ini
QVERIFY(QFile::rename((userConfDir + "other.software.org.ini").toLatin1(),
@@ -1789,7 +1839,7 @@ void tst_QSettings::sync()
QCOMPARE(settings1.value("moo/beta/geometry/width").toInt(), 3);
QCOMPARE(settings1.value("moo/beta/geometry/height").toInt(), 4);
QCOMPARE(settings1.value("moo/gamma/splitter").toInt(), 5);
- QCOMPARE(settings1.allKeys().count(), 11);
+ QCOMPARE(settings1.allKeys().size(), 11);
}
void tst_QSettings::syncNonWriteableDir()
@@ -1864,11 +1914,6 @@ void tst_QSettings::syncAlternateDataStream()
}
#endif
-void tst_QSettings::setFallbacksEnabled_data()
-{
- populateWithFormats();
-}
-
void tst_QSettings::setFallbacksEnabled()
{
QFETCH(QSettings::Format, format);
@@ -1953,11 +1998,6 @@ void tst_QSettings::setFallbacksEnabled()
QVERIFY(!settings1.contains("key 5"));
}
-void tst_QSettings::testChildKeysAndGroups_data()
-{
- populateWithFormats();
-}
-
void tst_QSettings::testChildKeysAndGroups()
{
QFETCH(QSettings::Format, format);
@@ -2018,6 +2058,14 @@ void tst_QSettings::testChildKeysAndGroups()
l.sort();
QCOMPARE(l, QStringList() << "bar" << "foo");
}
+
+#if defined(Q_OS_WASM)
+ // WebIndexedDBFormat does not use the cached settings file on creation, but instead always uses
+ // the file from the indexed DB anew.
+ if (format == QSettings::Format::WebIndexedDBFormat)
+ settings1.sync();
+#endif
+
{
QSettings settings3(format, QSettings::UserScope, "software.org", "application");
settings3.setFallbacksEnabled(false);
@@ -2095,6 +2143,16 @@ void SettingsThread::run()
void tst_QSettings::testThreadSafety()
{
+#if !QT_CONFIG(thread)
+ QSKIP("This test requires threads to be enabled.");
+#endif // !QT_CONFIG(thread)
+#if defined(Q_OS_WASM)
+ if (!qstdweb::haveJspi())
+ QSKIP("Test needs jspi on WASM. Calls are proxied to the main thread from SettingsThreads, "
+ "which necessitates the use of an event loop to yield to the main loop. Event loops "
+ "require jspi.");
+#endif
+
SettingsThread threads[NumThreads];
int i, j;
@@ -2102,6 +2160,19 @@ void tst_QSettings::testThreadSafety()
for (i = 0; i < NumThreads; ++i)
threads[i].start(i + 1);
+
+#if defined(Q_OS_WASM) && QT_CONFIG(thread)
+ QEventLoop loop;
+ int remaining = NumThreads;
+ for (int i = 0; i < NumThreads; ++i) {
+ QObject::connect(&threads[i], &QThread::finished, this, [&remaining, &loop]() {
+ if (!--remaining)
+ loop.quit();
+ });
+ }
+ loop.exec();
+#endif // defined(Q_OS_WASM) && QT_CONFIG(thread)
+
for (i = 0; i < NumThreads; ++i)
threads[i].wait();
@@ -2156,20 +2227,17 @@ void tst_QSettings::testNormalizedKey()
inKey.detach();
- QString result = QSettingsPrivate::normalizedKey(inKey);
- QCOMPARE(result, outKey);
-
- /*
- If the key is already normalized, we verify that outKey is
- just a shallow copy of the input string. This is an important
- optimization that shouldn't be removed accidentally.
- */
- if (inKey == outKey) {
- QVERIFY(!result.isDetached());
- } else {
- if (!result.isEmpty()) {
- QVERIFY(result.isDetached());
- }
+ {
+ auto result = QSettingsPrivate::normalizedKey(inKey);
+ QCOMPARE(result, outKey);
+ }
+ {
+ auto result = QSettingsPrivate::normalizedKey(QUtf8StringView{inKey.toUtf8()});
+ QCOMPARE(result, outKey);
+ }
+ {
+ auto result = QSettingsPrivate::normalizedKey(QLatin1String{inKey.toLatin1()});
+ QCOMPARE(result, outKey);
}
}
#endif
@@ -2355,11 +2423,6 @@ void tst_QSettings::trailingWhitespace()
}
}
-void tst_QSettings::fromFile_data()
-{
- populateWithFormats();
-}
-
void tst_QSettings::fromFile()
{
QFETCH(QSettings::Format, format);
@@ -2381,6 +2444,12 @@ void tst_QSettings::fromFile()
QStringList strList = QStringList() << "hope" << "destiny" << "chastity";
+#if !defined(Q_OS_WIN)
+ auto deleteFile = QScopeGuard([path, oldCur]() {
+ QFile::remove(path);
+ QDir::setCurrent(oldCur);
+ });
+#endif // !defined(Q_OS_WIN)
{
QSettings settings1(path, format);
QVERIFY(settings1.allKeys().isEmpty());
@@ -2416,8 +2485,6 @@ void tst_QSettings::fromFile()
QCOMPARE(settings1.value("gamma/foo.bar").toInt(), 4);
QCOMPARE(settings1.allKeys().size(), 3);
}
-
- QDir::setCurrent(oldCur);
}
static bool containsSubList(QStringList mom, QStringList son)
@@ -2429,11 +2496,6 @@ static bool containsSubList(QStringList mom, QStringList son)
return true;
}
-void tst_QSettings::testArrays_data()
-{
- populateWithFormats();
-}
-
/*
Tests beginReadArray(), beginWriteArray(), endArray(), and
setArrayIndex().
@@ -2499,17 +2561,17 @@ void tst_QSettings::testArrays()
QCOMPARE(settings1.value("ene").toInt(), 2);
QCOMPARE(settings1.value("due").toInt(), 3);
QCOMPARE(settings1.value("rike").toInt(), 4);
- QCOMPARE(settings1.allKeys().count(), 3);
+ QCOMPARE(settings1.allKeys().size(), 3);
settings1.setArrayIndex(1);
QCOMPARE(settings1.value("ene").toInt(), 5);
QCOMPARE(settings1.value("due").toInt(), 6);
QCOMPARE(settings1.value("rike").toInt(), 7);
- QCOMPARE(settings1.allKeys().count(), 3);
+ QCOMPARE(settings1.allKeys().size(), 3);
settings1.setArrayIndex(2);
QCOMPARE(settings1.value("ene").toInt(), 8);
QCOMPARE(settings1.value("due").toInt(), 9);
QCOMPARE(settings1.value("rike").toInt(), 10);
- QCOMPARE(settings1.allKeys().count(), 3);
+ QCOMPARE(settings1.allKeys().size(), 3);
settings1.endArray();
settings1.endGroup();
@@ -2559,17 +2621,17 @@ void tst_QSettings::testArrays()
QCOMPARE(settings1.value("ene").toInt(), 2);
QCOMPARE(settings1.value("due").toInt(), 3);
QCOMPARE(settings1.value("rike").toInt(), 4);
- QCOMPARE(settings1.allKeys().count(), 3);
+ QCOMPARE(settings1.allKeys().size(), 3);
settings1.setArrayIndex(1);
QCOMPARE(settings1.value("ene").toInt(), 5);
QCOMPARE(settings1.value("due").toInt(), 6);
QCOMPARE(settings1.value("rike").toInt(), 7);
- QCOMPARE(settings1.allKeys().count(), 3);
+ QCOMPARE(settings1.allKeys().size(), 3);
settings1.setArrayIndex(2);
QCOMPARE(settings1.value("ene").toInt(), 8);
QCOMPARE(settings1.value("due").toInt(), 9);
QCOMPARE(settings1.value("rike").toInt(), 10);
- QCOMPARE(settings1.allKeys().count(), 3);
+ QCOMPARE(settings1.allKeys().size(), 3);
settings1.endArray();
settings1.endGroup();
@@ -2714,7 +2776,7 @@ static QByteArray iniEscapedKey(const QString &str)
static QString iniUnescapedKey(const QByteArray &ba)
{
QString result;
- QSettingsPrivate::iniUnescapedKey(ba, 0, ba.size(), result);
+ QSettingsPrivate::iniUnescapedKey(ba, result);
return result;
}
@@ -2729,7 +2791,7 @@ static QStringList iniUnescapedStringList(const QByteArray &ba)
{
QStringList result;
QString str;
- bool isStringList = QSettingsPrivate::iniUnescapedStringList(ba, 0, ba.size(), str, result);
+ bool isStringList = QSettingsPrivate::iniUnescapedStringList(ba, str, result);
if (!isStringList)
result = QStringList(str);
return result;
@@ -2741,7 +2803,7 @@ QString escapeWeirdChars(const QString &s)
QString result;
bool escapeNextDigit = false;
- for (int i = 0; i < s.length(); ++i) {
+ for (int i = 0; i < s.size(); ++i) {
QChar c = s.at(i);
if (c.unicode() < ' ' || c.unicode() > '~'
|| (escapeNextDigit && c.unicode() >= '0' && c.unicode() <= 'f')) {
@@ -2881,11 +2943,6 @@ void tst_QSettings::testEscapes()
}
#endif
-void tst_QSettings::testCaseSensitivity_data()
-{
- populateWithFormats();
-}
-
void tst_QSettings::testCaseSensitivity()
{
QFETCH(QSettings::Format, format);
@@ -2965,7 +3022,7 @@ void tst_QSettings::testCaseSensitivity()
}
}
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
// Please write a fileName() test for the other platforms
void tst_QSettings::fileName()
{
@@ -3035,11 +3092,6 @@ void tst_QSettings::fileName()
}
#endif
-void tst_QSettings::isWritable_data()
-{
- populateWithFormats();
-}
-
void tst_QSettings::isWritable()
{
QFETCH(QSettings::Format, format);
@@ -3092,13 +3144,6 @@ void tst_QSettings::isWritable()
}
#ifdef QT_BUILD_INTERNAL
-void tst_QSettings::childGroups_data()
-{
- populateWithFormats();
-}
-#endif
-
-#ifdef QT_BUILD_INTERNAL
void tst_QSettings::childGroups()
{
QFETCH(QSettings::Format, format);
@@ -3168,13 +3213,6 @@ void tst_QSettings::childGroups()
#endif
#ifdef QT_BUILD_INTERNAL
-void tst_QSettings::childKeys_data()
-{
- populateWithFormats();
-}
-#endif
-
-#ifdef QT_BUILD_INTERNAL
void tst_QSettings::childKeys()
{
QFETCH(QSettings::Format, format);
@@ -3242,13 +3280,6 @@ void tst_QSettings::childKeys()
#endif
#ifdef QT_BUILD_INTERNAL
-void tst_QSettings::allKeys_data()
-{
- populateWithFormats();
-}
-#endif
-
-#ifdef QT_BUILD_INTERNAL
void tst_QSettings::allKeys()
{
QFETCH(QSettings::Format, format);
@@ -3399,7 +3430,7 @@ void tst_QSettings::setPath()
path checks that it has no bad side effects.
*/
for (int i = 0; i < 2; ++i) {
-#if !defined(Q_OS_WIN) && !defined(Q_OS_MAC)
+#if !defined(Q_OS_WIN) && !defined(Q_OS_DARWIN) && !defined(Q_OS_WASM)
TEST_PATH(i == 0, "conf", NativeFormat, UserScope, "alpha")
TEST_PATH(i == 0, "conf", NativeFormat, SystemScope, "beta")
#endif
@@ -3508,11 +3539,6 @@ void tst_QSettings::dontReorderIniKeysNeedlessly()
}
#endif
-void tst_QSettings::rainersSyncBugOnMac_data()
-{
- ctor_data();
-}
-
void tst_QSettings::rainersSyncBugOnMac()
{
QFETCH(QSettings::Format, format);
@@ -3521,6 +3547,12 @@ void tst_QSettings::rainersSyncBugOnMac()
if (format == QSettings::NativeFormat)
QSKIP("Apple OSes do not support direct reads from and writes to .plist files, due to caching and background syncing. See QTBUG-34899.");
#endif
+#if defined(Q_OS_WASM)
+ if (format == QSettings::NativeFormat)
+ QSKIP("WASM's localStorage backend recognizes no concept of file");
+ if (format == QSettings::WebIndexedDBFormat)
+ QSKIP("WASM's indexedDB backend uses the virtual FS file only as a backing store");
+#endif // Q_OS_WASM
QString fileName;
@@ -3544,7 +3576,7 @@ void tst_QSettings::rainersSyncBugOnMac()
void tst_QSettings::recursionBug()
{
QPixmap pix(10,10);
- pix.fill("blue");
+ pix.fill(Qt::blue);
{
QSettings settings(settingsPath("starrunner.ini"), QSettings::IniFormat);
@@ -3591,14 +3623,14 @@ void tst_QSettings::consistentRegistryStorage()
}
#endif
-#if defined(QT_BUILD_INTERNAL) && defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) && !defined(Q_OS_ANDROID) && !defined(QT_NO_STANDARDPATHS)
+#if defined(QT_BUILD_INTERNAL) && defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) && !defined(Q_OS_ANDROID) && !defined(Q_OS_WASM) && !defined(QT_NO_STANDARDPATHS)
QT_BEGIN_NAMESPACE
extern void clearDefaultPaths();
QT_END_NAMESPACE
#endif
void tst_QSettings::testXdg()
{
-#if defined(QT_BUILD_INTERNAL) && defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) && !defined(Q_OS_ANDROID) && !defined(QT_NO_STANDARDPATHS)
+#if defined(QT_BUILD_INTERNAL) && defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN) && !defined(Q_OS_ANDROID) && !defined(Q_OS_WASM) && !defined(QT_NO_STANDARDPATHS)
// Note: The XDG_CONFIG_DIRS test must be done before overriding the system path
// by QSettings::setPath/setSystemIniPath (used in cleanupTestFiles()).
clearDefaultPaths();
@@ -3663,5 +3695,39 @@ void tst_QSettings::testXdg()
#endif
}
+void tst_QSettings::testReadKeys_data()
+{
+ QTest::addColumn<QString>("filepath");
+
+ QTest::newRow("escaped") << ":/qt5settings.ini";
+ QTest::newRow("utf-8") << ":/utf8settings.ini";
+}
+
+void tst_QSettings::testReadKeys()
+{
+ QFETCH(QString, filepath);
+
+ QSettings settings(filepath, QSettings::IniFormat);
+ QCOMPARE(settings.status(), QSettings::NoError);
+
+ QVariantMap expectedValues;
+ expectedValues.insert("Test/BAR", "BAR");
+ expectedValues.insert("Test/OST", "OST");
+ expectedValues.insert("Test/B\xC3\x84R", "B\xC3\x84R"); // BÄR
+ expectedValues.insert("Test/\xC3\x96SE", "\xC3\x96SE"); // ÖSE
+ expectedValues.insert(
+ "Test/\xD0\xAD\xD1\x82\xD0\xBE/\xD1\x82\xD0\xB5\xD1\x81\xD1\x82", // Это/теÑÑ‚
+ "\xD0\xAD\xD1\x82\xD0\xBE \xD1\x82\xD0\xB5\xD1\x81\xD1\x82"); // Это теÑÑ‚
+ expectedValues.insert(".,'%U\xD0\xB0\xD0\xB1\xD0\xB2\xD0\xB3\"\t", ".,'%!@#$");
+ expectedValues.insert("\xE2\x99\x9F", "\xE2\x99\x98\xE2\x99\x9A"); // ♟︎ ♘♚
+ expectedValues.insert("\xF0\x9F\x8C\x8D", "\xF0\x9F\x8C\x90"); // 🌠ðŸŒ
+
+ QVariantMap readValues;
+ for (const auto &key : settings.allKeys())
+ readValues.insert(key, settings.value(key));
+
+ QCOMPARE(readValues, expectedValues);
+}
+
QTEST_MAIN(tst_QSettings)
#include "tst_qsettings.moc"
diff --git a/tests/auto/corelib/io/qsettings/utf8settings.ini b/tests/auto/corelib/io/qsettings/utf8settings.ini
new file mode 100644
index 0000000000..bac010254f
--- /dev/null
+++ b/tests/auto/corelib/io/qsettings/utf8settings.ini
@@ -0,0 +1,11 @@
+[General]
+.%2C%27%25Uабвг%22%09=".,'%!@#$"
+♟=♘♚
+ðŸŒ=ðŸŒ
+
+[Test]
+BAR=BAR
+BÄR=BÄR
+OST=OST
+ÖSE=ÖSE
+Это\теÑÑ‚=Это теÑÑ‚
diff --git a/tests/auto/corelib/io/qstandardpaths/CMakeLists.txt b/tests/auto/corelib/io/qstandardpaths/CMakeLists.txt
index f275b97efe..90bc0f3b70 100644
--- a/tests/auto/corelib/io/qstandardpaths/CMakeLists.txt
+++ b/tests/auto/corelib/io/qstandardpaths/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qstandardpaths.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstandardpaths Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstandardpaths LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "tst_qstandardpaths.cpp")
diff --git a/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp b/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp
index d722b374d9..4bb7042790 100644
--- a/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp
+++ b/tests/auto/corelib/io/qstandardpaths/tst_qstandardpaths.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2020 Intel Corporation.
-** 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.
+// Copyright (C) 2020 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qstandardpaths.h>
#include <QTest>
@@ -49,8 +24,54 @@
#define Q_XDG_PLATFORM
#endif
+using namespace Qt::StringLiterals;
+
// Update this when adding new enum values; update enumNames too
-static const int MaxStandardLocation = QStandardPaths::AppConfigLocation;
+static const int MaxStandardLocation = QStandardPaths::GenericStateLocation;
+
+static QString genericCacheLoc()
+{
+ return QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation);
+}
+static QString cacheLoc()
+{
+ return QStandardPaths::writableLocation(QStandardPaths::CacheLocation);
+}
+
+static QString genericStateLoc()
+{
+ return QStandardPaths::writableLocation(QStandardPaths::GenericStateLocation);
+}
+static QString stateLoc()
+{
+ return QStandardPaths::writableLocation(QStandardPaths::StateLocation);
+}
+
+static QString genericDataLoc()
+{
+ return QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
+}
+static QString appDataLoc()
+{
+ return QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
+}
+static QString appLocalDataLoc()
+{
+ return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation);
+}
+
+static QString genericConfigLoc()
+{
+ return QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
+}
+static QString configLoc()
+{
+ return QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
+}
+static QString appConfigLoc()
+{
+ return QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation);
+}
class tst_qstandardpaths : public QObject
{
@@ -59,6 +80,7 @@ class tst_qstandardpaths : public QObject
private slots:
void initTestCase();
void dump();
+ void init();
void testDefaultLocations();
void testCustomLocations();
void enableTestMode();
@@ -85,14 +107,17 @@ private:
qputenv("XDG_CONFIG_DIRS", QFile::encodeName(m_globalConfigDir));
m_localAppDir = m_localAppTempDir.path();
m_globalAppDir = m_globalAppTempDir.path();
+ m_stateDir = m_stateTempDir.path();
qputenv("XDG_DATA_HOME", QFile::encodeName(m_localAppDir));
qputenv("XDG_DATA_DIRS", QFile::encodeName(m_globalAppDir));
+ qputenv("XDG_STATE_HOME", QFile::encodeName(m_stateDir));
}
void setDefaultLocations() {
- qputenv("XDG_CONFIG_HOME", QByteArray());
- qputenv("XDG_CONFIG_DIRS", QByteArray());
- qputenv("XDG_DATA_HOME", QByteArray());
- qputenv("XDG_DATA_DIRS", QByteArray());
+ qputenv("XDG_CONFIG_HOME", nullptr);
+ qputenv("XDG_CONFIG_DIRS", nullptr);
+ qputenv("XDG_DATA_HOME", nullptr);
+ qputenv("XDG_DATA_DIRS", nullptr);
+ qputenv("XDG_STATE_HOME", nullptr);
}
#endif
@@ -107,6 +132,8 @@ private:
QTemporaryDir m_localAppTempDir;
QString m_globalAppDir;
QTemporaryDir m_globalAppTempDir;
+ QString m_stateDir;
+ QTemporaryDir m_stateTempDir;
};
static const char * const enumNames[MaxStandardLocation + 1 - int(QStandardPaths::DesktopLocation)] = {
@@ -128,7 +155,11 @@ static const char * const enumNames[MaxStandardLocation + 1 - int(QStandardPaths
"GenericCacheLocation",
"GenericConfigLocation",
"AppDataLocation",
- "AppConfigLocation"
+ "AppConfigLocation",
+ "PublicShareLocation",
+ "TemplatesLocation",
+ "StateLocation",
+ "GenericStateLocation"
};
void tst_qstandardpaths::initTestCase()
@@ -147,6 +178,7 @@ void tst_qstandardpaths::initTestCase()
QVERIFY2(m_globalConfigTempDir.isValid(), qPrintable(m_globalConfigTempDir.errorString()));
QVERIFY2(m_localAppTempDir.isValid(), qPrintable(m_localAppTempDir.errorString()));
QVERIFY2(m_globalAppTempDir.isValid(), qPrintable(m_globalAppTempDir.errorString()));
+ QVERIFY2(m_stateTempDir.isValid(), qPrintable(m_stateTempDir.errorString()));
}
void tst_qstandardpaths::dump()
@@ -163,25 +195,37 @@ void tst_qstandardpaths::dump()
}
}
+void tst_qstandardpaths::init()
+{
+ // Some unittests set a custom org/app names, restore the original ones
+ // before each unittest is run
+ static const QString org = QCoreApplication::organizationName();
+ static const QString app = QCoreApplication::applicationName();
+ QCoreApplication::setOrganizationName(org);
+ QCoreApplication::setApplicationName(app);
+}
+
void tst_qstandardpaths::testDefaultLocations()
{
#ifdef Q_XDG_PLATFORM
setDefaultLocations();
const QString expectedConfHome = QDir::homePath() + QString::fromLatin1("/.config");
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation), expectedConfHome);
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation), expectedConfHome);
+ QCOMPARE(configLoc(), expectedConfHome);
+ QCOMPARE(genericConfigLoc(), expectedConfHome);
const QStringList confDirs = QStandardPaths::standardLocations(QStandardPaths::ConfigLocation);
- QCOMPARE(confDirs.count(), 2);
+ QCOMPARE(confDirs.size(), 2);
QVERIFY(confDirs.contains(expectedConfHome));
QCOMPARE(QStandardPaths::standardLocations(QStandardPaths::GenericConfigLocation), confDirs);
const QStringList genericDataDirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
- QCOMPARE(genericDataDirs.count(), 3);
+ QCOMPARE(genericDataDirs.size(), 3);
const QString expectedDataHome = QDir::homePath() + QString::fromLatin1("/.local/share");
QCOMPARE(genericDataDirs.at(0), expectedDataHome);
QCOMPARE(genericDataDirs.at(1), QString::fromLatin1("/usr/local/share"));
QCOMPARE(genericDataDirs.at(2), QString::fromLatin1("/usr/share"));
+ const QString expectedGenericStateLocation = QDir::homePath() + QString::fromLatin1("/.local/state");
+ QCOMPARE(genericStateLoc(), expectedGenericStateLocation);
#endif
}
@@ -200,8 +244,8 @@ void tst_qstandardpaths::testCustomLocations()
setCustomLocations();
// test writableLocation()
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation), m_localConfigDir);
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation), m_localConfigDir);
+ QCOMPARE(configLoc(), m_localConfigDir);
+ QCOMPARE(genericConfigLoc(), m_localConfigDir);
// test locate()
const QString thisFileName = QString::fromLatin1("aFile");
@@ -233,37 +277,76 @@ void tst_qstandardpaths::enableTestMode()
setCustomLocations(); // for the global config dir
const QString qttestDir = QDir::homePath() + QLatin1String("/.qttest");
- // ConfigLocation
+ // *Config*Location
const QString configDir = qttestDir + QLatin1String("/config");
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::ConfigLocation), configDir);
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation), configDir);
+ QCOMPARE(configLoc(), configDir);
+ QCOMPARE(genericConfigLoc(), configDir);
const QStringList confDirs = QStandardPaths::standardLocations(QStandardPaths::ConfigLocation);
QCOMPARE(confDirs, QStringList() << configDir << m_globalConfigDir);
+ // AppConfigLocation should be "GenericConfigLocation/organization-name/app-name"
+ QCOMPARE(appConfigLoc(), configDir + "/tst_qstandardpaths"_L1);
- // GenericDataLocation
+ // *Data*Location
const QString dataDir = qttestDir + QLatin1String("/share");
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation), dataDir);
+ QCOMPARE(genericDataLoc(), dataDir);
const QStringList gdDirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation);
QCOMPARE(gdDirs, QStringList() << dataDir << m_globalAppDir);
+ // AppDataLocation/AppLocalDataLocation should be
+ // "GenericDataLocation/organization-name/app-name"
+ QCOMPARE(appDataLoc(), dataDir + "/tst_qstandardpaths"_L1);
+ QCOMPARE(appLocalDataLoc(), dataDir + "/tst_qstandardpaths"_L1);
- // GenericCacheLocation
+ // *CacheLocation
const QString cacheDir = qttestDir + QLatin1String("/cache");
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation), cacheDir);
+ QCOMPARE(genericCacheLoc(), cacheDir);
const QStringList cacheDirs = QStandardPaths::standardLocations(QStandardPaths::GenericCacheLocation);
QCOMPARE(cacheDirs, QStringList() << cacheDir);
+ // CacheLocation should be "GenericCacheLocation/organization-name/app-name"
+ QCOMPARE(cacheLoc(), cacheDir + "/tst_qstandardpaths"_L1);
+
+ // *StateLocation
+ const QString stateDir = qttestDir + QLatin1String("/state");
+ QCOMPARE(genericStateLoc(), stateDir);
+ const QStringList stateDirs = QStandardPaths::standardLocations(QStandardPaths::GenericStateLocation);
+ QCOMPARE(stateDirs, QStringList() << stateDir);
+ // StateLocation should be "GenericStateLocation/organization-name/app-name"
+ QCOMPARE(stateLoc(), stateDir + "/tst_qstandardpaths"_L1);
+
+ QCoreApplication::setOrganizationName("Qt");
+ QCOMPARE(appConfigLoc(), configDir + "/Qt/tst_qstandardpaths"_L1);
+ QCOMPARE(appDataLoc(), dataDir + "/Qt/tst_qstandardpaths"_L1);
+ QCOMPARE(appLocalDataLoc(), dataDir + "/Qt/tst_qstandardpaths"_L1);
+ QCOMPARE(cacheLoc(), cacheDir + "/Qt/tst_qstandardpaths"_L1);
+ QCOMPARE(stateLoc(), stateDir + "/Qt/tst_qstandardpaths"_L1);
+
+ QCoreApplication::setApplicationName("QtTest");
+ QCOMPARE(appConfigLoc(), configDir + "/Qt/QtTest"_L1);
+ QCOMPARE(appDataLoc(), dataDir + "/Qt/QtTest"_L1);
+ QCOMPARE(appLocalDataLoc(), dataDir + "/Qt/QtTest"_L1);
+ QCOMPARE(cacheLoc(), cacheDir + "/Qt/QtTest"_L1);
+ QCOMPARE(stateLoc(), stateDir + "/Qt/QtTest"_L1);
+
+ // Check these are unaffected by org/app names
+ QCOMPARE(genericConfigLoc(), configDir);
+ QCOMPARE(configLoc(), configDir);
+ QCOMPARE(genericDataLoc(), dataDir);
+ QCOMPARE(genericCacheLoc(), cacheDir);
+ QCOMPARE(genericStateLoc(), stateDir);
#endif
// On all platforms, we want to ensure that the writableLocation is different in test mode and real mode.
// Check this for locations where test programs typically write. Not desktop, download, music etc...
typedef QHash<QStandardPaths::StandardLocation, QString> LocationHash;
LocationHash testLocations;
- testLocations.insert(QStandardPaths::AppDataLocation, QStandardPaths::writableLocation(QStandardPaths::AppDataLocation));
- testLocations.insert(QStandardPaths::AppLocalDataLocation, QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation));
- testLocations.insert(QStandardPaths::GenericDataLocation, QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation));
- testLocations.insert(QStandardPaths::ConfigLocation, QStandardPaths::writableLocation(QStandardPaths::ConfigLocation));
- testLocations.insert(QStandardPaths::GenericConfigLocation, QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation));
- testLocations.insert(QStandardPaths::CacheLocation, QStandardPaths::writableLocation(QStandardPaths::CacheLocation));
- testLocations.insert(QStandardPaths::GenericCacheLocation, QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation));
+ testLocations.insert(QStandardPaths::AppDataLocation, appDataLoc());
+ testLocations.insert(QStandardPaths::AppLocalDataLocation, appLocalDataLoc());
+ testLocations.insert(QStandardPaths::GenericDataLocation, genericDataLoc());
+ testLocations.insert(QStandardPaths::ConfigLocation, configLoc());
+ testLocations.insert(QStandardPaths::GenericConfigLocation, genericConfigLoc());
+ testLocations.insert(QStandardPaths::CacheLocation, cacheLoc());
+ testLocations.insert(QStandardPaths::GenericCacheLocation, genericCacheLoc());
+ testLocations.insert(QStandardPaths::StateLocation, stateLoc());
+ testLocations.insert(QStandardPaths::GenericStateLocation, genericStateLoc());
// On Windows, what should "Program Files" become, in test mode?
//testLocations.insert(QStandardPaths::ApplicationsLocation, QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation));
@@ -285,7 +368,7 @@ void tst_qstandardpaths::testLocateAll()
#ifdef Q_XDG_PLATFORM
setCustomLocations();
const QStringList appsDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, "applications", QStandardPaths::LocateDirectory);
- QCOMPARE(appsDirs.count(), 0); // they don't exist yet
+ QCOMPARE(appsDirs.size(), 0); // they don't exist yet
const QStringList expectedAppsDirs = QStringList() << m_localAppDir + QLatin1String("/applications")
<< m_globalAppDir + QLatin1String("/applications");
QDir().mkdir(expectedAppsDirs.at(0));
@@ -313,28 +396,24 @@ void tst_qstandardpaths::testDataLocation()
// Android is an exception to this case, owing to the fact that
// applications are sandboxed.
#if !defined(Q_OS_ANDROID)
- const QString base = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation), base + "/tst_qstandardpaths");
+ const QString base = genericDataLoc();
+ QCOMPARE(appLocalDataLoc(), base + "/tst_qstandardpaths");
QCoreApplication::instance()->setOrganizationName("Qt");
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation), base + "/Qt/tst_qstandardpaths");
+ QCOMPARE(appLocalDataLoc(), base + "/Qt/tst_qstandardpaths");
QCoreApplication::instance()->setApplicationName("QtTest");
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation), base + "/Qt/QtTest");
+ QCOMPARE(appLocalDataLoc(), base + "/Qt/QtTest");
#endif
#ifdef Q_XDG_PLATFORM
setDefaultLocations();
const QString expectedAppDataDir = QDir::homePath() + QString::fromLatin1("/.local/share/Qt/QtTest");
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation), expectedAppDataDir);
+ QCOMPARE(appLocalDataLoc(), expectedAppDataDir);
const QStringList appDataDirs = QStandardPaths::standardLocations(QStandardPaths::AppLocalDataLocation);
- QCOMPARE(appDataDirs.count(), 3);
+ QCOMPARE(appDataDirs.size(), 3);
QCOMPARE(appDataDirs.at(0), expectedAppDataDir);
QCOMPARE(appDataDirs.at(1), QString::fromLatin1("/usr/local/share/Qt/QtTest"));
QCOMPARE(appDataDirs.at(2), QString::fromLatin1("/usr/share/Qt/QtTest"));
#endif
-
- // reset for other tests
- QCoreApplication::setOrganizationName(QString());
- QCoreApplication::setApplicationName(QString());
}
void tst_qstandardpaths::testAppConfigLocation()
@@ -342,15 +421,12 @@ void tst_qstandardpaths::testAppConfigLocation()
// On all platforms where applications are not sandboxed,
// AppConfigLocation should be GenericConfigLocation / organization name / app name
#if !defined(Q_OS_ANDROID)
- const QString base = QStandardPaths::writableLocation(QStandardPaths::GenericConfigLocation);
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation), base + "/tst_qstandardpaths");
+ const QString base = genericConfigLoc();
+ QCOMPARE(appConfigLoc(), base + "/tst_qstandardpaths");
QCoreApplication::setOrganizationName("Qt");
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation), base + "/Qt/tst_qstandardpaths");
+ QCOMPARE(appConfigLoc(), base + "/Qt/tst_qstandardpaths");
QCoreApplication::setApplicationName("QtTest");
- QCOMPARE(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation), base + "/Qt/QtTest");
- // reset for other tests
- QCoreApplication::setOrganizationName(QString());
- QCoreApplication::setApplicationName(QString());
+ QCOMPARE(appConfigLoc(), base + "/Qt/QtTest");
#endif
}
@@ -363,7 +439,7 @@ static inline QFileInfo findSh()
QByteArray pEnv = qgetenv("PATH");
const QLatin1Char pathSep(':');
const QStringList rawPaths = QString::fromLocal8Bit(pEnv.constData()).split(pathSep, Qt::SkipEmptyParts);
- foreach (const QString &path, rawPaths) {
+ for (const QString &path : rawPaths) {
if (QFile::exists(path + sh))
return QFileInfo(path + sh);
}
@@ -457,7 +533,7 @@ void tst_qstandardpaths::testFindExecutableLinkToDirectory()
QFile::remove(target);
}
-using RuntimeDirSetup = QString (*)(QDir &);
+using RuntimeDirSetup = std::optional<QString> (*)(QDir &);
Q_DECLARE_METATYPE(RuntimeDirSetup);
void tst_qstandardpaths::testRuntimeDirectory()
@@ -517,18 +593,18 @@ void tst_qstandardpaths::testCustomRuntimeDirectory_data()
QSKIP("Running this test as root doesn't make sense");
# endif
- addRow("environment:non-existing", [](QDir &d) {
+ addRow("environment:non-existing", [](QDir &d) -> std::optional<QString> {
return updateRuntimeDir(d.filePath("runtime"));
});
- addRow("environment:existing", [](QDir &d) {
+ addRow("environment:existing", [](QDir &d) -> std::optional<QString> {
QString p = d.filePath("runtime");
d.mkdir("runtime");
QFile::setPermissions(p, QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner);
return updateRuntimeDir(p);
});
- addRow("environment-to-existing-wrong-perm", [](QDir &d) {
+ addRow("environment-to-existing-wrong-perm", [](QDir &d) -> std::optional<QString> {
QString p = d.filePath("runtime");
d.mkdir("runtime");
QFile::setPermissions(p, QFile::ReadOwner | QFile::WriteOwner | QFile::ExeOwner |
@@ -541,7 +617,7 @@ void tst_qstandardpaths::testCustomRuntimeDirectory_data()
return fallbackXdgRuntimeDir();
});
- addRow("environment:wrong-owner", [](QDir &) {
+ addRow("environment:wrong-owner", [](QDir &) -> std::optional<QString> {
QT_STATBUF st;
QT_STAT("/", &st);
@@ -556,10 +632,18 @@ void tst_qstandardpaths::testCustomRuntimeDirectory_data()
return fallbackXdgRuntimeDir();
});
- addRow("environment:file", [](QDir &d) {
+ // static so that it can be used in RuntimeDirSetup callable without capturing
+ static auto failedToOpen = [](const QFile &f) {
+ qCritical("QFile::Open: failed to open '%s': %s",
+ qPrintable(f.fileName()), qPrintable(f.errorString()));
+ return std::nullopt;
+ };
+
+ addRow("environment:file", [](QDir &d) -> std::optional<QString> {
QString p = d.filePath("file");
QFile f(p);
- f.open(QIODevice::WriteOnly);
+ if (!f.open(QIODevice::WriteOnly))
+ return failedToOpen(f);
f.setPermissions(QFile::ReadOwner | QFile::WriteOwner);
updateRuntimeDir(p);
@@ -570,7 +654,7 @@ void tst_qstandardpaths::testCustomRuntimeDirectory_data()
return fallbackXdgRuntimeDir();
});
- addRow("environment:broken-symlink", [](QDir &d) {
+ addRow("environment:broken-symlink", [](QDir &d) -> std::optional<QString> {
QString p = d.filePath("link");
QFile::link(d.filePath("this-goes-nowhere"), p);
updateRuntimeDir(p);
@@ -581,7 +665,7 @@ void tst_qstandardpaths::testCustomRuntimeDirectory_data()
return fallbackXdgRuntimeDir();
});
- addRow("environment:symlink-to-dir", [](QDir &d) {
+ addRow("environment:symlink-to-dir", [](QDir &d) -> std::optional<QString> {
QString p = d.filePath("link");
d.mkdir("dir");
QFile::link(d.filePath("dir"), p);
@@ -594,12 +678,12 @@ void tst_qstandardpaths::testCustomRuntimeDirectory_data()
return fallbackXdgRuntimeDir();
});
- addRow("no-environment:non-existing", [](QDir &) {
+ addRow("no-environment:non-existing", [](QDir &) -> std::optional<QString> {
clearRuntimeDir();
return fallbackXdgRuntimeDir();
});
- addRow("no-environment:existing", [](QDir &d) {
+ addRow("no-environment:existing", [](QDir &d) -> std::optional<QString> {
clearRuntimeDir();
QString p = fallbackXdgRuntimeDir();
d.mkdir(p); // probably has wrong permissions
@@ -607,10 +691,11 @@ void tst_qstandardpaths::testCustomRuntimeDirectory_data()
return p;
});
- addRow("no-environment:fallback-is-file", [](QDir &) {
+ addRow("no-environment:fallback-is-file", [](QDir &) -> std::optional<QString> {
QString p = fallbackXdgRuntimeDir();
QFile f(p);
- f.open(QIODevice::WriteOnly);
+ if (!f.open(QIODevice::WriteOnly))
+ return failedToOpen(f);
f.setPermissions(QFile::ReadOwner | QFile::WriteOwner);
clearRuntimeDir();
@@ -621,10 +706,11 @@ void tst_qstandardpaths::testCustomRuntimeDirectory_data()
return QString();
});
- addRow("environment-and-fallback-are-files", [](QDir &d) {
+ addRow("environment-and-fallback-are-files", [](QDir &d) -> std::optional<QString> {
QString p = d.filePath("file1");
QFile f(p);
- f.open(QIODevice::WriteOnly);
+ if (!f.open(QIODevice::WriteOnly))
+ return failedToOpen(f);
f.setPermissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ReadGroup);
updateRuntimeDir(p);
QTest::ignoreMessage(QtWarningMsg,
@@ -634,7 +720,8 @@ void tst_qstandardpaths::testCustomRuntimeDirectory_data()
f.close();
f.setFileName(fallbackXdgRuntimeDir());
- f.open(QIODevice::WriteOnly);
+ if (!f.open(QIODevice::WriteOnly))
+ return failedToOpen(f);
f.setPermissions(QFile::ReadOwner | QFile::WriteOwner | QFile::ReadGroup);
QTest::ignoreMessage(QtWarningMsg,
QString("QStandardPaths: runtime directory '%1' is not a directory, "
@@ -674,7 +761,9 @@ void tst_qstandardpaths::testCustomRuntimeDirectory()
qputenv("TMPDIR", QFile::encodeName(tempDir.path()));
QFETCH(RuntimeDirSetup, setup);
- QString expected = setup(d);
+ std::optional<QString> opt = setup(d);
+ QVERIFY(opt);
+ QString expected = *opt;
QString runtimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation);
QCOMPARE(runtimeDir, expected);
@@ -749,6 +838,35 @@ void tst_qstandardpaths::testXdgPathCleanup()
QVERIFY(!appsDirs.contains("/applications"));
QVERIFY(!appsDirs.contains(uncleanGlobalAppDir + "/applications"));
QVERIFY(!appsDirs.contains("relative/path/applications"));
+
+ const QString uncleanGlobalConfigDir = "/./" + QFile::encodeName(m_globalConfigDir);
+ qputenv("XDG_CONFIG_DIRS", QFile::encodeName(uncleanGlobalConfigDir) + "::relative/path");
+ const QStringList configDirs = QStandardPaths::standardLocations(QStandardPaths::ConfigLocation);
+ QVERIFY(!configDirs.contains("relative/path"_L1));
+ QVERIFY(!configDirs.contains(""_L1));
+
+ // Relative paths in XDG_* env vars are ignored
+ const QString relative("./someRelativeDir");
+
+ qputenv("XDG_CACHE_HOME", relative.toLatin1());
+ const QString cacheDir = cacheLoc();
+ QCOMPARE_NE(cacheDir, relative);
+
+ qputenv("XDG_STATE_HOME", relative.toLatin1());
+ const QString stateDir = stateLoc();
+ QCOMPARE_NE(stateDir, relative);
+
+ qputenv("XDG_DATA_HOME", relative.toLatin1());
+ const QString localDataDir = genericDataLoc();
+ QCOMPARE_NE(localDataDir, relative);
+
+ qputenv("XDG_CONFIG_HOME", relative.toLatin1());
+ const QString localConfig = configLoc();
+ QCOMPARE_NE(localConfig, relative);
+
+ qputenv("XDG_RUNTIME_DIR", relative.toLatin1());
+ const QString runtimeDir = genericDataLoc();
+ QCOMPARE_NE(runtimeDir, relative);
#endif
}
diff --git a/tests/auto/corelib/io/qstorageinfo/CMakeLists.txt b/tests/auto/corelib/io/qstorageinfo/CMakeLists.txt
index be3a8c3afe..acbd90cb45 100644
--- a/tests/auto/corelib/io/qstorageinfo/CMakeLists.txt
+++ b/tests/auto/corelib/io/qstorageinfo/CMakeLists.txt
@@ -1,12 +1,20 @@
-# Generated from qstorageinfo.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstorageinfo Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstorageinfo LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstorageinfo
SOURCES
tst_qstorageinfo.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/io/qstorageinfo/tst_qstorageinfo.cpp b/tests/auto/corelib/io/qstorageinfo/tst_qstorageinfo.cpp
index f7273d19cf..6a6339a8ec 100644
--- a/tests/auto/corelib/io/qstorageinfo/tst_qstorageinfo.cpp
+++ b/tests/auto/corelib/io/qstorageinfo/tst_qstorageinfo.cpp
@@ -1,52 +1,50 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Ivan Komissarov <ABBAPOH@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) 2014 Ivan Komissarov <ABBAPOH@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
+#include <QSet>
+#include <QStandardPaths>
#include <QStorageInfo>
#include <QTemporaryFile>
+#include "private/qemulationdetector_p.h"
#include <stdarg.h>
+#ifdef Q_OS_WIN
+# include <io.h> // _get_osfhandle
+# include <windows.h>
+#else
+# include <unistd.h>
+#endif
+
#include "../../../../manual/qstorageinfo/printvolumes.cpp"
+#ifdef Q_OS_LINUX
+# include "../../../../../src/corelib/io/qstorageinfo_linux_p.h"
+#endif
+
class tst_QStorageInfo : public QObject
{
Q_OBJECT
private slots:
void defaultValues();
void dump();
+ void compareCompiles();
void operatorEqual();
void operatorNotEqual();
void root();
void currentStorage();
+ void storageList_data();
void storageList();
- void tempFile();
- void caching();
+ void freeSpaceUpdate();
+
+#if defined(Q_OS_LINUX) && defined(QT_BUILD_INTERNAL)
+ void testParseMountInfo_data();
+ void testParseMountInfo();
+ void testParseMountInfo_filtered_data();
+ void testParseMountInfo_filtered();
+#endif
};
void tst_QStorageInfo::defaultValues()
@@ -91,31 +89,36 @@ void tst_QStorageInfo::dump()
printVolumes(QStorageInfo::mountedVolumes(), qInfoPrinter);
}
+void tst_QStorageInfo::compareCompiles()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QStorageInfo>();
+}
+
void tst_QStorageInfo::operatorEqual()
{
{
QStorageInfo storage1 = QStorageInfo::root();
QStorageInfo storage2(QDir::rootPath());
- QCOMPARE(storage1, storage2);
+ QT_TEST_EQUALITY_OPS(storage1, storage2, true);
}
{
QStorageInfo storage1(QCoreApplication::applicationDirPath());
QStorageInfo storage2(QCoreApplication::applicationFilePath());
- QCOMPARE(storage1, storage2);
+ QT_TEST_EQUALITY_OPS(storage1, storage2, true);
}
{
QStorageInfo storage1;
QStorageInfo storage2;
- QCOMPARE(storage1, storage2);
+ QT_TEST_EQUALITY_OPS(storage1, storage2, true);
}
// Test copy ctor
{
QStorageInfo storage1 = QStorageInfo::root();
QStorageInfo storage2(storage1);
- QCOMPARE(storage1, storage2);
+ QT_TEST_EQUALITY_OPS(storage1, storage2, true);
}
}
@@ -123,7 +126,7 @@ void tst_QStorageInfo::operatorNotEqual()
{
QStorageInfo storage1 = QStorageInfo::root();
QStorageInfo storage2;
- QVERIFY(storage1 != storage2);
+ QT_TEST_EQUALITY_OPS(storage1, storage2, false);
}
void tst_QStorageInfo::root()
@@ -137,9 +140,9 @@ void tst_QStorageInfo::root()
QVERIFY(!storage.device().isEmpty());
QVERIFY(!storage.fileSystemType().isEmpty());
#ifndef Q_OS_HAIKU
- QVERIFY(storage.bytesTotal() >= 0);
- QVERIFY(storage.bytesFree() >= 0);
- QVERIFY(storage.bytesAvailable() >= 0);
+ QCOMPARE_GE(storage.bytesTotal(), 0);
+ QCOMPARE_GE(storage.bytesFree(), 0);
+ QCOMPARE_GE(storage.bytesAvailable(), 0);
#endif
}
@@ -152,13 +155,16 @@ void tst_QStorageInfo::currentStorage()
QVERIFY(appPath.startsWith(storage.rootPath(), Qt::CaseInsensitive));
QVERIFY(!storage.device().isEmpty());
QVERIFY(!storage.fileSystemType().isEmpty());
- QVERIFY(storage.bytesTotal() >= 0);
- QVERIFY(storage.bytesFree() >= 0);
- QVERIFY(storage.bytesAvailable() >= 0);
+ QCOMPARE_GE(storage.bytesTotal(), 0);
+ QCOMPARE_GE(storage.bytesFree(), 0);
+ QCOMPARE_GE(storage.bytesAvailable(), 0);
}
-void tst_QStorageInfo::storageList()
+void tst_QStorageInfo::storageList_data()
{
+ if (QTestPrivate::isRunningArmOnX86())
+ QSKIP("QEMU appears not to emulate the system calls correctly.");
+
QStorageInfo root = QStorageInfo::root();
QList<QStorageInfo> volumes = QStorageInfo::mountedVolumes();
@@ -168,9 +174,26 @@ void tst_QStorageInfo::storageList()
volumes.removeOne(root);
QVERIFY(!volumes.contains(root));
- foreach (const QStorageInfo &storage, volumes) {
+ if (volumes.isEmpty())
+ QSKIP("Only the root volume was mounted on this system");
+
+ QTest::addColumn<QStorageInfo>("storage");
+ QSet<QString> seenRoots;
+ for (const QStorageInfo &storage : std::as_const(volumes)) {
if (!storage.isReady())
continue;
+ QString rootPath = storage.rootPath();
+ if (seenRoots.contains(rootPath))
+ qInfo() << rootPath << "is mounted over; QStorageInfo may be unpredictable";
+ else
+ QTest::newRow(qUtf8Printable(rootPath)) << storage;
+ seenRoots.insert(rootPath);
+ }
+}
+
+void tst_QStorageInfo::storageList()
+{
+ QFETCH(QStorageInfo, storage);
QVERIFY(storage.isValid());
QVERIFY(!storage.isRoot());
@@ -178,64 +201,263 @@ void tst_QStorageInfo::storageList()
QVERIFY(!storage.device().isEmpty());
QVERIFY(!storage.fileSystemType().isEmpty());
#endif
- }
+
+ QStorageInfo other(storage.rootPath());
+ QVERIFY(other.isValid());
+ QCOMPARE(other.rootPath(), storage.rootPath());
+ QCOMPARE(other.device(), storage.device());
+ QCOMPARE(other.subvolume(), storage.subvolume());
+ QCOMPARE(other.fileSystemType(), storage.fileSystemType());
+ QCOMPARE(other.name(), storage.name());
+ QCOMPARE(other.displayName(), storage.displayName());
+
+ QCOMPARE(other.bytesTotal(), storage.bytesTotal());
+ QCOMPARE(other.blockSize(), storage.blockSize());
+ // not comparing free space because it may have changed
+
+ QCOMPARE(other.isRoot(), storage.isRoot());
+ QCOMPARE(other.isReadOnly(), storage.isReadOnly());
+ QCOMPARE(other.isReady(), storage.isReady());
}
-void tst_QStorageInfo::tempFile()
+static QString suitableDirectoryForWriting()
{
- QTemporaryFile file;
- QVERIFY2(file.open(), qPrintable(file.errorString()));
-
- QStorageInfo storage1(file.fileName());
+ std::initializer_list<const char *> inadvisableFs = {
#ifdef Q_OS_LINUX
- if (storage1.fileSystemType() == "btrfs")
- QSKIP("This test doesn't work on btrfs, probably due to a btrfs bug");
+ // See comment below. If we can get a tmpfs, let's try it.
+ "btrfs",
+ "xfs",
#endif
-
- qint64 free = storage1.bytesFree();
- QVERIFY(free != -1);
-
- file.write(QByteArray(1024*1024, '1'));
- file.flush();
- file.close();
-
- QStorageInfo storage2(file.fileName());
- if (free == storage2.bytesFree() && storage2.fileSystemType() == "apfs") {
- QEXPECT_FAIL("", "This test is likely to fail on APFS", Continue);
+ };
+
+ QString tempDir = QDir::tempPath();
+ QString fsType = QStorageInfo(tempDir).fileSystemType();
+ if (std::find(std::begin(inadvisableFs), std::end(inadvisableFs), fsType)
+ != std::end(inadvisableFs)) {
+ // the RuntimeLocation on Linux is almost always a tmpfs
+ QString runtimeDir = QStandardPaths::writableLocation(QStandardPaths::RuntimeLocation);
+ if (!runtimeDir.isEmpty())
+ return runtimeDir;
}
- QVERIFY(free != storage2.bytesFree());
+ return tempDir;
}
-void tst_QStorageInfo::caching()
+void tst_QStorageInfo::freeSpaceUpdate()
{
- QTemporaryFile file;
+ // Some filesystems don't update the free space unless we ask that the OS
+ // flush its buffers to disk and even then the update may not be entirely
+ // synchronous. So we always ask the OS to flush them and we may keep
+ // trying to write until the free space changes (with a maximum so we don't
+ // exhaust and cause other problems).
+ //
+ // In the past, we had this issue with APFS (Apple systems), BTRFS and XFS
+ // (Linux). Current testing is that APFS and XFS always succeed after the
+ // first block is written and BTRFS almost always by the second block.
+
+ auto flushAndSync = [](QFile &file) {
+ file.flush();
+
+#ifdef Q_OS_WIN
+ FlushFileBuffers(HANDLE(_get_osfhandle(file.handle())));
+#elif _POSIX_VERSION >= 200112L
+ fsync(file.handle());
+ sync();
+#endif
+ };
+
+ QTemporaryFile file(suitableDirectoryForWriting() + "/tst_qstorageinfo.XXXXXX");
QVERIFY2(file.open(), qPrintable(file.errorString()));
QStorageInfo storage1(file.fileName());
-#ifdef Q_OS_LINUX
- if (storage1.fileSystemType() == "btrfs")
- QSKIP("This test doesn't work on btrfs, probably due to a btrfs bug");
-#endif
+ qInfo() << "Testing on" << storage1;
qint64 free = storage1.bytesFree();
QStorageInfo storage2(storage1);
QCOMPARE(free, storage2.bytesFree());
- QVERIFY(free != -1);
-
- file.write(QByteArray(1024*1024, '\0'));
- file.flush();
+ QCOMPARE_NE(free, -1);
+
+ // let's see if we can make it change
+ QByteArray block(1024 * 1024 / 2, '\0');
+
+ // let's try and keep to less than ~10% of the free disk space
+ int maxIterations = 25;
+ if (free < 256 * block.size())
+ maxIterations = free / 10 / block.size();
+ if (maxIterations == 0)
+ QSKIP("Not enough free disk space to continue");
+
+ file.write(block);
+ flushAndSync(file);
+ for (int i = 0; i < maxIterations; ++i) {
+ QStorageInfo storage3(file.fileName());
+ qint64 nowFree = storage3.bytesFree();
+ if (nowFree != free)
+ break;
+
+ // grow some more
+ file.write(block);
+ flushAndSync(file);
+ }
+ // qDebug() << "Needed to grow" << file.fileName() << "to" << file.size();
+ QCOMPARE(storage1, storage2);
QCOMPARE(free, storage1.bytesFree());
QCOMPARE(free, storage2.bytesFree());
storage2.refresh();
QCOMPARE(storage1, storage2);
- if (free == storage2.bytesFree() && storage2.fileSystemType() == "apfs") {
- QEXPECT_FAIL("", "This test is likely to fail on APFS", Continue);
- }
- QVERIFY(free != storage2.bytesFree());
+ QCOMPARE_NE(free, storage2.bytesFree());
}
+#if defined(Q_OS_LINUX) && defined(QT_BUILD_INTERNAL)
+void tst_QStorageInfo::testParseMountInfo_data()
+{
+ QTest::addColumn<QByteArray>("line");
+ QTest::addColumn<MountInfo>("expected");
+
+ QTest::newRow("tmpfs")
+ << "17 25 0:18 / /dev rw,nosuid,relatime shared:2 - tmpfs tmpfs rw,seclabel,mode=755\n"_ba
+ << MountInfo{"/dev", "tmpfs", "tmpfs", "", makedev(0, 18)};
+ QTest::newRow("proc")
+ << "23 66 0:21 / /proc rw,nosuid,nodev,noexec,relatime shared:12 - proc proc rw\n"_ba
+ << MountInfo{"/proc", "proc", "proc", "", makedev(0, 21)};
+
+ // E.g. on Android
+ QTest::newRow("rootfs")
+ << "618 618 0:1 / / ro,relatime master:1 - rootfs rootfs ro,seclabel\n"_ba
+ << MountInfo{"/", "rootfs", "rootfs", "", makedev(0, 1)};
+
+ QTest::newRow("ext4")
+ << "47 66 8:3 / /home rw,relatime shared:50 - ext4 /dev/sda3 rw,stripe=32736\n"_ba
+ << MountInfo{"/home", "ext4", "/dev/sda3", "", makedev(8, 3)};
+
+ QTest::newRow("empty-optional-field")
+ << "23 25 0:22 / /apex rw,nosuid,nodev,noexec,relatime - tmpfs tmpfs rw,seclabel,mode=755\n"_ba
+ << MountInfo{"/apex", "tmpfs", "tmpfs", "", makedev(0, 22)};
+
+ QTest::newRow("one-optional-field")
+ << "47 66 8:3 / /home rw,relatime shared:50 - ext4 /dev/sda3 rw,stripe=32736\n"_ba
+ << MountInfo{"/home", "ext4", "/dev/sda3", "", makedev(8, 3)};
+
+ QTest::newRow("multiple-optional-fields")
+ << "47 66 8:3 / /home rw,relatime shared:142 master:111 - ext4 /dev/sda3 rw,stripe=32736\n"_ba
+ << MountInfo{"/home", "ext4", "/dev/sda3", "", makedev(8, 3)};
+
+ QTest::newRow("mountdir-with-utf8")
+ << "129 66 8:51 / /mnt/lab\xC3\xA9l rw,relatime shared:234 - ext4 /dev/sdd3 rw\n"_ba
+ << MountInfo{"/mnt/labél", "ext4", "/dev/sdd3", "", makedev(8, 51)};
+
+ QTest::newRow("mountdir-with-space")
+ << "129 66 8:51 / /mnt/labe\\040l rw,relatime shared:234 - ext4 /dev/sdd3 rw\n"_ba
+ << MountInfo{"/mnt/labe l", "ext4", "/dev/sdd3", "", makedev(8, 51)};
+
+ QTest::newRow("mountdir-with-tab")
+ << "129 66 8:51 / /mnt/labe\\011l rw,relatime shared:234 - ext4 /dev/sdd3 rw\n"_ba
+ << MountInfo{"/mnt/labe\tl", "ext4", "/dev/sdd3", "", makedev(8, 51)};
+
+ QTest::newRow("mountdir-with-backslash")
+ << "129 66 8:51 / /mnt/labe\\134l rw,relatime shared:234 - ext4 /dev/sdd3 rw\n"_ba
+ << MountInfo{"/mnt/labe\\l", "ext4", "/dev/sdd3", "", makedev(8, 51)};
+
+ QTest::newRow("mountdir-with-newline")
+ << "129 66 8:51 / /mnt/labe\\012l rw,relatime shared:234 - ext4 /dev/sdd3 rw\n"_ba
+ << MountInfo{"/mnt/labe\nl", "ext4", "/dev/sdd3", "", makedev(8, 51)};
+
+ QTest::newRow("btrfs-subvol")
+ << "775 503 0:49 /foo/bar / rw,relatime shared:142 master:111 - btrfs "
+ "/dev/mapper/vg0-stuff rw,ssd,discard,space_cache,subvolid=272,subvol=/foo/bar\n"_ba
+ << MountInfo{"/", "btrfs", "/dev/mapper/vg0-stuff", "/foo/bar", makedev(0, 49)};
+
+ QTest::newRow("bind-mount")
+ << "59 47 8:17 /rpmbuild /home/user/rpmbuild rw,relatime shared:48 - ext4 /dev/sdb1 rw\n"_ba
+ << MountInfo{"/home/user/rpmbuild", "ext4", "/dev/sdb1", "/rpmbuild", makedev(8, 17)};
+
+ QTest::newRow("space-dash-space")
+ << "47 66 8:3 / /home\\040-\\040dir rw,relatime shared:50 - ext4 /dev/sda3 rw,stripe=32736\n"_ba
+ << MountInfo{"/home - dir", "ext4", "/dev/sda3", "", makedev(8, 3)};
+
+ QTest::newRow("btrfs-mount-bind-file")
+ << "1799 1778 0:49 "
+ "/var_lib_docker/containers/81fde0fec3dd3d99765c3f7fd9cf1ab121b6ffcfd05d5d7ff434db933fe9d795/resolv.conf "
+ "/etc/resolv.conf rw,relatime - btrfs /dev/mapper/vg0-stuff "
+ "rw,ssd,discard,space_cache,subvolid=1773,subvol=/var_lib_docker\n"_ba
+ << MountInfo{"/etc/resolv.conf", "btrfs", "/dev/mapper/vg0-stuff",
+ "/var_lib_docker/containers/81fde0fec3dd3d99765c3f7fd9cf1ab121b6ffcfd05d5d7ff434db933fe9d795/resolv.conf",
+ makedev(0, 49)};
+
+ QTest::newRow("very-long-line-QTBUG-77059")
+ << "727 26 0:52 / "
+ "/var/lib/docker/overlay2/f3fbad5eedef71145f00729f0826ea8c44defcfec8c92c58aee0aa2c5ea3fa3a/merged "
+ "rw,relatime shared:399 - overlay overlay "
+ "rw,lowerdir=/var/lib/docker/overlay2/l/PUP2PIY4EQLAOEDQOZ56BHVE53:"
+ "/var/lib/docker/overlay2/l/6IIID3C6J3SUXZEA3GJXKQSTLD:"
+ "/var/lib/docker/overlay2/l/PA6N6URNR7XDBBGGOSFWSFQ2CG:"
+ "/var/lib/docker/overlay2/l/5EOMBTZNCPOCE4LM3I4JCTNSTT:"
+ "/var/lib/docker/overlay2/l/DAMINQ46P3LKX2GDDDIWQKDIWC:"
+ "/var/lib/docker/overlay2/l/DHR3N57AEH4OG5QER5XJW2LXIN:"
+ "/var/lib/docker/overlay2/l/NW26KA7QPRS2KSVQI77QJWLMHW,"
+ "upperdir=/var/lib/docker/overlay2/f3fbad5eedef71145f00729f0826ea8c44defcfec8c92c58aee0aa2c5ea3fa3a/diff,"
+ "workdir=/var/lib/docker/overlay2/f3fbad5eedef71145f00729f0826ea8c44defcfec8c92c58aee0aa2c5ea3fa3a/work,"
+ "index=off,xino=off\n"_ba
+ << MountInfo{"/var/lib/docker/overlay2/f3fbad5eedef71145f00729f0826ea8c44defcfec8c92c58aee0aa2c5ea3fa3a/merged",
+ "overlay", "overlay", "", makedev(0, 52)};
+
+ QTest::newRow("sshfs-src-device-not-start-with-slash")
+ << "128 92 0:64 / /mnt-point rw,nosuid,nodev,relatime shared:234 - "
+ "fuse.sshfs admin@192.168.1.2:/storage/emulated/0 rw,user_id=1000,group_id=1000\n"_ba
+ << MountInfo{"/mnt-point", "fuse.sshfs",
+ "admin@192.168.1.2:/storage/emulated/0", "", makedev(0, 64)};
+}
+
+void tst_QStorageInfo::testParseMountInfo()
+{
+ QFETCH(QByteArray, line);
+ QFETCH(MountInfo, expected);
+
+ const std::vector<MountInfo> result = doParseMountInfo(line);
+ QVERIFY(!result.empty());
+ const MountInfo &a = result.front();
+ QCOMPARE(a.mountPoint, expected.mountPoint);
+ QCOMPARE(a.fsType, expected.fsType);
+ QCOMPARE(a.device, expected.device);
+ QCOMPARE(a.fsRoot, expected.fsRoot);
+ QCOMPARE(a.stDev, expected.stDev);
+}
+
+void tst_QStorageInfo::testParseMountInfo_filtered_data()
+{
+ QTest::addColumn<QByteArray>("line");
+
+ QTest::newRow("proc")
+ << "23 66 0:21 / /proc rw,nosuid,nodev,noexec,relatime shared:12 - proc proc rw\n"_ba;
+
+ QTest::newRow("sys")
+ << "24 66 0:22 / /sys rw,nosuid,nodev,noexec,relatime shared:2 - sysfs sysfs rw\n"_ba;
+ QTest::newRow("sys-kernel")
+ << "26 24 0:6 / /sys/kernel/security rw,nosuid,nodev,noexec,relatime "
+ "shared:3 - securityfs securityfs rw\n"_ba;
+
+ QTest::newRow("dev")
+ << "25 66 0:5 / /dev rw,nosuid shared:8 - devtmpfs devtmpfs "
+ "rw,size=4096k,nr_inodes=8213017,mode=755,inode64\n"_ba;
+ QTest::newRow("dev-shm")
+ << "27 25 0:23 / /dev/shm rw,nosuid,nodev shared:9 - tmpfs tmpfs rw,inode64\n"_ba;
+
+ QTest::newRow("var-run")
+ << "46 28 0:25 / /var/run rw,nosuid,nodev,noexec,relatime shared:1 - "
+ "tmpfs tmpfs rw,size=32768k,mode=755,inode64\n"_ba;
+ QTest::newRow("var-lock")
+ << "46 28 0:25 / /var/lock rw,nosuid,nodev,noexec,relatime shared:1 - "
+ "tmpfs tmpfs rw,size=32768k,mode=755,inode64\n"_ba;
+}
+void tst_QStorageInfo::testParseMountInfo_filtered()
+{
+ QFETCH(QByteArray, line);
+ QVERIFY(doParseMountInfo(line, FilterMountInfo::Filtered).empty());
+}
+
+#endif // Q_OS_LINUX
+
QTEST_MAIN(tst_QStorageInfo)
#include "tst_qstorageinfo.moc"
diff --git a/tests/auto/corelib/io/qtemporarydir/BLACKLIST b/tests/auto/corelib/io/qtemporarydir/BLACKLIST
new file mode 100644
index 0000000000..da7dac909f
--- /dev/null
+++ b/tests/auto/corelib/io/qtemporarydir/BLACKLIST
@@ -0,0 +1,2 @@
+[QTBUG43352_failedSetPermissions]
+macos-14 arm ci
diff --git a/tests/auto/corelib/io/qtemporarydir/CMakeLists.txt b/tests/auto/corelib/io/qtemporarydir/CMakeLists.txt
index fcfd409d5b..0ddde7d0b3 100644
--- a/tests/auto/corelib/io/qtemporarydir/CMakeLists.txt
+++ b/tests/auto/corelib/io/qtemporarydir/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtemporarydir.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtemporarydir Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtemporarydir LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtemporarydir
SOURCES
tst_qtemporarydir.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::TestPrivate
)
diff --git a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp
index d4760c0afd..737317a8fb 100644
--- a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp
+++ b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QStandardPaths>
@@ -49,6 +23,10 @@
#include "qplatformdefs.h"
#endif
+#include <optional>
+
+using namespace Qt::StringLiterals;
+
class tst_QTemporaryDir : public QObject
{
Q_OBJECT
@@ -59,6 +37,7 @@ public slots:
private slots:
void construction();
+ void moveSemantics();
void fileTemplate();
void fileTemplate_data();
void getSetCheck();
@@ -74,7 +53,7 @@ private slots:
void QTBUG_4796_data();
void QTBUG_4796();
- void QTBUG43352_failedSetPermissions();
+ void nestedTempDirs();
private:
QString m_previousCurrent;
@@ -105,6 +84,58 @@ void tst_QTemporaryDir::construction()
QCOMPARE(dir.errorString(), QString());
}
+void tst_QTemporaryDir::moveSemantics()
+{
+ {
+ auto original = std::optional<QTemporaryDir>(std::in_place);
+ QVERIFY(original->isValid());
+
+ original->setAutoRemove(true);
+
+ auto OriginalDirectoryInfo = QFileInfo(original->path());
+ OriginalDirectoryInfo.setCaching(false);
+ QVERIFY(OriginalDirectoryInfo.exists());
+
+ QTemporaryDir movedInto = std::move(*original);
+
+ original.reset();
+
+ QVERIFY(OriginalDirectoryInfo.exists());
+ QVERIFY(movedInto.path() == OriginalDirectoryInfo.filePath());
+ }
+
+ {
+ auto movedInto = QTemporaryDir();
+ QVERIFY(movedInto.isValid());
+
+ movedInto.setAutoRemove(true);
+
+ auto movedIntoInitialDirectoryInfo = QFileInfo(movedInto.path());
+ movedIntoInitialDirectoryInfo.setCaching(false);
+ QVERIFY(movedIntoInitialDirectoryInfo.exists());
+
+ auto OriginalDirectoryInfo = QFileInfo();
+ OriginalDirectoryInfo.setCaching(false);
+
+ {
+ auto original = QTemporaryDir();
+ QVERIFY(original.isValid());
+
+ original.setAutoRemove(true);
+
+ OriginalDirectoryInfo.setFile(original.path());
+ QVERIFY(OriginalDirectoryInfo.exists());
+
+ movedInto = std::move(original);
+ }
+
+ QVERIFY(!movedIntoInitialDirectoryInfo.exists());
+ QVERIFY(OriginalDirectoryInfo.exists());
+
+ QVERIFY(movedInto.path() == OriginalDirectoryInfo.filePath());
+ }
+}
+
// Testing get/set functions
void tst_QTemporaryDir::getSetCheck()
{
@@ -169,19 +200,19 @@ void tst_QTemporaryDir::fileTemplate_data()
return; // skip if we have no drive letter
tmp.data()[1] = u'$';
- const auto tmpPath = tmp + uR"(\UNC.XXXXXX.tmpDir)"_qs;
+ const auto tmpPath = tmp + uR"(\UNC.XXXXXX.tmpDir)"_s;
QTest::newRow("UNC-backslash")
- << uR"(\\localhost\)"_qs + tmpPath << "UNC."
+ << uR"(\\localhost\)"_s + tmpPath << "UNC."
<< ".tmpDir";
QTest::newRow("UNC-prefix")
- << uR"(\\?\UNC\localhost\)"_qs + tmpPath << "UNC."
+ << uR"(\\?\UNC\localhost\)"_s + tmpPath << "UNC."
<< ".tmpDir";
QTest::newRow("UNC-slash")
- << u"//localhost/"_qs + QDir::fromNativeSeparators(tmpPath) << "UNC."
+ << u"//localhost/"_s + QDir::fromNativeSeparators(tmpPath) << "UNC."
<< ".tmpDir";
QTest::newRow("UNC-prefix-slash")
- << uR"(//?/UNC/localhost/)"_qs + QDir::fromNativeSeparators(tmpPath) << "UNC."
+ << uR"(//?/UNC/localhost/)"_s + QDir::fromNativeSeparators(tmpPath) << "UNC."
<< ".tmpDir";
#endif
}
@@ -197,9 +228,9 @@ void tst_QTemporaryDir::fileTemplate()
QVERIFY(tempDir.isValid());
QString dirName = QDir(tempDir.path()).dirName();
- if (prefix.length()) {
- QCOMPARE(dirName.left(prefix.length()), prefix);
- QCOMPARE(dirName.right(suffix.length()), suffix);
+ if (prefix.size()) {
+ QCOMPARE(dirName.left(prefix.size()), prefix);
+ QCOMPARE(dirName.right(suffix.size()), suffix);
}
}
@@ -358,7 +389,8 @@ void tst_QTemporaryDir::openOnRootDrives()
#endif
// If it's possible to create a file in the root directory, it
// must be possible to create a temp dir there too.
- foreach (const QFileInfo &driveInfo, QDir::drives()) {
+ const auto drives = QDir::drives();
+ for (const QFileInfo &driveInfo : drives) {
QFile testFile(driveInfo.filePath() + "XXXXXX");
if (testFile.open(QIODevice::ReadWrite)) {
testFile.remove();
@@ -447,7 +479,7 @@ void tst_QTemporaryDir::QTBUG_4796() // unicode support
{
~CleanOnReturn()
{
- foreach (const QString &tempName, tempNames)
+ for (const QString &tempName : std::as_const(tempNames))
QVERIFY(QDir(tempName).removeRecursively());
}
@@ -517,22 +549,24 @@ void tst_QTemporaryDir::QTBUG_4796() // unicode support
#ifdef Q_OS_WIN
QTest::qWait(20);
#endif
- foreach (const QString &tempName, cleaner.tempNames)
+ for (const QString &tempName : std::as_const(cleaner.tempNames))
QVERIFY2(!QDir(tempName).exists(), qPrintable(tempName));
cleaner.reset();
}
-void tst_QTemporaryDir::QTBUG43352_failedSetPermissions()
+void tst_QTemporaryDir::nestedTempDirs()
{
- QString path = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + QStringLiteral("/");
- int count = QDir(path).entryList().size();
+ QTemporaryDir parentDir;
+ const QString &parentPath = parentDir.path();
{
- QTemporaryDir dir(path);
+ QTemporaryDir tempdir(parentPath);
}
- QCOMPARE(QDir(path).entryList().size(), count);
+ QDir dir(parentPath);
+ dir.setFilter(QDir::NoDotAndDotDot);
+ QCOMPARE(dir.count(), 0);
}
QTEST_MAIN(tst_QTemporaryDir)
diff --git a/tests/auto/corelib/io/qtemporaryfile/CMakeLists.txt b/tests/auto/corelib/io/qtemporaryfile/CMakeLists.txt
index e7a1a65296..9b453302c9 100644
--- a/tests/auto/corelib/io/qtemporaryfile/CMakeLists.txt
+++ b/tests/auto/corelib/io/qtemporaryfile/CMakeLists.txt
@@ -1,16 +1,23 @@
-# Generated from qtemporaryfile.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtemporaryfile Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtemporaryfile LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "tst_qtemporaryfile.cpp")
qt_internal_add_test(tst_qtemporaryfile
SOURCES
tst_qtemporaryfile.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::TestPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp
index 732b2fa4a8..579e6d5511 100644
--- a/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp
+++ b/tests/auto/corelib/io/qtemporaryfile/tst_qtemporaryfile.cpp
@@ -1,41 +1,17 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2017 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2017 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qcoreapplication.h>
-#include <qstring.h>
-#include <qtemporarydir.h>
-#include <qtemporaryfile.h>
#include <qfile.h>
#include <qdatetime.h>
#include <qdir.h>
#include <qset.h>
+#include <qstandardpaths.h>
+#include <qstring.h>
+#include <qtemporarydir.h>
+#include <qtemporaryfile.h>
#include <QtTest/private/qtesthelpers_p.h>
@@ -60,6 +36,8 @@
#include "qplatformdefs.h"
#endif
+using namespace Qt::StringLiterals;
+
class tst_QTemporaryFile : public QObject
{
Q_OBJECT
@@ -86,6 +64,7 @@ private slots:
void stressTest();
void rename();
void renameFdLeak();
+ void moveToTrash();
void reOpenThroughQFile();
void keepOpenMode();
void resetTemplateAfterError();
@@ -96,6 +75,7 @@ private slots:
void QTBUG_4796_data();
void QTBUG_4796();
void guaranteeUnique();
+ void stdfilesystem();
private:
QTemporaryDir m_temporaryDir;
QString m_previousCurrent;
@@ -103,6 +83,9 @@ private:
void tst_QTemporaryFile::initTestCase()
{
+ QStandardPaths::setTestModeEnabled(true);
+ QDir().mkpath(QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation));
+
QVERIFY2(m_temporaryDir.isValid(), qPrintable(m_temporaryDir.errorString()));
m_previousCurrent = QDir::currentPath();
QVERIFY(QDir::setCurrent(m_temporaryDir.path()));
@@ -218,22 +201,22 @@ void tst_QTemporaryFile::fileTemplate_data()
return; // skip if we have no drive letter
tmp.data()[1] = u'$';
- const auto tmpPath = tmp + uR"(\QTBUG-74291.XXXXXX.tmpFile)"_qs;
+ const auto tmpPath = tmp + uR"(\QTBUG-74291.XXXXXX.tmpFile)"_s;
QTest::newRow("UNC-backslash")
- << uR"(\\localhost\)"_qs + tmpPath << "QTBUG-74291."
+ << uR"(\\localhost\)"_s + tmpPath << "QTBUG-74291."
<< ".tmpFile"
<< "";
QTest::newRow("UNC-prefix")
- << uR"(\\?\UNC\localhost\)"_qs + tmpPath << "QTBUG-74291."
+ << uR"(\\?\UNC\localhost\)"_s + tmpPath << "QTBUG-74291."
<< ".tmpFile"
<< "";
QTest::newRow("UNC-slash")
- << u"//localhost/"_qs + QDir::fromNativeSeparators(tmpPath) << "QTBUG-74291."
+ << u"//localhost/"_s + QDir::fromNativeSeparators(tmpPath) << "QTBUG-74291."
<< ".tmpFile"
<< "";
QTest::newRow("UNC-prefix-slash")
- << uR"(//?/UNC/localhost/)"_qs + QDir::fromNativeSeparators(tmpPath) << "QTBUG-74291."
+ << uR"(//?/UNC/localhost/)"_s + QDir::fromNativeSeparators(tmpPath) << "QTBUG-74291."
<< ".tmpFile"
<< "";
#endif
@@ -253,11 +236,11 @@ void tst_QTemporaryFile::fileTemplate()
QVERIFY2(file.open(), qPrintable(file.errorString()));
QString fileName = QFileInfo(file).fileName();
- if (prefix.length())
- QCOMPARE(fileName.left(prefix.length()), prefix);
+ if (prefix.size())
+ QCOMPARE(fileName.left(prefix.size()), prefix);
- if (suffix.length())
- QCOMPARE(fileName.right(suffix.length()), suffix);
+ if (suffix.size())
+ QCOMPARE(fileName.right(suffix.size()), suffix);
}
@@ -271,7 +254,7 @@ void tst_QTemporaryFile::fileName()
QString absoluteTempPath = QDir(tempPath).absolutePath();
QTemporaryFile file;
file.setAutoRemove(true);
- file.open();
+ QVERIFY(file.open());
QString fileName = file.fileName();
QVERIFY2(fileName.contains("/tst_qtemporaryfile."), qPrintable(fileName));
QVERIFY(QFile::exists(fileName));
@@ -443,7 +426,7 @@ void tst_QTemporaryFile::io()
file.reset();
QFile compare(file.fileName());
- compare.open(QIODevice::ReadOnly);
+ QVERIFY(compare.open(QIODevice::ReadOnly));
QCOMPARE(compare.readAll() , data);
QCOMPARE(compare.fileTime(QFile::FileModificationTime), mtime);
}
@@ -477,7 +460,7 @@ void tst_QTemporaryFile::removeAndReOpen()
QString fileName;
{
QTemporaryFile file;
- file.open();
+ QVERIFY(file.open());
fileName = file.fileName(); // materializes any unnamed file
QVERIFY(QFile::exists(fileName));
@@ -497,7 +480,7 @@ void tst_QTemporaryFile::removeAndReOpen()
void tst_QTemporaryFile::removeUnnamed()
{
QTemporaryFile file;
- file.open();
+ QVERIFY(file.open());
// we did not call fileName(), so the file name may not have a name
QVERIFY(file.remove());
@@ -545,7 +528,8 @@ void tst_QTemporaryFile::openOnRootDrives()
#endif
// If it's possible to create a file in the root directory, it
// must be possible to create a temp file there too.
- foreach (QFileInfo driveInfo, QDir::drives()) {
+ const auto drives = QDir::drives();
+ for (const QFileInfo &driveInfo : drives) {
QFile testFile(driveInfo.filePath() + "XXXXXX.txt");
if (testFile.open(QIODevice::ReadWrite)) {
testFile.remove();
@@ -644,6 +628,55 @@ void tst_QTemporaryFile::renameFdLeak()
#endif
}
+void tst_QTemporaryFile::moveToTrash()
+{
+#if defined(Q_OS_ANDROID) || defined(Q_OS_WEBOS) || defined(Q_OS_VXWORKS)
+ QSKIP("This platform doesn't implement a trash bin");
+#endif
+#ifdef Q_OS_WIN
+ // QTemporaryFile won't really close the file with close(), so this is
+ // expected to fail with a sharing violation error.
+ constexpr bool expectSuccess = false;
+#else
+ constexpr bool expectSuccess = true;
+#endif
+ const QByteArrayView contents = "Hello, World\n";
+
+ QTemporaryFile f(QDir::homePath() + "/tst_qtemporaryfile.moveToTrash.XXXXXX");
+ QString origFileName;
+ auto cleanup = qScopeGuard([&] {
+ if (!origFileName.isEmpty())
+ QFile::remove(origFileName);
+ if (QString fn = f.fileName(); !fn.isEmpty() && fn != origFileName)
+ QFile::remove(fn);
+ });
+
+ if (!f.open())
+ QSKIP("Failed to create temporary file");
+ f.write(contents.data(), contents.size());
+
+ // we need an actual file name:
+ // 1) so we can delete it in the clean-up guard in case we fail to trash
+ // 2) so that the file exists on Linux in the first place (no sense in
+ // trashing an unnamed file)
+ origFileName = f.fileName();
+
+ if (expectSuccess) {
+ QVERIFY2(f.moveToTrash(), qPrintable(f.errorString()));
+ QCOMPARE_NE(f.fileName(), origFileName); // must have changed!
+ QCOMPARE_NE(f.fileName(), QString());
+ QVERIFY(!QFile::exists(origFileName));
+ QVERIFY(QFile::exists(f.fileName()));
+ QCOMPARE(QFileInfo(f.fileName()).size(), contents.size());
+ } else {
+ QVERIFY(!f.moveToTrash());
+ QCOMPARE(f.fileName(), origFileName); // mustn't have changed!
+ QCOMPARE_NE(f.error(), QFile::NoError);
+ QCOMPARE_NE(f.errorString(), "Unknown error");
+ QVERIFY(QFile::exists(origFileName));
+ }
+}
+
void tst_QTemporaryFile::reOpenThroughQFile()
{
QByteArray data("abcdefghij");
@@ -837,7 +870,7 @@ void tst_QTemporaryFile::createNativeFile()
QFile f(filePath);
if (currentPos != -1) {
- f.open(QIODevice::ReadOnly);
+ QVERIFY(f.open(QIODevice::ReadOnly));
f.seek(currentPos);
}
QTemporaryFile *tempFile = QTemporaryFile::createNativeFile(f);
@@ -880,7 +913,7 @@ void tst_QTemporaryFile::QTBUG_4796()
{
~CleanOnReturn()
{
- Q_FOREACH(QString tempName, tempNames)
+ for (const QString &tempName : std::as_const(tempNames))
QFile::remove(tempName);
}
@@ -968,7 +1001,7 @@ void tst_QTemporaryFile::QTBUG_4796()
}
}
- Q_FOREACH(QString const &tempName, cleaner.tempNames)
+ for (const QString &tempName : std::as_const(cleaner.tempNames))
QVERIFY( !QFile::exists(tempName) );
cleaner.reset();
@@ -982,7 +1015,7 @@ void tst_QTemporaryFile::guaranteeUnique()
// First pass. See which filename QTemporaryFile will try first.
{
QTemporaryFile tmpFile("testFile1.XXXXXX");
- tmpFile.open();
+ QVERIFY(tmpFile.open());
takenFileName = tmpFile.fileName();
QVERIFY(QFile::exists(takenFileName));
}
@@ -1004,5 +1037,49 @@ void tst_QTemporaryFile::guaranteeUnique()
QVERIFY(dir.rmdir(takenFileName));
}
+void tst_QTemporaryFile::stdfilesystem()
+{
+#if !QT_CONFIG(cxx17_filesystem)
+ QSKIP("std::filesystem not available");
+#else
+ // ctor
+ {
+ std::filesystem::path testFile("testFile1.XXXXXX");
+ QTemporaryFile file(testFile);
+ QCOMPARE(file.fileTemplate(), QtPrivate::fromFilesystemPath(testFile));
+ }
+ // rename
+ {
+ QTemporaryFile file("testFile1.XXXXXX");
+ QVERIFY(file.open());
+ QByteArray payload = "abc123 I am a string";
+ file.write(payload);
+ QVERIFY(file.rename(std::filesystem::path("./test")));
+ file.close();
+
+ QFile f(u"./test"_s);
+ QVERIFY(f.exists());
+ QVERIFY(f.open(QFile::ReadOnly));
+ QCOMPARE(f.readAll(), payload);
+ }
+ // createNativeFile
+ {
+ std::filesystem::path resource(":/resources/test.txt");
+ std::unique_ptr<QTemporaryFile> tmp(QTemporaryFile::createNativeFile(resource));
+ QVERIFY(tmp);
+ QFile file(resource);
+ QVERIFY(file.open(QFile::ReadOnly));
+ QCOMPARE(tmp->readAll(), file.readAll());
+ }
+ // setFileTemplate
+ {
+ QTemporaryFile file;
+ std::filesystem::path testFile("testFile1.XXXXXX");
+ file.setFileTemplate(testFile);
+ QCOMPARE(file.fileTemplate(), QtPrivate::fromFilesystemPath(testFile));
+ }
+#endif
+}
+
QTEST_MAIN(tst_QTemporaryFile)
#include "tst_qtemporaryfile.moc"
diff --git a/tests/auto/corelib/io/qurl/CMakeLists.txt b/tests/auto/corelib/io/qurl/CMakeLists.txt
index b5a2ec0331..d105b323df 100644
--- a/tests/auto/corelib/io/qurl/CMakeLists.txt
+++ b/tests/auto/corelib/io/qurl/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qurl.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qurl Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qurl LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qurl
SOURCES
tst_qurl.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
Qt::TestPrivate
)
diff --git a/tests/auto/corelib/io/qurl/idna-test.c b/tests/auto/corelib/io/qurl/idna-test.c
index 035d3e1c89..856c40c7b0 100644
--- a/tests/auto/corelib/io/qurl/idna-test.c
+++ b/tests/auto/corelib/io/qurl/idna-test.c
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
struct idna
{
diff --git a/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp
index 205a99ef1b..81cd94e4ed 100644
--- a/tests/auto/corelib/io/qurl/tst_qurl.cpp
+++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp
@@ -1,36 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qurl.h>
#include <QtCore/QDebug>
#include <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
#include <QDirIterator>
#include <qcoreapplication.h>
@@ -40,6 +16,8 @@
#include <QtTest/private/qemulationdetector_p.h>
+using namespace Qt::StringLiterals;
+
Q_DECLARE_METATYPE(QUrl::FormattingOptions)
class tst_QUrl : public QObject
@@ -54,6 +32,7 @@ private slots:
void hashInPath();
void unc();
void assignment();
+ void orderingCompiles();
void comparison();
void comparison2_data();
void comparison2();
@@ -312,6 +291,11 @@ void tst_QUrl::assignment()
QCOMPARE(url, copy);
}
+void tst_QUrl::orderingCompiles()
+{
+ QTestPrivate::testAllComparisonOperatorsCompile<QUrl>();
+}
+
void tst_QUrl::comparison()
{
QUrl url1("http://qt-project.org/");
@@ -460,18 +444,19 @@ void tst_QUrl::comparison2()
QFETCH(QUrl, url2);
QFETCH(int, ordering);
+ const Qt::weak_ordering expectedOrdering = [&ordering] {
+ if (ordering > 0)
+ return Qt::weak_ordering::greater;
+ else if (ordering < 0)
+ return Qt::weak_ordering::less;
+ return Qt::weak_ordering::equivalent;
+ }();
+
QCOMPARE(url1.toString() == url2.toString(), ordering == 0);
- QCOMPARE(url1 == url2, ordering == 0);
- QCOMPARE(url1 != url2, ordering != 0);
+ QT_TEST_ALL_COMPARISON_OPS(url1, url2, expectedOrdering);
if (ordering == 0)
QCOMPARE(qHash(url1), qHash(url2));
- QCOMPARE(url1 < url2, ordering < 0);
- QCOMPARE(!(url1 < url2), ordering >= 0);
-
- QCOMPARE(url2 < url1, ordering > 0);
- QCOMPARE(!(url2 < url1), ordering <= 0);
-
// redundant checks (the above should catch these)
QCOMPARE(url1 < url2 || url2 < url1, ordering != 0);
QVERIFY(!(url1 < url2 && url2 < url1));
@@ -1113,7 +1098,7 @@ void tst_QUrl::toAndFromStringList()
QFETCH(QStringList, strings);
const QList<QUrl> urls = QUrl::fromStringList(strings);
- QCOMPARE(urls.count(), strings.count());
+ QCOMPARE(urls.size(), strings.size());
const QStringList converted = QUrl::toStringList(urls);
QCOMPARE(converted, strings);
}
@@ -1410,7 +1395,7 @@ void tst_QUrl::fromLocalFileNormalize()
void tst_QUrl::macTypes()
{
-#ifndef Q_OS_MAC
+#ifndef Q_OS_DARWIN
QSKIP("This is a Mac-only test");
#else
extern void tst_QUrl_mactypes(); // in tst_qurl_mac.mm
@@ -1871,8 +1856,8 @@ void tst_QUrl::ipvfuture_data()
QTest::newRow("non-hex-version") << "x://[vz.1234]" << false;
QTest::newRow("digit-ver") << "x://[v7.1]" << true << "x://[v7.1]";
- QTest::newRow("lowercase-hex-ver") << "x://[va.1]" << true << "x://[vA.1]";
- QTest::newRow("lowercase-hex-ver") << "x://[vA.1]" << true << "x://[vA.1]";
+ QTest::newRow("lowercase-hex-ver-lower") << "x://[va.1]" << true << "x://[vA.1]";
+ QTest::newRow("lowercase-hex-ver-upper") << "x://[vA.1]" << true << "x://[vA.1]";
QTest::newRow("data-digits") << "x://[v7.1234]" << true << "x://[v7.1234]";
QTest::newRow("data-unreserved") << "x://[v7.hello~-WORLD_.com]" << true << "x://[v7.hello~-WORLD_.com]";
@@ -2085,7 +2070,7 @@ void tst_QUrl::hasQuery()
void tst_QUrl::nameprep()
{
// U+FB01 LATIN SMALL LIGATURE FI
- QUrl url(u"http://www.\uFB01le.de/"_qs);
+ QUrl url(u"http://www.\uFB01le.de/"_s);
QCOMPARE(url.toString(), QStringLiteral(u"http://www.file.de/"));
}
@@ -3192,8 +3177,10 @@ void tst_QUrl::fromUserInput_data()
QTest::newRow("misc-1") << "user:pass@domain.com" << authUrl;
// FTP with double slashes in path
- QTest::newRow("ftp-double-slash-1") << "ftp.example.com//path" << QUrl("ftp://ftp.example.com/%2Fpath");
- QTest::newRow("ftp-double-slash-1") << "ftp://ftp.example.com//path" << QUrl("ftp://ftp.example.com/%2Fpath");
+ QTest::newRow("ftp-double-slash-no-scheme")
+ << "ftp.example.com//path" << QUrl("ftp://ftp.example.com/%2Fpath");
+ QTest::newRow("ftp-double-slash-scheme")
+ << "ftp://ftp.example.com//path" << QUrl("ftp://ftp.example.com/%2Fpath");
}
void tst_QUrl::fromUserInput()
@@ -3822,106 +3809,106 @@ void tst_QUrl::setComponents_data()
QTest::newRow("invalid-username-1") << QUrl("http://example.com")
<< int(UserName) << "{}" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-username-2") << QUrl("http://example.com")
<< int(UserName) << "foo/bar" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-username-3") << QUrl("http://example.com")
<< int(UserName) << "foo:bar" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-password-1") << QUrl("http://example.com")
<< int(Password) << "{}" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-password-2") << QUrl("http://example.com")
<< int(Password) << "foo/bar" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-password-3") << QUrl("http://example.com")
<< int(Password) << "foo:bar" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-userinfo-1") << QUrl("http://example.com")
<< int(UserInfo) << "{}" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-userinfo-2") << QUrl("http://example.com")
<< int(UserInfo) << "foo/bar" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-host-1") << QUrl("http://example.com")
<< int(Host) << "-not-valid-" << Tolerant << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-host-2") << QUrl("http://example.com")
<< int(Host) << "%31%30.%30.%30.%31" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-authority-1") << QUrl("http://example.com")
<< int(Authority) << "-not-valid-" << Tolerant << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-authority-2") << QUrl("http://example.com")
<< int(Authority) << "%31%30.%30.%30.%31" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-path-0") << QUrl("http://example.com")
<< int(Path) << "{}" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-query-1") << QUrl("http://example.com")
<< int(Query) << "{}" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("invalid-fragment-1") << QUrl("http://example.com")
<< int(Fragment) << "{}" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
// these test cases are "compound invalid":
// they produces isValid == false, but the original is still available
QTest::newRow("invalid-path-1") << QUrl("/relative")
<< int(Path) << "c:/" << Strict << false
- << PrettyDecoded << "c:/" << "";
+ << PrettyDecoded << "c:/" << QString();
QTest::newRow("invalid-path-2") << QUrl("http://example.com")
<< int(Path) << "relative" << Strict << false
- << PrettyDecoded << "relative" << "";
+ << PrettyDecoded << "relative" << QString();
QTest::newRow("invalid-path-3") << QUrl("trash:/")
<< int(Path) << "//path" << Tolerant << false
- << PrettyDecoded << "//path" << "";
+ << PrettyDecoded << "//path" << QString();
// -- test bad percent encoding --
// unnecessary to test the scheme, since percent-decoding is not performed in it;
// see tests above
QTest::newRow("bad-percent-username") << QUrl("http://example.com")
<< int(UserName) << "bar%foo" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-password") << QUrl("http://user@example.com")
<< int(Password) << "bar%foo" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-userinfo-1") << QUrl("http://example.com")
<< int(UserInfo) << "bar%foo" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-userinfo-2") << QUrl("http://example.com")
<< int(UserInfo) << "bar%:foo" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-userinfo-3") << QUrl("http://example.com")
<< int(UserInfo) << "bar:%foo" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-authority-1") << QUrl("http://example.com")
<< int(Authority) << "bar%foo@example.org" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-authority-2") << QUrl("http://example.com")
<< int(Authority) << "bar%:foo@example.org" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-authority-3") << QUrl("http://example.com")
<< int(Authority) << "bar:%foo@example.org" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-authority-4") << QUrl("http://example.com")
<< int(Authority) << "bar:foo@bar%foo" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-host") << QUrl("http://example.com")
<< int(Host) << "bar%foo" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-path") << QUrl("http://example.com")
<< int(Path) << "/bar%foo" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-query") << QUrl("http://example.com")
<< int(Query) << "bar%foo" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("bad-percent-fragment") << QUrl("http://example.com")
<< int(Fragment) << "bar%foo" << Strict << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
// -- test decoded behaviour --
// '%' characters are not permitted in the scheme, this tests that it fails to set anything
@@ -3937,7 +3924,7 @@ void tst_QUrl::setComponents_data()
// '%' characters are not permitted in the hostname, these test that it fails to set anything
QTest::newRow("invalid-host-encode") << QUrl("http://example.com")
<< int(Host) << "ex%61mple.com" << Decoded << false
- << PrettyDecoded << "" << "";
+ << PrettyDecoded << QString() << QString();
QTest::newRow("path-encode") << QUrl("http://example.com/foo")
<< int(Path) << "/bar%23" << Decoded << true
<< PrettyDecoded << "/bar%2523" << "http://example.com/bar%2523";
@@ -3976,41 +3963,44 @@ void tst_QUrl::setComponents()
QFETCH(int, encoding);
QFETCH(QString, output);
+#define QNULLCOMPARE(a, b) \
+ do { QCOMPARE(a, b); QCOMPARE(a.isNull(), b.isNull()); } while (false)
+
switch (component) {
case Scheme:
// scheme is only parsed in strict mode
copy.setScheme(newValue);
- QCOMPARE(copy.scheme(), output);
+ QCOMPARE(copy.scheme(), output); // schemes don't become null
break;
case Path:
copy.setPath(newValue, QUrl::ParsingMode(parsingMode));
- QCOMPARE(copy.path(QUrl::ComponentFormattingOptions(encoding)), output);
+ QNULLCOMPARE(copy.path(QUrl::ComponentFormattingOptions(encoding)), output);
break;
case UserInfo:
copy.setUserInfo(newValue, QUrl::ParsingMode(parsingMode));
- QCOMPARE(copy.userInfo(QUrl::ComponentFormattingOptions(encoding)), output);
+ QNULLCOMPARE(copy.userInfo(QUrl::ComponentFormattingOptions(encoding)), output);
break;
case UserName:
copy.setUserName(newValue, QUrl::ParsingMode(parsingMode));
- QCOMPARE(copy.userName(QUrl::ComponentFormattingOptions(encoding)), output);
+ QNULLCOMPARE(copy.userName(QUrl::ComponentFormattingOptions(encoding)), output);
break;
case Password:
copy.setPassword(newValue, QUrl::ParsingMode(parsingMode));
- QCOMPARE(copy.password(QUrl::ComponentFormattingOptions(encoding)), output);
+ QNULLCOMPARE(copy.password(QUrl::ComponentFormattingOptions(encoding)), output);
break;
case Host:
copy.setHost(newValue, QUrl::ParsingMode(parsingMode));
- QCOMPARE(copy.host(QUrl::ComponentFormattingOptions(encoding)), output);
+ QNULLCOMPARE(copy.host(QUrl::ComponentFormattingOptions(encoding)), output);
break;
case Authority:
copy.setAuthority(newValue, QUrl::ParsingMode(parsingMode));
- QCOMPARE(copy.authority(QUrl::ComponentFormattingOptions(encoding)), output);
+ QNULLCOMPARE(copy.authority(QUrl::ComponentFormattingOptions(encoding)), output);
break;
case Query:
@@ -4025,6 +4015,7 @@ void tst_QUrl::setComponents()
QCOMPARE(copy.fragment(QUrl::ComponentFormattingOptions(encoding)), output);
break;
}
+#undef QNULLCOMPARE
QFETCH(bool, isValid);
QCOMPARE(copy.isValid(), isValid);
diff --git a/tests/auto/corelib/io/qurl/tst_qurl_mac.mm b/tests/auto/corelib/io/qurl/tst_qurl_mac.mm
index b6e2a923f3..a7cf3ebee5 100644
--- a/tests/auto/corelib/io/qurl/tst_qurl_mac.mm
+++ b/tests/auto/corelib/io/qurl/tst_qurl_mac.mm
@@ -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 <QTest>
diff --git a/tests/auto/corelib/io/qurlinternal/CMakeLists.txt b/tests/auto/corelib/io/qurlinternal/CMakeLists.txt
index 492ac0a4d6..a5c36b6ed9 100644
--- a/tests/auto/corelib/io/qurlinternal/CMakeLists.txt
+++ b/tests/auto/corelib/io/qurlinternal/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qurlinternal.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_qurlinternal LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -12,9 +19,6 @@ qt_internal_add_test(tst_qurlinternal
SOURCES
tst_qurlinternal.cpp
utf8data.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
-
-#### Keys ignored in scope 1:.:.:qurlinternal.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
diff --git a/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp b/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp
index 6c556f1f25..1c121ac719 100644
--- a/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp
+++ b/tests/auto/corelib/io/qurlinternal/tst_qurlinternal.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QUrl>
#include <QTest>
@@ -41,6 +16,8 @@
#define STRINGPREP_BIDI_BOTH_L_AND_RAL 4
#define STRINGPREP_BIDI_LEADTRAIL_NOT_RAL 5
+using namespace Qt::StringLiterals;
+
struct char16array {
char16array() {}
template <size_t N>
@@ -259,8 +236,8 @@ void tst_QUrlInternal::ace_testsuite_data()
QTest::newRow("ascii-upper") << "FLUKE" << "fluke" << "fluke" << "fluke";
// U+FB01 LATIN SMALL LIGATURE FI
- QTest::newRow("asciifolded") << u"\uFB01le"_qs << "file" << "." << "file";
- QTest::newRow("asciifolded-dotcom") << u"\uFB01le.example.com"_qs << "file.example.com" << "." << "file.example.com";
+ QTest::newRow("asciifolded") << u"\uFB01le"_s << "file" << "." << "file";
+ QTest::newRow("asciifolded-dotcom") << u"\uFB01le.example.com"_s << "file.example.com" << "." << "file.example.com";
QTest::newRow("greek-mu") << QString::fromLatin1("\265V")
<<"xn--v-lmb"
<< "."
@@ -744,7 +721,7 @@ void tst_QUrlInternal::encodingRecodeInvalidUtf8()
output = QTest::currentDataTag();
if (!qt_urlRecode(output, input, QUrl::FullyEncoded))
output += input;
- for (int i = int(strlen(QTest::currentDataTag())); i < output.length(); ++i) {
+ for (int i = int(strlen(QTest::currentDataTag())); i < output.size(); ++i) {
QVERIFY2(output.at(i).unicode() < 0x80 || output.at(i) == QChar::ReplacementCharacter,
qPrintable(QString("Character at i == %1 was U+%2").arg(i).arg(output.at(i).unicode(), 4, 16, QLatin1Char('0'))));
}
diff --git a/tests/auto/corelib/io/qurlinternal/utf8data.cpp b/tests/auto/corelib/io/qurlinternal/utf8data.cpp
index ba2c3e054a..edeff0182c 100644
--- a/tests/auto/corelib/io/qurlinternal/utf8data.cpp
+++ b/tests/auto/corelib/io/qurlinternal/utf8data.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 The Qt Company Ltd.
-** Copyright (C) 2018 Intel Corporation.
-** 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) 2018 The Qt Company Ltd.
+// Copyright (C) 2018 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
void loadInvalidUtf8Rows()
diff --git a/tests/auto/corelib/io/qurlquery/CMakeLists.txt b/tests/auto/corelib/io/qurlquery/CMakeLists.txt
index b0484314d9..c9f5491416 100644
--- a/tests/auto/corelib/io/qurlquery/CMakeLists.txt
+++ b/tests/auto/corelib/io/qurlquery/CMakeLists.txt
@@ -1,12 +1,20 @@
-# Generated from qurlquery.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qurlquery Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qurlquery LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qurlquery
SOURCES
tst_qurlquery.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp b/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp
index de911b7aa4..8a799fbf94 100644
--- a/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp
+++ b/tests/auto/corelib/io/qurlquery/tst_qurlquery.cpp
@@ -1,38 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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) 2022 The Qt Company Ltd.
+// Copyright (C) 2012 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-#include <QtCore/QUrlQuery>
#include <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
+
+#include <QtCore/QUrlQuery>
typedef QList<QPair<QString, QString> > QueryItems;
Q_DECLARE_METATYPE(QueryItems)
Q_DECLARE_METATYPE(QUrl::ComponentFormattingOptions)
+using namespace Qt::StringLiterals;
+
class tst_QUrlQuery : public QObject
{
Q_OBJECT
@@ -44,6 +24,9 @@ public:
}
private Q_SLOTS:
+ void compareCompiles();
+ void compareEquality_data();
+ void compareEquality();
void constructing();
void addRemove();
void multiAddRemove();
@@ -67,46 +50,32 @@ private Q_SLOTS:
void old_hasQueryItem();
};
-static QString prettyElement(const QString &key, const QString &value)
+static QString prettyPair(const QPair<QString, QString> &pair)
{
- QString result;
- if (key.isNull())
- result += "null -> ";
- else
- result += '"' + key + "\" -> ";
- if (value.isNull())
- result += "null";
- else
- result += '"' + value + '"';
- return result;
-}
-
-static QString prettyPair(QList<QPair<QString, QString> >::const_iterator it)
-{
- return prettyElement(it->first, it->second);
+ const auto represent = [](const QString &s) {
+ return s.isNull() ? u"null"_s : u'"' + s + u'"';
+ };
+ return represent(pair.first) + " -> "_L1 + represent(pair.second);
}
-template <typename T>
-static QByteArray prettyList(const T &items)
+static QByteArray prettyList(const QueryItems &items)
{
- QString result = "(";
- bool first = true;
- typename T::const_iterator it = items.constBegin();
- for ( ; it != items.constEnd(); ++it) {
- if (!first)
- result += ", ";
- first = false;
- result += prettyPair(it);
- }
- result += QLatin1Char(')');
+ if (items.isEmpty())
+ return "()";
+ auto it = items.constBegin();
+ QString result = u'(' + prettyPair(*it);
+ for (++it; it != items.constEnd(); ++it)
+ result += ", "_L1 + prettyPair(*it);
+ result += u')';
return result.toLocal8Bit();
}
-static bool compare(const QList<QPair<QString, QString> > &actual, const QueryItems &expected,
+static bool compare(const QueryItems &actual, const QueryItems &expected,
const char *actualStr, const char *expectedStr, const char *file, int line)
{
return QTest::compare_helper(actual == expected, "Compared values are not the same",
- qstrdup(prettyList(actual)), qstrdup(prettyList(expected).data()),
+ [&actual] { return qstrdup(prettyList(actual).constData()); },
+ [&expected] { return qstrdup(prettyList(expected).constData()); },
actualStr, expectedStr, file, line);
}
@@ -155,6 +124,48 @@ static QUrlQuery emptyQuery()
return QUrlQuery();
}
+void tst_QUrlQuery::compareCompiles()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QUrlQuery>();
+}
+
+void tst_QUrlQuery::compareEquality_data()
+{
+ QTest::addColumn<QUrlQuery>("url1");
+ QTest::addColumn<QUrlQuery>("url2");
+ QTest::addColumn<bool>("equal");
+
+ QTest::newRow("empty-empty") << QUrlQuery() << QUrlQuery() << true;
+
+ QUrlQuery notEmpty;
+ notEmpty.addQueryItem("a", "b");
+ QTest::newRow("empty-notEmpty") << QUrlQuery() << notEmpty << false;
+
+ QUrlQuery notEmpty_copy = notEmpty;
+ QTest::newRow("sameItems") << notEmpty_copy << notEmpty << true;
+
+ QUrlQuery notEmpty_modified = notEmpty;
+ notEmpty_modified.addQueryItem("c", "d");
+ QTest::newRow("addedItems") << notEmpty_copy << notEmpty_modified << false;
+
+ QUrlQuery notEmpty2;
+ notEmpty2.addQueryItem("c", "d");
+ QTest::newRow("differentItems") << notEmpty2 << notEmpty << false;
+
+ QUrlQuery differentPairDelimiters;
+ differentPairDelimiters.setQueryDelimiters('(', ')');
+ QTest::newRow("defaultDelimiters-differentDelimiters") << QUrlQuery() << differentPairDelimiters
+ << false;
+}
+
+void tst_QUrlQuery::compareEquality()
+{
+ QFETCH(QUrlQuery, url1);
+ QFETCH(QUrlQuery, url2);
+ QFETCH(bool, equal);
+ QT_TEST_EQUALITY_OPS(url1, url2, equal);
+}
+
void tst_QUrlQuery::constructing()
{
QUrlQuery empty;
@@ -173,7 +184,7 @@ void tst_QUrlQuery::constructing()
QVERIFY(!copy.isDetached());
QCOMPARE(copy, empty);
QCOMPARE(qHash(copy), qHash(empty));
- QVERIFY(!(copy != empty));
+ QT_TEST_EQUALITY_OPS(copy, empty, true);
copy = empty;
QCOMPARE(copy, empty);
@@ -205,20 +216,50 @@ void tst_QUrlQuery::constructing()
other.addQueryItem("a", "b");
QVERIFY(!other.isEmpty());
QVERIFY(other.isDetached());
- QVERIFY(other != empty);
- QVERIFY(!(other == empty));
+ QCOMPARE_NE(other, empty);
+ QT_TEST_EQUALITY_OPS(other, empty, false);
+ // copy-construct
QUrlQuery copy(other);
QCOMPARE(copy, other);
copy.clear();
QVERIFY(copy.isEmpty());
- QVERIFY(copy != other);
+ QCOMPARE_NE(copy, other);
+ // copy-assign
copy = other;
QVERIFY(!copy.isEmpty());
QCOMPARE(copy, other);
+ // move-construct
+ QUrlQuery moved(std::move(other));
+ QCOMPARE(moved, copy);
+
+ // self move-assign
+ {
+ auto &self = moved; // prevent -Wself-move
+ moved = std::move(self);
+ }
+ QCOMPARE(moved, copy);
+
+ // self move-assign of moved-from (Hinnant Criterion)
+ {
+ auto &self = other; // prevent -Wself-move
+ other = std::move(self);
+ }
+ // shouldn't crash; here, or further down
+
+ // copy-assign to moved-from object
+ other = copy;
+ QCOMPARE(other, copy);
+ QCOMPARE(other, moved);
+
+ // move-assign
+ moved = std::move(other);
+ QCOMPARE(moved, copy);
+
+ // (move-)assign default-constructed
copy = QUrlQuery();
QVERIFY(copy.isEmpty());
@@ -246,22 +287,25 @@ void tst_QUrlQuery::constructing()
void tst_QUrlQuery::addRemove()
{
QUrlQuery query;
+ QCOMPARE(query, query);
{
// one item
query.addQueryItem("a", "b");
QVERIFY(!query.isEmpty());
QVERIFY(query.hasQueryItem("a"));
+ QCOMPARE_NE(query, QUrlQuery());
QCOMPARE(query.queryItemValue("a"), QString("b"));
QCOMPARE(query.allQueryItemValues("a"), QStringList() << "b");
QList<QPair<QString, QString> > allItems = query.queryItems();
- QCOMPARE(allItems.count(), 1);
+ QCOMPARE(allItems.size(), 1);
QCOMPARE(allItems.at(0).first, QString("a"));
QCOMPARE(allItems.at(0).second, QString("b"));
}
QUrlQuery original = query;
+ QCOMPARE(query, original);
{
// two items
@@ -274,12 +318,12 @@ void tst_QUrlQuery::addRemove()
QCOMPARE(query.allQueryItemValues("c"), QStringList() << "d");
QList<QPair<QString, QString> > allItems = query.queryItems();
- QCOMPARE(allItems.count(), 2);
+ QCOMPARE(allItems.size(), 2);
QVERIFY(allItems.contains(qItem("a", "b")));
QVERIFY(allItems.contains(qItem("c", "d")));
- QVERIFY(query != original);
- QVERIFY(!(query == original));
+ QCOMPARE_NE(query, original);
+ QT_TEST_EQUALITY_OPS(query, original, false);
}
{
@@ -297,12 +341,12 @@ void tst_QUrlQuery::addRemove()
QCOMPARE(query.allQueryItemValues("a"), QStringList() << "b");
QList<QPair<QString, QString> > allItems = query.queryItems();
- QCOMPARE(allItems.count(), 1);
+ QCOMPARE(allItems.size(), 1);
QCOMPARE(allItems.at(0).first, QString("a"));
QCOMPARE(allItems.at(0).second, QString("b"));
QCOMPARE(query, original);
- QVERIFY(!(query != original));
+ QT_TEST_EQUALITY_OPS(query, original, true);
QCOMPARE(qHash(query), qHash(original));
}
@@ -321,12 +365,12 @@ void tst_QUrlQuery::addRemove()
QCOMPARE(query.allQueryItemValues("e"), QStringList() << emptyButNotNull);
QList<QPair<QString, QString> > allItems = query.queryItems();
- QCOMPARE(allItems.count(), 2);
+ QCOMPARE(allItems.size(), 2);
QVERIFY(allItems.contains(qItem("a", "b")));
QVERIFY(allItems.contains(qItem("e", emptyButNotNull)));
- QVERIFY(query != original);
- QVERIFY(!(query == original));
+ QCOMPARE_NE(query, original);
+ QT_TEST_EQUALITY_OPS(query, original, false);
}
{
@@ -334,6 +378,9 @@ void tst_QUrlQuery::addRemove()
query.removeQueryItem("a");
query.removeQueryItem("e");
QVERIFY(query.isEmpty());
+ QVERIFY(query.isDetached());
+ QCOMPARE_NE(query, original);
+ QCOMPARE(query, QUrlQuery());
}
}
@@ -536,12 +583,11 @@ void tst_QUrlQuery::reconstructQuery_data()
baselist << qItem("a", "b") << qItem("c", "d");
QTest::newRow("2-ab-cd") << "a=b&c=d" << baselist;
- // the same entry multiply defined
+ // The same entry multiply defined
QTest::newRow("2-a-a") << "a&a" << (QueryItems() << qItem("a", QString()) << qItem("a", QString()));
QTest::newRow("2-ab-ab") << "a=b&a=b" << (QueryItems() << qItem("a", "b") << qItem("a", "b"));
QTest::newRow("2-ab-ac") << "a=b&a=c" << (QueryItems() << qItem("a", "b") << qItem("a", "c"));
QTest::newRow("2-ac-ab") << "a=c&a=b" << (QueryItems() << qItem("a", "c") << qItem("a", "b"));
- QTest::newRow("2-ab-cd") << "a=b&c=d" << (QueryItems() << qItem("a", "b") << qItem("c", "d"));
QTest::newRow("2-cd-ab") << "c=d&a=b" << (QueryItems() << qItem("c", "d") << qItem("a", "b"));
QueryItems list2 = baselist + qItem("somekey", QString());
diff --git a/tests/auto/corelib/io/qurluts46/CMakeLists.txt b/tests/auto/corelib/io/qurluts46/CMakeLists.txt
index 1e91fd17c8..ac3f7cac48 100644
--- a/tests/auto/corelib/io/qurluts46/CMakeLists.txt
+++ b/tests/auto/corelib/io/qurluts46/CMakeLists.txt
@@ -1,7 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qurluts46 Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qurluts46 LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qurluts46
SOURCES
tst_qurluts46.cpp
diff --git a/tests/auto/corelib/io/qurluts46/testdata/IdnaTestV2.txt b/tests/auto/corelib/io/qurluts46/testdata/IdnaTestV2.txt
index 42e0904356..5c1e6a880f 100644
--- a/tests/auto/corelib/io/qurluts46/testdata/IdnaTestV2.txt
+++ b/tests/auto/corelib/io/qurluts46/testdata/IdnaTestV2.txt
@@ -1,13 +1,13 @@
# IdnaTestV2.txt
-# Date: 2021-08-17, 19:34:01 GMT
-# © 2021 Unicode®, Inc.
+# Date: 2023-08-15, 23:21:16 GMT
+# © 2023 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode IDNA Compatible Preprocessing for UTS #46
-# Version: 14.0.0
+# Version: 15.1.0
#
-# For documentation and usage, see http://www.unicode.org/reports/tr46
+# For documentation and usage, see https://www.unicode.org/reports/tr46
#
# Test cases for verifying UTS #46 conformance.
#
@@ -102,90 +102,90 @@ xn--fa-hia.de; faß.de; ; xn--fa-hia.de; ; ; # faß.de
# BIDI TESTS
-à×; ; [B5, B6]; xn--0ca24w; ; ; # à×
-aÌ€×; à×; [B5, B6]; xn--0ca24w; ; ; # à×
-AÌ€×; à×; [B5, B6]; xn--0ca24w; ; ; # à×
-À×; à×; [B5, B6]; xn--0ca24w; ; ; # à×
-xn--0ca24w; à×; [B5, B6]; xn--0ca24w; ; ; # à×
-0à.×; ; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.×
-0aÌ€.×; 0à.×; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.×
-0AÌ€.×; 0à.×; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.×
-0À.×; 0à.×; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.×
-xn--0-sfa.xn--4db; 0à.×; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.×
-à.×̈; ; ; xn--0ca.xn--ssa73l; ; ; # à.×̈
-aÌ€.×̈; à.×̈; ; xn--0ca.xn--ssa73l; ; ; # à.×̈
-AÌ€.×̈; à.×̈; ; xn--0ca.xn--ssa73l; ; ; # à.×̈
-À.×̈; à.×̈; ; xn--0ca.xn--ssa73l; ; ; # à.×̈
-xn--0ca.xn--ssa73l; à.×̈; ; xn--0ca.xn--ssa73l; ; ; # à.×̈
-à.×0Ù ×; ; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.×0Ù ×
-aÌ€.×0Ù ×; à.×0Ù ×; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.×0Ù ×
-AÌ€.×0Ù ×; à.×0Ù ×; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.×0Ù ×
-À.×0Ù ×; à.×0Ù ×; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.×0Ù ×
-xn--0ca.xn--0-zhcb98c; à.×0Ù ×; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.×0Ù ×
-̈.×; ; [B1, B3, B6, V5]; xn--ssa.xn--4db; ; ; # ̈.×
-xn--ssa.xn--4db; ̈.×; [B1, B3, B6, V5]; xn--ssa.xn--4db; ; ; # ̈.×
-à.×0Ù ; ; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.×0Ù 
-aÌ€.×0Ù ; à.×0Ù ; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.×0Ù 
-AÌ€.×0Ù ; à.×0Ù ; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.×0Ù 
-À.×0Ù ; à.×0Ù ; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.×0Ù 
-xn--0ca.xn--0-zhc74b; à.×0Ù ; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.×0Ù 
-àˇ.×; ; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.×
-àˇ.×; àˇ.×; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.×
-Àˇ.×; àˇ.×; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.×
-Àˇ.×; àˇ.×; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.×
-xn--0ca88g.xn--4db; àˇ.×; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.×
-à̈.×; ; ; xn--0ca81i.xn--4db; ; ; # à̈.×
-à̈.×; à̈.×; ; xn--0ca81i.xn--4db; ; ; # à̈.×
-À̈.×; à̈.×; ; xn--0ca81i.xn--4db; ; ; # à̈.×
-À̈.×; à̈.×; ; xn--0ca81i.xn--4db; ; ; # à̈.×
-xn--0ca81i.xn--4db; à̈.×; ; xn--0ca81i.xn--4db; ; ; # à̈.×
+à\u05D0; ; [B5, B6]; xn--0ca24w; ; ; # à×
+a\u0300\u05D0; à\u05D0; [B5, B6]; xn--0ca24w; ; ; # à×
+A\u0300\u05D0; à\u05D0; [B5, B6]; xn--0ca24w; ; ; # à×
+À\u05D0; à\u05D0; [B5, B6]; xn--0ca24w; ; ; # à×
+xn--0ca24w; à\u05D0; [B5, B6]; xn--0ca24w; ; ; # à×
+0à.\u05D0; ; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.×
+0a\u0300.\u05D0; 0à.\u05D0; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.×
+0A\u0300.\u05D0; 0à.\u05D0; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.×
+0À.\u05D0; 0à.\u05D0; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.×
+xn--0-sfa.xn--4db; 0à.\u05D0; [B1]; xn--0-sfa.xn--4db; ; ; # 0à.×
+à.\u05D0\u0308; ; ; xn--0ca.xn--ssa73l; ; ; # à.×̈
+a\u0300.\u05D0\u0308; à.\u05D0\u0308; ; xn--0ca.xn--ssa73l; ; ; # à.×̈
+A\u0300.\u05D0\u0308; à.\u05D0\u0308; ; xn--0ca.xn--ssa73l; ; ; # à.×̈
+À.\u05D0\u0308; à.\u05D0\u0308; ; xn--0ca.xn--ssa73l; ; ; # à.×̈
+xn--0ca.xn--ssa73l; à.\u05D0\u0308; ; xn--0ca.xn--ssa73l; ; ; # à.×̈
+à.\u05D00\u0660\u05D0; ; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.×0Ù ×
+a\u0300.\u05D00\u0660\u05D0; à.\u05D00\u0660\u05D0; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.×0Ù ×
+A\u0300.\u05D00\u0660\u05D0; à.\u05D00\u0660\u05D0; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.×0Ù ×
+À.\u05D00\u0660\u05D0; à.\u05D00\u0660\u05D0; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.×0Ù ×
+xn--0ca.xn--0-zhcb98c; à.\u05D00\u0660\u05D0; [B4]; xn--0ca.xn--0-zhcb98c; ; ; # à.×0Ù ×
+\u0308.\u05D0; ; [B1, V5]; xn--ssa.xn--4db; ; ; # ̈.×
+xn--ssa.xn--4db; \u0308.\u05D0; [B1, V5]; xn--ssa.xn--4db; ; ; # ̈.×
+à.\u05D00\u0660; ; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.×0Ù 
+a\u0300.\u05D00\u0660; à.\u05D00\u0660; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.×0Ù 
+A\u0300.\u05D00\u0660; à.\u05D00\u0660; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.×0Ù 
+À.\u05D00\u0660; à.\u05D00\u0660; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.×0Ù 
+xn--0ca.xn--0-zhc74b; à.\u05D00\u0660; [B4]; xn--0ca.xn--0-zhc74b; ; ; # à.×0Ù 
+àˇ.\u05D0; ; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.×
+a\u0300ˇ.\u05D0; àˇ.\u05D0; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.×
+A\u0300ˇ.\u05D0; àˇ.\u05D0; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.×
+Àˇ.\u05D0; àˇ.\u05D0; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.×
+xn--0ca88g.xn--4db; àˇ.\u05D0; [B6]; xn--0ca88g.xn--4db; ; ; # àˇ.×
+à\u0308.\u05D0; ; ; xn--0ca81i.xn--4db; ; ; # à̈.×
+a\u0300\u0308.\u05D0; à\u0308.\u05D0; ; xn--0ca81i.xn--4db; ; ; # à̈.×
+A\u0300\u0308.\u05D0; à\u0308.\u05D0; ; xn--0ca81i.xn--4db; ; ; # à̈.×
+À\u0308.\u05D0; à\u0308.\u05D0; ; xn--0ca81i.xn--4db; ; ; # à̈.×
+xn--0ca81i.xn--4db; à\u0308.\u05D0; ; xn--0ca81i.xn--4db; ; ; # à̈.×
# CONTEXT TESTS
-a‌b; ; [C1]; xn--ab-j1t; ; ab; [] # ab
-A‌B; a‌b; [C1]; xn--ab-j1t; ; ab; [] # ab
-A‌b; a‌b; [C1]; xn--ab-j1t; ; ab; [] # ab
+a\u200Cb; ; [C1]; xn--ab-j1t; ; ab; [] # ab
+A\u200CB; a\u200Cb; [C1]; xn--ab-j1t; ; ab; [] # ab
+A\u200Cb; a\u200Cb; [C1]; xn--ab-j1t; ; ab; [] # ab
ab; ; ; ; ; ; # ab
-xn--ab-j1t; a‌b; [C1]; xn--ab-j1t; ; ; # ab
-aà¥â€Œb; ; ; xn--ab-fsf604u; ; xn--ab-fsf; # aà¥b
-Aà¥â€ŒB; aà¥â€Œb; ; xn--ab-fsf604u; ; xn--ab-fsf; # aà¥b
-Aà¥â€Œb; aà¥â€Œb; ; xn--ab-fsf604u; ; xn--ab-fsf; # aà¥b
-xn--ab-fsf; aà¥b; ; xn--ab-fsf; ; ; # aà¥b
-aà¥b; ; ; xn--ab-fsf; ; ; # aà¥b
-Aà¥B; aà¥b; ; xn--ab-fsf; ; ; # aà¥b
-Aà¥b; aà¥b; ; xn--ab-fsf; ; ; # aà¥b
-xn--ab-fsf604u; aà¥â€Œb; ; xn--ab-fsf604u; ; ; # aà¥b
-̈‌̈بb; ; [B1, C1, V5]; xn--b-bcba413a2w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb
-̈‌̈بB; ̈‌̈بb; [B1, C1, V5]; xn--b-bcba413a2w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb
-xn--b-bcba413a; ̈̈بb; [B1, V5]; xn--b-bcba413a; ; ; # ̈̈بb
-xn--b-bcba413a2w8b; ̈‌̈بb; [B1, C1, V5]; xn--b-bcba413a2w8b; ; ; # ̈̈بb
-aب̈‌̈; ; [B5, B6, C1]; xn--a-ccba213a5w8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈
-Aب̈‌̈; aب̈‌̈; [B5, B6, C1]; xn--a-ccba213a5w8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈
-xn--a-ccba213a; aب̈̈; [B5, B6]; xn--a-ccba213a; ; ; # aب̈̈
-xn--a-ccba213a5w8b; aب̈‌̈; [B5, B6, C1]; xn--a-ccba213a5w8b; ; ; # aب̈̈
-aب̈‌̈بb; ; [B5]; xn--ab-uuba211bca8057b; ; xn--ab-uuba211bca; # aب̈̈بb
-Aب̈‌̈بB; aب̈‌̈بb; [B5]; xn--ab-uuba211bca8057b; ; xn--ab-uuba211bca; # aب̈̈بb
-Aب̈‌̈بb; aب̈‌̈بb; [B5]; xn--ab-uuba211bca8057b; ; xn--ab-uuba211bca; # aب̈̈بb
-xn--ab-uuba211bca; aب̈̈بb; [B5]; xn--ab-uuba211bca; ; ; # aب̈̈بb
-xn--ab-uuba211bca8057b; aب̈‌̈بb; [B5]; xn--ab-uuba211bca8057b; ; ; # aب̈̈بb
-aâ€b; ; [C2]; xn--ab-m1t; ; ab; [] # ab
-Aâ€B; aâ€b; [C2]; xn--ab-m1t; ; ab; [] # ab
-Aâ€b; aâ€b; [C2]; xn--ab-m1t; ; ab; [] # ab
-xn--ab-m1t; aâ€b; [C2]; xn--ab-m1t; ; ; # ab
-aà¥â€b; ; ; xn--ab-fsf014u; ; xn--ab-fsf; # aà¥b
-Aà¥â€B; aà¥â€b; ; xn--ab-fsf014u; ; xn--ab-fsf; # aà¥b
-Aà¥â€b; aà¥â€b; ; xn--ab-fsf014u; ; xn--ab-fsf; # aà¥b
-xn--ab-fsf014u; aà¥â€b; ; xn--ab-fsf014u; ; ; # aà¥b
-̈â€ÌˆØ¨b; ; [B1, C2, V5]; xn--b-bcba413a7w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb
-̈â€ÌˆØ¨B; ̈â€ÌˆØ¨b; [B1, C2, V5]; xn--b-bcba413a7w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb
-xn--b-bcba413a7w8b; ̈â€ÌˆØ¨b; [B1, C2, V5]; xn--b-bcba413a7w8b; ; ; # ̈̈بb
-aب̈â€Ìˆ; ; [B5, B6, C2]; xn--a-ccba213abx8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈
-Aب̈â€Ìˆ; aب̈â€Ìˆ; [B5, B6, C2]; xn--a-ccba213abx8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈
-xn--a-ccba213abx8b; aب̈â€Ìˆ; [B5, B6, C2]; xn--a-ccba213abx8b; ; ; # aب̈̈
-aب̈â€ÌˆØ¨b; ; [B5, C2]; xn--ab-uuba211bca5157b; ; xn--ab-uuba211bca; [B5] # aب̈̈بb
-Aب̈â€ÌˆØ¨B; aب̈â€ÌˆØ¨b; [B5, C2]; xn--ab-uuba211bca5157b; ; xn--ab-uuba211bca; [B5] # aب̈̈بb
-Aب̈â€ÌˆØ¨b; aب̈â€ÌˆØ¨b; [B5, C2]; xn--ab-uuba211bca5157b; ; xn--ab-uuba211bca; [B5] # aب̈̈بb
-xn--ab-uuba211bca5157b; aب̈â€ÌˆØ¨b; [B5, C2]; xn--ab-uuba211bca5157b; ; ; # aب̈̈بb
+xn--ab-j1t; a\u200Cb; [C1]; xn--ab-j1t; ; ; # ab
+a\u094D\u200Cb; ; ; xn--ab-fsf604u; ; xn--ab-fsf; # aà¥b
+A\u094D\u200CB; a\u094D\u200Cb; ; xn--ab-fsf604u; ; xn--ab-fsf; # aà¥b
+A\u094D\u200Cb; a\u094D\u200Cb; ; xn--ab-fsf604u; ; xn--ab-fsf; # aà¥b
+xn--ab-fsf; a\u094Db; ; xn--ab-fsf; ; ; # aà¥b
+a\u094Db; ; ; xn--ab-fsf; ; ; # aà¥b
+A\u094DB; a\u094Db; ; xn--ab-fsf; ; ; # aà¥b
+A\u094Db; a\u094Db; ; xn--ab-fsf; ; ; # aà¥b
+xn--ab-fsf604u; a\u094D\u200Cb; ; xn--ab-fsf604u; ; ; # aà¥b
+\u0308\u200C\u0308\u0628b; ; [B1, C1, V5]; xn--b-bcba413a2w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb
+\u0308\u200C\u0308\u0628B; \u0308\u200C\u0308\u0628b; [B1, C1, V5]; xn--b-bcba413a2w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb
+xn--b-bcba413a; \u0308\u0308\u0628b; [B1, V5]; xn--b-bcba413a; ; ; # ̈̈بb
+xn--b-bcba413a2w8b; \u0308\u200C\u0308\u0628b; [B1, C1, V5]; xn--b-bcba413a2w8b; ; ; # ̈̈بb
+a\u0628\u0308\u200C\u0308; ; [B5, B6, C1]; xn--a-ccba213a5w8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈
+A\u0628\u0308\u200C\u0308; a\u0628\u0308\u200C\u0308; [B5, B6, C1]; xn--a-ccba213a5w8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈
+xn--a-ccba213a; a\u0628\u0308\u0308; [B5, B6]; xn--a-ccba213a; ; ; # aب̈̈
+xn--a-ccba213a5w8b; a\u0628\u0308\u200C\u0308; [B5, B6, C1]; xn--a-ccba213a5w8b; ; ; # aب̈̈
+a\u0628\u0308\u200C\u0308\u0628b; ; [B5]; xn--ab-uuba211bca8057b; ; xn--ab-uuba211bca; # aب̈̈بb
+A\u0628\u0308\u200C\u0308\u0628B; a\u0628\u0308\u200C\u0308\u0628b; [B5]; xn--ab-uuba211bca8057b; ; xn--ab-uuba211bca; # aب̈̈بb
+A\u0628\u0308\u200C\u0308\u0628b; a\u0628\u0308\u200C\u0308\u0628b; [B5]; xn--ab-uuba211bca8057b; ; xn--ab-uuba211bca; # aب̈̈بb
+xn--ab-uuba211bca; a\u0628\u0308\u0308\u0628b; [B5]; xn--ab-uuba211bca; ; ; # aب̈̈بb
+xn--ab-uuba211bca8057b; a\u0628\u0308\u200C\u0308\u0628b; [B5]; xn--ab-uuba211bca8057b; ; ; # aب̈̈بb
+a\u200Db; ; [C2]; xn--ab-m1t; ; ab; [] # ab
+A\u200DB; a\u200Db; [C2]; xn--ab-m1t; ; ab; [] # ab
+A\u200Db; a\u200Db; [C2]; xn--ab-m1t; ; ab; [] # ab
+xn--ab-m1t; a\u200Db; [C2]; xn--ab-m1t; ; ; # ab
+a\u094D\u200Db; ; ; xn--ab-fsf014u; ; xn--ab-fsf; # aà¥b
+A\u094D\u200DB; a\u094D\u200Db; ; xn--ab-fsf014u; ; xn--ab-fsf; # aà¥b
+A\u094D\u200Db; a\u094D\u200Db; ; xn--ab-fsf014u; ; xn--ab-fsf; # aà¥b
+xn--ab-fsf014u; a\u094D\u200Db; ; xn--ab-fsf014u; ; ; # aà¥b
+\u0308\u200D\u0308\u0628b; ; [B1, C2, V5]; xn--b-bcba413a7w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb
+\u0308\u200D\u0308\u0628B; \u0308\u200D\u0308\u0628b; [B1, C2, V5]; xn--b-bcba413a7w8b; ; xn--b-bcba413a; [B1, V5] # ̈̈بb
+xn--b-bcba413a7w8b; \u0308\u200D\u0308\u0628b; [B1, C2, V5]; xn--b-bcba413a7w8b; ; ; # ̈̈بb
+a\u0628\u0308\u200D\u0308; ; [B5, B6, C2]; xn--a-ccba213abx8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈
+A\u0628\u0308\u200D\u0308; a\u0628\u0308\u200D\u0308; [B5, B6, C2]; xn--a-ccba213abx8b; ; xn--a-ccba213a; [B5, B6] # aب̈̈
+xn--a-ccba213abx8b; a\u0628\u0308\u200D\u0308; [B5, B6, C2]; xn--a-ccba213abx8b; ; ; # aب̈̈
+a\u0628\u0308\u200D\u0308\u0628b; ; [B5, C2]; xn--ab-uuba211bca5157b; ; xn--ab-uuba211bca; [B5] # aب̈̈بb
+A\u0628\u0308\u200D\u0308\u0628B; a\u0628\u0308\u200D\u0308\u0628b; [B5, C2]; xn--ab-uuba211bca5157b; ; xn--ab-uuba211bca; [B5] # aب̈̈بb
+A\u0628\u0308\u200D\u0308\u0628b; a\u0628\u0308\u200D\u0308\u0628b; [B5, C2]; xn--ab-uuba211bca5157b; ; xn--ab-uuba211bca; [B5] # aب̈̈بb
+xn--ab-uuba211bca5157b; a\u0628\u0308\u200D\u0308\u0628b; [B5, C2]; xn--ab-uuba211bca5157b; ; ; # aب̈̈بb
# SELECTED TESTS
@@ -198,67 +198,69 @@ xn--pkf; ᧚; ; xn--pkf; ; ; # ᧚
ê­ ; ; ; xn--3y9a; ; ; # ê­ 
xn--3y9a; ê­ ; ; xn--3y9a; ; ; # ê­ 
1234567890ä1234567890123456789012345678901234567890123456; ; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456
-1234567890ä1234567890123456789012345678901234567890123456; 1234567890ä1234567890123456789012345678901234567890123456; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456
-1234567890Ä1234567890123456789012345678901234567890123456; 1234567890ä1234567890123456789012345678901234567890123456; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456
+1234567890a\u03081234567890123456789012345678901234567890123456; 1234567890ä1234567890123456789012345678901234567890123456; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456
+1234567890A\u03081234567890123456789012345678901234567890123456; 1234567890ä1234567890123456789012345678901234567890123456; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456
1234567890Ä1234567890123456789012345678901234567890123456; 1234567890ä1234567890123456789012345678901234567890123456; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456
xn--12345678901234567890123456789012345678901234567890123456-fxe; 1234567890ä1234567890123456789012345678901234567890123456; ; xn--12345678901234567890123456789012345678901234567890123456-fxe; [A4_2]; ; # 1234567890ä1234567890123456789012345678901234567890123456
www.eXample.cOm; www.example.com; ; ; ; ; # www.example.com
Bücher.de; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de
-Bücher.de; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de
-bücher.de; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de
+Bu\u0308cher.de; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de
+bu\u0308cher.de; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de
bücher.de; ; ; xn--bcher-kva.de; ; ; # bücher.de
BÜCHER.DE; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de
-BÜCHER.DE; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de
+BU\u0308CHER.DE; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de
xn--bcher-kva.de; bücher.de; ; xn--bcher-kva.de; ; ; # bücher.de
ÖBB; öbb; ; xn--bb-eka; ; ; # öbb
-ÖBB; öbb; ; xn--bb-eka; ; ; # öbb
-öbb; öbb; ; xn--bb-eka; ; ; # öbb
+O\u0308BB; öbb; ; xn--bb-eka; ; ; # öbb
+o\u0308bb; öbb; ; xn--bb-eka; ; ; # öbb
öbb; ; ; xn--bb-eka; ; ; # öbb
Öbb; öbb; ; xn--bb-eka; ; ; # öbb
-Öbb; öbb; ; xn--bb-eka; ; ; # öbb
+O\u0308bb; öbb; ; xn--bb-eka; ; ; # öbb
xn--bb-eka; öbb; ; xn--bb-eka; ; ; # öbb
+FAẞ.de; faß.de; ; xn--fa-hia.de; ; fass.de; # faß.de
+FAẞ.DE; faß.de; ; xn--fa-hia.de; ; fass.de; # faß.de
βόλος.com; ; ; xn--nxasmm1c.com; ; xn--nxasmq6b.com; # βόλος.com
-βοÌλος.com; βόλος.com; ; xn--nxasmm1c.com; ; xn--nxasmq6b.com; # βόλος.com
-ΒΟÌΛΟΣ.COM; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com
+βο\u0301λος.com; βόλος.com; ; xn--nxasmm1c.com; ; xn--nxasmq6b.com; # βόλος.com
+ΒΟ\u0301ΛΟΣ.COM; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com
ΒΌΛΟΣ.COM; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com
βόλοσ.com; ; ; xn--nxasmq6b.com; ; ; # βόλοσ.com
-βοÌλοσ.com; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com
-ΒοÌλοσ.com; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com
+βο\u0301λοσ.com; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com
+Βο\u0301λοσ.com; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com
Βόλοσ.com; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com
xn--nxasmq6b.com; βόλοσ.com; ; xn--nxasmq6b.com; ; ; # βόλοσ.com
-ΒοÌλος.com; βόλος.com; ; xn--nxasmm1c.com; ; xn--nxasmq6b.com; # βόλος.com
+Βο\u0301λος.com; βόλος.com; ; xn--nxasmm1c.com; ; xn--nxasmq6b.com; # βόλος.com
Βόλος.com; βόλος.com; ; xn--nxasmm1c.com; ; xn--nxasmq6b.com; # βόλος.com
xn--nxasmm1c.com; βόλος.com; ; xn--nxasmm1c.com; ; ; # βόλος.com
xn--nxasmm1c; βόλος; ; xn--nxasmm1c; ; ; # βόλος
βόλος; ; ; xn--nxasmm1c; ; xn--nxasmq6b; # βόλος
-βοÌλος; βόλος; ; xn--nxasmm1c; ; xn--nxasmq6b; # βόλος
-ΒΟÌΛΟΣ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ
+βο\u0301λος; βόλος; ; xn--nxasmm1c; ; xn--nxasmq6b; # βόλος
+ΒΟ\u0301ΛΟΣ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ
ΒΌΛΟΣ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ
βόλοσ; ; ; xn--nxasmq6b; ; ; # βόλοσ
-βοÌλοσ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ
-ΒοÌλοσ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ
+βο\u0301λοσ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ
+Βο\u0301λοσ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ
Βόλοσ; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ
xn--nxasmq6b; βόλοσ; ; xn--nxasmq6b; ; ; # βόλοσ
Βόλος; βόλος; ; xn--nxasmm1c; ; xn--nxasmq6b; # βόλος
-ΒοÌλος; βόλος; ; xn--nxasmm1c; ; xn--nxasmq6b; # βόλος
-www.à·à·Šâ€à¶»à·“.com; ; ; www.xn--10cl1a0b660p.com; ; www.xn--10cl1a0b.com; # www.à·à·Šà¶»à·“.com
-WWW.à·à·Šâ€à¶»à·“.COM; www.à·à·Šâ€à¶»à·“.com; ; www.xn--10cl1a0b660p.com; ; www.xn--10cl1a0b.com; # www.à·à·Šà¶»à·“.com
-Www.à·à·Šâ€à¶»à·“.com; www.à·à·Šâ€à¶»à·“.com; ; www.xn--10cl1a0b660p.com; ; www.xn--10cl1a0b.com; # www.à·à·Šà¶»à·“.com
-www.xn--10cl1a0b.com; www.à·à·Šà¶»à·“.com; ; www.xn--10cl1a0b.com; ; ; # www.à·à·Šà¶»à·“.com
-www.à·à·Šà¶»à·“.com; ; ; www.xn--10cl1a0b.com; ; ; # www.à·à·Šà¶»à·“.com
-WWW.à·à·Šà¶»à·“.COM; www.à·à·Šà¶»à·“.com; ; www.xn--10cl1a0b.com; ; ; # www.à·à·Šà¶»à·“.com
-Www.à·à·Šà¶»à·“.com; www.à·à·Šà¶»à·“.com; ; www.xn--10cl1a0b.com; ; ; # www.à·à·Šà¶»à·“.com
-www.xn--10cl1a0b660p.com; www.à·à·Šâ€à¶»à·“.com; ; www.xn--10cl1a0b660p.com; ; ; # www.à·à·Šà¶»à·“.com
-نامه‌ای; ; ; xn--mgba3gch31f060k; ; xn--mgba3gch31f; # نامهای
-xn--mgba3gch31f; نامهای; ; xn--mgba3gch31f; ; ; # نامهای
-نامهای; ; ; xn--mgba3gch31f; ; ; # نامهای
-xn--mgba3gch31f060k; نامه‌ای; ; xn--mgba3gch31f060k; ; ; # نامهای
-xn--mgba3gch31f060k.com; نامه‌ای.com; ; xn--mgba3gch31f060k.com; ; ; # نامهای.com
-نامه‌ای.com; ; ; xn--mgba3gch31f060k.com; ; xn--mgba3gch31f.com; # نامهای.com
-نامه‌ای.COM; نامه‌ای.com; ; xn--mgba3gch31f060k.com; ; xn--mgba3gch31f.com; # نامهای.com
-xn--mgba3gch31f.com; نامهای.com; ; xn--mgba3gch31f.com; ; ; # نامهای.com
-نامهای.com; ; ; xn--mgba3gch31f.com; ; ; # نامهای.com
-نامهای.COM; نامهای.com; ; xn--mgba3gch31f.com; ; ; # نامهای.com
+Βο\u0301λος; βόλος; ; xn--nxasmm1c; ; xn--nxasmq6b; # βόλος
+www.à·\u0DCA\u200Dර\u0DD3.com; ; ; www.xn--10cl1a0b660p.com; ; www.xn--10cl1a0b.com; # www.à·à·Šà¶»à·“.com
+WWW.à·\u0DCA\u200Dර\u0DD3.COM; www.à·\u0DCA\u200Dර\u0DD3.com; ; www.xn--10cl1a0b660p.com; ; www.xn--10cl1a0b.com; # www.à·à·Šà¶»à·“.com
+Www.à·\u0DCA\u200Dර\u0DD3.com; www.à·\u0DCA\u200Dර\u0DD3.com; ; www.xn--10cl1a0b660p.com; ; www.xn--10cl1a0b.com; # www.à·à·Šà¶»à·“.com
+www.xn--10cl1a0b.com; www.à·\u0DCAර\u0DD3.com; ; www.xn--10cl1a0b.com; ; ; # www.à·à·Šà¶»à·“.com
+www.à·\u0DCAර\u0DD3.com; ; ; www.xn--10cl1a0b.com; ; ; # www.à·à·Šà¶»à·“.com
+WWW.à·\u0DCAර\u0DD3.COM; www.à·\u0DCAර\u0DD3.com; ; www.xn--10cl1a0b.com; ; ; # www.à·à·Šà¶»à·“.com
+Www.à·\u0DCAර\u0DD3.com; www.à·\u0DCAර\u0DD3.com; ; www.xn--10cl1a0b.com; ; ; # www.à·à·Šà¶»à·“.com
+www.xn--10cl1a0b660p.com; www.à·\u0DCA\u200Dර\u0DD3.com; ; www.xn--10cl1a0b660p.com; ; ; # www.à·à·Šà¶»à·“.com
+\u0646\u0627\u0645\u0647\u200C\u0627\u06CC; ; ; xn--mgba3gch31f060k; ; xn--mgba3gch31f; # نامهای
+xn--mgba3gch31f; \u0646\u0627\u0645\u0647\u0627\u06CC; ; xn--mgba3gch31f; ; ; # نامهای
+\u0646\u0627\u0645\u0647\u0627\u06CC; ; ; xn--mgba3gch31f; ; ; # نامهای
+xn--mgba3gch31f060k; \u0646\u0627\u0645\u0647\u200C\u0627\u06CC; ; xn--mgba3gch31f060k; ; ; # نامهای
+xn--mgba3gch31f060k.com; \u0646\u0627\u0645\u0647\u200C\u0627\u06CC.com; ; xn--mgba3gch31f060k.com; ; ; # نامهای.com
+\u0646\u0627\u0645\u0647\u200C\u0627\u06CC.com; ; ; xn--mgba3gch31f060k.com; ; xn--mgba3gch31f.com; # نامهای.com
+\u0646\u0627\u0645\u0647\u200C\u0627\u06CC.COM; \u0646\u0627\u0645\u0647\u200C\u0627\u06CC.com; ; xn--mgba3gch31f060k.com; ; xn--mgba3gch31f.com; # نامهای.com
+xn--mgba3gch31f.com; \u0646\u0627\u0645\u0647\u0627\u06CC.com; ; xn--mgba3gch31f.com; ; ; # نامهای.com
+\u0646\u0627\u0645\u0647\u0627\u06CC.com; ; ; xn--mgba3gch31f.com; ; ; # نامهای.com
+\u0646\u0627\u0645\u0647\u0627\u06CC.COM; \u0646\u0627\u0645\u0647\u0627\u06CC.com; ; xn--mgba3gch31f.com; ; ; # نامهای.com
a.b.c。d。; a.b.c.d.; ; ; ; ; # a.b.c.d.
a.b.c。d。; a.b.c.d.; ; ; ; ; # a.b.c.d.
A.B.C。D。; a.b.c.d.; ; ; ; ; # a.b.c.d.
@@ -266,37 +268,37 @@ A.b.c。D。; a.b.c.d.; ; ; ; ; # a.b.c.d.
a.b.c.d.; ; ; ; ; ; # a.b.c.d.
A.B.C。D。; a.b.c.d.; ; ; ; ; # a.b.c.d.
A.b.c。D。; a.b.c.d.; ; ; ; ; # a.b.c.d.
-Ü.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
+U\u0308.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
Ü.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
ü.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
-ü.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
-Ü.XN--TDA; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
+u\u0308.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
+U\u0308.XN--TDA; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
Ü.XN--TDA; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
Ü.xn--Tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
-Ü.xn--Tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
+U\u0308.xn--Tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
xn--tda.xn--tda; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
ü.ü; ; ; xn--tda.xn--tda; ; ; # ü.ü
-ü.ü; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
-Ü.Ü; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
+u\u0308.u\u0308; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
+U\u0308.U\u0308; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
Ü.Ü; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
Ü.ü; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
-Ü.ü; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
-xn--u-ccb; ü; [V1]; xn--u-ccb; ; ; # ü
-aâ’ˆcom; ; [P1, V6]; xn--acom-0w1b; ; ; # aâ’ˆcom
+U\u0308.u\u0308; ü.ü; ; xn--tda.xn--tda; ; ; # ü.ü
+xn--u-ccb; u\u0308; [V1]; xn--u-ccb; ; ; # ü
+aâ’ˆcom; ; [V6]; xn--acom-0w1b; ; ; # aâ’ˆcom
a1.com; ; ; ; ; ; # a1.com
-Aâ’ˆCOM; aâ’ˆcom; [P1, V6]; xn--acom-0w1b; ; ; # aâ’ˆcom
-Aâ’ˆCom; aâ’ˆcom; [P1, V6]; xn--acom-0w1b; ; ; # aâ’ˆcom
+Aâ’ˆCOM; aâ’ˆcom; [V6]; xn--acom-0w1b; ; ; # aâ’ˆcom
+Aâ’ˆCom; aâ’ˆcom; [V6]; xn--acom-0w1b; ; ; # aâ’ˆcom
xn--acom-0w1b; aâ’ˆcom; [V6]; xn--acom-0w1b; ; ; # aâ’ˆcom
xn--a-ecp.ru; aâ’ˆ.ru; [V6]; xn--a-ecp.ru; ; ; # aâ’ˆ.ru
xn--0.pt; ; [P4]; ; ; ; # xn--0.pt
-xn--a.pt; €.pt; [V6]; xn--a.pt; ; ; # .pt
+xn--a.pt; \u0080.pt; [V6]; xn--a.pt; ; ; # .pt
xn--a-Ä.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
-xn--a-Ä.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
-xn--a-ä.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
+xn--a-A\u0308.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
+xn--a-a\u0308.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
xn--a-ä.pt; ; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
XN--A-Ä.PT; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
-XN--A-Ä.PT; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
-Xn--A-Ä.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
+XN--A-A\u0308.PT; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
+Xn--A-A\u0308.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
Xn--A-Ä.pt; xn--a-ä.pt; [P4]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
xn--xn--a--gua.pt; xn--a-ä.pt; [V2]; xn--xn--a--gua.pt; ; ; # xn--a-ä.pt
日本語。JP; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp
@@ -311,42 +313,42 @@ xn--wgv71a119e.jp; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp
日本語。Jï½; 日本語.jp; ; xn--wgv71a119e.jp; ; ; # 日本語.jp
☕; ; ; xn--53h; ; ; # ☕
xn--53h; ☕; ; xn--53h; ; ; # ☕
-1.aß‌â€b‌â€cßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz; ; [C1, C2]; 1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.aßbcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz
-1.ASS‌â€B‌â€CSSSSSSSSDΣΣSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSSÌ‚SSZ; 1.ass‌â€b‌â€cssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
-1.ASS‌â€B‌â€CSSSSSSSSDΣΣSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSÅœSSZ; 1.ass‌â€b‌â€cssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
-1.ass‌â€b‌â€cssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
-1.ass‌â€b‌â€cssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssssÌ‚ssz; 1.ass‌â€b‌â€cssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
-1.Ass‌â€b‌â€cssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssssÌ‚ssz; 1.ass‌â€b‌â€cssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
-1.Ass‌â€b‌â€cssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; 1.ass‌â€b‌â€cssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
+1.aß\u200C\u200Db\u200C\u200Dcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß\u0302ßz; ; [C1, C2]; 1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.aßbcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz
+1.ASS\u200C\u200DB\u200C\u200DCSSSSSSSSDΣΣSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSS\u0302SSZ; 1.ass\u200C\u200Db\u200C\u200DcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
+1.ASS\u200C\u200DB\u200C\u200DCSSSSSSSSDΣΣSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSÅœSSZ; 1.ass\u200C\u200Db\u200C\u200DcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
+1.ass\u200C\u200Db\u200C\u200DcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
+1.ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz; 1.ass\u200C\u200Db\u200C\u200DcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
+1.Ass\u200C\u200Db\u200C\u200Dcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz; 1.ass\u200C\u200Db\u200C\u200DcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
+1.Ass\u200C\u200Db\u200C\u200DcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; 1.ass\u200C\u200Db\u200C\u200DcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
-1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssssÌ‚ssz; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
-1.ASSBCSSSSSSSSDΣΣSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSSÌ‚SSZ; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
+1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
+1.ASSBCSSSSSSSSDΣΣSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSS\u0302SSZ; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
1.ASSBCSSSSSSSSDΣΣSSSSSSSSSSSSSSSSESSSSSSSSSSSSSSSSSSSSXSSSSSSSSSSSSSSSSSSSSYSSSSSSSSSSSSSSSÅœSSZ; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
1.AssbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
-1.AssbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssssÌ‚ssz; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
-1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; 1.ass‌â€b‌â€cssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
-1.Aß‌â€b‌â€cßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz; 1.aß‌â€b‌â€cßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz; [C1, C2]; 1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.aßbcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz
-1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; 1.aß‌â€b‌â€cßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz; [C1, C2]; 1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; [C1, C2, A4_2]; ; # 1.aßbcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz
-‌xâ€n‌-â€-bß; ; [C1, C2]; xn--xn--b-pqa5796ccahd; ; xn--bss; [] # xn--bß
-‌Xâ€N‌-â€-BSS; ‌xâ€n‌-â€-bss; [C1, C2]; xn--xn--bss-7z6ccid; ; xn--bss; [] # xn--bss
-‌xâ€n‌-â€-bss; ; [C1, C2]; xn--xn--bss-7z6ccid; ; xn--bss; [] # xn--bss
-‌Xâ€n‌-â€-Bss; ‌xâ€n‌-â€-bss; [C1, C2]; xn--xn--bss-7z6ccid; ; xn--bss; [] # xn--bss
+1.Assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssyssssssssssssssss\u0302ssz; 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; ; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
+1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; 1.ass\u200C\u200Db\u200C\u200DcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz; [C1, C2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa69989dba9gc; [C1, C2, A4_2]; ; # 1.assbcssssssssdσσssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssÅssz
+1.Aß\u200C\u200Db\u200C\u200Dcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß\u0302ßz; 1.aß\u200C\u200Db\u200C\u200Dcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß\u0302ßz; [C1, C2]; 1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; [C1, C2, A4_2]; 1.xn--assbcssssssssdssssssssssssssssessssssssssssssssssssxssssssssssssssssssssysssssssssssssssssz-pxq1419aa; [A4_2] # 1.aßbcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz
+1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; 1.aß\u200C\u200Db\u200C\u200Dcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß\u0302ßz; [C1, C2]; 1.xn--abcdexyz-qyacaaabaaaaaaabaaaaaaaaabaaaaaaaaabaaaaaaaa010ze2isb1140zba8cc; [C1, C2, A4_2]; ; # 1.aßbcßßßßdςσßßßßßßßßeßßßßßßßßßßxßßßßßßßßßßyßßßßßßßß̂ßz
+\u200Cx\u200Dn\u200C-\u200D-bß; ; [C1, C2]; xn--xn--b-pqa5796ccahd; ; xn--bss; [] # xn--bß
+\u200CX\u200DN\u200C-\u200D-BSS; \u200Cx\u200Dn\u200C-\u200D-bss; [C1, C2]; xn--xn--bss-7z6ccid; ; xn--bss; [] # xn--bss
+\u200Cx\u200Dn\u200C-\u200D-bss; ; [C1, C2]; xn--xn--bss-7z6ccid; ; xn--bss; [] # xn--bss
+\u200CX\u200Dn\u200C-\u200D-Bss; \u200Cx\u200Dn\u200C-\u200D-bss; [C1, C2]; xn--xn--bss-7z6ccid; ; xn--bss; [] # xn--bss
xn--bss; 夙; ; xn--bss; ; ; # 夙
夙; ; ; xn--bss; ; ; # 夙
-xn--xn--bss-7z6ccid; ‌xâ€n‌-â€-bss; [C1, C2]; xn--xn--bss-7z6ccid; ; ; # xn--bss
-‌Xâ€n‌-â€-Bß; ‌xâ€n‌-â€-bß; [C1, C2]; xn--xn--b-pqa5796ccahd; ; xn--bss; [] # xn--bß
-xn--xn--b-pqa5796ccahd; ‌xâ€n‌-â€-bß; [C1, C2]; xn--xn--b-pqa5796ccahd; ; ; # xn--bß
-Ë£Íℕ​﹣­ï¼á Œâ„¬ï¸€Å¿â¤ð”°ó ‡¯ï¬„; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
-xÍN​-­-á ŒB︀sâ¤s󠇯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
-xÍn​-­-á Œb︀sâ¤s󠇯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
-XÍN​-­-á ŒB︀Sâ¤S󠇯FFL; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
-XÍn​-­-á ŒB︀sâ¤s󠇯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
+xn--xn--bss-7z6ccid; \u200Cx\u200Dn\u200C-\u200D-bss; [C1, C2]; xn--xn--bss-7z6ccid; ; ; # xn--bss
+\u200CX\u200Dn\u200C-\u200D-Bß; \u200Cx\u200Dn\u200C-\u200D-bß; [C1, C2]; xn--xn--b-pqa5796ccahd; ; xn--bss; [] # xn--bß
+xn--xn--b-pqa5796ccahd; \u200Cx\u200Dn\u200C-\u200D-bß; [C1, C2]; xn--xn--b-pqa5796ccahd; ; ; # xn--bß
+Ë£\u034Fâ„•\u200Bï¹£\u00ADï¼\u180Cℬ\uFE00Å¿\u2064ð”°ó ‡¯ï¬„; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
+x\u034FN\u200B-\u00AD-\u180CB\uFE00s\u2064s󠇯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
+x\u034Fn\u200B-\u00AD-\u180Cb\uFE00s\u2064s󠇯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
+X\u034FN\u200B-\u00AD-\u180CB\uFE00S\u2064S󠇯FFL; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
+X\u034Fn\u200B-\u00AD-\u180CB\uFE00s\u2064s󠇯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
xn--bssffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
夡夞夜夙; ; ; xn--bssffl; ; ; # 夡夞夜夙
-Ë£Íℕ​﹣­ï¼á Œâ„¬ï¸€Sâ¤ð”°ó ‡¯FFL; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
-xÍN​-­-á ŒB︀Sâ¤s󠇯FFL; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
-Ë£Íℕ​﹣­ï¼á Œâ„¬ï¸€sâ¤ð”°ó ‡¯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
+Ë£\u034Fâ„•\u200Bï¹£\u00ADï¼\u180Cℬ\uFE00S\u2064ð”°ó ‡¯FFL; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
+x\u034FN\u200B-\u00AD-\u180CB\uFE00S\u2064s󠇯FFL; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
+Ë£\u034Fâ„•\u200Bï¹£\u00ADï¼\u180Cℬ\uFE00s\u2064ð”°ó ‡¯ffl; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; ; ; ; # 123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; ; ; ; # 123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.
123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; ; ; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012
@@ -354,523 +356,527 @@ xÍN​-­-á ŒB︀Sâ¤s󠇯FFL; 夡夞夜夙; ; xn--bssffl; ; ; # 夡夞夜夙
123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; ; ; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.
123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; ; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901234.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
ä1234567890123456789012345678901234567890123456789012345; ; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345
-ä1234567890123456789012345678901234567890123456789012345; ä1234567890123456789012345678901234567890123456789012345; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345
-Ä1234567890123456789012345678901234567890123456789012345; ä1234567890123456789012345678901234567890123456789012345; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345
+a\u03081234567890123456789012345678901234567890123456789012345; ä1234567890123456789012345678901234567890123456789012345; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345
+A\u03081234567890123456789012345678901234567890123456789012345; ä1234567890123456789012345678901234567890123456789012345; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345
Ä1234567890123456789012345678901234567890123456789012345; ä1234567890123456789012345678901234567890123456789012345; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345
xn--1234567890123456789012345678901234567890123456789012345-9te; ä1234567890123456789012345678901234567890123456789012345; ; xn--1234567890123456789012345678901234567890123456789012345-9te; ; ; # ä1234567890123456789012345678901234567890123456789012345
123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
-123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
-123456789012345678901234567890123456789012345678901234567890123.1234567890Ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
+123456789012345678901234567890123456789012345678901234567890123.1234567890a\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
+123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
123456789012345678901234567890123456789012345678901234567890123.1234567890Ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.
-123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.
-123456789012345678901234567890123456789012345678901234567890123.1234567890Ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.
+123456789012345678901234567890123456789012345678901234567890123.1234567890a\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.
+123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.
123456789012345678901234567890123456789012345678901234567890123.1234567890Ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.
123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.; ; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901.
123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012
-123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012
-123456789012345678901234567890123456789012345678901234567890123.1234567890Ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012
+123456789012345678901234567890123456789012345678901234567890123.1234567890a\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012
+123456789012345678901234567890123456789012345678901234567890123.1234567890A\u0308123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012
123456789012345678901234567890123456789012345678901234567890123.1234567890Ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012
123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; ; 123456789012345678901234567890123456789012345678901234567890123.xn--1234567890123456789012345678901234567890123456789012345-kue.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012; [A4_1]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä123456789012345678901234567890123456789012345.123456789012345678901234567890123456789012345678901234567890123.12345678901234567890123456789012345678901234567890123456789012
123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890
-123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890
-123456789012345678901234567890123456789012345678901234567890123.1234567890Ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890
+123456789012345678901234567890123456789012345678901234567890123.1234567890a\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890
+123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890
123456789012345678901234567890123456789012345678901234567890123.1234567890Ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890
123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890
123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.
-123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.
-123456789012345678901234567890123456789012345678901234567890123.1234567890Ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.
+123456789012345678901234567890123456789012345678901234567890123.1234567890a\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.
+123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.
123456789012345678901234567890123456789012345678901234567890123.1234567890Ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.
123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.; [A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.123456789012345678901234567890123456789012345678901234567890.
123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
-123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
-123456789012345678901234567890123456789012345678901234567890123.1234567890Ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
+123456789012345678901234567890123456789012345678901234567890123.1234567890a\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
+123456789012345678901234567890123456789012345678901234567890123.1234567890A\u03081234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
123456789012345678901234567890123456789012345678901234567890123.1234567890Ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; ; 123456789012345678901234567890123456789012345678901234567890123.xn--12345678901234567890123456789012345678901234567890123456-fxe.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901; [A4_1, A4_2]; ; # 123456789012345678901234567890123456789012345678901234567890123.1234567890ä1234567890123456789012345678901234567890123456.123456789012345678901234567890123456789012345678901234567890123.1234567890123456789012345678901234567890123456789012345678901
a.b..-q--a-.e; ; [V2, V3, X4_2]; ; [V2, V3, A4_2]; ; # a.b..-q--a-.e
a.b..-q--ä-.e; ; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e
-a.b..-q--ä-.e; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e
-A.B..-Q--Ä-.E; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e
+a.b..-q--a\u0308-.e; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e
+A.B..-Q--A\u0308-.E; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e
A.B..-Q--Ä-.E; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e
A.b..-Q--Ä-.E; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e
-A.b..-Q--Ä-.E; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e
+A.b..-Q--A\u0308-.E; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e
a.b..xn---q----jra.e; a.b..-q--ä-.e; [V2, V3, X4_2]; a.b..xn---q----jra.e; [V2, V3, A4_2]; ; # a.b..-q--ä-.e
a..c; ; [X4_2]; ; [A4_2]; ; # a..c
a.-b.; ; [V3]; ; ; ; # a.-b.
a.b-.c; ; [V3]; ; ; ; # a.b-.c
a.-.c; ; [V3]; ; ; ; # a.-.c
a.bc--de.f; ; [V2]; ; ; ; # a.bc--de.f
-ä.­.c; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c
-ä.­.c; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c
-Ä.­.C; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c
-Ä.­.C; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c
+ä.\u00AD.c; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c
+a\u0308.\u00AD.c; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c
+A\u0308.\u00AD.C; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c
+Ä.\u00AD.C; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c
xn--4ca..c; ä..c; [X4_2]; xn--4ca..c; [A4_2]; ; # ä..c
ä.-b.; ; [V3]; xn--4ca.-b.; ; ; # ä.-b.
-ä.-b.; ä.-b.; [V3]; xn--4ca.-b.; ; ; # ä.-b.
-Ä.-B.; ä.-b.; [V3]; xn--4ca.-b.; ; ; # ä.-b.
+a\u0308.-b.; ä.-b.; [V3]; xn--4ca.-b.; ; ; # ä.-b.
+A\u0308.-B.; ä.-b.; [V3]; xn--4ca.-b.; ; ; # ä.-b.
Ä.-B.; ä.-b.; [V3]; xn--4ca.-b.; ; ; # ä.-b.
xn--4ca.-b.; ä.-b.; [V3]; xn--4ca.-b.; ; ; # ä.-b.
ä.b-.c; ; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c
-ä.b-.c; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c
-Ä.B-.C; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c
+a\u0308.b-.c; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c
+A\u0308.B-.C; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c
Ä.B-.C; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c
Ä.b-.C; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c
-Ä.b-.C; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c
+A\u0308.b-.C; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c
xn--4ca.b-.c; ä.b-.c; [V3]; xn--4ca.b-.c; ; ; # ä.b-.c
ä.-.c; ; [V3]; xn--4ca.-.c; ; ; # ä.-.c
-ä.-.c; ä.-.c; [V3]; xn--4ca.-.c; ; ; # ä.-.c
-Ä.-.C; ä.-.c; [V3]; xn--4ca.-.c; ; ; # ä.-.c
+a\u0308.-.c; ä.-.c; [V3]; xn--4ca.-.c; ; ; # ä.-.c
+A\u0308.-.C; ä.-.c; [V3]; xn--4ca.-.c; ; ; # ä.-.c
Ä.-.C; ä.-.c; [V3]; xn--4ca.-.c; ; ; # ä.-.c
xn--4ca.-.c; ä.-.c; [V3]; xn--4ca.-.c; ; ; # ä.-.c
ä.bc--de.f; ; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f
-ä.bc--de.f; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f
-Ä.BC--DE.F; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f
+a\u0308.bc--de.f; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f
+A\u0308.BC--DE.F; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f
Ä.BC--DE.F; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f
Ä.bc--De.f; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f
-Ä.bc--De.f; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f
+A\u0308.bc--De.f; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f
xn--4ca.bc--de.f; ä.bc--de.f; [V2]; xn--4ca.bc--de.f; ; ; # ä.bc--de.f
-a.b.̈c.d; ; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d
-A.B.̈C.D; a.b.̈c.d; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d
-A.b.̈c.d; a.b.̈c.d; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d
-a.b.xn--c-bcb.d; a.b.̈c.d; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d
+a.b.\u0308c.d; ; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d
+A.B.\u0308C.D; a.b.\u0308c.d; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d
+A.b.\u0308c.d; a.b.\u0308c.d; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d
+a.b.xn--c-bcb.d; a.b.\u0308c.d; [V5]; a.b.xn--c-bcb.d; ; ; # a.b.̈c.d
A0; a0; ; ; ; ; # a0
0A; 0a; ; ; ; ; # 0a
-0A.×; 0a.×; [B1]; 0a.xn--4db; ; ; # 0a.×
-0a.×; ; [B1]; 0a.xn--4db; ; ; # 0a.×
-0a.xn--4db; 0a.×; [B1]; 0a.xn--4db; ; ; # 0a.×
-c.xn--0-eha.xn--4db; c.0ü.×; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
-b-.×; ; [B6, V3]; b-.xn--4db; ; ; # b-.×
-B-.×; b-.×; [B6, V3]; b-.xn--4db; ; ; # b-.×
-b-.xn--4db; b-.×; [B6, V3]; b-.xn--4db; ; ; # b-.×
-d.xn----dha.xn--4db; d.ü-.×; [B6, V3]; d.xn----dha.xn--4db; ; ; # d.ü-.×
-a×; ; [B5, B6]; xn--a-0hc; ; ; # a×
-A×; a×; [B5, B6]; xn--a-0hc; ; ; # a×
-xn--a-0hc; a×; [B5, B6]; xn--a-0hc; ; ; # a×
-×ׇ; ; ; xn--vdbr; ; ; # ×ׇ
-xn--vdbr; ×ׇ; ; xn--vdbr; ; ; # ×ׇ
-×9ׇ; ; ; xn--9-ihcz; ; ; # ×9ׇ
-xn--9-ihcz; ×9ׇ; ; xn--9-ihcz; ; ; # ×9ׇ
-×aׇ; ; [B2, B3]; xn--a-ihcz; ; ; # ×aׇ
-×Aׇ; ×aׇ; [B2, B3]; xn--a-ihcz; ; ; # ×aׇ
-xn--a-ihcz; ×aׇ; [B2, B3]; xn--a-ihcz; ; ; # ×aׇ
-×ת; ; ; xn--4db6c; ; ; # ×ת
-xn--4db6c; ×ת; ; xn--4db6c; ; ; # ×ת
-×׳ת; ; ; xn--4db6c0a; ; ; # ×׳ת
-xn--4db6c0a; ×׳ת; ; xn--4db6c0a; ; ; # ×׳ת
-a×Tz; a×tz; [B5]; xn--atz-qpe; ; ; # a×tz
-a×tz; ; [B5]; xn--atz-qpe; ; ; # a×tz
-A×TZ; a×tz; [B5]; xn--atz-qpe; ; ; # a×tz
-A×tz; a×tz; [B5]; xn--atz-qpe; ; ; # a×tz
-xn--atz-qpe; a×tz; [B5]; xn--atz-qpe; ; ; # a×tz
-×Tת; ×tת; [B2]; xn--t-zhc3f; ; ; # ×tת
-×tת; ; [B2]; xn--t-zhc3f; ; ; # ×tת
-xn--t-zhc3f; ×tת; [B2]; xn--t-zhc3f; ; ; # ×tת
-×7ת; ; ; xn--7-zhc3f; ; ; # ×7ת
-xn--7-zhc3f; ×7ת; ; xn--7-zhc3f; ; ; # ×7ת
-×٧ת; ; ; xn--4db6c6t; ; ; # ×٧ת
-xn--4db6c6t; ×٧ת; ; xn--4db6c6t; ; ; # ×٧ת
-a7Ù§z; ; [B5]; xn--a7z-06e; ; ; # a7Ù§z
-A7Ù§Z; a7Ù§z; [B5]; xn--a7z-06e; ; ; # a7Ù§z
-A7Ù§z; a7Ù§z; [B5]; xn--a7z-06e; ; ; # a7Ù§z
-xn--a7z-06e; a7Ù§z; [B5]; xn--a7z-06e; ; ; # a7Ù§z
-×7٧ת; ; [B4]; xn--7-zhc3fty; ; ; # ×7٧ת
-xn--7-zhc3fty; ×7٧ת; [B4]; xn--7-zhc3fty; ; ; # ×7٧ת
-ஹà¯â€; ; ; xn--dmc4b194h; ; xn--dmc4b; # ஹà¯
-xn--dmc4b; ஹà¯; ; xn--dmc4b; ; ; # ஹà¯
-ஹà¯; ; ; xn--dmc4b; ; ; # ஹà¯
-xn--dmc4b194h; ஹà¯â€; ; xn--dmc4b194h; ; ; # ஹà¯
-ஹâ€; ; [C2]; xn--dmc225h; ; xn--dmc; [] # ஹ
+0A.\u05D0; 0a.\u05D0; [B1]; 0a.xn--4db; ; ; # 0a.×
+0a.\u05D0; ; [B1]; 0a.xn--4db; ; ; # 0a.×
+0a.xn--4db; 0a.\u05D0; [B1]; 0a.xn--4db; ; ; # 0a.×
+c.xn--0-eha.xn--4db; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
+b-.\u05D0; ; [B6, V3]; b-.xn--4db; ; ; # b-.×
+B-.\u05D0; b-.\u05D0; [B6, V3]; b-.xn--4db; ; ; # b-.×
+b-.xn--4db; b-.\u05D0; [B6, V3]; b-.xn--4db; ; ; # b-.×
+d.xn----dha.xn--4db; d.ü-.\u05D0; [B6, V3]; d.xn----dha.xn--4db; ; ; # d.ü-.×
+a\u05D0; ; [B5, B6]; xn--a-0hc; ; ; # a×
+A\u05D0; a\u05D0; [B5, B6]; xn--a-0hc; ; ; # a×
+xn--a-0hc; a\u05D0; [B5, B6]; xn--a-0hc; ; ; # a×
+\u05D0\u05C7; ; ; xn--vdbr; ; ; # ×ׇ
+xn--vdbr; \u05D0\u05C7; ; xn--vdbr; ; ; # ×ׇ
+\u05D09\u05C7; ; ; xn--9-ihcz; ; ; # ×9ׇ
+xn--9-ihcz; \u05D09\u05C7; ; xn--9-ihcz; ; ; # ×9ׇ
+\u05D0a\u05C7; ; [B2, B3]; xn--a-ihcz; ; ; # ×aׇ
+\u05D0A\u05C7; \u05D0a\u05C7; [B2, B3]; xn--a-ihcz; ; ; # ×aׇ
+xn--a-ihcz; \u05D0a\u05C7; [B2, B3]; xn--a-ihcz; ; ; # ×aׇ
+\u05D0\u05EA; ; ; xn--4db6c; ; ; # ×ת
+xn--4db6c; \u05D0\u05EA; ; xn--4db6c; ; ; # ×ת
+\u05D0\u05F3\u05EA; ; ; xn--4db6c0a; ; ; # ×׳ת
+xn--4db6c0a; \u05D0\u05F3\u05EA; ; xn--4db6c0a; ; ; # ×׳ת
+a\u05D0Tz; a\u05D0tz; [B5]; xn--atz-qpe; ; ; # a×tz
+a\u05D0tz; ; [B5]; xn--atz-qpe; ; ; # a×tz
+A\u05D0TZ; a\u05D0tz; [B5]; xn--atz-qpe; ; ; # a×tz
+A\u05D0tz; a\u05D0tz; [B5]; xn--atz-qpe; ; ; # a×tz
+xn--atz-qpe; a\u05D0tz; [B5]; xn--atz-qpe; ; ; # a×tz
+\u05D0T\u05EA; \u05D0t\u05EA; [B2]; xn--t-zhc3f; ; ; # ×tת
+\u05D0t\u05EA; ; [B2]; xn--t-zhc3f; ; ; # ×tת
+xn--t-zhc3f; \u05D0t\u05EA; [B2]; xn--t-zhc3f; ; ; # ×tת
+\u05D07\u05EA; ; ; xn--7-zhc3f; ; ; # ×7ת
+xn--7-zhc3f; \u05D07\u05EA; ; xn--7-zhc3f; ; ; # ×7ת
+\u05D0\u0667\u05EA; ; ; xn--4db6c6t; ; ; # ×٧ת
+xn--4db6c6t; \u05D0\u0667\u05EA; ; xn--4db6c6t; ; ; # ×٧ת
+a7\u0667z; ; [B5]; xn--a7z-06e; ; ; # a7Ù§z
+A7\u0667Z; a7\u0667z; [B5]; xn--a7z-06e; ; ; # a7Ù§z
+A7\u0667z; a7\u0667z; [B5]; xn--a7z-06e; ; ; # a7Ù§z
+xn--a7z-06e; a7\u0667z; [B5]; xn--a7z-06e; ; ; # a7Ù§z
+\u05D07\u0667\u05EA; ; [B4]; xn--7-zhc3fty; ; ; # ×7٧ת
+xn--7-zhc3fty; \u05D07\u0667\u05EA; [B4]; xn--7-zhc3fty; ; ; # ×7٧ת
+ஹ\u0BCD\u200D; ; ; xn--dmc4b194h; ; xn--dmc4b; # ஹà¯
+xn--dmc4b; ஹ\u0BCD; ; xn--dmc4b; ; ; # ஹà¯
+ஹ\u0BCD; ; ; xn--dmc4b; ; ; # ஹà¯
+xn--dmc4b194h; ஹ\u0BCD\u200D; ; xn--dmc4b194h; ; ; # ஹà¯
+ஹ\u200D; ; [C2]; xn--dmc225h; ; xn--dmc; [] # ஹ
xn--dmc; ஹ; ; xn--dmc; ; ; # ஹ
ஹ; ; ; xn--dmc; ; ; # ஹ
-xn--dmc225h; ஹâ€; [C2]; xn--dmc225h; ; ; # ஹ
-â€; ; [C2]; xn--1ug; ; ; [A4_2] #
+xn--dmc225h; ஹ\u200D; [C2]; xn--dmc225h; ; ; # ஹ
+\u200D; ; [C2]; xn--1ug; ; ; [A4_2] #
; ; [X4_2]; ; [A4_2]; ; #
-xn--1ug; â€; [C2]; xn--1ug; ; ; #
-ஹà¯â€Œ; ; ; xn--dmc4by94h; ; xn--dmc4b; # ஹà¯
-xn--dmc4by94h; ஹà¯â€Œ; ; xn--dmc4by94h; ; ; # ஹà¯
-ஹ‌; ; [C1]; xn--dmc025h; ; xn--dmc; [] # ஹ
-xn--dmc025h; ஹ‌; [C1]; xn--dmc025h; ; ; # ஹ
-‌; ; [C1]; xn--0ug; ; ; [A4_2] #
-xn--0ug; ‌; [C1]; xn--0ug; ; ; #
-لٰ‌ۭۯ; ; ; xn--ghb2gxqia7523a; ; xn--ghb2gxqia; # لٰۭۯ
-xn--ghb2gxqia; لٰۭۯ; ; xn--ghb2gxqia; ; ; # لٰۭۯ
-لٰۭۯ; ; ; xn--ghb2gxqia; ; ; # لٰۭۯ
-xn--ghb2gxqia7523a; لٰ‌ۭۯ; ; xn--ghb2gxqia7523a; ; ; # لٰۭۯ
-لٰ‌ۯ; ; ; xn--ghb2g3qq34f; ; xn--ghb2g3q; # لٰۯ
-xn--ghb2g3q; لٰۯ; ; xn--ghb2g3q; ; ; # لٰۯ
-لٰۯ; ; ; xn--ghb2g3q; ; ; # لٰۯ
-xn--ghb2g3qq34f; لٰ‌ۯ; ; xn--ghb2g3qq34f; ; ; # لٰۯ
-ل‌ۭۯ; ; ; xn--ghb25aga828w; ; xn--ghb25aga; # لۭۯ
-xn--ghb25aga; Ù„Û­Û¯; ; xn--ghb25aga; ; ; # Ù„Û­Û¯
-Ù„Û­Û¯; ; ; xn--ghb25aga; ; ; # Ù„Û­Û¯
-xn--ghb25aga828w; ل‌ۭۯ; ; xn--ghb25aga828w; ; ; # لۭۯ
-ل‌ۯ; ; ; xn--ghb65a953d; ; xn--ghb65a; # لۯ
-xn--ghb65a; Ù„Û¯; ; xn--ghb65a; ; ; # Ù„Û¯
-Ù„Û¯; ; ; xn--ghb65a; ; ; # Ù„Û¯
-xn--ghb65a953d; ل‌ۯ; ; xn--ghb65a953d; ; ; # لۯ
-لٰ‌ۭ; ; [B3, C1]; xn--ghb2gxqy34f; ; xn--ghb2gxq; [] # لٰۭ
-xn--ghb2gxq; لٰۭ; ; xn--ghb2gxq; ; ; # لٰۭ
-لٰۭ; ; ; xn--ghb2gxq; ; ; # لٰۭ
-xn--ghb2gxqy34f; لٰ‌ۭ; [B3, C1]; xn--ghb2gxqy34f; ; ; # لٰۭ
-ۯ‌ۯ; ; [C1]; xn--cmba004q; ; xn--cmba; [] # ۯۯ
-xn--cmba; Û¯Û¯; ; xn--cmba; ; ; # Û¯Û¯
-Û¯Û¯; ; ; xn--cmba; ; ; # Û¯Û¯
-xn--cmba004q; ۯ‌ۯ; [C1]; xn--cmba004q; ; ; # ۯۯ
-ل‌; ; [B3, C1]; xn--ghb413k; ; xn--ghb; [] # ل
-xn--ghb; Ù„; ; xn--ghb; ; ; # Ù„
-Ù„; ; ; xn--ghb; ; ; # Ù„
-xn--ghb413k; ل‌; [B3, C1]; xn--ghb413k; ; ; # ل
+xn--1ug; \u200D; [C2]; xn--1ug; ; ; #
+ஹ\u0BCD\u200C; ; ; xn--dmc4by94h; ; xn--dmc4b; # ஹà¯
+xn--dmc4by94h; ஹ\u0BCD\u200C; ; xn--dmc4by94h; ; ; # ஹà¯
+ஹ\u200C; ; [C1]; xn--dmc025h; ; xn--dmc; [] # ஹ
+xn--dmc025h; ஹ\u200C; [C1]; xn--dmc025h; ; ; # ஹ
+\u200C; ; [C1]; xn--0ug; ; ; [A4_2] #
+xn--0ug; \u200C; [C1]; xn--0ug; ; ; #
+\u0644\u0670\u200C\u06ED\u06EF; ; ; xn--ghb2gxqia7523a; ; xn--ghb2gxqia; # لٰۭۯ
+xn--ghb2gxqia; \u0644\u0670\u06ED\u06EF; ; xn--ghb2gxqia; ; ; # لٰۭۯ
+\u0644\u0670\u06ED\u06EF; ; ; xn--ghb2gxqia; ; ; # لٰۭۯ
+xn--ghb2gxqia7523a; \u0644\u0670\u200C\u06ED\u06EF; ; xn--ghb2gxqia7523a; ; ; # لٰۭۯ
+\u0644\u0670\u200C\u06EF; ; ; xn--ghb2g3qq34f; ; xn--ghb2g3q; # لٰۯ
+xn--ghb2g3q; \u0644\u0670\u06EF; ; xn--ghb2g3q; ; ; # لٰۯ
+\u0644\u0670\u06EF; ; ; xn--ghb2g3q; ; ; # لٰۯ
+xn--ghb2g3qq34f; \u0644\u0670\u200C\u06EF; ; xn--ghb2g3qq34f; ; ; # لٰۯ
+\u0644\u200C\u06ED\u06EF; ; ; xn--ghb25aga828w; ; xn--ghb25aga; # Ù„Û­Û¯
+xn--ghb25aga; \u0644\u06ED\u06EF; ; xn--ghb25aga; ; ; # Ù„Û­Û¯
+\u0644\u06ED\u06EF; ; ; xn--ghb25aga; ; ; # Ù„Û­Û¯
+xn--ghb25aga828w; \u0644\u200C\u06ED\u06EF; ; xn--ghb25aga828w; ; ; # Ù„Û­Û¯
+\u0644\u200C\u06EF; ; ; xn--ghb65a953d; ; xn--ghb65a; # Ù„Û¯
+xn--ghb65a; \u0644\u06EF; ; xn--ghb65a; ; ; # Ù„Û¯
+\u0644\u06EF; ; ; xn--ghb65a; ; ; # Ù„Û¯
+xn--ghb65a953d; \u0644\u200C\u06EF; ; xn--ghb65a953d; ; ; # Ù„Û¯
+\u0644\u0670\u200C\u06ED; ; [B3, C1]; xn--ghb2gxqy34f; ; xn--ghb2gxq; [] # لٰۭ
+xn--ghb2gxq; \u0644\u0670\u06ED; ; xn--ghb2gxq; ; ; # لٰۭ
+\u0644\u0670\u06ED; ; ; xn--ghb2gxq; ; ; # لٰۭ
+xn--ghb2gxqy34f; \u0644\u0670\u200C\u06ED; [B3, C1]; xn--ghb2gxqy34f; ; ; # لٰۭ
+\u06EF\u200C\u06EF; ; [C1]; xn--cmba004q; ; xn--cmba; [] # Û¯Û¯
+xn--cmba; \u06EF\u06EF; ; xn--cmba; ; ; # Û¯Û¯
+\u06EF\u06EF; ; ; xn--cmba; ; ; # Û¯Û¯
+xn--cmba004q; \u06EF\u200C\u06EF; [C1]; xn--cmba004q; ; ; # Û¯Û¯
+\u0644\u200C; ; [B3, C1]; xn--ghb413k; ; xn--ghb; [] # Ù„
+xn--ghb; \u0644; ; xn--ghb; ; ; # Ù„
+\u0644; ; ; xn--ghb; ; ; # Ù„
+xn--ghb413k; \u0644\u200C; [B3, C1]; xn--ghb413k; ; ; # Ù„
a。。b; a..b; [X4_2]; ; [A4_2]; ; # a..b
A。。B; a..b; [X4_2]; ; [A4_2]; ; # a..b
a..b; ; [X4_2]; ; [A4_2]; ; # a..b
-â€ã€‚。ڹ‌; â€..ڹ‌; [B1, B3, C1, C2, X4_2]; xn--1ug..xn--skb080k; [B1, B3, C1, C2, A4_2]; ..xn--skb; [A4_2] # ..Ú¹
-..xn--skb; ..Ú¹; [X4_2]; ..xn--skb; [A4_2]; ; # ..Ú¹
-xn--1ug..xn--skb080k; â€..ڹ‌; [B1, B3, C1, C2, X4_2]; xn--1ug..xn--skb080k; [B1, B3, C1, C2, A4_2]; ; # ..Ú¹
-×0Ù ; ; [B4]; xn--0-zhc74b; ; ; # ×0Ù 
-xn--0-zhc74b; ×0Ù ; [B4]; xn--0-zhc74b; ; ; # ×0Ù 
-$; ; [P1, V6]; ; ; ; # $
+\u200D。。\u06B9\u200C; \u200D..\u06B9\u200C; [B1, B3, C1, C2, X4_2]; xn--1ug..xn--skb080k; [B1, B3, C1, C2, A4_2]; ..xn--skb; [A4_2] # ..ڹ
+..xn--skb; ..\u06B9; [X4_2]; ..xn--skb; [A4_2]; ; # ..Ú¹
+xn--1ug..xn--skb080k; \u200D..\u06B9\u200C; [B1, B3, C1, C2, X4_2]; xn--1ug..xn--skb080k; [B1, B3, C1, C2, A4_2]; ; # ..Ú¹
+\u05D00\u0660; ; [B4]; xn--0-zhc74b; ; ; # ×0Ù 
+xn--0-zhc74b; \u05D00\u0660; [B4]; xn--0-zhc74b; ; ; # ×0Ù 
+$; ; [V6]; ; ; ; # $
# RANDOMIZED TESTS
-c.0ü.×; ; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
-c.0ü.×; c.0ü.×; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
-C.0Ü.×; c.0ü.×; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
-C.0Ãœ.×; c.0ü.×; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
-C.0ü.×; c.0ü.×; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
-C.0ü.×; c.0ü.×; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
-â’•âˆÙŸò“¤¦ï¼Ž-󠄯; â’•âˆÙŸò“¤¦.-; [P1, V3, V6]; xn--7hb713lfwbi1311b.-; ; ; # â’•âˆÙŸ.-
-14.âˆÙŸò“¤¦.-󠄯; 14.âˆÙŸò“¤¦.-; [P1, V3, V6]; 14.xn--7hb713l3v90n.-; ; ; # 14.âˆÙŸ.-
-14.xn--7hb713l3v90n.-; 14.âˆÙŸò“¤¦.-; [V3, V6]; 14.xn--7hb713l3v90n.-; ; ; # 14.âˆÙŸ.-
-xn--7hb713lfwbi1311b.-; â’•âˆÙŸò“¤¦.-; [V3, V6]; xn--7hb713lfwbi1311b.-; ; ; # â’•âˆÙŸ.-
-ê¡£.ß; ; ; xn--8c9a.xn--qsb; ; ; # ê¡£.ß
-xn--8c9a.xn--qsb; ê¡£.ß; ; xn--8c9a.xn--qsb; ; ; # ê¡£.ß
-≯؃。-; ≯؃.-; [B1, P1, V3, V6]; xn--lfb566l.-; ; ; # ≯.-
-≯؃。-; ≯؃.-; [B1, P1, V3, V6]; xn--lfb566l.-; ; ; # ≯.-
-≯؃。-; ≯؃.-; [B1, P1, V3, V6]; xn--lfb566l.-; ; ; # ≯.-
-≯؃。-; ≯؃.-; [B1, P1, V3, V6]; xn--lfb566l.-; ; ; # ≯.-
-xn--lfb566l.-; ≯؃.-; [B1, V3, V6]; xn--lfb566l.-; ; ; # ≯.-
-â¾›ð¹§â¾•.á…Ÿó —°Ï‚á‚­; èµ°ð¹§è°·.á…Ÿó —°Ï‚á‚­; [B5, P1, V6]; xn--6g3a1x434z.xn--3xa827dhpae6345i; ; xn--6g3a1x434z.xn--4xa627dhpae6345i; # èµ°ð¹§è°·.Ï‚á‚­
-èµ°ð¹§è°·.á…Ÿó —°Ï‚á‚­; ; [B5, P1, V6]; xn--6g3a1x434z.xn--3xa827dhpae6345i; ; xn--6g3a1x434z.xn--4xa627dhpae6345i; # èµ°ð¹§è°·.Ï‚á‚­
-èµ°ð¹§è°·.á…Ÿó —°Ï‚â´; ; [B5, P1, V6]; xn--6g3a1x434z.xn--3xa380eotvh7453a; ; xn--6g3a1x434z.xn--4xa180eotvh7453a; # èµ°ð¹§è°·.Ï‚â´
-èµ°ð¹§è°·.ᅟ󠗰ΣႭ; èµ°ð¹§è°·.ᅟ󠗰σႭ; [B5, P1, V6]; xn--6g3a1x434z.xn--4xa627dhpae6345i; ; ; # èµ°ð¹§è°·.σႭ
-èµ°ð¹§è°·.ᅟ󠗰σâ´; ; [B5, P1, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # èµ°ð¹§è°·.σâ´
-èµ°ð¹§è°·.ᅟ󠗰Σâ´; èµ°ð¹§è°·.ᅟ󠗰σâ´; [B5, P1, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # èµ°ð¹§è°·.σâ´
-xn--6g3a1x434z.xn--4xa180eotvh7453a; èµ°ð¹§è°·.ᅟ󠗰σâ´; [B5, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # èµ°ð¹§è°·.σâ´
-xn--6g3a1x434z.xn--4xa627dhpae6345i; èµ°ð¹§è°·.ᅟ󠗰σႭ; [B5, V6]; xn--6g3a1x434z.xn--4xa627dhpae6345i; ; ; # èµ°ð¹§è°·.σႭ
-xn--6g3a1x434z.xn--3xa380eotvh7453a; èµ°ð¹§è°·.á…Ÿó —°Ï‚â´; [B5, V6]; xn--6g3a1x434z.xn--3xa380eotvh7453a; ; ; # èµ°ð¹§è°·.Ï‚â´
-xn--6g3a1x434z.xn--3xa827dhpae6345i; èµ°ð¹§è°·.á…Ÿó —°Ï‚á‚­; [B5, V6]; xn--6g3a1x434z.xn--3xa827dhpae6345i; ; ; # èµ°ð¹§è°·.Ï‚á‚­
-â¾›ð¹§â¾•.á…Ÿó —°Ï‚â´; èµ°ð¹§è°·.á…Ÿó —°Ï‚â´; [B5, P1, V6]; xn--6g3a1x434z.xn--3xa380eotvh7453a; ; xn--6g3a1x434z.xn--4xa180eotvh7453a; # èµ°ð¹§è°·.Ï‚â´
-â¾›ð¹§â¾•.ᅟ󠗰ΣႭ; èµ°ð¹§è°·.ᅟ󠗰σႭ; [B5, P1, V6]; xn--6g3a1x434z.xn--4xa627dhpae6345i; ; ; # èµ°ð¹§è°·.σႭ
-â¾›ð¹§â¾•.ᅟ󠗰σâ´; èµ°ð¹§è°·.ᅟ󠗰σâ´; [B5, P1, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # èµ°ð¹§è°·.σâ´
-â¾›ð¹§â¾•.ᅟ󠗰Σâ´; èµ°ð¹§è°·.ᅟ󠗰σâ´; [B5, P1, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # èµ°ð¹§è°·.σâ´
-â€â‰ á¢™â‰¯.솣-á¡´á‚ ; ; [C2, P1, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; xn--jbf911clb.xn----6zg521d196p; [P1, V6] # ≠ᢙ≯.솣-á¡´á‚ 
-â€≠ᢙ≯.솣-á¡´á‚ ; â€â‰ á¢™â‰¯.솣-á¡´á‚ ; [C2, P1, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; xn--jbf911clb.xn----6zg521d196p; [P1, V6] # ≠ᢙ≯.솣-á¡´á‚ 
-â€≠ᢙ≯.솣-á¡´â´€; â€â‰ á¢™â‰¯.솣-á¡´â´€; [C2, P1, V6]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; xn--jbf911clb.xn----p9j493ivi4l; [P1, V6] # ≠ᢙ≯.솣-á¡´â´€
-â€â‰ á¢™â‰¯.솣-á¡´â´€; ; [C2, P1, V6]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; xn--jbf911clb.xn----p9j493ivi4l; [P1, V6] # ≠ᢙ≯.솣-á¡´â´€
-xn--jbf911clb.xn----p9j493ivi4l; ≠ᢙ≯.솣-ᡴⴀ; [V6]; xn--jbf911clb.xn----p9j493ivi4l; ; ; # ≠ᢙ≯.솣-ᡴⴀ
-xn--jbf929a90b0b.xn----p9j493ivi4l; â€â‰ á¢™â‰¯.솣-á¡´â´€; [C2, V6]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; ; # ≠ᢙ≯.솣-á¡´â´€
+c.0ü.\u05D0; ; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
+c.0u\u0308.\u05D0; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
+C.0U\u0308.\u05D0; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
+C.0Ãœ.\u05D0; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
+C.0ü.\u05D0; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
+C.0u\u0308.\u05D0; c.0ü.\u05D0; [B1]; c.xn--0-eha.xn--4db; ; ; # c.0ü.×
+â’•âˆ\u065Fò“¤¦ï¼Ž-󠄯; â’•âˆ\u065Fò“¤¦.-; [V3, V6]; xn--7hb713lfwbi1311b.-; ; ; # â’•âˆÙŸ.-
+14.âˆ\u065Fò“¤¦.-󠄯; 14.âˆ\u065Fò“¤¦.-; [V3, V6]; 14.xn--7hb713l3v90n.-; ; ; # 14.âˆÙŸ.-
+14.xn--7hb713l3v90n.-; 14.âˆ\u065Fò“¤¦.-; [V3, V6]; 14.xn--7hb713l3v90n.-; ; ; # 14.âˆÙŸ.-
+xn--7hb713lfwbi1311b.-; â’•âˆ\u065Fò“¤¦.-; [V3, V6]; xn--7hb713lfwbi1311b.-; ; ; # â’•âˆÙŸ.-
+ê¡£.\u07CF; ; ; xn--8c9a.xn--qsb; ; ; # ê¡£.ß
+xn--8c9a.xn--qsb; ê¡£.\u07CF; ; xn--8c9a.xn--qsb; ; ; # ê¡£.ß
+≯\u0603。-; ≯\u0603.-; [B1, V3, V6]; xn--lfb566l.-; ; ; # ≯.-
+>\u0338\u0603。-; ≯\u0603.-; [B1, V3, V6]; xn--lfb566l.-; ; ; # ≯.-
+≯\u0603。-; ≯\u0603.-; [B1, V3, V6]; xn--lfb566l.-; ; ; # ≯.-
+>\u0338\u0603。-; ≯\u0603.-; [B1, V3, V6]; xn--lfb566l.-; ; ; # ≯.-
+xn--lfb566l.-; ≯\u0603.-; [B1, V3, V6]; xn--lfb566l.-; ; ; # ≯.-
+â¾›ð¹§â¾•.\u115Fó —°Ï‚á‚­; èµ°ð¹§è°·.\u115Fó —°Ï‚á‚­; [B5, V6]; xn--6g3a1x434z.xn--3xa827dhpae6345i; ; xn--6g3a1x434z.xn--4xa627dhpae6345i; # èµ°ð¹§è°·.Ï‚á‚­
+èµ°ð¹§è°·.\u115Fó —°Ï‚á‚­; ; [B5, V6]; xn--6g3a1x434z.xn--3xa827dhpae6345i; ; xn--6g3a1x434z.xn--4xa627dhpae6345i; # èµ°ð¹§è°·.Ï‚á‚­
+èµ°ð¹§è°·.\u115Fó —°Ï‚â´; ; [B5, V6]; xn--6g3a1x434z.xn--3xa380eotvh7453a; ; xn--6g3a1x434z.xn--4xa180eotvh7453a; # èµ°ð¹§è°·.Ï‚â´
+èµ°ð¹§è°·.\u115F󠗰ΣႭ; èµ°ð¹§è°·.\u115F󠗰σႭ; [B5, V6]; xn--6g3a1x434z.xn--4xa627dhpae6345i; ; ; # èµ°ð¹§è°·.σႭ
+èµ°ð¹§è°·.\u115F󠗰σâ´; ; [B5, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # èµ°ð¹§è°·.σâ´
+èµ°ð¹§è°·.\u115F󠗰Σâ´; èµ°ð¹§è°·.\u115F󠗰σâ´; [B5, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # èµ°ð¹§è°·.σâ´
+xn--6g3a1x434z.xn--4xa180eotvh7453a; èµ°ð¹§è°·.\u115F󠗰σâ´; [B5, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # èµ°ð¹§è°·.σâ´
+xn--6g3a1x434z.xn--4xa627dhpae6345i; èµ°ð¹§è°·.\u115F󠗰σႭ; [B5, V6]; xn--6g3a1x434z.xn--4xa627dhpae6345i; ; ; # èµ°ð¹§è°·.σႭ
+xn--6g3a1x434z.xn--3xa380eotvh7453a; èµ°ð¹§è°·.\u115Fó —°Ï‚â´; [B5, V6]; xn--6g3a1x434z.xn--3xa380eotvh7453a; ; ; # èµ°ð¹§è°·.Ï‚â´
+xn--6g3a1x434z.xn--3xa827dhpae6345i; èµ°ð¹§è°·.\u115Fó —°Ï‚á‚­; [B5, V6]; xn--6g3a1x434z.xn--3xa827dhpae6345i; ; ; # èµ°ð¹§è°·.Ï‚á‚­
+â¾›ð¹§â¾•.\u115Fó —°Ï‚â´; èµ°ð¹§è°·.\u115Fó —°Ï‚â´; [B5, V6]; xn--6g3a1x434z.xn--3xa380eotvh7453a; ; xn--6g3a1x434z.xn--4xa180eotvh7453a; # èµ°ð¹§è°·.Ï‚â´
+â¾›ð¹§â¾•.\u115F󠗰ΣႭ; èµ°ð¹§è°·.\u115F󠗰σႭ; [B5, V6]; xn--6g3a1x434z.xn--4xa627dhpae6345i; ; ; # èµ°ð¹§è°·.σႭ
+â¾›ð¹§â¾•.\u115F󠗰σâ´; èµ°ð¹§è°·.\u115F󠗰σâ´; [B5, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # èµ°ð¹§è°·.σâ´
+â¾›ð¹§â¾•.\u115F󠗰Σâ´; èµ°ð¹§è°·.\u115F󠗰σâ´; [B5, V6]; xn--6g3a1x434z.xn--4xa180eotvh7453a; ; ; # èµ°ð¹§è°·.σâ´
+\u200D≠ᢙ≯.솣-ᡴႠ; ; [C2, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; xn--jbf911clb.xn----6zg521d196p; [V6] # ≠ᢙ≯.솣-ᡴႠ
+\u200D=\u0338ᢙ>\u0338.솣-ᡴႠ; \u200D≠ᢙ≯.솣-ᡴႠ; [C2, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; xn--jbf911clb.xn----6zg521d196p; [V6] # ≠ᢙ≯.솣-ᡴႠ
+\u200D=\u0338ᢙ>\u0338.솣-ᡴⴀ; \u200D≠ᢙ≯.솣-ᡴⴀ; [C2]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; xn--jbf911clb.xn----p9j493ivi4l; [] # ≠ᢙ≯.솣-ᡴⴀ
+\u200D≠ᢙ≯.솣-ᡴⴀ; ; [C2]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; xn--jbf911clb.xn----p9j493ivi4l; [] # ≠ᢙ≯.솣-ᡴⴀ
+xn--jbf911clb.xn----p9j493ivi4l; ≠ᢙ≯.솣-ᡴⴀ; ; xn--jbf911clb.xn----p9j493ivi4l; ; ; # ≠ᢙ≯.솣-ᡴⴀ
+≠ᢙ≯.솣-ᡴⴀ; ; ; xn--jbf911clb.xn----p9j493ivi4l; ; ; # ≠ᢙ≯.솣-ᡴⴀ
+=\u0338ᢙ>\u0338.솣-ᡴⴀ; ≠ᢙ≯.솣-ᡴⴀ; ; xn--jbf911clb.xn----p9j493ivi4l; ; ; # ≠ᢙ≯.솣-ᡴⴀ
+=\u0338ᢙ>\u0338.솣-ᡴႠ; ≠ᢙ≯.솣-ᡴႠ; [V6]; xn--jbf911clb.xn----6zg521d196p; ; ; # ≠ᢙ≯.솣-ᡴႠ
+≠ᢙ≯.솣-ᡴႠ; ; [V6]; xn--jbf911clb.xn----6zg521d196p; ; ; # ≠ᢙ≯.솣-ᡴႠ
xn--jbf911clb.xn----6zg521d196p; ≠ᢙ≯.솣-ᡴႠ; [V6]; xn--jbf911clb.xn----6zg521d196p; ; ; # ≠ᢙ≯.솣-ᡴႠ
-xn--jbf929a90b0b.xn----6zg521d196p; â€â‰ á¢™â‰¯.솣-á¡´á‚ ; [C2, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; ; # ≠ᢙ≯.솣-á¡´á‚ 
-ñ¯žœï¼Žð¿‡à¾¢Ý½Ø€; ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; [P1, V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
-ñ¯žœï¼Žð¿‡à¾¡à¾·Ý½Ø€; ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; [P1, V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
-ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; ; [P1, V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
-xn--gw68a.xn--ifb57ev2psc6027m; ñ¯žœ.ð¿‡à¾¡à¾·Ý½Ø€; [V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
-𣳔̃.𑓂; ; [V5]; xn--nsa95820a.xn--wz1d; ; ; # 𣳔̃.𑓂
-xn--nsa95820a.xn--wz1d; 𣳔̃.𑓂; [V5]; xn--nsa95820a.xn--wz1d; ; ; # 𣳔̃.𑓂
-𞤀𞥅ñ˜±ã€‚󠄌Ⴣꡥ; 𞤢𞥅ñ˜±.Ⴣꡥ; [B2, B3, P1, V6]; xn--9d6hgcy3556a.xn--7nd0578e; ; ; # 𞤢𞥅.Ⴣꡥ
-𞤢𞥅ñ˜±ã€‚󠄌ⴣꡥ; 𞤢𞥅ñ˜±.ⴣꡥ; [B2, B3, P1, V6]; xn--9d6hgcy3556a.xn--rlju750b; ; ; # 𞤢𞥅.ⴣꡥ
+xn--jbf929a90b0b.xn----p9j493ivi4l; \u200D≠ᢙ≯.솣-ᡴⴀ; [C2]; xn--jbf929a90b0b.xn----p9j493ivi4l; ; ; # ≠ᢙ≯.솣-ᡴⴀ
+xn--jbf929a90b0b.xn----6zg521d196p; \u200D≠ᢙ≯.솣-ᡴႠ; [C2, V6]; xn--jbf929a90b0b.xn----6zg521d196p; ; ; # ≠ᢙ≯.솣-ᡴႠ
+ñ¯žœï¼Žð¿‡\u0FA2\u077D\u0600; ñ¯žœ.ð¿‡\u0FA1\u0FB7\u077D\u0600; [V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
+ñ¯žœï¼Žð¿‡\u0FA1\u0FB7\u077D\u0600; ñ¯žœ.ð¿‡\u0FA1\u0FB7\u077D\u0600; [V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
+ñ¯žœ.ð¿‡\u0FA1\u0FB7\u077D\u0600; ; [V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
+xn--gw68a.xn--ifb57ev2psc6027m; ñ¯žœ.ð¿‡\u0FA1\u0FB7\u077D\u0600; [V6]; xn--gw68a.xn--ifb57ev2psc6027m; ; ; # .ð¿‡à¾¡à¾·Ý½
+𣳔\u0303.𑓂; ; [V5]; xn--nsa95820a.xn--wz1d; ; ; # 𣳔̃.𑓂
+xn--nsa95820a.xn--wz1d; 𣳔\u0303.𑓂; [V5]; xn--nsa95820a.xn--wz1d; ; ; # 𣳔̃.𑓂
+𞤀𞥅ñ˜±ã€‚󠄌Ⴣꡥ; 𞤢𞥅ñ˜±.Ⴣꡥ; [B2, B3, V6]; xn--9d6hgcy3556a.xn--7nd0578e; ; ; # 𞤢𞥅.Ⴣꡥ
+𞤢𞥅ñ˜±ã€‚󠄌ⴣꡥ; 𞤢𞥅ñ˜±.ⴣꡥ; [B2, B3, V6]; xn--9d6hgcy3556a.xn--rlju750b; ; ; # 𞤢𞥅.ⴣꡥ
xn--9d6hgcy3556a.xn--rlju750b; 𞤢𞥅ñ˜±.ⴣꡥ; [B2, B3, V6]; xn--9d6hgcy3556a.xn--rlju750b; ; ; # 𞤢𞥅.ⴣꡥ
xn--9d6hgcy3556a.xn--7nd0578e; 𞤢𞥅ñ˜±.Ⴣꡥ; [B2, B3, V6]; xn--9d6hgcy3556a.xn--7nd0578e; ; ; # 𞤢𞥅.Ⴣꡥ
-𞤀𞥅ñ˜±ã€‚󠄌ⴣꡥ; 𞤢𞥅ñ˜±.ⴣꡥ; [B2, B3, P1, V6]; xn--9d6hgcy3556a.xn--rlju750b; ; ; # 𞤢𞥅.ⴣꡥ
-࣢ð‘¿Ï‚𖬱。󠅡렧; ࣢ð‘¿Ï‚𖬱.ë §; [B1, P1, V6]; xn--3xa73xp48ys2xc.xn--kn2b; ; xn--4xa53xp48ys2xc.xn--kn2b; # ð‘¿Ï‚𖬱.ë §
-࣢ð‘¿Ï‚𖬱。󠅡렧; ࣢ð‘¿Ï‚𖬱.ë §; [B1, P1, V6]; xn--3xa73xp48ys2xc.xn--kn2b; ; xn--4xa53xp48ys2xc.xn--kn2b; # ð‘¿Ï‚𖬱.ë §
-࣢ð‘¿Î£ð–¬±ã€‚󠅡렧; ࣢ð‘¿Ïƒð–¬±.ë §; [B1, P1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ïƒð–¬±.ë §
-࣢ð‘¿Î£ð–¬±ã€‚ó …¡ë §; ࣢ð‘¿Ïƒð–¬±.ë §; [B1, P1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ïƒð–¬±.ë §
-࣢ð‘¿Ïƒð–¬±ã€‚ó …¡ë §; ࣢ð‘¿Ïƒð–¬±.ë §; [B1, P1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ïƒð–¬±.ë §
-࣢ð‘¿Ïƒð–¬±ã€‚󠅡렧; ࣢ð‘¿Ïƒð–¬±.ë §; [B1, P1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ïƒð–¬±.ë §
-xn--4xa53xp48ys2xc.xn--kn2b; ࣢ð‘¿Ïƒð–¬±.ë §; [B1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ïƒð–¬±.ë §
-xn--3xa73xp48ys2xc.xn--kn2b; ࣢ð‘¿Ï‚𖬱.ë §; [B1, V6]; xn--3xa73xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ï‚𖬱.ë §
--â€ã€‚ðž¤â€Œâ€â’ˆ; -â€.𞤯‌â€â’ˆ; [B1, C1, C2, P1, V3, V6]; xn----ugn.xn--0ugc555aiv51d; ; -.xn--tsh3666n; [B1, P1, V3, V6] # -.𞤯⒈
--â€ã€‚ðž¤â€Œâ€1.; -â€.𞤯‌â€1.; [B1, C1, C2, V3]; xn----ugn.xn--1-rgnd61297b.; ; -.xn--1-0i8r.; [B1, V3] # -.𞤯1.
--â€ã€‚𞤯‌â€1.; -â€.𞤯‌â€1.; [B1, C1, C2, V3]; xn----ugn.xn--1-rgnd61297b.; ; -.xn--1-0i8r.; [B1, V3] # -.𞤯1.
+𞤀𞥅ñ˜±ã€‚󠄌ⴣꡥ; 𞤢𞥅ñ˜±.ⴣꡥ; [B2, B3, V6]; xn--9d6hgcy3556a.xn--rlju750b; ; ; # 𞤢𞥅.ⴣꡥ
+\u08E2ð‘¿Ï‚𖬱。󠅡렧; \u08E2ð‘¿Ï‚𖬱.ë §; [B1, V6]; xn--3xa73xp48ys2xc.xn--kn2b; ; xn--4xa53xp48ys2xc.xn--kn2b; # ð‘¿Ï‚𖬱.ë §
+\u08E2ð‘¿Ï‚𖬱。󠅡렧; \u08E2ð‘¿Ï‚𖬱.ë §; [B1, V6]; xn--3xa73xp48ys2xc.xn--kn2b; ; xn--4xa53xp48ys2xc.xn--kn2b; # ð‘¿Ï‚𖬱.ë §
+\u08E2ð‘¿Î£ð–¬±ã€‚󠅡렧; \u08E2ð‘¿Ïƒð–¬±.ë §; [B1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ïƒð–¬±.ë §
+\u08E2ð‘¿Î£ð–¬±ã€‚ó …¡ë §; \u08E2ð‘¿Ïƒð–¬±.ë §; [B1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ïƒð–¬±.ë §
+\u08E2ð‘¿Ïƒð–¬±ã€‚ó …¡ë §; \u08E2ð‘¿Ïƒð–¬±.ë §; [B1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ïƒð–¬±.ë §
+\u08E2ð‘¿Ïƒð–¬±ã€‚󠅡렧; \u08E2ð‘¿Ïƒð–¬±.ë §; [B1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ïƒð–¬±.ë §
+xn--4xa53xp48ys2xc.xn--kn2b; \u08E2ð‘¿Ïƒð–¬±.ë §; [B1, V6]; xn--4xa53xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ïƒð–¬±.ë §
+xn--3xa73xp48ys2xc.xn--kn2b; \u08E2ð‘¿Ï‚𖬱.ë §; [B1, V6]; xn--3xa73xp48ys2xc.xn--kn2b; ; ; # ð‘¿Ï‚𖬱.ë §
+-\u200D。ðž¤\u200C\u200Dâ’ˆ; -\u200D.𞤯\u200C\u200Dâ’ˆ; [B1, C1, C2, V3, V6]; xn----ugn.xn--0ugc555aiv51d; ; -.xn--tsh3666n; [B1, V3, V6] # -.𞤯⒈
+-\u200D。ðž¤\u200C\u200D1.; -\u200D.𞤯\u200C\u200D1.; [B1, C1, C2, V3]; xn----ugn.xn--1-rgnd61297b.; ; -.xn--1-0i8r.; [B1, V3] # -.𞤯1.
+-\u200D。𞤯\u200C\u200D1.; -\u200D.𞤯\u200C\u200D1.; [B1, C1, C2, V3]; xn----ugn.xn--1-rgnd61297b.; ; -.xn--1-0i8r.; [B1, V3] # -.𞤯1.
-.xn--1-0i8r.; -.𞤯1.; [B1, V3]; -.xn--1-0i8r.; ; ; # -.𞤯1.
-xn----ugn.xn--1-rgnd61297b.; -â€.𞤯‌â€1.; [B1, C1, C2, V3]; xn----ugn.xn--1-rgnd61297b.; ; ; # -.𞤯1.
--â€ã€‚𞤯‌â€â’ˆ; -â€.𞤯‌â€â’ˆ; [B1, C1, C2, P1, V3, V6]; xn----ugn.xn--0ugc555aiv51d; ; -.xn--tsh3666n; [B1, P1, V3, V6] # -.𞤯⒈
+xn----ugn.xn--1-rgnd61297b.; -\u200D.𞤯\u200C\u200D1.; [B1, C1, C2, V3]; xn----ugn.xn--1-rgnd61297b.; ; ; # -.𞤯1.
+-\u200D。𞤯\u200C\u200D⒈; -\u200D.𞤯\u200C\u200D⒈; [B1, C1, C2, V3, V6]; xn----ugn.xn--0ugc555aiv51d; ; -.xn--tsh3666n; [B1, V3, V6] # -.𞤯⒈
-.xn--tsh3666n; -.𞤯⒈; [B1, V3, V6]; -.xn--tsh3666n; ; ; # -.𞤯⒈
-xn----ugn.xn--0ugc555aiv51d; -â€.𞤯‌â€â’ˆ; [B1, C1, C2, V3, V6]; xn----ugn.xn--0ugc555aiv51d; ; ; # -.𞤯⒈
-‌򅎭.Ⴒ𑇀; ; [C1, P1, V6]; xn--0ug15083f.xn--qnd6272k; ; xn--bn95b.xn--qnd6272k; [P1, V6] # .Ⴒ𑇀
-‌򅎭.ⴒ𑇀; ; [C1, P1, V6]; xn--0ug15083f.xn--9kj2034e; ; xn--bn95b.xn--9kj2034e; [P1, V6] # .ⴒ𑇀
+xn----ugn.xn--0ugc555aiv51d; -\u200D.𞤯\u200C\u200D⒈; [B1, C1, C2, V3, V6]; xn----ugn.xn--0ugc555aiv51d; ; ; # -.𞤯⒈
+\u200C򅎭.Ⴒ𑇀; ; [C1, V6]; xn--0ug15083f.xn--qnd6272k; ; xn--bn95b.xn--qnd6272k; [V6] # .Ⴒ𑇀
+\u200C򅎭.ⴒ𑇀; ; [C1, V6]; xn--0ug15083f.xn--9kj2034e; ; xn--bn95b.xn--9kj2034e; [V6] # .ⴒ𑇀
xn--bn95b.xn--9kj2034e; 򅎭.ⴒ𑇀; [V6]; xn--bn95b.xn--9kj2034e; ; ; # .ⴒ𑇀
-xn--0ug15083f.xn--9kj2034e; ‌򅎭.ⴒ𑇀; [C1, V6]; xn--0ug15083f.xn--9kj2034e; ; ; # .ⴒ𑇀
+xn--0ug15083f.xn--9kj2034e; \u200C򅎭.ⴒ𑇀; [C1, V6]; xn--0ug15083f.xn--9kj2034e; ; ; # .ⴒ𑇀
xn--bn95b.xn--qnd6272k; 򅎭.Ⴒ𑇀; [V6]; xn--bn95b.xn--qnd6272k; ; ; # .Ⴒ𑇀
-xn--0ug15083f.xn--qnd6272k; ‌򅎭.Ⴒ𑇀; [C1, V6]; xn--0ug15083f.xn--qnd6272k; ; ; # .Ⴒ𑇀
-繱𑖿â€.8︒; 繱𑖿â€.8︒; [P1, V6]; xn--1ug6928ac48e.xn--8-o89h; ; xn--gl0as212a.xn--8-o89h; # 繱𑖿.8︒
-繱𑖿â€.8。; 繱𑖿â€.8.; ; xn--1ug6928ac48e.8.; ; xn--gl0as212a.8.; # 繱𑖿.8.
+xn--0ug15083f.xn--qnd6272k; \u200C򅎭.Ⴒ𑇀; [C1, V6]; xn--0ug15083f.xn--qnd6272k; ; ; # .Ⴒ𑇀
+繱𑖿\u200D.8︒; 繱𑖿\u200D.8︒; [V6]; xn--1ug6928ac48e.xn--8-o89h; ; xn--gl0as212a.xn--8-o89h; # 繱𑖿.8︒
+繱𑖿\u200D.8。; 繱𑖿\u200D.8.; ; xn--1ug6928ac48e.8.; ; xn--gl0as212a.8.; # 繱𑖿.8.
xn--gl0as212a.8.; 繱𑖿.8.; ; xn--gl0as212a.8.; ; ; # 繱𑖿.8.
繱𑖿.8.; ; ; xn--gl0as212a.8.; ; ; # 繱𑖿.8.
-xn--1ug6928ac48e.8.; 繱𑖿â€.8.; ; xn--1ug6928ac48e.8.; ; ; # 繱𑖿.8.
-繱𑖿â€.8.; ; ; xn--1ug6928ac48e.8.; ; xn--gl0as212a.8.; # 繱𑖿.8.
+xn--1ug6928ac48e.8.; 繱𑖿\u200D.8.; ; xn--1ug6928ac48e.8.; ; ; # 繱𑖿.8.
+繱𑖿\u200D.8.; ; ; xn--1ug6928ac48e.8.; ; xn--gl0as212a.8.; # 繱𑖿.8.
xn--gl0as212a.xn--8-o89h; 繱𑖿.8︒; [V6]; xn--gl0as212a.xn--8-o89h; ; ; # 繱𑖿.8︒
-xn--1ug6928ac48e.xn--8-o89h; 繱𑖿â€.8︒; [V6]; xn--1ug6928ac48e.xn--8-o89h; ; ; # 繱𑖿.8︒
+xn--1ug6928ac48e.xn--8-o89h; 繱𑖿\u200D.8︒; [V6]; xn--1ug6928ac48e.xn--8-o89h; ; ; # 繱𑖿.8︒
󠆾.𞀈; .𞀈; [V5, X4_2]; .xn--ph4h; [V5, A4_2]; ; # .𞀈
󠆾.𞀈; .𞀈; [V5, X4_2]; .xn--ph4h; [V5, A4_2]; ; # .𞀈
.xn--ph4h; .𞀈; [V5, X4_2]; .xn--ph4h; [V5, A4_2]; ; # .𞀈
-ß۫。â€; ß۫.â€; [C2]; xn--zca012a.xn--1ug; ; xn--ss-59d.; [] # ß۫.
-SS۫。â€; ssÛ«.â€; [C2]; xn--ss-59d.xn--1ug; ; xn--ss-59d.; [] # ssÛ«.
-ss۫。â€; ssÛ«.â€; [C2]; xn--ss-59d.xn--1ug; ; xn--ss-59d.; [] # ssÛ«.
-Ss۫。â€; ssÛ«.â€; [C2]; xn--ss-59d.xn--1ug; ; xn--ss-59d.; [] # ssÛ«.
-xn--ss-59d.; ssÛ«.; ; xn--ss-59d.; ; ; # ssÛ«.
-ssÛ«.; ; ; xn--ss-59d.; ; ; # ssÛ«.
-SSÛ«.; ssÛ«.; ; xn--ss-59d.; ; ; # ssÛ«.
-SsÛ«.; ssÛ«.; ; xn--ss-59d.; ; ; # ssÛ«.
-xn--ss-59d.xn--1ug; ssÛ«.â€; [C2]; xn--ss-59d.xn--1ug; ; ; # ssÛ«.
-xn--zca012a.xn--1ug; ß۫.â€; [C2]; xn--zca012a.xn--1ug; ; ; # ß۫.
-ó µâ€Œâ’ˆï¼Žó Ž‡; ó µâ€Œâ’ˆ.󠎇; [C1, P1, V6]; xn--0ug88o47900b.xn--tv36e; ; xn--tshz2001k.xn--tv36e; [P1, V6] # â’ˆ.
-ó µâ€Œ1..󠎇; ; [C1, P1, V6, X4_2]; xn--1-rgn37671n..xn--tv36e; [C1, P1, V6, A4_2]; xn--1-bs31m..xn--tv36e; [P1, V6, A4_2] # 1..
+ß\u06EB。\u200D; ß\u06EB.\u200D; [C2]; xn--zca012a.xn--1ug; ; xn--ss-59d.; [] # ß۫.
+SS\u06EB。\u200D; ss\u06EB.\u200D; [C2]; xn--ss-59d.xn--1ug; ; xn--ss-59d.; [] # ss۫.
+ss\u06EB。\u200D; ss\u06EB.\u200D; [C2]; xn--ss-59d.xn--1ug; ; xn--ss-59d.; [] # ss۫.
+Ss\u06EB。\u200D; ss\u06EB.\u200D; [C2]; xn--ss-59d.xn--1ug; ; xn--ss-59d.; [] # ss۫.
+xn--ss-59d.; ss\u06EB.; ; xn--ss-59d.; ; ; # ssÛ«.
+ss\u06EB.; ; ; xn--ss-59d.; ; ; # ssÛ«.
+SS\u06EB.; ss\u06EB.; ; xn--ss-59d.; ; ; # ssÛ«.
+Ss\u06EB.; ss\u06EB.; ; xn--ss-59d.; ; ; # ssÛ«.
+xn--ss-59d.xn--1ug; ss\u06EB.\u200D; [C2]; xn--ss-59d.xn--1ug; ; ; # ssÛ«.
+xn--zca012a.xn--1ug; ß\u06EB.\u200D; [C2]; xn--zca012a.xn--1ug; ; ; # ß۫.
+ó µ\u200C⒈.󠎇; ó µ\u200Câ’ˆ.󠎇; [C1, V6]; xn--0ug88o47900b.xn--tv36e; ; xn--tshz2001k.xn--tv36e; [V6] # â’ˆ.
+ó µ\u200C1..󠎇; ; [C1, V6, X4_2]; xn--1-rgn37671n..xn--tv36e; [C1, V6, A4_2]; xn--1-bs31m..xn--tv36e; [V6, A4_2] # 1..
xn--1-bs31m..xn--tv36e; ó µ1..󠎇; [V6, X4_2]; xn--1-bs31m..xn--tv36e; [V6, A4_2]; ; # 1..
-xn--1-rgn37671n..xn--tv36e; ó µâ€Œ1..󠎇; [C1, V6, X4_2]; xn--1-rgn37671n..xn--tv36e; [C1, V6, A4_2]; ; # 1..
+xn--1-rgn37671n..xn--tv36e; ó µ\u200C1..󠎇; [C1, V6, X4_2]; xn--1-rgn37671n..xn--tv36e; [C1, V6, A4_2]; ; # 1..
xn--tshz2001k.xn--tv36e; ó µâ’ˆ.󠎇; [V6]; xn--tshz2001k.xn--tv36e; ; ; # â’ˆ.
-xn--0ug88o47900b.xn--tv36e; ó µâ€Œâ’ˆ.󠎇; [C1, V6]; xn--0ug88o47900b.xn--tv36e; ; ; # â’ˆ.
-󟈣ٟꪲß。󌓧; 󟈣ٟꪲß.󌓧; [P1, V6]; xn--zca92z0t7n5w96j.xn--bb79d; ; xn--ss-3xd2839nncy1m.xn--bb79d; # ٟꪲß.
-󟈣ٟꪲSS。󌓧; 󟈣ٟꪲss.󌓧; [P1, V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss.
-󟈣ٟꪲss。󌓧; 󟈣ٟꪲss.󌓧; [P1, V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss.
-󟈣ٟꪲSs。󌓧; 󟈣ٟꪲss.󌓧; [P1, V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss.
-xn--ss-3xd2839nncy1m.xn--bb79d; 󟈣ٟꪲss.󌓧; [V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss.
-xn--zca92z0t7n5w96j.xn--bb79d; 󟈣ٟꪲß.󌓧; [V6]; xn--zca92z0t7n5w96j.xn--bb79d; ; ; # ٟꪲß.
-ݴ‌𞤿。ð½˜ä‰œâ€ñ¿¤¼; ݴ‌𞤿.ð½˜ä‰œâ€ñ¿¤¼; [C1, C2, P1, V6]; xn--4pb607jjt73a.xn--1ug236ke314donv1a; ; xn--4pb2977v.xn--z0nt555ukbnv; [P1, V6] # ݴ𞤿.䉜
-ݴ‌ðž¤ã€‚ð½˜ä‰œâ€ñ¿¤¼; ݴ‌𞤿.ð½˜ä‰œâ€ñ¿¤¼; [C1, C2, P1, V6]; xn--4pb607jjt73a.xn--1ug236ke314donv1a; ; xn--4pb2977v.xn--z0nt555ukbnv; [P1, V6] # ݴ𞤿.䉜
-xn--4pb2977v.xn--z0nt555ukbnv; ݴ𞤿.ð½˜ä‰œñ¿¤¼; [V6]; xn--4pb2977v.xn--z0nt555ukbnv; ; ; # ݴ𞤿.䉜
-xn--4pb607jjt73a.xn--1ug236ke314donv1a; ݴ‌𞤿.ð½˜ä‰œâ€ñ¿¤¼; [C1, C2, V6]; xn--4pb607jjt73a.xn--1ug236ke314donv1a; ; ; # ݴ𞤿.䉜
-ò”­œÏ‚ᡱ⒈.≮𑄳â€ð®; ; [B1, P1, V6]; xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # ςᡱ⒈.≮𑄳ð®
-ò”­œÏ‚ᡱ⒈.≮𑄳â€ð®; ò”­œÏ‚ᡱ⒈.≮𑄳â€ð®; [B1, P1, V6]; xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # ςᡱ⒈.≮𑄳ð®
-ò”­œÏ‚ᡱ1..≮𑄳â€ð®; ; [B1, P1, V6, X4_2]; xn--1-xmb999meq63t..xn--1ug85gn777ahze; [B1, P1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # ςᡱ1..≮𑄳ð®
-ò”­œÏ‚ᡱ1..≮𑄳â€ð®; ò”­œÏ‚ᡱ1..≮𑄳â€ð®; [B1, P1, V6, X4_2]; xn--1-xmb999meq63t..xn--1ug85gn777ahze; [B1, P1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # ςᡱ1..≮𑄳ð®
-ò”­œÎ£á¡±1..≮𑄳â€ð®; ò”­œÏƒá¡±1..≮𑄳â€ð®; [B1, P1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, P1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳ð®
-ò”­œÎ£á¡±1..≮𑄳â€ð®; ò”­œÏƒá¡±1..≮𑄳â€ð®; [B1, P1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, P1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳ð®
-ò”­œÏƒá¡±1..≮𑄳â€ð®; ; [B1, P1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, P1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳ð®
-ò”­œÏƒá¡±1..≮𑄳â€ð®; ò”­œÏƒá¡±1..≮𑄳â€ð®; [B1, P1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, P1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳ð®
+xn--0ug88o47900b.xn--tv36e; ó µ\u200Câ’ˆ.󠎇; [C1, V6]; xn--0ug88o47900b.xn--tv36e; ; ; # â’ˆ.
+󟈣\u065F\uAAB2ß。󌓧; 󟈣\u065F\uAAB2ß.󌓧; [V6]; xn--zca92z0t7n5w96j.xn--bb79d; ; xn--ss-3xd2839nncy1m.xn--bb79d; # ٟꪲß.
+󟈣\u065F\uAAB2SS。󌓧; 󟈣\u065F\uAAB2ss.󌓧; [V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss.
+󟈣\u065F\uAAB2ss。󌓧; 󟈣\u065F\uAAB2ss.󌓧; [V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss.
+󟈣\u065F\uAAB2Ss。󌓧; 󟈣\u065F\uAAB2ss.󌓧; [V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss.
+xn--ss-3xd2839nncy1m.xn--bb79d; 󟈣\u065F\uAAB2ss.󌓧; [V6]; xn--ss-3xd2839nncy1m.xn--bb79d; ; ; # ٟꪲss.
+xn--zca92z0t7n5w96j.xn--bb79d; 󟈣\u065F\uAAB2ß.󌓧; [V6]; xn--zca92z0t7n5w96j.xn--bb79d; ; ; # ٟꪲß.
+\u0774\u200C𞤿。ð½˜ä‰œ\u200Dñ¿¤¼; \u0774\u200C𞤿.ð½˜ä‰œ\u200Dñ¿¤¼; [C1, C2, V6]; xn--4pb607jjt73a.xn--1ug236ke314donv1a; ; xn--4pb2977v.xn--z0nt555ukbnv; [V6] # ݴ𞤿.䉜
+\u0774\u200Cðž¤ã€‚ð½˜ä‰œ\u200Dñ¿¤¼; \u0774\u200C𞤿.ð½˜ä‰œ\u200Dñ¿¤¼; [C1, C2, V6]; xn--4pb607jjt73a.xn--1ug236ke314donv1a; ; xn--4pb2977v.xn--z0nt555ukbnv; [V6] # ݴ𞤿.䉜
+xn--4pb2977v.xn--z0nt555ukbnv; \u0774𞤿.ð½˜ä‰œñ¿¤¼; [V6]; xn--4pb2977v.xn--z0nt555ukbnv; ; ; # ݴ𞤿.䉜
+xn--4pb607jjt73a.xn--1ug236ke314donv1a; \u0774\u200C𞤿.ð½˜ä‰œ\u200Dñ¿¤¼; [C1, C2, V6]; xn--4pb607jjt73a.xn--1ug236ke314donv1a; ; ; # ݴ𞤿.䉜
+ò”­œÏ‚ᡱ⒈.≮𑄳\u200Dð®; ; [B1, V6]; xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # ςᡱ⒈.≮𑄳ð®
+ò”­œÏ‚ᡱ⒈.<\u0338ð‘„³\u200Dð®; ò”­œÏ‚ᡱ⒈.≮𑄳\u200Dð®; [B1, V6]; xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # ςᡱ⒈.≮𑄳ð®
+ò”­œÏ‚ᡱ1..≮𑄳\u200Dð®; ; [B1, V6, X4_2]; xn--1-xmb999meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # ςᡱ1..≮𑄳ð®
+ò”­œÏ‚ᡱ1..<\u0338ð‘„³\u200Dð®; ò”­œÏ‚ᡱ1..≮𑄳\u200Dð®; [B1, V6, X4_2]; xn--1-xmb999meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # ςᡱ1..≮𑄳ð®
+ò”­œÎ£á¡±1..<\u0338ð‘„³\u200Dð®; ò”­œÏƒá¡±1..≮𑄳\u200Dð®; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳ð®
+ò”­œÎ£á¡±1..≮𑄳\u200Dð®; ò”­œÏƒá¡±1..≮𑄳\u200Dð®; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳ð®
+ò”­œÏƒá¡±1..≮𑄳\u200Dð®; ; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳ð®
+ò”­œÏƒá¡±1..<\u0338ð‘„³\u200Dð®; ò”­œÏƒá¡±1..≮𑄳\u200Dð®; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; # σᡱ1..≮𑄳ð®
xn--1-zmb699meq63t..xn--gdh5392g6sd; ò”­œÏƒá¡±1..≮𑄳ð®; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--gdh5392g6sd; [B1, V6, A4_2]; ; # σᡱ1..≮𑄳ð®
-xn--1-zmb699meq63t..xn--1ug85gn777ahze; ò”­œÏƒá¡±1..≮𑄳â€ð®; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; ; # σᡱ1..≮𑄳ð®
-xn--1-xmb999meq63t..xn--1ug85gn777ahze; ò”­œÏ‚ᡱ1..≮𑄳â€ð®; [B1, V6, X4_2]; xn--1-xmb999meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; ; # ςᡱ1..≮𑄳ð®
-ò”­œÎ£á¡±â’ˆ.≮𑄳â€ð®; ò”­œÏƒá¡±â’ˆ.≮𑄳â€ð®; [B1, P1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳ð®
-ò”­œÎ£á¡±â’ˆ.≮𑄳â€ð®; ò”­œÏƒá¡±â’ˆ.≮𑄳â€ð®; [B1, P1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳ð®
-ò”­œÏƒá¡±â’ˆ.≮𑄳â€ð®; ; [B1, P1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳ð®
-ò”­œÏƒá¡±â’ˆ.≮𑄳â€ð®; ò”­œÏƒá¡±â’ˆ.≮𑄳â€ð®; [B1, P1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳ð®
+xn--1-zmb699meq63t..xn--1ug85gn777ahze; ò”­œÏƒá¡±1..≮𑄳\u200Dð®; [B1, V6, X4_2]; xn--1-zmb699meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; ; # σᡱ1..≮𑄳ð®
+xn--1-xmb999meq63t..xn--1ug85gn777ahze; ò”­œÏ‚ᡱ1..≮𑄳\u200Dð®; [B1, V6, X4_2]; xn--1-xmb999meq63t..xn--1ug85gn777ahze; [B1, V6, A4_2]; ; # ςᡱ1..≮𑄳ð®
+ò”­œÎ£á¡±â’ˆ.<\u0338ð‘„³\u200Dð®; ò”­œÏƒá¡±â’ˆ.≮𑄳\u200Dð®; [B1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳ð®
+ò”­œÎ£á¡±â’ˆ.≮𑄳\u200Dð®; ò”­œÏƒá¡±â’ˆ.≮𑄳\u200Dð®; [B1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳ð®
+ò”­œÏƒá¡±â’ˆ.≮𑄳\u200Dð®; ; [B1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳ð®
+ò”­œÏƒá¡±â’ˆ.<\u0338ð‘„³\u200Dð®; ò”­œÏƒá¡±â’ˆ.≮𑄳\u200Dð®; [B1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; xn--4xa207hkzinr77u.xn--gdh5392g6sd; # σᡱ⒈.≮𑄳ð®
xn--4xa207hkzinr77u.xn--gdh5392g6sd; ò”­œÏƒá¡±â’ˆ.≮𑄳ð®; [B1, V6]; xn--4xa207hkzinr77u.xn--gdh5392g6sd; ; ; # σᡱ⒈.≮𑄳ð®
-xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ò”­œÏƒá¡±â’ˆ.≮𑄳â€ð®; [B1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; ; # σᡱ⒈.≮𑄳ð®
-xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ò”­œÏ‚ᡱ⒈.≮𑄳â€ð®; [B1, V6]; xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ; ; # ςᡱ⒈.≮𑄳ð®
-ã…¤à¥á‚ áŸ.á ‹; ã…¤à¥á‚ áŸ.; [P1, V6]; xn--n3b468azngju2a.; ; ; # à¥á‚ áŸ.
-á… à¥á‚ áŸ.á ‹; á… à¥á‚ áŸ.; [P1, V6]; xn--n3b468aoqa89r.; ; ; # à¥á‚ áŸ.
-á… à¥â´€áŸ.á ‹; á… à¥â´€áŸ.; [P1, V6]; xn--n3b742bkqf4ty.; ; ; # à¥â´€áŸ.
-xn--n3b742bkqf4ty.; á… à¥â´€áŸ.; [V6]; xn--n3b742bkqf4ty.; ; ; # à¥â´€áŸ.
-xn--n3b468aoqa89r.; á… à¥á‚ áŸ.; [V6]; xn--n3b468aoqa89r.; ; ; # à¥á‚ áŸ.
-ã…¤à¥â´€áŸ.á ‹; ã…¤à¥â´€áŸ.; [P1, V6]; xn--n3b445e53po6d.; ; ; # à¥â´€áŸ.
-xn--n3b445e53po6d.; ã…¤à¥â´€áŸ.; [V6]; xn--n3b445e53po6d.; ; ; # à¥â´€áŸ.
-xn--n3b468azngju2a.; ã…¤à¥á‚ áŸ.; [V6]; xn--n3b468azngju2a.; ; ; # à¥á‚ áŸ.
-â£â€ï¼Žà§ð‘°½Ø’ꤩ; â£â€.à§ð‘°½Ø’ꤩ; [C2, V5]; xn--1ugy10a.xn--0fb32q3w7q2g4d; ; xn--pei.xn--0fb32q3w7q2g4d; [V5] # â£.à§ð‘°½Ø’ꤩ
-â£â€.à§ð‘°½Ø’ꤩ; ; [C2, V5]; xn--1ugy10a.xn--0fb32q3w7q2g4d; ; xn--pei.xn--0fb32q3w7q2g4d; [V5] # â£.à§ð‘°½Ø’ꤩ
-xn--pei.xn--0fb32q3w7q2g4d; â£.à§ð‘°½Ø’ꤩ; [V5]; xn--pei.xn--0fb32q3w7q2g4d; ; ; # â£.à§ð‘°½Ø’ꤩ
-xn--1ugy10a.xn--0fb32q3w7q2g4d; â£â€.à§ð‘°½Ø’ꤩ; [C2, V5]; xn--1ugy10a.xn--0fb32q3w7q2g4d; ; ; # â£.à§ð‘°½Ø’ꤩ
-≮ð³ºð¹„.≯ñª®¸ê¡…; ; [B1, P1, V6]; xn--gdh7943gk2a.xn--hdh1383c5e36c; ; ; # ≮ð³º.≯ꡅ
-≮ð³ºð¹„.≯ñª®¸ê¡…; ≮ð³ºð¹„.≯ñª®¸ê¡…; [B1, P1, V6]; xn--gdh7943gk2a.xn--hdh1383c5e36c; ; ; # ≮ð³º.≯ꡅ
+xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ò”­œÏƒá¡±â’ˆ.≮𑄳\u200Dð®; [B1, V6]; xn--4xa207hkzinr77u.xn--1ug85gn777ahze; ; ; # σᡱ⒈.≮𑄳ð®
+xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ò”­œÏ‚ᡱ⒈.≮𑄳\u200Dð®; [B1, V6]; xn--3xa407hkzinr77u.xn--1ug85gn777ahze; ; ; # ςᡱ⒈.≮𑄳ð®
+\u3164\u094Dá‚ \u17D0.\u180B; \u3164\u094Dá‚ \u17D0.; [V6]; xn--n3b468azngju2a.; ; ; # à¥á‚ áŸ.
+\u1160\u094Dá‚ \u17D0.\u180B; \u1160\u094Dá‚ \u17D0.; [V6]; xn--n3b468aoqa89r.; ; ; # à¥á‚ áŸ.
+\u1160\u094Dâ´€\u17D0.\u180B; \u1160\u094Dâ´€\u17D0.; [V6]; xn--n3b742bkqf4ty.; ; ; # à¥â´€áŸ.
+xn--n3b742bkqf4ty.; \u1160\u094Dâ´€\u17D0.; [V6]; xn--n3b742bkqf4ty.; ; ; # à¥â´€áŸ.
+xn--n3b468aoqa89r.; \u1160\u094Dá‚ \u17D0.; [V6]; xn--n3b468aoqa89r.; ; ; # à¥á‚ áŸ.
+\u3164\u094Dâ´€\u17D0.\u180B; \u3164\u094Dâ´€\u17D0.; [V6]; xn--n3b445e53po6d.; ; ; # à¥â´€áŸ.
+xn--n3b445e53po6d.; \u3164\u094Dâ´€\u17D0.; [V6]; xn--n3b445e53po6d.; ; ; # à¥â´€áŸ.
+xn--n3b468azngju2a.; \u3164\u094Dá‚ \u17D0.; [V6]; xn--n3b468azngju2a.; ; ; # à¥á‚ áŸ.
+â£\u200D.\u09CDð‘°½\u0612\uA929; â£\u200D.\u09CDð‘°½\u0612\uA929; [C2, V5]; xn--1ugy10a.xn--0fb32q3w7q2g4d; ; xn--pei.xn--0fb32q3w7q2g4d; [V5] # â£.à§ð‘°½Ø’ꤩ
+â£\u200D.\u09CDð‘°½\u0612\uA929; ; [C2, V5]; xn--1ugy10a.xn--0fb32q3w7q2g4d; ; xn--pei.xn--0fb32q3w7q2g4d; [V5] # â£.à§ð‘°½Ø’ꤩ
+xn--pei.xn--0fb32q3w7q2g4d; â£.\u09CDð‘°½\u0612\uA929; [V5]; xn--pei.xn--0fb32q3w7q2g4d; ; ; # â£.à§ð‘°½Ø’ꤩ
+xn--1ugy10a.xn--0fb32q3w7q2g4d; â£\u200D.\u09CDð‘°½\u0612\uA929; [C2, V5]; xn--1ugy10a.xn--0fb32q3w7q2g4d; ; ; # â£.à§ð‘°½Ø’ꤩ
+≮ð³ºð¹„.≯ñª®¸ê¡…; ; [B1, V6]; xn--gdh7943gk2a.xn--hdh1383c5e36c; ; ; # ≮ð³º.≯ꡅ
+<\u0338ð³ºð¹„.>\u0338ñª®¸ê¡…; ≮ð³ºð¹„.≯ñª®¸ê¡…; [B1, V6]; xn--gdh7943gk2a.xn--hdh1383c5e36c; ; ; # ≮ð³º.≯ꡅ
xn--gdh7943gk2a.xn--hdh1383c5e36c; ≮ð³ºð¹„.≯ñª®¸ê¡…; [B1, V6]; xn--gdh7943gk2a.xn--hdh1383c5e36c; ; ; # ≮ð³º.≯ꡅ
-ೌð§…ð³ó ²ºï½¡à³á ¦; ೌð§…ð³ó ²º.à³á ¦; [B1, P1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌð§…ð³.à³á ¦
-ೌð§…ð³ó ²ºã€‚à³á ¦; ೌð§…ð³ó ²º.à³á ¦; [B1, P1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌð§…ð³.à³á ¦
-ೌð§…ð²ó ²ºã€‚à³á ¦; ೌð§…ð³ó ²º.à³á ¦; [B1, P1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌð§…ð³.à³á ¦
-xn--7tc6360ky5bn2732c.xn--8tc429c; ೌð§…ð³ó ²º.à³á ¦; [B1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌð§…ð³.à³á ¦
-ೌð§…ð²ó ²ºï½¡à³á ¦; ೌð§…ð³ó ²º.à³á ¦; [B1, P1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌð§…ð³.à³á ¦
-͉。𧡫; ͉.𧡫; [V5]; xn--nua.xn--bc6k; ; ; # ͉.𧡫
-xn--nua.xn--bc6k; ͉.𧡫; [V5]; xn--nua.xn--bc6k; ; ; # ͉.𧡫
-𑰿󠅦.ᅠ; 𑰿.ᅠ; [P1, V5, V6]; xn--ok3d.xn--psd; ; ; # 𑰿.
-ð‘°¿ó …¦.á… ; ð‘°¿.á… ; [P1, V5, V6]; xn--ok3d.xn--psd; ; ; # ð‘°¿.
-xn--ok3d.xn--psd; ð‘°¿.á… ; [V5, V6]; xn--ok3d.xn--psd; ; ; # ð‘°¿.
--𞤆â€ã€‚󸼄𞳒; -𞤨â€.󸼄𞳒; [B1, B5, B6, C2, P1, V3, V6]; xn----ugnx367r.xn--846h96596c; ; xn----ni8r.xn--846h96596c; [B1, B5, B6, P1, V3, V6] # -𞤨.
--𞤨â€ã€‚󸼄𞳒; -𞤨â€.󸼄𞳒; [B1, B5, B6, C2, P1, V3, V6]; xn----ugnx367r.xn--846h96596c; ; xn----ni8r.xn--846h96596c; [B1, B5, B6, P1, V3, V6] # -𞤨.
+\u0CCCð§…ð³ó ²ºï½¡\u0CCDá ¦; \u0CCCð§…ð³ó ²º.\u0CCDá ¦; [B1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌð§…ð³.à³á ¦
+\u0CCCð§…ð³ó ²ºã€‚\u0CCDá ¦; \u0CCCð§…ð³ó ²º.\u0CCDá ¦; [B1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌð§…ð³.à³á ¦
+\u0CCCð§…ð²ó ²ºã€‚\u0CCDá ¦; \u0CCCð§…ð³ó ²º.\u0CCDá ¦; [B1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌð§…ð³.à³á ¦
+xn--7tc6360ky5bn2732c.xn--8tc429c; \u0CCCð§…ð³ó ²º.\u0CCDá ¦; [B1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌð§…ð³.à³á ¦
+\u0CCCð§…ð²ó ²ºï½¡\u0CCDá ¦; \u0CCCð§…ð³ó ²º.\u0CCDá ¦; [B1, V5, V6]; xn--7tc6360ky5bn2732c.xn--8tc429c; ; ; # ೌð§…ð³.à³á ¦
+\u0349。𧡫; \u0349.𧡫; [V5]; xn--nua.xn--bc6k; ; ; # ͉.𧡫
+xn--nua.xn--bc6k; \u0349.𧡫; [V5]; xn--nua.xn--bc6k; ; ; # ͉.𧡫
+𑰿󠅦.\u1160; 𑰿.\u1160; [V5, V6]; xn--ok3d.xn--psd; ; ; # 𑰿.
+ð‘°¿ó …¦.\u1160; ð‘°¿.\u1160; [V5, V6]; xn--ok3d.xn--psd; ; ; # ð‘°¿.
+xn--ok3d.xn--psd; ð‘°¿.\u1160; [V5, V6]; xn--ok3d.xn--psd; ; ; # ð‘°¿.
+-𞤆\u200D。󸼄𞳒; -𞤨\u200D.󸼄𞳒; [B1, B5, B6, C2, V3, V6]; xn----ugnx367r.xn--846h96596c; ; xn----ni8r.xn--846h96596c; [B1, B5, B6, V3, V6] # -𞤨.
+-𞤨\u200D。󸼄𞳒; -𞤨\u200D.󸼄𞳒; [B1, B5, B6, C2, V3, V6]; xn----ugnx367r.xn--846h96596c; ; xn----ni8r.xn--846h96596c; [B1, B5, B6, V3, V6] # -𞤨.
xn----ni8r.xn--846h96596c; -𞤨.󸼄𞳒; [B1, B5, B6, V3, V6]; xn----ni8r.xn--846h96596c; ; ; # -𞤨.
-xn----ugnx367r.xn--846h96596c; -𞤨â€.󸼄𞳒; [B1, B5, B6, C2, V3, V6]; xn----ugnx367r.xn--846h96596c; ; ; # -𞤨.
-ê¡ó ‡¶â‰¯ð³¾½ã€‚᷽⾇滸ð¹°; ê¡ó ‡¶â‰¯ð³¾½.᷽舛滸ð¹°; [B1, P1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ê¡â‰¯.᷽舛滸ð¹°
-ê¡ó ‡¶≯𳾽。᷽⾇滸ð¹°; ê¡ó ‡¶â‰¯ð³¾½.᷽舛滸ð¹°; [B1, P1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ê¡â‰¯.᷽舛滸ð¹°
-ê¡ó ‡¶â‰¯ð³¾½ã€‚᷽舛滸ð¹°; ê¡ó ‡¶â‰¯ð³¾½.᷽舛滸ð¹°; [B1, P1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ê¡â‰¯.᷽舛滸ð¹°
-ê¡ó ‡¶≯𳾽。᷽舛滸ð¹°; ê¡ó ‡¶â‰¯ð³¾½.᷽舛滸ð¹°; [B1, P1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ê¡â‰¯.᷽舛滸ð¹°
-xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ê¡ó ‡¶â‰¯ð³¾½.᷽舛滸ð¹°; [B1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ê¡â‰¯.᷽舛滸ð¹°
+xn----ugnx367r.xn--846h96596c; -𞤨\u200D.󸼄𞳒; [B1, B5, B6, C2, V3, V6]; xn----ugnx367r.xn--846h96596c; ; ; # -𞤨.
+ê¡ó ‡¶â‰¯ð³¾½ã€‚\u1DFD⾇滸ð¹°; ê¡ó ‡¶â‰¯ð³¾½.\u1DFD舛滸ð¹°; [B1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ê¡â‰¯.᷽舛滸ð¹°
+ê¡ó ‡¶>\u0338𳾽。\u1DFD⾇滸ð¹°; ê¡ó ‡¶â‰¯ð³¾½.\u1DFD舛滸ð¹°; [B1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ê¡â‰¯.᷽舛滸ð¹°
+ê¡ó ‡¶â‰¯ð³¾½ã€‚\u1DFD舛滸ð¹°; ê¡ó ‡¶â‰¯ð³¾½.\u1DFD舛滸ð¹°; [B1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ê¡â‰¯.᷽舛滸ð¹°
+ê¡ó ‡¶>\u0338𳾽。\u1DFD舛滸ð¹°; ê¡ó ‡¶â‰¯ð³¾½.\u1DFD舛滸ð¹°; [B1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ê¡â‰¯.᷽舛滸ð¹°
+xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ê¡ó ‡¶â‰¯ð³¾½.\u1DFD舛滸ð¹°; [B1, V5, V6]; xn--hdh7483cu6twwki8e.xn--yfg0765a58l0n6k; ; ; # ê¡â‰¯.᷽舛滸ð¹°
è”。𑰺; è”.ð‘°º; [V5]; xn--uy1a.xn--jk3d; ; ; # è”.ð‘°º
è”。𑰺; è”.ð‘°º; [V5]; xn--uy1a.xn--jk3d; ; ; # è”.ð‘°º
xn--uy1a.xn--jk3d; è”.ð‘°º; [V5]; xn--uy1a.xn--jk3d; ; ; # è”.ð‘°º
ðŸ¿ð®‹ã€‚ó „Š; 9ð®‹.; [B1]; xn--9-rv5i.; ; ; # 9ð®‹.
9ð®‹ã€‚ó „Š; 9ð®‹.; [B1]; xn--9-rv5i.; ; ; # 9ð®‹.
xn--9-rv5i.; 9ð®‹.; [B1]; xn--9-rv5i.; ; ; # 9ð®‹.
-󟇇-䟖F。ߋ⒈٢; 󟇇-䟖f.ߋ⒈٢; [B4, P1, V6]; xn---f-mz8b08788k.xn--bib53ev44d; ; ; # -䟖f.ߋ⒈٢
-󟇇-䟖F。ߋ1.٢; 󟇇-䟖f.ߋ1.٢; [B1, P1, V6]; xn---f-mz8b08788k.xn--1-ybd.xn--bib; ; ; # -䟖f.ߋ1.٢
-󟇇-䟖f。ߋ1.٢; 󟇇-䟖f.ߋ1.٢; [B1, P1, V6]; xn---f-mz8b08788k.xn--1-ybd.xn--bib; ; ; # -䟖f.ߋ1.٢
-xn---f-mz8b08788k.xn--1-ybd.xn--bib; 󟇇-䟖f.ߋ1.٢; [B1, V6]; xn---f-mz8b08788k.xn--1-ybd.xn--bib; ; ; # -䟖f.ߋ1.٢
-󟇇-䟖f。ߋ⒈٢; 󟇇-䟖f.ߋ⒈٢; [B4, P1, V6]; xn---f-mz8b08788k.xn--bib53ev44d; ; ; # -䟖f.ߋ⒈٢
-xn---f-mz8b08788k.xn--bib53ev44d; 󟇇-䟖f.ߋ⒈٢; [B4, V6]; xn---f-mz8b08788k.xn--bib53ev44d; ; ; # -䟖f.ߋ⒈٢
-‌。ð¹º; ‌.ð¹º; [B1, C1]; xn--0ug.xn--yo0d; ; .xn--yo0d; [B1, A4_2] # .ð¹º
-‌。ð¹º; ‌.ð¹º; [B1, C1]; xn--0ug.xn--yo0d; ; .xn--yo0d; [B1, A4_2] # .ð¹º
+󟇇-䟖F。\u07CB⒈\u0662; 󟇇-䟖f.\u07CB⒈\u0662; [B4, V6]; xn---f-mz8b08788k.xn--bib53ev44d; ; ; # -䟖f.ߋ⒈٢
+󟇇-䟖F。\u07CB1.\u0662; 󟇇-䟖f.\u07CB1.\u0662; [B1, V6]; xn---f-mz8b08788k.xn--1-ybd.xn--bib; ; ; # -䟖f.ߋ1.٢
+󟇇-䟖f。\u07CB1.\u0662; 󟇇-䟖f.\u07CB1.\u0662; [B1, V6]; xn---f-mz8b08788k.xn--1-ybd.xn--bib; ; ; # -䟖f.ߋ1.٢
+xn---f-mz8b08788k.xn--1-ybd.xn--bib; 󟇇-䟖f.\u07CB1.\u0662; [B1, V6]; xn---f-mz8b08788k.xn--1-ybd.xn--bib; ; ; # -䟖f.ߋ1.٢
+󟇇-䟖f。\u07CB⒈\u0662; 󟇇-䟖f.\u07CB⒈\u0662; [B4, V6]; xn---f-mz8b08788k.xn--bib53ev44d; ; ; # -䟖f.ߋ⒈٢
+xn---f-mz8b08788k.xn--bib53ev44d; 󟇇-䟖f.\u07CB⒈\u0662; [B4, V6]; xn---f-mz8b08788k.xn--bib53ev44d; ; ; # -䟖f.ߋ⒈٢
+\u200C。ð¹º; \u200C.ð¹º; [B1, C1]; xn--0ug.xn--yo0d; ; .xn--yo0d; [B1, A4_2] # .ð¹º
+\u200C。ð¹º; \u200C.ð¹º; [B1, C1]; xn--0ug.xn--yo0d; ; .xn--yo0d; [B1, A4_2] # .ð¹º
.xn--yo0d; .ð¹º; [B1, X4_2]; .xn--yo0d; [B1, A4_2]; ; # .ð¹º
-xn--0ug.xn--yo0d; ‌.ð¹º; [B1, C1]; xn--0ug.xn--yo0d; ; ; # .ð¹º
-ð¡†.≯‌-𞥀; ; [B1, C1, P1, V6]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1, P1, V6] # ð¡†.≯-𞥀
-ð¡†.≯‌-𞥀; ð¡†.≯‌-𞥀; [B1, C1, P1, V6]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1, P1, V6] # ð¡†.≯-𞥀
-ð¡†.≯‌-𞤞; ð¡†.≯‌-𞥀; [B1, C1, P1, V6]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1, P1, V6] # ð¡†.≯-𞥀
-ð¡†.≯‌-𞤞; ð¡†.≯‌-𞥀; [B1, C1, P1, V6]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1, P1, V6] # ð¡†.≯-𞥀
-xn--le9c.xn----ogo9956r; ð¡†.≯-𞥀; [B1, V6]; xn--le9c.xn----ogo9956r; ; ; # ð¡†.≯-𞥀
-xn--le9c.xn----rgn40iy359e; ð¡†.≯‌-𞥀; [B1, C1, V6]; xn--le9c.xn----rgn40iy359e; ; ; # ð¡†.≯-𞥀
-ó €-。≠ﳗ; ó €-.≠هج; [B1, P1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج
-ó €-。≠ﳗ; ó €-.≠هج; [B1, P1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج
-ó €-。≠هج; ó €-.≠هج; [B1, P1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج
-ó €-。≠هج; ó €-.≠هج; [B1, P1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج
-xn----f411m.xn--rgb7c611j; ó €-.≠هج; [B1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج
-ñ»¬¹ð‘ˆµã€‚â€ðž¨¶; ñ»¬¹ð‘ˆµ.â€ðž¨¶; [B1, C2, P1, V6]; xn--8g1d12120a.xn--1ug6651p; ; xn--8g1d12120a.xn--5l6h; [P1, V6] # 𑈵.
+xn--0ug.xn--yo0d; \u200C.ð¹º; [B1, C1]; xn--0ug.xn--yo0d; ; ; # .ð¹º
+ð¡†.≯\u200C-𞥀; ; [B1, C1]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1] # ð¡†.≯-𞥀
+ð¡†.>\u0338\u200C-𞥀; ð¡†.≯\u200C-𞥀; [B1, C1]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1] # ð¡†.≯-𞥀
+ð¡†.>\u0338\u200C-𞤞; ð¡†.≯\u200C-𞥀; [B1, C1]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1] # ð¡†.≯-𞥀
+ð¡†.≯\u200C-𞤞; ð¡†.≯\u200C-𞥀; [B1, C1]; xn--le9c.xn----rgn40iy359e; ; xn--le9c.xn----ogo9956r; [B1] # ð¡†.≯-𞥀
+xn--le9c.xn----ogo9956r; ð¡†.≯-𞥀; [B1]; xn--le9c.xn----ogo9956r; ; ; # ð¡†.≯-𞥀
+xn--le9c.xn----rgn40iy359e; ð¡†.≯\u200C-𞥀; [B1, C1]; xn--le9c.xn----rgn40iy359e; ; ; # ð¡†.≯-𞥀
+ó €-。≠\uFCD7; ó €-.≠\u0647\u062C; [B1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج
+ó €-。=\u0338\uFCD7; ó €-.≠\u0647\u062C; [B1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج
+ó €-。≠\u0647\u062C; ó €-.≠\u0647\u062C; [B1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج
+ó €-。=\u0338\u0647\u062C; ó €-.≠\u0647\u062C; [B1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج
+xn----f411m.xn--rgb7c611j; ó €-.≠\u0647\u062C; [B1, V3, V6]; xn----f411m.xn--rgb7c611j; ; ; # -.≠هج
+񻬹𑈵。\u200D𞨶; 񻬹𑈵.\u200D𞨶; [B1, C2, V6]; xn--8g1d12120a.xn--1ug6651p; ; xn--8g1d12120a.xn--5l6h; [V6] # 𑈵.
xn--8g1d12120a.xn--5l6h; 񻬹𑈵.𞨶; [V6]; xn--8g1d12120a.xn--5l6h; ; ; # 𑈵.
-xn--8g1d12120a.xn--1ug6651p; ñ»¬¹ð‘ˆµ.â€ðž¨¶; [B1, C2, V6]; xn--8g1d12120a.xn--1ug6651p; ; ; # 𑈵.
-𑋧꧀2。㧉򒖄; 𑋧꧀2.㧉򒖄; [P1, V5, V6]; xn--2-5z4eu89y.xn--97l02706d; ; ; # 𑋧꧀2.㧉
-𑋧꧀2。㧉򒖄; 𑋧꧀2.㧉򒖄; [P1, V5, V6]; xn--2-5z4eu89y.xn--97l02706d; ; ; # 𑋧꧀2.㧉
-xn--2-5z4eu89y.xn--97l02706d; 𑋧꧀2.㧉򒖄; [V5, V6]; xn--2-5z4eu89y.xn--97l02706d; ; ; # 𑋧꧀2.㧉
-‌𽬄ð¹´ðž©¥ã€‚≯6; ‌𽬄ð¹´ðž©¥.≯6; [B1, C1, P1, V6]; xn--0ug7105gf5wfxepq.xn--6-ogo; ; xn--so0du768aim9m.xn--6-ogo; [B1, B5, B6, P1, V6] # ð¹´.≯6
-‌𽬄ð¹´ðž©¥ã€‚≯6; ‌𽬄ð¹´ðž©¥.≯6; [B1, C1, P1, V6]; xn--0ug7105gf5wfxepq.xn--6-ogo; ; xn--so0du768aim9m.xn--6-ogo; [B1, B5, B6, P1, V6] # ð¹´.≯6
+xn--8g1d12120a.xn--1ug6651p; 񻬹𑈵.\u200D𞨶; [B1, C2, V6]; xn--8g1d12120a.xn--1ug6651p; ; ; # 𑈵.
+𑋧\uA9C02。㧉򒖄; 𑋧\uA9C02.㧉򒖄; [V5, V6]; xn--2-5z4eu89y.xn--97l02706d; ; ; # 𑋧꧀2.㧉
+𑋧\uA9C02。㧉򒖄; 𑋧\uA9C02.㧉򒖄; [V5, V6]; xn--2-5z4eu89y.xn--97l02706d; ; ; # 𑋧꧀2.㧉
+xn--2-5z4eu89y.xn--97l02706d; 𑋧\uA9C02.㧉򒖄; [V5, V6]; xn--2-5z4eu89y.xn--97l02706d; ; ; # 𑋧꧀2.㧉
+\u200C𽬄ð¹´ðž©¥ã€‚≯6; \u200C𽬄ð¹´ðž©¥.≯6; [B1, C1, V6]; xn--0ug7105gf5wfxepq.xn--6-ogo; ; xn--so0du768aim9m.xn--6-ogo; [B1, B5, B6, V6] # ð¹´.≯6
+\u200C𽬄ð¹´ðž©¥ã€‚>\u03386; \u200C𽬄ð¹´ðž©¥.≯6; [B1, C1, V6]; xn--0ug7105gf5wfxepq.xn--6-ogo; ; xn--so0du768aim9m.xn--6-ogo; [B1, B5, B6, V6] # ð¹´.≯6
xn--so0du768aim9m.xn--6-ogo; 𽬄ð¹´ðž©¥.≯6; [B1, B5, B6, V6]; xn--so0du768aim9m.xn--6-ogo; ; ; # ð¹´.≯6
-xn--0ug7105gf5wfxepq.xn--6-ogo; ‌𽬄ð¹´ðž©¥.≯6; [B1, C1, V6]; xn--0ug7105gf5wfxepq.xn--6-ogo; ; ; # ð¹´.≯6
-ð‘¿ï¼Žð¹¦ð»žµ-â€; ð‘¿.ð¹¦ð»žµ-â€; [B1, B3, B6, C2, P1, V5, V6]; xn--q30d.xn----ugn1088hfsxv; ; xn--q30d.xn----i26i1299n; [B1, B3, B6, P1, V3, V5, V6] # ð‘¿.ð¹¦-
-ð‘¿.ð¹¦ð»žµ-â€; ; [B1, B3, B6, C2, P1, V5, V6]; xn--q30d.xn----ugn1088hfsxv; ; xn--q30d.xn----i26i1299n; [B1, B3, B6, P1, V3, V5, V6] # ð‘¿.ð¹¦-
-xn--q30d.xn----i26i1299n; ð‘¿.ð¹¦ð»žµ-; [B1, B3, B6, V3, V5, V6]; xn--q30d.xn----i26i1299n; ; ; # ð‘¿.ð¹¦-
-xn--q30d.xn----ugn1088hfsxv; ð‘¿.ð¹¦ð»žµ-â€; [B1, B3, B6, C2, V5, V6]; xn--q30d.xn----ugn1088hfsxv; ; ; # ð‘¿.ð¹¦-
-⤸ς𺱀。ᅠ; ⤸ς𺱀.ᅠ; [P1, V6]; xn--3xa392qmp03d.xn--cl7c; ; xn--4xa192qmp03d.xn--cl7c; # ⤸ς.
-⤸ς𺱀。ᅠ; ⤸ς𺱀.ᅠ; [P1, V6]; xn--3xa392qmp03d.xn--psd; ; xn--4xa192qmp03d.xn--psd; # ⤸ς.
-⤸Σ𺱀。ᅠ; ⤸σ𺱀.ᅠ; [P1, V6]; xn--4xa192qmp03d.xn--psd; ; ; # ⤸σ.
-⤸σ𺱀。ᅠ; ⤸σ𺱀.ᅠ; [P1, V6]; xn--4xa192qmp03d.xn--psd; ; ; # ⤸σ.
-xn--4xa192qmp03d.xn--psd; ⤸σ𺱀.ᅠ; [V6]; xn--4xa192qmp03d.xn--psd; ; ; # ⤸σ.
-xn--3xa392qmp03d.xn--psd; ⤸ς𺱀.ᅠ; [V6]; xn--3xa392qmp03d.xn--psd; ; ; # ⤸ς.
-⤸Σ𺱀。ᅠ; ⤸σ𺱀.ᅠ; [P1, V6]; xn--4xa192qmp03d.xn--cl7c; ; ; # ⤸σ.
-⤸σ𺱀。ᅠ; ⤸σ𺱀.ᅠ; [P1, V6]; xn--4xa192qmp03d.xn--cl7c; ; ; # ⤸σ.
-xn--4xa192qmp03d.xn--cl7c; ⤸σ𺱀.ᅠ; [V6]; xn--4xa192qmp03d.xn--cl7c; ; ; # ⤸σ.
-xn--3xa392qmp03d.xn--cl7c; ⤸ς𺱀.ᅠ; [V6]; xn--3xa392qmp03d.xn--cl7c; ; ; # ⤸ς.
-ݥဵð«”Û•.ð¦¬ð‘‹ªá‚£; ; [B2, B3, P1, V6]; xn--llb10as9tqp5y.xn--bnd9168j21f; ; ; # ݥဵð«”Û•.ð¦¬ð‘‹ªá‚£
-ݥဵð«”Û•.ð¦¬ð‘‹ªâ´ƒ; ; [B2, B3]; xn--llb10as9tqp5y.xn--ukj7371e21f; ; ; # ݥဵð«”Û•.ð¦¬ð‘‹ªâ´ƒ
-xn--llb10as9tqp5y.xn--ukj7371e21f; ݥဵð«”Û•.ð¦¬ð‘‹ªâ´ƒ; [B2, B3]; xn--llb10as9tqp5y.xn--ukj7371e21f; ; ; # ݥဵð«”Û•.ð¦¬ð‘‹ªâ´ƒ
-xn--llb10as9tqp5y.xn--bnd9168j21f; ݥဵð«”Û•.ð¦¬ð‘‹ªá‚£; [B2, B3, V6]; xn--llb10as9tqp5y.xn--bnd9168j21f; ; ; # ݥဵð«”Û•.ð¦¬ð‘‹ªá‚£
-١᭄-킼.᮪ؖ٬≯; ; [B1, B5, B6, P1, V5, V6]; xn----9pc551nk39n.xn--4fb6o571degg; ; ; # ١᭄-킼.᮪ؖ٬≯
-Ù¡á­„-á„ᅵᆿ.᮪ؖ٬≯; Ù¡á­„-킼.᮪ؖ٬≯; [B1, B5, B6, P1, V5, V6]; xn----9pc551nk39n.xn--4fb6o571degg; ; ; # Ù¡á­„-킼.᮪ؖ٬≯
-xn----9pc551nk39n.xn--4fb6o571degg; ١᭄-킼.᮪ؖ٬≯; [B1, B5, B6, V5, V6]; xn----9pc551nk39n.xn--4fb6o571degg; ; ; # ١᭄-킼.᮪ؖ٬≯
--。ۂ؄򅖡𑓂; -.ۂ؄򅖡𑓂; [B1, B2, B3, P1, V3, V6]; -.xn--mfb39a7208dzgs3d; ; ; # -.ۂ𑓂
--。Ûٔ؄ò…–¡ð‘“‚; -.Û‚Ø„ò…–¡ð‘“‚; [B1, B2, B3, P1, V3, V6]; -.xn--mfb39a7208dzgs3d; ; ; # -.Û‚ð‘“‚
--.xn--mfb39a7208dzgs3d; -.Û‚Ø„ò…–¡ð‘“‚; [B1, B2, B3, V3, V6]; -.xn--mfb39a7208dzgs3d; ; ; # -.Û‚ð‘“‚
-â€ó¯‘–ó ï¼ŽÖ½ð™®°ê¡ð‹¡; â€ó¯‘–ó .ֽ𙮰ê¡ð‹¡; [C2, P1, V5, V6]; xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; ; xn--b726ey18m.xn--ldb8734fg0qcyzzg; [P1, V5, V6] # .Ö½ê¡ð‹¡
-â€ó¯‘–ó .ֽ𙮰ê¡ð‹¡; ; [C2, P1, V5, V6]; xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; ; xn--b726ey18m.xn--ldb8734fg0qcyzzg; [P1, V5, V6] # .Ö½ê¡ð‹¡
-xn--b726ey18m.xn--ldb8734fg0qcyzzg; 󯑖ó .ֽ𙮰ê¡ð‹¡; [V5, V6]; xn--b726ey18m.xn--ldb8734fg0qcyzzg; ; ; # .Ö½ê¡ð‹¡
-xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; â€ó¯‘–ó .ֽ𙮰ê¡ð‹¡; [C2, V5, V6]; xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; ; ; # .Ö½ê¡ð‹¡
-︒ôƒˆµÏ‚ñ€ ‡ï½¡ð®ˆ; ︒ôƒˆµÏ‚ñ€ ‡.ð®ˆ; [B1, P1, V6]; xn--3xa3729jwz5t7gl5f.xn--f29c; ; xn--4xa1729jwz5t7gl5f.xn--f29c; # ︒ς.ð®ˆ
-。ôƒˆµÏ‚ñ€ ‡ã€‚ð®ˆ; .ôƒˆµÏ‚ñ€ ‡.ð®ˆ; [P1, V6, X4_2]; .xn--3xa88573c7n64d.xn--f29c; [P1, V6, A4_2]; .xn--4xa68573c7n64d.xn--f29c; # .Ï‚.ð®ˆ
-。ôƒˆµÎ£ñ€ ‡ã€‚ð®ˆ; .ôƒˆµÏƒñ€ ‡.ð®ˆ; [P1, V6, X4_2]; .xn--4xa68573c7n64d.xn--f29c; [P1, V6, A4_2]; ; # .σ.ð®ˆ
-。ôƒˆµÏƒñ€ ‡ã€‚ð®ˆ; .ôƒˆµÏƒñ€ ‡.ð®ˆ; [P1, V6, X4_2]; .xn--4xa68573c7n64d.xn--f29c; [P1, V6, A4_2]; ; # .σ.ð®ˆ
+xn--0ug7105gf5wfxepq.xn--6-ogo; \u200C𽬄ð¹´ðž©¥.≯6; [B1, C1, V6]; xn--0ug7105gf5wfxepq.xn--6-ogo; ; ; # ð¹´.≯6
+ð‘¿ï¼Žð¹¦ð»žµ-\u200D; ð‘¿.ð¹¦ð»žµ-\u200D; [B1, C2, V5, V6]; xn--q30d.xn----ugn1088hfsxv; ; xn--q30d.xn----i26i1299n; [B1, V3, V5, V6] # ð‘¿.ð¹¦-
+ð‘¿.ð¹¦ð»žµ-\u200D; ; [B1, C2, V5, V6]; xn--q30d.xn----ugn1088hfsxv; ; xn--q30d.xn----i26i1299n; [B1, V3, V5, V6] # ð‘¿.ð¹¦-
+xn--q30d.xn----i26i1299n; ð‘¿.ð¹¦ð»žµ-; [B1, V3, V5, V6]; xn--q30d.xn----i26i1299n; ; ; # ð‘¿.ð¹¦-
+xn--q30d.xn----ugn1088hfsxv; ð‘¿.ð¹¦ð»žµ-\u200D; [B1, C2, V5, V6]; xn--q30d.xn----ugn1088hfsxv; ; ; # ð‘¿.ð¹¦-
+⤸ς𺱀。\uFFA0; ⤸ς𺱀.\uFFA0; [V6]; xn--3xa392qmp03d.xn--cl7c; ; xn--4xa192qmp03d.xn--cl7c; # ⤸ς.
+⤸ς𺱀。\u1160; ⤸ς𺱀.\u1160; [V6]; xn--3xa392qmp03d.xn--psd; ; xn--4xa192qmp03d.xn--psd; # ⤸ς.
+⤸Σ𺱀。\u1160; ⤸σ𺱀.\u1160; [V6]; xn--4xa192qmp03d.xn--psd; ; ; # ⤸σ.
+⤸σ𺱀。\u1160; ⤸σ𺱀.\u1160; [V6]; xn--4xa192qmp03d.xn--psd; ; ; # ⤸σ.
+xn--4xa192qmp03d.xn--psd; ⤸σ𺱀.\u1160; [V6]; xn--4xa192qmp03d.xn--psd; ; ; # ⤸σ.
+xn--3xa392qmp03d.xn--psd; ⤸ς𺱀.\u1160; [V6]; xn--3xa392qmp03d.xn--psd; ; ; # ⤸ς.
+⤸Σ𺱀。\uFFA0; ⤸σ𺱀.\uFFA0; [V6]; xn--4xa192qmp03d.xn--cl7c; ; ; # ⤸σ.
+⤸σ𺱀。\uFFA0; ⤸σ𺱀.\uFFA0; [V6]; xn--4xa192qmp03d.xn--cl7c; ; ; # ⤸σ.
+xn--4xa192qmp03d.xn--cl7c; ⤸σ𺱀.\uFFA0; [V6]; xn--4xa192qmp03d.xn--cl7c; ; ; # ⤸σ.
+xn--3xa392qmp03d.xn--cl7c; ⤸ς𺱀.\uFFA0; [V6]; xn--3xa392qmp03d.xn--cl7c; ; ; # ⤸ς.
+\u0765\u1035ð«”\u06D5.ð¦¬ð‘‹ªá‚£; ; [B2, B3, V6]; xn--llb10as9tqp5y.xn--bnd9168j21f; ; ; # ݥဵð«”Û•.ð¦¬ð‘‹ªá‚£
+\u0765\u1035ð«”\u06D5.ð¦¬ð‘‹ªâ´ƒ; ; [B2, B3]; xn--llb10as9tqp5y.xn--ukj7371e21f; ; ; # ݥဵð«”Û•.ð¦¬ð‘‹ªâ´ƒ
+xn--llb10as9tqp5y.xn--ukj7371e21f; \u0765\u1035ð«”\u06D5.ð¦¬ð‘‹ªâ´ƒ; [B2, B3]; xn--llb10as9tqp5y.xn--ukj7371e21f; ; ; # ݥဵð«”Û•.ð¦¬ð‘‹ªâ´ƒ
+xn--llb10as9tqp5y.xn--bnd9168j21f; \u0765\u1035ð«”\u06D5.ð¦¬ð‘‹ªá‚£; [B2, B3, V6]; xn--llb10as9tqp5y.xn--bnd9168j21f; ; ; # ݥဵð«”Û•.ð¦¬ð‘‹ªá‚£
+\u0661\u1B44-킼.\u1BAA\u0616\u066C≯; ; [B1, B5, B6, V5]; xn----9pc551nk39n.xn--4fb6o571degg; ; ; # ١᭄-킼.᮪ؖ٬≯
+\u0661\u1B44-á„ᅵᆿ.\u1BAA\u0616\u066C>\u0338; \u0661\u1B44-킼.\u1BAA\u0616\u066C≯; [B1, B5, B6, V5]; xn----9pc551nk39n.xn--4fb6o571degg; ; ; # Ù¡á­„-킼.᮪ؖ٬≯
+xn----9pc551nk39n.xn--4fb6o571degg; \u0661\u1B44-킼.\u1BAA\u0616\u066C≯; [B1, B5, B6, V5]; xn----9pc551nk39n.xn--4fb6o571degg; ; ; # ١᭄-킼.᮪ؖ٬≯
+-。\u06C2\u0604򅖡𑓂; -.\u06C2\u0604򅖡𑓂; [B1, B2, B3, V3, V6]; -.xn--mfb39a7208dzgs3d; ; ; # -.ۂ𑓂
+-。\u06C1\u0654\u0604򅖡𑓂; -.\u06C2\u0604򅖡𑓂; [B1, B2, B3, V3, V6]; -.xn--mfb39a7208dzgs3d; ; ; # -.ۂ𑓂
+-.xn--mfb39a7208dzgs3d; -.\u06C2\u0604ò…–¡ð‘“‚; [B1, B2, B3, V3, V6]; -.xn--mfb39a7208dzgs3d; ; ; # -.Û‚ð‘“‚
+\u200D󯑖ó ï¼Ž\u05BDð™®°ê¡ð‹¡; \u200D󯑖ó .\u05BDð™®°ê¡ð‹¡; [C2, V5, V6]; xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; ; xn--b726ey18m.xn--ldb8734fg0qcyzzg; [V5, V6] # .Ö½ê¡ð‹¡
+\u200D󯑖ó .\u05BDð™®°ê¡ð‹¡; ; [C2, V5, V6]; xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; ; xn--b726ey18m.xn--ldb8734fg0qcyzzg; [V5, V6] # .Ö½ê¡ð‹¡
+xn--b726ey18m.xn--ldb8734fg0qcyzzg; 󯑖ó .\u05BDð™®°ê¡ð‹¡; [V5, V6]; xn--b726ey18m.xn--ldb8734fg0qcyzzg; ; ; # .Ö½ê¡ð‹¡
+xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; \u200D󯑖ó .\u05BDð™®°ê¡ð‹¡; [C2, V5, V6]; xn--1ug66101lt8me.xn--ldb8734fg0qcyzzg; ; ; # .Ö½ê¡ð‹¡
+︒ôƒˆµÏ‚ñ€ ‡ï½¡ð®ˆ; ︒ôƒˆµÏ‚ñ€ ‡.ð®ˆ; [B1, V6]; xn--3xa3729jwz5t7gl5f.xn--f29c; ; xn--4xa1729jwz5t7gl5f.xn--f29c; # ︒ς.ð®ˆ
+。ôƒˆµÏ‚ñ€ ‡ã€‚ð®ˆ; .ôƒˆµÏ‚ñ€ ‡.ð®ˆ; [V6, X4_2]; .xn--3xa88573c7n64d.xn--f29c; [V6, A4_2]; .xn--4xa68573c7n64d.xn--f29c; # .Ï‚.ð®ˆ
+。ôƒˆµÎ£ñ€ ‡ã€‚ð®ˆ; .ôƒˆµÏƒñ€ ‡.ð®ˆ; [V6, X4_2]; .xn--4xa68573c7n64d.xn--f29c; [V6, A4_2]; ; # .σ.ð®ˆ
+。ôƒˆµÏƒñ€ ‡ã€‚ð®ˆ; .ôƒˆµÏƒñ€ ‡.ð®ˆ; [V6, X4_2]; .xn--4xa68573c7n64d.xn--f29c; [V6, A4_2]; ; # .σ.ð®ˆ
.xn--4xa68573c7n64d.xn--f29c; .ôƒˆµÏƒñ€ ‡.ð®ˆ; [V6, X4_2]; .xn--4xa68573c7n64d.xn--f29c; [V6, A4_2]; ; # .σ.ð®ˆ
.xn--3xa88573c7n64d.xn--f29c; .ôƒˆµÏ‚ñ€ ‡.ð®ˆ; [V6, X4_2]; .xn--3xa88573c7n64d.xn--f29c; [V6, A4_2]; ; # .Ï‚.ð®ˆ
-︒ôƒˆµÎ£ñ€ ‡ï½¡ð®ˆ; ︒ôƒˆµÏƒñ€ ‡.ð®ˆ; [B1, P1, V6]; xn--4xa1729jwz5t7gl5f.xn--f29c; ; ; # ︒σ.ð®ˆ
-︒ôƒˆµÏƒñ€ ‡ï½¡ð®ˆ; ︒ôƒˆµÏƒñ€ ‡.ð®ˆ; [B1, P1, V6]; xn--4xa1729jwz5t7gl5f.xn--f29c; ; ; # ︒σ.ð®ˆ
+︒ôƒˆµÎ£ñ€ ‡ï½¡ð®ˆ; ︒ôƒˆµÏƒñ€ ‡.ð®ˆ; [B1, V6]; xn--4xa1729jwz5t7gl5f.xn--f29c; ; ; # ︒σ.ð®ˆ
+︒ôƒˆµÏƒñ€ ‡ï½¡ð®ˆ; ︒ôƒˆµÏƒñ€ ‡.ð®ˆ; [B1, V6]; xn--4xa1729jwz5t7gl5f.xn--f29c; ; ; # ︒σ.ð®ˆ
xn--4xa1729jwz5t7gl5f.xn--f29c; ︒ôƒˆµÏƒñ€ ‡.ð®ˆ; [B1, V6]; xn--4xa1729jwz5t7gl5f.xn--f29c; ; ; # ︒σ.ð®ˆ
xn--3xa3729jwz5t7gl5f.xn--f29c; ︒ôƒˆµÏ‚ñ€ ‡.ð®ˆ; [B1, V6]; xn--3xa3729jwz5t7gl5f.xn--f29c; ; ; # ︒ς.ð®ˆ
-ߙ.ۮ󆾃≯󠅲; ߙ.ۮ󆾃≯; [B2, B3, P1, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯
-ߙ.ۮ󆾃≯󠅲; ߙ.ۮ󆾃≯; [B2, B3, P1, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯
-ߙ.ۮ󆾃≯󠅲; ߙ.ۮ󆾃≯; [B2, B3, P1, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯
-ߙ.ۮ󆾃≯󠅲; ߙ.ۮ󆾃≯; [B2, B3, P1, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯
-xn--0sb.xn--bmb691l0524t; ߙ.ۮ󆾃≯; [B2, B3, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯
-ᩳ󚙸.ð­; ; [B1, P1, V5, V6]; xn--2of22352n.xn--q09c; ; ; # ᩳ.ð­
-xn--2of22352n.xn--q09c; ᩳ󚙸.ð­; [B1, V5, V6]; xn--2of22352n.xn--q09c; ; ; # ᩳ.ð­
-⒉󠊓≠。Ⴟ⬣Ⴈ; ⒉󠊓≠.Ⴟ⬣Ⴈ; [P1, V6]; xn--1ch07f91401d.xn--gnd9b297j; ; ; # ⒉≠.Ⴟ⬣Ⴈ
-⒉󠊓≠。Ⴟ⬣Ⴈ; ⒉󠊓≠.Ⴟ⬣Ⴈ; [P1, V6]; xn--1ch07f91401d.xn--gnd9b297j; ; ; # ⒉≠.Ⴟ⬣Ⴈ
-2.󠊓≠。Ⴟ⬣Ⴈ; 2.󠊓≠.Ⴟ⬣Ⴈ; [P1, V6]; 2.xn--1chz4101l.xn--gnd9b297j; ; ; # 2.≠.Ⴟ⬣Ⴈ
-2.󠊓≠。Ⴟ⬣Ⴈ; 2.󠊓≠.Ⴟ⬣Ⴈ; [P1, V6]; 2.xn--1chz4101l.xn--gnd9b297j; ; ; # 2.≠.Ⴟ⬣Ⴈ
-2.󠊓≠。ⴟ⬣ⴈ; 2.󠊓≠.ⴟ⬣ⴈ; [P1, V6]; 2.xn--1chz4101l.xn--45iz7d6b; ; ; # 2.≠.ⴟ⬣ⴈ
-2.󠊓≠。ⴟ⬣ⴈ; 2.󠊓≠.ⴟ⬣ⴈ; [P1, V6]; 2.xn--1chz4101l.xn--45iz7d6b; ; ; # 2.≠.ⴟ⬣ⴈ
+\u07D9.\u06EE󆾃≯󠅲; \u07D9.\u06EE󆾃≯; [B2, B3, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯
+\u07D9.\u06EE󆾃>\u0338󠅲; \u07D9.\u06EE󆾃≯; [B2, B3, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯
+\u07D9.\u06EE󆾃≯󠅲; \u07D9.\u06EE󆾃≯; [B2, B3, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯
+\u07D9.\u06EE󆾃>\u0338󠅲; \u07D9.\u06EE󆾃≯; [B2, B3, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯
+xn--0sb.xn--bmb691l0524t; \u07D9.\u06EE󆾃≯; [B2, B3, V6]; xn--0sb.xn--bmb691l0524t; ; ; # ߙ.ۮ≯
+\u1A73󚙸.ð­; ; [B1, V5, V6]; xn--2of22352n.xn--q09c; ; ; # ᩳ.ð­
+xn--2of22352n.xn--q09c; \u1A73󚙸.ð­; [B1, V5, V6]; xn--2of22352n.xn--q09c; ; ; # ᩳ.ð­
+⒉󠊓≠。Ⴟ⬣Ⴈ; ⒉󠊓≠.Ⴟ⬣Ⴈ; [V6]; xn--1ch07f91401d.xn--gnd9b297j; ; ; # ⒉≠.Ⴟ⬣Ⴈ
+⒉󠊓=\u0338。Ⴟ⬣Ⴈ; ⒉󠊓≠.Ⴟ⬣Ⴈ; [V6]; xn--1ch07f91401d.xn--gnd9b297j; ; ; # ⒉≠.Ⴟ⬣Ⴈ
+2.󠊓≠。Ⴟ⬣Ⴈ; 2.󠊓≠.Ⴟ⬣Ⴈ; [V6]; 2.xn--1chz4101l.xn--gnd9b297j; ; ; # 2.≠.Ⴟ⬣Ⴈ
+2.󠊓=\u0338。Ⴟ⬣Ⴈ; 2.󠊓≠.Ⴟ⬣Ⴈ; [V6]; 2.xn--1chz4101l.xn--gnd9b297j; ; ; # 2.≠.Ⴟ⬣Ⴈ
+2.󠊓=\u0338。ⴟ⬣ⴈ; 2.󠊓≠.ⴟ⬣ⴈ; [V6]; 2.xn--1chz4101l.xn--45iz7d6b; ; ; # 2.≠.ⴟ⬣ⴈ
+2.󠊓≠。ⴟ⬣ⴈ; 2.󠊓≠.ⴟ⬣ⴈ; [V6]; 2.xn--1chz4101l.xn--45iz7d6b; ; ; # 2.≠.ⴟ⬣ⴈ
2.xn--1chz4101l.xn--45iz7d6b; 2.󠊓≠.ⴟ⬣ⴈ; [V6]; 2.xn--1chz4101l.xn--45iz7d6b; ; ; # 2.≠.ⴟ⬣ⴈ
2.xn--1chz4101l.xn--gnd9b297j; 2.󠊓≠.Ⴟ⬣Ⴈ; [V6]; 2.xn--1chz4101l.xn--gnd9b297j; ; ; # 2.≠.Ⴟ⬣Ⴈ
-⒉󠊓≠。ⴟ⬣ⴈ; ⒉󠊓≠.ⴟ⬣ⴈ; [P1, V6]; xn--1ch07f91401d.xn--45iz7d6b; ; ; # ⒉≠.ⴟ⬣ⴈ
-⒉󠊓≠。ⴟ⬣ⴈ; ⒉󠊓≠.ⴟ⬣ⴈ; [P1, V6]; xn--1ch07f91401d.xn--45iz7d6b; ; ; # ⒉≠.ⴟ⬣ⴈ
+⒉󠊓=\u0338。ⴟ⬣ⴈ; ⒉󠊓≠.ⴟ⬣ⴈ; [V6]; xn--1ch07f91401d.xn--45iz7d6b; ; ; # ⒉≠.ⴟ⬣ⴈ
+⒉󠊓≠。ⴟ⬣ⴈ; ⒉󠊓≠.ⴟ⬣ⴈ; [V6]; xn--1ch07f91401d.xn--45iz7d6b; ; ; # ⒉≠.ⴟ⬣ⴈ
xn--1ch07f91401d.xn--45iz7d6b; ⒉󠊓≠.ⴟ⬣ⴈ; [V6]; xn--1ch07f91401d.xn--45iz7d6b; ; ; # ⒉≠.ⴟ⬣ⴈ
xn--1ch07f91401d.xn--gnd9b297j; ⒉󠊓≠.Ⴟ⬣Ⴈ; [V6]; xn--1ch07f91401d.xn--gnd9b297j; ; ; # ⒉≠.Ⴟ⬣Ⴈ
--󠉱ྸჅ。-ð¹½Ý´ðž£‘; -󠉱ྸჅ.-ð¹½Ý´ðž£‘; [B1, P1, V3, V6]; xn----xmg12fm2555h.xn----05c4213ryr0g; ; ; # -ྸჅ.-ð¹½Ý´ðž£‘
--󠉱ྸⴥ。-ð¹½Ý´ðž£‘; -󠉱ྸⴥ.-ð¹½Ý´ðž£‘; [B1, P1, V3, V6]; xn----xmg317tgv352a.xn----05c4213ryr0g; ; ; # -ྸⴥ.-ð¹½Ý´ðž£‘
-xn----xmg317tgv352a.xn----05c4213ryr0g; -󠉱ྸⴥ.-ð¹½Ý´ðž£‘; [B1, V3, V6]; xn----xmg317tgv352a.xn----05c4213ryr0g; ; ; # -ྸⴥ.-ð¹½Ý´ðž£‘
-xn----xmg12fm2555h.xn----05c4213ryr0g; -󠉱ྸჅ.-ð¹½Ý´ðž£‘; [B1, V3, V6]; xn----xmg12fm2555h.xn----05c4213ryr0g; ; ; # -ྸჅ.-ð¹½Ý´ðž£‘
-ٙ。𑄴︒اß; Ù™.𑄴︒اß; [B1, B3, B6, P1, V5, V6]; xn--1hb.xn--mgb09fp820c08pa; ; ; # Ù™.𑄴︒اß
-ٙ。𑄴。اß; Ù™.ð‘„´.اß; [B1, B3, B6, V5]; xn--1hb.xn--w80d.xn--mgb09f; ; ; # Ù™.ð‘„´.اß
-xn--1hb.xn--w80d.xn--mgb09f; Ù™.ð‘„´.اß; [B1, B3, B6, V5]; xn--1hb.xn--w80d.xn--mgb09f; ; ; # Ù™.ð‘„´.اß
-xn--1hb.xn--mgb09fp820c08pa; Ù™.𑄴︒اß; [B1, B3, B6, V5, V6]; xn--1hb.xn--mgb09fp820c08pa; ; ; # Ù™.𑄴︒اß
-Ⴙظ.󠆓â€; Ⴙظ.â€; [B1, B5, B6, C2, P1, V6]; xn--3gb194c.xn--1ug; ; xn--3gb194c.; [B5, B6, P1, V6] # Ⴙظ.
-ⴙظ.󠆓â€; ⴙظ.â€; [B1, B5, B6, C2]; xn--3gb910r.xn--1ug; ; xn--3gb910r.; [B5, B6] # ⴙظ.
-xn--3gb910r.; ⴙظ.; [B5, B6]; xn--3gb910r.; ; ; # ⴙظ.
-xn--3gb910r.xn--1ug; ⴙظ.â€; [B1, B5, B6, C2]; xn--3gb910r.xn--1ug; ; ; # ⴙظ.
-xn--3gb194c.; Ⴙظ.; [B5, B6, V6]; xn--3gb194c.; ; ; # Ⴙظ.
-xn--3gb194c.xn--1ug; Ⴙظ.â€; [B1, B5, B6, C2, V6]; xn--3gb194c.xn--1ug; ; ; # Ⴙظ.
-󠆸。₆ï¼ðº§Ý–; .60ðº§Ý–; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60ðº§Ý–
-󠆸。60ðº§Ý–; .60ðº§Ý–; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60ðº§Ý–
-.xn--60-cke9470y; .60ðº§Ý–; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60ðº§Ý–
-6à¡ï½¡-𑈴; 6à¡.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6à¡.-𑈴
-6à¡ã€‚-𑈴; 6à¡.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6à¡.-𑈴
-xn--6-jjd.xn----6n8i; 6à¡.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6à¡.-𑈴
-â€ñ‹Œ¿ð¹°ï½¡à«Ï‚𞰎ࣖ; â€ñ‹Œ¿ð¹°.à«Ï‚𞰎ࣖ; [B1, C2, P1, V5, V6]; xn--1ugx105gq26y.xn--3xa41xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, P1, V5, V6] # ð¹°.à«Ï‚ࣖ
-â€ñ‹Œ¿ð¹°ã€‚à«Ï‚𞰎ࣖ; â€ñ‹Œ¿ð¹°.à«Ï‚𞰎ࣖ; [B1, C2, P1, V5, V6]; xn--1ugx105gq26y.xn--3xa41xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, P1, V5, V6] # ð¹°.à«Ï‚ࣖ
-â€ñ‹Œ¿ð¹°ã€‚à«Î£ðž°Žà£–; â€ñ‹Œ¿ð¹°.à«Ïƒðž°Žà£–; [B1, C2, P1, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, P1, V5, V6] # ð¹°.à«Ïƒà£–
-â€ñ‹Œ¿ð¹°ã€‚à«Ïƒðž°Žà£–; â€ñ‹Œ¿ð¹°.à«Ïƒðž°Žà£–; [B1, C2, P1, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, P1, V5, V6] # ð¹°.à«Ïƒà£–
-xn--oo0d1330n.xn--4xa21xcwbfz15g; ñ‹Œ¿ð¹°.à«Ïƒðž°Žà£–; [B1, B5, B6, V5, V6]; xn--oo0d1330n.xn--4xa21xcwbfz15g; ; ; # ð¹°.à«Ïƒà£–
-xn--1ugx105gq26y.xn--4xa21xcwbfz15g; â€ñ‹Œ¿ð¹°.à«Ïƒðž°Žà£–; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; ; # ð¹°.à«Ïƒà£–
-xn--1ugx105gq26y.xn--3xa41xcwbfz15g; â€ñ‹Œ¿ð¹°.à«Ï‚𞰎ࣖ; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--3xa41xcwbfz15g; ; ; # ð¹°.à«Ï‚ࣖ
-â€ñ‹Œ¿ð¹°ï½¡à«Î£ðž°Žà£–; â€ñ‹Œ¿ð¹°.à«Ïƒðž°Žà£–; [B1, C2, P1, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, P1, V5, V6] # ð¹°.à«Ïƒà£–
-â€ñ‹Œ¿ð¹°ï½¡à«Ïƒðž°Žà£–; â€ñ‹Œ¿ð¹°.à«Ïƒðž°Žà£–; [B1, C2, P1, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, P1, V5, V6] # ð¹°.à«Ïƒà£–
-â’ˆñŸ„œá‚³â’ªï¼Žà·Šò˜˜¶à¢‹ð¹¢; â’ˆñŸ„œá‚³â’ª.à·Šò˜˜¶à¢‹ð¹¢; [B1, P1, V5, V6]; xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ; ; # ⒈Ⴓ⒪.්ࢋð¹¢
-1.ñŸ„œá‚³(o).à·Šò˜˜¶à¢‹ð¹¢; ; [B1, B6, P1, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋð¹¢
-1.ñŸ„œâ´“(o).à·Šò˜˜¶à¢‹ð¹¢; ; [B1, B6, P1, V5, V6]; 1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; ; ; # 1.â´“(o).්ࢋð¹¢
-1.ñŸ„œá‚³(O).à·Šò˜˜¶à¢‹ð¹¢; 1.ñŸ„œá‚³(o).à·Šò˜˜¶à¢‹ð¹¢; [B1, B6, P1, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋð¹¢
-1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; 1.ñŸ„œá‚³(o).à·Šò˜˜¶à¢‹ð¹¢; [B1, B6, P1, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋð¹¢
-1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; 1.ñŸ„œâ´“(o).à·Šò˜˜¶à¢‹ð¹¢; [B1, B6, P1, V5, V6]; 1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; ; ; # 1.â´“(o).්ࢋð¹¢
-â’ˆñŸ„œâ´“⒪.්ò˜˜¶à¢‹ð¹¢; â’ˆñŸ„œâ´“â’ª.à·Šò˜˜¶à¢‹ð¹¢; [B1, P1, V5, V6]; xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ; ; # ⒈ⴓ⒪.්ࢋð¹¢
-xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; â’ˆñŸ„œâ´“â’ª.à·Šò˜˜¶à¢‹ð¹¢; [B1, V5, V6]; xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ; ; # ⒈ⴓ⒪.්ࢋð¹¢
-xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; â’ˆñŸ„œá‚³â’ª.à·Šò˜˜¶à¢‹ð¹¢; [B1, V5, V6]; xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ; ; # ⒈Ⴓ⒪.්ࢋð¹¢
-𞤷.ð®ðž¢ð¹ Ø¤; ; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.ð®ðž¢ð¹ Ø¤
-𞤷.ð®ðž¢ð¹ ÙˆÙ”; 𞤷.ð®ðž¢ð¹ Ø¤; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.ð®ðž¢ð¹ Ø¤
-𞤕.ð®ðž¢ð¹ ÙˆÙ”; 𞤷.ð®ðž¢ð¹ Ø¤; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.ð®ðž¢ð¹ Ø¤
-𞤕.ð®ðž¢ð¹ Ø¤; 𞤷.ð®ðž¢ð¹ Ø¤; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.ð®ðž¢ð¹ Ø¤
-xn--ve6h.xn--jgb1694kz0b2176a; 𞤷.ð®ðž¢ð¹ Ø¤; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.ð®ðž¢ð¹ Ø¤
-ð²ˆ-。𑄳ñ¢Œ»; ð³ˆ-.ð‘„³ñ¢Œ»; [B1, B3, P1, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # ð³ˆ-.ð‘„³
-ð²ˆ-。𑄳ñ¢Œ»; ð³ˆ-.ð‘„³ñ¢Œ»; [B1, B3, P1, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # ð³ˆ-.ð‘„³
-ð³ˆ-。𑄳ñ¢Œ»; ð³ˆ-.ð‘„³ñ¢Œ»; [B1, B3, P1, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # ð³ˆ-.ð‘„³
+-󠉱\u0FB8Ⴥ。-ð¹½\u0774𞣑; -󠉱\u0FB8Ⴥ.-ð¹½\u0774𞣑; [B1, V3, V6]; xn----xmg12fm2555h.xn----05c4213ryr0g; ; ; # -ྸჅ.-ð¹½Ý´ðž£‘
+-󠉱\u0FB8ⴥ。-ð¹½\u0774𞣑; -󠉱\u0FB8â´¥.-ð¹½\u0774𞣑; [B1, V3, V6]; xn----xmg317tgv352a.xn----05c4213ryr0g; ; ; # -ྸⴥ.-ð¹½Ý´ðž£‘
+xn----xmg317tgv352a.xn----05c4213ryr0g; -󠉱\u0FB8â´¥.-ð¹½\u0774𞣑; [B1, V3, V6]; xn----xmg317tgv352a.xn----05c4213ryr0g; ; ; # -ྸⴥ.-ð¹½Ý´ðž£‘
+xn----xmg12fm2555h.xn----05c4213ryr0g; -󠉱\u0FB8Ⴥ.-ð¹½\u0774𞣑; [B1, V3, V6]; xn----xmg12fm2555h.xn----05c4213ryr0g; ; ; # -ྸჅ.-ð¹½Ý´ðž£‘
+\u0659。𑄴︒\u0627\u07DD; \u0659.𑄴︒\u0627\u07DD; [B1, V5, V6]; xn--1hb.xn--mgb09fp820c08pa; ; ; # Ù™.𑄴︒اß
+\u0659。𑄴。\u0627\u07DD; \u0659.ð‘„´.\u0627\u07DD; [B1, V5]; xn--1hb.xn--w80d.xn--mgb09f; ; ; # Ù™.ð‘„´.اß
+xn--1hb.xn--w80d.xn--mgb09f; \u0659.ð‘„´.\u0627\u07DD; [B1, V5]; xn--1hb.xn--w80d.xn--mgb09f; ; ; # Ù™.ð‘„´.اß
+xn--1hb.xn--mgb09fp820c08pa; \u0659.𑄴︒\u0627\u07DD; [B1, V5, V6]; xn--1hb.xn--mgb09fp820c08pa; ; ; # Ù™.𑄴︒اß
+Ⴙ\u0638.󠆓\u200D; Ⴙ\u0638.\u200D; [B1, B5, B6, C2, V6]; xn--3gb194c.xn--1ug; ; xn--3gb194c.; [B5, B6, V6] # Ⴙظ.
+ⴙ\u0638.󠆓\u200D; ⴙ\u0638.\u200D; [B1, B5, B6, C2]; xn--3gb910r.xn--1ug; ; xn--3gb910r.; [B5, B6] # ⴙظ.
+xn--3gb910r.; ⴙ\u0638.; [B5, B6]; xn--3gb910r.; ; ; # ⴙظ.
+xn--3gb910r.xn--1ug; ⴙ\u0638.\u200D; [B1, B5, B6, C2]; xn--3gb910r.xn--1ug; ; ; # ⴙظ.
+xn--3gb194c.; Ⴙ\u0638.; [B5, B6, V6]; xn--3gb194c.; ; ; # Ⴙظ.
+xn--3gb194c.xn--1ug; Ⴙ\u0638.\u200D; [B1, B5, B6, C2, V6]; xn--3gb194c.xn--1ug; ; ; # Ⴙظ.
+󠆸。₆ï¼ðº§\u0756; .60ðº§\u0756; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60ðº§Ý–
+󠆸。60ðº§\u0756; .60ðº§\u0756; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60ðº§Ý–
+.xn--60-cke9470y; .60ðº§\u0756; [B1, X4_2]; .xn--60-cke9470y; [B1, A4_2]; ; # .60ðº§Ý–
+6\u084F。-𑈴; 6\u084F.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6à¡.-𑈴
+6\u084F。-𑈴; 6\u084F.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6à¡.-𑈴
+xn--6-jjd.xn----6n8i; 6\u084F.-𑈴; [B1, V3]; xn--6-jjd.xn----6n8i; ; ; # 6à¡.-𑈴
+\u200Dñ‹Œ¿ð¹°ï½¡\u0ACDÏ‚ðž°Ž\u08D6; \u200Dñ‹Œ¿ð¹°.\u0ACDÏ‚ðž°Ž\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--3xa41xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # ð¹°.à«Ï‚ࣖ
+\u200Dñ‹Œ¿ð¹°ã€‚\u0ACDÏ‚ðž°Ž\u08D6; \u200Dñ‹Œ¿ð¹°.\u0ACDÏ‚ðž°Ž\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--3xa41xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # ð¹°.à«Ï‚ࣖ
+\u200Dñ‹Œ¿ð¹°ã€‚\u0ACDΣ𞰎\u08D6; \u200Dñ‹Œ¿ð¹°.\u0ACDσ𞰎\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # ð¹°.à«Ïƒà£–
+\u200Dñ‹Œ¿ð¹°ã€‚\u0ACDσ𞰎\u08D6; \u200Dñ‹Œ¿ð¹°.\u0ACDσ𞰎\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # ð¹°.à«Ïƒà£–
+xn--oo0d1330n.xn--4xa21xcwbfz15g; ñ‹Œ¿ð¹°.\u0ACDσ𞰎\u08D6; [B1, B5, B6, V5, V6]; xn--oo0d1330n.xn--4xa21xcwbfz15g; ; ; # ð¹°.à«Ïƒà£–
+xn--1ugx105gq26y.xn--4xa21xcwbfz15g; \u200Dñ‹Œ¿ð¹°.\u0ACDσ𞰎\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; ; # ð¹°.à«Ïƒà£–
+xn--1ugx105gq26y.xn--3xa41xcwbfz15g; \u200Dñ‹Œ¿ð¹°.\u0ACDÏ‚ðž°Ž\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--3xa41xcwbfz15g; ; ; # ð¹°.à«Ï‚ࣖ
+\u200Dñ‹Œ¿ð¹°ï½¡\u0ACDΣ𞰎\u08D6; \u200Dñ‹Œ¿ð¹°.\u0ACDσ𞰎\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # ð¹°.à«Ïƒà£–
+\u200Dñ‹Œ¿ð¹°ï½¡\u0ACDσ𞰎\u08D6; \u200Dñ‹Œ¿ð¹°.\u0ACDσ𞰎\u08D6; [B1, C2, V5, V6]; xn--1ugx105gq26y.xn--4xa21xcwbfz15g; ; xn--oo0d1330n.xn--4xa21xcwbfz15g; [B1, B5, B6, V5, V6] # ð¹°.à«Ïƒà£–
+â’ˆñŸ„œá‚³â’ªï¼Ž\u0DCAò˜˜¶\u088Bð¹¢; â’ˆñŸ„œá‚³â’ª.\u0DCAò˜˜¶\u088Bð¹¢; [B1, V5, V6]; xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ; ; # ⒈Ⴓ⒪.්ࢋð¹¢
+1.ñŸ„œá‚³(o).\u0DCAò˜˜¶\u088Bð¹¢; ; [B1, B6, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋð¹¢
+1.ñŸ„œâ´“(o).\u0DCAò˜˜¶\u088Bð¹¢; ; [B1, B6, V5, V6]; 1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; ; ; # 1.â´“(o).්ࢋð¹¢
+1.ñŸ„œá‚³(O).\u0DCAò˜˜¶\u088Bð¹¢; 1.ñŸ„œá‚³(o).\u0DCAò˜˜¶\u088Bð¹¢; [B1, B6, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋð¹¢
+1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; 1.ñŸ„œá‚³(o).\u0DCAò˜˜¶\u088Bð¹¢; [B1, B6, V5, V6]; 1.xn--(o)-7sn88849j.xn--3xb99xpx1yoes3e; ; ; # 1.Ⴓ(o).්ࢋð¹¢
+1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; 1.ñŸ„œâ´“(o).\u0DCAò˜˜¶\u088Bð¹¢; [B1, B6, V5, V6]; 1.xn--(o)-ej1bu5389e.xn--3xb99xpx1yoes3e; ; ; # 1.â´“(o).්ࢋð¹¢
+â’ˆñŸ„œâ´“⒪.\u0DCAò˜˜¶\u088Bð¹¢; â’ˆñŸ„œâ´“â’ª.\u0DCAò˜˜¶\u088Bð¹¢; [B1, V5, V6]; xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ; ; # ⒈ⴓ⒪.්ࢋð¹¢
+xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; â’ˆñŸ„œâ´“â’ª.\u0DCAò˜˜¶\u088Bð¹¢; [B1, V5, V6]; xn--tsh0ds63atl31n.xn--3xb99xpx1yoes3e; ; ; # ⒈ⴓ⒪.්ࢋð¹¢
+xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; â’ˆñŸ„œá‚³â’ª.\u0DCAò˜˜¶\u088Bð¹¢; [B1, V5, V6]; xn--rnd762h7cx3027d.xn--3xb99xpx1yoes3e; ; ; # ⒈Ⴓ⒪.්ࢋð¹¢
+𞤷.ð®ðž¢ð¹ \u0624; ; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.ð®ðž¢ð¹ Ø¤
+𞤷.ð®ðž¢ð¹ \u0648\u0654; 𞤷.ð®ðž¢ð¹ \u0624; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.ð®ðž¢ð¹ Ø¤
+𞤕.ð®ðž¢ð¹ \u0648\u0654; 𞤷.ð®ðž¢ð¹ \u0624; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.ð®ðž¢ð¹ Ø¤
+𞤕.ð®ðž¢ð¹ \u0624; 𞤷.ð®ðž¢ð¹ \u0624; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.ð®ðž¢ð¹ Ø¤
+xn--ve6h.xn--jgb1694kz0b2176a; 𞤷.ð®ðž¢ð¹ \u0624; ; xn--ve6h.xn--jgb1694kz0b2176a; ; ; # 𞤷.ð®ðž¢ð¹ Ø¤
+ð²ˆ-。𑄳ñ¢Œ»; ð³ˆ-.ð‘„³ñ¢Œ»; [B1, B3, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # ð³ˆ-.ð‘„³
+ð²ˆ-。𑄳ñ¢Œ»; ð³ˆ-.ð‘„³ñ¢Œ»; [B1, B3, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # ð³ˆ-.ð‘„³
+ð³ˆ-。𑄳ñ¢Œ»; ð³ˆ-.ð‘„³ñ¢Œ»; [B1, B3, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # ð³ˆ-.ð‘„³
xn----ue6i.xn--v80d6662t; ð³ˆ-.ð‘„³ñ¢Œ»; [B1, B3, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # ð³ˆ-.ð‘„³
-ð³ˆ-。𑄳ñ¢Œ»; ð³ˆ-.ð‘„³ñ¢Œ»; [B1, B3, P1, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # ð³ˆ-.ð‘„³
--󠉖ꡧ.󠊂񇆃🄉; -󠉖ꡧ.󠊂񇆃🄉; [P1, V3, V6]; xn----hg4ei0361g.xn--207ht163h7m94c; ; ; # -ꡧ.🄉
--󠉖ꡧ.󠊂񇆃8,; ; [P1, V3, V6]; xn----hg4ei0361g.xn--8,-k362evu488a; ; ; # -ꡧ.8,
-xn----hg4ei0361g.xn--8,-k362evu488a; -󠉖ꡧ.󠊂񇆃8,; [P1, V3, V6]; xn----hg4ei0361g.xn--8,-k362evu488a; ; ; # -ꡧ.8,
+ð³ˆ-。𑄳ñ¢Œ»; ð³ˆ-.ð‘„³ñ¢Œ»; [B1, B3, V3, V5, V6]; xn----ue6i.xn--v80d6662t; ; ; # ð³ˆ-.ð‘„³
+-󠉖ꡧ.󠊂񇆃🄉; -󠉖ꡧ.󠊂񇆃🄉; [V3, V6]; xn----hg4ei0361g.xn--207ht163h7m94c; ; ; # -ꡧ.🄉
+-󠉖ꡧ.󠊂񇆃8,; ; [V3, V6]; xn----hg4ei0361g.xn--8,-k362evu488a; ; ; # -ꡧ.8,
+xn----hg4ei0361g.xn--8,-k362evu488a; -󠉖ꡧ.󠊂񇆃8,; [V3, V6]; xn----hg4ei0361g.xn--8,-k362evu488a; ; ; # -ꡧ.8,
xn----hg4ei0361g.xn--207ht163h7m94c; -󠉖ꡧ.󠊂񇆃🄉; [V3, V6]; xn----hg4ei0361g.xn--207ht163h7m94c; ; ; # -ꡧ.🄉
-󠾛󠈴臯𧔤.ݨðŸ; 󠾛󠈴臯𧔤.ݨ5; [B1, P1, V6]; xn--zb1at733hm579ddhla.xn--5-b5c; ; ; # 臯𧔤.ݨ5
-󠾛󠈴臯𧔤.ݨ5; ; [B1, P1, V6]; xn--zb1at733hm579ddhla.xn--5-b5c; ; ; # 臯𧔤.ݨ5
-xn--zb1at733hm579ddhla.xn--5-b5c; 󠾛󠈴臯𧔤.ݨ5; [B1, V6]; xn--zb1at733hm579ddhla.xn--5-b5c; ; ; # 臯𧔤.ݨ5
-≮ð¹£ï¼Žð¨¿; ≮ð¹£.ð¨¿; [B1, B3, B6, P1, V5, V6]; xn--gdh1504g.xn--e92h; ; ; # ≮ð¹£.ð¨¿
-≮ð¹£ï¼Žð¨¿; ≮ð¹£.ð¨¿; [B1, B3, B6, P1, V5, V6]; xn--gdh1504g.xn--e92h; ; ; # ≮ð¹£.ð¨¿
-≮ð¹£.ð¨¿; ; [B1, B3, B6, P1, V5, V6]; xn--gdh1504g.xn--e92h; ; ; # ≮ð¹£.ð¨¿
-≮ð¹£.ð¨¿; ≮ð¹£.ð¨¿; [B1, B3, B6, P1, V5, V6]; xn--gdh1504g.xn--e92h; ; ; # ≮ð¹£.ð¨¿
-xn--gdh1504g.xn--e92h; ≮ð¹£.ð¨¿; [B1, B3, B6, V5, V6]; xn--gdh1504g.xn--e92h; ; ; # ≮ð¹£.ð¨¿
-ð¹¯á¯›à©ï½¡è„¥; ð¹¯á¯›à©.è„¥; [B1]; xn--ybc101g3m1p.xn--740a; ; ; # ð¹¯á¯›à©.è„¥
-ð¹¯á¯›à©ã€‚è„¥; ð¹¯á¯›à©.è„¥; [B1]; xn--ybc101g3m1p.xn--740a; ; ; # ð¹¯á¯›à©.è„¥
-xn--ybc101g3m1p.xn--740a; ð¹¯á¯›à©.è„¥; [B1]; xn--ybc101g3m1p.xn--740a; ; ; # ð¹¯á¯›à©.è„¥
-á­„á…Ÿðž·¿òƒ€.-; ; [B1, B5, P1, V3, V5, V6]; xn--osd971cpx70btgt8b.-; ; ; # á­„.-
-xn--osd971cpx70btgt8b.-; á­„á…Ÿðž·¿òƒ€.-; [B1, B5, V3, V5, V6]; xn--osd971cpx70btgt8b.-; ; ; # á­„.-
-‌。͔; ‌.͔; [C1, V5]; xn--0ug.xn--yua; ; .xn--yua; [V5, A4_2] # .͔
-‌。͔; ‌.͔; [C1, V5]; xn--0ug.xn--yua; ; .xn--yua; [V5, A4_2] # .͔
-.xn--yua; .Í”; [V5, X4_2]; .xn--yua; [V5, A4_2]; ; # .Í”
-xn--0ug.xn--yua; ‌.͔; [C1, V5]; xn--0ug.xn--yua; ; ; # .͔
-𞤥󠅮.ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
-𞤥󠅮.ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
+󠾛󠈴臯𧔤.\u0768ðŸ; 󠾛󠈴臯𧔤.\u07685; [B1, V6]; xn--zb1at733hm579ddhla.xn--5-b5c; ; ; # 臯𧔤.ݨ5
+󠾛󠈴臯𧔤.\u07685; ; [B1, V6]; xn--zb1at733hm579ddhla.xn--5-b5c; ; ; # 臯𧔤.ݨ5
+xn--zb1at733hm579ddhla.xn--5-b5c; 󠾛󠈴臯𧔤.\u07685; [B1, V6]; xn--zb1at733hm579ddhla.xn--5-b5c; ; ; # 臯𧔤.ݨ5
+≮ð¹£ï¼Žð¨¿; ≮ð¹£.ð¨¿; [B1, V5]; xn--gdh1504g.xn--e92h; ; ; # ≮ð¹£.ð¨¿
+<\u0338ð¹£ï¼Žð¨¿; ≮ð¹£.ð¨¿; [B1, V5]; xn--gdh1504g.xn--e92h; ; ; # ≮ð¹£.ð¨¿
+≮ð¹£.ð¨¿; ; [B1, V5]; xn--gdh1504g.xn--e92h; ; ; # ≮ð¹£.ð¨¿
+<\u0338ð¹£.ð¨¿; ≮ð¹£.ð¨¿; [B1, V5]; xn--gdh1504g.xn--e92h; ; ; # ≮ð¹£.ð¨¿
+xn--gdh1504g.xn--e92h; ≮ð¹£.ð¨¿; [B1, V5]; xn--gdh1504g.xn--e92h; ; ; # ≮ð¹£.ð¨¿
+ð¹¯á¯›\u0A4D。脥; ð¹¯á¯›\u0A4D.è„¥; [B1]; xn--ybc101g3m1p.xn--740a; ; ; # ð¹¯á¯›à©.è„¥
+ð¹¯á¯›\u0A4D。脥; ð¹¯á¯›\u0A4D.è„¥; [B1]; xn--ybc101g3m1p.xn--740a; ; ; # ð¹¯á¯›à©.è„¥
+xn--ybc101g3m1p.xn--740a; ð¹¯á¯›\u0A4D.è„¥; [B1]; xn--ybc101g3m1p.xn--740a; ; ; # ð¹¯á¯›à©.è„¥
+\u1B44\u115Fðž·¿òƒ€.-; ; [B1, B5, V3, V5, V6]; xn--osd971cpx70btgt8b.-; ; ; # á­„.-
+xn--osd971cpx70btgt8b.-; \u1B44\u115Fðž·¿òƒ€.-; [B1, B5, V3, V5, V6]; xn--osd971cpx70btgt8b.-; ; ; # á­„.-
+\u200C。\u0354; \u200C.\u0354; [C1, V5]; xn--0ug.xn--yua; ; .xn--yua; [V5, A4_2] # .͔
+\u200C。\u0354; \u200C.\u0354; [C1, V5]; xn--0ug.xn--yua; ; .xn--yua; [V5, A4_2] # .͔
+.xn--yua; .\u0354; [V5, X4_2]; .xn--yua; [V5, A4_2]; ; # .Í”
+xn--0ug.xn--yua; \u200C.\u0354; [C1, V5]; xn--0ug.xn--yua; ; ; # .Í”
+𞤥󠅮.ᡄႮ; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
+𞤥󠅮.ᡄႮ; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
𞤥󠅮.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ
-𞤃󠅮.ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
+𞤃󠅮.ᡄႮ; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
𞤃󠅮.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ
xn--de6h.xn--37e857h; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ
𞤥.ᡄⴎ; ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ
-𞤃.ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
+𞤃.ᡄႮ; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
𞤃.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ
xn--de6h.xn--mnd799a; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
𞤥󠅮.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ
-𞤃󠅮.ᡄႮ; 𞤥.ᡄႮ; [P1, V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
+𞤃󠅮.ᡄႮ; 𞤥.ᡄႮ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
𞤃󠅮.ᡄⴎ; 𞤥.ᡄⴎ; ; xn--de6h.xn--37e857h; ; ; # 𞤥.ᡄⴎ
-𞤥.ᡄႮ; ; [P1, V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
+𞤥.ᡄႮ; ; [V6]; xn--de6h.xn--mnd799a; ; ; # 𞤥.ᡄႮ
𞤧ð¨¨Îžï¼Žðªºã›¨â¸; 𞤧ð¨¨Î¾.ðªºã›¨â¸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧ð¨¨Î¾.ðªºã›¨â¸
𞤧ð¨¨Îž.ðªºã›¨â¸; 𞤧ð¨¨Î¾.ðªºã›¨â¸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧ð¨¨Î¾.ðªºã›¨â¸
𞤧ð¨¨Î¾.ðªºã›¨â¸; ; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧ð¨¨Î¾.ðªºã›¨â¸
@@ -880,615 +886,615 @@ xn--zxa5691vboja.xn--bfi293ci119b; 𞤧ð¨¨Î¾.ðªºã›¨â¸; [B2, B3, B6]; xn--zxa5
𞤧ð¨¨Î¾ï¼Žðªºã›¨â¸; 𞤧ð¨¨Î¾.ðªºã›¨â¸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧ð¨¨Î¾.ðªºã›¨â¸
𞤅ð¨¨Îžï¼Žðªºã›¨â¸; 𞤧ð¨¨Î¾.ðªºã›¨â¸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧ð¨¨Î¾.ðªºã›¨â¸
𞤅ð¨¨Î¾ï¼Žðªºã›¨â¸; 𞤧ð¨¨Î¾.ðªºã›¨â¸; [B2, B3, B6]; xn--zxa5691vboja.xn--bfi293ci119b; ; ; # 𞤧ð¨¨Î¾.ðªºã›¨â¸
-᠆몆‌-。Ⴛð¦…︒; ᠆몆‌-.á‚»ð¦…︒; [B1, B5, B6, C1, P1, V3, V6]; xn----e3j425bsk1o.xn--znd2362jhgh; ; xn----e3j6620g.xn--znd2362jhgh; [B1, B5, B6, P1, V3, V6] # ᠆몆-.á‚»ð¦…︒
-᠆몆‌-。Ⴛð¦…︒; ᠆몆‌-.á‚»ð¦…︒; [B1, B5, B6, C1, P1, V3, V6]; xn----e3j425bsk1o.xn--znd2362jhgh; ; xn----e3j6620g.xn--znd2362jhgh; [B1, B5, B6, P1, V3, V6] # ᠆몆-.á‚»ð¦…︒
-᠆몆‌-。Ⴛð¦…。; ᠆몆‌-.á‚»ð¦….; [B1, B5, B6, C1, P1, V3, V6]; xn----e3j425bsk1o.xn--znd4948j.; ; xn----e3j6620g.xn--znd4948j.; [B1, B5, B6, P1, V3, V6] # ᠆몆-.á‚»ð¦….
-᠆몆‌-。Ⴛð¦…。; ᠆몆‌-.á‚»ð¦….; [B1, B5, B6, C1, P1, V3, V6]; xn----e3j425bsk1o.xn--znd4948j.; ; xn----e3j6620g.xn--znd4948j.; [B1, B5, B6, P1, V3, V6] # ᠆몆-.á‚»ð¦….
-᠆몆‌-。ⴛð¦…。; ᠆몆‌-.â´›ð¦….; [B1, B5, B6, C1, P1, V3, V6]; xn----e3j425bsk1o.xn--jlju661e.; ; xn----e3j6620g.xn--jlju661e.; [B1, B5, B6, P1, V3, V6] # ᠆몆-.â´›ð¦….
-᠆몆‌-。ⴛð¦…。; ᠆몆‌-.â´›ð¦….; [B1, B5, B6, C1, P1, V3, V6]; xn----e3j425bsk1o.xn--jlju661e.; ; xn----e3j6620g.xn--jlju661e.; [B1, B5, B6, P1, V3, V6] # ᠆몆-.â´›ð¦….
+᠆몆\u200C-。Ⴛð¦…︒; ᠆몆\u200C-.á‚»ð¦…︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd2362jhgh; ; xn----e3j6620g.xn--znd2362jhgh; [B1, B5, B6, V3, V6] # ᠆몆-.á‚»ð¦…︒
+᠆몆\u200C-。Ⴛð¦…︒; ᠆몆\u200C-.á‚»ð¦…︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd2362jhgh; ; xn----e3j6620g.xn--znd2362jhgh; [B1, B5, B6, V3, V6] # ᠆몆-.á‚»ð¦…︒
+᠆몆\u200C-。Ⴛð¦…。; ᠆몆\u200C-.á‚»ð¦….; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd4948j.; ; xn----e3j6620g.xn--znd4948j.; [B1, B5, B6, V3, V6] # ᠆몆-.á‚»ð¦….
+᠆몆\u200C-。Ⴛð¦…。; ᠆몆\u200C-.á‚»ð¦….; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd4948j.; ; xn----e3j6620g.xn--znd4948j.; [B1, B5, B6, V3, V6] # ᠆몆-.á‚»ð¦….
+᠆몆\u200C-。ⴛð¦…。; ᠆몆\u200C-.â´›ð¦….; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlju661e.; ; xn----e3j6620g.xn--jlju661e.; [B1, B5, B6, V3, V6] # ᠆몆-.â´›ð¦….
+᠆몆\u200C-。ⴛð¦…。; ᠆몆\u200C-.â´›ð¦….; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlju661e.; ; xn----e3j6620g.xn--jlju661e.; [B1, B5, B6, V3, V6] # ᠆몆-.â´›ð¦….
xn----e3j6620g.xn--jlju661e.; ᠆몆-.â´›ð¦….; [B1, B5, B6, V3, V6]; xn----e3j6620g.xn--jlju661e.; ; ; # ᠆몆-.â´›ð¦….
-xn----e3j425bsk1o.xn--jlju661e.; ᠆몆‌-.â´›ð¦….; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlju661e.; ; ; # ᠆몆-.â´›ð¦….
+xn----e3j425bsk1o.xn--jlju661e.; ᠆몆\u200C-.â´›ð¦….; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlju661e.; ; ; # ᠆몆-.â´›ð¦….
xn----e3j6620g.xn--znd4948j.; ᠆몆-.á‚»ð¦….; [B1, B5, B6, V3, V6]; xn----e3j6620g.xn--znd4948j.; ; ; # ᠆몆-.á‚»ð¦….
-xn----e3j425bsk1o.xn--znd4948j.; ᠆몆‌-.á‚»ð¦….; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd4948j.; ; ; # ᠆몆-.á‚»ð¦….
-᠆몆‌-。ⴛð¦…︒; ᠆몆‌-.â´›ð¦…︒; [B1, B5, B6, C1, P1, V3, V6]; xn----e3j425bsk1o.xn--jlj4997dhgh; ; xn----e3j6620g.xn--jlj4997dhgh; [B1, B5, B6, P1, V3, V6] # ᠆몆-.â´›ð¦…︒
-᠆몆‌-。ⴛð¦…︒; ᠆몆‌-.â´›ð¦…︒; [B1, B5, B6, C1, P1, V3, V6]; xn----e3j425bsk1o.xn--jlj4997dhgh; ; xn----e3j6620g.xn--jlj4997dhgh; [B1, B5, B6, P1, V3, V6] # ᠆몆-.â´›ð¦…︒
+xn----e3j425bsk1o.xn--znd4948j.; ᠆몆\u200C-.á‚»ð¦….; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd4948j.; ; ; # ᠆몆-.á‚»ð¦….
+᠆몆\u200C-。ⴛð¦…︒; ᠆몆\u200C-.â´›ð¦…︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlj4997dhgh; ; xn----e3j6620g.xn--jlj4997dhgh; [B1, B5, B6, V3, V6] # ᠆몆-.â´›ð¦…︒
+᠆몆\u200C-。ⴛð¦…︒; ᠆몆\u200C-.â´›ð¦…︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlj4997dhgh; ; xn----e3j6620g.xn--jlj4997dhgh; [B1, B5, B6, V3, V6] # ᠆몆-.â´›ð¦…︒
xn----e3j6620g.xn--jlj4997dhgh; ᠆몆-.â´›ð¦…︒; [B1, B5, B6, V3, V6]; xn----e3j6620g.xn--jlj4997dhgh; ; ; # ᠆몆-.â´›ð¦…︒
-xn----e3j425bsk1o.xn--jlj4997dhgh; ᠆몆‌-.â´›ð¦…︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlj4997dhgh; ; ; # ᠆몆-.â´›ð¦…︒
+xn----e3j425bsk1o.xn--jlj4997dhgh; ᠆몆\u200C-.â´›ð¦…︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--jlj4997dhgh; ; ; # ᠆몆-.â´›ð¦…︒
xn----e3j6620g.xn--znd2362jhgh; ᠆몆-.á‚»ð¦…︒; [B1, B5, B6, V3, V6]; xn----e3j6620g.xn--znd2362jhgh; ; ; # ᠆몆-.á‚»ð¦…︒
-xn----e3j425bsk1o.xn--znd2362jhgh; ᠆몆‌-.á‚»ð¦…︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd2362jhgh; ; ; # ᠆몆-.á‚»ð¦…︒
-ó ¾³.︒⥱‌ð¹¬; ; [B1, C1, P1, V6]; xn--uf66e.xn--0ugz28axl3pqxna; ; xn--uf66e.xn--qtiz073e3ik; [B1, P1, V6] # .︒⥱ð¹¬
-ó ¾³.。⥱‌ð¹¬; ó ¾³..⥱‌ð¹¬; [B1, C1, P1, V6, X4_2]; xn--uf66e..xn--0ugz28as66q; [B1, C1, P1, V6, A4_2]; xn--uf66e..xn--qti2829e; [B1, P1, V6, A4_2] # ..⥱ð¹¬
+xn----e3j425bsk1o.xn--znd2362jhgh; ᠆몆\u200C-.á‚»ð¦…︒; [B1, B5, B6, C1, V3, V6]; xn----e3j425bsk1o.xn--znd2362jhgh; ; ; # ᠆몆-.á‚»ð¦…︒
+ó ¾³.︒⥱\u200Cð¹¬; ; [B1, C1, V6]; xn--uf66e.xn--0ugz28axl3pqxna; ; xn--uf66e.xn--qtiz073e3ik; [B1, V6] # .︒⥱ð¹¬
+ó ¾³.。⥱\u200Cð¹¬; ó ¾³..⥱\u200Cð¹¬; [B1, C1, V6, X4_2]; xn--uf66e..xn--0ugz28as66q; [B1, C1, V6, A4_2]; xn--uf66e..xn--qti2829e; [B1, V6, A4_2] # ..⥱ð¹¬
xn--uf66e..xn--qti2829e; ó ¾³..⥱ð¹¬; [B1, V6, X4_2]; xn--uf66e..xn--qti2829e; [B1, V6, A4_2]; ; # ..⥱ð¹¬
-xn--uf66e..xn--0ugz28as66q; ó ¾³..⥱‌ð¹¬; [B1, C1, V6, X4_2]; xn--uf66e..xn--0ugz28as66q; [B1, C1, V6, A4_2]; ; # ..⥱ð¹¬
+xn--uf66e..xn--0ugz28as66q; ó ¾³..⥱\u200Cð¹¬; [B1, C1, V6, X4_2]; xn--uf66e..xn--0ugz28as66q; [B1, C1, V6, A4_2]; ; # ..⥱ð¹¬
xn--uf66e.xn--qtiz073e3ik; ó ¾³.︒⥱ð¹¬; [B1, V6]; xn--uf66e.xn--qtiz073e3ik; ; ; # .︒⥱ð¹¬
-xn--uf66e.xn--0ugz28axl3pqxna; ó ¾³.︒⥱‌ð¹¬; [B1, C1, V6]; xn--uf66e.xn--0ugz28axl3pqxna; ; ; # .︒⥱ð¹¬
-ð¯–.ð¹ á‚±ñš‡œð«Š; ; [B1, P1, V6]; xn--n49c.xn--pnd4619jwicl862o; ; ; # .ð¹ á‚±ð«Š
-ð¯–.ð¹ â´‘ñš‡œð«Š; ; [B1, P1, V6]; xn--n49c.xn--8kj8702ewicl862o; ; ; # .ð¹ â´‘ð«Š
+xn--uf66e.xn--0ugz28axl3pqxna; ó ¾³.︒⥱\u200Cð¹¬; [B1, C1, V6]; xn--uf66e.xn--0ugz28axl3pqxna; ; ; # .︒⥱ð¹¬
+ð¯–.ð¹ á‚±ñš‡œð«Š; ; [B1, V6]; xn--n49c.xn--pnd4619jwicl862o; ; ; # .ð¹ á‚±ð«Š
+ð¯–.ð¹ â´‘ñš‡œð«Š; ; [B1, V6]; xn--n49c.xn--8kj8702ewicl862o; ; ; # .ð¹ â´‘ð«Š
xn--n49c.xn--8kj8702ewicl862o; ð¯–.ð¹ â´‘ñš‡œð«Š; [B1, V6]; xn--n49c.xn--8kj8702ewicl862o; ; ; # .ð¹ â´‘ð«Š
xn--n49c.xn--pnd4619jwicl862o; ð¯–.ð¹ á‚±ñš‡œð«Š; [B1, V6]; xn--n49c.xn--pnd4619jwicl862o; ; ; # .ð¹ á‚±ð«Š
-ྤñ±¤¯ï¼ŽðŸ­á‚»; ྤñ±¤¯.1á‚»; [P1, V5, V6]; xn--0fd40533g.xn--1-q1g; ; ; # ྤ.1á‚»
-ྤ񱤯.1Ⴛ; ; [P1, V5, V6]; xn--0fd40533g.xn--1-q1g; ; ; # ྤ.1Ⴛ
-ྤ񱤯.1ⴛ; ; [P1, V5, V6]; xn--0fd40533g.xn--1-tws; ; ; # ྤ.1ⴛ
-xn--0fd40533g.xn--1-tws; ྤ񱤯.1ⴛ; [V5, V6]; xn--0fd40533g.xn--1-tws; ; ; # ྤ.1ⴛ
-xn--0fd40533g.xn--1-q1g; ྤ񱤯.1Ⴛ; [V5, V6]; xn--0fd40533g.xn--1-q1g; ; ; # ྤ.1Ⴛ
-ྤñ±¤¯ï¼ŽðŸ­â´›; ྤñ±¤¯.1â´›; [P1, V5, V6]; xn--0fd40533g.xn--1-tws; ; ; # ྤ.1â´›
--ࠦ齀。릿ð¸‹; -ࠦ齀.릿ð¸‹; [B1, B5, B6, P1, V3, V6]; xn----6gd0617i.xn--7y2bm55m; ; ; # -ࠦ齀.릿
--ࠦ齀。릿ð¸‹; -ࠦ齀.릿ð¸‹; [B1, B5, B6, P1, V3, V6]; xn----6gd0617i.xn--7y2bm55m; ; ; # -ࠦ齀.릿
-xn----6gd0617i.xn--7y2bm55m; -ࠦ齀.릿ð¸‹; [B1, B5, B6, V3, V6]; xn----6gd0617i.xn--7y2bm55m; ; ; # -ࠦ齀.릿
-󠔊ܜé¹ê¾—。ñ¾µâ€â€âƒ; 󠔊ܜé¹ê¾—.ñ¾µâ€â€âƒ; [B1, B6, C2, P1, V6]; xn--mnb6558e91kyq533a.xn--1uga46zs309y; ; xn--mnb6558e91kyq533a.xn--6mh27269e; [B1, B6, P1, V6] # Üœé¹ê¾—.âƒ
-󠔊ܜé¹á„ᅬᆾ。ñ¾µâ€â€âƒ; 󠔊ܜé¹ê¾—.ñ¾µâ€â€âƒ; [B1, B6, C2, P1, V6]; xn--mnb6558e91kyq533a.xn--1uga46zs309y; ; xn--mnb6558e91kyq533a.xn--6mh27269e; [B1, B6, P1, V6] # Üœé¹ê¾—.âƒ
-xn--mnb6558e91kyq533a.xn--6mh27269e; 󠔊ܜé¹ê¾—.ñ¾µâƒ; [B1, B6, V6]; xn--mnb6558e91kyq533a.xn--6mh27269e; ; ; # Üœé¹ê¾—.âƒ
-xn--mnb6558e91kyq533a.xn--1uga46zs309y; 󠔊ܜé¹ê¾—.ñ¾µâ€â€âƒ; [B1, B6, C2, V6]; xn--mnb6558e91kyq533a.xn--1uga46zs309y; ; ; # Üœé¹ê¾—.âƒ
-≮.-܈--; ≮.-܈--; [B1, P1, V2, V3, V6]; xn--gdh.xn------eqf; ; ; # ≮.-܈--
-≮.-܈--; ≮.-܈--; [B1, P1, V2, V3, V6]; xn--gdh.xn------eqf; ; ; # ≮.-܈--
-≮.-܈--; ; [B1, P1, V2, V3, V6]; xn--gdh.xn------eqf; ; ; # ≮.-܈--
-≮.-܈--; ≮.-܈--; [B1, P1, V2, V3, V6]; xn--gdh.xn------eqf; ; ; # ≮.-܈--
-xn--gdh.xn------eqf; ≮.-܈--; [B1, V2, V3, V6]; xn--gdh.xn------eqf; ; ; # ≮.-܈--
-ð¹¸ó ‹³ã€‚â€Ï‚ðŸ©; ð¹¸ó ‹³.â€Ï‚7; [B1, C2, P1, V6]; xn--wo0di5177c.xn--7-xmb248s; ; xn--wo0di5177c.xn--7-zmb; [B1, P1, V6] # ð¹¸.Ï‚7
-ð¹¸ó ‹³ã€‚â€Ï‚7; ð¹¸ó ‹³.â€Ï‚7; [B1, C2, P1, V6]; xn--wo0di5177c.xn--7-xmb248s; ; xn--wo0di5177c.xn--7-zmb; [B1, P1, V6] # ð¹¸.Ï‚7
-ð¹¸ó ‹³ã€‚â€Î£7; ð¹¸ó ‹³.â€Ïƒ7; [B1, C2, P1, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, P1, V6] # ð¹¸.σ7
-ð¹¸ó ‹³ã€‚â€Ïƒ7; ð¹¸ó ‹³.â€Ïƒ7; [B1, C2, P1, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, P1, V6] # ð¹¸.σ7
+\u0FA4ñ±¤¯ï¼ŽðŸ­á‚»; \u0FA4ñ±¤¯.1á‚»; [V5, V6]; xn--0fd40533g.xn--1-q1g; ; ; # ྤ.1á‚»
+\u0FA4񱤯.1Ⴛ; ; [V5, V6]; xn--0fd40533g.xn--1-q1g; ; ; # ྤ.1Ⴛ
+\u0FA4񱤯.1ⴛ; ; [V5, V6]; xn--0fd40533g.xn--1-tws; ; ; # ྤ.1ⴛ
+xn--0fd40533g.xn--1-tws; \u0FA4񱤯.1ⴛ; [V5, V6]; xn--0fd40533g.xn--1-tws; ; ; # ྤ.1ⴛ
+xn--0fd40533g.xn--1-q1g; \u0FA4񱤯.1Ⴛ; [V5, V6]; xn--0fd40533g.xn--1-q1g; ; ; # ྤ.1Ⴛ
+\u0FA4ñ±¤¯ï¼ŽðŸ­â´›; \u0FA4ñ±¤¯.1â´›; [V5, V6]; xn--0fd40533g.xn--1-tws; ; ; # ྤ.1â´›
+-\u0826齀。릿ð¸‹; -\u0826é½€.릿ð¸‹; [B1, B5, B6, V3, V6]; xn----6gd0617i.xn--7y2bm55m; ; ; # -ࠦ齀.릿
+-\u0826齀。릿ð¸‹; -\u0826é½€.릿ð¸‹; [B1, B5, B6, V3, V6]; xn----6gd0617i.xn--7y2bm55m; ; ; # -ࠦ齀.릿
+xn----6gd0617i.xn--7y2bm55m; -\u0826é½€.릿ð¸‹; [B1, B5, B6, V3, V6]; xn----6gd0617i.xn--7y2bm55m; ; ; # -ࠦ齀.릿
+󠔊\u071Cé¹ê¾—。ñ¾µ\u200D\u200Dâƒ; 󠔊\u071Cé¹ê¾—.ñ¾µ\u200D\u200Dâƒ; [B1, B6, C2, V6]; xn--mnb6558e91kyq533a.xn--1uga46zs309y; ; xn--mnb6558e91kyq533a.xn--6mh27269e; [B1, B6, V6] # Üœé¹ê¾—.âƒ
+󠔊\u071Cé¹á„ᅬᆾ。ñ¾µ\u200D\u200Dâƒ; 󠔊\u071Cé¹ê¾—.ñ¾µ\u200D\u200Dâƒ; [B1, B6, C2, V6]; xn--mnb6558e91kyq533a.xn--1uga46zs309y; ; xn--mnb6558e91kyq533a.xn--6mh27269e; [B1, B6, V6] # Üœé¹ê¾—.âƒ
+xn--mnb6558e91kyq533a.xn--6mh27269e; 󠔊\u071Cé¹ê¾—.ñ¾µâƒ; [B1, B6, V6]; xn--mnb6558e91kyq533a.xn--6mh27269e; ; ; # Üœé¹ê¾—.âƒ
+xn--mnb6558e91kyq533a.xn--1uga46zs309y; 󠔊\u071Cé¹ê¾—.ñ¾µ\u200D\u200Dâƒ; [B1, B6, C2, V6]; xn--mnb6558e91kyq533a.xn--1uga46zs309y; ; ; # Üœé¹ê¾—.âƒ
+≮.-\u0708--; ≮.-\u0708--; [B1, V2, V3]; xn--gdh.xn------eqf; ; ; # ≮.-܈--
+<\u0338.-\u0708--; ≮.-\u0708--; [B1, V2, V3]; xn--gdh.xn------eqf; ; ; # ≮.-܈--
+≮.-\u0708--; ; [B1, V2, V3]; xn--gdh.xn------eqf; ; ; # ≮.-܈--
+<\u0338.-\u0708--; ≮.-\u0708--; [B1, V2, V3]; xn--gdh.xn------eqf; ; ; # ≮.-܈--
+xn--gdh.xn------eqf; ≮.-\u0708--; [B1, V2, V3]; xn--gdh.xn------eqf; ; ; # ≮.-܈--
+ð¹¸ó ‹³ã€‚\u200DÏ‚ðŸ©; ð¹¸ó ‹³.\u200DÏ‚7; [B1, C2, V6]; xn--wo0di5177c.xn--7-xmb248s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # ð¹¸.Ï‚7
+ð¹¸ó ‹³ã€‚\u200DÏ‚7; ð¹¸ó ‹³.\u200DÏ‚7; [B1, C2, V6]; xn--wo0di5177c.xn--7-xmb248s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # ð¹¸.Ï‚7
+ð¹¸ó ‹³ã€‚\u200DΣ7; ð¹¸ó ‹³.\u200Dσ7; [B1, C2, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # ð¹¸.σ7
+ð¹¸ó ‹³ã€‚\u200Dσ7; ð¹¸ó ‹³.\u200Dσ7; [B1, C2, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # ð¹¸.σ7
xn--wo0di5177c.xn--7-zmb; ð¹¸ó ‹³.σ7; [B1, V6]; xn--wo0di5177c.xn--7-zmb; ; ; # ð¹¸.σ7
-xn--wo0di5177c.xn--7-zmb938s; ð¹¸ó ‹³.â€Ïƒ7; [B1, C2, V6]; xn--wo0di5177c.xn--7-zmb938s; ; ; # ð¹¸.σ7
-xn--wo0di5177c.xn--7-xmb248s; ð¹¸ó ‹³.â€Ï‚7; [B1, C2, V6]; xn--wo0di5177c.xn--7-xmb248s; ; ; # ð¹¸.Ï‚7
-ð¹¸ó ‹³ã€‚â€Î£ðŸ©; ð¹¸ó ‹³.â€Ïƒ7; [B1, C2, P1, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, P1, V6] # ð¹¸.σ7
-ð¹¸ó ‹³ã€‚â€ÏƒðŸ©; ð¹¸ó ‹³.â€Ïƒ7; [B1, C2, P1, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, P1, V6] # ð¹¸.σ7
-ς򅜌8.𞭤; ς򅜌8.𞭤; [P1, V6]; xn--8-xmb44974n.xn--su6h; ; xn--8-zmb14974n.xn--su6h; # ς8.
-ς򅜌8.𞭤; ; [P1, V6]; xn--8-xmb44974n.xn--su6h; ; xn--8-zmb14974n.xn--su6h; # ς8.
-Σ򅜌8.𞭤; σ򅜌8.𞭤; [P1, V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8.
-σ򅜌8.𞭤; ; [P1, V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8.
+xn--wo0di5177c.xn--7-zmb938s; ð¹¸ó ‹³.\u200Dσ7; [B1, C2, V6]; xn--wo0di5177c.xn--7-zmb938s; ; ; # ð¹¸.σ7
+xn--wo0di5177c.xn--7-xmb248s; ð¹¸ó ‹³.\u200DÏ‚7; [B1, C2, V6]; xn--wo0di5177c.xn--7-xmb248s; ; ; # ð¹¸.Ï‚7
+ð¹¸ó ‹³ã€‚\u200DΣðŸ©; ð¹¸ó ‹³.\u200Dσ7; [B1, C2, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # ð¹¸.σ7
+ð¹¸ó ‹³ã€‚\u200DσðŸ©; ð¹¸ó ‹³.\u200Dσ7; [B1, C2, V6]; xn--wo0di5177c.xn--7-zmb938s; ; xn--wo0di5177c.xn--7-zmb; [B1, V6] # ð¹¸.σ7
+ς򅜌8.𞭤; ς򅜌8.𞭤; [V6]; xn--8-xmb44974n.xn--su6h; ; xn--8-zmb14974n.xn--su6h; # ς8.
+ς򅜌8.𞭤; ; [V6]; xn--8-xmb44974n.xn--su6h; ; xn--8-zmb14974n.xn--su6h; # ς8.
+Σ򅜌8.𞭤; σ򅜌8.𞭤; [V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8.
+σ򅜌8.𞭤; ; [V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8.
xn--8-zmb14974n.xn--su6h; σ򅜌8.𞭤; [V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8.
xn--8-xmb44974n.xn--su6h; ς򅜌8.𞭤; [V6]; xn--8-xmb44974n.xn--su6h; ; ; # ς8.
-Σ򅜌8.𞭤; σ򅜌8.𞭤; [P1, V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8.
-σ򅜌8.𞭤; σ򅜌8.𞭤; [P1, V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8.
-‌ᡑ🄀ڄ.-ð«„𑲤; ‌ᡑ🄀ڄ.-ð«„𑲤; [B1, C1, P1, V3, V6]; xn--9ib722gvtfi563c.xn----ek5i065b; ; xn--9ib722gbw95a.xn----ek5i065b; [B1, B5, B6, P1, V3, V6] # ᡑ🄀ڄ.-ð«„𑲤
-‌ᡑ0.Ú„.-ð«„𑲤; ; [B1, C1, V3]; xn--0-o7j263b.xn--9ib.xn----ek5i065b; ; xn--0-o7j.xn--9ib.xn----ek5i065b; [B1, V3] # á¡‘0.Ú„.-ð«„𑲤
-xn--0-o7j.xn--9ib.xn----ek5i065b; á¡‘0.Ú„.-ð«„𑲤; [B1, V3]; xn--0-o7j.xn--9ib.xn----ek5i065b; ; ; # á¡‘0.Ú„.-ð«„𑲤
-xn--0-o7j263b.xn--9ib.xn----ek5i065b; ‌ᡑ0.Ú„.-ð«„𑲤; [B1, C1, V3]; xn--0-o7j263b.xn--9ib.xn----ek5i065b; ; ; # á¡‘0.Ú„.-ð«„𑲤
-xn--9ib722gbw95a.xn----ek5i065b; ᡑ🄀ڄ.-ð«„𑲤; [B1, B5, B6, V3, V6]; xn--9ib722gbw95a.xn----ek5i065b; ; ; # ᡑ🄀ڄ.-ð«„𑲤
-xn--9ib722gvtfi563c.xn----ek5i065b; ‌ᡑ🄀ڄ.-ð«„𑲤; [B1, C1, V3, V6]; xn--9ib722gvtfi563c.xn----ek5i065b; ; ; # ᡑ🄀ڄ.-ð«„𑲤
-ð– ã€‚ðª¿ë„¯òžµ²; ð– .ðª¿ë„¯òžµ²; [B2, B3, P1, V6]; xn--4e9e.xn--l60bj21opd57g; ; ; # ð– .넯
-ð– ã€‚ðª¿á„‚ᅦᆲòžµ²; ð– .ðª¿ë„¯òžµ²; [B2, B3, P1, V6]; xn--4e9e.xn--l60bj21opd57g; ; ; # ð– .넯
+Σ򅜌8.𞭤; σ򅜌8.𞭤; [V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8.
+σ򅜌8.𞭤; σ򅜌8.𞭤; [V6]; xn--8-zmb14974n.xn--su6h; ; ; # σ8.
+\u200Cᡑ🄀\u0684.-ð«„𑲤; \u200Cᡑ🄀\u0684.-ð«„𑲤; [B1, C1, V3, V6]; xn--9ib722gvtfi563c.xn----ek5i065b; ; xn--9ib722gbw95a.xn----ek5i065b; [B1, B5, B6, V3, V6] # ᡑ🄀ڄ.-ð«„𑲤
+\u200Cá¡‘0.\u0684.-ð«„𑲤; ; [B1, C1, V3]; xn--0-o7j263b.xn--9ib.xn----ek5i065b; ; xn--0-o7j.xn--9ib.xn----ek5i065b; [B1, V3] # á¡‘0.Ú„.-ð«„𑲤
+xn--0-o7j.xn--9ib.xn----ek5i065b; á¡‘0.\u0684.-ð«„𑲤; [B1, V3]; xn--0-o7j.xn--9ib.xn----ek5i065b; ; ; # á¡‘0.Ú„.-ð«„𑲤
+xn--0-o7j263b.xn--9ib.xn----ek5i065b; \u200Cá¡‘0.\u0684.-ð«„𑲤; [B1, C1, V3]; xn--0-o7j263b.xn--9ib.xn----ek5i065b; ; ; # á¡‘0.Ú„.-ð«„𑲤
+xn--9ib722gbw95a.xn----ek5i065b; ᡑ🄀\u0684.-ð«„𑲤; [B1, B5, B6, V3, V6]; xn--9ib722gbw95a.xn----ek5i065b; ; ; # ᡑ🄀ڄ.-ð«„𑲤
+xn--9ib722gvtfi563c.xn----ek5i065b; \u200Cᡑ🄀\u0684.-ð«„𑲤; [B1, C1, V3, V6]; xn--9ib722gvtfi563c.xn----ek5i065b; ; ; # ᡑ🄀ڄ.-ð«„𑲤
+ð– ã€‚ðª¿ë„¯òžµ²; ð– .ðª¿ë„¯òžµ²; [B2, B3, V6]; xn--4e9e.xn--l60bj21opd57g; ; ; # ð– .넯
+ð– ã€‚ðª¿á„‚ᅦᆲòžµ²; ð– .ðª¿ë„¯òžµ²; [B2, B3, V6]; xn--4e9e.xn--l60bj21opd57g; ; ; # ð– .넯
xn--4e9e.xn--l60bj21opd57g; ð– .ðª¿ë„¯òžµ²; [B2, B3, V6]; xn--4e9e.xn--l60bj21opd57g; ; ; # ð– .넯
-᠇Ⴘ。؃Ⴈð†Š; ᠇Ⴘ.؃Ⴈð†Š; [B1, P1, V6]; xn--wnd558a.xn--lfb465c1v87a; ; ; # ᠇Ⴘ.Ⴈð†Š
-᠇ⴘ。؃ⴈð†Š; ᠇ⴘ.؃ⴈð†Š; [B1, P1, V6]; xn--d6e009h.xn--lfb290rfu3z; ; ; # ᠇ⴘ.â´ˆð†Š
-xn--d6e009h.xn--lfb290rfu3z; ᠇ⴘ.؃ⴈð†Š; [B1, V6]; xn--d6e009h.xn--lfb290rfu3z; ; ; # ᠇ⴘ.â´ˆð†Š
-xn--wnd558a.xn--lfb465c1v87a; ᠇Ⴘ.؃Ⴈð†Š; [B1, V6]; xn--wnd558a.xn--lfb465c1v87a; ; ; # ᠇Ⴘ.Ⴈð†Š
-⒚󠋑𞤰。牣٧Ⴜᣥ; ⒚󠋑𞤰.牣٧Ⴜᣥ; [B1, B5, P1, V6]; xn--cthy466n29j3e.xn--gib404ccxgh00h; ; ; # ⒚𞤰.牣٧Ⴜᣥ
-19.󠋑𞤰。牣٧Ⴜᣥ; 19.󠋑𞤰.牣٧Ⴜᣥ; [B1, B5, P1, V6]; 19.xn--oe6h75760c.xn--gib404ccxgh00h; ; ; # 19.𞤰.牣٧Ⴜᣥ
-19.󠋑𞤰。牣٧ⴜᣥ; 19.󠋑𞤰.牣٧ⴜᣥ; [B1, B5, P1, V6]; 19.xn--oe6h75760c.xn--gib285gtxo2l9d; ; ; # 19.𞤰.牣٧ⴜᣥ
-19.󠋑𞤎。牣٧Ⴜᣥ; 19.󠋑𞤰.牣٧Ⴜᣥ; [B1, B5, P1, V6]; 19.xn--oe6h75760c.xn--gib404ccxgh00h; ; ; # 19.𞤰.牣٧Ⴜᣥ
-19.󠋑𞤎。牣٧ⴜᣥ; 19.󠋑𞤰.牣٧ⴜᣥ; [B1, B5, P1, V6]; 19.xn--oe6h75760c.xn--gib285gtxo2l9d; ; ; # 19.𞤰.牣٧ⴜᣥ
-19.xn--oe6h75760c.xn--gib285gtxo2l9d; 19.󠋑𞤰.牣٧ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib285gtxo2l9d; ; ; # 19.𞤰.牣٧ⴜᣥ
-19.xn--oe6h75760c.xn--gib404ccxgh00h; 19.󠋑𞤰.牣٧Ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib404ccxgh00h; ; ; # 19.𞤰.牣٧Ⴜᣥ
-⒚󠋑𞤰。牣٧ⴜᣥ; ⒚󠋑𞤰.牣٧ⴜᣥ; [B1, B5, P1, V6]; xn--cthy466n29j3e.xn--gib285gtxo2l9d; ; ; # ⒚𞤰.牣٧ⴜᣥ
-⒚󠋑𞤎。牣٧Ⴜᣥ; ⒚󠋑𞤰.牣٧Ⴜᣥ; [B1, B5, P1, V6]; xn--cthy466n29j3e.xn--gib404ccxgh00h; ; ; # ⒚𞤰.牣٧Ⴜᣥ
-⒚󠋑𞤎。牣٧ⴜᣥ; ⒚󠋑𞤰.牣٧ⴜᣥ; [B1, B5, P1, V6]; xn--cthy466n29j3e.xn--gib285gtxo2l9d; ; ; # ⒚𞤰.牣٧ⴜᣥ
-xn--cthy466n29j3e.xn--gib285gtxo2l9d; ⒚󠋑𞤰.牣٧ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib285gtxo2l9d; ; ; # ⒚𞤰.牣٧ⴜᣥ
-xn--cthy466n29j3e.xn--gib404ccxgh00h; ⒚󠋑𞤰.牣٧Ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib404ccxgh00h; ; ; # ⒚𞤰.牣٧Ⴜᣥ
--ð‹±ð°½â’ˆ.Ⴓ; ; [B1, P1, V3, V6]; xn----ecp0206g90h.xn--rnd; ; ; # -ð‹±ð°½â’ˆ.Ⴓ
--ð‹±ð°½1..Ⴓ; ; [B1, P1, V3, V6, X4_2]; xn---1-895nq11a..xn--rnd; [B1, P1, V3, V6, A4_2]; ; # -ð‹±ð°½1..Ⴓ
+᠇Ⴘ。\u0603Ⴈð†Š; ᠇Ⴘ.\u0603Ⴈð†Š; [B1, V6]; xn--wnd558a.xn--lfb465c1v87a; ; ; # ᠇Ⴘ.Ⴈð†Š
+᠇ⴘ。\u0603â´ˆð†Š; ᠇ⴘ.\u0603â´ˆð†Š; [B1, V6]; xn--d6e009h.xn--lfb290rfu3z; ; ; # ᠇ⴘ.â´ˆð†Š
+xn--d6e009h.xn--lfb290rfu3z; ᠇ⴘ.\u0603â´ˆð†Š; [B1, V6]; xn--d6e009h.xn--lfb290rfu3z; ; ; # ᠇ⴘ.â´ˆð†Š
+xn--wnd558a.xn--lfb465c1v87a; ᠇Ⴘ.\u0603Ⴈð†Š; [B1, V6]; xn--wnd558a.xn--lfb465c1v87a; ; ; # ᠇Ⴘ.Ⴈð†Š
+⒚󠋑𞤰。牣\u0667Ⴜᣥ; ⒚󠋑𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib404ccxgh00h; ; ; # ⒚𞤰.牣٧Ⴜᣥ
+19.󠋑𞤰。牣\u0667Ⴜᣥ; 19.󠋑𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib404ccxgh00h; ; ; # 19.𞤰.牣٧Ⴜᣥ
+19.󠋑𞤰。牣\u0667ⴜᣥ; 19.󠋑𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib285gtxo2l9d; ; ; # 19.𞤰.牣٧ⴜᣥ
+19.󠋑𞤎。牣\u0667Ⴜᣥ; 19.󠋑𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib404ccxgh00h; ; ; # 19.𞤰.牣٧Ⴜᣥ
+19.󠋑𞤎。牣\u0667ⴜᣥ; 19.󠋑𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib285gtxo2l9d; ; ; # 19.𞤰.牣٧ⴜᣥ
+19.xn--oe6h75760c.xn--gib285gtxo2l9d; 19.󠋑𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib285gtxo2l9d; ; ; # 19.𞤰.牣٧ⴜᣥ
+19.xn--oe6h75760c.xn--gib404ccxgh00h; 19.󠋑𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; 19.xn--oe6h75760c.xn--gib404ccxgh00h; ; ; # 19.𞤰.牣٧Ⴜᣥ
+⒚󠋑𞤰。牣\u0667ⴜᣥ; ⒚󠋑𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib285gtxo2l9d; ; ; # ⒚𞤰.牣٧ⴜᣥ
+⒚󠋑𞤎。牣\u0667Ⴜᣥ; ⒚󠋑𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib404ccxgh00h; ; ; # ⒚𞤰.牣٧Ⴜᣥ
+⒚󠋑𞤎。牣\u0667ⴜᣥ; ⒚󠋑𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib285gtxo2l9d; ; ; # ⒚𞤰.牣٧ⴜᣥ
+xn--cthy466n29j3e.xn--gib285gtxo2l9d; ⒚󠋑𞤰.牣\u0667ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib285gtxo2l9d; ; ; # ⒚𞤰.牣٧ⴜᣥ
+xn--cthy466n29j3e.xn--gib404ccxgh00h; ⒚󠋑𞤰.牣\u0667Ⴜᣥ; [B1, B5, V6]; xn--cthy466n29j3e.xn--gib404ccxgh00h; ; ; # ⒚𞤰.牣٧Ⴜᣥ
+-ð‹±ð°½â’ˆ.Ⴓ; ; [B1, V3, V6]; xn----ecp0206g90h.xn--rnd; ; ; # -ð‹±ð°½â’ˆ.Ⴓ
+-ð‹±ð°½1..Ⴓ; ; [B1, V3, V6, X4_2]; xn---1-895nq11a..xn--rnd; [B1, V3, V6, A4_2]; ; # -ð‹±ð°½1..Ⴓ
-ð‹±ð°½1..â´“; ; [B1, V3, X4_2]; xn---1-895nq11a..xn--blj; [B1, V3, A4_2]; ; # -ð‹±ð°½1..â´“
xn---1-895nq11a..xn--blj; -ð‹±ð°½1..â´“; [B1, V3, X4_2]; xn---1-895nq11a..xn--blj; [B1, V3, A4_2]; ; # -ð‹±ð°½1..â´“
xn---1-895nq11a..xn--rnd; -ð‹±ð°½1..Ⴓ; [B1, V3, V6, X4_2]; xn---1-895nq11a..xn--rnd; [B1, V3, V6, A4_2]; ; # -ð‹±ð°½1..Ⴓ
--ð‹±ð°½â’ˆ.â´“; ; [B1, P1, V3, V6]; xn----ecp0206g90h.xn--blj; ; ; # -ð‹±ð°½â’ˆ.â´“
+-ð‹±ð°½â’ˆ.â´“; ; [B1, V3, V6]; xn----ecp0206g90h.xn--blj; ; ; # -ð‹±ð°½â’ˆ.â´“
xn----ecp0206g90h.xn--blj; -ð‹±ð°½â’ˆ.â´“; [B1, V3, V6]; xn----ecp0206g90h.xn--blj; ; ; # -ð‹±ð°½â’ˆ.â´“
xn----ecp0206g90h.xn--rnd; -ð‹±ð°½â’ˆ.Ⴓ; [B1, V3, V6]; xn----ecp0206g90h.xn--rnd; ; ; # -ð‹±ð°½â’ˆ.Ⴓ
-‌긃.榶-; ; [C1, V3]; xn--0ug3307c.xn----d87b; ; xn--ej0b.xn----d87b; [V3] # 긃.榶-
-‌긃.榶-; ‌긃.榶-; [C1, V3]; xn--0ug3307c.xn----d87b; ; xn--ej0b.xn----d87b; [V3] # 긃.榶-
+\u200C긃.榶-; ; [C1, V3]; xn--0ug3307c.xn----d87b; ; xn--ej0b.xn----d87b; [V3] # 긃.榶-
+\u200C긃.榶-; \u200C긃.榶-; [C1, V3]; xn--0ug3307c.xn----d87b; ; xn--ej0b.xn----d87b; [V3] # 긃.榶-
xn--ej0b.xn----d87b; 긃.榶-; [V3]; xn--ej0b.xn----d87b; ; ; # 긃.榶-
-xn--0ug3307c.xn----d87b; ‌긃.榶-; [C1, V3]; xn--0ug3307c.xn----d87b; ; ; # 긃.榶-
-뉓泓𜵽.à§â€; ; [P1, V5, V6]; xn--lwwp69lqs7m.xn--b7b605i; ; xn--lwwp69lqs7m.xn--b7b; # 뉓泓.à§
-뉓泓𜵽.à§â€; 뉓泓𜵽.à§â€; [P1, V5, V6]; xn--lwwp69lqs7m.xn--b7b605i; ; xn--lwwp69lqs7m.xn--b7b; # 뉓泓.à§
-xn--lwwp69lqs7m.xn--b7b; 뉓泓𜵽.à§; [V5, V6]; xn--lwwp69lqs7m.xn--b7b; ; ; # 뉓泓.à§
-xn--lwwp69lqs7m.xn--b7b605i; 뉓泓𜵽.à§â€; [V5, V6]; xn--lwwp69lqs7m.xn--b7b605i; ; ; # 뉓泓.à§
-â€ð¹´ÃŸï½¡àº´â­µñª…Œ; â€ð¹´ÃŸ.ິ⭵ñª…Œ; [B1, C2, P1, V5, V6]; xn--zca770nip7n.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, P1, V5, V6] # ð¹´ÃŸ.ິ
-â€ð¹´ÃŸã€‚ິ⭵ñª…Œ; â€ð¹´ÃŸ.ິ⭵ñª…Œ; [B1, C2, P1, V5, V6]; xn--zca770nip7n.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, P1, V5, V6] # ð¹´ÃŸ.ິ
-â€ð¹´SS。ິ⭵ñª…Œ; â€ð¹´ss.ິ⭵ñª…Œ; [B1, C2, P1, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, P1, V5, V6] # ð¹´ss.ິ
-â€ð¹´ss。ິ⭵ñª…Œ; â€ð¹´ss.ິ⭵ñª…Œ; [B1, C2, P1, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, P1, V5, V6] # ð¹´ss.ິ
-â€ð¹´Ss。ິ⭵ñª…Œ; â€ð¹´ss.ິ⭵ñª…Œ; [B1, C2, P1, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, P1, V5, V6] # ð¹´ss.ິ
-xn--ss-ti3o.xn--57c638l8774i; ð¹´ss.ິ⭵ñª…Œ; [B1, V5, V6]; xn--ss-ti3o.xn--57c638l8774i; ; ; # ð¹´ss.ິ
-xn--ss-l1t5169j.xn--57c638l8774i; â€ð¹´ss.ິ⭵ñª…Œ; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; ; # ð¹´ss.ິ
-xn--zca770nip7n.xn--57c638l8774i; â€ð¹´ÃŸ.ິ⭵ñª…Œ; [B1, C2, V5, V6]; xn--zca770nip7n.xn--57c638l8774i; ; ; # ð¹´ÃŸ.ິ
-â€ð¹´SS。ິ⭵ñª…Œ; â€ð¹´ss.ິ⭵ñª…Œ; [B1, C2, P1, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, P1, V5, V6] # ð¹´ss.ິ
-â€ð¹´ss。ິ⭵ñª…Œ; â€ð¹´ss.ິ⭵ñª…Œ; [B1, C2, P1, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, P1, V5, V6] # ð¹´ss.ິ
-â€ð¹´Ss。ິ⭵ñª…Œ; â€ð¹´ss.ິ⭵ñª…Œ; [B1, C2, P1, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, P1, V5, V6] # ð¹´ss.ິ
-᭄.᮪-≮≠; ᭄.᮪-≮≠; [P1, V5, V6]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠
-᭄.᮪-≮≠; ᭄.᮪-≮≠; [P1, V5, V6]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠
-᭄.᮪-≮≠; ; [P1, V5, V6]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠
-᭄.᮪-≮≠; ᭄.᮪-≮≠; [P1, V5, V6]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠
-xn--1uf.xn----nmlz65aub; ᭄.᮪-≮≠; [V5, V6]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠
-᯳Ⴑᅟ.𑄴Ⅎ; ᯳Ⴑᅟ.𑄴Ⅎ; [P1, V5, V6]; xn--pnd26a55x.xn--f3g7465g; ; ; # ᯳Ⴑ.𑄴Ⅎ
-᯳Ⴑᅟ.𑄴Ⅎ; ; [P1, V5, V6]; xn--pnd26a55x.xn--f3g7465g; ; ; # ᯳Ⴑ.𑄴Ⅎ
-᯳ⴑᅟ.𑄴ⅎ; ; [P1, V5, V6]; xn--osd925cvyn.xn--73g3065g; ; ; # ᯳ⴑ.𑄴ⅎ
-᯳Ⴑᅟ.𑄴ⅎ; ; [P1, V5, V6]; xn--pnd26a55x.xn--73g3065g; ; ; # ᯳Ⴑ.𑄴ⅎ
-xn--pnd26a55x.xn--73g3065g; ᯳Ⴑᅟ.𑄴ⅎ; [V5, V6]; xn--pnd26a55x.xn--73g3065g; ; ; # ᯳Ⴑ.𑄴ⅎ
-xn--osd925cvyn.xn--73g3065g; ᯳ⴑᅟ.𑄴ⅎ; [V5, V6]; xn--osd925cvyn.xn--73g3065g; ; ; # ᯳ⴑ.𑄴ⅎ
-xn--pnd26a55x.xn--f3g7465g; ᯳Ⴑᅟ.𑄴Ⅎ; [V5, V6]; xn--pnd26a55x.xn--f3g7465g; ; ; # ᯳Ⴑ.𑄴Ⅎ
-᯳ⴑᅟ.𑄴ⅎ; ᯳ⴑᅟ.𑄴ⅎ; [P1, V5, V6]; xn--osd925cvyn.xn--73g3065g; ; ; # ᯳ⴑ.𑄴ⅎ
-᯳Ⴑᅟ.𑄴ⅎ; ᯳Ⴑᅟ.𑄴ⅎ; [P1, V5, V6]; xn--pnd26a55x.xn--73g3065g; ; ; # ᯳Ⴑ.𑄴ⅎ
-𜉆。Ⴃð´£ð¹¹ë˜¯; 𜉆.á‚£ð´£ð¹¹ë˜¯; [B5, P1, V6]; xn--187g.xn--bnd4785f8r8bdeb; ; ; # .á‚£ð´£ð¹¹ë˜¯
-𜉆。Ⴃð´£ð¹¹á„„ᅪᆪ; 𜉆.á‚£ð´£ð¹¹ë˜¯; [B5, P1, V6]; xn--187g.xn--bnd4785f8r8bdeb; ; ; # .á‚£ð´£ð¹¹ë˜¯
-𜉆。ⴃð´£ð¹¹á„„ᅪᆪ; 𜉆.â´ƒð´£ð¹¹ë˜¯; [B5, P1, V6]; xn--187g.xn--ukjy205b8rscdeb; ; ; # .â´ƒð´£ð¹¹ë˜¯
-𜉆。ⴃð´£ð¹¹ë˜¯; 𜉆.â´ƒð´£ð¹¹ë˜¯; [B5, P1, V6]; xn--187g.xn--ukjy205b8rscdeb; ; ; # .â´ƒð´£ð¹¹ë˜¯
+xn--0ug3307c.xn----d87b; \u200C긃.榶-; [C1, V3]; xn--0ug3307c.xn----d87b; ; ; # 긃.榶-
+뉓泓𜵽.\u09CD\u200D; ; [V5, V6]; xn--lwwp69lqs7m.xn--b7b605i; ; xn--lwwp69lqs7m.xn--b7b; # 뉓泓.à§
+뉓泓𜵽.\u09CD\u200D; 뉓泓𜵽.\u09CD\u200D; [V5, V6]; xn--lwwp69lqs7m.xn--b7b605i; ; xn--lwwp69lqs7m.xn--b7b; # 뉓泓.à§
+xn--lwwp69lqs7m.xn--b7b; 뉓泓𜵽.\u09CD; [V5, V6]; xn--lwwp69lqs7m.xn--b7b; ; ; # 뉓泓.à§
+xn--lwwp69lqs7m.xn--b7b605i; 뉓泓𜵽.\u09CD\u200D; [V5, V6]; xn--lwwp69lqs7m.xn--b7b605i; ; ; # 뉓泓.à§
+\u200Dð¹´ÃŸï½¡\u0EB4\u2B75ñª…Œ; \u200Dð¹´ÃŸ.\u0EB4\u2B75ñª…Œ; [B1, C2, V5, V6]; xn--zca770nip7n.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # ð¹´ÃŸ.ິ
+\u200Dð¹´ÃŸã€‚\u0EB4\u2B75ñª…Œ; \u200Dð¹´ÃŸ.\u0EB4\u2B75ñª…Œ; [B1, C2, V5, V6]; xn--zca770nip7n.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # ð¹´ÃŸ.ິ
+\u200Dð¹´SS。\u0EB4\u2B75ñª…Œ; \u200Dð¹´ss.\u0EB4\u2B75ñª…Œ; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # ð¹´ss.ິ
+\u200Dð¹´ss。\u0EB4\u2B75ñª…Œ; \u200Dð¹´ss.\u0EB4\u2B75ñª…Œ; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # ð¹´ss.ິ
+\u200Dð¹´Ss。\u0EB4\u2B75ñª…Œ; \u200Dð¹´ss.\u0EB4\u2B75ñª…Œ; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # ð¹´ss.ິ
+xn--ss-ti3o.xn--57c638l8774i; ð¹´ss.\u0EB4\u2B75ñª…Œ; [B1, V5, V6]; xn--ss-ti3o.xn--57c638l8774i; ; ; # ð¹´ss.ິ
+xn--ss-l1t5169j.xn--57c638l8774i; \u200Dð¹´ss.\u0EB4\u2B75ñª…Œ; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; ; # ð¹´ss.ິ
+xn--zca770nip7n.xn--57c638l8774i; \u200Dð¹´ÃŸ.\u0EB4\u2B75ñª…Œ; [B1, C2, V5, V6]; xn--zca770nip7n.xn--57c638l8774i; ; ; # ð¹´ÃŸ.ິ
+\u200Dð¹´SS。\u0EB4\u2B75ñª…Œ; \u200Dð¹´ss.\u0EB4\u2B75ñª…Œ; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # ð¹´ss.ິ
+\u200Dð¹´ss。\u0EB4\u2B75ñª…Œ; \u200Dð¹´ss.\u0EB4\u2B75ñª…Œ; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # ð¹´ss.ິ
+\u200Dð¹´Ss。\u0EB4\u2B75ñª…Œ; \u200Dð¹´ss.\u0EB4\u2B75ñª…Œ; [B1, C2, V5, V6]; xn--ss-l1t5169j.xn--57c638l8774i; ; xn--ss-ti3o.xn--57c638l8774i; [B1, V5, V6] # ð¹´ss.ິ
+\u1B44.\u1BAA-≮≠; \u1B44.\u1BAA-≮≠; [V5]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠
+\u1B44.\u1BAA-<\u0338=\u0338; \u1B44.\u1BAA-≮≠; [V5]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠
+\u1B44.\u1BAA-≮≠; ; [V5]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠
+\u1B44.\u1BAA-<\u0338=\u0338; \u1B44.\u1BAA-≮≠; [V5]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠
+xn--1uf.xn----nmlz65aub; \u1B44.\u1BAA-≮≠; [V5]; xn--1uf.xn----nmlz65aub; ; ; # ᭄.᮪-≮≠
+\u1BF3Ⴑ\u115F.𑄴Ⅎ; \u1BF3Ⴑ\u115F.𑄴Ⅎ; [V5, V6]; xn--pnd26a55x.xn--f3g7465g; ; ; # ᯳Ⴑ.𑄴Ⅎ
+\u1BF3Ⴑ\u115F.𑄴Ⅎ; ; [V5, V6]; xn--pnd26a55x.xn--f3g7465g; ; ; # ᯳Ⴑ.𑄴Ⅎ
+\u1BF3ⴑ\u115F.𑄴ⅎ; ; [V5, V6]; xn--osd925cvyn.xn--73g3065g; ; ; # ᯳ⴑ.𑄴ⅎ
+\u1BF3Ⴑ\u115F.𑄴ⅎ; ; [V5, V6]; xn--pnd26a55x.xn--73g3065g; ; ; # ᯳Ⴑ.𑄴ⅎ
+xn--pnd26a55x.xn--73g3065g; \u1BF3Ⴑ\u115F.𑄴ⅎ; [V5, V6]; xn--pnd26a55x.xn--73g3065g; ; ; # ᯳Ⴑ.𑄴ⅎ
+xn--osd925cvyn.xn--73g3065g; \u1BF3ⴑ\u115F.𑄴ⅎ; [V5, V6]; xn--osd925cvyn.xn--73g3065g; ; ; # ᯳ⴑ.𑄴ⅎ
+xn--pnd26a55x.xn--f3g7465g; \u1BF3Ⴑ\u115F.𑄴Ⅎ; [V5, V6]; xn--pnd26a55x.xn--f3g7465g; ; ; # ᯳Ⴑ.𑄴Ⅎ
+\u1BF3ⴑ\u115F.𑄴ⅎ; \u1BF3ⴑ\u115F.𑄴ⅎ; [V5, V6]; xn--osd925cvyn.xn--73g3065g; ; ; # ᯳ⴑ.𑄴ⅎ
+\u1BF3Ⴑ\u115F.𑄴ⅎ; \u1BF3Ⴑ\u115F.𑄴ⅎ; [V5, V6]; xn--pnd26a55x.xn--73g3065g; ; ; # ᯳Ⴑ.𑄴ⅎ
+𜉆。Ⴃð´£ð¹¹ë˜¯; 𜉆.á‚£ð´£ð¹¹ë˜¯; [B5, V6]; xn--187g.xn--bnd4785f8r8bdeb; ; ; # .á‚£ð´£ð¹¹ë˜¯
+𜉆。Ⴃð´£ð¹¹á„„ᅪᆪ; 𜉆.á‚£ð´£ð¹¹ë˜¯; [B5, V6]; xn--187g.xn--bnd4785f8r8bdeb; ; ; # .á‚£ð´£ð¹¹ë˜¯
+𜉆。ⴃð´£ð¹¹á„„ᅪᆪ; 𜉆.â´ƒð´£ð¹¹ë˜¯; [B5, V6]; xn--187g.xn--ukjy205b8rscdeb; ; ; # .â´ƒð´£ð¹¹ë˜¯
+𜉆。ⴃð´£ð¹¹ë˜¯; 𜉆.â´ƒð´£ð¹¹ë˜¯; [B5, V6]; xn--187g.xn--ukjy205b8rscdeb; ; ; # .â´ƒð´£ð¹¹ë˜¯
xn--187g.xn--ukjy205b8rscdeb; 𜉆.â´ƒð´£ð¹¹ë˜¯; [B5, V6]; xn--187g.xn--ukjy205b8rscdeb; ; ; # .â´ƒð´£ð¹¹ë˜¯
xn--187g.xn--bnd4785f8r8bdeb; 𜉆.á‚£ð´£ð¹¹ë˜¯; [B5, V6]; xn--187g.xn--bnd4785f8r8bdeb; ; ; # .á‚£ð´£ð¹¹ë˜¯
-ð«€ï½¡â³»ó ™¾ó „·ã…¤; ð«€.⳻󠙾ㅤ; [B1, P1, V6]; xn--pw9c.xn--mkj83l4v899a; ; ; # ð«€.â³»
-ð«€ã€‚â³»ó ™¾ó „·á… ; ð«€.⳻󠙾ᅠ; [B1, P1, V6]; xn--pw9c.xn--psd742lxt32w; ; ; # ð«€.â³»
-xn--pw9c.xn--psd742lxt32w; ð«€.⳻󠙾ᅠ; [B1, V6]; xn--pw9c.xn--psd742lxt32w; ; ; # ð«€.â³»
-xn--pw9c.xn--mkj83l4v899a; ð«€.⳻󠙾ㅤ; [B1, V6]; xn--pw9c.xn--mkj83l4v899a; ; ; # ð«€.â³»
-ޚ⾇.ܞ-ð‹°; ޚ舛.Üž-ð‹°; [B2, B3]; xn--7qb6383d.xn----20c3154q; ; ; # ޚ舛.Üž-ð‹°
-ޚ舛.Üž-ð‹°; ; [B2, B3]; xn--7qb6383d.xn----20c3154q; ; ; # ޚ舛.Üž-ð‹°
-xn--7qb6383d.xn----20c3154q; ޚ舛.Üž-ð‹°; [B2, B3]; xn--7qb6383d.xn----20c3154q; ; ; # ޚ舛.Üž-ð‹°
-Ⴉ猕󹛫≮.︒; Ⴉ猕󹛫≮.︒; [P1, V6]; xn--hnd212gz32d54x5r.xn--y86c; ; ; # Ⴉ猕≮.︒
-Ⴉ猕󹛫≮.︒; Ⴉ猕󹛫≮.︒; [P1, V6]; xn--hnd212gz32d54x5r.xn--y86c; ; ; # Ⴉ猕≮.︒
-Ⴉ猕󹛫≮.。; Ⴉ猕󹛫≮..; [P1, V6, X4_2]; xn--hnd212gz32d54x5r..; [P1, V6, A4_2]; ; # Ⴉ猕≮..
-Ⴉ猕󹛫≮.。; Ⴉ猕󹛫≮..; [P1, V6, X4_2]; xn--hnd212gz32d54x5r..; [P1, V6, A4_2]; ; # Ⴉ猕≮..
-ⴉ猕󹛫≮.。; ⴉ猕󹛫≮..; [P1, V6, X4_2]; xn--gdh892bbz0d5438s..; [P1, V6, A4_2]; ; # ⴉ猕≮..
-ⴉ猕󹛫≮.。; ⴉ猕󹛫≮..; [P1, V6, X4_2]; xn--gdh892bbz0d5438s..; [P1, V6, A4_2]; ; # ⴉ猕≮..
+ð«€ï½¡â³»ó ™¾ó „·\u3164; ð«€.â³»ó ™¾\u3164; [B1, V6]; xn--pw9c.xn--mkj83l4v899a; ; ; # ð«€.â³»
+ð«€ã€‚â³»ó ™¾ó „·\u1160; ð«€.â³»ó ™¾\u1160; [B1, V6]; xn--pw9c.xn--psd742lxt32w; ; ; # ð«€.â³»
+xn--pw9c.xn--psd742lxt32w; ð«€.â³»ó ™¾\u1160; [B1, V6]; xn--pw9c.xn--psd742lxt32w; ; ; # ð«€.â³»
+xn--pw9c.xn--mkj83l4v899a; ð«€.â³»ó ™¾\u3164; [B1, V6]; xn--pw9c.xn--mkj83l4v899a; ; ; # ð«€.â³»
+\u079A⾇.\u071E-ð‹°; \u079A舛.\u071E-ð‹°; [B2, B3]; xn--7qb6383d.xn----20c3154q; ; ; # ޚ舛.Üž-ð‹°
+\u079A舛.\u071E-ð‹°; ; [B2, B3]; xn--7qb6383d.xn----20c3154q; ; ; # ޚ舛.Üž-ð‹°
+xn--7qb6383d.xn----20c3154q; \u079A舛.\u071E-ð‹°; [B2, B3]; xn--7qb6383d.xn----20c3154q; ; ; # ޚ舛.Üž-ð‹°
+Ⴉ猕󹛫≮.︒; Ⴉ猕󹛫≮.︒; [V6]; xn--hnd212gz32d54x5r.xn--y86c; ; ; # Ⴉ猕≮.︒
+Ⴉ猕󹛫<\u0338.︒; Ⴉ猕󹛫≮.︒; [V6]; xn--hnd212gz32d54x5r.xn--y86c; ; ; # Ⴉ猕≮.︒
+Ⴉ猕󹛫≮.。; Ⴉ猕󹛫≮..; [V6, X4_2]; xn--hnd212gz32d54x5r..; [V6, A4_2]; ; # Ⴉ猕≮..
+Ⴉ猕󹛫<\u0338.。; Ⴉ猕󹛫≮..; [V6, X4_2]; xn--hnd212gz32d54x5r..; [V6, A4_2]; ; # Ⴉ猕≮..
+ⴉ猕󹛫<\u0338.。; ⴉ猕󹛫≮..; [V6, X4_2]; xn--gdh892bbz0d5438s..; [V6, A4_2]; ; # ⴉ猕≮..
+ⴉ猕󹛫≮.。; ⴉ猕󹛫≮..; [V6, X4_2]; xn--gdh892bbz0d5438s..; [V6, A4_2]; ; # ⴉ猕≮..
xn--gdh892bbz0d5438s..; ⴉ猕󹛫≮..; [V6, X4_2]; xn--gdh892bbz0d5438s..; [V6, A4_2]; ; # ⴉ猕≮..
xn--hnd212gz32d54x5r..; Ⴉ猕󹛫≮..; [V6, X4_2]; xn--hnd212gz32d54x5r..; [V6, A4_2]; ; # Ⴉ猕≮..
-ⴉ猕󹛫≮.︒; ⴉ猕󹛫≮.︒; [P1, V6]; xn--gdh892bbz0d5438s.xn--y86c; ; ; # ⴉ猕≮.︒
-ⴉ猕󹛫≮.︒; ⴉ猕󹛫≮.︒; [P1, V6]; xn--gdh892bbz0d5438s.xn--y86c; ; ; # ⴉ猕≮.︒
+ⴉ猕󹛫<\u0338.︒; ⴉ猕󹛫≮.︒; [V6]; xn--gdh892bbz0d5438s.xn--y86c; ; ; # ⴉ猕≮.︒
+ⴉ猕󹛫≮.︒; ⴉ猕󹛫≮.︒; [V6]; xn--gdh892bbz0d5438s.xn--y86c; ; ; # ⴉ猕≮.︒
xn--gdh892bbz0d5438s.xn--y86c; ⴉ猕󹛫≮.︒; [V6]; xn--gdh892bbz0d5438s.xn--y86c; ; ; # ⴉ猕≮.︒
xn--hnd212gz32d54x5r.xn--y86c; Ⴉ猕󹛫≮.︒; [V6]; xn--hnd212gz32d54x5r.xn--y86c; ; ; # Ⴉ猕≮.︒
-ðŸ®ï½¡Ø«é³³ß¢ó …‰; ðŸ®.ث鳳ߢ; [B1, B2]; xn--8m8h.xn--qgb29f6z90a; ; ; # ðŸ®.ث鳳ߢ
-ðŸ®ã€‚ث鳳ߢ󠅉; ðŸ®.ث鳳ߢ; [B1, B2]; xn--8m8h.xn--qgb29f6z90a; ; ; # ðŸ®.ث鳳ߢ
-xn--8m8h.xn--qgb29f6z90a; ðŸ®.ث鳳ߢ; [B1, B2]; xn--8m8h.xn--qgb29f6z90a; ; ; # ðŸ®.ث鳳ߢ
-â€ð¹¶ã€‚ß; â€ð¹¶.ß; [B1, C2]; xn--1ug9105g.xn--zca; ; xn--uo0d.ss; [B1] # ð¹¶.ß
-â€ð¹¶ã€‚SS; â€ð¹¶.ss; [B1, C2]; xn--1ug9105g.ss; ; xn--uo0d.ss; [B1] # ð¹¶.ss
-â€ð¹¶ã€‚ss; â€ð¹¶.ss; [B1, C2]; xn--1ug9105g.ss; ; xn--uo0d.ss; [B1] # ð¹¶.ss
-â€ð¹¶ã€‚Ss; â€ð¹¶.ss; [B1, C2]; xn--1ug9105g.ss; ; xn--uo0d.ss; [B1] # ð¹¶.ss
+ðŸ®ï½¡\u062Bé³³\u07E2ó …‰; ðŸ®.\u062Bé³³\u07E2; [B1, B2]; xn--8m8h.xn--qgb29f6z90a; ; ; # ðŸ®.ث鳳ߢ
+ðŸ®ã€‚\u062Bé³³\u07E2ó …‰; ðŸ®.\u062Bé³³\u07E2; [B1, B2]; xn--8m8h.xn--qgb29f6z90a; ; ; # ðŸ®.ث鳳ߢ
+xn--8m8h.xn--qgb29f6z90a; ðŸ®.\u062Bé³³\u07E2; [B1, B2]; xn--8m8h.xn--qgb29f6z90a; ; ; # ðŸ®.ث鳳ߢ
+\u200Dð¹¶ã€‚ß; \u200Dð¹¶.ß; [B1, C2]; xn--1ug9105g.xn--zca; ; xn--uo0d.ss; [B1] # ð¹¶.ß
+\u200Dð¹¶ã€‚SS; \u200Dð¹¶.ss; [B1, C2]; xn--1ug9105g.ss; ; xn--uo0d.ss; [B1] # ð¹¶.ss
+\u200Dð¹¶ã€‚ss; \u200Dð¹¶.ss; [B1, C2]; xn--1ug9105g.ss; ; xn--uo0d.ss; [B1] # ð¹¶.ss
+\u200Dð¹¶ã€‚Ss; \u200Dð¹¶.ss; [B1, C2]; xn--1ug9105g.ss; ; xn--uo0d.ss; [B1] # ð¹¶.ss
xn--uo0d.ss; ð¹¶.ss; [B1]; xn--uo0d.ss; ; ; # ð¹¶.ss
-xn--1ug9105g.ss; â€ð¹¶.ss; [B1, C2]; xn--1ug9105g.ss; ; ; # ð¹¶.ss
-xn--1ug9105g.xn--zca; â€ð¹¶.ß; [B1, C2]; xn--1ug9105g.xn--zca; ; ; # ð¹¶.ß
-Å둄-.‌; å둄-.‌; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
-Å둄-.‌; å둄-.‌; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
-Å둄-.‌; å둄-.‌; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
-Å둄-.‌; å둄-.‌; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
-å둄-.‌; å둄-.‌; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
-å둄-.‌; ; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
+xn--1ug9105g.ss; \u200Dð¹¶.ss; [B1, C2]; xn--1ug9105g.ss; ; ; # ð¹¶.ss
+xn--1ug9105g.xn--zca; \u200Dð¹¶.ß; [B1, C2]; xn--1ug9105g.xn--zca; ; ; # ð¹¶.ß
+Å둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
+A\u030A둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
+Å둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
+A\u030A둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
+a\u030A둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
+å둄-.\u200C; ; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
xn----1fa1788k.; å둄-.; [V3]; xn----1fa1788k.; ; ; # å둄-.
-xn----1fa1788k.xn--0ug; å둄-.‌; [C1, V3]; xn----1fa1788k.xn--0ug; ; ; # å둄-.
-å둄-.‌; å둄-.‌; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
-å둄-.‌; å둄-.‌; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
-゙򬎑ᷗ𞤀.򱲢-॓; ゙򬎑ᷗ𞤢.򱲢-॓; [B1, B6, P1, V5, V6]; xn--veg121fwg63altj9d.xn----eyd92688s; ; ; # ゙ᷗ𞤢.-॓
-゙򬎑ᷗ𞤢.򱲢-॓; ; [B1, B6, P1, V5, V6]; xn--veg121fwg63altj9d.xn----eyd92688s; ; ; # ゙ᷗ𞤢.-॓
-xn--veg121fwg63altj9d.xn----eyd92688s; ゙򬎑ᷗ𞤢.򱲢-॓; [B1, B6, V5, V6]; xn--veg121fwg63altj9d.xn----eyd92688s; ; ; # ゙ᷗ𞤢.-॓
-Ï‚.ßñ´±„Û⵿; ; [B5, B6, P1, V6]; xn--3xa.xn--zca281az71b8x73m; ; xn--4xa.xn--ss-y8d4760biv60n; # Ï‚.ß⵿
-Σ.SSñ´±„Û⵿; σ.ssñ´±„Û⵿; [B5, B6, P1, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿
-σ.ssñ´±„Û⵿; ; [B5, B6, P1, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿
-Σ.ssñ´±„Û⵿; σ.ssñ´±„Û⵿; [B5, B6, P1, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿
-xn--4xa.xn--ss-y8d4760biv60n; σ.ssñ´±„Û⵿; [B5, B6, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿
-Σ.ßñ´±„Û⵿; σ.ßñ´±„Û⵿; [B5, B6, P1, V6]; xn--4xa.xn--zca281az71b8x73m; ; xn--4xa.xn--ss-y8d4760biv60n; # σ.ß⵿
-σ.ßñ´±„Û⵿; ; [B5, B6, P1, V6]; xn--4xa.xn--zca281az71b8x73m; ; xn--4xa.xn--ss-y8d4760biv60n; # σ.ß⵿
-xn--4xa.xn--zca281az71b8x73m; σ.ßñ´±„Û⵿; [B5, B6, V6]; xn--4xa.xn--zca281az71b8x73m; ; ; # σ.ß⵿
-xn--3xa.xn--zca281az71b8x73m; Ï‚.ßñ´±„Û⵿; [B5, B6, V6]; xn--3xa.xn--zca281az71b8x73m; ; ; # Ï‚.ß⵿
-ꡀ𞀟。٫֙; ꡀ𞀟.٫֙; [B1]; xn--8b9a1720d.xn--kcb33b; ; ; # ꡀ𞀟.٫֙
-ꡀ𞀟。٫֙; ꡀ𞀟.٫֙; [B1]; xn--8b9a1720d.xn--kcb33b; ; ; # ꡀ𞀟.٫֙
-xn--8b9a1720d.xn--kcb33b; ꡀ𞀟.٫֙; [B1]; xn--8b9a1720d.xn--kcb33b; ; ; # ꡀ𞀟.٫֙
-òˆ›‰â€Œà¢©ï½¡â§…ñ˜˜¡-ð­¡; òˆ›‰â€Œà¢©.⧅ñ˜˜¡-ð­¡; [B1, B5, B6, C1, P1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; xn--yyb56242i.xn----zir1232guu71b; [B1, B5, B6, P1, V6] # ࢩ.⧅-ð­¡
-òˆ›‰â€Œà¢©ã€‚⧅ñ˜˜¡-ð­¡; òˆ›‰â€Œà¢©.⧅ñ˜˜¡-ð­¡; [B1, B5, B6, C1, P1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; xn--yyb56242i.xn----zir1232guu71b; [B1, B5, B6, P1, V6] # ࢩ.⧅-ð­¡
-xn--yyb56242i.xn----zir1232guu71b; òˆ›‰à¢©.⧅ñ˜˜¡-ð­¡; [B1, B5, B6, V6]; xn--yyb56242i.xn----zir1232guu71b; ; ; # ࢩ.⧅-ð­¡
-xn--yyb780jll63m.xn----zir1232guu71b; òˆ›‰â€Œà¢©.⧅ñ˜˜¡-ð­¡; [B1, B5, B6, C1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; ; # ࢩ.⧅-ð­¡
-룱â€ð°¨â€Œã€‚ð¨–︒; 룱â€ð°¨â€Œ.ð¨–︒; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [P1, V5, V6] # 룱ð°¨.ð¨–︒
-룱â€ð°¨â€Œã€‚ð¨–︒; 룱â€ð°¨â€Œ.ð¨–︒; [C1, C2, P1, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [P1, V5, V6] # 룱ð°¨.ð¨–︒
-룱â€ð°¨â€Œã€‚ð¨–。; 룱â€ð°¨â€Œ.ð¨–.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [V5] # 룱ð°¨.ð¨–.
-룱â€ð°¨â€Œã€‚ð¨–。; 룱â€ð°¨â€Œ.ð¨–.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [V5] # 룱ð°¨.ð¨–.
+xn----1fa1788k.xn--0ug; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; ; # å둄-.
+a\u030A둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
+å둄-.\u200C; å둄-.\u200C; [C1, V3]; xn----1fa1788k.xn--0ug; ; xn----1fa1788k.; [V3] # å둄-.
+\u3099򬎑\u1DD7𞤀.򱲢-\u0953; \u3099򬎑\u1DD7𞤢.򱲢-\u0953; [B1, B6, V5, V6]; xn--veg121fwg63altj9d.xn----eyd92688s; ; ; # ゙ᷗ𞤢.-॓
+\u3099򬎑\u1DD7𞤢.򱲢-\u0953; ; [B1, B6, V5, V6]; xn--veg121fwg63altj9d.xn----eyd92688s; ; ; # ゙ᷗ𞤢.-॓
+xn--veg121fwg63altj9d.xn----eyd92688s; \u3099򬎑\u1DD7𞤢.򱲢-\u0953; [B1, B6, V5, V6]; xn--veg121fwg63altj9d.xn----eyd92688s; ; ; # ゙ᷗ𞤢.-॓
+ς.ß񴱄\u06DD\u2D7F; ; [B5, B6, V6]; xn--3xa.xn--zca281az71b8x73m; ; xn--4xa.xn--ss-y8d4760biv60n; # ς.ß⵿
+Σ.SS񴱄\u06DD\u2D7F; σ.ss񴱄\u06DD\u2D7F; [B5, B6, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿
+σ.ss񴱄\u06DD\u2D7F; ; [B5, B6, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿
+Σ.ss񴱄\u06DD\u2D7F; σ.ss񴱄\u06DD\u2D7F; [B5, B6, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿
+xn--4xa.xn--ss-y8d4760biv60n; σ.ss񴱄\u06DD\u2D7F; [B5, B6, V6]; xn--4xa.xn--ss-y8d4760biv60n; ; ; # σ.ss⵿
+Σ.ß񴱄\u06DD\u2D7F; σ.ß񴱄\u06DD\u2D7F; [B5, B6, V6]; xn--4xa.xn--zca281az71b8x73m; ; xn--4xa.xn--ss-y8d4760biv60n; # σ.ß⵿
+σ.ß񴱄\u06DD\u2D7F; ; [B5, B6, V6]; xn--4xa.xn--zca281az71b8x73m; ; xn--4xa.xn--ss-y8d4760biv60n; # σ.ß⵿
+xn--4xa.xn--zca281az71b8x73m; σ.ß񴱄\u06DD\u2D7F; [B5, B6, V6]; xn--4xa.xn--zca281az71b8x73m; ; ; # σ.ß⵿
+xn--3xa.xn--zca281az71b8x73m; ς.ß񴱄\u06DD\u2D7F; [B5, B6, V6]; xn--3xa.xn--zca281az71b8x73m; ; ; # ς.ß⵿
+ꡀ𞀟。\u066B\u0599; ꡀ𞀟.\u066B\u0599; [B1]; xn--8b9a1720d.xn--kcb33b; ; ; # ꡀ𞀟.٫֙
+ꡀ𞀟。\u066B\u0599; ꡀ𞀟.\u066B\u0599; [B1]; xn--8b9a1720d.xn--kcb33b; ; ; # ꡀ𞀟.٫֙
+xn--8b9a1720d.xn--kcb33b; ꡀ𞀟.\u066B\u0599; [B1]; xn--8b9a1720d.xn--kcb33b; ; ; # ꡀ𞀟.٫֙
+òˆ›‰\u200C\u08A9。⧅ñ˜˜¡-ð­¡; òˆ›‰\u200C\u08A9.⧅ñ˜˜¡-ð­¡; [B1, B5, B6, C1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; xn--yyb56242i.xn----zir1232guu71b; [B1, B5, B6, V6] # ࢩ.⧅-ð­¡
+òˆ›‰\u200C\u08A9。⧅ñ˜˜¡-ð­¡; òˆ›‰\u200C\u08A9.⧅ñ˜˜¡-ð­¡; [B1, B5, B6, C1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; xn--yyb56242i.xn----zir1232guu71b; [B1, B5, B6, V6] # ࢩ.⧅-ð­¡
+xn--yyb56242i.xn----zir1232guu71b; òˆ›‰\u08A9.⧅ñ˜˜¡-ð­¡; [B1, B5, B6, V6]; xn--yyb56242i.xn----zir1232guu71b; ; ; # ࢩ.⧅-ð­¡
+xn--yyb780jll63m.xn----zir1232guu71b; òˆ›‰\u200C\u08A9.⧅ñ˜˜¡-ð­¡; [B1, B5, B6, C1, V6]; xn--yyb780jll63m.xn----zir1232guu71b; ; ; # ࢩ.⧅-ð­¡
+룱\u200Dð°¨\u200C。ð¨–︒; 룱\u200Dð°¨\u200C.ð¨–︒; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [V5, V6] # 룱ð°¨.ð¨–︒
+룱\u200Dð°¨\u200C。ð¨–︒; 룱\u200Dð°¨\u200C.ð¨–︒; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; xn--ct2b0738h.xn--y86cl899a; [V5, V6] # 룱ð°¨.ð¨–︒
+룱\u200Dð°¨\u200C。ð¨–。; 룱\u200Dð°¨\u200C.ð¨–.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [V5] # 룱ð°¨.ð¨–.
+룱\u200Dð°¨\u200C。ð¨–。; 룱\u200Dð°¨\u200C.ð¨–.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; xn--ct2b0738h.xn--772h.; [V5] # 룱ð°¨.ð¨–.
xn--ct2b0738h.xn--772h.; 룱ð°¨.ð¨–.; [V5]; xn--ct2b0738h.xn--772h.; ; ; # 룱ð°¨.ð¨–.
-xn--0ugb3358ili2v.xn--772h.; 룱â€ð°¨â€Œ.ð¨–.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; ; # 룱ð°¨.ð¨–.
+xn--0ugb3358ili2v.xn--772h.; 룱\u200Dð°¨\u200C.ð¨–.; [C1, C2, V5]; xn--0ugb3358ili2v.xn--772h.; ; ; # 룱ð°¨.ð¨–.
xn--ct2b0738h.xn--y86cl899a; 룱ð°¨.ð¨–︒; [V5, V6]; xn--ct2b0738h.xn--y86cl899a; ; ; # 룱ð°¨.ð¨–︒
-xn--0ugb3358ili2v.xn--y86cl899a; 룱â€ð°¨â€Œ.ð¨–︒; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; ; # 룱ð°¨.ð¨–︒
-🄄.᳜⒈ß; 🄄.᳜⒈ß; [P1, V5, V6]; xn--x07h.xn--zca344lmif; ; xn--x07h.xn--ss-k1r094b; # 🄄.᳜⒈ß
-3,.᳜1.ß; ; [P1, V5, V6]; 3,.xn--1-43l.xn--zca; ; 3,.xn--1-43l.ss; # 3,.᳜1.ß
-3,.᳜1.SS; 3,.᳜1.ss; [P1, V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss
-3,.᳜1.ss; ; [P1, V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss
-3,.᳜1.Ss; 3,.᳜1.ss; [P1, V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss
-3,.xn--1-43l.ss; 3,.᳜1.ss; [P1, V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss
-3,.xn--1-43l.xn--zca; 3,.᳜1.ß; [P1, V5, V6]; 3,.xn--1-43l.xn--zca; ; ; # 3,.᳜1.ß
-🄄.᳜⒈SS; 🄄.᳜⒈ss; [P1, V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss
-🄄.᳜⒈ss; 🄄.᳜⒈ss; [P1, V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss
-🄄.᳜⒈Ss; 🄄.᳜⒈ss; [P1, V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss
-xn--x07h.xn--ss-k1r094b; 🄄.᳜⒈ss; [V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss
-xn--x07h.xn--zca344lmif; 🄄.᳜⒈ß; [V5, V6]; xn--x07h.xn--zca344lmif; ; ; # 🄄.᳜⒈ß
-ñ‡Œâµ¿ï½¡ðž¼“ò¡„¨ð‘º; ñ‡Œâµ¿.𞼓ò¡„¨ð‘º; [B2, B3, P1, V6]; xn--eoj16016a.xn--0v1d3848a3lr0d; ; ; # ⵿.ð‘º
-ñ‡Œâµ¿ã€‚𞼓ò¡„¨ð‘º; ñ‡Œâµ¿.𞼓ò¡„¨ð‘º; [B2, B3, P1, V6]; xn--eoj16016a.xn--0v1d3848a3lr0d; ; ; # ⵿.ð‘º
-xn--eoj16016a.xn--0v1d3848a3lr0d; ñ‡Œâµ¿.𞼓ò¡„¨ð‘º; [B2, B3, V6]; xn--eoj16016a.xn--0v1d3848a3lr0d; ; ; # ⵿.ð‘º
-်᷽à¥ï¼Žâ‰ â€ã‡›; ်à¥á·½.≠â€ã‡›; [C2, P1, V5, V6]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [P1, V5, V6] # ်à¥á·½.≠㇛
-်à¥á·½ï¼Žâ‰ â€ã‡›; ်à¥á·½.≠â€ã‡›; [C2, P1, V5, V6]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [P1, V5, V6] # ်à¥á·½.≠㇛
-်à¥á·½ï¼Ž≠â€ã‡›; ်à¥á·½.≠â€ã‡›; [C2, P1, V5, V6]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [P1, V5, V6] # ်à¥á·½.≠㇛
-်à¥á·½.≠â€ã‡›; ; [C2, P1, V5, V6]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [P1, V5, V6] # ်à¥á·½.≠㇛
-်à¥á·½.≠â€ã‡›; ်à¥á·½.≠â€ã‡›; [C2, P1, V5, V6]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [P1, V5, V6] # ်à¥á·½.≠㇛
-xn--n3b956a9zm.xn--1ch912d; ်à¥á·½.≠㇛; [V5, V6]; xn--n3b956a9zm.xn--1ch912d; ; ; # ်à¥á·½.≠㇛
-xn--n3b956a9zm.xn--1ug63gz5w; ်à¥á·½.≠â€ã‡›; [C2, V5, V6]; xn--n3b956a9zm.xn--1ug63gz5w; ; ; # ်à¥á·½.≠㇛
-á‚¡ð‹¨å¨¤.â€Ì¼Ù¢ð‘–¿; ; [B1, C2, P1, V6]; xn--8md2578ag21g.xn--9ta62ngt6aou8t; ; xn--8md2578ag21g.xn--9ta62nrv36a; [B1, P1, V5, V6] # á‚¡ð‹¨å¨¤.̼٢𑖿
-â´ð‹¨å¨¤.â€Ì¼Ù¢ð‘–¿; ; [B1, C2]; xn--skjw75lg29h.xn--9ta62ngt6aou8t; ; xn--skjw75lg29h.xn--9ta62nrv36a; [B1, V5] # â´ð‹¨å¨¤.̼٢𑖿
-xn--skjw75lg29h.xn--9ta62nrv36a; â´ð‹¨å¨¤.̼٢𑖿; [B1, V5]; xn--skjw75lg29h.xn--9ta62nrv36a; ; ; # â´ð‹¨å¨¤.̼٢𑖿
-xn--skjw75lg29h.xn--9ta62ngt6aou8t; â´ð‹¨å¨¤.â€Ì¼Ù¢ð‘–¿; [B1, C2]; xn--skjw75lg29h.xn--9ta62ngt6aou8t; ; ; # â´ð‹¨å¨¤.̼٢𑖿
-xn--8md2578ag21g.xn--9ta62nrv36a; á‚¡ð‹¨å¨¤.̼٢𑖿; [B1, V5, V6]; xn--8md2578ag21g.xn--9ta62nrv36a; ; ; # á‚¡ð‹¨å¨¤.̼٢𑖿
-xn--8md2578ag21g.xn--9ta62ngt6aou8t; á‚¡ð‹¨å¨¤.â€Ì¼Ù¢ð‘–¿; [B1, C2, V6]; xn--8md2578ag21g.xn--9ta62ngt6aou8t; ; ; # á‚¡ð‹¨å¨¤.̼٢𑖿
-🄀Ⴄ٩ࠠ。⒈ྶß; 🄀Ⴄ٩ࠠ.⒈ྶß; [B1, P1, V6]; xn--iib29f26o6n43c.xn--zca117e3vp; ; xn--iib29f26o6n43c.xn--ss-1sj588o; # 🄀Ⴄ٩ࠠ.⒈ྶß
-0.Ⴄ٩ࠠ。1.ྶß; 0.Ⴄ٩ࠠ.1.ྶß; [B1, B5, B6, P1, V5, V6]; 0.xn--iib29f26o.1.xn--zca117e; ; 0.xn--iib29f26o.1.xn--ss-1sj; # 0.Ⴄ٩ࠠ.1.ྶß
-0.ⴄ٩ࠠ。1.ྶß; 0.ⴄ٩ࠠ.1.ྶß; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--zca117e; ; 0.xn--iib29fp25e.1.xn--ss-1sj; # 0.ⴄ٩ࠠ.1.ྶß
-0.Ⴄ٩ࠠ。1.ྶSS; 0.Ⴄ٩ࠠ.1.ྶss; [B1, B5, B6, P1, V5, V6]; 0.xn--iib29f26o.1.xn--ss-1sj; ; ; # 0.Ⴄ٩ࠠ.1.ྶss
-0.ⴄ٩ࠠ。1.ྶss; 0.ⴄ٩ࠠ.1.ྶss; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--ss-1sj; ; ; # 0.ⴄ٩ࠠ.1.ྶss
-0.Ⴄ٩ࠠ。1.ྶSs; 0.Ⴄ٩ࠠ.1.ྶss; [B1, B5, B6, P1, V5, V6]; 0.xn--iib29f26o.1.xn--ss-1sj; ; ; # 0.Ⴄ٩ࠠ.1.ྶss
-0.xn--iib29f26o.1.xn--ss-1sj; 0.Ⴄ٩ࠠ.1.ྶss; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--ss-1sj; ; ; # 0.Ⴄ٩ࠠ.1.ྶss
-0.xn--iib29fp25e.1.xn--ss-1sj; 0.ⴄ٩ࠠ.1.ྶss; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--ss-1sj; ; ; # 0.ⴄ٩ࠠ.1.ྶss
-0.xn--iib29fp25e.1.xn--zca117e; 0.ⴄ٩ࠠ.1.ྶß; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--zca117e; ; ; # 0.ⴄ٩ࠠ.1.ྶß
-0.xn--iib29f26o.1.xn--zca117e; 0.Ⴄ٩ࠠ.1.ྶß; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--zca117e; ; ; # 0.Ⴄ٩ࠠ.1.ྶß
-🄀ⴄ٩ࠠ。⒈ྶß; 🄀ⴄ٩ࠠ.⒈ྶß; [B1, P1, V6]; xn--iib29fp25e0219a.xn--zca117e3vp; ; xn--iib29fp25e0219a.xn--ss-1sj588o; # 🄀ⴄ٩ࠠ.⒈ྶß
-🄀Ⴄ٩ࠠ。⒈ྶSS; 🄀Ⴄ٩ࠠ.⒈ྶss; [B1, P1, V6]; xn--iib29f26o6n43c.xn--ss-1sj588o; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶss
-🄀ⴄ٩ࠠ。⒈ྶss; 🄀ⴄ٩ࠠ.⒈ྶss; [B1, P1, V6]; xn--iib29fp25e0219a.xn--ss-1sj588o; ; ; # 🄀ⴄ٩ࠠ.⒈ྶss
-🄀Ⴄ٩ࠠ。⒈ྶSs; 🄀Ⴄ٩ࠠ.⒈ྶss; [B1, P1, V6]; xn--iib29f26o6n43c.xn--ss-1sj588o; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶss
-xn--iib29f26o6n43c.xn--ss-1sj588o; 🄀Ⴄ٩ࠠ.⒈ྶss; [B1, V6]; xn--iib29f26o6n43c.xn--ss-1sj588o; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶss
-xn--iib29fp25e0219a.xn--ss-1sj588o; 🄀ⴄ٩ࠠ.⒈ྶss; [B1, V6]; xn--iib29fp25e0219a.xn--ss-1sj588o; ; ; # 🄀ⴄ٩ࠠ.⒈ྶss
-xn--iib29fp25e0219a.xn--zca117e3vp; 🄀ⴄ٩ࠠ.⒈ྶß; [B1, V6]; xn--iib29fp25e0219a.xn--zca117e3vp; ; ; # 🄀ⴄ٩ࠠ.⒈ྶß
-xn--iib29f26o6n43c.xn--zca117e3vp; 🄀Ⴄ٩ࠠ.⒈ྶß; [B1, V6]; xn--iib29f26o6n43c.xn--zca117e3vp; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶß
-≠.‌-٫; ; [B1, C1, P1, V6]; xn--1ch.xn----vqc597q; ; xn--1ch.xn----vqc; [B1, P1, V3, V6] # ≠.-٫
-≠.‌-٫; ≠.‌-٫; [B1, C1, P1, V6]; xn--1ch.xn----vqc597q; ; xn--1ch.xn----vqc; [B1, P1, V3, V6] # ≠.-٫
-xn--1ch.xn----vqc; ≠.-٫; [B1, V3, V6]; xn--1ch.xn----vqc; ; ; # ≠.-٫
-xn--1ch.xn----vqc597q; ≠.‌-٫; [B1, C1, V6]; xn--1ch.xn----vqc597q; ; ; # ≠.-٫
-٠۱。󠳶ðž Ù¥; Ù Û±.󠳶ðž Ù¥; [B1, P1, V6]; xn--8hb40a.xn--eib7967vner3e; ; ; # Ù Û±.ðž Ù¥
-٠۱。󠳶ðž Ù¥; Ù Û±.󠳶ðž Ù¥; [B1, P1, V6]; xn--8hb40a.xn--eib7967vner3e; ; ; # Ù Û±.ðž Ù¥
-xn--8hb40a.xn--eib7967vner3e; Ù Û±.󠳶ðž Ù¥; [B1, V6]; xn--8hb40a.xn--eib7967vner3e; ; ; # Ù Û±.ðž Ù¥
-‌٣⒖。󱅉𽷛᯳; ‌٣⒖.󱅉𽷛᯳; [B1, C1, P1, V6]; xn--cib152kwgd.xn--1zf13512buy41d; ; xn--cib675m.xn--1zf13512buy41d; [B1, P1, V6] # ٣⒖.᯳
-‌٣15.。󱅉𽷛᯳; ‌٣15..󱅉𽷛᯳; [B1, C1, P1, V6, X4_2]; xn--15-gyd983x..xn--1zf13512buy41d; [B1, C1, P1, V6, A4_2]; xn--15-gyd..xn--1zf13512buy41d; [B1, P1, V6, A4_2] # ٣15..᯳
-xn--15-gyd..xn--1zf13512buy41d; ٣15..󱅉𽷛᯳; [B1, V6, X4_2]; xn--15-gyd..xn--1zf13512buy41d; [B1, V6, A4_2]; ; # ٣15..᯳
-xn--15-gyd983x..xn--1zf13512buy41d; ‌٣15..󱅉𽷛᯳; [B1, C1, V6, X4_2]; xn--15-gyd983x..xn--1zf13512buy41d; [B1, C1, V6, A4_2]; ; # ٣15..᯳
-xn--cib675m.xn--1zf13512buy41d; ٣⒖.󱅉𽷛᯳; [B1, V6]; xn--cib675m.xn--1zf13512buy41d; ; ; # ٣⒖.᯳
-xn--cib152kwgd.xn--1zf13512buy41d; ‌٣⒖.󱅉𽷛᯳; [B1, C1, V6]; xn--cib152kwgd.xn--1zf13512buy41d; ; ; # ٣⒖.᯳
-᯳.-逋񳦭󙙮; ; [P1, V3, V5, V6]; xn--1zf.xn----483d46987byr50b; ; ; # ᯳.-逋
-xn--1zf.xn----483d46987byr50b; ᯳.-逋񳦭󙙮; [V3, V5, V6]; xn--1zf.xn----483d46987byr50b; ; ; # ᯳.-逋
-ݖ。ㅤâ€Ï‚; Ý–.ã…¤â€Ï‚; [C2, P1, V6]; xn--9ob.xn--3xa995lq2l; ; xn--9ob.xn--4xa574u; [P1, V6] # Ý–.Ï‚
-ݖ。ᅠâ€Ï‚; Ý–.á… â€Ï‚; [C2, P1, V6]; xn--9ob.xn--3xa580ebol; ; xn--9ob.xn--4xa380e; [P1, V6] # Ý–.Ï‚
-ݖ。ᅠâ€Î£; Ý–.á… â€Ïƒ; [C2, P1, V6]; xn--9ob.xn--4xa380ebol; ; xn--9ob.xn--4xa380e; [P1, V6] # Ý–.σ
-ݖ。ᅠâ€Ïƒ; Ý–.á… â€Ïƒ; [C2, P1, V6]; xn--9ob.xn--4xa380ebol; ; xn--9ob.xn--4xa380e; [P1, V6] # Ý–.σ
-xn--9ob.xn--4xa380e; ݖ.ᅠσ; [V6]; xn--9ob.xn--4xa380e; ; ; # ݖ.σ
-xn--9ob.xn--4xa380ebol; Ý–.á… â€Ïƒ; [C2, V6]; xn--9ob.xn--4xa380ebol; ; ; # Ý–.σ
-xn--9ob.xn--3xa580ebol; Ý–.á… â€Ï‚; [C2, V6]; xn--9ob.xn--3xa580ebol; ; ; # Ý–.Ï‚
-ݖ。ㅤâ€Î£; Ý–.ã…¤â€Ïƒ; [C2, P1, V6]; xn--9ob.xn--4xa795lq2l; ; xn--9ob.xn--4xa574u; [P1, V6] # Ý–.σ
-ݖ。ㅤâ€Ïƒ; Ý–.ã…¤â€Ïƒ; [C2, P1, V6]; xn--9ob.xn--4xa795lq2l; ; xn--9ob.xn--4xa574u; [P1, V6] # Ý–.σ
-xn--9ob.xn--4xa574u; ݖ.ㅤσ; [V6]; xn--9ob.xn--4xa574u; ; ; # ݖ.σ
-xn--9ob.xn--4xa795lq2l; Ý–.ã…¤â€Ïƒ; [C2, V6]; xn--9ob.xn--4xa795lq2l; ; ; # Ý–.σ
-xn--9ob.xn--3xa995lq2l; Ý–.ã…¤â€Ï‚; [C2, V6]; xn--9ob.xn--3xa995lq2l; ; ; # Ý–.Ï‚
-ᡆႣ。󞢧̕â€â€; ᡆႣ.󞢧̕â€â€; [C2, P1, V6]; xn--bnd320b.xn--5sa649la993427a; ; xn--bnd320b.xn--5sa98523p; [P1, V6] # ᡆႣ.Ì•
-ᡆႣ。󞢧̕â€â€; ᡆႣ.󞢧̕â€â€; [C2, P1, V6]; xn--bnd320b.xn--5sa649la993427a; ; xn--bnd320b.xn--5sa98523p; [P1, V6] # ᡆႣ.Ì•
-ᡆⴃ。󞢧̕â€â€; ᡆⴃ.󞢧̕â€â€; [C2, P1, V6]; xn--57e237h.xn--5sa649la993427a; ; xn--57e237h.xn--5sa98523p; [P1, V6] # ᡆⴃ.Ì•
-xn--57e237h.xn--5sa98523p; ᡆⴃ.󞢧̕; [V6]; xn--57e237h.xn--5sa98523p; ; ; # ᡆⴃ.̕
-xn--57e237h.xn--5sa649la993427a; ᡆⴃ.󞢧̕â€â€; [C2, V6]; xn--57e237h.xn--5sa649la993427a; ; ; # ᡆⴃ.Ì•
-xn--bnd320b.xn--5sa98523p; ᡆႣ.󞢧̕; [V6]; xn--bnd320b.xn--5sa98523p; ; ; # ᡆႣ.̕
-xn--bnd320b.xn--5sa649la993427a; ᡆႣ.󞢧̕â€â€; [C2, V6]; xn--bnd320b.xn--5sa649la993427a; ; ; # ᡆႣ.Ì•
-ᡆⴃ。󞢧̕â€â€; ᡆⴃ.󞢧̕â€â€; [C2, P1, V6]; xn--57e237h.xn--5sa649la993427a; ; xn--57e237h.xn--5sa98523p; [P1, V6] # ᡆⴃ.Ì•
-ã­„â€à¡ð‘šµï¼ŽÏ‚ð®®â€Œâ€; ã­„â€à¡ð‘šµ.Ï‚ð®®â€Œâ€; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--3xa895lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.Ï‚ð®®
-ã­„â€à¡ð‘šµ.Ï‚ð®®â€Œâ€; ; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--3xa895lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.Ï‚ð®®
-ã­„â€à¡ð‘šµ.Σð®®â€Œâ€; ã­„â€à¡ð‘šµ.σð®®â€Œâ€; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.σð®®
-ã­„â€à¡ð‘šµ.σð®®â€Œâ€; ; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.σð®®
-xn--ewb302xhu1l.xn--4xa0426k; ã­„à¡ð‘šµ.σð®®; [B5, B6]; xn--ewb302xhu1l.xn--4xa0426k; ; ; # ã­„à¡ð‘šµ.σð®®
-xn--ewb962jfitku4r.xn--4xa695lda6932v; ã­„â€à¡ð‘šµ.σð®®â€Œâ€; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; ; # ã­„à¡ð‘šµ.σð®®
-xn--ewb962jfitku4r.xn--3xa895lda6932v; ã­„â€à¡ð‘šµ.Ï‚ð®®â€Œâ€; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--3xa895lda6932v; ; ; # ã­„à¡ð‘šµ.Ï‚ð®®
-ã­„â€à¡ð‘šµï¼ŽÎ£ð®®â€Œâ€; ã­„â€à¡ð‘šµ.σð®®â€Œâ€; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.σð®®
-ã­„â€à¡ð‘šµï¼ŽÏƒð®®â€Œâ€; ã­„â€à¡ð‘šµ.σð®®â€Œâ€; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.σð®®
-឵。𞯸ꡀ🄋; ឵.𞯸ꡀ🄋; [B1, B2, B3, B6, P1, V5, V6]; xn--03e.xn--8b9ar252dngd; ; ; # .ꡀ🄋
-xn--03e.xn--8b9ar252dngd; ឵.𞯸ꡀ🄋; [B1, B2, B3, B6, V5, V6]; xn--03e.xn--8b9ar252dngd; ; ; # .ꡀ🄋
-óªºæš‘.⾑٨; óªºæš‘.襾٨; [B5, B6, P1, V6]; xn--tlvq3513e.xn--hib9228d; ; ; # æš‘.襾٨
-óªºæš‘.襾٨; ; [B5, B6, P1, V6]; xn--tlvq3513e.xn--hib9228d; ; ; # æš‘.襾٨
-xn--tlvq3513e.xn--hib9228d; óªºæš‘.襾٨; [B5, B6, V6]; xn--tlvq3513e.xn--hib9228d; ; ; # æš‘.襾٨
-󠄚≯ꡢ。࢑᷿; ≯ꡢ.࢑᷿; [B1, P1, V6]; xn--hdh7783c.xn--9xb680i; ; ; # ≯ꡢ.᷿
-󠄚≯ꡢ。࢑᷿; ≯ꡢ.࢑᷿; [B1, P1, V6]; xn--hdh7783c.xn--9xb680i; ; ; # ≯ꡢ.᷿
-xn--hdh7783c.xn--9xb680i; ≯ꡢ.࢑᷿; [B1, V6]; xn--hdh7783c.xn--9xb680i; ; ; # ≯ꡢ.᷿
-ï·ƒð®±à­ð¨¿.ó§¤á‚·; كممð®±à­ð¨¿.ó§¤á‚·; [B2, B3, P1, V6]; xn--fhbea662czx68a2tju.xn--vnd55511o; ; ; # كممð®±à­ð¨¿.á‚·
-كممð®±à­ð¨¿.ó§¤á‚·; ; [B2, B3, P1, V6]; xn--fhbea662czx68a2tju.xn--vnd55511o; ; ; # كممð®±à­ð¨¿.á‚·
-كممð®±à­ð¨¿.ó§¤â´—; ; [B2, B3, P1, V6]; xn--fhbea662czx68a2tju.xn--fljz2846h; ; ; # كممð®±à­ð¨¿.â´—
-xn--fhbea662czx68a2tju.xn--fljz2846h; كممð®±à­ð¨¿.ó§¤â´—; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--fljz2846h; ; ; # كممð®±à­ð¨¿.â´—
-xn--fhbea662czx68a2tju.xn--vnd55511o; كممð®±à­ð¨¿.ó§¤á‚·; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--vnd55511o; ; ; # كممð®±à­ð¨¿.á‚·
-ï·ƒð®±à­ð¨¿.ó§¤â´—; كممð®±à­ð¨¿.ó§¤â´—; [B2, B3, P1, V6]; xn--fhbea662czx68a2tju.xn--fljz2846h; ; ; # كممð®±à­ð¨¿.â´—
-𞀨。᭄򡛨𞎇; 𞀨.᭄򡛨𞎇; [P1, V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄
-𞀨。᭄򡛨𞎇; 𞀨.᭄򡛨𞎇; [P1, V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄
-xn--mi4h.xn--1uf6843smg20c; 𞀨.᭄򡛨𞎇; [V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄
-󠣼‌.ðº°â€Œá¡Ÿ; 󠣼‌.ðº°â€Œá¡Ÿ; [B1, B2, B3, C1, P1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; xn--q046e.xn--v8e7227j; [B1, B2, B3, P1, V6] # .ðº°á¡Ÿ
-󠣼‌.ðº°â€Œá¡Ÿ; ; [B1, B2, B3, C1, P1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; xn--q046e.xn--v8e7227j; [B1, B2, B3, P1, V6] # .ðº°á¡Ÿ
+xn--0ugb3358ili2v.xn--y86cl899a; 룱\u200Dð°¨\u200C.ð¨–︒; [C1, C2, V5, V6]; xn--0ugb3358ili2v.xn--y86cl899a; ; ; # 룱ð°¨.ð¨–︒
+🄄.\u1CDC⒈ß; 🄄.\u1CDC⒈ß; [V5, V6]; xn--x07h.xn--zca344lmif; ; xn--x07h.xn--ss-k1r094b; # 🄄.᳜⒈ß
+3,.\u1CDC1.ß; ; [V5, V6]; 3,.xn--1-43l.xn--zca; ; 3,.xn--1-43l.ss; # 3,.᳜1.ß
+3,.\u1CDC1.SS; 3,.\u1CDC1.ss; [V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss
+3,.\u1CDC1.ss; ; [V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss
+3,.\u1CDC1.Ss; 3,.\u1CDC1.ss; [V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss
+3,.xn--1-43l.ss; 3,.\u1CDC1.ss; [V5, V6]; 3,.xn--1-43l.ss; ; ; # 3,.᳜1.ss
+3,.xn--1-43l.xn--zca; 3,.\u1CDC1.ß; [V5, V6]; 3,.xn--1-43l.xn--zca; ; ; # 3,.᳜1.ß
+🄄.\u1CDC⒈SS; 🄄.\u1CDC⒈ss; [V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss
+🄄.\u1CDC⒈ss; 🄄.\u1CDC⒈ss; [V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss
+🄄.\u1CDC⒈Ss; 🄄.\u1CDC⒈ss; [V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss
+xn--x07h.xn--ss-k1r094b; 🄄.\u1CDC⒈ss; [V5, V6]; xn--x07h.xn--ss-k1r094b; ; ; # 🄄.᳜⒈ss
+xn--x07h.xn--zca344lmif; 🄄.\u1CDC⒈ß; [V5, V6]; xn--x07h.xn--zca344lmif; ; ; # 🄄.᳜⒈ß
+ñ‡Œ\u2D7F。𞼓ò¡„¨ð‘º; ñ‡Œ\u2D7F.𞼓ò¡„¨ð‘º; [B2, B3, V6]; xn--eoj16016a.xn--0v1d3848a3lr0d; ; ; # ⵿.ð‘º
+ñ‡Œ\u2D7F。𞼓ò¡„¨ð‘º; ñ‡Œ\u2D7F.𞼓ò¡„¨ð‘º; [B2, B3, V6]; xn--eoj16016a.xn--0v1d3848a3lr0d; ; ; # ⵿.ð‘º
+xn--eoj16016a.xn--0v1d3848a3lr0d; ñ‡Œ\u2D7F.𞼓ò¡„¨ð‘º; [B2, B3, V6]; xn--eoj16016a.xn--0v1d3848a3lr0d; ; ; # ⵿.ð‘º
+\u1DFD\u103A\u094D.≠\u200D㇛; \u103A\u094D\u1DFD.≠\u200D㇛; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [V5] # ်à¥á·½.≠㇛
+\u103A\u094D\u1DFD.≠\u200D㇛; \u103A\u094D\u1DFD.≠\u200D㇛; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [V5] # ်à¥á·½.≠㇛
+\u103A\u094D\u1DFD.=\u0338\u200D㇛; \u103A\u094D\u1DFD.≠\u200D㇛; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [V5] # ်à¥á·½.≠㇛
+\u103A\u094D\u1DFD.≠\u200D㇛; ; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [V5] # ်à¥á·½.≠㇛
+\u103A\u094D\u1DFD.=\u0338\u200D㇛; \u103A\u094D\u1DFD.≠\u200D㇛; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; xn--n3b956a9zm.xn--1ch912d; [V5] # ်à¥á·½.≠㇛
+xn--n3b956a9zm.xn--1ch912d; \u103A\u094D\u1DFD.≠㇛; [V5]; xn--n3b956a9zm.xn--1ch912d; ; ; # ်à¥á·½.≠㇛
+xn--n3b956a9zm.xn--1ug63gz5w; \u103A\u094D\u1DFD.≠\u200D㇛; [C2, V5]; xn--n3b956a9zm.xn--1ug63gz5w; ; ; # ်à¥á·½.≠㇛
+á‚¡ð‹¨å¨¤.\u200D\u033C\u0662ð‘–¿; ; [B1, C2, V6]; xn--8md2578ag21g.xn--9ta62ngt6aou8t; ; xn--8md2578ag21g.xn--9ta62nrv36a; [B1, V5, V6] # á‚¡ð‹¨å¨¤.̼٢𑖿
+â´ð‹¨å¨¤.\u200D\u033C\u0662ð‘–¿; ; [B1, C2]; xn--skjw75lg29h.xn--9ta62ngt6aou8t; ; xn--skjw75lg29h.xn--9ta62nrv36a; [B1, V5] # â´ð‹¨å¨¤.̼٢𑖿
+xn--skjw75lg29h.xn--9ta62nrv36a; â´ð‹¨å¨¤.\u033C\u0662ð‘–¿; [B1, V5]; xn--skjw75lg29h.xn--9ta62nrv36a; ; ; # â´ð‹¨å¨¤.̼٢𑖿
+xn--skjw75lg29h.xn--9ta62ngt6aou8t; â´ð‹¨å¨¤.\u200D\u033C\u0662ð‘–¿; [B1, C2]; xn--skjw75lg29h.xn--9ta62ngt6aou8t; ; ; # â´ð‹¨å¨¤.̼٢𑖿
+xn--8md2578ag21g.xn--9ta62nrv36a; á‚¡ð‹¨å¨¤.\u033C\u0662ð‘–¿; [B1, V5, V6]; xn--8md2578ag21g.xn--9ta62nrv36a; ; ; # á‚¡ð‹¨å¨¤.̼٢𑖿
+xn--8md2578ag21g.xn--9ta62ngt6aou8t; á‚¡ð‹¨å¨¤.\u200D\u033C\u0662ð‘–¿; [B1, C2, V6]; xn--8md2578ag21g.xn--9ta62ngt6aou8t; ; ; # á‚¡ð‹¨å¨¤.̼٢𑖿
+🄀Ⴄ\u0669\u0820。⒈\u0FB6ß; 🄀Ⴄ\u0669\u0820.⒈\u0FB6ß; [B1, V6]; xn--iib29f26o6n43c.xn--zca117e3vp; ; xn--iib29f26o6n43c.xn--ss-1sj588o; # 🄀Ⴄ٩ࠠ.⒈ྶß
+0.Ⴄ\u0669\u0820。1.\u0FB6ß; 0.Ⴄ\u0669\u0820.1.\u0FB6ß; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--zca117e; ; 0.xn--iib29f26o.1.xn--ss-1sj; # 0.Ⴄ٩ࠠ.1.ྶß
+0.ⴄ\u0669\u0820。1.\u0FB6ß; 0.ⴄ\u0669\u0820.1.\u0FB6ß; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--zca117e; ; 0.xn--iib29fp25e.1.xn--ss-1sj; # 0.ⴄ٩ࠠ.1.ྶß
+0.Ⴄ\u0669\u0820。1.\u0FB6SS; 0.Ⴄ\u0669\u0820.1.\u0FB6ss; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--ss-1sj; ; ; # 0.Ⴄ٩ࠠ.1.ྶss
+0.ⴄ\u0669\u0820。1.\u0FB6ss; 0.ⴄ\u0669\u0820.1.\u0FB6ss; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--ss-1sj; ; ; # 0.ⴄ٩ࠠ.1.ྶss
+0.Ⴄ\u0669\u0820。1.\u0FB6Ss; 0.Ⴄ\u0669\u0820.1.\u0FB6ss; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--ss-1sj; ; ; # 0.Ⴄ٩ࠠ.1.ྶss
+0.xn--iib29f26o.1.xn--ss-1sj; 0.Ⴄ\u0669\u0820.1.\u0FB6ss; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--ss-1sj; ; ; # 0.Ⴄ٩ࠠ.1.ྶss
+0.xn--iib29fp25e.1.xn--ss-1sj; 0.ⴄ\u0669\u0820.1.\u0FB6ss; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--ss-1sj; ; ; # 0.ⴄ٩ࠠ.1.ྶss
+0.xn--iib29fp25e.1.xn--zca117e; 0.ⴄ\u0669\u0820.1.\u0FB6ß; [B1, B5, B6, V5]; 0.xn--iib29fp25e.1.xn--zca117e; ; ; # 0.ⴄ٩ࠠ.1.ྶß
+0.xn--iib29f26o.1.xn--zca117e; 0.Ⴄ\u0669\u0820.1.\u0FB6ß; [B1, B5, B6, V5, V6]; 0.xn--iib29f26o.1.xn--zca117e; ; ; # 0.Ⴄ٩ࠠ.1.ྶß
+🄀ⴄ\u0669\u0820。⒈\u0FB6ß; 🄀ⴄ\u0669\u0820.⒈\u0FB6ß; [B1, V6]; xn--iib29fp25e0219a.xn--zca117e3vp; ; xn--iib29fp25e0219a.xn--ss-1sj588o; # 🄀ⴄ٩ࠠ.⒈ྶß
+🄀Ⴄ\u0669\u0820。⒈\u0FB6SS; 🄀Ⴄ\u0669\u0820.⒈\u0FB6ss; [B1, V6]; xn--iib29f26o6n43c.xn--ss-1sj588o; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶss
+🄀ⴄ\u0669\u0820。⒈\u0FB6ss; 🄀ⴄ\u0669\u0820.⒈\u0FB6ss; [B1, V6]; xn--iib29fp25e0219a.xn--ss-1sj588o; ; ; # 🄀ⴄ٩ࠠ.⒈ྶss
+🄀Ⴄ\u0669\u0820。⒈\u0FB6Ss; 🄀Ⴄ\u0669\u0820.⒈\u0FB6ss; [B1, V6]; xn--iib29f26o6n43c.xn--ss-1sj588o; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶss
+xn--iib29f26o6n43c.xn--ss-1sj588o; 🄀Ⴄ\u0669\u0820.⒈\u0FB6ss; [B1, V6]; xn--iib29f26o6n43c.xn--ss-1sj588o; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶss
+xn--iib29fp25e0219a.xn--ss-1sj588o; 🄀ⴄ\u0669\u0820.⒈\u0FB6ss; [B1, V6]; xn--iib29fp25e0219a.xn--ss-1sj588o; ; ; # 🄀ⴄ٩ࠠ.⒈ྶss
+xn--iib29fp25e0219a.xn--zca117e3vp; 🄀ⴄ\u0669\u0820.⒈\u0FB6ß; [B1, V6]; xn--iib29fp25e0219a.xn--zca117e3vp; ; ; # 🄀ⴄ٩ࠠ.⒈ྶß
+xn--iib29f26o6n43c.xn--zca117e3vp; 🄀Ⴄ\u0669\u0820.⒈\u0FB6ß; [B1, V6]; xn--iib29f26o6n43c.xn--zca117e3vp; ; ; # 🄀Ⴄ٩ࠠ.⒈ྶß
+≠.\u200C-\u066B; ; [B1, C1]; xn--1ch.xn----vqc597q; ; xn--1ch.xn----vqc; [B1, V3] # ≠.-٫
+=\u0338.\u200C-\u066B; ≠.\u200C-\u066B; [B1, C1]; xn--1ch.xn----vqc597q; ; xn--1ch.xn----vqc; [B1, V3] # ≠.-٫
+xn--1ch.xn----vqc; ≠.-\u066B; [B1, V3]; xn--1ch.xn----vqc; ; ; # ≠.-٫
+xn--1ch.xn----vqc597q; ≠.\u200C-\u066B; [B1, C1]; xn--1ch.xn----vqc597q; ; ; # ≠.-٫
+\u0660۱。󠳶ðž \u0665; \u0660Û±.󠳶ðž \u0665; [B1, V6]; xn--8hb40a.xn--eib7967vner3e; ; ; # Ù Û±.ðž Ù¥
+\u0660۱。󠳶ðž \u0665; \u0660Û±.󠳶ðž \u0665; [B1, V6]; xn--8hb40a.xn--eib7967vner3e; ; ; # Ù Û±.ðž Ù¥
+xn--8hb40a.xn--eib7967vner3e; \u0660Û±.󠳶ðž \u0665; [B1, V6]; xn--8hb40a.xn--eib7967vner3e; ; ; # Ù Û±.ðž Ù¥
+\u200C\u0663⒖。󱅉𽷛\u1BF3; \u200C\u0663⒖.󱅉𽷛\u1BF3; [B1, C1, V6]; xn--cib152kwgd.xn--1zf13512buy41d; ; xn--cib675m.xn--1zf13512buy41d; [B1, V6] # ٣⒖.᯳
+\u200C\u066315.。󱅉𽷛\u1BF3; \u200C\u066315..󱅉𽷛\u1BF3; [B1, C1, V6, X4_2]; xn--15-gyd983x..xn--1zf13512buy41d; [B1, C1, V6, A4_2]; xn--15-gyd..xn--1zf13512buy41d; [B1, V6, A4_2] # ٣15..᯳
+xn--15-gyd..xn--1zf13512buy41d; \u066315..󱅉𽷛\u1BF3; [B1, V6, X4_2]; xn--15-gyd..xn--1zf13512buy41d; [B1, V6, A4_2]; ; # ٣15..᯳
+xn--15-gyd983x..xn--1zf13512buy41d; \u200C\u066315..󱅉𽷛\u1BF3; [B1, C1, V6, X4_2]; xn--15-gyd983x..xn--1zf13512buy41d; [B1, C1, V6, A4_2]; ; # ٣15..᯳
+xn--cib675m.xn--1zf13512buy41d; \u0663⒖.󱅉𽷛\u1BF3; [B1, V6]; xn--cib675m.xn--1zf13512buy41d; ; ; # ٣⒖.᯳
+xn--cib152kwgd.xn--1zf13512buy41d; \u200C\u0663⒖.󱅉𽷛\u1BF3; [B1, C1, V6]; xn--cib152kwgd.xn--1zf13512buy41d; ; ; # ٣⒖.᯳
+\u1BF3.-逋񳦭󙙮; ; [V3, V5, V6]; xn--1zf.xn----483d46987byr50b; ; ; # ᯳.-逋
+xn--1zf.xn----483d46987byr50b; \u1BF3.-逋񳦭󙙮; [V3, V5, V6]; xn--1zf.xn----483d46987byr50b; ; ; # ᯳.-逋
+\u0756。\u3164\u200Dς; \u0756.\u3164\u200Dς; [C2, V6]; xn--9ob.xn--3xa995lq2l; ; xn--9ob.xn--4xa574u; [V6] # ݖ.ς
+\u0756。\u1160\u200Dς; \u0756.\u1160\u200Dς; [C2, V6]; xn--9ob.xn--3xa580ebol; ; xn--9ob.xn--4xa380e; [V6] # ݖ.ς
+\u0756。\u1160\u200DΣ; \u0756.\u1160\u200Dσ; [C2, V6]; xn--9ob.xn--4xa380ebol; ; xn--9ob.xn--4xa380e; [V6] # ݖ.σ
+\u0756。\u1160\u200Dσ; \u0756.\u1160\u200Dσ; [C2, V6]; xn--9ob.xn--4xa380ebol; ; xn--9ob.xn--4xa380e; [V6] # ݖ.σ
+xn--9ob.xn--4xa380e; \u0756.\u1160σ; [V6]; xn--9ob.xn--4xa380e; ; ; # ݖ.σ
+xn--9ob.xn--4xa380ebol; \u0756.\u1160\u200Dσ; [C2, V6]; xn--9ob.xn--4xa380ebol; ; ; # ݖ.σ
+xn--9ob.xn--3xa580ebol; \u0756.\u1160\u200DÏ‚; [C2, V6]; xn--9ob.xn--3xa580ebol; ; ; # Ý–.Ï‚
+\u0756。\u3164\u200DΣ; \u0756.\u3164\u200Dσ; [C2, V6]; xn--9ob.xn--4xa795lq2l; ; xn--9ob.xn--4xa574u; [V6] # ݖ.σ
+\u0756。\u3164\u200Dσ; \u0756.\u3164\u200Dσ; [C2, V6]; xn--9ob.xn--4xa795lq2l; ; xn--9ob.xn--4xa574u; [V6] # ݖ.σ
+xn--9ob.xn--4xa574u; \u0756.\u3164σ; [V6]; xn--9ob.xn--4xa574u; ; ; # ݖ.σ
+xn--9ob.xn--4xa795lq2l; \u0756.\u3164\u200Dσ; [C2, V6]; xn--9ob.xn--4xa795lq2l; ; ; # ݖ.σ
+xn--9ob.xn--3xa995lq2l; \u0756.\u3164\u200DÏ‚; [C2, V6]; xn--9ob.xn--3xa995lq2l; ; ; # Ý–.Ï‚
+ᡆႣ。󞢧\u0315\u200D\u200D; ᡆႣ.󞢧\u0315\u200D\u200D; [C2, V6]; xn--bnd320b.xn--5sa649la993427a; ; xn--bnd320b.xn--5sa98523p; [V6] # ᡆႣ.̕
+ᡆႣ。󞢧\u0315\u200D\u200D; ᡆႣ.󞢧\u0315\u200D\u200D; [C2, V6]; xn--bnd320b.xn--5sa649la993427a; ; xn--bnd320b.xn--5sa98523p; [V6] # ᡆႣ.̕
+ᡆⴃ。󞢧\u0315\u200D\u200D; ᡆⴃ.󞢧\u0315\u200D\u200D; [C2, V6]; xn--57e237h.xn--5sa649la993427a; ; xn--57e237h.xn--5sa98523p; [V6] # ᡆⴃ.̕
+xn--57e237h.xn--5sa98523p; ᡆⴃ.󞢧\u0315; [V6]; xn--57e237h.xn--5sa98523p; ; ; # ᡆⴃ.̕
+xn--57e237h.xn--5sa649la993427a; ᡆⴃ.󞢧\u0315\u200D\u200D; [C2, V6]; xn--57e237h.xn--5sa649la993427a; ; ; # ᡆⴃ.̕
+xn--bnd320b.xn--5sa98523p; ᡆႣ.󞢧\u0315; [V6]; xn--bnd320b.xn--5sa98523p; ; ; # ᡆႣ.̕
+xn--bnd320b.xn--5sa649la993427a; ᡆႣ.󞢧\u0315\u200D\u200D; [C2, V6]; xn--bnd320b.xn--5sa649la993427a; ; ; # ᡆႣ.̕
+ᡆⴃ。󞢧\u0315\u200D\u200D; ᡆⴃ.󞢧\u0315\u200D\u200D; [C2, V6]; xn--57e237h.xn--5sa649la993427a; ; xn--57e237h.xn--5sa98523p; [V6] # ᡆⴃ.̕
+ã­„\u200D\u084F𑚵.ςð®®\u200C\u200D; ã­„\u200D\u084Fð‘šµ.Ï‚ð®®\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--3xa895lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.Ï‚ð®®
+ã­„\u200D\u084Fð‘šµ.Ï‚ð®®\u200C\u200D; ; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--3xa895lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.Ï‚ð®®
+ã­„\u200D\u084Fð‘šµ.Σð®®\u200C\u200D; ã­„\u200D\u084Fð‘šµ.σð®®\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.σð®®
+ã­„\u200D\u084Fð‘šµ.σð®®\u200C\u200D; ; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.σð®®
+xn--ewb302xhu1l.xn--4xa0426k; ã­„\u084Fð‘šµ.σð®®; [B5, B6]; xn--ewb302xhu1l.xn--4xa0426k; ; ; # ã­„à¡ð‘šµ.σð®®
+xn--ewb962jfitku4r.xn--4xa695lda6932v; ã­„\u200D\u084Fð‘šµ.σð®®\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; ; # ã­„à¡ð‘šµ.σð®®
+xn--ewb962jfitku4r.xn--3xa895lda6932v; ã­„\u200D\u084Fð‘šµ.Ï‚ð®®\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--3xa895lda6932v; ; ; # ã­„à¡ð‘šµ.Ï‚ð®®
+ã­„\u200D\u084F𑚵.Σð®®\u200C\u200D; ã­„\u200D\u084Fð‘šµ.σð®®\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.σð®®
+ã­„\u200D\u084F𑚵.σð®®\u200C\u200D; ã­„\u200D\u084Fð‘šµ.σð®®\u200C\u200D; [B5, B6, C1, C2]; xn--ewb962jfitku4r.xn--4xa695lda6932v; ; xn--ewb302xhu1l.xn--4xa0426k; [B5, B6] # ã­„à¡ð‘šµ.σð®®
+\u17B5。𞯸ꡀ🄋; \u17B5.𞯸ꡀ🄋; [B1, B2, B3, V5, V6]; xn--03e.xn--8b9ar252dngd; ; ; # .ꡀ🄋
+xn--03e.xn--8b9ar252dngd; \u17B5.𞯸ꡀ🄋; [B1, B2, B3, V5, V6]; xn--03e.xn--8b9ar252dngd; ; ; # .ꡀ🄋
+óªºæš‘.⾑\u0668; óªºæš‘.襾\u0668; [B5, B6, V6]; xn--tlvq3513e.xn--hib9228d; ; ; # æš‘.襾٨
+óªºæš‘.襾\u0668; ; [B5, B6, V6]; xn--tlvq3513e.xn--hib9228d; ; ; # æš‘.襾٨
+xn--tlvq3513e.xn--hib9228d; óªºæš‘.襾\u0668; [B5, B6, V6]; xn--tlvq3513e.xn--hib9228d; ; ; # æš‘.襾٨
+󠄚≯ꡢ。\u0891\u1DFF; ≯ꡢ.\u0891\u1DFF; [B1, V6]; xn--hdh7783c.xn--9xb680i; ; ; # ≯ꡢ.᷿
+󠄚>\u0338ꡢ。\u0891\u1DFF; ≯ꡢ.\u0891\u1DFF; [B1, V6]; xn--hdh7783c.xn--9xb680i; ; ; # ≯ꡢ.᷿
+xn--hdh7783c.xn--9xb680i; ≯ꡢ.\u0891\u1DFF; [B1, V6]; xn--hdh7783c.xn--9xb680i; ; ; # ≯ꡢ.᷿
+\uFDC3ð®±\u0B4Dð¨¿.ó§¤á‚·; \u0643\u0645\u0645ð®±\u0B4Dð¨¿.ó§¤á‚·; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--vnd55511o; ; ; # كممð®±à­ð¨¿.á‚·
+\u0643\u0645\u0645ð®±\u0B4Dð¨¿.ó§¤á‚·; ; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--vnd55511o; ; ; # كممð®±à­ð¨¿.á‚·
+\u0643\u0645\u0645ð®±\u0B4Dð¨¿.ó§¤â´—; ; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--fljz2846h; ; ; # كممð®±à­ð¨¿.â´—
+xn--fhbea662czx68a2tju.xn--fljz2846h; \u0643\u0645\u0645ð®±\u0B4Dð¨¿.ó§¤â´—; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--fljz2846h; ; ; # كممð®±à­ð¨¿.â´—
+xn--fhbea662czx68a2tju.xn--vnd55511o; \u0643\u0645\u0645ð®±\u0B4Dð¨¿.ó§¤á‚·; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--vnd55511o; ; ; # كممð®±à­ð¨¿.á‚·
+\uFDC3ð®±\u0B4Dð¨¿.ó§¤â´—; \u0643\u0645\u0645ð®±\u0B4Dð¨¿.ó§¤â´—; [B2, B3, V6]; xn--fhbea662czx68a2tju.xn--fljz2846h; ; ; # كممð®±à­ð¨¿.â´—
+𞀨。\u1B44򡛨𞎇; 𞀨.\u1B44򡛨𞎇; [V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄
+𞀨。\u1B44򡛨𞎇; 𞀨.\u1B44򡛨𞎇; [V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄
+xn--mi4h.xn--1uf6843smg20c; 𞀨.\u1B44򡛨𞎇; [V5, V6]; xn--mi4h.xn--1uf6843smg20c; ; ; # 𞀨.᭄
+ó £¼\u200C.ðº°\u200Cá¡Ÿ; ó £¼\u200C.ðº°\u200Cá¡Ÿ; [B1, B2, B3, C1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; xn--q046e.xn--v8e7227j; [B1, B2, B3, V6] # .ðº°á¡Ÿ
+ó £¼\u200C.ðº°\u200Cá¡Ÿ; ; [B1, B2, B3, C1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; xn--q046e.xn--v8e7227j; [B1, B2, B3, V6] # .ðº°á¡Ÿ
xn--q046e.xn--v8e7227j; ó £¼.ðº°á¡Ÿ; [B1, B2, B3, V6]; xn--q046e.xn--v8e7227j; ; ; # .ðº°á¡Ÿ
-xn--0ug18531l.xn--v8e340bp21t; 󠣼‌.ðº°â€Œá¡Ÿ; [B1, B2, B3, C1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; ; # .ðº°á¡Ÿ
-ᢛ󨅟ß.ጧ; ; [P1, V6]; xn--zca562jc642x.xn--p5d; ; xn--ss-7dp66033t.xn--p5d; # ᢛß.ጧ
-ᢛ󨅟SS.ጧ; ᢛ󨅟ss.ጧ; [P1, V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ
-ᢛ󨅟ss.ጧ; ; [P1, V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ
-ᢛ󨅟Ss.ጧ; ᢛ󨅟ss.ጧ; [P1, V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ
+xn--0ug18531l.xn--v8e340bp21t; ó £¼\u200C.ðº°\u200Cá¡Ÿ; [B1, B2, B3, C1, V6]; xn--0ug18531l.xn--v8e340bp21t; ; ; # .ðº°á¡Ÿ
+ᢛ󨅟ß.ጧ; ; [V6]; xn--zca562jc642x.xn--p5d; ; xn--ss-7dp66033t.xn--p5d; # ᢛß.ጧ
+ᢛ󨅟SS.ጧ; ᢛ󨅟ss.ጧ; [V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ
+ᢛ󨅟ss.ጧ; ; [V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ
+ᢛ󨅟Ss.ጧ; ᢛ󨅟ss.ጧ; [V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ
xn--ss-7dp66033t.xn--p5d; ᢛ󨅟ss.ጧ; [V6]; xn--ss-7dp66033t.xn--p5d; ; ; # ᢛss.ጧ
xn--zca562jc642x.xn--p5d; ᢛ󨅟ß.ጧ; [V6]; xn--zca562jc642x.xn--p5d; ; ; # ᢛß.ጧ
-⮒‌.񒚗‌; ; [C1, P1, V6]; xn--0ugx66b.xn--0ugz2871c; ; xn--b9i.xn--5p9y; [P1, V6] # ⮒.
+â®’\u200C.ñ’š—\u200C; ; [C1, V6]; xn--0ugx66b.xn--0ugz2871c; ; xn--b9i.xn--5p9y; [V6] # â®’.
xn--b9i.xn--5p9y; â®’.ñ’š—; [V6]; xn--b9i.xn--5p9y; ; ; # â®’.
-xn--0ugx66b.xn--0ugz2871c; ⮒‌.񒚗‌; [C1, V6]; xn--0ugx66b.xn--0ugz2871c; ; ; # ⮒.
-𞤂ñ¹žð¹¯ã€‚Ⴜ; 𞤤ñ¹žð¹¯.Ⴜ; [B2, P1, V6]; xn--no0dr648a51o3b.xn--0nd; ; ; # 𞤤ð¹¯.Ⴜ
-𞤤ñ¹žð¹¯ã€‚â´œ; 𞤤ñ¹žð¹¯.â´œ; [B2, P1, V6]; xn--no0dr648a51o3b.xn--klj; ; ; # 𞤤ð¹¯.â´œ
+xn--0ugx66b.xn--0ugz2871c; â®’\u200C.ñ’š—\u200C; [C1, V6]; xn--0ugx66b.xn--0ugz2871c; ; ; # â®’.
+𞤂ñ¹žð¹¯ã€‚Ⴜ; 𞤤ñ¹žð¹¯.Ⴜ; [B2, V6]; xn--no0dr648a51o3b.xn--0nd; ; ; # 𞤤ð¹¯.Ⴜ
+𞤤ñ¹žð¹¯ã€‚â´œ; 𞤤ñ¹žð¹¯.â´œ; [B2, V6]; xn--no0dr648a51o3b.xn--klj; ; ; # 𞤤ð¹¯.â´œ
xn--no0dr648a51o3b.xn--klj; 𞤤ñ¹žð¹¯.â´œ; [B2, V6]; xn--no0dr648a51o3b.xn--klj; ; ; # 𞤤ð¹¯.â´œ
xn--no0dr648a51o3b.xn--0nd; 𞤤ñ¹žð¹¯.Ⴜ; [B2, V6]; xn--no0dr648a51o3b.xn--0nd; ; ; # 𞤤ð¹¯.Ⴜ
-𞤂ñ¹žð¹¯ã€‚â´œ; 𞤤ñ¹žð¹¯.â´œ; [B2, P1, V6]; xn--no0dr648a51o3b.xn--klj; ; ; # 𞤤ð¹¯.â´œ
-ð¹µâ®£â€Œð‘„°ï½¡ñ·´¿ï²·; ð¹µâ®£â€Œð‘„°.ñ·´¿Ø¶Ù…; [B1, B5, B6, C1, P1, V6]; xn--0ug586bcj8p7jc.xn--1gb4a66004i; ; xn--s9i5458e7yb.xn--1gb4a66004i; [B1, B5, B6, P1, V6] # ð¹µâ®£ð‘„°.ضم
-ð¹µâ®£â€Œð‘„°ã€‚ñ·´¿Ø¶Ù…; ð¹µâ®£â€Œð‘„°.ñ·´¿Ø¶Ù…; [B1, B5, B6, C1, P1, V6]; xn--0ug586bcj8p7jc.xn--1gb4a66004i; ; xn--s9i5458e7yb.xn--1gb4a66004i; [B1, B5, B6, P1, V6] # ð¹µâ®£ð‘„°.ضم
-xn--s9i5458e7yb.xn--1gb4a66004i; ð¹µâ®£ð‘„°.ñ·´¿Ø¶Ù…; [B1, B5, B6, V6]; xn--s9i5458e7yb.xn--1gb4a66004i; ; ; # ð¹µâ®£ð‘„°.ضم
-xn--0ug586bcj8p7jc.xn--1gb4a66004i; ð¹µâ®£â€Œð‘„°.ñ·´¿Ø¶Ù…; [B1, B5, B6, C1, V6]; xn--0ug586bcj8p7jc.xn--1gb4a66004i; ; ; # ð¹µâ®£ð‘„°.ضم
-Ⴒ。デß𞤵à±; Ⴒ.デß𞤵à±; [B5, B6, P1, V6]; xn--qnd.xn--zca669cmr3a0f28a; ; xn--qnd.xn--ss-9nh3648ahh20b; # Ⴒ.デß𞤵à±
-Ⴒ。デß𞤵à±; Ⴒ.デß𞤵à±; [B5, B6, P1, V6]; xn--qnd.xn--zca669cmr3a0f28a; ; xn--qnd.xn--ss-9nh3648ahh20b; # Ⴒ.デß𞤵à±
-ⴒ。デß𞤵à±; â´’.デß𞤵à±; [B5, B6]; xn--9kj.xn--zca669cmr3a0f28a; ; xn--9kj.xn--ss-9nh3648ahh20b; # â´’.デß𞤵à±
-ⴒ。デß𞤵à±; â´’.デß𞤵à±; [B5, B6]; xn--9kj.xn--zca669cmr3a0f28a; ; xn--9kj.xn--ss-9nh3648ahh20b; # â´’.デß𞤵à±
-Ⴒ。デSS𞤓à±; Ⴒ.デss𞤵à±; [B5, B6, P1, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
-Ⴒ。デSS𞤓à±; Ⴒ.デss𞤵à±; [B5, B6, P1, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
-ⴒ。デss𞤵à±; â´’.デss𞤵à±; [B5, B6]; xn--9kj.xn--ss-9nh3648ahh20b; ; ; # â´’.デss𞤵à±
-ⴒ。デss𞤵à±; â´’.デss𞤵à±; [B5, B6]; xn--9kj.xn--ss-9nh3648ahh20b; ; ; # â´’.デss𞤵à±
-Ⴒ。デSs𞤵à±; Ⴒ.デss𞤵à±; [B5, B6, P1, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
-Ⴒ。デSs𞤵à±; Ⴒ.デss𞤵à±; [B5, B6, P1, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
-xn--qnd.xn--ss-9nh3648ahh20b; Ⴒ.デss𞤵à±; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
-xn--9kj.xn--ss-9nh3648ahh20b; â´’.デss𞤵à±; [B5, B6]; xn--9kj.xn--ss-9nh3648ahh20b; ; ; # â´’.デss𞤵à±
-xn--9kj.xn--zca669cmr3a0f28a; â´’.デß𞤵à±; [B5, B6]; xn--9kj.xn--zca669cmr3a0f28a; ; ; # â´’.デß𞤵à±
-xn--qnd.xn--zca669cmr3a0f28a; Ⴒ.デß𞤵à±; [B5, B6, V6]; xn--qnd.xn--zca669cmr3a0f28a; ; ; # Ⴒ.デß𞤵à±
-Ⴒ。デSS𞤵à±; Ⴒ.デss𞤵à±; [B5, B6, P1, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
-Ⴒ。デSS𞤵à±; Ⴒ.デss𞤵à±; [B5, B6, P1, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
-ð‘¿àµï¼Žï¼—-ß’; ð‘¿àµ.7-ß’; [B1, B3, B6, V5]; xn--wxc1283k.xn--7--yue; ; ; # ð‘¿àµ.7-ß’
-ð‘¿àµ.7-ß’; ; [B1, B3, B6, V5]; xn--wxc1283k.xn--7--yue; ; ; # ð‘¿àµ.7-ß’
-xn--wxc1283k.xn--7--yue; ð‘¿àµ.7-ß’; [B1, B3, B6, V5]; xn--wxc1283k.xn--7--yue; ; ; # ð‘¿àµ.7-ß’
-≯𑜫󠭇.᜴ñ’ž¤ð‘¬á¢§; ; [P1, V5, V6]; xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ; ; # ≯𑜫.᜴ð‘¬á¢§
-≯𑜫󠭇.᜴ñ’ž¤ð‘¬á¢§; ≯𑜫󠭇.᜴ñ’ž¤ð‘¬á¢§; [P1, V5, V6]; xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ; ; # ≯𑜫.᜴ð‘¬á¢§
-xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ≯𑜫󠭇.᜴ñ’ž¤ð‘¬á¢§; [V5, V6]; xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ; ; # ≯𑜫.᜴ð‘¬á¢§
-á·›òŽ™á‚·ì”。Þ; á·›òŽ™á‚·ì”.Þ; [B1, P1, V5, V6]; xn--vnd148d733ky6n9e.xn--iqb; ; ; # ᷛႷì”.Þ
-á·›òŽ™á‚·á„Šá…¨á†¿ã€‚Þ; á·›òŽ™á‚·ì”.Þ; [B1, P1, V5, V6]; xn--vnd148d733ky6n9e.xn--iqb; ; ; # ᷛႷì”.Þ
-á·›òŽ™â´—쏔。Þ; á·›òŽ™â´—ì”.Þ; [B1, P1, V5, V6]; xn--zegy26dw47iy6w2f.xn--iqb; ; ; # ᷛⴗì”.Þ
-á·›òŽ™â´—ì”。Þ; á·›òŽ™â´—ì”.Þ; [B1, P1, V5, V6]; xn--zegy26dw47iy6w2f.xn--iqb; ; ; # ᷛⴗì”.Þ
-xn--zegy26dw47iy6w2f.xn--iqb; á·›òŽ™â´—ì”.Þ; [B1, V5, V6]; xn--zegy26dw47iy6w2f.xn--iqb; ; ; # ᷛⴗì”.Þ
-xn--vnd148d733ky6n9e.xn--iqb; á·›òŽ™á‚·ì”.Þ; [B1, V5, V6]; xn--vnd148d733ky6n9e.xn--iqb; ; ; # ᷛႷì”.Þ
-ß。ð‹³á‚¬à¾¸; ß.ð‹³á‚¬à¾¸; [P1, V6]; xn--zca.xn--lgd10cu829c; ; ss.xn--lgd10cu829c; # ß.ð‹³á‚¬à¾¸
-ß。ð‹³á‚¬à¾¸; ß.ð‹³á‚¬à¾¸; [P1, V6]; xn--zca.xn--lgd10cu829c; ; ss.xn--lgd10cu829c; # ß.ð‹³á‚¬à¾¸
-ß。ð‹³â´Œà¾¸; ß.ð‹³â´Œà¾¸; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m; # ß.ð‹³â´Œà¾¸
-SS。ð‹³á‚¬à¾¸; ss.ð‹³á‚¬à¾¸; [P1, V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
-ss。ð‹³â´Œà¾¸; ss.ð‹³â´Œà¾¸; ; ss.xn--lgd921mvv0m; ; ; # ss.ð‹³â´Œà¾¸
-Ss。ð‹³á‚¬à¾¸; ss.ð‹³á‚¬à¾¸; [P1, V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
-ss.xn--lgd10cu829c; ss.ð‹³á‚¬à¾¸; [V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
-ss.xn--lgd921mvv0m; ss.ð‹³â´Œà¾¸; ; ss.xn--lgd921mvv0m; ; ; # ss.ð‹³â´Œà¾¸
-ss.ð‹³â´Œà¾¸; ; ; ss.xn--lgd921mvv0m; ; ; # ss.ð‹³â´Œà¾¸
-SS.ð‹³á‚¬à¾¸; ss.ð‹³á‚¬à¾¸; [P1, V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
-Ss.ð‹³á‚¬à¾¸; ss.ð‹³á‚¬à¾¸; [P1, V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
-xn--zca.xn--lgd921mvv0m; ß.ð‹³â´Œà¾¸; ; xn--zca.xn--lgd921mvv0m; ; ; # ß.ð‹³â´Œà¾¸
-ß.ð‹³â´Œà¾¸; ; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m; # ß.ð‹³â´Œà¾¸
-xn--zca.xn--lgd10cu829c; ß.ð‹³á‚¬à¾¸; [V6]; xn--zca.xn--lgd10cu829c; ; ; # ß.ð‹³á‚¬à¾¸
-ß。ð‹³â´Œà¾¸; ß.ð‹³â´Œà¾¸; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m; # ß.ð‹³â´Œà¾¸
-SS。ð‹³á‚¬à¾¸; ss.ð‹³á‚¬à¾¸; [P1, V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
-ss。ð‹³â´Œà¾¸; ss.ð‹³â´Œà¾¸; ; ss.xn--lgd921mvv0m; ; ; # ss.ð‹³â´Œà¾¸
-Ss。ð‹³á‚¬à¾¸; ss.ð‹³á‚¬à¾¸; [P1, V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
--Úžð¶¡.‌â¾à§; -Úžð¶¡.‌身à§; [B1, C1, P1, V3, V6]; xn----stc7013r.xn--b7b305imj2f; ; xn----stc7013r.xn--b7b1419d; [B1, P1, V3, V6] # -Úž.身à§
--Úžð¶¡.‌身à§; ; [B1, C1, P1, V3, V6]; xn----stc7013r.xn--b7b305imj2f; ; xn----stc7013r.xn--b7b1419d; [B1, P1, V3, V6] # -Úž.身à§
-xn----stc7013r.xn--b7b1419d; -Úžð¶¡.身à§; [B1, V3, V6]; xn----stc7013r.xn--b7b1419d; ; ; # -Úž.身à§
-xn----stc7013r.xn--b7b305imj2f; -Úžð¶¡.‌身à§; [B1, C1, V3, V6]; xn----stc7013r.xn--b7b305imj2f; ; ; # -Úž.身à§
-😮ݤ𑈵𞀖.💅â€; 😮ݤ𑈵𞀖.💅â€; [B1, C2]; xn--opb4277kuc7elqsa.xn--1ug5265p; ; xn--opb4277kuc7elqsa.xn--kr8h; [B1] # 😮ݤ𑈵𞀖.💅
-😮ݤ𑈵𞀖.💅â€; ; [B1, C2]; xn--opb4277kuc7elqsa.xn--1ug5265p; ; xn--opb4277kuc7elqsa.xn--kr8h; [B1] # 😮ݤ𑈵𞀖.💅
-xn--opb4277kuc7elqsa.xn--kr8h; 😮ݤ𑈵𞀖.💅; [B1]; xn--opb4277kuc7elqsa.xn--kr8h; ; ; # 😮ݤ𑈵𞀖.💅
-xn--opb4277kuc7elqsa.xn--1ug5265p; 😮ݤ𑈵𞀖.💅â€; [B1, C2]; xn--opb4277kuc7elqsa.xn--1ug5265p; ; ; # 😮ݤ𑈵𞀖.💅
-ࣲâ€ê™³Ü’.á¢â€Œó „; ; [B1, B6, C1, C2, P1, V5, V6]; xn--cnb37g904be26j.xn--89e849ax9363a; ; xn--cnb37gdy00a.xn--89e02253p; [B1, B6, P1, V5, V6] # ࣲ꙳ܒ.á¢
-xn--cnb37gdy00a.xn--89e02253p; ࣲ꙳ܒ.á¢ó „; [B1, B6, V5, V6]; xn--cnb37gdy00a.xn--89e02253p; ; ; # ࣲ꙳ܒ.á¢
-xn--cnb37g904be26j.xn--89e849ax9363a; ࣲâ€ê™³Ü’.á¢â€Œó „; [B1, B6, C1, C2, V5, V6]; xn--cnb37g904be26j.xn--89e849ax9363a; ; ; # ࣲ꙳ܒ.á¢
-Ⴑ.ڿ𞯓ᠲ; Ⴑ.ڿ𞯓ᠲ; [B2, B3, P1, V6]; xn--pnd.xn--ykb840gd555a; ; ; # Ⴑ.ڿᠲ
-Ⴑ.ڿ𞯓ᠲ; ; [B2, B3, P1, V6]; xn--pnd.xn--ykb840gd555a; ; ; # Ⴑ.ڿᠲ
-ⴑ.ڿ𞯓ᠲ; ; [B2, B3, P1, V6]; xn--8kj.xn--ykb840gd555a; ; ; # ⴑ.ڿᠲ
-xn--8kj.xn--ykb840gd555a; ⴑ.ڿ𞯓ᠲ; [B2, B3, V6]; xn--8kj.xn--ykb840gd555a; ; ; # ⴑ.ڿᠲ
-xn--pnd.xn--ykb840gd555a; Ⴑ.ڿ𞯓ᠲ; [B2, B3, V6]; xn--pnd.xn--ykb840gd555a; ; ; # Ⴑ.ڿᠲ
-ⴑ.ڿ𞯓ᠲ; ⴑ.ڿ𞯓ᠲ; [B2, B3, P1, V6]; xn--8kj.xn--ykb840gd555a; ; ; # ⴑ.ڿᠲ
-á©šð›¦à±ã€‚ðš¬ðŸµ; á©šð›¦à±.ðš¬9; [P1, V5, V6]; xn--lqc703ebm93a.xn--9-000p; ; ; # á©šà±.9
-á©šð›¦à±ã€‚ðš¬9; á©šð›¦à±.ðš¬9; [P1, V5, V6]; xn--lqc703ebm93a.xn--9-000p; ; ; # á©šà±.9
-xn--lqc703ebm93a.xn--9-000p; á©šð›¦à±.ðš¬9; [V5, V6]; xn--lqc703ebm93a.xn--9-000p; ; ; # á©šà±.9
-‌ڠ𿺆ðŸ—。Ⴣ꒘ï³ñ˜–; ‌ڠ𿺆9.Ⴣ꒘مخñ˜–; [B1, B5, C1, P1, V6]; xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; ; xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; [B2, B5, P1, V6] # Ú 9.Ⴣ꒘مخ
-‌ڠ𿺆9。Ⴣ꒘مخñ˜–; ‌ڠ𿺆9.Ⴣ꒘مخñ˜–; [B1, B5, C1, P1, V6]; xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; ; xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; [B2, B5, P1, V6] # Ú 9.Ⴣ꒘مخ
-‌ڠ𿺆9。ⴣ꒘مخñ˜–; ‌ڠ𿺆9.ⴣ꒘مخñ˜–; [B1, B5, C1, P1, V6]; xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; ; xn--9-vtc42319e.xn--tgb9bz87p833hw316c; [B2, B5, P1, V6] # Ú 9.ⴣ꒘مخ
-xn--9-vtc42319e.xn--tgb9bz87p833hw316c; ڠ𿺆9.ⴣ꒘مخñ˜–; [B2, B5, V6]; xn--9-vtc42319e.xn--tgb9bz87p833hw316c; ; ; # Ú 9.ⴣ꒘مخ
-xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; ‌ڠ𿺆9.ⴣ꒘مخñ˜–; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; ; ; # Ú 9.ⴣ꒘مخ
-xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; ڠ𿺆9.Ⴣ꒘مخñ˜–; [B2, B5, V6]; xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; ; ; # Ú 9.Ⴣ꒘مخ
-xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; ‌ڠ𿺆9.Ⴣ꒘مخñ˜–; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; ; ; # Ú 9.Ⴣ꒘مخ
-‌ڠ𿺆ðŸ—。ⴣ꒘ï³ñ˜–; ‌ڠ𿺆9.ⴣ꒘مخñ˜–; [B1, B5, C1, P1, V6]; xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; ; xn--9-vtc42319e.xn--tgb9bz87p833hw316c; [B2, B5, P1, V6] # Ú 9.ⴣ꒘مخ
-ᡖ。̟񗛨ஂ-; ᡖ.̟񗛨ஂ-; [P1, V3, V5, V6]; xn--m8e.xn----mdb555dkk71m; ; ; # ᡖ.̟ஂ-
-ᡖ。̟񗛨ஂ-; ᡖ.̟񗛨ஂ-; [P1, V3, V5, V6]; xn--m8e.xn----mdb555dkk71m; ; ; # ᡖ.̟ஂ-
-xn--m8e.xn----mdb555dkk71m; ᡖ.̟񗛨ஂ-; [V3, V5, V6]; xn--m8e.xn----mdb555dkk71m; ; ; # ᡖ.̟ஂ-
+𞤂ñ¹žð¹¯ã€‚â´œ; 𞤤ñ¹žð¹¯.â´œ; [B2, V6]; xn--no0dr648a51o3b.xn--klj; ; ; # 𞤤ð¹¯.â´œ
+ð¹µâ®£\u200C𑄰。ñ·´¿\uFCB7; ð¹µâ®£\u200Cð‘„°.ñ·´¿\u0636\u0645; [B1, B5, B6, C1, V6]; xn--0ug586bcj8p7jc.xn--1gb4a66004i; ; xn--s9i5458e7yb.xn--1gb4a66004i; [B1, B5, B6, V6] # ð¹µâ®£ð‘„°.ضم
+ð¹µâ®£\u200C𑄰。ñ·´¿\u0636\u0645; ð¹µâ®£\u200Cð‘„°.ñ·´¿\u0636\u0645; [B1, B5, B6, C1, V6]; xn--0ug586bcj8p7jc.xn--1gb4a66004i; ; xn--s9i5458e7yb.xn--1gb4a66004i; [B1, B5, B6, V6] # ð¹µâ®£ð‘„°.ضم
+xn--s9i5458e7yb.xn--1gb4a66004i; ð¹µâ®£ð‘„°.ñ·´¿\u0636\u0645; [B1, B5, B6, V6]; xn--s9i5458e7yb.xn--1gb4a66004i; ; ; # ð¹µâ®£ð‘„°.ضم
+xn--0ug586bcj8p7jc.xn--1gb4a66004i; ð¹µâ®£\u200Cð‘„°.ñ·´¿\u0636\u0645; [B1, B5, B6, C1, V6]; xn--0ug586bcj8p7jc.xn--1gb4a66004i; ; ; # ð¹µâ®£ð‘„°.ضم
+Ⴒ。デß𞤵\u0C4D; Ⴒ.デß𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--zca669cmr3a0f28a; ; xn--qnd.xn--ss-9nh3648ahh20b; # Ⴒ.デß𞤵à±
+Ⴒ。テ\u3099ß𞤵\u0C4D; Ⴒ.デß𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--zca669cmr3a0f28a; ; xn--qnd.xn--ss-9nh3648ahh20b; # Ⴒ.デß𞤵à±
+ⴒ。テ\u3099ß𞤵\u0C4D; â´’.デß𞤵\u0C4D; [B5, B6]; xn--9kj.xn--zca669cmr3a0f28a; ; xn--9kj.xn--ss-9nh3648ahh20b; # â´’.デß𞤵à±
+ⴒ。デß𞤵\u0C4D; â´’.デß𞤵\u0C4D; [B5, B6]; xn--9kj.xn--zca669cmr3a0f28a; ; xn--9kj.xn--ss-9nh3648ahh20b; # â´’.デß𞤵à±
+Ⴒ。デSS𞤓\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
+Ⴒ。テ\u3099SS𞤓\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
+ⴒ。テ\u3099ss𞤵\u0C4D; â´’.デss𞤵\u0C4D; [B5, B6]; xn--9kj.xn--ss-9nh3648ahh20b; ; ; # â´’.デss𞤵à±
+ⴒ。デss𞤵\u0C4D; â´’.デss𞤵\u0C4D; [B5, B6]; xn--9kj.xn--ss-9nh3648ahh20b; ; ; # â´’.デss𞤵à±
+Ⴒ。デSs𞤵\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
+Ⴒ。テ\u3099Ss𞤵\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
+xn--qnd.xn--ss-9nh3648ahh20b; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
+xn--9kj.xn--ss-9nh3648ahh20b; â´’.デss𞤵\u0C4D; [B5, B6]; xn--9kj.xn--ss-9nh3648ahh20b; ; ; # â´’.デss𞤵à±
+xn--9kj.xn--zca669cmr3a0f28a; â´’.デß𞤵\u0C4D; [B5, B6]; xn--9kj.xn--zca669cmr3a0f28a; ; ; # â´’.デß𞤵à±
+xn--qnd.xn--zca669cmr3a0f28a; Ⴒ.デß𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--zca669cmr3a0f28a; ; ; # Ⴒ.デß𞤵à±
+Ⴒ。デSS𞤵\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
+Ⴒ。テ\u3099SS𞤵\u0C4D; Ⴒ.デss𞤵\u0C4D; [B5, B6, V6]; xn--qnd.xn--ss-9nh3648ahh20b; ; ; # Ⴒ.デss𞤵à±
+ð‘¿\u0D4D.7-\u07D2; ð‘¿\u0D4D.7-\u07D2; [B1, V5]; xn--wxc1283k.xn--7--yue; ; ; # ð‘¿àµ.7-ß’
+ð‘¿\u0D4D.7-\u07D2; ; [B1, V5]; xn--wxc1283k.xn--7--yue; ; ; # ð‘¿àµ.7-ß’
+xn--wxc1283k.xn--7--yue; ð‘¿\u0D4D.7-\u07D2; [B1, V5]; xn--wxc1283k.xn--7--yue; ; ; # ð‘¿àµ.7-ß’
+≯𑜫󠭇.\u1734ñ’ž¤ð‘¬á¢§; ; [V5, V6]; xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ; ; # ≯𑜫.᜴ð‘¬á¢§
+>\u0338𑜫󠭇.\u1734ñ’ž¤ð‘¬á¢§; ≯𑜫󠭇.\u1734ñ’ž¤ð‘¬á¢§; [V5, V6]; xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ; ; # ≯𑜫.᜴ð‘¬á¢§
+xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ≯𑜫󠭇.\u1734ñ’ž¤ð‘¬á¢§; [V5, V6]; xn--hdhx157g68o0g.xn--c0e65eu616c34o7a; ; ; # ≯𑜫.᜴ð‘¬á¢§
+\u1DDBòŽ™á‚·ì”。\u0781; \u1DDBòŽ™á‚·ì”.\u0781; [B1, V5, V6]; xn--vnd148d733ky6n9e.xn--iqb; ; ; # ᷛႷì”.Þ
+\u1DDBòŽ™á‚·á„Šá…¨á†¿ã€‚\u0781; \u1DDBòŽ™á‚·ì”.\u0781; [B1, V5, V6]; xn--vnd148d733ky6n9e.xn--iqb; ; ; # ᷛႷì”.Þ
+\u1DDBòŽ™â´—쏔。\u0781; \u1DDBòŽ™â´—ì”.\u0781; [B1, V5, V6]; xn--zegy26dw47iy6w2f.xn--iqb; ; ; # ᷛⴗì”.Þ
+\u1DDBòŽ™â´—ì”。\u0781; \u1DDBòŽ™â´—ì”.\u0781; [B1, V5, V6]; xn--zegy26dw47iy6w2f.xn--iqb; ; ; # ᷛⴗì”.Þ
+xn--zegy26dw47iy6w2f.xn--iqb; \u1DDBòŽ™â´—ì”.\u0781; [B1, V5, V6]; xn--zegy26dw47iy6w2f.xn--iqb; ; ; # ᷛⴗì”.Þ
+xn--vnd148d733ky6n9e.xn--iqb; \u1DDBòŽ™á‚·ì”.\u0781; [B1, V5, V6]; xn--vnd148d733ky6n9e.xn--iqb; ; ; # ᷛႷì”.Þ
+ß。ð‹³á‚¬\u0FB8; ß.ð‹³á‚¬\u0FB8; [V6]; xn--zca.xn--lgd10cu829c; ; ss.xn--lgd10cu829c; # ß.ð‹³á‚¬à¾¸
+ß。ð‹³á‚¬\u0FB8; ß.ð‹³á‚¬\u0FB8; [V6]; xn--zca.xn--lgd10cu829c; ; ss.xn--lgd10cu829c; # ß.ð‹³á‚¬à¾¸
+ß。ð‹³â´Œ\u0FB8; ß.ð‹³â´Œ\u0FB8; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m; # ß.ð‹³â´Œà¾¸
+SS。ð‹³á‚¬\u0FB8; ss.ð‹³á‚¬\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
+ss。ð‹³â´Œ\u0FB8; ss.ð‹³â´Œ\u0FB8; ; ss.xn--lgd921mvv0m; ; ; # ss.ð‹³â´Œà¾¸
+Ss。ð‹³á‚¬\u0FB8; ss.ð‹³á‚¬\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
+ss.xn--lgd10cu829c; ss.ð‹³á‚¬\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
+ss.xn--lgd921mvv0m; ss.ð‹³â´Œ\u0FB8; ; ss.xn--lgd921mvv0m; ; ; # ss.ð‹³â´Œà¾¸
+ss.ð‹³â´Œ\u0FB8; ; ; ss.xn--lgd921mvv0m; ; ; # ss.ð‹³â´Œà¾¸
+SS.ð‹³á‚¬\u0FB8; ss.ð‹³á‚¬\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
+Ss.ð‹³á‚¬\u0FB8; ss.ð‹³á‚¬\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
+xn--zca.xn--lgd921mvv0m; ß.ð‹³â´Œ\u0FB8; ; xn--zca.xn--lgd921mvv0m; ; ; # ß.ð‹³â´Œà¾¸
+ß.ð‹³â´Œ\u0FB8; ; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m; # ß.ð‹³â´Œà¾¸
+xn--zca.xn--lgd10cu829c; ß.ð‹³á‚¬\u0FB8; [V6]; xn--zca.xn--lgd10cu829c; ; ; # ß.ð‹³á‚¬à¾¸
+ß。ð‹³â´Œ\u0FB8; ß.ð‹³â´Œ\u0FB8; ; xn--zca.xn--lgd921mvv0m; ; ss.xn--lgd921mvv0m; # ß.ð‹³â´Œà¾¸
+SS。ð‹³á‚¬\u0FB8; ss.ð‹³á‚¬\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
+ss。ð‹³â´Œ\u0FB8; ss.ð‹³â´Œ\u0FB8; ; ss.xn--lgd921mvv0m; ; ; # ss.ð‹³â´Œà¾¸
+Ss。ð‹³á‚¬\u0FB8; ss.ð‹³á‚¬\u0FB8; [V6]; ss.xn--lgd10cu829c; ; ; # ss.ð‹³á‚¬à¾¸
+-\u069Eð¶¡.\u200Câ¾\u09CD; -\u069Eð¶¡.\u200C身\u09CD; [B1, C1, V3, V6]; xn----stc7013r.xn--b7b305imj2f; ; xn----stc7013r.xn--b7b1419d; [B1, V3, V6] # -Úž.身à§
+-\u069Eð¶¡.\u200C身\u09CD; ; [B1, C1, V3, V6]; xn----stc7013r.xn--b7b305imj2f; ; xn----stc7013r.xn--b7b1419d; [B1, V3, V6] # -Úž.身à§
+xn----stc7013r.xn--b7b1419d; -\u069Eð¶¡.身\u09CD; [B1, V3, V6]; xn----stc7013r.xn--b7b1419d; ; ; # -Úž.身à§
+xn----stc7013r.xn--b7b305imj2f; -\u069Eð¶¡.\u200C身\u09CD; [B1, C1, V3, V6]; xn----stc7013r.xn--b7b305imj2f; ; ; # -Úž.身à§
+😮\u0764𑈵𞀖.💅\u200D; 😮\u0764𑈵𞀖.💅\u200D; [B1, C2]; xn--opb4277kuc7elqsa.xn--1ug5265p; ; xn--opb4277kuc7elqsa.xn--kr8h; [B1] # 😮ݤ𑈵𞀖.💅
+😮\u0764𑈵𞀖.💅\u200D; ; [B1, C2]; xn--opb4277kuc7elqsa.xn--1ug5265p; ; xn--opb4277kuc7elqsa.xn--kr8h; [B1] # 😮ݤ𑈵𞀖.💅
+xn--opb4277kuc7elqsa.xn--kr8h; 😮\u0764𑈵𞀖.💅; [B1]; xn--opb4277kuc7elqsa.xn--kr8h; ; ; # 😮ݤ𑈵𞀖.💅
+xn--opb4277kuc7elqsa.xn--1ug5265p; 😮\u0764𑈵𞀖.💅\u200D; [B1, C2]; xn--opb4277kuc7elqsa.xn--1ug5265p; ; ; # 😮ݤ𑈵𞀖.💅
+\u08F2\u200D꙳\u0712.á¢\u200Có „; ; [B1, B6, C1, C2, V5, V6]; xn--cnb37g904be26j.xn--89e849ax9363a; ; xn--cnb37gdy00a.xn--89e02253p; [B1, B6, V5, V6] # ࣲ꙳ܒ.á¢
+xn--cnb37gdy00a.xn--89e02253p; \u08F2꙳\u0712.á¢ó „; [B1, B6, V5, V6]; xn--cnb37gdy00a.xn--89e02253p; ; ; # ࣲ꙳ܒ.á¢
+xn--cnb37g904be26j.xn--89e849ax9363a; \u08F2\u200D꙳\u0712.á¢\u200Có „; [B1, B6, C1, C2, V5, V6]; xn--cnb37g904be26j.xn--89e849ax9363a; ; ; # ࣲ꙳ܒ.á¢
+Ⴑ.\u06BF𞯓ᠲ; Ⴑ.\u06BF𞯓ᠲ; [B2, B3, V6]; xn--pnd.xn--ykb840gd555a; ; ; # Ⴑ.ڿᠲ
+Ⴑ.\u06BF𞯓ᠲ; ; [B2, B3, V6]; xn--pnd.xn--ykb840gd555a; ; ; # Ⴑ.ڿᠲ
+ⴑ.\u06BF𞯓ᠲ; ; [B2, B3, V6]; xn--8kj.xn--ykb840gd555a; ; ; # ⴑ.ڿᠲ
+xn--8kj.xn--ykb840gd555a; ⴑ.\u06BF𞯓ᠲ; [B2, B3, V6]; xn--8kj.xn--ykb840gd555a; ; ; # ⴑ.ڿᠲ
+xn--pnd.xn--ykb840gd555a; Ⴑ.\u06BF𞯓ᠲ; [B2, B3, V6]; xn--pnd.xn--ykb840gd555a; ; ; # Ⴑ.ڿᠲ
+ⴑ.\u06BF𞯓ᠲ; ⴑ.\u06BF𞯓ᠲ; [B2, B3, V6]; xn--8kj.xn--ykb840gd555a; ; ; # ⴑ.ڿᠲ
+\u1A5Að›¦\u0C4D。ðš¬ðŸµ; \u1A5Að›¦\u0C4D.ðš¬9; [V5, V6]; xn--lqc703ebm93a.xn--9-000p; ; ; # á©šà±.9
+\u1A5Að›¦\u0C4D。ðš¬9; \u1A5Að›¦\u0C4D.ðš¬9; [V5, V6]; xn--lqc703ebm93a.xn--9-000p; ; ; # á©šà±.9
+xn--lqc703ebm93a.xn--9-000p; \u1A5Að›¦\u0C4D.ðš¬9; [V5, V6]; xn--lqc703ebm93a.xn--9-000p; ; ; # á©šà±.9
+\u200C\u06A0𿺆ðŸ—。Ⴣ꒘\uFCD0ñ˜–; \u200C\u06A0𿺆9.Ⴣ꒘\u0645\u062Eñ˜–; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; ; xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; [B2, B5, V6] # Ú 9.Ⴣ꒘مخ
+\u200C\u06A0𿺆9。Ⴣ꒘\u0645\u062Eñ˜–; \u200C\u06A0𿺆9.Ⴣ꒘\u0645\u062Eñ˜–; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; ; xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; [B2, B5, V6] # Ú 9.Ⴣ꒘مخ
+\u200C\u06A0𿺆9。ⴣ꒘\u0645\u062Eñ˜–; \u200C\u06A0𿺆9.ⴣ꒘\u0645\u062Eñ˜–; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; ; xn--9-vtc42319e.xn--tgb9bz87p833hw316c; [B2, B5, V6] # Ú 9.ⴣ꒘مخ
+xn--9-vtc42319e.xn--tgb9bz87p833hw316c; \u06A0𿺆9.ⴣ꒘\u0645\u062Eñ˜–; [B2, B5, V6]; xn--9-vtc42319e.xn--tgb9bz87p833hw316c; ; ; # Ú 9.ⴣ꒘مخ
+xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; \u200C\u06A0𿺆9.ⴣ꒘\u0645\u062Eñ˜–; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; ; ; # Ú 9.ⴣ꒘مخ
+xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; \u06A0𿺆9.Ⴣ꒘\u0645\u062Eñ˜–; [B2, B5, V6]; xn--9-vtc42319e.xn--tgb9bz61cfn8mw3t2c; ; ; # Ú 9.Ⴣ꒘مخ
+xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; \u200C\u06A0𿺆9.Ⴣ꒘\u0645\u062Eñ˜–; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz61cfn8mw3t2c; ; ; # Ú 9.Ⴣ꒘مخ
+\u200C\u06A0𿺆ðŸ—。ⴣ꒘\uFCD0ñ˜–; \u200C\u06A0𿺆9.ⴣ꒘\u0645\u062Eñ˜–; [B1, B5, C1, V6]; xn--9-vtc736qts91g.xn--tgb9bz87p833hw316c; ; xn--9-vtc42319e.xn--tgb9bz87p833hw316c; [B2, B5, V6] # Ú 9.ⴣ꒘مخ
+ᡖ。\u031F񗛨\u0B82-; ᡖ.\u031F񗛨\u0B82-; [V3, V5, V6]; xn--m8e.xn----mdb555dkk71m; ; ; # ᡖ.̟ஂ-
+ᡖ。\u031F񗛨\u0B82-; ᡖ.\u031F񗛨\u0B82-; [V3, V5, V6]; xn--m8e.xn----mdb555dkk71m; ; ; # ᡖ.̟ஂ-
+xn--m8e.xn----mdb555dkk71m; ᡖ.\u031F񗛨\u0B82-; [V3, V5, V6]; xn--m8e.xn----mdb555dkk71m; ; ; # ᡖ.̟ஂ-
𞠠浘。絧𞀀; 𞠠浘.絧𞀀; [B2, B3]; xn--e0wp491f.xn--ud0a3573e; ; ; # 𞠠浘.絧𞀀
xn--e0wp491f.xn--ud0a3573e; 𞠠浘.絧𞀀; [B2, B3]; xn--e0wp491f.xn--ud0a3573e; ; ; # 𞠠浘.絧𞀀
-֖Ⴋ.ðŸ³â‰¯ï¸’︊; Ö–á‚«.7≯︒; [P1, V5, V6]; xn--hcb887c.xn--7-pgoy530h; ; ; # Ö–á‚«.7≯︒
-֖Ⴋ.ðŸ³≯︒︊; Ö–á‚«.7≯︒; [P1, V5, V6]; xn--hcb887c.xn--7-pgoy530h; ; ; # Ö–á‚«.7≯︒
-֖Ⴋ.7≯。︊; ֖Ⴋ.7≯.; [P1, V5, V6]; xn--hcb887c.xn--7-pgo.; ; ; # ֖Ⴋ.7≯.
-֖Ⴋ.7≯。︊; ֖Ⴋ.7≯.; [P1, V5, V6]; xn--hcb887c.xn--7-pgo.; ; ; # ֖Ⴋ.7≯.
-֖ⴋ.7≯。︊; ֖ⴋ.7≯.; [P1, V5, V6]; xn--hcb613r.xn--7-pgo.; ; ; # ֖ⴋ.7≯.
-֖ⴋ.7≯。︊; ֖ⴋ.7≯.; [P1, V5, V6]; xn--hcb613r.xn--7-pgo.; ; ; # ֖ⴋ.7≯.
-xn--hcb613r.xn--7-pgo.; ֖ⴋ.7≯.; [V5, V6]; xn--hcb613r.xn--7-pgo.; ; ; # ֖ⴋ.7≯.
-xn--hcb887c.xn--7-pgo.; ֖Ⴋ.7≯.; [V5, V6]; xn--hcb887c.xn--7-pgo.; ; ; # ֖Ⴋ.7≯.
-֖ⴋ.ðŸ³≯︒︊; Ö–â´‹.7≯︒; [P1, V5, V6]; xn--hcb613r.xn--7-pgoy530h; ; ; # Ö–â´‹.7≯︒
-֖ⴋ.ðŸ³â‰¯ï¸’︊; Ö–â´‹.7≯︒; [P1, V5, V6]; xn--hcb613r.xn--7-pgoy530h; ; ; # Ö–â´‹.7≯︒
-xn--hcb613r.xn--7-pgoy530h; ֖ⴋ.7≯︒; [V5, V6]; xn--hcb613r.xn--7-pgoy530h; ; ; # ֖ⴋ.7≯︒
-xn--hcb887c.xn--7-pgoy530h; ֖Ⴋ.7≯︒; [V5, V6]; xn--hcb887c.xn--7-pgoy530h; ; ; # ֖Ⴋ.7≯︒
-â€F𑓂。󠺨︒ݾð¹¢; â€fð‘“‚.󠺨︒ݾð¹¢; [B1, C2, P1, V6]; xn--f-tgn9761i.xn--fqb1637j8hky9452a; ; xn--f-kq9i.xn--fqb1637j8hky9452a; [B1, P1, V6] # fð‘“‚.︒ݾð¹¢
-â€F𑓂。󠺨。ݾð¹¢; â€fð‘“‚.󠺨.ݾð¹¢; [B1, C2, P1, V6]; xn--f-tgn9761i.xn--7656e.xn--fqb4175k; ; xn--f-kq9i.xn--7656e.xn--fqb4175k; [B1, P1, V6] # fð‘“‚..ݾð¹¢
-â€f𑓂。󠺨。ݾð¹¢; â€fð‘“‚.󠺨.ݾð¹¢; [B1, C2, P1, V6]; xn--f-tgn9761i.xn--7656e.xn--fqb4175k; ; xn--f-kq9i.xn--7656e.xn--fqb4175k; [B1, P1, V6] # fð‘“‚..ݾð¹¢
-xn--f-kq9i.xn--7656e.xn--fqb4175k; fð‘“‚.󠺨.ݾð¹¢; [B1, V6]; xn--f-kq9i.xn--7656e.xn--fqb4175k; ; ; # fð‘“‚..ݾð¹¢
-xn--f-tgn9761i.xn--7656e.xn--fqb4175k; â€fð‘“‚.󠺨.ݾð¹¢; [B1, C2, V6]; xn--f-tgn9761i.xn--7656e.xn--fqb4175k; ; ; # fð‘“‚..ݾð¹¢
-â€f𑓂。󠺨︒ݾð¹¢; â€fð‘“‚.󠺨︒ݾð¹¢; [B1, C2, P1, V6]; xn--f-tgn9761i.xn--fqb1637j8hky9452a; ; xn--f-kq9i.xn--fqb1637j8hky9452a; [B1, P1, V6] # fð‘“‚.︒ݾð¹¢
-xn--f-kq9i.xn--fqb1637j8hky9452a; fð‘“‚.󠺨︒ݾð¹¢; [B1, V6]; xn--f-kq9i.xn--fqb1637j8hky9452a; ; ; # fð‘“‚.︒ݾð¹¢
-xn--f-tgn9761i.xn--fqb1637j8hky9452a; â€fð‘“‚.󠺨︒ݾð¹¢; [B1, C2, V6]; xn--f-tgn9761i.xn--fqb1637j8hky9452a; ; ; # fð‘“‚.︒ݾð¹¢
-ࡅ🄇ð¼—︒。ð¹»ð‘œ«; ࡅ🄇ð¼—︒.ð¹»ð‘œ«; [B1, B3, P1, V6]; xn--3vb4696jpxkjh7s.xn--zo0di2m; ; ; # ࡅ🄇ð¼—︒.ð¹»ð‘œ«
-à¡…6,ð¼—。。ð¹»ð‘œ«; à¡…6,ð¼—..ð¹»ð‘œ«; [B1, P1, V6, X4_2]; xn--6,-r4e4420y..xn--zo0di2m; [B1, P1, V6, A4_2]; ; # à¡…6,ð¼—..ð¹»ð‘œ«
-xn--6,-r4e4420y..xn--zo0di2m; à¡…6,ð¼—..ð¹»ð‘œ«; [B1, P1, V6, X4_2]; xn--6,-r4e4420y..xn--zo0di2m; [B1, P1, V6, A4_2]; ; # à¡…6,ð¼—..ð¹»ð‘œ«
-xn--3vb4696jpxkjh7s.xn--zo0di2m; ࡅ🄇ð¼—︒.ð¹»ð‘œ«; [B1, B3, V6]; xn--3vb4696jpxkjh7s.xn--zo0di2m; ; ; # ࡅ🄇ð¼—︒.ð¹»ð‘œ«
-ð¹ˆ.᷀𑈱ð¦­; ; [B1, P1, V5, V6]; xn--jn0d.xn--7dg0871h3lf; ; ; # .᷀𑈱ð¦­
-xn--jn0d.xn--7dg0871h3lf; ð¹ˆ.᷀𑈱ð¦­; [B1, V5, V6]; xn--jn0d.xn--7dg0871h3lf; ; ; # .᷀𑈱ð¦­
-Ⴂ䠺。𞤃ñ…Žó™®¦Ú“; Ⴂ䠺.𞤥ñ…Žó™®¦Ú“; [B2, P1, V6]; xn--9md875z.xn--pjb9818vg4xno967d; ; ; # Ⴂ䠺.𞤥ړ
-ⴂ䠺。𞤥ñ…Žó™®¦Ú“; â´‚ä º.𞤥ñ…Žó™®¦Ú“; [B2, P1, V6]; xn--tkj638f.xn--pjb9818vg4xno967d; ; ; # â´‚ä º.𞤥ړ
-xn--tkj638f.xn--pjb9818vg4xno967d; â´‚ä º.𞤥ñ…Žó™®¦Ú“; [B2, V6]; xn--tkj638f.xn--pjb9818vg4xno967d; ; ; # â´‚ä º.𞤥ړ
-xn--9md875z.xn--pjb9818vg4xno967d; Ⴂ䠺.𞤥ñ…Žó™®¦Ú“; [B2, V6]; xn--9md875z.xn--pjb9818vg4xno967d; ; ; # Ⴂ䠺.𞤥ړ
-ⴂ䠺。𞤃ñ…Žó™®¦Ú“; â´‚ä º.𞤥ñ…Žó™®¦Ú“; [B2, P1, V6]; xn--tkj638f.xn--pjb9818vg4xno967d; ; ; # â´‚ä º.𞤥ړ
-🄇ä¼ï¸’.𜙚꣄; ; [P1, V6]; xn--woqs083bel0g.xn--0f9ao925c; ; ; # 🄇ä¼ï¸’.꣄
-6,ä¼ã€‚.𜙚꣄; 6,ä¼..𜙚꣄; [P1, V6, X4_2]; xn--6,-7i3c..xn--0f9ao925c; [P1, V6, A4_2]; ; # 6,ä¼..꣄
-xn--6,-7i3c..xn--0f9ao925c; 6,ä¼..𜙚꣄; [P1, V6, X4_2]; xn--6,-7i3c..xn--0f9ao925c; [P1, V6, A4_2]; ; # 6,ä¼..꣄
-xn--woqs083bel0g.xn--0f9ao925c; 🄇ä¼ï¸’.𜙚꣄; [V6]; xn--woqs083bel0g.xn--0f9ao925c; ; ; # 🄇ä¼ï¸’.꣄
-â€ð¹ ê¯­ï¿»ã€‚â€ð«“Ⴚ𑂹; â€ð¹ ê¯­ï¿».â€ð«“Ⴚ𑂹; [B1, C2, P1, V6]; xn--1ugz126coy7bdbm.xn--ynd959evs1pv6e; ; xn--429az70n29i.xn--ynd3619jqyd; [B1, B2, B3, P1, V6] # ð¹ ê¯­.ð«“Ⴚ𑂹
-â€ð¹ ê¯­ï¿»ã€‚â€ð«“â´šð‘‚¹; â€ð¹ ê¯­ï¿».â€ð«“â´šð‘‚¹; [B1, C2, P1, V6]; xn--1ugz126coy7bdbm.xn--1ug062chv7ov6e; ; xn--429az70n29i.xn--ilj7702eqyd; [B1, B2, B3, P1, V6] # ð¹ ê¯­.ð«“â´šð‘‚¹
-xn--429az70n29i.xn--ilj7702eqyd; ð¹ ê¯­ï¿».ð«“â´šð‘‚¹; [B1, B2, B3, V6]; xn--429az70n29i.xn--ilj7702eqyd; ; ; # ð¹ ê¯­.ð«“â´šð‘‚¹
-xn--1ugz126coy7bdbm.xn--1ug062chv7ov6e; â€ð¹ ê¯­ï¿».â€ð«“â´šð‘‚¹; [B1, C2, V6]; xn--1ugz126coy7bdbm.xn--1ug062chv7ov6e; ; ; # ð¹ ê¯­.ð«“â´šð‘‚¹
-xn--429az70n29i.xn--ynd3619jqyd; ð¹ ê¯­ï¿».ð«“Ⴚ𑂹; [B1, B2, B3, V6]; xn--429az70n29i.xn--ynd3619jqyd; ; ; # ð¹ ê¯­.ð«“Ⴚ𑂹
-xn--1ugz126coy7bdbm.xn--ynd959evs1pv6e; â€ð¹ ê¯­ï¿».â€ð«“Ⴚ𑂹; [B1, C2, V6]; xn--1ugz126coy7bdbm.xn--ynd959evs1pv6e; ; ; # ð¹ ê¯­.ð«“Ⴚ𑂹
-󠆠.ñ·´óŒŸˆ; .ñ·´óŒŸˆ; [P1, V6, X4_2]; .xn--rx21bhv12i; [P1, V6, A4_2]; ; # .
-ó † .ñ·´óŒŸˆ; .ñ·´óŒŸˆ; [P1, V6, X4_2]; .xn--rx21bhv12i; [P1, V6, A4_2]; ; # .
+\u0596Ⴋ.ðŸ³â‰¯ï¸’\uFE0A; \u0596á‚«.7≯︒; [V5, V6]; xn--hcb887c.xn--7-pgoy530h; ; ; # Ö–á‚«.7≯︒
+\u0596Ⴋ.ðŸ³>\u0338︒\uFE0A; \u0596á‚«.7≯︒; [V5, V6]; xn--hcb887c.xn--7-pgoy530h; ; ; # Ö–á‚«.7≯︒
+\u0596Ⴋ.7≯。\uFE0A; \u0596Ⴋ.7≯.; [V5, V6]; xn--hcb887c.xn--7-pgo.; ; ; # ֖Ⴋ.7≯.
+\u0596Ⴋ.7>\u0338。\uFE0A; \u0596Ⴋ.7≯.; [V5, V6]; xn--hcb887c.xn--7-pgo.; ; ; # ֖Ⴋ.7≯.
+\u0596ⴋ.7>\u0338。\uFE0A; \u0596ⴋ.7≯.; [V5]; xn--hcb613r.xn--7-pgo.; ; ; # ֖ⴋ.7≯.
+\u0596ⴋ.7≯。\uFE0A; \u0596ⴋ.7≯.; [V5]; xn--hcb613r.xn--7-pgo.; ; ; # ֖ⴋ.7≯.
+xn--hcb613r.xn--7-pgo.; \u0596ⴋ.7≯.; [V5]; xn--hcb613r.xn--7-pgo.; ; ; # ֖ⴋ.7≯.
+xn--hcb887c.xn--7-pgo.; \u0596Ⴋ.7≯.; [V5, V6]; xn--hcb887c.xn--7-pgo.; ; ; # ֖Ⴋ.7≯.
+\u0596ⴋ.ðŸ³>\u0338︒\uFE0A; \u0596â´‹.7≯︒; [V5, V6]; xn--hcb613r.xn--7-pgoy530h; ; ; # Ö–â´‹.7≯︒
+\u0596ⴋ.ðŸ³â‰¯ï¸’\uFE0A; \u0596â´‹.7≯︒; [V5, V6]; xn--hcb613r.xn--7-pgoy530h; ; ; # Ö–â´‹.7≯︒
+xn--hcb613r.xn--7-pgoy530h; \u0596ⴋ.7≯︒; [V5, V6]; xn--hcb613r.xn--7-pgoy530h; ; ; # ֖ⴋ.7≯︒
+xn--hcb887c.xn--7-pgoy530h; \u0596Ⴋ.7≯︒; [V5, V6]; xn--hcb887c.xn--7-pgoy530h; ; ; # ֖Ⴋ.7≯︒
+\u200DF𑓂。󠺨︒\u077Eð¹¢; \u200Dfð‘“‚.󠺨︒\u077Eð¹¢; [B1, C2, V6]; xn--f-tgn9761i.xn--fqb1637j8hky9452a; ; xn--f-kq9i.xn--fqb1637j8hky9452a; [B1, V6] # fð‘“‚.︒ݾð¹¢
+\u200DF𑓂。󠺨。\u077Eð¹¢; \u200Dfð‘“‚.󠺨.\u077Eð¹¢; [B1, C2, V6]; xn--f-tgn9761i.xn--7656e.xn--fqb4175k; ; xn--f-kq9i.xn--7656e.xn--fqb4175k; [B1, V6] # fð‘“‚..ݾð¹¢
+\u200Df𑓂。󠺨。\u077Eð¹¢; \u200Dfð‘“‚.󠺨.\u077Eð¹¢; [B1, C2, V6]; xn--f-tgn9761i.xn--7656e.xn--fqb4175k; ; xn--f-kq9i.xn--7656e.xn--fqb4175k; [B1, V6] # fð‘“‚..ݾð¹¢
+xn--f-kq9i.xn--7656e.xn--fqb4175k; fð‘“‚.󠺨.\u077Eð¹¢; [B1, V6]; xn--f-kq9i.xn--7656e.xn--fqb4175k; ; ; # fð‘“‚..ݾð¹¢
+xn--f-tgn9761i.xn--7656e.xn--fqb4175k; \u200Dfð‘“‚.󠺨.\u077Eð¹¢; [B1, C2, V6]; xn--f-tgn9761i.xn--7656e.xn--fqb4175k; ; ; # fð‘“‚..ݾð¹¢
+\u200Df𑓂。󠺨︒\u077Eð¹¢; \u200Dfð‘“‚.󠺨︒\u077Eð¹¢; [B1, C2, V6]; xn--f-tgn9761i.xn--fqb1637j8hky9452a; ; xn--f-kq9i.xn--fqb1637j8hky9452a; [B1, V6] # fð‘“‚.︒ݾð¹¢
+xn--f-kq9i.xn--fqb1637j8hky9452a; fð‘“‚.󠺨︒\u077Eð¹¢; [B1, V6]; xn--f-kq9i.xn--fqb1637j8hky9452a; ; ; # fð‘“‚.︒ݾð¹¢
+xn--f-tgn9761i.xn--fqb1637j8hky9452a; \u200Dfð‘“‚.󠺨︒\u077Eð¹¢; [B1, C2, V6]; xn--f-tgn9761i.xn--fqb1637j8hky9452a; ; ; # fð‘“‚.︒ݾð¹¢
+\u0845🄇ð¼—︒。ð¹»ð‘œ«; \u0845🄇ð¼—︒.ð¹»ð‘œ«; [B1, B3, V6]; xn--3vb4696jpxkjh7s.xn--zo0di2m; ; ; # ࡅ🄇ð¼—︒.ð¹»ð‘œ«
+\u08456,ð¼—。。ð¹»ð‘œ«; \u08456,ð¼—..ð¹»ð‘œ«; [B1, V6, X4_2]; xn--6,-r4e4420y..xn--zo0di2m; [B1, V6, A4_2]; ; # à¡…6,ð¼—..ð¹»ð‘œ«
+xn--6,-r4e4420y..xn--zo0di2m; \u08456,ð¼—..ð¹»ð‘œ«; [B1, V6, X4_2]; xn--6,-r4e4420y..xn--zo0di2m; [B1, V6, A4_2]; ; # à¡…6,ð¼—..ð¹»ð‘œ«
+xn--3vb4696jpxkjh7s.xn--zo0di2m; \u0845🄇ð¼—︒.ð¹»ð‘œ«; [B1, B3, V6]; xn--3vb4696jpxkjh7s.xn--zo0di2m; ; ; # ࡅ🄇ð¼—︒.ð¹»ð‘œ«
+ð¹ˆ.\u1DC0𑈱ð¦­; ; [B1, V5, V6]; xn--jn0d.xn--7dg0871h3lf; ; ; # .᷀𑈱ð¦­
+xn--jn0d.xn--7dg0871h3lf; ð¹ˆ.\u1DC0𑈱ð¦­; [B1, V5, V6]; xn--jn0d.xn--7dg0871h3lf; ; ; # .᷀𑈱ð¦­
+Ⴂ䠺。𞤃ñ…Žó™®¦\u0693; Ⴂ䠺.𞤥ñ…Žó™®¦\u0693; [B2, V6]; xn--9md875z.xn--pjb9818vg4xno967d; ; ; # Ⴂ䠺.𞤥ړ
+ⴂ䠺。𞤥ñ…Žó™®¦\u0693; â´‚ä º.𞤥ñ…Žó™®¦\u0693; [B2, V6]; xn--tkj638f.xn--pjb9818vg4xno967d; ; ; # â´‚ä º.𞤥ړ
+xn--tkj638f.xn--pjb9818vg4xno967d; â´‚ä º.𞤥ñ…Žó™®¦\u0693; [B2, V6]; xn--tkj638f.xn--pjb9818vg4xno967d; ; ; # â´‚ä º.𞤥ړ
+xn--9md875z.xn--pjb9818vg4xno967d; Ⴂ䠺.𞤥ñ…Žó™®¦\u0693; [B2, V6]; xn--9md875z.xn--pjb9818vg4xno967d; ; ; # Ⴂ䠺.𞤥ړ
+ⴂ䠺。𞤃ñ…Žó™®¦\u0693; â´‚ä º.𞤥ñ…Žó™®¦\u0693; [B2, V6]; xn--tkj638f.xn--pjb9818vg4xno967d; ; ; # â´‚ä º.𞤥ړ
+🄇ä¼ï¸’.𜙚\uA8C4; ; [V6]; xn--woqs083bel0g.xn--0f9ao925c; ; ; # 🄇ä¼ï¸’.꣄
+6,ä¼ã€‚.𜙚\uA8C4; 6,ä¼..𜙚\uA8C4; [V6, X4_2]; xn--6,-7i3c..xn--0f9ao925c; [V6, A4_2]; ; # 6,ä¼..꣄
+xn--6,-7i3c..xn--0f9ao925c; 6,ä¼..𜙚\uA8C4; [V6, X4_2]; xn--6,-7i3c..xn--0f9ao925c; [V6, A4_2]; ; # 6,ä¼..꣄
+xn--woqs083bel0g.xn--0f9ao925c; 🄇ä¼ï¸’.𜙚\uA8C4; [V6]; xn--woqs083bel0g.xn--0f9ao925c; ; ; # 🄇ä¼ï¸’.꣄
+\u200Dð¹ \uABED\uFFFB。\u200Dð«“Ⴚ𑂹; \u200Dð¹ \uABED\uFFFB.\u200Dð«“Ⴚ𑂹; [B1, C2, V6]; xn--1ugz126coy7bdbm.xn--ynd959evs1pv6e; ; xn--429az70n29i.xn--ynd3619jqyd; [B1, B2, B3, V6] # ð¹ ê¯­.ð«“Ⴚ𑂹
+\u200Dð¹ \uABED\uFFFB。\u200Dð«“â´šð‘‚¹; \u200Dð¹ \uABED\uFFFB.\u200Dð«“â´šð‘‚¹; [B1, C2, V6]; xn--1ugz126coy7bdbm.xn--1ug062chv7ov6e; ; xn--429az70n29i.xn--ilj7702eqyd; [B1, B2, B3, V6] # ð¹ ê¯­.ð«“â´šð‘‚¹
+xn--429az70n29i.xn--ilj7702eqyd; ð¹ \uABED\uFFFB.ð«“â´šð‘‚¹; [B1, B2, B3, V6]; xn--429az70n29i.xn--ilj7702eqyd; ; ; # ð¹ ê¯­.ð«“â´šð‘‚¹
+xn--1ugz126coy7bdbm.xn--1ug062chv7ov6e; \u200Dð¹ \uABED\uFFFB.\u200Dð«“â´šð‘‚¹; [B1, C2, V6]; xn--1ugz126coy7bdbm.xn--1ug062chv7ov6e; ; ; # ð¹ ê¯­.ð«“â´šð‘‚¹
+xn--429az70n29i.xn--ynd3619jqyd; ð¹ \uABED\uFFFB.ð«“Ⴚ𑂹; [B1, B2, B3, V6]; xn--429az70n29i.xn--ynd3619jqyd; ; ; # ð¹ ê¯­.ð«“Ⴚ𑂹
+xn--1ugz126coy7bdbm.xn--ynd959evs1pv6e; \u200Dð¹ \uABED\uFFFB.\u200Dð«“Ⴚ𑂹; [B1, C2, V6]; xn--1ugz126coy7bdbm.xn--ynd959evs1pv6e; ; ; # ð¹ ê¯­.ð«“Ⴚ𑂹
+󠆠.ñ·´óŒŸˆ; .ñ·´óŒŸˆ; [V6, X4_2]; .xn--rx21bhv12i; [V6, A4_2]; ; # .
+ó † .ñ·´óŒŸˆ; .ñ·´óŒŸˆ; [V6, X4_2]; .xn--rx21bhv12i; [V6, A4_2]; ; # .
.xn--rx21bhv12i; .ñ·´óŒŸˆ; [V6, X4_2]; .xn--rx21bhv12i; [V6, A4_2]; ; # .
-ð«ƒâ€Œá‚¦.≠𞷙; ; [B1, B2, B3, C1, P1, V6]; xn--end799ekr1p.xn--1ch2802p; ; xn--end1719j.xn--1ch2802p; [B1, B2, B3, P1, V6] # ð«ƒá‚¦.≠
-ð«ƒâ€Œá‚¦.≠𞷙; ð«ƒâ€Œá‚¦.≠𞷙; [B1, B2, B3, C1, P1, V6]; xn--end799ekr1p.xn--1ch2802p; ; xn--end1719j.xn--1ch2802p; [B1, B2, B3, P1, V6] # ð«ƒá‚¦.≠
-ð«ƒâ€Œâ´†.≠𞷙; ð«ƒâ€Œâ´†.≠𞷙; [B1, B2, B3, C1, P1, V6]; xn--0ug132csv7o.xn--1ch2802p; ; xn--xkjz802e.xn--1ch2802p; [B1, B2, B3, P1, V6] # ð«ƒâ´†.≠
-ð«ƒâ€Œâ´†.≠𞷙; ; [B1, B2, B3, C1, P1, V6]; xn--0ug132csv7o.xn--1ch2802p; ; xn--xkjz802e.xn--1ch2802p; [B1, B2, B3, P1, V6] # ð«ƒâ´†.≠
+ð«ƒ\u200CႦ.≠𞷙; ; [B1, B2, B3, C1, V6]; xn--end799ekr1p.xn--1ch2802p; ; xn--end1719j.xn--1ch2802p; [B1, B2, B3, V6] # ð«ƒá‚¦.≠
+ð«ƒ\u200CႦ.=\u0338ðž·™; ð«ƒ\u200CႦ.≠𞷙; [B1, B2, B3, C1, V6]; xn--end799ekr1p.xn--1ch2802p; ; xn--end1719j.xn--1ch2802p; [B1, B2, B3, V6] # ð«ƒá‚¦.≠
+ð«ƒ\u200Câ´†.=\u0338ðž·™; ð«ƒ\u200Câ´†.≠𞷙; [B1, B2, B3, C1, V6]; xn--0ug132csv7o.xn--1ch2802p; ; xn--xkjz802e.xn--1ch2802p; [B1, B2, B3, V6] # ð«ƒâ´†.≠
+ð«ƒ\u200Câ´†.≠𞷙; ; [B1, B2, B3, C1, V6]; xn--0ug132csv7o.xn--1ch2802p; ; xn--xkjz802e.xn--1ch2802p; [B1, B2, B3, V6] # ð«ƒâ´†.≠
xn--xkjz802e.xn--1ch2802p; ð«ƒâ´†.≠𞷙; [B1, B2, B3, V6]; xn--xkjz802e.xn--1ch2802p; ; ; # ð«ƒâ´†.≠
-xn--0ug132csv7o.xn--1ch2802p; ð«ƒâ€Œâ´†.≠𞷙; [B1, B2, B3, C1, V6]; xn--0ug132csv7o.xn--1ch2802p; ; ; # ð«ƒâ´†.≠
+xn--0ug132csv7o.xn--1ch2802p; ð«ƒ\u200Câ´†.≠𞷙; [B1, B2, B3, C1, V6]; xn--0ug132csv7o.xn--1ch2802p; ; ; # ð«ƒâ´†.≠
xn--end1719j.xn--1ch2802p; ð«ƒá‚¦.≠𞷙; [B1, B2, B3, V6]; xn--end1719j.xn--1ch2802p; ; ; # ð«ƒá‚¦.≠
-xn--end799ekr1p.xn--1ch2802p; ð«ƒâ€Œá‚¦.≠𞷙; [B1, B2, B3, C1, V6]; xn--end799ekr1p.xn--1ch2802p; ; ; # ð«ƒá‚¦.≠
-ó ²ð™©¢ðŸ¥ê˜Œï¼Žà¡; ó ²ð™©¢3ꘌ.à¡; [B1, P1, V6]; xn--3-0g3es485d8i15h.xn--zvb; ; ; # 3ꘌ.à¡
-ó ²ð™©¢3ꘌ.à¡; ; [B1, P1, V6]; xn--3-0g3es485d8i15h.xn--zvb; ; ; # 3ꘌ.à¡
-xn--3-0g3es485d8i15h.xn--zvb; ó ²ð™©¢3ꘌ.à¡; [B1, V6]; xn--3-0g3es485d8i15h.xn--zvb; ; ; # 3ꘌ.à¡
--.ᢆ󡲣-; ; [P1, V3, V5, V6]; -.xn----pbkx6497q; ; ; # -.ᢆ-
--.xn----pbkx6497q; -.ᢆ󡲣-; [V3, V5, V6]; -.xn----pbkx6497q; ; ; # -.ᢆ-
-󲚗‌。‌𞰆ς; 󲚗‌.‌𞰆ς; [B1, B6, C1, P1, V6]; xn--0ug76062m.xn--3xa795lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, P1, V6] # .ς
-󲚗‌。‌𞰆ς; 󲚗‌.‌𞰆ς; [B1, B6, C1, P1, V6]; xn--0ug76062m.xn--3xa795lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, P1, V6] # .ς
-󲚗‌。‌𞰆Σ; 󲚗‌.‌𞰆σ; [B1, B6, C1, P1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, P1, V6] # .σ
-󲚗‌。‌𞰆σ; 󲚗‌.‌𞰆σ; [B1, B6, C1, P1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, P1, V6] # .σ
+xn--end799ekr1p.xn--1ch2802p; ð«ƒ\u200CႦ.≠𞷙; [B1, B2, B3, C1, V6]; xn--end799ekr1p.xn--1ch2802p; ; ; # ð«ƒá‚¦.≠
+ó ²ð™©¢ðŸ¥ê˜Œï¼Ž\u0841; ó ²ð™©¢3ꘌ.\u0841; [B1, V6]; xn--3-0g3es485d8i15h.xn--zvb; ; ; # 3ꘌ.à¡
+ó ²ð™©¢3ꘌ.\u0841; ; [B1, V6]; xn--3-0g3es485d8i15h.xn--zvb; ; ; # 3ꘌ.à¡
+xn--3-0g3es485d8i15h.xn--zvb; ó ²ð™©¢3ꘌ.\u0841; [B1, V6]; xn--3-0g3es485d8i15h.xn--zvb; ; ; # 3ꘌ.à¡
+-.\u1886󡲣-; ; [V3, V5, V6]; -.xn----pbkx6497q; ; ; # -.ᢆ-
+-.xn----pbkx6497q; -.\u1886󡲣-; [V3, V5, V6]; -.xn----pbkx6497q; ; ; # -.ᢆ-
+󲚗\u200C。\u200C𞰆ς; 󲚗\u200C.\u200C𞰆ς; [B1, B6, C1, V6]; xn--0ug76062m.xn--3xa795lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .ς
+󲚗\u200C。\u200C𞰆ς; 󲚗\u200C.\u200C𞰆ς; [B1, B6, C1, V6]; xn--0ug76062m.xn--3xa795lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .ς
+󲚗\u200C。\u200C𞰆Σ; 󲚗\u200C.\u200C𞰆σ; [B1, B6, C1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .σ
+󲚗\u200C。\u200C𞰆σ; 󲚗\u200C.\u200C𞰆σ; [B1, B6, C1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .σ
xn--qp42f.xn--4xa3011w; 󲚗.𞰆σ; [B2, B3, V6]; xn--qp42f.xn--4xa3011w; ; ; # .σ
-xn--0ug76062m.xn--4xa595lhn92a; 󲚗‌.‌𞰆σ; [B1, B6, C1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; ; # .σ
-xn--0ug76062m.xn--3xa795lhn92a; 󲚗‌.‌𞰆ς; [B1, B6, C1, V6]; xn--0ug76062m.xn--3xa795lhn92a; ; ; # .ς
-󲚗‌。‌𞰆Σ; 󲚗‌.‌𞰆σ; [B1, B6, C1, P1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, P1, V6] # .σ
-󲚗‌。‌𞰆σ; 󲚗‌.‌𞰆σ; [B1, B6, C1, P1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, P1, V6] # .σ
-堕𑓂ᬂ。ð®‡ðž¤½â€Œ-; 堕𑓂ᬂ.ð®‡ðž¤½â€Œ-; [B3, C1, V3]; xn--5sf345zdk8h.xn----rgnt157hwl9g; ; xn--5sf345zdk8h.xn----iv5iw606c; [B3, V3] # 堕𑓂ᬂ.ð®‡ðž¤½-
-堕𑓂ᬂ。ð®‡ðž¤›â€Œ-; 堕𑓂ᬂ.ð®‡ðž¤½â€Œ-; [B3, C1, V3]; xn--5sf345zdk8h.xn----rgnt157hwl9g; ; xn--5sf345zdk8h.xn----iv5iw606c; [B3, V3] # 堕𑓂ᬂ.ð®‡ðž¤½-
-xn--5sf345zdk8h.xn----iv5iw606c; 堕𑓂ᬂ.ð®‡ðž¤½-; [B3, V3]; xn--5sf345zdk8h.xn----iv5iw606c; ; ; # 堕𑓂ᬂ.ð®‡ðž¤½-
-xn--5sf345zdk8h.xn----rgnt157hwl9g; 堕𑓂ᬂ.ð®‡ðž¤½â€Œ-; [B3, C1, V3]; xn--5sf345zdk8h.xn----rgnt157hwl9g; ; ; # 堕𑓂ᬂ.ð®‡ðž¤½-
-ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥Ï‚تς; ð¹¶ð‘†á¡•ðž¤¢.ᡥςتς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xaa16plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥςتς
-ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥςتς; ð¹¶ð‘†á¡•ðž¤¢.ᡥςتς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xaa16plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥςتς
-ð¹¶ð‘†á¡•ðž¤€ã€‚ᡥΣتΣ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
-ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥσتσ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
-xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
-xn--l8e1317j1ebz456b.xn--3xaa16plx4a; ð¹¶ð‘†á¡•ðž¤¢.ᡥςتς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xaa16plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥςتς
-ð¹¶ð‘†á¡•ðž¤€ï½¡á¡¥Î£ØªÎ£; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
-ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥ÏƒØªÏƒ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
-ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥΣتΣ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
-ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥΣتσ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
-ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥΣتς; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς
-ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥσتς; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς
-xn--l8e1317j1ebz456b.xn--3xab95plx4a; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς
-ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥Î£ØªÎ£; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
-ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥Î£ØªÏƒ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
-ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥Î£ØªÏ‚; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς
-ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥ÏƒØªÏ‚; ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς
-ó’°ï¼Ž-ðŸ»ÃŸ; ó’°.-5ß; [P1, V3, V6]; xn--t960e.xn---5-hia; ; xn--t960e.-5ss; # .-5ß
-ó’°.-5ß; ; [P1, V3, V6]; xn--t960e.xn---5-hia; ; xn--t960e.-5ss; # .-5ß
-ó’°.-5SS; ó’°.-5ss; [P1, V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
-ó’°.-5ss; ; [P1, V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
+xn--0ug76062m.xn--4xa595lhn92a; 󲚗\u200C.\u200C𞰆σ; [B1, B6, C1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; ; # .σ
+xn--0ug76062m.xn--3xa795lhn92a; 󲚗\u200C.\u200C𞰆ς; [B1, B6, C1, V6]; xn--0ug76062m.xn--3xa795lhn92a; ; ; # .ς
+󲚗\u200C。\u200C𞰆Σ; 󲚗\u200C.\u200C𞰆σ; [B1, B6, C1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .σ
+󲚗\u200C。\u200C𞰆σ; 󲚗\u200C.\u200C𞰆σ; [B1, B6, C1, V6]; xn--0ug76062m.xn--4xa595lhn92a; ; xn--qp42f.xn--4xa3011w; [B2, B3, V6] # .σ
+å •ð‘“‚\u1B02。ð®‡ðž¤½\u200C-; å •ð‘“‚\u1B02.ð®‡ðž¤½\u200C-; [B3, C1, V3]; xn--5sf345zdk8h.xn----rgnt157hwl9g; ; xn--5sf345zdk8h.xn----iv5iw606c; [B3, V3] # 堕𑓂ᬂ.ð®‡ðž¤½-
+å •ð‘“‚\u1B02。ð®‡ðž¤›\u200C-; å •ð‘“‚\u1B02.ð®‡ðž¤½\u200C-; [B3, C1, V3]; xn--5sf345zdk8h.xn----rgnt157hwl9g; ; xn--5sf345zdk8h.xn----iv5iw606c; [B3, V3] # 堕𑓂ᬂ.ð®‡ðž¤½-
+xn--5sf345zdk8h.xn----iv5iw606c; å •ð‘“‚\u1B02.ð®‡ðž¤½-; [B3, V3]; xn--5sf345zdk8h.xn----iv5iw606c; ; ; # 堕𑓂ᬂ.ð®‡ðž¤½-
+xn--5sf345zdk8h.xn----rgnt157hwl9g; å •ð‘“‚\u1B02.ð®‡ðž¤½\u200C-; [B3, C1, V3]; xn--5sf345zdk8h.xn----rgnt157hwl9g; ; ; # 堕𑓂ᬂ.ð®‡ðž¤½-
+ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥Ï‚\u062AÏ‚; ð¹¶ð‘†á¡•ðž¤¢.ᡥς\u062AÏ‚; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xaa16plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥςتς
+ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥς\u062AÏ‚; ð¹¶ð‘†á¡•ðž¤¢.ᡥς\u062AÏ‚; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xaa16plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥςتς
+ð¹¶ð‘†á¡•ðž¤€ã€‚ᡥΣ\u062AΣ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
+ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥσ\u062Aσ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
+xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
+xn--l8e1317j1ebz456b.xn--3xaa16plx4a; ð¹¶ð‘†á¡•ðž¤¢.ᡥς\u062AÏ‚; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xaa16plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥςتς
+ð¹¶ð‘†á¡•ðž¤€ï½¡á¡¥Î£\u062AΣ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
+ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥Ïƒ\u062Aσ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
+ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥΣ\u062AΣ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
+ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥΣ\u062Aσ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
+ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥΣ\u062AÏ‚; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062AÏ‚; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς
+ð¹¶ð‘†á¡•ðž¤¢ã€‚ᡥσ\u062AÏ‚; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062AÏ‚; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς
+xn--l8e1317j1ebz456b.xn--3xab95plx4a; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062AÏ‚; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς
+ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥Î£\u062AΣ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
+ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥Î£\u062Aσ; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062Aσ; [B1, B5]; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; ; ; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتσ
+ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥Î£\u062AÏ‚; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062AÏ‚; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς
+ð¹¶ð‘†á¡•ðž¤¢ï½¡á¡¥Ïƒ\u062AÏ‚; ð¹¶ð‘†á¡•ðž¤¢.ᡥσ\u062AÏ‚; [B1, B5]; xn--l8e1317j1ebz456b.xn--3xab95plx4a; ; xn--l8e1317j1ebz456b.xn--4xaa85plx4a; # ð¹¶ð‘†á¡•ðž¤¢.ᡥσتς
+ó’°ï¼Ž-ðŸ»ÃŸ; ó’°.-5ß; [V3, V6]; xn--t960e.xn---5-hia; ; xn--t960e.-5ss; # .-5ß
+ó’°.-5ß; ; [V3, V6]; xn--t960e.xn---5-hia; ; xn--t960e.-5ss; # .-5ß
+ó’°.-5SS; ó’°.-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
+ó’°.-5ss; ; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
xn--t960e.-5ss; ó’°.-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
xn--t960e.xn---5-hia; ó’°.-5ß; [V3, V6]; xn--t960e.xn---5-hia; ; ; # .-5ß
-ó’°ï¼Ž-ðŸ»SS; ó’°.-5ss; [P1, V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
-ó’°ï¼Ž-ðŸ»ss; ó’°.-5ss; [P1, V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
-ó’°ï¼Ž-ðŸ»Ss; ó’°.-5ss; [P1, V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
-ó’°.-5Ss; ó’°.-5ss; [P1, V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
-â€ð¨¿.🤒Ⴥò‘®¶; ; [C2, P1, V6]; xn--1ug9533g.xn--9nd3211w0gz4b; ; xn--0s9c.xn--9nd3211w0gz4b; [P1, V5, V6] # ð¨¿.🤒Ⴥ
-â€ð¨¿.🤒ⴥò‘®¶; ; [C2, P1, V6]; xn--1ug9533g.xn--tljz038l0gz4b; ; xn--0s9c.xn--tljz038l0gz4b; [P1, V5, V6] # ð¨¿.🤒ⴥ
+ó’°ï¼Ž-ðŸ»SS; ó’°.-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
+ó’°ï¼Ž-ðŸ»ss; ó’°.-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
+ó’°ï¼Ž-ðŸ»Ss; ó’°.-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
+ó’°.-5Ss; ó’°.-5ss; [V3, V6]; xn--t960e.-5ss; ; ; # .-5ss
+\u200Dð¨¿.🤒Ⴥò‘®¶; ; [C2, V6]; xn--1ug9533g.xn--9nd3211w0gz4b; ; xn--0s9c.xn--9nd3211w0gz4b; [V5, V6] # ð¨¿.🤒Ⴥ
+\u200Dð¨¿.🤒ⴥò‘®¶; ; [C2, V6]; xn--1ug9533g.xn--tljz038l0gz4b; ; xn--0s9c.xn--tljz038l0gz4b; [V5, V6] # ð¨¿.🤒ⴥ
xn--0s9c.xn--tljz038l0gz4b; ð¨¿.🤒ⴥò‘®¶; [V5, V6]; xn--0s9c.xn--tljz038l0gz4b; ; ; # ð¨¿.🤒ⴥ
-xn--1ug9533g.xn--tljz038l0gz4b; â€ð¨¿.🤒ⴥò‘®¶; [C2, V6]; xn--1ug9533g.xn--tljz038l0gz4b; ; ; # ð¨¿.🤒ⴥ
+xn--1ug9533g.xn--tljz038l0gz4b; \u200Dð¨¿.🤒ⴥò‘®¶; [C2, V6]; xn--1ug9533g.xn--tljz038l0gz4b; ; ; # ð¨¿.🤒ⴥ
xn--0s9c.xn--9nd3211w0gz4b; ð¨¿.🤒Ⴥò‘®¶; [V5, V6]; xn--0s9c.xn--9nd3211w0gz4b; ; ; # ð¨¿.🤒Ⴥ
-xn--1ug9533g.xn--9nd3211w0gz4b; â€ð¨¿.🤒Ⴥò‘®¶; [C2, V6]; xn--1ug9533g.xn--9nd3211w0gz4b; ; ; # ð¨¿.🤒Ⴥ
-𵋅。ß𬵩â€; 𵋅.ß𬵩â€; [C2, P1, V6]; xn--ey1p.xn--zca870nz438b; ; xn--ey1p.xn--ss-eq36b; [P1, V6] # .ß𬵩
-𵋅。SS𬵩â€; 𵋅.ss𬵩â€; [C2, P1, V6]; xn--ey1p.xn--ss-n1tx0508a; ; xn--ey1p.xn--ss-eq36b; [P1, V6] # .ss𬵩
-𵋅。ss𬵩â€; 𵋅.ss𬵩â€; [C2, P1, V6]; xn--ey1p.xn--ss-n1tx0508a; ; xn--ey1p.xn--ss-eq36b; [P1, V6] # .ss𬵩
-𵋅。Ss𬵩â€; 𵋅.ss𬵩â€; [C2, P1, V6]; xn--ey1p.xn--ss-n1tx0508a; ; xn--ey1p.xn--ss-eq36b; [P1, V6] # .ss𬵩
+xn--1ug9533g.xn--9nd3211w0gz4b; \u200Dð¨¿.🤒Ⴥò‘®¶; [C2, V6]; xn--1ug9533g.xn--9nd3211w0gz4b; ; ; # ð¨¿.🤒Ⴥ
+𵋅。ß𬵩\u200D; 𵋅.ß𬵩\u200D; [C2, V6]; xn--ey1p.xn--zca870nz438b; ; xn--ey1p.xn--ss-eq36b; [V6] # .ß𬵩
+𵋅。SS𬵩\u200D; 𵋅.ss𬵩\u200D; [C2, V6]; xn--ey1p.xn--ss-n1tx0508a; ; xn--ey1p.xn--ss-eq36b; [V6] # .ss𬵩
+𵋅。ss𬵩\u200D; 𵋅.ss𬵩\u200D; [C2, V6]; xn--ey1p.xn--ss-n1tx0508a; ; xn--ey1p.xn--ss-eq36b; [V6] # .ss𬵩
+𵋅。Ss𬵩\u200D; 𵋅.ss𬵩\u200D; [C2, V6]; xn--ey1p.xn--ss-n1tx0508a; ; xn--ey1p.xn--ss-eq36b; [V6] # .ss𬵩
xn--ey1p.xn--ss-eq36b; 𵋅.ss𬵩; [V6]; xn--ey1p.xn--ss-eq36b; ; ; # .ss𬵩
-xn--ey1p.xn--ss-n1tx0508a; 𵋅.ss𬵩â€; [C2, V6]; xn--ey1p.xn--ss-n1tx0508a; ; ; # .ss𬵩
-xn--ey1p.xn--zca870nz438b; 𵋅.ß𬵩â€; [C2, V6]; xn--ey1p.xn--zca870nz438b; ; ; # .ß𬵩
-‌ð­‰ã€‚ß±Ìðž¹»; ‌ð­‰.ß±Ìغ; [B1, C1, V5]; xn--0ugy003y.xn--lsa46nuub; ; xn--634m.xn--lsa46nuub; [B1, V5] # ð­‰.ß±Ìغ
-‌ð­‰ã€‚ß±Ìغ; ‌ð­‰.ß±Ìغ; [B1, C1, V5]; xn--0ugy003y.xn--lsa46nuub; ; xn--634m.xn--lsa46nuub; [B1, V5] # ð­‰.ß±Ìغ
-xn--634m.xn--lsa46nuub; ð­‰.ß±Ìغ; [B1, V5]; xn--634m.xn--lsa46nuub; ; ; # ð­‰.ß±Ìغ
-xn--0ugy003y.xn--lsa46nuub; ‌ð­‰.ß±Ìغ; [B1, C1, V5]; xn--0ugy003y.xn--lsa46nuub; ; ; # ð­‰.ß±Ìغ
-𞼌‌𑈶。ð¹¡; 𞼌‌𑈶.ð¹¡; [B1, B3, C1, P1, V6]; xn--0ug7946gzpxf.xn--8n0d; ; xn--9g1d1288a.xn--8n0d; [B1, P1, V6] # 𑈶.ð¹¡
+xn--ey1p.xn--ss-n1tx0508a; 𵋅.ss𬵩\u200D; [C2, V6]; xn--ey1p.xn--ss-n1tx0508a; ; ; # .ss𬵩
+xn--ey1p.xn--zca870nz438b; 𵋅.ß𬵩\u200D; [C2, V6]; xn--ey1p.xn--zca870nz438b; ; ; # .ß𬵩
+\u200Cð­‰ã€‚\u07F1\u0301ðž¹»; \u200Cð­‰.\u07F1\u0301\u063A; [B1, C1, V5]; xn--0ugy003y.xn--lsa46nuub; ; xn--634m.xn--lsa46nuub; [B1, V5] # ð­‰.ß±Ìغ
+\u200Cð­‰ã€‚\u07F1\u0301\u063A; \u200Cð­‰.\u07F1\u0301\u063A; [B1, C1, V5]; xn--0ugy003y.xn--lsa46nuub; ; xn--634m.xn--lsa46nuub; [B1, V5] # ð­‰.ß±Ìغ
+xn--634m.xn--lsa46nuub; ð­‰.\u07F1\u0301\u063A; [B1, V5]; xn--634m.xn--lsa46nuub; ; ; # ð­‰.ß±Ìغ
+xn--0ugy003y.xn--lsa46nuub; \u200Cð­‰.\u07F1\u0301\u063A; [B1, C1, V5]; xn--0ugy003y.xn--lsa46nuub; ; ; # ð­‰.ß±Ìغ
+𞼌\u200C𑈶。ð¹¡; 𞼌\u200C𑈶.ð¹¡; [B1, B3, C1, V6]; xn--0ug7946gzpxf.xn--8n0d; ; xn--9g1d1288a.xn--8n0d; [B1, V6] # 𑈶.ð¹¡
xn--9g1d1288a.xn--8n0d; 𞼌𑈶.ð¹¡; [B1, V6]; xn--9g1d1288a.xn--8n0d; ; ; # 𑈶.ð¹¡
-xn--0ug7946gzpxf.xn--8n0d; 𞼌‌𑈶.ð¹¡; [B1, B3, C1, V6]; xn--0ug7946gzpxf.xn--8n0d; ; ; # 𑈶.ð¹¡
-󠅯򇽭‌🜭。𑖿᪻ς≠; 򇽭‌🜭.𑖿᪻ς≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻ς≠
-󠅯򇽭‌🜭。𑖿᪻ς≠; 򇽭‌🜭.𑖿᪻ς≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻ς≠
-󠅯򇽭‌🜭。𑖿᪻ς≠; 򇽭‌🜭.𑖿᪻ς≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻ς≠
-󠅯򇽭‌🜭。𑖿᪻ς≠; 򇽭‌🜭.𑖿᪻ς≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻ς≠
-󠅯򇽭‌🜭。𑖿᪻Σ≠; 򇽭‌🜭.𑖿᪻σ≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻σ≠
-󠅯򇽭‌🜭。𑖿᪻Σ≠; 򇽭‌🜭.𑖿᪻σ≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻σ≠
-󠅯򇽭‌🜭。𑖿᪻σ≠; 򇽭‌🜭.𑖿᪻σ≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻σ≠
-󠅯򇽭‌🜭。𑖿᪻σ≠; 򇽭‌🜭.𑖿᪻σ≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻σ≠
-xn--zb9h5968x.xn--4xa378i1mfjw7y; 򇽭🜭.𑖿᪻σ≠; [V5, V6]; xn--zb9h5968x.xn--4xa378i1mfjw7y; ; ; # 🜭.𑖿᪻σ≠
-xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; 򇽭‌🜭.𑖿᪻σ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; ; # 🜭.𑖿᪻σ≠
-xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; 򇽭‌🜭.𑖿᪻ς≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; ; # 🜭.𑖿᪻ς≠
-󠅯򇽭‌🜭。𑖿᪻Σ≠; 򇽭‌🜭.𑖿᪻σ≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻σ≠
-󠅯򇽭‌🜭。𑖿᪻Σ≠; 򇽭‌🜭.𑖿᪻σ≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻σ≠
-󠅯򇽭‌🜭。𑖿᪻σ≠; 򇽭‌🜭.𑖿᪻σ≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻σ≠
-󠅯򇽭‌🜭。𑖿᪻σ≠; 򇽭‌🜭.𑖿᪻σ≠; [C1, P1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [P1, V5, V6] # 🜭.𑖿᪻σ≠
-⒋。⒈â€ò³´¢; â’‹.â’ˆâ€ò³´¢; [C2, P1, V6]; xn--wsh.xn--1ug58o74922a; ; xn--wsh.xn--tsh07994h; [P1, V6] # â’‹.â’ˆ
-4.。1.â€ò³´¢; 4..1.â€ò³´¢; [C2, P1, V6, X4_2]; 4..1.xn--1ug64613i; [C2, P1, V6, A4_2]; 4..1.xn--sf51d; [P1, V6, A4_2] # 4..1.
+xn--0ug7946gzpxf.xn--8n0d; 𞼌\u200C𑈶.ð¹¡; [B1, B3, C1, V6]; xn--0ug7946gzpxf.xn--8n0d; ; ; # 𑈶.ð¹¡
+󠅯򇽭\u200C🜭。𑖿\u1ABBς≠; 򇽭\u200C🜭.𑖿\u1ABBς≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻ς≠
+󠅯򇽭\u200C🜭。𑖿\u1ABBς=\u0338; 򇽭\u200C🜭.𑖿\u1ABBς≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻ς≠
+󠅯򇽭\u200C🜭。𑖿\u1ABBς≠; 򇽭\u200C🜭.𑖿\u1ABBς≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻ς≠
+󠅯򇽭\u200C🜭。𑖿\u1ABBς=\u0338; 򇽭\u200C🜭.𑖿\u1ABBς≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻ς≠
+󠅯򇽭\u200C🜭。𑖿\u1ABBΣ=\u0338; 򇽭\u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠
+󠅯򇽭\u200C🜭。𑖿\u1ABBΣ≠; 򇽭\u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠
+󠅯򇽭\u200C🜭。𑖿\u1ABBσ≠; 򇽭\u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠
+󠅯򇽭\u200C🜭。𑖿\u1ABBσ=\u0338; 򇽭\u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠
+xn--zb9h5968x.xn--4xa378i1mfjw7y; 򇽭🜭.𑖿\u1ABBσ≠; [V5, V6]; xn--zb9h5968x.xn--4xa378i1mfjw7y; ; ; # 🜭.𑖿᪻σ≠
+xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; 򇽭\u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; ; # 🜭.𑖿᪻σ≠
+xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; 򇽭\u200C🜭.𑖿\u1ABBς≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--3xa578i1mfjw7y; ; ; # 🜭.𑖿᪻ς≠
+󠅯򇽭\u200C🜭。𑖿\u1ABBΣ=\u0338; 򇽭\u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠
+󠅯򇽭\u200C🜭。𑖿\u1ABBΣ≠; 򇽭\u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠
+󠅯򇽭\u200C🜭。𑖿\u1ABBσ≠; 򇽭\u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠
+󠅯򇽭\u200C🜭。𑖿\u1ABBσ=\u0338; 򇽭\u200C🜭.𑖿\u1ABBσ≠; [C1, V5, V6]; xn--0ug3766p5nm1b.xn--4xa378i1mfjw7y; ; xn--zb9h5968x.xn--4xa378i1mfjw7y; [V5, V6] # 🜭.𑖿᪻σ≠
+⒋。⒈\u200D򳴢; ⒋.⒈\u200D򳴢; [C2, V6]; xn--wsh.xn--1ug58o74922a; ; xn--wsh.xn--tsh07994h; [V6] # ⒋.⒈
+4.。1.\u200D򳴢; 4..1.\u200D򳴢; [C2, V6, X4_2]; 4..1.xn--1ug64613i; [C2, V6, A4_2]; 4..1.xn--sf51d; [V6, A4_2] # 4..1.
4..1.xn--sf51d; 4..1.ò³´¢; [V6, X4_2]; 4..1.xn--sf51d; [V6, A4_2]; ; # 4..1.
-4..1.xn--1ug64613i; 4..1.â€ò³´¢; [C2, V6, X4_2]; 4..1.xn--1ug64613i; [C2, V6, A4_2]; ; # 4..1.
+4..1.xn--1ug64613i; 4..1.\u200Dò³´¢; [C2, V6, X4_2]; 4..1.xn--1ug64613i; [C2, V6, A4_2]; ; # 4..1.
xn--wsh.xn--tsh07994h; â’‹.â’ˆò³´¢; [V6]; xn--wsh.xn--tsh07994h; ; ; # â’‹.â’ˆ
-xn--wsh.xn--1ug58o74922a; â’‹.â’ˆâ€ò³´¢; [C2, V6]; xn--wsh.xn--1ug58o74922a; ; ; # â’‹.â’ˆ
-لß。ð‡½á© ò¾…¢ðž¤¾; لß.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
-لß。᩠ð‡½ò¾…¢ðž¤¾; لß.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
-لß。᩠ð‡½ò¾…¢ðž¤¾; لß.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
-Ù„SS。᩠ð‡½ò¾…¢ðž¤œ; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-Ù„ss。᩠ð‡½ò¾…¢ðž¤¾; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-Ù„ss。᩠ð‡½ò¾…¢ðž¤œ; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-xn--ss-svd.xn--jof2298hn83fln78f; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-لß。᩠ð‡½ò¾…¢ðž¤œ; لß.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
-xn--zca57y.xn--jof2298hn83fln78f; لß.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; ; # لß.á© ð‡½ðž¤¾
-Ù„SS。᩠ð‡½ò¾…¢ðž¤œ; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-Ù„ss。᩠ð‡½ò¾…¢ðž¤¾; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-Ù„ss。᩠ð‡½ò¾…¢ðž¤œ; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-لß。᩠ð‡½ò¾…¢ðž¤œ; لß.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
-Ù„SS。ð‡½á© ò¾…¢ðž¤œ; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-Ù„ss。ð‡½á© ò¾…¢ðž¤¾; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-Ù„ss。ð‡½á© ò¾…¢ðž¤œ; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-لß。ð‡½á© ò¾…¢ðž¤œ; لß.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
-Ù„SS。᩠ð‡½ò¾…¢ðž¤¾; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-Ù„Ss。᩠ð‡½ò¾…¢ðž¤¾; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-Ù„SS。᩠ð‡½ò¾…¢ðž¤¾; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-Ù„Ss。᩠ð‡½ò¾…¢ðž¤¾; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-Ù„SS。ð‡½á© ò¾…¢ðž¤¾; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-Ù„Ss。ð‡½á© ò¾…¢ðž¤¾; Ù„ss.á© ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, P1, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
-ð¹½ð‘„³ñ¼œ².ᷟី꠆𑜫; ; [B1, B3, B6, P1, V5, V6]; xn--1o0di0c0652w.xn--33e362arr1l153d; ; ; # ð¹½ð‘„³.ᷟី꠆𑜫
-xn--1o0di0c0652w.xn--33e362arr1l153d; ð¹½ð‘„³ñ¼œ².ᷟី꠆𑜫; [B1, B3, B6, V5, V6]; xn--1o0di0c0652w.xn--33e362arr1l153d; ; ; # ð¹½ð‘„³.ᷟី꠆𑜫
-Ⴓ𑜫â€ò—­“.ڧ𑰶; Ⴓ𑜫â€ò—­“.ڧ𑰶; [P1, V6]; xn--rnd479ep20q7x12e.xn--9jb4223l; ; xn--rnd8945ky009c.xn--9jb4223l; # Ⴓ𑜫.ڧ𑰶
-Ⴓ𑜫â€ò—­“.ڧ𑰶; ; [P1, V6]; xn--rnd479ep20q7x12e.xn--9jb4223l; ; xn--rnd8945ky009c.xn--9jb4223l; # Ⴓ𑜫.ڧ𑰶
-ⴓ𑜫â€ò—­“.ڧ𑰶; ; [P1, V6]; xn--1ugy52cym7p7xu5e.xn--9jb4223l; ; xn--blj6306ey091d.xn--9jb4223l; # ⴓ𑜫.ڧ𑰶
-xn--blj6306ey091d.xn--9jb4223l; ⴓ𑜫򗭓.ڧ𑰶; [V6]; xn--blj6306ey091d.xn--9jb4223l; ; ; # ⴓ𑜫.ڧ𑰶
-xn--1ugy52cym7p7xu5e.xn--9jb4223l; ⴓ𑜫â€ò—­“.ڧ𑰶; [V6]; xn--1ugy52cym7p7xu5e.xn--9jb4223l; ; ; # ⴓ𑜫.ڧ𑰶
-xn--rnd8945ky009c.xn--9jb4223l; Ⴓ𑜫򗭓.ڧ𑰶; [V6]; xn--rnd8945ky009c.xn--9jb4223l; ; ; # Ⴓ𑜫.ڧ𑰶
-xn--rnd479ep20q7x12e.xn--9jb4223l; Ⴓ𑜫â€ò—­“.ڧ𑰶; [V6]; xn--rnd479ep20q7x12e.xn--9jb4223l; ; ; # Ⴓ𑜫.ڧ𑰶
-ⴓ𑜫â€ò—­“.ڧ𑰶; ⴓ𑜫â€ò—­“.ڧ𑰶; [P1, V6]; xn--1ugy52cym7p7xu5e.xn--9jb4223l; ; xn--blj6306ey091d.xn--9jb4223l; # ⴓ𑜫.ڧ𑰶
-ð¨¿.🄆—; ; [P1, V5, V6]; xn--0s9c.xn--8ug8324p; ; ; # ð¨¿.🄆—
-ð¨¿.5,—; ; [P1, V5, V6]; xn--0s9c.xn--5,-81t; ; ; # ð¨¿.5,—
-xn--0s9c.xn--5,-81t; ð¨¿.5,—; [P1, V5, V6]; xn--0s9c.xn--5,-81t; ; ; # ð¨¿.5,—
+xn--wsh.xn--1ug58o74922a; â’‹.â’ˆ\u200Dò³´¢; [C2, V6]; xn--wsh.xn--1ug58o74922a; ; ; # â’‹.â’ˆ
+\u0644ß。ð‡½\u1A60ò¾…¢ðž¤¾; \u0644ß.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
+\u0644ß。\u1A60ð‡½ò¾…¢ðž¤¾; \u0644ß.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
+\u0644ß。\u1A60ð‡½ò¾…¢ðž¤¾; \u0644ß.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
+\u0644SS。\u1A60ð‡½ò¾…¢ðž¤œ; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644ss。\u1A60ð‡½ò¾…¢ðž¤¾; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644ss。\u1A60ð‡½ò¾…¢ðž¤œ; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+xn--ss-svd.xn--jof2298hn83fln78f; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644ß。\u1A60ð‡½ò¾…¢ðž¤œ; \u0644ß.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
+xn--zca57y.xn--jof2298hn83fln78f; \u0644ß.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; ; # لß.á© ð‡½ðž¤¾
+\u0644SS。\u1A60ð‡½ò¾…¢ðž¤œ; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644ss。\u1A60ð‡½ò¾…¢ðž¤¾; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644ss。\u1A60ð‡½ò¾…¢ðž¤œ; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644ß。\u1A60ð‡½ò¾…¢ðž¤œ; \u0644ß.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
+\u0644SS。ð‡½\u1A60ò¾…¢ðž¤œ; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644ss。ð‡½\u1A60ò¾…¢ðž¤¾; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644ss。ð‡½\u1A60ò¾…¢ðž¤œ; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644ß。ð‡½\u1A60ò¾…¢ðž¤œ; \u0644ß.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--zca57y.xn--jof2298hn83fln78f; ; xn--ss-svd.xn--jof2298hn83fln78f; # لß.á© ð‡½ðž¤¾
+\u0644SS。\u1A60ð‡½ò¾…¢ðž¤¾; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644Ss。\u1A60ð‡½ò¾…¢ðž¤¾; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644SS。\u1A60ð‡½ò¾…¢ðž¤¾; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644Ss。\u1A60ð‡½ò¾…¢ðž¤¾; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644SS。ð‡½\u1A60ò¾…¢ðž¤¾; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+\u0644Ss。ð‡½\u1A60ò¾…¢ðž¤¾; \u0644ss.\u1A60ð‡½ò¾…¢ðž¤¾; [B1, B2, B3, V5, V6]; xn--ss-svd.xn--jof2298hn83fln78f; ; ; # Ù„ss.á© ð‡½ðž¤¾
+ð¹½ð‘„³ñ¼œ².\u1DDF\u17B8\uA806𑜫; ; [B1, V5, V6]; xn--1o0di0c0652w.xn--33e362arr1l153d; ; ; # ð¹½ð‘„³.ᷟី꠆𑜫
+xn--1o0di0c0652w.xn--33e362arr1l153d; ð¹½ð‘„³ñ¼œ².\u1DDF\u17B8\uA806𑜫; [B1, V5, V6]; xn--1o0di0c0652w.xn--33e362arr1l153d; ; ; # ð¹½ð‘„³.ᷟី꠆𑜫
+Ⴓ𑜫\u200D򗭓.\u06A7𑰶; Ⴓ𑜫\u200D򗭓.\u06A7𑰶; [V6]; xn--rnd479ep20q7x12e.xn--9jb4223l; ; xn--rnd8945ky009c.xn--9jb4223l; # Ⴓ𑜫.ڧ𑰶
+Ⴓ𑜫\u200D򗭓.\u06A7𑰶; ; [V6]; xn--rnd479ep20q7x12e.xn--9jb4223l; ; xn--rnd8945ky009c.xn--9jb4223l; # Ⴓ𑜫.ڧ𑰶
+ⴓ𑜫\u200D򗭓.\u06A7𑰶; ; [V6]; xn--1ugy52cym7p7xu5e.xn--9jb4223l; ; xn--blj6306ey091d.xn--9jb4223l; # ⴓ𑜫.ڧ𑰶
+xn--blj6306ey091d.xn--9jb4223l; ⴓ𑜫򗭓.\u06A7𑰶; [V6]; xn--blj6306ey091d.xn--9jb4223l; ; ; # ⴓ𑜫.ڧ𑰶
+xn--1ugy52cym7p7xu5e.xn--9jb4223l; ⴓ𑜫\u200D򗭓.\u06A7𑰶; [V6]; xn--1ugy52cym7p7xu5e.xn--9jb4223l; ; ; # ⴓ𑜫.ڧ𑰶
+xn--rnd8945ky009c.xn--9jb4223l; Ⴓ𑜫򗭓.\u06A7𑰶; [V6]; xn--rnd8945ky009c.xn--9jb4223l; ; ; # Ⴓ𑜫.ڧ𑰶
+xn--rnd479ep20q7x12e.xn--9jb4223l; Ⴓ𑜫\u200D򗭓.\u06A7𑰶; [V6]; xn--rnd479ep20q7x12e.xn--9jb4223l; ; ; # Ⴓ𑜫.ڧ𑰶
+ⴓ𑜫\u200D򗭓.\u06A7𑰶; ⴓ𑜫\u200D򗭓.\u06A7𑰶; [V6]; xn--1ugy52cym7p7xu5e.xn--9jb4223l; ; xn--blj6306ey091d.xn--9jb4223l; # ⴓ𑜫.ڧ𑰶
+ð¨¿.🄆—; ; [V5, V6]; xn--0s9c.xn--8ug8324p; ; ; # ð¨¿.🄆—
+ð¨¿.5,—; ; [V5, V6]; xn--0s9c.xn--5,-81t; ; ; # ð¨¿.5,—
+xn--0s9c.xn--5,-81t; ð¨¿.5,—; [V5, V6]; xn--0s9c.xn--5,-81t; ; ; # ð¨¿.5,—
xn--0s9c.xn--8ug8324p; ð¨¿.🄆—; [V5, V6]; xn--0s9c.xn--8ug8324p; ; ; # ð¨¿.🄆—
-ò”Š±ñ¦®Û¸ã€‚ó ¾­-; ò”Š±ñ¦®Û¸.ó ¾­-; [P1, V3, V6]; xn--lmb18944c0g2z.xn----2k81m; ; ; # Û¸.-
+ò”Š±ñ¦®Û¸ã€‚ó ¾­-; ò”Š±ñ¦®Û¸.ó ¾­-; [V3, V6]; xn--lmb18944c0g2z.xn----2k81m; ; ; # Û¸.-
xn--lmb18944c0g2z.xn----2k81m; ò”Š±ñ¦®Û¸.ó ¾­-; [V3, V6]; xn--lmb18944c0g2z.xn----2k81m; ; ; # Û¸.-
-ð¼—¸ßð¹®ã€‚Ûá¡Žá ´; ð¼—¸ßð¹®.Ûá¡Žá ´; [B1, B5, B6, P1, V6]; xn--osb0855kcc2r.xn--tlb299fhc; ; ; # ßð¹®.á¡Žá ´
-xn--osb0855kcc2r.xn--tlb299fhc; ð¼—¸ßð¹®.Ûá¡Žá ´; [B1, B5, B6, V6]; xn--osb0855kcc2r.xn--tlb299fhc; ; ; # ßð¹®.á¡Žá ´
-â€á ®á‚¾ðŸ„‚.🚗à¡ð®¹Œâ€Œ; ; [B1, C1, C2, P1, V6]; xn--2nd129ay2gnw71c.xn--zvb692j9664aic1g; ; xn--2nd129ai554b.xn--zvb3124wpkpf; [B1, P1, V6] # ᠮႾ🄂.🚗à¡
-â€á ®á‚¾1,.🚗à¡ð®¹Œâ€Œ; ; [B1, C1, C2, P1, V6]; xn--1,-ogkx89c39j.xn--zvb692j9664aic1g; ; xn--1,-ogkx89c.xn--zvb3124wpkpf; [B1, B6, P1, V6] # ᠮႾ1,.🚗à¡
-â€á ®â´ž1,.🚗à¡ð®¹Œâ€Œ; ; [B1, C1, C2, P1, V6]; xn--1,-v3o161c53q.xn--zvb692j9664aic1g; ; xn--1,-v3o625k.xn--zvb3124wpkpf; [B1, B6, P1, V6] # ᠮⴞ1,.🚗à¡
-xn--1,-v3o625k.xn--zvb3124wpkpf; ᠮⴞ1,.🚗à¡ð®¹Œ; [B1, B6, P1, V6]; xn--1,-v3o625k.xn--zvb3124wpkpf; ; ; # ᠮⴞ1,.🚗à¡
-xn--1,-v3o161c53q.xn--zvb692j9664aic1g; â€á ®â´ž1,.🚗à¡ð®¹Œâ€Œ; [B1, C1, C2, P1, V6]; xn--1,-v3o161c53q.xn--zvb692j9664aic1g; ; ; # ᠮⴞ1,.🚗à¡
-xn--1,-ogkx89c.xn--zvb3124wpkpf; ᠮႾ1,.🚗à¡ð®¹Œ; [B1, B6, P1, V6]; xn--1,-ogkx89c.xn--zvb3124wpkpf; ; ; # ᠮႾ1,.🚗à¡
-xn--1,-ogkx89c39j.xn--zvb692j9664aic1g; â€á ®á‚¾1,.🚗à¡ð®¹Œâ€Œ; [B1, C1, C2, P1, V6]; xn--1,-ogkx89c39j.xn--zvb692j9664aic1g; ; ; # ᠮႾ1,.🚗à¡
-â€á ®â´žðŸ„‚.🚗à¡ð®¹Œâ€Œ; ; [B1, C1, C2, P1, V6]; xn--h7e341b0wlbv45b.xn--zvb692j9664aic1g; ; xn--h7e438h1p44a.xn--zvb3124wpkpf; [B1, P1, V6] # ᠮⴞ🄂.🚗à¡
-xn--h7e438h1p44a.xn--zvb3124wpkpf; ᠮⴞ🄂.🚗à¡ð®¹Œ; [B1, V6]; xn--h7e438h1p44a.xn--zvb3124wpkpf; ; ; # ᠮⴞ🄂.🚗à¡
-xn--h7e341b0wlbv45b.xn--zvb692j9664aic1g; â€á ®â´žðŸ„‚.🚗à¡ð®¹Œâ€Œ; [B1, C1, C2, V6]; xn--h7e341b0wlbv45b.xn--zvb692j9664aic1g; ; ; # ᠮⴞ🄂.🚗à¡
-xn--2nd129ai554b.xn--zvb3124wpkpf; ᠮႾ🄂.🚗à¡ð®¹Œ; [B1, V6]; xn--2nd129ai554b.xn--zvb3124wpkpf; ; ; # ᠮႾ🄂.🚗à¡
-xn--2nd129ay2gnw71c.xn--zvb692j9664aic1g; â€á ®á‚¾ðŸ„‚.🚗à¡ð®¹Œâ€Œ; [B1, C1, C2, V6]; xn--2nd129ay2gnw71c.xn--zvb692j9664aic1g; ; ; # ᠮႾ🄂.🚗à¡
-Øڗ.𑚶ñ¼¡·â¾†; ØÚ—.𑚶ñ¼¡·èˆŒ; [B1, P1, V5, V6]; xn--jfb41a.xn--tc1ap851axo39c; ; ; # Ú—.𑚶舌
-ØÚ—.𑚶ñ¼¡·èˆŒ; ; [B1, P1, V5, V6]; xn--jfb41a.xn--tc1ap851axo39c; ; ; # Ú—.𑚶舌
-xn--jfb41a.xn--tc1ap851axo39c; ØÚ—.𑚶ñ¼¡·èˆŒ; [B1, V5, V6]; xn--jfb41a.xn--tc1ap851axo39c; ; ; # Ú—.𑚶舌
-🞅󠳡óœ™.ñ²–·; ; [P1, V6]; xn--ie9hi1349bqdlb.xn--oj69a; ; ; # 🞅.
+ð¼—¸\u07CDð¹®ã€‚\u06DDá¡Žá ´; ð¼—¸\u07CDð¹®.\u06DDá¡Žá ´; [B1, B5, B6, V6]; xn--osb0855kcc2r.xn--tlb299fhc; ; ; # ßð¹®.á¡Žá ´
+xn--osb0855kcc2r.xn--tlb299fhc; ð¼—¸\u07CDð¹®.\u06DDá¡Žá ´; [B1, B5, B6, V6]; xn--osb0855kcc2r.xn--tlb299fhc; ; ; # ßð¹®.á¡Žá ´
+\u200DᠮႾ🄂.🚗\u0841𮹌\u200C; ; [B1, C1, C2, V6]; xn--2nd129ay2gnw71c.xn--zvb692j9664aic1g; ; xn--2nd129ai554b.xn--zvb3124wpkpf; [B1, V6] # ᠮႾ🄂.🚗à¡ð®¹Œ
+\u200DᠮႾ1,.🚗\u0841𮹌\u200C; ; [B1, C1, C2, V6]; xn--1,-ogkx89c39j.xn--zvb692j9664aic1g; ; xn--1,-ogkx89c.xn--zvb3124wpkpf; [B1, B6, V6] # ᠮႾ1,.🚗à¡ð®¹Œ
+\u200Dᠮⴞ1,.🚗\u0841𮹌\u200C; ; [B1, C1, C2, V6]; xn--1,-v3o161c53q.xn--zvb692j9664aic1g; ; xn--1,-v3o625k.xn--zvb3124wpkpf; [B1, B6, V6] # ᠮⴞ1,.🚗à¡ð®¹Œ
+xn--1,-v3o625k.xn--zvb3124wpkpf; ᠮⴞ1,.🚗\u0841𮹌; [B1, B6, V6]; xn--1,-v3o625k.xn--zvb3124wpkpf; ; ; # ᠮⴞ1,.🚗à¡ð®¹Œ
+xn--1,-v3o161c53q.xn--zvb692j9664aic1g; \u200Dᠮⴞ1,.🚗\u0841𮹌\u200C; [B1, C1, C2, V6]; xn--1,-v3o161c53q.xn--zvb692j9664aic1g; ; ; # ᠮⴞ1,.🚗à¡ð®¹Œ
+xn--1,-ogkx89c.xn--zvb3124wpkpf; ᠮႾ1,.🚗\u0841𮹌; [B1, B6, V6]; xn--1,-ogkx89c.xn--zvb3124wpkpf; ; ; # ᠮႾ1,.🚗à¡ð®¹Œ
+xn--1,-ogkx89c39j.xn--zvb692j9664aic1g; \u200DᠮႾ1,.🚗\u0841𮹌\u200C; [B1, C1, C2, V6]; xn--1,-ogkx89c39j.xn--zvb692j9664aic1g; ; ; # ᠮႾ1,.🚗à¡ð®¹Œ
+\u200Dᠮⴞ🄂.🚗\u0841𮹌\u200C; ; [B1, C1, C2, V6]; xn--h7e341b0wlbv45b.xn--zvb692j9664aic1g; ; xn--h7e438h1p44a.xn--zvb3124wpkpf; [B1, V6] # ᠮⴞ🄂.🚗à¡ð®¹Œ
+xn--h7e438h1p44a.xn--zvb3124wpkpf; ᠮⴞ🄂.🚗\u0841𮹌; [B1, V6]; xn--h7e438h1p44a.xn--zvb3124wpkpf; ; ; # ᠮⴞ🄂.🚗à¡ð®¹Œ
+xn--h7e341b0wlbv45b.xn--zvb692j9664aic1g; \u200Dᠮⴞ🄂.🚗\u0841𮹌\u200C; [B1, C1, C2, V6]; xn--h7e341b0wlbv45b.xn--zvb692j9664aic1g; ; ; # ᠮⴞ🄂.🚗à¡ð®¹Œ
+xn--2nd129ai554b.xn--zvb3124wpkpf; ᠮႾ🄂.🚗\u0841𮹌; [B1, V6]; xn--2nd129ai554b.xn--zvb3124wpkpf; ; ; # ᠮႾ🄂.🚗à¡ð®¹Œ
+xn--2nd129ay2gnw71c.xn--zvb692j9664aic1g; \u200DᠮႾ🄂.🚗\u0841𮹌\u200C; [B1, C1, C2, V6]; xn--2nd129ay2gnw71c.xn--zvb692j9664aic1g; ; ; # ᠮႾ🄂.🚗à¡ð®¹Œ
+\u0601\u0697.𑚶񼡷⾆; \u0601\u0697.𑚶񼡷舌; [B1, V5, V6]; xn--jfb41a.xn--tc1ap851axo39c; ; ; # ڗ.𑚶舌
+\u0601\u0697.𑚶񼡷舌; ; [B1, V5, V6]; xn--jfb41a.xn--tc1ap851axo39c; ; ; # ڗ.𑚶舌
+xn--jfb41a.xn--tc1ap851axo39c; \u0601\u0697.𑚶񼡷舌; [B1, V5, V6]; xn--jfb41a.xn--tc1ap851axo39c; ; ; # ڗ.𑚶舌
+🞅󠳡óœ™.ñ²–·; ; [V6]; xn--ie9hi1349bqdlb.xn--oj69a; ; ; # 🞅.
xn--ie9hi1349bqdlb.xn--oj69a; 🞅󠳡óœ™.ñ²–·; [V6]; xn--ie9hi1349bqdlb.xn--oj69a; ; ; # 🞅.
-⃧ñ¯¡Ž-ò«£.4Ⴄ‌; ; [C1, P1, V5, V6]; xn----9snu5320fi76w.xn--4-f0g649i; ; xn----9snu5320fi76w.xn--4-f0g; [P1, V5, V6] # ⃧-.4Ⴄ
-⃧ñ¯¡Ž-ò«£.4ⴄ‌; ; [C1, P1, V5, V6]; xn----9snu5320fi76w.xn--4-sgn589c; ; xn----9snu5320fi76w.xn--4-ivs; [P1, V5, V6] # ⃧-.4â´„
-xn----9snu5320fi76w.xn--4-ivs; ⃧ñ¯¡Ž-ò«£.4â´„; [V5, V6]; xn----9snu5320fi76w.xn--4-ivs; ; ; # ⃧-.4â´„
-xn----9snu5320fi76w.xn--4-sgn589c; ⃧ñ¯¡Ž-ò«£.4ⴄ‌; [C1, V5, V6]; xn----9snu5320fi76w.xn--4-sgn589c; ; ; # ⃧-.4â´„
-xn----9snu5320fi76w.xn--4-f0g; ⃧ñ¯¡Ž-ò«£.4Ⴄ; [V5, V6]; xn----9snu5320fi76w.xn--4-f0g; ; ; # ⃧-.4Ⴄ
-xn----9snu5320fi76w.xn--4-f0g649i; ⃧ñ¯¡Ž-ò«£.4Ⴄ‌; [C1, V5, V6]; xn----9snu5320fi76w.xn--4-f0g649i; ; ; # ⃧-.4Ⴄ
+\u20E7ñ¯¡Ž-ò«£.4Ⴄ\u200C; ; [C1, V5, V6]; xn----9snu5320fi76w.xn--4-f0g649i; ; xn----9snu5320fi76w.xn--4-f0g; [V5, V6] # ⃧-.4Ⴄ
+\u20E7ñ¯¡Ž-ò«£.4â´„\u200C; ; [C1, V5, V6]; xn----9snu5320fi76w.xn--4-sgn589c; ; xn----9snu5320fi76w.xn--4-ivs; [V5, V6] # ⃧-.4â´„
+xn----9snu5320fi76w.xn--4-ivs; \u20E7ñ¯¡Ž-ò«£.4â´„; [V5, V6]; xn----9snu5320fi76w.xn--4-ivs; ; ; # ⃧-.4â´„
+xn----9snu5320fi76w.xn--4-sgn589c; \u20E7ñ¯¡Ž-ò«£.4â´„\u200C; [C1, V5, V6]; xn----9snu5320fi76w.xn--4-sgn589c; ; ; # ⃧-.4â´„
+xn----9snu5320fi76w.xn--4-f0g; \u20E7ñ¯¡Ž-ò«£.4Ⴄ; [V5, V6]; xn----9snu5320fi76w.xn--4-f0g; ; ; # ⃧-.4Ⴄ
+xn----9snu5320fi76w.xn--4-f0g649i; \u20E7ñ¯¡Ž-ò«£.4Ⴄ\u200C; [C1, V5, V6]; xn----9snu5320fi76w.xn--4-f0g649i; ; ; # ⃧-.4Ⴄ
ᚭ。ðŒ ÃŸð–«±; áš­.ðŒ ÃŸð–«±; ; xn--hwe.xn--zca4946pblnc; ; xn--hwe.xn--ss-ci1ub261a; # áš­.ðŒ ÃŸð–«±
ᚭ。ðŒ ÃŸð–«±; áš­.ðŒ ÃŸð–«±; ; xn--hwe.xn--zca4946pblnc; ; xn--hwe.xn--ss-ci1ub261a; # áš­.ðŒ ÃŸð–«±
ᚭ。ðŒ SSð–«±; áš­.ðŒ ssð–«±; ; xn--hwe.xn--ss-ci1ub261a; ; ; # áš­.ðŒ ssð–«±
@@ -1508,1915 +1514,1923 @@ xn--hwe.xn--zca4946pblnc; áš­.ðŒ ÃŸð–«±; ; xn--hwe.xn--zca4946pblnc; ; ; # áš­
1。𞤉ꡪ; 1.𞤫ꡪ; [B1, B2, B3]; 1.xn--gd9al691d; ; ; # 1.𞤫ꡪ
1.xn--gd9al691d; 1.𞤫ꡪ; [B1, B2, B3]; 1.xn--gd9al691d; ; ; # 1.𞤫ꡪ
â‚。𞤉ꡪ; 1.𞤫ꡪ; [B1, B2, B3]; 1.xn--gd9al691d; ; ; # 1.𞤫ꡪ
-𯻼‌.𞶞򻙤񥘇; ; [B2, B3, B6, C1, P1, V6]; xn--0ug27500a.xn--2b7hs861pl540a; ; xn--kg4n.xn--2b7hs861pl540a; [B2, B3, P1, V6] # .
+𯻼\u200C.𞶞򻙤񥘇; ; [B2, B3, B6, C1, V6]; xn--0ug27500a.xn--2b7hs861pl540a; ; xn--kg4n.xn--2b7hs861pl540a; [B2, B3, V6] # .
xn--kg4n.xn--2b7hs861pl540a; 𯻼.𞶞򻙤񥘇; [B2, B3, V6]; xn--kg4n.xn--2b7hs861pl540a; ; ; # .
-xn--0ug27500a.xn--2b7hs861pl540a; 𯻼‌.𞶞򻙤񥘇; [B2, B3, B6, C1, V6]; xn--0ug27500a.xn--2b7hs861pl540a; ; ; # .
-𑑄≯。𑜤; 𑑄≯.𑜤; [P1, V5, V6]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤
-𑑄≯。𑜤; 𑑄≯.𑜤; [P1, V5, V6]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤
-𑑄≯。𑜤; 𑑄≯.𑜤; [P1, V5, V6]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤
-𑑄≯。𑜤; 𑑄≯.𑜤; [P1, V5, V6]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤
-xn--hdh5636g.xn--ci2d; 𑑄≯.𑜤; [V5, V6]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤
-Ⴋ≮𱲆。â€Þ§ð‹£; Ⴋ≮𱲆.â€Þ§ð‹£; [C2, P1, V6]; xn--jnd802gsm17c.xn--lrb506jqr4n; ; xn--jnd802gsm17c.xn--lrb6479j; [P1, V5, V6] # Ⴋ≮.Þ§ð‹£
-á‚«≮𱲆。â€Þ§ð‹£; Ⴋ≮𱲆.â€Þ§ð‹£; [C2, P1, V6]; xn--jnd802gsm17c.xn--lrb506jqr4n; ; xn--jnd802gsm17c.xn--lrb6479j; [P1, V5, V6] # Ⴋ≮.Þ§ð‹£
-â´‹≮𱲆。â€Þ§ð‹£; ⴋ≮𱲆.â€Þ§ð‹£; [C2, P1, V6]; xn--gdhz03bxt42d.xn--lrb506jqr4n; ; xn--gdhz03bxt42d.xn--lrb6479j; [P1, V5, V6] # ⴋ≮.Þ§ð‹£
-ⴋ≮𱲆。â€Þ§ð‹£; ⴋ≮𱲆.â€Þ§ð‹£; [C2, P1, V6]; xn--gdhz03bxt42d.xn--lrb506jqr4n; ; xn--gdhz03bxt42d.xn--lrb6479j; [P1, V5, V6] # ⴋ≮.Þ§ð‹£
-xn--gdhz03bxt42d.xn--lrb6479j; ⴋ≮𱲆.Þ§ð‹£; [V5, V6]; xn--gdhz03bxt42d.xn--lrb6479j; ; ; # ⴋ≮.Þ§ð‹£
-xn--gdhz03bxt42d.xn--lrb506jqr4n; ⴋ≮𱲆.â€Þ§ð‹£; [C2, V6]; xn--gdhz03bxt42d.xn--lrb506jqr4n; ; ; # ⴋ≮.Þ§ð‹£
-xn--jnd802gsm17c.xn--lrb6479j; Ⴋ≮𱲆.Þ§ð‹£; [V5, V6]; xn--jnd802gsm17c.xn--lrb6479j; ; ; # Ⴋ≮.Þ§ð‹£
-xn--jnd802gsm17c.xn--lrb506jqr4n; Ⴋ≮𱲆.â€Þ§ð‹£; [C2, V6]; xn--jnd802gsm17c.xn--lrb506jqr4n; ; ; # Ⴋ≮.Þ§ð‹£
-្.򆽒≯; ; [P1, V5, V6]; xn--u4e.xn--hdhx0084f; ; ; # ្.≯
-្.򆽒≯; ្.򆽒≯; [P1, V5, V6]; xn--u4e.xn--hdhx0084f; ; ; # ្.≯
-xn--u4e.xn--hdhx0084f; ្.򆽒≯; [V5, V6]; xn--u4e.xn--hdhx0084f; ; ; # ្.≯
-ñ‡áœ´ï¼Žð¨ºÃ‰â¬“ð‘„´; ñ‡áœ´.ð¨ºÃ©â¬“ð‘„´; [P1, V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
-ñ‡áœ´ï¼Žð¨ºEÌ⬓𑄴; ñ‡áœ´.ð¨ºÃ©â¬“ð‘„´; [P1, V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
-ñ‡áœ´.ð¨ºÃ‰â¬“ð‘„´; ñ‡áœ´.ð¨ºÃ©â¬“ð‘„´; [P1, V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
-ñ‡áœ´.ð¨ºEÌ⬓𑄴; ñ‡áœ´.ð¨ºÃ©â¬“ð‘„´; [P1, V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
-ñ‡áœ´.ð¨ºeÌ⬓𑄴; ñ‡áœ´.ð¨ºÃ©â¬“ð‘„´; [P1, V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
-ñ‡áœ´.ð¨ºÃ©â¬“ð‘„´; ; [P1, V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
-xn--c0e34564d.xn--9ca207st53lg3f; ñ‡áœ´.ð¨ºÃ©â¬“ð‘„´; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
-ñ‡áœ´ï¼Žð¨ºeÌ⬓𑄴; ñ‡áœ´.ð¨ºÃ©â¬“ð‘„´; [P1, V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
-ñ‡áœ´ï¼Žð¨ºÃ©â¬“ð‘„´; ñ‡áœ´.ð¨ºÃ©â¬“ð‘„´; [P1, V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
-ᢇâ€ê£„。︒𞤺; ᢇâ€ê£„.︒𞤺; [B1, B6, C2, P1, V6]; xn--09e669a6x8j.xn--y86cv562b; ; xn--09e4694e.xn--y86cv562b; [B1, P1, V6] # ᢇ꣄.︒𞤺
-ᢇâ€ê£„。。𞤺; ᢇâ€ê£„..𞤺; [B6, C2, X4_2]; xn--09e669a6x8j..xn--ye6h; [B6, C2, A4_2]; xn--09e4694e..xn--ye6h; [A4_2] # ᢇ꣄..𞤺
-ᢇâ€ê£„。。𞤘; ᢇâ€ê£„..𞤺; [B6, C2, X4_2]; xn--09e669a6x8j..xn--ye6h; [B6, C2, A4_2]; xn--09e4694e..xn--ye6h; [A4_2] # ᢇ꣄..𞤺
-xn--09e4694e..xn--ye6h; ᢇ꣄..𞤺; [X4_2]; xn--09e4694e..xn--ye6h; [A4_2]; ; # ᢇ꣄..𞤺
-xn--09e669a6x8j..xn--ye6h; ᢇâ€ê£„..𞤺; [B6, C2, X4_2]; xn--09e669a6x8j..xn--ye6h; [B6, C2, A4_2]; ; # ᢇ꣄..𞤺
-ᢇâ€ê£„。︒𞤘; ᢇâ€ê£„.︒𞤺; [B1, B6, C2, P1, V6]; xn--09e669a6x8j.xn--y86cv562b; ; xn--09e4694e.xn--y86cv562b; [B1, P1, V6] # ᢇ꣄.︒𞤺
-xn--09e4694e.xn--y86cv562b; ᢇ꣄.︒𞤺; [B1, V6]; xn--09e4694e.xn--y86cv562b; ; ; # ᢇ꣄.︒𞤺
-xn--09e669a6x8j.xn--y86cv562b; ᢇâ€ê£„.︒𞤺; [B1, B6, C2, V6]; xn--09e669a6x8j.xn--y86cv562b; ; ; # ᢇ꣄.︒𞤺
-𞩬򖙱᜔‌。رު≮; 𞩬򖙱᜔‌.رު≮; [B2, B3, P1, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮
-𞩬򖙱᜔‌。رު≮; 𞩬򖙱᜔‌.رު≮; [B2, B3, P1, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮
-𞩬򖙱᜔‌。رު≮; 𞩬򖙱᜔‌.رު≮; [B2, B3, P1, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮
-𞩬򖙱᜔‌。رު≮; 𞩬򖙱᜔‌.رު≮; [B2, B3, P1, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮
-xn--fze3930v7hz6b.xn--wgb86el10d; 𞩬򖙱᜔.رު≮; [B2, B3, V6]; xn--fze3930v7hz6b.xn--wgb86el10d; ; ; # ᜔.رު≮
-xn--fze607b9651bjwl7c.xn--wgb86el10d; 𞩬򖙱᜔‌.رު≮; [B2, B3, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; ; # ᜔.رު≮
-Ⴣ.ٓᢤ; Ⴣ.ٓᢤ; [P1, V5, V6]; xn--7nd.xn--vhb294g; ; ; # Ⴣ.ٓᢤ
-Ⴣ.ٓᢤ; ; [P1, V5, V6]; xn--7nd.xn--vhb294g; ; ; # Ⴣ.ٓᢤ
-ⴣ.ٓᢤ; ; [V5]; xn--rlj.xn--vhb294g; ; ; # ⴣ.ٓᢤ
-xn--rlj.xn--vhb294g; ⴣ.ٓᢤ; [V5]; xn--rlj.xn--vhb294g; ; ; # ⴣ.ٓᢤ
-xn--7nd.xn--vhb294g; Ⴣ.ٓᢤ; [V5, V6]; xn--7nd.xn--vhb294g; ; ; # Ⴣ.ٓᢤ
-ⴣ.ٓᢤ; ⴣ.ٓᢤ; [V5]; xn--rlj.xn--vhb294g; ; ; # ⴣ.ٓᢤ
-󠄈ࠓ.싉ò„†»áƒ„ò‚¡; à “.싉ò„†»áƒ„ò‚¡; [P1, V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # à “.싉Ⴤ
-󠄈ࠓ.싉ò„†»áƒ„ò‚¡; à “.싉ò„†»áƒ„ò‚¡; [P1, V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # à “.싉Ⴤ
-󠄈ࠓ.싉ò„†»áƒ„ò‚¡; à “.싉ò„†»áƒ„ò‚¡; [P1, V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # à “.싉Ⴤ
-󠄈ࠓ.싉ò„†»áƒ„ò‚¡; à “.싉ò„†»áƒ„ò‚¡; [P1, V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # à “.싉Ⴤ
-󠄈ࠓ.싉ò„†»â´¤ò‚¡; à “.싉ò„†»â´¤ò‚¡; [P1, V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # à “.싉ⴤ
-󠄈ࠓ.싉ò„†»â´¤ò‚¡; à “.싉ò„†»â´¤ò‚¡; [P1, V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # à “.싉ⴤ
-xn--oub.xn--sljz109bpe25dviva; à “.싉ò„†»â´¤ò‚¡; [V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # à “.싉ⴤ
-xn--oub.xn--8nd9522gpe69cviva; à “.싉ò„†»áƒ„ò‚¡; [V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # à “.싉Ⴤ
-󠄈ࠓ.싉ò„†»â´¤ò‚¡; à “.싉ò„†»â´¤ò‚¡; [P1, V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # à “.싉ⴤ
-󠄈ࠓ.싉ò„†»â´¤ò‚¡; à “.싉ò„†»â´¤ò‚¡; [P1, V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # à “.싉ⴤ
-ꨬ𑲫≮.⤂; ꨬ𑲫≮.⤂; [P1, V5, V6]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂
-ꨬ𑲫≮.⤂; ꨬ𑲫≮.⤂; [P1, V5, V6]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂
-ꨬ𑲫≮.⤂; ; [P1, V5, V6]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂
-ꨬ𑲫≮.⤂; ꨬ𑲫≮.⤂; [P1, V5, V6]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂
-xn--gdh1854cn19c.xn--kqi; ꨬ𑲫≮.⤂; [V5, V6]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂
-Ø„ð©”≮Ⴢ.Ⴃ; Ø„ð©”≮Ⴢ.á‚£; [B1, P1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # ð©”≮Ⴢ.á‚£
-Ø„ð©”≮Ⴢ.Ⴃ; Ø„ð©”≮Ⴢ.á‚£; [B1, P1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # ð©”≮Ⴢ.á‚£
-Ø„ð©”≮Ⴢ.á‚£; ; [B1, P1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # ð©”≮Ⴢ.á‚£
-Ø„ð©”≮Ⴢ.á‚£; Ø„ð©”≮Ⴢ.á‚£; [B1, P1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # ð©”≮Ⴢ.á‚£
-Ø„ð©”≮ⴢ.â´ƒ; Ø„ð©”≮ⴢ.â´ƒ; [B1, P1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # ð©”≮ⴢ.â´ƒ
-Ø„ð©”≮ⴢ.â´ƒ; ; [B1, P1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # ð©”≮ⴢ.â´ƒ
-Ø„ð©”≮Ⴢ.â´ƒ; ; [B1, P1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # ð©”≮Ⴢ.â´ƒ
-Ø„ð©”≮Ⴢ.â´ƒ; Ø„ð©”≮Ⴢ.â´ƒ; [B1, P1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # ð©”≮Ⴢ.â´ƒ
-xn--mfb416c0jox02t.xn--ukj; Ø„ð©”≮Ⴢ.â´ƒ; [B1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # ð©”≮Ⴢ.â´ƒ
-xn--mfb266l4khr54u.xn--ukj; Ø„ð©”≮ⴢ.â´ƒ; [B1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # ð©”≮ⴢ.â´ƒ
-xn--mfb416c0jox02t.xn--bnd; Ø„ð©”≮Ⴢ.á‚£; [B1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # ð©”≮Ⴢ.á‚£
-Ø„ð©”≮ⴢ.ⴃ; Ø„ð©”≮ⴢ.â´ƒ; [B1, P1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # ð©”≮ⴢ.â´ƒ
-Ø„ð©”≮ⴢ.ⴃ; Ø„ð©”≮ⴢ.â´ƒ; [B1, P1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # ð©”≮ⴢ.â´ƒ
-Ø„ð©”≮Ⴢ.ⴃ; Ø„ð©”≮Ⴢ.â´ƒ; [B1, P1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # ð©”≮Ⴢ.â´ƒ
-Ø„ð©”≮Ⴢ.ⴃ; Ø„ð©”≮Ⴢ.â´ƒ; [B1, P1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # ð©”≮Ⴢ.â´ƒ
+xn--0ug27500a.xn--2b7hs861pl540a; 𯻼\u200C.𞶞򻙤񥘇; [B2, B3, B6, C1, V6]; xn--0ug27500a.xn--2b7hs861pl540a; ; ; # .
+𑑄≯。𑜤; 𑑄≯.𑜤; [V5]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤
+𑑄>\u0338。𑜤; 𑑄≯.𑜤; [V5]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤
+𑑄≯。𑜤; 𑑄≯.𑜤; [V5]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤
+𑑄>\u0338。𑜤; 𑑄≯.𑜤; [V5]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤
+xn--hdh5636g.xn--ci2d; 𑑄≯.𑜤; [V5]; xn--hdh5636g.xn--ci2d; ; ; # 𑑄≯.𑜤
+Ⴋ≮𱲆。\u200D\u07A7ð‹£; Ⴋ≮𱲆.\u200D\u07A7ð‹£; [C2, V6]; xn--jnd802gsm17c.xn--lrb506jqr4n; ; xn--jnd802gsm17c.xn--lrb6479j; [V5, V6] # Ⴋ≮𱲆.Þ§ð‹£
+á‚«<\u0338𱲆。\u200D\u07A7ð‹£; Ⴋ≮𱲆.\u200D\u07A7ð‹£; [C2, V6]; xn--jnd802gsm17c.xn--lrb506jqr4n; ; xn--jnd802gsm17c.xn--lrb6479j; [V5, V6] # Ⴋ≮𱲆.Þ§ð‹£
+â´‹<\u0338𱲆。\u200D\u07A7ð‹£; ⴋ≮𱲆.\u200D\u07A7ð‹£; [C2]; xn--gdhz03bxt42d.xn--lrb506jqr4n; ; xn--gdhz03bxt42d.xn--lrb6479j; [V5] # ⴋ≮𱲆.Þ§ð‹£
+ⴋ≮𱲆。\u200D\u07A7ð‹£; ⴋ≮𱲆.\u200D\u07A7ð‹£; [C2]; xn--gdhz03bxt42d.xn--lrb506jqr4n; ; xn--gdhz03bxt42d.xn--lrb6479j; [V5] # ⴋ≮𱲆.Þ§ð‹£
+xn--gdhz03bxt42d.xn--lrb6479j; ⴋ≮𱲆.\u07A7ð‹£; [V5]; xn--gdhz03bxt42d.xn--lrb6479j; ; ; # ⴋ≮𱲆.Þ§ð‹£
+xn--gdhz03bxt42d.xn--lrb506jqr4n; ⴋ≮𱲆.\u200D\u07A7ð‹£; [C2]; xn--gdhz03bxt42d.xn--lrb506jqr4n; ; ; # ⴋ≮𱲆.Þ§ð‹£
+xn--jnd802gsm17c.xn--lrb6479j; Ⴋ≮𱲆.\u07A7ð‹£; [V5, V6]; xn--jnd802gsm17c.xn--lrb6479j; ; ; # Ⴋ≮𱲆.Þ§ð‹£
+xn--jnd802gsm17c.xn--lrb506jqr4n; Ⴋ≮𱲆.\u200D\u07A7ð‹£; [C2, V6]; xn--jnd802gsm17c.xn--lrb506jqr4n; ; ; # Ⴋ≮𱲆.Þ§ð‹£
+\u17D2.򆽒≯; ; [V5, V6]; xn--u4e.xn--hdhx0084f; ; ; # ្.≯
+\u17D2.򆽒>\u0338; \u17D2.򆽒≯; [V5, V6]; xn--u4e.xn--hdhx0084f; ; ; # ្.≯
+xn--u4e.xn--hdhx0084f; \u17D2.򆽒≯; [V5, V6]; xn--u4e.xn--hdhx0084f; ; ; # ្.≯
+ñ‡\u1734.ð¨ºÃ‰â¬“ð‘„´; ñ‡\u1734.ð¨ºÃ©â¬“ð‘„´; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
+ñ‡\u1734.ð¨ºE\u0301⬓𑄴; ñ‡\u1734.ð¨ºÃ©â¬“ð‘„´; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
+ñ‡\u1734.ð¨ºÃ‰â¬“ð‘„´; ñ‡\u1734.ð¨ºÃ©â¬“ð‘„´; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
+ñ‡\u1734.ð¨ºE\u0301⬓𑄴; ñ‡\u1734.ð¨ºÃ©â¬“ð‘„´; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
+ñ‡\u1734.ð¨ºe\u0301⬓𑄴; ñ‡\u1734.ð¨ºÃ©â¬“ð‘„´; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
+ñ‡\u1734.ð¨ºÃ©â¬“ð‘„´; ; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
+xn--c0e34564d.xn--9ca207st53lg3f; ñ‡\u1734.ð¨ºÃ©â¬“ð‘„´; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
+ñ‡\u1734.ð¨ºe\u0301⬓𑄴; ñ‡\u1734.ð¨ºÃ©â¬“ð‘„´; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
+ñ‡\u1734.ð¨ºÃ©â¬“ð‘„´; ñ‡\u1734.ð¨ºÃ©â¬“ð‘„´; [V5, V6]; xn--c0e34564d.xn--9ca207st53lg3f; ; ; # ᜴.ð¨ºÃ©â¬“ð‘„´
+ᢇ\u200D\uA8C4。︒𞤺; ᢇ\u200D\uA8C4.︒𞤺; [B1, B6, C2, V6]; xn--09e669a6x8j.xn--y86cv562b; ; xn--09e4694e.xn--y86cv562b; [B1, V6] # ᢇ꣄.︒𞤺
+ᢇ\u200D\uA8C4。。𞤺; ᢇ\u200D\uA8C4..𞤺; [B6, C2, X4_2]; xn--09e669a6x8j..xn--ye6h; [B6, C2, A4_2]; xn--09e4694e..xn--ye6h; [A4_2] # ᢇ꣄..𞤺
+ᢇ\u200D\uA8C4。。𞤘; ᢇ\u200D\uA8C4..𞤺; [B6, C2, X4_2]; xn--09e669a6x8j..xn--ye6h; [B6, C2, A4_2]; xn--09e4694e..xn--ye6h; [A4_2] # ᢇ꣄..𞤺
+xn--09e4694e..xn--ye6h; ᢇ\uA8C4..𞤺; [X4_2]; xn--09e4694e..xn--ye6h; [A4_2]; ; # ᢇ꣄..𞤺
+xn--09e669a6x8j..xn--ye6h; ᢇ\u200D\uA8C4..𞤺; [B6, C2, X4_2]; xn--09e669a6x8j..xn--ye6h; [B6, C2, A4_2]; ; # ᢇ꣄..𞤺
+ᢇ\u200D\uA8C4。︒𞤘; ᢇ\u200D\uA8C4.︒𞤺; [B1, B6, C2, V6]; xn--09e669a6x8j.xn--y86cv562b; ; xn--09e4694e.xn--y86cv562b; [B1, V6] # ᢇ꣄.︒𞤺
+xn--09e4694e.xn--y86cv562b; ᢇ\uA8C4.︒𞤺; [B1, V6]; xn--09e4694e.xn--y86cv562b; ; ; # ᢇ꣄.︒𞤺
+xn--09e669a6x8j.xn--y86cv562b; ᢇ\u200D\uA8C4.︒𞤺; [B1, B6, C2, V6]; xn--09e669a6x8j.xn--y86cv562b; ; ; # ᢇ꣄.︒𞤺
+𞩬򖙱\u1714\u200C。\u0631\u07AA≮; 𞩬򖙱\u1714\u200C.\u0631\u07AA≮; [B2, B3, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮
+𞩬򖙱\u1714\u200C。\u0631\u07AA<\u0338; 𞩬򖙱\u1714\u200C.\u0631\u07AA≮; [B2, B3, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮
+𞩬򖙱\u1714\u200C。\u0631\u07AA≮; 𞩬򖙱\u1714\u200C.\u0631\u07AA≮; [B2, B3, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮
+𞩬򖙱\u1714\u200C。\u0631\u07AA<\u0338; 𞩬򖙱\u1714\u200C.\u0631\u07AA≮; [B2, B3, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; xn--fze3930v7hz6b.xn--wgb86el10d; # ᜔.رު≮
+xn--fze3930v7hz6b.xn--wgb86el10d; 𞩬򖙱\u1714.\u0631\u07AA≮; [B2, B3, V6]; xn--fze3930v7hz6b.xn--wgb86el10d; ; ; # ᜔.رު≮
+xn--fze607b9651bjwl7c.xn--wgb86el10d; 𞩬򖙱\u1714\u200C.\u0631\u07AA≮; [B2, B3, V6]; xn--fze607b9651bjwl7c.xn--wgb86el10d; ; ; # ᜔.رު≮
+Ⴣ.\u0653ᢤ; Ⴣ.\u0653ᢤ; [V5, V6]; xn--7nd.xn--vhb294g; ; ; # Ⴣ.ٓᢤ
+Ⴣ.\u0653ᢤ; ; [V5, V6]; xn--7nd.xn--vhb294g; ; ; # Ⴣ.ٓᢤ
+ⴣ.\u0653ᢤ; ; [V5]; xn--rlj.xn--vhb294g; ; ; # ⴣ.ٓᢤ
+xn--rlj.xn--vhb294g; ⴣ.\u0653ᢤ; [V5]; xn--rlj.xn--vhb294g; ; ; # ⴣ.ٓᢤ
+xn--7nd.xn--vhb294g; Ⴣ.\u0653ᢤ; [V5, V6]; xn--7nd.xn--vhb294g; ; ; # Ⴣ.ٓᢤ
+ⴣ.\u0653ᢤ; ⴣ.\u0653ᢤ; [V5]; xn--rlj.xn--vhb294g; ; ; # ⴣ.ٓᢤ
+󠄈\u0813.싉ò„†»áƒ„ò‚¡; \u0813.싉ò„†»áƒ„ò‚¡; [V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # à “.싉Ⴤ
+󠄈\u0813.싉ò„†»áƒ„ò‚¡; \u0813.싉ò„†»áƒ„ò‚¡; [V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # à “.싉Ⴤ
+󠄈\u0813.싉ò„†»áƒ„ò‚¡; \u0813.싉ò„†»áƒ„ò‚¡; [V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # à “.싉Ⴤ
+󠄈\u0813.싉ò„†»áƒ„ò‚¡; \u0813.싉ò„†»áƒ„ò‚¡; [V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # à “.싉Ⴤ
+󠄈\u0813.싉ò„†»â´¤ò‚¡; \u0813.싉ò„†»â´¤ò‚¡; [V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # à “.싉ⴤ
+󠄈\u0813.싉ò„†»â´¤ò‚¡; \u0813.싉ò„†»â´¤ò‚¡; [V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # à “.싉ⴤ
+xn--oub.xn--sljz109bpe25dviva; \u0813.싉ò„†»â´¤ò‚¡; [V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # à “.싉ⴤ
+xn--oub.xn--8nd9522gpe69cviva; \u0813.싉ò„†»áƒ„ò‚¡; [V6]; xn--oub.xn--8nd9522gpe69cviva; ; ; # à “.싉Ⴤ
+󠄈\u0813.싉ò„†»â´¤ò‚¡; \u0813.싉ò„†»â´¤ò‚¡; [V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # à “.싉ⴤ
+󠄈\u0813.싉ò„†»â´¤ò‚¡; \u0813.싉ò„†»â´¤ò‚¡; [V6]; xn--oub.xn--sljz109bpe25dviva; ; ; # à “.싉ⴤ
+\uAA2C𑲫≮.⤂; \uAA2C𑲫≮.⤂; [V5]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂
+\uAA2C𑲫<\u0338.⤂; \uAA2C𑲫≮.⤂; [V5]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂
+\uAA2C𑲫≮.⤂; ; [V5]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂
+\uAA2C𑲫<\u0338.⤂; \uAA2C𑲫≮.⤂; [V5]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂
+xn--gdh1854cn19c.xn--kqi; \uAA2C𑲫≮.⤂; [V5]; xn--gdh1854cn19c.xn--kqi; ; ; # ꨬ𑲫≮.⤂
+\u0604ð©”≮Ⴢ.Ⴃ; \u0604ð©”≮Ⴢ.á‚£; [B1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # ð©”≮Ⴢ.á‚£
+\u0604ð©”<\u0338Ⴢ.Ⴃ; \u0604ð©”≮Ⴢ.á‚£; [B1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # ð©”≮Ⴢ.á‚£
+\u0604ð©”≮Ⴢ.á‚£; ; [B1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # ð©”≮Ⴢ.á‚£
+\u0604ð©”<\u0338Ⴢ.á‚£; \u0604ð©”≮Ⴢ.á‚£; [B1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # ð©”≮Ⴢ.á‚£
+\u0604ð©”<\u0338â´¢.â´ƒ; \u0604ð©”≮ⴢ.â´ƒ; [B1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # ð©”≮ⴢ.â´ƒ
+\u0604ð©”≮ⴢ.â´ƒ; ; [B1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # ð©”≮ⴢ.â´ƒ
+\u0604ð©”≮Ⴢ.â´ƒ; ; [B1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # ð©”≮Ⴢ.â´ƒ
+\u0604ð©”<\u0338Ⴢ.â´ƒ; \u0604ð©”≮Ⴢ.â´ƒ; [B1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # ð©”≮Ⴢ.â´ƒ
+xn--mfb416c0jox02t.xn--ukj; \u0604ð©”≮Ⴢ.â´ƒ; [B1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # ð©”≮Ⴢ.â´ƒ
+xn--mfb266l4khr54u.xn--ukj; \u0604ð©”≮ⴢ.â´ƒ; [B1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # ð©”≮ⴢ.â´ƒ
+xn--mfb416c0jox02t.xn--bnd; \u0604ð©”≮Ⴢ.á‚£; [B1, V6]; xn--mfb416c0jox02t.xn--bnd; ; ; # ð©”≮Ⴢ.á‚£
+\u0604ð©”<\u0338ⴢ.ⴃ; \u0604ð©”≮ⴢ.â´ƒ; [B1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # ð©”≮ⴢ.â´ƒ
+\u0604ð©”≮ⴢ.ⴃ; \u0604ð©”≮ⴢ.â´ƒ; [B1, V6]; xn--mfb266l4khr54u.xn--ukj; ; ; # ð©”≮ⴢ.â´ƒ
+\u0604ð©”≮Ⴢ.ⴃ; \u0604ð©”≮Ⴢ.â´ƒ; [B1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # ð©”≮Ⴢ.â´ƒ
+\u0604ð©”<\u0338Ⴢ.ⴃ; \u0604ð©”≮Ⴢ.â´ƒ; [B1, V6]; xn--mfb416c0jox02t.xn--ukj; ; ; # ð©”≮Ⴢ.â´ƒ
ð‘…。-; ð‘….-; [V3, V5]; xn--210d.-; ; ; # ð‘….-
xn--210d.-; ð‘….-; [V3, V5]; xn--210d.-; ; ; # ð‘….-
-්򕸽󠧱。饈≠٤; ්򕸽󠧱.饈≠٤; [B1, B5, B6, P1, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤
-්򕸽󠧱。饈≠٤; ්򕸽󠧱.饈≠٤; [B1, B5, B6, P1, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤
-්򕸽󠧱。饈≠٤; ්򕸽󠧱.饈≠٤; [B1, B5, B6, P1, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤
-්򕸽󠧱。饈≠٤; ්򕸽󠧱.饈≠٤; [B1, B5, B6, P1, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤
-xn--h1c25913jfwov.xn--dib144ler5f; ්򕸽󠧱.饈≠٤; [B1, B5, B6, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤
-𞥃ᠠâ·ï½¡â‰¯é‚…⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2, P1, V6]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
-𞥃ᠠâ·ï½¡≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2, P1, V6]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
-𞥃ᠠ7。≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2, P1, V6]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
-𞥃ᠠ7。≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2, P1, V6]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
-𞤡ᠠ7。≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2, P1, V6]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
-𞤡ᠠ7。≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2, P1, V6]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
-xn--7-v4j2826w.xn--4-ogoy01bou3i; 𞥃ᠠ7.≯邅⬻4; [B1, B2, V6]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
-𞤡ᠠâ·ï½¡≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2, P1, V6]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
-𞤡ᠠâ·ï½¡â‰¯é‚…⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2, P1, V6]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
-ò ¿¯á¡³-ð‘».ð¹´ð‹«Ø…󑎳; ; [B1, B6, P1, V6]; xn----m9j3429kxmy7e.xn--nfb7950kdihrp812a; ; ; # ᡳ-ð‘».ð¹´ð‹«
-xn----m9j3429kxmy7e.xn--nfb7950kdihrp812a; ò ¿¯á¡³-ð‘».ð¹´ð‹«Ø…󑎳; [B1, B6, V6]; xn----m9j3429kxmy7e.xn--nfb7950kdihrp812a; ; ; # ᡳ-ð‘».ð¹´ð‹«
-򠶆ࡅੑ.넨-󶧈; ; [B5, B6, P1, V6]; xn--3vb26hb6834b.xn----i37ez0957g; ; ; # ࡅੑ.넨-
-򠶆ࡅੑ.넨-󶧈; 򠶆ࡅੑ.넨-󶧈; [B5, B6, P1, V6]; xn--3vb26hb6834b.xn----i37ez0957g; ; ; # ࡅੑ.넨-
-xn--3vb26hb6834b.xn----i37ez0957g; 򠶆ࡅੑ.넨-󶧈; [B5, B6, V6]; xn--3vb26hb6834b.xn----i37ez0957g; ; ; # ࡅੑ.넨-
-ꡦᡑâ€â’ˆã€‚ð‹£-; ꡦᡑâ€â’ˆ.ð‹£-; [C2, P1, V3, V6]; xn--h8e470bl0d838o.xn----381i; ; xn--h8e863drj7h.xn----381i; [P1, V3, V6] # ꡦᡑ⒈.ð‹£-
-ꡦᡑâ€1.。ð‹£-; ꡦᡑâ€1..ð‹£-; [C2, V3, X4_2]; xn--1-o7j663bdl7m..xn----381i; [C2, V3, A4_2]; xn--1-o7j0610f..xn----381i; [V3, A4_2] # ꡦᡑ1..ð‹£-
+\u0DCA򕸽󠧱。饈≠\u0664; \u0DCA򕸽󠧱.饈≠\u0664; [B1, B5, B6, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤
+\u0DCA򕸽󠧱。饈=\u0338\u0664; \u0DCA򕸽󠧱.饈≠\u0664; [B1, B5, B6, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤
+\u0DCA򕸽󠧱。饈≠\u0664; \u0DCA򕸽󠧱.饈≠\u0664; [B1, B5, B6, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤
+\u0DCA򕸽󠧱。饈=\u0338\u0664; \u0DCA򕸽󠧱.饈≠\u0664; [B1, B5, B6, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤
+xn--h1c25913jfwov.xn--dib144ler5f; \u0DCA򕸽󠧱.饈≠\u0664; [B1, B5, B6, V5, V6]; xn--h1c25913jfwov.xn--dib144ler5f; ; ; # ්.饈≠٤
+𞥃ᠠâ·ï½¡â‰¯é‚…⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
+𞥃ᠠâ·ï½¡>\u0338邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
+𞥃ᠠ7。≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
+𞥃ᠠ7。>\u0338邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
+𞤡ᠠ7。>\u0338邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
+𞤡ᠠ7。≯邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
+xn--7-v4j2826w.xn--4-ogoy01bou3i; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
+𞤡ᠠâ·ï½¡>\u0338邅⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
+𞤡ᠠâ·ï½¡â‰¯é‚…⬻4; 𞥃ᠠ7.≯邅⬻4; [B1, B2]; xn--7-v4j2826w.xn--4-ogoy01bou3i; ; ; # 𞥃ᠠ7.≯邅⬻4
+ò ¿¯á¡³-ð‘».ð¹´ð‹«\u0605󑎳; ; [B1, B6, V6]; xn----m9j3429kxmy7e.xn--nfb7950kdihrp812a; ; ; # ᡳ-ð‘».ð¹´ð‹«
+xn----m9j3429kxmy7e.xn--nfb7950kdihrp812a; ò ¿¯á¡³-ð‘».ð¹´ð‹«\u0605󑎳; [B1, B6, V6]; xn----m9j3429kxmy7e.xn--nfb7950kdihrp812a; ; ; # ᡳ-ð‘».ð¹´ð‹«
+򠶆\u0845\u0A51.넨-󶧈; ; [B5, B6, V6]; xn--3vb26hb6834b.xn----i37ez0957g; ; ; # ࡅੑ.넨-
+򠶆\u0845\u0A51.넨-󶧈; 򠶆\u0845\u0A51.넨-󶧈; [B5, B6, V6]; xn--3vb26hb6834b.xn----i37ez0957g; ; ; # ࡅੑ.넨-
+xn--3vb26hb6834b.xn----i37ez0957g; 򠶆\u0845\u0A51.넨-󶧈; [B5, B6, V6]; xn--3vb26hb6834b.xn----i37ez0957g; ; ; # ࡅੑ.넨-
+ꡦᡑ\u200D⒈。ð‹£-; ꡦᡑ\u200Dâ’ˆ.ð‹£-; [C2, V3, V6]; xn--h8e470bl0d838o.xn----381i; ; xn--h8e863drj7h.xn----381i; [V3, V6] # ꡦᡑ⒈.ð‹£-
+ꡦᡑ\u200D1.。ð‹£-; ꡦᡑ\u200D1..ð‹£-; [C2, V3, X4_2]; xn--1-o7j663bdl7m..xn----381i; [C2, V3, A4_2]; xn--1-o7j0610f..xn----381i; [V3, A4_2] # ꡦᡑ1..ð‹£-
xn--1-o7j0610f..xn----381i; ꡦᡑ1..ð‹£-; [V3, X4_2]; xn--1-o7j0610f..xn----381i; [V3, A4_2]; ; # ꡦᡑ1..ð‹£-
-xn--1-o7j663bdl7m..xn----381i; ꡦᡑâ€1..ð‹£-; [C2, V3, X4_2]; xn--1-o7j663bdl7m..xn----381i; [C2, V3, A4_2]; ; # ꡦᡑ1..ð‹£-
+xn--1-o7j663bdl7m..xn----381i; ꡦᡑ\u200D1..ð‹£-; [C2, V3, X4_2]; xn--1-o7j663bdl7m..xn----381i; [C2, V3, A4_2]; ; # ꡦᡑ1..ð‹£-
xn--h8e863drj7h.xn----381i; ꡦᡑ⒈.ð‹£-; [V3, V6]; xn--h8e863drj7h.xn----381i; ; ; # ꡦᡑ⒈.ð‹£-
-xn--h8e470bl0d838o.xn----381i; ꡦᡑâ€â’ˆ.ð‹£-; [C2, V3, V6]; xn--h8e470bl0d838o.xn----381i; ; ; # ꡦᡑ⒈.ð‹£-
-Ⴌ。ô¼ ï­©; Ⴌ.ô¼ Ù¹; [B5, B6, P1, V6]; xn--knd.xn--yib19191t; ; ; # Ⴌ.Ù¹
-Ⴌ。ô¼ Ù¹; Ⴌ.ô¼ Ù¹; [B5, B6, P1, V6]; xn--knd.xn--yib19191t; ; ; # Ⴌ.Ù¹
-ⴌ。ô¼ Ù¹; â´Œ.ô¼ Ù¹; [B5, B6, P1, V6]; xn--3kj.xn--yib19191t; ; ; # â´Œ.Ù¹
-xn--3kj.xn--yib19191t; â´Œ.ô¼ Ù¹; [B5, B6, V6]; xn--3kj.xn--yib19191t; ; ; # â´Œ.Ù¹
-xn--knd.xn--yib19191t; Ⴌ.ô¼ Ù¹; [B5, B6, V6]; xn--knd.xn--yib19191t; ; ; # Ⴌ.Ù¹
-ⴌ。ô¼ ï­©; â´Œ.ô¼ Ù¹; [B5, B6, P1, V6]; xn--3kj.xn--yib19191t; ; ; # â´Œ.Ù¹
-ð®ð­±.྄áž-ᳺ; ; [B1, V5]; xn--r19c5a.xn----xjg270ag3m; ; ; # ð®ð­±.྄áž-ᳺ
-xn--r19c5a.xn----xjg270ag3m; ð®ð­±.྄áž-ᳺ; [B1, V5]; xn--r19c5a.xn----xjg270ag3m; ; ; # ð®ð­±.྄áž-ᳺ
-⒈䰹â€-。웈; ⒈䰹â€-.웈; [C2, P1, V3, V6]; xn----tgnx5rjr6c.xn--kp5b; ; xn----dcp160o.xn--kp5b; [P1, V3, V6] # ⒈䰹-.웈
-⒈䰹â€-。웈; ⒈䰹â€-.웈; [C2, P1, V3, V6]; xn----tgnx5rjr6c.xn--kp5b; ; xn----dcp160o.xn--kp5b; [P1, V3, V6] # ⒈䰹-.웈
-1.ä°¹â€-。웈; 1.ä°¹â€-.웈; [C2, V3]; 1.xn----tgnz80r.xn--kp5b; ; 1.xn----zw5a.xn--kp5b; [V3] # 1.ä°¹-.웈
-1.ä°¹â€-。웈; 1.ä°¹â€-.웈; [C2, V3]; 1.xn----tgnz80r.xn--kp5b; ; 1.xn----zw5a.xn--kp5b; [V3] # 1.ä°¹-.웈
+xn--h8e470bl0d838o.xn----381i; ꡦᡑ\u200Dâ’ˆ.ð‹£-; [C2, V3, V6]; xn--h8e470bl0d838o.xn----381i; ; ; # ꡦᡑ⒈.ð‹£-
+Ⴌ。ô¼ \uFB69; Ⴌ.ô¼ \u0679; [B5, B6, V6]; xn--knd.xn--yib19191t; ; ; # Ⴌ.Ù¹
+Ⴌ。ô¼ \u0679; Ⴌ.ô¼ \u0679; [B5, B6, V6]; xn--knd.xn--yib19191t; ; ; # Ⴌ.Ù¹
+ⴌ。ô¼ \u0679; â´Œ.ô¼ \u0679; [B5, B6, V6]; xn--3kj.xn--yib19191t; ; ; # â´Œ.Ù¹
+xn--3kj.xn--yib19191t; â´Œ.ô¼ \u0679; [B5, B6, V6]; xn--3kj.xn--yib19191t; ; ; # â´Œ.Ù¹
+xn--knd.xn--yib19191t; Ⴌ.ô¼ \u0679; [B5, B6, V6]; xn--knd.xn--yib19191t; ; ; # Ⴌ.Ù¹
+ⴌ。ô¼ \uFB69; â´Œ.ô¼ \u0679; [B5, B6, V6]; xn--3kj.xn--yib19191t; ; ; # â´Œ.Ù¹
+ð®ð­±.\u0F84\u135E-ᳺ; ; [B1, V5]; xn--r19c5a.xn----xjg270ag3m; ; ; # ð®ð­±.྄áž-ᳺ
+xn--r19c5a.xn----xjg270ag3m; ð®ð­±.\u0F84\u135E-ᳺ; [B1, V5]; xn--r19c5a.xn----xjg270ag3m; ; ; # ð®ð­±.྄áž-ᳺ
+⒈䰹\u200D-。웈; ⒈䰹\u200D-.웈; [C2, V3, V6]; xn----tgnx5rjr6c.xn--kp5b; ; xn----dcp160o.xn--kp5b; [V3, V6] # ⒈䰹-.웈
+⒈䰹\u200D-。웈; ⒈䰹\u200D-.웈; [C2, V3, V6]; xn----tgnx5rjr6c.xn--kp5b; ; xn----dcp160o.xn--kp5b; [V3, V6] # ⒈䰹-.웈
+1.䰹\u200D-。웈; 1.䰹\u200D-.웈; [C2, V3]; 1.xn----tgnz80r.xn--kp5b; ; 1.xn----zw5a.xn--kp5b; [V3] # 1.䰹-.웈
+1.䰹\u200D-。웈; 1.䰹\u200D-.웈; [C2, V3]; 1.xn----tgnz80r.xn--kp5b; ; 1.xn----zw5a.xn--kp5b; [V3] # 1.䰹-.웈
1.xn----zw5a.xn--kp5b; 1.䰹-.웈; [V3]; 1.xn----zw5a.xn--kp5b; ; ; # 1.䰹-.웈
-1.xn----tgnz80r.xn--kp5b; 1.ä°¹â€-.웈; [C2, V3]; 1.xn----tgnz80r.xn--kp5b; ; ; # 1.ä°¹-.웈
+1.xn----tgnz80r.xn--kp5b; 1.䰹\u200D-.웈; [C2, V3]; 1.xn----tgnz80r.xn--kp5b; ; ; # 1.䰹-.웈
xn----dcp160o.xn--kp5b; ⒈䰹-.웈; [V3, V6]; xn----dcp160o.xn--kp5b; ; ; # ⒈䰹-.웈
-xn----tgnx5rjr6c.xn--kp5b; ⒈䰹â€-.웈; [C2, V3, V6]; xn----tgnx5rjr6c.xn--kp5b; ; ; # ⒈䰹-.웈
-ã¦ã€‚‌󠳽߳; ã¦.‌󠳽߳; [C1, P1, V6]; xn--m9j.xn--rtb154j9l73w; ; xn--m9j.xn--rtb10784p; [P1, V6] # ã¦.ß³
-xn--m9j.xn--rtb10784p; ã¦.󠳽߳; [V6]; xn--m9j.xn--rtb10784p; ; ; # ã¦.ß³
-xn--m9j.xn--rtb154j9l73w; ã¦.‌󠳽߳; [C1, V6]; xn--m9j.xn--rtb154j9l73w; ; ; # ã¦.ß³
-ς。꧀ۧ; ς.꧀ۧ; [V5]; xn--3xa.xn--3lb1944f; ; xn--4xa.xn--3lb1944f; # ς.꧀ۧ
-ς。꧀ۧ; ς.꧀ۧ; [V5]; xn--3xa.xn--3lb1944f; ; xn--4xa.xn--3lb1944f; # ς.꧀ۧ
-Σ。꧀ۧ; σ.꧀ۧ; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ
-σ。꧀ۧ; σ.꧀ۧ; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ
-xn--4xa.xn--3lb1944f; σ.꧀ۧ; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ
-xn--3xa.xn--3lb1944f; ς.꧀ۧ; [V5]; xn--3xa.xn--3lb1944f; ; ; # ς.꧀ۧ
-Σ。꧀ۧ; σ.꧀ۧ; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ
-σ。꧀ۧ; σ.꧀ۧ; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ
-à¯ó¥«…òŒ‰‘.ႢႵ; ; [P1, V5, V6]; xn--xmc83135idcxza.xn--9md2b; ; ; # à¯.ႢႵ
-à¯ó¥«…òŒ‰‘.â´‚â´•; ; [P1, V5, V6]; xn--xmc83135idcxza.xn--tkjwb; ; ; # à¯.â´‚â´•
-à¯ó¥«…òŒ‰‘.Ⴂⴕ; ; [P1, V5, V6]; xn--xmc83135idcxza.xn--9md086l; ; ; # à¯.Ⴂⴕ
-xn--xmc83135idcxza.xn--9md086l; à¯ó¥«…òŒ‰‘.Ⴂⴕ; [V5, V6]; xn--xmc83135idcxza.xn--9md086l; ; ; # à¯.Ⴂⴕ
-xn--xmc83135idcxza.xn--tkjwb; à¯ó¥«…òŒ‰‘.â´‚â´•; [V5, V6]; xn--xmc83135idcxza.xn--tkjwb; ; ; # à¯.â´‚â´•
-xn--xmc83135idcxza.xn--9md2b; à¯ó¥«…òŒ‰‘.ႢႵ; [V5, V6]; xn--xmc83135idcxza.xn--9md2b; ; ; # à¯.ႢႵ
-ᰲ🄈⾛֦.â€ò¯¥¤ß½; ᰲ🄈走֦.â€ò¯¥¤ß½; [C2, P1, V5, V6]; xn--xcb756i493fwi5o.xn--1tb334j1197q; ; xn--xcb756i493fwi5o.xn--1tb13454l; [P1, V5, V6] # ᰲ🄈走֦.ß½
-á°²7,èµ°Ö¦.â€ò¯¥¤ß½; ; [C2, P1, V5, V6]; xn--7,-bid991urn3k.xn--1tb334j1197q; ; xn--7,-bid991urn3k.xn--1tb13454l; [P1, V5, V6] # á°²7,èµ°Ö¦.ß½
-xn--7,-bid991urn3k.xn--1tb13454l; ᰲ7,走֦.򯥤߽; [P1, V5, V6]; xn--7,-bid991urn3k.xn--1tb13454l; ; ; # ᰲ7,走֦.߽
-xn--7,-bid991urn3k.xn--1tb334j1197q; á°²7,èµ°Ö¦.â€ò¯¥¤ß½; [C2, P1, V5, V6]; xn--7,-bid991urn3k.xn--1tb334j1197q; ; ; # á°²7,èµ°Ö¦.ß½
-xn--xcb756i493fwi5o.xn--1tb13454l; ᰲ🄈走֦.򯥤߽; [V5, V6]; xn--xcb756i493fwi5o.xn--1tb13454l; ; ; # ᰲ🄈走֦.߽
-xn--xcb756i493fwi5o.xn--1tb334j1197q; ᰲ🄈走֦.â€ò¯¥¤ß½; [C2, V5, V6]; xn--xcb756i493fwi5o.xn--1tb334j1197q; ; ; # ᰲ🄈走֦.ß½
-ᢗ。Ӏñ„»; ᢗ.Ó€ñ„»; [P1, V6]; xn--hbf.xn--d5a86117e; ; ; # ᢗ.Ó€
-ᢗ。Ӏñ„»; ᢗ.Ó€ñ„»; [P1, V6]; xn--hbf.xn--d5a86117e; ; ; # ᢗ.Ó€
-ᢗ。Óñ„»; ᢗ.Óñ„»; [P1, V6]; xn--hbf.xn--s5a83117e; ; ; # ᢗ.Ó
+xn----tgnx5rjr6c.xn--kp5b; ⒈䰹\u200D-.웈; [C2, V3, V6]; xn----tgnx5rjr6c.xn--kp5b; ; ; # ⒈䰹-.웈
+ã¦ã€‚\u200Có ³½\u07F3; ã¦.\u200Có ³½\u07F3; [C1, V6]; xn--m9j.xn--rtb154j9l73w; ; xn--m9j.xn--rtb10784p; [V6] # ã¦.ß³
+xn--m9j.xn--rtb10784p; ã¦.ó ³½\u07F3; [V6]; xn--m9j.xn--rtb10784p; ; ; # ã¦.ß³
+xn--m9j.xn--rtb154j9l73w; ã¦.\u200Có ³½\u07F3; [C1, V6]; xn--m9j.xn--rtb154j9l73w; ; ; # ã¦.ß³
+ς。\uA9C0\u06E7; ς.\uA9C0\u06E7; [V5]; xn--3xa.xn--3lb1944f; ; xn--4xa.xn--3lb1944f; # ς.꧀ۧ
+ς。\uA9C0\u06E7; ς.\uA9C0\u06E7; [V5]; xn--3xa.xn--3lb1944f; ; xn--4xa.xn--3lb1944f; # ς.꧀ۧ
+Σ。\uA9C0\u06E7; σ.\uA9C0\u06E7; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ
+σ。\uA9C0\u06E7; σ.\uA9C0\u06E7; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ
+xn--4xa.xn--3lb1944f; σ.\uA9C0\u06E7; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ
+xn--3xa.xn--3lb1944f; ς.\uA9C0\u06E7; [V5]; xn--3xa.xn--3lb1944f; ; ; # ς.꧀ۧ
+Σ。\uA9C0\u06E7; σ.\uA9C0\u06E7; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ
+σ。\uA9C0\u06E7; σ.\uA9C0\u06E7; [V5]; xn--4xa.xn--3lb1944f; ; ; # σ.꧀ۧ
+\u0BCD󥫅òŒ‰‘.ႢႵ; ; [V5, V6]; xn--xmc83135idcxza.xn--9md2b; ; ; # à¯.ႢႵ
+\u0BCD󥫅òŒ‰‘.â´‚â´•; ; [V5, V6]; xn--xmc83135idcxza.xn--tkjwb; ; ; # à¯.â´‚â´•
+\u0BCD󥫅òŒ‰‘.Ⴂⴕ; ; [V5, V6]; xn--xmc83135idcxza.xn--9md086l; ; ; # à¯.Ⴂⴕ
+xn--xmc83135idcxza.xn--9md086l; \u0BCD󥫅òŒ‰‘.Ⴂⴕ; [V5, V6]; xn--xmc83135idcxza.xn--9md086l; ; ; # à¯.Ⴂⴕ
+xn--xmc83135idcxza.xn--tkjwb; \u0BCD󥫅òŒ‰‘.â´‚â´•; [V5, V6]; xn--xmc83135idcxza.xn--tkjwb; ; ; # à¯.â´‚â´•
+xn--xmc83135idcxza.xn--9md2b; \u0BCD󥫅òŒ‰‘.ႢႵ; [V5, V6]; xn--xmc83135idcxza.xn--9md2b; ; ; # à¯.ႢႵ
+\u1C32🄈⾛\u05A6.\u200D򯥤\u07FD; \u1C32🄈走\u05A6.\u200D򯥤\u07FD; [C2, V5, V6]; xn--xcb756i493fwi5o.xn--1tb334j1197q; ; xn--xcb756i493fwi5o.xn--1tb13454l; [V5, V6] # ᰲ🄈走֦.߽
+\u1C327,走\u05A6.\u200D򯥤\u07FD; ; [C2, V5, V6]; xn--7,-bid991urn3k.xn--1tb334j1197q; ; xn--7,-bid991urn3k.xn--1tb13454l; [V5, V6] # ᰲ7,走֦.߽
+xn--7,-bid991urn3k.xn--1tb13454l; \u1C327,走\u05A6.򯥤\u07FD; [V5, V6]; xn--7,-bid991urn3k.xn--1tb13454l; ; ; # ᰲ7,走֦.߽
+xn--7,-bid991urn3k.xn--1tb334j1197q; \u1C327,走\u05A6.\u200D򯥤\u07FD; [C2, V5, V6]; xn--7,-bid991urn3k.xn--1tb334j1197q; ; ; # ᰲ7,走֦.߽
+xn--xcb756i493fwi5o.xn--1tb13454l; \u1C32🄈走\u05A6.򯥤\u07FD; [V5, V6]; xn--xcb756i493fwi5o.xn--1tb13454l; ; ; # ᰲ🄈走֦.߽
+xn--xcb756i493fwi5o.xn--1tb334j1197q; \u1C32🄈走\u05A6.\u200D򯥤\u07FD; [C2, V5, V6]; xn--xcb756i493fwi5o.xn--1tb334j1197q; ; ; # ᰲ🄈走֦.߽
+ᢗ。Ӏñ„»; ᢗ.Ó€ñ„»; [V6]; xn--hbf.xn--d5a86117e; ; ; # ᢗ.Ó€
+ᢗ。Ӏñ„»; ᢗ.Ó€ñ„»; [V6]; xn--hbf.xn--d5a86117e; ; ; # ᢗ.Ó€
+ᢗ。Óñ„»; ᢗ.Óñ„»; [V6]; xn--hbf.xn--s5a83117e; ; ; # ᢗ.Ó
xn--hbf.xn--s5a83117e; ᢗ.Óñ„»; [V6]; xn--hbf.xn--s5a83117e; ; ; # ᢗ.Ó
xn--hbf.xn--d5a86117e; ᢗ.Ó€ñ„»; [V6]; xn--hbf.xn--d5a86117e; ; ; # ᢗ.Ó€
-ᢗ。Óñ„»; ᢗ.Óñ„»; [P1, V6]; xn--hbf.xn--s5a83117e; ; ; # ᢗ.Ó
-Ù¨-。ñ ‡ðŸ†á„¾; Ù¨-.ñ ‡ðŸ†á„¾; [B1, P1, V3, V6]; xn----oqc.xn--qrd1699v327w; ; ; # Ù¨-.ðŸ†á„¾
-xn----oqc.xn--qrd1699v327w; Ù¨-.ñ ‡ðŸ†á„¾; [B1, V3, V6]; xn----oqc.xn--qrd1699v327w; ; ; # Ù¨-.ðŸ†á„¾
+ᢗ。Óñ„»; ᢗ.Óñ„»; [V6]; xn--hbf.xn--s5a83117e; ; ; # ᢗ.Ó
+\u0668-。ñ ‡ðŸ†á„¾; \u0668-.ñ ‡ðŸ†á„¾; [B1, V3, V6]; xn----oqc.xn--qrd1699v327w; ; ; # Ù¨-.ðŸ†á„¾
+xn----oqc.xn--qrd1699v327w; \u0668-.ñ ‡ðŸ†á„¾; [B1, V3, V6]; xn----oqc.xn--qrd1699v327w; ; ; # Ù¨-.ðŸ†á„¾
-ð‹·ð–¾‘。󠆬; -ð‹·ð–¾‘.; [V3]; xn----991iq40y.; ; ; # -ð‹·ð–¾‘.
xn----991iq40y.; -ð‹·ð–¾‘.; [V3]; xn----991iq40y.; ; ; # -ð‹·ð–¾‘.
-‌ð¹³ðŸ´ë©ˆ.꯭ñ¡¼; ; [B1, C1, P1, V5, V6]; xn--0ug6681d406b7bwk.xn--429a8682s; ; xn--422b325mqb6i.xn--429a8682s; [B1, P1, V5, V6] # ð¹³ðŸ´ë©ˆ.꯭
-‌ð¹³ðŸ´á„†á…¥á†·.꯭ñ¡¼; ‌ð¹³ðŸ´ë©ˆ.꯭ñ¡¼; [B1, C1, P1, V5, V6]; xn--0ug6681d406b7bwk.xn--429a8682s; ; xn--422b325mqb6i.xn--429a8682s; [B1, P1, V5, V6] # ð¹³ðŸ´ë©ˆ.꯭
-xn--422b325mqb6i.xn--429a8682s; ð¹³ðŸ´ë©ˆ.꯭ñ¡¼; [B1, V5, V6]; xn--422b325mqb6i.xn--429a8682s; ; ; # ð¹³ðŸ´ë©ˆ.꯭
-xn--0ug6681d406b7bwk.xn--429a8682s; ‌ð¹³ðŸ´ë©ˆ.꯭ñ¡¼; [B1, C1, V5, V6]; xn--0ug6681d406b7bwk.xn--429a8682s; ; ; # ð¹³ðŸ´ë©ˆ.꯭
-≮.ݩ؃; ; [B1, P1, V6]; xn--gdh.xn--lfb92e; ; ; # ≮.ݩ
-≮.ݩ؃; ≮.ݩ؃; [B1, P1, V6]; xn--gdh.xn--lfb92e; ; ; # ≮.ݩ
-xn--gdh.xn--lfb92e; ≮.ݩ؃; [B1, V6]; xn--gdh.xn--lfb92e; ; ; # ≮.ݩ
-ð¶­â¾†ï½¡â€Œð‘š¶òŸ±ƒðž°˜; ð¶­èˆŒ.‌𑚶òŸ±ƒðž°˜; [B1, B2, B3, C1, P1, V6]; xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; ; xn--tc1ao37z.xn--6e2dw557azds2d; [B2, B3, B5, B6, P1, V5, V6] # 舌.𑚶
-ð¶­èˆŒã€‚‌𑚶òŸ±ƒðž°˜; ð¶­èˆŒ.‌𑚶òŸ±ƒðž°˜; [B1, B2, B3, C1, P1, V6]; xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; ; xn--tc1ao37z.xn--6e2dw557azds2d; [B2, B3, B5, B6, P1, V5, V6] # 舌.𑚶
+\u200Cð¹³ðŸ´ë©ˆ.\uABEDñ¡¼; ; [B1, C1, V5, V6]; xn--0ug6681d406b7bwk.xn--429a8682s; ; xn--422b325mqb6i.xn--429a8682s; [B1, V5, V6] # ð¹³ðŸ´ë©ˆ.꯭
+\u200Cð¹³ðŸ´á„†á…¥á†·.\uABEDñ¡¼; \u200Cð¹³ðŸ´ë©ˆ.\uABEDñ¡¼; [B1, C1, V5, V6]; xn--0ug6681d406b7bwk.xn--429a8682s; ; xn--422b325mqb6i.xn--429a8682s; [B1, V5, V6] # ð¹³ðŸ´ë©ˆ.꯭
+xn--422b325mqb6i.xn--429a8682s; ð¹³ðŸ´ë©ˆ.\uABEDñ¡¼; [B1, V5, V6]; xn--422b325mqb6i.xn--429a8682s; ; ; # ð¹³ðŸ´ë©ˆ.꯭
+xn--0ug6681d406b7bwk.xn--429a8682s; \u200Cð¹³ðŸ´ë©ˆ.\uABEDñ¡¼; [B1, C1, V5, V6]; xn--0ug6681d406b7bwk.xn--429a8682s; ; ; # ð¹³ðŸ´ë©ˆ.꯭
+≮.\u0769\u0603; ; [B1, V6]; xn--gdh.xn--lfb92e; ; ; # ≮.ݩ
+<\u0338.\u0769\u0603; ≮.\u0769\u0603; [B1, V6]; xn--gdh.xn--lfb92e; ; ; # ≮.ݩ
+xn--gdh.xn--lfb92e; ≮.\u0769\u0603; [B1, V6]; xn--gdh.xn--lfb92e; ; ; # ≮.ݩ
+ð¶­â¾†ï½¡\u200C𑚶òŸ±ƒðž°˜; ð¶­èˆŒ.\u200C𑚶òŸ±ƒðž°˜; [B1, B2, B3, C1, V6]; xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; ; xn--tc1ao37z.xn--6e2dw557azds2d; [B2, B3, B5, B6, V5, V6] # 舌.𑚶
+ð¶­èˆŒã€‚\u200C𑚶òŸ±ƒðž°˜; ð¶­èˆŒ.\u200C𑚶òŸ±ƒðž°˜; [B1, B2, B3, C1, V6]; xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; ; xn--tc1ao37z.xn--6e2dw557azds2d; [B2, B3, B5, B6, V5, V6] # 舌.𑚶
xn--tc1ao37z.xn--6e2dw557azds2d; ð¶­èˆŒ.𑚶òŸ±ƒðž°˜; [B2, B3, B5, B6, V5, V6]; xn--tc1ao37z.xn--6e2dw557azds2d; ; ; # 舌.𑚶
-xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; ð¶­èˆŒ.‌𑚶òŸ±ƒðž°˜; [B1, B2, B3, C1, V6]; xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; ; ; # 舌.𑚶
-‌Ⴠ-.ðŸ·Ï‚𞴺ς; ‌Ⴠ-.1ς𞴺ς; [B1, C1, P1, V3, V6]; xn----z1g168i.xn--1-ymba92321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, P1, V3, V6] # Ⴠ-.1ς𞴺ς
-‌Ⴠ-.1ς𞴺ς; ; [B1, C1, P1, V3, V6]; xn----z1g168i.xn--1-ymba92321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, P1, V3, V6] # Ⴠ-.1ς𞴺ς
-‌ⴠ-.1ς𞴺ς; ; [B1, C1, V3]; xn----rgn530d.xn--1-ymba92321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1ς𞴺ς
-‌Ⴠ-.1Σ𞴺Σ; ‌Ⴠ-.1σ𞴺σ; [B1, C1, P1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, P1, V3, V6] # Ⴠ-.1σ𞴺σ
-‌ⴠ-.1σ𞴺σ; ; [B1, C1, V3]; xn----rgn530d.xn--1-0mba52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1σ𞴺σ
-‌Ⴠ-.1σ𞴺Σ; ‌Ⴠ-.1σ𞴺σ; [B1, C1, P1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, P1, V3, V6] # Ⴠ-.1σ𞴺σ
+xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; ð¶­èˆŒ.\u200C𑚶òŸ±ƒðž°˜; [B1, B2, B3, C1, V6]; xn--tc1ao37z.xn--0ugx728gi1nfwqz2e; ; ; # 舌.𑚶
+\u200CჀ-.ðŸ·Ï‚𞴺ς; \u200CჀ-.1ς𞴺ς; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymba92321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1ς𞴺ς
+\u200CჀ-.1ς𞴺ς; ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymba92321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1ς𞴺ς
+\u200Cⴠ-.1ς𞴺ς; ; [B1, C1, V3]; xn----rgn530d.xn--1-ymba92321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1ς𞴺ς
+\u200CჀ-.1Σ𞴺Σ; \u200CჀ-.1σ𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1σ𞴺σ
+\u200Cⴠ-.1σ𞴺σ; ; [B1, C1, V3]; xn----rgn530d.xn--1-0mba52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1σ𞴺σ
+\u200CჀ-.1σ𞴺Σ; \u200CჀ-.1σ𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1σ𞴺σ
xn----z1g.xn--1-0mba52321c; Ⴠ-.1σ𞴺σ; [B1, B6, V3, V6]; xn----z1g.xn--1-0mba52321c; ; ; # Ⴠ-.1σ𞴺σ
-xn----z1g168i.xn--1-0mba52321c; ‌Ⴠ-.1σ𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; ; # Ⴠ-.1σ𞴺σ
+xn----z1g168i.xn--1-0mba52321c; \u200CჀ-.1σ𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; ; # Ⴠ-.1σ𞴺σ
xn----2ws.xn--1-0mba52321c; ⴠ-.1σ𞴺σ; [B1, B6, V3]; xn----2ws.xn--1-0mba52321c; ; ; # ⴠ-.1σ𞴺σ
-xn----rgn530d.xn--1-0mba52321c; ‌ⴠ-.1σ𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-0mba52321c; ; ; # ⴠ-.1σ𞴺σ
-‌Ⴠ-.1ς𞴺Σ; ‌Ⴠ-.1ς𞴺σ; [B1, C1, P1, V3, V6]; xn----z1g168i.xn--1-ymbd52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, P1, V3, V6] # Ⴠ-.1ς𞴺σ
-‌ⴠ-.1ς𞴺σ; ; [B1, C1, V3]; xn----rgn530d.xn--1-ymbd52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1ς𞴺σ
-xn----rgn530d.xn--1-ymbd52321c; ‌ⴠ-.1ς𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-ymbd52321c; ; ; # ⴠ-.1ς𞴺σ
-xn----z1g168i.xn--1-ymbd52321c; ‌Ⴠ-.1ς𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymbd52321c; ; ; # Ⴠ-.1ς𞴺σ
-xn----rgn530d.xn--1-ymba92321c; ‌ⴠ-.1ς𞴺ς; [B1, C1, V3]; xn----rgn530d.xn--1-ymba92321c; ; ; # ⴠ-.1ς𞴺ς
-xn----z1g168i.xn--1-ymba92321c; ‌Ⴠ-.1ς𞴺ς; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymba92321c; ; ; # Ⴠ-.1ς𞴺ς
-‌ⴠ-.ðŸ·Ï‚𞴺ς; ‌ⴠ-.1ς𞴺ς; [B1, C1, V3]; xn----rgn530d.xn--1-ymba92321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # â´ -.1ς𞴺ς
-‌Ⴠ-.ðŸ·Î£ðž´ºÎ£; ‌Ⴠ-.1σ𞴺σ; [B1, C1, P1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, P1, V3, V6] # Ⴠ-.1σ𞴺σ
-‌ⴠ-.ðŸ·Ïƒðž´ºÏƒ; ‌ⴠ-.1σ𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-0mba52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # â´ -.1σ𞴺σ
-‌Ⴠ-.ðŸ·Ïƒðž´ºÎ£; ‌Ⴠ-.1σ𞴺σ; [B1, C1, P1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, P1, V3, V6] # Ⴠ-.1σ𞴺σ
-‌Ⴠ-.ðŸ·Ï‚𞴺Σ; ‌Ⴠ-.1ς𞴺σ; [B1, C1, P1, V3, V6]; xn----z1g168i.xn--1-ymbd52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, P1, V3, V6] # Ⴠ-.1ς𞴺σ
-‌ⴠ-.ðŸ·Ï‚𞴺σ; ‌ⴠ-.1ς𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-ymbd52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # â´ -.1ς𞴺σ
-𑲘󠄒𓑡。ðŸªá‚¼; 𑲘𓑡.8Ⴜ; [P1, V5, V6]; xn--7m3d291b.xn--8-s1g; ; ; # 𑲘.8Ⴜ
-𑲘󠄒𓑡。8Ⴜ; 𑲘𓑡.8Ⴜ; [P1, V5, V6]; xn--7m3d291b.xn--8-s1g; ; ; # 𑲘.8Ⴜ
-𑲘󠄒𓑡。8ⴜ; 𑲘𓑡.8ⴜ; [P1, V5, V6]; xn--7m3d291b.xn--8-vws; ; ; # 𑲘.8ⴜ
+xn----rgn530d.xn--1-0mba52321c; \u200Cⴠ-.1σ𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-0mba52321c; ; ; # ⴠ-.1σ𞴺σ
+\u200CჀ-.1ς𞴺Σ; \u200CჀ-.1ς𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymbd52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1ς𞴺σ
+\u200Cⴠ-.1ς𞴺σ; ; [B1, C1, V3]; xn----rgn530d.xn--1-ymbd52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # ⴠ-.1ς𞴺σ
+xn----rgn530d.xn--1-ymbd52321c; \u200Cⴠ-.1ς𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-ymbd52321c; ; ; # ⴠ-.1ς𞴺σ
+xn----z1g168i.xn--1-ymbd52321c; \u200CჀ-.1ς𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymbd52321c; ; ; # Ⴠ-.1ς𞴺σ
+xn----rgn530d.xn--1-ymba92321c; \u200Cⴠ-.1ς𞴺ς; [B1, C1, V3]; xn----rgn530d.xn--1-ymba92321c; ; ; # ⴠ-.1ς𞴺ς
+xn----z1g168i.xn--1-ymba92321c; \u200CჀ-.1ς𞴺ς; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymba92321c; ; ; # Ⴠ-.1ς𞴺ς
+\u200Câ´ -.ðŸ·Ï‚𞴺ς; \u200Câ´ -.1ς𞴺ς; [B1, C1, V3]; xn----rgn530d.xn--1-ymba92321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # â´ -.1ς𞴺ς
+\u200CჀ-.ðŸ·Î£ðž´ºÎ£; \u200CჀ-.1σ𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1σ𞴺σ
+\u200Câ´ -.ðŸ·Ïƒðž´ºÏƒ; \u200Câ´ -.1σ𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-0mba52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # â´ -.1σ𞴺σ
+\u200CჀ-.ðŸ·Ïƒðž´ºÎ£; \u200CჀ-.1σ𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-0mba52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1σ𞴺σ
+\u200CჀ-.ðŸ·Ï‚𞴺Σ; \u200CჀ-.1ς𞴺σ; [B1, C1, V3, V6]; xn----z1g168i.xn--1-ymbd52321c; ; xn----z1g.xn--1-0mba52321c; [B1, B6, V3, V6] # Ⴠ-.1ς𞴺σ
+\u200Câ´ -.ðŸ·Ï‚𞴺σ; \u200Câ´ -.1ς𞴺σ; [B1, C1, V3]; xn----rgn530d.xn--1-ymbd52321c; ; xn----2ws.xn--1-0mba52321c; [B1, B6, V3] # â´ -.1ς𞴺σ
+𑲘󠄒𓑡。ðŸªá‚¼; 𑲘𓑡.8Ⴜ; [V5, V6]; xn--7m3d291b.xn--8-s1g; ; ; # 𑲘.8Ⴜ
+𑲘󠄒𓑡。8Ⴜ; 𑲘𓑡.8Ⴜ; [V5, V6]; xn--7m3d291b.xn--8-s1g; ; ; # 𑲘.8Ⴜ
+𑲘󠄒𓑡。8ⴜ; 𑲘𓑡.8ⴜ; [V5, V6]; xn--7m3d291b.xn--8-vws; ; ; # 𑲘.8ⴜ
xn--7m3d291b.xn--8-vws; 𑲘𓑡.8ⴜ; [V5, V6]; xn--7m3d291b.xn--8-vws; ; ; # 𑲘.8ⴜ
xn--7m3d291b.xn--8-s1g; 𑲘𓑡.8Ⴜ; [V5, V6]; xn--7m3d291b.xn--8-s1g; ; ; # 𑲘.8Ⴜ
-𑲘󠄒𓑡。ðŸªâ´œ; 𑲘𓑡.8â´œ; [P1, V5, V6]; xn--7m3d291b.xn--8-vws; ; ; # 𑲘.8â´œ
-äªÚ«ß à¥ï½¡ë­•á¢áž¹; äªÚ«ß à¥.ë­•á¢áž¹; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # äªÚ«ß à¥.ë­•á¢áž¹
-äªÚ«ß à¥ï½¡á„†á…¯á†¬á¢áž¹; äªÚ«ß à¥.ë­•á¢áž¹; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # äªÚ«ß à¥.ë­•á¢áž¹
-äªÚ«ß à¥ã€‚ë­•á¢áž¹; äªÚ«ß à¥.ë­•á¢áž¹; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # äªÚ«ß à¥.ë­•á¢áž¹
-äªÚ«ß à¥ã€‚뭕á¢áž¹; äªÚ«ß à¥.ë­•á¢áž¹; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # äªÚ«ß à¥.ë­•á¢áž¹
-xn--ekb23dj4at01n.xn--43e96bh910b; äªÚ«ß à¥.ë­•á¢áž¹; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # äªÚ«ß à¥.ë­•á¢áž¹
-᮫。🂉ó °; ᮫.🂉ó °; [P1, V5, V6]; xn--zxf.xn--fx7ho0250c; ; ; # ᮫.🂉
-᮫。🂉ó °; ᮫.🂉ó °; [P1, V5, V6]; xn--zxf.xn--fx7ho0250c; ; ; # ᮫.🂉
-xn--zxf.xn--fx7ho0250c; ᮫.🂉ó °; [V5, V6]; xn--zxf.xn--fx7ho0250c; ; ; # ᮫.🂉
-󩎃ૄ。ςâ€ð¹®ð‘ˆµ; 󩎃ૄ.Ï‚â€ð¹®ð‘ˆµ; [B5, C2, P1, V6]; xn--dfc53161q.xn--3xa006lzo7nsfd; ; xn--dfc53161q.xn--4xa8467k5mc; [B5, P1, V6] # à«„.Ï‚ð¹®ð‘ˆµ
-󩎃ૄ。Σâ€ð¹®ð‘ˆµ; 󩎃ૄ.σâ€ð¹®ð‘ˆµ; [B5, C2, P1, V6]; xn--dfc53161q.xn--4xa895lzo7nsfd; ; xn--dfc53161q.xn--4xa8467k5mc; [B5, P1, V6] # à«„.σð¹®ð‘ˆµ
-󩎃ૄ。σâ€ð¹®ð‘ˆµ; 󩎃ૄ.σâ€ð¹®ð‘ˆµ; [B5, C2, P1, V6]; xn--dfc53161q.xn--4xa895lzo7nsfd; ; xn--dfc53161q.xn--4xa8467k5mc; [B5, P1, V6] # à«„.σð¹®ð‘ˆµ
-xn--dfc53161q.xn--4xa8467k5mc; 󩎃ૄ.σð¹®ð‘ˆµ; [B5, V6]; xn--dfc53161q.xn--4xa8467k5mc; ; ; # à«„.σð¹®ð‘ˆµ
-xn--dfc53161q.xn--4xa895lzo7nsfd; 󩎃ૄ.σâ€ð¹®ð‘ˆµ; [B5, C2, V6]; xn--dfc53161q.xn--4xa895lzo7nsfd; ; ; # à«„.σð¹®ð‘ˆµ
-xn--dfc53161q.xn--3xa006lzo7nsfd; 󩎃ૄ.Ï‚â€ð¹®ð‘ˆµ; [B5, C2, V6]; xn--dfc53161q.xn--3xa006lzo7nsfd; ; ; # à«„.Ï‚ð¹®ð‘ˆµ
-ð«€á¡‚𑜫.𑘿; ð«€á¡‚𑜫.𑘿; [B1, B2, B3, B6, V5]; xn--17e9625js1h.xn--sb2d; ; ; # ð«€á¡‚𑜫.𑘿
-ð«€á¡‚𑜫.𑘿; ; [B1, B2, B3, B6, V5]; xn--17e9625js1h.xn--sb2d; ; ; # ð«€á¡‚𑜫.𑘿
-xn--17e9625js1h.xn--sb2d; ð«€á¡‚𑜫.𑘿; [B1, B2, B3, B6, V5]; xn--17e9625js1h.xn--sb2d; ; ; # ð«€á¡‚𑜫.𑘿
-󬚶󸋖򖩰-。‌; 󬚶󸋖򖩰-.‌; [C1, P1, V3, V6]; xn----7i12hu122k9ire.xn--0ug; ; xn----7i12hu122k9ire.; [P1, V3, V6] # -.
+𑲘󠄒𓑡。ðŸªâ´œ; 𑲘𓑡.8â´œ; [V5, V6]; xn--7m3d291b.xn--8-vws; ; ; # 𑲘.8â´œ
+äª\u06AB\u07E0\u0941。뭕á¢\u17B9; äª\u06AB\u07E0\u0941.ë­•á¢\u17B9; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # äªÚ«ß à¥.ë­•á¢áž¹
+äª\u06AB\u07E0\u0941。뭕á¢\u17B9; äª\u06AB\u07E0\u0941.ë­•á¢\u17B9; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # äªÚ«ß à¥.ë­•á¢áž¹
+äª\u06AB\u07E0\u0941。뭕á¢\u17B9; äª\u06AB\u07E0\u0941.ë­•á¢\u17B9; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # äªÚ«ß à¥.ë­•á¢áž¹
+äª\u06AB\u07E0\u0941。뭕á¢\u17B9; äª\u06AB\u07E0\u0941.ë­•á¢\u17B9; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # äªÚ«ß à¥.ë­•á¢áž¹
+xn--ekb23dj4at01n.xn--43e96bh910b; äª\u06AB\u07E0\u0941.ë­•á¢\u17B9; [B5, B6]; xn--ekb23dj4at01n.xn--43e96bh910b; ; ; # äªÚ«ß à¥.ë­•á¢áž¹
+\u1BAB。🂉ó °; \u1BAB.🂉ó °; [V5, V6]; xn--zxf.xn--fx7ho0250c; ; ; # ᮫.🂉
+\u1BAB。🂉ó °; \u1BAB.🂉ó °; [V5, V6]; xn--zxf.xn--fx7ho0250c; ; ; # ᮫.🂉
+xn--zxf.xn--fx7ho0250c; \u1BAB.🂉ó °; [V5, V6]; xn--zxf.xn--fx7ho0250c; ; ; # ᮫.🂉
+󩎃\u0AC4。ς\u200Dð¹®ð‘ˆµ; 󩎃\u0AC4.Ï‚\u200Dð¹®ð‘ˆµ; [B5, C2, V6]; xn--dfc53161q.xn--3xa006lzo7nsfd; ; xn--dfc53161q.xn--4xa8467k5mc; [B5, V6] # à«„.Ï‚ð¹®ð‘ˆµ
+󩎃\u0AC4。Σ\u200Dð¹®ð‘ˆµ; 󩎃\u0AC4.σ\u200Dð¹®ð‘ˆµ; [B5, C2, V6]; xn--dfc53161q.xn--4xa895lzo7nsfd; ; xn--dfc53161q.xn--4xa8467k5mc; [B5, V6] # à«„.σð¹®ð‘ˆµ
+󩎃\u0AC4。σ\u200Dð¹®ð‘ˆµ; 󩎃\u0AC4.σ\u200Dð¹®ð‘ˆµ; [B5, C2, V6]; xn--dfc53161q.xn--4xa895lzo7nsfd; ; xn--dfc53161q.xn--4xa8467k5mc; [B5, V6] # à«„.σð¹®ð‘ˆµ
+xn--dfc53161q.xn--4xa8467k5mc; 󩎃\u0AC4.σð¹®ð‘ˆµ; [B5, V6]; xn--dfc53161q.xn--4xa8467k5mc; ; ; # à«„.σð¹®ð‘ˆµ
+xn--dfc53161q.xn--4xa895lzo7nsfd; 󩎃\u0AC4.σ\u200Dð¹®ð‘ˆµ; [B5, C2, V6]; xn--dfc53161q.xn--4xa895lzo7nsfd; ; ; # à«„.σð¹®ð‘ˆµ
+xn--dfc53161q.xn--3xa006lzo7nsfd; 󩎃\u0AC4.Ï‚\u200Dð¹®ð‘ˆµ; [B5, C2, V6]; xn--dfc53161q.xn--3xa006lzo7nsfd; ; ; # à«„.Ï‚ð¹®ð‘ˆµ
+ð«€á¡‚𑜫.𑘿; ð«€á¡‚𑜫.𑘿; [B1, B2, B3, V5]; xn--17e9625js1h.xn--sb2d; ; ; # ð«€á¡‚𑜫.𑘿
+ð«€á¡‚𑜫.𑘿; ; [B1, B2, B3, V5]; xn--17e9625js1h.xn--sb2d; ; ; # ð«€á¡‚𑜫.𑘿
+xn--17e9625js1h.xn--sb2d; ð«€á¡‚𑜫.𑘿; [B1, B2, B3, V5]; xn--17e9625js1h.xn--sb2d; ; ; # ð«€á¡‚𑜫.𑘿
+󬚶󸋖򖩰-。\u200C; 󬚶󸋖򖩰-.\u200C; [C1, V3, V6]; xn----7i12hu122k9ire.xn--0ug; ; xn----7i12hu122k9ire.; [V3, V6] # -.
xn----7i12hu122k9ire.; 󬚶󸋖򖩰-.; [V3, V6]; xn----7i12hu122k9ire.; ; ; # -.
-xn----7i12hu122k9ire.xn--0ug; 󬚶󸋖򖩰-.‌; [C1, V3, V6]; xn----7i12hu122k9ire.xn--0ug; ; ; # -.
-ð¹£ï¼Žß‚; ð¹£.ß‚; [B1]; xn--bo0d.xn--dsb; ; ; # ð¹£.ß‚
-ð¹£.ß‚; ; [B1]; xn--bo0d.xn--dsb; ; ; # ð¹£.ß‚
-xn--bo0d.xn--dsb; ð¹£.ß‚; [B1]; xn--bo0d.xn--dsb; ; ; # ð¹£.ß‚
--ߡ。Ↄ; -ߡ.Ↄ; [B1, P1, V3, V6]; xn----8cd.xn--q5g; ; ; # -ߡ.Ↄ
--ߡ。Ↄ; -ߡ.Ↄ; [B1, P1, V3, V6]; xn----8cd.xn--q5g; ; ; # -ߡ.Ↄ
--ߡ。ↄ; -ߡ.ↄ; [B1, V3]; xn----8cd.xn--r5g; ; ; # -ߡ.ↄ
-xn----8cd.xn--r5g; -ߡ.ↄ; [B1, V3]; xn----8cd.xn--r5g; ; ; # -ߡ.ↄ
-xn----8cd.xn--q5g; -ߡ.Ↄ; [B1, V3, V6]; xn----8cd.xn--q5g; ; ; # -ߡ.Ↄ
--ߡ。ↄ; -ߡ.ↄ; [B1, V3]; xn----8cd.xn--r5g; ; ; # -ߡ.ↄ
-â€-︒󠄄。ß哑‌ðµ¿; â€-︒.ß哑‌ðµ¿; [B1, B5, B6, C1, C2, P1, V6]; xn----tgnt341h.xn--zca670n5f0binyk; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, P1, V3, V6] # -︒.ß哑
-â€-。󠄄。ß哑‌ðµ¿; â€-..ß哑‌ðµ¿; [B1, B5, B6, C1, C2, P1, V3, V6, X4_2]; xn----tgn..xn--zca670n5f0binyk; [B1, B5, B6, C1, C2, P1, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, P1, V3, V6, A4_2] # -..ß哑
-â€-。󠄄。SS哑‌ðµ¿; â€-..ss哑‌ðµ¿; [B1, B5, B6, C1, C2, P1, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, P1, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, P1, V3, V6, A4_2] # -..sså“‘
-â€-。󠄄。ss哑‌ðµ¿; â€-..ss哑‌ðµ¿; [B1, B5, B6, C1, C2, P1, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, P1, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, P1, V3, V6, A4_2] # -..sså“‘
-â€-。󠄄。Ss哑‌ðµ¿; â€-..ss哑‌ðµ¿; [B1, B5, B6, C1, C2, P1, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, P1, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, P1, V3, V6, A4_2] # -..sså“‘
+xn----7i12hu122k9ire.xn--0ug; 󬚶󸋖򖩰-.\u200C; [C1, V3, V6]; xn----7i12hu122k9ire.xn--0ug; ; ; # -.
+ð¹£ï¼Ž\u07C2; ð¹£.\u07C2; [B1]; xn--bo0d.xn--dsb; ; ; # ð¹£.ß‚
+ð¹£.\u07C2; ; [B1]; xn--bo0d.xn--dsb; ; ; # ð¹£.ß‚
+xn--bo0d.xn--dsb; ð¹£.\u07C2; [B1]; xn--bo0d.xn--dsb; ; ; # ð¹£.ß‚
+-\u07E1。Ↄ; -\u07E1.Ↄ; [B1, V3, V6]; xn----8cd.xn--q5g; ; ; # -ߡ.Ↄ
+-\u07E1。Ↄ; -\u07E1.Ↄ; [B1, V3, V6]; xn----8cd.xn--q5g; ; ; # -ߡ.Ↄ
+-\u07E1。ↄ; -\u07E1.ↄ; [B1, V3]; xn----8cd.xn--r5g; ; ; # -ߡ.ↄ
+xn----8cd.xn--r5g; -\u07E1.ↄ; [B1, V3]; xn----8cd.xn--r5g; ; ; # -ߡ.ↄ
+xn----8cd.xn--q5g; -\u07E1.Ↄ; [B1, V3, V6]; xn----8cd.xn--q5g; ; ; # -ߡ.Ↄ
+-\u07E1。ↄ; -\u07E1.ↄ; [B1, V3]; xn----8cd.xn--r5g; ; ; # -ߡ.ↄ
+\u200D-︒󠄄。ß哑\u200Cðµ¿; \u200D-︒.ß哑\u200Cðµ¿; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--zca670n5f0binyk; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, V3, V6] # -︒.ß哑
+\u200D-。󠄄。ß哑\u200Cðµ¿; \u200D-..ß哑\u200Cðµ¿; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--zca670n5f0binyk; [B1, B5, B6, C1, C2, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, V3, V6, A4_2] # -..ß哑
+\u200D-。󠄄。SSå“‘\u200Cðµ¿; \u200D-..sså“‘\u200Cðµ¿; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, V3, V6, A4_2] # -..sså“‘
+\u200D-。󠄄。sså“‘\u200Cðµ¿; \u200D-..sså“‘\u200Cðµ¿; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, V3, V6, A4_2] # -..sså“‘
+\u200D-。󠄄。Sså“‘\u200Cðµ¿; \u200D-..sså“‘\u200Cðµ¿; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, V3, V6, A4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, V3, V6, A4_2] # -..sså“‘
-..xn--ss-h46c5711e; -..sså“‘ðµ¿; [B1, B5, B6, V3, V6, X4_2]; -..xn--ss-h46c5711e; [B1, B5, B6, V3, V6, A4_2]; ; # -..sså“‘
-xn----tgn..xn--ss-k1ts75zb8ym; â€-..ss哑‌ðµ¿; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, V3, V6, A4_2]; ; # -..sså“‘
-xn----tgn..xn--zca670n5f0binyk; â€-..ß哑‌ðµ¿; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--zca670n5f0binyk; [B1, B5, B6, C1, C2, V3, V6, A4_2]; ; # -..ß哑
-â€-︒󠄄。SS哑‌ðµ¿; â€-︒.ss哑‌ðµ¿; [B1, B5, B6, C1, C2, P1, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, P1, V3, V6] # -︒.sså“‘
-â€-︒󠄄。ss哑‌ðµ¿; â€-︒.ss哑‌ðµ¿; [B1, B5, B6, C1, C2, P1, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, P1, V3, V6] # -︒.sså“‘
-â€-︒󠄄。Ss哑‌ðµ¿; â€-︒.ss哑‌ðµ¿; [B1, B5, B6, C1, C2, P1, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, P1, V3, V6] # -︒.sså“‘
+xn----tgn..xn--ss-k1ts75zb8ym; \u200D-..sså“‘\u200Cðµ¿; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--ss-k1ts75zb8ym; [B1, B5, B6, C1, C2, V3, V6, A4_2]; ; # -..sså“‘
+xn----tgn..xn--zca670n5f0binyk; \u200D-..ß哑\u200Cðµ¿; [B1, B5, B6, C1, C2, V3, V6, X4_2]; xn----tgn..xn--zca670n5f0binyk; [B1, B5, B6, C1, C2, V3, V6, A4_2]; ; # -..ß哑
+\u200D-︒󠄄。SSå“‘\u200Cðµ¿; \u200D-︒.sså“‘\u200Cðµ¿; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, V3, V6] # -︒.sså“‘
+\u200D-︒󠄄。sså“‘\u200Cðµ¿; \u200D-︒.sså“‘\u200Cðµ¿; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, V3, V6] # -︒.sså“‘
+\u200D-︒󠄄。Sså“‘\u200Cðµ¿; \u200D-︒.sså“‘\u200Cðµ¿; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; xn----o89h.xn--ss-h46c5711e; [B1, B5, B6, V3, V6] # -︒.sså“‘
xn----o89h.xn--ss-h46c5711e; -︒.sså“‘ðµ¿; [B1, B5, B6, V3, V6]; xn----o89h.xn--ss-h46c5711e; ; ; # -︒.sså“‘
-xn----tgnt341h.xn--ss-k1ts75zb8ym; â€-︒.ss哑‌ðµ¿; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; ; # -︒.sså“‘
-xn----tgnt341h.xn--zca670n5f0binyk; â€-︒.ß哑‌ðµ¿; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--zca670n5f0binyk; ; ; # -︒.ß哑
-︒.𑑂︯; ︒.𑑂︯; [P1, V5, V6]; xn--y86c.xn--s96cu30b; ; ; # ︒.𑑂︯
-︒.𑑂︯; ︒.𑑂︯; [P1, V5, V6]; xn--y86c.xn--s96cu30b; ; ; # ︒.𑑂︯
-。.𑑂︯; ..𑑂︯; [V5, X4_2]; ..xn--s96cu30b; [V5, A4_2]; ; # ..𑑂︯
-..xn--s96cu30b; ..𑑂︯; [V5, X4_2]; ..xn--s96cu30b; [V5, A4_2]; ; # ..𑑂︯
-xn--y86c.xn--s96cu30b; ︒.𑑂︯; [V5, V6]; xn--y86c.xn--s96cu30b; ; ; # ︒.𑑂︯
-꤬。â€; ꤬.â€; [C2, V5]; xn--zi9a.xn--1ug; ; xn--zi9a.; [V5] # ꤬.
-xn--zi9a.; ꤬.; [V5]; xn--zi9a.; ; ; # ꤬.
-xn--zi9a.xn--1ug; ꤬.â€; [C2, V5]; xn--zi9a.xn--1ug; ; ; # ꤬.
-â€ó ¸¡ï½¡ï³—; â€ó ¸¡.هج; [B1, C2, P1, V6]; xn--1ug80651l.xn--rgb7c; ; xn--d356e.xn--rgb7c; [B1, P1, V6] # .هج
-â€ó ¸¡ã€‚هج; â€ó ¸¡.هج; [B1, C2, P1, V6]; xn--1ug80651l.xn--rgb7c; ; xn--d356e.xn--rgb7c; [B1, P1, V6] # .هج
-xn--d356e.xn--rgb7c; 󠸡.هج; [B1, V6]; xn--d356e.xn--rgb7c; ; ; # .هج
-xn--1ug80651l.xn--rgb7c; â€ó ¸¡.هج; [B1, C2, V6]; xn--1ug80651l.xn--rgb7c; ; ; # .هج
--ႤðŸ¢Ù£ï¼Žð‘´Ï‚; -Ⴄ0Ù£.ð‘´Ï‚; [B1, P1, V3, V5, V6]; xn---0-iyd216h.xn--3xa1220l; ; xn---0-iyd216h.xn--4xa9120l; # -Ⴄ0Ù£.ð‘´Ï‚
--Ⴄ0Ù£.ð‘´Ï‚; ; [B1, P1, V3, V5, V6]; xn---0-iyd216h.xn--3xa1220l; ; xn---0-iyd216h.xn--4xa9120l; # -Ⴄ0Ù£.ð‘´Ï‚
--â´„0Ù£.ð‘´Ï‚; ; [B1, V3, V5]; xn---0-iyd8660b.xn--3xa1220l; ; xn---0-iyd8660b.xn--4xa9120l; # -â´„0Ù£.ð‘´Ï‚
--Ⴄ0Ù£.ð‘´Î£; -Ⴄ0Ù£.ð‘´Ïƒ; [B1, P1, V3, V5, V6]; xn---0-iyd216h.xn--4xa9120l; ; ; # -Ⴄ0Ù£.ð‘´Ïƒ
--â´„0Ù£.ð‘´Ïƒ; ; [B1, V3, V5]; xn---0-iyd8660b.xn--4xa9120l; ; ; # -â´„0Ù£.ð‘´Ïƒ
-xn---0-iyd8660b.xn--4xa9120l; -â´„0Ù£.ð‘´Ïƒ; [B1, V3, V5]; xn---0-iyd8660b.xn--4xa9120l; ; ; # -â´„0Ù£.ð‘´Ïƒ
-xn---0-iyd216h.xn--4xa9120l; -Ⴄ0Ù£.ð‘´Ïƒ; [B1, V3, V5, V6]; xn---0-iyd216h.xn--4xa9120l; ; ; # -Ⴄ0Ù£.ð‘´Ïƒ
-xn---0-iyd8660b.xn--3xa1220l; -â´„0Ù£.ð‘´Ï‚; [B1, V3, V5]; xn---0-iyd8660b.xn--3xa1220l; ; ; # -â´„0Ù£.ð‘´Ï‚
-xn---0-iyd216h.xn--3xa1220l; -Ⴄ0Ù£.ð‘´Ï‚; [B1, V3, V5, V6]; xn---0-iyd216h.xn--3xa1220l; ; ; # -Ⴄ0Ù£.ð‘´Ï‚
--â´„ðŸ¢Ù£ï¼Žð‘´Ï‚; -â´„0Ù£.ð‘´Ï‚; [B1, V3, V5]; xn---0-iyd8660b.xn--3xa1220l; ; xn---0-iyd8660b.xn--4xa9120l; # -â´„0Ù£.ð‘´Ï‚
--ႤðŸ¢Ù£ï¼Žð‘´Î£; -Ⴄ0Ù£.ð‘´Ïƒ; [B1, P1, V3, V5, V6]; xn---0-iyd216h.xn--4xa9120l; ; ; # -Ⴄ0Ù£.ð‘´Ïƒ
--â´„ðŸ¢Ù£ï¼Žð‘´Ïƒ; -â´„0Ù£.ð‘´Ïƒ; [B1, V3, V5]; xn---0-iyd8660b.xn--4xa9120l; ; ; # -â´„0Ù£.ð‘´Ïƒ
-󦈄。-; 󦈄.-; [P1, V3, V6]; xn--xm38e.-; ; ; # .-
+xn----tgnt341h.xn--ss-k1ts75zb8ym; \u200D-︒.sså“‘\u200Cðµ¿; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--ss-k1ts75zb8ym; ; ; # -︒.sså“‘
+xn----tgnt341h.xn--zca670n5f0binyk; \u200D-︒.ß哑\u200Cðµ¿; [B1, B5, B6, C1, C2, V6]; xn----tgnt341h.xn--zca670n5f0binyk; ; ; # -︒.ß哑
+︒.\uFE2F𑑂; ︒.𑑂\uFE2F; [V5, V6]; xn--y86c.xn--s96cu30b; ; ; # ︒.𑑂︯
+︒.𑑂\uFE2F; ︒.𑑂\uFE2F; [V5, V6]; xn--y86c.xn--s96cu30b; ; ; # ︒.𑑂︯
+。.𑑂\uFE2F; ..𑑂\uFE2F; [V5, X4_2]; ..xn--s96cu30b; [V5, A4_2]; ; # ..𑑂︯
+..xn--s96cu30b; ..𑑂\uFE2F; [V5, X4_2]; ..xn--s96cu30b; [V5, A4_2]; ; # ..𑑂︯
+xn--y86c.xn--s96cu30b; ︒.𑑂\uFE2F; [V5, V6]; xn--y86c.xn--s96cu30b; ; ; # ︒.𑑂︯
+\uA92C。\u200D; \uA92C.\u200D; [C2, V5]; xn--zi9a.xn--1ug; ; xn--zi9a.; [V5] # ꤬.
+xn--zi9a.; \uA92C.; [V5]; xn--zi9a.; ; ; # ꤬.
+xn--zi9a.xn--1ug; \uA92C.\u200D; [C2, V5]; xn--zi9a.xn--1ug; ; ; # ꤬.
+\u200D󠸡。\uFCD7; \u200D󠸡.\u0647\u062C; [B1, C2, V6]; xn--1ug80651l.xn--rgb7c; ; xn--d356e.xn--rgb7c; [B1, V6] # .هج
+\u200D󠸡。\u0647\u062C; \u200D󠸡.\u0647\u062C; [B1, C2, V6]; xn--1ug80651l.xn--rgb7c; ; xn--d356e.xn--rgb7c; [B1, V6] # .هج
+xn--d356e.xn--rgb7c; 󠸡.\u0647\u062C; [B1, V6]; xn--d356e.xn--rgb7c; ; ; # .هج
+xn--1ug80651l.xn--rgb7c; \u200D󠸡.\u0647\u062C; [B1, C2, V6]; xn--1ug80651l.xn--rgb7c; ; ; # .هج
+-ႤðŸ¢\u0663.ð‘´Ï‚; -Ⴄ0\u0663.ð‘´Ï‚; [B1, V3, V5, V6]; xn---0-iyd216h.xn--3xa1220l; ; xn---0-iyd216h.xn--4xa9120l; # -Ⴄ0Ù£.ð‘´Ï‚
+-Ⴄ0\u0663.ð‘´Ï‚; ; [B1, V3, V5, V6]; xn---0-iyd216h.xn--3xa1220l; ; xn---0-iyd216h.xn--4xa9120l; # -Ⴄ0Ù£.ð‘´Ï‚
+-â´„0\u0663.ð‘´Ï‚; ; [B1, V3, V5]; xn---0-iyd8660b.xn--3xa1220l; ; xn---0-iyd8660b.xn--4xa9120l; # -â´„0Ù£.ð‘´Ï‚
+-Ⴄ0\u0663.ð‘´Î£; -Ⴄ0\u0663.ð‘´Ïƒ; [B1, V3, V5, V6]; xn---0-iyd216h.xn--4xa9120l; ; ; # -Ⴄ0Ù£.ð‘´Ïƒ
+-â´„0\u0663.ð‘´Ïƒ; ; [B1, V3, V5]; xn---0-iyd8660b.xn--4xa9120l; ; ; # -â´„0Ù£.ð‘´Ïƒ
+xn---0-iyd8660b.xn--4xa9120l; -â´„0\u0663.ð‘´Ïƒ; [B1, V3, V5]; xn---0-iyd8660b.xn--4xa9120l; ; ; # -â´„0Ù£.ð‘´Ïƒ
+xn---0-iyd216h.xn--4xa9120l; -Ⴄ0\u0663.ð‘´Ïƒ; [B1, V3, V5, V6]; xn---0-iyd216h.xn--4xa9120l; ; ; # -Ⴄ0Ù£.ð‘´Ïƒ
+xn---0-iyd8660b.xn--3xa1220l; -â´„0\u0663.ð‘´Ï‚; [B1, V3, V5]; xn---0-iyd8660b.xn--3xa1220l; ; ; # -â´„0Ù£.ð‘´Ï‚
+xn---0-iyd216h.xn--3xa1220l; -Ⴄ0\u0663.ð‘´Ï‚; [B1, V3, V5, V6]; xn---0-iyd216h.xn--3xa1220l; ; ; # -Ⴄ0Ù£.ð‘´Ï‚
+-â´„ðŸ¢\u0663.ð‘´Ï‚; -â´„0\u0663.ð‘´Ï‚; [B1, V3, V5]; xn---0-iyd8660b.xn--3xa1220l; ; xn---0-iyd8660b.xn--4xa9120l; # -â´„0Ù£.ð‘´Ï‚
+-ႤðŸ¢\u0663.ð‘´Î£; -Ⴄ0\u0663.ð‘´Ïƒ; [B1, V3, V5, V6]; xn---0-iyd216h.xn--4xa9120l; ; ; # -Ⴄ0Ù£.ð‘´Ïƒ
+-â´„ðŸ¢\u0663.ð‘´Ïƒ; -â´„0\u0663.ð‘´Ïƒ; [B1, V3, V5]; xn---0-iyd8660b.xn--4xa9120l; ; ; # -â´„0Ù£.ð‘´Ïƒ
+󦈄。-; 󦈄.-; [V3, V6]; xn--xm38e.-; ; ; # .-
xn--xm38e.-; 󦈄.-; [V3, V6]; xn--xm38e.-; ; ; # .-
-â‹ ð‹®ï¼Žò¶ˆ®à¼˜ÃŸâ‰¯; â‹ ð‹®.ò¶ˆ®à¼˜ÃŸâ‰¯; [P1, V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # â‹ ð‹®.༘ß≯
-⋠ð‹®ï¼Žò¶ˆ®à¼˜ÃŸ≯; â‹ ð‹®.ò¶ˆ®à¼˜ÃŸâ‰¯; [P1, V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # â‹ ð‹®.༘ß≯
-â‹ ð‹®.ò¶ˆ®à¼˜ÃŸâ‰¯; ; [P1, V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # â‹ ð‹®.༘ß≯
-⋠ð‹®.ò¶ˆ®à¼˜ÃŸ≯; â‹ ð‹®.ò¶ˆ®à¼˜ÃŸâ‰¯; [P1, V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # â‹ ð‹®.༘ß≯
-⋠ð‹®.ò¶ˆ®à¼˜SS≯; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-â‹ ð‹®.ò¶ˆ®à¼˜SS≯; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-â‹ ð‹®.ò¶ˆ®à¼˜ss≯; ; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-⋠ð‹®.ò¶ˆ®à¼˜ss≯; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-⋠ð‹®.ò¶ˆ®à¼˜Ss≯; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-â‹ ð‹®.ò¶ˆ®à¼˜Ss≯; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-xn--pgh4639f.xn--ss-ifj426nle504a; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-xn--pgh4639f.xn--zca593eo6oc013y; â‹ ð‹®.ò¶ˆ®à¼˜ÃŸâ‰¯; [V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; ; # â‹ ð‹®.༘ß≯
-⋠ð‹®ï¼Žò¶ˆ®à¼˜SS≯; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-â‹ ð‹®ï¼Žò¶ˆ®à¼˜SS≯; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-â‹ ð‹®ï¼Žò¶ˆ®à¼˜ss≯; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-⋠ð‹®ï¼Žò¶ˆ®à¼˜ss≯; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-⋠ð‹®ï¼Žò¶ˆ®à¼˜Ss≯; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-â‹ ð‹®ï¼Žò¶ˆ®à¼˜Ss≯; â‹ ð‹®.ò¶ˆ®à¼˜ss≯; [P1, V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
-1ð‹¸Ù¤ï½¡ó ¢®ï®¤ñ·Š; 1ð‹¸Ù¤.ó ¢®Û€ñ·Š; [B1, P1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1ð‹¸Ù¤.Û€
-1ð‹¸Ù¤ã€‚ó ¢®Û€ñ·Š; 1ð‹¸Ù¤.ó ¢®Û€ñ·Š; [B1, P1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1ð‹¸Ù¤.Û€
-1ð‹¸Ù¤ã€‚ó ¢®Û•Ù”ñ·Š; 1ð‹¸Ù¤.ó ¢®Û€ñ·Š; [B1, P1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1ð‹¸Ù¤.Û€
-xn--1-hqc3905q.xn--zkb83268gqee4a; 1ð‹¸Ù¤.ó ¢®Û€ñ·Š; [B1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1ð‹¸Ù¤.Û€
-å„­-。ð¹´áƒ‚ñ¥³ â€Œ; å„­-.ð¹´áƒ‚ñ¥³ â€Œ; [B1, B6, C1, P1, V3, V6]; xn----gz7a.xn--6nd249ejl4pusr7b; ; xn----gz7a.xn--6nd5001kyw98a; [B1, B6, P1, V3, V6] # å„­-.ð¹´áƒ‚
-å„­-。ð¹´áƒ‚ñ¥³ â€Œ; å„­-.ð¹´áƒ‚ñ¥³ â€Œ; [B1, B6, C1, P1, V3, V6]; xn----gz7a.xn--6nd249ejl4pusr7b; ; xn----gz7a.xn--6nd5001kyw98a; [B1, B6, P1, V3, V6] # å„­-.ð¹´áƒ‚
-å„­-。ð¹´â´¢ñ¥³ â€Œ; å„­-.ð¹´â´¢ñ¥³ â€Œ; [B1, B6, C1, P1, V3, V6]; xn----gz7a.xn--0ug472cfq0pus98b; ; xn----gz7a.xn--qlj9223eywx0b; [B1, B6, P1, V3, V6] # å„­-.ð¹´â´¢
+â‹ ð‹®ï¼Žò¶ˆ®\u0F18ß≯; â‹ ð‹®.ò¶ˆ®\u0F18ß≯; [V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # â‹ ð‹®.༘ß≯
+≼\u0338ð‹®ï¼Žò¶ˆ®\u0F18ß>\u0338; â‹ ð‹®.ò¶ˆ®\u0F18ß≯; [V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # â‹ ð‹®.༘ß≯
+â‹ ð‹®.ò¶ˆ®\u0F18ß≯; ; [V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # â‹ ð‹®.༘ß≯
+≼\u0338ð‹®.ò¶ˆ®\u0F18ß>\u0338; â‹ ð‹®.ò¶ˆ®\u0F18ß≯; [V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; xn--pgh4639f.xn--ss-ifj426nle504a; # â‹ ð‹®.༘ß≯
+≼\u0338ð‹®.ò¶ˆ®\u0F18SS>\u0338; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+â‹ ð‹®.ò¶ˆ®\u0F18SS≯; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+â‹ ð‹®.ò¶ˆ®\u0F18ss≯; ; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+≼\u0338ð‹®.ò¶ˆ®\u0F18ss>\u0338; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+≼\u0338ð‹®.ò¶ˆ®\u0F18Ss>\u0338; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+â‹ ð‹®.ò¶ˆ®\u0F18Ss≯; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+xn--pgh4639f.xn--ss-ifj426nle504a; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+xn--pgh4639f.xn--zca593eo6oc013y; â‹ ð‹®.ò¶ˆ®\u0F18ß≯; [V6]; xn--pgh4639f.xn--zca593eo6oc013y; ; ; # â‹ ð‹®.༘ß≯
+≼\u0338ð‹®ï¼Žò¶ˆ®\u0F18SS>\u0338; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+â‹ ð‹®ï¼Žò¶ˆ®\u0F18SS≯; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+â‹ ð‹®ï¼Žò¶ˆ®\u0F18ss≯; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+≼\u0338ð‹®ï¼Žò¶ˆ®\u0F18ss>\u0338; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+≼\u0338ð‹®ï¼Žò¶ˆ®\u0F18Ss>\u0338; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+â‹ ð‹®ï¼Žò¶ˆ®\u0F18Ss≯; â‹ ð‹®.ò¶ˆ®\u0F18ss≯; [V6]; xn--pgh4639f.xn--ss-ifj426nle504a; ; ; # â‹ ð‹®.༘ss≯
+1ð‹¸\u0664。󠢮\uFBA4ñ·Š; 1ð‹¸\u0664.ó ¢®\u06C0ñ·Š; [B1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1ð‹¸Ù¤.Û€
+1ð‹¸\u0664。󠢮\u06C0ñ·Š; 1ð‹¸\u0664.ó ¢®\u06C0ñ·Š; [B1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1ð‹¸Ù¤.Û€
+1ð‹¸\u0664。󠢮\u06D5\u0654ñ·Š; 1ð‹¸\u0664.ó ¢®\u06C0ñ·Š; [B1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1ð‹¸Ù¤.Û€
+xn--1-hqc3905q.xn--zkb83268gqee4a; 1ð‹¸\u0664.ó ¢®\u06C0ñ·Š; [B1, V6]; xn--1-hqc3905q.xn--zkb83268gqee4a; ; ; # 1ð‹¸Ù¤.Û€
+å„­-。ð¹´áƒ‚ñ¥³ \u200C; å„­-.ð¹´áƒ‚ñ¥³ \u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--6nd249ejl4pusr7b; ; xn----gz7a.xn--6nd5001kyw98a; [B1, B6, V3, V6] # å„­-.ð¹´áƒ‚
+å„­-。ð¹´áƒ‚ñ¥³ \u200C; å„­-.ð¹´áƒ‚ñ¥³ \u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--6nd249ejl4pusr7b; ; xn----gz7a.xn--6nd5001kyw98a; [B1, B6, V3, V6] # å„­-.ð¹´áƒ‚
+å„­-。ð¹´â´¢ñ¥³ \u200C; å„­-.ð¹´â´¢ñ¥³ \u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--0ug472cfq0pus98b; ; xn----gz7a.xn--qlj9223eywx0b; [B1, B6, V3, V6] # å„­-.ð¹´â´¢
xn----gz7a.xn--qlj9223eywx0b; å„­-.ð¹´â´¢ñ¥³ ; [B1, B6, V3, V6]; xn----gz7a.xn--qlj9223eywx0b; ; ; # å„­-.ð¹´â´¢
-xn----gz7a.xn--0ug472cfq0pus98b; å„­-.ð¹´â´¢ñ¥³ â€Œ; [B1, B6, C1, V3, V6]; xn----gz7a.xn--0ug472cfq0pus98b; ; ; # å„­-.ð¹´â´¢
+xn----gz7a.xn--0ug472cfq0pus98b; å„­-.ð¹´â´¢ñ¥³ \u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--0ug472cfq0pus98b; ; ; # å„­-.ð¹´â´¢
xn----gz7a.xn--6nd5001kyw98a; å„­-.ð¹´áƒ‚ñ¥³ ; [B1, B6, V3, V6]; xn----gz7a.xn--6nd5001kyw98a; ; ; # å„­-.ð¹´áƒ‚
-xn----gz7a.xn--6nd249ejl4pusr7b; å„­-.ð¹´áƒ‚ñ¥³ â€Œ; [B1, B6, C1, V3, V6]; xn----gz7a.xn--6nd249ejl4pusr7b; ; ; # å„­-.ð¹´áƒ‚
-å„­-。ð¹´â´¢ñ¥³ â€Œ; å„­-.ð¹´â´¢ñ¥³ â€Œ; [B1, B6, C1, P1, V3, V6]; xn----gz7a.xn--0ug472cfq0pus98b; ; xn----gz7a.xn--qlj9223eywx0b; [B1, B6, P1, V3, V6] # å„­-.ð¹´â´¢
-ðŸºð‹·Ú¹ï¼Žðž¤­ò¿¡; 4ð‹·Ú¹.𞤭ò¿¡; [B1, B2, B3, P1, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4ð‹·Ú¹.𞤭
-4ð‹·Ú¹.𞤭ò¿¡; ; [B1, B2, B3, P1, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4ð‹·Ú¹.𞤭
-4ð‹·Ú¹.𞤋ò¿¡; 4ð‹·Ú¹.𞤭ò¿¡; [B1, B2, B3, P1, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4ð‹·Ú¹.𞤭
-xn--4-cvc5384q.xn--le6hi7322b; 4ð‹·Ú¹.𞤭ò¿¡; [B1, B2, B3, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4ð‹·Ú¹.𞤭
-ðŸºð‹·Ú¹ï¼Žðž¤‹ò¿¡; 4ð‹·Ú¹.𞤭ò¿¡; [B1, B2, B3, P1, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4ð‹·Ú¹.𞤭
-≯-ꡋ𑲣.â’ˆð¹­; ; [B1, P1, V6]; xn----ogox061d5i8d.xn--tsh0666f; ; ; # ≯-ꡋ𑲣.â’ˆð¹­
-≯-ꡋ𑲣.â’ˆð¹­; ≯-ꡋ𑲣.â’ˆð¹­; [B1, P1, V6]; xn----ogox061d5i8d.xn--tsh0666f; ; ; # ≯-ꡋ𑲣.â’ˆð¹­
-≯-ꡋ𑲣.1.ð¹­; ; [B1, P1, V6]; xn----ogox061d5i8d.1.xn--lo0d; ; ; # ≯-ꡋ𑲣.1.ð¹­
-≯-ꡋ𑲣.1.ð¹­; ≯-ꡋ𑲣.1.ð¹­; [B1, P1, V6]; xn----ogox061d5i8d.1.xn--lo0d; ; ; # ≯-ꡋ𑲣.1.ð¹­
-xn----ogox061d5i8d.1.xn--lo0d; ≯-ꡋ𑲣.1.ð¹­; [B1, V6]; xn----ogox061d5i8d.1.xn--lo0d; ; ; # ≯-ꡋ𑲣.1.ð¹­
+xn----gz7a.xn--6nd249ejl4pusr7b; å„­-.ð¹´áƒ‚ñ¥³ \u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--6nd249ejl4pusr7b; ; ; # å„­-.ð¹´áƒ‚
+å„­-。ð¹´â´¢ñ¥³ \u200C; å„­-.ð¹´â´¢ñ¥³ \u200C; [B1, B6, C1, V3, V6]; xn----gz7a.xn--0ug472cfq0pus98b; ; xn----gz7a.xn--qlj9223eywx0b; [B1, B6, V3, V6] # å„­-.ð¹´â´¢
+ðŸºð‹·\u06B9.𞤭ò¿¡; 4ð‹·\u06B9.𞤭ò¿¡; [B1, B2, B3, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4ð‹·Ú¹.𞤭
+4ð‹·\u06B9.𞤭ò¿¡; ; [B1, B2, B3, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4ð‹·Ú¹.𞤭
+4ð‹·\u06B9.𞤋ò¿¡; 4ð‹·\u06B9.𞤭ò¿¡; [B1, B2, B3, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4ð‹·Ú¹.𞤭
+xn--4-cvc5384q.xn--le6hi7322b; 4ð‹·\u06B9.𞤭ò¿¡; [B1, B2, B3, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4ð‹·Ú¹.𞤭
+ðŸºð‹·\u06B9.𞤋ò¿¡; 4ð‹·\u06B9.𞤭ò¿¡; [B1, B2, B3, V6]; xn--4-cvc5384q.xn--le6hi7322b; ; ; # 4ð‹·Ú¹.𞤭
+≯-ꡋ𑲣.â’ˆð¹­; ; [B1, V6]; xn----ogox061d5i8d.xn--tsh0666f; ; ; # ≯-ꡋ𑲣.â’ˆð¹­
+>\u0338-ꡋ𑲣.â’ˆð¹­; ≯-ꡋ𑲣.â’ˆð¹­; [B1, V6]; xn----ogox061d5i8d.xn--tsh0666f; ; ; # ≯-ꡋ𑲣.â’ˆð¹­
+≯-ꡋ𑲣.1.ð¹­; ; [B1]; xn----ogox061d5i8d.1.xn--lo0d; ; ; # ≯-ꡋ𑲣.1.ð¹­
+>\u0338-ꡋ𑲣.1.ð¹­; ≯-ꡋ𑲣.1.ð¹­; [B1]; xn----ogox061d5i8d.1.xn--lo0d; ; ; # ≯-ꡋ𑲣.1.ð¹­
+xn----ogox061d5i8d.1.xn--lo0d; ≯-ꡋ𑲣.1.ð¹­; [B1]; xn----ogox061d5i8d.1.xn--lo0d; ; ; # ≯-ꡋ𑲣.1.ð¹­
xn----ogox061d5i8d.xn--tsh0666f; ≯-ꡋ𑲣.â’ˆð¹­; [B1, V6]; xn----ogox061d5i8d.xn--tsh0666f; ; ; # ≯-ꡋ𑲣.â’ˆð¹­
-̰.󰜱蚀; ̰.󰜱蚀; [P1, V5, V6]; xn--xta.xn--e91aw9417e; ; ; # ̰.蚀
-̰.󰜱蚀; ; [P1, V5, V6]; xn--xta.xn--e91aw9417e; ; ; # ̰.蚀
-xn--xta.xn--e91aw9417e; ̰.󰜱蚀; [V5, V6]; xn--xta.xn--e91aw9417e; ; ; # ̰.蚀
-יּႸ.𞡼𑇀ß⃗; יּႸ.𞡼𑇀ß⃗; [B2, B3, P1, V6]; xn--kdb1d867b.xn--zca284nhg9nrrxg; ; xn--kdb1d867b.xn--ss-yju5690ken9h; # יּႸ.𞡼𑇀ß⃗
-יּႸ.𞡼𑇀ß⃗; ; [B2, B3, P1, V6]; xn--kdb1d867b.xn--zca284nhg9nrrxg; ; xn--kdb1d867b.xn--ss-yju5690ken9h; # יּႸ.𞡼𑇀ß⃗
-יּⴘ.𞡼𑇀ß⃗; ; [B2, B3]; xn--kdb1d278n.xn--zca284nhg9nrrxg; ; xn--kdb1d278n.xn--ss-yju5690ken9h; # יּⴘ.𞡼𑇀ß⃗
-יּႸ.𞡼𑇀SS⃗; יּႸ.𞡼𑇀ss⃗; [B2, B3, P1, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗
-יּⴘ.𞡼𑇀ss⃗; ; [B2, B3]; xn--kdb1d278n.xn--ss-yju5690ken9h; ; ; # יּⴘ.𞡼𑇀ss⃗
-xn--kdb1d278n.xn--ss-yju5690ken9h; יּⴘ.𞡼𑇀ss⃗; [B2, B3]; xn--kdb1d278n.xn--ss-yju5690ken9h; ; ; # יּⴘ.𞡼𑇀ss⃗
-xn--kdb1d867b.xn--ss-yju5690ken9h; יּႸ.𞡼𑇀ss⃗; [B2, B3, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗
-xn--kdb1d278n.xn--zca284nhg9nrrxg; יּⴘ.𞡼𑇀ß⃗; [B2, B3]; xn--kdb1d278n.xn--zca284nhg9nrrxg; ; ; # יּⴘ.𞡼𑇀ß⃗
-xn--kdb1d867b.xn--zca284nhg9nrrxg; יּႸ.𞡼𑇀ß⃗; [B2, B3, V6]; xn--kdb1d867b.xn--zca284nhg9nrrxg; ; ; # יּႸ.𞡼𑇀ß⃗
-יּⴘ.𞡼𑇀ß⃗; יּⴘ.𞡼𑇀ß⃗; [B2, B3]; xn--kdb1d278n.xn--zca284nhg9nrrxg; ; xn--kdb1d278n.xn--ss-yju5690ken9h; # יּⴘ.𞡼𑇀ß⃗
-יּႸ.𞡼𑇀SS⃗; יּႸ.𞡼𑇀ss⃗; [B2, B3, P1, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗
-יּⴘ.𞡼𑇀ss⃗; יּⴘ.𞡼𑇀ss⃗; [B2, B3]; xn--kdb1d278n.xn--ss-yju5690ken9h; ; ; # יּⴘ.𞡼𑇀ss⃗
-יּႸ.𞡼𑇀ss⃗; ; [B2, B3, P1, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗
-יּႸ.𞡼𑇀ss⃗; יּႸ.𞡼𑇀ss⃗; [B2, B3, P1, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗
-ᮣð¹°ò±“。凬; ᮣð¹°ò±“.凬; [B1, P1, V5, V6]; xn--rxfz314ilg20c.xn--t9q; ; ; # ᮣð¹°.凬
-ᮣð¹°ò±“。凬; ᮣð¹°ò±“.凬; [B1, P1, V5, V6]; xn--rxfz314ilg20c.xn--t9q; ; ; # ᮣð¹°.凬
-xn--rxfz314ilg20c.xn--t9q; ᮣð¹°ò±“.凬; [B1, V5, V6]; xn--rxfz314ilg20c.xn--t9q; ; ; # ᮣð¹°.凬
-🢟🄈â€ê¡Žï½¡à¾„; 🢟🄈â€ê¡Ž.྄; [C2, P1, V5, V6]; xn--1ug4874cfd0kbmg.xn--3ed; ; xn--nc9aq743ds0e.xn--3ed; [P1, V5, V6] # 🢟🄈ꡎ.྄
-🢟7,â€ê¡Žã€‚྄; 🢟7,â€ê¡Ž.྄; [C2, P1, V5, V6]; xn--7,-n1t0654eqo3o.xn--3ed; ; xn--7,-gh9hg322i.xn--3ed; [P1, V5, V6] # 🢟7,ê¡Ž.྄
-xn--7,-gh9hg322i.xn--3ed; 🢟7,ꡎ.྄; [P1, V5, V6]; xn--7,-gh9hg322i.xn--3ed; ; ; # 🢟7,ꡎ.྄
-xn--7,-n1t0654eqo3o.xn--3ed; 🢟7,â€ê¡Ž.྄; [C2, P1, V5, V6]; xn--7,-n1t0654eqo3o.xn--3ed; ; ; # 🢟7,ê¡Ž.྄
-xn--nc9aq743ds0e.xn--3ed; 🢟🄈ꡎ.྄; [V5, V6]; xn--nc9aq743ds0e.xn--3ed; ; ; # 🢟🄈ꡎ.྄
-xn--1ug4874cfd0kbmg.xn--3ed; 🢟🄈â€ê¡Ž.྄; [C2, V5, V6]; xn--1ug4874cfd0kbmg.xn--3ed; ; ; # 🢟🄈ꡎ.྄
-ꡔ。္ᢇ; ꡔ.္ᢇ; [V5]; xn--tc9a.xn--9jd663b; ; ; # ꡔ.္ᢇ
-xn--tc9a.xn--9jd663b; ꡔ.္ᢇ; [V5]; xn--tc9a.xn--9jd663b; ; ; # ꡔ.္ᢇ
-⃫≮.ð¨–; ; [P1, V5, V6]; xn--e1g71d.xn--772h; ; ; # ⃫≮.ð¨–
-⃫≮.ð¨–; ⃫≮.ð¨–; [P1, V5, V6]; xn--e1g71d.xn--772h; ; ; # ⃫≮.ð¨–
-xn--e1g71d.xn--772h; ⃫≮.ð¨–; [V5, V6]; xn--e1g71d.xn--772h; ; ; # ⃫≮.ð¨–
-Ⴢ≯褦.ᠪߪႾݧ; Ⴢ≯褦.ᠪߪႾݧ; [B5, B6, P1, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ
-Ⴢ≯褦.ᠪߪႾݧ; Ⴢ≯褦.ᠪߪႾݧ; [B5, B6, P1, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ
-Ⴢ≯褦.ᠪߪႾݧ; ; [B5, B6, P1, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ
-Ⴢ≯褦.ᠪߪႾݧ; Ⴢ≯褦.ᠪߪႾݧ; [B5, B6, P1, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ
-ⴢ≯褦.ᠪߪⴞݧ; ⴢ≯褦.ᠪߪⴞݧ; [B5, B6, P1, V6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ
-ⴢ≯褦.ᠪߪⴞݧ; ; [B5, B6, P1, V6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ
-Ⴢ≯褦.ᠪߪⴞݧ; ; [B5, B6, P1, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ
-Ⴢ≯褦.ᠪߪⴞݧ; Ⴢ≯褦.ᠪߪⴞݧ; [B5, B6, P1, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ
-xn--6nd461g478e.xn--rpb5x392bcyt; Ⴢ≯褦.ᠪߪⴞݧ; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ
-xn--hdh433bev8e.xn--rpb5x392bcyt; ⴢ≯褦.ᠪߪⴞݧ; [B5, B6, V6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ
-xn--6nd461g478e.xn--rpb5x49td2h; Ⴢ≯褦.ᠪߪႾݧ; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ
-ⴢ≯褦.ᠪߪⴞݧ; ⴢ≯褦.ᠪߪⴞݧ; [B5, B6, P1, V6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ
-ⴢ≯褦.ᠪߪⴞݧ; ⴢ≯褦.ᠪߪⴞݧ; [B5, B6, P1, V6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ
-Ⴢ≯褦.ᠪߪⴞݧ; Ⴢ≯褦.ᠪߪⴞݧ; [B5, B6, P1, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ
-Ⴢ≯褦.ᠪߪⴞݧ; Ⴢ≯褦.ᠪߪⴞݧ; [B5, B6, P1, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ
-򊉆󠆒‌꥓。𞤙ٻꡘ; 򊉆‌꥓.𞤻ٻꡘ; [B2, B3, C1, P1, V6]; xn--0ug8815chtz0e.xn--0ib8893fegvj; ; xn--3j9al6189a.xn--0ib8893fegvj; [B2, B3, P1, V6] # ꥓.𞤻ٻꡘ
-򊉆󠆒‌꥓。𞤻ٻꡘ; 򊉆‌꥓.𞤻ٻꡘ; [B2, B3, C1, P1, V6]; xn--0ug8815chtz0e.xn--0ib8893fegvj; ; xn--3j9al6189a.xn--0ib8893fegvj; [B2, B3, P1, V6] # ꥓.𞤻ٻꡘ
-xn--3j9al6189a.xn--0ib8893fegvj; 򊉆꥓.𞤻ٻꡘ; [B2, B3, V6]; xn--3j9al6189a.xn--0ib8893fegvj; ; ; # ꥓.𞤻ٻꡘ
-xn--0ug8815chtz0e.xn--0ib8893fegvj; 򊉆‌꥓.𞤻ٻꡘ; [B2, B3, C1, V6]; xn--0ug8815chtz0e.xn--0ib8893fegvj; ; ; # ꥓.𞤻ٻꡘ
-‌.≯; ; [C1, P1, V6]; xn--0ug.xn--hdh; ; .xn--hdh; [P1, V6, A4_2] # .≯
-‌.≯; ‌.≯; [C1, P1, V6]; xn--0ug.xn--hdh; ; .xn--hdh; [P1, V6, A4_2] # .≯
-.xn--hdh; .≯; [V6, X4_2]; .xn--hdh; [V6, A4_2]; ; # .≯
-xn--0ug.xn--hdh; ‌.≯; [C1, V6]; xn--0ug.xn--hdh; ; ; # .≯
-𰅧񣩠-.꯭-悜; 𰅧񣩠-.꯭-悜; [P1, V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜
-𰅧񣩠-.꯭-悜; ; [P1, V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜
-xn----7m53aj640l.xn----8f4br83t; 𰅧񣩠-.꯭-悜; [V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜
-ᡉ𶓧⬞ᢜ.-â€ðž£‘‮; ; [C2, P1, V3, V6]; xn--87e0ol04cdl39e.xn----ugn5e3763s; ; xn--87e0ol04cdl39e.xn----qinu247r; [P1, V3, V6] # ᡉ⬞ᢜ.-𞣑
-xn--87e0ol04cdl39e.xn----qinu247r; ᡉ𶓧⬞ᢜ.-𞣑‮; [V3, V6]; xn--87e0ol04cdl39e.xn----qinu247r; ; ; # ᡉ⬞ᢜ.-𞣑
-xn--87e0ol04cdl39e.xn----ugn5e3763s; ᡉ𶓧⬞ᢜ.-â€ðž£‘‮; [C2, V3, V6]; xn--87e0ol04cdl39e.xn----ugn5e3763s; ; ; # ᡉ⬞ᢜ.-𞣑
-â’‌衃Ⴝ.Ú‚á‚´; ; [B1, B2, B3, C1, P1, V6]; xn--1nd159ecmd785k.xn--7ib433c; ; xn--1nd362hy16e.xn--7ib433c; [B1, B2, B3, P1, V6] # â’衃Ⴝ.Ú‚á‚´
-9.‌衃Ⴝ.ڂႴ; ; [B1, B2, B3, C1, P1, V6]; 9.xn--1nd159e1y2f.xn--7ib433c; ; 9.xn--1nd9032d.xn--7ib433c; [B1, B2, B3, P1, V6] # 9.衃Ⴝ.ڂႴ
-9.‌衃â´.Ú‚â´”; ; [B1, B2, B3, C1]; 9.xn--0ug862cbm5e.xn--7ib268q; ; 9.xn--llj1920a.xn--7ib268q; [B1, B2, B3] # 9.衃â´.Ú‚â´”
-9.‌衃Ⴝ.ڂⴔ; ; [B1, B2, B3, C1, P1, V6]; 9.xn--1nd159e1y2f.xn--7ib268q; ; 9.xn--1nd9032d.xn--7ib268q; [B1, B2, B3, P1, V6] # 9.衃Ⴝ.ڂⴔ
-9.xn--1nd9032d.xn--7ib268q; 9.衃Ⴝ.ڂⴔ; [B1, B2, B3, V6]; 9.xn--1nd9032d.xn--7ib268q; ; ; # 9.衃Ⴝ.ڂⴔ
-9.xn--1nd159e1y2f.xn--7ib268q; 9.‌衃Ⴝ.ڂⴔ; [B1, B2, B3, C1, V6]; 9.xn--1nd159e1y2f.xn--7ib268q; ; ; # 9.衃Ⴝ.ڂⴔ
-9.xn--llj1920a.xn--7ib268q; 9.衃â´.Ú‚â´”; [B1, B2, B3]; 9.xn--llj1920a.xn--7ib268q; ; ; # 9.衃â´.Ú‚â´”
-9.xn--0ug862cbm5e.xn--7ib268q; 9.‌衃â´.Ú‚â´”; [B1, B2, B3, C1]; 9.xn--0ug862cbm5e.xn--7ib268q; ; ; # 9.衃â´.Ú‚â´”
-9.xn--1nd9032d.xn--7ib433c; 9.衃Ⴝ.ڂႴ; [B1, B2, B3, V6]; 9.xn--1nd9032d.xn--7ib433c; ; ; # 9.衃Ⴝ.ڂႴ
-9.xn--1nd159e1y2f.xn--7ib433c; 9.‌衃Ⴝ.ڂႴ; [B1, B2, B3, C1, V6]; 9.xn--1nd159e1y2f.xn--7ib433c; ; ; # 9.衃Ⴝ.ڂႴ
-â’‌衃â´.Ú‚â´”; ; [B1, B2, B3, C1, P1, V6]; xn--0ugx0px1izu2h.xn--7ib268q; ; xn--1shy52abz3f.xn--7ib268q; [B1, B2, B3, P1, V6] # â’衃â´.Ú‚â´”
-â’‌衃Ⴝ.Ú‚â´”; ; [B1, B2, B3, C1, P1, V6]; xn--1nd159ecmd785k.xn--7ib268q; ; xn--1nd362hy16e.xn--7ib268q; [B1, B2, B3, P1, V6] # â’衃Ⴝ.Ú‚â´”
-xn--1nd362hy16e.xn--7ib268q; â’衃Ⴝ.Ú‚â´”; [B1, B2, B3, V6]; xn--1nd362hy16e.xn--7ib268q; ; ; # â’衃Ⴝ.Ú‚â´”
-xn--1nd159ecmd785k.xn--7ib268q; â’‌衃Ⴝ.Ú‚â´”; [B1, B2, B3, C1, V6]; xn--1nd159ecmd785k.xn--7ib268q; ; ; # â’衃Ⴝ.Ú‚â´”
-xn--1shy52abz3f.xn--7ib268q; â’衃â´.Ú‚â´”; [B1, B2, B3, V6]; xn--1shy52abz3f.xn--7ib268q; ; ; # â’衃â´.Ú‚â´”
-xn--0ugx0px1izu2h.xn--7ib268q; â’‌衃â´.Ú‚â´”; [B1, B2, B3, C1, V6]; xn--0ugx0px1izu2h.xn--7ib268q; ; ; # â’衃â´.Ú‚â´”
-xn--1nd362hy16e.xn--7ib433c; â’衃Ⴝ.Ú‚á‚´; [B1, B2, B3, V6]; xn--1nd362hy16e.xn--7ib433c; ; ; # â’衃Ⴝ.Ú‚á‚´
-xn--1nd159ecmd785k.xn--7ib433c; â’‌衃Ⴝ.Ú‚á‚´; [B1, B2, B3, C1, V6]; xn--1nd159ecmd785k.xn--7ib433c; ; ; # â’衃Ⴝ.Ú‚á‚´
-ߡ‌。--⸬; ߡ‌.--⸬; [B1, B3, C1, V3]; xn--8sb884j.xn-----iw2a; ; xn--8sb.xn-----iw2a; [B1, V3] # ߡ.--⸬
-xn--8sb.xn-----iw2a; ߡ.--⸬; [B1, V3]; xn--8sb.xn-----iw2a; ; ; # ߡ.--⸬
-xn--8sb884j.xn-----iw2a; ߡ‌.--⸬; [B1, B3, C1, V3]; xn--8sb884j.xn-----iw2a; ; ; # ߡ.--⸬
-𞥓.ܘ; 𞥓.ܘ; ; xn--of6h.xn--inb; ; ; # 𞥓.ܘ
-𞥓.ܘ; ; ; xn--of6h.xn--inb; ; ; # 𞥓.ܘ
-xn--of6h.xn--inb; 𞥓.ܘ; ; xn--of6h.xn--inb; ; ; # 𞥓.ܘ
-󠄽-.-්; -.-්; [V3]; -.xn----ptf; ; ; # -.-්
-ó „½-.-à·Š; -.-à·Š; [V3]; -.xn----ptf; ; ; # -.-à·Š
--.xn----ptf; -.-à·Š; [V3]; -.xn----ptf; ; ; # -.-à·Š
-ó ‡Ý›-.ᤧ; Ý›-.ᤧ; [B1, B3, B6, V3, V5]; xn----k4c.xn--lff; ; ; # Ý›-.ᤧ
-xn----k4c.xn--lff; ݛ-.ᤧ; [B1, B3, B6, V3, V5]; xn----k4c.xn--lff; ; ; # ݛ-.ᤧ
-𞤴󠆹⦉ð¹º.꠆⒌󘤸; 𞤴⦉ð¹º.꠆⒌󘤸; [B1, P1, V5, V6]; xn--fuix729epewf.xn--xsh5029b6e77i; ; ; # 𞤴⦉ð¹º.꠆⒌
-𞤴󠆹⦉ð¹º.ê †5.󘤸; 𞤴⦉ð¹º.ê †5.󘤸; [B1, P1, V5, V6]; xn--fuix729epewf.xn--5-w93e.xn--7b83e; ; ; # 𞤴⦉ð¹º.ê †5.
-𞤒󠆹⦉ð¹º.ê †5.󘤸; 𞤴⦉ð¹º.ê †5.󘤸; [B1, P1, V5, V6]; xn--fuix729epewf.xn--5-w93e.xn--7b83e; ; ; # 𞤴⦉ð¹º.ê †5.
-xn--fuix729epewf.xn--5-w93e.xn--7b83e; 𞤴⦉ð¹º.ê †5.󘤸; [B1, V5, V6]; xn--fuix729epewf.xn--5-w93e.xn--7b83e; ; ; # 𞤴⦉ð¹º.ê †5.
-𞤒󠆹⦉ð¹º.꠆⒌󘤸; 𞤴⦉ð¹º.꠆⒌󘤸; [B1, P1, V5, V6]; xn--fuix729epewf.xn--xsh5029b6e77i; ; ; # 𞤴⦉ð¹º.꠆⒌
-xn--fuix729epewf.xn--xsh5029b6e77i; 𞤴⦉ð¹º.꠆⒌󘤸; [B1, V5, V6]; xn--fuix729epewf.xn--xsh5029b6e77i; ; ; # 𞤴⦉ð¹º.꠆⒌
-󠄸₀。𑖿‌ð¦‚â€; 0.𑖿‌ð¦‚â€; [B1, C2, V5]; 0.xn--0ugc8040p9hk; ; 0.xn--mn9cz2s; [B1, V5] # 0.ð‘–¿ð¦‚
-󠄸0。𑖿‌ð¦‚â€; 0.𑖿‌ð¦‚â€; [B1, C2, V5]; 0.xn--0ugc8040p9hk; ; 0.xn--mn9cz2s; [B1, V5] # 0.ð‘–¿ð¦‚
+\u0330.󰜱蚀; \u0330.󰜱蚀; [V5, V6]; xn--xta.xn--e91aw9417e; ; ; # ̰.蚀
+\u0330.󰜱蚀; ; [V5, V6]; xn--xta.xn--e91aw9417e; ; ; # ̰.蚀
+xn--xta.xn--e91aw9417e; \u0330.󰜱蚀; [V5, V6]; xn--xta.xn--e91aw9417e; ; ; # ̰.蚀
+\uFB39Ⴘ.𞡼𑇀ß\u20D7; \u05D9\u05BCႸ.𞡼𑇀ß\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--zca284nhg9nrrxg; ; xn--kdb1d867b.xn--ss-yju5690ken9h; # יּႸ.𞡼𑇀ß⃗
+\u05D9\u05BCႸ.𞡼𑇀ß\u20D7; ; [B2, B3, V6]; xn--kdb1d867b.xn--zca284nhg9nrrxg; ; xn--kdb1d867b.xn--ss-yju5690ken9h; # יּႸ.𞡼𑇀ß⃗
+\u05D9\u05BCⴘ.𞡼𑇀ß\u20D7; ; [B2, B3]; xn--kdb1d278n.xn--zca284nhg9nrrxg; ; xn--kdb1d278n.xn--ss-yju5690ken9h; # יּⴘ.𞡼𑇀ß⃗
+\u05D9\u05BCႸ.𞡼𑇀SS\u20D7; \u05D9\u05BCႸ.𞡼𑇀ss\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗
+\u05D9\u05BCⴘ.𞡼𑇀ss\u20D7; ; [B2, B3]; xn--kdb1d278n.xn--ss-yju5690ken9h; ; ; # יּⴘ.𞡼𑇀ss⃗
+xn--kdb1d278n.xn--ss-yju5690ken9h; \u05D9\u05BCⴘ.𞡼𑇀ss\u20D7; [B2, B3]; xn--kdb1d278n.xn--ss-yju5690ken9h; ; ; # יּⴘ.𞡼𑇀ss⃗
+xn--kdb1d867b.xn--ss-yju5690ken9h; \u05D9\u05BCႸ.𞡼𑇀ss\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗
+xn--kdb1d278n.xn--zca284nhg9nrrxg; \u05D9\u05BCⴘ.𞡼𑇀ß\u20D7; [B2, B3]; xn--kdb1d278n.xn--zca284nhg9nrrxg; ; ; # יּⴘ.𞡼𑇀ß⃗
+xn--kdb1d867b.xn--zca284nhg9nrrxg; \u05D9\u05BCႸ.𞡼𑇀ß\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--zca284nhg9nrrxg; ; ; # יּႸ.𞡼𑇀ß⃗
+\uFB39ⴘ.𞡼𑇀ß\u20D7; \u05D9\u05BCⴘ.𞡼𑇀ß\u20D7; [B2, B3]; xn--kdb1d278n.xn--zca284nhg9nrrxg; ; xn--kdb1d278n.xn--ss-yju5690ken9h; # יּⴘ.𞡼𑇀ß⃗
+\uFB39Ⴘ.𞡼𑇀SS\u20D7; \u05D9\u05BCႸ.𞡼𑇀ss\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗
+\uFB39ⴘ.𞡼𑇀ss\u20D7; \u05D9\u05BCⴘ.𞡼𑇀ss\u20D7; [B2, B3]; xn--kdb1d278n.xn--ss-yju5690ken9h; ; ; # יּⴘ.𞡼𑇀ss⃗
+\u05D9\u05BCႸ.𞡼𑇀ss\u20D7; ; [B2, B3, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗
+\uFB39Ⴘ.𞡼𑇀ss\u20D7; \u05D9\u05BCႸ.𞡼𑇀ss\u20D7; [B2, B3, V6]; xn--kdb1d867b.xn--ss-yju5690ken9h; ; ; # יּႸ.𞡼𑇀ss⃗
+\u1BA3ð¹°ò±“。凬; \u1BA3ð¹°ò±“.凬; [B1, V5, V6]; xn--rxfz314ilg20c.xn--t9q; ; ; # ᮣð¹°.凬
+\u1BA3ð¹°ò±“。凬; \u1BA3ð¹°ò±“.凬; [B1, V5, V6]; xn--rxfz314ilg20c.xn--t9q; ; ; # ᮣð¹°.凬
+xn--rxfz314ilg20c.xn--t9q; \u1BA3ð¹°ò±“.凬; [B1, V5, V6]; xn--rxfz314ilg20c.xn--t9q; ; ; # ᮣð¹°.凬
+🢟🄈\u200Dꡎ。\u0F84; 🢟🄈\u200Dꡎ.\u0F84; [C2, V5, V6]; xn--1ug4874cfd0kbmg.xn--3ed; ; xn--nc9aq743ds0e.xn--3ed; [V5, V6] # 🢟🄈ꡎ.྄
+🢟7,\u200Dꡎ。\u0F84; 🢟7,\u200Dꡎ.\u0F84; [C2, V5, V6]; xn--7,-n1t0654eqo3o.xn--3ed; ; xn--7,-gh9hg322i.xn--3ed; [V5, V6] # 🢟7,ꡎ.྄
+xn--7,-gh9hg322i.xn--3ed; 🢟7,ꡎ.\u0F84; [V5, V6]; xn--7,-gh9hg322i.xn--3ed; ; ; # 🢟7,ꡎ.྄
+xn--7,-n1t0654eqo3o.xn--3ed; 🢟7,\u200Dꡎ.\u0F84; [C2, V5, V6]; xn--7,-n1t0654eqo3o.xn--3ed; ; ; # 🢟7,ꡎ.྄
+xn--nc9aq743ds0e.xn--3ed; 🢟🄈ꡎ.\u0F84; [V5, V6]; xn--nc9aq743ds0e.xn--3ed; ; ; # 🢟🄈ꡎ.྄
+xn--1ug4874cfd0kbmg.xn--3ed; 🢟🄈\u200Dꡎ.\u0F84; [C2, V5, V6]; xn--1ug4874cfd0kbmg.xn--3ed; ; ; # 🢟🄈ꡎ.྄
+ꡔ。\u1039ᢇ; ꡔ.\u1039ᢇ; [V5]; xn--tc9a.xn--9jd663b; ; ; # ꡔ.္ᢇ
+xn--tc9a.xn--9jd663b; ꡔ.\u1039ᢇ; [V5]; xn--tc9a.xn--9jd663b; ; ; # ꡔ.္ᢇ
+\u20EB≮.ð¨–; ; [V5]; xn--e1g71d.xn--772h; ; ; # ⃫≮.ð¨–
+\u20EB<\u0338.ð¨–; \u20EB≮.ð¨–; [V5]; xn--e1g71d.xn--772h; ; ; # ⃫≮.ð¨–
+xn--e1g71d.xn--772h; \u20EB≮.ð¨–; [V5]; xn--e1g71d.xn--772h; ; ; # ⃫≮.ð¨–
+Ⴢ≯褦.ᠪ\u07EAႾ\u0767; Ⴢ≯褦.ᠪ\u07EAႾ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ
+Ⴢ>\u0338褦.ᠪ\u07EAႾ\u0767; Ⴢ≯褦.ᠪ\u07EAႾ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ
+Ⴢ≯褦.ᠪ\u07EAႾ\u0767; ; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ
+Ⴢ>\u0338褦.ᠪ\u07EAႾ\u0767; Ⴢ≯褦.ᠪ\u07EAႾ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ
+ⴢ>\u0338褦.ᠪ\u07EAⴞ\u0767; ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ
+ⴢ≯褦.ᠪ\u07EAⴞ\u0767; ; [B5, B6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ
+Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; ; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ
+Ⴢ>\u0338褦.ᠪ\u07EAⴞ\u0767; Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ
+xn--6nd461g478e.xn--rpb5x392bcyt; Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ
+xn--hdh433bev8e.xn--rpb5x392bcyt; ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ
+xn--6nd461g478e.xn--rpb5x49td2h; Ⴢ≯褦.ᠪ\u07EAႾ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x49td2h; ; ; # Ⴢ≯褦.ᠪߪႾݧ
+ⴢ>\u0338褦.ᠪ\u07EAⴞ\u0767; ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ
+ⴢ≯褦.ᠪ\u07EAⴞ\u0767; ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6]; xn--hdh433bev8e.xn--rpb5x392bcyt; ; ; # ⴢ≯褦.ᠪߪⴞݧ
+Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ
+Ⴢ>\u0338褦.ᠪ\u07EAⴞ\u0767; Ⴢ≯褦.ᠪ\u07EAⴞ\u0767; [B5, B6, V6]; xn--6nd461g478e.xn--rpb5x392bcyt; ; ; # Ⴢ≯褦.ᠪߪⴞݧ
+򊉆󠆒\u200C\uA953。𞤙\u067Bꡘ; 򊉆\u200C\uA953.𞤻\u067Bꡘ; [B2, B3, C1, V6]; xn--0ug8815chtz0e.xn--0ib8893fegvj; ; xn--3j9al6189a.xn--0ib8893fegvj; [B2, B3, V6] # ꥓.𞤻ٻꡘ
+򊉆󠆒\u200C\uA953。𞤻\u067Bꡘ; 򊉆\u200C\uA953.𞤻\u067Bꡘ; [B2, B3, C1, V6]; xn--0ug8815chtz0e.xn--0ib8893fegvj; ; xn--3j9al6189a.xn--0ib8893fegvj; [B2, B3, V6] # ꥓.𞤻ٻꡘ
+xn--3j9al6189a.xn--0ib8893fegvj; 򊉆\uA953.𞤻\u067Bꡘ; [B2, B3, V6]; xn--3j9al6189a.xn--0ib8893fegvj; ; ; # ꥓.𞤻ٻꡘ
+xn--0ug8815chtz0e.xn--0ib8893fegvj; 򊉆\u200C\uA953.𞤻\u067Bꡘ; [B2, B3, C1, V6]; xn--0ug8815chtz0e.xn--0ib8893fegvj; ; ; # ꥓.𞤻ٻꡘ
+\u200C.≯; ; [C1]; xn--0ug.xn--hdh; ; .xn--hdh; [A4_2] # .≯
+\u200C.>\u0338; \u200C.≯; [C1]; xn--0ug.xn--hdh; ; .xn--hdh; [A4_2] # .≯
+.xn--hdh; .≯; [X4_2]; .xn--hdh; [A4_2]; ; # .≯
+xn--0ug.xn--hdh; \u200C.≯; [C1]; xn--0ug.xn--hdh; ; ; # .≯
+𰅧񣩠-.\uABED-悜; 𰅧񣩠-.\uABED-悜; [V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜
+𰅧񣩠-.\uABED-悜; ; [V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜
+xn----7m53aj640l.xn----8f4br83t; 𰅧񣩠-.\uABED-悜; [V3, V5, V6]; xn----7m53aj640l.xn----8f4br83t; ; ; # 𰅧-.꯭-悜
+ᡉ𶓧⬞ᢜ.-\u200D𞣑\u202E; ; [C2, V3, V6]; xn--87e0ol04cdl39e.xn----ugn5e3763s; ; xn--87e0ol04cdl39e.xn----qinu247r; [V3, V6] # ᡉ⬞ᢜ.-𞣑
+xn--87e0ol04cdl39e.xn----qinu247r; ᡉ𶓧⬞ᢜ.-𞣑\u202E; [V3, V6]; xn--87e0ol04cdl39e.xn----qinu247r; ; ; # ᡉ⬞ᢜ.-𞣑
+xn--87e0ol04cdl39e.xn----ugn5e3763s; ᡉ𶓧⬞ᢜ.-\u200D𞣑\u202E; [C2, V3, V6]; xn--87e0ol04cdl39e.xn----ugn5e3763s; ; ; # ᡉ⬞ᢜ.-𞣑
+â’\u200C衃Ⴝ.\u0682á‚´; ; [B1, B2, B3, C1, V6]; xn--1nd159ecmd785k.xn--7ib433c; ; xn--1nd362hy16e.xn--7ib433c; [B1, B2, B3, V6] # â’衃Ⴝ.Ú‚á‚´
+9.\u200C衃Ⴝ.\u0682Ⴔ; ; [B1, B2, B3, C1, V6]; 9.xn--1nd159e1y2f.xn--7ib433c; ; 9.xn--1nd9032d.xn--7ib433c; [B1, B2, B3, V6] # 9.衃Ⴝ.ڂႴ
+9.\u200C衃â´.\u0682â´”; ; [B1, B2, B3, C1]; 9.xn--0ug862cbm5e.xn--7ib268q; ; 9.xn--llj1920a.xn--7ib268q; [B1, B2, B3] # 9.衃â´.Ú‚â´”
+9.\u200C衃Ⴝ.\u0682ⴔ; ; [B1, B2, B3, C1, V6]; 9.xn--1nd159e1y2f.xn--7ib268q; ; 9.xn--1nd9032d.xn--7ib268q; [B1, B2, B3, V6] # 9.衃Ⴝ.ڂⴔ
+9.xn--1nd9032d.xn--7ib268q; 9.衃Ⴝ.\u0682ⴔ; [B1, B2, B3, V6]; 9.xn--1nd9032d.xn--7ib268q; ; ; # 9.衃Ⴝ.ڂⴔ
+9.xn--1nd159e1y2f.xn--7ib268q; 9.\u200C衃Ⴝ.\u0682ⴔ; [B1, B2, B3, C1, V6]; 9.xn--1nd159e1y2f.xn--7ib268q; ; ; # 9.衃Ⴝ.ڂⴔ
+9.xn--llj1920a.xn--7ib268q; 9.衃â´.\u0682â´”; [B1, B2, B3]; 9.xn--llj1920a.xn--7ib268q; ; ; # 9.衃â´.Ú‚â´”
+9.xn--0ug862cbm5e.xn--7ib268q; 9.\u200C衃â´.\u0682â´”; [B1, B2, B3, C1]; 9.xn--0ug862cbm5e.xn--7ib268q; ; ; # 9.衃â´.Ú‚â´”
+9.xn--1nd9032d.xn--7ib433c; 9.衃Ⴝ.\u0682Ⴔ; [B1, B2, B3, V6]; 9.xn--1nd9032d.xn--7ib433c; ; ; # 9.衃Ⴝ.ڂႴ
+9.xn--1nd159e1y2f.xn--7ib433c; 9.\u200C衃Ⴝ.\u0682Ⴔ; [B1, B2, B3, C1, V6]; 9.xn--1nd159e1y2f.xn--7ib433c; ; ; # 9.衃Ⴝ.ڂႴ
+â’\u200C衃â´.\u0682â´”; ; [B1, B2, B3, C1, V6]; xn--0ugx0px1izu2h.xn--7ib268q; ; xn--1shy52abz3f.xn--7ib268q; [B1, B2, B3, V6] # â’衃â´.Ú‚â´”
+â’\u200C衃Ⴝ.\u0682â´”; ; [B1, B2, B3, C1, V6]; xn--1nd159ecmd785k.xn--7ib268q; ; xn--1nd362hy16e.xn--7ib268q; [B1, B2, B3, V6] # â’衃Ⴝ.Ú‚â´”
+xn--1nd362hy16e.xn--7ib268q; â’衃Ⴝ.\u0682â´”; [B1, B2, B3, V6]; xn--1nd362hy16e.xn--7ib268q; ; ; # â’衃Ⴝ.Ú‚â´”
+xn--1nd159ecmd785k.xn--7ib268q; â’\u200C衃Ⴝ.\u0682â´”; [B1, B2, B3, C1, V6]; xn--1nd159ecmd785k.xn--7ib268q; ; ; # â’衃Ⴝ.Ú‚â´”
+xn--1shy52abz3f.xn--7ib268q; â’衃â´.\u0682â´”; [B1, B2, B3, V6]; xn--1shy52abz3f.xn--7ib268q; ; ; # â’衃â´.Ú‚â´”
+xn--0ugx0px1izu2h.xn--7ib268q; â’\u200C衃â´.\u0682â´”; [B1, B2, B3, C1, V6]; xn--0ugx0px1izu2h.xn--7ib268q; ; ; # â’衃â´.Ú‚â´”
+xn--1nd362hy16e.xn--7ib433c; â’衃Ⴝ.\u0682á‚´; [B1, B2, B3, V6]; xn--1nd362hy16e.xn--7ib433c; ; ; # â’衃Ⴝ.Ú‚á‚´
+xn--1nd159ecmd785k.xn--7ib433c; â’\u200C衃Ⴝ.\u0682á‚´; [B1, B2, B3, C1, V6]; xn--1nd159ecmd785k.xn--7ib433c; ; ; # â’衃Ⴝ.Ú‚á‚´
+\u07E1\u200C。--⸬; \u07E1\u200C.--⸬; [B1, B3, C1, V3]; xn--8sb884j.xn-----iw2a; ; xn--8sb.xn-----iw2a; [B1, V3] # ߡ.--⸬
+xn--8sb.xn-----iw2a; \u07E1.--⸬; [B1, V3]; xn--8sb.xn-----iw2a; ; ; # ߡ.--⸬
+xn--8sb884j.xn-----iw2a; \u07E1\u200C.--⸬; [B1, B3, C1, V3]; xn--8sb884j.xn-----iw2a; ; ; # ߡ.--⸬
+𞥓.\u0718; 𞥓.\u0718; ; xn--of6h.xn--inb; ; ; # 𞥓.ܘ
+𞥓.\u0718; ; ; xn--of6h.xn--inb; ; ; # 𞥓.ܘ
+xn--of6h.xn--inb; 𞥓.\u0718; ; xn--of6h.xn--inb; ; ; # 𞥓.ܘ
+󠄽-.-\u0DCA; -.-\u0DCA; [V3]; -.xn----ptf; ; ; # -.-්
+ó „½-.-\u0DCA; -.-\u0DCA; [V3]; -.xn----ptf; ; ; # -.-à·Š
+-.xn----ptf; -.-\u0DCA; [V3]; -.xn----ptf; ; ; # -.-à·Š
+ó ‡\u075B-.\u1927; \u075B-.\u1927; [B1, B3, V3, V5]; xn----k4c.xn--lff; ; ; # Ý›-.ᤧ
+xn----k4c.xn--lff; \u075B-.\u1927; [B1, B3, V3, V5]; xn----k4c.xn--lff; ; ; # ݛ-.ᤧ
+𞤴󠆹⦉ð¹º.\uA806⒌󘤸; 𞤴⦉ð¹º.\uA806⒌󘤸; [B1, V5, V6]; xn--fuix729epewf.xn--xsh5029b6e77i; ; ; # 𞤴⦉ð¹º.꠆⒌
+𞤴󠆹⦉ð¹º.\uA8065.󘤸; 𞤴⦉ð¹º.\uA8065.󘤸; [B1, V5, V6]; xn--fuix729epewf.xn--5-w93e.xn--7b83e; ; ; # 𞤴⦉ð¹º.ê †5.
+𞤒󠆹⦉ð¹º.\uA8065.󘤸; 𞤴⦉ð¹º.\uA8065.󘤸; [B1, V5, V6]; xn--fuix729epewf.xn--5-w93e.xn--7b83e; ; ; # 𞤴⦉ð¹º.ê †5.
+xn--fuix729epewf.xn--5-w93e.xn--7b83e; 𞤴⦉ð¹º.\uA8065.󘤸; [B1, V5, V6]; xn--fuix729epewf.xn--5-w93e.xn--7b83e; ; ; # 𞤴⦉ð¹º.ê †5.
+𞤒󠆹⦉ð¹º.\uA806⒌󘤸; 𞤴⦉ð¹º.\uA806⒌󘤸; [B1, V5, V6]; xn--fuix729epewf.xn--xsh5029b6e77i; ; ; # 𞤴⦉ð¹º.꠆⒌
+xn--fuix729epewf.xn--xsh5029b6e77i; 𞤴⦉ð¹º.\uA806⒌󘤸; [B1, V5, V6]; xn--fuix729epewf.xn--xsh5029b6e77i; ; ; # 𞤴⦉ð¹º.꠆⒌
+󠄸₀。𑖿\u200Cð¦‚\u200D; 0.ð‘–¿\u200Cð¦‚\u200D; [B1, C2, V5]; 0.xn--0ugc8040p9hk; ; 0.xn--mn9cz2s; [B1, V5] # 0.ð‘–¿ð¦‚
+󠄸0。𑖿\u200Cð¦‚\u200D; 0.ð‘–¿\u200Cð¦‚\u200D; [B1, C2, V5]; 0.xn--0ugc8040p9hk; ; 0.xn--mn9cz2s; [B1, V5] # 0.ð‘–¿ð¦‚
0.xn--mn9cz2s; 0.ð‘–¿ð¦‚; [B1, V5]; 0.xn--mn9cz2s; ; ; # 0.ð‘–¿ð¦‚
-0.xn--0ugc8040p9hk; 0.𑖿‌ð¦‚â€; [B1, C2, V5]; 0.xn--0ugc8040p9hk; ; ; # 0.ð‘–¿ð¦‚
-Ⴚð‹¸ó „„。ðŸíŸ¶á€º; Ⴚð‹¸.5ퟶ်; [P1, V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚð‹¸.5ퟶ်
-Ⴚð‹¸ó „„。5ퟶ်; Ⴚð‹¸.5ퟶ်; [P1, V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚð‹¸.5ퟶ်
-â´šð‹¸ó „„。5ퟶ်; â´šð‹¸.5ퟶ်; ; xn--ilj2659d.xn--5-dug9054m; ; ; # â´šð‹¸.5ퟶ်
-xn--ilj2659d.xn--5-dug9054m; â´šð‹¸.5ퟶ်; ; xn--ilj2659d.xn--5-dug9054m; ; ; # â´šð‹¸.5ퟶ်
-â´šð‹¸.5ퟶ်; ; ; xn--ilj2659d.xn--5-dug9054m; ; ; # â´šð‹¸.5ퟶ်
-Ⴚð‹¸.5ퟶ်; ; [P1, V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚð‹¸.5ퟶ်
-xn--ynd2415j.xn--5-dug9054m; Ⴚð‹¸.5ퟶ်; [V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚð‹¸.5ퟶ်
-â´šð‹¸ó „„。ðŸíŸ¶á€º; â´šð‹¸.5ퟶ်; ; xn--ilj2659d.xn--5-dug9054m; ; ; # â´šð‹¸.5ퟶ်
-â€-ᠹ﹪.ᷡᤢ; ; [C2, P1, V5, V6]; xn----c6j614b1z4v.xn--gff52t; ; xn----c6jx047j.xn--gff52t; [P1, V3, V5, V6] # -ᠹ﹪.ᷡᤢ
-â€-á ¹%.ᷡᤢ; ; [C2, P1, V5, V6]; xn---%-u4oy48b.xn--gff52t; ; xn---%-u4o.xn--gff52t; [P1, V3, V5, V6] # -á ¹%.ᷡᤢ
-xn---%-u4o.xn--gff52t; -ᠹ%.ᷡᤢ; [P1, V3, V5, V6]; xn---%-u4o.xn--gff52t; ; ; # -ᠹ%.ᷡᤢ
-xn---%-u4oy48b.xn--gff52t; â€-á ¹%.ᷡᤢ; [C2, P1, V5, V6]; xn---%-u4oy48b.xn--gff52t; ; ; # -á ¹%.ᷡᤢ
-xn----c6jx047j.xn--gff52t; -ᠹ﹪.ᷡᤢ; [V3, V5, V6]; xn----c6jx047j.xn--gff52t; ; ; # -ᠹ﹪.ᷡᤢ
-xn----c6j614b1z4v.xn--gff52t; â€-ᠹ﹪.ᷡᤢ; [C2, V5, V6]; xn----c6j614b1z4v.xn--gff52t; ; ; # -ᠹ﹪.ᷡᤢ
-≠.ᠿ; ; [P1, V6]; xn--1ch.xn--y7e; ; ; # ≠.ᠿ
-≠.ᠿ; ≠.ᠿ; [P1, V6]; xn--1ch.xn--y7e; ; ; # ≠.ᠿ
-xn--1ch.xn--y7e; ≠.ᠿ; [V6]; xn--1ch.xn--y7e; ; ; # ≠.ᠿ
-ܣ֣。㌪; Ü£Ö£.ãƒã‚¤ãƒ„; ; xn--ucb18e.xn--eck4c5a; ; ; # Ü£Ö£.ãƒã‚¤ãƒ„
-ܣ֣。ãƒã‚¤ãƒ„; Ü£Ö£.ãƒã‚¤ãƒ„; ; xn--ucb18e.xn--eck4c5a; ; ; # Ü£Ö£.ãƒã‚¤ãƒ„
-xn--ucb18e.xn--eck4c5a; Ü£Ö£.ãƒã‚¤ãƒ„; ; xn--ucb18e.xn--eck4c5a; ; ; # Ü£Ö£.ãƒã‚¤ãƒ„
-Ü£Ö£.ãƒã‚¤ãƒ„; ; ; xn--ucb18e.xn--eck4c5a; ; ; # Ü£Ö£.ãƒã‚¤ãƒ„
-𞷥󠆀≮.⵿-; 𞷥≮.⵿-; [B1, B3, P1, V3, V5, V6]; xn--gdhx802p.xn----i2s; ; ; # ≮.⵿-
-𞷥󠆀≮.⵿-; 𞷥≮.⵿-; [B1, B3, P1, V3, V5, V6]; xn--gdhx802p.xn----i2s; ; ; # ≮.⵿-
-xn--gdhx802p.xn----i2s; 𞷥≮.⵿-; [B1, B3, V3, V5, V6]; xn--gdhx802p.xn----i2s; ; ; # ≮.⵿-
-₆榎ò¦–Žàµï½¡ðž¤…ۭﱚ󠮨; 6榎ò¦–Žàµ.𞤧ۭيي󠮨; [B1, B3, P1, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎àµ.𞤧ۭيي
-6榎ò¦–Žàµã€‚𞤅ۭيي󠮨; 6榎ò¦–Žàµ.𞤧ۭيي󠮨; [B1, B3, P1, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎àµ.𞤧ۭيي
-6榎ò¦–Žàµã€‚𞤧ۭيي󠮨; 6榎ò¦–Žàµ.𞤧ۭيي󠮨; [B1, B3, P1, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎àµ.𞤧ۭيي
-xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; 6榎ò¦–Žàµ.𞤧ۭيي󠮨; [B1, B3, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎àµ.𞤧ۭيي
-₆榎ò¦–Žàµï½¡ðž¤§Û­ï±šó ®¨; 6榎ò¦–Žàµ.𞤧ۭيي󠮨; [B1, B3, P1, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎àµ.𞤧ۭيي
-𣩫.򌑲; 𣩫.򌑲; [P1, V6]; xn--td3j.xn--4628b; ; ; # 𣩫.
-𣩫.򌑲; ; [P1, V6]; xn--td3j.xn--4628b; ; ; # 𣩫.
+0.xn--0ugc8040p9hk; 0.ð‘–¿\u200Cð¦‚\u200D; [B1, C2, V5]; 0.xn--0ugc8040p9hk; ; ; # 0.ð‘–¿ð¦‚
+Ⴚð‹¸ó „„。ðŸíŸ¶\u103A; Ⴚð‹¸.5ퟶ\u103A; [V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚð‹¸.5ퟶ်
+Ⴚð‹¸ó „„。5ퟶ\u103A; Ⴚð‹¸.5ퟶ\u103A; [V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚð‹¸.5ퟶ်
+â´šð‹¸ó „„。5ퟶ\u103A; â´šð‹¸.5ퟶ\u103A; ; xn--ilj2659d.xn--5-dug9054m; ; ; # â´šð‹¸.5ퟶ်
+xn--ilj2659d.xn--5-dug9054m; â´šð‹¸.5ퟶ\u103A; ; xn--ilj2659d.xn--5-dug9054m; ; ; # â´šð‹¸.5ퟶ်
+â´šð‹¸.5ퟶ\u103A; ; ; xn--ilj2659d.xn--5-dug9054m; ; ; # â´šð‹¸.5ퟶ်
+Ⴚð‹¸.5ퟶ\u103A; ; [V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚð‹¸.5ퟶ်
+xn--ynd2415j.xn--5-dug9054m; Ⴚð‹¸.5ퟶ\u103A; [V6]; xn--ynd2415j.xn--5-dug9054m; ; ; # Ⴚð‹¸.5ퟶ်
+â´šð‹¸ó „„。ðŸíŸ¶\u103A; â´šð‹¸.5ퟶ\u103A; ; xn--ilj2659d.xn--5-dug9054m; ; ; # â´šð‹¸.5ퟶ်
+\u200D-ᠹ﹪.\u1DE1\u1922; ; [C2, V5, V6]; xn----c6j614b1z4v.xn--gff52t; ; xn----c6jx047j.xn--gff52t; [V3, V5, V6] # -ᠹ﹪.ᷡᤢ
+\u200D-ᠹ%.\u1DE1\u1922; ; [C2, V5, V6]; xn---%-u4oy48b.xn--gff52t; ; xn---%-u4o.xn--gff52t; [V3, V5, V6] # -ᠹ%.ᷡᤢ
+xn---%-u4o.xn--gff52t; -ᠹ%.\u1DE1\u1922; [V3, V5, V6]; xn---%-u4o.xn--gff52t; ; ; # -ᠹ%.ᷡᤢ
+xn---%-u4oy48b.xn--gff52t; \u200D-ᠹ%.\u1DE1\u1922; [C2, V5, V6]; xn---%-u4oy48b.xn--gff52t; ; ; # -ᠹ%.ᷡᤢ
+xn----c6jx047j.xn--gff52t; -ᠹ﹪.\u1DE1\u1922; [V3, V5, V6]; xn----c6jx047j.xn--gff52t; ; ; # -ᠹ﹪.ᷡᤢ
+xn----c6j614b1z4v.xn--gff52t; \u200D-ᠹ﹪.\u1DE1\u1922; [C2, V5, V6]; xn----c6j614b1z4v.xn--gff52t; ; ; # -ᠹ﹪.ᷡᤢ
+≠.ᠿ; ; ; xn--1ch.xn--y7e; ; ; # ≠.ᠿ
+=\u0338.ᠿ; ≠.ᠿ; ; xn--1ch.xn--y7e; ; ; # ≠.ᠿ
+xn--1ch.xn--y7e; ≠.ᠿ; ; xn--1ch.xn--y7e; ; ; # ≠.ᠿ
+\u0723\u05A3。㌪; \u0723\u05A3.ãƒã‚¤ãƒ„; ; xn--ucb18e.xn--eck4c5a; ; ; # Ü£Ö£.ãƒã‚¤ãƒ„
+\u0723\u05A3。ãƒã‚¤ãƒ„; \u0723\u05A3.ãƒã‚¤ãƒ„; ; xn--ucb18e.xn--eck4c5a; ; ; # Ü£Ö£.ãƒã‚¤ãƒ„
+xn--ucb18e.xn--eck4c5a; \u0723\u05A3.ãƒã‚¤ãƒ„; ; xn--ucb18e.xn--eck4c5a; ; ; # Ü£Ö£.ãƒã‚¤ãƒ„
+\u0723\u05A3.ãƒã‚¤ãƒ„; ; ; xn--ucb18e.xn--eck4c5a; ; ; # Ü£Ö£.ãƒã‚¤ãƒ„
+𞷥󠆀≮.\u2D7F-; 𞷥≮.\u2D7F-; [B1, B3, V3, V5, V6]; xn--gdhx802p.xn----i2s; ; ; # ≮.⵿-
+𞷥󠆀<\u0338.\u2D7F-; 𞷥≮.\u2D7F-; [B1, B3, V3, V5, V6]; xn--gdhx802p.xn----i2s; ; ; # ≮.⵿-
+xn--gdhx802p.xn----i2s; 𞷥≮.\u2D7F-; [B1, B3, V3, V5, V6]; xn--gdhx802p.xn----i2s; ; ; # ≮.⵿-
+₆榎ò¦–Ž\u0D4D。𞤅\u06ED\uFC5A󠮨; 6榎ò¦–Ž\u0D4D.𞤧\u06ED\u064A\u064A󠮨; [B1, B3, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎àµ.𞤧ۭيي
+6榎ò¦–Ž\u0D4D。𞤅\u06ED\u064A\u064A󠮨; 6榎ò¦–Ž\u0D4D.𞤧\u06ED\u064A\u064A󠮨; [B1, B3, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎àµ.𞤧ۭيي
+6榎ò¦–Ž\u0D4D。𞤧\u06ED\u064A\u064A󠮨; 6榎ò¦–Ž\u0D4D.𞤧\u06ED\u064A\u064A󠮨; [B1, B3, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎àµ.𞤧ۭيي
+xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; 6榎ò¦–Ž\u0D4D.𞤧\u06ED\u064A\u064A󠮨; [B1, B3, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎àµ.𞤧ۭيي
+₆榎ò¦–Ž\u0D4D。𞤧\u06ED\uFC5A󠮨; 6榎ò¦–Ž\u0D4D.𞤧\u06ED\u064A\u064A󠮨; [B1, B3, V6]; xn--6-kmf4691ejv41j.xn--mhba10ch545mn8v8h; ; ; # 6榎àµ.𞤧ۭيي
+𣩫.򌑲; 𣩫.򌑲; [V6]; xn--td3j.xn--4628b; ; ; # 𣩫.
+𣩫.򌑲; ; [V6]; xn--td3j.xn--4628b; ; ; # 𣩫.
xn--td3j.xn--4628b; 𣩫.򌑲; [V6]; xn--td3j.xn--4628b; ; ; # 𣩫.
-â€ï¸’。ڹ‌; â€ï¸’.ڹ‌; [B1, B3, C1, C2, P1, V6]; xn--1ug2658f.xn--skb080k; ; xn--y86c.xn--skb; [B1, P1, V6] # ︒.Ú¹
-xn--y86c.xn--skb; ︒.ڹ; [B1, V6]; xn--y86c.xn--skb; ; ; # ︒.ڹ
-xn--1ug2658f.xn--skb080k; â€ï¸’.ڹ‌; [B1, B3, C1, C2, V6]; xn--1ug2658f.xn--skb080k; ; ; # ︒.Ú¹
-xn--skb; Ú¹; ; xn--skb; ; ; # Ú¹
-Ú¹; ; ; xn--skb; ; ; # Ú¹
-ð¹¦â€Œð¹¶ã€‚â­; ð¹¦â€Œð¹¶.â­; [B1, C1, P1, V6]; xn--0ug4994goba.xn--sxg; ; xn--eo0d6a.xn--sxg; [B1, P1, V6] # ð¹¦ð¹¶.
-xn--eo0d6a.xn--sxg; ð¹¦ð¹¶.â­; [B1, V6]; xn--eo0d6a.xn--sxg; ; ; # ð¹¦ð¹¶.
-xn--0ug4994goba.xn--sxg; ð¹¦â€Œð¹¶.â­; [B1, C1, V6]; xn--0ug4994goba.xn--sxg; ; ; # ð¹¦ð¹¶.
-à±ð¨¾Ö©ðŸ­ã€‚-𑜨; à±ð¨¾Ö©1.-𑜨; [V3, V5]; xn--1-rfc312cdp45c.xn----nq0j; ; ; # à±ð¨¾Ö©1.-𑜨
-à±ð¨¾Ö©1。-𑜨; à±ð¨¾Ö©1.-𑜨; [V3, V5]; xn--1-rfc312cdp45c.xn----nq0j; ; ; # à±ð¨¾Ö©1.-𑜨
-xn--1-rfc312cdp45c.xn----nq0j; à±ð¨¾Ö©1.-𑜨; [V3, V5]; xn--1-rfc312cdp45c.xn----nq0j; ; ; # à±ð¨¾Ö©1.-𑜨
-ò£¿ˆã€‚ë™; ò£¿ˆ.ë™; [P1, V6]; xn--ph26c.xn--281b; ; ; # .ë™
-ò£¿ˆã€‚뙏; ò£¿ˆ.ë™; [P1, V6]; xn--ph26c.xn--281b; ; ; # .ë™
+\u200D︒。\u06B9\u200C; \u200D︒.\u06B9\u200C; [B1, B3, C1, C2, V6]; xn--1ug2658f.xn--skb080k; ; xn--y86c.xn--skb; [B1, V6] # ︒.ڹ
+xn--y86c.xn--skb; ︒.\u06B9; [B1, V6]; xn--y86c.xn--skb; ; ; # ︒.ڹ
+xn--1ug2658f.xn--skb080k; \u200D︒.\u06B9\u200C; [B1, B3, C1, C2, V6]; xn--1ug2658f.xn--skb080k; ; ; # ︒.ڹ
+xn--skb; \u06B9; ; xn--skb; ; ; # Ú¹
+\u06B9; ; ; xn--skb; ; ; # Ú¹
+ð¹¦\u200Cð¹¶ã€‚\u206D; ð¹¦\u200Cð¹¶.\u206D; [B1, C1, V6]; xn--0ug4994goba.xn--sxg; ; xn--eo0d6a.xn--sxg; [B1, V6] # ð¹¦ð¹¶.
+xn--eo0d6a.xn--sxg; ð¹¦ð¹¶.\u206D; [B1, V6]; xn--eo0d6a.xn--sxg; ; ; # ð¹¦ð¹¶.
+xn--0ug4994goba.xn--sxg; ð¹¦\u200Cð¹¶.\u206D; [B1, C1, V6]; xn--0ug4994goba.xn--sxg; ; ; # ð¹¦ð¹¶.
+\u0C4Dð¨¾\u05A9ðŸ­ã€‚-𑜨; \u0C4Dð¨¾\u05A91.-𑜨; [V3, V5]; xn--1-rfc312cdp45c.xn----nq0j; ; ; # à±ð¨¾Ö©1.-𑜨
+\u0C4Dð¨¾\u05A91。-𑜨; \u0C4Dð¨¾\u05A91.-𑜨; [V3, V5]; xn--1-rfc312cdp45c.xn----nq0j; ; ; # à±ð¨¾Ö©1.-𑜨
+xn--1-rfc312cdp45c.xn----nq0j; \u0C4Dð¨¾\u05A91.-𑜨; [V3, V5]; xn--1-rfc312cdp45c.xn----nq0j; ; ; # à±ð¨¾Ö©1.-𑜨
+ò£¿ˆã€‚ë™; ò£¿ˆ.ë™; [V6]; xn--ph26c.xn--281b; ; ; # .ë™
+ò£¿ˆã€‚뙏; ò£¿ˆ.ë™; [V6]; xn--ph26c.xn--281b; ; ; # .ë™
xn--ph26c.xn--281b; ò£¿ˆ.ë™; [V6]; xn--ph26c.xn--281b; ; ; # .ë™
-񕨚󠄌󑽀ᡀ.ࢶ; 񕨚󑽀ᡀ.ࢶ; [P1, V6]; xn--z7e98100evc01b.xn--czb; ; ; # ᡀ.ࢶ
-xn--z7e98100evc01b.xn--czb; 񕨚󑽀ᡀ.ࢶ; [V6]; xn--z7e98100evc01b.xn--czb; ; ; # ᡀ.ࢶ
-â€ï½¡ñ…›; â€.ñ…›; [C2, P1, V6]; xn--1ug.xn--6x4u; ; .xn--6x4u; [P1, V6, A4_2] # .
-â€ã€‚ñ…›; â€.ñ…›; [C2, P1, V6]; xn--1ug.xn--6x4u; ; .xn--6x4u; [P1, V6, A4_2] # .
+񕨚󠄌󑽀ᡀ.\u08B6; 񕨚󑽀ᡀ.\u08B6; [V6]; xn--z7e98100evc01b.xn--czb; ; ; # ᡀ.ࢶ
+xn--z7e98100evc01b.xn--czb; 񕨚󑽀ᡀ.\u08B6; [V6]; xn--z7e98100evc01b.xn--czb; ; ; # ᡀ.ࢶ
+\u200D。ñ…›; \u200D.ñ…›; [C2, V6]; xn--1ug.xn--6x4u; ; .xn--6x4u; [V6, A4_2] # .
+\u200D。ñ…›; \u200D.ñ…›; [C2, V6]; xn--1ug.xn--6x4u; ; .xn--6x4u; [V6, A4_2] # .
.xn--6x4u; .ñ…›; [V6, X4_2]; .xn--6x4u; [V6, A4_2]; ; # .
-xn--1ug.xn--6x4u; â€.ñ…›; [C2, V6]; xn--1ug.xn--6x4u; ; ; # .
-ࡋ皥.-; ࡋ皥.-; [B1, B2, B3, V3]; xn--9vb4167c.-; ; ; # ࡋ皥.-
-ࡋ皥.-; ; [B1, B2, B3, V3]; xn--9vb4167c.-; ; ; # ࡋ皥.-
-xn--9vb4167c.-; ࡋ皥.-; [B1, B2, B3, V3]; xn--9vb4167c.-; ; ; # ࡋ皥.-
-ð£¸Ì•ð®‡ï¼Žâ’ˆê¡¦; ð£¸Ì•ð®‡.⒈ꡦ; [B1, P1, V6]; xn--5sa9915kgvb.xn--tshw539b; ; ; # Ì•ð®‡.⒈ꡦ
-ð£¸Ì•ð®‡.1.ꡦ; ; [B1, P1, V6]; xn--5sa9915kgvb.1.xn--cd9a; ; ; # Ì•ð®‡.1.ꡦ
-xn--5sa9915kgvb.1.xn--cd9a; ð£¸Ì•ð®‡.1.ꡦ; [B1, V6]; xn--5sa9915kgvb.1.xn--cd9a; ; ; # Ì•ð®‡.1.ꡦ
-xn--5sa9915kgvb.xn--tshw539b; ð£¸Ì•ð®‡.⒈ꡦ; [B1, V6]; xn--5sa9915kgvb.xn--tshw539b; ; ; # Ì•ð®‡.⒈ꡦ
-Ⴛ‌֢â€ã€‚ï¾ Äð¹¦; Ⴛ‌֢â€.ï¾ Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, P1, V6] # á‚»Ö¢.Äð¹¦
-Ⴛ‌֢â€ã€‚ï¾ aÌ„ð¹¦; Ⴛ‌֢â€.ï¾ Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, P1, V6] # á‚»Ö¢.Äð¹¦
-Ⴛ‌֢â€ã€‚á… Äð¹¦; Ⴛ‌֢â€.á… Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, P1, V6] # á‚»Ö¢.Äð¹¦
-Ⴛ‌֢â€ã€‚á… aÌ„ð¹¦; Ⴛ‌֢â€.á… Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, P1, V6] # á‚»Ö¢.Äð¹¦
-ⴛ‌֢â€ã€‚á… aÌ„ð¹¦; ⴛ‌֢â€.á… Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb736kea974k.xn--yda594fdn5q; ; xn--tcb323r.xn--yda594fdn5q; [B5, B6, P1, V6] # â´›Ö¢.Äð¹¦
-ⴛ‌֢â€ã€‚á… Äð¹¦; ⴛ‌֢â€.á… Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb736kea974k.xn--yda594fdn5q; ; xn--tcb323r.xn--yda594fdn5q; [B5, B6, P1, V6] # â´›Ö¢.Äð¹¦
-Ⴛ‌֢â€ã€‚ᅠĀð¹¦; Ⴛ‌֢â€.á… Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, P1, V6] # á‚»Ö¢.Äð¹¦
-Ⴛ‌֢â€ã€‚á… AÌ„ð¹¦; Ⴛ‌֢â€.á… Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, P1, V6] # á‚»Ö¢.Äð¹¦
-xn--tcb597c.xn--yda594fdn5q; á‚»Ö¢.á… Äð¹¦; [B5, B6, V6]; xn--tcb597c.xn--yda594fdn5q; ; ; # á‚»Ö¢.Äð¹¦
-xn--tcb597cdmmfa.xn--yda594fdn5q; Ⴛ‌֢â€.á… Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; ; # á‚»Ö¢.Äð¹¦
-xn--tcb323r.xn--yda594fdn5q; â´›Ö¢.á… Äð¹¦; [B5, B6, V6]; xn--tcb323r.xn--yda594fdn5q; ; ; # â´›Ö¢.Äð¹¦
-xn--tcb736kea974k.xn--yda594fdn5q; ⴛ‌֢â€.á… Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda594fdn5q; ; ; # â´›Ö¢.Äð¹¦
-ⴛ‌֢â€ã€‚ï¾ aÌ„ð¹¦; ⴛ‌֢â€.ï¾ Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb736kea974k.xn--yda9741khjj; ; xn--tcb323r.xn--yda9741khjj; [B5, B6, P1, V6] # â´›Ö¢.Äð¹¦
-ⴛ‌֢â€ã€‚ï¾ Äð¹¦; ⴛ‌֢â€.ï¾ Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb736kea974k.xn--yda9741khjj; ; xn--tcb323r.xn--yda9741khjj; [B5, B6, P1, V6] # â´›Ö¢.Äð¹¦
-Ⴛ‌֢â€ã€‚ᅠĀð¹¦; Ⴛ‌֢â€.ï¾ Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, P1, V6] # á‚»Ö¢.Äð¹¦
-Ⴛ‌֢â€ã€‚ï¾ AÌ„ð¹¦; Ⴛ‌֢â€.ï¾ Äð¹¦; [B5, B6, C1, C2, P1, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, P1, V6] # á‚»Ö¢.Äð¹¦
-xn--tcb597c.xn--yda9741khjj; á‚»Ö¢.ï¾ Äð¹¦; [B5, B6, V6]; xn--tcb597c.xn--yda9741khjj; ; ; # á‚»Ö¢.Äð¹¦
-xn--tcb597cdmmfa.xn--yda9741khjj; Ⴛ‌֢â€.ï¾ Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; ; # á‚»Ö¢.Äð¹¦
-xn--tcb323r.xn--yda9741khjj; â´›Ö¢.ï¾ Äð¹¦; [B5, B6, V6]; xn--tcb323r.xn--yda9741khjj; ; ; # â´›Ö¢.Äð¹¦
-xn--tcb736kea974k.xn--yda9741khjj; ⴛ‌֢â€.ï¾ Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda9741khjj; ; ; # â´›Ö¢.Äð¹¦
-‌。曳⾑ð‹°â‰¯; ‌.曳襾ð‹°â‰¯; [C1, P1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [P1, V6] # .曳襾ð‹°â‰¯
-‌。曳⾑ð‹°≯; ‌.曳襾ð‹°â‰¯; [C1, P1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [P1, V6] # .曳襾ð‹°â‰¯
-‌。曳襾ð‹°â‰¯; ‌.曳襾ð‹°â‰¯; [C1, P1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [P1, V6] # .曳襾ð‹°â‰¯
-‌。曳襾ð‹°≯; ‌.曳襾ð‹°â‰¯; [C1, P1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [P1, V6] # .曳襾ð‹°â‰¯
-xn--vn7c.xn--hdh501y8wvfs5h; .曳襾ð‹°â‰¯; [V6]; xn--vn7c.xn--hdh501y8wvfs5h; ; ; # .曳襾ð‹°â‰¯
-xn--0ug2139f.xn--hdh501y8wvfs5h; ‌.曳襾ð‹°â‰¯; [C1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; ; # .曳襾ð‹°â‰¯
-≯⒈。ß; ≯⒈.ß; [P1, V6]; xn--hdh84f.xn--zca; ; xn--hdh84f.ss; # ≯⒈.ß
-≯⒈。ß; ≯⒈.ß; [P1, V6]; xn--hdh84f.xn--zca; ; xn--hdh84f.ss; # ≯⒈.ß
-≯1.。ß; ≯1..ß; [P1, V6, X4_2]; xn--1-ogo..xn--zca; [P1, V6, A4_2]; xn--1-ogo..ss; # ≯1..ß
-≯1.。ß; ≯1..ß; [P1, V6, X4_2]; xn--1-ogo..xn--zca; [P1, V6, A4_2]; xn--1-ogo..ss; # ≯1..ß
-≯1.。SS; ≯1..ss; [P1, V6, X4_2]; xn--1-ogo..ss; [P1, V6, A4_2]; ; # ≯1..ss
-≯1.。SS; ≯1..ss; [P1, V6, X4_2]; xn--1-ogo..ss; [P1, V6, A4_2]; ; # ≯1..ss
-≯1.。ss; ≯1..ss; [P1, V6, X4_2]; xn--1-ogo..ss; [P1, V6, A4_2]; ; # ≯1..ss
-≯1.。ss; ≯1..ss; [P1, V6, X4_2]; xn--1-ogo..ss; [P1, V6, A4_2]; ; # ≯1..ss
-≯1.。Ss; ≯1..ss; [P1, V6, X4_2]; xn--1-ogo..ss; [P1, V6, A4_2]; ; # ≯1..ss
-≯1.。Ss; ≯1..ss; [P1, V6, X4_2]; xn--1-ogo..ss; [P1, V6, A4_2]; ; # ≯1..ss
-xn--1-ogo..ss; ≯1..ss; [V6, X4_2]; xn--1-ogo..ss; [V6, A4_2]; ; # ≯1..ss
-xn--1-ogo..xn--zca; ≯1..ß; [V6, X4_2]; xn--1-ogo..xn--zca; [V6, A4_2]; ; # ≯1..ß
-≯⒈。SS; ≯⒈.ss; [P1, V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
-≯⒈。SS; ≯⒈.ss; [P1, V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
-≯⒈。ss; ≯⒈.ss; [P1, V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
-≯⒈。ss; ≯⒈.ss; [P1, V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
-≯⒈。Ss; ≯⒈.ss; [P1, V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
-≯⒈。Ss; ≯⒈.ss; [P1, V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
+xn--1ug.xn--6x4u; \u200D.ñ…›; [C2, V6]; xn--1ug.xn--6x4u; ; ; # .
+\u084B皥.-; \u084B皥.-; [B1, B2, B3, V3]; xn--9vb4167c.-; ; ; # ࡋ皥.-
+\u084B皥.-; ; [B1, B2, B3, V3]; xn--9vb4167c.-; ; ; # ࡋ皥.-
+xn--9vb4167c.-; \u084B皥.-; [B1, B2, B3, V3]; xn--9vb4167c.-; ; ; # ࡋ皥.-
+ð£¸\u0315ð®‡ï¼Žâ’ˆê¡¦; ð£¸\u0315ð®‡.⒈ꡦ; [B1, V6]; xn--5sa9915kgvb.xn--tshw539b; ; ; # Ì•ð®‡.⒈ꡦ
+ð£¸\u0315ð®‡.1.ꡦ; ; [B1, V6]; xn--5sa9915kgvb.1.xn--cd9a; ; ; # Ì•ð®‡.1.ꡦ
+xn--5sa9915kgvb.1.xn--cd9a; ð£¸\u0315ð®‡.1.ꡦ; [B1, V6]; xn--5sa9915kgvb.1.xn--cd9a; ; ; # Ì•ð®‡.1.ꡦ
+xn--5sa9915kgvb.xn--tshw539b; ð£¸\u0315ð®‡.⒈ꡦ; [B1, V6]; xn--5sa9915kgvb.xn--tshw539b; ; ; # Ì•ð®‡.⒈ꡦ
+á‚»\u200C\u05A2\u200D。\uFFA0Äð¹¦; á‚»\u200C\u05A2\u200D.\uFFA0Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, V6] # á‚»Ö¢.Äð¹¦
+á‚»\u200C\u05A2\u200D。\uFFA0a\u0304ð¹¦; á‚»\u200C\u05A2\u200D.\uFFA0Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, V6] # á‚»Ö¢.Äð¹¦
+á‚»\u200C\u05A2\u200D。\u1160Äð¹¦; á‚»\u200C\u05A2\u200D.\u1160Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, V6] # á‚»Ö¢.Äð¹¦
+á‚»\u200C\u05A2\u200D。\u1160a\u0304ð¹¦; á‚»\u200C\u05A2\u200D.\u1160Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, V6] # á‚»Ö¢.Äð¹¦
+â´›\u200C\u05A2\u200D。\u1160a\u0304ð¹¦; â´›\u200C\u05A2\u200D.\u1160Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda594fdn5q; ; xn--tcb323r.xn--yda594fdn5q; [B5, B6, V6] # â´›Ö¢.Äð¹¦
+â´›\u200C\u05A2\u200D。\u1160Äð¹¦; â´›\u200C\u05A2\u200D.\u1160Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda594fdn5q; ; xn--tcb323r.xn--yda594fdn5q; [B5, B6, V6] # â´›Ö¢.Äð¹¦
+á‚»\u200C\u05A2\u200D。\u1160Ä€ð¹¦; á‚»\u200C\u05A2\u200D.\u1160Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, V6] # á‚»Ö¢.Äð¹¦
+á‚»\u200C\u05A2\u200D。\u1160A\u0304ð¹¦; á‚»\u200C\u05A2\u200D.\u1160Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; xn--tcb597c.xn--yda594fdn5q; [B5, B6, V6] # á‚»Ö¢.Äð¹¦
+xn--tcb597c.xn--yda594fdn5q; á‚»\u05A2.\u1160Äð¹¦; [B5, B6, V6]; xn--tcb597c.xn--yda594fdn5q; ; ; # á‚»Ö¢.Äð¹¦
+xn--tcb597cdmmfa.xn--yda594fdn5q; á‚»\u200C\u05A2\u200D.\u1160Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda594fdn5q; ; ; # á‚»Ö¢.Äð¹¦
+xn--tcb323r.xn--yda594fdn5q; â´›\u05A2.\u1160Äð¹¦; [B5, B6, V6]; xn--tcb323r.xn--yda594fdn5q; ; ; # â´›Ö¢.Äð¹¦
+xn--tcb736kea974k.xn--yda594fdn5q; â´›\u200C\u05A2\u200D.\u1160Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda594fdn5q; ; ; # â´›Ö¢.Äð¹¦
+â´›\u200C\u05A2\u200D。\uFFA0a\u0304ð¹¦; â´›\u200C\u05A2\u200D.\uFFA0Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda9741khjj; ; xn--tcb323r.xn--yda9741khjj; [B5, B6, V6] # â´›Ö¢.Äð¹¦
+â´›\u200C\u05A2\u200D。\uFFA0Äð¹¦; â´›\u200C\u05A2\u200D.\uFFA0Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda9741khjj; ; xn--tcb323r.xn--yda9741khjj; [B5, B6, V6] # â´›Ö¢.Äð¹¦
+á‚»\u200C\u05A2\u200D。\uFFA0Ä€ð¹¦; á‚»\u200C\u05A2\u200D.\uFFA0Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, V6] # á‚»Ö¢.Äð¹¦
+á‚»\u200C\u05A2\u200D。\uFFA0A\u0304ð¹¦; á‚»\u200C\u05A2\u200D.\uFFA0Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; xn--tcb597c.xn--yda9741khjj; [B5, B6, V6] # á‚»Ö¢.Äð¹¦
+xn--tcb597c.xn--yda9741khjj; á‚»\u05A2.\uFFA0Äð¹¦; [B5, B6, V6]; xn--tcb597c.xn--yda9741khjj; ; ; # á‚»Ö¢.Äð¹¦
+xn--tcb597cdmmfa.xn--yda9741khjj; á‚»\u200C\u05A2\u200D.\uFFA0Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb597cdmmfa.xn--yda9741khjj; ; ; # á‚»Ö¢.Äð¹¦
+xn--tcb323r.xn--yda9741khjj; â´›\u05A2.\uFFA0Äð¹¦; [B5, B6, V6]; xn--tcb323r.xn--yda9741khjj; ; ; # â´›Ö¢.Äð¹¦
+xn--tcb736kea974k.xn--yda9741khjj; â´›\u200C\u05A2\u200D.\uFFA0Äð¹¦; [B5, B6, C1, C2, V6]; xn--tcb736kea974k.xn--yda9741khjj; ; ; # â´›Ö¢.Äð¹¦
+\uFFF9\u200C。曳⾑ð‹°â‰¯; \uFFF9\u200C.曳襾ð‹°â‰¯; [C1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [V6] # .曳襾ð‹°â‰¯
+\uFFF9\u200C。曳⾑ð‹°>\u0338; \uFFF9\u200C.曳襾ð‹°â‰¯; [C1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [V6] # .曳襾ð‹°â‰¯
+\uFFF9\u200C。曳襾ð‹°â‰¯; \uFFF9\u200C.曳襾ð‹°â‰¯; [C1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [V6] # .曳襾ð‹°â‰¯
+\uFFF9\u200C。曳襾ð‹°>\u0338; \uFFF9\u200C.曳襾ð‹°â‰¯; [C1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; xn--vn7c.xn--hdh501y8wvfs5h; [V6] # .曳襾ð‹°â‰¯
+xn--vn7c.xn--hdh501y8wvfs5h; \uFFF9.曳襾ð‹°â‰¯; [V6]; xn--vn7c.xn--hdh501y8wvfs5h; ; ; # .曳襾ð‹°â‰¯
+xn--0ug2139f.xn--hdh501y8wvfs5h; \uFFF9\u200C.曳襾ð‹°â‰¯; [C1, V6]; xn--0ug2139f.xn--hdh501y8wvfs5h; ; ; # .曳襾ð‹°â‰¯
+≯⒈。ß; ≯⒈.ß; [V6]; xn--hdh84f.xn--zca; ; xn--hdh84f.ss; # ≯⒈.ß
+>\u0338⒈。ß; ≯⒈.ß; [V6]; xn--hdh84f.xn--zca; ; xn--hdh84f.ss; # ≯⒈.ß
+≯1.。ß; ≯1..ß; [X4_2]; xn--1-ogo..xn--zca; [A4_2]; xn--1-ogo..ss; # ≯1..ß
+>\u03381.。ß; ≯1..ß; [X4_2]; xn--1-ogo..xn--zca; [A4_2]; xn--1-ogo..ss; # ≯1..ß
+>\u03381.。SS; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss
+≯1.。SS; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss
+≯1.。ss; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss
+>\u03381.。ss; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss
+>\u03381.。Ss; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss
+≯1.。Ss; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss
+xn--1-ogo..ss; ≯1..ss; [X4_2]; xn--1-ogo..ss; [A4_2]; ; # ≯1..ss
+xn--1-ogo..xn--zca; ≯1..ß; [X4_2]; xn--1-ogo..xn--zca; [A4_2]; ; # ≯1..ß
+>\u0338⒈。SS; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
+≯⒈。SS; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
+≯⒈。ss; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
+>\u0338⒈。ss; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
+>\u0338⒈。Ss; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
+≯⒈。Ss; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
xn--hdh84f.ss; ≯⒈.ss; [V6]; xn--hdh84f.ss; ; ; # ≯⒈.ss
xn--hdh84f.xn--zca; ≯⒈.ß; [V6]; xn--hdh84f.xn--zca; ; ; # ≯⒈.ß
-Ù§â€ï®–。ߚ-₆Ⴙ; Ù§â€Ú³.ßš-6Ⴙ; [B1, B2, B3, C2, P1, V6]; xn--gib6m343e.xn---6-lve002g; ; xn--gib6m.xn---6-lve002g; [B1, B2, B3, P1, V6] # Ù§Ú³.ßš-6Ⴙ
-Ù§â€Ú³ã€‚ßš-6Ⴙ; Ù§â€Ú³.ßš-6Ⴙ; [B1, B2, B3, C2, P1, V6]; xn--gib6m343e.xn---6-lve002g; ; xn--gib6m.xn---6-lve002g; [B1, B2, B3, P1, V6] # Ù§Ú³.ßš-6Ⴙ
-Ù§â€Ú³ã€‚ßš-6â´™; Ù§â€Ú³.ßš-6â´™; [B1, B2, B3, C2]; xn--gib6m343e.xn---6-lve6529a; ; xn--gib6m.xn---6-lve6529a; [B1, B2, B3] # Ù§Ú³.ßš-6â´™
-xn--gib6m.xn---6-lve6529a; Ù§Ú³.ßš-6â´™; [B1, B2, B3]; xn--gib6m.xn---6-lve6529a; ; ; # Ù§Ú³.ßš-6â´™
-xn--gib6m343e.xn---6-lve6529a; Ù§â€Ú³.ßš-6â´™; [B1, B2, B3, C2]; xn--gib6m343e.xn---6-lve6529a; ; ; # Ù§Ú³.ßš-6â´™
-xn--gib6m.xn---6-lve002g; ٧ڳ.ߚ-6Ⴙ; [B1, B2, B3, V6]; xn--gib6m.xn---6-lve002g; ; ; # ٧ڳ.ߚ-6Ⴙ
-xn--gib6m343e.xn---6-lve002g; Ù§â€Ú³.ßš-6Ⴙ; [B1, B2, B3, C2, V6]; xn--gib6m343e.xn---6-lve002g; ; ; # Ù§Ú³.ßš-6Ⴙ
-Ù§â€ï®–。ߚ-₆ⴙ; Ù§â€Ú³.ßš-6â´™; [B1, B2, B3, C2]; xn--gib6m343e.xn---6-lve6529a; ; xn--gib6m.xn---6-lve6529a; [B1, B2, B3] # Ù§Ú³.ßš-6â´™
-‌。≠; ‌.≠; [C1, P1, V6]; xn--0ug.xn--1ch; ; .xn--1ch; [P1, V6, A4_2] # .≠
-‌。≠; ‌.≠; [C1, P1, V6]; xn--0ug.xn--1ch; ; .xn--1ch; [P1, V6, A4_2] # .≠
-‌。≠; ‌.≠; [C1, P1, V6]; xn--0ug.xn--1ch; ; .xn--1ch; [P1, V6, A4_2] # .≠
-‌。≠; ‌.≠; [C1, P1, V6]; xn--0ug.xn--1ch; ; .xn--1ch; [P1, V6, A4_2] # .≠
-.xn--1ch; .≠; [V6, X4_2]; .xn--1ch; [V6, A4_2]; ; # .≠
-xn--0ug.xn--1ch; ‌.≠; [C1, V6]; xn--0ug.xn--1ch; ; ; # .≠
-ð‘–¿ð¨”.ᡟ𑖿ᭂ‌; ; [C1, V5]; xn--461dw464a.xn--v8e29ldzfo952a; ; xn--461dw464a.xn--v8e29loy65a; [V5] # ð‘–¿ð¨”.á¡Ÿð‘–¿á­‚
-xn--461dw464a.xn--v8e29loy65a; ð‘–¿ð¨”.á¡Ÿð‘–¿á­‚; [V5]; xn--461dw464a.xn--v8e29loy65a; ; ; # ð‘–¿ð¨”.á¡Ÿð‘–¿á­‚
-xn--461dw464a.xn--v8e29ldzfo952a; ð‘–¿ð¨”.ᡟ𑖿ᭂ‌; [C1, V5]; xn--461dw464a.xn--v8e29ldzfo952a; ; ; # ð‘–¿ð¨”.á¡Ÿð‘–¿á­‚
-ò”£³â€ò‘±.𖬴Ↄ≠-; ; [C2, P1, V3, V5, V6]; xn--1ug15151gkb5a.xn----61n81bt713h; ; xn--6j00chy9a.xn----61n81bt713h; [P1, V3, V5, V6] # .𖬴Ↄ≠-
-ò”£³â€ò‘±.𖬴Ↄ≠-; ò”£³â€ò‘±.𖬴Ↄ≠-; [C2, P1, V3, V5, V6]; xn--1ug15151gkb5a.xn----61n81bt713h; ; xn--6j00chy9a.xn----61n81bt713h; [P1, V3, V5, V6] # .𖬴Ↄ≠-
-ò”£³â€ò‘±.𖬴ↄ≠-; ò”£³â€ò‘±.𖬴ↄ≠-; [C2, P1, V3, V5, V6]; xn--1ug15151gkb5a.xn----81n51bt713h; ; xn--6j00chy9a.xn----81n51bt713h; [P1, V3, V5, V6] # .𖬴ↄ≠-
-ò”£³â€ò‘±.𖬴ↄ≠-; ; [C2, P1, V3, V5, V6]; xn--1ug15151gkb5a.xn----81n51bt713h; ; xn--6j00chy9a.xn----81n51bt713h; [P1, V3, V5, V6] # .𖬴ↄ≠-
+\u0667\u200D\uFB96。\u07DA-₆Ⴙ; \u0667\u200D\u06B3.\u07DA-6Ⴙ; [B1, B2, B3, C2, V6]; xn--gib6m343e.xn---6-lve002g; ; xn--gib6m.xn---6-lve002g; [B1, B2, B3, V6] # ٧ڳ.ߚ-6Ⴙ
+\u0667\u200D\u06B3。\u07DA-6Ⴙ; \u0667\u200D\u06B3.\u07DA-6Ⴙ; [B1, B2, B3, C2, V6]; xn--gib6m343e.xn---6-lve002g; ; xn--gib6m.xn---6-lve002g; [B1, B2, B3, V6] # ٧ڳ.ߚ-6Ⴙ
+\u0667\u200D\u06B3。\u07DA-6ⴙ; \u0667\u200D\u06B3.\u07DA-6ⴙ; [B1, B2, B3, C2]; xn--gib6m343e.xn---6-lve6529a; ; xn--gib6m.xn---6-lve6529a; [B1, B2, B3] # ٧ڳ.ߚ-6ⴙ
+xn--gib6m.xn---6-lve6529a; \u0667\u06B3.\u07DA-6â´™; [B1, B2, B3]; xn--gib6m.xn---6-lve6529a; ; ; # Ù§Ú³.ßš-6â´™
+xn--gib6m343e.xn---6-lve6529a; \u0667\u200D\u06B3.\u07DA-6â´™; [B1, B2, B3, C2]; xn--gib6m343e.xn---6-lve6529a; ; ; # Ù§Ú³.ßš-6â´™
+xn--gib6m.xn---6-lve002g; \u0667\u06B3.\u07DA-6Ⴙ; [B1, B2, B3, V6]; xn--gib6m.xn---6-lve002g; ; ; # ٧ڳ.ߚ-6Ⴙ
+xn--gib6m343e.xn---6-lve002g; \u0667\u200D\u06B3.\u07DA-6Ⴙ; [B1, B2, B3, C2, V6]; xn--gib6m343e.xn---6-lve002g; ; ; # ٧ڳ.ߚ-6Ⴙ
+\u0667\u200D\uFB96。\u07DA-₆ⴙ; \u0667\u200D\u06B3.\u07DA-6ⴙ; [B1, B2, B3, C2]; xn--gib6m343e.xn---6-lve6529a; ; xn--gib6m.xn---6-lve6529a; [B1, B2, B3] # ٧ڳ.ߚ-6ⴙ
+\u200C。≠; \u200C.≠; [C1]; xn--0ug.xn--1ch; ; .xn--1ch; [A4_2] # .≠
+\u200C。=\u0338; \u200C.≠; [C1]; xn--0ug.xn--1ch; ; .xn--1ch; [A4_2] # .≠
+\u200C。≠; \u200C.≠; [C1]; xn--0ug.xn--1ch; ; .xn--1ch; [A4_2] # .≠
+\u200C。=\u0338; \u200C.≠; [C1]; xn--0ug.xn--1ch; ; .xn--1ch; [A4_2] # .≠
+.xn--1ch; .≠; [X4_2]; .xn--1ch; [A4_2]; ; # .≠
+xn--0ug.xn--1ch; \u200C.≠; [C1]; xn--0ug.xn--1ch; ; ; # .≠
+ð‘–¿ð¨”.á¡Ÿð‘–¿\u1B42\u200C; ; [C1, V5]; xn--461dw464a.xn--v8e29ldzfo952a; ; xn--461dw464a.xn--v8e29loy65a; [V5] # ð‘–¿ð¨”.á¡Ÿð‘–¿á­‚
+xn--461dw464a.xn--v8e29loy65a; ð‘–¿ð¨”.á¡Ÿð‘–¿\u1B42; [V5]; xn--461dw464a.xn--v8e29loy65a; ; ; # ð‘–¿ð¨”.á¡Ÿð‘–¿á­‚
+xn--461dw464a.xn--v8e29ldzfo952a; ð‘–¿ð¨”.á¡Ÿð‘–¿\u1B42\u200C; [C1, V5]; xn--461dw464a.xn--v8e29ldzfo952a; ; ; # ð‘–¿ð¨”.á¡Ÿð‘–¿á­‚
+ò”£³\u200Dò‘±.𖬴Ↄ≠-; ; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----61n81bt713h; ; xn--6j00chy9a.xn----61n81bt713h; [V3, V5, V6] # .𖬴Ↄ≠-
+ò”£³\u200Dò‘±.𖬴Ↄ=\u0338-; ò”£³\u200Dò‘±.𖬴Ↄ≠-; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----61n81bt713h; ; xn--6j00chy9a.xn----61n81bt713h; [V3, V5, V6] # .𖬴Ↄ≠-
+ò”£³\u200Dò‘±.𖬴ↄ=\u0338-; ò”£³\u200Dò‘±.𖬴ↄ≠-; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----81n51bt713h; ; xn--6j00chy9a.xn----81n51bt713h; [V3, V5, V6] # .𖬴ↄ≠-
+ò”£³\u200Dò‘±.𖬴ↄ≠-; ; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----81n51bt713h; ; xn--6j00chy9a.xn----81n51bt713h; [V3, V5, V6] # .𖬴ↄ≠-
xn--6j00chy9a.xn----81n51bt713h; ò”£³ò‘±.𖬴ↄ≠-; [V3, V5, V6]; xn--6j00chy9a.xn----81n51bt713h; ; ; # .𖬴ↄ≠-
-xn--1ug15151gkb5a.xn----81n51bt713h; ò”£³â€ò‘±.𖬴ↄ≠-; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----81n51bt713h; ; ; # .𖬴ↄ≠-
+xn--1ug15151gkb5a.xn----81n51bt713h; ò”£³\u200Dò‘±.𖬴ↄ≠-; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----81n51bt713h; ; ; # .𖬴ↄ≠-
xn--6j00chy9a.xn----61n81bt713h; ò”£³ò‘±.𖬴Ↄ≠-; [V3, V5, V6]; xn--6j00chy9a.xn----61n81bt713h; ; ; # .𖬴Ↄ≠-
-xn--1ug15151gkb5a.xn----61n81bt713h; ò”£³â€ò‘±.𖬴Ↄ≠-; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----61n81bt713h; ; ; # .𖬴Ↄ≠-
-ߢςâ€ðŸ³ã€‚蔑ò›–¢; ߢςâ€7.蔑ò›–¢; [B2, C2, P1, V6]; xn--7-xmb182aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, P1, V6] # ߢς7.蔑
-ߢςâ€7。蔑ò›–¢; ߢςâ€7.蔑ò›–¢; [B2, C2, P1, V6]; xn--7-xmb182aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, P1, V6] # ߢς7.蔑
-ߢΣâ€7。蔑ò›–¢; ߢσâ€7.蔑ò›–¢; [B2, C2, P1, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, P1, V6] # ߢσ7.蔑
-ߢσâ€7。蔑ò›–¢; ߢσâ€7.蔑ò›–¢; [B2, C2, P1, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, P1, V6] # ߢσ7.蔑
-xn--7-zmb872a.xn--wy1ao4929b; ߢσ7.蔑򛖢; [B2, V6]; xn--7-zmb872a.xn--wy1ao4929b; ; ; # ߢσ7.蔑
-xn--7-zmb872aez5a.xn--wy1ao4929b; ߢσâ€7.蔑ò›–¢; [B2, C2, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; ; # ߢσ7.蔑
-xn--7-xmb182aez5a.xn--wy1ao4929b; ߢςâ€7.蔑ò›–¢; [B2, C2, V6]; xn--7-xmb182aez5a.xn--wy1ao4929b; ; ; # ߢς7.蔑
-ߢΣâ€ðŸ³ã€‚蔑ò›–¢; ߢσâ€7.蔑ò›–¢; [B2, C2, P1, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, P1, V6] # ߢσ7.蔑
-ߢσâ€ðŸ³ã€‚蔑ò›–¢; ߢσâ€7.蔑ò›–¢; [B2, C2, P1, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, P1, V6] # ߢσ7.蔑
-ð¹°.Ø€; ; [B1, P1, V6]; xn--oo0d.xn--ifb; ; ; # ð¹°.
-xn--oo0d.xn--ifb; ð¹°.Ø€; [B1, V6]; xn--oo0d.xn--ifb; ; ; # ð¹°.
--ࢨ.𱠖; ; [B1, P1, V3, V6]; xn----mod.xn--5o9n; ; ; # -ࢨ.
-xn----mod.xn--5o9n; -ࢨ.𱠖; [B1, V3, V6]; xn----mod.xn--5o9n; ; ; # -ࢨ.
-≯𞱸󠇀。誆⒈; ≯𞱸.誆⒈; [B1, P1, V6]; xn--hdh7151p.xn--tsh1248a; ; ; # ≯𞱸.誆⒈
-≯𞱸󠇀。誆⒈; ≯𞱸.誆⒈; [B1, P1, V6]; xn--hdh7151p.xn--tsh1248a; ; ; # ≯𞱸.誆⒈
-≯𞱸󠇀。誆1.; ≯𞱸.誆1.; [B1, P1, V6]; xn--hdh7151p.xn--1-dy1d.; ; ; # ≯𞱸.誆1.
-≯𞱸󠇀。誆1.; ≯𞱸.誆1.; [B1, P1, V6]; xn--hdh7151p.xn--1-dy1d.; ; ; # ≯𞱸.誆1.
-xn--hdh7151p.xn--1-dy1d.; ≯𞱸.誆1.; [B1, V6]; xn--hdh7151p.xn--1-dy1d.; ; ; # ≯𞱸.誆1.
+xn--1ug15151gkb5a.xn----61n81bt713h; ò”£³\u200Dò‘±.𖬴Ↄ≠-; [C2, V3, V5, V6]; xn--1ug15151gkb5a.xn----61n81bt713h; ; ; # .𖬴Ↄ≠-
+\u07E2Ï‚\u200DðŸ³ã€‚蔑ò›–¢; \u07E2Ï‚\u200D7.蔑ò›–¢; [B2, C2, V6]; xn--7-xmb182aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢς7.蔑
+\u07E2ς\u200D7。蔑򛖢; \u07E2ς\u200D7.蔑򛖢; [B2, C2, V6]; xn--7-xmb182aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢς7.蔑
+\u07E2Σ\u200D7。蔑򛖢; \u07E2σ\u200D7.蔑򛖢; [B2, C2, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢσ7.蔑
+\u07E2σ\u200D7。蔑򛖢; \u07E2σ\u200D7.蔑򛖢; [B2, C2, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢσ7.蔑
+xn--7-zmb872a.xn--wy1ao4929b; \u07E2σ7.蔑򛖢; [B2, V6]; xn--7-zmb872a.xn--wy1ao4929b; ; ; # ߢσ7.蔑
+xn--7-zmb872aez5a.xn--wy1ao4929b; \u07E2σ\u200D7.蔑򛖢; [B2, C2, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; ; # ߢσ7.蔑
+xn--7-xmb182aez5a.xn--wy1ao4929b; \u07E2ς\u200D7.蔑򛖢; [B2, C2, V6]; xn--7-xmb182aez5a.xn--wy1ao4929b; ; ; # ߢς7.蔑
+\u07E2Σ\u200DðŸ³ã€‚蔑ò›–¢; \u07E2σ\u200D7.蔑ò›–¢; [B2, C2, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢσ7.蔑
+\u07E2σ\u200DðŸ³ã€‚蔑ò›–¢; \u07E2σ\u200D7.蔑ò›–¢; [B2, C2, V6]; xn--7-zmb872aez5a.xn--wy1ao4929b; ; xn--7-zmb872a.xn--wy1ao4929b; [B2, V6] # ߢσ7.蔑
+ð¹°.\u0600; ; [B1, V6]; xn--oo0d.xn--ifb; ; ; # ð¹°.
+xn--oo0d.xn--ifb; ð¹°.\u0600; [B1, V6]; xn--oo0d.xn--ifb; ; ; # ð¹°.
+-\u08A8.𱠖; ; [B1, V3]; xn----mod.xn--5o9n; ; ; # -ࢨ.𱠖
+xn----mod.xn--5o9n; -\u08A8.𱠖; [B1, V3]; xn----mod.xn--5o9n; ; ; # -ࢨ.𱠖
+≯𞱸󠇀。誆⒈; ≯𞱸.誆⒈; [B1, V6]; xn--hdh7151p.xn--tsh1248a; ; ; # ≯𞱸.誆⒈
+>\u0338𞱸󠇀。誆⒈; ≯𞱸.誆⒈; [B1, V6]; xn--hdh7151p.xn--tsh1248a; ; ; # ≯𞱸.誆⒈
+≯𞱸󠇀。誆1.; ≯𞱸.誆1.; [B1]; xn--hdh7151p.xn--1-dy1d.; ; ; # ≯𞱸.誆1.
+>\u0338𞱸󠇀。誆1.; ≯𞱸.誆1.; [B1]; xn--hdh7151p.xn--1-dy1d.; ; ; # ≯𞱸.誆1.
+xn--hdh7151p.xn--1-dy1d.; ≯𞱸.誆1.; [B1]; xn--hdh7151p.xn--1-dy1d.; ; ; # ≯𞱸.誆1.
xn--hdh7151p.xn--tsh1248a; ≯𞱸.誆⒈; [B1, V6]; xn--hdh7151p.xn--tsh1248a; ; ; # ≯𞱸.誆⒈
-ؖ𞥙äŠÙ.︒م↺ڜ; ؖ𞥙äŠÙ.︒م↺ڜ; [B1, P1, V5, V6]; xn--4fb0j490qjg4x.xn--hhb8o948euo5r; ; ; # ؖ𞥙äŠÙ.︒م↺ڜ
-ؖ𞥙äŠÙ.。م↺ڜ; ؖ𞥙äŠÙ..م↺ڜ; [B1, V5, X4_2]; xn--4fb0j490qjg4x..xn--hhb8o948e; [B1, V5, A4_2]; ; # ؖ𞥙äŠÙ..م↺ڜ
-xn--4fb0j490qjg4x..xn--hhb8o948e; ؖ𞥙äŠÙ..م↺ڜ; [B1, V5, X4_2]; xn--4fb0j490qjg4x..xn--hhb8o948e; [B1, V5, A4_2]; ; # ؖ𞥙äŠÙ..م↺ڜ
-xn--4fb0j490qjg4x.xn--hhb8o948euo5r; ؖ𞥙äŠÙ.︒م↺ڜ; [B1, V5, V6]; xn--4fb0j490qjg4x.xn--hhb8o948euo5r; ; ; # ؖ𞥙äŠÙ.︒م↺ڜ
-퀬-?񶳒.‌ૅ󩸤۴; ; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; xn---?-6g4k75207c.xn--hmb76q74166b; [P1, V5, V6] # 퀬-?.ૅ۴
-á„ᅰᆻ-?ñ¶³’.‌ૅ󩸤۴; 퀬-?ñ¶³’.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; xn---?-6g4k75207c.xn--hmb76q74166b; [P1, V5, V6] # 퀬-?.à«…Û´
-xn---?-6g4k75207c.xn--hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
-xn---?-6g4k75207c.xn--hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
-퀬-?񶳒.xn--hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
-á„ᅰᆻ-?ñ¶³’.xn--hmb76q74166b; 퀬-?ñ¶³’.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.à«…Û´
-á„ᅰᆻ-?ñ¶³’.XN--HMB76Q74166B; 퀬-?ñ¶³’.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.à«…Û´
-퀬-?񶳒.XN--HMB76Q74166B; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
-퀬-?񶳒.Xn--Hmb76q74166b; 퀬-?񶳒.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
-á„ᅰᆻ-?ñ¶³’.Xn--Hmb76q74166b; 퀬-?ñ¶³’.ૅ󩸤۴; [P1, V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.à«…Û´
-퀬-?񶳒.xn--hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
-á„ᅰᆻ-?ñ¶³’.xn--hmb76q48y18505a; 퀬-?ñ¶³’.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.à«…Û´
-á„ᅰᆻ-?ñ¶³’.XN--HMB76Q48Y18505A; 퀬-?ñ¶³’.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.à«…Û´
-퀬-?񶳒.XN--HMB76Q48Y18505A; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
-퀬-?񶳒.Xn--Hmb76q48y18505a; 퀬-?񶳒.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
-á„ᅰᆻ-?ñ¶³’.Xn--Hmb76q48y18505a; 퀬-?ñ¶³’.‌ૅ󩸤۴; [C1, P1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.à«…Û´
-Ⴌ.ð¹¾ï¸’ð‘¿ðž¾„; ; [B1, P1, V6]; xn--knd.xn--y86c030a9ob6374b; ; ; # Ⴌ.ð¹¾ï¸’ð‘¿
-Ⴌ.ð¹¾ã€‚ð‘¿ðž¾„; Ⴌ.ð¹¾.ð‘¿ðž¾„; [B1, P1, V5, V6]; xn--knd.xn--2o0d.xn--q30dg029a; ; ; # Ⴌ.ð¹¾.ð‘¿
-â´Œ.ð¹¾ã€‚ð‘¿ðž¾„; â´Œ.ð¹¾.ð‘¿ðž¾„; [B1, P1, V5, V6]; xn--3kj.xn--2o0d.xn--q30dg029a; ; ; # â´Œ.ð¹¾.ð‘¿
+\u0616𞥙äŠ\u0650.︒\u0645↺\u069C; \u0616𞥙äŠ\u0650.︒\u0645↺\u069C; [B1, V5, V6]; xn--4fb0j490qjg4x.xn--hhb8o948euo5r; ; ; # ؖ𞥙äŠÙ.︒م↺ڜ
+\u0616𞥙äŠ\u0650.。\u0645↺\u069C; \u0616𞥙äŠ\u0650..\u0645↺\u069C; [B1, V5, X4_2]; xn--4fb0j490qjg4x..xn--hhb8o948e; [B1, V5, A4_2]; ; # ؖ𞥙äŠÙ..م↺ڜ
+xn--4fb0j490qjg4x..xn--hhb8o948e; \u0616𞥙äŠ\u0650..\u0645↺\u069C; [B1, V5, X4_2]; xn--4fb0j490qjg4x..xn--hhb8o948e; [B1, V5, A4_2]; ; # ؖ𞥙äŠÙ..م↺ڜ
+xn--4fb0j490qjg4x.xn--hhb8o948euo5r; \u0616𞥙äŠ\u0650.︒\u0645↺\u069C; [B1, V5, V6]; xn--4fb0j490qjg4x.xn--hhb8o948euo5r; ; ; # ؖ𞥙äŠÙ.︒م↺ڜ
+퀬-?񶳒.\u200C\u0AC5󩸤۴; ; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; xn---?-6g4k75207c.xn--hmb76q74166b; [V5, V6] # 퀬-?.ૅ۴
+á„ᅰᆻ-?ñ¶³’.\u200C\u0AC5󩸤۴; 퀬-?ñ¶³’.\u200C\u0AC5󩸤۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; xn---?-6g4k75207c.xn--hmb76q74166b; [V5, V6] # 퀬-?.à«…Û´
+xn---?-6g4k75207c.xn--hmb76q74166b; 퀬-?񶳒.\u0AC5󩸤۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
+xn---?-6g4k75207c.xn--hmb76q48y18505a; 퀬-?񶳒.\u200C\u0AC5󩸤۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.xn--hmb76q74166b; 퀬-?񶳒.\u0AC5󩸤۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
+á„ᅰᆻ-?ñ¶³’.xn--hmb76q74166b; 퀬-?ñ¶³’.\u0AC5󩸤۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.à«…Û´
+á„ᅰᆻ-?ñ¶³’.XN--HMB76Q74166B; 퀬-?ñ¶³’.\u0AC5󩸤۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.à«…Û´
+퀬-?񶳒.XN--HMB76Q74166B; 퀬-?񶳒.\u0AC5󩸤۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.Xn--Hmb76q74166b; 퀬-?񶳒.\u0AC5󩸤۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.ૅ۴
+á„ᅰᆻ-?ñ¶³’.Xn--Hmb76q74166b; 퀬-?ñ¶³’.\u0AC5󩸤۴; [V5, V6]; xn---?-6g4k75207c.xn--hmb76q74166b; ; ; # 퀬-?.à«…Û´
+퀬-?񶳒.xn--hmb76q48y18505a; 퀬-?񶳒.\u200C\u0AC5󩸤۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
+á„ᅰᆻ-?ñ¶³’.xn--hmb76q48y18505a; 퀬-?ñ¶³’.\u200C\u0AC5󩸤۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.à«…Û´
+á„ᅰᆻ-?ñ¶³’.XN--HMB76Q48Y18505A; 퀬-?ñ¶³’.\u200C\u0AC5󩸤۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.à«…Û´
+퀬-?񶳒.XN--HMB76Q48Y18505A; 퀬-?񶳒.\u200C\u0AC5󩸤۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
+퀬-?񶳒.Xn--Hmb76q48y18505a; 퀬-?񶳒.\u200C\u0AC5󩸤۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.ૅ۴
+á„ᅰᆻ-?ñ¶³’.Xn--Hmb76q48y18505a; 퀬-?ñ¶³’.\u200C\u0AC5󩸤۴; [C1, V6]; xn---?-6g4k75207c.xn--hmb76q48y18505a; ; ; # 퀬-?.à«…Û´
+Ⴌ.ð¹¾ï¸’ð‘¿ðž¾„; ; [B1, V6]; xn--knd.xn--y86c030a9ob6374b; ; ; # Ⴌ.ð¹¾ï¸’ð‘¿
+Ⴌ.ð¹¾ã€‚ð‘¿ðž¾„; Ⴌ.ð¹¾.ð‘¿ðž¾„; [B1, V5, V6]; xn--knd.xn--2o0d.xn--q30dg029a; ; ; # Ⴌ.ð¹¾.ð‘¿
+â´Œ.ð¹¾ã€‚ð‘¿ðž¾„; â´Œ.ð¹¾.ð‘¿ðž¾„; [B1, V5, V6]; xn--3kj.xn--2o0d.xn--q30dg029a; ; ; # â´Œ.ð¹¾.ð‘¿
xn--3kj.xn--2o0d.xn--q30dg029a; â´Œ.ð¹¾.ð‘¿ðž¾„; [B1, V5, V6]; xn--3kj.xn--2o0d.xn--q30dg029a; ; ; # â´Œ.ð¹¾.ð‘¿
xn--knd.xn--2o0d.xn--q30dg029a; Ⴌ.ð¹¾.ð‘¿ðž¾„; [B1, V5, V6]; xn--knd.xn--2o0d.xn--q30dg029a; ; ; # Ⴌ.ð¹¾.ð‘¿
-â´Œ.ð¹¾ï¸’ð‘¿ðž¾„; ; [B1, P1, V6]; xn--3kj.xn--y86c030a9ob6374b; ; ; # â´Œ.ð¹¾ï¸’ð‘¿
+â´Œ.ð¹¾ï¸’ð‘¿ðž¾„; ; [B1, V6]; xn--3kj.xn--y86c030a9ob6374b; ; ; # â´Œ.ð¹¾ï¸’ð‘¿
xn--3kj.xn--y86c030a9ob6374b; â´Œ.ð¹¾ï¸’ð‘¿ðž¾„; [B1, V6]; xn--3kj.xn--y86c030a9ob6374b; ; ; # â´Œ.ð¹¾ï¸’ð‘¿
xn--knd.xn--y86c030a9ob6374b; Ⴌ.ð¹¾ï¸’ð‘¿ðž¾„; [B1, V6]; xn--knd.xn--y86c030a9ob6374b; ; ; # Ⴌ.ð¹¾ï¸’ð‘¿
-ñ§ž¿â•ã€‚ðž©•ó ¾; ñ§ž¿â•.ðž©•ó ¾; [B3, B6, P1, V6]; xn--iyh90030d.xn--1m6hs0260c; ; ; # â•.
+ñ§ž¿â•ã€‚ðž©•ó ¾; ñ§ž¿â•.ðž©•ó ¾; [B3, B6, V6]; xn--iyh90030d.xn--1m6hs0260c; ; ; # â•.
xn--iyh90030d.xn--1m6hs0260c; ñ§ž¿â•.ðž©•ó ¾; [B3, B6, V6]; xn--iyh90030d.xn--1m6hs0260c; ; ; # â•.
-â€â”®ó ‡ï¼Žà°€à±áœ´â€; â€â”®.à°€à±áœ´â€; [C2, V5]; xn--1ug04r.xn--eoc8m432a40i; ; xn--kxh.xn--eoc8m432a; [V5] # â”®.à°€à±áœ´
-â€â”®ó ‡.à°€à±áœ´â€; â€â”®.à°€à±áœ´â€; [C2, V5]; xn--1ug04r.xn--eoc8m432a40i; ; xn--kxh.xn--eoc8m432a; [V5] # â”®.à°€à±áœ´
-xn--kxh.xn--eoc8m432a; â”®.à°€à±áœ´; [V5]; xn--kxh.xn--eoc8m432a; ; ; # â”®.à°€à±áœ´
-xn--1ug04r.xn--eoc8m432a40i; â€â”®.à°€à±áœ´â€; [C2, V5]; xn--1ug04r.xn--eoc8m432a40i; ; ; # â”®.à°€à±áœ´
-򹚪。🄂; 򹚪.🄂; [P1, V6]; xn--n433d.xn--v07h; ; ; # .🄂
-򹚪。1,; 򹚪.1,; [P1, V6]; xn--n433d.1,; ; ; # .1,
-xn--n433d.1,; 򹚪.1,; [P1, V6]; xn--n433d.1,; ; ; # .1,
+\u200Dâ”®ó ‡ï¼Ž\u0C00\u0C4D\u1734\u200D; \u200Dâ”®.\u0C00\u0C4D\u1734\u200D; [C2, V5]; xn--1ug04r.xn--eoc8m432a40i; ; xn--kxh.xn--eoc8m432a; [V5] # â”®.à°€à±áœ´
+\u200Dâ”®ó ‡.\u0C00\u0C4D\u1734\u200D; \u200Dâ”®.\u0C00\u0C4D\u1734\u200D; [C2, V5]; xn--1ug04r.xn--eoc8m432a40i; ; xn--kxh.xn--eoc8m432a; [V5] # â”®.à°€à±áœ´
+xn--kxh.xn--eoc8m432a; â”®.\u0C00\u0C4D\u1734; [V5]; xn--kxh.xn--eoc8m432a; ; ; # â”®.à°€à±áœ´
+xn--1ug04r.xn--eoc8m432a40i; \u200Dâ”®.\u0C00\u0C4D\u1734\u200D; [C2, V5]; xn--1ug04r.xn--eoc8m432a40i; ; ; # â”®.à°€à±áœ´
+򹚪。🄂; 򹚪.🄂; [V6]; xn--n433d.xn--v07h; ; ; # .🄂
+򹚪。1,; 򹚪.1,; [V6]; xn--n433d.1,; ; ; # .1,
+xn--n433d.1,; 򹚪.1,; [V6]; xn--n433d.1,; ; ; # .1,
xn--n433d.xn--v07h; 򹚪.🄂; [V6]; xn--n433d.xn--v07h; ; ; # .🄂
ð‘¨åˆ.🛦; ; [V5]; xn--rbry728b.xn--y88h; ; ; # ð‘¨åˆ.🛦
xn--rbry728b.xn--y88h; ð‘¨åˆ.🛦; [V5]; xn--rbry728b.xn--y88h; ; ; # ð‘¨åˆ.🛦
-ó Œ3。ᯱðŸ’; ó Œ3.ᯱ4; [P1, V5, V6]; xn--3-ib31m.xn--4-pql; ; ; # 3.ᯱ4
-ó Œ3。ᯱ4; ó Œ3.ᯱ4; [P1, V5, V6]; xn--3-ib31m.xn--4-pql; ; ; # 3.ᯱ4
-xn--3-ib31m.xn--4-pql; ó Œ3.ᯱ4; [V5, V6]; xn--3-ib31m.xn--4-pql; ; ; # 3.ᯱ4
-ڇ6Ⴔ辘.ﴢڇ‌; ڇ6Ⴔ辘.صيڇ‌; [B2, B3, C1, P1, V6]; xn--6-gsc039eqq6k.xn--0gb6bxkx18g; ; xn--6-gsc039eqq6k.xn--0gb6bxk; [B2, B3, P1, V6] # ڇ6Ⴔ辘.صيڇ
-ڇ6Ⴔ辘.صيڇ‌; ; [B2, B3, C1, P1, V6]; xn--6-gsc039eqq6k.xn--0gb6bxkx18g; ; xn--6-gsc039eqq6k.xn--0gb6bxk; [B2, B3, P1, V6] # ڇ6Ⴔ辘.صيڇ
-ڇ6ⴔ辘.صيڇ‌; ; [B2, B3, C1]; xn--6-gsc2270akm6f.xn--0gb6bxkx18g; ; xn--6-gsc2270akm6f.xn--0gb6bxk; [B2, B3] # ڇ6ⴔ辘.صيڇ
-xn--6-gsc2270akm6f.xn--0gb6bxk; ڇ6ⴔ辘.صيڇ; [B2, B3]; xn--6-gsc2270akm6f.xn--0gb6bxk; ; ; # ڇ6ⴔ辘.صيڇ
-xn--6-gsc2270akm6f.xn--0gb6bxkx18g; ڇ6ⴔ辘.صيڇ‌; [B2, B3, C1]; xn--6-gsc2270akm6f.xn--0gb6bxkx18g; ; ; # ڇ6ⴔ辘.صيڇ
-xn--6-gsc039eqq6k.xn--0gb6bxk; ڇ6Ⴔ辘.صيڇ; [B2, B3, V6]; xn--6-gsc039eqq6k.xn--0gb6bxk; ; ; # ڇ6Ⴔ辘.صيڇ
-xn--6-gsc039eqq6k.xn--0gb6bxkx18g; ڇ6Ⴔ辘.صيڇ‌; [B2, B3, C1, V6]; xn--6-gsc039eqq6k.xn--0gb6bxkx18g; ; ; # ڇ6Ⴔ辘.صيڇ
-ڇ6ⴔ辘.ﴢڇ‌; ڇ6ⴔ辘.صيڇ‌; [B2, B3, C1]; xn--6-gsc2270akm6f.xn--0gb6bxkx18g; ; xn--6-gsc2270akm6f.xn--0gb6bxk; [B2, B3] # ڇ6ⴔ辘.صيڇ
-ó „.ð®­ðž°¬ò»«žÛ¹; .ð®­ðž°¬ò»«žÛ¹; [B2, P1, V6, X4_2]; .xn--mmb3954kd0uf1zx7f; [B2, P1, V6, A4_2]; ; # .ð®­Û¹
+ó Œ3。\u1BF1ðŸ’; ó Œ3.\u1BF14; [V5, V6]; xn--3-ib31m.xn--4-pql; ; ; # 3.ᯱ4
+ó Œ3。\u1BF14; ó Œ3.\u1BF14; [V5, V6]; xn--3-ib31m.xn--4-pql; ; ; # 3.ᯱ4
+xn--3-ib31m.xn--4-pql; ó Œ3.\u1BF14; [V5, V6]; xn--3-ib31m.xn--4-pql; ; ; # 3.ᯱ4
+\u06876Ⴔ辘.\uFD22\u0687\u200C; \u06876Ⴔ辘.\u0635\u064A\u0687\u200C; [B2, B3, C1, V6]; xn--6-gsc039eqq6k.xn--0gb6bxkx18g; ; xn--6-gsc039eqq6k.xn--0gb6bxk; [B2, B3, V6] # ڇ6Ⴔ辘.صيڇ
+\u06876Ⴔ辘.\u0635\u064A\u0687\u200C; ; [B2, B3, C1, V6]; xn--6-gsc039eqq6k.xn--0gb6bxkx18g; ; xn--6-gsc039eqq6k.xn--0gb6bxk; [B2, B3, V6] # ڇ6Ⴔ辘.صيڇ
+\u06876ⴔ辘.\u0635\u064A\u0687\u200C; ; [B2, B3, C1]; xn--6-gsc2270akm6f.xn--0gb6bxkx18g; ; xn--6-gsc2270akm6f.xn--0gb6bxk; [B2, B3] # ڇ6ⴔ辘.صيڇ
+xn--6-gsc2270akm6f.xn--0gb6bxk; \u06876ⴔ辘.\u0635\u064A\u0687; [B2, B3]; xn--6-gsc2270akm6f.xn--0gb6bxk; ; ; # ڇ6ⴔ辘.صيڇ
+xn--6-gsc2270akm6f.xn--0gb6bxkx18g; \u06876ⴔ辘.\u0635\u064A\u0687\u200C; [B2, B3, C1]; xn--6-gsc2270akm6f.xn--0gb6bxkx18g; ; ; # ڇ6ⴔ辘.صيڇ
+xn--6-gsc039eqq6k.xn--0gb6bxk; \u06876Ⴔ辘.\u0635\u064A\u0687; [B2, B3, V6]; xn--6-gsc039eqq6k.xn--0gb6bxk; ; ; # ڇ6Ⴔ辘.صيڇ
+xn--6-gsc039eqq6k.xn--0gb6bxkx18g; \u06876Ⴔ辘.\u0635\u064A\u0687\u200C; [B2, B3, C1, V6]; xn--6-gsc039eqq6k.xn--0gb6bxkx18g; ; ; # ڇ6Ⴔ辘.صيڇ
+\u06876ⴔ辘.\uFD22\u0687\u200C; \u06876ⴔ辘.\u0635\u064A\u0687\u200C; [B2, B3, C1]; xn--6-gsc2270akm6f.xn--0gb6bxkx18g; ; xn--6-gsc2270akm6f.xn--0gb6bxk; [B2, B3] # ڇ6ⴔ辘.صيڇ
+ó „.ð®­ðž°¬ò»«žÛ¹; .ð®­ðž°¬ò»«žÛ¹; [B2, V6, X4_2]; .xn--mmb3954kd0uf1zx7f; [B2, V6, A4_2]; ; # .ð®­Û¹
.xn--mmb3954kd0uf1zx7f; .ð®­ðž°¬ò»«žÛ¹; [B2, V6, X4_2]; .xn--mmb3954kd0uf1zx7f; [B2, V6, A4_2]; ; # .ð®­Û¹
-꡽≯.򻲀򒳄; ꡽≯.򻲀򒳄; [P1, V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯.
-꡽≯.򻲀򒳄; ꡽≯.򻲀򒳄; [P1, V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯.
-꡽≯.򻲀򒳄; ; [P1, V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯.
-꡽≯.򻲀򒳄; ꡽≯.򻲀򒳄; [P1, V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯.
-xn--hdh8193c.xn--5z40cp629b; ꡽≯.򻲀򒳄; [V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯.
-Ï‚áƒÙ».Ï‚Ü”; ; [B5, B6]; xn--3xa80l26n.xn--3xa41o; ; xn--4xa60l26n.xn--4xa21o; # Ï‚áƒÙ».Ï‚Ü”
-Σá²Ù».Σܔ; σáƒÙ».σܔ; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σáƒÙ».σܔ
-σáƒÙ».σܔ; ; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σáƒÙ».σܔ
-ΣáƒÙ».σܔ; σáƒÙ».σܔ; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σáƒÙ».σܔ
-xn--4xa60l26n.xn--4xa21o; σáƒÙ».σܔ; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σáƒÙ».σܔ
-ΣáƒÙ».Ï‚Ü”; σáƒÙ».Ï‚Ü”; [B5, B6]; xn--4xa60l26n.xn--3xa41o; ; xn--4xa60l26n.xn--4xa21o; # σáƒÙ».Ï‚Ü”
-σáƒÙ».Ï‚Ü”; ; [B5, B6]; xn--4xa60l26n.xn--3xa41o; ; xn--4xa60l26n.xn--4xa21o; # σáƒÙ».Ï‚Ü”
-xn--4xa60l26n.xn--3xa41o; σáƒÙ».Ï‚Ü”; [B5, B6]; xn--4xa60l26n.xn--3xa41o; ; ; # σáƒÙ».Ï‚Ü”
-xn--3xa80l26n.xn--3xa41o; Ï‚áƒÙ».Ï‚Ü”; [B5, B6]; xn--3xa80l26n.xn--3xa41o; ; ; # Ï‚áƒÙ».Ï‚Ü”
-ΣáƒÙ».Σܔ; σáƒÙ».σܔ; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σáƒÙ».σܔ
-򄖚݈𠄯ݟ。󠛩; 򄖚݈𠄯ݟ.󠛩; [B1, B5, B6, P1, V6]; xn--vob0c4369twfv8b.xn--kl46e; ; ; # ݈𠄯ݟ.
-򄖚݈𠄯ݟ。󠛩; 򄖚݈𠄯ݟ.󠛩; [B1, B5, B6, P1, V6]; xn--vob0c4369twfv8b.xn--kl46e; ; ; # ݈𠄯ݟ.
-xn--vob0c4369twfv8b.xn--kl46e; 򄖚݈𠄯ݟ.󠛩; [B1, B5, B6, V6]; xn--vob0c4369twfv8b.xn--kl46e; ; ; # ݈𠄯ݟ.
-󠳛.â€ä¤«â‰ á‚¾; ó ³›.â€ä¤«â‰ á‚¾; [C2, P1, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [P1, V6] # .䤫≠Ⴞ
-󠳛.â€ä¤«≠Ⴞ; ó ³›.â€ä¤«â‰ á‚¾; [C2, P1, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [P1, V6] # .䤫≠Ⴞ
-ó ³›.â€ä¤«â‰ á‚¾; ; [C2, P1, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [P1, V6] # .䤫≠Ⴞ
-ó ³›.â€ä¤«≠Ⴞ; ó ³›.â€ä¤«â‰ á‚¾; [C2, P1, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [P1, V6] # .䤫≠Ⴞ
-ó ³›.â€ä¤«≠ⴞ; ó ³›.â€ä¤«â‰ â´ž; [C2, P1, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [P1, V6] # .䤫≠ⴞ
-ó ³›.â€ä¤«â‰ â´ž; ; [C2, P1, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [P1, V6] # .䤫≠ⴞ
+\uA87D≯.򻲀򒳄; \uA87D≯.򻲀򒳄; [V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯.
+\uA87D>\u0338.򻲀򒳄; \uA87D≯.򻲀򒳄; [V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯.
+\uA87D≯.򻲀򒳄; ; [V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯.
+\uA87D>\u0338.򻲀򒳄; \uA87D≯.򻲀򒳄; [V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯.
+xn--hdh8193c.xn--5z40cp629b; \uA87D≯.򻲀򒳄; [V6]; xn--hdh8193c.xn--5z40cp629b; ; ; # ≯.
+Ï‚áƒ\u067B.Ï‚\u0714; ; [B5, B6]; xn--3xa80l26n.xn--3xa41o; ; xn--4xa60l26n.xn--4xa21o; # Ï‚áƒÙ».Ï‚Ü”
+Σá²\u067B.Σ\u0714; σáƒ\u067B.σ\u0714; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σáƒÙ».σܔ
+σáƒ\u067B.σ\u0714; ; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σáƒÙ».σܔ
+Σáƒ\u067B.σ\u0714; σáƒ\u067B.σ\u0714; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σáƒÙ».σܔ
+xn--4xa60l26n.xn--4xa21o; σáƒ\u067B.σ\u0714; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σáƒÙ».σܔ
+Σáƒ\u067B.Ï‚\u0714; σáƒ\u067B.Ï‚\u0714; [B5, B6]; xn--4xa60l26n.xn--3xa41o; ; xn--4xa60l26n.xn--4xa21o; # σáƒÙ».Ï‚Ü”
+σáƒ\u067B.Ï‚\u0714; ; [B5, B6]; xn--4xa60l26n.xn--3xa41o; ; xn--4xa60l26n.xn--4xa21o; # σáƒÙ».Ï‚Ü”
+xn--4xa60l26n.xn--3xa41o; σáƒ\u067B.Ï‚\u0714; [B5, B6]; xn--4xa60l26n.xn--3xa41o; ; ; # σáƒÙ».Ï‚Ü”
+xn--3xa80l26n.xn--3xa41o; Ï‚áƒ\u067B.Ï‚\u0714; [B5, B6]; xn--3xa80l26n.xn--3xa41o; ; ; # Ï‚áƒÙ».Ï‚Ü”
+Σáƒ\u067B.Σ\u0714; σáƒ\u067B.σ\u0714; [B5, B6]; xn--4xa60l26n.xn--4xa21o; ; ; # σáƒÙ».σܔ
+򄖚\u0748𠄯\u075F。󠛩; 򄖚\u0748𠄯\u075F.󠛩; [B1, B5, B6, V6]; xn--vob0c4369twfv8b.xn--kl46e; ; ; # ݈𠄯ݟ.
+򄖚\u0748𠄯\u075F。󠛩; 򄖚\u0748𠄯\u075F.󠛩; [B1, B5, B6, V6]; xn--vob0c4369twfv8b.xn--kl46e; ; ; # ݈𠄯ݟ.
+xn--vob0c4369twfv8b.xn--kl46e; 򄖚\u0748𠄯\u075F.󠛩; [B1, B5, B6, V6]; xn--vob0c4369twfv8b.xn--kl46e; ; ; # ݈𠄯ݟ.
+󠳛.\u200D䤫≠Ⴞ; 󠳛.\u200D䤫≠Ⴞ; [C2, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [V6] # .䤫≠Ⴞ
+󠳛.\u200D䤫=\u0338Ⴞ; 󠳛.\u200D䤫≠Ⴞ; [C2, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [V6] # .䤫≠Ⴞ
+󠳛.\u200D䤫≠Ⴞ; ; [C2, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [V6] # .䤫≠Ⴞ
+󠳛.\u200D䤫=\u0338Ⴞ; 󠳛.\u200D䤫≠Ⴞ; [C2, V6]; xn--1t56e.xn--2nd159e9vb743e; ; xn--1t56e.xn--2nd141ghl2a; [V6] # .䤫≠Ⴞ
+󠳛.\u200D䤫=\u0338ⴞ; 󠳛.\u200D䤫≠ⴞ; [C2, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [V6] # .䤫≠ⴞ
+󠳛.\u200D䤫≠ⴞ; ; [C2, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [V6] # .䤫≠ⴞ
xn--1t56e.xn--1ch153bqvw; 󠳛.䤫≠ⴞ; [V6]; xn--1t56e.xn--1ch153bqvw; ; ; # .䤫≠ⴞ
-xn--1t56e.xn--1ug73gzzpwi3a; ó ³›.â€ä¤«â‰ â´ž; [C2, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; ; # .䤫≠ⴞ
+xn--1t56e.xn--1ug73gzzpwi3a; 󠳛.\u200D䤫≠ⴞ; [C2, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; ; # .䤫≠ⴞ
xn--1t56e.xn--2nd141ghl2a; 󠳛.䤫≠Ⴞ; [V6]; xn--1t56e.xn--2nd141ghl2a; ; ; # .䤫≠Ⴞ
-xn--1t56e.xn--2nd159e9vb743e; ó ³›.â€ä¤«â‰ á‚¾; [C2, V6]; xn--1t56e.xn--2nd159e9vb743e; ; ; # .䤫≠Ⴞ
-󠳛.â€ä¤«≠ⴞ; ó ³›.â€ä¤«â‰ â´ž; [C2, P1, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [P1, V6] # .䤫≠ⴞ
-󠳛.â€ä¤«â‰ â´ž; ó ³›.â€ä¤«â‰ â´ž; [C2, P1, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [P1, V6] # .䤫≠ⴞ
+xn--1t56e.xn--2nd159e9vb743e; 󠳛.\u200D䤫≠Ⴞ; [C2, V6]; xn--1t56e.xn--2nd159e9vb743e; ; ; # .䤫≠Ⴞ
+󠳛.\u200D䤫=\u0338ⴞ; 󠳛.\u200D䤫≠ⴞ; [C2, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [V6] # .䤫≠ⴞ
+󠳛.\u200D䤫≠ⴞ; 󠳛.\u200D䤫≠ⴞ; [C2, V6]; xn--1t56e.xn--1ug73gzzpwi3a; ; xn--1t56e.xn--1ch153bqvw; [V6] # .䤫≠ⴞ
ð½˜ð‘ˆµï¼Žð¹£ðŸ•¥; ð½˜ð‘ˆµ.ð¹£ðŸ•¥; [B1, B2, B3]; xn--bv0d02c.xn--bo0dq650b; ; ; # ð½˜ð‘ˆµ.ð¹£ðŸ•¥
ð½˜ð‘ˆµ.ð¹£ðŸ•¥; ; [B1, B2, B3]; xn--bv0d02c.xn--bo0dq650b; ; ; # ð½˜ð‘ˆµ.ð¹£ðŸ•¥
xn--bv0d02c.xn--bo0dq650b; ð½˜ð‘ˆµ.ð¹£ðŸ•¥; [B1, B2, B3]; xn--bv0d02c.xn--bo0dq650b; ; ; # ð½˜ð‘ˆµ.ð¹£ðŸ•¥
-â’Šâ’ˆð‘„。9; â’Šâ’ˆð‘„.9; [P1, V6]; xn--tshd3512p.9; ; ; # â’Šâ’ˆð‘„.9
+â’Šâ’ˆð‘„。9; â’Šâ’ˆð‘„.9; [V6]; xn--tshd3512p.9; ; ; # â’Šâ’ˆð‘„.9
3.1.ð‘„。9; 3.1.ð‘„.9; [V5]; 3.1.xn--110d.9; ; ; # 3.1.ð‘„.9
3.1.xn--110d.9; 3.1.ð‘„.9; [V5]; 3.1.xn--110d.9; ; ; # 3.1.ð‘„.9
xn--tshd3512p.9; â’Šâ’ˆð‘„.9; [V6]; xn--tshd3512p.9; ; ; # â’Šâ’ˆð‘„.9
--‌ⷱ≮.ð¹±ò­´4₉; -‌ⷱ≮.ð¹±ò­´49; [B1, C1, P1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, P1, V3, V6] # -ⷱ≮.ð¹±49
--‌ⷱ≮.ð¹±ò­´4₉; -‌ⷱ≮.ð¹±ò­´49; [B1, C1, P1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, P1, V3, V6] # -ⷱ≮.ð¹±49
--‌ⷱ≮.ð¹±ò­´49; ; [B1, C1, P1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, P1, V3, V6] # -ⷱ≮.ð¹±49
--‌ⷱ≮.ð¹±ò­´49; -‌ⷱ≮.ð¹±ò­´49; [B1, C1, P1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, P1, V3, V6] # -ⷱ≮.ð¹±49
-xn----ngo823c.xn--49-ki3om2611f; -ⷱ≮.ð¹±ò­´49; [B1, V3, V6]; xn----ngo823c.xn--49-ki3om2611f; ; ; # -ⷱ≮.ð¹±49
-xn----sgn20i14s.xn--49-ki3om2611f; -‌ⷱ≮.ð¹±ò­´49; [B1, C1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; ; # -ⷱ≮.ð¹±49
--≯딾。ࡇ; -≯딾.ࡇ; [B1, P1, V3, V6]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ
--≯딾。ࡇ; -≯딾.ࡇ; [B1, P1, V3, V6]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ
--≯딾。ࡇ; -≯딾.ࡇ; [B1, P1, V3, V6]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ
--≯딾。ࡇ; -≯딾.ࡇ; [B1, P1, V3, V6]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ
-xn----pgow547d.xn--5vb; -≯딾.ࡇ; [B1, V3, V6]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ
-𑙢⒈ð¹ -。ó —‌; 𑙢⒈ð¹ -.ó —‌; [B1, C1, P1, V3, V6]; xn----dcpy090hiyg.xn--0ug23321l; ; xn----dcpy090hiyg.xn--jd46e; [B1, P1, V3, V6] # 𑙢⒈ð¹ -.
-𑙢1.ð¹ -。ó —‌; 𑙢1.ð¹ -.ó —‌; [B1, C1, P1, V3, V6]; xn--1-bf0j.xn----516i.xn--0ug23321l; ; xn--1-bf0j.xn----516i.xn--jd46e; [B1, P1, V3, V6] # 𑙢1.ð¹ -.
+-\u200C\u2DF1≮.ð¹±ò­´4₉; -\u200C\u2DF1≮.ð¹±ò­´49; [B1, C1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, V3, V6] # -ⷱ≮.ð¹±49
+-\u200C\u2DF1<\u0338.ð¹±ò­´4₉; -\u200C\u2DF1≮.ð¹±ò­´49; [B1, C1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, V3, V6] # -ⷱ≮.ð¹±49
+-\u200C\u2DF1≮.ð¹±ò­´49; ; [B1, C1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, V3, V6] # -ⷱ≮.ð¹±49
+-\u200C\u2DF1<\u0338.ð¹±ò­´49; -\u200C\u2DF1≮.ð¹±ò­´49; [B1, C1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; xn----ngo823c.xn--49-ki3om2611f; [B1, V3, V6] # -ⷱ≮.ð¹±49
+xn----ngo823c.xn--49-ki3om2611f; -\u2DF1≮.ð¹±ò­´49; [B1, V3, V6]; xn----ngo823c.xn--49-ki3om2611f; ; ; # -ⷱ≮.ð¹±49
+xn----sgn20i14s.xn--49-ki3om2611f; -\u200C\u2DF1≮.ð¹±ò­´49; [B1, C1, V3, V6]; xn----sgn20i14s.xn--49-ki3om2611f; ; ; # -ⷱ≮.ð¹±49
+-≯딾。\u0847; -≯딾.\u0847; [B1, V3]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ
+->\u0338딾。\u0847; -≯딾.\u0847; [B1, V3]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ
+-≯딾。\u0847; -≯딾.\u0847; [B1, V3]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ
+->\u0338딾。\u0847; -≯딾.\u0847; [B1, V3]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ
+xn----pgow547d.xn--5vb; -≯딾.\u0847; [B1, V3]; xn----pgow547d.xn--5vb; ; ; # -≯딾.ࡇ
+𑙢⒈ð¹ -。ó —\u200C; 𑙢⒈ð¹ -.ó —\u200C; [B1, C1, V3, V6]; xn----dcpy090hiyg.xn--0ug23321l; ; xn----dcpy090hiyg.xn--jd46e; [B1, V3, V6] # 𑙢⒈ð¹ -.
+𑙢1.ð¹ -。ó —\u200C; 𑙢1.ð¹ -.ó —\u200C; [B1, C1, V3, V6]; xn--1-bf0j.xn----516i.xn--0ug23321l; ; xn--1-bf0j.xn----516i.xn--jd46e; [B1, V3, V6] # 𑙢1.ð¹ -.
xn--1-bf0j.xn----516i.xn--jd46e; 𑙢1.ð¹ -.ó —; [B1, V3, V6]; xn--1-bf0j.xn----516i.xn--jd46e; ; ; # 𑙢1.ð¹ -.
-xn--1-bf0j.xn----516i.xn--0ug23321l; 𑙢1.ð¹ -.ó —‌; [B1, C1, V3, V6]; xn--1-bf0j.xn----516i.xn--0ug23321l; ; ; # 𑙢1.ð¹ -.
+xn--1-bf0j.xn----516i.xn--0ug23321l; 𑙢1.ð¹ -.ó —\u200C; [B1, C1, V3, V6]; xn--1-bf0j.xn----516i.xn--0ug23321l; ; ; # 𑙢1.ð¹ -.
xn----dcpy090hiyg.xn--jd46e; 𑙢⒈ð¹ -.ó —; [B1, V3, V6]; xn----dcpy090hiyg.xn--jd46e; ; ; # 𑙢⒈ð¹ -.
-xn----dcpy090hiyg.xn--0ug23321l; 𑙢⒈ð¹ -.ó —‌; [B1, C1, V3, V6]; xn----dcpy090hiyg.xn--0ug23321l; ; ; # 𑙢⒈ð¹ -.
-͊.ð¨Ž; ÍŠ.ð¨Ž; [V5]; xn--oua.xn--mr9c; ; ; # ÍŠ.ð¨Ž
-ÍŠ.ð¨Ž; ; [V5]; xn--oua.xn--mr9c; ; ; # ÍŠ.ð¨Ž
-xn--oua.xn--mr9c; ÍŠ.ð¨Ž; [V5]; xn--oua.xn--mr9c; ; ; # ÍŠ.ð¨Ž
-훉≮。ิ; 훉≮.ิ; [P1, V5, V6]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ
-훉≮。ิ; 훉≮.ิ; [P1, V5, V6]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ
-훉≮。ิ; 훉≮.ิ; [P1, V5, V6]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ
-훉≮。ิ; 훉≮.ิ; [P1, V5, V6]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ
-xn--gdh2512e.xn--i4c; 훉≮.ิ; [V5, V6]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ
-â··òž£‰ðŸƒ˜ï¼Žð´ˆ‡ðŸ¸Ù™ðž¤¯; â··òž£‰ðŸƒ˜.𴈇2ٙ𞤯; [B1, B5, B6, P1, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯
-ⷷ򞣉🃘.𴈇2ٙ𞤯; ; [B1, B5, B6, P1, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯
-â··òž£‰ðŸƒ˜.𴈇2Ù™ðž¤; â··òž£‰ðŸƒ˜.𴈇2ٙ𞤯; [B1, B5, B6, P1, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯
-xn--trj8045le6s9b.xn--2-upc23918acjsj; ⷷ򞣉🃘.𴈇2ٙ𞤯; [B1, B5, B6, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯
-â··òž£‰ðŸƒ˜ï¼Žð´ˆ‡ðŸ¸Ù™ðž¤; â··òž£‰ðŸƒ˜.𴈇2ٙ𞤯; [B1, B5, B6, P1, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯
-󗇩ßᢞ‌。٠𞷻ﳔ-; 󗇩ßᢞ‌.٠𞷻نخ-; [B1, B6, C1, P1, V3, V6]; xn--zca272jbif10059a.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, P1, V3, V6] # ßᢞ.٠نخ-
-󗇩ßᢞ‌。٠𞷻نخ-; 󗇩ßᢞ‌.٠𞷻نخ-; [B1, B6, C1, P1, V3, V6]; xn--zca272jbif10059a.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, P1, V3, V6] # ßᢞ.٠نخ-
-󗇩SSᢞ‌。٠𞷻نخ-; 󗇩ssᢞ‌.٠𞷻نخ-; [B1, B6, C1, P1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, P1, V3, V6] # ssᢞ.٠نخ-
-󗇩ssᢞ‌。٠𞷻نخ-; 󗇩ssᢞ‌.٠𞷻نخ-; [B1, B6, C1, P1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, P1, V3, V6] # ssᢞ.٠نخ-
-󗇩Ssᢞ‌。٠𞷻نخ-; 󗇩ssᢞ‌.٠𞷻نخ-; [B1, B6, C1, P1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, P1, V3, V6] # ssᢞ.٠نخ-
-xn--ss-jepz4596r.xn----dnc5e1er384z; 󗇩ssᢞ.٠𞷻نخ-; [B1, V3, V6]; xn--ss-jepz4596r.xn----dnc5e1er384z; ; ; # ssᢞ.٠نخ-
-xn--ss-jep006bqt765b.xn----dnc5e1er384z; 󗇩ssᢞ‌.٠𞷻نخ-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; ; # ssᢞ.٠نخ-
-xn--zca272jbif10059a.xn----dnc5e1er384z; 󗇩ßᢞ‌.٠𞷻نخ-; [B1, B6, C1, V3, V6]; xn--zca272jbif10059a.xn----dnc5e1er384z; ; ; # ßᢞ.٠نخ-
-󗇩SSᢞ‌。٠𞷻ﳔ-; 󗇩ssᢞ‌.٠𞷻نخ-; [B1, B6, C1, P1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, P1, V3, V6] # ssᢞ.٠نخ-
-󗇩ssᢞ‌。٠𞷻ﳔ-; 󗇩ssᢞ‌.٠𞷻نخ-; [B1, B6, C1, P1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, P1, V3, V6] # ssᢞ.٠نخ-
-󗇩Ssᢞ‌。٠𞷻ﳔ-; 󗇩ssᢞ‌.٠𞷻نخ-; [B1, B6, C1, P1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, P1, V3, V6] # ssᢞ.٠نخ-
-ꡆ。Ↄྵ놮-; ꡆ.Ↄྵ놮-; [P1, V3, V6]; xn--fc9a.xn----qmg787k869k; ; ; # ꡆ.Ↄྵ놮-
-ꡆ。Ↄྵ놔á‡-; ꡆ.Ↄྵ놮-; [P1, V3, V6]; xn--fc9a.xn----qmg787k869k; ; ; # ꡆ.Ↄྵ놮-
-ꡆ。ↄྵ놔á‡-; ꡆ.ↄྵ놮-; [V3]; xn--fc9a.xn----qmg097k469k; ; ; # ꡆ.ↄྵ놮-
-ꡆ。ↄྵ놮-; ꡆ.ↄྵ놮-; [V3]; xn--fc9a.xn----qmg097k469k; ; ; # ꡆ.ↄྵ놮-
-xn--fc9a.xn----qmg097k469k; ꡆ.ↄྵ놮-; [V3]; xn--fc9a.xn----qmg097k469k; ; ; # ꡆ.ↄྵ놮-
-xn--fc9a.xn----qmg787k869k; ꡆ.Ↄྵ놮-; [V3, V6]; xn--fc9a.xn----qmg787k869k; ; ; # ꡆ.Ↄྵ놮-
-ﶭâ€.ñ¥°ŒÚ©; لميâ€.ñ¥°ŒÚ©; [B3, B5, B6, C2, P1, V6]; xn--ghbcp494x.xn--ckb36214f; ; xn--ghbcp.xn--ckb36214f; [B5, B6, P1, V6] # لمي.Ú©
-لميâ€.ñ¥°ŒÚ©; ; [B3, B5, B6, C2, P1, V6]; xn--ghbcp494x.xn--ckb36214f; ; xn--ghbcp.xn--ckb36214f; [B5, B6, P1, V6] # لمي.Ú©
-xn--ghbcp.xn--ckb36214f; لمي.񥰌ک; [B5, B6, V6]; xn--ghbcp.xn--ckb36214f; ; ; # لمي.ک
-xn--ghbcp494x.xn--ckb36214f; لميâ€.ñ¥°ŒÚ©; [B3, B5, B6, C2, V6]; xn--ghbcp494x.xn--ckb36214f; ; ; # لمي.Ú©
-Ⴜᰯð³’≯。۠ᜲྺ; Ⴜᰯð³’≯.۠ᜲྺ; [B1, B3, B5, B6, P1, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯð³’≯.۠ᜲྺ
-Ⴜᰯð³’≯。۠ᜲྺ; Ⴜᰯð³’≯.۠ᜲྺ; [B1, B3, B5, B6, P1, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯð³’≯.۠ᜲྺ
-ⴜᰯð³’≯。۠ᜲྺ; ⴜᰯð³’≯.۠ᜲྺ; [B1, B3, B5, B6, P1, V5, V6]; xn--r1f68xh1jgv7u.xn--wlb646b4ng; ; ; # ⴜᰯð³’≯.۠ᜲྺ
-ⴜᰯð³’≯。۠ᜲྺ; ⴜᰯð³’≯.۠ᜲྺ; [B1, B3, B5, B6, P1, V5, V6]; xn--r1f68xh1jgv7u.xn--wlb646b4ng; ; ; # ⴜᰯð³’≯.۠ᜲྺ
-Ⴜᰯð²’≯。۠ᜲྺ; Ⴜᰯð³’≯.۠ᜲྺ; [B1, B3, B5, B6, P1, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯð³’≯.۠ᜲྺ
-Ⴜᰯð²’≯。۠ᜲྺ; Ⴜᰯð³’≯.۠ᜲྺ; [B1, B3, B5, B6, P1, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯð³’≯.۠ᜲྺ
-xn--0nd679cf3eq67y.xn--wlb646b4ng; Ⴜᰯð³’≯.۠ᜲྺ; [B1, B3, B5, B6, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯð³’≯.۠ᜲྺ
-xn--r1f68xh1jgv7u.xn--wlb646b4ng; ⴜᰯð³’≯.۠ᜲྺ; [B1, B3, B5, B6, V5, V6]; xn--r1f68xh1jgv7u.xn--wlb646b4ng; ; ; # ⴜᰯð³’≯.۠ᜲྺ
-ð‹µã€‚ﳬ; ð‹µ.كم; [B1]; xn--p97c.xn--fhbe; ; ; # ð‹µ.كم
-ð‹µã€‚كم; ð‹µ.كم; [B1]; xn--p97c.xn--fhbe; ; ; # ð‹µ.كم
-xn--p97c.xn--fhbe; ð‹µ.كم; [B1]; xn--p97c.xn--fhbe; ; ; # ð‹µ.كم
-ð‹µ.كم; ; [B1]; xn--p97c.xn--fhbe; ; ; # ð‹µ.كم
-≮ð…¶ï¼Žñ±²ê«¬â¹ˆó°¥­; ≮ð…¶.ñ±²ê«¬â¹ˆó°¥­; [P1, V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈
-≮ð…¶ï¼Žñ±²ê«¬â¹ˆó°¥­; ≮ð…¶.ñ±²ê«¬â¹ˆó°¥­; [P1, V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈
-≮ð…¶.ñ±²ê«¬â¹ˆó°¥­; ; [P1, V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈
-≮ð…¶.ñ±²ê«¬â¹ˆó°¥­; ≮ð…¶.ñ±²ê«¬â¹ˆó°¥­; [P1, V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈
-xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ≮ð…¶.ñ±²ê«¬â¹ˆó°¥­; [V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈
-ⷰ͘ᢕ.͡ð¹·ó ´; ⷰ͘ᢕ.Í¡ð¹·ó ´; [B1, P1, V5, V6]; xn--2ua889htsp.xn--cva2687k2tv0g; ; ; # ⷰ͘ᢕ.Í¡ð¹·
-ⷰ͘ᢕ.Í¡ð¹·ó ´; ; [B1, P1, V5, V6]; xn--2ua889htsp.xn--cva2687k2tv0g; ; ; # ⷰ͘ᢕ.Í¡ð¹·
-xn--2ua889htsp.xn--cva2687k2tv0g; ⷰ͘ᢕ.Í¡ð¹·ó ´; [B1, V5, V6]; xn--2ua889htsp.xn--cva2687k2tv0g; ; ; # ⷰ͘ᢕ.Í¡ð¹·
-ïµ¹á¡â€ŒÚ­ï¼Žð‘‹ª×‡; غممá¡â€ŒÚ­.𑋪ׇ; [B1, B2, B3, B6, V5]; xn--5gbwa03bg24eptk.xn--vdb1198k; ; xn--5gbwa03bg24e.xn--vdb1198k; # غممá¡Ú­.𑋪ׇ
-غممá¡â€ŒÚ­.𑋪ׇ; ; [B1, B2, B3, B6, V5]; xn--5gbwa03bg24eptk.xn--vdb1198k; ; xn--5gbwa03bg24e.xn--vdb1198k; # غممá¡Ú­.𑋪ׇ
-xn--5gbwa03bg24e.xn--vdb1198k; غممá¡Ú­.𑋪ׇ; [B1, B2, B3, B6, V5]; xn--5gbwa03bg24e.xn--vdb1198k; ; ; # غممá¡Ú­.𑋪ׇ
-xn--5gbwa03bg24eptk.xn--vdb1198k; غممá¡â€ŒÚ­.𑋪ׇ; [B1, B2, B3, B6, V5]; xn--5gbwa03bg24eptk.xn--vdb1198k; ; ; # غممá¡Ú­.𑋪ׇ
-𑑂。â€ó¥ž€ðŸž•ò¥”; ð‘‘‚.â€ó¥ž€ðŸž•ò¥”; [C2, P1, V5, V6]; xn--8v1d.xn--1ug1386plvx1cd8vya; ; xn--8v1d.xn--ye9h41035a2qqs; [P1, V5, V6] # ð‘‘‚.🞕
-𑑂。â€ó¥ž€ðŸž•ò¥”; ð‘‘‚.â€ó¥ž€ðŸž•ò¥”; [C2, P1, V5, V6]; xn--8v1d.xn--1ug1386plvx1cd8vya; ; xn--8v1d.xn--ye9h41035a2qqs; [P1, V5, V6] # ð‘‘‚.🞕
+xn----dcpy090hiyg.xn--0ug23321l; 𑙢⒈ð¹ -.ó —\u200C; [B1, C1, V3, V6]; xn----dcpy090hiyg.xn--0ug23321l; ; ; # 𑙢⒈ð¹ -.
+\u034A.ð¨Ž; \u034A.ð¨Ž; [V5]; xn--oua.xn--mr9c; ; ; # ÍŠ.ð¨Ž
+\u034A.ð¨Ž; ; [V5]; xn--oua.xn--mr9c; ; ; # ÍŠ.ð¨Ž
+xn--oua.xn--mr9c; \u034A.ð¨Ž; [V5]; xn--oua.xn--mr9c; ; ; # ÍŠ.ð¨Ž
+훉≮。\u0E34; 훉≮.\u0E34; [V5]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ
+훉<\u0338。\u0E34; 훉≮.\u0E34; [V5]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ
+훉≮。\u0E34; 훉≮.\u0E34; [V5]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ
+훉<\u0338。\u0E34; 훉≮.\u0E34; [V5]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ
+xn--gdh2512e.xn--i4c; 훉≮.\u0E34; [V5]; xn--gdh2512e.xn--i4c; ; ; # 훉≮.ิ
+\u2DF7òž£‰ðŸƒ˜ï¼Žð´ˆ‡ðŸ¸\u0659𞤯; \u2DF7òž£‰ðŸƒ˜.𴈇2\u0659𞤯; [B1, B5, B6, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯
+\u2DF7򞣉🃘.𴈇2\u0659𞤯; ; [B1, B5, B6, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯
+\u2DF7òž£‰ðŸƒ˜.𴈇2\u0659ðž¤; \u2DF7òž£‰ðŸƒ˜.𴈇2\u0659𞤯; [B1, B5, B6, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯
+xn--trj8045le6s9b.xn--2-upc23918acjsj; \u2DF7򞣉🃘.𴈇2\u0659𞤯; [B1, B5, B6, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯
+\u2DF7òž£‰ðŸƒ˜ï¼Žð´ˆ‡ðŸ¸\u0659ðž¤; \u2DF7òž£‰ðŸƒ˜.𴈇2\u0659𞤯; [B1, B5, B6, V5, V6]; xn--trj8045le6s9b.xn--2-upc23918acjsj; ; ; # ⷷ🃘.2ٙ𞤯
+󗇩ßᢞ\u200C。\u0660𞷻\uFCD4-; 󗇩ßᢞ\u200C.\u0660𞷻\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--zca272jbif10059a.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ßᢞ.٠نخ-
+󗇩ßᢞ\u200C。\u0660𞷻\u0646\u062E-; 󗇩ßᢞ\u200C.\u0660𞷻\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--zca272jbif10059a.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ßᢞ.٠نخ-
+󗇩SSᢞ\u200C。\u0660𞷻\u0646\u062E-; 󗇩ssᢞ\u200C.\u0660𞷻\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ-
+󗇩ssᢞ\u200C。\u0660𞷻\u0646\u062E-; 󗇩ssᢞ\u200C.\u0660𞷻\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ-
+󗇩Ssᢞ\u200C。\u0660𞷻\u0646\u062E-; 󗇩ssᢞ\u200C.\u0660𞷻\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ-
+xn--ss-jepz4596r.xn----dnc5e1er384z; 󗇩ssᢞ.\u0660𞷻\u0646\u062E-; [B1, V3, V6]; xn--ss-jepz4596r.xn----dnc5e1er384z; ; ; # ssᢞ.٠نخ-
+xn--ss-jep006bqt765b.xn----dnc5e1er384z; 󗇩ssᢞ\u200C.\u0660𞷻\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; ; # ssᢞ.٠نخ-
+xn--zca272jbif10059a.xn----dnc5e1er384z; 󗇩ßᢞ\u200C.\u0660𞷻\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--zca272jbif10059a.xn----dnc5e1er384z; ; ; # ßᢞ.٠نخ-
+󗇩SSᢞ\u200C。\u0660𞷻\uFCD4-; 󗇩ssᢞ\u200C.\u0660𞷻\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ-
+󗇩ssᢞ\u200C。\u0660𞷻\uFCD4-; 󗇩ssᢞ\u200C.\u0660𞷻\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ-
+󗇩Ssᢞ\u200C。\u0660𞷻\uFCD4-; 󗇩ssᢞ\u200C.\u0660𞷻\u0646\u062E-; [B1, B6, C1, V3, V6]; xn--ss-jep006bqt765b.xn----dnc5e1er384z; ; xn--ss-jepz4596r.xn----dnc5e1er384z; [B1, V3, V6] # ssᢞ.٠نخ-
+ꡆ。Ↄ\u0FB5놮-; ꡆ.Ↄ\u0FB5놮-; [V3, V6]; xn--fc9a.xn----qmg787k869k; ; ; # ꡆ.Ↄྵ놮-
+ꡆ。Ↄ\u0FB5á„‚á…ªá‡-; ꡆ.Ↄ\u0FB5놮-; [V3, V6]; xn--fc9a.xn----qmg787k869k; ; ; # ꡆ.Ↄྵ놮-
+ꡆ。ↄ\u0FB5á„‚á…ªá‡-; ꡆ.ↄ\u0FB5놮-; [V3]; xn--fc9a.xn----qmg097k469k; ; ; # ꡆ.ↄྵ놮-
+ꡆ。ↄ\u0FB5놮-; ꡆ.ↄ\u0FB5놮-; [V3]; xn--fc9a.xn----qmg097k469k; ; ; # ꡆ.ↄྵ놮-
+xn--fc9a.xn----qmg097k469k; ꡆ.ↄ\u0FB5놮-; [V3]; xn--fc9a.xn----qmg097k469k; ; ; # ꡆ.ↄྵ놮-
+xn--fc9a.xn----qmg787k869k; ꡆ.Ↄ\u0FB5놮-; [V3, V6]; xn--fc9a.xn----qmg787k869k; ; ; # ꡆ.Ↄྵ놮-
+\uFDAD\u200D.񥰌\u06A9; \u0644\u0645\u064A\u200D.񥰌\u06A9; [B3, B5, B6, C2, V6]; xn--ghbcp494x.xn--ckb36214f; ; xn--ghbcp.xn--ckb36214f; [B5, B6, V6] # لمي.ک
+\u0644\u0645\u064A\u200D.񥰌\u06A9; ; [B3, B5, B6, C2, V6]; xn--ghbcp494x.xn--ckb36214f; ; xn--ghbcp.xn--ckb36214f; [B5, B6, V6] # لمي.ک
+xn--ghbcp.xn--ckb36214f; \u0644\u0645\u064A.񥰌\u06A9; [B5, B6, V6]; xn--ghbcp.xn--ckb36214f; ; ; # لمي.ک
+xn--ghbcp494x.xn--ckb36214f; \u0644\u0645\u064A\u200D.񥰌\u06A9; [B3, B5, B6, C2, V6]; xn--ghbcp494x.xn--ckb36214f; ; ; # لمي.ک
+Ⴜ\u1C2Fð³’≯。\u06E0\u1732\u0FBA; Ⴜ\u1C2Fð³’≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯð³’≯.۠ᜲྺ
+Ⴜ\u1C2Fð³’>\u0338。\u06E0\u1732\u0FBA; Ⴜ\u1C2Fð³’≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯð³’≯.۠ᜲྺ
+â´œ\u1C2Fð³’>\u0338。\u06E0\u1732\u0FBA; â´œ\u1C2Fð³’≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5]; xn--r1f68xh1jgv7u.xn--wlb646b4ng; ; ; # ⴜᰯð³’≯.۠ᜲྺ
+â´œ\u1C2Fð³’≯。\u06E0\u1732\u0FBA; â´œ\u1C2Fð³’≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5]; xn--r1f68xh1jgv7u.xn--wlb646b4ng; ; ; # ⴜᰯð³’≯.۠ᜲྺ
+Ⴜ\u1C2Fð²’≯。\u06E0\u1732\u0FBA; Ⴜ\u1C2Fð³’≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯð³’≯.۠ᜲྺ
+Ⴜ\u1C2Fð²’>\u0338。\u06E0\u1732\u0FBA; Ⴜ\u1C2Fð³’≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯð³’≯.۠ᜲྺ
+xn--0nd679cf3eq67y.xn--wlb646b4ng; Ⴜ\u1C2Fð³’≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5, V6]; xn--0nd679cf3eq67y.xn--wlb646b4ng; ; ; # Ⴜᰯð³’≯.۠ᜲྺ
+xn--r1f68xh1jgv7u.xn--wlb646b4ng; â´œ\u1C2Fð³’≯.\u06E0\u1732\u0FBA; [B1, B5, B6, V5]; xn--r1f68xh1jgv7u.xn--wlb646b4ng; ; ; # ⴜᰯð³’≯.۠ᜲྺ
+ð‹µã€‚\uFCEC; ð‹µ.\u0643\u0645; [B1]; xn--p97c.xn--fhbe; ; ; # ð‹µ.كم
+ð‹µã€‚\u0643\u0645; ð‹µ.\u0643\u0645; [B1]; xn--p97c.xn--fhbe; ; ; # ð‹µ.كم
+xn--p97c.xn--fhbe; ð‹µ.\u0643\u0645; [B1]; xn--p97c.xn--fhbe; ; ; # ð‹µ.كم
+ð‹µ.\u0643\u0645; ; [B1]; xn--p97c.xn--fhbe; ; ; # ð‹µ.كم
+≮ð…¶ï¼Žñ±²\uAAEC⹈󰥭; ≮ð…¶.ñ±²\uAAEC⹈󰥭; [V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈
+<\u0338ð…¶ï¼Žñ±²\uAAEC⹈󰥭; ≮ð…¶.ñ±²\uAAEC⹈󰥭; [V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈
+≮ð…¶.ñ±²\uAAEC⹈󰥭; ; [V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈
+<\u0338ð…¶.ñ±²\uAAEC⹈󰥭; ≮ð…¶.ñ±²\uAAEC⹈󰥭; [V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈
+xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ≮ð…¶.ñ±²\uAAEC⹈󰥭; [V6]; xn--gdh0880o.xn--4tjx101bsg00ds9pyc; ; ; # ≮.ꫬ⹈
+\u2DF0\u0358ᢕ.\u0361ð¹·ó ´; \u2DF0\u0358ᢕ.\u0361ð¹·ó ´; [B1, V5, V6]; xn--2ua889htsp.xn--cva2687k2tv0g; ; ; # ⷰ͘ᢕ.Í¡ð¹·
+\u2DF0\u0358ᢕ.\u0361ð¹·ó ´; ; [B1, V5, V6]; xn--2ua889htsp.xn--cva2687k2tv0g; ; ; # ⷰ͘ᢕ.Í¡ð¹·
+xn--2ua889htsp.xn--cva2687k2tv0g; \u2DF0\u0358ᢕ.\u0361ð¹·ó ´; [B1, V5, V6]; xn--2ua889htsp.xn--cva2687k2tv0g; ; ; # ⷰ͘ᢕ.Í¡ð¹·
+\uFD79á¡\u200C\u06AD.𑋪\u05C7; \u063A\u0645\u0645á¡\u200C\u06AD.𑋪\u05C7; [B1, B2, V5]; xn--5gbwa03bg24eptk.xn--vdb1198k; ; xn--5gbwa03bg24e.xn--vdb1198k; # غممá¡Ú­.𑋪ׇ
+\u063A\u0645\u0645á¡\u200C\u06AD.𑋪\u05C7; ; [B1, B2, V5]; xn--5gbwa03bg24eptk.xn--vdb1198k; ; xn--5gbwa03bg24e.xn--vdb1198k; # غممá¡Ú­.𑋪ׇ
+xn--5gbwa03bg24e.xn--vdb1198k; \u063A\u0645\u0645á¡\u06AD.𑋪\u05C7; [B1, B2, V5]; xn--5gbwa03bg24e.xn--vdb1198k; ; ; # غممá¡Ú­.𑋪ׇ
+xn--5gbwa03bg24eptk.xn--vdb1198k; \u063A\u0645\u0645á¡\u200C\u06AD.𑋪\u05C7; [B1, B2, V5]; xn--5gbwa03bg24eptk.xn--vdb1198k; ; ; # غممá¡Ú­.𑋪ׇ
+𑑂。\u200D󥞀🞕ò¥”; ð‘‘‚.\u200D󥞀🞕ò¥”; [C2, V5, V6]; xn--8v1d.xn--1ug1386plvx1cd8vya; ; xn--8v1d.xn--ye9h41035a2qqs; [V5, V6] # ð‘‘‚.🞕
+𑑂。\u200D󥞀🞕ò¥”; ð‘‘‚.\u200D󥞀🞕ò¥”; [C2, V5, V6]; xn--8v1d.xn--1ug1386plvx1cd8vya; ; xn--8v1d.xn--ye9h41035a2qqs; [V5, V6] # ð‘‘‚.🞕
xn--8v1d.xn--ye9h41035a2qqs; ð‘‘‚.󥞀🞕ò¥”; [V5, V6]; xn--8v1d.xn--ye9h41035a2qqs; ; ; # ð‘‘‚.🞕
-xn--8v1d.xn--1ug1386plvx1cd8vya; ð‘‘‚.â€ó¥ž€ðŸž•ò¥”; [C2, V5, V6]; xn--8v1d.xn--1ug1386plvx1cd8vya; ; ; # ð‘‘‚.🞕
--ש。⒚; -ש.⒚; [B1, P1, V3, V6]; xn----gjc.xn--cth; ; ; # -ש.⒚
--ש。19.; -ש.19.; [B1, V3]; xn----gjc.19.; ; ; # -ש.19.
-xn----gjc.19.; -ש.19.; [B1, V3]; xn----gjc.19.; ; ; # -ש.19.
-xn----gjc.xn--cth; -ש.⒚; [B1, V3, V6]; xn----gjc.xn--cth; ; ; # -ש.⒚
-ôŠ¾»à¡…‌。ᢎâ€; ôŠ¾»à¡…‌.ᢎâ€; [B5, B6, C1, C2, P1, V6]; xn--3vb882jz4411a.xn--79e259a; ; xn--3vb50049s.xn--79e; [B5, B6, P1, V6] # à¡….ᢎ
-ôŠ¾»à¡…‌。ᢎâ€; ôŠ¾»à¡…‌.ᢎâ€; [B5, B6, C1, C2, P1, V6]; xn--3vb882jz4411a.xn--79e259a; ; xn--3vb50049s.xn--79e; [B5, B6, P1, V6] # à¡….ᢎ
-xn--3vb50049s.xn--79e; 􊾻ࡅ.ᢎ; [B5, B6, V6]; xn--3vb50049s.xn--79e; ; ; # ࡅ.ᢎ
-xn--3vb882jz4411a.xn--79e259a; ôŠ¾»à¡…‌.ᢎâ€; [B5, B6, C1, C2, V6]; xn--3vb882jz4411a.xn--79e259a; ; ; # à¡….ᢎ
-ßà§á·­ã€‚Ø 8â‚…; ßà§á·­.Ø 85; ; xn--zca266bwrr.xn--85-psd; ; xn--ss-e2f077r.xn--85-psd; # ßà§á·­.Ø 85
-ßà§á·­ã€‚Ø 85; ßà§á·­.Ø 85; ; xn--zca266bwrr.xn--85-psd; ; xn--ss-e2f077r.xn--85-psd; # ßà§á·­.Ø 85
-SSà§á·­ã€‚Ø 85; ssà§á·­.Ø 85; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
-ssà§á·­ã€‚Ø 85; ssà§á·­.Ø 85; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
-Ssà§á·­ã€‚Ø 85; ssà§á·­.Ø 85; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
-xn--ss-e2f077r.xn--85-psd; ssà§á·­.Ø 85; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
-ssà§á·­.Ø 85; ; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
-SSà§á·­.Ø 85; ssà§á·­.Ø 85; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
-Ssà§á·­.Ø 85; ssà§á·­.Ø 85; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
-xn--zca266bwrr.xn--85-psd; ßà§á·­.Ø 85; ; xn--zca266bwrr.xn--85-psd; ; ; # ßà§á·­.Ø 85
-ßà§á·­.Ø 85; ; ; xn--zca266bwrr.xn--85-psd; ; xn--ss-e2f077r.xn--85-psd; # ßà§á·­.Ø 85
-SSà§á·­ã€‚Ø 8â‚…; ssà§á·­.Ø 85; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
-ssà§á·­ã€‚Ø 8â‚…; ssà§á·­.Ø 85; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
-Ssà§á·­ã€‚Ø 8â‚…; ssà§á·­.Ø 85; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
-à«Ò„é­…ðŸ£ï¼Žâ‚ƒð¹¥ÃŸ; à«Ò„é­…1.3ð¹¥ÃŸ; [B1, V5]; xn--1-0xb049b102o.xn--3-qfa7018r; ; xn--1-0xb049b102o.xn--3ss-nv9t; # à«Ò„é­…1.3ð¹¥ÃŸ
-à«Ò„é­…1.3ð¹¥ÃŸ; ; [B1, V5]; xn--1-0xb049b102o.xn--3-qfa7018r; ; xn--1-0xb049b102o.xn--3ss-nv9t; # à«Ò„é­…1.3ð¹¥ÃŸ
-à«Ò„é­…1.3ð¹¥SS; à«Ò„é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
-à«Ò„é­…1.3ð¹¥ss; ; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
-à«Ò„é­…1.3ð¹¥Ss; à«Ò„é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
-xn--1-0xb049b102o.xn--3ss-nv9t; à«Ò„é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
-xn--1-0xb049b102o.xn--3-qfa7018r; à«Ò„é­…1.3ð¹¥ÃŸ; [B1, V5]; xn--1-0xb049b102o.xn--3-qfa7018r; ; ; # à«Ò„é­…1.3ð¹¥ÃŸ
-à«Ò„é­…ðŸ£ï¼Žâ‚ƒð¹¥SS; à«Ò„é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
-à«Ò„é­…ðŸ£ï¼Žâ‚ƒð¹¥ss; à«Ò„é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
-à«Ò„é­…ðŸ£ï¼Žâ‚ƒð¹¥Ss; à«Ò„é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
-ܫ。𑓂⒈𑜫󠿻; ܫ.𑓂⒈𑜫󠿻; [B1, P1, V5, V6]; xn--1nb.xn--tsh7798f6rbrt828c; ; ; # ܫ.𑓂⒈𑜫
-ܫ。𑓂1.𑜫󠿻; ܫ.𑓂1.𑜫󠿻; [B1, P1, V5, V6]; xn--1nb.xn--1-jq9i.xn--ji2dg9877c; ; ; # ܫ.𑓂1.𑜫
-xn--1nb.xn--1-jq9i.xn--ji2dg9877c; ܫ.𑓂1.𑜫󠿻; [B1, V5, V6]; xn--1nb.xn--1-jq9i.xn--ji2dg9877c; ; ; # ܫ.𑓂1.𑜫
-xn--1nb.xn--tsh7798f6rbrt828c; ܫ.𑓂⒈𑜫󠿻; [B1, V5, V6]; xn--1nb.xn--tsh7798f6rbrt828c; ; ; # ܫ.𑓂⒈𑜫
-ï¸àª›ã€‚嵨; છ.嵨; ; xn--6dc.xn--tot; ; ; # છ.嵨
+xn--8v1d.xn--1ug1386plvx1cd8vya; ð‘‘‚.\u200D󥞀🞕ò¥”; [C2, V5, V6]; xn--8v1d.xn--1ug1386plvx1cd8vya; ; ; # ð‘‘‚.🞕
+-\u05E9。⒚; -\u05E9.⒚; [B1, V3, V6]; xn----gjc.xn--cth; ; ; # -ש.⒚
+-\u05E9。19.; -\u05E9.19.; [B1, V3]; xn----gjc.19.; ; ; # -ש.19.
+xn----gjc.19.; -\u05E9.19.; [B1, V3]; xn----gjc.19.; ; ; # -ש.19.
+xn----gjc.xn--cth; -\u05E9.⒚; [B1, V3, V6]; xn----gjc.xn--cth; ; ; # -ש.⒚
+􊾻\u0845\u200C。ᢎ\u200D; 􊾻\u0845\u200C.ᢎ\u200D; [B5, B6, C1, C2, V6]; xn--3vb882jz4411a.xn--79e259a; ; xn--3vb50049s.xn--79e; [B5, B6, V6] # ࡅ.ᢎ
+􊾻\u0845\u200C。ᢎ\u200D; 􊾻\u0845\u200C.ᢎ\u200D; [B5, B6, C1, C2, V6]; xn--3vb882jz4411a.xn--79e259a; ; xn--3vb50049s.xn--79e; [B5, B6, V6] # ࡅ.ᢎ
+xn--3vb50049s.xn--79e; 􊾻\u0845.ᢎ; [B5, B6, V6]; xn--3vb50049s.xn--79e; ; ; # ࡅ.ᢎ
+xn--3vb882jz4411a.xn--79e259a; 􊾻\u0845\u200C.ᢎ\u200D; [B5, B6, C1, C2, V6]; xn--3vb882jz4411a.xn--79e259a; ; ; # ࡅ.ᢎ
+ß\u09C1\u1DED。\u06208â‚…; ß\u09C1\u1DED.\u062085; ; xn--zca266bwrr.xn--85-psd; ; xn--ss-e2f077r.xn--85-psd; # ßà§á·­.Ø 85
+ß\u09C1\u1DED。\u062085; ß\u09C1\u1DED.\u062085; ; xn--zca266bwrr.xn--85-psd; ; xn--ss-e2f077r.xn--85-psd; # ßà§á·­.Ø 85
+SS\u09C1\u1DED。\u062085; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
+ss\u09C1\u1DED。\u062085; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
+Ss\u09C1\u1DED。\u062085; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
+xn--ss-e2f077r.xn--85-psd; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
+ss\u09C1\u1DED.\u062085; ; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
+SS\u09C1\u1DED.\u062085; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
+Ss\u09C1\u1DED.\u062085; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
+xn--zca266bwrr.xn--85-psd; ß\u09C1\u1DED.\u062085; ; xn--zca266bwrr.xn--85-psd; ; ; # ßà§á·­.Ø 85
+ß\u09C1\u1DED.\u062085; ; ; xn--zca266bwrr.xn--85-psd; ; xn--ss-e2f077r.xn--85-psd; # ßà§á·­.Ø 85
+SS\u09C1\u1DED。\u06208â‚…; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
+ss\u09C1\u1DED。\u06208â‚…; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
+Ss\u09C1\u1DED。\u06208â‚…; ss\u09C1\u1DED.\u062085; ; xn--ss-e2f077r.xn--85-psd; ; ; # ssà§á·­.Ø 85
+\u0ACD\u0484é­…ðŸ£ï¼Žâ‚ƒð¹¥ÃŸ; \u0ACD\u0484é­…1.3ð¹¥ÃŸ; [B1, V5]; xn--1-0xb049b102o.xn--3-qfa7018r; ; xn--1-0xb049b102o.xn--3ss-nv9t; # à«Ò„é­…1.3ð¹¥ÃŸ
+\u0ACD\u0484é­…1.3ð¹¥ÃŸ; ; [B1, V5]; xn--1-0xb049b102o.xn--3-qfa7018r; ; xn--1-0xb049b102o.xn--3ss-nv9t; # à«Ò„é­…1.3ð¹¥ÃŸ
+\u0ACD\u0484é­…1.3ð¹¥SS; \u0ACD\u0484é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
+\u0ACD\u0484é­…1.3ð¹¥ss; ; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
+\u0ACD\u0484é­…1.3ð¹¥Ss; \u0ACD\u0484é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
+xn--1-0xb049b102o.xn--3ss-nv9t; \u0ACD\u0484é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
+xn--1-0xb049b102o.xn--3-qfa7018r; \u0ACD\u0484é­…1.3ð¹¥ÃŸ; [B1, V5]; xn--1-0xb049b102o.xn--3-qfa7018r; ; ; # à«Ò„é­…1.3ð¹¥ÃŸ
+\u0ACD\u0484é­…ðŸ£ï¼Žâ‚ƒð¹¥SS; \u0ACD\u0484é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
+\u0ACD\u0484é­…ðŸ£ï¼Žâ‚ƒð¹¥ss; \u0ACD\u0484é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
+\u0ACD\u0484é­…ðŸ£ï¼Žâ‚ƒð¹¥Ss; \u0ACD\u0484é­…1.3ð¹¥ss; [B1, V5]; xn--1-0xb049b102o.xn--3ss-nv9t; ; ; # à«Ò„é­…1.3ð¹¥ss
+\u072B。𑓂⒈𑜫󠿻; \u072B.𑓂⒈𑜫󠿻; [B1, V5, V6]; xn--1nb.xn--tsh7798f6rbrt828c; ; ; # ܫ.𑓂⒈𑜫
+\u072B。𑓂1.𑜫󠿻; \u072B.𑓂1.𑜫󠿻; [B1, V5, V6]; xn--1nb.xn--1-jq9i.xn--ji2dg9877c; ; ; # ܫ.𑓂1.𑜫
+xn--1nb.xn--1-jq9i.xn--ji2dg9877c; \u072B.𑓂1.𑜫󠿻; [B1, V5, V6]; xn--1nb.xn--1-jq9i.xn--ji2dg9877c; ; ; # ܫ.𑓂1.𑜫
+xn--1nb.xn--tsh7798f6rbrt828c; \u072B.𑓂⒈𑜫󠿻; [B1, V5, V6]; xn--1nb.xn--tsh7798f6rbrt828c; ; ; # ܫ.𑓂⒈𑜫
+\uFE0Dછ。嵨; છ.嵨; ; xn--6dc.xn--tot; ; ; # છ.嵨
xn--6dc.xn--tot; છ.嵨; ; xn--6dc.xn--tot; ; ; # છ.嵨
છ.嵨; ; ; xn--6dc.xn--tot; ; ; # છ.嵨
-Ⴔ≠Ⴀ.ð¹¥ð¹°; ; [B1, P1, V6]; xn--7md3b171g.xn--do0dwa; ; ; # Ⴔ≠Ⴀ.ð¹¥ð¹°
-á‚´≠Ⴀ.ð¹¥ð¹°; Ⴔ≠Ⴀ.ð¹¥ð¹°; [B1, P1, V6]; xn--7md3b171g.xn--do0dwa; ; ; # Ⴔ≠Ⴀ.ð¹¥ð¹°
-â´”≠ⴀ.ð¹¥ð¹°; ⴔ≠ⴀ.ð¹¥ð¹°; [B1, P1, V6]; xn--1ch603bxb.xn--do0dwa; ; ; # ⴔ≠ⴀ.ð¹¥ð¹°
-ⴔ≠ⴀ.ð¹¥ð¹°; ; [B1, P1, V6]; xn--1ch603bxb.xn--do0dwa; ; ; # ⴔ≠ⴀ.ð¹¥ð¹°
-xn--1ch603bxb.xn--do0dwa; ⴔ≠ⴀ.ð¹¥ð¹°; [B1, V6]; xn--1ch603bxb.xn--do0dwa; ; ; # ⴔ≠ⴀ.ð¹¥ð¹°
+Ⴔ≠Ⴀ.ð¹¥ð¹°; ; [B1, V6]; xn--7md3b171g.xn--do0dwa; ; ; # Ⴔ≠Ⴀ.ð¹¥ð¹°
+á‚´=\u0338á‚ .ð¹¥ð¹°; Ⴔ≠Ⴀ.ð¹¥ð¹°; [B1, V6]; xn--7md3b171g.xn--do0dwa; ; ; # Ⴔ≠Ⴀ.ð¹¥ð¹°
+â´”=\u0338â´€.ð¹¥ð¹°; ⴔ≠ⴀ.ð¹¥ð¹°; [B1]; xn--1ch603bxb.xn--do0dwa; ; ; # ⴔ≠ⴀ.ð¹¥ð¹°
+ⴔ≠ⴀ.ð¹¥ð¹°; ; [B1]; xn--1ch603bxb.xn--do0dwa; ; ; # ⴔ≠ⴀ.ð¹¥ð¹°
+xn--1ch603bxb.xn--do0dwa; ⴔ≠ⴀ.ð¹¥ð¹°; [B1]; xn--1ch603bxb.xn--do0dwa; ; ; # ⴔ≠ⴀ.ð¹¥ð¹°
xn--7md3b171g.xn--do0dwa; Ⴔ≠Ⴀ.ð¹¥ð¹°; [B1, V6]; xn--7md3b171g.xn--do0dwa; ; ; # Ⴔ≠Ⴀ.ð¹¥ð¹°
--‌⒙ð«¥ï½¡ð¨µ; -‌⒙ð«¥.ð¨µ; [C1, P1, V3, V5, V6]; xn----sgn18r3191a.xn--382h; ; xn----ddps939g.xn--382h; [P1, V3, V5, V6] # -â’™ð«¥.ð¨µ
--‌18.ð«¥ã€‚ð¨µ; -‌18.ð«¥.ð¨µ; [C1, V3, V5]; xn---18-9m0a.xn--rx9c.xn--382h; ; -18.xn--rx9c.xn--382h; [V3, V5] # -18.ð«¥.ð¨µ
+-\u200Câ’™ð«¥ï½¡ð¨µ; -\u200Câ’™ð«¥.ð¨µ; [C1, V3, V5, V6]; xn----sgn18r3191a.xn--382h; ; xn----ddps939g.xn--382h; [V3, V5, V6] # -â’™ð«¥.ð¨µ
+-\u200C18.ð«¥ã€‚ð¨µ; -\u200C18.ð«¥.ð¨µ; [C1, V3, V5]; xn---18-9m0a.xn--rx9c.xn--382h; ; -18.xn--rx9c.xn--382h; [V3, V5] # -18.ð«¥.ð¨µ
-18.xn--rx9c.xn--382h; -18.ð«¥.ð¨µ; [V3, V5]; -18.xn--rx9c.xn--382h; ; ; # -18.ð«¥.ð¨µ
-xn---18-9m0a.xn--rx9c.xn--382h; -‌18.ð«¥.ð¨µ; [C1, V3, V5]; xn---18-9m0a.xn--rx9c.xn--382h; ; ; # -18.ð«¥.ð¨µ
+xn---18-9m0a.xn--rx9c.xn--382h; -\u200C18.ð«¥.ð¨µ; [C1, V3, V5]; xn---18-9m0a.xn--rx9c.xn--382h; ; ; # -18.ð«¥.ð¨µ
xn----ddps939g.xn--382h; -â’™ð«¥.ð¨µ; [V3, V5, V6]; xn----ddps939g.xn--382h; ; ; # -â’™ð«¥.ð¨µ
-xn----sgn18r3191a.xn--382h; -‌⒙ð«¥.ð¨µ; [C1, V3, V5, V6]; xn----sgn18r3191a.xn--382h; ; ; # -â’™ð«¥.ð¨µ
-︒.ʌᠣ-ð¹½; ; [B1, B5, B6, P1, V6]; xn--y86c.xn----73a596nuh9t; ; ; # ︒.ʌᠣ-ð¹½
+xn----sgn18r3191a.xn--382h; -\u200Câ’™ð«¥.ð¨µ; [C1, V3, V5, V6]; xn----sgn18r3191a.xn--382h; ; ; # -â’™ð«¥.ð¨µ
+︒.ʌᠣ-ð¹½; ; [B1, B5, B6, V6]; xn--y86c.xn----73a596nuh9t; ; ; # ︒.ʌᠣ-ð¹½
。.ʌᠣ-ð¹½; ..ʌᠣ-ð¹½; [B5, B6, X4_2]; ..xn----73a596nuh9t; [B5, B6, A4_2]; ; # ..ʌᠣ-ð¹½
。.É…á £-ð¹½; ..ʌᠣ-ð¹½; [B5, B6, X4_2]; ..xn----73a596nuh9t; [B5, B6, A4_2]; ; # ..ʌᠣ-ð¹½
..xn----73a596nuh9t; ..ʌᠣ-ð¹½; [B5, B6, X4_2]; ..xn----73a596nuh9t; [B5, B6, A4_2]; ; # ..ʌᠣ-ð¹½
-︒.É…á £-ð¹½; ︒.ʌᠣ-ð¹½; [B1, B5, B6, P1, V6]; xn--y86c.xn----73a596nuh9t; ; ; # ︒.ʌᠣ-ð¹½
+︒.É…á £-ð¹½; ︒.ʌᠣ-ð¹½; [B1, B5, B6, V6]; xn--y86c.xn----73a596nuh9t; ; ; # ︒.ʌᠣ-ð¹½
xn--y86c.xn----73a596nuh9t; ︒.ʌᠣ-ð¹½; [B1, B5, B6, V6]; xn--y86c.xn----73a596nuh9t; ; ; # ︒.ʌᠣ-ð¹½
-︅︒。𦀾᳠; ︒.𦀾᳠; [P1, V6]; xn--y86c.xn--t6f5138v; ; ; # ︒.𦀾᳠
-︅。。𦀾᳠; ..𦀾᳠; [X4_2]; ..xn--t6f5138v; [A4_2]; ; # ..𦀾᳠
-..xn--t6f5138v; ..𦀾᳠; [X4_2]; ..xn--t6f5138v; [A4_2]; ; # ..𦀾᳠
-xn--y86c.xn--t6f5138v; ︒.𦀾᳠; [V6]; xn--y86c.xn--t6f5138v; ; ; # ︒.𦀾᳠
-xn--t6f5138v; 𦀾᳠; ; xn--t6f5138v; ; ; # 𦀾᳠
-𦀾᳠; ; ; xn--t6f5138v; ; ; # 𦀾᳠
-𞮑ßôžžã€‚á¡; 𞮑ßôžž.á¡; [B2, B3, P1, V6]; xn--zca9432wb989f.xn--07e; ; xn--ss-o412ac6305g.xn--07e; # ß.á¡
-𞮑SSôžžã€‚á¡; 𞮑ssôžž.á¡; [B2, B3, P1, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.á¡
-𞮑ssôžžã€‚á¡; 𞮑ssôžž.á¡; [B2, B3, P1, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.á¡
-𞮑Ssôžžã€‚á¡; 𞮑ssôžž.á¡; [B2, B3, P1, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.á¡
+\uFE05︒。𦀾\u1CE0; ︒.𦀾\u1CE0; [V6]; xn--y86c.xn--t6f5138v; ; ; # ︒.𦀾᳠
+\uFE05。。𦀾\u1CE0; ..𦀾\u1CE0; [X4_2]; ..xn--t6f5138v; [A4_2]; ; # ..𦀾᳠
+..xn--t6f5138v; ..𦀾\u1CE0; [X4_2]; ..xn--t6f5138v; [A4_2]; ; # ..𦀾᳠
+xn--y86c.xn--t6f5138v; ︒.𦀾\u1CE0; [V6]; xn--y86c.xn--t6f5138v; ; ; # ︒.𦀾᳠
+xn--t6f5138v; 𦀾\u1CE0; ; xn--t6f5138v; ; ; # 𦀾᳠
+𦀾\u1CE0; ; ; xn--t6f5138v; ; ; # 𦀾᳠
+𞮑ßôžžã€‚á¡; 𞮑ßôžž.á¡; [B2, B3, V6]; xn--zca9432wb989f.xn--07e; ; xn--ss-o412ac6305g.xn--07e; # ß.á¡
+𞮑SSôžžã€‚á¡; 𞮑ssôžž.á¡; [B2, B3, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.á¡
+𞮑ssôžžã€‚á¡; 𞮑ssôžž.á¡; [B2, B3, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.á¡
+𞮑Ssôžžã€‚á¡; 𞮑ssôžž.á¡; [B2, B3, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.á¡
xn--ss-o412ac6305g.xn--07e; 𞮑ssôžž.á¡; [B2, B3, V6]; xn--ss-o412ac6305g.xn--07e; ; ; # ss.á¡
xn--zca9432wb989f.xn--07e; 𞮑ßôžž.á¡; [B2, B3, V6]; xn--zca9432wb989f.xn--07e; ; ; # ß.á¡
-꥓â€Ø¬Ù¬ã€‚𱆎󻡟‌󠅆; ꥓â€Ø¬Ù¬.𱆎󻡟‌; [B5, B6, C1, P1, V5, V6]; xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ; xn--rgb2k6711c.xn--ec8nj3948b; [B5, B6, P1, V5, V6] # ꥓ج٬.𱆎
-xn--rgb2k6711c.xn--ec8nj3948b; ꥓ج٬.𱆎󻡟; [B5, B6, V5, V6]; xn--rgb2k6711c.xn--ec8nj3948b; ; ; # ꥓ج٬.𱆎
-xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ꥓â€Ø¬Ù¬.𱆎󻡟‌; [B5, B6, C1, V5, V6]; xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ; ; # ꥓ج٬.𱆎
-ó •ï¼Ž-ß‌≠; ó •.-ß‌≠; [C1, P1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ß≠
-ó •ï¼Ž-ß‌≠; ó •.-ß‌≠; [C1, P1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ß≠
-ó •.-ß‌≠; ; [C1, P1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ß≠
-ó •.-ß‌≠; ó •.-ß‌≠; [C1, P1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ß≠
-ó •.-SS‌≠; ó •.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
-ó •.-SS‌≠; ó •.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
-ó •.-ss‌≠; ; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
-ó •.-ss‌≠; ó •.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
-ó •.-Ss‌≠; ó •.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
-ó •.-Ss‌≠; ó •.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
+\uA953\u200D\u062C\u066C。𱆎󻡟\u200C󠅆; \uA953\u200D\u062C\u066C.𱆎󻡟\u200C; [B5, B6, C1, V5, V6]; xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ; xn--rgb2k6711c.xn--ec8nj3948b; [B5, B6, V5, V6] # ꥓ج٬.𱆎
+xn--rgb2k6711c.xn--ec8nj3948b; \uA953\u062C\u066C.𱆎󻡟; [B5, B6, V5, V6]; xn--rgb2k6711c.xn--ec8nj3948b; ; ; # ꥓ج٬.𱆎
+xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; \uA953\u200D\u062C\u066C.𱆎󻡟\u200C; [B5, B6, C1, V5, V6]; xn--rgb2k500fhq9j.xn--0ug78870a5sp9d; ; ; # ꥓ج٬.𱆎
+ó •ï¼Ž-ß\u200C≠; ó •.-ß\u200C≠; [C1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ß≠
+ó •ï¼Ž-ß\u200C=\u0338; ó •.-ß\u200C≠; [C1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ß≠
+ó •.-ß\u200C≠; ; [C1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ß≠
+ó •.-ß\u200C=\u0338; ó •.-ß\u200C≠; [C1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ß≠
+ó •.-SS\u200C=\u0338; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
+ó •.-SS\u200C≠; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
+ó •.-ss\u200C≠; ; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
+ó •.-ss\u200C=\u0338; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
+ó •.-Ss\u200C=\u0338; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
+ó •.-Ss\u200C≠; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
xn--u836e.xn---ss-gl2a; ó •.-ss≠; [V3, V6]; xn--u836e.xn---ss-gl2a; ; ; # .-ss≠
-xn--u836e.xn---ss-cn0at5l; ó •.-ss‌≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; ; # .-ss≠
-xn--u836e.xn----qfa750ve7b; ó •.-ß‌≠; [C1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; ; # .-ß≠
-ó •ï¼Ž-SS‌≠; ó •.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
-ó •ï¼Ž-SS‌≠; ó •.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
-ó •ï¼Ž-ss‌≠; ó •.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
-ó •ï¼Ž-ss‌≠; ó •.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
-ó •ï¼Ž-Ss‌≠; ó •.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
-ó •ï¼Ž-Ss‌≠; ó •.-ss‌≠; [C1, P1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [P1, V3, V6] # .-ss≠
-ᡙ‌。≯ð‹²â‰ ; ᡙ‌.≯ð‹²â‰ ; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # á¡™.≯ð‹²â‰ 
-ᡙ‌。≯ð‹²≠; ᡙ‌.≯ð‹²â‰ ; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # á¡™.≯ð‹²â‰ 
-ᡙ‌。≯ð‹²â‰ ; ᡙ‌.≯ð‹²â‰ ; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # á¡™.≯ð‹²â‰ 
-ᡙ‌。≯ð‹²≠; ᡙ‌.≯ð‹²â‰ ; [C1, P1, V6]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [P1, V6] # á¡™.≯ð‹²â‰ 
-xn--p8e.xn--1ch3a7084l; á¡™.≯ð‹²â‰ ; [V6]; xn--p8e.xn--1ch3a7084l; ; ; # á¡™.≯ð‹²â‰ 
-xn--p8e650b.xn--1ch3a7084l; ᡙ‌.≯ð‹²â‰ ; [C1, V6]; xn--p8e650b.xn--1ch3a7084l; ; ; # á¡™.≯ð‹²â‰ 
-ð¹§ðž²„ó ­ñ†¼©ã€‚͎🄀; ð¹§ðž²„ó ­ñ†¼©.͎🄀; [B1, P1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--sua6883w; ; ; # ð¹§ðž²„.͎🄀
-ð¹§ðž²„ó ­ñ†¼©ã€‚ÍŽ0.; ð¹§ðž²„ó ­ñ†¼©.ÍŽ0.; [B1, P1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--0-bgb.; ; ; # ð¹§ðž²„.ÍŽ0.
-xn--fo0dw409aq58qrn69d.xn--0-bgb.; ð¹§ðž²„ó ­ñ†¼©.ÍŽ0.; [B1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--0-bgb.; ; ; # ð¹§ðž²„.ÍŽ0.
-xn--fo0dw409aq58qrn69d.xn--sua6883w; ð¹§ðž²„ó ­ñ†¼©.͎🄀; [B1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--sua6883w; ; ; # ð¹§ðž²„.͎🄀
-Ⴄ.â€Ü¡ó»£‹Ï‚; Ⴄ.â€Ü¡ó»£‹Ï‚; [B1, C2, P1, V6]; xn--cnd.xn--3xa93o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, P1, V6] # Ⴄ.Ü¡Ï‚
-Ⴄ.â€Ü¡ó»£‹Ï‚; ; [B1, C2, P1, V6]; xn--cnd.xn--3xa93o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, P1, V6] # Ⴄ.Ü¡Ï‚
-â´„.â€Ü¡ó»£‹Ï‚; ; [B1, C2, P1, V6]; xn--vkj.xn--3xa93o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, P1, V6] # â´„.Ü¡Ï‚
-Ⴄ.â€Ü¡ó»£‹Î£; Ⴄ.â€Ü¡ó»£‹Ïƒ; [B1, C2, P1, V6]; xn--cnd.xn--4xa73o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, P1, V6] # Ⴄ.ܡσ
-â´„.â€Ü¡ó»£‹Ïƒ; ; [B1, C2, P1, V6]; xn--vkj.xn--4xa73o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, P1, V6] # â´„.ܡσ
-xn--vkj.xn--4xa73ob5892c; ⴄ.ܡ󻣋σ; [B2, B3, V6]; xn--vkj.xn--4xa73ob5892c; ; ; # ⴄ.ܡσ
-xn--vkj.xn--4xa73o3t5ajq467a; â´„.â€Ü¡ó»£‹Ïƒ; [B1, C2, V6]; xn--vkj.xn--4xa73o3t5ajq467a; ; ; # â´„.ܡσ
-xn--cnd.xn--4xa73ob5892c; Ⴄ.ܡ󻣋σ; [B2, B3, V6]; xn--cnd.xn--4xa73ob5892c; ; ; # Ⴄ.ܡσ
-xn--cnd.xn--4xa73o3t5ajq467a; Ⴄ.â€Ü¡ó»£‹Ïƒ; [B1, C2, V6]; xn--cnd.xn--4xa73o3t5ajq467a; ; ; # Ⴄ.ܡσ
-xn--vkj.xn--3xa93o3t5ajq467a; â´„.â€Ü¡ó»£‹Ï‚; [B1, C2, V6]; xn--vkj.xn--3xa93o3t5ajq467a; ; ; # â´„.Ü¡Ï‚
-xn--cnd.xn--3xa93o3t5ajq467a; Ⴄ.â€Ü¡ó»£‹Ï‚; [B1, C2, V6]; xn--cnd.xn--3xa93o3t5ajq467a; ; ; # Ⴄ.Ü¡Ï‚
-ⴄ.â€Ü¡ó»£‹Ï‚; â´„.â€Ü¡ó»£‹Ï‚; [B1, C2, P1, V6]; xn--vkj.xn--3xa93o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, P1, V6] # â´„.Ü¡Ï‚
-Ⴄ.â€Ü¡ó»£‹Î£; Ⴄ.â€Ü¡ó»£‹Ïƒ; [B1, C2, P1, V6]; xn--cnd.xn--4xa73o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, P1, V6] # Ⴄ.ܡσ
-ⴄ.â€Ü¡ó»£‹Ïƒ; â´„.â€Ü¡ó»£‹Ïƒ; [B1, C2, P1, V6]; xn--vkj.xn--4xa73o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, P1, V6] # â´„.ܡσ
-򮵛ؓ.Ⴕ; ; [P1, V6]; xn--1fb94204l.xn--tnd; ; ; # ؓ.Ⴕ
-򮵛ؓ.ⴕ; ; [P1, V6]; xn--1fb94204l.xn--dlj; ; ; # ؓ.ⴕ
-xn--1fb94204l.xn--dlj; 򮵛ؓ.ⴕ; [V6]; xn--1fb94204l.xn--dlj; ; ; # ؓ.ⴕ
-xn--1fb94204l.xn--tnd; 򮵛ؓ.Ⴕ; [V6]; xn--1fb94204l.xn--tnd; ; ; # ؓ.Ⴕ
-≯ᷳ𞤥。‌꣄󠪉â€; ≯ᷳ𞤥.‌꣄󠪉â€; [B1, C1, C2, P1, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, P1, V5, V6] # ≯ᷳ𞤥.꣄
-≯ᷳ𞤥。‌꣄󠪉â€; ≯ᷳ𞤥.‌꣄󠪉â€; [B1, C1, C2, P1, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, P1, V5, V6] # ≯ᷳ𞤥.꣄
-≯ᷳ𞤃。‌꣄󠪉â€; ≯ᷳ𞤥.‌꣄󠪉â€; [B1, C1, C2, P1, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, P1, V5, V6] # ≯ᷳ𞤥.꣄
-≯ᷳ𞤃。‌꣄󠪉â€; ≯ᷳ𞤥.‌꣄󠪉â€; [B1, C1, C2, P1, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, P1, V5, V6] # ≯ᷳ𞤥.꣄
-xn--ofg13qyr21c.xn--0f9au6706d; ≯ᷳ𞤥.꣄󠪉; [B1, V5, V6]; xn--ofg13qyr21c.xn--0f9au6706d; ; ; # ≯ᷳ𞤥.꣄
-xn--ofg13qyr21c.xn--0ugc0116hix29k; ≯ᷳ𞤥.‌꣄󠪉â€; [B1, C1, C2, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; ; # ≯ᷳ𞤥.꣄
-‌󠄷。ò’‘; ‌.ò’‘; [C1, P1, V6]; xn--0ug.xn--w720c; ; .xn--w720c; [P1, V6, A4_2] # .
-‌󠄷。ò’‘; ‌.ò’‘; [C1, P1, V6]; xn--0ug.xn--w720c; ; .xn--w720c; [P1, V6, A4_2] # .
+xn--u836e.xn---ss-cn0at5l; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; ; # .-ss≠
+xn--u836e.xn----qfa750ve7b; ó •.-ß\u200C≠; [C1, V3, V6]; xn--u836e.xn----qfa750ve7b; ; ; # .-ß≠
+ó •ï¼Ž-SS\u200C=\u0338; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
+ó •ï¼Ž-SS\u200C≠; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
+ó •ï¼Ž-ss\u200C≠; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
+ó •ï¼Ž-ss\u200C=\u0338; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
+ó •ï¼Ž-Ss\u200C=\u0338; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
+ó •ï¼Ž-Ss\u200C≠; ó •.-ss\u200C≠; [C1, V3, V6]; xn--u836e.xn---ss-cn0at5l; ; xn--u836e.xn---ss-gl2a; [V3, V6] # .-ss≠
+á¡™\u200C。≯ð‹²â‰ ; á¡™\u200C.≯ð‹²â‰ ; [C1]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [] # á¡™.≯ð‹²â‰ 
+á¡™\u200C。>\u0338ð‹²=\u0338; á¡™\u200C.≯ð‹²â‰ ; [C1]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [] # á¡™.≯ð‹²â‰ 
+á¡™\u200C。≯ð‹²â‰ ; á¡™\u200C.≯ð‹²â‰ ; [C1]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [] # á¡™.≯ð‹²â‰ 
+á¡™\u200C。>\u0338ð‹²=\u0338; á¡™\u200C.≯ð‹²â‰ ; [C1]; xn--p8e650b.xn--1ch3a7084l; ; xn--p8e.xn--1ch3a7084l; [] # á¡™.≯ð‹²â‰ 
+xn--p8e.xn--1ch3a7084l; á¡™.≯ð‹²â‰ ; ; xn--p8e.xn--1ch3a7084l; ; ; # á¡™.≯ð‹²â‰ 
+á¡™.≯ð‹²â‰ ; ; ; xn--p8e.xn--1ch3a7084l; ; ; # á¡™.≯ð‹²â‰ 
+á¡™.>\u0338ð‹²=\u0338; á¡™.≯ð‹²â‰ ; ; xn--p8e.xn--1ch3a7084l; ; ; # á¡™.≯ð‹²â‰ 
+xn--p8e650b.xn--1ch3a7084l; á¡™\u200C.≯ð‹²â‰ ; [C1]; xn--p8e650b.xn--1ch3a7084l; ; ; # á¡™.≯ð‹²â‰ 
+ð¹§ðž²„ó ­ñ†¼©ã€‚\u034E🄀; ð¹§ðž²„ó ­ñ†¼©.\u034E🄀; [B1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--sua6883w; ; ; # ð¹§ðž²„.͎🄀
+ð¹§ðž²„ó ­ñ†¼©ã€‚\u034E0.; ð¹§ðž²„ó ­ñ†¼©.\u034E0.; [B1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--0-bgb.; ; ; # ð¹§ðž²„.ÍŽ0.
+xn--fo0dw409aq58qrn69d.xn--0-bgb.; ð¹§ðž²„ó ­ñ†¼©.\u034E0.; [B1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--0-bgb.; ; ; # ð¹§ðž²„.ÍŽ0.
+xn--fo0dw409aq58qrn69d.xn--sua6883w; ð¹§ðž²„ó ­ñ†¼©.\u034E🄀; [B1, V5, V6]; xn--fo0dw409aq58qrn69d.xn--sua6883w; ; ; # ð¹§ðž²„.͎🄀
+Ⴄ.\u200D\u0721󻣋ς; Ⴄ.\u200D\u0721󻣋ς; [B1, C2, V6]; xn--cnd.xn--3xa93o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, V6] # Ⴄ.ܡς
+Ⴄ.\u200D\u0721󻣋ς; ; [B1, C2, V6]; xn--cnd.xn--3xa93o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, V6] # Ⴄ.ܡς
+ⴄ.\u200D\u0721󻣋ς; ; [B1, C2, V6]; xn--vkj.xn--3xa93o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, V6] # ⴄ.ܡς
+Ⴄ.\u200D\u0721󻣋Σ; Ⴄ.\u200D\u0721󻣋σ; [B1, C2, V6]; xn--cnd.xn--4xa73o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, V6] # Ⴄ.ܡσ
+ⴄ.\u200D\u0721󻣋σ; ; [B1, C2, V6]; xn--vkj.xn--4xa73o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, V6] # ⴄ.ܡσ
+xn--vkj.xn--4xa73ob5892c; ⴄ.\u0721󻣋σ; [B2, B3, V6]; xn--vkj.xn--4xa73ob5892c; ; ; # ⴄ.ܡσ
+xn--vkj.xn--4xa73o3t5ajq467a; ⴄ.\u200D\u0721󻣋σ; [B1, C2, V6]; xn--vkj.xn--4xa73o3t5ajq467a; ; ; # ⴄ.ܡσ
+xn--cnd.xn--4xa73ob5892c; Ⴄ.\u0721󻣋σ; [B2, B3, V6]; xn--cnd.xn--4xa73ob5892c; ; ; # Ⴄ.ܡσ
+xn--cnd.xn--4xa73o3t5ajq467a; Ⴄ.\u200D\u0721󻣋σ; [B1, C2, V6]; xn--cnd.xn--4xa73o3t5ajq467a; ; ; # Ⴄ.ܡσ
+xn--vkj.xn--3xa93o3t5ajq467a; ⴄ.\u200D\u0721󻣋ς; [B1, C2, V6]; xn--vkj.xn--3xa93o3t5ajq467a; ; ; # ⴄ.ܡς
+xn--cnd.xn--3xa93o3t5ajq467a; Ⴄ.\u200D\u0721󻣋ς; [B1, C2, V6]; xn--cnd.xn--3xa93o3t5ajq467a; ; ; # Ⴄ.ܡς
+ⴄ.\u200D\u0721󻣋ς; ⴄ.\u200D\u0721󻣋ς; [B1, C2, V6]; xn--vkj.xn--3xa93o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, V6] # ⴄ.ܡς
+Ⴄ.\u200D\u0721󻣋Σ; Ⴄ.\u200D\u0721󻣋σ; [B1, C2, V6]; xn--cnd.xn--4xa73o3t5ajq467a; ; xn--cnd.xn--4xa73ob5892c; [B2, B3, V6] # Ⴄ.ܡσ
+ⴄ.\u200D\u0721󻣋σ; ⴄ.\u200D\u0721󻣋σ; [B1, C2, V6]; xn--vkj.xn--4xa73o3t5ajq467a; ; xn--vkj.xn--4xa73ob5892c; [B2, B3, V6] # ⴄ.ܡσ
+򮵛\u0613.Ⴕ; ; [V6]; xn--1fb94204l.xn--tnd; ; ; # ؓ.Ⴕ
+ò®µ›\u0613.â´•; ; [V6]; xn--1fb94204l.xn--dlj; ; ; # Ø“.â´•
+xn--1fb94204l.xn--dlj; ò®µ›\u0613.â´•; [V6]; xn--1fb94204l.xn--dlj; ; ; # Ø“.â´•
+xn--1fb94204l.xn--tnd; 򮵛\u0613.Ⴕ; [V6]; xn--1fb94204l.xn--tnd; ; ; # ؓ.Ⴕ
+≯\u1DF3𞤥。\u200C\uA8C4󠪉\u200D; ≯\u1DF3𞤥.\u200C\uA8C4󠪉\u200D; [B1, C1, C2, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, V5, V6] # ≯ᷳ𞤥.꣄
+>\u0338\u1DF3𞤥。\u200C\uA8C4󠪉\u200D; ≯\u1DF3𞤥.\u200C\uA8C4󠪉\u200D; [B1, C1, C2, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, V5, V6] # ≯ᷳ𞤥.꣄
+>\u0338\u1DF3𞤃。\u200C\uA8C4󠪉\u200D; ≯\u1DF3𞤥.\u200C\uA8C4󠪉\u200D; [B1, C1, C2, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, V5, V6] # ≯ᷳ𞤥.꣄
+≯\u1DF3𞤃。\u200C\uA8C4󠪉\u200D; ≯\u1DF3𞤥.\u200C\uA8C4󠪉\u200D; [B1, C1, C2, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; xn--ofg13qyr21c.xn--0f9au6706d; [B1, V5, V6] # ≯ᷳ𞤥.꣄
+xn--ofg13qyr21c.xn--0f9au6706d; ≯\u1DF3𞤥.\uA8C4󠪉; [B1, V5, V6]; xn--ofg13qyr21c.xn--0f9au6706d; ; ; # ≯ᷳ𞤥.꣄
+xn--ofg13qyr21c.xn--0ugc0116hix29k; ≯\u1DF3𞤥.\u200C\uA8C4󠪉\u200D; [B1, C1, C2, V6]; xn--ofg13qyr21c.xn--0ugc0116hix29k; ; ; # ≯ᷳ𞤥.꣄
+\u200C󠄷。ò’‘; \u200C.ò’‘; [C1, V6]; xn--0ug.xn--w720c; ; .xn--w720c; [V6, A4_2] # .
+\u200C󠄷。ò’‘; \u200C.ò’‘; [C1, V6]; xn--0ug.xn--w720c; ; .xn--w720c; [V6, A4_2] # .
.xn--w720c; .ò’‘; [V6, X4_2]; .xn--w720c; [V6, A4_2]; ; # .
-xn--0ug.xn--w720c; ‌.ò’‘; [C1, V6]; xn--0ug.xn--w720c; ; ; # .
-⒈ූ焅.ó—¡™â€ê¡Ÿ; ; [C2, P1, V6]; xn--t1c337io97c.xn--1ugz184c9lw7i; ; xn--t1c337io97c.xn--4c9a21133d; [P1, V6] # ⒈ූ焅.ê¡Ÿ
-1.à·–ç„….ó—¡™â€ê¡Ÿ; ; [C2, P1, V5, V6]; 1.xn--t1c6981c.xn--1ugz184c9lw7i; ; 1.xn--t1c6981c.xn--4c9a21133d; [P1, V5, V6] # 1.à·–ç„….ê¡Ÿ
-1.xn--t1c6981c.xn--4c9a21133d; 1.ූ焅.󗡙ꡟ; [V5, V6]; 1.xn--t1c6981c.xn--4c9a21133d; ; ; # 1.ූ焅.ꡟ
-1.xn--t1c6981c.xn--1ugz184c9lw7i; 1.à·–ç„….ó—¡™â€ê¡Ÿ; [C2, V5, V6]; 1.xn--t1c6981c.xn--1ugz184c9lw7i; ; ; # 1.à·–ç„….ê¡Ÿ
-xn--t1c337io97c.xn--4c9a21133d; ⒈ූ焅.󗡙ꡟ; [V6]; xn--t1c337io97c.xn--4c9a21133d; ; ; # ⒈ූ焅.ꡟ
-xn--t1c337io97c.xn--1ugz184c9lw7i; ⒈ූ焅.ó—¡™â€ê¡Ÿ; [C2, V6]; xn--t1c337io97c.xn--1ugz184c9lw7i; ; ; # ⒈ූ焅.ê¡Ÿ
-á·Ï‚≮.Ï‚ðª¦ðž¤•0; á·Ï‚≮.Ï‚ðª¦ðž¤·0; [B1, B5, P1, V5, V6]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # á·Ï‚≮.Ï‚ðª¦ðž¤·0
-á·Ï‚≮.Ï‚ðª¦ðž¤•0; á·Ï‚≮.Ï‚ðª¦ðž¤·0; [B1, B5, P1, V5, V6]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # á·Ï‚≮.Ï‚ðª¦ðž¤·0
-á·Ï‚≮.Ï‚ðª¦ðž¤·0; á·Ï‚≮.Ï‚ðª¦ðž¤·0; [B1, B5, P1, V5, V6]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # á·Ï‚≮.Ï‚ðª¦ðž¤·0
-á·Ï‚≮.Ï‚ðª¦ðž¤·0; ; [B1, B5, P1, V5, V6]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # á·Ï‚≮.Ï‚ðª¦ðž¤·0
-á·Î£â‰®.Σðª¦ðž¤•0; á·Ïƒâ‰®.σðª¦ðž¤·0; [B1, B5, P1, V5, V6]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
-á·Î£≮.Σðª¦ðž¤•0; á·Ïƒâ‰®.σðª¦ðž¤·0; [B1, B5, P1, V5, V6]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
-á·Ïƒ≮.σðª¦ðž¤·0; á·Ïƒâ‰®.σðª¦ðž¤·0; [B1, B5, P1, V5, V6]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
-á·Ïƒâ‰®.σðª¦ðž¤·0; ; [B1, B5, P1, V5, V6]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
-á·Î£â‰®.Σðª¦ðž¤·0; á·Ïƒâ‰®.σðª¦ðž¤·0; [B1, B5, P1, V5, V6]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
-á·Î£≮.Σðª¦ðž¤·0; á·Ïƒâ‰®.σðª¦ðž¤·0; [B1, B5, P1, V5, V6]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
-xn--4xa544kvid.xn--0-zmb55727aggma; á·Ïƒâ‰®.σðª¦ðž¤·0; [B1, B5, V5, V6]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
-xn--3xa744kvid.xn--0-xmb85727aggma; á·Ï‚≮.Ï‚ðª¦ðž¤·0; [B1, B5, V5, V6]; xn--3xa744kvid.xn--0-xmb85727aggma; ; ; # á·Ï‚≮.Ï‚ðª¦ðž¤·0
-á·Ïƒâ‰®.σðª¦ðž¤•0; á·Ïƒâ‰®.σðª¦ðž¤·0; [B1, B5, P1, V5, V6]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
-á·Ïƒ≮.σðª¦ðž¤•0; á·Ïƒâ‰®.σðª¦ðž¤·0; [B1, B5, P1, V5, V6]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
-ò¢¦¾ÃŸÖ¹ð«™.֭ࢡ; ; [B1, B5, B6, P1, V5, V6]; xn--zca89v339zj118e.xn--4cb62m; ; xn--ss-xjd6058xlz50g.xn--4cb62m; # ßֹð«™.֭ࢡ
-ò¢¦¾SSÖ¹ð«™.֭ࢡ; ò¢¦¾ssÖ¹ð«™.֭ࢡ; [B1, B5, B6, P1, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssÖ¹ð«™.֭ࢡ
-ò¢¦¾ssÖ¹ð«™.֭ࢡ; ; [B1, B5, B6, P1, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssÖ¹ð«™.֭ࢡ
-ò¢¦¾SsÖ¹ð«™.֭ࢡ; ò¢¦¾ssÖ¹ð«™.֭ࢡ; [B1, B5, B6, P1, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssÖ¹ð«™.֭ࢡ
-xn--ss-xjd6058xlz50g.xn--4cb62m; ò¢¦¾ssÖ¹ð«™.֭ࢡ; [B1, B5, B6, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssÖ¹ð«™.֭ࢡ
-xn--zca89v339zj118e.xn--4cb62m; ò¢¦¾ÃŸÖ¹ð«™.֭ࢡ; [B1, B5, B6, V5, V6]; xn--zca89v339zj118e.xn--4cb62m; ; ; # ßֹð«™.֭ࢡ
--𞣄。⒈; -𞣄.⒈; [B1, P1, V3, V6]; xn----xc8r.xn--tsh; ; ; # -𞣄.⒈
+xn--0ug.xn--w720c; \u200C.ò’‘; [C1, V6]; xn--0ug.xn--w720c; ; ; # .
+⒈\u0DD6焅.󗡙\u200Dꡟ; ; [C2, V6]; xn--t1c337io97c.xn--1ugz184c9lw7i; ; xn--t1c337io97c.xn--4c9a21133d; [V6] # ⒈ූ焅.ꡟ
+1.\u0DD6ç„….ó—¡™\u200Dê¡Ÿ; ; [C2, V5, V6]; 1.xn--t1c6981c.xn--1ugz184c9lw7i; ; 1.xn--t1c6981c.xn--4c9a21133d; [V5, V6] # 1.à·–ç„….ê¡Ÿ
+1.xn--t1c6981c.xn--4c9a21133d; 1.\u0DD6焅.󗡙ꡟ; [V5, V6]; 1.xn--t1c6981c.xn--4c9a21133d; ; ; # 1.ූ焅.ꡟ
+1.xn--t1c6981c.xn--1ugz184c9lw7i; 1.\u0DD6ç„….ó—¡™\u200Dê¡Ÿ; [C2, V5, V6]; 1.xn--t1c6981c.xn--1ugz184c9lw7i; ; ; # 1.à·–ç„….ê¡Ÿ
+xn--t1c337io97c.xn--4c9a21133d; ⒈\u0DD6焅.󗡙ꡟ; [V6]; xn--t1c337io97c.xn--4c9a21133d; ; ; # ⒈ූ焅.ꡟ
+xn--t1c337io97c.xn--1ugz184c9lw7i; ⒈\u0DD6焅.󗡙\u200Dꡟ; [C2, V6]; xn--t1c337io97c.xn--1ugz184c9lw7i; ; ; # ⒈ූ焅.ꡟ
+\u1DCDς≮.Ï‚ðª¦ðž¤•0; \u1DCDς≮.Ï‚ðª¦ðž¤·0; [B1, B5, V5]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # á·Ï‚≮.Ï‚ðª¦ðž¤·0
+\u1DCDÏ‚<\u0338.Ï‚ðª¦ðž¤•0; \u1DCDς≮.Ï‚ðª¦ðž¤·0; [B1, B5, V5]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # á·Ï‚≮.Ï‚ðª¦ðž¤·0
+\u1DCDÏ‚<\u0338.Ï‚ðª¦ðž¤·0; \u1DCDς≮.Ï‚ðª¦ðž¤·0; [B1, B5, V5]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # á·Ï‚≮.Ï‚ðª¦ðž¤·0
+\u1DCDς≮.Ï‚ðª¦ðž¤·0; ; [B1, B5, V5]; xn--3xa744kvid.xn--0-xmb85727aggma; ; xn--4xa544kvid.xn--0-zmb55727aggma; # á·Ï‚≮.Ï‚ðª¦ðž¤·0
+\u1DCDΣ≮.Σðª¦ðž¤•0; \u1DCDσ≮.σðª¦ðž¤·0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
+\u1DCDΣ<\u0338.Σðª¦ðž¤•0; \u1DCDσ≮.σðª¦ðž¤·0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
+\u1DCDσ<\u0338.σðª¦ðž¤·0; \u1DCDσ≮.σðª¦ðž¤·0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
+\u1DCDσ≮.σðª¦ðž¤·0; ; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
+\u1DCDΣ≮.Σðª¦ðž¤·0; \u1DCDσ≮.σðª¦ðž¤·0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
+\u1DCDΣ<\u0338.Σðª¦ðž¤·0; \u1DCDσ≮.σðª¦ðž¤·0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
+xn--4xa544kvid.xn--0-zmb55727aggma; \u1DCDσ≮.σðª¦ðž¤·0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
+xn--3xa744kvid.xn--0-xmb85727aggma; \u1DCDς≮.Ï‚ðª¦ðž¤·0; [B1, B5, V5]; xn--3xa744kvid.xn--0-xmb85727aggma; ; ; # á·Ï‚≮.Ï‚ðª¦ðž¤·0
+\u1DCDσ≮.σðª¦ðž¤•0; \u1DCDσ≮.σðª¦ðž¤·0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
+\u1DCDσ<\u0338.σðª¦ðž¤•0; \u1DCDσ≮.σðª¦ðž¤·0; [B1, B5, V5]; xn--4xa544kvid.xn--0-zmb55727aggma; ; ; # á·Ïƒâ‰®.σðª¦ðž¤·0
+ò¢¦¾ÃŸ\u05B9ð«™.\u05AD\u08A1; ; [B1, B5, B6, V5, V6]; xn--zca89v339zj118e.xn--4cb62m; ; xn--ss-xjd6058xlz50g.xn--4cb62m; # ßֹð«™.֭ࢡ
+ò¢¦¾SS\u05B9ð«™.\u05AD\u08A1; ò¢¦¾ss\u05B9ð«™.\u05AD\u08A1; [B1, B5, B6, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssÖ¹ð«™.֭ࢡ
+ò¢¦¾ss\u05B9ð«™.\u05AD\u08A1; ; [B1, B5, B6, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssÖ¹ð«™.֭ࢡ
+ò¢¦¾Ss\u05B9ð«™.\u05AD\u08A1; ò¢¦¾ss\u05B9ð«™.\u05AD\u08A1; [B1, B5, B6, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssÖ¹ð«™.֭ࢡ
+xn--ss-xjd6058xlz50g.xn--4cb62m; ò¢¦¾ss\u05B9ð«™.\u05AD\u08A1; [B1, B5, B6, V5, V6]; xn--ss-xjd6058xlz50g.xn--4cb62m; ; ; # ssÖ¹ð«™.֭ࢡ
+xn--zca89v339zj118e.xn--4cb62m; ò¢¦¾ÃŸ\u05B9ð«™.\u05AD\u08A1; [B1, B5, B6, V5, V6]; xn--zca89v339zj118e.xn--4cb62m; ; ; # ßֹð«™.֭ࢡ
+-𞣄。⒈; -𞣄.⒈; [B1, V3, V6]; xn----xc8r.xn--tsh; ; ; # -𞣄.⒈
-𞣄。1.; -𞣄.1.; [B1, V3]; xn----xc8r.1.; ; ; # -𞣄.1.
xn----xc8r.1.; -𞣄.1.; [B1, V3]; xn----xc8r.1.; ; ; # -𞣄.1.
xn----xc8r.xn--tsh; -𞣄.⒈; [B1, V3, V6]; xn----xc8r.xn--tsh; ; ; # -𞣄.⒈
-ñˆ ¢ð«–ðŸ¡ã€‚ؾ𑘿; ñˆ ¢ð«–9.ؾ𑘿; [B5, P1, V6]; xn--9-el5iv442t.xn--9gb0830l; ; ; # ð«–9.ؾ𑘿
-ñˆ ¢ð«–9。ؾ𑘿; ñˆ ¢ð«–9.ؾ𑘿; [B5, P1, V6]; xn--9-el5iv442t.xn--9gb0830l; ; ; # ð«–9.ؾ𑘿
-xn--9-el5iv442t.xn--9gb0830l; ñˆ ¢ð«–9.ؾ𑘿; [B5, V6]; xn--9-el5iv442t.xn--9gb0830l; ; ; # ð«–9.ؾ𑘿
-٨ﲌ٨á©.â€; ٨نم٨á©.â€; [B1, C2]; xn--hhbb5hc956w.xn--1ug; ; xn--hhbb5hc956w.; [B1] # ٨نم٨á©.
-٨نم٨á©.â€; ; [B1, C2]; xn--hhbb5hc956w.xn--1ug; ; xn--hhbb5hc956w.; [B1] # ٨نم٨á©.
-xn--hhbb5hc956w.; ٨نم٨á©.; [B1]; xn--hhbb5hc956w.; ; ; # ٨نم٨á©.
-xn--hhbb5hc956w.xn--1ug; ٨نم٨á©.â€; [B1, C2]; xn--hhbb5hc956w.xn--1ug; ; ; # ٨نم٨á©.
-ðŸ˜ï¼Žá‚§ó€³‘ïµñ«ƒ±; 0.Ⴇ󀳑تجمñ«ƒ±; [B1, B5, P1, V6]; 0.xn--pgbe9e344c2725svff8b; ; ; # 0.Ⴇتجم
-0.Ⴇ󀳑تجم񫃱; ; [B1, B5, P1, V6]; 0.xn--pgbe9e344c2725svff8b; ; ; # 0.Ⴇتجم
-0.ⴇ󀳑تجم񫃱; ; [B1, B5, P1, V6]; 0.xn--pgbe9ez79qd207lvff8b; ; ; # 0.ⴇتجم
-0.xn--pgbe9ez79qd207lvff8b; 0.ⴇ󀳑تجم񫃱; [B1, B5, V6]; 0.xn--pgbe9ez79qd207lvff8b; ; ; # 0.ⴇتجم
-0.xn--pgbe9e344c2725svff8b; 0.Ⴇ󀳑تجم񫃱; [B1, B5, V6]; 0.xn--pgbe9e344c2725svff8b; ; ; # 0.Ⴇتجم
-ðŸ˜ï¼Žâ´‡ó€³‘ïµñ«ƒ±; 0.ⴇ󀳑تجمñ«ƒ±; [B1, B5, P1, V6]; 0.xn--pgbe9ez79qd207lvff8b; ; ; # 0.ⴇتجم
+ñˆ ¢ð«–ðŸ¡ã€‚\u063E𑘿; ñˆ ¢ð«–9.\u063E𑘿; [B5, V6]; xn--9-el5iv442t.xn--9gb0830l; ; ; # ð«–9.ؾ𑘿
+ñˆ ¢ð«–9。\u063E𑘿; ñˆ ¢ð«–9.\u063E𑘿; [B5, V6]; xn--9-el5iv442t.xn--9gb0830l; ; ; # ð«–9.ؾ𑘿
+xn--9-el5iv442t.xn--9gb0830l; ñˆ ¢ð«–9.\u063E𑘿; [B5, V6]; xn--9-el5iv442t.xn--9gb0830l; ; ; # ð«–9.ؾ𑘿
+\u0668\uFC8C\u0668\u1A5D.\u200D; \u0668\u0646\u0645\u0668\u1A5D.\u200D; [B1, C2]; xn--hhbb5hc956w.xn--1ug; ; xn--hhbb5hc956w.; [B1] # ٨نم٨á©.
+\u0668\u0646\u0645\u0668\u1A5D.\u200D; ; [B1, C2]; xn--hhbb5hc956w.xn--1ug; ; xn--hhbb5hc956w.; [B1] # ٨نم٨á©.
+xn--hhbb5hc956w.; \u0668\u0646\u0645\u0668\u1A5D.; [B1]; xn--hhbb5hc956w.; ; ; # ٨نم٨á©.
+xn--hhbb5hc956w.xn--1ug; \u0668\u0646\u0645\u0668\u1A5D.\u200D; [B1, C2]; xn--hhbb5hc956w.xn--1ug; ; ; # ٨نم٨á©.
+ðŸ˜ï¼Žá‚§ó€³‘\uFD50ñ«ƒ±; 0.Ⴇ󀳑\u062A\u062C\u0645ñ«ƒ±; [B1, B5, V6]; 0.xn--pgbe9e344c2725svff8b; ; ; # 0.Ⴇتجم
+0.Ⴇ󀳑\u062A\u062C\u0645񫃱; ; [B1, B5, V6]; 0.xn--pgbe9e344c2725svff8b; ; ; # 0.Ⴇتجم
+0.ⴇ󀳑\u062A\u062C\u0645񫃱; ; [B1, B5, V6]; 0.xn--pgbe9ez79qd207lvff8b; ; ; # 0.ⴇتجم
+0.xn--pgbe9ez79qd207lvff8b; 0.ⴇ󀳑\u062A\u062C\u0645񫃱; [B1, B5, V6]; 0.xn--pgbe9ez79qd207lvff8b; ; ; # 0.ⴇتجم
+0.xn--pgbe9e344c2725svff8b; 0.Ⴇ󀳑\u062A\u062C\u0645񫃱; [B1, B5, V6]; 0.xn--pgbe9e344c2725svff8b; ; ; # 0.Ⴇتجم
+ðŸ˜ï¼Žâ´‡ó€³‘\uFD50ñ«ƒ±; 0.ⴇ󀳑\u062A\u062C\u0645ñ«ƒ±; [B1, B5, V6]; 0.xn--pgbe9ez79qd207lvff8b; ; ; # 0.ⴇتجم
𑇀â–.âžá °; ; [V5]; xn--9zh3057f.xn--j7e103b; ; ; # 𑇀â–.âžá °
xn--9zh3057f.xn--j7e103b; 𑇀â–.âžá °; [V5]; xn--9zh3057f.xn--j7e103b; ; ; # 𑇀â–.âžá °
-â€-Ùº.ò¯©; ; [B1, C2, P1, V6]; xn----qrc357q.xn--ts49b; ; xn----qrc.xn--ts49b; [B1, P1, V3, V6] # -Ùº.
-xn----qrc.xn--ts49b; -Ùº.ò¯©; [B1, V3, V6]; xn----qrc.xn--ts49b; ; ; # -Ùº.
-xn----qrc357q.xn--ts49b; â€-Ùº.ò¯©; [B1, C2, V6]; xn----qrc357q.xn--ts49b; ; ; # -Ùº.
-á ¢ð®‚ð«˜å¯ï½¡â€Œâ‰¯âœ³; á ¢ð®‚ð«˜å¯.‌≯✳; [B1, B5, C1, P1, V6]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5, P1, V6] # á ¢ð®‚ð«˜å¯.≯✳
-á ¢ð®‚ð«˜å¯ï½¡â€Œ≯✳; á ¢ð®‚ð«˜å¯.‌≯✳; [B1, B5, C1, P1, V6]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5, P1, V6] # á ¢ð®‚ð«˜å¯.≯✳
-á ¢ð®‚ð«˜å¯ã€‚‌≯✳; á ¢ð®‚ð«˜å¯.‌≯✳; [B1, B5, C1, P1, V6]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5, P1, V6] # á ¢ð®‚ð«˜å¯.≯✳
-á ¢ð®‚ð«˜å¯ã€‚‌≯✳; á ¢ð®‚ð«˜å¯.‌≯✳; [B1, B5, C1, P1, V6]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5, P1, V6] # á ¢ð®‚ð«˜å¯.≯✳
-xn--46e6675axzzhota.xn--hdh99p; á ¢ð®‚ð«˜å¯.≯✳; [B1, B5, V6]; xn--46e6675axzzhota.xn--hdh99p; ; ; # á ¢ð®‚ð«˜å¯.≯✳
-xn--46e6675axzzhota.xn--0ug06gu8f; á ¢ð®‚ð«˜å¯.‌≯✳; [B1, B5, C1, V6]; xn--46e6675axzzhota.xn--0ug06gu8f; ; ; # á ¢ð®‚ð«˜å¯.≯✳
-â€ï½¡ó¸²œá‚ºá‚´ðž¨‡; â€.󸲜ႺႴ𞨇; [B1, B5, B6, C2, P1, V6]; xn--1ug.xn--sndl01647an3h1h; ; .xn--sndl01647an3h1h; [B5, B6, P1, V6, A4_2] # .ႺႴ
-â€ã€‚󸲜ႺႴ𞨇; â€.󸲜ႺႴ𞨇; [B1, B5, B6, C2, P1, V6]; xn--1ug.xn--sndl01647an3h1h; ; .xn--sndl01647an3h1h; [B5, B6, P1, V6, A4_2] # .ႺႴ
-â€ã€‚󸲜ⴚⴔ𞨇; â€.󸲜ⴚⴔ𞨇; [B1, B5, B6, C2, P1, V6]; xn--1ug.xn--cljl81825an3r4h; ; .xn--cljl81825an3r4h; [B5, B6, P1, V6, A4_2] # .â´šâ´”
-â€ã€‚󸲜Ⴚⴔ𞨇; â€.󸲜Ⴚⴔ𞨇; [B1, B5, B6, C2, P1, V6]; xn--1ug.xn--ynd036lq981an3r4h; ; .xn--ynd036lq981an3r4h; [B5, B6, P1, V6, A4_2] # .Ⴚⴔ
+\u200D-\u067A.ò¯©; ; [B1, C2, V6]; xn----qrc357q.xn--ts49b; ; xn----qrc.xn--ts49b; [B1, V3, V6] # -Ùº.
+xn----qrc.xn--ts49b; -\u067A.ò¯©; [B1, V3, V6]; xn----qrc.xn--ts49b; ; ; # -Ùº.
+xn----qrc357q.xn--ts49b; \u200D-\u067A.ò¯©; [B1, C2, V6]; xn----qrc357q.xn--ts49b; ; ; # -Ùº.
+á ¢ð®‚ð«˜å¯ï½¡\u200C≯✳; á ¢ð®‚ð«˜å¯.\u200C≯✳; [B1, B5, C1]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5] # á ¢ð®‚ð«˜å¯.≯✳
+á ¢ð®‚ð«˜å¯ï½¡\u200C>\u0338✳; á ¢ð®‚ð«˜å¯.\u200C≯✳; [B1, B5, C1]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5] # á ¢ð®‚ð«˜å¯.≯✳
+á ¢ð®‚ð«˜å¯ã€‚\u200C≯✳; á ¢ð®‚ð«˜å¯.\u200C≯✳; [B1, B5, C1]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5] # á ¢ð®‚ð«˜å¯.≯✳
+á ¢ð®‚ð«˜å¯ã€‚\u200C>\u0338✳; á ¢ð®‚ð«˜å¯.\u200C≯✳; [B1, B5, C1]; xn--46e6675axzzhota.xn--0ug06gu8f; ; xn--46e6675axzzhota.xn--hdh99p; [B1, B5] # á ¢ð®‚ð«˜å¯.≯✳
+xn--46e6675axzzhota.xn--hdh99p; á ¢ð®‚ð«˜å¯.≯✳; [B1, B5]; xn--46e6675axzzhota.xn--hdh99p; ; ; # á ¢ð®‚ð«˜å¯.≯✳
+xn--46e6675axzzhota.xn--0ug06gu8f; á ¢ð®‚ð«˜å¯.\u200C≯✳; [B1, B5, C1]; xn--46e6675axzzhota.xn--0ug06gu8f; ; ; # á ¢ð®‚ð«˜å¯.≯✳
+\u200D。󸲜ႺႴ𞨇; \u200D.󸲜ႺႴ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--sndl01647an3h1h; ; .xn--sndl01647an3h1h; [B5, B6, V6, A4_2] # .ႺႴ
+\u200D。󸲜ႺႴ𞨇; \u200D.󸲜ႺႴ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--sndl01647an3h1h; ; .xn--sndl01647an3h1h; [B5, B6, V6, A4_2] # .ႺႴ
+\u200D。󸲜ⴚⴔ𞨇; \u200D.󸲜ⴚⴔ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--cljl81825an3r4h; ; .xn--cljl81825an3r4h; [B5, B6, V6, A4_2] # .ⴚⴔ
+\u200D。󸲜Ⴚⴔ𞨇; \u200D.󸲜Ⴚⴔ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--ynd036lq981an3r4h; ; .xn--ynd036lq981an3r4h; [B5, B6, V6, A4_2] # .Ⴚⴔ
.xn--ynd036lq981an3r4h; .󸲜Ⴚⴔ𞨇; [B5, B6, V6, X4_2]; .xn--ynd036lq981an3r4h; [B5, B6, V6, A4_2]; ; # .Ⴚⴔ
-xn--1ug.xn--ynd036lq981an3r4h; â€.󸲜Ⴚⴔ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--ynd036lq981an3r4h; ; ; # .Ⴚⴔ
+xn--1ug.xn--ynd036lq981an3r4h; \u200D.󸲜Ⴚⴔ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--ynd036lq981an3r4h; ; ; # .Ⴚⴔ
.xn--cljl81825an3r4h; .󸲜ⴚⴔ𞨇; [B5, B6, V6, X4_2]; .xn--cljl81825an3r4h; [B5, B6, V6, A4_2]; ; # .ⴚⴔ
-xn--1ug.xn--cljl81825an3r4h; â€.󸲜ⴚⴔ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--cljl81825an3r4h; ; ; # .â´šâ´”
+xn--1ug.xn--cljl81825an3r4h; \u200D.󸲜ⴚⴔ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--cljl81825an3r4h; ; ; # .ⴚⴔ
.xn--sndl01647an3h1h; .󸲜ႺႴ𞨇; [B5, B6, V6, X4_2]; .xn--sndl01647an3h1h; [B5, B6, V6, A4_2]; ; # .ႺႴ
-xn--1ug.xn--sndl01647an3h1h; â€.󸲜ႺႴ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--sndl01647an3h1h; ; ; # .ႺႴ
-â€ï½¡ó¸²œâ´šâ´”𞨇; â€.󸲜ⴚⴔ𞨇; [B1, B5, B6, C2, P1, V6]; xn--1ug.xn--cljl81825an3r4h; ; .xn--cljl81825an3r4h; [B5, B6, P1, V6, A4_2] # .â´šâ´”
-â€ï½¡ó¸²œá‚ºâ´”𞨇; â€.󸲜Ⴚⴔ𞨇; [B1, B5, B6, C2, P1, V6]; xn--1ug.xn--ynd036lq981an3r4h; ; .xn--ynd036lq981an3r4h; [B5, B6, P1, V6, A4_2] # .Ⴚⴔ
--3.â€ãƒŒá¢•; ; [C2, V3]; -3.xn--fbf739aq5o; ; -3.xn--fbf115j; [V3] # -3.ヌᢕ
+xn--1ug.xn--sndl01647an3h1h; \u200D.󸲜ႺႴ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--sndl01647an3h1h; ; ; # .ႺႴ
+\u200D。󸲜ⴚⴔ𞨇; \u200D.󸲜ⴚⴔ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--cljl81825an3r4h; ; .xn--cljl81825an3r4h; [B5, B6, V6, A4_2] # .ⴚⴔ
+\u200D。󸲜Ⴚⴔ𞨇; \u200D.󸲜Ⴚⴔ𞨇; [B1, B5, B6, C2, V6]; xn--1ug.xn--ynd036lq981an3r4h; ; .xn--ynd036lq981an3r4h; [B5, B6, V6, A4_2] # .Ⴚⴔ
+-3.\u200Dヌᢕ; ; [C2, V3]; -3.xn--fbf739aq5o; ; -3.xn--fbf115j; [V3] # -3.ヌᢕ
-3.xn--fbf115j; -3.ヌᢕ; [V3]; -3.xn--fbf115j; ; ; # -3.ヌᢕ
--3.xn--fbf739aq5o; -3.â€ãƒŒá¢•; [C2, V3]; -3.xn--fbf739aq5o; ; ; # -3.ヌᢕ
-🂃٦ßâ€ã€‚ó  ‚ò­°ðž©’-; 🂃٦ßâ€.ó  ‚ò­°ðž©’-; [B1, C2, P1, V3, V6]; xn--zca34z68yzu83b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, P1, V3, V6] # 🂃٦ß.-
-🂃٦SSâ€ã€‚ó  ‚ò­°ðž©’-; 🂃٦ssâ€.ó  ‚ò­°ðž©’-; [B1, C2, P1, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, P1, V3, V6] # 🂃٦ss.-
-🂃٦ssâ€ã€‚ó  ‚ò­°ðž©’-; 🂃٦ssâ€.ó  ‚ò­°ðž©’-; [B1, C2, P1, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, P1, V3, V6] # 🂃٦ss.-
-xn--ss-pyd98921c.xn----nz8rh7531csznt; 🂃٦ss.ó  ‚ò­°ðž©’-; [B1, V3, V6]; xn--ss-pyd98921c.xn----nz8rh7531csznt; ; ; # 🂃٦ss.-
-xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; 🂃٦ssâ€.ó  ‚ò­°ðž©’-; [B1, C2, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; ; # 🂃٦ss.-
-xn--zca34z68yzu83b.xn----nz8rh7531csznt; 🂃٦ßâ€.ó  ‚ò­°ðž©’-; [B1, C2, V3, V6]; xn--zca34z68yzu83b.xn----nz8rh7531csznt; ; ; # 🂃٦ß.-
-🂃٦Ssâ€ã€‚ó  ‚ò­°ðž©’-; 🂃٦ssâ€.ó  ‚ò­°ðž©’-; [B1, C2, P1, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, P1, V3, V6] # 🂃٦ss.-
-ꇟ-ð¾ºÚŸã€‚ò°€ºâ€Œ; ꇟ-ð¾ºÚŸ.ò°€ºâ€Œ; [B5, B6, C1, P1, V6]; xn----utc4430jd3zd.xn--0ugx6670i; ; xn----utc4430jd3zd.xn--bp20d; [B5, B6, P1, V6] # ꇟ-ð¾ºÚŸ.
-xn----utc4430jd3zd.xn--bp20d; ꇟ-ð¾ºÚŸ.ò°€º; [B5, B6, V6]; xn----utc4430jd3zd.xn--bp20d; ; ; # ꇟ-ð¾ºÚŸ.
-xn----utc4430jd3zd.xn--0ugx6670i; ꇟ-ð¾ºÚŸ.ò°€ºâ€Œ; [B5, B6, C1, V6]; xn----utc4430jd3zd.xn--0ugx6670i; ; ; # ꇟ-ð¾ºÚŸ.
-Ù¥.Ò„ð¨—ð©‹ð´¤ƒ; ; [B1, P1, V5, V6]; xn--eib.xn--n3a0405kus8eft5l; ; ; # Ù¥.Ò„ð¨—ð©‹
-xn--eib.xn--n3a0405kus8eft5l; Ù¥.Ò„ð¨—ð©‹ð´¤ƒ; [B1, V5, V6]; xn--eib.xn--n3a0405kus8eft5l; ; ; # Ù¥.Ò„ð¨—ð©‹
--.ñ±¼“Ù‰ð¨¿; ; [B1, B5, B6, P1, V3, V6]; -.xn--lhb4124khbq4b; ; ; # -.Ù‰ð¨¿
--.xn--lhb4124khbq4b; -.ñ±¼“Ù‰ð¨¿; [B1, B5, B6, V3, V6]; -.xn--lhb4124khbq4b; ; ; # -.Ù‰ð¨¿
-󾬨ς.𞶙녫ß; ; [B2, B3, P1, V6]; xn--3xa96659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # ς.녫ß
-󾬨ς.𞶙녫ß; 󾬨ς.𞶙녫ß; [B2, B3, P1, V6]; xn--3xa96659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # ς.녫ß
-󾬨Σ.𞶙녫SS; 󾬨σ.𞶙녫ss; [B2, B3, P1, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
-󾬨Σ.𞶙녫SS; 󾬨σ.𞶙녫ss; [B2, B3, P1, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
-󾬨σ.𞶙녫ss; ; [B2, B3, P1, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
-󾬨σ.𞶙녫ss; 󾬨σ.𞶙녫ss; [B2, B3, P1, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
-󾬨Σ.𞶙녫ss; 󾬨σ.𞶙녫ss; [B2, B3, P1, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
-󾬨Σ.𞶙녫ss; 󾬨σ.𞶙녫ss; [B2, B3, P1, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
-󾬨Σ.𞶙녫Ss; 󾬨σ.𞶙녫ss; [B2, B3, P1, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
-󾬨Σ.𞶙녫Ss; 󾬨σ.𞶙녫ss; [B2, B3, P1, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
+-3.xn--fbf739aq5o; -3.\u200Dヌᢕ; [C2, V3]; -3.xn--fbf739aq5o; ; ; # -3.ヌᢕ
+🂃\u0666ß\u200D。󠠂ò­°ðž©’-; 🂃\u0666ß\u200D.ó  ‚ò­°ðž©’-; [B1, C2, V3, V6]; xn--zca34z68yzu83b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, V3, V6] # 🂃٦ß.-
+🂃\u0666SS\u200D。󠠂ò­°ðž©’-; 🂃\u0666ss\u200D.ó  ‚ò­°ðž©’-; [B1, C2, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, V3, V6] # 🂃٦ss.-
+🂃\u0666ss\u200D。󠠂ò­°ðž©’-; 🂃\u0666ss\u200D.ó  ‚ò­°ðž©’-; [B1, C2, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, V3, V6] # 🂃٦ss.-
+xn--ss-pyd98921c.xn----nz8rh7531csznt; 🂃\u0666ss.ó  ‚ò­°ðž©’-; [B1, V3, V6]; xn--ss-pyd98921c.xn----nz8rh7531csznt; ; ; # 🂃٦ss.-
+xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; 🂃\u0666ss\u200D.ó  ‚ò­°ðž©’-; [B1, C2, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; ; # 🂃٦ss.-
+xn--zca34z68yzu83b.xn----nz8rh7531csznt; 🂃\u0666ß\u200D.ó  ‚ò­°ðž©’-; [B1, C2, V3, V6]; xn--zca34z68yzu83b.xn----nz8rh7531csznt; ; ; # 🂃٦ß.-
+🂃\u0666Ss\u200D。󠠂ò­°ðž©’-; 🂃\u0666ss\u200D.ó  ‚ò­°ðž©’-; [B1, C2, V3, V6]; xn--ss-pyd483x5k99b.xn----nz8rh7531csznt; ; xn--ss-pyd98921c.xn----nz8rh7531csznt; [B1, V3, V6] # 🂃٦ss.-
+ꇟ-ð¾º\u069F。ò°€º\u200C; ꇟ-ð¾º\u069F.ò°€º\u200C; [B5, B6, C1, V6]; xn----utc4430jd3zd.xn--0ugx6670i; ; xn----utc4430jd3zd.xn--bp20d; [B5, B6, V6] # ꇟ-ð¾ºÚŸ.
+xn----utc4430jd3zd.xn--bp20d; ꇟ-ð¾º\u069F.ò°€º; [B5, B6, V6]; xn----utc4430jd3zd.xn--bp20d; ; ; # ꇟ-ð¾ºÚŸ.
+xn----utc4430jd3zd.xn--0ugx6670i; ꇟ-ð¾º\u069F.ò°€º\u200C; [B5, B6, C1, V6]; xn----utc4430jd3zd.xn--0ugx6670i; ; ; # ꇟ-ð¾ºÚŸ.
+\u0665.\u0484ð¨—ð©‹ð´¤ƒ; ; [B1, V5, V6]; xn--eib.xn--n3a0405kus8eft5l; ; ; # Ù¥.Ò„ð¨—ð©‹
+xn--eib.xn--n3a0405kus8eft5l; \u0665.\u0484ð¨—ð©‹ð´¤ƒ; [B1, V5, V6]; xn--eib.xn--n3a0405kus8eft5l; ; ; # Ù¥.Ò„ð¨—ð©‹
+-.ñ±¼“\u0649ð¨¿; ; [B1, B5, B6, V3, V6]; -.xn--lhb4124khbq4b; ; ; # -.Ù‰ð¨¿
+-.xn--lhb4124khbq4b; -.ñ±¼“\u0649ð¨¿; [B1, B5, B6, V3, V6]; -.xn--lhb4124khbq4b; ; ; # -.Ù‰ð¨¿
+󾬨ς.𞶙녫ß; ; [B2, B3, V6]; xn--3xa96659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # ς.녫ß
+󾬨ς.𞶙녫ß; 󾬨ς.𞶙녫ß; [B2, B3, V6]; xn--3xa96659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # ς.녫ß
+󾬨Σ.𞶙녫SS; 󾬨σ.𞶙녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
+󾬨Σ.𞶙녫SS; 󾬨σ.𞶙녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
+󾬨σ.𞶙녫ss; ; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
+󾬨σ.𞶙녫ss; 󾬨σ.𞶙녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
+󾬨Σ.𞶙녫ss; 󾬨σ.𞶙녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
+󾬨Σ.𞶙녫ss; 󾬨σ.𞶙녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
+󾬨Σ.𞶙녫Ss; 󾬨σ.𞶙녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
+󾬨Σ.𞶙녫Ss; 󾬨σ.𞶙녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
xn--4xa76659r.xn--ss-d64i8755h; 󾬨σ.𞶙녫ss; [B2, B3, V6]; xn--4xa76659r.xn--ss-d64i8755h; ; ; # σ.녫ss
-󾬨Σ.𞶙녫ß; 󾬨σ.𞶙녫ß; [B2, B3, P1, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß
-󾬨Σ.𞶙녫ß; 󾬨σ.𞶙녫ß; [B2, B3, P1, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß
-󾬨σ.𞶙녫ß; ; [B2, B3, P1, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß
-󾬨σ.𞶙녫ß; 󾬨σ.𞶙녫ß; [B2, B3, P1, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß
+󾬨Σ.𞶙녫ß; 󾬨σ.𞶙녫ß; [B2, B3, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß
+󾬨Σ.𞶙녫ß; 󾬨σ.𞶙녫ß; [B2, B3, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß
+󾬨σ.𞶙녫ß; ; [B2, B3, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß
+󾬨σ.𞶙녫ß; 󾬨σ.𞶙녫ß; [B2, B3, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; xn--4xa76659r.xn--ss-d64i8755h; # σ.녫ß
xn--4xa76659r.xn--zca5051g4h4i; 󾬨σ.𞶙녫ß; [B2, B3, V6]; xn--4xa76659r.xn--zca5051g4h4i; ; ; # σ.녫ß
xn--3xa96659r.xn--zca5051g4h4i; 󾬨ς.𞶙녫ß; [B2, B3, V6]; xn--3xa96659r.xn--zca5051g4h4i; ; ; # ς.녫ß
-Ⅎ្â€ï½¡â‰ â€â€Œ; Ⅎ្â€.≠â€â€Œ; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
-Ⅎ្â€ï½¡≠â€â€Œ; Ⅎ្â€.≠â€â€Œ; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
-Ⅎ្â€ã€‚≠â€â€Œ; Ⅎ្â€.≠â€â€Œ; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
-Ⅎ្â€ã€‚≠â€â€Œ; Ⅎ្â€.≠â€â€Œ; [C1, C2, P1, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [P1, V6] # Ⅎ្.≠
-ⅎ្â€ã€‚≠â€â€Œ; ⅎ្â€.≠â€â€Œ; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
-ⅎ្â€ã€‚≠â€â€Œ; ⅎ្â€.≠â€â€Œ; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
-xn--u4e969b.xn--1ch; ⅎ្.≠; [V6]; xn--u4e969b.xn--1ch; ; ; # ⅎ្.≠
-xn--u4e823bq1a.xn--0ugb89o; ⅎ្â€.≠â€â€Œ; [C1, C2, V6]; xn--u4e823bq1a.xn--0ugb89o; ; ; # ⅎ្.≠
-xn--u4e319b.xn--1ch; Ⅎ្.≠; [V6]; xn--u4e319b.xn--1ch; ; ; # Ⅎ្.≠
-xn--u4e823bcza.xn--0ugb89o; Ⅎ្â€.≠â€â€Œ; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; ; # Ⅎ្.≠
-ⅎ្â€ï½¡≠â€â€Œ; ⅎ្â€.≠â€â€Œ; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
-ⅎ្â€ï½¡â‰ â€â€Œ; ⅎ្â€.≠â€â€Œ; [C1, C2, P1, V6]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [P1, V6] # ⅎ្.≠
-ð‹ºê«¶ê¥“󧦉.‌᜔Ú; ð‹ºê«¶ê¥“󧦉.‌᜔Ú; [B1, C1, P1, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ; xn--3j9a14ak27osbz2o.xn--ljb175f; [B1, P1, V5, V6] # ð‹ºê«¶ê¥“.᜔Ú
-ð‹ºê«¶ê¥“󧦉.‌᜔Ú; ; [B1, C1, P1, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ; xn--3j9a14ak27osbz2o.xn--ljb175f; [B1, P1, V5, V6] # ð‹ºê«¶ê¥“.᜔Ú
-xn--3j9a14ak27osbz2o.xn--ljb175f; ð‹ºê«¶ê¥“󧦉.᜔Ú; [B1, V5, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f; ; ; # ð‹ºê«¶ê¥“.᜔Ú
-xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ð‹ºê«¶ê¥“󧦉.‌᜔Ú; [B1, C1, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ; ; # ð‹ºê«¶ê¥“.᜔Ú
-񺔯ྨ.≯; 񺔯ྨ.≯; [P1, V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯
-񺔯ྨ.≯; 񺔯ྨ.≯; [P1, V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯
-񺔯ྨ.≯; ; [P1, V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯
-񺔯ྨ.≯; 񺔯ྨ.≯; [P1, V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯
-xn--4fd57150h.xn--hdh; 񺔯ྨ.≯; [V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯
-â€ðž¡„Ⴓ.ð‡½; â€ðž¡„Ⴓ.ð‡½; [B1, B3, B6, C2, P1, V5, V6]; xn--rnd379ex885a.xn--m27c; ; xn--rnd5552v.xn--m27c; [B1, B2, B3, B6, P1, V5, V6] # 𞡄Ⴓ.ð‡½
-â€ðž¡„Ⴓ.ð‡½; ; [B1, B3, B6, C2, P1, V5, V6]; xn--rnd379ex885a.xn--m27c; ; xn--rnd5552v.xn--m27c; [B1, B2, B3, B6, P1, V5, V6] # 𞡄Ⴓ.ð‡½
-â€ðž¡„â´“.ð‡½; ; [B1, B3, B6, C2, V5]; xn--1ugz52c4i16a.xn--m27c; ; xn--blj7492l.xn--m27c; [B1, B2, B3, B6, V5] # ðž¡„â´“.ð‡½
-xn--blj7492l.xn--m27c; ðž¡„â´“.ð‡½; [B1, B2, B3, B6, V5]; xn--blj7492l.xn--m27c; ; ; # ðž¡„â´“.ð‡½
-xn--1ugz52c4i16a.xn--m27c; â€ðž¡„â´“.ð‡½; [B1, B3, B6, C2, V5]; xn--1ugz52c4i16a.xn--m27c; ; ; # ðž¡„â´“.ð‡½
-xn--rnd5552v.xn--m27c; 𞡄Ⴓ.ð‡½; [B1, B2, B3, B6, V5, V6]; xn--rnd5552v.xn--m27c; ; ; # 𞡄Ⴓ.ð‡½
-xn--rnd379ex885a.xn--m27c; â€ðž¡„Ⴓ.ð‡½; [B1, B3, B6, C2, V5, V6]; xn--rnd379ex885a.xn--m27c; ; ; # 𞡄Ⴓ.ð‡½
-â€ðž¡„ⴓ.ð‡½; â€ðž¡„â´“.ð‡½; [B1, B3, B6, C2, V5]; xn--1ugz52c4i16a.xn--m27c; ; xn--blj7492l.xn--m27c; [B1, B2, B3, B6, V5] # ðž¡„â´“.ð‡½
-ðª’ß꣪.ᡤ; ðª’ß꣪.ᡤ; [B2, B3]; xn--zca2517f2hvc.xn--08e; ; xn--ss-tu9hw933a.xn--08e; # ðª’ß꣪.ᡤ
-ðª’ß꣪.ᡤ; ; [B2, B3]; xn--zca2517f2hvc.xn--08e; ; xn--ss-tu9hw933a.xn--08e; # ðª’ß꣪.ᡤ
-ðª’SS꣪.ᡤ; ðª’ss꣪.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
-ðª’ss꣪.ᡤ; ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
-xn--ss-tu9hw933a.xn--08e; ðª’ss꣪.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
-xn--zca2517f2hvc.xn--08e; ðª’ß꣪.ᡤ; [B2, B3]; xn--zca2517f2hvc.xn--08e; ; ; # ðª’ß꣪.ᡤ
-ðª’SS꣪.ᡤ; ðª’ss꣪.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
-ðª’ss꣪.ᡤ; ðª’ss꣪.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
-ðª’Ss꣪.ᡤ; ðª’ss꣪.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
-ðª’Ss꣪.ᡤ; ðª’ss꣪.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
+Ⅎ\u17D2\u200D。≠\u200D\u200C; Ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [V6] # Ⅎ្.≠
+Ⅎ\u17D2\u200D。=\u0338\u200D\u200C; Ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [V6] # Ⅎ្.≠
+Ⅎ\u17D2\u200D。≠\u200D\u200C; Ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [V6] # Ⅎ្.≠
+Ⅎ\u17D2\u200D。=\u0338\u200D\u200C; Ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; xn--u4e319b.xn--1ch; [V6] # Ⅎ្.≠
+ⅎ\u17D2\u200D。=\u0338\u200D\u200C; ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [] # ⅎ្.≠
+ⅎ\u17D2\u200D。≠\u200D\u200C; ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [] # ⅎ្.≠
+xn--u4e969b.xn--1ch; ⅎ\u17D2.≠; ; xn--u4e969b.xn--1ch; ; ; # ⅎ្.≠
+ⅎ\u17D2.≠; ; ; xn--u4e969b.xn--1ch; ; ; # ⅎ្.≠
+ⅎ\u17D2.=\u0338; ⅎ\u17D2.≠; ; xn--u4e969b.xn--1ch; ; ; # ⅎ្.≠
+Ⅎ\u17D2.=\u0338; Ⅎ\u17D2.≠; [V6]; xn--u4e319b.xn--1ch; ; ; # Ⅎ្.≠
+Ⅎ\u17D2.≠; ; [V6]; xn--u4e319b.xn--1ch; ; ; # Ⅎ្.≠
+xn--u4e319b.xn--1ch; Ⅎ\u17D2.≠; [V6]; xn--u4e319b.xn--1ch; ; ; # Ⅎ្.≠
+xn--u4e823bq1a.xn--0ugb89o; ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2]; xn--u4e823bq1a.xn--0ugb89o; ; ; # ⅎ្.≠
+xn--u4e823bcza.xn--0ugb89o; Ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2, V6]; xn--u4e823bcza.xn--0ugb89o; ; ; # Ⅎ្.≠
+ⅎ\u17D2\u200D。=\u0338\u200D\u200C; ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [] # ⅎ្.≠
+ⅎ\u17D2\u200D。≠\u200D\u200C; ⅎ\u17D2\u200D.≠\u200D\u200C; [C1, C2]; xn--u4e823bq1a.xn--0ugb89o; ; xn--u4e969b.xn--1ch; [] # ⅎ្.≠
+ð‹º\uAAF6\uA953󧦉.\u200C\u1714\u068F; ð‹º\uAAF6\uA953󧦉.\u200C\u1714\u068F; [B1, C1, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ; xn--3j9a14ak27osbz2o.xn--ljb175f; [B1, V5, V6] # ð‹ºê«¶ê¥“.᜔Ú
+ð‹º\uAAF6\uA953󧦉.\u200C\u1714\u068F; ; [B1, C1, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ; xn--3j9a14ak27osbz2o.xn--ljb175f; [B1, V5, V6] # ð‹ºê«¶ê¥“.᜔Ú
+xn--3j9a14ak27osbz2o.xn--ljb175f; ð‹º\uAAF6\uA953󧦉.\u1714\u068F; [B1, V5, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f; ; ; # ð‹ºê«¶ê¥“.᜔Ú
+xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ð‹º\uAAF6\uA953󧦉.\u200C\u1714\u068F; [B1, C1, V6]; xn--3j9a14ak27osbz2o.xn--ljb175f1wg; ; ; # ð‹ºê«¶ê¥“.᜔Ú
+񺔯\u0FA8.≯; 񺔯\u0FA8.≯; [V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯
+񺔯\u0FA8.>\u0338; 񺔯\u0FA8.≯; [V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯
+񺔯\u0FA8.≯; ; [V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯
+񺔯\u0FA8.>\u0338; 񺔯\u0FA8.≯; [V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯
+xn--4fd57150h.xn--hdh; 񺔯\u0FA8.≯; [V6]; xn--4fd57150h.xn--hdh; ; ; # ྨ.≯
+\u200D𞡄Ⴓ.ð‡½; \u200D𞡄Ⴓ.ð‡½; [B1, C2, V5, V6]; xn--rnd379ex885a.xn--m27c; ; xn--rnd5552v.xn--m27c; [B1, B2, B3, V5, V6] # 𞡄Ⴓ.ð‡½
+\u200D𞡄Ⴓ.ð‡½; ; [B1, C2, V5, V6]; xn--rnd379ex885a.xn--m27c; ; xn--rnd5552v.xn--m27c; [B1, B2, B3, V5, V6] # 𞡄Ⴓ.ð‡½
+\u200Dðž¡„â´“.ð‡½; ; [B1, C2, V5]; xn--1ugz52c4i16a.xn--m27c; ; xn--blj7492l.xn--m27c; [B1, B2, B3, V5] # ðž¡„â´“.ð‡½
+xn--blj7492l.xn--m27c; ðž¡„â´“.ð‡½; [B1, B2, B3, V5]; xn--blj7492l.xn--m27c; ; ; # ðž¡„â´“.ð‡½
+xn--1ugz52c4i16a.xn--m27c; \u200Dðž¡„â´“.ð‡½; [B1, C2, V5]; xn--1ugz52c4i16a.xn--m27c; ; ; # ðž¡„â´“.ð‡½
+xn--rnd5552v.xn--m27c; 𞡄Ⴓ.ð‡½; [B1, B2, B3, V5, V6]; xn--rnd5552v.xn--m27c; ; ; # 𞡄Ⴓ.ð‡½
+xn--rnd379ex885a.xn--m27c; \u200D𞡄Ⴓ.ð‡½; [B1, C2, V5, V6]; xn--rnd379ex885a.xn--m27c; ; ; # 𞡄Ⴓ.ð‡½
+\u200D𞡄ⴓ.ð‡½; \u200Dðž¡„â´“.ð‡½; [B1, C2, V5]; xn--1ugz52c4i16a.xn--m27c; ; xn--blj7492l.xn--m27c; [B1, B2, B3, V5] # ðž¡„â´“.ð‡½
+ðª’ß\uA8EA.ᡤ; ðª’ß\uA8EA.ᡤ; [B2, B3]; xn--zca2517f2hvc.xn--08e; ; xn--ss-tu9hw933a.xn--08e; # ðª’ß꣪.ᡤ
+ðª’ß\uA8EA.ᡤ; ; [B2, B3]; xn--zca2517f2hvc.xn--08e; ; xn--ss-tu9hw933a.xn--08e; # ðª’ß꣪.ᡤ
+ðª’SS\uA8EA.ᡤ; ðª’ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
+ðª’ss\uA8EA.ᡤ; ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
+xn--ss-tu9hw933a.xn--08e; ðª’ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
+xn--zca2517f2hvc.xn--08e; ðª’ß\uA8EA.ᡤ; [B2, B3]; xn--zca2517f2hvc.xn--08e; ; ; # ðª’ß꣪.ᡤ
+ðª’SS\uA8EA.ᡤ; ðª’ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
+ðª’ss\uA8EA.ᡤ; ðª’ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
+ðª’Ss\uA8EA.ᡤ; ðª’ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
+ðª’Ss\uA8EA.ᡤ; ðª’ss\uA8EA.ᡤ; [B2, B3]; xn--ss-tu9hw933a.xn--08e; ; ; # ðª’ss꣪.ᡤ
ð¨¿ó †Œé¸®ð‘š¶.Ï‚; ð¨¿é¸®ð‘š¶.Ï‚; [V5]; xn--l76a726rt2h.xn--3xa; ; xn--l76a726rt2h.xn--4xa; # ð¨¿é¸®ð‘š¶.Ï‚
ð¨¿ó †Œé¸®ð‘š¶.Σ; ð¨¿é¸®ð‘š¶.σ; [V5]; xn--l76a726rt2h.xn--4xa; ; ; # ð¨¿é¸®ð‘š¶.σ
ð¨¿ó †Œé¸®ð‘š¶.σ; ð¨¿é¸®ð‘š¶.σ; [V5]; xn--l76a726rt2h.xn--4xa; ; ; # ð¨¿é¸®ð‘š¶.σ
xn--l76a726rt2h.xn--4xa; ð¨¿é¸®ð‘š¶.σ; [V5]; xn--l76a726rt2h.xn--4xa; ; ; # ð¨¿é¸®ð‘š¶.σ
xn--l76a726rt2h.xn--3xa; ð¨¿é¸®ð‘š¶.Ï‚; [V5]; xn--l76a726rt2h.xn--3xa; ; ; # ð¨¿é¸®ð‘š¶.Ï‚
-⒗𞤬。-𑚶; ⒗𞤬.-𑚶; [B1, P1, V3, V6]; xn--8shw466n.xn----4j0j; ; ; # ⒗𞤬.-𑚶
+⒗𞤬。-𑚶; ⒗𞤬.-𑚶; [B1, V3, V6]; xn--8shw466n.xn----4j0j; ; ; # ⒗𞤬.-𑚶
16.𞤬。-𑚶; 16.𞤬.-𑚶; [B1, V3]; 16.xn--ke6h.xn----4j0j; ; ; # 16.𞤬.-𑚶
16.𞤊。-𑚶; 16.𞤬.-𑚶; [B1, V3]; 16.xn--ke6h.xn----4j0j; ; ; # 16.𞤬.-𑚶
16.xn--ke6h.xn----4j0j; 16.𞤬.-𑚶; [B1, V3]; 16.xn--ke6h.xn----4j0j; ; ; # 16.𞤬.-𑚶
-⒗𞤊。-𑚶; ⒗𞤬.-𑚶; [B1, P1, V3, V6]; xn--8shw466n.xn----4j0j; ; ; # ⒗𞤬.-𑚶
+⒗𞤊。-𑚶; ⒗𞤬.-𑚶; [B1, V3, V6]; xn--8shw466n.xn----4j0j; ; ; # ⒗𞤬.-𑚶
xn--8shw466n.xn----4j0j; ⒗𞤬.-𑚶; [B1, V3, V6]; xn--8shw466n.xn----4j0j; ; ; # ⒗𞤬.-𑚶
-ࢳ𞤿⾫。ð¹£Úâ’ˆ; ࢳ𞤿隹.ð¹£Úâ’ˆ; [B1, B2, B3, P1, V6]; xn--8yb0383efiwk.xn--ljb064mol4n; ; ; # ࢳ𞤿隹.ð¹£Úâ’ˆ
-ࢳ𞤿隹。ð¹£Ú1.; ࢳ𞤿隹.ð¹£Ú1.; [B1, B2, B3]; xn--8yb0383efiwk.xn--1-wsc3373r.; ; ; # ࢳ𞤿隹.ð¹£Ú1.
-ࢳðž¤éš¹ã€‚ð¹£Ú1.; ࢳ𞤿隹.ð¹£Ú1.; [B1, B2, B3]; xn--8yb0383efiwk.xn--1-wsc3373r.; ; ; # ࢳ𞤿隹.ð¹£Ú1.
-xn--8yb0383efiwk.xn--1-wsc3373r.; ࢳ𞤿隹.ð¹£Ú1.; [B1, B2, B3]; xn--8yb0383efiwk.xn--1-wsc3373r.; ; ; # ࢳ𞤿隹.ð¹£Ú1.
-ࢳðž¤â¾«ï½¡ð¹£Úâ’ˆ; ࢳ𞤿隹.ð¹£Úâ’ˆ; [B1, B2, B3, P1, V6]; xn--8yb0383efiwk.xn--ljb064mol4n; ; ; # ࢳ𞤿隹.ð¹£Úâ’ˆ
-xn--8yb0383efiwk.xn--ljb064mol4n; ࢳ𞤿隹.ð¹£Úâ’ˆ; [B1, B2, B3, V6]; xn--8yb0383efiwk.xn--ljb064mol4n; ; ; # ࢳ𞤿隹.ð¹£Úâ’ˆ
-â³ðšŽ›ðŸ§Ù¡.á¡¢8ི؀; â³ðšŽ›5Ù¡.á¡¢8ི؀; [B5, B6, P1, V6]; xn--5-bqc410un435a.xn--8-rkc763epjj; ; ; # 5Ù¡.á¡¢8ི
-â³ðšŽ›5Ù¡.á¡¢8ི؀; ; [B5, B6, P1, V6]; xn--5-bqc410un435a.xn--8-rkc763epjj; ; ; # 5Ù¡.á¡¢8ི
-xn--5-bqc410un435a.xn--8-rkc763epjj; â³ðšŽ›5Ù¡.á¡¢8ི؀; [B5, B6, V6]; xn--5-bqc410un435a.xn--8-rkc763epjj; ; ; # 5Ù¡.á¡¢8ི
-ð¹ .🄀⒒-ó¨°ˆ; ; [B1, P1, V6]; xn--7n0d.xn----xcp9757q1s13g; ; ; # ð¹ .🄀⒒-
-ð¹ .0.11.-ó¨°ˆ; ; [B1, P1, V3, V6]; xn--7n0d.0.11.xn----8j07m; ; ; # ð¹ .0.11.-
+\u08B3𞤿⾫。ð¹£\u068Fâ’ˆ; \u08B3𞤿隹.ð¹£\u068Fâ’ˆ; [B1, B2, B3, V6]; xn--8yb0383efiwk.xn--ljb064mol4n; ; ; # ࢳ𞤿隹.ð¹£Úâ’ˆ
+\u08B3𞤿隹。ð¹£\u068F1.; \u08B3𞤿隹.ð¹£\u068F1.; [B1, B2, B3]; xn--8yb0383efiwk.xn--1-wsc3373r.; ; ; # ࢳ𞤿隹.ð¹£Ú1.
+\u08B3ðž¤éš¹ã€‚ð¹£\u068F1.; \u08B3𞤿隹.ð¹£\u068F1.; [B1, B2, B3]; xn--8yb0383efiwk.xn--1-wsc3373r.; ; ; # ࢳ𞤿隹.ð¹£Ú1.
+xn--8yb0383efiwk.xn--1-wsc3373r.; \u08B3𞤿隹.ð¹£\u068F1.; [B1, B2, B3]; xn--8yb0383efiwk.xn--1-wsc3373r.; ; ; # ࢳ𞤿隹.ð¹£Ú1.
+\u08B3ðž¤â¾«ï½¡ð¹£\u068Fâ’ˆ; \u08B3𞤿隹.ð¹£\u068Fâ’ˆ; [B1, B2, B3, V6]; xn--8yb0383efiwk.xn--ljb064mol4n; ; ; # ࢳ𞤿隹.ð¹£Úâ’ˆ
+xn--8yb0383efiwk.xn--ljb064mol4n; \u08B3𞤿隹.ð¹£\u068Fâ’ˆ; [B1, B2, B3, V6]; xn--8yb0383efiwk.xn--ljb064mol4n; ; ; # ࢳ𞤿隹.ð¹£Úâ’ˆ
+\u2433𚎛ðŸ§\u0661.á¡¢8\u0F72\u0600; \u2433𚎛5\u0661.á¡¢8\u0F72\u0600; [B5, B6, V6]; xn--5-bqc410un435a.xn--8-rkc763epjj; ; ; # 5Ù¡.á¡¢8ི
+\u2433𚎛5\u0661.ᡢ8\u0F72\u0600; ; [B5, B6, V6]; xn--5-bqc410un435a.xn--8-rkc763epjj; ; ; # 5١.ᡢ8ི
+xn--5-bqc410un435a.xn--8-rkc763epjj; \u2433𚎛5\u0661.ᡢ8\u0F72\u0600; [B5, B6, V6]; xn--5-bqc410un435a.xn--8-rkc763epjj; ; ; # 5١.ᡢ8ི
+ð¹ .🄀⒒-ó¨°ˆ; ; [B1, V6]; xn--7n0d.xn----xcp9757q1s13g; ; ; # ð¹ .🄀⒒-
+ð¹ .0.11.-ó¨°ˆ; ; [B1, V3, V6]; xn--7n0d.0.11.xn----8j07m; ; ; # ð¹ .0.11.-
xn--7n0d.0.11.xn----8j07m; ð¹ .0.11.-ó¨°ˆ; [B1, V3, V6]; xn--7n0d.0.11.xn----8j07m; ; ; # ð¹ .0.11.-
xn--7n0d.xn----xcp9757q1s13g; ð¹ .🄀⒒-ó¨°ˆ; [B1, V6]; xn--7n0d.xn----xcp9757q1s13g; ; ; # ð¹ .🄀⒒-
-Ï‚-。‌ðŸ­-; Ï‚-.‌1-; [C1, V3]; xn----xmb.xn--1--i1t; ; xn----zmb.1-; [V3] # Ï‚-.1-
-ς-。‌1-; ς-.‌1-; [C1, V3]; xn----xmb.xn--1--i1t; ; xn----zmb.1-; [V3] # ς-.1-
-Σ-。‌1-; σ-.‌1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1-
-σ-。‌1-; σ-.‌1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1-
+Ï‚-。\u200CðŸ­-; Ï‚-.\u200C1-; [C1, V3]; xn----xmb.xn--1--i1t; ; xn----zmb.1-; [V3] # Ï‚-.1-
+ς-。\u200C1-; ς-.\u200C1-; [C1, V3]; xn----xmb.xn--1--i1t; ; xn----zmb.1-; [V3] # ς-.1-
+Σ-。\u200C1-; σ-.\u200C1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1-
+σ-。\u200C1-; σ-.\u200C1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1-
xn----zmb.1-; σ-.1-; [V3]; xn----zmb.1-; ; ; # σ-.1-
-xn----zmb.xn--1--i1t; σ-.‌1-; [C1, V3]; xn----zmb.xn--1--i1t; ; ; # σ-.1-
-xn----xmb.xn--1--i1t; ς-.‌1-; [C1, V3]; xn----xmb.xn--1--i1t; ; ; # ς-.1-
-Σ-。‌ðŸ­-; σ-.‌1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1-
-σ-。‌ðŸ­-; σ-.‌1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1-
-᜴-ೢ.󠄩Ⴄ; ᜴-ೢ.Ⴄ; [P1, V5, V6]; xn----ggf830f.xn--cnd; ; ; # ᜴-ೢ.Ⴄ
-᜴-ೢ.󠄩Ⴄ; ᜴-ೢ.Ⴄ; [P1, V5, V6]; xn----ggf830f.xn--cnd; ; ; # ᜴-ೢ.Ⴄ
-᜴-ೢ.󠄩ⴄ; ᜴-ೢ.ⴄ; [V5]; xn----ggf830f.xn--vkj; ; ; # ᜴-ೢ.ⴄ
-xn----ggf830f.xn--vkj; ᜴-ೢ.ⴄ; [V5]; xn----ggf830f.xn--vkj; ; ; # ᜴-ೢ.ⴄ
-xn----ggf830f.xn--cnd; ᜴-ೢ.Ⴄ; [V5, V6]; xn----ggf830f.xn--cnd; ; ; # ᜴-ೢ.Ⴄ
-᜴-ೢ.󠄩ⴄ; ᜴-ೢ.ⴄ; [V5]; xn----ggf830f.xn--vkj; ; ; # ᜴-ೢ.ⴄ
-ò­ˆ—♋ڻð¦¥ï½¡à¥”â’ˆ; ò­ˆ—♋ڻð¦¥.॔⒈; [B1, B5, B6, P1, V5, V6]; xn--ukb372n129m3rs7f.xn--u3b240l; ; ; # ♋ڻð¦¥.॔⒈
-ò­ˆ—♋ڻð¦¥ã€‚॔1.; ò­ˆ—♋ڻð¦¥.॔1.; [B1, B5, B6, P1, V5, V6]; xn--ukb372n129m3rs7f.xn--1-fyd.; ; ; # ♋ڻð¦¥.॔1.
-xn--ukb372n129m3rs7f.xn--1-fyd.; ò­ˆ—♋ڻð¦¥.॔1.; [B1, B5, B6, V5, V6]; xn--ukb372n129m3rs7f.xn--1-fyd.; ; ; # ♋ڻð¦¥.॔1.
-xn--ukb372n129m3rs7f.xn--u3b240l; ò­ˆ—♋ڻð¦¥.॔⒈; [B1, B5, B6, V5, V6]; xn--ukb372n129m3rs7f.xn--u3b240l; ; ; # ♋ڻð¦¥.॔⒈
-֤.Û᪳‌; Ö¤.Û᪳‌; [B1, B3, B6, C1, V5]; xn--vcb.xn--0kb623hm1d; ; xn--vcb.xn--0kb623h; [B1, B3, B6, V5] # Ö¤.Û᪳
-Ö¤.Û᪳‌; ; [B1, B3, B6, C1, V5]; xn--vcb.xn--0kb623hm1d; ; xn--vcb.xn--0kb623h; [B1, B3, B6, V5] # Ö¤.Û᪳
-xn--vcb.xn--0kb623h; Ö¤.Û᪳; [B1, B3, B6, V5]; xn--vcb.xn--0kb623h; ; ; # Ö¤.Û᪳
-xn--vcb.xn--0kb623hm1d; Ö¤.Û᪳‌; [B1, B3, B6, C1, V5]; xn--vcb.xn--0kb623hm1d; ; ; # Ö¤.Û᪳
-ñ¢­à¡†â‰®à«ï¼Žðž¦Š; ñ¢­à¡†â‰®à«.𞦊; [B5, B6, P1, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮à«.
-ñ¢­à¡†≮à«ï¼Žðž¦Š; ñ¢­à¡†â‰®à«.𞦊; [B5, B6, P1, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮à«.
-ñ¢­à¡†â‰®à«.𞦊; ; [B5, B6, P1, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮à«.
-ñ¢­à¡†≮à«.𞦊; ñ¢­à¡†â‰®à«.𞦊; [B5, B6, P1, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮à«.
-xn--4vb80kq29ayo62l.xn--8g6h; ñ¢­à¡†â‰®à«.𞦊; [B5, B6, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮à«.
-â€ã€‚𞀘⒈ê¡æ“‰; â€.𞀘⒈ê¡æ“‰; [C2, P1, V5, V6]; xn--1ug.xn--tsh026uql4bew9p; ; .xn--tsh026uql4bew9p; [P1, V5, V6, A4_2] # .𞀘⒈ê¡æ“‰
-â€ã€‚𞀘1.ê¡æ“‰; â€.𞀘1.ê¡æ“‰; [C2, V5]; xn--1ug.xn--1-1p4r.xn--s7uv61m; ; .xn--1-1p4r.xn--s7uv61m; [V5, A4_2] # .𞀘1.ê¡æ“‰
+xn----zmb.xn--1--i1t; σ-.\u200C1-; [C1, V3]; xn----zmb.xn--1--i1t; ; ; # σ-.1-
+xn----xmb.xn--1--i1t; Ï‚-.\u200C1-; [C1, V3]; xn----xmb.xn--1--i1t; ; ; # Ï‚-.1-
+Σ-。\u200CðŸ­-; σ-.\u200C1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1-
+σ-。\u200CðŸ­-; σ-.\u200C1-; [C1, V3]; xn----zmb.xn--1--i1t; ; xn----zmb.1-; [V3] # σ-.1-
+\u1734-\u0CE2.󠄩Ⴄ; \u1734-\u0CE2.Ⴄ; [V5, V6]; xn----ggf830f.xn--cnd; ; ; # ᜴-ೢ.Ⴄ
+\u1734-\u0CE2.󠄩Ⴄ; \u1734-\u0CE2.Ⴄ; [V5, V6]; xn----ggf830f.xn--cnd; ; ; # ᜴-ೢ.Ⴄ
+\u1734-\u0CE2.󠄩ⴄ; \u1734-\u0CE2.ⴄ; [V5]; xn----ggf830f.xn--vkj; ; ; # ᜴-ೢ.ⴄ
+xn----ggf830f.xn--vkj; \u1734-\u0CE2.ⴄ; [V5]; xn----ggf830f.xn--vkj; ; ; # ᜴-ೢ.ⴄ
+xn----ggf830f.xn--cnd; \u1734-\u0CE2.Ⴄ; [V5, V6]; xn----ggf830f.xn--cnd; ; ; # ᜴-ೢ.Ⴄ
+\u1734-\u0CE2.󠄩ⴄ; \u1734-\u0CE2.ⴄ; [V5]; xn----ggf830f.xn--vkj; ; ; # ᜴-ೢ.ⴄ
+ò­ˆ—♋\u06BBð¦¥ï½¡\u0954â’ˆ; ò­ˆ—♋\u06BBð¦¥.\u0954â’ˆ; [B1, B5, B6, V5, V6]; xn--ukb372n129m3rs7f.xn--u3b240l; ; ; # ♋ڻð¦¥.॔⒈
+ò­ˆ—♋\u06BBð¦¥ã€‚\u09541.; ò­ˆ—♋\u06BBð¦¥.\u09541.; [B1, B5, B6, V5, V6]; xn--ukb372n129m3rs7f.xn--1-fyd.; ; ; # ♋ڻð¦¥.॔1.
+xn--ukb372n129m3rs7f.xn--1-fyd.; ò­ˆ—♋\u06BBð¦¥.\u09541.; [B1, B5, B6, V5, V6]; xn--ukb372n129m3rs7f.xn--1-fyd.; ; ; # ♋ڻð¦¥.॔1.
+xn--ukb372n129m3rs7f.xn--u3b240l; ò­ˆ—♋\u06BBð¦¥.\u0954â’ˆ; [B1, B5, B6, V5, V6]; xn--ukb372n129m3rs7f.xn--u3b240l; ; ; # ♋ڻð¦¥.॔⒈
+\u05A4.\u06C1\u1AB3\u200C; \u05A4.\u06C1\u1AB3\u200C; [B1, B3, C1, V5]; xn--vcb.xn--0kb623hm1d; ; xn--vcb.xn--0kb623h; [B1, V5] # Ö¤.Û᪳
+\u05A4.\u06C1\u1AB3\u200C; ; [B1, B3, C1, V5]; xn--vcb.xn--0kb623hm1d; ; xn--vcb.xn--0kb623h; [B1, V5] # Ö¤.Û᪳
+xn--vcb.xn--0kb623h; \u05A4.\u06C1\u1AB3; [B1, V5]; xn--vcb.xn--0kb623h; ; ; # Ö¤.Û᪳
+xn--vcb.xn--0kb623hm1d; \u05A4.\u06C1\u1AB3\u200C; [B1, B3, C1, V5]; xn--vcb.xn--0kb623hm1d; ; ; # Ö¤.Û᪳
+ñ¢­\u0846≮\u0ACD.𞦊; ñ¢­\u0846≮\u0ACD.𞦊; [B5, B6, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮à«.
+ñ¢­\u0846<\u0338\u0ACD.𞦊; ñ¢­\u0846≮\u0ACD.𞦊; [B5, B6, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮à«.
+ñ¢­\u0846≮\u0ACD.𞦊; ; [B5, B6, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮à«.
+ñ¢­\u0846<\u0338\u0ACD.𞦊; ñ¢­\u0846≮\u0ACD.𞦊; [B5, B6, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮à«.
+xn--4vb80kq29ayo62l.xn--8g6h; ñ¢­\u0846≮\u0ACD.𞦊; [B5, B6, V6]; xn--4vb80kq29ayo62l.xn--8g6h; ; ; # ࡆ≮à«.
+\u200D。𞀘⒈ê¡æ“‰; \u200D.𞀘⒈ê¡æ“‰; [C2, V5, V6]; xn--1ug.xn--tsh026uql4bew9p; ; .xn--tsh026uql4bew9p; [V5, V6, A4_2] # .𞀘⒈ê¡æ“‰
+\u200D。𞀘1.ê¡æ“‰; \u200D.𞀘1.ê¡æ“‰; [C2, V5]; xn--1ug.xn--1-1p4r.xn--s7uv61m; ; .xn--1-1p4r.xn--s7uv61m; [V5, A4_2] # .𞀘1.ê¡æ“‰
.xn--1-1p4r.xn--s7uv61m; .𞀘1.ê¡æ“‰; [V5, X4_2]; .xn--1-1p4r.xn--s7uv61m; [V5, A4_2]; ; # .𞀘1.ê¡æ“‰
-xn--1ug.xn--1-1p4r.xn--s7uv61m; â€.𞀘1.ê¡æ“‰; [C2, V5]; xn--1ug.xn--1-1p4r.xn--s7uv61m; ; ; # .𞀘1.ê¡æ“‰
+xn--1ug.xn--1-1p4r.xn--s7uv61m; \u200D.𞀘1.ê¡æ“‰; [C2, V5]; xn--1ug.xn--1-1p4r.xn--s7uv61m; ; ; # .𞀘1.ê¡æ“‰
.xn--tsh026uql4bew9p; .𞀘⒈ê¡æ“‰; [V5, V6, X4_2]; .xn--tsh026uql4bew9p; [V5, V6, A4_2]; ; # .𞀘⒈ê¡æ“‰
-xn--1ug.xn--tsh026uql4bew9p; â€.𞀘⒈ê¡æ“‰; [C2, V5, V6]; xn--1ug.xn--tsh026uql4bew9p; ; ; # .𞀘⒈ê¡æ“‰
-₈ߋ.ﭤ≠; 8ߋ.ٿ≠; [B1, B3, P1, V6]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠
-₈ߋ.ﭤ≠; 8ߋ.ٿ≠; [B1, B3, P1, V6]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠
-8ߋ.ٿ≠; ; [B1, B3, P1, V6]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠
-8ߋ.ٿ≠; 8ߋ.ٿ≠; [B1, B3, P1, V6]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠
-xn--8-zbd.xn--4ib883l; 8ߋ.ٿ≠; [B1, B3, V6]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠
-ᢡߞò¹£.â’’Ù‚ð‘¦; ; [B1, B5, P1, V6]; xn--5sb596fi873t.xn--ehb336mvy7n; ; ; # ᢡߞ.â’’Ù‚ð‘¦
-ᢡߞò¹£.11.Ù‚ð‘¦; ; [B1, B5, P1, V6]; xn--5sb596fi873t.11.xn--ehb4198k; ; ; # ᢡߞ.11.Ù‚ð‘¦
-xn--5sb596fi873t.11.xn--ehb4198k; ᢡߞò¹£.11.Ù‚ð‘¦; [B1, B5, V6]; xn--5sb596fi873t.11.xn--ehb4198k; ; ; # ᢡߞ.11.Ù‚ð‘¦
-xn--5sb596fi873t.xn--ehb336mvy7n; ᢡߞò¹£.â’’Ù‚ð‘¦; [B1, B5, V6]; xn--5sb596fi873t.xn--ehb336mvy7n; ; ; # ᢡߞ.â’’Ù‚ð‘¦
-่-ð¹ºðŸœ.Í£Û¡â’; ่-ð¹º4.Í£Û¡â’; [B1, P1, V5, V6]; xn---4-owiz479s.xn--eva20pjv9a; ; ; # ่-ð¹º4.Í£Û¡â’
-่-ð¹º4.Í£Û¡8.; ; [B1, V5]; xn---4-owiz479s.xn--8-ihb69x.; ; ; # ่-ð¹º4.Í£Û¡8.
-xn---4-owiz479s.xn--8-ihb69x.; ่-ð¹º4.Í£Û¡8.; [B1, V5]; xn---4-owiz479s.xn--8-ihb69x.; ; ; # ่-ð¹º4.Í£Û¡8.
-xn---4-owiz479s.xn--eva20pjv9a; ่-ð¹º4.Í£Û¡â’; [B1, V5, V6]; xn---4-owiz479s.xn--eva20pjv9a; ; ; # ่-ð¹º4.Í£Û¡â’
-â«ï½¡áƒ€-óƒ¢; â«.Ⴠ-óƒ¢; [P1, V6]; xn--r3i.xn----z1g58579u; ; ; # â«.Ⴠ-
-â«ã€‚Ⴠ-óƒ¢; â«.Ⴠ-óƒ¢; [P1, V6]; xn--r3i.xn----z1g58579u; ; ; # â«.Ⴠ-
-â«ã€‚â´ -óƒ¢; â«.â´ -óƒ¢; [P1, V6]; xn--r3i.xn----2wst7439i; ; ; # â«.â´ -
+xn--1ug.xn--tsh026uql4bew9p; \u200D.𞀘⒈ê¡æ“‰; [C2, V5, V6]; xn--1ug.xn--tsh026uql4bew9p; ; ; # .𞀘⒈ê¡æ“‰
+₈\u07CB.\uFB64≠; 8\u07CB.\u067F≠; [B1, B3]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠
+₈\u07CB.\uFB64=\u0338; 8\u07CB.\u067F≠; [B1, B3]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠
+8\u07CB.\u067F≠; ; [B1, B3]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠
+8\u07CB.\u067F=\u0338; 8\u07CB.\u067F≠; [B1, B3]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠
+xn--8-zbd.xn--4ib883l; 8\u07CB.\u067F≠; [B1, B3]; xn--8-zbd.xn--4ib883l; ; ; # 8ߋ.ٿ≠
+ᢡ\u07DEò¹£.â’’\u0642ð‘¦; ; [B1, B5, V6]; xn--5sb596fi873t.xn--ehb336mvy7n; ; ; # ᢡߞ.â’’Ù‚ð‘¦
+ᢡ\u07DEò¹£.11.\u0642ð‘¦; ; [B1, B5, V6]; xn--5sb596fi873t.11.xn--ehb4198k; ; ; # ᢡߞ.11.Ù‚ð‘¦
+xn--5sb596fi873t.11.xn--ehb4198k; ᢡ\u07DEò¹£.11.\u0642ð‘¦; [B1, B5, V6]; xn--5sb596fi873t.11.xn--ehb4198k; ; ; # ᢡߞ.11.Ù‚ð‘¦
+xn--5sb596fi873t.xn--ehb336mvy7n; ᢡ\u07DEò¹£.â’’\u0642ð‘¦; [B1, B5, V6]; xn--5sb596fi873t.xn--ehb336mvy7n; ; ; # ᢡߞ.â’’Ù‚ð‘¦
+\u0E48-ð¹ºðŸœ.\u0363\u06E1â’; \u0E48-ð¹º4.\u0363\u06E1â’; [B1, V5, V6]; xn---4-owiz479s.xn--eva20pjv9a; ; ; # ่-ð¹º4.Í£Û¡â’
+\u0E48-ð¹º4.\u0363\u06E18.; ; [B1, V5]; xn---4-owiz479s.xn--8-ihb69x.; ; ; # ่-ð¹º4.Í£Û¡8.
+xn---4-owiz479s.xn--8-ihb69x.; \u0E48-ð¹º4.\u0363\u06E18.; [B1, V5]; xn---4-owiz479s.xn--8-ihb69x.; ; ; # ่-ð¹º4.Í£Û¡8.
+xn---4-owiz479s.xn--eva20pjv9a; \u0E48-ð¹º4.\u0363\u06E1â’; [B1, V5, V6]; xn---4-owiz479s.xn--eva20pjv9a; ; ; # ่-ð¹º4.Í£Û¡â’
+â«ï½¡áƒ€-óƒ¢; â«.Ⴠ-óƒ¢; [V6]; xn--r3i.xn----z1g58579u; ; ; # â«.Ⴠ-
+â«ã€‚Ⴠ-óƒ¢; â«.Ⴠ-óƒ¢; [V6]; xn--r3i.xn----z1g58579u; ; ; # â«.Ⴠ-
+â«ã€‚â´ -óƒ¢; â«.â´ -óƒ¢; [V6]; xn--r3i.xn----2wst7439i; ; ; # â«.â´ -
xn--r3i.xn----2wst7439i; â«.â´ -óƒ¢; [V6]; xn--r3i.xn----2wst7439i; ; ; # â«.â´ -
xn--r3i.xn----z1g58579u; â«.Ⴠ-óƒ¢; [V6]; xn--r3i.xn----z1g58579u; ; ; # â«.Ⴠ-
-â«ï½¡â´ -óƒ¢; â«.â´ -óƒ¢; [P1, V6]; xn--r3i.xn----2wst7439i; ; ; # â«.â´ -
+â«ï½¡â´ -óƒ¢; â«.â´ -óƒ¢; [V6]; xn--r3i.xn----2wst7439i; ; ; # â«.â´ -
𑑂◊.⦟∠; 𑑂◊.⦟∠; [V5]; xn--01h3338f.xn--79g270a; ; ; # 𑑂◊.⦟∠
𑑂◊.⦟∠; ; [V5]; xn--01h3338f.xn--79g270a; ; ; # 𑑂◊.⦟∠
xn--01h3338f.xn--79g270a; 𑑂◊.⦟∠; [V5]; xn--01h3338f.xn--79g270a; ; ; # 𑑂◊.⦟∠
-𿌰-٢。󋸛ꡂ; 𿌰-٢.󋸛ꡂ; [B5, B6, P1, V6]; xn----dqc20828e.xn--bc9an2879c; ; ; # -٢.ꡂ
-xn----dqc20828e.xn--bc9an2879c; 𿌰-٢.󋸛ꡂ; [B5, B6, V6]; xn----dqc20828e.xn--bc9an2879c; ; ; # -٢.ꡂ
-ٸ。ó ¬Ý𞪭ð¹ª; يٴ.ó ¬Ý𞪭ð¹ª; [B1, P1, V6]; xn--mhb8f.xn--oob2585kfdsfsbo7h; ; ; # يٴ.Ýð¹ª
-يٴ。ó ¬Ý𞪭ð¹ª; يٴ.ó ¬Ý𞪭ð¹ª; [B1, P1, V6]; xn--mhb8f.xn--oob2585kfdsfsbo7h; ; ; # يٴ.Ýð¹ª
-xn--mhb8f.xn--oob2585kfdsfsbo7h; يٴ.ó ¬Ý𞪭ð¹ª; [B1, V6]; xn--mhb8f.xn--oob2585kfdsfsbo7h; ; ; # يٴ.Ýð¹ª
-ð«†êŒ„。â€á£¬; ð«†êŒ„.â€á£¬; [B1, B2, B3, C2]; xn--y77ao18q.xn--wdf367a; ; xn--y77ao18q.xn--wdf; [B2, B3] # ð«†êŒ„.ᣬ
-ð«†êŒ„。â€á£¬; ð«†êŒ„.â€á£¬; [B1, B2, B3, C2]; xn--y77ao18q.xn--wdf367a; ; xn--y77ao18q.xn--wdf; [B2, B3] # ð«†êŒ„.ᣬ
+𿌰-\u0662。󋸛ꡂ; 𿌰-\u0662.󋸛ꡂ; [B5, B6, V6]; xn----dqc20828e.xn--bc9an2879c; ; ; # -٢.ꡂ
+xn----dqc20828e.xn--bc9an2879c; 𿌰-\u0662.󋸛ꡂ; [B5, B6, V6]; xn----dqc20828e.xn--bc9an2879c; ; ; # -٢.ꡂ
+\u0678。ó ¬\u0741𞪭ð¹ª; \u064A\u0674.ó ¬\u0741𞪭ð¹ª; [B1, V6]; xn--mhb8f.xn--oob2585kfdsfsbo7h; ; ; # يٴ.Ýð¹ª
+\u064A\u0674。ó ¬\u0741𞪭ð¹ª; \u064A\u0674.ó ¬\u0741𞪭ð¹ª; [B1, V6]; xn--mhb8f.xn--oob2585kfdsfsbo7h; ; ; # يٴ.Ýð¹ª
+xn--mhb8f.xn--oob2585kfdsfsbo7h; \u064A\u0674.ó ¬\u0741𞪭ð¹ª; [B1, V6]; xn--mhb8f.xn--oob2585kfdsfsbo7h; ; ; # يٴ.Ýð¹ª
+ð«†êŒ„。\u200Dᣬ; ð«†êŒ„.\u200Dᣬ; [B1, B2, B3, C2]; xn--y77ao18q.xn--wdf367a; ; xn--y77ao18q.xn--wdf; [B2, B3] # ð«†êŒ„.ᣬ
+ð«†êŒ„。\u200Dᣬ; ð«†êŒ„.\u200Dᣬ; [B1, B2, B3, C2]; xn--y77ao18q.xn--wdf367a; ; xn--y77ao18q.xn--wdf; [B2, B3] # ð«†êŒ„.ᣬ
xn--y77ao18q.xn--wdf; ð«†êŒ„.ᣬ; [B2, B3]; xn--y77ao18q.xn--wdf; ; ; # ð«†êŒ„.ᣬ
-xn--y77ao18q.xn--wdf367a; ð«†êŒ„.â€á£¬; [B1, B2, B3, C2]; xn--y77ao18q.xn--wdf367a; ; ; # ð«†êŒ„.ᣬ
-₀٢。󅪞≯-; 0٢.󅪞≯-; [B1, B6, P1, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯-
-₀٢。󅪞≯-; 0٢.󅪞≯-; [B1, B6, P1, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯-
-0٢。󅪞≯-; 0٢.󅪞≯-; [B1, B6, P1, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯-
-0٢。󅪞≯-; 0٢.󅪞≯-; [B1, B6, P1, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯-
-xn--0-dqc.xn----ogov3342l; 0٢.󅪞≯-; [B1, B6, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯-
-Ìœð¹«-𞯃.ð‹¤à¡…; ; [B1, P1, V5, V6]; xn----gdb7046r692g.xn--3vb1349j; ; ; # Ìœð¹«-.ð‹¤à¡…
-xn----gdb7046r692g.xn--3vb1349j; Ìœð¹«-𞯃.ð‹¤à¡…; [B1, V5, V6]; xn----gdb7046r692g.xn--3vb1349j; ; ; # Ìœð¹«-.ð‹¤à¡…
-≠。ð©‘ð¹©áƒÖ”; ≠.ð©‘ð¹©áƒÖ”; [B1, P1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.ð©‘ð¹©áƒÖ”
-≠。ð©‘ð¹©áƒÖ”; ≠.ð©‘ð¹©áƒÖ”; [B1, P1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.ð©‘ð¹©áƒÖ”
-≠。ð©‘ð¹©áƒÖ”; ≠.ð©‘ð¹©áƒÖ”; [B1, P1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.ð©‘ð¹©áƒÖ”
-≠。ð©‘ð¹©áƒÖ”; ≠.ð©‘ð¹©áƒÖ”; [B1, P1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.ð©‘ð¹©áƒÖ”
-≠。ð©‘ð¹©â´¡Ö”; ≠.ð©‘ð¹©â´¡Ö”; [B1, P1, V5, V6]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.ð©‘ð¹©â´¡Ö”
-≠。ð©‘ð¹©â´¡Ö”; ≠.ð©‘ð¹©â´¡Ö”; [B1, P1, V5, V6]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.ð©‘ð¹©â´¡Ö”
-xn--1ch.xn--fcb363rk03mypug; ≠.ð©‘ð¹©â´¡Ö”; [B1, V5, V6]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.ð©‘ð¹©â´¡Ö”
-xn--1ch.xn--fcb538c649rypog; ≠.ð©‘ð¹©áƒÖ”; [B1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.ð©‘ð¹©áƒÖ”
-≠。ð©‘ð¹©â´¡Ö”; ≠.ð©‘ð¹©â´¡Ö”; [B1, P1, V5, V6]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.ð©‘ð¹©â´¡Ö”
-≠。ð©‘ð¹©â´¡Ö”; ≠.ð©‘ð¹©â´¡Ö”; [B1, P1, V5, V6]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.ð©‘ð¹©â´¡Ö”
-𖫳≠.á‚ ð®€; ; [B1, B5, B6, P1, V5, V6]; xn--1ch9250k.xn--7md2659j; ; ; # 𖫳≠.á‚ ð®€
-ð–«³≠.á‚ ð®€; 𖫳≠.á‚ ð®€; [B1, B5, B6, P1, V5, V6]; xn--1ch9250k.xn--7md2659j; ; ; # 𖫳≠.á‚ ð®€
-ð–«³≠.â´€ð®€; 𖫳≠.â´€ð®€; [B1, B5, B6, P1, V5, V6]; xn--1ch9250k.xn--rkj6232e; ; ; # 𖫳≠.â´€ð®€
-𖫳≠.â´€ð®€; ; [B1, B5, B6, P1, V5, V6]; xn--1ch9250k.xn--rkj6232e; ; ; # 𖫳≠.â´€ð®€
-xn--1ch9250k.xn--rkj6232e; 𖫳≠.â´€ð®€; [B1, B5, B6, V5, V6]; xn--1ch9250k.xn--rkj6232e; ; ; # 𖫳≠.â´€ð®€
+xn--y77ao18q.xn--wdf367a; ð«†êŒ„.\u200Dᣬ; [B1, B2, B3, C2]; xn--y77ao18q.xn--wdf367a; ; ; # ð«†êŒ„.ᣬ
+₀\u0662。󅪞≯-; 0\u0662.󅪞≯-; [B1, B6, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯-
+₀\u0662。󅪞>\u0338-; 0\u0662.󅪞≯-; [B1, B6, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯-
+0\u0662。󅪞≯-; 0\u0662.󅪞≯-; [B1, B6, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯-
+0\u0662。󅪞>\u0338-; 0\u0662.󅪞≯-; [B1, B6, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯-
+xn--0-dqc.xn----ogov3342l; 0\u0662.󅪞≯-; [B1, B6, V3, V6]; xn--0-dqc.xn----ogov3342l; ; ; # 0٢.≯-
+\u031Cð¹«-𞯃.ð‹¤\u0845; ; [B1, V5, V6]; xn----gdb7046r692g.xn--3vb1349j; ; ; # Ìœð¹«-.ð‹¤à¡…
+xn----gdb7046r692g.xn--3vb1349j; \u031Cð¹«-𞯃.ð‹¤\u0845; [B1, V5, V6]; xn----gdb7046r692g.xn--3vb1349j; ; ; # Ìœð¹«-.ð‹¤à¡…
+≠。ð©‘ð¹©áƒ\u0594; ≠.ð©‘ð¹©áƒ\u0594; [B1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.ð©‘ð¹©áƒÖ”
+=\u0338。ð©‘ð¹©áƒ\u0594; ≠.ð©‘ð¹©áƒ\u0594; [B1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.ð©‘ð¹©áƒÖ”
+≠。ð©‘ð¹©áƒ\u0594; ≠.ð©‘ð¹©áƒ\u0594; [B1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.ð©‘ð¹©áƒÖ”
+=\u0338。ð©‘ð¹©áƒ\u0594; ≠.ð©‘ð¹©áƒ\u0594; [B1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.ð©‘ð¹©áƒÖ”
+=\u0338。ð©‘ð¹©â´¡\u0594; ≠.ð©‘ð¹©â´¡\u0594; [B1, V5]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.ð©‘ð¹©â´¡Ö”
+≠。ð©‘ð¹©â´¡\u0594; ≠.ð©‘ð¹©â´¡\u0594; [B1, V5]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.ð©‘ð¹©â´¡Ö”
+xn--1ch.xn--fcb363rk03mypug; ≠.ð©‘ð¹©â´¡\u0594; [B1, V5]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.ð©‘ð¹©â´¡Ö”
+xn--1ch.xn--fcb538c649rypog; ≠.ð©‘ð¹©áƒ\u0594; [B1, V5, V6]; xn--1ch.xn--fcb538c649rypog; ; ; # ≠.ð©‘ð¹©áƒÖ”
+=\u0338。ð©‘ð¹©â´¡\u0594; ≠.ð©‘ð¹©â´¡\u0594; [B1, V5]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.ð©‘ð¹©â´¡Ö”
+≠。ð©‘ð¹©â´¡\u0594; ≠.ð©‘ð¹©â´¡\u0594; [B1, V5]; xn--1ch.xn--fcb363rk03mypug; ; ; # ≠.ð©‘ð¹©â´¡Ö”
+𖫳≠.á‚ ð®€; ; [B1, B5, B6, V5, V6]; xn--1ch9250k.xn--7md2659j; ; ; # 𖫳≠.á‚ ð®€
+ð–«³=\u0338.á‚ ð®€; 𖫳≠.á‚ ð®€; [B1, B5, B6, V5, V6]; xn--1ch9250k.xn--7md2659j; ; ; # 𖫳≠.á‚ ð®€
+ð–«³=\u0338.â´€ð®€; 𖫳≠.â´€ð®€; [B1, B5, B6, V5]; xn--1ch9250k.xn--rkj6232e; ; ; # 𖫳≠.â´€ð®€
+𖫳≠.â´€ð®€; ; [B1, B5, B6, V5]; xn--1ch9250k.xn--rkj6232e; ; ; # 𖫳≠.â´€ð®€
+xn--1ch9250k.xn--rkj6232e; 𖫳≠.â´€ð®€; [B1, B5, B6, V5]; xn--1ch9250k.xn--rkj6232e; ; ; # 𖫳≠.â´€ð®€
xn--1ch9250k.xn--7md2659j; 𖫳≠.á‚ ð®€; [B1, B5, B6, V5, V6]; xn--1ch9250k.xn--7md2659j; ; ; # 𖫳≠.á‚ ð®€
-󠅾ܶܦ.ᢚ閪࣢ð©Ÿ; ܶܦ.ᢚ閪࣢ð©Ÿ; [B1, B5, B6, P1, V5, V6]; xn--wnb5a.xn--l0b161fis8gbp5m; ; ; # ܶܦ.ᢚ閪ð©Ÿ
-󠅾ܶܦ.ᢚ閪࣢ð©Ÿ; ܶܦ.ᢚ閪࣢ð©Ÿ; [B1, B5, B6, P1, V5, V6]; xn--wnb5a.xn--l0b161fis8gbp5m; ; ; # ܶܦ.ᢚ閪ð©Ÿ
-xn--wnb5a.xn--l0b161fis8gbp5m; ܶܦ.ᢚ閪࣢ð©Ÿ; [B1, B5, B6, V5, V6]; xn--wnb5a.xn--l0b161fis8gbp5m; ; ; # ܶܦ.ᢚ閪ð©Ÿ
-â€ó ‡œÛ‹ê£©ï½¡âƒà¾°-ᛟ; â€Û‹ê£©.âƒà¾°-ᛟ; [B1, C2, V5]; xn--blb540ke10h.xn----gmg236cj6k; ; xn--blb8114f.xn----gmg236cj6k; [B1, V5] # ۋ꣩.âƒà¾°-ᛟ
-â€ó ‡œÛ‹ê£©ã€‚âƒà¾°-ᛟ; â€Û‹ê£©.âƒà¾°-ᛟ; [B1, C2, V5]; xn--blb540ke10h.xn----gmg236cj6k; ; xn--blb8114f.xn----gmg236cj6k; [B1, V5] # ۋ꣩.âƒà¾°-ᛟ
-xn--blb8114f.xn----gmg236cj6k; ۋ꣩.âƒà¾°-ᛟ; [B1, V5]; xn--blb8114f.xn----gmg236cj6k; ; ; # ۋ꣩.âƒà¾°-ᛟ
-xn--blb540ke10h.xn----gmg236cj6k; â€Û‹ê£©.âƒà¾°-ᛟ; [B1, C2, V5]; xn--blb540ke10h.xn----gmg236cj6k; ; ; # ۋ꣩.âƒà¾°-ᛟ
-í—󘖙ฺóššã€‚ÚºðŸœ; í—󘖙ฺóšš.Úº4; [P1, V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # í—ฺ.Úº4
-헁󘖙ฺóššã€‚ÚºðŸœ; í—󘖙ฺóšš.Úº4; [P1, V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # í—ฺ.Úº4
-í—󘖙ฺóššã€‚Úº4; í—󘖙ฺóšš.Úº4; [P1, V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # í—ฺ.Úº4
-헁󘖙ฺóššã€‚Úº4; í—󘖙ฺóšš.Úº4; [P1, V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # í—ฺ.Úº4
-xn--o4c1723h8g85gt4ya.xn--4-dvc; í—󘖙ฺóšš.Úº4; [V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # í—ฺ.Úº4
-ð¹­ï½¡óƒ±‚‌Ⴞ; ð¹­.󃱂‌Ⴞ; [B1, C1, P1, V6]; xn--lo0d.xn--2nd949eqw95u; ; xn--lo0d.xn--2nd75260n; [B1, P1, V6] # ð¹­.Ⴞ
-ð¹­ã€‚󃱂‌Ⴞ; ð¹­.󃱂‌Ⴞ; [B1, C1, P1, V6]; xn--lo0d.xn--2nd949eqw95u; ; xn--lo0d.xn--2nd75260n; [B1, P1, V6] # ð¹­.Ⴞ
-ð¹­ã€‚󃱂‌ⴞ; ð¹­.󃱂‌ⴞ; [B1, C1, P1, V6]; xn--lo0d.xn--0ugx72cwi33v; ; xn--lo0d.xn--mljx1099g; [B1, P1, V6] # ð¹­.â´ž
+ó …¾\u0736\u0726.ᢚ閪\u08E2ð©Ÿ; \u0736\u0726.ᢚ閪\u08E2ð©Ÿ; [B1, B5, B6, V5, V6]; xn--wnb5a.xn--l0b161fis8gbp5m; ; ; # ܶܦ.ᢚ閪ð©Ÿ
+ó …¾\u0736\u0726.ᢚ閪\u08E2ð©Ÿ; \u0736\u0726.ᢚ閪\u08E2ð©Ÿ; [B1, B5, B6, V5, V6]; xn--wnb5a.xn--l0b161fis8gbp5m; ; ; # ܶܦ.ᢚ閪ð©Ÿ
+xn--wnb5a.xn--l0b161fis8gbp5m; \u0736\u0726.ᢚ閪\u08E2ð©Ÿ; [B1, B5, B6, V5, V6]; xn--wnb5a.xn--l0b161fis8gbp5m; ; ; # ܶܦ.ᢚ閪ð©Ÿ
+\u200D󠇜\u06CB\uA8E9。\u20DD\u0FB0-ᛟ; \u200D\u06CB\uA8E9.\u20DD\u0FB0-ᛟ; [B1, C2, V5]; xn--blb540ke10h.xn----gmg236cj6k; ; xn--blb8114f.xn----gmg236cj6k; [B1, V5] # ۋ꣩.âƒà¾°-ᛟ
+\u200D󠇜\u06CB\uA8E9。\u20DD\u0FB0-ᛟ; \u200D\u06CB\uA8E9.\u20DD\u0FB0-ᛟ; [B1, C2, V5]; xn--blb540ke10h.xn----gmg236cj6k; ; xn--blb8114f.xn----gmg236cj6k; [B1, V5] # ۋ꣩.âƒà¾°-ᛟ
+xn--blb8114f.xn----gmg236cj6k; \u06CB\uA8E9.\u20DD\u0FB0-ᛟ; [B1, V5]; xn--blb8114f.xn----gmg236cj6k; ; ; # ۋ꣩.âƒà¾°-ᛟ
+xn--blb540ke10h.xn----gmg236cj6k; \u200D\u06CB\uA8E9.\u20DD\u0FB0-ᛟ; [B1, C2, V5]; xn--blb540ke10h.xn----gmg236cj6k; ; ; # ۋ꣩.âƒà¾°-ᛟ
+í—ó˜–™\u0E3Aóššã€‚\u06BAðŸœ; í—ó˜–™\u0E3Aóšš.\u06BA4; [V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # í—ฺ.Úº4
+헁󘖙\u0E3Aóššã€‚\u06BAðŸœ; í—ó˜–™\u0E3Aóšš.\u06BA4; [V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # í—ฺ.Úº4
+í—ó˜–™\u0E3Aóššã€‚\u06BA4; í—ó˜–™\u0E3Aóšš.\u06BA4; [V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # í—ฺ.Úº4
+헁󘖙\u0E3Aóššã€‚\u06BA4; í—ó˜–™\u0E3Aóšš.\u06BA4; [V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # í—ฺ.Úº4
+xn--o4c1723h8g85gt4ya.xn--4-dvc; í—ó˜–™\u0E3Aóšš.\u06BA4; [V6]; xn--o4c1723h8g85gt4ya.xn--4-dvc; ; ; # í—ฺ.Úº4
+ð¹­ï½¡óƒ±‚\u200CႾ; ð¹­.󃱂\u200CႾ; [B1, C1, V6]; xn--lo0d.xn--2nd949eqw95u; ; xn--lo0d.xn--2nd75260n; [B1, V6] # ð¹­.Ⴞ
+ð¹­ã€‚󃱂\u200CႾ; ð¹­.󃱂\u200CႾ; [B1, C1, V6]; xn--lo0d.xn--2nd949eqw95u; ; xn--lo0d.xn--2nd75260n; [B1, V6] # ð¹­.Ⴞ
+ð¹­ã€‚󃱂\u200Câ´ž; ð¹­.󃱂\u200Câ´ž; [B1, C1, V6]; xn--lo0d.xn--0ugx72cwi33v; ; xn--lo0d.xn--mljx1099g; [B1, V6] # ð¹­.â´ž
xn--lo0d.xn--mljx1099g; ð¹­.󃱂ⴞ; [B1, V6]; xn--lo0d.xn--mljx1099g; ; ; # ð¹­.â´ž
-xn--lo0d.xn--0ugx72cwi33v; ð¹­.󃱂‌ⴞ; [B1, C1, V6]; xn--lo0d.xn--0ugx72cwi33v; ; ; # ð¹­.â´ž
+xn--lo0d.xn--0ugx72cwi33v; ð¹­.󃱂\u200Câ´ž; [B1, C1, V6]; xn--lo0d.xn--0ugx72cwi33v; ; ; # ð¹­.â´ž
xn--lo0d.xn--2nd75260n; ð¹­.󃱂Ⴞ; [B1, V6]; xn--lo0d.xn--2nd75260n; ; ; # ð¹­.Ⴞ
-xn--lo0d.xn--2nd949eqw95u; ð¹­.󃱂‌Ⴞ; [B1, C1, V6]; xn--lo0d.xn--2nd949eqw95u; ; ; # ð¹­.Ⴞ
-ð¹­ï½¡óƒ±‚‌ⴞ; ð¹­.󃱂‌ⴞ; [B1, C1, P1, V6]; xn--lo0d.xn--0ugx72cwi33v; ; xn--lo0d.xn--mljx1099g; [B1, P1, V6] # ð¹­.â´ž
-꥓.̽𑂽馋; ; [P1, V5, V6]; xn--3j9a.xn--bua0708eqzrd; ; ; # ꥓.̽馋
-xn--3j9a.xn--bua0708eqzrd; ꥓.̽𑂽馋; [V5, V6]; xn--3j9a.xn--bua0708eqzrd; ; ; # ꥓.̽馋
-óˆ«òª›¸â€ï½¡äœ–; óˆ«òª›¸â€.䜖; [C2, P1, V6]; xn--1ug30527h9mxi.xn--k0o; ; xn--g138cxw05a.xn--k0o; [P1, V6] # .䜖
-óˆ«òª›¸â€ã€‚䜖; óˆ«òª›¸â€.䜖; [C2, P1, V6]; xn--1ug30527h9mxi.xn--k0o; ; xn--g138cxw05a.xn--k0o; [P1, V6] # .䜖
+xn--lo0d.xn--2nd949eqw95u; ð¹­.󃱂\u200CႾ; [B1, C1, V6]; xn--lo0d.xn--2nd949eqw95u; ; ; # ð¹­.Ⴞ
+ð¹­ï½¡óƒ±‚\u200Câ´ž; ð¹­.󃱂\u200Câ´ž; [B1, C1, V6]; xn--lo0d.xn--0ugx72cwi33v; ; xn--lo0d.xn--mljx1099g; [B1, V6] # ð¹­.â´ž
+\uA953.\u033D𑂽馋; ; [V5, V6]; xn--3j9a.xn--bua0708eqzrd; ; ; # ꥓.̽馋
+xn--3j9a.xn--bua0708eqzrd; \uA953.\u033D𑂽馋; [V5, V6]; xn--3j9a.xn--bua0708eqzrd; ; ; # ꥓.̽馋
+óˆ«òª›¸\u200D。䜖; óˆ«òª›¸\u200D.䜖; [C2, V6]; xn--1ug30527h9mxi.xn--k0o; ; xn--g138cxw05a.xn--k0o; [V6] # .䜖
+óˆ«òª›¸\u200D。䜖; óˆ«òª›¸\u200D.䜖; [C2, V6]; xn--1ug30527h9mxi.xn--k0o; ; xn--g138cxw05a.xn--k0o; [V6] # .䜖
xn--g138cxw05a.xn--k0o; óˆ«òª›¸.䜖; [V6]; xn--g138cxw05a.xn--k0o; ; ; # .䜖
-xn--1ug30527h9mxi.xn--k0o; óˆ«òª›¸â€.䜖; [C2, V6]; xn--1ug30527h9mxi.xn--k0o; ; ; # .䜖
-ᡯ⚉姶🄉.۷â€ðŸŽªâ€; ᡯ⚉姶🄉.Û·â€ðŸŽªâ€; [C2, P1, V6]; xn--c9e433epi4b3j20a.xn--kmb859ja94998b; ; xn--c9e433epi4b3j20a.xn--kmb6733w; [P1, V6] # ᡯ⚉姶🄉.۷🎪
-ᡯ⚉姶8,.Û·â€ðŸŽªâ€; ; [C2, P1, V6]; xn--8,-g9oy26fzu4d.xn--kmb859ja94998b; ; xn--8,-g9oy26fzu4d.xn--kmb6733w; [P1, V6] # ᡯ⚉姶8,.۷🎪
-xn--8,-g9oy26fzu4d.xn--kmb6733w; ᡯ⚉姶8,.۷🎪; [P1, V6]; xn--8,-g9oy26fzu4d.xn--kmb6733w; ; ; # ᡯ⚉姶8,.۷🎪
-xn--8,-g9oy26fzu4d.xn--kmb859ja94998b; ᡯ⚉姶8,.Û·â€ðŸŽªâ€; [C2, P1, V6]; xn--8,-g9oy26fzu4d.xn--kmb859ja94998b; ; ; # ᡯ⚉姶8,.۷🎪
+xn--1ug30527h9mxi.xn--k0o; óˆ«òª›¸\u200D.䜖; [C2, V6]; xn--1ug30527h9mxi.xn--k0o; ; ; # .䜖
+ᡯ⚉姶🄉.۷\u200D🎪\u200D; ᡯ⚉姶🄉.۷\u200D🎪\u200D; [C2, V6]; xn--c9e433epi4b3j20a.xn--kmb859ja94998b; ; xn--c9e433epi4b3j20a.xn--kmb6733w; [V6] # ᡯ⚉姶🄉.۷🎪
+ᡯ⚉姶8,.۷\u200D🎪\u200D; ; [C2, V6]; xn--8,-g9oy26fzu4d.xn--kmb859ja94998b; ; xn--8,-g9oy26fzu4d.xn--kmb6733w; [V6] # ᡯ⚉姶8,.۷🎪
+xn--8,-g9oy26fzu4d.xn--kmb6733w; ᡯ⚉姶8,.۷🎪; [V6]; xn--8,-g9oy26fzu4d.xn--kmb6733w; ; ; # ᡯ⚉姶8,.۷🎪
+xn--8,-g9oy26fzu4d.xn--kmb859ja94998b; ᡯ⚉姶8,.۷\u200D🎪\u200D; [C2, V6]; xn--8,-g9oy26fzu4d.xn--kmb859ja94998b; ; ; # ᡯ⚉姶8,.۷🎪
xn--c9e433epi4b3j20a.xn--kmb6733w; ᡯ⚉姶🄉.۷🎪; [V6]; xn--c9e433epi4b3j20a.xn--kmb6733w; ; ; # ᡯ⚉姶🄉.۷🎪
-xn--c9e433epi4b3j20a.xn--kmb859ja94998b; ᡯ⚉姶🄉.Û·â€ðŸŽªâ€; [C2, V6]; xn--c9e433epi4b3j20a.xn--kmb859ja94998b; ; ; # ᡯ⚉姶🄉.۷🎪
-ðž½€.ð¹¸ðŸš–ฺ; ; [B1, P1, V6]; xn--0n7h.xn--o4c9032klszf; ; ; # .ð¹¸ðŸš–ฺ
-xn--0n7h.xn--o4c9032klszf; ðž½€.ð¹¸ðŸš–ฺ; [B1, V6]; xn--0n7h.xn--o4c9032klszf; ; ; # .ð¹¸ðŸš–ฺ
-Ⴔᠵ。ð¹§Ý‡Û¹; á‚´á µ.ð¹§Ý‡Û¹; [B1, P1, V6]; xn--snd659a.xn--mmb9ml895e; ; ; # á‚´á µ.ð¹§Ý‡Û¹
-Ⴔᠵ。ð¹§Ý‡Û¹; á‚´á µ.ð¹§Ý‡Û¹; [B1, P1, V6]; xn--snd659a.xn--mmb9ml895e; ; ; # á‚´á µ.ð¹§Ý‡Û¹
-ⴔᠵ。ð¹§Ý‡Û¹; ⴔᠵ.ð¹§Ý‡Û¹; [B1]; xn--o7e997h.xn--mmb9ml895e; ; ; # ⴔᠵ.ð¹§Ý‡Û¹
-xn--o7e997h.xn--mmb9ml895e; ⴔᠵ.ð¹§Ý‡Û¹; [B1]; xn--o7e997h.xn--mmb9ml895e; ; ; # ⴔᠵ.ð¹§Ý‡Û¹
-xn--snd659a.xn--mmb9ml895e; á‚´á µ.ð¹§Ý‡Û¹; [B1, V6]; xn--snd659a.xn--mmb9ml895e; ; ; # á‚´á µ.ð¹§Ý‡Û¹
-ⴔᠵ。ð¹§Ý‡Û¹; ⴔᠵ.ð¹§Ý‡Û¹; [B1]; xn--o7e997h.xn--mmb9ml895e; ; ; # ⴔᠵ.ð¹§Ý‡Û¹
-áŸá¡ˆâ€Œï¼Žï¸’-ð–¾-; áŸá¡ˆâ€Œ.︒-ð–¾-; [C1, P1, V3, V5, V6]; xn--b7d82wo4h.xn-----c82nz547a; ; xn--b7d82w.xn-----c82nz547a; [P1, V3, V5, V6] # áŸá¡ˆ.︒-ð–¾-
-áŸá¡ˆâ€Œ.。-ð–¾-; áŸá¡ˆâ€Œ..-ð–¾-; [C1, V3, V5, X4_2]; xn--b7d82wo4h..xn-----pe4u; [C1, V3, V5, A4_2]; xn--b7d82w..xn-----pe4u; [V3, V5, A4_2] # áŸá¡ˆ..-ð–¾-
-xn--b7d82w..xn-----pe4u; áŸá¡ˆ..-ð–¾-; [V3, V5, X4_2]; xn--b7d82w..xn-----pe4u; [V3, V5, A4_2]; ; # áŸá¡ˆ..-ð–¾-
-xn--b7d82wo4h..xn-----pe4u; áŸá¡ˆâ€Œ..-ð–¾-; [C1, V3, V5, X4_2]; xn--b7d82wo4h..xn-----pe4u; [C1, V3, V5, A4_2]; ; # áŸá¡ˆ..-ð–¾-
-xn--b7d82w.xn-----c82nz547a; áŸá¡ˆ.︒-ð–¾-; [V3, V5, V6]; xn--b7d82w.xn-----c82nz547a; ; ; # áŸá¡ˆ.︒-ð–¾-
-xn--b7d82wo4h.xn-----c82nz547a; áŸá¡ˆâ€Œ.︒-ð–¾-; [C1, V3, V5, V6]; xn--b7d82wo4h.xn-----c82nz547a; ; ; # áŸá¡ˆ.︒-ð–¾-
-â’ˆØ⒖‌.á·°ß›; ; [B1, C1, P1, V5, V6]; xn--jfb844kmfdwb.xn--2sb914i; ; xn--jfb347mib.xn--2sb914i; [B1, P1, V5, V6] # ⒈⒖.á·°ß›
-1.Ø15.‌.á·°ß›; ; [B1, C1, P1, V5, V6]; 1.xn--15-1pd.xn--0ug.xn--2sb914i; ; 1.xn--15-1pd..xn--2sb914i; [B1, P1, V5, V6, A4_2] # 1.15..á·°ß›
-1.xn--15-1pd..xn--2sb914i; 1.Ø15..á·°ß›; [B1, V5, V6, X4_2]; 1.xn--15-1pd..xn--2sb914i; [B1, V5, V6, A4_2]; ; # 1.15..á·°ß›
-1.xn--15-1pd.xn--0ug.xn--2sb914i; 1.Ø15.‌.á·°ß›; [B1, C1, V5, V6]; 1.xn--15-1pd.xn--0ug.xn--2sb914i; ; ; # 1.15..á·°ß›
-xn--jfb347mib.xn--2sb914i; â’ˆØâ’–.á·°ß›; [B1, V5, V6]; xn--jfb347mib.xn--2sb914i; ; ; # ⒈⒖.á·°ß›
-xn--jfb844kmfdwb.xn--2sb914i; â’ˆØ⒖‌.á·°ß›; [B1, C1, V5, V6]; xn--jfb844kmfdwb.xn--2sb914i; ; ; # ⒈⒖.á·°ß›
-ð©œã€‚-à­á‚«; ð©œ.-à­á‚«; [P1, V3, V5, V6]; xn--792h.xn----bse632b; ; ; # ð©œ.-à­á‚«
-ð©œã€‚-à­â´‹; ð©œ.-à­â´‹; [V3, V5]; xn--792h.xn----bse820x; ; ; # ð©œ.-à­â´‹
-xn--792h.xn----bse820x; ð©œ.-à­â´‹; [V3, V5]; xn--792h.xn----bse820x; ; ; # ð©œ.-à­â´‹
-xn--792h.xn----bse632b; ð©œ.-à­á‚«; [V3, V5, V6]; xn--792h.xn----bse632b; ; ; # ð©œ.-à­á‚«
-ßჀ.ؠ刯Ⴝ; ; [B2, B3, P1, V6]; xn--zca442f.xn--fgb845cb66c; ; xn--ss-wgk.xn--fgb845cb66c; # ßჀ.ؠ刯Ⴝ
-ßⴠ.ؠ刯â´; ; [B2, B3]; xn--zca277t.xn--fgb670rovy; ; xn--ss-j81a.xn--fgb670rovy; # ßⴠ.ؠ刯â´
-SSჀ.ؠ刯Ⴝ; ssჀ.ؠ刯Ⴝ; [B2, B3, P1, V6]; xn--ss-wgk.xn--fgb845cb66c; ; ; # ssჀ.ؠ刯Ⴝ
-ssâ´ .ؠ刯â´; ; [B2, B3]; xn--ss-j81a.xn--fgb670rovy; ; ; # ssâ´ .ؠ刯â´
-Ssⴠ.ؠ刯Ⴝ; ssⴠ.ؠ刯Ⴝ; [B2, B3, P1, V6]; xn--ss-j81a.xn--fgb845cb66c; ; ; # ssⴠ.ؠ刯Ⴝ
-xn--ss-j81a.xn--fgb845cb66c; ssⴠ.ؠ刯Ⴝ; [B2, B3, V6]; xn--ss-j81a.xn--fgb845cb66c; ; ; # ssⴠ.ؠ刯Ⴝ
-xn--ss-j81a.xn--fgb670rovy; ssâ´ .ؠ刯â´; [B2, B3]; xn--ss-j81a.xn--fgb670rovy; ; ; # ssâ´ .ؠ刯â´
-xn--ss-wgk.xn--fgb845cb66c; ssჀ.ؠ刯Ⴝ; [B2, B3, V6]; xn--ss-wgk.xn--fgb845cb66c; ; ; # ssჀ.ؠ刯Ⴝ
-xn--zca277t.xn--fgb670rovy; ßⴠ.ؠ刯â´; [B2, B3]; xn--zca277t.xn--fgb670rovy; ; ; # ßⴠ.ؠ刯â´
-xn--zca442f.xn--fgb845cb66c; ßჀ.ؠ刯Ⴝ; [B2, B3, V6]; xn--zca442f.xn--fgb845cb66c; ; ; # ßჀ.ؠ刯Ⴝ
-᮪ႣℲ。ᠳ툻ٳ; ᮪ႣℲ.ᠳ툻ٳ; [B5, B6, P1, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ
-᮪ႣℲ。ᠳá„ᅮᆶٳ; ᮪ႣℲ.ᠳ툻ٳ; [B5, B6, P1, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ
-᮪ႣℲ。ᠳ툻ٳ; ᮪ႣℲ.ᠳ툻ٳ; [B5, B6, P1, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ
-᮪ႣℲ。ᠳá„ᅮᆶٳ; ᮪ႣℲ.ᠳ툻ٳ; [B5, B6, P1, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ
-᮪ⴃⅎ。ᠳá„ᅮᆶٳ; ᮪ⴃⅎ.ᠳ툻ٳ; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ
-᮪ⴃⅎ。ᠳ툻ٳ; ᮪ⴃⅎ.ᠳ툻ٳ; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ
-᮪Ⴃⅎ。ᠳ툻ٳ; ᮪Ⴃⅎ.ᠳ툻ٳ; [B5, B6, P1, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ
-᮪Ⴃⅎ。ᠳá„ᅮᆶٳ; ᮪Ⴃⅎ.ᠳ툻ٳ; [B5, B6, P1, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ
-xn--bnd957c2pe.xn--sib102gc69k; ᮪Ⴃⅎ.ᠳ툻ٳ; [B5, B6, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ
-xn--yxf24x4ol.xn--sib102gc69k; ᮪ⴃⅎ.ᠳ툻ٳ; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ
-xn--bnd957cone.xn--sib102gc69k; ᮪ႣℲ.ᠳ툻ٳ; [B5, B6, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ
-᮪ⴃⅎ。ᠳá„ᅮᆶٳ; ᮪ⴃⅎ.ᠳ툻ٳ; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ
-᮪ⴃⅎ。ᠳ툻ٳ; ᮪ⴃⅎ.ᠳ툻ٳ; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ
-᮪Ⴃⅎ。ᠳ툻ٳ; ᮪Ⴃⅎ.ᠳ툻ٳ; [B5, B6, P1, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ
-᮪Ⴃⅎ。ᠳá„ᅮᆶٳ; ᮪Ⴃⅎ.ᠳ툻ٳ; [B5, B6, P1, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ
-Û¬.ࢢð¹«Ù¼; ; [B1, B3, B6, V5]; xn--8lb.xn--1ib31ily45b; ; ; # Û¬.ࢢð¹«Ù¼
-xn--8lb.xn--1ib31ily45b; Û¬.ࢢð¹«Ù¼; [B1, B3, B6, V5]; xn--8lb.xn--1ib31ily45b; ; ; # Û¬.ࢢð¹«Ù¼
-ڶ۟。₇꠆; ڶ۟.7꠆; [B1]; xn--pkb6f.xn--7-x93e; ; ; # ڶ۟.7꠆
-ڶ۟。7꠆; ڶ۟.7꠆; [B1]; xn--pkb6f.xn--7-x93e; ; ; # ڶ۟.7꠆
-xn--pkb6f.xn--7-x93e; Ú¶ÛŸ.7ê †; [B1]; xn--pkb6f.xn--7-x93e; ; ; # Ú¶ÛŸ.7ê †
-Ú¶ÛŸ.7ê †; ; [B1]; xn--pkb6f.xn--7-x93e; ; ; # Ú¶ÛŸ.7ê †
-Ⴣð¹».‌ðª£â‰®ó ©‰; ; [B1, B5, B6, C1, P1, V6]; xn--7nd8101k.xn--0ugy6gn120eb103g; ; xn--7nd8101k.xn--gdh4944ob3x3e; [B1, B5, B6, P1, V5, V6] # Ⴣð¹».ðª£â‰®
-Ⴣð¹».‌ðª£≮󠩉; Ⴣð¹».‌ðª£â‰®ó ©‰; [B1, B5, B6, C1, P1, V6]; xn--7nd8101k.xn--0ugy6gn120eb103g; ; xn--7nd8101k.xn--gdh4944ob3x3e; [B1, B5, B6, P1, V5, V6] # Ⴣð¹».ðª£â‰®
-â´£ð¹».‌ðª£≮󠩉; â´£ð¹».‌ðª£â‰®ó ©‰; [B1, B5, B6, C1, P1, V6]; xn--rlj6323e.xn--0ugy6gn120eb103g; ; xn--rlj6323e.xn--gdh4944ob3x3e; [B1, B5, B6, P1, V5, V6] # â´£ð¹».ðª£â‰®
-â´£ð¹».‌ðª£â‰®ó ©‰; ; [B1, B5, B6, C1, P1, V6]; xn--rlj6323e.xn--0ugy6gn120eb103g; ; xn--rlj6323e.xn--gdh4944ob3x3e; [B1, B5, B6, P1, V5, V6] # â´£ð¹».ðª£â‰®
+xn--c9e433epi4b3j20a.xn--kmb859ja94998b; ᡯ⚉姶🄉.۷\u200D🎪\u200D; [C2, V6]; xn--c9e433epi4b3j20a.xn--kmb859ja94998b; ; ; # ᡯ⚉姶🄉.۷🎪
+ðž½€.ð¹¸ðŸš–\u0E3A; ; [B1, V6]; xn--0n7h.xn--o4c9032klszf; ; ; # .ð¹¸ðŸš–ฺ
+xn--0n7h.xn--o4c9032klszf; ðž½€.ð¹¸ðŸš–\u0E3A; [B1, V6]; xn--0n7h.xn--o4c9032klszf; ; ; # .ð¹¸ðŸš–ฺ
+Ⴔᠵ。ð¹§\u0747Û¹; á‚´á µ.ð¹§\u0747Û¹; [B1, V6]; xn--snd659a.xn--mmb9ml895e; ; ; # á‚´á µ.ð¹§Ý‡Û¹
+Ⴔᠵ。ð¹§\u0747Û¹; á‚´á µ.ð¹§\u0747Û¹; [B1, V6]; xn--snd659a.xn--mmb9ml895e; ; ; # á‚´á µ.ð¹§Ý‡Û¹
+ⴔᠵ。ð¹§\u0747Û¹; ⴔᠵ.ð¹§\u0747Û¹; [B1]; xn--o7e997h.xn--mmb9ml895e; ; ; # ⴔᠵ.ð¹§Ý‡Û¹
+xn--o7e997h.xn--mmb9ml895e; ⴔᠵ.ð¹§\u0747Û¹; [B1]; xn--o7e997h.xn--mmb9ml895e; ; ; # ⴔᠵ.ð¹§Ý‡Û¹
+xn--snd659a.xn--mmb9ml895e; á‚´á µ.ð¹§\u0747Û¹; [B1, V6]; xn--snd659a.xn--mmb9ml895e; ; ; # á‚´á µ.ð¹§Ý‡Û¹
+ⴔᠵ。ð¹§\u0747Û¹; ⴔᠵ.ð¹§\u0747Û¹; [B1]; xn--o7e997h.xn--mmb9ml895e; ; ; # ⴔᠵ.ð¹§Ý‡Û¹
+\u135Fᡈ\u200C.︒-ð–¾-; \u135Fᡈ\u200C.︒-ð–¾-; [C1, V3, V5, V6]; xn--b7d82wo4h.xn-----c82nz547a; ; xn--b7d82w.xn-----c82nz547a; [V3, V5, V6] # áŸá¡ˆ.︒-ð–¾-
+\u135Fᡈ\u200C.。-ð–¾-; \u135Fᡈ\u200C..-ð–¾-; [C1, V3, V5, X4_2]; xn--b7d82wo4h..xn-----pe4u; [C1, V3, V5, A4_2]; xn--b7d82w..xn-----pe4u; [V3, V5, A4_2] # áŸá¡ˆ..-ð–¾-
+xn--b7d82w..xn-----pe4u; \u135Fᡈ..-ð–¾-; [V3, V5, X4_2]; xn--b7d82w..xn-----pe4u; [V3, V5, A4_2]; ; # áŸá¡ˆ..-ð–¾-
+xn--b7d82wo4h..xn-----pe4u; \u135Fᡈ\u200C..-ð–¾-; [C1, V3, V5, X4_2]; xn--b7d82wo4h..xn-----pe4u; [C1, V3, V5, A4_2]; ; # áŸá¡ˆ..-ð–¾-
+xn--b7d82w.xn-----c82nz547a; \u135Fᡈ.︒-ð–¾-; [V3, V5, V6]; xn--b7d82w.xn-----c82nz547a; ; ; # áŸá¡ˆ.︒-ð–¾-
+xn--b7d82wo4h.xn-----c82nz547a; \u135Fᡈ\u200C.︒-ð–¾-; [C1, V3, V5, V6]; xn--b7d82wo4h.xn-----c82nz547a; ; ; # áŸá¡ˆ.︒-ð–¾-
+⒈\u0601⒖\u200C.\u1DF0\u07DB; ; [B1, C1, V5, V6]; xn--jfb844kmfdwb.xn--2sb914i; ; xn--jfb347mib.xn--2sb914i; [B1, V5, V6] # ⒈⒖.ᷰߛ
+1.\u060115.\u200C.\u1DF0\u07DB; ; [B1, C1, V5, V6]; 1.xn--15-1pd.xn--0ug.xn--2sb914i; ; 1.xn--15-1pd..xn--2sb914i; [B1, V5, V6, A4_2] # 1.15..á·°ß›
+1.xn--15-1pd..xn--2sb914i; 1.\u060115..\u1DF0\u07DB; [B1, V5, V6, X4_2]; 1.xn--15-1pd..xn--2sb914i; [B1, V5, V6, A4_2]; ; # 1.15..á·°ß›
+1.xn--15-1pd.xn--0ug.xn--2sb914i; 1.\u060115.\u200C.\u1DF0\u07DB; [B1, C1, V5, V6]; 1.xn--15-1pd.xn--0ug.xn--2sb914i; ; ; # 1.15..á·°ß›
+xn--jfb347mib.xn--2sb914i; ⒈\u0601⒖.\u1DF0\u07DB; [B1, V5, V6]; xn--jfb347mib.xn--2sb914i; ; ; # ⒈⒖.ᷰߛ
+xn--jfb844kmfdwb.xn--2sb914i; ⒈\u0601⒖\u200C.\u1DF0\u07DB; [B1, C1, V5, V6]; xn--jfb844kmfdwb.xn--2sb914i; ; ; # ⒈⒖.ᷰߛ
+ð©œã€‚-\u0B4Dá‚«; ð©œ.-\u0B4Dá‚«; [V3, V5, V6]; xn--792h.xn----bse632b; ; ; # ð©œ.-à­á‚«
+ð©œã€‚-\u0B4Dâ´‹; ð©œ.-\u0B4Dâ´‹; [V3, V5]; xn--792h.xn----bse820x; ; ; # ð©œ.-à­â´‹
+xn--792h.xn----bse820x; ð©œ.-\u0B4Dâ´‹; [V3, V5]; xn--792h.xn----bse820x; ; ; # ð©œ.-à­â´‹
+xn--792h.xn----bse632b; ð©œ.-\u0B4Dá‚«; [V3, V5, V6]; xn--792h.xn----bse632b; ; ; # ð©œ.-à­á‚«
+ßჀ.\u0620刯Ⴝ; ; [B2, B3, V6]; xn--zca442f.xn--fgb845cb66c; ; xn--ss-wgk.xn--fgb845cb66c; # ßჀ.ؠ刯Ⴝ
+ßⴠ.\u0620刯â´; ; [B2, B3]; xn--zca277t.xn--fgb670rovy; ; xn--ss-j81a.xn--fgb670rovy; # ßⴠ.ؠ刯â´
+SSჀ.\u0620刯Ⴝ; ssჀ.\u0620刯Ⴝ; [B2, B3, V6]; xn--ss-wgk.xn--fgb845cb66c; ; ; # ssჀ.ؠ刯Ⴝ
+ssâ´ .\u0620刯â´; ; [B2, B3]; xn--ss-j81a.xn--fgb670rovy; ; ; # ssâ´ .ؠ刯â´
+Ssⴠ.\u0620刯Ⴝ; ssⴠ.\u0620刯Ⴝ; [B2, B3, V6]; xn--ss-j81a.xn--fgb845cb66c; ; ; # ssⴠ.ؠ刯Ⴝ
+xn--ss-j81a.xn--fgb845cb66c; ssⴠ.\u0620刯Ⴝ; [B2, B3, V6]; xn--ss-j81a.xn--fgb845cb66c; ; ; # ssⴠ.ؠ刯Ⴝ
+xn--ss-j81a.xn--fgb670rovy; ssâ´ .\u0620刯â´; [B2, B3]; xn--ss-j81a.xn--fgb670rovy; ; ; # ssâ´ .ؠ刯â´
+xn--ss-wgk.xn--fgb845cb66c; ssჀ.\u0620刯Ⴝ; [B2, B3, V6]; xn--ss-wgk.xn--fgb845cb66c; ; ; # ssჀ.ؠ刯Ⴝ
+xn--zca277t.xn--fgb670rovy; ßⴠ.\u0620刯â´; [B2, B3]; xn--zca277t.xn--fgb670rovy; ; ; # ßⴠ.ؠ刯â´
+xn--zca442f.xn--fgb845cb66c; ßჀ.\u0620刯Ⴝ; [B2, B3, V6]; xn--zca442f.xn--fgb845cb66c; ; ; # ßჀ.ؠ刯Ⴝ
+\u1BAAႣℲ。ᠳ툻\u0673; \u1BAAႣℲ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ
+\u1BAAႣℲ。ᠳá„ᅮᆶ\u0673; \u1BAAႣℲ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ
+\u1BAAႣℲ。ᠳ툻\u0673; \u1BAAႣℲ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ
+\u1BAAႣℲ。ᠳá„ᅮᆶ\u0673; \u1BAAႣℲ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ
+\u1BAAⴃⅎ。ᠳá„ᅮᆶ\u0673; \u1BAAⴃⅎ.ᠳ툻\u0673; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ
+\u1BAAⴃⅎ。ᠳ툻\u0673; \u1BAAⴃⅎ.ᠳ툻\u0673; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ
+\u1BAAႣⅎ。ᠳ툻\u0673; \u1BAAႣⅎ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ
+\u1BAAႣⅎ。ᠳá„ᅮᆶ\u0673; \u1BAAႣⅎ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ
+xn--bnd957c2pe.xn--sib102gc69k; \u1BAAႣⅎ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ
+xn--yxf24x4ol.xn--sib102gc69k; \u1BAAⴃⅎ.ᠳ툻\u0673; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ
+xn--bnd957cone.xn--sib102gc69k; \u1BAAႣℲ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957cone.xn--sib102gc69k; ; ; # ᮪ႣℲ.ᠳ툻ٳ
+\u1BAAⴃⅎ。ᠳá„ᅮᆶ\u0673; \u1BAAⴃⅎ.ᠳ툻\u0673; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ
+\u1BAAⴃⅎ。ᠳ툻\u0673; \u1BAAⴃⅎ.ᠳ툻\u0673; [B5, B6, V5]; xn--yxf24x4ol.xn--sib102gc69k; ; ; # ᮪ⴃⅎ.ᠳ툻ٳ
+\u1BAAႣⅎ。ᠳ툻\u0673; \u1BAAႣⅎ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ
+\u1BAAႣⅎ。ᠳá„ᅮᆶ\u0673; \u1BAAႣⅎ.ᠳ툻\u0673; [B5, B6, V5, V6]; xn--bnd957c2pe.xn--sib102gc69k; ; ; # ᮪Ⴃⅎ.ᠳ툻ٳ
+\u06EC.\u08A2ð¹«\u067C; ; [B1, V5]; xn--8lb.xn--1ib31ily45b; ; ; # Û¬.ࢢð¹«Ù¼
+xn--8lb.xn--1ib31ily45b; \u06EC.\u08A2ð¹«\u067C; [B1, V5]; xn--8lb.xn--1ib31ily45b; ; ; # Û¬.ࢢð¹«Ù¼
+\u06B6\u06DF。₇\uA806; \u06B6\u06DF.7\uA806; [B1]; xn--pkb6f.xn--7-x93e; ; ; # ڶ۟.7꠆
+\u06B6\u06DF。7\uA806; \u06B6\u06DF.7\uA806; [B1]; xn--pkb6f.xn--7-x93e; ; ; # ڶ۟.7꠆
+xn--pkb6f.xn--7-x93e; \u06B6\u06DF.7\uA806; [B1]; xn--pkb6f.xn--7-x93e; ; ; # Ú¶ÛŸ.7ê †
+\u06B6\u06DF.7\uA806; ; [B1]; xn--pkb6f.xn--7-x93e; ; ; # Ú¶ÛŸ.7ê †
+Ⴣð¹».\u200Cðª£â‰®ó ©‰; ; [B1, B5, B6, C1, V6]; xn--7nd8101k.xn--0ugy6gn120eb103g; ; xn--7nd8101k.xn--gdh4944ob3x3e; [B1, B5, B6, V5, V6] # Ⴣð¹».ðª£â‰®
+Ⴣð¹».\u200Cðª£<\u0338󠩉; Ⴣð¹».\u200Cðª£â‰®ó ©‰; [B1, B5, B6, C1, V6]; xn--7nd8101k.xn--0ugy6gn120eb103g; ; xn--7nd8101k.xn--gdh4944ob3x3e; [B1, B5, B6, V5, V6] # Ⴣð¹».ðª£â‰®
+â´£ð¹».\u200Cðª£<\u0338󠩉; â´£ð¹».\u200Cðª£â‰®ó ©‰; [B1, B5, B6, C1, V6]; xn--rlj6323e.xn--0ugy6gn120eb103g; ; xn--rlj6323e.xn--gdh4944ob3x3e; [B1, B5, B6, V5, V6] # â´£ð¹».ðª£â‰®
+â´£ð¹».\u200Cðª£â‰®ó ©‰; ; [B1, B5, B6, C1, V6]; xn--rlj6323e.xn--0ugy6gn120eb103g; ; xn--rlj6323e.xn--gdh4944ob3x3e; [B1, B5, B6, V5, V6] # â´£ð¹».ðª£â‰®
xn--rlj6323e.xn--gdh4944ob3x3e; â´£ð¹».ðª£â‰®ó ©‰; [B1, B5, B6, V5, V6]; xn--rlj6323e.xn--gdh4944ob3x3e; ; ; # â´£ð¹».ðª£â‰®
-xn--rlj6323e.xn--0ugy6gn120eb103g; â´£ð¹».‌ðª£â‰®ó ©‰; [B1, B5, B6, C1, V6]; xn--rlj6323e.xn--0ugy6gn120eb103g; ; ; # â´£ð¹».ðª£â‰®
+xn--rlj6323e.xn--0ugy6gn120eb103g; â´£ð¹».\u200Cðª£â‰®ó ©‰; [B1, B5, B6, C1, V6]; xn--rlj6323e.xn--0ugy6gn120eb103g; ; ; # â´£ð¹».ðª£â‰®
xn--7nd8101k.xn--gdh4944ob3x3e; Ⴣð¹».ðª£â‰®ó ©‰; [B1, B5, B6, V5, V6]; xn--7nd8101k.xn--gdh4944ob3x3e; ; ; # Ⴣð¹».ðª£â‰®
-xn--7nd8101k.xn--0ugy6gn120eb103g; Ⴣð¹».‌ðª£â‰®ó ©‰; [B1, B5, B6, C1, V6]; xn--7nd8101k.xn--0ugy6gn120eb103g; ; ; # Ⴣð¹».ðª£â‰®
-ðŸµéšâ¯®ï¼Žá â€Œ; 9éšâ¯®.‌; [C1]; xn--9-mfs8024b.xn--0ug; ; xn--9-mfs8024b.; [] # 9éšâ¯®.
-9éšâ¯®.á â€Œ; 9éšâ¯®.‌; [C1]; xn--9-mfs8024b.xn--0ug; ; xn--9-mfs8024b.; [] # 9éšâ¯®.
+xn--7nd8101k.xn--0ugy6gn120eb103g; Ⴣð¹».\u200Cðª£â‰®ó ©‰; [B1, B5, B6, C1, V6]; xn--7nd8101k.xn--0ugy6gn120eb103g; ; ; # Ⴣð¹».ðª£â‰®
+ðŸµéšâ¯®ï¼Ž\u180D\u200C; 9éšâ¯®.\u200C; [C1]; xn--9-mfs8024b.xn--0ug; ; xn--9-mfs8024b.; [] # 9éšâ¯®.
+9éšâ¯®.\u180D\u200C; 9éšâ¯®.\u200C; [C1]; xn--9-mfs8024b.xn--0ug; ; xn--9-mfs8024b.; [] # 9éšâ¯®.
xn--9-mfs8024b.; 9éšâ¯®.; ; xn--9-mfs8024b.; ; ; # 9éšâ¯®.
9éšâ¯®.; ; ; xn--9-mfs8024b.; ; ; # 9éšâ¯®.
-xn--9-mfs8024b.xn--0ug; 9éšâ¯®.‌; [C1]; xn--9-mfs8024b.xn--0ug; ; ; # 9éšâ¯®.
-â’ð¹§ï½¡áƒƒà¾„彦; â’ð¹§.Ⴣ྄彦; [B1, P1, V6]; xn--0sh2466f.xn--3ed15dt93o; ; ; # â’ð¹§.Ⴣ྄彦
-8.ð¹§ã€‚Ⴣ྄彦; 8.ð¹§.Ⴣ྄彦; [B1, P1, V6]; 8.xn--fo0d.xn--3ed15dt93o; ; ; # 8.ð¹§.Ⴣ྄彦
-8.ð¹§ã€‚ⴣ྄彦; 8.ð¹§.ⴣ྄彦; [B1]; 8.xn--fo0d.xn--3ed972m6o8a; ; ; # 8.ð¹§.ⴣ྄彦
-8.xn--fo0d.xn--3ed972m6o8a; 8.ð¹§.ⴣ྄彦; [B1]; 8.xn--fo0d.xn--3ed972m6o8a; ; ; # 8.ð¹§.ⴣ྄彦
-8.xn--fo0d.xn--3ed15dt93o; 8.ð¹§.Ⴣ྄彦; [B1, V6]; 8.xn--fo0d.xn--3ed15dt93o; ; ; # 8.ð¹§.Ⴣ྄彦
-â’ð¹§ï½¡â´£à¾„彦; â’ð¹§.ⴣ྄彦; [B1, P1, V6]; xn--0sh2466f.xn--3ed972m6o8a; ; ; # â’ð¹§.ⴣ྄彦
-xn--0sh2466f.xn--3ed972m6o8a; â’ð¹§.ⴣ྄彦; [B1, V6]; xn--0sh2466f.xn--3ed972m6o8a; ; ; # â’ð¹§.ⴣ྄彦
-xn--0sh2466f.xn--3ed15dt93o; â’ð¹§.Ⴣ྄彦; [B1, V6]; xn--0sh2466f.xn--3ed15dt93o; ; ; # â’ð¹§.Ⴣ྄彦
--问񬰔⒛。؄-񜗉橬; -问񬰔⒛.؄-񜗉橬; [B1, P1, V3, V6]; xn----hdpu849bhis3e.xn----ykc7228efm46d; ; ; # -问⒛.-橬
--问񬰔20.。؄-񜗉橬; -问񬰔20..؄-񜗉橬; [B1, P1, V3, V6, X4_2]; xn---20-658jx1776d..xn----ykc7228efm46d; [B1, P1, V3, V6, A4_2]; ; # -问20..-橬
-xn---20-658jx1776d..xn----ykc7228efm46d; -问񬰔20..؄-񜗉橬; [B1, V3, V6, X4_2]; xn---20-658jx1776d..xn----ykc7228efm46d; [B1, V3, V6, A4_2]; ; # -问20..-橬
-xn----hdpu849bhis3e.xn----ykc7228efm46d; -问񬰔⒛.؄-񜗉橬; [B1, V3, V6]; xn----hdpu849bhis3e.xn----ykc7228efm46d; ; ; # -问⒛.-橬
-ᮬႬ‌̥。ðŸ¸; ᮬႬ‌̥.2; [C1, P1, V5, V6]; xn--mta930emribme.2; ; xn--mta930emri.2; [P1, V5, V6] # ᮬႬ̥.2
-ᮬႬ‌̥。2; ᮬႬ‌̥.2; [C1, P1, V5, V6]; xn--mta930emribme.2; ; xn--mta930emri.2; [P1, V5, V6] # ᮬႬ̥.2
-ᮬⴌ‌̥。2; ᮬⴌ‌̥.2; [C1, V5]; xn--mta176j97cl2q.2; ; xn--mta176jjjm.2; [V5] # ᮬⴌ̥.2
-xn--mta176jjjm.2; ᮬⴌ̥.2; [V5]; xn--mta176jjjm.2; ; ; # ᮬⴌ̥.2
-xn--mta176j97cl2q.2; ᮬⴌ‌̥.2; [C1, V5]; xn--mta176j97cl2q.2; ; ; # ᮬⴌ̥.2
-xn--mta930emri.2; ᮬႬ̥.2; [V5, V6]; xn--mta930emri.2; ; ; # ᮬႬ̥.2
-xn--mta930emribme.2; ᮬႬ‌̥.2; [C1, V5, V6]; xn--mta930emribme.2; ; ; # ᮬႬ̥.2
-ᮬⴌ‌̥。ðŸ¸; ᮬⴌ‌̥.2; [C1, V5]; xn--mta176j97cl2q.2; ; xn--mta176jjjm.2; [V5] # ᮬⴌ̥.2
-?。꠆٩󠒩; ?.꠆٩󠒩; [B1, P1, V5, V6]; ?.xn--iib9583fusy0i; ; ; # ?.꠆٩
-?.xn--iib9583fusy0i; ?.ê †Ù©ó ’©; [B1, P1, V5, V6]; ?.xn--iib9583fusy0i; ; ; # ?.ê †Ù©
-ó „͟⾶。₇︒눇≮; ͟飛.7︒눇≮; [P1, V5, V6]; xn--9ua0567e.xn--7-ngou006d1ttc; ; ; # ͟飛.7︒눇≮
-ó „͟⾶。₇︒눇≮; ͟飛.7︒눇≮; [P1, V5, V6]; xn--9ua0567e.xn--7-ngou006d1ttc; ; ; # ͟飛.7︒눇≮
-ó „͟飛。7。눇≮; ͟飛.7.눇≮; [P1, V5, V6]; xn--9ua0567e.7.xn--gdh6767c; ; ; # ͟飛.7.눇≮
-ó „͟飛。7。눇≮; ͟飛.7.눇≮; [P1, V5, V6]; xn--9ua0567e.7.xn--gdh6767c; ; ; # ͟飛.7.눇≮
-xn--9ua0567e.7.xn--gdh6767c; ͟飛.7.눇≮; [V5, V6]; xn--9ua0567e.7.xn--gdh6767c; ; ; # ͟飛.7.눇≮
-xn--9ua0567e.xn--7-ngou006d1ttc; ͟飛.7︒눇≮; [V5, V6]; xn--9ua0567e.xn--7-ngou006d1ttc; ; ; # ͟飛.7︒눇≮
-‌︉ð¹´â€ï¼Žâ€Œâ¿ƒ; ‌ð¹´â€.‌鳥; [B1, C1, C2]; xn--0ugc6024p.xn--0ug1920c; ; xn--so0d.xn--6x6a; [B1] # ð¹´.é³¥
-‌︉ð¹´â€.‌鳥; ‌ð¹´â€.‌鳥; [B1, C1, C2]; xn--0ugc6024p.xn--0ug1920c; ; xn--so0d.xn--6x6a; [B1] # ð¹´.é³¥
+xn--9-mfs8024b.xn--0ug; 9éšâ¯®.\u200C; [C1]; xn--9-mfs8024b.xn--0ug; ; ; # 9éšâ¯®.
+â’ð¹§ï½¡áƒƒ\u0F84彦; â’ð¹§.Ⴣ\u0F84彦; [B1, V6]; xn--0sh2466f.xn--3ed15dt93o; ; ; # â’ð¹§.Ⴣ྄彦
+8.ð¹§ã€‚Ⴣ\u0F84彦; 8.ð¹§.Ⴣ\u0F84彦; [B1, V6]; 8.xn--fo0d.xn--3ed15dt93o; ; ; # 8.ð¹§.Ⴣ྄彦
+8.ð¹§ã€‚â´£\u0F84彦; 8.ð¹§.â´£\u0F84彦; [B1]; 8.xn--fo0d.xn--3ed972m6o8a; ; ; # 8.ð¹§.ⴣ྄彦
+8.xn--fo0d.xn--3ed972m6o8a; 8.ð¹§.â´£\u0F84彦; [B1]; 8.xn--fo0d.xn--3ed972m6o8a; ; ; # 8.ð¹§.ⴣ྄彦
+8.xn--fo0d.xn--3ed15dt93o; 8.ð¹§.Ⴣ\u0F84彦; [B1, V6]; 8.xn--fo0d.xn--3ed15dt93o; ; ; # 8.ð¹§.Ⴣ྄彦
+â’ð¹§ï½¡â´£\u0F84彦; â’ð¹§.â´£\u0F84彦; [B1, V6]; xn--0sh2466f.xn--3ed972m6o8a; ; ; # â’ð¹§.ⴣ྄彦
+xn--0sh2466f.xn--3ed972m6o8a; â’ð¹§.â´£\u0F84彦; [B1, V6]; xn--0sh2466f.xn--3ed972m6o8a; ; ; # â’ð¹§.ⴣ྄彦
+xn--0sh2466f.xn--3ed15dt93o; â’ð¹§.Ⴣ\u0F84彦; [B1, V6]; xn--0sh2466f.xn--3ed15dt93o; ; ; # â’ð¹§.Ⴣ྄彦
+-问񬰔⒛。\u0604-񜗉橬; -问񬰔⒛.\u0604-񜗉橬; [B1, V3, V6]; xn----hdpu849bhis3e.xn----ykc7228efm46d; ; ; # -问⒛.-橬
+-问񬰔20.。\u0604-񜗉橬; -问񬰔20..\u0604-񜗉橬; [B1, V3, V6, X4_2]; xn---20-658jx1776d..xn----ykc7228efm46d; [B1, V3, V6, A4_2]; ; # -问20..-橬
+xn---20-658jx1776d..xn----ykc7228efm46d; -问񬰔20..\u0604-񜗉橬; [B1, V3, V6, X4_2]; xn---20-658jx1776d..xn----ykc7228efm46d; [B1, V3, V6, A4_2]; ; # -问20..-橬
+xn----hdpu849bhis3e.xn----ykc7228efm46d; -问񬰔⒛.\u0604-񜗉橬; [B1, V3, V6]; xn----hdpu849bhis3e.xn----ykc7228efm46d; ; ; # -问⒛.-橬
+\u1BACႬ\u200C\u0325。ðŸ¸; \u1BACႬ\u200C\u0325.2; [C1, V5, V6]; xn--mta930emribme.2; ; xn--mta930emri.2; [V5, V6] # ᮬႬ̥.2
+\u1BACႬ\u200C\u0325。2; \u1BACႬ\u200C\u0325.2; [C1, V5, V6]; xn--mta930emribme.2; ; xn--mta930emri.2; [V5, V6] # ᮬႬ̥.2
+\u1BACⴌ\u200C\u0325。2; \u1BACⴌ\u200C\u0325.2; [C1, V5]; xn--mta176j97cl2q.2; ; xn--mta176jjjm.2; [V5] # ᮬⴌ̥.2
+xn--mta176jjjm.2; \u1BACⴌ\u0325.2; [V5]; xn--mta176jjjm.2; ; ; # ᮬⴌ̥.2
+xn--mta176j97cl2q.2; \u1BACⴌ\u200C\u0325.2; [C1, V5]; xn--mta176j97cl2q.2; ; ; # ᮬⴌ̥.2
+xn--mta930emri.2; \u1BACႬ\u0325.2; [V5, V6]; xn--mta930emri.2; ; ; # ᮬႬ̥.2
+xn--mta930emribme.2; \u1BACႬ\u200C\u0325.2; [C1, V5, V6]; xn--mta930emribme.2; ; ; # ᮬႬ̥.2
+\u1BACâ´Œ\u200C\u0325。ðŸ¸; \u1BACâ´Œ\u200C\u0325.2; [C1, V5]; xn--mta176j97cl2q.2; ; xn--mta176jjjm.2; [V5] # ᮬⴌ̥.2
+?。\uA806\u0669󠒩; ?.\uA806\u0669󠒩; [B1, V5, V6]; ?.xn--iib9583fusy0i; ; ; # ?.꠆٩
+?.xn--iib9583fusy0i; ?.\uA806\u0669ó ’©; [B1, V5, V6]; ?.xn--iib9583fusy0i; ; ; # ?.ê †Ù©
+ó „\u035F⾶。₇︒눇≮; \u035F飛.7︒눇≮; [V5, V6]; xn--9ua0567e.xn--7-ngou006d1ttc; ; ; # ͟飛.7︒눇≮
+ó „\u035F⾶。₇︒눇<\u0338; \u035F飛.7︒눇≮; [V5, V6]; xn--9ua0567e.xn--7-ngou006d1ttc; ; ; # ͟飛.7︒눇≮
+ó „\u035F飛。7。눇≮; \u035F飛.7.눇≮; [V5]; xn--9ua0567e.7.xn--gdh6767c; ; ; # ͟飛.7.눇≮
+ó „\u035F飛。7。눇<\u0338; \u035F飛.7.눇≮; [V5]; xn--9ua0567e.7.xn--gdh6767c; ; ; # ͟飛.7.눇≮
+xn--9ua0567e.7.xn--gdh6767c; \u035F飛.7.눇≮; [V5]; xn--9ua0567e.7.xn--gdh6767c; ; ; # ͟飛.7.눇≮
+xn--9ua0567e.xn--7-ngou006d1ttc; \u035F飛.7︒눇≮; [V5, V6]; xn--9ua0567e.xn--7-ngou006d1ttc; ; ; # ͟飛.7︒눇≮
+\u200C\uFE09ð¹´\u200D.\u200C⿃; \u200Cð¹´\u200D.\u200Cé³¥; [B1, C1, C2]; xn--0ugc6024p.xn--0ug1920c; ; xn--so0d.xn--6x6a; [B1] # ð¹´.é³¥
+\u200C\uFE09ð¹´\u200D.\u200Cé³¥; \u200Cð¹´\u200D.\u200Cé³¥; [B1, C1, C2]; xn--0ugc6024p.xn--0ug1920c; ; xn--so0d.xn--6x6a; [B1] # ð¹´.é³¥
xn--so0d.xn--6x6a; ð¹´.é³¥; [B1]; xn--so0d.xn--6x6a; ; ; # ð¹´.é³¥
-xn--0ugc6024p.xn--0ug1920c; ‌ð¹´â€.‌鳥; [B1, C1, C2]; xn--0ugc6024p.xn--0ug1920c; ; ; # ð¹´.é³¥
-ðŸ®ï¼Žâ€ó —’ð¦ð¨; ðŸ®.â€ó —’ð¦ð¨; [B1, C2, P1, V6]; xn--lj8h.xn--1ug6603gr1pfwq37h; ; xn--lj8h.xn--ln9ci476aqmr2g; [B1, P1, V6] # ðŸ®.ð¦ð¨
-ðŸ®.â€ó —’ð¦ð¨; ; [B1, C2, P1, V6]; xn--lj8h.xn--1ug6603gr1pfwq37h; ; xn--lj8h.xn--ln9ci476aqmr2g; [B1, P1, V6] # ðŸ®.ð¦ð¨
+xn--0ugc6024p.xn--0ug1920c; \u200Cð¹´\u200D.\u200Cé³¥; [B1, C1, C2]; xn--0ugc6024p.xn--0ug1920c; ; ; # ð¹´.é³¥
+ðŸ®ï¼Ž\u200Dó —’ð¦ð¨; ðŸ®.\u200Dó —’ð¦ð¨; [B1, C2, V6]; xn--lj8h.xn--1ug6603gr1pfwq37h; ; xn--lj8h.xn--ln9ci476aqmr2g; [B1, V6] # ðŸ®.ð¦ð¨
+ðŸ®.\u200Dó —’ð¦ð¨; ; [B1, C2, V6]; xn--lj8h.xn--1ug6603gr1pfwq37h; ; xn--lj8h.xn--ln9ci476aqmr2g; [B1, V6] # ðŸ®.ð¦ð¨
xn--lj8h.xn--ln9ci476aqmr2g; ðŸ®.ó —’ð¦ð¨; [B1, V6]; xn--lj8h.xn--ln9ci476aqmr2g; ; ; # ðŸ®.ð¦ð¨
-xn--lj8h.xn--1ug6603gr1pfwq37h; ðŸ®.â€ó —’ð¦ð¨; [B1, C2, V6]; xn--lj8h.xn--1ug6603gr1pfwq37h; ; ; # ðŸ®.ð¦ð¨
-ٽृ.𞤓â€; ٽृ.𞤵â€; [B3, C2]; xn--2ib43l.xn--1ugy711p; ; xn--2ib43l.xn--te6h; [] # ٽृ.𞤵
-ٽृ.𞤵â€; ; [B3, C2]; xn--2ib43l.xn--1ugy711p; ; xn--2ib43l.xn--te6h; [] # ٽृ.𞤵
-xn--2ib43l.xn--te6h; ٽृ.𞤵; ; xn--2ib43l.xn--te6h; ; ; # ٽृ.𞤵
-ٽृ.𞤵; ; ; xn--2ib43l.xn--te6h; ; ; # ٽृ.𞤵
-ٽृ.𞤓; ٽृ.𞤵; ; xn--2ib43l.xn--te6h; ; ; # ٽृ.𞤵
-xn--2ib43l.xn--1ugy711p; ٽृ.𞤵â€; [B3, C2]; xn--2ib43l.xn--1ugy711p; ; ; # ٽृ.𞤵
-Ù¤à©-.󥜽္ñ¦¦; Ù¤à©-.󥜽္ñ¦¦; [B1, P1, V3, V6]; xn----gqc711a.xn--9jd88234f3qm0b; ; ; # Ù¤à©-.္
-Ù¤à©-.󥜽္ñ¦¦; ; [B1, P1, V3, V6]; xn----gqc711a.xn--9jd88234f3qm0b; ; ; # Ù¤à©-.္
-xn----gqc711a.xn--9jd88234f3qm0b; Ù¤à©-.󥜽္ñ¦¦; [B1, V3, V6]; xn----gqc711a.xn--9jd88234f3qm0b; ; ; # Ù¤à©-.္
-4်-ð¹¸ï½¡ê¨©â€Œð¹´â‰®; 4်-ð¹¸.ꨩ‌ð¹´â‰®; [B1, C1, P1, V5, V6]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, P1, V5, V6] # 4်-ð¹¸.ꨩð¹´â‰®
-4်-ð¹¸ï½¡ê¨©â€Œð¹´≮; 4်-ð¹¸.ꨩ‌ð¹´â‰®; [B1, C1, P1, V5, V6]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, P1, V5, V6] # 4်-ð¹¸.ꨩð¹´â‰®
-4်-ð¹¸ã€‚ꨩ‌ð¹´â‰®; 4်-ð¹¸.ꨩ‌ð¹´â‰®; [B1, C1, P1, V5, V6]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, P1, V5, V6] # 4်-ð¹¸.ꨩð¹´â‰®
-4်-ð¹¸ã€‚ꨩ‌ð¹´≮; 4်-ð¹¸.ꨩ‌ð¹´â‰®; [B1, C1, P1, V5, V6]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, P1, V5, V6] # 4်-ð¹¸.ꨩð¹´â‰®
-xn--4--e4j7831r.xn--gdh8754cz40c; 4်-ð¹¸.ꨩð¹´â‰®; [B1, V5, V6]; xn--4--e4j7831r.xn--gdh8754cz40c; ; ; # 4်-ð¹¸.ꨩð¹´â‰®
-xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; 4်-ð¹¸.ꨩ‌ð¹´â‰®; [B1, C1, V5, V6]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; ; # 4်-ð¹¸.ꨩð¹´â‰®
-‌。ᅠ྄ྖ; ‌.ᅠ྄ྖ; [C1, P1, V6]; xn--0ug.xn--3ed0by082k; ; .xn--3ed0by082k; [P1, V6, A4_2] # .྄ྖ
-‌。ᅠ྄ྖ; ‌.ᅠ྄ྖ; [C1, P1, V6]; xn--0ug.xn--3ed0b20h; ; .xn--3ed0b20h; [P1, V6, A4_2] # .྄ྖ
-.xn--3ed0b20h; .ᅠ྄ྖ; [V6, X4_2]; .xn--3ed0b20h; [V6, A4_2]; ; # .྄ྖ
-xn--0ug.xn--3ed0b20h; ‌.ᅠ྄ྖ; [C1, V6]; xn--0ug.xn--3ed0b20h; ; ; # .྄ྖ
-.xn--3ed0by082k; .ᅠ྄ྖ; [V6, X4_2]; .xn--3ed0by082k; [V6, A4_2]; ; # .྄ྖ
-xn--0ug.xn--3ed0by082k; ‌.ᅠ྄ྖ; [C1, V6]; xn--0ug.xn--3ed0by082k; ; ; # .྄ྖ
-≯ò˜….â€ð…¼ò²‡›; ≯ò˜….â€ð…¼ò²‡›; [C2, P1, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [P1, V6] # ≯.ð…¼
-≯ò˜….â€ð…¼ò²‡›; ≯ò˜….â€ð…¼ò²‡›; [C2, P1, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [P1, V6] # ≯.ð…¼
-≯ò˜….â€ð…¼ò²‡›; ; [C2, P1, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [P1, V6] # ≯.ð…¼
-≯ò˜….â€ð…¼ò²‡›; ≯ò˜….â€ð…¼ò²‡›; [C2, P1, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [P1, V6] # ≯.ð…¼
+xn--lj8h.xn--1ug6603gr1pfwq37h; ðŸ®.\u200Dó —’ð¦ð¨; [B1, C2, V6]; xn--lj8h.xn--1ug6603gr1pfwq37h; ; ; # ðŸ®.ð¦ð¨
+\u067D\u0943.𞤓\u200D; \u067D\u0943.𞤵\u200D; [B3, C2]; xn--2ib43l.xn--1ugy711p; ; xn--2ib43l.xn--te6h; [] # ٽृ.𞤵
+\u067D\u0943.𞤵\u200D; ; [B3, C2]; xn--2ib43l.xn--1ugy711p; ; xn--2ib43l.xn--te6h; [] # ٽृ.𞤵
+xn--2ib43l.xn--te6h; \u067D\u0943.𞤵; ; xn--2ib43l.xn--te6h; ; ; # ٽृ.𞤵
+\u067D\u0943.𞤵; ; ; xn--2ib43l.xn--te6h; ; ; # ٽृ.𞤵
+\u067D\u0943.𞤓; \u067D\u0943.𞤵; ; xn--2ib43l.xn--te6h; ; ; # ٽृ.𞤵
+xn--2ib43l.xn--1ugy711p; \u067D\u0943.𞤵\u200D; [B3, C2]; xn--2ib43l.xn--1ugy711p; ; ; # ٽृ.𞤵
+\u0664\u0A4D-.󥜽\u1039ñ¦¦; \u0664\u0A4D-.󥜽\u1039ñ¦¦; [B1, V3, V6]; xn----gqc711a.xn--9jd88234f3qm0b; ; ; # Ù¤à©-.္
+\u0664\u0A4D-.󥜽\u1039ñ¦¦; ; [B1, V3, V6]; xn----gqc711a.xn--9jd88234f3qm0b; ; ; # Ù¤à©-.္
+xn----gqc711a.xn--9jd88234f3qm0b; \u0664\u0A4D-.󥜽\u1039ñ¦¦; [B1, V3, V6]; xn----gqc711a.xn--9jd88234f3qm0b; ; ; # Ù¤à©-.္
+4\u103A-ð¹¸ï½¡\uAA29\u200Cð¹´â‰®; 4\u103A-ð¹¸.\uAA29\u200Cð¹´â‰®; [B1, C1, V5]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, V5] # 4်-ð¹¸.ꨩð¹´â‰®
+4\u103A-ð¹¸ï½¡\uAA29\u200Cð¹´<\u0338; 4\u103A-ð¹¸.\uAA29\u200Cð¹´â‰®; [B1, C1, V5]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, V5] # 4်-ð¹¸.ꨩð¹´â‰®
+4\u103A-ð¹¸ã€‚\uAA29\u200Cð¹´â‰®; 4\u103A-ð¹¸.\uAA29\u200Cð¹´â‰®; [B1, C1, V5]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, V5] # 4်-ð¹¸.ꨩð¹´â‰®
+4\u103A-ð¹¸ã€‚\uAA29\u200Cð¹´<\u0338; 4\u103A-ð¹¸.\uAA29\u200Cð¹´â‰®; [B1, C1, V5]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; xn--4--e4j7831r.xn--gdh8754cz40c; [B1, V5] # 4်-ð¹¸.ꨩð¹´â‰®
+xn--4--e4j7831r.xn--gdh8754cz40c; 4\u103A-ð¹¸.\uAA29ð¹´â‰®; [B1, V5]; xn--4--e4j7831r.xn--gdh8754cz40c; ; ; # 4်-ð¹¸.ꨩð¹´â‰®
+xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; 4\u103A-ð¹¸.\uAA29\u200Cð¹´â‰®; [B1, C1, V5]; xn--4--e4j7831r.xn--0ugy6gjy5sl3ud; ; ; # 4်-ð¹¸.ꨩð¹´â‰®
+\u200C。\uFFA0\u0F84\u0F96; \u200C.\uFFA0\u0F84\u0F96; [C1, V6]; xn--0ug.xn--3ed0by082k; ; .xn--3ed0by082k; [V6, A4_2] # .྄ྖ
+\u200C。\u1160\u0F84\u0F96; \u200C.\u1160\u0F84\u0F96; [C1, V6]; xn--0ug.xn--3ed0b20h; ; .xn--3ed0b20h; [V6, A4_2] # .྄ྖ
+.xn--3ed0b20h; .\u1160\u0F84\u0F96; [V6, X4_2]; .xn--3ed0b20h; [V6, A4_2]; ; # .྄ྖ
+xn--0ug.xn--3ed0b20h; \u200C.\u1160\u0F84\u0F96; [C1, V6]; xn--0ug.xn--3ed0b20h; ; ; # .྄ྖ
+.xn--3ed0by082k; .\uFFA0\u0F84\u0F96; [V6, X4_2]; .xn--3ed0by082k; [V6, A4_2]; ; # .྄ྖ
+xn--0ug.xn--3ed0by082k; \u200C.\uFFA0\u0F84\u0F96; [C1, V6]; xn--0ug.xn--3ed0by082k; ; ; # .྄ྖ
+≯ò˜….\u200Dð…¼ò²‡›; ≯ò˜….\u200Dð…¼ò²‡›; [C2, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [V6] # ≯.ð…¼
+>\u0338ò˜….\u200Dð…¼ò²‡›; ≯ò˜….\u200Dð…¼ò²‡›; [C2, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [V6] # ≯.ð…¼
+≯ò˜….\u200Dð…¼ò²‡›; ; [C2, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [V6] # ≯.ð…¼
+>\u0338ò˜….\u200Dð…¼ò²‡›; ≯ò˜….\u200Dð…¼ò²‡›; [C2, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; xn--hdh84488f.xn--xy7cw2886b; [V6] # ≯.ð…¼
xn--hdh84488f.xn--xy7cw2886b; ≯ò˜….ð…¼ò²‡›; [V6]; xn--hdh84488f.xn--xy7cw2886b; ; ; # ≯.ð…¼
-xn--hdh84488f.xn--1ug8099fbjp4e; ≯ò˜….â€ð…¼ò²‡›; [C2, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; ; # ≯.ð…¼
-Ùßð°¯ï½¡ðŸ•ð««; Ùßð°¯.7ð««; [B1, B2]; xn--zca96ys96y.xn--7-mm5i; ; xn--ss-jvd2339x.xn--7-mm5i; # Ùßð°¯.7ð««
-Ùßð°¯ã€‚7ð««; Ùßð°¯.7ð««; [B1, B2]; xn--zca96ys96y.xn--7-mm5i; ; xn--ss-jvd2339x.xn--7-mm5i; # Ùßð°¯.7ð««
-ÙSSð°¯ã€‚7ð««; Ùssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
-Ùssð°¯ã€‚7ð««; Ùssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
-xn--ss-jvd2339x.xn--7-mm5i; Ùssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
-xn--zca96ys96y.xn--7-mm5i; Ùßð°¯.7ð««; [B1, B2]; xn--zca96ys96y.xn--7-mm5i; ; ; # Ùßð°¯.7ð««
-ÙSSð°¯ï½¡ðŸ•ð««; Ùssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
-Ùssð°¯ï½¡ðŸ•ð««; Ùssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
-ÙSsð°¯ã€‚7ð««; Ùssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
-ÙSsð°¯ï½¡ðŸ•ð««; Ùssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
-ßެާࢱ。ð­ô…®™ð¹²; ßެާࢱ.ð­ô…®™ð¹²; [B2, B5, B6, P1, V6]; xn--zca685aoa95h.xn--e09co8cr9861c; ; xn--ss-9qet02k.xn--e09co8cr9861c; # ßެާࢱ.ð­ð¹²
-SSެާࢱ。ð­ô…®™ð¹²; ssެާࢱ.ð­ô…®™ð¹²; [B2, B5, B6, P1, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.ð­ð¹²
-ssެާࢱ。ð­ô…®™ð¹²; ssެާࢱ.ð­ô…®™ð¹²; [B2, B5, B6, P1, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.ð­ð¹²
-Ssެާࢱ。ð­ô…®™ð¹²; ssެާࢱ.ð­ô…®™ð¹²; [B2, B5, B6, P1, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.ð­ð¹²
-xn--ss-9qet02k.xn--e09co8cr9861c; ssެާࢱ.ð­ô…®™ð¹²; [B2, B5, B6, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.ð­ð¹²
-xn--zca685aoa95h.xn--e09co8cr9861c; ßެާࢱ.ð­ô…®™ð¹²; [B2, B5, B6, V6]; xn--zca685aoa95h.xn--e09co8cr9861c; ; ; # ßެާࢱ.ð­ð¹²
--。󠉗⒌𞯛; -.󠉗⒌𞯛; [B1, P1, V3, V6]; -.xn--xsh6367n1bi3e; ; ; # -.⒌
--。󠉗5.𞯛; -.󠉗5.𞯛; [B1, P1, V3, V6]; -.xn--5-zz21m.xn--6x6h; ; ; # -.5.
+xn--hdh84488f.xn--1ug8099fbjp4e; ≯ò˜….\u200Dð…¼ò²‡›; [C2, V6]; xn--hdh84488f.xn--1ug8099fbjp4e; ; ; # ≯.ð…¼
+\u0641ßð°¯ï½¡ðŸ•ð««; \u0641ßð°¯.7ð««; [B1, B2]; xn--zca96ys96y.xn--7-mm5i; ; xn--ss-jvd2339x.xn--7-mm5i; # Ùßð°¯.7ð««
+\u0641ßð°¯ã€‚7ð««; \u0641ßð°¯.7ð««; [B1, B2]; xn--zca96ys96y.xn--7-mm5i; ; xn--ss-jvd2339x.xn--7-mm5i; # Ùßð°¯.7ð««
+\u0641SSð°¯ã€‚7ð««; \u0641ssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
+\u0641ssð°¯ã€‚7ð««; \u0641ssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
+xn--ss-jvd2339x.xn--7-mm5i; \u0641ssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
+xn--zca96ys96y.xn--7-mm5i; \u0641ßð°¯.7ð««; [B1, B2]; xn--zca96ys96y.xn--7-mm5i; ; ; # Ùßð°¯.7ð««
+\u0641SSð°¯ï½¡ðŸ•ð««; \u0641ssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
+\u0641ssð°¯ï½¡ðŸ•ð««; \u0641ssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
+\u0641Ssð°¯ã€‚7ð««; \u0641ssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
+\u0641Ssð°¯ï½¡ðŸ•ð««; \u0641ssð°¯.7ð««; [B1, B2]; xn--ss-jvd2339x.xn--7-mm5i; ; ; # Ùssð°¯.7ð««
+ß\u07AC\u07A7\u08B1。ð­ô…®™ð¹²; ß\u07AC\u07A7\u08B1.ð­ô…®™ð¹²; [B2, B5, B6, V6]; xn--zca685aoa95h.xn--e09co8cr9861c; ; xn--ss-9qet02k.xn--e09co8cr9861c; # ßެާࢱ.ð­ð¹²
+SS\u07AC\u07A7\u08B1。ð­ô…®™ð¹²; ss\u07AC\u07A7\u08B1.ð­ô…®™ð¹²; [B2, B5, B6, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.ð­ð¹²
+ss\u07AC\u07A7\u08B1。ð­ô…®™ð¹²; ss\u07AC\u07A7\u08B1.ð­ô…®™ð¹²; [B2, B5, B6, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.ð­ð¹²
+Ss\u07AC\u07A7\u08B1。ð­ô…®™ð¹²; ss\u07AC\u07A7\u08B1.ð­ô…®™ð¹²; [B2, B5, B6, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.ð­ð¹²
+xn--ss-9qet02k.xn--e09co8cr9861c; ss\u07AC\u07A7\u08B1.ð­ô…®™ð¹²; [B2, B5, B6, V6]; xn--ss-9qet02k.xn--e09co8cr9861c; ; ; # ssެާࢱ.ð­ð¹²
+xn--zca685aoa95h.xn--e09co8cr9861c; ß\u07AC\u07A7\u08B1.ð­ô…®™ð¹²; [B2, B5, B6, V6]; xn--zca685aoa95h.xn--e09co8cr9861c; ; ; # ßެާࢱ.ð­ð¹²
+-。󠉗⒌𞯛; -.󠉗⒌𞯛; [B1, V3, V6]; -.xn--xsh6367n1bi3e; ; ; # -.⒌
+-。󠉗5.𞯛; -.󠉗5.𞯛; [B1, V3, V6]; -.xn--5-zz21m.xn--6x6h; ; ; # -.5.
-.xn--5-zz21m.xn--6x6h; -.󠉗5.𞯛; [B1, V3, V6]; -.xn--5-zz21m.xn--6x6h; ; ; # -.5.
-.xn--xsh6367n1bi3e; -.󠉗⒌𞯛; [B1, V3, V6]; -.xn--xsh6367n1bi3e; ; ; # -.⒌
-ð¼ŽÏ‚.-≮ﲫ; ð¼ŽÏ‚.-≮خج; [B1, P1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # Ï‚.-≮خج
-ð¼ŽÏ‚.-≮ﲫ; ð¼ŽÏ‚.-≮خج; [B1, P1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # Ï‚.-≮خج
-ð¼ŽÏ‚.-≮خج; ; [B1, P1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # Ï‚.-≮خج
-ð¼ŽÏ‚.-≮خج; ð¼ŽÏ‚.-≮خج; [B1, P1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # Ï‚.-≮خج
-ð¼ŽÎ£.-≮خج; ð¼ŽÏƒ.-≮خج; [B1, P1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
-ð¼ŽÎ£.-≮خج; ð¼ŽÏƒ.-≮خج; [B1, P1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
-ð¼ŽÏƒ.-≮خج; ; [B1, P1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
-ð¼ŽÏƒ.-≮خج; ð¼ŽÏƒ.-≮خج; [B1, P1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
-xn--4xa92520c.xn----9mcf1400a; ð¼ŽÏƒ.-≮خج; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
-xn--3xa13520c.xn----9mcf1400a; ð¼ŽÏ‚.-≮خج; [B1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; ; # Ï‚.-≮خج
-ð¼ŽÎ£ï¼Ž-≮ﲫ; ð¼ŽÏƒ.-≮خج; [B1, P1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
-ð¼ŽÎ£ï¼Ž-≮ﲫ; ð¼ŽÏƒ.-≮خج; [B1, P1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
-ð¼ŽÏƒï¼Ž-≮ﲫ; ð¼ŽÏƒ.-≮خج; [B1, P1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
-ð¼ŽÏƒï¼Ž-≮ﲫ; ð¼ŽÏƒ.-≮خج; [B1, P1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
-ꡗࢸܙ.ñ”¤”ó ›™à±ï°¾; ꡗࢸܙ.ñ”¤”ó ›™à±ÙƒÙŠ; [B5, B6, P1, V6]; xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ; ; # ꡗࢸܙ.à±ÙƒÙŠ
-ꡗࢸܙ.ñ”¤”ó ›™à±ÙƒÙŠ; ; [B5, B6, P1, V6]; xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ; ; # ꡗࢸܙ.à±ÙƒÙŠ
-xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ꡗࢸܙ.ñ”¤”ó ›™à±ÙƒÙŠ; [B5, B6, V6]; xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ; ; # ꡗࢸܙ.à±ÙƒÙŠ
-ð °à¢·ðž¤Œð«­ã€‚ð‹¦áŸð©ƒ; ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ
-ð °à¢·ðž¤®ð«­ã€‚ð‹¦áŸð©ƒ; ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ
-xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ
-ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ; ; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ
-ð °à¢·ðž¤Œð«­.ð‹¦áŸð©ƒ; ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ
-₂㘷--。ۓ‌ð«†ð‘–¿; 2㘷--.ۓ‌ð«†ð‘–¿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.Û“ð«†ð‘–¿
-₂㘷--。ۓ‌ð«†ð‘–¿; 2㘷--.ۓ‌ð«†ð‘–¿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.Û“ð«†ð‘–¿
-2㘷--。ۓ‌ð«†ð‘–¿; 2㘷--.ۓ‌ð«†ð‘–¿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.Û“ð«†ð‘–¿
-2㘷--。ۓ‌ð«†ð‘–¿; 2㘷--.ۓ‌ð«†ð‘–¿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.Û“ð«†ð‘–¿
-xn--2---u58b.xn--jlb8024k14g; 2㘷--.Û“ð«†ð‘–¿; [B1, V2, V3]; xn--2---u58b.xn--jlb8024k14g; ; ; # 2㘷--.Û“ð«†ð‘–¿
-xn--2---u58b.xn--jlb820ku99nbgj; 2㘷--.ۓ‌ð«†ð‘–¿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; ; # 2㘷--.Û“ð«†ð‘–¿
--𘊻.ᡮح-; -𘊻.ᡮح-; [B1, B5, B6, V3]; xn----bp5n.xn----bnc231l; ; ; # -𘊻.ᡮح-
--𘊻.ᡮح-; ; [B1, B5, B6, V3]; xn----bp5n.xn----bnc231l; ; ; # -𘊻.ᡮح-
-xn----bp5n.xn----bnc231l; -𘊻.ᡮح-; [B1, B5, B6, V3]; xn----bp5n.xn----bnc231l; ; ; # -𘊻.ᡮح-
-‌-ß。ᢣð¹­Ø¿; ‌-ß.ᢣð¹­Ø¿; [B1, B5, B6, C1]; xn----qfa550v.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ß.ᢣð¹­Ø¿
-‌-ß。ᢣð¹­Ø¿; ‌-ß.ᢣð¹­Ø¿; [B1, B5, B6, C1]; xn----qfa550v.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ß.ᢣð¹­Ø¿
-‌-SS。ᢣð¹­Ø¿; ‌-ss.ᢣð¹­Ø¿; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
-‌-ss。ᢣð¹­Ø¿; ‌-ss.ᢣð¹­Ø¿; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
-‌-Ss。ᢣð¹­Ø¿; ‌-ss.ᢣð¹­Ø¿; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
--ss.xn--bhb925glx3p; -ss.ᢣð¹­Ø¿; [B1, B5, B6, V3]; -ss.xn--bhb925glx3p; ; ; # -ss.ᢣð¹­Ø¿
-xn---ss-8m0a.xn--bhb925glx3p; ‌-ss.ᢣð¹­Ø¿; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; ; # -ss.ᢣð¹­Ø¿
-xn----qfa550v.xn--bhb925glx3p; ‌-ß.ᢣð¹­Ø¿; [B1, B5, B6, C1]; xn----qfa550v.xn--bhb925glx3p; ; ; # -ß.ᢣð¹­Ø¿
-‌-SS。ᢣð¹­Ø¿; ‌-ss.ᢣð¹­Ø¿; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
-‌-ss。ᢣð¹­Ø¿; ‌-ss.ᢣð¹­Ø¿; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
-‌-Ss。ᢣð¹­Ø¿; ‌-ss.ᢣð¹­Ø¿; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
-ê§Ó€á®ªà£¶ï¼Žëˆµ; ê§Ó€á®ªà£¶.눵; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ê§Ó€á®ªà£¶.눵
-ê§Ó€á®ªà£¶ï¼Žá„‚ᅯᆼ; ê§Ó€á®ªà£¶.눵; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ê§Ó€á®ªà£¶.눵
-ê§Ó€á®ªà£¶.눵; ; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ê§Ó€á®ªà£¶.눵
-ê§Ó€á®ªà£¶.눵; ê§Ó€á®ªà£¶.눵; [P1, V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ê§Ó€á®ªà£¶.눵
-ê§Ó᮪ࣶ.눵; ê§Ó᮪ࣶ.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ê§Ó᮪ࣶ.눵
-ê§Ó᮪ࣶ.눵; ; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ê§Ó᮪ࣶ.눵
-xn--s5a04sn4u297k.xn--2e1b; ê§Ó᮪ࣶ.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ê§Ó᮪ࣶ.눵
-xn--d5a07sn4u297k.xn--2e1b; ê§Ó€á®ªà£¶.눵; [V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ê§Ó€á®ªà£¶.눵
-ê§Ó᮪ࣶ.눵; ê§Ó᮪ࣶ.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ê§Ó᮪ࣶ.눵
-ê§Ó᮪ࣶ.눵; ê§Ó᮪ࣶ.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ê§Ó᮪ࣶ.눵
-꣪。𖄿𑆾󠇗; ꣪.𖄿𑆾; [P1, V5, V6]; xn--3g9a.xn--ud1dz07k; ; ; # ꣪.𑆾
-꣪。𖄿𑆾󠇗; ꣪.𖄿𑆾; [P1, V5, V6]; xn--3g9a.xn--ud1dz07k; ; ; # ꣪.𑆾
-xn--3g9a.xn--ud1dz07k; ꣪.𖄿𑆾; [V5, V6]; xn--3g9a.xn--ud1dz07k; ; ; # ꣪.𑆾
-󇓓𑚳。ñ·¿â‰¯â¾‡; 󇓓𑚳.ñ·¿â‰¯èˆ›; [P1, V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # ð‘š³.≯舛
-󇓓𑚳。ñ·¿≯⾇; 󇓓𑚳.ñ·¿â‰¯èˆ›; [P1, V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # ð‘š³.≯舛
-󇓓𑚳。ñ·¿â‰¯èˆ›; 󇓓𑚳.ñ·¿â‰¯èˆ›; [P1, V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # ð‘š³.≯舛
-󇓓𑚳。ñ·¿≯舛; 󇓓𑚳.ñ·¿â‰¯èˆ›; [P1, V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # ð‘š³.≯舛
+ð¼ŽÏ‚.-≮\uFCAB; ð¼ŽÏ‚.-≮\u062E\u062C; [B1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # Ï‚.-≮خج
+ð¼ŽÏ‚.-<\u0338\uFCAB; ð¼ŽÏ‚.-≮\u062E\u062C; [B1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # Ï‚.-≮خج
+ð¼ŽÏ‚.-≮\u062E\u062C; ; [B1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # Ï‚.-≮خج
+ð¼ŽÏ‚.-<\u0338\u062E\u062C; ð¼ŽÏ‚.-≮\u062E\u062C; [B1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; xn--4xa92520c.xn----9mcf1400a; # Ï‚.-≮خج
+ð¼ŽÎ£.-<\u0338\u062E\u062C; ð¼ŽÏƒ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
+ð¼ŽÎ£.-≮\u062E\u062C; ð¼ŽÏƒ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
+ð¼ŽÏƒ.-≮\u062E\u062C; ; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
+ð¼ŽÏƒ.-<\u0338\u062E\u062C; ð¼ŽÏƒ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
+xn--4xa92520c.xn----9mcf1400a; ð¼ŽÏƒ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
+xn--3xa13520c.xn----9mcf1400a; ð¼ŽÏ‚.-≮\u062E\u062C; [B1, V3, V6]; xn--3xa13520c.xn----9mcf1400a; ; ; # Ï‚.-≮خج
+ð¼ŽÎ£ï¼Ž-<\u0338\uFCAB; ð¼ŽÏƒ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
+ð¼ŽÎ£ï¼Ž-≮\uFCAB; ð¼ŽÏƒ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
+ð¼ŽÏƒï¼Ž-≮\uFCAB; ð¼ŽÏƒ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
+ð¼ŽÏƒï¼Ž-<\u0338\uFCAB; ð¼ŽÏƒ.-≮\u062E\u062C; [B1, V3, V6]; xn--4xa92520c.xn----9mcf1400a; ; ; # σ.-≮خج
+ê¡—\u08B8\u0719.ñ”¤”ó ›™\u0C4D\uFC3E; ê¡—\u08B8\u0719.ñ”¤”ó ›™\u0C4D\u0643\u064A; [B5, B6, V6]; xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ; ; # ꡗࢸܙ.à±ÙƒÙŠ
+ê¡—\u08B8\u0719.ñ”¤”ó ›™\u0C4D\u0643\u064A; ; [B5, B6, V6]; xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ; ; # ꡗࢸܙ.à±ÙƒÙŠ
+xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ê¡—\u08B8\u0719.ñ”¤”ó ›™\u0C4D\u0643\u064A; [B5, B6, V6]; xn--jnb34fs003a.xn--fhbo927bk128mpi24d; ; ; # ꡗࢸܙ.à±ÙƒÙŠ
+ð °\u08B7𞤌ð«­ã€‚ð‹¦\u17CDð©ƒ; ð °\u08B7𞤮ð«­.ð‹¦\u17CDð©ƒ; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ
+ð °\u08B7𞤮ð«­ã€‚ð‹¦\u17CDð©ƒ; ð °\u08B7𞤮ð«­.ð‹¦\u17CDð©ƒ; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ
+xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ð °\u08B7𞤮ð«­.ð‹¦\u17CDð©ƒ; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ
+ð °\u08B7𞤮ð«­.ð‹¦\u17CDð©ƒ; ; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ
+ð °\u08B7𞤌ð«­.ð‹¦\u17CDð©ƒ; ð °\u08B7𞤮ð«­.ð‹¦\u17CDð©ƒ; [B1]; xn--dzb5191kezbrw47a.xn--p4e3841jz9tf; ; ; # ð °à¢·ðž¤®ð«­.ð‹¦áŸð©ƒ
+₂㘷--。\u06D3\u200Cð«†ð‘–¿; 2㘷--.\u06D3\u200Cð«†ð‘–¿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.Û“ð«†ð‘–¿
+₂㘷--。\u06D2\u0654\u200Cð«†ð‘–¿; 2㘷--.\u06D3\u200Cð«†ð‘–¿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.Û“ð«†ð‘–¿
+2㘷--。\u06D3\u200Cð«†ð‘–¿; 2㘷--.\u06D3\u200Cð«†ð‘–¿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.Û“ð«†ð‘–¿
+2㘷--。\u06D2\u0654\u200Cð«†ð‘–¿; 2㘷--.\u06D3\u200Cð«†ð‘–¿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; xn--2---u58b.xn--jlb8024k14g; [B1, V2, V3] # 2㘷--.Û“ð«†ð‘–¿
+xn--2---u58b.xn--jlb8024k14g; 2㘷--.\u06D3ð«†ð‘–¿; [B1, V2, V3]; xn--2---u58b.xn--jlb8024k14g; ; ; # 2㘷--.Û“ð«†ð‘–¿
+xn--2---u58b.xn--jlb820ku99nbgj; 2㘷--.\u06D3\u200Cð«†ð‘–¿; [B1, C1, V2, V3]; xn--2---u58b.xn--jlb820ku99nbgj; ; ; # 2㘷--.Û“ð«†ð‘–¿
+-𘊻.ᡮ\u062D-; -𘊻.ᡮ\u062D-; [B1, B5, B6, V3]; xn----bp5n.xn----bnc231l; ; ; # -𘊻.ᡮح-
+-𘊻.ᡮ\u062D-; ; [B1, B5, B6, V3]; xn----bp5n.xn----bnc231l; ; ; # -𘊻.ᡮح-
+xn----bp5n.xn----bnc231l; -𘊻.ᡮ\u062D-; [B1, B5, B6, V3]; xn----bp5n.xn----bnc231l; ; ; # -𘊻.ᡮح-
+\u200C-ß。ᢣð¹­\u063F; \u200C-ß.ᢣð¹­\u063F; [B1, B5, B6, C1]; xn----qfa550v.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ß.ᢣð¹­Ø¿
+\u200C-ß。ᢣð¹­\u063F; \u200C-ß.ᢣð¹­\u063F; [B1, B5, B6, C1]; xn----qfa550v.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ß.ᢣð¹­Ø¿
+\u200C-SS。ᢣð¹­\u063F; \u200C-ss.ᢣð¹­\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
+\u200C-ss。ᢣð¹­\u063F; \u200C-ss.ᢣð¹­\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
+\u200C-Ss。ᢣð¹­\u063F; \u200C-ss.ᢣð¹­\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
+-ss.xn--bhb925glx3p; -ss.ᢣð¹­\u063F; [B1, B5, B6, V3]; -ss.xn--bhb925glx3p; ; ; # -ss.ᢣð¹­Ø¿
+xn---ss-8m0a.xn--bhb925glx3p; \u200C-ss.ᢣð¹­\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; ; # -ss.ᢣð¹­Ø¿
+xn----qfa550v.xn--bhb925glx3p; \u200C-ß.ᢣð¹­\u063F; [B1, B5, B6, C1]; xn----qfa550v.xn--bhb925glx3p; ; ; # -ß.ᢣð¹­Ø¿
+\u200C-SS。ᢣð¹­\u063F; \u200C-ss.ᢣð¹­\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
+\u200C-ss。ᢣð¹­\u063F; \u200C-ss.ᢣð¹­\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
+\u200C-Ss。ᢣð¹­\u063F; \u200C-ss.ᢣð¹­\u063F; [B1, B5, B6, C1]; xn---ss-8m0a.xn--bhb925glx3p; ; -ss.xn--bhb925glx3p; [B1, B5, B6, V3] # -ss.ᢣð¹­Ø¿
+ê§Ó€\u1BAA\u08F6.눵; ê§Ó€\u1BAA\u08F6.눵; [V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ê§Ó€á®ªà£¶.눵
+ê§Ó€\u1BAA\u08F6.눵; ê§Ó€\u1BAA\u08F6.눵; [V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ê§Ó€á®ªà£¶.눵
+ê§Ó€\u1BAA\u08F6.눵; ; [V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ê§Ó€á®ªà£¶.눵
+ê§Ó€\u1BAA\u08F6.눵; ê§Ó€\u1BAA\u08F6.눵; [V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ê§Ó€á®ªà£¶.눵
+ê§Ó\u1BAA\u08F6.눵; ê§Ó\u1BAA\u08F6.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ê§Ó᮪ࣶ.눵
+ê§Ó\u1BAA\u08F6.눵; ; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ê§Ó᮪ࣶ.눵
+xn--s5a04sn4u297k.xn--2e1b; ê§Ó\u1BAA\u08F6.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ê§Ó᮪ࣶ.눵
+xn--d5a07sn4u297k.xn--2e1b; ê§Ó€\u1BAA\u08F6.눵; [V6]; xn--d5a07sn4u297k.xn--2e1b; ; ; # ê§Ó€á®ªà£¶.눵
+ê§Ó\u1BAA\u08F6.눵; ê§Ó\u1BAA\u08F6.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ê§Ó᮪ࣶ.눵
+ê§Ó\u1BAA\u08F6.눵; ê§Ó\u1BAA\u08F6.눵; ; xn--s5a04sn4u297k.xn--2e1b; ; ; # ê§Ó᮪ࣶ.눵
+\uA8EA。𖄿𑆾󠇗; \uA8EA.𖄿𑆾; [V5, V6]; xn--3g9a.xn--ud1dz07k; ; ; # ꣪.𑆾
+\uA8EA。𖄿𑆾󠇗; \uA8EA.𖄿𑆾; [V5, V6]; xn--3g9a.xn--ud1dz07k; ; ; # ꣪.𑆾
+xn--3g9a.xn--ud1dz07k; \uA8EA.𖄿𑆾; [V5, V6]; xn--3g9a.xn--ud1dz07k; ; ; # ꣪.𑆾
+󇓓𑚳。ñ·¿â‰¯â¾‡; 󇓓𑚳.ñ·¿â‰¯èˆ›; [V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # ð‘š³.≯舛
+󇓓𑚳。ñ·¿>\u0338⾇; 󇓓𑚳.ñ·¿â‰¯èˆ›; [V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # ð‘š³.≯舛
+󇓓𑚳。ñ·¿â‰¯èˆ›; 󇓓𑚳.ñ·¿â‰¯èˆ›; [V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # ð‘š³.≯舛
+󇓓𑚳。ñ·¿>\u0338舛; 󇓓𑚳.ñ·¿â‰¯èˆ›; [V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # ð‘š³.≯舛
xn--3e2d79770c.xn--hdh0088abyy1c; 󇓓𑚳.ñ·¿â‰¯èˆ›; [V6]; xn--3e2d79770c.xn--hdh0088abyy1c; ; ; # ð‘š³.≯舛
-ð«‡Ù¡â€Œï¼Žâ€â€Œ; ð«‡Ù¡â€Œ.â€â€Œ; [B1, B3, C1, C2]; xn--9hb652kv99n.xn--0ugb; ; xn--9hb7344k.; [] # ð«‡Ù¡.
-ð«‡Ù¡â€Œ.â€â€Œ; ; [B1, B3, C1, C2]; xn--9hb652kv99n.xn--0ugb; ; xn--9hb7344k.; [] # ð«‡Ù¡.
-xn--9hb7344k.; ð«‡Ù¡.; ; xn--9hb7344k.; ; ; # ð«‡Ù¡.
-ð«‡Ù¡.; ; ; xn--9hb7344k.; ; ; # ð«‡Ù¡.
-xn--9hb652kv99n.xn--0ugb; ð«‡Ù¡â€Œ.â€â€Œ; [B1, B3, C1, C2]; xn--9hb652kv99n.xn--0ugb; ; ; # ð«‡Ù¡.
-ñ¡…ˆç ªâ‰¯á¢‘。≯ð©šò“´”‌; ñ¡…ˆç ªâ‰¯á¢‘.≯ð©šò“´”‌; [C1, P1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [P1, V6] # 砪≯ᢑ.≯ð©š
-ñ¡…ˆç ª≯ᢑ。≯ð©šò“´”‌; ñ¡…ˆç ªâ‰¯á¢‘.≯ð©šò“´”‌; [C1, P1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [P1, V6] # 砪≯ᢑ.≯ð©š
-ñ¡…ˆç ªâ‰¯á¢‘。≯ð©šò“´”‌; ñ¡…ˆç ªâ‰¯á¢‘.≯ð©šò“´”‌; [C1, P1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [P1, V6] # 砪≯ᢑ.≯ð©š
-ñ¡…ˆç ª≯ᢑ。≯ð©šò“´”‌; ñ¡…ˆç ªâ‰¯á¢‘.≯ð©šò“´”‌; [C1, P1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [P1, V6] # 砪≯ᢑ.≯ð©š
+ð«‡\u0661\u200C.\u200D\u200C; ð«‡\u0661\u200C.\u200D\u200C; [B1, B3, C1, C2]; xn--9hb652kv99n.xn--0ugb; ; xn--9hb7344k.; [] # ð«‡Ù¡.
+ð«‡\u0661\u200C.\u200D\u200C; ; [B1, B3, C1, C2]; xn--9hb652kv99n.xn--0ugb; ; xn--9hb7344k.; [] # ð«‡Ù¡.
+xn--9hb7344k.; ð«‡\u0661.; ; xn--9hb7344k.; ; ; # ð«‡Ù¡.
+ð«‡\u0661.; ; ; xn--9hb7344k.; ; ; # ð«‡Ù¡.
+xn--9hb652kv99n.xn--0ugb; ð«‡\u0661\u200C.\u200D\u200C; [B1, B3, C1, C2]; xn--9hb652kv99n.xn--0ugb; ; ; # ð«‡Ù¡.
+ñ¡…ˆç ªâ‰¯á¢‘。≯ð©šò“´”\u200C; ñ¡…ˆç ªâ‰¯á¢‘.≯ð©šò“´”\u200C; [C1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [V6] # 砪≯ᢑ.≯ð©š
+ñ¡…ˆç ª>\u0338ᢑ。>\u0338ð©šò“´”\u200C; ñ¡…ˆç ªâ‰¯á¢‘.≯ð©šò“´”\u200C; [C1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [V6] # 砪≯ᢑ.≯ð©š
+ñ¡…ˆç ªâ‰¯á¢‘。≯ð©šò“´”\u200C; ñ¡…ˆç ªâ‰¯á¢‘.≯ð©šò“´”\u200C; [C1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [V6] # 砪≯ᢑ.≯ð©š
+ñ¡…ˆç ª>\u0338ᢑ。>\u0338ð©šò“´”\u200C; ñ¡…ˆç ªâ‰¯á¢‘.≯ð©šò“´”\u200C; [C1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; [V6] # 砪≯ᢑ.≯ð©š
xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; ñ¡…ˆç ªâ‰¯á¢‘.≯ð©šò“´”; [V6]; xn--bbf561cf95e57y3e.xn--hdh0834o7mj6b; ; ; # 砪≯ᢑ.≯ð©š
-xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ñ¡…ˆç ªâ‰¯á¢‘.≯ð©šò“´”‌; [C1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; ; # 砪≯ᢑ.≯ð©š
-Ⴥ.𑄳㊸; Ⴥ.𑄳43; [P1, V5, V6]; xn--9nd.xn--43-274o; ; ; # Ⴥ.𑄳43
-Ⴥ.𑄳43; ; [P1, V5, V6]; xn--9nd.xn--43-274o; ; ; # Ⴥ.𑄳43
+xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ñ¡…ˆç ªâ‰¯á¢‘.≯ð©šò“´”\u200C; [C1, V6]; xn--bbf561cf95e57y3e.xn--0ugz6gc910ejro8c; ; ; # 砪≯ᢑ.≯ð©š
+Ⴥ.𑄳㊸; Ⴥ.𑄳43; [V5, V6]; xn--9nd.xn--43-274o; ; ; # Ⴥ.𑄳43
+Ⴥ.𑄳43; ; [V5, V6]; xn--9nd.xn--43-274o; ; ; # Ⴥ.𑄳43
â´¥.ð‘„³43; ; [V5]; xn--tlj.xn--43-274o; ; ; # â´¥.ð‘„³43
xn--tlj.xn--43-274o; â´¥.ð‘„³43; [V5]; xn--tlj.xn--43-274o; ; ; # â´¥.ð‘„³43
xn--9nd.xn--43-274o; Ⴥ.𑄳43; [V5, V6]; xn--9nd.xn--43-274o; ; ; # Ⴥ.𑄳43
ⴥ.𑄳㊸; ⴥ.𑄳43; [V5]; xn--tlj.xn--43-274o; ; ; # ⴥ.𑄳43
-ðŸŽÙ£ã€‚Ⴒᡇࣲð¹ ; 0Ù£.Ⴒᡇࣲð¹ ; [B1, B5, B6, P1, V6]; xn--0-fqc.xn--10b180bnwgfy0z; ; ; # 0Ù£.Ⴒᡇࣲð¹ 
-0٣。Ⴒᡇࣲð¹ ; 0Ù£.Ⴒᡇࣲð¹ ; [B1, B5, B6, P1, V6]; xn--0-fqc.xn--10b180bnwgfy0z; ; ; # 0Ù£.Ⴒᡇࣲð¹ 
-0٣。ⴒᡇࣲð¹ ; 0Ù£.ⴒᡇࣲð¹ ; [B1, B5, B6]; xn--0-fqc.xn--10b369eivp359r; ; ; # 0Ù£.ⴒᡇࣲð¹ 
-xn--0-fqc.xn--10b369eivp359r; 0Ù£.ⴒᡇࣲð¹ ; [B1, B5, B6]; xn--0-fqc.xn--10b369eivp359r; ; ; # 0Ù£.ⴒᡇࣲð¹ 
-xn--0-fqc.xn--10b180bnwgfy0z; 0Ù£.Ⴒᡇࣲð¹ ; [B1, B5, B6, V6]; xn--0-fqc.xn--10b180bnwgfy0z; ; ; # 0Ù£.Ⴒᡇࣲð¹ 
-ðŸŽÙ£ã€‚ⴒᡇࣲð¹ ; 0Ù£.ⴒᡇࣲð¹ ; [B1, B5, B6]; xn--0-fqc.xn--10b369eivp359r; ; ; # 0Ù£.ⴒᡇࣲð¹ 
-񗪨󠄉ᅠྷ.񸞰꥓; 񗪨ᅠྷ.񸞰꥓; [P1, V6]; xn--kgd7493jee34a.xn--3j9au7544a; ; ; # ྷ.꥓
-񗪨󠄉ᅠྷ.񸞰꥓; 񗪨ᅠྷ.񸞰꥓; [P1, V6]; xn--kgd36f9z57y.xn--3j9au7544a; ; ; # ྷ.꥓
-xn--kgd36f9z57y.xn--3j9au7544a; 񗪨ᅠྷ.񸞰꥓; [V6]; xn--kgd36f9z57y.xn--3j9au7544a; ; ; # ྷ.꥓
-xn--kgd7493jee34a.xn--3j9au7544a; 񗪨ᅠྷ.񸞰꥓; [V6]; xn--kgd7493jee34a.xn--3j9au7544a; ; ; # ྷ.꥓
-ؘ.۳‌꥓; ; [C1, V5]; xn--6fb.xn--gmb469jjf1h; ; xn--6fb.xn--gmb0524f; [V5] # ؘ.۳꥓
-xn--6fb.xn--gmb0524f; ؘ.۳꥓; [V5]; xn--6fb.xn--gmb0524f; ; ; # ؘ.۳꥓
-xn--6fb.xn--gmb469jjf1h; ؘ.۳‌꥓; [C1, V5]; xn--6fb.xn--gmb469jjf1h; ; ; # ؘ.۳꥓
-ᡌ.︒ᢑ; ᡌ.︒ᢑ; [P1, V6]; xn--c8e.xn--bbf9168i; ; ; # ᡌ.︒ᢑ
+ðŸŽ\u0663。Ⴒᡇ\u08F2ð¹ ; 0\u0663.Ⴒᡇ\u08F2ð¹ ; [B1, B5, B6, V6]; xn--0-fqc.xn--10b180bnwgfy0z; ; ; # 0Ù£.Ⴒᡇࣲð¹ 
+0\u0663。Ⴒᡇ\u08F2ð¹ ; 0\u0663.Ⴒᡇ\u08F2ð¹ ; [B1, B5, B6, V6]; xn--0-fqc.xn--10b180bnwgfy0z; ; ; # 0Ù£.Ⴒᡇࣲð¹ 
+0\u0663。ⴒᡇ\u08F2ð¹ ; 0\u0663.ⴒᡇ\u08F2ð¹ ; [B1, B5, B6]; xn--0-fqc.xn--10b369eivp359r; ; ; # 0Ù£.ⴒᡇࣲð¹ 
+xn--0-fqc.xn--10b369eivp359r; 0\u0663.ⴒᡇ\u08F2ð¹ ; [B1, B5, B6]; xn--0-fqc.xn--10b369eivp359r; ; ; # 0Ù£.ⴒᡇࣲð¹ 
+xn--0-fqc.xn--10b180bnwgfy0z; 0\u0663.Ⴒᡇ\u08F2ð¹ ; [B1, B5, B6, V6]; xn--0-fqc.xn--10b180bnwgfy0z; ; ; # 0Ù£.Ⴒᡇࣲð¹ 
+ðŸŽ\u0663。ⴒᡇ\u08F2ð¹ ; 0\u0663.ⴒᡇ\u08F2ð¹ ; [B1, B5, B6]; xn--0-fqc.xn--10b369eivp359r; ; ; # 0Ù£.ⴒᡇࣲð¹ 
+񗪨󠄉\uFFA0\u0FB7.񸞰\uA953; 񗪨\uFFA0\u0FB7.񸞰\uA953; [V6]; xn--kgd7493jee34a.xn--3j9au7544a; ; ; # ྷ.꥓
+񗪨󠄉\u1160\u0FB7.񸞰\uA953; 񗪨\u1160\u0FB7.񸞰\uA953; [V6]; xn--kgd36f9z57y.xn--3j9au7544a; ; ; # ྷ.꥓
+xn--kgd36f9z57y.xn--3j9au7544a; 񗪨\u1160\u0FB7.񸞰\uA953; [V6]; xn--kgd36f9z57y.xn--3j9au7544a; ; ; # ྷ.꥓
+xn--kgd7493jee34a.xn--3j9au7544a; 񗪨\uFFA0\u0FB7.񸞰\uA953; [V6]; xn--kgd7493jee34a.xn--3j9au7544a; ; ; # ྷ.꥓
+\u0618.۳\u200C\uA953; ; [C1, V5]; xn--6fb.xn--gmb469jjf1h; ; xn--6fb.xn--gmb0524f; [V5] # ؘ.۳꥓
+xn--6fb.xn--gmb0524f; \u0618.۳\uA953; [V5]; xn--6fb.xn--gmb0524f; ; ; # ؘ.۳꥓
+xn--6fb.xn--gmb469jjf1h; \u0618.۳\u200C\uA953; [C1, V5]; xn--6fb.xn--gmb469jjf1h; ; ; # ؘ.۳꥓
+ᡌ.︒ᢑ; ᡌ.︒ᢑ; [V6]; xn--c8e.xn--bbf9168i; ; ; # ᡌ.︒ᢑ
ᡌ.。ᢑ; ᡌ..ᢑ; [X4_2]; xn--c8e..xn--bbf; [A4_2]; ; # ᡌ..ᢑ
xn--c8e..xn--bbf; ᡌ..ᢑ; [X4_2]; xn--c8e..xn--bbf; [A4_2]; ; # ᡌ..ᢑ
xn--c8e.xn--bbf9168i; ᡌ.︒ᢑ; [V6]; xn--c8e.xn--bbf9168i; ; ; # ᡌ.︒ᢑ
-𑋪á³ï½¡ðž½§; 𑋪á³.𞽧; [B1, B3, B6, P1, V5, V6]; xn--xld7443k.xn--4o7h; ; ; # 𑋪á³.
-𑋪á³ã€‚𞽧; 𑋪á³.𞽧; [B1, B3, B6, P1, V5, V6]; xn--xld7443k.xn--4o7h; ; ; # 𑋪á³.
-xn--xld7443k.xn--4o7h; 𑋪á³.𞽧; [B1, B3, B6, V5, V6]; xn--xld7443k.xn--4o7h; ; ; # 𑋪á³.
-ðž·ã€‚á ¢ò“˜†; ðž·.á ¢ò“˜†; [P1, V6]; xn--hd7h.xn--46e66060j; ; ; # .á ¢
+𑋪\u1073。𞽧; 𑋪\u1073.𞽧; [B1, V5, V6]; xn--xld7443k.xn--4o7h; ; ; # 𑋪á³.
+𑋪\u1073。𞽧; 𑋪\u1073.𞽧; [B1, V5, V6]; xn--xld7443k.xn--4o7h; ; ; # 𑋪á³.
+xn--xld7443k.xn--4o7h; 𑋪\u1073.𞽧; [B1, V5, V6]; xn--xld7443k.xn--4o7h; ; ; # 𑋪á³.
+ðž·ã€‚á ¢ò“˜†; ðž·.á ¢ò“˜†; [V6]; xn--hd7h.xn--46e66060j; ; ; # .á ¢
xn--hd7h.xn--46e66060j; ðž·.á ¢ò“˜†; [V6]; xn--hd7h.xn--46e66060j; ; ; # .á ¢
-𑄳㴼.‌ð¹¡âƒ«ñ«º¦; 𑄳㴼.‌ð¹¡âƒ«ñ«º¦; [B1, C1, P1, V5, V6]; xn--iym9428c.xn--0ug46a7218cllv0c; ; xn--iym9428c.xn--e1g3464g08p3b; [B1, P1, V5, V6] # 𑄳㴼.ð¹¡âƒ«
-𑄳㴼.‌ð¹¡âƒ«ñ«º¦; ; [B1, C1, P1, V5, V6]; xn--iym9428c.xn--0ug46a7218cllv0c; ; xn--iym9428c.xn--e1g3464g08p3b; [B1, P1, V5, V6] # 𑄳㴼.ð¹¡âƒ«
-xn--iym9428c.xn--e1g3464g08p3b; 𑄳㴼.ð¹¡âƒ«ñ«º¦; [B1, V5, V6]; xn--iym9428c.xn--e1g3464g08p3b; ; ; # 𑄳㴼.ð¹¡âƒ«
-xn--iym9428c.xn--0ug46a7218cllv0c; 𑄳㴼.‌ð¹¡âƒ«ñ«º¦; [B1, C1, V5, V6]; xn--iym9428c.xn--0ug46a7218cllv0c; ; ; # 𑄳㴼.ð¹¡âƒ«
-ñ »Ÿð¹³ð‘ˆ¯ï½¡Ì; ñ »Ÿð¹³ð‘ˆ¯.Ì; [B1, B3, B5, B6, P1, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # ð¹³ð‘ˆ¯.Ì
-ñ »Ÿð¹³ð‘ˆ¯ã€‚Ì; ñ »Ÿð¹³ð‘ˆ¯.Ì; [B1, B3, B5, B6, P1, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # ð¹³ð‘ˆ¯.Ì
-xn--ro0dw7dey96m.xn--eta; ñ »Ÿð¹³ð‘ˆ¯.Ì; [B1, B3, B5, B6, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # ð¹³ð‘ˆ¯.Ì
-ᢊ뾜󠱴𑚶。à¢ð¹¥; ᢊ뾜󠱴𑚶.à¢ð¹¥; [B1, P1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.à¢ð¹¥
-ᢊ뾜󠱴𑚶。à¢ð¹¥; ᢊ뾜󠱴𑚶.à¢ð¹¥; [B1, P1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.à¢ð¹¥
-xn--39e4566fjv8bwmt6n.xn--myb6415k; ᢊ뾜󠱴𑚶.à¢ð¹¥; [B1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.à¢ð¹¥
-ð¹¥â‰ ï½¡ð‹²ó § â€Œ; ð¹¥â‰ .ð‹²ó § â€Œ; [B1, C1, P1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, P1, V6] # ð¹¥â‰ .ð‹²
-ð¹¥≠。ð‹²ó § â€Œ; ð¹¥â‰ .ð‹²ó § â€Œ; [B1, C1, P1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, P1, V6] # ð¹¥â‰ .ð‹²
-ð¹¥â‰ ã€‚ð‹²ó § â€Œ; ð¹¥â‰ .ð‹²ó § â€Œ; [B1, C1, P1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, P1, V6] # ð¹¥â‰ .ð‹²
-ð¹¥≠。ð‹²ó § â€Œ; ð¹¥â‰ .ð‹²ó § â€Œ; [B1, C1, P1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, P1, V6] # ð¹¥â‰ .ð‹²
+𑄳㴼.\u200Cð¹¡\u20EBñ«º¦; 𑄳㴼.\u200Cð¹¡\u20EBñ«º¦; [B1, C1, V5, V6]; xn--iym9428c.xn--0ug46a7218cllv0c; ; xn--iym9428c.xn--e1g3464g08p3b; [B1, V5, V6] # 𑄳㴼.ð¹¡âƒ«
+𑄳㴼.\u200Cð¹¡\u20EBñ«º¦; ; [B1, C1, V5, V6]; xn--iym9428c.xn--0ug46a7218cllv0c; ; xn--iym9428c.xn--e1g3464g08p3b; [B1, V5, V6] # 𑄳㴼.ð¹¡âƒ«
+xn--iym9428c.xn--e1g3464g08p3b; 𑄳㴼.ð¹¡\u20EBñ«º¦; [B1, V5, V6]; xn--iym9428c.xn--e1g3464g08p3b; ; ; # 𑄳㴼.ð¹¡âƒ«
+xn--iym9428c.xn--0ug46a7218cllv0c; 𑄳㴼.\u200Cð¹¡\u20EBñ«º¦; [B1, C1, V5, V6]; xn--iym9428c.xn--0ug46a7218cllv0c; ; ; # 𑄳㴼.ð¹¡âƒ«
+ñ »Ÿð¹³ð‘ˆ¯ï½¡\u031D; ñ »Ÿð¹³ð‘ˆ¯.\u031D; [B1, B5, B6, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # ð¹³ð‘ˆ¯.Ì
+ñ »Ÿð¹³ð‘ˆ¯ã€‚\u031D; ñ »Ÿð¹³ð‘ˆ¯.\u031D; [B1, B5, B6, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # ð¹³ð‘ˆ¯.Ì
+xn--ro0dw7dey96m.xn--eta; ñ »Ÿð¹³ð‘ˆ¯.\u031D; [B1, B5, B6, V5, V6]; xn--ro0dw7dey96m.xn--eta; ; ; # ð¹³ð‘ˆ¯.Ì
+ᢊ뾜󠱴𑚶。\u089Dð¹¥; ᢊ뾜󠱴𑚶.\u089Dð¹¥; [B1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.à¢ð¹¥
+ᢊ뾜󠱴𑚶。\u089Dð¹¥; ᢊ뾜󠱴𑚶.\u089Dð¹¥; [B1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.à¢ð¹¥
+xn--39e4566fjv8bwmt6n.xn--myb6415k; ᢊ뾜󠱴𑚶.\u089Dð¹¥; [B1, V5, V6]; xn--39e4566fjv8bwmt6n.xn--myb6415k; ; ; # ᢊ뾜𑚶.à¢ð¹¥
+ð¹¥â‰ ï½¡ð‹²ó § \u200C; ð¹¥â‰ .ð‹²ó § \u200C; [B1, C1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, V6] # ð¹¥â‰ .ð‹²
+ð¹¥=\u0338。ð‹²ó § \u200C; ð¹¥â‰ .ð‹²ó § \u200C; [B1, C1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, V6] # ð¹¥â‰ .ð‹²
+ð¹¥â‰ ã€‚ð‹²ó § \u200C; ð¹¥â‰ .ð‹²ó § \u200C; [B1, C1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, V6] # ð¹¥â‰ .ð‹²
+ð¹¥=\u0338。ð‹²ó § \u200C; ð¹¥â‰ .ð‹²ó § \u200C; [B1, C1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; xn--1ch6704g.xn--m97cw2999c; [B1, V6] # ð¹¥â‰ .ð‹²
xn--1ch6704g.xn--m97cw2999c; ð¹¥â‰ .ð‹²ó § ; [B1, V6]; xn--1ch6704g.xn--m97cw2999c; ; ; # ð¹¥â‰ .ð‹²
-xn--1ch6704g.xn--0ug3840g51u4g; ð¹¥â‰ .ð‹²ó § â€Œ; [B1, C1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; ; # ð¹¥â‰ .ð‹²
-á…Ÿñ™¯ à¥ï¼Žâ€ê¥“ðª¤; á…Ÿñ™¯ à¥.â€ê¥“ðª¤; [B1, C2, P1, V6]; xn--n3b542bb085j.xn--1ug6815co9wc; ; xn--n3b542bb085j.xn--3j9al95p; [B5, B6, P1, V5, V6] # à¥.꥓
-á…Ÿñ™¯ à¥.â€ê¥“ðª¤; ; [B1, C2, P1, V6]; xn--n3b542bb085j.xn--1ug6815co9wc; ; xn--n3b542bb085j.xn--3j9al95p; [B5, B6, P1, V5, V6] # à¥.꥓
-xn--n3b542bb085j.xn--3j9al95p; á…Ÿñ™¯ à¥.꥓ðª¤; [B5, B6, V5, V6]; xn--n3b542bb085j.xn--3j9al95p; ; ; # à¥.꥓
-xn--n3b542bb085j.xn--1ug6815co9wc; á…Ÿñ™¯ à¥.â€ê¥“ðª¤; [B1, C2, V6]; xn--n3b542bb085j.xn--1ug6815co9wc; ; ; # à¥.꥓
-򌋔󠆎󠆗𑲕。≮; 򌋔𑲕.≮; [P1, V6]; xn--4m3dv4354a.xn--gdh; ; ; # 𑲕.≮
-򌋔󠆎󠆗𑲕。≮; 򌋔𑲕.≮; [P1, V6]; xn--4m3dv4354a.xn--gdh; ; ; # 𑲕.≮
+xn--1ch6704g.xn--0ug3840g51u4g; ð¹¥â‰ .ð‹²ó § \u200C; [B1, C1, V6]; xn--1ch6704g.xn--0ug3840g51u4g; ; ; # ð¹¥â‰ .ð‹²
+\u115Fñ™¯ \u094D.\u200D\uA953ðª¤; \u115Fñ™¯ \u094D.\u200D\uA953ðª¤; [B1, C2, V6]; xn--n3b542bb085j.xn--1ug6815co9wc; ; xn--n3b542bb085j.xn--3j9al95p; [B5, B6, V5, V6] # à¥.꥓
+\u115Fñ™¯ \u094D.\u200D\uA953ðª¤; ; [B1, C2, V6]; xn--n3b542bb085j.xn--1ug6815co9wc; ; xn--n3b542bb085j.xn--3j9al95p; [B5, B6, V5, V6] # à¥.꥓
+xn--n3b542bb085j.xn--3j9al95p; \u115Fñ™¯ \u094D.\uA953ðª¤; [B5, B6, V5, V6]; xn--n3b542bb085j.xn--3j9al95p; ; ; # à¥.꥓
+xn--n3b542bb085j.xn--1ug6815co9wc; \u115Fñ™¯ \u094D.\u200D\uA953ðª¤; [B1, C2, V6]; xn--n3b542bb085j.xn--1ug6815co9wc; ; ; # à¥.꥓
+򌋔󠆎󠆗𑲕。≮; 򌋔𑲕.≮; [V6]; xn--4m3dv4354a.xn--gdh; ; ; # 𑲕.≮
+򌋔󠆎󠆗𑲕。<\u0338; 򌋔𑲕.≮; [V6]; xn--4m3dv4354a.xn--gdh; ; ; # 𑲕.≮
xn--4m3dv4354a.xn--gdh; 򌋔𑲕.≮; [V6]; xn--4m3dv4354a.xn--gdh; ; ; # 𑲕.≮
-󠆦.ࣣ暀≠; .ࣣ暀≠; [P1, V5, V6, X4_2]; .xn--m0b461k3g2c; [P1, V5, V6, A4_2]; ; # .ࣣ暀≠
-󠆦.ࣣ暀≠; .ࣣ暀≠; [P1, V5, V6, X4_2]; .xn--m0b461k3g2c; [P1, V5, V6, A4_2]; ; # .ࣣ暀≠
-.xn--m0b461k3g2c; .ࣣ暀≠; [V5, V6, X4_2]; .xn--m0b461k3g2c; [V5, V6, A4_2]; ; # .ࣣ暀≠
-ð¡¤ê¯­ï½¡ï´°òœ–…á·°; ð¡¤ê¯­.شمòœ–…á·°; [B2, B3, P1, V6]; xn--429ak76o.xn--zgb8a701kox37t; ; ; # ð¡¤ê¯­.شمᷰ
-ð¡¤ê¯­ã€‚شمòœ–…á·°; ð¡¤ê¯­.شمòœ–…á·°; [B2, B3, P1, V6]; xn--429ak76o.xn--zgb8a701kox37t; ; ; # ð¡¤ê¯­.شمᷰ
-xn--429ak76o.xn--zgb8a701kox37t; ð¡¤ê¯­.شمòœ–…á·°; [B2, B3, V6]; xn--429ak76o.xn--zgb8a701kox37t; ; ; # ð¡¤ê¯­.شمᷰ
-ð‰ƒâ€â’ˆï½¡á‚¬ðž±“; ð‰ƒâ€â’ˆ.Ⴌ𞱓; [B1, B5, B6, C2, P1, V5, V6]; xn--1ug68oq348b.xn--knd8464v; ; xn--tshz828m.xn--knd8464v; [B1, B5, B6, P1, V5, V6] # ð‰ƒâ’ˆ.Ⴌ
-ð‰ƒâ€1.。Ⴌ𞱓; ð‰ƒâ€1..Ⴌ𞱓; [B1, B5, B6, C2, P1, V5, V6, X4_2]; xn--1-tgn9827q..xn--knd8464v; [B1, B5, B6, C2, P1, V5, V6, A4_2]; xn--1-px8q..xn--knd8464v; [B1, B5, B6, P1, V5, V6, A4_2] # ð‰ƒ1..Ⴌ
-ð‰ƒâ€1.。ⴌ𞱓; ð‰ƒâ€1..ⴌ𞱓; [B1, B5, B6, C2, P1, V5, V6, X4_2]; xn--1-tgn9827q..xn--3kj4524l; [B1, B5, B6, C2, P1, V5, V6, A4_2]; xn--1-px8q..xn--3kj4524l; [B1, B5, B6, P1, V5, V6, A4_2] # ð‰ƒ1..â´Œ
+󠆦.\u08E3暀≠; .\u08E3暀≠; [V5, X4_2]; .xn--m0b461k3g2c; [V5, A4_2]; ; # .ࣣ暀≠
+󠆦.\u08E3暀=\u0338; .\u08E3暀≠; [V5, X4_2]; .xn--m0b461k3g2c; [V5, A4_2]; ; # .ࣣ暀≠
+.xn--m0b461k3g2c; .\u08E3暀≠; [V5, X4_2]; .xn--m0b461k3g2c; [V5, A4_2]; ; # .ࣣ暀≠
+ð¡¤\uABED。\uFD30òœ–…\u1DF0; ð¡¤\uABED.\u0634\u0645òœ–…\u1DF0; [B2, B3, V6]; xn--429ak76o.xn--zgb8a701kox37t; ; ; # ð¡¤ê¯­.شمᷰ
+ð¡¤\uABED。\u0634\u0645òœ–…\u1DF0; ð¡¤\uABED.\u0634\u0645òœ–…\u1DF0; [B2, B3, V6]; xn--429ak76o.xn--zgb8a701kox37t; ; ; # ð¡¤ê¯­.شمᷰ
+xn--429ak76o.xn--zgb8a701kox37t; ð¡¤\uABED.\u0634\u0645òœ–…\u1DF0; [B2, B3, V6]; xn--429ak76o.xn--zgb8a701kox37t; ; ; # ð¡¤ê¯­.شمᷰ
+ð‰ƒ\u200D⒈。Ⴌ𞱓; ð‰ƒ\u200Dâ’ˆ.Ⴌ𞱓; [B1, B5, B6, C2, V5, V6]; xn--1ug68oq348b.xn--knd8464v; ; xn--tshz828m.xn--knd8464v; [B1, B5, B6, V5, V6] # ð‰ƒâ’ˆ.Ⴌ
+ð‰ƒ\u200D1.。Ⴌ𞱓; ð‰ƒ\u200D1..Ⴌ𞱓; [B1, B5, B6, C2, V5, V6, X4_2]; xn--1-tgn9827q..xn--knd8464v; [B1, B5, B6, C2, V5, V6, A4_2]; xn--1-px8q..xn--knd8464v; [B1, B5, B6, V5, V6, A4_2] # ð‰ƒ1..Ⴌ
+ð‰ƒ\u200D1.。ⴌ𞱓; ð‰ƒ\u200D1..ⴌ𞱓; [B1, B5, B6, C2, V5, V6, X4_2]; xn--1-tgn9827q..xn--3kj4524l; [B1, B5, B6, C2, V5, V6, A4_2]; xn--1-px8q..xn--3kj4524l; [B1, B5, B6, V5, V6, A4_2] # ð‰ƒ1..â´Œ
xn--1-px8q..xn--3kj4524l; ð‰ƒ1..ⴌ𞱓; [B1, B5, B6, V5, V6, X4_2]; xn--1-px8q..xn--3kj4524l; [B1, B5, B6, V5, V6, A4_2]; ; # ð‰ƒ1..â´Œ
-xn--1-tgn9827q..xn--3kj4524l; ð‰ƒâ€1..ⴌ𞱓; [B1, B5, B6, C2, V5, V6, X4_2]; xn--1-tgn9827q..xn--3kj4524l; [B1, B5, B6, C2, V5, V6, A4_2]; ; # ð‰ƒ1..â´Œ
+xn--1-tgn9827q..xn--3kj4524l; ð‰ƒ\u200D1..ⴌ𞱓; [B1, B5, B6, C2, V5, V6, X4_2]; xn--1-tgn9827q..xn--3kj4524l; [B1, B5, B6, C2, V5, V6, A4_2]; ; # ð‰ƒ1..â´Œ
xn--1-px8q..xn--knd8464v; ð‰ƒ1..Ⴌ𞱓; [B1, B5, B6, V5, V6, X4_2]; xn--1-px8q..xn--knd8464v; [B1, B5, B6, V5, V6, A4_2]; ; # ð‰ƒ1..Ⴌ
-xn--1-tgn9827q..xn--knd8464v; ð‰ƒâ€1..Ⴌ𞱓; [B1, B5, B6, C2, V5, V6, X4_2]; xn--1-tgn9827q..xn--knd8464v; [B1, B5, B6, C2, V5, V6, A4_2]; ; # ð‰ƒ1..Ⴌ
-ð‰ƒâ€â’ˆï½¡â´Œðž±“; ð‰ƒâ€â’ˆ.ⴌ𞱓; [B1, B5, B6, C2, P1, V5, V6]; xn--1ug68oq348b.xn--3kj4524l; ; xn--tshz828m.xn--3kj4524l; [B1, B5, B6, P1, V5, V6] # ð‰ƒâ’ˆ.â´Œ
+xn--1-tgn9827q..xn--knd8464v; ð‰ƒ\u200D1..Ⴌ𞱓; [B1, B5, B6, C2, V5, V6, X4_2]; xn--1-tgn9827q..xn--knd8464v; [B1, B5, B6, C2, V5, V6, A4_2]; ; # ð‰ƒ1..Ⴌ
+ð‰ƒ\u200D⒈。ⴌ𞱓; ð‰ƒ\u200Dâ’ˆ.ⴌ𞱓; [B1, B5, B6, C2, V5, V6]; xn--1ug68oq348b.xn--3kj4524l; ; xn--tshz828m.xn--3kj4524l; [B1, B5, B6, V5, V6] # ð‰ƒâ’ˆ.â´Œ
xn--tshz828m.xn--3kj4524l; ð‰ƒâ’ˆ.ⴌ𞱓; [B1, B5, B6, V5, V6]; xn--tshz828m.xn--3kj4524l; ; ; # ð‰ƒâ’ˆ.â´Œ
-xn--1ug68oq348b.xn--3kj4524l; ð‰ƒâ€â’ˆ.ⴌ𞱓; [B1, B5, B6, C2, V5, V6]; xn--1ug68oq348b.xn--3kj4524l; ; ; # ð‰ƒâ’ˆ.â´Œ
+xn--1ug68oq348b.xn--3kj4524l; ð‰ƒ\u200Dâ’ˆ.ⴌ𞱓; [B1, B5, B6, C2, V5, V6]; xn--1ug68oq348b.xn--3kj4524l; ; ; # ð‰ƒâ’ˆ.â´Œ
xn--tshz828m.xn--knd8464v; ð‰ƒâ’ˆ.Ⴌ𞱓; [B1, B5, B6, V5, V6]; xn--tshz828m.xn--knd8464v; ; ; # ð‰ƒâ’ˆ.Ⴌ
-xn--1ug68oq348b.xn--knd8464v; ð‰ƒâ€â’ˆ.Ⴌ𞱓; [B1, B5, B6, C2, V5, V6]; xn--1ug68oq348b.xn--knd8464v; ; ; # ð‰ƒâ’ˆ.Ⴌ
-ó £™à©ð±«˜ðž¤¸.Ï‚ñµ¯žôˆ°”; ; [B1, P1, V6]; xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; ; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; # à©ðž¤¸.Ï‚
-ó £™à©ð±«˜ðž¤–.Σñµ¯žôˆ°”; ó £™à©ð±«˜ðž¤¸.σñµ¯žôˆ°”; [B1, P1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # à©ðž¤¸.σ
-ó £™à©ð±«˜ðž¤¸.σñµ¯žôˆ°”; ; [B1, P1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # à©ðž¤¸.σ
-ó £™à©ð±«˜ðž¤–.σñµ¯žôˆ°”; ó £™à©ð±«˜ðž¤¸.σñµ¯žôˆ°”; [B1, P1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # à©ðž¤¸.σ
-xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ó £™à©ð±«˜ðž¤¸.σñµ¯žôˆ°”; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # à©ðž¤¸.σ
-ó £™à©ð±«˜ðž¤–.Ï‚ñµ¯žôˆ°”; ó £™à©ð±«˜ðž¤¸.Ï‚ñµ¯žôˆ°”; [B1, P1, V6]; xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; ; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; # à©ðž¤¸.Ï‚
-xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; ó £™à©ð±«˜ðž¤¸.Ï‚ñµ¯žôˆ°”; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; ; ; # à©ðž¤¸.Ï‚
-ó £™à©ð±«˜ðž¤¸.Σñµ¯žôˆ°”; ó £™à©ð±«˜ðž¤¸.σñµ¯žôˆ°”; [B1, P1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # à©ðž¤¸.σ
-ߓ。‌ð«€òž­±; ß“.‌ð«€òž­±; [B1, C1, P1, V6]; xn--usb.xn--0ug9553gm3v5d; ; xn--usb.xn--pw9ci1099a; [B2, B3, P1, V6] # ß“.ð«€
-xn--usb.xn--pw9ci1099a; ß“.ð«€òž­±; [B2, B3, V6]; xn--usb.xn--pw9ci1099a; ; ; # ß“.ð«€
-xn--usb.xn--0ug9553gm3v5d; ß“.‌ð«€òž­±; [B1, C1, V6]; xn--usb.xn--0ug9553gm3v5d; ; ; # ß“.ð«€
-á°®ðž€.֦ꡟ𞤕󠆖; á°®ðž€.֦ꡟ𞤷; [B1, B3, B6, V5]; xn--q1f4493q.xn--xcb8244fifvj; ; ; # á°®ðž€.֦ꡟ𞤷
-á°®ðž€.֦ꡟ𞤷󠆖; á°®ðž€.֦ꡟ𞤷; [B1, B3, B6, V5]; xn--q1f4493q.xn--xcb8244fifvj; ; ; # á°®ðž€.֦ꡟ𞤷
-xn--q1f4493q.xn--xcb8244fifvj; á°®ðž€.֦ꡟ𞤷; [B1, B3, B6, V5]; xn--q1f4493q.xn--xcb8244fifvj; ; ; # á°®ðž€.֦ꡟ𞤷
-䂹󾖅ð‹¦ï¼Žâ€; 䂹󾖅ð‹¦.â€; [C2, P1, V6]; xn--0on3543c5981i.xn--1ug; ; xn--0on3543c5981i.; [P1, V6] # 䂹ð‹¦.
-䂹󾖅ð‹¦.â€; ; [C2, P1, V6]; xn--0on3543c5981i.xn--1ug; ; xn--0on3543c5981i.; [P1, V6] # 䂹ð‹¦.
+xn--1ug68oq348b.xn--knd8464v; ð‰ƒ\u200Dâ’ˆ.Ⴌ𞱓; [B1, B5, B6, C2, V5, V6]; xn--1ug68oq348b.xn--knd8464v; ; ; # ð‰ƒâ’ˆ.Ⴌ
+ó £™\u0A4D𱫘𞤸.Ï‚ñµ¯žôˆ°”; ; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; ; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; # à©ð±«˜ðž¤¸.Ï‚
+ó £™\u0A4D𱫘𞤖.Σñµ¯žôˆ°”; ó £™\u0A4D𱫘𞤸.σñµ¯žôˆ°”; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # à©ð±«˜ðž¤¸.σ
+ó £™\u0A4D𱫘𞤸.σñµ¯žôˆ°”; ; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # à©ð±«˜ðž¤¸.σ
+ó £™\u0A4D𱫘𞤖.σñµ¯žôˆ°”; ó £™\u0A4D𱫘𞤸.σñµ¯žôˆ°”; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # à©ð±«˜ðž¤¸.σ
+xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ó £™\u0A4D𱫘𞤸.σñµ¯žôˆ°”; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # à©ð±«˜ðž¤¸.σ
+ó £™\u0A4D𱫘𞤖.Ï‚ñµ¯žôˆ°”; ó £™\u0A4D𱫘𞤸.Ï‚ñµ¯žôˆ°”; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; ; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; # à©ð±«˜ðž¤¸.Ï‚
+xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; ó £™\u0A4D𱫘𞤸.Ï‚ñµ¯žôˆ°”; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--3xa03737giye6b; ; ; # à©ð±«˜ðž¤¸.Ï‚
+ó £™\u0A4D𱫘𞤸.Σñµ¯žôˆ°”; ó £™\u0A4D𱫘𞤸.σñµ¯žôˆ°”; [B1, V6]; xn--ybc0236vjvxgt5q0g.xn--4xa82737giye6b; ; ; # à©ð±«˜ðž¤¸.σ
+\u07D3。\u200Cð«€òž­±; \u07D3.\u200Cð«€òž­±; [B1, C1, V6]; xn--usb.xn--0ug9553gm3v5d; ; xn--usb.xn--pw9ci1099a; [B2, B3, V6] # ß“.ð«€
+xn--usb.xn--pw9ci1099a; \u07D3.ð«€òž­±; [B2, B3, V6]; xn--usb.xn--pw9ci1099a; ; ; # ß“.ð«€
+xn--usb.xn--0ug9553gm3v5d; \u07D3.\u200Cð«€òž­±; [B1, C1, V6]; xn--usb.xn--0ug9553gm3v5d; ; ; # ß“.ð«€
+\u1C2Eðž€.\u05A6ꡟ𞤕󠆖; \u1C2Eðž€.\u05A6ꡟ𞤷; [B1, V5]; xn--q1f4493q.xn--xcb8244fifvj; ; ; # á°®ðž€.֦ꡟ𞤷
+\u1C2Eðž€.\u05A6ꡟ𞤷󠆖; \u1C2Eðž€.\u05A6ꡟ𞤷; [B1, V5]; xn--q1f4493q.xn--xcb8244fifvj; ; ; # á°®ðž€.֦ꡟ𞤷
+xn--q1f4493q.xn--xcb8244fifvj; \u1C2Eðž€.\u05A6ꡟ𞤷; [B1, V5]; xn--q1f4493q.xn--xcb8244fifvj; ; ; # á°®ðž€.֦ꡟ𞤷
+䂹󾖅ð‹¦ï¼Ž\u200D; 䂹󾖅ð‹¦.\u200D; [C2, V6]; xn--0on3543c5981i.xn--1ug; ; xn--0on3543c5981i.; [V6] # 䂹ð‹¦.
+䂹󾖅ð‹¦.\u200D; ; [C2, V6]; xn--0on3543c5981i.xn--1ug; ; xn--0on3543c5981i.; [V6] # 䂹ð‹¦.
xn--0on3543c5981i.; 䂹󾖅ð‹¦.; [V6]; xn--0on3543c5981i.; ; ; # 䂹ð‹¦.
-xn--0on3543c5981i.xn--1ug; 䂹󾖅ð‹¦.â€; [C2, V6]; xn--0on3543c5981i.xn--1ug; ; ; # 䂹ð‹¦.
-꧀‌ð¹²â€Œï½¡Ý§ðŸ„‰; ꧀‌ð¹²â€Œ.ݧ🄉; [B5, B6, C1, P1, V5, V6]; xn--0uga8686hdgvd.xn--rpb6081w; ; xn--7m9an32q.xn--rpb6081w; [B5, B6, P1, V5, V6] # ꧀ð¹².ݧ🄉
-꧀‌ð¹²â€Œã€‚ݧ8,; ꧀‌ð¹²â€Œ.ݧ8,; [B3, B5, B6, C1, P1, V5, V6]; xn--0uga8686hdgvd.xn--8,-qle; ; xn--7m9an32q.xn--8,-qle; [B3, B5, B6, P1, V5, V6] # ꧀ð¹².ݧ8,
-xn--7m9an32q.xn--8,-qle; ꧀ð¹².ݧ8,; [B3, B5, B6, P1, V5, V6]; xn--7m9an32q.xn--8,-qle; ; ; # ꧀ð¹².ݧ8,
-xn--0uga8686hdgvd.xn--8,-qle; ꧀‌ð¹²â€Œ.ݧ8,; [B3, B5, B6, C1, P1, V5, V6]; xn--0uga8686hdgvd.xn--8,-qle; ; ; # ꧀ð¹².ݧ8,
-xn--7m9an32q.xn--rpb6081w; ꧀ð¹².ݧ🄉; [B5, B6, V5, V6]; xn--7m9an32q.xn--rpb6081w; ; ; # ꧀ð¹².ݧ🄉
-xn--0uga8686hdgvd.xn--rpb6081w; ꧀‌ð¹²â€Œ.ݧ🄉; [B5, B6, C1, V5, V6]; xn--0uga8686hdgvd.xn--rpb6081w; ; ; # ꧀ð¹².ݧ🄉
-︒。Ⴃ≯; ︒.Ⴃ≯; [P1, V6]; xn--y86c.xn--bnd622g; ; ; # ︒.Ⴃ≯
-︒。Ⴃ≯; ︒.Ⴃ≯; [P1, V6]; xn--y86c.xn--bnd622g; ; ; # ︒.Ⴃ≯
-。。Ⴃ≯; ..Ⴃ≯; [P1, V6, X4_2]; ..xn--bnd622g; [P1, V6, A4_2]; ; # ..Ⴃ≯
-。。Ⴃ≯; ..Ⴃ≯; [P1, V6, X4_2]; ..xn--bnd622g; [P1, V6, A4_2]; ; # ..Ⴃ≯
-。。ⴃ≯; ..ⴃ≯; [P1, V6, X4_2]; ..xn--hdh782b; [P1, V6, A4_2]; ; # ..ⴃ≯
-。。ⴃ≯; ..ⴃ≯; [P1, V6, X4_2]; ..xn--hdh782b; [P1, V6, A4_2]; ; # ..ⴃ≯
-..xn--hdh782b; ..ⴃ≯; [V6, X4_2]; ..xn--hdh782b; [V6, A4_2]; ; # ..ⴃ≯
+xn--0on3543c5981i.xn--1ug; 䂹󾖅ð‹¦.\u200D; [C2, V6]; xn--0on3543c5981i.xn--1ug; ; ; # 䂹ð‹¦.
+\uA9C0\u200Cð¹²\u200C。\u0767🄉; \uA9C0\u200Cð¹²\u200C.\u0767🄉; [B5, B6, C1, V5, V6]; xn--0uga8686hdgvd.xn--rpb6081w; ; xn--7m9an32q.xn--rpb6081w; [B5, B6, V5, V6] # ꧀ð¹².ݧ🄉
+\uA9C0\u200Cð¹²\u200C。\u07678,; \uA9C0\u200Cð¹²\u200C.\u07678,; [B3, B5, B6, C1, V5, V6]; xn--0uga8686hdgvd.xn--8,-qle; ; xn--7m9an32q.xn--8,-qle; [B3, B5, B6, V5, V6] # ꧀ð¹².ݧ8,
+xn--7m9an32q.xn--8,-qle; \uA9C0ð¹².\u07678,; [B3, B5, B6, V5, V6]; xn--7m9an32q.xn--8,-qle; ; ; # ꧀ð¹².ݧ8,
+xn--0uga8686hdgvd.xn--8,-qle; \uA9C0\u200Cð¹²\u200C.\u07678,; [B3, B5, B6, C1, V5, V6]; xn--0uga8686hdgvd.xn--8,-qle; ; ; # ꧀ð¹².ݧ8,
+xn--7m9an32q.xn--rpb6081w; \uA9C0ð¹².\u0767🄉; [B5, B6, V5, V6]; xn--7m9an32q.xn--rpb6081w; ; ; # ꧀ð¹².ݧ🄉
+xn--0uga8686hdgvd.xn--rpb6081w; \uA9C0\u200Cð¹²\u200C.\u0767🄉; [B5, B6, C1, V5, V6]; xn--0uga8686hdgvd.xn--rpb6081w; ; ; # ꧀ð¹².ݧ🄉
+︒。Ⴃ≯; ︒.Ⴃ≯; [V6]; xn--y86c.xn--bnd622g; ; ; # ︒.Ⴃ≯
+︒。Ⴃ>\u0338; ︒.Ⴃ≯; [V6]; xn--y86c.xn--bnd622g; ; ; # ︒.Ⴃ≯
+。。Ⴃ≯; ..Ⴃ≯; [V6, X4_2]; ..xn--bnd622g; [V6, A4_2]; ; # ..Ⴃ≯
+。。Ⴃ>\u0338; ..Ⴃ≯; [V6, X4_2]; ..xn--bnd622g; [V6, A4_2]; ; # ..Ⴃ≯
+。。ⴃ>\u0338; ..ⴃ≯; [X4_2]; ..xn--hdh782b; [A4_2]; ; # ..ⴃ≯
+。。ⴃ≯; ..ⴃ≯; [X4_2]; ..xn--hdh782b; [A4_2]; ; # ..ⴃ≯
+..xn--hdh782b; ..ⴃ≯; [X4_2]; ..xn--hdh782b; [A4_2]; ; # ..ⴃ≯
..xn--bnd622g; ..Ⴃ≯; [V6, X4_2]; ..xn--bnd622g; [V6, A4_2]; ; # ..Ⴃ≯
-︒。ⴃ≯; ︒.ⴃ≯; [P1, V6]; xn--y86c.xn--hdh782b; ; ; # ︒.ⴃ≯
-︒。ⴃ≯; ︒.ⴃ≯; [P1, V6]; xn--y86c.xn--hdh782b; ; ; # ︒.ⴃ≯
+︒。ⴃ>\u0338; ︒.ⴃ≯; [V6]; xn--y86c.xn--hdh782b; ; ; # ︒.ⴃ≯
+︒。ⴃ≯; ︒.ⴃ≯; [V6]; xn--y86c.xn--hdh782b; ; ; # ︒.ⴃ≯
xn--y86c.xn--hdh782b; ︒.ⴃ≯; [V6]; xn--y86c.xn--hdh782b; ; ; # ︒.ⴃ≯
xn--y86c.xn--bnd622g; ︒.Ⴃ≯; [V6]; xn--y86c.xn--bnd622g; ; ; # ︒.Ⴃ≯
-ð¹®ï½¡ó ¢¼â€; ð¹®.ó ¢¼â€; [B1, C2, P1, V6]; xn--mo0d.xn--1ug18431l; ; xn--mo0d.xn--wy46e; [B1, P1, V6] # ð¹®.
-ð¹®ã€‚ó ¢¼â€; ð¹®.ó ¢¼â€; [B1, C2, P1, V6]; xn--mo0d.xn--1ug18431l; ; xn--mo0d.xn--wy46e; [B1, P1, V6] # ð¹®.
+ð¹®ï½¡ó ¢¼\u200D; ð¹®.ó ¢¼\u200D; [B1, C2, V6]; xn--mo0d.xn--1ug18431l; ; xn--mo0d.xn--wy46e; [B1, V6] # ð¹®.
+ð¹®ã€‚ó ¢¼\u200D; ð¹®.ó ¢¼\u200D; [B1, C2, V6]; xn--mo0d.xn--1ug18431l; ; xn--mo0d.xn--wy46e; [B1, V6] # ð¹®.
xn--mo0d.xn--wy46e; ð¹®.ó ¢¼; [B1, V6]; xn--mo0d.xn--wy46e; ; ; # ð¹®.
-xn--mo0d.xn--1ug18431l; ð¹®.ó ¢¼â€; [B1, C2, V6]; xn--mo0d.xn--1ug18431l; ; ; # ð¹®.
-Ⴞð¹¨ï½¡ï¸’ݽâ€á‚¯; Ⴞð¹¨.︒ݽâ€á‚¯; [B1, B5, B6, C2, P1, V6]; xn--2nd0990k.xn--eqb228bgzmvp0t; ; xn--2nd0990k.xn--eqb228b583r; [B1, B5, B6, P1, V6] # Ⴞð¹¨.︒ݽႯ
-Ⴞð¹¨ã€‚。ݽâ€á‚¯; Ⴞð¹¨..ݽâ€á‚¯; [B2, B3, B5, B6, C2, P1, V6, X4_2]; xn--2nd0990k..xn--eqb228bgzm; [B2, B3, B5, B6, C2, P1, V6, A4_2]; xn--2nd0990k..xn--eqb228b; [B2, B3, B5, B6, P1, V6, A4_2] # Ⴞð¹¨..ݽႯ
-â´žð¹¨ã€‚。ݽâ€â´; â´žð¹¨..ݽâ€â´; [B2, B3, B5, B6, C2, X4_2]; xn--mlju223e..xn--eqb096jpgj; [B2, B3, B5, B6, C2, A4_2]; xn--mlju223e..xn--eqb053q; [B2, B3, B5, B6, A4_2] # â´žð¹¨..ݽâ´
-Ⴞð¹¨ã€‚。ݽâ€â´; Ⴞð¹¨..ݽâ€â´; [B2, B3, B5, B6, C2, P1, V6, X4_2]; xn--2nd0990k..xn--eqb096jpgj; [B2, B3, B5, B6, C2, P1, V6, A4_2]; xn--2nd0990k..xn--eqb053q; [B2, B3, B5, B6, P1, V6, A4_2] # Ⴞð¹¨..ݽâ´
-xn--2nd0990k..xn--eqb053q; Ⴞð¹¨..ݽâ´; [B2, B3, B5, B6, V6, X4_2]; xn--2nd0990k..xn--eqb053q; [B2, B3, B5, B6, V6, A4_2]; ; # Ⴞð¹¨..ݽâ´
-xn--2nd0990k..xn--eqb096jpgj; Ⴞð¹¨..ݽâ€â´; [B2, B3, B5, B6, C2, V6, X4_2]; xn--2nd0990k..xn--eqb096jpgj; [B2, B3, B5, B6, C2, V6, A4_2]; ; # Ⴞð¹¨..ݽâ´
-xn--mlju223e..xn--eqb053q; â´žð¹¨..ݽâ´; [B2, B3, B5, B6, X4_2]; xn--mlju223e..xn--eqb053q; [B2, B3, B5, B6, A4_2]; ; # â´žð¹¨..ݽâ´
-xn--mlju223e..xn--eqb096jpgj; â´žð¹¨..ݽâ€â´; [B2, B3, B5, B6, C2, X4_2]; xn--mlju223e..xn--eqb096jpgj; [B2, B3, B5, B6, C2, A4_2]; ; # â´žð¹¨..ݽâ´
-xn--2nd0990k..xn--eqb228b; Ⴞð¹¨..ݽႯ; [B2, B3, B5, B6, V6, X4_2]; xn--2nd0990k..xn--eqb228b; [B2, B3, B5, B6, V6, A4_2]; ; # Ⴞð¹¨..ݽႯ
-xn--2nd0990k..xn--eqb228bgzm; Ⴞð¹¨..ݽâ€á‚¯; [B2, B3, B5, B6, C2, V6, X4_2]; xn--2nd0990k..xn--eqb228bgzm; [B2, B3, B5, B6, C2, V6, A4_2]; ; # Ⴞð¹¨..ݽႯ
-â´žð¹¨ï½¡ï¸’ݽâ€â´; â´žð¹¨.︒ݽâ€â´; [B1, B5, B6, C2, P1, V6]; xn--mlju223e.xn--eqb096jpgj9y7r; ; xn--mlju223e.xn--eqb053qjk7l; [B1, B5, B6, P1, V6] # â´žð¹¨.︒ݽâ´
-Ⴞð¹¨ï½¡ï¸’ݽâ€â´; Ⴞð¹¨.︒ݽâ€â´; [B1, B5, B6, C2, P1, V6]; xn--2nd0990k.xn--eqb096jpgj9y7r; ; xn--2nd0990k.xn--eqb053qjk7l; [B1, B5, B6, P1, V6] # Ⴞð¹¨.︒ݽâ´
-xn--2nd0990k.xn--eqb053qjk7l; Ⴞð¹¨.︒ݽâ´; [B1, B5, B6, V6]; xn--2nd0990k.xn--eqb053qjk7l; ; ; # Ⴞð¹¨.︒ݽâ´
-xn--2nd0990k.xn--eqb096jpgj9y7r; Ⴞð¹¨.︒ݽâ€â´; [B1, B5, B6, C2, V6]; xn--2nd0990k.xn--eqb096jpgj9y7r; ; ; # Ⴞð¹¨.︒ݽâ´
-xn--mlju223e.xn--eqb053qjk7l; â´žð¹¨.︒ݽâ´; [B1, B5, B6, V6]; xn--mlju223e.xn--eqb053qjk7l; ; ; # â´žð¹¨.︒ݽâ´
-xn--mlju223e.xn--eqb096jpgj9y7r; â´žð¹¨.︒ݽâ€â´; [B1, B5, B6, C2, V6]; xn--mlju223e.xn--eqb096jpgj9y7r; ; ; # â´žð¹¨.︒ݽâ´
-xn--2nd0990k.xn--eqb228b583r; Ⴞð¹¨.︒ݽႯ; [B1, B5, B6, V6]; xn--2nd0990k.xn--eqb228b583r; ; ; # Ⴞð¹¨.︒ݽႯ
-xn--2nd0990k.xn--eqb228bgzmvp0t; Ⴞð¹¨.︒ݽâ€á‚¯; [B1, B5, B6, C2, V6]; xn--2nd0990k.xn--eqb228bgzmvp0t; ; ; # Ⴞð¹¨.︒ݽႯ
-‌ႦðŸ¹ã€‚-⃒-ß‘; ‌Ⴆ3.-⃒-ß‘; [B1, C1, P1, V3, V6]; xn--3-i0g939i.xn-----vue617w; ; xn--3-i0g.xn-----vue617w; [B1, P1, V3, V6] # Ⴆ3.-⃒-ß‘
-‌Ⴆ3。-⃒-ߑ; ‌Ⴆ3.-⃒-ߑ; [B1, C1, P1, V3, V6]; xn--3-i0g939i.xn-----vue617w; ; xn--3-i0g.xn-----vue617w; [B1, P1, V3, V6] # Ⴆ3.-⃒-ߑ
-‌ⴆ3。-⃒-ߑ; ‌ⴆ3.-⃒-ߑ; [B1, C1, V3]; xn--3-rgnv99c.xn-----vue617w; ; xn--3-lvs.xn-----vue617w; [B1, V3] # ⴆ3.-⃒-ߑ
-xn--3-lvs.xn-----vue617w; ⴆ3.-⃒-ߑ; [B1, V3]; xn--3-lvs.xn-----vue617w; ; ; # ⴆ3.-⃒-ߑ
-xn--3-rgnv99c.xn-----vue617w; ‌ⴆ3.-⃒-ߑ; [B1, C1, V3]; xn--3-rgnv99c.xn-----vue617w; ; ; # ⴆ3.-⃒-ߑ
-xn--3-i0g.xn-----vue617w; Ⴆ3.-⃒-ߑ; [B1, V3, V6]; xn--3-i0g.xn-----vue617w; ; ; # Ⴆ3.-⃒-ߑ
-xn--3-i0g939i.xn-----vue617w; ‌Ⴆ3.-⃒-ߑ; [B1, C1, V3, V6]; xn--3-i0g939i.xn-----vue617w; ; ; # Ⴆ3.-⃒-ߑ
-‌ⴆðŸ¹ã€‚-⃒-ß‘; ‌ⴆ3.-⃒-ß‘; [B1, C1, V3]; xn--3-rgnv99c.xn-----vue617w; ; xn--3-lvs.xn-----vue617w; [B1, V3] # â´†3.-⃒-ß‘
-箃áƒ-ó ï½¡â‰ -🤖; 箃áƒ-ó .≠-🤖; [P1, V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃áƒ-.≠-🤖
-箃áƒ-ó ï½¡≠-🤖; 箃áƒ-ó .≠-🤖; [P1, V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃áƒ-.≠-🤖
-箃áƒ-ó ã€‚≠-🤖; 箃áƒ-ó .≠-🤖; [P1, V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃áƒ-.≠-🤖
-箃áƒ-ó ã€‚≠-🤖; 箃áƒ-ó .≠-🤖; [P1, V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃áƒ-.≠-🤖
-箃ⴡ-ó ã€‚≠-🤖; 箃ⴡ-ó .≠-🤖; [P1, V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖
-箃ⴡ-ó ã€‚≠-🤖; 箃ⴡ-ó .≠-🤖; [P1, V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖
+xn--mo0d.xn--1ug18431l; ð¹®.ó ¢¼\u200D; [B1, C2, V6]; xn--mo0d.xn--1ug18431l; ; ; # ð¹®.
+Ⴞð¹¨ï½¡ï¸’\u077D\u200DႯ; Ⴞð¹¨.︒\u077D\u200DႯ; [B1, B5, B6, C2, V6]; xn--2nd0990k.xn--eqb228bgzmvp0t; ; xn--2nd0990k.xn--eqb228b583r; [B1, B5, B6, V6] # Ⴞð¹¨.︒ݽႯ
+Ⴞð¹¨ã€‚。\u077D\u200DႯ; Ⴞð¹¨..\u077D\u200DႯ; [B2, B3, B5, B6, C2, V6, X4_2]; xn--2nd0990k..xn--eqb228bgzm; [B2, B3, B5, B6, C2, V6, A4_2]; xn--2nd0990k..xn--eqb228b; [B2, B3, B5, B6, V6, A4_2] # Ⴞð¹¨..ݽႯ
+â´žð¹¨ã€‚。\u077D\u200Dâ´; â´žð¹¨..\u077D\u200Dâ´; [B2, B3, B5, B6, C2, X4_2]; xn--mlju223e..xn--eqb096jpgj; [B2, B3, B5, B6, C2, A4_2]; xn--mlju223e..xn--eqb053q; [B2, B3, B5, B6, A4_2] # â´žð¹¨..ݽâ´
+Ⴞð¹¨ã€‚。\u077D\u200Dâ´; Ⴞð¹¨..\u077D\u200Dâ´; [B2, B3, B5, B6, C2, V6, X4_2]; xn--2nd0990k..xn--eqb096jpgj; [B2, B3, B5, B6, C2, V6, A4_2]; xn--2nd0990k..xn--eqb053q; [B2, B3, B5, B6, V6, A4_2] # Ⴞð¹¨..ݽâ´
+xn--2nd0990k..xn--eqb053q; Ⴞð¹¨..\u077Dâ´; [B2, B3, B5, B6, V6, X4_2]; xn--2nd0990k..xn--eqb053q; [B2, B3, B5, B6, V6, A4_2]; ; # Ⴞð¹¨..ݽâ´
+xn--2nd0990k..xn--eqb096jpgj; Ⴞð¹¨..\u077D\u200Dâ´; [B2, B3, B5, B6, C2, V6, X4_2]; xn--2nd0990k..xn--eqb096jpgj; [B2, B3, B5, B6, C2, V6, A4_2]; ; # Ⴞð¹¨..ݽâ´
+xn--mlju223e..xn--eqb053q; â´žð¹¨..\u077Dâ´; [B2, B3, B5, B6, X4_2]; xn--mlju223e..xn--eqb053q; [B2, B3, B5, B6, A4_2]; ; # â´žð¹¨..ݽâ´
+xn--mlju223e..xn--eqb096jpgj; â´žð¹¨..\u077D\u200Dâ´; [B2, B3, B5, B6, C2, X4_2]; xn--mlju223e..xn--eqb096jpgj; [B2, B3, B5, B6, C2, A4_2]; ; # â´žð¹¨..ݽâ´
+xn--2nd0990k..xn--eqb228b; Ⴞð¹¨..\u077DႯ; [B2, B3, B5, B6, V6, X4_2]; xn--2nd0990k..xn--eqb228b; [B2, B3, B5, B6, V6, A4_2]; ; # Ⴞð¹¨..ݽႯ
+xn--2nd0990k..xn--eqb228bgzm; Ⴞð¹¨..\u077D\u200DႯ; [B2, B3, B5, B6, C2, V6, X4_2]; xn--2nd0990k..xn--eqb228bgzm; [B2, B3, B5, B6, C2, V6, A4_2]; ; # Ⴞð¹¨..ݽႯ
+â´žð¹¨ï½¡ï¸’\u077D\u200Dâ´; â´žð¹¨.︒\u077D\u200Dâ´; [B1, B5, B6, C2, V6]; xn--mlju223e.xn--eqb096jpgj9y7r; ; xn--mlju223e.xn--eqb053qjk7l; [B1, B5, B6, V6] # â´žð¹¨.︒ݽâ´
+Ⴞð¹¨ï½¡ï¸’\u077D\u200Dâ´; Ⴞð¹¨.︒\u077D\u200Dâ´; [B1, B5, B6, C2, V6]; xn--2nd0990k.xn--eqb096jpgj9y7r; ; xn--2nd0990k.xn--eqb053qjk7l; [B1, B5, B6, V6] # Ⴞð¹¨.︒ݽâ´
+xn--2nd0990k.xn--eqb053qjk7l; Ⴞð¹¨.︒\u077Dâ´; [B1, B5, B6, V6]; xn--2nd0990k.xn--eqb053qjk7l; ; ; # Ⴞð¹¨.︒ݽâ´
+xn--2nd0990k.xn--eqb096jpgj9y7r; Ⴞð¹¨.︒\u077D\u200Dâ´; [B1, B5, B6, C2, V6]; xn--2nd0990k.xn--eqb096jpgj9y7r; ; ; # Ⴞð¹¨.︒ݽâ´
+xn--mlju223e.xn--eqb053qjk7l; â´žð¹¨.︒\u077Dâ´; [B1, B5, B6, V6]; xn--mlju223e.xn--eqb053qjk7l; ; ; # â´žð¹¨.︒ݽâ´
+xn--mlju223e.xn--eqb096jpgj9y7r; â´žð¹¨.︒\u077D\u200Dâ´; [B1, B5, B6, C2, V6]; xn--mlju223e.xn--eqb096jpgj9y7r; ; ; # â´žð¹¨.︒ݽâ´
+xn--2nd0990k.xn--eqb228b583r; Ⴞð¹¨.︒\u077DႯ; [B1, B5, B6, V6]; xn--2nd0990k.xn--eqb228b583r; ; ; # Ⴞð¹¨.︒ݽႯ
+xn--2nd0990k.xn--eqb228bgzmvp0t; Ⴞð¹¨.︒\u077D\u200DႯ; [B1, B5, B6, C2, V6]; xn--2nd0990k.xn--eqb228bgzmvp0t; ; ; # Ⴞð¹¨.︒ݽႯ
+\u200CႦðŸ¹ã€‚-\u20D2-\u07D1; \u200CႦ3.-\u20D2-\u07D1; [B1, C1, V3, V6]; xn--3-i0g939i.xn-----vue617w; ; xn--3-i0g.xn-----vue617w; [B1, V3, V6] # Ⴆ3.-⃒-ß‘
+\u200CႦ3。-\u20D2-\u07D1; \u200CႦ3.-\u20D2-\u07D1; [B1, C1, V3, V6]; xn--3-i0g939i.xn-----vue617w; ; xn--3-i0g.xn-----vue617w; [B1, V3, V6] # Ⴆ3.-⃒-ߑ
+\u200Cⴆ3。-\u20D2-\u07D1; \u200Cⴆ3.-\u20D2-\u07D1; [B1, C1, V3]; xn--3-rgnv99c.xn-----vue617w; ; xn--3-lvs.xn-----vue617w; [B1, V3] # ⴆ3.-⃒-ߑ
+xn--3-lvs.xn-----vue617w; ⴆ3.-\u20D2-\u07D1; [B1, V3]; xn--3-lvs.xn-----vue617w; ; ; # ⴆ3.-⃒-ߑ
+xn--3-rgnv99c.xn-----vue617w; \u200Cⴆ3.-\u20D2-\u07D1; [B1, C1, V3]; xn--3-rgnv99c.xn-----vue617w; ; ; # ⴆ3.-⃒-ߑ
+xn--3-i0g.xn-----vue617w; Ⴆ3.-\u20D2-\u07D1; [B1, V3, V6]; xn--3-i0g.xn-----vue617w; ; ; # Ⴆ3.-⃒-ߑ
+xn--3-i0g939i.xn-----vue617w; \u200CႦ3.-\u20D2-\u07D1; [B1, C1, V3, V6]; xn--3-i0g939i.xn-----vue617w; ; ; # Ⴆ3.-⃒-ߑ
+\u200Câ´†ðŸ¹ã€‚-\u20D2-\u07D1; \u200Câ´†3.-\u20D2-\u07D1; [B1, C1, V3]; xn--3-rgnv99c.xn-----vue617w; ; xn--3-lvs.xn-----vue617w; [B1, V3] # â´†3.-⃒-ß‘
+箃áƒ-ó ï½¡â‰ -🤖; 箃áƒ-ó .≠-🤖; [V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃áƒ-.≠-🤖
+箃áƒ-ó ï½¡=\u0338-🤖; 箃áƒ-ó .≠-🤖; [V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃áƒ-.≠-🤖
+箃áƒ-ó ã€‚≠-🤖; 箃áƒ-ó .≠-🤖; [V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃áƒ-.≠-🤖
+箃áƒ-ó ã€‚=\u0338-🤖; 箃áƒ-ó .≠-🤖; [V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃áƒ-.≠-🤖
+箃ⴡ-ó ã€‚=\u0338-🤖; 箃ⴡ-ó .≠-🤖; [V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖
+箃ⴡ-ó ã€‚≠-🤖; 箃ⴡ-ó .≠-🤖; [V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖
xn----4wsr321ay823p.xn----tfot873s; 箃ⴡ-ó .≠-🤖; [V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖
xn----11g3013fy8x5m.xn----tfot873s; 箃áƒ-ó .≠-🤖; [V6]; xn----11g3013fy8x5m.xn----tfot873s; ; ; # 箃áƒ-.≠-🤖
-箃ⴡ-ó ï½¡≠-🤖; 箃ⴡ-ó .≠-🤖; [P1, V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖
-箃ⴡ-ó ï½¡â‰ -🤖; 箃ⴡ-ó .≠-🤖; [P1, V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖
-ߥ.ڵ; ; ; xn--dtb.xn--okb; ; ; # ߥ.ڵ
-xn--dtb.xn--okb; ߥ.ڵ; ; xn--dtb.xn--okb; ; ; # ߥ.ڵ
-‌â€.𞤿; ; [B1, C1, C2]; xn--0ugc.xn--3e6h; ; .xn--3e6h; [A4_2] # .𞤿
-‌â€.ðž¤; ‌â€.𞤿; [B1, C1, C2]; xn--0ugc.xn--3e6h; ; .xn--3e6h; [A4_2] # .𞤿
+箃ⴡ-ó ï½¡=\u0338-🤖; 箃ⴡ-ó .≠-🤖; [V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖
+箃ⴡ-ó ï½¡â‰ -🤖; 箃ⴡ-ó .≠-🤖; [V6]; xn----4wsr321ay823p.xn----tfot873s; ; ; # 箃ⴡ-.≠-🤖
+\u07E5.\u06B5; ; ; xn--dtb.xn--okb; ; ; # ߥ.ڵ
+xn--dtb.xn--okb; \u07E5.\u06B5; ; xn--dtb.xn--okb; ; ; # ߥ.ڵ
+\u200C\u200D.𞤿; ; [B1, C1, C2]; xn--0ugc.xn--3e6h; ; .xn--3e6h; [A4_2] # .𞤿
+\u200C\u200D.ðž¤; \u200C\u200D.𞤿; [B1, C1, C2]; xn--0ugc.xn--3e6h; ; .xn--3e6h; [A4_2] # .𞤿
.xn--3e6h; .𞤿; [X4_2]; .xn--3e6h; [A4_2]; ; # .𞤿
-xn--0ugc.xn--3e6h; ‌â€.𞤿; [B1, C1, C2]; xn--0ugc.xn--3e6h; ; ; # .𞤿
+xn--0ugc.xn--3e6h; \u200C\u200D.𞤿; [B1, C1, C2]; xn--0ugc.xn--3e6h; ; ; # .𞤿
xn--3e6h; 𞤿; ; xn--3e6h; ; ; # 𞤿
𞤿; ; ; xn--3e6h; ; ; # 𞤿
ðž¤; 𞤿; ; xn--3e6h; ; ; # 𞤿
-🜑ð¹§Ø¹.Ï‚ð‘蜹; ; [B1]; xn--4gb3736kk4zf.xn--3xa4248dy27d; ; xn--4gb3736kk4zf.xn--4xa2248dy27d; # 🜑ð¹§Ø¹.Ï‚ð‘蜹
-🜑ð¹§Ø¹.Σð‘蜹; 🜑ð¹§Ø¹.σð‘蜹; [B1]; xn--4gb3736kk4zf.xn--4xa2248dy27d; ; ; # 🜑ð¹§Ø¹.σð‘蜹
-🜑ð¹§Ø¹.σð‘蜹; ; [B1]; xn--4gb3736kk4zf.xn--4xa2248dy27d; ; ; # 🜑ð¹§Ø¹.σð‘蜹
-xn--4gb3736kk4zf.xn--4xa2248dy27d; 🜑ð¹§Ø¹.σð‘蜹; [B1]; xn--4gb3736kk4zf.xn--4xa2248dy27d; ; ; # 🜑ð¹§Ø¹.σð‘蜹
-xn--4gb3736kk4zf.xn--3xa4248dy27d; 🜑ð¹§Ø¹.Ï‚ð‘蜹; [B1]; xn--4gb3736kk4zf.xn--3xa4248dy27d; ; ; # 🜑ð¹§Ø¹.Ï‚ð‘蜹
-ò« ã‚¹ô†Ÿ¤Ù©ï¼ŽóšƒŸ; ò« ã‚¹ô†Ÿ¤Ù©.󚃟; [B5, B6, P1, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩.
-ò« ã‚¹ô†Ÿ¤Ù©.󚃟; ; [B5, B6, P1, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩.
-xn--iib777sp230oo708a.xn--7824e; ò« ã‚¹ô†Ÿ¤Ù©.󚃟; [B5, B6, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩.
-ðª£ò•¡ï¼ŽÖš?Û‚; ðª£ò•¡.Öš?Û‚; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
-ðª£ò•¡ï¼ŽÖš?ÛÙ”; ðª£ò•¡.Öš?Û‚; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
-ðª£ò•¡.Öš?Û‚; ; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
-ðª£ò•¡.Öš?ÛÙ”; ðª£ò•¡.Öš?Û‚; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
-xn--8c3hu7971a.xn--?-wec30g; ðª£ò•¡.Öš?Û‚; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
-xn--8c3hu7971a.Öš?Û‚; ðª£ò•¡.Öš?Û‚; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
-xn--8c3hu7971a.Öš?ÛÙ”; ðª£ò•¡.Öš?Û‚; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
-XN--8C3HU7971A.Öš?ÛÙ”; ðª£ò•¡.Öš?Û‚; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
-XN--8C3HU7971A.Öš?Û‚; ðª£ò•¡.Öš?Û‚; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
-Xn--8c3hu7971a.Öš?Û‚; ðª£ò•¡.Öš?Û‚; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
-Xn--8c3hu7971a.Öš?ÛÙ”; ðª£ò•¡.Öš?Û‚; [B1, P1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
-٠򪓵‌。ݗ; ٠򪓵‌.ݗ; [B1, C1, P1, V6]; xn--8hb852ke991q.xn--bpb; ; xn--8hb82030l.xn--bpb; [B1, P1, V6] # ٠.ݗ
-xn--8hb82030l.xn--bpb; ٠򪓵.ݗ; [B1, V6]; xn--8hb82030l.xn--bpb; ; ; # ٠.ݗ
-xn--8hb852ke991q.xn--bpb; ٠򪓵‌.ݗ; [B1, C1, V6]; xn--8hb852ke991q.xn--bpb; ; ; # ٠.ݗ
-်â€â€Œã€‚-‌; ်â€â€Œ.-‌; [C1, V3, V5]; xn--bkd412fca.xn----sgn; ; xn--bkd.-; [V3, V5] # ်.-
-xn--bkd.-; ်.-; [V3, V5]; xn--bkd.-; ; ; # ်.-
-xn--bkd412fca.xn----sgn; ်â€â€Œ.-‌; [C1, V3, V5]; xn--bkd412fca.xn----sgn; ; ; # ်.-
-︒。᭄ᡉ; ︒.᭄ᡉ; [P1, V5, V6]; xn--y86c.xn--87e93m; ; ; # ︒.᭄ᡉ
-。。᭄ᡉ; ..᭄ᡉ; [V5, X4_2]; ..xn--87e93m; [V5, A4_2]; ; # ..᭄ᡉ
-..xn--87e93m; ..᭄ᡉ; [V5, X4_2]; ..xn--87e93m; [V5, A4_2]; ; # ..᭄ᡉ
-xn--y86c.xn--87e93m; ︒.᭄ᡉ; [V5, V6]; xn--y86c.xn--87e93m; ; ; # ︒.᭄ᡉ
-ݘß。ጫᢊݨðŸ; ݘß.ጫᢊݨ2; [B2, B3, B5]; xn--zca724a.xn--2-b5c641gfmf; ; xn--ss-gke.xn--2-b5c641gfmf; # ݘß.ጫᢊݨ2
-ݘß。ጫᢊݨ2; ݘß.ጫᢊݨ2; [B2, B3, B5]; xn--zca724a.xn--2-b5c641gfmf; ; xn--ss-gke.xn--2-b5c641gfmf; # ݘß.ጫᢊݨ2
-ݘSS。ጫᢊݨ2; ݘss.ጫᢊݨ2; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
-ݘss。ጫᢊݨ2; ݘss.ጫᢊݨ2; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
-xn--ss-gke.xn--2-b5c641gfmf; ݘss.ጫᢊݨ2; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
-xn--zca724a.xn--2-b5c641gfmf; ݘß.ጫᢊݨ2; [B2, B3, B5]; xn--zca724a.xn--2-b5c641gfmf; ; ; # ݘß.ጫᢊݨ2
-ݘSS。ጫᢊݨðŸ; ݘss.ጫᢊݨ2; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
-ݘss。ጫᢊݨðŸ; ݘss.ጫᢊݨ2; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
-ݘSs。ጫᢊݨ2; ݘss.ጫᢊݨ2; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
-ݘSs。ጫᢊݨðŸ; ݘss.ጫᢊݨ2; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
-߃𞶇ᚲ.ं͓ðŸšà§; ߃𞶇ᚲ.ं͓2à§; [B1, B2, B3, P1, V5, V6]; xn--esb067enh07a.xn--2-lgb874bjxa; ; ; # ߃ᚲ.ं͓2à§
-߃𞶇ᚲ.ं͓2à§; ; [B1, B2, B3, P1, V5, V6]; xn--esb067enh07a.xn--2-lgb874bjxa; ; ; # ߃ᚲ.ं͓2à§
-xn--esb067enh07a.xn--2-lgb874bjxa; ߃𞶇ᚲ.ं͓2à§; [B1, B2, B3, V5, V6]; xn--esb067enh07a.xn--2-lgb874bjxa; ; ; # ߃ᚲ.ं͓2à§
--᮫︒â€.ñ’¶ˆñ¥¹“; ; [C2, P1, V3, V6]; xn----qmlv7tw180a.xn--x50zy803a; ; xn----qml1407i.xn--x50zy803a; [P1, V3, V6] # -᮫︒.
--᮫。â€.ñ’¶ˆñ¥¹“; -᮫.â€.ñ’¶ˆñ¥¹“; [C2, P1, V3, V6]; xn----qml.xn--1ug.xn--x50zy803a; ; xn----qml..xn--x50zy803a; [P1, V3, V6, A4_2] # -᮫..
-xn----qml..xn--x50zy803a; -᮫..񒶈񥹓; [V3, V6, X4_2]; xn----qml..xn--x50zy803a; [V3, V6, A4_2]; ; # -᮫..
-xn----qml.xn--1ug.xn--x50zy803a; -᮫.â€.ñ’¶ˆñ¥¹“; [C2, V3, V6]; xn----qml.xn--1ug.xn--x50zy803a; ; ; # -᮫..
-xn----qml1407i.xn--x50zy803a; -᮫︒.񒶈񥹓; [V3, V6]; xn----qml1407i.xn--x50zy803a; ; ; # -᮫︒.
-xn----qmlv7tw180a.xn--x50zy803a; -᮫︒â€.ñ’¶ˆñ¥¹“; [C2, V3, V6]; xn----qmlv7tw180a.xn--x50zy803a; ; ; # -᮫︒.
-󠦮.≯𞀆; ; [P1, V6]; xn--t546e.xn--hdh5166o; ; ; # .≯𞀆
-󠦮.≯𞀆; 󠦮.≯𞀆; [P1, V6]; xn--t546e.xn--hdh5166o; ; ; # .≯𞀆
+🜑ð¹§\u0639.Ï‚ð‘蜹; ; [B1]; xn--4gb3736kk4zf.xn--3xa4248dy27d; ; xn--4gb3736kk4zf.xn--4xa2248dy27d; # 🜑ð¹§Ø¹.Ï‚ð‘蜹
+🜑ð¹§\u0639.Σð‘蜹; 🜑ð¹§\u0639.σð‘蜹; [B1]; xn--4gb3736kk4zf.xn--4xa2248dy27d; ; ; # 🜑ð¹§Ø¹.σð‘蜹
+🜑ð¹§\u0639.σð‘蜹; ; [B1]; xn--4gb3736kk4zf.xn--4xa2248dy27d; ; ; # 🜑ð¹§Ø¹.σð‘蜹
+xn--4gb3736kk4zf.xn--4xa2248dy27d; 🜑ð¹§\u0639.σð‘蜹; [B1]; xn--4gb3736kk4zf.xn--4xa2248dy27d; ; ; # 🜑ð¹§Ø¹.σð‘蜹
+xn--4gb3736kk4zf.xn--3xa4248dy27d; 🜑ð¹§\u0639.Ï‚ð‘蜹; [B1]; xn--4gb3736kk4zf.xn--3xa4248dy27d; ; ; # 🜑ð¹§Ø¹.Ï‚ð‘蜹
+ò« ã‚¹ô†Ÿ¤\u0669.󚃟; ò« ã‚¹ô†Ÿ¤\u0669.󚃟; [B5, B6, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩.
+ò« ã‚¹ô†Ÿ¤\u0669.󚃟; ; [B5, B6, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩.
+xn--iib777sp230oo708a.xn--7824e; ò« ã‚¹ô†Ÿ¤\u0669.󚃟; [B5, B6, V6]; xn--iib777sp230oo708a.xn--7824e; ; ; # ス٩.
+ðª£ò•¡ï¼Ž\u059A?\u06C2; ðª£ò•¡.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
+ðª£ò•¡ï¼Ž\u059A?\u06C1\u0654; ðª£ò•¡.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
+ðª£ò•¡.\u059A?\u06C2; ; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
+ðª£ò•¡.\u059A?\u06C1\u0654; ðª£ò•¡.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
+xn--8c3hu7971a.xn--?-wec30g; ðª£ò•¡.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
+xn--8c3hu7971a.\u059A?\u06C2; ðª£ò•¡.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
+xn--8c3hu7971a.\u059A?\u06C1\u0654; ðª£ò•¡.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
+XN--8C3HU7971A.\u059A?\u06C1\u0654; ðª£ò•¡.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
+XN--8C3HU7971A.\u059A?\u06C2; ðª£ò•¡.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
+Xn--8c3hu7971a.\u059A?\u06C2; ðª£ò•¡.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
+Xn--8c3hu7971a.\u059A?\u06C1\u0654; ðª£ò•¡.\u059A?\u06C2; [B1, V5, V6]; xn--8c3hu7971a.xn--?-wec30g; ; ; # ðª£.Öš?Û‚
+\u0660򪓵\u200C。\u0757; \u0660򪓵\u200C.\u0757; [B1, C1, V6]; xn--8hb852ke991q.xn--bpb; ; xn--8hb82030l.xn--bpb; [B1, V6] # ٠.ݗ
+xn--8hb82030l.xn--bpb; \u0660򪓵.\u0757; [B1, V6]; xn--8hb82030l.xn--bpb; ; ; # ٠.ݗ
+xn--8hb852ke991q.xn--bpb; \u0660򪓵\u200C.\u0757; [B1, C1, V6]; xn--8hb852ke991q.xn--bpb; ; ; # ٠.ݗ
+\u103A\u200D\u200C。-\u200C; \u103A\u200D\u200C.-\u200C; [C1, V3, V5]; xn--bkd412fca.xn----sgn; ; xn--bkd.-; [V3, V5] # ်.-
+xn--bkd.-; \u103A.-; [V3, V5]; xn--bkd.-; ; ; # ်.-
+xn--bkd412fca.xn----sgn; \u103A\u200D\u200C.-\u200C; [C1, V3, V5]; xn--bkd412fca.xn----sgn; ; ; # ်.-
+︒。\u1B44ᡉ; ︒.\u1B44ᡉ; [V5, V6]; xn--y86c.xn--87e93m; ; ; # ︒.᭄ᡉ
+。。\u1B44ᡉ; ..\u1B44ᡉ; [V5, X4_2]; ..xn--87e93m; [V5, A4_2]; ; # ..᭄ᡉ
+..xn--87e93m; ..\u1B44ᡉ; [V5, X4_2]; ..xn--87e93m; [V5, A4_2]; ; # ..᭄ᡉ
+xn--y86c.xn--87e93m; ︒.\u1B44ᡉ; [V5, V6]; xn--y86c.xn--87e93m; ; ; # ︒.᭄ᡉ
+\u0758ß。ጫᢊ\u0768ðŸ; \u0758ß.ጫᢊ\u07682; [B2, B3, B5]; xn--zca724a.xn--2-b5c641gfmf; ; xn--ss-gke.xn--2-b5c641gfmf; # ݘß.ጫᢊݨ2
+\u0758ß。ጫᢊ\u07682; \u0758ß.ጫᢊ\u07682; [B2, B3, B5]; xn--zca724a.xn--2-b5c641gfmf; ; xn--ss-gke.xn--2-b5c641gfmf; # ݘß.ጫᢊݨ2
+\u0758SS。ጫᢊ\u07682; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
+\u0758ss。ጫᢊ\u07682; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
+xn--ss-gke.xn--2-b5c641gfmf; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
+xn--zca724a.xn--2-b5c641gfmf; \u0758ß.ጫᢊ\u07682; [B2, B3, B5]; xn--zca724a.xn--2-b5c641gfmf; ; ; # ݘß.ጫᢊݨ2
+\u0758SS。ጫᢊ\u0768ðŸ; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
+\u0758ss。ጫᢊ\u0768ðŸ; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
+\u0758Ss。ጫᢊ\u07682; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
+\u0758Ss。ጫᢊ\u0768ðŸ; \u0758ss.ጫᢊ\u07682; [B2, B3, B5]; xn--ss-gke.xn--2-b5c641gfmf; ; ; # ݘss.ጫᢊݨ2
+\u07C3𞶇ᚲ.\u0902\u0353ðŸš\u09CD; \u07C3𞶇ᚲ.\u0902\u03532\u09CD; [B1, B2, B3, V5, V6]; xn--esb067enh07a.xn--2-lgb874bjxa; ; ; # ߃ᚲ.ं͓2à§
+\u07C3𞶇ᚲ.\u0902\u03532\u09CD; ; [B1, B2, B3, V5, V6]; xn--esb067enh07a.xn--2-lgb874bjxa; ; ; # ߃ᚲ.ं͓2à§
+xn--esb067enh07a.xn--2-lgb874bjxa; \u07C3𞶇ᚲ.\u0902\u03532\u09CD; [B1, B2, B3, V5, V6]; xn--esb067enh07a.xn--2-lgb874bjxa; ; ; # ߃ᚲ.ं͓2à§
+-\u1BAB︒\u200D.񒶈񥹓; ; [C2, V3, V6]; xn----qmlv7tw180a.xn--x50zy803a; ; xn----qml1407i.xn--x50zy803a; [V3, V6] # -᮫︒.
+-\u1BAB。\u200D.񒶈񥹓; -\u1BAB.\u200D.񒶈񥹓; [C2, V3, V6]; xn----qml.xn--1ug.xn--x50zy803a; ; xn----qml..xn--x50zy803a; [V3, V6, A4_2] # -᮫..
+xn----qml..xn--x50zy803a; -\u1BAB..񒶈񥹓; [V3, V6, X4_2]; xn----qml..xn--x50zy803a; [V3, V6, A4_2]; ; # -᮫..
+xn----qml.xn--1ug.xn--x50zy803a; -\u1BAB.\u200D.񒶈񥹓; [C2, V3, V6]; xn----qml.xn--1ug.xn--x50zy803a; ; ; # -᮫..
+xn----qml1407i.xn--x50zy803a; -\u1BAB︒.񒶈񥹓; [V3, V6]; xn----qml1407i.xn--x50zy803a; ; ; # -᮫︒.
+xn----qmlv7tw180a.xn--x50zy803a; -\u1BAB︒\u200D.񒶈񥹓; [C2, V3, V6]; xn----qmlv7tw180a.xn--x50zy803a; ; ; # -᮫︒.
+󠦮.≯𞀆; ; [V6]; xn--t546e.xn--hdh5166o; ; ; # .≯𞀆
+󠦮.>\u0338𞀆; 󠦮.≯𞀆; [V6]; xn--t546e.xn--hdh5166o; ; ; # .≯𞀆
xn--t546e.xn--hdh5166o; 󠦮.≯𞀆; [V6]; xn--t546e.xn--hdh5166o; ; ; # .≯𞀆
--ð‘„³ó Š—ð¹©ã€‚ðž®±; -ð‘„³ó Š—ð¹©.ðž®±; [B1, P1, V3, V6]; xn----p26i72em2894c.xn--zw6h; ; ; # -ð‘„³ð¹©.
+-ð‘„³ó Š—ð¹©ã€‚ðž®±; -ð‘„³ó Š—ð¹©.ðž®±; [B1, V3, V6]; xn----p26i72em2894c.xn--zw6h; ; ; # -ð‘„³ð¹©.
xn----p26i72em2894c.xn--zw6h; -ð‘„³ó Š—ð¹©.ðž®±; [B1, V3, V6]; xn----p26i72em2894c.xn--zw6h; ; ; # -ð‘„³ð¹©.
-ڹ.ᡳᅟ; ڹ.ᡳᅟ; [P1, V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ
-ڹ.ᡳᅟ; ; [P1, V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ
-xn--skb.xn--osd737a; ڹ.ᡳᅟ; [V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ
-㨛𘱎.︒ðŸ•à´; 㨛𘱎.︒7à´; [P1, V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛𘱎.︒7à´
-㨛𘱎.。7à´; 㨛𘱎..7à´; [X4_2]; xn--mbm8237g..xn--7-7hf; [A4_2]; ; # 㨛𘱎..7à´
-xn--mbm8237g..xn--7-7hf; 㨛𘱎..7à´; [X4_2]; xn--mbm8237g..xn--7-7hf; [A4_2]; ; # 㨛𘱎..7à´
-xn--mbm8237g.xn--7-7hf1526p; 㨛𘱎.︒7à´; [V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛𘱎.︒7à´
-Û𻱧-。ðž·â¤ðž¤£â‰®; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
-Û𻱧-。ðž·â¤ðž¤£≮; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
-Û𻱧-。ðž·â¤ðž¤£â‰®; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
-Û𻱧-。ðž·â¤ðž¤£≮; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
-Û𻱧-。ðž·â¤ðž¤≮; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
-Û𻱧-。ðž·â¤ðž¤â‰®; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
-xn----dxc06304e.xn--gdh5020pk5c; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
-Û𻱧-。ðž·â¤ðž¤≮; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
-Û𻱧-。ðž·â¤ðž¤â‰®; Û𻱧-.ðž·ðž¤£â‰®; [B1, B3, P1, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
-ß‌꫶ᢥ.⊶áƒá‚¶; ß‌꫶ᢥ.⊶áƒá‚¶; [C1, P1, V6]; xn--zca682johfi89m.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ß꫶ᢥ.⊶áƒá‚¶
-ß‌꫶ᢥ.⊶áƒá‚¶; ; [C1, P1, V6]; xn--zca682johfi89m.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ß꫶ᢥ.⊶áƒá‚¶
-ß‌꫶ᢥ.⊶ⴡⴖ; ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ß꫶ᢥ.⊶ⴡⴖ
-SS‌꫶ᢥ.⊶áƒá‚¶; ss‌꫶ᢥ.⊶áƒá‚¶; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ss꫶ᢥ.⊶áƒá‚¶
-ss‌꫶ᢥ.⊶ⴡⴖ; ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ss꫶ᢥ.⊶ⴡⴖ
-Ss‌꫶ᢥ.⊶áƒâ´–; ss‌꫶ᢥ.⊶áƒâ´–; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; xn--ss-4epx629f.xn--5nd703gyrh; [P1, V6] # ss꫶ᢥ.⊶áƒâ´–
-xn--ss-4epx629f.xn--5nd703gyrh; ss꫶ᢥ.⊶áƒâ´–; [V6]; xn--ss-4epx629f.xn--5nd703gyrh; ; ; # ss꫶ᢥ.⊶áƒâ´–
-xn--ss-4ep585bkm5p.xn--5nd703gyrh; ss‌꫶ᢥ.⊶áƒâ´–; [C1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; ; # ss꫶ᢥ.⊶áƒâ´–
-xn--ss-4epx629f.xn--ifh802b6a; ss꫶ᢥ.⊶ⴡⴖ; ; xn--ss-4epx629f.xn--ifh802b6a; ; ; # ss꫶ᢥ.⊶ⴡⴖ
-ss꫶ᢥ.⊶ⴡⴖ; ; ; xn--ss-4epx629f.xn--ifh802b6a; ; ; # ss꫶ᢥ.⊶ⴡⴖ
-SS꫶ᢥ.⊶áƒá‚¶; ss꫶ᢥ.⊶áƒá‚¶; [P1, V6]; xn--ss-4epx629f.xn--undv409k; ; ; # ss꫶ᢥ.⊶áƒá‚¶
-Ss꫶ᢥ.⊶áƒâ´–; ss꫶ᢥ.⊶áƒâ´–; [P1, V6]; xn--ss-4epx629f.xn--5nd703gyrh; ; ; # ss꫶ᢥ.⊶áƒâ´–
-xn--ss-4epx629f.xn--undv409k; ss꫶ᢥ.⊶áƒá‚¶; [V6]; xn--ss-4epx629f.xn--undv409k; ; ; # ss꫶ᢥ.⊶áƒá‚¶
-xn--ss-4ep585bkm5p.xn--ifh802b6a; ss‌꫶ᢥ.⊶ⴡⴖ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; ; # ss꫶ᢥ.⊶ⴡⴖ
-xn--ss-4ep585bkm5p.xn--undv409k; ss‌꫶ᢥ.⊶áƒá‚¶; [C1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; ; # ss꫶ᢥ.⊶áƒá‚¶
-xn--zca682johfi89m.xn--ifh802b6a; ß‌꫶ᢥ.⊶ⴡⴖ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; ; # ß꫶ᢥ.⊶ⴡⴖ
-xn--zca682johfi89m.xn--undv409k; ß‌꫶ᢥ.⊶áƒá‚¶; [C1, V6]; xn--zca682johfi89m.xn--undv409k; ; ; # ß꫶ᢥ.⊶áƒá‚¶
-ß‌꫶ᢥ.⊶ⴡⴖ; ß‌꫶ᢥ.⊶ⴡⴖ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ß꫶ᢥ.⊶ⴡⴖ
-SS‌꫶ᢥ.⊶áƒá‚¶; ss‌꫶ᢥ.⊶áƒá‚¶; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [P1, V6] # ss꫶ᢥ.⊶áƒá‚¶
-ss‌꫶ᢥ.⊶ⴡⴖ; ss‌꫶ᢥ.⊶ⴡⴖ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ss꫶ᢥ.⊶ⴡⴖ
-Ss‌꫶ᢥ.⊶áƒâ´–; ss‌꫶ᢥ.⊶áƒâ´–; [C1, P1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; xn--ss-4epx629f.xn--5nd703gyrh; [P1, V6] # ss꫶ᢥ.⊶áƒâ´–
-â€ã€‚Ï‚ó ‰; â€.Ï‚ó ‰; [C2, P1, V6]; xn--1ug.xn--3xa44344p; ; .xn--4xa24344p; [P1, V6, A4_2] # .Ï‚
-â€ã€‚Σó ‰; â€.σó ‰; [C2, P1, V6]; xn--1ug.xn--4xa24344p; ; .xn--4xa24344p; [P1, V6, A4_2] # .σ
-â€ã€‚σó ‰; â€.σó ‰; [C2, P1, V6]; xn--1ug.xn--4xa24344p; ; .xn--4xa24344p; [P1, V6, A4_2] # .σ
+\u06B9.ᡳ\u115F; \u06B9.ᡳ\u115F; [V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ
+\u06B9.ᡳ\u115F; ; [V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ
+xn--skb.xn--osd737a; \u06B9.ᡳ\u115F; [V6]; xn--skb.xn--osd737a; ; ; # ڹ.ᡳ
+㨛𘱎.︒ðŸ•\u0D01; 㨛𘱎.︒7\u0D01; [V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛𘱎.︒7à´
+㨛𘱎.。7\u0D01; 㨛𘱎..7\u0D01; [X4_2]; xn--mbm8237g..xn--7-7hf; [A4_2]; ; # 㨛𘱎..7à´
+xn--mbm8237g..xn--7-7hf; 㨛𘱎..7\u0D01; [X4_2]; xn--mbm8237g..xn--7-7hf; [A4_2]; ; # 㨛𘱎..7à´
+xn--mbm8237g.xn--7-7hf1526p; 㨛𘱎.︒7\u0D01; [V6]; xn--mbm8237g.xn--7-7hf1526p; ; ; # 㨛𘱎.︒7à´
+\u06DD𻱧-。ðž·\u2064𞤣≮; \u06DD𻱧-.ðž·ðž¤£â‰®; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
+\u06DD𻱧-。ðž·\u2064𞤣<\u0338; \u06DD𻱧-.ðž·ðž¤£â‰®; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
+\u06DD𻱧-。ðž·\u2064𞤣≮; \u06DD𻱧-.ðž·ðž¤£â‰®; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
+\u06DD𻱧-。ðž·\u2064𞤣<\u0338; \u06DD𻱧-.ðž·ðž¤£â‰®; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
+\u06DD𻱧-。ðž·\u2064ðž¤<\u0338; \u06DD𻱧-.ðž·ðž¤£â‰®; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
+\u06DD𻱧-。ðž·\u2064ðž¤â‰®; \u06DD𻱧-.ðž·ðž¤£â‰®; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
+xn----dxc06304e.xn--gdh5020pk5c; \u06DD𻱧-.ðž·ðž¤£â‰®; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
+\u06DD𻱧-。ðž·\u2064ðž¤<\u0338; \u06DD𻱧-.ðž·ðž¤£â‰®; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
+\u06DD𻱧-。ðž·\u2064ðž¤â‰®; \u06DD𻱧-.ðž·ðž¤£â‰®; [B1, B3, V3, V6]; xn----dxc06304e.xn--gdh5020pk5c; ; ; # -.𞤣≮
+ß\u200C\uAAF6ᢥ.⊶áƒá‚¶; ß\u200C\uAAF6ᢥ.⊶áƒá‚¶; [C1, V6]; xn--zca682johfi89m.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [V6] # ß꫶ᢥ.⊶áƒá‚¶
+ß\u200C\uAAF6ᢥ.⊶áƒá‚¶; ; [C1, V6]; xn--zca682johfi89m.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [V6] # ß꫶ᢥ.⊶áƒá‚¶
+ß\u200C\uAAF6ᢥ.⊶ⴡⴖ; ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ß꫶ᢥ.⊶ⴡⴖ
+SS\u200C\uAAF6ᢥ.⊶áƒá‚¶; ss\u200C\uAAF6ᢥ.⊶áƒá‚¶; [C1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [V6] # ss꫶ᢥ.⊶áƒá‚¶
+ss\u200C\uAAF6ᢥ.⊶ⴡⴖ; ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ss꫶ᢥ.⊶ⴡⴖ
+Ss\u200C\uAAF6ᢥ.⊶áƒâ´–; ss\u200C\uAAF6ᢥ.⊶áƒâ´–; [C1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; xn--ss-4epx629f.xn--5nd703gyrh; [V6] # ss꫶ᢥ.⊶áƒâ´–
+xn--ss-4epx629f.xn--5nd703gyrh; ss\uAAF6ᢥ.⊶áƒâ´–; [V6]; xn--ss-4epx629f.xn--5nd703gyrh; ; ; # ss꫶ᢥ.⊶áƒâ´–
+xn--ss-4ep585bkm5p.xn--5nd703gyrh; ss\u200C\uAAF6ᢥ.⊶áƒâ´–; [C1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; ; # ss꫶ᢥ.⊶áƒâ´–
+xn--ss-4epx629f.xn--ifh802b6a; ss\uAAF6ᢥ.⊶ⴡⴖ; ; xn--ss-4epx629f.xn--ifh802b6a; ; ; # ss꫶ᢥ.⊶ⴡⴖ
+ss\uAAF6ᢥ.⊶ⴡⴖ; ; ; xn--ss-4epx629f.xn--ifh802b6a; ; ; # ss꫶ᢥ.⊶ⴡⴖ
+SS\uAAF6ᢥ.⊶áƒá‚¶; ss\uAAF6ᢥ.⊶áƒá‚¶; [V6]; xn--ss-4epx629f.xn--undv409k; ; ; # ss꫶ᢥ.⊶áƒá‚¶
+Ss\uAAF6ᢥ.⊶áƒâ´–; ss\uAAF6ᢥ.⊶áƒâ´–; [V6]; xn--ss-4epx629f.xn--5nd703gyrh; ; ; # ss꫶ᢥ.⊶áƒâ´–
+xn--ss-4epx629f.xn--undv409k; ss\uAAF6ᢥ.⊶áƒá‚¶; [V6]; xn--ss-4epx629f.xn--undv409k; ; ; # ss꫶ᢥ.⊶áƒá‚¶
+xn--ss-4ep585bkm5p.xn--ifh802b6a; ss\u200C\uAAF6ᢥ.⊶ⴡⴖ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; ; # ss꫶ᢥ.⊶ⴡⴖ
+xn--ss-4ep585bkm5p.xn--undv409k; ss\u200C\uAAF6ᢥ.⊶áƒá‚¶; [C1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; ; # ss꫶ᢥ.⊶áƒá‚¶
+xn--zca682johfi89m.xn--ifh802b6a; ß\u200C\uAAF6ᢥ.⊶ⴡⴖ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; ; # ß꫶ᢥ.⊶ⴡⴖ
+xn--zca682johfi89m.xn--undv409k; ß\u200C\uAAF6ᢥ.⊶áƒá‚¶; [C1, V6]; xn--zca682johfi89m.xn--undv409k; ; ; # ß꫶ᢥ.⊶áƒá‚¶
+ß\u200C\uAAF6ᢥ.⊶ⴡⴖ; ß\u200C\uAAF6ᢥ.⊶ⴡⴖ; [C1]; xn--zca682johfi89m.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ß꫶ᢥ.⊶ⴡⴖ
+SS\u200C\uAAF6ᢥ.⊶áƒá‚¶; ss\u200C\uAAF6ᢥ.⊶áƒá‚¶; [C1, V6]; xn--ss-4ep585bkm5p.xn--undv409k; ; xn--ss-4epx629f.xn--undv409k; [V6] # ss꫶ᢥ.⊶áƒá‚¶
+ss\u200C\uAAF6ᢥ.⊶ⴡⴖ; ss\u200C\uAAF6ᢥ.⊶ⴡⴖ; [C1]; xn--ss-4ep585bkm5p.xn--ifh802b6a; ; xn--ss-4epx629f.xn--ifh802b6a; [] # ss꫶ᢥ.⊶ⴡⴖ
+Ss\u200C\uAAF6ᢥ.⊶áƒâ´–; ss\u200C\uAAF6ᢥ.⊶áƒâ´–; [C1, V6]; xn--ss-4ep585bkm5p.xn--5nd703gyrh; ; xn--ss-4epx629f.xn--5nd703gyrh; [V6] # ss꫶ᢥ.⊶áƒâ´–
+\u200D。ςó ‰; \u200D.Ï‚ó ‰; [C2, V6]; xn--1ug.xn--3xa44344p; ; .xn--4xa24344p; [V6, A4_2] # .Ï‚
+\u200D。Σó ‰; \u200D.σó ‰; [C2, V6]; xn--1ug.xn--4xa24344p; ; .xn--4xa24344p; [V6, A4_2] # .σ
+\u200D。σó ‰; \u200D.σó ‰; [C2, V6]; xn--1ug.xn--4xa24344p; ; .xn--4xa24344p; [V6, A4_2] # .σ
.xn--4xa24344p; .σó ‰; [V6, X4_2]; .xn--4xa24344p; [V6, A4_2]; ; # .σ
-xn--1ug.xn--4xa24344p; â€.σó ‰; [C2, V6]; xn--1ug.xn--4xa24344p; ; ; # .σ
-xn--1ug.xn--3xa44344p; â€.Ï‚ó ‰; [C2, V6]; xn--1ug.xn--3xa44344p; ; ; # .Ï‚
-𞵑ß.Ý‘â€ðž¤›-; 𞵑ß.Ý‘â€ðž¤½-; [B2, B3, C2, P1, V3, V6]; xn--zca5423w.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, P1, V3, V6] # ß.ݑ𞤽-
-𞵑ß.Ý‘â€ðž¤½-; ; [B2, B3, C2, P1, V3, V6]; xn--zca5423w.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, P1, V3, V6] # ß.ݑ𞤽-
-𞵑SS.Ý‘â€ðž¤›-; 𞵑ss.Ý‘â€ðž¤½-; [B2, B3, C2, P1, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, P1, V3, V6] # ss.ݑ𞤽-
-𞵑ss.Ý‘â€ðž¤½-; ; [B2, B3, C2, P1, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, P1, V3, V6] # ss.ݑ𞤽-
-𞵑Ss.Ý‘â€ðž¤½-; 𞵑ss.Ý‘â€ðž¤½-; [B2, B3, C2, P1, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, P1, V3, V6] # ss.ݑ𞤽-
-xn--ss-2722a.xn----z3c03218a; 𞵑ss.ݑ𞤽-; [B2, B3, V3, V6]; xn--ss-2722a.xn----z3c03218a; ; ; # ss.ݑ𞤽-
-xn--ss-2722a.xn----z3c011q9513b; 𞵑ss.Ý‘â€ðž¤½-; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; ; # ss.ݑ𞤽-
-xn--zca5423w.xn----z3c011q9513b; 𞵑ß.Ý‘â€ðž¤½-; [B2, B3, C2, V3, V6]; xn--zca5423w.xn----z3c011q9513b; ; ; # ß.ݑ𞤽-
-𞵑ss.Ý‘â€ðž¤›-; 𞵑ss.Ý‘â€ðž¤½-; [B2, B3, C2, P1, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, P1, V3, V6] # ss.ݑ𞤽-
-𞵑Ss.Ý‘â€ðž¤›-; 𞵑ss.Ý‘â€ðž¤½-; [B2, B3, C2, P1, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, P1, V3, V6] # ss.ݑ𞤽-
-𑘽â€ðž¤§ï¼Žð¹§ó¡¦ª-; 𑘽â€ðž¤§.ð¹§ó¡¦ª-; [B1, C2, P1, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, P1, V3, V5, V6] # 𑘽𞤧.ð¹§-
-𑘽â€ðž¤§.ð¹§ó¡¦ª-; ; [B1, C2, P1, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, P1, V3, V5, V6] # 𑘽𞤧.ð¹§-
-𑘽â€ðž¤….ð¹§ó¡¦ª-; 𑘽â€ðž¤§.ð¹§ó¡¦ª-; [B1, C2, P1, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, P1, V3, V5, V6] # 𑘽𞤧.ð¹§-
+xn--1ug.xn--4xa24344p; \u200D.σó ‰; [C2, V6]; xn--1ug.xn--4xa24344p; ; ; # .σ
+xn--1ug.xn--3xa44344p; \u200D.Ï‚ó ‰; [C2, V6]; xn--1ug.xn--3xa44344p; ; ; # .Ï‚
+𞵑ß.\u0751\u200D𞤛-; 𞵑ß.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--zca5423w.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ß.ݑ𞤽-
+𞵑ß.\u0751\u200D𞤽-; ; [B2, B3, C2, V3, V6]; xn--zca5423w.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ß.ݑ𞤽-
+𞵑SS.\u0751\u200D𞤛-; 𞵑ss.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ss.ݑ𞤽-
+𞵑ss.\u0751\u200D𞤽-; ; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ss.ݑ𞤽-
+𞵑Ss.\u0751\u200D𞤽-; 𞵑ss.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ss.ݑ𞤽-
+xn--ss-2722a.xn----z3c03218a; 𞵑ss.\u0751𞤽-; [B2, B3, V3, V6]; xn--ss-2722a.xn----z3c03218a; ; ; # ss.ݑ𞤽-
+xn--ss-2722a.xn----z3c011q9513b; 𞵑ss.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; ; # ss.ݑ𞤽-
+xn--zca5423w.xn----z3c011q9513b; 𞵑ß.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--zca5423w.xn----z3c011q9513b; ; ; # ß.ݑ𞤽-
+𞵑ss.\u0751\u200D𞤛-; 𞵑ss.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ss.ݑ𞤽-
+𞵑Ss.\u0751\u200D𞤛-; 𞵑ss.\u0751\u200D𞤽-; [B2, B3, C2, V3, V6]; xn--ss-2722a.xn----z3c011q9513b; ; xn--ss-2722a.xn----z3c03218a; [B2, B3, V3, V6] # ss.ݑ𞤽-
+𑘽\u200D𞤧.ð¹§ó¡¦ª-; 𑘽\u200D𞤧.ð¹§ó¡¦ª-; [B1, C2, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, V3, V5, V6] # 𑘽𞤧.ð¹§-
+𑘽\u200D𞤧.ð¹§ó¡¦ª-; ; [B1, C2, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, V3, V5, V6] # 𑘽𞤧.ð¹§-
+𑘽\u200D𞤅.ð¹§ó¡¦ª-; 𑘽\u200D𞤧.ð¹§ó¡¦ª-; [B1, C2, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, V3, V5, V6] # 𑘽𞤧.ð¹§-
xn--qb2ds317a.xn----k26iq1483f; 𑘽𞤧.ð¹§ó¡¦ª-; [B1, V3, V5, V6]; xn--qb2ds317a.xn----k26iq1483f; ; ; # 𑘽𞤧.ð¹§-
-xn--1ugz808gdimf.xn----k26iq1483f; 𑘽â€ðž¤§.ð¹§ó¡¦ª-; [B1, C2, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; ; # 𑘽𞤧.ð¹§-
-𑘽â€ðž¤….ð¹§ó¡¦ª-; 𑘽â€ðž¤§.ð¹§ó¡¦ª-; [B1, C2, P1, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, P1, V3, V5, V6] # 𑘽𞤧.ð¹§-
-⒒򨘙򳳠𑓀.-󞡊; ; [P1, V3, V6]; xn--3shy698frsu9dt1me.xn----x310m; ; ; # ⒒𑓀.-
-11.򨘙򳳠𑓀.-󞡊; ; [P1, V3, V6]; 11.xn--uz1d59632bxujd.xn----x310m; ; ; # 11.𑓀.-
+xn--1ugz808gdimf.xn----k26iq1483f; 𑘽\u200D𞤧.ð¹§ó¡¦ª-; [B1, C2, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; ; # 𑘽𞤧.ð¹§-
+𑘽\u200D𞤅.ð¹§ó¡¦ª-; 𑘽\u200D𞤧.ð¹§ó¡¦ª-; [B1, C2, V3, V5, V6]; xn--1ugz808gdimf.xn----k26iq1483f; ; xn--qb2ds317a.xn----k26iq1483f; [B1, V3, V5, V6] # 𑘽𞤧.ð¹§-
+⒒򨘙򳳠𑓀.-󞡊; ; [V3, V6]; xn--3shy698frsu9dt1me.xn----x310m; ; ; # ⒒𑓀.-
+11.򨘙򳳠𑓀.-󞡊; ; [V3, V6]; 11.xn--uz1d59632bxujd.xn----x310m; ; ; # 11.𑓀.-
11.xn--uz1d59632bxujd.xn----x310m; 11.򨘙򳳠𑓀.-󞡊; [V3, V6]; 11.xn--uz1d59632bxujd.xn----x310m; ; ; # 11.𑓀.-
xn--3shy698frsu9dt1me.xn----x310m; ⒒򨘙򳳠𑓀.-󞡊; [V3, V6]; xn--3shy698frsu9dt1me.xn----x310m; ; ; # ⒒𑓀.-
--。â€; -.â€; [C2, V3]; -.xn--1ug; ; -.; [V3] # -.
--。â€; -.â€; [C2, V3]; -.xn--1ug; ; -.; [V3] # -.
+-。\u200D; -.\u200D; [C2, V3]; -.xn--1ug; ; -.; [V3] # -.
+-。\u200D; -.\u200D; [C2, V3]; -.xn--1ug; ; -.; [V3] # -.
-.; ; [V3]; ; ; ; # -.
--.xn--1ug; -.â€; [C2, V3]; -.xn--1ug; ; ; # -.
-≮ᡬ.ς¹-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
-≮ᡬ.ς¹-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
-≮ᡬ.ς1-?; ; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
-≮ᡬ.ς1-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
-≮ᡬ.Σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-≮ᡬ.Σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-≮ᡬ.σ1-?; ; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-≮ᡬ.σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-xn--88e732c.xn--1-?-pzc; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-xn--88e732c.xn--1-?-lzc; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; ; # ≮ᡬ.ς1-?
-≮ᡬ.Σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-≮ᡬ.Σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-≮ᡬ.σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-≮ᡬ.σ¹-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-xn--88e732c.σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-XN--88E732C.Σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-xn--88e732c.ς1-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
-Xn--88e732c.ς1-?; ≮ᡬ.ς1-?; [P1, V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
-Xn--88e732c.σ1-?; ≮ᡬ.σ1-?; [P1, V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
-ቬò” ¼ñ—¶ï½¡ð¨¬ðŸ ; ቬò” ¼ñ—¶.ð¨¬8; [P1, V6]; xn--d0d41273c887z.xn--8-ob5i; ; ; # ቬ.ð¨¬8
-ቬò” ¼ñ—¶ã€‚ð¨¬8; ቬò” ¼ñ—¶.ð¨¬8; [P1, V6]; xn--d0d41273c887z.xn--8-ob5i; ; ; # ቬ.ð¨¬8
+-.xn--1ug; -.\u200D; [C2, V3]; -.xn--1ug; ; ; # -.
+≮ᡬ.ς¹-?; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+<\u0338ᡬ.ς¹-?; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+≮ᡬ.ς1-?; ; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+<\u0338ᡬ.ς1-?; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+<\u0338ᡬ.Σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+≮ᡬ.Σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+≮ᡬ.σ1-?; ; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+<\u0338ᡬ.σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+xn--88e732c.xn--1-?-pzc; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+xn--88e732c.xn--1-?-lzc; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; ; # ≮ᡬ.ς1-?
+<\u0338ᡬ.Σ¹-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+≮ᡬ.Σ¹-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+≮ᡬ.σ¹-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+<\u0338ᡬ.σ¹-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+xn--88e732c.σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+XN--88E732C.Σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+xn--88e732c.ς1-?; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+Xn--88e732c.ς1-?; ≮ᡬ.ς1-?; [V6]; xn--88e732c.xn--1-?-lzc; ; xn--88e732c.xn--1-?-pzc; # ≮ᡬ.ς1-?
+Xn--88e732c.σ1-?; ≮ᡬ.σ1-?; [V6]; xn--88e732c.xn--1-?-pzc; ; ; # ≮ᡬ.σ1-?
+ቬò” ¼ñ—¶ï½¡ð¨¬ðŸ ; ቬò” ¼ñ—¶.ð¨¬8; [V6]; xn--d0d41273c887z.xn--8-ob5i; ; ; # ቬ.ð¨¬8
+ቬò” ¼ñ—¶ã€‚ð¨¬8; ቬò” ¼ñ—¶.ð¨¬8; [V6]; xn--d0d41273c887z.xn--8-ob5i; ; ; # ቬ.ð¨¬8
xn--d0d41273c887z.xn--8-ob5i; ቬò” ¼ñ—¶.ð¨¬8; [V6]; xn--d0d41273c887z.xn--8-ob5i; ; ; # ቬ.ð¨¬8
-ð±²ã€‚蔫ݦ; ð±².蔫ݦ; [B5, B6, P1, V6]; xn--389c.xn--qpb7055d; ; ; # .蔫ݦ
-xn--389c.xn--qpb7055d; ð±².蔫ݦ; [B5, B6, V6]; xn--389c.xn--qpb7055d; ; ; # .蔫ݦ
-򒲧₃。ꡚ𛇑󠄳ه; 򒲧3.ꡚ𛇑ه; [B5, B6, P1, V6]; xn--3-ep59g.xn--jhb5904fcp0h; ; ; # 3.ꡚ𛇑ه
-򒲧3。ꡚ𛇑󠄳ه; 򒲧3.ꡚ𛇑ه; [B5, B6, P1, V6]; xn--3-ep59g.xn--jhb5904fcp0h; ; ; # 3.ꡚ𛇑ه
-xn--3-ep59g.xn--jhb5904fcp0h; 򒲧3.ꡚ𛇑ه; [B5, B6, V6]; xn--3-ep59g.xn--jhb5904fcp0h; ; ; # 3.ꡚ𛇑ه
-蓸ق≠.ß; ; [B5, B6, P1, V6]; xn--ehb015lnt1e.xn--zca; ; xn--ehb015lnt1e.ss; # 蓸ق≠.ß
-蓸ق≠.ß; 蓸ق≠.ß; [B5, B6, P1, V6]; xn--ehb015lnt1e.xn--zca; ; xn--ehb015lnt1e.ss; # 蓸ق≠.ß
-蓸ق≠.SS; 蓸ق≠.ss; [B5, B6, P1, V6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
-蓸ق≠.SS; 蓸ق≠.ss; [B5, B6, P1, V6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
-蓸ق≠.ss; ; [B5, B6, P1, V6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
-蓸ق≠.ss; 蓸ق≠.ss; [B5, B6, P1, V6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
-蓸ق≠.Ss; 蓸ق≠.ss; [B5, B6, P1, V6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
-蓸ق≠.Ss; 蓸ق≠.ss; [B5, B6, P1, V6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
-xn--ehb015lnt1e.ss; 蓸ق≠.ss; [B5, B6, V6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
-xn--ehb015lnt1e.xn--zca; 蓸ق≠.ß; [B5, B6, V6]; xn--ehb015lnt1e.xn--zca; ; ; # 蓸ق≠.ß
-ࡎٺී⒊.ð¹¹ðž±©ó ƒªâ€Œ; ; [B1, C1, P1, V6]; xn--zib94gfziuq1a.xn--0ug3205g7eyf3c96h; ; xn--zib94gfziuq1a.xn--xo0dw109an237f; [B1, P1, V6] # ࡎٺී⒊.ð¹¹
-ࡎٺී3..ð¹¹ðž±©ó ƒªâ€Œ; ; [B1, C1, P1, V6, X4_2]; xn--3-prc71ls9j..xn--0ug3205g7eyf3c96h; [B1, C1, P1, V6, A4_2]; xn--3-prc71ls9j..xn--xo0dw109an237f; [B1, P1, V6, A4_2] # ࡎٺී3..ð¹¹
-xn--3-prc71ls9j..xn--xo0dw109an237f; ࡎٺී3..ð¹¹ðž±©ó ƒª; [B1, V6, X4_2]; xn--3-prc71ls9j..xn--xo0dw109an237f; [B1, V6, A4_2]; ; # ࡎٺී3..ð¹¹
-xn--3-prc71ls9j..xn--0ug3205g7eyf3c96h; ࡎٺී3..ð¹¹ðž±©ó ƒªâ€Œ; [B1, C1, V6, X4_2]; xn--3-prc71ls9j..xn--0ug3205g7eyf3c96h; [B1, C1, V6, A4_2]; ; # ࡎٺී3..ð¹¹
-xn--zib94gfziuq1a.xn--xo0dw109an237f; ࡎٺී⒊.ð¹¹ðž±©ó ƒª; [B1, V6]; xn--zib94gfziuq1a.xn--xo0dw109an237f; ; ; # ࡎٺී⒊.ð¹¹
-xn--zib94gfziuq1a.xn--0ug3205g7eyf3c96h; ࡎٺී⒊.ð¹¹ðž±©ó ƒªâ€Œ; [B1, C1, V6]; xn--zib94gfziuq1a.xn--0ug3205g7eyf3c96h; ; ; # ࡎٺී⒊.ð¹¹
-Ï‚â€-.Ⴣ𦟙; ; [C2, P1, V3, V6]; xn----xmb348s.xn--7nd64871a; ; xn----zmb.xn--7nd64871a; [P1, V3, V6] # Ï‚-.Ⴣ𦟙
-Ï‚â€-.ⴣ𦟙; ; [C2, V3]; xn----xmb348s.xn--rlj2573p; ; xn----zmb.xn--rlj2573p; [V3] # Ï‚-.ⴣ𦟙
-Σâ€-.Ⴣ𦟙; σâ€-.Ⴣ𦟙; [C2, P1, V3, V6]; xn----zmb048s.xn--7nd64871a; ; xn----zmb.xn--7nd64871a; [P1, V3, V6] # σ-.Ⴣ𦟙
-σâ€-.ⴣ𦟙; ; [C2, V3]; xn----zmb048s.xn--rlj2573p; ; xn----zmb.xn--rlj2573p; [V3] # σ-.ⴣ𦟙
+ð±²ã€‚蔫\u0766; ð±².蔫\u0766; [B5, B6, V6]; xn--389c.xn--qpb7055d; ; ; # .蔫ݦ
+xn--389c.xn--qpb7055d; ð±².蔫\u0766; [B5, B6, V6]; xn--389c.xn--qpb7055d; ; ; # .蔫ݦ
+򒲧₃。ꡚ𛇑󠄳\u0647; 򒲧3.ꡚ𛇑\u0647; [B5, B6, V6]; xn--3-ep59g.xn--jhb5904fcp0h; ; ; # 3.ꡚ𛇑ه
+򒲧3。ꡚ𛇑󠄳\u0647; 򒲧3.ꡚ𛇑\u0647; [B5, B6, V6]; xn--3-ep59g.xn--jhb5904fcp0h; ; ; # 3.ꡚ𛇑ه
+xn--3-ep59g.xn--jhb5904fcp0h; 򒲧3.ꡚ𛇑\u0647; [B5, B6, V6]; xn--3-ep59g.xn--jhb5904fcp0h; ; ; # 3.ꡚ𛇑ه
+蓸\u0642≠.ß; ; [B5, B6]; xn--ehb015lnt1e.xn--zca; ; xn--ehb015lnt1e.ss; # 蓸ق≠.ß
+蓸\u0642=\u0338.ß; 蓸\u0642≠.ß; [B5, B6]; xn--ehb015lnt1e.xn--zca; ; xn--ehb015lnt1e.ss; # 蓸ق≠.ß
+蓸\u0642=\u0338.SS; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
+蓸\u0642≠.SS; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
+蓸\u0642≠.ss; ; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
+蓸\u0642=\u0338.ss; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
+蓸\u0642=\u0338.Ss; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
+蓸\u0642≠.Ss; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
+xn--ehb015lnt1e.ss; 蓸\u0642≠.ss; [B5, B6]; xn--ehb015lnt1e.ss; ; ; # 蓸ق≠.ss
+xn--ehb015lnt1e.xn--zca; 蓸\u0642≠.ß; [B5, B6]; xn--ehb015lnt1e.xn--zca; ; ; # 蓸ق≠.ß
+\u084E\u067A\u0DD3â’Š.ð¹¹ðž±©ó ƒª\u200C; ; [B1, C1, V6]; xn--zib94gfziuq1a.xn--0ug3205g7eyf3c96h; ; xn--zib94gfziuq1a.xn--xo0dw109an237f; [B1, V6] # ࡎٺී⒊.ð¹¹
+\u084E\u067A\u0DD33..ð¹¹ðž±©ó ƒª\u200C; ; [B1, C1, V6, X4_2]; xn--3-prc71ls9j..xn--0ug3205g7eyf3c96h; [B1, C1, V6, A4_2]; xn--3-prc71ls9j..xn--xo0dw109an237f; [B1, V6, A4_2] # ࡎٺී3..ð¹¹
+xn--3-prc71ls9j..xn--xo0dw109an237f; \u084E\u067A\u0DD33..ð¹¹ðž±©ó ƒª; [B1, V6, X4_2]; xn--3-prc71ls9j..xn--xo0dw109an237f; [B1, V6, A4_2]; ; # ࡎٺී3..ð¹¹
+xn--3-prc71ls9j..xn--0ug3205g7eyf3c96h; \u084E\u067A\u0DD33..ð¹¹ðž±©ó ƒª\u200C; [B1, C1, V6, X4_2]; xn--3-prc71ls9j..xn--0ug3205g7eyf3c96h; [B1, C1, V6, A4_2]; ; # ࡎٺී3..ð¹¹
+xn--zib94gfziuq1a.xn--xo0dw109an237f; \u084E\u067A\u0DD3â’Š.ð¹¹ðž±©ó ƒª; [B1, V6]; xn--zib94gfziuq1a.xn--xo0dw109an237f; ; ; # ࡎٺී⒊.ð¹¹
+xn--zib94gfziuq1a.xn--0ug3205g7eyf3c96h; \u084E\u067A\u0DD3â’Š.ð¹¹ðž±©ó ƒª\u200C; [B1, C1, V6]; xn--zib94gfziuq1a.xn--0ug3205g7eyf3c96h; ; ; # ࡎٺී⒊.ð¹¹
+ς\u200D-.Ⴣ𦟙; ; [C2, V3, V6]; xn----xmb348s.xn--7nd64871a; ; xn----zmb.xn--7nd64871a; [V3, V6] # ς-.Ⴣ𦟙
+ς\u200D-.ⴣ𦟙; ; [C2, V3]; xn----xmb348s.xn--rlj2573p; ; xn----zmb.xn--rlj2573p; [V3] # ς-.ⴣ𦟙
+Σ\u200D-.Ⴣ𦟙; σ\u200D-.Ⴣ𦟙; [C2, V3, V6]; xn----zmb048s.xn--7nd64871a; ; xn----zmb.xn--7nd64871a; [V3, V6] # σ-.Ⴣ𦟙
+σ\u200D-.ⴣ𦟙; ; [C2, V3]; xn----zmb048s.xn--rlj2573p; ; xn----zmb.xn--rlj2573p; [V3] # σ-.ⴣ𦟙
xn----zmb.xn--rlj2573p; σ-.ⴣ𦟙; [V3]; xn----zmb.xn--rlj2573p; ; ; # σ-.ⴣ𦟙
-xn----zmb048s.xn--rlj2573p; σâ€-.ⴣ𦟙; [C2, V3]; xn----zmb048s.xn--rlj2573p; ; ; # σ-.ⴣ𦟙
+xn----zmb048s.xn--rlj2573p; σ\u200D-.ⴣ𦟙; [C2, V3]; xn----zmb048s.xn--rlj2573p; ; ; # σ-.ⴣ𦟙
xn----zmb.xn--7nd64871a; σ-.Ⴣ𦟙; [V3, V6]; xn----zmb.xn--7nd64871a; ; ; # σ-.Ⴣ𦟙
-xn----zmb048s.xn--7nd64871a; σâ€-.Ⴣ𦟙; [C2, V3, V6]; xn----zmb048s.xn--7nd64871a; ; ; # σ-.Ⴣ𦟙
-xn----xmb348s.xn--rlj2573p; Ï‚â€-.ⴣ𦟙; [C2, V3]; xn----xmb348s.xn--rlj2573p; ; ; # Ï‚-.ⴣ𦟙
-xn----xmb348s.xn--7nd64871a; Ï‚â€-.Ⴣ𦟙; [C2, V3, V6]; xn----xmb348s.xn--7nd64871a; ; ; # Ï‚-.Ⴣ𦟙
-≠。🞳ðŸ²; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
-≠。🞳ðŸ²; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
-≠。🞳6; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
-≠。🞳6; ≠.🞳6; [P1, V6]; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
-xn--1ch.xn--6-dl4s; ≠.🞳6; [V6]; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
-󅬽.蠔; ; [P1, V6]; xn--g747d.xn--xl2a; ; ; # .蠔
+xn----zmb048s.xn--7nd64871a; σ\u200D-.Ⴣ𦟙; [C2, V3, V6]; xn----zmb048s.xn--7nd64871a; ; ; # σ-.Ⴣ𦟙
+xn----xmb348s.xn--rlj2573p; ς\u200D-.ⴣ𦟙; [C2, V3]; xn----xmb348s.xn--rlj2573p; ; ; # ς-.ⴣ𦟙
+xn----xmb348s.xn--7nd64871a; ς\u200D-.Ⴣ𦟙; [C2, V3, V6]; xn----xmb348s.xn--7nd64871a; ; ; # ς-.Ⴣ𦟙
+≠。🞳ðŸ²; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
+=\u0338。🞳ðŸ²; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
+≠。🞳6; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
+=\u0338。🞳6; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
+xn--1ch.xn--6-dl4s; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
+≠.🞳6; ; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
+=\u0338.🞳6; ≠.🞳6; ; xn--1ch.xn--6-dl4s; ; ; # ≠.🞳6
+󅬽.蠔; ; [V6]; xn--g747d.xn--xl2a; ; ; # .蠔
xn--g747d.xn--xl2a; 󅬽.蠔; [V6]; xn--g747d.xn--xl2a; ; ; # .蠔
-ࣦâ€ï¼Žë¼½; ࣦâ€.ë¼½; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.ë¼½
-ࣦâ€ï¼Žá„ˆá…¨á‡€; ࣦâ€.ë¼½; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.ë¼½
-ࣦâ€.ë¼½; ; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.ë¼½
-ࣦâ€.뼽; ࣦâ€.ë¼½; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.ë¼½
-xn--p0b.xn--e43b; ࣦ.뼽; [V5]; xn--p0b.xn--e43b; ; ; # ࣦ.뼽
-xn--p0b869i.xn--e43b; ࣦâ€.ë¼½; [C2, V5]; xn--p0b869i.xn--e43b; ; ; # ࣦ.ë¼½
-₇à¯ôƒ‚·Û’。👖ٵ-𞪑; 7à¯ôƒ‚·Û’.👖اٴ-𞪑; [B1, P1, V6]; xn--7-rwc839aj3073c.xn----ymc5uv818oghka; ; ; # 7à¯Û’.👖اٴ-
-7à¯ôƒ‚·Û’。👖اٴ-𞪑; 7à¯ôƒ‚·Û’.👖اٴ-𞪑; [B1, P1, V6]; xn--7-rwc839aj3073c.xn----ymc5uv818oghka; ; ; # 7à¯Û’.👖اٴ-
-xn--7-rwc839aj3073c.xn----ymc5uv818oghka; 7à¯ôƒ‚·Û’.👖اٴ-𞪑; [B1, V6]; xn--7-rwc839aj3073c.xn----ymc5uv818oghka; ; ; # 7à¯Û’.👖اٴ-
--。ݻ; -.ݻ; [B1, V3]; -.xn--cqb; ; ; # -.ݻ
--。ݻ; -.ݻ; [B1, V3]; -.xn--cqb; ; ; # -.ݻ
--.xn--cqb; -.Ý»; [B1, V3]; -.xn--cqb; ; ; # -.Ý»
-𑇌𵛓。-â’ˆê¡Ü«; 𑇌𵛓.-â’ˆê¡Ü«; [B1, P1, V3, V5, V6]; xn--8d1dg030h.xn----u1c466tp10j; ; ; # 𑇌.-â’ˆê¡Ü«
-𑇌𵛓。-1.ê¡Ü«; 𑇌𵛓.-1.ê¡Ü«; [B1, B5, B6, P1, V3, V5, V6]; xn--8d1dg030h.-1.xn--1nb7163f; ; ; # 𑇌.-1.ê¡Ü«
-xn--8d1dg030h.-1.xn--1nb7163f; 𑇌𵛓.-1.ê¡Ü«; [B1, B5, B6, V3, V5, V6]; xn--8d1dg030h.-1.xn--1nb7163f; ; ; # 𑇌.-1.ê¡Ü«
-xn--8d1dg030h.xn----u1c466tp10j; 𑇌𵛓.-â’ˆê¡Ü«; [B1, V3, V5, V6]; xn--8d1dg030h.xn----u1c466tp10j; ; ; # 𑇌.-â’ˆê¡Ü«
-璛᜴گ.-; ; [B1, B5, B6, V3]; xn--ikb175frt4e.-; ; ; # 璛᜴گ.-
-xn--ikb175frt4e.-; 璛᜴گ.-; [B1, B5, B6, V3]; xn--ikb175frt4e.-; ; ; # 璛᜴گ.-
-󠆰ࢡà©ìƒ•ï¼Žð¹²íœ; ࢡà©ìƒ•.ð¹²íœ; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡà©ìƒ•.ð¹²íœ
-󠆰ࢡà©á„‰á…¢á†´ï¼Žð¹²á„’ᅰᆬ; ࢡà©ìƒ•.ð¹²íœ; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡà©ìƒ•.ð¹²íœ
-󠆰ࢡà©ìƒ•.ð¹²íœ; ࢡà©ìƒ•.ð¹²íœ; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡà©ìƒ•.ð¹²íœ
-󠆰ࢡà©á„‰á…¢á†´.ð¹²á„’ᅰᆬ; ࢡà©ìƒ•.ð¹²íœ; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡà©ìƒ•.ð¹²íœ
-xn--qyb07fj857a.xn--728bv72h; ࢡà©ìƒ•.ð¹²íœ; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡà©ìƒ•.ð¹²íœ
-ñ¨½ï¼Žñ‹¸•; ñ¨½.ñ‹¸•; [P1, V6]; xn--pr3x.xn--rv7w; ; ; # .
-ñ¨½.ñ‹¸•; ; [P1, V6]; xn--pr3x.xn--rv7w; ; ; # .
+\u08E6\u200D.뼽; \u08E6\u200D.뼽; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.뼽
+\u08E6\u200D.뼽; \u08E6\u200D.뼽; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.뼽
+\u08E6\u200D.뼽; ; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.뼽
+\u08E6\u200D.뼽; \u08E6\u200D.뼽; [C2, V5]; xn--p0b869i.xn--e43b; ; xn--p0b.xn--e43b; [V5] # ࣦ.뼽
+xn--p0b.xn--e43b; \u08E6.뼽; [V5]; xn--p0b.xn--e43b; ; ; # ࣦ.뼽
+xn--p0b869i.xn--e43b; \u08E6\u200D.뼽; [C2, V5]; xn--p0b869i.xn--e43b; ; ; # ࣦ.뼽
+₇\u0BCDôƒ‚·\u06D2。👖\u0675-𞪑; 7\u0BCDôƒ‚·\u06D2.👖\u0627\u0674-𞪑; [B1, V6]; xn--7-rwc839aj3073c.xn----ymc5uv818oghka; ; ; # 7à¯Û’.👖اٴ-
+7\u0BCDôƒ‚·\u06D2。👖\u0627\u0674-𞪑; 7\u0BCDôƒ‚·\u06D2.👖\u0627\u0674-𞪑; [B1, V6]; xn--7-rwc839aj3073c.xn----ymc5uv818oghka; ; ; # 7à¯Û’.👖اٴ-
+xn--7-rwc839aj3073c.xn----ymc5uv818oghka; 7\u0BCDôƒ‚·\u06D2.👖\u0627\u0674-𞪑; [B1, V6]; xn--7-rwc839aj3073c.xn----ymc5uv818oghka; ; ; # 7à¯Û’.👖اٴ-
+-。\u077B; -.\u077B; [B1, V3]; -.xn--cqb; ; ; # -.ݻ
+-。\u077B; -.\u077B; [B1, V3]; -.xn--cqb; ; ; # -.ݻ
+-.xn--cqb; -.\u077B; [B1, V3]; -.xn--cqb; ; ; # -.Ý»
+𑇌𵛓。-â’ˆê¡\u072B; 𑇌𵛓.-â’ˆê¡\u072B; [B1, V3, V5, V6]; xn--8d1dg030h.xn----u1c466tp10j; ; ; # 𑇌.-â’ˆê¡Ü«
+𑇌𵛓。-1.ê¡\u072B; 𑇌𵛓.-1.ê¡\u072B; [B1, B5, B6, V3, V5, V6]; xn--8d1dg030h.-1.xn--1nb7163f; ; ; # 𑇌.-1.ê¡Ü«
+xn--8d1dg030h.-1.xn--1nb7163f; 𑇌𵛓.-1.ê¡\u072B; [B1, B5, B6, V3, V5, V6]; xn--8d1dg030h.-1.xn--1nb7163f; ; ; # 𑇌.-1.ê¡Ü«
+xn--8d1dg030h.xn----u1c466tp10j; 𑇌𵛓.-â’ˆê¡\u072B; [B1, V3, V5, V6]; xn--8d1dg030h.xn----u1c466tp10j; ; ; # 𑇌.-â’ˆê¡Ü«
+璛\u1734\u06AF.-; ; [B1, B5, B6, V3]; xn--ikb175frt4e.-; ; ; # 璛᜴گ.-
+xn--ikb175frt4e.-; 璛\u1734\u06AF.-; [B1, B5, B6, V3]; xn--ikb175frt4e.-; ; ; # 璛᜴گ.-
+ó †°\u08A1\u0A4D샕.ð¹²íœ; \u08A1\u0A4D샕.ð¹²íœ; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡà©ìƒ•.ð¹²íœ
+ó †°\u08A1\u0A4D샕.ð¹²á„’ᅰᆬ; \u08A1\u0A4D샕.ð¹²íœ; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡà©ìƒ•.ð¹²íœ
+ó †°\u08A1\u0A4D샕.ð¹²íœ; \u08A1\u0A4D샕.ð¹²íœ; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡà©ìƒ•.ð¹²íœ
+ó †°\u08A1\u0A4D샕.ð¹²á„’ᅰᆬ; \u08A1\u0A4D샕.ð¹²íœ; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡà©ìƒ•.ð¹²íœ
+xn--qyb07fj857a.xn--728bv72h; \u08A1\u0A4D샕.ð¹²íœ; [B1, B2, B3]; xn--qyb07fj857a.xn--728bv72h; ; ; # ࢡà©ìƒ•.ð¹²íœ
+ñ¨½ï¼Žñ‹¸•; ñ¨½.ñ‹¸•; [V6]; xn--pr3x.xn--rv7w; ; ; # .
+ñ¨½.ñ‹¸•; ; [V6]; xn--pr3x.xn--rv7w; ; ; # .
xn--pr3x.xn--rv7w; ñ¨½.ñ‹¸•; [V6]; xn--pr3x.xn--rv7w; ; ; # .
-ٽ𞥕。𑑂𞤶Ⴍ-; ٽ𞥕.𑑂𞤶Ⴍ-; [B1, P1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ-
-ٽ𞥕。𑑂𞤶Ⴍ-; ٽ𞥕.𑑂𞤶Ⴍ-; [B1, P1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ-
-ٽ𞥕。𑑂𞤶â´-; ٽ𞥕.𑑂𞤶â´-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶â´-
-ٽ𞥕。𑑂𞤔Ⴍ-; ٽ𞥕.𑑂𞤶Ⴍ-; [B1, P1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ-
-ٽ𞥕。𑑂𞤔â´-; ٽ𞥕.𑑂𞤶â´-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶â´-
-xn--2ib0338v.xn----zvs0199fo91g; ٽ𞥕.𑑂𞤶â´-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶â´-
-xn--2ib0338v.xn----w0g2740ro9vg; ٽ𞥕.𑑂𞤶Ⴍ-; [B1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ-
-ٽ𞥕。𑑂𞤶â´-; ٽ𞥕.𑑂𞤶â´-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶â´-
-ٽ𞥕。𑑂𞤔Ⴍ-; ٽ𞥕.𑑂𞤶Ⴍ-; [B1, P1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ-
-ٽ𞥕。𑑂𞤔â´-; ٽ𞥕.𑑂𞤶â´-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶â´-
-ð¯€ð¸‰ðž§ã€‚ñ¢š§â‚„á‚«ñ‚¹«; ð¯€ð¸‰ðž§.ñ¢š§4á‚«ñ‚¹«; [P1, V6]; xn--039c42bq865a.xn--4-t0g49302fnrzm; ; ; # .4á‚«
-ð¯€ð¸‰ðž§ã€‚ñ¢š§4á‚«ñ‚¹«; ð¯€ð¸‰ðž§.ñ¢š§4á‚«ñ‚¹«; [P1, V6]; xn--039c42bq865a.xn--4-t0g49302fnrzm; ; ; # .4á‚«
-ð¯€ð¸‰ðž§ã€‚ñ¢š§4â´‹ñ‚¹«; ð¯€ð¸‰ðž§.ñ¢š§4â´‹ñ‚¹«; [P1, V6]; xn--039c42bq865a.xn--4-wvs27840bnrzm; ; ; # .4â´‹
+\u067D𞥕。𑑂𞤶Ⴍ-; \u067D𞥕.𑑂𞤶Ⴍ-; [B1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ-
+\u067D𞥕。𑑂𞤶Ⴍ-; \u067D𞥕.𑑂𞤶Ⴍ-; [B1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ-
+\u067D𞥕。𑑂𞤶â´-; \u067D𞥕.𑑂𞤶â´-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶â´-
+\u067D𞥕。𑑂𞤔Ⴍ-; \u067D𞥕.𑑂𞤶Ⴍ-; [B1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ-
+\u067D𞥕。𑑂𞤔â´-; \u067D𞥕.𑑂𞤶â´-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶â´-
+xn--2ib0338v.xn----zvs0199fo91g; \u067D𞥕.𑑂𞤶â´-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶â´-
+xn--2ib0338v.xn----w0g2740ro9vg; \u067D𞥕.𑑂𞤶Ⴍ-; [B1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ-
+\u067D𞥕。𑑂𞤶â´-; \u067D𞥕.𑑂𞤶â´-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶â´-
+\u067D𞥕。𑑂𞤔Ⴍ-; \u067D𞥕.𑑂𞤶Ⴍ-; [B1, V3, V5, V6]; xn--2ib0338v.xn----w0g2740ro9vg; ; ; # ٽ𞥕.𑑂𞤶Ⴍ-
+\u067D𞥕。𑑂𞤔â´-; \u067D𞥕.𑑂𞤶â´-; [B1, V3, V5]; xn--2ib0338v.xn----zvs0199fo91g; ; ; # ٽ𞥕.𑑂𞤶â´-
+ð¯€ð¸‰ðž§ã€‚ñ¢š§â‚„á‚«ñ‚¹«; ð¯€ð¸‰ðž§.ñ¢š§4á‚«ñ‚¹«; [V6]; xn--039c42bq865a.xn--4-t0g49302fnrzm; ; ; # .4á‚«
+ð¯€ð¸‰ðž§ã€‚ñ¢š§4á‚«ñ‚¹«; ð¯€ð¸‰ðž§.ñ¢š§4á‚«ñ‚¹«; [V6]; xn--039c42bq865a.xn--4-t0g49302fnrzm; ; ; # .4á‚«
+ð¯€ð¸‰ðž§ã€‚ñ¢š§4â´‹ñ‚¹«; ð¯€ð¸‰ðž§.ñ¢š§4â´‹ñ‚¹«; [V6]; xn--039c42bq865a.xn--4-wvs27840bnrzm; ; ; # .4â´‹
xn--039c42bq865a.xn--4-wvs27840bnrzm; ð¯€ð¸‰ðž§.ñ¢š§4â´‹ñ‚¹«; [V6]; xn--039c42bq865a.xn--4-wvs27840bnrzm; ; ; # .4â´‹
xn--039c42bq865a.xn--4-t0g49302fnrzm; ð¯€ð¸‰ðž§.ñ¢š§4á‚«ñ‚¹«; [V6]; xn--039c42bq865a.xn--4-t0g49302fnrzm; ; ; # .4á‚«
-ð¯€ð¸‰ðž§ã€‚ñ¢š§â‚„â´‹ñ‚¹«; ð¯€ð¸‰ðž§.ñ¢š§4â´‹ñ‚¹«; [P1, V6]; xn--039c42bq865a.xn--4-wvs27840bnrzm; ; ; # .4â´‹
-4ڽ︒󠑥.≠; ; [B1, P1, V6]; xn--4-kvc5601q2h50i.xn--1ch; ; ; # 4ڽ︒.≠
-4ڽ︒󠑥.≠; 4ڽ︒󠑥.≠; [B1, P1, V6]; xn--4-kvc5601q2h50i.xn--1ch; ; ; # 4ڽ︒.≠
-4ڽ。󠑥.≠; 4ڽ.󠑥.≠; [B1, P1, V6]; xn--4-kvc.xn--5136e.xn--1ch; ; ; # 4ڽ..≠
-4ڽ。󠑥.≠; 4ڽ.󠑥.≠; [B1, P1, V6]; xn--4-kvc.xn--5136e.xn--1ch; ; ; # 4ڽ..≠
-xn--4-kvc.xn--5136e.xn--1ch; 4ڽ.󠑥.≠; [B1, V6]; xn--4-kvc.xn--5136e.xn--1ch; ; ; # 4ڽ..≠
-xn--4-kvc5601q2h50i.xn--1ch; 4ڽ︒󠑥.≠; [B1, V6]; xn--4-kvc5601q2h50i.xn--1ch; ; ; # 4ڽ︒.≠
-ðŸ“。ۗ; 5.Û—; [V5]; 5.xn--nlb; ; ; # 5.Û—
-5。ۗ; 5.ۗ; [V5]; 5.xn--nlb; ; ; # 5.ۗ
-5.xn--nlb; 5.Û—; [V5]; 5.xn--nlb; ; ; # 5.Û—
-‌򺸩.⾕; ‌򺸩.谷; [C1, P1, V6]; xn--0ug26167i.xn--6g3a; ; xn--i183d.xn--6g3a; [P1, V6] # .谷
-‌򺸩.谷; ; [C1, P1, V6]; xn--0ug26167i.xn--6g3a; ; xn--i183d.xn--6g3a; [P1, V6] # .谷
+ð¯€ð¸‰ðž§ã€‚ñ¢š§â‚„â´‹ñ‚¹«; ð¯€ð¸‰ðž§.ñ¢š§4â´‹ñ‚¹«; [V6]; xn--039c42bq865a.xn--4-wvs27840bnrzm; ; ; # .4â´‹
+4\u06BD︒󠑥.≠; ; [B1, V6]; xn--4-kvc5601q2h50i.xn--1ch; ; ; # 4ڽ︒.≠
+4\u06BD︒󠑥.=\u0338; 4\u06BD︒󠑥.≠; [B1, V6]; xn--4-kvc5601q2h50i.xn--1ch; ; ; # 4ڽ︒.≠
+4\u06BD。󠑥.≠; 4\u06BD.󠑥.≠; [B1, V6]; xn--4-kvc.xn--5136e.xn--1ch; ; ; # 4ڽ..≠
+4\u06BD。󠑥.=\u0338; 4\u06BD.󠑥.≠; [B1, V6]; xn--4-kvc.xn--5136e.xn--1ch; ; ; # 4ڽ..≠
+xn--4-kvc.xn--5136e.xn--1ch; 4\u06BD.󠑥.≠; [B1, V6]; xn--4-kvc.xn--5136e.xn--1ch; ; ; # 4ڽ..≠
+xn--4-kvc5601q2h50i.xn--1ch; 4\u06BD︒󠑥.≠; [B1, V6]; xn--4-kvc5601q2h50i.xn--1ch; ; ; # 4ڽ︒.≠
+ðŸ“。\u06D7; 5.\u06D7; [V5]; 5.xn--nlb; ; ; # 5.Û—
+5。\u06D7; 5.\u06D7; [V5]; 5.xn--nlb; ; ; # 5.ۗ
+5.xn--nlb; 5.\u06D7; [V5]; 5.xn--nlb; ; ; # 5.Û—
+\u200C򺸩.⾕; \u200C򺸩.谷; [C1, V6]; xn--0ug26167i.xn--6g3a; ; xn--i183d.xn--6g3a; [V6] # .谷
+\u200C򺸩.谷; ; [C1, V6]; xn--0ug26167i.xn--6g3a; ; xn--i183d.xn--6g3a; [V6] # .谷
xn--i183d.xn--6g3a; 򺸩.谷; [V6]; xn--i183d.xn--6g3a; ; ; # .谷
-xn--0ug26167i.xn--6g3a; ‌򺸩.谷; [C1, V6]; xn--0ug26167i.xn--6g3a; ; ; # .谷
-︒󎰇â€.-ܼ‌; ; [C1, C2, P1, V3, V6]; xn--1ug1658ftw26f.xn----t2c071q; ; xn--y86c71305c.xn----t2c; [P1, V3, V6] # ︒.-ܼ
-。󎰇â€.-ܼ‌; .óŽ°‡â€.-ܼ‌; [C1, C2, P1, V3, V6, X4_2]; .xn--1ug05310k.xn----t2c071q; [C1, C2, P1, V3, V6, A4_2]; .xn--hh50e.xn----t2c; [P1, V3, V6, A4_2] # ..-ܼ
-.xn--hh50e.xn----t2c; .󎰇.-ܼ; [V3, V6, X4_2]; .xn--hh50e.xn----t2c; [V3, V6, A4_2]; ; # ..-ܼ
-.xn--1ug05310k.xn----t2c071q; .óŽ°‡â€.-ܼ‌; [C1, C2, V3, V6, X4_2]; .xn--1ug05310k.xn----t2c071q; [C1, C2, V3, V6, A4_2]; ; # ..-ܼ
-xn--y86c71305c.xn----t2c; ︒󎰇.-ܼ; [V3, V6]; xn--y86c71305c.xn----t2c; ; ; # ︒.-ܼ
-xn--1ug1658ftw26f.xn----t2c071q; ︒󎰇â€.-ܼ‌; [C1, C2, V3, V6]; xn--1ug1658ftw26f.xn----t2c071q; ; ; # ︒.-ܼ
-≯𞤟。ᡨ; ≯ðž¥.ᡨ; [B1, P1, V6]; xn--hdhz520p.xn--48e; ; ; # ≯ðž¥.ᡨ
-≯𞤟。ᡨ; ≯ðž¥.ᡨ; [B1, P1, V6]; xn--hdhz520p.xn--48e; ; ; # ≯ðž¥.ᡨ
-≯ðž¥ã€‚ᡨ; ≯ðž¥.ᡨ; [B1, P1, V6]; xn--hdhz520p.xn--48e; ; ; # ≯ðž¥.ᡨ
-≯ðž¥ã€‚ᡨ; ≯ðž¥.ᡨ; [B1, P1, V6]; xn--hdhz520p.xn--48e; ; ; # ≯ðž¥.ᡨ
-xn--hdhz520p.xn--48e; ≯ðž¥.ᡨ; [B1, V6]; xn--hdhz520p.xn--48e; ; ; # ≯ðž¥.ᡨ
-ུ𫫰ð¨„。ܓð¹¦; ུ𫫰ð¨„.Ü“ð¹¦; [B1, V5]; xn--ned8985uo92e.xn--dnb6395k; ; ; # ུ𫫰ð¨„.Ü“ð¹¦
-xn--ned8985uo92e.xn--dnb6395k; ུ𫫰ð¨„.Ü“ð¹¦; [B1, V5]; xn--ned8985uo92e.xn--dnb6395k; ; ; # ུ𫫰ð¨„.Ü“ð¹¦
-̼ߛâ·ðŸ¹ï½¡ðŸ¬; ̼ߛ73.0; [B1, V5]; xn--73-9yb648b.0; ; ; # ̼ߛ73.0
-̼ߛ73。0; ̼ߛ73.0; [B1, V5]; xn--73-9yb648b.0; ; ; # ̼ߛ73.0
-xn--73-9yb648b.0; ̼ߛ73.0; [B1, V5]; xn--73-9yb648b.0; ; ; # ̼ߛ73.0
-â€ï¼ŽðŸ—; â€.9; [C2]; xn--1ug.9; ; .9; [A4_2] # .9
-â€.9; ; [C2]; xn--1ug.9; ; .9; [A4_2] # .9
+xn--0ug26167i.xn--6g3a; \u200C򺸩.谷; [C1, V6]; xn--0ug26167i.xn--6g3a; ; ; # .谷
+︒󎰇\u200D.-\u073C\u200C; ; [C1, C2, V3, V6]; xn--1ug1658ftw26f.xn----t2c071q; ; xn--y86c71305c.xn----t2c; [V3, V6] # ︒.-ܼ
+。󎰇\u200D.-\u073C\u200C; .󎰇\u200D.-\u073C\u200C; [C1, C2, V3, V6, X4_2]; .xn--1ug05310k.xn----t2c071q; [C1, C2, V3, V6, A4_2]; .xn--hh50e.xn----t2c; [V3, V6, A4_2] # ..-ܼ
+.xn--hh50e.xn----t2c; .󎰇.-\u073C; [V3, V6, X4_2]; .xn--hh50e.xn----t2c; [V3, V6, A4_2]; ; # ..-ܼ
+.xn--1ug05310k.xn----t2c071q; .󎰇\u200D.-\u073C\u200C; [C1, C2, V3, V6, X4_2]; .xn--1ug05310k.xn----t2c071q; [C1, C2, V3, V6, A4_2]; ; # ..-ܼ
+xn--y86c71305c.xn----t2c; ︒󎰇.-\u073C; [V3, V6]; xn--y86c71305c.xn----t2c; ; ; # ︒.-ܼ
+xn--1ug1658ftw26f.xn----t2c071q; ︒󎰇\u200D.-\u073C\u200C; [C1, C2, V3, V6]; xn--1ug1658ftw26f.xn----t2c071q; ; ; # ︒.-ܼ
+≯𞤟。ᡨ; ≯ðž¥.ᡨ; [B1]; xn--hdhz520p.xn--48e; ; ; # ≯ðž¥.ᡨ
+>\u0338𞤟。ᡨ; ≯ðž¥.ᡨ; [B1]; xn--hdhz520p.xn--48e; ; ; # ≯ðž¥.ᡨ
+>\u0338ðž¥ã€‚ᡨ; ≯ðž¥.ᡨ; [B1]; xn--hdhz520p.xn--48e; ; ; # ≯ðž¥.ᡨ
+≯ðž¥ã€‚ᡨ; ≯ðž¥.ᡨ; [B1]; xn--hdhz520p.xn--48e; ; ; # ≯ðž¥.ᡨ
+xn--hdhz520p.xn--48e; ≯ðž¥.ᡨ; [B1]; xn--hdhz520p.xn--48e; ; ; # ≯ðž¥.ᡨ
+\u0F74ð««°ð¨„。\u0713ð¹¦; \u0F74ð««°ð¨„.\u0713ð¹¦; [B1, V5]; xn--ned8985uo92e.xn--dnb6395k; ; ; # ུ𫫰ð¨„.Ü“ð¹¦
+xn--ned8985uo92e.xn--dnb6395k; \u0F74ð««°ð¨„.\u0713ð¹¦; [B1, V5]; xn--ned8985uo92e.xn--dnb6395k; ; ; # ུ𫫰ð¨„.Ü“ð¹¦
+\u033C\u07DBâ·ðŸ¹ï½¡ðŸ¬; \u033C\u07DB73.0; [B1, V5]; xn--73-9yb648b.0; ; ; # ̼ߛ73.0
+\u033C\u07DB73。0; \u033C\u07DB73.0; [B1, V5]; xn--73-9yb648b.0; ; ; # ̼ߛ73.0
+xn--73-9yb648b.0; \u033C\u07DB73.0; [B1, V5]; xn--73-9yb648b.0; ; ; # ̼ߛ73.0
+\u200D.ðŸ—; \u200D.9; [C2]; xn--1ug.9; ; .9; [A4_2] # .9
+\u200D.9; ; [C2]; xn--1ug.9; ; .9; [A4_2] # .9
.9; ; [X4_2]; ; [A4_2]; ; # .9
-xn--1ug.9; â€.9; [C2]; xn--1ug.9; ; ; # .9
+xn--1ug.9; \u200D.9; [C2]; xn--1ug.9; ; ; # .9
9; ; ; ; ; ; # 9
-ݹᡭ𪕈。ڶࣙ; ݹᡭ𪕈.ڶࣙ; [B2, B3]; xn--9pb497fs270c.xn--pkb80i; ; ; # ݹᡭ𪕈.ڶࣙ
-xn--9pb497fs270c.xn--pkb80i; ݹᡭ𪕈.ڶࣙ; [B2, B3]; xn--9pb497fs270c.xn--pkb80i; ; ; # ݹᡭ𪕈.ڶࣙ
-ܦ5ߢ겙。᳴ð·š; ܦ5ߢ겙.á³´ð·š; [B1, B2, B3, P1, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.á³´
-ܦ5ߢ겙。᳴ð·š; ܦ5ߢ겙.á³´ð·š; [B1, B2, B3, P1, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.á³´
-ܦ5ߢ겙。᳴ð·š; ܦ5ߢ겙.á³´ð·š; [B1, B2, B3, P1, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.á³´
-ܦ5ߢ겙。᳴ð·š; ܦ5ߢ겙.á³´ð·š; [B1, B2, B3, P1, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.á³´
-xn--5-j1c97c2483c.xn--e7f2093h; ܦ5ߢ겙.á³´ð·š; [B1, B2, B3, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.á³´
-á‚­ð¿£ê¡¨Ö®ã€‚Ⴞ‌‌; á‚­ð¿£ê¡¨Ö®.Ⴞ‌‌; [C1, P1, V6]; xn--5cb347co96jug15a.xn--2nd059ea; ; xn--5cb347co96jug15a.xn--2nd; [P1, V6] # Ⴍꡨ֮.Ⴞ
-â´ð¿£ê¡¨Ö®ã€‚ⴞ‌‌; â´ð¿£ê¡¨Ö®.ⴞ‌‌; [C1, P1, V6]; xn--5cb172r175fug38a.xn--0uga051h; ; xn--5cb172r175fug38a.xn--mlj; [P1, V6] # â´ê¡¨Ö®.â´ž
-xn--5cb172r175fug38a.xn--mlj; â´ð¿£ê¡¨Ö®.â´ž; [V6]; xn--5cb172r175fug38a.xn--mlj; ; ; # â´ê¡¨Ö®.â´ž
-xn--5cb172r175fug38a.xn--0uga051h; â´ð¿£ê¡¨Ö®.ⴞ‌‌; [C1, V6]; xn--5cb172r175fug38a.xn--0uga051h; ; ; # â´ê¡¨Ö®.â´ž
-xn--5cb347co96jug15a.xn--2nd; á‚­ð¿£ê¡¨Ö®.Ⴞ; [V6]; xn--5cb347co96jug15a.xn--2nd; ; ; # Ⴍꡨ֮.Ⴞ
-xn--5cb347co96jug15a.xn--2nd059ea; á‚­ð¿£ê¡¨Ö®.Ⴞ‌‌; [C1, V6]; xn--5cb347co96jug15a.xn--2nd059ea; ; ; # Ⴍꡨ֮.Ⴞ
-ð‹°ã€‚ó‘“±; ð‹°.ó‘“±; [P1, V6]; xn--k97c.xn--q031e; ; ; # ð‹°.
+\u0779ᡭ𪕈。\u06B6\u08D9; \u0779ᡭ𪕈.\u06B6\u08D9; [B2, B3]; xn--9pb497fs270c.xn--pkb80i; ; ; # ݹᡭ𪕈.ڶࣙ
+xn--9pb497fs270c.xn--pkb80i; \u0779ᡭ𪕈.\u06B6\u08D9; [B2, B3]; xn--9pb497fs270c.xn--pkb80i; ; ; # ݹᡭ𪕈.ڶࣙ
+\u07265\u07E2겙。\u1CF4ð·š; \u07265\u07E2ê²™.\u1CF4ð·š; [B1, B2, B3, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.á³´
+\u07265\u07E2겙。\u1CF4ð·š; \u07265\u07E2ê²™.\u1CF4ð·š; [B1, B2, B3, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.á³´
+\u07265\u07E2겙。\u1CF4ð·š; \u07265\u07E2ê²™.\u1CF4ð·š; [B1, B2, B3, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.á³´
+\u07265\u07E2겙。\u1CF4ð·š; \u07265\u07E2ê²™.\u1CF4ð·š; [B1, B2, B3, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.á³´
+xn--5-j1c97c2483c.xn--e7f2093h; \u07265\u07E2ê²™.\u1CF4ð·š; [B1, B2, B3, V5, V6]; xn--5-j1c97c2483c.xn--e7f2093h; ; ; # ܦ5ߢ겙.á³´
+á‚­ð¿£ê¡¨\u05AE。Ⴞ\u200C\u200C; á‚­ð¿£ê¡¨\u05AE.Ⴞ\u200C\u200C; [C1, V6]; xn--5cb347co96jug15a.xn--2nd059ea; ; xn--5cb347co96jug15a.xn--2nd; [V6] # Ⴍꡨ֮.Ⴞ
+â´ð¿£ê¡¨\u05AE。ⴞ\u200C\u200C; â´ð¿£ê¡¨\u05AE.â´ž\u200C\u200C; [C1, V6]; xn--5cb172r175fug38a.xn--0uga051h; ; xn--5cb172r175fug38a.xn--mlj; [V6] # â´ê¡¨Ö®.â´ž
+xn--5cb172r175fug38a.xn--mlj; â´ð¿£ê¡¨\u05AE.â´ž; [V6]; xn--5cb172r175fug38a.xn--mlj; ; ; # â´ê¡¨Ö®.â´ž
+xn--5cb172r175fug38a.xn--0uga051h; â´ð¿£ê¡¨\u05AE.â´ž\u200C\u200C; [C1, V6]; xn--5cb172r175fug38a.xn--0uga051h; ; ; # â´ê¡¨Ö®.â´ž
+xn--5cb347co96jug15a.xn--2nd; á‚­ð¿£ê¡¨\u05AE.Ⴞ; [V6]; xn--5cb347co96jug15a.xn--2nd; ; ; # Ⴍꡨ֮.Ⴞ
+xn--5cb347co96jug15a.xn--2nd059ea; á‚­ð¿£ê¡¨\u05AE.Ⴞ\u200C\u200C; [C1, V6]; xn--5cb347co96jug15a.xn--2nd059ea; ; ; # Ⴍꡨ֮.Ⴞ
+ð‹°ã€‚ó‘“±; ð‹°.ó‘“±; [V6]; xn--k97c.xn--q031e; ; ; # ð‹°.
xn--k97c.xn--q031e; ð‹°.ó‘“±; [V6]; xn--k97c.xn--q031e; ; ; # ð‹°.
-󡎦឴à­.ð¹¾; ; [B1, P1, V6]; xn--9ic364dho91z.xn--2o0d; ; ; # à­.ð¹¾
-xn--9ic364dho91z.xn--2o0d; 󡎦឴à­.ð¹¾; [B1, V6]; xn--9ic364dho91z.xn--2o0d; ; ; # à­.ð¹¾
-ࣟႫ𶿸귤.ò …¼ðŸ¢íœªà«£; ࣟႫ𶿸귤.ò …¼0휪ૣ; [P1, V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ
-ࣟႫ𶿸귤.ò …¼ðŸ¢á„’ᅱᆹૣ; ࣟႫ𶿸귤.ò …¼0휪ૣ; [P1, V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ
-ࣟႫ𶿸귤.򠅼0휪ૣ; ; [P1, V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ
-ࣟႫ𶿸귤.򠅼0휪ૣ; ࣟႫ𶿸귤.򠅼0휪ૣ; [P1, V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ
-ࣟⴋ𶿸귤.򠅼0휪ૣ; ࣟⴋ𶿸귤.򠅼0휪ૣ; [P1, V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ
-ࣟⴋ𶿸귤.򠅼0휪ૣ; ; [P1, V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ
-xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ࣟⴋ𶿸귤.򠅼0휪ૣ; [V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ
-xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ࣟႫ𶿸귤.򠅼0휪ૣ; [V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ
-ࣟⴋ𶿸귤.ò …¼ðŸ¢á„’ᅱᆹૣ; ࣟⴋ𶿸귤.ò …¼0휪ૣ; [P1, V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ
-ࣟⴋ𶿸귤.ò …¼ðŸ¢íœªà«£; ࣟⴋ𶿸귤.ò …¼0휪ૣ; [P1, V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ
-ބ.ðž¡Ø; Þ„.ðž¡Ø; [P1, V6]; xn--lqb.xn--jfb1808v; ; ; # Þ„.ðž¡
-Þ„.ðž¡Ø; ; [P1, V6]; xn--lqb.xn--jfb1808v; ; ; # Þ„.ðž¡
-xn--lqb.xn--jfb1808v; Þ„.ðž¡Ø; [V6]; xn--lqb.xn--jfb1808v; ; ; # Þ„.ðž¡
-à«â‚ƒ.8꣄â€ðŸƒ¤; à«3.8꣄â€ðŸƒ¤; [V5]; xn--3-yke.xn--8-ugnv982dbkwm; ; xn--3-yke.xn--8-sl4et308f; # à«3.8꣄🃤
-à«3.8꣄â€ðŸƒ¤; ; [V5]; xn--3-yke.xn--8-ugnv982dbkwm; ; xn--3-yke.xn--8-sl4et308f; # à«3.8꣄🃤
-xn--3-yke.xn--8-sl4et308f; à«3.8꣄🃤; [V5]; xn--3-yke.xn--8-sl4et308f; ; ; # à«3.8꣄🃤
-xn--3-yke.xn--8-ugnv982dbkwm; à«3.8꣄â€ðŸƒ¤; [V5]; xn--3-yke.xn--8-ugnv982dbkwm; ; ; # à«3.8꣄🃤
-℻⩷ð††ã€‚𞤠ó †á Œ; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
-FAXâ©·ð††ã€‚𞤠ó †á Œ; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
-faxâ©·ð††ã€‚𞥂ó †á Œ; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
-Faxâ©·ð††ã€‚𞤠ó †á Œ; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
+󡎦\u17B4\u0B4D.ð¹¾; ; [B1, V6]; xn--9ic364dho91z.xn--2o0d; ; ; # à­.ð¹¾
+xn--9ic364dho91z.xn--2o0d; 󡎦\u17B4\u0B4D.ð¹¾; [B1, V6]; xn--9ic364dho91z.xn--2o0d; ; ; # à­.ð¹¾
+\u08DFႫ𶿸귤.ò …¼ðŸ¢íœª\u0AE3; \u08DFႫ𶿸귤.ò …¼0휪\u0AE3; [V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ
+\u08DFႫ𶿸귤.ò …¼ðŸ¢á„’ᅱᆹ\u0AE3; \u08DFႫ𶿸귤.ò …¼0휪\u0AE3; [V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ
+\u08DFႫ𶿸귤.򠅼0휪\u0AE3; ; [V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ
+\u08DFႫ𶿸귤.򠅼0휪\u0AE3; \u08DFႫ𶿸귤.򠅼0휪\u0AE3; [V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ
+\u08DFⴋ𶿸귤.򠅼0휪\u0AE3; \u08DFⴋ𶿸귤.򠅼0휪\u0AE3; [V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ
+\u08DFⴋ𶿸귤.򠅼0휪\u0AE3; ; [V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ
+xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; \u08DFⴋ𶿸귤.򠅼0휪\u0AE3; [V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ
+xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; \u08DFႫ𶿸귤.򠅼0휪\u0AE3; [V5, V6]; xn--i0b601b6r7l2hs0a.xn--0-8le8997mulr5f; ; ; # ࣟႫ귤.0휪ૣ
+\u08DFⴋ𶿸귤.ò …¼ðŸ¢á„’ᅱᆹ\u0AE3; \u08DFⴋ𶿸귤.ò …¼0휪\u0AE3; [V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ
+\u08DFⴋ𶿸귤.ò …¼ðŸ¢íœª\u0AE3; \u08DFⴋ𶿸귤.ò …¼0휪\u0AE3; [V5, V6]; xn--i0b436pkl2g2h42a.xn--0-8le8997mulr5f; ; ; # ࣟⴋ귤.0휪ૣ
+\u0784.ðž¡\u0601; \u0784.ðž¡\u0601; [V6]; xn--lqb.xn--jfb1808v; ; ; # Þ„.ðž¡
+\u0784.ðž¡\u0601; ; [V6]; xn--lqb.xn--jfb1808v; ; ; # Þ„.ðž¡
+xn--lqb.xn--jfb1808v; \u0784.ðž¡\u0601; [V6]; xn--lqb.xn--jfb1808v; ; ; # Þ„.ðž¡
+\u0ACD₃.8\uA8C4\u200D🃤; \u0ACD3.8\uA8C4\u200D🃤; [V5]; xn--3-yke.xn--8-ugnv982dbkwm; ; xn--3-yke.xn--8-sl4et308f; # à«3.8꣄🃤
+\u0ACD3.8\uA8C4\u200D🃤; ; [V5]; xn--3-yke.xn--8-ugnv982dbkwm; ; xn--3-yke.xn--8-sl4et308f; # à«3.8꣄🃤
+xn--3-yke.xn--8-sl4et308f; \u0ACD3.8\uA8C4🃤; [V5]; xn--3-yke.xn--8-sl4et308f; ; ; # à«3.8꣄🃤
+xn--3-yke.xn--8-ugnv982dbkwm; \u0ACD3.8\uA8C4\u200D🃤; [V5]; xn--3-yke.xn--8-ugnv982dbkwm; ; ; # à«3.8꣄🃤
+℻⩷ð††ã€‚𞤠ó †\u180C; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
+FAXâ©·ð††ã€‚𞤠ó †\u180C; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
+faxâ©·ð††ã€‚𞥂ó †\u180C; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
+Faxâ©·ð††ã€‚𞤠ó †\u180C; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
xn--fax-4c9a1676t.xn--6e6h; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
-℻⩷ð††ã€‚𞥂ó †á Œ; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
-FAXâ©·ð††ã€‚𞥂ó †á Œ; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
-faxâ©·ð††ã€‚𞤠ó †á Œ; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
+℻⩷ð††ã€‚𞥂ó †\u180C; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
+FAXâ©·ð††ã€‚𞥂ó †\u180C; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
+faxâ©·ð††ã€‚𞤠ó †\u180C; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
faxâ©·ð††.𞥂; ; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
FAXâ©·ð††.𞤠; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
Faxâ©·ð††.𞤠; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
FAXâ©·ð††.𞥂; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
Faxâ©·ð††.𞥂; faxâ©·ð††.𞥂; [B6]; xn--fax-4c9a1676t.xn--6e6h; ; ; # faxâ©·ð††.𞥂
-ꡕ≠ážó®¿±ï½¡ðµ§ó „«ï¾ ; ꡕ≠ážó®¿±.ðµ§ï¾ ; [B2, B3, P1, V6]; xn--cld333gn31h0158l.xn--cl7c96v; ; ; # ꡕ≠áž.
-ê¡•≠ážó®¿±ï½¡ðµ§ó „«ï¾ ; ꡕ≠ážó®¿±.ðµ§ï¾ ; [B2, B3, P1, V6]; xn--cld333gn31h0158l.xn--cl7c96v; ; ; # ꡕ≠áž.
-ꡕ≠ážó®¿±ã€‚ðµ§ó „«á… ; ꡕ≠ážó®¿±.ðµ§á… ; [B2, B3, P1, V6]; xn--cld333gn31h0158l.xn--psd1510k; ; ; # ꡕ≠áž.
-ê¡•≠ážó®¿±ã€‚ðµ§ó „«á… ; ꡕ≠ážó®¿±.ðµ§á… ; [B2, B3, P1, V6]; xn--cld333gn31h0158l.xn--psd1510k; ; ; # ꡕ≠áž.
-xn--cld333gn31h0158l.xn--psd1510k; ꡕ≠ážó®¿±.ðµ§á… ; [B2, B3, V6]; xn--cld333gn31h0158l.xn--psd1510k; ; ; # ꡕ≠áž.
-xn--cld333gn31h0158l.xn--cl7c96v; ꡕ≠ážó®¿±.ðµ§ï¾ ; [B2, B3, V6]; xn--cld333gn31h0158l.xn--cl7c96v; ; ; # ꡕ≠áž.
-鱊。‌; 鱊.‌; [C1]; xn--rt6a.xn--0ug; ; xn--rt6a.; [] # 鱊.
+ꡕ≠\u105E󮿱。ðµ§ó „«\uFFA0; ꡕ≠\u105E󮿱.ðµ§\uFFA0; [B2, B3, V6]; xn--cld333gn31h0158l.xn--cl7c96v; ; ; # ꡕ≠áž.
+ê¡•=\u0338\u105E󮿱。ðµ§ó „«\uFFA0; ꡕ≠\u105E󮿱.ðµ§\uFFA0; [B2, B3, V6]; xn--cld333gn31h0158l.xn--cl7c96v; ; ; # ꡕ≠áž.
+ꡕ≠\u105E󮿱。ðµ§ó „«\u1160; ꡕ≠\u105E󮿱.ðµ§\u1160; [B2, B3, V6]; xn--cld333gn31h0158l.xn--psd1510k; ; ; # ꡕ≠áž.
+ê¡•=\u0338\u105E󮿱。ðµ§ó „«\u1160; ꡕ≠\u105E󮿱.ðµ§\u1160; [B2, B3, V6]; xn--cld333gn31h0158l.xn--psd1510k; ; ; # ꡕ≠áž.
+xn--cld333gn31h0158l.xn--psd1510k; ꡕ≠\u105E󮿱.ðµ§\u1160; [B2, B3, V6]; xn--cld333gn31h0158l.xn--psd1510k; ; ; # ꡕ≠áž.
+xn--cld333gn31h0158l.xn--cl7c96v; ꡕ≠\u105E󮿱.ðµ§\uFFA0; [B2, B3, V6]; xn--cld333gn31h0158l.xn--cl7c96v; ; ; # ꡕ≠áž.
+鱊。\u200C; 鱊.\u200C; [C1]; xn--rt6a.xn--0ug; ; xn--rt6a.; [] # 鱊.
xn--rt6a.; 鱊.; ; xn--rt6a.; ; ; # 鱊.
鱊.; ; ; xn--rt6a.; ; ; # 鱊.
-xn--rt6a.xn--0ug; 鱊.‌; [C1]; xn--rt6a.xn--0ug; ; ; # 鱊.
-8ð¹£ï¼Žð‘¨; 8ð¹£.ð‘¨; [B1, B3, B6, V5]; xn--8-d26i.xn--0p1d; ; ; # 8ð¹£.ð‘¨
-8ð¹£.ð‘¨; ; [B1, B3, B6, V5]; xn--8-d26i.xn--0p1d; ; ; # 8ð¹£.ð‘¨
-xn--8-d26i.xn--0p1d; 8ð¹£.ð‘¨; [B1, B3, B6, V5]; xn--8-d26i.xn--0p1d; ; ; # 8ð¹£.ð‘¨
+xn--rt6a.xn--0ug; 鱊.\u200C; [C1]; xn--rt6a.xn--0ug; ; ; # 鱊.
+8ð¹£ï¼Žð‘¨; 8ð¹£.ð‘¨; [B1, V5]; xn--8-d26i.xn--0p1d; ; ; # 8ð¹£.ð‘¨
+8ð¹£.ð‘¨; ; [B1, V5]; xn--8-d26i.xn--0p1d; ; ; # 8ð¹£.ð‘¨
+xn--8-d26i.xn--0p1d; 8ð¹£.ð‘¨; [B1, V5]; xn--8-d26i.xn--0p1d; ; ; # 8ð¹£.ð‘¨
â¹ð§€ï¼Žð«¯; â¹ð§€.ð«¯; [B1]; xn--qoh9161g.xn--1x9c; ; ; # â¹ð§€.ð«¯
â¹ð§€.ð«¯; ; [B1]; xn--qoh9161g.xn--1x9c; ; ; # â¹ð§€.ð«¯
xn--qoh9161g.xn--1x9c; â¹ð§€.ð«¯; [B1]; xn--qoh9161g.xn--1x9c; ; ; # â¹ð§€.ð«¯
-𞤺ߌ4.â€; 𞤺ߌ4.â€; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4.
-𞤺ߌ4.â€; ; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4.
-𞤘ߌ4.â€; 𞤺ߌ4.â€; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4.
-xn--4-0bd15808a.; 𞤺ߌ4.; ; xn--4-0bd15808a.; ; ; # 𞤺ߌ4.
-𞤺ߌ4.; ; ; xn--4-0bd15808a.; ; ; # 𞤺ߌ4.
-𞤘ߌ4.; 𞤺ߌ4.; ; xn--4-0bd15808a.; ; ; # 𞤺ߌ4.
-xn--4-0bd15808a.xn--1ug; 𞤺ߌ4.â€; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; ; # 𞤺ߌ4.
-𞤘ߌ4.â€; 𞤺ߌ4.â€; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4.
-â’—à¦âƒ¯-.࣢•; ; [B1, P1, V3, V6]; xn----z0d801p6kd.xn--l0b810j; ; ; # â’—à¦âƒ¯-.•
-16.à¦âƒ¯-.࣢•; ; [B1, P1, V3, V5, V6]; 16.xn----z0d801p.xn--l0b810j; ; ; # 16.à¦âƒ¯-.•
-16.xn----z0d801p.xn--l0b810j; 16.à¦âƒ¯-.࣢•; [B1, V3, V5, V6]; 16.xn----z0d801p.xn--l0b810j; ; ; # 16.à¦âƒ¯-.•
-xn----z0d801p6kd.xn--l0b810j; â’—à¦âƒ¯-.࣢•; [B1, V3, V6]; xn----z0d801p6kd.xn--l0b810j; ; ; # â’—à¦âƒ¯-.•
+𞤺\u07CC4.\u200D; 𞤺\u07CC4.\u200D; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4.
+𞤺\u07CC4.\u200D; ; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4.
+𞤘\u07CC4.\u200D; 𞤺\u07CC4.\u200D; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4.
+xn--4-0bd15808a.; 𞤺\u07CC4.; ; xn--4-0bd15808a.; ; ; # 𞤺ߌ4.
+𞤺\u07CC4.; ; ; xn--4-0bd15808a.; ; ; # 𞤺ߌ4.
+𞤘\u07CC4.; 𞤺\u07CC4.; ; xn--4-0bd15808a.; ; ; # 𞤺ߌ4.
+xn--4-0bd15808a.xn--1ug; 𞤺\u07CC4.\u200D; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; ; # 𞤺ߌ4.
+𞤘\u07CC4.\u200D; 𞤺\u07CC4.\u200D; [B1, C2]; xn--4-0bd15808a.xn--1ug; ; xn--4-0bd15808a.; [] # 𞤺ߌ4.
+â’—\u0981\u20EF-.\u08E2•; ; [B1, V3, V6]; xn----z0d801p6kd.xn--l0b810j; ; ; # â’—à¦âƒ¯-.•
+16.\u0981\u20EF-.\u08E2•; ; [B1, V3, V5, V6]; 16.xn----z0d801p.xn--l0b810j; ; ; # 16.à¦âƒ¯-.•
+16.xn----z0d801p.xn--l0b810j; 16.\u0981\u20EF-.\u08E2•; [B1, V3, V5, V6]; 16.xn----z0d801p.xn--l0b810j; ; ; # 16.à¦âƒ¯-.•
+xn----z0d801p6kd.xn--l0b810j; â’—\u0981\u20EF-.\u08E2•; [B1, V3, V6]; xn----z0d801p6kd.xn--l0b810j; ; ; # â’—à¦âƒ¯-.•
-。ä›; -.ä›; [V3]; -.xn--xco; ; ; # -.ä›
-。ä›; -.ä›; [V3]; -.xn--xco; ; ; # -.ä›
-.xn--xco; -.ä›; [V3]; -.xn--xco; ; ; # -.ä›
-‌ñ’ƒ ï¼Žâ€; ‌ñ’ƒ .â€; [C1, C2, P1, V6]; xn--0ugz7551c.xn--1ug; ; xn--dj8y.; [P1, V6] # .
-‌ñ’ƒ .â€; ; [C1, C2, P1, V6]; xn--0ugz7551c.xn--1ug; ; xn--dj8y.; [P1, V6] # .
+\u200C񒃠.\u200D; \u200C񒃠.\u200D; [C1, C2, V6]; xn--0ugz7551c.xn--1ug; ; xn--dj8y.; [V6] # .
+\u200Cñ’ƒ .\u200D; ; [C1, C2, V6]; xn--0ugz7551c.xn--1ug; ; xn--dj8y.; [V6] # .
xn--dj8y.; ñ’ƒ .; [V6]; xn--dj8y.; ; ; # .
-xn--0ugz7551c.xn--1ug; ‌ñ’ƒ .â€; [C1, C2, V6]; xn--0ugz7551c.xn--1ug; ; ; # .
-⒈⓰󥣇。ð¹ â€ò—·¦á‚µ; ⒈⓰󥣇.ð¹ â€ò—·¦á‚µ; [B1, C2, P1, V6]; xn--tsh0nz9380h.xn--tnd969erj4psgl3e; ; xn--tsh0nz9380h.xn--tnd1990ke579c; [B1, P1, V6] # ⒈⓰.ð¹ á‚µ
-1.⓰󥣇。ð¹ â€ò—·¦á‚µ; 1.⓰󥣇.ð¹ â€ò—·¦á‚µ; [B1, C2, P1, V6]; 1.xn--svh00804k.xn--tnd969erj4psgl3e; ; 1.xn--svh00804k.xn--tnd1990ke579c; [B1, P1, V6] # 1.â“°.ð¹ á‚µ
-1.⓰󥣇。ð¹ â€ò—·¦â´•; 1.⓰󥣇.ð¹ â€ò—·¦â´•; [B1, C2, P1, V6]; 1.xn--svh00804k.xn--1ug352csp0psg45e; ; 1.xn--svh00804k.xn--dljv223ee5t2d; [B1, P1, V6] # 1.â“°.ð¹ â´•
+xn--0ugz7551c.xn--1ug; \u200Cñ’ƒ .\u200D; [C1, C2, V6]; xn--0ugz7551c.xn--1ug; ; ; # .
+⒈⓰󥣇。ð¹ \u200Dò—·¦á‚µ; ⒈⓰󥣇.ð¹ \u200Dò—·¦á‚µ; [B1, C2, V6]; xn--tsh0nz9380h.xn--tnd969erj4psgl3e; ; xn--tsh0nz9380h.xn--tnd1990ke579c; [B1, V6] # ⒈⓰.ð¹ á‚µ
+1.⓰󥣇。ð¹ \u200Dò—·¦á‚µ; 1.⓰󥣇.ð¹ \u200Dò—·¦á‚µ; [B1, C2, V6]; 1.xn--svh00804k.xn--tnd969erj4psgl3e; ; 1.xn--svh00804k.xn--tnd1990ke579c; [B1, V6] # 1.â“°.ð¹ á‚µ
+1.⓰󥣇。ð¹ \u200Dò—·¦â´•; 1.⓰󥣇.ð¹ \u200Dò—·¦â´•; [B1, C2, V6]; 1.xn--svh00804k.xn--1ug352csp0psg45e; ; 1.xn--svh00804k.xn--dljv223ee5t2d; [B1, V6] # 1.â“°.ð¹ â´•
1.xn--svh00804k.xn--dljv223ee5t2d; 1.⓰󥣇.ð¹ ò—·¦â´•; [B1, V6]; 1.xn--svh00804k.xn--dljv223ee5t2d; ; ; # 1.â“°.ð¹ â´•
-1.xn--svh00804k.xn--1ug352csp0psg45e; 1.⓰󥣇.ð¹ â€ò—·¦â´•; [B1, C2, V6]; 1.xn--svh00804k.xn--1ug352csp0psg45e; ; ; # 1.â“°.ð¹ â´•
+1.xn--svh00804k.xn--1ug352csp0psg45e; 1.⓰󥣇.ð¹ \u200Dò—·¦â´•; [B1, C2, V6]; 1.xn--svh00804k.xn--1ug352csp0psg45e; ; ; # 1.â“°.ð¹ â´•
1.xn--svh00804k.xn--tnd1990ke579c; 1.⓰󥣇.ð¹ ò—·¦á‚µ; [B1, V6]; 1.xn--svh00804k.xn--tnd1990ke579c; ; ; # 1.â“°.ð¹ á‚µ
-1.xn--svh00804k.xn--tnd969erj4psgl3e; 1.⓰󥣇.ð¹ â€ò—·¦á‚µ; [B1, C2, V6]; 1.xn--svh00804k.xn--tnd969erj4psgl3e; ; ; # 1.â“°.ð¹ á‚µ
-⒈⓰󥣇。ð¹ â€ò—·¦â´•; ⒈⓰󥣇.ð¹ â€ò—·¦â´•; [B1, C2, P1, V6]; xn--tsh0nz9380h.xn--1ug352csp0psg45e; ; xn--tsh0nz9380h.xn--dljv223ee5t2d; [B1, P1, V6] # ⒈⓰.ð¹ â´•
+1.xn--svh00804k.xn--tnd969erj4psgl3e; 1.⓰󥣇.ð¹ \u200Dò—·¦á‚µ; [B1, C2, V6]; 1.xn--svh00804k.xn--tnd969erj4psgl3e; ; ; # 1.â“°.ð¹ á‚µ
+⒈⓰󥣇。ð¹ \u200Dò—·¦â´•; ⒈⓰󥣇.ð¹ \u200Dò—·¦â´•; [B1, C2, V6]; xn--tsh0nz9380h.xn--1ug352csp0psg45e; ; xn--tsh0nz9380h.xn--dljv223ee5t2d; [B1, V6] # ⒈⓰.ð¹ â´•
xn--tsh0nz9380h.xn--dljv223ee5t2d; ⒈⓰󥣇.ð¹ ò—·¦â´•; [B1, V6]; xn--tsh0nz9380h.xn--dljv223ee5t2d; ; ; # ⒈⓰.ð¹ â´•
-xn--tsh0nz9380h.xn--1ug352csp0psg45e; ⒈⓰󥣇.ð¹ â€ò—·¦â´•; [B1, C2, V6]; xn--tsh0nz9380h.xn--1ug352csp0psg45e; ; ; # ⒈⓰.ð¹ â´•
+xn--tsh0nz9380h.xn--1ug352csp0psg45e; ⒈⓰󥣇.ð¹ \u200Dò—·¦â´•; [B1, C2, V6]; xn--tsh0nz9380h.xn--1ug352csp0psg45e; ; ; # ⒈⓰.ð¹ â´•
xn--tsh0nz9380h.xn--tnd1990ke579c; ⒈⓰󥣇.ð¹ ò—·¦á‚µ; [B1, V6]; xn--tsh0nz9380h.xn--tnd1990ke579c; ; ; # ⒈⓰.ð¹ á‚µ
-xn--tsh0nz9380h.xn--tnd969erj4psgl3e; ⒈⓰󥣇.ð¹ â€ò—·¦á‚µ; [B1, C2, V6]; xn--tsh0nz9380h.xn--tnd969erj4psgl3e; ; ; # ⒈⓰.ð¹ á‚µ
-ðž Šá ®-ß。á³åŠ¹Øð·£­; ðž Šá ®-ß.á³åŠ¹Øð·£­; [B1, B2, B3, P1, V5, V6]; xn----qfa310pg973b.xn--jfb197i791bi6x4c; ; xn---ss-21t18904a.xn--jfb197i791bi6x4c; # ðž Šá ®-ß.á³åŠ¹
-ðž Šá ®-ß。á³åŠ¹Øð·£­; ðž Šá ®-ß.á³åŠ¹Øð·£­; [B1, B2, B3, P1, V5, V6]; xn----qfa310pg973b.xn--jfb197i791bi6x4c; ; xn---ss-21t18904a.xn--jfb197i791bi6x4c; # ðž Šá ®-ß.á³åŠ¹
-ðž Šá ®-SS。á³åŠ¹Øð·£­; ðž Šá ®-ss.á³åŠ¹Øð·£­; [B1, B2, B3, P1, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
-ðž Šá ®-ss。á³åŠ¹Øð·£­; ðž Šá ®-ss.á³åŠ¹Øð·£­; [B1, B2, B3, P1, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
-ðž Šá ®-Ss。á³åŠ¹Øð·£­; ðž Šá ®-ss.á³åŠ¹Øð·£­; [B1, B2, B3, P1, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
-xn---ss-21t18904a.xn--jfb197i791bi6x4c; ðž Šá ®-ss.á³åŠ¹Øð·£­; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
-xn----qfa310pg973b.xn--jfb197i791bi6x4c; ðž Šá ®-ß.á³åŠ¹Øð·£­; [B1, B2, B3, V5, V6]; xn----qfa310pg973b.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ß.á³åŠ¹
-ðž Šá ®-SS。á³åŠ¹Øð·£­; ðž Šá ®-ss.á³åŠ¹Øð·£­; [B1, B2, B3, P1, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
-ðž Šá ®-ss。á³åŠ¹Øð·£­; ðž Šá ®-ss.á³åŠ¹Øð·£­; [B1, B2, B3, P1, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
-ðž Šá ®-Ss。á³åŠ¹Øð·£­; ðž Šá ®-ss.á³åŠ¹Øð·£­; [B1, B2, B3, P1, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
-𑇀.󠨱; ; [P1, V5, V6]; xn--wd1d.xn--k946e; ; ; # 𑇀.
+xn--tsh0nz9380h.xn--tnd969erj4psgl3e; ⒈⓰󥣇.ð¹ \u200Dò—·¦á‚µ; [B1, C2, V6]; xn--tsh0nz9380h.xn--tnd969erj4psgl3e; ; ; # ⒈⓰.ð¹ á‚µ
+ðž Šá ®-ß。\u1CD0効\u0601ð·£­; ðž Šá ®-ß.\u1CD0効\u0601ð·£­; [B1, B2, B3, V5, V6]; xn----qfa310pg973b.xn--jfb197i791bi6x4c; ; xn---ss-21t18904a.xn--jfb197i791bi6x4c; # ðž Šá ®-ß.á³åŠ¹
+ðž Šá ®-ß。\u1CD0効\u0601ð·£­; ðž Šá ®-ß.\u1CD0効\u0601ð·£­; [B1, B2, B3, V5, V6]; xn----qfa310pg973b.xn--jfb197i791bi6x4c; ; xn---ss-21t18904a.xn--jfb197i791bi6x4c; # ðž Šá ®-ß.á³åŠ¹
+ðž Šá ®-SS。\u1CD0効\u0601ð·£­; ðž Šá ®-ss.\u1CD0効\u0601ð·£­; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
+ðž Šá ®-ss。\u1CD0効\u0601ð·£­; ðž Šá ®-ss.\u1CD0効\u0601ð·£­; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
+ðž Šá ®-Ss。\u1CD0効\u0601ð·£­; ðž Šá ®-ss.\u1CD0効\u0601ð·£­; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
+xn---ss-21t18904a.xn--jfb197i791bi6x4c; ðž Šá ®-ss.\u1CD0効\u0601ð·£­; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
+xn----qfa310pg973b.xn--jfb197i791bi6x4c; ðž Šá ®-ß.\u1CD0効\u0601ð·£­; [B1, B2, B3, V5, V6]; xn----qfa310pg973b.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ß.á³åŠ¹
+ðž Šá ®-SS。\u1CD0効\u0601ð·£­; ðž Šá ®-ss.\u1CD0効\u0601ð·£­; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
+ðž Šá ®-ss。\u1CD0効\u0601ð·£­; ðž Šá ®-ss.\u1CD0効\u0601ð·£­; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
+ðž Šá ®-Ss。\u1CD0効\u0601ð·£­; ðž Šá ®-ss.\u1CD0効\u0601ð·£­; [B1, B2, B3, V5, V6]; xn---ss-21t18904a.xn--jfb197i791bi6x4c; ; ; # ðž Šá ®-ss.á³åŠ¹
+𑇀.󠨱; ; [V5, V6]; xn--wd1d.xn--k946e; ; ; # 𑇀.
xn--wd1d.xn--k946e; 𑇀.󠨱; [V5, V6]; xn--wd1d.xn--k946e; ; ; # 𑇀.
-â’3ﮈ。ðŸ˜ð¨¿ð¹†; â’3Úˆ.0ð¨¿ð¹†; [B1, P1, V6]; xn--3-jsc897t.xn--0-sc5iy3h; ; ; # â’3Úˆ.0ð¨¿
-â’3ڈ。0ð¨¿ð¹†; â’3Úˆ.0ð¨¿ð¹†; [B1, P1, V6]; xn--3-jsc897t.xn--0-sc5iy3h; ; ; # â’3Úˆ.0ð¨¿
-xn--3-jsc897t.xn--0-sc5iy3h; â’3Úˆ.0ð¨¿ð¹†; [B1, V6]; xn--3-jsc897t.xn--0-sc5iy3h; ; ; # â’3Úˆ.0ð¨¿
-Ý«ï¼–àªà¢¦ã€‚á·£; Ý«6àªà¢¦.á·£; [B1, B3, B6, V5]; xn--6-h5c06gj6c.xn--7eg; ; ; # Ý«6àªà¢¦.á·£
-Ý«6àªà¢¦ã€‚á·£; Ý«6àªà¢¦.á·£; [B1, B3, B6, V5]; xn--6-h5c06gj6c.xn--7eg; ; ; # Ý«6àªà¢¦.á·£
-xn--6-h5c06gj6c.xn--7eg; Ý«6àªà¢¦.á·£; [B1, B3, B6, V5]; xn--6-h5c06gj6c.xn--7eg; ; ; # Ý«6àªà¢¦.á·£
-Ø…-𽤞Ⴂ。ò…¤¶â€; Ø…-𽤞Ⴂ.ò…¤¶â€; [B1, B6, C2, P1, V6]; xn----0kc662fc152h.xn--1ugy3204f; ; xn----0kc662fc152h.xn--ss06b; [B1, P1, V6] # -á‚¢.
-Ø…-𽤞ⴂ。ò…¤¶â€; Ø…-𽤞ⴂ.ò…¤¶â€; [B1, B6, C2, P1, V6]; xn----0kc8501a5399e.xn--1ugy3204f; ; xn----0kc8501a5399e.xn--ss06b; [B1, P1, V6] # -â´‚.
-xn----0kc8501a5399e.xn--ss06b; ؅-𽤞ⴂ.򅤶; [B1, V6]; xn----0kc8501a5399e.xn--ss06b; ; ; # -ⴂ.
-xn----0kc8501a5399e.xn--1ugy3204f; Ø…-𽤞ⴂ.ò…¤¶â€; [B1, B6, C2, V6]; xn----0kc8501a5399e.xn--1ugy3204f; ; ; # -â´‚.
-xn----0kc662fc152h.xn--ss06b; ؅-𽤞Ⴂ.򅤶; [B1, V6]; xn----0kc662fc152h.xn--ss06b; ; ; # -Ⴂ.
-xn----0kc662fc152h.xn--1ugy3204f; Ø…-𽤞Ⴂ.ò…¤¶â€; [B1, B6, C2, V6]; xn----0kc662fc152h.xn--1ugy3204f; ; ; # -á‚¢.
-⾆.ꡈ5≯ß; 舌.ꡈ5≯ß; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß
-⾆.ꡈ5≯ß; 舌.ꡈ5≯ß; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß
-舌.ꡈ5≯ß; ; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß
-舌.ꡈ5≯ß; 舌.ꡈ5≯ß; [P1, V6]; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß
-舌.ꡈ5≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-舌.ꡈ5≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-舌.ꡈ5≯ss; ; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-舌.ꡈ5≯ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-舌.ꡈ5≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-舌.ꡈ5≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-xn--tc1a.xn--5ss-3m2a5009e; 舌.ꡈ5≯ss; [V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-xn--tc1a.xn--5-qfa988w745i; 舌.ꡈ5≯ß; [V6]; xn--tc1a.xn--5-qfa988w745i; ; ; # 舌.ꡈ5≯ß
-⾆.ꡈ5≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-⾆.ꡈ5≯SS; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-⾆.ꡈ5≯ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-⾆.ꡈ5≯ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-⾆.ꡈ5≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-⾆.ꡈ5≯Ss; 舌.ꡈ5≯ss; [P1, V6]; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
-à«8â€ï¼Žò¾‚ˆÝœ; à«8â€.ò¾‚ˆÝœ; [B1, B5, B6, C2, P1, V5, V6]; xn--8-yke534n.xn--gpb79046m; ; xn--8-yke.xn--gpb79046m; [B1, B5, B6, P1, V5, V6] # à«8.Ýœ
-à«8â€.ò¾‚ˆÝœ; ; [B1, B5, B6, C2, P1, V5, V6]; xn--8-yke534n.xn--gpb79046m; ; xn--8-yke.xn--gpb79046m; [B1, B5, B6, P1, V5, V6] # à«8.Ýœ
-xn--8-yke.xn--gpb79046m; à«8.ò¾‚ˆÝœ; [B1, B5, B6, V5, V6]; xn--8-yke.xn--gpb79046m; ; ; # à«8.Ýœ
-xn--8-yke534n.xn--gpb79046m; à«8â€.ò¾‚ˆÝœ; [B1, B5, B6, C2, V5, V6]; xn--8-yke534n.xn--gpb79046m; ; ; # à«8.Ýœ
-ò¸·†à©°â‰®ò¹“™ï¼ŽñžŽ§â·ó ¯™Ú¶; ò¸·†à©°â‰®ò¹“™.ñžŽ§7󠯙ڶ; [B5, B6, P1, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7Ú¶
-ò¸·†à©°≮ò¹“™ï¼ŽñžŽ§â·ó ¯™Ú¶; ò¸·†à©°â‰®ò¹“™.ñžŽ§7󠯙ڶ; [B5, B6, P1, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7Ú¶
-򸷆ੰ≮򹓙.񞎧7󠯙ڶ; ; [B5, B6, P1, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7ڶ
-򸷆ੰ≮򹓙.񞎧7󠯙ڶ; 򸷆ੰ≮򹓙.񞎧7󠯙ڶ; [B5, B6, P1, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7ڶ
-xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; 򸷆ੰ≮򹓙.񞎧7󠯙ڶ; [B5, B6, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7ڶ
+â’3\uFB88。ðŸ˜ð¨¿ð¹†; â’3\u0688.0ð¨¿ð¹†; [B1, V6]; xn--3-jsc897t.xn--0-sc5iy3h; ; ; # â’3Úˆ.0ð¨¿
+â’3\u0688。0ð¨¿ð¹†; â’3\u0688.0ð¨¿ð¹†; [B1, V6]; xn--3-jsc897t.xn--0-sc5iy3h; ; ; # â’3Úˆ.0ð¨¿
+xn--3-jsc897t.xn--0-sc5iy3h; â’3\u0688.0ð¨¿ð¹†; [B1, V6]; xn--3-jsc897t.xn--0-sc5iy3h; ; ; # â’3Úˆ.0ð¨¿
+\u076Bï¼–\u0A81\u08A6。\u1DE3; \u076B6\u0A81\u08A6.\u1DE3; [B1, V5]; xn--6-h5c06gj6c.xn--7eg; ; ; # Ý«6àªà¢¦.á·£
+\u076B6\u0A81\u08A6。\u1DE3; \u076B6\u0A81\u08A6.\u1DE3; [B1, V5]; xn--6-h5c06gj6c.xn--7eg; ; ; # Ý«6àªà¢¦.á·£
+xn--6-h5c06gj6c.xn--7eg; \u076B6\u0A81\u08A6.\u1DE3; [B1, V5]; xn--6-h5c06gj6c.xn--7eg; ; ; # Ý«6àªà¢¦.á·£
+\u0605-𽤞Ⴂ。򅤶\u200D; \u0605-𽤞Ⴂ.򅤶\u200D; [B1, B6, C2, V6]; xn----0kc662fc152h.xn--1ugy3204f; ; xn----0kc662fc152h.xn--ss06b; [B1, V6] # -Ⴂ.
+\u0605-𽤞ⴂ。򅤶\u200D; \u0605-𽤞ⴂ.򅤶\u200D; [B1, B6, C2, V6]; xn----0kc8501a5399e.xn--1ugy3204f; ; xn----0kc8501a5399e.xn--ss06b; [B1, V6] # -ⴂ.
+xn----0kc8501a5399e.xn--ss06b; \u0605-𽤞ⴂ.򅤶; [B1, V6]; xn----0kc8501a5399e.xn--ss06b; ; ; # -ⴂ.
+xn----0kc8501a5399e.xn--1ugy3204f; \u0605-𽤞ⴂ.򅤶\u200D; [B1, B6, C2, V6]; xn----0kc8501a5399e.xn--1ugy3204f; ; ; # -ⴂ.
+xn----0kc662fc152h.xn--ss06b; \u0605-𽤞Ⴂ.򅤶; [B1, V6]; xn----0kc662fc152h.xn--ss06b; ; ; # -Ⴂ.
+xn----0kc662fc152h.xn--1ugy3204f; \u0605-𽤞Ⴂ.򅤶\u200D; [B1, B6, C2, V6]; xn----0kc662fc152h.xn--1ugy3204f; ; ; # -Ⴂ.
+⾆.ꡈ5≯ß; 舌.ꡈ5≯ß; ; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß
+⾆.ꡈ5>\u0338ß; 舌.ꡈ5≯ß; ; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß
+舌.ꡈ5≯ß; ; ; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß
+舌.ꡈ5>\u0338ß; 舌.ꡈ5≯ß; ; xn--tc1a.xn--5-qfa988w745i; ; xn--tc1a.xn--5ss-3m2a5009e; # 舌.ꡈ5≯ß
+舌.ꡈ5>\u0338SS; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+舌.ꡈ5≯SS; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+舌.ꡈ5≯ss; ; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+舌.ꡈ5>\u0338ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+舌.ꡈ5>\u0338Ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+舌.ꡈ5≯Ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+xn--tc1a.xn--5ss-3m2a5009e; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+xn--tc1a.xn--5-qfa988w745i; 舌.ꡈ5≯ß; ; xn--tc1a.xn--5-qfa988w745i; ; ; # 舌.ꡈ5≯ß
+⾆.ꡈ5>\u0338SS; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+⾆.ꡈ5≯SS; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+⾆.ꡈ5≯ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+⾆.ꡈ5>\u0338ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+⾆.ꡈ5>\u0338Ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+⾆.ꡈ5≯Ss; 舌.ꡈ5≯ss; ; xn--tc1a.xn--5ss-3m2a5009e; ; ; # 舌.ꡈ5≯ss
+\u0ACD8\u200D.ò¾‚ˆ\u075C; \u0ACD8\u200D.ò¾‚ˆ\u075C; [B1, B5, B6, C2, V5, V6]; xn--8-yke534n.xn--gpb79046m; ; xn--8-yke.xn--gpb79046m; [B1, B5, B6, V5, V6] # à«8.Ýœ
+\u0ACD8\u200D.ò¾‚ˆ\u075C; ; [B1, B5, B6, C2, V5, V6]; xn--8-yke534n.xn--gpb79046m; ; xn--8-yke.xn--gpb79046m; [B1, B5, B6, V5, V6] # à«8.Ýœ
+xn--8-yke.xn--gpb79046m; \u0ACD8.ò¾‚ˆ\u075C; [B1, B5, B6, V5, V6]; xn--8-yke.xn--gpb79046m; ; ; # à«8.Ýœ
+xn--8-yke534n.xn--gpb79046m; \u0ACD8\u200D.ò¾‚ˆ\u075C; [B1, B5, B6, C2, V5, V6]; xn--8-yke534n.xn--gpb79046m; ; ; # à«8.Ýœ
+ò¸·†\u0A70≮ò¹“™ï¼ŽñžŽ§â·ó ¯™\u06B6; ò¸·†\u0A70≮ò¹“™.ñžŽ§7󠯙\u06B6; [B5, B6, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7Ú¶
+ò¸·†\u0A70<\u0338ò¹“™ï¼ŽñžŽ§â·ó ¯™\u06B6; ò¸·†\u0A70≮ò¹“™.ñžŽ§7󠯙\u06B6; [B5, B6, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7Ú¶
+򸷆\u0A70≮򹓙.񞎧7󠯙\u06B6; ; [B5, B6, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7ڶ
+򸷆\u0A70<\u0338򹓙.񞎧7󠯙\u06B6; 򸷆\u0A70≮򹓙.񞎧7󠯙\u06B6; [B5, B6, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7ڶ
+xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; 򸷆\u0A70≮򹓙.񞎧7󠯙\u06B6; [B5, B6, V6]; xn--ycc893jqh38rb6fa.xn--7-5uc53836ixt41c; ; ; # ੰ≮.7ڶ
𞤪.ς; ; ; xn--ie6h.xn--3xa; ; xn--ie6h.xn--4xa; # 𞤪.ς
𞤈.Σ; 𞤪.σ; ; xn--ie6h.xn--4xa; ; ; # 𞤪.σ
𞤪.σ; ; ; xn--ie6h.xn--4xa; ; ; # 𞤪.σ
@@ -3425,785 +3439,797 @@ xn--ie6h.xn--4xa; 𞤪.σ; ; xn--ie6h.xn--4xa; ; ; # 𞤪.σ
𞤈.ς; 𞤪.ς; ; xn--ie6h.xn--3xa; ; xn--ie6h.xn--4xa; # 𞤪.ς
xn--ie6h.xn--3xa; 𞤪.ς; ; xn--ie6h.xn--3xa; ; ; # 𞤪.ς
𞤪.Σ; 𞤪.σ; ; xn--ie6h.xn--4xa; ; ; # 𞤪.σ
-‌Ⴚ。ς; ‌Ⴚ.ς; [C1, P1, V6]; xn--ynd759e.xn--3xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.ς
-‌Ⴚ。ς; ‌Ⴚ.ς; [C1, P1, V6]; xn--ynd759e.xn--3xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.ς
-‌ⴚ。ς; ‌ⴚ.ς; [C1]; xn--0ug262c.xn--3xa; ; xn--ilj.xn--4xa; [] # ⴚ.ς
-‌Ⴚ。Σ; ‌Ⴚ.σ; [C1, P1, V6]; xn--ynd759e.xn--4xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.σ
-‌ⴚ。σ; ‌ⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; xn--ilj.xn--4xa; [] # ⴚ.σ
+\u200CႺ。ς; \u200CႺ.ς; [C1, V6]; xn--ynd759e.xn--3xa; ; xn--ynd.xn--4xa; [V6] # Ⴚ.ς
+\u200CႺ。ς; \u200CႺ.ς; [C1, V6]; xn--ynd759e.xn--3xa; ; xn--ynd.xn--4xa; [V6] # Ⴚ.ς
+\u200Cⴚ。ς; \u200Cⴚ.ς; [C1]; xn--0ug262c.xn--3xa; ; xn--ilj.xn--4xa; [] # ⴚ.ς
+\u200CႺ。Σ; \u200CႺ.σ; [C1, V6]; xn--ynd759e.xn--4xa; ; xn--ynd.xn--4xa; [V6] # Ⴚ.σ
+\u200Cⴚ。σ; \u200Cⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; xn--ilj.xn--4xa; [] # ⴚ.σ
xn--ilj.xn--4xa; ⴚ.σ; ; xn--ilj.xn--4xa; ; ; # ⴚ.σ
ⴚ.σ; ; ; xn--ilj.xn--4xa; ; ; # ⴚ.σ
-Ⴚ.Σ; Ⴚ.σ; [P1, V6]; xn--ynd.xn--4xa; ; ; # Ⴚ.σ
+Ⴚ.Σ; Ⴚ.σ; [V6]; xn--ynd.xn--4xa; ; ; # Ⴚ.σ
â´š.Ï‚; ; ; xn--ilj.xn--3xa; ; xn--ilj.xn--4xa; # â´š.Ï‚
-Ⴚ.ς; ; [P1, V6]; xn--ynd.xn--3xa; ; xn--ynd.xn--4xa; # Ⴚ.ς
+Ⴚ.ς; ; [V6]; xn--ynd.xn--3xa; ; xn--ynd.xn--4xa; # Ⴚ.ς
xn--ynd.xn--4xa; Ⴚ.σ; [V6]; xn--ynd.xn--4xa; ; ; # Ⴚ.σ
xn--ynd.xn--3xa; Ⴚ.ς; [V6]; xn--ynd.xn--3xa; ; ; # Ⴚ.ς
xn--ilj.xn--3xa; â´š.Ï‚; ; xn--ilj.xn--3xa; ; ; # â´š.Ï‚
-Ⴚ.σ; ; [P1, V6]; xn--ynd.xn--4xa; ; ; # Ⴚ.σ
-xn--0ug262c.xn--4xa; ‌ⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; ; # ⴚ.σ
-xn--ynd759e.xn--4xa; ‌Ⴚ.σ; [C1, V6]; xn--ynd759e.xn--4xa; ; ; # Ⴚ.σ
-xn--0ug262c.xn--3xa; ‌ⴚ.ς; [C1]; xn--0ug262c.xn--3xa; ; ; # ⴚ.ς
-xn--ynd759e.xn--3xa; ‌Ⴚ.ς; [C1, V6]; xn--ynd759e.xn--3xa; ; ; # Ⴚ.ς
-‌ⴚ。ς; ‌ⴚ.ς; [C1]; xn--0ug262c.xn--3xa; ; xn--ilj.xn--4xa; [] # ⴚ.ς
-‌Ⴚ。Σ; ‌Ⴚ.σ; [C1, P1, V6]; xn--ynd759e.xn--4xa; ; xn--ynd.xn--4xa; [P1, V6] # Ⴚ.σ
-‌ⴚ。σ; ‌ⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; xn--ilj.xn--4xa; [] # ⴚ.σ
+Ⴚ.σ; ; [V6]; xn--ynd.xn--4xa; ; ; # Ⴚ.σ
+xn--0ug262c.xn--4xa; \u200Cⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; ; # ⴚ.σ
+xn--ynd759e.xn--4xa; \u200CႺ.σ; [C1, V6]; xn--ynd759e.xn--4xa; ; ; # Ⴚ.σ
+xn--0ug262c.xn--3xa; \u200Câ´š.Ï‚; [C1]; xn--0ug262c.xn--3xa; ; ; # â´š.Ï‚
+xn--ynd759e.xn--3xa; \u200CႺ.ς; [C1, V6]; xn--ynd759e.xn--3xa; ; ; # Ⴚ.ς
+\u200Cⴚ。ς; \u200Cⴚ.ς; [C1]; xn--0ug262c.xn--3xa; ; xn--ilj.xn--4xa; [] # ⴚ.ς
+\u200CႺ。Σ; \u200CႺ.σ; [C1, V6]; xn--ynd759e.xn--4xa; ; xn--ynd.xn--4xa; [V6] # Ⴚ.σ
+\u200Cⴚ。σ; \u200Cⴚ.σ; [C1]; xn--0ug262c.xn--4xa; ; xn--ilj.xn--4xa; [] # ⴚ.σ
𞤃.ð¹¦; 𞤥.ð¹¦; [B1]; xn--de6h.xn--eo0d; ; ; # 𞤥.ð¹¦
𞤃.ð¹¦; 𞤥.ð¹¦; [B1]; xn--de6h.xn--eo0d; ; ; # 𞤥.ð¹¦
𞤥.ð¹¦; ; [B1]; xn--de6h.xn--eo0d; ; ; # 𞤥.ð¹¦
xn--de6h.xn--eo0d; 𞤥.ð¹¦; [B1]; xn--de6h.xn--eo0d; ; ; # 𞤥.ð¹¦
𞤥.ð¹¦; 𞤥.ð¹¦; [B1]; xn--de6h.xn--eo0d; ; ; # 𞤥.ð¹¦
-â€â¾•ã€‚‌Ì꥓ꡎ; â€è°·.‌꥓Ìê¡Ž; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; xn--6g3a.xn--0sa8175flwa; [V5] # è°·.꥓Ìê¡Ž
-â€â¾•ã€‚‌꥓Ìê¡Ž; â€è°·.‌꥓Ìê¡Ž; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; xn--6g3a.xn--0sa8175flwa; [V5] # è°·.꥓Ìê¡Ž
-â€è°·ã€‚‌꥓Ìê¡Ž; â€è°·.‌꥓Ìê¡Ž; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; xn--6g3a.xn--0sa8175flwa; [V5] # è°·.꥓Ìê¡Ž
-xn--6g3a.xn--0sa8175flwa; è°·.꥓Ìê¡Ž; [V5]; xn--6g3a.xn--0sa8175flwa; ; ; # è°·.꥓Ìê¡Ž
-xn--1ug0273b.xn--0sa359l6n7g13a; â€è°·.‌꥓Ìê¡Ž; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; ; # è°·.꥓Ìê¡Ž
-Úª-뉔.ðž¤â€Œ; Úª-뉔.𞤲‌; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # Úª-뉔.𞤲
-Úª-뉔.ðž¤â€Œ; Úª-뉔.𞤲‌; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # Úª-뉔.𞤲
-Úª-뉔.ðž¤â€Œ; Úª-뉔.𞤲‌; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # Úª-뉔.𞤲
-Úª-뉔.ðž¤â€Œ; Úª-뉔.𞤲‌; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # Úª-뉔.𞤲
-ڪ-뉔.𞤲‌; ڪ-뉔.𞤲‌; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲
-ڪ-뉔.𞤲‌; ; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲
-xn----guc3592k.xn--qe6h; ڪ-뉔.𞤲; [B2, B3]; xn----guc3592k.xn--qe6h; ; ; # ڪ-뉔.𞤲
-xn----guc3592k.xn--0ug7611p; ڪ-뉔.𞤲‌; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; ; # ڪ-뉔.𞤲
-ڪ-뉔.𞤲‌; ڪ-뉔.𞤲‌; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲
-ڪ-뉔.𞤲‌; ڪ-뉔.𞤲‌; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲
-񔲵5ᦛς.꣄ݻܸ᳒; 񔲵5ᦛς.꣄ݻܸ᳒; [B1, P1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; xn--5-0mb988ng603j.xn--fob7kk44dl41k; # 5ᦛς.꣄ݻܸ᳒
-񔲵5ᦛς.꣄ݻܸ᳒; 񔲵5ᦛς.꣄ݻܸ᳒; [B1, P1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; xn--5-0mb988ng603j.xn--fob7kk44dl41k; # 5ᦛς.꣄ݻܸ᳒
-񔲵5ᦛς.꣄ݻܸ᳒; ; [B1, P1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; xn--5-0mb988ng603j.xn--fob7kk44dl41k; # 5ᦛς.꣄ݻܸ᳒
-񔲵5ᦛΣ.꣄ݻܸ᳒; 񔲵5ᦛσ.꣄ݻܸ᳒; [B1, P1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
-񔲵5ᦛσ.꣄ݻܸ᳒; ; [B1, P1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
-xn--5-0mb988ng603j.xn--fob7kk44dl41k; 񔲵5ᦛσ.꣄ݻܸ᳒; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
-xn--5-ymb298ng603j.xn--fob7kk44dl41k; 񔲵5ᦛς.꣄ݻܸ᳒; [B1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛς.꣄ݻܸ᳒
-񔲵5ᦛΣ.꣄ݻܸ᳒; 񔲵5ᦛσ.꣄ݻܸ᳒; [B1, P1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
-񔲵5ᦛσ.꣄ݻܸ᳒; 񔲵5ᦛσ.꣄ݻܸ᳒; [B1, P1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
-񔲵5ᦛΣ.꣄ݻܸ᳒; 񔲵5ᦛσ.꣄ݻܸ᳒; [B1, P1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
-񔲵5ᦛσ.꣄ݻܸ᳒; 񔲵5ᦛσ.꣄ݻܸ᳒; [B1, P1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
+\u200D⾕。\u200C\u0310\uA953ê¡Ž; \u200Dè°·.\u200C\uA953\u0310ê¡Ž; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; xn--6g3a.xn--0sa8175flwa; [V5] # è°·.꥓Ìê¡Ž
+\u200D⾕。\u200C\uA953\u0310ê¡Ž; \u200Dè°·.\u200C\uA953\u0310ê¡Ž; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; xn--6g3a.xn--0sa8175flwa; [V5] # è°·.꥓Ìê¡Ž
+\u200D谷。\u200C\uA953\u0310ê¡Ž; \u200Dè°·.\u200C\uA953\u0310ê¡Ž; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; xn--6g3a.xn--0sa8175flwa; [V5] # è°·.꥓Ìê¡Ž
+xn--6g3a.xn--0sa8175flwa; è°·.\uA953\u0310ê¡Ž; [V5]; xn--6g3a.xn--0sa8175flwa; ; ; # è°·.꥓Ìê¡Ž
+xn--1ug0273b.xn--0sa359l6n7g13a; \u200Dè°·.\u200C\uA953\u0310ê¡Ž; [C1, C2]; xn--1ug0273b.xn--0sa359l6n7g13a; ; ; # è°·.꥓Ìê¡Ž
+\u06AA-뉔.ðž¤\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # Úª-뉔.𞤲
+\u06AA-뉔.ðž¤\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # Úª-뉔.𞤲
+\u06AA-뉔.ðž¤\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # Úª-뉔.𞤲
+\u06AA-뉔.ðž¤\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # Úª-뉔.𞤲
+\u06AA-뉔.𞤲\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲
+\u06AA-뉔.𞤲\u200C; ; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲
+xn----guc3592k.xn--qe6h; \u06AA-뉔.𞤲; [B2, B3]; xn----guc3592k.xn--qe6h; ; ; # ڪ-뉔.𞤲
+xn----guc3592k.xn--0ug7611p; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; ; # ڪ-뉔.𞤲
+\u06AA-뉔.𞤲\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲
+\u06AA-뉔.𞤲\u200C; \u06AA-뉔.𞤲\u200C; [B2, B3, C1]; xn----guc3592k.xn--0ug7611p; ; xn----guc3592k.xn--qe6h; [B2, B3] # ڪ-뉔.𞤲
+񔲵5ᦛς.\uA8C4\u077B\u1CD2\u0738; 񔲵5ᦛς.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; xn--5-0mb988ng603j.xn--fob7kk44dl41k; # 5ᦛς.꣄ݻܸ᳒
+񔲵5ᦛς.\uA8C4\u077B\u0738\u1CD2; 񔲵5ᦛς.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; xn--5-0mb988ng603j.xn--fob7kk44dl41k; # 5ᦛς.꣄ݻܸ᳒
+񔲵5ᦛς.\uA8C4\u077B\u0738\u1CD2; ; [B1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; xn--5-0mb988ng603j.xn--fob7kk44dl41k; # 5ᦛς.꣄ݻܸ᳒
+񔲵5ᦛΣ.\uA8C4\u077B\u0738\u1CD2; 񔲵5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
+񔲵5ᦛσ.\uA8C4\u077B\u0738\u1CD2; ; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
+xn--5-0mb988ng603j.xn--fob7kk44dl41k; 񔲵5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
+xn--5-ymb298ng603j.xn--fob7kk44dl41k; 񔲵5ᦛς.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-ymb298ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛς.꣄ݻܸ᳒
+񔲵5ᦛΣ.\uA8C4\u077B\u0738\u1CD2; 񔲵5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
+񔲵5ᦛσ.\uA8C4\u077B\u0738\u1CD2; 񔲵5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
+񔲵5ᦛΣ.\uA8C4\u077B\u1CD2\u0738; 񔲵5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
+񔲵5ᦛσ.\uA8C4\u077B\u1CD2\u0738; 񔲵5ᦛσ.\uA8C4\u077B\u0738\u1CD2; [B1, V5, V6]; xn--5-0mb988ng603j.xn--fob7kk44dl41k; ; ; # 5ᦛσ.꣄ݻܸ᳒
淽。ᠾ; 淽.ᠾ; ; xn--34w.xn--x7e; ; ; # 淽.ᠾ
xn--34w.xn--x7e; æ·½.á ¾; ; xn--34w.xn--x7e; ; ; # æ·½.á ¾
æ·½.á ¾; ; ; xn--34w.xn--x7e; ; ; # æ·½.á ¾
ð¹´ð‘˜·ã€‚-; ð¹´ð‘˜·.-; [B1, V3]; xn--so0do6k.-; ; ; # ð¹´ð‘˜·.-
xn--so0do6k.-; ð¹´ð‘˜·.-; [B1, V3]; xn--so0do6k.-; ; ; # ð¹´ð‘˜·.-
-ò¬¨©á‚³â“。𑄨; ò¬¨©á‚³â“.𑄨; [P1, V5, V6]; xn--rnd896i0j14q.xn--k80d; ; ; # Ⴓâ“.𑄨
-ò¬¨©á‚³â“。𑄨; ò¬¨©á‚³â“.𑄨; [P1, V5, V6]; xn--rnd896i0j14q.xn--k80d; ; ; # Ⴓâ“.𑄨
-ò¬¨©â´“â“。𑄨; ò¬¨©â´“â“.𑄨; [P1, V5, V6]; xn--8di78qvw32y.xn--k80d; ; ; # â´“â“.𑄨
+ò¬¨©á‚³â“。𑄨; ò¬¨©á‚³â“.𑄨; [V5, V6]; xn--rnd896i0j14q.xn--k80d; ; ; # Ⴓâ“.𑄨
+ò¬¨©á‚³â“。𑄨; ò¬¨©á‚³â“.𑄨; [V5, V6]; xn--rnd896i0j14q.xn--k80d; ; ; # Ⴓâ“.𑄨
+ò¬¨©â´“â“。𑄨; ò¬¨©â´“â“.𑄨; [V5, V6]; xn--8di78qvw32y.xn--k80d; ; ; # â´“â“.𑄨
xn--8di78qvw32y.xn--k80d; ò¬¨©â´“â“.𑄨; [V5, V6]; xn--8di78qvw32y.xn--k80d; ; ; # â´“â“.𑄨
xn--rnd896i0j14q.xn--k80d; ò¬¨©á‚³â“.𑄨; [V5, V6]; xn--rnd896i0j14q.xn--k80d; ; ; # Ⴓâ“.𑄨
-ò¬¨©â´“â“。𑄨; ò¬¨©â´“â“.𑄨; [P1, V5, V6]; xn--8di78qvw32y.xn--k80d; ; ; # â´“â“.𑄨
-‌ð¹¡ðž¤Œá‚§ï½¡ÃŸá‚£; ‌ð¹¡ðž¤®á‚§.ßႣ; [B1, C1, P1, V6]; xn--fnd599eyj4pr50g.xn--zca681f; ; xn--fnd1201kegrf.xn--ss-fek; [B1, P1, V6] # ð¹¡ðž¤®á‚§.ßႣ
-‌ð¹¡ðž¤Œá‚§ã€‚ßႣ; ‌ð¹¡ðž¤®á‚§.ßႣ; [B1, C1, P1, V6]; xn--fnd599eyj4pr50g.xn--zca681f; ; xn--fnd1201kegrf.xn--ss-fek; [B1, P1, V6] # ð¹¡ðž¤®á‚§.ßႣ
-‌ð¹¡ðž¤®â´‡ã€‚ßⴃ; ‌ð¹¡ðž¤®â´‡.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ßⴃ
-‌ð¹¡ðž¤Œá‚§ã€‚SSá‚£; ‌ð¹¡ðž¤®á‚§.ssá‚£; [B1, C1, P1, V6]; xn--fnd599eyj4pr50g.xn--ss-fek; ; xn--fnd1201kegrf.xn--ss-fek; [B1, P1, V6] # ð¹¡ðž¤®á‚§.ssá‚£
-‌ð¹¡ðž¤®â´‡ã€‚ssâ´ƒ; ‌ð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
-‌ð¹¡ðž¤Œâ´‡ã€‚Ssâ´ƒ; ‌ð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
+ò¬¨©â´“â“。𑄨; ò¬¨©â´“â“.𑄨; [V5, V6]; xn--8di78qvw32y.xn--k80d; ; ; # â´“â“.𑄨
+\u200Cð¹¡ðž¤Œá‚§ï½¡ÃŸá‚£; \u200Cð¹¡ðž¤®á‚§.ßႣ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--zca681f; ; xn--fnd1201kegrf.xn--ss-fek; [B1, V6] # ð¹¡ðž¤®á‚§.ßႣ
+\u200Cð¹¡ðž¤Œá‚§ã€‚ßႣ; \u200Cð¹¡ðž¤®á‚§.ßႣ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--zca681f; ; xn--fnd1201kegrf.xn--ss-fek; [B1, V6] # ð¹¡ðž¤®á‚§.ßႣ
+\u200Cð¹¡ðž¤®â´‡ã€‚ßⴃ; \u200Cð¹¡ðž¤®â´‡.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ßⴃ
+\u200Cð¹¡ðž¤Œá‚§ã€‚SSá‚£; \u200Cð¹¡ðž¤®á‚§.ssá‚£; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-fek; ; xn--fnd1201kegrf.xn--ss-fek; [B1, V6] # ð¹¡ðž¤®á‚§.ssá‚£
+\u200Cð¹¡ðž¤®â´‡ã€‚ssâ´ƒ; \u200Cð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
+\u200Cð¹¡ðž¤Œâ´‡ã€‚Ssâ´ƒ; \u200Cð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
xn--ykj9323eegwf.xn--ss-151a; ð¹¡ðž¤®â´‡.ssâ´ƒ; [B1]; xn--ykj9323eegwf.xn--ss-151a; ; ; # ð¹¡ðž¤®â´‡.ssâ´ƒ
-xn--0ug332c3q0pr56g.xn--ss-151a; ‌ð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; ; # ð¹¡ðž¤®â´‡.ssâ´ƒ
+xn--0ug332c3q0pr56g.xn--ss-151a; \u200Cð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; ; # ð¹¡ðž¤®â´‡.ssâ´ƒ
xn--fnd1201kegrf.xn--ss-fek; ð¹¡ðž¤®á‚§.ssá‚£; [B1, V6]; xn--fnd1201kegrf.xn--ss-fek; ; ; # ð¹¡ðž¤®á‚§.ssá‚£
-xn--fnd599eyj4pr50g.xn--ss-fek; ‌ð¹¡ðž¤®á‚§.ssá‚£; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-fek; ; ; # ð¹¡ðž¤®á‚§.ssá‚£
-xn--0ug332c3q0pr56g.xn--zca417t; ‌ð¹¡ðž¤®â´‡.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; ; # ð¹¡ðž¤®â´‡.ßⴃ
-xn--fnd599eyj4pr50g.xn--zca681f; ‌ð¹¡ðž¤®á‚§.ßႣ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--zca681f; ; ; # ð¹¡ðž¤®á‚§.ßႣ
-‌ð¹¡ðž¤®â´‡ï½¡ÃŸâ´ƒ; ‌ð¹¡ðž¤®â´‡.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ßⴃ
-‌ð¹¡ðž¤Œá‚§ï½¡SSá‚£; ‌ð¹¡ðž¤®á‚§.ssá‚£; [B1, C1, P1, V6]; xn--fnd599eyj4pr50g.xn--ss-fek; ; xn--fnd1201kegrf.xn--ss-fek; [B1, P1, V6] # ð¹¡ðž¤®á‚§.ssá‚£
-‌ð¹¡ðž¤®â´‡ï½¡ssâ´ƒ; ‌ð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
-‌ð¹¡ðž¤Œâ´‡ï½¡Ssâ´ƒ; ‌ð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
-‌ð¹¡ðž¤Œâ´‡ã€‚ßⴃ; ‌ð¹¡ðž¤®â´‡.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ßⴃ
-‌ð¹¡ðž¤Œâ´‡ã€‚ssâ´ƒ; ‌ð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
-‌ð¹¡ðž¤Œá‚§ã€‚Ssâ´ƒ; ‌ð¹¡ðž¤®á‚§.ssâ´ƒ; [B1, C1, P1, V6]; xn--fnd599eyj4pr50g.xn--ss-151a; ; xn--fnd1201kegrf.xn--ss-151a; [B1, P1, V6] # ð¹¡ðž¤®á‚§.ssâ´ƒ
+xn--fnd599eyj4pr50g.xn--ss-fek; \u200Cð¹¡ðž¤®á‚§.ssá‚£; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-fek; ; ; # ð¹¡ðž¤®á‚§.ssá‚£
+xn--0ug332c3q0pr56g.xn--zca417t; \u200Cð¹¡ðž¤®â´‡.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; ; # ð¹¡ðž¤®â´‡.ßⴃ
+xn--fnd599eyj4pr50g.xn--zca681f; \u200Cð¹¡ðž¤®á‚§.ßႣ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--zca681f; ; ; # ð¹¡ðž¤®á‚§.ßႣ
+\u200Cð¹¡ðž¤®â´‡ï½¡ÃŸâ´ƒ; \u200Cð¹¡ðž¤®â´‡.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ßⴃ
+\u200Cð¹¡ðž¤Œá‚§ï½¡SSá‚£; \u200Cð¹¡ðž¤®á‚§.ssá‚£; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-fek; ; xn--fnd1201kegrf.xn--ss-fek; [B1, V6] # ð¹¡ðž¤®á‚§.ssá‚£
+\u200Cð¹¡ðž¤®â´‡ï½¡ssâ´ƒ; \u200Cð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
+\u200Cð¹¡ðž¤Œâ´‡ï½¡Ssâ´ƒ; \u200Cð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
+\u200Cð¹¡ðž¤Œâ´‡ã€‚ßⴃ; \u200Cð¹¡ðž¤®â´‡.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ßⴃ
+\u200Cð¹¡ðž¤Œâ´‡ã€‚ssâ´ƒ; \u200Cð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
+\u200Cð¹¡ðž¤Œá‚§ã€‚Ssâ´ƒ; \u200Cð¹¡ðž¤®á‚§.ssâ´ƒ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-151a; ; xn--fnd1201kegrf.xn--ss-151a; [B1, V6] # ð¹¡ðž¤®á‚§.ssâ´ƒ
xn--fnd1201kegrf.xn--ss-151a; ð¹¡ðž¤®á‚§.ssâ´ƒ; [B1, V6]; xn--fnd1201kegrf.xn--ss-151a; ; ; # ð¹¡ðž¤®á‚§.ssâ´ƒ
-xn--fnd599eyj4pr50g.xn--ss-151a; ‌ð¹¡ðž¤®á‚§.ssâ´ƒ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-151a; ; ; # ð¹¡ðž¤®á‚§.ssâ´ƒ
-‌ð¹¡ðž¤Œâ´‡ï½¡ÃŸâ´ƒ; ‌ð¹¡ðž¤®â´‡.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ßⴃ
-‌ð¹¡ðž¤Œâ´‡ï½¡ssâ´ƒ; ‌ð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
-‌ð¹¡ðž¤Œá‚§ï½¡Ssâ´ƒ; ‌ð¹¡ðž¤®á‚§.ssâ´ƒ; [B1, C1, P1, V6]; xn--fnd599eyj4pr50g.xn--ss-151a; ; xn--fnd1201kegrf.xn--ss-151a; [B1, P1, V6] # ð¹¡ðž¤®á‚§.ssâ´ƒ
-៿。𞬳; ៿.𞬳; [P1, V6]; xn--45e.xn--et6h; ; ; # .
-៿。𞬳; ៿.𞬳; [P1, V6]; xn--45e.xn--et6h; ; ; # .
-xn--45e.xn--et6h; ៿.𞬳; [V6]; xn--45e.xn--et6h; ; ; # .
-Ù’â€ï½¡à³ð‘š³; Ù’â€.à³ð‘š³; [C2, V5]; xn--uhb882k.xn--8tc4527k; ; xn--uhb.xn--8tc4527k; [V5] # Ù’.à³ð‘š³
-Ù’â€ã€‚à³ð‘š³; Ù’â€.à³ð‘š³; [C2, V5]; xn--uhb882k.xn--8tc4527k; ; xn--uhb.xn--8tc4527k; [V5] # Ù’.à³ð‘š³
-xn--uhb.xn--8tc4527k; Ù’.à³ð‘š³; [V5]; xn--uhb.xn--8tc4527k; ; ; # Ù’.à³ð‘š³
-xn--uhb882k.xn--8tc4527k; Ù’â€.à³ð‘š³; [C2, V5]; xn--uhb882k.xn--8tc4527k; ; ; # Ù’.à³ð‘š³
--≠ᠻ.ݭ𞥃≮󟷺; -≠ᠻ.ݭ𞥃≮󟷺; [B1, B2, B3, P1, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
--≠ᠻ.ݭ𞥃≮󟷺; -≠ᠻ.ݭ𞥃≮󟷺; [B1, B2, B3, P1, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
--≠ᠻ.ݭ𞥃≮󟷺; ; [B1, B2, B3, P1, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
--≠ᠻ.ݭ𞥃≮󟷺; -≠ᠻ.ݭ𞥃≮󟷺; [B1, B2, B3, P1, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
--≠ᠻ.ݭ𞤡≮󟷺; -≠ᠻ.ݭ𞥃≮󟷺; [B1, B2, B3, P1, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
--≠ᠻ.ݭ𞤡≮󟷺; -≠ᠻ.ݭ𞥃≮󟷺; [B1, B2, B3, P1, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
-xn----g6j886c.xn--xpb049kk353abj99f; -≠ᠻ.ݭ𞥃≮󟷺; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
--≠ᠻ.ݭ𞤡≮󟷺; -≠ᠻ.ݭ𞥃≮󟷺; [B1, B2, B3, P1, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
--≠ᠻ.ݭ𞤡≮󟷺; -≠ᠻ.ݭ𞥃≮󟷺; [B1, B2, B3, P1, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
-󠰆≯޵ð»ªï¼ŽòŠ¥•â‰®ð‘†à¡Œ; 󠰆≯޵ð»ª.òŠ¥•â‰®ð‘†à¡Œ; [B1, B5, B6, P1, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮ð‘†à¡Œ
-ó °†≯޵ð»ªï¼ŽòŠ¥•≮ð‘†à¡Œ; 󠰆≯޵ð»ª.òŠ¥•â‰®ð‘†à¡Œ; [B1, B5, B6, P1, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮ð‘†à¡Œ
-󠰆≯޵ð»ª.òŠ¥•â‰®ð‘†à¡Œ; ; [B1, B5, B6, P1, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮ð‘†à¡Œ
-ó °†≯޵ð»ª.òŠ¥•≮ð‘†à¡Œ; 󠰆≯޵ð»ª.òŠ¥•â‰®ð‘†à¡Œ; [B1, B5, B6, P1, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮ð‘†à¡Œ
-xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; 󠰆≯޵ð»ª.òŠ¥•â‰®ð‘†à¡Œ; [B1, B5, B6, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮ð‘†à¡Œ
-≠󦋂.Ø€à¯-Ú¹; ; [B1, P1, V6]; xn--1ch22084l.xn----qkc07co6n; ; ; # ≠.à¯-Ú¹
-≠󦋂.Ø€à¯-Ú¹; ≠󦋂.Ø€à¯-Ú¹; [B1, P1, V6]; xn--1ch22084l.xn----qkc07co6n; ; ; # ≠.à¯-Ú¹
-xn--1ch22084l.xn----qkc07co6n; ≠󦋂.Ø€à¯-Ú¹; [B1, V6]; xn--1ch22084l.xn----qkc07co6n; ; ; # ≠.à¯-Ú¹
-áŸó £â‰ ï½¡ð¹¼ð‹¤; áŸó £â‰ .ð¹¼ð‹¤; [B1, P1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
-áŸó £≠。ð¹¼ð‹¤; áŸó £â‰ .ð¹¼ð‹¤; [B1, P1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
-áŸó £â‰ ã€‚ð¹¼ð‹¤; áŸó £â‰ .ð¹¼ð‹¤; [B1, P1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
-áŸó £≠。ð¹¼ð‹¤; áŸó £â‰ .ð¹¼ð‹¤; [B1, P1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
-xn--54e694cn389z.xn--787ct8r; áŸó £â‰ .ð¹¼ð‹¤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
-ß𰀻ñ†¬—。ð©¨ðŸ•®ÃŸ; ß𰀻ñ†¬—.ð©¨ðŸ•®ÃŸ; [P1, V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; xn--ss-jl59biy67d.xn--ss-4d11aw87d; # ß𰀻.ð©¨ðŸ•®ÃŸ
-ß𰀻ñ†¬—。ð©¨ðŸ•®ÃŸ; ß𰀻ñ†¬—.ð©¨ðŸ•®ÃŸ; [P1, V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; xn--ss-jl59biy67d.xn--ss-4d11aw87d; # ß𰀻.ð©¨ðŸ•®ÃŸ
-SSð°€»ñ†¬—。ð©¨ðŸ•®SS; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
-ssð°€»ñ†¬—。ð©¨ðŸ•®ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
-Ssð°€»ñ†¬—。ð©¨ðŸ•®Ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+xn--fnd599eyj4pr50g.xn--ss-151a; \u200Cð¹¡ðž¤®á‚§.ssâ´ƒ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-151a; ; ; # ð¹¡ðž¤®á‚§.ssâ´ƒ
+\u200Cð¹¡ðž¤Œâ´‡ï½¡ÃŸâ´ƒ; \u200Cð¹¡ðž¤®â´‡.ßⴃ; [B1, C1]; xn--0ug332c3q0pr56g.xn--zca417t; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ßⴃ
+\u200Cð¹¡ðž¤Œâ´‡ï½¡ssâ´ƒ; \u200Cð¹¡ðž¤®â´‡.ssâ´ƒ; [B1, C1]; xn--0ug332c3q0pr56g.xn--ss-151a; ; xn--ykj9323eegwf.xn--ss-151a; [B1] # ð¹¡ðž¤®â´‡.ssâ´ƒ
+\u200Cð¹¡ðž¤Œá‚§ï½¡Ssâ´ƒ; \u200Cð¹¡ðž¤®á‚§.ssâ´ƒ; [B1, C1, V6]; xn--fnd599eyj4pr50g.xn--ss-151a; ; xn--fnd1201kegrf.xn--ss-151a; [B1, V6] # ð¹¡ðž¤®á‚§.ssâ´ƒ
+\u17FF。𞬳; \u17FF.𞬳; [V6]; xn--45e.xn--et6h; ; ; # .
+\u17FF。𞬳; \u17FF.𞬳; [V6]; xn--45e.xn--et6h; ; ; # .
+xn--45e.xn--et6h; \u17FF.𞬳; [V6]; xn--45e.xn--et6h; ; ; # .
+\u0652\u200D。\u0CCDð‘š³; \u0652\u200D.\u0CCDð‘š³; [C2, V5]; xn--uhb882k.xn--8tc4527k; ; xn--uhb.xn--8tc4527k; [V5] # Ù’.à³ð‘š³
+\u0652\u200D。\u0CCDð‘š³; \u0652\u200D.\u0CCDð‘š³; [C2, V5]; xn--uhb882k.xn--8tc4527k; ; xn--uhb.xn--8tc4527k; [V5] # Ù’.à³ð‘š³
+xn--uhb.xn--8tc4527k; \u0652.\u0CCDð‘š³; [V5]; xn--uhb.xn--8tc4527k; ; ; # Ù’.à³ð‘š³
+xn--uhb882k.xn--8tc4527k; \u0652\u200D.\u0CCDð‘š³; [C2, V5]; xn--uhb882k.xn--8tc4527k; ; ; # Ù’.à³ð‘š³
+-≠ᠻ.\u076D𞥃≮󟷺; -≠ᠻ.\u076D𞥃≮󟷺; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
+-=\u0338ᠻ.\u076D𞥃<\u0338󟷺; -≠ᠻ.\u076D𞥃≮󟷺; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
+-≠ᠻ.\u076D𞥃≮󟷺; ; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
+-=\u0338ᠻ.\u076D𞥃<\u0338󟷺; -≠ᠻ.\u076D𞥃≮󟷺; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
+-=\u0338ᠻ.\u076D𞤡<\u0338󟷺; -≠ᠻ.\u076D𞥃≮󟷺; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
+-≠ᠻ.\u076D𞤡≮󟷺; -≠ᠻ.\u076D𞥃≮󟷺; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
+xn----g6j886c.xn--xpb049kk353abj99f; -≠ᠻ.\u076D𞥃≮󟷺; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
+-=\u0338ᠻ.\u076D𞤡<\u0338󟷺; -≠ᠻ.\u076D𞥃≮󟷺; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
+-≠ᠻ.\u076D𞤡≮󟷺; -≠ᠻ.\u076D𞥃≮󟷺; [B1, B2, B3, V3, V6]; xn----g6j886c.xn--xpb049kk353abj99f; ; ; # -≠ᠻ.ݭ𞥃≮
+󠰆≯\u07B5ð»ªï¼ŽòŠ¥•â‰®ð‘†\u084C; 󠰆≯\u07B5ð»ª.òŠ¥•â‰®ð‘†\u084C; [B1, B5, B6, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮ð‘†à¡Œ
+ó °†>\u0338\u07B5ð»ªï¼ŽòŠ¥•<\u0338ð‘†\u084C; 󠰆≯\u07B5ð»ª.òŠ¥•â‰®ð‘†\u084C; [B1, B5, B6, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮ð‘†à¡Œ
+󠰆≯\u07B5ð»ª.òŠ¥•â‰®ð‘†\u084C; ; [B1, B5, B6, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮ð‘†à¡Œ
+ó °†>\u0338\u07B5ð»ª.òŠ¥•<\u0338ð‘†\u084C; 󠰆≯\u07B5ð»ª.òŠ¥•â‰®ð‘†\u084C; [B1, B5, B6, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮ð‘†à¡Œ
+xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; 󠰆≯\u07B5ð»ª.òŠ¥•â‰®ð‘†\u084C; [B1, B5, B6, V6]; xn--zrb797kdm1oes34i.xn--bwb394k8k2o25n6d; ; ; # ≯.≮ð‘†à¡Œ
+≠󦋂.\u0600\u0BCD-\u06B9; ; [B1, V6]; xn--1ch22084l.xn----qkc07co6n; ; ; # ≠.à¯-Ú¹
+=\u0338󦋂.\u0600\u0BCD-\u06B9; ≠󦋂.\u0600\u0BCD-\u06B9; [B1, V6]; xn--1ch22084l.xn----qkc07co6n; ; ; # ≠.à¯-Ú¹
+xn--1ch22084l.xn----qkc07co6n; ≠󦋂.\u0600\u0BCD-\u06B9; [B1, V6]; xn--1ch22084l.xn----qkc07co6n; ; ; # ≠.à¯-Ú¹
+\u17DDó £â‰ ï½¡ð¹¼ð‹¤; \u17DDó £â‰ .ð¹¼ð‹¤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
+\u17DDó £=\u0338。ð¹¼ð‹¤; \u17DDó £â‰ .ð¹¼ð‹¤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
+\u17DDó £â‰ ã€‚ð¹¼ð‹¤; \u17DDó £â‰ .ð¹¼ð‹¤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
+\u17DDó £=\u0338。ð¹¼ð‹¤; \u17DDó £â‰ .ð¹¼ð‹¤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
+xn--54e694cn389z.xn--787ct8r; \u17DDó £â‰ .ð¹¼ð‹¤; [B1, V5, V6]; xn--54e694cn389z.xn--787ct8r; ; ; # áŸâ‰ .ð¹¼ð‹¤
+ß𰀻ñ†¬—。ð©¨ðŸ•®ÃŸ; ß𰀻ñ†¬—.ð©¨ðŸ•®ÃŸ; [V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; xn--ss-jl59biy67d.xn--ss-4d11aw87d; # ß𰀻.ð©¨ðŸ•®ÃŸ
+ß𰀻ñ†¬—。ð©¨ðŸ•®ÃŸ; ß𰀻ñ†¬—.ð©¨ðŸ•®ÃŸ; [V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; xn--ss-jl59biy67d.xn--ss-4d11aw87d; # ß𰀻.ð©¨ðŸ•®ÃŸ
+SSð°€»ñ†¬—。ð©¨ðŸ•®SS; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+ssð°€»ñ†¬—。ð©¨ðŸ•®ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+Ssð°€»ñ†¬—。ð©¨ðŸ•®Ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
xn--ss-jl59biy67d.xn--ss-4d11aw87d; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
xn--zca20040bgrkh.xn--zca3653v86qa; ß𰀻ñ†¬—.ð©¨ðŸ•®ÃŸ; [V5, V6]; xn--zca20040bgrkh.xn--zca3653v86qa; ; ; # ß𰀻.ð©¨ðŸ•®ÃŸ
-SSð°€»ñ†¬—。ð©¨ðŸ•®SS; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
-ssð°€»ñ†¬—。ð©¨ðŸ•®ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
-Ssð°€»ñ†¬—。ð©¨ðŸ•®Ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [P1, V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
-â€ã€‚‌; â€.‌; [C1, C2]; xn--1ug.xn--0ug; ; .; [A4_2] # .
-xn--1ug.xn--0ug; â€.‌; [C1, C2]; xn--1ug.xn--0ug; ; ; # .
-Òƒð­žâ€.ឹ𞯌òŸ©š; ; [B1, C2, P1, V5, V6]; xn--m3a412lrr0o.xn--43e8670vmd79b; ; xn--m3a6965k.xn--43e8670vmd79b; [B1, P1, V5, V6] # Òƒð­ž.áž¹
-xn--m3a6965k.xn--43e8670vmd79b; Òƒð­ž.ឹ𞯌òŸ©š; [B1, V5, V6]; xn--m3a6965k.xn--43e8670vmd79b; ; ; # Òƒð­ž.áž¹
-xn--m3a412lrr0o.xn--43e8670vmd79b; Òƒð­žâ€.ឹ𞯌òŸ©š; [B1, C2, V5, V6]; xn--m3a412lrr0o.xn--43e8670vmd79b; ; ; # Òƒð­ž.áž¹
-‌ð ¨â€Œä¸´ã€‚ê¡¢ò„·žâ¶ð¹£; ‌ð ¨â€Œä¸´.ê¡¢ò„·žâ¶ð¹£; [B1, B5, B6, C1, P1, V6]; xn--0uga2656aop9k.xn--uojv340bk71c99u9f; ; xn--miq9646b.xn--uojv340bk71c99u9f; [B2, B3, B5, B6, P1, V6] # ð ¨ä¸´.ê¡¢â¶ð¹£
+SSð°€»ñ†¬—。ð©¨ðŸ•®SS; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+ssð°€»ñ†¬—。ð©¨ðŸ•®ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+Ssð°€»ñ†¬—。ð©¨ðŸ•®Ss; ssð°€»ñ†¬—.ð©¨ðŸ•®ss; [V5, V6]; xn--ss-jl59biy67d.xn--ss-4d11aw87d; ; ; # ssð°€».ð©¨ðŸ•®ss
+\u200D。\u200C; \u200D.\u200C; [C1, C2]; xn--1ug.xn--0ug; ; .; [A4_2] # .
+xn--1ug.xn--0ug; \u200D.\u200C; [C1, C2]; xn--1ug.xn--0ug; ; ; # .
+\u0483ð­ž\u200D.\u17B9𞯌òŸ©š; ; [B1, C2, V5, V6]; xn--m3a412lrr0o.xn--43e8670vmd79b; ; xn--m3a6965k.xn--43e8670vmd79b; [B1, V5, V6] # Òƒð­ž.áž¹
+xn--m3a6965k.xn--43e8670vmd79b; \u0483ð­ž.\u17B9𞯌òŸ©š; [B1, V5, V6]; xn--m3a6965k.xn--43e8670vmd79b; ; ; # Òƒð­ž.áž¹
+xn--m3a412lrr0o.xn--43e8670vmd79b; \u0483ð­ž\u200D.\u17B9𞯌òŸ©š; [B1, C2, V5, V6]; xn--m3a412lrr0o.xn--43e8670vmd79b; ; ; # Òƒð­ž.áž¹
+\u200Cð ¨\u200C临。ꡢò„·žâ¶ð¹£; \u200Cð ¨\u200C临.ê¡¢ò„·žâ¶ð¹£; [B1, B5, B6, C1, V6]; xn--0uga2656aop9k.xn--uojv340bk71c99u9f; ; xn--miq9646b.xn--uojv340bk71c99u9f; [B2, B3, B5, B6, V6] # ð ¨ä¸´.ê¡¢â¶ð¹£
xn--miq9646b.xn--uojv340bk71c99u9f; ð ¨ä¸´.ê¡¢ò„·žâ¶ð¹£; [B2, B3, B5, B6, V6]; xn--miq9646b.xn--uojv340bk71c99u9f; ; ; # ð ¨ä¸´.ê¡¢â¶ð¹£
-xn--0uga2656aop9k.xn--uojv340bk71c99u9f; ‌ð ¨â€Œä¸´.ê¡¢ò„·žâ¶ð¹£; [B1, B5, B6, C1, V6]; xn--0uga2656aop9k.xn--uojv340bk71c99u9f; ; ; # ð ¨ä¸´.ê¡¢â¶ð¹£
-󠑘.󠄮; 󠑘.; [P1, V6]; xn--s136e.; ; ; # .
-󠑘.󠄮; 󠑘.; [P1, V6]; xn--s136e.; ; ; # .
+xn--0uga2656aop9k.xn--uojv340bk71c99u9f; \u200Cð ¨\u200C临.ê¡¢ò„·žâ¶ð¹£; [B1, B5, B6, C1, V6]; xn--0uga2656aop9k.xn--uojv340bk71c99u9f; ; ; # ð ¨ä¸´.ê¡¢â¶ð¹£
+󠑘.󠄮; 󠑘.; [V6]; xn--s136e.; ; ; # .
+󠑘.󠄮; 󠑘.; [V6]; xn--s136e.; ; ; # .
xn--s136e.; 󠑘.; [V6]; xn--s136e.; ; ; # .
-ð«„àµï¼Žê«¶; ð«„àµ.꫶; [B1, B3, B6, V5]; xn--wxc7880k.xn--2v9a; ; ; # ð«„àµ.꫶
-ð«„àµ.꫶; ; [B1, B3, B6, V5]; xn--wxc7880k.xn--2v9a; ; ; # ð«„àµ.꫶
-xn--wxc7880k.xn--2v9a; ð«„àµ.꫶; [B1, B3, B6, V5]; xn--wxc7880k.xn--2v9a; ; ; # ð«„àµ.꫶
-ꦷóµ™ë©¹ã€‚⒛󠨇; ꦷóµ™ë©¹.⒛󠨇; [P1, V5, V6]; xn--ym9av13acp85w.xn--dth22121k; ; ; # ꦷ멹.â’›
-ꦷóµ™á„†á…§á†°ã€‚⒛󠨇; ꦷóµ™ë©¹.⒛󠨇; [P1, V5, V6]; xn--ym9av13acp85w.xn--dth22121k; ; ; # ꦷ멹.â’›
-ꦷóµ™ë©¹ã€‚20.󠨇; ꦷóµ™ë©¹.20.󠨇; [P1, V5, V6]; xn--ym9av13acp85w.20.xn--d846e; ; ; # ꦷ멹.20.
-ꦷóµ™á„†á…§á†°ã€‚20.󠨇; ꦷóµ™ë©¹.20.󠨇; [P1, V5, V6]; xn--ym9av13acp85w.20.xn--d846e; ; ; # ꦷ멹.20.
-xn--ym9av13acp85w.20.xn--d846e; ꦷóµ™ë©¹.20.󠨇; [V5, V6]; xn--ym9av13acp85w.20.xn--d846e; ; ; # ꦷ멹.20.
-xn--ym9av13acp85w.xn--dth22121k; ꦷóµ™ë©¹.⒛󠨇; [V5, V6]; xn--ym9av13acp85w.xn--dth22121k; ; ; # ꦷ멹.â’›
-Ⴅ󲬹릖󠶚.Ý·ð¹³â’Š; ; [B4, B6, P1, V6]; xn--dnd2167fnet0io02g.xn--7pb000mwm4n; ; ; # Ⴅ릖.Ý·ð¹³â’Š
-Ⴅ󲬹릖󠶚.Ý·ð¹³â’Š; Ⴅ󲬹릖󠶚.Ý·ð¹³â’Š; [B4, B6, P1, V6]; xn--dnd2167fnet0io02g.xn--7pb000mwm4n; ; ; # Ⴅ릖.Ý·ð¹³â’Š
-Ⴅ󲬹릖󠶚.Ý·ð¹³3.; ; [B4, B6, P1, V6]; xn--dnd2167fnet0io02g.xn--3-55c6803r.; ; ; # Ⴅ릖.Ý·ð¹³3.
-Ⴅ󲬹릖󠶚.Ý·ð¹³3.; Ⴅ󲬹릖󠶚.Ý·ð¹³3.; [B4, B6, P1, V6]; xn--dnd2167fnet0io02g.xn--3-55c6803r.; ; ; # Ⴅ릖.Ý·ð¹³3.
-ⴅ󲬹릖󠶚.Ý·ð¹³3.; ⴅ󲬹릖󠶚.Ý·ð¹³3.; [B4, B6, P1, V6]; xn--wkj8016bne45io02g.xn--3-55c6803r.; ; ; # ⴅ릖.Ý·ð¹³3.
-ⴅ󲬹릖󠶚.Ý·ð¹³3.; ; [B4, B6, P1, V6]; xn--wkj8016bne45io02g.xn--3-55c6803r.; ; ; # ⴅ릖.Ý·ð¹³3.
-xn--wkj8016bne45io02g.xn--3-55c6803r.; ⴅ󲬹릖󠶚.Ý·ð¹³3.; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--3-55c6803r.; ; ; # ⴅ릖.Ý·ð¹³3.
-xn--dnd2167fnet0io02g.xn--3-55c6803r.; Ⴅ󲬹릖󠶚.Ý·ð¹³3.; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--3-55c6803r.; ; ; # Ⴅ릖.Ý·ð¹³3.
-ⴅ󲬹릖󠶚.Ý·ð¹³â’Š; ⴅ󲬹릖󠶚.Ý·ð¹³â’Š; [B4, B6, P1, V6]; xn--wkj8016bne45io02g.xn--7pb000mwm4n; ; ; # ⴅ릖.Ý·ð¹³â’Š
-ⴅ󲬹릖󠶚.Ý·ð¹³â’Š; ; [B4, B6, P1, V6]; xn--wkj8016bne45io02g.xn--7pb000mwm4n; ; ; # ⴅ릖.Ý·ð¹³â’Š
-xn--wkj8016bne45io02g.xn--7pb000mwm4n; ⴅ󲬹릖󠶚.Ý·ð¹³â’Š; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--7pb000mwm4n; ; ; # ⴅ릖.Ý·ð¹³â’Š
-xn--dnd2167fnet0io02g.xn--7pb000mwm4n; Ⴅ󲬹릖󠶚.Ý·ð¹³â’Š; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--7pb000mwm4n; ; ; # Ⴅ릖.Ý·ð¹³â’Š
-‌。︒; ‌.︒; [C1, P1, V6]; xn--0ug.xn--y86c; ; .xn--y86c; [P1, V6, A4_2] # .︒
-‌。。; ‌..; [C1, X4_2]; xn--0ug..; [C1, A4_2]; ..; [A4_2] # ..
+ð«„\u0D4D.\uAAF6; ð«„\u0D4D.\uAAF6; [B1, V5]; xn--wxc7880k.xn--2v9a; ; ; # ð«„àµ.꫶
+ð«„\u0D4D.\uAAF6; ; [B1, V5]; xn--wxc7880k.xn--2v9a; ; ; # ð«„àµ.꫶
+xn--wxc7880k.xn--2v9a; ð«„\u0D4D.\uAAF6; [B1, V5]; xn--wxc7880k.xn--2v9a; ; ; # ð«„àµ.꫶
+\uA9B7óµ™ë©¹ã€‚⒛󠨇; \uA9B7óµ™ë©¹.⒛󠨇; [V5, V6]; xn--ym9av13acp85w.xn--dth22121k; ; ; # ꦷ멹.â’›
+\uA9B7óµ™á„†á…§á†°ã€‚⒛󠨇; \uA9B7óµ™ë©¹.⒛󠨇; [V5, V6]; xn--ym9av13acp85w.xn--dth22121k; ; ; # ꦷ멹.â’›
+\uA9B7óµ™ë©¹ã€‚20.󠨇; \uA9B7óµ™ë©¹.20.󠨇; [V5, V6]; xn--ym9av13acp85w.20.xn--d846e; ; ; # ꦷ멹.20.
+\uA9B7óµ™á„†á…§á†°ã€‚20.󠨇; \uA9B7óµ™ë©¹.20.󠨇; [V5, V6]; xn--ym9av13acp85w.20.xn--d846e; ; ; # ꦷ멹.20.
+xn--ym9av13acp85w.20.xn--d846e; \uA9B7óµ™ë©¹.20.󠨇; [V5, V6]; xn--ym9av13acp85w.20.xn--d846e; ; ; # ꦷ멹.20.
+xn--ym9av13acp85w.xn--dth22121k; \uA9B7óµ™ë©¹.⒛󠨇; [V5, V6]; xn--ym9av13acp85w.xn--dth22121k; ; ; # ꦷ멹.â’›
+Ⴅ󲬹릖󠶚.\u0777ð¹³â’Š; ; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--7pb000mwm4n; ; ; # Ⴅ릖.Ý·ð¹³â’Š
+Ⴅ󲬹릖󠶚.\u0777ð¹³â’Š; Ⴅ󲬹릖󠶚.\u0777ð¹³â’Š; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--7pb000mwm4n; ; ; # Ⴅ릖.Ý·ð¹³â’Š
+Ⴅ󲬹릖󠶚.\u0777ð¹³3.; ; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--3-55c6803r.; ; ; # Ⴅ릖.Ý·ð¹³3.
+Ⴅ󲬹릖󠶚.\u0777ð¹³3.; Ⴅ󲬹릖󠶚.\u0777ð¹³3.; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--3-55c6803r.; ; ; # Ⴅ릖.Ý·ð¹³3.
+ⴅ󲬹릖󠶚.\u0777ð¹³3.; ⴅ󲬹릖󠶚.\u0777ð¹³3.; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--3-55c6803r.; ; ; # ⴅ릖.Ý·ð¹³3.
+ⴅ󲬹릖󠶚.\u0777ð¹³3.; ; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--3-55c6803r.; ; ; # ⴅ릖.Ý·ð¹³3.
+xn--wkj8016bne45io02g.xn--3-55c6803r.; ⴅ󲬹릖󠶚.\u0777ð¹³3.; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--3-55c6803r.; ; ; # ⴅ릖.Ý·ð¹³3.
+xn--dnd2167fnet0io02g.xn--3-55c6803r.; Ⴅ󲬹릖󠶚.\u0777ð¹³3.; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--3-55c6803r.; ; ; # Ⴅ릖.Ý·ð¹³3.
+ⴅ󲬹릖󠶚.\u0777ð¹³â’Š; ⴅ󲬹릖󠶚.\u0777ð¹³â’Š; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--7pb000mwm4n; ; ; # ⴅ릖.Ý·ð¹³â’Š
+ⴅ󲬹릖󠶚.\u0777ð¹³â’Š; ; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--7pb000mwm4n; ; ; # ⴅ릖.Ý·ð¹³â’Š
+xn--wkj8016bne45io02g.xn--7pb000mwm4n; ⴅ󲬹릖󠶚.\u0777ð¹³â’Š; [B4, B6, V6]; xn--wkj8016bne45io02g.xn--7pb000mwm4n; ; ; # ⴅ릖.Ý·ð¹³â’Š
+xn--dnd2167fnet0io02g.xn--7pb000mwm4n; Ⴅ󲬹릖󠶚.\u0777ð¹³â’Š; [B4, B6, V6]; xn--dnd2167fnet0io02g.xn--7pb000mwm4n; ; ; # Ⴅ릖.Ý·ð¹³â’Š
+\u200C。︒; \u200C.︒; [C1, V6]; xn--0ug.xn--y86c; ; .xn--y86c; [V6, A4_2] # .︒
+\u200C。。; \u200C..; [C1, X4_2]; xn--0ug..; [C1, A4_2]; ..; [A4_2] # ..
..; ; [X4_2]; ; [A4_2]; ; # ..
-xn--0ug..; ‌..; [C1, X4_2]; xn--0ug..; [C1, A4_2]; ; # ..
+xn--0ug..; \u200C..; [C1, X4_2]; xn--0ug..; [C1, A4_2]; ; # ..
.xn--y86c; .︒; [V6, X4_2]; .xn--y86c; [V6, A4_2]; ; # .︒
-xn--0ug.xn--y86c; ‌.︒; [C1, V6]; xn--0ug.xn--y86c; ; ; # .︒
-≯ݭ.₄; ≯ݭ.4; [B1, P1, V6]; xn--xpb149k.4; ; ; # ≯ݭ.4
-≯ݭ.₄; ≯ݭ.4; [B1, P1, V6]; xn--xpb149k.4; ; ; # ≯ݭ.4
-≯ݭ.4; ; [B1, P1, V6]; xn--xpb149k.4; ; ; # ≯ݭ.4
-≯ݭ.4; ≯ݭ.4; [B1, P1, V6]; xn--xpb149k.4; ; ; # ≯ݭ.4
-xn--xpb149k.4; ≯ݭ.4; [B1, V6]; xn--xpb149k.4; ; ; # ≯ݭ.4
-ᡲ-ðŸ¹.ß-‌-; ᡲ-3.ß-‌-; [C1, V3]; xn---3-p9o.xn-----fia9303a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ß--
-ᡲ-3.ß-‌-; ; [C1, V3]; xn---3-p9o.xn-----fia9303a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ß--
-ᡲ-3.SS-‌-; ᡲ-3.ss-‌-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
-ᡲ-3.ss-‌-; ; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
-ᡲ-3.Ss-‌-; ᡲ-3.ss-‌-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
+xn--0ug.xn--y86c; \u200C.︒; [C1, V6]; xn--0ug.xn--y86c; ; ; # .︒
+≯\u076D.₄; ≯\u076D.4; [B1]; xn--xpb149k.4; ; ; # ≯ݭ.4
+>\u0338\u076D.₄; ≯\u076D.4; [B1]; xn--xpb149k.4; ; ; # ≯ݭ.4
+≯\u076D.4; ; [B1]; xn--xpb149k.4; ; ; # ≯ݭ.4
+>\u0338\u076D.4; ≯\u076D.4; [B1]; xn--xpb149k.4; ; ; # ≯ݭ.4
+xn--xpb149k.4; ≯\u076D.4; [B1]; xn--xpb149k.4; ; ; # ≯ݭ.4
+ᡲ-ðŸ¹.ß-\u200C-; ᡲ-3.ß-\u200C-; [C1, V3]; xn---3-p9o.xn-----fia9303a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ß--
+ᡲ-3.ß-\u200C-; ; [C1, V3]; xn---3-p9o.xn-----fia9303a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ß--
+ᡲ-3.SS-\u200C-; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
+ᡲ-3.ss-\u200C-; ; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
+ᡲ-3.Ss-\u200C-; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
xn---3-p9o.ss--; ᡲ-3.ss--; [V2, V3]; xn---3-p9o.ss--; ; ; # ᡲ-3.ss--
-xn---3-p9o.xn--ss---276a; ᡲ-3.ss-‌-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; ; # ᡲ-3.ss--
-xn---3-p9o.xn-----fia9303a; ᡲ-3.ß-‌-; [C1, V3]; xn---3-p9o.xn-----fia9303a; ; ; # ᡲ-3.ß--
-ᡲ-ðŸ¹.SS-‌-; ᡲ-3.ss-‌-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
-ᡲ-ðŸ¹.ss-‌-; ᡲ-3.ss-‌-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
-ᡲ-ðŸ¹.Ss-‌-; ᡲ-3.ss-‌-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
-ï´ˆðŸ¦Ù‡óŽŠ¯ï½¡Ó€; ضي4ه󎊯.Ó€; [B2, B3, P1, V6]; xn--4-tnc6ck183523b.xn--d5a; ; ; # ضي4Ù‡.Ó€
-ضي4ه󎊯。Ӏ; ضي4ه󎊯.Ӏ; [B2, B3, P1, V6]; xn--4-tnc6ck183523b.xn--d5a; ; ; # ضي4ه.Ӏ
-ضي4ه󎊯。Ó; ضي4ه󎊯.Ó; [B2, B3, P1, V6]; xn--4-tnc6ck183523b.xn--s5a; ; ; # ضي4Ù‡.Ó
-xn--4-tnc6ck183523b.xn--s5a; ضي4ه󎊯.Ó; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--s5a; ; ; # ضي4Ù‡.Ó
-xn--4-tnc6ck183523b.xn--d5a; ضي4ه󎊯.Ӏ; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--d5a; ; ; # ضي4ه.Ӏ
-ï´ˆðŸ¦Ù‡óŽŠ¯ï½¡Ó; ضي4ه󎊯.Ó; [B2, B3, P1, V6]; xn--4-tnc6ck183523b.xn--s5a; ; ; # ضي4Ù‡.Ó
--.؂آ𑆾ðŸ¹; ; [B1, P1, V3, V6]; -.xn--kfb8dy983hgl7g; ; ; # -.آ𑆾ðŸ¹
--.؂آ𑆾ðŸ¹; -.؂آ𑆾ðŸ¹; [B1, P1, V3, V6]; -.xn--kfb8dy983hgl7g; ; ; # -.آ𑆾ðŸ¹
--.xn--kfb8dy983hgl7g; -.؂آ𑆾ðŸ¹; [B1, V3, V6]; -.xn--kfb8dy983hgl7g; ; ; # -.آ𑆾ðŸ¹
-󙶜ᢘ。᩿⺢; 󙶜ᢘ.᩿⺢; [P1, V5, V6]; xn--ibf35138o.xn--fpfz94g; ; ; # ᢘ.᩿⺢
-xn--ibf35138o.xn--fpfz94g; 󙶜ᢘ.᩿⺢; [V5, V6]; xn--ibf35138o.xn--fpfz94g; ; ; # ᢘ.᩿⺢
-≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
-≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
-≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
-≠ႷᠤႫ。?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
-≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
-≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
-≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
-≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
-xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
-xn--66e353ce0ilb.xn--?-7fb34t0u7s; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
-xn--jndx718cnnl.xn--?-7fb34t0u7s; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
-≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
-≠ⴗᠤⴋ。?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
-≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
-≠Ⴗᠤⴋ。?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
-xn--vnd619as6ig6k.?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
-XN--VND619AS6IG6K.?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
-Xn--Vnd619as6ig6k.?͌س觴; ≠Ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
-xn--66e353ce0ilb.?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
-XN--66E353CE0ILB.?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
-Xn--66e353ce0ilb.?͌س觴; ≠ⴗᠤⴋ.?͌س觴; [B1, P1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
-xn--jndx718cnnl.?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
-XN--JNDX718CNNL.?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
-Xn--Jndx718cnnl.?͌س觴; ≠ႷᠤႫ.?͌س觴; [B1, P1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
-Ù§.ð¥¨; ; [B1, P1, V6]; xn--gib.xn--vm9c; ; ; # Ù§.
-xn--gib.xn--vm9c; Ù§.ð¥¨; [B1, V6]; xn--gib.xn--vm9c; ; ; # Ù§.
-꧀ðŸ¯ï½¡â€ñ¼‘¥ð¹ªá¯³; ꧀3.â€ñ¼‘¥ð¹ªá¯³; [B1, C2, P1, V5, V6]; xn--3-5z4e.xn--1zf96ony8ygd68c; ; xn--3-5z4e.xn--1zfz754hncv8b; [B5, P1, V5, V6] # ꧀3.ð¹ªá¯³
-꧀3。â€ñ¼‘¥ð¹ªá¯³; ꧀3.â€ñ¼‘¥ð¹ªá¯³; [B1, C2, P1, V5, V6]; xn--3-5z4e.xn--1zf96ony8ygd68c; ; xn--3-5z4e.xn--1zfz754hncv8b; [B5, P1, V5, V6] # ꧀3.ð¹ªá¯³
-xn--3-5z4e.xn--1zfz754hncv8b; ꧀3.ñ¼‘¥ð¹ªá¯³; [B5, V5, V6]; xn--3-5z4e.xn--1zfz754hncv8b; ; ; # ꧀3.ð¹ªá¯³
-xn--3-5z4e.xn--1zf96ony8ygd68c; ꧀3.â€ñ¼‘¥ð¹ªá¯³; [B1, C2, V5, V6]; xn--3-5z4e.xn--1zf96ony8ygd68c; ; ; # ꧀3.ð¹ªá¯³
-򣕄4񠖽.≯٤𑀾󠸌; ; [B1, P1, V6]; xn--4-fg85dl688i.xn--dib174li86ntdy0i; ; ; # 4.≯٤𑀾
-򣕄4񠖽.≯٤𑀾󠸌; 򣕄4񠖽.≯٤𑀾󠸌; [B1, P1, V6]; xn--4-fg85dl688i.xn--dib174li86ntdy0i; ; ; # 4.≯٤𑀾
-xn--4-fg85dl688i.xn--dib174li86ntdy0i; 򣕄4񠖽.≯٤𑀾󠸌; [B1, V6]; xn--4-fg85dl688i.xn--dib174li86ntdy0i; ; ; # 4.≯٤𑀾
-ò—†§ðŸ¯ã€‚⒈᩶ðŸšò ˜Œ; ò—†§3.⒈᩶2ò ˜Œ; [P1, V6]; xn--3-rj42h.xn--2-13k746cq465x; ; ; # 3.⒈᩶2
-򗆧3。1.᩶2򠘌; 򗆧3.1.᩶2򠘌; [P1, V5, V6]; xn--3-rj42h.1.xn--2-13k96240l; ; ; # 3.1.᩶2
-xn--3-rj42h.1.xn--2-13k96240l; 򗆧3.1.᩶2򠘌; [V5, V6]; xn--3-rj42h.1.xn--2-13k96240l; ; ; # 3.1.᩶2
-xn--3-rj42h.xn--2-13k746cq465x; 򗆧3.⒈᩶2򠘌; [V6]; xn--3-rj42h.xn--2-13k746cq465x; ; ; # 3.⒈᩶2
-â€â‚…⒈。≯ðŸ´â€; â€5â’ˆ.≯8â€; [C2, P1, V6]; xn--5-tgnz5r.xn--8-ugn00i; ; xn--5-ecp.xn--8-ogo; [P1, V6] # 5â’ˆ.≯8
-â€â‚…⒈。≯ðŸ´â€; â€5â’ˆ.≯8â€; [C2, P1, V6]; xn--5-tgnz5r.xn--8-ugn00i; ; xn--5-ecp.xn--8-ogo; [P1, V6] # 5â’ˆ.≯8
-â€51.。≯8â€; â€51..≯8â€; [C2, P1, V6, X4_2]; xn--51-l1t..xn--8-ugn00i; [C2, P1, V6, A4_2]; 51..xn--8-ogo; [P1, V6, A4_2] # 51..≯8
-â€51.。≯8â€; â€51..≯8â€; [C2, P1, V6, X4_2]; xn--51-l1t..xn--8-ugn00i; [C2, P1, V6, A4_2]; 51..xn--8-ogo; [P1, V6, A4_2] # 51..≯8
-51..xn--8-ogo; 51..≯8; [V6, X4_2]; 51..xn--8-ogo; [V6, A4_2]; ; # 51..≯8
-xn--51-l1t..xn--8-ugn00i; â€51..≯8â€; [C2, V6, X4_2]; xn--51-l1t..xn--8-ugn00i; [C2, V6, A4_2]; ; # 51..≯8
+xn---3-p9o.xn--ss---276a; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; ; # ᡲ-3.ss--
+xn---3-p9o.xn-----fia9303a; ᡲ-3.ß-\u200C-; [C1, V3]; xn---3-p9o.xn-----fia9303a; ; ; # ᡲ-3.ß--
+ᡲ-ðŸ¹.SS-\u200C-; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
+ᡲ-ðŸ¹.ss-\u200C-; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
+ᡲ-ðŸ¹.Ss-\u200C-; ᡲ-3.ss-\u200C-; [C1, V3]; xn---3-p9o.xn--ss---276a; ; xn---3-p9o.ss--; [V2, V3] # ᡲ-3.ss--
+\uFD08ðŸ¦\u0647󎊯。Ӏ; \u0636\u064A4\u0647󎊯.Ó€; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--d5a; ; ; # ضي4Ù‡.Ó€
+\u0636\u064A4\u0647󎊯。Ӏ; \u0636\u064A4\u0647󎊯.Ӏ; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--d5a; ; ; # ضي4ه.Ӏ
+\u0636\u064A4\u0647󎊯。Ó; \u0636\u064A4\u0647󎊯.Ó; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--s5a; ; ; # ضي4Ù‡.Ó
+xn--4-tnc6ck183523b.xn--s5a; \u0636\u064A4\u0647󎊯.Ó; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--s5a; ; ; # ضي4Ù‡.Ó
+xn--4-tnc6ck183523b.xn--d5a; \u0636\u064A4\u0647󎊯.Ӏ; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--d5a; ; ; # ضي4ه.Ӏ
+\uFD08ðŸ¦\u0647󎊯。Ó; \u0636\u064A4\u0647󎊯.Ó; [B2, B3, V6]; xn--4-tnc6ck183523b.xn--s5a; ; ; # ضي4Ù‡.Ó
+-.\u0602\u0622𑆾ðŸ¹; ; [B1, V3, V6]; -.xn--kfb8dy983hgl7g; ; ; # -.آ𑆾ðŸ¹
+-.\u0602\u0627\u0653𑆾ðŸ¹; -.\u0602\u0622𑆾ðŸ¹; [B1, V3, V6]; -.xn--kfb8dy983hgl7g; ; ; # -.آ𑆾ðŸ¹
+-.xn--kfb8dy983hgl7g; -.\u0602\u0622𑆾ðŸ¹; [B1, V3, V6]; -.xn--kfb8dy983hgl7g; ; ; # -.آ𑆾ðŸ¹
+󙶜ᢘ。\u1A7F⺢; 󙶜ᢘ.\u1A7F⺢; [V5, V6]; xn--ibf35138o.xn--fpfz94g; ; ; # ᢘ.᩿⺢
+xn--ibf35138o.xn--fpfz94g; 󙶜ᢘ.\u1A7F⺢; [V5, V6]; xn--ibf35138o.xn--fpfz94g; ; ; # ᢘ.᩿⺢
+≠ႷᠤႫ。?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+=\u0338ႷᠤႫ。?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+≠ႷᠤႫ。?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+=\u0338ႷᠤႫ。?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+=\u0338ⴗᠤⴋ。?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+≠ⴗᠤⴋ。?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+≠Ⴗᠤⴋ。?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+=\u0338Ⴗᠤⴋ。?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+xn--66e353ce0ilb.xn--?-7fb34t0u7s; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+xn--jndx718cnnl.xn--?-7fb34t0u7s; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+=\u0338ⴗᠤⴋ。?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+≠ⴗᠤⴋ。?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+≠Ⴗᠤⴋ。?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+=\u0338Ⴗᠤⴋ。?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+xn--vnd619as6ig6k.?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+XN--VND619AS6IG6K.?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+Xn--Vnd619as6ig6k.?\u034C\u0633觴; ≠Ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--vnd619as6ig6k.xn--?-7fb34t0u7s; ; ; # ≠Ⴗᠤⴋ.?͌س觴
+xn--66e353ce0ilb.?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+XN--66E353CE0ILB.?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+Xn--66e353ce0ilb.?\u034C\u0633觴; ≠ⴗᠤⴋ.?\u034C\u0633觴; [B1, V6]; xn--66e353ce0ilb.xn--?-7fb34t0u7s; ; ; # ≠ⴗᠤⴋ.?͌س觴
+xn--jndx718cnnl.?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+XN--JNDX718CNNL.?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+Xn--Jndx718cnnl.?\u034C\u0633觴; ≠ႷᠤႫ.?\u034C\u0633觴; [B1, V6]; xn--jndx718cnnl.xn--?-7fb34t0u7s; ; ; # ≠ႷᠤႫ.?͌س觴
+\u0667.ð¥¨; ; [B1, V6]; xn--gib.xn--vm9c; ; ; # Ù§.
+xn--gib.xn--vm9c; \u0667.ð¥¨; [B1, V6]; xn--gib.xn--vm9c; ; ; # Ù§.
+\uA9C0ðŸ¯ï½¡\u200Dñ¼‘¥ð¹ª\u1BF3; \uA9C03.\u200Dñ¼‘¥ð¹ª\u1BF3; [B1, C2, V5, V6]; xn--3-5z4e.xn--1zf96ony8ygd68c; ; xn--3-5z4e.xn--1zfz754hncv8b; [B5, V5, V6] # ꧀3.ð¹ªá¯³
+\uA9C03。\u200Dñ¼‘¥ð¹ª\u1BF3; \uA9C03.\u200Dñ¼‘¥ð¹ª\u1BF3; [B1, C2, V5, V6]; xn--3-5z4e.xn--1zf96ony8ygd68c; ; xn--3-5z4e.xn--1zfz754hncv8b; [B5, V5, V6] # ꧀3.ð¹ªá¯³
+xn--3-5z4e.xn--1zfz754hncv8b; \uA9C03.ñ¼‘¥ð¹ª\u1BF3; [B5, V5, V6]; xn--3-5z4e.xn--1zfz754hncv8b; ; ; # ꧀3.ð¹ªá¯³
+xn--3-5z4e.xn--1zf96ony8ygd68c; \uA9C03.\u200Dñ¼‘¥ð¹ª\u1BF3; [B1, C2, V5, V6]; xn--3-5z4e.xn--1zf96ony8ygd68c; ; ; # ꧀3.ð¹ªá¯³
+򣕄4񠖽.≯\u0664𑀾󠸌; ; [B1, V6]; xn--4-fg85dl688i.xn--dib174li86ntdy0i; ; ; # 4.≯٤𑀾
+򣕄4񠖽.>\u0338\u0664𑀾󠸌; 򣕄4񠖽.≯\u0664𑀾󠸌; [B1, V6]; xn--4-fg85dl688i.xn--dib174li86ntdy0i; ; ; # 4.≯٤𑀾
+xn--4-fg85dl688i.xn--dib174li86ntdy0i; 򣕄4񠖽.≯\u0664𑀾󠸌; [B1, V6]; xn--4-fg85dl688i.xn--dib174li86ntdy0i; ; ; # 4.≯٤𑀾
+ò—†§ðŸ¯ã€‚â’ˆ\u1A76ðŸšò ˜Œ; ò—†§3.â’ˆ\u1A762ò ˜Œ; [V6]; xn--3-rj42h.xn--2-13k746cq465x; ; ; # 3.⒈᩶2
+򗆧3。1.\u1A762򠘌; 򗆧3.1.\u1A762򠘌; [V5, V6]; xn--3-rj42h.1.xn--2-13k96240l; ; ; # 3.1.᩶2
+xn--3-rj42h.1.xn--2-13k96240l; 򗆧3.1.\u1A762򠘌; [V5, V6]; xn--3-rj42h.1.xn--2-13k96240l; ; ; # 3.1.᩶2
+xn--3-rj42h.xn--2-13k746cq465x; 򗆧3.⒈\u1A762򠘌; [V6]; xn--3-rj42h.xn--2-13k746cq465x; ; ; # 3.⒈᩶2
+\u200D₅⒈。≯ðŸ´\u200D; \u200D5â’ˆ.≯8\u200D; [C2, V6]; xn--5-tgnz5r.xn--8-ugn00i; ; xn--5-ecp.xn--8-ogo; [V6] # 5â’ˆ.≯8
+\u200D₅⒈。>\u0338ðŸ´\u200D; \u200D5â’ˆ.≯8\u200D; [C2, V6]; xn--5-tgnz5r.xn--8-ugn00i; ; xn--5-ecp.xn--8-ogo; [V6] # 5â’ˆ.≯8
+\u200D51.。≯8\u200D; \u200D51..≯8\u200D; [C2, X4_2]; xn--51-l1t..xn--8-ugn00i; [C2, A4_2]; 51..xn--8-ogo; [A4_2] # 51..≯8
+\u200D51.。>\u03388\u200D; \u200D51..≯8\u200D; [C2, X4_2]; xn--51-l1t..xn--8-ugn00i; [C2, A4_2]; 51..xn--8-ogo; [A4_2] # 51..≯8
+51..xn--8-ogo; 51..≯8; [X4_2]; 51..xn--8-ogo; [A4_2]; ; # 51..≯8
+xn--51-l1t..xn--8-ugn00i; \u200D51..≯8\u200D; [C2, X4_2]; xn--51-l1t..xn--8-ugn00i; [C2, A4_2]; ; # 51..≯8
xn--5-ecp.xn--8-ogo; 5⒈.≯8; [V6]; xn--5-ecp.xn--8-ogo; ; ; # 5⒈.≯8
-xn--5-tgnz5r.xn--8-ugn00i; â€5â’ˆ.≯8â€; [C2, V6]; xn--5-tgnz5r.xn--8-ugn00i; ; ; # 5â’ˆ.≯8
-ꡰڗႆ.򪘙ܯ≠‌; ꡰڗႆ.򪘙ܯ≠‌; [B5, B6, C1, P1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, P1, V6] # ꡰڗႆ.ܯ≠
-ꡰڗႆ.򪘙ܯ≠‌; ꡰڗႆ.򪘙ܯ≠‌; [B5, B6, C1, P1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, P1, V6] # ꡰڗႆ.ܯ≠
-ꡰڗႆ.򪘙ܯ≠‌; ; [B5, B6, C1, P1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, P1, V6] # ꡰڗႆ.ܯ≠
-ꡰڗႆ.򪘙ܯ≠‌; ꡰڗႆ.򪘙ܯ≠‌; [B5, B6, C1, P1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, P1, V6] # ꡰڗႆ.ܯ≠
-xn--tjb002cn51k.xn--5nb630lbj91q; ꡰڗႆ.򪘙ܯ≠; [B5, B6, V6]; xn--tjb002cn51k.xn--5nb630lbj91q; ; ; # ꡰڗႆ.ܯ≠
-xn--tjb002cn51k.xn--5nb448jcubcz547b; ꡰڗႆ.򪘙ܯ≠‌; [B5, B6, C1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; ; # ꡰڗႆ.ܯ≠
-𑄱。òªŒ¿ð¹µ; ð‘„±.òªŒ¿ð¹µ; [B1, B3, B5, B6, P1, V5, V6]; xn--t80d.xn--to0d14792b; ; ; # ð‘„±.ð¹µ
-𑄱。òªŒ¿ð¹µ; ð‘„±.òªŒ¿ð¹µ; [B1, B3, B5, B6, P1, V5, V6]; xn--t80d.xn--to0d14792b; ; ; # ð‘„±.ð¹µ
-xn--t80d.xn--to0d14792b; ð‘„±.òªŒ¿ð¹µ; [B1, B3, B5, B6, V5, V6]; xn--t80d.xn--to0d14792b; ; ; # ð‘„±.ð¹µ
-ðŸ¥Ø€ã€‚ܽ; 3Ø€.ܽ; [B1, B3, B6, P1, V5, V6]; xn--3-rkc.xn--kob; ; ; # 3.ܽ
-3؀。ܽ; 3؀.ܽ; [B1, B3, B6, P1, V5, V6]; xn--3-rkc.xn--kob; ; ; # 3.ܽ
-xn--3-rkc.xn--kob; 3؀.ܽ; [B1, B3, B6, V5, V6]; xn--3-rkc.xn--kob; ; ; # 3.ܽ
-Ø·ð¹£Ù¦.ݭ긷; ; [B2, B3]; xn--2gb8gu829f.xn--xpb0156f; ; ; # Ø·ð¹£Ù¦.ݭ긷
-Ø·ð¹£Ù¦.ݭ긷; Ø·ð¹£Ù¦.ݭ긷; [B2, B3]; xn--2gb8gu829f.xn--xpb0156f; ; ; # Ø·ð¹£Ù¦.ݭ긷
-xn--2gb8gu829f.xn--xpb0156f; Ø·ð¹£Ù¦.ݭ긷; [B2, B3]; xn--2gb8gu829f.xn--xpb0156f; ; ; # Ø·ð¹£Ù¦.ݭ긷
-︒Ↄⷧò¾€ƒï¼Žá‚·ð£ž; ︒Ↄⷧò¾€ƒ.á‚·ð£ž; [B1, B5, B6, P1, V6]; xn--q5g000c056n0226g.xn--vnd8618j; ; ; # ︒Ↄⷧ.á‚·
-。Ↄⷧò¾€ƒ.á‚·ð£ž; .Ↄⷧò¾€ƒ.á‚·ð£ž; [B5, B6, P1, V6, X4_2]; .xn--q5g000cll06u.xn--vnd8618j; [B5, B6, P1, V6, A4_2]; ; # .Ↄⷧ.á‚·
-。ↄⷧò¾€ƒ.â´—ð£ž; .ↄⷧò¾€ƒ.â´—ð£ž; [B5, B6, P1, V6, X4_2]; .xn--r5gy00cll06u.xn--flj4541e; [B5, B6, P1, V6, A4_2]; ; # .ↄⷧ.â´—
-.xn--r5gy00cll06u.xn--flj4541e; .ↄⷧò¾€ƒ.â´—ð£ž; [B5, B6, V6, X4_2]; .xn--r5gy00cll06u.xn--flj4541e; [B5, B6, V6, A4_2]; ; # .ↄⷧ.â´—
-.xn--q5g000cll06u.xn--vnd8618j; .Ↄⷧò¾€ƒ.á‚·ð£ž; [B5, B6, V6, X4_2]; .xn--q5g000cll06u.xn--vnd8618j; [B5, B6, V6, A4_2]; ; # .Ↄⷧ.á‚·
-︒ↄⷧò¾€ƒï¼Žâ´—ð£ž; ︒ↄⷧò¾€ƒ.â´—ð£ž; [B1, B5, B6, P1, V6]; xn--r5gy00c056n0226g.xn--flj4541e; ; ; # ︒ↄⷧ.â´—
-xn--r5gy00c056n0226g.xn--flj4541e; ︒ↄⷧò¾€ƒ.â´—ð£ž; [B1, B5, B6, V6]; xn--r5gy00c056n0226g.xn--flj4541e; ; ; # ︒ↄⷧ.â´—
-xn--q5g000c056n0226g.xn--vnd8618j; ︒Ↄⷧò¾€ƒ.á‚·ð£ž; [B1, B5, B6, V6]; xn--q5g000c056n0226g.xn--vnd8618j; ; ; # ︒Ↄⷧ.á‚·
-Ø€.Ö±; ; [B1, B3, B6, P1, V5, V6]; xn--ifb.xn--8cb; ; ; # .Ö±
-xn--ifb.xn--8cb; ؀.ֱ; [B1, B3, B6, V5, V6]; xn--ifb.xn--8cb; ; ; # .ֱ
-ς≯。ð¹½; ς≯.ð¹½; [B1, B6, P1, V6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.ð¹½
-Ï‚≯。ð¹½; ς≯.ð¹½; [B1, B6, P1, V6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.ð¹½
-ς≯。ð¹½; ς≯.ð¹½; [B1, B6, P1, V6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.ð¹½
-Ï‚≯。ð¹½; ς≯.ð¹½; [B1, B6, P1, V6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.ð¹½
-Σ≯。ð¹½; σ≯.ð¹½; [B1, B6, P1, V6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
-Σ≯。ð¹½; σ≯.ð¹½; [B1, B6, P1, V6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
-σ≯。ð¹½; σ≯.ð¹½; [B1, B6, P1, V6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
-σ≯。ð¹½; σ≯.ð¹½; [B1, B6, P1, V6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
-xn--4xa818m.xn--1o0d; σ≯.ð¹½; [B1, B6, V6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
-xn--3xa028m.xn--1o0d; ς≯.ð¹½; [B1, B6, V6]; xn--3xa028m.xn--1o0d; ; ; # ς≯.ð¹½
-Σ≯。ð¹½; σ≯.ð¹½; [B1, B6, P1, V6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
-Σ≯。ð¹½; σ≯.ð¹½; [B1, B6, P1, V6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
-σ≯。ð¹½; σ≯.ð¹½; [B1, B6, P1, V6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
-σ≯。ð¹½; σ≯.ð¹½; [B1, B6, P1, V6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
-្â€ÝŸã€‚ð¹¶; ្â€ÝŸ.ð¹¶; [B1, V5]; xn--jpb535fv9f.xn--uo0d; ; xn--jpb535f.xn--uo0d; # ្ݟ.ð¹¶
-xn--jpb535f.xn--uo0d; ្ݟ.ð¹¶; [B1, V5]; xn--jpb535f.xn--uo0d; ; ; # ្ݟ.ð¹¶
-xn--jpb535fv9f.xn--uo0d; ្â€ÝŸ.ð¹¶; [B1, V5]; xn--jpb535fv9f.xn--uo0d; ; ; # ្ݟ.ð¹¶
-𾷂ੂႪ񂂟.≮; ; [P1, V6]; xn--nbc493aro75ggskb.xn--gdh; ; ; # ੂႪ.≮
-𾷂ੂႪ񂂟.≮; 𾷂ੂႪ񂂟.≮; [P1, V6]; xn--nbc493aro75ggskb.xn--gdh; ; ; # ੂႪ.≮
-𾷂ੂⴊ񂂟.≮; 𾷂ੂⴊ񂂟.≮; [P1, V6]; xn--nbc229o4y27dgskb.xn--gdh; ; ; # ੂⴊ.≮
-𾷂ੂⴊ񂂟.≮; ; [P1, V6]; xn--nbc229o4y27dgskb.xn--gdh; ; ; # ੂⴊ.≮
-xn--nbc229o4y27dgskb.xn--gdh; 𾷂ੂⴊ񂂟.≮; [V6]; xn--nbc229o4y27dgskb.xn--gdh; ; ; # ੂⴊ.≮
-xn--nbc493aro75ggskb.xn--gdh; 𾷂ੂႪ񂂟.≮; [V6]; xn--nbc493aro75ggskb.xn--gdh; ; ; # ੂႪ.≮
+xn--5-tgnz5r.xn--8-ugn00i; \u200D5⒈.≯8\u200D; [C2, V6]; xn--5-tgnz5r.xn--8-ugn00i; ; ; # 5⒈.≯8
+ꡰ\u0697\u1086.򪘙\u072F≠\u200C; ꡰ\u0697\u1086.򪘙\u072F≠\u200C; [B5, B6, C1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, V6] # ꡰڗႆ.ܯ≠
+ꡰ\u0697\u1086.򪘙\u072F=\u0338\u200C; ꡰ\u0697\u1086.򪘙\u072F≠\u200C; [B5, B6, C1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, V6] # ꡰڗႆ.ܯ≠
+ꡰ\u0697\u1086.򪘙\u072F≠\u200C; ; [B5, B6, C1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, V6] # ꡰڗႆ.ܯ≠
+ꡰ\u0697\u1086.򪘙\u072F=\u0338\u200C; ꡰ\u0697\u1086.򪘙\u072F≠\u200C; [B5, B6, C1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; xn--tjb002cn51k.xn--5nb630lbj91q; [B5, B6, V6] # ꡰڗႆ.ܯ≠
+xn--tjb002cn51k.xn--5nb630lbj91q; ꡰ\u0697\u1086.򪘙\u072F≠; [B5, B6, V6]; xn--tjb002cn51k.xn--5nb630lbj91q; ; ; # ꡰڗႆ.ܯ≠
+xn--tjb002cn51k.xn--5nb448jcubcz547b; ꡰ\u0697\u1086.򪘙\u072F≠\u200C; [B5, B6, C1, V6]; xn--tjb002cn51k.xn--5nb448jcubcz547b; ; ; # ꡰڗႆ.ܯ≠
+𑄱。òªŒ¿ð¹µ; ð‘„±.òªŒ¿ð¹µ; [B1, B5, B6, V5, V6]; xn--t80d.xn--to0d14792b; ; ; # ð‘„±.ð¹µ
+𑄱。òªŒ¿ð¹µ; ð‘„±.òªŒ¿ð¹µ; [B1, B5, B6, V5, V6]; xn--t80d.xn--to0d14792b; ; ; # ð‘„±.ð¹µ
+xn--t80d.xn--to0d14792b; ð‘„±.òªŒ¿ð¹µ; [B1, B5, B6, V5, V6]; xn--t80d.xn--to0d14792b; ; ; # ð‘„±.ð¹µ
+ðŸ¥\u0600。\u073D; 3\u0600.\u073D; [B1, V5, V6]; xn--3-rkc.xn--kob; ; ; # 3.ܽ
+3\u0600。\u073D; 3\u0600.\u073D; [B1, V5, V6]; xn--3-rkc.xn--kob; ; ; # 3.ܽ
+xn--3-rkc.xn--kob; 3\u0600.\u073D; [B1, V5, V6]; xn--3-rkc.xn--kob; ; ; # 3.ܽ
+\u0637ð¹£\u0666.\u076D긷; ; [B2, B3]; xn--2gb8gu829f.xn--xpb0156f; ; ; # Ø·ð¹£Ù¦.ݭ긷
+\u0637ð¹£\u0666.\u076D긷; \u0637ð¹£\u0666.\u076D긷; [B2, B3]; xn--2gb8gu829f.xn--xpb0156f; ; ; # Ø·ð¹£Ù¦.ݭ긷
+xn--2gb8gu829f.xn--xpb0156f; \u0637ð¹£\u0666.\u076D긷; [B2, B3]; xn--2gb8gu829f.xn--xpb0156f; ; ; # Ø·ð¹£Ù¦.ݭ긷
+︒Ↄ\u2DE7ò¾€ƒï¼Žá‚·ð£ž; ︒Ↄ\u2DE7ò¾€ƒ.á‚·ð£ž; [B1, B5, B6, V6]; xn--q5g000c056n0226g.xn--vnd8618j; ; ; # ︒Ↄⷧ.á‚·
+。Ↄ\u2DE7ò¾€ƒ.á‚·ð£ž; .Ↄ\u2DE7ò¾€ƒ.á‚·ð£ž; [B5, B6, V6, X4_2]; .xn--q5g000cll06u.xn--vnd8618j; [B5, B6, V6, A4_2]; ; # .Ↄⷧ.á‚·
+。ↄ\u2DE7ò¾€ƒ.â´—ð£ž; .ↄ\u2DE7ò¾€ƒ.â´—ð£ž; [B5, B6, V6, X4_2]; .xn--r5gy00cll06u.xn--flj4541e; [B5, B6, V6, A4_2]; ; # .ↄⷧ.â´—
+.xn--r5gy00cll06u.xn--flj4541e; .ↄ\u2DE7ò¾€ƒ.â´—ð£ž; [B5, B6, V6, X4_2]; .xn--r5gy00cll06u.xn--flj4541e; [B5, B6, V6, A4_2]; ; # .ↄⷧ.â´—
+.xn--q5g000cll06u.xn--vnd8618j; .Ↄ\u2DE7ò¾€ƒ.á‚·ð£ž; [B5, B6, V6, X4_2]; .xn--q5g000cll06u.xn--vnd8618j; [B5, B6, V6, A4_2]; ; # .Ↄⷧ.á‚·
+︒ↄ\u2DE7ò¾€ƒï¼Žâ´—ð£ž; ︒ↄ\u2DE7ò¾€ƒ.â´—ð£ž; [B1, B5, B6, V6]; xn--r5gy00c056n0226g.xn--flj4541e; ; ; # ︒ↄⷧ.â´—
+xn--r5gy00c056n0226g.xn--flj4541e; ︒ↄ\u2DE7ò¾€ƒ.â´—ð£ž; [B1, B5, B6, V6]; xn--r5gy00c056n0226g.xn--flj4541e; ; ; # ︒ↄⷧ.â´—
+xn--q5g000c056n0226g.xn--vnd8618j; ︒Ↄ\u2DE7ò¾€ƒ.á‚·ð£ž; [B1, B5, B6, V6]; xn--q5g000c056n0226g.xn--vnd8618j; ; ; # ︒Ↄⷧ.á‚·
+\u0600.\u05B1; ; [B1, V5, V6]; xn--ifb.xn--8cb; ; ; # .Ö±
+xn--ifb.xn--8cb; \u0600.\u05B1; [B1, V5, V6]; xn--ifb.xn--8cb; ; ; # .Ö±
+ς≯。ð¹½; ς≯.ð¹½; [B1, B6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.ð¹½
+Ï‚>\u0338。ð¹½; ς≯.ð¹½; [B1, B6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.ð¹½
+ς≯。ð¹½; ς≯.ð¹½; [B1, B6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.ð¹½
+Ï‚>\u0338。ð¹½; ς≯.ð¹½; [B1, B6]; xn--3xa028m.xn--1o0d; ; xn--4xa818m.xn--1o0d; # ς≯.ð¹½
+Σ>\u0338。ð¹½; σ≯.ð¹½; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
+Σ≯。ð¹½; σ≯.ð¹½; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
+σ≯。ð¹½; σ≯.ð¹½; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
+σ>\u0338。ð¹½; σ≯.ð¹½; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
+xn--4xa818m.xn--1o0d; σ≯.ð¹½; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
+xn--3xa028m.xn--1o0d; ς≯.ð¹½; [B1, B6]; xn--3xa028m.xn--1o0d; ; ; # ς≯.ð¹½
+Σ>\u0338。ð¹½; σ≯.ð¹½; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
+Σ≯。ð¹½; σ≯.ð¹½; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
+σ≯。ð¹½; σ≯.ð¹½; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
+σ>\u0338。ð¹½; σ≯.ð¹½; [B1, B6]; xn--4xa818m.xn--1o0d; ; ; # σ≯.ð¹½
+\u17D2\u200D\u075F。ð¹¶; \u17D2\u200D\u075F.ð¹¶; [B1, V5]; xn--jpb535fv9f.xn--uo0d; ; xn--jpb535f.xn--uo0d; # ្ݟ.ð¹¶
+xn--jpb535f.xn--uo0d; \u17D2\u075F.ð¹¶; [B1, V5]; xn--jpb535f.xn--uo0d; ; ; # ្ݟ.ð¹¶
+xn--jpb535fv9f.xn--uo0d; \u17D2\u200D\u075F.ð¹¶; [B1, V5]; xn--jpb535fv9f.xn--uo0d; ; ; # ្ݟ.ð¹¶
+𾷂\u0A42Ⴊ񂂟.≮; ; [V6]; xn--nbc493aro75ggskb.xn--gdh; ; ; # ੂႪ.≮
+𾷂\u0A42Ⴊ񂂟.<\u0338; 𾷂\u0A42Ⴊ񂂟.≮; [V6]; xn--nbc493aro75ggskb.xn--gdh; ; ; # ੂႪ.≮
+𾷂\u0A42ⴊ񂂟.<\u0338; 𾷂\u0A42ⴊ񂂟.≮; [V6]; xn--nbc229o4y27dgskb.xn--gdh; ; ; # ੂⴊ.≮
+𾷂\u0A42ⴊ񂂟.≮; ; [V6]; xn--nbc229o4y27dgskb.xn--gdh; ; ; # ੂⴊ.≮
+xn--nbc229o4y27dgskb.xn--gdh; 𾷂\u0A42ⴊ񂂟.≮; [V6]; xn--nbc229o4y27dgskb.xn--gdh; ; ; # ੂⴊ.≮
+xn--nbc493aro75ggskb.xn--gdh; 𾷂\u0A42Ⴊ񂂟.≮; [V6]; xn--nbc493aro75ggskb.xn--gdh; ; ; # ੂႪ.≮
ꡠ.۲; ꡠ.۲; ; xn--5c9a.xn--fmb; ; ; # ꡠ.۲
ê¡ .Û²; ; ; xn--5c9a.xn--fmb; ; ; # ê¡ .Û²
xn--5c9a.xn--fmb; ê¡ .Û²; ; xn--5c9a.xn--fmb; ; ; # ê¡ .Û²
-ð¹£ñ„·„。ꡬ🄄; ð¹£ñ„·„.ꡬ🄄; [B1, P1, V6]; xn--bo0d0203l.xn--id9a4443d; ; ; # ð¹£.ꡬ🄄
-ð¹£ñ„·„。ꡬ3,; ð¹£ñ„·„.ꡬ3,; [B1, B6, P1, V6]; xn--bo0d0203l.xn--3,-yj9h; ; ; # ð¹£.ꡬ3,
-xn--bo0d0203l.xn--3,-yj9h; ð¹£ñ„·„.ꡬ3,; [B1, B6, P1, V6]; xn--bo0d0203l.xn--3,-yj9h; ; ; # ð¹£.ꡬ3,
+ð¹£ñ„·„。ꡬ🄄; ð¹£ñ„·„.ꡬ🄄; [B1, V6]; xn--bo0d0203l.xn--id9a4443d; ; ; # ð¹£.ꡬ🄄
+ð¹£ñ„·„。ꡬ3,; ð¹£ñ„·„.ꡬ3,; [B1, B6, V6]; xn--bo0d0203l.xn--3,-yj9h; ; ; # ð¹£.ꡬ3,
+xn--bo0d0203l.xn--3,-yj9h; ð¹£ñ„·„.ꡬ3,; [B1, B6, V6]; xn--bo0d0203l.xn--3,-yj9h; ; ; # ð¹£.ꡬ3,
xn--bo0d0203l.xn--id9a4443d; ð¹£ñ„·„.ꡬ🄄; [B1, V6]; xn--bo0d0203l.xn--id9a4443d; ; ; # ð¹£.ꡬ🄄
--à±ðž¾€ð‘²“。â€àµ; -à±ðž¾€ð‘²“.â€àµ; [B1, C2, P1, V3, V6]; xn----x6e0220sclug.xn--wxc317g; ; xn----x6e0220sclug.xn--wxc; [B1, B3, B6, P1, V3, V5, V6] # -à±ð‘²“.àµ
--à±ðž¾€ð‘²“。â€àµ; -à±ðž¾€ð‘²“.â€àµ; [B1, C2, P1, V3, V6]; xn----x6e0220sclug.xn--wxc317g; ; xn----x6e0220sclug.xn--wxc; [B1, B3, B6, P1, V3, V5, V6] # -à±ð‘²“.àµ
-xn----x6e0220sclug.xn--wxc; -à±ðž¾€ð‘²“.àµ; [B1, B3, B6, V3, V5, V6]; xn----x6e0220sclug.xn--wxc; ; ; # -à±ð‘²“.àµ
-xn----x6e0220sclug.xn--wxc317g; -à±ðž¾€ð‘²“.â€àµ; [B1, C2, V3, V6]; xn----x6e0220sclug.xn--wxc317g; ; ; # -à±ð‘²“.àµ
-꙽‌霣🄆。‌ð‘‚á¬; ꙽‌霣🄆.‌ð‘‚á¬; [C1, P1, V5, V6]; xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; ; xn--2q5a751a653w.xn--4sf0725i; [P1, V5, V6] # ꙽霣🄆.ð‘‚á¬
-꙽‌霣🄆。‌ð‘‚á¬; ꙽‌霣🄆.‌ð‘‚á¬; [C1, P1, V5, V6]; xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; ; xn--2q5a751a653w.xn--4sf0725i; [P1, V5, V6] # ꙽霣🄆.ð‘‚á¬
-꙽‌霣5,。‌ð‘‚á¬; ꙽‌霣5,.‌ð‘‚á¬; [C1, P1, V5, V6]; xn--5,-i1tz135dnbqa.xn--4sf36u6u4w; ; xn--5,-op8g373c.xn--4sf0725i; [P1, V5, V6] # ꙽霣5,.ð‘‚á¬
-xn--5,-op8g373c.xn--4sf0725i; ꙽霣5,.ð‘‚á¬; [P1, V5, V6]; xn--5,-op8g373c.xn--4sf0725i; ; ; # ꙽霣5,.ð‘‚á¬
-xn--5,-i1tz135dnbqa.xn--4sf36u6u4w; ꙽‌霣5,.‌ð‘‚á¬; [C1, P1, V5, V6]; xn--5,-i1tz135dnbqa.xn--4sf36u6u4w; ; ; # ꙽霣5,.ð‘‚á¬
-xn--2q5a751a653w.xn--4sf0725i; ꙽霣🄆.ð‘‚á¬; [V5, V6]; xn--2q5a751a653w.xn--4sf0725i; ; ; # ꙽霣🄆.ð‘‚á¬
-xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; ꙽‌霣🄆.‌ð‘‚á¬; [C1, V5, V6]; xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; ; ; # ꙽霣🄆.ð‘‚á¬
-兎。ᠼ󠴜𑚶𑰿; 兎.ᠼ󠴜𑚶𑰿; [P1, V6]; xn--b5q.xn--v7e6041kqqd4m251b; ; ; # 兎.ᠼ𑚶𑰿
-兎。ᠼ󠴜𑚶𑰿; 兎.ᠼ󠴜𑚶𑰿; [P1, V6]; xn--b5q.xn--v7e6041kqqd4m251b; ; ; # 兎.ᠼ𑚶𑰿
+-\u0C4D𞾀𑲓。\u200D\u0D4D; -\u0C4D𞾀𑲓.\u200D\u0D4D; [B1, C2, V3, V6]; xn----x6e0220sclug.xn--wxc317g; ; xn----x6e0220sclug.xn--wxc; [B1, V3, V5, V6] # -à±ð‘²“.àµ
+-\u0C4D𞾀𑲓。\u200D\u0D4D; -\u0C4D𞾀𑲓.\u200D\u0D4D; [B1, C2, V3, V6]; xn----x6e0220sclug.xn--wxc317g; ; xn----x6e0220sclug.xn--wxc; [B1, V3, V5, V6] # -à±ð‘²“.àµ
+xn----x6e0220sclug.xn--wxc; -\u0C4D𞾀𑲓.\u0D4D; [B1, V3, V5, V6]; xn----x6e0220sclug.xn--wxc; ; ; # -à±ð‘²“.àµ
+xn----x6e0220sclug.xn--wxc317g; -\u0C4D𞾀𑲓.\u200D\u0D4D; [B1, C2, V3, V6]; xn----x6e0220sclug.xn--wxc317g; ; ; # -à±ð‘²“.àµ
+\uA67D\u200C霣🄆。\u200Cð‘‚\u1B01; \uA67D\u200C霣🄆.\u200Cð‘‚\u1B01; [C1, V5, V6]; xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; ; xn--2q5a751a653w.xn--4sf0725i; [V5, V6] # ꙽霣🄆.ð‘‚á¬
+\uA67D\u200C霣🄆。\u200Cð‘‚\u1B01; \uA67D\u200C霣🄆.\u200Cð‘‚\u1B01; [C1, V5, V6]; xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; ; xn--2q5a751a653w.xn--4sf0725i; [V5, V6] # ꙽霣🄆.ð‘‚á¬
+\uA67D\u200C霣5,。\u200Cð‘‚\u1B01; \uA67D\u200C霣5,.\u200Cð‘‚\u1B01; [C1, V5, V6]; xn--5,-i1tz135dnbqa.xn--4sf36u6u4w; ; xn--5,-op8g373c.xn--4sf0725i; [V5, V6] # ꙽霣5,.ð‘‚á¬
+xn--5,-op8g373c.xn--4sf0725i; \uA67D霣5,.ð‘‚\u1B01; [V5, V6]; xn--5,-op8g373c.xn--4sf0725i; ; ; # ꙽霣5,.ð‘‚á¬
+xn--5,-i1tz135dnbqa.xn--4sf36u6u4w; \uA67D\u200C霣5,.\u200Cð‘‚\u1B01; [C1, V5, V6]; xn--5,-i1tz135dnbqa.xn--4sf36u6u4w; ; ; # ꙽霣5,.ð‘‚á¬
+xn--2q5a751a653w.xn--4sf0725i; \uA67D霣🄆.ð‘‚\u1B01; [V5, V6]; xn--2q5a751a653w.xn--4sf0725i; ; ; # ꙽霣🄆.ð‘‚á¬
+xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; \uA67D\u200C霣🄆.\u200Cð‘‚\u1B01; [C1, V5, V6]; xn--0ug4208b2vjuk63a.xn--4sf36u6u4w; ; ; # ꙽霣🄆.ð‘‚á¬
+兎。ᠼ󠴜𑚶𑰿; 兎.ᠼ󠴜𑚶𑰿; [V6]; xn--b5q.xn--v7e6041kqqd4m251b; ; ; # 兎.ᠼ𑚶𑰿
+兎。ᠼ󠴜𑚶𑰿; 兎.ᠼ󠴜𑚶𑰿; [V6]; xn--b5q.xn--v7e6041kqqd4m251b; ; ; # 兎.ᠼ𑚶𑰿
xn--b5q.xn--v7e6041kqqd4m251b; 兎.ᠼ󠴜𑚶𑰿; [V6]; xn--b5q.xn--v7e6041kqqd4m251b; ; ; # 兎.ᠼ𑚶𑰿
-ðŸ™ï½¡â€ðŸ¸â€â·; 1.â€2â€7; [C2]; 1.xn--27-l1tb; ; 1.27; [] # 1.27
-1。â€2â€7; 1.â€2â€7; [C2]; 1.xn--27-l1tb; ; 1.27; [] # 1.27
+ðŸ™ï½¡\u200DðŸ¸\u200Dâ·; 1.\u200D2\u200D7; [C2]; 1.xn--27-l1tb; ; 1.27; [] # 1.27
+1。\u200D2\u200D7; 1.\u200D2\u200D7; [C2]; 1.xn--27-l1tb; ; 1.27; [] # 1.27
1.27; ; ; ; ; ; # 1.27
-1.xn--27-l1tb; 1.â€2â€7; [C2]; 1.xn--27-l1tb; ; ; # 1.27
-ᡨ-。󠻋ðŸ·; ᡨ-.ó »‹1; [P1, V3, V6]; xn----z8j.xn--1-5671m; ; ; # ᡨ-.1
-ᡨ-。󠻋1; ᡨ-.󠻋1; [P1, V3, V6]; xn----z8j.xn--1-5671m; ; ; # ᡨ-.1
+1.xn--27-l1tb; 1.\u200D2\u200D7; [C2]; 1.xn--27-l1tb; ; ; # 1.27
+ᡨ-。󠻋ðŸ·; ᡨ-.ó »‹1; [V3, V6]; xn----z8j.xn--1-5671m; ; ; # ᡨ-.1
+ᡨ-。󠻋1; ᡨ-.󠻋1; [V3, V6]; xn----z8j.xn--1-5671m; ; ; # ᡨ-.1
xn----z8j.xn--1-5671m; ᡨ-.󠻋1; [V3, V6]; xn----z8j.xn--1-5671m; ; ; # ᡨ-.1
-ð‘°»ñµ€ð«šï¼ŽÙ¨â¹; ð‘°»ñµ€ð«š.Ù¨9; [B1, P1, V5, V6]; xn--gx9cr01aul57i.xn--9-oqc; ; ; # ð‘°»ð«š.Ù¨9
-ð‘°»ñµ€ð«š.Ù¨9; ; [B1, P1, V5, V6]; xn--gx9cr01aul57i.xn--9-oqc; ; ; # ð‘°»ð«š.Ù¨9
-xn--gx9cr01aul57i.xn--9-oqc; ð‘°»ñµ€ð«š.Ù¨9; [B1, V5, V6]; xn--gx9cr01aul57i.xn--9-oqc; ; ; # ð‘°»ð«š.Ù¨9
-Ⴜ򈷭ྀ⾇。Ⴏ♀‌‌; Ⴜ򈷭ྀ舛.Ⴏ♀‌‌; [C1, P1, V6]; xn--zed54dz10wo343g.xn--nnd089ea464d; ; xn--zed54dz10wo343g.xn--nnd651i; [P1, V6] # Ⴜྀ舛.Ⴏ♀
-Ⴜ򈷭ྀ舛。Ⴏ♀‌‌; Ⴜ򈷭ྀ舛.Ⴏ♀‌‌; [C1, P1, V6]; xn--zed54dz10wo343g.xn--nnd089ea464d; ; xn--zed54dz10wo343g.xn--nnd651i; [P1, V6] # Ⴜྀ舛.Ⴏ♀
-â´œòˆ·­à¾€èˆ›ã€‚â´â™€â€Œâ€Œ; â´œòˆ·­à¾€èˆ›.â´â™€â€Œâ€Œ; [C1, P1, V6]; xn--zed372mdj2do3v4h.xn--0uga678bgyh; ; xn--zed372mdj2do3v4h.xn--e5h11w; [P1, V6] # ⴜྀ舛.â´â™€
-xn--zed372mdj2do3v4h.xn--e5h11w; â´œòˆ·­à¾€èˆ›.â´â™€; [V6]; xn--zed372mdj2do3v4h.xn--e5h11w; ; ; # ⴜྀ舛.â´â™€
-xn--zed372mdj2do3v4h.xn--0uga678bgyh; â´œòˆ·­à¾€èˆ›.â´â™€â€Œâ€Œ; [C1, V6]; xn--zed372mdj2do3v4h.xn--0uga678bgyh; ; ; # ⴜྀ舛.â´â™€
-xn--zed54dz10wo343g.xn--nnd651i; Ⴜ򈷭ྀ舛.Ⴏ♀; [V6]; xn--zed54dz10wo343g.xn--nnd651i; ; ; # Ⴜྀ舛.Ⴏ♀
-xn--zed54dz10wo343g.xn--nnd089ea464d; Ⴜ򈷭ྀ舛.Ⴏ♀‌‌; [C1, V6]; xn--zed54dz10wo343g.xn--nnd089ea464d; ; ; # Ⴜྀ舛.Ⴏ♀
-â´œòˆ·­à¾€â¾‡ã€‚â´â™€â€Œâ€Œ; â´œòˆ·­à¾€èˆ›.â´â™€â€Œâ€Œ; [C1, P1, V6]; xn--zed372mdj2do3v4h.xn--0uga678bgyh; ; xn--zed372mdj2do3v4h.xn--e5h11w; [P1, V6] # ⴜྀ舛.â´â™€
-ð‘†ðŸ°.â€; ð‘†4.â€; [C2, V5]; xn--4-xu7i.xn--1ug; ; xn--4-xu7i.; [V5] # ð‘†4.
-ð‘†4.â€; ; [C2, V5]; xn--4-xu7i.xn--1ug; ; xn--4-xu7i.; [V5] # ð‘†4.
+ð‘°»ñµ€ð«šï¼Ž\u0668â¹; ð‘°»ñµ€ð«š.\u06689; [B1, V5, V6]; xn--gx9cr01aul57i.xn--9-oqc; ; ; # ð‘°»ð«š.Ù¨9
+ð‘°»ñµ€ð«š.\u06689; ; [B1, V5, V6]; xn--gx9cr01aul57i.xn--9-oqc; ; ; # ð‘°»ð«š.Ù¨9
+xn--gx9cr01aul57i.xn--9-oqc; ð‘°»ñµ€ð«š.\u06689; [B1, V5, V6]; xn--gx9cr01aul57i.xn--9-oqc; ; ; # ð‘°»ð«š.Ù¨9
+Ⴜ򈷭\u0F80⾇。Ⴏ♀\u200C\u200C; Ⴜ򈷭\u0F80舛.Ⴏ♀\u200C\u200C; [C1, V6]; xn--zed54dz10wo343g.xn--nnd089ea464d; ; xn--zed54dz10wo343g.xn--nnd651i; [V6] # Ⴜྀ舛.Ⴏ♀
+Ⴜ򈷭\u0F80舛。Ⴏ♀\u200C\u200C; Ⴜ򈷭\u0F80舛.Ⴏ♀\u200C\u200C; [C1, V6]; xn--zed54dz10wo343g.xn--nnd089ea464d; ; xn--zed54dz10wo343g.xn--nnd651i; [V6] # Ⴜྀ舛.Ⴏ♀
+â´œòˆ·­\u0F80舛。â´â™€\u200C\u200C; â´œòˆ·­\u0F80舛.â´â™€\u200C\u200C; [C1, V6]; xn--zed372mdj2do3v4h.xn--0uga678bgyh; ; xn--zed372mdj2do3v4h.xn--e5h11w; [V6] # ⴜྀ舛.â´â™€
+xn--zed372mdj2do3v4h.xn--e5h11w; â´œòˆ·­\u0F80舛.â´â™€; [V6]; xn--zed372mdj2do3v4h.xn--e5h11w; ; ; # ⴜྀ舛.â´â™€
+xn--zed372mdj2do3v4h.xn--0uga678bgyh; â´œòˆ·­\u0F80舛.â´â™€\u200C\u200C; [C1, V6]; xn--zed372mdj2do3v4h.xn--0uga678bgyh; ; ; # ⴜྀ舛.â´â™€
+xn--zed54dz10wo343g.xn--nnd651i; Ⴜ򈷭\u0F80舛.Ⴏ♀; [V6]; xn--zed54dz10wo343g.xn--nnd651i; ; ; # Ⴜྀ舛.Ⴏ♀
+xn--zed54dz10wo343g.xn--nnd089ea464d; Ⴜ򈷭\u0F80舛.Ⴏ♀\u200C\u200C; [C1, V6]; xn--zed54dz10wo343g.xn--nnd089ea464d; ; ; # Ⴜྀ舛.Ⴏ♀
+â´œòˆ·­\u0F80⾇。â´â™€\u200C\u200C; â´œòˆ·­\u0F80舛.â´â™€\u200C\u200C; [C1, V6]; xn--zed372mdj2do3v4h.xn--0uga678bgyh; ; xn--zed372mdj2do3v4h.xn--e5h11w; [V6] # ⴜྀ舛.â´â™€
+ð‘†ðŸ°.\u200D; ð‘†4.\u200D; [C2, V5]; xn--4-xu7i.xn--1ug; ; xn--4-xu7i.; [V5] # ð‘†4.
+ð‘†4.\u200D; ; [C2, V5]; xn--4-xu7i.xn--1ug; ; xn--4-xu7i.; [V5] # ð‘†4.
xn--4-xu7i.; ð‘†4.; [V5]; xn--4-xu7i.; ; ; # ð‘†4.
-xn--4-xu7i.xn--1ug; ð‘†4.â€; [C2, V5]; xn--4-xu7i.xn--1ug; ; ; # ð‘†4.
-ñ®´˜á‚¾ç™€ï½¡ð‘˜¿â€â€Œë¶¼; ñ®´˜á‚¾ç™€.𑘿â€â€Œë¶¼; [C1, P1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [P1, V5, V6] # Ⴞ癀.𑘿붼
-ñ®´˜á‚¾ç™€ï½¡ð‘˜¿â€â€Œá„‡á…°á†«; ñ®´˜á‚¾ç™€.𑘿â€â€Œë¶¼; [C1, P1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [P1, V5, V6] # Ⴞ癀.𑘿붼
-ñ®´˜á‚¾ç™€ã€‚𑘿â€â€Œë¶¼; ñ®´˜á‚¾ç™€.𑘿â€â€Œë¶¼; [C1, P1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [P1, V5, V6] # Ⴞ癀.𑘿붼
-ñ®´˜á‚¾ç™€ã€‚𑘿â€â€Œá„‡á…°á†«; ñ®´˜á‚¾ç™€.𑘿â€â€Œë¶¼; [C1, P1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [P1, V5, V6] # Ⴞ癀.𑘿붼
-ñ®´˜â´žç™€ã€‚𑘿â€â€Œá„‡á…°á†«; ñ®´˜â´žç™€.𑘿â€â€Œë¶¼; [C1, P1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [P1, V5, V6] # ⴞ癀.𑘿붼
-ñ®´˜â´žç™€ã€‚𑘿â€â€Œë¶¼; ñ®´˜â´žç™€.𑘿â€â€Œë¶¼; [C1, P1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [P1, V5, V6] # ⴞ癀.𑘿붼
+xn--4-xu7i.xn--1ug; ð‘†4.\u200D; [C2, V5]; xn--4-xu7i.xn--1ug; ; ; # ð‘†4.
+񮴘Ⴞ癀。𑘿\u200D\u200C붼; 񮴘Ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [V5, V6] # Ⴞ癀.𑘿붼
+񮴘Ⴞ癀。𑘿\u200D\u200C붼; 񮴘Ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [V5, V6] # Ⴞ癀.𑘿붼
+񮴘Ⴞ癀。𑘿\u200D\u200C붼; 񮴘Ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [V5, V6] # Ⴞ癀.𑘿붼
+񮴘Ⴞ癀。𑘿\u200D\u200C붼; 񮴘Ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; xn--2nd6803c7q37d.xn--et3bn23n; [V5, V6] # Ⴞ癀.𑘿붼
+񮴘ⴞ癀。𑘿\u200D\u200C붼; 񮴘ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [V5, V6] # ⴞ癀.𑘿붼
+񮴘ⴞ癀。𑘿\u200D\u200C붼; 񮴘ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [V5, V6] # ⴞ癀.𑘿붼
xn--mlju35u7qx2f.xn--et3bn23n; 񮴘ⴞ癀.𑘿붼; [V5, V6]; xn--mlju35u7qx2f.xn--et3bn23n; ; ; # ⴞ癀.𑘿붼
-xn--mlju35u7qx2f.xn--0ugb6122js83c; ñ®´˜â´žç™€.𑘿â€â€Œë¶¼; [C1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; ; # ⴞ癀.𑘿붼
+xn--mlju35u7qx2f.xn--0ugb6122js83c; 񮴘ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; ; # ⴞ癀.𑘿붼
xn--2nd6803c7q37d.xn--et3bn23n; 񮴘Ⴞ癀.𑘿붼; [V5, V6]; xn--2nd6803c7q37d.xn--et3bn23n; ; ; # Ⴞ癀.𑘿붼
-xn--2nd6803c7q37d.xn--0ugb6122js83c; ñ®´˜á‚¾ç™€.𑘿â€â€Œë¶¼; [C1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; ; # Ⴞ癀.𑘿붼
-ñ®´˜â´žç™€ï½¡ð‘˜¿â€â€Œá„‡á…°á†«; ñ®´˜â´žç™€.𑘿â€â€Œë¶¼; [C1, P1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [P1, V5, V6] # ⴞ癀.𑘿붼
-ñ®´˜â´žç™€ï½¡ð‘˜¿â€â€Œë¶¼; ñ®´˜â´žç™€.𑘿â€â€Œë¶¼; [C1, P1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [P1, V5, V6] # ⴞ癀.𑘿붼
-󚀅-à¯ã€‚Ú¹; 󚀅-à¯.Ú¹; [B6, P1, V6]; xn----mze84808x.xn--skb; ; ; # -à¯.Ú¹
-xn----mze84808x.xn--skb; 󚀅-à¯.Ú¹; [B6, V6]; xn----mze84808x.xn--skb; ; ; # -à¯.Ú¹
-ᡃðŸ§â‰¯á £ï¼Žæ°ñ¨±ê«; ᡃ5≯ᠣ.æ°ñ¨±ê«; [P1, V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.æ°ê«
-ᡃðŸ§≯ᠣ.æ°ñ¨±ê«; ᡃ5≯ᠣ.æ°ñ¨±ê«; [P1, V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.æ°ê«
-ᡃ5≯ᠣ.æ°ñ¨±ê«; ; [P1, V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.æ°ê«
-ᡃ5≯ᠣ.æ°ñ¨±ê«; ᡃ5≯ᠣ.æ°ñ¨±ê«; [P1, V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.æ°ê«
+xn--2nd6803c7q37d.xn--0ugb6122js83c; 񮴘Ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--2nd6803c7q37d.xn--0ugb6122js83c; ; ; # Ⴞ癀.𑘿붼
+񮴘ⴞ癀。𑘿\u200D\u200C붼; 񮴘ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [V5, V6] # ⴞ癀.𑘿붼
+񮴘ⴞ癀。𑘿\u200D\u200C붼; 񮴘ⴞ癀.𑘿\u200D\u200C붼; [C1, V5, V6]; xn--mlju35u7qx2f.xn--0ugb6122js83c; ; xn--mlju35u7qx2f.xn--et3bn23n; [V5, V6] # ⴞ癀.𑘿붼
+󚀅-\u0BCD。\u06B9; 󚀅-\u0BCD.\u06B9; [B6, V6]; xn----mze84808x.xn--skb; ; ; # -à¯.Ú¹
+xn----mze84808x.xn--skb; 󚀅-\u0BCD.\u06B9; [B6, V6]; xn----mze84808x.xn--skb; ; ; # -à¯.Ú¹
+ᡃðŸ§â‰¯á £ï¼Žæ°ñ¨±ê«; ᡃ5≯ᠣ.æ°ñ¨±ê«; [V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.æ°ê«
+ᡃðŸ§>\u0338ᠣ.æ°ñ¨±ê«; ᡃ5≯ᠣ.æ°ñ¨±ê«; [V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.æ°ê«
+ᡃ5≯ᠣ.æ°ñ¨±ê«; ; [V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.æ°ê«
+ᡃ5>\u0338á £.æ°ñ¨±ê«; ᡃ5≯ᠣ.æ°ñ¨±ê«; [V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.æ°ê«
xn--5-24jyf768b.xn--lqw213ime95g; ᡃ5≯ᠣ.æ°ñ¨±ê«; [V6]; xn--5-24jyf768b.xn--lqw213ime95g; ; ; # ᡃ5≯ᠣ.æ°ê«
-ð¹¬ð©‡ï¼Žà½¶; ð¹¬ð©‡.ྲྀ; [B1, B3, B6, V5]; xn--ko0d8295a.xn--zed3h; ; ; # ð¹¬ð©‡.ྲྀ
-ð¹¬ð©‡ï¼Žà¾²à¾€; ð¹¬ð©‡.ྲྀ; [B1, B3, B6, V5]; xn--ko0d8295a.xn--zed3h; ; ; # ð¹¬ð©‡.ྲྀ
-ð¹¬ð©‡.ྲྀ; ; [B1, B3, B6, V5]; xn--ko0d8295a.xn--zed3h; ; ; # ð¹¬ð©‡.ྲྀ
-xn--ko0d8295a.xn--zed3h; ð¹¬ð©‡.ྲྀ; [B1, B3, B6, V5]; xn--ko0d8295a.xn--zed3h; ; ; # ð¹¬ð©‡.ྲྀ
--𑈶â’.⒎𰛢󠎭; -𑈶â’.⒎𰛢󠎭; [P1, V3, V6]; xn----scp6252h.xn--zshy411yzpx2d; ; ; # -𑈶â’.⒎𰛢
--𑈶8..7.𰛢󠎭; ; [P1, V3, V6, X4_2]; xn---8-bv5o..7.xn--c35nf1622b; [P1, V3, V6, A4_2]; ; # -𑈶8..7.𰛢
+ð¹¬ð©‡ï¼Ž\u0F76; ð¹¬ð©‡.\u0FB2\u0F80; [B1, V5]; xn--ko0d8295a.xn--zed3h; ; ; # ð¹¬ð©‡.ྲྀ
+ð¹¬ð©‡ï¼Ž\u0FB2\u0F80; ð¹¬ð©‡.\u0FB2\u0F80; [B1, V5]; xn--ko0d8295a.xn--zed3h; ; ; # ð¹¬ð©‡.ྲྀ
+ð¹¬ð©‡.\u0FB2\u0F80; ; [B1, V5]; xn--ko0d8295a.xn--zed3h; ; ; # ð¹¬ð©‡.ྲྀ
+xn--ko0d8295a.xn--zed3h; ð¹¬ð©‡.\u0FB2\u0F80; [B1, V5]; xn--ko0d8295a.xn--zed3h; ; ; # ð¹¬ð©‡.ྲྀ
+-𑈶â’.⒎𰛢󠎭; -𑈶â’.⒎𰛢󠎭; [V3, V6]; xn----scp6252h.xn--zshy411yzpx2d; ; ; # -𑈶â’.⒎𰛢
+-𑈶8..7.𰛢󠎭; ; [V3, V6, X4_2]; xn---8-bv5o..7.xn--c35nf1622b; [V3, V6, A4_2]; ; # -𑈶8..7.𰛢
xn---8-bv5o..7.xn--c35nf1622b; -𑈶8..7.𰛢󠎭; [V3, V6, X4_2]; xn---8-bv5o..7.xn--c35nf1622b; [V3, V6, A4_2]; ; # -𑈶8..7.𰛢
xn----scp6252h.xn--zshy411yzpx2d; -𑈶â’.⒎𰛢󠎭; [V3, V6]; xn----scp6252h.xn--zshy411yzpx2d; ; ; # -𑈶â’.⒎𰛢
-‌Ⴁç•â€ï¼Žâ‰®; ‌Ⴁç•â€.≮; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # á‚¡ç•.≮
-‌Ⴁç•â€ï¼Ž≮; ‌Ⴁç•â€.≮; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # á‚¡ç•.≮
-‌Ⴁç•â€.≮; ; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # á‚¡ç•.≮
-‌Ⴁç•â€.≮; ‌Ⴁç•â€.≮; [C1, C2, P1, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [P1, V6] # á‚¡ç•.≮
-‌â´ç•â€.≮; ‌â´ç•â€.≮; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # â´ç•.≮
-‌â´ç•â€.≮; ; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # â´ç•.≮
-xn--skjy82u.xn--gdh; â´ç•.≮; [V6]; xn--skjy82u.xn--gdh; ; ; # â´ç•.≮
-xn--0ugc160hb36e.xn--gdh; ‌â´ç•â€.≮; [C1, C2, V6]; xn--0ugc160hb36e.xn--gdh; ; ; # â´ç•.≮
+\u200Cá‚¡ç•\u200D.≮; \u200Cá‚¡ç•\u200D.≮; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [V6] # á‚¡ç•.≮
+\u200Cá‚¡ç•\u200D.<\u0338; \u200Cá‚¡ç•\u200D.≮; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [V6] # á‚¡ç•.≮
+\u200Cá‚¡ç•\u200D.≮; ; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [V6] # á‚¡ç•.≮
+\u200Cá‚¡ç•\u200D.<\u0338; \u200Cá‚¡ç•\u200D.≮; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; xn--8md0962c.xn--gdh; [V6] # á‚¡ç•.≮
+\u200Câ´ç•\u200D.<\u0338; \u200Câ´ç•\u200D.≮; [C1, C2]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [] # â´ç•.≮
+\u200Câ´ç•\u200D.≮; ; [C1, C2]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [] # â´ç•.≮
+xn--skjy82u.xn--gdh; â´ç•.≮; ; xn--skjy82u.xn--gdh; ; ; # â´ç•.≮
+â´ç•.≮; ; ; xn--skjy82u.xn--gdh; ; ; # â´ç•.≮
+â´ç•.<\u0338; â´ç•.≮; ; xn--skjy82u.xn--gdh; ; ; # â´ç•.≮
+á‚¡ç•.<\u0338; á‚¡ç•.≮; [V6]; xn--8md0962c.xn--gdh; ; ; # á‚¡ç•.≮
+á‚¡ç•.≮; ; [V6]; xn--8md0962c.xn--gdh; ; ; # á‚¡ç•.≮
xn--8md0962c.xn--gdh; á‚¡ç•.≮; [V6]; xn--8md0962c.xn--gdh; ; ; # á‚¡ç•.≮
-xn--8md700fea3748f.xn--gdh; ‌Ⴁç•â€.≮; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; ; # á‚¡ç•.≮
-‌â´ç•â€ï¼Ž≮; ‌â´ç•â€.≮; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # â´ç•.≮
-‌â´ç•â€ï¼Žâ‰®; ‌â´ç•â€.≮; [C1, C2, P1, V6]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [P1, V6] # â´ç•.≮
-歷。ð¹»â‰¯ó³›½â€; æ­·.ð¹»â‰¯ó³›½â€; [B1, C2, P1, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, P1, V6] # æ­·.ð¹»â‰¯
-歷。ð¹»≯󳛽â€; æ­·.ð¹»â‰¯ó³›½â€; [B1, C2, P1, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, P1, V6] # æ­·.ð¹»â‰¯
-歷。ð¹»â‰¯ó³›½â€; æ­·.ð¹»â‰¯ó³›½â€; [B1, C2, P1, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, P1, V6] # æ­·.ð¹»â‰¯
-歷。ð¹»≯󳛽â€; æ­·.ð¹»â‰¯ó³›½â€; [B1, C2, P1, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, P1, V6] # æ­·.ð¹»â‰¯
+xn--0ugc160hb36e.xn--gdh; \u200Câ´ç•\u200D.≮; [C1, C2]; xn--0ugc160hb36e.xn--gdh; ; ; # â´ç•.≮
+xn--8md700fea3748f.xn--gdh; \u200Cá‚¡ç•\u200D.≮; [C1, C2, V6]; xn--8md700fea3748f.xn--gdh; ; ; # á‚¡ç•.≮
+\u200Câ´ç•\u200D.<\u0338; \u200Câ´ç•\u200D.≮; [C1, C2]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [] # â´ç•.≮
+\u200Câ´ç•\u200D.≮; \u200Câ´ç•\u200D.≮; [C1, C2]; xn--0ugc160hb36e.xn--gdh; ; xn--skjy82u.xn--gdh; [] # â´ç•.≮
+歷。ð¹»â‰¯ó³›½\u200D; æ­·.ð¹»â‰¯ó³›½\u200D; [B1, C2, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, V6] # æ­·.ð¹»â‰¯
+歷。ð¹»>\u0338ó³›½\u200D; æ­·.ð¹»â‰¯ó³›½\u200D; [B1, C2, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, V6] # æ­·.ð¹»â‰¯
+歷。ð¹»â‰¯ó³›½\u200D; æ­·.ð¹»â‰¯ó³›½\u200D; [B1, C2, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, V6] # æ­·.ð¹»â‰¯
+歷。ð¹»>\u0338ó³›½\u200D; æ­·.ð¹»â‰¯ó³›½\u200D; [B1, C2, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; xn--nmw.xn--hdh7804gdms2h; [B1, V6] # æ­·.ð¹»â‰¯
xn--nmw.xn--hdh7804gdms2h; æ­·.ð¹»â‰¯ó³›½; [B1, V6]; xn--nmw.xn--hdh7804gdms2h; ; ; # æ­·.ð¹»â‰¯
-xn--nmw.xn--1ugx6gs128a1134j; æ­·.ð¹»â‰¯ó³›½â€; [B1, C2, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; ; # æ­·.ð¹»â‰¯
-໋â€ï¼ŽéŽó °‘; ໋â€.éŽó °‘; [C2, P1, V5, V6]; xn--t8c059f.xn--iz4a43209d; ; xn--t8c.xn--iz4a43209d; [P1, V5, V6] # ໋.éŽ
-໋â€.éŽó °‘; ; [C2, P1, V5, V6]; xn--t8c059f.xn--iz4a43209d; ; xn--t8c.xn--iz4a43209d; [P1, V5, V6] # ໋.éŽ
-xn--t8c.xn--iz4a43209d; ໋.éŽó °‘; [V5, V6]; xn--t8c.xn--iz4a43209d; ; ; # ໋.éŽ
-xn--t8c059f.xn--iz4a43209d; ໋â€.éŽó °‘; [C2, V5, V6]; xn--t8c059f.xn--iz4a43209d; ; ; # ໋.éŽ
-â€â€Œðž¤€ï½¡ð±˜…ð¶ƒ; â€â€Œðž¤¢.𱘅ð¶ƒ; [B1, B5, B6, C1, C2, P1, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, P1, V6] # 𞤢.
-â€â€Œðž¤€ã€‚𱘅ð¶ƒ; â€â€Œðž¤¢.𱘅ð¶ƒ; [B1, B5, B6, C1, C2, P1, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, P1, V6] # 𞤢.
-â€â€Œðž¤¢ã€‚𱘅ð¶ƒ; â€â€Œðž¤¢.𱘅ð¶ƒ; [B1, B5, B6, C1, C2, P1, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, P1, V6] # 𞤢.
-xn--9d6h.xn--wh0dj799f; 𞤢.𱘅ð¶ƒ; [B5, B6, V6]; xn--9d6h.xn--wh0dj799f; ; ; # 𞤢.
-xn--0ugb45126a.xn--wh0dj799f; â€â€Œðž¤¢.𱘅ð¶ƒ; [B1, B5, B6, C1, C2, V6]; xn--0ugb45126a.xn--wh0dj799f; ; ; # 𞤢.
-â€â€Œðž¤¢ï½¡ð±˜…ð¶ƒ; â€â€Œðž¤¢.𱘅ð¶ƒ; [B1, B5, B6, C1, C2, P1, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, P1, V6] # 𞤢.
-ب≠ðŸ«-.Ï‚â’ð¹¦â‰ ; ب≠9-.Ï‚â’ð¹¦â‰ ; [B3, B5, B6, P1, V3, V6]; xn--9--etd0100a.xn--3xa097mzpbzz04b; ; xn--9--etd0100a.xn--4xa887mzpbzz04b; # ب≠9-.Ï‚â’ð¹¦â‰ 
-ب≠ðŸ«-.Ï‚â’ð¹¦≠; ب≠9-.Ï‚â’ð¹¦â‰ ; [B3, B5, B6, P1, V3, V6]; xn--9--etd0100a.xn--3xa097mzpbzz04b; ; xn--9--etd0100a.xn--4xa887mzpbzz04b; # ب≠9-.Ï‚â’ð¹¦â‰ 
-ب≠9-.Ï‚6.ð¹¦â‰ ; ; [B1, B3, P1, V3, V6]; xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; ; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; # ب≠9-.Ï‚6.ð¹¦â‰ 
-ب≠9-.Ï‚6.ð¹¦≠; ب≠9-.Ï‚6.ð¹¦â‰ ; [B1, B3, P1, V3, V6]; xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; ; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; # ب≠9-.Ï‚6.ð¹¦â‰ 
-ب≠9-.Σ6.ð¹¦≠; ب≠9-.σ6.ð¹¦â‰ ; [B1, B3, P1, V3, V6]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.ð¹¦â‰ 
-ب≠9-.Σ6.ð¹¦â‰ ; ب≠9-.σ6.ð¹¦â‰ ; [B1, B3, P1, V3, V6]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.ð¹¦â‰ 
-ب≠9-.σ6.ð¹¦â‰ ; ; [B1, B3, P1, V3, V6]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.ð¹¦â‰ 
-ب≠9-.σ6.ð¹¦≠; ب≠9-.σ6.ð¹¦â‰ ; [B1, B3, P1, V3, V6]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.ð¹¦â‰ 
-xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ب≠9-.σ6.ð¹¦â‰ ; [B1, B3, V3, V6]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.ð¹¦â‰ 
-xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; ب≠9-.Ï‚6.ð¹¦â‰ ; [B1, B3, V3, V6]; xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; ; ; # ب≠9-.Ï‚6.ð¹¦â‰ 
-ب≠ðŸ«-.Σâ’ð¹¦≠; ب≠9-.σâ’ð¹¦â‰ ; [B3, B5, B6, P1, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σâ’ð¹¦â‰ 
-ب≠ðŸ«-.Σâ’ð¹¦â‰ ; ب≠9-.σâ’ð¹¦â‰ ; [B3, B5, B6, P1, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σâ’ð¹¦â‰ 
-ب≠ðŸ«-.σâ’ð¹¦â‰ ; ب≠9-.σâ’ð¹¦â‰ ; [B3, B5, B6, P1, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σâ’ð¹¦â‰ 
-ب≠ðŸ«-.σâ’ð¹¦≠; ب≠9-.σâ’ð¹¦â‰ ; [B3, B5, B6, P1, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σâ’ð¹¦â‰ 
-xn--9--etd0100a.xn--4xa887mzpbzz04b; ب≠9-.σâ’ð¹¦â‰ ; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σâ’ð¹¦â‰ 
-xn--9--etd0100a.xn--3xa097mzpbzz04b; ب≠9-.Ï‚â’ð¹¦â‰ ; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--3xa097mzpbzz04b; ; ; # ب≠9-.Ï‚â’ð¹¦â‰ 
-ò‰›´.-á¡¢Ö’ð¨ ; ; [P1, V3, V6]; xn--ep37b.xn----hec165lho83b; ; ; # .-á¡¢Ö’ð¨ 
-xn--ep37b.xn----hec165lho83b; ò‰›´.-á¡¢Ö’ð¨ ; [V3, V6]; xn--ep37b.xn----hec165lho83b; ; ; # .-á¡¢Ö’ð¨ 
-ۋ⒈ß󠄽。ñ·‹-; ۋ⒈ß.ñ·‹-; [B2, B3, B6, P1, V3, V6]; xn--zca541ato3a.xn----q001f; ; xn--ss-d7d6651a.xn----q001f; # ۋ⒈ß.-
-Û‹1.ß󠄽。ñ·‹-; Û‹1.ß.ñ·‹-; [B6, P1, V3, V6]; xn--1-cwc.xn--zca.xn----q001f; ; xn--1-cwc.ss.xn----q001f; # Û‹1.ß.-
-Û‹1.SS󠄽。ñ·‹-; Û‹1.ss.ñ·‹-; [B6, P1, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # Û‹1.ss.-
-Û‹1.ss󠄽。ñ·‹-; Û‹1.ss.ñ·‹-; [B6, P1, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # Û‹1.ss.-
-Û‹1.Ss󠄽。ñ·‹-; Û‹1.ss.ñ·‹-; [B6, P1, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # Û‹1.ss.-
-xn--1-cwc.ss.xn----q001f; Û‹1.ss.ñ·‹-; [B6, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # Û‹1.ss.-
-xn--1-cwc.xn--zca.xn----q001f; Û‹1.ß.ñ·‹-; [B6, V3, V6]; xn--1-cwc.xn--zca.xn----q001f; ; ; # Û‹1.ß.-
-Û‹â’ˆSS󠄽。ñ·‹-; Û‹â’ˆss.ñ·‹-; [B2, B3, B6, P1, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # Û‹â’ˆss.-
-Û‹â’ˆss󠄽。ñ·‹-; Û‹â’ˆss.ñ·‹-; [B2, B3, B6, P1, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # Û‹â’ˆss.-
-Û‹â’ˆSs󠄽。ñ·‹-; Û‹â’ˆss.ñ·‹-; [B2, B3, B6, P1, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # Û‹â’ˆss.-
-xn--ss-d7d6651a.xn----q001f; Û‹â’ˆss.ñ·‹-; [B2, B3, B6, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # Û‹â’ˆss.-
-xn--zca541ato3a.xn----q001f; ۋ⒈ß.ñ·‹-; [B2, B3, B6, V3, V6]; xn--zca541ato3a.xn----q001f; ; ; # ۋ⒈ß.-
-𿀫.᮪ςႦâ€; 𿀫.᮪ςႦâ€; [C2, P1, V5, V6]; xn--nu4s.xn--3xa417dxriome; ; xn--nu4s.xn--4xa217dxri; [P1, V5, V6] # .᮪ςႦ
-𿀫.᮪ςႦâ€; ; [C2, P1, V5, V6]; xn--nu4s.xn--3xa417dxriome; ; xn--nu4s.xn--4xa217dxri; [P1, V5, V6] # .᮪ςႦ
-𿀫.᮪ςⴆâ€; ; [C2, P1, V5, V6]; xn--nu4s.xn--3xa353jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [P1, V5, V6] # .᮪ςⴆ
-𿀫.᮪ΣႦâ€; 𿀫.᮪σႦâ€; [C2, P1, V5, V6]; xn--nu4s.xn--4xa217dxriome; ; xn--nu4s.xn--4xa217dxri; [P1, V5, V6] # .᮪σႦ
-𿀫.᮪σⴆâ€; ; [C2, P1, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [P1, V5, V6] # .᮪σⴆ
-𿀫.᮪Σⴆâ€; 𿀫.᮪σⴆâ€; [C2, P1, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [P1, V5, V6] # .᮪σⴆ
-xn--nu4s.xn--4xa153j7im; 𿀫.᮪σⴆ; [V5, V6]; xn--nu4s.xn--4xa153j7im; ; ; # .᮪σⴆ
-xn--nu4s.xn--4xa153jk8cs1q; 𿀫.᮪σⴆâ€; [C2, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; ; # .᮪σⴆ
-xn--nu4s.xn--4xa217dxri; 𿀫.᮪σႦ; [V5, V6]; xn--nu4s.xn--4xa217dxri; ; ; # .᮪σႦ
-xn--nu4s.xn--4xa217dxriome; 𿀫.᮪σႦâ€; [C2, V5, V6]; xn--nu4s.xn--4xa217dxriome; ; ; # .᮪σႦ
-xn--nu4s.xn--3xa353jk8cs1q; 𿀫.᮪ςⴆâ€; [C2, V5, V6]; xn--nu4s.xn--3xa353jk8cs1q; ; ; # .᮪ςⴆ
-xn--nu4s.xn--3xa417dxriome; 𿀫.᮪ςႦâ€; [C2, V5, V6]; xn--nu4s.xn--3xa417dxriome; ; ; # .᮪ςႦ
-𿀫.᮪ςⴆâ€; 𿀫.᮪ςⴆâ€; [C2, P1, V5, V6]; xn--nu4s.xn--3xa353jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [P1, V5, V6] # .᮪ςⴆ
-𿀫.᮪ΣႦâ€; 𿀫.᮪σႦâ€; [C2, P1, V5, V6]; xn--nu4s.xn--4xa217dxriome; ; xn--nu4s.xn--4xa217dxri; [P1, V5, V6] # .᮪σႦ
-𿀫.᮪σⴆâ€; 𿀫.᮪σⴆâ€; [C2, P1, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [P1, V5, V6] # .᮪σⴆ
-𿀫.᮪Σⴆâ€; 𿀫.᮪σⴆâ€; [C2, P1, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [P1, V5, V6] # .᮪σⴆ
-⾆࣢.ðˆ´; 舌࣢.ðˆ´; [B1, B5, B6, P1, V6]; xn--l0b9413d.xn--kl1h; ; ; # 舌.ðˆ´
-舌࣢.ðˆ´; ; [B1, B5, B6, P1, V6]; xn--l0b9413d.xn--kl1h; ; ; # 舌.ðˆ´
-xn--l0b9413d.xn--kl1h; 舌࣢.ðˆ´; [B1, B5, B6, V6]; xn--l0b9413d.xn--kl1h; ; ; # 舌.ðˆ´
-â«žð¹¶ð–«´ã€‚â­ â’ˆ; â«žð¹¶ð–«´.â­ â’ˆ; [B1, P1, V6]; xn--53ix188et88b.xn--tsh52w; ; ; # â«žð¹¶ð–«´.â­ â’ˆ
+xn--nmw.xn--1ugx6gs128a1134j; æ­·.ð¹»â‰¯ó³›½\u200D; [B1, C2, V6]; xn--nmw.xn--1ugx6gs128a1134j; ; ; # æ­·.ð¹»â‰¯
+\u0ECB\u200D.éŽó °‘; \u0ECB\u200D.éŽó °‘; [C2, V5, V6]; xn--t8c059f.xn--iz4a43209d; ; xn--t8c.xn--iz4a43209d; [V5, V6] # ໋.éŽ
+\u0ECB\u200D.éŽó °‘; ; [C2, V5, V6]; xn--t8c059f.xn--iz4a43209d; ; xn--t8c.xn--iz4a43209d; [V5, V6] # ໋.éŽ
+xn--t8c.xn--iz4a43209d; \u0ECB.éŽó °‘; [V5, V6]; xn--t8c.xn--iz4a43209d; ; ; # ໋.éŽ
+xn--t8c059f.xn--iz4a43209d; \u0ECB\u200D.éŽó °‘; [C2, V5, V6]; xn--t8c059f.xn--iz4a43209d; ; ; # ໋.éŽ
+\u200D\u200C𞤀。𱘅ð¶ƒ; \u200D\u200C𞤢.𱘅ð¶ƒ; [B1, B5, B6, C1, C2, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, V6] # 𞤢.𱘅
+\u200D\u200C𞤀。𱘅ð¶ƒ; \u200D\u200C𞤢.𱘅ð¶ƒ; [B1, B5, B6, C1, C2, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, V6] # 𞤢.𱘅
+\u200D\u200C𞤢。𱘅ð¶ƒ; \u200D\u200C𞤢.𱘅ð¶ƒ; [B1, B5, B6, C1, C2, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, V6] # 𞤢.𱘅
+xn--9d6h.xn--wh0dj799f; 𞤢.𱘅ð¶ƒ; [B5, B6, V6]; xn--9d6h.xn--wh0dj799f; ; ; # 𞤢.𱘅
+xn--0ugb45126a.xn--wh0dj799f; \u200D\u200C𞤢.𱘅ð¶ƒ; [B1, B5, B6, C1, C2, V6]; xn--0ugb45126a.xn--wh0dj799f; ; ; # 𞤢.𱘅
+\u200D\u200C𞤢。𱘅ð¶ƒ; \u200D\u200C𞤢.𱘅ð¶ƒ; [B1, B5, B6, C1, C2, V6]; xn--0ugb45126a.xn--wh0dj799f; ; xn--9d6h.xn--wh0dj799f; [B5, B6, V6] # 𞤢.𱘅
+\u0628≠ðŸ«-.Ï‚â’ð¹¦â‰ ; \u0628≠9-.Ï‚â’ð¹¦â‰ ; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--3xa097mzpbzz04b; ; xn--9--etd0100a.xn--4xa887mzpbzz04b; # ب≠9-.Ï‚â’ð¹¦â‰ 
+\u0628=\u0338ðŸ«-.Ï‚â’ð¹¦=\u0338; \u0628≠9-.Ï‚â’ð¹¦â‰ ; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--3xa097mzpbzz04b; ; xn--9--etd0100a.xn--4xa887mzpbzz04b; # ب≠9-.Ï‚â’ð¹¦â‰ 
+\u0628≠9-.Ï‚6.ð¹¦â‰ ; ; [B1, B3, V3]; xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; ; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; # ب≠9-.Ï‚6.ð¹¦â‰ 
+\u0628=\u03389-.Ï‚6.ð¹¦=\u0338; \u0628≠9-.Ï‚6.ð¹¦â‰ ; [B1, B3, V3]; xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; ; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; # ب≠9-.Ï‚6.ð¹¦â‰ 
+\u0628=\u03389-.Σ6.ð¹¦=\u0338; \u0628≠9-.σ6.ð¹¦â‰ ; [B1, B3, V3]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.ð¹¦â‰ 
+\u0628≠9-.Σ6.ð¹¦â‰ ; \u0628≠9-.σ6.ð¹¦â‰ ; [B1, B3, V3]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.ð¹¦â‰ 
+\u0628≠9-.σ6.ð¹¦â‰ ; ; [B1, B3, V3]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.ð¹¦â‰ 
+\u0628=\u03389-.σ6.ð¹¦=\u0338; \u0628≠9-.σ6.ð¹¦â‰ ; [B1, B3, V3]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.ð¹¦â‰ 
+xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; \u0628≠9-.σ6.ð¹¦â‰ ; [B1, B3, V3]; xn--9--etd0100a.xn--6-zmb.xn--1ch8704g; ; ; # ب≠9-.σ6.ð¹¦â‰ 
+xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; \u0628≠9-.Ï‚6.ð¹¦â‰ ; [B1, B3, V3]; xn--9--etd0100a.xn--6-xmb.xn--1ch8704g; ; ; # ب≠9-.Ï‚6.ð¹¦â‰ 
+\u0628=\u0338ðŸ«-.Σâ’ð¹¦=\u0338; \u0628≠9-.σâ’ð¹¦â‰ ; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σâ’ð¹¦â‰ 
+\u0628≠ðŸ«-.Σâ’ð¹¦â‰ ; \u0628≠9-.σâ’ð¹¦â‰ ; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σâ’ð¹¦â‰ 
+\u0628≠ðŸ«-.σâ’ð¹¦â‰ ; \u0628≠9-.σâ’ð¹¦â‰ ; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σâ’ð¹¦â‰ 
+\u0628=\u0338ðŸ«-.σâ’ð¹¦=\u0338; \u0628≠9-.σâ’ð¹¦â‰ ; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σâ’ð¹¦â‰ 
+xn--9--etd0100a.xn--4xa887mzpbzz04b; \u0628≠9-.σâ’ð¹¦â‰ ; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--4xa887mzpbzz04b; ; ; # ب≠9-.σâ’ð¹¦â‰ 
+xn--9--etd0100a.xn--3xa097mzpbzz04b; \u0628≠9-.Ï‚â’ð¹¦â‰ ; [B3, B5, B6, V3, V6]; xn--9--etd0100a.xn--3xa097mzpbzz04b; ; ; # ب≠9-.Ï‚â’ð¹¦â‰ 
+ò‰›´.-á¡¢\u0592ð¨ ; ; [V3, V6]; xn--ep37b.xn----hec165lho83b; ; ; # .-á¡¢Ö’ð¨ 
+xn--ep37b.xn----hec165lho83b; ò‰›´.-á¡¢\u0592ð¨ ; [V3, V6]; xn--ep37b.xn----hec165lho83b; ; ; # .-á¡¢Ö’ð¨ 
+\u06CB⒈ß󠄽。ñ·‹-; \u06CB⒈ß.ñ·‹-; [B2, B3, B6, V3, V6]; xn--zca541ato3a.xn----q001f; ; xn--ss-d7d6651a.xn----q001f; # ۋ⒈ß.-
+\u06CB1.ß󠄽。ñ·‹-; \u06CB1.ß.ñ·‹-; [B6, V3, V6]; xn--1-cwc.xn--zca.xn----q001f; ; xn--1-cwc.ss.xn----q001f; # Û‹1.ß.-
+\u06CB1.SS󠄽。ñ·‹-; \u06CB1.ss.ñ·‹-; [B6, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # Û‹1.ss.-
+\u06CB1.ss󠄽。ñ·‹-; \u06CB1.ss.ñ·‹-; [B6, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # Û‹1.ss.-
+\u06CB1.Ss󠄽。ñ·‹-; \u06CB1.ss.ñ·‹-; [B6, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # Û‹1.ss.-
+xn--1-cwc.ss.xn----q001f; \u06CB1.ss.ñ·‹-; [B6, V3, V6]; xn--1-cwc.ss.xn----q001f; ; ; # Û‹1.ss.-
+xn--1-cwc.xn--zca.xn----q001f; \u06CB1.ß.ñ·‹-; [B6, V3, V6]; xn--1-cwc.xn--zca.xn----q001f; ; ; # Û‹1.ß.-
+\u06CBâ’ˆSS󠄽。ñ·‹-; \u06CBâ’ˆss.ñ·‹-; [B2, B3, B6, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # Û‹â’ˆss.-
+\u06CBâ’ˆss󠄽。ñ·‹-; \u06CBâ’ˆss.ñ·‹-; [B2, B3, B6, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # Û‹â’ˆss.-
+\u06CBâ’ˆSs󠄽。ñ·‹-; \u06CBâ’ˆss.ñ·‹-; [B2, B3, B6, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # Û‹â’ˆss.-
+xn--ss-d7d6651a.xn----q001f; \u06CBâ’ˆss.ñ·‹-; [B2, B3, B6, V3, V6]; xn--ss-d7d6651a.xn----q001f; ; ; # Û‹â’ˆss.-
+xn--zca541ato3a.xn----q001f; \u06CB⒈ß.ñ·‹-; [B2, B3, B6, V3, V6]; xn--zca541ato3a.xn----q001f; ; ; # ۋ⒈ß.-
+𿀫.\u1BAAςႦ\u200D; 𿀫.\u1BAAςႦ\u200D; [C2, V5, V6]; xn--nu4s.xn--3xa417dxriome; ; xn--nu4s.xn--4xa217dxri; [V5, V6] # .᮪ςႦ
+𿀫.\u1BAAςႦ\u200D; ; [C2, V5, V6]; xn--nu4s.xn--3xa417dxriome; ; xn--nu4s.xn--4xa217dxri; [V5, V6] # .᮪ςႦ
+𿀫.\u1BAAςⴆ\u200D; ; [C2, V5, V6]; xn--nu4s.xn--3xa353jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪ςⴆ
+𿀫.\u1BAAΣႦ\u200D; 𿀫.\u1BAAσႦ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa217dxriome; ; xn--nu4s.xn--4xa217dxri; [V5, V6] # .᮪σႦ
+𿀫.\u1BAAσⴆ\u200D; ; [C2, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪σⴆ
+𿀫.\u1BAAΣⴆ\u200D; 𿀫.\u1BAAσⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪σⴆ
+xn--nu4s.xn--4xa153j7im; 𿀫.\u1BAAσⴆ; [V5, V6]; xn--nu4s.xn--4xa153j7im; ; ; # .᮪σⴆ
+xn--nu4s.xn--4xa153jk8cs1q; 𿀫.\u1BAAσⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; ; # .᮪σⴆ
+xn--nu4s.xn--4xa217dxri; 𿀫.\u1BAAσႦ; [V5, V6]; xn--nu4s.xn--4xa217dxri; ; ; # .᮪σႦ
+xn--nu4s.xn--4xa217dxriome; 𿀫.\u1BAAσႦ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa217dxriome; ; ; # .᮪σႦ
+xn--nu4s.xn--3xa353jk8cs1q; 𿀫.\u1BAAςⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--3xa353jk8cs1q; ; ; # .᮪ςⴆ
+xn--nu4s.xn--3xa417dxriome; 𿀫.\u1BAAςႦ\u200D; [C2, V5, V6]; xn--nu4s.xn--3xa417dxriome; ; ; # .᮪ςႦ
+𿀫.\u1BAAςⴆ\u200D; 𿀫.\u1BAAςⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--3xa353jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪ςⴆ
+𿀫.\u1BAAΣႦ\u200D; 𿀫.\u1BAAσႦ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa217dxriome; ; xn--nu4s.xn--4xa217dxri; [V5, V6] # .᮪σႦ
+𿀫.\u1BAAσⴆ\u200D; 𿀫.\u1BAAσⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪σⴆ
+𿀫.\u1BAAΣⴆ\u200D; 𿀫.\u1BAAσⴆ\u200D; [C2, V5, V6]; xn--nu4s.xn--4xa153jk8cs1q; ; xn--nu4s.xn--4xa153j7im; [V5, V6] # .᮪σⴆ
+⾆\u08E2.ðˆ´; 舌\u08E2.ðˆ´; [B1, B5, B6, V6]; xn--l0b9413d.xn--kl1h; ; ; # 舌.ðˆ´
+舌\u08E2.ðˆ´; ; [B1, B5, B6, V6]; xn--l0b9413d.xn--kl1h; ; ; # 舌.ðˆ´
+xn--l0b9413d.xn--kl1h; 舌\u08E2.ðˆ´; [B1, B5, B6, V6]; xn--l0b9413d.xn--kl1h; ; ; # 舌.ðˆ´
+â«žð¹¶ð–«´ã€‚â­ â’ˆ; â«žð¹¶ð–«´.â­ â’ˆ; [B1, V6]; xn--53ix188et88b.xn--tsh52w; ; ; # â«žð¹¶ð–«´.â­ â’ˆ
â«žð¹¶ð–«´ã€‚â­ 1.; â«žð¹¶ð–«´.â­ 1.; [B1]; xn--53ix188et88b.xn--1-h6r.; ; ; # â«žð¹¶ð–«´.â­ 1.
xn--53ix188et88b.xn--1-h6r.; â«žð¹¶ð–«´.â­ 1.; [B1]; xn--53ix188et88b.xn--1-h6r.; ; ; # â«žð¹¶ð–«´.â­ 1.
xn--53ix188et88b.xn--tsh52w; â«žð¹¶ð–«´.â­ â’ˆ; [B1, V6]; xn--53ix188et88b.xn--tsh52w; ; ; # â«žð¹¶ð–«´.â­ â’ˆ
-⒈‌ꫬ︒.à«; ⒈‌ꫬ︒.à«; [C1, P1, V5, V6]; xn--0ug78o720myr1c.xn--mfc; ; xn--tsh0720cse8b.xn--mfc; [P1, V5, V6] # ⒈ꫬ︒.à«
-1.‌ꫬ。.à«; 1.‌ꫬ..à«; [C1, V5, X4_2]; 1.xn--0ug7185c..xn--mfc; [C1, V5, A4_2]; 1.xn--sv9a..xn--mfc; [V5, A4_2] # 1.ꫬ..à«
-1.xn--sv9a..xn--mfc; 1.ꫬ..à«; [V5, X4_2]; 1.xn--sv9a..xn--mfc; [V5, A4_2]; ; # 1.ꫬ..à«
-1.xn--0ug7185c..xn--mfc; 1.‌ꫬ..à«; [C1, V5, X4_2]; 1.xn--0ug7185c..xn--mfc; [C1, V5, A4_2]; ; # 1.ꫬ..à«
-xn--tsh0720cse8b.xn--mfc; ⒈ꫬ︒.à«; [V5, V6]; xn--tsh0720cse8b.xn--mfc; ; ; # ⒈ꫬ︒.à«
-xn--0ug78o720myr1c.xn--mfc; ⒈‌ꫬ︒.à«; [C1, V5, V6]; xn--0ug78o720myr1c.xn--mfc; ; ; # ⒈ꫬ︒.à«
-ె。䰀٨𞭅󠅼; ె.䰀٨𞭅; [B1, B3, B5, B6, P1, V5, V6]; xn--eqc.xn--hib5476aim6t; ; ; # ె.䰀٨
-xn--eqc.xn--hib5476aim6t; ె.䰀٨𞭅; [B1, B3, B5, B6, V5, V6]; xn--eqc.xn--hib5476aim6t; ; ; # ె.䰀٨
-ßâ€.᯲ñ„¾¼; ; [C2, P1, V5, V6]; xn--zca870n.xn--0zf22107b; ; ss.xn--0zf22107b; [P1, V5, V6] # ß.᯲
-SSâ€.᯲ñ„¾¼; ssâ€.᯲ñ„¾¼; [C2, P1, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ss.xn--0zf22107b; [P1, V5, V6] # ss.᯲
-ssâ€.᯲ñ„¾¼; ; [C2, P1, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ss.xn--0zf22107b; [P1, V5, V6] # ss.᯲
-Ssâ€.᯲ñ„¾¼; ssâ€.᯲ñ„¾¼; [C2, P1, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ss.xn--0zf22107b; [P1, V5, V6] # ss.᯲
-ss.xn--0zf22107b; ss.᯲񄾼; [V5, V6]; ss.xn--0zf22107b; ; ; # ss.᯲
-xn--ss-n1t.xn--0zf22107b; ssâ€.᯲ñ„¾¼; [C2, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ; # ss.᯲
-xn--zca870n.xn--0zf22107b; ßâ€.᯲ñ„¾¼; [C2, V5, V6]; xn--zca870n.xn--0zf22107b; ; ; # ß.᯲
-𑓂‌≮.≮; ; [P1, V5, V6]; xn--0ugy6glz29a.xn--gdh; ; xn--gdhz656g.xn--gdh; # 𑓂≮.≮
-𑓂‌≮.≮; 𑓂‌≮.≮; [P1, V5, V6]; xn--0ugy6glz29a.xn--gdh; ; xn--gdhz656g.xn--gdh; # 𑓂≮.≮
-xn--gdhz656g.xn--gdh; 𑓂≮.≮; [V5, V6]; xn--gdhz656g.xn--gdh; ; ; # 𑓂≮.≮
-xn--0ugy6glz29a.xn--gdh; 𑓂‌≮.≮; [V5, V6]; xn--0ugy6glz29a.xn--gdh; ; ; # 𑓂≮.≮
-🕼.ᅠ; 🕼.ᅠ; [P1, V6]; xn--my8h.xn--cl7c; ; ; # 🕼.
-🕼.ᅠ; ; [P1, V6]; xn--my8h.xn--psd; ; ; # 🕼.
-xn--my8h.xn--psd; 🕼.ᅠ; [V6]; xn--my8h.xn--psd; ; ; # 🕼.
-xn--my8h.xn--cl7c; 🕼.ᅠ; [V6]; xn--my8h.xn--cl7c; ; ; # 🕼.
-ᡔﶂ。񷘎; ᡔلحى.񷘎; [B5, B6, P1, V6]; xn--sgb9bq785p.xn--bc31b; ; ; # ᡔلحى.
-ᡔلحى。񷘎; ᡔلحى.񷘎; [B5, B6, P1, V6]; xn--sgb9bq785p.xn--bc31b; ; ; # ᡔلحى.
-xn--sgb9bq785p.xn--bc31b; ᡔلحى.񷘎; [B5, B6, V6]; xn--sgb9bq785p.xn--bc31b; ; ; # ᡔلحى.
-爕ò³™‘.ðŸ°æ°—; 爕ò³™‘.4æ°—; [P1, V6]; xn--1zxq3199c.xn--4-678b; ; ; # 爕.4æ°—
-爕򳙑.4気; ; [P1, V6]; xn--1zxq3199c.xn--4-678b; ; ; # 爕.4気
+â’ˆ\u200C\uAAEC︒.\u0ACD; â’ˆ\u200C\uAAEC︒.\u0ACD; [C1, V5, V6]; xn--0ug78o720myr1c.xn--mfc; ; xn--tsh0720cse8b.xn--mfc; [V5, V6] # ⒈ꫬ︒.à«
+1.\u200C\uAAEC。.\u0ACD; 1.\u200C\uAAEC..\u0ACD; [C1, V5, X4_2]; 1.xn--0ug7185c..xn--mfc; [C1, V5, A4_2]; 1.xn--sv9a..xn--mfc; [V5, A4_2] # 1.ꫬ..à«
+1.xn--sv9a..xn--mfc; 1.\uAAEC..\u0ACD; [V5, X4_2]; 1.xn--sv9a..xn--mfc; [V5, A4_2]; ; # 1.ꫬ..à«
+1.xn--0ug7185c..xn--mfc; 1.\u200C\uAAEC..\u0ACD; [C1, V5, X4_2]; 1.xn--0ug7185c..xn--mfc; [C1, V5, A4_2]; ; # 1.ꫬ..à«
+xn--tsh0720cse8b.xn--mfc; â’ˆ\uAAEC︒.\u0ACD; [V5, V6]; xn--tsh0720cse8b.xn--mfc; ; ; # ⒈ꫬ︒.à«
+xn--0ug78o720myr1c.xn--mfc; â’ˆ\u200C\uAAEC︒.\u0ACD; [C1, V5, V6]; xn--0ug78o720myr1c.xn--mfc; ; ; # ⒈ꫬ︒.à«
+\u0C46。䰀\u0668𞭅󠅼; \u0C46.䰀\u0668𞭅; [B1, B5, B6, V5, V6]; xn--eqc.xn--hib5476aim6t; ; ; # ె.䰀٨
+xn--eqc.xn--hib5476aim6t; \u0C46.䰀\u0668𞭅; [B1, B5, B6, V5, V6]; xn--eqc.xn--hib5476aim6t; ; ; # ె.䰀٨
+ß\u200D.\u1BF2񄾼; ; [C2, V5, V6]; xn--zca870n.xn--0zf22107b; ; ss.xn--0zf22107b; [V5, V6] # ß.᯲
+SS\u200D.\u1BF2񄾼; ss\u200D.\u1BF2񄾼; [C2, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ss.xn--0zf22107b; [V5, V6] # ss.᯲
+ss\u200D.\u1BF2񄾼; ; [C2, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ss.xn--0zf22107b; [V5, V6] # ss.᯲
+Ss\u200D.\u1BF2񄾼; ss\u200D.\u1BF2񄾼; [C2, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ss.xn--0zf22107b; [V5, V6] # ss.᯲
+ss.xn--0zf22107b; ss.\u1BF2񄾼; [V5, V6]; ss.xn--0zf22107b; ; ; # ss.᯲
+xn--ss-n1t.xn--0zf22107b; ss\u200D.\u1BF2񄾼; [C2, V5, V6]; xn--ss-n1t.xn--0zf22107b; ; ; # ss.᯲
+xn--zca870n.xn--0zf22107b; ß\u200D.\u1BF2񄾼; [C2, V5, V6]; xn--zca870n.xn--0zf22107b; ; ; # ß.᯲
+𑓂\u200C≮.≮; ; [V5]; xn--0ugy6glz29a.xn--gdh; ; xn--gdhz656g.xn--gdh; # 𑓂≮.≮
+𑓂\u200C<\u0338.<\u0338; 𑓂\u200C≮.≮; [V5]; xn--0ugy6glz29a.xn--gdh; ; xn--gdhz656g.xn--gdh; # 𑓂≮.≮
+xn--gdhz656g.xn--gdh; 𑓂≮.≮; [V5]; xn--gdhz656g.xn--gdh; ; ; # 𑓂≮.≮
+xn--0ugy6glz29a.xn--gdh; 𑓂\u200C≮.≮; [V5]; xn--0ugy6glz29a.xn--gdh; ; ; # 𑓂≮.≮
+🕼.\uFFA0; 🕼.\uFFA0; [V6]; xn--my8h.xn--cl7c; ; ; # 🕼.
+🕼.\u1160; ; [V6]; xn--my8h.xn--psd; ; ; # 🕼.
+xn--my8h.xn--psd; 🕼.\u1160; [V6]; xn--my8h.xn--psd; ; ; # 🕼.
+xn--my8h.xn--cl7c; 🕼.\uFFA0; [V6]; xn--my8h.xn--cl7c; ; ; # 🕼.
+ᡔ\uFD82。񷘎; ᡔ\u0644\u062D\u0649.񷘎; [B5, B6, V6]; xn--sgb9bq785p.xn--bc31b; ; ; # ᡔلحى.
+ᡔ\u0644\u062D\u0649。񷘎; ᡔ\u0644\u062D\u0649.񷘎; [B5, B6, V6]; xn--sgb9bq785p.xn--bc31b; ; ; # ᡔلحى.
+xn--sgb9bq785p.xn--bc31b; ᡔ\u0644\u062D\u0649.񷘎; [B5, B6, V6]; xn--sgb9bq785p.xn--bc31b; ; ; # ᡔلحى.
+爕ò³™‘.ðŸ°æ°—; 爕ò³™‘.4æ°—; [V6]; xn--1zxq3199c.xn--4-678b; ; ; # 爕.4æ°—
+爕򳙑.4気; ; [V6]; xn--1zxq3199c.xn--4-678b; ; ; # 爕.4気
xn--1zxq3199c.xn--4-678b; 爕򳙑.4気; [V6]; xn--1zxq3199c.xn--4-678b; ; ; # 爕.4気
-â’‹ð‘Ⴝ-.𞬪්ֵ; â’‹ð‘Ⴝ-.𞬪්ֵ; [B1, P1, V3, V6]; xn----t1g323mnk9t.xn--ddb152b7y23b; ; ; # â’‹ð‘Ⴝ-.à·ŠÖµ
-4.ð‘Ⴝ-.𞬪්ֵ; ; [B1, B6, P1, V3, V5, V6]; 4.xn----t1g9869q.xn--ddb152b7y23b; ; ; # 4.ð‘Ⴝ-.à·ŠÖµ
-4.ð‘â´-.𞬪්ֵ; ; [B1, B6, P1, V3, V5, V6]; 4.xn----wwsx259f.xn--ddb152b7y23b; ; ; # 4.ð‘â´-.à·ŠÖµ
-4.xn----wwsx259f.xn--ddb152b7y23b; 4.ð‘â´-.𞬪්ֵ; [B1, B6, V3, V5, V6]; 4.xn----wwsx259f.xn--ddb152b7y23b; ; ; # 4.ð‘â´-.à·ŠÖµ
-4.xn----t1g9869q.xn--ddb152b7y23b; 4.ð‘Ⴝ-.𞬪්ֵ; [B1, B6, V3, V5, V6]; 4.xn----t1g9869q.xn--ddb152b7y23b; ; ; # 4.ð‘Ⴝ-.à·ŠÖµ
-â’‹ð‘â´-.𞬪්ֵ; â’‹ð‘â´-.𞬪්ֵ; [B1, P1, V3, V6]; xn----jcp487avl3w.xn--ddb152b7y23b; ; ; # â’‹ð‘â´-.à·ŠÖµ
-xn----jcp487avl3w.xn--ddb152b7y23b; â’‹ð‘â´-.𞬪්ֵ; [B1, V3, V6]; xn----jcp487avl3w.xn--ddb152b7y23b; ; ; # â’‹ð‘â´-.à·ŠÖµ
-xn----t1g323mnk9t.xn--ddb152b7y23b; â’‹ð‘Ⴝ-.𞬪්ֵ; [B1, V3, V6]; xn----t1g323mnk9t.xn--ddb152b7y23b; ; ; # â’‹ð‘Ⴝ-.à·ŠÖµ
-óžƒã€‚ò‘†ƒñ‰¢—--; óžƒ.ò‘†ƒñ‰¢—--; [P1, V2, V3, V6]; xn--2y75e.xn-----1l15eer88n; ; ; # .--
+â’‹ð‘Ⴝ-.𞬪\u0DCA\u05B5; â’‹ð‘Ⴝ-.𞬪\u0DCA\u05B5; [B1, V3, V6]; xn----t1g323mnk9t.xn--ddb152b7y23b; ; ; # â’‹ð‘Ⴝ-.à·ŠÖµ
+4.ð‘Ⴝ-.𞬪\u0DCA\u05B5; ; [B1, B6, V3, V5, V6]; 4.xn----t1g9869q.xn--ddb152b7y23b; ; ; # 4.ð‘Ⴝ-.à·ŠÖµ
+4.ð‘â´-.𞬪\u0DCA\u05B5; ; [B1, B6, V3, V5, V6]; 4.xn----wwsx259f.xn--ddb152b7y23b; ; ; # 4.ð‘â´-.à·ŠÖµ
+4.xn----wwsx259f.xn--ddb152b7y23b; 4.ð‘â´-.𞬪\u0DCA\u05B5; [B1, B6, V3, V5, V6]; 4.xn----wwsx259f.xn--ddb152b7y23b; ; ; # 4.ð‘â´-.à·ŠÖµ
+4.xn----t1g9869q.xn--ddb152b7y23b; 4.ð‘Ⴝ-.𞬪\u0DCA\u05B5; [B1, B6, V3, V5, V6]; 4.xn----t1g9869q.xn--ddb152b7y23b; ; ; # 4.ð‘Ⴝ-.à·ŠÖµ
+â’‹ð‘â´-.𞬪\u0DCA\u05B5; â’‹ð‘â´-.𞬪\u0DCA\u05B5; [B1, V3, V6]; xn----jcp487avl3w.xn--ddb152b7y23b; ; ; # â’‹ð‘â´-.à·ŠÖµ
+xn----jcp487avl3w.xn--ddb152b7y23b; â’‹ð‘â´-.𞬪\u0DCA\u05B5; [B1, V3, V6]; xn----jcp487avl3w.xn--ddb152b7y23b; ; ; # â’‹ð‘â´-.à·ŠÖµ
+xn----t1g323mnk9t.xn--ddb152b7y23b; â’‹ð‘Ⴝ-.𞬪\u0DCA\u05B5; [B1, V3, V6]; xn----t1g323mnk9t.xn--ddb152b7y23b; ; ; # â’‹ð‘Ⴝ-.à·ŠÖµ
+óžƒã€‚ò‘†ƒñ‰¢—--; óžƒ.ò‘†ƒñ‰¢—--; [V2, V3, V6]; xn--2y75e.xn-----1l15eer88n; ; ; # .--
xn--2y75e.xn-----1l15eer88n; óžƒ.ò‘†ƒñ‰¢—--; [V2, V3, V6]; xn--2y75e.xn-----1l15eer88n; ; ; # .--
-â€ßŸï½¡â€Œê¯­; â€ßŸ.‌꯭; [B1, C1, C2]; xn--6sb394j.xn--0ug1126c; ; xn--6sb.xn--429a; [B1, B3, B6, V5] # ߟ.꯭
-â€ßŸã€‚‌꯭; â€ßŸ.‌꯭; [B1, C1, C2]; xn--6sb394j.xn--0ug1126c; ; xn--6sb.xn--429a; [B1, B3, B6, V5] # ߟ.꯭
-xn--6sb.xn--429a; ߟ.꯭; [B1, B3, B6, V5]; xn--6sb.xn--429a; ; ; # ߟ.꯭
-xn--6sb394j.xn--0ug1126c; â€ßŸ.‌꯭; [B1, C1, C2]; xn--6sb394j.xn--0ug1126c; ; ; # ߟ.꯭
-𞮽߿ࡎ。á¢ò¹ð«˜; 𞮽߿ࡎ.á¢ò¹ð«˜; [B5, B6, P1, V6]; xn--3tb2nz468k.xn--69e8615j5rn5d; ; ; # ß¿à¡Ž.á¢ð«˜
-𞮽߿ࡎ。á¢ò¹ð«˜; 𞮽߿ࡎ.á¢ò¹ð«˜; [B5, B6, P1, V6]; xn--3tb2nz468k.xn--69e8615j5rn5d; ; ; # ß¿à¡Ž.á¢ð«˜
-xn--3tb2nz468k.xn--69e8615j5rn5d; 𞮽߿ࡎ.á¢ò¹ð«˜; [B5, B6, V6]; xn--3tb2nz468k.xn--69e8615j5rn5d; ; ; # ß¿à¡Ž.á¢ð«˜
-ۭ𞺌𑄚᜔.ꡞࢷ; ۭم𑄚᜔.ꡞࢷ; [B1, B5, B6, V5]; xn--hhb94ag41b739u.xn--dzb5582f; ; ; # ۭم𑄚᜔.ꡞࢷ
-ۭم𑄚᜔.ꡞࢷ; ; [B1, B5, B6, V5]; xn--hhb94ag41b739u.xn--dzb5582f; ; ; # ۭم𑄚᜔.ꡞࢷ
-xn--hhb94ag41b739u.xn--dzb5582f; ۭم𑄚᜔.ꡞࢷ; [B1, B5, B6, V5]; xn--hhb94ag41b739u.xn--dzb5582f; ; ; # ۭم𑄚᜔.ꡞࢷ
-񻂵킃𑘶ߜ。ςؼς; 񻂵킃𑘶ߜ.ςؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς
-ñ»‚µá„ᅳᆾ𑘶ߜ。ςؼς; ñ»‚µí‚ƒð‘˜¶ßœ.ςؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς
-񻂵킃𑘶ߜ。ςؼς; 񻂵킃𑘶ߜ.ςؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς
-ñ»‚µá„ᅳᆾ𑘶ߜ。ςؼς; ñ»‚µí‚ƒð‘˜¶ßœ.ςؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς
-ñ»‚µá„ᅳᆾ𑘶ߜ。ΣؼΣ; ñ»‚µí‚ƒð‘˜¶ßœ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-񻂵킃𑘶ߜ。ΣؼΣ; 񻂵킃𑘶ߜ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-񻂵킃𑘶ߜ。σؼσ; 񻂵킃𑘶ߜ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-ñ»‚µá„ᅳᆾ𑘶ߜ。σؼσ; ñ»‚µí‚ƒð‘˜¶ßœ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-ñ»‚µá„ᅳᆾ𑘶ߜ。Σؼσ; ñ»‚µí‚ƒð‘˜¶ßœ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-񻂵킃𑘶ߜ。Σؼσ; 񻂵킃𑘶ߜ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-xn--3sb7483hoyvbbe76g.xn--4xaa21q; 񻂵킃𑘶ߜ.σؼσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-ñ»‚µá„ᅳᆾ𑘶ߜ。Σؼς; ñ»‚µí‚ƒð‘˜¶ßœ.σؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
-񻂵킃𑘶ߜ。Σؼς; 񻂵킃𑘶ߜ.σؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
-񻂵킃𑘶ߜ。σؼς; 񻂵킃𑘶ߜ.σؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
-ñ»‚µá„ᅳᆾ𑘶ߜ。σؼς; ñ»‚µí‚ƒð‘˜¶ßœ.σؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
-xn--3sb7483hoyvbbe76g.xn--3xab31q; 񻂵킃𑘶ߜ.σؼς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; ; # 킃𑘶ߜ.σؼς
-xn--3sb7483hoyvbbe76g.xn--3xaa51q; 񻂵킃𑘶ߜ.ςؼς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; ; # 킃𑘶ߜ.ςؼς
-ñ»‚µá„ᅳᆾ𑘶ߜ。ΣؼΣ; ñ»‚µí‚ƒð‘˜¶ßœ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-񻂵킃𑘶ߜ。ΣؼΣ; 񻂵킃𑘶ߜ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-񻂵킃𑘶ߜ。σؼσ; 񻂵킃𑘶ߜ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-ñ»‚µá„ᅳᆾ𑘶ߜ。σؼσ; ñ»‚µí‚ƒð‘˜¶ßœ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-ñ»‚µá„ᅳᆾ𑘶ߜ。Σؼσ; ñ»‚µí‚ƒð‘˜¶ßœ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-񻂵킃𑘶ߜ。Σؼσ; 񻂵킃𑘶ߜ.σؼσ; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
-ñ»‚µá„ᅳᆾ𑘶ߜ。Σؼς; ñ»‚µí‚ƒð‘˜¶ßœ.σؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
-񻂵킃𑘶ߜ。Σؼς; 񻂵킃𑘶ߜ.σؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
-񻂵킃𑘶ߜ。σؼς; 񻂵킃𑘶ߜ.σؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
-ñ»‚µá„ᅳᆾ𑘶ߜ。σؼς; ñ»‚µí‚ƒð‘˜¶ßœ.σؼς; [B5, B6, P1, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
-蔰。ó ¹à£-𑈵; è”°.ó ¹à£-𑈵; [P1, V6]; xn--sz1a.xn----mrd9984r3dl0i; ; ; # è”°.à£-𑈵
-xn--sz1a.xn----mrd9984r3dl0i; è”°.ó ¹à£-𑈵; [V6]; xn--sz1a.xn----mrd9984r3dl0i; ; ; # è”°.à£-𑈵
-ςჅ。ݚ; ςჅ.ݚ; [P1, V6]; xn--3xa677d.xn--epb; ; xn--4xa477d.xn--epb; # ςჅ.ݚ
-ςⴥ。ݚ; ςⴥ.ݚ; ; xn--3xa403s.xn--epb; ; xn--4xa203s.xn--epb; # ςⴥ.ݚ
-ΣჅ。ݚ; σჅ.ݚ; [P1, V6]; xn--4xa477d.xn--epb; ; ; # σჅ.ݚ
-σⴥ。ݚ; σⴥ.ݚ; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ
-Σⴥ。ݚ; σⴥ.ݚ; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ
-xn--4xa203s.xn--epb; σⴥ.ݚ; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ
-σⴥ.ݚ; ; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ
-ΣჅ.ݚ; σჅ.ݚ; [P1, V6]; xn--4xa477d.xn--epb; ; ; # σჅ.ݚ
-Σⴥ.ݚ; σⴥ.ݚ; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ
-xn--4xa477d.xn--epb; σჅ.ݚ; [V6]; xn--4xa477d.xn--epb; ; ; # σჅ.ݚ
-xn--3xa403s.xn--epb; Ï‚â´¥.Ýš; ; xn--3xa403s.xn--epb; ; ; # Ï‚â´¥.Ýš
-Ï‚â´¥.Ýš; ; ; xn--3xa403s.xn--epb; ; xn--4xa203s.xn--epb; # Ï‚â´¥.Ýš
-xn--3xa677d.xn--epb; ςჅ.ݚ; [V6]; xn--3xa677d.xn--epb; ; ; # ςჅ.ݚ
-à±á‚©ðž°“.᭲; à±á‚©ðž°“.á­²; [B1, B3, B6, P1, V5, V6]; xn--lqc64t7t26c.xn--dwf; ; ; # à±á‚©.á­²
-à±á‚©ðž°“.á­²; ; [B1, B3, B6, P1, V5, V6]; xn--lqc64t7t26c.xn--dwf; ; ; # à±á‚©.á­²
-à±â´‰ðž°“.á­²; ; [B1, B3, B6, P1, V5, V6]; xn--lqc478nlr02a.xn--dwf; ; ; # à±â´‰.á­²
-xn--lqc478nlr02a.xn--dwf; à±â´‰ðž°“.á­²; [B1, B3, B6, V5, V6]; xn--lqc478nlr02a.xn--dwf; ; ; # à±â´‰.á­²
-xn--lqc64t7t26c.xn--dwf; à±á‚©ðž°“.á­²; [B1, B3, B6, V5, V6]; xn--lqc64t7t26c.xn--dwf; ; ; # à±á‚©.á­²
-à±â´‰ðž°“.᭲; à±â´‰ðž°“.á­²; [B1, B3, B6, P1, V5, V6]; xn--lqc478nlr02a.xn--dwf; ; ; # à±â´‰.á­²
-⮷≮ñŽˆ´ó „Ÿã€‚ð „; ⮷≮ñŽˆ´.ð „; [B1, P1, V6]; xn--gdh877a3513h.xn--pc9c; ; ; # ⮷≮.ð „
-â®·≮ñŽˆ´ó „Ÿã€‚ð „; ⮷≮ñŽˆ´.ð „; [B1, P1, V6]; xn--gdh877a3513h.xn--pc9c; ; ; # ⮷≮.ð „
+\u200D\u07DF。\u200C\uABED; \u200D\u07DF.\u200C\uABED; [B1, C1, C2]; xn--6sb394j.xn--0ug1126c; ; xn--6sb.xn--429a; [B1, V5] # ߟ.꯭
+\u200D\u07DF。\u200C\uABED; \u200D\u07DF.\u200C\uABED; [B1, C1, C2]; xn--6sb394j.xn--0ug1126c; ; xn--6sb.xn--429a; [B1, V5] # ߟ.꯭
+xn--6sb.xn--429a; \u07DF.\uABED; [B1, V5]; xn--6sb.xn--429a; ; ; # ߟ.꯭
+xn--6sb394j.xn--0ug1126c; \u200D\u07DF.\u200C\uABED; [B1, C1, C2]; xn--6sb394j.xn--0ug1126c; ; ; # ߟ.꯭
+𞮽\u07FF\u084E。á¢ò¹ð«˜; 𞮽\u07FF\u084E.á¢ò¹ð«˜; [B5, B6, V6]; xn--3tb2nz468k.xn--69e8615j5rn5d; ; ; # ß¿à¡Ž.á¢ð«˜
+𞮽\u07FF\u084E。á¢ò¹ð«˜; 𞮽\u07FF\u084E.á¢ò¹ð«˜; [B5, B6, V6]; xn--3tb2nz468k.xn--69e8615j5rn5d; ; ; # ß¿à¡Ž.á¢ð«˜
+xn--3tb2nz468k.xn--69e8615j5rn5d; 𞮽\u07FF\u084E.á¢ò¹ð«˜; [B5, B6, V6]; xn--3tb2nz468k.xn--69e8615j5rn5d; ; ; # ß¿à¡Ž.á¢ð«˜
+\u06ED𞺌𑄚\u1714.ꡞ\u08B7; \u06ED\u0645𑄚\u1714.ꡞ\u08B7; [B1, B5, B6, V5]; xn--hhb94ag41b739u.xn--dzb5582f; ; ; # ۭم𑄚᜔.ꡞࢷ
+\u06ED\u0645𑄚\u1714.ꡞ\u08B7; ; [B1, B5, B6, V5]; xn--hhb94ag41b739u.xn--dzb5582f; ; ; # ۭم𑄚᜔.ꡞࢷ
+xn--hhb94ag41b739u.xn--dzb5582f; \u06ED\u0645𑄚\u1714.ꡞ\u08B7; [B1, B5, B6, V5]; xn--hhb94ag41b739u.xn--dzb5582f; ; ; # ۭم𑄚᜔.ꡞࢷ
+񻂵킃𑘶\u07DC。ς\u063Cς; 񻂵킃𑘶\u07DC.ς\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς
+ñ»‚µá„ᅳᆾ𑘶\u07DC。ς\u063CÏ‚; ñ»‚µí‚ƒð‘˜¶\u07DC.Ï‚\u063CÏ‚; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς
+񻂵킃𑘶\u07DC。ς\u063Cς; 񻂵킃𑘶\u07DC.ς\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς
+ñ»‚µá„ᅳᆾ𑘶\u07DC。ς\u063CÏ‚; ñ»‚µí‚ƒð‘˜¶\u07DC.Ï‚\u063CÏ‚; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.ςؼς
+ñ»‚µá„ᅳᆾ𑘶\u07DC。Σ\u063CΣ; ñ»‚µí‚ƒð‘˜¶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+񻂵킃𑘶\u07DC。Σ\u063CΣ; 񻂵킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+񻂵킃𑘶\u07DC。σ\u063Cσ; 񻂵킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+ñ»‚µá„ᅳᆾ𑘶\u07DC。σ\u063Cσ; ñ»‚µí‚ƒð‘˜¶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+ñ»‚µá„ᅳᆾ𑘶\u07DC。Σ\u063Cσ; ñ»‚µí‚ƒð‘˜¶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+񻂵킃𑘶\u07DC。Σ\u063Cσ; 񻂵킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+xn--3sb7483hoyvbbe76g.xn--4xaa21q; 񻂵킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+ñ»‚µá„ᅳᆾ𑘶\u07DC。Σ\u063CÏ‚; ñ»‚µí‚ƒð‘˜¶\u07DC.σ\u063CÏ‚; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
+񻂵킃𑘶\u07DC。Σ\u063Cς; 񻂵킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
+񻂵킃𑘶\u07DC。σ\u063Cς; 񻂵킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
+ñ»‚µá„ᅳᆾ𑘶\u07DC。σ\u063CÏ‚; ñ»‚µí‚ƒð‘˜¶\u07DC.σ\u063CÏ‚; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
+xn--3sb7483hoyvbbe76g.xn--3xab31q; 񻂵킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; ; # 킃𑘶ߜ.σؼς
+xn--3sb7483hoyvbbe76g.xn--3xaa51q; 񻂵킃𑘶\u07DC.ς\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xaa51q; ; ; # 킃𑘶ߜ.ςؼς
+ñ»‚µá„ᅳᆾ𑘶\u07DC。Σ\u063CΣ; ñ»‚µí‚ƒð‘˜¶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+񻂵킃𑘶\u07DC。Σ\u063CΣ; 񻂵킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+񻂵킃𑘶\u07DC。σ\u063Cσ; 񻂵킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+ñ»‚µá„ᅳᆾ𑘶\u07DC。σ\u063Cσ; ñ»‚µí‚ƒð‘˜¶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+ñ»‚µá„ᅳᆾ𑘶\u07DC。Σ\u063Cσ; ñ»‚µí‚ƒð‘˜¶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+񻂵킃𑘶\u07DC。Σ\u063Cσ; 񻂵킃𑘶\u07DC.σ\u063Cσ; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--4xaa21q; ; ; # 킃𑘶ߜ.σؼσ
+ñ»‚µá„ᅳᆾ𑘶\u07DC。Σ\u063CÏ‚; ñ»‚µí‚ƒð‘˜¶\u07DC.σ\u063CÏ‚; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
+񻂵킃𑘶\u07DC。Σ\u063Cς; 񻂵킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
+񻂵킃𑘶\u07DC。σ\u063Cς; 񻂵킃𑘶\u07DC.σ\u063Cς; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
+ñ»‚µá„ᅳᆾ𑘶\u07DC。σ\u063CÏ‚; ñ»‚µí‚ƒð‘˜¶\u07DC.σ\u063CÏ‚; [B5, B6, V6]; xn--3sb7483hoyvbbe76g.xn--3xab31q; ; xn--3sb7483hoyvbbe76g.xn--4xaa21q; # 킃𑘶ߜ.σؼς
+蔰。ó ¹\u08DD-𑈵; è”°.ó ¹\u08DD-𑈵; [V6]; xn--sz1a.xn----mrd9984r3dl0i; ; ; # è”°.à£-𑈵
+xn--sz1a.xn----mrd9984r3dl0i; è”°.ó ¹\u08DD-𑈵; [V6]; xn--sz1a.xn----mrd9984r3dl0i; ; ; # è”°.à£-𑈵
+ςჅ。\u075A; ςჅ.\u075A; [V6]; xn--3xa677d.xn--epb; ; xn--4xa477d.xn--epb; # ςჅ.ݚ
+ςⴥ。\u075A; ςⴥ.\u075A; ; xn--3xa403s.xn--epb; ; xn--4xa203s.xn--epb; # ςⴥ.ݚ
+ΣჅ。\u075A; σჅ.\u075A; [V6]; xn--4xa477d.xn--epb; ; ; # σჅ.ݚ
+σⴥ。\u075A; σⴥ.\u075A; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ
+Σⴥ。\u075A; σⴥ.\u075A; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ
+xn--4xa203s.xn--epb; σⴥ.\u075A; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ
+σⴥ.\u075A; ; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ
+ΣჅ.\u075A; σჅ.\u075A; [V6]; xn--4xa477d.xn--epb; ; ; # σჅ.ݚ
+Σⴥ.\u075A; σⴥ.\u075A; ; xn--4xa203s.xn--epb; ; ; # σⴥ.ݚ
+xn--4xa477d.xn--epb; σჅ.\u075A; [V6]; xn--4xa477d.xn--epb; ; ; # σჅ.ݚ
+xn--3xa403s.xn--epb; Ï‚â´¥.\u075A; ; xn--3xa403s.xn--epb; ; ; # Ï‚â´¥.Ýš
+Ï‚â´¥.\u075A; ; ; xn--3xa403s.xn--epb; ; xn--4xa203s.xn--epb; # Ï‚â´¥.Ýš
+xn--3xa677d.xn--epb; ςჅ.\u075A; [V6]; xn--3xa677d.xn--epb; ; ; # ςჅ.ݚ
+\u0C4DႩ𞰓.\u1B72; \u0C4Dá‚©ðž°“.\u1B72; [B1, V5, V6]; xn--lqc64t7t26c.xn--dwf; ; ; # à±á‚©.á­²
+\u0C4Dá‚©ðž°“.\u1B72; ; [B1, V5, V6]; xn--lqc64t7t26c.xn--dwf; ; ; # à±á‚©.á­²
+\u0C4Dⴉ𞰓.\u1B72; ; [B1, V5, V6]; xn--lqc478nlr02a.xn--dwf; ; ; # à±â´‰.á­²
+xn--lqc478nlr02a.xn--dwf; \u0C4Dⴉ𞰓.\u1B72; [B1, V5, V6]; xn--lqc478nlr02a.xn--dwf; ; ; # à±â´‰.á­²
+xn--lqc64t7t26c.xn--dwf; \u0C4Dá‚©ðž°“.\u1B72; [B1, V5, V6]; xn--lqc64t7t26c.xn--dwf; ; ; # à±á‚©.á­²
+\u0C4Dⴉ𞰓.\u1B72; \u0C4Dⴉ𞰓.\u1B72; [B1, V5, V6]; xn--lqc478nlr02a.xn--dwf; ; ; # à±â´‰.á­²
+⮷≮ñŽˆ´ó „Ÿã€‚ð „; ⮷≮ñŽˆ´.ð „; [B1, V6]; xn--gdh877a3513h.xn--pc9c; ; ; # ⮷≮.ð „
+â®·<\u0338ñŽˆ´ó „Ÿã€‚ð „; ⮷≮ñŽˆ´.ð „; [B1, V6]; xn--gdh877a3513h.xn--pc9c; ; ; # ⮷≮.ð „
xn--gdh877a3513h.xn--pc9c; ⮷≮ñŽˆ´.ð „; [B1, V6]; xn--gdh877a3513h.xn--pc9c; ; ; # ⮷≮.ð „
-ڼ。â€áºâ€Œá¡¤; Ú¼.â€áºâ€Œá¡¤; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
-ڼ。â€ẏ‌ᡤ; Ú¼.â€áºâ€Œá¡¤; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
-ڼ。â€áºâ€Œá¡¤; Ú¼.â€áºâ€Œá¡¤; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
-ڼ。â€ẏ‌ᡤ; Ú¼.â€áºâ€Œá¡¤; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
-ڼ。â€Ẏ‌ᡤ; Ú¼.â€áºâ€Œá¡¤; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
-ڼ。â€áºŽâ€Œá¡¤; Ú¼.â€áºâ€Œá¡¤; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
-xn--vkb.xn--08e172a; Ú¼.áºá¡¤; ; xn--vkb.xn--08e172a; ; ; # Ú¼.áºá¡¤
-Ú¼.áºá¡¤; ; ; xn--vkb.xn--08e172a; ; ; # Ú¼.áºá¡¤
-Ú¼.ẏᡤ; Ú¼.áºá¡¤; ; xn--vkb.xn--08e172a; ; ; # Ú¼.áºá¡¤
-Ú¼.Ẏᡤ; Ú¼.áºá¡¤; ; xn--vkb.xn--08e172a; ; ; # Ú¼.áºá¡¤
-Ú¼.Ẏᡤ; Ú¼.áºá¡¤; ; xn--vkb.xn--08e172a; ; ; # Ú¼.áºá¡¤
-xn--vkb.xn--08e172ax6aca; Ú¼.â€áºâ€Œá¡¤; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; ; # Ú¼.áºá¡¤
-ڼ。â€Ẏ‌ᡤ; Ú¼.â€áºâ€Œá¡¤; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
-ڼ。â€áºŽâ€Œá¡¤; Ú¼.â€áºâ€Œá¡¤; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
-ð¹¹ð‘²›ã€‚ñ‘‚à·Š; ð¹¹ð‘²›.ñ‘‚à·Š; [B1, P1, V6]; xn--xo0dg5v.xn--h1c39876d; ; ; # ð¹¹ð‘²›.à·Š
-xn--xo0dg5v.xn--h1c39876d; ð¹¹ð‘²›.ñ‘‚à·Š; [B1, V6]; xn--xo0dg5v.xn--h1c39876d; ; ; # ð¹¹ð‘²›.à·Š
--≠𑈵。嵕ﻱ۴꥓; -≠𑈵.嵕ي۴꥓; [B1, B5, P1, V3, V6]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓
--≠𑈵。嵕ﻱ۴꥓; -≠𑈵.嵕ي۴꥓; [B1, B5, P1, V3, V6]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓
--≠𑈵。嵕ي۴꥓; -≠𑈵.嵕ي۴꥓; [B1, B5, P1, V3, V6]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓
--≠𑈵。嵕ي۴꥓; -≠𑈵.嵕ي۴꥓; [B1, B5, P1, V3, V6]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓
-xn----ufo4749h.xn--mhb45a235sns3c; -≠𑈵.嵕ي۴꥓; [B1, B5, V3, V6]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓
-‌ñ¸°ð¹¶Ý®ï¼ŽÛâ€â‰¯â€; ‌ñ¸°ð¹¶Ý®.Ûâ€â‰¯â€; [B1, B3, C1, C2, P1, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, P1, V6] # ð¹¶Ý®.Û≯
-‌ñ¸°ð¹¶Ý®ï¼ŽÛâ€≯â€; ‌ñ¸°ð¹¶Ý®.Ûâ€â‰¯â€; [B1, B3, C1, C2, P1, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, P1, V6] # ð¹¶Ý®.Û≯
-‌ñ¸°ð¹¶Ý®.Ûâ€â‰¯â€; ; [B1, B3, C1, C2, P1, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, P1, V6] # ð¹¶Ý®.Û≯
-‌ñ¸°ð¹¶Ý®.Ûâ€≯â€; ‌ñ¸°ð¹¶Ý®.Ûâ€â‰¯â€; [B1, B3, C1, C2, P1, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, P1, V6] # ð¹¶Ý®.Û≯
-xn--ypb5875khz9y.xn--0kb682l; ñ¸°ð¹¶Ý®.Û≯; [B3, B5, B6, V6]; xn--ypb5875khz9y.xn--0kb682l; ; ; # ð¹¶Ý®.Û≯
-xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ‌ñ¸°ð¹¶Ý®.Ûâ€â‰¯â€; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; ; # ð¹¶Ý®.Û≯
-≮.឵ࡕð«”; ≮.឵ࡕð«”; [B1, P1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.à¡•ð«”
-≮.឵ࡕð«”; ≮.឵ࡕð«”; [B1, P1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.à¡•ð«”
-≮.឵ࡕð«”; ; [B1, P1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.à¡•ð«”
-≮.឵ࡕð«”; ≮.឵ࡕð«”; [B1, P1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.à¡•ð«”
-xn--gdh.xn--kwb589e217p; ≮.឵ࡕð«”; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.à¡•ð«”
-ð©—â€ï½¡á‚©á‚µ; ð©—â€.ႩႵ; [B3, C2, P1, V6]; xn--1ug4933g.xn--hndy; ; xn--pt9c.xn--hndy; [P1, V6] # ð©—.ႩႵ
-ð©—â€ã€‚ႩႵ; ð©—â€.ႩႵ; [B3, C2, P1, V6]; xn--1ug4933g.xn--hndy; ; xn--pt9c.xn--hndy; [P1, V6] # ð©—.ႩႵ
-ð©—â€ã€‚ⴉⴕ; ð©—â€.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; xn--pt9c.xn--0kjya; [] # ð©—.ⴉⴕ
-ð©—â€ã€‚á‚©â´•; ð©—â€.á‚©â´•; [B3, C2, P1, V6]; xn--1ug4933g.xn--hnd666l; ; xn--pt9c.xn--hnd666l; [P1, V6] # ð©—.á‚©â´•
+\u06BC。\u200Dáº\u200Cᡤ; \u06BC.\u200Dáº\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
+\u06BC。\u200Dy\u0307\u200Cᡤ; \u06BC.\u200Dáº\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
+\u06BC。\u200Dáº\u200Cᡤ; \u06BC.\u200Dáº\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
+\u06BC。\u200Dy\u0307\u200Cᡤ; \u06BC.\u200Dáº\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
+\u06BC。\u200DY\u0307\u200Cᡤ; \u06BC.\u200Dáº\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
+\u06BC。\u200DẎ\u200Cᡤ; \u06BC.\u200Dáº\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
+xn--vkb.xn--08e172a; \u06BC.áºá¡¤; ; xn--vkb.xn--08e172a; ; ; # Ú¼.áºá¡¤
+\u06BC.áºá¡¤; ; ; xn--vkb.xn--08e172a; ; ; # Ú¼.áºá¡¤
+\u06BC.y\u0307ᡤ; \u06BC.áºá¡¤; ; xn--vkb.xn--08e172a; ; ; # Ú¼.áºá¡¤
+\u06BC.Y\u0307ᡤ; \u06BC.áºá¡¤; ; xn--vkb.xn--08e172a; ; ; # Ú¼.áºá¡¤
+\u06BC.Ẏᡤ; \u06BC.áºá¡¤; ; xn--vkb.xn--08e172a; ; ; # Ú¼.áºá¡¤
+xn--vkb.xn--08e172ax6aca; \u06BC.\u200Dáº\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; ; # Ú¼.áºá¡¤
+\u06BC。\u200DY\u0307\u200Cᡤ; \u06BC.\u200Dáº\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
+\u06BC。\u200DẎ\u200Cᡤ; \u06BC.\u200Dáº\u200Cᡤ; [B1, C1, C2]; xn--vkb.xn--08e172ax6aca; ; xn--vkb.xn--08e172a; [] # Ú¼.áºá¡¤
+ð¹¹ð‘²›ã€‚ñ‘‚\u0DCA; ð¹¹ð‘²›.ñ‘‚\u0DCA; [B1, V6]; xn--xo0dg5v.xn--h1c39876d; ; ; # ð¹¹ð‘²›.à·Š
+xn--xo0dg5v.xn--h1c39876d; ð¹¹ð‘²›.ñ‘‚\u0DCA; [B1, V6]; xn--xo0dg5v.xn--h1c39876d; ; ; # ð¹¹ð‘²›.à·Š
+-≠𑈵。嵕\uFEF1۴\uA953; -≠𑈵.嵕\u064A۴\uA953; [B1, B5, V3]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓
+-=\u0338𑈵。嵕\uFEF1۴\uA953; -≠𑈵.嵕\u064A۴\uA953; [B1, B5, V3]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓
+-≠𑈵。嵕\u064A۴\uA953; -≠𑈵.嵕\u064A۴\uA953; [B1, B5, V3]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓
+-=\u0338𑈵。嵕\u064A۴\uA953; -≠𑈵.嵕\u064A۴\uA953; [B1, B5, V3]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓
+xn----ufo4749h.xn--mhb45a235sns3c; -≠𑈵.嵕\u064A۴\uA953; [B1, B5, V3]; xn----ufo4749h.xn--mhb45a235sns3c; ; ; # -≠𑈵.嵕ي۴꥓
+\u200Cñ¸°ð¹¶\u076E.\u06C1\u200D≯\u200D; \u200Cñ¸°ð¹¶\u076E.\u06C1\u200D≯\u200D; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, V6] # ð¹¶Ý®.Û≯
+\u200Cñ¸°ð¹¶\u076E.\u06C1\u200D>\u0338\u200D; \u200Cñ¸°ð¹¶\u076E.\u06C1\u200D≯\u200D; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, V6] # ð¹¶Ý®.Û≯
+\u200Cñ¸°ð¹¶\u076E.\u06C1\u200D≯\u200D; ; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, V6] # ð¹¶Ý®.Û≯
+\u200Cñ¸°ð¹¶\u076E.\u06C1\u200D>\u0338\u200D; \u200Cñ¸°ð¹¶\u076E.\u06C1\u200D≯\u200D; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; xn--ypb5875khz9y.xn--0kb682l; [B3, B5, B6, V6] # ð¹¶Ý®.Û≯
+xn--ypb5875khz9y.xn--0kb682l; ñ¸°ð¹¶\u076E.\u06C1≯; [B3, B5, B6, V6]; xn--ypb5875khz9y.xn--0kb682l; ; ; # ð¹¶Ý®.Û≯
+xn--ypb717jrx2o7v94a.xn--0kb660ka35v; \u200Cñ¸°ð¹¶\u076E.\u06C1\u200D≯\u200D; [B1, B3, C1, C2, V6]; xn--ypb717jrx2o7v94a.xn--0kb660ka35v; ; ; # ð¹¶Ý®.Û≯
+≮.\u17B5\u0855ð«”; ≮.\u17B5\u0855ð«”; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.à¡•ð«”
+<\u0338.\u17B5\u0855ð«”; ≮.\u17B5\u0855ð«”; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.à¡•ð«”
+≮.\u17B5\u0855ð«”; ; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.à¡•ð«”
+<\u0338.\u17B5\u0855ð«”; ≮.\u17B5\u0855ð«”; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.à¡•ð«”
+xn--gdh.xn--kwb589e217p; ≮.\u17B5\u0855ð«”; [B1, V5, V6]; xn--gdh.xn--kwb589e217p; ; ; # ≮.à¡•ð«”
+ð©—\u200D。ႩႵ; ð©—\u200D.ႩႵ; [B3, C2, V6]; xn--1ug4933g.xn--hndy; ; xn--pt9c.xn--hndy; [V6] # ð©—.ႩႵ
+ð©—\u200D。ႩႵ; ð©—\u200D.ႩႵ; [B3, C2, V6]; xn--1ug4933g.xn--hndy; ; xn--pt9c.xn--hndy; [V6] # ð©—.ႩႵ
+ð©—\u200D。ⴉⴕ; ð©—\u200D.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; xn--pt9c.xn--0kjya; [] # ð©—.ⴉⴕ
+ð©—\u200D。Ⴉⴕ; ð©—\u200D.á‚©â´•; [B3, C2, V6]; xn--1ug4933g.xn--hnd666l; ; xn--pt9c.xn--hnd666l; [V6] # ð©—.á‚©â´•
xn--pt9c.xn--hnd666l; ð©—.á‚©â´•; [V6]; xn--pt9c.xn--hnd666l; ; ; # ð©—.á‚©â´•
-xn--1ug4933g.xn--hnd666l; ð©—â€.á‚©â´•; [B3, C2, V6]; xn--1ug4933g.xn--hnd666l; ; ; # ð©—.á‚©â´•
+xn--1ug4933g.xn--hnd666l; ð©—\u200D.á‚©â´•; [B3, C2, V6]; xn--1ug4933g.xn--hnd666l; ; ; # ð©—.á‚©â´•
xn--pt9c.xn--0kjya; ð©—.ⴉⴕ; ; xn--pt9c.xn--0kjya; ; ; # ð©—.ⴉⴕ
ð©—.ⴉⴕ; ; ; xn--pt9c.xn--0kjya; ; ; # ð©—.ⴉⴕ
-ð©—.ႩႵ; ; [P1, V6]; xn--pt9c.xn--hndy; ; ; # ð©—.ႩႵ
-ð©—.á‚©â´•; ; [P1, V6]; xn--pt9c.xn--hnd666l; ; ; # ð©—.á‚©â´•
+ð©—.ႩႵ; ; [V6]; xn--pt9c.xn--hndy; ; ; # ð©—.ႩႵ
+ð©—.á‚©â´•; ; [V6]; xn--pt9c.xn--hnd666l; ; ; # ð©—.á‚©â´•
xn--pt9c.xn--hndy; ð©—.ႩႵ; [V6]; xn--pt9c.xn--hndy; ; ; # ð©—.ႩႵ
-xn--1ug4933g.xn--0kjya; ð©—â€.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; ; # ð©—.ⴉⴕ
-xn--1ug4933g.xn--hndy; ð©—â€.ႩႵ; [B3, C2, V6]; xn--1ug4933g.xn--hndy; ; ; # ð©—.ႩႵ
-ð©—â€ï½¡â´‰â´•; ð©—â€.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; xn--pt9c.xn--0kjya; [] # ð©—.ⴉⴕ
-ð©—â€ï½¡á‚©â´•; ð©—â€.á‚©â´•; [B3, C2, P1, V6]; xn--1ug4933g.xn--hnd666l; ; xn--pt9c.xn--hnd666l; [P1, V6] # ð©—.á‚©â´•
-‌‌ㄤ.̮󕨑ূ; ‌‌ㄤ.̮󕨑ূ; [C1, P1, V5, V6]; xn--0uga242k.xn--vta284a9o563a; ; xn--1fk.xn--vta284a9o563a; [P1, V5, V6] # ㄤ.̮ূ
-‌‌ㄤ.̮󕨑ূ; ; [C1, P1, V5, V6]; xn--0uga242k.xn--vta284a9o563a; ; xn--1fk.xn--vta284a9o563a; [P1, V5, V6] # ㄤ.̮ূ
-xn--1fk.xn--vta284a9o563a; ㄤ.̮󕨑ূ; [V5, V6]; xn--1fk.xn--vta284a9o563a; ; ; # ㄤ.̮ূ
-xn--0uga242k.xn--vta284a9o563a; ‌‌ㄤ.̮󕨑ূ; [C1, V5, V6]; xn--0uga242k.xn--vta284a9o563a; ; ; # ㄤ.̮ূ
-ð‹»ï½¡-‌ð«„á‚·; ð‹».-‌ð«„á‚·; [B1, C1, P1, V3, V6]; xn--v97c.xn----i1g888ih12u; ; xn--v97c.xn----i1g2513q; [B1, P1, V3, V6] # ð‹».-ð«„á‚·
-ð‹»ã€‚-‌ð«„á‚·; ð‹».-‌ð«„á‚·; [B1, C1, P1, V3, V6]; xn--v97c.xn----i1g888ih12u; ; xn--v97c.xn----i1g2513q; [B1, P1, V3, V6] # ð‹».-ð«„á‚·
-ð‹»ã€‚-‌ð«„â´—; ð‹».-‌ð«„â´—; [B1, C1, V3]; xn--v97c.xn----sgnv20du99s; ; xn--v97c.xn----lws0526f; [B1, V3] # ð‹».-ð«„â´—
+xn--1ug4933g.xn--0kjya; ð©—\u200D.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; ; # ð©—.ⴉⴕ
+xn--1ug4933g.xn--hndy; ð©—\u200D.ႩႵ; [B3, C2, V6]; xn--1ug4933g.xn--hndy; ; ; # ð©—.ႩႵ
+ð©—\u200D。ⴉⴕ; ð©—\u200D.ⴉⴕ; [B3, C2]; xn--1ug4933g.xn--0kjya; ; xn--pt9c.xn--0kjya; [] # ð©—.ⴉⴕ
+ð©—\u200D。Ⴉⴕ; ð©—\u200D.á‚©â´•; [B3, C2, V6]; xn--1ug4933g.xn--hnd666l; ; xn--pt9c.xn--hnd666l; [V6] # ð©—.á‚©â´•
+\u200C\u200Cㄤ.\u032E󕨑\u09C2; \u200C\u200Cㄤ.\u032E󕨑\u09C2; [C1, V5, V6]; xn--0uga242k.xn--vta284a9o563a; ; xn--1fk.xn--vta284a9o563a; [V5, V6] # ㄤ.̮ূ
+\u200C\u200Cㄤ.\u032E󕨑\u09C2; ; [C1, V5, V6]; xn--0uga242k.xn--vta284a9o563a; ; xn--1fk.xn--vta284a9o563a; [V5, V6] # ㄤ.̮ূ
+xn--1fk.xn--vta284a9o563a; ㄤ.\u032E󕨑\u09C2; [V5, V6]; xn--1fk.xn--vta284a9o563a; ; ; # ㄤ.̮ূ
+xn--0uga242k.xn--vta284a9o563a; \u200C\u200Cㄤ.\u032E󕨑\u09C2; [C1, V5, V6]; xn--0uga242k.xn--vta284a9o563a; ; ; # ㄤ.̮ূ
+ð‹»ï½¡-\u200Cð«„á‚·; ð‹».-\u200Cð«„á‚·; [B1, C1, V3, V6]; xn--v97c.xn----i1g888ih12u; ; xn--v97c.xn----i1g2513q; [B1, V3, V6] # ð‹».-ð«„á‚·
+ð‹»ã€‚-\u200Cð«„á‚·; ð‹».-\u200Cð«„á‚·; [B1, C1, V3, V6]; xn--v97c.xn----i1g888ih12u; ; xn--v97c.xn----i1g2513q; [B1, V3, V6] # ð‹».-ð«„á‚·
+ð‹»ã€‚-\u200Cð«„â´—; ð‹».-\u200Cð«„â´—; [B1, C1, V3]; xn--v97c.xn----sgnv20du99s; ; xn--v97c.xn----lws0526f; [B1, V3] # ð‹».-ð«„â´—
xn--v97c.xn----lws0526f; ð‹».-ð«„â´—; [B1, V3]; xn--v97c.xn----lws0526f; ; ; # ð‹».-ð«„â´—
-xn--v97c.xn----sgnv20du99s; ð‹».-‌ð«„â´—; [B1, C1, V3]; xn--v97c.xn----sgnv20du99s; ; ; # ð‹».-ð«„â´—
+xn--v97c.xn----sgnv20du99s; ð‹».-\u200Cð«„â´—; [B1, C1, V3]; xn--v97c.xn----sgnv20du99s; ; ; # ð‹».-ð«„â´—
xn--v97c.xn----i1g2513q; ð‹».-ð«„á‚·; [B1, V3, V6]; xn--v97c.xn----i1g2513q; ; ; # ð‹».-ð«„á‚·
-xn--v97c.xn----i1g888ih12u; ð‹».-‌ð«„á‚·; [B1, C1, V3, V6]; xn--v97c.xn----i1g888ih12u; ; ; # ð‹».-ð«„á‚·
-ð‹»ï½¡-‌ð«„â´—; ð‹».-‌ð«„â´—; [B1, C1, V3]; xn--v97c.xn----sgnv20du99s; ; xn--v97c.xn----lws0526f; [B1, V3] # ð‹».-ð«„â´—
-🙑ð·ºï¼Žâ‰ â€Œ; 🙑ð·º.≠‌; [B1, C1, P1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, P1, V6] # 🙑.≠
-🙑ð·ºï¼Ž≠‌; 🙑ð·º.≠‌; [B1, C1, P1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, P1, V6] # 🙑.≠
-🙑ð·º.≠‌; ; [B1, C1, P1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, P1, V6] # 🙑.≠
-🙑ð·º.≠‌; 🙑ð·º.≠‌; [B1, C1, P1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, P1, V6] # 🙑.≠
+xn--v97c.xn----i1g888ih12u; ð‹».-\u200Cð«„á‚·; [B1, C1, V3, V6]; xn--v97c.xn----i1g888ih12u; ; ; # ð‹».-ð«„á‚·
+ð‹»ï½¡-\u200Cð«„â´—; ð‹».-\u200Cð«„â´—; [B1, C1, V3]; xn--v97c.xn----sgnv20du99s; ; xn--v97c.xn----lws0526f; [B1, V3] # ð‹».-ð«„â´—
+🙑ð·ºï¼Žâ‰ \u200C; 🙑ð·º.≠\u200C; [B1, C1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, V6] # 🙑.≠
+🙑ð·ºï¼Ž=\u0338\u200C; 🙑ð·º.≠\u200C; [B1, C1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, V6] # 🙑.≠
+🙑ð·º.≠\u200C; ; [B1, C1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, V6] # 🙑.≠
+🙑ð·º.=\u0338\u200C; 🙑ð·º.≠\u200C; [B1, C1, V6]; xn--bl0dh970b.xn--0ug83g; ; xn--bl0dh970b.xn--1ch; [B1, V6] # 🙑.≠
xn--bl0dh970b.xn--1ch; 🙑ð·º.≠; [B1, V6]; xn--bl0dh970b.xn--1ch; ; ; # 🙑.≠
-xn--bl0dh970b.xn--0ug83g; 🙑ð·º.≠‌; [B1, C1, V6]; xn--bl0dh970b.xn--0ug83g; ; ; # 🙑.≠
-ٌ᳒。𞮞⵿⧎; ٌ᳒.𞮞⵿⧎; [B1, B3, B6, P1, V5, V6]; xn--ohb646i.xn--ewi38jf765c; ; ; # ٌ᳒.⵿⧎
-ٌ᳒。𞮞⵿⧎; ٌ᳒.𞮞⵿⧎; [B1, B3, B6, P1, V5, V6]; xn--ohb646i.xn--ewi38jf765c; ; ; # ٌ᳒.⵿⧎
-xn--ohb646i.xn--ewi38jf765c; ٌ᳒.𞮞⵿⧎; [B1, B3, B6, V5, V6]; xn--ohb646i.xn--ewi38jf765c; ; ; # ٌ᳒.⵿⧎
-á‚´ð¨¨â‚ƒó ¦ï¼ŽðŸ³ð‘‚¹à®‚; á‚´ð¨¨3ó ¦.7𑂹ஂ; [P1, V6]; xn--3-b1g83426a35t0g.xn--7-cve6271r; ; ; # á‚´ð¨¨3.7𑂹ஂ
-á‚´ð¨¨3ó ¦.7𑂹ஂ; ; [P1, V6]; xn--3-b1g83426a35t0g.xn--7-cve6271r; ; ; # á‚´ð¨¨3.7𑂹ஂ
-â´”ð¨¨3ó ¦.7𑂹ஂ; ; [P1, V6]; xn--3-ews6985n35s3g.xn--7-cve6271r; ; ; # â´”ð¨¨3.7𑂹ஂ
-xn--3-ews6985n35s3g.xn--7-cve6271r; â´”ð¨¨3ó ¦.7𑂹ஂ; [V6]; xn--3-ews6985n35s3g.xn--7-cve6271r; ; ; # â´”ð¨¨3.7𑂹ஂ
-xn--3-b1g83426a35t0g.xn--7-cve6271r; á‚´ð¨¨3ó ¦.7𑂹ஂ; [V6]; xn--3-b1g83426a35t0g.xn--7-cve6271r; ; ; # á‚´ð¨¨3.7𑂹ஂ
-â´”ð¨¨â‚ƒó ¦ï¼ŽðŸ³ð‘‚¹à®‚; â´”ð¨¨3ó ¦.7𑂹ஂ; [P1, V6]; xn--3-ews6985n35s3g.xn--7-cve6271r; ; ; # â´”ð¨¨3.7𑂹ஂ
-äˆâ€Œã€‚‌⒈ñ±¢•; äˆâ€Œ.‌⒈ñ±¢•; [C1, P1, V6]; xn--0ug491l.xn--0ug88oot66q; ; xn--eco.xn--tsh21126d; [P1, V6] # äˆ.â’ˆ
-äˆâ€Œã€‚‌1.ñ±¢•; äˆâ€Œ.‌1.ñ±¢•; [C1, P1, V6]; xn--0ug491l.xn--1-rgn.xn--ms39a; ; xn--eco.1.xn--ms39a; [P1, V6] # äˆ.1.
+xn--bl0dh970b.xn--0ug83g; 🙑ð·º.≠\u200C; [B1, C1, V6]; xn--bl0dh970b.xn--0ug83g; ; ; # 🙑.≠
+\u064C\u1CD2。𞮞\u2D7F⧎; \u064C\u1CD2.𞮞\u2D7F⧎; [B1, B3, V5, V6]; xn--ohb646i.xn--ewi38jf765c; ; ; # ٌ᳒.⵿⧎
+\u064C\u1CD2。𞮞\u2D7F⧎; \u064C\u1CD2.𞮞\u2D7F⧎; [B1, B3, V5, V6]; xn--ohb646i.xn--ewi38jf765c; ; ; # ٌ᳒.⵿⧎
+xn--ohb646i.xn--ewi38jf765c; \u064C\u1CD2.𞮞\u2D7F⧎; [B1, B3, V5, V6]; xn--ohb646i.xn--ewi38jf765c; ; ; # ٌ᳒.⵿⧎
+á‚´ð¨¨â‚ƒó ¦ï¼ŽðŸ³ð‘‚¹\u0B82; á‚´ð¨¨3ó ¦.7ð‘‚¹\u0B82; [V6]; xn--3-b1g83426a35t0g.xn--7-cve6271r; ; ; # á‚´ð¨¨3.7𑂹ஂ
+á‚´ð¨¨3ó ¦.7ð‘‚¹\u0B82; ; [V6]; xn--3-b1g83426a35t0g.xn--7-cve6271r; ; ; # á‚´ð¨¨3.7𑂹ஂ
+â´”ð¨¨3ó ¦.7ð‘‚¹\u0B82; ; [V6]; xn--3-ews6985n35s3g.xn--7-cve6271r; ; ; # â´”ð¨¨3.7𑂹ஂ
+xn--3-ews6985n35s3g.xn--7-cve6271r; â´”ð¨¨3ó ¦.7ð‘‚¹\u0B82; [V6]; xn--3-ews6985n35s3g.xn--7-cve6271r; ; ; # â´”ð¨¨3.7𑂹ஂ
+xn--3-b1g83426a35t0g.xn--7-cve6271r; á‚´ð¨¨3ó ¦.7ð‘‚¹\u0B82; [V6]; xn--3-b1g83426a35t0g.xn--7-cve6271r; ; ; # á‚´ð¨¨3.7𑂹ஂ
+â´”ð¨¨â‚ƒó ¦ï¼ŽðŸ³ð‘‚¹\u0B82; â´”ð¨¨3ó ¦.7ð‘‚¹\u0B82; [V6]; xn--3-ews6985n35s3g.xn--7-cve6271r; ; ; # â´”ð¨¨3.7𑂹ஂ
+äˆ\u200C。\u200Câ’ˆñ±¢•; äˆ\u200C.\u200Câ’ˆñ±¢•; [C1, V6]; xn--0ug491l.xn--0ug88oot66q; ; xn--eco.xn--tsh21126d; [V6] # äˆ.â’ˆ
+äˆ\u200C。\u200C1.ñ±¢•; äˆ\u200C.\u200C1.ñ±¢•; [C1, V6]; xn--0ug491l.xn--1-rgn.xn--ms39a; ; xn--eco.1.xn--ms39a; [V6] # äˆ.1.
xn--eco.1.xn--ms39a; äˆ.1.ñ±¢•; [V6]; xn--eco.1.xn--ms39a; ; ; # äˆ.1.
-xn--0ug491l.xn--1-rgn.xn--ms39a; äˆâ€Œ.‌1.ñ±¢•; [C1, V6]; xn--0ug491l.xn--1-rgn.xn--ms39a; ; ; # äˆ.1.
+xn--0ug491l.xn--1-rgn.xn--ms39a; äˆ\u200C.\u200C1.ñ±¢•; [C1, V6]; xn--0ug491l.xn--1-rgn.xn--ms39a; ; ; # äˆ.1.
xn--eco.xn--tsh21126d; äˆ.â’ˆñ±¢•; [V6]; xn--eco.xn--tsh21126d; ; ; # äˆ.â’ˆ
-xn--0ug491l.xn--0ug88oot66q; äˆâ€Œ.‌⒈ñ±¢•; [C1, V6]; xn--0ug491l.xn--0ug88oot66q; ; ; # äˆ.â’ˆ
-1꫶ß𑲥。ᷘ; 1꫶ß𑲥.ᷘ; [V5]; xn--1-qfa2471kdb0d.xn--weg; ; xn--1ss-ir6ln166b.xn--weg; # 1꫶ß𑲥.ᷘ
-1꫶ß𑲥。ᷘ; 1꫶ß𑲥.ᷘ; [V5]; xn--1-qfa2471kdb0d.xn--weg; ; xn--1ss-ir6ln166b.xn--weg; # 1꫶ß𑲥.ᷘ
-1꫶SS𑲥。ᷘ; 1꫶ss𑲥.ᷘ; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
-1꫶ss𑲥。ᷘ; 1꫶ss𑲥.ᷘ; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
-xn--1ss-ir6ln166b.xn--weg; 1꫶ss𑲥.ᷘ; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
-xn--1-qfa2471kdb0d.xn--weg; 1꫶ß𑲥.ᷘ; [V5]; xn--1-qfa2471kdb0d.xn--weg; ; ; # 1꫶ß𑲥.ᷘ
-1꫶SS𑲥。ᷘ; 1꫶ss𑲥.ᷘ; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
-1꫶ss𑲥。ᷘ; 1꫶ss𑲥.ᷘ; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
-1꫶Ss𑲥。ᷘ; 1꫶ss𑲥.ᷘ; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
-1꫶Ss𑲥。ᷘ; 1꫶ss𑲥.ᷘ; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
-â€ñ«¶©ðžª¯à³ï½¡Ý¼â’ˆ; â€ñ«¶©ðžª¯à³.ݼ⒈; [B1, C2, P1, V6]; xn--8tc969gzn94a4lm8a.xn--dqb689l; ; xn--8tc9875v5is1a.xn--dqb689l; [B5, B6, P1, V6] # à³.ݼ⒈
-â€ñ«¶©ðžª¯à³ã€‚ݼ1.; â€ñ«¶©ðžª¯à³.ݼ1.; [B1, C2, P1, V6]; xn--8tc969gzn94a4lm8a.xn--1-g6c.; ; xn--8tc9875v5is1a.xn--1-g6c.; [B5, B6, P1, V6] # à³.ݼ1.
-xn--8tc9875v5is1a.xn--1-g6c.; ñ«¶©ðžª¯à³.ݼ1.; [B5, B6, V6]; xn--8tc9875v5is1a.xn--1-g6c.; ; ; # à³.ݼ1.
-xn--8tc969gzn94a4lm8a.xn--1-g6c.; â€ñ«¶©ðžª¯à³.ݼ1.; [B1, C2, V6]; xn--8tc969gzn94a4lm8a.xn--1-g6c.; ; ; # à³.ݼ1.
-xn--8tc9875v5is1a.xn--dqb689l; ñ«¶©ðžª¯à³.ݼ⒈; [B5, B6, V6]; xn--8tc9875v5is1a.xn--dqb689l; ; ; # à³.ݼ⒈
-xn--8tc969gzn94a4lm8a.xn--dqb689l; â€ñ«¶©ðžª¯à³.ݼ⒈; [B1, C2, V6]; xn--8tc969gzn94a4lm8a.xn--dqb689l; ; ; # à³.ݼ⒈
-᪶.𞤳򓢖򻉒ߗ; ᪶.𞤳򓢖򻉒ߗ; [B1, B2, B3, B6, P1, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ
-᪶.𞤳򓢖򻉒ߗ; ; [B1, B2, B3, B6, P1, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ
-᪶.𞤑򓢖򻉒ߗ; ᪶.𞤳򓢖򻉒ߗ; [B1, B2, B3, B6, P1, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ
-xn--zqf.xn--ysb9657vuiz5bj0ep; ᪶.𞤳򓢖򻉒ߗ; [B1, B2, B3, B6, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ
-᪶.𞤑򓢖򻉒ߗ; ᪶.𞤳򓢖򻉒ߗ; [B1, B2, B3, B6, P1, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ
-ࡂ𞩚⒈.󠬌8ò³Ý°; à¡‚ðž©šâ’ˆ.󠬌8ò³Ý°; [B1, P1, V6]; xn--0vb095ldg52a.xn--8-s5c22427ox454a; ; ; # à¡‚â’ˆ.8Ý°
-à¡‚ðž©š1..󠬌8ò³Ý°; ; [B1, P1, V6, X4_2]; xn--1-rid26318a..xn--8-s5c22427ox454a; [B1, P1, V6, A4_2]; ; # à¡‚1..8Ý°
-xn--1-rid26318a..xn--8-s5c22427ox454a; à¡‚ðž©š1..󠬌8ò³Ý°; [B1, V6, X4_2]; xn--1-rid26318a..xn--8-s5c22427ox454a; [B1, V6, A4_2]; ; # à¡‚1..8Ý°
-xn--0vb095ldg52a.xn--8-s5c22427ox454a; à¡‚ðž©šâ’ˆ.󠬌8ò³Ý°; [B1, V6]; xn--0vb095ldg52a.xn--8-s5c22427ox454a; ; ; # à¡‚â’ˆ.8Ý°
-Í¡ð««Í©á¡·ã€‚-󠰛鞰; Í¡ð««Í©á¡·.-󠰛鞰; [B1, P1, V3, V5, V6]; xn--cvaq482npv5t.xn----yg7dt1332g; ; ; # Í¡ð««Í©á¡·.-éž°
-xn--cvaq482npv5t.xn----yg7dt1332g; Í¡ð««Í©á¡·.-󠰛鞰; [B1, V3, V5, V6]; xn--cvaq482npv5t.xn----yg7dt1332g; ; ; # Í¡ð««Í©á¡·.-éž°
--.à«å‰˜ÃŸð«ƒ; ; [B1, V3, V5]; -.xn--zca791c493duf8i; ; -.xn--ss-bqg4734erywk; # -.à«å‰˜ÃŸð«ƒ
--.à«å‰˜SSð«ƒ; -.à«å‰˜ssð«ƒ; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.à«å‰˜ssð«ƒ
--.à«å‰˜ssð«ƒ; ; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.à«å‰˜ssð«ƒ
--.à«å‰˜Ssð«ƒ; -.à«å‰˜ssð«ƒ; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.à«å‰˜ssð«ƒ
--.xn--ss-bqg4734erywk; -.à«å‰˜ssð«ƒ; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.à«å‰˜ssð«ƒ
--.xn--zca791c493duf8i; -.à«å‰˜ÃŸð«ƒ; [B1, V3, V5]; -.xn--zca791c493duf8i; ; ; # -.à«å‰˜ÃŸð«ƒ
-ࣻ𞵸。-; ࣻ𞵸.-; [B1, P1, V3, V5, V6]; xn--b1b2719v.-; ; ; # ࣻ.-
-ࣻ𞵸。-; ࣻ𞵸.-; [B1, P1, V3, V5, V6]; xn--b1b2719v.-; ; ; # ࣻ.-
-xn--b1b2719v.-; ࣻ𞵸.-; [B1, V3, V5, V6]; xn--b1b2719v.-; ; ; # ࣻ.-
-⒈󠈻ð¹²ï½¡â‰ Øƒð¹½; ⒈󠈻ð¹².≠؃ð¹½; [B1, P1, V6]; xn--tshw766f1153g.xn--lfb536lb35n; ; ; # â’ˆð¹².≠ð¹½
-⒈󠈻ð¹²ï½¡≠؃ð¹½; ⒈󠈻ð¹².≠؃ð¹½; [B1, P1, V6]; xn--tshw766f1153g.xn--lfb536lb35n; ; ; # â’ˆð¹².≠ð¹½
-1.󠈻ð¹²ã€‚≠؃ð¹½; 1.󠈻ð¹².≠؃ð¹½; [B1, P1, V6]; 1.xn--qo0dl3077c.xn--lfb536lb35n; ; ; # 1.ð¹².≠ð¹½
-1.󠈻ð¹²ã€‚≠؃ð¹½; 1.󠈻ð¹².≠؃ð¹½; [B1, P1, V6]; 1.xn--qo0dl3077c.xn--lfb536lb35n; ; ; # 1.ð¹².≠ð¹½
-1.xn--qo0dl3077c.xn--lfb536lb35n; 1.󠈻ð¹².≠؃ð¹½; [B1, V6]; 1.xn--qo0dl3077c.xn--lfb536lb35n; ; ; # 1.ð¹².≠ð¹½
-xn--tshw766f1153g.xn--lfb536lb35n; ⒈󠈻ð¹².≠؃ð¹½; [B1, V6]; xn--tshw766f1153g.xn--lfb536lb35n; ; ; # â’ˆð¹².≠ð¹½
-ð¹¢ó ˆšá‚®â€Œ.ã–¾ð¹¡; ; [B1, B5, B6, C1, P1, V6]; xn--mnd289ezj4pqxp0i.xn--pelu572d; ; xn--mnd9001km0o0g.xn--pelu572d; [B1, B5, B6, P1, V6] # ð¹¢á‚®.ã–¾ð¹¡
-ð¹¢ó ˆšâ´Žâ€Œ.ã–¾ð¹¡; ; [B1, B5, B6, C1, P1, V6]; xn--0ug342clq0pqxv4i.xn--pelu572d; ; xn--5kjx323em053g.xn--pelu572d; [B1, B5, B6, P1, V6] # ð¹¢â´Ž.ã–¾ð¹¡
+xn--0ug491l.xn--0ug88oot66q; äˆ\u200C.\u200Câ’ˆñ±¢•; [C1, V6]; xn--0ug491l.xn--0ug88oot66q; ; ; # äˆ.â’ˆ
+1\uAAF6ß𑲥。\u1DD8; 1\uAAF6ß𑲥.\u1DD8; [V5]; xn--1-qfa2471kdb0d.xn--weg; ; xn--1ss-ir6ln166b.xn--weg; # 1꫶ß𑲥.ᷘ
+1\uAAF6ß𑲥。\u1DD8; 1\uAAF6ß𑲥.\u1DD8; [V5]; xn--1-qfa2471kdb0d.xn--weg; ; xn--1ss-ir6ln166b.xn--weg; # 1꫶ß𑲥.ᷘ
+1\uAAF6SS𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
+1\uAAF6ss𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
+xn--1ss-ir6ln166b.xn--weg; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
+xn--1-qfa2471kdb0d.xn--weg; 1\uAAF6ß𑲥.\u1DD8; [V5]; xn--1-qfa2471kdb0d.xn--weg; ; ; # 1꫶ß𑲥.ᷘ
+1\uAAF6SS𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
+1\uAAF6ss𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
+1\uAAF6Ss𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
+1\uAAF6Ss𑲥。\u1DD8; 1\uAAF6ss𑲥.\u1DD8; [V5]; xn--1ss-ir6ln166b.xn--weg; ; ; # 1꫶ss𑲥.ᷘ
+\u200Dñ«¶©ðžª¯\u0CCD。\u077Câ’ˆ; \u200Dñ«¶©ðžª¯\u0CCD.\u077Câ’ˆ; [B1, C2, V6]; xn--8tc969gzn94a4lm8a.xn--dqb689l; ; xn--8tc9875v5is1a.xn--dqb689l; [B5, B6, V6] # à³.ݼ⒈
+\u200Dñ«¶©ðžª¯\u0CCD。\u077C1.; \u200Dñ«¶©ðžª¯\u0CCD.\u077C1.; [B1, C2, V6]; xn--8tc969gzn94a4lm8a.xn--1-g6c.; ; xn--8tc9875v5is1a.xn--1-g6c.; [B5, B6, V6] # à³.ݼ1.
+xn--8tc9875v5is1a.xn--1-g6c.; ñ«¶©ðžª¯\u0CCD.\u077C1.; [B5, B6, V6]; xn--8tc9875v5is1a.xn--1-g6c.; ; ; # à³.ݼ1.
+xn--8tc969gzn94a4lm8a.xn--1-g6c.; \u200Dñ«¶©ðžª¯\u0CCD.\u077C1.; [B1, C2, V6]; xn--8tc969gzn94a4lm8a.xn--1-g6c.; ; ; # à³.ݼ1.
+xn--8tc9875v5is1a.xn--dqb689l; ñ«¶©ðžª¯\u0CCD.\u077Câ’ˆ; [B5, B6, V6]; xn--8tc9875v5is1a.xn--dqb689l; ; ; # à³.ݼ⒈
+xn--8tc969gzn94a4lm8a.xn--dqb689l; \u200Dñ«¶©ðžª¯\u0CCD.\u077Câ’ˆ; [B1, C2, V6]; xn--8tc969gzn94a4lm8a.xn--dqb689l; ; ; # à³.ݼ⒈
+\u1AB6.𞤳򓢖򻉒\u07D7; \u1AB6.𞤳򓢖򻉒\u07D7; [B1, B2, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ
+\u1AB6.𞤳򓢖򻉒\u07D7; ; [B1, B2, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ
+\u1AB6.𞤑򓢖򻉒\u07D7; \u1AB6.𞤳򓢖򻉒\u07D7; [B1, B2, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ
+xn--zqf.xn--ysb9657vuiz5bj0ep; \u1AB6.𞤳򓢖򻉒\u07D7; [B1, B2, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ
+\u1AB6.𞤑򓢖򻉒\u07D7; \u1AB6.𞤳򓢖򻉒\u07D7; [B1, B2, V5, V6]; xn--zqf.xn--ysb9657vuiz5bj0ep; ; ; # ᪶.𞤳ߗ
+\u0842𞩚⒈.󠬌8ò³\u0770; \u0842ðž©šâ’ˆ.󠬌8ò³\u0770; [B1, V6]; xn--0vb095ldg52a.xn--8-s5c22427ox454a; ; ; # à¡‚â’ˆ.8Ý°
+\u0842ðž©š1..󠬌8ò³\u0770; ; [B1, V6, X4_2]; xn--1-rid26318a..xn--8-s5c22427ox454a; [B1, V6, A4_2]; ; # à¡‚1..8Ý°
+xn--1-rid26318a..xn--8-s5c22427ox454a; \u0842ðž©š1..󠬌8ò³\u0770; [B1, V6, X4_2]; xn--1-rid26318a..xn--8-s5c22427ox454a; [B1, V6, A4_2]; ; # à¡‚1..8Ý°
+xn--0vb095ldg52a.xn--8-s5c22427ox454a; \u0842ðž©šâ’ˆ.󠬌8ò³\u0770; [B1, V6]; xn--0vb095ldg52a.xn--8-s5c22427ox454a; ; ; # à¡‚â’ˆ.8Ý°
+\u0361ð««\u0369ᡷ。-󠰛鞰; \u0361ð««\u0369á¡·.-󠰛鞰; [B1, V3, V5, V6]; xn--cvaq482npv5t.xn----yg7dt1332g; ; ; # Í¡ð««Í©á¡·.-éž°
+xn--cvaq482npv5t.xn----yg7dt1332g; \u0361ð««\u0369á¡·.-󠰛鞰; [B1, V3, V5, V6]; xn--cvaq482npv5t.xn----yg7dt1332g; ; ; # Í¡ð««Í©á¡·.-éž°
+-.\u0ACD剘ßð«ƒ; ; [B1, V3, V5]; -.xn--zca791c493duf8i; ; -.xn--ss-bqg4734erywk; # -.à«å‰˜ÃŸð«ƒ
+-.\u0ACD剘SSð«ƒ; -.\u0ACD剘ssð«ƒ; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.à«å‰˜ssð«ƒ
+-.\u0ACD剘ssð«ƒ; ; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.à«å‰˜ssð«ƒ
+-.\u0ACD剘Ssð«ƒ; -.\u0ACD剘ssð«ƒ; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.à«å‰˜ssð«ƒ
+-.xn--ss-bqg4734erywk; -.\u0ACD剘ssð«ƒ; [B1, V3, V5]; -.xn--ss-bqg4734erywk; ; ; # -.à«å‰˜ssð«ƒ
+-.xn--zca791c493duf8i; -.\u0ACD剘ßð«ƒ; [B1, V3, V5]; -.xn--zca791c493duf8i; ; ; # -.à«å‰˜ÃŸð«ƒ
+\u08FB𞵸。-; \u08FB𞵸.-; [B1, V3, V5, V6]; xn--b1b2719v.-; ; ; # ࣻ.-
+\u08FB𞵸。-; \u08FB𞵸.-; [B1, V3, V5, V6]; xn--b1b2719v.-; ; ; # ࣻ.-
+xn--b1b2719v.-; \u08FB𞵸.-; [B1, V3, V5, V6]; xn--b1b2719v.-; ; ; # ࣻ.-
+⒈󠈻ð¹²ï½¡â‰ \u0603ð¹½; ⒈󠈻ð¹².≠\u0603ð¹½; [B1, V6]; xn--tshw766f1153g.xn--lfb536lb35n; ; ; # â’ˆð¹².≠ð¹½
+⒈󠈻ð¹²ï½¡=\u0338\u0603ð¹½; ⒈󠈻ð¹².≠\u0603ð¹½; [B1, V6]; xn--tshw766f1153g.xn--lfb536lb35n; ; ; # â’ˆð¹².≠ð¹½
+1.󠈻ð¹²ã€‚≠\u0603ð¹½; 1.󠈻ð¹².≠\u0603ð¹½; [B1, V6]; 1.xn--qo0dl3077c.xn--lfb536lb35n; ; ; # 1.ð¹².≠ð¹½
+1.󠈻ð¹²ã€‚=\u0338\u0603ð¹½; 1.󠈻ð¹².≠\u0603ð¹½; [B1, V6]; 1.xn--qo0dl3077c.xn--lfb536lb35n; ; ; # 1.ð¹².≠ð¹½
+1.xn--qo0dl3077c.xn--lfb536lb35n; 1.󠈻ð¹².≠\u0603ð¹½; [B1, V6]; 1.xn--qo0dl3077c.xn--lfb536lb35n; ; ; # 1.ð¹².≠ð¹½
+xn--tshw766f1153g.xn--lfb536lb35n; ⒈󠈻ð¹².≠\u0603ð¹½; [B1, V6]; xn--tshw766f1153g.xn--lfb536lb35n; ; ; # â’ˆð¹².≠ð¹½
+ð¹¢ó ˆšá‚®\u200C.ã–¾ð¹¡; ; [B1, B5, B6, C1, V6]; xn--mnd289ezj4pqxp0i.xn--pelu572d; ; xn--mnd9001km0o0g.xn--pelu572d; [B1, B5, B6, V6] # ð¹¢á‚®.ã–¾ð¹¡
+ð¹¢ó ˆšâ´Ž\u200C.ã–¾ð¹¡; ; [B1, B5, B6, C1, V6]; xn--0ug342clq0pqxv4i.xn--pelu572d; ; xn--5kjx323em053g.xn--pelu572d; [B1, B5, B6, V6] # ð¹¢â´Ž.ã–¾ð¹¡
xn--5kjx323em053g.xn--pelu572d; ð¹¢ó ˆšâ´Ž.ã–¾ð¹¡; [B1, B5, B6, V6]; xn--5kjx323em053g.xn--pelu572d; ; ; # ð¹¢â´Ž.ã–¾ð¹¡
-xn--0ug342clq0pqxv4i.xn--pelu572d; ð¹¢ó ˆšâ´Žâ€Œ.ã–¾ð¹¡; [B1, B5, B6, C1, V6]; xn--0ug342clq0pqxv4i.xn--pelu572d; ; ; # ð¹¢â´Ž.ã–¾ð¹¡
+xn--0ug342clq0pqxv4i.xn--pelu572d; ð¹¢ó ˆšâ´Ž\u200C.ã–¾ð¹¡; [B1, B5, B6, C1, V6]; xn--0ug342clq0pqxv4i.xn--pelu572d; ; ; # ð¹¢â´Ž.ã–¾ð¹¡
xn--mnd9001km0o0g.xn--pelu572d; ð¹¢ó ˆšá‚®.ã–¾ð¹¡; [B1, B5, B6, V6]; xn--mnd9001km0o0g.xn--pelu572d; ; ; # ð¹¢á‚®.ã–¾ð¹¡
-xn--mnd289ezj4pqxp0i.xn--pelu572d; ð¹¢ó ˆšá‚®â€Œ.ã–¾ð¹¡; [B1, B5, B6, C1, V6]; xn--mnd289ezj4pqxp0i.xn--pelu572d; ; ; # ð¹¢á‚®.ã–¾ð¹¡
-򩼗.߇ᡖႳႧ; 򩼗.߇ᡖႳႧ; [B2, B3, P1, V6]; xn--te28c.xn--isb856b9a631d; ; ; # .߇ᡖႳႧ
-򩼗.߇ᡖႳႧ; ; [B2, B3, P1, V6]; xn--te28c.xn--isb856b9a631d; ; ; # .߇ᡖႳႧ
-򩼗.߇ᡖⴓⴇ; ; [B2, B3, P1, V6]; xn--te28c.xn--isb295fbtpmb; ; ; # .߇ᡖⴓⴇ
-xn--te28c.xn--isb295fbtpmb; 򩼗.߇ᡖⴓⴇ; [B2, B3, V6]; xn--te28c.xn--isb295fbtpmb; ; ; # .߇ᡖⴓⴇ
-xn--te28c.xn--isb856b9a631d; 򩼗.߇ᡖႳႧ; [B2, B3, V6]; xn--te28c.xn--isb856b9a631d; ; ; # .߇ᡖႳႧ
-򩼗.߇ᡖⴓⴇ; 򩼗.߇ᡖⴓⴇ; [B2, B3, P1, V6]; xn--te28c.xn--isb295fbtpmb; ; ; # .߇ᡖⴓⴇ
-򩼗.߇ᡖႳⴇ; ; [B2, B3, P1, V6]; xn--te28c.xn--isb286btrgo7w; ; ; # .߇ᡖႳⴇ
-xn--te28c.xn--isb286btrgo7w; 򩼗.߇ᡖႳⴇ; [B2, B3, V6]; xn--te28c.xn--isb286btrgo7w; ; ; # .߇ᡖႳⴇ
-򩼗.߇ᡖႳⴇ; 򩼗.߇ᡖႳⴇ; [B2, B3, P1, V6]; xn--te28c.xn--isb286btrgo7w; ; ; # .߇ᡖႳⴇ
-â€ô…‰.ڳݵ; ; [B1, C2, P1, V6]; xn--1ug39444n.xn--mkb20b; ; xn--3j78f.xn--mkb20b; [P1, V6] # .ڳݵ
-xn--3j78f.xn--mkb20b; ô…‰.ڳݵ; [V6]; xn--3j78f.xn--mkb20b; ; ; # .ڳݵ
-xn--1ug39444n.xn--mkb20b; â€ô…‰.ڳݵ; [B1, C2, V6]; xn--1ug39444n.xn--mkb20b; ; ; # .ڳݵ
-𲤱⒛⾳.ꡦ⒈; 𲤱⒛音.ꡦ⒈; [P1, V6]; xn--dth6033bzbvx.xn--tsh9439b; ; ; # ⒛音.ꡦ⒈
-𲤱20.音.ꡦ1.; ; [P1, V6]; xn--20-9802c.xn--0w5a.xn--1-eg4e.; ; ; # 20.音.ꡦ1.
+xn--mnd289ezj4pqxp0i.xn--pelu572d; ð¹¢ó ˆšá‚®\u200C.ã–¾ð¹¡; [B1, B5, B6, C1, V6]; xn--mnd289ezj4pqxp0i.xn--pelu572d; ; ; # ð¹¢á‚®.ã–¾ð¹¡
+򩼗.\u07C7ᡖႳႧ; 򩼗.\u07C7ᡖႳႧ; [B2, B3, V6]; xn--te28c.xn--isb856b9a631d; ; ; # .߇ᡖႳႧ
+򩼗.\u07C7ᡖႳႧ; ; [B2, B3, V6]; xn--te28c.xn--isb856b9a631d; ; ; # .߇ᡖႳႧ
+򩼗.\u07C7ᡖⴓⴇ; ; [B2, B3, V6]; xn--te28c.xn--isb295fbtpmb; ; ; # .߇ᡖⴓⴇ
+xn--te28c.xn--isb295fbtpmb; 򩼗.\u07C7ᡖⴓⴇ; [B2, B3, V6]; xn--te28c.xn--isb295fbtpmb; ; ; # .߇ᡖⴓⴇ
+xn--te28c.xn--isb856b9a631d; 򩼗.\u07C7ᡖႳႧ; [B2, B3, V6]; xn--te28c.xn--isb856b9a631d; ; ; # .߇ᡖႳႧ
+򩼗.\u07C7ᡖⴓⴇ; 򩼗.\u07C7ᡖⴓⴇ; [B2, B3, V6]; xn--te28c.xn--isb295fbtpmb; ; ; # .߇ᡖⴓⴇ
+򩼗.\u07C7ᡖႳⴇ; ; [B2, B3, V6]; xn--te28c.xn--isb286btrgo7w; ; ; # .߇ᡖႳⴇ
+xn--te28c.xn--isb286btrgo7w; 򩼗.\u07C7ᡖႳⴇ; [B2, B3, V6]; xn--te28c.xn--isb286btrgo7w; ; ; # .߇ᡖႳⴇ
+򩼗.\u07C7ᡖႳⴇ; 򩼗.\u07C7ᡖႳⴇ; [B2, B3, V6]; xn--te28c.xn--isb286btrgo7w; ; ; # .߇ᡖႳⴇ
+\u200Dô…‰.\u06B3\u0775; ; [B1, C2, V6]; xn--1ug39444n.xn--mkb20b; ; xn--3j78f.xn--mkb20b; [V6] # .ڳݵ
+xn--3j78f.xn--mkb20b; ô…‰.\u06B3\u0775; [V6]; xn--3j78f.xn--mkb20b; ; ; # .ڳݵ
+xn--1ug39444n.xn--mkb20b; \u200Dô…‰.\u06B3\u0775; [B1, C2, V6]; xn--1ug39444n.xn--mkb20b; ; ; # .ڳݵ
+𲤱⒛⾳.ꡦ⒈; 𲤱⒛音.ꡦ⒈; [V6]; xn--dth6033bzbvx.xn--tsh9439b; ; ; # ⒛音.ꡦ⒈
+𲤱20.音.ꡦ1.; ; [V6]; xn--20-9802c.xn--0w5a.xn--1-eg4e.; ; ; # 20.音.ꡦ1.
xn--20-9802c.xn--0w5a.xn--1-eg4e.; 𲤱20.音.ꡦ1.; [V6]; xn--20-9802c.xn--0w5a.xn--1-eg4e.; ; ; # 20.音.ꡦ1.
xn--dth6033bzbvx.xn--tsh9439b; 𲤱⒛音.ꡦ⒈; [V6]; xn--dth6033bzbvx.xn--tsh9439b; ; ; # ⒛音.ꡦ⒈
-ߜ8ñ³¦“-。òž²™ð‘¿ð©¥à§; ßœ8ñ³¦“-.òž²™ð‘¿ð©¥à§; [B2, B3, B5, B6, P1, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ; # ßœ8-.ð‘¿ð©¥à§
-ßœ8ñ³¦“-。òž²™ð‘¿ð©¥à§; ßœ8ñ³¦“-.òž²™ð‘¿ð©¥à§; [B2, B3, B5, B6, P1, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ; # ßœ8-.ð‘¿ð©¥à§
-xn--8--rve13079p.xn--b7b9842k42df776x; ßœ8ñ³¦“-.òž²™ð‘¿ð©¥à§; [B2, B3, B5, B6, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ; # ßœ8-.ð‘¿ð©¥à§
-Ⴕ。۰≮ß݅; Ⴕ.۰≮ß݅; [P1, V6]; xn--tnd.xn--zca912alh227g; ; xn--tnd.xn--ss-jbe65aw27i; # Ⴕ.۰≮ß݅
-Ⴕ。۰≮ß݅; Ⴕ.۰≮ß݅; [P1, V6]; xn--tnd.xn--zca912alh227g; ; xn--tnd.xn--ss-jbe65aw27i; # Ⴕ.۰≮ß݅
-ⴕ。۰≮ß݅; ⴕ.۰≮ß݅; [P1, V6]; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i; # ⴕ.۰≮ß݅
-ⴕ。۰≮ß݅; ⴕ.۰≮ß݅; [P1, V6]; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i; # ⴕ.۰≮ß݅
-Ⴕ。۰≮SS݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
-Ⴕ。۰≮SS݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
-ⴕ。۰≮ss݅; ⴕ.۰≮ss݅; [P1, V6]; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅
-ⴕ。۰≮ss݅; ⴕ.۰≮ss݅; [P1, V6]; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅
-Ⴕ。۰≮Ss݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
-Ⴕ。۰≮Ss݅; Ⴕ.۰≮ss݅; [P1, V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
-xn--tnd.xn--ss-jbe65aw27i; Ⴕ.۰≮ss݅; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
-xn--dlj.xn--ss-jbe65aw27i; ⴕ.۰≮ss݅; [V6]; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅
-xn--dlj.xn--zca912alh227g; ⴕ.۰≮ß݅; [V6]; xn--dlj.xn--zca912alh227g; ; ; # ⴕ.۰≮ß݅
-xn--tnd.xn--zca912alh227g; Ⴕ.۰≮ß݅; [V6]; xn--tnd.xn--zca912alh227g; ; ; # Ⴕ.۰≮ß݅
-ß©-.ð¨—꒱᭲; ; [B1, B3, V3, V5]; xn----odd.xn--dwf8994dc8wj; ; ; # ß©-.ð¨—꒱᭲
-xn----odd.xn--dwf8994dc8wj; ß©-.ð¨—꒱᭲; [B1, B3, V3, V5]; xn----odd.xn--dwf8994dc8wj; ; ; # ß©-.ð¨—꒱᭲
-𞼸‌.≯䕵⫧; ; [B1, B3, C1, P1, V6]; xn--0ugx453p.xn--hdh754ax6w; ; xn--sn7h.xn--hdh754ax6w; [B1, P1, V6] # .≯䕵⫧
-𞼸‌.≯䕵⫧; 𞼸‌.≯䕵⫧; [B1, B3, C1, P1, V6]; xn--0ugx453p.xn--hdh754ax6w; ; xn--sn7h.xn--hdh754ax6w; [B1, P1, V6] # .≯䕵⫧
+\u07DC8ñ³¦“-。òž²™ð‘¿ð©¥\u09CD; \u07DC8ñ³¦“-.òž²™ð‘¿ð©¥\u09CD; [B2, B3, B5, B6, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ; # ßœ8-.ð‘¿ð©¥à§
+\u07DC8ñ³¦“-。òž²™ð‘¿ð©¥\u09CD; \u07DC8ñ³¦“-.òž²™ð‘¿ð©¥\u09CD; [B2, B3, B5, B6, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ; # ßœ8-.ð‘¿ð©¥à§
+xn--8--rve13079p.xn--b7b9842k42df776x; \u07DC8ñ³¦“-.òž²™ð‘¿ð©¥\u09CD; [B2, B3, B5, B6, V3, V6]; xn--8--rve13079p.xn--b7b9842k42df776x; ; ; # ßœ8-.ð‘¿ð©¥à§
+Ⴕ。۰≮ß\u0745; Ⴕ.۰≮ß\u0745; [V6]; xn--tnd.xn--zca912alh227g; ; xn--tnd.xn--ss-jbe65aw27i; # Ⴕ.۰≮ß݅
+Ⴕ。۰<\u0338ß\u0745; Ⴕ.۰≮ß\u0745; [V6]; xn--tnd.xn--zca912alh227g; ; xn--tnd.xn--ss-jbe65aw27i; # Ⴕ.۰≮ß݅
+ⴕ。۰<\u0338ß\u0745; ⴕ.۰≮ß\u0745; ; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i; # ⴕ.۰≮ß݅
+ⴕ。۰≮ß\u0745; ⴕ.۰≮ß\u0745; ; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i; # ⴕ.۰≮ß݅
+Ⴕ。۰≮SS\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
+Ⴕ。۰<\u0338SS\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
+ⴕ。۰<\u0338ss\u0745; ⴕ.۰≮ss\u0745; ; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅
+ⴕ。۰≮ss\u0745; ⴕ.۰≮ss\u0745; ; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅
+Ⴕ。۰≮Ss\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
+Ⴕ。۰<\u0338Ss\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
+xn--tnd.xn--ss-jbe65aw27i; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
+xn--dlj.xn--ss-jbe65aw27i; ⴕ.۰≮ss\u0745; ; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅
+ⴕ.۰≮ss\u0745; ; ; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅
+ⴕ.۰<\u0338ss\u0745; ⴕ.۰≮ss\u0745; ; xn--dlj.xn--ss-jbe65aw27i; ; ; # ⴕ.۰≮ss݅
+Ⴕ.۰<\u0338SS\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
+Ⴕ.۰≮SS\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
+Ⴕ.۰≮Ss\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
+Ⴕ.۰<\u0338Ss\u0745; Ⴕ.۰≮ss\u0745; [V6]; xn--tnd.xn--ss-jbe65aw27i; ; ; # Ⴕ.۰≮ss݅
+xn--dlj.xn--zca912alh227g; ⴕ.۰≮ß\u0745; ; xn--dlj.xn--zca912alh227g; ; ; # ⴕ.۰≮ß݅
+ⴕ.۰≮ß\u0745; ; ; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i; # ⴕ.۰≮ß݅
+ⴕ.۰<\u0338ß\u0745; ⴕ.۰≮ß\u0745; ; xn--dlj.xn--zca912alh227g; ; xn--dlj.xn--ss-jbe65aw27i; # ⴕ.۰≮ß݅
+xn--tnd.xn--zca912alh227g; Ⴕ.۰≮ß\u0745; [V6]; xn--tnd.xn--zca912alh227g; ; ; # Ⴕ.۰≮ß݅
+\u07E9-.ð¨—ê’±\u1B72; ; [B1, B3, V3, V5]; xn----odd.xn--dwf8994dc8wj; ; ; # ß©-.ð¨—꒱᭲
+xn----odd.xn--dwf8994dc8wj; \u07E9-.ð¨—ê’±\u1B72; [B1, B3, V3, V5]; xn----odd.xn--dwf8994dc8wj; ; ; # ß©-.ð¨—꒱᭲
+𞼸\u200C.≯䕵⫧; ; [B1, B3, C1, V6]; xn--0ugx453p.xn--hdh754ax6w; ; xn--sn7h.xn--hdh754ax6w; [B1, V6] # .≯䕵⫧
+𞼸\u200C.>\u0338䕵⫧; 𞼸\u200C.≯䕵⫧; [B1, B3, C1, V6]; xn--0ugx453p.xn--hdh754ax6w; ; xn--sn7h.xn--hdh754ax6w; [B1, V6] # .≯䕵⫧
xn--sn7h.xn--hdh754ax6w; 𞼸.≯䕵⫧; [B1, V6]; xn--sn7h.xn--hdh754ax6w; ; ; # .≯䕵⫧
-xn--0ugx453p.xn--hdh754ax6w; 𞼸‌.≯䕵⫧; [B1, B3, C1, V6]; xn--0ugx453p.xn--hdh754ax6w; ; ; # .≯䕵⫧
-ð¨…ßﱗ.ڬ۳︒; ð¨…ßيخ.ڬ۳︒; [B1, B3, P1, V5, V6]; xn--zca23yncs877j.xn--fkb6lp314e; ; xn--ss-ytd5i7765l.xn--fkb6lp314e; # ð¨…ßيخ.ڬ۳︒
-ð¨…ßيخ.ڬ۳。; ð¨…ßيخ.Ú¬Û³.; [B1, V5]; xn--zca23yncs877j.xn--fkb6l.; ; xn--ss-ytd5i7765l.xn--fkb6l.; # ð¨…ßيخ.Ú¬Û³.
-ð¨…SSيخ.ڬ۳。; ð¨…ssيخ.Ú¬Û³.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # ð¨…ssيخ.Ú¬Û³.
-ð¨…ssيخ.ڬ۳。; ð¨…ssيخ.Ú¬Û³.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # ð¨…ssيخ.Ú¬Û³.
-ð¨…Ssيخ.ڬ۳。; ð¨…ssيخ.Ú¬Û³.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # ð¨…ssيخ.Ú¬Û³.
-xn--ss-ytd5i7765l.xn--fkb6l.; ð¨…ssيخ.Ú¬Û³.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # ð¨…ssيخ.Ú¬Û³.
-xn--zca23yncs877j.xn--fkb6l.; ð¨…ßيخ.Ú¬Û³.; [B1, V5]; xn--zca23yncs877j.xn--fkb6l.; ; ; # ð¨…ßيخ.Ú¬Û³.
-ð¨…SSï±—.ڬ۳︒; ð¨…ssيخ.ڬ۳︒; [B1, B3, P1, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # ð¨…ssيخ.ڬ۳︒
-ð¨…ssï±—.ڬ۳︒; ð¨…ssيخ.ڬ۳︒; [B1, B3, P1, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # ð¨…ssيخ.ڬ۳︒
-ð¨…Ssï±—.ڬ۳︒; ð¨…ssيخ.ڬ۳︒; [B1, B3, P1, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # ð¨…ssيخ.ڬ۳︒
-xn--ss-ytd5i7765l.xn--fkb6lp314e; ð¨…ssيخ.ڬ۳︒; [B1, B3, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # ð¨…ssيخ.ڬ۳︒
-xn--zca23yncs877j.xn--fkb6lp314e; ð¨…ßيخ.ڬ۳︒; [B1, B3, V5, V6]; xn--zca23yncs877j.xn--fkb6lp314e; ; ; # ð¨…ßيخ.ڬ۳︒
--≮🡒᳭.ñ¿¾á‚¡Ü”; ; [B1, P1, V3, V6]; xn----44l04zxt68c.xn--enb300c1597h; ; ; # -≮🡒᳭.á‚¡Ü”
--≮🡒᳭.ñ¿¾á‚¡Ü”; -≮🡒᳭.ñ¿¾á‚¡Ü”; [B1, P1, V3, V6]; xn----44l04zxt68c.xn--enb300c1597h; ; ; # -≮🡒᳭.á‚¡Ü”
--≮🡒᳭.ñ¿¾â´Ü”; -≮🡒᳭.ñ¿¾â´Ü”; [B1, P1, V3, V6]; xn----44l04zxt68c.xn--enb135qf106f; ; ; # -≮🡒᳭.â´Ü”
--≮🡒᳭.ñ¿¾â´Ü”; ; [B1, P1, V3, V6]; xn----44l04zxt68c.xn--enb135qf106f; ; ; # -≮🡒᳭.â´Ü”
-xn----44l04zxt68c.xn--enb135qf106f; -≮🡒᳭.ñ¿¾â´Ü”; [B1, V3, V6]; xn----44l04zxt68c.xn--enb135qf106f; ; ; # -≮🡒᳭.â´Ü”
-xn----44l04zxt68c.xn--enb300c1597h; -≮🡒᳭.ñ¿¾á‚¡Ü”; [B1, V3, V6]; xn----44l04zxt68c.xn--enb300c1597h; ; ; # -≮🡒᳭.á‚¡Ü”
-𞤨。ê¡â€â€Œ; 𞤨.ê¡â€â€Œ; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ê¡
-𞤨。ê¡â€â€Œ; 𞤨.ê¡â€â€Œ; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ê¡
-𞤆。ê¡â€â€Œ; 𞤨.ê¡â€â€Œ; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ê¡
+xn--0ugx453p.xn--hdh754ax6w; 𞼸\u200C.≯䕵⫧; [B1, B3, C1, V6]; xn--0ugx453p.xn--hdh754ax6w; ; ; # .≯䕵⫧
+ð¨…ß\uFC57.\u06AC۳︒; ð¨…ß\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--zca23yncs877j.xn--fkb6lp314e; ; xn--ss-ytd5i7765l.xn--fkb6lp314e; # ð¨…ßيخ.ڬ۳︒
+ð¨…ß\u064A\u062E.\u06AC۳。; ð¨…ß\u064A\u062E.\u06ACÛ³.; [B1, V5]; xn--zca23yncs877j.xn--fkb6l.; ; xn--ss-ytd5i7765l.xn--fkb6l.; # ð¨…ßيخ.Ú¬Û³.
+ð¨…SS\u064A\u062E.\u06AC۳。; ð¨…ss\u064A\u062E.\u06ACÛ³.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # ð¨…ssيخ.Ú¬Û³.
+ð¨…ss\u064A\u062E.\u06AC۳。; ð¨…ss\u064A\u062E.\u06ACÛ³.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # ð¨…ssيخ.Ú¬Û³.
+ð¨…Ss\u064A\u062E.\u06AC۳。; ð¨…ss\u064A\u062E.\u06ACÛ³.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # ð¨…ssيخ.Ú¬Û³.
+xn--ss-ytd5i7765l.xn--fkb6l.; ð¨…ss\u064A\u062E.\u06ACÛ³.; [B1, V5]; xn--ss-ytd5i7765l.xn--fkb6l.; ; ; # ð¨…ssيخ.Ú¬Û³.
+xn--zca23yncs877j.xn--fkb6l.; ð¨…ß\u064A\u062E.\u06ACÛ³.; [B1, V5]; xn--zca23yncs877j.xn--fkb6l.; ; ; # ð¨…ßيخ.Ú¬Û³.
+ð¨…SS\uFC57.\u06AC۳︒; ð¨…ss\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # ð¨…ssيخ.ڬ۳︒
+ð¨…ss\uFC57.\u06AC۳︒; ð¨…ss\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # ð¨…ssيخ.ڬ۳︒
+ð¨…Ss\uFC57.\u06AC۳︒; ð¨…ss\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # ð¨…ssيخ.ڬ۳︒
+xn--ss-ytd5i7765l.xn--fkb6lp314e; ð¨…ss\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--ss-ytd5i7765l.xn--fkb6lp314e; ; ; # ð¨…ssيخ.ڬ۳︒
+xn--zca23yncs877j.xn--fkb6lp314e; ð¨…ß\u064A\u062E.\u06AC۳︒; [B1, B3, V5, V6]; xn--zca23yncs877j.xn--fkb6lp314e; ; ; # ð¨…ßيخ.ڬ۳︒
+-≮🡒\u1CED.ñ¿¾á‚¡\u0714; ; [B1, V3, V6]; xn----44l04zxt68c.xn--enb300c1597h; ; ; # -≮🡒᳭.á‚¡Ü”
+-<\u0338🡒\u1CED.ñ¿¾á‚¡\u0714; -≮🡒\u1CED.ñ¿¾á‚¡\u0714; [B1, V3, V6]; xn----44l04zxt68c.xn--enb300c1597h; ; ; # -≮🡒᳭.á‚¡Ü”
+-<\u0338🡒\u1CED.ñ¿¾â´\u0714; -≮🡒\u1CED.ñ¿¾â´\u0714; [B1, V3, V6]; xn----44l04zxt68c.xn--enb135qf106f; ; ; # -≮🡒᳭.â´Ü”
+-≮🡒\u1CED.ñ¿¾â´\u0714; ; [B1, V3, V6]; xn----44l04zxt68c.xn--enb135qf106f; ; ; # -≮🡒᳭.â´Ü”
+xn----44l04zxt68c.xn--enb135qf106f; -≮🡒\u1CED.ñ¿¾â´\u0714; [B1, V3, V6]; xn----44l04zxt68c.xn--enb135qf106f; ; ; # -≮🡒᳭.â´Ü”
+xn----44l04zxt68c.xn--enb300c1597h; -≮🡒\u1CED.ñ¿¾á‚¡\u0714; [B1, V3, V6]; xn----44l04zxt68c.xn--enb300c1597h; ; ; # -≮🡒᳭.á‚¡Ü”
+𞤨。ê¡\u200D\u200C; 𞤨.ê¡\u200D\u200C; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ê¡
+𞤨。ê¡\u200D\u200C; 𞤨.ê¡\u200D\u200C; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ê¡
+𞤆。ê¡\u200D\u200C; 𞤨.ê¡\u200D\u200C; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ê¡
xn--ge6h.xn--oc9a; 𞤨.ê¡; ; xn--ge6h.xn--oc9a; ; ; # 𞤨.ê¡
𞤨.ê¡; ; ; xn--ge6h.xn--oc9a; ; ; # 𞤨.ê¡
𞤆.ê¡; 𞤨.ê¡; ; xn--ge6h.xn--oc9a; ; ; # 𞤨.ê¡
-xn--ge6h.xn--0ugb9575h; 𞤨.ê¡â€â€Œ; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; ; # 𞤨.ê¡
-𞤆。ê¡â€â€Œ; 𞤨.ê¡â€â€Œ; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ê¡
-󠅹𑂶.ᢌ𑂹٩; 𑂶.ᢌ𑂹٩; [B1, B3, B5, B6, V5]; xn--b50d.xn--iib993gyp5p; ; ; # 𑂶.ᢌ𑂹٩
-󠅹𑂶.ᢌ𑂹٩; 𑂶.ᢌ𑂹٩; [B1, B3, B5, B6, V5]; xn--b50d.xn--iib993gyp5p; ; ; # 𑂶.ᢌ𑂹٩
-xn--b50d.xn--iib993gyp5p; 𑂶.ᢌ𑂹٩; [B1, B3, B5, B6, V5]; xn--b50d.xn--iib993gyp5p; ; ; # 𑂶.ᢌ𑂹٩
-Ⅎ󠅺ñµ’。≯⾑; Ⅎñµ’.≯襾; [P1, V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾
-Ⅎ󠅺ñµ’。≯⾑; Ⅎñµ’.≯襾; [P1, V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾
-Ⅎ󠅺ñµ’。≯襾; Ⅎñµ’.≯襾; [P1, V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾
-Ⅎ󠅺ñµ’。≯襾; Ⅎñµ’.≯襾; [P1, V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾
-â…Žó …ºñµ’。≯襾; â…Žñµ’.≯襾; [P1, V6]; xn--73g39298c.xn--hdhz171b; ; ; # â…Ž.≯襾
-â…Žó …ºñµ’。≯襾; â…Žñµ’.≯襾; [P1, V6]; xn--73g39298c.xn--hdhz171b; ; ; # â…Ž.≯襾
+xn--ge6h.xn--0ugb9575h; 𞤨.ê¡\u200D\u200C; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; ; # 𞤨.ê¡
+𞤆。ê¡\u200D\u200C; 𞤨.ê¡\u200D\u200C; [B6, C1, C2]; xn--ge6h.xn--0ugb9575h; ; xn--ge6h.xn--oc9a; [] # 𞤨.ê¡
+󠅹𑂶.ᢌ𑂹\u0669; 𑂶.ᢌ𑂹\u0669; [B1, B5, B6, V5]; xn--b50d.xn--iib993gyp5p; ; ; # 𑂶.ᢌ𑂹٩
+󠅹𑂶.ᢌ𑂹\u0669; 𑂶.ᢌ𑂹\u0669; [B1, B5, B6, V5]; xn--b50d.xn--iib993gyp5p; ; ; # 𑂶.ᢌ𑂹٩
+xn--b50d.xn--iib993gyp5p; 𑂶.ᢌ𑂹\u0669; [B1, B5, B6, V5]; xn--b50d.xn--iib993gyp5p; ; ; # 𑂶.ᢌ𑂹٩
+Ⅎ󠅺ñµ’。≯⾑; Ⅎñµ’.≯襾; [V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾
+Ⅎ󠅺ñµ’。>\u0338⾑; Ⅎñµ’.≯襾; [V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾
+Ⅎ󠅺ñµ’。≯襾; Ⅎñµ’.≯襾; [V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾
+Ⅎ󠅺ñµ’。>\u0338襾; Ⅎñµ’.≯襾; [V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾
+â…Žó …ºñµ’。>\u0338襾; â…Žñµ’.≯襾; [V6]; xn--73g39298c.xn--hdhz171b; ; ; # â…Ž.≯襾
+â…Žó …ºñµ’。≯襾; â…Žñµ’.≯襾; [V6]; xn--73g39298c.xn--hdhz171b; ; ; # â…Ž.≯襾
xn--73g39298c.xn--hdhz171b; â…Žñµ’.≯襾; [V6]; xn--73g39298c.xn--hdhz171b; ; ; # â…Ž.≯襾
xn--f3g73398c.xn--hdhz171b; Ⅎñµ’.≯襾; [V6]; xn--f3g73398c.xn--hdhz171b; ; ; # Ⅎ.≯襾
-â…Žó …ºñµ’。≯⾑; â…Žñµ’.≯襾; [P1, V6]; xn--73g39298c.xn--hdhz171b; ; ; # â…Ž.≯襾
-â…Žó …ºñµ’。≯⾑; â…Žñµ’.≯襾; [P1, V6]; xn--73g39298c.xn--hdhz171b; ; ; # â…Ž.≯襾
-Ï‚â€à·”٠。-; Ï‚â€à·”Ù .-; [B1, B5, B6, C2, V3]; xn--3xa45ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # Ï‚à·”Ù .-
-Ï‚â€à·”٠。-; Ï‚â€à·”Ù .-; [B1, B5, B6, C2, V3]; xn--3xa45ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # Ï‚à·”Ù .-
-Σâ€à·”٠。-; σâ€à·”Ù .-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.-
-σâ€à·”٠。-; σâ€à·”Ù .-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.-
-xn--4xa25ks2j.-; σු٠.-; [B1, B5, B6, V3]; xn--4xa25ks2j.-; ; ; # σු٠.-
-xn--4xa25ks2jenu.-; σâ€à·”Ù .-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; ; # σු٠.-
-xn--3xa45ks2jenu.-; Ï‚â€à·”Ù .-; [B1, B5, B6, C2, V3]; xn--3xa45ks2jenu.-; ; ; # Ï‚à·”Ù .-
-Σâ€à·”٠。-; σâ€à·”Ù .-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.-
-σâ€à·”٠。-; σâ€à·”Ù .-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.-
-‌.ßႩ-; ; [C1, P1, V3, V6]; xn--0ug.xn----pfa042j; ; .xn--ss--4rn; [P1, V3, V6, A4_2] # .ßႩ-
-‌.ßⴉ-; ; [C1, V3]; xn--0ug.xn----pfa2305a; ; .xn--ss--bi1b; [V3, A4_2] # .ßⴉ-
-‌.SSႩ-; ‌.ssႩ-; [C1, P1, V3, V6]; xn--0ug.xn--ss--4rn; ; .xn--ss--4rn; [P1, V3, V6, A4_2] # .ssႩ-
-‌.ssⴉ-; ; [C1, V3]; xn--0ug.xn--ss--bi1b; ; .xn--ss--bi1b; [V3, A4_2] # .ssⴉ-
-‌.Ssⴉ-; ‌.ssⴉ-; [C1, V3]; xn--0ug.xn--ss--bi1b; ; .xn--ss--bi1b; [V3, A4_2] # .ssⴉ-
+â…Žó …ºñµ’。>\u0338⾑; â…Žñµ’.≯襾; [V6]; xn--73g39298c.xn--hdhz171b; ; ; # â…Ž.≯襾
+â…Žó …ºñµ’。≯⾑; â…Žñµ’.≯襾; [V6]; xn--73g39298c.xn--hdhz171b; ; ; # â…Ž.≯襾
+ς\u200D\u0DD4\u0660。-; ς\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--3xa45ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # ςු٠.-
+ς\u200D\u0DD4\u0660。-; ς\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--3xa45ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # ςු٠.-
+Σ\u200D\u0DD4\u0660。-; σ\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.-
+σ\u200D\u0DD4\u0660。-; σ\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.-
+xn--4xa25ks2j.-; σ\u0DD4\u0660.-; [B1, B5, B6, V3]; xn--4xa25ks2j.-; ; ; # σු٠.-
+xn--4xa25ks2jenu.-; σ\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; ; # σු٠.-
+xn--3xa45ks2jenu.-; Ï‚\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--3xa45ks2jenu.-; ; ; # Ï‚à·”Ù .-
+Σ\u200D\u0DD4\u0660。-; σ\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.-
+σ\u200D\u0DD4\u0660。-; σ\u200D\u0DD4\u0660.-; [B1, B5, B6, C2, V3]; xn--4xa25ks2jenu.-; ; xn--4xa25ks2j.-; [B1, B5, B6, V3] # σු٠.-
+\u200C.ßႩ-; ; [C1, V3, V6]; xn--0ug.xn----pfa042j; ; .xn--ss--4rn; [V3, V6, A4_2] # .ßႩ-
+\u200C.ßⴉ-; ; [C1, V3]; xn--0ug.xn----pfa2305a; ; .xn--ss--bi1b; [V3, A4_2] # .ßⴉ-
+\u200C.SSá‚©-; \u200C.ssá‚©-; [C1, V3, V6]; xn--0ug.xn--ss--4rn; ; .xn--ss--4rn; [V3, V6, A4_2] # .ssá‚©-
+\u200C.ssâ´‰-; ; [C1, V3]; xn--0ug.xn--ss--bi1b; ; .xn--ss--bi1b; [V3, A4_2] # .ssâ´‰-
+\u200C.Ssâ´‰-; \u200C.ssâ´‰-; [C1, V3]; xn--0ug.xn--ss--bi1b; ; .xn--ss--bi1b; [V3, A4_2] # .ssâ´‰-
.xn--ss--bi1b; .ssâ´‰-; [V3, X4_2]; .xn--ss--bi1b; [V3, A4_2]; ; # .ssâ´‰-
-xn--0ug.xn--ss--bi1b; ‌.ssⴉ-; [C1, V3]; xn--0ug.xn--ss--bi1b; ; ; # .ssⴉ-
+xn--0ug.xn--ss--bi1b; \u200C.ssâ´‰-; [C1, V3]; xn--0ug.xn--ss--bi1b; ; ; # .ssâ´‰-
.xn--ss--4rn; .ssá‚©-; [V3, V6, X4_2]; .xn--ss--4rn; [V3, V6, A4_2]; ; # .ssá‚©-
-xn--0ug.xn--ss--4rn; ‌.ssႩ-; [C1, V3, V6]; xn--0ug.xn--ss--4rn; ; ; # .ssႩ-
-xn--0ug.xn----pfa2305a; ‌.ßⴉ-; [C1, V3]; xn--0ug.xn----pfa2305a; ; ; # .ßⴉ-
-xn--0ug.xn----pfa042j; ‌.ßႩ-; [C1, V3, V6]; xn--0ug.xn----pfa042j; ; ; # .ßႩ-
-ó­²ð«ã“±ã€‚⾑; ó­²ð«ã“±.襾; [B5, P1, V6]; xn--u7kt691dlj09f.xn--9v2a; ; ; # ð«ã“±.襾
-ó­²ð«ã“±ã€‚襾; ó­²ð«ã“±.襾; [B5, P1, V6]; xn--u7kt691dlj09f.xn--9v2a; ; ; # ð«ã“±.襾
+xn--0ug.xn--ss--4rn; \u200C.ssá‚©-; [C1, V3, V6]; xn--0ug.xn--ss--4rn; ; ; # .ssá‚©-
+xn--0ug.xn----pfa2305a; \u200C.ßⴉ-; [C1, V3]; xn--0ug.xn----pfa2305a; ; ; # .ßⴉ-
+xn--0ug.xn----pfa042j; \u200C.ßႩ-; [C1, V3, V6]; xn--0ug.xn----pfa042j; ; ; # .ßႩ-
+ó­²ð«ã“±ã€‚⾑; ó­²ð«ã“±.襾; [B5, V6]; xn--u7kt691dlj09f.xn--9v2a; ; ; # ð«ã“±.襾
+ó­²ð«ã“±ã€‚襾; ó­²ð«ã“±.襾; [B5, V6]; xn--u7kt691dlj09f.xn--9v2a; ; ; # ð«ã“±.襾
xn--u7kt691dlj09f.xn--9v2a; ó­²ð«ã“±.襾; [B5, V6]; xn--u7kt691dlj09f.xn--9v2a; ; ; # ð«ã“±.襾
-Ú ð®‹ð¹°â‰®ã€‚≯󠦗â€; Ú ð®‹ð¹°â‰®.≯󠦗â€; [B1, B3, C2, P1, V6]; xn--2jb053lf13nyoc.xn--1ugx6gc8096c; ; xn--2jb053lf13nyoc.xn--hdh08821l; [B1, B3, P1, V6] # Ú ð®‹ð¹°â‰®.≯
-Ú ð®‹ð¹°≮。≯󠦗â€; Ú ð®‹ð¹°â‰®.≯󠦗â€; [B1, B3, C2, P1, V6]; xn--2jb053lf13nyoc.xn--1ugx6gc8096c; ; xn--2jb053lf13nyoc.xn--hdh08821l; [B1, B3, P1, V6] # Ú ð®‹ð¹°â‰®.≯
-xn--2jb053lf13nyoc.xn--hdh08821l; Ú ð®‹ð¹°â‰®.≯󠦗; [B1, B3, V6]; xn--2jb053lf13nyoc.xn--hdh08821l; ; ; # Ú ð®‹ð¹°â‰®.≯
-xn--2jb053lf13nyoc.xn--1ugx6gc8096c; Ú ð®‹ð¹°â‰®.≯󠦗â€; [B1, B3, C2, V6]; xn--2jb053lf13nyoc.xn--1ugx6gc8096c; ; ; # Ú ð®‹ð¹°â‰®.≯
-ðŸžï½¡ñƒ°¶Ý·à¢°â©‹; 6.ñƒ°¶Ý·à¢°â©‹; [B1, B5, B6, P1, V6]; 6.xn--7pb04do15eq748f; ; ; # 6.ݷࢰ⩋
-6。񃰶ݷࢰ⩋; 6.񃰶ݷࢰ⩋; [B1, B5, B6, P1, V6]; 6.xn--7pb04do15eq748f; ; ; # 6.ݷࢰ⩋
-6.xn--7pb04do15eq748f; 6.񃰶ݷࢰ⩋; [B1, B5, B6, V6]; 6.xn--7pb04do15eq748f; ; ; # 6.ݷࢰ⩋
--ﳽ。ð‘´ð‘‡€; -شى.𑇀ð‘´; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀ð‘´
--ﳽ。𑇀ð‘´; -شى.𑇀ð‘´; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀ð‘´
--شى。𑇀ð‘´; -شى.𑇀ð‘´; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀ð‘´
-xn----qnc7d.xn--wd1d62a; -شى.𑇀ð‘´; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀ð‘´
-‌󠊶ðŸ.ൃòª¥ð¹¬óŠ“¶; ‌󠊶1.ൃòª¥ð¹¬óŠ“¶; [B1, C1, P1, V5, V6]; xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; ; xn--1-f521m.xn--mxc0872kcu37dnmem; [B1, P1, V5, V6] # 1.ൃð¹¬
-‌󠊶1.ൃòª¥ð¹¬óŠ“¶; ; [B1, C1, P1, V5, V6]; xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; ; xn--1-f521m.xn--mxc0872kcu37dnmem; [B1, P1, V5, V6] # 1.ൃð¹¬
-xn--1-f521m.xn--mxc0872kcu37dnmem; 󠊶1.ൃòª¥ð¹¬óŠ“¶; [B1, V5, V6]; xn--1-f521m.xn--mxc0872kcu37dnmem; ; ; # 1.ൃð¹¬
-xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; ‌󠊶1.ൃòª¥ð¹¬óŠ“¶; [B1, C1, V5, V6]; xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; ; ; # 1.ൃð¹¬
+\u06A0ð®‹ð¹°â‰®ã€‚≯󠦗\u200D; \u06A0ð®‹ð¹°â‰®.≯󠦗\u200D; [B1, B3, C2, V6]; xn--2jb053lf13nyoc.xn--1ugx6gc8096c; ; xn--2jb053lf13nyoc.xn--hdh08821l; [B1, B3, V6] # Ú ð®‹ð¹°â‰®.≯
+\u06A0ð®‹ð¹°<\u0338。>\u0338ó ¦—\u200D; \u06A0ð®‹ð¹°â‰®.≯󠦗\u200D; [B1, B3, C2, V6]; xn--2jb053lf13nyoc.xn--1ugx6gc8096c; ; xn--2jb053lf13nyoc.xn--hdh08821l; [B1, B3, V6] # Ú ð®‹ð¹°â‰®.≯
+xn--2jb053lf13nyoc.xn--hdh08821l; \u06A0ð®‹ð¹°â‰®.≯󠦗; [B1, B3, V6]; xn--2jb053lf13nyoc.xn--hdh08821l; ; ; # Ú ð®‹ð¹°â‰®.≯
+xn--2jb053lf13nyoc.xn--1ugx6gc8096c; \u06A0ð®‹ð¹°â‰®.≯󠦗\u200D; [B1, B3, C2, V6]; xn--2jb053lf13nyoc.xn--1ugx6gc8096c; ; ; # Ú ð®‹ð¹°â‰®.≯
+ðŸžï½¡ñƒ°¶\u0777\u08B0â©‹; 6.ñƒ°¶\u0777\u08B0â©‹; [B1, B5, B6, V6]; 6.xn--7pb04do15eq748f; ; ; # 6.ݷࢰ⩋
+6。񃰶\u0777\u08B0⩋; 6.񃰶\u0777\u08B0⩋; [B1, B5, B6, V6]; 6.xn--7pb04do15eq748f; ; ; # 6.ݷࢰ⩋
+6.xn--7pb04do15eq748f; 6.񃰶\u0777\u08B0⩋; [B1, B5, B6, V6]; 6.xn--7pb04do15eq748f; ; ; # 6.ݷࢰ⩋
+-\uFCFD。ð‘´ð‘‡€; -\u0634\u0649.𑇀ð‘´; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀ð‘´
+-\uFCFD。𑇀ð‘´; -\u0634\u0649.𑇀ð‘´; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀ð‘´
+-\u0634\u0649。𑇀ð‘´; -\u0634\u0649.𑇀ð‘´; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀ð‘´
+xn----qnc7d.xn--wd1d62a; -\u0634\u0649.𑇀ð‘´; [B1, V3, V5]; xn----qnc7d.xn--wd1d62a; ; ; # -شى.𑇀ð‘´
+\u200C󠊶ðŸ.\u0D43òª¥ð¹¬óŠ“¶; \u200C󠊶1.\u0D43òª¥ð¹¬óŠ“¶; [B1, C1, V5, V6]; xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; ; xn--1-f521m.xn--mxc0872kcu37dnmem; [B1, V5, V6] # 1.ൃð¹¬
+\u200C󠊶1.\u0D43òª¥ð¹¬óŠ“¶; ; [B1, C1, V5, V6]; xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; ; xn--1-f521m.xn--mxc0872kcu37dnmem; [B1, V5, V6] # 1.ൃð¹¬
+xn--1-f521m.xn--mxc0872kcu37dnmem; 󠊶1.\u0D43òª¥ð¹¬óŠ“¶; [B1, V5, V6]; xn--1-f521m.xn--mxc0872kcu37dnmem; ; ; # 1.ൃð¹¬
+xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; \u200C󠊶1.\u0D43òª¥ð¹¬óŠ“¶; [B1, C1, V5, V6]; xn--1-rgnu0071n.xn--mxc0872kcu37dnmem; ; ; # 1.ൃð¹¬
é½™--ðŸ°.ß; é½™--4.ß; ; xn----4-p16k.xn--zca; ; xn----4-p16k.ss; # é½™--4.ß
齙--4.ß; ; ; xn----4-p16k.xn--zca; ; xn----4-p16k.ss; # 齙--4.ß
é½™--4.SS; é½™--4.ss; ; xn----4-p16k.ss; ; ; # é½™--4.ss
@@ -4214,2131 +4240,2135 @@ xn----4-p16k.xn--zca; 齙--4.ß; ; xn----4-p16k.xn--zca; ; ; # 齙--4.ß
é½™--ðŸ°.SS; é½™--4.ss; ; xn----4-p16k.ss; ; ; # é½™--4.ss
é½™--ðŸ°.ss; é½™--4.ss; ; xn----4-p16k.ss; ; ; # é½™--4.ss
é½™--ðŸ°.Ss; é½™--4.ss; ; xn----4-p16k.ss; ; ; # é½™--4.ss
-᯲.ð¹¢ðž€–‌; ; [B1, C1, V5]; xn--0zf.xn--0ug9894grqqf; ; xn--0zf.xn--9n0d2296a; [B1, V5] # ᯲.ð¹¢ðž€–
-xn--0zf.xn--9n0d2296a; ᯲.ð¹¢ðž€–; [B1, V5]; xn--0zf.xn--9n0d2296a; ; ; # ᯲.ð¹¢ðž€–
-xn--0zf.xn--0ug9894grqqf; ᯲.ð¹¢ðž€–‌; [B1, C1, V5]; xn--0zf.xn--0ug9894grqqf; ; ; # ᯲.ð¹¢ðž€–
-󃲙󠋘。?-â€; 󃲙󠋘.?-â€; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [P1, V3, V6] # .?-
-󃲙󠋘。?-â€; 󃲙󠋘.?-â€; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [P1, V3, V6] # .?-
-xn--ct86d8w51a.?-; 󃲙󠋘.?-; [P1, V3, V6]; xn--ct86d8w51a.?-; ; ; # .?-
-xn--ct86d8w51a.xn--?--n1t; 󃲙󠋘.?-â€; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; ; # .?-
-xn--ct86d8w51a.?-â€; 󃲙󠋘.?-â€; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [P1, V3, V6] # .?-
-XN--CT86D8W51A.?-â€; 󃲙󠋘.?-â€; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [P1, V3, V6] # .?-
-Xn--Ct86d8w51a.?-â€; 󃲙󠋘.?-â€; [C2, P1, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [P1, V3, V6] # .?-
-᩠.𞵷-ðª©æ‚Ž; á© .ðžµ·-ðª©æ‚Ž; [B1, B2, B3, B6, P1, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # á© .-ðª©æ‚Ž
-á© .ðžµ·-ðª©æ‚Ž; ; [B1, B2, B3, B6, P1, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # á© .-ðª©æ‚Ž
-xn--jof.xn----gf4bq282iezpa; á© .ðžµ·-ðª©æ‚Ž; [B1, B2, B3, B6, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # á© .-ðª©æ‚Ž
-𛜯󠊛.𞤳ñ¥¾; 𛜯󠊛.𞤳ñ¥¾; [B2, B3, B6, P1, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳
-𛜯󠊛.𞤳ñ¥¾; ; [B2, B3, B6, P1, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳
-𛜯󠊛.𞤑ñ¥¾; 𛜯󠊛.𞤳ñ¥¾; [B2, B3, B6, P1, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳
+\u1BF2.ð¹¢ðž€–\u200C; ; [B1, C1, V5]; xn--0zf.xn--0ug9894grqqf; ; xn--0zf.xn--9n0d2296a; [B1, V5] # ᯲.ð¹¢ðž€–
+xn--0zf.xn--9n0d2296a; \u1BF2.ð¹¢ðž€–; [B1, V5]; xn--0zf.xn--9n0d2296a; ; ; # ᯲.ð¹¢ðž€–
+xn--0zf.xn--0ug9894grqqf; \u1BF2.ð¹¢ðž€–\u200C; [B1, C1, V5]; xn--0zf.xn--0ug9894grqqf; ; ; # ᯲.ð¹¢ðž€–
+󃲙󠋘。?-\u200D; 󃲙󠋘.?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [V3, V6] # .?-
+󃲙󠋘。?-\u200D; 󃲙󠋘.?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [V3, V6] # .?-
+xn--ct86d8w51a.?-; 󃲙󠋘.?-; [V3, V6]; xn--ct86d8w51a.?-; ; ; # .?-
+xn--ct86d8w51a.xn--?--n1t; 󃲙󠋘.?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; ; # .?-
+xn--ct86d8w51a.?-\u200D; 󃲙󠋘.?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [V3, V6] # .?-
+XN--CT86D8W51A.?-\u200D; 󃲙󠋘.?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [V3, V6] # .?-
+Xn--Ct86d8w51a.?-\u200D; 󃲙󠋘.?-\u200D; [C2, V6]; xn--ct86d8w51a.xn--?--n1t; ; xn--ct86d8w51a.?-; [V3, V6] # .?-
+\u1A60.𞵷-ðª©æ‚Ž; \u1A60.ðžµ·-ðª©æ‚Ž; [B1, B2, B3, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # á© .-ðª©æ‚Ž
+\u1A60.ðžµ·-ðª©æ‚Ž; ; [B1, B2, B3, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # á© .-ðª©æ‚Ž
+xn--jof.xn----gf4bq282iezpa; \u1A60.ðžµ·-ðª©æ‚Ž; [B1, B2, B3, V5, V6]; xn--jof.xn----gf4bq282iezpa; ; ; # á© .-ðª©æ‚Ž
+𛜯󠊛.𞤳ñ¥¾; 𛜯󠊛.𞤳ñ¥¾; [B2, B3, B6, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳
+𛜯󠊛.𞤳ñ¥¾; ; [B2, B3, B6, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳
+𛜯󠊛.𞤑ñ¥¾; 𛜯󠊛.𞤳ñ¥¾; [B2, B3, B6, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳
xn--xx5gy2741c.xn--re6hw266j; 𛜯󠊛.𞤳ñ¥¾; [B2, B3, B6, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳
-𛜯󠊛.𞤑ñ¥¾; 𛜯󠊛.𞤳ñ¥¾; [B2, B3, B6, P1, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳
-Üœð«’Ø®.ð‹²; ; [B1]; xn--tgb98b8643d.xn--m97c; ; ; # Üœð«’Ø®.ð‹²
-xn--tgb98b8643d.xn--m97c; Üœð«’Ø®.ð‹²; [B1]; xn--tgb98b8643d.xn--m97c; ; ; # Üœð«’Ø®.ð‹²
-ð¼‘𞤓ط࣢.?; ð¼‘𞤵ط࣢.?; [B1, P1, V6]; xn--2gb08k9w69agm0g.?; ; ; # ð¼‘𞤵ط.?
-ð¼‘𞤵ط࣢.?; ; [B1, P1, V6]; xn--2gb08k9w69agm0g.?; ; ; # ð¼‘𞤵ط.?
-xn--2gb08k9w69agm0g.?; ð¼‘𞤵ط࣢.?; [B1, P1, V6]; xn--2gb08k9w69agm0g.?; ; ; # ð¼‘𞤵ط.?
-Ↄ。à©á³”ðž·£; Ↄ.á³”à©ðž·£; [B1, P1, V5, V6]; xn--q5g.xn--ybc995g0835a; ; ; # Ↄ.á³”à©
-Ↄ。᳔à©ðž·£; Ↄ.á³”à©ðž·£; [B1, P1, V5, V6]; xn--q5g.xn--ybc995g0835a; ; ; # Ↄ.á³”à©
-ↄ。᳔à©ðž·£; ↄ.á³”à©ðž·£; [B1, P1, V5, V6]; xn--r5g.xn--ybc995g0835a; ; ; # ↄ.á³”à©
-xn--r5g.xn--ybc995g0835a; ↄ.á³”à©ðž·£; [B1, V5, V6]; xn--r5g.xn--ybc995g0835a; ; ; # ↄ.á³”à©
-xn--q5g.xn--ybc995g0835a; Ↄ.á³”à©ðž·£; [B1, V5, V6]; xn--q5g.xn--ybc995g0835a; ; ; # Ↄ.á³”à©
-ↄ。à©á³”ðž·£; ↄ.á³”à©ðž·£; [B1, P1, V5, V6]; xn--r5g.xn--ybc995g0835a; ; ; # ↄ.á³”à©
-󠪢-。ò›‚≮𑜫; 󠪢-.ò›‚≮𑜫; [P1, V3, V6]; xn----bh61m.xn--gdhz157g0em1d; ; ; # -.≮𑜫
-󠪢-。ò›‚≮𑜫; 󠪢-.ò›‚≮𑜫; [P1, V3, V6]; xn----bh61m.xn--gdhz157g0em1d; ; ; # -.≮𑜫
+𛜯󠊛.𞤑ñ¥¾; 𛜯󠊛.𞤳ñ¥¾; [B2, B3, B6, V6]; xn--xx5gy2741c.xn--re6hw266j; ; ; # .𞤳
+\u071Cð«’\u062E.ð‹²; ; [B1]; xn--tgb98b8643d.xn--m97c; ; ; # Üœð«’Ø®.ð‹²
+xn--tgb98b8643d.xn--m97c; \u071Cð«’\u062E.ð‹²; [B1]; xn--tgb98b8643d.xn--m97c; ; ; # Üœð«’Ø®.ð‹²
+ð¼‘𞤓\u0637\u08E2.?; ð¼‘𞤵\u0637\u08E2.?; [B1, V6]; xn--2gb08k9w69agm0g.?; ; ; # ð¼‘𞤵ط.?
+ð¼‘𞤵\u0637\u08E2.?; ; [B1, V6]; xn--2gb08k9w69agm0g.?; ; ; # ð¼‘𞤵ط.?
+xn--2gb08k9w69agm0g.?; ð¼‘𞤵\u0637\u08E2.?; [B1, V6]; xn--2gb08k9w69agm0g.?; ; ; # ð¼‘𞤵ط.?
+Ↄ。\u0A4D\u1CD4ðž·£; Ↄ.\u1CD4\u0A4Dðž·£; [B1, V5, V6]; xn--q5g.xn--ybc995g0835a; ; ; # Ↄ.á³”à©
+Ↄ。\u1CD4\u0A4Dðž·£; Ↄ.\u1CD4\u0A4Dðž·£; [B1, V5, V6]; xn--q5g.xn--ybc995g0835a; ; ; # Ↄ.á³”à©
+ↄ。\u1CD4\u0A4Dðž·£; ↄ.\u1CD4\u0A4Dðž·£; [B1, V5, V6]; xn--r5g.xn--ybc995g0835a; ; ; # ↄ.á³”à©
+xn--r5g.xn--ybc995g0835a; ↄ.\u1CD4\u0A4Dðž·£; [B1, V5, V6]; xn--r5g.xn--ybc995g0835a; ; ; # ↄ.á³”à©
+xn--q5g.xn--ybc995g0835a; Ↄ.\u1CD4\u0A4Dðž·£; [B1, V5, V6]; xn--q5g.xn--ybc995g0835a; ; ; # Ↄ.á³”à©
+ↄ。\u0A4D\u1CD4ðž·£; ↄ.\u1CD4\u0A4Dðž·£; [B1, V5, V6]; xn--r5g.xn--ybc995g0835a; ; ; # ↄ.á³”à©
+󠪢-。ò›‚≮𑜫; 󠪢-.ò›‚≮𑜫; [V3, V6]; xn----bh61m.xn--gdhz157g0em1d; ; ; # -.≮𑜫
+󠪢-。ò›‚<\u0338𑜫; 󠪢-.ò›‚≮𑜫; [V3, V6]; xn----bh61m.xn--gdhz157g0em1d; ; ; # -.≮𑜫
xn----bh61m.xn--gdhz157g0em1d; 󠪢-.ò›‚≮𑜫; [V3, V6]; xn----bh61m.xn--gdhz157g0em1d; ; ; # -.≮𑜫
-‌󠉹â€ã€‚òŒ¿§â‰®á‚©; ‌󠉹â€.òŒ¿§â‰®á‚©; [C1, C2, P1, V6]; xn--0ugc90904y.xn--hnd112gpz83n; ; xn--3n36e.xn--hnd112gpz83n; [P1, V6] # .≮Ⴉ
-‌󠉹â€ã€‚òŒ¿§≮Ⴉ; ‌󠉹â€.òŒ¿§â‰®á‚©; [C1, C2, P1, V6]; xn--0ugc90904y.xn--hnd112gpz83n; ; xn--3n36e.xn--hnd112gpz83n; [P1, V6] # .≮Ⴉ
-‌󠉹â€ã€‚òŒ¿§≮ⴉ; ‌󠉹â€.òŒ¿§â‰®â´‰; [C1, C2, P1, V6]; xn--0ugc90904y.xn--gdh992byu01p; ; xn--3n36e.xn--gdh992byu01p; [P1, V6] # .≮ⴉ
-‌󠉹â€ã€‚òŒ¿§â‰®â´‰; ‌󠉹â€.òŒ¿§â‰®â´‰; [C1, C2, P1, V6]; xn--0ugc90904y.xn--gdh992byu01p; ; xn--3n36e.xn--gdh992byu01p; [P1, V6] # .≮ⴉ
+\u200C󠉹\u200D。򌿧≮Ⴉ; \u200C󠉹\u200D.򌿧≮Ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--hnd112gpz83n; ; xn--3n36e.xn--hnd112gpz83n; [V6] # .≮Ⴉ
+\u200C󠉹\u200D。򌿧<\u0338Ⴉ; \u200C󠉹\u200D.򌿧≮Ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--hnd112gpz83n; ; xn--3n36e.xn--hnd112gpz83n; [V6] # .≮Ⴉ
+\u200C󠉹\u200D。򌿧<\u0338ⴉ; \u200C󠉹\u200D.򌿧≮ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--gdh992byu01p; ; xn--3n36e.xn--gdh992byu01p; [V6] # .≮ⴉ
+\u200C󠉹\u200D。򌿧≮ⴉ; \u200C󠉹\u200D.򌿧≮ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--gdh992byu01p; ; xn--3n36e.xn--gdh992byu01p; [V6] # .≮ⴉ
xn--3n36e.xn--gdh992byu01p; 󠉹.򌿧≮ⴉ; [V6]; xn--3n36e.xn--gdh992byu01p; ; ; # .≮ⴉ
-xn--0ugc90904y.xn--gdh992byu01p; ‌󠉹â€.òŒ¿§â‰®â´‰; [C1, C2, V6]; xn--0ugc90904y.xn--gdh992byu01p; ; ; # .≮ⴉ
+xn--0ugc90904y.xn--gdh992byu01p; \u200C󠉹\u200D.򌿧≮ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--gdh992byu01p; ; ; # .≮ⴉ
xn--3n36e.xn--hnd112gpz83n; 󠉹.򌿧≮Ⴉ; [V6]; xn--3n36e.xn--hnd112gpz83n; ; ; # .≮Ⴉ
-xn--0ugc90904y.xn--hnd112gpz83n; ‌󠉹â€.òŒ¿§â‰®á‚©; [C1, C2, V6]; xn--0ugc90904y.xn--hnd112gpz83n; ; ; # .≮Ⴉ
-ð¹¯-𑄴ࢼ。︒ä–⾆; ð¹¯-𑄴ࢼ.︒ä–舌; [B1, P1, V6]; xn----rpd7902rclc.xn--fpo216mn07e; ; ; # ð¹¯-𑄴ࢼ.︒ä–舌
-ð¹¯-𑄴ࢼ。。ä–舌; ð¹¯-𑄴ࢼ..ä–舌; [B1, X4_2]; xn----rpd7902rclc..xn--fpo216m; [B1, A4_2]; ; # ð¹¯-𑄴ࢼ..ä–舌
-xn----rpd7902rclc..xn--fpo216m; ð¹¯-𑄴ࢼ..ä–舌; [B1, X4_2]; xn----rpd7902rclc..xn--fpo216m; [B1, A4_2]; ; # ð¹¯-𑄴ࢼ..ä–舌
-xn----rpd7902rclc.xn--fpo216mn07e; ð¹¯-𑄴ࢼ.︒ä–舌; [B1, V6]; xn----rpd7902rclc.xn--fpo216mn07e; ; ; # ð¹¯-𑄴ࢼ.︒ä–舌
-ðªžá‚°ï½¡ìª¡; ðªžá‚°.쪡; [P1, V5, V6]; xn--ond3755u.xn--pi6b; ; ; # ðªžá‚°.쪡
-ðªžá‚°ï½¡á„ᅨᆨ; ðªžá‚°.쪡; [P1, V5, V6]; xn--ond3755u.xn--pi6b; ; ; # ðªžá‚°.쪡
-ðªžá‚°ã€‚쪡; ðªžá‚°.쪡; [P1, V5, V6]; xn--ond3755u.xn--pi6b; ; ; # ðªžá‚°.쪡
-ðªžá‚°ã€‚á„ᅨᆨ; ðªžá‚°.쪡; [P1, V5, V6]; xn--ond3755u.xn--pi6b; ; ; # ðªžá‚°.쪡
+xn--0ugc90904y.xn--hnd112gpz83n; \u200C󠉹\u200D.򌿧≮Ⴉ; [C1, C2, V6]; xn--0ugc90904y.xn--hnd112gpz83n; ; ; # .≮Ⴉ
+ð¹¯-ð‘„´\u08BC。︒ä–⾆; ð¹¯-ð‘„´\u08BC.︒ä–舌; [B1, V6]; xn----rpd7902rclc.xn--fpo216mn07e; ; ; # ð¹¯-𑄴ࢼ.︒ä–舌
+ð¹¯-ð‘„´\u08BC。。ä–舌; ð¹¯-ð‘„´\u08BC..ä–舌; [B1, X4_2]; xn----rpd7902rclc..xn--fpo216m; [B1, A4_2]; ; # ð¹¯-𑄴ࢼ..ä–舌
+xn----rpd7902rclc..xn--fpo216m; ð¹¯-ð‘„´\u08BC..ä–舌; [B1, X4_2]; xn----rpd7902rclc..xn--fpo216m; [B1, A4_2]; ; # ð¹¯-𑄴ࢼ..ä–舌
+xn----rpd7902rclc.xn--fpo216mn07e; ð¹¯-ð‘„´\u08BC.︒ä–舌; [B1, V6]; xn----rpd7902rclc.xn--fpo216mn07e; ; ; # ð¹¯-𑄴ࢼ.︒ä–舌
+ðªžá‚°ï½¡ìª¡; ðªžá‚°.쪡; [V5, V6]; xn--ond3755u.xn--pi6b; ; ; # ðªžá‚°.쪡
+ðªžá‚°ï½¡á„ᅨᆨ; ðªžá‚°.쪡; [V5, V6]; xn--ond3755u.xn--pi6b; ; ; # ðªžá‚°.쪡
+ðªžá‚°ã€‚쪡; ðªžá‚°.쪡; [V5, V6]; xn--ond3755u.xn--pi6b; ; ; # ðªžá‚°.쪡
+ðªžá‚°ã€‚á„ᅨᆨ; ðªžá‚°.쪡; [V5, V6]; xn--ond3755u.xn--pi6b; ; ; # ðªžá‚°.쪡
ðªžâ´ã€‚á„ᅨᆨ; ðªžâ´.쪡; [V5]; xn--7kj1858k.xn--pi6b; ; ; # ðªžâ´.쪡
ðªžâ´ã€‚쪡; ðªžâ´.쪡; [V5]; xn--7kj1858k.xn--pi6b; ; ; # ðªžâ´.쪡
xn--7kj1858k.xn--pi6b; ðªžâ´.쪡; [V5]; xn--7kj1858k.xn--pi6b; ; ; # ðªžâ´.쪡
xn--ond3755u.xn--pi6b; ðªžá‚°.쪡; [V5, V6]; xn--ond3755u.xn--pi6b; ; ; # ðªžá‚°.쪡
ðªžâ´ï½¡á„ᅨᆨ; ðªžâ´.쪡; [V5]; xn--7kj1858k.xn--pi6b; ; ; # ðªžâ´.쪡
ðªžâ´ï½¡ìª¡; ðªžâ´.쪡; [V5]; xn--7kj1858k.xn--pi6b; ; ; # ðªžâ´.쪡
-ฺì©ð¹¬.ô‹‰³; ; [B1, P1, V5, V6]; xn--o4c4837g2zvb.xn--5f70g; ; ; # ฺì©ð¹¬.
-ฺá„ᅤᆸð¹¬.ô‹‰³; ฺì©ð¹¬.ô‹‰³; [B1, P1, V5, V6]; xn--o4c4837g2zvb.xn--5f70g; ; ; # ฺì©ð¹¬.
-xn--o4c4837g2zvb.xn--5f70g; ฺì©ð¹¬.ô‹‰³; [B1, V5, V6]; xn--o4c4837g2zvb.xn--5f70g; ; ; # ฺì©ð¹¬.
-á¡…ï¼â€Œï½¡âŽ¢ó¤¨„; á¡…0‌.⎢󤨄; [C1, P1, V6]; xn--0-z6jy93b.xn--8lh28773l; ; xn--0-z6j.xn--8lh28773l; [P1, V6] # á¡…0.⎢
-ᡅ0‌。⎢󤨄; ᡅ0‌.⎢󤨄; [C1, P1, V6]; xn--0-z6jy93b.xn--8lh28773l; ; xn--0-z6j.xn--8lh28773l; [P1, V6] # ᡅ0.⎢
+\u0E3Aì©ð¹¬.ô‹‰³; ; [B1, V5, V6]; xn--o4c4837g2zvb.xn--5f70g; ; ; # ฺì©ð¹¬.
+\u0E3Aá„ᅤᆸð¹¬.ô‹‰³; \u0E3Aì©ð¹¬.ô‹‰³; [B1, V5, V6]; xn--o4c4837g2zvb.xn--5f70g; ; ; # ฺì©ð¹¬.
+xn--o4c4837g2zvb.xn--5f70g; \u0E3Aì©ð¹¬.ô‹‰³; [B1, V5, V6]; xn--o4c4837g2zvb.xn--5f70g; ; ; # ฺì©ð¹¬.
+á¡…ï¼\u200C。⎢󤨄; á¡…0\u200C.⎢󤨄; [C1, V6]; xn--0-z6jy93b.xn--8lh28773l; ; xn--0-z6j.xn--8lh28773l; [V6] # á¡…0.⎢
+ᡅ0\u200C。⎢󤨄; ᡅ0\u200C.⎢󤨄; [C1, V6]; xn--0-z6jy93b.xn--8lh28773l; ; xn--0-z6j.xn--8lh28773l; [V6] # ᡅ0.⎢
xn--0-z6j.xn--8lh28773l; ᡅ0.⎢󤨄; [V6]; xn--0-z6j.xn--8lh28773l; ; ; # ᡅ0.⎢
-xn--0-z6jy93b.xn--8lh28773l; ᡅ0‌.⎢󤨄; [C1, V6]; xn--0-z6jy93b.xn--8lh28773l; ; ; # ᡅ0.⎢
-𲮚9ê©áŸ“.â€ÃŸ; 𲮚9ê©áŸ“.â€ÃŸ; [C2, P1, V6]; xn--9-i0j5967eg3qz.xn--zca770n; ; xn--9-i0j5967eg3qz.ss; [P1, V6] # 9ê©áŸ“.ß
-𲮚9ê©áŸ“.â€ÃŸ; ; [C2, P1, V6]; xn--9-i0j5967eg3qz.xn--zca770n; ; xn--9-i0j5967eg3qz.ss; [P1, V6] # 9ê©áŸ“.ß
-𲮚9ê©áŸ“.â€SS; 𲮚9ê©áŸ“.â€ss; [C2, P1, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [P1, V6] # 9ê©áŸ“.ss
-𲮚9ê©áŸ“.â€ss; ; [C2, P1, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [P1, V6] # 9ê©áŸ“.ss
-xn--9-i0j5967eg3qz.ss; 𲮚9ê©áŸ“.ss; [V6]; xn--9-i0j5967eg3qz.ss; ; ; # 9ê©áŸ“.ss
-xn--9-i0j5967eg3qz.xn--ss-l1t; 𲮚9ê©áŸ“.â€ss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; ; # 9ê©áŸ“.ss
-xn--9-i0j5967eg3qz.xn--zca770n; 𲮚9ê©áŸ“.â€ÃŸ; [C2, V6]; xn--9-i0j5967eg3qz.xn--zca770n; ; ; # 9ê©áŸ“.ß
-𲮚9ê©áŸ“.â€SS; 𲮚9ê©áŸ“.â€ss; [C2, P1, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [P1, V6] # 9ê©áŸ“.ss
-𲮚9ê©áŸ“.â€ss; 𲮚9ê©áŸ“.â€ss; [C2, P1, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [P1, V6] # 9ê©áŸ“.ss
-𲮚9ê©áŸ“.â€Ss; 𲮚9ê©áŸ“.â€ss; [C2, P1, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [P1, V6] # 9ê©áŸ“.ss
-𲮚9ê©áŸ“.â€Ss; 𲮚9ê©áŸ“.â€ss; [C2, P1, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [P1, V6] # 9ê©áŸ“.ss
-ꗷ𑆀.Ýð©’; ; ; xn--ju8a625r.xn--hpb0073k; ; ; # ꗷ𑆀.Ýð©’
-xn--ju8a625r.xn--hpb0073k; ꗷ𑆀.Ýð©’; ; xn--ju8a625r.xn--hpb0073k; ; ; # ꗷ𑆀.Ýð©’
-â’≯-。︒ò©‘£-ñž› ; â’≯-.︒ò©‘£-ñž› ; [P1, V3, V6]; xn----ogot9g.xn----n89hl0522az9u2a; ; ; # â’≯-.︒-
-â’≯-。︒ò©‘£-ñž› ; â’≯-.︒ò©‘£-ñž› ; [P1, V3, V6]; xn----ogot9g.xn----n89hl0522az9u2a; ; ; # â’≯-.︒-
-9.≯-。。򩑣-񞛠; 9.≯-..򩑣-񞛠; [P1, V3, V6, X4_2]; 9.xn----ogo..xn----xj54d1s69k; [P1, V3, V6, A4_2]; ; # 9.≯-..-
-9.≯-。。򩑣-񞛠; 9.≯-..򩑣-񞛠; [P1, V3, V6, X4_2]; 9.xn----ogo..xn----xj54d1s69k; [P1, V3, V6, A4_2]; ; # 9.≯-..-
+xn--0-z6jy93b.xn--8lh28773l; ᡅ0\u200C.⎢󤨄; [C1, V6]; xn--0-z6jy93b.xn--8lh28773l; ; ; # ᡅ0.⎢
+𲮚9ê©\u17D3.\u200Dß; 𲮚9ê©\u17D3.\u200Dß; [C2, V6]; xn--9-i0j5967eg3qz.xn--zca770n; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ê©áŸ“.ß
+𲮚9ê©\u17D3.\u200Dß; ; [C2, V6]; xn--9-i0j5967eg3qz.xn--zca770n; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ê©áŸ“.ß
+𲮚9ê©\u17D3.\u200DSS; 𲮚9ê©\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ê©áŸ“.ss
+𲮚9ê©\u17D3.\u200Dss; ; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ê©áŸ“.ss
+xn--9-i0j5967eg3qz.ss; 𲮚9ê©\u17D3.ss; [V6]; xn--9-i0j5967eg3qz.ss; ; ; # 9ê©áŸ“.ss
+xn--9-i0j5967eg3qz.xn--ss-l1t; 𲮚9ê©\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; ; # 9ê©áŸ“.ss
+xn--9-i0j5967eg3qz.xn--zca770n; 𲮚9ê©\u17D3.\u200Dß; [C2, V6]; xn--9-i0j5967eg3qz.xn--zca770n; ; ; # 9ê©áŸ“.ß
+𲮚9ê©\u17D3.\u200DSS; 𲮚9ê©\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ê©áŸ“.ss
+𲮚9ê©\u17D3.\u200Dss; 𲮚9ê©\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ê©áŸ“.ss
+𲮚9ê©\u17D3.\u200DSs; 𲮚9ê©\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ê©áŸ“.ss
+𲮚9ê©\u17D3.\u200DSs; 𲮚9ê©\u17D3.\u200Dss; [C2, V6]; xn--9-i0j5967eg3qz.xn--ss-l1t; ; xn--9-i0j5967eg3qz.ss; [V6] # 9ê©áŸ“.ss
+ꗷ𑆀.\u075Dð©’; ; ; xn--ju8a625r.xn--hpb0073k; ; ; # ꗷ𑆀.Ýð©’
+xn--ju8a625r.xn--hpb0073k; ꗷ𑆀.\u075Dð©’; ; xn--ju8a625r.xn--hpb0073k; ; ; # ꗷ𑆀.Ýð©’
+â’≯-。︒ò©‘£-ñž› ; â’≯-.︒ò©‘£-ñž› ; [V3, V6]; xn----ogot9g.xn----n89hl0522az9u2a; ; ; # â’≯-.︒-
+â’>\u0338-。︒ò©‘£-ñž› ; â’≯-.︒ò©‘£-ñž› ; [V3, V6]; xn----ogot9g.xn----n89hl0522az9u2a; ; ; # â’≯-.︒-
+9.≯-。。򩑣-񞛠; 9.≯-..򩑣-񞛠; [V3, V6, X4_2]; 9.xn----ogo..xn----xj54d1s69k; [V3, V6, A4_2]; ; # 9.≯-..-
+9.>\u0338-。。򩑣-񞛠; 9.≯-..򩑣-񞛠; [V3, V6, X4_2]; 9.xn----ogo..xn----xj54d1s69k; [V3, V6, A4_2]; ; # 9.≯-..-
9.xn----ogo..xn----xj54d1s69k; 9.≯-..򩑣-񞛠; [V3, V6, X4_2]; 9.xn----ogo..xn----xj54d1s69k; [V3, V6, A4_2]; ; # 9.≯-..-
xn----ogot9g.xn----n89hl0522az9u2a; â’≯-.︒ò©‘£-ñž› ; [V3, V6]; xn----ogot9g.xn----n89hl0522az9u2a; ; ; # â’≯-.︒-
-òˆªšà³£áƒó ¢ï¼ŽØ; òˆªšà³£áƒó ¢.Ø; [B6, P1, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # à³£áƒ.Ø
-òˆªšà³£áƒó ¢.Ø; ; [B6, P1, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # à³£áƒ.Ø
-òˆªšà³£â´¡ó ¢.Ø; ; [B6, P1, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.Ø
-xn--vuc226n8n28lmju7a.xn--cgb; òˆªšà³£â´¡ó ¢.Ø; [B6, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.Ø
-xn--vuc49qvu85xmju7a.xn--cgb; òˆªšà³£áƒó ¢.Ø; [B6, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # à³£áƒ.Ø
-òˆªšà³£â´¡ó ¢ï¼ŽØ; òˆªšà³£â´¡ó ¢.Ø; [B6, P1, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.Ø
-ᷫ。ð‹©Ø¸-ð«®; á·«.ð‹©Ø¸-ð«®; [B1, B3, B6, V5]; xn--gfg.xn----xnc0815qyyg; ; ; # á·«.ð‹©Ø¸-ð«®
-xn--gfg.xn----xnc0815qyyg; á·«.ð‹©Ø¸-ð«®; [B1, B3, B6, V5]; xn--gfg.xn----xnc0815qyyg; ; ; # á·«.ð‹©Ø¸-ð«®
-싇。⾇ð³‹á‚½; 싇.舛ð³‹á‚½; [B5, P1, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
-싇。⾇ð³‹á‚½; 싇.舛ð³‹á‚½; [B5, P1, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
-싇。舛ð³‹á‚½; 싇.舛ð³‹á‚½; [B5, P1, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
-싇。舛ð³‹á‚½; 싇.舛ð³‹á‚½; [B5, P1, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
+òˆªš\u0CE3áƒó ¢ï¼Ž\u061D; òˆªš\u0CE3áƒó ¢.\u061D; [B6, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # à³£áƒ.Ø
+òˆªš\u0CE3áƒó ¢.\u061D; ; [B6, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # à³£áƒ.Ø
+òˆªš\u0CE3â´¡ó ¢.\u061D; ; [B6, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.Ø
+xn--vuc226n8n28lmju7a.xn--cgb; òˆªš\u0CE3â´¡ó ¢.\u061D; [B6, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.Ø
+xn--vuc49qvu85xmju7a.xn--cgb; òˆªš\u0CE3áƒó ¢.\u061D; [B6, V6]; xn--vuc49qvu85xmju7a.xn--cgb; ; ; # à³£áƒ.Ø
+òˆªš\u0CE3â´¡ó ¢ï¼Ž\u061D; òˆªš\u0CE3â´¡ó ¢.\u061D; [B6, V6]; xn--vuc226n8n28lmju7a.xn--cgb; ; ; # ೣⴡ.Ø
+\u1DEB。ð‹©\u0638-ð«®; \u1DEB.ð‹©\u0638-ð«®; [B1, V5]; xn--gfg.xn----xnc0815qyyg; ; ; # á·«.ð‹©Ø¸-ð«®
+xn--gfg.xn----xnc0815qyyg; \u1DEB.ð‹©\u0638-ð«®; [B1, V5]; xn--gfg.xn----xnc0815qyyg; ; ; # á·«.ð‹©Ø¸-ð«®
+싇。⾇ð³‹á‚½; 싇.舛ð³‹á‚½; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
+싇。⾇ð³‹á‚½; 싇.舛ð³‹á‚½; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
+싇。舛ð³‹á‚½; 싇.舛ð³‹á‚½; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
+싇。舛ð³‹á‚½; 싇.舛ð³‹á‚½; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
싇。舛ð³‹â´; 싇.舛ð³‹â´; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛ð³‹â´
싇。舛ð³‹â´; 싇.舛ð³‹â´; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛ð³‹â´
-싇。舛ð²‹á‚½; 싇.舛ð³‹á‚½; [B5, P1, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
-싇。舛ð²‹á‚½; 싇.舛ð³‹á‚½; [B5, P1, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
+싇。舛ð²‹á‚½; 싇.舛ð³‹á‚½; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
+싇。舛ð²‹á‚½; 싇.舛ð³‹á‚½; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
싇。舛ð²‹â´; 싇.舛ð³‹â´; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛ð³‹â´
싇。舛ð²‹â´; 싇.舛ð³‹â´; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛ð³‹â´
xn--9u4b.xn--llj123yh74e; 싇.舛ð³‹â´; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛ð³‹â´
xn--9u4b.xn--1nd7519ch79d; 싇.舛ð³‹á‚½; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
싇。⾇ð³‹â´; 싇.舛ð³‹â´; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛ð³‹â´
싇。⾇ð³‹â´; 싇.舛ð³‹â´; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛ð³‹â´
-싇。⾇ð²‹á‚½; 싇.舛ð³‹á‚½; [B5, P1, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
-싇。⾇ð²‹á‚½; 싇.舛ð³‹á‚½; [B5, P1, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
+싇。⾇ð²‹á‚½; 싇.舛ð³‹á‚½; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
+싇。⾇ð²‹á‚½; 싇.舛ð³‹á‚½; [B5, V6]; xn--9u4b.xn--1nd7519ch79d; ; ; # 싇.舛ð³‹á‚½
싇。⾇ð²‹â´; 싇.舛ð³‹â´; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛ð³‹â´
싇。⾇ð²‹â´; 싇.舛ð³‹â´; [B5]; xn--9u4b.xn--llj123yh74e; ; ; # 싇.舛ð³‹â´
-ð¹ Ï‚。‌ڿჀ; ð¹ Ï‚.‌ڿჀ; [B1, C1, P1, V6]; xn--3xa1267k.xn--ykb632cvxm; ; xn--4xa9167k.xn--ykb632c; [B1, B2, B3, P1, V6] # ð¹ Ï‚.ڿჀ
-ð¹ Ï‚。‌ڿⴠ; ð¹ Ï‚.‌ڿⴠ; [B1, C1]; xn--3xa1267k.xn--ykb760k9hj; ; xn--4xa9167k.xn--ykb467q; [B1, B2, B3] # ð¹ Ï‚.Ú¿â´ 
-ð¹ Î£ã€‚‌ڿჀ; ð¹ Ïƒ.‌ڿჀ; [B1, C1, P1, V6]; xn--4xa9167k.xn--ykb632cvxm; ; xn--4xa9167k.xn--ykb632c; [B1, B2, B3, P1, V6] # ð¹ Ïƒ.ڿჀ
-ð¹ Ïƒã€‚‌ڿⴠ; ð¹ Ïƒ.‌ڿⴠ; [B1, C1]; xn--4xa9167k.xn--ykb760k9hj; ; xn--4xa9167k.xn--ykb467q; [B1, B2, B3] # ð¹ Ïƒ.Ú¿â´ 
-ð¹ Î£ã€‚‌ڿⴠ; ð¹ Ïƒ.‌ڿⴠ; [B1, C1]; xn--4xa9167k.xn--ykb760k9hj; ; xn--4xa9167k.xn--ykb467q; [B1, B2, B3] # ð¹ Ïƒ.Ú¿â´ 
-xn--4xa9167k.xn--ykb467q; ð¹ Ïƒ.Ú¿â´ ; [B1, B2, B3]; xn--4xa9167k.xn--ykb467q; ; ; # ð¹ Ïƒ.Ú¿â´ 
-xn--4xa9167k.xn--ykb760k9hj; ð¹ Ïƒ.‌ڿⴠ; [B1, C1]; xn--4xa9167k.xn--ykb760k9hj; ; ; # ð¹ Ïƒ.Ú¿â´ 
-xn--4xa9167k.xn--ykb632c; ð¹ Ïƒ.ڿჀ; [B1, B2, B3, V6]; xn--4xa9167k.xn--ykb632c; ; ; # ð¹ Ïƒ.ڿჀ
-xn--4xa9167k.xn--ykb632cvxm; ð¹ Ïƒ.‌ڿჀ; [B1, C1, V6]; xn--4xa9167k.xn--ykb632cvxm; ; ; # ð¹ Ïƒ.ڿჀ
-xn--3xa1267k.xn--ykb760k9hj; ð¹ Ï‚.‌ڿⴠ; [B1, C1]; xn--3xa1267k.xn--ykb760k9hj; ; ; # ð¹ Ï‚.Ú¿â´ 
-xn--3xa1267k.xn--ykb632cvxm; ð¹ Ï‚.‌ڿჀ; [B1, C1, V6]; xn--3xa1267k.xn--ykb632cvxm; ; ; # ð¹ Ï‚.ڿჀ
-ò‡’‌؄.Úš-ß; ; [B2, B3, B5, B6, C1, P1, V6]; xn--mfb144kqo32m.xn----qfa315b; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, P1, V6] # .Úš-ß
-ò‡’‌؄.Úš-SS; ò‡’‌؄.Úš-ss; [B2, B3, B5, B6, C1, P1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, P1, V6] # .Úš-ss
-ò‡’‌؄.Úš-ss; ; [B2, B3, B5, B6, C1, P1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, P1, V6] # .Úš-ss
-ò‡’‌؄.Úš-Ss; ò‡’‌؄.Úš-ss; [B2, B3, B5, B6, C1, P1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, P1, V6] # .Úš-ss
-xn--mfb98261i.xn---ss-sdf; ò‡’Ø„.Úš-ss; [B2, B3, B5, B6, V6]; xn--mfb98261i.xn---ss-sdf; ; ; # .Úš-ss
-xn--mfb144kqo32m.xn---ss-sdf; ò‡’‌؄.Úš-ss; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; ; # .Úš-ss
-xn--mfb144kqo32m.xn----qfa315b; ò‡’‌؄.Úš-ß; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn----qfa315b; ; ; # .Úš-ß
-‌â€ážµÙº.-ï®°ó…„žð¸š; ‌â€ážµÙº.-Û“ó…„žð¸š; [B1, C1, C2, P1, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; xn--zib539f.xn----twc1133r17r6g; [B1, P1, V3, V5, V6] # Ùº.-Û“
-‌â€ážµÙº.-Û“ó…„žð¸š; ; [B1, C1, C2, P1, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; xn--zib539f.xn----twc1133r17r6g; [B1, P1, V3, V5, V6] # Ùº.-Û“
-‌â€ážµÙº.-Û’Ù”ó…„žð¸š; ‌â€ážµÙº.-Û“ó…„žð¸š; [B1, C1, C2, P1, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; xn--zib539f.xn----twc1133r17r6g; [B1, P1, V3, V5, V6] # Ùº.-Û“
-xn--zib539f.xn----twc1133r17r6g; ážµÙº.-Û“ó…„žð¸š; [B1, V3, V5, V6]; xn--zib539f.xn----twc1133r17r6g; ; ; # Ùº.-Û“
-xn--zib539f8igea.xn----twc1133r17r6g; ‌â€ážµÙº.-Û“ó…„žð¸š; [B1, C1, C2, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; ; # Ùº.-Û“
-ò¡¶±ï½¡ð®¬â‰ ; ò¡¶±.ð®¬â‰ ; [B3, P1, V6]; xn--dd55c.xn--1ch3003g; ; ; # .ð®¬â‰ 
-ò¡¶±ï½¡ð®¬≠; ò¡¶±.ð®¬â‰ ; [B3, P1, V6]; xn--dd55c.xn--1ch3003g; ; ; # .ð®¬â‰ 
-ò¡¶±ã€‚ð®¬â‰ ; ò¡¶±.ð®¬â‰ ; [B3, P1, V6]; xn--dd55c.xn--1ch3003g; ; ; # .ð®¬â‰ 
-ò¡¶±ã€‚ð®¬≠; ò¡¶±.ð®¬â‰ ; [B3, P1, V6]; xn--dd55c.xn--1ch3003g; ; ; # .ð®¬â‰ 
+ð¹ Ï‚。\u200C\u06BFჀ; ð¹ Ï‚.\u200C\u06BFჀ; [B1, C1, V6]; xn--3xa1267k.xn--ykb632cvxm; ; xn--4xa9167k.xn--ykb632c; [B1, B2, B3, V6] # ð¹ Ï‚.ڿჀ
+ð¹ Ï‚。\u200C\u06BFâ´ ; ð¹ Ï‚.\u200C\u06BFâ´ ; [B1, C1]; xn--3xa1267k.xn--ykb760k9hj; ; xn--4xa9167k.xn--ykb467q; [B1, B2, B3] # ð¹ Ï‚.Ú¿â´ 
+ð¹ Î£ã€‚\u200C\u06BFჀ; ð¹ Ïƒ.\u200C\u06BFჀ; [B1, C1, V6]; xn--4xa9167k.xn--ykb632cvxm; ; xn--4xa9167k.xn--ykb632c; [B1, B2, B3, V6] # ð¹ Ïƒ.ڿჀ
+ð¹ Ïƒã€‚\u200C\u06BFâ´ ; ð¹ Ïƒ.\u200C\u06BFâ´ ; [B1, C1]; xn--4xa9167k.xn--ykb760k9hj; ; xn--4xa9167k.xn--ykb467q; [B1, B2, B3] # ð¹ Ïƒ.Ú¿â´ 
+ð¹ Î£ã€‚\u200C\u06BFâ´ ; ð¹ Ïƒ.\u200C\u06BFâ´ ; [B1, C1]; xn--4xa9167k.xn--ykb760k9hj; ; xn--4xa9167k.xn--ykb467q; [B1, B2, B3] # ð¹ Ïƒ.Ú¿â´ 
+xn--4xa9167k.xn--ykb467q; ð¹ Ïƒ.\u06BFâ´ ; [B1, B2, B3]; xn--4xa9167k.xn--ykb467q; ; ; # ð¹ Ïƒ.Ú¿â´ 
+xn--4xa9167k.xn--ykb760k9hj; ð¹ Ïƒ.\u200C\u06BFâ´ ; [B1, C1]; xn--4xa9167k.xn--ykb760k9hj; ; ; # ð¹ Ïƒ.Ú¿â´ 
+xn--4xa9167k.xn--ykb632c; ð¹ Ïƒ.\u06BFჀ; [B1, B2, B3, V6]; xn--4xa9167k.xn--ykb632c; ; ; # ð¹ Ïƒ.ڿჀ
+xn--4xa9167k.xn--ykb632cvxm; ð¹ Ïƒ.\u200C\u06BFჀ; [B1, C1, V6]; xn--4xa9167k.xn--ykb632cvxm; ; ; # ð¹ Ïƒ.ڿჀ
+xn--3xa1267k.xn--ykb760k9hj; ð¹ Ï‚.\u200C\u06BFâ´ ; [B1, C1]; xn--3xa1267k.xn--ykb760k9hj; ; ; # ð¹ Ï‚.Ú¿â´ 
+xn--3xa1267k.xn--ykb632cvxm; ð¹ Ï‚.\u200C\u06BFჀ; [B1, C1, V6]; xn--3xa1267k.xn--ykb632cvxm; ; ; # ð¹ Ï‚.ڿჀ
+ò‡’\u200C\u0604.\u069A-ß; ; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn----qfa315b; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, V6] # .Úš-ß
+ò‡’\u200C\u0604.\u069A-SS; ò‡’\u200C\u0604.\u069A-ss; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, V6] # .Úš-ss
+ò‡’\u200C\u0604.\u069A-ss; ; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, V6] # .Úš-ss
+ò‡’\u200C\u0604.\u069A-Ss; ò‡’\u200C\u0604.\u069A-ss; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; xn--mfb98261i.xn---ss-sdf; [B2, B3, B5, B6, V6] # .Úš-ss
+xn--mfb98261i.xn---ss-sdf; ò‡’\u0604.\u069A-ss; [B2, B3, B5, B6, V6]; xn--mfb98261i.xn---ss-sdf; ; ; # .Úš-ss
+xn--mfb144kqo32m.xn---ss-sdf; ò‡’\u200C\u0604.\u069A-ss; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn---ss-sdf; ; ; # .Úš-ss
+xn--mfb144kqo32m.xn----qfa315b; ò‡’\u200C\u0604.\u069A-ß; [B2, B3, B5, B6, C1, V6]; xn--mfb144kqo32m.xn----qfa315b; ; ; # .Úš-ß
+\u200C\u200D\u17B5\u067A.-\uFBB0ó…„žð¸š; \u200C\u200D\u17B5\u067A.-\u06D3ó…„žð¸š; [B1, C1, C2, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; xn--zib539f.xn----twc1133r17r6g; [B1, V3, V5, V6] # Ùº.-Û“
+\u200C\u200D\u17B5\u067A.-\u06D3ó…„žð¸š; ; [B1, C1, C2, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; xn--zib539f.xn----twc1133r17r6g; [B1, V3, V5, V6] # Ùº.-Û“
+\u200C\u200D\u17B5\u067A.-\u06D2\u0654ó…„žð¸š; \u200C\u200D\u17B5\u067A.-\u06D3ó…„žð¸š; [B1, C1, C2, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; xn--zib539f.xn----twc1133r17r6g; [B1, V3, V5, V6] # Ùº.-Û“
+xn--zib539f.xn----twc1133r17r6g; \u17B5\u067A.-\u06D3ó…„žð¸š; [B1, V3, V5, V6]; xn--zib539f.xn----twc1133r17r6g; ; ; # Ùº.-Û“
+xn--zib539f8igea.xn----twc1133r17r6g; \u200C\u200D\u17B5\u067A.-\u06D3ó…„žð¸š; [B1, C1, C2, V3, V6]; xn--zib539f8igea.xn----twc1133r17r6g; ; ; # Ùº.-Û“
+ò¡¶±ï½¡ð®¬â‰ ; ò¡¶±.ð®¬â‰ ; [B3, V6]; xn--dd55c.xn--1ch3003g; ; ; # .ð®¬â‰ 
+ò¡¶±ï½¡ð®¬=\u0338; ò¡¶±.ð®¬â‰ ; [B3, V6]; xn--dd55c.xn--1ch3003g; ; ; # .ð®¬â‰ 
+ò¡¶±ã€‚ð®¬â‰ ; ò¡¶±.ð®¬â‰ ; [B3, V6]; xn--dd55c.xn--1ch3003g; ; ; # .ð®¬â‰ 
+ò¡¶±ã€‚ð®¬=\u0338; ò¡¶±.ð®¬â‰ ; [B3, V6]; xn--dd55c.xn--1ch3003g; ; ; # .ð®¬â‰ 
xn--dd55c.xn--1ch3003g; ò¡¶±.ð®¬â‰ ; [B3, V6]; xn--dd55c.xn--1ch3003g; ; ; # .ð®¬â‰ 
-ྲ𞶅。ð¹®ð¹·ëÛµ; ྲ𞶅.ð¹®ð¹·ëÛµ; [B1, P1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.ð¹®ð¹·ëÛµ
-ྲ𞶅。ð¹®ð¹·á„ƒá…¥á†°Ûµ; ྲ𞶅.ð¹®ð¹·ëÛµ; [B1, P1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.ð¹®ð¹·ëÛµ
-ྲ𞶅。ð¹®ð¹·ëÛµ; ྲ𞶅.ð¹®ð¹·ëÛµ; [B1, P1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.ð¹®ð¹·ëÛµ
-ྲ𞶅。ð¹®ð¹·á„ƒá…¥á†°Ûµ; ྲ𞶅.ð¹®ð¹·ëÛµ; [B1, P1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.ð¹®ð¹·ëÛµ
-xn--fgd0675v.xn--imb5839fidpcbba; ྲ𞶅.ð¹®ð¹·ëÛµ; [B1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.ð¹®ð¹·ëÛµ
-Ⴏ󠅋-.â€á‚©; Ⴏ-.â€á‚©; [C2, P1, V3, V6]; xn----00g.xn--hnd399e; ; xn----00g.xn--hnd; [P1, V3, V6] # Ⴏ-.á‚©
-Ⴏ󠅋-.â€á‚©; Ⴏ-.â€á‚©; [C2, P1, V3, V6]; xn----00g.xn--hnd399e; ; xn----00g.xn--hnd; [P1, V3, V6] # Ⴏ-.á‚©
-â´ó …‹-.â€â´‰; â´-.â€â´‰; [C2, V3]; xn----3vs.xn--1ug532c; ; xn----3vs.xn--0kj; [V3] # â´-.â´‰
+\u0FB2𞶅。ð¹®ð¹·ëÛµ; \u0FB2𞶅.ð¹®ð¹·ëÛµ; [B1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.ð¹®ð¹·ëÛµ
+\u0FB2𞶅。ð¹®ð¹·á„ƒá…¥á†°Ûµ; \u0FB2𞶅.ð¹®ð¹·ëÛµ; [B1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.ð¹®ð¹·ëÛµ
+\u0FB2𞶅。ð¹®ð¹·ëÛµ; \u0FB2𞶅.ð¹®ð¹·ëÛµ; [B1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.ð¹®ð¹·ëÛµ
+\u0FB2𞶅。ð¹®ð¹·á„ƒá…¥á†°Ûµ; \u0FB2𞶅.ð¹®ð¹·ëÛµ; [B1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.ð¹®ð¹·ëÛµ
+xn--fgd0675v.xn--imb5839fidpcbba; \u0FB2𞶅.ð¹®ð¹·ëÛµ; [B1, V5, V6]; xn--fgd0675v.xn--imb5839fidpcbba; ; ; # ྲ.ð¹®ð¹·ëÛµ
+Ⴏ󠅋-.\u200DႩ; Ⴏ-.\u200DႩ; [C2, V3, V6]; xn----00g.xn--hnd399e; ; xn----00g.xn--hnd; [V3, V6] # Ⴏ-.Ⴉ
+Ⴏ󠅋-.\u200DႩ; Ⴏ-.\u200DႩ; [C2, V3, V6]; xn----00g.xn--hnd399e; ; xn----00g.xn--hnd; [V3, V6] # Ⴏ-.Ⴉ
+â´ó …‹-.\u200Dâ´‰; â´-.\u200Dâ´‰; [C2, V3]; xn----3vs.xn--1ug532c; ; xn----3vs.xn--0kj; [V3] # â´-.â´‰
xn----3vs.xn--0kj; â´-.â´‰; [V3]; xn----3vs.xn--0kj; ; ; # â´-.â´‰
-xn----3vs.xn--1ug532c; â´-.â€â´‰; [C2, V3]; xn----3vs.xn--1ug532c; ; ; # â´-.â´‰
+xn----3vs.xn--1ug532c; â´-.\u200Dâ´‰; [C2, V3]; xn----3vs.xn--1ug532c; ; ; # â´-.â´‰
xn----00g.xn--hnd; Ⴏ-.Ⴉ; [V3, V6]; xn----00g.xn--hnd; ; ; # Ⴏ-.Ⴉ
-xn----00g.xn--hnd399e; Ⴏ-.â€á‚©; [C2, V3, V6]; xn----00g.xn--hnd399e; ; ; # Ⴏ-.á‚©
-â´ó …‹-.â€â´‰; â´-.â€â´‰; [C2, V3]; xn----3vs.xn--1ug532c; ; xn----3vs.xn--0kj; [V3] # â´-.â´‰
-⇧ð¨ó ¾ˆó¯¶…。؀󠈵󠆉; ⇧ð¨ó ¾ˆó¯¶….؀󠈵; [B1, P1, V6]; xn--l8g5552g64t4g46xf.xn--ifb08144p; ; ; # ⇧ð¨.
-xn--l8g5552g64t4g46xf.xn--ifb08144p; ⇧ð¨ó ¾ˆó¯¶….؀󠈵; [B1, V6]; xn--l8g5552g64t4g46xf.xn--ifb08144p; ; ; # ⇧ð¨.
-≠ð®‚.↑🄇⒈; ; [B1, P1, V6]; xn--1chy492g.xn--45gx9iuy44d; ; ; # ≠ð®‚.↑🄇⒈
-≠ð®‚.↑🄇⒈; ≠ð®‚.↑🄇⒈; [B1, P1, V6]; xn--1chy492g.xn--45gx9iuy44d; ; ; # ≠ð®‚.↑🄇⒈
-≠ð®‚.↑6,1.; ; [B1, P1, V6]; xn--1chy492g.xn--6,1-pw1a.; ; ; # ≠ð®‚.↑6,1.
-≠ð®‚.↑6,1.; ≠ð®‚.↑6,1.; [B1, P1, V6]; xn--1chy492g.xn--6,1-pw1a.; ; ; # ≠ð®‚.↑6,1.
-xn--1chy492g.xn--6,1-pw1a.; ≠ð®‚.↑6,1.; [B1, P1, V6]; xn--1chy492g.xn--6,1-pw1a.; ; ; # ≠ð®‚.↑6,1.
+xn----00g.xn--hnd399e; Ⴏ-.\u200DႩ; [C2, V3, V6]; xn----00g.xn--hnd399e; ; ; # Ⴏ-.Ⴉ
+â´ó …‹-.\u200Dâ´‰; â´-.\u200Dâ´‰; [C2, V3]; xn----3vs.xn--1ug532c; ; xn----3vs.xn--0kj; [V3] # â´-.â´‰
+⇧ð¨ó ¾ˆó¯¶…。\u0600󠈵󠆉; ⇧ð¨ó ¾ˆó¯¶….\u0600󠈵; [B1, V6]; xn--l8g5552g64t4g46xf.xn--ifb08144p; ; ; # ⇧ð¨.
+xn--l8g5552g64t4g46xf.xn--ifb08144p; ⇧ð¨ó ¾ˆó¯¶….\u0600󠈵; [B1, V6]; xn--l8g5552g64t4g46xf.xn--ifb08144p; ; ; # ⇧ð¨.
+≠ð®‚.↑🄇⒈; ; [B1, V6]; xn--1chy492g.xn--45gx9iuy44d; ; ; # ≠ð®‚.↑🄇⒈
+=\u0338ð®‚.↑🄇⒈; ≠ð®‚.↑🄇⒈; [B1, V6]; xn--1chy492g.xn--45gx9iuy44d; ; ; # ≠ð®‚.↑🄇⒈
+≠ð®‚.↑6,1.; ; [B1, V6]; xn--1chy492g.xn--6,1-pw1a.; ; ; # ≠ð®‚.↑6,1.
+=\u0338ð®‚.↑6,1.; ≠ð®‚.↑6,1.; [B1, V6]; xn--1chy492g.xn--6,1-pw1a.; ; ; # ≠ð®‚.↑6,1.
+xn--1chy492g.xn--6,1-pw1a.; ≠ð®‚.↑6,1.; [B1, V6]; xn--1chy492g.xn--6,1-pw1a.; ; ; # ≠ð®‚.↑6,1.
xn--1chy492g.xn--45gx9iuy44d; ≠ð®‚.↑🄇⒈; [B1, V6]; xn--1chy492g.xn--45gx9iuy44d; ; ; # ≠ð®‚.↑🄇⒈
-ð©ó ²‰ÃŸ.ᢤò„¦Œâ€Œð¹«; ; [B1, B5, B6, C1, P1, V5, V6]; xn--zca3153vupz3e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, P1, V5, V6] # ð©ÃŸ.ᢤð¹«
-ð©ó ²‰SS.ᢤò„¦Œâ€Œð¹«; ð©ó ²‰ss.ᢤò„¦Œâ€Œð¹«; [B1, B5, B6, C1, P1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, P1, V5, V6] # ð©ss.ᢤð¹«
-ð©ó ²‰ss.ᢤò„¦Œâ€Œð¹«; ; [B1, B5, B6, C1, P1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, P1, V5, V6] # ð©ss.ᢤð¹«
-ð©ó ²‰Ss.ᢤò„¦Œâ€Œð¹«; ð©ó ²‰ss.ᢤò„¦Œâ€Œð¹«; [B1, B5, B6, C1, P1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, P1, V5, V6] # ð©ss.ᢤð¹«
+ð©ó ²‰ÃŸ.ᢤò„¦Œ\u200Cð¹«; ; [B1, B5, B6, C1, V5, V6]; xn--zca3153vupz3e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, V5, V6] # ð©ÃŸ.ᢤð¹«
+ð©ó ²‰SS.ᢤò„¦Œ\u200Cð¹«; ð©ó ²‰ss.ᢤò„¦Œ\u200Cð¹«; [B1, B5, B6, C1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, V5, V6] # ð©ss.ᢤð¹«
+ð©ó ²‰ss.ᢤò„¦Œ\u200Cð¹«; ; [B1, B5, B6, C1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, V5, V6] # ð©ss.ᢤð¹«
+ð©ó ²‰Ss.ᢤò„¦Œ\u200Cð¹«; ð©ó ²‰ss.ᢤò„¦Œ\u200Cð¹«; [B1, B5, B6, C1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; [B1, B5, B6, V5, V6] # ð©ss.ᢤð¹«
xn--ss-zb11ap1427e.xn--ubf2596jbt61c; ð©ó ²‰ss.ᢤò„¦Œð¹«; [B1, B5, B6, V5, V6]; xn--ss-zb11ap1427e.xn--ubf2596jbt61c; ; ; # ð©ss.ᢤð¹«
-xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ð©ó ²‰ss.ᢤò„¦Œâ€Œð¹«; [B1, B5, B6, C1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; ; # ð©ss.ᢤð¹«
-xn--zca3153vupz3e.xn--ubf609atw1tynn3d; ð©ó ²‰ÃŸ.ᢤò„¦Œâ€Œð¹«; [B1, B5, B6, C1, V5, V6]; xn--zca3153vupz3e.xn--ubf609atw1tynn3d; ; ; # ð©ÃŸ.ᢤð¹«
-ßðµ³ñ—˜á‚§ï½¡ê™º; ßðµ³ñ—˜á‚§.ꙺ; [B1, B3, B5, B6, P1, V5, V6]; xn--zca491fci5qkn79a.xn--9x8a; ; xn--ss-rek7420r4hs7b.xn--9x8a; # ßႧ.ꙺ
-ßðµ³ñ—˜á‚§ã€‚ꙺ; ßðµ³ñ—˜á‚§.ꙺ; [B1, B3, B5, B6, P1, V5, V6]; xn--zca491fci5qkn79a.xn--9x8a; ; xn--ss-rek7420r4hs7b.xn--9x8a; # ßႧ.ꙺ
-ßðµ³ñ—˜â´‡ã€‚ꙺ; ßðµ³ñ—˜â´‡.ꙺ; [B1, B3, B5, B6, P1, V5, V6]; xn--zca227tpy4lkns1b.xn--9x8a; ; xn--ss-e61ar955h4hs7b.xn--9x8a; # ßⴇ.ꙺ
-SSðµ³ñ—˜á‚§ã€‚ꙺ; ssðµ³ñ—˜á‚§.ꙺ; [B1, B3, B5, B6, P1, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ
-ssðµ³ñ—˜â´‡ã€‚ꙺ; ssðµ³ñ—˜â´‡.ꙺ; [B1, B3, B5, B6, P1, V5, V6]; xn--ss-e61ar955h4hs7b.xn--9x8a; ; ; # ssâ´‡.ꙺ
-Ssðµ³ñ—˜á‚§ã€‚ꙺ; ssðµ³ñ—˜á‚§.ꙺ; [B1, B3, B5, B6, P1, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ
-xn--ss-rek7420r4hs7b.xn--9x8a; ssðµ³ñ—˜á‚§.ꙺ; [B1, B3, B5, B6, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ
-xn--ss-e61ar955h4hs7b.xn--9x8a; ssðµ³ñ—˜â´‡.ꙺ; [B1, B3, B5, B6, V5, V6]; xn--ss-e61ar955h4hs7b.xn--9x8a; ; ; # ssâ´‡.ꙺ
-xn--zca227tpy4lkns1b.xn--9x8a; ßðµ³ñ—˜â´‡.ꙺ; [B1, B3, B5, B6, V5, V6]; xn--zca227tpy4lkns1b.xn--9x8a; ; ; # ßⴇ.ꙺ
-xn--zca491fci5qkn79a.xn--9x8a; ßðµ³ñ—˜á‚§.ꙺ; [B1, B3, B5, B6, V5, V6]; xn--zca491fci5qkn79a.xn--9x8a; ; ; # ßႧ.ꙺ
-ßðµ³ñ—˜â´‡ï½¡ê™º; ßðµ³ñ—˜â´‡.ꙺ; [B1, B3, B5, B6, P1, V5, V6]; xn--zca227tpy4lkns1b.xn--9x8a; ; xn--ss-e61ar955h4hs7b.xn--9x8a; # ßⴇ.ꙺ
-SSðµ³ñ—˜á‚§ï½¡ê™º; ssðµ³ñ—˜á‚§.ꙺ; [B1, B3, B5, B6, P1, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ
-ssðµ³ñ—˜â´‡ï½¡ê™º; ssðµ³ñ—˜â´‡.ꙺ; [B1, B3, B5, B6, P1, V5, V6]; xn--ss-e61ar955h4hs7b.xn--9x8a; ; ; # ssâ´‡.ꙺ
-Ssðµ³ñ—˜á‚§ï½¡ê™º; ssðµ³ñ—˜á‚§.ꙺ; [B1, B3, B5, B6, P1, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ
-᜔。󠆣-𑋪; ᜔.-𑋪; [V3, V5]; xn--fze.xn----ly8i; ; ; # ᜔.-𑋪
-xn--fze.xn----ly8i; ᜔.-𑋪; [V3, V5]; xn--fze.xn----ly8i; ; ; # ᜔.-𑋪
-ꯨ-.ò¨œÖ½ÃŸ; ꯨ-.ò¨œÖ½ÃŸ; [P1, V3, V5, V6]; xn----pw5e.xn--zca50wfv060a; ; xn----pw5e.xn--ss-7jd10716y; # ꯨ-.ֽß
-ꯨ-.ò¨œÖ½ÃŸ; ; [P1, V3, V5, V6]; xn----pw5e.xn--zca50wfv060a; ; xn----pw5e.xn--ss-7jd10716y; # ꯨ-.ֽß
-ꯨ-.ò¨œÖ½SS; ꯨ-.ò¨œÖ½ss; [P1, V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
-ꯨ-.ò¨œÖ½ss; ; [P1, V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
-ꯨ-.ò¨œÖ½Ss; ꯨ-.ò¨œÖ½ss; [P1, V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
-xn----pw5e.xn--ss-7jd10716y; ꯨ-.ò¨œÖ½ss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
-xn----pw5e.xn--zca50wfv060a; ꯨ-.ò¨œÖ½ÃŸ; [V3, V5, V6]; xn----pw5e.xn--zca50wfv060a; ; ; # ꯨ-.ֽß
-ꯨ-.ò¨œÖ½SS; ꯨ-.ò¨œÖ½ss; [P1, V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
-ꯨ-.ò¨œÖ½ss; ꯨ-.ò¨œÖ½ss; [P1, V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
-ꯨ-.ò¨œÖ½Ss; ꯨ-.ò¨œÖ½ss; [P1, V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
-ᡓ-≮。٫󠅱ᡄ; ᡓ-≮.٫ᡄ; [B1, B6, P1, V6]; xn----s7j866c.xn--kib252g; ; ; # ᡓ-≮.٫ᡄ
-ᡓ-≮。٫󠅱ᡄ; ᡓ-≮.٫ᡄ; [B1, B6, P1, V6]; xn----s7j866c.xn--kib252g; ; ; # ᡓ-≮.٫ᡄ
-xn----s7j866c.xn--kib252g; ᡓ-≮.٫ᡄ; [B1, B6, V6]; xn----s7j866c.xn--kib252g; ; ; # ᡓ-≮.٫ᡄ
-ðŸ¥â™®ð‘œ«à£­ï¼ŽáŸ’𑜫8ó †; 3♮𑜫࣭.្𑜫8; [V5]; xn--3-ksd277tlo7s.xn--8-f0jx021l; ; ; # 3♮𑜫࣭.្𑜫8
-3♮𑜫࣭.្𑜫8ó †; 3♮𑜫࣭.្𑜫8; [V5]; xn--3-ksd277tlo7s.xn--8-f0jx021l; ; ; # 3♮𑜫࣭.្𑜫8
-xn--3-ksd277tlo7s.xn--8-f0jx021l; 3♮𑜫࣭.្𑜫8; [V5]; xn--3-ksd277tlo7s.xn--8-f0jx021l; ; ; # 3♮𑜫࣭.្𑜫8
--。ò•Œ€â€â¡; -.ò•Œ€â€â¡; [C2, P1, V3, V6]; -.xn--1ug800aq795s; ; -.xn--nei54421f; [P1, V3, V6] # -.â¡
--。ò•Œ€â€â¡; -.ò•Œ€â€â¡; [C2, P1, V3, V6]; -.xn--1ug800aq795s; ; -.xn--nei54421f; [P1, V3, V6] # -.â¡
+xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ð©ó ²‰ss.ᢤò„¦Œ\u200Cð¹«; [B1, B5, B6, C1, V5, V6]; xn--ss-zb11ap1427e.xn--ubf609atw1tynn3d; ; ; # ð©ss.ᢤð¹«
+xn--zca3153vupz3e.xn--ubf609atw1tynn3d; ð©ó ²‰ÃŸ.ᢤò„¦Œ\u200Cð¹«; [B1, B5, B6, C1, V5, V6]; xn--zca3153vupz3e.xn--ubf609atw1tynn3d; ; ; # ð©ÃŸ.ᢤð¹«
+ßðµ³ñ—˜á‚§ï½¡\uA67A; ßðµ³ñ—˜á‚§.\uA67A; [B1, B5, V5, V6]; xn--zca491fci5qkn79a.xn--9x8a; ; xn--ss-rek7420r4hs7b.xn--9x8a; # ßႧ.ꙺ
+ßðµ³ñ—˜á‚§ã€‚\uA67A; ßðµ³ñ—˜á‚§.\uA67A; [B1, B5, V5, V6]; xn--zca491fci5qkn79a.xn--9x8a; ; xn--ss-rek7420r4hs7b.xn--9x8a; # ßႧ.ꙺ
+ßðµ³ñ—˜â´‡ã€‚\uA67A; ßðµ³ñ—˜â´‡.\uA67A; [B1, B5, V5, V6]; xn--zca227tpy4lkns1b.xn--9x8a; ; xn--ss-e61ar955h4hs7b.xn--9x8a; # ßⴇ.ꙺ
+SSðµ³ñ—˜á‚§ã€‚\uA67A; ssðµ³ñ—˜á‚§.\uA67A; [B1, B5, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ
+ssðµ³ñ—˜â´‡ã€‚\uA67A; ssðµ³ñ—˜â´‡.\uA67A; [B1, B5, V5, V6]; xn--ss-e61ar955h4hs7b.xn--9x8a; ; ; # ssâ´‡.ꙺ
+Ssðµ³ñ—˜á‚§ã€‚\uA67A; ssðµ³ñ—˜á‚§.\uA67A; [B1, B5, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ
+xn--ss-rek7420r4hs7b.xn--9x8a; ssðµ³ñ—˜á‚§.\uA67A; [B1, B5, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ
+xn--ss-e61ar955h4hs7b.xn--9x8a; ssðµ³ñ—˜â´‡.\uA67A; [B1, B5, V5, V6]; xn--ss-e61ar955h4hs7b.xn--9x8a; ; ; # ssâ´‡.ꙺ
+xn--zca227tpy4lkns1b.xn--9x8a; ßðµ³ñ—˜â´‡.\uA67A; [B1, B5, V5, V6]; xn--zca227tpy4lkns1b.xn--9x8a; ; ; # ßⴇ.ꙺ
+xn--zca491fci5qkn79a.xn--9x8a; ßðµ³ñ—˜á‚§.\uA67A; [B1, B5, V5, V6]; xn--zca491fci5qkn79a.xn--9x8a; ; ; # ßႧ.ꙺ
+ßðµ³ñ—˜â´‡ï½¡\uA67A; ßðµ³ñ—˜â´‡.\uA67A; [B1, B5, V5, V6]; xn--zca227tpy4lkns1b.xn--9x8a; ; xn--ss-e61ar955h4hs7b.xn--9x8a; # ßⴇ.ꙺ
+SSðµ³ñ—˜á‚§ï½¡\uA67A; ssðµ³ñ—˜á‚§.\uA67A; [B1, B5, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ
+ssðµ³ñ—˜â´‡ï½¡\uA67A; ssðµ³ñ—˜â´‡.\uA67A; [B1, B5, V5, V6]; xn--ss-e61ar955h4hs7b.xn--9x8a; ; ; # ssâ´‡.ꙺ
+Ssðµ³ñ—˜á‚§ï½¡\uA67A; ssðµ³ñ—˜á‚§.\uA67A; [B1, B5, V5, V6]; xn--ss-rek7420r4hs7b.xn--9x8a; ; ; # ssႧ.ꙺ
+\u1714。󠆣-𑋪; \u1714.-𑋪; [V3, V5]; xn--fze.xn----ly8i; ; ; # ᜔.-𑋪
+xn--fze.xn----ly8i; \u1714.-𑋪; [V3, V5]; xn--fze.xn----ly8i; ; ; # ᜔.-𑋪
+\uABE8-.ò¨œ\u05BDß; \uABE8-.ò¨œ\u05BDß; [V3, V5, V6]; xn----pw5e.xn--zca50wfv060a; ; xn----pw5e.xn--ss-7jd10716y; # ꯨ-.ֽß
+\uABE8-.ò¨œ\u05BDß; ; [V3, V5, V6]; xn----pw5e.xn--zca50wfv060a; ; xn----pw5e.xn--ss-7jd10716y; # ꯨ-.ֽß
+\uABE8-.ò¨œ\u05BDSS; \uABE8-.ò¨œ\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
+\uABE8-.ò¨œ\u05BDss; ; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
+\uABE8-.ò¨œ\u05BDSs; \uABE8-.ò¨œ\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
+xn----pw5e.xn--ss-7jd10716y; \uABE8-.ò¨œ\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
+xn----pw5e.xn--zca50wfv060a; \uABE8-.ò¨œ\u05BDß; [V3, V5, V6]; xn----pw5e.xn--zca50wfv060a; ; ; # ꯨ-.ֽß
+\uABE8-.ò¨œ\u05BDSS; \uABE8-.ò¨œ\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
+\uABE8-.ò¨œ\u05BDss; \uABE8-.ò¨œ\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
+\uABE8-.ò¨œ\u05BDSs; \uABE8-.ò¨œ\u05BDss; [V3, V5, V6]; xn----pw5e.xn--ss-7jd10716y; ; ; # ꯨ-.Ö½ss
+ᡓ-≮。\u066B󠅱ᡄ; ᡓ-≮.\u066Bᡄ; [B1, B6]; xn----s7j866c.xn--kib252g; ; ; # ᡓ-≮.٫ᡄ
+ᡓ-<\u0338。\u066B󠅱ᡄ; ᡓ-≮.\u066Bᡄ; [B1, B6]; xn----s7j866c.xn--kib252g; ; ; # ᡓ-≮.٫ᡄ
+xn----s7j866c.xn--kib252g; ᡓ-≮.\u066Bᡄ; [B1, B6]; xn----s7j866c.xn--kib252g; ; ; # ᡓ-≮.٫ᡄ
+ðŸ¥â™®ð‘œ«\u08ED.\u17D2𑜫8ó †; 3♮𑜫\u08ED.\u17D2𑜫8; [V5]; xn--3-ksd277tlo7s.xn--8-f0jx021l; ; ; # 3♮𑜫࣭.្𑜫8
+3♮𑜫\u08ED.\u17D2𑜫8ó †; 3♮𑜫\u08ED.\u17D2𑜫8; [V5]; xn--3-ksd277tlo7s.xn--8-f0jx021l; ; ; # 3♮𑜫࣭.្𑜫8
+xn--3-ksd277tlo7s.xn--8-f0jx021l; 3♮𑜫\u08ED.\u17D2𑜫8; [V5]; xn--3-ksd277tlo7s.xn--8-f0jx021l; ; ; # 3♮𑜫࣭.្𑜫8
+-。ò•Œ€\u200Dâ¡; -.ò•Œ€\u200Dâ¡; [C2, V3, V6]; -.xn--1ug800aq795s; ; -.xn--nei54421f; [V3, V6] # -.â¡
+-。ò•Œ€\u200Dâ¡; -.ò•Œ€\u200Dâ¡; [C2, V3, V6]; -.xn--1ug800aq795s; ; -.xn--nei54421f; [V3, V6] # -.â¡
-.xn--nei54421f; -.ò•Œ€â¡; [V3, V6]; -.xn--nei54421f; ; ; # -.â¡
--.xn--1ug800aq795s; -.ò•Œ€â€â¡; [C2, V3, V6]; -.xn--1ug800aq795s; ; ; # -.â¡
-ðŸ“☱ðŸò¥°µï½¡ðª®ñ¡³; 5☱2ò¥°µ.ðª®ñ¡³; [P1, V5, V6]; xn--52-dwx47758j.xn--kd3hk431k; ; ; # 5☱2.ðª®
-5☱2ò¥°µã€‚ðª®ñ¡³; 5☱2ò¥°µ.ðª®ñ¡³; [P1, V5, V6]; xn--52-dwx47758j.xn--kd3hk431k; ; ; # 5☱2.ðª®
+-.xn--1ug800aq795s; -.ò•Œ€\u200Dâ¡; [C2, V3, V6]; -.xn--1ug800aq795s; ; ; # -.â¡
+ðŸ“☱ðŸò¥°µï½¡ðª®ñ¡³; 5☱2ò¥°µ.ðª®ñ¡³; [V5, V6]; xn--52-dwx47758j.xn--kd3hk431k; ; ; # 5☱2.ðª®
+5☱2ò¥°µã€‚ðª®ñ¡³; 5☱2ò¥°µ.ðª®ñ¡³; [V5, V6]; xn--52-dwx47758j.xn--kd3hk431k; ; ; # 5☱2.ðª®
xn--52-dwx47758j.xn--kd3hk431k; 5☱2ò¥°µ.ðª®ñ¡³; [V5, V6]; xn--52-dwx47758j.xn--kd3hk431k; ; ; # 5☱2.ðª®
--.-├򖦣; ; [P1, V3, V6]; -.xn----ukp70432h; ; ; # -.-├
+-.-├򖦣; ; [V3, V6]; -.xn----ukp70432h; ; ; # -.-├
-.xn----ukp70432h; -.-├򖦣; [V3, V6]; -.xn----ukp70432h; ; ; # -.-├
-֥ݭ。â€ó €˜; ֥ݭ.â€ó €˜; [B1, C2, P1, V5, V6]; xn--wcb62g.xn--1ugy8001l; ; xn--wcb62g.xn--p526e; [B1, P1, V5, V6] # ֥ݭ.
-֥ݭ。â€ó €˜; ֥ݭ.â€ó €˜; [B1, C2, P1, V5, V6]; xn--wcb62g.xn--1ugy8001l; ; xn--wcb62g.xn--p526e; [B1, P1, V5, V6] # ֥ݭ.
-xn--wcb62g.xn--p526e; ֥ݭ.󠀘; [B1, V5, V6]; xn--wcb62g.xn--p526e; ; ; # ֥ݭ.
-xn--wcb62g.xn--1ugy8001l; ֥ݭ.â€ó €˜; [B1, C2, V5, V6]; xn--wcb62g.xn--1ugy8001l; ; ; # ֥ݭ.
-쥥ó”‰á‚®ï¼Žâ€Œâ’ˆâ’ˆð«’; 쥥ó”‰á‚®.‌⒈⒈ð«’; [B1, C1, P1, V6]; xn--mnd7865gcy28g.xn--0ug88oa0396u; ; xn--mnd7865gcy28g.xn--tsha6797o; [B1, P1, V6] # 쥥Ⴎ.⒈⒈ð«’
-쥥ó”‰á‚®ï¼Žâ€Œâ’ˆâ’ˆð«’; 쥥ó”‰á‚®.‌⒈⒈ð«’; [B1, C1, P1, V6]; xn--mnd7865gcy28g.xn--0ug88oa0396u; ; xn--mnd7865gcy28g.xn--tsha6797o; [B1, P1, V6] # 쥥Ⴎ.⒈⒈ð«’
-쥥ó”‰á‚®.‌1.1.ð«’; ; [B1, C1, P1, V6]; xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; ; xn--mnd7865gcy28g.1.1.xn--7w9c; [B1, P1, V6] # 쥥Ⴎ.1.1.ð«’
-쥥ó”‰á‚®.‌1.1.ð«’; 쥥ó”‰á‚®.‌1.1.ð«’; [B1, C1, P1, V6]; xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; ; xn--mnd7865gcy28g.1.1.xn--7w9c; [B1, P1, V6] # 쥥Ⴎ.1.1.ð«’
-쥥ó”‰â´Ž.‌1.1.ð«’; 쥥ó”‰â´Ž.‌1.1.ð«’; [B1, C1, P1, V6]; xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; ; xn--5kj3511ccyw3h.1.1.xn--7w9c; [B1, P1, V6] # 쥥ⴎ.1.1.ð«’
-쥥ó”‰â´Ž.‌1.1.ð«’; ; [B1, C1, P1, V6]; xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; ; xn--5kj3511ccyw3h.1.1.xn--7w9c; [B1, P1, V6] # 쥥ⴎ.1.1.ð«’
+\u05A5\u076D。\u200D󠀘; \u05A5\u076D.\u200D󠀘; [B1, C2, V5, V6]; xn--wcb62g.xn--1ugy8001l; ; xn--wcb62g.xn--p526e; [B1, V5, V6] # ֥ݭ.
+\u05A5\u076D。\u200D󠀘; \u05A5\u076D.\u200D󠀘; [B1, C2, V5, V6]; xn--wcb62g.xn--1ugy8001l; ; xn--wcb62g.xn--p526e; [B1, V5, V6] # ֥ݭ.
+xn--wcb62g.xn--p526e; \u05A5\u076D.󠀘; [B1, V5, V6]; xn--wcb62g.xn--p526e; ; ; # ֥ݭ.
+xn--wcb62g.xn--1ugy8001l; \u05A5\u076D.\u200D󠀘; [B1, C2, V5, V6]; xn--wcb62g.xn--1ugy8001l; ; ; # ֥ݭ.
+쥥ó”‰á‚®ï¼Ž\u200C⒈⒈ð«’; 쥥ó”‰á‚®.\u200C⒈⒈ð«’; [B1, C1, V6]; xn--mnd7865gcy28g.xn--0ug88oa0396u; ; xn--mnd7865gcy28g.xn--tsha6797o; [B1, V6] # 쥥Ⴎ.⒈⒈ð«’
+쥥ó”‰á‚®ï¼Ž\u200C⒈⒈ð«’; 쥥ó”‰á‚®.\u200C⒈⒈ð«’; [B1, C1, V6]; xn--mnd7865gcy28g.xn--0ug88oa0396u; ; xn--mnd7865gcy28g.xn--tsha6797o; [B1, V6] # 쥥Ⴎ.⒈⒈ð«’
+쥥ó”‰á‚®.\u200C1.1.ð«’; ; [B1, C1, V6]; xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; ; xn--mnd7865gcy28g.1.1.xn--7w9c; [B1, V6] # 쥥Ⴎ.1.1.ð«’
+쥥ó”‰á‚®.\u200C1.1.ð«’; 쥥ó”‰á‚®.\u200C1.1.ð«’; [B1, C1, V6]; xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; ; xn--mnd7865gcy28g.1.1.xn--7w9c; [B1, V6] # 쥥Ⴎ.1.1.ð«’
+쥥ó”‰â´Ž.\u200C1.1.ð«’; 쥥ó”‰â´Ž.\u200C1.1.ð«’; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; ; xn--5kj3511ccyw3h.1.1.xn--7w9c; [B1, V6] # 쥥ⴎ.1.1.ð«’
+쥥ó”‰â´Ž.\u200C1.1.ð«’; ; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; ; xn--5kj3511ccyw3h.1.1.xn--7w9c; [B1, V6] # 쥥ⴎ.1.1.ð«’
xn--5kj3511ccyw3h.1.1.xn--7w9c; 쥥ó”‰â´Ž.1.1.ð«’; [B1, V6]; xn--5kj3511ccyw3h.1.1.xn--7w9c; ; ; # 쥥ⴎ.1.1.ð«’
-xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; 쥥ó”‰â´Ž.‌1.1.ð«’; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; ; ; # 쥥ⴎ.1.1.ð«’
+xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; 쥥ó”‰â´Ž.\u200C1.1.ð«’; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--1-rgn.1.xn--7w9c; ; ; # 쥥ⴎ.1.1.ð«’
xn--mnd7865gcy28g.1.1.xn--7w9c; 쥥ó”‰á‚®.1.1.ð«’; [B1, V6]; xn--mnd7865gcy28g.1.1.xn--7w9c; ; ; # 쥥Ⴎ.1.1.ð«’
-xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; 쥥ó”‰á‚®.‌1.1.ð«’; [B1, C1, V6]; xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; ; ; # 쥥Ⴎ.1.1.ð«’
-쥥ó”‰â´Žï¼Žâ€Œâ’ˆâ’ˆð«’; 쥥ó”‰â´Ž.‌⒈⒈ð«’; [B1, C1, P1, V6]; xn--5kj3511ccyw3h.xn--0ug88oa0396u; ; xn--5kj3511ccyw3h.xn--tsha6797o; [B1, P1, V6] # 쥥ⴎ.⒈⒈ð«’
-쥥ó”‰â´Žï¼Žâ€Œâ’ˆâ’ˆð«’; 쥥ó”‰â´Ž.‌⒈⒈ð«’; [B1, C1, P1, V6]; xn--5kj3511ccyw3h.xn--0ug88oa0396u; ; xn--5kj3511ccyw3h.xn--tsha6797o; [B1, P1, V6] # 쥥ⴎ.⒈⒈ð«’
+xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; 쥥ó”‰á‚®.\u200C1.1.ð«’; [B1, C1, V6]; xn--mnd7865gcy28g.xn--1-rgn.1.xn--7w9c; ; ; # 쥥Ⴎ.1.1.ð«’
+쥥ó”‰â´Žï¼Ž\u200C⒈⒈ð«’; 쥥ó”‰â´Ž.\u200C⒈⒈ð«’; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--0ug88oa0396u; ; xn--5kj3511ccyw3h.xn--tsha6797o; [B1, V6] # 쥥ⴎ.⒈⒈ð«’
+쥥ó”‰â´Žï¼Ž\u200C⒈⒈ð«’; 쥥ó”‰â´Ž.\u200C⒈⒈ð«’; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--0ug88oa0396u; ; xn--5kj3511ccyw3h.xn--tsha6797o; [B1, V6] # 쥥ⴎ.⒈⒈ð«’
xn--5kj3511ccyw3h.xn--tsha6797o; 쥥ó”‰â´Ž.⒈⒈ð«’; [B1, V6]; xn--5kj3511ccyw3h.xn--tsha6797o; ; ; # 쥥ⴎ.⒈⒈ð«’
-xn--5kj3511ccyw3h.xn--0ug88oa0396u; 쥥ó”‰â´Ž.‌⒈⒈ð«’; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--0ug88oa0396u; ; ; # 쥥ⴎ.⒈⒈ð«’
+xn--5kj3511ccyw3h.xn--0ug88oa0396u; 쥥ó”‰â´Ž.\u200C⒈⒈ð«’; [B1, C1, V6]; xn--5kj3511ccyw3h.xn--0ug88oa0396u; ; ; # 쥥ⴎ.⒈⒈ð«’
xn--mnd7865gcy28g.xn--tsha6797o; 쥥ó”‰á‚®.⒈⒈ð«’; [B1, V6]; xn--mnd7865gcy28g.xn--tsha6797o; ; ; # 쥥Ⴎ.⒈⒈ð«’
-xn--mnd7865gcy28g.xn--0ug88oa0396u; 쥥ó”‰á‚®.‌⒈⒈ð«’; [B1, C1, V6]; xn--mnd7865gcy28g.xn--0ug88oa0396u; ; ; # 쥥Ⴎ.⒈⒈ð«’
-à §ðŸ¶Ú -。𑄳; à §0Ú -.ð‘„³; [B1, B3, B6, V3, V5]; xn--0--p3d67m.xn--v80d; ; ; # à §0Ú -.ð‘„³
-ࠧ0ڠ-。𑄳; ࠧ0ڠ-.𑄳; [B1, B3, B6, V3, V5]; xn--0--p3d67m.xn--v80d; ; ; # ࠧ0ڠ-.𑄳
-xn--0--p3d67m.xn--v80d; à §0Ú -.ð‘„³; [B1, B3, B6, V3, V5]; xn--0--p3d67m.xn--v80d; ; ; # à §0Ú -.ð‘„³
-ς.ï·ðŸž›â’ˆ; Ï‚.Ùمي🞛⒈; [P1, V6]; xn--3xa.xn--dhbip2802atb20c; ; xn--4xa.xn--dhbip2802atb20c; # Ï‚.Ùمي🞛⒈
-Ï‚.Ùمي🞛1.; ; ; xn--3xa.xn--1-gocmu97674d.; ; xn--4xa.xn--1-gocmu97674d.; # Ï‚.Ùمي🞛1.
-Σ.Ùمي🞛1.; σ.Ùمي🞛1.; ; xn--4xa.xn--1-gocmu97674d.; ; ; # σ.Ùمي🞛1.
-σ.Ùمي🞛1.; ; ; xn--4xa.xn--1-gocmu97674d.; ; ; # σ.Ùمي🞛1.
-xn--4xa.xn--1-gocmu97674d.; σ.Ùمي🞛1.; ; xn--4xa.xn--1-gocmu97674d.; ; ; # σ.Ùمي🞛1.
-xn--3xa.xn--1-gocmu97674d.; Ï‚.Ùمي🞛1.; ; xn--3xa.xn--1-gocmu97674d.; ; ; # Ï‚.Ùمي🞛1.
-Σ.ï·ðŸž›â’ˆ; σ.Ùمي🞛⒈; [P1, V6]; xn--4xa.xn--dhbip2802atb20c; ; ; # σ.Ùمي🞛⒈
-σ.ï·ðŸž›â’ˆ; σ.Ùمي🞛⒈; [P1, V6]; xn--4xa.xn--dhbip2802atb20c; ; ; # σ.Ùمي🞛⒈
-xn--4xa.xn--dhbip2802atb20c; σ.Ùمي🞛⒈; [V6]; xn--4xa.xn--dhbip2802atb20c; ; ; # σ.Ùمي🞛⒈
-xn--3xa.xn--dhbip2802atb20c; Ï‚.Ùمي🞛⒈; [V6]; xn--3xa.xn--dhbip2802atb20c; ; ; # Ï‚.Ùمي🞛⒈
-🗩-。ð¹»óž†ñ¥‰®; 🗩-.ð¹»óž†ñ¥‰®; [B1, P1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.ð¹»
-🗩-。ð¹»óž†ñ¥‰®; 🗩-.ð¹»óž†ñ¥‰®; [B1, P1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.ð¹»
+xn--mnd7865gcy28g.xn--0ug88oa0396u; 쥥ó”‰á‚®.\u200C⒈⒈ð«’; [B1, C1, V6]; xn--mnd7865gcy28g.xn--0ug88oa0396u; ; ; # 쥥Ⴎ.⒈⒈ð«’
+\u0827ðŸ¶\u06A0-。𑄳; \u08270\u06A0-.ð‘„³; [B1, V3, V5]; xn--0--p3d67m.xn--v80d; ; ; # à §0Ú -.ð‘„³
+\u08270\u06A0-。𑄳; \u08270\u06A0-.𑄳; [B1, V3, V5]; xn--0--p3d67m.xn--v80d; ; ; # ࠧ0ڠ-.𑄳
+xn--0--p3d67m.xn--v80d; \u08270\u06A0-.ð‘„³; [B1, V3, V5]; xn--0--p3d67m.xn--v80d; ; ; # à §0Ú -.ð‘„³
+ς.\uFDC1🞛⒈; Ï‚.\u0641\u0645\u064A🞛⒈; [V6]; xn--3xa.xn--dhbip2802atb20c; ; xn--4xa.xn--dhbip2802atb20c; # Ï‚.Ùمي🞛⒈
+Ï‚.\u0641\u0645\u064A🞛1.; ; ; xn--3xa.xn--1-gocmu97674d.; ; xn--4xa.xn--1-gocmu97674d.; # Ï‚.Ùمي🞛1.
+Σ.\u0641\u0645\u064A🞛1.; σ.\u0641\u0645\u064A🞛1.; ; xn--4xa.xn--1-gocmu97674d.; ; ; # σ.Ùمي🞛1.
+σ.\u0641\u0645\u064A🞛1.; ; ; xn--4xa.xn--1-gocmu97674d.; ; ; # σ.Ùمي🞛1.
+xn--4xa.xn--1-gocmu97674d.; σ.\u0641\u0645\u064A🞛1.; ; xn--4xa.xn--1-gocmu97674d.; ; ; # σ.Ùمي🞛1.
+xn--3xa.xn--1-gocmu97674d.; Ï‚.\u0641\u0645\u064A🞛1.; ; xn--3xa.xn--1-gocmu97674d.; ; ; # Ï‚.Ùمي🞛1.
+Σ.\uFDC1🞛⒈; σ.\u0641\u0645\u064A🞛⒈; [V6]; xn--4xa.xn--dhbip2802atb20c; ; ; # σ.Ùمي🞛⒈
+σ.\uFDC1🞛⒈; σ.\u0641\u0645\u064A🞛⒈; [V6]; xn--4xa.xn--dhbip2802atb20c; ; ; # σ.Ùمي🞛⒈
+xn--4xa.xn--dhbip2802atb20c; σ.\u0641\u0645\u064A🞛⒈; [V6]; xn--4xa.xn--dhbip2802atb20c; ; ; # σ.Ùمي🞛⒈
+xn--3xa.xn--dhbip2802atb20c; Ï‚.\u0641\u0645\u064A🞛⒈; [V6]; xn--3xa.xn--dhbip2802atb20c; ; ; # Ï‚.Ùمي🞛⒈
+🗩-。ð¹»óž†ñ¥‰®; 🗩-.ð¹»óž†ñ¥‰®; [B1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.ð¹»
+🗩-。ð¹»óž†ñ¥‰®; 🗩-.ð¹»óž†ñ¥‰®; [B1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.ð¹»
xn----6t3s.xn--zo0d4811u6ru6a; 🗩-.ð¹»óž†ñ¥‰®; [B1, V3, V6]; xn----6t3s.xn--zo0d4811u6ru6a; ; ; # 🗩-.ð¹»
-ð¡œ-🔪。ðŸ»â€Œð¿€; ð¡œ-🔪.5‌ð¿€; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3] # ð¡œ-🔪.5ð¿€
-ð¡œ-🔪。5‌ð¿€; ð¡œ-🔪.5‌ð¿€; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3] # ð¡œ-🔪.5ð¿€
+ð¡œ-🔪。ðŸ»\u200Cð¿€; ð¡œ-🔪.5\u200Cð¿€; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3] # ð¡œ-🔪.5ð¿€
+ð¡œ-🔪。5\u200Cð¿€; ð¡œ-🔪.5\u200Cð¿€; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; xn----5j4iv089c.xn--5-bn7i; [B1, B3] # ð¡œ-🔪.5ð¿€
xn----5j4iv089c.xn--5-bn7i; ð¡œ-🔪.5ð¿€; [B1, B3]; xn----5j4iv089c.xn--5-bn7i; ; ; # ð¡œ-🔪.5ð¿€
-xn----5j4iv089c.xn--5-sgn7149h; ð¡œ-🔪.5‌ð¿€; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; ; # ð¡œ-🔪.5ð¿€
-ð¹£ëŠ¿â€ÃŸï¼Žß0Ö¼; ð¹£ëŠ¿â€ÃŸ.ß0Ö¼; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ÃŸ.ß0Ö¼
-ð¹£á„‚ᅴᆺâ€ÃŸï¼Žß0Ö¼; ð¹£ëŠ¿â€ÃŸ.ß0Ö¼; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ÃŸ.ß0Ö¼
-ð¹£ëŠ¿â€ÃŸ.ß0Ö¼; ; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ÃŸ.ß0Ö¼
-ð¹£á„‚ᅴᆺâ€ÃŸ.ß0Ö¼; ð¹£ëŠ¿â€ÃŸ.ß0Ö¼; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ÃŸ.ß0Ö¼
-ð¹£á„‚ᅴᆺâ€SS.ß0Ö¼; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-ð¹£ëŠ¿â€SS.ß0Ö¼; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-ð¹£ëŠ¿â€ss.ß0Ö¼; ; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-ð¹£á„‚ᅴᆺâ€ss.ß0Ö¼; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-xn--ss-i05i7041a.xn--0-vgc50n; ð¹£ëŠ¿ss.ß0Ö¼; [B1]; xn--ss-i05i7041a.xn--0-vgc50n; ; ; # ð¹£ëŠ¿ss.ß0Ö¼
-xn--ss-l1tu910fo0xd.xn--0-vgc50n; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; ; # ð¹£ëŠ¿ss.ß0Ö¼
-ð¹£ëŠ¿â€Ss.ß0Ö¼; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-ð¹£á„‚ᅴᆺâ€Ss.ß0Ö¼; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-xn--zca770n5s4hev6c.xn--0-vgc50n; ð¹£ëŠ¿â€ÃŸ.ß0Ö¼; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; ; # ð¹£ëŠ¿ÃŸ.ß0Ö¼
-ð¹£á„‚ᅴᆺâ€SS.ß0Ö¼; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-ð¹£ëŠ¿â€SS.ß0Ö¼; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-ð¹£ëŠ¿â€ss.ß0Ö¼; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-ð¹£á„‚ᅴᆺâ€ss.ß0Ö¼; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-ð¹£ëŠ¿â€Ss.ß0Ö¼; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-ð¹£á„‚ᅴᆺâ€Ss.ß0Ö¼; ð¹£ëŠ¿â€ss.ß0Ö¼; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
-9󠇥.󪴴ᢓ; 9.󪴴ᢓ; [P1, V6]; 9.xn--dbf91222q; ; ; # 9.ᢓ
-9󠇥.󪴴ᢓ; 9.󪴴ᢓ; [P1, V6]; 9.xn--dbf91222q; ; ; # 9.ᢓ
+xn----5j4iv089c.xn--5-sgn7149h; ð¡œ-🔪.5\u200Cð¿€; [B1, B3, C1]; xn----5j4iv089c.xn--5-sgn7149h; ; ; # ð¡œ-🔪.5ð¿€
+ð¹£ëŠ¿\u200Dß.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dß.\u07CF0\u05BC; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ÃŸ.ß0Ö¼
+ð¹£á„‚ᅴᆺ\u200Dß.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dß.\u07CF0\u05BC; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ÃŸ.ß0Ö¼
+ð¹£ëŠ¿\u200Dß.\u07CF0\u05BC; ; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ÃŸ.ß0Ö¼
+ð¹£á„‚ᅴᆺ\u200Dß.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dß.\u07CF0\u05BC; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ÃŸ.ß0Ö¼
+ð¹£á„‚ᅴᆺ\u200DSS.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+ð¹£ëŠ¿\u200DSS.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; ; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+ð¹£á„‚ᅴᆺ\u200Dss.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+xn--ss-i05i7041a.xn--0-vgc50n; ð¹£ëŠ¿ss.\u07CF0\u05BC; [B1]; xn--ss-i05i7041a.xn--0-vgc50n; ; ; # ð¹£ëŠ¿ss.ß0Ö¼
+xn--ss-l1tu910fo0xd.xn--0-vgc50n; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; ; # ð¹£ëŠ¿ss.ß0Ö¼
+ð¹£ëŠ¿\u200DSs.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+ð¹£á„‚ᅴᆺ\u200DSs.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+xn--zca770n5s4hev6c.xn--0-vgc50n; ð¹£ëŠ¿\u200Dß.\u07CF0\u05BC; [B1, C2]; xn--zca770n5s4hev6c.xn--0-vgc50n; ; ; # ð¹£ëŠ¿ÃŸ.ß0Ö¼
+ð¹£á„‚ᅴᆺ\u200DSS.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+ð¹£ëŠ¿\u200DSS.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+ð¹£á„‚ᅴᆺ\u200Dss.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+ð¹£ëŠ¿\u200DSs.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+ð¹£á„‚ᅴᆺ\u200DSs.\u07CF0\u05BC; ð¹£ëŠ¿\u200Dss.\u07CF0\u05BC; [B1, C2]; xn--ss-l1tu910fo0xd.xn--0-vgc50n; ; xn--ss-i05i7041a.xn--0-vgc50n; [B1] # ð¹£ëŠ¿ss.ß0Ö¼
+9󠇥.󪴴ᢓ; 9.󪴴ᢓ; [V6]; 9.xn--dbf91222q; ; ; # 9.ᢓ
+9󠇥.󪴴ᢓ; 9.󪴴ᢓ; [V6]; 9.xn--dbf91222q; ; ; # 9.ᢓ
9.xn--dbf91222q; 9.󪴴ᢓ; [V6]; 9.xn--dbf91222q; ; ; # 9.ᢓ
-‌ᅠ.ð«­ðŸ —ß⽟; ‌ᅠ.ð«­ðŸ —ß玉; [B1, B2, B3, C1, P1, V6]; xn--0ug7719f.xn--zca2289c550e0iwi; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, P1, V6] # .ð«­ðŸ —ß玉
-‌ᅠ.ð«­ðŸ —ß玉; ; [B1, B2, B3, C1, P1, V6]; xn--psd526e.xn--zca2289c550e0iwi; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, P1, V6] # .ð«­ðŸ —ß玉
-‌ᅠ.ð«­ðŸ —SS玉; ‌ᅠ.ð«­ðŸ —ss玉; [B1, B2, B3, C1, P1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, P1, V6] # .ð«­ðŸ —ss玉
-‌ᅠ.ð«­ðŸ —ss玉; ; [B1, B2, B3, C1, P1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, P1, V6] # .ð«­ðŸ —ss玉
-‌ᅠ.ð«­ðŸ —Ss玉; ‌ᅠ.ð«­ðŸ —ss玉; [B1, B2, B3, C1, P1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, P1, V6] # .ð«­ðŸ —ss玉
-xn--psd.xn--ss-je6eq954cp25j; á… .ð«­ðŸ —ss玉; [B2, B3, V6]; xn--psd.xn--ss-je6eq954cp25j; ; ; # .ð«­ðŸ —ss玉
-xn--psd526e.xn--ss-je6eq954cp25j; ‌ᅠ.ð«­ðŸ —ss玉; [B1, B2, B3, C1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; ; # .ð«­ðŸ —ss玉
-xn--psd526e.xn--zca2289c550e0iwi; ‌ᅠ.ð«­ðŸ —ß玉; [B1, B2, B3, C1, V6]; xn--psd526e.xn--zca2289c550e0iwi; ; ; # .ð«­ðŸ —ß玉
-‌ᅠ.ð«­ðŸ —SS⽟; ‌ᅠ.ð«­ðŸ —ss玉; [B1, B2, B3, C1, P1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, P1, V6] # .ð«­ðŸ —ss玉
-‌ᅠ.ð«­ðŸ —ss⽟; ‌ᅠ.ð«­ðŸ —ss玉; [B1, B2, B3, C1, P1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, P1, V6] # .ð«­ðŸ —ss玉
-‌ᅠ.ð«­ðŸ —Ss⽟; ‌ᅠ.ð«­ðŸ —ss玉; [B1, B2, B3, C1, P1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, P1, V6] # .ð«­ðŸ —ss玉
-xn--cl7c.xn--ss-je6eq954cp25j; ï¾ .ð«­ðŸ —ss玉; [B2, B3, V6]; xn--cl7c.xn--ss-je6eq954cp25j; ; ; # .ð«­ðŸ —ss玉
-xn--0ug7719f.xn--ss-je6eq954cp25j; ‌ᅠ.ð«­ðŸ —ss玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; ; # .ð«­ðŸ —ss玉
-xn--0ug7719f.xn--zca2289c550e0iwi; ‌ᅠ.ð«­ðŸ —ß玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--zca2289c550e0iwi; ; ; # .ð«­ðŸ —ß玉
-︒Ⴖͦ.‌; ︒Ⴖͦ.‌; [C1, P1, V6]; xn--hva929dl29p.xn--0ug; ; xn--hva929dl29p.; [P1, V6] # ︒Ⴖͦ.
-。Ⴖͦ.‌; .Ⴖͦ.‌; [C1, P1, V6, X4_2]; .xn--hva929d.xn--0ug; [C1, P1, V6, A4_2]; .xn--hva929d.; [P1, V6, A4_2] # .Ⴖͦ.
-。ⴖͦ.‌; .ⴖͦ.‌; [C1, X4_2]; .xn--hva754s.xn--0ug; [C1, A4_2]; .xn--hva754s.; [A4_2] # .ⴖͦ.
-.xn--hva754s.; .ⴖͦ.; [X4_2]; .xn--hva754s.; [A4_2]; ; # .ⴖͦ.
-.xn--hva754s.xn--0ug; .ⴖͦ.‌; [C1, X4_2]; .xn--hva754s.xn--0ug; [C1, A4_2]; ; # .ⴖͦ.
-.xn--hva929d.; .Ⴖͦ.; [V6, X4_2]; .xn--hva929d.; [V6, A4_2]; ; # .Ⴖͦ.
-.xn--hva929d.xn--0ug; .Ⴖͦ.‌; [C1, V6, X4_2]; .xn--hva929d.xn--0ug; [C1, V6, A4_2]; ; # .Ⴖͦ.
-︒ⴖͦ.‌; ︒ⴖͦ.‌; [C1, P1, V6]; xn--hva754sy94k.xn--0ug; ; xn--hva754sy94k.; [P1, V6] # ︒ⴖͦ.
-xn--hva754sy94k.; ︒ⴖͦ.; [V6]; xn--hva754sy94k.; ; ; # ︒ⴖͦ.
-xn--hva754sy94k.xn--0ug; ︒ⴖͦ.‌; [C1, V6]; xn--hva754sy94k.xn--0ug; ; ; # ︒ⴖͦ.
-xn--hva929dl29p.; ︒Ⴖͦ.; [V6]; xn--hva929dl29p.; ; ; # ︒Ⴖͦ.
-xn--hva929dl29p.xn--0ug; ︒Ⴖͦ.‌; [C1, V6]; xn--hva929dl29p.xn--0ug; ; ; # ︒Ⴖͦ.
-xn--hva754s.; ⴖͦ.; ; xn--hva754s.; ; ; # ⴖͦ.
-ⴖͦ.; ; ; xn--hva754s.; ; ; # ⴖͦ.
-Ⴖͦ.; ; [P1, V6]; xn--hva929d.; ; ; # Ⴖͦ.
-xn--hva929d.; Ⴖͦ.; [V6]; xn--hva929d.; ; ; # Ⴖͦ.
-ࢻ.‌Ⴃ𞀒; ࢻ.‌Ⴃ𞀒; [B1, C1, P1, V6]; xn--hzb.xn--bnd300f7225a; ; xn--hzb.xn--bnd2938u; [P1, V6] # ࢻ.Ⴃ𞀒
-ࢻ.‌Ⴃ𞀒; ; [B1, C1, P1, V6]; xn--hzb.xn--bnd300f7225a; ; xn--hzb.xn--bnd2938u; [P1, V6] # ࢻ.Ⴃ𞀒
-ࢻ.‌ⴃ𞀒; ; [B1, C1]; xn--hzb.xn--0ug822cp045a; ; xn--hzb.xn--ukj4430l; [] # ࢻ.ⴃ𞀒
-xn--hzb.xn--ukj4430l; ࢻ.ⴃ𞀒; ; xn--hzb.xn--ukj4430l; ; ; # ࢻ.ⴃ𞀒
-ࢻ.ⴃ𞀒; ; ; xn--hzb.xn--ukj4430l; ; ; # ࢻ.ⴃ𞀒
-ࢻ.Ⴃ𞀒; ; [P1, V6]; xn--hzb.xn--bnd2938u; ; ; # ࢻ.Ⴃ𞀒
-xn--hzb.xn--bnd2938u; ࢻ.Ⴃ𞀒; [V6]; xn--hzb.xn--bnd2938u; ; ; # ࢻ.Ⴃ𞀒
-xn--hzb.xn--0ug822cp045a; ࢻ.‌ⴃ𞀒; [B1, C1]; xn--hzb.xn--0ug822cp045a; ; ; # ࢻ.ⴃ𞀒
-xn--hzb.xn--bnd300f7225a; ࢻ.‌Ⴃ𞀒; [B1, C1, V6]; xn--hzb.xn--bnd300f7225a; ; ; # ࢻ.Ⴃ𞀒
-ࢻ.‌ⴃ𞀒; ࢻ.‌ⴃ𞀒; [B1, C1]; xn--hzb.xn--0ug822cp045a; ; xn--hzb.xn--ukj4430l; [] # ࢻ.ⴃ𞀒
-â€â€Œã€‚ï¼’ä«·ó §·; â€â€Œ.2ä«·ó §·; [C1, C2, P1, V6]; xn--0ugb.xn--2-me5ay1273i; ; .xn--2-me5ay1273i; [P1, V6, A4_2] # .2ä«·
-â€â€Œã€‚2ä«·ó §·; â€â€Œ.2ä«·ó §·; [C1, C2, P1, V6]; xn--0ugb.xn--2-me5ay1273i; ; .xn--2-me5ay1273i; [P1, V6, A4_2] # .2ä«·
+\u200C\uFFA0.ð«­ðŸ —ß⽟; \u200C\uFFA0.ð«­ðŸ —ß玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--zca2289c550e0iwi; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, V6] # .ð«­ðŸ —ß玉
+\u200C\u1160.ð«­ðŸ —ß玉; ; [B1, B2, B3, C1, V6]; xn--psd526e.xn--zca2289c550e0iwi; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, V6] # .ð«­ðŸ —ß玉
+\u200C\u1160.ð«­ðŸ —SS玉; \u200C\u1160.ð«­ðŸ —ss玉; [B1, B2, B3, C1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, V6] # .ð«­ðŸ —ss玉
+\u200C\u1160.ð«­ðŸ —ss玉; ; [B1, B2, B3, C1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, V6] # .ð«­ðŸ —ss玉
+\u200C\u1160.ð«­ðŸ —Ss玉; \u200C\u1160.ð«­ðŸ —ss玉; [B1, B2, B3, C1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; xn--psd.xn--ss-je6eq954cp25j; [B2, B3, V6] # .ð«­ðŸ —ss玉
+xn--psd.xn--ss-je6eq954cp25j; \u1160.ð«­ðŸ —ss玉; [B2, B3, V6]; xn--psd.xn--ss-je6eq954cp25j; ; ; # .ð«­ðŸ —ss玉
+xn--psd526e.xn--ss-je6eq954cp25j; \u200C\u1160.ð«­ðŸ —ss玉; [B1, B2, B3, C1, V6]; xn--psd526e.xn--ss-je6eq954cp25j; ; ; # .ð«­ðŸ —ss玉
+xn--psd526e.xn--zca2289c550e0iwi; \u200C\u1160.ð«­ðŸ —ß玉; [B1, B2, B3, C1, V6]; xn--psd526e.xn--zca2289c550e0iwi; ; ; # .ð«­ðŸ —ß玉
+\u200C\uFFA0.ð«­ðŸ —SS⽟; \u200C\uFFA0.ð«­ðŸ —ss玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, V6] # .ð«­ðŸ —ss玉
+\u200C\uFFA0.ð«­ðŸ —ss⽟; \u200C\uFFA0.ð«­ðŸ —ss玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, V6] # .ð«­ðŸ —ss玉
+\u200C\uFFA0.ð«­ðŸ —Ss⽟; \u200C\uFFA0.ð«­ðŸ —ss玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; xn--cl7c.xn--ss-je6eq954cp25j; [B2, B3, V6] # .ð«­ðŸ —ss玉
+xn--cl7c.xn--ss-je6eq954cp25j; \uFFA0.ð«­ðŸ —ss玉; [B2, B3, V6]; xn--cl7c.xn--ss-je6eq954cp25j; ; ; # .ð«­ðŸ —ss玉
+xn--0ug7719f.xn--ss-je6eq954cp25j; \u200C\uFFA0.ð«­ðŸ —ss玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--ss-je6eq954cp25j; ; ; # .ð«­ðŸ —ss玉
+xn--0ug7719f.xn--zca2289c550e0iwi; \u200C\uFFA0.ð«­ðŸ —ß玉; [B1, B2, B3, C1, V6]; xn--0ug7719f.xn--zca2289c550e0iwi; ; ; # .ð«­ðŸ —ß玉
+︒Ⴖ\u0366.\u200C; ︒Ⴖ\u0366.\u200C; [C1, V6]; xn--hva929dl29p.xn--0ug; ; xn--hva929dl29p.; [V6] # ︒Ⴖͦ.
+。Ⴖ\u0366.\u200C; .Ⴖ\u0366.\u200C; [C1, V6, X4_2]; .xn--hva929d.xn--0ug; [C1, V6, A4_2]; .xn--hva929d.; [V6, A4_2] # .Ⴖͦ.
+。ⴖ\u0366.\u200C; .ⴖ\u0366.\u200C; [C1, X4_2]; .xn--hva754s.xn--0ug; [C1, A4_2]; .xn--hva754s.; [A4_2] # .ⴖͦ.
+.xn--hva754s.; .ⴖ\u0366.; [X4_2]; .xn--hva754s.; [A4_2]; ; # .ⴖͦ.
+.xn--hva754s.xn--0ug; .ⴖ\u0366.\u200C; [C1, X4_2]; .xn--hva754s.xn--0ug; [C1, A4_2]; ; # .ⴖͦ.
+.xn--hva929d.; .Ⴖ\u0366.; [V6, X4_2]; .xn--hva929d.; [V6, A4_2]; ; # .Ⴖͦ.
+.xn--hva929d.xn--0ug; .Ⴖ\u0366.\u200C; [C1, V6, X4_2]; .xn--hva929d.xn--0ug; [C1, V6, A4_2]; ; # .Ⴖͦ.
+︒ⴖ\u0366.\u200C; ︒ⴖ\u0366.\u200C; [C1, V6]; xn--hva754sy94k.xn--0ug; ; xn--hva754sy94k.; [V6] # ︒ⴖͦ.
+xn--hva754sy94k.; ︒ⴖ\u0366.; [V6]; xn--hva754sy94k.; ; ; # ︒ⴖͦ.
+xn--hva754sy94k.xn--0ug; ︒ⴖ\u0366.\u200C; [C1, V6]; xn--hva754sy94k.xn--0ug; ; ; # ︒ⴖͦ.
+xn--hva929dl29p.; ︒Ⴖ\u0366.; [V6]; xn--hva929dl29p.; ; ; # ︒Ⴖͦ.
+xn--hva929dl29p.xn--0ug; ︒Ⴖ\u0366.\u200C; [C1, V6]; xn--hva929dl29p.xn--0ug; ; ; # ︒Ⴖͦ.
+xn--hva754s.; ⴖ\u0366.; ; xn--hva754s.; ; ; # ⴖͦ.
+ⴖ\u0366.; ; ; xn--hva754s.; ; ; # ⴖͦ.
+Ⴖ\u0366.; ; [V6]; xn--hva929d.; ; ; # Ⴖͦ.
+xn--hva929d.; Ⴖ\u0366.; [V6]; xn--hva929d.; ; ; # Ⴖͦ.
+\u08BB.\u200CႣ𞀒; \u08BB.\u200CႣ𞀒; [B1, C1, V6]; xn--hzb.xn--bnd300f7225a; ; xn--hzb.xn--bnd2938u; [V6] # ࢻ.Ⴃ𞀒
+\u08BB.\u200CႣ𞀒; ; [B1, C1, V6]; xn--hzb.xn--bnd300f7225a; ; xn--hzb.xn--bnd2938u; [V6] # ࢻ.Ⴃ𞀒
+\u08BB.\u200Cⴃ𞀒; ; [B1, C1]; xn--hzb.xn--0ug822cp045a; ; xn--hzb.xn--ukj4430l; [] # ࢻ.ⴃ𞀒
+xn--hzb.xn--ukj4430l; \u08BB.ⴃ𞀒; ; xn--hzb.xn--ukj4430l; ; ; # ࢻ.ⴃ𞀒
+\u08BB.ⴃ𞀒; ; ; xn--hzb.xn--ukj4430l; ; ; # ࢻ.ⴃ𞀒
+\u08BB.Ⴃ𞀒; ; [V6]; xn--hzb.xn--bnd2938u; ; ; # ࢻ.Ⴃ𞀒
+xn--hzb.xn--bnd2938u; \u08BB.Ⴃ𞀒; [V6]; xn--hzb.xn--bnd2938u; ; ; # ࢻ.Ⴃ𞀒
+xn--hzb.xn--0ug822cp045a; \u08BB.\u200Cⴃ𞀒; [B1, C1]; xn--hzb.xn--0ug822cp045a; ; ; # ࢻ.ⴃ𞀒
+xn--hzb.xn--bnd300f7225a; \u08BB.\u200CႣ𞀒; [B1, C1, V6]; xn--hzb.xn--bnd300f7225a; ; ; # ࢻ.Ⴃ𞀒
+\u08BB.\u200Cⴃ𞀒; \u08BB.\u200Cⴃ𞀒; [B1, C1]; xn--hzb.xn--0ug822cp045a; ; xn--hzb.xn--ukj4430l; [] # ࢻ.ⴃ𞀒
+\u200D\u200C。2䫷󠧷; \u200D\u200C.2䫷󠧷; [C1, C2, V6]; xn--0ugb.xn--2-me5ay1273i; ; .xn--2-me5ay1273i; [V6, A4_2] # .2䫷
+\u200D\u200C。2䫷󠧷; \u200D\u200C.2䫷󠧷; [C1, C2, V6]; xn--0ugb.xn--2-me5ay1273i; ; .xn--2-me5ay1273i; [V6, A4_2] # .2䫷
.xn--2-me5ay1273i; .2ä«·ó §·; [V6, X4_2]; .xn--2-me5ay1273i; [V6, A4_2]; ; # .2ä«·
-xn--0ugb.xn--2-me5ay1273i; â€â€Œ.2ä«·ó §·; [C1, C2, V6]; xn--0ugb.xn--2-me5ay1273i; ; ; # .2ä«·
--𞀤óœ ã€‚òˆ¬–; -𞀤óœ .òˆ¬–; [P1, V3, V6]; xn----rq4re4997d.xn--l707b; ; ; # -𞀤.
+xn--0ugb.xn--2-me5ay1273i; \u200D\u200C.2ä«·ó §·; [C1, C2, V6]; xn--0ugb.xn--2-me5ay1273i; ; ; # .2ä«·
+-𞀤óœ ã€‚òˆ¬–; -𞀤óœ .òˆ¬–; [V3, V6]; xn----rq4re4997d.xn--l707b; ; ; # -𞀤.
xn----rq4re4997d.xn--l707b; -𞀤óœ .òˆ¬–; [V3, V6]; xn----rq4re4997d.xn--l707b; ; ; # -𞀤.
-󳛂︒‌㟀.ؤ⒈; 󳛂︒‌㟀.ؤ⒈; [C1, P1, V6]; xn--0ug754gxl4ldlt0k.xn--jgb476m; ; xn--etlt457ccrq7h.xn--jgb476m; [P1, V6] # ︒㟀.ؤ⒈
-󳛂︒‌㟀.ؤ⒈; 󳛂︒‌㟀.ؤ⒈; [C1, P1, V6]; xn--0ug754gxl4ldlt0k.xn--jgb476m; ; xn--etlt457ccrq7h.xn--jgb476m; [P1, V6] # ︒㟀.ؤ⒈
-󳛂。‌㟀.ؤ1.; 󳛂.‌㟀.ؤ1.; [B1, C1, P1, V6]; xn--z272f.xn--0ug754g.xn--1-smc.; ; xn--z272f.xn--etl.xn--1-smc.; [P1, V6] # .㟀.ؤ1.
-󳛂。‌㟀.ؤ1.; 󳛂.‌㟀.ؤ1.; [B1, C1, P1, V6]; xn--z272f.xn--0ug754g.xn--1-smc.; ; xn--z272f.xn--etl.xn--1-smc.; [P1, V6] # .㟀.ؤ1.
-xn--z272f.xn--etl.xn--1-smc.; 󳛂.㟀.ؤ1.; [V6]; xn--z272f.xn--etl.xn--1-smc.; ; ; # .㟀.ؤ1.
-xn--z272f.xn--0ug754g.xn--1-smc.; 󳛂.‌㟀.ؤ1.; [B1, C1, V6]; xn--z272f.xn--0ug754g.xn--1-smc.; ; ; # .㟀.ؤ1.
-xn--etlt457ccrq7h.xn--jgb476m; 󳛂︒㟀.ؤ⒈; [V6]; xn--etlt457ccrq7h.xn--jgb476m; ; ; # ︒㟀.ؤ⒈
-xn--0ug754gxl4ldlt0k.xn--jgb476m; 󳛂︒‌㟀.ؤ⒈; [C1, V6]; xn--0ug754gxl4ldlt0k.xn--jgb476m; ; ; # ︒㟀.ؤ⒈
-𑲜ߊð…¼ã€‚-â€; 𑲜ߊð…¼.-â€; [B1, C2, V3, V5]; xn--lsb5482l7nre.xn----ugn; ; xn--lsb5482l7nre.-; [B1, V3, V5] # 𑲜ߊð…¼.-
-xn--lsb5482l7nre.-; 𑲜ߊð…¼.-; [B1, V3, V5]; xn--lsb5482l7nre.-; ; ; # 𑲜ߊð…¼.-
-xn--lsb5482l7nre.xn----ugn; 𑲜ߊð…¼.-â€; [B1, C2, V3, V5]; xn--lsb5482l7nre.xn----ugn; ; ; # 𑲜ߊð…¼.-
-‌.Ⴉ≠ð«¶; ‌.Ⴉ≠ð«¶; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, P1, V6, A4_2] # .Ⴉ≠ð«¶
-‌.Ⴉ≠ð«¶; ‌.Ⴉ≠ð«¶; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, P1, V6, A4_2] # .Ⴉ≠ð«¶
-‌.Ⴉ≠ð«¶; ; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, P1, V6, A4_2] # .Ⴉ≠ð«¶
-‌.á‚©≠ð«¶; ‌.Ⴉ≠ð«¶; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, P1, V6, A4_2] # .Ⴉ≠ð«¶
-‌.â´‰≠ð«¶; ‌.ⴉ≠ð«¶; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, P1, V6, A4_2] # .ⴉ≠ð«¶
-‌.ⴉ≠ð«¶; ; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, P1, V6, A4_2] # .ⴉ≠ð«¶
-.xn--1chx23bzj4p; .ⴉ≠ð«¶; [B5, B6, V6, X4_2]; .xn--1chx23bzj4p; [B5, B6, V6, A4_2]; ; # .ⴉ≠ð«¶
-xn--0ug.xn--1chx23bzj4p; ‌.ⴉ≠ð«¶; [B1, B5, B6, C1, V6]; xn--0ug.xn--1chx23bzj4p; ; ; # .ⴉ≠ð«¶
+󳛂︒\u200C㟀.\u0624⒈; 󳛂︒\u200C㟀.\u0624⒈; [C1, V6]; xn--0ug754gxl4ldlt0k.xn--jgb476m; ; xn--etlt457ccrq7h.xn--jgb476m; [V6] # ︒㟀.ؤ⒈
+󳛂︒\u200C㟀.\u0648\u0654⒈; 󳛂︒\u200C㟀.\u0624⒈; [C1, V6]; xn--0ug754gxl4ldlt0k.xn--jgb476m; ; xn--etlt457ccrq7h.xn--jgb476m; [V6] # ︒㟀.ؤ⒈
+󳛂。\u200C㟀.\u06241.; 󳛂.\u200C㟀.\u06241.; [B1, C1, V6]; xn--z272f.xn--0ug754g.xn--1-smc.; ; xn--z272f.xn--etl.xn--1-smc.; [V6] # .㟀.ؤ1.
+󳛂。\u200C㟀.\u0648\u06541.; 󳛂.\u200C㟀.\u06241.; [B1, C1, V6]; xn--z272f.xn--0ug754g.xn--1-smc.; ; xn--z272f.xn--etl.xn--1-smc.; [V6] # .㟀.ؤ1.
+xn--z272f.xn--etl.xn--1-smc.; 󳛂.㟀.\u06241.; [V6]; xn--z272f.xn--etl.xn--1-smc.; ; ; # .㟀.ؤ1.
+xn--z272f.xn--0ug754g.xn--1-smc.; 󳛂.\u200C㟀.\u06241.; [B1, C1, V6]; xn--z272f.xn--0ug754g.xn--1-smc.; ; ; # .㟀.ؤ1.
+xn--etlt457ccrq7h.xn--jgb476m; 󳛂︒㟀.\u0624⒈; [V6]; xn--etlt457ccrq7h.xn--jgb476m; ; ; # ︒㟀.ؤ⒈
+xn--0ug754gxl4ldlt0k.xn--jgb476m; 󳛂︒\u200C㟀.\u0624⒈; [C1, V6]; xn--0ug754gxl4ldlt0k.xn--jgb476m; ; ; # ︒㟀.ؤ⒈
+𑲜\u07CAð…¼ã€‚-\u200D; 𑲜\u07CAð…¼.-\u200D; [B1, C2, V3, V5]; xn--lsb5482l7nre.xn----ugn; ; xn--lsb5482l7nre.-; [B1, V3, V5] # 𑲜ߊð…¼.-
+xn--lsb5482l7nre.-; 𑲜\u07CAð…¼.-; [B1, V3, V5]; xn--lsb5482l7nre.-; ; ; # 𑲜ߊð…¼.-
+xn--lsb5482l7nre.xn----ugn; 𑲜\u07CAð…¼.-\u200D; [B1, C2, V3, V5]; xn--lsb5482l7nre.xn----ugn; ; ; # 𑲜ߊð…¼.-
+\u200C.Ⴉ≠ð«¶; \u200C.Ⴉ≠ð«¶; [B1, B5, B6, C1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, V6, A4_2] # .Ⴉ≠ð«¶
+\u200C.Ⴉ=\u0338ð«¶; \u200C.Ⴉ≠ð«¶; [B1, B5, B6, C1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, V6, A4_2] # .Ⴉ≠ð«¶
+\u200C.Ⴉ≠ð«¶; ; [B1, B5, B6, C1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, V6, A4_2] # .Ⴉ≠ð«¶
+\u200C.á‚©=\u0338ð«¶; \u200C.Ⴉ≠ð«¶; [B1, B5, B6, C1, V6]; xn--0ug.xn--hnd481gv73o; ; .xn--hnd481gv73o; [B5, B6, V6, A4_2] # .Ⴉ≠ð«¶
+\u200C.â´‰=\u0338ð«¶; \u200C.ⴉ≠ð«¶; [B1, B5, B6, C1]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, A4_2] # .ⴉ≠ð«¶
+\u200C.ⴉ≠ð«¶; ; [B1, B5, B6, C1]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, A4_2] # .ⴉ≠ð«¶
+.xn--1chx23bzj4p; .ⴉ≠ð«¶; [B5, B6, X4_2]; .xn--1chx23bzj4p; [B5, B6, A4_2]; ; # .ⴉ≠ð«¶
+xn--0ug.xn--1chx23bzj4p; \u200C.ⴉ≠ð«¶; [B1, B5, B6, C1]; xn--0ug.xn--1chx23bzj4p; ; ; # .ⴉ≠ð«¶
.xn--hnd481gv73o; .Ⴉ≠ð«¶; [B5, B6, V6, X4_2]; .xn--hnd481gv73o; [B5, B6, V6, A4_2]; ; # .Ⴉ≠ð«¶
-xn--0ug.xn--hnd481gv73o; ‌.Ⴉ≠ð«¶; [B1, B5, B6, C1, V6]; xn--0ug.xn--hnd481gv73o; ; ; # .Ⴉ≠ð«¶
-‌.ⴉ≠ð«¶; ‌.ⴉ≠ð«¶; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, P1, V6, A4_2] # .ⴉ≠ð«¶
-‌.ⴉ≠ð«¶; ‌.ⴉ≠ð«¶; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, P1, V6, A4_2] # .ⴉ≠ð«¶
-Ý。≯ς; Ý.≯ς; [B1, P1, V6]; xn--3ob.xn--3xa918m; ; xn--3ob.xn--4xa718m; # Ý.≯ς
-Ý。≯ς; Ý.≯ς; [B1, P1, V6]; xn--3ob.xn--3xa918m; ; xn--3ob.xn--4xa718m; # Ý.≯ς
-Ý。≯Σ; Ý.≯σ; [B1, P1, V6]; xn--3ob.xn--4xa718m; ; ; # Ý.≯σ
-Ý。≯Σ; Ý.≯σ; [B1, P1, V6]; xn--3ob.xn--4xa718m; ; ; # Ý.≯σ
-Ý。≯σ; Ý.≯σ; [B1, P1, V6]; xn--3ob.xn--4xa718m; ; ; # Ý.≯σ
-Ý。≯σ; Ý.≯σ; [B1, P1, V6]; xn--3ob.xn--4xa718m; ; ; # Ý.≯σ
-xn--3ob.xn--4xa718m; Ý.≯σ; [B1, V6]; xn--3ob.xn--4xa718m; ; ; # Ý.≯σ
-xn--3ob.xn--3xa918m; Ý.≯ς; [B1, V6]; xn--3ob.xn--3xa918m; ; ; # Ý.≯ς
-ß¼ð¸†.ð“–︒ñŠ¨©á‚°; ; [P1, V6]; xn--0tb8725k.xn--ond3562jt18a7py9c; ; ; # .︒Ⴐ
-ß¼ð¸†.ð“–。ñŠ¨©á‚°; ß¼ð¸†.ð“–.ñŠ¨©á‚°; [P1, V6]; xn--0tb8725k.xn--tu8d.xn--ond97931d; ; ; # ..á‚°
-ß¼ð¸†.ð“–。ñŠ¨©â´; ß¼ð¸†.ð“–.ñŠ¨©â´; [P1, V6]; xn--0tb8725k.xn--tu8d.xn--7kj73887a; ; ; # ..â´
-xn--0tb8725k.xn--tu8d.xn--7kj73887a; ß¼ð¸†.ð“–.ñŠ¨©â´; [V6]; xn--0tb8725k.xn--tu8d.xn--7kj73887a; ; ; # ..â´
-xn--0tb8725k.xn--tu8d.xn--ond97931d; ß¼ð¸†.ð“–.ñŠ¨©á‚°; [V6]; xn--0tb8725k.xn--tu8d.xn--ond97931d; ; ; # ..á‚°
-ß¼ð¸†.ð“–︒ñŠ¨©â´; ; [P1, V6]; xn--0tb8725k.xn--7kj9008dt18a7py9c; ; ; # .︒â´
-xn--0tb8725k.xn--7kj9008dt18a7py9c; ß¼ð¸†.ð“–︒ñŠ¨©â´; [V6]; xn--0tb8725k.xn--7kj9008dt18a7py9c; ; ; # .︒â´
-xn--0tb8725k.xn--ond3562jt18a7py9c; ß¼ð¸†.ð“–︒ñŠ¨©á‚°; [V6]; xn--0tb8725k.xn--ond3562jt18a7py9c; ; ; # .︒Ⴐ
-Ⴥ⚭󠖫⋃。𑌼; Ⴥ⚭󠖫⋃.𑌼; [P1, V5, V6]; xn--9nd623g4zc5z060c.xn--ro1d; ; ; # Ⴥ⚭⋃.𑌼
-Ⴥ⚭󠖫⋃。𑌼; Ⴥ⚭󠖫⋃.𑌼; [P1, V5, V6]; xn--9nd623g4zc5z060c.xn--ro1d; ; ; # Ⴥ⚭⋃.𑌼
-ⴥ⚭󠖫⋃。𑌼; ⴥ⚭󠖫⋃.𑌼; [P1, V5, V6]; xn--vfh16m67gx1162b.xn--ro1d; ; ; # ⴥ⚭⋃.𑌼
+xn--0ug.xn--hnd481gv73o; \u200C.Ⴉ≠ð«¶; [B1, B5, B6, C1, V6]; xn--0ug.xn--hnd481gv73o; ; ; # .Ⴉ≠ð«¶
+\u200C.ⴉ=\u0338ð«¶; \u200C.ⴉ≠ð«¶; [B1, B5, B6, C1]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, A4_2] # .ⴉ≠ð«¶
+\u200C.ⴉ≠ð«¶; \u200C.ⴉ≠ð«¶; [B1, B5, B6, C1]; xn--0ug.xn--1chx23bzj4p; ; .xn--1chx23bzj4p; [B5, B6, A4_2] # .ⴉ≠ð«¶
+\u0750。≯ς; \u0750.≯ς; [B1]; xn--3ob.xn--3xa918m; ; xn--3ob.xn--4xa718m; # Ý.≯ς
+\u0750。>\u0338Ï‚; \u0750.≯ς; [B1]; xn--3ob.xn--3xa918m; ; xn--3ob.xn--4xa718m; # Ý.≯ς
+\u0750。>\u0338Σ; \u0750.≯σ; [B1]; xn--3ob.xn--4xa718m; ; ; # Ý.≯σ
+\u0750。≯Σ; \u0750.≯σ; [B1]; xn--3ob.xn--4xa718m; ; ; # Ý.≯σ
+\u0750。≯σ; \u0750.≯σ; [B1]; xn--3ob.xn--4xa718m; ; ; # Ý.≯σ
+\u0750。>\u0338σ; \u0750.≯σ; [B1]; xn--3ob.xn--4xa718m; ; ; # Ý.≯σ
+xn--3ob.xn--4xa718m; \u0750.≯σ; [B1]; xn--3ob.xn--4xa718m; ; ; # Ý.≯σ
+xn--3ob.xn--3xa918m; \u0750.≯ς; [B1]; xn--3ob.xn--3xa918m; ; ; # Ý.≯ς
+\u07FCð¸†.ð“–︒ñŠ¨©á‚°; ; [V6]; xn--0tb8725k.xn--ond3562jt18a7py9c; ; ; # .︒Ⴐ
+\u07FCð¸†.ð“–。ñŠ¨©á‚°; \u07FCð¸†.ð“–.ñŠ¨©á‚°; [V6]; xn--0tb8725k.xn--tu8d.xn--ond97931d; ; ; # ..á‚°
+\u07FCð¸†.ð“–。ñŠ¨©â´; \u07FCð¸†.ð“–.ñŠ¨©â´; [V6]; xn--0tb8725k.xn--tu8d.xn--7kj73887a; ; ; # ..â´
+xn--0tb8725k.xn--tu8d.xn--7kj73887a; \u07FCð¸†.ð“–.ñŠ¨©â´; [V6]; xn--0tb8725k.xn--tu8d.xn--7kj73887a; ; ; # ..â´
+xn--0tb8725k.xn--tu8d.xn--ond97931d; \u07FCð¸†.ð“–.ñŠ¨©á‚°; [V6]; xn--0tb8725k.xn--tu8d.xn--ond97931d; ; ; # ..á‚°
+\u07FCð¸†.ð“–︒ñŠ¨©â´; ; [V6]; xn--0tb8725k.xn--7kj9008dt18a7py9c; ; ; # .︒â´
+xn--0tb8725k.xn--7kj9008dt18a7py9c; \u07FCð¸†.ð“–︒ñŠ¨©â´; [V6]; xn--0tb8725k.xn--7kj9008dt18a7py9c; ; ; # .︒â´
+xn--0tb8725k.xn--ond3562jt18a7py9c; \u07FCð¸†.ð“–︒ñŠ¨©á‚°; [V6]; xn--0tb8725k.xn--ond3562jt18a7py9c; ; ; # .︒Ⴐ
+Ⴥ⚭󠖫⋃。𑌼; Ⴥ⚭󠖫⋃.𑌼; [V5, V6]; xn--9nd623g4zc5z060c.xn--ro1d; ; ; # Ⴥ⚭⋃.𑌼
+Ⴥ⚭󠖫⋃。𑌼; Ⴥ⚭󠖫⋃.𑌼; [V5, V6]; xn--9nd623g4zc5z060c.xn--ro1d; ; ; # Ⴥ⚭⋃.𑌼
+ⴥ⚭󠖫⋃。𑌼; ⴥ⚭󠖫⋃.𑌼; [V5, V6]; xn--vfh16m67gx1162b.xn--ro1d; ; ; # ⴥ⚭⋃.𑌼
xn--vfh16m67gx1162b.xn--ro1d; ⴥ⚭󠖫⋃.𑌼; [V5, V6]; xn--vfh16m67gx1162b.xn--ro1d; ; ; # ⴥ⚭⋃.𑌼
xn--9nd623g4zc5z060c.xn--ro1d; Ⴥ⚭󠖫⋃.𑌼; [V5, V6]; xn--9nd623g4zc5z060c.xn--ro1d; ; ; # Ⴥ⚭⋃.𑌼
-ⴥ⚭󠖫⋃。𑌼; ⴥ⚭󠖫⋃.𑌼; [P1, V5, V6]; xn--vfh16m67gx1162b.xn--ro1d; ; ; # ⴥ⚭⋃.𑌼
-🄈。󠷳ࡄ; 🄈.󠷳ࡄ; [B1, P1, V6]; xn--107h.xn--2vb13094p; ; ; # 🄈.ࡄ
-7,。󠷳ࡄ; 7,.󠷳ࡄ; [B1, P1, V6]; 7,.xn--2vb13094p; ; ; # 7,.ࡄ
-7,.xn--2vb13094p; 7,.󠷳ࡄ; [B1, P1, V6]; 7,.xn--2vb13094p; ; ; # 7,.ࡄ
-xn--107h.xn--2vb13094p; 🄈.󠷳ࡄ; [B1, V6]; xn--107h.xn--2vb13094p; ; ; # 🄈.ࡄ
-≮ࡆ。섖쮖ß; ≮ࡆ.섖쮖ß; [B1, P1, V6]; xn--4vb505k.xn--zca7259goug; ; xn--4vb505k.xn--ss-5z4j006a; # ≮ࡆ.섖쮖ß
-≮ࡆ。섖á„ᅰᆽß; ≮ࡆ.섖쮖ß; [B1, P1, V6]; xn--4vb505k.xn--zca7259goug; ; xn--4vb505k.xn--ss-5z4j006a; # ≮ࡆ.섖쮖ß
-≮ࡆ。섖á„ᅰᆽSS; ≮ࡆ.ì„–ì®–ss; [B1, P1, V6]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.ì„–ì®–ss
-≮ࡆ。섖쮖SS; ≮ࡆ.섖쮖ss; [B1, P1, V6]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss
-≮ࡆ。섖쮖ss; ≮ࡆ.섖쮖ss; [B1, P1, V6]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss
-≮ࡆ。섖á„ᅰᆽss; ≮ࡆ.ì„–ì®–ss; [B1, P1, V6]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.ì„–ì®–ss
-xn--4vb505k.xn--ss-5z4j006a; ≮ࡆ.섖쮖ss; [B1, V6]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss
-≮ࡆ。섖쮖Ss; ≮ࡆ.섖쮖ss; [B1, P1, V6]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss
-≮ࡆ。섖á„ᅰᆽSs; ≮ࡆ.ì„–ì®–ss; [B1, P1, V6]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.ì„–ì®–ss
-xn--4vb505k.xn--zca7259goug; ≮ࡆ.섖쮖ß; [B1, V6]; xn--4vb505k.xn--zca7259goug; ; ; # ≮ࡆ.섖쮖ß
+ⴥ⚭󠖫⋃。𑌼; ⴥ⚭󠖫⋃.𑌼; [V5, V6]; xn--vfh16m67gx1162b.xn--ro1d; ; ; # ⴥ⚭⋃.𑌼
+🄈。󠷳\u0844; 🄈.󠷳\u0844; [B1, V6]; xn--107h.xn--2vb13094p; ; ; # 🄈.ࡄ
+7,。󠷳\u0844; 7,.󠷳\u0844; [B1, V6]; 7,.xn--2vb13094p; ; ; # 7,.ࡄ
+7,.xn--2vb13094p; 7,.ó ·³\u0844; [B1, V6]; 7,.xn--2vb13094p; ; ; # 7,.à¡„
+xn--107h.xn--2vb13094p; 🄈.󠷳\u0844; [B1, V6]; xn--107h.xn--2vb13094p; ; ; # 🄈.ࡄ
+≮\u0846。섖쮖ß; ≮\u0846.섖쮖ß; [B1]; xn--4vb505k.xn--zca7259goug; ; xn--4vb505k.xn--ss-5z4j006a; # ≮ࡆ.섖쮖ß
+<\u0338\u0846。섖á„ᅰᆽß; ≮\u0846.섖쮖ß; [B1]; xn--4vb505k.xn--zca7259goug; ; xn--4vb505k.xn--ss-5z4j006a; # ≮ࡆ.섖쮖ß
+<\u0338\u0846。섖á„ᅰᆽSS; ≮\u0846.ì„–ì®–ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.ì„–ì®–ss
+≮\u0846。섖쮖SS; ≮\u0846.섖쮖ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss
+≮\u0846。섖쮖ss; ≮\u0846.섖쮖ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss
+<\u0338\u0846。섖á„ᅰᆽss; ≮\u0846.ì„–ì®–ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.ì„–ì®–ss
+xn--4vb505k.xn--ss-5z4j006a; ≮\u0846.섖쮖ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss
+≮\u0846。섖쮖Ss; ≮\u0846.섖쮖ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.섖쮖ss
+<\u0338\u0846。섖á„ᅰᆽSs; ≮\u0846.ì„–ì®–ss; [B1]; xn--4vb505k.xn--ss-5z4j006a; ; ; # ≮ࡆ.ì„–ì®–ss
+xn--4vb505k.xn--zca7259goug; ≮\u0846.섖쮖ß; [B1]; xn--4vb505k.xn--zca7259goug; ; ; # ≮ࡆ.섖쮖ß
󠆓â›-。ꡒ; â›-.ê¡’; [V3]; xn----o9p.xn--rc9a; ; ; # â›-.ê¡’
xn----o9p.xn--rc9a; â›-.ê¡’; [V3]; xn----o9p.xn--rc9a; ; ; # â›-.ê¡’
-Þ»ð¹³Ø¦ð‘†ã€‚ࢧڰ‌ᢒ; Þ»ð¹³Ø¦ð‘†.ࢧڰ‌ᢒ; [B2, B3, P1, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1azih; ; xn--lgb32f2753cosb.xn--jkb91hlz1a; # ð¹³Ø¦ð‘†.ࢧڰᢒ
-Þ»ð¹³ÙŠð‘†Ù”。ࢧڰ‌ᢒ; Þ»ð¹³Ø¦ð‘†.ࢧڰ‌ᢒ; [B2, B3, P1, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1azih; ; xn--lgb32f2753cosb.xn--jkb91hlz1a; # ð¹³Ø¦ð‘†.ࢧڰᢒ
-xn--lgb32f2753cosb.xn--jkb91hlz1a; Þ»ð¹³Ø¦ð‘†.ࢧڰᢒ; [B2, B3, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1a; ; ; # ð¹³Ø¦ð‘†.ࢧڰᢒ
-xn--lgb32f2753cosb.xn--jkb91hlz1azih; Þ»ð¹³Ø¦ð‘†.ࢧڰ‌ᢒ; [B2, B3, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1azih; ; ; # ð¹³Ø¦ð‘†.ࢧڰᢒ
-à –.ð¨•ðšš•; ; [B1, B2, B3, B6, P1, V5, V6]; xn--rub.xn--tr9c248x; ; ; # à –.ð¨•
-xn--rub.xn--tr9c248x; à –.ð¨•ðšš•; [B1, B2, B3, B6, V5, V6]; xn--rub.xn--tr9c248x; ; ; # à –.ð¨•
---。𽊆ݧð½‹ðž ¬; --.𽊆ݧð½‹ðž ¬; [B1, B5, B6, P1, V3, V6]; --.xn--rpb6226k77pfh58p; ; ; # --.ݧð½‹ðž ¬
---.xn--rpb6226k77pfh58p; --.𽊆ݧð½‹ðž ¬; [B1, B5, B6, V3, V6]; --.xn--rpb6226k77pfh58p; ; ; # --.ݧð½‹ðž ¬
-ò›­¦ð‹¥ð¹¸.≯ࢰࢦ󔛣; ; [B1, P1, V6]; xn--887c2298i5mv6a.xn--vybt688qm8981a; ; ; # ð‹¥.≯ࢰࢦ
-ò›­¦ð‹¥ð¹¸.≯ࢰࢦ󔛣; ò›­¦ð‹¥ð¹¸.≯ࢰࢦ󔛣; [B1, P1, V6]; xn--887c2298i5mv6a.xn--vybt688qm8981a; ; ; # ð‹¥.≯ࢰࢦ
-xn--887c2298i5mv6a.xn--vybt688qm8981a; ò›­¦ð‹¥ð¹¸.≯ࢰࢦ󔛣; [B1, V6]; xn--887c2298i5mv6a.xn--vybt688qm8981a; ; ; # ð‹¥.≯ࢰࢦ
-ä”›ó ‡’ò¤¸žð¹§ï¼Ž-䤷; ä”›ò¤¸žð¹§.-䤷; [B1, B5, B6, P1, V3, V6]; xn--2loy662coo60e.xn----0n4a; ; ; # ä”›ð¹§.-䤷
-ä”›ó ‡’ò¤¸žð¹§.-䤷; ä”›ò¤¸žð¹§.-䤷; [B1, B5, B6, P1, V3, V6]; xn--2loy662coo60e.xn----0n4a; ; ; # ä”›ð¹§.-䤷
+\u07BBð¹³\u0626ð‘†ã€‚\u08A7\u06B0\u200Cᢒ; \u07BBð¹³\u0626ð‘†.\u08A7\u06B0\u200Cᢒ; [B2, B3, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1azih; ; xn--lgb32f2753cosb.xn--jkb91hlz1a; # ð¹³Ø¦ð‘†.ࢧڰᢒ
+\u07BBð¹³\u064Að‘†\u0654。\u08A7\u06B0\u200Cᢒ; \u07BBð¹³\u0626ð‘†.\u08A7\u06B0\u200Cᢒ; [B2, B3, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1azih; ; xn--lgb32f2753cosb.xn--jkb91hlz1a; # ð¹³Ø¦ð‘†.ࢧڰᢒ
+xn--lgb32f2753cosb.xn--jkb91hlz1a; \u07BBð¹³\u0626ð‘†.\u08A7\u06B0ᢒ; [B2, B3, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1a; ; ; # ð¹³Ø¦ð‘†.ࢧڰᢒ
+xn--lgb32f2753cosb.xn--jkb91hlz1azih; \u07BBð¹³\u0626ð‘†.\u08A7\u06B0\u200Cᢒ; [B2, B3, V6]; xn--lgb32f2753cosb.xn--jkb91hlz1azih; ; ; # ð¹³Ø¦ð‘†.ࢧڰᢒ
+\u0816.ð¨•ðšš•; ; [B1, B2, B3, V5, V6]; xn--rub.xn--tr9c248x; ; ; # à –.ð¨•
+xn--rub.xn--tr9c248x; \u0816.ð¨•ðšš•; [B1, B2, B3, V5, V6]; xn--rub.xn--tr9c248x; ; ; # à –.ð¨•
+--。𽊆\u0767ð½‹ðž ¬; --.𽊆\u0767ð½‹ðž ¬; [B1, B5, B6, V3, V6]; --.xn--rpb6226k77pfh58p; ; ; # --.ݧð½‹ðž ¬
+--.xn--rpb6226k77pfh58p; --.𽊆\u0767ð½‹ðž ¬; [B1, B5, B6, V3, V6]; --.xn--rpb6226k77pfh58p; ; ; # --.ݧð½‹ðž ¬
+ò›­¦ð‹¥ð¹¸.≯\u08B0\u08A6󔛣; ; [B1, V6]; xn--887c2298i5mv6a.xn--vybt688qm8981a; ; ; # ð‹¥.≯ࢰࢦ
+ò›­¦ð‹¥ð¹¸.>\u0338\u08B0\u08A6󔛣; ò›­¦ð‹¥ð¹¸.≯\u08B0\u08A6󔛣; [B1, V6]; xn--887c2298i5mv6a.xn--vybt688qm8981a; ; ; # ð‹¥.≯ࢰࢦ
+xn--887c2298i5mv6a.xn--vybt688qm8981a; ò›­¦ð‹¥ð¹¸.≯\u08B0\u08A6󔛣; [B1, V6]; xn--887c2298i5mv6a.xn--vybt688qm8981a; ; ; # ð‹¥.≯ࢰࢦ
+ä”›ó ‡’ò¤¸žð¹§ï¼Ž-䤷; ä”›ò¤¸žð¹§.-䤷; [B1, B5, B6, V3, V6]; xn--2loy662coo60e.xn----0n4a; ; ; # ä”›ð¹§.-䤷
+ä”›ó ‡’ò¤¸žð¹§.-䤷; ä”›ò¤¸žð¹§.-䤷; [B1, B5, B6, V3, V6]; xn--2loy662coo60e.xn----0n4a; ; ; # ä”›ð¹§.-䤷
xn--2loy662coo60e.xn----0n4a; ä”›ò¤¸žð¹§.-䤷; [B1, B5, B6, V3, V6]; xn--2loy662coo60e.xn----0n4a; ; ; # ä”›ð¹§.-䤷
-ð¹©ï¼Žâ€-; ð¹©.â€-; [B1, C2, V3]; xn--ho0d.xn----tgn; ; xn--ho0d.-; [B1, V3] # ð¹©.-
-ð¹©.â€-; ; [B1, C2, V3]; xn--ho0d.xn----tgn; ; xn--ho0d.-; [B1, V3] # ð¹©.-
+ð¹©ï¼Ž\u200D-; ð¹©.\u200D-; [B1, C2, V3]; xn--ho0d.xn----tgn; ; xn--ho0d.-; [B1, V3] # ð¹©.-
+ð¹©.\u200D-; ; [B1, C2, V3]; xn--ho0d.xn----tgn; ; xn--ho0d.-; [B1, V3] # ð¹©.-
xn--ho0d.-; ð¹©.-; [B1, V3]; xn--ho0d.-; ; ; # ð¹©.-
-xn--ho0d.xn----tgn; ð¹©.â€-; [B1, C2, V3]; xn--ho0d.xn----tgn; ; ; # ð¹©.-
-ñ‚ˆ¦å¸·ï½¡â‰¯èºá·ˆ-; ñ‚ˆ¦å¸·.≯èºá·ˆ-; [P1, V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯èºá·ˆ-
-ñ‚ˆ¦å¸·ï½¡≯èºá·ˆ-; ñ‚ˆ¦å¸·.≯èºá·ˆ-; [P1, V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯èºá·ˆ-
-ñ‚ˆ¦å¸·ã€‚≯èºá·ˆ-; ñ‚ˆ¦å¸·.≯èºá·ˆ-; [P1, V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯èºá·ˆ-
-ñ‚ˆ¦å¸·ã€‚≯èºá·ˆ-; ñ‚ˆ¦å¸·.≯èºá·ˆ-; [P1, V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯èºá·ˆ-
-xn--qutw175s.xn----mimu6tf67j; ñ‚ˆ¦å¸·.≯èºá·ˆ-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯èºá·ˆ-
-â€æ”Œê¯­ã€‚ᢖ-Ⴘ; â€æ”Œê¯­.ᢖ-Ⴘ; [C2, P1, V6]; xn--1ug592ykp6b.xn----k1g451d; ; xn--p9ut19m.xn----k1g451d; [P1, V6] # 攌꯭.ᢖ-Ⴘ
-â€æ”Œê¯­ã€‚ᢖ-â´˜; â€æ”Œê¯­.ᢖ-â´˜; [C2]; xn--1ug592ykp6b.xn----mck373i; ; xn--p9ut19m.xn----mck373i; [] # 攌꯭.ᢖ-â´˜
-xn--p9ut19m.xn----mck373i; 攌꯭.ᢖ-ⴘ; ; xn--p9ut19m.xn----mck373i; ; ; # 攌꯭.ᢖ-ⴘ
-攌꯭.ᢖ-ⴘ; ; ; xn--p9ut19m.xn----mck373i; ; ; # 攌꯭.ᢖ-ⴘ
-攌꯭.ᢖ-Ⴘ; ; [P1, V6]; xn--p9ut19m.xn----k1g451d; ; ; # 攌꯭.ᢖ-Ⴘ
-xn--p9ut19m.xn----k1g451d; 攌꯭.ᢖ-Ⴘ; [V6]; xn--p9ut19m.xn----k1g451d; ; ; # 攌꯭.ᢖ-Ⴘ
-xn--1ug592ykp6b.xn----mck373i; â€æ”Œê¯­.ᢖ-â´˜; [C2]; xn--1ug592ykp6b.xn----mck373i; ; ; # 攌꯭.ᢖ-â´˜
-xn--1ug592ykp6b.xn----k1g451d; â€æ”Œê¯­.ᢖ-Ⴘ; [C2, V6]; xn--1ug592ykp6b.xn----k1g451d; ; ; # 攌꯭.ᢖ-Ⴘ
-‌ꖨ.⒗3툒۳; ‌ꖨ.⒗3툒۳; [C1, P1, V6]; xn--0ug2473c.xn--3-nyc678tu07m; ; xn--9r8a.xn--3-nyc678tu07m; [P1, V6] # ꖨ.⒗3툒۳
-‌ꖨ.⒗3á„ᅭᆩ۳; ‌ꖨ.â’—3툒۳; [C1, P1, V6]; xn--0ug2473c.xn--3-nyc678tu07m; ; xn--9r8a.xn--3-nyc678tu07m; [P1, V6] # ê–¨.â’—3툒۳
-‌ꖨ.16.3툒۳; ; [C1]; xn--0ug2473c.16.xn--3-nyc0117m; ; xn--9r8a.16.xn--3-nyc0117m; [] # ꖨ.16.3툒۳
-‌ꖨ.16.3á„ᅭᆩ۳; ‌ꖨ.16.3툒۳; [C1]; xn--0ug2473c.16.xn--3-nyc0117m; ; xn--9r8a.16.xn--3-nyc0117m; [] # ê–¨.16.3툒۳
+xn--ho0d.xn----tgn; ð¹©.\u200D-; [B1, C2, V3]; xn--ho0d.xn----tgn; ; ; # ð¹©.-
+ñ‚ˆ¦å¸·ï½¡â‰¯èº\u1DC8-; ñ‚ˆ¦å¸·.≯èº\u1DC8-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯èºá·ˆ-
+ñ‚ˆ¦å¸·ï½¡>\u0338èº\u1DC8-; ñ‚ˆ¦å¸·.≯èº\u1DC8-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯èºá·ˆ-
+ñ‚ˆ¦å¸·ã€‚≯èº\u1DC8-; ñ‚ˆ¦å¸·.≯èº\u1DC8-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯èºá·ˆ-
+ñ‚ˆ¦å¸·ã€‚>\u0338èº\u1DC8-; ñ‚ˆ¦å¸·.≯èº\u1DC8-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯èºá·ˆ-
+xn--qutw175s.xn----mimu6tf67j; ñ‚ˆ¦å¸·.≯èº\u1DC8-; [V3, V6]; xn--qutw175s.xn----mimu6tf67j; ; ; # 帷.≯èºá·ˆ-
+\u200D攌\uABED。ᢖ-Ⴘ; \u200D攌\uABED.ᢖ-Ⴘ; [C2, V6]; xn--1ug592ykp6b.xn----k1g451d; ; xn--p9ut19m.xn----k1g451d; [V6] # 攌꯭.ᢖ-Ⴘ
+\u200D攌\uABED。ᢖ-ⴘ; \u200D攌\uABED.ᢖ-ⴘ; [C2]; xn--1ug592ykp6b.xn----mck373i; ; xn--p9ut19m.xn----mck373i; [] # 攌꯭.ᢖ-ⴘ
+xn--p9ut19m.xn----mck373i; 攌\uABED.ᢖ-ⴘ; ; xn--p9ut19m.xn----mck373i; ; ; # 攌꯭.ᢖ-ⴘ
+攌\uABED.ᢖ-ⴘ; ; ; xn--p9ut19m.xn----mck373i; ; ; # 攌꯭.ᢖ-ⴘ
+攌\uABED.ᢖ-Ⴘ; ; [V6]; xn--p9ut19m.xn----k1g451d; ; ; # 攌꯭.ᢖ-Ⴘ
+xn--p9ut19m.xn----k1g451d; 攌\uABED.ᢖ-Ⴘ; [V6]; xn--p9ut19m.xn----k1g451d; ; ; # 攌꯭.ᢖ-Ⴘ
+xn--1ug592ykp6b.xn----mck373i; \u200D攌\uABED.ᢖ-ⴘ; [C2]; xn--1ug592ykp6b.xn----mck373i; ; ; # 攌꯭.ᢖ-ⴘ
+xn--1ug592ykp6b.xn----k1g451d; \u200D攌\uABED.ᢖ-Ⴘ; [C2, V6]; xn--1ug592ykp6b.xn----k1g451d; ; ; # 攌꯭.ᢖ-Ⴘ
+\u200Cꖨ.⒗3툒۳; \u200Cꖨ.⒗3툒۳; [C1, V6]; xn--0ug2473c.xn--3-nyc678tu07m; ; xn--9r8a.xn--3-nyc678tu07m; [V6] # ꖨ.⒗3툒۳
+\u200Cꖨ.⒗3á„ᅭᆩ۳; \u200Cê–¨.â’—3툒۳; [C1, V6]; xn--0ug2473c.xn--3-nyc678tu07m; ; xn--9r8a.xn--3-nyc678tu07m; [V6] # ê–¨.â’—3툒۳
+\u200Cꖨ.16.3툒۳; ; [C1]; xn--0ug2473c.16.xn--3-nyc0117m; ; xn--9r8a.16.xn--3-nyc0117m; [] # ꖨ.16.3툒۳
+\u200Cê–¨.16.3á„ᅭᆩ۳; \u200Cê–¨.16.3툒۳; [C1]; xn--0ug2473c.16.xn--3-nyc0117m; ; xn--9r8a.16.xn--3-nyc0117m; [] # ê–¨.16.3툒۳
xn--9r8a.16.xn--3-nyc0117m; ꖨ.16.3툒۳; ; xn--9r8a.16.xn--3-nyc0117m; ; ; # ꖨ.16.3툒۳
ꖨ.16.3툒۳; ; ; xn--9r8a.16.xn--3-nyc0117m; ; ; # ꖨ.16.3툒۳
ê–¨.16.3á„ᅭᆩ۳; ê–¨.16.3툒۳; ; xn--9r8a.16.xn--3-nyc0117m; ; ; # ê–¨.16.3툒۳
-xn--0ug2473c.16.xn--3-nyc0117m; ‌ꖨ.16.3툒۳; [C1]; xn--0ug2473c.16.xn--3-nyc0117m; ; ; # ꖨ.16.3툒۳
+xn--0ug2473c.16.xn--3-nyc0117m; \u200Cꖨ.16.3툒۳; [C1]; xn--0ug2473c.16.xn--3-nyc0117m; ; ; # ꖨ.16.3툒۳
xn--9r8a.xn--3-nyc678tu07m; ꖨ.⒗3툒۳; [V6]; xn--9r8a.xn--3-nyc678tu07m; ; ; # ꖨ.⒗3툒۳
-xn--0ug2473c.xn--3-nyc678tu07m; ‌ꖨ.⒗3툒۳; [C1, V6]; xn--0ug2473c.xn--3-nyc678tu07m; ; ; # ꖨ.⒗3툒۳
-⒈걾6.ð±Û; ; [B1, P1, V6]; xn--6-dcps419c.xn--glb1794k; ; ; # ⒈걾6.ð±Û
-⒈걾6.ð±Û; ⒈걾6.ð±Û; [B1, P1, V6]; xn--6-dcps419c.xn--glb1794k; ; ; # ⒈걾6.ð±Û
-1.ê±¾6.ð±Û; ; [B1]; 1.xn--6-945e.xn--glb1794k; ; ; # 1.ê±¾6.ð±Û
-1.걾6.ð±Û; 1.ê±¾6.ð±Û; [B1]; 1.xn--6-945e.xn--glb1794k; ; ; # 1.ê±¾6.ð±Û
-1.xn--6-945e.xn--glb1794k; 1.ê±¾6.ð±Û; [B1]; 1.xn--6-945e.xn--glb1794k; ; ; # 1.ê±¾6.ð±Û
-xn--6-dcps419c.xn--glb1794k; ⒈걾6.ð±Û; [B1, V6]; xn--6-dcps419c.xn--glb1794k; ; ; # ⒈걾6.ð±Û
-ð²žðŸ¶â‰®â‰®.󠀧ع; ð³ž0≮≮.󠀧ع; [B1, B3, P1, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
-ð²žðŸ¶≮≮.󠀧ع; ð³ž0≮≮.󠀧ع; [B1, B3, P1, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
-ð²ž0≮≮.󠀧ع; ð³ž0≮≮.󠀧ع; [B1, B3, P1, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
-ð²ž0≮≮.󠀧ع; ð³ž0≮≮.󠀧ع; [B1, B3, P1, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
-ð³ž0≮≮.󠀧ع; ð³ž0≮≮.󠀧ع; [B1, B3, P1, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
-ð³ž0≮≮.󠀧ع; ; [B1, B3, P1, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
-xn--0-ngoa5711v.xn--4gb31034p; ð³ž0≮≮.󠀧ع; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
-ð³žðŸ¶≮≮.󠀧ع; ð³ž0≮≮.󠀧ع; [B1, B3, P1, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
-ð³žðŸ¶â‰®â‰®.󠀧ع; ð³ž0≮≮.󠀧ع; [B1, B3, P1, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
-à«£.ð¹ºá…Ÿ; ; [B1, B3, B6, P1, V5, V6]; xn--8fc.xn--osd3070k; ; ; # à«£.ð¹º
-xn--8fc.xn--osd3070k; à«£.ð¹ºá…Ÿ; [B1, B3, B6, V5, V6]; xn--8fc.xn--osd3070k; ; ; # à«£.ð¹º
-ðŸð¨™â¸–.â€; 1ð¨™â¸–.â€; [C2]; xn--1-5bt6845n.xn--1ug; ; xn--1-5bt6845n.; [] # 1ð¨™â¸–.
-1ð¨™â¸–.â€; ; [C2]; xn--1-5bt6845n.xn--1ug; ; xn--1-5bt6845n.; [] # 1ð¨™â¸–.
+xn--0ug2473c.xn--3-nyc678tu07m; \u200Cꖨ.⒗3툒۳; [C1, V6]; xn--0ug2473c.xn--3-nyc678tu07m; ; ; # ꖨ.⒗3툒۳
+⒈걾6.ð±\u06D0; ; [B1, V6]; xn--6-dcps419c.xn--glb1794k; ; ; # ⒈걾6.ð±Û
+⒈걾6.ð±\u06D0; ⒈걾6.ð±\u06D0; [B1, V6]; xn--6-dcps419c.xn--glb1794k; ; ; # ⒈걾6.ð±Û
+1.ê±¾6.ð±\u06D0; ; [B1]; 1.xn--6-945e.xn--glb1794k; ; ; # 1.ê±¾6.ð±Û
+1.걾6.ð±\u06D0; 1.ê±¾6.ð±\u06D0; [B1]; 1.xn--6-945e.xn--glb1794k; ; ; # 1.ê±¾6.ð±Û
+1.xn--6-945e.xn--glb1794k; 1.ê±¾6.ð±\u06D0; [B1]; 1.xn--6-945e.xn--glb1794k; ; ; # 1.ê±¾6.ð±Û
+xn--6-dcps419c.xn--glb1794k; ⒈걾6.ð±\u06D0; [B1, V6]; xn--6-dcps419c.xn--glb1794k; ; ; # ⒈걾6.ð±Û
+ð²žðŸ¶â‰®â‰®.󠀧\u0639; ð³ž0≮≮.󠀧\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
+ð²žðŸ¶<\u0338<\u0338.󠀧\u0639; ð³ž0≮≮.󠀧\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
+ð²ž0≮≮.󠀧\u0639; ð³ž0≮≮.󠀧\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
+ð²ž0<\u0338<\u0338.󠀧\u0639; ð³ž0≮≮.󠀧\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
+ð³ž0<\u0338<\u0338.󠀧\u0639; ð³ž0≮≮.󠀧\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
+ð³ž0≮≮.󠀧\u0639; ; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
+xn--0-ngoa5711v.xn--4gb31034p; ð³ž0≮≮.󠀧\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
+ð³žðŸ¶<\u0338<\u0338.󠀧\u0639; ð³ž0≮≮.󠀧\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
+ð³žðŸ¶â‰®â‰®.󠀧\u0639; ð³ž0≮≮.󠀧\u0639; [B1, B3, V6]; xn--0-ngoa5711v.xn--4gb31034p; ; ; # ð³ž0≮≮.ع
+\u0AE3.ð¹º\u115F; ; [B1, V5, V6]; xn--8fc.xn--osd3070k; ; ; # à«£.ð¹º
+xn--8fc.xn--osd3070k; \u0AE3.ð¹º\u115F; [B1, V5, V6]; xn--8fc.xn--osd3070k; ; ; # à«£.ð¹º
+ðŸð¨™â¸–.\u200D; 1ð¨™â¸–.\u200D; [C2]; xn--1-5bt6845n.xn--1ug; ; xn--1-5bt6845n.; [] # 1ð¨™â¸–.
+1ð¨™â¸–.\u200D; ; [C2]; xn--1-5bt6845n.xn--1ug; ; xn--1-5bt6845n.; [] # 1ð¨™â¸–.
xn--1-5bt6845n.; 1ð¨™â¸–.; ; xn--1-5bt6845n.; ; ; # 1ð¨™â¸–.
1ð¨™â¸–.; ; ; xn--1-5bt6845n.; ; ; # 1ð¨™â¸–.
-xn--1-5bt6845n.xn--1ug; 1ð¨™â¸–.â€; [C2]; xn--1-5bt6845n.xn--1ug; ; ; # 1ð¨™â¸–.
-ðž¤â‰ Ü¦á© ï½¡-‌ߕ; 𞤲≠ܦ᩠.-‌ߕ; [B1, C1, P1, V3, V6]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, P1, V3, V6] # 𞤲≠ܦ᩠.-ß•
-ðž¤≠ܦ᩠。-‌ߕ; 𞤲≠ܦ᩠.-‌ߕ; [B1, C1, P1, V3, V6]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, P1, V3, V6] # 𞤲≠ܦ᩠.-ß•
-ðž¤â‰ Ü¦á© ã€‚-‌ߕ; 𞤲≠ܦ᩠.-‌ߕ; [B1, C1, P1, V3, V6]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, P1, V3, V6] # 𞤲≠ܦ᩠.-ß•
-ðž¤≠ܦ᩠。-‌ߕ; 𞤲≠ܦ᩠.-‌ߕ; [B1, C1, P1, V3, V6]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, P1, V3, V6] # 𞤲≠ܦ᩠.-ß•
-𞤲≠ܦ᩠。-‌ߕ; 𞤲≠ܦ᩠.-‌ߕ; [B1, C1, P1, V3, V6]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, P1, V3, V6] # 𞤲≠ܦ᩠.-ߕ
-𞤲≠ܦ᩠。-‌ߕ; 𞤲≠ܦ᩠.-‌ߕ; [B1, C1, P1, V3, V6]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, P1, V3, V6] # 𞤲≠ܦ᩠.-ߕ
-xn--wnb859grzfzw60c.xn----kcd; 𞤲≠ܦ᩠.-ߕ; [B1, V3, V6]; xn--wnb859grzfzw60c.xn----kcd; ; ; # 𞤲≠ܦ᩠.-ߕ
-xn--wnb859grzfzw60c.xn----kcd017p; 𞤲≠ܦ᩠.-‌ߕ; [B1, C1, V3, V6]; xn--wnb859grzfzw60c.xn----kcd017p; ; ; # 𞤲≠ܦ᩠.-ߕ
-𞤲≠ܦ᩠。-‌ߕ; 𞤲≠ܦ᩠.-‌ߕ; [B1, C1, P1, V3, V6]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, P1, V3, V6] # 𞤲≠ܦ᩠.-ߕ
-𞤲≠ܦ᩠。-‌ߕ; 𞤲≠ܦ᩠.-‌ߕ; [B1, C1, P1, V3, V6]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, P1, V3, V6] # 𞤲≠ܦ᩠.-ߕ
-ð¹°Í¨-ꡧ。ٵ; ð¹°Í¨-ꡧ.اٴ; [B1]; xn----shb2387jgkqd.xn--mgb8m; ; ; # ð¹°Í¨-ꡧ.اٴ
-ð¹°Í¨-ꡧ。اٴ; ð¹°Í¨-ꡧ.اٴ; [B1]; xn----shb2387jgkqd.xn--mgb8m; ; ; # ð¹°Í¨-ꡧ.اٴ
-xn----shb2387jgkqd.xn--mgb8m; ð¹°Í¨-ꡧ.اٴ; [B1]; xn----shb2387jgkqd.xn--mgb8m; ; ; # ð¹°Í¨-ꡧ.اٴ
-F󠅟。ò—…♚; f.ò—…♚; [P1, V6]; f.xn--45hz6953f; ; ; # f.♚
-F󠅟。ò—…♚; f.ò—…♚; [P1, V6]; f.xn--45hz6953f; ; ; # f.♚
-f󠅟。ò—…♚; f.ò—…♚; [P1, V6]; f.xn--45hz6953f; ; ; # f.♚
+xn--1-5bt6845n.xn--1ug; 1ð¨™â¸–.\u200D; [C2]; xn--1-5bt6845n.xn--1ug; ; ; # 1ð¨™â¸–.
+ðž¤â‰ \u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ß•
+ðž¤=\u0338\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ß•
+ðž¤â‰ \u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ß•
+ðž¤=\u0338\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ß•
+𞤲=\u0338\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ
+𞤲≠\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ
+xn--wnb859grzfzw60c.xn----kcd; 𞤲≠\u0726\u1A60.-\u07D5; [B1, V3]; xn--wnb859grzfzw60c.xn----kcd; ; ; # 𞤲≠ܦ᩠.-ߕ
+xn--wnb859grzfzw60c.xn----kcd017p; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; ; # 𞤲≠ܦ᩠.-ߕ
+𞤲=\u0338\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ
+𞤲≠\u0726\u1A60。-\u200C\u07D5; 𞤲≠\u0726\u1A60.-\u200C\u07D5; [B1, C1, V3]; xn--wnb859grzfzw60c.xn----kcd017p; ; xn--wnb859grzfzw60c.xn----kcd; [B1, V3] # 𞤲≠ܦ᩠.-ߕ
+ð¹°\u0368-ꡧ。\u0675; ð¹°\u0368-ꡧ.\u0627\u0674; [B1]; xn----shb2387jgkqd.xn--mgb8m; ; ; # ð¹°Í¨-ꡧ.اٴ
+ð¹°\u0368-ꡧ。\u0627\u0674; ð¹°\u0368-ꡧ.\u0627\u0674; [B1]; xn----shb2387jgkqd.xn--mgb8m; ; ; # ð¹°Í¨-ꡧ.اٴ
+xn----shb2387jgkqd.xn--mgb8m; ð¹°\u0368-ꡧ.\u0627\u0674; [B1]; xn----shb2387jgkqd.xn--mgb8m; ; ; # ð¹°Í¨-ꡧ.اٴ
+F󠅟。ò—…♚; f.ò—…♚; [V6]; f.xn--45hz6953f; ; ; # f.♚
+F󠅟。ò—…♚; f.ò—…♚; [V6]; f.xn--45hz6953f; ; ; # f.♚
+f󠅟。ò—…♚; f.ò—…♚; [V6]; f.xn--45hz6953f; ; ; # f.♚
f.xn--45hz6953f; f.ò—…♚; [V6]; f.xn--45hz6953f; ; ; # f.♚
-f󠅟。ò—…♚; f.ò—…♚; [P1, V6]; f.xn--45hz6953f; ; ; # f.♚
-à­ð‘„´á·©ã€‚ðŸ®á‚¸ðž€¨ñƒ¥‡; à­ð‘„´á·©.2Ⴘ𞀨ñƒ¥‡; [P1, V5, V6]; xn--9ic246gs21p.xn--2-k1g43076adrwq; ; ; # à­ð‘„´á·©.2Ⴘ𞀨
-à­ð‘„´á·©ã€‚2Ⴘ𞀨ñƒ¥‡; à­ð‘„´á·©.2Ⴘ𞀨ñƒ¥‡; [P1, V5, V6]; xn--9ic246gs21p.xn--2-k1g43076adrwq; ; ; # à­ð‘„´á·©.2Ⴘ𞀨
-à­ð‘„´á·©ã€‚2ⴘ𞀨ñƒ¥‡; à­ð‘„´á·©.2ⴘ𞀨ñƒ¥‡; [P1, V5, V6]; xn--9ic246gs21p.xn--2-nws2918ndrjr; ; ; # à­ð‘„´á·©.2ⴘ𞀨
-xn--9ic246gs21p.xn--2-nws2918ndrjr; à­ð‘„´á·©.2ⴘ𞀨ñƒ¥‡; [V5, V6]; xn--9ic246gs21p.xn--2-nws2918ndrjr; ; ; # à­ð‘„´á·©.2ⴘ𞀨
-xn--9ic246gs21p.xn--2-k1g43076adrwq; à­ð‘„´á·©.2Ⴘ𞀨ñƒ¥‡; [V5, V6]; xn--9ic246gs21p.xn--2-k1g43076adrwq; ; ; # à­ð‘„´á·©.2Ⴘ𞀨
-à­ð‘„´á·©ã€‚ðŸ®â´˜ðž€¨ñƒ¥‡; à­ð‘„´á·©.2ⴘ𞀨ñƒ¥‡; [P1, V5, V6]; xn--9ic246gs21p.xn--2-nws2918ndrjr; ; ; # à­ð‘„´á·©.2ⴘ𞀨
-ò“ ­â€Œâ€Œâ’ˆã€‚勉ð‘…; ò“ ­â€Œâ€Œâ’ˆ.勉ð‘…; [C1, P1, V6]; xn--0uga855aez302a.xn--4grs325b; ; xn--tsh11906f.xn--4grs325b; [P1, V6] # â’ˆ.勉ð‘…
-ò“ ­â€Œâ€Œ1.。勉ð‘…; ò“ ­â€Œâ€Œ1..勉ð‘…; [C1, P1, V6, X4_2]; xn--1-rgna61159u..xn--4grs325b; [C1, P1, V6, A4_2]; xn--1-yi00h..xn--4grs325b; [P1, V6, A4_2] # 1..勉ð‘…
+f󠅟。ò—…♚; f.ò—…♚; [V6]; f.xn--45hz6953f; ; ; # f.♚
+\u0B4Dð‘„´\u1DE9。ðŸ®á‚¸ðž€¨ñƒ¥‡; \u0B4Dð‘„´\u1DE9.2Ⴘ𞀨ñƒ¥‡; [V5, V6]; xn--9ic246gs21p.xn--2-k1g43076adrwq; ; ; # à­ð‘„´á·©.2Ⴘ𞀨
+\u0B4Dð‘„´\u1DE9。2Ⴘ𞀨ñƒ¥‡; \u0B4Dð‘„´\u1DE9.2Ⴘ𞀨ñƒ¥‡; [V5, V6]; xn--9ic246gs21p.xn--2-k1g43076adrwq; ; ; # à­ð‘„´á·©.2Ⴘ𞀨
+\u0B4Dð‘„´\u1DE9。2ⴘ𞀨ñƒ¥‡; \u0B4Dð‘„´\u1DE9.2ⴘ𞀨ñƒ¥‡; [V5, V6]; xn--9ic246gs21p.xn--2-nws2918ndrjr; ; ; # à­ð‘„´á·©.2ⴘ𞀨
+xn--9ic246gs21p.xn--2-nws2918ndrjr; \u0B4Dð‘„´\u1DE9.2ⴘ𞀨ñƒ¥‡; [V5, V6]; xn--9ic246gs21p.xn--2-nws2918ndrjr; ; ; # à­ð‘„´á·©.2ⴘ𞀨
+xn--9ic246gs21p.xn--2-k1g43076adrwq; \u0B4Dð‘„´\u1DE9.2Ⴘ𞀨ñƒ¥‡; [V5, V6]; xn--9ic246gs21p.xn--2-k1g43076adrwq; ; ; # à­ð‘„´á·©.2Ⴘ𞀨
+\u0B4Dð‘„´\u1DE9。ðŸ®â´˜ðž€¨ñƒ¥‡; \u0B4Dð‘„´\u1DE9.2ⴘ𞀨ñƒ¥‡; [V5, V6]; xn--9ic246gs21p.xn--2-nws2918ndrjr; ; ; # à­ð‘„´á·©.2ⴘ𞀨
+ò“ ­\u200C\u200C⒈。勉ð‘…; ò“ ­\u200C\u200Câ’ˆ.勉ð‘…; [C1, V6]; xn--0uga855aez302a.xn--4grs325b; ; xn--tsh11906f.xn--4grs325b; [V6] # â’ˆ.勉ð‘…
+ò“ ­\u200C\u200C1.。勉ð‘…; ò“ ­\u200C\u200C1..勉ð‘…; [C1, V6, X4_2]; xn--1-rgna61159u..xn--4grs325b; [C1, V6, A4_2]; xn--1-yi00h..xn--4grs325b; [V6, A4_2] # 1..勉ð‘…
xn--1-yi00h..xn--4grs325b; ò“ ­1..勉ð‘…; [V6, X4_2]; xn--1-yi00h..xn--4grs325b; [V6, A4_2]; ; # 1..勉ð‘…
-xn--1-rgna61159u..xn--4grs325b; ò“ ­â€Œâ€Œ1..勉ð‘…; [C1, V6, X4_2]; xn--1-rgna61159u..xn--4grs325b; [C1, V6, A4_2]; ; # 1..勉ð‘…
+xn--1-rgna61159u..xn--4grs325b; ò“ ­\u200C\u200C1..勉ð‘…; [C1, V6, X4_2]; xn--1-rgna61159u..xn--4grs325b; [C1, V6, A4_2]; ; # 1..勉ð‘…
xn--tsh11906f.xn--4grs325b; ò“ ­â’ˆ.勉ð‘…; [V6]; xn--tsh11906f.xn--4grs325b; ; ; # â’ˆ.勉ð‘…
-xn--0uga855aez302a.xn--4grs325b; ò“ ­â€Œâ€Œâ’ˆ.勉ð‘…; [C1, V6]; xn--0uga855aez302a.xn--4grs325b; ; ; # â’ˆ.勉ð‘…
-ᡃ.玿ñ«ˆœó•ž; ; [P1, V6]; xn--27e.xn--7cy81125a0yq4a; ; ; # ᡃ.玿
+xn--0uga855aez302a.xn--4grs325b; ò“ ­\u200C\u200Câ’ˆ.勉ð‘…; [C1, V6]; xn--0uga855aez302a.xn--4grs325b; ; ; # â’ˆ.勉ð‘…
+ᡃ.玿ñ«ˆœó•ž; ; [V6]; xn--27e.xn--7cy81125a0yq4a; ; ; # ᡃ.玿
xn--27e.xn--7cy81125a0yq4a; ᡃ.玿ñ«ˆœó•ž; [V6]; xn--27e.xn--7cy81125a0yq4a; ; ; # ᡃ.玿
-‌‌。⒈≯ðŸµ; ‌‌.⒈≯9; [C1, P1, V6]; xn--0uga.xn--9-ogo37g; ; .xn--9-ogo37g; [P1, V6, A4_2] # .⒈≯9
-‌‌。⒈≯ðŸµ; ‌‌.⒈≯9; [C1, P1, V6]; xn--0uga.xn--9-ogo37g; ; .xn--9-ogo37g; [P1, V6, A4_2] # .⒈≯9
-‌‌。1.≯9; ‌‌.1.≯9; [C1, P1, V6]; xn--0uga.1.xn--9-ogo; ; .1.xn--9-ogo; [P1, V6, A4_2] # .1.≯9
-‌‌。1.≯9; ‌‌.1.≯9; [C1, P1, V6]; xn--0uga.1.xn--9-ogo; ; .1.xn--9-ogo; [P1, V6, A4_2] # .1.≯9
-.1.xn--9-ogo; .1.≯9; [V6, X4_2]; .1.xn--9-ogo; [V6, A4_2]; ; # .1.≯9
-xn--0uga.1.xn--9-ogo; ‌‌.1.≯9; [C1, V6]; xn--0uga.1.xn--9-ogo; ; ; # .1.≯9
+\u200C\u200C。⒈≯ðŸµ; \u200C\u200C.⒈≯9; [C1, V6]; xn--0uga.xn--9-ogo37g; ; .xn--9-ogo37g; [V6, A4_2] # .⒈≯9
+\u200C\u200C。⒈>\u0338ðŸµ; \u200C\u200C.⒈≯9; [C1, V6]; xn--0uga.xn--9-ogo37g; ; .xn--9-ogo37g; [V6, A4_2] # .⒈≯9
+\u200C\u200C。1.≯9; \u200C\u200C.1.≯9; [C1]; xn--0uga.1.xn--9-ogo; ; .1.xn--9-ogo; [A4_2] # .1.≯9
+\u200C\u200C。1.>\u03389; \u200C\u200C.1.≯9; [C1]; xn--0uga.1.xn--9-ogo; ; .1.xn--9-ogo; [A4_2] # .1.≯9
+.1.xn--9-ogo; .1.≯9; [X4_2]; .1.xn--9-ogo; [A4_2]; ; # .1.≯9
+xn--0uga.1.xn--9-ogo; \u200C\u200C.1.≯9; [C1]; xn--0uga.1.xn--9-ogo; ; ; # .1.≯9
.xn--9-ogo37g; .⒈≯9; [V6, X4_2]; .xn--9-ogo37g; [V6, A4_2]; ; # .⒈≯9
-xn--0uga.xn--9-ogo37g; ‌‌.⒈≯9; [C1, V6]; xn--0uga.xn--9-ogo37g; ; ; # .⒈≯9
-á…Ÿá· ò€.𺻆≯ð®; ; [B5, B6, P1, V6]; xn--osd615d5659o.xn--hdh5192gkm6r; ; ; # á· .≯ð®
-á…Ÿá· ò€.𺻆≯ð®; á…Ÿá· ò€.𺻆≯ð®; [B5, B6, P1, V6]; xn--osd615d5659o.xn--hdh5192gkm6r; ; ; # á· .≯ð®
-xn--osd615d5659o.xn--hdh5192gkm6r; á…Ÿá· ò€.𺻆≯ð®; [B5, B6, V6]; xn--osd615d5659o.xn--hdh5192gkm6r; ; ; # á· .≯ð®
-ó „«ð©¤â€Ø¾.ð©©-ࠞ󑼩; ð©¤â€Ø¾.ð©©-ࠞ󑼩; [B1, C2, P1, V5, V6]; xn--9gb723kg862a.xn----qgd52296avol4f; ; xn--9gb5080v.xn----qgd52296avol4f; [B1, P1, V5, V6] # ð©¤Ø¾.ð©©-à ž
-xn--9gb5080v.xn----qgd52296avol4f; ð©¤Ø¾.ð©©-ࠞ󑼩; [B1, V5, V6]; xn--9gb5080v.xn----qgd52296avol4f; ; ; # ð©¤Ø¾.ð©©-à ž
-xn--9gb723kg862a.xn----qgd52296avol4f; ð©¤â€Ø¾.ð©©-ࠞ󑼩; [B1, C2, V5, V6]; xn--9gb723kg862a.xn----qgd52296avol4f; ; ; # ð©¤Ø¾.ð©©-à ž
-⃚.𑘿-; ⃚.𑘿-; [V3, V5]; xn--w0g.xn----bd0j; ; ; # ⃚.𑘿-
-⃚.𑘿-; ; [V3, V5]; xn--w0g.xn----bd0j; ; ; # ⃚.𑘿-
-xn--w0g.xn----bd0j; ⃚.𑘿-; [V3, V5]; xn--w0g.xn----bd0j; ; ; # ⃚.𑘿-
-䮸ß.󠵟󠭎紙ࢨ; ; [B1, P1, V6]; xn--zca5349a.xn--xyb1370div70kpzba; ; xn--ss-sf1c.xn--xyb1370div70kpzba; # 䮸ß.紙ࢨ
-䮸SS.󠵟󠭎紙ࢨ; 䮸ss.󠵟󠭎紙ࢨ; [B1, P1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ
-䮸ss.󠵟󠭎紙ࢨ; ; [B1, P1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ
-䮸Ss.󠵟󠭎紙ࢨ; 䮸ss.󠵟󠭎紙ࢨ; [B1, P1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ
-xn--ss-sf1c.xn--xyb1370div70kpzba; 䮸ss.󠵟󠭎紙ࢨ; [B1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ
-xn--zca5349a.xn--xyb1370div70kpzba; 䮸ß.󠵟󠭎紙ࢨ; [B1, V6]; xn--zca5349a.xn--xyb1370div70kpzba; ; ; # 䮸ß.紙ࢨ
--Ⴞ.-ð©¨â…”ð¦•; -Ⴞ.-ð©¨2â„3ð¦•; [B1, P1, V3, V6]; xn----w1g.xn---23-pt0a0433lk3jj; ; ; # -Ⴞ.-ð©¨2â„3ð¦•
--Ⴞ.-ð©¨2â„3ð¦•; ; [B1, P1, V3, V6]; xn----w1g.xn---23-pt0a0433lk3jj; ; ; # -Ⴞ.-ð©¨2â„3ð¦•
+xn--0uga.xn--9-ogo37g; \u200C\u200C.⒈≯9; [C1, V6]; xn--0uga.xn--9-ogo37g; ; ; # .⒈≯9
+\u115F\u1DE0ò€.𺻆≯ð®; ; [B5, B6, V6]; xn--osd615d5659o.xn--hdh5192gkm6r; ; ; # á· .≯ð®
+\u115F\u1DE0ò€.𺻆>\u0338ð®; \u115F\u1DE0ò€.𺻆≯ð®; [B5, B6, V6]; xn--osd615d5659o.xn--hdh5192gkm6r; ; ; # á· .≯ð®
+xn--osd615d5659o.xn--hdh5192gkm6r; \u115F\u1DE0ò€.𺻆≯ð®; [B5, B6, V6]; xn--osd615d5659o.xn--hdh5192gkm6r; ; ; # á· .≯ð®
+ó „«ð©¤\u200D\u063E.ð©©-\u081E󑼩; ð©¤\u200D\u063E.ð©©-\u081E󑼩; [B1, C2, V5, V6]; xn--9gb723kg862a.xn----qgd52296avol4f; ; xn--9gb5080v.xn----qgd52296avol4f; [B1, V5, V6] # ð©¤Ø¾.ð©©-à ž
+xn--9gb5080v.xn----qgd52296avol4f; ð©¤\u063E.ð©©-\u081E󑼩; [B1, V5, V6]; xn--9gb5080v.xn----qgd52296avol4f; ; ; # ð©¤Ø¾.ð©©-à ž
+xn--9gb723kg862a.xn----qgd52296avol4f; ð©¤\u200D\u063E.ð©©-\u081E󑼩; [B1, C2, V5, V6]; xn--9gb723kg862a.xn----qgd52296avol4f; ; ; # ð©¤Ø¾.ð©©-à ž
+\u20DA.𑘿-; \u20DA.𑘿-; [V3, V5]; xn--w0g.xn----bd0j; ; ; # ⃚.𑘿-
+\u20DA.𑘿-; ; [V3, V5]; xn--w0g.xn----bd0j; ; ; # ⃚.𑘿-
+xn--w0g.xn----bd0j; \u20DA.𑘿-; [V3, V5]; xn--w0g.xn----bd0j; ; ; # ⃚.𑘿-
+䮸ß.󠵟󠭎紙\u08A8; ; [B1, V6]; xn--zca5349a.xn--xyb1370div70kpzba; ; xn--ss-sf1c.xn--xyb1370div70kpzba; # 䮸ß.紙ࢨ
+䮸SS.󠵟󠭎紙\u08A8; 䮸ss.󠵟󠭎紙\u08A8; [B1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ
+䮸ss.󠵟󠭎紙\u08A8; ; [B1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ
+䮸Ss.󠵟󠭎紙\u08A8; 䮸ss.󠵟󠭎紙\u08A8; [B1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ
+xn--ss-sf1c.xn--xyb1370div70kpzba; 䮸ss.󠵟󠭎紙\u08A8; [B1, V6]; xn--ss-sf1c.xn--xyb1370div70kpzba; ; ; # 䮸ss.紙ࢨ
+xn--zca5349a.xn--xyb1370div70kpzba; 䮸ß.󠵟󠭎紙\u08A8; [B1, V6]; xn--zca5349a.xn--xyb1370div70kpzba; ; ; # 䮸ß.紙ࢨ
+-Ⴞ.-ð©¨â…”ð¦•; -Ⴞ.-ð©¨2â„3ð¦•; [B1, V3, V6]; xn----w1g.xn---23-pt0a0433lk3jj; ; ; # -Ⴞ.-ð©¨2â„3ð¦•
+-Ⴞ.-ð©¨2â„3ð¦•; ; [B1, V3, V6]; xn----w1g.xn---23-pt0a0433lk3jj; ; ; # -Ⴞ.-ð©¨2â„3ð¦•
-â´ž.-ð©¨2â„3ð¦•; ; [B1, V3]; xn----zws.xn---23-pt0a0433lk3jj; ; ; # -â´ž.-ð©¨2â„3ð¦•
xn----zws.xn---23-pt0a0433lk3jj; -â´ž.-ð©¨2â„3ð¦•; [B1, V3]; xn----zws.xn---23-pt0a0433lk3jj; ; ; # -â´ž.-ð©¨2â„3ð¦•
xn----w1g.xn---23-pt0a0433lk3jj; -Ⴞ.-ð©¨2â„3ð¦•; [B1, V3, V6]; xn----w1g.xn---23-pt0a0433lk3jj; ; ; # -Ⴞ.-ð©¨2â„3ð¦•
-â´ž.-ð©¨â…”ð¦•; -â´ž.-ð©¨2â„3ð¦•; [B1, V3]; xn----zws.xn---23-pt0a0433lk3jj; ; ; # -â´ž.-ð©¨2â„3ð¦•
-󧈯ð¹¯à«‚。ò–¢¨ð®ñ‡¼–á¡‚; 󧈯ð¹¯à«‚.ò–¢¨ð®ñ‡¼–á¡‚; [B5, B6, P1, V6]; xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; ; ; # ð¹¯à«‚.ð®á¡‚
-󧈯ð¹¯à«‚。ò–¢¨ð®ñ‡¼–á¡‚; 󧈯ð¹¯à«‚.ò–¢¨ð®ñ‡¼–á¡‚; [B5, B6, P1, V6]; xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; ; ; # ð¹¯à«‚.ð®á¡‚
-xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; 󧈯ð¹¯à«‚.ò–¢¨ð®ñ‡¼–á¡‚; [B5, B6, V6]; xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; ; ; # ð¹¯à«‚.ð®á¡‚
-á‚‚-â€ê£ªï¼Žê¡Šâ€ñ¼¸³; á‚‚-â€ê£ª.ê¡Šâ€ñ¼¸³; [C2, P1, V5, V6]; xn----gyg250jio7k.xn--1ug8774cri56d; ; xn----gyg3618i.xn--jc9ao4185a; [P1, V5, V6] # á‚‚-꣪.ê¡Š
-á‚‚-â€ê£ª.ê¡Šâ€ñ¼¸³; ; [C2, P1, V5, V6]; xn----gyg250jio7k.xn--1ug8774cri56d; ; xn----gyg3618i.xn--jc9ao4185a; [P1, V5, V6] # á‚‚-꣪.ê¡Š
-xn----gyg3618i.xn--jc9ao4185a; ႂ-꣪.ꡊ񼸳; [V5, V6]; xn----gyg3618i.xn--jc9ao4185a; ; ; # ႂ-꣪.ꡊ
-xn----gyg250jio7k.xn--1ug8774cri56d; á‚‚-â€ê£ª.ê¡Šâ€ñ¼¸³; [C2, V5, V6]; xn----gyg250jio7k.xn--1ug8774cri56d; ; ; # á‚‚-꣪.ê¡Š
-۱。≠٨; ۱.≠٨; [B1, P1, V6]; xn--emb.xn--hib334l; ; ; # ۱.≠٨
-۱。≠٨; ۱.≠٨; [B1, P1, V6]; xn--emb.xn--hib334l; ; ; # ۱.≠٨
-xn--emb.xn--hib334l; ۱.≠٨; [B1, V6]; xn--emb.xn--hib334l; ; ; # ۱.≠٨
+󧈯ð¹¯\u0AC2。ò–¢¨ð®ñ‡¼–á¡‚; 󧈯ð¹¯\u0AC2.ò–¢¨ð®ñ‡¼–á¡‚; [B5, B6, V6]; xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; ; ; # ð¹¯à«‚.ð®á¡‚
+󧈯ð¹¯\u0AC2。ò–¢¨ð®ñ‡¼–á¡‚; 󧈯ð¹¯\u0AC2.ò–¢¨ð®ñ‡¼–á¡‚; [B5, B6, V6]; xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; ; ; # ð¹¯à«‚.ð®á¡‚
+xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; 󧈯ð¹¯\u0AC2.ò–¢¨ð®ñ‡¼–á¡‚; [B5, B6, V6]; xn--bfc7604kv8m3g.xn--17e5565jl7zw4h16a; ; ; # ð¹¯à«‚.ð®á¡‚
+\u1082-\u200D\uA8EA.ꡊ\u200D񼸳; \u1082-\u200D\uA8EA.ꡊ\u200D񼸳; [C2, V5, V6]; xn----gyg250jio7k.xn--1ug8774cri56d; ; xn----gyg3618i.xn--jc9ao4185a; [V5, V6] # ႂ-꣪.ꡊ
+\u1082-\u200D\uA8EA.ꡊ\u200D񼸳; ; [C2, V5, V6]; xn----gyg250jio7k.xn--1ug8774cri56d; ; xn----gyg3618i.xn--jc9ao4185a; [V5, V6] # ႂ-꣪.ꡊ
+xn----gyg3618i.xn--jc9ao4185a; \u1082-\uA8EA.ꡊ񼸳; [V5, V6]; xn----gyg3618i.xn--jc9ao4185a; ; ; # ႂ-꣪.ꡊ
+xn----gyg250jio7k.xn--1ug8774cri56d; \u1082-\u200D\uA8EA.ꡊ\u200D񼸳; [C2, V5, V6]; xn----gyg250jio7k.xn--1ug8774cri56d; ; ; # ႂ-꣪.ꡊ
+۱。≠\u0668; ۱.≠\u0668; [B1]; xn--emb.xn--hib334l; ; ; # ۱.≠٨
+۱。=\u0338\u0668; ۱.≠\u0668; [B1]; xn--emb.xn--hib334l; ; ; # ۱.≠٨
+xn--emb.xn--hib334l; ۱.≠\u0668; [B1]; xn--emb.xn--hib334l; ; ; # ۱.≠٨
𑈵廊.ð ; ; [V5]; xn--xytw701b.xn--yc9c; ; ; # 𑈵廊.ð 
xn--xytw701b.xn--yc9c; 𑈵廊.ð ; [V5]; xn--xytw701b.xn--yc9c; ; ; # 𑈵廊.ð 
-â€Í–-.-á‚°Ù¡; â€Í–-.-á‚°Ù¡; [B1, C2, P1, V3, V6]; xn----rgb661t.xn----bqc030f; ; xn----rgb.xn----bqc030f; [B1, P1, V3, V5, V6] # Í–-.-á‚°Ù¡
-â€Í–-.-á‚°Ù¡; ; [B1, C2, P1, V3, V6]; xn----rgb661t.xn----bqc030f; ; xn----rgb.xn----bqc030f; [B1, P1, V3, V5, V6] # Í–-.-á‚°Ù¡
-â€Í–-.-â´Ù¡; ; [B1, C2, V3]; xn----rgb661t.xn----bqc2280a; ; xn----rgb.xn----bqc2280a; [B1, V3, V5] # Í–-.-â´Ù¡
-xn----rgb.xn----bqc2280a; Í–-.-â´Ù¡; [B1, V3, V5]; xn----rgb.xn----bqc2280a; ; ; # Í–-.-â´Ù¡
-xn----rgb661t.xn----bqc2280a; â€Í–-.-â´Ù¡; [B1, C2, V3]; xn----rgb661t.xn----bqc2280a; ; ; # Í–-.-â´Ù¡
-xn----rgb.xn----bqc030f; Í–-.-á‚°Ù¡; [B1, V3, V5, V6]; xn----rgb.xn----bqc030f; ; ; # Í–-.-á‚°Ù¡
-xn----rgb661t.xn----bqc030f; â€Í–-.-á‚°Ù¡; [B1, C2, V3, V6]; xn----rgb661t.xn----bqc030f; ; ; # Í–-.-á‚°Ù¡
-â€Í–-.-â´Ù¡; â€Í–-.-â´Ù¡; [B1, C2, V3]; xn----rgb661t.xn----bqc2280a; ; xn----rgb.xn----bqc2280a; [B1, V3, V5] # Í–-.-â´Ù¡
-غ١æŒó¾¯.-; ; [B1, B2, B3, P1, V3, V6]; xn--5gb2f4205aqi47p.-; ; ; # غ١æŒ.-
-xn--5gb2f4205aqi47p.-; غ١æŒó¾¯.-; [B1, B2, B3, V3, V6]; xn--5gb2f4205aqi47p.-; ; ; # غ١æŒ.-
-ۯ。ð¹§ðž¤½; Û¯.ð¹§ðž¤½; [B1]; xn--cmb.xn--fo0dy848a; ; ; # Û¯.ð¹§ðž¤½
-ۯ。ð¹§ðž¤½; Û¯.ð¹§ðž¤½; [B1]; xn--cmb.xn--fo0dy848a; ; ; # Û¯.ð¹§ðž¤½
-ۯ。ð¹§ðž¤›; Û¯.ð¹§ðž¤½; [B1]; xn--cmb.xn--fo0dy848a; ; ; # Û¯.ð¹§ðž¤½
-xn--cmb.xn--fo0dy848a; Û¯.ð¹§ðž¤½; [B1]; xn--cmb.xn--fo0dy848a; ; ; # Û¯.ð¹§ðž¤½
-ۯ。ð¹§ðž¤›; Û¯.ð¹§ðž¤½; [B1]; xn--cmb.xn--fo0dy848a; ; ; # Û¯.ð¹§ðž¤½
-Ⴞ𶛀𛗻.ᢗ릫; Ⴞ𶛀𛗻.ᢗ릫; [P1, V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫
-Ⴞ𶛀𛗻.ᢗ릫; Ⴞ𶛀𛗻.ᢗ릫; [P1, V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫
-Ⴞ𶛀𛗻.ᢗ릫; ; [P1, V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫
-Ⴞ𶛀𛗻.ᢗ릫; Ⴞ𶛀𛗻.ᢗ릫; [P1, V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫
-ⴞ𶛀𛗻.ᢗ릫; ⴞ𶛀𛗻.ᢗ릫; [P1, V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫
-ⴞ𶛀𛗻.ᢗ릫; ; [P1, V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫
+\u200D\u0356-.-Ⴐ\u0661; \u200D\u0356-.-Ⴐ\u0661; [B1, C2, V3, V6]; xn----rgb661t.xn----bqc030f; ; xn----rgb.xn----bqc030f; [B1, V3, V5, V6] # ͖-.-Ⴐ١
+\u200D\u0356-.-á‚°\u0661; ; [B1, C2, V3, V6]; xn----rgb661t.xn----bqc030f; ; xn----rgb.xn----bqc030f; [B1, V3, V5, V6] # Í–-.-á‚°Ù¡
+\u200D\u0356-.-â´\u0661; ; [B1, C2, V3]; xn----rgb661t.xn----bqc2280a; ; xn----rgb.xn----bqc2280a; [B1, V3, V5] # Í–-.-â´Ù¡
+xn----rgb.xn----bqc2280a; \u0356-.-â´\u0661; [B1, V3, V5]; xn----rgb.xn----bqc2280a; ; ; # Í–-.-â´Ù¡
+xn----rgb661t.xn----bqc2280a; \u200D\u0356-.-â´\u0661; [B1, C2, V3]; xn----rgb661t.xn----bqc2280a; ; ; # Í–-.-â´Ù¡
+xn----rgb.xn----bqc030f; \u0356-.-á‚°\u0661; [B1, V3, V5, V6]; xn----rgb.xn----bqc030f; ; ; # Í–-.-á‚°Ù¡
+xn----rgb661t.xn----bqc030f; \u200D\u0356-.-á‚°\u0661; [B1, C2, V3, V6]; xn----rgb661t.xn----bqc030f; ; ; # Í–-.-á‚°Ù¡
+\u200D\u0356-.-â´\u0661; \u200D\u0356-.-â´\u0661; [B1, C2, V3]; xn----rgb661t.xn----bqc2280a; ; xn----rgb.xn----bqc2280a; [B1, V3, V5] # Í–-.-â´Ù¡
+\u063A\u0661æŒó¾¯.-; ; [B1, B2, B3, V3, V6]; xn--5gb2f4205aqi47p.-; ; ; # غ١æŒ.-
+xn--5gb2f4205aqi47p.-; \u063A\u0661æŒó¾¯.-; [B1, B2, B3, V3, V6]; xn--5gb2f4205aqi47p.-; ; ; # غ١æŒ.-
+\u06EF。ð¹§ðž¤½; \u06EF.ð¹§ðž¤½; [B1]; xn--cmb.xn--fo0dy848a; ; ; # Û¯.ð¹§ðž¤½
+\u06EF。ð¹§ðž¤½; \u06EF.ð¹§ðž¤½; [B1]; xn--cmb.xn--fo0dy848a; ; ; # Û¯.ð¹§ðž¤½
+\u06EF。ð¹§ðž¤›; \u06EF.ð¹§ðž¤½; [B1]; xn--cmb.xn--fo0dy848a; ; ; # Û¯.ð¹§ðž¤½
+xn--cmb.xn--fo0dy848a; \u06EF.ð¹§ðž¤½; [B1]; xn--cmb.xn--fo0dy848a; ; ; # Û¯.ð¹§ðž¤½
+\u06EF。ð¹§ðž¤›; \u06EF.ð¹§ðž¤½; [B1]; xn--cmb.xn--fo0dy848a; ; ; # Û¯.ð¹§ðž¤½
+Ⴞ𶛀𛗻.ᢗ릫; Ⴞ𶛀𛗻.ᢗ릫; [V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫
+Ⴞ𶛀𛗻.ᢗ릫; Ⴞ𶛀𛗻.ᢗ릫; [V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫
+Ⴞ𶛀𛗻.ᢗ릫; ; [V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫
+Ⴞ𶛀𛗻.ᢗ릫; Ⴞ𶛀𛗻.ᢗ릫; [V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫
+ⴞ𶛀𛗻.ᢗ릫; ⴞ𶛀𛗻.ᢗ릫; [V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫
+ⴞ𶛀𛗻.ᢗ릫; ; [V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫
xn--mlj0486jgl2j.xn--hbf6853f; ⴞ𶛀𛗻.ᢗ릫; [V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫
xn--2nd8876sgl2j.xn--hbf6853f; Ⴞ𶛀𛗻.ᢗ릫; [V6]; xn--2nd8876sgl2j.xn--hbf6853f; ; ; # Ⴞ.ᢗ릫
-ⴞ𶛀𛗻.ᢗ릫; ⴞ𶛀𛗻.ᢗ릫; [P1, V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫
-ⴞ𶛀𛗻.ᢗ릫; ⴞ𶛀𛗻.ᢗ릫; [P1, V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫
-󠎃󗭞ڷð¹·ï½¡â‰¯â€Œá·¾; 󠎃󗭞ڷð¹·.≯‌᷾; [B1, C1, P1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, P1, V6] # Ú·ð¹·.≯᷾
-󠎃󗭞ڷð¹·ï½¡≯‌᷾; 󠎃󗭞ڷð¹·.≯‌᷾; [B1, C1, P1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, P1, V6] # Ú·ð¹·.≯᷾
-󠎃󗭞ڷð¹·ã€‚≯‌᷾; 󠎃󗭞ڷð¹·.≯‌᷾; [B1, C1, P1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, P1, V6] # Ú·ð¹·.≯᷾
-󠎃󗭞ڷð¹·ã€‚≯‌᷾; 󠎃󗭞ڷð¹·.≯‌᷾; [B1, C1, P1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, P1, V6] # Ú·ð¹·.≯᷾
-xn--qkb4516kbi06fg2id.xn--zfg31q; 󠎃󗭞ڷð¹·.≯᷾; [B1, V6]; xn--qkb4516kbi06fg2id.xn--zfg31q; ; ; # Ú·ð¹·.≯᷾
-xn--qkb4516kbi06fg2id.xn--zfg59fm0c; 󠎃󗭞ڷð¹·.≯‌᷾; [B1, C1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; ; # Ú·ð¹·.≯᷾
-ᛎó …ó •â€ï½¡ð¹¾ð¹ªð»-; ᛎó •â€.ð¹¾ð¹ªð»-; [B1, B6, C2, P1, V3, V6]; xn--fxe848bq3411a.xn----q26i2bvu; ; xn--fxe63563p.xn----q26i2bvu; [B1, B6, P1, V3, V6] # ᛎ.ð¹¾ð¹ª-
-ᛎó …ó •â€ã€‚ð¹¾ð¹ªð»-; ᛎó •â€.ð¹¾ð¹ªð»-; [B1, B6, C2, P1, V3, V6]; xn--fxe848bq3411a.xn----q26i2bvu; ; xn--fxe63563p.xn----q26i2bvu; [B1, B6, P1, V3, V6] # ᛎ.ð¹¾ð¹ª-
+ⴞ𶛀𛗻.ᢗ릫; ⴞ𶛀𛗻.ᢗ릫; [V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫
+ⴞ𶛀𛗻.ᢗ릫; ⴞ𶛀𛗻.ᢗ릫; [V6]; xn--mlj0486jgl2j.xn--hbf6853f; ; ; # ⴞ.ᢗ릫
+󠎃󗭞\u06B7ð¹·ï½¡â‰¯\u200C\u1DFE; 󠎃󗭞\u06B7ð¹·.≯\u200C\u1DFE; [B1, C1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, V6] # Ú·ð¹·.≯᷾
+󠎃󗭞\u06B7ð¹·ï½¡>\u0338\u200C\u1DFE; 󠎃󗭞\u06B7ð¹·.≯\u200C\u1DFE; [B1, C1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, V6] # Ú·ð¹·.≯᷾
+󠎃󗭞\u06B7ð¹·ã€‚≯\u200C\u1DFE; 󠎃󗭞\u06B7ð¹·.≯\u200C\u1DFE; [B1, C1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, V6] # Ú·ð¹·.≯᷾
+󠎃󗭞\u06B7ð¹·ã€‚>\u0338\u200C\u1DFE; 󠎃󗭞\u06B7ð¹·.≯\u200C\u1DFE; [B1, C1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; xn--qkb4516kbi06fg2id.xn--zfg31q; [B1, V6] # Ú·ð¹·.≯᷾
+xn--qkb4516kbi06fg2id.xn--zfg31q; 󠎃󗭞\u06B7ð¹·.≯\u1DFE; [B1, V6]; xn--qkb4516kbi06fg2id.xn--zfg31q; ; ; # Ú·ð¹·.≯᷾
+xn--qkb4516kbi06fg2id.xn--zfg59fm0c; 󠎃󗭞\u06B7ð¹·.≯\u200C\u1DFE; [B1, C1, V6]; xn--qkb4516kbi06fg2id.xn--zfg59fm0c; ; ; # Ú·ð¹·.≯᷾
+ᛎó …ó •\u200D。ð¹¾ð¹ªð»-; ᛎó •\u200D.ð¹¾ð¹ªð»-; [B1, B6, C2, V3, V6]; xn--fxe848bq3411a.xn----q26i2bvu; ; xn--fxe63563p.xn----q26i2bvu; [B1, B6, V3, V6] # ᛎ.ð¹¾ð¹ª-
+ᛎó …ó •\u200D。ð¹¾ð¹ªð»-; ᛎó •\u200D.ð¹¾ð¹ªð»-; [B1, B6, C2, V3, V6]; xn--fxe848bq3411a.xn----q26i2bvu; ; xn--fxe63563p.xn----q26i2bvu; [B1, B6, V3, V6] # ᛎ.ð¹¾ð¹ª-
xn--fxe63563p.xn----q26i2bvu; ᛎó •.ð¹¾ð¹ªð»-; [B1, B6, V3, V6]; xn--fxe63563p.xn----q26i2bvu; ; ; # ᛎ.ð¹¾ð¹ª-
-xn--fxe848bq3411a.xn----q26i2bvu; ᛎó •â€.ð¹¾ð¹ªð»-; [B1, B6, C2, V3, V6]; xn--fxe848bq3411a.xn----q26i2bvu; ; ; # ᛎ.ð¹¾ð¹ª-
+xn--fxe848bq3411a.xn----q26i2bvu; ᛎó •\u200D.ð¹¾ð¹ªð»-; [B1, B6, C2, V3, V6]; xn--fxe848bq3411a.xn----q26i2bvu; ; ; # ᛎ.ð¹¾ð¹ª-
ð¹¶.ð«‚; ; [B1]; xn--uo0d.xn--rw9c; ; ; # ð¹¶.ð«‚
xn--uo0d.xn--rw9c; ð¹¶.ð«‚; [B1]; xn--uo0d.xn--rw9c; ; ; # ð¹¶.ð«‚
-ßâ€á€ºï½¡â’ˆ; ßâ€á€º.â’ˆ; [C2, P1, V6]; xn--zca679eh2l.xn--tsh; ; xn--ss-f4j.xn--tsh; [P1, V6] # ß်.â’ˆ
-ßâ€á€ºã€‚1.; ßâ€á€º.1.; [C2]; xn--zca679eh2l.1.; ; xn--ss-f4j.1.; [] # ß်.1.
-SSâ€á€ºã€‚1.; ssâ€á€º.1.; [C2]; xn--ss-f4j585j.1.; ; xn--ss-f4j.1.; [] # ss်.1.
-ssâ€á€ºã€‚1.; ssâ€á€º.1.; [C2]; xn--ss-f4j585j.1.; ; xn--ss-f4j.1.; [] # ss်.1.
-Ssâ€á€ºã€‚1.; ssâ€á€º.1.; [C2]; xn--ss-f4j585j.1.; ; xn--ss-f4j.1.; [] # ss်.1.
-xn--ss-f4j.1.; ss်.1.; ; xn--ss-f4j.1.; ; ; # ss်.1.
-ss်.1.; ; ; xn--ss-f4j.1.; ; ; # ss်.1.
-SS်.1.; ss်.1.; ; xn--ss-f4j.1.; ; ; # ss်.1.
-Ss်.1.; ss်.1.; ; xn--ss-f4j.1.; ; ; # ss်.1.
-xn--ss-f4j585j.1.; ssâ€á€º.1.; [C2]; xn--ss-f4j585j.1.; ; ; # ss်.1.
-xn--zca679eh2l.1.; ßâ€á€º.1.; [C2]; xn--zca679eh2l.1.; ; ; # ß်.1.
-SSâ€á€ºï½¡â’ˆ; ssâ€á€º.â’ˆ; [C2, P1, V6]; xn--ss-f4j585j.xn--tsh; ; xn--ss-f4j.xn--tsh; [P1, V6] # ss်.â’ˆ
-ssâ€á€ºï½¡â’ˆ; ssâ€á€º.â’ˆ; [C2, P1, V6]; xn--ss-f4j585j.xn--tsh; ; xn--ss-f4j.xn--tsh; [P1, V6] # ss်.â’ˆ
-Ssâ€á€ºï½¡â’ˆ; ssâ€á€º.â’ˆ; [C2, P1, V6]; xn--ss-f4j585j.xn--tsh; ; xn--ss-f4j.xn--tsh; [P1, V6] # ss်.â’ˆ
-xn--ss-f4j.xn--tsh; ss်.⒈; [V6]; xn--ss-f4j.xn--tsh; ; ; # ss်.⒈
-xn--ss-f4j585j.xn--tsh; ssâ€á€º.â’ˆ; [C2, V6]; xn--ss-f4j585j.xn--tsh; ; ; # ss်.â’ˆ
-xn--zca679eh2l.xn--tsh; ßâ€á€º.â’ˆ; [C2, V6]; xn--zca679eh2l.xn--tsh; ; ; # ß်.â’ˆ
-à­â€Œð™¶µðž»˜ã€‚â€; à­â€Œð™¶µðž»˜.â€; [B1, C2, P1, V5, V6]; xn--9ic637hz82z32jc.xn--1ug; ; xn--9ic6417rn4xb.; [B1, P1, V5, V6] # à­.
-xn--9ic6417rn4xb.; à­ð™¶µðž»˜.; [B1, V5, V6]; xn--9ic6417rn4xb.; ; ; # à­.
-xn--9ic637hz82z32jc.xn--1ug; à­â€Œð™¶µðž»˜.â€; [B1, C2, V5, V6]; xn--9ic637hz82z32jc.xn--1ug; ; ; # à­.
-ð®…。ڼðŸ•; ð®….Ú¼ðŸ•; [B3]; xn--c29c.xn--vkb8871w; ; ; # ð®….Ú¼ðŸ•
-ð®…。ڼðŸ•; ð®….Ú¼ðŸ•; [B3]; xn--c29c.xn--vkb8871w; ; ; # ð®….Ú¼ðŸ•
-xn--c29c.xn--vkb8871w; ð®….Ú¼ðŸ•; [B3]; xn--c29c.xn--vkb8871w; ; ; # ð®….Ú¼ðŸ•
-ؠ្。ð«”󠀧‌𑈵; ؠ្.ð«”󠀧‌𑈵; [B2, B3, C1, P1, V6]; xn--fgb471g.xn--0ug9853g7verp838a; ; xn--fgb471g.xn--9w9c29jw3931a; [B2, B3, P1, V6] # ؠ្.ð«”𑈵
-xn--fgb471g.xn--9w9c29jw3931a; ؠ្.ð«”󠀧𑈵; [B2, B3, V6]; xn--fgb471g.xn--9w9c29jw3931a; ; ; # ؠ្.ð«”𑈵
-xn--fgb471g.xn--0ug9853g7verp838a; ؠ្.ð«”󠀧‌𑈵; [B2, B3, C1, V6]; xn--fgb471g.xn--0ug9853g7verp838a; ; ; # ؠ្.ð«”𑈵
-񋉕.𞣕𞤊; 񋉕.𞣕𞤬; [B1, P1, V5, V6]; xn--tf5w.xn--2b6hof; ; ; # .𞣕𞤬
-񋉕.𞣕𞤬; ; [B1, P1, V5, V6]; xn--tf5w.xn--2b6hof; ; ; # .𞣕𞤬
+ß\u200D\u103A。⒈; ß\u200D\u103A.⒈; [C2, V6]; xn--zca679eh2l.xn--tsh; ; xn--ss-f4j.xn--tsh; [V6] # ß်.⒈
+ß\u200D\u103A。1.; ß\u200D\u103A.1.; [C2]; xn--zca679eh2l.1.; ; xn--ss-f4j.1.; [] # ß်.1.
+SS\u200D\u103A。1.; ss\u200D\u103A.1.; [C2]; xn--ss-f4j585j.1.; ; xn--ss-f4j.1.; [] # ss်.1.
+ss\u200D\u103A。1.; ss\u200D\u103A.1.; [C2]; xn--ss-f4j585j.1.; ; xn--ss-f4j.1.; [] # ss်.1.
+Ss\u200D\u103A。1.; ss\u200D\u103A.1.; [C2]; xn--ss-f4j585j.1.; ; xn--ss-f4j.1.; [] # ss်.1.
+xn--ss-f4j.1.; ss\u103A.1.; ; xn--ss-f4j.1.; ; ; # ss်.1.
+ss\u103A.1.; ; ; xn--ss-f4j.1.; ; ; # ss်.1.
+SS\u103A.1.; ss\u103A.1.; ; xn--ss-f4j.1.; ; ; # ss်.1.
+Ss\u103A.1.; ss\u103A.1.; ; xn--ss-f4j.1.; ; ; # ss်.1.
+xn--ss-f4j585j.1.; ss\u200D\u103A.1.; [C2]; xn--ss-f4j585j.1.; ; ; # ss်.1.
+xn--zca679eh2l.1.; ß\u200D\u103A.1.; [C2]; xn--zca679eh2l.1.; ; ; # ß်.1.
+SS\u200D\u103A。⒈; ss\u200D\u103A.⒈; [C2, V6]; xn--ss-f4j585j.xn--tsh; ; xn--ss-f4j.xn--tsh; [V6] # ss်.⒈
+ss\u200D\u103A。⒈; ss\u200D\u103A.⒈; [C2, V6]; xn--ss-f4j585j.xn--tsh; ; xn--ss-f4j.xn--tsh; [V6] # ss်.⒈
+Ss\u200D\u103A。⒈; ss\u200D\u103A.⒈; [C2, V6]; xn--ss-f4j585j.xn--tsh; ; xn--ss-f4j.xn--tsh; [V6] # ss်.⒈
+xn--ss-f4j.xn--tsh; ss\u103A.⒈; [V6]; xn--ss-f4j.xn--tsh; ; ; # ss်.⒈
+xn--ss-f4j585j.xn--tsh; ss\u200D\u103A.⒈; [C2, V6]; xn--ss-f4j585j.xn--tsh; ; ; # ss်.⒈
+xn--zca679eh2l.xn--tsh; ß\u200D\u103A.⒈; [C2, V6]; xn--zca679eh2l.xn--tsh; ; ; # ß်.⒈
+\u0B4D\u200C𙶵𞻘。\u200D; \u0B4D\u200C𙶵𞻘.\u200D; [B1, C2, V5, V6]; xn--9ic637hz82z32jc.xn--1ug; ; xn--9ic6417rn4xb.; [B1, V5, V6] # à­.
+xn--9ic6417rn4xb.; \u0B4D𙶵𞻘.; [B1, V5, V6]; xn--9ic6417rn4xb.; ; ; # à­.
+xn--9ic637hz82z32jc.xn--1ug; \u0B4D\u200C𙶵𞻘.\u200D; [B1, C2, V5, V6]; xn--9ic637hz82z32jc.xn--1ug; ; ; # à­.
+ð®…。\u06BCðŸ•; ð®….\u06BCðŸ•; [B3]; xn--c29c.xn--vkb8871w; ; ; # ð®….Ú¼ðŸ•
+ð®…。\u06BCðŸ•; ð®….\u06BCðŸ•; [B3]; xn--c29c.xn--vkb8871w; ; ; # ð®….Ú¼ðŸ•
+xn--c29c.xn--vkb8871w; ð®….\u06BCðŸ•; [B3]; xn--c29c.xn--vkb8871w; ; ; # ð®….Ú¼ðŸ•
+\u0620\u17D2。ð«”󠀧\u200C𑈵; \u0620\u17D2.ð«”󠀧\u200C𑈵; [B2, B3, C1, V6]; xn--fgb471g.xn--0ug9853g7verp838a; ; xn--fgb471g.xn--9w9c29jw3931a; [B2, B3, V6] # ؠ្.ð«”𑈵
+xn--fgb471g.xn--9w9c29jw3931a; \u0620\u17D2.ð«”󠀧𑈵; [B2, B3, V6]; xn--fgb471g.xn--9w9c29jw3931a; ; ; # ؠ្.ð«”𑈵
+xn--fgb471g.xn--0ug9853g7verp838a; \u0620\u17D2.ð«”󠀧\u200C𑈵; [B2, B3, C1, V6]; xn--fgb471g.xn--0ug9853g7verp838a; ; ; # ؠ្.ð«”𑈵
+񋉕.𞣕𞤊; 񋉕.𞣕𞤬; [B1, V5, V6]; xn--tf5w.xn--2b6hof; ; ; # .𞣕𞤬
+񋉕.𞣕𞤬; ; [B1, V5, V6]; xn--tf5w.xn--2b6hof; ; ; # .𞣕𞤬
xn--tf5w.xn--2b6hof; 񋉕.𞣕𞤬; [B1, V5, V6]; xn--tf5w.xn--2b6hof; ; ; # .𞣕𞤬
-ÛŒð¨¿ï¼ŽÃŸà¾„ð‘¬; ÛŒð¨¿.ß྄ð‘¬; ; xn--clb2593k.xn--zca216edt0r; ; xn--clb2593k.xn--ss-toj6092t; # ÛŒð¨¿.ß྄ð‘¬
-ÛŒð¨¿.ß྄ð‘¬; ; ; xn--clb2593k.xn--zca216edt0r; ; xn--clb2593k.xn--ss-toj6092t; # ÛŒð¨¿.ß྄ð‘¬
-ÛŒð¨¿.SS྄ð‘¬; ÛŒð¨¿.ss྄ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
-ÛŒð¨¿.ss྄ð‘¬; ; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
-xn--clb2593k.xn--ss-toj6092t; ÛŒð¨¿.ss྄ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
-xn--clb2593k.xn--zca216edt0r; ÛŒð¨¿.ß྄ð‘¬; ; xn--clb2593k.xn--zca216edt0r; ; ; # ÛŒð¨¿.ß྄ð‘¬
-ÛŒð¨¿ï¼ŽSS྄ð‘¬; ÛŒð¨¿.ss྄ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
-ÛŒð¨¿ï¼Žss྄ð‘¬; ÛŒð¨¿.ss྄ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
-ÛŒð¨¿.Ss྄ð‘¬; ÛŒð¨¿.ss྄ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
-ÛŒð¨¿ï¼ŽSs྄ð‘¬; ÛŒð¨¿.ss྄ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
-ðŸ â‰®â€Œï½¡ó …±áž´; 8≮‌.áž´; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
-ðŸ ≮‌。󠅱឴; 8≮‌.áž´; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
-8≮‌。󠅱឴; 8≮‌.឴; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
-8≮‌。󠅱឴; 8≮‌.឴; [C1, P1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [P1, V5, V6] # 8≮.
-xn--8-ngo.xn--z3e; 8≮.឴; [V5, V6]; xn--8-ngo.xn--z3e; ; ; # 8≮.
-xn--8-sgn10i.xn--z3e; 8≮‌.឴; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; ; # 8≮.
-ᢕ≯︒񄂯.Ⴀ; ᢕ≯︒񄂯.Ⴀ; [P1, V6]; xn--fbf851cq98poxw1a.xn--7md; ; ; # ᢕ≯︒.Ⴀ
-ᢕ≯︒񄂯.Ⴀ; ᢕ≯︒񄂯.Ⴀ; [P1, V6]; xn--fbf851cq98poxw1a.xn--7md; ; ; # ᢕ≯︒.Ⴀ
-ᢕ≯。񄂯.Ⴀ; ᢕ≯.񄂯.Ⴀ; [P1, V6]; xn--fbf851c.xn--ko1u.xn--7md; ; ; # ᢕ≯..Ⴀ
-ᢕ≯。񄂯.Ⴀ; ᢕ≯.񄂯.Ⴀ; [P1, V6]; xn--fbf851c.xn--ko1u.xn--7md; ; ; # ᢕ≯..Ⴀ
-ᢕ≯。񄂯.ⴀ; ᢕ≯.񄂯.ⴀ; [P1, V6]; xn--fbf851c.xn--ko1u.xn--rkj; ; ; # ᢕ≯..ⴀ
-ᢕ≯。񄂯.ⴀ; ᢕ≯.񄂯.ⴀ; [P1, V6]; xn--fbf851c.xn--ko1u.xn--rkj; ; ; # ᢕ≯..ⴀ
+\u06CCð¨¿ï¼ŽÃŸ\u0F84ð‘¬; \u06CCð¨¿.ß\u0F84ð‘¬; ; xn--clb2593k.xn--zca216edt0r; ; xn--clb2593k.xn--ss-toj6092t; # ÛŒð¨¿.ß྄ð‘¬
+\u06CCð¨¿.ß\u0F84ð‘¬; ; ; xn--clb2593k.xn--zca216edt0r; ; xn--clb2593k.xn--ss-toj6092t; # ÛŒð¨¿.ß྄ð‘¬
+\u06CCð¨¿.SS\u0F84ð‘¬; \u06CCð¨¿.ss\u0F84ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
+\u06CCð¨¿.ss\u0F84ð‘¬; ; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
+xn--clb2593k.xn--ss-toj6092t; \u06CCð¨¿.ss\u0F84ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
+xn--clb2593k.xn--zca216edt0r; \u06CCð¨¿.ß\u0F84ð‘¬; ; xn--clb2593k.xn--zca216edt0r; ; ; # ÛŒð¨¿.ß྄ð‘¬
+\u06CCð¨¿ï¼ŽSS\u0F84ð‘¬; \u06CCð¨¿.ss\u0F84ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
+\u06CCð¨¿ï¼Žss\u0F84ð‘¬; \u06CCð¨¿.ss\u0F84ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
+\u06CCð¨¿.Ss\u0F84ð‘¬; \u06CCð¨¿.ss\u0F84ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
+\u06CCð¨¿ï¼ŽSs\u0F84ð‘¬; \u06CCð¨¿.ss\u0F84ð‘¬; ; xn--clb2593k.xn--ss-toj6092t; ; ; # ÛŒð¨¿.ss྄ð‘¬
+ðŸ â‰®\u200C。󠅱\u17B4; 8≮\u200C.\u17B4; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [V5, V6] # 8≮.
+ðŸ <\u0338\u200C。󠅱\u17B4; 8≮\u200C.\u17B4; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [V5, V6] # 8≮.
+8≮\u200C。󠅱\u17B4; 8≮\u200C.\u17B4; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [V5, V6] # 8≮.
+8<\u0338\u200C。󠅱\u17B4; 8≮\u200C.\u17B4; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; xn--8-ngo.xn--z3e; [V5, V6] # 8≮.
+xn--8-ngo.xn--z3e; 8≮.\u17B4; [V5, V6]; xn--8-ngo.xn--z3e; ; ; # 8≮.
+xn--8-sgn10i.xn--z3e; 8≮\u200C.\u17B4; [C1, V5, V6]; xn--8-sgn10i.xn--z3e; ; ; # 8≮.
+ᢕ≯︒񄂯.Ⴀ; ᢕ≯︒񄂯.Ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--7md; ; ; # ᢕ≯︒.Ⴀ
+ᢕ>\u0338︒񄂯.Ⴀ; ᢕ≯︒񄂯.Ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--7md; ; ; # ᢕ≯︒.Ⴀ
+ᢕ≯。񄂯.Ⴀ; ᢕ≯.񄂯.Ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--7md; ; ; # ᢕ≯..Ⴀ
+ᢕ>\u0338。񄂯.Ⴀ; ᢕ≯.񄂯.Ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--7md; ; ; # ᢕ≯..Ⴀ
+ᢕ>\u0338。񄂯.ⴀ; ᢕ≯.񄂯.ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--rkj; ; ; # ᢕ≯..ⴀ
+ᢕ≯。񄂯.ⴀ; ᢕ≯.񄂯.ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--rkj; ; ; # ᢕ≯..ⴀ
xn--fbf851c.xn--ko1u.xn--rkj; ᢕ≯.񄂯.ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--rkj; ; ; # ᢕ≯..ⴀ
xn--fbf851c.xn--ko1u.xn--7md; ᢕ≯.񄂯.Ⴀ; [V6]; xn--fbf851c.xn--ko1u.xn--7md; ; ; # ᢕ≯..Ⴀ
-ᢕ≯︒񄂯.ⴀ; ᢕ≯︒񄂯.ⴀ; [P1, V6]; xn--fbf851cq98poxw1a.xn--rkj; ; ; # ᢕ≯︒.ⴀ
-ᢕ≯︒񄂯.ⴀ; ᢕ≯︒񄂯.ⴀ; [P1, V6]; xn--fbf851cq98poxw1a.xn--rkj; ; ; # ᢕ≯︒.ⴀ
+ᢕ>\u0338︒񄂯.ⴀ; ᢕ≯︒񄂯.ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--rkj; ; ; # ᢕ≯︒.ⴀ
+ᢕ≯︒񄂯.ⴀ; ᢕ≯︒񄂯.ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--rkj; ; ; # ᢕ≯︒.ⴀ
xn--fbf851cq98poxw1a.xn--rkj; ᢕ≯︒񄂯.ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--rkj; ; ; # ᢕ≯︒.ⴀ
xn--fbf851cq98poxw1a.xn--7md; ᢕ≯︒񄂯.Ⴀ; [V6]; xn--fbf851cq98poxw1a.xn--7md; ; ; # ᢕ≯︒.Ⴀ
-ྟ.-ࠪ; ྟ.-ࠪ; [V3, V5]; xn--vfd.xn----fhd; ; ; # ྟ.-ࠪ
-ྟ.-ࠪ; ; [V3, V5]; xn--vfd.xn----fhd; ; ; # ྟ.-ࠪ
-xn--vfd.xn----fhd; ྟ.-ࠪ; [V3, V5]; xn--vfd.xn----fhd; ; ; # ྟ.-ࠪ
-ᵬ󠆠.핒⒒⒈􈄦; ᵬ.핒⒒⒈􈄦; [P1, V6]; xn--tbg.xn--tsht7586kyts9l; ; ; # ᵬ.핒⒒⒈
-ᵬ󠆠.핒⒒⒈􈄦; ᵬ.핒⒒⒈􈄦; [P1, V6]; xn--tbg.xn--tsht7586kyts9l; ; ; # ᵬ.핒⒒⒈
-ᵬ󠆠.핒11.1.􈄦; ᵬ.핒11.1.􈄦; [P1, V6]; xn--tbg.xn--11-5o7k.1.xn--k469f; ; ; # ᵬ.핒11.1.
-ᵬ󠆠.핒11.1.􈄦; ᵬ.핒11.1.􈄦; [P1, V6]; xn--tbg.xn--11-5o7k.1.xn--k469f; ; ; # ᵬ.핒11.1.
+\u0F9F.-\u082A; \u0F9F.-\u082A; [V3, V5]; xn--vfd.xn----fhd; ; ; # ྟ.-ࠪ
+\u0F9F.-\u082A; ; [V3, V5]; xn--vfd.xn----fhd; ; ; # ྟ.-ࠪ
+xn--vfd.xn----fhd; \u0F9F.-\u082A; [V3, V5]; xn--vfd.xn----fhd; ; ; # ྟ.-ࠪ
+ᵬ󠆠.핒⒒⒈􈄦; ᵬ.핒⒒⒈􈄦; [V6]; xn--tbg.xn--tsht7586kyts9l; ; ; # ᵬ.핒⒒⒈
+ᵬ󠆠.핒⒒⒈􈄦; ᵬ.핒⒒⒈􈄦; [V6]; xn--tbg.xn--tsht7586kyts9l; ; ; # ᵬ.핒⒒⒈
+ᵬ󠆠.핒11.1.􈄦; ᵬ.핒11.1.􈄦; [V6]; xn--tbg.xn--11-5o7k.1.xn--k469f; ; ; # ᵬ.핒11.1.
+ᵬ󠆠.핒11.1.􈄦; ᵬ.핒11.1.􈄦; [V6]; xn--tbg.xn--11-5o7k.1.xn--k469f; ; ; # ᵬ.핒11.1.
xn--tbg.xn--11-5o7k.1.xn--k469f; ᵬ.핒11.1.􈄦; [V6]; xn--tbg.xn--11-5o7k.1.xn--k469f; ; ; # ᵬ.핒11.1.
xn--tbg.xn--tsht7586kyts9l; ᵬ.핒⒒⒈􈄦; [V6]; xn--tbg.xn--tsht7586kyts9l; ; ; # ᵬ.핒⒒⒈
-Ï‚ð‘“‚ð‹¢ï¼ŽÙ¨; Ï‚ð‘“‚ð‹¢.Ù¨; [B1]; xn--3xa8371khhl.xn--hib; ; xn--4xa6371khhl.xn--hib; # Ï‚ð‘“‚ð‹¢.Ù¨
-Ï‚ð‘“‚ð‹¢.Ù¨; ; [B1]; xn--3xa8371khhl.xn--hib; ; xn--4xa6371khhl.xn--hib; # Ï‚ð‘“‚ð‹¢.Ù¨
-Σ𑓂ð‹¢.Ù¨; σ𑓂ð‹¢.Ù¨; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂ð‹¢.Ù¨
-σ𑓂ð‹¢.Ù¨; ; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂ð‹¢.Ù¨
-xn--4xa6371khhl.xn--hib; σ𑓂ð‹¢.Ù¨; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂ð‹¢.Ù¨
-xn--3xa8371khhl.xn--hib; Ï‚ð‘“‚ð‹¢.Ù¨; [B1]; xn--3xa8371khhl.xn--hib; ; ; # Ï‚ð‘“‚ð‹¢.Ù¨
-Σ𑓂ð‹¢ï¼ŽÙ¨; σ𑓂ð‹¢.Ù¨; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂ð‹¢.Ù¨
-σ𑓂ð‹¢ï¼ŽÙ¨; σ𑓂ð‹¢.Ù¨; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂ð‹¢.Ù¨
-꥓‌ð‹»â€.ⷸ𞿄ð¹²; ; [B1, B6, C2, P1, V5, V6]; xn--0ugc8356he76c.xn--urju692efj0f; ; xn--3j9a531o.xn--urju692efj0f; [B1, P1, V5, V6] # ꥓ð‹».â·¸ð¹²
-xn--3j9a531o.xn--urju692efj0f; ꥓ð‹».ⷸ𞿄ð¹²; [B1, V5, V6]; xn--3j9a531o.xn--urju692efj0f; ; ; # ꥓ð‹».â·¸ð¹²
-xn--0ugc8356he76c.xn--urju692efj0f; ꥓‌ð‹»â€.ⷸ𞿄ð¹²; [B1, B6, C2, V5, V6]; xn--0ugc8356he76c.xn--urju692efj0f; ; ; # ꥓ð‹».â·¸ð¹²
-⊼。񪧖ڕ; ⊼.񪧖ڕ; [B1, B5, B6, P1, V6]; xn--ofh.xn--rjb13118f; ; ; # ⊼.ڕ
-xn--ofh.xn--rjb13118f; ⊼.񪧖ڕ; [B1, B5, B6, V6]; xn--ofh.xn--rjb13118f; ; ; # ⊼.ڕ
-ð¯¬ñ–‹”。󜳥; ð¯¬ñ–‹”.󜳥; [B2, B3, P1, V6]; xn--949co370q.xn--7g25e; ; ; # .
+Ï‚ð‘“‚ð‹¢ï¼Ž\u0668; Ï‚ð‘“‚ð‹¢.\u0668; [B1]; xn--3xa8371khhl.xn--hib; ; xn--4xa6371khhl.xn--hib; # Ï‚ð‘“‚ð‹¢.Ù¨
+Ï‚ð‘“‚ð‹¢.\u0668; ; [B1]; xn--3xa8371khhl.xn--hib; ; xn--4xa6371khhl.xn--hib; # Ï‚ð‘“‚ð‹¢.Ù¨
+Σ𑓂ð‹¢.\u0668; σ𑓂ð‹¢.\u0668; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂ð‹¢.Ù¨
+σ𑓂ð‹¢.\u0668; ; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂ð‹¢.Ù¨
+xn--4xa6371khhl.xn--hib; σ𑓂ð‹¢.\u0668; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂ð‹¢.Ù¨
+xn--3xa8371khhl.xn--hib; Ï‚ð‘“‚ð‹¢.\u0668; [B1]; xn--3xa8371khhl.xn--hib; ; ; # Ï‚ð‘“‚ð‹¢.Ù¨
+Σ𑓂ð‹¢ï¼Ž\u0668; σ𑓂ð‹¢.\u0668; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂ð‹¢.Ù¨
+σ𑓂ð‹¢ï¼Ž\u0668; σ𑓂ð‹¢.\u0668; [B1]; xn--4xa6371khhl.xn--hib; ; ; # σ𑓂ð‹¢.Ù¨
+\uA953\u200Cð‹»\u200D.\u2DF8ðž¿„ð¹²; ; [B1, B6, C2, V5, V6]; xn--0ugc8356he76c.xn--urju692efj0f; ; xn--3j9a531o.xn--urju692efj0f; [B1, V5, V6] # ꥓ð‹».â·¸ð¹²
+xn--3j9a531o.xn--urju692efj0f; \uA953ð‹».\u2DF8ðž¿„ð¹²; [B1, V5, V6]; xn--3j9a531o.xn--urju692efj0f; ; ; # ꥓ð‹».â·¸ð¹²
+xn--0ugc8356he76c.xn--urju692efj0f; \uA953\u200Cð‹»\u200D.\u2DF8ðž¿„ð¹²; [B1, B6, C2, V5, V6]; xn--0ugc8356he76c.xn--urju692efj0f; ; ; # ꥓ð‹».â·¸ð¹²
+⊼。񪧖\u0695; ⊼.񪧖\u0695; [B1, B5, B6, V6]; xn--ofh.xn--rjb13118f; ; ; # ⊼.ڕ
+xn--ofh.xn--rjb13118f; ⊼.񪧖\u0695; [B1, B5, B6, V6]; xn--ofh.xn--rjb13118f; ; ; # ⊼.ڕ
+ð¯¬ñ–‹”。󜳥; ð¯¬ñ–‹”.󜳥; [B2, B3, V6]; xn--949co370q.xn--7g25e; ; ; # .
xn--949co370q.xn--7g25e; ð¯¬ñ–‹”.󜳥; [B2, B3, V6]; xn--949co370q.xn--7g25e; ; ; # .
-Øð‘§ß。ςò¬˜ðŸ€žážµ; Øð‘§ß.Ï‚ò¬˜ðŸ€žážµ; [B1, B6, P1, V6]; xn--jfb66gt010c.xn--3xa823h9p95ars26d; ; xn--jfb66gt010c.xn--4xa623h9p95ars26d; # ð‘§ß.ς🀞
-Øð‘§ß。Σò¬˜ðŸ€žážµ; Øð‘§ß.σò¬˜ðŸ€žážµ; [B1, B6, P1, V6]; xn--jfb66gt010c.xn--4xa623h9p95ars26d; ; ; # ð‘§ß.σ🀞
-Øð‘§ß。σò¬˜ðŸ€žážµ; Øð‘§ß.σò¬˜ðŸ€žážµ; [B1, B6, P1, V6]; xn--jfb66gt010c.xn--4xa623h9p95ars26d; ; ; # ð‘§ß.σ🀞
-xn--jfb66gt010c.xn--4xa623h9p95ars26d; Øð‘§ß.σò¬˜ðŸ€žážµ; [B1, B6, V6]; xn--jfb66gt010c.xn--4xa623h9p95ars26d; ; ; # ð‘§ß.σ🀞
-xn--jfb66gt010c.xn--3xa823h9p95ars26d; Øð‘§ß.Ï‚ò¬˜ðŸ€žážµ; [B1, B6, V6]; xn--jfb66gt010c.xn--3xa823h9p95ars26d; ; ; # ð‘§ß.ς🀞
--ð³²Ù†ó ºã€‚꯭ðŸ¥; -ð³²Ù†ó º.꯭3; [B1, P1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -ð³²Ù†.꯭3
--ð³²Ù†ó ºã€‚꯭3; -ð³²Ù†ó º.꯭3; [B1, P1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -ð³²Ù†.꯭3
--ð²²Ù†ó ºã€‚꯭3; -ð³²Ù†ó º.꯭3; [B1, P1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -ð³²Ù†.꯭3
-xn----roc5482rek10i.xn--3-zw5e; -ð³²Ù†ó º.꯭3; [B1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -ð³²Ù†.꯭3
--ð²²Ù†ó ºã€‚꯭ðŸ¥; -ð³²Ù†ó º.꯭3; [B1, P1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -ð³²Ù†.꯭3
-‌󠴦。ñ²¨•â‰®ð¦œ; ‌󠴦.ñ²¨•â‰®ð¦œ; [B1, B5, B6, C1, P1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, P1, V6] # .≮ð¦œ
-‌󠴦。ñ²¨•≮ð¦œ; ‌󠴦.ñ²¨•â‰®ð¦œ; [B1, B5, B6, C1, P1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, P1, V6] # .≮ð¦œ
-‌󠴦。ñ²¨•â‰®ð¦œ; ‌󠴦.ñ²¨•â‰®ð¦œ; [B1, B5, B6, C1, P1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, P1, V6] # .≮ð¦œ
-‌󠴦。ñ²¨•≮ð¦œ; ‌󠴦.ñ²¨•â‰®ð¦œ; [B1, B5, B6, C1, P1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, P1, V6] # .≮ð¦œ
+\u0601ð‘§\u07DD。ςò¬˜ðŸ€ž\u17B5; \u0601ð‘§\u07DD.Ï‚ò¬˜ðŸ€ž\u17B5; [B1, B6, V6]; xn--jfb66gt010c.xn--3xa823h9p95ars26d; ; xn--jfb66gt010c.xn--4xa623h9p95ars26d; # ð‘§ß.ς🀞
+\u0601ð‘§\u07DD。Σò¬˜ðŸ€ž\u17B5; \u0601ð‘§\u07DD.σò¬˜ðŸ€ž\u17B5; [B1, B6, V6]; xn--jfb66gt010c.xn--4xa623h9p95ars26d; ; ; # ð‘§ß.σ🀞
+\u0601ð‘§\u07DD。σò¬˜ðŸ€ž\u17B5; \u0601ð‘§\u07DD.σò¬˜ðŸ€ž\u17B5; [B1, B6, V6]; xn--jfb66gt010c.xn--4xa623h9p95ars26d; ; ; # ð‘§ß.σ🀞
+xn--jfb66gt010c.xn--4xa623h9p95ars26d; \u0601ð‘§\u07DD.σò¬˜ðŸ€ž\u17B5; [B1, B6, V6]; xn--jfb66gt010c.xn--4xa623h9p95ars26d; ; ; # ð‘§ß.σ🀞
+xn--jfb66gt010c.xn--3xa823h9p95ars26d; \u0601ð‘§\u07DD.Ï‚ò¬˜ðŸ€ž\u17B5; [B1, B6, V6]; xn--jfb66gt010c.xn--3xa823h9p95ars26d; ; ; # ð‘§ß.ς🀞
+-ð³²\u0646ó ºã€‚\uABEDðŸ¥; -ð³²\u0646ó º.\uABED3; [B1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -ð³²Ù†.꯭3
+-ð³²\u0646ó ºã€‚\uABED3; -ð³²\u0646ó º.\uABED3; [B1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -ð³²Ù†.꯭3
+-ð²²\u0646ó ºã€‚\uABED3; -ð³²\u0646ó º.\uABED3; [B1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -ð³²Ù†.꯭3
+xn----roc5482rek10i.xn--3-zw5e; -ð³²\u0646ó º.\uABED3; [B1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -ð³²Ù†.꯭3
+-ð²²\u0646ó ºã€‚\uABEDðŸ¥; -ð³²\u0646ó º.\uABED3; [B1, V3, V5, V6]; xn----roc5482rek10i.xn--3-zw5e; ; ; # -ð³²Ù†.꯭3
+\u200C󠴦。ñ²¨•â‰®ð¦œ; \u200Có ´¦.ñ²¨•â‰®ð¦œ; [B1, B5, B6, C1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, V6] # .≮ð¦œ
+\u200C󠴦。ñ²¨•<\u0338ð¦œ; \u200Có ´¦.ñ²¨•â‰®ð¦œ; [B1, B5, B6, C1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, V6] # .≮ð¦œ
+\u200C󠴦。ñ²¨•â‰®ð¦œ; \u200Có ´¦.ñ²¨•â‰®ð¦œ; [B1, B5, B6, C1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, V6] # .≮ð¦œ
+\u200C󠴦。ñ²¨•<\u0338ð¦œ; \u200Có ´¦.ñ²¨•â‰®ð¦œ; [B1, B5, B6, C1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; xn--6v56e.xn--gdhz712gzlr6b; [B1, B5, B6, V6] # .≮ð¦œ
xn--6v56e.xn--gdhz712gzlr6b; ó ´¦.ñ²¨•â‰®ð¦œ; [B1, B5, B6, V6]; xn--6v56e.xn--gdhz712gzlr6b; ; ; # .≮ð¦œ
-xn--0ug22251l.xn--gdhz712gzlr6b; ‌󠴦.ñ²¨•â‰®ð¦œ; [B1, B5, B6, C1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; ; # .≮ð¦œ
-⒈✌òŸ¬Ÿï¼ŽðŸ¡ñ ±£; ⒈✌òŸ¬Ÿ.9ñ ±£; [P1, V6]; xn--tsh24g49550b.xn--9-o706d; ; ; # ⒈✌.9
-1.✌򟬟.9񠱣; ; [P1, V6]; 1.xn--7bi44996f.xn--9-o706d; ; ; # 1.✌.9
+xn--0ug22251l.xn--gdhz712gzlr6b; \u200Có ´¦.ñ²¨•â‰®ð¦œ; [B1, B5, B6, C1, V6]; xn--0ug22251l.xn--gdhz712gzlr6b; ; ; # .≮ð¦œ
+⒈✌òŸ¬Ÿï¼ŽðŸ¡ñ ±£; ⒈✌òŸ¬Ÿ.9ñ ±£; [V6]; xn--tsh24g49550b.xn--9-o706d; ; ; # ⒈✌.9
+1.✌򟬟.9񠱣; ; [V6]; 1.xn--7bi44996f.xn--9-o706d; ; ; # 1.✌.9
1.xn--7bi44996f.xn--9-o706d; 1.✌򟬟.9񠱣; [V6]; 1.xn--7bi44996f.xn--9-o706d; ; ; # 1.✌.9
xn--tsh24g49550b.xn--9-o706d; ⒈✌򟬟.9񠱣; [V6]; xn--tsh24g49550b.xn--9-o706d; ; ; # ⒈✌.9
-𑆾𞤬ð®†.٦ᷔ; ; [B1, V5]; xn--d29c79hf98r.xn--fib011j; ; ; # 𑆾𞤬ð®†.٦ᷔ
-𑆾𞤊ð®†.٦ᷔ; 𑆾𞤬ð®†.٦ᷔ; [B1, V5]; xn--d29c79hf98r.xn--fib011j; ; ; # 𑆾𞤬ð®†.٦ᷔ
-xn--d29c79hf98r.xn--fib011j; 𑆾𞤬ð®†.٦ᷔ; [B1, V5]; xn--d29c79hf98r.xn--fib011j; ; ; # 𑆾𞤬ð®†.٦ᷔ
-ς.꧀꣄; ς.꧀꣄; [V5]; xn--3xa.xn--0f9ars; ; xn--4xa.xn--0f9ars; # ς.꧀꣄
-ς.꧀꣄; ; [V5]; xn--3xa.xn--0f9ars; ; xn--4xa.xn--0f9ars; # ς.꧀꣄
-Σ.꧀꣄; σ.꧀꣄; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄
-σ.꧀꣄; ; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄
-xn--4xa.xn--0f9ars; σ.꧀꣄; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄
-xn--3xa.xn--0f9ars; ς.꧀꣄; [V5]; xn--3xa.xn--0f9ars; ; ; # ς.꧀꣄
-Σ.꧀꣄; σ.꧀꣄; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄
-σ.꧀꣄; σ.꧀꣄; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄
-𑰶‌≯ð³ï¼Žà¡›; 𑰶‌≯ð³.à¡›; [B1, B3, B6, C1, P1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, B3, B6, P1, V5, V6] # 𑰶≯ð³.à¡›
-𑰶‌≯ð³ï¼Žà¡›; 𑰶‌≯ð³.à¡›; [B1, B3, B6, C1, P1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, B3, B6, P1, V5, V6] # 𑰶≯ð³.à¡›
-𑰶‌≯ð³.à¡›; ; [B1, B3, B6, C1, P1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, B3, B6, P1, V5, V6] # 𑰶≯ð³.à¡›
-𑰶‌≯ð³.à¡›; 𑰶‌≯ð³.à¡›; [B1, B3, B6, C1, P1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, B3, B6, P1, V5, V6] # 𑰶≯ð³.à¡›
-𑰶‌≯ð².à¡›; 𑰶‌≯ð³.à¡›; [B1, B3, B6, C1, P1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, B3, B6, P1, V5, V6] # 𑰶≯ð³.à¡›
-𑰶‌≯ð².à¡›; 𑰶‌≯ð³.à¡›; [B1, B3, B6, C1, P1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, B3, B6, P1, V5, V6] # 𑰶≯ð³.à¡›
-xn--hdhz343g3wj.xn--qwb; 𑰶≯ð³.à¡›; [B1, B3, B6, V5, V6]; xn--hdhz343g3wj.xn--qwb; ; ; # 𑰶≯ð³.à¡›
-xn--0ug06g7697ap4ma.xn--qwb; 𑰶‌≯ð³.à¡›; [B1, B3, B6, C1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; ; # 𑰶≯ð³.à¡›
-𑰶‌≯ð²ï¼Žà¡›; 𑰶‌≯ð³.à¡›; [B1, B3, B6, C1, P1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, B3, B6, P1, V5, V6] # 𑰶≯ð³.à¡›
-𑰶‌≯ð²ï¼Žà¡›; 𑰶‌≯ð³.à¡›; [B1, B3, B6, C1, P1, V5, V6]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, B3, B6, P1, V5, V6] # 𑰶≯ð³.à¡›
-羚。≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ; # 羚.≯
-羚。≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ; # 羚.≯
-羚。≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ; # 羚.≯
-羚。≯; 羚.≯; [P1, V6]; xn--xt0a.xn--hdh; ; ; # 羚.≯
-xn--xt0a.xn--hdh; 羚.≯; [V6]; xn--xt0a.xn--hdh; ; ; # 羚.≯
-ð‘“‚á™ï¼Žà¢¨; ð‘“‚á™.ࢨ; [B1, P1, V5, V6]; xn--e1e9580k.xn--xyb; ; ; # ð‘“‚.ࢨ
-ð‘“‚á™.ࢨ; ; [B1, P1, V5, V6]; xn--e1e9580k.xn--xyb; ; ; # ð‘“‚.ࢨ
-xn--e1e9580k.xn--xyb; ð‘“‚á™.ࢨ; [B1, V5, V6]; xn--e1e9580k.xn--xyb; ; ; # ð‘“‚.ࢨ
-󨣿󠇀â€ï½¡Ù£Ò áƒ€ðŸ‘; 󨣿â€.٣ҡჀ3; [B1, B6, C2, P1, V6]; xn--1ug89936l.xn--3-ozb36kixu; ; xn--1r19e.xn--3-ozb36kixu; [B1, P1, V6] # .٣ҡჀ3
-󨣿󠇀â€ã€‚٣ҠჀ3; 󨣿â€.٣ҡჀ3; [B1, B6, C2, P1, V6]; xn--1ug89936l.xn--3-ozb36kixu; ; xn--1r19e.xn--3-ozb36kixu; [B1, P1, V6] # .٣ҡჀ3
-󨣿󠇀â€ã€‚Ù£Ò¡â´ 3; 󨣿â€.Ù£Ò¡â´ 3; [B1, B6, C2, P1, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, P1, V6] # .Ù£Ò¡â´ 3
-xn--1r19e.xn--3-ozb36ko13f; 󨣿.٣ҡⴠ3; [B1, V6]; xn--1r19e.xn--3-ozb36ko13f; ; ; # .٣ҡⴠ3
-xn--1ug89936l.xn--3-ozb36ko13f; 󨣿â€.Ù£Ò¡â´ 3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; ; # .Ù£Ò¡â´ 3
-xn--1r19e.xn--3-ozb36kixu; 󨣿.٣ҡჀ3; [B1, V6]; xn--1r19e.xn--3-ozb36kixu; ; ; # .٣ҡჀ3
-xn--1ug89936l.xn--3-ozb36kixu; 󨣿â€.٣ҡჀ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36kixu; ; ; # .٣ҡჀ3
-󨣿󠇀â€ï½¡Ù£Ò¡â´ ðŸ‘; 󨣿â€.Ù£Ò¡â´ 3; [B1, B6, C2, P1, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, P1, V6] # .Ù£Ò¡â´ 3
-󨣿󠇀â€ã€‚Ù£Ò â´ 3; 󨣿â€.Ù£Ò¡â´ 3; [B1, B6, C2, P1, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, P1, V6] # .Ù£Ò¡â´ 3
-󨣿󠇀â€ï½¡Ù£Ò â´ ðŸ‘; 󨣿â€.Ù£Ò¡â´ 3; [B1, B6, C2, P1, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, P1, V6] # .Ù£Ò¡â´ 3
-ᡷ。ð¹¢à£ ; á¡·.ð¹¢à£ ; [B1]; xn--k9e.xn--j0b5005k; ; ; # á¡·.ð¹¢à£ 
-xn--k9e.xn--j0b5005k; á¡·.ð¹¢à£ ; [B1]; xn--k9e.xn--j0b5005k; ; ; # á¡·.ð¹¢à£ 
-򕮇᯳。٦񗜼្ß; 򕮇᯳.٦񗜼្ß; [B1, P1, V6]; xn--1zf58212h.xn--zca34zk4qx711k; ; xn--1zf58212h.xn--ss-pyd459o3258m; # ᯳.٦្ß
-򕮇᯳。٦񗜼្ß; 򕮇᯳.٦񗜼្ß; [B1, P1, V6]; xn--1zf58212h.xn--zca34zk4qx711k; ; xn--1zf58212h.xn--ss-pyd459o3258m; # ᯳.٦្ß
-򕮇᯳。٦񗜼្SS; 򕮇᯳.٦񗜼្ss; [B1, P1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
-򕮇᯳。٦񗜼្ss; 򕮇᯳.٦񗜼្ss; [B1, P1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
-򕮇᯳。٦񗜼្Ss; 򕮇᯳.٦񗜼្ss; [B1, P1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
-xn--1zf58212h.xn--ss-pyd459o3258m; 򕮇᯳.٦񗜼្ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
-xn--1zf58212h.xn--zca34zk4qx711k; 򕮇᯳.٦񗜼្ß; [B1, V6]; xn--1zf58212h.xn--zca34zk4qx711k; ; ; # ᯳.٦្ß
-򕮇᯳。٦񗜼្SS; 򕮇᯳.٦񗜼្ss; [B1, P1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
-򕮇᯳。٦񗜼្ss; 򕮇᯳.٦񗜼្ss; [B1, P1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
-򕮇᯳。٦񗜼្Ss; 򕮇᯳.٦񗜼្ss; [B1, P1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
-٤򤽎𑲛.󠔢︒≠; ; [B1, P1, V6]; xn--dib0653l2i02d.xn--1ch7467f14u4g; ; ; # ٤𑲛.︒≠
-٤򤽎𑲛.󠔢︒≠; ٤򤽎𑲛.󠔢︒≠; [B1, P1, V6]; xn--dib0653l2i02d.xn--1ch7467f14u4g; ; ; # ٤𑲛.︒≠
-٤򤽎𑲛.󠔢。≠; ٤򤽎𑲛.󠔢.≠; [B1, P1, V6]; xn--dib0653l2i02d.xn--k736e.xn--1ch; ; ; # ٤𑲛..≠
-٤򤽎𑲛.󠔢。≠; ٤򤽎𑲛.󠔢.≠; [B1, P1, V6]; xn--dib0653l2i02d.xn--k736e.xn--1ch; ; ; # ٤𑲛..≠
-xn--dib0653l2i02d.xn--k736e.xn--1ch; ٤򤽎𑲛.󠔢.≠; [B1, V6]; xn--dib0653l2i02d.xn--k736e.xn--1ch; ; ; # ٤𑲛..≠
-xn--dib0653l2i02d.xn--1ch7467f14u4g; ٤򤽎𑲛.󠔢︒≠; [B1, V6]; xn--dib0653l2i02d.xn--1ch7467f14u4g; ; ; # ٤𑲛.︒≠
-➆ñ·§•á»—⒈.ò‘¬’ñ¡˜®à¡›ðŸ«; ➆ñ·§•á»—â’ˆ.ò‘¬’ñ¡˜®à¡›9; [P1, V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.à¡›9
-➆ñ·§•ỗ⒈.ò‘¬’ñ¡˜®à¡›ðŸ«; ➆ñ·§•á»—â’ˆ.ò‘¬’ñ¡˜®à¡›9; [P1, V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.à¡›9
-➆񷧕ỗ1..򑬒񡘮࡛9; ; [P1, V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [P1, V6, A4_2]; ; # ➆ỗ1..࡛9
-➆񷧕ỗ1..򑬒񡘮࡛9; ➆񷧕ỗ1..򑬒񡘮࡛9; [P1, V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [P1, V6, A4_2]; ; # ➆ỗ1..࡛9
-➆񷧕Ỗ1..򑬒񡘮࡛9; ➆񷧕ỗ1..򑬒񡘮࡛9; [P1, V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [P1, V6, A4_2]; ; # ➆ỗ1..࡛9
-➆񷧕Ỗ1..򑬒񡘮࡛9; ➆񷧕ỗ1..򑬒񡘮࡛9; [P1, V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [P1, V6, A4_2]; ; # ➆ỗ1..࡛9
-xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; ➆񷧕ỗ1..򑬒񡘮࡛9; [V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [V6, A4_2]; ; # ➆ỗ1..࡛9
-➆ñ·§•Ỗ⒈.ò‘¬’ñ¡˜®à¡›ðŸ«; ➆ñ·§•á»—â’ˆ.ò‘¬’ñ¡˜®à¡›9; [P1, V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.à¡›9
-➆ñ·§•á»–⒈.ò‘¬’ñ¡˜®à¡›ðŸ«; ➆ñ·§•á»—â’ˆ.ò‘¬’ñ¡˜®à¡›9; [P1, V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.à¡›9
-xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ➆񷧕ỗ⒈.򑬒񡘮࡛9; [V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.࡛9
-â€ï½¡ðž¤˜; â€.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺
-â€ã€‚𞤘; â€.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺
-â€ã€‚𞤺; â€.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺
+𑆾𞤬ð®†.\u0666\u1DD4; ; [B1, V5]; xn--d29c79hf98r.xn--fib011j; ; ; # 𑆾𞤬ð®†.٦ᷔ
+𑆾𞤊ð®†.\u0666\u1DD4; 𑆾𞤬ð®†.\u0666\u1DD4; [B1, V5]; xn--d29c79hf98r.xn--fib011j; ; ; # 𑆾𞤬ð®†.٦ᷔ
+xn--d29c79hf98r.xn--fib011j; 𑆾𞤬ð®†.\u0666\u1DD4; [B1, V5]; xn--d29c79hf98r.xn--fib011j; ; ; # 𑆾𞤬ð®†.٦ᷔ
+ς.\uA9C0\uA8C4; ς.\uA9C0\uA8C4; [V5]; xn--3xa.xn--0f9ars; ; xn--4xa.xn--0f9ars; # ς.꧀꣄
+ς.\uA9C0\uA8C4; ; [V5]; xn--3xa.xn--0f9ars; ; xn--4xa.xn--0f9ars; # ς.꧀꣄
+Σ.\uA9C0\uA8C4; σ.\uA9C0\uA8C4; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄
+σ.\uA9C0\uA8C4; ; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄
+xn--4xa.xn--0f9ars; σ.\uA9C0\uA8C4; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄
+xn--3xa.xn--0f9ars; ς.\uA9C0\uA8C4; [V5]; xn--3xa.xn--0f9ars; ; ; # ς.꧀꣄
+Σ.\uA9C0\uA8C4; σ.\uA9C0\uA8C4; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄
+σ.\uA9C0\uA8C4; σ.\uA9C0\uA8C4; [V5]; xn--4xa.xn--0f9ars; ; ; # σ.꧀꣄
+ð‘°¶\u200C≯ð³ï¼Ž\u085B; ð‘°¶\u200C≯ð³.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯ð³.à¡›
+ð‘°¶\u200C>\u0338ð³ï¼Ž\u085B; ð‘°¶\u200C≯ð³.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯ð³.à¡›
+ð‘°¶\u200C≯ð³.\u085B; ; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯ð³.à¡›
+ð‘°¶\u200C>\u0338ð³.\u085B; ð‘°¶\u200C≯ð³.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯ð³.à¡›
+ð‘°¶\u200C>\u0338ð².\u085B; ð‘°¶\u200C≯ð³.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯ð³.à¡›
+ð‘°¶\u200C≯ð².\u085B; ð‘°¶\u200C≯ð³.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯ð³.à¡›
+xn--hdhz343g3wj.xn--qwb; 𑰶≯ð³.\u085B; [B1, V5]; xn--hdhz343g3wj.xn--qwb; ; ; # 𑰶≯ð³.à¡›
+xn--0ug06g7697ap4ma.xn--qwb; ð‘°¶\u200C≯ð³.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; ; # 𑰶≯ð³.à¡›
+ð‘°¶\u200C>\u0338ð²ï¼Ž\u085B; ð‘°¶\u200C≯ð³.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯ð³.à¡›
+ð‘°¶\u200C≯ð²ï¼Ž\u085B; ð‘°¶\u200C≯ð³.\u085B; [B1, C1, V5]; xn--0ug06g7697ap4ma.xn--qwb; ; xn--hdhz343g3wj.xn--qwb; [B1, V5] # 𑰶≯ð³.à¡›
+羚。≯; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯
+羚。>\u0338; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯
+羚。≯; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯
+羚。>\u0338; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯
+xn--xt0a.xn--hdh; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯
+羚.≯; ; ; xn--xt0a.xn--hdh; ; ; # 羚.≯
+羚.>\u0338; 羚.≯; ; xn--xt0a.xn--hdh; ; ; # 羚.≯
+𑓂\u1759.\u08A8; 𑓂\u1759.\u08A8; [B1, V5, V6]; xn--e1e9580k.xn--xyb; ; ; # 𑓂.ࢨ
+𑓂\u1759.\u08A8; ; [B1, V5, V6]; xn--e1e9580k.xn--xyb; ; ; # 𑓂.ࢨ
+xn--e1e9580k.xn--xyb; 𑓂\u1759.\u08A8; [B1, V5, V6]; xn--e1e9580k.xn--xyb; ; ; # 𑓂.ࢨ
+󨣿󠇀\u200D。\u0663ҠჀðŸ‘; 󨣿\u200D.\u0663ҡჀ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36kixu; ; xn--1r19e.xn--3-ozb36kixu; [B1, V6] # .٣ҡჀ3
+󨣿󠇀\u200D。\u0663ҠჀ3; 󨣿\u200D.\u0663ҡჀ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36kixu; ; xn--1r19e.xn--3-ozb36kixu; [B1, V6] # .٣ҡჀ3
+󨣿󠇀\u200D。\u0663ҡⴠ3; 󨣿\u200D.\u0663ҡⴠ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, V6] # .٣ҡⴠ3
+xn--1r19e.xn--3-ozb36ko13f; 󨣿.\u0663ҡⴠ3; [B1, V6]; xn--1r19e.xn--3-ozb36ko13f; ; ; # .٣ҡⴠ3
+xn--1ug89936l.xn--3-ozb36ko13f; 󨣿\u200D.\u0663ҡⴠ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; ; # .٣ҡⴠ3
+xn--1r19e.xn--3-ozb36kixu; 󨣿.\u0663ҡჀ3; [B1, V6]; xn--1r19e.xn--3-ozb36kixu; ; ; # .٣ҡჀ3
+xn--1ug89936l.xn--3-ozb36kixu; 󨣿\u200D.\u0663ҡჀ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36kixu; ; ; # .٣ҡჀ3
+󨣿󠇀\u200D。\u0663Ò¡â´ ðŸ‘; 󨣿\u200D.\u0663Ò¡â´ 3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, V6] # .Ù£Ò¡â´ 3
+󨣿󠇀\u200D。\u0663Ҡⴠ3; 󨣿\u200D.\u0663ҡⴠ3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, V6] # .٣ҡⴠ3
+󨣿󠇀\u200D。\u0663Ò â´ ðŸ‘; 󨣿\u200D.\u0663Ò¡â´ 3; [B1, B6, C2, V6]; xn--1ug89936l.xn--3-ozb36ko13f; ; xn--1r19e.xn--3-ozb36ko13f; [B1, V6] # .Ù£Ò¡â´ 3
+ᡷ。ð¹¢\u08E0; á¡·.ð¹¢\u08E0; [B1]; xn--k9e.xn--j0b5005k; ; ; # á¡·.ð¹¢à£ 
+xn--k9e.xn--j0b5005k; á¡·.ð¹¢\u08E0; [B1]; xn--k9e.xn--j0b5005k; ; ; # á¡·.ð¹¢à£ 
+򕮇\u1BF3。\u0666񗜼\u17D2ß; 򕮇\u1BF3.\u0666񗜼\u17D2ß; [B1, V6]; xn--1zf58212h.xn--zca34zk4qx711k; ; xn--1zf58212h.xn--ss-pyd459o3258m; # ᯳.٦្ß
+򕮇\u1BF3。\u0666񗜼\u17D2ß; 򕮇\u1BF3.\u0666񗜼\u17D2ß; [B1, V6]; xn--1zf58212h.xn--zca34zk4qx711k; ; xn--1zf58212h.xn--ss-pyd459o3258m; # ᯳.٦្ß
+򕮇\u1BF3。\u0666񗜼\u17D2SS; 򕮇\u1BF3.\u0666񗜼\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
+򕮇\u1BF3。\u0666񗜼\u17D2ss; 򕮇\u1BF3.\u0666񗜼\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
+򕮇\u1BF3。\u0666񗜼\u17D2Ss; 򕮇\u1BF3.\u0666񗜼\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
+xn--1zf58212h.xn--ss-pyd459o3258m; 򕮇\u1BF3.\u0666񗜼\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
+xn--1zf58212h.xn--zca34zk4qx711k; 򕮇\u1BF3.\u0666񗜼\u17D2ß; [B1, V6]; xn--1zf58212h.xn--zca34zk4qx711k; ; ; # ᯳.٦្ß
+򕮇\u1BF3。\u0666񗜼\u17D2SS; 򕮇\u1BF3.\u0666񗜼\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
+򕮇\u1BF3。\u0666񗜼\u17D2ss; 򕮇\u1BF3.\u0666񗜼\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
+򕮇\u1BF3。\u0666񗜼\u17D2Ss; 򕮇\u1BF3.\u0666񗜼\u17D2ss; [B1, V6]; xn--1zf58212h.xn--ss-pyd459o3258m; ; ; # ᯳.٦្ss
+\u0664򤽎𑲛.󠔢︒≠; ; [B1, V6]; xn--dib0653l2i02d.xn--1ch7467f14u4g; ; ; # ٤𑲛.︒≠
+\u0664򤽎𑲛.󠔢︒=\u0338; \u0664򤽎𑲛.󠔢︒≠; [B1, V6]; xn--dib0653l2i02d.xn--1ch7467f14u4g; ; ; # ٤𑲛.︒≠
+\u0664򤽎𑲛.󠔢。≠; \u0664򤽎𑲛.󠔢.≠; [B1, V6]; xn--dib0653l2i02d.xn--k736e.xn--1ch; ; ; # ٤𑲛..≠
+\u0664򤽎𑲛.󠔢。=\u0338; \u0664򤽎𑲛.󠔢.≠; [B1, V6]; xn--dib0653l2i02d.xn--k736e.xn--1ch; ; ; # ٤𑲛..≠
+xn--dib0653l2i02d.xn--k736e.xn--1ch; \u0664򤽎𑲛.󠔢.≠; [B1, V6]; xn--dib0653l2i02d.xn--k736e.xn--1ch; ; ; # ٤𑲛..≠
+xn--dib0653l2i02d.xn--1ch7467f14u4g; \u0664򤽎𑲛.󠔢︒≠; [B1, V6]; xn--dib0653l2i02d.xn--1ch7467f14u4g; ; ; # ٤𑲛.︒≠
+➆ñ·§•á»—⒈.ò‘¬’ñ¡˜®\u085BðŸ«; ➆ñ·§•á»—â’ˆ.ò‘¬’ñ¡˜®\u085B9; [V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.à¡›9
+➆ñ·§•o\u0302\u0303⒈.ò‘¬’ñ¡˜®\u085BðŸ«; ➆ñ·§•á»—â’ˆ.ò‘¬’ñ¡˜®\u085B9; [V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.à¡›9
+➆񷧕ỗ1..򑬒񡘮\u085B9; ; [V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [V6, A4_2]; ; # ➆ỗ1..࡛9
+➆񷧕o\u0302\u03031..򑬒񡘮\u085B9; ➆񷧕ỗ1..򑬒񡘮\u085B9; [V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [V6, A4_2]; ; # ➆ỗ1..࡛9
+➆񷧕O\u0302\u03031..򑬒񡘮\u085B9; ➆񷧕ỗ1..򑬒񡘮\u085B9; [V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [V6, A4_2]; ; # ➆ỗ1..࡛9
+➆񷧕Ỗ1..򑬒񡘮\u085B9; ➆񷧕ỗ1..򑬒񡘮\u085B9; [V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [V6, A4_2]; ; # ➆ỗ1..࡛9
+xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; ➆񷧕ỗ1..򑬒񡘮\u085B9; [V6, X4_2]; xn--1-3xm292b6044r..xn--9-6jd87310jtcqs; [V6, A4_2]; ; # ➆ỗ1..࡛9
+➆ñ·§•O\u0302\u0303⒈.ò‘¬’ñ¡˜®\u085BðŸ«; ➆ñ·§•á»—â’ˆ.ò‘¬’ñ¡˜®\u085B9; [V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.à¡›9
+➆ñ·§•á»–⒈.ò‘¬’ñ¡˜®\u085BðŸ«; ➆ñ·§•á»—â’ˆ.ò‘¬’ñ¡˜®\u085B9; [V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.à¡›9
+xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ➆񷧕ỗ⒈.򑬒񡘮\u085B9; [V6]; xn--6lg26tvvc6v99z.xn--9-6jd87310jtcqs; ; ; # ➆ỗ⒈.࡛9
+\u200D。𞤘; \u200D.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺
+\u200D。𞤘; \u200D.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺
+\u200D。𞤺; \u200D.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺
.xn--ye6h; .𞤺; [X4_2]; .xn--ye6h; [A4_2]; ; # .𞤺
-xn--1ug.xn--ye6h; â€.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; ; # .𞤺
-â€ï½¡ðž¤º; â€.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺
+xn--1ug.xn--ye6h; \u200D.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; ; # .𞤺
+\u200D。𞤺; \u200D.𞤺; [B1, C2]; xn--1ug.xn--ye6h; ; .xn--ye6h; [A4_2] # .𞤺
xn--ye6h; 𞤺; ; xn--ye6h; ; ; # 𞤺
𞤺; ; ; xn--ye6h; ; ; # 𞤺
𞤘; 𞤺; ; xn--ye6h; ; ; # 𞤺
-ࠩܤ.ᢣ; ; [B1, V5]; xn--unb53c.xn--tbf; ; ; # ࠩܤ.ᢣ
-xn--unb53c.xn--tbf; ࠩܤ.ᢣ; [B1, V5]; xn--unb53c.xn--tbf; ; ; # ࠩܤ.ᢣ
-ܼ‌-。ð“¾ÃŸ; ܼ‌-.ð“¾ÃŸ; [C1, P1, V3, V5, V6]; xn----s2c071q.xn--zca7848m; ; xn----s2c.xn--ss-066q; [P1, V3, V5, V6] # ܼ-.ß
-ܼ‌-。ð“¾SS; ܼ‌-.ð“¾ss; [C1, P1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; xn----s2c.xn--ss-066q; [P1, V3, V5, V6] # ܼ-.ss
-ܼ‌-。ð“¾ss; ܼ‌-.ð“¾ss; [C1, P1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; xn----s2c.xn--ss-066q; [P1, V3, V5, V6] # ܼ-.ss
-ܼ‌-。ð“¾Ss; ܼ‌-.ð“¾ss; [C1, P1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; xn----s2c.xn--ss-066q; [P1, V3, V5, V6] # ܼ-.ss
-xn----s2c.xn--ss-066q; ܼ-.ð“¾ss; [V3, V5, V6]; xn----s2c.xn--ss-066q; ; ; # ܼ-.ss
-xn----s2c071q.xn--ss-066q; ܼ‌-.ð“¾ss; [C1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; ; # ܼ-.ss
-xn----s2c071q.xn--zca7848m; ܼ‌-.ð“¾ÃŸ; [C1, V3, V5, V6]; xn----s2c071q.xn--zca7848m; ; ; # ܼ-.ß
-‌ς🃡⒗.ೆ仧ݖ; ; [B1, B5, B6, C1, P1, V5, V6]; xn--3xa795lz9czy52d.xn--9ob79ycx2e; ; xn--4xa229nbu92a.xn--9ob79ycx2e; [B5, B6, P1, V5, V6] # ς🃡⒗.ೆ仧ݖ
-‌ς🃡16..ೆ仧ݖ; ; [B1, B5, B6, C1, V5, X4_2]; xn--16-rbc1800avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2] # ς🃡16..ೆ仧ݖ
-‌Σ🃡16..ೆ仧ݖ; ‌σ🃡16..ೆ仧ݖ; [B1, B5, B6, C1, V5, X4_2]; xn--16-ubc7700avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2] # σ🃡16..ೆ仧ݖ
-‌σ🃡16..ೆ仧ݖ; ; [B1, B5, B6, C1, V5, X4_2]; xn--16-ubc7700avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2] # σ🃡16..ೆ仧ݖ
-xn--16-ubc66061c..xn--9ob79ycx2e; σ🃡16..ೆ仧ݖ; [B5, B6, V5, X4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2]; ; # σ🃡16..ೆ仧ݖ
-xn--16-ubc7700avy99b..xn--9ob79ycx2e; ‌σ🃡16..ೆ仧ݖ; [B1, B5, B6, C1, V5, X4_2]; xn--16-ubc7700avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; ; # σ🃡16..ೆ仧ݖ
-xn--16-rbc1800avy99b..xn--9ob79ycx2e; ‌ς🃡16..ೆ仧ݖ; [B1, B5, B6, C1, V5, X4_2]; xn--16-rbc1800avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; ; # ς🃡16..ೆ仧ݖ
-‌Σ🃡⒗.ೆ仧ݖ; ‌σ🃡⒗.ೆ仧ݖ; [B1, B5, B6, C1, P1, V5, V6]; xn--4xa595lz9czy52d.xn--9ob79ycx2e; ; xn--4xa229nbu92a.xn--9ob79ycx2e; [B5, B6, P1, V5, V6] # σ🃡⒗.ೆ仧ݖ
-‌σ🃡⒗.ೆ仧ݖ; ; [B1, B5, B6, C1, P1, V5, V6]; xn--4xa595lz9czy52d.xn--9ob79ycx2e; ; xn--4xa229nbu92a.xn--9ob79ycx2e; [B5, B6, P1, V5, V6] # σ🃡⒗.ೆ仧ݖ
-xn--4xa229nbu92a.xn--9ob79ycx2e; σ🃡⒗.ೆ仧ݖ; [B5, B6, V5, V6]; xn--4xa229nbu92a.xn--9ob79ycx2e; ; ; # σ🃡⒗.ೆ仧ݖ
-xn--4xa595lz9czy52d.xn--9ob79ycx2e; ‌σ🃡⒗.ೆ仧ݖ; [B1, B5, B6, C1, V5, V6]; xn--4xa595lz9czy52d.xn--9ob79ycx2e; ; ; # σ🃡⒗.ೆ仧ݖ
-xn--3xa795lz9czy52d.xn--9ob79ycx2e; ‌ς🃡⒗.ೆ仧ݖ; [B1, B5, B6, C1, V5, V6]; xn--3xa795lz9czy52d.xn--9ob79ycx2e; ; ; # ς🃡⒗.ೆ仧ݖ
--.𞸚; -.ظ; [B1, V3]; -.xn--3gb; ; ; # -.ظ
--.ظ; ; [B1, V3]; -.xn--3gb; ; ; # -.ظ
--.xn--3gb; -.ظ; [B1, V3]; -.xn--3gb; ; ; # -.ظ
-ò›“Úƒ.ཾش; ; [B1, B5, B6, P1, V5, V6]; xn--8ib92728i.xn--zgb968b; ; ; # Úƒ.ཾش
-xn--8ib92728i.xn--zgb968b; ò›“Úƒ.ཾش; [B1, B5, B6, V5, V6]; xn--8ib92728i.xn--zgb968b; ; ; # Úƒ.ཾش
-࿦ࡃñ½¶¬.ð®; ; [B5, P1, V6]; xn--1vb320b5m04p.xn--m29c; ; ; # ࡃ.ð®
-xn--1vb320b5m04p.xn--m29c; ࿦ࡃñ½¶¬.ð®; [B5, V6]; xn--1vb320b5m04p.xn--m29c; ; ; # ࡃ.ð®
-2񎨠ߋß。ᠽ; 2񎨠ߋß.ᠽ; [B1, P1, V6]; xn--2-qfa924cez02l.xn--w7e; ; xn--2ss-odg83511n.xn--w7e; # 2ߋß.ᠽ
-2񎨠ߋSS。ᠽ; 2񎨠ߋss.ᠽ; [B1, P1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ
-2񎨠ߋss。ᠽ; 2񎨠ߋss.ᠽ; [B1, P1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ
-xn--2ss-odg83511n.xn--w7e; 2񎨠ߋss.ᠽ; [B1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ
-xn--2-qfa924cez02l.xn--w7e; 2񎨠ߋß.ᠽ; [B1, V6]; xn--2-qfa924cez02l.xn--w7e; ; ; # 2ߋß.ᠽ
-2񎨠ߋSs。ᠽ; 2񎨠ߋss.ᠽ; [B1, P1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ
-㸳ߊ≮.ێß-â€; 㸳ߊ≮.ێß-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ێß-
-㸳ߊ≮.ێß-â€; 㸳ߊ≮.ێß-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ێß-
-㸳ߊ≮.ێß-â€; ; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ێß-
-㸳ߊ≮.ێß-â€; 㸳ߊ≮.ێß-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ێß-
-㸳ߊ≮.ÛŽSS-â€; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
-㸳ߊ≮.ÛŽSS-â€; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
-㸳ߊ≮.ÛŽss-â€; ; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
-㸳ߊ≮.ÛŽss-â€; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
-xn--lsb457kkut.xn--ss--qjf; 㸳ߊ≮.ێss-; [B2, B3, B5, B6, V3, V6]; xn--lsb457kkut.xn--ss--qjf; ; ; # 㸳ߊ≮.ێss-
-xn--lsb457kkut.xn--ss--qjf2343a; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; ; # 㸳ߊ≮.ÛŽss-
-xn--lsb457kkut.xn----pfa076bys4a; 㸳ߊ≮.ێß-â€; [B2, B3, B5, B6, C2, V6]; xn--lsb457kkut.xn----pfa076bys4a; ; ; # 㸳ߊ≮.ێß-
-㸳ߊ≮.ێSS-â€; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
-㸳ߊ≮.ێSS-â€; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
-㸳ߊ≮.ێss-â€; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
-㸳ߊ≮.ێss-â€; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
-㸳ߊ≮.ÛŽSs-â€; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
-㸳ߊ≮.ÛŽSs-â€; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
-㸳ߊ≮.ێSs-â€; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
-㸳ߊ≮.ێSs-â€; 㸳ߊ≮.ÛŽss-â€; [B2, B3, B5, B6, C2, P1, V6]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, P1, V3, V6] # 㸳ߊ≮.ÛŽss-
--ò·¬ážð‘œ§.á·«-︒; ; [P1, V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkmw278h; ; ; # -ážð‘œ§.á·«-︒
--ò·¬ážð‘œ§.á·«-。; -ò·¬ážð‘œ§.á·«-.; [P1, V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkm.; ; ; # -ážð‘œ§.á·«-.
-xn----b5h1837n2ok9f.xn----mkm.; -ò·¬ážð‘œ§.á·«-.; [V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkm.; ; ; # -ážð‘œ§.á·«-.
-xn----b5h1837n2ok9f.xn----mkmw278h; -ò·¬ážð‘œ§.á·«-︒; [V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkmw278h; ; ; # -ážð‘œ§.á·«-︒
-︒.򚠡ᩙ; ; [P1, V6]; xn--y86c.xn--cof61594i; ; ; # ︒.ᩙ
-。.򚠡ᩙ; ..򚠡ᩙ; [P1, V6, X4_2]; ..xn--cof61594i; [P1, V6, A4_2]; ; # ..ᩙ
-..xn--cof61594i; ..òš ¡á©™; [V6, X4_2]; ..xn--cof61594i; [V6, A4_2]; ; # ..á©™
-xn--y86c.xn--cof61594i; ︒.򚠡ᩙ; [V6]; xn--y86c.xn--cof61594i; ; ; # ︒.ᩙ
-̣ⷡ。‌⓾‌ڹ; ̣ⷡ.‌⓾‌ڹ; [B1, B3, B6, C1, V5]; xn--kta899s.xn--skb970ka771c; ; xn--kta899s.xn--skb116m; [B1, B3, B6, V5] # ̣ⷡ.⓾ڹ
-xn--kta899s.xn--skb116m; ̣ⷡ.⓾ڹ; [B1, B3, B6, V5]; xn--kta899s.xn--skb116m; ; ; # ̣ⷡ.⓾ڹ
-xn--kta899s.xn--skb970ka771c; ̣ⷡ.‌⓾‌ڹ; [B1, B3, B6, C1, V5]; xn--kta899s.xn--skb970ka771c; ; ; # ̣ⷡ.⓾ڹ
-𞠶ᠴÛ。á´ðž¤µó …¦; 𞠶ᠴÛ.á´ðž¤µ; [B1, B2, P1, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.á´ðž¤µ
-𞠶ᠴÛ。á´ðž¤µó …¦; 𞠶ᠴÛ.á´ðž¤µ; [B1, B2, P1, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.á´ðž¤µ
-𞠶ᠴÛ。á´ðž¤“ó …¦; 𞠶ᠴÛ.á´ðž¤µ; [B1, B2, P1, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.á´ðž¤µ
-xn--tlb199fwl35a.xn--yld4613v; 𞠶ᠴÛ.á´ðž¤µ; [B1, B2, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.á´ðž¤µ
-𞠶ᠴÛ。á´ðž¤“ó …¦; 𞠶ᠴÛ.á´ðž¤µ; [B1, B2, P1, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.á´ðž¤µ
-ð‘°º.-ò‘Ÿ; ; [P1, V3, V5, V6]; xn--jk3d.xn----iz68g; ; ; # ð‘°º.-
+\u0829\u0724.ᢣ; ; [B1, V5]; xn--unb53c.xn--tbf; ; ; # ࠩܤ.ᢣ
+xn--unb53c.xn--tbf; \u0829\u0724.ᢣ; [B1, V5]; xn--unb53c.xn--tbf; ; ; # ࠩܤ.ᢣ
+\u073C\u200C-。ð“¾ÃŸ; \u073C\u200C-.ð“¾ÃŸ; [C1, V3, V5, V6]; xn----s2c071q.xn--zca7848m; ; xn----s2c.xn--ss-066q; [V3, V5, V6] # ܼ-.ß
+\u073C\u200C-。ð“¾SS; \u073C\u200C-.ð“¾ss; [C1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; xn----s2c.xn--ss-066q; [V3, V5, V6] # ܼ-.ss
+\u073C\u200C-。ð“¾ss; \u073C\u200C-.ð“¾ss; [C1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; xn----s2c.xn--ss-066q; [V3, V5, V6] # ܼ-.ss
+\u073C\u200C-。ð“¾Ss; \u073C\u200C-.ð“¾ss; [C1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; xn----s2c.xn--ss-066q; [V3, V5, V6] # ܼ-.ss
+xn----s2c.xn--ss-066q; \u073C-.ð“¾ss; [V3, V5, V6]; xn----s2c.xn--ss-066q; ; ; # ܼ-.ss
+xn----s2c071q.xn--ss-066q; \u073C\u200C-.ð“¾ss; [C1, V3, V5, V6]; xn----s2c071q.xn--ss-066q; ; ; # ܼ-.ss
+xn----s2c071q.xn--zca7848m; \u073C\u200C-.ð“¾ÃŸ; [C1, V3, V5, V6]; xn----s2c071q.xn--zca7848m; ; ; # ܼ-.ß
+\u200Cς🃡⒗.\u0CC6仧\u0756; ; [B1, B5, B6, C1, V5, V6]; xn--3xa795lz9czy52d.xn--9ob79ycx2e; ; xn--4xa229nbu92a.xn--9ob79ycx2e; [B5, B6, V5, V6] # ς🃡⒗.ೆ仧ݖ
+\u200Cς🃡16..\u0CC6仧\u0756; ; [B1, B5, B6, C1, V5, X4_2]; xn--16-rbc1800avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2] # ς🃡16..ೆ仧ݖ
+\u200CΣ🃡16..\u0CC6仧\u0756; \u200Cσ🃡16..\u0CC6仧\u0756; [B1, B5, B6, C1, V5, X4_2]; xn--16-ubc7700avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2] # σ🃡16..ೆ仧ݖ
+\u200Cσ🃡16..\u0CC6仧\u0756; ; [B1, B5, B6, C1, V5, X4_2]; xn--16-ubc7700avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2] # σ🃡16..ೆ仧ݖ
+xn--16-ubc66061c..xn--9ob79ycx2e; σ🃡16..\u0CC6仧\u0756; [B5, B6, V5, X4_2]; xn--16-ubc66061c..xn--9ob79ycx2e; [B5, B6, V5, A4_2]; ; # σ🃡16..ೆ仧ݖ
+xn--16-ubc7700avy99b..xn--9ob79ycx2e; \u200Cσ🃡16..\u0CC6仧\u0756; [B1, B5, B6, C1, V5, X4_2]; xn--16-ubc7700avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; ; # σ🃡16..ೆ仧ݖ
+xn--16-rbc1800avy99b..xn--9ob79ycx2e; \u200Cς🃡16..\u0CC6仧\u0756; [B1, B5, B6, C1, V5, X4_2]; xn--16-rbc1800avy99b..xn--9ob79ycx2e; [B1, B5, B6, C1, V5, A4_2]; ; # ς🃡16..ೆ仧ݖ
+\u200CΣ🃡⒗.\u0CC6仧\u0756; \u200Cσ🃡⒗.\u0CC6仧\u0756; [B1, B5, B6, C1, V5, V6]; xn--4xa595lz9czy52d.xn--9ob79ycx2e; ; xn--4xa229nbu92a.xn--9ob79ycx2e; [B5, B6, V5, V6] # σ🃡⒗.ೆ仧ݖ
+\u200Cσ🃡⒗.\u0CC6仧\u0756; ; [B1, B5, B6, C1, V5, V6]; xn--4xa595lz9czy52d.xn--9ob79ycx2e; ; xn--4xa229nbu92a.xn--9ob79ycx2e; [B5, B6, V5, V6] # σ🃡⒗.ೆ仧ݖ
+xn--4xa229nbu92a.xn--9ob79ycx2e; σ🃡⒗.\u0CC6仧\u0756; [B5, B6, V5, V6]; xn--4xa229nbu92a.xn--9ob79ycx2e; ; ; # σ🃡⒗.ೆ仧ݖ
+xn--4xa595lz9czy52d.xn--9ob79ycx2e; \u200Cσ🃡⒗.\u0CC6仧\u0756; [B1, B5, B6, C1, V5, V6]; xn--4xa595lz9czy52d.xn--9ob79ycx2e; ; ; # σ🃡⒗.ೆ仧ݖ
+xn--3xa795lz9czy52d.xn--9ob79ycx2e; \u200Cς🃡⒗.\u0CC6仧\u0756; [B1, B5, B6, C1, V5, V6]; xn--3xa795lz9czy52d.xn--9ob79ycx2e; ; ; # ς🃡⒗.ೆ仧ݖ
+-.𞸚; -.\u0638; [B1, V3]; -.xn--3gb; ; ; # -.ظ
+-.\u0638; ; [B1, V3]; -.xn--3gb; ; ; # -.ظ
+-.xn--3gb; -.\u0638; [B1, V3]; -.xn--3gb; ; ; # -.ظ
+ò›“\u0683.\u0F7E\u0634; ; [B1, B5, B6, V5, V6]; xn--8ib92728i.xn--zgb968b; ; ; # Úƒ.ཾش
+xn--8ib92728i.xn--zgb968b; ò›“\u0683.\u0F7E\u0634; [B1, B5, B6, V5, V6]; xn--8ib92728i.xn--zgb968b; ; ; # Úƒ.ཾش
+\u0FE6\u0843ñ½¶¬.ð®; ; [B5, V6]; xn--1vb320b5m04p.xn--m29c; ; ; # ࡃ.ð®
+xn--1vb320b5m04p.xn--m29c; \u0FE6\u0843ñ½¶¬.ð®; [B5, V6]; xn--1vb320b5m04p.xn--m29c; ; ; # ࡃ.ð®
+2񎨠\u07CBß。ᠽ; 2񎨠\u07CBß.ᠽ; [B1, V6]; xn--2-qfa924cez02l.xn--w7e; ; xn--2ss-odg83511n.xn--w7e; # 2ߋß.ᠽ
+2񎨠\u07CBSS。ᠽ; 2񎨠\u07CBss.ᠽ; [B1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ
+2񎨠\u07CBss。ᠽ; 2񎨠\u07CBss.ᠽ; [B1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ
+xn--2ss-odg83511n.xn--w7e; 2񎨠\u07CBss.ᠽ; [B1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ
+xn--2-qfa924cez02l.xn--w7e; 2񎨠\u07CBß.ᠽ; [B1, V6]; xn--2-qfa924cez02l.xn--w7e; ; ; # 2ߋß.ᠽ
+2񎨠\u07CBSs。ᠽ; 2񎨠\u07CBss.ᠽ; [B1, V6]; xn--2ss-odg83511n.xn--w7e; ; ; # 2ߋss.ᠽ
+㸳\u07CA≮.\u06CEß-\u200D; 㸳\u07CA≮.\u06CEß-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێß-
+㸳\u07CA<\u0338.\u06CEß-\u200D; 㸳\u07CA≮.\u06CEß-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێß-
+㸳\u07CA≮.\u06CEß-\u200D; ; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێß-
+㸳\u07CA<\u0338.\u06CEß-\u200D; 㸳\u07CA≮.\u06CEß-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn----pfa076bys4a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێß-
+㸳\u07CA<\u0338.\u06CESS-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+㸳\u07CA≮.\u06CESS-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+㸳\u07CA≮.\u06CEss-\u200D; ; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+㸳\u07CA<\u0338.\u06CEss-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+xn--lsb457kkut.xn--ss--qjf; 㸳\u07CA≮.\u06CEss-; [B2, B3, B5, B6, V3]; xn--lsb457kkut.xn--ss--qjf; ; ; # 㸳ߊ≮.ێss-
+xn--lsb457kkut.xn--ss--qjf2343a; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; ; # 㸳ߊ≮.ێss-
+xn--lsb457kkut.xn----pfa076bys4a; 㸳\u07CA≮.\u06CEß-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn----pfa076bys4a; ; ; # 㸳ߊ≮.ێß-
+㸳\u07CA<\u0338.\u06CESS-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+㸳\u07CA≮.\u06CESS-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+㸳\u07CA≮.\u06CEss-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+㸳\u07CA<\u0338.\u06CEss-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+㸳\u07CA<\u0338.\u06CESs-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+㸳\u07CA≮.\u06CESs-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+㸳\u07CA<\u0338.\u06CESs-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+㸳\u07CA≮.\u06CESs-\u200D; 㸳\u07CA≮.\u06CEss-\u200D; [B2, B3, B5, B6, C2]; xn--lsb457kkut.xn--ss--qjf2343a; ; xn--lsb457kkut.xn--ss--qjf; [B2, B3, B5, B6, V3] # 㸳ߊ≮.ێss-
+-ò·¬\u135E𑜧.\u1DEB-︒; ; [V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkmw278h; ; ; # -ážð‘œ§.á·«-︒
+-ò·¬\u135E𑜧.\u1DEB-。; -ò·¬\u135E𑜧.\u1DEB-.; [V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkm.; ; ; # -ážð‘œ§.á·«-.
+xn----b5h1837n2ok9f.xn----mkm.; -ò·¬\u135E𑜧.\u1DEB-.; [V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkm.; ; ; # -ážð‘œ§.á·«-.
+xn----b5h1837n2ok9f.xn----mkmw278h; -ò·¬\u135E𑜧.\u1DEB-︒; [V3, V5, V6]; xn----b5h1837n2ok9f.xn----mkmw278h; ; ; # -ážð‘œ§.á·«-︒
+︒.򚠡\u1A59; ; [V6]; xn--y86c.xn--cof61594i; ; ; # ︒.ᩙ
+。.򚠡\u1A59; ..򚠡\u1A59; [V6, X4_2]; ..xn--cof61594i; [V6, A4_2]; ; # ..ᩙ
+..xn--cof61594i; ..òš ¡\u1A59; [V6, X4_2]; ..xn--cof61594i; [V6, A4_2]; ; # ..á©™
+xn--y86c.xn--cof61594i; ︒.򚠡\u1A59; [V6]; xn--y86c.xn--cof61594i; ; ; # ︒.ᩙ
+\u0323\u2DE1。\u200C⓾\u200C\u06B9; \u0323\u2DE1.\u200C⓾\u200C\u06B9; [B1, C1, V5]; xn--kta899s.xn--skb970ka771c; ; xn--kta899s.xn--skb116m; [B1, V5] # ̣ⷡ.⓾ڹ
+xn--kta899s.xn--skb116m; \u0323\u2DE1.⓾\u06B9; [B1, V5]; xn--kta899s.xn--skb116m; ; ; # ̣ⷡ.⓾ڹ
+xn--kta899s.xn--skb970ka771c; \u0323\u2DE1.\u200C⓾\u200C\u06B9; [B1, C1, V5]; xn--kta899s.xn--skb970ka771c; ; ; # ̣ⷡ.⓾ڹ
+𞠶ᠴ\u06DD。\u1074𞤵󠅦; 𞠶ᠴ\u06DD.\u1074𞤵; [B1, B2, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.á´ðž¤µ
+𞠶ᠴ\u06DD。\u1074𞤵󠅦; 𞠶ᠴ\u06DD.\u1074𞤵; [B1, B2, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.á´ðž¤µ
+𞠶ᠴ\u06DD。\u1074𞤓󠅦; 𞠶ᠴ\u06DD.\u1074𞤵; [B1, B2, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.á´ðž¤µ
+xn--tlb199fwl35a.xn--yld4613v; 𞠶ᠴ\u06DD.\u1074𞤵; [B1, B2, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.á´ðž¤µ
+𞠶ᠴ\u06DD。\u1074𞤓󠅦; 𞠶ᠴ\u06DD.\u1074𞤵; [B1, B2, V5, V6]; xn--tlb199fwl35a.xn--yld4613v; ; ; # 𞠶ᠴ.á´ðž¤µ
+ð‘°º.-ò‘Ÿ; ; [V3, V5, V6]; xn--jk3d.xn----iz68g; ; ; # ð‘°º.-
xn--jk3d.xn----iz68g; ð‘°º.-ò‘Ÿ; [V3, V5, V6]; xn--jk3d.xn----iz68g; ; ; # ð‘°º.-
-󠻩.èµ; ó »©.èµ; [P1, V6]; xn--2856e.xn--6o3a; ; ; # .èµ
-ó »©.èµ; ; [P1, V6]; xn--2856e.xn--6o3a; ; ; # .èµ
+󠻩.èµ; ó »©.èµ; [V6]; xn--2856e.xn--6o3a; ; ; # .èµ
+ó »©.èµ; ; [V6]; xn--2856e.xn--6o3a; ; ; # .èµ
xn--2856e.xn--6o3a; ó »©.èµ; [V6]; xn--2856e.xn--6o3a; ; ; # .èµ
-ڰᠡ。Ⴁ; ڰᠡ.Ⴁ; [B2, B3, P1, V6]; xn--jkb440g.xn--8md; ; ; # ڰᠡ.Ⴁ
-ڰᠡ。Ⴁ; ڰᠡ.Ⴁ; [B2, B3, P1, V6]; xn--jkb440g.xn--8md; ; ; # ڰᠡ.Ⴁ
-ڰᠡ。â´; Ú°á ¡.â´; [B2, B3]; xn--jkb440g.xn--skj; ; ; # Ú°á ¡.â´
-xn--jkb440g.xn--skj; Ú°á ¡.â´; [B2, B3]; xn--jkb440g.xn--skj; ; ; # Ú°á ¡.â´
-xn--jkb440g.xn--8md; Ú°á ¡.á‚¡; [B2, B3, V6]; xn--jkb440g.xn--8md; ; ; # Ú°á ¡.á‚¡
-ڰᠡ。â´; Ú°á ¡.â´; [B2, B3]; xn--jkb440g.xn--skj; ; ; # Ú°á ¡.â´
-⃞Ⴊڻς。-; ⃞Ⴊڻς.-; [B1, P1, V3, V5, V6]; xn--3xa53m7zmb0q.-; ; xn--4xa33m7zmb0q.-; # ⃞Ⴊڻς.-
-⃞Ⴊڻς。-; ⃞Ⴊڻς.-; [B1, P1, V3, V5, V6]; xn--3xa53m7zmb0q.-; ; xn--4xa33m7zmb0q.-; # ⃞Ⴊڻς.-
-⃞ⴊڻς。-; ⃞ⴊڻς.-; [B1, V3, V5]; xn--3xa53mr38aeel.-; ; xn--4xa33mr38aeel.-; # ⃞ⴊڻς.-
-⃞ႪڻΣ。-; ⃞Ⴊڻσ.-; [B1, P1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.-
-⃞ⴊڻσ。-; ⃞ⴊڻσ.-; [B1, V3, V5]; xn--4xa33mr38aeel.-; ; ; # ⃞ⴊڻσ.-
-⃞Ⴊڻσ。-; ⃞Ⴊڻσ.-; [B1, P1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.-
-xn--4xa33m7zmb0q.-; ⃞Ⴊڻσ.-; [B1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.-
-xn--4xa33mr38aeel.-; ⃞ⴊڻσ.-; [B1, V3, V5]; xn--4xa33mr38aeel.-; ; ; # ⃞ⴊڻσ.-
-xn--3xa53mr38aeel.-; ⃞ⴊڻς.-; [B1, V3, V5]; xn--3xa53mr38aeel.-; ; ; # ⃞ⴊڻς.-
-xn--3xa53m7zmb0q.-; ⃞Ⴊڻς.-; [B1, V3, V5, V6]; xn--3xa53m7zmb0q.-; ; ; # ⃞Ⴊڻς.-
-⃞ⴊڻς。-; ⃞ⴊڻς.-; [B1, V3, V5]; xn--3xa53mr38aeel.-; ; xn--4xa33mr38aeel.-; # ⃞ⴊڻς.-
-⃞ႪڻΣ。-; ⃞Ⴊڻσ.-; [B1, P1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.-
-⃞ⴊڻσ。-; ⃞ⴊڻσ.-; [B1, V3, V5]; xn--4xa33mr38aeel.-; ; ; # ⃞ⴊڻσ.-
-⃞Ⴊڻσ。-; ⃞Ⴊڻσ.-; [B1, P1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.-
-Ⴍ.ñ‡¦â€Œ; á‚­.ñ‡¦â€Œ; [C1, P1, V6]; xn--lnd.xn--0ug56448b; ; xn--lnd.xn--p01x; [P1, V6] # á‚­.
-á‚­.ñ‡¦â€Œ; ; [C1, P1, V6]; xn--lnd.xn--0ug56448b; ; xn--lnd.xn--p01x; [P1, V6] # á‚­.
-â´.ñ‡¦â€Œ; ; [C1, P1, V6]; xn--4kj.xn--0ug56448b; ; xn--4kj.xn--p01x; [P1, V6] # â´.
+\u06B0ᠡ。Ⴁ; \u06B0ᠡ.Ⴁ; [B2, B3, V6]; xn--jkb440g.xn--8md; ; ; # ڰᠡ.Ⴁ
+\u06B0ᠡ。Ⴁ; \u06B0ᠡ.Ⴁ; [B2, B3, V6]; xn--jkb440g.xn--8md; ; ; # ڰᠡ.Ⴁ
+\u06B0ᠡ。â´; \u06B0á ¡.â´; [B2, B3]; xn--jkb440g.xn--skj; ; ; # Ú°á ¡.â´
+xn--jkb440g.xn--skj; \u06B0á ¡.â´; [B2, B3]; xn--jkb440g.xn--skj; ; ; # Ú°á ¡.â´
+xn--jkb440g.xn--8md; \u06B0á ¡.á‚¡; [B2, B3, V6]; xn--jkb440g.xn--8md; ; ; # Ú°á ¡.á‚¡
+\u06B0ᠡ。â´; \u06B0á ¡.â´; [B2, B3]; xn--jkb440g.xn--skj; ; ; # Ú°á ¡.â´
+\u20DEႪ\u06BBς。-; \u20DEႪ\u06BBς.-; [B1, V3, V5, V6]; xn--3xa53m7zmb0q.-; ; xn--4xa33m7zmb0q.-; # ⃞Ⴊڻς.-
+\u20DEႪ\u06BBς。-; \u20DEႪ\u06BBς.-; [B1, V3, V5, V6]; xn--3xa53m7zmb0q.-; ; xn--4xa33m7zmb0q.-; # ⃞Ⴊڻς.-
+\u20DEⴊ\u06BBς。-; \u20DEⴊ\u06BBς.-; [B1, V3, V5]; xn--3xa53mr38aeel.-; ; xn--4xa33mr38aeel.-; # ⃞ⴊڻς.-
+\u20DEႪ\u06BBΣ。-; \u20DEႪ\u06BBσ.-; [B1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.-
+\u20DEⴊ\u06BBσ。-; \u20DEⴊ\u06BBσ.-; [B1, V3, V5]; xn--4xa33mr38aeel.-; ; ; # ⃞ⴊڻσ.-
+\u20DEႪ\u06BBσ。-; \u20DEႪ\u06BBσ.-; [B1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.-
+xn--4xa33m7zmb0q.-; \u20DEႪ\u06BBσ.-; [B1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.-
+xn--4xa33mr38aeel.-; \u20DEⴊ\u06BBσ.-; [B1, V3, V5]; xn--4xa33mr38aeel.-; ; ; # ⃞ⴊڻσ.-
+xn--3xa53mr38aeel.-; \u20DEⴊ\u06BBς.-; [B1, V3, V5]; xn--3xa53mr38aeel.-; ; ; # ⃞ⴊڻς.-
+xn--3xa53m7zmb0q.-; \u20DEႪ\u06BBς.-; [B1, V3, V5, V6]; xn--3xa53m7zmb0q.-; ; ; # ⃞Ⴊڻς.-
+\u20DEⴊ\u06BBς。-; \u20DEⴊ\u06BBς.-; [B1, V3, V5]; xn--3xa53mr38aeel.-; ; xn--4xa33mr38aeel.-; # ⃞ⴊڻς.-
+\u20DEႪ\u06BBΣ。-; \u20DEႪ\u06BBσ.-; [B1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.-
+\u20DEⴊ\u06BBσ。-; \u20DEⴊ\u06BBσ.-; [B1, V3, V5]; xn--4xa33mr38aeel.-; ; ; # ⃞ⴊڻσ.-
+\u20DEႪ\u06BBσ。-; \u20DEႪ\u06BBσ.-; [B1, V3, V5, V6]; xn--4xa33m7zmb0q.-; ; ; # ⃞Ⴊڻσ.-
+Ⴍ.ñ‡¦\u200C; á‚­.ñ‡¦\u200C; [C1, V6]; xn--lnd.xn--0ug56448b; ; xn--lnd.xn--p01x; [V6] # á‚­.
+á‚­.ñ‡¦\u200C; ; [C1, V6]; xn--lnd.xn--0ug56448b; ; xn--lnd.xn--p01x; [V6] # á‚­.
+â´.ñ‡¦\u200C; ; [C1, V6]; xn--4kj.xn--0ug56448b; ; xn--4kj.xn--p01x; [V6] # â´.
xn--4kj.xn--p01x; â´.ñ‡¦; [V6]; xn--4kj.xn--p01x; ; ; # â´.
-xn--4kj.xn--0ug56448b; â´.ñ‡¦â€Œ; [C1, V6]; xn--4kj.xn--0ug56448b; ; ; # â´.
+xn--4kj.xn--0ug56448b; â´.ñ‡¦\u200C; [C1, V6]; xn--4kj.xn--0ug56448b; ; ; # â´.
xn--lnd.xn--p01x; á‚­.ñ‡¦; [V6]; xn--lnd.xn--p01x; ; ; # á‚­.
-xn--lnd.xn--0ug56448b; á‚­.ñ‡¦â€Œ; [C1, V6]; xn--lnd.xn--0ug56448b; ; ; # á‚­.
-â´ï¼Žñ‡¦â€Œ; â´.ñ‡¦â€Œ; [C1, P1, V6]; xn--4kj.xn--0ug56448b; ; xn--4kj.xn--p01x; [P1, V6] # â´.
-ò‰Ÿ‚ó µ£.ð««á© ó´º–á­„; ; [B2, B3, B6, P1, V6]; xn--9u37blu98h.xn--jof13bt568cork1j; ; ; # .ð««á© á­„
-xn--9u37blu98h.xn--jof13bt568cork1j; ò‰Ÿ‚ó µ£.ð««á© ó´º–á­„; [B2, B3, B6, V6]; xn--9u37blu98h.xn--jof13bt568cork1j; ; ; # .ð««á© á­„
-≯âŠá ¯ï½¡ð¹±âº¨; ≯âŠá ¯.ð¹±âº¨; [B1, P1, V6]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯âŠá ¯.ð¹±âº¨
-≯âŠá ¯ï½¡ð¹±âº¨; ≯âŠá ¯.ð¹±âº¨; [B1, P1, V6]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯âŠá ¯.ð¹±âº¨
-≯âŠá ¯ã€‚ð¹±âº¨; ≯âŠá ¯.ð¹±âº¨; [B1, P1, V6]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯âŠá ¯.ð¹±âº¨
-≯âŠá ¯ã€‚ð¹±âº¨; ≯âŠá ¯.ð¹±âº¨; [B1, P1, V6]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯âŠá ¯.ð¹±âº¨
-xn--i7e163ct2d.xn--vwj7372e; ≯âŠá ¯.ð¹±âº¨; [B1, V6]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯âŠá ¯.ð¹±âº¨
-ô•œð¹§ðž­ð¹©ã€‚Ⴈð«®á‚¯; ô•œð¹§ðž­ð¹©.Ⴈð«®á‚¯; [B5, B6, P1, V6]; xn--fo0de1270ope54j.xn--gndo2033q; ; ; # ð¹§ð¹©.Ⴈð«®á‚¯
-ô•œð¹§ðž­ð¹©ã€‚â´ˆð«®â´; ô•œð¹§ðž­ð¹©.â´ˆð«®â´; [B5, B6, P1, V6]; xn--fo0de1270ope54j.xn--zkjo0151o; ; ; # ð¹§ð¹©.â´ˆð«®â´
+xn--lnd.xn--0ug56448b; á‚­.ñ‡¦\u200C; [C1, V6]; xn--lnd.xn--0ug56448b; ; ; # á‚­.
+â´ï¼Žñ‡¦\u200C; â´.ñ‡¦\u200C; [C1, V6]; xn--4kj.xn--0ug56448b; ; xn--4kj.xn--p01x; [V6] # â´.
+ò‰Ÿ‚ó µ£.ð««\u1A60ó´º–\u1B44; ; [B2, B3, B6, V6]; xn--9u37blu98h.xn--jof13bt568cork1j; ; ; # .ð««á© á­„
+xn--9u37blu98h.xn--jof13bt568cork1j; ò‰Ÿ‚ó µ£.ð««\u1A60ó´º–\u1B44; [B2, B3, B6, V6]; xn--9u37blu98h.xn--jof13bt568cork1j; ; ; # .ð««á© á­„
+≯âŠá ¯ï½¡ð¹±âº¨; ≯âŠá ¯.ð¹±âº¨; [B1]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯âŠá ¯.ð¹±âº¨
+>\u0338âŠá ¯ï½¡ð¹±âº¨; ≯âŠá ¯.ð¹±âº¨; [B1]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯âŠá ¯.ð¹±âº¨
+≯âŠá ¯ã€‚ð¹±âº¨; ≯âŠá ¯.ð¹±âº¨; [B1]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯âŠá ¯.ð¹±âº¨
+>\u0338âŠá ¯ã€‚ð¹±âº¨; ≯âŠá ¯.ð¹±âº¨; [B1]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯âŠá ¯.ð¹±âº¨
+xn--i7e163ct2d.xn--vwj7372e; ≯âŠá ¯.ð¹±âº¨; [B1]; xn--i7e163ct2d.xn--vwj7372e; ; ; # ≯âŠá ¯.ð¹±âº¨
+ô•œð¹§ðž­ð¹©ã€‚Ⴈð«®á‚¯; ô•œð¹§ðž­ð¹©.Ⴈð«®á‚¯; [B5, B6, V6]; xn--fo0de1270ope54j.xn--gndo2033q; ; ; # ð¹§ð¹©.Ⴈð«®á‚¯
+ô•œð¹§ðž­ð¹©ã€‚â´ˆð«®â´; ô•œð¹§ðž­ð¹©.â´ˆð«®â´; [B5, B6, V6]; xn--fo0de1270ope54j.xn--zkjo0151o; ; ; # ð¹§ð¹©.â´ˆð«®â´
xn--fo0de1270ope54j.xn--zkjo0151o; ô•œð¹§ðž­ð¹©.â´ˆð«®â´; [B5, B6, V6]; xn--fo0de1270ope54j.xn--zkjo0151o; ; ; # ð¹§ð¹©.â´ˆð«®â´
xn--fo0de1270ope54j.xn--gndo2033q; ô•œð¹§ðž­ð¹©.Ⴈð«®á‚¯; [B5, B6, V6]; xn--fo0de1270ope54j.xn--gndo2033q; ; ; # ð¹§ð¹©.Ⴈð«®á‚¯
-𞠂。ꤦ; 𞠂.ꤦ; [B1, B3, B6, V5]; xn--145h.xn--ti9a; ; ; # 𞠂.ꤦ
-xn--145h.xn--ti9a; 𞠂.ꤦ; [B1, B3, B6, V5]; xn--145h.xn--ti9a; ; ; # 𞠂.ꤦ
-ðŸ”ð¹«ï¼ŽÜ³á€·ï¼™ê¡‡; 6ð¹«.့ܳ9ꡇ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6ð¹«.့ܳ9ꡇ
-ðŸ”ð¹«ï¼Žá€·Ü³ï¼™ê¡‡; 6ð¹«.့ܳ9ꡇ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6ð¹«.့ܳ9ꡇ
-6ð¹«.့ܳ9ꡇ; ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6ð¹«.့ܳ9ꡇ
-xn--6-t26i.xn--9-91c730e8u8n; 6ð¹«.့ܳ9ꡇ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6ð¹«.့ܳ9ꡇ
-ܤ؃𞲶.ۘ; ܤ؃𞲶.ۘ; [B1, B3, B6, P1, V5, V6]; xn--lfb19ct414i.xn--olb; ; ; # ܤ.ۘ
-ܤ؃𞲶.ۘ; ; [B1, B3, B6, P1, V5, V6]; xn--lfb19ct414i.xn--olb; ; ; # ܤ.ۘ
-xn--lfb19ct414i.xn--olb; ܤ؃𞲶.ۘ; [B1, B3, B6, V5, V6]; xn--lfb19ct414i.xn--olb; ; ; # ܤ.ۘ
-✆ñ±”©ê¡‹ï¼ŽØ²â€ðž£´; ✆ñ±”©ê¡‹.زâ€ðž£´; [B1, C2, P1, V6]; xn--1biv525bcix0d.xn--xgb253k0m73a; ; xn--1biv525bcix0d.xn--xgb6828v; [B1, P1, V6] # ✆ꡋ.ز
-✆ñ±”©ê¡‹.زâ€ðž£´; ; [B1, C2, P1, V6]; xn--1biv525bcix0d.xn--xgb253k0m73a; ; xn--1biv525bcix0d.xn--xgb6828v; [B1, P1, V6] # ✆ꡋ.ز
-xn--1biv525bcix0d.xn--xgb6828v; ✆񱔩ꡋ.ز𞣴; [B1, V6]; xn--1biv525bcix0d.xn--xgb6828v; ; ; # ✆ꡋ.ز
-xn--1biv525bcix0d.xn--xgb253k0m73a; ✆ñ±”©ê¡‹.زâ€ðž£´; [B1, C2, V6]; xn--1biv525bcix0d.xn--xgb253k0m73a; ; ; # ✆ꡋ.ز
-à¡…ñƒ¾°ðž¸-.≠òƒŸð‘‹ª; à¡…ñƒ¾°Ù†-.≠òƒŸð‘‹ª; [B1, B2, B3, P1, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # à¡…Ù†-.≠𑋪
-à¡…ñƒ¾°ðž¸-.≠òƒŸð‘‹ª; à¡…ñƒ¾°Ù†-.≠òƒŸð‘‹ª; [B1, B2, B3, P1, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # à¡…Ù†-.≠𑋪
-à¡…ñƒ¾°Ù†-.≠òƒŸð‘‹ª; ; [B1, B2, B3, P1, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # à¡…Ù†-.≠𑋪
-à¡…ñƒ¾°Ù†-.≠òƒŸð‘‹ª; à¡…ñƒ¾°Ù†-.≠òƒŸð‘‹ª; [B1, B2, B3, P1, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # à¡…Ù†-.≠𑋪
-xn----qoc64my971s.xn--1ch7585g76o3c; à¡…ñƒ¾°Ù†-.≠òƒŸð‘‹ª; [B1, B2, B3, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # à¡…Ù†-.≠𑋪
+𞠂。\uA926; 𞠂.\uA926; [B1, V5]; xn--145h.xn--ti9a; ; ; # 𞠂.ꤦ
+xn--145h.xn--ti9a; 𞠂.\uA926; [B1, V5]; xn--145h.xn--ti9a; ; ; # 𞠂.ꤦ
+ðŸ”ð¹«ï¼Ž\u0733\u10379ꡇ; 6ð¹«.\u1037\u07339ꡇ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6ð¹«.့ܳ9ꡇ
+ðŸ”ð¹«ï¼Ž\u1037\u07339ꡇ; 6ð¹«.\u1037\u07339ꡇ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6ð¹«.့ܳ9ꡇ
+6ð¹«.\u1037\u07339ꡇ; ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6ð¹«.့ܳ9ꡇ
+xn--6-t26i.xn--9-91c730e8u8n; 6ð¹«.\u1037\u07339ꡇ; [B1, V5]; xn--6-t26i.xn--9-91c730e8u8n; ; ; # 6ð¹«.့ܳ9ꡇ
+\u0724\u0603𞲶.\u06D8; \u0724\u0603𞲶.\u06D8; [B1, V5, V6]; xn--lfb19ct414i.xn--olb; ; ; # ܤ.ۘ
+\u0724\u0603𞲶.\u06D8; ; [B1, V5, V6]; xn--lfb19ct414i.xn--olb; ; ; # ܤ.ۘ
+xn--lfb19ct414i.xn--olb; \u0724\u0603𞲶.\u06D8; [B1, V5, V6]; xn--lfb19ct414i.xn--olb; ; ; # ܤ.ۘ
+✆񱔩ꡋ.\u0632\u200D𞣴; ✆񱔩ꡋ.\u0632\u200D𞣴; [B1, C2, V6]; xn--1biv525bcix0d.xn--xgb253k0m73a; ; xn--1biv525bcix0d.xn--xgb6828v; [B1, V6] # ✆ꡋ.ز
+✆񱔩ꡋ.\u0632\u200D𞣴; ; [B1, C2, V6]; xn--1biv525bcix0d.xn--xgb253k0m73a; ; xn--1biv525bcix0d.xn--xgb6828v; [B1, V6] # ✆ꡋ.ز
+xn--1biv525bcix0d.xn--xgb6828v; ✆񱔩ꡋ.\u0632𞣴; [B1, V6]; xn--1biv525bcix0d.xn--xgb6828v; ; ; # ✆ꡋ.ز
+xn--1biv525bcix0d.xn--xgb253k0m73a; ✆񱔩ꡋ.\u0632\u200D𞣴; [B1, C2, V6]; xn--1biv525bcix0d.xn--xgb253k0m73a; ; ; # ✆ꡋ.ز
+\u0845ñƒ¾°ðž¸-.≠òƒŸð‘‹ª; \u0845ñƒ¾°\u0646-.≠òƒŸð‘‹ª; [B1, B2, B3, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # à¡…Ù†-.≠𑋪
+\u0845ñƒ¾°ðž¸-.=\u0338òƒŸð‘‹ª; \u0845ñƒ¾°\u0646-.≠òƒŸð‘‹ª; [B1, B2, B3, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # à¡…Ù†-.≠𑋪
+\u0845ñƒ¾°\u0646-.≠òƒŸð‘‹ª; ; [B1, B2, B3, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # à¡…Ù†-.≠𑋪
+\u0845ñƒ¾°\u0646-.=\u0338òƒŸð‘‹ª; \u0845ñƒ¾°\u0646-.≠òƒŸð‘‹ª; [B1, B2, B3, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # à¡…Ù†-.≠𑋪
+xn----qoc64my971s.xn--1ch7585g76o3c; \u0845ñƒ¾°\u0646-.≠òƒŸð‘‹ª; [B1, B2, B3, V3, V6]; xn----qoc64my971s.xn--1ch7585g76o3c; ; ; # à¡…Ù†-.≠𑋪
ðŸ›ï¼Žï§¸; 3.笠; ; 3.xn--6vz; ; ; # 3.笠
ðŸ›ï¼Žç¬ ; 3.笠; ; 3.xn--6vz; ; ; # 3.笠
3.笠; ; ; 3.xn--6vz; ; ; # 3.笠
3.xn--6vz; 3.笠; ; 3.xn--6vz; ; ; # 3.笠
--â€.Ⴞð‹·; ; [C2, P1, V3, V6]; xn----ugn.xn--2nd2315j; ; -.xn--2nd2315j; [P1, V3, V6] # -.Ⴞð‹·
--â€.â´žð‹·; ; [C2, V3]; xn----ugn.xn--mlj8559d; ; -.xn--mlj8559d; [V3] # -.â´žð‹·
+-\u200D.Ⴞð‹·; ; [C2, V3, V6]; xn----ugn.xn--2nd2315j; ; -.xn--2nd2315j; [V3, V6] # -.Ⴞð‹·
+-\u200D.â´žð‹·; ; [C2, V3]; xn----ugn.xn--mlj8559d; ; -.xn--mlj8559d; [V3] # -.â´žð‹·
-.xn--mlj8559d; -.â´žð‹·; [V3]; -.xn--mlj8559d; ; ; # -.â´žð‹·
-xn----ugn.xn--mlj8559d; -â€.â´žð‹·; [C2, V3]; xn----ugn.xn--mlj8559d; ; ; # -.â´žð‹·
+xn----ugn.xn--mlj8559d; -\u200D.â´žð‹·; [C2, V3]; xn----ugn.xn--mlj8559d; ; ; # -.â´žð‹·
-.xn--2nd2315j; -.Ⴞð‹·; [V3, V6]; -.xn--2nd2315j; ; ; # -.Ⴞð‹·
-xn----ugn.xn--2nd2315j; -â€.Ⴞð‹·; [C2, V3, V6]; xn----ugn.xn--2nd2315j; ; ; # -.Ⴞð‹·
-â€Ï‚ßܱ.à¯; â€Ï‚ßܱ.à¯; [C2, V5]; xn--zca19ln1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # ςßܱ.à¯
-â€Ï‚ßܱ.à¯; ; [C2, V5]; xn--zca19ln1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # ςßܱ.à¯
-â€Î£SSܱ.à¯; â€Ïƒssܱ.à¯; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
-â€Ïƒssܱ.à¯; ; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
-â€Î£ssܱ.à¯; â€Ïƒssܱ.à¯; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
-xn--ss-ubc826a.xn--xmc; σssܱ.à¯; [V5]; xn--ss-ubc826a.xn--xmc; ; ; # σssܱ.à¯
-xn--ss-ubc826ab34b.xn--xmc; â€Ïƒssܱ.à¯; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; ; # σssܱ.à¯
-â€Î£ÃŸÜ±.à¯; â€ÏƒÃŸÜ±.à¯; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.à¯
-â€ÏƒÃŸÜ±.à¯; ; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.à¯
-xn--zca39lk1di19a.xn--xmc; â€ÏƒÃŸÜ±.à¯; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; ; # σßܱ.à¯
-xn--zca19ln1di19a.xn--xmc; â€Ï‚ßܱ.à¯; [C2, V5]; xn--zca19ln1di19a.xn--xmc; ; ; # ςßܱ.à¯
-â€Î£SSܱ.à¯; â€Ïƒssܱ.à¯; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
-â€Ïƒssܱ.à¯; â€Ïƒssܱ.à¯; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
-â€Î£ssܱ.à¯; â€Ïƒssܱ.à¯; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
-â€Î£ÃŸÜ±ï¼Žà¯; â€ÏƒÃŸÜ±.à¯; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.à¯
-â€ÏƒÃŸÜ±ï¼Žà¯; â€ÏƒÃŸÜ±.à¯; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.à¯
-≠.â€; ≠.â€; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
-≠.â€; ≠.â€; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
-≠.â€; ; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
-≠.â€; ≠.â€; [C2, P1, V6]; xn--1ch.xn--1ug; ; xn--1ch.; [P1, V6] # ≠.
-xn--1ch.; ≠.; [V6]; xn--1ch.; ; ; # ≠.
-xn--1ch.xn--1ug; ≠.â€; [C2, V6]; xn--1ch.xn--1ug; ; ; # ≠.
-ï°ï½¡à²á ¼â–—ò’‹; ئح.à²á ¼â–—ò’‹; [B1, P1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.à²á ¼â–—
-ئح。à²á ¼â–—ò’‹; ئح.à²á ¼â–—ò’‹; [B1, P1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.à²á ¼â–—
-ئح。à²á ¼â–—ò’‹; ئح.à²á ¼â–—ò’‹; [B1, P1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.à²á ¼â–—
-xn--lgbo.xn--2rc021dcxkrx55t; ئح.à²á ¼â–—ò’‹; [B1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.à²á ¼â–—
-󧋵à§Ï‚.ςð¨¿; 󧋵à§Ï‚.Ï‚ð¨¿; [P1, V6]; xn--3xa702av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ï‚.Ï‚ð¨¿
-󧋵à§Ï‚.Ï‚ð¨¿; ; [P1, V6]; xn--3xa702av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ï‚.Ï‚ð¨¿
-󧋵à§Î£.Σð¨¿; 󧋵à§Ïƒ.σð¨¿; [P1, V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
-󧋵à§Ïƒ.Ï‚ð¨¿; ; [P1, V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ïƒ.Ï‚ð¨¿
-󧋵à§Ïƒ.σð¨¿; ; [P1, V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
-󧋵à§Î£.σð¨¿; 󧋵à§Ïƒ.σð¨¿; [P1, V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
-xn--4xa502av8297a.xn--4xa6055k; 󧋵à§Ïƒ.σð¨¿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
-󧋵à§Î£.Ï‚ð¨¿; 󧋵à§Ïƒ.Ï‚ð¨¿; [P1, V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ïƒ.Ï‚ð¨¿
-xn--4xa502av8297a.xn--3xa8055k; 󧋵à§Ïƒ.Ï‚ð¨¿; [V6]; xn--4xa502av8297a.xn--3xa8055k; ; ; # à§Ïƒ.Ï‚ð¨¿
-xn--3xa702av8297a.xn--3xa8055k; 󧋵à§Ï‚.Ï‚ð¨¿; [V6]; xn--3xa702av8297a.xn--3xa8055k; ; ; # à§Ï‚.Ï‚ð¨¿
-󧋵à§Î£ï¼ŽÎ£ð¨¿; 󧋵à§Ïƒ.σð¨¿; [P1, V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
-󧋵à§Ïƒï¼ŽÏ‚ð¨¿; 󧋵à§Ïƒ.Ï‚ð¨¿; [P1, V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ïƒ.Ï‚ð¨¿
-󧋵à§Ïƒï¼ŽÏƒð¨¿; 󧋵à§Ïƒ.σð¨¿; [P1, V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
-󧋵à§Î£ï¼ŽÏƒð¨¿; 󧋵à§Ïƒ.σð¨¿; [P1, V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
-󧋵à§Î£ï¼ŽÏ‚ð¨¿; 󧋵à§Ïƒ.Ï‚ð¨¿; [P1, V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ïƒ.Ï‚ð¨¿
-ð«“ߘ牅ࣸ。𞦤ᨗò±°á‚¹; ð«“ߘ牅ࣸ.𞦤ᨗò±°á‚¹; [B2, B3, P1, V6]; xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; ; ; # ð«“ߘ牅ࣸ.ᨗႹ
-ð«“ߘ牅ࣸ。𞦤ᨗò±°á‚¹; ð«“ߘ牅ࣸ.𞦤ᨗò±°á‚¹; [B2, B3, P1, V6]; xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; ; ; # ð«“ߘ牅ࣸ.ᨗႹ
-ð«“ߘ牅ࣸ。𞦤ᨗò±°â´™; ð«“ߘ牅ࣸ.𞦤ᨗò±°â´™; [B2, B3, P1, V6]; xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; ; ; # ð«“ߘ牅ࣸ.ᨗⴙ
-xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; ð«“ߘ牅ࣸ.𞦤ᨗò±°â´™; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; ; ; # ð«“ߘ牅ࣸ.ᨗⴙ
-xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; ð«“ߘ牅ࣸ.𞦤ᨗò±°á‚¹; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; ; ; # ð«“ߘ牅ࣸ.ᨗႹ
-ð«“ߘ牅ࣸ。𞦤ᨗò±°â´™; ð«“ߘ牅ࣸ.𞦤ᨗò±°â´™; [B2, B3, P1, V6]; xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; ; ; # ð«“ߘ牅ࣸ.ᨗⴙ
-񣤒。륧; 񣤒.륧; [P1, V6]; xn--s264a.xn--pw2b; ; ; # .륧
-񣤒。륧; 񣤒.륧; [P1, V6]; xn--s264a.xn--pw2b; ; ; # .륧
-񣤒。륧; 񣤒.륧; [P1, V6]; xn--s264a.xn--pw2b; ; ; # .륧
-񣤒。륧; 񣤒.륧; [P1, V6]; xn--s264a.xn--pw2b; ; ; # .륧
+xn----ugn.xn--2nd2315j; -\u200D.Ⴞð‹·; [C2, V3, V6]; xn----ugn.xn--2nd2315j; ; ; # -.Ⴞð‹·
+\u200Dςß\u0731.\u0BCD; \u200Dςß\u0731.\u0BCD; [C2, V5]; xn--zca19ln1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # ςßܱ.à¯
+\u200Dςß\u0731.\u0BCD; ; [C2, V5]; xn--zca19ln1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # ςßܱ.à¯
+\u200DΣSS\u0731.\u0BCD; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
+\u200Dσss\u0731.\u0BCD; ; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
+\u200DΣss\u0731.\u0BCD; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
+xn--ss-ubc826a.xn--xmc; σss\u0731.\u0BCD; [V5]; xn--ss-ubc826a.xn--xmc; ; ; # σssܱ.à¯
+xn--ss-ubc826ab34b.xn--xmc; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; ; # σssܱ.à¯
+\u200DΣß\u0731.\u0BCD; \u200Dσß\u0731.\u0BCD; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.à¯
+\u200Dσß\u0731.\u0BCD; ; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.à¯
+xn--zca39lk1di19a.xn--xmc; \u200Dσß\u0731.\u0BCD; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; ; # σßܱ.à¯
+xn--zca19ln1di19a.xn--xmc; \u200Dςß\u0731.\u0BCD; [C2, V5]; xn--zca19ln1di19a.xn--xmc; ; ; # ςßܱ.à¯
+\u200DΣSS\u0731.\u0BCD; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
+\u200Dσss\u0731.\u0BCD; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
+\u200DΣss\u0731.\u0BCD; \u200Dσss\u0731.\u0BCD; [C2, V5]; xn--ss-ubc826ab34b.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σssܱ.à¯
+\u200DΣß\u0731.\u0BCD; \u200Dσß\u0731.\u0BCD; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.à¯
+\u200Dσß\u0731.\u0BCD; \u200Dσß\u0731.\u0BCD; [C2, V5]; xn--zca39lk1di19a.xn--xmc; ; xn--ss-ubc826a.xn--xmc; [V5] # σßܱ.à¯
+≠.\u200D; ≠.\u200D; [C2]; xn--1ch.xn--1ug; ; xn--1ch.; [] # ≠.
+=\u0338.\u200D; ≠.\u200D; [C2]; xn--1ch.xn--1ug; ; xn--1ch.; [] # ≠.
+≠.\u200D; ; [C2]; xn--1ch.xn--1ug; ; xn--1ch.; [] # ≠.
+=\u0338.\u200D; ≠.\u200D; [C2]; xn--1ch.xn--1ug; ; xn--1ch.; [] # ≠.
+xn--1ch.; ≠.; ; xn--1ch.; ; ; # ≠.
+≠.; ; ; xn--1ch.; ; ; # ≠.
+=\u0338.; ≠.; ; xn--1ch.; ; ; # ≠.
+xn--1ch.xn--1ug; ≠.\u200D; [C2]; xn--1ch.xn--1ug; ; ; # ≠.
+\uFC01。\u0C81ᠼ▗ò’‹; \u0626\u062D.\u0C81ᠼ▗ò’‹; [B1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.à²á ¼â–—
+\u0626\u062D。\u0C81ᠼ▗ò’‹; \u0626\u062D.\u0C81ᠼ▗ò’‹; [B1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.à²á ¼â–—
+\u064A\u0654\u062D。\u0C81ᠼ▗ò’‹; \u0626\u062D.\u0C81ᠼ▗ò’‹; [B1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.à²á ¼â–—
+xn--lgbo.xn--2rc021dcxkrx55t; \u0626\u062D.\u0C81ᠼ▗ò’‹; [B1, V5, V6]; xn--lgbo.xn--2rc021dcxkrx55t; ; ; # ئح.à²á ¼â–—
+󧋵\u09CDς.ςð¨¿; 󧋵\u09CDÏ‚.Ï‚ð¨¿; [V6]; xn--3xa702av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ï‚.Ï‚ð¨¿
+󧋵\u09CDÏ‚.Ï‚ð¨¿; ; [V6]; xn--3xa702av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ï‚.Ï‚ð¨¿
+󧋵\u09CDΣ.Σð¨¿; 󧋵\u09CDσ.σð¨¿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
+󧋵\u09CDσ.Ï‚ð¨¿; ; [V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ïƒ.Ï‚ð¨¿
+󧋵\u09CDσ.σð¨¿; ; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
+󧋵\u09CDΣ.σð¨¿; 󧋵\u09CDσ.σð¨¿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
+xn--4xa502av8297a.xn--4xa6055k; 󧋵\u09CDσ.σð¨¿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
+󧋵\u09CDΣ.Ï‚ð¨¿; 󧋵\u09CDσ.Ï‚ð¨¿; [V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ïƒ.Ï‚ð¨¿
+xn--4xa502av8297a.xn--3xa8055k; 󧋵\u09CDσ.Ï‚ð¨¿; [V6]; xn--4xa502av8297a.xn--3xa8055k; ; ; # à§Ïƒ.Ï‚ð¨¿
+xn--3xa702av8297a.xn--3xa8055k; 󧋵\u09CDÏ‚.Ï‚ð¨¿; [V6]; xn--3xa702av8297a.xn--3xa8055k; ; ; # à§Ï‚.Ï‚ð¨¿
+󧋵\u09CDΣ.Σð¨¿; 󧋵\u09CDσ.σð¨¿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
+󧋵\u09CDσ.ςð¨¿; 󧋵\u09CDσ.Ï‚ð¨¿; [V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ïƒ.Ï‚ð¨¿
+󧋵\u09CDσ.σð¨¿; 󧋵\u09CDσ.σð¨¿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
+󧋵\u09CDΣ.σð¨¿; 󧋵\u09CDσ.σð¨¿; [V6]; xn--4xa502av8297a.xn--4xa6055k; ; ; # à§Ïƒ.σð¨¿
+󧋵\u09CDΣ.ςð¨¿; 󧋵\u09CDσ.Ï‚ð¨¿; [V6]; xn--4xa502av8297a.xn--3xa8055k; ; xn--4xa502av8297a.xn--4xa6055k; # à§Ïƒ.Ï‚ð¨¿
+ð«“\u07D8牅\u08F8。𞦤\u1A17ò±°á‚¹; ð«“\u07D8牅\u08F8.𞦤\u1A17ò±°á‚¹; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; ; ; # ð«“ߘ牅ࣸ.ᨗႹ
+ð«“\u07D8牅\u08F8。𞦤\u1A17ò±°á‚¹; ð«“\u07D8牅\u08F8.𞦤\u1A17ò±°á‚¹; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; ; ; # ð«“ߘ牅ࣸ.ᨗႹ
+ð«“\u07D8牅\u08F8。𞦤\u1A17ò±°â´™; ð«“\u07D8牅\u08F8.𞦤\u1A17ò±°â´™; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; ; ; # ð«“ߘ牅ࣸ.ᨗⴙ
+xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; ð«“\u07D8牅\u08F8.𞦤\u1A17ò±°â´™; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; ; ; # ð«“ߘ牅ࣸ.ᨗⴙ
+xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; ð«“\u07D8牅\u08F8.𞦤\u1A17ò±°á‚¹; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--xnd909bv540bm5k9d; ; ; # ð«“ߘ牅ࣸ.ᨗႹ
+ð«“\u07D8牅\u08F8。𞦤\u1A17ò±°â´™; ð«“\u07D8牅\u08F8.𞦤\u1A17ò±°â´™; [B2, B3, V6]; xn--zsb09cu46vjs6f.xn--gmf469fr883am5r1e; ; ; # ð«“ߘ牅ࣸ.ᨗⴙ
+񣤒。륧; 񣤒.륧; [V6]; xn--s264a.xn--pw2b; ; ; # .륧
+񣤒。륧; 񣤒.륧; [V6]; xn--s264a.xn--pw2b; ; ; # .륧
+񣤒。륧; 񣤒.륧; [V6]; xn--s264a.xn--pw2b; ; ; # .륧
+񣤒。륧; 񣤒.륧; [V6]; xn--s264a.xn--pw2b; ; ; # .륧
xn--s264a.xn--pw2b; 񣤒.륧; [V6]; xn--s264a.xn--pw2b; ; ; # .륧
-ð¹·â€ã€‚󉵢; ð¹·â€.󉵢; [B1, C2, P1, V6]; xn--1ugx205g.xn--8088d; ; xn--vo0d.xn--8088d; [B1, P1, V6] # ð¹·.
+ð¹·\u200D。󉵢; ð¹·\u200D.󉵢; [B1, C2, V6]; xn--1ugx205g.xn--8088d; ; xn--vo0d.xn--8088d; [B1, V6] # ð¹·.
xn--vo0d.xn--8088d; ð¹·.󉵢; [B1, V6]; xn--vo0d.xn--8088d; ; ; # ð¹·.
-xn--1ugx205g.xn--8088d; ð¹·â€.󉵢; [B1, C2, V6]; xn--1ugx205g.xn--8088d; ; ; # ð¹·.
-Ⴘۂ𑲭。-; Ⴘۂ𑲭.-; [B1, B5, B6, P1, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.-
-ႸÛٔ𑲭。-; Ⴘۂ𑲭.-; [B1, B5, B6, P1, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.-
-Ⴘۂ𑲭。-; Ⴘۂ𑲭.-; [B1, B5, B6, P1, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.-
-ႸÛٔ𑲭。-; Ⴘۂ𑲭.-; [B1, B5, B6, P1, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.-
-â´˜Ûٔ𑲭。-; ⴘۂ𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.-
-ⴘۂ𑲭。-; ⴘۂ𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.-
-xn--1kb147qfk3n.-; ⴘۂ𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.-
-xn--1kb312c139t.-; Ⴘۂ𑲭.-; [B1, B5, B6, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.-
-â´˜Ûٔ𑲭。-; ⴘۂ𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.-
-ⴘۂ𑲭。-; ⴘۂ𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.-
-꠆ٻ₆á¡ã€‚🛇ï³; ê †Ù»6á¡.🛇يم; [B1, V5]; xn--6-rrc018krt9k.xn--hhbj61429a; ; ; # ê †Ù»6á¡.🛇يم
-ê †Ù»6á¡ã€‚🛇يم; ê †Ù»6á¡.🛇يم; [B1, V5]; xn--6-rrc018krt9k.xn--hhbj61429a; ; ; # ê †Ù»6á¡.🛇يم
-xn--6-rrc018krt9k.xn--hhbj61429a; ê †Ù»6á¡.🛇يم; [B1, V5]; xn--6-rrc018krt9k.xn--hhbj61429a; ; ; # ê †Ù»6á¡.🛇يم
-ò¸‚.㇄ᡟð«‚Ø¢; ; [B1, P1, V6]; xn--p292d.xn--hgb154ghrsvm2r; ; ; # .㇄ᡟð«‚Ø¢
-ò¸‚.㇄ᡟð«‚آ; ò¸‚.㇄ᡟð«‚Ø¢; [B1, P1, V6]; xn--p292d.xn--hgb154ghrsvm2r; ; ; # .㇄ᡟð«‚Ø¢
-xn--p292d.xn--hgb154ghrsvm2r; ò¸‚.㇄ᡟð«‚Ø¢; [B1, V6]; xn--p292d.xn--hgb154ghrsvm2r; ; ; # .㇄ᡟð«‚Ø¢
-ߟ򵚌。-ߩ; ߟ򵚌.-ߩ; [B1, B2, B3, P1, V3, V6]; xn--6sb88139l.xn----pdd; ; ; # ߟ.-ߩ
-xn--6sb88139l.xn----pdd; ߟ򵚌.-ߩ; [B1, B2, B3, V3, V6]; xn--6sb88139l.xn----pdd; ; ; # ߟ.-ߩ
-ςك⾑.‌ᢟ‌⒈; ςك襾.‌ᢟ‌⒈; [B1, B5, C1, P1, V6]; xn--3xa69jux8r.xn--pbf519aba607b; ; xn--4xa49jux8r.xn--pbf212d; [B5, P1, V6] # ςك襾.ᢟ⒈
-ςك襾.‌ᢟ‌1.; ; [B1, B5, C1]; xn--3xa69jux8r.xn--1-4ck691bba.; ; xn--4xa49jux8r.xn--1-4ck.; [B5] # ςك襾.ᢟ1.
-Σك襾.‌ᢟ‌1.; σك襾.‌ᢟ‌1.; [B1, B5, C1]; xn--4xa49jux8r.xn--1-4ck691bba.; ; xn--4xa49jux8r.xn--1-4ck.; [B5] # σك襾.ᢟ1.
-σك襾.‌ᢟ‌1.; ; [B1, B5, C1]; xn--4xa49jux8r.xn--1-4ck691bba.; ; xn--4xa49jux8r.xn--1-4ck.; [B5] # σك襾.ᢟ1.
-xn--4xa49jux8r.xn--1-4ck.; σك襾.ᢟ1.; [B5]; xn--4xa49jux8r.xn--1-4ck.; ; ; # σك襾.ᢟ1.
-xn--4xa49jux8r.xn--1-4ck691bba.; σك襾.‌ᢟ‌1.; [B1, B5, C1]; xn--4xa49jux8r.xn--1-4ck691bba.; ; ; # σك襾.ᢟ1.
-xn--3xa69jux8r.xn--1-4ck691bba.; ςك襾.‌ᢟ‌1.; [B1, B5, C1]; xn--3xa69jux8r.xn--1-4ck691bba.; ; ; # ςك襾.ᢟ1.
-Σك⾑.‌ᢟ‌⒈; σك襾.‌ᢟ‌⒈; [B1, B5, C1, P1, V6]; xn--4xa49jux8r.xn--pbf519aba607b; ; xn--4xa49jux8r.xn--pbf212d; [B5, P1, V6] # σك襾.ᢟ⒈
-σك⾑.‌ᢟ‌⒈; σك襾.‌ᢟ‌⒈; [B1, B5, C1, P1, V6]; xn--4xa49jux8r.xn--pbf519aba607b; ; xn--4xa49jux8r.xn--pbf212d; [B5, P1, V6] # σك襾.ᢟ⒈
-xn--4xa49jux8r.xn--pbf212d; σك襾.ᢟ⒈; [B5, V6]; xn--4xa49jux8r.xn--pbf212d; ; ; # σك襾.ᢟ⒈
-xn--4xa49jux8r.xn--pbf519aba607b; σك襾.‌ᢟ‌⒈; [B1, B5, C1, V6]; xn--4xa49jux8r.xn--pbf519aba607b; ; ; # σك襾.ᢟ⒈
-xn--3xa69jux8r.xn--pbf519aba607b; ςك襾.‌ᢟ‌⒈; [B1, B5, C1, V6]; xn--3xa69jux8r.xn--pbf519aba607b; ; ; # ςك襾.ᢟ⒈
-ᡆð‘“.𞵆; ᡆð‘“.𞵆; [P1, V6]; xn--57e0440k.xn--k86h; ; ; # ᡆ.
-ᡆð‘“.𞵆; ; [P1, V6]; xn--57e0440k.xn--k86h; ; ; # ᡆ.
+xn--1ugx205g.xn--8088d; ð¹·\u200D.󉵢; [B1, C2, V6]; xn--1ugx205g.xn--8088d; ; ; # ð¹·.
+Ⴘ\u06C2𑲭。-; Ⴘ\u06C2𑲭.-; [B1, B5, B6, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.-
+Ⴘ\u06C1\u0654𑲭。-; Ⴘ\u06C2𑲭.-; [B1, B5, B6, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.-
+Ⴘ\u06C2𑲭。-; Ⴘ\u06C2𑲭.-; [B1, B5, B6, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.-
+Ⴘ\u06C1\u0654𑲭。-; Ⴘ\u06C2𑲭.-; [B1, B5, B6, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.-
+ⴘ\u06C1\u0654𑲭。-; ⴘ\u06C2𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.-
+ⴘ\u06C2𑲭。-; ⴘ\u06C2𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.-
+xn--1kb147qfk3n.-; ⴘ\u06C2𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.-
+xn--1kb312c139t.-; Ⴘ\u06C2𑲭.-; [B1, B5, B6, V3, V6]; xn--1kb312c139t.-; ; ; # Ⴘۂ𑲭.-
+ⴘ\u06C1\u0654𑲭。-; ⴘ\u06C2𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.-
+ⴘ\u06C2𑲭。-; ⴘ\u06C2𑲭.-; [B1, B5, B6, V3]; xn--1kb147qfk3n.-; ; ; # ⴘۂ𑲭.-
+\uA806\u067B₆á¡ã€‚🛇\uFCDD; \uA806\u067B6á¡.🛇\u064A\u0645; [B1, V5]; xn--6-rrc018krt9k.xn--hhbj61429a; ; ; # ê †Ù»6á¡.🛇يم
+\uA806\u067B6á¡ã€‚🛇\u064A\u0645; \uA806\u067B6á¡.🛇\u064A\u0645; [B1, V5]; xn--6-rrc018krt9k.xn--hhbj61429a; ; ; # ê †Ù»6á¡.🛇يم
+xn--6-rrc018krt9k.xn--hhbj61429a; \uA806\u067B6á¡.🛇\u064A\u0645; [B1, V5]; xn--6-rrc018krt9k.xn--hhbj61429a; ; ; # ê †Ù»6á¡.🛇يم
+ò¸‚.㇄ᡟð«‚\u0622; ; [B1, V6]; xn--p292d.xn--hgb154ghrsvm2r; ; ; # .㇄ᡟð«‚Ø¢
+ò¸‚.㇄ᡟð«‚\u0627\u0653; ò¸‚.㇄ᡟð«‚\u0622; [B1, V6]; xn--p292d.xn--hgb154ghrsvm2r; ; ; # .㇄ᡟð«‚Ø¢
+xn--p292d.xn--hgb154ghrsvm2r; ò¸‚.㇄ᡟð«‚\u0622; [B1, V6]; xn--p292d.xn--hgb154ghrsvm2r; ; ; # .㇄ᡟð«‚Ø¢
+\u07DF򵚌。-\u07E9; \u07DF򵚌.-\u07E9; [B1, B2, B3, V3, V6]; xn--6sb88139l.xn----pdd; ; ; # ߟ.-ߩ
+xn--6sb88139l.xn----pdd; \u07DF򵚌.-\u07E9; [B1, B2, B3, V3, V6]; xn--6sb88139l.xn----pdd; ; ; # ߟ.-ߩ
+ς\u0643⾑.\u200Cᢟ\u200C⒈; ς\u0643襾.\u200Cᢟ\u200C⒈; [B1, B5, C1, V6]; xn--3xa69jux8r.xn--pbf519aba607b; ; xn--4xa49jux8r.xn--pbf212d; [B5, V6] # ςك襾.ᢟ⒈
+ς\u0643襾.\u200Cᢟ\u200C1.; ; [B1, B5, C1]; xn--3xa69jux8r.xn--1-4ck691bba.; ; xn--4xa49jux8r.xn--1-4ck.; [B5] # ςك襾.ᢟ1.
+Σ\u0643襾.\u200Cᢟ\u200C1.; σ\u0643襾.\u200Cᢟ\u200C1.; [B1, B5, C1]; xn--4xa49jux8r.xn--1-4ck691bba.; ; xn--4xa49jux8r.xn--1-4ck.; [B5] # σك襾.ᢟ1.
+σ\u0643襾.\u200Cᢟ\u200C1.; ; [B1, B5, C1]; xn--4xa49jux8r.xn--1-4ck691bba.; ; xn--4xa49jux8r.xn--1-4ck.; [B5] # σك襾.ᢟ1.
+xn--4xa49jux8r.xn--1-4ck.; σ\u0643襾.ᢟ1.; [B5]; xn--4xa49jux8r.xn--1-4ck.; ; ; # σك襾.ᢟ1.
+xn--4xa49jux8r.xn--1-4ck691bba.; σ\u0643襾.\u200Cᢟ\u200C1.; [B1, B5, C1]; xn--4xa49jux8r.xn--1-4ck691bba.; ; ; # σك襾.ᢟ1.
+xn--3xa69jux8r.xn--1-4ck691bba.; ς\u0643襾.\u200Cᢟ\u200C1.; [B1, B5, C1]; xn--3xa69jux8r.xn--1-4ck691bba.; ; ; # ςك襾.ᢟ1.
+Σ\u0643⾑.\u200Cᢟ\u200C⒈; σ\u0643襾.\u200Cᢟ\u200C⒈; [B1, B5, C1, V6]; xn--4xa49jux8r.xn--pbf519aba607b; ; xn--4xa49jux8r.xn--pbf212d; [B5, V6] # σك襾.ᢟ⒈
+σ\u0643⾑.\u200Cᢟ\u200C⒈; σ\u0643襾.\u200Cᢟ\u200C⒈; [B1, B5, C1, V6]; xn--4xa49jux8r.xn--pbf519aba607b; ; xn--4xa49jux8r.xn--pbf212d; [B5, V6] # σك襾.ᢟ⒈
+xn--4xa49jux8r.xn--pbf212d; σ\u0643襾.ᢟ⒈; [B5, V6]; xn--4xa49jux8r.xn--pbf212d; ; ; # σك襾.ᢟ⒈
+xn--4xa49jux8r.xn--pbf519aba607b; σ\u0643襾.\u200Cᢟ\u200C⒈; [B1, B5, C1, V6]; xn--4xa49jux8r.xn--pbf519aba607b; ; ; # σك襾.ᢟ⒈
+xn--3xa69jux8r.xn--pbf519aba607b; ς\u0643襾.\u200Cᢟ\u200C⒈; [B1, B5, C1, V6]; xn--3xa69jux8r.xn--pbf519aba607b; ; ; # ςك襾.ᢟ⒈
+ᡆð‘“.𞵆; ᡆð‘“.𞵆; [V6]; xn--57e0440k.xn--k86h; ; ; # ᡆ.
+ᡆð‘“.𞵆; ; [V6]; xn--57e0440k.xn--k86h; ; ; # ᡆ.
xn--57e0440k.xn--k86h; ᡆð‘“.𞵆; [V6]; xn--57e0440k.xn--k86h; ; ; # ᡆ.
-à©ð¦“ᷮ。‌ࢽñ¹²; à©ð¦“á·®.‌ࢽñ¹²; [B1, C1, P1, V5, V6]; xn--ybc461hph93b.xn--jzb740j1y45h; ; xn--ybc461hph93b.xn--jzb29857e; [B1, B2, B3, P1, V5, V6] # à©ð¦“á·®.ࢽ
-à©ð¦“ᷮ。‌ࢽñ¹²; à©ð¦“á·®.‌ࢽñ¹²; [B1, C1, P1, V5, V6]; xn--ybc461hph93b.xn--jzb740j1y45h; ; xn--ybc461hph93b.xn--jzb29857e; [B1, B2, B3, P1, V5, V6] # à©ð¦“á·®.ࢽ
-xn--ybc461hph93b.xn--jzb29857e; à©ð¦“á·®.ࢽñ¹²; [B1, B2, B3, V5, V6]; xn--ybc461hph93b.xn--jzb29857e; ; ; # à©ð¦“á·®.ࢽ
-xn--ybc461hph93b.xn--jzb740j1y45h; à©ð¦“á·®.‌ࢽñ¹²; [B1, C1, V5, V6]; xn--ybc461hph93b.xn--jzb740j1y45h; ; ; # à©ð¦“á·®.ࢽ
-خ݈񅪪-.‌먿; خ݈񅪪-.‌먿; [B1, B2, B3, C1, P1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, P1, V3, V6] # خ݈-.먿
-خ݈񅪪-.‌먿; خ݈񅪪-.‌먿; [B1, B2, B3, C1, P1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, P1, V3, V6] # خ݈-.먿
-خ݈񅪪-.‌먿; ; [B1, B2, B3, C1, P1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, P1, V3, V6] # خ݈-.먿
-خ݈񅪪-.‌먿; خ݈񅪪-.‌먿; [B1, B2, B3, C1, P1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, P1, V3, V6] # خ݈-.먿
-xn----dnc06f42153a.xn--v22b; خ݈񅪪-.먿; [B2, B3, V3, V6]; xn----dnc06f42153a.xn--v22b; ; ; # خ݈-.먿
-xn----dnc06f42153a.xn--0ug1581d; خ݈񅪪-.‌먿; [B1, B2, B3, C1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; ; # خ݈-.먿
-􋿦。ᠽ; 􋿦.ᠽ; [P1, V6]; xn--j890g.xn--w7e; ; ; # .ᠽ
-􋿦。ᠽ; 􋿦.ᠽ; [P1, V6]; xn--j890g.xn--w7e; ; ; # .ᠽ
+\u0A4Dð¦“\u1DEE。\u200C\u08BDñ¹²; \u0A4Dð¦“\u1DEE.\u200C\u08BDñ¹²; [B1, C1, V5, V6]; xn--ybc461hph93b.xn--jzb740j1y45h; ; xn--ybc461hph93b.xn--jzb29857e; [B1, B2, B3, V5, V6] # à©ð¦“á·®.ࢽ
+\u0A4Dð¦“\u1DEE。\u200C\u08BDñ¹²; \u0A4Dð¦“\u1DEE.\u200C\u08BDñ¹²; [B1, C1, V5, V6]; xn--ybc461hph93b.xn--jzb740j1y45h; ; xn--ybc461hph93b.xn--jzb29857e; [B1, B2, B3, V5, V6] # à©ð¦“á·®.ࢽ
+xn--ybc461hph93b.xn--jzb29857e; \u0A4Dð¦“\u1DEE.\u08BDñ¹²; [B1, B2, B3, V5, V6]; xn--ybc461hph93b.xn--jzb29857e; ; ; # à©ð¦“á·®.ࢽ
+xn--ybc461hph93b.xn--jzb740j1y45h; \u0A4Dð¦“\u1DEE.\u200C\u08BDñ¹²; [B1, C1, V5, V6]; xn--ybc461hph93b.xn--jzb740j1y45h; ; ; # à©ð¦“á·®.ࢽ
+\u062E\u0748񅪪-.\u200C먿; \u062E\u0748񅪪-.\u200C먿; [B1, B2, B3, C1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, V3, V6] # خ݈-.먿
+\u062E\u0748񅪪-.\u200C먿; \u062E\u0748񅪪-.\u200C먿; [B1, B2, B3, C1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, V3, V6] # خ݈-.먿
+\u062E\u0748񅪪-.\u200C먿; ; [B1, B2, B3, C1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, V3, V6] # خ݈-.먿
+\u062E\u0748񅪪-.\u200C먿; \u062E\u0748񅪪-.\u200C먿; [B1, B2, B3, C1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; xn----dnc06f42153a.xn--v22b; [B2, B3, V3, V6] # خ݈-.먿
+xn----dnc06f42153a.xn--v22b; \u062E\u0748񅪪-.먿; [B2, B3, V3, V6]; xn----dnc06f42153a.xn--v22b; ; ; # خ݈-.먿
+xn----dnc06f42153a.xn--0ug1581d; \u062E\u0748񅪪-.\u200C먿; [B1, B2, B3, C1, V3, V6]; xn----dnc06f42153a.xn--0ug1581d; ; ; # خ݈-.먿
+􋿦。ᠽ; 􋿦.ᠽ; [V6]; xn--j890g.xn--w7e; ; ; # .ᠽ
+􋿦。ᠽ; 􋿦.ᠽ; [V6]; xn--j890g.xn--w7e; ; ; # .ᠽ
xn--j890g.xn--w7e; 􋿦.ᠽ; [V6]; xn--j890g.xn--w7e; ; ; # .ᠽ
-嬃ðŒï¼Žâ€à­„; 嬃ðŒ.â€à­„; [C2]; xn--b6s0078f.xn--0ic557h; ; xn--b6s0078f.xn--0ic; [V5] # 嬃ðŒ.à­„
-嬃ðŒ.â€à­„; ; [C2]; xn--b6s0078f.xn--0ic557h; ; xn--b6s0078f.xn--0ic; [V5] # 嬃ðŒ.à­„
-xn--b6s0078f.xn--0ic; 嬃ðŒ.à­„; [V5]; xn--b6s0078f.xn--0ic; ; ; # 嬃ðŒ.à­„
-xn--b6s0078f.xn--0ic557h; 嬃ðŒ.â€à­„; [C2]; xn--b6s0078f.xn--0ic557h; ; ; # 嬃ðŒ.à­„
-Ø‚ðŒªâ‰¯ï¼Žðš‹²òµ¨; Ø‚ðŒªâ‰¯.𚋲òµ¨; [B1, P1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # ðŒªâ‰¯.
-Ø‚ðŒª≯.𚋲òµ¨; Ø‚ðŒªâ‰¯.𚋲òµ¨; [B1, P1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # ðŒªâ‰¯.
-Ø‚ðŒªâ‰¯.𚋲òµ¨; ; [B1, P1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # ðŒªâ‰¯.
-Ø‚ðŒª≯.𚋲òµ¨; Ø‚ðŒªâ‰¯.𚋲òµ¨; [B1, P1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # ðŒªâ‰¯.
-xn--kfb866llx01a.xn--wp1gm3570b; Ø‚ðŒªâ‰¯.𚋲òµ¨; [B1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # ðŒªâ‰¯.
-򫾥ࢷ៌꧀.𞼠; ; [B5, P1, V6]; xn--dzb638ewm4i1iy1h.xn--3m7h; ; ; # ࢷ៌꧀.
-xn--dzb638ewm4i1iy1h.xn--3m7h; 򫾥ࢷ៌꧀.𞼠; [B5, V6]; xn--dzb638ewm4i1iy1h.xn--3m7h; ; ; # ࢷ៌꧀.
-‌.񟛤; ; [C1, P1, V6]; xn--0ug.xn--q823a; ; .xn--q823a; [P1, V6, A4_2] # .
+嬃ðŒï¼Ž\u200D\u0B44; 嬃ðŒ.\u200D\u0B44; [C2]; xn--b6s0078f.xn--0ic557h; ; xn--b6s0078f.xn--0ic; [V5] # 嬃ðŒ.à­„
+嬃ðŒ.\u200D\u0B44; ; [C2]; xn--b6s0078f.xn--0ic557h; ; xn--b6s0078f.xn--0ic; [V5] # 嬃ðŒ.à­„
+xn--b6s0078f.xn--0ic; 嬃ðŒ.\u0B44; [V5]; xn--b6s0078f.xn--0ic; ; ; # 嬃ðŒ.à­„
+xn--b6s0078f.xn--0ic557h; 嬃ðŒ.\u200D\u0B44; [C2]; xn--b6s0078f.xn--0ic557h; ; ; # 嬃ðŒ.à­„
+\u0602ðŒªâ‰¯ï¼Žðš‹²òµ¨; \u0602ðŒªâ‰¯.𚋲òµ¨; [B1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # ðŒªâ‰¯.
+\u0602ðŒª>\u0338.𚋲òµ¨; \u0602ðŒªâ‰¯.𚋲òµ¨; [B1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # ðŒªâ‰¯.
+\u0602ðŒªâ‰¯.𚋲òµ¨; ; [B1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # ðŒªâ‰¯.
+\u0602ðŒª>\u0338.𚋲òµ¨; \u0602ðŒªâ‰¯.𚋲òµ¨; [B1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # ðŒªâ‰¯.
+xn--kfb866llx01a.xn--wp1gm3570b; \u0602ðŒªâ‰¯.𚋲òµ¨; [B1, V6]; xn--kfb866llx01a.xn--wp1gm3570b; ; ; # ðŒªâ‰¯.
+򫾥\u08B7\u17CC\uA9C0.𞼠; ; [B5, V6]; xn--dzb638ewm4i1iy1h.xn--3m7h; ; ; # ࢷ៌꧀.
+xn--dzb638ewm4i1iy1h.xn--3m7h; 򫾥\u08B7\u17CC\uA9C0.𞼠; [B5, V6]; xn--dzb638ewm4i1iy1h.xn--3m7h; ; ; # ࢷ៌꧀.
+\u200C.񟛤; ; [C1, V6]; xn--0ug.xn--q823a; ; .xn--q823a; [V6, A4_2] # .
.xn--q823a; .񟛤; [V6, X4_2]; .xn--q823a; [V6, A4_2]; ; # .
-xn--0ug.xn--q823a; ‌.񟛤; [C1, V6]; xn--0ug.xn--q823a; ; ; # .
-òº›•á‚£ä ….ð¸‘; òº›•á‚£ä ….ð¸‘; [P1, V6]; xn--bnd074zr557n.xn--yl0d; ; ; # Ⴃ䠅.
-òº›•á‚£ä ….ð¸‘; ; [P1, V6]; xn--bnd074zr557n.xn--yl0d; ; ; # Ⴃ䠅.
-òº›•â´ƒä ….ð¸‘; ; [P1, V6]; xn--ukju77frl47r.xn--yl0d; ; ; # ⴃ䠅.
+xn--0ug.xn--q823a; \u200C.񟛤; [C1, V6]; xn--0ug.xn--q823a; ; ; # .
+òº›•á‚£ä ….ð¸‘; òº›•á‚£ä ….ð¸‘; [V6]; xn--bnd074zr557n.xn--yl0d; ; ; # Ⴃ䠅.
+òº›•á‚£ä ….ð¸‘; ; [V6]; xn--bnd074zr557n.xn--yl0d; ; ; # Ⴃ䠅.
+òº›•â´ƒä ….ð¸‘; ; [V6]; xn--ukju77frl47r.xn--yl0d; ; ; # ⴃ䠅.
xn--ukju77frl47r.xn--yl0d; òº›•â´ƒä ….ð¸‘; [V6]; xn--ukju77frl47r.xn--yl0d; ; ; # ⴃ䠅.
xn--bnd074zr557n.xn--yl0d; òº›•á‚£ä ….ð¸‘; [V6]; xn--bnd074zr557n.xn--yl0d; ; ; # Ⴃ䠅.
-òº›•â´ƒä ….ð¸‘; òº›•â´ƒä ….ð¸‘; [P1, V6]; xn--ukju77frl47r.xn--yl0d; ; ; # ⴃ䠅.
-ᯱð¹³ð¹µðž¤šï½¡ðŸ¨á‚¥; ᯱð¹³ð¹µðž¤¼.6á‚¥; [B1, P1, V5, V6]; xn--zzfy954hga2415t.xn--6-h0g; ; ; # ᯱð¹³ð¹µðž¤¼.6á‚¥
-ᯱð¹³ð¹µðž¤šã€‚6á‚¥; ᯱð¹³ð¹µðž¤¼.6á‚¥; [B1, P1, V5, V6]; xn--zzfy954hga2415t.xn--6-h0g; ; ; # ᯱð¹³ð¹µðž¤¼.6á‚¥
-ᯱð¹³ð¹µðž¤¼ã€‚6â´…; ᯱð¹³ð¹µðž¤¼.6â´…; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱð¹³ð¹µðž¤¼.6â´…
-ᯱð¹³ð¹µðž¤šã€‚6â´…; ᯱð¹³ð¹µðž¤¼.6â´…; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱð¹³ð¹µðž¤¼.6â´…
-xn--zzfy954hga2415t.xn--6-kvs; ᯱð¹³ð¹µðž¤¼.6â´…; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱð¹³ð¹µðž¤¼.6â´…
-xn--zzfy954hga2415t.xn--6-h0g; ᯱð¹³ð¹µðž¤¼.6á‚¥; [B1, V5, V6]; xn--zzfy954hga2415t.xn--6-h0g; ; ; # ᯱð¹³ð¹µðž¤¼.6á‚¥
-ᯱð¹³ð¹µðž¤¼ï½¡ðŸ¨â´…; ᯱð¹³ð¹µðž¤¼.6â´…; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱð¹³ð¹µðž¤¼.6â´…
-ᯱð¹³ð¹µðž¤šï½¡ðŸ¨â´…; ᯱð¹³ð¹µðž¤¼.6â´…; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱð¹³ð¹µðž¤¼.6â´…
--。︒; -.︒; [P1, V3, V6]; -.xn--y86c; ; ; # -.︒
+òº›•â´ƒä ….ð¸‘; òº›•â´ƒä ….ð¸‘; [V6]; xn--ukju77frl47r.xn--yl0d; ; ; # ⴃ䠅.
+\u1BF1ð¹³ð¹µðž¤šï½¡ðŸ¨á‚¥; \u1BF1ð¹³ð¹µðž¤¼.6á‚¥; [B1, V5, V6]; xn--zzfy954hga2415t.xn--6-h0g; ; ; # ᯱð¹³ð¹µðž¤¼.6á‚¥
+\u1BF1ð¹³ð¹µðž¤šã€‚6á‚¥; \u1BF1ð¹³ð¹µðž¤¼.6á‚¥; [B1, V5, V6]; xn--zzfy954hga2415t.xn--6-h0g; ; ; # ᯱð¹³ð¹µðž¤¼.6á‚¥
+\u1BF1ð¹³ð¹µðž¤¼ã€‚6â´…; \u1BF1ð¹³ð¹µðž¤¼.6â´…; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱð¹³ð¹µðž¤¼.6â´…
+\u1BF1ð¹³ð¹µðž¤šã€‚6â´…; \u1BF1ð¹³ð¹µðž¤¼.6â´…; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱð¹³ð¹µðž¤¼.6â´…
+xn--zzfy954hga2415t.xn--6-kvs; \u1BF1ð¹³ð¹µðž¤¼.6â´…; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱð¹³ð¹µðž¤¼.6â´…
+xn--zzfy954hga2415t.xn--6-h0g; \u1BF1ð¹³ð¹µðž¤¼.6á‚¥; [B1, V5, V6]; xn--zzfy954hga2415t.xn--6-h0g; ; ; # ᯱð¹³ð¹µðž¤¼.6á‚¥
+\u1BF1ð¹³ð¹µðž¤¼ï½¡ðŸ¨â´…; \u1BF1ð¹³ð¹µðž¤¼.6â´…; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱð¹³ð¹µðž¤¼.6â´…
+\u1BF1ð¹³ð¹µðž¤šï½¡ðŸ¨â´…; \u1BF1ð¹³ð¹µðž¤¼.6â´…; [B1, V5]; xn--zzfy954hga2415t.xn--6-kvs; ; ; # ᯱð¹³ð¹µðž¤¼.6â´…
+-。︒; -.︒; [V3, V6]; -.xn--y86c; ; ; # -.︒
-。。; -..; [V3, X4_2]; ; [V3, A4_2]; ; # -..
-..; ; [V3, X4_2]; ; [V3, A4_2]; ; # -..
-.xn--y86c; -.︒; [V3, V6]; -.xn--y86c; ; ; # -.︒
-ߛჀ。-âµ--; ߛჀ.-5--; [B1, B2, B3, P1, V2, V3, V6]; xn--2sb866b.-5--; ; ; # ߛჀ.-5--
-ߛჀ。-5--; ߛჀ.-5--; [B1, B2, B3, P1, V2, V3, V6]; xn--2sb866b.-5--; ; ; # ߛჀ.-5--
-ߛⴠ。-5--; ߛⴠ.-5--; [B1, B2, B3, V2, V3]; xn--2sb691q.-5--; ; ; # ߛⴠ.-5--
-xn--2sb691q.-5--; ߛⴠ.-5--; [B1, B2, B3, V2, V3]; xn--2sb691q.-5--; ; ; # ߛⴠ.-5--
-xn--2sb866b.-5--; ߛჀ.-5--; [B1, B2, B3, V2, V3, V6]; xn--2sb866b.-5--; ; ; # ߛჀ.-5--
-ߛⴠ。-âµ--; ߛⴠ.-5--; [B1, B2, B3, V2, V3]; xn--2sb691q.-5--; ; ; # ߛⴠ.-5--
-≯?󠑕。ð¹·ð¹»â‰¯ð·’; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
-≯?󠑕。ð¹·ð¹»≯ð·’; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
-≯?󠑕。ð¹·ð¹»â‰¯ð·’; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
-≯?󠑕。ð¹·ð¹»≯ð·’; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
-xn--?-ogo25661n.xn--hdh8283gdoaqa; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
-≯?ó ‘•.xn--hdh8283gdoaqa; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
-≯?ó ‘•.xn--hdh8283gdoaqa; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
-≯?ó ‘•.XN--HDH8283GDOAQA; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
-≯?ó ‘•.XN--HDH8283GDOAQA; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
-≯?ó ‘•.Xn--Hdh8283gdoaqa; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
-≯?ó ‘•.Xn--Hdh8283gdoaqa; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, P1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
-ã”ࣦݼâ€ã€‚͆ò³Šð…¶Ø„; ルーブルࣦݼâ€.͆ò³Šð…¶Ø„; [B1, B5, B6, C2, P1, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, P1, V5, V6] # ルーブルࣦݼ.͆
-ルーブルࣦݼâ€ã€‚͆ò³Šð…¶Ø„; ルーブルࣦݼâ€.͆ò³Šð…¶Ø„; [B1, B5, B6, C2, P1, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, P1, V5, V6] # ルーブルࣦݼ.͆
-ルーブルࣦݼâ€ã€‚͆ò³Šð…¶Ø„; ルーブルࣦݼâ€.͆ò³Šð…¶Ø„; [B1, B5, B6, C2, P1, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, P1, V5, V6] # ルーブルࣦݼ.͆
-xn--dqb73el09fncab4h.xn--kua81ls548d3608b; ルーブルࣦݼ.͆ò³Šð…¶Ø„; [B1, B5, B6, V5, V6]; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; ; ; # ルーブルࣦݼ.͆
-xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ルーブルࣦݼâ€.͆ò³Šð…¶Ø„; [B1, B5, B6, C2, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; ; # ルーブルࣦݼ.͆
-â€.F; â€.f; [C2]; xn--1ug.f; ; .f; [A4_2] # .f
-â€.f; ; [C2]; xn--1ug.f; ; .f; [A4_2] # .f
+\u07DBჀ。-âµ--; \u07DBჀ.-5--; [B1, B2, B3, V2, V3, V6]; xn--2sb866b.-5--; ; ; # ߛჀ.-5--
+\u07DBჀ。-5--; \u07DBჀ.-5--; [B1, B2, B3, V2, V3, V6]; xn--2sb866b.-5--; ; ; # ߛჀ.-5--
+\u07DBⴠ。-5--; \u07DBⴠ.-5--; [B1, B2, B3, V2, V3]; xn--2sb691q.-5--; ; ; # ߛⴠ.-5--
+xn--2sb691q.-5--; \u07DBⴠ.-5--; [B1, B2, B3, V2, V3]; xn--2sb691q.-5--; ; ; # ߛⴠ.-5--
+xn--2sb866b.-5--; \u07DBჀ.-5--; [B1, B2, B3, V2, V3, V6]; xn--2sb866b.-5--; ; ; # ߛჀ.-5--
+\u07DBⴠ。-âµ--; \u07DBâ´ .-5--; [B1, B2, B3, V2, V3]; xn--2sb691q.-5--; ; ; # ߛⴠ.-5--
+≯?󠑕。ð¹·ð¹»â‰¯ð·’; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
+>\u0338?󠑕。ð¹·ð¹»>\u0338ð·’; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
+≯?󠑕。ð¹·ð¹»â‰¯ð·’; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
+>\u0338?󠑕。ð¹·ð¹»>\u0338ð·’; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
+xn--?-ogo25661n.xn--hdh8283gdoaqa; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
+≯?ó ‘•.xn--hdh8283gdoaqa; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
+>\u0338?ó ‘•.xn--hdh8283gdoaqa; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
+>\u0338?ó ‘•.XN--HDH8283GDOAQA; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
+≯?ó ‘•.XN--HDH8283GDOAQA; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
+≯?ó ‘•.Xn--Hdh8283gdoaqa; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
+>\u0338?ó ‘•.Xn--Hdh8283gdoaqa; ≯?ó ‘•.ð¹·ð¹»â‰¯ð·’; [B1, V6]; xn--?-ogo25661n.xn--hdh8283gdoaqa; ; ; # ≯?.ð¹·ð¹»â‰¯
+ã”\u08E6\u077C\u200D。\u0346ò³Šð…¶\u0604; ルーブル\u08E6\u077C\u200D.\u0346ò³Šð…¶\u0604; [B1, B5, B6, C2, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, V5, V6] # ルーブルࣦݼ.͆
+ルーブル\u08E6\u077C\u200D。\u0346ò³Šð…¶\u0604; ルーブル\u08E6\u077C\u200D.\u0346ò³Šð…¶\u0604; [B1, B5, B6, C2, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, V5, V6] # ルーブルࣦݼ.͆
+ルーフ\u3099ル\u08E6\u077C\u200D。\u0346ò³Šð…¶\u0604; ルーブル\u08E6\u077C\u200D.\u0346ò³Šð…¶\u0604; [B1, B5, B6, C2, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; [B1, B5, B6, V5, V6] # ルーブルࣦݼ.͆
+xn--dqb73el09fncab4h.xn--kua81ls548d3608b; ルーブル\u08E6\u077C.\u0346ò³Šð…¶\u0604; [B1, B5, B6, V5, V6]; xn--dqb73el09fncab4h.xn--kua81ls548d3608b; ; ; # ルーブルࣦݼ.͆
+xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ルーブル\u08E6\u077C\u200D.\u0346ò³Šð…¶\u0604; [B1, B5, B6, C2, V5, V6]; xn--dqb73ec22c9kp8cb1j.xn--kua81ls548d3608b; ; ; # ルーブルࣦݼ.͆
+\u200D.F; \u200D.f; [C2]; xn--1ug.f; ; .f; [A4_2] # .f
+\u200D.f; ; [C2]; xn--1ug.f; ; .f; [A4_2] # .f
.f; ; [X4_2]; ; [A4_2]; ; # .f
-xn--1ug.f; â€.f; [C2]; xn--1ug.f; ; ; # .f
+xn--1ug.f; \u200D.f; [C2]; xn--1ug.f; ; ; # .f
f; ; ; ; ; ; # f
-â€ã¨²ï½¡ÃŸ; â€ã¨².ß; [C2]; xn--1ug914h.xn--zca; ; xn--9bm.ss; [] # 㨲.ß
-â€ã¨²ã€‚ß; â€ã¨².ß; [C2]; xn--1ug914h.xn--zca; ; xn--9bm.ss; [] # 㨲.ß
-â€ã¨²ã€‚SS; â€ã¨².ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
-â€ã¨²ã€‚ss; â€ã¨².ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
-â€ã¨²ã€‚Ss; â€ã¨².ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
+\u200D㨲。ß; \u200D㨲.ß; [C2]; xn--1ug914h.xn--zca; ; xn--9bm.ss; [] # 㨲.ß
+\u200D㨲。ß; \u200D㨲.ß; [C2]; xn--1ug914h.xn--zca; ; xn--9bm.ss; [] # 㨲.ß
+\u200D㨲。SS; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
+\u200D㨲。ss; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
+\u200D㨲。Ss; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
xn--9bm.ss; 㨲.ss; ; xn--9bm.ss; ; ; # 㨲.ss
㨲.ss; ; ; xn--9bm.ss; ; ; # 㨲.ss
㨲.SS; 㨲.ss; ; xn--9bm.ss; ; ; # 㨲.ss
㨲.Ss; 㨲.ss; ; xn--9bm.ss; ; ; # 㨲.ss
-xn--1ug914h.ss; â€ã¨².ss; [C2]; xn--1ug914h.ss; ; ; # 㨲.ss
-xn--1ug914h.xn--zca; â€ã¨².ß; [C2]; xn--1ug914h.xn--zca; ; ; # 㨲.ß
-â€ã¨²ï½¡SS; â€ã¨².ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
-â€ã¨²ï½¡ss; â€ã¨².ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
-â€ã¨²ï½¡Ss; â€ã¨².ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
-؅پ。ࢨ; ؅پ.ࢨ; [B1, P1, V6]; xn--nfb6v.xn--xyb; ; ; # پ.ࢨ
-؅پ。ࢨ; ؅پ.ࢨ; [B1, P1, V6]; xn--nfb6v.xn--xyb; ; ; # پ.ࢨ
-xn--nfb6v.xn--xyb; ؅پ.ࢨ; [B1, V6]; xn--nfb6v.xn--xyb; ; ; # پ.ࢨ
-⾑ݓðž¤ã€‚ð¹µÚ‚; 襾ݓ𞤣.ð¹µÚ‚; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.ð¹µÚ‚
-襾ݓðž¤ã€‚ð¹µÚ‚; 襾ݓ𞤣.ð¹µÚ‚; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.ð¹µÚ‚
-襾ݓ𞤣。ð¹µÚ‚; 襾ݓ𞤣.ð¹µÚ‚; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.ð¹µÚ‚
-xn--6ob9577deqwl.xn--7ib5526k; 襾ݓ𞤣.ð¹µÚ‚; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.ð¹µÚ‚
-⾑ݓ𞤣。ð¹µÚ‚; 襾ݓ𞤣.ð¹µÚ‚; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.ð¹µÚ‚
-񦴻ς-⃫。ݔ-ꡛ; 񦴻ς-⃫.ݔ-ꡛ; [B2, B3, B6, P1, V6]; xn----xmb015tuo34l.xn----53c4874j; ; xn----zmb705tuo34l.xn----53c4874j; # ς-⃫.ݔ-ꡛ
-񦴻ς-⃫。ݔ-ꡛ; 񦴻ς-⃫.ݔ-ꡛ; [B2, B3, B6, P1, V6]; xn----xmb015tuo34l.xn----53c4874j; ; xn----zmb705tuo34l.xn----53c4874j; # ς-⃫.ݔ-ꡛ
-񦴻Σ-⃫。ݔ-ꡛ; 񦴻σ-⃫.ݔ-ꡛ; [B2, B3, B6, P1, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ
-񦴻σ-⃫。ݔ-ꡛ; 񦴻σ-⃫.ݔ-ꡛ; [B2, B3, B6, P1, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ
-xn----zmb705tuo34l.xn----53c4874j; 񦴻σ-⃫.ݔ-ꡛ; [B2, B3, B6, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ
-xn----xmb015tuo34l.xn----53c4874j; 񦴻ς-⃫.ݔ-ꡛ; [B2, B3, B6, V6]; xn----xmb015tuo34l.xn----53c4874j; ; ; # ς-⃫.ݔ-ꡛ
-񦴻Σ-⃫。ݔ-ꡛ; 񦴻σ-⃫.ݔ-ꡛ; [B2, B3, B6, P1, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ
-񦴻σ-⃫。ݔ-ꡛ; 񦴻σ-⃫.ݔ-ꡛ; [B2, B3, B6, P1, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ
-â€ï¼Žô€¸¨; â€.ô€¸¨; [C2, P1, V6]; xn--1ug.xn--h327f; ; .xn--h327f; [P1, V6, A4_2] # .
-â€.ô€¸¨; ; [C2, P1, V6]; xn--1ug.xn--h327f; ; .xn--h327f; [P1, V6, A4_2] # .
+xn--1ug914h.ss; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; ; # 㨲.ss
+xn--1ug914h.xn--zca; \u200D㨲.ß; [C2]; xn--1ug914h.xn--zca; ; ; # 㨲.ß
+\u200D㨲。SS; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
+\u200D㨲。ss; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
+\u200D㨲。Ss; \u200D㨲.ss; [C2]; xn--1ug914h.ss; ; xn--9bm.ss; [] # 㨲.ss
+\u0605\u067E。\u08A8; \u0605\u067E.\u08A8; [B1, V6]; xn--nfb6v.xn--xyb; ; ; # پ.ࢨ
+\u0605\u067E。\u08A8; \u0605\u067E.\u08A8; [B1, V6]; xn--nfb6v.xn--xyb; ; ; # پ.ࢨ
+xn--nfb6v.xn--xyb; \u0605\u067E.\u08A8; [B1, V6]; xn--nfb6v.xn--xyb; ; ; # پ.ࢨ
+⾑\u0753ðž¤ã€‚ð¹µ\u0682; 襾\u0753𞤣.ð¹µ\u0682; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.ð¹µÚ‚
+襾\u0753ðž¤ã€‚ð¹µ\u0682; 襾\u0753𞤣.ð¹µ\u0682; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.ð¹µÚ‚
+襾\u0753𞤣。ð¹µ\u0682; 襾\u0753𞤣.ð¹µ\u0682; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.ð¹µÚ‚
+xn--6ob9577deqwl.xn--7ib5526k; 襾\u0753𞤣.ð¹µ\u0682; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.ð¹µÚ‚
+⾑\u0753𞤣。ð¹µ\u0682; 襾\u0753𞤣.ð¹µ\u0682; [B1, B5, B6]; xn--6ob9577deqwl.xn--7ib5526k; ; ; # 襾ݓ𞤣.ð¹µÚ‚
+񦴻ς-\u20EB。\u0754-ꡛ; 񦴻ς-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----xmb015tuo34l.xn----53c4874j; ; xn----zmb705tuo34l.xn----53c4874j; # ς-⃫.ݔ-ꡛ
+񦴻ς-\u20EB。\u0754-ꡛ; 񦴻ς-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----xmb015tuo34l.xn----53c4874j; ; xn----zmb705tuo34l.xn----53c4874j; # ς-⃫.ݔ-ꡛ
+񦴻Σ-\u20EB。\u0754-ꡛ; 񦴻σ-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ
+񦴻σ-\u20EB。\u0754-ꡛ; 񦴻σ-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ
+xn----zmb705tuo34l.xn----53c4874j; 񦴻σ-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ
+xn----xmb015tuo34l.xn----53c4874j; 񦴻ς-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----xmb015tuo34l.xn----53c4874j; ; ; # ς-⃫.ݔ-ꡛ
+񦴻Σ-\u20EB。\u0754-ꡛ; 񦴻σ-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ
+񦴻σ-\u20EB。\u0754-ꡛ; 񦴻σ-\u20EB.\u0754-ꡛ; [B2, B3, B6, V6]; xn----zmb705tuo34l.xn----53c4874j; ; ; # σ-⃫.ݔ-ꡛ
+\u200D.􀸨; \u200D.􀸨; [C2, V6]; xn--1ug.xn--h327f; ; .xn--h327f; [V6, A4_2] # .
+\u200D.􀸨; ; [C2, V6]; xn--1ug.xn--h327f; ; .xn--h327f; [V6, A4_2] # .
.xn--h327f; .􀸨; [V6, X4_2]; .xn--h327f; [V6, A4_2]; ; # .
-xn--1ug.xn--h327f; â€.ô€¸¨; [C2, V6]; xn--1ug.xn--h327f; ; ; # .
-ñ£­»ñŒ¥ï½¡â‰ ðŸ²; ñ£­»ñŒ¥.≠6; [P1, V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6
-ñ£­»ñŒ¥ï½¡≠ðŸ²; ñ£­»ñŒ¥.≠6; [P1, V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6
-ñ£­»ñŒ¥ã€‚≠6; ñ£­»ñŒ¥.≠6; [P1, V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6
-ñ£­»ñŒ¥ã€‚≠6; ñ£­»ñŒ¥.≠6; [P1, V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6
+xn--1ug.xn--h327f; \u200D.􀸨; [C2, V6]; xn--1ug.xn--h327f; ; ; # .
+ñ£­»ñŒ¥ï½¡â‰ ðŸ²; ñ£­»ñŒ¥.≠6; [V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6
+ñ£­»ñŒ¥ï½¡=\u0338ðŸ²; ñ£­»ñŒ¥.≠6; [V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6
+ñ£­»ñŒ¥ã€‚≠6; ñ£­»ñŒ¥.≠6; [V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6
+ñ£­»ñŒ¥ã€‚=\u03386; ñ£­»ñŒ¥.≠6; [V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6
xn--h79w4z99a.xn--6-tfo; ñ£­»ñŒ¥.≠6; [V6]; xn--h79w4z99a.xn--6-tfo; ; ; # .≠6
-ó …Šá¡­â€.ð¥¡; á¡­â€.ð¥¡; [B6, C2, P1, V6]; xn--98e810b.xn--om9c; ; xn--98e.xn--om9c; [P1, V6] # á¡­.
+ó …Šá¡­\u200D.ð¥¡; á¡­\u200D.ð¥¡; [B6, C2, V6]; xn--98e810b.xn--om9c; ; xn--98e.xn--om9c; [V6] # á¡­.
xn--98e.xn--om9c; á¡­.ð¥¡; [V6]; xn--98e.xn--om9c; ; ; # á¡­.
-xn--98e810b.xn--om9c; á¡­â€.ð¥¡; [B6, C2, V6]; xn--98e810b.xn--om9c; ; ; # á¡­.
-ీࡕð¥›ð‘„´ï¼Žó­°µ; ీࡕð¥›ð‘„´.ó­°µ; [B1, P1, V5, V6]; xn--kwb91r5112avtg.xn--o580f; ; ; # ీࡕ𑄴.
-ీࡕð¥›ð‘„´.ó­°µ; ; [B1, P1, V5, V6]; xn--kwb91r5112avtg.xn--o580f; ; ; # ీࡕ𑄴.
-xn--kwb91r5112avtg.xn--o580f; ీࡕð¥›ð‘„´.ó­°µ; [B1, V5, V6]; xn--kwb91r5112avtg.xn--o580f; ; ; # ీࡕ𑄴.
-𞤮。𑇊‌≯᳦; 𞤮.𑇊‌≯᳦; [B1, C1, P1, V5, V6]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, P1, V5, V6] # 𞤮.𑇊≯᳦
-𞤮。𑇊‌≯᳦; 𞤮.𑇊‌≯᳦; [B1, C1, P1, V5, V6]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, P1, V5, V6] # 𞤮.𑇊≯᳦
-𞤌。𑇊‌≯᳦; 𞤮.𑇊‌≯᳦; [B1, C1, P1, V5, V6]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, P1, V5, V6] # 𞤮.𑇊≯᳦
-𞤌。𑇊‌≯᳦; 𞤮.𑇊‌≯᳦; [B1, C1, P1, V5, V6]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, P1, V5, V6] # 𞤮.𑇊≯᳦
-xn--me6h.xn--z6fz8ueq2v; 𞤮.𑇊≯᳦; [B1, V5, V6]; xn--me6h.xn--z6fz8ueq2v; ; ; # 𞤮.𑇊≯᳦
-xn--me6h.xn--z6f16kn9b2642b; 𞤮.𑇊‌≯᳦; [B1, C1, V5, V6]; xn--me6h.xn--z6f16kn9b2642b; ; ; # 𞤮.𑇊≯᳦
-ó „€ðŸ•.𞤌ñ›—“á‚©; 7.𞤮ñ›—“á‚©; [B1, B2, B3, P1, V6]; 7.xn--hnd3403vv1vv; ; ; # 7.𞤮Ⴉ
-󠄀7.𞤌񛗓Ⴉ; 7.𞤮񛗓Ⴉ; [B1, B2, B3, P1, V6]; 7.xn--hnd3403vv1vv; ; ; # 7.𞤮Ⴉ
-󠄀7.𞤮񛗓ⴉ; 7.𞤮񛗓ⴉ; [B1, B2, B3, P1, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ
+xn--98e810b.xn--om9c; á¡­\u200D.ð¥¡; [B6, C2, V6]; xn--98e810b.xn--om9c; ; ; # á¡­.
+\u0C40\u0855ð¥›ð‘„´ï¼Žó­°µ; \u0C40\u0855ð¥›ð‘„´.ó­°µ; [B1, V5, V6]; xn--kwb91r5112avtg.xn--o580f; ; ; # ీࡕ𑄴.
+\u0C40\u0855ð¥›ð‘„´.ó­°µ; ; [B1, V5, V6]; xn--kwb91r5112avtg.xn--o580f; ; ; # ీࡕ𑄴.
+xn--kwb91r5112avtg.xn--o580f; \u0C40\u0855ð¥›ð‘„´.ó­°µ; [B1, V5, V6]; xn--kwb91r5112avtg.xn--o580f; ; ; # ీࡕ𑄴.
+𞤮。𑇊\u200C≯\u1CE6; 𞤮.𑇊\u200C≯\u1CE6; [B1, C1, V5]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, V5] # 𞤮.𑇊≯᳦
+𞤮。𑇊\u200C>\u0338\u1CE6; 𞤮.𑇊\u200C≯\u1CE6; [B1, C1, V5]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, V5] # 𞤮.𑇊≯᳦
+𞤌。𑇊\u200C>\u0338\u1CE6; 𞤮.𑇊\u200C≯\u1CE6; [B1, C1, V5]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, V5] # 𞤮.𑇊≯᳦
+𞤌。𑇊\u200C≯\u1CE6; 𞤮.𑇊\u200C≯\u1CE6; [B1, C1, V5]; xn--me6h.xn--z6f16kn9b2642b; ; xn--me6h.xn--z6fz8ueq2v; [B1, V5] # 𞤮.𑇊≯᳦
+xn--me6h.xn--z6fz8ueq2v; 𞤮.𑇊≯\u1CE6; [B1, V5]; xn--me6h.xn--z6fz8ueq2v; ; ; # 𞤮.𑇊≯᳦
+xn--me6h.xn--z6f16kn9b2642b; 𞤮.𑇊\u200C≯\u1CE6; [B1, C1, V5]; xn--me6h.xn--z6f16kn9b2642b; ; ; # 𞤮.𑇊≯᳦
+ó „€ðŸ•.𞤌ñ›—“á‚©; 7.𞤮ñ›—“á‚©; [B1, B2, B3, V6]; 7.xn--hnd3403vv1vv; ; ; # 7.𞤮Ⴉ
+󠄀7.𞤌񛗓Ⴉ; 7.𞤮񛗓Ⴉ; [B1, B2, B3, V6]; 7.xn--hnd3403vv1vv; ; ; # 7.𞤮Ⴉ
+󠄀7.𞤮񛗓ⴉ; 7.𞤮񛗓ⴉ; [B1, B2, B3, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ
7.xn--0kjz523lv1vv; 7.𞤮񛗓ⴉ; [B1, B2, B3, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ
7.xn--hnd3403vv1vv; 7.𞤮񛗓Ⴉ; [B1, B2, B3, V6]; 7.xn--hnd3403vv1vv; ; ; # 7.𞤮Ⴉ
-ó „€ðŸ•.𞤮ñ›—“â´‰; 7.𞤮ñ›—“â´‰; [B1, B2, B3, P1, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ
-󠄀7.𞤌񛗓ⴉ; 7.𞤮񛗓ⴉ; [B1, B2, B3, P1, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ
-ó „€ðŸ•.𞤌ñ›—“â´‰; 7.𞤮ñ›—“â´‰; [B1, B2, B3, P1, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ
-é–ƒ9ð©ã€‚Ↄ٩ࢱà­; é–ƒ9ð©.Ↄ٩ࢱà­; [B5, B6, P1, V6]; xn--9-3j6dk517f.xn--iib28ij3c0t9a; ; ; # é–ƒ9ð©.Ↄ٩ࢱà­
-é–ƒ9ð©ã€‚ↄ٩ࢱà­; é–ƒ9ð©.ↄ٩ࢱà­; [B5, B6]; xn--9-3j6dk517f.xn--iib28ij3c4t9a; ; ; # é–ƒ9ð©.ↄ٩ࢱà­
-xn--9-3j6dk517f.xn--iib28ij3c4t9a; é–ƒ9ð©.ↄ٩ࢱà­; [B5, B6]; xn--9-3j6dk517f.xn--iib28ij3c4t9a; ; ; # é–ƒ9ð©.ↄ٩ࢱà­
-xn--9-3j6dk517f.xn--iib28ij3c0t9a; é–ƒ9ð©.Ↄ٩ࢱà­; [B5, B6, V6]; xn--9-3j6dk517f.xn--iib28ij3c0t9a; ; ; # é–ƒ9ð©.Ↄ٩ࢱà­
-꫶á¢à¸ºï¼’.ð‹¢Ý…ྟ︒; ꫶á¢à¸º2.ð‹¢Ý…ྟ︒; [P1, V5, V6]; xn--2-2zf840fk16m.xn--sob093bj62sz9d; ; ; # ꫶á¢à¸º2.ð‹¢Ý…ྟ︒
-꫶á¢à¸º2.ð‹¢Ý…ྟ。; ꫶á¢à¸º2.ð‹¢Ý…ྟ.; [V5]; xn--2-2zf840fk16m.xn--sob093b2m7s.; ; ; # ꫶á¢à¸º2.ð‹¢Ý…ྟ.
-xn--2-2zf840fk16m.xn--sob093b2m7s.; ꫶á¢à¸º2.ð‹¢Ý…ྟ.; [V5]; xn--2-2zf840fk16m.xn--sob093b2m7s.; ; ; # ꫶á¢à¸º2.ð‹¢Ý…ྟ.
-xn--2-2zf840fk16m.xn--sob093bj62sz9d; ꫶á¢à¸º2.ð‹¢Ý…ྟ︒; [V5, V6]; xn--2-2zf840fk16m.xn--sob093bj62sz9d; ; ; # ꫶á¢à¸º2.ð‹¢Ý…ྟ︒
-󅴧。≠-󠙄⾛; 󅴧.≠-󠙄走; [P1, V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走
-󅴧。≠-󠙄⾛; 󅴧.≠-󠙄走; [P1, V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走
-󅴧。≠-󠙄走; 󅴧.≠-󠙄走; [P1, V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走
-󅴧。≠-󠙄走; 󅴧.≠-󠙄走; [P1, V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走
+ó „€ðŸ•.𞤮ñ›—“â´‰; 7.𞤮ñ›—“â´‰; [B1, B2, B3, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ
+󠄀7.𞤌񛗓ⴉ; 7.𞤮񛗓ⴉ; [B1, B2, B3, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ
+ó „€ðŸ•.𞤌ñ›—“â´‰; 7.𞤮ñ›—“â´‰; [B1, B2, B3, V6]; 7.xn--0kjz523lv1vv; ; ; # 7.𞤮ⴉ
+é–ƒ9ð©ã€‚Ↄ\u0669\u08B1\u0B4D; é–ƒ9ð©.Ↄ\u0669\u08B1\u0B4D; [B5, B6, V6]; xn--9-3j6dk517f.xn--iib28ij3c0t9a; ; ; # é–ƒ9ð©.Ↄ٩ࢱà­
+é–ƒ9ð©ã€‚ↄ\u0669\u08B1\u0B4D; é–ƒ9ð©.ↄ\u0669\u08B1\u0B4D; [B5, B6]; xn--9-3j6dk517f.xn--iib28ij3c4t9a; ; ; # é–ƒ9ð©.ↄ٩ࢱà­
+xn--9-3j6dk517f.xn--iib28ij3c4t9a; é–ƒ9ð©.ↄ\u0669\u08B1\u0B4D; [B5, B6]; xn--9-3j6dk517f.xn--iib28ij3c4t9a; ; ; # é–ƒ9ð©.ↄ٩ࢱà­
+xn--9-3j6dk517f.xn--iib28ij3c0t9a; é–ƒ9ð©.Ↄ\u0669\u08B1\u0B4D; [B5, B6, V6]; xn--9-3j6dk517f.xn--iib28ij3c0t9a; ; ; # é–ƒ9ð©.Ↄ٩ࢱà­
+\uAAF6á¢\u0E3Aï¼’.ð‹¢\u0745\u0F9F︒; \uAAF6á¢\u0E3A2.ð‹¢\u0745\u0F9F︒; [V5, V6]; xn--2-2zf840fk16m.xn--sob093bj62sz9d; ; ; # ꫶á¢à¸º2.ð‹¢Ý…ྟ︒
+\uAAF6á¢\u0E3A2.ð‹¢\u0745\u0F9F。; \uAAF6á¢\u0E3A2.ð‹¢\u0745\u0F9F.; [V5]; xn--2-2zf840fk16m.xn--sob093b2m7s.; ; ; # ꫶á¢à¸º2.ð‹¢Ý…ྟ.
+xn--2-2zf840fk16m.xn--sob093b2m7s.; \uAAF6á¢\u0E3A2.ð‹¢\u0745\u0F9F.; [V5]; xn--2-2zf840fk16m.xn--sob093b2m7s.; ; ; # ꫶á¢à¸º2.ð‹¢Ý…ྟ.
+xn--2-2zf840fk16m.xn--sob093bj62sz9d; \uAAF6á¢\u0E3A2.ð‹¢\u0745\u0F9F︒; [V5, V6]; xn--2-2zf840fk16m.xn--sob093bj62sz9d; ; ; # ꫶á¢à¸º2.ð‹¢Ý…ྟ︒
+󅴧。≠-󠙄⾛; 󅴧.≠-󠙄走; [V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走
+󅴧。=\u0338-󠙄⾛; 󅴧.≠-󠙄走; [V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走
+󅴧。≠-󠙄走; 󅴧.≠-󠙄走; [V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走
+󅴧。=\u0338-󠙄走; 󅴧.≠-󠙄走; [V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走
xn--gm57d.xn----tfo4949b3664m; 󅴧.≠-󠙄走; [V6]; xn--gm57d.xn----tfo4949b3664m; ; ; # .≠-走
-ݮ؄Ⴊ。-≠ᅠ; ݮ؄Ⴊ.-≠ᅠ; [B1, B2, B3, P1, V3, V6]; xn--mfb73ex6r.xn----5bh589i; ; ; # ݮႪ.-≠
-ݮ؄Ⴊ。-≠ᅠ; ݮ؄Ⴊ.-≠ᅠ; [B1, B2, B3, P1, V3, V6]; xn--mfb73ex6r.xn----5bh589i; ; ; # ݮႪ.-≠
-ݮ؄ⴊ。-≠ᅠ; ݮ؄ⴊ.-≠ᅠ; [B1, B2, B3, P1, V3, V6]; xn--mfb73ek93f.xn----5bh589i; ; ; # ݮⴊ.-≠
-ݮ؄ⴊ。-≠ᅠ; ݮ؄ⴊ.-≠ᅠ; [B1, B2, B3, P1, V3, V6]; xn--mfb73ek93f.xn----5bh589i; ; ; # ݮⴊ.-≠
-xn--mfb73ek93f.xn----5bh589i; ݮ؄ⴊ.-≠ᅠ; [B1, B2, B3, V3, V6]; xn--mfb73ek93f.xn----5bh589i; ; ; # ݮⴊ.-≠
-xn--mfb73ex6r.xn----5bh589i; ݮ؄Ⴊ.-≠ᅠ; [B1, B2, B3, V3, V6]; xn--mfb73ex6r.xn----5bh589i; ; ; # ݮႪ.-≠
-ï­ð¹§ðŸ’≯。‌; ×לð¹§4≯.‌; [B1, B3, B4, C1, P1, V6]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4, P1, V6] # ×לð¹§4≯.
-ï­ð¹§ðŸ’≯。‌; ×לð¹§4≯.‌; [B1, B3, B4, C1, P1, V6]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4, P1, V6] # ×לð¹§4≯.
-×לð¹§4≯。‌; ×לð¹§4≯.‌; [B1, B3, B4, C1, P1, V6]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4, P1, V6] # ×לð¹§4≯.
-×לð¹§4≯。‌; ×לð¹§4≯.‌; [B1, B3, B4, C1, P1, V6]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4, P1, V6] # ×לð¹§4≯.
-xn--4-zhc0by36txt0w.; ×לð¹§4≯.; [B3, B4, V6]; xn--4-zhc0by36txt0w.; ; ; # ×לð¹§4≯.
-xn--4-zhc0by36txt0w.xn--0ug; ×לð¹§4≯.‌; [B1, B3, B4, C1, V6]; xn--4-zhc0by36txt0w.xn--0ug; ; ; # ×לð¹§4≯.
+\u076E\u0604Ⴊ。-≠\u1160; \u076E\u0604Ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ex6r.xn----5bh589i; ; ; # ݮႪ.-≠
+\u076E\u0604Ⴊ。-=\u0338\u1160; \u076E\u0604Ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ex6r.xn----5bh589i; ; ; # ݮႪ.-≠
+\u076E\u0604ⴊ。-=\u0338\u1160; \u076E\u0604ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ek93f.xn----5bh589i; ; ; # ݮⴊ.-≠
+\u076E\u0604ⴊ。-≠\u1160; \u076E\u0604ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ek93f.xn----5bh589i; ; ; # ݮⴊ.-≠
+xn--mfb73ek93f.xn----5bh589i; \u076E\u0604ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ek93f.xn----5bh589i; ; ; # ݮⴊ.-≠
+xn--mfb73ex6r.xn----5bh589i; \u076E\u0604Ⴊ.-≠\u1160; [B1, B2, B3, V3, V6]; xn--mfb73ex6r.xn----5bh589i; ; ; # ݮႪ.-≠
+\uFB4Fð¹§ðŸ’≯。\u200C; \u05D0\u05DCð¹§4≯.\u200C; [B1, B3, B4, C1]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4] # ×לð¹§4≯.
+\uFB4Fð¹§ðŸ’>\u0338。\u200C; \u05D0\u05DCð¹§4≯.\u200C; [B1, B3, B4, C1]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4] # ×לð¹§4≯.
+\u05D0\u05DCð¹§4≯。\u200C; \u05D0\u05DCð¹§4≯.\u200C; [B1, B3, B4, C1]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4] # ×לð¹§4≯.
+\u05D0\u05DCð¹§4>\u0338。\u200C; \u05D0\u05DCð¹§4≯.\u200C; [B1, B3, B4, C1]; xn--4-zhc0by36txt0w.xn--0ug; ; xn--4-zhc0by36txt0w.; [B3, B4] # ×לð¹§4≯.
+xn--4-zhc0by36txt0w.; \u05D0\u05DCð¹§4≯.; [B3, B4]; xn--4-zhc0by36txt0w.; ; ; # ×לð¹§4≯.
+xn--4-zhc0by36txt0w.xn--0ug; \u05D0\u05DCð¹§4≯.\u200C; [B1, B3, B4, C1]; xn--4-zhc0by36txt0w.xn--0ug; ; ; # ×לð¹§4≯.
ðŸŽã€‚甯; 0.甯; ; 0.xn--qny; ; ; # 0.甯
0。甯; 0.甯; ; 0.xn--qny; ; ; # 0.甯
0.xn--qny; 0.甯; ; 0.xn--qny; ; ; # 0.甯
0.甯; ; ; 0.xn--qny; ; ; # 0.甯
--⾆.꫶; -舌.꫶; [V3, V5]; xn----ef8c.xn--2v9a; ; ; # -舌.꫶
--舌.꫶; ; [V3, V5]; xn----ef8c.xn--2v9a; ; ; # -舌.꫶
-xn----ef8c.xn--2v9a; -舌.꫶; [V3, V5]; xn----ef8c.xn--2v9a; ; ; # -舌.꫶
+-⾆.\uAAF6; -舌.\uAAF6; [V3, V5]; xn----ef8c.xn--2v9a; ; ; # -舌.꫶
+-舌.\uAAF6; ; [V3, V5]; xn----ef8c.xn--2v9a; ; ; # -舌.꫶
+xn----ef8c.xn--2v9a; -舌.\uAAF6; [V3, V5]; xn----ef8c.xn--2v9a; ; ; # -舌.꫶
-。ᢘ; -.ᢘ; [V3]; -.xn--ibf; ; ; # -.ᢘ
-。ᢘ; -.ᢘ; [V3]; -.xn--ibf; ; ; # -.ᢘ
-.xn--ibf; -.ᢘ; [V3]; -.xn--ibf; ; ; # -.ᢘ
-🂴Ⴋ.≮; ; [P1, V6]; xn--jnd1986v.xn--gdh; ; ; # 🂴Ⴋ.≮
-🂴Ⴋ.≮; 🂴Ⴋ.≮; [P1, V6]; xn--jnd1986v.xn--gdh; ; ; # 🂴Ⴋ.≮
-🂴ⴋ.≮; 🂴ⴋ.≮; [P1, V6]; xn--2kj7565l.xn--gdh; ; ; # 🂴ⴋ.≮
-🂴ⴋ.≮; ; [P1, V6]; xn--2kj7565l.xn--gdh; ; ; # 🂴ⴋ.≮
-xn--2kj7565l.xn--gdh; 🂴ⴋ.≮; [V6]; xn--2kj7565l.xn--gdh; ; ; # 🂴ⴋ.≮
+🂴Ⴋ.≮; ; [V6]; xn--jnd1986v.xn--gdh; ; ; # 🂴Ⴋ.≮
+🂴Ⴋ.<\u0338; 🂴Ⴋ.≮; [V6]; xn--jnd1986v.xn--gdh; ; ; # 🂴Ⴋ.≮
+🂴ⴋ.<\u0338; 🂴ⴋ.≮; ; xn--2kj7565l.xn--gdh; ; ; # 🂴ⴋ.≮
+🂴ⴋ.≮; ; ; xn--2kj7565l.xn--gdh; ; ; # 🂴ⴋ.≮
+xn--2kj7565l.xn--gdh; 🂴ⴋ.≮; ; xn--2kj7565l.xn--gdh; ; ; # 🂴ⴋ.≮
xn--jnd1986v.xn--gdh; 🂴Ⴋ.≮; [V6]; xn--jnd1986v.xn--gdh; ; ; # 🂴Ⴋ.≮
-ç’¼ð¨­ï½¡â€Œó ‡Ÿ; ç’¼ð¨­.‌; [C1]; xn--gky8837e.xn--0ug; ; xn--gky8837e.; [] # ç’¼ð¨­.
-ç’¼ð¨­ã€‚‌󠇟; ç’¼ð¨­.‌; [C1]; xn--gky8837e.xn--0ug; ; xn--gky8837e.; [] # ç’¼ð¨­.
+ç’¼ð¨­ï½¡\u200C󠇟; ç’¼ð¨­.\u200C; [C1]; xn--gky8837e.xn--0ug; ; xn--gky8837e.; [] # ç’¼ð¨­.
+ç’¼ð¨­ã€‚\u200C󠇟; ç’¼ð¨­.\u200C; [C1]; xn--gky8837e.xn--0ug; ; xn--gky8837e.; [] # ç’¼ð¨­.
xn--gky8837e.; ç’¼ð¨­.; ; xn--gky8837e.; ; ; # ç’¼ð¨­.
ç’¼ð¨­.; ; ; xn--gky8837e.; ; ; # ç’¼ð¨­.
-xn--gky8837e.xn--0ug; ç’¼ð¨­.‌; [C1]; xn--gky8837e.xn--0ug; ; ; # ç’¼ð¨­.
-Ù©8ñ‚½ï½¡-5🞥; Ù©8ñ‚½.-5🞥; [B1, P1, V3, V6]; xn--8-qqc97891f.xn---5-rp92a; ; ; # Ù©8.-5🞥
-Ù©8ñ‚½ã€‚-5🞥; Ù©8ñ‚½.-5🞥; [B1, P1, V3, V6]; xn--8-qqc97891f.xn---5-rp92a; ; ; # Ù©8.-5🞥
-xn--8-qqc97891f.xn---5-rp92a; Ù©8ñ‚½.-5🞥; [B1, V3, V6]; xn--8-qqc97891f.xn---5-rp92a; ; ; # Ù©8.-5🞥
-‌.‌; ; [C1]; xn--0ug.xn--0ug; ; .; [A4_2] # .
-xn--0ug.xn--0ug; ‌.‌; [C1]; xn--0ug.xn--0ug; ; ; # .
-â€íŠ›.Ü–; ; [B1, C2]; xn--1ug4441e.xn--gnb; ; xn--157b.xn--gnb; [] # 튛.Ü–
-â€á„ᅱᇂ.Ü–; â€íŠ›.Ü–; [B1, C2]; xn--1ug4441e.xn--gnb; ; xn--157b.xn--gnb; [] # 튛.Ü–
-xn--157b.xn--gnb; 튛.ܖ; ; xn--157b.xn--gnb; ; ; # 튛.ܖ
-튛.ܖ; ; ; xn--157b.xn--gnb; ; ; # 튛.ܖ
-á„ᅱᇂ.Ü–; 튛.Ü–; ; xn--157b.xn--gnb; ; ; # 튛.Ü–
-xn--1ug4441e.xn--gnb; â€íŠ›.Ü–; [B1, C2]; xn--1ug4441e.xn--gnb; ; ; # 튛.Ü–
-á¡‹ð¹°ðž½³.ݹⴞ; ; [B2, B3, B5, B6, P1, V6]; xn--b8e0417jocvf.xn--9pb883q; ; ; # á¡‹ð¹°.ݹⴞ
-á¡‹ð¹°ðž½³.ݹႾ; ; [B2, B3, B5, B6, P1, V6]; xn--b8e0417jocvf.xn--9pb068b; ; ; # á¡‹ð¹°.ݹႾ
-xn--b8e0417jocvf.xn--9pb068b; á¡‹ð¹°ðž½³.ݹႾ; [B2, B3, B5, B6, V6]; xn--b8e0417jocvf.xn--9pb068b; ; ; # á¡‹ð¹°.ݹႾ
-xn--b8e0417jocvf.xn--9pb883q; á¡‹ð¹°ðž½³.ݹⴞ; [B2, B3, B5, B6, V6]; xn--b8e0417jocvf.xn--9pb883q; ; ; # á¡‹ð¹°.ݹⴞ
-ð·ƒÙ¢ð…»ðŸ§ï¼Žð¹®ð¹¬á‚§; ð·ƒÙ¢ð…»5.ð¹®ð¹¬á‚§; [B1, B4, P1, V6]; xn--5-cqc8833rhv7f.xn--fnd3401kfa; ; ; # Ù¢ð…»5.ð¹®ð¹¬á‚§
-ð·ƒÙ¢ð…»5.ð¹®ð¹¬á‚§; ; [B1, B4, P1, V6]; xn--5-cqc8833rhv7f.xn--fnd3401kfa; ; ; # Ù¢ð…»5.ð¹®ð¹¬á‚§
-ð·ƒÙ¢ð…»5.ð¹®ð¹¬â´‡; ; [B1, B4, P1, V6]; xn--5-cqc8833rhv7f.xn--ykjz523efa; ; ; # Ù¢ð…»5.ð¹®ð¹¬â´‡
-xn--5-cqc8833rhv7f.xn--ykjz523efa; ð·ƒÙ¢ð…»5.ð¹®ð¹¬â´‡; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--ykjz523efa; ; ; # Ù¢ð…»5.ð¹®ð¹¬â´‡
-xn--5-cqc8833rhv7f.xn--fnd3401kfa; ð·ƒÙ¢ð…»5.ð¹®ð¹¬á‚§; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--fnd3401kfa; ; ; # Ù¢ð…»5.ð¹®ð¹¬á‚§
-ð·ƒÙ¢ð…»ðŸ§ï¼Žð¹®ð¹¬â´‡; ð·ƒÙ¢ð…»5.ð¹®ð¹¬â´‡; [B1, B4, P1, V6]; xn--5-cqc8833rhv7f.xn--ykjz523efa; ; ; # Ù¢ð…»5.ð¹®ð¹¬â´‡
-Ⴗ.𑄴ׂꦷ񘃨; Ⴗ.𑄴ׂꦷ񘃨; [P1, V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ
-Ⴗ.𑄴ׂꦷ񘃨; Ⴗ.𑄴ׂꦷ񘃨; [P1, V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ
-Ⴗ.𑄴ׂꦷ񘃨; ; [P1, V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ
-ⴗ.𑄴ׂꦷ񘃨; ; [P1, V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ
-xn--flj.xn--qdb0605f14ycrms3c; ⴗ.𑄴ׂꦷ񘃨; [V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ
-xn--vnd.xn--qdb0605f14ycrms3c; Ⴗ.𑄴ׂꦷ񘃨; [V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ
-ⴗ.𑄴ׂꦷ񘃨; ⴗ.𑄴ׂꦷ񘃨; [P1, V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ
-ⴗ.𑄴ׂꦷ񘃨; ⴗ.𑄴ׂꦷ񘃨; [P1, V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ
-ðŸ¾ð¾¤˜ï¼Žò‡•›Ù¬; 8𾤘.ò‡•›Ù¬; [B1, B5, B6, P1, V6]; xn--8-kh23b.xn--lib78461i; ; ; # 8.Ù¬
-8𾤘.򇕛٬; ; [B1, B5, B6, P1, V6]; xn--8-kh23b.xn--lib78461i; ; ; # 8.٬
-xn--8-kh23b.xn--lib78461i; 8𾤘.򇕛٬; [B1, B5, B6, V6]; xn--8-kh23b.xn--lib78461i; ; ; # 8.٬
-⒈酫︒。ࣖ; ⒈酫︒.ࣖ; [P1, V5, V6]; xn--tsh4490bfe8c.xn--8zb; ; ; # ⒈酫︒.ࣖ
-1.酫。。ࣖ; 1.酫..ࣖ; [V5, X4_2]; 1.xn--8j4a..xn--8zb; [V5, A4_2]; ; # 1.酫..ࣖ
-1.xn--8j4a..xn--8zb; 1.酫..ࣖ; [V5, X4_2]; 1.xn--8j4a..xn--8zb; [V5, A4_2]; ; # 1.酫..ࣖ
-xn--tsh4490bfe8c.xn--8zb; ⒈酫︒.ࣖ; [V5, V6]; xn--tsh4490bfe8c.xn--8zb; ; ; # ⒈酫︒.ࣖ
-ⷣ‌≮ᩫ.‌ฺ; ; [C1, P1, V5, V6]; xn--uof63xk4bf3s.xn--o4c732g; ; xn--uof548an0j.xn--o4c; [P1, V5, V6] # ⷣ≮ᩫ.ฺ
-ⷣ‌≮ᩫ.‌ฺ; ⷣ‌≮ᩫ.‌ฺ; [C1, P1, V5, V6]; xn--uof63xk4bf3s.xn--o4c732g; ; xn--uof548an0j.xn--o4c; [P1, V5, V6] # ⷣ≮ᩫ.ฺ
-xn--uof548an0j.xn--o4c; ⷣ≮ᩫ.ฺ; [V5, V6]; xn--uof548an0j.xn--o4c; ; ; # ⷣ≮ᩫ.ฺ
-xn--uof63xk4bf3s.xn--o4c732g; ⷣ‌≮ᩫ.‌ฺ; [C1, V5, V6]; xn--uof63xk4bf3s.xn--o4c732g; ; ; # ⷣ≮ᩫ.ฺ
-𞪂。ႷႽ¹â€; 𞪂.ႷႽ1â€; [B6, C2, P1, V6]; xn--co6h.xn--1-h1gs597m; ; xn--co6h.xn--1-h1gs; [P1, V6] # .ႷႽ1
-𞪂。ႷႽ1â€; 𞪂.ႷႽ1â€; [B6, C2, P1, V6]; xn--co6h.xn--1-h1gs597m; ; xn--co6h.xn--1-h1gs; [P1, V6] # .ႷႽ1
-𞪂。ⴗâ´1â€; 𞪂.â´—â´1â€; [B6, C2, P1, V6]; xn--co6h.xn--1-ugn710dya; ; xn--co6h.xn--1-kwssa; [P1, V6] # .â´—â´1
-𞪂。Ⴗâ´1â€; 𞪂.á‚·â´1â€; [B6, C2, P1, V6]; xn--co6h.xn--1-h1g398iewm; ; xn--co6h.xn--1-h1g429s; [P1, V6] # .á‚·â´1
+xn--gky8837e.xn--0ug; ç’¼ð¨­.\u200C; [C1]; xn--gky8837e.xn--0ug; ; ; # ç’¼ð¨­.
+\u06698ñ‚½ï½¡-5🞥; \u06698ñ‚½.-5🞥; [B1, V3, V6]; xn--8-qqc97891f.xn---5-rp92a; ; ; # Ù©8.-5🞥
+\u06698ñ‚½ã€‚-5🞥; \u06698ñ‚½.-5🞥; [B1, V3, V6]; xn--8-qqc97891f.xn---5-rp92a; ; ; # Ù©8.-5🞥
+xn--8-qqc97891f.xn---5-rp92a; \u06698ñ‚½.-5🞥; [B1, V3, V6]; xn--8-qqc97891f.xn---5-rp92a; ; ; # Ù©8.-5🞥
+\u200C.\u200C; ; [C1]; xn--0ug.xn--0ug; ; .; [A4_2] # .
+xn--0ug.xn--0ug; \u200C.\u200C; [C1]; xn--0ug.xn--0ug; ; ; # .
+\u200D튛.\u0716; ; [B1, C2]; xn--1ug4441e.xn--gnb; ; xn--157b.xn--gnb; [] # 튛.ܖ
+\u200Dá„ᅱᇂ.\u0716; \u200D튛.\u0716; [B1, C2]; xn--1ug4441e.xn--gnb; ; xn--157b.xn--gnb; [] # 튛.Ü–
+xn--157b.xn--gnb; 튛.\u0716; ; xn--157b.xn--gnb; ; ; # 튛.ܖ
+튛.\u0716; ; ; xn--157b.xn--gnb; ; ; # 튛.ܖ
+á„ᅱᇂ.\u0716; 튛.\u0716; ; xn--157b.xn--gnb; ; ; # 튛.Ü–
+xn--1ug4441e.xn--gnb; \u200D튛.\u0716; [B1, C2]; xn--1ug4441e.xn--gnb; ; ; # 튛.ܖ
+á¡‹ð¹°ðž½³.\u0779â´ž; ; [B2, B3, B5, B6, V6]; xn--b8e0417jocvf.xn--9pb883q; ; ; # á¡‹ð¹°.ݹⴞ
+á¡‹ð¹°ðž½³.\u0779Ⴞ; ; [B2, B3, B5, B6, V6]; xn--b8e0417jocvf.xn--9pb068b; ; ; # á¡‹ð¹°.ݹႾ
+xn--b8e0417jocvf.xn--9pb068b; á¡‹ð¹°ðž½³.\u0779Ⴞ; [B2, B3, B5, B6, V6]; xn--b8e0417jocvf.xn--9pb068b; ; ; # á¡‹ð¹°.ݹႾ
+xn--b8e0417jocvf.xn--9pb883q; á¡‹ð¹°ðž½³.\u0779â´ž; [B2, B3, B5, B6, V6]; xn--b8e0417jocvf.xn--9pb883q; ; ; # á¡‹ð¹°.ݹⴞ
+ð·ƒ\u0662ð…»ðŸ§ï¼Žð¹®ð¹¬á‚§; ð·ƒ\u0662ð…»5.ð¹®ð¹¬á‚§; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--fnd3401kfa; ; ; # Ù¢ð…»5.ð¹®ð¹¬á‚§
+ð·ƒ\u0662ð…»5.ð¹®ð¹¬á‚§; ; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--fnd3401kfa; ; ; # Ù¢ð…»5.ð¹®ð¹¬á‚§
+ð·ƒ\u0662ð…»5.ð¹®ð¹¬â´‡; ; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--ykjz523efa; ; ; # Ù¢ð…»5.ð¹®ð¹¬â´‡
+xn--5-cqc8833rhv7f.xn--ykjz523efa; ð·ƒ\u0662ð…»5.ð¹®ð¹¬â´‡; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--ykjz523efa; ; ; # Ù¢ð…»5.ð¹®ð¹¬â´‡
+xn--5-cqc8833rhv7f.xn--fnd3401kfa; ð·ƒ\u0662ð…»5.ð¹®ð¹¬á‚§; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--fnd3401kfa; ; ; # Ù¢ð…»5.ð¹®ð¹¬á‚§
+ð·ƒ\u0662ð…»ðŸ§ï¼Žð¹®ð¹¬â´‡; ð·ƒ\u0662ð…»5.ð¹®ð¹¬â´‡; [B1, B4, V6]; xn--5-cqc8833rhv7f.xn--ykjz523efa; ; ; # Ù¢ð…»5.ð¹®ð¹¬â´‡
+Ⴗ.\u05C2𑄴\uA9B7񘃨; Ⴗ.𑄴\u05C2\uA9B7񘃨; [V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ
+Ⴗ.𑄴\u05C2\uA9B7񘃨; Ⴗ.𑄴\u05C2\uA9B7񘃨; [V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ
+Ⴗ.𑄴\u05C2\uA9B7񘃨; ; [V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ
+ⴗ.𑄴\u05C2\uA9B7񘃨; ; [V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ
+xn--flj.xn--qdb0605f14ycrms3c; ⴗ.𑄴\u05C2\uA9B7񘃨; [V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ
+xn--vnd.xn--qdb0605f14ycrms3c; Ⴗ.𑄴\u05C2\uA9B7񘃨; [V5, V6]; xn--vnd.xn--qdb0605f14ycrms3c; ; ; # Ⴗ.𑄴ׂꦷ
+ⴗ.𑄴\u05C2\uA9B7񘃨; ⴗ.𑄴\u05C2\uA9B7񘃨; [V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ
+ⴗ.\u05C2𑄴\uA9B7񘃨; ⴗ.𑄴\u05C2\uA9B7񘃨; [V5, V6]; xn--flj.xn--qdb0605f14ycrms3c; ; ; # ⴗ.𑄴ׂꦷ
+ðŸ¾ð¾¤˜ï¼Žò‡•›\u066C; 8𾤘.ò‡•›\u066C; [B1, B5, B6, V6]; xn--8-kh23b.xn--lib78461i; ; ; # 8.Ù¬
+8𾤘.򇕛\u066C; ; [B1, B5, B6, V6]; xn--8-kh23b.xn--lib78461i; ; ; # 8.٬
+xn--8-kh23b.xn--lib78461i; 8𾤘.򇕛\u066C; [B1, B5, B6, V6]; xn--8-kh23b.xn--lib78461i; ; ; # 8.٬
+⒈酫︒。\u08D6; ⒈酫︒.\u08D6; [V5, V6]; xn--tsh4490bfe8c.xn--8zb; ; ; # ⒈酫︒.ࣖ
+1.酫。。\u08D6; 1.酫..\u08D6; [V5, X4_2]; 1.xn--8j4a..xn--8zb; [V5, A4_2]; ; # 1.酫..ࣖ
+1.xn--8j4a..xn--8zb; 1.酫..\u08D6; [V5, X4_2]; 1.xn--8j4a..xn--8zb; [V5, A4_2]; ; # 1.酫..ࣖ
+xn--tsh4490bfe8c.xn--8zb; ⒈酫︒.\u08D6; [V5, V6]; xn--tsh4490bfe8c.xn--8zb; ; ; # ⒈酫︒.ࣖ
+\u2DE3\u200C≮\u1A6B.\u200C\u0E3A; ; [C1, V5]; xn--uof63xk4bf3s.xn--o4c732g; ; xn--uof548an0j.xn--o4c; [V5] # ⷣ≮ᩫ.ฺ
+\u2DE3\u200C<\u0338\u1A6B.\u200C\u0E3A; \u2DE3\u200C≮\u1A6B.\u200C\u0E3A; [C1, V5]; xn--uof63xk4bf3s.xn--o4c732g; ; xn--uof548an0j.xn--o4c; [V5] # ⷣ≮ᩫ.ฺ
+xn--uof548an0j.xn--o4c; \u2DE3≮\u1A6B.\u0E3A; [V5]; xn--uof548an0j.xn--o4c; ; ; # ⷣ≮ᩫ.ฺ
+xn--uof63xk4bf3s.xn--o4c732g; \u2DE3\u200C≮\u1A6B.\u200C\u0E3A; [C1, V5]; xn--uof63xk4bf3s.xn--o4c732g; ; ; # ⷣ≮ᩫ.ฺ
+𞪂。ႷႽ¹\u200D; 𞪂.ႷႽ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1gs597m; ; xn--co6h.xn--1-h1gs; [V6] # .ႷႽ1
+𞪂。ႷႽ1\u200D; 𞪂.ႷႽ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1gs597m; ; xn--co6h.xn--1-h1gs; [V6] # .ႷႽ1
+𞪂。ⴗâ´1\u200D; 𞪂.â´—â´1\u200D; [B6, C2, V6]; xn--co6h.xn--1-ugn710dya; ; xn--co6h.xn--1-kwssa; [V6] # .â´—â´1
+𞪂。Ⴗâ´1\u200D; 𞪂.á‚·â´1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1g398iewm; ; xn--co6h.xn--1-h1g429s; [V6] # .á‚·â´1
xn--co6h.xn--1-h1g429s; 𞪂.á‚·â´1; [V6]; xn--co6h.xn--1-h1g429s; ; ; # .á‚·â´1
-xn--co6h.xn--1-h1g398iewm; 𞪂.á‚·â´1â€; [B6, C2, V6]; xn--co6h.xn--1-h1g398iewm; ; ; # .á‚·â´1
+xn--co6h.xn--1-h1g398iewm; 𞪂.á‚·â´1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1g398iewm; ; ; # .á‚·â´1
xn--co6h.xn--1-kwssa; 𞪂.â´—â´1; [V6]; xn--co6h.xn--1-kwssa; ; ; # .â´—â´1
-xn--co6h.xn--1-ugn710dya; 𞪂.â´—â´1â€; [B6, C2, V6]; xn--co6h.xn--1-ugn710dya; ; ; # .â´—â´1
+xn--co6h.xn--1-ugn710dya; 𞪂.â´—â´1\u200D; [B6, C2, V6]; xn--co6h.xn--1-ugn710dya; ; ; # .â´—â´1
xn--co6h.xn--1-h1gs; 𞪂.ႷႽ1; [V6]; xn--co6h.xn--1-h1gs; ; ; # .ႷႽ1
-xn--co6h.xn--1-h1gs597m; 𞪂.ႷႽ1â€; [B6, C2, V6]; xn--co6h.xn--1-h1gs597m; ; ; # .ႷႽ1
-𞪂。ⴗâ´Â¹â€; 𞪂.â´—â´1â€; [B6, C2, P1, V6]; xn--co6h.xn--1-ugn710dya; ; xn--co6h.xn--1-kwssa; [P1, V6] # .â´—â´1
-𞪂。Ⴗâ´Â¹â€; 𞪂.á‚·â´1â€; [B6, C2, P1, V6]; xn--co6h.xn--1-h1g398iewm; ; xn--co6h.xn--1-h1g429s; [P1, V6] # .á‚·â´1
-𑄴𑄳2.𞳿󠀳-; ; [B1, B3, P1, V3, V5, V6]; xn--2-h87ic.xn----s39r33498d; ; ; # 𑄴𑄳2.-
+xn--co6h.xn--1-h1gs597m; 𞪂.ႷႽ1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1gs597m; ; ; # .ႷႽ1
+𞪂。ⴗâ´Â¹\u200D; 𞪂.â´—â´1\u200D; [B6, C2, V6]; xn--co6h.xn--1-ugn710dya; ; xn--co6h.xn--1-kwssa; [V6] # .â´—â´1
+𞪂。Ⴗâ´Â¹\u200D; 𞪂.á‚·â´1\u200D; [B6, C2, V6]; xn--co6h.xn--1-h1g398iewm; ; xn--co6h.xn--1-h1g429s; [V6] # .á‚·â´1
+𑄴𑄳2.𞳿󠀳-; ; [B1, B3, V3, V5, V6]; xn--2-h87ic.xn----s39r33498d; ; ; # 𑄴𑄳2.-
xn--2-h87ic.xn----s39r33498d; 𑄴𑄳2.𞳿󠀳-; [B1, B3, V3, V5, V6]; xn--2-h87ic.xn----s39r33498d; ; ; # 𑄴𑄳2.-
-󠕲󟶶٥。ñ€ð‘„³ðž¤ƒÜ; 󠕲󟶶٥.ñ€ð‘„³ðž¤¥Ü; [B1, B5, B6, P1, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # Ù¥.𑄳𞤥Ü
-󠕲󟶶٥。ñ€ð‘„³ðž¤ƒÜ; 󠕲󟶶٥.ñ€ð‘„³ðž¤¥Ü; [B1, B5, B6, P1, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # Ù¥.𑄳𞤥Ü
-󠕲󟶶٥。ñ€ð‘„³ðž¤¥Ü; 󠕲󟶶٥.ñ€ð‘„³ðž¤¥Ü; [B1, B5, B6, P1, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # Ù¥.𑄳𞤥Ü
-xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; 󠕲󟶶٥.ñ€ð‘„³ðž¤¥Ü; [B1, B5, B6, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # Ù¥.𑄳𞤥Ü
-󠕲󟶶٥。ñ€ð‘„³ðž¤¥Ü; 󠕲󟶶٥.ñ€ð‘„³ðž¤¥Ü; [B1, B5, B6, P1, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # Ù¥.𑄳𞤥Ü
-Ü ò² ½ð¹¢áž»ï½¡Ï‚ᢈðŸ­â€Œ; Ü ò² ½ð¹¢áž».ςᢈðŸ­â€Œ; [B2, B6, C1, P1, V6]; xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, P1, V6] # Ü ð¹¢áž».ςᢈðŸ­
-Ü ò² ½ð¹¢áž»ã€‚ςᢈðŸ­â€Œ; Ü ò² ½ð¹¢áž».ςᢈðŸ­â€Œ; [B2, B6, C1, P1, V6]; xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, P1, V6] # Ü ð¹¢áž».ςᢈðŸ­
-Ü ò² ½ð¹¢áž»ã€‚ΣᢈðŸ­â€Œ; Ü ò² ½ð¹¢áž».σᢈðŸ­â€Œ; [B2, B6, C1, P1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, P1, V6] # Ü ð¹¢áž».σᢈðŸ­
-Ü ò² ½ð¹¢áž»ã€‚σᢈðŸ­â€Œ; Ü ò² ½ð¹¢áž».σᢈðŸ­â€Œ; [B2, B6, C1, P1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, P1, V6] # Ü ð¹¢áž».σᢈðŸ­
-xn--qnb616fis0qzt36f.xn--4xa847hli46a; Ü ò² ½ð¹¢áž».σᢈðŸ­; [B2, B6, V6]; xn--qnb616fis0qzt36f.xn--4xa847hli46a; ; ; # Ü ð¹¢áž».σᢈðŸ­
-xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; Ü ò² ½ð¹¢áž».σᢈðŸ­â€Œ; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; ; # Ü ð¹¢áž».σᢈðŸ­
-xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; Ü ò² ½ð¹¢áž».ςᢈðŸ­â€Œ; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; ; ; # Ü ð¹¢áž».ςᢈðŸ­
-Ü ò² ½ð¹¢áž»ï½¡Î£á¢ˆðŸ­â€Œ; Ü ò² ½ð¹¢áž».σᢈðŸ­â€Œ; [B2, B6, C1, P1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, P1, V6] # Ü ð¹¢áž».σᢈðŸ­
-Ü ò² ½ð¹¢áž»ï½¡Ïƒá¢ˆðŸ­â€Œ; Ü ò² ½ð¹¢áž».σᢈðŸ­â€Œ; [B2, B6, C1, P1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, P1, V6] # Ü ð¹¢áž».σᢈðŸ­
-â€--≮。ð¹§; â€--≮.ð¹§; [B1, C2, P1, V6]; xn-----l1tz1k.xn--fo0d; ; xn-----ujv.xn--fo0d; [B1, P1, V3, V6] # --≮.ð¹§
-â€--≮。ð¹§; â€--≮.ð¹§; [B1, C2, P1, V6]; xn-----l1tz1k.xn--fo0d; ; xn-----ujv.xn--fo0d; [B1, P1, V3, V6] # --≮.ð¹§
-xn-----ujv.xn--fo0d; --≮.ð¹§; [B1, V3, V6]; xn-----ujv.xn--fo0d; ; ; # --≮.ð¹§
-xn-----l1tz1k.xn--fo0d; â€--≮.ð¹§; [B1, C2, V6]; xn-----l1tz1k.xn--fo0d; ; ; # --≮.ð¹§
-꠆。ð»šà¾°â’•; ê †.ð»šà¾°â’•; [P1, V5, V6]; xn--l98a.xn--dgd218hhp28d; ; ; # ê †.ྰ⒕
-꠆。ð»šà¾°14.; ê †.ð»šà¾°14.; [P1, V5, V6]; xn--l98a.xn--14-jsj57880f.; ; ; # ê †.ྰ14.
-xn--l98a.xn--14-jsj57880f.; ê †.ð»šà¾°14.; [V5, V6]; xn--l98a.xn--14-jsj57880f.; ; ; # ê †.ྰ14.
-xn--l98a.xn--dgd218hhp28d; ê †.ð»šà¾°â’•; [V5, V6]; xn--l98a.xn--dgd218hhp28d; ; ; # ê †.ྰ⒕
-򮉂ڼ.𑆺٩; 򮉂ڼ.𑆺٩; [B1, B5, B6, P1, V5, V6]; xn--vkb92243l.xn--iib9797k; ; ; # ڼ.𑆺٩
-򮉂ڼ.𑆺٩; ; [B1, B5, B6, P1, V5, V6]; xn--vkb92243l.xn--iib9797k; ; ; # ڼ.𑆺٩
-xn--vkb92243l.xn--iib9797k; 򮉂ڼ.𑆺٩; [B1, B5, B6, V5, V6]; xn--vkb92243l.xn--iib9797k; ; ; # ڼ.𑆺٩
-ó ŽÛ-。𞤴; ó ŽÛ-.𞤴; [B1, P1, V3, V6]; xn----mwc72685y.xn--se6h; ; ; # Û-.𞤴
-ó ŽÛ-。𞤒; ó ŽÛ-.𞤴; [B1, P1, V3, V6]; xn----mwc72685y.xn--se6h; ; ; # Û-.𞤴
-xn----mwc72685y.xn--se6h; ó ŽÛ-.𞤴; [B1, V3, V6]; xn----mwc72685y.xn--se6h; ; ; # Û-.𞤴
-ðŸ 4ó ‡—ðˆ»ï¼Žâ€ð‹µâ›§â€; 84ðˆ».â€ð‹µâ›§â€; [C2]; xn--84-s850a.xn--1uga573cfq1w; ; xn--84-s850a.xn--59h6326e; [] # 84ðˆ».ð‹µâ›§
-84ó ‡—ðˆ».â€ð‹µâ›§â€; 84ðˆ».â€ð‹µâ›§â€; [C2]; xn--84-s850a.xn--1uga573cfq1w; ; xn--84-s850a.xn--59h6326e; [] # 84ðˆ».ð‹µâ›§
+󠕲󟶶\u0665。ñ€ð‘„³ðž¤ƒ\u0710; 󠕲󟶶\u0665.ñ€ð‘„³ðž¤¥\u0710; [B1, B5, B6, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # Ù¥.𑄳𞤥Ü
+󠕲󟶶\u0665。ñ€ð‘„³ðž¤ƒ\u0710; 󠕲󟶶\u0665.ñ€ð‘„³ðž¤¥\u0710; [B1, B5, B6, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # Ù¥.𑄳𞤥Ü
+󠕲󟶶\u0665。ñ€ð‘„³ðž¤¥\u0710; 󠕲󟶶\u0665.ñ€ð‘„³ðž¤¥\u0710; [B1, B5, B6, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # Ù¥.𑄳𞤥Ü
+xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; 󠕲󟶶\u0665.ñ€ð‘„³ðž¤¥\u0710; [B1, B5, B6, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # Ù¥.𑄳𞤥Ü
+󠕲󟶶\u0665。ñ€ð‘„³ðž¤¥\u0710; 󠕲󟶶\u0665.ñ€ð‘„³ðž¤¥\u0710; [B1, B5, B6, V6]; xn--eib57614py3ea.xn--9mb5737kqnpfzkwr; ; ; # Ù¥.𑄳𞤥Ü
+\u0720ò² ½ð¹¢\u17BB。ςᢈðŸ­\u200C; \u0720ò² ½ð¹¢\u17BB.ςᢈðŸ­\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # Ü ð¹¢áž».ςᢈðŸ­
+\u0720ò² ½ð¹¢\u17BB。ςᢈðŸ­\u200C; \u0720ò² ½ð¹¢\u17BB.ςᢈðŸ­\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # Ü ð¹¢áž».ςᢈðŸ­
+\u0720ò² ½ð¹¢\u17BB。ΣᢈðŸ­\u200C; \u0720ò² ½ð¹¢\u17BB.σᢈðŸ­\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # Ü ð¹¢áž».σᢈðŸ­
+\u0720ò² ½ð¹¢\u17BB。σᢈðŸ­\u200C; \u0720ò² ½ð¹¢\u17BB.σᢈðŸ­\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # Ü ð¹¢áž».σᢈðŸ­
+xn--qnb616fis0qzt36f.xn--4xa847hli46a; \u0720ò² ½ð¹¢\u17BB.σᢈðŸ­; [B2, B6, V6]; xn--qnb616fis0qzt36f.xn--4xa847hli46a; ; ; # Ü ð¹¢áž».σᢈðŸ­
+xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; \u0720ò² ½ð¹¢\u17BB.σᢈðŸ­\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; ; # Ü ð¹¢áž».σᢈðŸ­
+xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; \u0720ò² ½ð¹¢\u17BB.ςᢈðŸ­\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--3xa057h6ofgl44c; ; ; # Ü ð¹¢áž».ςᢈðŸ­
+\u0720ò² ½ð¹¢\u17BB。ΣᢈðŸ­\u200C; \u0720ò² ½ð¹¢\u17BB.σᢈðŸ­\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # Ü ð¹¢áž».σᢈðŸ­
+\u0720ò² ½ð¹¢\u17BB。σᢈðŸ­\u200C; \u0720ò² ½ð¹¢\u17BB.σᢈðŸ­\u200C; [B2, B6, C1, V6]; xn--qnb616fis0qzt36f.xn--4xa847h6ofgl44c; ; xn--qnb616fis0qzt36f.xn--4xa847hli46a; [B2, B6, V6] # Ü ð¹¢áž».σᢈðŸ­
+\u200D--≮。ð¹§; \u200D--≮.ð¹§; [B1, C2]; xn-----l1tz1k.xn--fo0d; ; xn-----ujv.xn--fo0d; [B1, V3] # --≮.ð¹§
+\u200D--<\u0338。ð¹§; \u200D--≮.ð¹§; [B1, C2]; xn-----l1tz1k.xn--fo0d; ; xn-----ujv.xn--fo0d; [B1, V3] # --≮.ð¹§
+xn-----ujv.xn--fo0d; --≮.ð¹§; [B1, V3]; xn-----ujv.xn--fo0d; ; ; # --≮.ð¹§
+xn-----l1tz1k.xn--fo0d; \u200D--≮.ð¹§; [B1, C2]; xn-----l1tz1k.xn--fo0d; ; ; # --≮.ð¹§
+\uA806。ð»š\u0FB0â’•; \uA806.ð»š\u0FB0â’•; [V5, V6]; xn--l98a.xn--dgd218hhp28d; ; ; # ê †.ྰ⒕
+\uA806。ð»š\u0FB014.; \uA806.ð»š\u0FB014.; [V5, V6]; xn--l98a.xn--14-jsj57880f.; ; ; # ê †.ྰ14.
+xn--l98a.xn--14-jsj57880f.; \uA806.ð»š\u0FB014.; [V5, V6]; xn--l98a.xn--14-jsj57880f.; ; ; # ê †.ྰ14.
+xn--l98a.xn--dgd218hhp28d; \uA806.ð»š\u0FB0â’•; [V5, V6]; xn--l98a.xn--dgd218hhp28d; ; ; # ê †.ྰ⒕
+򮉂\u06BC.𑆺\u0669; 򮉂\u06BC.𑆺\u0669; [B1, B5, B6, V5, V6]; xn--vkb92243l.xn--iib9797k; ; ; # ڼ.𑆺٩
+򮉂\u06BC.𑆺\u0669; ; [B1, B5, B6, V5, V6]; xn--vkb92243l.xn--iib9797k; ; ; # ڼ.𑆺٩
+xn--vkb92243l.xn--iib9797k; 򮉂\u06BC.𑆺\u0669; [B1, B5, B6, V5, V6]; xn--vkb92243l.xn--iib9797k; ; ; # ڼ.𑆺٩
+ó Ž\u06D0-。𞤴; ó Ž\u06D0-.𞤴; [B1, V3, V6]; xn----mwc72685y.xn--se6h; ; ; # Û-.𞤴
+ó Ž\u06D0-。𞤒; ó Ž\u06D0-.𞤴; [B1, V3, V6]; xn----mwc72685y.xn--se6h; ; ; # Û-.𞤴
+xn----mwc72685y.xn--se6h; ó Ž\u06D0-.𞤴; [B1, V3, V6]; xn----mwc72685y.xn--se6h; ; ; # Û-.𞤴
+ðŸ 4ó ‡—ðˆ»ï¼Ž\u200Dð‹µâ›§\u200D; 84ðˆ».\u200Dð‹µâ›§\u200D; [C2]; xn--84-s850a.xn--1uga573cfq1w; ; xn--84-s850a.xn--59h6326e; [] # 84ðˆ».ð‹µâ›§
+84ó ‡—ðˆ».\u200Dð‹µâ›§\u200D; 84ðˆ».\u200Dð‹µâ›§\u200D; [C2]; xn--84-s850a.xn--1uga573cfq1w; ; xn--84-s850a.xn--59h6326e; [] # 84ðˆ».ð‹µâ›§
xn--84-s850a.xn--59h6326e; 84ðˆ».ð‹µâ›§; ; xn--84-s850a.xn--59h6326e; ; ; # 84ðˆ».ð‹µâ›§
84ðˆ».ð‹µâ›§; ; ; xn--84-s850a.xn--59h6326e; ; ; # 84ðˆ».ð‹µâ›§
-xn--84-s850a.xn--1uga573cfq1w; 84ðˆ».â€ð‹µâ›§â€; [C2]; xn--84-s850a.xn--1uga573cfq1w; ; ; # 84ðˆ».ð‹µâ›§
--Ø。ᡪ; -Ø.ᡪ; [B1, P1, V3, V6]; xn----tkc.xn--68e; ; ; # -.ᡪ
--Ø。ᡪ; -Ø.ᡪ; [B1, P1, V3, V6]; xn----tkc.xn--68e; ; ; # -.ᡪ
-xn----tkc.xn--68e; -Ø.ᡪ; [B1, V3, V6]; xn----tkc.xn--68e; ; ; # -.ᡪ
-≮ðŸ•ï¼Žè¬–ß≯; ≮7.謖ß≯; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯
-≮ðŸ•ï¼Žè¬–ß≯; ≮7.謖ß≯; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯
-≮7.謖ß≯; ; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯
-≮7.謖ß≯; ≮7.謖ß≯; [P1, V6]; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯
-≮7.謖SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-≮7.謖SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-≮7.謖ss≯; ; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-≮7.謖ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-≮7.謖Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-≮7.謖Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-xn--7-mgo.xn--ss-xjvv174c; ≮7.謖ss≯; [V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-xn--7-mgo.xn--zca892oly5e; ≮7.謖ß≯; [V6]; xn--7-mgo.xn--zca892oly5e; ; ; # ≮7.謖ß≯
-≮ðŸ•ï¼Žè¬–SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-≮ðŸ•ï¼Žè¬–SS≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-≮ðŸ•ï¼Žè¬–ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-≮ðŸ•ï¼Žè¬–ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-≮ðŸ•ï¼Žè¬–Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-≮ðŸ•ï¼Žè¬–Ss≯; ≮7.謖ss≯; [P1, V6]; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
-朶Ⴉ𞪡.ð¨½à ¥ðŸ“»-; ; [B1, B5, B6, P1, V3, V5, V6]; xn--hnd7245bd56p.xn----3gd37096apmwa; ; ; # 朶Ⴉ.ð¨½à ¥ðŸ“»-
-朶ⴉ𞪡.ð¨½à ¥ðŸ“»-; ; [B1, B5, B6, P1, V3, V5, V6]; xn--0kjz47pd57t.xn----3gd37096apmwa; ; ; # 朶ⴉ.ð¨½à ¥ðŸ“»-
-xn--0kjz47pd57t.xn----3gd37096apmwa; 朶ⴉ𞪡.ð¨½à ¥ðŸ“»-; [B1, B5, B6, V3, V5, V6]; xn--0kjz47pd57t.xn----3gd37096apmwa; ; ; # 朶ⴉ.ð¨½à ¥ðŸ“»-
-xn--hnd7245bd56p.xn----3gd37096apmwa; 朶Ⴉ𞪡.ð¨½à ¥ðŸ“»-; [B1, B5, B6, V3, V5, V6]; xn--hnd7245bd56p.xn----3gd37096apmwa; ; ; # 朶Ⴉ.ð¨½à ¥ðŸ“»-
-ð¤Žã€‚󑿰‌≮â€; ð¤Ž.󑿰‌≮â€; [B6, C1, C2, P1, V6]; xn--bk9c.xn--0ugc04p2u638c; ; xn--bk9c.xn--gdhx6802k; [B6, P1, V6] # ð¤Ž.≮
-ð¤Žã€‚󑿰‌≮â€; ð¤Ž.󑿰‌≮â€; [B6, C1, C2, P1, V6]; xn--bk9c.xn--0ugc04p2u638c; ; xn--bk9c.xn--gdhx6802k; [B6, P1, V6] # ð¤Ž.≮
+xn--84-s850a.xn--1uga573cfq1w; 84ðˆ».\u200Dð‹µâ›§\u200D; [C2]; xn--84-s850a.xn--1uga573cfq1w; ; ; # 84ðˆ».ð‹µâ›§
+-\u0601。ᡪ; -\u0601.ᡪ; [B1, V3, V6]; xn----tkc.xn--68e; ; ; # -.ᡪ
+-\u0601。ᡪ; -\u0601.ᡪ; [B1, V3, V6]; xn----tkc.xn--68e; ; ; # -.ᡪ
+xn----tkc.xn--68e; -\u0601.ᡪ; [B1, V3, V6]; xn----tkc.xn--68e; ; ; # -.ᡪ
+≮ðŸ•ï¼Žè¬–ß≯; ≮7.謖ß≯; ; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯
+<\u0338ðŸ•ï¼Žè¬–ß>\u0338; ≮7.謖ß≯; ; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯
+≮7.謖ß≯; ; ; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯
+<\u03387.謖ß>\u0338; ≮7.謖ß≯; ; xn--7-mgo.xn--zca892oly5e; ; xn--7-mgo.xn--ss-xjvv174c; # ≮7.謖ß≯
+<\u03387.謖SS>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+≮7.謖SS≯; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+≮7.謖ss≯; ; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+<\u03387.謖ss>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+<\u03387.謖Ss>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+≮7.謖Ss≯; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+xn--7-mgo.xn--ss-xjvv174c; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+xn--7-mgo.xn--zca892oly5e; ≮7.謖ß≯; ; xn--7-mgo.xn--zca892oly5e; ; ; # ≮7.謖ß≯
+<\u0338ðŸ•ï¼Žè¬–SS>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+≮ðŸ•ï¼Žè¬–SS≯; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+≮ðŸ•ï¼Žè¬–ss≯; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+<\u0338ðŸ•ï¼Žè¬–ss>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+<\u0338ðŸ•ï¼Žè¬–Ss>\u0338; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+≮ðŸ•ï¼Žè¬–Ss≯; ≮7.謖ss≯; ; xn--7-mgo.xn--ss-xjvv174c; ; ; # ≮7.謖ss≯
+朶Ⴉ𞪡.ð¨½\u0825📻-; ; [B1, B5, B6, V3, V5, V6]; xn--hnd7245bd56p.xn----3gd37096apmwa; ; ; # 朶Ⴉ.ð¨½à ¥ðŸ“»-
+朶ⴉ𞪡.ð¨½\u0825📻-; ; [B1, B5, B6, V3, V5, V6]; xn--0kjz47pd57t.xn----3gd37096apmwa; ; ; # 朶ⴉ.ð¨½à ¥ðŸ“»-
+xn--0kjz47pd57t.xn----3gd37096apmwa; 朶ⴉ𞪡.ð¨½\u0825📻-; [B1, B5, B6, V3, V5, V6]; xn--0kjz47pd57t.xn----3gd37096apmwa; ; ; # 朶ⴉ.ð¨½à ¥ðŸ“»-
+xn--hnd7245bd56p.xn----3gd37096apmwa; 朶Ⴉ𞪡.ð¨½\u0825📻-; [B1, B5, B6, V3, V5, V6]; xn--hnd7245bd56p.xn----3gd37096apmwa; ; ; # 朶Ⴉ.ð¨½à ¥ðŸ“»-
+ð¤Žã€‚ó‘¿°\u200C≮\u200D; ð¤Ž.ó‘¿°\u200C≮\u200D; [B6, C1, C2, V6]; xn--bk9c.xn--0ugc04p2u638c; ; xn--bk9c.xn--gdhx6802k; [B6, V6] # ð¤Ž.≮
+ð¤Žã€‚ó‘¿°\u200C<\u0338\u200D; ð¤Ž.ó‘¿°\u200C≮\u200D; [B6, C1, C2, V6]; xn--bk9c.xn--0ugc04p2u638c; ; xn--bk9c.xn--gdhx6802k; [B6, V6] # ð¤Ž.≮
xn--bk9c.xn--gdhx6802k; ð¤Ž.󑿰≮; [B6, V6]; xn--bk9c.xn--gdhx6802k; ; ; # ð¤Ž.≮
-xn--bk9c.xn--0ugc04p2u638c; ð¤Ž.󑿰‌≮â€; [B6, C1, C2, V6]; xn--bk9c.xn--0ugc04p2u638c; ; ; # ð¤Ž.≮
-ñ­œŽâ’ˆï½¡â€ŒðŸ¤; ñ­œŽâ’ˆ.‌2; [C1, P1, V6]; xn--tsh94183d.xn--2-rgn; ; xn--tsh94183d.2; [P1, V6] # â’ˆ.2
-񭜎1.。‌2; 񭜎1..‌2; [C1, P1, V6, X4_2]; xn--1-ex54e..xn--2-rgn; [C1, P1, V6, A4_2]; xn--1-ex54e..2; [P1, V6, A4_2] # 1..2
+xn--bk9c.xn--0ugc04p2u638c; ð¤Ž.ó‘¿°\u200C≮\u200D; [B6, C1, C2, V6]; xn--bk9c.xn--0ugc04p2u638c; ; ; # ð¤Ž.≮
+ñ­œŽâ’ˆï½¡\u200CðŸ¤; ñ­œŽâ’ˆ.\u200C2; [C1, V6]; xn--tsh94183d.xn--2-rgn; ; xn--tsh94183d.2; [V6] # â’ˆ.2
+񭜎1.。\u200C2; 񭜎1..\u200C2; [C1, V6, X4_2]; xn--1-ex54e..xn--2-rgn; [C1, V6, A4_2]; xn--1-ex54e..2; [V6, A4_2] # 1..2
xn--1-ex54e..2; 񭜎1..2; [V6, X4_2]; xn--1-ex54e..2; [V6, A4_2]; ; # 1..2
-xn--1-ex54e..xn--2-rgn; 񭜎1..‌2; [C1, V6, X4_2]; xn--1-ex54e..xn--2-rgn; [C1, V6, A4_2]; ; # 1..2
+xn--1-ex54e..xn--2-rgn; 񭜎1..\u200C2; [C1, V6, X4_2]; xn--1-ex54e..xn--2-rgn; [C1, V6, A4_2]; ; # 1..2
xn--tsh94183d.2; 񭜎⒈.2; [V6]; xn--tsh94183d.2; ; ; # ⒈.2
-xn--tsh94183d.xn--2-rgn; 񭜎⒈.‌2; [C1, V6]; xn--tsh94183d.xn--2-rgn; ; ; # ⒈.2
-ó ŸŠð¹¤â€ï¼Žð¹³ó™„µð¹¶; ó ŸŠð¹¤â€.ð¹³ó™„µð¹¶; [B1, C2, P1, V6]; xn--1ugy994g7k93g.xn--ro0dga22807v; ; xn--co0d98977c.xn--ro0dga22807v; [B1, P1, V6] # ð¹¤.ð¹³ð¹¶
-ó ŸŠð¹¤â€.ð¹³ó™„µð¹¶; ; [B1, C2, P1, V6]; xn--1ugy994g7k93g.xn--ro0dga22807v; ; xn--co0d98977c.xn--ro0dga22807v; [B1, P1, V6] # ð¹¤.ð¹³ð¹¶
+xn--tsh94183d.xn--2-rgn; 񭜎⒈.\u200C2; [C1, V6]; xn--tsh94183d.xn--2-rgn; ; ; # ⒈.2
+ó ŸŠð¹¤\u200D.ð¹³ó™„µð¹¶; ó ŸŠð¹¤\u200D.ð¹³ó™„µð¹¶; [B1, C2, V6]; xn--1ugy994g7k93g.xn--ro0dga22807v; ; xn--co0d98977c.xn--ro0dga22807v; [B1, V6] # ð¹¤.ð¹³ð¹¶
+ó ŸŠð¹¤\u200D.ð¹³ó™„µð¹¶; ; [B1, C2, V6]; xn--1ugy994g7k93g.xn--ro0dga22807v; ; xn--co0d98977c.xn--ro0dga22807v; [B1, V6] # ð¹¤.ð¹³ð¹¶
xn--co0d98977c.xn--ro0dga22807v; ó ŸŠð¹¤.ð¹³ó™„µð¹¶; [B1, V6]; xn--co0d98977c.xn--ro0dga22807v; ; ; # ð¹¤.ð¹³ð¹¶
-xn--1ugy994g7k93g.xn--ro0dga22807v; ó ŸŠð¹¤â€.ð¹³ó™„µð¹¶; [B1, C2, V6]; xn--1ugy994g7k93g.xn--ro0dga22807v; ; ; # ð¹¤.ð¹³ð¹¶
-𞤴ð¹»ð‘“‚ð­ï¼Žà¥ï¸‡ô‰›¯; 𞤴ð¹»ð‘“‚ð­.à¥ô‰›¯; [B1, P1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴ð¹»ð‘“‚ð­.à¥
-𞤴ð¹»ð‘“‚ð­.à¥ï¸‡ô‰›¯; 𞤴ð¹»ð‘“‚ð­.à¥ô‰›¯; [B1, P1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴ð¹»ð‘“‚ð­.à¥
-𞤒ð¹»ð‘“‚ð­.à¥ï¸‡ô‰›¯; 𞤴ð¹»ð‘“‚ð­.à¥ô‰›¯; [B1, P1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴ð¹»ð‘“‚ð­.à¥
-xn--609c96c09grp2w.xn--n3b28708s; 𞤴ð¹»ð‘“‚ð­.à¥ô‰›¯; [B1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴ð¹»ð‘“‚ð­.à¥
-𞤒ð¹»ð‘“‚ð­ï¼Žà¥ï¸‡ô‰›¯; 𞤴ð¹»ð‘“‚ð­.à¥ô‰›¯; [B1, P1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴ð¹»ð‘“‚ð­.à¥
-٨。ð¹ ð¹½ñ—®¶; Ù¨.ð¹ ð¹½ñ—®¶; [B1, P1, V6]; xn--hib.xn--7n0d2bu9196b; ; ; # Ù¨.ð¹ ð¹½
-٨。ð¹ ð¹½ñ—®¶; Ù¨.ð¹ ð¹½ñ—®¶; [B1, P1, V6]; xn--hib.xn--7n0d2bu9196b; ; ; # Ù¨.ð¹ ð¹½
-xn--hib.xn--7n0d2bu9196b; Ù¨.ð¹ ð¹½ñ—®¶; [B1, V6]; xn--hib.xn--7n0d2bu9196b; ; ; # Ù¨.ð¹ ð¹½
-á… ñ€œ.8ò¶¾µÚœ; ; [B1, P1, V6]; xn--psd85033d.xn--8-otc61545t; ; ; # .8Úœ
-xn--psd85033d.xn--8-otc61545t; á… ñ€œ.8ò¶¾µÚœ; [B1, V6]; xn--psd85033d.xn--8-otc61545t; ; ; # .8Úœ
-â€â€Œó †ªï½¡ÃŸð‘“ƒ; â€â€Œ.ß𑓃; [C1, C2]; xn--0ugb.xn--zca0732l; ; .xn--ss-bh7o; [A4_2] # .ß𑓃
-â€â€Œó †ªã€‚ß𑓃; â€â€Œ.ß𑓃; [C1, C2]; xn--0ugb.xn--zca0732l; ; .xn--ss-bh7o; [A4_2] # .ß𑓃
-â€â€Œó †ªã€‚SS𑓃; â€â€Œ.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
-â€â€Œó †ªã€‚ss𑓃; â€â€Œ.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
-â€â€Œó †ªã€‚Ss𑓃; â€â€Œ.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
+xn--1ugy994g7k93g.xn--ro0dga22807v; ó ŸŠð¹¤\u200D.ð¹³ó™„µð¹¶; [B1, C2, V6]; xn--1ugy994g7k93g.xn--ro0dga22807v; ; ; # ð¹¤.ð¹³ð¹¶
+𞤴ð¹»ð‘“‚ð­ï¼Ž\u094D\uFE07ô‰›¯; 𞤴ð¹»ð‘“‚ð­.\u094Dô‰›¯; [B1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴ð¹»ð‘“‚ð­.à¥
+𞤴ð¹»ð‘“‚ð­.\u094D\uFE07ô‰›¯; 𞤴ð¹»ð‘“‚ð­.\u094Dô‰›¯; [B1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴ð¹»ð‘“‚ð­.à¥
+𞤒ð¹»ð‘“‚ð­.\u094D\uFE07ô‰›¯; 𞤴ð¹»ð‘“‚ð­.\u094Dô‰›¯; [B1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴ð¹»ð‘“‚ð­.à¥
+xn--609c96c09grp2w.xn--n3b28708s; 𞤴ð¹»ð‘“‚ð­.\u094Dô‰›¯; [B1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴ð¹»ð‘“‚ð­.à¥
+𞤒ð¹»ð‘“‚ð­ï¼Ž\u094D\uFE07ô‰›¯; 𞤴ð¹»ð‘“‚ð­.\u094Dô‰›¯; [B1, V5, V6]; xn--609c96c09grp2w.xn--n3b28708s; ; ; # 𞤴ð¹»ð‘“‚ð­.à¥
+\u0668。ð¹ ð¹½ñ—®¶; \u0668.ð¹ ð¹½ñ—®¶; [B1, V6]; xn--hib.xn--7n0d2bu9196b; ; ; # Ù¨.ð¹ ð¹½
+\u0668。ð¹ ð¹½ñ—®¶; \u0668.ð¹ ð¹½ñ—®¶; [B1, V6]; xn--hib.xn--7n0d2bu9196b; ; ; # Ù¨.ð¹ ð¹½
+xn--hib.xn--7n0d2bu9196b; \u0668.ð¹ ð¹½ñ—®¶; [B1, V6]; xn--hib.xn--7n0d2bu9196b; ; ; # Ù¨.ð¹ ð¹½
+\u1160ñ€œ.8ò¶¾µ\u069C; ; [B1, V6]; xn--psd85033d.xn--8-otc61545t; ; ; # .8Úœ
+xn--psd85033d.xn--8-otc61545t; \u1160ñ€œ.8ò¶¾µ\u069C; [B1, V6]; xn--psd85033d.xn--8-otc61545t; ; ; # .8Úœ
+\u200D\u200C󠆪。ß𑓃; \u200D\u200C.ß𑓃; [C1, C2]; xn--0ugb.xn--zca0732l; ; .xn--ss-bh7o; [A4_2] # .ß𑓃
+\u200D\u200C󠆪。ß𑓃; \u200D\u200C.ß𑓃; [C1, C2]; xn--0ugb.xn--zca0732l; ; .xn--ss-bh7o; [A4_2] # .ß𑓃
+\u200D\u200C󠆪。SS𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
+\u200D\u200C󠆪。ss𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
+\u200D\u200C󠆪。Ss𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
.xn--ss-bh7o; .ss𑓃; [X4_2]; .xn--ss-bh7o; [A4_2]; ; # .ss𑓃
-xn--0ugb.xn--ss-bh7o; â€â€Œ.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; ; # .ss𑓃
-xn--0ugb.xn--zca0732l; â€â€Œ.ß𑓃; [C1, C2]; xn--0ugb.xn--zca0732l; ; ; # .ß𑓃
-â€â€Œó †ªï½¡SS𑓃; â€â€Œ.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
-â€â€Œó †ªï½¡ss𑓃; â€â€Œ.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
-â€â€Œó †ªï½¡Ss𑓃; â€â€Œ.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
+xn--0ugb.xn--ss-bh7o; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; ; # .ss𑓃
+xn--0ugb.xn--zca0732l; \u200D\u200C.ß𑓃; [C1, C2]; xn--0ugb.xn--zca0732l; ; ; # .ß𑓃
+\u200D\u200C󠆪。SS𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
+\u200D\u200C󠆪。ss𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
+\u200D\u200C󠆪。Ss𑓃; \u200D\u200C.ss𑓃; [C1, C2]; xn--0ugb.xn--ss-bh7o; ; .xn--ss-bh7o; [A4_2] # .ss𑓃
xn--ss-bh7o; ss𑓃; ; xn--ss-bh7o; ; ; # ss𑓃
ss𑓃; ; ; xn--ss-bh7o; ; ; # ss𑓃
SS𑓃; ss𑓃; ; xn--ss-bh7o; ; ; # ss𑓃
Ss𑓃; ss𑓃; ; xn--ss-bh7o; ; ; # ss𑓃
-︒‌ヶ䒩.ꡪ; ; [C1, P1, V6]; xn--0ug287dj0or48o.xn--gd9a; ; xn--qekw60dns9k.xn--gd9a; [P1, V6] # ︒ヶ䒩.ꡪ
-。‌ヶ䒩.ꡪ; .‌ヶ䒩.ꡪ; [C1, X4_2]; .xn--0ug287dj0o.xn--gd9a; [C1, A4_2]; .xn--qekw60d.xn--gd9a; [A4_2] # .ヶ䒩.ꡪ
+︒\u200Cヶ䒩.ꡪ; ; [C1, V6]; xn--0ug287dj0or48o.xn--gd9a; ; xn--qekw60dns9k.xn--gd9a; [V6] # ︒ヶ䒩.ꡪ
+。\u200Cヶ䒩.ꡪ; .\u200Cヶ䒩.ꡪ; [C1, X4_2]; .xn--0ug287dj0o.xn--gd9a; [C1, A4_2]; .xn--qekw60d.xn--gd9a; [A4_2] # .ヶ䒩.ꡪ
.xn--qekw60d.xn--gd9a; .ヶ䒩.ꡪ; [X4_2]; .xn--qekw60d.xn--gd9a; [A4_2]; ; # .ヶ䒩.ꡪ
-.xn--0ug287dj0o.xn--gd9a; .‌ヶ䒩.ꡪ; [C1, X4_2]; .xn--0ug287dj0o.xn--gd9a; [C1, A4_2]; ; # .ヶ䒩.ꡪ
+.xn--0ug287dj0o.xn--gd9a; .\u200Cヶ䒩.ꡪ; [C1, X4_2]; .xn--0ug287dj0o.xn--gd9a; [C1, A4_2]; ; # .ヶ䒩.ꡪ
xn--qekw60dns9k.xn--gd9a; ︒ヶ䒩.ꡪ; [V6]; xn--qekw60dns9k.xn--gd9a; ; ; # ︒ヶ䒩.ꡪ
-xn--0ug287dj0or48o.xn--gd9a; ︒‌ヶ䒩.ꡪ; [C1, V6]; xn--0ug287dj0or48o.xn--gd9a; ; ; # ︒ヶ䒩.ꡪ
+xn--0ug287dj0or48o.xn--gd9a; ︒\u200Cヶ䒩.ꡪ; [C1, V6]; xn--0ug287dj0or48o.xn--gd9a; ; ; # ︒ヶ䒩.ꡪ
xn--qekw60d.xn--gd9a; ヶ䒩.ꡪ; ; xn--qekw60d.xn--gd9a; ; ; # ヶ䒩.ꡪ
ヶ䒩.ꡪ; ; ; xn--qekw60d.xn--gd9a; ; ; # ヶ䒩.ꡪ
-‌⒈ð¤®.󢓋᩠; ; [C1, P1, V6]; xn--0ug88o7471d.xn--jof45148n; ; xn--tshw462r.xn--jof45148n; [P1, V6] # â’ˆð¤®.á© 
-‌1.ð¤®.󢓋᩠; ; [C1, P1, V6]; xn--1-rgn.xn--4x6j.xn--jof45148n; ; 1.xn--4x6j.xn--jof45148n; [P1, V6] # 1.ð¤®.á© 
-1.xn--4x6j.xn--jof45148n; 1.ð¤®.󢓋᩠; [V6]; 1.xn--4x6j.xn--jof45148n; ; ; # 1.ð¤®.á© 
-xn--1-rgn.xn--4x6j.xn--jof45148n; ‌1.ð¤®.󢓋᩠; [C1, V6]; xn--1-rgn.xn--4x6j.xn--jof45148n; ; ; # 1.ð¤®.á© 
-xn--tshw462r.xn--jof45148n; â’ˆð¤®.󢓋᩠; [V6]; xn--tshw462r.xn--jof45148n; ; ; # â’ˆð¤®.á© 
-xn--0ug88o7471d.xn--jof45148n; ‌⒈ð¤®.󢓋᩠; [C1, V6]; xn--0ug88o7471d.xn--jof45148n; ; ; # â’ˆð¤®.á© 
-⒈‌ð«“󠀺。᩠ñ¤°µâ€; ⒈‌ð«“󠀺.á© ñ¤°µâ€; [B1, C1, C2, P1, V5, V6]; xn--0ug78ol75wzcx4i.xn--jof95xex98m; ; xn--tsh4435fk263g.xn--jofz5294e; [B1, P1, V5, V6] # â’ˆð«“.á© 
-1.‌ð«“󠀺。᩠ñ¤°µâ€; 1.‌ð«“󠀺.á© ñ¤°µâ€; [B1, C1, C2, P1, V5, V6]; 1.xn--0ug8853gk263g.xn--jof95xex98m; ; 1.xn--8w9c40377c.xn--jofz5294e; [B1, B3, P1, V5, V6] # 1.ð«“.á© 
-1.xn--8w9c40377c.xn--jofz5294e; 1.ð«“󠀺.á© ñ¤°µ; [B1, B3, V5, V6]; 1.xn--8w9c40377c.xn--jofz5294e; ; ; # 1.ð«“.á© 
-1.xn--0ug8853gk263g.xn--jof95xex98m; 1.‌ð«“󠀺.á© ñ¤°µâ€; [B1, C1, C2, V5, V6]; 1.xn--0ug8853gk263g.xn--jof95xex98m; ; ; # 1.ð«“.á© 
-xn--tsh4435fk263g.xn--jofz5294e; â’ˆð«“󠀺.á© ñ¤°µ; [B1, V5, V6]; xn--tsh4435fk263g.xn--jofz5294e; ; ; # â’ˆð«“.á© 
-xn--0ug78ol75wzcx4i.xn--jof95xex98m; ⒈‌ð«“󠀺.á© ñ¤°µâ€; [B1, C1, C2, V5, V6]; xn--0ug78ol75wzcx4i.xn--jof95xex98m; ; ; # â’ˆð«“.á© 
-ð…µï½¡ðŸ«ðž€ˆä¬ºâ’ˆ; ð…µ.9𞀈䬺⒈; [P1, V6]; xn--3f1h.xn--9-ecp936non25a; ; ; # .9𞀈䬺⒈
-ð…µã€‚9𞀈䬺1.; ð…µ.9𞀈䬺1.; [P1, V6]; xn--3f1h.xn--91-030c1650n.; ; ; # .9𞀈䬺1.
+\u200Câ’ˆð¤®.󢓋\u1A60; ; [C1, V6]; xn--0ug88o7471d.xn--jof45148n; ; xn--tshw462r.xn--jof45148n; [V6] # â’ˆð¤®.á© 
+\u200C1.ð¤®.󢓋\u1A60; ; [C1, V6]; xn--1-rgn.xn--4x6j.xn--jof45148n; ; 1.xn--4x6j.xn--jof45148n; [V6] # 1.ð¤®.á© 
+1.xn--4x6j.xn--jof45148n; 1.ð¤®.󢓋\u1A60; [V6]; 1.xn--4x6j.xn--jof45148n; ; ; # 1.ð¤®.á© 
+xn--1-rgn.xn--4x6j.xn--jof45148n; \u200C1.ð¤®.󢓋\u1A60; [C1, V6]; xn--1-rgn.xn--4x6j.xn--jof45148n; ; ; # 1.ð¤®.á© 
+xn--tshw462r.xn--jof45148n; â’ˆð¤®.󢓋\u1A60; [V6]; xn--tshw462r.xn--jof45148n; ; ; # â’ˆð¤®.á© 
+xn--0ug88o7471d.xn--jof45148n; \u200Câ’ˆð¤®.󢓋\u1A60; [C1, V6]; xn--0ug88o7471d.xn--jof45148n; ; ; # â’ˆð¤®.á© 
+â’ˆ\u200Cð«“󠀺。\u1A60ñ¤°µ\u200D; â’ˆ\u200Cð«“󠀺.\u1A60ñ¤°µ\u200D; [B1, C1, C2, V5, V6]; xn--0ug78ol75wzcx4i.xn--jof95xex98m; ; xn--tsh4435fk263g.xn--jofz5294e; [B1, V5, V6] # â’ˆð«“.á© 
+1.\u200Cð«“󠀺。\u1A60ñ¤°µ\u200D; 1.\u200Cð«“󠀺.\u1A60ñ¤°µ\u200D; [B1, C1, C2, V5, V6]; 1.xn--0ug8853gk263g.xn--jof95xex98m; ; 1.xn--8w9c40377c.xn--jofz5294e; [B1, B3, V5, V6] # 1.ð«“.á© 
+1.xn--8w9c40377c.xn--jofz5294e; 1.ð«“󠀺.\u1A60ñ¤°µ; [B1, B3, V5, V6]; 1.xn--8w9c40377c.xn--jofz5294e; ; ; # 1.ð«“.á© 
+1.xn--0ug8853gk263g.xn--jof95xex98m; 1.\u200Cð«“󠀺.\u1A60ñ¤°µ\u200D; [B1, C1, C2, V5, V6]; 1.xn--0ug8853gk263g.xn--jof95xex98m; ; ; # 1.ð«“.á© 
+xn--tsh4435fk263g.xn--jofz5294e; â’ˆð«“󠀺.\u1A60ñ¤°µ; [B1, V5, V6]; xn--tsh4435fk263g.xn--jofz5294e; ; ; # â’ˆð«“.á© 
+xn--0ug78ol75wzcx4i.xn--jof95xex98m; â’ˆ\u200Cð«“󠀺.\u1A60ñ¤°µ\u200D; [B1, C1, C2, V5, V6]; xn--0ug78ol75wzcx4i.xn--jof95xex98m; ; ; # â’ˆð«“.á© 
+ð…µï½¡ðŸ«ðž€ˆä¬ºâ’ˆ; ð…µ.9𞀈䬺⒈; [V6]; xn--3f1h.xn--9-ecp936non25a; ; ; # .9𞀈䬺⒈
+ð…µã€‚9𞀈䬺1.; ð…µ.9𞀈䬺1.; [V6]; xn--3f1h.xn--91-030c1650n.; ; ; # .9𞀈䬺1.
xn--3f1h.xn--91-030c1650n.; ð…µ.9𞀈䬺1.; [V6]; xn--3f1h.xn--91-030c1650n.; ; ; # .9𞀈䬺1.
xn--3f1h.xn--9-ecp936non25a; ð…µ.9𞀈䬺⒈; [V6]; xn--3f1h.xn--9-ecp936non25a; ; ; # .9𞀈䬺⒈
-򡼺≯。盚ص; 򡼺≯.盚ص; [B5, B6, P1, V6]; xn--hdh30181h.xn--0gb7878c; ; ; # ≯.盚ص
-򡼺≯。盚ص; 򡼺≯.盚ص; [B5, B6, P1, V6]; xn--hdh30181h.xn--0gb7878c; ; ; # ≯.盚ص
-xn--hdh30181h.xn--0gb7878c; 򡼺≯.盚ص; [B5, B6, V6]; xn--hdh30181h.xn--0gb7878c; ; ; # ≯.盚ص
--ñ¿°­Ö´ã€‚-ó Šð¢¸â‰¯; -ñ¿°­Ö´.-ó Šð¢¸â‰¯; [B1, P1, V3, V6]; xn----fgc06667m.xn----pgoy615he5y4i; ; ; # -Ö´.-≯
--ñ¿°­Ö´ã€‚-ó Šð¢¸≯; -ñ¿°­Ö´.-ó Šð¢¸â‰¯; [B1, P1, V3, V6]; xn----fgc06667m.xn----pgoy615he5y4i; ; ; # -Ö´.-≯
-xn----fgc06667m.xn----pgoy615he5y4i; -ñ¿°­Ö´.-ó Šð¢¸â‰¯; [B1, V3, V6]; xn----fgc06667m.xn----pgoy615he5y4i; ; ; # -Ö´.-≯
-󿭓᭄‌à©ï¼Žð­›ñ³‹”; 󿭓᭄‌à©.ð­›ñ³‹”; [B2, B3, B6, P1, V6]; xn--ybc997f6rd2n772c.xn--409c6100y; ; xn--ybc997fb5881a.xn--409c6100y; [B2, B3, P1, V6] # á­„à©.ð­›
-󿭓᭄‌à©.ð­›ñ³‹”; ; [B2, B3, B6, P1, V6]; xn--ybc997f6rd2n772c.xn--409c6100y; ; xn--ybc997fb5881a.xn--409c6100y; [B2, B3, P1, V6] # á­„à©.ð­›
-xn--ybc997fb5881a.xn--409c6100y; ó¿­“á­„à©.ð­›ñ³‹”; [B2, B3, V6]; xn--ybc997fb5881a.xn--409c6100y; ; ; # á­„à©.ð­›
-xn--ybc997f6rd2n772c.xn--409c6100y; 󿭓᭄‌à©.ð­›ñ³‹”; [B2, B3, B6, V6]; xn--ybc997f6rd2n772c.xn--409c6100y; ; ; # á­„à©.ð­›
-⾇.ٽ𞤴ڻâ€; 舛.ٽ𞤴ڻâ€; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ
-舛.ٽ𞤴ڻâ€; ; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ
-舛.ٽ𞤒ڻâ€; 舛.ٽ𞤴ڻâ€; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ
-xn--8c1a.xn--2ib8jn539l; 舛.ٽ𞤴ڻ; ; xn--8c1a.xn--2ib8jn539l; ; ; # 舛.ٽ𞤴ڻ
-舛.ٽ𞤴ڻ; ; ; xn--8c1a.xn--2ib8jn539l; ; ; # 舛.ٽ𞤴ڻ
-舛.ٽ𞤒ڻ; 舛.ٽ𞤴ڻ; ; xn--8c1a.xn--2ib8jn539l; ; ; # 舛.ٽ𞤴ڻ
-xn--8c1a.xn--2ib8jv19e6413b; 舛.ٽ𞤴ڻâ€; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; ; # 舛.ٽ𞤴ڻ
-⾇.ٽ𞤒ڻâ€; 舛.ٽ𞤴ڻâ€; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ
-4򭆥。ݧ≯; 4򭆥.ݧ≯; [B1, B3, P1, V6]; xn--4-xn17i.xn--rpb459k; ; ; # 4.ݧ≯
-4򭆥。ݧ≯; 4򭆥.ݧ≯; [B1, B3, P1, V6]; xn--4-xn17i.xn--rpb459k; ; ; # 4.ݧ≯
-xn--4-xn17i.xn--rpb459k; 4򭆥.ݧ≯; [B1, B3, V6]; xn--4-xn17i.xn--rpb459k; ; ; # 4.ݧ≯
-ð²”𞫨ñº¿‚硲.ڭ; ð²”𞫨ñº¿‚硲.Ú­; [B5, P1, V6]; xn--lcz1610fn78gk609a.xn--gkb; ; ; # 硲.Ú­
-ð²”𞫨ñº¿‚硲.Ú­; ; [B5, P1, V6]; xn--lcz1610fn78gk609a.xn--gkb; ; ; # 硲.Ú­
-xn--lcz1610fn78gk609a.xn--gkb; ð²”𞫨ñº¿‚硲.Ú­; [B5, V6]; xn--lcz1610fn78gk609a.xn--gkb; ; ; # 硲.Ú­
-‌.︈٦Ⴆ℮; ‌.٦Ⴆ℮; [B1, C1, P1, V6]; xn--0ug.xn--fib263c0yn; ; .xn--fib263c0yn; [B1, P1, V6, A4_2] # .٦Ⴆ℮
-‌.︈٦ⴆ℮; ‌.٦ⴆ℮; [B1, C1]; xn--0ug.xn--fib628k4li; ; .xn--fib628k4li; [B1, A4_2] # .٦ⴆ℮
-.xn--fib628k4li; .٦ⴆ℮; [B1, X4_2]; .xn--fib628k4li; [B1, A4_2]; ; # .٦ⴆ℮
-xn--0ug.xn--fib628k4li; ‌.٦ⴆ℮; [B1, C1]; xn--0ug.xn--fib628k4li; ; ; # .٦ⴆ℮
-.xn--fib263c0yn; .٦Ⴆ℮; [B1, V6, X4_2]; .xn--fib263c0yn; [B1, V6, A4_2]; ; # .٦Ⴆ℮
-xn--0ug.xn--fib263c0yn; ‌.٦Ⴆ℮; [B1, C1, V6]; xn--0ug.xn--fib263c0yn; ; ; # .٦Ⴆ℮
-ڣ.àµâ€Ïž; Ú£.àµâ€ÏŸ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # Ú£.àµÏŸ
-Ú£.àµâ€Ïž; Ú£.àµâ€ÏŸ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # Ú£.àµÏŸ
-Ú£.àµâ€ÏŸ; ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # Ú£.àµÏŸ
-xn--5jb.xn--xya149b; Ú£.àµÏŸ; [B1, V5]; xn--5jb.xn--xya149b; ; ; # Ú£.àµÏŸ
-xn--5jb.xn--xya149bpvp; Ú£.àµâ€ÏŸ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; ; # Ú£.àµÏŸ
-ڣ.àµâ€ÏŸ; Ú£.àµâ€ÏŸ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # Ú£.àµÏŸ
-‌𞸇𑘿。أð®‚-è…; ‌ح𑘿.Ø£ð®‚-è…; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.Ø£ð®‚-è…
-‌𞸇𑘿。أð®‚-è…; ‌ح𑘿.Ø£ð®‚-è…; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.Ø£ð®‚-è…
-‌ح𑘿。أð®‚-è…; ‌ح𑘿.Ø£ð®‚-è…; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.Ø£ð®‚-è…
-‌ح𑘿。أð®‚-è…; ‌ح𑘿.Ø£ð®‚-è…; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.Ø£ð®‚-è…
-xn--sgb4140l.xn----qmc5075grs9e; ح𑘿.Ø£ð®‚-è…; [B2, B3]; xn--sgb4140l.xn----qmc5075grs9e; ; ; # ح𑘿.Ø£ð®‚-è…
-xn--sgb953kmi8o.xn----qmc5075grs9e; ‌ح𑘿.Ø£ð®‚-è…; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; ; # ح𑘿.Ø£ð®‚-è…
--ò­·™Ù«çº›ï½¡ðŸ›ñ­¤‡ðŸ„…; -ò­·™Ù«çº›.3ñ­¤‡ðŸ„…; [B1, P1, V3, V6]; xn----vqc8143g0tt4i.xn--3-os1sn476y; ; ; # -٫纛.3🄅
--򭷙٫纛。3񭤇4,; -򭷙٫纛.3񭤇4,; [B1, P1, V3, V6]; xn----vqc8143g0tt4i.xn--34,-8787l; ; ; # -٫纛.34,
-xn----vqc8143g0tt4i.xn--34,-8787l; -򭷙٫纛.3񭤇4,; [B1, P1, V3, V6]; xn----vqc8143g0tt4i.xn--34,-8787l; ; ; # -٫纛.34,
-xn----vqc8143g0tt4i.xn--3-os1sn476y; -򭷙٫纛.3񭤇🄅; [B1, V3, V6]; xn----vqc8143g0tt4i.xn--3-os1sn476y; ; ; # -٫纛.3🄅
-🔔.Ⴂߌà¯ð‹®; 🔔.Ⴂߌà¯ð‹®; [B1, B5, P1, V6]; xn--nv8h.xn--nsb46r83e8112a; ; ; # 🔔.Ⴂߌà¯ð‹®
-🔔.Ⴂߌà¯ð‹®; ; [B1, B5, P1, V6]; xn--nv8h.xn--nsb46r83e8112a; ; ; # 🔔.Ⴂߌà¯ð‹®
-🔔.ⴂߌà¯ð‹®; ; [B1, B5]; xn--nv8h.xn--nsb46rvz1b222p; ; ; # 🔔.ⴂߌà¯ð‹®
-xn--nv8h.xn--nsb46rvz1b222p; 🔔.ⴂߌà¯ð‹®; [B1, B5]; xn--nv8h.xn--nsb46rvz1b222p; ; ; # 🔔.ⴂߌà¯ð‹®
-xn--nv8h.xn--nsb46r83e8112a; 🔔.Ⴂߌà¯ð‹®; [B1, B5, V6]; xn--nv8h.xn--nsb46r83e8112a; ; ; # 🔔.Ⴂߌà¯ð‹®
-🔔.ⴂߌà¯ð‹®; 🔔.ⴂߌà¯ð‹®; [B1, B5]; xn--nv8h.xn--nsb46rvz1b222p; ; ; # 🔔.ⴂߌà¯ð‹®
-軥ڳ.-𖬵; ; [B1, B5, B6, V3]; xn--mkb5480e.xn----6u5m; ; ; # 軥ڳ.-𖬵
-xn--mkb5480e.xn----6u5m; 軥ڳ.-𖬵; [B1, B5, B6, V3]; xn--mkb5480e.xn----6u5m; ; ; # 軥ڳ.-𖬵
-ð¹¤ßŠÚ¶.ð¨‚-; ; [B1, V3, V5]; xn--pkb56cn614d.xn----974i; ; ; # ð¹¤ßŠÚ¶.ð¨‚-
-xn--pkb56cn614d.xn----974i; ð¹¤ßŠÚ¶.ð¨‚-; [B1, V3, V5]; xn--pkb56cn614d.xn----974i; ; ; # ð¹¤ßŠÚ¶.ð¨‚-
--ó …±0。áŸá·½í†‡ì‹­; -0.áŸá·½í†‡ì‹­; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.áŸá·½í†‡ì‹­
--ó …±0。áŸá·½á„ᅨᆪ십; -0.áŸá·½í†‡ì‹­; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.áŸá·½í†‡ì‹­
--ó …±0。áŸá·½í†‡ì‹­; -0.áŸá·½í†‡ì‹­; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.áŸá·½í†‡ì‹­
--ó …±0。áŸá·½á„ᅨᆪ십; -0.áŸá·½í†‡ì‹­; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.áŸá·½í†‡ì‹­
--0.xn--r4e872ah77nghm; -0.áŸá·½í†‡ì‹­; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.áŸá·½í†‡ì‹­
-ꡰ︒--。៌éˆð¹¢ñ˜³®; ꡰ︒--.៌éˆð¹¢ñ˜³®; [B1, B6, P1, V2, V3, V5, V6]; xn-----bk9hu24z.xn--o4e6836dpxudz0v1c; ; ; # ꡰ︒--.៌éˆð¹¢
-ꡰ。--。៌éˆð¹¢ñ˜³®; ê¡°.--.៌éˆð¹¢ñ˜³®; [B1, P1, V3, V5, V6]; xn--md9a.--.xn--o4e6836dpxudz0v1c; ; ; # ê¡°.--.៌éˆð¹¢
-xn--md9a.--.xn--o4e6836dpxudz0v1c; ê¡°.--.៌éˆð¹¢ñ˜³®; [B1, V3, V5, V6]; xn--md9a.--.xn--o4e6836dpxudz0v1c; ; ; # ê¡°.--.៌éˆð¹¢
-xn-----bk9hu24z.xn--o4e6836dpxudz0v1c; ꡰ︒--.៌éˆð¹¢ñ˜³®; [B1, B6, V2, V3, V5, V6]; xn-----bk9hu24z.xn--o4e6836dpxudz0v1c; ; ; # ꡰ︒--.៌éˆð¹¢
-ᅟႿႵრ。à­; ᅟႿႵრ.à­; [P1, V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.à­
-ᅟႿႵრ。à­; ᅟႿႵრ.à­; [P1, V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.à­
-ᅟⴟⴕრ。à­; ᅟⴟⴕრ.à­; [P1, V5, V6]; xn--1od7wz74eeb.xn--9ic; ; ; # ⴟⴕრ.à­
-ᅟႿႵᲠ。à­; ᅟႿႵრ.à­; [P1, V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.à­
-xn--tndt4hvw.xn--9ic; ᅟႿႵრ.à­; [V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.à­
-xn--1od7wz74eeb.xn--9ic; ᅟⴟⴕრ.à­; [V5, V6]; xn--1od7wz74eeb.xn--9ic; ; ; # ⴟⴕრ.à­
-ᅟⴟⴕრ。à­; ᅟⴟⴕრ.à­; [P1, V5, V6]; xn--1od7wz74eeb.xn--9ic; ; ; # ⴟⴕრ.à­
-ᅟႿႵᲠ。à­; ᅟႿႵრ.à­; [P1, V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.à­
-ᅟႿⴕრ。à­; ᅟႿⴕრ.à­; [P1, V5, V6]; xn--3nd0etsm92g.xn--9ic; ; ; # Ⴟⴕრ.à­
-xn--3nd0etsm92g.xn--9ic; ᅟႿⴕრ.à­; [V5, V6]; xn--3nd0etsm92g.xn--9ic; ; ; # Ⴟⴕრ.à­
-ᅟႿⴕრ。à­; ᅟႿⴕრ.à­; [P1, V5, V6]; xn--3nd0etsm92g.xn--9ic; ; ; # Ⴟⴕრ.à­
-🄃ð¹ .Ù¤ó …‡; 🄃ð¹ .Ù¤; [B1, P1, V6]; xn--7n0d1189a.xn--dib; ; ; # 🄃ð¹ .Ù¤
-2,ð¹ .Ù¤ó …‡; 2,ð¹ .Ù¤; [B1, P1, V6]; xn--2,-5g3o.xn--dib; ; ; # 2,ð¹ .Ù¤
-xn--2,-5g3o.xn--dib; 2,ð¹ .Ù¤; [B1, P1, V6]; xn--2,-5g3o.xn--dib; ; ; # 2,ð¹ .Ù¤
-xn--7n0d1189a.xn--dib; 🄃ð¹ .Ù¤; [B1, V6]; xn--7n0d1189a.xn--dib; ; ; # 🄃ð¹ .Ù¤
-򻲼‌ﱛ.ߒࡈ᯳; 򻲼‌ذٰ.ߒࡈ᯳; [B2, B3, B5, B6, C1, P1, V6]; xn--vgb2kq00fl213y.xn--tsb0vz43c; ; xn--vgb2kp1223g.xn--tsb0vz43c; [B2, B3, B5, B6, P1, V6] # ذٰ.ߒࡈ᯳
-򻲼‌ذٰ.ߒࡈ᯳; ; [B2, B3, B5, B6, C1, P1, V6]; xn--vgb2kq00fl213y.xn--tsb0vz43c; ; xn--vgb2kp1223g.xn--tsb0vz43c; [B2, B3, B5, B6, P1, V6] # ذٰ.ߒࡈ᯳
-xn--vgb2kp1223g.xn--tsb0vz43c; 򻲼ذٰ.ߒࡈ᯳; [B2, B3, B5, B6, V6]; xn--vgb2kp1223g.xn--tsb0vz43c; ; ; # ذٰ.ߒࡈ᯳
-xn--vgb2kq00fl213y.xn--tsb0vz43c; 򻲼‌ذٰ.ߒࡈ᯳; [B2, B3, B5, B6, C1, V6]; xn--vgb2kq00fl213y.xn--tsb0vz43c; ; ; # ذٰ.ߒࡈ᯳
-â€â€ðžµªâ€Œã€‚ᡘ𑲭឵; â€â€ðžµªâ€Œ.ᡘ𑲭឵; [B1, C1, C2, P1, V6]; xn--0ugba05538b.xn--03e93aq365d; ; xn--l96h.xn--03e93aq365d; [P1, V6] # .ᡘ𑲭
-xn--l96h.xn--03e93aq365d; 𞵪.ᡘ𑲭឵; [V6]; xn--l96h.xn--03e93aq365d; ; ; # .ᡘ𑲭
-xn--0ugba05538b.xn--03e93aq365d; â€â€ðžµªâ€Œ.ᡘ𑲭឵; [B1, C1, C2, V6]; xn--0ugba05538b.xn--03e93aq365d; ; ; # .ᡘ𑲭
-𞷻。⚄ñ—‘‡ð‘¿; ðž·».âš„ñ—‘‡ð‘¿; [B1, P1, V6]; xn--qe7h.xn--c7h2966f7so4a; ; ; # .âš„ð‘¿
+򡼺≯。盚\u0635; 򡼺≯.盚\u0635; [B5, B6, V6]; xn--hdh30181h.xn--0gb7878c; ; ; # ≯.盚ص
+򡼺>\u0338。盚\u0635; 򡼺≯.盚\u0635; [B5, B6, V6]; xn--hdh30181h.xn--0gb7878c; ; ; # ≯.盚ص
+xn--hdh30181h.xn--0gb7878c; 򡼺≯.盚\u0635; [B5, B6, V6]; xn--hdh30181h.xn--0gb7878c; ; ; # ≯.盚ص
+-ñ¿°­\u05B4。-ó Šð¢¸â‰¯; -ñ¿°­\u05B4.-ó Šð¢¸â‰¯; [B1, V3, V6]; xn----fgc06667m.xn----pgoy615he5y4i; ; ; # -Ö´.-≯
+-ñ¿°­\u05B4。-ó Šð¢¸>\u0338; -ñ¿°­\u05B4.-ó Šð¢¸â‰¯; [B1, V3, V6]; xn----fgc06667m.xn----pgoy615he5y4i; ; ; # -Ö´.-≯
+xn----fgc06667m.xn----pgoy615he5y4i; -ñ¿°­\u05B4.-ó Šð¢¸â‰¯; [B1, V3, V6]; xn----fgc06667m.xn----pgoy615he5y4i; ; ; # -Ö´.-≯
+ó¿­“\u1B44\u200C\u0A4D.ð­›ñ³‹”; ó¿­“\u1B44\u200C\u0A4D.ð­›ñ³‹”; [B2, B3, B6, V6]; xn--ybc997f6rd2n772c.xn--409c6100y; ; xn--ybc997fb5881a.xn--409c6100y; [B2, B3, V6] # á­„à©.ð­›
+ó¿­“\u1B44\u200C\u0A4D.ð­›ñ³‹”; ; [B2, B3, B6, V6]; xn--ybc997f6rd2n772c.xn--409c6100y; ; xn--ybc997fb5881a.xn--409c6100y; [B2, B3, V6] # á­„à©.ð­›
+xn--ybc997fb5881a.xn--409c6100y; ó¿­“\u1B44\u0A4D.ð­›ñ³‹”; [B2, B3, V6]; xn--ybc997fb5881a.xn--409c6100y; ; ; # á­„à©.ð­›
+xn--ybc997f6rd2n772c.xn--409c6100y; ó¿­“\u1B44\u200C\u0A4D.ð­›ñ³‹”; [B2, B3, B6, V6]; xn--ybc997f6rd2n772c.xn--409c6100y; ; ; # á­„à©.ð­›
+⾇.\u067D𞤴\u06BB\u200D; 舛.\u067D𞤴\u06BB\u200D; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ
+舛.\u067D𞤴\u06BB\u200D; ; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ
+舛.\u067D𞤒\u06BB\u200D; 舛.\u067D𞤴\u06BB\u200D; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ
+xn--8c1a.xn--2ib8jn539l; 舛.\u067D𞤴\u06BB; ; xn--8c1a.xn--2ib8jn539l; ; ; # 舛.ٽ𞤴ڻ
+舛.\u067D𞤴\u06BB; ; ; xn--8c1a.xn--2ib8jn539l; ; ; # 舛.ٽ𞤴ڻ
+舛.\u067D𞤒\u06BB; 舛.\u067D𞤴\u06BB; ; xn--8c1a.xn--2ib8jn539l; ; ; # 舛.ٽ𞤴ڻ
+xn--8c1a.xn--2ib8jv19e6413b; 舛.\u067D𞤴\u06BB\u200D; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; ; # 舛.ٽ𞤴ڻ
+⾇.\u067D𞤒\u06BB\u200D; 舛.\u067D𞤴\u06BB\u200D; [B3, C2]; xn--8c1a.xn--2ib8jv19e6413b; ; xn--8c1a.xn--2ib8jn539l; [] # 舛.ٽ𞤴ڻ
+4򭆥。\u0767≯; 4򭆥.\u0767≯; [B1, B3, V6]; xn--4-xn17i.xn--rpb459k; ; ; # 4.ݧ≯
+4򭆥。\u0767>\u0338; 4򭆥.\u0767≯; [B1, B3, V6]; xn--4-xn17i.xn--rpb459k; ; ; # 4.ݧ≯
+xn--4-xn17i.xn--rpb459k; 4򭆥.\u0767≯; [B1, B3, V6]; xn--4-xn17i.xn--rpb459k; ; ; # 4.ݧ≯
+ð²”𞫨ñº¿‚硲.\u06AD; ð²”𞫨ñº¿‚硲.\u06AD; [B5, V6]; xn--lcz1610fn78gk609a.xn--gkb; ; ; # 硲.Ú­
+ð²”𞫨ñº¿‚硲.\u06AD; ; [B5, V6]; xn--lcz1610fn78gk609a.xn--gkb; ; ; # 硲.Ú­
+xn--lcz1610fn78gk609a.xn--gkb; ð²”𞫨ñº¿‚硲.\u06AD; [B5, V6]; xn--lcz1610fn78gk609a.xn--gkb; ; ; # 硲.Ú­
+\u200C.\uFE08\u0666Ⴆ℮; \u200C.\u0666Ⴆ℮; [B1, C1, V6]; xn--0ug.xn--fib263c0yn; ; .xn--fib263c0yn; [B1, V6, A4_2] # .٦Ⴆ℮
+\u200C.\uFE08\u0666ⴆ℮; \u200C.\u0666ⴆ℮; [B1, C1]; xn--0ug.xn--fib628k4li; ; .xn--fib628k4li; [B1, A4_2] # .٦ⴆ℮
+.xn--fib628k4li; .\u0666ⴆ℮; [B1, X4_2]; .xn--fib628k4li; [B1, A4_2]; ; # .٦ⴆ℮
+xn--0ug.xn--fib628k4li; \u200C.\u0666ⴆ℮; [B1, C1]; xn--0ug.xn--fib628k4li; ; ; # .٦ⴆ℮
+.xn--fib263c0yn; .\u0666Ⴆ℮; [B1, V6, X4_2]; .xn--fib263c0yn; [B1, V6, A4_2]; ; # .٦Ⴆ℮
+xn--0ug.xn--fib263c0yn; \u200C.\u0666Ⴆ℮; [B1, C1, V6]; xn--0ug.xn--fib263c0yn; ; ; # .٦Ⴆ℮
+\u06A3.\u0D4D\u200DÏž; \u06A3.\u0D4D\u200DÏŸ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # Ú£.àµÏŸ
+\u06A3.\u0D4D\u200DÏž; \u06A3.\u0D4D\u200DÏŸ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # Ú£.àµÏŸ
+\u06A3.\u0D4D\u200DÏŸ; ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # Ú£.àµÏŸ
+xn--5jb.xn--xya149b; \u06A3.\u0D4DÏŸ; [B1, V5]; xn--5jb.xn--xya149b; ; ; # Ú£.àµÏŸ
+xn--5jb.xn--xya149bpvp; \u06A3.\u0D4D\u200DÏŸ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; ; # Ú£.àµÏŸ
+\u06A3.\u0D4D\u200DÏŸ; \u06A3.\u0D4D\u200DÏŸ; [B1, V5]; xn--5jb.xn--xya149bpvp; ; xn--5jb.xn--xya149b; # Ú£.àµÏŸ
+\u200C𞸇𑘿。\u0623ð®‚-è…; \u200C\u062D𑘿.\u0623ð®‚-è…; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.Ø£ð®‚-è…
+\u200C𞸇𑘿。\u0627\u0654ð®‚-è…; \u200C\u062D𑘿.\u0623ð®‚-è…; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.Ø£ð®‚-è…
+\u200C\u062D𑘿。\u0623ð®‚-è…; \u200C\u062D𑘿.\u0623ð®‚-è…; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.Ø£ð®‚-è…
+\u200C\u062D𑘿。\u0627\u0654ð®‚-è…; \u200C\u062D𑘿.\u0623ð®‚-è…; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; xn--sgb4140l.xn----qmc5075grs9e; [B2, B3] # ح𑘿.Ø£ð®‚-è…
+xn--sgb4140l.xn----qmc5075grs9e; \u062D𑘿.\u0623ð®‚-è…; [B2, B3]; xn--sgb4140l.xn----qmc5075grs9e; ; ; # ح𑘿.Ø£ð®‚-è…
+xn--sgb953kmi8o.xn----qmc5075grs9e; \u200C\u062D𑘿.\u0623ð®‚-è…; [B1, B2, B3, C1]; xn--sgb953kmi8o.xn----qmc5075grs9e; ; ; # ح𑘿.Ø£ð®‚-è…
+-ò­·™\u066B纛。ðŸ›ñ­¤‡ðŸ„…; -ò­·™\u066B纛.3ñ­¤‡ðŸ„…; [B1, V3, V6]; xn----vqc8143g0tt4i.xn--3-os1sn476y; ; ; # -٫纛.3🄅
+-򭷙\u066B纛。3񭤇4,; -򭷙\u066B纛.3񭤇4,; [B1, V3, V6]; xn----vqc8143g0tt4i.xn--34,-8787l; ; ; # -٫纛.34,
+xn----vqc8143g0tt4i.xn--34,-8787l; -򭷙\u066B纛.3񭤇4,; [B1, V3, V6]; xn----vqc8143g0tt4i.xn--34,-8787l; ; ; # -٫纛.34,
+xn----vqc8143g0tt4i.xn--3-os1sn476y; -򭷙\u066B纛.3񭤇🄅; [B1, V3, V6]; xn----vqc8143g0tt4i.xn--3-os1sn476y; ; ; # -٫纛.3🄅
+🔔.Ⴂ\u07CC\u0BCDð‹®; 🔔.á‚¢\u07CC\u0BCDð‹®; [B1, B5, V6]; xn--nv8h.xn--nsb46r83e8112a; ; ; # 🔔.Ⴂߌà¯ð‹®
+🔔.á‚¢\u07CC\u0BCDð‹®; ; [B1, B5, V6]; xn--nv8h.xn--nsb46r83e8112a; ; ; # 🔔.Ⴂߌà¯ð‹®
+🔔.â´‚\u07CC\u0BCDð‹®; ; [B1, B5]; xn--nv8h.xn--nsb46rvz1b222p; ; ; # 🔔.ⴂߌà¯ð‹®
+xn--nv8h.xn--nsb46rvz1b222p; 🔔.â´‚\u07CC\u0BCDð‹®; [B1, B5]; xn--nv8h.xn--nsb46rvz1b222p; ; ; # 🔔.ⴂߌà¯ð‹®
+xn--nv8h.xn--nsb46r83e8112a; 🔔.á‚¢\u07CC\u0BCDð‹®; [B1, B5, V6]; xn--nv8h.xn--nsb46r83e8112a; ; ; # 🔔.Ⴂߌà¯ð‹®
+🔔.ⴂ\u07CC\u0BCDð‹®; 🔔.â´‚\u07CC\u0BCDð‹®; [B1, B5]; xn--nv8h.xn--nsb46rvz1b222p; ; ; # 🔔.ⴂߌà¯ð‹®
+軥\u06B3.-𖬵; ; [B1, B5, B6, V3]; xn--mkb5480e.xn----6u5m; ; ; # 軥ڳ.-𖬵
+xn--mkb5480e.xn----6u5m; 軥\u06B3.-𖬵; [B1, B5, B6, V3]; xn--mkb5480e.xn----6u5m; ; ; # 軥ڳ.-𖬵
+ð¹¤\u07CA\u06B6.ð¨‚-; ; [B1, V3, V5]; xn--pkb56cn614d.xn----974i; ; ; # ð¹¤ßŠÚ¶.ð¨‚-
+xn--pkb56cn614d.xn----974i; ð¹¤\u07CA\u06B6.ð¨‚-; [B1, V3, V5]; xn--pkb56cn614d.xn----974i; ; ; # ð¹¤ßŠÚ¶.ð¨‚-
+-ó …±0。\u17CF\u1DFD톇십; -0.\u17CF\u1DFD톇십; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.áŸá·½í†‡ì‹­
+-ó …±0。\u17CF\u1DFDá„ᅨᆪ십; -0.\u17CF\u1DFD톇십; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.áŸá·½í†‡ì‹­
+-ó …±0。\u17CF\u1DFD톇십; -0.\u17CF\u1DFD톇십; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.áŸá·½í†‡ì‹­
+-ó …±0。\u17CF\u1DFDá„ᅨᆪ십; -0.\u17CF\u1DFD톇십; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.áŸá·½í†‡ì‹­
+-0.xn--r4e872ah77nghm; -0.\u17CF\u1DFD톇십; [V3, V5]; -0.xn--r4e872ah77nghm; ; ; # -0.áŸá·½í†‡ì‹­
+ꡰ︒--。\u17CCéˆð¹¢ñ˜³®; ꡰ︒--.\u17CCéˆð¹¢ñ˜³®; [B1, B6, V2, V3, V5, V6]; xn-----bk9hu24z.xn--o4e6836dpxudz0v1c; ; ; # ꡰ︒--.៌éˆð¹¢
+ꡰ。--。\u17CCéˆð¹¢ñ˜³®; ê¡°.--.\u17CCéˆð¹¢ñ˜³®; [B1, V3, V5, V6]; xn--md9a.--.xn--o4e6836dpxudz0v1c; ; ; # ê¡°.--.៌éˆð¹¢
+xn--md9a.--.xn--o4e6836dpxudz0v1c; ê¡°.--.\u17CCéˆð¹¢ñ˜³®; [B1, V3, V5, V6]; xn--md9a.--.xn--o4e6836dpxudz0v1c; ; ; # ê¡°.--.៌éˆð¹¢
+xn-----bk9hu24z.xn--o4e6836dpxudz0v1c; ꡰ︒--.\u17CCéˆð¹¢ñ˜³®; [B1, B6, V2, V3, V5, V6]; xn-----bk9hu24z.xn--o4e6836dpxudz0v1c; ; ; # ꡰ︒--.៌éˆð¹¢
+\u115FႿႵრ。\u0B4D; \u115FႿႵრ.\u0B4D; [V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.à­
+\u115FႿႵრ。\u0B4D; \u115FႿႵრ.\u0B4D; [V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.à­
+\u115Fⴟⴕრ。\u0B4D; \u115Fⴟⴕრ.\u0B4D; [V5, V6]; xn--1od7wz74eeb.xn--9ic; ; ; # ⴟⴕრ.à­
+\u115FႿႵᲠ。\u0B4D; \u115FႿႵრ.\u0B4D; [V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.à­
+xn--tndt4hvw.xn--9ic; \u115FႿႵრ.\u0B4D; [V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.à­
+xn--1od7wz74eeb.xn--9ic; \u115Fⴟⴕრ.\u0B4D; [V5, V6]; xn--1od7wz74eeb.xn--9ic; ; ; # ⴟⴕრ.à­
+\u115Fⴟⴕრ。\u0B4D; \u115Fⴟⴕრ.\u0B4D; [V5, V6]; xn--1od7wz74eeb.xn--9ic; ; ; # ⴟⴕრ.à­
+\u115FႿႵᲠ。\u0B4D; \u115FႿႵრ.\u0B4D; [V5, V6]; xn--tndt4hvw.xn--9ic; ; ; # ႿႵრ.à­
+\u115FႿⴕრ。\u0B4D; \u115FႿⴕრ.\u0B4D; [V5, V6]; xn--3nd0etsm92g.xn--9ic; ; ; # Ⴟⴕრ.à­
+xn--3nd0etsm92g.xn--9ic; \u115FႿⴕრ.\u0B4D; [V5, V6]; xn--3nd0etsm92g.xn--9ic; ; ; # Ⴟⴕრ.à­
+\u115FႿⴕრ。\u0B4D; \u115FႿⴕრ.\u0B4D; [V5, V6]; xn--3nd0etsm92g.xn--9ic; ; ; # Ⴟⴕრ.à­
+🄃ð¹ .\u0664ó …‡; 🄃ð¹ .\u0664; [B1, V6]; xn--7n0d1189a.xn--dib; ; ; # 🄃ð¹ .Ù¤
+2,ð¹ .\u0664ó …‡; 2,ð¹ .\u0664; [B1, V6]; xn--2,-5g3o.xn--dib; ; ; # 2,ð¹ .Ù¤
+xn--2,-5g3o.xn--dib; 2,ð¹ .\u0664; [B1, V6]; xn--2,-5g3o.xn--dib; ; ; # 2,ð¹ .Ù¤
+xn--7n0d1189a.xn--dib; 🄃ð¹ .\u0664; [B1, V6]; xn--7n0d1189a.xn--dib; ; ; # 🄃ð¹ .Ù¤
+򻲼\u200C\uFC5B.\u07D2\u0848\u1BF3; 򻲼\u200C\u0630\u0670.\u07D2\u0848\u1BF3; [B2, B3, B5, B6, C1, V6]; xn--vgb2kq00fl213y.xn--tsb0vz43c; ; xn--vgb2kp1223g.xn--tsb0vz43c; [B2, B3, B5, B6, V6] # ذٰ.ߒࡈ᯳
+򻲼\u200C\u0630\u0670.\u07D2\u0848\u1BF3; ; [B2, B3, B5, B6, C1, V6]; xn--vgb2kq00fl213y.xn--tsb0vz43c; ; xn--vgb2kp1223g.xn--tsb0vz43c; [B2, B3, B5, B6, V6] # ذٰ.ߒࡈ᯳
+xn--vgb2kp1223g.xn--tsb0vz43c; 򻲼\u0630\u0670.\u07D2\u0848\u1BF3; [B2, B3, B5, B6, V6]; xn--vgb2kp1223g.xn--tsb0vz43c; ; ; # ذٰ.ߒࡈ᯳
+xn--vgb2kq00fl213y.xn--tsb0vz43c; 򻲼\u200C\u0630\u0670.\u07D2\u0848\u1BF3; [B2, B3, B5, B6, C1, V6]; xn--vgb2kq00fl213y.xn--tsb0vz43c; ; ; # ذٰ.ߒࡈ᯳
+\u200D\u200D𞵪\u200C。ᡘ𑲭\u17B5; \u200D\u200D𞵪\u200C.ᡘ𑲭\u17B5; [B1, C1, C2, V6]; xn--0ugba05538b.xn--03e93aq365d; ; xn--l96h.xn--03e93aq365d; [V6] # .ᡘ𑲭
+xn--l96h.xn--03e93aq365d; 𞵪.ᡘ𑲭\u17B5; [V6]; xn--l96h.xn--03e93aq365d; ; ; # .ᡘ𑲭
+xn--0ugba05538b.xn--03e93aq365d; \u200D\u200D𞵪\u200C.ᡘ𑲭\u17B5; [B1, C1, C2, V6]; xn--0ugba05538b.xn--03e93aq365d; ; ; # .ᡘ𑲭
+𞷻。⚄ñ—‘‡ð‘¿; ðž·».âš„ñ—‘‡ð‘¿; [B1, V6]; xn--qe7h.xn--c7h2966f7so4a; ; ; # .âš„ð‘¿
xn--qe7h.xn--c7h2966f7so4a; ðž·».âš„ñ—‘‡ð‘¿; [B1, V6]; xn--qe7h.xn--c7h2966f7so4a; ; ; # .âš„ð‘¿
-꣄≠.𞠨٧; ꣄≠.𞠨٧; [B1, P1, V5, V6]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧
-꣄≠.𞠨٧; ꣄≠.𞠨٧; [B1, P1, V5, V6]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧
-꣄≠.𞠨٧; ; [B1, P1, V5, V6]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧
-꣄≠.𞠨٧; ꣄≠.𞠨٧; [B1, P1, V5, V6]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧
-xn--1chy504c.xn--gib1777v; ꣄≠.𞠨٧; [B1, V5, V6]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧
-ðŸ›ð†ªê£„。꣪-; 3꣄ð†ª.꣪-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄ð†ª.꣪-
-ðŸ›ê£„ð†ªï½¡ê£ª-; 3꣄ð†ª.꣪-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄ð†ª.꣪-
-3꣄ð†ªã€‚꣪-; 3꣄ð†ª.꣪-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄ð†ª.꣪-
-xn--3-sl4eu679e.xn----xn4e; 3꣄ð†ª.꣪-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄ð†ª.꣪-
-ݟᮢ်Ⴇ.4; ; [B1, B2, B3, P1, V6]; xn--jpb846bmjw88a.4; ; ; # ݟᮢ်Ⴇ.4
-ݟᮢ်ⴇ.4; ; [B1, B2, B3]; xn--jpb846bjzj7pr.4; ; ; # ݟᮢ်ⴇ.4
-xn--jpb846bjzj7pr.4; ݟᮢ်ⴇ.4; [B1, B2, B3]; xn--jpb846bjzj7pr.4; ; ; # ݟᮢ်ⴇ.4
-xn--jpb846bmjw88a.4; ݟᮢ်Ⴇ.4; [B1, B2, B3, V6]; xn--jpb846bmjw88a.4; ; ; # ݟᮢ်Ⴇ.4
-ᄹ。໊򠯤󠄞; ᄹ.໊򠯤; [P1, V5, V6]; xn--lrd.xn--s8c05302k; ; ; # ᄹ.໊
-ᄹ。໊򠯤󠄞; ᄹ.໊򠯤; [P1, V5, V6]; xn--lrd.xn--s8c05302k; ; ; # ᄹ.໊
-xn--lrd.xn--s8c05302k; ᄹ.໊򠯤; [V5, V6]; xn--lrd.xn--s8c05302k; ; ; # ᄹ.໊
-Ⴆò»¢©ï¼Žó †¡ï¸‰ðž¤; Ⴆò»¢©.𞤯; [P1, V6]; xn--end82983m.xn--ne6h; ; ; # Ⴆ.𞤯
-Ⴆò»¢©.󠆡︉ðž¤; Ⴆò»¢©.𞤯; [P1, V6]; xn--end82983m.xn--ne6h; ; ; # Ⴆ.𞤯
-ⴆ򻢩.󠆡︉𞤯; ⴆ򻢩.𞤯; [P1, V6]; xn--xkjw3965g.xn--ne6h; ; ; # ⴆ.𞤯
+\uA8C4≠.𞠨\u0667; \uA8C4≠.𞠨\u0667; [B1, V5]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧
+\uA8C4=\u0338.𞠨\u0667; \uA8C4≠.𞠨\u0667; [B1, V5]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧
+\uA8C4≠.𞠨\u0667; ; [B1, V5]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧
+\uA8C4=\u0338.𞠨\u0667; \uA8C4≠.𞠨\u0667; [B1, V5]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧
+xn--1chy504c.xn--gib1777v; \uA8C4≠.𞠨\u0667; [B1, V5]; xn--1chy504c.xn--gib1777v; ; ; # ꣄≠.𞠨٧
+ðŸ›ð†ª\uA8C4。\uA8EA-; 3\uA8C4ð†ª.\uA8EA-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄ð†ª.꣪-
+ðŸ›\uA8C4ð†ªï½¡\uA8EA-; 3\uA8C4ð†ª.\uA8EA-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄ð†ª.꣪-
+3\uA8C4ð†ªã€‚\uA8EA-; 3\uA8C4ð†ª.\uA8EA-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄ð†ª.꣪-
+xn--3-sl4eu679e.xn----xn4e; 3\uA8C4ð†ª.\uA8EA-; [V3, V5]; xn--3-sl4eu679e.xn----xn4e; ; ; # 3꣄ð†ª.꣪-
+\u075F\u1BA2\u103AႧ.4; ; [B1, B2, B3, V6]; xn--jpb846bmjw88a.4; ; ; # ݟᮢ်Ⴇ.4
+\u075F\u1BA2\u103Aⴇ.4; ; [B1, B2, B3]; xn--jpb846bjzj7pr.4; ; ; # ݟᮢ်ⴇ.4
+xn--jpb846bjzj7pr.4; \u075F\u1BA2\u103Aⴇ.4; [B1, B2, B3]; xn--jpb846bjzj7pr.4; ; ; # ݟᮢ်ⴇ.4
+xn--jpb846bmjw88a.4; \u075F\u1BA2\u103AႧ.4; [B1, B2, B3, V6]; xn--jpb846bmjw88a.4; ; ; # ݟᮢ်Ⴇ.4
+ᄹ。\u0ECA򠯤󠄞; ᄹ.\u0ECA򠯤; [V5, V6]; xn--lrd.xn--s8c05302k; ; ; # ᄹ.໊
+ᄹ。\u0ECA򠯤󠄞; ᄹ.\u0ECA򠯤; [V5, V6]; xn--lrd.xn--s8c05302k; ; ; # ᄹ.໊
+xn--lrd.xn--s8c05302k; ᄹ.\u0ECA򠯤; [V5, V6]; xn--lrd.xn--s8c05302k; ; ; # ᄹ.໊
+Ⴆò»¢©ï¼Žó †¡\uFE09ðž¤; Ⴆò»¢©.𞤯; [V6]; xn--end82983m.xn--ne6h; ; ; # Ⴆ.𞤯
+Ⴆò»¢©.󠆡\uFE09ðž¤; Ⴆò»¢©.𞤯; [V6]; xn--end82983m.xn--ne6h; ; ; # Ⴆ.𞤯
+ⴆ򻢩.󠆡\uFE09𞤯; ⴆ򻢩.𞤯; [V6]; xn--xkjw3965g.xn--ne6h; ; ; # ⴆ.𞤯
xn--xkjw3965g.xn--ne6h; ⴆ򻢩.𞤯; [V6]; xn--xkjw3965g.xn--ne6h; ; ; # ⴆ.𞤯
xn--end82983m.xn--ne6h; Ⴆ򻢩.𞤯; [V6]; xn--end82983m.xn--ne6h; ; ; # Ⴆ.𞤯
-ⴆ򻢩.󠆡︉𞤯; ⴆ򻢩.𞤯; [P1, V6]; xn--xkjw3965g.xn--ne6h; ; ; # ⴆ.𞤯
-â´†ò»¢©.󠆡︉ðž¤; â´†ò»¢©.𞤯; [P1, V6]; xn--xkjw3965g.xn--ne6h; ; ; # â´†.𞤯
-â´†ò»¢©ï¼Žó †¡ï¸‰ðž¤; â´†ò»¢©.𞤯; [P1, V6]; xn--xkjw3965g.xn--ne6h; ; ; # â´†.𞤯
-ßࠋ︒ٻ.帼F∬‌; ßࠋ︒ٻ.帼f∫∫‌; [B5, B6, C1, P1, V6]; xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, P1, V6] # ßࠋ︒ٻ.帼f∫∫
-ßࠋ。ٻ.帼F∫∫‌; ßࠋ.ٻ.帼f∫∫‌; [B5, B6, C1]; xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ßࠋ.ٻ.帼f∫∫
-ßࠋ。ٻ.帼f∫∫‌; ßࠋ.ٻ.帼f∫∫‌; [B5, B6, C1]; xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ßࠋ.ٻ.帼f∫∫
-SSࠋ。ٻ.帼F∫∫‌; ssࠋ.ٻ.帼f∫∫‌; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ssࠋ.ٻ.帼f∫∫
-ssࠋ。ٻ.帼f∫∫‌; ssࠋ.ٻ.帼f∫∫‌; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ssࠋ.ٻ.帼f∫∫
-Ssࠋ。ٻ.帼F∫∫‌; ssࠋ.ٻ.帼f∫∫‌; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ssࠋ.ٻ.帼f∫∫
-xn--ss-uze.xn--0ib.xn--f-tcoa9162d; ssࠋ.ٻ.帼f∫∫; [B5, B6]; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; ; ; # ssࠋ.ٻ.帼f∫∫
-xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ssࠋ.ٻ.帼f∫∫‌; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; ; # ssࠋ.ٻ.帼f∫∫
-xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ßࠋ.ٻ.帼f∫∫‌; [B5, B6, C1]; xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ; ; # ßࠋ.ٻ.帼f∫∫
-ßࠋ︒ٻ.帼f∬‌; ßࠋ︒ٻ.帼f∫∫‌; [B5, B6, C1, P1, V6]; xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, P1, V6] # ßࠋ︒ٻ.帼f∫∫
-SSࠋ︒ٻ.帼F∬‌; ssࠋ︒ٻ.帼f∫∫‌; [B5, B6, C1, P1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, P1, V6] # ssࠋ︒ٻ.帼f∫∫
-ssࠋ︒ٻ.帼f∬‌; ssࠋ︒ٻ.帼f∫∫‌; [B5, B6, C1, P1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, P1, V6] # ssࠋ︒ٻ.帼f∫∫
-Ssࠋ︒ٻ.帼F∬‌; ssࠋ︒ٻ.帼f∫∫‌; [B5, B6, C1, P1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, P1, V6] # ssࠋ︒ٻ.帼f∫∫
-xn--ss-k0d31nu121d.xn--f-tcoa9162d; ssࠋ︒ٻ.帼f∫∫; [B5, B6, V6]; xn--ss-k0d31nu121d.xn--f-tcoa9162d; ; ; # ssࠋ︒ٻ.帼f∫∫
-xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ssࠋ︒ٻ.帼f∫∫‌; [B5, B6, C1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; ; # ssࠋ︒ٻ.帼f∫∫
-xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ßࠋ︒ٻ.帼f∫∫‌; [B5, B6, C1, V6]; xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ; ; # ßࠋ︒ٻ.帼f∫∫
-󘪗。ð¹´ðž¨Œâ€; 󘪗.ð¹´ðž¨Œâ€; [B1, C2, P1, V6]; xn--8l83e.xn--1ug4105gsxwf; ; xn--8l83e.xn--so0dw168a; [B1, P1, V6] # .ð¹´
-󘪗。ð¹´ðž¨Œâ€; 󘪗.ð¹´ðž¨Œâ€; [B1, C2, P1, V6]; xn--8l83e.xn--1ug4105gsxwf; ; xn--8l83e.xn--so0dw168a; [B1, P1, V6] # .ð¹´
+ⴆ򻢩.󠆡\uFE09𞤯; ⴆ򻢩.𞤯; [V6]; xn--xkjw3965g.xn--ne6h; ; ; # ⴆ.𞤯
+â´†ò»¢©.󠆡\uFE09ðž¤; â´†ò»¢©.𞤯; [V6]; xn--xkjw3965g.xn--ne6h; ; ; # â´†.𞤯
+â´†ò»¢©ï¼Žó †¡\uFE09ðž¤; â´†ò»¢©.𞤯; [V6]; xn--xkjw3965g.xn--ne6h; ; ; # â´†.𞤯
+ß\u080B︒\u067B.帼F∬\u200C; ß\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, V6] # ßࠋ︒ٻ.帼f∫∫
+ß\u080B。\u067B.帼F∫∫\u200C; ß\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ßࠋ.ٻ.帼f∫∫
+ß\u080B。\u067B.帼f∫∫\u200C; ß\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ßࠋ.ٻ.帼f∫∫
+SS\u080B。\u067B.帼F∫∫\u200C; ss\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ssࠋ.ٻ.帼f∫∫
+ss\u080B。\u067B.帼f∫∫\u200C; ss\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ssࠋ.ٻ.帼f∫∫
+Ss\u080B。\u067B.帼F∫∫\u200C; ss\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; [B5, B6] # ssࠋ.ٻ.帼f∫∫
+xn--ss-uze.xn--0ib.xn--f-tcoa9162d; ss\u080B.\u067B.帼f∫∫; [B5, B6]; xn--ss-uze.xn--0ib.xn--f-tcoa9162d; ; ; # ssࠋ.ٻ.帼f∫∫
+xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ss\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--ss-uze.xn--0ib.xn--f-sgn48ga6997e; ; ; # ssࠋ.ٻ.帼f∫∫
+xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ß\u080B.\u067B.帼f∫∫\u200C; [B5, B6, C1]; xn--zca687a.xn--0ib.xn--f-sgn48ga6997e; ; ; # ßࠋ.ٻ.帼f∫∫
+ß\u080B︒\u067B.帼f∬\u200C; ß\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, V6] # ßࠋ︒ٻ.帼f∫∫
+SS\u080B︒\u067B.帼F∬\u200C; ss\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, V6] # ssࠋ︒ٻ.帼f∫∫
+ss\u080B︒\u067B.帼f∬\u200C; ss\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, V6] # ssࠋ︒ٻ.帼f∫∫
+Ss\u080B︒\u067B.帼F∬\u200C; ss\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; xn--ss-k0d31nu121d.xn--f-tcoa9162d; [B5, B6, V6] # ssࠋ︒ٻ.帼f∫∫
+xn--ss-k0d31nu121d.xn--f-tcoa9162d; ss\u080B︒\u067B.帼f∫∫; [B5, B6, V6]; xn--ss-k0d31nu121d.xn--f-tcoa9162d; ; ; # ssࠋ︒ٻ.帼f∫∫
+xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ss\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--ss-k0d31nu121d.xn--f-sgn48ga6997e; ; ; # ssࠋ︒ٻ.帼f∫∫
+xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ß\u080B︒\u067B.帼f∫∫\u200C; [B5, B6, C1, V6]; xn--zca68zj8ac956c.xn--f-sgn48ga6997e; ; ; # ßࠋ︒ٻ.帼f∫∫
+󘪗。ð¹´ðž¨Œ\u200D; 󘪗.ð¹´ðž¨Œ\u200D; [B1, C2, V6]; xn--8l83e.xn--1ug4105gsxwf; ; xn--8l83e.xn--so0dw168a; [B1, V6] # .ð¹´
+󘪗。ð¹´ðž¨Œ\u200D; 󘪗.ð¹´ðž¨Œ\u200D; [B1, C2, V6]; xn--8l83e.xn--1ug4105gsxwf; ; xn--8l83e.xn--so0dw168a; [B1, V6] # .ð¹´
xn--8l83e.xn--so0dw168a; 󘪗.ð¹´ðž¨Œ; [B1, V6]; xn--8l83e.xn--so0dw168a; ; ; # .ð¹´
-xn--8l83e.xn--1ug4105gsxwf; 󘪗.ð¹´ðž¨Œâ€; [B1, C2, V6]; xn--8l83e.xn--1ug4105gsxwf; ; ; # .ð¹´
-ñ—›¨.ò…Ÿ¢ðŸ¨ê£„; ñ—›¨.ò…Ÿ¢6꣄; [P1, V6]; xn--mi60a.xn--6-sl4es8023c; ; ; # .6꣄
-񗛨.򅟢6꣄; ; [P1, V6]; xn--mi60a.xn--6-sl4es8023c; ; ; # .6꣄
-xn--mi60a.xn--6-sl4es8023c; 񗛨.򅟢6꣄; [V6]; xn--mi60a.xn--6-sl4es8023c; ; ; # .6꣄
-᪲ﶎ。-۹ႱႨ; ᪲مخج.-۹ႱႨ; [B1, P1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc155e9a; ; ; # ᪲مخج.-۹ႱႨ
-᪲مخج。-۹ႱႨ; ᪲مخج.-۹ႱႨ; [B1, P1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc155e9a; ; ; # ᪲مخج.-۹ႱႨ
-᪲مخج。-۹ⴑⴈ; ᪲مخج.-۹ⴑⴈ; [B1, V3, V5]; xn--rgbd2e831i.xn----zyc3430a9a; ; ; # ᪲مخج.-۹ⴑⴈ
-xn--rgbd2e831i.xn----zyc3430a9a; ᪲مخج.-۹ⴑⴈ; [B1, V3, V5]; xn--rgbd2e831i.xn----zyc3430a9a; ; ; # ᪲مخج.-۹ⴑⴈ
-xn--rgbd2e831i.xn----zyc155e9a; ᪲مخج.-۹ႱႨ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc155e9a; ; ; # ᪲مخج.-۹ႱႨ
-᪲ﶎ。-۹ⴑⴈ; ᪲مخج.-۹ⴑⴈ; [B1, V3, V5]; xn--rgbd2e831i.xn----zyc3430a9a; ; ; # ᪲مخج.-۹ⴑⴈ
-᪲مخج。-۹Ⴑⴈ; ᪲مخج.-۹Ⴑⴈ; [B1, P1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc875efr3a; ; ; # ᪲مخج.-۹Ⴑⴈ
-xn--rgbd2e831i.xn----zyc875efr3a; ᪲مخج.-۹Ⴑⴈ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc875efr3a; ; ; # ᪲مخج.-۹Ⴑⴈ
-᪲ﶎ。-۹Ⴑⴈ; ᪲مخج.-۹Ⴑⴈ; [B1, P1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc875efr3a; ; ; # ᪲مخج.-۹Ⴑⴈ
-𞤤.-ࢣ︒; 𞤤.-ࢣ︒; [B1, P1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒
-𞤤.-ࢣ。; 𞤤.-ࢣ.; [B1, V3]; xn--ce6h.xn----cod.; ; ; # 𞤤.-ࢣ.
-𞤂.-ࢣ。; 𞤤.-ࢣ.; [B1, V3]; xn--ce6h.xn----cod.; ; ; # 𞤤.-ࢣ.
-xn--ce6h.xn----cod.; 𞤤.-ࢣ.; [B1, V3]; xn--ce6h.xn----cod.; ; ; # 𞤤.-ࢣ.
-𞤂.-ࢣ︒; 𞤤.-ࢣ︒; [B1, P1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒
-xn--ce6h.xn----cod7069p; 𞤤.-ࢣ︒; [B1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒
-‌ðº¨.à¡™--; ; [B1, C1, V3, V5]; xn--0ug7905g.xn-----h6e; ; xn--9p0d.xn-----h6e; [B1, V3, V5] # ðº¨.à¡™--
-xn--9p0d.xn-----h6e; ðº¨.à¡™--; [B1, V3, V5]; xn--9p0d.xn-----h6e; ; ; # ðº¨.à¡™--
-xn--0ug7905g.xn-----h6e; ‌ðº¨.à¡™--; [B1, C1, V3, V5]; xn--0ug7905g.xn-----h6e; ; ; # ðº¨.à¡™--
-ð‹¸ó®˜‹áƒ‚.á‚¡; ; [P1, V6]; xn--6nd5215jr2u0h.xn--8md; ; ; # ð‹¸áƒ‚.á‚¡
-ð‹¸ó®˜‹â´¢.â´; ; [P1, V6]; xn--qlj1559dr224h.xn--skj; ; ; # ð‹¸â´¢.â´
-ð‹¸ó®˜‹áƒ‚.â´; ; [P1, V6]; xn--6nd5215jr2u0h.xn--skj; ; ; # ð‹¸áƒ‚.â´
+xn--8l83e.xn--1ug4105gsxwf; 󘪗.ð¹´ðž¨Œ\u200D; [B1, C2, V6]; xn--8l83e.xn--1ug4105gsxwf; ; ; # .ð¹´
+ñ—›¨.ò…Ÿ¢ðŸ¨\uA8C4; ñ—›¨.ò…Ÿ¢6\uA8C4; [V6]; xn--mi60a.xn--6-sl4es8023c; ; ; # .6꣄
+񗛨.򅟢6\uA8C4; ; [V6]; xn--mi60a.xn--6-sl4es8023c; ; ; # .6꣄
+xn--mi60a.xn--6-sl4es8023c; 񗛨.򅟢6\uA8C4; [V6]; xn--mi60a.xn--6-sl4es8023c; ; ; # .6꣄
+\u1AB2\uFD8E。-۹ႱႨ; \u1AB2\u0645\u062E\u062C.-۹ႱႨ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc155e9a; ; ; # ᪲مخج.-۹ႱႨ
+\u1AB2\u0645\u062E\u062C。-۹ႱႨ; \u1AB2\u0645\u062E\u062C.-۹ႱႨ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc155e9a; ; ; # ᪲مخج.-۹ႱႨ
+\u1AB2\u0645\u062E\u062C。-۹ⴑⴈ; \u1AB2\u0645\u062E\u062C.-۹ⴑⴈ; [B1, V3, V5]; xn--rgbd2e831i.xn----zyc3430a9a; ; ; # ᪲مخج.-۹ⴑⴈ
+xn--rgbd2e831i.xn----zyc3430a9a; \u1AB2\u0645\u062E\u062C.-۹ⴑⴈ; [B1, V3, V5]; xn--rgbd2e831i.xn----zyc3430a9a; ; ; # ᪲مخج.-۹ⴑⴈ
+xn--rgbd2e831i.xn----zyc155e9a; \u1AB2\u0645\u062E\u062C.-۹ႱႨ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc155e9a; ; ; # ᪲مخج.-۹ႱႨ
+\u1AB2\uFD8E。-۹ⴑⴈ; \u1AB2\u0645\u062E\u062C.-۹ⴑⴈ; [B1, V3, V5]; xn--rgbd2e831i.xn----zyc3430a9a; ; ; # ᪲مخج.-۹ⴑⴈ
+\u1AB2\u0645\u062E\u062C。-۹Ⴑⴈ; \u1AB2\u0645\u062E\u062C.-۹Ⴑⴈ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc875efr3a; ; ; # ᪲مخج.-۹Ⴑⴈ
+xn--rgbd2e831i.xn----zyc875efr3a; \u1AB2\u0645\u062E\u062C.-۹Ⴑⴈ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc875efr3a; ; ; # ᪲مخج.-۹Ⴑⴈ
+\u1AB2\uFD8E。-۹Ⴑⴈ; \u1AB2\u0645\u062E\u062C.-۹Ⴑⴈ; [B1, V3, V5, V6]; xn--rgbd2e831i.xn----zyc875efr3a; ; ; # ᪲مخج.-۹Ⴑⴈ
+𞤤.-\u08A3︒; 𞤤.-\u08A3︒; [B1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒
+𞤤.-\u08A3。; 𞤤.-\u08A3.; [B1, V3]; xn--ce6h.xn----cod.; ; ; # 𞤤.-ࢣ.
+𞤂.-\u08A3。; 𞤤.-\u08A3.; [B1, V3]; xn--ce6h.xn----cod.; ; ; # 𞤤.-ࢣ.
+xn--ce6h.xn----cod.; 𞤤.-\u08A3.; [B1, V3]; xn--ce6h.xn----cod.; ; ; # 𞤤.-ࢣ.
+𞤂.-\u08A3︒; 𞤤.-\u08A3︒; [B1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒
+xn--ce6h.xn----cod7069p; 𞤤.-\u08A3︒; [B1, V3, V6]; xn--ce6h.xn----cod7069p; ; ; # 𞤤.-ࢣ︒
+\u200Cðº¨.\u0859--; ; [B1, C1, V3, V5]; xn--0ug7905g.xn-----h6e; ; xn--9p0d.xn-----h6e; [B1, V3, V5] # ðº¨.à¡™--
+xn--9p0d.xn-----h6e; ðº¨.\u0859--; [B1, V3, V5]; xn--9p0d.xn-----h6e; ; ; # ðº¨.à¡™--
+xn--0ug7905g.xn-----h6e; \u200Cðº¨.\u0859--; [B1, C1, V3, V5]; xn--0ug7905g.xn-----h6e; ; ; # ðº¨.à¡™--
+ð‹¸ó®˜‹áƒ‚.á‚¡; ; [V6]; xn--6nd5215jr2u0h.xn--8md; ; ; # ð‹¸áƒ‚.á‚¡
+ð‹¸ó®˜‹â´¢.â´; ; [V6]; xn--qlj1559dr224h.xn--skj; ; ; # ð‹¸â´¢.â´
+ð‹¸ó®˜‹áƒ‚.â´; ; [V6]; xn--6nd5215jr2u0h.xn--skj; ; ; # ð‹¸áƒ‚.â´
xn--6nd5215jr2u0h.xn--skj; ð‹¸ó®˜‹áƒ‚.â´; [V6]; xn--6nd5215jr2u0h.xn--skj; ; ; # ð‹¸áƒ‚.â´
xn--qlj1559dr224h.xn--skj; ð‹¸ó®˜‹â´¢.â´; [V6]; xn--qlj1559dr224h.xn--skj; ; ; # ð‹¸â´¢.â´
xn--6nd5215jr2u0h.xn--8md; ð‹¸ó®˜‹áƒ‚.á‚¡; [V6]; xn--6nd5215jr2u0h.xn--8md; ; ; # ð‹¸áƒ‚.á‚¡
-񗑿꠆₄򩞆。𲩧󠒹ς; 񗑿꠆4򩞆.𲩧󠒹ς; [P1, V6]; xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; ; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; # ꠆4.ς
-񗑿꠆4򩞆。𲩧󠒹ς; 񗑿꠆4򩞆.𲩧󠒹ς; [P1, V6]; xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; ; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; # ꠆4.ς
-񗑿꠆4򩞆。𲩧󠒹Σ; 񗑿꠆4򩞆.𲩧󠒹σ; [P1, V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ
-񗑿꠆4򩞆。𲩧󠒹σ; 񗑿꠆4򩞆.𲩧󠒹σ; [P1, V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ
-xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; 񗑿꠆4򩞆.𲩧󠒹σ; [V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ
-xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; 񗑿꠆4򩞆.𲩧󠒹ς; [V6]; xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; ; ; # ꠆4.ς
-񗑿꠆₄򩞆。𲩧󠒹Σ; 񗑿꠆4򩞆.𲩧󠒹σ; [P1, V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ
-񗑿꠆₄򩞆。𲩧󠒹σ; 񗑿꠆4򩞆.𲩧󠒹σ; [P1, V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ
-󠆀ܣ。ᷴݵ; ܣ.ᷴݵ; [B1, V5]; xn--tnb.xn--5pb136i; ; ; # ܣ.ᷴݵ
-xn--tnb.xn--5pb136i; ܣ.ᷴݵ; [B1, V5]; xn--tnb.xn--5pb136i; ; ; # ܣ.ᷴݵ
-ð¹±à¡‚ðª¨ï½¡ð¬¼–Ⴑâ€; ð¹±à¡‚ðª¨.𬼖Ⴑâ€; [B1, B6, C2, P1, V6]; xn--0vb1535kdb6e.xn--pnd879eqy33c; ; xn--0vb1535kdb6e.xn--pnd93707a; [B1, P1, V6] # ð¹±à¡‚ðª¨.𬼖Ⴑ
-ð¹±à¡‚ðª¨ã€‚𬼖Ⴑâ€; ð¹±à¡‚ðª¨.𬼖Ⴑâ€; [B1, B6, C2, P1, V6]; xn--0vb1535kdb6e.xn--pnd879eqy33c; ; xn--0vb1535kdb6e.xn--pnd93707a; [B1, P1, V6] # ð¹±à¡‚ðª¨.𬼖Ⴑ
-ð¹±à¡‚ðª¨ã€‚𬼖ⴑâ€; ð¹±à¡‚ðª¨.𬼖ⴑâ€; [B1, B6, C2]; xn--0vb1535kdb6e.xn--1ug742c5714c; ; xn--0vb1535kdb6e.xn--8kjz186s; [B1] # ð¹±à¡‚ðª¨.𬼖ⴑ
-xn--0vb1535kdb6e.xn--8kjz186s; ð¹±à¡‚ðª¨.𬼖ⴑ; [B1]; xn--0vb1535kdb6e.xn--8kjz186s; ; ; # ð¹±à¡‚ðª¨.𬼖ⴑ
-xn--0vb1535kdb6e.xn--1ug742c5714c; ð¹±à¡‚ðª¨.𬼖ⴑâ€; [B1, B6, C2]; xn--0vb1535kdb6e.xn--1ug742c5714c; ; ; # ð¹±à¡‚ðª¨.𬼖ⴑ
-xn--0vb1535kdb6e.xn--pnd93707a; ð¹±à¡‚ðª¨.𬼖Ⴑ; [B1, V6]; xn--0vb1535kdb6e.xn--pnd93707a; ; ; # ð¹±à¡‚ðª¨.𬼖Ⴑ
-xn--0vb1535kdb6e.xn--pnd879eqy33c; ð¹±à¡‚ðª¨.𬼖Ⴑâ€; [B1, B6, C2, V6]; xn--0vb1535kdb6e.xn--pnd879eqy33c; ; ; # ð¹±à¡‚ðª¨.𬼖Ⴑ
-ð¹±à¡‚ðª¨ï½¡ð¬¼–â´‘â€; ð¹±à¡‚ðª¨.𬼖ⴑâ€; [B1, B6, C2]; xn--0vb1535kdb6e.xn--1ug742c5714c; ; xn--0vb1535kdb6e.xn--8kjz186s; [B1] # ð¹±à¡‚ðª¨.𬼖ⴑ
-᜔ð­ªó ™˜â€ï½¡-ð¹´; ᜔ð­ªó ™˜â€.-ð¹´; [B1, C2, P1, V3, V5, V6]; xn--fze807bso0spy14i.xn----c36i; ; xn--fze4126jujt0g.xn----c36i; [B1, P1, V3, V5, V6] # ᜔ð­ª.-ð¹´
-᜔ð­ªó ™˜â€ã€‚-ð¹´; ᜔ð­ªó ™˜â€.-ð¹´; [B1, C2, P1, V3, V5, V6]; xn--fze807bso0spy14i.xn----c36i; ; xn--fze4126jujt0g.xn----c36i; [B1, P1, V3, V5, V6] # ᜔ð­ª.-ð¹´
-xn--fze4126jujt0g.xn----c36i; ᜔ð­ªó ™˜.-ð¹´; [B1, V3, V5, V6]; xn--fze4126jujt0g.xn----c36i; ; ; # ᜔ð­ª.-ð¹´
-xn--fze807bso0spy14i.xn----c36i; ᜔ð­ªó ™˜â€.-ð¹´; [B1, C2, V3, V5, V6]; xn--fze807bso0spy14i.xn----c36i; ; ; # ᜔ð­ª.-ð¹´
-𾢬。ܩ︒쯙ðŸ§; 𾢬.ܩ︒쯙5; [B2, P1, V6]; xn--t92s.xn--5-p1c0712mm8rb; ; ; # .ܩ︒쯙5
-𾢬。ܩ︒á„ᅳᆬðŸ§; 𾢬.ܩ︒쯙5; [B2, P1, V6]; xn--t92s.xn--5-p1c0712mm8rb; ; ; # .ܩ︒쯙5
-𾢬。ܩ。쯙5; 𾢬.ܩ.쯙5; [P1, V6]; xn--t92s.xn--znb.xn--5-y88f; ; ; # .ܩ.쯙5
-𾢬。ܩ。á„ᅳᆬ5; 𾢬.Ü©.쯙5; [P1, V6]; xn--t92s.xn--znb.xn--5-y88f; ; ; # .Ü©.쯙5
-xn--t92s.xn--znb.xn--5-y88f; 𾢬.ܩ.쯙5; [V6]; xn--t92s.xn--znb.xn--5-y88f; ; ; # .ܩ.쯙5
-xn--t92s.xn--5-p1c0712mm8rb; 𾢬.ܩ︒쯙5; [B2, V6]; xn--t92s.xn--5-p1c0712mm8rb; ; ; # .ܩ︒쯙5
-𞤟-。ݢ≮ë»; ðž¥-.ݢ≮ë»; [B2, B3, P1, V3, V6]; xn----1j8r.xn--mpb269krv4i; ; ; # ðž¥-.ݢ≮ë»
-𞤟-。ݢ≮뻐; ðž¥-.ݢ≮ë»; [B2, B3, P1, V3, V6]; xn----1j8r.xn--mpb269krv4i; ; ; # ðž¥-.ݢ≮ë»
-ðž¥-。ݢ≮뻐; ðž¥-.ݢ≮ë»; [B2, B3, P1, V3, V6]; xn----1j8r.xn--mpb269krv4i; ; ; # ðž¥-.ݢ≮ë»
-ðž¥-。ݢ≮ë»; ðž¥-.ݢ≮ë»; [B2, B3, P1, V3, V6]; xn----1j8r.xn--mpb269krv4i; ; ; # ðž¥-.ݢ≮ë»
-xn----1j8r.xn--mpb269krv4i; ðž¥-.ݢ≮ë»; [B2, B3, V3, V6]; xn----1j8r.xn--mpb269krv4i; ; ; # ðž¥-.ݢ≮ë»
-𞥩-򊫠.ࢴ≠; 𞥩-򊫠.ࢴ≠; [B2, B3, P1, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠
-𞥩-򊫠.ࢴ≠; 𞥩-򊫠.ࢴ≠; [B2, B3, P1, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠
-𞥩-򊫠.ࢴ≠; ; [B2, B3, P1, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠
-𞥩-򊫠.ࢴ≠; 𞥩-򊫠.ࢴ≠; [B2, B3, P1, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠
-xn----cm8rp3609a.xn--9yb852k; 𞥩-򊫠.ࢴ≠; [B2, B3, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠
--ñ…‚ςႼ.١; -ñ…‚ςႼ.Ù¡; [B1, P1, V3, V6]; xn----ymb080hun11i.xn--9hb; ; xn----0mb770hun11i.xn--9hb; # -ςႼ.Ù¡
--ñ…‚ςႼ.Ù¡; ; [B1, P1, V3, V6]; xn----ymb080hun11i.xn--9hb; ; xn----0mb770hun11i.xn--9hb; # -ςႼ.Ù¡
--ñ…‚Ï‚â´œ.Ù¡; ; [B1, P1, V3, V6]; xn----ymb2782aov12f.xn--9hb; ; xn----0mb9682aov12f.xn--9hb; # -Ï‚â´œ.Ù¡
--ñ…‚ΣႼ.Ù¡; -ñ…‚σႼ.Ù¡; [B1, P1, V3, V6]; xn----0mb770hun11i.xn--9hb; ; ; # -σႼ.Ù¡
--ñ…‚σⴜ.Ù¡; ; [B1, P1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.Ù¡
--ñ…‚Σⴜ.Ù¡; -ñ…‚σⴜ.Ù¡; [B1, P1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.Ù¡
-xn----0mb9682aov12f.xn--9hb; -ñ…‚σⴜ.Ù¡; [B1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.Ù¡
-xn----0mb770hun11i.xn--9hb; -ñ…‚σႼ.Ù¡; [B1, V3, V6]; xn----0mb770hun11i.xn--9hb; ; ; # -σႼ.Ù¡
-xn----ymb2782aov12f.xn--9hb; -ñ…‚Ï‚â´œ.Ù¡; [B1, V3, V6]; xn----ymb2782aov12f.xn--9hb; ; ; # -Ï‚â´œ.Ù¡
-xn----ymb080hun11i.xn--9hb; -ñ…‚ςႼ.Ù¡; [B1, V3, V6]; xn----ymb080hun11i.xn--9hb; ; ; # -ςႼ.Ù¡
--ñ…‚ςⴜ.١; -ñ…‚Ï‚â´œ.Ù¡; [B1, P1, V3, V6]; xn----ymb2782aov12f.xn--9hb; ; xn----0mb9682aov12f.xn--9hb; # -Ï‚â´œ.Ù¡
--ñ…‚ΣႼ.١; -ñ…‚σႼ.Ù¡; [B1, P1, V3, V6]; xn----0mb770hun11i.xn--9hb; ; ; # -σႼ.Ù¡
--ñ…‚σⴜ.١; -ñ…‚σⴜ.Ù¡; [B1, P1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.Ù¡
--ñ…‚Σⴜ.١; -ñ…‚σⴜ.Ù¡; [B1, P1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.Ù¡
-៊.â€ðŸ®ð‘€¿; ៊.â€2𑀿; [C2, V5]; xn--m4e.xn--2-tgnv469h; ; xn--m4e.xn--2-ku7i; [V5] # ៊.2𑀿
-៊.â€2𑀿; ; [C2, V5]; xn--m4e.xn--2-tgnv469h; ; xn--m4e.xn--2-ku7i; [V5] # ៊.2𑀿
-xn--m4e.xn--2-ku7i; ៊.2𑀿; [V5]; xn--m4e.xn--2-ku7i; ; ; # ៊.2𑀿
-xn--m4e.xn--2-tgnv469h; ៊.â€2𑀿; [C2, V5]; xn--m4e.xn--2-tgnv469h; ; ; # ៊.2𑀿
-≯ðŸ–。᩠ð«“òŸ‡‘; ≯8.á© ð«“òŸ‡‘; [B1, P1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.á© ð«“
-≯ðŸ–。᩠ð«“òŸ‡‘; ≯8.á© ð«“òŸ‡‘; [B1, P1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.á© ð«“
-≯8。᩠ð«“òŸ‡‘; ≯8.á© ð«“òŸ‡‘; [B1, P1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.á© ð«“
-≯8。᩠ð«“òŸ‡‘; ≯8.á© ð«“òŸ‡‘; [B1, P1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.á© ð«“
-xn--8-ogo.xn--jof5303iv1z5d; ≯8.á© ð«“òŸ‡‘; [B1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.á© ð«“
-𑲫Ↄ٤。‌; 𑲫Ↄ٤.‌; [B1, C1, P1, V5, V6]; xn--dib999kcy1p.xn--0ug; ; xn--dib999kcy1p.; [B1, P1, V5, V6] # 𑲫Ↄ٤.
-𑲫Ↄ٤。‌; 𑲫Ↄ٤.‌; [B1, C1, P1, V5, V6]; xn--dib999kcy1p.xn--0ug; ; xn--dib999kcy1p.; [B1, P1, V5, V6] # 𑲫Ↄ٤.
-𑲫ↄ٤。‌; 𑲫ↄ٤.‌; [B1, C1, V5]; xn--dib100l8x1p.xn--0ug; ; xn--dib100l8x1p.; [B1, V5] # 𑲫ↄ٤.
-xn--dib100l8x1p.; 𑲫ↄ٤.; [B1, V5]; xn--dib100l8x1p.; ; ; # 𑲫ↄ٤.
-xn--dib100l8x1p.xn--0ug; 𑲫ↄ٤.‌; [B1, C1, V5]; xn--dib100l8x1p.xn--0ug; ; ; # 𑲫ↄ٤.
-xn--dib999kcy1p.; 𑲫Ↄ٤.; [B1, V5, V6]; xn--dib999kcy1p.; ; ; # 𑲫Ↄ٤.
-xn--dib999kcy1p.xn--0ug; 𑲫Ↄ٤.‌; [B1, C1, V5, V6]; xn--dib999kcy1p.xn--0ug; ; ; # 𑲫Ↄ٤.
-𑲫ↄ٤。‌; 𑲫ↄ٤.‌; [B1, C1, V5]; xn--dib100l8x1p.xn--0ug; ; xn--dib100l8x1p.; [B1, V5] # 𑲫ↄ٤.
-à°€ðŸµâ€ï².â€Ýâ’ˆ; à°€9â€Ø¨Ø­.â€Ýâ’ˆ; [B1, C2, P1, V5, V6]; xn--9-1mcp570dl51a.xn--3ob977jmfd; ; xn--9-1mcp570d.xn--3ob470m; [B1, P1, V5, V6] # à°€9بح.Ýâ’ˆ
-à°€9â€Ø¨Ø­.â€Ý1.; ; [B1, C2, V5]; xn--9-1mcp570dl51a.xn--1-x3c211q.; ; xn--9-1mcp570d.xn--1-x3c.; [B1, V5] # à°€9بح.Ý1.
-xn--9-1mcp570d.xn--1-x3c.; à°€9بح.Ý1.; [B1, V5]; xn--9-1mcp570d.xn--1-x3c.; ; ; # à°€9بح.Ý1.
-xn--9-1mcp570dl51a.xn--1-x3c211q.; à°€9â€Ø¨Ø­.â€Ý1.; [B1, C2, V5]; xn--9-1mcp570dl51a.xn--1-x3c211q.; ; ; # à°€9بح.Ý1.
-xn--9-1mcp570d.xn--3ob470m; à°€9بح.Ýâ’ˆ; [B1, V5, V6]; xn--9-1mcp570d.xn--3ob470m; ; ; # à°€9بح.Ýâ’ˆ
-xn--9-1mcp570dl51a.xn--3ob977jmfd; à°€9â€Ø¨Ø­.â€Ýâ’ˆ; [B1, C2, V5, V6]; xn--9-1mcp570dl51a.xn--3ob977jmfd; ; ; # à°€9بح.Ýâ’ˆ
-꫶。嬶ß葽; ꫶.嬶ß葽; [V5]; xn--2v9a.xn--zca7637b14za; ; xn--2v9a.xn--ss-q40dp97m; # ꫶.嬶ß葽
-꫶。嬶SS葽; ꫶.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽
-꫶。嬶ss葽; ꫶.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽
-꫶。嬶Ss葽; ꫶.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽
-xn--2v9a.xn--ss-q40dp97m; ꫶.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽
-xn--2v9a.xn--zca7637b14za; ꫶.嬶ß葽; [V5]; xn--2v9a.xn--zca7637b14za; ; ; # ꫶.嬶ß葽
-𑚶⒈。ñž»¡ð¹º; 𑚶⒈.ñž»¡ð¹º; [B5, B6, P1, V5, V6]; xn--tshz969f.xn--yo0d5914s; ; ; # 𑚶⒈.ð¹º
-𑚶1.。ñž»¡ð¹º; 𑚶1..ñž»¡ð¹º; [B5, B6, P1, V5, V6, X4_2]; xn--1-3j0j..xn--yo0d5914s; [B5, B6, P1, V5, V6, A4_2]; ; # 𑚶1..ð¹º
+񗑿\uA806₄򩞆。𲩧󠒹ς; 񗑿\uA8064򩞆.𲩧󠒹ς; [V6]; xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; ; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; # ꠆4.ς
+񗑿\uA8064򩞆。𲩧󠒹ς; 񗑿\uA8064򩞆.𲩧󠒹ς; [V6]; xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; ; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; # ꠆4.ς
+񗑿\uA8064򩞆。𲩧󠒹Σ; 񗑿\uA8064򩞆.𲩧󠒹σ; [V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ
+񗑿\uA8064򩞆。𲩧󠒹σ; 񗑿\uA8064򩞆.𲩧󠒹σ; [V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ
+xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; 񗑿\uA8064򩞆.𲩧󠒹σ; [V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ
+xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; 񗑿\uA8064򩞆.𲩧󠒹ς; [V6]; xn--4-w93ej7463a9io5a.xn--3xa51142bk3f0d; ; ; # ꠆4.ς
+񗑿\uA806₄򩞆。𲩧󠒹Σ; 񗑿\uA8064򩞆.𲩧󠒹σ; [V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ
+񗑿\uA806₄򩞆。𲩧󠒹σ; 񗑿\uA8064򩞆.𲩧󠒹σ; [V6]; xn--4-w93ej7463a9io5a.xn--4xa31142bk3f0d; ; ; # ꠆4.σ
+󠆀\u0723。\u1DF4\u0775; \u0723.\u1DF4\u0775; [B1, V5]; xn--tnb.xn--5pb136i; ; ; # ܣ.ᷴݵ
+xn--tnb.xn--5pb136i; \u0723.\u1DF4\u0775; [B1, V5]; xn--tnb.xn--5pb136i; ; ; # ܣ.ᷴݵ
+ð¹±\u0842ðª¨ï½¡ð¬¼–Ⴑ\u200D; ð¹±\u0842ðª¨.𬼖Ⴑ\u200D; [B1, B6, C2, V6]; xn--0vb1535kdb6e.xn--pnd879eqy33c; ; xn--0vb1535kdb6e.xn--pnd93707a; [B1, V6] # ð¹±à¡‚ðª¨.𬼖Ⴑ
+ð¹±\u0842ðª¨ã€‚𬼖Ⴑ\u200D; ð¹±\u0842ðª¨.𬼖Ⴑ\u200D; [B1, B6, C2, V6]; xn--0vb1535kdb6e.xn--pnd879eqy33c; ; xn--0vb1535kdb6e.xn--pnd93707a; [B1, V6] # ð¹±à¡‚ðª¨.𬼖Ⴑ
+ð¹±\u0842ðª¨ã€‚𬼖ⴑ\u200D; ð¹±\u0842ðª¨.𬼖ⴑ\u200D; [B1, B6, C2]; xn--0vb1535kdb6e.xn--1ug742c5714c; ; xn--0vb1535kdb6e.xn--8kjz186s; [B1] # ð¹±à¡‚ðª¨.𬼖ⴑ
+xn--0vb1535kdb6e.xn--8kjz186s; ð¹±\u0842ðª¨.𬼖ⴑ; [B1]; xn--0vb1535kdb6e.xn--8kjz186s; ; ; # ð¹±à¡‚ðª¨.𬼖ⴑ
+xn--0vb1535kdb6e.xn--1ug742c5714c; ð¹±\u0842ðª¨.𬼖ⴑ\u200D; [B1, B6, C2]; xn--0vb1535kdb6e.xn--1ug742c5714c; ; ; # ð¹±à¡‚ðª¨.𬼖ⴑ
+xn--0vb1535kdb6e.xn--pnd93707a; ð¹±\u0842ðª¨.𬼖Ⴑ; [B1, V6]; xn--0vb1535kdb6e.xn--pnd93707a; ; ; # ð¹±à¡‚ðª¨.𬼖Ⴑ
+xn--0vb1535kdb6e.xn--pnd879eqy33c; ð¹±\u0842ðª¨.𬼖Ⴑ\u200D; [B1, B6, C2, V6]; xn--0vb1535kdb6e.xn--pnd879eqy33c; ; ; # ð¹±à¡‚ðª¨.𬼖Ⴑ
+ð¹±\u0842ðª¨ï½¡ð¬¼–â´‘\u200D; ð¹±\u0842ðª¨.𬼖ⴑ\u200D; [B1, B6, C2]; xn--0vb1535kdb6e.xn--1ug742c5714c; ; xn--0vb1535kdb6e.xn--8kjz186s; [B1] # ð¹±à¡‚ðª¨.𬼖ⴑ
+\u1714ð­ªó ™˜\u200D。-ð¹´; \u1714ð­ªó ™˜\u200D.-ð¹´; [B1, C2, V3, V5, V6]; xn--fze807bso0spy14i.xn----c36i; ; xn--fze4126jujt0g.xn----c36i; [B1, V3, V5, V6] # ᜔ð­ª.-ð¹´
+\u1714ð­ªó ™˜\u200D。-ð¹´; \u1714ð­ªó ™˜\u200D.-ð¹´; [B1, C2, V3, V5, V6]; xn--fze807bso0spy14i.xn----c36i; ; xn--fze4126jujt0g.xn----c36i; [B1, V3, V5, V6] # ᜔ð­ª.-ð¹´
+xn--fze4126jujt0g.xn----c36i; \u1714ð­ªó ™˜.-ð¹´; [B1, V3, V5, V6]; xn--fze4126jujt0g.xn----c36i; ; ; # ᜔ð­ª.-ð¹´
+xn--fze807bso0spy14i.xn----c36i; \u1714ð­ªó ™˜\u200D.-ð¹´; [B1, C2, V3, V5, V6]; xn--fze807bso0spy14i.xn----c36i; ; ; # ᜔ð­ª.-ð¹´
+𾢬。\u0729︒쯙ðŸ§; 𾢬.\u0729︒쯙5; [B2, V6]; xn--t92s.xn--5-p1c0712mm8rb; ; ; # .ܩ︒쯙5
+𾢬。\u0729︒á„ᅳᆬðŸ§; 𾢬.\u0729︒쯙5; [B2, V6]; xn--t92s.xn--5-p1c0712mm8rb; ; ; # .ܩ︒쯙5
+𾢬。\u0729。쯙5; 𾢬.\u0729.쯙5; [V6]; xn--t92s.xn--znb.xn--5-y88f; ; ; # .ܩ.쯙5
+𾢬。\u0729。á„ᅳᆬ5; 𾢬.\u0729.쯙5; [V6]; xn--t92s.xn--znb.xn--5-y88f; ; ; # .Ü©.쯙5
+xn--t92s.xn--znb.xn--5-y88f; 𾢬.\u0729.쯙5; [V6]; xn--t92s.xn--znb.xn--5-y88f; ; ; # .ܩ.쯙5
+xn--t92s.xn--5-p1c0712mm8rb; 𾢬.\u0729︒쯙5; [B2, V6]; xn--t92s.xn--5-p1c0712mm8rb; ; ; # .ܩ︒쯙5
+𞤟-。\u0762≮ë»; ðž¥-.\u0762≮ë»; [B2, B3, V3]; xn----1j8r.xn--mpb269krv4i; ; ; # ðž¥-.ݢ≮ë»
+𞤟-。\u0762<\u0338뻐; ðž¥-.\u0762≮ë»; [B2, B3, V3]; xn----1j8r.xn--mpb269krv4i; ; ; # ðž¥-.ݢ≮ë»
+ðž¥-。\u0762<\u0338뻐; ðž¥-.\u0762≮ë»; [B2, B3, V3]; xn----1j8r.xn--mpb269krv4i; ; ; # ðž¥-.ݢ≮ë»
+ðž¥-。\u0762≮ë»; ðž¥-.\u0762≮ë»; [B2, B3, V3]; xn----1j8r.xn--mpb269krv4i; ; ; # ðž¥-.ݢ≮ë»
+xn----1j8r.xn--mpb269krv4i; ðž¥-.\u0762≮ë»; [B2, B3, V3]; xn----1j8r.xn--mpb269krv4i; ; ; # ðž¥-.ݢ≮ë»
+𞥩-򊫠.\u08B4≠; 𞥩-򊫠.\u08B4≠; [B2, B3, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠
+𞥩-򊫠.\u08B4=\u0338; 𞥩-򊫠.\u08B4≠; [B2, B3, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠
+𞥩-򊫠.\u08B4≠; ; [B2, B3, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠
+𞥩-򊫠.\u08B4=\u0338; 𞥩-򊫠.\u08B4≠; [B2, B3, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠
+xn----cm8rp3609a.xn--9yb852k; 𞥩-򊫠.\u08B4≠; [B2, B3, V6]; xn----cm8rp3609a.xn--9yb852k; ; ; # -.ࢴ≠
+-ñ…‚ςႼ.\u0661; -ñ…‚ςႼ.\u0661; [B1, V3, V6]; xn----ymb080hun11i.xn--9hb; ; xn----0mb770hun11i.xn--9hb; # -ςႼ.Ù¡
+-ñ…‚ςႼ.\u0661; ; [B1, V3, V6]; xn----ymb080hun11i.xn--9hb; ; xn----0mb770hun11i.xn--9hb; # -ςႼ.Ù¡
+-ñ…‚Ï‚â´œ.\u0661; ; [B1, V3, V6]; xn----ymb2782aov12f.xn--9hb; ; xn----0mb9682aov12f.xn--9hb; # -Ï‚â´œ.Ù¡
+-ñ…‚ΣႼ.\u0661; -ñ…‚σႼ.\u0661; [B1, V3, V6]; xn----0mb770hun11i.xn--9hb; ; ; # -σႼ.Ù¡
+-ñ…‚σⴜ.\u0661; ; [B1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.Ù¡
+-ñ…‚Σⴜ.\u0661; -ñ…‚σⴜ.\u0661; [B1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.Ù¡
+xn----0mb9682aov12f.xn--9hb; -ñ…‚σⴜ.\u0661; [B1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.Ù¡
+xn----0mb770hun11i.xn--9hb; -ñ…‚σႼ.\u0661; [B1, V3, V6]; xn----0mb770hun11i.xn--9hb; ; ; # -σႼ.Ù¡
+xn----ymb2782aov12f.xn--9hb; -ñ…‚Ï‚â´œ.\u0661; [B1, V3, V6]; xn----ymb2782aov12f.xn--9hb; ; ; # -Ï‚â´œ.Ù¡
+xn----ymb080hun11i.xn--9hb; -ñ…‚ςႼ.\u0661; [B1, V3, V6]; xn----ymb080hun11i.xn--9hb; ; ; # -ςႼ.Ù¡
+-ñ…‚ςⴜ.\u0661; -ñ…‚Ï‚â´œ.\u0661; [B1, V3, V6]; xn----ymb2782aov12f.xn--9hb; ; xn----0mb9682aov12f.xn--9hb; # -Ï‚â´œ.Ù¡
+-ñ…‚ΣႼ.\u0661; -ñ…‚σႼ.\u0661; [B1, V3, V6]; xn----0mb770hun11i.xn--9hb; ; ; # -σႼ.Ù¡
+-ñ…‚σⴜ.\u0661; -ñ…‚σⴜ.\u0661; [B1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.Ù¡
+-ñ…‚Σⴜ.\u0661; -ñ…‚σⴜ.\u0661; [B1, V3, V6]; xn----0mb9682aov12f.xn--9hb; ; ; # -σⴜ.Ù¡
+\u17CA.\u200DðŸ®ð‘€¿; \u17CA.\u200D2𑀿; [C2, V5]; xn--m4e.xn--2-tgnv469h; ; xn--m4e.xn--2-ku7i; [V5] # ៊.2𑀿
+\u17CA.\u200D2𑀿; ; [C2, V5]; xn--m4e.xn--2-tgnv469h; ; xn--m4e.xn--2-ku7i; [V5] # ៊.2𑀿
+xn--m4e.xn--2-ku7i; \u17CA.2𑀿; [V5]; xn--m4e.xn--2-ku7i; ; ; # ៊.2𑀿
+xn--m4e.xn--2-tgnv469h; \u17CA.\u200D2𑀿; [C2, V5]; xn--m4e.xn--2-tgnv469h; ; ; # ៊.2𑀿
+≯ðŸ–。\u1A60ð«“òŸ‡‘; ≯8.\u1A60ð«“òŸ‡‘; [B1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.á© ð«“
+>\u0338ðŸ–。\u1A60ð«“òŸ‡‘; ≯8.\u1A60ð«“òŸ‡‘; [B1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.á© ð«“
+≯8。\u1A60ð«“òŸ‡‘; ≯8.\u1A60ð«“òŸ‡‘; [B1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.á© ð«“
+>\u03388。\u1A60ð«“òŸ‡‘; ≯8.\u1A60ð«“òŸ‡‘; [B1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.á© ð«“
+xn--8-ogo.xn--jof5303iv1z5d; ≯8.\u1A60ð«“òŸ‡‘; [B1, V5, V6]; xn--8-ogo.xn--jof5303iv1z5d; ; ; # ≯8.á© ð«“
+𑲫Ↄ\u0664。\u200C; 𑲫Ↄ\u0664.\u200C; [B1, C1, V5, V6]; xn--dib999kcy1p.xn--0ug; ; xn--dib999kcy1p.; [B1, V5, V6] # 𑲫Ↄ٤.
+𑲫Ↄ\u0664。\u200C; 𑲫Ↄ\u0664.\u200C; [B1, C1, V5, V6]; xn--dib999kcy1p.xn--0ug; ; xn--dib999kcy1p.; [B1, V5, V6] # 𑲫Ↄ٤.
+𑲫ↄ\u0664。\u200C; 𑲫ↄ\u0664.\u200C; [B1, C1, V5]; xn--dib100l8x1p.xn--0ug; ; xn--dib100l8x1p.; [B1, V5] # 𑲫ↄ٤.
+xn--dib100l8x1p.; 𑲫ↄ\u0664.; [B1, V5]; xn--dib100l8x1p.; ; ; # 𑲫ↄ٤.
+xn--dib100l8x1p.xn--0ug; 𑲫ↄ\u0664.\u200C; [B1, C1, V5]; xn--dib100l8x1p.xn--0ug; ; ; # 𑲫ↄ٤.
+xn--dib999kcy1p.; 𑲫Ↄ\u0664.; [B1, V5, V6]; xn--dib999kcy1p.; ; ; # 𑲫Ↄ٤.
+xn--dib999kcy1p.xn--0ug; 𑲫Ↄ\u0664.\u200C; [B1, C1, V5, V6]; xn--dib999kcy1p.xn--0ug; ; ; # 𑲫Ↄ٤.
+𑲫ↄ\u0664。\u200C; 𑲫ↄ\u0664.\u200C; [B1, C1, V5]; xn--dib100l8x1p.xn--0ug; ; xn--dib100l8x1p.; [B1, V5] # 𑲫ↄ٤.
+\u0C00ðŸµ\u200D\uFC9D.\u200D\u0750â’ˆ; \u0C009\u200D\u0628\u062D.\u200D\u0750â’ˆ; [B1, C2, V5, V6]; xn--9-1mcp570dl51a.xn--3ob977jmfd; ; xn--9-1mcp570d.xn--3ob470m; [B1, V5, V6] # à°€9بح.Ýâ’ˆ
+\u0C009\u200D\u0628\u062D.\u200D\u07501.; ; [B1, C2, V5]; xn--9-1mcp570dl51a.xn--1-x3c211q.; ; xn--9-1mcp570d.xn--1-x3c.; [B1, V5] # à°€9بح.Ý1.
+xn--9-1mcp570d.xn--1-x3c.; \u0C009\u0628\u062D.\u07501.; [B1, V5]; xn--9-1mcp570d.xn--1-x3c.; ; ; # à°€9بح.Ý1.
+xn--9-1mcp570dl51a.xn--1-x3c211q.; \u0C009\u200D\u0628\u062D.\u200D\u07501.; [B1, C2, V5]; xn--9-1mcp570dl51a.xn--1-x3c211q.; ; ; # à°€9بح.Ý1.
+xn--9-1mcp570d.xn--3ob470m; \u0C009\u0628\u062D.\u0750â’ˆ; [B1, V5, V6]; xn--9-1mcp570d.xn--3ob470m; ; ; # à°€9بح.Ýâ’ˆ
+xn--9-1mcp570dl51a.xn--3ob977jmfd; \u0C009\u200D\u0628\u062D.\u200D\u0750â’ˆ; [B1, C2, V5, V6]; xn--9-1mcp570dl51a.xn--3ob977jmfd; ; ; # à°€9بح.Ýâ’ˆ
+\uAAF6。嬶ß葽; \uAAF6.嬶ß葽; [V5]; xn--2v9a.xn--zca7637b14za; ; xn--2v9a.xn--ss-q40dp97m; # ꫶.嬶ß葽
+\uAAF6。嬶SS葽; \uAAF6.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽
+\uAAF6。嬶ss葽; \uAAF6.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽
+\uAAF6。嬶Ss葽; \uAAF6.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽
+xn--2v9a.xn--ss-q40dp97m; \uAAF6.嬶ss葽; [V5]; xn--2v9a.xn--ss-q40dp97m; ; ; # ꫶.嬶ss葽
+xn--2v9a.xn--zca7637b14za; \uAAF6.嬶ß葽; [V5]; xn--2v9a.xn--zca7637b14za; ; ; # ꫶.嬶ß葽
+𑚶⒈。ñž»¡ð¹º; 𑚶⒈.ñž»¡ð¹º; [B5, B6, V5, V6]; xn--tshz969f.xn--yo0d5914s; ; ; # 𑚶⒈.ð¹º
+𑚶1.。ñž»¡ð¹º; 𑚶1..ñž»¡ð¹º; [B5, B6, V5, V6, X4_2]; xn--1-3j0j..xn--yo0d5914s; [B5, B6, V5, V6, A4_2]; ; # 𑚶1..ð¹º
xn--1-3j0j..xn--yo0d5914s; 𑚶1..ñž»¡ð¹º; [B5, B6, V5, V6, X4_2]; xn--1-3j0j..xn--yo0d5914s; [B5, B6, V5, V6, A4_2]; ; # 𑚶1..ð¹º
xn--tshz969f.xn--yo0d5914s; 𑚶⒈.ñž»¡ð¹º; [B5, B6, V5, V6]; xn--tshz969f.xn--yo0d5914s; ; ; # 𑚶⒈.ð¹º
-𑜤︒≮.񚕽ט𞾩; 𑜤︒≮.񚕽ט𞾩; [B1, B5, B6, P1, V5, V6]; xn--gdh5267fdzpa.xn--deb0091w5q9u; ; ; # 𑜤︒≮.ט
-𑜤︒≮.񚕽ט𞾩; 𑜤︒≮.񚕽ט𞾩; [B1, B5, B6, P1, V5, V6]; xn--gdh5267fdzpa.xn--deb0091w5q9u; ; ; # 𑜤︒≮.ט
-𑜤。≮.񚕽ט𞾩; 𑜤.≮.񚕽ט𞾩; [B1, B3, B5, B6, P1, V5, V6]; xn--ci2d.xn--gdh.xn--deb0091w5q9u; ; ; # 𑜤.≮.ט
-𑜤。≮.񚕽ט𞾩; 𑜤.≮.񚕽ט𞾩; [B1, B3, B5, B6, P1, V5, V6]; xn--ci2d.xn--gdh.xn--deb0091w5q9u; ; ; # 𑜤.≮.ט
-xn--ci2d.xn--gdh.xn--deb0091w5q9u; 𑜤.≮.񚕽ט𞾩; [B1, B3, B5, B6, V5, V6]; xn--ci2d.xn--gdh.xn--deb0091w5q9u; ; ; # 𑜤.≮.ט
-xn--gdh5267fdzpa.xn--deb0091w5q9u; 𑜤︒≮.񚕽ט𞾩; [B1, B5, B6, V5, V6]; xn--gdh5267fdzpa.xn--deb0091w5q9u; ; ; # 𑜤︒≮.ט
-󠆋؃ñ¦¤.â‡Ï‚ò‹ˆòº‡¥; ؃ñ¦¤.â‡Ï‚ò‹ˆòº‡¥; [B1, P1, V6]; xn--lfb04106d.xn--3xa174mxv16m8moq; ; xn--lfb04106d.xn--4xa964mxv16m8moq; # .â‡Ï‚
-󠆋؃ñ¦¤.â‡Î£ò‹ˆòº‡¥; ؃ñ¦¤.â‡Ïƒò‹ˆòº‡¥; [B1, P1, V6]; xn--lfb04106d.xn--4xa964mxv16m8moq; ; ; # .â‡Ïƒ
-󠆋؃ñ¦¤.â‡Ïƒò‹ˆòº‡¥; ؃ñ¦¤.â‡Ïƒò‹ˆòº‡¥; [B1, P1, V6]; xn--lfb04106d.xn--4xa964mxv16m8moq; ; ; # .â‡Ïƒ
-xn--lfb04106d.xn--4xa964mxv16m8moq; ؃ñ¦¤.â‡Ïƒò‹ˆòº‡¥; [B1, V6]; xn--lfb04106d.xn--4xa964mxv16m8moq; ; ; # .â‡Ïƒ
-xn--lfb04106d.xn--3xa174mxv16m8moq; ؃ñ¦¤.â‡Ï‚ò‹ˆòº‡¥; [B1, V6]; xn--lfb04106d.xn--3xa174mxv16m8moq; ; ; # .â‡Ï‚
-Ï‚ð‘½ðµ¢ˆð‘œ«ï½¡ðž¬©â€Œð«„; Ï‚ð‘½ðµ¢ˆð‘œ«.𞬩‌ð«„; [C1, P1, V6]; xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [P1, V6] # Ï‚ð‘½ð‘œ«.ð«„
-Ï‚ð‘½ðµ¢ˆð‘œ«ã€‚𞬩‌ð«„; Ï‚ð‘½ðµ¢ˆð‘œ«.𞬩‌ð«„; [C1, P1, V6]; xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [P1, V6] # Ï‚ð‘½ð‘œ«.ð«„
-Σð‘½ðµ¢ˆð‘œ«ã€‚𞬩‌ð«„; σð‘½ðµ¢ˆð‘œ«.𞬩‌ð«„; [C1, P1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [P1, V6] # σð‘½ð‘œ«.ð«„
-σð‘½ðµ¢ˆð‘œ«ã€‚𞬩‌ð«„; σð‘½ðµ¢ˆð‘œ«.𞬩‌ð«„; [C1, P1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [P1, V6] # σð‘½ð‘œ«.ð«„
+𑜤︒≮.񚕽\u05D8𞾩; 𑜤︒≮.񚕽\u05D8𞾩; [B1, B5, B6, V5, V6]; xn--gdh5267fdzpa.xn--deb0091w5q9u; ; ; # 𑜤︒≮.ט
+𑜤︒<\u0338.񚕽\u05D8𞾩; 𑜤︒≮.񚕽\u05D8𞾩; [B1, B5, B6, V5, V6]; xn--gdh5267fdzpa.xn--deb0091w5q9u; ; ; # 𑜤︒≮.ט
+𑜤。≮.񚕽\u05D8𞾩; 𑜤.≮.񚕽\u05D8𞾩; [B1, B5, B6, V5, V6]; xn--ci2d.xn--gdh.xn--deb0091w5q9u; ; ; # 𑜤.≮.ט
+𑜤。<\u0338.񚕽\u05D8𞾩; 𑜤.≮.񚕽\u05D8𞾩; [B1, B5, B6, V5, V6]; xn--ci2d.xn--gdh.xn--deb0091w5q9u; ; ; # 𑜤.≮.ט
+xn--ci2d.xn--gdh.xn--deb0091w5q9u; 𑜤.≮.񚕽\u05D8𞾩; [B1, B5, B6, V5, V6]; xn--ci2d.xn--gdh.xn--deb0091w5q9u; ; ; # 𑜤.≮.ט
+xn--gdh5267fdzpa.xn--deb0091w5q9u; 𑜤︒≮.񚕽\u05D8𞾩; [B1, B5, B6, V5, V6]; xn--gdh5267fdzpa.xn--deb0091w5q9u; ; ; # 𑜤︒≮.ט
+󠆋\u0603ñ¦¤.â‡Ï‚ò‹ˆòº‡¥; \u0603ñ¦¤.â‡Ï‚ò‹ˆòº‡¥; [B1, V6]; xn--lfb04106d.xn--3xa174mxv16m8moq; ; xn--lfb04106d.xn--4xa964mxv16m8moq; # .â‡Ï‚
+󠆋\u0603ñ¦¤.â‡Î£ò‹ˆòº‡¥; \u0603ñ¦¤.â‡Ïƒò‹ˆòº‡¥; [B1, V6]; xn--lfb04106d.xn--4xa964mxv16m8moq; ; ; # .â‡Ïƒ
+󠆋\u0603ñ¦¤.â‡Ïƒò‹ˆòº‡¥; \u0603ñ¦¤.â‡Ïƒò‹ˆòº‡¥; [B1, V6]; xn--lfb04106d.xn--4xa964mxv16m8moq; ; ; # .â‡Ïƒ
+xn--lfb04106d.xn--4xa964mxv16m8moq; \u0603ñ¦¤.â‡Ïƒò‹ˆòº‡¥; [B1, V6]; xn--lfb04106d.xn--4xa964mxv16m8moq; ; ; # .â‡Ïƒ
+xn--lfb04106d.xn--3xa174mxv16m8moq; \u0603ñ¦¤.â‡Ï‚ò‹ˆòº‡¥; [B1, V6]; xn--lfb04106d.xn--3xa174mxv16m8moq; ; ; # .â‡Ï‚
+Ï‚ð‘½ðµ¢ˆð‘œ«ï½¡ðž¬©\u200Cð«„; Ï‚ð‘½ðµ¢ˆð‘œ«.𞬩\u200Cð«„; [C1, V6]; xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # Ï‚ð‘½ð‘œ«.ð«„
+Ï‚ð‘½ðµ¢ˆð‘œ«ã€‚𞬩\u200Cð«„; Ï‚ð‘½ðµ¢ˆð‘œ«.𞬩\u200Cð«„; [C1, V6]; xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # Ï‚ð‘½ð‘œ«.ð«„
+Σð‘½ðµ¢ˆð‘œ«ã€‚𞬩\u200Cð«„; σð‘½ðµ¢ˆð‘œ«.𞬩\u200Cð«„; [C1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # σð‘½ð‘œ«.ð«„
+σð‘½ðµ¢ˆð‘œ«ã€‚𞬩\u200Cð«„; σð‘½ðµ¢ˆð‘œ«.𞬩\u200Cð«„; [C1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # σð‘½ð‘œ«.ð«„
xn--4xa2260lk3b8z15g.xn--tw9ct349a; σð‘½ðµ¢ˆð‘œ«.𞬩ð«„; [V6]; xn--4xa2260lk3b8z15g.xn--tw9ct349a; ; ; # σð‘½ð‘œ«.ð«„
-xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; σð‘½ðµ¢ˆð‘œ«.𞬩‌ð«„; [C1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; ; # σð‘½ð‘œ«.ð«„
-xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; Ï‚ð‘½ðµ¢ˆð‘œ«.𞬩‌ð«„; [C1, V6]; xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; ; ; # Ï‚ð‘½ð‘œ«.ð«„
-Σð‘½ðµ¢ˆð‘œ«ï½¡ðž¬©â€Œð«„; σð‘½ðµ¢ˆð‘œ«.𞬩‌ð«„; [C1, P1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [P1, V6] # σð‘½ð‘œ«.ð«„
-σð‘½ðµ¢ˆð‘œ«ï½¡ðž¬©â€Œð«„; σð‘½ðµ¢ˆð‘œ«.𞬩‌ð«„; [C1, P1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [P1, V6] # σð‘½ð‘œ«.ð«„
--òµ½ï½¡-ﱌݛ; -òµ½.-نحݛ; [B1, P1, V3, V6]; xn----o452j.xn----cnc8e38c; ; ; # -.-نحݛ
--òµ½ã€‚-نحݛ; -òµ½.-نحݛ; [B1, P1, V3, V6]; xn----o452j.xn----cnc8e38c; ; ; # -.-نحݛ
-xn----o452j.xn----cnc8e38c; -òµ½.-نحݛ; [B1, V3, V6]; xn----o452j.xn----cnc8e38c; ; ; # -.-نحݛ
-⺢ò‡º…ðŸ¤ï½¡â€ðŸš·; ⺢ò‡º…2.â€ðŸš·; [C2, P1, V6]; xn--2-4jtr4282f.xn--1ugz946p; ; xn--2-4jtr4282f.xn--m78h; [P1, V6] # ⺢2.🚷
-⺢ò‡º…2。â€ðŸš·; ⺢ò‡º…2.â€ðŸš·; [C2, P1, V6]; xn--2-4jtr4282f.xn--1ugz946p; ; xn--2-4jtr4282f.xn--m78h; [P1, V6] # ⺢2.🚷
+xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; σð‘½ðµ¢ˆð‘œ«.𞬩\u200Cð«„; [C1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; ; # σð‘½ð‘œ«.ð«„
+xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; Ï‚ð‘½ðµ¢ˆð‘œ«.𞬩\u200Cð«„; [C1, V6]; xn--3xa4260lk3b8z15g.xn--0ug4653g2xzf; ; ; # Ï‚ð‘½ð‘œ«.ð«„
+Σð‘½ðµ¢ˆð‘œ«ï½¡ðž¬©\u200Cð«„; σð‘½ðµ¢ˆð‘œ«.𞬩\u200Cð«„; [C1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # σð‘½ð‘œ«.ð«„
+σð‘½ðµ¢ˆð‘œ«ï½¡ðž¬©\u200Cð«„; σð‘½ðµ¢ˆð‘œ«.𞬩\u200Cð«„; [C1, V6]; xn--4xa2260lk3b8z15g.xn--0ug4653g2xzf; ; xn--4xa2260lk3b8z15g.xn--tw9ct349a; [V6] # σð‘½ð‘œ«.ð«„
+-òµ½ï½¡-\uFC4C\u075B; -òµ½.-\u0646\u062D\u075B; [B1, V3, V6]; xn----o452j.xn----cnc8e38c; ; ; # -.-نحݛ
+-òµ½ã€‚-\u0646\u062D\u075B; -òµ½.-\u0646\u062D\u075B; [B1, V3, V6]; xn----o452j.xn----cnc8e38c; ; ; # -.-نحݛ
+xn----o452j.xn----cnc8e38c; -òµ½.-\u0646\u062D\u075B; [B1, V3, V6]; xn----o452j.xn----cnc8e38c; ; ; # -.-نحݛ
+⺢ò‡º…ðŸ¤ï½¡\u200D🚷; ⺢ò‡º…2.\u200D🚷; [C2, V6]; xn--2-4jtr4282f.xn--1ugz946p; ; xn--2-4jtr4282f.xn--m78h; [V6] # ⺢2.🚷
+⺢򇺅2。\u200D🚷; ⺢򇺅2.\u200D🚷; [C2, V6]; xn--2-4jtr4282f.xn--1ugz946p; ; xn--2-4jtr4282f.xn--m78h; [V6] # ⺢2.🚷
xn--2-4jtr4282f.xn--m78h; ⺢򇺅2.🚷; [V6]; xn--2-4jtr4282f.xn--m78h; ; ; # ⺢2.🚷
-xn--2-4jtr4282f.xn--1ugz946p; ⺢ò‡º…2.â€ðŸš·; [C2, V6]; xn--2-4jtr4282f.xn--1ugz946p; ; ; # ⺢2.🚷
-೸â€â·¾ð¹²ï½¡ò¤¶; ೸â€â·¾ð¹².ò¤¶; [B5, B6, C2, P1, V6]; xn--hvc488g69j402t.xn--3e36c; ; xn--hvc220of37m.xn--3e36c; [B5, B6, P1, V6] # â·¾ð¹².
-೸â€â·¾ð¹²ã€‚ò¤¶; ೸â€â·¾ð¹².ò¤¶; [B5, B6, C2, P1, V6]; xn--hvc488g69j402t.xn--3e36c; ; xn--hvc220of37m.xn--3e36c; [B5, B6, P1, V6] # â·¾ð¹².
-xn--hvc220of37m.xn--3e36c; ೸ⷾð¹².ò¤¶; [B5, B6, V6]; xn--hvc220of37m.xn--3e36c; ; ; # â·¾ð¹².
-xn--hvc488g69j402t.xn--3e36c; ೸â€â·¾ð¹².ò¤¶; [B5, B6, C2, V6]; xn--hvc488g69j402t.xn--3e36c; ; ; # â·¾ð¹².
-ð¹¢ï¼Žá‚­â‚‰â¸; ð¹¢.á‚­98; [B1, P1, V6]; xn--9n0d.xn--98-7ek; ; ; # ð¹¢.á‚­98
-ð¹¢.á‚­98; ; [B1, P1, V6]; xn--9n0d.xn--98-7ek; ; ; # ð¹¢.á‚­98
+xn--2-4jtr4282f.xn--1ugz946p; ⺢򇺅2.\u200D🚷; [C2, V6]; xn--2-4jtr4282f.xn--1ugz946p; ; ; # ⺢2.🚷
+\u0CF8\u200D\u2DFEð¹²ï½¡ò¤¶; \u0CF8\u200D\u2DFEð¹².ò¤¶; [B5, B6, C2, V6]; xn--hvc488g69j402t.xn--3e36c; ; xn--hvc220of37m.xn--3e36c; [B5, B6, V6] # â·¾ð¹².
+\u0CF8\u200D\u2DFEð¹²ã€‚ò¤¶; \u0CF8\u200D\u2DFEð¹².ò¤¶; [B5, B6, C2, V6]; xn--hvc488g69j402t.xn--3e36c; ; xn--hvc220of37m.xn--3e36c; [B5, B6, V6] # â·¾ð¹².
+xn--hvc220of37m.xn--3e36c; \u0CF8\u2DFEð¹².ò¤¶; [B5, B6, V6]; xn--hvc220of37m.xn--3e36c; ; ; # â·¾ð¹².
+xn--hvc488g69j402t.xn--3e36c; \u0CF8\u200D\u2DFEð¹².ò¤¶; [B5, B6, C2, V6]; xn--hvc488g69j402t.xn--3e36c; ; ; # â·¾ð¹².
+ð¹¢ï¼Žá‚­â‚‰â¸; ð¹¢.á‚­98; [B1, V6]; xn--9n0d.xn--98-7ek; ; ; # ð¹¢.á‚­98
+ð¹¢.á‚­98; ; [B1, V6]; xn--9n0d.xn--98-7ek; ; ; # ð¹¢.á‚­98
ð¹¢.â´98; ; [B1]; xn--9n0d.xn--98-u61a; ; ; # ð¹¢.â´98
xn--9n0d.xn--98-u61a; ð¹¢.â´98; [B1]; xn--9n0d.xn--98-u61a; ; ; # ð¹¢.â´98
xn--9n0d.xn--98-7ek; ð¹¢.á‚­98; [B1, V6]; xn--9n0d.xn--98-7ek; ; ; # ð¹¢.á‚­98
ð¹¢ï¼Žâ´â‚‰â¸; ð¹¢.â´98; [B1]; xn--9n0d.xn--98-u61a; ; ; # ð¹¢.â´98
-‌Í。ß࣢⒚≯; ‌.ß࣢⒚≯; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--zca612bx9vo5b; ; .xn--ss-9if872xjjc; [B5, B6, P1, V6, A4_2] # .ß⒚≯
-‌Í。ß࣢⒚≯; ‌.ß࣢⒚≯; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--zca612bx9vo5b; ; .xn--ss-9if872xjjc; [B5, B6, P1, V6, A4_2] # .ß⒚≯
-‌Í。ß࣢19.≯; ‌.ß࣢19.≯; [B1, B5, C1, P1, V6]; xn--0ug.xn--19-fia813f.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, P1, V6, A4_2] # .ß19.≯
-‌Í。ß࣢19.≯; ‌.ß࣢19.≯; [B1, B5, C1, P1, V6]; xn--0ug.xn--19-fia813f.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, P1, V6, A4_2] # .ß19.≯
-‌Í。SS࣢19.≯; ‌.ss࣢19.≯; [B1, B5, C1, P1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, P1, V6, A4_2] # .ss19.≯
-‌Í。SS࣢19.≯; ‌.ss࣢19.≯; [B1, B5, C1, P1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, P1, V6, A4_2] # .ss19.≯
-‌Í。ss࣢19.≯; ‌.ss࣢19.≯; [B1, B5, C1, P1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, P1, V6, A4_2] # .ss19.≯
-‌Í。ss࣢19.≯; ‌.ss࣢19.≯; [B1, B5, C1, P1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, P1, V6, A4_2] # .ss19.≯
-‌Í。Ss࣢19.≯; ‌.ss࣢19.≯; [B1, B5, C1, P1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, P1, V6, A4_2] # .ss19.≯
-‌Í。Ss࣢19.≯; ‌.ss࣢19.≯; [B1, B5, C1, P1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, P1, V6, A4_2] # .ss19.≯
-.xn--ss19-w0i.xn--hdh; .ss࣢19.≯; [B1, B5, V6, X4_2]; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2]; ; # .ss19.≯
-xn--0ug.xn--ss19-w0i.xn--hdh; ‌.ss࣢19.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; ; # .ss19.≯
-xn--0ug.xn--19-fia813f.xn--hdh; ‌.ß࣢19.≯; [B1, B5, C1, V6]; xn--0ug.xn--19-fia813f.xn--hdh; ; ; # .ß19.≯
-‌Í。SS࣢⒚≯; ‌.ss࣢⒚≯; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, P1, V6, A4_2] # .ss⒚≯
-‌Í。SS࣢⒚≯; ‌.ss࣢⒚≯; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, P1, V6, A4_2] # .ss⒚≯
-‌Í。ss࣢⒚≯; ‌.ss࣢⒚≯; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, P1, V6, A4_2] # .ss⒚≯
-‌Í。ss࣢⒚≯; ‌.ss࣢⒚≯; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, P1, V6, A4_2] # .ss⒚≯
-‌Í。Ss࣢⒚≯; ‌.ss࣢⒚≯; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, P1, V6, A4_2] # .ss⒚≯
-‌Í。Ss࣢⒚≯; ‌.ss࣢⒚≯; [B1, B5, B6, C1, P1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, P1, V6, A4_2] # .ss⒚≯
-.xn--ss-9if872xjjc; .ss࣢⒚≯; [B5, B6, V6, X4_2]; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2]; ; # .ss⒚≯
-xn--0ug.xn--ss-9if872xjjc; ‌.ss࣢⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; ; # .ss⒚≯
-xn--0ug.xn--zca612bx9vo5b; ‌.ß࣢⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--zca612bx9vo5b; ; ; # .ß⒚≯
-‌ðž¥á¡Œï¼Žð£ƒ”; ‌ðž¥á¡Œ.𣃔; [B1, C1, P1, V6]; xn--c8e180bqz13b.xn--od1j; ; xn--c8e5919u.xn--od1j; [B2, B3, P1, V6] # á¡Œ.𣃔
-‌ðž¥á¡Œ.𣃔; ; [B1, C1, P1, V6]; xn--c8e180bqz13b.xn--od1j; ; xn--c8e5919u.xn--od1j; [B2, B3, P1, V6] # á¡Œ.𣃔
+\u200C\u034F。ß\u08E2⒚≯; \u200C.ß\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--zca612bx9vo5b; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ß⒚≯
+\u200C\u034F。ß\u08E2⒚>\u0338; \u200C.ß\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--zca612bx9vo5b; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ß⒚≯
+\u200C\u034F。ß\u08E219.≯; \u200C.ß\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--19-fia813f.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ß19.≯
+\u200C\u034F。ß\u08E219.>\u0338; \u200C.ß\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--19-fia813f.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ß19.≯
+\u200C\u034F。SS\u08E219.>\u0338; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯
+\u200C\u034F。SS\u08E219.≯; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯
+\u200C\u034F。ss\u08E219.≯; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯
+\u200C\u034F。ss\u08E219.>\u0338; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯
+\u200C\u034F。Ss\u08E219.>\u0338; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯
+\u200C\u034F。Ss\u08E219.≯; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2] # .ss19.≯
+.xn--ss19-w0i.xn--hdh; .ss\u08E219.≯; [B1, B5, V6, X4_2]; .xn--ss19-w0i.xn--hdh; [B1, B5, V6, A4_2]; ; # .ss19.≯
+xn--0ug.xn--ss19-w0i.xn--hdh; \u200C.ss\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--ss19-w0i.xn--hdh; ; ; # .ss19.≯
+xn--0ug.xn--19-fia813f.xn--hdh; \u200C.ß\u08E219.≯; [B1, B5, C1, V6]; xn--0ug.xn--19-fia813f.xn--hdh; ; ; # .ß19.≯
+\u200C\u034F。SS\u08E2⒚>\u0338; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯
+\u200C\u034F。SS\u08E2⒚≯; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯
+\u200C\u034F。ss\u08E2⒚≯; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯
+\u200C\u034F。ss\u08E2⒚>\u0338; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯
+\u200C\u034F。Ss\u08E2⒚>\u0338; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯
+\u200C\u034F。Ss\u08E2⒚≯; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2] # .ss⒚≯
+.xn--ss-9if872xjjc; .ss\u08E2⒚≯; [B5, B6, V6, X4_2]; .xn--ss-9if872xjjc; [B5, B6, V6, A4_2]; ; # .ss⒚≯
+xn--0ug.xn--ss-9if872xjjc; \u200C.ss\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--ss-9if872xjjc; ; ; # .ss⒚≯
+xn--0ug.xn--zca612bx9vo5b; \u200C.ß\u08E2⒚≯; [B1, B5, B6, C1, V6]; xn--0ug.xn--zca612bx9vo5b; ; ; # .ß⒚≯
+\u200Cðž¥á¡Œï¼Žð£ƒ”; \u200Cðž¥á¡Œ.𣃔; [B1, C1, V6]; xn--c8e180bqz13b.xn--od1j; ; xn--c8e5919u.xn--od1j; [B2, B3, V6] # á¡Œ.𣃔
+\u200Cðž¥á¡Œ.𣃔; ; [B1, C1, V6]; xn--c8e180bqz13b.xn--od1j; ; xn--c8e5919u.xn--od1j; [B2, B3, V6] # á¡Œ.𣃔
xn--c8e5919u.xn--od1j; ðž¥á¡Œ.𣃔; [B2, B3, V6]; xn--c8e5919u.xn--od1j; ; ; # á¡Œ.𣃔
-xn--c8e180bqz13b.xn--od1j; ‌ðž¥á¡Œ.𣃔; [B1, C1, V6]; xn--c8e180bqz13b.xn--od1j; ; ; # á¡Œ.𣃔
-ßòœ¬-ñ¡¢¬ã€‚ྠႻðž·ð†¬; ßòœ¬-ñ¡¢¬.ྠႻðž·ð†¬; [B1, B2, B3, P1, V5, V6]; xn----8bd11730jefvw.xn--wfd08cd265hgsxa; ; ; # ß-.ྠႻð†¬
-ßòœ¬-ñ¡¢¬ã€‚ྠⴛðž·ð†¬; ßòœ¬-ñ¡¢¬.ྠⴛðž·ð†¬; [B1, B2, B3, P1, V5, V6]; xn----8bd11730jefvw.xn--wfd802mpm20agsxa; ; ; # ß-.ྠⴛð†¬
-xn----8bd11730jefvw.xn--wfd802mpm20agsxa; ßòœ¬-ñ¡¢¬.ྠⴛðž·ð†¬; [B1, B2, B3, V5, V6]; xn----8bd11730jefvw.xn--wfd802mpm20agsxa; ; ; # ß-.ྠⴛð†¬
-xn----8bd11730jefvw.xn--wfd08cd265hgsxa; ßòœ¬-ñ¡¢¬.ྠႻðž·ð†¬; [B1, B2, B3, V5, V6]; xn----8bd11730jefvw.xn--wfd08cd265hgsxa; ; ; # ß-.ྠႻð†¬
+xn--c8e180bqz13b.xn--od1j; \u200Cðž¥á¡Œ.𣃔; [B1, C1, V6]; xn--c8e180bqz13b.xn--od1j; ; ; # á¡Œ.𣃔
+\u07D0òœ¬-ñ¡¢¬ã€‚\u0FA0á‚»ðž·ð†¬; \u07D0òœ¬-ñ¡¢¬.\u0FA0á‚»ðž·ð†¬; [B1, B2, B3, V5, V6]; xn----8bd11730jefvw.xn--wfd08cd265hgsxa; ; ; # ß-.ྠႻð†¬
+\u07D0òœ¬-ñ¡¢¬ã€‚\u0FA0â´›ðž·ð†¬; \u07D0òœ¬-ñ¡¢¬.\u0FA0â´›ðž·ð†¬; [B1, B2, B3, V5, V6]; xn----8bd11730jefvw.xn--wfd802mpm20agsxa; ; ; # ß-.ྠⴛð†¬
+xn----8bd11730jefvw.xn--wfd802mpm20agsxa; \u07D0òœ¬-ñ¡¢¬.\u0FA0â´›ðž·ð†¬; [B1, B2, B3, V5, V6]; xn----8bd11730jefvw.xn--wfd802mpm20agsxa; ; ; # ß-.ྠⴛð†¬
+xn----8bd11730jefvw.xn--wfd08cd265hgsxa; \u07D0òœ¬-ñ¡¢¬.\u0FA0á‚»ðž·ð†¬; [B1, B2, B3, V5, V6]; xn----8bd11730jefvw.xn--wfd08cd265hgsxa; ; ; # ß-.ྠႻð†¬
ð¨¥ã€‚⫟𑈾; ð¨¥.⫟𑈾; [V5]; xn--n82h.xn--63iw010f; ; ; # ð¨¥.⫟𑈾
xn--n82h.xn--63iw010f; ð¨¥.⫟𑈾; [V5]; xn--n82h.xn--63iw010f; ; ; # ð¨¥.⫟𑈾
-⾛ݓ.Ⴕ𞠬؄â€; èµ°Ý“.Ⴕ𞠬؄â€; [B5, B6, C2, P1, V6]; xn--6ob9779d.xn--mfb785czmm0y85b; ; xn--6ob9779d.xn--mfb785ck569a; [B5, B6, P1, V6] # èµ°Ý“.Ⴕ𞠬
-èµ°Ý“.Ⴕ𞠬؄â€; ; [B5, B6, C2, P1, V6]; xn--6ob9779d.xn--mfb785czmm0y85b; ; xn--6ob9779d.xn--mfb785ck569a; [B5, B6, P1, V6] # èµ°Ý“.Ⴕ𞠬
-èµ°Ý“.ⴕ𞠬؄â€; ; [B5, B6, C2, P1, V6]; xn--6ob9779d.xn--mfb444k5gjt754b; ; xn--6ob9779d.xn--mfb511rxu80a; [B5, B6, P1, V6] # èµ°Ý“.â´•ðž ¬
-xn--6ob9779d.xn--mfb511rxu80a; 走ݓ.ⴕ𞠬؄; [B5, B6, V6]; xn--6ob9779d.xn--mfb511rxu80a; ; ; # 走ݓ.ⴕ𞠬
-xn--6ob9779d.xn--mfb444k5gjt754b; èµ°Ý“.ⴕ𞠬؄â€; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb444k5gjt754b; ; ; # èµ°Ý“.â´•ðž ¬
-xn--6ob9779d.xn--mfb785ck569a; 走ݓ.Ⴕ𞠬؄; [B5, B6, V6]; xn--6ob9779d.xn--mfb785ck569a; ; ; # 走ݓ.Ⴕ𞠬
-xn--6ob9779d.xn--mfb785czmm0y85b; èµ°Ý“.Ⴕ𞠬؄â€; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb785czmm0y85b; ; ; # èµ°Ý“.Ⴕ𞠬
-⾛ݓ.ⴕ𞠬؄â€; èµ°Ý“.ⴕ𞠬؄â€; [B5, B6, C2, P1, V6]; xn--6ob9779d.xn--mfb444k5gjt754b; ; xn--6ob9779d.xn--mfb511rxu80a; [B5, B6, P1, V6] # èµ°Ý“.â´•ðž ¬
--ᢗ‌🄄.𑜢; ; [C1, P1, V3, V5, V6]; xn----pck312bx563c.xn--9h2d; ; xn----pck1820x.xn--9h2d; [P1, V3, V5, V6] # -ᢗ🄄.𑜢
--ᢗ‌3,.𑜢; ; [C1, P1, V3, V5, V6]; xn---3,-3eu051c.xn--9h2d; ; xn---3,-3eu.xn--9h2d; [P1, V3, V5, V6] # -ᢗ3,.𑜢
-xn---3,-3eu.xn--9h2d; -ᢗ3,.𑜢; [P1, V3, V5, V6]; xn---3,-3eu.xn--9h2d; ; ; # -ᢗ3,.𑜢
-xn---3,-3eu051c.xn--9h2d; -ᢗ‌3,.𑜢; [C1, P1, V3, V5, V6]; xn---3,-3eu051c.xn--9h2d; ; ; # -ᢗ3,.𑜢
+⾛\u0753.Ⴕ𞠬\u0604\u200D; 走\u0753.Ⴕ𞠬\u0604\u200D; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb785czmm0y85b; ; xn--6ob9779d.xn--mfb785ck569a; [B5, B6, V6] # 走ݓ.Ⴕ𞠬
+走\u0753.Ⴕ𞠬\u0604\u200D; ; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb785czmm0y85b; ; xn--6ob9779d.xn--mfb785ck569a; [B5, B6, V6] # 走ݓ.Ⴕ𞠬
+èµ°\u0753.â´•ðž ¬\u0604\u200D; ; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb444k5gjt754b; ; xn--6ob9779d.xn--mfb511rxu80a; [B5, B6, V6] # èµ°Ý“.â´•ðž ¬
+xn--6ob9779d.xn--mfb511rxu80a; èµ°\u0753.â´•ðž ¬\u0604; [B5, B6, V6]; xn--6ob9779d.xn--mfb511rxu80a; ; ; # èµ°Ý“.â´•ðž ¬
+xn--6ob9779d.xn--mfb444k5gjt754b; èµ°\u0753.â´•ðž ¬\u0604\u200D; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb444k5gjt754b; ; ; # èµ°Ý“.â´•ðž ¬
+xn--6ob9779d.xn--mfb785ck569a; 走\u0753.Ⴕ𞠬\u0604; [B5, B6, V6]; xn--6ob9779d.xn--mfb785ck569a; ; ; # 走ݓ.Ⴕ𞠬
+xn--6ob9779d.xn--mfb785czmm0y85b; 走\u0753.Ⴕ𞠬\u0604\u200D; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb785czmm0y85b; ; ; # 走ݓ.Ⴕ𞠬
+â¾›\u0753.â´•ðž ¬\u0604\u200D; èµ°\u0753.â´•ðž ¬\u0604\u200D; [B5, B6, C2, V6]; xn--6ob9779d.xn--mfb444k5gjt754b; ; xn--6ob9779d.xn--mfb511rxu80a; [B5, B6, V6] # èµ°Ý“.â´•ðž ¬
+-ᢗ\u200C🄄.𑜢; ; [C1, V3, V5, V6]; xn----pck312bx563c.xn--9h2d; ; xn----pck1820x.xn--9h2d; [V3, V5, V6] # -ᢗ🄄.𑜢
+-ᢗ\u200C3,.𑜢; ; [C1, V3, V5, V6]; xn---3,-3eu051c.xn--9h2d; ; xn---3,-3eu.xn--9h2d; [V3, V5, V6] # -ᢗ3,.𑜢
+xn---3,-3eu.xn--9h2d; -ᢗ3,.𑜢; [V3, V5, V6]; xn---3,-3eu.xn--9h2d; ; ; # -ᢗ3,.𑜢
+xn---3,-3eu051c.xn--9h2d; -ᢗ\u200C3,.𑜢; [C1, V3, V5, V6]; xn---3,-3eu051c.xn--9h2d; ; ; # -ᢗ3,.𑜢
xn----pck1820x.xn--9h2d; -ᢗ🄄.𑜢; [V3, V5, V6]; xn----pck1820x.xn--9h2d; ; ; # -ᢗ🄄.𑜢
-xn----pck312bx563c.xn--9h2d; -ᢗ‌🄄.𑜢; [C1, V3, V5, V6]; xn----pck312bx563c.xn--9h2d; ; ; # -ᢗ🄄.𑜢
-≠ð¸ð¹â€Œ.Ⴚò³„ ; ; [B1, C1, P1, V6]; xn--0ug83gn618a21ov.xn--ynd49496l; ; xn--1ch2293gv3nr.xn--ynd49496l; [B1, P1, V6] # ≠.Ⴚ
-≠ð¸ð¹â€Œ.Ⴚò³„ ; ≠ð¸ð¹â€Œ.Ⴚò³„ ; [B1, C1, P1, V6]; xn--0ug83gn618a21ov.xn--ynd49496l; ; xn--1ch2293gv3nr.xn--ynd49496l; [B1, P1, V6] # ≠.Ⴚ
-≠ð¸ð¹â€Œ.â´šò³„ ; ≠ð¸ð¹â€Œ.â´šò³„ ; [B1, C1, P1, V6]; xn--0ug83gn618a21ov.xn--ilj23531g; ; xn--1ch2293gv3nr.xn--ilj23531g; [B1, P1, V6] # ≠.â´š
-≠ð¸ð¹â€Œ.â´šò³„ ; ; [B1, C1, P1, V6]; xn--0ug83gn618a21ov.xn--ilj23531g; ; xn--1ch2293gv3nr.xn--ilj23531g; [B1, P1, V6] # ≠.â´š
+xn----pck312bx563c.xn--9h2d; -ᢗ\u200C🄄.𑜢; [C1, V3, V5, V6]; xn----pck312bx563c.xn--9h2d; ; ; # -ᢗ🄄.𑜢
+≠ð¸ð¹\u200C.Ⴚò³„ ; ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ynd49496l; ; xn--1ch2293gv3nr.xn--ynd49496l; [B1, V6] # ≠.Ⴚ
+=\u0338ð¸ð¹\u200C.Ⴚò³„ ; ≠ð¸ð¹\u200C.Ⴚò³„ ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ynd49496l; ; xn--1ch2293gv3nr.xn--ynd49496l; [B1, V6] # ≠.Ⴚ
+=\u0338ð¸ð¹\u200C.â´šò³„ ; ≠ð¸ð¹\u200C.â´šò³„ ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ilj23531g; ; xn--1ch2293gv3nr.xn--ilj23531g; [B1, V6] # ≠.â´š
+≠ð¸ð¹\u200C.â´šò³„ ; ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ilj23531g; ; xn--1ch2293gv3nr.xn--ilj23531g; [B1, V6] # ≠.â´š
xn--1ch2293gv3nr.xn--ilj23531g; ≠ð¸ð¹.â´šò³„ ; [B1, V6]; xn--1ch2293gv3nr.xn--ilj23531g; ; ; # ≠.â´š
-xn--0ug83gn618a21ov.xn--ilj23531g; ≠ð¸ð¹â€Œ.â´šò³„ ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ilj23531g; ; ; # ≠.â´š
+xn--0ug83gn618a21ov.xn--ilj23531g; ≠ð¸ð¹\u200C.â´šò³„ ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ilj23531g; ; ; # ≠.â´š
xn--1ch2293gv3nr.xn--ynd49496l; ≠ð¸ð¹.Ⴚò³„ ; [B1, V6]; xn--1ch2293gv3nr.xn--ynd49496l; ; ; # ≠.Ⴚ
-xn--0ug83gn618a21ov.xn--ynd49496l; ≠ð¸ð¹â€Œ.Ⴚò³„ ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ynd49496l; ; ; # ≠.Ⴚ
-٩。󠇀𑇊; ٩.𑇊; [B1, B3, B6, V5]; xn--iib.xn--6d1d; ; ; # ٩.𑇊
-٩。󠇀𑇊; ٩.𑇊; [B1, B3, B6, V5]; xn--iib.xn--6d1d; ; ; # ٩.𑇊
-xn--iib.xn--6d1d; ٩.𑇊; [B1, B3, B6, V5]; xn--iib.xn--6d1d; ; ; # ٩.𑇊
-ႆ𞶀≯â’。-; ႆ𞶀≯â’.-; [B1, P1, V3, V5, V6]; xn--hmd482gqqb8730g.-; ; ; # ႆ≯â’.-
-ႆ𞶀≯â’。-; ႆ𞶀≯â’.-; [B1, P1, V3, V5, V6]; xn--hmd482gqqb8730g.-; ; ; # ႆ≯â’.-
-ႆ𞶀≯6.。-; ႆ𞶀≯6..-; [B1, P1, V3, V5, V6, X4_2]; xn--6-oyg968k7h74b..-; [B1, P1, V3, V5, V6, A4_2]; ; # ႆ≯6..-
-ႆ𞶀≯6.。-; ႆ𞶀≯6..-; [B1, P1, V3, V5, V6, X4_2]; xn--6-oyg968k7h74b..-; [B1, P1, V3, V5, V6, A4_2]; ; # ႆ≯6..-
-xn--6-oyg968k7h74b..-; ႆ𞶀≯6..-; [B1, V3, V5, V6, X4_2]; xn--6-oyg968k7h74b..-; [B1, V3, V5, V6, A4_2]; ; # ႆ≯6..-
-xn--hmd482gqqb8730g.-; ႆ𞶀≯â’.-; [B1, V3, V5, V6]; xn--hmd482gqqb8730g.-; ; ; # ႆ≯â’.-
-឴.쮇-; ; [P1, V3, V5, V6]; xn--z3e.xn----938f; ; ; # .쮇-
-áž´.á„ᅰᆮ-; áž´.쮇-; [P1, V3, V5, V6]; xn--z3e.xn----938f; ; ; # .쮇-
-xn--z3e.xn----938f; ឴.쮇-; [V3, V5, V6]; xn--z3e.xn----938f; ; ; # .쮇-
-‌𑓂。⒈-􀪛; ‌𑓂.⒈-􀪛; [C1, P1, V6]; xn--0ugy057g.xn----dcp29674o; ; xn--wz1d.xn----dcp29674o; [P1, V5, V6] # 𑓂.⒈-
-‌𑓂。1.-􀪛; ‌𑓂.1.-􀪛; [C1, P1, V3, V6]; xn--0ugy057g.1.xn----rg03o; ; xn--wz1d.1.xn----rg03o; [P1, V3, V5, V6] # 𑓂.1.-
+xn--0ug83gn618a21ov.xn--ynd49496l; ≠ð¸ð¹\u200C.Ⴚò³„ ; [B1, C1, V6]; xn--0ug83gn618a21ov.xn--ynd49496l; ; ; # ≠.Ⴚ
+\u0669。󠇀𑇊; \u0669.𑇊; [B1, V5]; xn--iib.xn--6d1d; ; ; # ٩.𑇊
+\u0669。󠇀𑇊; \u0669.𑇊; [B1, V5]; xn--iib.xn--6d1d; ; ; # ٩.𑇊
+xn--iib.xn--6d1d; \u0669.𑇊; [B1, V5]; xn--iib.xn--6d1d; ; ; # ٩.𑇊
+\u1086𞶀≯â’。-; \u1086𞶀≯â’.-; [B1, V3, V5, V6]; xn--hmd482gqqb8730g.-; ; ; # ႆ≯â’.-
+\u1086𞶀>\u0338â’。-; \u1086𞶀≯â’.-; [B1, V3, V5, V6]; xn--hmd482gqqb8730g.-; ; ; # ႆ≯â’.-
+\u1086𞶀≯6.。-; \u1086𞶀≯6..-; [B1, V3, V5, V6, X4_2]; xn--6-oyg968k7h74b..-; [B1, V3, V5, V6, A4_2]; ; # ႆ≯6..-
+\u1086𞶀>\u03386.。-; \u1086𞶀≯6..-; [B1, V3, V5, V6, X4_2]; xn--6-oyg968k7h74b..-; [B1, V3, V5, V6, A4_2]; ; # ႆ≯6..-
+xn--6-oyg968k7h74b..-; \u1086𞶀≯6..-; [B1, V3, V5, V6, X4_2]; xn--6-oyg968k7h74b..-; [B1, V3, V5, V6, A4_2]; ; # ႆ≯6..-
+xn--hmd482gqqb8730g.-; \u1086𞶀≯â’.-; [B1, V3, V5, V6]; xn--hmd482gqqb8730g.-; ; ; # ႆ≯â’.-
+\u17B4.쮇-; ; [V3, V5, V6]; xn--z3e.xn----938f; ; ; # .쮇-
+\u17B4.á„ᅰᆮ-; \u17B4.쮇-; [V3, V5, V6]; xn--z3e.xn----938f; ; ; # .쮇-
+xn--z3e.xn----938f; \u17B4.쮇-; [V3, V5, V6]; xn--z3e.xn----938f; ; ; # .쮇-
+\u200C𑓂。⒈-􀪛; \u200C𑓂.⒈-􀪛; [C1, V6]; xn--0ugy057g.xn----dcp29674o; ; xn--wz1d.xn----dcp29674o; [V5, V6] # 𑓂.⒈-
+\u200C𑓂。1.-􀪛; \u200C𑓂.1.-􀪛; [C1, V3, V6]; xn--0ugy057g.1.xn----rg03o; ; xn--wz1d.1.xn----rg03o; [V3, V5, V6] # 𑓂.1.-
xn--wz1d.1.xn----rg03o; 𑓂.1.-􀪛; [V3, V5, V6]; xn--wz1d.1.xn----rg03o; ; ; # 𑓂.1.-
-xn--0ugy057g.1.xn----rg03o; ‌𑓂.1.-􀪛; [C1, V3, V6]; xn--0ugy057g.1.xn----rg03o; ; ; # 𑓂.1.-
+xn--0ugy057g.1.xn----rg03o; \u200C𑓂.1.-􀪛; [C1, V3, V6]; xn--0ugy057g.1.xn----rg03o; ; ; # 𑓂.1.-
xn--wz1d.xn----dcp29674o; 𑓂.⒈-􀪛; [V5, V6]; xn--wz1d.xn----dcp29674o; ; ; # 𑓂.⒈-
-xn--0ugy057g.xn----dcp29674o; ‌𑓂.⒈-􀪛; [C1, V6]; xn--0ugy057g.xn----dcp29674o; ; ; # 𑓂.⒈-
-⒈ﺮ‌。⃩🖞‌𖬴; ⒈ر‌.⃩🖞‌𖬴; [B1, C1, P1, V5, V6]; xn--wgb253kmfd.xn--0ugz6a8040fty5d; ; xn--wgb746m.xn--c1g6021kg18c; [B1, P1, V5, V6] # ⒈ر.⃩🖞𖬴
-1.ر‌。⃩🖞‌𖬴; 1.ر‌.⃩🖞‌𖬴; [B1, B3, C1, V5]; 1.xn--wgb253k.xn--0ugz6a8040fty5d; ; 1.xn--wgb.xn--c1g6021kg18c; [B1, V5] # 1.ر.⃩🖞𖬴
-1.xn--wgb.xn--c1g6021kg18c; 1.ر.⃩🖞𖬴; [B1, V5]; 1.xn--wgb.xn--c1g6021kg18c; ; ; # 1.ر.⃩🖞𖬴
-1.xn--wgb253k.xn--0ugz6a8040fty5d; 1.ر‌.⃩🖞‌𖬴; [B1, B3, C1, V5]; 1.xn--wgb253k.xn--0ugz6a8040fty5d; ; ; # 1.ر.⃩🖞𖬴
-xn--wgb746m.xn--c1g6021kg18c; ⒈ر.⃩🖞𖬴; [B1, V5, V6]; xn--wgb746m.xn--c1g6021kg18c; ; ; # ⒈ر.⃩🖞𖬴
-xn--wgb253kmfd.xn--0ugz6a8040fty5d; ⒈ر‌.⃩🖞‌𖬴; [B1, C1, V5, V6]; xn--wgb253kmfd.xn--0ugz6a8040fty5d; ; ; # ⒈ر.⃩🖞𖬴
-󌭇。ðŸá®¨ß”; 󌭇.2ᮨߔ; [B1, P1, V6]; xn--xm89d.xn--2-icd143m; ; ; # .2ᮨߔ
-󌭇。2ᮨߔ; 󌭇.2ᮨߔ; [B1, P1, V6]; xn--xm89d.xn--2-icd143m; ; ; # .2ᮨߔ
-xn--xm89d.xn--2-icd143m; 󌭇.2ᮨߔ; [B1, V6]; xn--xm89d.xn--2-icd143m; ; ; # .2ᮨߔ
-ï¶ò«³º.Ï‚â€ð¹·; مخمò«³º.Ï‚â€ð¹·; [B2, B3, B5, B6, C2, P1, V6]; xn--tgb9bb64691z.xn--3xa006lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, P1, V6] # مخم.Ï‚ð¹·
-مخمò«³º.Ï‚â€ð¹·; ; [B2, B3, B5, B6, C2, P1, V6]; xn--tgb9bb64691z.xn--3xa006lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, P1, V6] # مخم.Ï‚ð¹·
-مخمò«³º.Σâ€ð¹·; مخمò«³º.σâ€ð¹·; [B2, B3, B5, B6, C2, P1, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, P1, V6] # مخم.σð¹·
-مخمò«³º.σâ€ð¹·; ; [B2, B3, B5, B6, C2, P1, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, P1, V6] # مخم.σð¹·
-xn--tgb9bb64691z.xn--4xa6667k; مخمò«³º.σð¹·; [B2, B3, B5, B6, V6]; xn--tgb9bb64691z.xn--4xa6667k; ; ; # مخم.σð¹·
-xn--tgb9bb64691z.xn--4xa895lrp7n; مخمò«³º.σâ€ð¹·; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; ; # مخم.σð¹·
-xn--tgb9bb64691z.xn--3xa006lrp7n; مخمò«³º.Ï‚â€ð¹·; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--3xa006lrp7n; ; ; # مخم.Ï‚ð¹·
-ï¶ò«³º.Σâ€ð¹·; مخمò«³º.σâ€ð¹·; [B2, B3, B5, B6, C2, P1, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, P1, V6] # مخم.σð¹·
-ï¶ò«³º.σâ€ð¹·; مخمò«³º.σâ€ð¹·; [B2, B3, B5, B6, C2, P1, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, P1, V6] # مخم.σð¹·
-â’ŽÛ؅。꫶۵ð‡½; â’ŽÛØ….꫶۵ð‡½; [B1, P1, V5, V6]; xn--nfb98ai25e.xn--imb3805fxt8b; ; ; # â’ŽÛ.꫶۵ð‡½
-7.Û؅。꫶۵ð‡½; 7.ÛØ….꫶۵ð‡½; [B1, P1, V5, V6]; 7.xn--nfb98a.xn--imb3805fxt8b; ; ; # 7.Û.꫶۵ð‡½
-7.xn--nfb98a.xn--imb3805fxt8b; 7.ÛØ….꫶۵ð‡½; [B1, V5, V6]; 7.xn--nfb98a.xn--imb3805fxt8b; ; ; # 7.Û.꫶۵ð‡½
-xn--nfb98ai25e.xn--imb3805fxt8b; â’ŽÛØ….꫶۵ð‡½; [B1, V5, V6]; xn--nfb98ai25e.xn--imb3805fxt8b; ; ; # â’ŽÛ.꫶۵ð‡½
--ᡥ᠆ó²­ã€‚Ø…á©ð¹¡; -ᡥ᠆ó²­.Ø…á©ð¹¡; [B1, P1, V3, V6]; xn----f3j6s87156i.xn--nfb035hoo2p; ; ; # -ᡥ᠆.á©ð¹¡
-xn----f3j6s87156i.xn--nfb035hoo2p; -ᡥ᠆ó²­.Ø…á©ð¹¡; [B1, V3, V6]; xn----f3j6s87156i.xn--nfb035hoo2p; ; ; # -ᡥ᠆.á©ð¹¡
-â€.Ú½Ù£Ö–; ; [B1, C2]; xn--1ug.xn--hcb32bni; ; .xn--hcb32bni; [A4_2] # .Ú½Ù£Ö–
-.xn--hcb32bni; .Ú½Ù£Ö–; [X4_2]; .xn--hcb32bni; [A4_2]; ; # .Ú½Ù£Ö–
-xn--1ug.xn--hcb32bni; â€.Ú½Ù£Ö–; [B1, C2]; xn--1ug.xn--hcb32bni; ; ; # .Ú½Ù£Ö–
-xn--hcb32bni; Ú½Ù£Ö–; ; xn--hcb32bni; ; ; # Ú½Ù£Ö–
-Ú½Ù£Ö–; ; ; xn--hcb32bni; ; ; # Ú½Ù£Ö–
-ã’§Û±.Ⴚٸâ€; ã’§Û±.Ⴚيٴâ€; [B5, B6, C2, P1, V6]; xn--emb715u.xn--mhb8f817ao2p; ; xn--emb715u.xn--mhb8f817a; [B5, B6, P1, V6] # ã’§Û±.Ⴚيٴ
-ã’§Û±.Ⴚيٴâ€; ; [B5, B6, C2, P1, V6]; xn--emb715u.xn--mhb8f817ao2p; ; xn--emb715u.xn--mhb8f817a; [B5, B6, P1, V6] # ã’§Û±.Ⴚيٴ
-ã’§Û±.ⴚيٴâ€; ; [B5, B6, C2]; xn--emb715u.xn--mhb8f960g03l; ; xn--emb715u.xn--mhb8fy26k; [B5, B6] # ã’§Û±.ⴚيٴ
-xn--emb715u.xn--mhb8fy26k; 㒧۱.ⴚيٴ; [B5, B6]; xn--emb715u.xn--mhb8fy26k; ; ; # 㒧۱.ⴚيٴ
-xn--emb715u.xn--mhb8f960g03l; ã’§Û±.ⴚيٴâ€; [B5, B6, C2]; xn--emb715u.xn--mhb8f960g03l; ; ; # ã’§Û±.ⴚيٴ
-xn--emb715u.xn--mhb8f817a; 㒧۱.Ⴚيٴ; [B5, B6, V6]; xn--emb715u.xn--mhb8f817a; ; ; # 㒧۱.Ⴚيٴ
-xn--emb715u.xn--mhb8f817ao2p; ã’§Û±.Ⴚيٴâ€; [B5, B6, C2, V6]; xn--emb715u.xn--mhb8f817ao2p; ; ; # ã’§Û±.Ⴚيٴ
-ã’§Û±.â´šÙ¸â€; ã’§Û±.ⴚيٴâ€; [B5, B6, C2]; xn--emb715u.xn--mhb8f960g03l; ; xn--emb715u.xn--mhb8fy26k; [B5, B6] # ã’§Û±.ⴚيٴ
-ྔꡋ-.-𖬴; ྔꡋ-.-𖬴; [V3, V5]; xn----ukg9938i.xn----4u5m; ; ; # ྔꡋ-.-𖬴
-ྔꡋ-.-𖬴; ; [V3, V5]; xn----ukg9938i.xn----4u5m; ; ; # ྔꡋ-.-𖬴
-xn----ukg9938i.xn----4u5m; ྔꡋ-.-𖬴; [V3, V5]; xn----ukg9938i.xn----4u5m; ; ; # ྔꡋ-.-𖬴
-񿒳-⋢‌.标-; 񿒳-⋢‌.标-; [C1, P1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [P1, V3, V6] # -⋢.标-
-񿒳-⋢‌.标-; 񿒳-⋢‌.标-; [C1, P1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [P1, V3, V6] # -⋢.标-
-񿒳-⋢‌.标-; ; [C1, P1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [P1, V3, V6] # -⋢.标-
-񿒳-⋢‌.标-; 񿒳-⋢‌.标-; [C1, P1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [P1, V3, V6] # -⋢.标-
+xn--0ugy057g.xn----dcp29674o; \u200C𑓂.⒈-􀪛; [C1, V6]; xn--0ugy057g.xn----dcp29674o; ; ; # 𑓂.⒈-
+⒈\uFEAE\u200C。\u20E9🖞\u200C𖬴; ⒈\u0631\u200C.\u20E9🖞\u200C𖬴; [B1, C1, V5, V6]; xn--wgb253kmfd.xn--0ugz6a8040fty5d; ; xn--wgb746m.xn--c1g6021kg18c; [B1, V5, V6] # ⒈ر.⃩🖞𖬴
+1.\u0631\u200C。\u20E9🖞\u200C𖬴; 1.\u0631\u200C.\u20E9🖞\u200C𖬴; [B1, B3, C1, V5]; 1.xn--wgb253k.xn--0ugz6a8040fty5d; ; 1.xn--wgb.xn--c1g6021kg18c; [B1, V5] # 1.ر.⃩🖞𖬴
+1.xn--wgb.xn--c1g6021kg18c; 1.\u0631.\u20E9🖞𖬴; [B1, V5]; 1.xn--wgb.xn--c1g6021kg18c; ; ; # 1.ر.⃩🖞𖬴
+1.xn--wgb253k.xn--0ugz6a8040fty5d; 1.\u0631\u200C.\u20E9🖞\u200C𖬴; [B1, B3, C1, V5]; 1.xn--wgb253k.xn--0ugz6a8040fty5d; ; ; # 1.ر.⃩🖞𖬴
+xn--wgb746m.xn--c1g6021kg18c; ⒈\u0631.\u20E9🖞𖬴; [B1, V5, V6]; xn--wgb746m.xn--c1g6021kg18c; ; ; # ⒈ر.⃩🖞𖬴
+xn--wgb253kmfd.xn--0ugz6a8040fty5d; ⒈\u0631\u200C.\u20E9🖞\u200C𖬴; [B1, C1, V5, V6]; xn--wgb253kmfd.xn--0ugz6a8040fty5d; ; ; # ⒈ر.⃩🖞𖬴
+󌭇。ðŸ\u1BA8\u07D4; 󌭇.2\u1BA8\u07D4; [B1, V6]; xn--xm89d.xn--2-icd143m; ; ; # .2ᮨߔ
+󌭇。2\u1BA8\u07D4; 󌭇.2\u1BA8\u07D4; [B1, V6]; xn--xm89d.xn--2-icd143m; ; ; # .2ᮨߔ
+xn--xm89d.xn--2-icd143m; 󌭇.2\u1BA8\u07D4; [B1, V6]; xn--xm89d.xn--2-icd143m; ; ; # .2ᮨߔ
+\uFD8Fò«³º.Ï‚\u200Dð¹·; \u0645\u062E\u0645ò«³º.Ï‚\u200Dð¹·; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--3xa006lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.Ï‚ð¹·
+\u0645\u062E\u0645ò«³º.Ï‚\u200Dð¹·; ; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--3xa006lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.Ï‚ð¹·
+\u0645\u062E\u0645ò«³º.Σ\u200Dð¹·; \u0645\u062E\u0645ò«³º.σ\u200Dð¹·; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.σð¹·
+\u0645\u062E\u0645ò«³º.σ\u200Dð¹·; ; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.σð¹·
+xn--tgb9bb64691z.xn--4xa6667k; \u0645\u062E\u0645ò«³º.σð¹·; [B2, B3, B5, B6, V6]; xn--tgb9bb64691z.xn--4xa6667k; ; ; # مخم.σð¹·
+xn--tgb9bb64691z.xn--4xa895lrp7n; \u0645\u062E\u0645ò«³º.σ\u200Dð¹·; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; ; # مخم.σð¹·
+xn--tgb9bb64691z.xn--3xa006lrp7n; \u0645\u062E\u0645ò«³º.Ï‚\u200Dð¹·; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--3xa006lrp7n; ; ; # مخم.Ï‚ð¹·
+\uFD8Fò«³º.Σ\u200Dð¹·; \u0645\u062E\u0645ò«³º.σ\u200Dð¹·; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.σð¹·
+\uFD8Fò«³º.σ\u200Dð¹·; \u0645\u062E\u0645ò«³º.σ\u200Dð¹·; [B2, B3, B5, B6, C2, V6]; xn--tgb9bb64691z.xn--4xa895lrp7n; ; xn--tgb9bb64691z.xn--4xa6667k; [B2, B3, B5, B6, V6] # مخم.σð¹·
+â’Ž\u06C1\u0605。\uAAF6Ûµð‡½; â’Ž\u06C1\u0605.\uAAF6Ûµð‡½; [B1, V5, V6]; xn--nfb98ai25e.xn--imb3805fxt8b; ; ; # â’ŽÛ.꫶۵ð‡½
+7.\u06C1\u0605。\uAAF6Ûµð‡½; 7.\u06C1\u0605.\uAAF6Ûµð‡½; [B1, V5, V6]; 7.xn--nfb98a.xn--imb3805fxt8b; ; ; # 7.Û.꫶۵ð‡½
+7.xn--nfb98a.xn--imb3805fxt8b; 7.\u06C1\u0605.\uAAF6Ûµð‡½; [B1, V5, V6]; 7.xn--nfb98a.xn--imb3805fxt8b; ; ; # 7.Û.꫶۵ð‡½
+xn--nfb98ai25e.xn--imb3805fxt8b; â’Ž\u06C1\u0605.\uAAF6Ûµð‡½; [B1, V5, V6]; xn--nfb98ai25e.xn--imb3805fxt8b; ; ; # â’ŽÛ.꫶۵ð‡½
+-ᡥ᠆ó²­ã€‚\u0605\u1A5Dð¹¡; -ᡥ᠆ó²­.\u0605\u1A5Dð¹¡; [B1, V3, V6]; xn----f3j6s87156i.xn--nfb035hoo2p; ; ; # -ᡥ᠆.á©ð¹¡
+xn----f3j6s87156i.xn--nfb035hoo2p; -ᡥ᠆ó²­.\u0605\u1A5Dð¹¡; [B1, V3, V6]; xn----f3j6s87156i.xn--nfb035hoo2p; ; ; # -ᡥ᠆.á©ð¹¡
+\u200D.\u06BD\u0663\u0596; ; [B1, C2]; xn--1ug.xn--hcb32bni; ; .xn--hcb32bni; [A4_2] # .Ú½Ù£Ö–
+.xn--hcb32bni; .\u06BD\u0663\u0596; [X4_2]; .xn--hcb32bni; [A4_2]; ; # .Ú½Ù£Ö–
+xn--1ug.xn--hcb32bni; \u200D.\u06BD\u0663\u0596; [B1, C2]; xn--1ug.xn--hcb32bni; ; ; # .Ú½Ù£Ö–
+xn--hcb32bni; \u06BD\u0663\u0596; ; xn--hcb32bni; ; ; # Ú½Ù£Ö–
+\u06BD\u0663\u0596; ; ; xn--hcb32bni; ; ; # Ú½Ù£Ö–
+㒧۱.Ⴚ\u0678\u200D; 㒧۱.Ⴚ\u064A\u0674\u200D; [B5, B6, C2, V6]; xn--emb715u.xn--mhb8f817ao2p; ; xn--emb715u.xn--mhb8f817a; [B5, B6, V6] # 㒧۱.Ⴚيٴ
+㒧۱.Ⴚ\u064A\u0674\u200D; ; [B5, B6, C2, V6]; xn--emb715u.xn--mhb8f817ao2p; ; xn--emb715u.xn--mhb8f817a; [B5, B6, V6] # 㒧۱.Ⴚيٴ
+㒧۱.ⴚ\u064A\u0674\u200D; ; [B5, B6, C2]; xn--emb715u.xn--mhb8f960g03l; ; xn--emb715u.xn--mhb8fy26k; [B5, B6] # 㒧۱.ⴚيٴ
+xn--emb715u.xn--mhb8fy26k; 㒧۱.ⴚ\u064A\u0674; [B5, B6]; xn--emb715u.xn--mhb8fy26k; ; ; # 㒧۱.ⴚيٴ
+xn--emb715u.xn--mhb8f960g03l; 㒧۱.ⴚ\u064A\u0674\u200D; [B5, B6, C2]; xn--emb715u.xn--mhb8f960g03l; ; ; # 㒧۱.ⴚيٴ
+xn--emb715u.xn--mhb8f817a; 㒧۱.Ⴚ\u064A\u0674; [B5, B6, V6]; xn--emb715u.xn--mhb8f817a; ; ; # 㒧۱.Ⴚيٴ
+xn--emb715u.xn--mhb8f817ao2p; 㒧۱.Ⴚ\u064A\u0674\u200D; [B5, B6, C2, V6]; xn--emb715u.xn--mhb8f817ao2p; ; ; # 㒧۱.Ⴚيٴ
+㒧۱.ⴚ\u0678\u200D; 㒧۱.ⴚ\u064A\u0674\u200D; [B5, B6, C2]; xn--emb715u.xn--mhb8f960g03l; ; xn--emb715u.xn--mhb8fy26k; [B5, B6] # 㒧۱.ⴚيٴ
+\u0F94ꡋ-.-𖬴; \u0F94ꡋ-.-𖬴; [V3, V5]; xn----ukg9938i.xn----4u5m; ; ; # ྔꡋ-.-𖬴
+\u0F94ꡋ-.-𖬴; ; [V3, V5]; xn----ukg9938i.xn----4u5m; ; ; # ྔꡋ-.-𖬴
+xn----ukg9938i.xn----4u5m; \u0F94ꡋ-.-𖬴; [V3, V5]; xn----ukg9938i.xn----4u5m; ; ; # ྔꡋ-.-𖬴
+񿒳-⋢\u200C.标-; 񿒳-⋢\u200C.标-; [C1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [V3, V6] # -⋢.标-
+񿒳-⊑\u0338\u200C.标-; 񿒳-⋢\u200C.标-; [C1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [V3, V6] # -⋢.标-
+ñ¿’³-â‹¢\u200C.æ ‡-; ; [C1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [V3, V6] # -â‹¢.æ ‡-
+񿒳-⊑\u0338\u200C.标-; 񿒳-⋢\u200C.标-; [C1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; xn----9mo67451g.xn----qj7b; [V3, V6] # -⋢.标-
xn----9mo67451g.xn----qj7b; ñ¿’³-â‹¢.æ ‡-; [V3, V6]; xn----9mo67451g.xn----qj7b; ; ; # -â‹¢.æ ‡-
-xn----sgn90kn5663a.xn----qj7b; 񿒳-⋢‌.标-; [C1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; ; # -⋢.标-
-ٱ.ςߜ; ٱ.ςߜ; [B5, B6]; xn--qib.xn--3xa41s; ; xn--qib.xn--4xa21s; # ٱ.ςߜ
-ٱ.ςߜ; ; [B5, B6]; xn--qib.xn--3xa41s; ; xn--qib.xn--4xa21s; # ٱ.ςߜ
-ٱ.Σߜ; ٱ.σߜ; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
-ٱ.σߜ; ; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
-xn--qib.xn--4xa21s; ٱ.σߜ; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
-xn--qib.xn--3xa41s; ٱ.ςߜ; [B5, B6]; xn--qib.xn--3xa41s; ; ; # ٱ.ςߜ
-ٱ.Σߜ; ٱ.σߜ; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
-ٱ.σߜ; ٱ.σߜ; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
-ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; [B2, B3, B5, B6, C2, P1, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; xn--nfb17942h.xn--nzb6708kx3pn; [B2, B3, B5, B6, P1, V6] # .à£ð‘‘‚
-ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; ; [B2, B3, B5, B6, C2, P1, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; xn--nfb17942h.xn--nzb6708kx3pn; [B2, B3, B5, B6, P1, V6] # .à£ð‘‘‚
-xn--nfb17942h.xn--nzb6708kx3pn; ñ¼ˆ¶Ø….à£ð‘‘‚ð±¼±; [B2, B3, B5, B6, V6]; xn--nfb17942h.xn--nzb6708kx3pn; ; ; # .à£ð‘‘‚
-xn--nfb17942h.xn--nzb240jv06otevq; ñ¼ˆ¶Ø….à£â€ð‘‘‚ð±¼±; [B2, B3, B5, B6, C2, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; ; # .à£ð‘‘‚
-ð¹¾ð‹©ðžµœï½¡á¯²; ð¹¾ð‹©ðžµœ.᯲; [B1, P1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # ð¹¾ð‹©.᯲
-ð¹¾ð‹©ðžµœã€‚᯲; ð¹¾ð‹©ðžµœ.᯲; [B1, P1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # ð¹¾ð‹©.᯲
-xn--d97cn8rn44p.xn--0zf; ð¹¾ð‹©ðžµœ.᯲; [B1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # ð¹¾ð‹©.᯲
-6ᅠᰳ󠸧.򟜊锰ܬς; ; [B1, B5, P1, V6]; xn--6-5bh476ewr517a.xn--3xa16ohw6pk078g; ; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; # 6ᰳ.锰ܬς
-6ᅠᰳ󠸧.򟜊锰ܬΣ; 6ᅠᰳ󠸧.򟜊锰ܬσ; [B1, B5, P1, V6]; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; ; ; # 6ᰳ.锰ܬσ
-6ᅠᰳ󠸧.򟜊锰ܬσ; ; [B1, B5, P1, V6]; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; ; ; # 6ᰳ.锰ܬσ
-xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; 6ᅠᰳ󠸧.򟜊锰ܬσ; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; ; ; # 6ᰳ.锰ܬσ
-xn--6-5bh476ewr517a.xn--3xa16ohw6pk078g; 6ᅠᰳ󠸧.򟜊锰ܬς; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--3xa16ohw6pk078g; ; ; # 6ᰳ.锰ܬς
-ڳ︄ñ…Ž¦ðŸ½ï½¡ð¹½; Ú³ñ…Ž¦7.ð¹½; [B1, B2, P1, V6]; xn--7-yuc34665f.xn--1o0d; ; ; # Ú³7.ð¹½
-ڳ︄ñ…Ž¦7。ð¹½; Ú³ñ…Ž¦7.ð¹½; [B1, B2, P1, V6]; xn--7-yuc34665f.xn--1o0d; ; ; # Ú³7.ð¹½
-xn--7-yuc34665f.xn--1o0d; Ú³ñ…Ž¦7.ð¹½; [B1, B2, V6]; xn--7-yuc34665f.xn--1o0d; ; ; # Ú³7.ð¹½
-𞮧.‌⫞; 𞮧.‌⫞; [B1, C1, P1, V6]; xn--pw6h.xn--0ug283b; ; xn--pw6h.xn--53i; [B1, P1, V6] # .⫞
-𞮧.‌⫞; ; [B1, C1, P1, V6]; xn--pw6h.xn--0ug283b; ; xn--pw6h.xn--53i; [B1, P1, V6] # .⫞
+xn----sgn90kn5663a.xn----qj7b; ñ¿’³-â‹¢\u200C.æ ‡-; [C1, V3, V6]; xn----sgn90kn5663a.xn----qj7b; ; ; # -â‹¢.æ ‡-
+\u0671.ς\u07DC; \u0671.ς\u07DC; [B5, B6]; xn--qib.xn--3xa41s; ; xn--qib.xn--4xa21s; # ٱ.ςߜ
+\u0671.ς\u07DC; ; [B5, B6]; xn--qib.xn--3xa41s; ; xn--qib.xn--4xa21s; # ٱ.ςߜ
+\u0671.Σ\u07DC; \u0671.σ\u07DC; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
+\u0671.σ\u07DC; ; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
+xn--qib.xn--4xa21s; \u0671.σ\u07DC; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
+xn--qib.xn--3xa41s; \u0671.ς\u07DC; [B5, B6]; xn--qib.xn--3xa41s; ; ; # ٱ.ςߜ
+\u0671.Σ\u07DC; \u0671.σ\u07DC; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
+\u0671.σ\u07DC; \u0671.σ\u07DC; [B5, B6]; xn--qib.xn--4xa21s; ; ; # ٱ.σߜ
+ñ¼ˆ¶\u0605.\u08C1\u200Dð‘‘‚ð±¼±; ñ¼ˆ¶\u0605.\u08C1\u200Dð‘‘‚ð±¼±; [B2, B3, B5, B6, C2, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; xn--nfb17942h.xn--nzb6708kx3pn; [B2, B3, B5, B6, V6] # .à£ð‘‘‚ð±¼±
+ñ¼ˆ¶\u0605.\u08C1\u200Dð‘‘‚ð±¼±; ; [B2, B3, B5, B6, C2, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; xn--nfb17942h.xn--nzb6708kx3pn; [B2, B3, B5, B6, V6] # .à£ð‘‘‚ð±¼±
+xn--nfb17942h.xn--nzb6708kx3pn; ñ¼ˆ¶\u0605.\u08C1ð‘‘‚ð±¼±; [B2, B3, B5, B6, V6]; xn--nfb17942h.xn--nzb6708kx3pn; ; ; # .à£ð‘‘‚ð±¼±
+xn--nfb17942h.xn--nzb240jv06otevq; ñ¼ˆ¶\u0605.\u08C1\u200Dð‘‘‚ð±¼±; [B2, B3, B5, B6, C2, V6]; xn--nfb17942h.xn--nzb240jv06otevq; ; ; # .à£ð‘‘‚ð±¼±
+ð¹¾ð‹©ðžµœï½¡\u1BF2; ð¹¾ð‹©ðžµœ.\u1BF2; [B1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # ð¹¾ð‹©.᯲
+ð¹¾ð‹©ðžµœã€‚\u1BF2; ð¹¾ð‹©ðžµœ.\u1BF2; [B1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # ð¹¾ð‹©.᯲
+xn--d97cn8rn44p.xn--0zf; ð¹¾ð‹©ðžµœ.\u1BF2; [B1, V5, V6]; xn--d97cn8rn44p.xn--0zf; ; ; # ð¹¾ð‹©.᯲
+6\u1160\u1C33󠸧.򟜊锰\u072Cς; ; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--3xa16ohw6pk078g; ; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; # 6ᰳ.锰ܬς
+6\u1160\u1C33󠸧.򟜊锰\u072CΣ; 6\u1160\u1C33󠸧.򟜊锰\u072Cσ; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; ; ; # 6ᰳ.锰ܬσ
+6\u1160\u1C33󠸧.򟜊锰\u072Cσ; ; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; ; ; # 6ᰳ.锰ܬσ
+xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; 6\u1160\u1C33󠸧.򟜊锰\u072Cσ; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--4xa95ohw6pk078g; ; ; # 6ᰳ.锰ܬσ
+xn--6-5bh476ewr517a.xn--3xa16ohw6pk078g; 6\u1160\u1C33󠸧.򟜊锰\u072Cς; [B1, B5, V6]; xn--6-5bh476ewr517a.xn--3xa16ohw6pk078g; ; ; # 6ᰳ.锰ܬς
+\u06B3\uFE04ñ…Ž¦ðŸ½ï½¡ð¹½; \u06B3ñ…Ž¦7.ð¹½; [B1, B2, V6]; xn--7-yuc34665f.xn--1o0d; ; ; # Ú³7.ð¹½
+\u06B3\uFE04ñ…Ž¦7。ð¹½; \u06B3ñ…Ž¦7.ð¹½; [B1, B2, V6]; xn--7-yuc34665f.xn--1o0d; ; ; # Ú³7.ð¹½
+xn--7-yuc34665f.xn--1o0d; \u06B3ñ…Ž¦7.ð¹½; [B1, B2, V6]; xn--7-yuc34665f.xn--1o0d; ; ; # Ú³7.ð¹½
+𞮧.\u200C⫞; 𞮧.\u200C⫞; [B1, C1, V6]; xn--pw6h.xn--0ug283b; ; xn--pw6h.xn--53i; [B1, V6] # .⫞
+𞮧.\u200C⫞; ; [B1, C1, V6]; xn--pw6h.xn--0ug283b; ; xn--pw6h.xn--53i; [B1, V6] # .⫞
xn--pw6h.xn--53i; 𞮧.⫞; [B1, V6]; xn--pw6h.xn--53i; ; ; # .⫞
-xn--pw6h.xn--0ug283b; 𞮧.‌⫞; [B1, C1, V6]; xn--pw6h.xn--0ug283b; ; ; # .⫞
--񕉴.۠ᢚ-; ; [P1, V3, V5, V6]; xn----qi38c.xn----jxc827k; ; ; # -.۠ᢚ-
-xn----qi38c.xn----jxc827k; -񕉴.۠ᢚ-; [V3, V5, V6]; xn----qi38c.xn----jxc827k; ; ; # -.۠ᢚ-
-âŒâ€ð‘„´ï¼Žâ€ŒðŸ©Ù¬; âŒâ€ð‘„´.‌7Ù¬; [B1, C1, C2]; xn--1ug38i2093a.xn--7-xqc297q; ; xn--nhh5394g.xn--7-xqc; [B1] # âŒð‘„´.7Ù¬
-âŒâ€ð‘„´.‌7Ù¬; ; [B1, C1, C2]; xn--1ug38i2093a.xn--7-xqc297q; ; xn--nhh5394g.xn--7-xqc; [B1] # âŒð‘„´.7Ù¬
-xn--nhh5394g.xn--7-xqc; âŒð‘„´.7Ù¬; [B1]; xn--nhh5394g.xn--7-xqc; ; ; # âŒð‘„´.7Ù¬
-xn--1ug38i2093a.xn--7-xqc297q; âŒâ€ð‘„´.‌7Ù¬; [B1, C1, C2]; xn--1ug38i2093a.xn--7-xqc297q; ; ; # âŒð‘„´.7Ù¬
-︒ﴅืﻼ。岓᯲󠾃ᡂ; ︒صىืلا.岓᯲󠾃ᡂ; [B1, P1, V6]; xn--mgb1a7bt462hf267a.xn--17e10qe61f9r71s; ; ; # ︒صىืلا.岓᯲ᡂ
-。صىืلا。岓᯲󠾃ᡂ; .صىืلا.岓᯲󠾃ᡂ; [P1, V6, X4_2]; .xn--mgb1a7bt462h.xn--17e10qe61f9r71s; [P1, V6, A4_2]; ; # .صىืلا.岓᯲ᡂ
-.xn--mgb1a7bt462h.xn--17e10qe61f9r71s; .صىืلا.岓᯲󠾃ᡂ; [V6, X4_2]; .xn--mgb1a7bt462h.xn--17e10qe61f9r71s; [V6, A4_2]; ; # .صىืلا.岓᯲ᡂ
-xn--mgb1a7bt462hf267a.xn--17e10qe61f9r71s; ︒صىืلا.岓᯲󠾃ᡂ; [B1, V6]; xn--mgb1a7bt462hf267a.xn--17e10qe61f9r71s; ; ; # ︒صىืلا.岓᯲ᡂ
+xn--pw6h.xn--0ug283b; 𞮧.\u200C⫞; [B1, C1, V6]; xn--pw6h.xn--0ug283b; ; ; # .⫞
+-񕉴.\u06E0ᢚ-; ; [V3, V5, V6]; xn----qi38c.xn----jxc827k; ; ; # -.۠ᢚ-
+xn----qi38c.xn----jxc827k; -񕉴.\u06E0ᢚ-; [V3, V5, V6]; xn----qi38c.xn----jxc827k; ; ; # -.۠ᢚ-
+âŒ\u200D𑄴.\u200CðŸ©\u066C; âŒ\u200Dð‘„´.\u200C7\u066C; [B1, C1, C2]; xn--1ug38i2093a.xn--7-xqc297q; ; xn--nhh5394g.xn--7-xqc; [B1] # âŒð‘„´.7Ù¬
+âŒ\u200Dð‘„´.\u200C7\u066C; ; [B1, C1, C2]; xn--1ug38i2093a.xn--7-xqc297q; ; xn--nhh5394g.xn--7-xqc; [B1] # âŒð‘„´.7Ù¬
+xn--nhh5394g.xn--7-xqc; âŒð‘„´.7\u066C; [B1]; xn--nhh5394g.xn--7-xqc; ; ; # âŒð‘„´.7Ù¬
+xn--1ug38i2093a.xn--7-xqc297q; âŒ\u200Dð‘„´.\u200C7\u066C; [B1, C1, C2]; xn--1ug38i2093a.xn--7-xqc297q; ; ; # âŒð‘„´.7Ù¬
+︒\uFD05\u0E37\uFEFC。岓\u1BF2󠾃ᡂ; ︒\u0635\u0649\u0E37\u0644\u0627.岓\u1BF2󠾃ᡂ; [B1, V6]; xn--mgb1a7bt462hf267a.xn--17e10qe61f9r71s; ; ; # ︒صىืلا.岓᯲ᡂ
+。\u0635\u0649\u0E37\u0644\u0627。岓\u1BF2󠾃ᡂ; .\u0635\u0649\u0E37\u0644\u0627.岓\u1BF2󠾃ᡂ; [V6, X4_2]; .xn--mgb1a7bt462h.xn--17e10qe61f9r71s; [V6, A4_2]; ; # .صىืلا.岓᯲ᡂ
+.xn--mgb1a7bt462h.xn--17e10qe61f9r71s; .\u0635\u0649\u0E37\u0644\u0627.岓\u1BF2󠾃ᡂ; [V6, X4_2]; .xn--mgb1a7bt462h.xn--17e10qe61f9r71s; [V6, A4_2]; ; # .صىืلا.岓᯲ᡂ
+xn--mgb1a7bt462hf267a.xn--17e10qe61f9r71s; ︒\u0635\u0649\u0E37\u0644\u0627.岓\u1BF2󠾃ᡂ; [B1, V6]; xn--mgb1a7bt462hf267a.xn--17e10qe61f9r71s; ; ; # ︒صىืلا.岓᯲ᡂ
ð¹¨ã€‚8ð‘†; ð¹¨.8ð‘†; [B1]; xn--go0d.xn--8-yu7i; ; ; # ð¹¨.8ð‘†
xn--go0d.xn--8-yu7i; ð¹¨.8ð‘†; [B1]; xn--go0d.xn--8-yu7i; ; ; # ð¹¨.8ð‘†
-𞀕ൃ.ꡚࣺð¹°àµ„; 𞀕ൃ.ꡚࣺð¹°àµ„; [B1, B3, B5, B6, V5]; xn--mxc5210v.xn--90b01t8u2p1ltd; ; ; # 𞀕ൃ.ꡚࣺð¹°àµ„
-𞀕ൃ.ꡚࣺð¹°àµ„; ; [B1, B3, B5, B6, V5]; xn--mxc5210v.xn--90b01t8u2p1ltd; ; ; # 𞀕ൃ.ꡚࣺð¹°àµ„
-xn--mxc5210v.xn--90b01t8u2p1ltd; 𞀕ൃ.ꡚࣺð¹°àµ„; [B1, B3, B5, B6, V5]; xn--mxc5210v.xn--90b01t8u2p1ltd; ; ; # 𞀕ൃ.ꡚࣺð¹°àµ„
-ó†©ð¦¹Ìƒï½¡ó …; ó†©ð¦¹Ìƒ.ó …; [B1, B5, B6, P1, V6]; xn--nsa1265kp9z9e.xn--xt36e; ; ; # ̃.
-ó†©ð¦¹Ìƒã€‚ó …; ó†©ð¦¹Ìƒ.ó …; [B1, B5, B6, P1, V6]; xn--nsa1265kp9z9e.xn--xt36e; ; ; # ̃.
-xn--nsa1265kp9z9e.xn--xt36e; ó†©ð¦¹Ìƒ.ó …; [B1, B5, B6, V6]; xn--nsa1265kp9z9e.xn--xt36e; ; ; # ̃.
-ᢌ.-࡚; ᢌ.-࡚; [V3]; xn--59e.xn----5jd; ; ; # ᢌ.-࡚
-ᢌ.-࡚; ; [V3]; xn--59e.xn----5jd; ; ; # ᢌ.-࡚
-xn--59e.xn----5jd; ᢌ.-࡚; [V3]; xn--59e.xn----5jd; ; ; # ᢌ.-࡚
-𥛛𑘶。ð¹¬ð²¸à¯; 𥛛𑘶.ð¹¬ð²¸à¯; [B1, P1, V6]; xn--jb2dj685c.xn--xmc5562kmcb; ; ; # 𥛛𑘶.ð¹¬à¯
-𥛛𑘶。ð¹¬ð²¸à¯; 𥛛𑘶.ð¹¬ð²¸à¯; [B1, P1, V6]; xn--jb2dj685c.xn--xmc5562kmcb; ; ; # 𥛛𑘶.ð¹¬à¯
-xn--jb2dj685c.xn--xmc5562kmcb; 𥛛𑘶.ð¹¬ð²¸à¯; [B1, V6]; xn--jb2dj685c.xn--xmc5562kmcb; ; ; # 𥛛𑘶.ð¹¬à¯
-Ⴐݿ.‌; Ⴐݿ.‌; [B1, B5, B6, C1, P1, V6]; xn--gqb918b.xn--0ug; ; xn--gqb918b.; [B5, B6, P1, V6] # Ⴐݿ.
-Ⴐݿ.‌; ; [B1, B5, B6, C1, P1, V6]; xn--gqb918b.xn--0ug; ; xn--gqb918b.; [B5, B6, P1, V6] # Ⴐݿ.
-â´Ý¿.‌; ; [B1, B5, B6, C1]; xn--gqb743q.xn--0ug; ; xn--gqb743q.; [B5, B6] # â´Ý¿.
-xn--gqb743q.; â´Ý¿.; [B5, B6]; xn--gqb743q.; ; ; # â´Ý¿.
-xn--gqb743q.xn--0ug; â´Ý¿.‌; [B1, B5, B6, C1]; xn--gqb743q.xn--0ug; ; ; # â´Ý¿.
-xn--gqb918b.; á‚°Ý¿.; [B5, B6, V6]; xn--gqb918b.; ; ; # á‚°Ý¿.
-xn--gqb918b.xn--0ug; Ⴐݿ.‌; [B1, B5, B6, C1, V6]; xn--gqb918b.xn--0ug; ; ; # Ⴐݿ.
-â´Ý¿ï¼Žâ€Œ; â´Ý¿.‌; [B1, B5, B6, C1]; xn--gqb743q.xn--0ug; ; xn--gqb743q.; [B5, B6] # â´Ý¿.
-🄅𑲞-⒈。â€á ©Ú¥; 🄅𑲞-â’ˆ.â€á ©Ú¥; [B1, C2, P1, V6]; xn----ecp8796hjtvg.xn--7jb180gexf; ; xn----ecp8796hjtvg.xn--7jb180g; [B1, B5, B6, P1, V6] # 🄅𑲞-â’ˆ.á ©Ú¥
-4,𑲞-1.。â€á ©Ú¥; 4,𑲞-1..â€á ©Ú¥; [B1, C2, P1, V6, X4_2]; xn--4,-1-w401a..xn--7jb180gexf; [B1, C2, P1, V6, A4_2]; xn--4,-1-w401a..xn--7jb180g; [B1, B5, B6, P1, V6, A4_2] # 4,𑲞-1..á ©Ú¥
-xn--4,-1-w401a..xn--7jb180g; 4,𑲞-1..ᠩڥ; [B1, B5, B6, P1, V6, X4_2]; xn--4,-1-w401a..xn--7jb180g; [B1, B5, B6, P1, V6, A4_2]; ; # 4,𑲞-1..ᠩڥ
-xn--4,-1-w401a..xn--7jb180gexf; 4,𑲞-1..â€á ©Ú¥; [B1, C2, P1, V6, X4_2]; xn--4,-1-w401a..xn--7jb180gexf; [B1, C2, P1, V6, A4_2]; ; # 4,𑲞-1..á ©Ú¥
-xn----ecp8796hjtvg.xn--7jb180g; 🄅𑲞-⒈.ᠩڥ; [B1, B5, B6, V6]; xn----ecp8796hjtvg.xn--7jb180g; ; ; # 🄅𑲞-⒈.ᠩڥ
-xn----ecp8796hjtvg.xn--7jb180gexf; 🄅𑲞-â’ˆ.â€á ©Ú¥; [B1, C2, V6]; xn----ecp8796hjtvg.xn--7jb180gexf; ; ; # 🄅𑲞-â’ˆ.á ©Ú¥
-񗀤。𞤪򮿋; 񗀤.𞤪򮿋; [B2, B3, P1, V6]; xn--4240a.xn--ie6h83808a; ; ; # .𞤪
-񗀤。𞤈򮿋; 񗀤.𞤪򮿋; [B2, B3, P1, V6]; xn--4240a.xn--ie6h83808a; ; ; # .𞤪
+𞀕\u0D43.ꡚ\u08FAð¹°\u0D44; 𞀕\u0D43.ê¡š\u08FAð¹°\u0D44; [B1, B5, B6, V5]; xn--mxc5210v.xn--90b01t8u2p1ltd; ; ; # 𞀕ൃ.ꡚࣺð¹°àµ„
+𞀕\u0D43.ê¡š\u08FAð¹°\u0D44; ; [B1, B5, B6, V5]; xn--mxc5210v.xn--90b01t8u2p1ltd; ; ; # 𞀕ൃ.ꡚࣺð¹°àµ„
+xn--mxc5210v.xn--90b01t8u2p1ltd; 𞀕\u0D43.ê¡š\u08FAð¹°\u0D44; [B1, B5, B6, V5]; xn--mxc5210v.xn--90b01t8u2p1ltd; ; ; # 𞀕ൃ.ꡚࣺð¹°àµ„
+ó†©ð¦¹\u0303。ó …; ó†©ð¦¹\u0303.ó …; [B1, B5, B6, V6]; xn--nsa1265kp9z9e.xn--xt36e; ; ; # ̃.
+ó†©ð¦¹\u0303。ó …; ó†©ð¦¹\u0303.ó …; [B1, B5, B6, V6]; xn--nsa1265kp9z9e.xn--xt36e; ; ; # ̃.
+xn--nsa1265kp9z9e.xn--xt36e; ó†©ð¦¹\u0303.ó …; [B1, B5, B6, V6]; xn--nsa1265kp9z9e.xn--xt36e; ; ; # ̃.
+ᢌ.-\u085A; ᢌ.-\u085A; [V3]; xn--59e.xn----5jd; ; ; # ᢌ.-࡚
+ᢌ.-\u085A; ; [V3]; xn--59e.xn----5jd; ; ; # ᢌ.-࡚
+xn--59e.xn----5jd; ᢌ.-\u085A; [V3]; xn--59e.xn----5jd; ; ; # ᢌ.-࡚
+𥛛𑘶。ð¹¬ð²¸\u0BCD; 𥛛𑘶.ð¹¬ð²¸\u0BCD; [B1, V6]; xn--jb2dj685c.xn--xmc5562kmcb; ; ; # 𥛛𑘶.ð¹¬à¯
+𥛛𑘶。ð¹¬ð²¸\u0BCD; 𥛛𑘶.ð¹¬ð²¸\u0BCD; [B1, V6]; xn--jb2dj685c.xn--xmc5562kmcb; ; ; # 𥛛𑘶.ð¹¬à¯
+xn--jb2dj685c.xn--xmc5562kmcb; 𥛛𑘶.ð¹¬ð²¸\u0BCD; [B1, V6]; xn--jb2dj685c.xn--xmc5562kmcb; ; ; # 𥛛𑘶.ð¹¬à¯
+Ⴐ\u077F.\u200C; Ⴐ\u077F.\u200C; [B1, B5, B6, C1, V6]; xn--gqb918b.xn--0ug; ; xn--gqb918b.; [B5, B6, V6] # Ⴐݿ.
+á‚°\u077F.\u200C; ; [B1, B5, B6, C1, V6]; xn--gqb918b.xn--0ug; ; xn--gqb918b.; [B5, B6, V6] # á‚°Ý¿.
+â´\u077F.\u200C; ; [B1, B5, B6, C1]; xn--gqb743q.xn--0ug; ; xn--gqb743q.; [B5, B6] # â´Ý¿.
+xn--gqb743q.; â´\u077F.; [B5, B6]; xn--gqb743q.; ; ; # â´Ý¿.
+xn--gqb743q.xn--0ug; â´\u077F.\u200C; [B1, B5, B6, C1]; xn--gqb743q.xn--0ug; ; ; # â´Ý¿.
+xn--gqb918b.; á‚°\u077F.; [B5, B6, V6]; xn--gqb918b.; ; ; # á‚°Ý¿.
+xn--gqb918b.xn--0ug; á‚°\u077F.\u200C; [B1, B5, B6, C1, V6]; xn--gqb918b.xn--0ug; ; ; # á‚°Ý¿.
+â´\u077F.\u200C; â´\u077F.\u200C; [B1, B5, B6, C1]; xn--gqb743q.xn--0ug; ; xn--gqb743q.; [B5, B6] # â´Ý¿.
+🄅𑲞-⒈。\u200Dᠩ\u06A5; 🄅𑲞-⒈.\u200Dᠩ\u06A5; [B1, C2, V6]; xn----ecp8796hjtvg.xn--7jb180gexf; ; xn----ecp8796hjtvg.xn--7jb180g; [B1, B5, B6, V6] # 🄅𑲞-⒈.ᠩڥ
+4,𑲞-1.。\u200Dᠩ\u06A5; 4,𑲞-1..\u200Dᠩ\u06A5; [B1, C2, V6, X4_2]; xn--4,-1-w401a..xn--7jb180gexf; [B1, C2, V6, A4_2]; xn--4,-1-w401a..xn--7jb180g; [B1, B5, B6, V6, A4_2] # 4,𑲞-1..ᠩڥ
+xn--4,-1-w401a..xn--7jb180g; 4,𑲞-1..ᠩ\u06A5; [B1, B5, B6, V6, X4_2]; xn--4,-1-w401a..xn--7jb180g; [B1, B5, B6, V6, A4_2]; ; # 4,𑲞-1..ᠩڥ
+xn--4,-1-w401a..xn--7jb180gexf; 4,𑲞-1..\u200Dᠩ\u06A5; [B1, C2, V6, X4_2]; xn--4,-1-w401a..xn--7jb180gexf; [B1, C2, V6, A4_2]; ; # 4,𑲞-1..ᠩڥ
+xn----ecp8796hjtvg.xn--7jb180g; 🄅𑲞-⒈.ᠩ\u06A5; [B1, B5, B6, V6]; xn----ecp8796hjtvg.xn--7jb180g; ; ; # 🄅𑲞-⒈.ᠩڥ
+xn----ecp8796hjtvg.xn--7jb180gexf; 🄅𑲞-⒈.\u200Dᠩ\u06A5; [B1, C2, V6]; xn----ecp8796hjtvg.xn--7jb180gexf; ; ; # 🄅𑲞-⒈.ᠩڥ
+񗀤。𞤪򮿋; 񗀤.𞤪򮿋; [B2, B3, V6]; xn--4240a.xn--ie6h83808a; ; ; # .𞤪
+񗀤。𞤈򮿋; 񗀤.𞤪򮿋; [B2, B3, V6]; xn--4240a.xn--ie6h83808a; ; ; # .𞤪
xn--4240a.xn--ie6h83808a; 񗀤.𞤪򮿋; [B2, B3, V6]; xn--4240a.xn--ie6h83808a; ; ; # .𞤪
-×۲。ð®ŠÙ¬ð¨Šé„¨; ×Û².ð®ŠÙ¬ð¨Šé„¨; [B1, B2, B3, V5]; xn--pdb42d.xn--lib6412enztdwv6h; ; ; # ×Û².ð®ŠÙ¬ð¨Šé„¨
-×۲。ð®ŠÙ¬ð¨Šé„¨; ×Û².ð®ŠÙ¬ð¨Šé„¨; [B1, B2, B3, V5]; xn--pdb42d.xn--lib6412enztdwv6h; ; ; # ×Û².ð®ŠÙ¬ð¨Šé„¨
-xn--pdb42d.xn--lib6412enztdwv6h; ×Û².ð®ŠÙ¬ð¨Šé„¨; [B1, B2, B3, V5]; xn--pdb42d.xn--lib6412enztdwv6h; ; ; # ×Û².ð®ŠÙ¬ð¨Šé„¨
-ðž­³-ê¡ã€‚á©©à¯-; ðž­³-ê¡.á©©à¯-; [B1, B2, B3, P1, V3, V5, V6]; xn----be4e4276f.xn----lze333i; ; ; # -ê¡.á©©à¯-
-xn----be4e4276f.xn----lze333i; ðž­³-ê¡.á©©à¯-; [B1, B2, B3, V3, V5, V6]; xn----be4e4276f.xn----lze333i; ; ; # -ê¡.á©©à¯-
-္-𚮭🞢.ß; ္-𚮭🞢.ß; [P1, V5, V6]; xn----9tg11172akr8b.xn--zca; ; xn----9tg11172akr8b.ss; # ္-🞢.ß
-္-𚮭🞢.ß; ; [P1, V5, V6]; xn----9tg11172akr8b.xn--zca; ; xn----9tg11172akr8b.ss; # ္-🞢.ß
-္-𚮭🞢.SS; ္-𚮭🞢.ss; [P1, V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
-္-𚮭🞢.ss; ; [P1, V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
-္-𚮭🞢.Ss; ္-𚮭🞢.ss; [P1, V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
-xn----9tg11172akr8b.ss; ္-𚮭🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
-xn----9tg11172akr8b.xn--zca; ္-𚮭🞢.ß; [V5, V6]; xn----9tg11172akr8b.xn--zca; ; ; # ္-🞢.ß
-္-𚮭🞢.SS; ္-𚮭🞢.ss; [P1, V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
-္-𚮭🞢.ss; ္-𚮭🞢.ss; [P1, V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
-္-𚮭🞢.Ss; ္-𚮭🞢.ss; [P1, V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
-ï³²-‌。Ⴟ‌â£; Ù€ÙŽÙ‘-‌.Ⴟ‌â£; [B3, B6, C1, P1, V6]; xn----eoc6bm0504a.xn--3nd849e05c; ; xn----eoc6bm.xn--3nd240h; [B3, B6, P1, V3, V6] # Ù€ÙŽÙ‘-.á‚¿â£
-Ù€ÙŽÙ‘-‌。Ⴟ‌â£; Ù€ÙŽÙ‘-‌.Ⴟ‌â£; [B3, B6, C1, P1, V6]; xn----eoc6bm0504a.xn--3nd849e05c; ; xn----eoc6bm.xn--3nd240h; [B3, B6, P1, V3, V6] # Ù€ÙŽÙ‘-.á‚¿â£
-Ù€ÙŽÙ‘-‌。ⴟ‌â£; Ù€ÙŽÙ‘-‌.ⴟ‌â£; [B3, B6, C1]; xn----eoc6bm0504a.xn--0ug13nd0j; ; xn----eoc6bm.xn--xph904a; [B3, B6, V3] # Ù€ÙŽÙ‘-.â´Ÿâ£
-xn----eoc6bm.xn--xph904a; Ù€ÙŽÙ‘-.â´Ÿâ£; [B3, B6, V3]; xn----eoc6bm.xn--xph904a; ; ; # Ù€ÙŽÙ‘-.â´Ÿâ£
-xn----eoc6bm0504a.xn--0ug13nd0j; Ù€ÙŽÙ‘-‌.ⴟ‌â£; [B3, B6, C1]; xn----eoc6bm0504a.xn--0ug13nd0j; ; ; # Ù€ÙŽÙ‘-.â´Ÿâ£
-xn----eoc6bm.xn--3nd240h; Ù€ÙŽÙ‘-.á‚¿â£; [B3, B6, V3, V6]; xn----eoc6bm.xn--3nd240h; ; ; # Ù€ÙŽÙ‘-.á‚¿â£
-xn----eoc6bm0504a.xn--3nd849e05c; Ù€ÙŽÙ‘-‌.Ⴟ‌â£; [B3, B6, C1, V6]; xn----eoc6bm0504a.xn--3nd849e05c; ; ; # Ù€ÙŽÙ‘-.á‚¿â£
-ï³²-‌。ⴟ‌â£; Ù€ÙŽÙ‘-‌.ⴟ‌â£; [B3, B6, C1]; xn----eoc6bm0504a.xn--0ug13nd0j; ; xn----eoc6bm.xn--xph904a; [B3, B6, V3] # Ù€ÙŽÙ‘-.â´Ÿâ£
-àµ-â€â€Œï½¡ñ¥ž§â‚…≠; àµ-â€â€Œ.ñ¥ž§5≠; [C1, C2, P1, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [P1, V3, V5, V6] # àµ-.5≠
-àµ-â€â€Œï½¡ñ¥ž§â‚…≠; àµ-â€â€Œ.ñ¥ž§5≠; [C1, C2, P1, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [P1, V3, V5, V6] # àµ-.5≠
-àµ-â€â€Œã€‚ñ¥ž§5≠; àµ-â€â€Œ.ñ¥ž§5≠; [C1, C2, P1, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [P1, V3, V5, V6] # àµ-.5≠
-àµ-â€â€Œã€‚ñ¥ž§5≠; àµ-â€â€Œ.ñ¥ž§5≠; [C1, C2, P1, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [P1, V3, V5, V6] # àµ-.5≠
-xn----jmf.xn--5-ufo50192e; àµ-.ñ¥ž§5≠; [V3, V5, V6]; xn----jmf.xn--5-ufo50192e; ; ; # àµ-.5≠
-xn----jmf215lda.xn--5-ufo50192e; àµ-â€â€Œ.ñ¥ž§5≠; [C1, C2, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; ; # àµ-.5≠
-锣。à©ó ˜»ó š†; 锣.à©ó ˜»ó š†; [P1, V5, V6]; xn--gc5a.xn--ybc83044ppga; ; ; # 锣.à©
-xn--gc5a.xn--ybc83044ppga; 锣.à©ó ˜»ó š†; [V5, V6]; xn--gc5a.xn--ybc83044ppga; ; ; # 锣.à©
-ؽ𑈾.ىâ€ê¤«; ؽ𑈾.Ù‰â€ê¤«; [B3, C2]; xn--8gb2338k.xn--lhb603k060h; ; xn--8gb2338k.xn--lhb0154f; [] # ؽ𑈾.ى꤫
-ؽ𑈾.Ù‰â€ê¤«; ; [B3, C2]; xn--8gb2338k.xn--lhb603k060h; ; xn--8gb2338k.xn--lhb0154f; [] # ؽ𑈾.ى꤫
-xn--8gb2338k.xn--lhb0154f; ؽ𑈾.ى꤫; ; xn--8gb2338k.xn--lhb0154f; ; ; # ؽ𑈾.ى꤫
-ؽ𑈾.ى꤫; ; ; xn--8gb2338k.xn--lhb0154f; ; ; # ؽ𑈾.ى꤫
-xn--8gb2338k.xn--lhb603k060h; ؽ𑈾.Ù‰â€ê¤«; [B3, C2]; xn--8gb2338k.xn--lhb603k060h; ; ; # ؽ𑈾.ى꤫
-Ù¦â´á‚¥ï¼Žà¢½â€Œ; Ù¦4á‚¥.ࢽ‌; [B1, B3, C1, P1, V6]; xn--4-kqc489e.xn--jzb840j; ; xn--4-kqc489e.xn--jzb; [B1, P1, V6] # Ù¦4á‚¥.ࢽ
-٦4Ⴅ.ࢽ‌; ; [B1, B3, C1, P1, V6]; xn--4-kqc489e.xn--jzb840j; ; xn--4-kqc489e.xn--jzb; [B1, P1, V6] # ٦4Ⴅ.ࢽ
-٦4ⴅ.ࢽ‌; ; [B1, B3, C1]; xn--4-kqc6770a.xn--jzb840j; ; xn--4-kqc6770a.xn--jzb; [B1] # ٦4ⴅ.ࢽ
-xn--4-kqc6770a.xn--jzb; ٦4ⴅ.ࢽ; [B1]; xn--4-kqc6770a.xn--jzb; ; ; # ٦4ⴅ.ࢽ
-xn--4-kqc6770a.xn--jzb840j; ٦4ⴅ.ࢽ‌; [B1, B3, C1]; xn--4-kqc6770a.xn--jzb840j; ; ; # ٦4ⴅ.ࢽ
-xn--4-kqc489e.xn--jzb; ٦4Ⴅ.ࢽ; [B1, V6]; xn--4-kqc489e.xn--jzb; ; ; # ٦4Ⴅ.ࢽ
-xn--4-kqc489e.xn--jzb840j; ٦4Ⴅ.ࢽ‌; [B1, B3, C1, V6]; xn--4-kqc489e.xn--jzb840j; ; ; # ٦4Ⴅ.ࢽ
-Ù¦â´â´….ࢽ‌; Ù¦4â´….ࢽ‌; [B1, B3, C1]; xn--4-kqc6770a.xn--jzb840j; ; xn--4-kqc6770a.xn--jzb; [B1] # Ù¦4â´….ࢽ
-áƒá‚±6̘。ßᬃ; áƒá‚±6̘.ßᬃ; [P1, V6]; xn--6-8cb555h2b.xn--zca894k; ; xn--6-8cb555h2b.xn--ss-2vq; # áƒá‚±6̘.ßᬃ
-ⴡⴑ6̘。ßᬃ; ⴡⴑ6̘.ßᬃ; ; xn--6-8cb7433a2ba.xn--zca894k; ; xn--6-8cb7433a2ba.xn--ss-2vq; # ⴡⴑ6̘.ßᬃ
-áƒá‚±6̘。SSᬃ; áƒá‚±6̘.ssᬃ; [P1, V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ; # áƒá‚±6̘.ssᬃ
-ⴡⴑ6̘。ssᬃ; ⴡⴑ6̘.ssᬃ; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ; # ⴡⴑ6̘.ssᬃ
-áƒâ´‘6̘。Ssᬃ; áƒâ´‘6̘.ssᬃ; [P1, V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ; # áƒâ´‘6̘.ssᬃ
-xn--6-8cb306hms1a.xn--ss-2vq; áƒâ´‘6̘.ssᬃ; [V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ; # áƒâ´‘6̘.ssᬃ
-xn--6-8cb7433a2ba.xn--ss-2vq; ⴡⴑ6̘.ssᬃ; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ; # ⴡⴑ6̘.ssᬃ
-ⴡⴑ6̘.ssᬃ; ; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ; # ⴡⴑ6̘.ssᬃ
-áƒá‚±6̘.SSᬃ; áƒá‚±6̘.ssᬃ; [P1, V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ; # áƒá‚±6̘.ssᬃ
-áƒâ´‘6̘.Ssᬃ; áƒâ´‘6̘.ssᬃ; [P1, V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ; # áƒâ´‘6̘.ssᬃ
-xn--6-8cb555h2b.xn--ss-2vq; áƒá‚±6̘.ssᬃ; [V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ; # áƒá‚±6̘.ssᬃ
-xn--6-8cb7433a2ba.xn--zca894k; ⴡⴑ6̘.ßᬃ; ; xn--6-8cb7433a2ba.xn--zca894k; ; ; # ⴡⴑ6̘.ßᬃ
-ⴡⴑ6̘.ßᬃ; ; ; xn--6-8cb7433a2ba.xn--zca894k; ; xn--6-8cb7433a2ba.xn--ss-2vq; # ⴡⴑ6̘.ßᬃ
-xn--6-8cb555h2b.xn--zca894k; áƒá‚±6̘.ßᬃ; [V6]; xn--6-8cb555h2b.xn--zca894k; ; ; # áƒá‚±6̘.ßᬃ
-ò‹¡ï½¡â‰¯ð‘‹ª; ò‹¡.≯𑋪; [P1, V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪
-ò‹¡ï½¡≯𑋪; ò‹¡.≯𑋪; [P1, V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪
-ò‹¡ã€‚≯𑋪; ò‹¡.≯𑋪; [P1, V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪
-ò‹¡ã€‚≯𑋪; ò‹¡.≯𑋪; [P1, V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪
+\u05C1۲。ð®Š\u066Cð¨Šé„¨; \u05C1Û².ð®Š\u066Cð¨Šé„¨; [B1, B2, B3, V5]; xn--pdb42d.xn--lib6412enztdwv6h; ; ; # ×Û².ð®ŠÙ¬ð¨Šé„¨
+\u05C1۲。ð®Š\u066Cð¨Šé„¨; \u05C1Û².ð®Š\u066Cð¨Šé„¨; [B1, B2, B3, V5]; xn--pdb42d.xn--lib6412enztdwv6h; ; ; # ×Û².ð®ŠÙ¬ð¨Šé„¨
+xn--pdb42d.xn--lib6412enztdwv6h; \u05C1Û².ð®Š\u066Cð¨Šé„¨; [B1, B2, B3, V5]; xn--pdb42d.xn--lib6412enztdwv6h; ; ; # ×Û².ð®ŠÙ¬ð¨Šé„¨
+ðž­³-ê¡ã€‚\u1A69\u0BCD-; ðž­³-ê¡.\u1A69\u0BCD-; [B1, B2, B3, V3, V5, V6]; xn----be4e4276f.xn----lze333i; ; ; # -ê¡.á©©à¯-
+xn----be4e4276f.xn----lze333i; ðž­³-ê¡.\u1A69\u0BCD-; [B1, B2, B3, V3, V5, V6]; xn----be4e4276f.xn----lze333i; ; ; # -ê¡.á©©à¯-
+\u1039-𚮭🞢.ß; \u1039-𚮭🞢.ß; [V5, V6]; xn----9tg11172akr8b.xn--zca; ; xn----9tg11172akr8b.ss; # ္-🞢.ß
+\u1039-𚮭🞢.ß; ; [V5, V6]; xn----9tg11172akr8b.xn--zca; ; xn----9tg11172akr8b.ss; # ္-🞢.ß
+\u1039-𚮭🞢.SS; \u1039-𚮭🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
+\u1039-𚮭🞢.ss; ; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
+\u1039-𚮭🞢.Ss; \u1039-𚮭🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
+xn----9tg11172akr8b.ss; \u1039-𚮭🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
+xn----9tg11172akr8b.xn--zca; \u1039-𚮭🞢.ß; [V5, V6]; xn----9tg11172akr8b.xn--zca; ; ; # ္-🞢.ß
+\u1039-𚮭🞢.SS; \u1039-𚮭🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
+\u1039-𚮭🞢.ss; \u1039-𚮭🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
+\u1039-𚮭🞢.Ss; \u1039-𚮭🞢.ss; [V5, V6]; xn----9tg11172akr8b.ss; ; ; # ္-🞢.ss
+\uFCF2-\u200C。Ⴟ\u200Câ£; \u0640\u064E\u0651-\u200C.á‚¿\u200Câ£; [B3, B6, C1, V6]; xn----eoc6bm0504a.xn--3nd849e05c; ; xn----eoc6bm.xn--3nd240h; [B3, B6, V3, V6] # Ù€ÙŽÙ‘-.á‚¿â£
+\u0640\u064E\u0651-\u200C。Ⴟ\u200Câ£; \u0640\u064E\u0651-\u200C.á‚¿\u200Câ£; [B3, B6, C1, V6]; xn----eoc6bm0504a.xn--3nd849e05c; ; xn----eoc6bm.xn--3nd240h; [B3, B6, V3, V6] # Ù€ÙŽÙ‘-.á‚¿â£
+\u0640\u064E\u0651-\u200C。ⴟ\u200Câ£; \u0640\u064E\u0651-\u200C.â´Ÿ\u200Câ£; [B3, B6, C1]; xn----eoc6bm0504a.xn--0ug13nd0j; ; xn----eoc6bm.xn--xph904a; [B3, B6, V3] # Ù€ÙŽÙ‘-.â´Ÿâ£
+xn----eoc6bm.xn--xph904a; \u0640\u064E\u0651-.â´Ÿâ£; [B3, B6, V3]; xn----eoc6bm.xn--xph904a; ; ; # Ù€ÙŽÙ‘-.â´Ÿâ£
+xn----eoc6bm0504a.xn--0ug13nd0j; \u0640\u064E\u0651-\u200C.â´Ÿ\u200Câ£; [B3, B6, C1]; xn----eoc6bm0504a.xn--0ug13nd0j; ; ; # Ù€ÙŽÙ‘-.â´Ÿâ£
+xn----eoc6bm.xn--3nd240h; \u0640\u064E\u0651-.á‚¿â£; [B3, B6, V3, V6]; xn----eoc6bm.xn--3nd240h; ; ; # Ù€ÙŽÙ‘-.á‚¿â£
+xn----eoc6bm0504a.xn--3nd849e05c; \u0640\u064E\u0651-\u200C.á‚¿\u200Câ£; [B3, B6, C1, V6]; xn----eoc6bm0504a.xn--3nd849e05c; ; ; # Ù€ÙŽÙ‘-.á‚¿â£
+\uFCF2-\u200C。ⴟ\u200Câ£; \u0640\u064E\u0651-\u200C.â´Ÿ\u200Câ£; [B3, B6, C1]; xn----eoc6bm0504a.xn--0ug13nd0j; ; xn----eoc6bm.xn--xph904a; [B3, B6, V3] # Ù€ÙŽÙ‘-.â´Ÿâ£
+\u0D4D-\u200D\u200C。ñ¥ž§â‚…≠; \u0D4D-\u200D\u200C.ñ¥ž§5≠; [C1, C2, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [V3, V5, V6] # àµ-.5≠
+\u0D4D-\u200D\u200C。ñ¥ž§â‚…=\u0338; \u0D4D-\u200D\u200C.ñ¥ž§5≠; [C1, C2, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [V3, V5, V6] # àµ-.5≠
+\u0D4D-\u200D\u200C。ñ¥ž§5≠; \u0D4D-\u200D\u200C.ñ¥ž§5≠; [C1, C2, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [V3, V5, V6] # àµ-.5≠
+\u0D4D-\u200D\u200C。ñ¥ž§5=\u0338; \u0D4D-\u200D\u200C.ñ¥ž§5≠; [C1, C2, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; xn----jmf.xn--5-ufo50192e; [V3, V5, V6] # àµ-.5≠
+xn----jmf.xn--5-ufo50192e; \u0D4D-.ñ¥ž§5≠; [V3, V5, V6]; xn----jmf.xn--5-ufo50192e; ; ; # àµ-.5≠
+xn----jmf215lda.xn--5-ufo50192e; \u0D4D-\u200D\u200C.ñ¥ž§5≠; [C1, C2, V5, V6]; xn----jmf215lda.xn--5-ufo50192e; ; ; # àµ-.5≠
+锣。\u0A4D󠘻󠚆; 锣.\u0A4D󠘻󠚆; [V5, V6]; xn--gc5a.xn--ybc83044ppga; ; ; # 锣.à©
+xn--gc5a.xn--ybc83044ppga; 锣.\u0A4D󠘻󠚆; [V5, V6]; xn--gc5a.xn--ybc83044ppga; ; ; # 锣.à©
+\u063D𑈾.\u0649\u200D\uA92B; \u063D𑈾.\u0649\u200D\uA92B; [B3, C2]; xn--8gb2338k.xn--lhb603k060h; ; xn--8gb2338k.xn--lhb0154f; [] # ؽ𑈾.ى꤫
+\u063D𑈾.\u0649\u200D\uA92B; ; [B3, C2]; xn--8gb2338k.xn--lhb603k060h; ; xn--8gb2338k.xn--lhb0154f; [] # ؽ𑈾.ى꤫
+xn--8gb2338k.xn--lhb0154f; \u063D𑈾.\u0649\uA92B; ; xn--8gb2338k.xn--lhb0154f; ; ; # ؽ𑈾.ى꤫
+\u063D𑈾.\u0649\uA92B; ; ; xn--8gb2338k.xn--lhb0154f; ; ; # ؽ𑈾.ى꤫
+xn--8gb2338k.xn--lhb603k060h; \u063D𑈾.\u0649\u200D\uA92B; [B3, C2]; xn--8gb2338k.xn--lhb603k060h; ; ; # ؽ𑈾.ى꤫
+\u0666â´á‚¥ï¼Ž\u08BD\u200C; \u06664á‚¥.\u08BD\u200C; [B1, B3, C1, V6]; xn--4-kqc489e.xn--jzb840j; ; xn--4-kqc489e.xn--jzb; [B1, V6] # Ù¦4á‚¥.ࢽ
+\u06664Ⴅ.\u08BD\u200C; ; [B1, B3, C1, V6]; xn--4-kqc489e.xn--jzb840j; ; xn--4-kqc489e.xn--jzb; [B1, V6] # ٦4Ⴅ.ࢽ
+\u06664ⴅ.\u08BD\u200C; ; [B1, B3, C1]; xn--4-kqc6770a.xn--jzb840j; ; xn--4-kqc6770a.xn--jzb; [B1] # ٦4ⴅ.ࢽ
+xn--4-kqc6770a.xn--jzb; \u06664ⴅ.\u08BD; [B1]; xn--4-kqc6770a.xn--jzb; ; ; # ٦4ⴅ.ࢽ
+xn--4-kqc6770a.xn--jzb840j; \u06664ⴅ.\u08BD\u200C; [B1, B3, C1]; xn--4-kqc6770a.xn--jzb840j; ; ; # ٦4ⴅ.ࢽ
+xn--4-kqc489e.xn--jzb; \u06664Ⴅ.\u08BD; [B1, V6]; xn--4-kqc489e.xn--jzb; ; ; # ٦4Ⴅ.ࢽ
+xn--4-kqc489e.xn--jzb840j; \u06664Ⴅ.\u08BD\u200C; [B1, B3, C1, V6]; xn--4-kqc489e.xn--jzb840j; ; ; # ٦4Ⴅ.ࢽ
+\u0666â´â´….\u08BD\u200C; \u06664â´….\u08BD\u200C; [B1, B3, C1]; xn--4-kqc6770a.xn--jzb840j; ; xn--4-kqc6770a.xn--jzb; [B1] # Ù¦4â´….ࢽ
+áƒá‚±6\u0318。ß\u1B03; áƒá‚±6\u0318.ß\u1B03; [V6]; xn--6-8cb555h2b.xn--zca894k; ; xn--6-8cb555h2b.xn--ss-2vq; # áƒá‚±6̘.ßᬃ
+ⴡⴑ6\u0318。ß\u1B03; ⴡⴑ6\u0318.ß\u1B03; ; xn--6-8cb7433a2ba.xn--zca894k; ; xn--6-8cb7433a2ba.xn--ss-2vq; # ⴡⴑ6̘.ßᬃ
+áƒá‚±6\u0318。SS\u1B03; áƒá‚±6\u0318.ss\u1B03; [V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ; # áƒá‚±6̘.ssᬃ
+ⴡⴑ6\u0318。ss\u1B03; ⴡⴑ6\u0318.ss\u1B03; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ; # ⴡⴑ6̘.ssᬃ
+áƒâ´‘6\u0318。Ss\u1B03; áƒâ´‘6\u0318.ss\u1B03; [V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ; # áƒâ´‘6̘.ssᬃ
+xn--6-8cb306hms1a.xn--ss-2vq; áƒâ´‘6\u0318.ss\u1B03; [V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ; # áƒâ´‘6̘.ssᬃ
+xn--6-8cb7433a2ba.xn--ss-2vq; ⴡⴑ6\u0318.ss\u1B03; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ; # ⴡⴑ6̘.ssᬃ
+ⴡⴑ6\u0318.ss\u1B03; ; ; xn--6-8cb7433a2ba.xn--ss-2vq; ; ; # ⴡⴑ6̘.ssᬃ
+áƒá‚±6\u0318.SS\u1B03; áƒá‚±6\u0318.ss\u1B03; [V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ; # áƒá‚±6̘.ssᬃ
+áƒâ´‘6\u0318.Ss\u1B03; áƒâ´‘6\u0318.ss\u1B03; [V6]; xn--6-8cb306hms1a.xn--ss-2vq; ; ; # áƒâ´‘6̘.ssᬃ
+xn--6-8cb555h2b.xn--ss-2vq; áƒá‚±6\u0318.ss\u1B03; [V6]; xn--6-8cb555h2b.xn--ss-2vq; ; ; # áƒá‚±6̘.ssᬃ
+xn--6-8cb7433a2ba.xn--zca894k; ⴡⴑ6\u0318.ß\u1B03; ; xn--6-8cb7433a2ba.xn--zca894k; ; ; # ⴡⴑ6̘.ßᬃ
+ⴡⴑ6\u0318.ß\u1B03; ; ; xn--6-8cb7433a2ba.xn--zca894k; ; xn--6-8cb7433a2ba.xn--ss-2vq; # ⴡⴑ6̘.ßᬃ
+xn--6-8cb555h2b.xn--zca894k; áƒá‚±6\u0318.ß\u1B03; [V6]; xn--6-8cb555h2b.xn--zca894k; ; ; # áƒá‚±6̘.ßᬃ
+ò‹¡ï½¡â‰¯ð‘‹ª; ò‹¡.≯𑋪; [V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪
+ò‹¡ï½¡>\u0338𑋪; ò‹¡.≯𑋪; [V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪
+ò‹¡ã€‚≯𑋪; ò‹¡.≯𑋪; [V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪
+ò‹¡ã€‚>\u0338𑋪; ò‹¡.≯𑋪; [V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪
xn--eo08b.xn--hdh3385g; ò‹¡.≯𑋪; [V6]; xn--eo08b.xn--hdh3385g; ; ; # .≯𑋪
-ٚ۲。‌-᯳࣢; ٚ۲.‌-᯳࣢; [B1, C1, P1, V5, V6]; xn--2hb81a.xn----xrd657l30d; ; xn--2hb81a.xn----xrd657l; [B1, P1, V3, V5, V6] # ٚ۲.-᯳
-xn--2hb81a.xn----xrd657l; ٚ۲.-᯳࣢; [B1, V3, V5, V6]; xn--2hb81a.xn----xrd657l; ; ; # ٚ۲.-᯳
-xn--2hb81a.xn----xrd657l30d; ٚ۲.‌-᯳࣢; [B1, C1, V5, V6]; xn--2hb81a.xn----xrd657l30d; ; ; # ٚ۲.-᯳
-ó „𖬴󠲽。ᅠ; ð–¬´ó ²½.ï¾ ; [P1, V5, V6]; xn--619ep9154c.xn--cl7c; ; ; # ð–¬´.
-ó „𖬴󠲽。ᅠ; ð–¬´ó ²½.á… ; [P1, V5, V6]; xn--619ep9154c.xn--psd; ; ; # ð–¬´.
-xn--619ep9154c.xn--psd; ð–¬´ó ²½.á… ; [V5, V6]; xn--619ep9154c.xn--psd; ; ; # ð–¬´.
-xn--619ep9154c.xn--cl7c; ð–¬´ó ²½.ï¾ ; [V5, V6]; xn--619ep9154c.xn--cl7c; ; ; # ð–¬´.
-ß⒈ݠ힮.􉖲󠅄؅򉔯; ß⒈ݠ힮.􉖲؅򉔯; [B5, P1, V6]; xn--zca444a0s1ao12n.xn--nfb09923ifkyyb; ; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; # ß⒈ݠ.
-ß1.ݠ힮.􉖲󠅄؅򉔯; ß1.ݠ힮.􉖲؅򉔯; [B2, B3, B5, P1, V6]; xn--1-pfa.xn--kpb6677h.xn--nfb09923ifkyyb; ; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; # ß1.ݠ.
-SS1.ݠ힮.􉖲󠅄؅򉔯; ss1.ݠ힮.􉖲؅򉔯; [B2, B3, B5, P1, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ.
-ss1.ݠ힮.􉖲󠅄؅򉔯; ss1.ݠ힮.􉖲؅򉔯; [B2, B3, B5, P1, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ.
-Ss1.ݠ힮.􉖲󠅄؅򉔯; ss1.ݠ힮.􉖲؅򉔯; [B2, B3, B5, P1, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ.
-ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ss1.ݠ힮.􉖲؅򉔯; [B2, B3, B5, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ.
-xn--1-pfa.xn--kpb6677h.xn--nfb09923ifkyyb; ß1.ݠ힮.􉖲؅򉔯; [B2, B3, B5, V6]; xn--1-pfa.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ß1.ݠ.
-SS⒈ݠ힮.􉖲󠅄؅򉔯; ss⒈ݠ힮.􉖲؅򉔯; [B5, P1, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ.
-ss⒈ݠ힮.􉖲󠅄؅򉔯; ss⒈ݠ힮.􉖲؅򉔯; [B5, P1, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ.
-Ss⒈ݠ힮.􉖲󠅄؅򉔯; ss⒈ݠ힮.􉖲؅򉔯; [B5, P1, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ.
-xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ss⒈ݠ힮.􉖲؅򉔯; [B5, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ.
-xn--zca444a0s1ao12n.xn--nfb09923ifkyyb; ß⒈ݠ힮.􉖲؅򉔯; [B5, V6]; xn--zca444a0s1ao12n.xn--nfb09923ifkyyb; ; ; # ß⒈ݠ.
-ó ­”.ð‹±â‚‚; ó ­”.ð‹±2; [P1, V6]; xn--vi56e.xn--2-w91i; ; ; # .ð‹±2
-ó ­”.ð‹±2; ; [P1, V6]; xn--vi56e.xn--2-w91i; ; ; # .ð‹±2
+\u065A۲。\u200C-\u1BF3\u08E2; \u065A۲.\u200C-\u1BF3\u08E2; [B1, C1, V5, V6]; xn--2hb81a.xn----xrd657l30d; ; xn--2hb81a.xn----xrd657l; [B1, V3, V5, V6] # ٚ۲.-᯳
+xn--2hb81a.xn----xrd657l; \u065A۲.-\u1BF3\u08E2; [B1, V3, V5, V6]; xn--2hb81a.xn----xrd657l; ; ; # ٚ۲.-᯳
+xn--2hb81a.xn----xrd657l30d; \u065A۲.\u200C-\u1BF3\u08E2; [B1, C1, V5, V6]; xn--2hb81a.xn----xrd657l30d; ; ; # ٚ۲.-᯳
+ó „𖬴󠲽。\uFFA0; ð–¬´ó ²½.\uFFA0; [V5, V6]; xn--619ep9154c.xn--cl7c; ; ; # ð–¬´.
+ó „𖬴󠲽。\u1160; ð–¬´ó ²½.\u1160; [V5, V6]; xn--619ep9154c.xn--psd; ; ; # ð–¬´.
+xn--619ep9154c.xn--psd; ð–¬´ó ²½.\u1160; [V5, V6]; xn--619ep9154c.xn--psd; ; ; # ð–¬´.
+xn--619ep9154c.xn--cl7c; ð–¬´ó ²½.\uFFA0; [V5, V6]; xn--619ep9154c.xn--cl7c; ; ; # ð–¬´.
+ß⒈\u0760\uD7AE.􉖲󠅄\u0605򉔯; ß⒈\u0760\uD7AE.􉖲\u0605򉔯; [B5, V6]; xn--zca444a0s1ao12n.xn--nfb09923ifkyyb; ; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; # ß⒈ݠ.
+ß1.\u0760\uD7AE.􉖲󠅄\u0605򉔯; ß1.\u0760\uD7AE.􉖲\u0605򉔯; [B2, B3, B5, V6]; xn--1-pfa.xn--kpb6677h.xn--nfb09923ifkyyb; ; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; # ß1.ݠ.
+SS1.\u0760\uD7AE.􉖲󠅄\u0605򉔯; ss1.\u0760\uD7AE.􉖲\u0605򉔯; [B2, B3, B5, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ.
+ss1.\u0760\uD7AE.􉖲󠅄\u0605򉔯; ss1.\u0760\uD7AE.􉖲\u0605򉔯; [B2, B3, B5, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ.
+Ss1.\u0760\uD7AE.􉖲󠅄\u0605򉔯; ss1.\u0760\uD7AE.􉖲\u0605򉔯; [B2, B3, B5, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ.
+ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ss1.\u0760\uD7AE.􉖲\u0605򉔯; [B2, B3, B5, V6]; ss1.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ss1.ݠ.
+xn--1-pfa.xn--kpb6677h.xn--nfb09923ifkyyb; ß1.\u0760\uD7AE.􉖲\u0605򉔯; [B2, B3, B5, V6]; xn--1-pfa.xn--kpb6677h.xn--nfb09923ifkyyb; ; ; # ß1.ݠ.
+SS⒈\u0760\uD7AE.􉖲󠅄\u0605򉔯; ss⒈\u0760\uD7AE.􉖲\u0605򉔯; [B5, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ.
+ss⒈\u0760\uD7AE.􉖲󠅄\u0605򉔯; ss⒈\u0760\uD7AE.􉖲\u0605򉔯; [B5, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ.
+Ss⒈\u0760\uD7AE.􉖲󠅄\u0605򉔯; ss⒈\u0760\uD7AE.􉖲\u0605򉔯; [B5, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ.
+xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ss⒈\u0760\uD7AE.􉖲\u0605򉔯; [B5, V6]; xn--ss-6ke9690a0g1q.xn--nfb09923ifkyyb; ; ; # ss⒈ݠ.
+xn--zca444a0s1ao12n.xn--nfb09923ifkyyb; ß⒈\u0760\uD7AE.􉖲\u0605򉔯; [B5, V6]; xn--zca444a0s1ao12n.xn--nfb09923ifkyyb; ; ; # ß⒈ݠ.
+ó ­”.ð‹±â‚‚; ó ­”.ð‹±2; [V6]; xn--vi56e.xn--2-w91i; ; ; # .ð‹±2
+ó ­”.ð‹±2; ; [V6]; xn--vi56e.xn--2-w91i; ; ; # .ð‹±2
xn--vi56e.xn--2-w91i; ó ­”.ð‹±2; [V6]; xn--vi56e.xn--2-w91i; ; ; # .ð‹±2
-ܖे。-ßڥ‌; ܖे.-ßڥ‌; [B1, C1, V3]; xn--gnb63i.xn----qfa845bhx4a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ßڥ
-ܖे。-SSڥ‌; ܖे.-ssڥ‌; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ssڥ
-ܖे。-ssڥ‌; ܖे.-ssڥ‌; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ssڥ
-ܖे。-Ssڥ‌; ܖे.-ssڥ‌; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ssڥ
-xn--gnb63i.xn---ss-4ef; ܖे.-ssڥ; [B1, V3]; xn--gnb63i.xn---ss-4ef; ; ; # ܖे.-ssڥ
-xn--gnb63i.xn---ss-4ef9263a; ܖे.-ssڥ‌; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; ; # ܖे.-ssڥ
-xn--gnb63i.xn----qfa845bhx4a; ܖे.-ßڥ‌; [B1, C1, V3]; xn--gnb63i.xn----qfa845bhx4a; ; ; # ܖे.-ßڥ
-ᮩâ€Øªñ¡šˆï¼Žá³•ä·‰áƒ; ᮩâ€Øªñ¡šˆ.᳕䷉áƒ; [B1, C2, P1, V5, V6]; xn--pgb911imgdrw34r.xn--5nd792dgv3b; ; xn--pgb911izv33i.xn--5nd792dgv3b; [B1, P1, V5, V6] # ᮩت.᳕䷉áƒ
-ᮩâ€Øªñ¡šˆ.᳕䷉áƒ; ; [B1, C2, P1, V5, V6]; xn--pgb911imgdrw34r.xn--5nd792dgv3b; ; xn--pgb911izv33i.xn--5nd792dgv3b; [B1, P1, V5, V6] # ᮩت.᳕䷉áƒ
-ᮩâ€Øªñ¡šˆ.᳕䷉ⴡ; ; [B1, C2, P1, V5, V6]; xn--pgb911imgdrw34r.xn--i6f270etuy; ; xn--pgb911izv33i.xn--i6f270etuy; [B1, P1, V5, V6] # ᮩت.᳕䷉ⴡ
-xn--pgb911izv33i.xn--i6f270etuy; ᮩت񡚈.᳕䷉ⴡ; [B1, V5, V6]; xn--pgb911izv33i.xn--i6f270etuy; ; ; # ᮩت.᳕䷉ⴡ
-xn--pgb911imgdrw34r.xn--i6f270etuy; ᮩâ€Øªñ¡šˆ.᳕䷉ⴡ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--i6f270etuy; ; ; # ᮩت.᳕䷉ⴡ
-xn--pgb911izv33i.xn--5nd792dgv3b; ᮩتñ¡šˆ.᳕䷉áƒ; [B1, V5, V6]; xn--pgb911izv33i.xn--5nd792dgv3b; ; ; # ᮩت.᳕䷉áƒ
-xn--pgb911imgdrw34r.xn--5nd792dgv3b; ᮩâ€Øªñ¡šˆ.᳕䷉áƒ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--5nd792dgv3b; ; ; # ᮩت.᳕䷉áƒ
-ᮩâ€Øªñ¡šˆï¼Žá³•ä·‰â´¡; ᮩâ€Øªñ¡šˆ.᳕䷉ⴡ; [B1, C2, P1, V5, V6]; xn--pgb911imgdrw34r.xn--i6f270etuy; ; xn--pgb911izv33i.xn--i6f270etuy; [B1, P1, V5, V6] # ᮩت.᳕䷉ⴡ
-⶿.ßâ€; ; [C2, P1, V6]; xn--7pj.xn--zca870n; ; xn--7pj.ss; [P1, V6] # .ß
-⶿.SSâ€; ⶿.ssâ€; [C2, P1, V6]; xn--7pj.xn--ss-n1t; ; xn--7pj.ss; [P1, V6] # .ss
-⶿.ssâ€; ; [C2, P1, V6]; xn--7pj.xn--ss-n1t; ; xn--7pj.ss; [P1, V6] # .ss
-⶿.Ssâ€; ⶿.ssâ€; [C2, P1, V6]; xn--7pj.xn--ss-n1t; ; xn--7pj.ss; [P1, V6] # .ss
-xn--7pj.ss; ⶿.ss; [V6]; xn--7pj.ss; ; ; # .ss
-xn--7pj.xn--ss-n1t; ⶿.ssâ€; [C2, V6]; xn--7pj.xn--ss-n1t; ; ; # .ss
-xn--7pj.xn--zca870n; ⶿.ßâ€; [C2, V6]; xn--7pj.xn--zca870n; ; ; # .ß
-᯳︒.ت≯ꡂ; ; [B2, B3, B6, P1, V5, V6]; xn--1zf8957g.xn--pgb885lry5g; ; ; # ᯳︒.ت≯ꡂ
-᯳︒.ت≯ꡂ; ᯳︒.ت≯ꡂ; [B2, B3, B6, P1, V5, V6]; xn--1zf8957g.xn--pgb885lry5g; ; ; # ᯳︒.ت≯ꡂ
-᯳。.ت≯ꡂ; ᯳..ت≯ꡂ; [B2, B3, P1, V5, V6, X4_2]; xn--1zf..xn--pgb885lry5g; [B2, B3, P1, V5, V6, A4_2]; ; # ᯳..ت≯ꡂ
-᯳。.ت≯ꡂ; ᯳..ت≯ꡂ; [B2, B3, P1, V5, V6, X4_2]; xn--1zf..xn--pgb885lry5g; [B2, B3, P1, V5, V6, A4_2]; ; # ᯳..ت≯ꡂ
-xn--1zf..xn--pgb885lry5g; ᯳..ت≯ꡂ; [B2, B3, V5, V6, X4_2]; xn--1zf..xn--pgb885lry5g; [B2, B3, V5, V6, A4_2]; ; # ᯳..ت≯ꡂ
-xn--1zf8957g.xn--pgb885lry5g; ᯳︒.ت≯ꡂ; [B2, B3, B6, V5, V6]; xn--1zf8957g.xn--pgb885lry5g; ; ; # ᯳︒.ت≯ꡂ
-≮≠ñ»ƒï½¡-ð« †Ú·ð¹ª; ≮≠ñ»ƒ.-ð« †Ú·ð¹ª; [B1, P1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-ð« †Ú·ð¹ª
-≮≠ñ»ƒï½¡-ð« †Ú·ð¹ª; ≮≠ñ»ƒ.-ð« †Ú·ð¹ª; [B1, P1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-ð« †Ú·ð¹ª
-≮≠ñ»ƒã€‚-ð« †Ú·ð¹ª; ≮≠ñ»ƒ.-ð« †Ú·ð¹ª; [B1, P1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-ð« †Ú·ð¹ª
-≮≠ñ»ƒã€‚-ð« †Ú·ð¹ª; ≮≠ñ»ƒ.-ð« †Ú·ð¹ª; [B1, P1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-ð« †Ú·ð¹ª
-xn--1ch1a29470f.xn----7uc5363rc1rn; ≮≠ñ»ƒ.-ð« †Ú·ð¹ª; [B1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-ð« †Ú·ð¹ª
-ð¹¡Ý·ã€‚ê¡‚; ð¹¡Ý·.ê¡‚; [B1]; xn--7pb5275k.xn--bc9a; ; ; # ð¹¡Ý·.ê¡‚
-xn--7pb5275k.xn--bc9a; ð¹¡Ý·.ê¡‚; [B1]; xn--7pb5275k.xn--bc9a; ; ; # ð¹¡Ý·.ê¡‚
-á‚©ð†…ñ”»…Ø™.ßð§¦ð¹³Ýµ; ; [B5, B6, P1, V6]; xn--7fb125cjv87a7xvz.xn--zca684a699vf2d; ; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; # á‚©ð†…Ø™.ßð§¦ð¹³Ýµ
-â´‰ð†…ñ”»…Ø™.ßð§¦ð¹³Ýµ; ; [B5, B6, P1, V6]; xn--7fb940rwt3z7xvz.xn--zca684a699vf2d; ; xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; # â´‰ð†…Ø™.ßð§¦ð¹³Ýµ
-á‚©ð†…ñ”»…Ø™.SSð§¦ð¹³Ýµ; á‚©ð†…ñ”»…Ø™.ssð§¦ð¹³Ýµ; [B5, B6, P1, V6]; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; ; ; # á‚©ð†…Ø™.ssð§¦ð¹³Ýµ
-â´‰ð†…ñ”»…Ø™.ssð§¦ð¹³Ýµ; ; [B5, B6, P1, V6]; xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; ; ; # â´‰ð†…Ø™.ssð§¦ð¹³Ýµ
-á‚©ð†…ñ”»…Ø™.Ssð§¦ð¹³Ýµ; á‚©ð†…ñ”»…Ø™.ssð§¦ð¹³Ýµ; [B5, B6, P1, V6]; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; ; ; # á‚©ð†…Ø™.ssð§¦ð¹³Ýµ
-xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; á‚©ð†…ñ”»…Ø™.ssð§¦ð¹³Ýµ; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; ; ; # á‚©ð†…Ø™.ssð§¦ð¹³Ýµ
-xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; â´‰ð†…ñ”»…Ø™.ssð§¦ð¹³Ýµ; [B5, B6, V6]; xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; ; ; # â´‰ð†…Ø™.ssð§¦ð¹³Ýµ
-xn--7fb940rwt3z7xvz.xn--zca684a699vf2d; â´‰ð†…ñ”»…Ø™.ßð§¦ð¹³Ýµ; [B5, B6, V6]; xn--7fb940rwt3z7xvz.xn--zca684a699vf2d; ; ; # â´‰ð†…Ø™.ßð§¦ð¹³Ýµ
-xn--7fb125cjv87a7xvz.xn--zca684a699vf2d; á‚©ð†…ñ”»…Ø™.ßð§¦ð¹³Ýµ; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--zca684a699vf2d; ; ; # á‚©ð†…Ø™.ßð§¦ð¹³Ýµ
-â€Ùƒð§¾â†™.ñŠ½¡; ; [B1, C2, P1, V6]; xn--fhb713k87ag053c.xn--7s4w; ; xn--fhb011lnp8n.xn--7s4w; [B3, P1, V6] # Ùƒð§¾â†™.
-xn--fhb011lnp8n.xn--7s4w; Ùƒð§¾â†™.ñŠ½¡; [B3, V6]; xn--fhb011lnp8n.xn--7s4w; ; ; # Ùƒð§¾â†™.
-xn--fhb713k87ag053c.xn--7s4w; â€Ùƒð§¾â†™.ñŠ½¡; [B1, C2, V6]; xn--fhb713k87ag053c.xn--7s4w; ; ; # Ùƒð§¾â†™.
-梉。‌; 梉.‌; [C1]; xn--7zv.xn--0ug; ; xn--7zv.; [] # 梉.
+\u0716\u0947。-ß\u06A5\u200C; \u0716\u0947.-ß\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn----qfa845bhx4a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ßڥ
+\u0716\u0947。-SS\u06A5\u200C; \u0716\u0947.-ss\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ssڥ
+\u0716\u0947。-ss\u06A5\u200C; \u0716\u0947.-ss\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ssڥ
+\u0716\u0947。-Ss\u06A5\u200C; \u0716\u0947.-ss\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; xn--gnb63i.xn---ss-4ef; [B1, V3] # ܖे.-ssڥ
+xn--gnb63i.xn---ss-4ef; \u0716\u0947.-ss\u06A5; [B1, V3]; xn--gnb63i.xn---ss-4ef; ; ; # ܖे.-ssڥ
+xn--gnb63i.xn---ss-4ef9263a; \u0716\u0947.-ss\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn---ss-4ef9263a; ; ; # ܖे.-ssڥ
+xn--gnb63i.xn----qfa845bhx4a; \u0716\u0947.-ß\u06A5\u200C; [B1, C1, V3]; xn--gnb63i.xn----qfa845bhx4a; ; ; # ܖे.-ßڥ
+\u1BA9\u200D\u062Añ¡šˆï¼Ž\u1CD5ä·‰áƒ; \u1BA9\u200D\u062Añ¡šˆ.\u1CD5ä·‰áƒ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--5nd792dgv3b; ; xn--pgb911izv33i.xn--5nd792dgv3b; [B1, V5, V6] # ᮩت.᳕䷉áƒ
+\u1BA9\u200D\u062Añ¡šˆ.\u1CD5ä·‰áƒ; ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--5nd792dgv3b; ; xn--pgb911izv33i.xn--5nd792dgv3b; [B1, V5, V6] # ᮩت.᳕䷉áƒ
+\u1BA9\u200D\u062A񡚈.\u1CD5䷉ⴡ; ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--i6f270etuy; ; xn--pgb911izv33i.xn--i6f270etuy; [B1, V5, V6] # ᮩت.᳕䷉ⴡ
+xn--pgb911izv33i.xn--i6f270etuy; \u1BA9\u062A񡚈.\u1CD5䷉ⴡ; [B1, V5, V6]; xn--pgb911izv33i.xn--i6f270etuy; ; ; # ᮩت.᳕䷉ⴡ
+xn--pgb911imgdrw34r.xn--i6f270etuy; \u1BA9\u200D\u062A񡚈.\u1CD5䷉ⴡ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--i6f270etuy; ; ; # ᮩت.᳕䷉ⴡ
+xn--pgb911izv33i.xn--5nd792dgv3b; \u1BA9\u062Añ¡šˆ.\u1CD5ä·‰áƒ; [B1, V5, V6]; xn--pgb911izv33i.xn--5nd792dgv3b; ; ; # ᮩت.᳕䷉áƒ
+xn--pgb911imgdrw34r.xn--5nd792dgv3b; \u1BA9\u200D\u062Añ¡šˆ.\u1CD5ä·‰áƒ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--5nd792dgv3b; ; ; # ᮩت.᳕䷉áƒ
+\u1BA9\u200D\u062A񡚈.\u1CD5䷉ⴡ; \u1BA9\u200D\u062A񡚈.\u1CD5䷉ⴡ; [B1, C2, V5, V6]; xn--pgb911imgdrw34r.xn--i6f270etuy; ; xn--pgb911izv33i.xn--i6f270etuy; [B1, V5, V6] # ᮩت.᳕䷉ⴡ
+\u2DBF.ß\u200D; ; [C2, V6]; xn--7pj.xn--zca870n; ; xn--7pj.ss; [V6] # .ß
+\u2DBF.SS\u200D; \u2DBF.ss\u200D; [C2, V6]; xn--7pj.xn--ss-n1t; ; xn--7pj.ss; [V6] # .ss
+\u2DBF.ss\u200D; ; [C2, V6]; xn--7pj.xn--ss-n1t; ; xn--7pj.ss; [V6] # .ss
+\u2DBF.Ss\u200D; \u2DBF.ss\u200D; [C2, V6]; xn--7pj.xn--ss-n1t; ; xn--7pj.ss; [V6] # .ss
+xn--7pj.ss; \u2DBF.ss; [V6]; xn--7pj.ss; ; ; # .ss
+xn--7pj.xn--ss-n1t; \u2DBF.ss\u200D; [C2, V6]; xn--7pj.xn--ss-n1t; ; ; # .ss
+xn--7pj.xn--zca870n; \u2DBF.ß\u200D; [C2, V6]; xn--7pj.xn--zca870n; ; ; # .ß
+\u1BF3︒.\u062A≯ꡂ; ; [B2, B3, B6, V5, V6]; xn--1zf8957g.xn--pgb885lry5g; ; ; # ᯳︒.ت≯ꡂ
+\u1BF3︒.\u062A>\u0338ꡂ; \u1BF3︒.\u062A≯ꡂ; [B2, B3, B6, V5, V6]; xn--1zf8957g.xn--pgb885lry5g; ; ; # ᯳︒.ت≯ꡂ
+\u1BF3。.\u062A≯ꡂ; \u1BF3..\u062A≯ꡂ; [B2, B3, V5, X4_2]; xn--1zf..xn--pgb885lry5g; [B2, B3, V5, A4_2]; ; # ᯳..ت≯ꡂ
+\u1BF3。.\u062A>\u0338ꡂ; \u1BF3..\u062A≯ꡂ; [B2, B3, V5, X4_2]; xn--1zf..xn--pgb885lry5g; [B2, B3, V5, A4_2]; ; # ᯳..ت≯ꡂ
+xn--1zf..xn--pgb885lry5g; \u1BF3..\u062A≯ꡂ; [B2, B3, V5, X4_2]; xn--1zf..xn--pgb885lry5g; [B2, B3, V5, A4_2]; ; # ᯳..ت≯ꡂ
+xn--1zf8957g.xn--pgb885lry5g; \u1BF3︒.\u062A≯ꡂ; [B2, B3, B6, V5, V6]; xn--1zf8957g.xn--pgb885lry5g; ; ; # ᯳︒.ت≯ꡂ
+≮≠ñ»ƒï½¡-ð« †\u06B7ð¹ª; ≮≠ñ»ƒ.-ð« †\u06B7ð¹ª; [B1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-ð« †Ú·ð¹ª
+<\u0338=\u0338ñ»ƒï½¡-ð« †\u06B7ð¹ª; ≮≠ñ»ƒ.-ð« †\u06B7ð¹ª; [B1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-ð« †Ú·ð¹ª
+≮≠ñ»ƒã€‚-ð« †\u06B7ð¹ª; ≮≠ñ»ƒ.-ð« †\u06B7ð¹ª; [B1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-ð« †Ú·ð¹ª
+<\u0338=\u0338ñ»ƒã€‚-ð« †\u06B7ð¹ª; ≮≠ñ»ƒ.-ð« †\u06B7ð¹ª; [B1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-ð« †Ú·ð¹ª
+xn--1ch1a29470f.xn----7uc5363rc1rn; ≮≠ñ»ƒ.-ð« †\u06B7ð¹ª; [B1, V3, V6]; xn--1ch1a29470f.xn----7uc5363rc1rn; ; ; # ≮≠.-ð« †Ú·ð¹ª
+ð¹¡\u0777。ꡂ; ð¹¡\u0777.ê¡‚; [B1]; xn--7pb5275k.xn--bc9a; ; ; # ð¹¡Ý·.ê¡‚
+xn--7pb5275k.xn--bc9a; ð¹¡\u0777.ê¡‚; [B1]; xn--7pb5275k.xn--bc9a; ; ; # ð¹¡Ý·.ê¡‚
+á‚©ð†…ñ”»…\u0619.ßð§¦ð¹³\u0775; ; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--zca684a699vf2d; ; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; # á‚©ð†…Ø™.ßð§¦ð¹³Ýµ
+â´‰ð†…ñ”»…\u0619.ßð§¦ð¹³\u0775; ; [B5, B6, V6]; xn--7fb940rwt3z7xvz.xn--zca684a699vf2d; ; xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; # â´‰ð†…Ø™.ßð§¦ð¹³Ýµ
+á‚©ð†…ñ”»…\u0619.SSð§¦ð¹³\u0775; á‚©ð†…ñ”»…\u0619.ssð§¦ð¹³\u0775; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; ; ; # á‚©ð†…Ø™.ssð§¦ð¹³Ýµ
+â´‰ð†…ñ”»…\u0619.ssð§¦ð¹³\u0775; ; [B5, B6, V6]; xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; ; ; # â´‰ð†…Ø™.ssð§¦ð¹³Ýµ
+á‚©ð†…ñ”»…\u0619.Ssð§¦ð¹³\u0775; á‚©ð†…ñ”»…\u0619.ssð§¦ð¹³\u0775; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; ; ; # á‚©ð†…Ø™.ssð§¦ð¹³Ýµ
+xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; á‚©ð†…ñ”»…\u0619.ssð§¦ð¹³\u0775; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--ss-zme7575xp0e; ; ; # á‚©ð†…Ø™.ssð§¦ð¹³Ýµ
+xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; â´‰ð†…ñ”»…\u0619.ssð§¦ð¹³\u0775; [B5, B6, V6]; xn--7fb940rwt3z7xvz.xn--ss-zme7575xp0e; ; ; # â´‰ð†…Ø™.ssð§¦ð¹³Ýµ
+xn--7fb940rwt3z7xvz.xn--zca684a699vf2d; â´‰ð†…ñ”»…\u0619.ßð§¦ð¹³\u0775; [B5, B6, V6]; xn--7fb940rwt3z7xvz.xn--zca684a699vf2d; ; ; # â´‰ð†…Ø™.ßð§¦ð¹³Ýµ
+xn--7fb125cjv87a7xvz.xn--zca684a699vf2d; á‚©ð†…ñ”»…\u0619.ßð§¦ð¹³\u0775; [B5, B6, V6]; xn--7fb125cjv87a7xvz.xn--zca684a699vf2d; ; ; # á‚©ð†…Ø™.ßð§¦ð¹³Ýµ
+\u200D\u0643ð§¾â†™.ñŠ½¡; ; [B1, C2, V6]; xn--fhb713k87ag053c.xn--7s4w; ; xn--fhb011lnp8n.xn--7s4w; [B3, V6] # Ùƒð§¾â†™.
+xn--fhb011lnp8n.xn--7s4w; \u0643ð§¾â†™.ñŠ½¡; [B3, V6]; xn--fhb011lnp8n.xn--7s4w; ; ; # Ùƒð§¾â†™.
+xn--fhb713k87ag053c.xn--7s4w; \u200D\u0643ð§¾â†™.ñŠ½¡; [B1, C2, V6]; xn--fhb713k87ag053c.xn--7s4w; ; ; # Ùƒð§¾â†™.
+梉。\u200C; 梉.\u200C; [C1]; xn--7zv.xn--0ug; ; xn--7zv.; [] # 梉.
xn--7zv.; 梉.; ; xn--7zv.; ; ; # 梉.
梉.; ; ; xn--7zv.; ; ; # 梉.
-xn--7zv.xn--0ug; 梉.‌; [C1]; xn--7zv.xn--0ug; ; ; # 梉.
-ê¡£-≠.â€ðž¤—ð…¢â†ƒ; ê¡£-≠.â€ðž¤¹ð…¢â†ƒ; [B1, B6, C2, P1, V6]; xn----ufo9661d.xn--1ug79cm620c71sh; ; xn----ufo9661d.xn--q5g0929fhm4f; [B2, B3, B6, P1, V6] # ê¡£-≠.𞤹ð…¢â†ƒ
-ê¡£-≠.â€ðž¤—ð…¢â†ƒ; ê¡£-≠.â€ðž¤¹ð…¢â†ƒ; [B1, B6, C2, P1, V6]; xn----ufo9661d.xn--1ug79cm620c71sh; ; xn----ufo9661d.xn--q5g0929fhm4f; [B2, B3, B6, P1, V6] # ê¡£-≠.𞤹ð…¢â†ƒ
-ê¡£-≠.â€ðž¤¹ð…¢â†„; ê¡£-≠.â€ðž¤¹ð…¢â†„; [B1, B6, C2, P1, V6]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6, P1, V6] # ê¡£-≠.𞤹ð…¢â†„
-ê¡£-≠.â€ðž¤¹ð…¢â†„; ; [B1, B6, C2, P1, V6]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6, P1, V6] # ê¡£-≠.𞤹ð…¢â†„
-ê¡£-≠.â€ðž¤—ð…¢â†„; ê¡£-≠.â€ðž¤¹ð…¢â†„; [B1, B6, C2, P1, V6]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6, P1, V6] # ê¡£-≠.𞤹ð…¢â†„
-ê¡£-≠.â€ðž¤—ð…¢â†„; ê¡£-≠.â€ðž¤¹ð…¢â†„; [B1, B6, C2, P1, V6]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6, P1, V6] # ê¡£-≠.𞤹ð…¢â†„
-xn----ufo9661d.xn--r5gy929fhm4f; ê¡£-≠.𞤹ð…¢â†„; [B2, B3, B6, V6]; xn----ufo9661d.xn--r5gy929fhm4f; ; ; # ê¡£-≠.𞤹ð…¢â†„
-xn----ufo9661d.xn--1ug99cj620c71sh; ê¡£-≠.â€ðž¤¹ð…¢â†„; [B1, B6, C2, V6]; xn----ufo9661d.xn--1ug99cj620c71sh; ; ; # ê¡£-≠.𞤹ð…¢â†„
+xn--7zv.xn--0ug; 梉.\u200C; [C1]; xn--7zv.xn--0ug; ; ; # 梉.
+ê¡£-≠.\u200D𞤗ð…¢â†ƒ; ê¡£-≠.\u200D𞤹ð…¢â†ƒ; [B1, B6, C2, V6]; xn----ufo9661d.xn--1ug79cm620c71sh; ; xn----ufo9661d.xn--q5g0929fhm4f; [B2, B3, B6, V6] # ê¡£-≠.𞤹ð…¢â†ƒ
+ê¡£-=\u0338.\u200D𞤗ð…¢â†ƒ; ê¡£-≠.\u200D𞤹ð…¢â†ƒ; [B1, B6, C2, V6]; xn----ufo9661d.xn--1ug79cm620c71sh; ; xn----ufo9661d.xn--q5g0929fhm4f; [B2, B3, B6, V6] # ê¡£-≠.𞤹ð…¢â†ƒ
+ê¡£-=\u0338.\u200D𞤹ð…¢â†„; ê¡£-≠.\u200D𞤹ð…¢â†„; [B1, B6, C2]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6] # ê¡£-≠.𞤹ð…¢â†„
+ê¡£-≠.\u200D𞤹ð…¢â†„; ; [B1, B6, C2]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6] # ê¡£-≠.𞤹ð…¢â†„
+ê¡£-≠.\u200D𞤗ð…¢â†„; ê¡£-≠.\u200D𞤹ð…¢â†„; [B1, B6, C2]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6] # ê¡£-≠.𞤹ð…¢â†„
+ê¡£-=\u0338.\u200D𞤗ð…¢â†„; ê¡£-≠.\u200D𞤹ð…¢â†„; [B1, B6, C2]; xn----ufo9661d.xn--1ug99cj620c71sh; ; xn----ufo9661d.xn--r5gy929fhm4f; [B2, B3, B6] # ê¡£-≠.𞤹ð…¢â†„
+xn----ufo9661d.xn--r5gy929fhm4f; ê¡£-≠.𞤹ð…¢â†„; [B2, B3, B6]; xn----ufo9661d.xn--r5gy929fhm4f; ; ; # ê¡£-≠.𞤹ð…¢â†„
+xn----ufo9661d.xn--1ug99cj620c71sh; ê¡£-≠.\u200D𞤹ð…¢â†„; [B1, B6, C2]; xn----ufo9661d.xn--1ug99cj620c71sh; ; ; # ê¡£-≠.𞤹ð…¢â†„
xn----ufo9661d.xn--q5g0929fhm4f; ê¡£-≠.𞤹ð…¢â†ƒ; [B2, B3, B6, V6]; xn----ufo9661d.xn--q5g0929fhm4f; ; ; # ê¡£-≠.𞤹ð…¢â†ƒ
-xn----ufo9661d.xn--1ug79cm620c71sh; ê¡£-≠.â€ðž¤¹ð…¢â†ƒ; [B1, B6, C2, V6]; xn----ufo9661d.xn--1ug79cm620c71sh; ; ; # ê¡£-≠.𞤹ð…¢â†ƒ
-Ï‚â’ð†«â¸µï½¡ð±¢ðŸ„ŠðŸ³; Ï‚â’ð†«â¸µ.ð±¢ðŸ„Š7; [B6, P1, V6]; xn--3xa019nwtghi25b.xn--7-075iy877c; ; xn--4xa809nwtghi25b.xn--7-075iy877c; # Ï‚â’ð†«â¸µ.🄊7
-Ï‚9.ð†«â¸µã€‚ð±¢9,7; Ï‚9.ð†«â¸µ.ð±¢9,7; [B1, P1, V5, V6]; xn--9-xmb.xn--ltj1535k.xn--9,7-r67t; ; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; # Ï‚9.ð†«â¸µ.9,7
-Σ9.ð†«â¸µã€‚ð±¢9,7; σ9.ð†«â¸µ.ð±¢9,7; [B1, P1, V5, V6]; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; ; ; # σ9.ð†«â¸µ.9,7
-σ9.ð†«â¸µã€‚ð±¢9,7; σ9.ð†«â¸µ.ð±¢9,7; [B1, P1, V5, V6]; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; ; ; # σ9.ð†«â¸µ.9,7
-xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; σ9.ð†«â¸µ.ð±¢9,7; [B1, P1, V5, V6]; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; ; ; # σ9.ð†«â¸µ.9,7
-xn--9-xmb.xn--ltj1535k.xn--9,7-r67t; Ï‚9.ð†«â¸µ.ð±¢9,7; [B1, P1, V5, V6]; xn--9-xmb.xn--ltj1535k.xn--9,7-r67t; ; ; # Ï‚9.ð†«â¸µ.9,7
-Σâ’ð†«â¸µï½¡ð±¢ðŸ„ŠðŸ³; σâ’ð†«â¸µ.ð±¢ðŸ„Š7; [B6, P1, V6]; xn--4xa809nwtghi25b.xn--7-075iy877c; ; ; # σâ’ð†«â¸µ.🄊7
-σâ’ð†«â¸µï½¡ð±¢ðŸ„ŠðŸ³; σâ’ð†«â¸µ.ð±¢ðŸ„Š7; [B6, P1, V6]; xn--4xa809nwtghi25b.xn--7-075iy877c; ; ; # σâ’ð†«â¸µ.🄊7
+xn----ufo9661d.xn--1ug79cm620c71sh; ê¡£-≠.\u200D𞤹ð…¢â†ƒ; [B1, B6, C2, V6]; xn----ufo9661d.xn--1ug79cm620c71sh; ; ; # ê¡£-≠.𞤹ð…¢â†ƒ
+Ï‚â’ð†«â¸µï½¡ð±¢ðŸ„ŠðŸ³; Ï‚â’ð†«â¸µ.ð±¢ðŸ„Š7; [B6, V6]; xn--3xa019nwtghi25b.xn--7-075iy877c; ; xn--4xa809nwtghi25b.xn--7-075iy877c; # Ï‚â’ð†«â¸µ.🄊7
+Ï‚9.ð†«â¸µã€‚ð±¢9,7; Ï‚9.ð†«â¸µ.ð±¢9,7; [B1, V5, V6]; xn--9-xmb.xn--ltj1535k.xn--9,7-r67t; ; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; # Ï‚9.ð†«â¸µ.9,7
+Σ9.ð†«â¸µã€‚ð±¢9,7; σ9.ð†«â¸µ.ð±¢9,7; [B1, V5, V6]; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; ; ; # σ9.ð†«â¸µ.9,7
+σ9.ð†«â¸µã€‚ð±¢9,7; σ9.ð†«â¸µ.ð±¢9,7; [B1, V5, V6]; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; ; ; # σ9.ð†«â¸µ.9,7
+xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; σ9.ð†«â¸µ.ð±¢9,7; [B1, V5, V6]; xn--9-zmb.xn--ltj1535k.xn--9,7-r67t; ; ; # σ9.ð†«â¸µ.9,7
+xn--9-xmb.xn--ltj1535k.xn--9,7-r67t; Ï‚9.ð†«â¸µ.ð±¢9,7; [B1, V5, V6]; xn--9-xmb.xn--ltj1535k.xn--9,7-r67t; ; ; # Ï‚9.ð†«â¸µ.9,7
+Σâ’ð†«â¸µï½¡ð±¢ðŸ„ŠðŸ³; σâ’ð†«â¸µ.ð±¢ðŸ„Š7; [B6, V6]; xn--4xa809nwtghi25b.xn--7-075iy877c; ; ; # σâ’ð†«â¸µ.🄊7
+σâ’ð†«â¸µï½¡ð±¢ðŸ„ŠðŸ³; σâ’ð†«â¸µ.ð±¢ðŸ„Š7; [B6, V6]; xn--4xa809nwtghi25b.xn--7-075iy877c; ; ; # σâ’ð†«â¸µ.🄊7
xn--4xa809nwtghi25b.xn--7-075iy877c; σâ’ð†«â¸µ.ð±¢ðŸ„Š7; [B6, V6]; xn--4xa809nwtghi25b.xn--7-075iy877c; ; ; # σâ’ð†«â¸µ.🄊7
xn--3xa019nwtghi25b.xn--7-075iy877c; Ï‚â’ð†«â¸µ.ð±¢ðŸ„Š7; [B6, V6]; xn--3xa019nwtghi25b.xn--7-075iy877c; ; ; # Ï‚â’ð†«â¸µ.🄊7
-ࡓ.‌ß; ࡓ.‌ß; [B1, C1]; xn--iwb.xn--zca570n; ; xn--iwb.ss; [] # ࡓ.ß
-ࡓ.‌ß; ; [B1, C1]; xn--iwb.xn--zca570n; ; xn--iwb.ss; [] # ࡓ.ß
-ࡓ.‌SS; ࡓ.‌ss; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss
-ࡓ.‌ss; ; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss
-xn--iwb.ss; à¡“.ss; ; xn--iwb.ss; ; ; # à¡“.ss
-à¡“.ss; ; ; xn--iwb.ss; ; ; # à¡“.ss
-à¡“.SS; à¡“.ss; ; xn--iwb.ss; ; ; # à¡“.ss
-xn--iwb.xn--ss-i1t; ࡓ.‌ss; [B1, C1]; xn--iwb.xn--ss-i1t; ; ; # ࡓ.ss
-xn--iwb.xn--zca570n; ࡓ.‌ß; [B1, C1]; xn--iwb.xn--zca570n; ; ; # ࡓ.ß
-ࡓ.‌SS; ࡓ.‌ss; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss
-ࡓ.‌ss; ࡓ.‌ss; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss
-ࡓ.‌Ss; ࡓ.‌ss; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss
-ࡓ.‌Ss; ࡓ.‌ss; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss
-ñ¯¶£-.â€ÝŽê¥ó »¨; ; [B1, B6, C2, P1, V3, V6]; xn----s116e.xn--1ob387jy90hq459k; ; xn----s116e.xn--1ob6504fmf40i; [B3, B6, P1, V3, V6] # -.ÝŽê¥
-xn----s116e.xn--1ob6504fmf40i; ñ¯¶£-.ÝŽê¥ó »¨; [B3, B6, V3, V6]; xn----s116e.xn--1ob6504fmf40i; ; ; # -.ÝŽê¥
-xn----s116e.xn--1ob387jy90hq459k; ñ¯¶£-.â€ÝŽê¥ó »¨; [B1, B6, C2, V3, V6]; xn----s116e.xn--1ob387jy90hq459k; ; ; # -.ÝŽê¥
-䃚蟥-。-񽒘⒈; 䃚蟥-.-񽒘⒈; [P1, V3, V6]; xn----n50a258u.xn----ecp33805f; ; ; # 䃚蟥-.-⒈
-䃚蟥-。-񽒘1.; 䃚蟥-.-񽒘1.; [P1, V3, V6]; xn----n50a258u.xn---1-up07j.; ; ; # 䃚蟥-.-1.
+\u0853.\u200Cß; \u0853.\u200Cß; [B1, C1]; xn--iwb.xn--zca570n; ; xn--iwb.ss; [] # ࡓ.ß
+\u0853.\u200Cß; ; [B1, C1]; xn--iwb.xn--zca570n; ; xn--iwb.ss; [] # ࡓ.ß
+\u0853.\u200CSS; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # à¡“.ss
+\u0853.\u200Css; ; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # à¡“.ss
+xn--iwb.ss; \u0853.ss; ; xn--iwb.ss; ; ; # à¡“.ss
+\u0853.ss; ; ; xn--iwb.ss; ; ; # à¡“.ss
+\u0853.SS; \u0853.ss; ; xn--iwb.ss; ; ; # à¡“.ss
+xn--iwb.xn--ss-i1t; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; ; # à¡“.ss
+xn--iwb.xn--zca570n; \u0853.\u200Cß; [B1, C1]; xn--iwb.xn--zca570n; ; ; # ࡓ.ß
+\u0853.\u200CSS; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss
+\u0853.\u200Css; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss
+\u0853.\u200CSs; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # à¡“.ss
+\u0853.\u200CSs; \u0853.\u200Css; [B1, C1]; xn--iwb.xn--ss-i1t; ; xn--iwb.ss; [] # ࡓ.ss
+ñ¯¶£-.\u200D\u074E\uA94D󠻨; ; [B1, B6, C2, V3, V6]; xn----s116e.xn--1ob387jy90hq459k; ; xn----s116e.xn--1ob6504fmf40i; [B3, B6, V3, V6] # -.ÝŽê¥
+xn----s116e.xn--1ob6504fmf40i; ñ¯¶£-.\u074E\uA94D󠻨; [B3, B6, V3, V6]; xn----s116e.xn--1ob6504fmf40i; ; ; # -.ÝŽê¥
+xn----s116e.xn--1ob387jy90hq459k; ñ¯¶£-.\u200D\u074E\uA94D󠻨; [B1, B6, C2, V3, V6]; xn----s116e.xn--1ob387jy90hq459k; ; ; # -.ÝŽê¥
+䃚蟥-。-񽒘⒈; 䃚蟥-.-񽒘⒈; [V3, V6]; xn----n50a258u.xn----ecp33805f; ; ; # 䃚蟥-.-⒈
+䃚蟥-。-񽒘1.; 䃚蟥-.-񽒘1.; [V3, V6]; xn----n50a258u.xn---1-up07j.; ; ; # 䃚蟥-.-1.
xn----n50a258u.xn---1-up07j.; 䃚蟥-.-񽒘1.; [V3, V6]; xn----n50a258u.xn---1-up07j.; ; ; # 䃚蟥-.-1.
xn----n50a258u.xn----ecp33805f; 䃚蟥-.-񽒘⒈; [V3, V6]; xn----n50a258u.xn----ecp33805f; ; ; # 䃚蟥-.-⒈
ð¹¸äšµ-ꡡ。⺇; ð¹¸äšµ-ê¡¡.⺇; [B1]; xn----bm3an932a1l5d.xn--xvj; ; ; # ð¹¸äšµ-ê¡¡.⺇
xn----bm3an932a1l5d.xn--xvj; ð¹¸äšµ-ê¡¡.⺇; [B1]; xn----bm3an932a1l5d.xn--xvj; ; ; # ð¹¸äšµ-ê¡¡.⺇
-𑄳。᫜ð¹»; ð‘„³.á«œð¹»; [B1, B3, B5, B6, P1, V5, V6]; xn--v80d.xn--2rf1154i; ; ; # ð‘„³.ð¹»
-xn--v80d.xn--2rf1154i; ð‘„³.á«œð¹»; [B1, B3, B5, B6, V5, V6]; xn--v80d.xn--2rf1154i; ; ; # ð‘„³.ð¹»
-≮ð¹».⒎𑂵ں؂; ; [B1, P1, V6]; xn--gdhx904g.xn--kfb18a325efm3s; ; ; # ≮ð¹».â’Žð‘‚µÚº
-≮ð¹».⒎𑂵ں؂; ≮ð¹».⒎𑂵ں؂; [B1, P1, V6]; xn--gdhx904g.xn--kfb18a325efm3s; ; ; # ≮ð¹».â’Žð‘‚µÚº
-≮ð¹».7.𑂵ں؂; ; [B1, P1, V5, V6]; xn--gdhx904g.7.xn--kfb18an307d; ; ; # ≮ð¹».7.ð‘‚µÚº
-≮ð¹».7.𑂵ں؂; ≮ð¹».7.𑂵ں؂; [B1, P1, V5, V6]; xn--gdhx904g.7.xn--kfb18an307d; ; ; # ≮ð¹».7.ð‘‚µÚº
-xn--gdhx904g.7.xn--kfb18an307d; ≮ð¹».7.𑂵ں؂; [B1, V5, V6]; xn--gdhx904g.7.xn--kfb18an307d; ; ; # ≮ð¹».7.ð‘‚µÚº
-xn--gdhx904g.xn--kfb18a325efm3s; ≮ð¹».⒎𑂵ں؂; [B1, V6]; xn--gdhx904g.xn--kfb18a325efm3s; ; ; # ≮ð¹».â’Žð‘‚µÚº
-ᢔ≠ô‹‰‚.â€ð‹¢; ; [C2, P1, V6]; xn--ebf031cf7196a.xn--1ug9540g; ; xn--ebf031cf7196a.xn--587c; [P1, V6] # ᢔ≠.ð‹¢
-ᢔ≠ô‹‰‚.â€ð‹¢; ᢔ≠ô‹‰‚.â€ð‹¢; [C2, P1, V6]; xn--ebf031cf7196a.xn--1ug9540g; ; xn--ebf031cf7196a.xn--587c; [P1, V6] # ᢔ≠.ð‹¢
+𑄳。\u1ADCð¹»; ð‘„³.\u1ADCð¹»; [B1, B5, B6, V5, V6]; xn--v80d.xn--2rf1154i; ; ; # ð‘„³.ð¹»
+xn--v80d.xn--2rf1154i; ð‘„³.\u1ADCð¹»; [B1, B5, B6, V5, V6]; xn--v80d.xn--2rf1154i; ; ; # ð‘„³.ð¹»
+≮ð¹».â’Žð‘‚µ\u06BA\u0602; ; [B1, V6]; xn--gdhx904g.xn--kfb18a325efm3s; ; ; # ≮ð¹».â’Žð‘‚µÚº
+<\u0338ð¹».â’Žð‘‚µ\u06BA\u0602; ≮ð¹».â’Žð‘‚µ\u06BA\u0602; [B1, V6]; xn--gdhx904g.xn--kfb18a325efm3s; ; ; # ≮ð¹».â’Žð‘‚µÚº
+≮ð¹».7.ð‘‚µ\u06BA\u0602; ; [B1, V5, V6]; xn--gdhx904g.7.xn--kfb18an307d; ; ; # ≮ð¹».7.ð‘‚µÚº
+<\u0338ð¹».7.ð‘‚µ\u06BA\u0602; ≮ð¹».7.ð‘‚µ\u06BA\u0602; [B1, V5, V6]; xn--gdhx904g.7.xn--kfb18an307d; ; ; # ≮ð¹».7.ð‘‚µÚº
+xn--gdhx904g.7.xn--kfb18an307d; ≮ð¹».7.ð‘‚µ\u06BA\u0602; [B1, V5, V6]; xn--gdhx904g.7.xn--kfb18an307d; ; ; # ≮ð¹».7.ð‘‚µÚº
+xn--gdhx904g.xn--kfb18a325efm3s; ≮ð¹».â’Žð‘‚µ\u06BA\u0602; [B1, V6]; xn--gdhx904g.xn--kfb18a325efm3s; ; ; # ≮ð¹».â’Žð‘‚µÚº
+ᢔ≠ô‹‰‚.\u200Dð‹¢; ; [C2, V6]; xn--ebf031cf7196a.xn--1ug9540g; ; xn--ebf031cf7196a.xn--587c; [V6] # ᢔ≠.ð‹¢
+ᢔ=\u0338ô‹‰‚.\u200Dð‹¢; ᢔ≠ô‹‰‚.\u200Dð‹¢; [C2, V6]; xn--ebf031cf7196a.xn--1ug9540g; ; xn--ebf031cf7196a.xn--587c; [V6] # ᢔ≠.ð‹¢
xn--ebf031cf7196a.xn--587c; ᢔ≠ô‹‰‚.ð‹¢; [V6]; xn--ebf031cf7196a.xn--587c; ; ; # ᢔ≠.ð‹¢
-xn--ebf031cf7196a.xn--1ug9540g; ᢔ≠ô‹‰‚.â€ð‹¢; [C2, V6]; xn--ebf031cf7196a.xn--1ug9540g; ; ; # ᢔ≠.ð‹¢
-ð©â‰®ñ£Š›â‰¯ï¼ŽÙ¬ðžµ•â³¿; ð©â‰®ñ£Š›â‰¯.٬𞵕⳿; [B1, B2, B3, P1, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # ð©â‰®â‰¯.٬⳿
-ð©≮ñ£Š›≯.٬𞵕⳿; ð©â‰®ñ£Š›â‰¯.٬𞵕⳿; [B1, B2, B3, P1, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # ð©â‰®â‰¯.٬⳿
-ð©â‰®ñ£Š›â‰¯.٬𞵕⳿; ; [B1, B2, B3, P1, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # ð©â‰®â‰¯.٬⳿
-ð©≮ñ£Š›≯.٬𞵕⳿; ð©â‰®ñ£Š›â‰¯.٬𞵕⳿; [B1, B2, B3, P1, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # ð©â‰®â‰¯.٬⳿
-xn--gdhc0519o0y27b.xn--lib468q0d21a; ð©â‰®ñ£Š›â‰¯.٬𞵕⳿; [B1, B2, B3, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # ð©â‰®â‰¯.٬⳿
+xn--ebf031cf7196a.xn--1ug9540g; ᢔ≠ô‹‰‚.\u200Dð‹¢; [C2, V6]; xn--ebf031cf7196a.xn--1ug9540g; ; ; # ᢔ≠.ð‹¢
+ð©â‰®ñ£Š›â‰¯ï¼Ž\u066C𞵕⳿; ð©â‰®ñ£Š›â‰¯.\u066C𞵕⳿; [B1, B2, B3, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # ð©â‰®â‰¯.٬⳿
+ð©<\u0338ñ£Š›>\u0338.\u066C𞵕⳿; ð©â‰®ñ£Š›â‰¯.\u066C𞵕⳿; [B1, B2, B3, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # ð©â‰®â‰¯.٬⳿
+ð©â‰®ñ£Š›â‰¯.\u066C𞵕⳿; ; [B1, B2, B3, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # ð©â‰®â‰¯.٬⳿
+ð©<\u0338ñ£Š›>\u0338.\u066C𞵕⳿; ð©â‰®ñ£Š›â‰¯.\u066C𞵕⳿; [B1, B2, B3, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # ð©â‰®â‰¯.٬⳿
+xn--gdhc0519o0y27b.xn--lib468q0d21a; ð©â‰®ñ£Š›â‰¯.\u066C𞵕⳿; [B1, B2, B3, V6]; xn--gdhc0519o0y27b.xn--lib468q0d21a; ; ; # ð©â‰®â‰¯.٬⳿
-。âº; -.âº; [V3]; -.xn--6vj; ; ; # -.âº
-。âº; -.âº; [V3]; -.xn--6vj; ; ; # -.âº
-.xn--6vj; -.âº; [V3]; -.xn--6vj; ; ; # -.âº
-󠰩𑲬.ٜ; 󠰩𑲬.ٜ; [P1, V5, V6]; xn--sn3d59267c.xn--4hb; ; ; # 𑲬.ٜ
-󠰩𑲬.ٜ; ; [P1, V5, V6]; xn--sn3d59267c.xn--4hb; ; ; # 𑲬.ٜ
-xn--sn3d59267c.xn--4hb; 󠰩𑲬.ٜ; [V5, V6]; xn--sn3d59267c.xn--4hb; ; ; # 𑲬.ٜ
-ðº.ñš‡ƒâ€Œ; ; [C1, P1, V5, V6]; xn--ie8c.xn--0ug03366c; ; xn--ie8c.xn--2g51a; [P1, V5, V6] # ðº.
+󠰩𑲬.\u065C; 󠰩𑲬.\u065C; [V5, V6]; xn--sn3d59267c.xn--4hb; ; ; # 𑲬.ٜ
+󠰩𑲬.\u065C; ; [V5, V6]; xn--sn3d59267c.xn--4hb; ; ; # 𑲬.ٜ
+xn--sn3d59267c.xn--4hb; 󠰩𑲬.\u065C; [V5, V6]; xn--sn3d59267c.xn--4hb; ; ; # 𑲬.ٜ
+ðº.ñš‡ƒ\u200C; ; [C1, V5, V6]; xn--ie8c.xn--0ug03366c; ; xn--ie8c.xn--2g51a; [V5, V6] # ðº.
xn--ie8c.xn--2g51a; ðº.ñš‡ƒ; [V5, V6]; xn--ie8c.xn--2g51a; ; ; # ðº.
-xn--ie8c.xn--0ug03366c; ðº.ñš‡ƒâ€Œ; [C1, V5, V6]; xn--ie8c.xn--0ug03366c; ; ; # ðº.
-ؽۣ.ð¨Ž; ; [B1, B3, B6, V5]; xn--8gb64a.xn--mr9c; ; ; # ؽۣ.ð¨Ž
-xn--8gb64a.xn--mr9c; ؽۣ.ð¨Ž; [B1, B3, B6, V5]; xn--8gb64a.xn--mr9c; ; ; # ؽۣ.ð¨Ž
-漦Ⴙς.ñ¡»€ð´„; ; [B5, B6, P1, V6]; xn--3xa157d717e.xn--9d0d3162t; ; xn--4xa947d717e.xn--9d0d3162t; # 漦Ⴙς.ð´„
-漦ⴙς.ñ¡»€ð´„; ; [B5, B6, P1, V6]; xn--3xa972sl47b.xn--9d0d3162t; ; xn--4xa772sl47b.xn--9d0d3162t; # 漦ⴙς.ð´„
-漦ႹΣ.ñ¡»€ð´„; 漦Ⴙσ.ñ¡»€ð´„; [B5, B6, P1, V6]; xn--4xa947d717e.xn--9d0d3162t; ; ; # 漦Ⴙσ.ð´„
-漦ⴙσ.ñ¡»€ð´„; ; [B5, B6, P1, V6]; xn--4xa772sl47b.xn--9d0d3162t; ; ; # 漦ⴙσ.ð´„
-漦Ⴙσ.ñ¡»€ð´„; ; [B5, B6, P1, V6]; xn--4xa947d717e.xn--9d0d3162t; ; ; # 漦Ⴙσ.ð´„
+xn--ie8c.xn--0ug03366c; ðº.ñš‡ƒ\u200C; [C1, V5, V6]; xn--ie8c.xn--0ug03366c; ; ; # ðº.
+\u063D\u06E3.ð¨Ž; ; [B1, V5]; xn--8gb64a.xn--mr9c; ; ; # ؽۣ.ð¨Ž
+xn--8gb64a.xn--mr9c; \u063D\u06E3.ð¨Ž; [B1, V5]; xn--8gb64a.xn--mr9c; ; ; # ؽۣ.ð¨Ž
+漦Ⴙς.ñ¡»€ð´„; ; [B5, B6, V6]; xn--3xa157d717e.xn--9d0d3162t; ; xn--4xa947d717e.xn--9d0d3162t; # 漦Ⴙς.ð´„
+漦ⴙς.ñ¡»€ð´„; ; [B5, B6, V6]; xn--3xa972sl47b.xn--9d0d3162t; ; xn--4xa772sl47b.xn--9d0d3162t; # 漦ⴙς.ð´„
+漦ႹΣ.ñ¡»€ð´„; 漦Ⴙσ.ñ¡»€ð´„; [B5, B6, V6]; xn--4xa947d717e.xn--9d0d3162t; ; ; # 漦Ⴙσ.ð´„
+漦ⴙσ.ñ¡»€ð´„; ; [B5, B6, V6]; xn--4xa772sl47b.xn--9d0d3162t; ; ; # 漦ⴙσ.ð´„
+漦Ⴙσ.ñ¡»€ð´„; ; [B5, B6, V6]; xn--4xa947d717e.xn--9d0d3162t; ; ; # 漦Ⴙσ.ð´„
xn--4xa947d717e.xn--9d0d3162t; 漦Ⴙσ.ñ¡»€ð´„; [B5, B6, V6]; xn--4xa947d717e.xn--9d0d3162t; ; ; # 漦Ⴙσ.ð´„
xn--4xa772sl47b.xn--9d0d3162t; 漦ⴙσ.ñ¡»€ð´„; [B5, B6, V6]; xn--4xa772sl47b.xn--9d0d3162t; ; ; # 漦ⴙσ.ð´„
xn--3xa972sl47b.xn--9d0d3162t; 漦ⴙς.ñ¡»€ð´„; [B5, B6, V6]; xn--3xa972sl47b.xn--9d0d3162t; ; ; # 漦ⴙς.ð´„
xn--3xa157d717e.xn--9d0d3162t; 漦Ⴙς.ñ¡»€ð´„; [B5, B6, V6]; xn--3xa157d717e.xn--9d0d3162t; ; ; # 漦Ⴙς.ð´„
-ð¹«è¸§à³ò«š‡.󜀃⒈ð¨¤; ; [B1, P1, V6]; xn--8tc1437dro0d6q06h.xn--tsh2611ncu71e; ; ; # ð¹«è¸§à³.â’ˆð¨¤
-ð¹«è¸§à³ò«š‡.󜀃1.ð¨¤; ; [B1, B3, B6, P1, V5, V6]; xn--8tc1437dro0d6q06h.xn--1-p948l.xn--m82h; ; ; # ð¹«è¸§à³.1.ð¨¤
-xn--8tc1437dro0d6q06h.xn--1-p948l.xn--m82h; ð¹«è¸§à³ò«š‡.󜀃1.ð¨¤; [B1, B3, B6, V5, V6]; xn--8tc1437dro0d6q06h.xn--1-p948l.xn--m82h; ; ; # ð¹«è¸§à³.1.ð¨¤
-xn--8tc1437dro0d6q06h.xn--tsh2611ncu71e; ð¹«è¸§à³ò«š‡.󜀃⒈ð¨¤; [B1, V6]; xn--8tc1437dro0d6q06h.xn--tsh2611ncu71e; ; ; # ð¹«è¸§à³.â’ˆð¨¤
-â€â‰®ï¼Žó Ÿªð¹«-; â€â‰®.󠟪ð¹«-; [C2, P1, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [P1, V3, V6] # ≮.-
-â€≮.󠟪ð¹«-; â€â‰®.󠟪ð¹«-; [C2, P1, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [P1, V3, V6] # ≮.-
-â€â‰®.󠟪ð¹«-; ; [C2, P1, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [P1, V3, V6] # ≮.-
-â€≮.󠟪ð¹«-; â€â‰®.󠟪ð¹«-; [C2, P1, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [P1, V3, V6] # ≮.-
+ð¹«è¸§\u0CCDò«š‡.󜀃⒈ð¨¤; ; [B1, V6]; xn--8tc1437dro0d6q06h.xn--tsh2611ncu71e; ; ; # ð¹«è¸§à³.â’ˆð¨¤
+ð¹«è¸§\u0CCDò«š‡.󜀃1.ð¨¤; ; [B1, V5, V6]; xn--8tc1437dro0d6q06h.xn--1-p948l.xn--m82h; ; ; # ð¹«è¸§à³.1.ð¨¤
+xn--8tc1437dro0d6q06h.xn--1-p948l.xn--m82h; ð¹«è¸§\u0CCDò«š‡.󜀃1.ð¨¤; [B1, V5, V6]; xn--8tc1437dro0d6q06h.xn--1-p948l.xn--m82h; ; ; # ð¹«è¸§à³.1.ð¨¤
+xn--8tc1437dro0d6q06h.xn--tsh2611ncu71e; ð¹«è¸§\u0CCDò«š‡.󜀃⒈ð¨¤; [B1, V6]; xn--8tc1437dro0d6q06h.xn--tsh2611ncu71e; ; ; # ð¹«è¸§à³.â’ˆð¨¤
+\u200D≮.󠟪ð¹«-; \u200D≮.󠟪ð¹«-; [C2, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [V3, V6] # ≮.-
+\u200D<\u0338.󠟪ð¹«-; \u200D≮.󠟪ð¹«-; [C2, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [V3, V6] # ≮.-
+\u200D≮.󠟪ð¹«-; ; [C2, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [V3, V6] # ≮.-
+\u200D<\u0338.󠟪ð¹«-; \u200D≮.󠟪ð¹«-; [C2, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; xn--gdh.xn----cr99a1w710b; [V3, V6] # ≮.-
xn--gdh.xn----cr99a1w710b; ≮.󠟪ð¹«-; [V3, V6]; xn--gdh.xn----cr99a1w710b; ; ; # ≮.-
-xn--1ug95g.xn----cr99a1w710b; â€â‰®.󠟪ð¹«-; [C2, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; ; # ≮.-
-â€â€è¥”。Ⴜ5ê¡®ñµ; â€â€è¥”.Ⴜ5ê¡®ñµ; [C2, P1, V6]; xn--1uga7691f.xn--5-r1g7167ipfw8d; ; xn--2u2a.xn--5-r1g7167ipfw8d; [P1, V6] # 襔.Ⴜ5ê¡®
-â€â€è¥”。ⴜ5ê¡®ñµ; â€â€è¥”.â´œ5ê¡®ñµ; [C2, P1, V6]; xn--1uga7691f.xn--5-uws5848bpf44e; ; xn--2u2a.xn--5-uws5848bpf44e; [P1, V6] # 襔.â´œ5ê¡®
+xn--1ug95g.xn----cr99a1w710b; \u200D≮.󠟪ð¹«-; [C2, V3, V6]; xn--1ug95g.xn----cr99a1w710b; ; ; # ≮.-
+\u200D\u200D襔。Ⴜ5ê¡®ñµ; \u200D\u200D襔.Ⴜ5ê¡®ñµ; [C2, V6]; xn--1uga7691f.xn--5-r1g7167ipfw8d; ; xn--2u2a.xn--5-r1g7167ipfw8d; [V6] # 襔.Ⴜ5ê¡®
+\u200D\u200D襔。ⴜ5ê¡®ñµ; \u200D\u200D襔.â´œ5ê¡®ñµ; [C2, V6]; xn--1uga7691f.xn--5-uws5848bpf44e; ; xn--2u2a.xn--5-uws5848bpf44e; [V6] # 襔.â´œ5ê¡®
xn--2u2a.xn--5-uws5848bpf44e; 襔.â´œ5ê¡®ñµ; [V6]; xn--2u2a.xn--5-uws5848bpf44e; ; ; # 襔.â´œ5ê¡®
-xn--1uga7691f.xn--5-uws5848bpf44e; â€â€è¥”.â´œ5ê¡®ñµ; [C2, V6]; xn--1uga7691f.xn--5-uws5848bpf44e; ; ; # 襔.â´œ5ê¡®
+xn--1uga7691f.xn--5-uws5848bpf44e; \u200D\u200D襔.â´œ5ê¡®ñµ; [C2, V6]; xn--1uga7691f.xn--5-uws5848bpf44e; ; ; # 襔.â´œ5ê¡®
xn--2u2a.xn--5-r1g7167ipfw8d; 襔.Ⴜ5ê¡®ñµ; [V6]; xn--2u2a.xn--5-r1g7167ipfw8d; ; ; # 襔.Ⴜ5ê¡®
-xn--1uga7691f.xn--5-r1g7167ipfw8d; â€â€è¥”.Ⴜ5ê¡®ñµ; [C2, V6]; xn--1uga7691f.xn--5-r1g7167ipfw8d; ; ; # 襔.Ⴜ5ê¡®
-ð«œð‘Œ¼â€ï¼Žå©€; ð«œð‘Œ¼â€.å©€; [B3, C2]; xn--1ugx063g1if.xn--q0s; ; xn--ix9c26l.xn--q0s; [] # ð«œð‘Œ¼.å©€
-ð«œð‘Œ¼â€.å©€; ; [B3, C2]; xn--1ugx063g1if.xn--q0s; ; xn--ix9c26l.xn--q0s; [] # ð«œð‘Œ¼.å©€
+xn--1uga7691f.xn--5-r1g7167ipfw8d; \u200D\u200D襔.Ⴜ5ê¡®ñµ; [C2, V6]; xn--1uga7691f.xn--5-r1g7167ipfw8d; ; ; # 襔.Ⴜ5ê¡®
+ð«œð‘Œ¼\u200D.婀; ð«œð‘Œ¼\u200D.å©€; [B3, C2]; xn--1ugx063g1if.xn--q0s; ; xn--ix9c26l.xn--q0s; [] # ð«œð‘Œ¼.å©€
+ð«œð‘Œ¼\u200D.å©€; ; [B3, C2]; xn--1ugx063g1if.xn--q0s; ; xn--ix9c26l.xn--q0s; [] # ð«œð‘Œ¼.å©€
xn--ix9c26l.xn--q0s; ð«œð‘Œ¼.å©€; ; xn--ix9c26l.xn--q0s; ; ; # ð«œð‘Œ¼.å©€
ð«œð‘Œ¼.å©€; ; ; xn--ix9c26l.xn--q0s; ; ; # ð«œð‘Œ¼.å©€
-xn--1ugx063g1if.xn--q0s; ð«œð‘Œ¼â€.å©€; [B3, C2]; xn--1ugx063g1if.xn--q0s; ; ; # ð«œð‘Œ¼.å©€
-󠅽︒︒ð¹¯ï½¡â¬³á©¸; ︒︒ð¹¯.⬳᩸; [B1, P1, V6]; xn--y86ca186j.xn--7of309e; ; ; # ︒︒ð¹¯.⬳᩸
-󠅽。。ð¹¯ã€‚⬳᩸; ..ð¹¯.⬳᩸; [B1, X4_2]; ..xn--no0d.xn--7of309e; [B1, A4_2]; ; # ..ð¹¯.⬳᩸
-..xn--no0d.xn--7of309e; ..ð¹¯.⬳᩸; [B1, X4_2]; ..xn--no0d.xn--7of309e; [B1, A4_2]; ; # ..ð¹¯.⬳᩸
-xn--y86ca186j.xn--7of309e; ︒︒ð¹¯.⬳᩸; [B1, V6]; xn--y86ca186j.xn--7of309e; ; ; # ︒︒ð¹¯.⬳᩸
-ðŸ–ß.ó „-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; 8ss.xn---?-gfk; # 8ß.-?Ⴏ
-8ß.ó „-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; 8ss.xn---?-gfk; # 8ß.-?Ⴏ
-8ß.ó „-?â´; 8ß.-?â´; [P1, V3, V6]; xn--8-qfa.xn---?-261a; ; 8ss.xn---?-261a; # 8ß.-?â´
-8SS.ó „-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
-8ss.ó „-?â´; 8ss.-?â´; [P1, V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?â´
-8ss.ó „-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
-8ss.xn---?-gfk; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
-8ss.xn---?-261a; 8ss.-?â´; [P1, V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?â´
-xn--8-qfa.xn---?-261a; 8ß.-?â´; [P1, V3, V6]; xn--8-qfa.xn---?-261a; ; ; # 8ß.-?â´
-xn--8-qfa.xn---?-gfk; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
-ðŸ–ß.ó „-?â´; 8ß.-?â´; [P1, V3, V6]; xn--8-qfa.xn---?-261a; ; 8ss.xn---?-261a; # 8ß.-?â´
-ðŸ–SS.ó „-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
-ðŸ–ss.ó „-?â´; 8ss.-?â´; [P1, V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?â´
-ðŸ–ss.ó „-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
-8ss.-?Ⴏ; ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
-8ss.-?â´; ; [P1, V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?â´
-8SS.-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
-xn--8-qfa.-?â´; 8ß.-?â´; [P1, V3, V6]; xn--8-qfa.xn---?-261a; ; ; # 8ß.-?â´
-XN--8-QFA.-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
-Xn--8-Qfa.-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
-xn--8-qfa.-?Ⴏ; 8ß.-?Ⴏ; [P1, V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
-ðŸ–Ss.ó „-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
-8Ss.ó „-?Ⴏ; 8ss.-?Ⴏ; [P1, V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
--â€ó ‹Ÿ.‌ð¹£á‚¥; ; [B1, C1, C2, P1, V3, V6]; xn----ugnv7071n.xn--dnd999e4j4p; ; xn----s721m.xn--dnd9201k; [B1, P1, V3, V6] # -.ð¹£á‚¥
--â€ó ‹Ÿ.‌ð¹£â´…; ; [B1, C1, C2, P1, V3, V6]; xn----ugnv7071n.xn--0ugz32cgr0p; ; xn----s721m.xn--wkj1423e; [B1, P1, V3, V6] # -.ð¹£â´…
+xn--1ugx063g1if.xn--q0s; ð«œð‘Œ¼\u200D.å©€; [B3, C2]; xn--1ugx063g1if.xn--q0s; ; ; # ð«œð‘Œ¼.å©€
+󠅽︒︒ð¹¯ï½¡â¬³\u1A78; ︒︒ð¹¯.⬳\u1A78; [B1, V6]; xn--y86ca186j.xn--7of309e; ; ; # ︒︒ð¹¯.⬳᩸
+󠅽。。ð¹¯ã€‚⬳\u1A78; ..ð¹¯.⬳\u1A78; [B1, X4_2]; ..xn--no0d.xn--7of309e; [B1, A4_2]; ; # ..ð¹¯.⬳᩸
+..xn--no0d.xn--7of309e; ..ð¹¯.⬳\u1A78; [B1, X4_2]; ..xn--no0d.xn--7of309e; [B1, A4_2]; ; # ..ð¹¯.⬳᩸
+xn--y86ca186j.xn--7of309e; ︒︒ð¹¯.⬳\u1A78; [B1, V6]; xn--y86ca186j.xn--7of309e; ; ; # ︒︒ð¹¯.⬳᩸
+ðŸ–ß.ó „-?Ⴏ; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; 8ss.xn---?-gfk; # 8ß.-?Ⴏ
+8ß.ó „-?Ⴏ; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; 8ss.xn---?-gfk; # 8ß.-?Ⴏ
+8ß.ó „-?â´; 8ß.-?â´; [V3, V6]; xn--8-qfa.xn---?-261a; ; 8ss.xn---?-261a; # 8ß.-?â´
+8SS.ó „-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8ss.ó „-?â´; 8ss.-?â´; [V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?â´
+8ss.ó „-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8ss.xn---?-gfk; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8ss.xn---?-261a; 8ss.-?â´; [V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?â´
+xn--8-qfa.xn---?-261a; 8ß.-?â´; [V3, V6]; xn--8-qfa.xn---?-261a; ; ; # 8ß.-?â´
+xn--8-qfa.xn---?-gfk; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
+ðŸ–ß.ó „-?â´; 8ß.-?â´; [V3, V6]; xn--8-qfa.xn---?-261a; ; 8ss.xn---?-261a; # 8ß.-?â´
+ðŸ–SS.ó „-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+ðŸ–ss.ó „-?â´; 8ss.-?â´; [V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?â´
+ðŸ–ss.ó „-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8ss.-?Ⴏ; ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8ss.-?â´; ; [V3, V6]; 8ss.xn---?-261a; ; ; # 8ss.-?â´
+8SS.-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+xn--8-qfa.-?â´; 8ß.-?â´; [V3, V6]; xn--8-qfa.xn---?-261a; ; ; # 8ß.-?â´
+XN--8-QFA.-?Ⴏ; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
+Xn--8-Qfa.-?Ⴏ; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
+xn--8-qfa.-?Ⴏ; 8ß.-?Ⴏ; [V3, V6]; xn--8-qfa.xn---?-gfk; ; ; # 8ß.-?Ⴏ
+ðŸ–Ss.ó „-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+8Ss.ó „-?Ⴏ; 8ss.-?Ⴏ; [V3, V6]; 8ss.xn---?-gfk; ; ; # 8ss.-?Ⴏ
+-\u200Dó ‹Ÿ.\u200Cð¹£á‚¥; ; [B1, C1, C2, V3, V6]; xn----ugnv7071n.xn--dnd999e4j4p; ; xn----s721m.xn--dnd9201k; [B1, V3, V6] # -.ð¹£á‚¥
+-\u200Dó ‹Ÿ.\u200Cð¹£â´…; ; [B1, C1, C2, V3, V6]; xn----ugnv7071n.xn--0ugz32cgr0p; ; xn----s721m.xn--wkj1423e; [B1, V3, V6] # -.ð¹£â´…
xn----s721m.xn--wkj1423e; -ó ‹Ÿ.ð¹£â´…; [B1, V3, V6]; xn----s721m.xn--wkj1423e; ; ; # -.ð¹£â´…
-xn----ugnv7071n.xn--0ugz32cgr0p; -â€ó ‹Ÿ.‌ð¹£â´…; [B1, C1, C2, V3, V6]; xn----ugnv7071n.xn--0ugz32cgr0p; ; ; # -.ð¹£â´…
+xn----ugnv7071n.xn--0ugz32cgr0p; -\u200Dó ‹Ÿ.\u200Cð¹£â´…; [B1, C1, C2, V3, V6]; xn----ugnv7071n.xn--0ugz32cgr0p; ; ; # -.ð¹£â´…
xn----s721m.xn--dnd9201k; -ó ‹Ÿ.ð¹£á‚¥; [B1, V3, V6]; xn----s721m.xn--dnd9201k; ; ; # -.ð¹£á‚¥
-xn----ugnv7071n.xn--dnd999e4j4p; -â€ó ‹Ÿ.‌ð¹£á‚¥; [B1, C1, C2, V3, V6]; xn----ugnv7071n.xn--dnd999e4j4p; ; ; # -.ð¹£á‚¥
-ꦹâ€í·ð»¶¡ï½¡â‚‚; ꦹâ€í·ð»¶¡.2; [C2, P1, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [P1, V5, V6] # ꦹí·.2
-ꦹâ€á„ᅳᆲ𻶡。₂; ꦹâ€í·ð»¶¡.2; [C2, P1, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [P1, V5, V6] # ꦹí·.2
-ꦹâ€í·ð»¶¡ã€‚2; ꦹâ€í·ð»¶¡.2; [C2, P1, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [P1, V5, V6] # ꦹí·.2
-ꦹâ€á„ᅳᆲ𻶡。2; ꦹâ€í·ð»¶¡.2; [C2, P1, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [P1, V5, V6] # ꦹí·.2
-xn--0m9as84e2e21c.2; ꦹí·ð»¶¡.2; [V5, V6]; xn--0m9as84e2e21c.2; ; ; # ꦹí·.2
-xn--1ug1435cfkyaoi04d.2; ꦹâ€í·ð»¶¡.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; ; # ꦹí·.2
-?.🄄𞯘; ; [B1, P1, V6]; ?.xn--3x6hx6f; ; ; # ?.🄄
-?.3,𞯘; ; [B1, P1, V6]; ?.xn--3,-tb22a; ; ; # ?.3,
-?.xn--3,-tb22a; ?.3,𞯘; [B1, P1, V6]; ?.xn--3,-tb22a; ; ; # ?.3,
-?.xn--3x6hx6f; ?.🄄𞯘; [B1, P1, V6]; ?.xn--3x6hx6f; ; ; # ?.🄄
-ð¨–ð©™ã€‚Û󀡶ꣅ⒈; ð¨–ð©™.Û󀡶ꣅ⒈; [B1, P1, V5, V6]; xn--rt9cl956a.xn--tlb403mxv4g06s9i; ; ; # ð¨–.ꣅ⒈
-ð¨–ð©™ã€‚Û󀡶ꣅ1.; ð¨–ð©™.Û󀡶ꣅ1.; [B1, P1, V5, V6]; xn--rt9cl956a.xn--1-dxc8545j0693i.; ; ; # ð¨–.ꣅ1.
-xn--rt9cl956a.xn--1-dxc8545j0693i.; ð¨–ð©™.Û󀡶ꣅ1.; [B1, V5, V6]; xn--rt9cl956a.xn--1-dxc8545j0693i.; ; ; # ð¨–.ꣅ1.
-xn--rt9cl956a.xn--tlb403mxv4g06s9i; ð¨–ð©™.Û󀡶ꣅ⒈; [B1, V5, V6]; xn--rt9cl956a.xn--tlb403mxv4g06s9i; ; ; # ð¨–.ꣅ⒈
-ò’ˆ£×¡Ú¸ã€‚Ⴈâ€; ò’ˆ£×¡Ú¸.Ⴈâ€; [B5, B6, C2, P1, V6]; xn--meb44b57607c.xn--gnd699e; ; xn--meb44b57607c.xn--gnd; [B5, B6, P1, V6] # סڸ.Ⴈ
-ò’ˆ£×¡Ú¸ã€‚â´ˆâ€; ò’ˆ£×¡Ú¸.â´ˆâ€; [B5, B6, C2, P1, V6]; xn--meb44b57607c.xn--1ug232c; ; xn--meb44b57607c.xn--zkj; [B5, B6, P1, V6] # סڸ.â´ˆ
-xn--meb44b57607c.xn--zkj; 򒈣סڸ.ⴈ; [B5, B6, V6]; xn--meb44b57607c.xn--zkj; ; ; # סڸ.ⴈ
-xn--meb44b57607c.xn--1ug232c; ò’ˆ£×¡Ú¸.â´ˆâ€; [B5, B6, C2, V6]; xn--meb44b57607c.xn--1ug232c; ; ; # סڸ.â´ˆ
-xn--meb44b57607c.xn--gnd; 򒈣סڸ.Ⴈ; [B5, B6, V6]; xn--meb44b57607c.xn--gnd; ; ; # סڸ.Ⴈ
-xn--meb44b57607c.xn--gnd699e; ò’ˆ£×¡Ú¸.Ⴈâ€; [B5, B6, C2, V6]; xn--meb44b57607c.xn--gnd699e; ; ; # סڸ.Ⴈ
-󀚶ð¨±ß¦â’ˆï¼Žð‘—髯‌; 󀚶ð¨±ß¦â’ˆ.ð‘—髯‌; [B1, B5, C1, P1, V5, V6]; xn--etb477lq931a1f58e.xn--0ugx259bocxd; ; xn--etb477lq931a1f58e.xn--uj6at43v; [B1, B5, P1, V5, V6] # ð¨±ß¦â’ˆ.ð‘—髯
-󀚶ð¨±ß¦1..ð‘—髯‌; ; [B1, B5, C1, P1, V5, V6, X4_2]; xn--1-idd62296a1fr6e..xn--0ugx259bocxd; [B1, B5, C1, P1, V5, V6, A4_2]; xn--1-idd62296a1fr6e..xn--uj6at43v; [B1, B5, P1, V5, V6, A4_2] # ð¨±ß¦1..ð‘—髯
-xn--1-idd62296a1fr6e..xn--uj6at43v; 󀚶ð¨±ß¦1..ð‘—髯; [B1, B5, V5, V6, X4_2]; xn--1-idd62296a1fr6e..xn--uj6at43v; [B1, B5, V5, V6, A4_2]; ; # ð¨±ß¦1..ð‘—髯
-xn--1-idd62296a1fr6e..xn--0ugx259bocxd; 󀚶ð¨±ß¦1..ð‘—髯‌; [B1, B5, C1, V5, V6, X4_2]; xn--1-idd62296a1fr6e..xn--0ugx259bocxd; [B1, B5, C1, V5, V6, A4_2]; ; # ð¨±ß¦1..ð‘—髯
-xn--etb477lq931a1f58e.xn--uj6at43v; 󀚶ð¨±ß¦â’ˆ.ð‘—髯; [B1, B5, V5, V6]; xn--etb477lq931a1f58e.xn--uj6at43v; ; ; # ð¨±ß¦â’ˆ.ð‘—髯
-xn--etb477lq931a1f58e.xn--0ugx259bocxd; 󀚶ð¨±ß¦â’ˆ.ð‘—髯‌; [B1, B5, C1, V5, V6]; xn--etb477lq931a1f58e.xn--0ugx259bocxd; ; ; # ð¨±ß¦â’ˆ.ð‘—髯
-ð«€ï¼ŽÚ‰ð‘Œ€; ð«€.ډ𑌀; ; xn--pw9c.xn--fjb8658k; ; ; # ð«€.ډ𑌀
-ð«€.ډ𑌀; ; ; xn--pw9c.xn--fjb8658k; ; ; # ð«€.ډ𑌀
-xn--pw9c.xn--fjb8658k; ð«€.ډ𑌀; ; xn--pw9c.xn--fjb8658k; ; ; # ð«€.ډ𑌀
-𑋪.ð³; 𑋪.ð³; [B1, B3, B6, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.ð³
-𑋪.ð³; ; [B1, B3, B6, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.ð³
-𑋪.ð²; 𑋪.ð³; [B1, B3, B6, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.ð³
-xn--fm1d.xn--5c0d; 𑋪.ð³; [B1, B3, B6, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.ð³
-𑋪.ð²; 𑋪.ð³; [B1, B3, B6, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.ð³
-≠膣。ྃ; ≠膣.ྃ; [P1, V5, V6]; xn--1chy468a.xn--2ed; ; ; # ≠膣.ྃ
-≠膣。ྃ; ≠膣.ྃ; [P1, V5, V6]; xn--1chy468a.xn--2ed; ; ; # ≠膣.ྃ
-xn--1chy468a.xn--2ed; ≠膣.ྃ; [V5, V6]; xn--1chy468a.xn--2ed; ; ; # ≠膣.ྃ
-񰀎-ݽ。ß; 񰀎-ݽ.ß; [B5, B6, P1, V6]; xn----j6c95618k.xn--zca; ; xn----j6c95618k.ss; # -ݽ.ß
-񰀎-ݽ。ß; 񰀎-ݽ.ß; [B5, B6, P1, V6]; xn----j6c95618k.xn--zca; ; xn----j6c95618k.ss; # -ݽ.ß
-񰀎-ݽ。SS; 񰀎-ݽ.ss; [B5, B6, P1, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
-񰀎-ݽ。ss; 񰀎-ݽ.ss; [B5, B6, P1, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
-񰀎-ݽ。Ss; 񰀎-ݽ.ss; [B5, B6, P1, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
-xn----j6c95618k.ss; 񰀎-ݽ.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
-xn----j6c95618k.xn--zca; 񰀎-ݽ.ß; [B5, B6, V6]; xn----j6c95618k.xn--zca; ; ; # -ݽ.ß
-񰀎-ݽ。SS; 񰀎-ݽ.ss; [B5, B6, P1, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
-񰀎-ݽ。ss; 񰀎-ݽ.ss; [B5, B6, P1, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
-񰀎-ݽ。Ss; 񰀎-ݽ.ss; [B5, B6, P1, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
-Ï‚ð¹ á¡šð‘„³ï¼Žâ¾­ð¹½ð½–ð«œ; Ï‚ð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; [B5, B6, P1, V6]; xn--3xa856hp23pxmc.xn--es5a888tvjc2u15h; ; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; # Ï‚ð¹ á¡šð‘„³.é‘ð¹½ð«œ
-Ï‚ð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; ; [B5, B6, P1, V6]; xn--3xa856hp23pxmc.xn--es5a888tvjc2u15h; ; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; # Ï‚ð¹ á¡šð‘„³.é‘ð¹½ð«œ
-Σð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; σð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; [B5, B6, P1, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σð¹ á¡šð‘„³.é‘ð¹½ð«œ
-σð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; ; [B5, B6, P1, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σð¹ á¡šð‘„³.é‘ð¹½ð«œ
+xn----ugnv7071n.xn--dnd999e4j4p; -\u200Dó ‹Ÿ.\u200Cð¹£á‚¥; [B1, C1, C2, V3, V6]; xn----ugnv7071n.xn--dnd999e4j4p; ; ; # -.ð¹£á‚¥
+\uA9B9\u200Dí·ð»¶¡ï½¡â‚‚; \uA9B9\u200Dí·ð»¶¡.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [V5, V6] # ꦹí·.2
+\uA9B9\u200Dá„ᅳᆲ𻶡。₂; \uA9B9\u200Dí·ð»¶¡.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [V5, V6] # ꦹí·.2
+\uA9B9\u200Dí·ð»¶¡ã€‚2; \uA9B9\u200Dí·ð»¶¡.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [V5, V6] # ꦹí·.2
+\uA9B9\u200Dá„ᅳᆲ𻶡。2; \uA9B9\u200Dí·ð»¶¡.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; xn--0m9as84e2e21c.2; [V5, V6] # ꦹí·.2
+xn--0m9as84e2e21c.2; \uA9B9í·ð»¶¡.2; [V5, V6]; xn--0m9as84e2e21c.2; ; ; # ꦹí·.2
+xn--1ug1435cfkyaoi04d.2; \uA9B9\u200Dí·ð»¶¡.2; [C2, V5, V6]; xn--1ug1435cfkyaoi04d.2; ; ; # ꦹí·.2
+?.🄄𞯘; ; [B1, V6]; ?.xn--3x6hx6f; ; ; # ?.🄄
+?.3,𞯘; ; [B1, V6]; ?.xn--3,-tb22a; ; ; # ?.3,
+?.xn--3,-tb22a; ?.3,𞯘; [B1, V6]; ?.xn--3,-tb22a; ; ; # ?.3,
+?.xn--3x6hx6f; ?.🄄𞯘; [B1, V6]; ?.xn--3x6hx6f; ; ; # ?.🄄
+ð¨–ð©™ã€‚\u06DD󀡶\uA8C5â’ˆ; ð¨–ð©™.\u06DD󀡶\uA8C5â’ˆ; [B1, V5, V6]; xn--rt9cl956a.xn--tlb403mxv4g06s9i; ; ; # ð¨–.ꣅ⒈
+ð¨–ð©™ã€‚\u06DD󀡶\uA8C51.; ð¨–ð©™.\u06DD󀡶\uA8C51.; [B1, V5, V6]; xn--rt9cl956a.xn--1-dxc8545j0693i.; ; ; # ð¨–.ꣅ1.
+xn--rt9cl956a.xn--1-dxc8545j0693i.; ð¨–ð©™.\u06DD󀡶\uA8C51.; [B1, V5, V6]; xn--rt9cl956a.xn--1-dxc8545j0693i.; ; ; # ð¨–.ꣅ1.
+xn--rt9cl956a.xn--tlb403mxv4g06s9i; ð¨–ð©™.\u06DD󀡶\uA8C5â’ˆ; [B1, V5, V6]; xn--rt9cl956a.xn--tlb403mxv4g06s9i; ; ; # ð¨–.ꣅ⒈
+򒈣\u05E1\u06B8。Ⴈ\u200D; 򒈣\u05E1\u06B8.Ⴈ\u200D; [B5, B6, C2, V6]; xn--meb44b57607c.xn--gnd699e; ; xn--meb44b57607c.xn--gnd; [B5, B6, V6] # סڸ.Ⴈ
+򒈣\u05E1\u06B8。ⴈ\u200D; 򒈣\u05E1\u06B8.ⴈ\u200D; [B5, B6, C2, V6]; xn--meb44b57607c.xn--1ug232c; ; xn--meb44b57607c.xn--zkj; [B5, B6, V6] # סڸ.ⴈ
+xn--meb44b57607c.xn--zkj; 򒈣\u05E1\u06B8.ⴈ; [B5, B6, V6]; xn--meb44b57607c.xn--zkj; ; ; # סڸ.ⴈ
+xn--meb44b57607c.xn--1ug232c; 򒈣\u05E1\u06B8.ⴈ\u200D; [B5, B6, C2, V6]; xn--meb44b57607c.xn--1ug232c; ; ; # סڸ.ⴈ
+xn--meb44b57607c.xn--gnd; 򒈣\u05E1\u06B8.Ⴈ; [B5, B6, V6]; xn--meb44b57607c.xn--gnd; ; ; # סڸ.Ⴈ
+xn--meb44b57607c.xn--gnd699e; 򒈣\u05E1\u06B8.Ⴈ\u200D; [B5, B6, C2, V6]; xn--meb44b57607c.xn--gnd699e; ; ; # סڸ.Ⴈ
+󀚶ð¨±\u07E6⒈.ð‘—髯\u200C; 󀚶ð¨±\u07E6â’ˆ.ð‘—髯\u200C; [B1, B5, C1, V5, V6]; xn--etb477lq931a1f58e.xn--0ugx259bocxd; ; xn--etb477lq931a1f58e.xn--uj6at43v; [B1, B5, V5, V6] # ð¨±ß¦â’ˆ.ð‘—髯
+󀚶ð¨±\u07E61..ð‘—髯\u200C; ; [B1, B5, C1, V5, V6, X4_2]; xn--1-idd62296a1fr6e..xn--0ugx259bocxd; [B1, B5, C1, V5, V6, A4_2]; xn--1-idd62296a1fr6e..xn--uj6at43v; [B1, B5, V5, V6, A4_2] # ð¨±ß¦1..ð‘—髯
+xn--1-idd62296a1fr6e..xn--uj6at43v; 󀚶ð¨±\u07E61..ð‘—髯; [B1, B5, V5, V6, X4_2]; xn--1-idd62296a1fr6e..xn--uj6at43v; [B1, B5, V5, V6, A4_2]; ; # ð¨±ß¦1..ð‘—髯
+xn--1-idd62296a1fr6e..xn--0ugx259bocxd; 󀚶ð¨±\u07E61..ð‘—髯\u200C; [B1, B5, C1, V5, V6, X4_2]; xn--1-idd62296a1fr6e..xn--0ugx259bocxd; [B1, B5, C1, V5, V6, A4_2]; ; # ð¨±ß¦1..ð‘—髯
+xn--etb477lq931a1f58e.xn--uj6at43v; 󀚶ð¨±\u07E6â’ˆ.ð‘—髯; [B1, B5, V5, V6]; xn--etb477lq931a1f58e.xn--uj6at43v; ; ; # ð¨±ß¦â’ˆ.ð‘—髯
+xn--etb477lq931a1f58e.xn--0ugx259bocxd; 󀚶ð¨±\u07E6â’ˆ.ð‘—髯\u200C; [B1, B5, C1, V5, V6]; xn--etb477lq931a1f58e.xn--0ugx259bocxd; ; ; # ð¨±ß¦â’ˆ.ð‘—髯
+ð«€ï¼Ž\u0689𑌀; ð«€.\u0689𑌀; ; xn--pw9c.xn--fjb8658k; ; ; # ð«€.ډ𑌀
+ð«€.\u0689𑌀; ; ; xn--pw9c.xn--fjb8658k; ; ; # ð«€.ډ𑌀
+xn--pw9c.xn--fjb8658k; ð«€.\u0689𑌀; ; xn--pw9c.xn--fjb8658k; ; ; # ð«€.ډ𑌀
+𑋪.ð³; 𑋪.ð³; [B1, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.ð³
+𑋪.ð³; ; [B1, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.ð³
+𑋪.ð²; 𑋪.ð³; [B1, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.ð³
+xn--fm1d.xn--5c0d; 𑋪.ð³; [B1, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.ð³
+𑋪.ð²; 𑋪.ð³; [B1, V5]; xn--fm1d.xn--5c0d; ; ; # 𑋪.ð³
+≠膣。\u0F83; ≠膣.\u0F83; [V5]; xn--1chy468a.xn--2ed; ; ; # ≠膣.ྃ
+=\u0338膣。\u0F83; ≠膣.\u0F83; [V5]; xn--1chy468a.xn--2ed; ; ; # ≠膣.ྃ
+xn--1chy468a.xn--2ed; ≠膣.\u0F83; [V5]; xn--1chy468a.xn--2ed; ; ; # ≠膣.ྃ
+񰀎-\u077D。ß; 񰀎-\u077D.ß; [B5, B6, V6]; xn----j6c95618k.xn--zca; ; xn----j6c95618k.ss; # -ݽ.ß
+񰀎-\u077D。ß; 񰀎-\u077D.ß; [B5, B6, V6]; xn----j6c95618k.xn--zca; ; xn----j6c95618k.ss; # -ݽ.ß
+񰀎-\u077D。SS; 񰀎-\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
+񰀎-\u077D。ss; 񰀎-\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
+񰀎-\u077D。Ss; 񰀎-\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
+xn----j6c95618k.ss; 񰀎-\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
+xn----j6c95618k.xn--zca; 񰀎-\u077D.ß; [B5, B6, V6]; xn----j6c95618k.xn--zca; ; ; # -ݽ.ß
+񰀎-\u077D。SS; 񰀎-\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
+񰀎-\u077D。ss; 񰀎-\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
+񰀎-\u077D。Ss; 񰀎-\u077D.ss; [B5, B6, V6]; xn----j6c95618k.ss; ; ; # -ݽ.ss
+Ï‚ð¹ á¡šð‘„³ï¼Žâ¾­ð¹½ð½–ð«œ; Ï‚ð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; [B5, B6, V6]; xn--3xa856hp23pxmc.xn--es5a888tvjc2u15h; ; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; # Ï‚ð¹ á¡šð‘„³.é‘ð¹½ð«œ
+Ï‚ð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; ; [B5, B6, V6]; xn--3xa856hp23pxmc.xn--es5a888tvjc2u15h; ; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; # Ï‚ð¹ á¡šð‘„³.é‘ð¹½ð«œ
+Σð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; σð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; [B5, B6, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σð¹ á¡šð‘„³.é‘ð¹½ð«œ
+σð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; ; [B5, B6, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σð¹ á¡šð‘„³.é‘ð¹½ð«œ
xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; σð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; [B5, B6, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σð¹ á¡šð‘„³.é‘ð¹½ð«œ
xn--3xa856hp23pxmc.xn--es5a888tvjc2u15h; Ï‚ð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; [B5, B6, V6]; xn--3xa856hp23pxmc.xn--es5a888tvjc2u15h; ; ; # Ï‚ð¹ á¡šð‘„³.é‘ð¹½ð«œ
-Σð¹ á¡šð‘„³ï¼Žâ¾­ð¹½ð½–ð«œ; σð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; [B5, B6, P1, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σð¹ á¡šð‘„³.é‘ð¹½ð«œ
-σð¹ á¡šð‘„³ï¼Žâ¾­ð¹½ð½–ð«œ; σð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; [B5, B6, P1, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σð¹ á¡šð‘„³.é‘ð¹½ð«œ
-ð‹·ã€‚â€; ð‹·.â€; [C2]; xn--r97c.xn--1ug; ; xn--r97c.; [] # ð‹·.
+Σð¹ á¡šð‘„³ï¼Žâ¾­ð¹½ð½–ð«œ; σð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; [B5, B6, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σð¹ á¡šð‘„³.é‘ð¹½ð«œ
+σð¹ á¡šð‘„³ï¼Žâ¾­ð¹½ð½–ð«œ; σð¹ á¡šð‘„³.é‘ð¹½ð½–ð«œ; [B5, B6, V6]; xn--4xa656hp23pxmc.xn--es5a888tvjc2u15h; ; ; # σð¹ á¡šð‘„³.é‘ð¹½ð«œ
+ð‹·ã€‚\u200D; ð‹·.\u200D; [C2]; xn--r97c.xn--1ug; ; xn--r97c.; [] # ð‹·.
xn--r97c.; ð‹·.; ; xn--r97c.; ; ; # ð‹·.
ð‹·.; ; ; xn--r97c.; ; ; # ð‹·.
-xn--r97c.xn--1ug; ð‹·.â€; [C2]; xn--r97c.xn--1ug; ; ; # ð‹·.
+xn--r97c.xn--1ug; ð‹·.\u200D; [C2]; xn--r97c.xn--1ug; ; ; # ð‹·.
𑰳𑈯。⥪; 𑰳𑈯.⥪; [V5]; xn--2g1d14o.xn--jti; ; ; # 𑰳𑈯.⥪
xn--2g1d14o.xn--jti; 𑰳𑈯.⥪; [V5]; xn--2g1d14o.xn--jti; ; ; # 𑰳𑈯.⥪
-𑆀ä´ñ¤§£ï¼Žá‚µðŸœâ€ŒÍˆ; 𑆀ä´ñ¤§£.Ⴕ4‌͈; [C1, P1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h32o; ; xn--1mnx647cg3x1b.xn--4-zfb324h; [P1, V5, V6] # 𑆀ä´.Ⴕ4͈
-𑆀ä´ñ¤§£.Ⴕ4‌͈; ; [C1, P1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h32o; ; xn--1mnx647cg3x1b.xn--4-zfb324h; [P1, V5, V6] # 𑆀ä´.Ⴕ4͈
-𑆀ä´ñ¤§£.â´•4‌͈; ; [C1, P1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb502tlsl; ; xn--1mnx647cg3x1b.xn--4-zfb5123a; [P1, V5, V6] # 𑆀ä´.â´•4͈
-xn--1mnx647cg3x1b.xn--4-zfb5123a; 𑆀ä´ñ¤§£.â´•4͈; [V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb5123a; ; ; # 𑆀ä´.â´•4͈
-xn--1mnx647cg3x1b.xn--4-zfb502tlsl; 𑆀ä´ñ¤§£.â´•4‌͈; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb502tlsl; ; ; # 𑆀ä´.â´•4͈
-xn--1mnx647cg3x1b.xn--4-zfb324h; 𑆀ä´ñ¤§£.Ⴕ4͈; [V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h; ; ; # 𑆀ä´.Ⴕ4͈
-xn--1mnx647cg3x1b.xn--4-zfb324h32o; 𑆀ä´ñ¤§£.Ⴕ4‌͈; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h32o; ; ; # 𑆀ä´.Ⴕ4͈
-𑆀ä´ñ¤§£ï¼Žâ´•ðŸœâ€ŒÍˆ; 𑆀ä´ñ¤§£.â´•4‌͈; [C1, P1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb502tlsl; ; xn--1mnx647cg3x1b.xn--4-zfb5123a; [P1, V5, V6] # 𑆀ä´.â´•4͈
-憡?‌Ⴔ.ð‹®â€â‰ ; ; [C1, C2, P1, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1chz659f; [P1, V6] # 憡?á‚´.ð‹®â‰ 
-憡?‌Ⴔ.ð‹®â€≠; 憡?‌Ⴔ.ð‹®â€â‰ ; [C1, C2, P1, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1chz659f; [P1, V6] # 憡?á‚´.ð‹®â‰ 
-憡?‌ⴔ.ð‹®â€≠; 憡?‌ⴔ.ð‹®â€â‰ ; [C1, C2, P1, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1chz659f; [P1, V6] # 憡?â´”.ð‹®â‰ 
-憡?‌ⴔ.ð‹®â€â‰ ; ; [C1, C2, P1, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1chz659f; [P1, V6] # 憡?â´”.ð‹®â‰ 
-xn--?-fwsr13r.xn--1chz659f; 憡?â´”.ð‹®â‰ ; [P1, V6]; xn--?-fwsr13r.xn--1chz659f; ; ; # 憡?â´”.ð‹®â‰ 
-xn--?-sgn310doh5c.xn--1ug73gl146a; 憡?‌ⴔ.ð‹®â€â‰ ; [C1, C2, P1, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; ; # 憡?â´”.ð‹®â‰ 
-xn--?-c1g3623d.xn--1chz659f; 憡?á‚´.ð‹®â‰ ; [P1, V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?á‚´.ð‹®â‰ 
-xn--?-c1g798iy27d.xn--1ug73gl146a; 憡?‌Ⴔ.ð‹®â€â‰ ; [C1, C2, P1, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; ; # 憡?á‚´.ð‹®â‰ 
-憡?â´”.xn--1chz659f; 憡?â´”.ð‹®â‰ ; [P1, V6]; xn--?-fwsr13r.xn--1chz659f; ; ; # 憡?â´”.ð‹®â‰ 
-憡?á‚´.XN--1CHZ659F; 憡?á‚´.ð‹®â‰ ; [P1, V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?á‚´.ð‹®â‰ 
-憡?á‚´.xn--1chz659f; 憡?á‚´.ð‹®â‰ ; [P1, V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?á‚´.ð‹®â‰ 
-憡?‌ⴔ.xn--1ug73gl146a; 憡?‌ⴔ.ð‹®â€â‰ ; [C1, C2, P1, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1ug73gl146a; [C2, P1, V6] # 憡?â´”.ð‹®â‰ 
-憡?‌Ⴔ.XN--1UG73GL146A; 憡?‌Ⴔ.ð‹®â€â‰ ; [C1, C2, P1, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1ug73gl146a; [C2, P1, V6] # 憡?á‚´.ð‹®â‰ 
-憡?‌Ⴔ.xn--1ug73gl146a; 憡?‌Ⴔ.ð‹®â€â‰ ; [C1, C2, P1, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1ug73gl146a; [C2, P1, V6] # 憡?á‚´.ð‹®â‰ 
-xn--?-c1g3623d.xn--1ug73gl146a; 憡?á‚´.ð‹®â€â‰ ; [C2, P1, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?á‚´.ð‹®â‰ 
-xn--?-fwsr13r.xn--1ug73gl146a; 憡?â´”.ð‹®â€â‰ ; [C2, P1, V6]; xn--?-fwsr13r.xn--1ug73gl146a; ; ; # 憡?â´”.ð‹®â‰ 
-憡?á‚´.xn--1ug73gl146a; 憡?á‚´.ð‹®â€â‰ ; [C2, P1, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?á‚´.ð‹®â‰ 
-憡?â´”.xn--1ug73gl146a; 憡?â´”.ð‹®â€â‰ ; [C2, P1, V6]; xn--?-fwsr13r.xn--1ug73gl146a; ; ; # 憡?â´”.ð‹®â‰ 
-憡?á‚´.XN--1UG73GL146A; 憡?á‚´.ð‹®â€â‰ ; [C2, P1, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?á‚´.ð‹®â‰ 
+𑆀ä´ñ¤§£ï¼Žá‚µðŸœ\u200C\u0348; 𑆀ä´ñ¤§£.Ⴕ4\u200C\u0348; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h32o; ; xn--1mnx647cg3x1b.xn--4-zfb324h; [V5, V6] # 𑆀ä´.Ⴕ4͈
+𑆀ä´ñ¤§£.Ⴕ4\u200C\u0348; ; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h32o; ; xn--1mnx647cg3x1b.xn--4-zfb324h; [V5, V6] # 𑆀ä´.Ⴕ4͈
+𑆀ä´ñ¤§£.â´•4\u200C\u0348; ; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb502tlsl; ; xn--1mnx647cg3x1b.xn--4-zfb5123a; [V5, V6] # 𑆀ä´.â´•4͈
+xn--1mnx647cg3x1b.xn--4-zfb5123a; 𑆀ä´ñ¤§£.â´•4\u0348; [V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb5123a; ; ; # 𑆀ä´.â´•4͈
+xn--1mnx647cg3x1b.xn--4-zfb502tlsl; 𑆀ä´ñ¤§£.â´•4\u200C\u0348; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb502tlsl; ; ; # 𑆀ä´.â´•4͈
+xn--1mnx647cg3x1b.xn--4-zfb324h; 𑆀ä´ñ¤§£.Ⴕ4\u0348; [V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h; ; ; # 𑆀ä´.Ⴕ4͈
+xn--1mnx647cg3x1b.xn--4-zfb324h32o; 𑆀ä´ñ¤§£.Ⴕ4\u200C\u0348; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb324h32o; ; ; # 𑆀ä´.Ⴕ4͈
+𑆀ä´ñ¤§£ï¼Žâ´•ðŸœ\u200C\u0348; 𑆀ä´ñ¤§£.â´•4\u200C\u0348; [C1, V5, V6]; xn--1mnx647cg3x1b.xn--4-zfb502tlsl; ; xn--1mnx647cg3x1b.xn--4-zfb5123a; [V5, V6] # 𑆀ä´.â´•4͈
+憡?\u200Cá‚´.ð‹®\u200D≠; ; [C1, C2, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1chz659f; [V6] # 憡?á‚´.ð‹®â‰ 
+憡?\u200Cá‚´.ð‹®\u200D=\u0338; 憡?\u200Cá‚´.ð‹®\u200D≠; [C1, C2, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1chz659f; [V6] # 憡?á‚´.ð‹®â‰ 
+憡?\u200Câ´”.ð‹®\u200D=\u0338; 憡?\u200Câ´”.ð‹®\u200D≠; [C1, C2, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1chz659f; [V6] # 憡?â´”.ð‹®â‰ 
+憡?\u200Câ´”.ð‹®\u200D≠; ; [C1, C2, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1chz659f; [V6] # 憡?â´”.ð‹®â‰ 
+xn--?-fwsr13r.xn--1chz659f; 憡?â´”.ð‹®â‰ ; [V6]; xn--?-fwsr13r.xn--1chz659f; ; ; # 憡?â´”.ð‹®â‰ 
+xn--?-sgn310doh5c.xn--1ug73gl146a; 憡?\u200Câ´”.ð‹®\u200D≠; [C1, C2, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; ; # 憡?â´”.ð‹®â‰ 
+xn--?-c1g3623d.xn--1chz659f; 憡?á‚´.ð‹®â‰ ; [V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?á‚´.ð‹®â‰ 
+xn--?-c1g798iy27d.xn--1ug73gl146a; 憡?\u200Cá‚´.ð‹®\u200D≠; [C1, C2, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; ; # 憡?á‚´.ð‹®â‰ 
+憡?â´”.xn--1chz659f; 憡?â´”.ð‹®â‰ ; [V6]; xn--?-fwsr13r.xn--1chz659f; ; ; # 憡?â´”.ð‹®â‰ 
+憡?á‚´.XN--1CHZ659F; 憡?á‚´.ð‹®â‰ ; [V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?á‚´.ð‹®â‰ 
+憡?á‚´.xn--1chz659f; 憡?á‚´.ð‹®â‰ ; [V6]; xn--?-c1g3623d.xn--1chz659f; ; ; # 憡?á‚´.ð‹®â‰ 
+憡?\u200Câ´”.xn--1ug73gl146a; 憡?\u200Câ´”.ð‹®\u200D≠; [C1, C2, V6]; xn--?-sgn310doh5c.xn--1ug73gl146a; ; xn--?-fwsr13r.xn--1ug73gl146a; [C2, V6] # 憡?â´”.ð‹®â‰ 
+憡?\u200Cá‚´.XN--1UG73GL146A; 憡?\u200Cá‚´.ð‹®\u200D≠; [C1, C2, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1ug73gl146a; [C2, V6] # 憡?á‚´.ð‹®â‰ 
+憡?\u200Cá‚´.xn--1ug73gl146a; 憡?\u200Cá‚´.ð‹®\u200D≠; [C1, C2, V6]; xn--?-c1g798iy27d.xn--1ug73gl146a; ; xn--?-c1g3623d.xn--1ug73gl146a; [C2, V6] # 憡?á‚´.ð‹®â‰ 
+xn--?-c1g3623d.xn--1ug73gl146a; 憡?á‚´.ð‹®\u200D≠; [C2, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?á‚´.ð‹®â‰ 
+xn--?-fwsr13r.xn--1ug73gl146a; 憡?â´”.ð‹®\u200D≠; [C2, V6]; xn--?-fwsr13r.xn--1ug73gl146a; ; ; # 憡?â´”.ð‹®â‰ 
+憡?á‚´.xn--1ug73gl146a; 憡?á‚´.ð‹®\u200D≠; [C2, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?á‚´.ð‹®â‰ 
+憡?â´”.xn--1ug73gl146a; 憡?â´”.ð‹®\u200D≠; [C2, V6]; xn--?-fwsr13r.xn--1ug73gl146a; ; ; # 憡?â´”.ð‹®â‰ 
+憡?á‚´.XN--1UG73GL146A; 憡?á‚´.ð‹®\u200D≠; [C2, V6]; xn--?-c1g3623d.xn--1ug73gl146a; ; ; # 憡?á‚´.ð‹®â‰ 
diff --git a/tests/auto/corelib/io/qurluts46/tst_qurluts46.cpp b/tests/auto/corelib/io/qurluts46/tst_qurluts46.cpp
index a550397ee8..d163ed19bf 100644
--- a/tests/auto/corelib/io/qurluts46/tst_qurluts46.cpp
+++ b/tests/auto/corelib/io/qurluts46/tst_qurluts46.cpp
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QUrl>
#include <QtCore/QFile>
#include <QTest>
+#include <QSet>
+#include <QByteArray>
#include <algorithm>
class tst_QUrlUts46 : public QObject
@@ -39,11 +16,11 @@ private Q_SLOTS:
void idnaTestV2();
private:
- // All error codes:
- // A3, A4_1, A4_2,
+ // All error codes in UTR #46 revision 31 (Unicode 15.1):
+ // A4_1, A4_2,
// B1, B2, B3, B4, B5, B6,
// C1, C2,
- // P1, P4,
+ // P4,
// V1, V2, V3, V5, V6,
// X4_2
//
@@ -51,7 +28,38 @@ private:
static const QSet<QByteArray> fatalErrors;
};
-const QSet<QByteArray> tst_QUrlUts46::fatalErrors = { "A3", "A4_2", "P1", "X4_2" };
+const QSet<QByteArray> tst_QUrlUts46::fatalErrors = {
+ "A4_2", // Empty ASCII label
+};
+
+/**
+ * Replace \uXXXX escapes in test case fields.
+ */
+static QString unescapeField(const QString &field)
+{
+ static const QRegularExpression re(R"(\\u([[:xdigit:]]{4}))");
+
+ QString result;
+ qsizetype lastIdx = 0;
+
+ for (const auto &match : re.globalMatch(field)) {
+ // Add stuff before the match
+ result.append(field.mid(lastIdx, match.capturedStart() - lastIdx));
+ bool ok = false;
+ auto c = match.captured(1).toUInt(&ok, 16);
+ if (!ok) {
+ qFatal("Failed to parse a Unicode escape: %s", qPrintable(match.captured(1)));
+ }
+
+ result.append(QChar(c));
+ lastIdx = match.capturedEnd();
+ }
+
+ // Append the unescaped end
+ result.append(field.mid(lastIdx));
+
+ return result;
+}
void tst_QUrlUts46::idnaTestV2_data()
{
@@ -73,7 +81,7 @@ void tst_QUrlUts46::idnaTestV2_data()
Q_ASSERT(s.startsWith('[') && s.endsWith(']'));
- const auto errors = s.sliced(1, s.length() - 2).split(',');
+ const auto errors = s.sliced(1, s.size() - 2).split(',');
// NOTE: empty string is not in fatalErrors and it's ok
return std::all_of(errors.begin(), errors.end(),
[](auto &e) { return !fatalErrors.contains(e.trimmed()); });
@@ -92,7 +100,7 @@ void tst_QUrlUts46::idnaTestV2_data()
Q_ASSERT(fields.size() == 7);
for (auto &field : fields)
- field = field.trimmed();
+ field = unescapeField(field.trimmed()).toUtf8();
const QString &source = fields[0];
QString toUnicode = fields[1].isEmpty() ? source : fields[1];
@@ -118,22 +126,19 @@ void tst_QUrlUts46::idnaTestV2()
QFETCH(QString, toAsciiT);
QFETCH(bool, toAsciiTOk);
- auto dashesOk = [](const QString &domain) {
- const auto labels = domain.split(u'.');
- return std::all_of(labels.begin(), labels.end(), [](const QString &label) {
- return label.isEmpty() || !(label.startsWith(u'-') || label.endsWith(u'-'));
- });
- };
-
QString toAceN = QUrl::toAce(source);
- if (toAsciiNOk && dashesOk(toAsciiN))
+ if (toUnicodeOk && toAsciiNOk)
QCOMPARE(toAceN, toAsciiN);
+ else if (toAsciiNOk)
+ QVERIFY(toAceN.isEmpty() || toAceN == toAsciiN);
else
QCOMPARE(toAceN, QString());
QString toAceT = QUrl::toAce(source, QUrl::AceTransitionalProcessing);
- if (toAsciiTOk && dashesOk(toAsciiT))
+ if (toUnicodeOk && toAsciiTOk)
QCOMPARE(toAceT, toAsciiT);
+ else if (toAsciiTOk)
+ QVERIFY(toAceT.isEmpty() || toAceT == toAsciiT);
else
QCOMPARE(toAceT, QString());
diff --git a/tests/auto/gui/text/qzip/.gitignore b/tests/auto/corelib/io/qzip/.gitignore
index 2d7dfbe70c..2d7dfbe70c 100644
--- a/tests/auto/gui/text/qzip/.gitignore
+++ b/tests/auto/corelib/io/qzip/.gitignore
diff --git a/tests/auto/corelib/io/qzip/CMakeLists.txt b/tests/auto/corelib/io/qzip/CMakeLists.txt
new file mode 100644
index 0000000000..df562c5e34
--- /dev/null
+++ b/tests/auto/corelib/io/qzip/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qzip Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qzip LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+# Collect test data
+file(GLOB_RECURSE test_data
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ testdata/*
+)
+
+qt_internal_add_test(tst_qzip
+ SOURCES
+ tst_qzip.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ TESTDATA ${test_data}
+)
diff --git a/tests/auto/gui/text/qzip/testdata/symlink.zip b/tests/auto/corelib/io/qzip/testdata/symlink.zip
index 027f96477a..027f96477a 100644
--- a/tests/auto/gui/text/qzip/testdata/symlink.zip
+++ b/tests/auto/corelib/io/qzip/testdata/symlink.zip
Binary files differ
diff --git a/tests/auto/gui/text/qzip/testdata/test.zip b/tests/auto/corelib/io/qzip/testdata/test.zip
index a57ba4e2a9..a57ba4e2a9 100644
--- a/tests/auto/gui/text/qzip/testdata/test.zip
+++ b/tests/auto/corelib/io/qzip/testdata/test.zip
Binary files differ
diff --git a/tests/auto/gui/text/qzip/tst_qzip.cpp b/tests/auto/corelib/io/qzip/tst_qzip.cpp
index 6be7c7b833..971e8f86c3 100644
--- a/tests/auto/gui/text/qzip/tst_qzip.cpp
+++ b/tests/auto/corelib/io/qzip/tst_qzip.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 <QTest>
#include <QDebug>
@@ -48,7 +23,7 @@ void tst_QZip::basicUnpack()
{
QZipReader zip(QFINDTESTDATA("/testdata/test.zip"), QIODevice::ReadOnly);
QList<QZipReader::FileInfo> files = zip.fileInfoList();
- QCOMPARE(files.count(), 2);
+ QCOMPARE(files.size(), 2);
QZipReader::FileInfo fi = files.at(0);
QVERIFY(fi.isValid());
@@ -84,7 +59,7 @@ void tst_QZip::symlinks()
{
QZipReader zip(QFINDTESTDATA("/testdata/symlink.zip"), QIODevice::ReadOnly);
QList<QZipReader::FileInfo> files = zip.fileInfoList();
- QCOMPARE(files.count(), 2);
+ QCOMPARE(files.size(), 2);
QZipReader::FileInfo fi = files.at(0);
QVERIFY(fi.isValid());
@@ -107,7 +82,7 @@ void tst_QZip::readTest()
{
QZipReader zip("foobar.zip", QIODevice::ReadOnly); // non existing file.
QList<QZipReader::FileInfo> files = zip.fileInfoList();
- QCOMPARE(files.count(), 0);
+ QCOMPARE(files.size(), 0);
QByteArray b = zip.fileData("foobar");
QCOMPARE(b.size(), 0);
}
@@ -126,7 +101,7 @@ void tst_QZip::createArchive()
QBuffer buffer2(&zipFile);
QZipReader zip2(&buffer2);
QList<QZipReader::FileInfo> files = zip2.fileInfoList();
- QCOMPARE(files.count(), 1);
+ QCOMPARE(files.size(), 1);
QZipReader::FileInfo file = files.at(0);
QCOMPARE(file.filePath, QString("My Filename"));
QCOMPARE(uint(file.isDir), (uint) 0);
diff --git a/tests/auto/corelib/ipc/CMakeLists.txt b/tests/auto/corelib/ipc/CMakeLists.txt
new file mode 100644
index 0000000000..751d093788
--- /dev/null
+++ b/tests/auto/corelib/ipc/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2022 Intel Corporation.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(NOT ANDROID AND NOT UIKIT)
+ if(QT_FEATURE_sharedmemory OR QT_FEATURE_systemsemaphore)
+ add_subdirectory(qnativeipckey)
+ endif()
+ if(QT_FEATURE_sharedmemory)
+ add_subdirectory(qsharedmemory)
+ endif()
+ if(QT_FEATURE_systemsemaphore)
+ add_subdirectory(qsystemsemaphore)
+ endif()
+endif()
diff --git a/tests/auto/corelib/ipc/ipctestcommon.h b/tests/auto/corelib/ipc/ipctestcommon.h
new file mode 100644
index 0000000000..25c7b8ce44
--- /dev/null
+++ b/tests/auto/corelib/ipc/ipctestcommon.h
@@ -0,0 +1,83 @@
+// Copyright (C) 2022 Intel Corporation.
+
+#include <QtTest/QTest>
+#include <QtCore/QNativeIpcKey>
+
+namespace IpcTestCommon {
+static QList<QNativeIpcKey::Type> supportedKeyTypes;
+
+template <typename IpcClass> void addGlobalTestRows()
+{
+ qDebug() << "Default key type is" << QNativeIpcKey::DefaultTypeForOs
+ << "and legacy key type is" << QNativeIpcKey::legacyDefaultTypeForOs();
+
+#if defined(Q_OS_FREEBSD) || defined(Q_OS_DARWIN) || defined(Q_OS_WIN) || (defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID))
+ // only enforce that IPC works on the platforms above; other platforms may
+ // have no working backends (notably, Android)
+ QVERIFY(IpcClass::isKeyTypeSupported(QNativeIpcKey::DefaultTypeForOs));
+ QVERIFY(IpcClass::isKeyTypeSupported(QNativeIpcKey::legacyDefaultTypeForOs()));
+#endif
+
+ auto addRowIfSupported = [](const char *name, QNativeIpcKey::Type type) {
+ if (IpcClass::isKeyTypeSupported(type)) {
+ supportedKeyTypes << type;
+ QTest::newRow(name) << type;
+ }
+ };
+
+ QTest::addColumn<QNativeIpcKey::Type>("keyType");
+
+ addRowIfSupported("Windows", QNativeIpcKey::Type::Windows);
+ addRowIfSupported("POSIX", QNativeIpcKey::Type::PosixRealtime);
+ addRowIfSupported("SystemV-Q", QNativeIpcKey::Type::SystemV);
+ addRowIfSupported("SystemV-T", QNativeIpcKey::Type('T'));
+
+ if (supportedKeyTypes.isEmpty())
+ QSKIP("System reports no supported IPC types.");
+}
+
+// rotate through the supported types and find another
+inline QNativeIpcKey::Type nextKeyType(QNativeIpcKey::Type type)
+{
+ qsizetype idx = supportedKeyTypes.indexOf(type);
+ Q_ASSERT(idx >= 0);
+
+ ++idx;
+ if (idx == supportedKeyTypes.size())
+ idx = 0;
+ return supportedKeyTypes.at(idx);
+}
+} // namespace IpcTestCommon
+
+QT_BEGIN_NAMESPACE
+namespace QTest {
+template<> inline char *toString(const QNativeIpcKey::Type &type)
+{
+ switch (type) {
+ case QNativeIpcKey::Type::SystemV: return qstrdup("SystemV");
+ case QNativeIpcKey::Type::PosixRealtime: return qstrdup("PosixRealTime");
+ case QNativeIpcKey::Type::Windows: return qstrdup("Windows");
+ }
+ if (type == QNativeIpcKey::Type{})
+ return qstrdup("Invalid");
+
+ char buf[32];
+ qsnprintf(buf, sizeof(buf), "%u", unsigned(type));
+ return qstrdup(buf);
+}
+
+template<> inline char *toString(const QNativeIpcKey &key)
+{
+ if (!key.isValid())
+ return qstrdup("<invalid>");
+
+ const char *type = toString(key.type());
+ const char *text = toString(key.nativeKey());
+ char buf[256];
+ qsnprintf(buf, sizeof(buf), "QNativeIpcKey(%s, %s)", text, type);
+ delete[] type;
+ delete[] text;
+ return qstrdup(buf);
+}
+} // namespace QTest
+QT_END_NAMESPACE
diff --git a/tests/auto/corelib/ipc/qnativeipckey/CMakeLists.txt b/tests/auto/corelib/ipc/qnativeipckey/CMakeLists.txt
new file mode 100644
index 0000000000..0cc6a7b18b
--- /dev/null
+++ b/tests/auto/corelib/ipc/qnativeipckey/CMakeLists.txt
@@ -0,0 +1,15 @@
+# Copyright (C) 2022 Intel Corporation.
+# 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_qnativeipckey LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qnativeipckey
+ SOURCES
+ tst_qnativeipckey.cpp
+ LIBRARIES
+ Qt::TestPrivate
+)
diff --git a/tests/auto/corelib/ipc/qnativeipckey/tst_qnativeipckey.cpp b/tests/auto/corelib/ipc/qnativeipckey/tst_qnativeipckey.cpp
new file mode 100644
index 0000000000..a01a108591
--- /dev/null
+++ b/tests/auto/corelib/ipc/qnativeipckey/tst_qnativeipckey.cpp
@@ -0,0 +1,442 @@
+// Copyright (C) 2022 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QNativeIpcKey>
+#include <QtTest/QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
+
+#include "../ipctestcommon.h"
+
+#if QT_CONFIG(sharedmemory)
+# include <qsharedmemory.h>
+#endif
+#if QT_CONFIG(systemsemaphore)
+# include <qsystemsemaphore.h>
+#endif
+
+#if QT_CONFIG(sharedmemory)
+static const auto makeLegacyKey = QSharedMemory::legacyNativeKey;
+#else
+static const auto makeLegacyKey = QSystemSemaphore::legacyNativeKey;
+#endif
+
+using namespace Qt::StringLiterals;
+
+class tst_QNativeIpcKey : public QObject
+{
+ Q_OBJECT
+private slots:
+ void compareCompiles();
+ void defaultTypes();
+ void construct();
+ void getSetCheck();
+ void equality();
+ void hash();
+ void swap();
+ void toString_data();
+ void toString();
+ void fromString_data();
+ void fromString();
+ void legacyKeys_data();
+ void legacyKeys();
+};
+
+void tst_QNativeIpcKey::compareCompiles()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QNativeIpcKey>();
+}
+
+void tst_QNativeIpcKey::defaultTypes()
+{
+ auto isKnown = [](QNativeIpcKey::Type t) {
+ switch (t) {
+ case QNativeIpcKey::Type::SystemV:
+ case QNativeIpcKey::Type::PosixRealtime:
+ case QNativeIpcKey::Type::Windows:
+ return true;
+ }
+ return false;
+ };
+
+ // because the letter Q looked nice in HÃ¥vard's Emacs font back in the 1990s
+ static_assert(qToUnderlying(QNativeIpcKey::Type::SystemV) == 'Q',
+ "QNativeIpcKey::Type::SystemV must be equal to the letter Q");
+
+ auto type = QNativeIpcKey::DefaultTypeForOs;
+ auto legacy = QNativeIpcKey::legacyDefaultTypeForOs();
+ QVERIFY(isKnown(type));
+ QVERIFY(isKnown(legacy));
+
+#ifdef Q_OS_WIN
+ QCOMPARE(type, QNativeIpcKey::Type::Windows);
+#else
+ QCOMPARE(type, QNativeIpcKey::Type::PosixRealtime);
+#endif
+
+#if defined(Q_OS_WIN)
+ QCOMPARE(legacy, QNativeIpcKey::Type::Windows);
+#elif defined(QT_POSIX_IPC)
+ QCOMPARE(legacy, QNativeIpcKey::Type::PosixRealtime);
+#elif !defined(Q_OS_DARWIN)
+ QCOMPARE(legacy, QNativeIpcKey::Type::SystemV);
+#endif
+}
+
+void tst_QNativeIpcKey::construct()
+{
+ {
+ QNativeIpcKey invalid(QNativeIpcKey::Type{});
+ QVERIFY(!invalid.isValid());
+ }
+
+ {
+ QNativeIpcKey key;
+ QVERIFY(key.nativeKey().isEmpty());
+ QVERIFY(key.isEmpty());
+ QVERIFY(key.isValid());
+ QCOMPARE(key.type(), QNativeIpcKey::DefaultTypeForOs);
+
+ QNativeIpcKey copy(key);
+ QVERIFY(copy.nativeKey().isEmpty());
+ QVERIFY(copy.isEmpty());
+ QVERIFY(copy.isValid());
+ QCOMPARE(copy.type(), QNativeIpcKey::DefaultTypeForOs);
+
+ QNativeIpcKey moved(std::move(copy));
+ QVERIFY(moved.nativeKey().isEmpty());
+ QVERIFY(moved.isEmpty());
+ QVERIFY(moved.isValid());
+ QCOMPARE(moved.type(), QNativeIpcKey::DefaultTypeForOs);
+
+ key.setType({});
+ key.setNativeKey("something else");
+ key = std::move(moved);
+ QVERIFY(key.nativeKey().isEmpty());
+ QVERIFY(key.isEmpty());
+ QVERIFY(key.isValid());
+ QCOMPARE(key.type(), QNativeIpcKey::DefaultTypeForOs);
+
+ copy.setType({});
+ copy.setNativeKey("something else");
+ copy = key;
+ QVERIFY(copy.nativeKey().isEmpty());
+ QVERIFY(copy.isEmpty());
+ QVERIFY(copy.isValid());
+ QCOMPARE(copy.type(), QNativeIpcKey::DefaultTypeForOs);
+ }
+
+ {
+ QNativeIpcKey key("dummy");
+ QCOMPARE(key.nativeKey(), "dummy");
+ QVERIFY(!key.isEmpty());
+ QVERIFY(key.isValid());
+ QCOMPARE(key.type(), QNativeIpcKey::DefaultTypeForOs);
+
+ QNativeIpcKey copy(key);
+ QCOMPARE(key.nativeKey(), "dummy");
+ QCOMPARE(copy.nativeKey(), "dummy");
+ QVERIFY(!copy.isEmpty());
+ QVERIFY(copy.isValid());
+ QCOMPARE(copy.type(), QNativeIpcKey::DefaultTypeForOs);
+
+ QNativeIpcKey moved(std::move(copy));
+ QCOMPARE(key.nativeKey(), "dummy");
+ QCOMPARE(moved.nativeKey(), "dummy");
+ QVERIFY(!moved.isEmpty());
+ QVERIFY(moved.isValid());
+ QCOMPARE(moved.type(), QNativeIpcKey::DefaultTypeForOs);
+
+ key.setType({});
+ key.setNativeKey("something else");
+ key = std::move(moved);
+ QCOMPARE(key.nativeKey(), "dummy");
+ QVERIFY(!key.isEmpty());
+ QVERIFY(key.isValid());
+ QCOMPARE(key.type(), QNativeIpcKey::DefaultTypeForOs);
+
+ copy.setType({});
+ copy.setNativeKey("something else");
+ copy = key;
+ QCOMPARE(key.nativeKey(), "dummy");
+ QCOMPARE(copy.nativeKey(), "dummy");
+ QVERIFY(!copy.isEmpty());
+ QVERIFY(copy.isValid());
+ QCOMPARE(copy.type(), QNativeIpcKey::DefaultTypeForOs);
+ }
+}
+
+void tst_QNativeIpcKey::getSetCheck()
+{
+ QNativeIpcKey key("key1", QNativeIpcKey::Type::Windows);
+ QVERIFY(key.isValid());
+ QVERIFY(!key.isEmpty());
+ QCOMPARE(key.nativeKey(), "key1");
+ QCOMPARE(key.type(), QNativeIpcKey::Type::Windows);
+
+ key.setType(QNativeIpcKey::Type::SystemV);
+ QVERIFY(key.isValid());
+ QVERIFY(!key.isEmpty());
+ QCOMPARE(key.type(), QNativeIpcKey::Type::SystemV);
+
+ key.setNativeKey("key2");
+ QCOMPARE(key.nativeKey(), "key2");
+}
+
+void tst_QNativeIpcKey::equality()
+{
+ QNativeIpcKey key1, key2;
+ QCOMPARE(key1, key2);
+ QVERIFY(!(key1 != key2));
+ QT_TEST_EQUALITY_OPS(key1, key2, true);
+
+ key1.setNativeKey("key1");
+ QCOMPARE_NE(key1, key2);
+ QVERIFY(!(key1 == key2));
+ QT_TEST_EQUALITY_OPS(key1, key2, false);
+
+ key2.setType({});
+ QCOMPARE_NE(key1, key2);
+ QVERIFY(!(key1 == key2));
+ QT_TEST_EQUALITY_OPS(key1, key2, false);
+
+ key2.setNativeKey(key1.nativeKey());
+ QCOMPARE_NE(key1, key2);
+ QVERIFY(!(key1 == key2));
+ QT_TEST_EQUALITY_OPS(key1, key2, false);
+
+ key2.setType(QNativeIpcKey::DefaultTypeForOs);
+ QCOMPARE(key1, key2);
+ QVERIFY(!(key1 != key2));
+ QT_TEST_EQUALITY_OPS(key1, key2, true);
+
+ key1 = makeLegacyKey("key1", QNativeIpcKey::DefaultTypeForOs);
+ QCOMPARE_NE(key1, key2);
+ QVERIFY(!(key1 == key2));
+ QT_TEST_EQUALITY_OPS(key1, key2, false);
+
+ key2 = key1;
+ QCOMPARE(key1, key2);
+ QVERIFY(!(key1 != key2));
+ QT_TEST_EQUALITY_OPS(key1, key2, true);
+
+ // just setting the native key won't make them equal again!
+ key2.setNativeKey(key1.nativeKey());
+ QCOMPARE_NE(key1, key2);
+ QVERIFY(!(key1 == key2));
+ QT_TEST_EQUALITY_OPS(key1, key2, false);
+}
+
+void tst_QNativeIpcKey::hash()
+{
+ QNativeIpcKey key1("key1", QNativeIpcKey::DefaultTypeForOs);
+ QNativeIpcKey key2(key1);
+ QCOMPARE_EQ(qHash(key1), qHash(key2));
+ QCOMPARE_EQ(qHash(key1, 123), qHash(key2, 123));
+}
+
+void tst_QNativeIpcKey::swap()
+{
+ QNativeIpcKey key1("key1", QNativeIpcKey::Type::PosixRealtime);
+ QNativeIpcKey key2("key2", QNativeIpcKey::Type::Windows);
+
+ // self-swaps
+ key1.swap(key1);
+ key2.swap(key2);
+ QCOMPARE(key1.nativeKey(), "key1");
+ QCOMPARE(key1.type(), QNativeIpcKey::Type::PosixRealtime);
+ QCOMPARE(key2.nativeKey(), "key2");
+ QCOMPARE(key2.type(), QNativeIpcKey::Type::Windows);
+
+ key1.swap(key2);
+ QCOMPARE(key2.nativeKey(), "key1");
+ QCOMPARE(key2.type(), QNativeIpcKey::Type::PosixRealtime);
+ QCOMPARE(key1.nativeKey(), "key2");
+ QCOMPARE(key1.type(), QNativeIpcKey::Type::Windows);
+
+ key1.swap(key2);
+ QCOMPARE(key1.nativeKey(), "key1");
+ QCOMPARE(key1.type(), QNativeIpcKey::Type::PosixRealtime);
+ QCOMPARE(key2.nativeKey(), "key2");
+ QCOMPARE(key2.type(), QNativeIpcKey::Type::Windows);
+
+ key1 = makeLegacyKey("key1", QNativeIpcKey::DefaultTypeForOs);
+ QCOMPARE(key1.type(), QNativeIpcKey::DefaultTypeForOs);
+ key1.swap(key2);
+ QCOMPARE(key1.type(), QNativeIpcKey::Type::Windows);
+ QCOMPARE(key2.type(), QNativeIpcKey::DefaultTypeForOs);
+}
+
+void tst_QNativeIpcKey::toString_data()
+{
+ QTest::addColumn<QString>("string");
+ QTest::addColumn<QNativeIpcKey>("key");
+
+ QTest::newRow("invalid") << QString() << QNativeIpcKey(QNativeIpcKey::Type(0));
+
+ auto addRow = [](const char *prefix, QNativeIpcKey::Type type) {
+ auto add = [=](const char *name, QLatin1StringView key, QLatin1StringView encoded = {}) {
+ if (encoded.isNull())
+ encoded = key;
+ QTest::addRow("%s-%s", prefix, name)
+ << prefix + u":"_s + encoded << QNativeIpcKey(key, type);
+ };
+ add("empty", {});
+ add("text", "foobar"_L1);
+ add("pathlike", "/sometext"_L1);
+ add("objectlike", "Global\\sometext"_L1);
+ add("colon-slash", ":/"_L1);
+ add("slash-colon", "/:"_L1);
+ add("percent", "%"_L1, "%25"_L1);
+ add("question-hash", "?#"_L1, "%3F%23"_L1);
+ add("hash-question", "#?"_L1, "%23%3F"_L1);
+ add("double-slash", "//"_L1, "/%2F"_L1);
+ add("triple-slash", "///"_L1, "/%2F/"_L1);
+ add("non-ascii", "\xe9"_L1);
+ add("non-utf8", "\xa0\xff"_L1);
+ QTest::addRow("%s-%s", prefix, "non-latin1")
+ << prefix + u":\u0100.\u2000.\U00010000"_s
+ << QNativeIpcKey(u"\u0100.\u2000.\U00010000"_s, type);
+ };
+ addRow("systemv", QNativeIpcKey::Type::SystemV);
+ addRow("posix", QNativeIpcKey::Type::PosixRealtime);
+ addRow("windows", QNativeIpcKey::Type::Windows);
+
+ addRow("systemv-1", QNativeIpcKey::Type(1));
+ addRow("systemv-84", QNativeIpcKey::Type('T'));
+ addRow("systemv-255", QNativeIpcKey::Type(0xff));
+}
+
+void tst_QNativeIpcKey::toString()
+{
+ QFETCH(QString, string);
+ QFETCH(QNativeIpcKey, key);
+
+ QCOMPARE(key.toString(), string);
+}
+
+void tst_QNativeIpcKey::fromString_data()
+{
+ toString_data();
+ QTest::addRow("systemv-alias") << "systemv-81:" << QNativeIpcKey(QNativeIpcKey::Type::SystemV);
+ QTest::addRow("systemv-zeropadded") << "systemv-009:" << QNativeIpcKey(QNativeIpcKey::Type(9));
+
+ QNativeIpcKey valid("/foo", QNativeIpcKey::Type::PosixRealtime);
+ QNativeIpcKey invalid(QNativeIpcKey::Type(0));
+
+ // percent-decoding
+ QTest::addRow("percent-encoded") << "posix:%2f%66o%6f" << valid;
+ QTest::addRow("percent-utf8")
+ << "posix:%C4%80.%E2%80%80.%F0%90%80%80"
+ << QNativeIpcKey(u"\u0100.\u2000.\U00010000"_s, QNativeIpcKey::Type::PosixRealtime);
+
+ // fragments are ignored
+ QTest::addRow("with-fragment") << "posix:/foo#bar" << valid;
+ QTest::addRow("with-fragmentquery") << "posix:/foo#bar?baz" << valid;
+
+ // but unknown query items are not
+ QTest::addRow("with-query") << "posix:/foo?bar" << invalid;
+ QTest::addRow("with-queryfragment") << "posix:/foo?bar#baz" << invalid;
+
+ // add some ones that won't parse well
+ QTest::addRow("positive-number") << "81" << invalid;
+ QTest::addRow("negative-number") << "-81" << invalid;
+ QTest::addRow("invalidprefix") << "invalidprefix:" << invalid;
+ QTest::addRow("systemv-nodash") << "systemv255" << invalid;
+ QTest::addRow("systemv-doubledash") << "systemv--255:" << invalid;
+ QTest::addRow("systemv-plus") << "systemv+255" << invalid;
+ QTest::addRow("systemv-hex") << "systemv-0x01:" << invalid;
+ QTest::addRow("systemv-too-low") << "systemv-0:" << invalid;
+ QTest::addRow("systemv-too-high") << "systemv-256" << invalid;
+ QTest::addRow("systemv-overflow-15bit") << "systemv-32769:" << invalid;
+ QTest::addRow("systemv-overflow-16bit") << "systemv-65537:" << invalid;
+ QTest::addRow("systemv-overflow-31bit") << "systemv-2147483649:" << invalid;
+ QTest::addRow("systemv-overflow-32bit") << "systemv-4294967297:" << invalid;
+
+ auto addRows = [=](const char *name) {
+ QTest::addRow("%s-nocolon", name) << name << invalid;
+ QTest::addRow("%s-junk", name) << name + u"junk"_s << invalid;
+ QTest::addRow("junk-%s-colon", name) << u"junk:"_s + name + u':' << invalid;
+ };
+ addRows("systemv");
+ addRows("posix");
+ addRows("windows");
+ addRows("systemv-1");
+ addRows("systemv-255");
+}
+
+void tst_QNativeIpcKey::fromString()
+{
+ QFETCH(QString, string);
+ QFETCH(QNativeIpcKey, key);
+
+ QCOMPARE(QNativeIpcKey::fromString(string), key);
+}
+
+void tst_QNativeIpcKey::legacyKeys_data()
+{
+ QTest::addColumn<QNativeIpcKey::Type>("type");
+ QTest::addColumn<QString>("legacyKey");
+ auto addRows = [](QNativeIpcKey::Type type) {
+ const char *label = "<unknown-type>";
+ switch (type) {
+ case QNativeIpcKey::Type::SystemV:
+ label = "systemv";
+ break;
+ case QNativeIpcKey::Type::PosixRealtime:
+ label = "posix";
+ break;
+ case QNativeIpcKey::Type::Windows:
+ label = "windows";
+ break;
+ }
+ auto add = [=](const char *name, const QString &legacyKey) {
+ QTest::addRow("%s-%s", label, name) << type << legacyKey;
+ };
+ add("empty", {});
+ add("text", "foobar"_L1);
+ add("pathlike", "/sometext"_L1);
+ add("objectlike", "Global\\sometext"_L1);
+ add("colon-slash", ":/"_L1);
+ add("slash-colon", "/:"_L1);
+ add("percent", "%"_L1);
+ add("question-hash", "?#"_L1);
+ add("hash-question", "#?"_L1);
+ add("double-slash", "//"_L1);
+ add("triple-slash", "///"_L1);
+ add("non-ascii", "\xe9"_L1);
+ add("non-utf8", "\xa0\xff"_L1);
+ add("non-latin1", u":\u0100.\u2000.\U00010000"_s);
+ };
+
+ addRows(QNativeIpcKey::DefaultTypeForOs);
+ if (auto type = QNativeIpcKey::legacyDefaultTypeForOs();
+ type != QNativeIpcKey::DefaultTypeForOs)
+ addRows(type);
+}
+
+void tst_QNativeIpcKey::legacyKeys()
+{
+ QFETCH(QNativeIpcKey::Type, type);
+ QFETCH(QString, legacyKey);
+
+ QNativeIpcKey key = makeLegacyKey(legacyKey, type);
+ QCOMPARE(key.type(), type);
+
+ QString string = key.toString();
+ QNativeIpcKey key2 = QNativeIpcKey::fromString(string);
+ QCOMPARE(key2, key);
+ QT_TEST_EQUALITY_OPS(key, key2, true);
+
+ if (!legacyKey.isEmpty()) {
+ // confirm it shows up in the encoded form
+ Q_ASSERT(!legacyKey.contains(u'&')); // needs extra encoding
+ QUrl u;
+ u.setQuery("legacyKey="_L1 + legacyKey, QUrl::DecodedMode);
+ QString encodedLegacyKey = u.toString(QUrl::RemoveScheme | QUrl::RemoveAuthority
+ | QUrl::DecodeReserved);
+ QVERIFY2(string.contains(encodedLegacyKey), qPrintable(string));
+ }
+}
+
+QTEST_MAIN(tst_QNativeIpcKey)
+#include "tst_qnativeipckey.moc"
diff --git a/tests/auto/corelib/ipc/qsharedmemory/CMakeLists.txt b/tests/auto/corelib/ipc/qsharedmemory/CMakeLists.txt
new file mode 100644
index 0000000000..e49c8d7828
--- /dev/null
+++ b/tests/auto/corelib/ipc/qsharedmemory/CMakeLists.txt
@@ -0,0 +1,27 @@
+# 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_qsharedmemory LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qsharedmemory
+ SOURCES
+ tst_qsharedmemory.cpp
+ LIBRARIES
+ Qt::CorePrivate
+)
+
+## Scopes:
+#####################################################################
+
+qt_internal_extend_target(tst_qsharedmemory CONDITION LINUX
+ LIBRARIES
+ rt
+)
+add_subdirectory(producerconsumer)
+if(QT_FEATURE_process)
+ add_dependencies(tst_qsharedmemory producerconsumer_helper)
+endif()
diff --git a/tests/auto/corelib/kernel/qsharedmemory/producerconsumer/CMakeLists.txt b/tests/auto/corelib/ipc/qsharedmemory/producerconsumer/CMakeLists.txt
index 610e2d507f..bd039837e3 100644
--- a/tests/auto/corelib/kernel/qsharedmemory/producerconsumer/CMakeLists.txt
+++ b/tests/auto/corelib/ipc/qsharedmemory/producerconsumer/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from producerconsumer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## producerconsumer_helper Binary:
@@ -7,6 +8,6 @@
qt_internal_add_test_helper(producerconsumer_helper
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/auto/corelib/kernel/qsharedmemory/producerconsumer/main.cpp b/tests/auto/corelib/ipc/qsharedmemory/producerconsumer/main.cpp
index cdbb11e5a7..102d505485 100644
--- a/tests/auto/corelib/kernel/qsharedmemory/producerconsumer/main.cpp
+++ b/tests/auto/corelib/ipc/qsharedmemory/producerconsumer/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 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 <QSharedMemory>
#include <QStringList>
@@ -42,10 +17,9 @@ QChar get(QSharedMemory &sm, int i)
return QChar::fromLatin1(((char*)sm.data())[i]);
}
-int readonly_segfault()
+int readonly_segfault(const QNativeIpcKey &key)
{
- QSharedMemory sharedMemory;
- sharedMemory.setKey("readonly_segfault");
+ QSharedMemory sharedMemory(key);
sharedMemory.create(1024, QSharedMemory::ReadOnly);
sharedMemory.lock();
set(sharedMemory, 0, 'a');
@@ -53,10 +27,9 @@ int readonly_segfault()
return EXIT_SUCCESS;
}
-int producer()
+int producer(const QNativeIpcKey &key)
{
- QSharedMemory producer;
- producer.setKey("market");
+ QSharedMemory producer(key);
int size = 1024;
if (!producer.create(size)) {
@@ -125,10 +98,9 @@ int producer()
return EXIT_SUCCESS;
}
-int consumer()
+int consumer(const QNativeIpcKey &key)
{
- QSharedMemory consumer;
- consumer.setKey("market");
+ QSharedMemory consumer(key);
//qDebug("consumer starting");
int tries = 0;
@@ -180,17 +152,21 @@ int main(int argc, char *argv[])
QCoreApplication app(argc, argv);
QStringList arguments = app.arguments();
- if (app.arguments().count() != 2) {
- qWarning("Please call the helper with the function to call as argument");
+ if (app.arguments().size() != 3) {
+ fprintf(stderr, "Usage: %s <mode> <key>\n"
+ "<mode> is one of: readonly_segfault, producer, consumer\n",
+ argv[0]);
return EXIT_FAILURE;
}
QString function = arguments.at(1);
+ QNativeIpcKey key = QNativeIpcKey::fromString(arguments.at(2));
+
if (function == QLatin1String("readonly_segfault"))
- return readonly_segfault();
+ return readonly_segfault(key);
else if (function == QLatin1String("producer"))
- return producer();
+ return producer(key);
else if (function == QLatin1String("consumer"))
- return consumer();
+ return consumer(key);
else
qWarning() << "Unknown function" << arguments.at(1);
diff --git a/tests/auto/corelib/kernel/qsharedmemory/tst_qsharedmemory.cpp b/tests/auto/corelib/ipc/qsharedmemory/tst_qsharedmemory.cpp
index 26cf67e9de..73578a3bab 100644
--- a/tests/auto/corelib/kernel/qsharedmemory/tst_qsharedmemory.cpp
+++ b/tests/auto/corelib/ipc/qsharedmemory/tst_qsharedmemory.cpp
@@ -1,30 +1,6 @@
-/****************************************************************************
-**
-** 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.
+// Copyright (C) 2022 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QFile>
@@ -36,51 +12,57 @@
#include <QThread>
#include <QElapsedTimer>
-#define EXISTING_SHARE "existing"
+#include <errno.h>
+#include <stdio.h>
+#ifdef Q_OS_UNIX
+# include <unistd.h>
+#endif
+
+#include "private/qtcore-config_p.h"
+#include "../ipctestcommon.h"
+
#define EXISTING_SIZE 1024
Q_DECLARE_METATYPE(QSharedMemory::SharedMemoryError)
Q_DECLARE_METATYPE(QSharedMemory::AccessMode)
+using namespace Qt::StringLiterals;
+
class tst_QSharedMemory : public QObject
{
Q_OBJECT
-public:
- tst_QSharedMemory();
- virtual ~tst_QSharedMemory();
-
public Q_SLOTS:
+ void initTestCase();
void init();
void cleanup();
-
private slots:
// basics
void constructor();
- void key_data();
- void key();
+ void nativeKey_data();
+ void nativeKey();
+ void legacyKey_data() { nativeKey_data(); }
+ void legacyKey();
void create_data();
void create();
void attach_data();
void attach();
+ void changeKeyType_data() { attach_data(); }
+ void changeKeyType();
void lock();
// custom edge cases
-#ifndef Q_OS_HPUX
void removeWhileAttached();
-#endif
void emptyMemory();
-#if !defined(Q_OS_WIN)
void readOnly();
-#endif
+ void attachBeforeCreate_data();
+ void attachBeforeCreate();
// basics all together
-#ifndef Q_OS_HPUX
void simpleProducerConsumer_data();
void simpleProducerConsumer();
void simpleDoubleProducerConsumer();
-#endif
// with threads
void simpleThreadedProducerConsumer_data();
@@ -92,52 +74,64 @@ private slots:
// extreme cases
void useTooMuchMemory();
-#if !defined(Q_OS_HPUX)
void attachTooMuch();
-#endif
// unique keys
void uniqueKey_data();
void uniqueKey();
+ // legacy
+ void createWithSameKey();
+
protected:
- int remove(const QString &key);
+ void remove(const QNativeIpcKey &key);
- QString rememberKey(const QString &key)
+ QString mangleKey(QStringView key)
{
- if (key == EXISTING_SHARE)
- return key;
- if (!keys.contains(key)) {
- keys.append(key);
- remove(key);
+ if (key.isEmpty())
+ return key.toString();
+ return u"tstshm_%1-%2_%3"_s.arg(QCoreApplication::applicationPid())
+ .arg(seq).arg(key);
+ }
+
+ QNativeIpcKey platformSafeKey(const QString &key)
+ {
+ QFETCH_GLOBAL(QNativeIpcKey::Type, keyType);
+ return QSharedMemory::platformSafeKey(mangleKey(key), keyType);
+ }
+
+ QNativeIpcKey rememberKey(const QString &key)
+ {
+ QNativeIpcKey ipcKey = platformSafeKey(key);
+ if (!keys.contains(ipcKey)) {
+ keys.append(ipcKey);
+ remove(ipcKey);
}
- return key;
+ return ipcKey;
}
- QStringList keys;
+ QList<QNativeIpcKey> keys;
QList<QSharedMemory*> jail;
- QSharedMemory *existingSharedMemory;
+ QSharedMemory *existingSharedMemory = nullptr;
+ int seq = 0;
private:
- const QString m_helperBinary;
+ const QString m_helperBinary = "./producerconsumer_helper";
};
-tst_QSharedMemory::tst_QSharedMemory()
- : existingSharedMemory(0)
- , m_helperBinary("producerconsumer_helper")
-{
-}
-
-tst_QSharedMemory::~tst_QSharedMemory()
+void tst_QSharedMemory::initTestCase()
{
+ IpcTestCommon::addGlobalTestRows<QSharedMemory>();
}
void tst_QSharedMemory::init()
{
- existingSharedMemory = new QSharedMemory(EXISTING_SHARE);
+ QNativeIpcKey key = platformSafeKey("existing");
+ existingSharedMemory = new QSharedMemory(key);
if (!existingSharedMemory->create(EXISTING_SIZE)) {
QCOMPARE(existingSharedMemory->error(), QSharedMemory::AlreadyExists);
}
+ keys.append(key);
}
void tst_QSharedMemory::cleanup()
@@ -146,78 +140,83 @@ void tst_QSharedMemory::cleanup()
qDeleteAll(jail.begin(), jail.end());
jail.clear();
- keys.append(EXISTING_SHARE);
- for (int i = 0; i < keys.count(); ++i) {
+ for (int i = 0; i < keys.size(); ++i) {
QSharedMemory sm(keys.at(i));
if (!sm.create(1024)) {
//if (sm.error() != QSharedMemory::KeyError)
// qWarning() << "test cleanup: remove failed:" << keys.at(i) << sm.error() << sm.errorString();
sm.attach();
sm.detach();
- remove(keys.at(i));
}
+ remove(keys.at(i));
}
+ ++seq;
}
-#ifndef Q_OS_WIN
-#include <private/qsharedmemory_p.h>
+#if QT_CONFIG(posix_shm)
+#include <sys/types.h>
+#include <sys/mman.h>
+#endif
+#if QT_CONFIG(sysv_shm)
#include <sys/types.h>
-#ifndef QT_POSIX_IPC
#include <sys/ipc.h>
#include <sys/shm.h>
-#else
-#include <sys/mman.h>
-#endif // QT_POSIX_IPC
-#include <errno.h>
#endif
-int tst_QSharedMemory::remove(const QString &key)
+void tst_QSharedMemory::remove(const QNativeIpcKey &key)
{
-#ifdef Q_OS_WIN
- Q_UNUSED(key);
- return 0;
-#else
- // On unix the shared memory might exists from a previously failed test
+ // On Unix, the shared memory might exist from a previously failed test
// or segfault, remove it it does
if (key.isEmpty())
- return -1;
+ return;
+
+ switch (key.type()) {
+ case QNativeIpcKey::Type::Windows:
+ return;
+
+ case QNativeIpcKey::Type::PosixRealtime:
+#if QT_CONFIG(posix_shm)
+ if (shm_unlink(QFile::encodeName(key.nativeKey()).constData()) == -1) {
+ if (errno != ENOENT) {
+ perror("shm_unlink");
+ return;
+ }
+ }
+#endif
+ return;
- QString fileName = QSharedMemoryPrivate::makePlatformSafeKey(key);
+ case QNativeIpcKey::Type::SystemV:
+ break;
+ }
-#ifndef QT_POSIX_IPC
+#if QT_CONFIG(sysv_shm)
// ftok requires that an actual file exists somewhere
+ QString fileName = key.nativeKey();
if (!QFile::exists(fileName)) {
//qDebug() << "exits failed";
- return -2;
+ return;
}
- int unix_key = ftok(fileName.toLatin1().constData(), 'Q');
+ int unix_key = ftok(fileName.toLatin1().constData(), int(key.type()));
if (-1 == unix_key) {
- qDebug() << "ftok failed";
- return -3;
+ perror("ftok");
+ return;
}
int id = shmget(unix_key, 0, 0600);
if (-1 == id) {
- qDebug() << "shmget failed" << strerror(errno);
- return -4;
+ if (errno != ENOENT)
+ perror("shmget");
+ return;
}
struct shmid_ds shmid_ds;
if (-1 == shmctl(id, IPC_RMID, &shmid_ds)) {
- qDebug() << "shmctl failed";
- return -5;
+ perror("shmctl");
+ return;
}
-#else
- if (shm_unlink(QFile::encodeName(fileName).constData()) == -1) {
- if (errno != ENOENT) {
- qDebug() << "shm_unlink failed";
- return -5;
- }
- }
-#endif // QT_POSIX_IPC
- return QFile::remove(fileName);
+ QFile::remove(fileName);
#endif // Q_OS_WIN
}
@@ -227,19 +226,25 @@ int tst_QSharedMemory::remove(const QString &key)
void tst_QSharedMemory::constructor()
{
QSharedMemory sm;
- QCOMPARE(sm.key(), QString());
QVERIFY(!sm.isAttached());
QVERIFY(!sm.data());
+ QCOMPARE(sm.nativeKey(), QString());
+ QCOMPARE(sm.nativeIpcKey(), QNativeIpcKey());
QCOMPARE(sm.size(), 0);
QCOMPARE(sm.error(), QSharedMemory::NoError);
QCOMPARE(sm.errorString(), QString());
+
+ QT_WARNING_PUSH
+ QT_WARNING_DISABLE_DEPRECATED
+ QCOMPARE(sm.key(), QString());
+ QT_WARNING_POP
}
-void tst_QSharedMemory::key_data()
+void tst_QSharedMemory::nativeKey_data()
{
QTest::addColumn<QString>("constructorKey");
QTest::addColumn<QString>("setKey");
- QTest::addColumn<QString>("setNativeKey");
+ QTest::addColumn<QString>("setNativeKey"); // only used in the legacyKey test
QTest::newRow("null, null, null") << QString() << QString() << QString();
QTest::newRow("one, null, null") << QString("one") << QString() << QString();
@@ -255,12 +260,62 @@ void tst_QSharedMemory::key_data()
/*!
Basic key testing
*/
-void tst_QSharedMemory::key()
+void tst_QSharedMemory::nativeKey()
{
QFETCH(QString, constructorKey);
QFETCH(QString, setKey);
QFETCH(QString, setNativeKey);
+ QNativeIpcKey constructorIpcKey = platformSafeKey(constructorKey);
+ QNativeIpcKey setIpcKey = platformSafeKey(setKey);
+
+ QSharedMemory sm(constructorIpcKey);
+ QCOMPARE(sm.nativeIpcKey(), constructorIpcKey);
+ QCOMPARE(sm.nativeKey(), constructorIpcKey.nativeKey());
+ sm.setNativeKey(setIpcKey);
+ QCOMPARE(sm.nativeIpcKey(), setIpcKey);
+ QCOMPARE(sm.nativeKey(), setIpcKey.nativeKey());
+
+ QCOMPARE(sm.isAttached(), false);
+
+ QCOMPARE(sm.error(), QSharedMemory::NoError);
+ QCOMPARE(sm.errorString(), QString());
+ QVERIFY(!sm.data());
+ QCOMPARE(sm.size(), 0);
+
+ QCOMPARE(sm.detach(), false);
+
+ // change the key type
+ QNativeIpcKey::Type nextKeyType = IpcTestCommon::nextKeyType(setIpcKey.type());
+ if (nextKeyType != setIpcKey.type()) {
+ QNativeIpcKey setIpcKey2 = QSharedMemory::platformSafeKey(setKey, nextKeyType);
+ sm.setNativeKey(setIpcKey2);
+
+ QCOMPARE(sm.nativeIpcKey(), setIpcKey2);
+ QCOMPARE(sm.nativeKey(), setIpcKey2.nativeKey());
+
+ QCOMPARE(sm.isAttached(), false);
+
+ QCOMPARE(sm.error(), QSharedMemory::NoError);
+ QCOMPARE(sm.errorString(), QString());
+ QVERIFY(!sm.data());
+ QCOMPARE(sm.size(), 0);
+
+ QCOMPARE(sm.detach(), false);
+ }
+}
+
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+void tst_QSharedMemory::legacyKey()
+{
+ QFETCH(QString, constructorKey);
+ QFETCH(QString, setKey);
+ QFETCH(QString, setNativeKey);
+
+#ifdef Q_OS_QNX
+ QSKIP("The legacy native key type is incorrectly set on QNX");
+#endif
QSharedMemory sm(constructorKey);
QCOMPARE(sm.key(), constructorKey);
QCOMPARE(sm.nativeKey().isEmpty(), constructorKey.isEmpty());
@@ -279,6 +334,7 @@ void tst_QSharedMemory::key()
QCOMPARE(sm.detach(), false);
}
+QT_WARNING_POP
void tst_QSharedMemory::create_data()
{
@@ -293,7 +349,7 @@ void tst_QSharedMemory::create_data()
<< false << QSharedMemory::InvalidSize;
QTest::newRow("nor size") << QString("norsize") << 1024
<< true << QSharedMemory::NoError;
- QTest::newRow("already exists") << QString(EXISTING_SHARE) << EXISTING_SIZE
+ QTest::newRow("existing") << QString("existing") << EXISTING_SIZE
<< false << QSharedMemory::AlreadyExists;
}
@@ -307,11 +363,12 @@ void tst_QSharedMemory::create()
QFETCH(bool, canCreate);
QFETCH(QSharedMemory::SharedMemoryError, error);
- QSharedMemory sm(rememberKey(key));
+ QNativeIpcKey nativeKey = rememberKey(key);
+ QSharedMemory sm(nativeKey);
QCOMPARE(sm.create(size), canCreate);
if (sm.error() != error)
qDebug() << sm.errorString();
- QCOMPARE(sm.key(), key);
+ QCOMPARE(sm.nativeIpcKey(), nativeKey);
if (canCreate) {
QCOMPARE(sm.errorString(), QString());
QVERIFY(sm.data() != 0);
@@ -328,13 +385,10 @@ void tst_QSharedMemory::attach_data()
QTest::addColumn<bool>("exists");
QTest::addColumn<QSharedMemory::SharedMemoryError>("error");
- QTest::newRow("null key") << QString() << false << QSharedMemory::KeyError;
- QTest::newRow("doesn't exists") << QString("doesntexists") << false << QSharedMemory::NotFound;
+ QTest::newRow("null") << QString() << false << QSharedMemory::KeyError;
+ QTest::newRow("doesntexists") << QString("doesntexist") << false << QSharedMemory::NotFound;
- // HPUX doesn't allow for multiple attaches per process.
-#ifndef Q_OS_HPUX
- QTest::newRow("already exists") << QString(EXISTING_SHARE) << true << QSharedMemory::NoError;
-#endif
+ QTest::newRow("existing") << QString("existing") << true << QSharedMemory::NoError;
}
/*!
@@ -346,11 +400,12 @@ void tst_QSharedMemory::attach()
QFETCH(bool, exists);
QFETCH(QSharedMemory::SharedMemoryError, error);
- QSharedMemory sm(key);
+ QNativeIpcKey nativeKey = platformSafeKey(key);
+ QSharedMemory sm(nativeKey);
QCOMPARE(sm.attach(), exists);
QCOMPARE(sm.isAttached(), exists);
QCOMPARE(sm.error(), error);
- QCOMPARE(sm.key(), key);
+ QCOMPARE(sm.nativeIpcKey(), nativeKey);
if (exists) {
QVERIFY(sm.data() != 0);
QVERIFY(sm.size() != 0);
@@ -371,13 +426,41 @@ void tst_QSharedMemory::attach()
}
}
+void tst_QSharedMemory::changeKeyType()
+{
+ QFETCH(QString, key);
+ QFETCH(bool, exists);
+ QFETCH(QSharedMemory::SharedMemoryError, error);
+
+ QNativeIpcKey nativeKey = platformSafeKey(key);
+ QNativeIpcKey::Type nextKeyType = IpcTestCommon::nextKeyType(nativeKey.type());
+ if (nextKeyType == nativeKey.type())
+ QSKIP("System only supports one key type");
+// qDebug() << "Changing from" << nativeKey.type() << "to" << nextKeyType;
+
+ QSharedMemory sm(nativeKey);
+ QCOMPARE(sm.attach(), exists);
+ QCOMPARE(sm.error(), error);
+
+ QNativeIpcKey nextKey =
+ QSharedMemory::platformSafeKey(mangleKey(key), nextKeyType);
+ sm.setNativeKey(nextKey);
+ QCOMPARE(sm.isAttached(), false);
+ QVERIFY(!sm.attach());
+
+ if (exists)
+ QCOMPARE(sm.error(), QSharedMemory::NotFound);
+ else
+ QCOMPARE(sm.error(), error);
+}
+
void tst_QSharedMemory::lock()
{
QSharedMemory shm;
QVERIFY(!shm.lock());
QCOMPARE(shm.error(), QSharedMemory::LockError);
- shm.setKey(rememberKey(QLatin1String("qsharedmemory")));
+ shm.setNativeKey(rememberKey(QLatin1String("qsharedmemory")));
QVERIFY(!shm.lock());
QCOMPARE(shm.error(), QSharedMemory::LockError);
@@ -395,18 +478,18 @@ void tst_QSharedMemory::lock()
but new shared memory are not allowed to attach after a remove.
*/
// HPUX doesn't allow for multiple attaches per process.
-#ifndef Q_OS_HPUX
void tst_QSharedMemory::removeWhileAttached()
{
rememberKey("one");
// attach 1
- QSharedMemory *smOne = new QSharedMemory(QLatin1String("one"));
+ QNativeIpcKey keyOne = platformSafeKey("one");
+ QSharedMemory *smOne = new QSharedMemory(keyOne);
QVERIFY(smOne->create(1024));
QVERIFY(smOne->isAttached());
// attach 2
- QSharedMemory *smTwo = new QSharedMemory(QLatin1String("one"));
+ QSharedMemory *smTwo = new QSharedMemory(platformSafeKey("one"));
QVERIFY(smTwo->attach());
QVERIFY(smTwo->isAttached());
@@ -414,17 +497,16 @@ void tst_QSharedMemory::removeWhileAttached()
delete smOne;
delete smTwo;
-#ifdef QT_POSIX_IPC
- // POSIX IPC doesn't guarantee that the shared memory is removed
- remove("one");
-#endif
+ if (keyOne.type() == QNativeIpcKey::Type::PosixRealtime) {
+ // POSIX IPC doesn't guarantee that the shared memory is removed
+ remove(keyOne);
+ }
// three shouldn't be able to attach
- QSharedMemory smThree(QLatin1String("one"));
+ QSharedMemory smThree(keyOne);
QVERIFY(!smThree.attach());
QCOMPARE(smThree.error(), QSharedMemory::NotFound);
}
-#endif
/*!
The memory should be set to 0 after created.
@@ -444,39 +526,74 @@ void tst_QSharedMemory::emptyMemory()
Verify that attach with ReadOnly is actually read only
by writing to data and causing a segfault.
*/
-// This test opens a crash dialog on Windows.
-#if !defined(Q_OS_WIN)
void tst_QSharedMemory::readOnly()
{
#if !QT_CONFIG(process)
QSKIP("No qprocess support", SkipAll);
#elif defined(Q_OS_MACOS)
QSKIP("QTBUG-59936: Times out on macOS", SkipAll);
+#elif defined(Q_OS_WIN)
+ QSKIP("This test opens a crash dialog on Windows.");
#elif defined(__SANITIZE_ADDRESS__) || __has_feature(address_sanitizer)
QSKIP("ASan prevents the crash this test is looking for.", SkipAll);
#else
- rememberKey("readonly_segfault");
+ QNativeIpcKey key = rememberKey("readonly_segfault");
+
// ### on windows disable the popup somehow
QProcess p;
- p.start(m_helperBinary, QStringList("readonly_segfault"));
p.setProcessChannelMode(QProcess::ForwardedChannels);
+ p.start(m_helperBinary, { "readonly_segfault", key.toString() });
p.waitForFinished();
QCOMPARE(p.error(), QProcess::Crashed);
#endif
}
-#endif
+
+void tst_QSharedMemory::attachBeforeCreate_data()
+{
+ QTest::addColumn<bool>("legacy");
+
+ QTest::addRow("legacy") << true;
+ QTest::addRow("non-legacy") << false;
+}
+
+void tst_QSharedMemory::attachBeforeCreate()
+{
+ QFETCH_GLOBAL(const QNativeIpcKey::Type, keyType);
+ QFETCH(const bool, legacy);
+ const QString keyStr(u"test"_s);
+ QNativeIpcKey key;
+ if (legacy) {
+ key = QSharedMemory::legacyNativeKey(keyStr, keyType);
+ // same as rememberKey(), but with legacy
+ if (!keys.contains(key)) {
+ keys.append(key);
+ remove(key);
+ }
+ } else {
+ key = rememberKey(keyStr);
+ }
+ const qsizetype sz = 100;
+ QSharedMemory mem(key);
+ QVERIFY(!mem.attach());
+ QVERIFY(mem.create(sz));
+}
/*!
Keep making shared memory until the kernel stops us.
*/
void tst_QSharedMemory::useTooMuchMemory()
{
+ if (QSysInfo::productType() == QLatin1String("Debian")
+ || QSysInfo::productType() == QLatin1String("debian"))
+ QSKIP("This test is unstable: QTBUG-119321");
+
#ifdef Q_OS_LINUX
bool success = true;
int count = 0;
while (success) {
QString key = QLatin1String("maxmemorytest_") + QString::number(count++);
- QSharedMemory *sm = new QSharedMemory(rememberKey(key));
+ QNativeIpcKey nativeKey = rememberKey(key);
+ QSharedMemory *sm = new QSharedMemory(nativeKey);
QVERIFY(sm);
jail.append(sm);
int size = 32768 * 1024;
@@ -490,7 +607,7 @@ void tst_QSharedMemory::useTooMuchMemory()
if (!success) {
QVERIFY(!sm->isAttached());
- QCOMPARE(sm->key(), key);
+ QCOMPARE(sm->nativeIpcKey(), nativeKey);
QCOMPARE(sm->size(), 0);
QVERIFY(!sm->data());
if (sm->error() != QSharedMemory::OutOfResources)
@@ -512,8 +629,6 @@ void tst_QSharedMemory::useTooMuchMemory()
Create one shared memory (government) and see how many other shared memories (wars) we can
attach before the system runs out of resources.
*/
-// HPUX doesn't allow for multiple attaches per process.
-#if !defined(Q_OS_HPUX)
void tst_QSharedMemory::attachTooMuch()
{
QSKIP("disabled");
@@ -521,12 +636,12 @@ void tst_QSharedMemory::attachTooMuch()
QSharedMemory government(rememberKey("government"));
QVERIFY(government.create(1024));
while (true) {
- QSharedMemory *war = new QSharedMemory(government.key());
+ QSharedMemory *war = new QSharedMemory(government.nativeIpcKey());
QVERIFY(war);
jail.append(war);
if (!war->attach()) {
QVERIFY(!war->isAttached());
- QCOMPARE(war->key(), government.key());
+ QCOMPARE(war->nativeIpcKey(), government.nativeIpcKey());
QCOMPARE(war->size(), 0);
QVERIFY(!war->data());
QCOMPARE(war->error(), QSharedMemory::OutOfResources);
@@ -538,10 +653,7 @@ void tst_QSharedMemory::attachTooMuch()
}
}
}
-#endif
-// HPUX doesn't allow for multiple attaches per process.
-#ifndef Q_OS_HPUX
void tst_QSharedMemory::simpleProducerConsumer_data()
{
QTest::addColumn<QSharedMemory::AccessMode>("mode");
@@ -562,8 +674,8 @@ void tst_QSharedMemory::simpleProducerConsumer()
QFETCH(QSharedMemory::AccessMode, mode);
rememberKey(QLatin1String("market"));
- QSharedMemory producer(QLatin1String("market"));
- QSharedMemory consumer(QLatin1String("market"));
+ QSharedMemory producer(platformSafeKey("market"));
+ QSharedMemory consumer(platformSafeKey("market"));
int size = 512;
QVERIFY(producer.create(size));
QVERIFY(consumer.attach(mode));
@@ -579,37 +691,37 @@ void tst_QSharedMemory::simpleProducerConsumer()
}
QVERIFY(consumer.detach());
}
-#endif
-// HPUX doesn't allow for multiple attaches per process.
-#ifndef Q_OS_HPUX
void tst_QSharedMemory::simpleDoubleProducerConsumer()
{
- rememberKey(QLatin1String("market"));
- QSharedMemory producer(QLatin1String("market"));
+ QNativeIpcKey nativeKey = rememberKey(QLatin1String("market"));
+ QSharedMemory producer(nativeKey);
int size = 512;
QVERIFY(producer.create(size));
QVERIFY(producer.detach());
-#ifdef QT_POSIX_IPC
- // POSIX IPC doesn't guarantee that the shared memory is removed
- remove("market");
-#endif
+
+ if (nativeKey.type() == QNativeIpcKey::Type::PosixRealtime) {
+ // POSIX IPC doesn't guarantee that the shared memory is removed
+ remove(nativeKey);
+ }
+
QVERIFY(producer.create(size));
{
- QSharedMemory consumer(QLatin1String("market"));
+ QSharedMemory consumer(nativeKey);
QVERIFY(consumer.attach());
}
}
-#endif
class Consumer : public QThread
{
-
public:
+ QNativeIpcKey nativeKey;
+ Consumer(const QNativeIpcKey &nativeKey) : nativeKey(nativeKey) {}
+
void run() override
{
- QSharedMemory consumer(QLatin1String("market"));
+ QSharedMemory consumer(nativeKey);
while (!consumer.attach()) {
if (consumer.error() != QSharedMemory::NotFound)
qDebug() << "consumer: failed to connect" << consumer.error() << consumer.errorString();
@@ -640,9 +752,8 @@ public:
class Producer : public QThread
{
-
public:
- Producer() : producer(QLatin1String("market"))
+ Producer(const QNativeIpcKey &nativeKey) : producer(nativeKey)
{
int size = 1024;
if (!producer.create(size)) {
@@ -707,20 +818,16 @@ void tst_QSharedMemory::simpleThreadedProducerConsumer()
{
QFETCH(bool, producerIsThread);
QFETCH(int, threads);
- rememberKey(QLatin1String("market"));
-
-#if defined Q_OS_HPUX && defined __ia64
- QSKIP("This test locks up on gravlaks.troll.no");
-#endif
+ QNativeIpcKey nativeKey = rememberKey(QLatin1String("market"));
- Producer p;
+ Producer p(nativeKey);
QVERIFY(p.producer.isAttached());
if (producerIsThread)
p.start();
QList<Consumer*> consumers;
for (int i = 0; i < threads; ++i) {
- consumers.append(new Consumer());
+ consumers.append(new Consumer(nativeKey));
consumers.last()->start();
}
@@ -759,17 +866,17 @@ void tst_QSharedMemory::simpleProcessProducerConsumer()
QSKIP("This test is unstable: QTBUG-25655");
- rememberKey("market");
+ QNativeIpcKey nativeKey = rememberKey("market");
QProcess producer;
- producer.start(m_helperBinary, QStringList("producer"));
+ producer.start(m_helperBinary, { "producer", nativeKey.toString() });
QVERIFY2(producer.waitForStarted(), "Could not start helper binary");
QVERIFY2(producer.waitForReadyRead(), "Helper process failed to create shared memory segment: " +
producer.readAllStandardError());
QList<QProcess*> consumers;
unsigned int failedProcesses = 0;
- const QStringList consumerArguments = QStringList("consumer");
+ QStringList consumerArguments = { "consumer", nativeKey.toString() };
for (int i = 0; i < processes; ++i) {
QProcess *p = new QProcess;
p->setProcessChannelMode(QProcess::ForwardedChannels);
@@ -820,17 +927,40 @@ void tst_QSharedMemory::uniqueKey()
QFETCH(QString, key1);
QFETCH(QString, key2);
- QSharedMemory sm1(key1);
- QSharedMemory sm2(key2);
+ QSharedMemory sm1(platformSafeKey(key1));
+ QSharedMemory sm2(platformSafeKey(key2));
bool setEqual = (key1 == key2);
- bool keyEqual = (sm1.key() == sm2.key());
+ bool keyEqual = (sm1.nativeIpcKey() == sm2.nativeIpcKey());
bool nativeEqual = (sm1.nativeKey() == sm2.nativeKey());
QCOMPARE(keyEqual, setEqual);
QCOMPARE(nativeEqual, setEqual);
}
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+void tst_QSharedMemory::createWithSameKey()
+{
+ const QString key = u"legacy_key"_s;
+ const qsizetype sz = 100;
+ QSharedMemory mem1(key);
+ QVERIFY(mem1.create(sz));
+
+ {
+ QSharedMemory mem2(key);
+ QVERIFY(!mem2.create(sz));
+ QVERIFY(mem2.attach());
+ }
+ // and the second create() should fail as well, QTBUG-111855
+ {
+ QSharedMemory mem2(key);
+ QVERIFY(!mem2.create(sz));
+ QVERIFY(mem2.attach());
+ }
+}
+QT_WARNING_POP
+
QTEST_MAIN(tst_QSharedMemory)
#include "tst_qsharedmemory.moc"
diff --git a/tests/auto/corelib/kernel/qsystemsemaphore/CMakeLists.txt b/tests/auto/corelib/ipc/qsystemsemaphore/CMakeLists.txt
index d4f1d69593..a0f29ad18a 100644
--- a/tests/auto/corelib/kernel/qsystemsemaphore/CMakeLists.txt
+++ b/tests/auto/corelib/ipc/qsystemsemaphore/CMakeLists.txt
@@ -1,7 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qsystemsemaphore Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsystemsemaphore LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsystemsemaphore
SOURCES
tst_qsystemsemaphore.cpp
diff --git a/tests/auto/corelib/kernel/qsystemsemaphore/acquirerelease/CMakeLists.txt b/tests/auto/corelib/ipc/qsystemsemaphore/acquirerelease/CMakeLists.txt
index f34076350e..a0a7d84b17 100644
--- a/tests/auto/corelib/kernel/qsystemsemaphore/acquirerelease/CMakeLists.txt
+++ b/tests/auto/corelib/ipc/qsystemsemaphore/acquirerelease/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from acquirerelease.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## acquirerelease_helper Binary:
@@ -7,6 +8,6 @@
qt_internal_add_test_helper(acquirerelease_helper
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/auto/corelib/ipc/qsystemsemaphore/acquirerelease/main.cpp b/tests/auto/corelib/ipc/qsystemsemaphore/acquirerelease/main.cpp
new file mode 100644
index 0000000000..3cae7ad466
--- /dev/null
+++ b/tests/auto/corelib/ipc/qsystemsemaphore/acquirerelease/main.cpp
@@ -0,0 +1,80 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+#include <QDebug>
+#include <QStringList>
+#include <QSystemSemaphore>
+
+int acquire(const QNativeIpcKey &key, int count = 1)
+{
+ QSystemSemaphore sem(key);
+
+ for (int i = 0; i < count; ++i) {
+ if (!sem.acquire()) {
+ qWarning() << "Could not acquire" << sem.key();
+ return EXIT_FAILURE;
+ }
+ }
+ qDebug("done aquiring");
+ return EXIT_SUCCESS;
+}
+
+int release(const QNativeIpcKey &key)
+{
+ QSystemSemaphore sem(key);
+ if (!sem.release()) {
+ qWarning() << "Could not release" << sem.key();
+ return EXIT_FAILURE;
+ }
+ qDebug("done releasing");
+ return EXIT_SUCCESS;
+}
+
+int acquirerelease(const QNativeIpcKey &key)
+{
+ QSystemSemaphore sem(key);
+ if (!sem.acquire()) {
+ qWarning() << "Could not acquire" << sem.key();
+ return EXIT_FAILURE;
+ }
+ if (!sem.release()) {
+ qWarning() << "Could not release" << sem.key();
+ return EXIT_FAILURE;
+ }
+ return EXIT_SUCCESS;
+}
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+
+ QStringList arguments = app.arguments();
+ // binary name is not used here
+ arguments.takeFirst();
+ if (arguments.size() < 2) {
+ fprintf(stderr,
+ "Usage: %s <acquire|release|acquirerelease> <key> [other args...]\n",
+ argv[0]);
+ return EXIT_FAILURE;
+ }
+
+ QString function = arguments.takeFirst();
+ QNativeIpcKey key = QNativeIpcKey::fromString(arguments.takeFirst());
+ if (function == QLatin1String("acquire")) {
+ int count = 1;
+ bool ok = true;
+ if (arguments.size())
+ count = arguments.takeFirst().toInt(&ok);
+ if (!ok)
+ count = 1;
+ return acquire(key, count);
+ } else if (function == QLatin1String("release")) {
+ return release(key);
+ } else if (function == QLatin1String("acquirerelease")) {
+ return acquirerelease(key);
+ } else {
+ qWarning() << "Unknown function" << function;
+ }
+ return EXIT_SUCCESS;
+}
diff --git a/tests/auto/corelib/kernel/qsystemsemaphore/tst_qsystemsemaphore.cpp b/tests/auto/corelib/ipc/qsystemsemaphore/tst_qsystemsemaphore.cpp
index b0f517d10f..2c053b91f6 100644
--- a/tests/auto/corelib/kernel/qsystemsemaphore/tst_qsystemsemaphore.cpp
+++ b/tests/auto/corelib/ipc/qsystemsemaphore/tst_qsystemsemaphore.cpp
@@ -1,30 +1,6 @@
-/****************************************************************************
-**
-** 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.
+// Copyright (C) 2022 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#if QT_CONFIG(process)
@@ -35,9 +11,12 @@
#include <QtCore/QSystemSemaphore>
#include <QtCore/QTemporaryDir>
-#define EXISTING_SHARE "existing"
+#include "../ipctestcommon.h"
+
#define HELPERWAITTIME 10000
+using namespace Qt::StringLiterals;
+
class tst_QSystemSemaphore : public QObject
{
Q_OBJECT
@@ -45,50 +24,75 @@ class tst_QSystemSemaphore : public QObject
public:
tst_QSystemSemaphore();
+ QString mangleKey(QStringView key)
+ {
+ if (key.isEmpty())
+ return key.toString();
+ return u"tstsyssem_%1-%2_%3"_s.arg(QCoreApplication::applicationPid())
+ .arg(seq).arg(key);
+ }
+
+ QNativeIpcKey platformSafeKey(const QString &key)
+ {
+ QFETCH_GLOBAL(QNativeIpcKey::Type, keyType);
+ return QSystemSemaphore::platformSafeKey(mangleKey(key), keyType);
+ }
+
public Q_SLOTS:
+ void initTestCase();
void init();
void cleanup();
private slots:
- void key_data();
- void key();
+ void nativeKey_data();
+ void nativeKey();
+ void legacyKey_data() { nativeKey_data(); }
+ void legacyKey();
+ void changeKeyType();
void basicacquire();
void complexacquire();
void release();
+ void twoSemaphores();
void basicProcesses();
void processes_data();
void processes();
-#if !defined(Q_OS_WIN) && !defined(QT_POSIX_IPC)
void undo();
-#endif
void initialValue();
private:
+ int seq = 0;
QSystemSemaphore *existingLock;
const QString m_helperBinary;
};
tst_QSystemSemaphore::tst_QSystemSemaphore()
- : m_helperBinary("acquirerelease_helper")
+ : m_helperBinary("./acquirerelease_helper")
+{
+}
+
+void tst_QSystemSemaphore::initTestCase()
{
+ IpcTestCommon::addGlobalTestRows<QSystemSemaphore>();
}
void tst_QSystemSemaphore::init()
{
- existingLock = new QSystemSemaphore(EXISTING_SHARE, 1, QSystemSemaphore::Create);
+ QNativeIpcKey key = platformSafeKey("existing");
+ existingLock = new QSystemSemaphore(key, 1, QSystemSemaphore::Create);
}
void tst_QSystemSemaphore::cleanup()
{
delete existingLock;
+ ++seq;
}
-void tst_QSystemSemaphore::key_data()
+void tst_QSystemSemaphore::nativeKey_data()
{
QTest::addColumn<QString>("constructorKey");
QTest::addColumn<QString>("setKey");
@@ -101,7 +105,35 @@ void tst_QSystemSemaphore::key_data()
/*!
Basic key testing
*/
-void tst_QSystemSemaphore::key()
+void tst_QSystemSemaphore::nativeKey()
+{
+ QFETCH(QString, constructorKey);
+ QFETCH(QString, setKey);
+ QNativeIpcKey constructorIpcKey = platformSafeKey(constructorKey);
+ QNativeIpcKey setIpcKey = platformSafeKey(setKey);
+
+ QSystemSemaphore sem(constructorIpcKey);
+ QCOMPARE(sem.nativeIpcKey(), constructorIpcKey);
+ QCOMPARE(sem.error(), QSystemSemaphore::NoError);
+ QCOMPARE(sem.errorString(), QString());
+
+ sem.setNativeKey(setIpcKey);
+ QCOMPARE(sem.nativeIpcKey(), setIpcKey);
+ QCOMPARE(sem.error(), QSystemSemaphore::NoError);
+ QCOMPARE(sem.errorString(), QString());
+
+ // change the key type
+ QNativeIpcKey::Type nextKeyType = IpcTestCommon::nextKeyType(setIpcKey.type());
+ if (nextKeyType != setIpcKey.type()) {
+ QNativeIpcKey setIpcKey2 = QSystemSemaphore::platformSafeKey(setKey, nextKeyType);
+ sem.setNativeKey(setIpcKey2);
+ QCOMPARE(sem.nativeIpcKey(), setIpcKey2);
+ }
+}
+
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+void tst_QSystemSemaphore::legacyKey()
{
QFETCH(QString, constructorKey);
QFETCH(QString, setKey);
@@ -116,10 +148,27 @@ void tst_QSystemSemaphore::key()
QCOMPARE(sem.error(), QSystemSemaphore::NoError);
QCOMPARE(sem.errorString(), QString());
}
+QT_WARNING_POP
+
+void tst_QSystemSemaphore::changeKeyType()
+{
+ QString keyName = "changeKeyType";
+ QNativeIpcKey key = platformSafeKey(keyName);
+ QNativeIpcKey otherKey =
+ QSystemSemaphore::platformSafeKey(mangleKey(keyName), IpcTestCommon::nextKeyType(key.type()));
+ if (key == otherKey)
+ QSKIP("System only supports one key type");
+
+ QSystemSemaphore sem1(key, 1, QSystemSemaphore::Create);
+ QSystemSemaphore sem2(otherKey);
+ sem1.setNativeKey(otherKey);
+ sem2.setNativeKey(key);
+}
void tst_QSystemSemaphore::basicacquire()
{
- QSystemSemaphore sem("QSystemSemaphore_basicacquire", 1, QSystemSemaphore::Create);
+ QNativeIpcKey key = platformSafeKey("basicacquire");
+ QSystemSemaphore sem(key, 1, QSystemSemaphore::Create);
QVERIFY(sem.acquire());
QCOMPARE(sem.error(), QSystemSemaphore::NoError);
QVERIFY(sem.release());
@@ -129,7 +178,8 @@ void tst_QSystemSemaphore::basicacquire()
void tst_QSystemSemaphore::complexacquire()
{
- QSystemSemaphore sem("QSystemSemaphore_complexacquire", 2, QSystemSemaphore::Create);
+ QNativeIpcKey key = platformSafeKey("complexacquire");
+ QSystemSemaphore sem(key, 2, QSystemSemaphore::Create);
QVERIFY(sem.acquire());
QCOMPARE(sem.error(), QSystemSemaphore::NoError);
QVERIFY(sem.release());
@@ -151,7 +201,8 @@ void tst_QSystemSemaphore::complexacquire()
void tst_QSystemSemaphore::release()
{
- QSystemSemaphore sem("QSystemSemaphore_release", 0, QSystemSemaphore::Create);
+ QNativeIpcKey key = platformSafeKey("release");
+ QSystemSemaphore sem(key, 0, QSystemSemaphore::Create);
QVERIFY(sem.release());
QCOMPARE(sem.error(), QSystemSemaphore::NoError);
QVERIFY(sem.release());
@@ -167,12 +218,24 @@ void tst_QSystemSemaphore::release()
QCOMPARE(sem.errorString(), QString());
}
+void tst_QSystemSemaphore::twoSemaphores()
+{
+ QNativeIpcKey key = platformSafeKey("twoSemaphores");
+ QSystemSemaphore sem1(key, 1, QSystemSemaphore::Create);
+ QSystemSemaphore sem2(key);
+ QVERIFY(sem1.acquire());
+ QVERIFY(sem2.release());
+ QVERIFY(sem1.acquire());
+ QVERIFY(sem2.release());
+}
+
void tst_QSystemSemaphore::basicProcesses()
{
#if !QT_CONFIG(process)
QSKIP("No qprocess support", SkipAll);
#else
- QSystemSemaphore sem("store", 0, QSystemSemaphore::Create);
+ QNativeIpcKey key = platformSafeKey("store");
+ QSystemSemaphore sem(key, 0, QSystemSemaphore::Create);
QProcess acquire;
acquire.setProcessChannelMode(QProcess::ForwardedChannels);
@@ -180,12 +243,12 @@ void tst_QSystemSemaphore::basicProcesses()
QProcess release;
release.setProcessChannelMode(QProcess::ForwardedChannels);
- acquire.start(m_helperBinary, QStringList("acquire"));
+ acquire.start(m_helperBinary, { "acquire", key.toString() });
QVERIFY2(acquire.waitForStarted(), "Could not start helper binary");
acquire.waitForFinished(HELPERWAITTIME);
QCOMPARE(acquire.state(), QProcess::Running);
acquire.kill();
- release.start(m_helperBinary, QStringList("release"));
+ release.start(m_helperBinary, { "release", key.toString() });
QVERIFY2(release.waitForStarted(), "Could not start helper binary");
acquire.waitForFinished(HELPERWAITTIME);
release.waitForFinished(HELPERWAITTIME);
@@ -197,9 +260,9 @@ void tst_QSystemSemaphore::processes_data()
{
QTest::addColumn<int>("processes");
for (int i = 0; i < 5; ++i) {
- QTest::newRow("1 process") << 1;
- QTest::newRow("3 process") << 3;
- QTest::newRow("10 process") << 10;
+ QTest::addRow("1 process (%d)", i) << 1;
+ QTest::addRow("3 process (%d)", i) << 3;
+ QTest::addRow("10 process (%d)", i) << 10;
}
}
@@ -208,17 +271,18 @@ void tst_QSystemSemaphore::processes()
#if !QT_CONFIG(process)
QSKIP("No qprocess support", SkipAll);
#else
- QSystemSemaphore sem("store", 1, QSystemSemaphore::Create);
+ QNativeIpcKey key = platformSafeKey("store");
+ QSystemSemaphore sem(key, 1, QSystemSemaphore::Create);
QFETCH(int, processes);
QList<QString> scripts(processes, "acquirerelease");
QList<QProcess*> consumers;
- for (int i = 0; i < scripts.count(); ++i) {
+ for (int i = 0; i < scripts.size(); ++i) {
QProcess *p = new QProcess;
p->setProcessChannelMode(QProcess::ForwardedChannels);
consumers.append(p);
- p->start(m_helperBinary, QStringList(scripts.at(i)));
+ p->start(m_helperBinary, { scripts.at(i), key.toString() });
}
while (!consumers.isEmpty()) {
@@ -230,16 +294,24 @@ void tst_QSystemSemaphore::processes()
#endif
}
-// This test only checks a system v unix behavior.
-#if !defined(Q_OS_WIN) && !defined(QT_POSIX_IPC)
void tst_QSystemSemaphore::undo()
{
#if !QT_CONFIG(process)
QSKIP("No qprocess support", SkipAll);
#else
- QSystemSemaphore sem("store", 1, QSystemSemaphore::Create);
+ QNativeIpcKey key = platformSafeKey("store");
+ switch (key.type()) {
+ case QNativeIpcKey::Type::PosixRealtime:
+ case QNativeIpcKey::Type::Windows:
+ QSKIP("This test only checks a System V behavior.");
+
+ case QNativeIpcKey::Type::SystemV:
+ break;
+ }
- QStringList acquireArguments = QStringList("acquire");
+ QSystemSemaphore sem(key, 1, QSystemSemaphore::Create);
+
+ QStringList acquireArguments = { "acquire", key.toString() };
QProcess acquire;
acquire.setProcessChannelMode(QProcess::ForwardedChannels);
acquire.start(m_helperBinary, acquireArguments);
@@ -255,17 +327,17 @@ void tst_QSystemSemaphore::undo()
QVERIFY(acquire.state()== QProcess::NotRunning);
#endif
}
-#endif
void tst_QSystemSemaphore::initialValue()
{
#if !QT_CONFIG(process)
QSKIP("No qprocess support", SkipAll);
#else
- QSystemSemaphore sem("store", 1, QSystemSemaphore::Create);
+ QNativeIpcKey key = platformSafeKey("store");
+ QSystemSemaphore sem(key, 1, QSystemSemaphore::Create);
- QStringList acquireArguments = QStringList("acquire");
- QStringList releaseArguments = QStringList("release");
+ QStringList acquireArguments = { "acquire", key.toString() };
+ QStringList releaseArguments = { "release", key.toString() };
QProcess acquire;
acquire.setProcessChannelMode(QProcess::ForwardedChannels);
diff --git a/tests/auto/corelib/itemmodels/CMakeLists.txt b/tests/auto/corelib/itemmodels/CMakeLists.txt
index fcea1c843d..90211669d9 100644
--- a/tests/auto/corelib/itemmodels/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from itemmodels.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qstringlistmodel)
if(TARGET Qt::Gui)
diff --git a/tests/auto/corelib/itemmodels/qabstractitemmodel/CMakeLists.txt b/tests/auto/corelib/itemmodels/qabstractitemmodel/CMakeLists.txt
index 2f91f7d41a..e5c7c08fc8 100644
--- a/tests/auto/corelib/itemmodels/qabstractitemmodel/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/qabstractitemmodel/CMakeLists.txt
@@ -1,17 +1,23 @@
-# Generated from qabstractitemmodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractitemmodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractitemmodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractitemmodel
SOURCES
../../../other/qabstractitemmodelutils/dynamictreemodel.cpp ../../../other/qabstractitemmodelutils/dynamictreemodel.h
tst_qabstractitemmodel.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
INCLUDE_DIRECTORIES
../../../other/qabstractitemmodelutils
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp b/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp
index 5719d9e046..36eb9320a4 100644
--- a/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp
+++ b/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
+
#include <QtCore/QCoreApplication>
#include <QtCore/QSortFilterProxyModel>
#include <QtCore/QStringListModel>
@@ -81,6 +58,7 @@ private slots:
void reset();
void complexChangesWithPersistent();
+ void modelIndexComparisons();
void testMoveSameParentUp_data();
void testMoveSameParentUp();
@@ -181,8 +159,8 @@ QtTestModel::QtTestModel(const QList<QList<QString> > tbl, QObject *parent)
: QAbstractItemModel(parent), wrongIndex(false)
{
table = tbl;
- rCount = tbl.count();
- cCount = tbl.at(0).count();
+ rCount = tbl.size();
+ cCount = tbl.at(0).size();
}
QModelIndex QtTestModel::index(int row, int column, const QModelIndex &parent) const
@@ -216,7 +194,7 @@ bool QtTestModel::insertRows(int row, int count, const QModelIndex &parent)
QAbstractItemModel::beginInsertRows(parent, row, row + count - 1);
int cc = columnCount(parent);
table.insert(row, count, QList<QString>(cc));
- rCount = table.count();
+ rCount = table.size();
QAbstractItemModel::endInsertRows();
return true;
}
@@ -227,7 +205,7 @@ bool QtTestModel::insertColumns(int column, int count, const QModelIndex &parent
int rc = rowCount(parent);
for (int i = 0; i < rc; ++i)
table[i].insert(column, 1, "");
- cCount = table.at(0).count();
+ cCount = table.at(0).size();
QAbstractItemModel::endInsertColumns();
return true;
}
@@ -243,7 +221,7 @@ bool QtTestModel::removeRows( int row, int count, const QModelIndex & parent)
for (int r = row+count-1; r >= row; --r)
table.remove(r);
- rCount = table.count();
+ rCount = table.size();
QAbstractItemModel::endRemoveRows();
return true;
@@ -257,7 +235,7 @@ bool QtTestModel::removeColumns(int column, int count, const QModelIndex & paren
for (int r = 0; r < rCount; ++r)
table[r].remove(c);
- cCount = table.at(0).count();
+ cCount = table.at(0).size();
QAbstractItemModel::endRemoveColumns();
return true;
@@ -285,7 +263,7 @@ bool QtTestModel::moveRows(const QModelIndex &sourceParent, int src, int cnt,
}
}
- rCount = table.count();
+ rCount = table.size();
QAbstractItemModel::endMoveRows();
return true;
@@ -315,7 +293,7 @@ bool QtTestModel::moveColumns(const QModelIndex &sourceParent, int src, int cnt,
}
}
- cCount = table.at(0).count();
+ cCount = table.at(0).size();
QAbstractItemModel::endMoveColumns();
return true;
@@ -439,11 +417,11 @@ void tst_QAbstractItemModel::itemFlags()
void tst_QAbstractItemModel::match()
{
- QtTestModel model(4, 1);
+ QtTestModel model(5, 1);
QModelIndex start = model.index(0, 0, QModelIndex());
QVERIFY(start.isValid());
QModelIndexList res = model.match(start, Qt::DisplayRole, QVariant("1"), 3);
- QCOMPARE(res.count(), 1);
+ QCOMPARE(res.size(), 1);
QModelIndex idx = model.index(1, 0, QModelIndex());
bool areEqual = (idx == res.first());
QVERIFY(areEqual);
@@ -452,44 +430,45 @@ void tst_QAbstractItemModel::match()
model.setData(model.index(1, 0, QModelIndex()), "cat", Qt::DisplayRole);
model.setData(model.index(2, 0, QModelIndex()), "dog", Qt::DisplayRole);
model.setData(model.index(3, 0, QModelIndex()), "boar", Qt::DisplayRole);
+ model.setData(model.index(4, 0, QModelIndex()), "bo/a/r", Qt::DisplayRole); // QTBUG-104585
res = model.match(start, Qt::DisplayRole, QVariant("dog"), -1, Qt::MatchExactly);
- QCOMPARE(res.count(), 1);
+ QCOMPARE(res.size(), 1);
res = model.match(start, Qt::DisplayRole, QVariant("a"), -1, Qt::MatchContains);
- QCOMPARE(res.count(), 3);
+ QCOMPARE(res.size(), 4);
res = model.match(start, Qt::DisplayRole, QVariant("b"), -1, Qt::MatchStartsWith);
- QCOMPARE(res.count(), 2);
+ QCOMPARE(res.size(), 3);
res = model.match(start, Qt::DisplayRole, QVariant("t"), -1, Qt::MatchEndsWith);
- QCOMPARE(res.count(), 2);
+ QCOMPARE(res.size(), 2);
res = model.match(start, Qt::DisplayRole, QVariant("*a*"), -1, Qt::MatchWildcard);
- QCOMPARE(res.count(), 3);
+ QCOMPARE(res.size(), 4);
res = model.match(start, Qt::DisplayRole, QVariant(".*O.*"), -1, Qt::MatchRegularExpression);
- QCOMPARE(res.count(), 2);
+ QCOMPARE(res.size(), 3);
res = model.match(start, Qt::DisplayRole, QVariant(".*O.*"), -1, Qt::MatchRegularExpression | Qt::MatchCaseSensitive);
- QCOMPARE(res.count(), 0);
+ QCOMPARE(res.size(), 0);
res = model.match(start, Qt::DisplayRole, QVariant("BOAR"), -1, Qt::MatchFixedString);
- QCOMPARE(res.count(), 1);
+ QCOMPARE(res.size(), 1);
res = model.match(start, Qt::DisplayRole, QVariant("bat"), -1,
Qt::MatchFixedString | Qt::MatchCaseSensitive);
- QCOMPARE(res.count(), 1);
+ QCOMPARE(res.size(), 1);
res = model.match(start, Qt::DisplayRole, QVariant(".*O.*"), -1,
Qt::MatchRegularExpression);
- QCOMPARE(res.count(), 2);
+ QCOMPARE(res.size(), 3);
res = model.match(start, Qt::DisplayRole, QVariant(".*O.*"), -1,
Qt::MatchRegularExpression | Qt::MatchCaseSensitive);
- QCOMPARE(res.count(), 0);
+ QCOMPARE(res.size(), 0);
res = model.match(start, Qt::DisplayRole, QVariant(QRegularExpression(".*O.*")),
-1, Qt::MatchRegularExpression);
- QCOMPARE(res.count(), 0);
+ QCOMPARE(res.size(), 0);
res = model.match(start,
Qt::DisplayRole,
QVariant(QRegularExpression(".*O.*",
QRegularExpression::CaseInsensitiveOption)),
-1,
Qt::MatchRegularExpression);
- QCOMPARE(res.count(), 2);
+ QCOMPARE(res.size(), 3);
// Ensure that the case sensitivity is properly ignored when passing a
// QRegularExpression object.
@@ -499,7 +478,7 @@ void tst_QAbstractItemModel::match()
QRegularExpression::CaseInsensitiveOption)),
-1,
Qt::MatchRegularExpression | Qt::MatchCaseSensitive);
- QCOMPARE(res.count(), 2);
+ QCOMPARE(res.size(), 3);
}
typedef QPair<int, int> Position;
@@ -782,7 +761,7 @@ void tst_QAbstractItemModel::dropMimeData()
// get the mimeData from the "selected" indexes
QModelIndexList selectedIndexes;
- for (int i = 0; i < selection.count(); ++i)
+ for (int i = 0; i < selection.size(); ++i)
selectedIndexes << src.index(selection.at(i).first, selection.at(i).second, QModelIndex());
QMimeData *md = src.mimeData(selectedIndexes);
// do the drop
@@ -853,8 +832,8 @@ void tst_QAbstractItemModel::removeRows()
QVERIFY(rowsRemovedSpy.isValid());
QCOMPARE(model.removeRows(6, 4), true);
- QCOMPARE(rowsAboutToBeRemovedSpy.count(), 1);
- QCOMPARE(rowsRemovedSpy.count(), 1);
+ QCOMPARE(rowsAboutToBeRemovedSpy.size(), 1);
+ QCOMPARE(rowsRemovedSpy.size(), 1);
}
void tst_QAbstractItemModel::removeColumns()
@@ -868,8 +847,8 @@ void tst_QAbstractItemModel::removeColumns()
QVERIFY(columnsRemovedSpy.isValid());
QCOMPARE(model.removeColumns(6, 4), true);
- QCOMPARE(columnsAboutToBeRemovedSpy.count(), 1);
- QCOMPARE(columnsRemovedSpy.count(), 1);
+ QCOMPARE(columnsAboutToBeRemovedSpy.size(), 1);
+ QCOMPARE(columnsRemovedSpy.size(), 1);
}
void tst_QAbstractItemModel::insertRows()
@@ -883,8 +862,8 @@ void tst_QAbstractItemModel::insertRows()
QVERIFY(rowsInsertedSpy.isValid());
QCOMPARE(model.insertRows(6, 4), true);
- QCOMPARE(rowsAboutToBeInsertedSpy.count(), 1);
- QCOMPARE(rowsInsertedSpy.count(), 1);
+ QCOMPARE(rowsAboutToBeInsertedSpy.size(), 1);
+ QCOMPARE(rowsInsertedSpy.size(), 1);
}
void tst_QAbstractItemModel::insertColumns()
@@ -898,8 +877,8 @@ void tst_QAbstractItemModel::insertColumns()
QVERIFY(columnsInsertedSpy.isValid());
QCOMPARE(model.insertColumns(6, 4), true);
- QCOMPARE(columnsAboutToBeInsertedSpy.count(), 1);
- QCOMPARE(columnsInsertedSpy.count(), 1);
+ QCOMPARE(columnsAboutToBeInsertedSpy.size(), 1);
+ QCOMPARE(columnsInsertedSpy.size(), 1);
}
void tst_QAbstractItemModel::moveRows()
@@ -913,8 +892,8 @@ void tst_QAbstractItemModel::moveRows()
QVERIFY(rowsMovedSpy.isValid());
QCOMPARE(model.moveRows(QModelIndex(), 6, 4, QModelIndex(), 1), true);
- QCOMPARE(rowsAboutToBeMovedSpy.count(), 1);
- QCOMPARE(rowsMovedSpy.count(), 1);
+ QCOMPARE(rowsAboutToBeMovedSpy.size(), 1);
+ QCOMPARE(rowsMovedSpy.size(), 1);
}
void tst_QAbstractItemModel::moveColumns()
@@ -928,12 +907,12 @@ void tst_QAbstractItemModel::moveColumns()
QVERIFY(columnsMovedSpy.isValid());
QCOMPARE(model.moveColumns(QModelIndex(), 6, 4, QModelIndex(), 1), true);
- QCOMPARE(columnsAboutToBeMovedSpy.count(), 1);
- QCOMPARE(columnsMovedSpy.count(), 1);
+ QCOMPARE(columnsAboutToBeMovedSpy.size(), 1);
+ QCOMPARE(columnsMovedSpy.size(), 1);
QCOMPARE(model.moveColumn(QModelIndex(), 4, QModelIndex(), 1), true);
- QCOMPARE(columnsAboutToBeMovedSpy.count(), 2);
- QCOMPARE(columnsMovedSpy.count(), 2);
+ QCOMPARE(columnsAboutToBeMovedSpy.size(), 2);
+ QCOMPARE(columnsMovedSpy.size(), 2);
}
void tst_QAbstractItemModel::reset()
@@ -943,7 +922,7 @@ void tst_QAbstractItemModel::reset()
QSignalSpy resetSpy(&model, &QtTestModel::modelReset);
QVERIFY(resetSpy.isValid());
model.reset();
- QCOMPARE(resetSpy.count(), 1);
+ QCOMPARE(resetSpy.size(), 1);
}
void tst_QAbstractItemModel::complexChangesWithPersistent()
@@ -1008,6 +987,27 @@ void tst_QAbstractItemModel::complexChangesWithPersistent()
QVERIFY(e[i] == model.index(2, i-2 , QModelIndex()));
}
+void tst_QAbstractItemModel::modelIndexComparisons()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QModelIndex>();
+ QTestPrivate::testEqualityOperatorsCompile<QPersistentModelIndex>();
+ QTestPrivate::testEqualityOperatorsCompile<QPersistentModelIndex, QModelIndex>();
+
+ QtTestModel model(3, 3);
+
+ QModelIndex mi11 = model.index(1, 1);
+ QModelIndex mi22 = model.index(2, 2);
+ QPersistentModelIndex pmi11 = mi11;
+ QPersistentModelIndex pmi22 = mi22;
+
+ QT_TEST_EQUALITY_OPS(mi11, mi11, true);
+ QT_TEST_EQUALITY_OPS(mi11, mi22, false);
+ QT_TEST_EQUALITY_OPS(pmi11, pmi11, true);
+ QT_TEST_EQUALITY_OPS(pmi11, pmi22, false);
+ QT_TEST_EQUALITY_OPS(pmi11, mi11, true);
+ QT_TEST_EQUALITY_OPS(pmi11, mi22, false);
+}
+
void tst_QAbstractItemModel::testMoveSameParentDown_data()
{
QTest::addColumn<int>("startRow");
@@ -1872,7 +1872,7 @@ void ListenerObject::slotAboutToBeReset()
void ListenerObject::slotReset()
{
- for (const auto &idx : qAsConst(m_persistentIndexes)) {
+ for (const auto &idx : std::as_const(m_persistentIndexes)) {
QVERIFY(!idx.isValid());
}
}
diff --git a/tests/auto/corelib/itemmodels/qabstractproxymodel/CMakeLists.txt b/tests/auto/corelib/itemmodels/qabstractproxymodel/CMakeLists.txt
index 6c782326cb..8799814324 100644
--- a/tests/auto/corelib/itemmodels/qabstractproxymodel/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/qabstractproxymodel/CMakeLists.txt
@@ -1,14 +1,19 @@
-# Generated from qabstractproxymodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractproxymodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractproxymodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractproxymodel
SOURCES
tst_qabstractproxymodel.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
LIBRARIES
Qt::Gui
Qt::TestPrivate
diff --git a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp
index dced357d61..62512889fd 100644
--- a/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qabstractproxymodel/tst_qabstractproxymodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtTest/private/qpropertytesthelper_p.h>
@@ -44,6 +19,7 @@ private slots:
void flags();
void headerData_data();
void headerData();
+ void headerDataInBounds();
void itemData_data();
void itemData();
void mapFromSource_data();
@@ -174,6 +150,133 @@ void tst_QAbstractProxyModel::headerData()
QCOMPARE(model.headerData(section, orientation, role), headerData);
}
+class SimpleTableReverseColumnsProxy : public QAbstractProxyModel
+{
+public:
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override
+ {
+ if (parent.isValid())
+ return {};
+
+ if (row < 0 || row >= rowCount() || column < 0 || column >= columnCount())
+ qFatal("error"); // cannot QFAIL here
+
+ return createIndex(row, column);
+ }
+
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override
+ {
+ if (parent.isValid())
+ return 0;
+ return sourceModel()->rowCount();
+ }
+
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override
+ {
+ if (parent.isValid())
+ return 0;
+ return sourceModel()->columnCount();
+ }
+
+ QModelIndex parent(const QModelIndex &) const override
+ {
+ return QModelIndex();
+ }
+
+ QModelIndex mapToSource(const QModelIndex &idx) const override
+ {
+ if (!idx.isValid())
+ return QModelIndex();
+ return sourceModel()->index(idx.row(), columnCount() - 1 - idx.column());
+ }
+
+ QModelIndex mapFromSource(const QModelIndex &idx) const override
+ {
+ if (idx.parent().isValid())
+ return QModelIndex();
+ return createIndex(idx.row(), columnCount() - 1 - idx.column());
+ }
+};
+
+void tst_QAbstractProxyModel::headerDataInBounds()
+{
+ QStandardItemModel qsim(0, 5);
+ qsim.setHorizontalHeaderLabels({"Col1", "Col2", "Col3", "Col4", "Col5"});
+
+ SimpleTableReverseColumnsProxy proxy;
+ QSignalSpy headerDataChangedSpy(&proxy, &QAbstractItemModel::headerDataChanged);
+ QVERIFY(headerDataChangedSpy.isValid());
+ proxy.setSourceModel(&qsim);
+ QCOMPARE(proxy.rowCount(), 0);
+ QCOMPARE(proxy.columnCount(), 5);
+
+ for (int i = 0; i < proxy.columnCount(); ++i) {
+ QString expected = QString("Col%1").arg(i + 1);
+ QCOMPARE(proxy.headerData(i, Qt::Horizontal).toString(), expected);
+ }
+
+ qsim.appendRow({
+ new QStandardItem("A"),
+ new QStandardItem("B"),
+ new QStandardItem("C"),
+ new QStandardItem("D"),
+ new QStandardItem("E")
+ });
+
+ QCOMPARE(proxy.rowCount(), 1);
+ QCOMPARE(proxy.columnCount(), 5);
+ QTRY_COMPARE(headerDataChangedSpy.size(), 1);
+ QCOMPARE(headerDataChangedSpy[0][0].value<Qt::Orientation>(), Qt::Horizontal);
+ QCOMPARE(headerDataChangedSpy[0][1].value<int>(), 0);
+ QCOMPARE(headerDataChangedSpy[0][2].value<int>(), 4);
+
+ for (int i = 0; i < proxy.columnCount(); ++i) {
+ QString expected = QString("Col%1").arg(proxy.columnCount() - i);
+ QCOMPARE(proxy.headerData(i, Qt::Horizontal).toString(), expected);
+ }
+
+ qsim.appendRow({
+ new QStandardItem("A"),
+ new QStandardItem("B"),
+ new QStandardItem("C"),
+ new QStandardItem("D"),
+ new QStandardItem("E")
+ });
+ QCOMPARE(proxy.rowCount(), 2);
+ QCOMPARE(proxy.columnCount(), 5);
+ QCOMPARE(headerDataChangedSpy.size(), 1);
+
+ for (int i = 0; i < proxy.columnCount(); ++i) {
+ QString expected = QString("Col%1").arg(proxy.columnCount() - i);
+ QCOMPARE(proxy.headerData(i, Qt::Horizontal).toString(), expected);
+ }
+
+ QVERIFY(qsim.removeRows(0, 1));
+
+ QCOMPARE(proxy.rowCount(), 1);
+ QCOMPARE(proxy.columnCount(), 5);
+ QCOMPARE(headerDataChangedSpy.size(), 1);
+
+ for (int i = 0; i < proxy.columnCount(); ++i) {
+ QString expected = QString("Col%1").arg(proxy.columnCount() - i);
+ QCOMPARE(proxy.headerData(i, Qt::Horizontal).toString(), expected);
+ }
+
+ QVERIFY(qsim.removeRows(0, 1));
+
+ QCOMPARE(proxy.rowCount(), 0);
+ QCOMPARE(proxy.columnCount(), 5);
+ QTRY_COMPARE(headerDataChangedSpy.size(), 2);
+ QCOMPARE(headerDataChangedSpy[1][0].value<Qt::Orientation>(), Qt::Horizontal);
+ QCOMPARE(headerDataChangedSpy[1][1].value<int>(), 0);
+ QCOMPARE(headerDataChangedSpy[1][2].value<int>(), 4);
+
+ for (int i = 0; i < proxy.columnCount(); ++i) {
+ QString expected = QString("Col%1").arg(i + 1);
+ QCOMPARE(proxy.headerData(i, Qt::Horizontal).toString(), expected);
+ }
+}
+
void tst_QAbstractProxyModel::itemData_data()
{
QTest::addColumn<QModelIndex>("index");
@@ -188,7 +291,7 @@ void tst_QAbstractProxyModel::itemData()
QFETCH(QModelIndex, index);
QFETCH(int, count);
SubQAbstractProxyModel model;
- QCOMPARE(model.itemData(index).count(), count);
+ QCOMPARE(model.itemData(index).size(), count);
}
void tst_QAbstractProxyModel::mapFromSource_data()
@@ -507,7 +610,7 @@ void tst_QAbstractProxyModel::sourceModelBinding()
SubQAbstractProxyModel proxy;
QStandardItemModel model1;
QStandardItemModel model2;
- QTestPrivate::testReadWritePropertyBasics<QAbstractProxyModel, QAbstractItemModel *>(
+ QTestPrivate::testReadWritePropertyBasics<SubQAbstractProxyModel, QAbstractItemModel *>(
proxy, &model1, &model2, "sourceModel");
if (QTest::currentTestFailed()) {
qDebug("Failed model - model test");
@@ -515,7 +618,7 @@ void tst_QAbstractProxyModel::sourceModelBinding()
}
proxy.setSourceModel(&model2);
- QTestPrivate::testReadWritePropertyBasics<QAbstractProxyModel, QAbstractItemModel *>(
+ QTestPrivate::testReadWritePropertyBasics<SubQAbstractProxyModel, QAbstractItemModel *>(
proxy, &model1, nullptr, "sourceModel");
if (QTest::currentTestFailed()) {
qDebug("Failed model - nullptr test");
@@ -523,7 +626,7 @@ void tst_QAbstractProxyModel::sourceModelBinding()
}
proxy.setSourceModel(&model1);
- QTestPrivate::testReadWritePropertyBasics<QAbstractProxyModel, QAbstractItemModel *>(
+ QTestPrivate::testReadWritePropertyBasics<SubQAbstractProxyModel, QAbstractItemModel *>(
proxy, nullptr, &model2, "sourceModel");
if (QTest::currentTestFailed()) {
qDebug("Failed nullptr - model test");
diff --git a/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/CMakeLists.txt b/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/CMakeLists.txt
index 40dd512489..37a74470af 100644
--- a/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qconcatenatetablesproxymodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qconcatenatetablesproxymodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qconcatenatetablesproxymodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qconcatenatetablesproxymodel
SOURCES
tst_qconcatenatetablesproxymodel.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp b/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp
index 0188768db5..989a57b30f 100644
--- a/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qconcatenatetablesproxymodel/tst_qconcatenatetablesproxymodel.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module 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 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QSignalSpy>
#include <QSortFilterProxyModel>
@@ -82,9 +46,9 @@ static QString rowSpyToText(const QSignalSpy &spy)
if (!spy.isValid())
return QStringLiteral("THE SIGNALSPY IS INVALID!");
QString str;
- for (int i = 0; i < spy.count(); ++i) {
+ for (int i = 0; i < spy.size(); ++i) {
str += spy.at(i).at(1).toString() + QLatin1Char(',') + spy.at(i).at(2).toString();
- if (i + 1 < spy.count())
+ if (i + 1 < spy.size())
str += QLatin1Char(';');
}
return str;
@@ -185,8 +149,8 @@ void tst_QConcatenateTablesProxyModel::shouldAggregateThenRemoveTwoEmptyModelsCo
// Then the proxy should still be empty (and no signals emitted)
QCOMPARE(pm.rowCount(), 0);
QCOMPARE(pm.columnCount(), 0);
- QCOMPARE(rowATBISpy.count(), 0);
- QCOMPARE(rowInsertedSpy.count(), 0);
+ QCOMPARE(rowATBISpy.size(), 0);
+ QCOMPARE(rowInsertedSpy.size(), 0);
// When removing the empty models
pm.removeSourceModel(&i1);
@@ -195,8 +159,8 @@ void tst_QConcatenateTablesProxyModel::shouldAggregateThenRemoveTwoEmptyModelsCo
// Then the proxy should still be empty (and no signals emitted)
QCOMPARE(pm.rowCount(), 0);
QCOMPARE(pm.columnCount(), 0);
- QCOMPARE(rowATBRSpy.count(), 0);
- QCOMPARE(rowRemovedSpy.count(), 0);
+ QCOMPARE(rowATBRSpy.size(), 0);
+ QCOMPARE(rowRemovedSpy.size(), 0);
}
void tst_QConcatenateTablesProxyModel::shouldAggregateTwoEmptyModelsWhichThenGetFilled()
@@ -241,14 +205,14 @@ void tst_QConcatenateTablesProxyModel::shouldHandleDataChanged()
mod.item(0, 0)->setData("a", Qt::EditRole);
// Then the change should be notified to the proxy
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
QCOMPARE(dataChangedSpy.at(0).at(0).toModelIndex(), pm.index(0, 0));
QCOMPARE(extractRowTexts(&pm, 0), QStringLiteral("aBC"));
// Same test with the other model
mod2.item(0, 2)->setData("f", Qt::EditRole);
- QCOMPARE(dataChangedSpy.count(), 2);
+ QCOMPARE(dataChangedSpy.size(), 2);
QCOMPARE(dataChangedSpy.at(1).at(0).toModelIndex(), pm.index(1, 2));
QCOMPARE(extractRowTexts(&pm, 1), QStringLiteral("DEf"));
}
@@ -266,14 +230,14 @@ void tst_QConcatenateTablesProxyModel::shouldHandleSetData()
pm.setData(pm.index(0, 0), "a");
// Then the change should be notified to the proxy
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
QCOMPARE(dataChangedSpy.at(0).at(0).toModelIndex(), pm.index(0, 0));
QCOMPARE(extractRowTexts(&pm, 0), QStringLiteral("aBC"));
// Same test with the other model
pm.setData(pm.index(1, 2), "f");
- QCOMPARE(dataChangedSpy.count(), 2);
+ QCOMPARE(dataChangedSpy.size(), 2);
QCOMPARE(dataChangedSpy.at(1).at(0).toModelIndex(), pm.index(1, 2));
QCOMPARE(extractRowTexts(&pm, 1), QStringLiteral("DEf"));
}
@@ -292,7 +256,7 @@ void tst_QConcatenateTablesProxyModel::shouldHandleSetItemData()
std::make_pair<int, QVariant>(Qt::UserRole, 88) });
// Then the change should be notified to the proxy
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
QCOMPARE(dataChangedSpy.at(0).at(0).toModelIndex(), pm.index(0, 0));
QCOMPARE(extractRowTexts(&pm, 0), QStringLiteral("XBC"));
QCOMPARE(pm.index(0, 0).data(Qt::UserRole).toInt(), 88);
@@ -301,7 +265,7 @@ void tst_QConcatenateTablesProxyModel::shouldHandleSetItemData()
pm.setItemData(pm.index(1, 2), QMap<int, QVariant>{ std::make_pair<int, QVariant>(Qt::DisplayRole, QStringLiteral("Y")),
std::make_pair<int, QVariant>(Qt::UserRole, 89) });
- QCOMPARE(dataChangedSpy.count(), 2);
+ QCOMPARE(dataChangedSpy.size(), 2);
QCOMPARE(dataChangedSpy.at(1).at(0).toModelIndex(), pm.index(1, 2));
QCOMPARE(extractRowTexts(&pm, 1), QStringLiteral("DEY"));
QCOMPARE(pm.index(1, 2).data(Qt::UserRole).toInt(), 89);
@@ -338,10 +302,10 @@ void tst_QConcatenateTablesProxyModel::shouldHandleRowInsertionAndRemoval()
mod2.removeRow(0);
// Then the proxy should notify its users and show changes
- QCOMPARE(rowATBRSpy.count(), 1);
+ QCOMPARE(rowATBRSpy.size(), 1);
QCOMPARE(rowATBRSpy.at(0).at(1).toInt(), 1);
QCOMPARE(rowATBRSpy.at(0).at(2).toInt(), 1);
- QCOMPARE(rowRemovedSpy.count(), 1);
+ QCOMPARE(rowRemovedSpy.size(), 1);
QCOMPARE(rowRemovedSpy.at(0).at(1).toInt(), 1);
QCOMPARE(rowRemovedSpy.at(0).at(2).toInt(), 1);
QCOMPARE(pm.rowCount(), 2);
@@ -354,10 +318,10 @@ void tst_QConcatenateTablesProxyModel::shouldHandleRowInsertionAndRemoval()
mod2.removeRow(0);
// Then the proxy should notify its users and show changes
- QCOMPARE(rowATBRSpy.count(), 1);
+ QCOMPARE(rowATBRSpy.size(), 1);
QCOMPARE(rowATBRSpy.at(0).at(1).toInt(), 1);
QCOMPARE(rowATBRSpy.at(0).at(2).toInt(), 1);
- QCOMPARE(rowRemovedSpy.count(), 1);
+ QCOMPARE(rowRemovedSpy.size(), 1);
QCOMPARE(rowRemovedSpy.at(0).at(1).toInt(), 1);
QCOMPARE(rowRemovedSpy.at(0).at(2).toInt(), 1);
QCOMPARE(pm.rowCount(), 1);
@@ -393,10 +357,10 @@ void tst_QConcatenateTablesProxyModel::shouldAggregateAnotherModelThenRemoveMode
pm.removeSourceModel(&mod3);
// Then the proxy should notify its users about the row removed
- QCOMPARE(rowATBRSpy.count(), 1);
+ QCOMPARE(rowATBRSpy.size(), 1);
QCOMPARE(rowATBRSpy.at(0).at(1).toInt(), 2);
QCOMPARE(rowATBRSpy.at(0).at(2).toInt(), 3);
- QCOMPARE(rowRemovedSpy.count(), 1);
+ QCOMPARE(rowRemovedSpy.size(), 1);
QCOMPARE(rowRemovedSpy.at(0).at(1).toInt(), 2);
QCOMPARE(rowRemovedSpy.at(0).at(2).toInt(), 3);
QCOMPARE(pm.rowCount(), 2);
@@ -407,10 +371,10 @@ void tst_QConcatenateTablesProxyModel::shouldAggregateAnotherModelThenRemoveMode
rowATBRSpy.clear();
rowRemovedSpy.clear();
pm.removeSourceModel(&mod2);
- QCOMPARE(rowATBRSpy.count(), 1);
+ QCOMPARE(rowATBRSpy.size(), 1);
QCOMPARE(rowATBRSpy.at(0).at(1).toInt(), 1);
QCOMPARE(rowATBRSpy.at(0).at(2).toInt(), 1);
- QCOMPARE(rowRemovedSpy.count(), 1);
+ QCOMPARE(rowRemovedSpy.size(), 1);
QCOMPARE(rowRemovedSpy.at(0).at(1).toInt(), 1);
QCOMPARE(rowRemovedSpy.at(0).at(2).toInt(), 1);
QCOMPARE(pm.rowCount(), 1);
@@ -420,10 +384,10 @@ void tst_QConcatenateTablesProxyModel::shouldAggregateAnotherModelThenRemoveMode
rowATBRSpy.clear();
rowRemovedSpy.clear();
pm.removeSourceModel(&mod);
- QCOMPARE(rowATBRSpy.count(), 1);
+ QCOMPARE(rowATBRSpy.size(), 1);
QCOMPARE(rowATBRSpy.at(0).at(1).toInt(), 0);
QCOMPARE(rowATBRSpy.at(0).at(2).toInt(), 0);
- QCOMPARE(rowRemovedSpy.count(), 1);
+ QCOMPARE(rowRemovedSpy.size(), 1);
QCOMPARE(rowRemovedSpy.at(0).at(1).toInt(), 0);
QCOMPARE(rowRemovedSpy.at(0).at(2).toInt(), 0);
QCOMPARE(pm.rowCount(), 0);
@@ -459,11 +423,11 @@ void tst_QConcatenateTablesProxyModel::shouldUseSmallestColumnCount()
// Test setData in an ignored column (QTBUG-91253)
QSignalSpy dataChangedSpy(&pm, SIGNAL(dataChanged(QModelIndex,QModelIndex)));
mod.setData(mod.index(0, 1), "b");
- QCOMPARE(dataChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.size(), 0);
// Test dataChanged across all columns, some visible, some ignored
mod.dataChanged(mod.index(0, 0), mod.index(0, 2));
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
QCOMPARE(dataChangedSpy.at(0).at(0).toModelIndex(), pm.index(0, 0));
QCOMPARE(dataChangedSpy.at(0).at(1).toModelIndex(), pm.index(0, 0));
}
@@ -553,8 +517,8 @@ void tst_QConcatenateTablesProxyModel::shouldPropagateLayoutChanged()
QItemSelectionModel selection(&pm);
selection.select(pm.index(1, 0), QItemSelectionModel::Select | QItemSelectionModel::Rows);
const QModelIndexList lst = selection.selectedIndexes();
- QCOMPARE(lst.count(), 3);
- for (int col = 0; col < lst.count(); ++col) {
+ QCOMPARE(lst.size(), 3);
+ for (int col = 0; col < lst.size(); ++col) {
QCOMPARE(lst.at(col).row(), 1);
QCOMPARE(lst.at(col).column(), col);
}
@@ -569,13 +533,13 @@ void tst_QConcatenateTablesProxyModel::shouldPropagateLayoutChanged()
QCOMPARE(extractRowTexts(&pm, 0), QStringLiteral("ABC"));
QCOMPARE(extractRowTexts(&pm, 1), QStringLiteral("456"));
QCOMPARE(extractRowTexts(&pm, 2), QStringLiteral("123"));
- QCOMPARE(layoutATBCSpy.count(), 1);
- QCOMPARE(layoutChangedSpy.count(), 1);
+ QCOMPARE(layoutATBCSpy.size(), 1);
+ QCOMPARE(layoutChangedSpy.size(), 1);
// And the selection should be updated accordingly (it became row 2)
const QModelIndexList lstAfter = selection.selectedIndexes();
- QCOMPARE(lstAfter.count(), 3);
- for (int col = 0; col < lstAfter.count(); ++col) {
+ QCOMPARE(lstAfter.size(), 3);
+ for (int col = 0; col < lstAfter.size(); ++col) {
QCOMPARE(lstAfter.at(col).row(), 2);
QCOMPARE(lstAfter.at(col).column(), col);
}
@@ -610,14 +574,14 @@ void tst_QConcatenateTablesProxyModel::shouldReactToModelReset()
// Then the proxy should emit the reset signals, and show the new data
QCOMPARE(extractRowTexts(&pm, 0), QStringLiteral("ABC"));
QCOMPARE(extractRowTexts(&pm, 1), QStringLiteral("DEF"));
- QCOMPARE(rowATBRSpy.count(), 0);
- QCOMPARE(rowRemovedSpy.count(), 0);
- QCOMPARE(rowATBISpy.count(), 0);
- QCOMPARE(rowInsertedSpy.count(), 0);
- QCOMPARE(colATBRSpy.count(), 0);
- QCOMPARE(colRemovedSpy.count(), 0);
- QCOMPARE(modelATBResetSpy.count(), 1);
- QCOMPARE(modelResetSpy.count(), 1);
+ QCOMPARE(rowATBRSpy.size(), 0);
+ QCOMPARE(rowRemovedSpy.size(), 0);
+ QCOMPARE(rowATBISpy.size(), 0);
+ QCOMPARE(rowInsertedSpy.size(), 0);
+ QCOMPARE(colATBRSpy.size(), 0);
+ QCOMPARE(colRemovedSpy.size(), 0);
+ QCOMPARE(modelATBResetSpy.size(), 1);
+ QCOMPARE(modelResetSpy.size(), 1);
}
void tst_QConcatenateTablesProxyModel::shouldUpdateColumnsOnModelReset()
@@ -652,14 +616,14 @@ void tst_QConcatenateTablesProxyModel::shouldUpdateColumnsOnModelReset()
qsfpm.setSourceModel(&mod2Columns);
// Then the proxy should reset, and show the new data
- QCOMPARE(modelATBResetSpy.count(), 1);
- QCOMPARE(modelResetSpy.count(), 1);
- QCOMPARE(rowATBRSpy.count(), 0);
- QCOMPARE(rowRemovedSpy.count(), 0);
- QCOMPARE(rowATBISpy.count(), 0);
- QCOMPARE(rowInsertedSpy.count(), 0);
- QCOMPARE(colATBRSpy.count(), 0);
- QCOMPARE(colRemovedSpy.count(), 0);
+ QCOMPARE(modelATBResetSpy.size(), 1);
+ QCOMPARE(modelResetSpy.size(), 1);
+ QCOMPARE(rowATBRSpy.size(), 0);
+ QCOMPARE(rowRemovedSpy.size(), 0);
+ QCOMPARE(rowATBISpy.size(), 0);
+ QCOMPARE(rowInsertedSpy.size(), 0);
+ QCOMPARE(colATBRSpy.size(), 0);
+ QCOMPARE(colRemovedSpy.size(), 0);
QCOMPARE(pm.rowCount(), 2);
QCOMPARE(extractRowTexts(&pm, 0), QStringLiteral("WX"));
diff --git a/tests/auto/corelib/itemmodels/qidentityproxymodel/CMakeLists.txt b/tests/auto/corelib/itemmodels/qidentityproxymodel/CMakeLists.txt
index fb2ae55215..87a2cdcba1 100644
--- a/tests/auto/corelib/itemmodels/qidentityproxymodel/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/qidentityproxymodel/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qidentityproxymodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qidentityproxymodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qidentityproxymodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qidentityproxymodel
SOURCES
../../../other/qabstractitemmodelutils/dynamictreemodel.cpp ../../../other/qabstractitemmodelutils/dynamictreemodel.h
tst_qidentityproxymodel.cpp
INCLUDE_DIRECTORIES
../../../other/qabstractitemmodelutils
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp b/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp
index 72f3564746..99b74bc09a 100644
--- a/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qidentityproxymodel/tst_qidentityproxymodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 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 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) 2011 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 <QAbstractItemModelTester>
#include <QCoreApplication>
@@ -52,6 +27,16 @@ public:
const QModelIndex idx = index(0, 0, QModelIndex());
Q_EMIT dataChanged(idx, idx, QList<int>() << 1);
}
+
+ // Workaround QObject::isSignalConnected() being a protected method
+ bool isConnected(const QMetaMethod &m) const { return isSignalConnected(m); }
+};
+
+class IdentityProxyModel : public QIdentityProxyModel
+{
+public:
+ // The name has to be different than the method from the base class
+ void setHandleSLC(bool b) { setHandleSourceLayoutChanges(b); }
};
class tst_QIdentityProxyModel : public QObject
@@ -78,6 +63,9 @@ private slots:
void persistIndexOnLayoutChange();
void createPersistentOnLayoutAboutToBeChanged();
+
+ void testSetHandleLayoutChanges();
+
protected:
void verifyIdentity(QAbstractItemModel *model, const QModelIndex &parent = QModelIndex());
@@ -538,5 +526,27 @@ void tst_QIdentityProxyModel::createPersistentOnLayoutAboutToBeChanged() // QTBU
QCOMPARE(layoutChangedSpy.size(), 1);
}
+void tst_QIdentityProxyModel::testSetHandleLayoutChanges()
+{
+ const std::array layoutSignals = {
+ QMetaMethod::fromSignal(&QAbstractItemModel::layoutChanged),
+ QMetaMethod::fromSignal(&QAbstractItemModel::layoutAboutToBeChanged),
+ };
+
+ DataChangedModel model;
+ IdentityProxyModel proxy;
+ proxy.setSourceModel(&model);
+ for (const auto &m : layoutSignals)
+ QVERIFY(model.isConnected(m)); // Connected by default
+
+ proxy.setSourceModel(nullptr);
+
+ // Disable handling (connecting to layotu signals) of source model layout changes
+ proxy.setHandleSLC(false);
+ proxy.setSourceModel(&model);
+ for (const auto &m : layoutSignals)
+ QVERIFY(!model.isConnected(m));
+}
+
QTEST_MAIN(tst_QIdentityProxyModel)
#include "tst_qidentityproxymodel.moc"
diff --git a/tests/auto/corelib/itemmodels/qitemmodel/CMakeLists.txt b/tests/auto/corelib/itemmodels/qitemmodel/CMakeLists.txt
index 7dda1a3964..57d9ba4913 100644
--- a/tests/auto/corelib/itemmodels/qitemmodel/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/qitemmodel/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qitemmodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qitemmodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qitemmodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qitemmodel
SOURCES
tst_qitemmodel.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Sql
Qt::Widgets
diff --git a/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp b/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp
index cdbeaccac6..b2d507875d 100644
--- a/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp
+++ b/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.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 <QTest>
diff --git a/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp b/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp
index 40495c1d9e..b1f91fe9a3 100644
--- a/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp
+++ b/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.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 <QTest>
#include <QSignalSpy>
@@ -612,7 +587,7 @@ void tst_QItemModel::setData()
QVERIFY(currentModel);
QSignalSpy spy(currentModel, &QAbstractItemModel::dataChanged);
QVERIFY(spy.isValid());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QFETCH(bool, isEmpty);
if (isEmpty)
@@ -636,7 +611,7 @@ void tst_QItemModel::setData()
// Changing the text shouldn't change the layout, parent, pointer etc.
QModelIndex changedIndex = currentModel->index(0, 0, topIndex);
QCOMPARE(changedIndex, index);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QItemModel::setHeaderData_data()
@@ -686,7 +661,7 @@ void tst_QItemModel::setHeaderData()
++signalCount;
}
}
- QCOMPARE(spy.count(), signalCount);
+ QCOMPARE(spy.size(), signalCount);
}
void tst_QItemModel::sort_data()
@@ -717,7 +692,7 @@ void tst_QItemModel::sort()
for (int i=-1; i < 10; ++i){
currentModel->sort(i);
if (index != currentModel->index(0, 0, topIndex)){
- QVERIFY(spy.count() > 0);
+ QVERIFY(spy.size() > 0);
index = currentModel->index(0, 0, topIndex);
spy.clear();
}
@@ -883,7 +858,7 @@ void tst_QItemModel::remove()
if (shouldSucceed && dyingIndex.isValid())
QCOMPARE(dyingIndex.row(), start + 1);
- if (rowsAboutToBeRemovedSpy.count() > 0){
+ if (rowsAboutToBeRemovedSpy.size() > 0){
QList<QVariant> arguments = rowsAboutToBeRemovedSpy.at(0);
QModelIndex parent = (qvariant_cast<QModelIndex>(arguments.at(0)));
int first = arguments.at(1).toInt();
@@ -893,7 +868,7 @@ void tst_QItemModel::remove()
QVERIFY(parentOfRemoved == parent);
}
- if (rowsRemovedSpy.count() > 0){
+ if (rowsRemovedSpy.size() > 0){
QList<QVariant> arguments = rowsRemovedSpy.at(0);
QModelIndex parent = (qvariant_cast<QModelIndex>(arguments.at(0)));
int first = arguments.at(1).toInt();
@@ -904,26 +879,26 @@ void tst_QItemModel::remove()
}
// Only the row signals should have been emitted
- if (modelResetSpy.count() >= 1 || modelLayoutChangedSpy.count() >=1 ){
- QCOMPARE(columnsAboutToBeRemovedSpy.count(), 0);
- QCOMPARE(rowsAboutToBeRemovedSpy.count(), 0);
- QCOMPARE(columnsRemovedSpy.count(), 0);
- QCOMPARE(rowsRemovedSpy.count(), 0);
+ if (modelResetSpy.size() >= 1 || modelLayoutChangedSpy.size() >=1 ){
+ QCOMPARE(columnsAboutToBeRemovedSpy.size(), 0);
+ QCOMPARE(rowsAboutToBeRemovedSpy.size(), 0);
+ QCOMPARE(columnsRemovedSpy.size(), 0);
+ QCOMPARE(rowsRemovedSpy.size(), 0);
}
else {
- QCOMPARE(columnsAboutToBeRemovedSpy.count(), 0);
- QCOMPARE(rowsAboutToBeRemovedSpy.count(), numberOfRowsAboutToBeRemovedSignals);
- QCOMPARE(columnsRemovedSpy.count(), 0);
- QCOMPARE(rowsRemovedSpy.count(), numberOfRowsRemovedSignals);
+ QCOMPARE(columnsAboutToBeRemovedSpy.size(), 0);
+ QCOMPARE(rowsAboutToBeRemovedSpy.size(), numberOfRowsAboutToBeRemovedSignals);
+ QCOMPARE(columnsRemovedSpy.size(), 0);
+ QCOMPARE(rowsRemovedSpy.size(), numberOfRowsRemovedSignals);
}
// The row count should only change *after* rowsAboutToBeRemoved has been emitted
if (shouldSucceed) {
- if (modelResetSpy.count() == 0 && modelLayoutChangedSpy.count() == 0){
+ if (modelResetSpy.size() == 0 && modelLayoutChangedSpy.size() == 0){
QCOMPARE(afterAboutToRemoveRowCount, beforeRemoveRowCount);
QCOMPARE(afterRemoveRowCount, beforeRemoveRowCount-count-(numberOfRowsRemovedSignals-1));
}
- if (modelResetSpy.count() == 0 )
+ if (modelResetSpy.size() == 0 )
QCOMPARE(currentModel->rowCount(parentOfRemoved), beforeRemoveRowCount-count-(numberOfRowsRemovedSignals-1));
}
else {
@@ -938,7 +913,7 @@ void tst_QItemModel::remove()
disconnect(currentModel, SIGNAL(rowsRemoved(QModelIndex,int,int)),
this, SLOT(slot_rowsRemoved(QModelIndex)));
modelResetSpy.clear();
- QCOMPARE(modelResetSpy.count(), 0);
+ QCOMPARE(modelResetSpy.size(), 0);
//
// Test remove column
@@ -953,26 +928,26 @@ void tst_QItemModel::remove()
if (currentModel->removeColumns(start, count, parentOfRemoved)) {
currentModel->submit();
// Didn't reset the rows, so they should still be at the same value
- if (modelResetSpy.count() >= 1 || modelLayoutChangedSpy.count() >= 1){
- QCOMPARE(columnsAboutToBeRemovedSpy.count(), 0);
+ if (modelResetSpy.size() >= 1 || modelLayoutChangedSpy.size() >= 1){
+ QCOMPARE(columnsAboutToBeRemovedSpy.size(), 0);
//QCOMPARE(rowsAboutToBeRemovedSpy.count(), numberOfRowsAboutToBeRemovedSignals);
- QCOMPARE(columnsRemovedSpy.count(), 0);
+ QCOMPARE(columnsRemovedSpy.size(), 0);
//QCOMPARE(rowsRemovedSpy.count(), numberOfRowsRemovedSignals);
}
else {
- QCOMPARE(columnsAboutToBeRemovedSpy.count(), numberOfColumnsAboutToBeRemovedSignals);
- QCOMPARE(rowsAboutToBeRemovedSpy.count(), numberOfRowsAboutToBeRemovedSignals);
- QCOMPARE(columnsRemovedSpy.count(), numberOfColumnsRemovedSignals);
- QCOMPARE(rowsRemovedSpy.count(), numberOfRowsRemovedSignals);
+ QCOMPARE(columnsAboutToBeRemovedSpy.size(), numberOfColumnsAboutToBeRemovedSignals);
+ QCOMPARE(rowsAboutToBeRemovedSpy.size(), numberOfRowsAboutToBeRemovedSignals);
+ QCOMPARE(columnsRemovedSpy.size(), numberOfColumnsRemovedSignals);
+ QCOMPARE(rowsRemovedSpy.size(), numberOfRowsRemovedSignals);
}
// The column count should only change *after* rowsAboutToBeRemoved has been emitted
if (shouldSucceed) {
- if (modelResetSpy.count() == 0 && modelLayoutChangedSpy.count() == 0){
+ if (modelResetSpy.size() == 0 && modelLayoutChangedSpy.size() == 0){
QCOMPARE(afterAboutToRemoveColumnCount, beforeRemoveColumnCount);
QCOMPARE(afterRemoveColumnCount, beforeRemoveColumnCount-count-(numberOfColumnsRemovedSignals-1));
}
- if (modelResetSpy.count() == 0)
+ if (modelResetSpy.size() == 0)
QCOMPARE(currentModel->columnCount(parentOfRemoved), beforeRemoveColumnCount-count-(numberOfColumnsRemovedSignals-1));
}
else
@@ -983,7 +958,7 @@ void tst_QItemModel::remove()
disconnect(currentModel, SIGNAL(columnsRemoved(QModelIndex,int,int)),
this, SLOT(slot_columnsRemoved(QModelIndex)));
- if (columnsAboutToBeRemovedSpy.count() > 0){
+ if (columnsAboutToBeRemovedSpy.size() > 0){
QList<QVariant> arguments = columnsAboutToBeRemovedSpy.at(0);
QModelIndex parent = (qvariant_cast<QModelIndex>(arguments.at(0)));
int first = arguments.at(1).toInt();
@@ -993,7 +968,7 @@ void tst_QItemModel::remove()
QVERIFY(parentOfRemoved == parent);
}
- if (columnsRemovedSpy.count() > 0){
+ if (columnsRemovedSpy.size() > 0){
QList<QVariant> arguments = columnsRemovedSpy.at(0);
QModelIndex parent = (qvariant_cast<QModelIndex>(arguments.at(0)));
int first = arguments.at(1).toInt();
@@ -1222,7 +1197,7 @@ void tst_QItemModel::insert()
QCOMPARE(currentModel->insertRows(start, count, parentOfInserted), shouldSucceed);
currentModel->submit();
- if (rowsAboutToBeInsertedSpy.count() > 0){
+ if (rowsAboutToBeInsertedSpy.size() > 0){
QList<QVariant> arguments = rowsAboutToBeInsertedSpy.at(0);
QModelIndex parent = (qvariant_cast<QModelIndex>(arguments.at(0)));
int first = arguments.at(1).toInt();
@@ -1232,7 +1207,7 @@ void tst_QItemModel::insert()
QVERIFY(parentOfInserted == parent);
}
- if (rowsInsertedSpy.count() > 0){
+ if (rowsInsertedSpy.size() > 0){
QList<QVariant> arguments = rowsInsertedSpy.at(0);
QModelIndex parent = (qvariant_cast<QModelIndex>(arguments.at(0)));
int first = arguments.at(1).toInt();
@@ -1243,25 +1218,25 @@ void tst_QItemModel::insert()
}
// Only the row signals should have been emitted
- if (modelResetSpy.count() >= 1 || modelLayoutChangedSpy.count() >= 1) {
- QCOMPARE(columnsAboutToBeInsertedSpy.count(), 0);
- QCOMPARE(rowsAboutToBeInsertedSpy.count(), 0);
- QCOMPARE(columnsInsertedSpy.count(), 0);
- QCOMPARE(rowsInsertedSpy.count(), 0);
+ if (modelResetSpy.size() >= 1 || modelLayoutChangedSpy.size() >= 1) {
+ QCOMPARE(columnsAboutToBeInsertedSpy.size(), 0);
+ QCOMPARE(rowsAboutToBeInsertedSpy.size(), 0);
+ QCOMPARE(columnsInsertedSpy.size(), 0);
+ QCOMPARE(rowsInsertedSpy.size(), 0);
}
else {
- QCOMPARE(columnsAboutToBeInsertedSpy.count(), 0);
- QCOMPARE(rowsAboutToBeInsertedSpy.count(), numberOfRowsAboutToBeInsertedSignals);
- QCOMPARE(columnsInsertedSpy.count(), 0);
- QCOMPARE(rowsInsertedSpy.count(), numberOfRowsInsertedSignals);
+ QCOMPARE(columnsAboutToBeInsertedSpy.size(), 0);
+ QCOMPARE(rowsAboutToBeInsertedSpy.size(), numberOfRowsAboutToBeInsertedSignals);
+ QCOMPARE(columnsInsertedSpy.size(), 0);
+ QCOMPARE(rowsInsertedSpy.size(), numberOfRowsInsertedSignals);
}
// The row count should only change *after* rowsAboutToBeInserted has been emitted
if (shouldSucceed) {
- if (modelResetSpy.count() == 0 && modelLayoutChangedSpy.count() == 0) {
+ if (modelResetSpy.size() == 0 && modelLayoutChangedSpy.size() == 0) {
QCOMPARE(afterAboutToInsertRowCount, beforeInsertRowCount);
QCOMPARE(afterInsertRowCount, beforeInsertRowCount+count+(numberOfRowsInsertedSignals-1));
}
- if (modelResetSpy.count() == 0)
+ if (modelResetSpy.size() == 0)
QCOMPARE(currentModel->rowCount(parentOfInserted), beforeInsertRowCount+count+(numberOfRowsInsertedSignals-1));
}
else {
@@ -1289,27 +1264,27 @@ void tst_QItemModel::insert()
// Some models don't let you insert the column, only row
if (currentModel->insertColumns(start, count, parentOfInserted)) {
currentModel->submit();
- if (modelResetSpy.count() >= 1 || modelLayoutChangedSpy.count() >= 1) {
+ if (modelResetSpy.size() >= 1 || modelLayoutChangedSpy.size() >= 1) {
// Didn't reset the rows, so they should still be at the same value
- QCOMPARE(columnsAboutToBeInsertedSpy.count(), 0);
+ QCOMPARE(columnsAboutToBeInsertedSpy.size(), 0);
//QCOMPARE(rowsAboutToBeInsertedSpy.count(), numberOfRowsAboutToBeInsertedSignals);
- QCOMPARE(columnsInsertedSpy.count(), 0);
+ QCOMPARE(columnsInsertedSpy.size(), 0);
//QCOMPARE(rowsInsertedSpy.count(), numberOfRowsInsertedSignals);
}
else {
// Didn't reset the rows, so they should still be at the same value
- QCOMPARE(columnsAboutToBeInsertedSpy.count(), numberOfColumnsAboutToBeInsertedSignals);
- QCOMPARE(rowsAboutToBeInsertedSpy.count(), numberOfRowsAboutToBeInsertedSignals);
- QCOMPARE(columnsInsertedSpy.count(), numberOfColumnsInsertedSignals);
- QCOMPARE(rowsInsertedSpy.count(), numberOfRowsInsertedSignals);
+ QCOMPARE(columnsAboutToBeInsertedSpy.size(), numberOfColumnsAboutToBeInsertedSignals);
+ QCOMPARE(rowsAboutToBeInsertedSpy.size(), numberOfRowsAboutToBeInsertedSignals);
+ QCOMPARE(columnsInsertedSpy.size(), numberOfColumnsInsertedSignals);
+ QCOMPARE(rowsInsertedSpy.size(), numberOfRowsInsertedSignals);
}
// The column count should only change *after* rowsAboutToBeInserted has been emitted
if (shouldSucceed) {
- if (modelResetSpy.count() == 0 && modelLayoutChangedSpy.count() == 0) {
+ if (modelResetSpy.size() == 0 && modelLayoutChangedSpy.size() == 0) {
QCOMPARE(afterAboutToInsertColumnCount, beforeInsertColumnCount);
QCOMPARE(afterInsertColumnCount, beforeInsertColumnCount+count+(numberOfColumnsInsertedSignals-1));
}
- if (modelResetSpy.count() == 0)
+ if (modelResetSpy.size() == 0)
QCOMPARE(currentModel->columnCount(parentOfInserted), beforeInsertColumnCount+count+(numberOfColumnsInsertedSignals-1));
}
else
@@ -1320,7 +1295,7 @@ void tst_QItemModel::insert()
disconnect(currentModel, SIGNAL(columnsInserted(QModelIndex,int,int)),
this, SLOT(slot_columnsInserted(QModelIndex)));
- if (columnsAboutToBeInsertedSpy.count() > 0){
+ if (columnsAboutToBeInsertedSpy.size() > 0){
QList<QVariant> arguments = columnsAboutToBeInsertedSpy.at(0);
QModelIndex parent = (qvariant_cast<QModelIndex>(arguments.at(0)));
int first = arguments.at(1).toInt();
@@ -1330,7 +1305,7 @@ void tst_QItemModel::insert()
QVERIFY(parentOfInserted == parent);
}
- if (columnsInsertedSpy.count() > 0){
+ if (columnsInsertedSpy.size() > 0){
QList<QVariant> arguments = columnsInsertedSpy.at(0);
QModelIndex parent = (qvariant_cast<QModelIndex>(arguments.at(0)));
int first = arguments.at(1).toInt();
diff --git a/tests/auto/corelib/itemmodels/qitemselectionmodel/CMakeLists.txt b/tests/auto/corelib/itemmodels/qitemselectionmodel/CMakeLists.txt
index 8eadf67b66..88ec493305 100644
--- a/tests/auto/corelib/itemmodels/qitemselectionmodel/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/qitemselectionmodel/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qitemselectionmodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qitemselectionmodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qitemselectionmodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qitemselectionmodel
SOURCES
tst_qitemselectionmodel.cpp
diff --git a/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp b/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp
index 7c4dbaedbf..45f7a6c08d 100644
--- a/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp
+++ b/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
#include <QtTest/private/qpropertytesthelper_p.h>
#include <QSignalSpy>
@@ -49,6 +25,7 @@ public slots:
void cleanupTestCase();
void init();
private slots:
+ void compareCompiles();
void clear_data();
void clear();
void clearAndSelect();
@@ -105,7 +82,11 @@ private slots:
void QTBUG93305();
+ void testSignalsDisconnection();
+ void destroyModel();
+
private:
+ static void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg);
QAbstractItemModel *model;
QItemSelectionModel *selection;
};
@@ -166,8 +147,8 @@ QDataStream &operator>>(QDataStream &s, QModelIndex &output)
QDataStream &operator<<(QDataStream &s, const QModelIndexList &input)
{
- s << input.count();
- for (int i=0; i<input.count(); ++i)
+ s << input.size();
+ for (int i=0; i<input.size(); ++i)
s << input.at(i);
return s;
}
@@ -234,6 +215,11 @@ void tst_QItemSelectionModel::init()
model->insertRow(0, QModelIndex());
}
+void tst_QItemSelectionModel::compareCompiles()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QItemSelectionRange>();
+}
+
void tst_QItemSelectionModel::clear_data()
{
QTest::addColumn<QModelIndexList>("indexList");
@@ -303,7 +289,7 @@ void tst_QItemSelectionModel::clear()
QFETCH(IntList, commandList);
// do selections
- for (int i=0; i<indexList.count(); ++i) {
+ for (int i=0; i<indexList.size(); ++i) {
selection->select(indexList.at(i), (QItemSelectionModel::SelectionFlags)commandList.at(i));
}
// test that we have selected items
@@ -317,7 +303,7 @@ void tst_QItemSelectionModel::clearAndSelect()
{
// populate selectionmodel
selection->select(model->index(1, 1, QModelIndex()), QItemSelectionModel::Select);
- QCOMPARE(selection->selectedIndexes().count(), 1);
+ QCOMPARE(selection->selectedIndexes().size(), 1);
QVERIFY(selection->hasSelection());
// ClearAndSelect with empty selection
@@ -335,26 +321,26 @@ void tst_QItemSelectionModel::toggleSelection()
//and hasSelection returns the correct value
selection->clearSelection();
- QCOMPARE(selection->selectedIndexes().count(), 0);
+ QCOMPARE(selection->selectedIndexes().size(), 0);
QVERIFY(selection->hasSelection()==false);
QModelIndex index=model->index(1, 1, QModelIndex());
// populate selectionmodel
selection->select(index, QItemSelectionModel::Toggle);
- QCOMPARE(selection->selectedIndexes().count(), 1);
+ QCOMPARE(selection->selectedIndexes().size(), 1);
QVERIFY(selection->hasSelection()==true);
selection->select(index, QItemSelectionModel::Toggle);
- QCOMPARE(selection->selectedIndexes().count(), 0);
+ QCOMPARE(selection->selectedIndexes().size(), 0);
QVERIFY(selection->hasSelection()==false);
// populate selectionmodel with rows
selection->select(index, QItemSelectionModel::Toggle | QItemSelectionModel::Rows);
- QCOMPARE(selection->selectedIndexes().count(), model->columnCount());
+ QCOMPARE(selection->selectedIndexes().size(), model->columnCount());
QVERIFY(selection->hasSelection()==true);
selection->select(index, QItemSelectionModel::Toggle | QItemSelectionModel::Rows);
- QCOMPARE(selection->selectedIndexes().count(), 0);
+ QCOMPARE(selection->selectedIndexes().size(), 0);
QVERIFY(selection->hasSelection()==false);
}
@@ -1246,7 +1232,7 @@ void tst_QItemSelectionModel::select()
int lastCommand = 0;
// do selections
- for (int i = 0; i<commandList.count(); ++i) {
+ for (int i = 0; i<commandList.size(); ++i) {
if (useRanges) {
selection->select(QItemSelection(indexList.at(2*i), indexList.at(2*i+1)),
(QItemSelectionModel::SelectionFlags)commandList.at(i));
@@ -1263,13 +1249,13 @@ void tst_QItemSelectionModel::select()
QVERIFY(selection->hasSelection()!=selectedList.isEmpty());
// test that the number of indices are as expected
- QVERIFY2(selectedList.count() == expectedList.count(),
+ QVERIFY2(selectedList.size() == expectedList.size(),
QString("expected indices: %1 actual indices: %2")
- .arg(expectedList.count())
- .arg(selectedList.count()).toLatin1());
+ .arg(expectedList.size())
+ .arg(selectedList.size()).toLatin1());
// test existence of each index
- for (int i=0; i<expectedList.count(); ++i) {
+ for (int i=0; i<expectedList.size(); ++i) {
QVERIFY2(selectedList.contains(expectedList.at(i)),
QString("expected index(%1, %2) not found in selectedIndexes()")
.arg(expectedList.at(i).row())
@@ -1277,7 +1263,7 @@ void tst_QItemSelectionModel::select()
}
// test that isSelected agrees
- for (int i=0; i<indexList.count(); ++i) {
+ for (int i=0; i<indexList.size(); ++i) {
QModelIndex idx = indexList.at(i);
QVERIFY2(selection->isSelected(idx) == selectedList.contains(idx),
QString("isSelected(index: %1, %2) does not match selectedIndexes()")
@@ -1288,7 +1274,7 @@ void tst_QItemSelectionModel::select()
//for now we assume Rows/Columns flag is the same for all commands, therefore we just check lastCommand
// test that isRowSelected agrees
if (lastCommand & QItemSelectionModel::Rows) {
- for (int i=0; i<selectedList.count(); ++i)
+ for (int i=0; i<selectedList.size(); ++i)
QVERIFY2(selection->isRowSelected(selectedList.at(i).row(),
model->parent(selectedList.at(i))),
QString("isRowSelected(row: %1) does not match selectedIndexes()")
@@ -1297,7 +1283,7 @@ void tst_QItemSelectionModel::select()
// test that isColumnSelected agrees
if (lastCommand & QItemSelectionModel::Columns) {
- for (int i=0; i<selectedList.count(); ++i)
+ for (int i=0; i<selectedList.size(); ++i)
QVERIFY2(selection->isColumnSelected(selectedList.at(i).column(),
model->parent(selectedList.at(i))),
QString("isColumnSelected(column: %1) does not match selectedIndexes()")
@@ -1481,8 +1467,8 @@ void tst_QItemSelectionModel::persistentselections()
QCOMPARE(model->columnCount(QModelIndex()), 5);
// do selections
- for (int i=0; i<commandList.count(); ++i) {
- if (indexList.count() == commandList.count()) {
+ for (int i=0; i<commandList.size(); ++i) {
+ if (indexList.size() == commandList.size()) {
QModelIndex index = model->index(indexList.at(i).first,
indexList.at(i).second,
QModelIndex());
@@ -1503,18 +1489,18 @@ void tst_QItemSelectionModel::persistentselections()
QVERIFY(selection->hasSelection());
// insert/delete row and/or columns
- if (insertRows.count() > 1)
+ if (insertRows.size() > 1)
model->insertRows(insertRows.at(0), insertRows.at(1), QModelIndex());
- if (insertColumns.count() > 1)
+ if (insertColumns.size() > 1)
model->insertColumns(insertColumns.at(0), insertColumns.at(1), QModelIndex());
- if (deleteRows.count() > 1)
+ if (deleteRows.size() > 1)
model->removeRows(deleteRows.at(0), deleteRows.at(1), QModelIndex());
- if (deleteColumns.count() > 1)
+ if (deleteColumns.size() > 1)
model->removeColumns(deleteColumns.at(0), deleteColumns.at(1), QModelIndex());
// check that the selected items are the correct number and indexes
QModelIndexList selectedList = selection->selectedIndexes();
- QCOMPARE(selectedList.count(), expectedList.count());
+ QCOMPARE(selectedList.size(), expectedList.size());
for (const auto &pair : expectedList) {
QModelIndex index = model->index(pair.first, pair.second, QModelIndex());
QVERIFY(selectedList.contains(index));
@@ -1540,7 +1526,7 @@ void tst_QItemSelectionModel::resetModel()
selectionModel->select(QItemSelection(model.index(0, 0), model.index(5, 5)), QItemSelectionModel::Select);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
model.reset();
@@ -1549,8 +1535,8 @@ void tst_QItemSelectionModel::resetModel()
selectionModel->select(QItemSelection(model.index(0, 0), model.index(5, 5)), QItemSelectionModel::Select);
- QCOMPARE(spy.count(), 2);
- QCOMPARE(spy.at(1).count(), 2);
+ QCOMPARE(spy.size(), 2);
+ QCOMPARE(spy.at(1).size(), 2);
// make sure we don't get an "old selection"
QCOMPARE(spy.at(1).at(1).userType(), qMetaTypeId<QItemSelection>());
QVERIFY(qvariant_cast<QItemSelection>(spy.at(1).at(1)).isEmpty());
@@ -1605,14 +1591,14 @@ void tst_QItemSelectionModel::removeRows()
QModelIndex br = model.index(selectBottom, selectRight);
selections.select(QItemSelection(tl, br), QItemSelectionModel::ClearAndSelect);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(selections.isSelected(tl));
QVERIFY(selections.isSelected(br));
QVERIFY(selections.hasSelection());
model.removeRows(removeTop, removeBottom - removeTop + 1);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
tl = model.index(expectedTop, expectedLeft);
br = model.index(expectedBottom, expectedRight);
QVERIFY(selections.isSelected(tl));
@@ -1668,14 +1654,14 @@ void tst_QItemSelectionModel::removeColumns()
QModelIndex br = model.index(selectBottom, selectRight);
selections.select(QItemSelection(tl, br), QItemSelectionModel::ClearAndSelect);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(selections.isSelected(tl));
QVERIFY(selections.isSelected(br));
QVERIFY(selections.hasSelection());
model.removeColumns(removeLeft, removeRight - removeLeft + 1);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
tl = model.index(expectedTop, expectedLeft);
br = model.index(expectedBottom, expectedRight);
QVERIFY(selections.isSelected(tl));
@@ -1746,7 +1732,7 @@ void tst_QItemSelectionModel::modelLayoutChanged()
QFETCH(int, sortColumn);
QFETCH(IntPairPairList, expectedSelectedRanges);
- MyStandardItemModel model(items.at(0).count(), items.count());
+ MyStandardItemModel model(items.at(0).size(), items.size());
// initialize model data
for (int i = 0; i < model.rowCount(); ++i) {
for (int j = 0; j < model.columnCount(); ++j) {
@@ -1771,10 +1757,10 @@ void tst_QItemSelectionModel::modelLayoutChanged()
// verify that selection is as expected
QItemSelection selection = selectionModel.selection();
- QCOMPARE(selection.count(), expectedSelectedRanges.count());
+ QCOMPARE(selection.size(), expectedSelectedRanges.size());
QCOMPARE(selectionModel.hasSelection(), !expectedSelectedRanges.isEmpty());
- for (int i = 0; i < expectedSelectedRanges.count(); ++i) {
+ for (int i = 0; i < expectedSelectedRanges.size(); ++i) {
IntPairPair expectedRange = expectedSelectedRanges.at(i);
IntPair expectedTl = expectedRange.first;
IntPair expectedBr = expectedRange.second;
@@ -1828,21 +1814,21 @@ void tst_QItemSelectionModel::selectedRows()
MyStandardItemModel model(rowCount, columnCount);
QItemSelectionModel selectionModel(&model);
- for (int i = 0; i < selectRows.count(); ++i)
+ for (int i = 0; i < selectRows.size(); ++i)
selectionModel.select(model.index(selectRows.at(i), 0),
QItemSelectionModel::Select
|QItemSelectionModel::Rows);
- for (int j = 0; j < selectRows.count(); ++j)
+ for (int j = 0; j < selectRows.size(); ++j)
QVERIFY(selectionModel.isRowSelected(expectedRows.at(j), QModelIndex()));
- for (int k = 0; k < selectRows.count(); ++k)
+ for (int k = 0; k < selectRows.size(); ++k)
QVERIFY(!selectionModel.isRowSelected(unexpectedRows.at(k), QModelIndex()));
QModelIndexList selectedRowIndexes = selectionModel.selectedRows(column);
- QCOMPARE(selectedRowIndexes.count(), expectedRows.count());
+ QCOMPARE(selectedRowIndexes.size(), expectedRows.size());
std::sort(selectedRowIndexes.begin(), selectedRowIndexes.end());
- for (int l = 0; l < selectedRowIndexes.count(); ++l) {
+ for (int l = 0; l < selectedRowIndexes.size(); ++l) {
QCOMPARE(selectedRowIndexes.at(l).row(), expectedRows.at(l));
QCOMPARE(selectedRowIndexes.at(l).column(), column);
}
@@ -1888,21 +1874,21 @@ void tst_QItemSelectionModel::selectedColumns()
MyStandardItemModel model(rowCount, columnCount);
QItemSelectionModel selectionModel(&model);
- for (int i = 0; i < selectColumns.count(); ++i)
+ for (int i = 0; i < selectColumns.size(); ++i)
selectionModel.select(model.index(0, selectColumns.at(i)),
QItemSelectionModel::Select
|QItemSelectionModel::Columns);
- for (int j = 0; j < selectColumns.count(); ++j)
+ for (int j = 0; j < selectColumns.size(); ++j)
QVERIFY(selectionModel.isColumnSelected(expectedColumns.at(j), QModelIndex()));
- for (int k = 0; k < selectColumns.count(); ++k)
+ for (int k = 0; k < selectColumns.size(); ++k)
QVERIFY(!selectionModel.isColumnSelected(unexpectedColumns.at(k), QModelIndex()));
QModelIndexList selectedColumnIndexes = selectionModel.selectedColumns(row);
- QCOMPARE(selectedColumnIndexes.count(), expectedColumns.count());
+ QCOMPARE(selectedColumnIndexes.size(), expectedColumns.size());
std::sort(selectedColumnIndexes.begin(), selectedColumnIndexes.end());
- for (int l = 0; l < selectedColumnIndexes.count(); ++l) {
+ for (int l = 0; l < selectedColumnIndexes.size(); ++l) {
QCOMPARE(selectedColumnIndexes.at(l).column(), expectedColumns.at(l));
QCOMPARE(selectedColumnIndexes.at(l).row(), row);
}
@@ -1933,18 +1919,18 @@ void tst_QItemSelectionModel::setCurrentIndex()
treemodel->index(0, 0, treemodel->index(1, 0)),
QItemSelectionModel::SelectCurrent);
- QCOMPARE(currentSpy.count(), 1);
- QCOMPARE(rowSpy.count(), 1);
- QCOMPARE(columnSpy.count(), 1);
+ QCOMPARE(currentSpy.size(), 1);
+ QCOMPARE(rowSpy.size(), 1);
+ QCOMPARE(columnSpy.size(), 1);
// Select another row in the same parent
selectionModel.setCurrentIndex(
treemodel->index(1, 0, treemodel->index(1, 0)),
QItemSelectionModel::SelectCurrent);
- QCOMPARE(currentSpy.count(), 2);
- QCOMPARE(rowSpy.count(), 2);
- QCOMPARE(columnSpy.count(), 1);
+ QCOMPARE(currentSpy.size(), 2);
+ QCOMPARE(rowSpy.size(), 2);
+ QCOMPARE(columnSpy.size(), 1);
}
void tst_QItemSelectionModel::splitOnInsert()
@@ -2068,14 +2054,14 @@ void tst_QItemSelectionModel::unselectable()
}
QItemSelectionModel selectionModel(&model);
selectionModel.select(QItemSelection(model.index(0, 0), model.index(9, 0)), QItemSelectionModel::Select);
- QCOMPARE(selectionModel.selectedIndexes().count(), 10);
- QCOMPARE(selectionModel.selectedRows().count(), 10);
+ QCOMPARE(selectionModel.selectedIndexes().size(), 10);
+ QCOMPARE(selectionModel.selectedRows().size(), 10);
QVERIFY(selectionModel.hasSelection());
for (int j = 0; j < 10; ++j)
model.item(j)->setFlags({ });
QVERIFY(!selectionModel.hasSelection());
- QCOMPARE(selectionModel.selectedIndexes().count(), 0);
- QCOMPARE(selectionModel.selectedRows().count(), 0);
+ QCOMPARE(selectionModel.selectedIndexes().size(), 0);
+ QCOMPARE(selectionModel.selectedRows().size(), 0);
}
void tst_QItemSelectionModel::selectedIndexes()
@@ -2089,8 +2075,8 @@ void tst_QItemSelectionModel::selectedIndexes()
//we select the 1st row
selectionModel.select(selection, QItemSelectionModel::Rows | QItemSelectionModel::Select);
- QCOMPARE(selectionModel.selectedRows().count(), 1);
- QCOMPARE(selectionModel.selectedIndexes().count(), model.columnCount());
+ QCOMPARE(selectionModel.selectedRows().size(), 1);
+ QCOMPARE(selectionModel.selectedIndexes().size(), model.columnCount());
}
@@ -2128,14 +2114,14 @@ void tst_QItemSelectionModel::layoutChanged()
QtTestTableModel model(1,1);
QItemSelectionModel selectionModel(&model);
selectionModel.select(model.index(0,0), QItemSelectionModel::Select);
- QCOMPARE(selectionModel.selectedIndexes().count() , 1);
+ QCOMPARE(selectionModel.selectedIndexes().size() , 1);
emit model.layoutAboutToBeChanged();
model.row_count = 5;
emit model.layoutChanged();
//The selection should not change.
- QCOMPARE(selectionModel.selectedIndexes().count() , 1);
+ QCOMPARE(selectionModel.selectedIndexes().size() , 1);
QCOMPARE(selectionModel.selectedIndexes().first() , model.index(0,0));
}
@@ -2215,7 +2201,7 @@ void tst_QItemSelectionModel::isRowSelected()
model.setData(model.index(0,0), 0, Qt::UserRole - 1);
QItemSelectionModel sel(&model);
sel.select( QItemSelection(model.index(0,0), model.index(0, 1)), QItemSelectionModel::Select);
- QCOMPARE(sel.selectedIndexes().count(), 1);
+ QCOMPARE(sel.selectedIndexes().size(), 1);
QVERIFY(sel.isRowSelected(0, QModelIndex()));
}
@@ -2240,7 +2226,7 @@ void tst_QItemSelectionModel::childrenDeselectionSignal()
QSignalSpy deselectSpy(&selectionModel, &QItemSelectionModel::selectionChanged);
QVERIFY(deselectSpy.isValid());
model.removeRows(0, 1, root);
- QCOMPARE(deselectSpy.count(), 1);
+ QCOMPARE(deselectSpy.size(), 1);
// More testing stress for the patch.
model.clear();
@@ -2269,7 +2255,7 @@ void tst_QItemSelectionModel::childrenDeselectionSignal()
QVERIFY(selectionModel.selection().contains(sel2));
deselectSpy.clear();
model.removeRow(0, model.index(0, 0));
- QCOMPARE(deselectSpy.count(), 1);
+ QCOMPARE(deselectSpy.size(), 1);
QVERIFY(!selectionModel.selection().contains(sel));
QVERIFY(selectionModel.selection().contains(sel2));
}
@@ -2291,7 +2277,7 @@ void tst_QItemSelectionModel::layoutChangedWithAllSelected1()
selection.select(QItemSelection(indexList.first(), indexList.last()), QItemSelectionModel::Select);
//let's check the selection hasn't changed
- QCOMPARE(selection.selectedIndexes().count(), indexList.count());
+ QCOMPARE(selection.selectedIndexes().size(), indexList.size());
for (const auto &index : indexList)
QVERIFY(selection.isSelected(index));
@@ -2299,7 +2285,7 @@ void tst_QItemSelectionModel::layoutChangedWithAllSelected1()
QCOMPARE(proxy.rowCount(), 3);
//let's check the selection hasn't changed
- QCOMPARE(selection.selectedIndexes().count(), indexList.count());
+ QCOMPARE(selection.selectedIndexes().size(), indexList.size());
for (const auto &index : indexList)
QVERIFY(selection.isSelected(index));
}
@@ -2348,7 +2334,7 @@ void tst_QItemSelectionModel::layoutChangedWithAllSelected2()
QCOMPARE(proxy.rowCount(), int(cNumRows));
//let's check the selection hasn't changed
- QCOMPARE(selection.selectedIndexes().count(), indexList.count());
+ QCOMPARE(selection.selectedIndexes().size(), indexList.size());
for (const auto &index : indexList)
QVERIFY(selection.isSelected(index));
}
@@ -2372,11 +2358,11 @@ void tst_QItemSelectionModel::layoutChangedTreeSelection()
selModel.select(sub23.index(), QItemSelectionModel::Select);
QModelIndexList list = selModel.selectedIndexes();
- QCOMPARE(list.count(), 4);
+ QCOMPARE(list.size(), 4);
model.sort(0); //this will provoke a relayout
- QCOMPARE(selModel.selectedIndexes().count(), 4);
+ QCOMPARE(selModel.selectedIndexes().size(), 4);
}
class RemovalObserver : public QObject
@@ -2435,7 +2421,7 @@ void tst_QItemSelectionModel::setModel()
QStringListModel model(QStringList() << "Blah" << "Blah" << "Blah");
sel.setModel(&model);
QCOMPARE(sel.model(), &model);
- QCOMPARE(modelChangedSpy.count(), 1);
+ QCOMPARE(modelChangedSpy.size(), 1);
sel.select(model.index(0), QItemSelectionModel::Select);
QVERIFY(!sel.selection().isEmpty());
sel.setModel(0);
@@ -2735,6 +2721,9 @@ void tst_QItemSelectionModel::QTBUG48402()
model.removeRows(removeTop, removeBottom - removeTop + 1);
QCOMPARE(QItemSelectionRange(helper.tl, helper.br), QItemSelectionRange(dtl, dbr));
+ QT_TEST_EQUALITY_OPS(QItemSelectionRange(helper.tl, helper.br), QItemSelectionRange(dtl, dbr), true);
+ QT_TEST_EQUALITY_OPS(QItemSelectionRange(), QItemSelectionRange(), true);
+ QT_TEST_EQUALITY_OPS(QItemSelectionRange(helper.tl, helper.br), QItemSelectionRange(), false);
}
void tst_QItemSelectionModel::QTBUG58851_data()
@@ -2802,7 +2791,7 @@ void tst_QItemSelectionModel::QTBUG58851()
QVERIFY(selections.isSelected(i));
}
proxy.sort(1, Qt::DescendingOrder);
- QCOMPARE(selections.selectedIndexes().count(), (int)expectedSelectedIndexes.size());
+ QCOMPARE(selections.selectedIndexes().size(), (int)expectedSelectedIndexes.size());
for (const QPersistentModelIndex &i : expectedSelectedIndexes) {
QVERIFY(selections.isSelected(i));
}
@@ -2876,12 +2865,12 @@ void tst_QItemSelectionModel::QTBUG18001()
QItemSelectionModel selectionModel(&model);
- for (int i = 0; i < indexesToSelect.count(); ++i) {
+ for (int i = 0; i < indexesToSelect.size(); ++i) {
QModelIndex idx = model.index( indexesToSelect.at(i).first, indexesToSelect.at(i).second );
selectionModel.select(idx, QItemSelectionModel::SelectionFlag(selectionCommands.at(i)));
}
- for (int i = 0; i < expectedSelectedRows.count(); ++i) {
+ for (int i = 0; i < expectedSelectedRows.size(); ++i) {
const bool expected = expectedSelectedRows.at(i);
const bool actual = selectionModel.isRowSelected(i, QModelIndex());
QByteArray description = QByteArray("Row ") + QByteArray::number(i)
@@ -2890,7 +2879,7 @@ void tst_QItemSelectionModel::QTBUG18001()
QVERIFY2(expected == actual, description.data());
}
- for (int i = 0; i < expectedSelectedColums.count(); ++i) {
+ for (int i = 0; i < expectedSelectedColums.size(); ++i) {
const bool expected = expectedSelectedColums.at(i);
const bool actual = selectionModel.isColumnSelected(i, QModelIndex());
QByteArray description = QByteArray("Col ") + QByteArray::number(i)
@@ -2913,7 +2902,7 @@ void tst_QItemSelectionModel::QTBUG93305()
QModelIndex index = model->index(1, 0, QModelIndex());
selection->select(index, QItemSelectionModel::ClearAndSelect);
QVERIFY(selection->hasSelection());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
// removing row 0 does not change which cells are selected, but it
// does change the row number of the selected cells. Thus it changes
@@ -2924,7 +2913,7 @@ void tst_QItemSelectionModel::QTBUG93305()
// delete row 0
model->removeRows(0, 1, QModelIndex());
QVERIFY(selection->hasSelection());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
// inserting a row before the first row again does not change which cells
// are selected, but does change the row number of the selected cells.
@@ -2934,12 +2923,60 @@ void tst_QItemSelectionModel::QTBUG93305()
// insert row 0 again
model->insertRows(0, 1, QModelIndex());
QVERIFY(selection->hasSelection());
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
// test for inserting multiple (6) rows
model->insertRows(0, 6, QModelIndex());
QVERIFY(selection->hasSelection());
- QCOMPARE(spy.count(), 4);
+ QCOMPARE(spy.size(), 4);
+}
+
+static void (*oldMessageHandler)(QtMsgType, const QMessageLogContext&, const QString&);
+static bool signalError = false;
+
+// detect disconnect warning:
+// qt.core.qobject.connect: QObject::disconnect: No such signal
+void tst_QItemSelectionModel::messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
+{
+ Q_ASSERT(oldMessageHandler);
+
+ if (type == QtWarningMsg
+ && QString(context.category) == "qt.core.qobject.connect"
+ && msg.contains("No such")) {
+ signalError = true;
+ }
+
+ return oldMessageHandler(type, context, msg);
+}
+
+void tst_QItemSelectionModel::testSignalsDisconnection()
+{
+ oldMessageHandler = qInstallMessageHandler(messageHandler);
+ auto resetMessageHandler = qScopeGuard([] { qInstallMessageHandler(oldMessageHandler); });
+ auto *newModel = new QStandardItemModel(model);
+ selection->setModel(newModel);
+ QSignalSpy spy(newModel, &QObject::destroyed);
+ delete newModel;
+ QTRY_COMPARE(spy.count(), 1);
+ qDebug() << spy;
+ selection->setModel(nullptr);
+ QVERIFY(!signalError);
+}
+
+void tst_QItemSelectionModel::destroyModel()
+{
+ auto itemModel = std::make_unique<QStandardItemModel>(5, 5);
+ auto selectionModel = std::make_unique<QItemSelectionModel>();
+ selectionModel->setModel(itemModel.get());
+ selectionModel->select(itemModel->index(0, 0), QItemSelectionModel::Select);
+ QVERIFY(!selectionModel->selection().isEmpty());
+ selectionModel->setCurrentIndex(itemModel->index(1, 0), QItemSelectionModel::Select);
+ QVERIFY(selectionModel->currentIndex().isValid());
+
+ QTest::failOnWarning(QRegularExpression(".*"));
+ itemModel.reset();
+ QVERIFY(!selectionModel->currentIndex().isValid());
+ QVERIFY(selectionModel->selection().isEmpty());
}
QTEST_MAIN(tst_QItemSelectionModel)
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/CMakeLists.txt b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/CMakeLists.txt
index 25c8553088..5427c52e78 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/CMakeLists.txt
@@ -1,7 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qsortfilterproxymodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsortfilterproxymodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsortfilterproxymodel
SOURCES
../../../other/qabstractitemmodelutils/dynamictreemodel.cpp ../../../other/qabstractitemmodelutils/dynamictreemodel.h
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
index f07d324ce1..5a06a4a605 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "tst_qsortfilterproxymodel.h"
#include "dynamictreemodel.h"
@@ -87,6 +62,7 @@ void tst_QSortFilterProxyModel::cleanup()
m_proxy->sort(-1, Qt::AscendingOrder);
m_model->clear();
m_model->insertColumns(0, 1);
+ QCoreApplication::processEvents(); // cleanup possibly queued events
}
/*
@@ -241,16 +217,16 @@ void tst_QSortFilterProxyModel::sort()
// prepare model
QStandardItem *root = m_model->invisibleRootItem ();
QList<QStandardItem *> items;
- for (int i = 0; i < initial.count(); ++i) {
+ for (int i = 0; i < initial.size(); ++i) {
items.append(new QStandardItem(initial.at(i)));
}
root->insertRows(0, items);
- QCOMPARE(m_model->rowCount(QModelIndex()), initial.count());
+ QCOMPARE(m_model->rowCount(QModelIndex()), initial.size());
QCOMPARE(m_model->columnCount(QModelIndex()), 1);
// make sure the proxy is unsorted
QCOMPARE(m_proxy->columnCount(QModelIndex()), 1);
- QCOMPARE(m_proxy->rowCount(QModelIndex()), initial.count());
+ QCOMPARE(m_proxy->rowCount(QModelIndex()), initial.size());
for (int row = 0; row < m_proxy->rowCount(QModelIndex()); ++row) {
QModelIndex index = m_proxy->index(row, 0, QModelIndex());
QCOMPARE(m_proxy->data(index, Qt::DisplayRole).toString(), initial.at(row));
@@ -438,10 +414,10 @@ void tst_QSortFilterProxyModel::insertRows()
QFETCH(QStringList, insert);
QFETCH(int, position);
// prepare model
- m_model->insertRows(0, initial.count(), QModelIndex());
+ m_model->insertRows(0, initial.size(), QModelIndex());
//m_model->insertColumns(0, 1, QModelIndex());
QCOMPARE(m_model->columnCount(QModelIndex()), 1);
- QCOMPARE(m_model->rowCount(QModelIndex()), initial.count());
+ QCOMPARE(m_model->rowCount(QModelIndex()), initial.size());
for (int row = 0; row < m_model->rowCount(QModelIndex()); ++row) {
QModelIndex index = m_model->index(row, 0, QModelIndex());
m_model->setData(index, initial.at(row), Qt::DisplayRole);
@@ -458,12 +434,12 @@ void tst_QSortFilterProxyModel::insertRows()
}
// insert the row
- m_proxy->insertRows(position, insert.count(), QModelIndex());
- QCOMPARE(m_model->rowCount(QModelIndex()), expected.count());
- QCOMPARE(m_proxy->rowCount(QModelIndex()), expected.count());
+ m_proxy->insertRows(position, insert.size(), QModelIndex());
+ QCOMPARE(m_model->rowCount(QModelIndex()), expected.size());
+ QCOMPARE(m_proxy->rowCount(QModelIndex()), expected.size());
// set the data for the inserted row
- for (int i = 0; i < insert.count(); ++i) {
+ for (int i = 0; i < insert.size(); ++i) {
QModelIndex index = m_proxy->index(position + i, 0, QModelIndex());
m_proxy->setData(index, insert.at(i), Qt::DisplayRole);
}
@@ -852,8 +828,8 @@ void tst_QSortFilterProxyModel::removeRows()
// remove the rows
QCOMPARE(proxy.removeRows(position, count, QModelIndex()), success);
- QCOMPARE(model.rowCount(QModelIndex()), expectedSource.count());
- QCOMPARE(proxy.rowCount(QModelIndex()), expectedProxy.count());
+ QCOMPARE(model.rowCount(QModelIndex()), expectedSource.size());
+ QCOMPARE(proxy.rowCount(QModelIndex()), expectedProxy.size());
// make sure the model is correct after remove
for (int row = 0; row < model.rowCount(QModelIndex()); ++row)
@@ -1098,8 +1074,8 @@ void tst_QSortFilterProxyModel::removeColumns()
// remove the columns
QCOMPARE(proxy.removeColumns(position, count, QModelIndex()), success);
- QCOMPARE(model.columnCount(QModelIndex()), expectedSource.count());
- QCOMPARE(proxy.columnCount(QModelIndex()), expectedProxy.count());
+ QCOMPARE(model.columnCount(QModelIndex()), expectedSource.size());
+ QCOMPARE(proxy.columnCount(QModelIndex()), expectedProxy.size());
// make sure the model is correct after remove
for (int col = 0; col < model.columnCount(QModelIndex()); ++col)
@@ -1125,7 +1101,6 @@ void tst_QSortFilterProxyModel::filterColumns_data()
<< "bravo"
<< "lima")
<< true;
-
QTest::newRow("some") << "lie"
<< (QStringList()
<< "charlie"
@@ -1149,9 +1124,10 @@ void tst_QSortFilterProxyModel::filterColumns()
QFETCH(QStringList, initial);
QFETCH(bool, data);
// prepare model
- m_model->setColumnCount(initial.count());
+ m_model->setColumnCount(initial.size());
m_model->setRowCount(1);
- QCOMPARE(m_model->columnCount(QModelIndex()), initial.count());
+ QCoreApplication::processEvents(); // QAbstractProxyModel queues the headerDataChanged() signal
+ QCOMPARE(m_model->columnCount(QModelIndex()), initial.size());
QCOMPARE(m_model->rowCount(QModelIndex()), 1);
// set data
QCOMPARE(m_model->rowCount(QModelIndex()), 1);
@@ -1228,8 +1204,8 @@ void tst_QSortFilterProxyModel::filter()
QFETCH(QStringList, expected);
// prepare model
- QVERIFY(m_model->insertRows(0, initial.count(), QModelIndex()));
- QCOMPARE(m_model->rowCount(QModelIndex()), initial.count());
+ QVERIFY(m_model->insertRows(0, initial.size(), QModelIndex()));
+ QCOMPARE(m_model->rowCount(QModelIndex()), initial.size());
// set data
QCOMPARE(m_model->columnCount(QModelIndex()), 1);
for (int row = 0; row < m_model->rowCount(QModelIndex()); ++row) {
@@ -1239,7 +1215,7 @@ void tst_QSortFilterProxyModel::filter()
setupFilter(m_proxy, pattern);
// make sure the proxy is unfiltered
QCOMPARE(m_proxy->columnCount(QModelIndex()), 1);
- QCOMPARE(m_proxy->rowCount(QModelIndex()), expected.count());
+ QCOMPARE(m_proxy->rowCount(QModelIndex()), expected.size());
// make sure the model is unchanged
for (int row = 0; row < m_model->rowCount(QModelIndex()); ++row) {
QModelIndex index = m_model->index(row, 0, QModelIndex());
@@ -1282,22 +1258,19 @@ void tst_QSortFilterProxyModel::filterHierarchy()
void tst_QSortFilterProxyModel::buildHierarchy(const QStringList &l, QAbstractItemModel *m)
{
- int ind = 0;
int row = 0;
QStack<int> row_stack;
QModelIndex parent;
QStack<QModelIndex> parent_stack;
- for (int i = 0; i < l.count(); ++i) {
+ for (int i = 0; i < l.size(); ++i) {
QString token = l.at(i);
if (token == QLatin1String("<")) { // start table
- ++ind;
parent_stack.push(parent);
row_stack.push(row);
parent = m->index(row - 1, 0, parent);
row = 0;
QVERIFY(m->insertColumns(0, 1, parent)); // add column
} else if (token == QLatin1String(">")) { // end table
- --ind;
parent = parent_stack.pop();
row = row_stack.pop();
} else { // append row
@@ -1313,21 +1286,18 @@ void tst_QSortFilterProxyModel::buildHierarchy(const QStringList &l, QAbstractIt
void tst_QSortFilterProxyModel::checkHierarchy(const QStringList &l, const QAbstractItemModel *m)
{
int row = 0;
- int indent = 0;
QStack<int> row_stack;
QModelIndex parent;
QStack<QModelIndex> parent_stack;
- for (int i = 0; i < l.count(); ++i) {
+ for (int i = 0; i < l.size(); ++i) {
QString token = l.at(i);
if (token == QLatin1String("<")) { // start table
- ++indent;
parent_stack.push(parent);
row_stack.push(row);
parent = m->index(row - 1, 0, parent);
QVERIFY(parent.isValid());
row = 0;
} else if (token == QLatin1String(">")) { // end table
- --indent;
parent = parent_stack.pop();
row = row_stack.pop();
} else { // compare row
@@ -1427,9 +1397,9 @@ void tst_QSortFilterProxyModel::filterCurrent()
QVERIFY(spy.isValid());
view.setCurrentIndex(proxy.index(0, 0));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
setupFilter(&proxy, QLatin1String("^B"));
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_QSortFilterProxyModel::filter_qtbug30662()
@@ -1497,7 +1467,7 @@ void tst_QSortFilterProxyModel::changeSourceLayoutFilteredOut()
// Filter everything out
setupFilter(&proxy, QLatin1String("c"));
- QCOMPARE(removeSpy.count(), 1);
+ QCOMPARE(removeSpy.size(), 1);
QCOMPARE(0, proxy.rowCount());
// change layout of source model
@@ -1507,7 +1477,7 @@ void tst_QSortFilterProxyModel::changeSourceLayoutFilteredOut()
// Remove filter; we expect an insert
setupFilter(&proxy, "");
- QCOMPARE(insertSpy.count(), 1);
+ QCOMPARE(insertSpy.size(), 1);
QCOMPARE(beforeSortFilter, proxy.rowCount());
}
@@ -1586,9 +1556,9 @@ void tst_QSortFilterProxyModel::removeSourceRows()
proxy.setSourceModel(&model);
model.insertColumns(0, 1);
- model.insertRows(0, sourceItems.count());
+ model.insertRows(0, sourceItems.size());
- for (int i = 0; i < sourceItems.count(); ++i) {
+ for (int i = 0; i < sourceItems.size(); ++i) {
QModelIndex sindex = model.index(i, 0, QModelIndex());
model.setData(sindex, sourceItems.at(i), Qt::DisplayRole);
QModelIndex pindex = proxy.index(i, 0, QModelIndex());
@@ -1611,16 +1581,16 @@ void tst_QSortFilterProxyModel::removeSourceRows()
model.removeRows(start, count, QModelIndex());
- QCOMPARE(aboutToRemoveSpy.count(), expectedRemovedProxyIntervals.count());
- for (int i = 0; i < aboutToRemoveSpy.count(); ++i) {
+ QCOMPARE(aboutToRemoveSpy.size(), expectedRemovedProxyIntervals.size());
+ for (int i = 0; i < aboutToRemoveSpy.size(); ++i) {
const auto &args = aboutToRemoveSpy.at(i);
QCOMPARE(args.at(1).userType(), QMetaType::Int);
QCOMPARE(args.at(2).userType(), QMetaType::Int);
QCOMPARE(args.at(1).toInt(), expectedRemovedProxyIntervals.at(i).first);
QCOMPARE(args.at(2).toInt(), expectedRemovedProxyIntervals.at(i).second);
}
- QCOMPARE(removeSpy.count(), expectedRemovedProxyIntervals.count());
- for (int i = 0; i < removeSpy.count(); ++i) {
+ QCOMPARE(removeSpy.size(), expectedRemovedProxyIntervals.size());
+ for (int i = 0; i < removeSpy.size(); ++i) {
const auto &args = removeSpy.at(i);
QCOMPARE(args.at(1).userType(), QMetaType::Int);
QCOMPARE(args.at(2).userType(), QMetaType::Int);
@@ -1628,11 +1598,11 @@ void tst_QSortFilterProxyModel::removeSourceRows()
QCOMPARE(args.at(2).toInt(), expectedRemovedProxyIntervals.at(i).second);
}
- QCOMPARE(insertSpy.count(), 0);
- QCOMPARE(aboutToInsertSpy.count(), 0);
+ QCOMPARE(insertSpy.size(), 0);
+ QCOMPARE(aboutToInsertSpy.size(), 0);
- QCOMPARE(proxy.rowCount(QModelIndex()), expectedProxyItems.count());
- for (int i = 0; i < expectedProxyItems.count(); ++i) {
+ QCOMPARE(proxy.rowCount(QModelIndex()), expectedProxyItems.size());
+ for (int i = 0; i < expectedProxyItems.size(); ++i) {
QModelIndex pindex = proxy.index(i, 0, QModelIndex());
QCOMPARE(proxy.data(pindex, Qt::DisplayRole).toString(), expectedProxyItems.at(i));
}
@@ -1679,9 +1649,9 @@ void tst_QSortFilterProxyModel::insertSourceRows()
proxy.setSourceModel(&model);
model.insertColumns(0, 1);
- model.insertRows(0, sourceItems.count());
+ model.insertRows(0, sourceItems.size());
- for (int i = 0; i < sourceItems.count(); ++i) {
+ for (int i = 0; i < sourceItems.size(); ++i) {
QModelIndex index = model.index(i, 0, QModelIndex());
model.setData(index, sourceItems.at(i), Qt::DisplayRole);
}
@@ -1691,13 +1661,13 @@ void tst_QSortFilterProxyModel::insertSourceRows()
model.insertRows(start, newItems.size(), QModelIndex());
- QCOMPARE(proxy.rowCount(QModelIndex()), proxyItems.count());
- for (int i = 0; i < newItems.count(); ++i) {
+ QCOMPARE(proxy.rowCount(QModelIndex()), proxyItems.size());
+ for (int i = 0; i < newItems.size(); ++i) {
QModelIndex index = model.index(start + i, 0, QModelIndex());
model.setData(index, newItems.at(i), Qt::DisplayRole);
}
- for (int i = 0; i < proxyItems.count(); ++i) {
+ for (int i = 0; i < proxyItems.size(); ++i) {
QModelIndex index = proxy.index(i, 0, QModelIndex());
QCOMPARE(proxy.data(index, Qt::DisplayRole).toString(), proxyItems.at(i));
}
@@ -1770,9 +1740,9 @@ void tst_QSortFilterProxyModel::changeFilter()
proxy.setSourceModel(&model);
model.insertColumns(0, 1);
- model.insertRows(0, sourceItems.count());
+ model.insertRows(0, sourceItems.size());
- for (int i = 0; i < sourceItems.count(); ++i) {
+ for (int i = 0; i < sourceItems.size(); ++i) {
QModelIndex index = model.index(i, 0, QModelIndex());
model.setData(index, sourceItems.at(i), Qt::DisplayRole);
}
@@ -1788,9 +1758,9 @@ void tst_QSortFilterProxyModel::changeFilter()
setupFilter(&proxy, initialFilter);
- QCOMPARE(initialRemoveSpy.count(), initialRemoveIntervals.count());
- QCOMPARE(initialInsertSpy.count(), 0);
- for (int i = 0; i < initialRemoveSpy.count(); ++i) {
+ QCOMPARE(initialRemoveSpy.size(), initialRemoveIntervals.size());
+ QCOMPARE(initialInsertSpy.size(), 0);
+ for (int i = 0; i < initialRemoveSpy.size(); ++i) {
const auto &args = initialRemoveSpy.at(i);
QCOMPARE(args.at(1).userType(), QMetaType::Int);
QCOMPARE(args.at(2).userType(), QMetaType::Int);
@@ -1798,8 +1768,8 @@ void tst_QSortFilterProxyModel::changeFilter()
QCOMPARE(args.at(2).toInt(), initialRemoveIntervals.at(i).second);
}
- QCOMPARE(proxy.rowCount(QModelIndex()), initialProxyItems.count());
- for (int i = 0; i < initialProxyItems.count(); ++i) {
+ QCOMPARE(proxy.rowCount(QModelIndex()), initialProxyItems.size());
+ for (int i = 0; i < initialProxyItems.size(); ++i) {
QModelIndex index = proxy.index(i, 0, QModelIndex());
QCOMPARE(proxy.data(index, Qt::DisplayRole).toString(), initialProxyItems.at(i));
}
@@ -1812,8 +1782,8 @@ void tst_QSortFilterProxyModel::changeFilter()
setupFilter(&proxy, finalFilter);
- QCOMPARE(finalRemoveSpy.count(), finalRemoveIntervals.count());
- for (int i = 0; i < finalRemoveSpy.count(); ++i) {
+ QCOMPARE(finalRemoveSpy.size(), finalRemoveIntervals.size());
+ for (int i = 0; i < finalRemoveSpy.size(); ++i) {
const auto &args = finalRemoveSpy.at(i);
QCOMPARE(args.at(1).userType(), QMetaType::Int);
QCOMPARE(args.at(2).userType(), QMetaType::Int);
@@ -1821,8 +1791,8 @@ void tst_QSortFilterProxyModel::changeFilter()
QCOMPARE(args.at(2).toInt(), finalRemoveIntervals.at(i).second);
}
- QCOMPARE(finalInsertSpy.count(), insertIntervals.count());
- for (int i = 0; i < finalInsertSpy.count(); ++i) {
+ QCOMPARE(finalInsertSpy.size(), insertIntervals.size());
+ for (int i = 0; i < finalInsertSpy.size(); ++i) {
const auto &args = finalInsertSpy.at(i);
QCOMPARE(args.at(1).userType(), QMetaType::Int);
QCOMPARE(args.at(2).userType(), QMetaType::Int);
@@ -1830,8 +1800,8 @@ void tst_QSortFilterProxyModel::changeFilter()
QCOMPARE(args.at(2).toInt(), insertIntervals.at(i).second);
}
- QCOMPARE(proxy.rowCount(QModelIndex()), finalProxyItems.count());
- for (int i = 0; i < finalProxyItems.count(); ++i) {
+ QCOMPARE(proxy.rowCount(QModelIndex()), finalProxyItems.size());
+ for (int i = 0; i < finalProxyItems.size(); ++i) {
QModelIndex index = proxy.index(i, 0, QModelIndex());
QCOMPARE(proxy.data(index, Qt::DisplayRole).toString(), finalProxyItems.at(i));
}
@@ -1994,9 +1964,9 @@ void tst_QSortFilterProxyModel::changeSourceData()
proxy.setDynamicSortFilter(dynamic);
proxy.setSourceModel(&model);
model.insertColumns(0, 1);
- model.insertRows(0, sourceItems.count());
+ model.insertRows(0, sourceItems.size());
- for (int i = 0; i < sourceItems.count(); ++i) {
+ for (int i = 0; i < sourceItems.size(); ++i) {
QModelIndex index = model.index(i, 0, QModelIndex());
model.setData(index, sourceItems.at(i), Qt::DisplayRole);
}
@@ -2006,8 +1976,8 @@ void tst_QSortFilterProxyModel::changeSourceData()
setupFilter(&proxy, filter);
- QCOMPARE(proxy.rowCount(), expectedInitialProxyItems.count());
- for (int i = 0; i < expectedInitialProxyItems.count(); ++i) {
+ QCOMPARE(proxy.rowCount(), expectedInitialProxyItems.size());
+ for (int i = 0; i < expectedInitialProxyItems.size(); ++i) {
const QModelIndex index = proxy.index(i, 0, QModelIndex());
QCOMPARE(proxy.data(index, Qt::DisplayRole).toString(), expectedInitialProxyItems.at(i));
}
@@ -2027,8 +1997,8 @@ void tst_QSortFilterProxyModel::changeSourceData()
model.setData(index, newValue, Qt::DisplayRole);
}
- QCOMPARE(removeSpy.count(), removeIntervals.count());
- for (int i = 0; i < removeSpy.count(); ++i) {
+ QCOMPARE(removeSpy.size(), removeIntervals.size());
+ for (int i = 0; i < removeSpy.size(); ++i) {
const auto &args = removeSpy.at(i);
QCOMPARE(args.at(1).userType(), QMetaType::Int);
QCOMPARE(args.at(2).userType(), QMetaType::Int);
@@ -2036,8 +2006,8 @@ void tst_QSortFilterProxyModel::changeSourceData()
QCOMPARE(args.at(2).toInt(), removeIntervals.at(i).second);
}
- QCOMPARE(insertSpy.count(), insertIntervals.count());
- for (int i = 0; i < insertSpy.count(); ++i) {
+ QCOMPARE(insertSpy.size(), insertIntervals.size());
+ for (int i = 0; i < insertSpy.size(); ++i) {
const auto &args = insertSpy.at(i);
QCOMPARE(args.at(1).userType(), QMetaType::Int);
QCOMPARE(args.at(2).userType(), QMetaType::Int);
@@ -2045,29 +2015,29 @@ void tst_QSortFilterProxyModel::changeSourceData()
QCOMPARE(args.at(2).toInt(), insertIntervals.at(i).second);
}
- QCOMPARE(proxy.rowCount(QModelIndex()), proxyItems.count());
- for (int i = 0; i < proxyItems.count(); ++i) {
+ QCOMPARE(proxy.rowCount(QModelIndex()), proxyItems.size());
+ for (int i = 0; i < proxyItems.size(); ++i) {
QModelIndex index = proxy.index(i, 0, QModelIndex());
QCOMPARE(proxy.data(index, Qt::DisplayRole).toString(), proxyItems.at(i));
}
if (expectedDataChangedRow == -1) {
- QCOMPARE(dataChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.size(), 0);
} else {
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
const QModelIndex idx = dataChangedSpy.at(0).at(0).value<QModelIndex>();
QCOMPARE(idx.row(), expectedDataChangedRow);
QCOMPARE(idx.column(), 0);
}
- QCOMPARE(layoutChangedSpy.count(), expectedLayoutChanged ? 1 : 0);
+ QCOMPARE(layoutChangedSpy.size(), expectedLayoutChanged ? 1 : 0);
}
// Checks that the model is a table, and that each and every row is like this:
// i-th row: ( rows.at(i), i )
static void checkSortedTableModel(const QAbstractItemModel *model, const QStringList &rows)
{
- QCOMPARE(model->rowCount(), rows.length());
+ QCOMPARE(model->rowCount(), rows.size());
QCOMPARE(model->columnCount(), 2);
for (int row = 0; row < model->rowCount(); ++row) {
@@ -2091,7 +2061,7 @@ void tst_QSortFilterProxyModel::changeSourceDataKeepsStableSorting_qtbug1548()
// Build a table of pairs (string, #row) in each row
QStandardItemModel model(0, 2);
- for (int rowNumber = 0; rowNumber < rows.length(); ++rowNumber) {
+ for (int rowNumber = 0; rowNumber < rows.size(); ++rowNumber) {
QStandardItem *column0 = new QStandardItem(rows.at(rowNumber));
column0->setCheckable(true);
column0->setCheckState(Qt::Unchecked);
@@ -2145,7 +2115,7 @@ void tst_QSortFilterProxyModel::changeSourceDataForwardsRoles_qtbug35440()
QSignalSpy spy(&proxy, &QAbstractItemModel::dataChanged);
QVERIFY(spy.isValid());
- QCOMPARE(spy.length(), 0);
+ QCOMPARE(spy.size(), 0);
QModelIndex index;
@@ -2158,13 +2128,13 @@ void tst_QSortFilterProxyModel::changeSourceDataForwardsRoles_qtbug35440()
index = model.index(0, 0);
QVERIFY(index.isValid());
model.setData(index, QStringLiteral("teststring"), Qt::DisplayRole);
- QCOMPARE(spy.length(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(2).value<QList<int> >(), expectedChangedRoles);
index = model.index(1, 0);
QVERIFY(index.isValid());
model.setData(index, QStringLiteral("teststring2"), Qt::EditRole);
- QCOMPARE(spy.length(), 2);
+ QCOMPARE(spy.size(), 2);
QCOMPARE(spy.at(1).at(2).value<QList<int> >(), expectedChangedRoles);
}
@@ -2411,8 +2381,8 @@ void tst_QSortFilterProxyModel::sortFilterRole()
const QList<int> orderedItems({2, 1});
- model.insertRows(0, sourceItems.count());
- for (int i = 0; i < sourceItems.count(); ++i) {
+ model.insertRows(0, sourceItems.size());
+ for (int i = 0; i < sourceItems.size(); ++i) {
QModelIndex index = model.index(i, 0, QModelIndex());
model.setData(index, sourceItems.at(i).first, Qt::DisplayRole);
model.setData(index, sourceItems.at(i).second, Qt::UserRole);
@@ -2442,7 +2412,7 @@ void tst_QSortFilterProxyModel::sortFilterRole()
proxy.setFilterRole(Qt::DisplayRole);
setupFilter(&proxy, QLatin1String("a|c"));
- QCOMPARE(proxy.rowCount(), orderedItems.count());
+ QCOMPARE(proxy.rowCount(), orderedItems.size());
for (int i = 0; i < proxy.rowCount(); ++i) {
QModelIndex index = proxy.index(i, 0, QModelIndex());
QCOMPARE(proxy.data(index, Qt::DisplayRole), sourceItems.at(orderedItems.at(i)).first);
@@ -2464,10 +2434,10 @@ void tst_QSortFilterProxyModel::selectionFilteredOut()
QVERIFY(spy.isValid());
view.setCurrentIndex(proxy.index(0, 0));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
setupFilter(&proxy, QLatin1String("^B"));
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_QSortFilterProxyModel::match_data()
@@ -2544,9 +2514,9 @@ void tst_QSortFilterProxyModel::match()
proxy.setSourceModel(&model);
model.insertColumns(0, 1);
- model.insertRows(0, sourceItems.count());
+ model.insertRows(0, sourceItems.size());
- for (int i = 0; i < sourceItems.count(); ++i) {
+ for (int i = 0; i < sourceItems.size(); ++i) {
QModelIndex index = model.index(i, 0, QModelIndex());
model.setData(index, sourceItems.at(i), Qt::DisplayRole);
}
@@ -2556,10 +2526,10 @@ void tst_QSortFilterProxyModel::match()
QModelIndex startIndex = proxy.index(proxyStartRow, 0);
QModelIndexList indexes = proxy.match(startIndex, Qt::DisplayRole, what,
- expectedProxyItems.count(),
+ expectedProxyItems.size(),
matchFlags);
- QCOMPARE(indexes.count(), expectedProxyItems.count());
- for (int i = 0; i < indexes.count(); ++i)
+ QCOMPARE(indexes.size(), expectedProxyItems.size());
+ for (int i = 0; i < indexes.size(); ++i)
QCOMPARE(indexes.at(i).row(), expectedProxyItems.at(i));
}
@@ -2622,13 +2592,13 @@ void tst_QSortFilterProxyModel::insertIntoChildrenlessItem()
QVERIFY(rowsInsertedSpy.isValid());
(void)proxy.rowCount(QModelIndex()); // force mapping of "a", "b", "c"
- QCOMPARE(colsInsertedSpy.count(), 0);
- QCOMPARE(rowsInsertedSpy.count(), 0);
+ QCOMPARE(colsInsertedSpy.size(), 0);
+ QCOMPARE(rowsInsertedSpy.size(), 0);
// now add a child to itemB ==> should get insert notification from the proxy
itemB->appendRow(new QStandardItem("a.0"));
- QCOMPARE(colsInsertedSpy.count(), 1);
- QCOMPARE(rowsInsertedSpy.count(), 1);
+ QCOMPARE(colsInsertedSpy.size(), 1);
+ QCOMPARE(rowsInsertedSpy.size(), 1);
QVariantList args = colsInsertedSpy.takeFirst();
QCOMPARE(qvariant_cast<QModelIndex>(args.at(0)), proxy.mapFromSource(itemB->index()));
@@ -2704,11 +2674,11 @@ void tst_QSortFilterProxyModel::insertRowIntoFilteredParent()
QStandardItem *itemB = new QStandardItem();
itemA->appendRow(itemB);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
itemA->removeRow(0);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QSortFilterProxyModel::filterOutParentAndFilterInChild()
@@ -2735,9 +2705,9 @@ void tst_QSortFilterProxyModel::filterOutParentAndFilterInChild()
setupFilter(&proxy, QLatin1String("C")); // A and B will be filtered out, C filtered in
// we should now have been notified that the subtree represented by itemA has been removed
- QCOMPARE(removedSpy.count(), 1);
+ QCOMPARE(removedSpy.size(), 1);
// we should NOT get any inserts; itemC should be filtered because its parent (itemA) is
- QCOMPARE(insertedSpy.count(), 0);
+ QCOMPARE(insertedSpy.size(), 0);
}
void tst_QSortFilterProxyModel::sourceInsertRows()
@@ -2830,13 +2800,13 @@ void tst_QSortFilterProxyModel::sortColumnTracking2()
model.insertColumn(0,items);
QCOMPARE(proxyModel.sortColumn(), 0);
QCOMPARE(proxyModel.data(proxyModel.index(0,0)).toString(),QString::fromLatin1("aa"));
- const int zzIndex = items.count() - 3; // 2 invalid at end.
+ const int zzIndex = items.size() - 3; // 2 invalid at end.
QCOMPARE(proxyModel.data(proxyModel.index(zzIndex,0)).toString(),QString::fromLatin1("zz"));
}
void tst_QSortFilterProxyModel::sortStable()
{
- QStandardItemModel* model = new QStandardItemModel(5, 2);
+ QStandardItemModel model(5, 2);
for (int r = 0; r < 5; r++) {
const QString prefix = QLatin1String("Row:") + QString::number(r) + QLatin1String(", Column:");
for (int c = 0; c < 2; c++) {
@@ -2845,24 +2815,24 @@ void tst_QSortFilterProxyModel::sortStable()
QStandardItem* child = new QStandardItem(QLatin1String("Item ") + QString::number(i));
item->appendRow( child );
}
- model->setItem(r, c, item);
+ model.setItem(r, c, item);
}
}
- model->setHorizontalHeaderItem( 0, new QStandardItem( "Name" ));
- model->setHorizontalHeaderItem( 1, new QStandardItem( "Value" ));
+ model.setHorizontalHeaderItem( 0, new QStandardItem( "Name" ));
+ model.setHorizontalHeaderItem( 1, new QStandardItem( "Value" ));
- QSortFilterProxyModel *filterModel = new QSortFilterProxyModel(model);
- filterModel->setSourceModel(model);
+ QSortFilterProxyModel *filterModel = new QSortFilterProxyModel(&model);
+ filterModel->setSourceModel(&model);
- QTreeView *view = new QTreeView;
- view->setModel(filterModel);
+ QTreeView view;
+ view.setModel(filterModel);
QModelIndex firstRoot = filterModel->index(0,0);
- view->expand(firstRoot);
- view->setSortingEnabled(true);
+ view.expand(firstRoot);
+ view.setSortingEnabled(true);
- view->model()->sort(1, Qt::DescendingOrder);
+ view.model()->sort(1, Qt::DescendingOrder);
QVariant lastItemData =filterModel->index(2,0, firstRoot).data();
- view->model()->sort(1, Qt::DescendingOrder);
+ view.model()->sort(1, Qt::DescendingOrder);
QCOMPARE(lastItemData, filterModel->index(2,0, firstRoot).data());
}
@@ -2922,16 +2892,16 @@ void tst_QSortFilterProxyModel::staticSorting()
// prepare model
QStandardItem *root = model.invisibleRootItem ();
QList<QStandardItem *> items;
- for (int i = 0; i < initial.count(); ++i) {
+ for (int i = 0; i < initial.size(); ++i) {
items.append(new QStandardItem(initial.at(i)));
}
root->insertRows(0, items);
- QCOMPARE(model.rowCount(QModelIndex()), initial.count());
+ QCOMPARE(model.rowCount(QModelIndex()), initial.size());
QCOMPARE(model.columnCount(QModelIndex()), 1);
// make sure the proxy is unsorted
QCOMPARE(proxy.columnCount(QModelIndex()), 1);
- QCOMPARE(proxy.rowCount(QModelIndex()), initial.count());
+ QCOMPARE(proxy.rowCount(QModelIndex()), initial.size());
for (int row = 0; row < proxy.rowCount(QModelIndex()); ++row) {
QModelIndex index = proxy.index(row, 0, QModelIndex());
QCOMPARE(proxy.data(index, Qt::DisplayRole).toString(), initial.at(row));
@@ -2981,7 +2951,7 @@ void tst_QSortFilterProxyModel::dynamicSorting()
QCOMPARE(proxy1.columnCount(QModelIndex()), 1);
//the model should not be sorted because sorting has not been set to dynamic yet.
- QCOMPARE(proxy1.rowCount(QModelIndex()), initial.count());
+ QCOMPARE(proxy1.rowCount(QModelIndex()), initial.size());
for (int row = 0; row < proxy1.rowCount(QModelIndex()); ++row) {
QModelIndex index = proxy1.index(row, 0, QModelIndex());
QCOMPARE(proxy1.data(index, Qt::DisplayRole).toString(), initial.at(row));
@@ -3197,7 +3167,8 @@ void tst_QSortFilterProxyModel::mapFromToSource()
QCOMPARE(proxy.mapFromSource(QModelIndex()), QModelIndex());
QCOMPARE(proxy.mapToSource(QModelIndex()), QModelIndex());
-#ifdef QT_NO_DEBUG //if Qt is compiled in debug mode, this will assert
+ // Will assert in debug, so only test in release
+#if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS)
QTest::ignoreMessage(QtWarningMsg, "QSortFilterProxyModel: index from wrong model passed to mapToSource");
QCOMPARE(proxy.mapToSource(source.index(2, 3)), QModelIndex());
QTest::ignoreMessage(QtWarningMsg, "QSortFilterProxyModel: index from wrong model passed to mapFromSource");
@@ -3238,25 +3209,25 @@ void tst_QSortFilterProxyModel::removeRowsRecursive()
QList<QPersistentModelIndex> sourceIndexes;
QList<QPersistentModelIndex> proxyIndexes;
- for (const auto item : qAsConst(items)) {
+ for (const auto item : std::as_const(items)) {
QModelIndex idx = item->index();
sourceIndexes << idx;
proxyIndexes << proxy.mapFromSource(idx);
}
- for (const auto &pidx : qAsConst(sourceIndexes))
+ for (const auto &pidx : std::as_const(sourceIndexes))
QVERIFY(pidx.isValid());
- for (const auto &pidx : qAsConst(proxyIndexes))
+ for (const auto &pidx : std::as_const(proxyIndexes))
QVERIFY(pidx.isValid());
QList<QStandardItem*> itemRow = pItem1->takeRow(0);
- QCOMPARE(itemRow.count(), 1);
+ QCOMPARE(itemRow.size(), 1);
QCOMPARE(itemRow.first(), pItem11);
- for (const auto &pidx : qAsConst(sourceIndexes))
+ for (const auto &pidx : std::as_const(sourceIndexes))
QVERIFY(!pidx.isValid());
- for (const auto &pidx : qAsConst(proxyIndexes))
+ for (const auto &pidx : std::as_const(proxyIndexes))
QVERIFY(!pidx.isValid());
delete pItem11;
@@ -3264,36 +3235,36 @@ void tst_QSortFilterProxyModel::removeRowsRecursive()
void tst_QSortFilterProxyModel::doubleProxySelectionSetSourceModel()
{
- QStandardItemModel *model1 = new QStandardItemModel;
- QStandardItem *parentItem = model1->invisibleRootItem();
+ QStandardItemModel model1;
+ QStandardItem *parentItem = model1.invisibleRootItem();
for (int i = 0; i < 4; ++i) {
QStandardItem *item = new QStandardItem(QLatin1String("model1 item ") + QString::number(i));
parentItem->appendRow(item);
parentItem = item;
}
- QStandardItemModel *model2 = new QStandardItemModel;
- QStandardItem *parentItem2 = model2->invisibleRootItem();
+ QStandardItemModel model2;
+ QStandardItem *parentItem2 = model2.invisibleRootItem();
for (int i = 0; i < 4; ++i) {
QStandardItem *item = new QStandardItem(QLatin1String("model2 item ") + QString::number(i));
parentItem2->appendRow(item);
parentItem2 = item;
}
- QSortFilterProxyModel *toggleProxy = new QSortFilterProxyModel;
- toggleProxy->setSourceModel(model1);
+ QSortFilterProxyModel toggleProxy;
+ toggleProxy.setSourceModel(&model1);
- QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel;
- proxyModel->setSourceModel(toggleProxy);
+ QSortFilterProxyModel proxyModel;
+ proxyModel.setSourceModel(&toggleProxy);
- QModelIndex mi = proxyModel->index(0, 0, proxyModel->index(0, 0, proxyModel->index(0, 0)));
- QItemSelectionModel ism(proxyModel);
+ QModelIndex mi = proxyModel.index(0, 0, proxyModel.index(0, 0, proxyModel.index(0, 0)));
+ QItemSelectionModel ism(&proxyModel);
ism.select(mi, QItemSelectionModel::Select);
QModelIndexList mil = ism.selectedIndexes();
- QCOMPARE(mil.count(), 1);
+ QCOMPARE(mil.size(), 1);
QCOMPARE(mil.first(), mi);
- toggleProxy->setSourceModel(model2);
+ toggleProxy.setSourceModel(&model2);
// No crash, it's good news!
QVERIFY(ism.selection().isEmpty());
}
@@ -3361,10 +3332,10 @@ void tst_QSortFilterProxyModel::appearsAndSort()
QCOMPARE(secondProxyModel.data(secondProxyModel.index(1,0), Qt::DisplayRole).toString(), QString::fromLatin1("b"));
QCOMPARE(secondProxyModel.data(secondProxyModel.index(2,0), Qt::DisplayRole).toString(), QString::fromLatin1("a"));
- QCOMPARE(spyAbout1.count(), 1);
- QCOMPARE(spyChanged1.count(), 1);
- QCOMPARE(spyAbout2.count(), 1);
- QCOMPARE(spyChanged2.count(), 1);
+ QCOMPARE(spyAbout1.size(), 1);
+ QCOMPARE(spyChanged1.size(), 1);
+ QCOMPARE(spyAbout2.size(), 1);
+ QCOMPARE(spyChanged2.size(), 1);
}
void tst_QSortFilterProxyModel::unnecessaryDynamicSorting()
@@ -4671,7 +4642,7 @@ public:
return lst.at(index.row());
return QVariant();
}
- int rowCount(const QModelIndex & = QModelIndex()) const override { return lst.count(); }
+ int rowCount(const QModelIndex & = QModelIndex()) const override { return lst.size(); }
void replaceData(const QStringList &newData)
{
@@ -4812,7 +4783,7 @@ void tst_QSortFilterProxyModel::removeIntervals()
model.replaceData(sourceItems);
proxy.setSourceModel(&model);
- for (int i = 0; i < sourceItems.count(); ++i) {
+ for (int i = 0; i < sourceItems.size(); ++i) {
QModelIndex sindex = model.index(i, 0, QModelIndex());
QModelIndex pindex = proxy.index(i, 0, QModelIndex());
QCOMPARE(proxy.data(pindex, Qt::DisplayRole), model.data(sindex, Qt::DisplayRole));
@@ -4837,16 +4808,16 @@ void tst_QSortFilterProxyModel::removeIntervals()
model.replaceData(replacementSourceItems);
- QCOMPARE(aboutToRemoveSpy.count(), expectedRemovedProxyIntervals.count());
- for (int i = 0; i < aboutToRemoveSpy.count(); ++i) {
+ QCOMPARE(aboutToRemoveSpy.size(), expectedRemovedProxyIntervals.size());
+ for (int i = 0; i < aboutToRemoveSpy.size(); ++i) {
const auto &args = aboutToRemoveSpy.at(i);
QCOMPARE(args.at(1).userType(), QMetaType::Int);
QCOMPARE(args.at(2).userType(), QMetaType::Int);
QCOMPARE(args.at(1).toInt(), expectedRemovedProxyIntervals.at(i).first);
QCOMPARE(args.at(2).toInt(), expectedRemovedProxyIntervals.at(i).second);
}
- QCOMPARE(removeSpy.count(), expectedRemovedProxyIntervals.count());
- for (int i = 0; i < removeSpy.count(); ++i) {
+ QCOMPARE(removeSpy.size(), expectedRemovedProxyIntervals.size());
+ for (int i = 0; i < removeSpy.size(); ++i) {
const auto &args = removeSpy.at(i);
QCOMPARE(args.at(1).userType(), QMetaType::Int);
QCOMPARE(args.at(2).userType(), QMetaType::Int);
@@ -4854,11 +4825,11 @@ void tst_QSortFilterProxyModel::removeIntervals()
QCOMPARE(args.at(2).toInt(), expectedRemovedProxyIntervals.at(i).second);
}
- QCOMPARE(insertSpy.count(), 0);
- QCOMPARE(aboutToInsertSpy.count(), 0);
+ QCOMPARE(insertSpy.size(), 0);
+ QCOMPARE(aboutToInsertSpy.size(), 0);
- QCOMPARE(proxy.rowCount(QModelIndex()), expectedProxyItems.count());
- for (int i = 0; i < expectedProxyItems.count(); ++i) {
+ QCOMPARE(proxy.rowCount(QModelIndex()), expectedProxyItems.size());
+ for (int i = 0; i < expectedProxyItems.size(); ++i) {
QModelIndex pindex = proxy.index(i, 0, QModelIndex());
QCOMPARE(proxy.data(pindex, Qt::DisplayRole).toString(), expectedProxyItems.at(i));
}
@@ -4885,7 +4856,7 @@ void tst_QSortFilterProxyModel::dynamicFilterWithoutSort()
QCOMPARE(model.stringList(), QStringList() << "Monday" << "Tuesday" << "Wednesday" << "Thursday" << "Friday");
- QCOMPARE(resetSpy.count(), 1);
+ QCOMPARE(resetSpy.size(), 1);
}
void tst_QSortFilterProxyModel::checkSetNewModel()
@@ -5138,7 +5109,7 @@ void tst_QSortFilterProxyModel::filterAndInsertRow()
QVERIFY(proxyModel.insertRow(row));
QCOMPARE(model.stringList(), expectedModelList);
- QCOMPARE(proxyModel.rowCount(), expectedProxyModelList.count());
+ QCOMPARE(proxyModel.rowCount(), expectedProxyModelList.size());
for (int r = 0; r < proxyModel.rowCount(); ++r) {
QModelIndex index = proxyModel.index(r, 0);
QVERIFY(index.isValid());
@@ -5411,7 +5382,7 @@ void tst_QSortFilterProxyModel::filterCaseSensitivityBinding()
QRegularExpression regExp("pattern", QRegularExpression::CaseInsensitiveOption);
proxyModel.setFilterRegularExpression(regExp);
QCOMPARE(proxyModel.filterCaseSensitivity(), Qt::CaseInsensitive);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(!proxyModel.bindableFilterCaseSensitivity().hasBinding());
}
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.h b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.h
index baad28ec06..088a5b552e 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.h
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef TST_QSORTFILTERPROXYMODEL_H
#define TST_QSORTFILTERPROXYMODEL_H
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/CMakeLists.txt b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/CMakeLists.txt
index 678a814224..2f08bf1b26 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/CMakeLists.txt
@@ -1,14 +1,19 @@
-# Generated from qsortfilterproxymodel_recursive.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsortfilterproxymodel_recursive Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsfpm_recursive LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsfpm_recursive
SOURCES
tst_qsortfilterproxymodel_recursive.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/tst_qsortfilterproxymodel_recursive.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/tst_qsortfilterproxymodel_recursive.cpp
index d6a09056ae..c6b24a489a 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/tst_qsortfilterproxymodel_recursive.cpp
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_recursive/tst_qsortfilterproxymodel_recursive.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, authors Filipe Azevedo <filipe.azevedo@kdab.com> and David Faure <david.faure@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) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, authors Filipe Azevedo <filipe.azevedo@kdab.com> and David Faure <david.faure@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSignalSpy>
@@ -144,7 +119,7 @@ static void fillModel(QStandardItemModel &model, const QString &str)
QCOMPARE(str.count('['), str.count(']'));
QStandardItem *item = nullptr;
QString data;
- for ( int i = 0 ; i < str.length() ; ++i ) {
+ for ( int i = 0 ; i < str.size() ; ++i ) {
const QChar ch = str.at(i);
if ((ch == '[' || ch == ']' || ch == ' ') && !data.isEmpty()) {
if (data.endsWith('*')) {
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/CMakeLists.txt b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/CMakeLists.txt
index 1f41f26a11..d82c2118b5 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/CMakeLists.txt
@@ -1,7 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qsortfilterproxymodel_regularexpression Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsfpm_regex LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsfpm_regex
SOURCES
tst_qsortfilterproxymodel_regularexpression.cpp
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/tst_qsortfilterproxymodel_regularexpression.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/tst_qsortfilterproxymodel_regularexpression.cpp
index 39376b3499..729da48c5e 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/tst_qsortfilterproxymodel_regularexpression.cpp
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel_regularexpression/tst_qsortfilterproxymodel_regularexpression.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 <QTest>
#include <QSignalSpy>
@@ -143,12 +118,12 @@ void tst_QSortFilterProxyModelRegularExpression::tst_regexCaseSensitivityNotific
QSortFilterProxyModel proxy;
QSignalSpy spy(&proxy, &QSortFilterProxyModel::filterCaseSensitivityChanged);
proxy.setFilterCaseSensitivity(Qt::CaseInsensitive);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QRegularExpression re("regex");
QVERIFY(!re.patternOptions().testFlag(QRegularExpression::CaseInsensitiveOption));
proxy.setFilterRegularExpression(re);
QCOMPARE(proxy.filterCaseSensitivity(), Qt::CaseSensitive);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
QTEST_MAIN(tst_QSortFilterProxyModelRegularExpression)
diff --git a/tests/auto/corelib/itemmodels/qstringlistmodel/CMakeLists.txt b/tests/auto/corelib/itemmodels/qstringlistmodel/CMakeLists.txt
index c6123bb1e3..8a00d1cd42 100644
--- a/tests/auto/corelib/itemmodels/qstringlistmodel/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/qstringlistmodel/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qstringlistmodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringlistmodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringlistmodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstringlistmodel
SOURCES
qmodellistener.h
diff --git a/tests/auto/corelib/itemmodels/qstringlistmodel/qmodellistener.h b/tests/auto/corelib/itemmodels/qstringlistmodel/qmodellistener.h
index e08a0bdb1f..ecf7214ba4 100644
--- a/tests/auto/corelib/itemmodels/qstringlistmodel/qmodellistener.h
+++ b/tests/auto/corelib/itemmodels/qstringlistmodel/qmodellistener.h
@@ -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 <QObject>
#include <QModelIndex>
diff --git a/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp b/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp
index 5fe8784768..8ec2aeabe5 100644
--- a/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp
+++ b/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.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 <QTest>
#include <QSignalSpy>
@@ -431,7 +406,7 @@ void tst_QStringListModel::setData_emits_on_change_only()
const QModelIndex modelIdx = model.index(0, 0);
const QString newStringData = QStringLiteral("test");
QVERIFY(model.setData(modelIdx, newStringData));
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
const QList<QVariant> spyList = dataChangedSpy.takeFirst();
QCOMPARE(spyList.at(0).value<QModelIndex>(), modelIdx);
QCOMPARE(spyList.at(1).value<QModelIndex>(), modelIdx);
diff --git a/tests/auto/corelib/itemmodels/qtransposeproxymodel/CMakeLists.txt b/tests/auto/corelib/itemmodels/qtransposeproxymodel/CMakeLists.txt
index 7cc675d7fd..b8ad00ca00 100644
--- a/tests/auto/corelib/itemmodels/qtransposeproxymodel/CMakeLists.txt
+++ b/tests/auto/corelib/itemmodels/qtransposeproxymodel/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qtransposeproxymodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtransposeproxymodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtransposeproxymodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtransposeproxymodel
SOURCES
tst_qtransposeproxymodel.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/corelib/itemmodels/qtransposeproxymodel/tst_qtransposeproxymodel.cpp b/tests/auto/corelib/itemmodels/qtransposeproxymodel/tst_qtransposeproxymodel.cpp
index f577c3c41b..127b5c6ba0 100644
--- a/tests/auto/corelib/itemmodels/qtransposeproxymodel/tst_qtransposeproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qtransposeproxymodel/tst_qtransposeproxymodel.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Luca Beldi <v.ronin@yahoo.it>
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module 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 Luca Beldi <v.ronin@yahoo.it>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSignalSpy>
@@ -300,8 +264,8 @@ void tst_QTransposeProxyModel::sort()
QVERIFY(layoutAboutToBeChangedSpy.isValid());
QPersistentModelIndex firstIndexBeforeSort = proxyModel.index(0, 0);
baseModel.sort(0, Qt::AscendingOrder);
- QCOMPARE(layoutChangedSpy.count(), 1);
- QCOMPARE(layoutAboutToBeChangedSpy.count(), 1);
+ QCOMPARE(layoutChangedSpy.size(), 1);
+ QCOMPARE(layoutAboutToBeChangedSpy.size(), 1);
QCOMPARE(layoutChangedSpy.takeFirst().at(1).toInt(), int(QAbstractItemModel::HorizontalSortHint));
QCOMPARE(firstIndexBeforeSort.data().toString(), firstItemBeforeSort);
for (int i = 0; i < 100; ++i)
@@ -334,8 +298,8 @@ void tst_QTransposeProxyModel::removeColumnBase()
QVERIFY(model->removeColumn(1, parent));
QCOMPARE(proxy.rowCount(proxy.mapFromSource(parent)), oldRowCount - 1);
QCOMPARE(proxy.index(1, 0, proxy.mapFromSource(parent)).data(), expectedNewVal);
- QCOMPARE(rowRemoveSpy.count(), 1);
- QCOMPARE(rowAboutToBeRemoveSpy.count(), 1);
+ QCOMPARE(rowRemoveSpy.size(), 1);
+ QCOMPARE(rowAboutToBeRemoveSpy.size(), 1);
for (const auto &spyArgs : {rowRemoveSpy.takeFirst(),
rowAboutToBeRemoveSpy.takeFirst()}) {
QCOMPARE(spyArgs.at(0).value<QModelIndex>(), proxy.mapFromSource(parent));
@@ -448,8 +412,8 @@ void tst_QTransposeProxyModel::insertColumnBase()
QVERIFY(model->insertColumn(1, parent));
QCOMPARE(proxy.rowCount(proxy.mapFromSource(parent)), oldRowCount + 1);
QVERIFY(!proxy.index(1, 0, proxy.mapFromSource(parent)).data().isValid());
- QCOMPARE(rowInsertSpy.count(), 1);
- QCOMPARE(rowAboutToBeInsertSpy.count(), 1);
+ QCOMPARE(rowInsertSpy.size(), 1);
+ QCOMPARE(rowAboutToBeInsertSpy.size(), 1);
for (const auto &spyArgs : {rowInsertSpy.takeFirst(),
rowAboutToBeInsertSpy.takeFirst()}) {
QCOMPARE(spyArgs.at(0).value<QModelIndex>(), proxy.mapFromSource(parent));
@@ -486,8 +450,8 @@ void tst_QTransposeProxyModel::removeRowBase()
QVERIFY(model->removeRow(1, parent));
QCOMPARE(proxy.columnCount(proxy.mapFromSource(parent)), oldColCount - 1);
QCOMPARE(proxy.index(0, 1, proxy.mapFromSource(parent)).data(), expectedNewVal);
- QCOMPARE(columnsRemoveSpy.count(), 1);
- QCOMPARE(columnsAboutToBeRemoveSpy.count(), 1);
+ QCOMPARE(columnsRemoveSpy.size(), 1);
+ QCOMPARE(columnsAboutToBeRemoveSpy.size(), 1);
for (const auto &spyArgs : {columnsRemoveSpy.takeFirst(),
columnsAboutToBeRemoveSpy.takeFirst()}) {
QCOMPARE(spyArgs.at(0).value<QModelIndex>(), proxy.mapFromSource(parent));
@@ -524,8 +488,8 @@ void tst_QTransposeProxyModel::insertRowBase()
QCOMPARE(proxy.columnCount(proxy.mapFromSource(parent)), oldColCount + 1);
QVariant result = proxy.index(0, 1, proxy.mapFromSource(parent)).data();
QVERIFY(result.isNull() || (result.metaType().id() == QMetaType::QString && result.toString().isNull()));
- QCOMPARE(columnsInsertSpy.count(), 1);
- QCOMPARE(columnsAboutToBeInsertSpy.count(), 1);
+ QCOMPARE(columnsInsertSpy.size(), 1);
+ QCOMPARE(columnsAboutToBeInsertSpy.size(), 1);
for (const auto &spyArgs : {columnsInsertSpy.takeFirst(),
columnsAboutToBeInsertSpy.takeFirst()}) {
QCOMPARE(spyArgs.at(0).value<QModelIndex>(), proxy.mapFromSource(parent));
@@ -570,10 +534,10 @@ void tst_QTransposeProxyModel::removeColumnProxy()
QCOMPARE(model->rowCount(sourceParent), oldRowCount - 1);
QCOMPARE(proxy.index(0, 1, proxyParent).data(), expectedNewVal);
QCOMPARE(model->index(1, 0, sourceParent).data(), expectedNewVal);
- QCOMPARE(columnsRemoveSpy.count(), 1);
- QCOMPARE(columnsAboutToBeRemoveSpy.count(), 1);
- QCOMPARE(rowsRemoveSpy.count(), 1);
- QCOMPARE(rowsAboutToBeRemoveSpy.count(), 1);
+ QCOMPARE(columnsRemoveSpy.size(), 1);
+ QCOMPARE(columnsAboutToBeRemoveSpy.size(), 1);
+ QCOMPARE(rowsRemoveSpy.size(), 1);
+ QCOMPARE(rowsAboutToBeRemoveSpy.size(), 1);
for (const auto &spyArgs : {columnsRemoveSpy.takeFirst(),
columnsAboutToBeRemoveSpy.takeFirst()}) {
QCOMPARE(spyArgs.at(0).value<QModelIndex>(), proxyParent);
@@ -625,10 +589,10 @@ void tst_QTransposeProxyModel::insertColumnProxy()
QVERIFY(result.isNull() || (result.metaType().id() == QMetaType::QString && result.toString().isNull()));
result = model->index(1, 0, sourceParent).data();
QVERIFY(result.isNull() || (result.metaType().id() == QMetaType::QString && result.toString().isNull()));
- QCOMPARE(columnsInsertSpy.count(), 1);
- QCOMPARE(columnsAboutToBeInsertSpy.count(), 1);
- QCOMPARE(rowsInsertSpy.count(), 1);
- QCOMPARE(rowsAboutToBeInsertSpy.count(), 1);
+ QCOMPARE(columnsInsertSpy.size(), 1);
+ QCOMPARE(columnsAboutToBeInsertSpy.size(), 1);
+ QCOMPARE(rowsInsertSpy.size(), 1);
+ QCOMPARE(rowsAboutToBeInsertSpy.size(), 1);
for (const auto &spyArgs : {columnsInsertSpy.takeFirst(),
columnsAboutToBeInsertSpy.takeFirst()}) {
QCOMPARE(spyArgs.at(0).value<QModelIndex>(), proxyParent);
@@ -678,10 +642,10 @@ void tst_QTransposeProxyModel::removeRowProxy()
QCOMPARE(model->columnCount(sourceParent), oldColCount - 1);
QCOMPARE(proxy.index(1, 0, proxyParent).data(), expectedNewVal);
QCOMPARE(model->index(0, 1, sourceParent).data(), expectedNewVal);
- QCOMPARE(columnsRemoveSpy.count(), 1);
- QCOMPARE(columnsAboutToBeRemoveSpy.count(), 1);
- QCOMPARE(rowsRemoveSpy.count(), 1);
- QCOMPARE(rowsAboutToBeRemoveSpy.count(), 1);
+ QCOMPARE(columnsRemoveSpy.size(), 1);
+ QCOMPARE(columnsAboutToBeRemoveSpy.size(), 1);
+ QCOMPARE(rowsRemoveSpy.size(), 1);
+ QCOMPARE(rowsAboutToBeRemoveSpy.size(), 1);
for (const auto &spyArgs : {columnsRemoveSpy.takeFirst(),
columnsAboutToBeRemoveSpy.takeFirst()}) {
QCOMPARE(spyArgs.at(0).value<QModelIndex>(), sourceParent);
@@ -730,10 +694,10 @@ void tst_QTransposeProxyModel::insertRowProxy()
QCOMPARE(model->columnCount(sourceParent), oldColCount + 1);
QVERIFY(proxy.index(1, 0, proxyParent).data().isNull());
QVERIFY(model->index(0, 1, sourceParent).data().isNull());
- QCOMPARE(columnsInsertSpy.count(), 1);
- QCOMPARE(columnsAboutToBeInsertSpy.count(), 1);
- QCOMPARE(rowsInsertSpy.count(), 1);
- QCOMPARE(rowsAboutToBeInsertSpy.count(), 1);
+ QCOMPARE(columnsInsertSpy.size(), 1);
+ QCOMPARE(columnsAboutToBeInsertSpy.size(), 1);
+ QCOMPARE(rowsInsertSpy.size(), 1);
+ QCOMPARE(rowsAboutToBeInsertSpy.size(), 1);
for (const auto &spyArgs : {columnsInsertSpy.takeFirst(),
columnsAboutToBeInsertSpy.takeFirst()}) {
QCOMPARE(spyArgs.at(0).value<QModelIndex>(), sourceParent);
@@ -905,8 +869,8 @@ void tst_QTransposeProxyModel::moveRowsBase()
QVERIFY(model.moveRows(QModelIndex(), 0, 1, QModelIndex(), 2));
for (int i = 0; i < expectedNewVal.size(); ++i)
QCOMPARE(proxy.index(0, i).data(), expectedNewVal.at(i));
- QCOMPARE(columnsMoveSpy.count(), 1);
- QCOMPARE(columnsAboutToBeMoveSpy.count(), 1);
+ QCOMPARE(columnsMoveSpy.size(), 1);
+ QCOMPARE(columnsAboutToBeMoveSpy.size(), 1);
for (const auto &spyArgs : {columnsMoveSpy.takeFirst(),
columnsAboutToBeMoveSpy.takeFirst()}) {
QVERIFY(!spyArgs.at(0).value<QModelIndex>().isValid());
@@ -937,10 +901,10 @@ void tst_QTransposeProxyModel::moveColumnsProxy()
QCOMPARE(proxy.index(0, i).data(), expectedNewVal.at(i));
for (int i = 0; i < expectedNewVal.size(); ++i)
QCOMPARE(model.index(i, 0).data(), expectedNewVal.at(i));
- QCOMPARE(columnsMoveSpy.count(), 1);
- QCOMPARE(columnsAboutToBeMoveSpy.count(), 1);
- QCOMPARE(rowsMoveSpy.count(), 1);
- QCOMPARE(rowsAboutToBeMoveSpy.count(), 1);
+ QCOMPARE(columnsMoveSpy.size(), 1);
+ QCOMPARE(columnsAboutToBeMoveSpy.size(), 1);
+ QCOMPARE(rowsMoveSpy.size(), 1);
+ QCOMPARE(rowsAboutToBeMoveSpy.size(), 1);
for (const auto &spyArgs : {columnsMoveSpy.takeFirst(),
columnsAboutToBeMoveSpy.takeFirst(),
rowsMoveSpy.takeFirst(),rowsAboutToBeMoveSpy.takeFirst()}) {
diff --git a/tests/auto/corelib/kernel/CMakeLists.txt b/tests/auto/corelib/kernel/CMakeLists.txt
index 18f20bfadc..c2feb38641 100644
--- a/tests/auto/corelib/kernel/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/CMakeLists.txt
@@ -1,6 +1,8 @@
-# Generated from kernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qapplicationstatic)
+add_subdirectory(qchronotimer)
add_subdirectory(qcoreapplication)
add_subdirectory(qdeadlinetimer)
add_subdirectory(qelapsedtimer)
@@ -11,12 +13,11 @@ add_subdirectory(qmetaobjectbuilder)
add_subdirectory(qmetamethod)
add_subdirectory(qmetaproperty)
add_subdirectory(qmetaenum)
-add_subdirectory(qpointer)
add_subdirectory(qsignalblocker)
add_subdirectory(qsignalmapper)
add_subdirectory(qtimer)
add_subdirectory(qtranslator)
-# QTBUG-88135 # special case
+# QTBUG-88135
if(NOT ANDROID)
add_subdirectory(qeventdispatcher)
endif()
@@ -26,22 +27,21 @@ endif()
if(TARGET Qt::Gui)
add_subdirectory(qmetatype)
add_subdirectory(qmimedata)
+ add_subdirectory(qpointer)
add_subdirectory(qvariant)
endif()
if(TARGET Qt::Network AND NOT ANDROID AND NOT UIKIT)
add_subdirectory(qobject)
endif()
-if(QT_FEATURE_private_tests AND NOT ANDROID AND NOT UIKIT)
- add_subdirectory(qsharedmemory)
-endif()
if(QT_FEATURE_private_tests AND TARGET Qt::Network)
add_subdirectory(qsocketnotifier)
endif()
-if(QT_FEATURE_systemsemaphore AND NOT ANDROID AND NOT UIKIT)
- add_subdirectory(qsystemsemaphore)
-endif()
if(WIN32)
add_subdirectory(qwineventnotifier)
+ add_subdirectory(qwinregistrykey)
+endif()
+if(QT_FEATURE_permissions)
+ add_subdirectory(qpermission)
endif()
if(QT_FEATURE_private_tests)
add_subdirectory(qproperty)
@@ -49,4 +49,6 @@ endif()
if(ANDROID)
add_subdirectory(qjnienvironment)
add_subdirectory(qjniobject)
+ add_subdirectory(qjnitypes)
+ add_subdirectory(qjniarray)
endif()
diff --git a/tests/auto/corelib/kernel/qapplicationstatic/CMakeLists.txt b/tests/auto/corelib/kernel/qapplicationstatic/CMakeLists.txt
index 0890113c55..9332b6ecd0 100644
--- a/tests/auto/corelib/kernel/qapplicationstatic/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qapplicationstatic/CMakeLists.txt
@@ -1,7 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qapplicationstatic Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qapplicationstatic LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qapplicationstatic
SOURCES
tst_qapplicationstatic.cpp
diff --git a/tests/auto/corelib/kernel/qapplicationstatic/tst_qapplicationstatic.cpp b/tests/auto/corelib/kernel/qapplicationstatic/tst_qapplicationstatic.cpp
index 9972e050db..dd9a415a52 100644
--- a/tests/auto/corelib/kernel/qapplicationstatic/tst_qapplicationstatic.cpp
+++ b/tests/auto/corelib/kernel/qapplicationstatic/tst_qapplicationstatic.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QPointer>
diff --git a/tests/auto/corelib/kernel/qchronotimer/.gitignore b/tests/auto/corelib/kernel/qchronotimer/.gitignore
new file mode 100644
index 0000000000..254f7a0281
--- /dev/null
+++ b/tests/auto/corelib/kernel/qchronotimer/.gitignore
@@ -0,0 +1 @@
+tst_qchronotimer
diff --git a/tests/auto/corelib/kernel/qchronotimer/CMakeLists.txt b/tests/auto/corelib/kernel/qchronotimer/CMakeLists.txt
new file mode 100644
index 0000000000..43164858c5
--- /dev/null
+++ b/tests/auto/corelib/kernel/qchronotimer/CMakeLists.txt
@@ -0,0 +1,33 @@
+# 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_qchronotimer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+if (NOT QT_FEATURE_thread)
+ return()
+endif()
+
+function(addChronoTimerTest test)
+ qt_internal_add_test(${test}
+ SOURCES
+ tst_qchronotimer.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::TestPrivate
+ )
+endfunction()
+
+addChronoTimerTest(tst_qchronotimer)
+
+if(QT_FEATURE_glib AND UNIX)
+ addChronoTimerTest(tst_qchronotimer_no_glib)
+ qt_internal_extend_target(tst_qchronotimer_no_glib
+ DEFINES
+ DISABLE_GLIB
+ tst_QChronoTimer=tst_QChronoTimer_no_glib # Class name in the unittest
+ )
+endif()
diff --git a/tests/auto/corelib/kernel/qchronotimer/tst_qchronotimer.cpp b/tests/auto/corelib/kernel/qchronotimer/tst_qchronotimer.cpp
new file mode 100644
index 0000000000..62c402ae24
--- /dev/null
+++ b/tests/auto/corelib/kernel/qchronotimer/tst_qchronotimer.cpp
@@ -0,0 +1,1266 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifdef QT_GUI_LIB
+# include <QtGui/QGuiApplication>
+#else
+# include <QtCore/QCoreApplication>
+#endif
+
+#include <QtCore/private/qglobal_p.h>
+#include <QTest>
+#include <QSignalSpy>
+#include <QtTest/private/qpropertytesthelper_p.h>
+
+#include <qbasictimer.h>
+#include <qchronotimer.h>
+#include <qthread.h>
+#include <qtimer.h>
+#include <qelapsedtimer.h>
+#include <qproperty.h>
+
+#if defined Q_OS_UNIX
+#include <unistd.h>
+#endif
+
+using namespace std::chrono_literals;
+
+#ifdef DISABLE_GLIB
+static bool glibDisabled = []() {
+ qputenv("QT_NO_GLIB", "1");
+ return true;
+}();
+#endif
+
+class tst_QChronoTimer : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void zeroTimer();
+ void singleShotTimeout(); // Non-static singleShot()
+ void timeout();
+ void sequentialTimers_data();
+ void sequentialTimers();
+ void remainingTime();
+ void remainingTimeInitial_data();
+ void remainingTimeInitial();
+ void remainingTimeDuringActivation_data();
+ void remainingTimeDuringActivation();
+ void basic_chrono();
+ void livelock_data();
+ void livelock();
+ void timerInfiniteRecursion_data();
+ void timerInfiniteRecursion();
+ void recurringTimer_data();
+ void recurringTimer();
+ void deleteLaterOnQChronoTimer(); // long name, don't want to shadow QObject::deleteLater()
+ void moveToThread();
+ void restartedTimerFiresTooSoon();
+ void timerFiresOnlyOncePerProcessEvents_data();
+ void timerFiresOnlyOncePerProcessEvents();
+ void timerIdPersistsAfterThreadExit();
+ void cancelLongTimer();
+ void recurseOnTimeoutAndStopTimer();
+ void timerOrder();
+ void timerOrder_data();
+ void timerOrderBackgroundThread();
+ void timerOrderBackgroundThread_data() { timerOrder_data(); }
+ void timerPrecision();
+
+ void dontBlockEvents();
+ void postedEventsShouldNotStarveTimers();
+ void callOnTimeout();
+
+ void bindToTimer();
+ void bindTimer();
+ void automatedBindingTests();
+
+ void negativeInterval();
+};
+
+void tst_QChronoTimer::zeroTimer()
+{
+ QChronoTimer timer;
+ QVERIFY(!timer.isSingleShot());
+ timer.setInterval(0ns);
+ timer.setSingleShot(true);
+ QVERIFY(timer.isSingleShot());
+
+ QSignalSpy timeoutSpy(&timer, &QChronoTimer::timeout);
+ timer.start();
+
+ // Pass timeout to work round glib issue, see QTBUG-84291.
+ QCoreApplication::processEvents(QEventLoop::AllEvents, INT_MAX);
+
+ QCOMPARE(timeoutSpy.size(), 1);
+}
+
+void tst_QChronoTimer::singleShotTimeout()
+{
+ QChronoTimer timer;
+ QVERIFY(!timer.isSingleShot());
+ timer.setSingleShot(true);
+ QVERIFY(timer.isSingleShot());
+
+ QSignalSpy timeoutSpy(&timer, &QChronoTimer::timeout);
+ timer.setInterval(100ms);
+ timer.start();
+
+ QVERIFY(timeoutSpy.wait(500ms));
+ QCOMPARE(timeoutSpy.size(), 1);
+ QTest::qWait(500ms);
+ QCOMPARE(timeoutSpy.size(), 1);
+}
+
+static constexpr auto Timeout_Interval = 200ms;
+
+void tst_QChronoTimer::timeout()
+{
+ QChronoTimer timer{100ms};
+ QSignalSpy timeoutSpy(&timer, &QChronoTimer::timeout);
+ timer.start();
+
+ QCOMPARE(timeoutSpy.size(), 0);
+
+ QTRY_VERIFY_WITH_TIMEOUT(timeoutSpy.size() > 0, Timeout_Interval);
+ const qsizetype oldCount = timeoutSpy.size();
+
+ QTRY_VERIFY_WITH_TIMEOUT(timeoutSpy.size() > oldCount, Timeout_Interval);
+}
+
+void tst_QChronoTimer::sequentialTimers_data()
+{
+#ifdef Q_OS_WIN
+ QSKIP("The API used by QEventDispatcherWin32 doesn't respect the order");
+#endif
+ QTest::addColumn<QList<std::chrono::milliseconds>>("timeouts");
+ auto addRow = [](const QList<std::chrono::milliseconds> &l) {
+ Q_ASSERT_X(std::is_sorted(l.begin(), l.end()),
+ "tst_QChronoTimer", "input list must be sorted");
+ QByteArray name;
+ for (auto msec : l)
+ name += QByteArray::number(msec.count()) + ',';
+ name.chop(1);
+ QTest::addRow("%s", name.constData()) << l;
+ };
+ // PreciseTimers
+ addRow({0ms, 0ms, 0ms, 0ms, 0ms, 0ms});
+ addRow({0ms, 1ms, 2ms});
+ addRow({1ms, 1ms, 1ms, 2ms, 2ms, 2ms, 2ms});
+ addRow({1ms, 2ms, 3ms});
+ addRow({19ms, 19ms, 19ms});
+ // CoarseTimer for setinterval
+ addRow({20ms, 20ms, 20ms, 20ms, 20ms});
+ addRow({25ms, 25ms, 25ms, 25ms, 25ms, 25ms, 50ms});
+}
+
+void tst_QChronoTimer::sequentialTimers()
+{
+ QFETCH(const QList<std::chrono::milliseconds>, timeouts);
+ QByteArray result, expected;
+ std::vector<std::unique_ptr<QChronoTimer>> timers;
+ expected.resize(timeouts.size());
+ result.reserve(timeouts.size());
+ timers.reserve(timeouts.size());
+ for (int i = 0; i < timeouts.size(); ++i) {
+ auto timer = std::make_unique<QChronoTimer>(timeouts[i]);
+ timer->setSingleShot(true);
+
+ char c = 'A' + i;
+ expected[i] = c;
+ QObject::connect(timer.get(), &QChronoTimer::timeout, this, [&result, c = c]() {
+ result.append(c);
+ });
+ timers.push_back(std::move(timer));
+ }
+
+ // start the timers
+ for (auto &timer : timers)
+ timer->start();
+
+ QTestEventLoop::instance().enterLoop(timeouts.last() * 2 + 10ms);
+
+ QCOMPARE(result, expected);
+}
+
+void tst_QChronoTimer::remainingTime()
+{
+ QChronoTimer tested;
+ tested.setTimerType(Qt::PreciseTimer);
+
+ QChronoTimer tester;
+ tester.setTimerType(Qt::PreciseTimer);
+ tester.setSingleShot(true);
+
+ constexpr auto tested_interval = 200ms;
+ constexpr auto tester_interval = 50ms;
+ constexpr auto expectedRemainingTime = tested_interval - tester_interval;
+
+ int testIteration = 0;
+ const int desiredTestCount = 2;
+
+ // We let tested (which isn't a single-shot) run repeatedly, to verify
+ // it *does* repeat, and check that the single-shot tester, starting
+ // at the same time, does finish first each time, by about the right duration.
+ auto connection = QObject::connect(&tested, &QChronoTimer::timeout,
+ &tester, &QChronoTimer::start);
+
+ QObject::connect(&tester, &QChronoTimer::timeout, this, [&]() {
+ const std::chrono::nanoseconds remainingTime = tested.remainingTime();
+ // We expect that remainingTime is at most 150 and not overdue.
+ const bool remainingTimeInRange = remainingTime > 0ns
+ && remainingTime <= expectedRemainingTime;
+ if (remainingTimeInRange)
+ ++testIteration;
+ else
+ testIteration = desiredTestCount; // We are going to fail on QVERIFY2()
+ // below, so we don't want to iterate
+ // anymore and quickly exit the QTRY_...()
+ // with this failure.
+ if (testIteration == desiredTestCount)
+ QObject::disconnect(connection); // Last iteration, don't start tester again.
+ QVERIFY2(remainingTimeInRange, qPrintable("Remaining time "
+ + QByteArray::number(remainingTime.count()) + "ms outside expected range (0ns, "
+ + QByteArray::number(expectedRemainingTime.count()) + "ms]"));
+ });
+
+ tested.setInterval(tested_interval);
+ tested.start();
+ tester.setInterval(tester_interval);
+ tester.start(); // Start tester for the 1st time.
+
+ // Test it desiredTestCount times, give it reasonable amount of time
+ // (twice as much as needed).
+ const auto tryTimeout = tested_interval * desiredTestCount * 2;
+ QTRY_COMPARE_WITH_TIMEOUT(testIteration, desiredTestCount, tryTimeout);
+}
+
+void tst_QChronoTimer::remainingTimeInitial_data()
+{
+ using namespace std::chrono;
+
+ QTest::addColumn<nanoseconds>("startTimeNs");
+ QTest::addColumn<Qt::TimerType>("timerType");
+
+ QTest::addRow("precisetiemr-0ns") << 0ns << Qt::PreciseTimer;
+ QTest::addRow("precisetimer-1ms") << nanoseconds{1ms} << Qt::PreciseTimer;
+ QTest::addRow("precisetimer-10ms") <<nanoseconds{10ms} << Qt::PreciseTimer;
+
+ QTest::addRow("coarsetimer-0ns") << 0ns << Qt::CoarseTimer;
+ QTest::addRow("coarsetimer-1ms") << nanoseconds{1ms} << Qt::CoarseTimer;
+ QTest::addRow("coarsetimer-10ms") << nanoseconds{10ms} << Qt::CoarseTimer;
+}
+
+void tst_QChronoTimer::remainingTimeInitial()
+{
+ QFETCH(std::chrono::nanoseconds, startTimeNs);
+ QFETCH(Qt::TimerType, timerType);
+
+ QChronoTimer timer;
+ QCOMPARE(timer.timerType(), Qt::CoarseTimer);
+ timer.setTimerType(timerType);
+ QCOMPARE(timer.timerType(), timerType);
+ timer.setInterval(startTimeNs);
+ timer.start();
+
+ const std::chrono::nanoseconds rt = timer.remainingTime();
+ QCOMPARE_GE(rt, 0ns);
+ QCOMPARE_LE(rt, startTimeNs);
+}
+
+void tst_QChronoTimer::remainingTimeDuringActivation_data()
+{
+ QTest::addColumn<bool>("singleShot");
+ QTest::newRow("repeating") << false;
+ QTest::newRow("single-shot") << true;
+}
+
+void tst_QChronoTimer::remainingTimeDuringActivation()
+{
+ QFETCH(bool, singleShot);
+
+ QChronoTimer timer;
+ timer.setSingleShot(singleShot);
+
+ auto remainingTime = 0ns; // not the expected value in either case
+ connect(&timer, &QChronoTimer::timeout, this, [&]() { remainingTime = timer.remainingTime(); });
+ QSignalSpy timeoutSpy(&timer, &QChronoTimer::timeout);
+ // 20 ms is short enough and should not round down to 0 in any timer mode
+ constexpr auto timeout = 20ms;
+ timer.setInterval(timeout);
+ timer.start();
+
+ QVERIFY(timeoutSpy.wait());
+ if (singleShot)
+ QCOMPARE_LT(remainingTime, 0ns); // timer not running
+ else {
+ QCOMPARE_LE(remainingTime, timeout);
+ QCOMPARE_GT(remainingTime, 0ns);
+ }
+
+ if (!singleShot) {
+ // do it again - see QTBUG-46940
+ remainingTime = std::chrono::milliseconds::min();
+ QVERIFY(timeoutSpy.wait());
+ QCOMPARE_LE(remainingTime, timeout);
+ QCOMPARE_GT(remainingTime, 0ns);
+ }
+}
+
+namespace {
+ template <typename T>
+ auto to_ms(T t)
+ {
+ using namespace std::chrono;
+ return duration_cast<milliseconds>(t);
+ }
+} // unnamed namespace
+
+void tst_QChronoTimer::basic_chrono()
+{
+ // duplicates zeroTimer, singleShotTimeout, interval and remainingTime
+ using namespace std::chrono;
+ QChronoTimer timer;
+ QSignalSpy timeoutSpy(&timer, &QChronoTimer::timeout);
+ timer.start();
+ QCOMPARE(timer.interval(), 0ns);
+ QCOMPARE(timer.remainingTime(), 0ns);
+
+ QCoreApplication::processEvents();
+
+ QCOMPARE(timeoutSpy.size(), 1);
+
+ timeoutSpy.clear();
+ timer.setInterval(100ms);
+ timer.start();
+ QCOMPARE(timeoutSpy.size(), 0);
+
+ QVERIFY(timeoutSpy.wait(Timeout_Interval));
+ QVERIFY(timeoutSpy.size() > 0);
+ const qsizetype oldCount = timeoutSpy.size();
+
+ QVERIFY(timeoutSpy.wait(Timeout_Interval));
+ QVERIFY(timeoutSpy.size() > oldCount);
+
+ timeoutSpy.clear();
+ timer.setInterval(200ms);
+ timer.start();
+ QCOMPARE(timer.interval(), 200ms);
+ QTest::qWait(50ms);
+ QCOMPARE(timeoutSpy.size(), 0);
+
+ nanoseconds rt = timer.remainingTime();
+ QCOMPARE_GE(rt, 50ms);
+ QCOMPARE_LE(rt, 200ms);
+
+ timeoutSpy.clear();
+ timer.setSingleShot(true);
+ timer.setInterval(100ms);
+ timer.start();
+ QVERIFY(timeoutSpy.wait(Timeout_Interval));
+ QCOMPARE(timeoutSpy.size(), 1);
+ QTest::qWait(500ms);
+ QCOMPARE(timeoutSpy.size(), 1);
+}
+
+void tst_QChronoTimer::livelock_data()
+{
+ QTest::addColumn<std::chrono::nanoseconds>("interval");
+ QTest::newRow("zero-timer") << 0ns;
+ QTest::newRow("non-zero-timer") << std::chrono::nanoseconds{1ms};
+ QTest::newRow("longer-than-sleep") << std::chrono::nanoseconds{20ms};
+}
+
+/*!
+ *
+ * DO NOT "FIX" THIS TEST! it is written like this for a reason, do
+ * not *change it without first dicussing it with its maintainers.
+ *
+*/
+class LiveLockTester : public QObject
+{
+ static constexpr QEvent::Type PostEventType = static_cast<QEvent::Type>(4002);
+public:
+ LiveLockTester(std::chrono::nanoseconds i)
+ : interval(i)
+ {
+ firstTimerId = startTimer(interval);
+ extraTimerId = startTimer(interval + 80ms);
+ secondTimerId = -1; // started later
+ }
+
+ bool event(QEvent *e) override
+ {
+ if (e->type() == PostEventType) {
+ // got the posted event
+ if (timeoutsForFirst == 1 && timeoutsForSecond == 0)
+ postEventAtRightTime = true;
+ return true;
+ }
+ return QObject::event(e);
+ }
+
+ void timerEvent(QTimerEvent *te) override
+ {
+ if (te->timerId() == firstTimerId) {
+ if (++timeoutsForFirst == 1) {
+ killTimer(extraTimerId);
+ extraTimerId = -1;
+ QCoreApplication::postEvent(this, new QEvent(PostEventType));
+ secondTimerId = startTimer(interval);
+ }
+ } else if (te->timerId() == secondTimerId) {
+ ++timeoutsForSecond;
+ } else if (te->timerId() == extraTimerId) {
+ ++timeoutsForExtra;
+ }
+
+ // sleep for 2ms
+ QTest::qSleep(2);
+ killTimer(te->timerId());
+ }
+
+ const std::chrono::nanoseconds interval;
+ int firstTimerId = -1;
+ int secondTimerId = -1;
+ int extraTimerId = -1;
+ int timeoutsForFirst = 0;
+ int timeoutsForExtra = 0;
+ int timeoutsForSecond = 0;
+ bool postEventAtRightTime = false;
+};
+
+void tst_QChronoTimer::livelock()
+{
+ /*
+ New timers created in timer event handlers should not be sent
+ until the next iteration of the eventloop. Note: this test
+ depends on the fact that we send posted events before timer
+ events (since new posted events are not sent until the next
+ iteration of the eventloop either).
+ */
+ QFETCH(std::chrono::nanoseconds, interval);
+ LiveLockTester tester(interval);
+ QTest::qWait(180ms); // we have to use wait here, since we're testing timers with a non-zero timeout
+ QTRY_COMPARE(tester.timeoutsForFirst, 1);
+ QCOMPARE(tester.timeoutsForExtra, 0);
+ QTRY_COMPARE(tester.timeoutsForSecond, 1);
+ QVERIFY(tester.postEventAtRightTime);
+}
+
+class TimerInfiniteRecursionObject : public QObject
+{
+public:
+ bool inTimerEvent = false;
+ bool timerEventRecursed = false;
+ std::chrono::nanoseconds interval;
+
+ TimerInfiniteRecursionObject(std::chrono::nanoseconds interval)
+ : interval(interval)
+ { }
+
+ void timerEvent(QTimerEvent *timerEvent) override
+ {
+ timerEventRecursed = inTimerEvent;
+ if (timerEventRecursed) {
+ // bug detected!
+ return;
+ }
+
+ inTimerEvent = true;
+
+ QEventLoop eventLoop;
+ QChronoTimer::singleShot(std::max<std::chrono::nanoseconds>(100ms, interval * 2),
+ &eventLoop, &QEventLoop::quit);
+ eventLoop.exec();
+
+ inTimerEvent = false;
+
+ killTimer(timerEvent->timerId());
+ }
+};
+
+void tst_QChronoTimer::timerInfiniteRecursion_data()
+{
+ QTest::addColumn<std::chrono::nanoseconds>("interval");
+ QTest::newRow("zero timer") << 0ns;
+ QTest::newRow("non-zero timer") << std::chrono::nanoseconds{1ms};
+ QTest::newRow("10ms timer") << std::chrono::nanoseconds{10ms};
+ QTest::newRow("11ms timer") << std::chrono::nanoseconds{11ms};
+ QTest::newRow("100ms timer") << std::chrono::nanoseconds{100ms};
+ QTest::newRow("1s timer") << std::chrono::nanoseconds{1000ms};
+}
+
+
+void tst_QChronoTimer::timerInfiniteRecursion()
+{
+ QFETCH(std::chrono::nanoseconds, interval);
+ TimerInfiniteRecursionObject object(interval);
+ (void) object.startTimer(interval);
+
+ QEventLoop eventLoop;
+ QChronoTimer::singleShot(std::max<std::chrono::nanoseconds>(100ms, interval * 2), &eventLoop,
+ &QEventLoop::quit);
+ eventLoop.exec();
+
+ QVERIFY(!object.timerEventRecursed);
+}
+
+class RecurringTimerObject : public QObject
+{
+Q_OBJECT
+public:
+ int times;
+ int target;
+ bool recurse;
+
+ RecurringTimerObject(int target)
+ : times(0), target(target), recurse(false)
+ { }
+
+ void timerEvent(QTimerEvent *timerEvent) override
+ {
+ if (++times == target) {
+ killTimer(timerEvent->timerId());
+ Q_EMIT done();
+ } if (recurse) {
+ QEventLoop eventLoop;
+ QChronoTimer::singleShot(100ms, &eventLoop, &QEventLoop::quit);
+ eventLoop.exec();
+ }
+ }
+
+signals:
+ void done();
+};
+
+void tst_QChronoTimer::recurringTimer_data()
+{
+ QTest::addColumn<std::chrono::nanoseconds>("interval");
+ QTest::addColumn<bool>("recurse");
+ // make sure that eventloop recursion doesn't affect timer recurrence
+ QTest::newRow("zero timer, don't recurse") << 0ns << false;
+ QTest::newRow("zero timer, recurse") << 0ns << true;
+ QTest::newRow("non-zero timer, don't recurse") << std::chrono::nanoseconds{1ms} << false;
+ QTest::newRow("non-zero timer, recurse") << std::chrono::nanoseconds{1ms} << true;
+}
+
+void tst_QChronoTimer::recurringTimer()
+{
+ const int target = 5;
+ QFETCH(std::chrono::nanoseconds, interval);
+ QFETCH(bool, recurse);
+
+ RecurringTimerObject object(target);
+ object.recurse = recurse;
+ QSignalSpy doneSpy(&object, &RecurringTimerObject::done);
+
+ (void) object.startTimer(interval);
+ QVERIFY(doneSpy.wait());
+
+ QCOMPARE(object.times, target);
+}
+
+void tst_QChronoTimer::deleteLaterOnQChronoTimer()
+{
+ QChronoTimer *timer = new QChronoTimer;
+ connect(timer, &QChronoTimer::timeout, timer, &QObject::deleteLater);
+ QSignalSpy destroyedSpy(timer, &QObject::destroyed);
+ timer->setInterval(1ms);
+ timer->setSingleShot(true);
+ timer->start();
+ QPointer<QChronoTimer> pointer = timer;
+ QVERIFY(destroyedSpy.wait());
+ QVERIFY(pointer.isNull());
+}
+
+namespace {
+int operator&(Qt::TimerId id, int i) { return qToUnderlying(id) & i; }
+}
+
+static constexpr auto MoveToThread_Timeout = 200ms;
+static constexpr auto MoveToThread_Wait = 300ms;
+
+void tst_QChronoTimer::moveToThread()
+{
+#if defined(Q_OS_WIN32)
+ QSKIP("Does not work reliably on Windows :(");
+#elif defined(Q_OS_MACOS)
+ QSKIP("Does not work reliably on macOS 10.12+ (QTBUG-59679)");
+#endif
+ QChronoTimer timer1{MoveToThread_Timeout};
+ QChronoTimer timer2{MoveToThread_Timeout};
+ timer1.setSingleShot(true);
+ timer1.start();
+ timer2.start();
+ QVERIFY((timer1.id() & 0xffffff) != (timer2.id() & 0xffffff));
+ QThread tr;
+ timer1.moveToThread(&tr);
+ connect(&timer1, &QChronoTimer::timeout, &tr, &QThread::quit);
+ tr.start();
+ QChronoTimer ti3{MoveToThread_Timeout};
+ ti3.start();
+ QVERIFY((ti3.id() & 0xffffff) != (timer2.id() & 0xffffff));
+ QVERIFY((ti3.id() & 0xffffff) != (timer1.id() & 0xffffff));
+ QTest::qWait(MoveToThread_Wait);
+ QVERIFY(tr.wait());
+ timer2.stop();
+ QChronoTimer ti4{MoveToThread_Timeout};
+ ti4.start();
+ ti3.stop();
+ timer2.setInterval(MoveToThread_Timeout);
+ timer2.start();
+ ti3.setInterval(MoveToThread_Timeout);
+ ti3.start();
+ QVERIFY((ti4.id() & 0xffffff) != (timer2.id() & 0xffffff));
+ QVERIFY((ti3.id() & 0xffffff) != (timer2.id() & 0xffffff));
+ QVERIFY((ti3.id() & 0xffffff) != (timer1.id() & 0xffffff));
+}
+
+class RestartedTimerFiresTooSoonObject : public QObject
+{
+ Q_OBJECT
+
+public:
+ QBasicTimer m_timer;
+
+ std::chrono::milliseconds m_interval = 0ms;
+ QElapsedTimer m_elapsedTimer;
+ QEventLoop eventLoop;
+
+ RestartedTimerFiresTooSoonObject() = default;
+
+ void timerFired()
+ {
+ static std::chrono::milliseconds interval = 1s;
+
+ m_interval = interval;
+ m_elapsedTimer.start();
+ m_timer.start(interval, this);
+
+ // alternate between single-shot and 1 sec
+ interval = interval > 0ms ? 0ms : 1s;
+ }
+
+ void timerEvent(QTimerEvent* ev) override
+ {
+ if (ev->timerId() != m_timer.timerId())
+ return;
+
+ m_timer.stop();
+
+ std::chrono::nanoseconds elapsed = m_elapsedTimer.durationElapsed();
+
+ if (elapsed < m_interval / 2) {
+ // severely too early!
+ m_timer.stop();
+ eventLoop.exit(-1);
+ return;
+ }
+
+ timerFired();
+
+ // don't do this forever
+ static int count = 0;
+ if (count++ > 20) {
+ m_timer.stop();
+ eventLoop.quit();
+ return;
+ }
+ }
+};
+
+void tst_QChronoTimer::restartedTimerFiresTooSoon()
+{
+ RestartedTimerFiresTooSoonObject object;
+ object.timerFired();
+ QCOMPARE(object.eventLoop.exec(), 0);
+}
+
+class LongLastingSlotClass : public QObject
+{
+ Q_OBJECT
+
+public:
+ LongLastingSlotClass(QChronoTimer *timer) : timer(timer) { }
+
+public slots:
+ void longLastingSlot()
+ {
+ // Don't use QChronoTimer for this, because we are testing it.
+ QElapsedTimer control;
+ control.start();
+ while (control.durationElapsed() < 200ms) {
+ for (int c = 0; c < 100'000; c++) {} // Mindless looping.
+ }
+ if (++count >= 2) {
+ timer->stop();
+ }
+ }
+
+public:
+ int count = 0;
+ QChronoTimer *timer;
+};
+
+void tst_QChronoTimer::timerFiresOnlyOncePerProcessEvents_data()
+{
+ QTest::addColumn<std::chrono::nanoseconds>("interval");
+ QTest::newRow("zero-timer") << 0ns;
+ QTest::newRow("non-zero-timer") << std::chrono::nanoseconds{10ms};
+}
+
+void tst_QChronoTimer::timerFiresOnlyOncePerProcessEvents()
+{
+ QFETCH(std::chrono::nanoseconds, interval);
+
+ QChronoTimer t{interval};
+ LongLastingSlotClass longSlot(&t);
+ t.start();
+ connect(&t, &QChronoTimer::timeout, &longSlot, &LongLastingSlotClass::longLastingSlot);
+ // Loop because there may be other events pending.
+ while (longSlot.count == 0)
+ QCoreApplication::processEvents(QEventLoop::WaitForMoreEvents);
+
+ QCOMPARE(longSlot.count, 1);
+}
+
+class TimerIdPersistsAfterThreadExitThread : public QThread
+{
+public:
+ std::unique_ptr<QChronoTimer> timer;
+ Qt::TimerId timerId = Qt::TimerId::Invalid;
+ int returnValue = -1;
+
+ void run() override
+ {
+ QEventLoop eventLoop;
+ timer = std::make_unique<QChronoTimer>();
+ connect(timer.get(), &QChronoTimer::timeout, &eventLoop, &QEventLoop::quit);
+ timer->setInterval(100ms);
+ timer->start();
+ timerId = timer->id();
+ returnValue = eventLoop.exec();
+ }
+};
+
+void tst_QChronoTimer::timerIdPersistsAfterThreadExit()
+{
+ TimerIdPersistsAfterThreadExitThread thread;
+ thread.start();
+ QVERIFY(thread.wait(30s));
+ QCOMPARE(thread.returnValue, 0);
+
+ // even though the thread has exited, and the event dispatcher destroyed, the timer is still
+ // "active", meaning the timer id should NOT be reused (i.e. the event dispatcher should not
+ // have unregistered it)
+ int timerId = thread.startTimer(100ms);
+ QVERIFY((timerId & 0xffffff) != (thread.timerId & 0xffffff));
+}
+
+void tst_QChronoTimer::cancelLongTimer()
+{
+ QChronoTimer timer{1h};
+ timer.setSingleShot(true);
+ timer.start();
+ QCoreApplication::processEvents();
+ // If the timer completes immediately with an error, then this will fail
+ QVERIFY(timer.isActive());
+ timer.stop();
+ QVERIFY(!timer.isActive());
+}
+
+class TimeoutCounter : public QObject
+{
+ Q_OBJECT
+public slots:
+ void timeout() { ++count; };
+public:
+ int count = 0;
+};
+
+class RecursOnTimeoutAndStopTimerTimer : public QObject
+{
+ Q_OBJECT
+
+public:
+ QChronoTimer *one;
+ QChronoTimer *two;
+
+public slots:
+ void onetrigger()
+ {
+ QCoreApplication::processEvents();
+ }
+
+ void twotrigger()
+ {
+ one->stop();
+ }
+};
+
+void tst_QChronoTimer::recurseOnTimeoutAndStopTimer()
+{
+ QEventLoop eventLoop;
+ QChronoTimer::singleShot(1s, &eventLoop, &QEventLoop::quit);
+
+ RecursOnTimeoutAndStopTimerTimer t;
+ t.one = new QChronoTimer(&t);
+ t.two = new QChronoTimer(&t);
+
+ QObject::connect(t.one, SIGNAL(timeout()), &t, SLOT(onetrigger()));
+ QObject::connect(t.two, SIGNAL(timeout()), &t, SLOT(twotrigger()));
+
+ t.two->setSingleShot(true);
+
+ t.one->start();
+ t.two->start();
+
+ (void) eventLoop.exec();
+
+ QVERIFY(!t.one->isActive());
+ QVERIFY(!t.two->isActive());
+}
+
+struct CountedStruct
+{
+ CountedStruct(int *count, QThread *t = nullptr) : count(count), thread(t) { }
+ ~CountedStruct() { }
+ void operator()() const { ++(*count); if (thread) QCOMPARE(QThread::currentThread(), thread); }
+
+ int *count;
+ QThread *thread;
+};
+
+static QScopedPointer<QEventLoop> _e;
+static QThread *_t = nullptr;
+
+class StaticEventLoop
+{
+public:
+ static void quitEventLoop()
+ {
+ quitEventLoop_noexcept();
+ }
+
+ static void quitEventLoop_noexcept() noexcept
+ {
+ QVERIFY(!_e.isNull());
+ _e->quit();
+ if (_t)
+ QCOMPARE(QThread::currentThread(), _t);
+ }
+};
+
+class DontBlockEvents : public QObject
+{
+ Q_OBJECT
+public:
+ DontBlockEvents();
+ void timerEvent(QTimerEvent*) override;
+
+ int count;
+ int total;
+ QBasicTimer m_timer;
+
+public slots:
+ void paintEvent();
+
+};
+
+DontBlockEvents::DontBlockEvents()
+{
+ count = 0;
+ total = 0;
+
+ const std::chrono::milliseconds intervals[] = {2s, 2500ms, 3s, 5s, 1s, 2s};
+ // need a few unrelated timers running to reproduce the bug.
+ for (auto dur : intervals) {
+ auto *t = new QChronoTimer(dur, this);
+ t->start();
+ }
+
+ m_timer.start(1ms, this);
+}
+
+void DontBlockEvents::timerEvent(QTimerEvent* event)
+{
+ if (event->timerId() == m_timer.timerId()) {
+ QMetaObject::invokeMethod(this, &DontBlockEvents::paintEvent, Qt::QueuedConnection);
+ m_timer.start(0ms, this);
+ count++;
+ QCOMPARE(count, 1);
+ total++;
+ }
+}
+
+void DontBlockEvents::paintEvent()
+{
+ count--;
+ QCOMPARE(count, 0);
+}
+
+// This is a regression test for QTBUG-13633, where a timer with a zero
+// timeout that was restarted by the event handler could starve other timers.
+void tst_QChronoTimer::dontBlockEvents()
+{
+ DontBlockEvents t;
+ QTest::qWait(60ms);
+ QTRY_VERIFY(t.total > 2);
+}
+
+class SlotRepeater : public QObject {
+ Q_OBJECT
+public:
+ SlotRepeater() {}
+
+public slots:
+ void repeatThisSlot()
+ {
+ QMetaObject::invokeMethod(this, &SlotRepeater::repeatThisSlot, Qt::QueuedConnection);
+ }
+};
+
+void tst_QChronoTimer::postedEventsShouldNotStarveTimers()
+{
+ QChronoTimer timer;
+ timer.setInterval(0ns);
+ timer.setSingleShot(false);
+ QSignalSpy timeoutSpy(&timer, &QChronoTimer::timeout);
+ timer.start();
+ SlotRepeater slotRepeater;
+ slotRepeater.repeatThisSlot();
+ QTRY_VERIFY_WITH_TIMEOUT(timeoutSpy.size() > 5, 100);
+}
+
+struct DummyFunctor {
+ static QThread *callThread;
+ void operator()() {
+ callThread = QThread::currentThread();
+ callThread->quit();
+ }
+};
+QThread *DummyFunctor::callThread = nullptr;
+
+void tst_QChronoTimer::callOnTimeout()
+{
+ QChronoTimer timer;
+ QSignalSpy timeoutSpy(&timer, &QChronoTimer::timeout);
+ timer.start();
+
+ auto context = std::make_unique<QObject>();
+
+ int count = 0;
+ timer.callOnTimeout([&count] { count++; });
+ QMetaObject::Connection connection = timer.callOnTimeout(context.get(), [&count] { count++; });
+ timer.callOnTimeout(&timer, &QChronoTimer::stop);
+
+
+ QTest::qWait(100ms);
+ QCOMPARE(count, 2);
+ QCOMPARE(timeoutSpy.size(), 1);
+
+ // Test that connection is bound to context lifetime
+ QVERIFY(connection);
+ context.reset();
+ QVERIFY(!connection);
+}
+
+void tst_QChronoTimer::bindToTimer()
+{
+ QChronoTimer timer;
+
+ // singleShot property
+ QProperty<bool> singleShot;
+ singleShot.setBinding(timer.bindableSingleShot().makeBinding());
+ QCOMPARE(timer.isSingleShot(), singleShot);
+
+ timer.setSingleShot(true);
+ QVERIFY(singleShot);
+ timer.setSingleShot(false);
+ QVERIFY(!singleShot);
+
+ // interval property
+ QProperty<std::chrono::nanoseconds> interval;
+ interval.setBinding([&](){ return timer.interval(); });
+ QCOMPARE(timer.interval(), interval.value());
+
+ timer.setInterval(10ms);
+ QCOMPARE(interval.value(), 10ms);
+ timer.setInterval(100ms);
+ QCOMPARE(interval.value(), 100ms);
+
+ // timerType property
+ QProperty<Qt::TimerType> timerType;
+ timerType.setBinding(timer.bindableTimerType().makeBinding());
+ QCOMPARE(timer.timerType(), timerType);
+
+ timer.setTimerType(Qt::PreciseTimer);
+ QCOMPARE(timerType, Qt::PreciseTimer);
+
+ timer.setTimerType(Qt::VeryCoarseTimer);
+ QCOMPARE(timerType, Qt::VeryCoarseTimer);
+
+ // active property
+ QProperty<bool> active;
+ active.setBinding([&](){ return timer.isActive(); });
+ QCOMPARE(active, timer.isActive());
+
+ timer.setInterval(1s);
+ timer.start();
+ QVERIFY(active);
+
+ timer.stop();
+ QVERIFY(!active);
+
+ // Also test that using negative interval updates the binding correctly
+ timer.setInterval(100ms);
+ timer.start();
+ QVERIFY(active);
+
+ auto ignoreMsg = [] {
+ QTest::ignoreMessage(QtWarningMsg,
+ "QObject::startTimer: Timers cannot have negative intervals");
+ };
+
+ ignoreMsg();
+ timer.setInterval(-100ms);
+ ignoreMsg();
+ timer.start();
+ QVERIFY(!active);
+
+ timer.setInterval(100ms);
+ timer.start();
+ QVERIFY(active);
+
+ ignoreMsg();
+ timer.setInterval(-100ms);
+ ignoreMsg();
+ timer.start();
+ QVERIFY(!active);
+}
+
+void tst_QChronoTimer::bindTimer()
+{
+ QChronoTimer timer;
+
+ // singleShot property
+ QVERIFY(!timer.isSingleShot());
+
+ QProperty<bool> singleShot;
+ timer.bindableSingleShot().setBinding(Qt::makePropertyBinding(singleShot));
+
+ singleShot = true;
+ QVERIFY(timer.isSingleShot());
+ singleShot = false;
+ QVERIFY(!timer.isSingleShot());
+
+ // interval property
+ QCOMPARE(timer.interval(), 0ns);
+
+ QProperty<std::chrono::nanoseconds> interval;
+ timer.bindableInterval().setBinding(Qt::makePropertyBinding(interval));
+
+ interval = 10ms;
+ QCOMPARE(timer.interval(), 10ms);
+ interval = 100ms;
+ QCOMPARE(timer.interval(), 100ms);
+ timer.setInterval(50ms);
+ QCOMPARE(timer.interval(), 50ms);
+ interval = 30ms;
+ QCOMPARE(timer.interval(), 50ms);
+
+ // timerType property
+ QCOMPARE(timer.timerType(), Qt::CoarseTimer);
+
+ QProperty<Qt::TimerType> timerType;
+ timer.bindableTimerType().setBinding(Qt::makePropertyBinding(timerType));
+
+ timerType = Qt::PreciseTimer;
+ QCOMPARE(timer.timerType(), Qt::PreciseTimer);
+ timerType = Qt::VeryCoarseTimer;
+ QCOMPARE(timer.timerType(), Qt::VeryCoarseTimer);
+}
+
+void tst_QChronoTimer::automatedBindingTests()
+{
+ QChronoTimer timer;
+
+ QVERIFY(!timer.isSingleShot());
+ QTestPrivate::testReadWritePropertyBasics(timer, true, false, "singleShot");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QChronoTimer::singleShot");
+ return;
+ }
+
+ QCOMPARE_NE(timer.interval(), 10ms);
+ using NSec = std::chrono::nanoseconds;
+ QTestPrivate::testReadWritePropertyBasics(timer, NSec{10ms}, NSec{20ms}, "interval");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QChronoTimer::interval");
+ return;
+ }
+
+ QCOMPARE_NE(timer.timerType(), Qt::PreciseTimer);
+ QTestPrivate::testReadWritePropertyBasics(timer, Qt::PreciseTimer, Qt::CoarseTimer,
+ "timerType");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QChronoTimer::timerType");
+ return;
+ }
+
+ timer.setInterval(1s);
+ timer.start();
+ QVERIFY(timer.isActive());
+ QTestPrivate::testReadOnlyPropertyBasics(timer, true, false, "active",
+ [&timer]() { timer.stop(); });
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QChronoTimer::active");
+ return;
+ }
+}
+
+void tst_QChronoTimer::negativeInterval()
+{
+ QChronoTimer timer;
+
+ auto ignoreMsg = [] {
+ QTest::ignoreMessage(QtWarningMsg,
+ "QObject::startTimer: Timers cannot have negative intervals");
+ };
+
+ ignoreMsg();
+ // Setting a negative interval does not change the active state.
+ timer.setInterval(-100ms);
+ ignoreMsg();
+ timer.start();
+ QVERIFY(!timer.isActive());
+
+ // Starting a timer that has a positive interval, the active state is changed
+ timer.setInterval(100ms);
+ timer.start();
+ QVERIFY(timer.isActive());
+
+ ignoreMsg();
+ // Setting a negative interval on an already running timer...
+ timer.setInterval(-100ms);
+ // ... the timer is stopped and the active state is changed
+ QVERIFY(!timer.isActive());
+
+ // Calling start on a timer that has a negative interval, does not change the active state
+ timer.start();
+ QVERIFY(!timer.isActive());
+}
+
+class OrderHelper : public QObject
+{
+ Q_OBJECT
+public:
+ enum CallType
+ {
+ String,
+ PMF,
+ Functor,
+ FunctorNoCtx
+ };
+ Q_ENUM(CallType)
+ QList<CallType> calls;
+
+ void triggerCall(CallType callType)
+ {
+ switch (callType)
+ {
+ case String:
+ QChronoTimer::singleShot(0ns, this, SLOT(stringSlot()));
+ break;
+ case PMF:
+ QChronoTimer::singleShot(0ns, this, &OrderHelper::pmfSlot);
+ break;
+ case Functor:
+ QChronoTimer::singleShot(0ns, this, [this]() { functorSlot(); });
+ break;
+ case FunctorNoCtx:
+ QChronoTimer::singleShot(0ns, [this]() { functorNoCtxSlot(); });
+ break;
+ }
+ }
+
+public slots:
+ void stringSlot() { calls << String; }
+ void pmfSlot() { calls << PMF; }
+ void functorSlot() { calls << Functor; }
+ void functorNoCtxSlot() { calls << FunctorNoCtx; }
+};
+
+Q_DECLARE_METATYPE(OrderHelper::CallType)
+
+void tst_QChronoTimer::timerOrder()
+{
+ QFETCH(QList<OrderHelper::CallType>, calls);
+
+ OrderHelper helper;
+
+ for (const auto call : calls)
+ helper.triggerCall(call);
+
+ QTRY_COMPARE(helper.calls, calls);
+}
+
+void tst_QChronoTimer::timerOrder_data()
+{
+ QTest::addColumn<QList<OrderHelper::CallType>>("calls");
+
+ QList<OrderHelper::CallType> calls = {
+ OrderHelper::String, OrderHelper::PMF,
+ OrderHelper::Functor, OrderHelper::FunctorNoCtx
+ };
+ std::sort(calls.begin(), calls.end());
+
+ int permutation = 0;
+ do {
+ QTest::addRow("permutation=%d", permutation) << calls;
+ ++permutation;
+ } while (std::next_permutation(calls.begin(), calls.end()));
+}
+
+void tst_QChronoTimer::timerOrderBackgroundThread()
+{
+ auto *thread = QThread::create([this]() { timerOrder(); });
+ thread->start();
+ QVERIFY(thread->wait());
+ delete thread;
+}
+
+void tst_QChronoTimer::timerPrecision()
+{
+ using namespace std::chrono;
+ steady_clock::time_point t1{};
+ steady_clock::time_point t2{};
+
+ QEventLoop loop;
+
+ QChronoTimer zeroTimer{0ns};
+ zeroTimer.setTimerType(Qt::PreciseTimer);
+ zeroTimer.setSingleShot(true);
+ connect(&zeroTimer, &QChronoTimer::timeout, this, [&t1] { t1 = steady_clock::now(); });
+
+ QChronoTimer oneNSecTimer{1ns};
+ oneNSecTimer.setTimerType(Qt::PreciseTimer);
+ oneNSecTimer.setSingleShot(true);
+ connect(&oneNSecTimer, &QChronoTimer::timeout, this, [&t2, &loop] {
+ t2 = steady_clock::now();
+ loop.quit();
+ });
+
+ zeroTimer.start();
+ oneNSecTimer.start();
+ loop.exec();
+ QCOMPARE_GT(t2, t1);
+ // qDebug() << "t2 - t1" << duration<double, std::chrono::milliseconds::period>{t2 - t1};
+}
+
+QTEST_MAIN(tst_QChronoTimer)
+
+#include "tst_qchronotimer.moc"
diff --git a/tests/auto/corelib/kernel/qcoreapplication/CMakeLists.txt b/tests/auto/corelib/kernel/qcoreapplication/CMakeLists.txt
index 24be474f90..8f9783088c 100644
--- a/tests/auto/corelib/kernel/qcoreapplication/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qcoreapplication/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qcoreapplication.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_qcoreapplication LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -8,38 +15,25 @@ endif()
## tst_qcoreapplication Test:
#####################################################################
-# special case begin
if (WIN32)
set(target_version "1.2.3.4")
else()
set(target_version "1.2.3")
endif()
-# special case end
qt_internal_add_test(tst_qcoreapplication
- VERSION ${target_version} # special case
+ VERSION ${target_version}
SOURCES
tst_qcoreapplication.cpp tst_qcoreapplication.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
-# special case begin
if (APPLE)
set_property(TARGET tst_qcoreapplication PROPERTY MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist")
set_property(TARGET tst_qcoreapplication PROPERTY PROPERTY MACOSX_BUNDLE TRUE)
endif()
-# special case end
-#### Keys ignored in scope 1:.:.:qcoreapplication.pro:<TRUE>:
-# QMAKE_INFO_PLIST = "$$PWD/Info.plist"
-# _REQUIREMENTS = "qtConfig(private_tests)"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:qcoreapplication.pro:WIN32:
-# VERSION = "1.2.3.4"
-
-#### Keys ignored in scope 3:.:.:qcoreapplication.pro:else:
-# VERSION = "1.2.3"
+if (ANDROID)
+ set_property(TARGET tst_qcoreapplication PROPERTY QT_ANDROID_VERSION_NAME ${target_version})
+endif()
diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
index fcfd3030d5..0745ea6ceb 100644
--- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
+++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp
@@ -1,38 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "tst_qcoreapplication.h"
#include <QtCore/QtCore>
#include <QTest>
+#include <private/qabstracteventdispatcher_p.h> // for qGlobalPostedEventsCount()
#include <private/qcoreapplication_p.h>
+#include <private/qcoreevent_p.h>
#include <private/qeventloop_p.h>
#include <private/qthread_p.h>
@@ -48,9 +25,12 @@ class EventSpy : public QObject
public:
QList<int> recordedEvents;
- bool eventFilter(QObject *, QEvent *event) override
+ std::function<void(QObject *, QEvent *)> eventCallback;
+ bool eventFilter(QObject *target, QEvent *event) override
{
recordedEvents.append(event->type());
+ if (eventCallback)
+ eventCallback(target, event);
return false;
}
};
@@ -123,7 +103,7 @@ void tst_QCoreApplication::getSetCheck()
void tst_QCoreApplication::qAppName()
{
-#ifdef QT_GUI_LIB
+#ifdef QT_QGUIAPPLICATIONTEST
const char* appName = "tst_qguiapplication";
#else
const char* appName = "tst_qcoreapplication";
@@ -199,7 +179,7 @@ void tst_QCoreApplication::argc()
char *argv[] = { const_cast<char*>(QTest::currentAppName()) };
TestApplication app(argc, argv);
QCOMPARE(argc, 1);
- QCOMPARE(app.arguments().count(), 1);
+ QCOMPARE(app.arguments().size(), 1);
}
{
@@ -210,7 +190,7 @@ void tst_QCoreApplication::argc()
const_cast<char*>("arg3") };
TestApplication app(argc, argv);
QCOMPARE(argc, 4);
- QCOMPARE(app.arguments().count(), 4);
+ QCOMPARE(app.arguments().size(), 4);
}
{
@@ -218,7 +198,7 @@ void tst_QCoreApplication::argc()
char **argv = 0;
TestApplication app(argc, argv);
QCOMPARE(argc, 0);
- QCOMPARE(app.arguments().count(), 0);
+ QCOMPARE(app.arguments().size(), 0);
}
{
@@ -227,7 +207,7 @@ void tst_QCoreApplication::argc()
const_cast<char*>("-qmljsdebugger=port:3768,block") };
TestApplication app(argc, argv);
QCOMPARE(argc, 1);
- QCOMPARE(app.arguments().count(), 1);
+ QCOMPARE(app.arguments().size(), 1);
}
}
@@ -538,16 +518,13 @@ void tst_QCoreApplication::applicationPid()
QVERIFY(QCoreApplication::applicationPid() > 0);
}
-QT_BEGIN_NAMESPACE
-Q_CORE_EXPORT uint qGlobalPostedEventsCount();
-QT_END_NAMESPACE
-
+#ifdef QT_BUILD_INTERNAL
class GlobalPostedEventsCountObject : public QObject
{
Q_OBJECT
public:
- QList<int> globalPostedEventsCount;
+ QList<qsizetype> globalPostedEventsCount;
bool event(QEvent *event) override
{
@@ -564,7 +541,7 @@ void tst_QCoreApplication::globalPostedEventsCount()
TestApplication app(argc, argv);
QCoreApplication::sendPostedEvents();
- QCOMPARE(qGlobalPostedEventsCount(), 0u);
+ QCOMPARE(qGlobalPostedEventsCount(), qsizetype(0));
GlobalPostedEventsCountObject x;
QCoreApplication::postEvent(&x, new QEvent(QEvent::User));
@@ -572,19 +549,15 @@ void tst_QCoreApplication::globalPostedEventsCount()
QCoreApplication::postEvent(&x, new QEvent(QEvent::User));
QCoreApplication::postEvent(&x, new QEvent(QEvent::User));
QCoreApplication::postEvent(&x, new QEvent(QEvent::User));
- QCOMPARE(qGlobalPostedEventsCount(), 5u);
+ QCOMPARE(qGlobalPostedEventsCount(), qsizetype(5));
QCoreApplication::sendPostedEvents();
- QCOMPARE(qGlobalPostedEventsCount(), 0u);
-
- QList<int> expected = QList<int>()
- << 4
- << 3
- << 2
- << 1
- << 0;
+ QCOMPARE(qGlobalPostedEventsCount(), qsizetype(0));
+
+ const QList<qsizetype> expected = {4, 3, 2, 1, 0};
QCOMPARE(x.globalPostedEventsCount, expected);
}
+#endif // QT_BUILD_INTERNAL
class ProcessEventsAlwaysSendsPostedEventsObject : public QObject
{
@@ -1052,7 +1025,7 @@ void tst_QCoreApplication::addRemoveLibPaths()
TestApplication app(argc, argv);
// If libraryPaths only contains currentDir, neither will be in libraryPaths now.
- if (paths.length() != 1 && currentDir != paths[0]) {
+ if (paths.size() != 1 && currentDir != paths[0]) {
// Check that modifications stay alive across the creation of an application.
QVERIFY(QCoreApplication::libraryPaths().contains(currentDir));
QVERIFY(!QCoreApplication::libraryPaths().contains(paths[0]));
@@ -1065,20 +1038,128 @@ void tst_QCoreApplication::addRemoveLibPaths()
}
#endif
+static bool theMainThreadIsSet()
+{
+ // QCoreApplicationPrivate::mainThread() has a Q_ASSERT we'd trigger
+ return QCoreApplicationPrivate::theMainThread.loadRelaxed() != nullptr;
+}
+
+static bool theMainThreadWasUnset = !theMainThreadIsSet(); // global static
+void tst_QCoreApplication::theMainThread()
+{
+ QVERIFY2(theMainThreadWasUnset, "Something set the theMainThread before main()");
+ QVERIFY(theMainThreadIsSet()); // we have at LEAST one QObject alive: tst_QCoreApplication
+
+ int argc = 1;
+ char *argv[] = { const_cast<char*>(QTest::currentAppName()) };
+ TestApplication app(argc, argv);
+ QVERIFY(QCoreApplicationPrivate::theMainThread.loadRelaxed());
+ QCOMPARE(QCoreApplicationPrivate::theMainThread.loadRelaxed(), thread());
+ QCOMPARE(app.thread(), thread());
+ QCOMPARE(app.thread(), QThread::currentThread());
+}
+
static void createQObjectOnDestruction()
{
- // Make sure that we can create a QObject after the last QObject has been
- // destroyed (especially after QCoreApplication has).
- //
+ // Make sure that we can create a QObject (and thus have an associated
+ // QThread) after the last QObject has been destroyed (especially after
+ // QCoreApplication has).
+
+#if !defined(QT_QGUIAPPLICATIONTEST) && !defined(Q_OS_WIN)
+ // QCoreApplicationData's global static destructor has run and cleaned up
+ // the QAdoptedThrad.
+ if (theMainThreadIsSet())
+ qFatal("theMainThreadIsSet() returned true; some QObject must have leaked");
+#endif
+
// Before the fixes, this would cause a dangling pointer dereference. If
// the problem comes back, it's possible that the following causes no
// effect.
QObject obj;
obj.thread()->setProperty("testing", 1);
+ if (!theMainThreadIsSet())
+ qFatal("theMainThreadIsSet() returned false");
+
+ // because we created a QObject after QCoreApplicationData was destroyed,
+ // the QAdoptedThread won't get cleaned up
}
Q_DESTRUCTOR_FUNCTION(createQObjectOnDestruction)
-#ifndef QT_GUI_LIB
+void tst_QCoreApplication::testDeleteLaterFromBeforeOutermostEventLoop()
+{
+ int argc = 0;
+ QCoreApplication app(argc, nullptr);
+
+ EventSpy *spy = new EventSpy();
+ QPointer<QObject> spyPointer = spy;
+
+ app.installEventFilter(spy);
+ spy->eventCallback = [spy](QObject *, QEvent *event) {
+ if (event->type() == QEvent::User + 1)
+ spy->deleteLater();
+ };
+
+ QCoreApplication::postEvent(&app, new QEvent(QEvent::Type(QEvent::User + 1)));
+ QCoreApplication::processEvents();
+
+ QEventLoop loop;
+ QTimer::singleShot(0, &loop, &QEventLoop::quit);
+ loop.exec();
+ QVERIFY(!spyPointer);
+}
+
+void tst_QCoreApplication::setIndividualAttributes_data()
+{
+ QTest::addColumn<Qt::ApplicationAttribute>("attribute");
+
+ const QMetaEnum &metaEnum = Qt::staticMetaObject.enumerator(Qt::staticMetaObject.indexOfEnumerator("ApplicationAttribute"));
+ // - 1 to avoid AA_AttributeCount.
+ for (int i = 0; i < metaEnum.keyCount(); ++i) {
+ const auto attribute = static_cast<Qt::ApplicationAttribute>(metaEnum.value(i));
+ if (attribute == Qt::AA_AttributeCount)
+ continue;
+
+ QTest::addRow("%s", metaEnum.key(i)) << attribute;
+ }
+}
+
+void tst_QCoreApplication::setIndividualAttributes()
+{
+ QFETCH(Qt::ApplicationAttribute, attribute);
+
+ const auto originalValue = QCoreApplication::testAttribute(attribute);
+ auto cleanup = qScopeGuard([=]() {
+ QCoreApplication::setAttribute(attribute, originalValue);
+ });
+
+ QCoreApplication::setAttribute(attribute, true);
+ QVERIFY(QCoreApplication::testAttribute(attribute));
+
+ QCoreApplication::setAttribute(attribute, false);
+ QVERIFY(!QCoreApplication::testAttribute(attribute));
+}
+
+void tst_QCoreApplication::setMultipleAttributes()
+{
+ const auto originalDontUseNativeMenuWindowsValue = QCoreApplication::testAttribute(Qt::AA_DontUseNativeMenuWindows);
+ const auto originalDisableSessionManagerValue = QCoreApplication::testAttribute(Qt::AA_DisableSessionManager);
+ auto cleanup = qScopeGuard([=]() {
+ QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuWindows, originalDontUseNativeMenuWindowsValue);
+ QCoreApplication::setAttribute(Qt::AA_DisableSessionManager, originalDisableSessionManagerValue);
+ });
+
+ QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuWindows, true);
+ QCoreApplication::setAttribute(Qt::AA_DisableSessionManager, true);
+ QVERIFY(QCoreApplication::testAttribute(Qt::AA_DontUseNativeMenuWindows));
+ QVERIFY(QCoreApplication::testAttribute(Qt::AA_DisableSessionManager));
+
+ QCoreApplication::setAttribute(Qt::AA_DontUseNativeMenuWindows, false);
+ QCoreApplication::setAttribute(Qt::AA_DisableSessionManager, false);
+ QVERIFY(!QCoreApplication::testAttribute(Qt::AA_DontUseNativeMenuWindows));
+ QVERIFY(!QCoreApplication::testAttribute(Qt::AA_DisableSessionManager));
+}
+
+#ifndef QT_QGUIAPPLICATIONTEST
QTEST_APPLESS_MAIN(tst_QCoreApplication)
#endif
diff --git a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h
index 655a879afa..1c25f63534 100644
--- a/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h
+++ b/tests/auto/corelib/kernel/qcoreapplication/tst_qcoreapplication.h
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef TST_QCOREAPPLICATION_H
#define TST_QCOREAPPLICATION_H
@@ -47,7 +22,9 @@ private slots:
void deliverInDefinedOrder();
#endif
void applicationPid();
+#ifdef QT_BUILD_INTERNAL
void globalPostedEventsCount();
+#endif
void processEventsAlwaysSendsPostedEvents();
#ifdef Q_OS_WIN
void sendPostedEventsInNativeLoop();
@@ -67,6 +44,11 @@ private slots:
#if QT_CONFIG(library)
void addRemoveLibPaths();
#endif
+ void theMainThread();
+ void testDeleteLaterFromBeforeOutermostEventLoop();
+ void setIndividualAttributes_data();
+ void setIndividualAttributes();
+ void setMultipleAttributes();
};
#endif // TST_QCOREAPPLICATION_H
diff --git a/tests/auto/corelib/kernel/qdeadlinetimer/CMakeLists.txt b/tests/auto/corelib/kernel/qdeadlinetimer/CMakeLists.txt
index 8c8721abf5..2031cd9d48 100644
--- a/tests/auto/corelib/kernel/qdeadlinetimer/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qdeadlinetimer/CMakeLists.txt
@@ -1,10 +1,19 @@
-# Generated from qdeadlinetimer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdeadlinetimer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdeadlinetimer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdeadlinetimer
SOURCES
tst_qdeadlinetimer.cpp
+ LIBRARIES
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp b/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp
index 540856ad6e..79416faaf9 100644
--- a/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp
+++ b/tests/auto/corelib/kernel/qdeadlinetimer/tst_qdeadlinetimer.cpp
@@ -1,52 +1,42 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QString>
#include <QtCore/QTime>
#include <QtCore/QDeadlineTimer>
#include <QtCore/QElapsedTimer>
#include <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
#include <QTimer>
-#if __has_include(<chrono>)
-# include <chrono>
-#endif
+#include <chrono>
+#include <inttypes.h>
static const int minResolution = 400; // the minimum resolution for the tests
-Q_DECLARE_METATYPE(Qt::TimerType)
+QT_BEGIN_NAMESPACE
+namespace QTest {
+template<> char *toString(const QDeadlineTimer &dt)
+{
+ if (dt.isForever())
+ return qstrdup("QDeadlineTimer::Forever");
+
+ qint64 deadline = dt.deadlineNSecs();
+ char *buf = new char[256];
+ qsnprintf(buf, 256, "%lld.%09d%s",
+ deadline / 1000 / 1000 / 1000, qAbs(deadline) % (1000 * 1000 * 1000),
+ dt.hasExpired() ? " (expired)" : "");
+ return buf;
+}
+}
+QT_END_NAMESPACE
class tst_QDeadlineTimer : public QObject
{
Q_OBJECT
private Q_SLOTS:
- void initTestCase_data();
+ void compareCompiles();
void basics();
void foreverness();
void current();
@@ -57,12 +47,11 @@ private Q_SLOTS:
void stdchrono();
};
-void tst_QDeadlineTimer::initTestCase_data()
+static constexpr auto timerType = Qt::PreciseTimer;
+
+void tst_QDeadlineTimer::compareCompiles()
{
- qRegisterMetaType<Qt::TimerType>();
- QTest::addColumn<Qt::TimerType>("timerType");
- QTest::newRow("precise") << Qt::PreciseTimer;
- QTest::newRow("coarse") << Qt::CoarseTimer;
+ QTestPrivate::testAllComparisonOperatorsCompile<QDeadlineTimer>();
}
void tst_QDeadlineTimer::basics()
@@ -70,20 +59,22 @@ void tst_QDeadlineTimer::basics()
QDeadlineTimer deadline;
QCOMPARE(deadline.timerType(), Qt::CoarseTimer);
- QFETCH_GLOBAL(Qt::TimerType, timerType);
deadline = QDeadlineTimer(timerType);
QCOMPARE(deadline.timerType(), timerType);
QVERIFY(!deadline.isForever());
QCOMPARE(deadline, QDeadlineTimer(timerType));
QVERIFY(!(deadline != QDeadlineTimer(timerType)));
QVERIFY(!(deadline < QDeadlineTimer()));
- QVERIFY(deadline <= QDeadlineTimer());
- QVERIFY(deadline >= QDeadlineTimer());
+ QCOMPARE_LE(deadline, QDeadlineTimer());
+ QCOMPARE_GE(deadline, QDeadlineTimer());
QVERIFY(!(deadline > QDeadlineTimer()));
QVERIFY(!(deadline < deadline));
- QVERIFY(deadline <= deadline);
- QVERIFY(deadline >= deadline);
+ QCOMPARE_LE(deadline, deadline);
+ QCOMPARE_GE(deadline, deadline);
QVERIFY(!(deadline > deadline));
+ QT_TEST_ALL_COMPARISON_OPS(deadline, QDeadlineTimer(timerType), Qt::strong_ordering::equal);
+ QT_TEST_ALL_COMPARISON_OPS(deadline, QDeadlineTimer(), Qt::strong_ordering::equal);
+ QT_TEST_ALL_COMPARISON_OPS(QDeadlineTimer(), QDeadlineTimer(), Qt::strong_ordering::equal);
// should have expired, but we may be running too early after boot
QTRY_VERIFY_WITH_TIMEOUT(deadline.hasExpired(), 100);
@@ -96,18 +87,18 @@ void tst_QDeadlineTimer::basics()
deadline.setRemainingTime(0, timerType);
QCOMPARE(deadline.remainingTime(), qint64(0));
QCOMPARE(deadline.remainingTimeNSecs(), qint64(0));
- QVERIFY(deadline.deadline() != 0);
- QVERIFY(deadline.deadline() != std::numeric_limits<qint64>::max());
- QVERIFY(deadline.deadlineNSecs() != 0);
- QVERIFY(deadline.deadlineNSecs() != std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadline(), 0);
+ QCOMPARE_NE(deadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadlineNSecs(), 0);
+ QCOMPARE_NE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
deadline.setPreciseRemainingTime(0, 0, timerType);
QCOMPARE(deadline.remainingTime(), qint64(0));
QCOMPARE(deadline.remainingTimeNSecs(), qint64(0));
- QVERIFY(deadline.deadline() != 0);
- QVERIFY(deadline.deadline() != std::numeric_limits<qint64>::max());
- QVERIFY(deadline.deadlineNSecs() != 0);
- QVERIFY(deadline.deadlineNSecs() != std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadline(), 0);
+ QCOMPARE_NE(deadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadlineNSecs(), 0);
+ QCOMPARE_NE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
deadline.setDeadline(0, timerType);
QCOMPARE(deadline.remainingTime(), qint64(0));
@@ -124,9 +115,6 @@ void tst_QDeadlineTimer::basics()
void tst_QDeadlineTimer::foreverness()
{
- QFETCH_GLOBAL(Qt::TimerType, timerType);
- // we don't check whether timerType() is our type since it's possible it detects it's forever
-
QDeadlineTimer deadline = QDeadlineTimer::Forever;
QCOMPARE(deadline.timerType(), Qt::CoarseTimer);
QVERIFY(deadline.isForever());
@@ -186,9 +174,10 @@ void tst_QDeadlineTimer::foreverness()
QCOMPARE(deadline, deadline);
QVERIFY(!(deadline < deadline));
- QVERIFY(deadline <= deadline);
- QVERIFY(deadline >= deadline);
+ QCOMPARE_LE(deadline, deadline);
+ QCOMPARE_GE(deadline, deadline);
QVERIFY(!(deadline > deadline));
+ QT_TEST_ALL_COMPARISON_OPS(deadline, deadline, Qt::strong_ordering::equal);
// adding to forever must still be forever
QDeadlineTimer deadline2 = deadline + 1;
@@ -203,9 +192,10 @@ void tst_QDeadlineTimer::foreverness()
QCOMPARE(deadline2 - deadline, qint64(0));
QCOMPARE(deadline2, deadline);
QVERIFY(!(deadline2 < deadline));
- QVERIFY(deadline2 <= deadline);
- QVERIFY(deadline2 >= deadline);
+ QCOMPARE_LE(deadline2, deadline);
+ QCOMPARE_GE(deadline2, deadline);
QVERIFY(!(deadline2 > deadline));
+ QT_TEST_ALL_COMPARISON_OPS(deadline2, deadline, Qt::strong_ordering::equal);
// subtracting from forever is *also* forever
deadline2 = deadline - 1;
@@ -220,33 +210,34 @@ void tst_QDeadlineTimer::foreverness()
QCOMPARE(deadline2 - deadline, qint64(0));
QCOMPARE(deadline2, deadline);
QVERIFY(!(deadline2 < deadline));
- QVERIFY(deadline2 <= deadline);
- QVERIFY(deadline2 >= deadline);
+ QCOMPARE_LE(deadline2, deadline);
+ QCOMPARE_GE(deadline2, deadline);
QVERIFY(!(deadline2 > deadline));
+ QT_TEST_ALL_COMPARISON_OPS(deadline2, deadline, Qt::strong_ordering::equal);
// compare and order against a default-constructed object
QDeadlineTimer expired;
QVERIFY(!(deadline == expired));
- QVERIFY(deadline != expired);
+ QCOMPARE_NE(deadline, expired);
QVERIFY(!(deadline < expired));
QVERIFY(!(deadline <= expired));
- QVERIFY(deadline >= expired);
- QVERIFY(deadline > expired);
+ QCOMPARE_GE(deadline, expired);
+ QCOMPARE_GT(deadline, expired);
+ QT_TEST_EQUALITY_OPS(deadline, expired, false);
}
void tst_QDeadlineTimer::current()
{
- QFETCH_GLOBAL(Qt::TimerType, timerType);
auto deadline = QDeadlineTimer::current(timerType);
QVERIFY(deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
QCOMPARE(deadline.remainingTime(), qint64(0));
QCOMPARE(deadline.remainingTimeNSecs(), qint64(0));
- QVERIFY(deadline.deadline() != 0);
- QVERIFY(deadline.deadline() != std::numeric_limits<qint64>::max());
- QVERIFY(deadline.deadlineNSecs() != 0);
- QVERIFY(deadline.deadlineNSecs() != std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadline(), 0);
+ QCOMPARE_NE(deadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadlineNSecs(), 0);
+ QCOMPARE_NE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
// subtracting from current should be "more expired"
QDeadlineTimer earlierDeadline = deadline - 1;
@@ -255,122 +246,123 @@ void tst_QDeadlineTimer::current()
QCOMPARE(earlierDeadline.timerType(), timerType);
QCOMPARE(earlierDeadline.remainingTime(), qint64(0));
QCOMPARE(earlierDeadline.remainingTimeNSecs(), qint64(0));
- QVERIFY(earlierDeadline.deadline() != 0);
- QVERIFY(earlierDeadline.deadline() != std::numeric_limits<qint64>::max());
- QVERIFY(earlierDeadline.deadlineNSecs() != 0);
- QVERIFY(earlierDeadline.deadlineNSecs() != std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(earlierDeadline.deadline(), 0);
+ QCOMPARE_NE(earlierDeadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(earlierDeadline.deadlineNSecs(), 0);
+ QCOMPARE_NE(earlierDeadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
QCOMPARE(earlierDeadline.deadline(), deadline.deadline() - 1);
QCOMPARE(earlierDeadline.deadlineNSecs(), deadline.deadlineNSecs() - 1000*1000);
QCOMPARE(earlierDeadline - deadline, qint64(-1));
- QVERIFY(earlierDeadline != deadline);
- QVERIFY(earlierDeadline < deadline);
- QVERIFY(earlierDeadline <= deadline);
+ QCOMPARE_NE(earlierDeadline, deadline);
+ QCOMPARE_LT(earlierDeadline, deadline);
+ QCOMPARE_LE(earlierDeadline, deadline);
QVERIFY(!(earlierDeadline >= deadline));
QVERIFY(!(earlierDeadline > deadline));
+ QT_TEST_ALL_COMPARISON_OPS(earlierDeadline, deadline, Qt::strong_ordering::less);
}
void tst_QDeadlineTimer::deadlines()
{
- QFETCH_GLOBAL(Qt::TimerType, timerType);
-
QDeadlineTimer deadline(4 * minResolution, timerType);
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
- QVERIFY(deadline.remainingTime() > (3 * minResolution));
- QVERIFY(deadline.remainingTime() <= (4 * minResolution));
- QVERIFY(deadline.remainingTimeNSecs() > (3000000 * minResolution));
- QVERIFY(deadline.remainingTimeNSecs() <= (4000000 * minResolution));
- QVERIFY(deadline.deadline() != 0);
- QVERIFY(deadline.deadline() != std::numeric_limits<qint64>::max());
- QVERIFY(deadline.deadlineNSecs() != 0);
- QVERIFY(deadline.deadlineNSecs() != std::numeric_limits<qint64>::max());
+ QCOMPARE_GT(deadline.remainingTime(), (3 * minResolution));
+ QCOMPARE_LE(deadline.remainingTime(), (4 * minResolution));
+ QCOMPARE_GT(deadline.remainingTimeNSecs(), (3000000 * minResolution));
+ QCOMPARE_LE(deadline.remainingTimeNSecs(), (4000000 * minResolution));
+ QCOMPARE_NE(deadline.deadline(), 0);
+ QCOMPARE_NE(deadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadlineNSecs(), 0);
+ QCOMPARE_NE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
deadline.setRemainingTime(4 * minResolution, timerType);
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
- QVERIFY(deadline.remainingTime() > (3 * minResolution));
- QVERIFY(deadline.remainingTime() <= (4 * minResolution));
- QVERIFY(deadline.remainingTimeNSecs() > (3000000 * minResolution));
- QVERIFY(deadline.remainingTimeNSecs() <= (4000000 * minResolution));
- QVERIFY(deadline.deadline() != 0);
- QVERIFY(deadline.deadline() != std::numeric_limits<qint64>::max());
- QVERIFY(deadline.deadlineNSecs() != 0);
- QVERIFY(deadline.deadlineNSecs() != std::numeric_limits<qint64>::max());
+ QCOMPARE_GT(deadline.remainingTime(), (3 * minResolution));
+ QCOMPARE_LE(deadline.remainingTime(), (4 * minResolution));
+ QCOMPARE_GT(deadline.remainingTimeNSecs(), (3000000 * minResolution));
+ QCOMPARE_LE(deadline.remainingTimeNSecs(), (4000000 * minResolution));
+ QCOMPARE_NE(deadline.deadline(), 0);
+ QCOMPARE_NE(deadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadlineNSecs(), 0);
+ QCOMPARE_NE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
deadline.setPreciseRemainingTime(0, 4000000 * minResolution, timerType);
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
- QVERIFY(deadline.remainingTime() > (3 * minResolution));
- QVERIFY(deadline.remainingTime() <= (4 * minResolution));
- QVERIFY(deadline.remainingTimeNSecs() > (3000000 * minResolution));
- QVERIFY(deadline.remainingTimeNSecs() <= (4000000 * minResolution));
- QVERIFY(deadline.deadline() != 0);
- QVERIFY(deadline.deadline() != std::numeric_limits<qint64>::max());
- QVERIFY(deadline.deadlineNSecs() != 0);
- QVERIFY(deadline.deadlineNSecs() != std::numeric_limits<qint64>::max());
+ QCOMPARE_GT(deadline.remainingTime(), (3 * minResolution));
+ QCOMPARE_LE(deadline.remainingTime(), (4 * minResolution));
+ QCOMPARE_GT(deadline.remainingTimeNSecs(), (3000000 * minResolution));
+ QCOMPARE_LE(deadline.remainingTimeNSecs(), (4000000 * minResolution));
+ QCOMPARE_NE(deadline.deadline(), 0);
+ QCOMPARE_NE(deadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadlineNSecs(), 0);
+ QCOMPARE_NE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
deadline.setPreciseRemainingTime(1, 0, timerType); // 1 sec
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
- QVERIFY(deadline.remainingTime() > (1000 - minResolution));
- QVERIFY(deadline.remainingTime() <= 1000);
- QVERIFY(deadline.remainingTimeNSecs() > (1000 - minResolution)*1000*1000);
- QVERIFY(deadline.remainingTimeNSecs() <= (1000*1000*1000));
- QVERIFY(deadline.deadline() != 0);
- QVERIFY(deadline.deadline() != std::numeric_limits<qint64>::max());
- QVERIFY(deadline.deadlineNSecs() != 0);
- QVERIFY(deadline.deadlineNSecs() != std::numeric_limits<qint64>::max());
+ QCOMPARE_GT(deadline.remainingTime(), (1000 - minResolution));
+ QCOMPARE_LE(deadline.remainingTime(), 1000);
+ QCOMPARE_GT(deadline.remainingTimeNSecs(), (1000 - minResolution)*1000*1000);
+ QCOMPARE_LE(deadline.remainingTimeNSecs(), (1000*1000*1000));
+ QCOMPARE_NE(deadline.deadline(), 0);
+ QCOMPARE_NE(deadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadlineNSecs(), 0);
+ QCOMPARE_NE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
// adding to a future deadline must still be further in the future
QDeadlineTimer laterDeadline = deadline + 1;
QVERIFY(!laterDeadline.hasExpired());
QVERIFY(!laterDeadline.isForever());
QCOMPARE(laterDeadline.timerType(), timerType);
- QVERIFY(laterDeadline.remainingTime() > (1000 - minResolution));
- QVERIFY(laterDeadline.remainingTime() <= 1001);
- QVERIFY(laterDeadline.remainingTimeNSecs() > (1001 - minResolution)*1000*1000);
- QVERIFY(laterDeadline.remainingTimeNSecs() <= (1001*1000*1000));
- QVERIFY(laterDeadline.deadline() != 0);
- QVERIFY(laterDeadline.deadline() != std::numeric_limits<qint64>::max());
- QVERIFY(laterDeadline.deadlineNSecs() != 0);
- QVERIFY(laterDeadline.deadlineNSecs() != std::numeric_limits<qint64>::max());
+ QCOMPARE_GT(laterDeadline.remainingTime(), (1000 - minResolution));
+ QCOMPARE_LE(laterDeadline.remainingTime(), 1001);
+ QCOMPARE_GT(laterDeadline.remainingTimeNSecs(), (1001 - minResolution)*1000*1000);
+ QCOMPARE_LE(laterDeadline.remainingTimeNSecs(), (1001*1000*1000));
+ QCOMPARE_NE(laterDeadline.deadline(), 0);
+ QCOMPARE_NE(laterDeadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(laterDeadline.deadlineNSecs(), 0);
+ QCOMPARE_NE(laterDeadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
QCOMPARE(laterDeadline.deadline(), deadline.deadline() + 1);
QCOMPARE(laterDeadline.deadlineNSecs(), deadline.deadlineNSecs() + 1000*1000);
QCOMPARE(laterDeadline - deadline, qint64(1));
- QVERIFY(laterDeadline != deadline);
+ QCOMPARE_NE(laterDeadline, deadline);
QVERIFY(!(laterDeadline < deadline));
QVERIFY(!(laterDeadline <= deadline));
- QVERIFY(laterDeadline >= deadline);
- QVERIFY(laterDeadline > deadline);
+ QCOMPARE_GE(laterDeadline, deadline);
+ QCOMPARE_GT(laterDeadline, deadline);
+ QT_TEST_ALL_COMPARISON_OPS(laterDeadline, deadline, Qt::strong_ordering::greater);
// compare and order against a default-constructed object
QDeadlineTimer expired;
QVERIFY(!(deadline == expired));
- QVERIFY(deadline != expired);
+ QCOMPARE_NE(deadline, expired);
QVERIFY(!(deadline < expired));
QVERIFY(!(deadline <= expired));
- QVERIFY(deadline >= expired);
- QVERIFY(deadline > expired);
+ QCOMPARE_GE(deadline, expired);
+ QCOMPARE_GT(deadline, expired);
+ QT_TEST_EQUALITY_OPS(deadline, expired, false);
// compare and order against a forever deadline
QDeadlineTimer forever_(QDeadlineTimer::Forever);
+ QT_TEST_EQUALITY_OPS(deadline, forever_, false);
QVERIFY(!(deadline == forever_));
- QVERIFY(deadline != forever_);
- QVERIFY(deadline < forever_);
- QVERIFY(deadline <= forever_);
+ QCOMPARE_NE(deadline, forever_);
+ QCOMPARE_LT(deadline, forever_);
+ QCOMPARE_LE(deadline, forever_);
QVERIFY(!(deadline >= forever_));
QVERIFY(!(deadline > forever_));
}
void tst_QDeadlineTimer::setDeadline()
{
- QFETCH_GLOBAL(Qt::TimerType, timerType);
auto now = QDeadlineTimer::current(timerType);
QDeadlineTimer deadline;
@@ -398,10 +390,10 @@ void tst_QDeadlineTimer::setDeadline()
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
- QVERIFY(deadline.remainingTime() > (3 * minResolution));
- QVERIFY(deadline.remainingTime() <= (4 * minResolution));
- QVERIFY(deadline.remainingTimeNSecs() > (3000000 * minResolution));
- QVERIFY(deadline.remainingTimeNSecs() <= (4000000 * minResolution));
+ QCOMPARE_GT(deadline.remainingTime(), (3 * minResolution));
+ QCOMPARE_LE(deadline.remainingTime(), (4 * minResolution));
+ QCOMPARE_GT(deadline.remainingTimeNSecs(), (3000000 * minResolution));
+ QCOMPARE_LE(deadline.remainingTimeNSecs(), (4000000 * minResolution));
QCOMPARE(deadline.deadline(), now.deadline() + 4 * minResolution); // yes, it's exact
// don't check deadlineNSecs!
@@ -412,17 +404,16 @@ void tst_QDeadlineTimer::setDeadline()
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
- QVERIFY(deadline.remainingTime() > (3 * minResolution));
- QVERIFY(deadline.remainingTime() <= (4 * minResolution));
- QVERIFY(deadline.remainingTimeNSecs() > (3000000 * minResolution));
- QVERIFY(deadline.remainingTimeNSecs() <= (4000000 * minResolution));
+ QCOMPARE_GT(deadline.remainingTime(), (3 * minResolution));
+ QCOMPARE_LE(deadline.remainingTime(), (4 * minResolution));
+ QCOMPARE_GT(deadline.remainingTimeNSecs(), (3000000 * minResolution));
+ QCOMPARE_LE(deadline.remainingTimeNSecs(), (4000000 * minResolution));
QCOMPARE(deadline.deadline(), nsec / (1000 * 1000));
QCOMPARE(deadline.deadlineNSecs(), nsec);
}
void tst_QDeadlineTimer::overflow()
{
- QFETCH_GLOBAL(Qt::TimerType, timerType);
// Check the constructor for overflows (should also cover saturating the result of the deadline() method if overflowing)
QDeadlineTimer now = QDeadlineTimer::current(timerType), deadline(std::numeric_limits<qint64>::max() - 1, timerType);
QVERIFY(deadline.isForever() || deadline.deadline() >= now.deadline());
@@ -480,27 +471,48 @@ void tst_QDeadlineTimer::overflow()
// However we are tracking the elapsed time, so it shouldn't be a problem.
deadline.setPreciseRemainingTime(1, -1000, timerType);
qint64 difference = (deadline.deadlineNSecs() - nsDeadline) - nsExpected;
- QVERIFY(difference >= 0); // Should always be true, but just in case
- QVERIFY(difference <= callTimer.nsecsElapsed()); // Ideally difference should be 0 exactly
+ QCOMPARE_GE(difference, 0); // Should always be true, but just in case
+ QCOMPARE_LE(difference, callTimer.nsecsElapsed()); // Ideally difference should be 0 exactly
// Make sure setRemainingTime underflows gracefully
deadline.setPreciseRemainingTime(std::numeric_limits<qint64>::min() / 10, 0, timerType);
- QVERIFY(!deadline.isForever()); // On Win/macOS the above underflows, make sure we don't saturate to Forever
- QVERIFY(deadline.remainingTime() == 0);
+ QVERIFY(deadline.isForever()); // The above could underflow, so make sure we did set to Forever
+ QCOMPARE(deadline.remainingTimeNSecs(), -1);
+ QCOMPARE(deadline.remainingTime(), -1);
// If the timer is saturated we don't want to get a valid number of milliseconds
- QVERIFY(deadline.deadline() == std::numeric_limits<qint64>::min());
+ QCOMPARE(deadline.deadline(), std::numeric_limits<qint64>::max());
// Check that the conversion to milliseconds and nanoseconds underflows gracefully
deadline.setPreciseDeadline(std::numeric_limits<qint64>::min() / 10, 0, timerType);
- QVERIFY(!deadline.isForever()); // On Win/macOS the above underflows, make sure we don't saturate to Forever
+ QVERIFY(!deadline.isForever()); // The above underflows, make sure we don't saturate to Forever
QVERIFY(deadline.deadline() == std::numeric_limits<qint64>::min());
QVERIFY(deadline.deadlineNSecs() == std::numeric_limits<qint64>::min());
+
+ // Check that subtracting max() twice doesn't make it become positive
+ deadline.setPreciseDeadline(0);
+ deadline -= std::numeric_limits<qint64>::max();
+ deadline -= std::numeric_limits<qint64>::max();
+ QVERIFY(!deadline.isForever());
+ QCOMPARE(deadline.deadline(), std::numeric_limits<qint64>::min());
+ QCOMPARE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::min());
+
+ // Ditto for adding max()
+ deadline.setPreciseDeadline(0);
+ deadline += std::numeric_limits<qint64>::max();
+ deadline += std::numeric_limits<qint64>::max();
+ QVERIFY(deadline.isForever()); // it's so far in the future it's effectively forever
+ QCOMPARE(deadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
+
+ // But we don't un-become forever after saturation
+ deadline -= std::numeric_limits<qint64>::max();
+ QVERIFY(deadline.isForever());
+ QCOMPARE(deadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
}
void tst_QDeadlineTimer::expire()
{
- QFETCH_GLOBAL(Qt::TimerType, timerType);
-
QDeadlineTimer deadline(minResolution, timerType);
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
@@ -511,20 +523,17 @@ void tst_QDeadlineTimer::expire()
QCOMPARE(deadline.remainingTime(), qint64(0));
QCOMPARE(deadline.remainingTimeNSecs(), qint64(0));
- QVERIFY(deadline.deadline() != 0);
- QVERIFY(deadline.deadline() != std::numeric_limits<qint64>::max());
- QVERIFY(deadline.deadlineNSecs() != 0);
- QVERIFY(deadline.deadlineNSecs() != std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadline(), 0);
+ QCOMPARE_NE(deadline.deadline(), std::numeric_limits<qint64>::max());
+ QCOMPARE_NE(deadline.deadlineNSecs(), 0);
+ QCOMPARE_NE(deadline.deadlineNSecs(), std::numeric_limits<qint64>::max());
QCOMPARE(deadline.deadlineNSecs(), previousDeadline);
}
void tst_QDeadlineTimer::stdchrono()
{
-#if !__has_include(<chrono>)
- QSKIP("std::chrono not found on this system");
-#else
using namespace std::chrono;
- QFETCH_GLOBAL(Qt::TimerType, timerType);
+ using namespace std::chrono_literals;
// create some forevers
QDeadlineTimer deadline = milliseconds::max();
@@ -597,132 +606,134 @@ void tst_QDeadlineTimer::stdchrono()
QTRY_VERIFY2_WITH_TIMEOUT(timersExecuted,
"Looks like timers didn't fire on time.", 4 * minResolution);
-#if defined(Q_OS_DARWIN) || defined(Q_OS_LINUX) || (defined(Q_CC_MSVC) && Q_CC_MSVC >= 1900)
{
- // We know for these OS/compilers that the std::chrono::steady_clock uses the same
- // reference time as QDeadlineTimer
qint64 before = duration_cast<nanoseconds>(steady_before.time_since_epoch()).count();
qint64 after = duration_cast<nanoseconds>(steady_after.time_since_epoch()).count();
- QVERIFY2(now.deadlineNSecs() > before, QByteArray::number(now.deadlineNSecs()) +
- " > " + QByteArray::number(before));
- QVERIFY2(now.deadlineNSecs() < after, QByteArray::number(now.deadlineNSecs()) +
- " < " + QByteArray::number(after));
+ QCOMPARE_GT(now.deadlineNSecs(), before);
+ QCOMPARE_LT(now.deadlineNSecs(), after);
}
-#endif
+
{
auto diff = duration_cast<milliseconds>(steady_after - steady_deadline);
- QVERIFY2(diff.count() > minResolution / 2, QByteArray::number(qint64(diff.count())));
- QVERIFY2(diff.count() < 3 * minResolution / 2, QByteArray::number(qint64(diff.count())));
+ QCOMPARE_GT(diff.count(), minResolution / 2);
+ QCOMPARE_LT(diff.count(), 3 * minResolution / 2);
QDeadlineTimer dt_after(steady_after, timerType);
- QVERIFY2(now < dt_after,
- ("now = " + QLocale().toString(now.deadlineNSecs()) +
- "; after = " + QLocale().toString(dt_after.deadlineNSecs())).toLatin1());
+ QCOMPARE_LT(now, dt_after);
+ QT_TEST_ALL_COMPARISON_OPS(now, dt_after, Qt::strong_ordering::less);
diff = duration_cast<milliseconds>(steady_deadline - steady_before);
- QVERIFY2(diff.count() > minResolution / 2, QByteArray::number(qint64(diff.count())));
- QVERIFY2(diff.count() < 3 * minResolution / 2, QByteArray::number(qint64(diff.count())));
+ QCOMPARE_GT(diff.count(), minResolution / 2);
+ QCOMPARE_LT(diff.count(), 3 * minResolution / 2);
QDeadlineTimer dt_before(steady_before, timerType);
- QVERIFY2(now > dt_before,
- ("now = " + QLocale().toString(now.deadlineNSecs()) +
- "; before = " + QLocale().toString(dt_before.deadlineNSecs())).toLatin1());
+ QCOMPARE_GT(now, dt_before);
+ QT_TEST_ALL_COMPARISON_OPS(now, dt_before, Qt::strong_ordering::greater);
}
{
auto diff = duration_cast<milliseconds>(system_after - system_deadline);
- QVERIFY2(diff.count() > minResolution / 2, QByteArray::number(qint64(diff.count())));
- QVERIFY2(diff.count() < 3 * minResolution / 2, QByteArray::number(qint64(diff.count())));
+ QCOMPARE_GT(diff.count(), minResolution / 2);
+ QCOMPARE_LT(diff.count(), 3 * minResolution / 2);
QDeadlineTimer dt_after(system_after, timerType);
- QVERIFY2(now < dt_after,
- ("now = " + QLocale().toString(now.deadlineNSecs()) +
- "; after = " + QLocale().toString(dt_after.deadlineNSecs())).toLatin1());
+ QCOMPARE_LT(now, dt_after);
+ QT_TEST_ALL_COMPARISON_OPS(now, dt_after, Qt::strong_ordering::less);
diff = duration_cast<milliseconds>(system_deadline - system_before);
- QVERIFY2(diff.count() > minResolution / 2, QByteArray::number(qint64(diff.count())));
- QVERIFY2(diff.count() < 3 * minResolution / 2, QByteArray::number(qint64(diff.count())));
+ QCOMPARE_GT(diff.count(), minResolution / 2);
+ QCOMPARE_LT(diff.count(), 3 * minResolution / 2);
QDeadlineTimer dt_before(system_before, timerType);
- QVERIFY2(now > dt_before,
- ("now = " + QLocale().toString(now.deadlineNSecs()) +
- "; before = " + QLocale().toString(dt_before.deadlineNSecs())).toLatin1());
+ QCOMPARE_GT(now, dt_before);
+ QT_TEST_ALL_COMPARISON_OPS(now, dt_before, Qt::strong_ordering::greater);
}
// make it regular
now = QDeadlineTimer::current(timerType);
- deadline.setRemainingTime(milliseconds(4 * minResolution), timerType);
+ deadline.setRemainingTime(4ms * minResolution, timerType);
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
- QVERIFY(deadline.remainingTimeAsDuration() > milliseconds(3 * minResolution));
- QVERIFY(deadline.remainingTimeAsDuration() < milliseconds(5 * minResolution));
- QVERIFY(deadline.remainingTimeAsDuration() > nanoseconds(3000000 * minResolution));
- QVERIFY(deadline.remainingTimeAsDuration() < nanoseconds(5000000 * minResolution));
- QVERIFY(deadline.deadline<steady_clock>() > (steady_clock::now() + milliseconds(3 * minResolution)));
- QVERIFY(deadline.deadline<steady_clock>() < (steady_clock::now() + milliseconds(5 * minResolution)));
- QVERIFY(deadline.deadline<system_clock>() > (system_clock::now() + milliseconds(3 * minResolution)));
- QVERIFY(deadline.deadline<system_clock>() < (system_clock::now() + milliseconds(5 * minResolution)));
- if (timerType == Qt::CoarseTimer) {
- QVERIFY(deadline > (now + milliseconds(3 * minResolution)));
- QVERIFY(deadline < (now + milliseconds(5 * minResolution)));
- QVERIFY(deadline > (now + nanoseconds(3000000 * minResolution)));
- QVERIFY(deadline < (now + nanoseconds(5000000 * minResolution)));
- QVERIFY(deadline > milliseconds(3 * minResolution));
- QVERIFY(deadline < milliseconds(5 * minResolution));
- QVERIFY(deadline > nanoseconds(3000000 * minResolution));
- QVERIFY(deadline < nanoseconds(5000000 * minResolution));
- QVERIFY(deadline >= steady_clock::now());
- QVERIFY(deadline >= system_clock::now());
- }
+ QCOMPARE_GT(deadline.remainingTimeAsDuration(), 3ms * minResolution);
+ QCOMPARE_LT(deadline.remainingTimeAsDuration(), 5ms * minResolution);
+ QCOMPARE_GT(deadline.remainingTimeAsDuration(), 3'000'000ns * minResolution);
+ QCOMPARE_LT(deadline.remainingTimeAsDuration(), 5'000'000ns * minResolution);
+ QCOMPARE_GT(deadline.deadline<steady_clock>(), (steady_clock::now() + 3ms * minResolution));
+ QCOMPARE_LT(deadline.deadline<steady_clock>(), (steady_clock::now() + 5ms * minResolution));
+ QCOMPARE_GT(deadline.deadline<system_clock>(), (system_clock::now() + 3ms * minResolution));
+ QCOMPARE_LT(deadline.deadline<system_clock>(), (system_clock::now() + 5ms * minResolution));
+ QCOMPARE_GT((deadline.deadline<steady_clock, milliseconds>()),
+ steady_clock::now() + 3ms * minResolution);
+ QCOMPARE_LT((deadline.deadline<steady_clock, milliseconds>()),
+ steady_clock::now() + 5ms * minResolution);
+ QCOMPARE_GT((deadline.deadline<system_clock, milliseconds>()),
+ system_clock::now() + 3ms * minResolution);
+ QCOMPARE_LT((deadline.deadline<system_clock, milliseconds>()),
+ system_clock::now() + 5ms * minResolution);
+ QCOMPARE_GT(deadline, now + 3ms * minResolution);
+ QCOMPARE_LT(deadline, now + 5ms * minResolution);
+ QCOMPARE_GT(deadline, now + 3000000ns * minResolution);
+ QCOMPARE_LT(deadline, now + 5000000ns * minResolution);
+ QCOMPARE_GT(deadline, 3ms * minResolution);
+ QCOMPARE_LT(deadline, 5ms * minResolution);
+ QCOMPARE_GT(deadline, 3000000ns * minResolution);
+ QCOMPARE_LT(deadline, 5000000ns * minResolution);
+ QCOMPARE_GE(deadline, steady_clock::now());
+ QCOMPARE_GE(deadline, system_clock::now());
+ QT_TEST_ALL_COMPARISON_OPS(deadline, now + 3ms * minResolution, Qt::strong_ordering::greater);
+ QT_TEST_ALL_COMPARISON_OPS(deadline, now + 5ms * minResolution, Qt::strong_ordering::less);
+ QT_TEST_ALL_COMPARISON_OPS(deadline, now + 3000000ns * minResolution, Qt::strong_ordering::greater);
+ QT_TEST_ALL_COMPARISON_OPS(deadline, now + 5000000ns * minResolution, Qt::strong_ordering::less);
+ QT_TEST_ALL_COMPARISON_OPS(deadline, 3ms * minResolution, Qt::strong_ordering::greater);
+ QT_TEST_ALL_COMPARISON_OPS(deadline, 5ms * minResolution, Qt::strong_ordering::less);
+ QT_TEST_ALL_COMPARISON_OPS(deadline, steady_clock::now(), Qt::strong_ordering::greater);
+ QT_TEST_ALL_COMPARISON_OPS(deadline, system_clock::now(), Qt::strong_ordering::greater);
now = QDeadlineTimer::current(timerType);
- deadline = QDeadlineTimer(seconds(1), timerType);
+ deadline = QDeadlineTimer(1s, timerType);
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
- QVERIFY(deadline.remainingTimeAsDuration() > (seconds(1) - milliseconds(minResolution)));
- QVERIFY(deadline.remainingTimeAsDuration() <= seconds(1));
- QVERIFY(deadline.deadline<steady_clock>() > (steady_clock::now() + seconds(1) - milliseconds(minResolution)));
- QVERIFY(deadline.deadline<steady_clock>() <= (steady_clock::now() + seconds(1) + milliseconds(minResolution)));
- QVERIFY(deadline.deadline<system_clock>() > (system_clock::now() + seconds(1) - milliseconds(minResolution)));
- QVERIFY(deadline.deadline<system_clock>() <= (system_clock::now() + seconds(1) + milliseconds(minResolution)));
- if (timerType == Qt::CoarseTimer) {
- QVERIFY(deadline > (seconds(1) - milliseconds(minResolution)));
- QVERIFY(deadline <= seconds(1));
- }
+ QCOMPARE_GT(deadline.remainingTimeAsDuration(), 1s - 1ms * minResolution);
+ QCOMPARE_LE(deadline.remainingTimeAsDuration(), 1s);
+ QCOMPARE_GT(deadline.deadline<steady_clock>(), steady_clock::now() + 1s - 1ms * minResolution);
+ QCOMPARE_LE(deadline.deadline<steady_clock>(), steady_clock::now() + 1s + 1ms * minResolution);
+ QCOMPARE_GT(deadline.deadline<system_clock>(), system_clock::now() + 1s - 1ms * minResolution);
+ QCOMPARE_LE(deadline.deadline<system_clock>(), system_clock::now() + 1s + 1ms * minResolution);
+ QCOMPARE_GT(deadline, 1s - 1ms * minResolution);
+ QCOMPARE_LE(deadline, 1s);
now = QDeadlineTimer::current(timerType);
- deadline.setRemainingTime(hours(1), timerType);
+ deadline.setRemainingTime(1h, timerType);
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
- QVERIFY(deadline.remainingTimeAsDuration() > (hours(1) - milliseconds(minResolution)));
- QVERIFY(deadline.remainingTimeAsDuration() <= hours(1));
- QVERIFY(deadline.deadline<steady_clock>() > (steady_clock::now() + hours(1) - milliseconds(minResolution)));
- QVERIFY(deadline.deadline<steady_clock>() <= (steady_clock::now() + hours(1) + milliseconds(minResolution)));
- QVERIFY(deadline.deadline<system_clock>() > (system_clock::now() + hours(1) - milliseconds(minResolution)));
- QVERIFY(deadline.deadline<system_clock>() <= (system_clock::now() + hours(1) + milliseconds(minResolution)));
+ QCOMPARE_GT(deadline.remainingTimeAsDuration(), 1h - 1ms * minResolution);
+ QCOMPARE_LE(deadline.remainingTimeAsDuration(), 1h);
+ QCOMPARE_GT(deadline.deadline<steady_clock>(), steady_clock::now() + 1h - 1ms * minResolution);
+ QCOMPARE_LE(deadline.deadline<steady_clock>(), steady_clock::now() + 1h + 1ms * minResolution);
+ QCOMPARE_GT(deadline.deadline<system_clock>(), system_clock::now() + 1h - 1ms * minResolution);
+ QCOMPARE_LE(deadline.deadline<system_clock>(), system_clock::now() + 1h + 1ms * minResolution);
now = QDeadlineTimer::current(timerType);
- deadline.setDeadline(system_clock::now() + seconds(1), timerType);
+ deadline.setDeadline(system_clock::now() + 1s, timerType);
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
- QVERIFY(deadline.remainingTimeAsDuration() > (seconds(1) - milliseconds(minResolution)));
- QVERIFY(deadline.remainingTimeAsDuration() <= seconds(1));
- QVERIFY(deadline.deadline<steady_clock>() > (steady_clock::now() + seconds(1) - milliseconds(minResolution)));
- QVERIFY(deadline.deadline<steady_clock>() <= (steady_clock::now() + seconds(1) + milliseconds(minResolution)));
- QVERIFY(deadline.deadline<system_clock>() > (system_clock::now() + seconds(1) - milliseconds(minResolution)));
- QVERIFY(deadline.deadline<system_clock>() <= (system_clock::now() + seconds(1) + milliseconds(minResolution)));
+ QCOMPARE_GT(deadline.remainingTimeAsDuration(), 1s - 1ms * minResolution);
+ QCOMPARE_LE(deadline.remainingTimeAsDuration(), 1s);
+ QCOMPARE_GT(deadline.deadline<steady_clock>(), steady_clock::now() + 1s - 1ms * minResolution);
+ QCOMPARE_LE(deadline.deadline<steady_clock>(), steady_clock::now() + 1s + 1ms * minResolution);
+ QCOMPARE_GT(deadline.deadline<system_clock>(), system_clock::now() + 1s - 1ms * minResolution);
+ QCOMPARE_LE(deadline.deadline<system_clock>(), system_clock::now() + 1s + 1ms * minResolution);
now = QDeadlineTimer::current(timerType);
- deadline.setDeadline(steady_clock::now() + seconds(1), timerType);
+ deadline.setDeadline(steady_clock::now() + 1s, timerType);
QVERIFY(!deadline.hasExpired());
QVERIFY(!deadline.isForever());
QCOMPARE(deadline.timerType(), timerType);
- QVERIFY(deadline.remainingTimeAsDuration() > (seconds(1) - milliseconds(minResolution)));
- QVERIFY(deadline.remainingTimeAsDuration() <= seconds(1));
- QVERIFY(deadline.deadline<steady_clock>() > (steady_clock::now() + seconds(1) - milliseconds(minResolution)));
- QVERIFY(deadline.deadline<steady_clock>() <= (steady_clock::now() + seconds(1) + milliseconds(minResolution)));
- QVERIFY(deadline.deadline<system_clock>() > (system_clock::now() + seconds(1) - milliseconds(minResolution)));
- QVERIFY(deadline.deadline<system_clock>() <= (system_clock::now() + seconds(1) + milliseconds(minResolution)));
-#endif
+ QCOMPARE_GT(deadline.remainingTimeAsDuration(), 1s - 1ms * minResolution);
+ QCOMPARE_LE(deadline.remainingTimeAsDuration(), 1s);
+ QCOMPARE_GT(deadline.deadline<steady_clock>(), steady_clock::now() + 1s - 1ms * minResolution);
+ QCOMPARE_LE(deadline.deadline<steady_clock>(), steady_clock::now() + 1s + 1ms * minResolution);
+ QCOMPARE_GT(deadline.deadline<system_clock>(), system_clock::now() + 1s - 1ms * minResolution);
+ QCOMPARE_LE(deadline.deadline<system_clock>(), system_clock::now() + 1s + 1ms * minResolution);
}
QTEST_MAIN(tst_QDeadlineTimer)
diff --git a/tests/auto/corelib/kernel/qelapsedtimer/CMakeLists.txt b/tests/auto/corelib/kernel/qelapsedtimer/CMakeLists.txt
index 1592303ae3..9a40a2f905 100644
--- a/tests/auto/corelib/kernel/qelapsedtimer/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qelapsedtimer/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qelapsedtimer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qelapsedtimer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qelapsedtimer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qelapsedtimer
SOURCES
tst_qelapsedtimer.cpp
diff --git a/tests/auto/corelib/kernel/qelapsedtimer/tst_qelapsedtimer.cpp b/tests/auto/corelib/kernel/qelapsedtimer/tst_qelapsedtimer.cpp
index e27ccc336a..7623fd2e43 100644
--- a/tests/auto/corelib/kernel/qelapsedtimer/tst_qelapsedtimer.cpp
+++ b/tests/auto/corelib/kernel/qelapsedtimer/tst_qelapsedtimer.cpp
@@ -1,44 +1,21 @@
-/****************************************************************************
-**
-** 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/QDateTime>
#include <QtCore/QString>
-#include <QtCore/QTime>
#include <QtCore/QElapsedTimer>
#include <QTest>
#include <QTimer>
static const int minResolution = 100; // the minimum resolution for the tests
+QT_BEGIN_NAMESPACE
QDebug operator<<(QDebug s, const QElapsedTimer &t)
{
s.nospace() << "(" << t.msecsSinceReference() << ")";
return s.space();
}
+QT_END_NAMESPACE
class tst_QElapsedTimer : public QObject
{
@@ -54,11 +31,25 @@ private Q_SLOTS:
void tst_QElapsedTimer::statics()
{
- qDebug() << "Clock type is" << QElapsedTimer::clockType();
- qDebug() << "Said clock is" << (QElapsedTimer::isMonotonic() ? "monotonic" : "not monotonic");
+ // these have been required since Qt 6.6
+ QCOMPARE(QElapsedTimer::clockType(), QElapsedTimer::MonotonicClock);
+ QVERIFY(QElapsedTimer::isMonotonic());
+
QElapsedTimer t;
t.start();
- qDebug() << "Current time is" << t.msecsSinceReference();
+ qint64 system_now = QDateTime::currentMSecsSinceEpoch();
+
+ auto setprecision = +[](QTextStream &s) -> QTextStream & {
+ s.setRealNumberNotation(QTextStream::FixedNotation);
+ s.setRealNumberPrecision(3);
+ return s;
+ };
+ qDebug() << setprecision
+ << "Current monotonic time is" << (t.msecsSinceReference() / 1000.)
+ << "s and current system time is" << (system_now / 1000.) << 's';
+ if (qAbs(system_now - t.msecsSinceReference()) < 5 * minResolution)
+ qWarning() << "The monotonic clock is awfully close to the system clock"
+ " (it may not be monotonic at all!)";
}
void tst_QElapsedTimer::validity()
diff --git a/tests/auto/corelib/kernel/qeventdispatcher/CMakeLists.txt b/tests/auto/corelib/kernel/qeventdispatcher/CMakeLists.txt
index 409764a2c7..1f9cfb9449 100644
--- a/tests/auto/corelib/kernel/qeventdispatcher/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qeventdispatcher/CMakeLists.txt
@@ -1,10 +1,33 @@
-# Generated from qeventdispatcher.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qeventdispatcher Test:
#####################################################################
-qt_internal_add_test(tst_qeventdispatcher
- SOURCES
- tst_qeventdispatcher.cpp
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qeventdispatcher LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+set(test_names "tst_qeventdispatcher")
+if(QT_FEATURE_glib AND UNIX)
+ list(APPEND test_names "tst_qeventdispatcher_no_glib")
+endif()
+
+foreach(test ${test_names})
+ qt_internal_add_test(${test}
+ NO_BATCH
+ SOURCES
+ tst_qeventdispatcher.cpp
+ )
+endforeach()
+
+if (TARGET tst_qeventdispatcher_no_glib)
+ qt_internal_extend_target(tst_qeventdispatcher_no_glib
+ DEFINES
+ DISABLE_GLIB
+ tst_QEventDispatcher=tst_QEventDispatcher_no_glib
+ )
+endif()
diff --git a/tests/auto/corelib/kernel/qeventdispatcher/tst_qeventdispatcher.cpp b/tests/auto/corelib/kernel/qeventdispatcher/tst_qeventdispatcher.cpp
index 2fff160ceb..285d080960 100644
--- a/tests/auto/corelib/kernel/qeventdispatcher/tst_qeventdispatcher.cpp
+++ b/tests/auto/corelib/kernel/qeventdispatcher/tst_qeventdispatcher.cpp
@@ -1,34 +1,8 @@
-/****************************************************************************
-**
-** 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
#ifdef QT_GUI_LIB
# include <QtGui/QGuiApplication>
-# define tst_QEventDispatcher tst_QGuiEventDispatcher
#else
# include <QtCore/QCoreApplication>
#endif
@@ -37,11 +11,39 @@
#include <QTimer>
#include <QThreadPool>
-enum {
- PreciseTimerInterval = 10,
- CoarseTimerInterval = 200,
- VeryCoarseTimerInterval = 1000
-};
+#ifdef DISABLE_GLIB
+static bool glibDisabled = []() {
+ qputenv("QT_NO_GLIB", "1");
+ return true;
+}();
+#endif
+
+#include <chrono>
+
+using namespace std::chrono_literals;
+
+static constexpr auto PreciseTimerInterval = 10ms;
+static constexpr auto CoarseTimerInterval = 200ms;
+static constexpr auto VeryCoarseTimerInterval = 1s;
+
+static constexpr
+std::chrono::nanoseconds fudgeInterval(std::chrono::nanoseconds interval, Qt::TimerType timerType)
+{
+ // Make the intervals have have fractions of milliseconds so we can check
+ // that they have been rounded & stored properly (where applicable).
+ switch (timerType) {
+ case Qt::VeryCoarseTimer:
+ // rounds down (floor) to seconds
+ return interval + 1010us;
+ case Qt::CoarseTimer:
+ // rounds up (ceil) to milliseconds
+ return interval - 10us;
+ case Qt::PreciseTimer:
+ // not rounded using QAbstractEventDispatcherV2; rounded up (ceil) on V1
+ return interval - 10us;
+ }
+ Q_UNREACHABLE_RETURN(std::chrono::nanoseconds::min());
+}
class tst_QEventDispatcher : public QObject
{
@@ -106,11 +108,9 @@ bool tst_QEventDispatcher::event(QEvent *e)
// drain the system event queue after the test starts to avoid destabilizing the test functions
void tst_QEventDispatcher::initTestCase()
{
- QElapsedTimer elapsedTimer;
- elapsedTimer.start();
- while (!elapsedTimer.hasExpired(CoarseTimerInterval) && eventDispatcher->processEvents(QEventLoop::AllEvents)) {
- ;
- }
+ QDeadlineTimer deadline(CoarseTimerInterval);
+ while (!deadline.hasExpired() && eventDispatcher->processEvents(QEventLoop::AllEvents))
+ ;
}
// consume pending posted events to avoid impact on the next test function
@@ -137,35 +137,36 @@ public:
TimerManager(TimerManager &&) = delete;
TimerManager &operator=(TimerManager &&) = delete;
- int preciseTimerId() const { return m_preciseTimerId; }
- int coarseTimerId() const { return m_coarseTimerId; }
- int veryCoarseTimerId() const { return m_veryCoarseTimerId; }
+ int preciseTimerId() const { return int(m_preciseTimerId); }
+ int coarseTimerId() const { return int(m_coarseTimerId); }
+ int veryCoarseTimerId() const { return int(m_veryCoarseTimerId); }
- bool foundPrecise() const { return m_preciseTimerId > 0; }
- bool foundCoarse() const { return m_coarseTimerId > 0; }
- bool foundVeryCoarse() const { return m_veryCoarseTimerId > 0; }
+ bool foundPrecise() const { return preciseTimerId() > 0; }
+ bool foundCoarse() const { return coarseTimerId() > 0; }
+ bool foundVeryCoarse() const { return veryCoarseTimerId() > 0; }
- QList<QAbstractEventDispatcher::TimerInfo> registeredTimers() const
+ QList<QAbstractEventDispatcher::TimerInfoV2> registeredTimers() const
{
- return m_eventDispatcher->registeredTimers(m_parent);
+ return m_eventDispatcher->timersForObject(m_parent);
}
void registerAll()
{
// start 3 timers, each with the different timer types and different intervals
- m_preciseTimerId = m_eventDispatcher->registerTimer(
- PreciseTimerInterval, Qt::PreciseTimer, m_parent);
- m_coarseTimerId = m_eventDispatcher->registerTimer(
- CoarseTimerInterval, Qt::CoarseTimer, m_parent);
- m_veryCoarseTimerId = m_eventDispatcher->registerTimer(
- VeryCoarseTimerInterval, Qt::VeryCoarseTimer, m_parent);
- QVERIFY(m_preciseTimerId > 0);
- QVERIFY(m_coarseTimerId > 0);
- QVERIFY(m_veryCoarseTimerId > 0);
+ auto registerTimer = [&](std::chrono::milliseconds interval, Qt::TimerType timerType) {
+ return m_eventDispatcher->registerTimer(fudgeInterval(interval, timerType), timerType,
+ m_parent);
+ };
+ m_preciseTimerId = registerTimer(PreciseTimerInterval, Qt::PreciseTimer);
+ m_coarseTimerId = registerTimer(CoarseTimerInterval, Qt::CoarseTimer);
+ m_veryCoarseTimerId = registerTimer(VeryCoarseTimerInterval, Qt::VeryCoarseTimer);
+ QVERIFY(foundPrecise());
+ QVERIFY(foundCoarse());
+ QVERIFY(foundVeryCoarse());
findTimers();
}
- void unregister(int timerId)
+ void unregister(Qt::TimerId timerId)
{
m_eventDispatcher->unregisterTimer(timerId);
findTimers();
@@ -183,36 +184,43 @@ private:
bool foundPrecise = false;
bool foundCoarse = false;
bool foundVeryCoarse = false;
- const QList<QAbstractEventDispatcher::TimerInfo> timers = registeredTimers();
- for (int i = 0; i < timers.count(); ++i) {
- const QAbstractEventDispatcher::TimerInfo &timerInfo = timers.at(i);
+ const QList<QAbstractEventDispatcher::TimerInfoV2> timers = registeredTimers();
+ for (const QAbstractEventDispatcher::TimerInfoV2 &timerInfo : timers) {
if (timerInfo.timerId == m_preciseTimerId) {
- QCOMPARE(timerInfo.interval, int(PreciseTimerInterval));
+ // For precise timers, we expect the fudge factor to be present
+ QAbstractEventDispatcher::Duration interval =
+ fudgeInterval(PreciseTimerInterval, Qt::PreciseTimer);
+#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
+ if (!qobject_cast<QAbstractEventDispatcherV2 *>(m_eventDispatcher))
+ interval = PreciseTimerInterval;
+#endif
+ QCOMPARE(timerInfo.interval, interval);
QCOMPARE(timerInfo.timerType, Qt::PreciseTimer);
foundPrecise = true;
} else if (timerInfo.timerId == m_coarseTimerId) {
- QCOMPARE(timerInfo.interval, int(CoarseTimerInterval));
+ // For other timers, the fudge factors ought to have been rounded away
+ QCOMPARE(timerInfo.interval, CoarseTimerInterval);
QCOMPARE(timerInfo.timerType, Qt::CoarseTimer);
foundCoarse = true;
} else if (timerInfo.timerId == m_veryCoarseTimerId) {
- QCOMPARE(timerInfo.interval, int(VeryCoarseTimerInterval));
+ QCOMPARE(timerInfo.interval, VeryCoarseTimerInterval);
QCOMPARE(timerInfo.timerType, Qt::VeryCoarseTimer);
foundVeryCoarse = true;
}
}
if (!foundPrecise)
- m_preciseTimerId = -1;
+ m_preciseTimerId = Qt::TimerId::Invalid;
if (!foundCoarse)
- m_coarseTimerId = -1;
+ m_coarseTimerId = Qt::TimerId::Invalid;
if (!foundVeryCoarse)
- m_veryCoarseTimerId = -1;
+ m_veryCoarseTimerId = Qt::TimerId::Invalid;
}
QAbstractEventDispatcher *m_eventDispatcher = nullptr;
- int m_preciseTimerId = -1;
- int m_coarseTimerId = -1;
- int m_veryCoarseTimerId = -1;
+ Qt::TimerId m_preciseTimerId = Qt::TimerId::Invalid;
+ Qt::TimerId m_coarseTimerId = Qt::TimerId::Invalid;
+ Qt::TimerId m_veryCoarseTimerId = Qt::TimerId::Invalid;
QObject *m_parent = nullptr;
};
@@ -226,7 +234,7 @@ void tst_QEventDispatcher::registerTimer()
return;
// check that all 3 are present in the eventDispatcher's registeredTimer() list
- QCOMPARE(timers.registeredTimers().count(), 3);
+ QCOMPARE(timers.registeredTimers().size(), 3);
QVERIFY(timers.foundPrecise());
QVERIFY(timers.foundCoarse());
QVERIFY(timers.foundVeryCoarse());
@@ -252,16 +260,16 @@ void tst_QEventDispatcher::registerTimer()
if (doubleTimer)
QSKIP("Double timer during a single timeout - aborting test as flaky on macOS");
if (timerIdFromEvent != timers.preciseTimerId()
- && elapsedTimer.elapsed() > PreciseTimerInterval * 3)
+ && elapsedTimer.durationElapsed() > PreciseTimerInterval * 3)
QSKIP("Ignore flaky test behavior due to VM scheduling on macOS");
#endif
QCOMPARE(timerIdFromEvent, timers.preciseTimerId());
// now unregister it and make sure it's gone
- timers.unregister(timers.preciseTimerId());
+ timers.unregister(Qt::TimerId(timers.preciseTimerId()));
if (QTest::currentTestFailed())
return;
- QCOMPARE(timers.registeredTimers().count(), 2);
+ QCOMPARE(timers.registeredTimers().size(), 2);
QVERIFY(!timers.foundPrecise());
QVERIFY(timers.foundCoarse());
QVERIFY(timers.foundVeryCoarse());
@@ -276,16 +284,16 @@ void tst_QEventDispatcher::registerTimer()
if (doubleTimer)
QSKIP("Double timer during a single timeout - aborting test as flaky on macOS");
if (timerIdFromEvent != timers.coarseTimerId()
- && elapsedTimer.elapsed() > CoarseTimerInterval * 3)
+ && elapsedTimer.durationElapsed() > CoarseTimerInterval * 3)
QSKIP("Ignore flaky test behavior due to VM scheduling on macOS");
#endif
QCOMPARE(timerIdFromEvent, timers.coarseTimerId());
// now unregister it and make sure it's gone
- timers.unregister(timers.coarseTimerId());
+ timers.unregister(Qt::TimerId(timers.coarseTimerId()));
if (QTest::currentTestFailed())
return;
- QCOMPARE(timers.registeredTimers().count(), 1);
+ QCOMPARE(timers.registeredTimers().size(), 1);
QVERIFY(!timers.foundPrecise());
QVERIFY(!timers.foundCoarse());
QVERIFY(timers.foundVeryCoarse());
@@ -311,9 +319,8 @@ void tst_QEventDispatcher::sendPostedEvents()
QFETCH(int, processEventsFlagsInt);
QEventLoop::ProcessEventsFlags processEventsFlags = QEventLoop::ProcessEventsFlags(processEventsFlagsInt);
- QElapsedTimer elapsedTimer;
- elapsedTimer.start();
- while (!elapsedTimer.hasExpired(200)) {
+ QDeadlineTimer deadline(200ms);
+ while (!deadline.hasExpired()) {
receivedEventType = -1;
QCoreApplication::postEvent(this, new QEvent(QEvent::User));
@@ -380,7 +387,7 @@ void tst_QEventDispatcher::postEventFromThread()
threadPool->start([&]{
int loop = 1000 / 10; // give it a second
while (!done && --loop)
- QThread::msleep(10);
+ QThread::sleep(std::chrono::milliseconds{10});
if (done)
return;
hadToQuit = true;
@@ -418,7 +425,7 @@ void tst_QEventDispatcher::postEventFromEventHandler()
threadPool->start([&]{
int loop = 250 / 10; // give it 250ms
while (!done && --loop)
- QThread::msleep(10);
+ QThread::sleep(std::chrono::milliseconds{10});
if (done)
return;
hadToQuit = true;
@@ -443,24 +450,17 @@ void tst_QEventDispatcher::postEventFromEventHandler()
QAbstractEventDispatcher::instance()->processEvents(QEventLoop::WaitForMoreEvents);
done = true;
- bool coreFails = false;
- bool guiFails = false;
const QByteArrayView eventDispatcherName(QAbstractEventDispatcher::instance()->metaObject()->className());
-#if defined(Q_OS_DARWIN)
- coreFails = true;
-#elif defined(Q_OS_WINDOWS)
- coreFails = true;
- guiFails = true;
-#elif defined(Q_OS_LINUX)
- // QXcbUnixEventDispatcher and QEventDispatcherUNIX do not do this correctly
- // QXcbGlibEventDispatcher and QEventDispatcherGlib do
- coreFails = !eventDispatcherName.contains("Glib");
- guiFails = !eventDispatcherName.contains("Glib");
-#endif
-
- if (coreFails && !isGuiEventDispatcher)
- QEXPECT_FAIL("", eventDispatcherName.constData(), Continue);
- if (guiFails && isGuiEventDispatcher)
+ qDebug() << eventDispatcherName;
+ // QXcbUnixEventDispatcher and QEventDispatcherUNIX do not do this correctly on any platform;
+ // both Windows event dispatchers fail as well.
+ const bool knownToFail = eventDispatcherName.contains("UNIX")
+ || eventDispatcherName.contains("Unix")
+ || eventDispatcherName.contains("Win32")
+ || eventDispatcherName.contains("WindowsGui")
+ || eventDispatcherName.contains("Android");
+
+ if (knownToFail)
QEXPECT_FAIL("", eventDispatcherName.constData(), Continue);
QVERIFY(!hadToQuit);
diff --git a/tests/auto/corelib/kernel/qeventloop/BLACKLIST b/tests/auto/corelib/kernel/qeventloop/BLACKLIST
new file mode 100644
index 0000000000..772ec3312c
--- /dev/null
+++ b/tests/auto/corelib/kernel/qeventloop/BLACKLIST
@@ -0,0 +1,2 @@
+[processEvents]
+qnx # QTBUG-119359
diff --git a/tests/auto/corelib/kernel/qeventloop/CMakeLists.txt b/tests/auto/corelib/kernel/qeventloop/CMakeLists.txt
index d3b817598e..5d90f97b21 100644
--- a/tests/auto/corelib/kernel/qeventloop/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qeventloop/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qeventloop.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qeventloop Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qeventloop LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qeventloop
SOURCES
tst_qeventloop.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
)
@@ -16,7 +23,7 @@ qt_internal_add_test(tst_qeventloop
#####################################################################
qt_internal_extend_target(tst_qeventloop CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
diff --git a/tests/auto/corelib/kernel/qeventloop/tst_qeventloop.cpp b/tests/auto/corelib/kernel/qeventloop/tst_qeventloop.cpp
index 3169cc933b..06175e6f2f 100644
--- a/tests/auto/corelib/kernel/qeventloop/tst_qeventloop.cpp
+++ b/tests/auto/corelib/kernel/qeventloop/tst_qeventloop.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 <QTest>
@@ -34,7 +9,9 @@
#include <qeventloop.h>
#include <private/qeventloop_p.h>
#if defined(Q_OS_UNIX)
- #include <private/qeventdispatcher_unix_p.h>
+ #if !defined(Q_OS_WASM)
+ #include <private/qeventdispatcher_unix_p.h>
+ #endif
#include <QtCore/private/qcore_unix_p.h>
#if defined(HAVE_GLIB)
#include <private/qeventdispatcher_glib_p.h>
@@ -163,6 +140,7 @@ class tst_QEventLoop : public QObject
Q_OBJECT
private slots:
// This test *must* run first. See the definition for why.
+ void processEvents_data();
void processEvents();
void exec();
void reexec();
@@ -184,8 +162,21 @@ protected:
void customEvent(QEvent *e) override;
};
+void tst_QEventLoop::processEvents_data()
+{
+ QTest::addColumn<QString>("mode");
+
+#ifdef QT_GUI_LIB
+ QTest::addRow("gui") << "gui";
+#else
+ QTest::addRow("core") << "core";
+#endif
+}
+
void tst_QEventLoop::processEvents()
{
+ QFETCH(QString, mode);
+
QSignalSpy aboutToBlockSpy(QAbstractEventDispatcher::instance(), &QAbstractEventDispatcher::aboutToBlock);
QSignalSpy awakeSpy(QAbstractEventDispatcher::instance(), &QAbstractEventDispatcher::awake);
@@ -199,8 +190,8 @@ void tst_QEventLoop::processEvents()
// process posted events, QEventLoop::processEvents() should return
// true
QVERIFY(eventLoop.processEvents());
- QCOMPARE(aboutToBlockSpy.count(), 0);
- QCOMPARE(awakeSpy.count(), 1);
+ QCOMPARE(aboutToBlockSpy.size(), 0);
+ QCOMPARE(awakeSpy.size(), 1);
// allow any session manager to complete its handshake, so that
// there are no pending events left. This tests that we are able
@@ -221,8 +212,8 @@ void tst_QEventLoop::processEvents()
// processEvents is entered. There is no guarantee that that the
// processEvents call actually blocked, since the OS may introduce
// native events at any time.
- QVERIFY(awakeSpy.count() > 0);
- QVERIFY(awakeSpy.count() >= aboutToBlockSpy.count());
+ QVERIFY(awakeSpy.size() > 0);
+ QVERIFY(awakeSpy.size() >= aboutToBlockSpy.size());
killTimer(timerId);
}
@@ -265,7 +256,7 @@ void tst_QEventLoop::exec()
QVERIFY(spy.isValid());
thread.cond.wakeOne();
thread.cond.wait(&thread.mutex);
- QVERIFY(spy.count() > 0);
+ QVERIFY(spy.size() > 0);
int v = thread.result1;
QCOMPARE(v, 0);
@@ -274,7 +265,7 @@ void tst_QEventLoop::exec()
thread.cond.wakeOne();
thread.mutex.unlock();
thread.wait();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
v = thread.result2;
QCOMPARE(v, -1);
}
@@ -332,7 +323,7 @@ void tst_QEventLoop::wakeUp()
QTimer::singleShot(1000, &eventLoop, SLOT(quit()));
(void) eventLoop.exec();
- QVERIFY(spy.count() > 0);
+ QVERIFY(spy.size() > 0);
thread.quit();
(void) eventLoop.exec();
@@ -425,8 +416,8 @@ public slots:
dataSent = serverSocket->waitForBytesWritten(-1);
if (dataSent) {
- pollfd pfd = qt_make_pollfd(socket->socketDescriptor(), POLLIN);
- dataReadable = (1 == qt_safe_poll(&pfd, 1, nullptr));
+ pollfd pfd = qt_make_pollfd(int(socket->socketDescriptor()), POLLIN);
+ dataReadable = (1 == qt_safe_poll(&pfd, 1, QDeadlineTimer::Forever));
}
if (!dataReadable) {
@@ -511,7 +502,7 @@ void tst_QEventLoop::processEventsExcludeTimers()
// but not if we exclude timers
eventLoop.processEvents(QEventLoop::X11ExcludeTimers);
-#if defined(Q_OS_UNIX)
+#if defined(Q_OS_UNIX) && !defined(Q_OS_WASM)
QAbstractEventDispatcher *eventDispatcher = QCoreApplication::eventDispatcher();
if (!qobject_cast<QEventDispatcherUNIX *>(eventDispatcher)
#if defined(HAVE_GLIB)
diff --git a/tests/auto/corelib/kernel/qjniarray/CMakeLists.txt b/tests/auto/corelib/kernel/qjniarray/CMakeLists.txt
new file mode 100644
index 0000000000..308b2c6427
--- /dev/null
+++ b/tests/auto/corelib/kernel/qjniarray/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2023 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_qjnitypes LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qjniarray
+ SOURCES
+ tst_qjniarray.cpp
+)
diff --git a/tests/auto/corelib/kernel/qjniarray/tst_qjniarray.cpp b/tests/auto/corelib/kernel/qjniarray/tst_qjniarray.cpp
new file mode 100644
index 0000000000..b7b1f95b39
--- /dev/null
+++ b/tests/auto/corelib/kernel/qjniarray/tst_qjniarray.cpp
@@ -0,0 +1,165 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtTest>
+
+#include <QtCore/qjnitypes.h>
+#include <QtCore/qjniarray.h>
+
+using namespace Qt::StringLiterals;
+
+class tst_QJniArray : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QJniArray() = default;
+
+private slots:
+ void construct();
+ void size();
+ void operators();
+};
+
+using namespace QtJniTypes;
+
+// fake type so that we can compile-time test and assert correct type mappings
+Q_DECLARE_JNI_CLASS(List, "qt/test/List");
+
+// verify that we get the return type we expect for the specified return type
+#define VERIFY_RETURN_FOR_TYPE(In, Out) \
+static_assert(std::is_same_v<decltype(List::callStaticMethod<In>("toByteArray")), Out>)
+
+VERIFY_RETURN_FOR_TYPE(jobjectArray, QJniObject);
+VERIFY_RETURN_FOR_TYPE(jobject[], QJniArray<jobject>);
+//VERIFY_RETURN_FOR_TYPE(QList<QJniObject>, QList<QJniObject>);
+VERIFY_RETURN_FOR_TYPE(QList<jobject>, QList<jobject>);
+
+VERIFY_RETURN_FOR_TYPE(jbyteArray, QJniObject);
+VERIFY_RETURN_FOR_TYPE(jbyte[], QJniArray<jbyte>);
+VERIFY_RETURN_FOR_TYPE(QByteArray, QByteArray);
+
+VERIFY_RETURN_FOR_TYPE(jbooleanArray, QJniObject);
+VERIFY_RETURN_FOR_TYPE(jboolean[], QJniArray<jboolean>);
+VERIFY_RETURN_FOR_TYPE(QList<jboolean>, QList<jboolean>);
+VERIFY_RETURN_FOR_TYPE(QList<bool>, QList<jboolean>);
+
+VERIFY_RETURN_FOR_TYPE(jcharArray, QJniObject);
+VERIFY_RETURN_FOR_TYPE(jchar[], QJniArray<jchar>);
+VERIFY_RETURN_FOR_TYPE(QList<jchar>, QList<jchar>);
+
+VERIFY_RETURN_FOR_TYPE(jshortArray, QJniObject);
+VERIFY_RETURN_FOR_TYPE(jshort[], QJniArray<jshort>);
+VERIFY_RETURN_FOR_TYPE(QList<jshort>, QList<jshort>);
+VERIFY_RETURN_FOR_TYPE(QList<short>, QList<short>);
+
+VERIFY_RETURN_FOR_TYPE(jintArray, QJniObject);
+VERIFY_RETURN_FOR_TYPE(jint[], QJniArray<jint>);
+VERIFY_RETURN_FOR_TYPE(QList<jint>, QList<jint>);
+VERIFY_RETURN_FOR_TYPE(QList<int>, QList<int>);
+
+VERIFY_RETURN_FOR_TYPE(jlongArray, QJniObject);
+VERIFY_RETURN_FOR_TYPE(jlong[], QJniArray<jlong>);
+VERIFY_RETURN_FOR_TYPE(QList<jlong>, QList<jlong>);
+// VERIFY_RETURN_FOR_TYPE(QList<long>, QList<long>); // assumes long is 64bit
+
+VERIFY_RETURN_FOR_TYPE(jfloatArray, QJniObject);
+VERIFY_RETURN_FOR_TYPE(jfloat[], QJniArray<jfloat>);
+VERIFY_RETURN_FOR_TYPE(QList<jfloat>, QList<jfloat>);
+VERIFY_RETURN_FOR_TYPE(QList<float>, QList<float>);
+
+VERIFY_RETURN_FOR_TYPE(jdoubleArray, QJniObject);
+VERIFY_RETURN_FOR_TYPE(jdouble[], QJniArray<jdouble>);
+VERIFY_RETURN_FOR_TYPE(QList<jdouble>, QList<jdouble>);
+VERIFY_RETURN_FOR_TYPE(QList<double>, QList<double>);
+
+VERIFY_RETURN_FOR_TYPE(QString, QString);
+
+VERIFY_RETURN_FOR_TYPE(List, List);
+VERIFY_RETURN_FOR_TYPE(List[], QJniArray<List>);
+VERIFY_RETURN_FOR_TYPE(QJniArray<List>, QJniArray<List>);
+
+void tst_QJniArray::construct()
+{
+ {
+ QStringList strings;
+ for (int i = 0; i < 10000; ++i)
+ strings << QString::number(i);
+ QJniArray<QString> list(strings);
+ QCOMPARE(list.size(), 10000);
+ }
+ {
+ QJniArray<jint> list{1, 2, 3};
+ QCOMPARE(list.size(), 3);
+ }
+ {
+ QJniArray<jint> list(QList<int>{1, 2, 3});
+ QCOMPARE(list.size(), 3);
+ }
+ {
+ QJniArray<jint> list{QList<int>{1, 2, 3}};
+ QCOMPARE(list.size(), 3);
+ }
+}
+
+void tst_QJniArray::size()
+{
+ QJniArray<jint> array;
+ QVERIFY(!array.isValid());
+ QCOMPARE(array.size(), 0);
+
+ QList<int> intList;
+ intList.resize(10);
+ auto intArray = QJniArrayBase::fromContainer(intList);
+ QCOMPARE(intArray.size(), 10);
+}
+
+void tst_QJniArray::operators()
+{
+ QByteArray bytes("abcde");
+ QJniArray<jbyte> array(bytes);
+ QVERIFY(array.isValid());
+
+ {
+ auto it = array.begin();
+ QCOMPARE(*it, 'a');
+ QCOMPARE(*++it, 'b');
+ QCOMPARE(*it++, 'b');
+ QCOMPARE(*it, 'c');
+ ++it;
+ it++;
+ QCOMPARE(*it, 'e');
+ QCOMPARE(++it, array.end());
+ }
+ {
+ auto it = array.rbegin();
+ QCOMPARE(*it, 'e');
+ QCOMPARE(*++it, 'd');
+ QCOMPARE(*it++, 'd');
+ QCOMPARE(*it, 'c');
+ ++it;
+ it++;
+ QCOMPARE(*it, 'a');
+ QCOMPARE(++it, array.rend());
+ }
+ {
+ QJniArray<jbyte>::const_iterator it = {};
+ QCOMPARE(it, QJniArray<jbyte>::const_iterator{});
+ QCOMPARE_NE(array.begin(), array.end());
+
+ it = array.begin();
+ QCOMPARE(it, array.begin());
+ }
+
+ QCOMPARE(std::distance(array.begin(), array.end()), array.size());
+
+ qsizetype index = 0;
+ for (const auto &value : array) {
+ QCOMPARE(value, bytes.at(index));
+ ++index;
+ }
+}
+
+QTEST_MAIN(tst_QJniArray)
+
+#include "tst_qjniarray.moc"
diff --git a/tests/auto/corelib/kernel/qjnienvironment/CMakeLists.txt b/tests/auto/corelib/kernel/qjnienvironment/CMakeLists.txt
index 25e7e51ba6..f405438314 100644
--- a/tests/auto/corelib/kernel/qjnienvironment/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qjnienvironment/CMakeLists.txt
@@ -1,7 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qjnienvironment Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qjnienvironment LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qjnienvironment
SOURCES
tst_qjnienvironment.cpp
@@ -11,6 +20,4 @@ if(ANDROID)
set_property(TARGET tst_qjnienvironment APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
${CMAKE_CURRENT_SOURCE_DIR}/testdata
)
- # QTBUG-88840
- qt_android_generate_deployment_settings(tst_qjnienvironment)
endif()
diff --git a/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java b/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java
index 411bd1501d..4f307b3bc7 100644
--- a/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java
+++ b/tests/auto/corelib/kernel/qjnienvironment/testdata/src/org/qtproject/qt/android/testdata/QtJniEnvironmentTestClass.java
@@ -1,36 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
package org.qtproject.qt.android.testdatapackage;
public class QtJniEnvironmentTestClass
{
private static native void callbackFromJava(String message);
+ private static native void namedCallbackFromJava(String message);
+ private static native void memberCallbackFromJava(String message);
+ private static native void namedMemberCallbackFromJava(String message);
+ private static native void namespaceCallbackFromJava(String message);
private static native void intCallbackFromJava(int value);
public final int INT_FIELD = 123;
@@ -43,6 +22,26 @@ public class QtJniEnvironmentTestClass
callbackFromJava("From Java: " + message);
}
+ public static void namedAppendJavaToString(String message)
+ {
+ namedCallbackFromJava("From Java (named): " + message);
+ }
+
+ public static void memberAppendJavaToString(String message)
+ {
+ memberCallbackFromJava("From Java (member): " + message);
+ }
+
+ public static void namedMemberAppendJavaToString(String message)
+ {
+ namedMemberCallbackFromJava("From Java (named member): " + message);
+ }
+
+ public static void namespaceAppendJavaToString(String message)
+ {
+ namespaceCallbackFromJava("From Java (namespace): " + message);
+ }
+
public static void convertToInt(String message)
{
intCallbackFromJava(Integer.parseInt(message));
diff --git a/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp b/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp
index 8cf207fc3a..95748f46f7 100644
--- a/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp
+++ b/tests/auto/corelib/kernel/qjnienvironment/tst_qjnienvironment.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <jni.h>
@@ -45,6 +20,7 @@ class tst_QJniEnvironment : public QObject
Q_OBJECT
private slots:
+ void init();
void jniEnv();
void javaVM();
void registerNativeMethods();
@@ -55,6 +31,14 @@ private slots:
void findStaticField();
};
+void tst_QJniEnvironment::init()
+{
+ // Unless explicitly ignored to test error handling, warning messages
+ // in this test about a failure to look up a field, method, or class
+ // make the test fail.
+ QTest::failOnWarning(QRegularExpression("java.lang.NoSuch.*Error"));
+}
+
void tst_QJniEnvironment::jniEnv()
{
QJniEnvironment env;
@@ -84,17 +68,21 @@ void tst_QJniEnvironment::jniEnv()
QVERIFY(!QJniEnvironment::checkAndClearExceptions(env.jniEnv()));
// try to find a nonexistent class
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("java.lang.ClassNotFoundException: .*"));
QVERIFY(!env->FindClass("this/doesnt/Exist"));
QVERIFY(QJniEnvironment::checkAndClearExceptions(env.jniEnv()));
// try to find an existing class with QJniEnvironment
QJniEnvironment env;
QVERIFY(env.findClass("java/lang/Object"));
+ QVERIFY(env.findClass<jstring>());
// try to find a nonexistent class
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("java.lang.ClassNotFoundException: .*"));
QVERIFY(!env.findClass("this/doesnt/Exist"));
// clear exception with member function
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("java.lang.ClassNotFoundException: .*"));
QVERIFY(!env->FindClass("this/doesnt/Exist"));
QVERIFY(env.checkAndClearExceptions());
}
@@ -123,12 +111,49 @@ static void callbackFromJava(JNIEnv *env, jobject /*thiz*/, jstring value)
Q_UNUSED(env)
registerNativesString = QJniObject(value).toString();
}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackFromJava);
+
+static void tediouslyLongNamed_callbackFromJava(JNIEnv *env, jobject /*thiz*/, jstring value)
+{
+ Q_UNUSED(env)
+ registerNativesString = QJniObject(value).toString();
+}
+Q_DECLARE_JNI_NATIVE_METHOD(tediouslyLongNamed_callbackFromJava, namedCallbackFromJava)
static void callbackFromJavaNoCtor(JNIEnv *env, jobject /*thiz*/, jstring value)
{
Q_UNUSED(env)
registerNativesString = QJniObject(value).toString();
}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackFromJavaNoCtor);
+
+class CallbackClass {
+public:
+ static void memberCallbackFromJava(JNIEnv *env, jobject /*thiz*/, jstring value)
+ {
+ Q_UNUSED(env)
+ registerNativesString = QJniObject(value).toString();
+ }
+ Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(memberCallbackFromJava)
+
+ static void tediouslyLongNamed_memberCallbackFromJava(JNIEnv *env, jobject /*thiz*/,
+ jstring value)
+ {
+ Q_UNUSED(env)
+ registerNativesString = QJniObject(value).toString();
+ }
+ Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(tediouslyLongNamed_memberCallbackFromJava,
+ namedMemberCallbackFromJava)
+};
+
+namespace CallbackNamespace {
+ static void namespaceCallbackFromJava(JNIEnv *env, jobject /*thiz*/, jstring value)
+ {
+ Q_UNUSED(env)
+ registerNativesString = QJniObject(value).toString();
+ }
+ Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(namespaceCallbackFromJava)
+}
void tst_QJniEnvironment::registerNativeMethods()
{
@@ -136,11 +161,9 @@ void tst_QJniEnvironment::registerNativeMethods()
QJniEnvironment env;
{
- const JNINativeMethod methods[] {
- {"callbackFromJava", "(Ljava/lang/String;)V", reinterpret_cast<void *>(callbackFromJava)}
- };
-
- QVERIFY(env.registerNativeMethods(javaTestClass, methods, 1));
+ QVERIFY(env.registerNativeMethods(javaTestClass, {
+ Q_JNI_NATIVE_METHOD(callbackFromJava)
+ }));
QJniObject::callStaticMethod<void>(javaTestClass,
"appendJavaToString",
@@ -150,12 +173,68 @@ void tst_QJniEnvironment::registerNativeMethods()
QVERIFY(registerNativesString == QStringLiteral("From Java: Qt"));
}
- // No default constructor in class
+ // Named native function
{
- const JNINativeMethod methods[] {{"callbackFromJavaNoCtor", "(Ljava/lang/String;)V",
- reinterpret_cast<void *>(callbackFromJavaNoCtor)}};
+ QVERIFY(env.registerNativeMethods(javaTestClass, {
+ Q_JNI_NATIVE_METHOD(tediouslyLongNamed_callbackFromJava)
+ }));
+
+ QJniObject::callStaticMethod<void>(javaTestClass,
+ "namedAppendJavaToString",
+ "(Ljava/lang/String;)V",
+ QtString.object<jstring>());
+ QTest::qWait(200);
+ QVERIFY(registerNativesString == QStringLiteral("From Java (named): Qt"));
+ }
- QVERIFY(env.registerNativeMethods(javaTestClassNoCtor, methods, 1));
+ // Static class member as callback
+ {
+ QVERIFY(env.registerNativeMethods(javaTestClass, {
+ Q_JNI_NATIVE_SCOPED_METHOD(memberCallbackFromJava, CallbackClass)
+ }));
+
+ QJniObject::callStaticMethod<void>(javaTestClass,
+ "memberAppendJavaToString",
+ "(Ljava/lang/String;)V",
+ QtString.object<jstring>());
+ QTest::qWait(200);
+ QVERIFY(registerNativesString == QStringLiteral("From Java (member): Qt"));
+ }
+
+ // Static named class member as callback
+ {
+ QVERIFY(env.registerNativeMethods(javaTestClass, {
+ Q_JNI_NATIVE_SCOPED_METHOD(tediouslyLongNamed_memberCallbackFromJava,
+ CallbackClass)
+ }));
+
+ QJniObject::callStaticMethod<void>(javaTestClass,
+ "namedMemberAppendJavaToString",
+ "(Ljava/lang/String;)V",
+ QtString.object<jstring>());
+ QTest::qWait(200);
+ QVERIFY(registerNativesString == QStringLiteral("From Java (named member): Qt"));
+ }
+
+ // Function generally just in namespace as callback
+ {
+ QVERIFY(env.registerNativeMethods(javaTestClass, {
+ Q_JNI_NATIVE_SCOPED_METHOD(namespaceCallbackFromJava, CallbackNamespace)
+ }));
+
+ QJniObject::callStaticMethod<void>(javaTestClass,
+ "namespaceAppendJavaToString",
+ "(Ljava/lang/String;)V",
+ QtString.object<jstring>());
+ QTest::qWait(200);
+ QVERIFY(registerNativesString == QStringLiteral("From Java (namespace): Qt"));
+ }
+
+ // No default constructor in class
+ {
+ QVERIFY(env.registerNativeMethods(javaTestClassNoCtor, {
+ Q_JNI_NATIVE_METHOD(callbackFromJavaNoCtor)
+ }));
QJniObject::callStaticMethod<void>(javaTestClassNoCtor,
"appendJavaToString",
@@ -171,17 +250,16 @@ static void intCallbackFromJava(JNIEnv *env, jobject /*thiz*/, jint value)
Q_UNUSED(env)
registerNativeInteger = static_cast<int>(value);
}
+Q_DECLARE_JNI_NATIVE_METHOD(intCallbackFromJava);
void tst_QJniEnvironment::registerNativeMethodsByJclass()
{
- const JNINativeMethod methods[] {
- { "intCallbackFromJava", "(I)V", reinterpret_cast<void *>(intCallbackFromJava) }
- };
-
QJniEnvironment env;
jclass clazz = env.findClass(javaTestClass);
QVERIFY(clazz != 0);
- QVERIFY(env.registerNativeMethods(clazz, methods, 1));
+ QVERIFY(env.registerNativeMethods(clazz, {
+ Q_JNI_NATIVE_METHOD(intCallbackFromJava)
+ }));
QCOMPARE(registerNativeInteger, 0);
@@ -202,7 +280,12 @@ void tst_QJniEnvironment::findMethod()
jmethodID methodId = env.findMethod(clazz, "toString", "()Ljava/lang/String;");
QVERIFY(methodId != nullptr);
+ // existing method
+ methodId = env.findMethod<jstring>(clazz, "toString");
+ QVERIFY(methodId != nullptr);
+
// invalid signature
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("java.lang.NoSuchMethodError: .*"));
jmethodID invalid = env.findMethod(clazz, "unknown", "()I");
QVERIFY(invalid == nullptr);
// check that all exceptions are already cleared
@@ -219,14 +302,22 @@ void tst_QJniEnvironment::findStaticMethod()
jmethodID staticMethodId = env.findStaticMethod(clazz, "parseInt", "(Ljava/lang/String;)I");
QVERIFY(staticMethodId != nullptr);
+ // existing method
+ staticMethodId = env.findStaticMethod<jint, jstring>(clazz, "parseInt");
+ QVERIFY(staticMethodId != nullptr);
+
QJniObject parameter = QJniObject::fromString("123");
jint result = QJniObject::callStaticMethod<jint>(clazz, staticMethodId,
parameter.object<jstring>());
QCOMPARE(result, 123);
// invalid method
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("java.lang.NoSuchMethodError: .*"));
jmethodID invalid = env.findStaticMethod(clazz, "unknown", "()I");
QVERIFY(invalid == nullptr);
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("java.lang.NoSuchMethodError: .*"));
+ invalid = env.findStaticMethod<jint>(clazz, "unknown");
+ QVERIFY(invalid == nullptr);
// check that all exceptions are already cleared
QVERIFY(!env.checkAndClearExceptions());
}
@@ -240,6 +331,8 @@ void tst_QJniEnvironment::findField()
// valid field
jfieldID validId = env.findField(clazz, "INT_FIELD", "I");
QVERIFY(validId != nullptr);
+ validId = env.findField<jint>(clazz, "INT_FIELD");
+ QVERIFY(validId != nullptr);
jmethodID constructorId = env.findMethod(clazz, "<init>", "()V");
QVERIFY(constructorId != nullptr);
@@ -250,6 +343,7 @@ void tst_QJniEnvironment::findField()
QVERIFY(value == 123);
// invalid signature
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("java.lang.NoSuchFieldError: .*"));
jfieldID invalidId = env.findField(clazz, "unknown", "I");
QVERIFY(invalidId == nullptr);
// check that all exceptions are already cleared
@@ -265,12 +359,15 @@ void tst_QJniEnvironment::findStaticField()
// valid field
jfieldID validId = env.findStaticField(clazz, "S_INT_FIELD", "I");
QVERIFY(validId != nullptr);
+ validId = env.findStaticField<jint>(clazz, "S_INT_FIELD");
+ QVERIFY(validId != nullptr);
int size = env->GetStaticIntField(clazz, validId);
QVERIFY(!env.checkAndClearExceptions());
QVERIFY(size == 321);
// invalid signature
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("java.lang.NoSuchFieldError: .*"));
jfieldID invalidId = env.findStaticField(clazz, "unknown", "I");
QVERIFY(invalidId == nullptr);
// check that all exceptions are already cleared
diff --git a/tests/auto/corelib/kernel/qjniobject/CMakeLists.txt b/tests/auto/corelib/kernel/qjniobject/CMakeLists.txt
index b0f5d0b640..98509dc0e5 100644
--- a/tests/auto/corelib/kernel/qjniobject/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qjniobject/CMakeLists.txt
@@ -1,7 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qjniobject Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qjniobject LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qjniobject
SOURCES
tst_qjniobject.cpp
@@ -11,6 +20,4 @@ if(ANDROID)
set_property(TARGET tst_qjniobject APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
${CMAKE_CURRENT_SOURCE_DIR}/testdata
)
- # QTBUG-88840 # special case
- qt_android_generate_deployment_settings(tst_qjniobject) # special case
endif()
diff --git a/tests/auto/corelib/kernel/qjniobject/testdata/src/org/qtproject/qt/android/testdata/QtJniObjectTestClass.java b/tests/auto/corelib/kernel/qjniobject/testdata/src/org/qtproject/qt/android/testdata/QtJniObjectTestClass.java
index 5865391ac9..07a94d1cac 100644
--- a/tests/auto/corelib/kernel/qjniobject/testdata/src/org/qtproject/qt/android/testdata/QtJniObjectTestClass.java
+++ b/tests/auto/corelib/kernel/qjniobject/testdata/src/org/qtproject/qt/android/testdata/QtJniObjectTestClass.java
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
package org.qtproject.qt.android.testdatapackage;
@@ -45,6 +20,9 @@ public class QtJniObjectTestClass
// --------------------------------------------------------------------------------------------
+ final int INT_FIELD = 123;
+ final boolean BOOL_FIELD = true;
+
byte BYTE_VAR;
short SHORT_VAR;
int INT_VAR;
@@ -150,6 +128,9 @@ public class QtJniObjectTestClass
public String stringMethod() { return staticStringMethod(); }
// --------------------------------------------------------------------------------------------
+ public static String staticEchoMethod(String value) { return value; }
+
+ // --------------------------------------------------------------------------------------------
public static Throwable staticThrowableMethod() { return A_THROWABLE_OBJECT; }
public Throwable throwableMethod() { return staticThrowableMethod(); }
@@ -157,43 +138,208 @@ public class QtJniObjectTestClass
public static Object[] staticObjectArrayMethod()
{ Object[] array = { new Object(), new Object(), new Object() }; return array; }
public Object[] objectArrayMethod() { return staticObjectArrayMethod(); }
+ public static Object[] staticReverseObjectArray(Object[] array)
+ {
+ for (int i = 0; i < array.length / 2; ++i) {
+ Object old = array[array.length - i - 1];
+ array[array.length - i - 1] = array[i];
+ array[i] = old;
+ }
+ return array;
+ }
+ public Object[] reverseObjectArray(Object[] array)
+ { return staticReverseObjectArray(array); }
// --------------------------------------------------------------------------------------------
public static boolean[] staticBooleanArrayMethod()
{ boolean[] array = { true, true, true }; return array; }
public boolean[] booleanArrayMethod() { return staticBooleanArrayMethod(); }
+ public static boolean[] staticReverseBooleanArray(boolean[] array)
+ {
+ for (int i = 0; i < array.length / 2; ++i) {
+ boolean old = array[array.length - i - 1];
+ array[array.length - i - 1] = array[i];
+ array[i] = old;
+ }
+ return array;
+ }
+ public boolean[] reverseBooleanArray(boolean[] array)
+ { return staticReverseBooleanArray(array); }
// --------------------------------------------------------------------------------------------
public static byte[] staticByteArrayMethod()
{ byte[] array = { 'a', 'b', 'c' }; return array; }
public byte[] byteArrayMethod() { return staticByteArrayMethod(); }
+ public static byte[] staticReverseByteArray(byte[] array)
+ {
+ for (int i = 0; i < array.length / 2; ++i) {
+ byte old = array[array.length - i - 1];
+ array[array.length - i - 1] = array[i];
+ array[i] = old;
+ }
+ return array;
+ }
+ public byte[] reverseByteArray(byte[] array)
+ { return staticReverseByteArray(array); }
// --------------------------------------------------------------------------------------------
public static char[] staticCharArrayMethod()
{ char[] array = { 'a', 'b', 'c' }; return array; }
public char[] charArrayMethod() { return staticCharArrayMethod(); }
+ public static char[] staticReverseCharArray(char[] array)
+ {
+ for (int i = 0; i < array.length / 2; ++i) {
+ char old = array[array.length - i - 1];
+ array[array.length - i - 1] = array[i];
+ array[i] = old;
+ }
+ return array;
+ }
+ public char[] reverseCharArray(char[] array)
+ { return staticReverseCharArray(array); }
// --------------------------------------------------------------------------------------------
public static short[] staticShortArrayMethod() { short[] array = { 3, 2, 1 }; return array; }
public short[] shortArrayMethod() { return staticShortArrayMethod(); }
+ public static short[] staticReverseShortArray(short[] array)
+ {
+ for (int i = 0; i < array.length / 2; ++i) {
+ short old = array[array.length - i - 1];
+ array[array.length - i - 1] = array[i];
+ array[i] = old;
+ }
+ return array;
+ }
+ public short[] reverseShortArray(short[] array)
+ { return staticReverseShortArray(array); }
// --------------------------------------------------------------------------------------------
public static int[] staticIntArrayMethod() { int[] array = { 3, 2, 1 }; return array; }
public int[] intArrayMethod() { return staticIntArrayMethod(); }
+ public static int[] staticReverseIntArray(int[] array)
+ {
+ for (int i = 0; i < array.length / 2; ++i) {
+ int old = array[array.length - i - 1];
+ array[array.length - i - 1] = array[i];
+ array[i] = old;
+ }
+ return array;
+ }
+ public int[] reverseIntArray(int[] array)
+ { return staticReverseIntArray(array); }
// --------------------------------------------------------------------------------------------
public static long[] staticLongArrayMethod()
{ long[] array = { 3, 2, 1 }; return array; }
public long[] longArrayMethod() { return staticLongArrayMethod(); }
+ public static long[] staticReverseLongArray(long[] array)
+ {
+ for (int i = 0; i < array.length / 2; ++i) {
+ long old = array[array.length - i - 1];
+ array[array.length - i - 1] = array[i];
+ array[i] = old;
+ }
+ return array;
+ }
+ public long[] reverseLongArray(long[] array)
+ { return staticReverseLongArray(array); }
// --------------------------------------------------------------------------------------------
public static float[] staticFloatArrayMethod()
{ float[] array = { 1.0f, 2.0f, 3.0f }; return array; }
public float[] floatArrayMethod() { return staticFloatArrayMethod(); }
+ public static float[] staticReverseFloatArray(float[] array)
+ {
+ for (int i = 0; i < array.length / 2; ++i) {
+ float old = array[array.length - i - 1];
+ array[array.length - i - 1] = array[i];
+ array[i] = old;
+ }
+ return array;
+ }
+ public float[] reverseFloatArray(float[] array)
+ { return staticReverseFloatArray(array); }
// --------------------------------------------------------------------------------------------
public static double[] staticDoubleArrayMethod()
{ double[] array = { 3.0, 2.0, 1.0 }; return array; }
public double[] doubleArrayMethod() { return staticDoubleArrayMethod(); }
-}
+ public static double[] staticReverseDoubleArray(double[] array)
+ {
+ for (int i = 0; i < array.length / 2; ++i) {
+ double old = array[array.length - i - 1];
+ array[array.length - i - 1] = array[i];
+ array[i] = old;
+ }
+ return array;
+ }
+ public double[] reverseDoubleArray(double[] array)
+ { return staticReverseDoubleArray(array); }
+ // --------------------------------------------------------------------------------------------
+ native public int callbackWithObject(QtJniObjectTestClass that);
+ native public int callbackWithObjectRef(QtJniObjectTestClass that);
+ native public int callbackWithString(String string);
+ native public int callbackWithByte(byte value);
+ native public int callbackWithBoolean(boolean value);
+ native public int callbackWithInt(int value);
+ native public int callbackWithDouble(double value);
+ native public int callbackWithJniArray(double[] value);
+ native public int callbackWithQList(double[] value);
+ native public int callbackWithStringList(String[] value);
+
+ public int callMeBackWithObject(QtJniObjectTestClass that)
+ {
+ return callbackWithObject(that);
+ }
+
+ public int callMeBackWithObjectRef(QtJniObjectTestClass that)
+ {
+ return callbackWithObjectRef(that);
+ }
+
+ public int callMeBackWithString(String string)
+ {
+ return callbackWithString(string);
+ }
+
+ public int callMeBackWithByte(byte value)
+ {
+ return callbackWithByte(value);
+ }
+
+ public int callMeBackWithBoolean(boolean value)
+ {
+ return callbackWithBoolean(value);
+ }
+
+ public int callMeBackWithInt(int value)
+ {
+ return callbackWithInt(value);
+ }
+
+ public int callMeBackWithDouble(double value)
+ {
+ return callbackWithDouble(value);
+ }
+ public int callMeBackWithJniArray(double[] value)
+ {
+ return callbackWithJniArray(value);
+ }
+ public int callMeBackWithQList(double[] value)
+ {
+ return callbackWithQList(value);
+ }
+ public int callMeBackWithStringList(String[] value)
+ {
+ return callbackWithStringList(value);
+ }
+
+ public Object callMethodThrowsException() throws Exception {
+ throw new Exception();
+ }
+
+ public static Object callStaticMethodThrowsException() throws Exception {
+ throw new Exception();
+ }
+}
diff --git a/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp b/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp
index 4c0d9e1e6e..64b464e002 100644
--- a/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp
+++ b/tests/auto/corelib/kernel/qjniobject/tst_qjniobject.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <jni.h>
@@ -33,7 +8,11 @@
#include <QtCore/QJniObject>
#include <QtTest>
-static const char testClassName[] = "org/qtproject/qt/android/testdatapackage/QtJniObjectTestClass";
+using namespace Qt::StringLiterals;
+
+static constexpr const char testClassName[] = "org/qtproject/qt/android/testdatapackage/QtJniObjectTestClass";
+Q_DECLARE_JNI_CLASS(QtJniObjectTestClass, testClassName)
+using TestClass = QtJniTypes::QtJniObjectTestClass;
static const jbyte A_BYTE_VALUE = 127;
static const jshort A_SHORT_VALUE = 32767;
@@ -57,12 +36,16 @@ public:
private slots:
void initTestCase();
+ void init();
void ctor();
void callMethodTest();
+ void callMethodThrowsException();
void callObjectMethodTest();
void stringConvertionTest();
void compareOperatorTests();
+ void className();
+ void callStaticMethodThrowsException();
void callStaticObjectMethodClassName();
void callStaticObjectMethod();
void callStaticObjectMethodById();
@@ -96,6 +79,7 @@ private slots:
void getStaticIntField();
void getStaticByteFieldClassName();
void getStaticByteField();
+ void getStaticBooleanField();
void getStaticLongFieldClassName();
void getStaticLongField();
void getStaticDoubleFieldClassName();
@@ -131,6 +115,11 @@ private slots:
void templateApiCheck();
void isClassAvailable();
void fromLocalRef();
+ void largeObjectArray();
+
+ void callback_data();
+ void callback();
+ void callStaticOverloadResolution();
void cleanupTestCase();
};
@@ -143,6 +132,14 @@ void tst_QJniObject::initTestCase()
{
}
+void tst_QJniObject::init()
+{
+ // Unless explicitly ignored to test error handling, warning messages
+ // in this test about a failure to look up a field, method, or class
+ // make the test fail.
+ QTest::failOnWarning(QRegularExpression("java.lang.NoSuch.*Error"));
+}
+
void tst_QJniObject::cleanupTestCase()
{
}
@@ -160,6 +157,21 @@ void tst_QJniObject::ctor()
}
{
+ QJniObject object = QJniObject::construct<jstring>();
+ QVERIFY(object.isValid());
+ }
+
+ {
+ // from Qt 6.7 on we can construct declared classes through the helper type
+ QJniObject object = TestClass::construct();
+ QVERIFY(object.isValid());
+
+ // or even directly
+ TestClass testObject;
+ QVERIFY(testObject.isValid());
+ }
+
+ {
QJniObject string = QJniObject::fromString(QLatin1String("Hello, Java"));
QJniObject object("java/lang/String", "(Ljava/lang/String;)V", string.object<jstring>());
QVERIFY(object.isValid());
@@ -167,6 +179,13 @@ void tst_QJniObject::ctor()
}
{
+ QJniObject string = QJniObject::fromString(QLatin1String("Hello, Java"));
+ QJniObject object = QJniObject::construct<jstring>(string.object<jstring>());
+ QVERIFY(object.isValid());
+ QCOMPARE(string.toString(), object.toString());
+ }
+
+ {
QJniEnvironment env;
jclass javaStringClass = env->FindClass("java/lang/String");
QJniObject string(javaStringClass);
@@ -182,21 +201,40 @@ void tst_QJniObject::ctor()
QVERIFY(stringCpy.isValid());
QCOMPARE(qString, stringCpy.toString());
}
+
+ {
+ QJniEnvironment env;
+ const QString qString = QLatin1String("Hello, Java");
+ jclass javaStringClass = env->FindClass("java/lang/String");
+ QJniObject string = QJniObject::fromString(qString);
+ QJniObject stringCpy(javaStringClass, string.object<jstring>());
+ QVERIFY(stringCpy.isValid());
+ QCOMPARE(qString, stringCpy.toString());
+ }
}
void tst_QJniObject::callMethodTest()
{
{
- QJniObject jString1 = QJniObject::fromString(QLatin1String("Hello, Java"));
- QJniObject jString2 = QJniObject::fromString(QLatin1String("hELLO, jAVA"));
+ const QString qString1 = u"Hello, Java"_s;
+ const QString qString2 = u"hELLO, jAVA"_s;
+ QJniObject jString1 = QJniObject::fromString(qString1);
+ QJniObject jString2 = QJniObject::fromString(qString2);
QVERIFY(jString1 != jString2);
const jboolean isEmpty = jString1.callMethod<jboolean>("isEmpty");
QVERIFY(!isEmpty);
- const jint ret = jString1.callMethod<jint>("compareToIgnoreCase",
- "(Ljava/lang/String;)I",
- jString2.object<jstring>());
+ jint ret = jString1.callMethod<jint>("compareToIgnoreCase",
+ "(Ljava/lang/String;)I",
+ jString2.object<jstring>());
+ QVERIFY(0 == ret);
+
+ ret = jString1.callMethod<jint>("compareToIgnoreCase", jString2.object<jstring>());
+ QVERIFY(0 == ret);
+
+ // as of Qt 6.7, we can pass QString directly
+ ret = jString1.callMethod<jint>("compareToIgnoreCase", qString2);
QVERIFY(0 == ret);
}
@@ -206,6 +244,33 @@ void tst_QJniObject::callMethodTest()
jlong ret = longObject.callMethod<jlong>("longValue");
QCOMPARE(ret, jLong);
}
+
+ // as of Qt 6.4, callMethod works with an object type as well!
+ {
+ const QString qString = QLatin1String("Hello, Java");
+ QJniObject jString = QJniObject::fromString(qString);
+ const QString qStringRet = jString.callMethod<jstring>("toUpperCase").toString();
+ QCOMPARE(qString.toUpper(), qStringRet);
+
+ QJniObject subString = jString.callMethod<jstring>("substring", 0, 4);
+ QCOMPARE(subString.toString(), qString.mid(0, 4));
+
+ // and as of Qt 6.7, we can return and take QString directly
+ QCOMPARE(jString.callMethod<QString>("substring", 0, 4), qString.mid(0, 4));
+
+ QCOMPARE(jString.callMethod<jstring>("substring", 0, 7)
+ .callMethod<jstring>("toUpperCase")
+ .callMethod<QString>("concat", u"C++"_s), u"HELLO, C++"_s);
+ }
+}
+
+void tst_QJniObject::callMethodThrowsException()
+{
+ QtJniTypes::QtJniObjectTestClass instance;
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("java.lang.Exception"));
+ auto res = instance.callMethod<jobject>("callMethodThrowsException");
+ QVERIFY(!res.isValid());
+ QVERIFY(!QJniEnvironment().checkAndClearExceptions());
}
void tst_QJniObject::callObjectMethodTest()
@@ -219,6 +284,10 @@ void tst_QJniObject::callObjectMethodTest()
"(II)Ljava/lang/String;",
0, 4);
QCOMPARE(subString.toString(), qString.mid(0, 4));
+
+ subString = jString.callObjectMethod<jstring>("substring", 0, 4);
+ QCOMPARE(subString.toString(), qString.mid(0, 4));
+
}
void tst_QJniObject::stringConvertionTest()
@@ -251,7 +320,7 @@ void tst_QJniObject::compareOperatorTests()
QJniObject stringObject2 = QJniObject::fromString(str);
QVERIFY(stringObject != stringObject2);
- jstring jstrobj = 0;
+ jstring jstrobj = nullptr;
QJniObject invalidStringObject;
QVERIFY(invalidStringObject == jstrobj);
@@ -260,6 +329,36 @@ void tst_QJniObject::compareOperatorTests()
QVERIFY(!invalidStringObject.isValid());
}
+void tst_QJniObject::className()
+{
+ const QString str("Hello!");
+ QJniObject jString = QJniObject::fromString(str);
+ {
+ QCOMPARE(jString.className(), "java/lang/String");
+ QCOMPARE(jString.toString(), str);
+ }
+
+ {
+ QJniObject strObject = QJniObject("java/lang/String", str);
+ QCOMPARE(strObject.className(), "java/lang/String");
+ QCOMPARE(strObject.toString(), str);
+ }
+
+ {
+ TestClass test;
+ QCOMPARE(test.className(), testClassName);
+ }
+}
+
+void tst_QJniObject::callStaticMethodThrowsException()
+{
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("java.lang.Exception"));
+ auto res = QtJniTypes::QtJniObjectTestClass::callStaticMethod<jobject>(
+ "callStaticMethodThrowsException");
+ QVERIFY(!res.isValid());
+ QVERIFY(!QJniEnvironment().checkAndClearExceptions());
+}
+
void tst_QJniObject::callStaticObjectMethodClassName()
{
QJniObject formatString = QJniObject::fromString(QLatin1String("test format"));
@@ -276,6 +375,16 @@ void tst_QJniObject::callStaticObjectMethodClassName()
QString returnedString = returnValue.toString();
QCOMPARE(returnedString, QString::fromLatin1("test format"));
+
+ returnValue = QJniObject::callStaticObjectMethod<jstring>("java/lang/String",
+ "format",
+ formatString.object<jstring>(),
+ jobjectArray(0));
+ QVERIFY(returnValue.isValid());
+
+ returnedString = returnValue.toString();
+
+ QCOMPARE(returnedString, QString::fromLatin1("test format"));
}
void tst_QJniObject::callStaticObjectMethod()
@@ -284,7 +393,8 @@ void tst_QJniObject::callStaticObjectMethod()
jclass cls = env->FindClass("java/lang/String");
QVERIFY(cls != 0);
- QJniObject formatString = QJniObject::fromString(QLatin1String("test format"));
+ const QString string = u"test format"_s;
+ QJniObject formatString = QJniObject::fromString(string);
QVERIFY(formatString.isValid());
QJniObject returnValue = QJniObject::callStaticObjectMethod(cls,
@@ -293,10 +403,35 @@ void tst_QJniObject::callStaticObjectMethod()
formatString.object<jstring>(),
jobjectArray(0));
QVERIFY(returnValue.isValid());
+ QCOMPARE(returnValue.toString(), string);
- QString returnedString = returnValue.toString();
+ returnValue = QJniObject::callStaticObjectMethod<jstring>(cls,
+ "format",
+ formatString.object<jstring>(),
+ jobjectArray(0));
+ QVERIFY(returnValue.isValid());
+ QCOMPARE(returnValue.toString(), string);
- QCOMPARE(returnedString, QString::fromLatin1("test format"));
+ // from 6.4 on we can use callStaticMethod
+ returnValue = QJniObject::callStaticMethod<jstring>(cls,
+ "format",
+ formatString.object<jstring>(),
+ jobjectArray(0));
+ QVERIFY(returnValue.isValid());
+ QCOMPARE(returnValue.toString(), string);
+
+ // from 6.7 we can use callStaticMethod without specifying the class string
+ returnValue = QJniObject::callStaticMethod<jstring, jstring>("format",
+ formatString.object<jstring>(),
+ jobjectArray(0));
+ QVERIFY(returnValue.isValid());
+ QCOMPARE(returnValue.toString(), string);
+
+ // from 6.7 we can pass QString directly, both as parameters and return type
+ QString result = QJniObject::callStaticMethod<jstring, QString>("format",
+ string,
+ jobjectArray(0));
+ QCOMPARE(result, string);
}
void tst_QJniObject::callStaticObjectMethodById()
@@ -319,6 +454,15 @@ void tst_QJniObject::callStaticObjectMethodById()
QString returnedString = returnValue.toString();
QCOMPARE(returnedString, QString::fromLatin1("test format"));
+
+ // from Qt 6.4 on we can use callStaticMethod as well
+ returnValue = QJniObject::callStaticMethod<jstring>(
+ cls, id, formatString.object<jstring>(), jobjectArray(0));
+ QVERIFY(returnValue.isValid());
+
+ returnedString = returnValue.toString();
+
+ QCOMPARE(returnedString, QString::fromLatin1("test format"));
}
void tst_QJniObject::callStaticBooleanMethod()
@@ -336,6 +480,9 @@ void tst_QJniObject::callStaticBooleanMethod()
"(Ljava/lang/String;)Z",
parameter.object<jstring>());
QVERIFY(b);
+
+ b = QJniObject::callStaticMethod<jboolean>(cls, "parseBoolean", parameter.object<jstring>());
+ QVERIFY(b);
}
{
@@ -347,6 +494,9 @@ void tst_QJniObject::callStaticBooleanMethod()
"(Ljava/lang/String;)Z",
parameter.object<jstring>());
QVERIFY(!b);
+
+ b = QJniObject::callStaticMethod<jboolean>(cls, "parseBoolean", parameter.object<jstring>());
+ QVERIFY(!b);
}
}
@@ -387,6 +537,10 @@ void tst_QJniObject::callStaticBooleanMethodClassName()
"(Ljava/lang/String;)Z",
parameter.object<jstring>());
QVERIFY(b);
+ b = QJniObject::callStaticMethod<jboolean>("java/lang/Boolean",
+ "parseBoolean",
+ parameter.object<jstring>());
+ QVERIFY(b);
}
{
@@ -398,6 +552,10 @@ void tst_QJniObject::callStaticBooleanMethodClassName()
"(Ljava/lang/String;)Z",
parameter.object<jstring>());
QVERIFY(!b);
+ b = QJniObject::callStaticMethod<jboolean>("java/lang/Boolean",
+ "parseBoolean",
+ parameter.object<jstring>());
+ QVERIFY(!b);
}
}
@@ -408,7 +566,6 @@ void tst_QJniObject::callStaticByteMethodClassName()
jbyte returnValue = QJniObject::callStaticMethod<jbyte>("java/lang/Byte",
"parseByte",
- "(Ljava/lang/String;)B",
parameter.object<jstring>());
QCOMPARE(returnValue, jbyte(number.toInt()));
}
@@ -424,7 +581,6 @@ void tst_QJniObject::callStaticByteMethod()
jbyte returnValue = QJniObject::callStaticMethod<jbyte>(cls,
"parseByte",
- "(Ljava/lang/String;)B",
parameter.object<jstring>());
QCOMPARE(returnValue, jbyte(number.toInt()));
}
@@ -452,7 +608,6 @@ void tst_QJniObject::callStaticIntMethodClassName()
jint returnValue = QJniObject::callStaticMethod<jint>("java/lang/Integer",
"parseInt",
- "(Ljava/lang/String;)I",
parameter.object<jstring>());
QCOMPARE(returnValue, number.toInt());
}
@@ -469,7 +624,6 @@ void tst_QJniObject::callStaticIntMethod()
jint returnValue = QJniObject::callStaticMethod<jint>(cls,
"parseInt",
- "(Ljava/lang/String;)I",
parameter.object<jstring>());
QCOMPARE(returnValue, number.toInt());
}
@@ -494,7 +648,6 @@ void tst_QJniObject::callStaticCharMethodClassName()
{
jchar returnValue = QJniObject::callStaticMethod<jchar>("java/lang/Character",
"toUpperCase",
- "(C)C",
jchar('a'));
QCOMPARE(returnValue, jchar('A'));
}
@@ -508,7 +661,6 @@ void tst_QJniObject::callStaticCharMethod()
jchar returnValue = QJniObject::callStaticMethod<jchar>(cls,
"toUpperCase",
- "(C)C",
jchar('a'));
QCOMPARE(returnValue, jchar('A'));
}
@@ -533,7 +685,6 @@ void tst_QJniObject::callStaticDoubleMethodClassName ()
jdouble returnValue = QJniObject::callStaticMethod<jdouble>("java/lang/Double",
"parseDouble",
- "(Ljava/lang/String;)D",
parameter.object<jstring>());
QCOMPARE(returnValue, number.toDouble());
}
@@ -550,7 +701,6 @@ void tst_QJniObject::callStaticDoubleMethod()
jdouble returnValue = QJniObject::callStaticMethod<jdouble>(cls,
"parseDouble",
- "(Ljava/lang/String;)D",
parameter.object<jstring>());
QCOMPARE(returnValue, number.toDouble());
}
@@ -579,7 +729,6 @@ void tst_QJniObject::callStaticFloatMethodClassName()
jfloat returnValue = QJniObject::callStaticMethod<jfloat>("java/lang/Float",
"parseFloat",
- "(Ljava/lang/String;)F",
parameter.object<jstring>());
QCOMPARE(returnValue, number.toFloat());
}
@@ -596,7 +745,6 @@ void tst_QJniObject::callStaticFloatMethod()
jfloat returnValue = QJniObject::callStaticMethod<jfloat>(cls,
"parseFloat",
- "(Ljava/lang/String;)F",
parameter.object<jstring>());
QCOMPARE(returnValue, number.toFloat());
}
@@ -624,7 +772,6 @@ void tst_QJniObject::callStaticShortMethodClassName()
jshort returnValue = QJniObject::callStaticMethod<jshort>("java/lang/Short",
"parseShort",
- "(Ljava/lang/String;)S",
parameter.object<jstring>());
QCOMPARE(returnValue, number.toShort());
}
@@ -641,7 +788,6 @@ void tst_QJniObject::callStaticShortMethod()
jshort returnValue = QJniObject::callStaticMethod<jshort>(cls,
"parseShort",
- "(Ljava/lang/String;)S",
parameter.object<jstring>());
QCOMPARE(returnValue, number.toShort());
}
@@ -669,7 +815,6 @@ void tst_QJniObject::callStaticLongMethodClassName()
jlong returnValue = QJniObject::callStaticMethod<jlong>("java/lang/Long",
"parseLong",
- "(Ljava/lang/String;)J",
parameter.object<jstring>());
QCOMPARE(returnValue, jlong(number.toLong()));
}
@@ -685,7 +830,6 @@ void tst_QJniObject::callStaticLongMethod()
jlong returnValue = QJniObject::callStaticMethod<jlong>(cls,
"parseLong",
- "(Ljava/lang/String;)J",
parameter.object<jstring>());
QCOMPARE(returnValue, jlong(number.toLong()));
}
@@ -789,6 +933,10 @@ void tst_QJniObject::getStaticIntField()
jint i = QJniObject::getStaticField<jint>(cls, "SIZE");
QCOMPARE(i, 64);
+
+ enum class Enum { SIZE = 64 };
+ Enum e = QJniObject::getStaticField<Enum>(cls, "SIZE");
+ QCOMPARE(e, Enum::SIZE);
}
void tst_QJniObject::getStaticByteFieldClassName()
@@ -805,6 +953,16 @@ void tst_QJniObject::getStaticByteField()
jbyte i = QJniObject::getStaticField<jbyte>(cls, "MAX_VALUE");
QCOMPARE(i, jbyte(127));
+
+ enum class Enum : jbyte { MAX_VALUE = 127 };
+ Enum e = QJniObject::getStaticField<Enum>(cls, "MAX_VALUE");
+ QCOMPARE(e, Enum::MAX_VALUE);
+}
+
+void tst_QJniObject::getStaticBooleanField()
+{
+ QCOMPARE(TestClass::getStaticField<jboolean>("S_BOOLEAN_VAR"),
+ TestClass::getStaticField<bool>("S_BOOLEAN_VAR"));
}
void tst_QJniObject::getStaticLongFieldClassName()
@@ -821,6 +979,10 @@ void tst_QJniObject::getStaticLongField()
jlong i = QJniObject::getStaticField<jlong>(cls, "MAX_VALUE");
QCOMPARE(i, jlong(9223372036854775807L));
+
+ enum class Enum : jlong { MAX_VALUE = 9223372036854775807L };
+ Enum e = QJniObject::getStaticField<Enum>(cls, "MAX_VALUE");
+ QCOMPARE(e, Enum::MAX_VALUE);
}
void tst_QJniObject::getStaticDoubleFieldClassName()
@@ -873,6 +1035,9 @@ void tst_QJniObject::getStaticShortField()
jshort i = QJniObject::getStaticField<jshort>(cls, "MAX_VALUE");
QCOMPARE(i, jshort(32767));
+ enum class Enum : jshort { MAX_VALUE = 32767 };
+ Enum e = QJniObject::getStaticField<Enum>(cls, "MAX_VALUE");
+ QCOMPARE(e, Enum::MAX_VALUE);
}
void tst_QJniObject::getStaticCharFieldClassName()
@@ -889,24 +1054,29 @@ void tst_QJniObject::getStaticCharField()
jchar i = QJniObject::getStaticField<jchar>(cls, "MAX_VALUE");
QCOMPARE(i, jchar(0xffff));
+
+ enum class Enum : jchar { MAX_VALUE = 0xffff };
+ Enum e = QJniObject::getStaticField<Enum>(cls, "MAX_VALUE");
+ QCOMPARE(e, Enum::MAX_VALUE);
}
void tst_QJniObject::getBooleanField()
{
- QJniObject obj("org/qtproject/qt/android/QtActivityDelegate");
+ QJniObject obj(testClassName);
QVERIFY(obj.isValid());
- QVERIFY(!obj.getField<jboolean>("m_fullScreen"));
+ QVERIFY(obj.getField<jboolean>("BOOL_FIELD"));
+ QVERIFY(obj.getField<bool>("BOOL_FIELD"));
}
void tst_QJniObject::getIntField()
{
- QJniObject obj("org/qtproject/qt/android/QtActivityDelegate");
+ QJniObject obj(testClassName);
QVERIFY(obj.isValid());
- jint res = obj.getField<jint>("m_currentRotation");
- QCOMPARE(res, -1);
+ jint res = obj.getField<jint>("INT_FIELD");
+ QCOMPARE(res, 123);
}
template <typename T>
@@ -924,16 +1094,22 @@ void setField(const char *fieldName, T testValue)
void tst_QJniObject::setIntField()
{
setField("INT_VAR", 555);
+ enum class Enum : jint { VALUE = 555 };
+ setField("INT_VAR", Enum::VALUE);
}
void tst_QJniObject::setByteField()
{
- setField("BYTE_VAR", jbyte(555));
+ setField("BYTE_VAR", jbyte(123));
+ enum class Enum : jbyte { VALUE = 123 };
+ setField("BYTE_VAR", Enum::VALUE);
}
void tst_QJniObject::setLongField()
{
setField("LONG_VAR", jlong(9223372036847758232L));
+ enum class Enum : jlong { VALUE = 9223372036847758232L };
+ setField("LONG_VAR", Enum::VALUE);
}
void tst_QJniObject::setDoubleField()
@@ -948,17 +1124,22 @@ void tst_QJniObject::setFloatField()
void tst_QJniObject::setShortField()
{
- setField("SHORT_VAR", jshort(123));
+ setField("SHORT_VAR", jshort(555));
+ enum class Enum : jshort { VALUE = 555 };
+ setField("SHORT_VAR", Enum::VALUE);
}
void tst_QJniObject::setCharField()
{
setField("CHAR_VAR", jchar('A'));
+ enum class Enum : jchar { VALUE = 'A' };
+ setField("CHAR_VAR", Enum::VALUE);
}
void tst_QJniObject::setBooleanField()
{
setField("BOOLEAN_VAR", jboolean(true));
+ setField("BOOLEAN_VAR", true);
}
void tst_QJniObject::setObjectField()
@@ -966,11 +1147,16 @@ void tst_QJniObject::setObjectField()
QJniObject obj(testClassName);
QVERIFY(obj.isValid());
- QJniObject testValue = QJniObject::fromString(QStringLiteral("Hello"));
+ const QString qString = u"Hello"_s;
+ QJniObject testValue = QJniObject::fromString(qString);
obj.setField("STRING_OBJECT_VAR", testValue.object<jstring>());
QJniObject res = obj.getObjectField<jstring>("STRING_OBJECT_VAR");
QCOMPARE(res.toString(), testValue.toString());
+
+ // as of Qt 6.7, we can set and get strings directly
+ obj.setField("STRING_OBJECT_VAR", qString);
+ QCOMPARE(obj.getField<QString>("STRING_OBJECT_VAR"), qString);
}
template <typename T>
@@ -980,21 +1166,33 @@ void setStaticField(const char *fieldName, T testValue)
T res = QJniObject::getStaticField<T>(testClassName, fieldName);
QCOMPARE(res, testValue);
+
+ // use template overload to reset to default
+ T defaultValue = {};
+ TestClass::setStaticField(fieldName, defaultValue);
+ res = TestClass::getStaticField<T>(fieldName);
+ QCOMPARE(res, defaultValue);
}
void tst_QJniObject::setStaticIntField()
{
setStaticField("S_INT_VAR", 555);
+ enum class Enum : jint { VALUE = 555 };
+ setStaticField("S_INT_VAR", Enum::VALUE);
}
void tst_QJniObject::setStaticByteField()
{
- setStaticField("S_BYTE_VAR", jbyte(555));
+ setStaticField("S_BYTE_VAR", jbyte(123));
+ enum class Enum : jbyte { VALUE = 123 };
+ setStaticField("S_BYTE_VAR", Enum::VALUE);
}
void tst_QJniObject::setStaticLongField()
{
setStaticField("S_LONG_VAR", jlong(9223372036847758232L));
+ enum class Enum : jlong { VALUE = 9223372036847758232L };
+ setStaticField("S_LONG_VAR", Enum::VALUE);
}
void tst_QJniObject::setStaticDoubleField()
@@ -1009,26 +1207,37 @@ void tst_QJniObject::setStaticFloatField()
void tst_QJniObject::setStaticShortField()
{
- setStaticField("S_SHORT_VAR", jshort(123));
+ setStaticField("S_SHORT_VAR", jshort(555));
+ enum class Enum : jshort { VALUE = 555 };
+ setStaticField("S_SHORT_VAR", Enum::VALUE);
}
void tst_QJniObject::setStaticCharField()
{
setStaticField("S_CHAR_VAR", jchar('A'));
+ enum class Enum : jchar { VALUE = 'A' };
+ setStaticField("S_CHAR_VAR", Enum::VALUE);
}
void tst_QJniObject::setStaticBooleanField()
{
setStaticField("S_BOOLEAN_VAR", jboolean(true));
+ setStaticField("S_BOOLEAN_VAR", true);
}
void tst_QJniObject::setStaticObjectField()
{
- QJniObject testValue = QJniObject::fromString(QStringLiteral("Hello"));
+ const QString qString = u"Hello"_s;
+ QJniObject testValue = QJniObject::fromString(qString);
QJniObject::setStaticField(testClassName, "S_STRING_OBJECT_VAR", testValue.object<jstring>());
QJniObject res = QJniObject::getStaticObjectField<jstring>(testClassName, "S_STRING_OBJECT_VAR");
QCOMPARE(res.toString(), testValue.toString());
+
+ // as of Qt 6.7, we can set and get strings directly
+ using namespace QtJniTypes;
+ QtJniObjectTestClass::setStaticField("S_STRING_OBJECT_VAR", qString);
+ QCOMPARE(QtJniObjectTestClass::getStaticField<QString>("S_STRING_OBJECT_VAR"), qString);
}
void tst_QJniObject::templateApiCheck()
@@ -1044,9 +1253,15 @@ void tst_QJniObject::templateApiCheck()
1,
true,
'c');
+ QJniObject::callStaticMethod<void>(testClassName,
+ "staticVoidMethodWithArgs",
+ 1,
+ true,
+ 'c');
testClass.callMethod<void>("voidMethod");
testClass.callMethod<void>("voidMethodWithArgs", "(IZC)V", 1, true, 'c');
+ testClass.callMethod<void>("voidMethodWithArgs", 1, true, 'c');
// jboolean -----------------------------------------------------------------------------------
QVERIFY(QJniObject::callStaticMethod<jboolean>(testClassName, "staticBooleanMethod"));
@@ -1056,6 +1271,11 @@ void tst_QJniObject::templateApiCheck()
true,
true,
true));
+ QVERIFY(QJniObject::callStaticMethod<jboolean>(testClassName,
+ "staticBooleanMethodWithArgs",
+ true,
+ true,
+ true));
QVERIFY(testClass.callMethod<jboolean>("booleanMethod"));
QVERIFY(testClass.callMethod<jboolean>("booleanMethodWithArgs",
@@ -1063,6 +1283,10 @@ void tst_QJniObject::templateApiCheck()
true,
true,
true));
+ QVERIFY(testClass.callMethod<jboolean>("booleanMethodWithArgs",
+ true,
+ true,
+ true));
// jbyte --------------------------------------------------------------------------------------
QVERIFY(QJniObject::callStaticMethod<jbyte>(testClassName,
@@ -1073,9 +1297,15 @@ void tst_QJniObject::templateApiCheck()
1,
1,
1) == A_BYTE_VALUE);
+ QVERIFY(QJniObject::callStaticMethod<jbyte>(testClassName,
+ "staticByteMethodWithArgs",
+ jbyte(1),
+ jbyte(1),
+ jbyte(1)) == A_BYTE_VALUE);
QVERIFY(testClass.callMethod<jbyte>("byteMethod") == A_BYTE_VALUE);
QVERIFY(testClass.callMethod<jbyte>("byteMethodWithArgs", "(BBB)B", 1, 1, 1) == A_BYTE_VALUE);
+ QVERIFY(testClass.callMethod<jbyte>("byteMethodWithArgs", jbyte(1), jbyte(1), jbyte(1)) == A_BYTE_VALUE);
// jchar --------------------------------------------------------------------------------------
QVERIFY(QJniObject::callStaticMethod<jchar>(testClassName,
@@ -1086,6 +1316,11 @@ void tst_QJniObject::templateApiCheck()
jchar(1),
jchar(1),
jchar(1)) == A_CHAR_VALUE);
+ QVERIFY(QJniObject::callStaticMethod<jchar>(testClassName,
+ "staticCharMethodWithArgs",
+ jchar(1),
+ jchar(1),
+ jchar(1)) == A_CHAR_VALUE);
QVERIFY(testClass.callMethod<jchar>("charMethod") == A_CHAR_VALUE);
QVERIFY(testClass.callMethod<jchar>("charMethodWithArgs",
@@ -1093,6 +1328,10 @@ void tst_QJniObject::templateApiCheck()
jchar(1),
jchar(1),
jchar(1)) == A_CHAR_VALUE);
+ QVERIFY(testClass.callMethod<jchar>("charMethodWithArgs",
+ jchar(1),
+ jchar(1),
+ jchar(1)) == A_CHAR_VALUE);
// jshort -------------------------------------------------------------------------------------
QVERIFY(QJniObject::callStaticMethod<jshort>(testClassName,
@@ -1103,6 +1342,11 @@ void tst_QJniObject::templateApiCheck()
jshort(1),
jshort(1),
jshort(1)) == A_SHORT_VALUE);
+ QVERIFY(QJniObject::callStaticMethod<jshort>(testClassName,
+ "staticShortMethodWithArgs",
+ jshort(1),
+ jshort(1),
+ jshort(1)) == A_SHORT_VALUE);
QVERIFY(testClass.callMethod<jshort>("shortMethod") == A_SHORT_VALUE);
QVERIFY(testClass.callMethod<jshort>("shortMethodWithArgs",
@@ -1110,6 +1354,10 @@ void tst_QJniObject::templateApiCheck()
jshort(1),
jshort(1),
jshort(1)) == A_SHORT_VALUE);
+ QVERIFY(testClass.callMethod<jshort>("shortMethodWithArgs",
+ jshort(1),
+ jshort(1),
+ jshort(1)) == A_SHORT_VALUE);
// jint ---------------------------------------------------------------------------------------
QVERIFY(QJniObject::callStaticMethod<jint>(testClassName,
@@ -1120,6 +1368,11 @@ void tst_QJniObject::templateApiCheck()
jint(1),
jint(1),
jint(1)) == A_INT_VALUE);
+ QVERIFY(QJniObject::callStaticMethod<jint>(testClassName,
+ "staticIntMethodWithArgs",
+ jint(1),
+ jint(1),
+ jint(1)) == A_INT_VALUE);
QVERIFY(testClass.callMethod<jint>("intMethod") == A_INT_VALUE);
QVERIFY(testClass.callMethod<jint>("intMethodWithArgs",
@@ -1127,6 +1380,10 @@ void tst_QJniObject::templateApiCheck()
jint(1),
jint(1),
jint(1)) == A_INT_VALUE);
+ QVERIFY(testClass.callMethod<jint>("intMethodWithArgs",
+ jint(1),
+ jint(1),
+ jint(1)) == A_INT_VALUE);
// jlong --------------------------------------------------------------------------------------
QVERIFY(QJniObject::callStaticMethod<jlong>(testClassName,
@@ -1137,6 +1394,11 @@ void tst_QJniObject::templateApiCheck()
jlong(1),
jlong(1),
jlong(1)) == A_LONG_VALUE);
+ QVERIFY(QJniObject::callStaticMethod<jlong>(testClassName,
+ "staticLongMethodWithArgs",
+ jlong(1),
+ jlong(1),
+ jlong(1)) == A_LONG_VALUE);
QVERIFY(testClass.callMethod<jlong>("longMethod") == A_LONG_VALUE);
QVERIFY(testClass.callMethod<jlong>("longMethodWithArgs",
@@ -1144,6 +1406,10 @@ void tst_QJniObject::templateApiCheck()
jlong(1),
jlong(1),
jlong(1)) == A_LONG_VALUE);
+ QVERIFY(testClass.callMethod<jlong>("longMethodWithArgs",
+ jlong(1),
+ jlong(1),
+ jlong(1)) == A_LONG_VALUE);
// jfloat -------------------------------------------------------------------------------------
QVERIFY(QJniObject::callStaticMethod<jfloat>(testClassName,
@@ -1154,6 +1420,11 @@ void tst_QJniObject::templateApiCheck()
jfloat(1.1),
jfloat(1.1),
jfloat(1.1)) == A_FLOAT_VALUE);
+ QVERIFY(QJniObject::callStaticMethod<jfloat>(testClassName,
+ "staticFloatMethodWithArgs",
+ jfloat(1.1),
+ jfloat(1.1),
+ jfloat(1.1)) == A_FLOAT_VALUE);
QVERIFY(testClass.callMethod<jfloat>("floatMethod") == A_FLOAT_VALUE);
QVERIFY(testClass.callMethod<jfloat>("floatMethodWithArgs",
@@ -1161,6 +1432,10 @@ void tst_QJniObject::templateApiCheck()
jfloat(1.1),
jfloat(1.1),
jfloat(1.1)) == A_FLOAT_VALUE);
+ QVERIFY(testClass.callMethod<jfloat>("floatMethodWithArgs",
+ jfloat(1.1),
+ jfloat(1.1),
+ jfloat(1.1)) == A_FLOAT_VALUE);
// jdouble ------------------------------------------------------------------------------------
QVERIFY(QJniObject::callStaticMethod<jdouble>(testClassName,
@@ -1171,6 +1446,11 @@ void tst_QJniObject::templateApiCheck()
jdouble(1.1),
jdouble(1.1),
jdouble(1.1)) == A_DOUBLE_VALUE);
+ QVERIFY(QJniObject::callStaticMethod<jdouble>(testClassName,
+ "staticDoubleMethodWithArgs",
+ jdouble(1.1),
+ jdouble(1.1),
+ jdouble(1.1)) == A_DOUBLE_VALUE);
QVERIFY(testClass.callMethod<jdouble>("doubleMethod") == A_DOUBLE_VALUE);
QVERIFY(testClass.callMethod<jdouble>("doubleMethodWithArgs",
@@ -1178,6 +1458,10 @@ void tst_QJniObject::templateApiCheck()
jdouble(1.1),
jdouble(1.1),
jdouble(1.1)) == A_DOUBLE_VALUE);
+ QVERIFY(testClass.callMethod<jdouble>("doubleMethodWithArgs",
+ jdouble(1.1),
+ jdouble(1.1),
+ jdouble(1.1)) == A_DOUBLE_VALUE);
// jobject ------------------------------------------------------------------------------------
{
@@ -1240,11 +1524,42 @@ void tst_QJniObject::templateApiCheck()
QJniObject res = QJniObject::callStaticObjectMethod<jobjectArray>(testClassName,
"staticObjectArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = TestClass::callStaticMethod<jobject[]>("staticObjectArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+
+ QJniArray<jobject> newArray(QList<QJniObject>{QJniObject::fromString(u"one"_s),
+ QJniObject::fromString(u"two"_s),
+ QJniObject::fromString(u"three"_s)});
+ QVERIFY(newArray.isValid());
+ const auto reverse = TestClass::callStaticMethod<jobject[]>("staticReverseObjectArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.size(), 3);
+ QCOMPARE(QJniObject(reverse.at(0)).toString(), u"three"_s);
+ QCOMPARE(QJniObject(reverse.at(1)).toString(), u"two"_s);
+ QCOMPARE(QJniObject(reverse.at(2)).toString(), u"one"_s);
}
{
QJniObject res = testClass.callObjectMethod<jobjectArray>("objectArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = testClass.callMethod<jobject[]>("objectArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+
+ QJniArray<jobject> newArray(QList<QJniObject>{QJniObject::fromString(u"one"_s),
+ QJniObject::fromString(u"two"_s),
+ QJniObject::fromString(u"three"_s)});
+ QVERIFY(newArray.isValid());
+ const auto reverse = testClass.callMethod<jobject[]>("reverseObjectArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.size(), 3);
+ // QJniArray::at returns a jobject that's a local reference; make sure we don't free it twice
+ QCOMPARE(QJniObject::fromLocalRef(reverse.at(0)).toString(), u"three"_s);
+ QCOMPARE(QJniObject::fromLocalRef(reverse.at(1)).toString(), u"two"_s);
+ QCOMPARE(QJniObject::fromLocalRef(reverse.at(2)).toString(), u"one"_s);
}
// jbooleanArray ------------------------------------------------------------------------------
@@ -1252,11 +1567,33 @@ void tst_QJniObject::templateApiCheck()
QJniObject res = QJniObject::callStaticObjectMethod<jbooleanArray>(testClassName,
"staticBooleanArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = TestClass::callStaticMethod<jboolean[]>("staticBooleanArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jboolean>{true, true, true}));
+
+ QJniArray<jboolean> newArray(QList<jboolean>{true, false, false});
+ QVERIFY(newArray.isValid());
+ const auto reverse = TestClass::callStaticMethod<jboolean[]>("staticReverseBooleanArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jboolean>{false, false, true}));
}
{
QJniObject res = testClass.callObjectMethod<jbooleanArray>("booleanArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = testClass.callMethod<jboolean[]>("booleanArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jboolean>{true, true, true}));
+
+ QJniArray<jboolean> newArray(QList<jboolean>{true, false, false});
+ QVERIFY(newArray.isValid());
+ const auto reverse = testClass.callMethod<jboolean[]>("reverseBooleanArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jboolean>{false, false, true}));
}
// jbyteArray ---------------------------------------------------------------------------------
@@ -1264,11 +1601,37 @@ void tst_QJniObject::templateApiCheck()
QJniObject res = QJniObject::callStaticObjectMethod<jbyteArray>(testClassName,
"staticByteArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = TestClass::callStaticMethod<jbyte[]>("staticByteArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), "abc");
+
+ QJniArray<jbyte> newArray(QByteArray{"cba"});
+ QVERIFY(newArray.isValid());
+ const auto reverse = TestClass::callStaticMethod<jbyte[]>("staticReverseByteArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), "abc");
+
+ const QByteArray reverse2 = TestClass::callStaticMethod<QByteArray>("staticReverseByteArray",
+ QByteArray("abc"));
+ QCOMPARE(reverse2, "cba");
}
{
QJniObject res = testClass.callObjectMethod<jbyteArray>("byteArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = testClass.callMethod<jbyte[]>("byteArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), "abc");
+
+ QJniArray<jbyte> newArray = QJniArrayBase::fromContainer(QByteArray{"cba"});
+ QVERIFY(newArray.isValid());
+ const auto reverse = testClass.callMethod<jbyte[]>("reverseByteArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), "abc");
}
// jcharArray ---------------------------------------------------------------------------------
@@ -1276,11 +1639,37 @@ void tst_QJniObject::templateApiCheck()
QJniObject res = QJniObject::callStaticObjectMethod<jcharArray>(testClassName,
"staticCharArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = TestClass::callStaticMethod<jchar[]>("staticCharArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jchar>{u'a', u'b', u'c'}));
+
+ QJniArray<jchar> newArray = {u'c', u'b', u'a'};
+ QVERIFY(newArray.isValid());
+ const auto reverse = TestClass::callStaticMethod<jchar[]>("staticReverseCharArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jchar>{u'a', u'b', u'c'}));
+
+ const QList<jchar> reverse2 = TestClass::callStaticMethod<QList<jchar>>("staticReverseCharArray",
+ (QList<jchar>{u'c', u'b', u'a'}));
+ QCOMPARE(reverse2, (QList<jchar>{u'a', u'b', u'c'}));
}
{
QJniObject res = testClass.callObjectMethod<jcharArray>("charArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = testClass.callMethod<jchar[]>("charArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jchar>{u'a', u'b', u'c'}));
+
+ QJniArray<jchar> newArray = {u'c', u'b', u'a'};
+ QVERIFY(newArray.isValid());
+ const auto reverse = testClass.callMethod<jchar[]>("reverseCharArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jchar>{u'a', u'b', u'c'}));
}
// jshortArray --------------------------------------------------------------------------------
@@ -1288,11 +1677,38 @@ void tst_QJniObject::templateApiCheck()
QJniObject res = QJniObject::callStaticObjectMethod<jshortArray>(testClassName,
"staticShortArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = TestClass::callStaticMethod<jshort[]>("staticShortArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jshort>{3, 2, 1}));
+
+ QJniArray<jshort> newArray = {3, 2, 1};
+ QVERIFY(newArray.isValid());
+ const auto reverse = TestClass::callStaticMethod<jshort[]>("staticReverseShortArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jshort>{1, 2, 3}));
+
+ const QList<jshort> reverse2 = TestClass::callStaticMethod<QList<jshort>>("staticReverseShortArray",
+ (QList<jshort>{1, 2, 3}));
+ QCOMPARE(reverse2, (QList<jshort>{3, 2, 1}));
}
{
QJniObject res = testClass.callObjectMethod<jshortArray>("shortArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = testClass.callMethod<jshort[]>("shortArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jshort>{3, 2, 1}));
+
+ QJniArray<jshort> newArray = {3, 2, 1};
+ static_assert(std::is_same_v<decltype(newArray)::Type, jshort>);
+ QVERIFY(newArray.isValid());
+ const auto reverse = testClass.callMethod<jshort[]>("reverseShortArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jshort>{1, 2, 3}));
}
// jintArray ----------------------------------------------------------------------------------
@@ -1300,11 +1716,33 @@ void tst_QJniObject::templateApiCheck()
QJniObject res = QJniObject::callStaticObjectMethod<jintArray>(testClassName,
"staticIntArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = TestClass::callStaticMethod<jint[]>("staticIntArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jint>{3, 2, 1}));
+
+ QJniArray<jint> newArray = {3, 2, 1};
+ QVERIFY(newArray.isValid());
+ const auto reverse = TestClass::callStaticMethod<jint[]>("staticReverseIntArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jint>{1, 2, 3}));
}
{
QJniObject res = testClass.callObjectMethod<jintArray>("intArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = testClass.callMethod<jint[]>("intArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jint>{3, 2, 1}));
+
+ QJniArray<jint> newArray = {3, 2, 1};
+ QVERIFY(newArray.isValid());
+ const auto reverse = testClass.callMethod<jint[]>("reverseIntArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jint>{1, 2, 3}));
}
// jlongArray ---------------------------------------------------------------------------------
@@ -1312,11 +1750,33 @@ void tst_QJniObject::templateApiCheck()
QJniObject res = QJniObject::callStaticObjectMethod<jlongArray>(testClassName,
"staticLongArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = TestClass::callStaticMethod<jlong[]>("staticLongArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jlong>{3, 2, 1}));
+
+ QJniArray<jlong> newArray = {3, 2, 1};
+ QVERIFY(newArray.isValid());
+ const auto reverse = TestClass::callStaticMethod<jlong[]>("staticReverseLongArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jlong>{1, 2, 3}));
}
{
QJniObject res = testClass.callObjectMethod<jlongArray>("longArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = testClass.callMethod<jlong[]>("longArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jlong>{3, 2, 1}));
+
+ QJniArray<jlong> newArray = {3, 2, 1};
+ QVERIFY(newArray.isValid());
+ const auto reverse = testClass.callMethod<jlong[]>("reverseLongArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jlong>{1, 2, 3}));
}
// jfloatArray --------------------------------------------------------------------------------
@@ -1324,11 +1784,33 @@ void tst_QJniObject::templateApiCheck()
QJniObject res = QJniObject::callStaticObjectMethod<jfloatArray>(testClassName,
"staticFloatArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = TestClass::callStaticMethod<jfloat[]>("staticFloatArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jfloat>{1.0f, 2.0f, 3.0f}));
+
+ QJniArray<jfloat> newArray = {3.0f, 2.0f, 1.0f};
+ QVERIFY(newArray.isValid());
+ const auto reverse = TestClass::callStaticMethod<jfloat[]>("staticReverseFloatArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jfloat>{1.0f, 2.0f, 3.0f}));
}
{
QJniObject res = testClass.callObjectMethod<jfloatArray>("floatArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = testClass.callMethod<jfloat[]>("floatArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jfloat>{1.0f, 2.0f, 3.0f}));
+
+ QJniArray<jfloat> newArray = {3.0f, 2.0f, 1.0f};
+ QVERIFY(newArray.isValid());
+ const auto reverse = testClass.callMethod<jfloat[]>("reverseFloatArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jfloat>{1.0f, 2.0f, 3.0f}));
}
// jdoubleArray -------------------------------------------------------------------------------
@@ -1336,11 +1818,33 @@ void tst_QJniObject::templateApiCheck()
QJniObject res = QJniObject::callStaticObjectMethod<jdoubleArray>(testClassName,
"staticDoubleArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = TestClass::callStaticMethod<jdouble[]>("staticDoubleArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jdouble>{3.0, 2.0, 1.0}));
+
+ QJniArray<jdouble> newArray = {3.0, 2.0, 1.0};
+ QVERIFY(newArray.isValid());
+ const auto reverse = TestClass::callStaticMethod<jdouble[]>("staticReverseDoubleArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jdouble>{1.0, 2.0, 3.0}));
}
{
QJniObject res = testClass.callObjectMethod<jdoubleArray>("doubleArrayMethod");
QVERIFY(res.isValid());
+
+ const auto array = testClass.callMethod<jdouble[]>("doubleArrayMethod");
+ QVERIFY(array.isValid());
+ QCOMPARE(array.size(), 3);
+ QCOMPARE(array.toContainer(), (QList<jdouble>{3.0, 2.0, 1.0}));
+
+ QJniArray<jdouble> newArray = {3.0, 2.0, 1.0};
+ QVERIFY(newArray.isValid());
+ const auto reverse = testClass.callMethod<jdouble[]>("reverseDoubleArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.toContainer(), (QList<jdouble>{1.0, 2.0, 3.0}));
}
}
@@ -1348,6 +1852,7 @@ void tst_QJniObject::templateApiCheck()
void tst_QJniObject::isClassAvailable()
{
QVERIFY(QJniObject::isClassAvailable("java/lang/String"));
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("java.lang.ClassNotFoundException"));
QVERIFY(!QJniObject::isClassAvailable("class/not/Available"));
QVERIFY(QJniObject::isClassAvailable("org/qtproject/qt/android/QtActivityDelegate"));
}
@@ -1360,6 +1865,244 @@ void tst_QJniObject::fromLocalRef()
QJniObject o = QJniObject::fromLocalRef(env->FindClass("java/lang/String"));
}
+void tst_QJniObject::largeObjectArray()
+{
+ QJniArray<jobject> newArray(QList<QJniObject>{QJniObject::fromString(u"one"_s),
+ QJniObject::fromString(u"two"_s),
+ QJniObject::fromString(u"three"_s)});
+ QVERIFY(newArray.isValid());
+ const QJniArray<QJniObject> reverse = TestClass::callStaticMethod<jobject[]>(
+ "staticReverseObjectArray", newArray);
+ QVERIFY(reverse.isValid());
+ QCOMPARE(reverse.size(), 3);
+
+ // make sure we don't leak local references
+ for (int i = 0; i < 10000; ++i) {
+ QVERIFY(reverse.at(0).isValid());
+ QVERIFY(reverse.at(1).isValid());
+ QVERIFY(reverse.at(2).isValid());
+ }
+}
+
+enum class CallbackParameterType
+{
+ Object,
+ ObjectRef,
+ String,
+ Byte,
+ Boolean,
+ Int,
+ Double,
+ JniArray,
+ QList,
+ QStringList,
+};
+
+static std::optional<TestClass> calledWithObject;
+static int callbackWithObject(JNIEnv *, jobject, TestClass that)
+{
+ calledWithObject.emplace(that);
+ return int(CallbackParameterType::Object);
+}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackWithObject)
+static int callbackWithObjectRef(JNIEnv *, jobject, const TestClass &that)
+{
+ calledWithObject.emplace(that);
+ return int(CallbackParameterType::ObjectRef);
+}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackWithObjectRef)
+
+static std::optional<QString> calledWithString;
+static int callbackWithString(JNIEnv *, jobject, const QString &string)
+{
+ calledWithString.emplace(string);
+ return int(CallbackParameterType::String);
+}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackWithString)
+
+static std::optional<jbyte> calledWithByte;
+static int callbackWithByte(JNIEnv *, jobject, jbyte value)
+{
+ calledWithByte.emplace(value);
+ return int(CallbackParameterType::Byte);
+}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackWithByte)
+
+static std::optional<jbyte> calledWithBoolean;
+static int callbackWithBoolean(JNIEnv *, jobject, bool value)
+{
+ calledWithBoolean.emplace(value);
+ return int(CallbackParameterType::Boolean);
+}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackWithBoolean)
+
+static std::optional<int> calledWithInt;
+static int callbackWithInt(JNIEnv *, jobject, int value)
+{
+ calledWithInt.emplace(value);
+ return int(CallbackParameterType::Int);
+}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackWithInt)
+
+static std::optional<double> calledWithDouble;
+static int callbackWithDouble(JNIEnv *, jobject, double value)
+{
+ calledWithDouble.emplace(value);
+ return int(CallbackParameterType::Double);
+}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackWithDouble)
+
+static std::optional<QJniArray<jdouble>> calledWithJniArray;
+static int callbackWithJniArray(JNIEnv *, jobject, const QJniArray<jdouble> &value)
+{
+ calledWithJniArray.emplace(value);
+ return int(CallbackParameterType::JniArray);
+}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackWithJniArray)
+
+static std::optional<QList<double>> calledWithQList;
+static int callbackWithQList(JNIEnv *, jobject, const QList<double> &value)
+{
+ calledWithQList.emplace(value);
+ return int(CallbackParameterType::QList);
+}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackWithQList)
+
+static std::optional<QStringList> calledWithStringList;
+static int callbackWithStringList(JNIEnv *, jobject, const QStringList &value)
+{
+ calledWithStringList.emplace(value);
+ return int(CallbackParameterType::QStringList);
+}
+Q_DECLARE_JNI_NATIVE_METHOD(callbackWithStringList)
+
+void tst_QJniObject::callback_data()
+{
+ QTest::addColumn<CallbackParameterType>("parameterType");
+
+ QTest::addRow("Object") << CallbackParameterType::Object;
+ QTest::addRow("ObjectRef") << CallbackParameterType::ObjectRef;
+ QTest::addRow("String") << CallbackParameterType::String;
+ QTest::addRow("Byte") << CallbackParameterType::Byte;
+ QTest::addRow("Boolean") << CallbackParameterType::Boolean;
+ QTest::addRow("Int") << CallbackParameterType::Int;
+ QTest::addRow("Double") << CallbackParameterType::Double;
+ QTest::addRow("JniArray") << CallbackParameterType::JniArray;
+ QTest::addRow("QList") << CallbackParameterType::QList;
+ QTest::addRow("QStringList") << CallbackParameterType::QStringList;
+}
+
+void tst_QJniObject::callback()
+{
+ QFETCH(const CallbackParameterType, parameterType);
+
+ TestClass testObject;
+ int result = -1;
+
+ switch (parameterType) {
+ case CallbackParameterType::Object:
+ QVERIFY(TestClass::registerNativeMethods({
+ Q_JNI_NATIVE_METHOD(callbackWithObject)
+ }));
+ result = testObject.callMethod<int>("callMeBackWithObject", testObject);
+ QVERIFY(calledWithObject);
+ QCOMPARE(calledWithObject.value(), testObject);
+ break;
+ case CallbackParameterType::ObjectRef:
+ QVERIFY(TestClass::registerNativeMethods({
+ Q_JNI_NATIVE_METHOD(callbackWithObjectRef)
+ }));
+ result = testObject.callMethod<int>("callMeBackWithObjectRef", testObject);
+ QVERIFY(calledWithObject);
+ QCOMPARE(calledWithObject.value(), testObject);
+ break;
+ case CallbackParameterType::String:
+ QVERIFY(TestClass::registerNativeMethods({
+ Q_JNI_NATIVE_METHOD(callbackWithString)
+ }));
+ result = testObject.callMethod<int>("callMeBackWithString", QString::number(123));
+ QVERIFY(calledWithString);
+ QCOMPARE(calledWithString.value(), "123");
+ break;
+ case CallbackParameterType::Byte:
+ QVERIFY(TestClass::registerNativeMethods({
+ Q_JNI_NATIVE_METHOD(callbackWithByte)
+ }));
+ result = testObject.callMethod<int>("callMeBackWithByte", jbyte(123));
+ QVERIFY(calledWithByte);
+ QCOMPARE(calledWithByte.value(), 123);
+ break;
+ case CallbackParameterType::Boolean:
+ QVERIFY(TestClass::registerNativeMethods({
+ Q_JNI_NATIVE_METHOD(callbackWithBoolean)
+ }));
+ result = testObject.callMethod<int>("callMeBackWithBoolean", true);
+ QVERIFY(calledWithBoolean);
+ QCOMPARE(calledWithBoolean.value(), true);
+ break;
+ case CallbackParameterType::Int:
+ QVERIFY(TestClass::registerNativeMethods({
+ Q_JNI_NATIVE_METHOD(callbackWithInt)
+ }));
+ result = testObject.callMethod<int>("callMeBackWithInt", 12345);
+ QVERIFY(calledWithInt);
+ QCOMPARE(calledWithInt.value(), 12345);
+ break;
+ case CallbackParameterType::Double:
+ QVERIFY(TestClass::registerNativeMethods({
+ Q_JNI_NATIVE_METHOD(callbackWithDouble)
+ }));
+ result = testObject.callMethod<int>("callMeBackWithDouble", 1.2345);
+ QVERIFY(calledWithDouble);
+ QCOMPARE(calledWithDouble.value(), 1.2345);
+ break;
+ case CallbackParameterType::JniArray: {
+ QVERIFY(TestClass::registerNativeMethods({
+ Q_JNI_NATIVE_METHOD(callbackWithJniArray)
+ }));
+ const QJniArray<double> doubles = { 1.2, 3.4, 5.6 };
+ result = testObject.callMethod<int>("callMeBackWithJniArray", doubles);
+ QVERIFY(calledWithJniArray);
+ QCOMPARE(calledWithJniArray, doubles);
+ break;
+ }
+ case CallbackParameterType::QList: {
+ QVERIFY(TestClass::registerNativeMethods({
+ Q_JNI_NATIVE_METHOD(callbackWithQList)
+ }));
+ const QList<double> doubles = { 1.2, 3.4, 5.6 };
+ result = testObject.callMethod<int>("callMeBackWithQList", doubles);
+ QVERIFY(calledWithQList);
+ QCOMPARE(calledWithQList.value(), doubles);
+ break;
+ }
+ case CallbackParameterType::QStringList: {
+ QVERIFY(TestClass::registerNativeMethods({
+ Q_JNI_NATIVE_METHOD(callbackWithStringList)
+ }));
+ const QStringList strings = { "one", "two" };
+ result = testObject.callMethod<int>("callMeBackWithStringList", strings);
+ QVERIFY(calledWithStringList);
+ QCOMPARE(calledWithStringList.value(), strings);
+ break;
+ }
+ }
+ QCOMPARE(result, int(parameterType));
+}
+
+// Make sure the new callStaticMethod overload taking a class, return type,
+// and argument as template parameters, doesn't break overload resolution
+// and that the class name doesn't get interpreted as the function name.
+void tst_QJniObject::callStaticOverloadResolution()
+{
+ const QString value = u"Hello World"_s;
+ QJniObject str = QJniObject::fromString(value);
+ const auto result = QJniObject::callStaticMethod<jstring, jstring>(
+ QtJniTypes::Traits<TestClass>::className(),
+ "staticEchoMethod", str.object<jstring>()).toString();
+ QCOMPARE(result, value);
+}
+
QTEST_MAIN(tst_QJniObject)
#include "tst_qjniobject.moc"
diff --git a/tests/auto/corelib/kernel/qjnitypes/CMakeLists.txt b/tests/auto/corelib/kernel/qjnitypes/CMakeLists.txt
new file mode 100644
index 0000000000..104b039d4d
--- /dev/null
+++ b/tests/auto/corelib/kernel/qjnitypes/CMakeLists.txt
@@ -0,0 +1,13 @@
+# 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_qjnitypes LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qjnitypes
+ SOURCES
+ tst_qjnitypes.cpp
+)
diff --git a/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp b/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp
new file mode 100644
index 0000000000..bf582041f3
--- /dev/null
+++ b/tests/auto/corelib/kernel/qjnitypes/tst_qjnitypes.cpp
@@ -0,0 +1,284 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtTest>
+
+#include <QtCore/qjnitypes.h>
+#include <QtCore/qjniarray.h>
+
+using namespace Qt::StringLiterals;
+
+class tst_QJniTypes : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QJniTypes() = default;
+
+ static void nativeClassMethod(JNIEnv *, jclass, int);
+ Q_DECLARE_JNI_NATIVE_METHOD_IN_CURRENT_SCOPE(nativeClassMethod);
+
+private slots:
+ void initTestCase();
+ void nativeMethod();
+ void construct();
+ void stringTypeCantBeArgument();
+};
+
+struct QtJavaWrapper {};
+template<>
+struct QtJniTypes::Traits<QtJavaWrapper>
+{
+ static constexpr auto signature()
+ {
+ return QtJniTypes::CTString("Lorg/qtproject/qt/android/QtJavaWrapper;");
+ }
+};
+
+template<>
+struct QtJniTypes::Traits<QJniObject>
+{
+ static constexpr auto signature()
+ {
+ return QtJniTypes::CTString("Ljava/lang/Object;");
+ }
+};
+
+struct QtCustomJniObject : QJniObject {};
+
+template<>
+struct QtJniTypes::Traits<QtCustomJniObject>
+{
+ static constexpr auto signature()
+ {
+ return QtJniTypes::CTString("Lorg/qtproject/qt/android/QtCustomJniObject;");
+ }
+};
+
+static_assert(QtJniTypes::Traits<QtJavaWrapper>::signature() == "Lorg/qtproject/qt/android/QtJavaWrapper;");
+static_assert(QtJniTypes::Traits<QtJavaWrapper>::signature() != "Ljava/lang/Object;");
+static_assert(!(QtJniTypes::Traits<QtJavaWrapper>::signature() == "X"));
+
+Q_DECLARE_JNI_CLASS(JavaType, "org/qtproject/qt/JavaType");
+static_assert(QtJniTypes::Traits<QtJniTypes::JavaType>::signature() == "Lorg/qtproject/qt/JavaType;");
+static_assert(QtJniTypes::Traits<QtJniTypes::JavaType[]>::signature() == "[Lorg/qtproject/qt/JavaType;");
+
+Q_DECLARE_JNI_CLASS(String, "java/lang/String");
+static_assert(QtJniTypes::Traits<jstring>::className() == "java/lang/String");
+static_assert(QtJniTypes::Traits<QtJniTypes::String>::className() == "java/lang/String");
+static_assert(QtJniTypes::Traits<QtJniTypes::String>::signature() == "Ljava/lang/String;");
+static_assert(QtJniTypes::Traits<QtJniTypes::String[]>::signature() == "[Ljava/lang/String;");
+
+Q_DECLARE_JNI_CLASS(QtTextToSpeech, "org/qtproject/qt/android/speech/QtTextToSpeech")
+static_assert(QtJniTypes::Traits<QtJniTypes::QtTextToSpeech>::className() == "org/qtproject/qt/android/speech/QtTextToSpeech");
+
+static_assert(QtJniTypes::fieldSignature<jint>() == "I");
+static_assert(QtJniTypes::fieldSignature<jint[]>() == "[I");
+static_assert(QtJniTypes::fieldSignature<jint>() != "X");
+static_assert(QtJniTypes::fieldSignature<jint>() != "Ljava/lang/Object;");
+static_assert(QtJniTypes::fieldSignature<jlong>() == "J");
+static_assert(QtJniTypes::fieldSignature<jstring>() == "Ljava/lang/String;");
+static_assert(QtJniTypes::fieldSignature<jobject>() == "Ljava/lang/Object;");
+static_assert(QtJniTypes::fieldSignature<jobject[]>() == "[Ljava/lang/Object;");
+static_assert(QtJniTypes::fieldSignature<jobjectArray>() == "[Ljava/lang/Object;");
+static_assert(QtJniTypes::fieldSignature<QJniObject>() == "Ljava/lang/Object;");
+static_assert(QtJniTypes::fieldSignature<QtJavaWrapper>() == "Lorg/qtproject/qt/android/QtJavaWrapper;");
+static_assert(QtJniTypes::fieldSignature<QtJavaWrapper[]>() == "[Lorg/qtproject/qt/android/QtJavaWrapper;");
+static_assert(QtJniTypes::fieldSignature<QtCustomJniObject>() == "Lorg/qtproject/qt/android/QtCustomJniObject;");
+
+static_assert(QtJniTypes::methodSignature<void>() == "()V");
+static_assert(QtJniTypes::methodSignature<void>() != "()X");
+static_assert(QtJniTypes::methodSignature<void, jint>() == "(I)V");
+static_assert(QtJniTypes::methodSignature<void, jint, jstring>() == "(ILjava/lang/String;)V");
+static_assert(QtJniTypes::methodSignature<jlong, jint, jclass>() == "(ILjava/lang/Class;)J");
+static_assert(QtJniTypes::methodSignature<jobject, jint, jstring>() == "(ILjava/lang/String;)Ljava/lang/Object;");
+static_assert(QtJniTypes::methodSignature<QtJniTypes::JavaType, jint, jstring>()
+ == "(ILjava/lang/String;)Lorg/qtproject/qt/JavaType;");
+
+static_assert(QtJniTypes::isPrimitiveType<jint>());
+static_assert(QtJniTypes::isPrimitiveType<void>());
+static_assert(!QtJniTypes::isPrimitiveType<jobject>());
+static_assert(!QtJniTypes::isPrimitiveType<QtCustomJniObject>());
+
+static_assert(!QtJniTypes::isObjectType<jint>());
+static_assert(!QtJniTypes::isObjectType<void>());
+static_assert(QtJniTypes::isObjectType<jobject>());
+static_assert(QtJniTypes::isObjectType<jobjectArray>());
+static_assert(QtJniTypes::isObjectType<QtCustomJniObject>());
+
+static_assert(!QtJniTypes::isArrayType<jint>());
+static_assert(QtJniTypes::isArrayType<jint[]>());
+static_assert(QtJniTypes::isArrayType<jobject[]>());
+static_assert(QtJniTypes::isArrayType<jobjectArray>());
+static_assert(QtJniTypes::isArrayType<QtJavaWrapper[]>());
+
+static_assert(QtJniTypes::CTString("ABCDE").startsWith("ABC"));
+static_assert(QtJniTypes::CTString("ABCDE").startsWith("A"));
+static_assert(QtJniTypes::CTString("ABCDE").startsWith("ABCDE"));
+static_assert(!QtJniTypes::CTString("ABCDE").startsWith("ABCDEF"));
+static_assert(!QtJniTypes::CTString("ABCDE").startsWith("9AB"));
+static_assert(QtJniTypes::CTString("ABCDE").startsWith('A'));
+static_assert(!QtJniTypes::CTString("ABCDE").startsWith('B'));
+
+static_assert(QtJniTypes::Traits<QJniArray<jobject>>::signature() == "[Ljava/lang/Object;");
+static_assert(QtJniTypes::Traits<QJniArray<jbyte>>::signature() == "[B");
+static_assert(QtJniTypes::isObjectType<QJniArray<jbyte>>());
+
+static_assert(QtJniTypes::CTString("ABCDE").endsWith("CDE"));
+static_assert(QtJniTypes::CTString("ABCDE").endsWith("E"));
+static_assert(QtJniTypes::CTString("ABCDE").endsWith("ABCDE"));
+static_assert(!QtJniTypes::CTString("ABCDE").endsWith("DEF"));
+static_assert(!QtJniTypes::CTString("ABCDE").endsWith("ABCDEF"));
+static_assert(QtJniTypes::CTString("ABCDE").endsWith('E'));
+static_assert(!QtJniTypes::CTString("ABCDE").endsWith('F'));
+
+enum UnscopedEnum {};
+enum class ScopedEnum {};
+enum class IntEnum : int {};
+enum class UnsignedEnum : unsigned {};
+enum class Int8Enum : int8_t {};
+enum class ShortEnum : short {};
+enum class LongEnum : quint64 {};
+enum class JIntEnum : jint {};
+
+static_assert(QtJniTypes::Traits<UnscopedEnum>::signature() == "I");
+static_assert(QtJniTypes::Traits<ScopedEnum>::signature() == "I");
+static_assert(QtJniTypes::Traits<IntEnum>::signature() == "I");
+static_assert(QtJniTypes::Traits<UnsignedEnum>::signature() == "I");
+static_assert(QtJniTypes::Traits<Int8Enum>::signature() == "B");
+static_assert(QtJniTypes::Traits<LongEnum>::signature() == "J");
+static_assert(QtJniTypes::Traits<JIntEnum>::signature() == "I");
+
+void tst_QJniTypes::initTestCase()
+{
+
+}
+
+static bool nativeFunction(JNIEnv *, jclass, int, jstring, quint64)
+{
+ return true;
+}
+Q_DECLARE_JNI_NATIVE_METHOD(nativeFunction)
+
+static_assert(QtJniTypes::nativeMethodSignature(nativeFunction) == "(ILjava/lang/String;J)Z");
+
+static QString nativeFunctionStrings(JNIEnv *, jclass, const QString &, const QtJniTypes::String &)
+{
+ return QString();
+}
+Q_DECLARE_JNI_NATIVE_METHOD(nativeFunctionStrings)
+
+static_assert(QtJniTypes::nativeMethodSignature(nativeFunctionStrings)
+ == "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;");
+
+static int forwardDeclaredNativeFunction(JNIEnv *, jobject, bool);
+Q_DECLARE_JNI_NATIVE_METHOD(forwardDeclaredNativeFunction)
+static int forwardDeclaredNativeFunction(JNIEnv *, jobject, bool) { return 0; }
+static_assert(QtJniTypes::nativeMethodSignature(forwardDeclaredNativeFunction) == "(Z)I");
+
+static_assert(QtJniTypes::nativeMethodSignature(tst_QJniTypes::nativeClassMethod) == "(I)V");
+void tst_QJniTypes::nativeClassMethod(JNIEnv *, jclass, int) {}
+
+void tst_QJniTypes::nativeMethod()
+{
+ {
+ const auto method = Q_JNI_NATIVE_METHOD(nativeFunction);
+ QVERIFY(method.fnPtr == QtJniMethods::va_nativeFunction);
+ QCOMPARE(method.name, "nativeFunction");
+ QCOMPARE(method.signature, "(ILjava/lang/String;J)Z");
+ }
+
+ {
+ const auto method = Q_JNI_NATIVE_METHOD(forwardDeclaredNativeFunction);
+ QVERIFY(method.fnPtr == QtJniMethods::va_forwardDeclaredNativeFunction);
+ }
+
+ {
+ const auto method = Q_JNI_NATIVE_SCOPED_METHOD(nativeClassMethod, tst_QJniTypes);
+ QVERIFY(method.fnPtr == va_nativeClassMethod);
+ }
+}
+
+void tst_QJniTypes::construct()
+{
+ using namespace QtJniTypes;
+
+ const QString text = u"Java String"_s;
+ String str(text);
+ QVERIFY(str.isValid());
+ QCOMPARE(str.toString(), text);
+
+ jobject jref = nullptr; // must be jobject, not jstring
+ {
+ // if jref would be a jstring, then this would call the
+ // Java String copy constructor!
+ String jstr(jref);
+ QVERIFY(!jstr.isValid());
+ }
+ jref = str.object<jstring>();
+ {
+ String jstr(jref);
+ QVERIFY(jstr.isValid());
+ QCOMPARE(jstr.toString(), text);
+ }
+
+ String str2 = str;
+ QCOMPARE(str.toString(), text);
+ String str3 = std::move(str2);
+ QCOMPARE(str3.toString(), text);
+}
+
+template <typename ...Arg>
+static constexpr bool isValidArgument(Arg &&...) noexcept
+{
+ return QtJniTypes::ValidSignatureTypesDetail<q20::remove_cvref_t<Arg>...>;
+}
+
+enum class Overload
+{
+ ClassNameAndMethod,
+ OnlyMethod,
+};
+
+template <typename Ret, typename ...Args
+#ifndef Q_QDOC
+ , QtJniTypes::IfValidSignatureTypes<Ret, Args...> = true
+#endif
+>
+static constexpr auto callStaticMethod(const char *className, const char *methodName, Args &&...)
+{
+ Q_UNUSED(className);
+ Q_UNUSED(methodName);
+ return Overload::ClassNameAndMethod;
+}
+
+template <typename Klass, typename Ret, typename ...Args
+#ifndef Q_QDOC
+ , QtJniTypes::IfValidSignatureTypes<Ret, Args...> = true
+#endif
+>
+static constexpr auto callStaticMethod(const char *methodName, Args &&...)
+{
+ Q_UNUSED(methodName);
+ return Overload::OnlyMethod;
+}
+
+void tst_QJniTypes::stringTypeCantBeArgument()
+{
+ const char *methodName = "staticEchoMethod";
+
+ static_assert(!isValidArgument(QtJniTypes::Traits<QtJniTypes::JavaType>::className()));
+ static_assert(!isValidArgument("someFunctionName"));
+ static_assert(!isValidArgument(methodName));
+ static_assert(!isValidArgument(QtJniTypes::Traits<QtJniTypes::JavaType>::className(),
+ "someFunctionName", methodName, 42));
+
+ static_assert(callStaticMethod<jstring, jint>("class name", "method name", 42)
+ == Overload::ClassNameAndMethod);
+ static_assert(callStaticMethod<QtJniTypes::JavaType, jint>("method name", 42)
+ == Overload::OnlyMethod);
+}
+
+QTEST_MAIN(tst_QJniTypes)
+
+#include "tst_qjnitypes.moc"
diff --git a/tests/auto/corelib/kernel/qmath/CMakeLists.txt b/tests/auto/corelib/kernel/qmath/CMakeLists.txt
index 7a6d4bd688..39a5a8b6df 100644
--- a/tests/auto/corelib/kernel/qmath/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qmath/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qmath.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmath Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmath LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmath
SOURCES
tst_qmath.cpp
diff --git a/tests/auto/corelib/kernel/qmath/tst_qmath.cpp b/tests/auto/corelib/kernel/qmath/tst_qmath.cpp
index a94b984d47..1961b71d83 100644
--- a/tests/auto/corelib/kernel/qmath/tst_qmath.cpp
+++ b/tests/auto/corelib/kernel/qmath/tst_qmath.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2013 Laszlo Papp <lpapp@kde.org>
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2013 Laszlo Papp <lpapp@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qmath.h>
@@ -290,9 +265,6 @@ void tst_QMath::qNextPowerOfTwo32S_data()
QTest::newRow("2^30") << (1 << 30) << (1U << 31);
QTest::newRow("2^30 + 1") << (1 << 30) + 1 << (1U << 31);
QTest::newRow("2^31 - 1") << 0x7FFFFFFF << (1U<<31);
- QTest::newRow("-1") << -1 << 0U;
- QTest::newRow("-128") << -128 << 0U;
- QTest::newRow("-(2^31)") << int(0x80000000) << 0U;
}
void tst_QMath::qNextPowerOfTwo32S()
@@ -318,8 +290,6 @@ void tst_QMath::qNextPowerOfTwo32U_data()
QTest::newRow("2^30") << (1U << 30) << (1U << 31);
QTest::newRow("2^30 + 1") << (1U << 30) + 1 << (1U << 31);
QTest::newRow("2^31 - 1") << 2147483647U << 2147483648U;
- QTest::newRow("2^31") << 2147483648U << 0U;
- QTest::newRow("2^31 + 1") << 2147483649U << 0U;
}
void tst_QMath::qNextPowerOfTwo32U()
@@ -346,10 +316,6 @@ void tst_QMath::qNextPowerOfTwo64S_data()
QTest::newRow("2^31") << Q_INT64_C(2147483648) << Q_UINT64_C(0x100000000);
QTest::newRow("2^31 + 1") << Q_INT64_C(2147483649) << Q_UINT64_C(0x100000000);
QTest::newRow("2^63 - 1") << Q_INT64_C(0x7FFFFFFFFFFFFFFF) << Q_UINT64_C(0x8000000000000000);
- QTest::newRow("-1") << Q_INT64_C(-1) << Q_UINT64_C(0);
- QTest::newRow("-128") << Q_INT64_C(-128) << Q_UINT64_C(0);
- QTest::newRow("-(2^31)") << -Q_INT64_C(0x80000000) << Q_UINT64_C(0);
- QTest::newRow("-(2^63)") << (qint64)Q_INT64_C(0x8000000000000000) << Q_UINT64_C(0);
}
void tst_QMath::qNextPowerOfTwo64S()
@@ -373,8 +339,6 @@ void tst_QMath::qNextPowerOfTwo64U_data()
QTest::newRow("65535") << Q_UINT64_C(65535) << Q_UINT64_C(65536);
QTest::newRow("65536") << Q_UINT64_C(65536) << Q_UINT64_C(131072);
QTest::newRow("2^63 - 1") << Q_UINT64_C(0x7FFFFFFFFFFFFFFF) << Q_UINT64_C(0x8000000000000000);
- QTest::newRow("2^63") << Q_UINT64_C(0x8000000000000000) << Q_UINT64_C(0);
- QTest::newRow("2^63 + 1") << Q_UINT64_C(0x8000000000000001) << Q_UINT64_C(0);
}
void tst_QMath::qNextPowerOfTwo64U()
diff --git a/tests/auto/corelib/kernel/qmetacontainer/CMakeLists.txt b/tests/auto/corelib/kernel/qmetacontainer/CMakeLists.txt
index 79bb6a9324..a9ebcdf72f 100644
--- a/tests/auto/corelib/kernel/qmetacontainer/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qmetacontainer/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qmetacontainer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmetacontainer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmetacontainer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmetacontainer
SOURCES
tst_qmetacontainer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/kernel/qmetacontainer/tst_qmetacontainer.cpp b/tests/auto/corelib/kernel/qmetacontainer/tst_qmetacontainer.cpp
index f2e0328ddc..dff2176a11 100644
--- a/tests/auto/corelib/kernel/qmetacontainer/tst_qmetacontainer.cpp
+++ b/tests/auto/corelib/kernel/qmetacontainer/tst_qmetacontainer.cpp
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** 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 <QtTest/qtest.h>
#include <QtCore/qcontainerinfo.h>
#include <QtCore/qmetacontainer.h>
+#include <QtCore/QMap>
+#include <QtCore/QHash>
#include <QtCore/qvector.h>
#include <QtCore/qset.h>
@@ -520,6 +497,10 @@ void tst_QMetaContainer::testSequence()
QVERIFY(metaSequence.compareConstIterator(constIt, constEnd));
metaSequence.destroyConstIterator(constIt);
metaSequence.destroyConstIterator(constEnd);
+
+ QVERIFY(metaSequence.iface() != nullptr);
+ QMetaSequence defaultConstructed;
+ QVERIFY(defaultConstructed.iface() == nullptr);
}
void tst_QMetaContainer::testAssociation_data()
@@ -745,6 +726,10 @@ void tst_QMetaContainer::testAssociation()
QVERIFY(metaAssociation.compareConstIterator(constIt, constEnd));
metaAssociation.destroyConstIterator(constIt);
metaAssociation.destroyConstIterator(constEnd);
+
+ QVERIFY(metaAssociation.iface() != nullptr);
+ QMetaSequence defaultConstructed;
+ QVERIFY(defaultConstructed.iface() == nullptr);
}
QTEST_MAIN(tst_QMetaContainer)
diff --git a/tests/auto/corelib/kernel/qmetaenum/CMakeLists.txt b/tests/auto/corelib/kernel/qmetaenum/CMakeLists.txt
index daee210588..46f3ece069 100644
--- a/tests/auto/corelib/kernel/qmetaenum/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qmetaenum/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qmetaenum.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmetaenum Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmetaenum LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmetaenum
SOURCES
tst_qmetaenum.cpp
diff --git a/tests/auto/corelib/kernel/qmetaenum/tst_qmetaenum.cpp b/tests/auto/corelib/kernel/qmetaenum/tst_qmetaenum.cpp
index 92a75ba8ed..3d958a78fe 100644
--- a/tests/auto/corelib/kernel/qmetaenum/tst_qmetaenum.cpp
+++ b/tests/auto/corelib/kernel/qmetaenum/tst_qmetaenum.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 Olivier Goffart <ogoffart@woboq.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) 2015 Olivier Goffart <ogoffart@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -98,6 +73,9 @@ void tst_QMetaEnum::valuesToKeys()
QMetaEnum me = QMetaEnum::fromType<Qt::WindowFlags>();
QCOMPARE(me.valueToKeys(windowFlags), expected);
+ bool ok = false;
+ QCOMPARE(uint(me.keysToValue(expected, &ok)), windowFlags.toInt());
+ QVERIFY(ok);
}
void tst_QMetaEnum::defaultConstructed()
diff --git a/tests/auto/corelib/kernel/qmetamethod/CMakeLists.txt b/tests/auto/corelib/kernel/qmetamethod/CMakeLists.txt
index 6ab3f143ac..29a6e3c64b 100644
--- a/tests/auto/corelib/kernel/qmetamethod/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qmetamethod/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qmetamethod.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmetamethod Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmetamethod LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmetamethod
SOURCES
tst_qmetamethod.cpp
diff --git a/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp b/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp
index c1e88f3159..47012f9a28 100644
--- a/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp
+++ b/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2014 Olivier Goffart <ogoffart@woboq.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 The Qt Company Ltd.
+// Copyright (C) 2014 Olivier Goffart <ogoffart@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -47,6 +22,7 @@ private slots:
void comparisonOperators();
void fromSignal();
+ void fromSignalOfNullSignalIsInvalid();
void gadget();
void revision();
@@ -57,6 +33,9 @@ private slots:
void parameterTypeName();
void isConst();
+
+ void methodIndexes_data();
+ void methodIndexes();
};
struct CustomType { };
@@ -741,6 +720,12 @@ void tst_QMetaMethod::fromSignal()
#undef FROMSIGNAL_HELPER
}
+void tst_QMetaMethod::fromSignalOfNullSignalIsInvalid()
+{
+ constexpr decltype(&QObject::destroyed) ptr = nullptr;
+ QVERIFY(!QMetaMethod::fromSignal(ptr).isValid());
+}
+
class MyGadget {
Q_GADGET
public:
@@ -887,6 +872,42 @@ void tst_QMetaMethod::isConst()
}
}
+void tst_QMetaMethod::methodIndexes_data()
+{
+ QTest::addColumn<QByteArray>("signature");
+ QTest::addColumn<QMetaMethod::MethodType>("methodType");
+
+ QTest::newRow("constructor1") << QByteArray("MethodTestObject()") << QMetaMethod::Constructor;
+ QTest::newRow("constructor5") << QByteArray("MethodTestObject(CustomUnregisteredType)")
+ << QMetaMethod::Constructor;
+ QTest::newRow("method0") << QByteArray("voidInvokable()") << QMetaMethod::Method;
+ QTest::newRow("method6") << QByteArray("boolInvokable()") << QMetaMethod::Method;
+}
+
+void tst_QMetaMethod::methodIndexes()
+{
+ QFETCH(QByteArray, signature);
+ QFETCH(QMetaMethod::MethodType, methodType);
+
+ const bool isConstructor = methodType == QMetaMethod::Constructor;
+
+ // roundtrip: index = QMetaObject::indexOfConstructor/Method()
+ // <-> method = QMetaObject::constructor/method()
+ // <-> indexThatShouldBeEqualToAboveIndex = QMetaMethod::methodIndex()
+
+ const QMetaObject *mo = &MethodTestObject::staticMetaObject;
+ const int index =
+ isConstructor ? mo->indexOfConstructor(signature) : mo->indexOfMethod(signature);
+ QVERIFY(index != -1);
+
+ QMetaMethod methodFromMetaObject =
+ mo->method(index); // should work on all methods (constructors, signals, ...)
+ const int absoluteMethodIndex =
+ methodFromMetaObject
+ .methodIndex(); // should work on all methods (constructors, signals, ...)
+
+ QCOMPARE(absoluteMethodIndex, index);
+}
QTEST_MAIN(tst_QMetaMethod)
#include "tst_qmetamethod.moc"
diff --git a/tests/auto/corelib/kernel/qmetaobject/CMakeLists.txt b/tests/auto/corelib/kernel/qmetaobject/CMakeLists.txt
index d0736f418d..d17773ada6 100644
--- a/tests/auto/corelib/kernel/qmetaobject/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qmetaobject/CMakeLists.txt
@@ -1,4 +1,18 @@
-# Generated from qmetaobject.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_qmetaobject LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+set(tst_qmetaobject_SOURCES
+ tst_qmetaobject.cpp
+ forwarddeclared.h
+ forwarddeclared.cpp
+)
+
#####################################################################
## tst_qmetaobject Test:
@@ -6,10 +20,17 @@
qt_internal_add_test(tst_qmetaobject
SOURCES
- tst_qmetaobject.cpp
- PUBLIC_LIBRARIES
+ ${tst_qmetaobject_SOURCES}
+ LIBRARIES
Qt::CorePrivate
)
-## Scopes:
-#####################################################################
+qt_internal_add_test(tst_qmetaobject_compat
+ SOURCES
+ ${tst_qmetaobject_SOURCES}
+ DEFINES
+ USE_COMPAT_Q_ARG=1
+ LIBRARIES
+ Qt::CorePrivate
+ NO_BATCH
+)
diff --git a/tests/auto/corelib/kernel/qmetaobject/forwarddeclared.cpp b/tests/auto/corelib/kernel/qmetaobject/forwarddeclared.cpp
new file mode 100644
index 0000000000..c736a63227
--- /dev/null
+++ b/tests/auto/corelib/kernel/qmetaobject/forwarddeclared.cpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2022 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "forwarddeclared.h"
+
+struct MyForwardDeclaredType { };
+static MyForwardDeclaredType t;
+
+const MyForwardDeclaredType &getForwardDeclaredType() noexcept
+{
+ return t;
+}
+
+MyForwardDeclaredType *getForwardDeclaredPointer() noexcept
+{
+ return &t;
+}
diff --git a/tests/auto/corelib/kernel/qmetaobject/forwarddeclared.h b/tests/auto/corelib/kernel/qmetaobject/forwarddeclared.h
new file mode 100644
index 0000000000..a0158f19cd
--- /dev/null
+++ b/tests/auto/corelib/kernel/qmetaobject/forwarddeclared.h
@@ -0,0 +1,12 @@
+// Copyright (C) 2022 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef FORWARDDECLARED_H
+#define FORWARDDECLARED_H
+
+struct MyForwardDeclaredType; // and ONLY forward-declared
+
+const MyForwardDeclaredType &getForwardDeclaredType() noexcept;
+MyForwardDeclaredType *getForwardDeclaredPointer() noexcept;
+
+#endif // FORWARDDECLARED_H
diff --git a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
index f13ffe8354..ee13c32353 100644
--- a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp
+++ b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.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 <QTest>
#include <QSignalSpy>
@@ -37,6 +12,27 @@
Q_DECLARE_METATYPE(const QMetaObject *)
+#include "forwarddeclared.h"
+
+#ifdef USE_COMPAT_Q_ARG
+# define tst_QMetaObject tst_QMetaObject_CompatQArg
+# if QT_VERSION >= QT_VERSION_CHECK(7, 0, 0)
+# error "This is a Qt 6 compatibility check test"
+# endif
+
+# undef Q_ARG
+# undef Q_RETURN_ARG
+# define Q_ARG(type, data) QArgument<type >(#type, data)
+# define Q_RETURN_ARG(type, data) QReturnArgument<type >(#type, data)
+# define Q_NO_ARG , QGenericArgument()
+#else
+// This macro is used to force the overload selection to the compat
+// (non-variadic) code above
+# define Q_NO_ARG
+#endif
+
+using namespace Qt::StringLiterals;
+
struct MyStruct
{
int i;
@@ -240,8 +236,7 @@ namespace MyNamespace {
int m_value2 = 0;
int m_value3 = 0;
};
-}
-
+} // namespace MyNamespace
class tst_QMetaObject : public QObject
{
@@ -290,27 +285,35 @@ public:
QList<QVariant> value4;
QVariantList value5;
+ tst_QMetaObject();
+
private slots:
void connectSlotsByName();
void invokeMetaMember();
+ void invokeMetaMemberNoMacros();
void invokePointer();
void invokeQueuedMetaMember();
+ void invokeQueuedMetaMemberNoMacro();
void invokeQueuedPointer();
void invokeBlockingQueuedMetaMember();
+ void invokeBlockingQueuedMetaMemberNoMacros();
void invokeBlockingQueuedPointer();
void invokeCustomTypes();
void invokeMetaConstructor();
+ void invokeMetaConstructorNoMacro();
void invokeTypedefTypes();
void invokeException();
void invokeQueuedAutoRegister();
+ void invokeFreeFunction();
+ void invokeBind();
void qtMetaObjectInheritance();
void normalizedSignature_data();
void normalizedSignature();
void normalizedType_data();
void normalizedType();
void customPropertyType();
- void checkScope_data();
- void checkScope();
+ void keysToValue_data();
+ void keysToValue(); // Also keyToValue()
void propertyNotify();
void propertyConstant();
void propertyFinal();
@@ -321,6 +324,7 @@ private slots:
void classInfo();
void metaMethod();
+ void metaMethodNoMacro();
void indexOfMethod_data();
void indexOfMethod();
@@ -426,6 +430,11 @@ private slots:
#define FUNCTION(x) "QMetaObject::" x ": "
+tst_QMetaObject::tst_QMetaObject()
+{
+ qRegisterMetaType<qlonglong *>();
+}
+
void tst_QMetaObject::connectSlotsByName()
{
CTestObject obj;
@@ -460,8 +469,6 @@ void tst_QMetaObject::connectSlotsByName()
QCOMPARE(obj2.invokeCount2, 1);
}
-struct MyUnregisteredType { };
-
static int countedStructObjectsCount = 0;
struct CountedStruct
{
@@ -484,6 +491,8 @@ public:
QtTestObject();
QtTestObject(const QString &s) : slotResult(s) {}
Q_INVOKABLE QtTestObject(QObject *parent);
+ Q_INVOKABLE QtTestObject(QObject *parent, int, int);
+ Q_INVOKABLE QtTestObject(QObject *parent, int);
public slots:
void sl0();
@@ -504,17 +513,24 @@ public slots:
const char *sl12();
QList<QString> sl13(QList<QString> l1);
qint64 sl14();
- void testSender();
+ qlonglong *sl15(qlonglong *);
+ MyForwardDeclaredType *sl16(MyForwardDeclaredType *);
- void testReference(QString &str);
+ void sl17(int *i) { *i = 242; }
+
+ void overloadedSlot();
+ void overloadedSlot(int, int);
+ void overloadedSlot(int);
+ void testSender();
+ void testReference(QString &str);
void testLongLong(qint64 ll1, quint64 ll2);
void moveToThread(QThread *t)
{ QObject::moveToThread(t); }
- void slotWithUnregisteredParameterType(MyUnregisteredType);
- void slotWithOneUnregisteredParameterType(QString a1, MyUnregisteredType a2);
+ void slotWithUnregisteredParameterType(const MyForwardDeclaredType &);
+ void slotWithOneUnregisteredParameterType(QString a1, const MyForwardDeclaredType &a2);
CountedStruct throwingSlot(const CountedStruct &, CountedStruct s2) {
#ifndef QT_NO_EXCEPTIONS
@@ -565,6 +581,14 @@ QtTestObject::QtTestObject(QObject *parent)
{
}
+QtTestObject::QtTestObject(QObject *parent, int, int)
+ : QObject(parent)
+{ slotResult = "ii"; }
+
+QtTestObject::QtTestObject(QObject *parent, int)
+ : QObject(parent)
+{ slotResult = "i"; }
+
void QtTestObject::sl0() { slotResult = "sl0"; };
QString QtTestObject::sl1(QString s1) { slotResult = "sl1:" + s1; return "yessir"; }
void QtTestObject::sl2(QString s1, QString s2) { slotResult = "sl2:" + s1 + s2; }
@@ -597,6 +621,27 @@ QList<QString> QtTestObject::sl13(QList<QString> l1)
{ slotResult = "sl13"; return l1; }
qint64 QtTestObject::sl14()
{ slotResult = "sl14"; return Q_INT64_C(123456789)*123456789; }
+qlonglong *QtTestObject::sl15(qlonglong *ptr)
+{ slotResult = "sl15"; return ptr; }
+MyForwardDeclaredType *QtTestObject::sl16(MyForwardDeclaredType *ptr)
+{
+ slotResult = "sl16:";
+ if (ptr) {
+ slotResult += "notnull";
+ return nullptr;
+ }
+ slotResult += "null";
+ return getForwardDeclaredPointer();
+}
+
+void QtTestObject::overloadedSlot()
+{ slotResult = "overloadedSlot"; }
+
+void QtTestObject::overloadedSlot(int x, int y)
+{ slotResult = "overloadedSlot:" + QString::number(x) + ',' + QString::number(y); }
+
+void QtTestObject::overloadedSlot(int x)
+{ slotResult = "overloadedSlot:" + QString::number(x); }
void QtTestObject::testReference(QString &str)
{ slotResult = "testReference:" + str; str = "gotcha"; }
@@ -609,10 +654,10 @@ void QtTestObject::testSender()
slotResult = QString::asprintf("%p", sender());
}
-void QtTestObject::slotWithUnregisteredParameterType(MyUnregisteredType)
+void QtTestObject::slotWithUnregisteredParameterType(const MyForwardDeclaredType &)
{ slotResult = "slotWithUnregisteredReturnType"; }
-void QtTestObject::slotWithOneUnregisteredParameterType(QString a1, MyUnregisteredType)
+void QtTestObject::slotWithOneUnregisteredParameterType(QString a1, const MyForwardDeclaredType &)
{ slotResult = "slotWithUnregisteredReturnType-" + a1; }
void QtTestObject::staticFunction0()
@@ -623,6 +668,7 @@ void QtTestObject::staticFunction0()
qint64 QtTestObject::staticFunction1()
{ staticResult = "staticFunction1"; return Q_INT64_C(123456789)*123456789; }
+// this test is duplicated below
void tst_QMetaObject::invokeMetaMember()
{
QtTestObject obj;
@@ -633,17 +679,17 @@ void tst_QMetaObject::invokeMetaMember()
// Test nullptr
char *nullCharArray = nullptr;
const char *nullConstCharArray = nullptr;
- QVERIFY(!QMetaObject::invokeMethod(nullptr, nullCharArray));
- QVERIFY(!QMetaObject::invokeMethod(nullptr, nullConstCharArray));
- QVERIFY(!QMetaObject::invokeMethod(nullptr, "sl0"));
- QVERIFY(!QMetaObject::invokeMethod(&obj, nullCharArray));
- QVERIFY(!QMetaObject::invokeMethod(&obj, nullConstCharArray));
- QVERIFY(!QMetaObject::invokeMethod(&obj, nullCharArray, Qt::AutoConnection));
- QVERIFY(!QMetaObject::invokeMethod(&obj, nullConstCharArray, Qt::AutoConnection));
+ QVERIFY(!QMetaObject::invokeMethod(nullptr, nullCharArray Q_NO_ARG));
+ QVERIFY(!QMetaObject::invokeMethod(nullptr, nullConstCharArray Q_NO_ARG));
+ QVERIFY(!QMetaObject::invokeMethod(nullptr, "sl0" Q_NO_ARG));
+ QVERIFY(!QMetaObject::invokeMethod(&obj, nullCharArray Q_NO_ARG));
+ QVERIFY(!QMetaObject::invokeMethod(&obj, nullConstCharArray Q_NO_ARG));
+ QVERIFY(!QMetaObject::invokeMethod(&obj, nullCharArray, Qt::AutoConnection Q_NO_ARG));
+ QVERIFY(!QMetaObject::invokeMethod(&obj, nullConstCharArray, Qt::AutoConnection Q_NO_ARG));
QVERIFY(!QMetaObject::invokeMethod(&obj, nullCharArray, Qt::AutoConnection, QGenericReturnArgument()));
QVERIFY(!QMetaObject::invokeMethod(&obj, nullConstCharArray, Qt::AutoConnection, QGenericReturnArgument()));
- QVERIFY(QMetaObject::invokeMethod(&obj, "sl0"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl0" Q_NO_ARG));
QCOMPARE(obj.slotResult, QString("sl0"));
QVERIFY(QMetaObject::invokeMethod(&obj, "sl1", Q_ARG(QString, t1)));
@@ -682,16 +728,23 @@ void tst_QMetaObject::invokeMetaMember()
Q_ARG(QString, t7), Q_ARG(QString, t8), Q_ARG(QString, t9)));
QCOMPARE(obj.slotResult, QString("sl9:123456789"));
- QVERIFY(QMetaObject::invokeMethod(&obj, "sl11"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl11" Q_NO_ARG));
QCOMPARE(obj.slotResult, QString("sl11"));
- QVERIFY(QMetaObject::invokeMethod(&obj, "testSender"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "testSender" Q_NO_ARG));
QCOMPARE(obj.slotResult, QString("0x0"));
QString refStr("whatever");
+#ifdef USE_COMPAT_Q_ARG
QVERIFY(QMetaObject::invokeMethod(&obj, "testReference", QGenericArgument("QString&", &refStr)));
QCOMPARE(obj.slotResult, QString("testReference:whatever"));
QCOMPARE(refStr, QString("gotcha"));
+ obj.slotResult.clear();
+#endif
+ refStr = "whatever";
+ QVERIFY(QMetaObject::invokeMethod(&obj, "testReference", Q_ARG(QString&, refStr)));
+ QCOMPARE(obj.slotResult, QString("testReference:whatever"));
+ QCOMPARE(refStr, QString("gotcha"));
qint64 ll1 = -1;
quint64 ll2 = 0;
@@ -742,8 +795,37 @@ void tst_QMetaObject::invokeMetaMember()
QCOMPARE(return64, Q_INT64_C(123456789)*123456789);
QCOMPARE(obj.slotResult, QString("sl14"));
+ // pointers
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl15", Q_ARG(qlonglong*, &return64)));
+ QCOMPARE(obj.slotResult, QString("sl15"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl16", Q_ARG(MyForwardDeclaredType*, getForwardDeclaredPointer())));
+ QCOMPARE(obj.slotResult, QString("sl16:notnull"));
+
+ obj.slotResult.clear();
+ qint64 *return64Ptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl15", Q_RETURN_ARG(qlonglong*, return64Ptr), Q_ARG(qlonglong*, &return64)));
+ QCOMPARE(return64Ptr, &return64);
+ QCOMPARE(obj.slotResult, QString("sl15"));
+
+ obj.slotResult.clear();
+ MyForwardDeclaredType *forwardPtr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl16", Q_RETURN_ARG(MyForwardDeclaredType*, forwardPtr),
+ Q_ARG(MyForwardDeclaredType*, nullptr)));
+ QCOMPARE(forwardPtr, getForwardDeclaredPointer());
+ QCOMPARE(obj.slotResult, QString("sl16:null"));
+
+#ifndef QT_NO_DATA_RELOCATION // this doesn't work with the new API on Windows
+#endif
+ // test overloads
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot" Q_NO_ARG));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Q_ARG(int, 1)));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Q_ARG(int, 1), Q_ARG(int, 42)));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1,42"));
+
//test signals
- QVERIFY(QMetaObject::invokeMethod(&obj, "sig0"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig0" Q_NO_ARG));
QCOMPARE(obj.slotResult, QString("sl0"));
QVERIFY(QMetaObject::invokeMethod(&obj, "sig1", Q_ARG(QString, "baba")));
@@ -764,6 +846,175 @@ void tst_QMetaObject::invokeMetaMember()
QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::sl1(QString,QString,QString)\n"
"Candidates are:\n sl1(QString)");
QVERIFY(!QMetaObject::invokeMethod(&obj, "sl1", Q_ARG(QString, "arg"), Q_ARG(QString, "arg"), Q_ARG(QString, "arg")));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::testReference(QString)\n"
+ "Candidates are:\n testReference(QString&)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "testReference", Q_ARG(QString, exp)));
+
+ //should not have changed since last test.
+ QCOMPARE(exp, QString("yessir"));
+ QCOMPARE(obj.slotResult, QString("sl1:hehe"));
+}
+
+// this is a copy-paste-adapt of the above
+void tst_QMetaObject::invokeMetaMemberNoMacros()
+{
+ QtTestObject obj;
+
+ QString t1("1"); QString t2("2"); QString t3("3"); QString t4("4"); QString t5("5");
+ QString t6("6"); QString t7("7"); QString t8("8"); QString t9("9"); QString t10("X");
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl0"));
+ QCOMPARE(obj.slotResult, QString("sl0"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl1", t1));
+ QCOMPARE(obj.slotResult, QString("sl1:1"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl2", std::as_const(t1), t2));
+ QCOMPARE(obj.slotResult, QString("sl2:12"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl3", t1, t2, t3));
+ QCOMPARE(obj.slotResult, QString("sl3:123"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl4", t1, t2, t3,
+ t4));
+ QCOMPARE(obj.slotResult, QString("sl4:1234"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl5", t1, t2, t3,
+ t4, QStringLiteral("5")));
+ QCOMPARE(obj.slotResult, QString("sl5:12345"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl6", t1, t2, t3,
+ t4, t5, t6));
+ QCOMPARE(obj.slotResult, QString("sl6:123456"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl7", t1, t2, t3,
+ t4, t5, t6,
+ t7));
+ QCOMPARE(obj.slotResult, QString("sl7:1234567"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl8", t1, t2, t3,
+ t4, t5, t6,
+ t7, t8));
+ QCOMPARE(obj.slotResult, QString("sl8:12345678"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl9", t1, t2, t3,
+ t4, t5, t6,
+ t7, t8, t9));
+ QCOMPARE(obj.slotResult, QString("sl9:123456789"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl11"));
+ QCOMPARE(obj.slotResult, QString("sl11"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "testSender"));
+ QCOMPARE(obj.slotResult, QString("0x0"));
+
+ // this is not working for now
+// QString refStr("whatever");
+// QVERIFY(QMetaObject::invokeMethod(&obj, "testReference", refStr));
+// QCOMPARE(obj.slotResult, QString("testReference:whatever"));
+// QCOMPARE(refStr, QString("gotcha"));
+
+ qint64 ll1 = -1;
+ quint64 ll2 = 0;
+ QVERIFY(QMetaObject::invokeMethod(&obj,
+ "testLongLong",
+ ll1,
+ ll2));
+ QCOMPARE(obj.slotResult, QString("testLongLong:-1,0"));
+
+ QString exp;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl1", qReturnArg(exp), QStringLiteral("bubu")));
+ QCOMPARE(exp, QString("yessir"));
+ QCOMPARE(obj.slotResult, QString("sl1:bubu"));
+
+ QObject *ptr = nullptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl11", qReturnArg(ptr)));
+ QCOMPARE(ptr, (QObject *)&obj);
+ QCOMPARE(obj.slotResult, QString("sl11"));
+ // try again with a space:
+ ptr = nullptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl11", qReturnArg(ptr)));
+ QCOMPARE(ptr, (QObject *)&obj);
+ QCOMPARE(obj.slotResult, QString("sl11"));
+
+ const char *ptr2 = nullptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl12", qReturnArg(ptr2)));
+ QVERIFY(ptr2 != nullptr);
+ QCOMPARE(obj.slotResult, QString("sl12"));
+ // try again with a space:
+ ptr2 = nullptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl12", qReturnArg(ptr2)));
+ QVERIFY(ptr2 != nullptr);
+ QCOMPARE(obj.slotResult, QString("sl12"));
+
+ // test w/ template args
+ QList<QString> returnValue, argument;
+ argument << QString("one") << QString("two") << QString("three");
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl13",
+ qReturnArg(returnValue),
+ argument));
+ QCOMPARE(returnValue, argument);
+ QCOMPARE(obj.slotResult, QString("sl13"));
+
+ // return qint64
+ qint64 return64;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl14",
+ qReturnArg(return64)));
+ QCOMPARE(return64, Q_INT64_C(123456789)*123456789);
+ QCOMPARE(obj.slotResult, QString("sl14"));
+
+ // pointers
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl15", &return64));
+ QCOMPARE(obj.slotResult, QString("sl15"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl16", getForwardDeclaredPointer()));
+ QCOMPARE(obj.slotResult, QString("sl16:notnull"));
+
+ obj.slotResult.clear();
+ qint64 *return64Ptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl15", qReturnArg(return64Ptr), &return64));
+ QCOMPARE(return64Ptr, &return64);
+ QCOMPARE(obj.slotResult, QString("sl15"));
+
+ obj.slotResult.clear();
+ MyForwardDeclaredType *forwardPtr = nullptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl16", qReturnArg(forwardPtr),
+ forwardPtr));
+ QCOMPARE(forwardPtr, getForwardDeclaredPointer());
+ QCOMPARE(obj.slotResult, QString("sl16:null"));
+
+ // test overloads
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot"));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", 1));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", 1, 42));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1,42"));
+
+ //test signals
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig0"));
+ QCOMPARE(obj.slotResult, QString("sl0"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig1", QStringLiteral("baba")));
+ QCOMPARE(obj.slotResult, QString("sl1:baba"));
+
+ exp.clear();
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig1", qReturnArg(exp), QStringLiteral("hehe")));
+ QCOMPARE(exp, QString("yessir"));
+ QCOMPARE(obj.slotResult, QString("sl1:hehe"));
+
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::doesNotExist()");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "doesNotExist"));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::sl1(QString)(QString)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "sl1(QString)", QStringLiteral("arg")));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::sl3(QString)\n"
+ "Candidates are:\n sl3(QString,QString,QString)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "sl3", QStringLiteral("arg")));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::sl1(QString,QString,QString)\n"
+ "Candidates are:\n sl1(QString)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "sl1", QStringLiteral("arg"), QStringLiteral("arg"), QStringLiteral("arg")));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::testReference(QString)\n"
+ "Candidates are:\n testReference(QString&)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "testReference", exp));
//should not have changed since last test.
QCOMPARE(exp, QString("yessir"));
@@ -834,13 +1085,123 @@ void tst_QMetaObject::invokePointer()
QCOMPARE(obj.slotResult, QString("sl1:1"));
}
QCOMPARE(countedStructObjectsCount, 0);
+
+ // Invoking with parameters
+ QString result;
+ QVERIFY(QMetaObject::invokeMethod(&obj, &QtTestObject::sl1, qReturnArg(result), u"bubu"_s));
+ QCOMPARE(obj.slotResult, u"sl1:bubu");
+ QCOMPARE(result, u"yessir");
+
+ // without taking return value
+ QVERIFY(QMetaObject::invokeMethod(&obj, &QtTestObject::sl1, u"bubu"_s));
+ QCOMPARE(obj.slotResult, u"sl1:bubu");
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, &QtTestObject::sl1, Qt::DirectConnection, qReturnArg(result),
+ u"byebye"_s));
+ QCOMPARE(obj.slotResult, u"sl1:byebye");
+ QCOMPARE(result, u"yessir");
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, qOverload<int, int>(&QtTestObject::overloadedSlot), 1, 2));
+ QCOMPARE(obj.slotResult, u"overloadedSlot:1,2");
+
+ // non-const ref parameter
+ QString original = u"bubu"_s;
+ QString &ref = original;
+ QVERIFY(QMetaObject::invokeMethod(&obj, &QtTestObject::sl1, qReturnArg(result), ref));
+ QCOMPARE(obj.slotResult, u"sl1:bubu");
+ QCOMPARE(result, u"yessir");
+
+ struct R {
+ bool operator()(int) { return true; }
+ int operator()(char) { return 15; }
+ int operator()(QString = {}, int = {}, int = {}) { return 242; }
+ } r;
+
+ // Test figuring out which operator() to call:
+ {
+ bool res = false;
+ QVERIFY(QMetaObject::invokeMethod(&obj, r, qReturnArg(res), 1));
+ QCOMPARE(res, true);
+ }
+ {
+ int res;
+ QVERIFY(QMetaObject::invokeMethod(&obj, r, qReturnArg(res), 'c'));
+ QCOMPARE(res, 15);
+ }
+ {
+ int res;
+ QVERIFY(QMetaObject::invokeMethod(&obj, r, qReturnArg(res)));
+ QCOMPARE(res, 242);
+ res = 0;
+ QVERIFY(QMetaObject::invokeMethod(&obj, r, qReturnArg(res), u"bu"_s));
+ QCOMPARE(res, 242);
+ res = 0;
+ QVERIFY(QMetaObject::invokeMethod(&obj, r, qReturnArg(res), u"bu"_s, 1));
+ QCOMPARE(res, 242);
+ res = 0;
+ QVERIFY(QMetaObject::invokeMethod(&obj, r, qReturnArg(res), u"bu"_s, 1, 2));
+ QCOMPARE(res, 242);
+ }
+
+ {
+ auto lambda = [](const QString &s) { return s + s; };
+ QVERIFY(QMetaObject::invokeMethod(&obj, lambda, qReturnArg(result), u"bu"_s));
+ QCOMPARE(result, u"bubu");
+ }
+
+ {
+ auto lambda = [](const QString &s = u"bu"_s) { return s + s; };
+ QVERIFY(QMetaObject::invokeMethod(&obj, lambda, qReturnArg(result)));
+ QCOMPARE(result, u"bubu");
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, lambda, qReturnArg(result), u"bye"_s));
+ QCOMPARE(result, u"byebye");
+ }
+
+ {
+ auto lambda = [](const QString &s, qint64 a, qint16 b, qint8 c) {
+ return s + QString::number(a) + QString::number(b) + QString::number(c);
+ };
+ // Testing mismatching argument (int for qint64). The other arguments
+ // would static_assert for potential truncation if they were ints.
+ QVERIFY(QMetaObject::invokeMethod(&obj, lambda, qReturnArg(result), u"bu"_s, 1, qint16(2), qint8(3)));
+ QCOMPARE(result, u"bu123");
+ }
+ {
+ // Testing deduction
+ auto lambda = [](const QString &s, auto a) { return s + a; };
+ QVERIFY(QMetaObject::invokeMethod(&obj, lambda, qReturnArg(result), u"bu"_s, "bu"_L1));
+ QCOMPARE(result, u"bubu");
+
+ auto variadic = [](const QString &s, auto... a) { return s + (QString::number(a) + ...); };
+ QVERIFY(QMetaObject::invokeMethod(&obj, variadic, qReturnArg(result), u"bu"_s, 1, 2, 3, 4, 5, 6));
+ QCOMPARE(result, u"bu123456");
+ }
+ {
+ // Testing a functor returning void and accepting a pointer,
+ // this may trigger the pointer to be interpreted as the old void*
+ // return parameter.
+ bool invoked = false;
+ auto lambda = [&invoked](void *ptr) -> void {
+ Q_UNUSED(ptr);
+ invoked = true;
+ };
+ int i = 242;
+ QVERIFY(QMetaObject::invokeMethod(&obj, lambda, &i));
+ QVERIFY(invoked);
+
+ // member fn
+ i = 0;
+ QVERIFY(QMetaObject::invokeMethod(&obj, &QtTestObject::sl17, &i));
+ QCOMPARE(i, 242);
+ }
}
void tst_QMetaObject::invokeQueuedMetaMember()
{
QtTestObject obj;
- QVERIFY(QMetaObject::invokeMethod(&obj, "sl0", Qt::QueuedConnection));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl0", Qt::QueuedConnection Q_NO_ARG));
QVERIFY(obj.slotResult.isEmpty());
qApp->processEvents(QEventLoop::AllEvents);
QCOMPARE(obj.slotResult, QString("sl0"));
@@ -860,10 +1221,36 @@ void tst_QMetaObject::invokeQueuedMetaMember()
qApp->processEvents(QEventLoop::AllEvents);
QCOMPARE(obj.slotResult, QString("sl9:123456789"));
+ // pointers
+ qint64 return64;
+ obj.slotResult.clear();
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl15", Qt::QueuedConnection, Q_ARG(qlonglong*, &return64)));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("sl15"));
+
+ // since Qt 6.5, this works even for pointers to forward-declared types
+ obj.slotResult.clear();
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl16", Qt::QueuedConnection, Q_ARG(MyForwardDeclaredType*, getForwardDeclaredPointer())));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("sl16:notnull"));
+
+#ifndef QT_NO_DATA_RELOCATION // this doesn't work with the new API on Windows
+#endif
+ // test overloads
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::QueuedConnection Q_NO_ARG));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("overloadedSlot"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::QueuedConnection, Q_ARG(int, 1)));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::QueuedConnection, Q_ARG(int, 1), Q_ARG(int, 42)));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1,42"));
+
// signals
obj.slotResult.clear();
- QVERIFY(QMetaObject::invokeMethod(&obj, "sig0", Qt::QueuedConnection));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig0", Qt::QueuedConnection Q_NO_ARG));
QVERIFY(obj.slotResult.isEmpty());
qApp->processEvents(QEventLoop::AllEvents);
QCOMPARE(obj.slotResult, QString("sl0"));
@@ -887,23 +1274,142 @@ void tst_QMetaObject::invokeQueuedMetaMember()
qApp->processEvents(QEventLoop::AllEvents);
QCOMPARE(obj.slotResult, QString("testLongLong:-1,0"));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::testReference(QString)\n"
+ "Candidates are:\n testReference(QString&)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "testReference", Qt::QueuedConnection, Q_ARG(QString, exp)));
+
+ QString refStr = "whatever";
+ QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invoke: Unable to handle unregistered datatype 'QString&'");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "testReference", Qt::QueuedConnection, Q_ARG(QString&, refStr)));
+ QCOMPARE(refStr, "whatever");
+
+#ifdef USE_COMPAT_Q_ARG // this doesn't compile with the new API
obj.slotResult.clear();
{
- MyUnregisteredType t;
- QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invoke: Unable to handle unregistered datatype 'MyUnregisteredType'");
- QVERIFY(!QMetaObject::invokeMethod(&obj, "slotWithUnregisteredParameterType", Qt::QueuedConnection, Q_ARG(MyUnregisteredType, t)));
+ const MyForwardDeclaredType &t = getForwardDeclaredType();
+ QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invoke: Unable to handle unregistered datatype 'MyForwardDeclaredType'");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "slotWithUnregisteredParameterType", Qt::QueuedConnection, Q_ARG(MyForwardDeclaredType, t)));
QVERIFY(obj.slotResult.isEmpty());
}
obj.slotResult.clear();
{
QString a1("Cannot happen");
- MyUnregisteredType t;
- QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invoke: Unable to handle unregistered datatype 'MyUnregisteredType'");
+ const MyForwardDeclaredType &t = getForwardDeclaredType();
+ QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invoke: Unable to handle unregistered datatype 'MyForwardDeclaredType'");
QVERIFY(!QMetaObject::invokeMethod(&obj, "slotWithOneUnregisteredParameterType", Qt::QueuedConnection,
- Q_ARG(QString, a1), Q_ARG(MyUnregisteredType, t)));
+ Q_ARG(QString, a1), Q_ARG(MyForwardDeclaredType, t)));
QVERIFY(obj.slotResult.isEmpty());
}
+#endif
+}
+
+// this is a copy-paste-adapt of the above
+void tst_QMetaObject::invokeQueuedMetaMemberNoMacro()
+{
+ QtTestObject obj;
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl0", Qt::QueuedConnection));
+ QVERIFY(obj.slotResult.isEmpty());
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("sl0"));
+ obj.slotResult = QString();
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl1", Qt::QueuedConnection, QString("hallo")));
+ QVERIFY(obj.slotResult.isEmpty());
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("sl1:hallo"));
+ obj.slotResult = QString();
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl9", Qt::QueuedConnection, QStringLiteral("1"), QStringLiteral("2"),
+ QStringLiteral("3"), QStringLiteral("4"), QStringLiteral("5"),
+ QStringLiteral("6"), QStringLiteral("7"), QStringLiteral("8"),
+ QStringLiteral("9")));
+ QVERIFY(obj.slotResult.isEmpty());
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("sl9:123456789"));
+
+ // pointers
+ qint64 return64;
+ obj.slotResult.clear();
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl15", Qt::QueuedConnection, &return64));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("sl15"));
+
+ obj.slotResult.clear();
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl16", Qt::QueuedConnection, getForwardDeclaredPointer()));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("sl16:notnull"));
+
+ // test overloads
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::QueuedConnection));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("overloadedSlot"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::QueuedConnection, 1));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::QueuedConnection, 1, 42));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1,42"));
+
+ // signals
+
+ obj.slotResult.clear();
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig0", Qt::QueuedConnection));
+ QVERIFY(obj.slotResult.isEmpty());
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("sl0"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig1", Qt::QueuedConnection, QStringLiteral("gogo")));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("sl1:gogo"));
+
+ QString exp;
+ QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invoke: Unable to invoke methods with return values in queued connections");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "sig1", Qt::QueuedConnection, qReturnArg(exp),
+ QStringLiteral("nono")));
+
+ qint64 ll1 = -1;
+ quint64 ll2 = 0;
+ QVERIFY(QMetaObject::invokeMethod(&obj,
+ "testLongLong",
+ Qt::QueuedConnection,
+ ll1,
+ ll2));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, QString("testLongLong:-1,0"));
+
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::testReference(QString)\n"
+ "Candidates are:\n testReference(QString&)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "testReference", exp));
+ QCOMPARE(obj.slotResult, QString("testLongLong:-1,0"));
+ QVERIFY(exp.isEmpty());
+
+ // this doesn't work yet
+// QString refStr = "whatever";
+// QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invoke: Unable to handle unregistered datatype 'QString&'");
+// QVERIFY(!QMetaObject::invokeMethod(&obj, "testReference", Qt::QueuedConnection, Q_ARG(QString&, refStr)));
+// QCOMPARE(refStr, "whatever");
+
+#if 0 // this won't even compile any more
+ obj.slotResult.clear();
+ {
+ const MyForwardDeclaredType &t = getForwardDeclaredType();
+ QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invoke: Unable to handle unregistered datatype 'MyForwardDeclaredType'");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "slotWithUnregisteredParameterType", Qt::QueuedConnection, t));
+ QVERIFY(obj.slotResult.isEmpty());
+ }
+
+ obj.slotResult.clear();
+ {
+ QString a1("Cannot happen");
+ const MyForwardDeclaredType &t = getForwardDeclaredType();
+ QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invoke: Unable to handle unregistered datatype 'MyForwardDeclaredType'");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "slotWithOneUnregisteredParameterType", Qt::QueuedConnection,
+ a1, t));
+ QVERIFY(obj.slotResult.isEmpty());
+ }
+#endif
}
void tst_QMetaObject::invokeQueuedPointer()
@@ -953,9 +1459,15 @@ void tst_QMetaObject::invokeQueuedPointer()
QCOMPARE(var, 0);
}
QCOMPARE(countedStructObjectsCount, 0);
-}
+ // Invoking with parameters
+ using namespace Qt::StringLiterals;
+ QVERIFY(QMetaObject::invokeMethod(&obj, &QtTestObject::sl1, Qt::QueuedConnection, u"bubu"_s));
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult, u"sl1:bubu");
+}
+// this test is duplicated below
void tst_QMetaObject::invokeBlockingQueuedMetaMember()
{
QThread t;
@@ -1002,16 +1514,23 @@ void tst_QMetaObject::invokeBlockingQueuedMetaMember()
Q_ARG(QString, t7), Q_ARG(QString, t8), Q_ARG(QString, t9)));
QCOMPARE(obj.slotResult, QString("sl9:123456789"));
- QVERIFY(QMetaObject::invokeMethod(&obj, "sl11", Qt::BlockingQueuedConnection));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl11", Qt::BlockingQueuedConnection Q_NO_ARG));
QCOMPARE(obj.slotResult, QString("sl11"));
- QVERIFY(QMetaObject::invokeMethod(&obj, "testSender", Qt::BlockingQueuedConnection));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "testSender", Qt::BlockingQueuedConnection Q_NO_ARG));
QCOMPARE(obj.slotResult, QString("0x0"));
QString refStr("whatever");
+#ifdef USE_COMPAT_Q_ARG
QVERIFY(QMetaObject::invokeMethod(&obj, "testReference", Qt::BlockingQueuedConnection, QGenericArgument("QString&", &refStr)));
QCOMPARE(obj.slotResult, QString("testReference:whatever"));
QCOMPARE(refStr, QString("gotcha"));
+ obj.slotResult.clear();
+#endif
+ refStr = "whatever";
+ QVERIFY(QMetaObject::invokeMethod(&obj, "testReference", Qt::BlockingQueuedConnection, Q_ARG(QString&, refStr)));
+ QCOMPARE(obj.slotResult, QString("testReference:whatever"));
+ QCOMPARE(refStr, QString("gotcha"));
qint64 ll1 = -1;
quint64 ll2 = 0;
@@ -1056,8 +1575,44 @@ void tst_QMetaObject::invokeBlockingQueuedMetaMember()
QCOMPARE(returnValue, argument);
QCOMPARE(obj.slotResult, QString("sl13"));
+ // return qint64
+ qint64 return64;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl14", Qt::BlockingQueuedConnection,
+ Q_RETURN_ARG(qint64, return64)));
+ QCOMPARE(return64, Q_INT64_C(123456789)*123456789);
+ QCOMPARE(obj.slotResult, QString("sl14"));
+
+ // pointers
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl15", Qt::BlockingQueuedConnection, Q_ARG(qlonglong*, &return64)));
+ QCOMPARE(obj.slotResult, QString("sl15"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl16", Qt::BlockingQueuedConnection, Q_ARG(MyForwardDeclaredType*, getForwardDeclaredPointer())));
+ QCOMPARE(obj.slotResult, QString("sl16:notnull"));
+
+ obj.slotResult.clear();
+ qint64 *return64Ptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl15", Qt::BlockingQueuedConnection, Q_RETURN_ARG(qlonglong*, return64Ptr), Q_ARG(qlonglong*, &return64)));
+ QCOMPARE(return64Ptr, &return64);
+ QCOMPARE(obj.slotResult, QString("sl15"));
+
+ obj.slotResult.clear();
+ MyForwardDeclaredType *forwardPtr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl16", Qt::BlockingQueuedConnection, Q_RETURN_ARG(MyForwardDeclaredType*, forwardPtr),
+ Q_ARG(MyForwardDeclaredType*, nullptr)));
+ QCOMPARE(forwardPtr, getForwardDeclaredPointer());
+ QCOMPARE(obj.slotResult, QString("sl16:null"));
+
+#ifndef QT_NO_DATA_RELOCATION // this doesn't work with the new API on Windows
+#endif
+ // test overloads
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::BlockingQueuedConnection Q_NO_ARG));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::BlockingQueuedConnection, Q_ARG(int, 1)));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::BlockingQueuedConnection, Q_ARG(int, 1), Q_ARG(int, 42)));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1,42"));
+
//test signals
- QVERIFY(QMetaObject::invokeMethod(&obj, "sig0", Qt::BlockingQueuedConnection));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig0", Qt::BlockingQueuedConnection Q_NO_ARG));
QCOMPARE(obj.slotResult, QString("sl0"));
QVERIFY(QMetaObject::invokeMethod(&obj, "sig1", Qt::BlockingQueuedConnection, Q_ARG(QString, "baba")));
@@ -1069,7 +1624,7 @@ void tst_QMetaObject::invokeBlockingQueuedMetaMember()
QCOMPARE(obj.slotResult, QString("sl1:hehe"));
QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::doesNotExist()");
- QVERIFY(!QMetaObject::invokeMethod(&obj, "doesNotExist", Qt::BlockingQueuedConnection));
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "doesNotExist", Qt::BlockingQueuedConnection Q_NO_ARG));
QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::sl1(QString)(QString)");
QVERIFY(!QMetaObject::invokeMethod(&obj, "sl1(QString)", Qt::BlockingQueuedConnection, Q_ARG(QString, "arg")));
QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::sl3(QString)\n"
@@ -1078,6 +1633,9 @@ void tst_QMetaObject::invokeBlockingQueuedMetaMember()
QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::sl1(QString,QString,QString)\n"
"Candidates are:\n sl1(QString)");
QVERIFY(!QMetaObject::invokeMethod(&obj, "sl1", Qt::BlockingQueuedConnection, Q_ARG(QString, "arg"), Q_ARG(QString, "arg"), Q_ARG(QString, "arg")));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::testReference(QString)\n"
+ "Candidates are:\n testReference(QString&)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "testReference", Qt::BlockingQueuedConnection, Q_ARG(QString, exp)));
//should not have changed since last test.
QCOMPARE(exp, QString("yessir"));
@@ -1086,7 +1644,177 @@ void tst_QMetaObject::invokeBlockingQueuedMetaMember()
QVERIFY(QMetaObject::invokeMethod(&obj, "moveToThread", Qt::BlockingQueuedConnection, Q_ARG(QThread*, QThread::currentThread())));
t.quit();
QVERIFY(t.wait());
+}
+
+// this is a copy-paste-adapt of the above
+void tst_QMetaObject::invokeBlockingQueuedMetaMemberNoMacros()
+{
+ QThread t;
+ t.start();
+ QtTestObject obj;
+ obj.moveToThread(&t);
+ QString t1("1"); QString t2("2"); QString t3("3"); QString t4("4"); QString t5("5");
+ QString t6("6"); QString t7("7"); QString t8("8"); QString t9("9"); QString t10("X");
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl1", Qt::BlockingQueuedConnection, t1));
+ QCOMPARE(obj.slotResult, QString("sl1:1"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl2", Qt::BlockingQueuedConnection, t1, t2));
+ QCOMPARE(obj.slotResult, QString("sl2:12"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl3", Qt::BlockingQueuedConnection, t1, t2, t3));
+ QCOMPARE(obj.slotResult, QString("sl3:123"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl4", Qt::BlockingQueuedConnection, t1, t2,
+ t3, t4));
+ QCOMPARE(obj.slotResult, QString("sl4:1234"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl5", Qt::BlockingQueuedConnection, t1, t2,
+ t3, t4, QStringLiteral("5")));
+ QCOMPARE(obj.slotResult, QString("sl5:12345"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl6", Qt::BlockingQueuedConnection, t1, t2,
+ t3, t4, t5, t6));
+ QCOMPARE(obj.slotResult, QString("sl6:123456"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl7", Qt::BlockingQueuedConnection, t1, t2,
+ t3, t4, t5, t6,
+ t7));
+ QCOMPARE(obj.slotResult, QString("sl7:1234567"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl8", Qt::BlockingQueuedConnection, t1, t2,
+ t3, t4, t5, t6,
+ t7, t8));
+ QCOMPARE(obj.slotResult, QString("sl8:12345678"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl9", Qt::BlockingQueuedConnection, t1, t2,
+ t3, t4, t5, t6,
+ t7, t8, t9));
+ QCOMPARE(obj.slotResult, QString("sl9:123456789"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl11", Qt::BlockingQueuedConnection));
+ QCOMPARE(obj.slotResult, QString("sl11"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "testSender", Qt::BlockingQueuedConnection));
+ QCOMPARE(obj.slotResult, QString("0x0"));
+
+ // this is not working
+// QString refStr("whatever");
+// QVERIFY(QMetaObject::invokeMethod(&obj, "testReference", Qt::BlockingQueuedConnection, refStr));
+// QCOMPARE(obj.slotResult, QString("testReference:whatever"));
+// QCOMPARE(refStr, QString("gotcha"));
+
+ qint64 ll1 = -1;
+ quint64 ll2 = 0;
+ QVERIFY(QMetaObject::invokeMethod(&obj,
+ "testLongLong",
+ Qt::BlockingQueuedConnection,
+ ll1,
+ ll2));
+ QCOMPARE(obj.slotResult, QString("testLongLong:-1,0"));
+
+ QString exp;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl1", Qt::BlockingQueuedConnection, qReturnArg(exp), QStringLiteral("bubu")));
+ QCOMPARE(exp, QString("yessir"));
+ QCOMPARE(obj.slotResult, QString("sl1:bubu"));
+
+ QObject *ptr = nullptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl11", Qt::BlockingQueuedConnection, qReturnArg(ptr)));
+ QCOMPARE(ptr, (QObject *)&obj);
+ QCOMPARE(obj.slotResult, QString("sl11"));
+ // try again with a space:
+ ptr = nullptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl11", Qt::BlockingQueuedConnection, qReturnArg(ptr)));
+ QCOMPARE(ptr, (QObject *)&obj);
+ QCOMPARE(obj.slotResult, QString("sl11"));
+
+ const char *ptr2 = 0;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl12", Qt::BlockingQueuedConnection, qReturnArg(ptr2)));
+ QVERIFY(ptr2 != 0);
+ QCOMPARE(obj.slotResult, QString("sl12"));
+ // try again with a space:
+ ptr2 = 0;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl12", Qt::BlockingQueuedConnection, qReturnArg(ptr2)));
+ QVERIFY(ptr2 != 0);
+ QCOMPARE(obj.slotResult, QString("sl12"));
+
+ // test w/ template args
+ QList<QString> returnValue, argument;
+ argument << QString("one") << QString("two") << QString("three");
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl13", Qt::BlockingQueuedConnection,
+ qReturnArg(returnValue),
+ argument));
+ QCOMPARE(returnValue, argument);
+ QCOMPARE(obj.slotResult, QString("sl13"));
+
+ // return qint64
+ qint64 return64;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl14", Qt::BlockingQueuedConnection,
+ qReturnArg(return64)));
+ QCOMPARE(return64, Q_INT64_C(123456789)*123456789);
+ QCOMPARE(obj.slotResult, QString("sl14"));
+
+ // pointers
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl15", Qt::BlockingQueuedConnection, &return64));
+ QCOMPARE(obj.slotResult, QString("sl15"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl16", Qt::BlockingQueuedConnection, getForwardDeclaredPointer()));
+ QCOMPARE(obj.slotResult, QString("sl16:notnull"));
+
+ obj.slotResult.clear();
+ qint64 *return64Ptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl15", Qt::BlockingQueuedConnection, qReturnArg(return64Ptr), &return64));
+ QCOMPARE(return64Ptr, &return64);
+ QCOMPARE(obj.slotResult, QString("sl15"));
+
+ obj.slotResult.clear();
+ MyForwardDeclaredType *forwardPtr = nullptr;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl16", Qt::BlockingQueuedConnection, qReturnArg(forwardPtr),
+ forwardPtr));
+ QCOMPARE(forwardPtr, getForwardDeclaredPointer());
+ QCOMPARE(obj.slotResult, QString("sl16:null"));
+
+ // test overloads
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::BlockingQueuedConnection));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::BlockingQueuedConnection, 1));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1"));
+ QVERIFY(QMetaObject::invokeMethod(&obj, "overloadedSlot", Qt::BlockingQueuedConnection, 1, 42));
+ QCOMPARE(obj.slotResult, QString("overloadedSlot:1,42"));
+
+ //test signals
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig0", Qt::BlockingQueuedConnection));
+ QCOMPARE(obj.slotResult, QString("sl0"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig1", Qt::BlockingQueuedConnection, QStringLiteral("baba")));
+ QCOMPARE(obj.slotResult, QString("sl1:baba"));
+
+ exp.clear();
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig1", Qt::BlockingQueuedConnection, qReturnArg(exp), QStringLiteral("hehe")));
+ QCOMPARE(exp, QString("yessir"));
+ QCOMPARE(obj.slotResult, QString("sl1:hehe"));
+
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::doesNotExist()");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "doesNotExist", Qt::BlockingQueuedConnection));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::sl1(QString)(QString)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "sl1(QString)", Qt::BlockingQueuedConnection, QStringLiteral("arg")));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::sl3(QString)\n"
+ "Candidates are:\n sl3(QString,QString,QString)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "sl3", Qt::BlockingQueuedConnection, QStringLiteral("arg")));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::sl1(QString,QString,QString)\n"
+ "Candidates are:\n sl1(QString)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "sl1", Qt::BlockingQueuedConnection, QStringLiteral("arg"), QStringLiteral("arg"), QStringLiteral("arg")));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::invokeMethod: No such method QtTestObject::testReference(QString)\n"
+ "Candidates are:\n testReference(QString&)");
+ QVERIFY(!QMetaObject::invokeMethod(&obj, "testReference", Qt::BlockingQueuedConnection, exp));
+
+ //should not have changed since last test.
+ QCOMPARE(exp, QString("yessir"));
+ QCOMPARE(obj.slotResult, QString("sl1:hehe"));
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, "moveToThread", Qt::BlockingQueuedConnection, QThread::currentThread()));
+ t.quit();
+ QVERIFY(t.wait());
}
void tst_QMetaObject::invokeBlockingQueuedPointer()
@@ -1156,6 +1884,18 @@ void tst_QMetaObject::invokeBlockingQueuedPointer()
Qt::BlockingQueuedConnection));
QCOMPARE(obj.slotResult, QString("sl1:hehe"));
}
+
+ // Test with parameters
+ QString result;
+ QVERIFY(QMetaObject::invokeMethod(&obj, &QtTestObject::sl1, Qt::BlockingQueuedConnection,
+ qReturnArg(result), u"bubu"_s));
+ QCOMPARE(result, u"yessir");
+ QCOMPARE(obj.slotResult, u"sl1:bubu");
+
+ QVERIFY(QMetaObject::invokeMethod(&obj, &QtTestObject::sl2, Qt::BlockingQueuedConnection,
+ u"bubu"_s, u"baba"_s));
+ QCOMPARE(obj.slotResult, u"sl2:bububaba");
+
QVERIFY(QMetaObject::invokeMethod(&obj, [&](){obj.moveToThread(QThread::currentThread());}, Qt::BlockingQueuedConnection));
t.quit();
QVERIFY(t.wait());
@@ -1212,6 +1952,10 @@ void tst_QMetaObject::invokeCustomTypes()
QCOMPARE(obj.sum, 0);
QVERIFY(QMetaObject::invokeMethod(&obj, "sl1", Q_ARG(MyType, tp)));
QCOMPARE(obj.sum, 3);
+
+ obj.sum = 0;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sl1", tp));
+ QCOMPARE(obj.sum, 3);
}
namespace NamespaceWithConstructibleClass
@@ -1227,13 +1971,16 @@ public:
}
+// this test is duplicated below
void tst_QMetaObject::invokeMetaConstructor()
{
const QMetaObject *mo = &QtTestObject::staticMetaObject;
+#ifdef USE_COMPAT_Q_ARG
{
- QObject *obj = mo->newInstance();
+ QObject *obj = mo->newInstance(QGenericArgument());
QVERIFY(!obj);
}
+#endif
{
QtTestObject obj;
QObject *obj2 = mo->newInstance(Q_ARG(QObject*, &obj));
@@ -1256,6 +2003,56 @@ void tst_QMetaObject::invokeMetaConstructor()
QTest::ignoreMessage(QtWarningMsg, "QMetaObject::newInstance: type MyGadget does not inherit QObject");
QVERIFY(!MyGadget::staticMetaObject.newInstance());
}
+
+ // overloaded constructors
+ QObject parent;
+ {
+ QObject *obj = mo->newInstance(Q_ARG(QObject*, &parent));
+ QVERIFY(obj);
+ QCOMPARE(static_cast<QtTestObject*>(obj)->slotResult, "");
+ }
+ {
+ QObject *obj = mo->newInstance(Q_ARG(QObject*, &parent), Q_ARG(int, 1));
+ QVERIFY(obj);
+ QCOMPARE(static_cast<QtTestObject*>(obj)->slotResult, "i");
+ }
+ {
+ QObject *obj = mo->newInstance(Q_ARG(QObject*, &parent), Q_ARG(int, 1), Q_ARG(int, 42));
+ QVERIFY(obj);
+ QCOMPARE(static_cast<QtTestObject*>(obj)->slotResult, "ii");
+ }
+}
+
+// this is a copy-paste-adapt of the above
+void tst_QMetaObject::invokeMetaConstructorNoMacro()
+{
+ const QMetaObject *mo = &QtTestObject::staticMetaObject;
+ {
+ QObject *obj = mo->newInstance();
+ QVERIFY(!obj);
+ }
+ {
+ QtTestObject obj;
+ QObject *obj2 = mo->newInstance(static_cast<QObject *>(&obj));
+ QVERIFY(obj2 != 0);
+ QCOMPARE(obj2->parent(), (QObject*)&obj);
+ QVERIFY(qobject_cast<QtTestObject*>(obj2) != 0);
+ }
+ // class in namespace
+ const QMetaObject *nsmo = &NamespaceWithConstructibleClass::ConstructibleClass::staticMetaObject;
+ {
+ QtTestObject obj;
+ QObject *obj2 = nsmo->newInstance(static_cast<QObject *>(&obj));
+ QVERIFY(obj2 != 0);
+ QCOMPARE(obj2->parent(), (QObject*)&obj);
+ QVERIFY(qobject_cast<NamespaceWithConstructibleClass::ConstructibleClass*>(obj2) != 0);
+ }
+ // gadget shouldn't return a valid pointer
+ {
+ QCOMPARE(MyGadget::staticMetaObject.constructorCount(), 1);
+ QTest::ignoreMessage(QtWarningMsg, "QMetaObject::newInstance: type MyGadget does not inherit QObject");
+ QVERIFY(!MyGadget::staticMetaObject.newInstance());
+ }
}
void tst_QMetaObject::invokeTypedefTypes()
@@ -1265,11 +2062,17 @@ void tst_QMetaObject::invokeTypedefTypes()
QSignalSpy spy(&obj, &QtTestCustomObject::sig_custom);
QVERIFY(spy.isValid());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
CustomString arg("hello");
QVERIFY(QMetaObject::invokeMethod(&obj, "sig_custom", Q_ARG(CustomString, arg)));
- QCOMPARE(spy.count(), 1);
- QCOMPARE(spy.at(0).count(), 1);
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(spy.at(0).size(), 1);
+ QCOMPARE(spy.at(0).at(0), QVariant(arg));
+
+ spy.clear();
+ QVERIFY(QMetaObject::invokeMethod(&obj, "sig_custom", arg));
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(spy.at(0).size(), 1);
QCOMPARE(spy.at(0).at(0), QVariant(arg));
}
@@ -1285,6 +2088,14 @@ void tst_QMetaObject::invokeException()
QFAIL("Did not throw");
} catch(ObjectException &) {}
QCOMPARE(countedStructObjectsCount, 0);
+
+ try {
+ CountedStruct s;
+ QVERIFY(QMetaObject::invokeMethod(&obj, "throwingSlot", qReturnArg(s),
+ s, s));
+ QFAIL("Did not throw");
+ } catch(ObjectException &) {}
+ QCOMPARE(countedStructObjectsCount, 0);
#else
QSKIP("Needs exceptions");
#endif
@@ -1306,6 +2117,61 @@ void tst_QMetaObject::invokeQueuedAutoRegister()
qApp->processEvents(QEventLoop::AllEvents);
QCOMPARE(obj.slotResult,
QString("slotWithRegistrableArgument:myShared-myShared-myShared-myShared-00"));
+
+ obj.slotResult.clear();
+ QVERIFY(QMetaObject::invokeMethod(
+ &obj, "slotWithRegistrableArgument", Qt::QueuedConnection,
+ shared.data(), QPointer<QtTestObject>(shared.data()),
+ QSharedPointer<QtTestObject>(shared), QWeakPointer<QtTestObject>(shared),
+ QList<QtTestObject *>(),
+ QList<QtTestObject *>()));
+ QVERIFY(obj.slotResult.isEmpty());
+ qApp->processEvents(QEventLoop::AllEvents);
+ QCOMPARE(obj.slotResult,
+ QString("slotWithRegistrableArgument:myShared-myShared-myShared-myShared-00"));
+}
+
+namespace FunctionTest {
+ static void function0() {}
+ static int functionNoExcept() noexcept
+ {
+ return 42;
+ }
+}
+
+void tst_QMetaObject::invokeFreeFunction()
+{
+ using namespace FunctionTest;
+ QtTestObject obj;
+ QMetaObject::invokeMethod(&obj, function0);
+ int retInt = -1;
+ QMetaObject::invokeMethod(&obj, functionNoExcept, &retInt);
+ QCOMPARE(retInt, functionNoExcept());
+}
+
+void tst_QMetaObject::invokeBind()
+{
+ QtTestObject obj;
+
+ struct {
+ int number;
+ QString string;
+ } results;
+
+ const auto function = [&results](int number, const QString &string) -> bool {
+ results.number = number;
+ results.string = string;
+ return true;
+ };
+
+ const int number = 42;
+ const QString string("Test");
+ const auto binding = std::bind(function, number, string);
+ bool ret = false;
+ QMetaObject::invokeMethod(&obj, binding, &ret);
+ QVERIFY(ret);
+ QCOMPARE(results.number, number);
+ QCOMPARE(results.string, string);
}
void tst_QMetaObject::normalizedSignature_data()
@@ -1473,7 +2339,7 @@ void tst_QMetaObject::customPropertyType()
QCOMPARE(prop.metaType().id(), QMetaType::QVariantList);
}
-void tst_QMetaObject::checkScope_data()
+void tst_QMetaObject::keysToValue_data()
{
QTest::addColumn<QObject *>("object");
QTest::addColumn<QByteArray>("name");
@@ -1487,7 +2353,7 @@ void tst_QMetaObject::checkScope_data()
}
-void tst_QMetaObject::checkScope()
+void tst_QMetaObject::keysToValue()
{
QFETCH(QObject *, object);
QFETCH(QByteArray, name);
@@ -1500,6 +2366,8 @@ void tst_QMetaObject::checkScope()
QVERIFY(!me.isFlag());
QCOMPARE(QByteArray(me.scope()), QByteArray("MyNamespace::" + name));
QCOMPARE(me.keyToValue("MyNamespace::" + name + "::MyEnum2", &ok), 1);
+ // Fully qualified unscoped enumerator
+ QCOMPARE(me.keyToValue("MyNamespace::" + name + "::MyEnum::MyEnum2", &ok), 1);
QCOMPARE(ok, true);
QCOMPARE(me.keyToValue(name + "::MyEnum2", &ok), -1);
QCOMPARE(ok, false);
@@ -1529,6 +2397,9 @@ void tst_QMetaObject::checkScope()
QCOMPARE(QByteArray(mf.scope()), QByteArray("MyNamespace::" + name));
QCOMPARE(mf.keysToValue("MyNamespace::" + name + "::MyFlag2", &ok), 2);
QCOMPARE(ok, true);
+ // Fully qualified
+ QCOMPARE(mf.keysToValue("MyNamespace::" + name + "::MyFlag::MyFlag2", &ok), 2);
+ QCOMPARE(ok, true);
QCOMPARE(mf.keysToValue(name + "::MyFlag2", &ok), -1);
QCOMPARE(ok, false);
QCOMPARE(mf.keysToValue("MyNamespace::MyFlag2", &ok), -1);
@@ -1538,7 +2409,12 @@ void tst_QMetaObject::checkScope()
QCOMPARE(mf.keysToValue("MyFlag", &ok), -1);
QCOMPARE(ok, false);
QCOMPARE(QLatin1String(mf.valueToKey(2)), QLatin1String("MyFlag2"));
- QCOMPARE(mf.keysToValue("MyNamespace::" + name + "::MyFlag1|MyNamespace::" + name + "::MyFlag2", &ok), 3);
+
+ const QByteArray prefix = "MyNamespace::" + name;
+ QCOMPARE(mf.keysToValue(prefix + "::MyFlag1|" + prefix + "::MyFlag2", &ok), 3);
+ QCOMPARE(ok, true);
+ // Fully qualified
+ QCOMPARE(mf.keysToValue(prefix + "::MyFlag::MyFlag1|" + prefix + "::MyFlag::MyFlag2", &ok), 3);
QCOMPARE(ok, true);
QCOMPARE(mf.keysToValue(name + "::MyFlag1|" + name + "::MyFlag2", &ok), -1);
QCOMPARE(ok, false);
@@ -1550,9 +2426,34 @@ void tst_QMetaObject::checkScope()
QCOMPARE(ok, true);
QCOMPARE(mf.keysToValue("MyFlag1|MyNamespace::" + name + "::MyFlag2", &ok), 3);
QCOMPARE(ok, true);
- QCOMPARE(mf.keysToValue("MyNamespace::" + name + "::MyFlag2|MyNamespace::" + name + "::MyFlag2", &ok), 2);
+ QCOMPARE(mf.keysToValue(prefix + "::MyFlag2|" + prefix + "::MyFlag2", &ok), 2);
+ QCOMPARE(ok, true);
+ // Fully qualified
+ QCOMPARE(mf.keysToValue(prefix + "::MyFlag::MyFlag2|" + prefix + "::MyFlag::MyFlag2", &ok), 2);
QCOMPARE(ok, true);
QCOMPARE(QLatin1String(mf.valueToKeys(3)), QLatin1String("MyFlag1|MyFlag2"));
+
+ // Test flags with extra '|'
+ QTest::ignoreMessage(QtWarningMsg,
+ QRegularExpression(u"QMetaEnum::keysToValue: malformed keys string, ends with '|'.+"_s));
+ QCOMPARE(mf.keysToValue("MyFlag1|MyFlag2|", &ok), -1);
+ QCOMPARE(ok, false);
+
+ QTest::ignoreMessage(QtWarningMsg,
+ QRegularExpression(u"QMetaEnum::keysToValue: malformed keys string, starts with '|'.+"_s));
+ QCOMPARE(mf.keysToValue("|MyFlag1|MyFlag2|", &ok), -1);
+ QCOMPARE(ok, false);
+
+ QTest::ignoreMessage(QtWarningMsg,
+ QRegularExpression(
+ u"QMetaEnum::keysToValue: malformed keys string, has two consecutive '|'.+"_s));
+ QCOMPARE(mf.keysToValue("MyFlag1||MyFlag2", &ok), -1);
+ QCOMPARE(ok, false);
+
+ // Test empty string
+ QTest::ignoreMessage(QtWarningMsg, "QMetaEnum::keysToValue: empty keys string.");
+ QCOMPARE(mf.keysToValue("", &ok), -1);
+ QCOMPARE(ok, false);
}
void tst_QMetaObject::propertyNotify()
@@ -1639,6 +2540,7 @@ void tst_QMetaObject::classInfo()
QCOMPARE(QLatin1String(b.metaObject()->classInfo(index).value()), QLatin1String("Christopher Pike"));
}
+// this test is duplicated below
void tst_QMetaObject::metaMethod()
{
QString str("foo");
@@ -1658,9 +2560,13 @@ void tst_QMetaObject::metaMethod()
QVERIFY(index > 0);
method = QtTestObject::staticMetaObject.method(index);
//wrong args
+ QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invoke: too few arguments (5) in call to QtTestObject::sl5(QString,QString,QString,QString,QString)");
QVERIFY(!method.invoke(&obj, Q_ARG(QString, "1"), Q_ARG(QString, "2"), Q_ARG(QString, "3"), Q_ARG(QString, "4")));
//QVERIFY(!method.invoke(&obj, Q_ARG(QString, "1"), Q_ARG(QString, "2"), Q_ARG(QString, "3"), Q_ARG(QString, "4"), Q_ARG(QString, "5"), Q_ARG(QString, "6")));
//QVERIFY(!method.invoke(&obj, Q_ARG(QString, "1"), Q_ARG(QString, "2"), Q_ARG(QString, "3"), Q_ARG(QString, "4"), Q_ARG(int, 5)));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invokeMethod: return type mismatch for method "
+ "QtTestObject::sl5(QString,QString,QString,QString,QString): "
+ "cannot convert from void to QString during invocation");
QVERIFY(!method.invoke(&obj, Q_RETURN_ARG(QString, ret), Q_ARG(QString, "1"), Q_ARG(QString, "2"), Q_ARG(QString, "3"), Q_ARG(QString, "4"), Q_ARG(QString, "5")));
//wrong object
@@ -1687,6 +2593,59 @@ void tst_QMetaObject::metaMethod()
QCOMPARE(obj.slotResult, QString("sl13"));
}
+// this is a copy-paste-adapt of the above
+void tst_QMetaObject::metaMethodNoMacro()
+{
+ QString str("foo");
+ QString ret("bar");
+ QMetaMethod method;
+ QVERIFY(!method.invoke(this));
+ QVERIFY(!method.invoke(this, str));
+ QVERIFY(!method.invoke(this, qReturnArg(ret), str));
+ QCOMPARE(str, QString("foo"));
+ QCOMPARE(ret, QString("bar"));
+
+ QtTestObject obj;
+ QString t1("1"); QString t2("2"); QString t3("3"); QString t4("4"); QString t5("5");
+ QString t6("6"); QString t7("7"); QString t8("8"); QString t9("9"); QString t10("X");
+
+ int index = QtTestObject::staticMetaObject.indexOfMethod("sl5(QString,QString,QString,QString,QString)");
+ QVERIFY(index > 0);
+ method = QtTestObject::staticMetaObject.method(index);
+ //wrong args
+ QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invoke: too few arguments (5) in call to QtTestObject::sl5(QString,QString,QString,QString,QString)");
+ QVERIFY(!method.invoke(&obj, QStringLiteral("1"), QStringLiteral("2"), QStringLiteral("3"), QStringLiteral("4")));
+ //QVERIFY(!method.invoke(&obj, "1", "2", "3", "4", "5", "6"));
+ //QVERIFY(!method.invoke(&obj, "1", "2", "3", "4", 5));
+ QTest::ignoreMessage(QtWarningMsg, "QMetaMethod::invokeMethod: return type mismatch for method "
+ "QtTestObject::sl5(QString,QString,QString,QString,QString): "
+ "cannot convert from void to QString during invocation");
+ QVERIFY(!method.invoke(&obj, qReturnArg(ret), QStringLiteral("1"), QStringLiteral("2"), QStringLiteral("3"), QStringLiteral("4"), QStringLiteral("5")));
+
+ //wrong object
+ //QVERIFY(!method.invoke(this, "1", "2", "3", "4", "5"));
+ QVERIFY(!method.invoke(0, QStringLiteral("1"), QStringLiteral("2"), QStringLiteral("3"), QStringLiteral("4"), QStringLiteral("5")));
+ QCOMPARE(ret, QString("bar"));
+ QCOMPARE(obj.slotResult, QString());
+
+ QVERIFY(method.invoke(&obj, QStringLiteral("1"), QStringLiteral("2"), QStringLiteral("3"), QStringLiteral("4"), QStringLiteral("5")));
+ QCOMPARE(obj.slotResult, QString("sl5:12345"));
+
+ index = QtTestObject::staticMetaObject.indexOfMethod("sl13(QList<QString>)");
+ QVERIFY(index > 0);
+ QMetaMethod sl13 = QtTestObject::staticMetaObject.method(index);
+ QList<QString> returnValue, argument;
+ argument << QString("one") << QString("two") << QString("three");
+ //wrong object
+ //QVERIFY(!sl13.invoke(this, qReturnArg(returnValue), argument));
+ QVERIFY(!sl13.invoke(0, qReturnArg(returnValue), argument));
+ QVERIFY(returnValue.isEmpty());
+
+ QVERIFY(sl13.invoke(&obj, qReturnArg(returnValue), argument));
+ QCOMPARE(returnValue, argument);
+ QCOMPARE(obj.slotResult, QString("sl13"));
+}
+
void tst_QMetaObject::indexOfMethod_data()
{
QTest::addColumn<QObject *>("object");
diff --git a/tests/auto/corelib/kernel/qmetaobjectbuilder/CMakeLists.txt b/tests/auto/corelib/kernel/qmetaobjectbuilder/CMakeLists.txt
index 2171b18b2f..8551749db3 100644
--- a/tests/auto/corelib/kernel/qmetaobjectbuilder/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qmetaobjectbuilder/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qmetaobjectbuilder.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmetaobjectbuilder Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmetaobjectbuilder LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmetaobjectbuilder
SOURCES
tst_qmetaobjectbuilder.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp
index d3f10ed815..18e4e2a4a9 100644
--- a/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.cpp
+++ b/tests/auto/corelib/kernel/qmetaobjectbuilder/tst_qmetaobjectbuilder.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 <QTest>
#include <QSignalSpy>
@@ -67,6 +42,8 @@ private slots:
void cleanupTestCase();
+ void ownMetaTypeNoProperties();
+
private:
static bool checkForSideEffects
(const QMetaObjectBuilder& builder,
@@ -97,7 +74,7 @@ class SomethingOfEverything : public QObject
Q_PROPERTY(SomethingFlagEnum fprop READ fprop)
Q_PROPERTY(QLocale::Language language READ language)
Q_ENUMS(SomethingEnum)
- Q_FLAGS(SomethingFlagEnum)
+ Q_FLAGS(SomethingFlag)
public:
Q_INVOKABLE SomethingOfEverything() {}
~SomethingOfEverything() {}
@@ -113,6 +90,7 @@ public:
XYZ = 1,
UVW = 8
};
+ Q_DECLARE_FLAGS(SomethingFlag, SomethingFlagEnum)
Q_INVOKABLE Q_SCRIPTABLE void method1() {}
@@ -801,6 +779,26 @@ void tst_QMetaObjectBuilder::notifySignal()
void tst_QMetaObjectBuilder::enumerator()
{
+ static const QtPrivate::QMetaTypeInterface fooFlagMetaType = {
+ 0,
+ 8,
+ 8,
+ QMetaType::IsEnumeration | QMetaType::IsUnsignedEnumeration | QMetaType::RelocatableType,
+ {},
+ nullptr,
+ "fooFlag",
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ nullptr,
+ };
+
QMetaObjectBuilder builder;
// Add an enumerator and check its attributes.
@@ -832,6 +830,7 @@ void tst_QMetaObjectBuilder::enumerator()
enum1.setIsFlag(true);
enum1.setIsScoped(true);
enum1.setEnumName(QByteArrayLiteral("fooFlag"));
+ enum1.setMetaType(QMetaType(&fooFlagMetaType));
QCOMPARE(enum1.addKey("ABC", 0), 0);
QCOMPARE(enum1.addKey("DEF", 1), 1);
QCOMPARE(enum1.addKey("GHI", -1), 2);
@@ -841,6 +840,7 @@ void tst_QMetaObjectBuilder::enumerator()
QVERIFY(enum1.isFlag());
QVERIFY(enum1.isScoped());
QCOMPARE(enum1.enumName(), QByteArray("fooFlag"));
+ QCOMPARE(enum1.metaType(), QMetaType(&fooFlagMetaType));
QCOMPARE(enum1.keyCount(), 3);
QCOMPARE(enum1.index(), 0);
QCOMPARE(enum1.key(0), QByteArray("ABC"));
@@ -1481,9 +1481,7 @@ int TestObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
if (_id < ownMethodCount)
qt_static_metacall(this, _c, _id, _a);
_id -= ownMethodCount;
- }
-#ifndef QT_NO_PROPERTIES
- else if (_c == QMetaObject::ReadProperty) {
+ } else if (_c == QMetaObject::ReadProperty) {
void *_v = _a[0];
switch (_id) {
case 0: *reinterpret_cast< int*>(_v) = intProp(); break;
@@ -1506,7 +1504,6 @@ int TestObject::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
} else if (_c == QMetaObject::ResetProperty) {
_id -= ownPropertyCount;
}
-#endif // QT_NO_PROPERTIES
return _id;
}
@@ -1524,8 +1521,8 @@ void tst_QMetaObjectBuilder::usage_signal()
QSignalSpy propChangedSpy(testObject.data(), &TestObject::intPropChanged);
testObject->emitIntPropChanged();
- QCOMPARE(propChangedSpy.count(), 1);
- QCOMPARE(propChangedSpy.at(0).count(), 1);
+ QCOMPARE(propChangedSpy.size(), 1);
+ QCOMPARE(propChangedSpy.at(0).size(), 1);
QCOMPARE(propChangedSpy.at(0).at(0).toInt(), testObject->intProp());
}
@@ -1540,7 +1537,7 @@ void tst_QMetaObjectBuilder::usage_property()
QSignalSpy propChangedSpy(testObject.data(), &TestObject::intPropChanged);
QVERIFY(testObject->intProp() != 123);
testObject->setProperty("intProp", 123);
- QCOMPARE(propChangedSpy.count(), 1);
+ QCOMPARE(propChangedSpy.size(), 1);
prop = testObject->property("intProp");
QCOMPARE(prop.metaType(), QMetaType(QMetaType::Int));
QCOMPARE(prop.toInt(), 123);
@@ -1641,23 +1638,35 @@ void tst_QMetaObjectBuilder::classNameFirstInStringData()
}
struct MyFoo {};
+struct myParameter {};
void tst_QMetaObjectBuilder::propertyMetaType()
{
+ qRegisterMetaType<myParameter>();
QMetaType meta = QMetaType::fromType<MyFoo>();
auto metaId = meta.id();
QMetaObjectBuilder builder;
builder.setClassName("Test");
- builder.addProperty("test", "MyFoo");
+ builder.addProperty("myParameter", "MyFoo");
auto mo = builder.toMetaObject();
- QMetaProperty metaProp = mo->property(mo->indexOfProperty("test"));
+ QMetaProperty metaProp = mo->property(mo->indexOfProperty("myParameter"));
QCOMPARE(metaProp.typeName(), meta.name());
QCOMPARE(metaProp.typeId(), metaId);
QCOMPARE(metaProp.metaType(), meta);
free(mo);
}
+void tst_QMetaObjectBuilder::ownMetaTypeNoProperties()
+{
+ QMetaObjectBuilder builder;
+ builder.setClassName("NoProperties");
+ auto mo = builder.toMetaObject();
+ auto cleanup = qScopeGuard([&](){ free(mo); });
+ // own metatype should be invalid, as the dynamic metaobject has not been registered
+ QVERIFY(!mo->metaType().isValid());// should not crash
+}
+
void tst_QMetaObjectBuilder::cleanupTestCase()
{
for (QMetaObject *obj: dynamicMetaObjectsPendingFree)
diff --git a/tests/auto/corelib/kernel/qmetaproperty/CMakeLists.txt b/tests/auto/corelib/kernel/qmetaproperty/CMakeLists.txt
index b69be31b1e..49c07afd87 100644
--- a/tests/auto/corelib/kernel/qmetaproperty/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qmetaproperty/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qmetaproperty.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmetaproperty Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmetaproperty LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmetaproperty
SOURCES
tst_qmetaproperty.cpp
diff --git a/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp b/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp
index 6638351928..c8053ca43a 100644
--- a/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp
+++ b/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp
@@ -1,37 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2015 Olivier Goffart <ogoffart@woboq.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 The Qt Company Ltd.
+// Copyright (C) 2015 Olivier Goffart <ogoffart@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qobject.h>
#include <qmetaobject.h>
+#include <QMap>
+#include <QString>
struct CustomType
{
@@ -45,7 +22,14 @@ struct CustomType
Q_DECLARE_METATYPE(CustomType)
-class tst_QMetaProperty : public QObject
+class Base : public QObject
+{
+ Q_OBJECT
+signals:
+ void baseSignal(int);
+};
+
+class tst_QMetaProperty : public Base
{
Q_OBJECT
Q_PROPERTY(EnumType value WRITE setValue READ getValue)
@@ -56,6 +40,7 @@ class tst_QMetaProperty : public QObject
Q_PROPERTY(int value10 READ value10 FINAL)
Q_PROPERTY(QMap<int, int> map MEMBER map)
Q_PROPERTY(CustomType custom MEMBER custom)
+ Q_PROPERTY(int propWithInheritedSig READ propWithInheritedSig NOTIFY baseSignal)
private slots:
void hasStdCppSet();
@@ -66,6 +51,7 @@ private slots:
void mapProperty();
void conversion();
void enumsFlags();
+ void notifySignalIndex();
public:
enum EnumType { EnumType1 };
@@ -80,6 +66,8 @@ public:
int value9() const { return 1; }
int value10() const { return 1; }
+ int propWithInheritedSig() const { return 0; }
+
QString value7;
QMap<int, int> map;
CustomType custom;
@@ -297,5 +285,20 @@ void tst_QMetaProperty::enumsFlags()
QCOMPARE(t.flagProperty(), EnumFlagsTester::flag2);
}
+
+void tst_QMetaProperty::notifySignalIndex()
+{
+ auto mo = this->metaObject();
+ auto propIndex = mo->indexOfProperty("propWithInheritedSig");
+ auto propWithInheritedSig = mo->property(propIndex);
+ QVERIFY(propWithInheritedSig.isValid());
+ QVERIFY(propWithInheritedSig.hasNotifySignal());
+ QVERIFY(propWithInheritedSig.notifySignalIndex() != -1);
+ QMetaMethod notifySignal = propWithInheritedSig.notifySignal();
+ QVERIFY(notifySignal.isValid());
+ QCOMPARE(notifySignal.name(), "baseSignal");
+ QCOMPARE(notifySignal.parameterCount(), 1);
+}
+
QTEST_MAIN(tst_QMetaProperty)
#include "tst_qmetaproperty.moc"
diff --git a/tests/auto/corelib/kernel/qmetatype/CMakeLists.txt b/tests/auto/corelib/kernel/qmetatype/CMakeLists.txt
index ac4fb55813..b93d961109 100644
--- a/tests/auto/corelib/kernel/qmetatype/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qmetatype/CMakeLists.txt
@@ -1,48 +1,63 @@
-# Generated from qmetatype.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmetatype Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmetatype LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "./typeFlags.bin")
+qt_internal_add_cmake_library(qmetatype_lib1
+ INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qmetatype"
+ SOURCES
+ lib1.cpp
+ PUBLIC_LIBRARIES
+ Qt::Core
+)
+qt_internal_add_cmake_library(qmetatype_lib2
+ INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qmetatype"
+ SOURCES
+ lib2.cpp
+ PUBLIC_LIBRARIES
+ Qt::Core
+)
+set_target_properties(qmetatype_lib1 PROPERTIES
+ VERSION 1.0.0
+ SOVERSION 0
+ C_VISIBILITY_PRESET "hidden"
+ CXX_VISIBILITY_PRESET "hidden"
+ VISIBILITY_INLINES_HIDDEN ON
+)
+set_target_properties(qmetatype_lib2 PROPERTIES
+ VERSION 1.0.0
+ SOVERSION 0
+ C_VISIBILITY_PRESET "hidden"
+ CXX_VISIBILITY_PRESET "hidden"
+ VISIBILITY_INLINES_HIDDEN ON
+)
+
qt_internal_add_test(tst_qmetatype
SOURCES
tst_qmetatype.h tst_qmetatype.cpp tst_qmetatype2.cpp
tst_qmetatype3.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
INCLUDE_DIRECTORIES
../../../other/qvariant_common
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
+ qmetatype_lib1
+ qmetatype_lib2
TESTDATA ${test_data}
)
-if(INTEGRITY)
- # Resources:
- set(testdata_resource_files
- "typeFlags.bin"
- )
-
- qt_internal_add_resource(tst_qmetatype "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
- )
-endif()
-
-## Scopes:
-#####################################################################
-
qt_internal_extend_target(tst_qmetatype CONDITION MSVC
COMPILE_OPTIONS
/bigobj
)
-
-#### Keys ignored in scope 3:.:.:qmetatype.pro:CLANG:
-# QMAKE_CFLAGS_RELEASE = "--O2" "--g"
-# QMAKE_CXXFLAGS_RELEASE = "--O2" "--g"
diff --git a/tests/auto/corelib/kernel/qmetatype/lib1.cpp b/tests/auto/corelib/kernel/qmetatype/lib1.cpp
new file mode 100644
index 0000000000..e5478f87d9
--- /dev/null
+++ b/tests/auto/corelib/kernel/qmetatype/lib1.cpp
@@ -0,0 +1,5 @@
+// Copyright (C) 2022 Intel Corporation
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#define LIB_NAMESPACE Lib1
+#include "lib_common.cpp"
diff --git a/tests/auto/corelib/kernel/qmetatype/lib2.cpp b/tests/auto/corelib/kernel/qmetatype/lib2.cpp
new file mode 100644
index 0000000000..0a905e669a
--- /dev/null
+++ b/tests/auto/corelib/kernel/qmetatype/lib2.cpp
@@ -0,0 +1,5 @@
+// Copyright (C) 2022 Intel Corporation
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#define LIB_NAMESPACE Lib2
+#include "lib_common.cpp"
diff --git a/tests/auto/corelib/kernel/qmetatype/lib_common.cpp b/tests/auto/corelib/kernel/qmetatype/lib_common.cpp
new file mode 100644
index 0000000000..179f539ccc
--- /dev/null
+++ b/tests/auto/corelib/kernel/qmetatype/lib_common.cpp
@@ -0,0 +1,13 @@
+// Copyright (C) 2022 Intel Corporation
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <qcollator.h>
+#include "tst_qmetatype_libs.h"
+
+#define DECLARE_FUNCTION(TYPE, ID) \
+ Q_DECL_EXPORT QMetaType metatype_ ## TYPE() \
+ { return QMetaType::fromType<TYPE>(); }
+
+namespace LIB_NAMESPACE {
+FOR_EACH_METATYPE_LIBS(DECLARE_FUNCTION)
+}
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
index f69327a3f1..81bf5d5ea8 100644
--- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
+++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "tst_qmetatype.h"
@@ -38,6 +13,8 @@
#include <memory>
#include <vector>
+#include <QtCore/qflags.h>
+
Q_DECLARE_METATYPE(QMetaType::Type)
Q_DECLARE_METATYPE(QPartialOrdering)
@@ -146,6 +123,26 @@ static_assert(!QTypeTraits::has_operator_less_than_v<std::tuple<int, Nested2>>);
static_assert(QTypeTraits::has_operator_equal_v<std::tuple<int, Nested2>>);
static_assert(!QTypeTraits::has_operator_less_than_v<std::tuple<int, Nested2>>);
+// optionals of nesteds
+static_assert(QTypeTraits::has_operator_equal_v<std::optional<std::variant<QString>>>);
+static_assert(QTypeTraits::has_operator_less_than_v<std::optional<std::variant<QString>>>);
+static_assert(!QTypeTraits::has_operator_equal_v<std::optional<std::variant<NoOperators>>>);
+static_assert(!QTypeTraits::has_operator_less_than_v<std::optional<std::variant<NoOperators>>>);
+
+static_assert(QTypeTraits::has_operator_equal_v<std::optional<Nested>>);
+static_assert(!QTypeTraits::has_operator_less_than_v<std::optional<Nested>>);
+static_assert(QTypeTraits::has_operator_equal_v<std::optional<std::tuple<int, Nested>>>);
+static_assert(!QTypeTraits::has_operator_less_than_v<std::optional<std::tuple<int, Nested>>>);
+static_assert(QTypeTraits::has_operator_equal_v<std::optional<std::tuple<int, Nested>>>);
+static_assert(!QTypeTraits::has_operator_less_than_v<std::optional<std::tuple<int, Nested>>>);
+
+static_assert(QTypeTraits::has_operator_equal_v<std::optional<Nested2>>);
+static_assert(!QTypeTraits::has_operator_less_than_v<std::optional<Nested2>>);
+static_assert(QTypeTraits::has_operator_equal_v<std::optional<std::tuple<int, Nested2>>>);
+static_assert(!QTypeTraits::has_operator_less_than_v<std::optional<std::tuple<int, Nested2>>>);
+static_assert(QTypeTraits::has_operator_equal_v<std::optional<std::tuple<int, Nested2>>>);
+static_assert(!QTypeTraits::has_operator_less_than_v<std::optional<std::tuple<int, Nested2>>>);
+
}
struct BaseGenericType
@@ -401,6 +398,7 @@ public:
int Bar::failureCount = 0;
+#if QT_CONFIG(thread)
class MetaTypeTorturer: public QThread
{
Q_OBJECT
@@ -422,55 +420,65 @@ protected:
++failureCount;
qWarning() << "Wrong typeInfo returned for" << tp;
}
- if (!info.isRegistered()) {
+ if (info.flags() != (QMetaType::NeedsConstruction | QMetaType::NeedsDestruction |
+ QMetaType::NeedsCopyConstruction | QMetaType::NeedsMoveConstruction)) {
++failureCount;
- qWarning() << name << "is not a registered metatype";
+ qWarning() << "Wrong typeInfo returned for" << tp << "got"
+ << Qt::showbase << Qt::hex << info.flags();
}
- if (QMetaType::typeFlags(tp) != (QMetaType::NeedsConstruction | QMetaType::NeedsDestruction)) {
+ if (!info.isRegistered()) {
++failureCount;
- qWarning() << "Wrong typeInfo returned for" << tp;
+ qWarning() << name << "is not a registered metatype";
}
if (!QMetaType::isRegistered(tp)) {
++failureCount;
qWarning() << name << "is not a registered metatype";
}
- if (QMetaType::type(nm) != tp) {
+ if (QMetaType::fromName(nm).id() != tp) {
++failureCount;
qWarning() << "Wrong metatype returned for" << name;
}
- void *buf1 = QMetaType::create(tp, 0);
- void *buf2 = QMetaType::create(tp, buf1);
- void *buf3 = info.create(tp, 0);
- void *buf4 = info.create(tp, buf1);
- QMetaType::construct(tp, space, 0);
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ void *buf1 = QMetaType::create(tp, nullptr);
+ void *buf2 = QMetaType::create(tp, buf1);
+ QMetaType::construct(tp, space, nullptr);
QMetaType::destruct(tp, space);
QMetaType::construct(tp, space, buf1);
QMetaType::destruct(tp, space);
- info.construct(space, 0);
- info.destruct(space);
- info.construct(space, buf1);
- info.destruct(space);
-
if (!buf1) {
++failureCount;
- qWarning() << "Null buffer returned by QMetaType::create(tp, 0)";
+ qWarning() << "Null buffer returned by QMetaType::create(tp, nullptr)";
}
if (!buf2) {
++failureCount;
qWarning() << "Null buffer returned by QMetaType::create(tp, buf)";
}
+
+ QMetaType::destroy(tp, buf1);
+ QMetaType::destroy(tp, buf2);
+QT_WARNING_POP
+#endif
+
+ void *buf3 = info.create(nullptr);
+ void *buf4 = info.create(buf3);
+
+ info.construct(space, nullptr);
+ info.destruct(space);
+ info.construct(space, buf3);
+ info.destruct(space);
+
if (!buf3) {
++failureCount;
- qWarning() << "Null buffer returned by info.create(tp, 0)";
+ qWarning() << "Null buffer returned by info.create(nullptr)";
}
if (!buf4) {
++failureCount;
- qWarning() << "Null buffer returned by infocreate(tp, buf)";
+ qWarning() << "Null buffer returned by info.create(buf)";
}
- QMetaType::destroy(tp, buf1);
- QMetaType::destroy(tp, buf2);
+
info.destroy(buf3);
info.destroy(buf4);
}
@@ -500,6 +508,7 @@ void tst_QMetaType::threadSafety()
QCOMPARE(t3.failureCount, 0);
QCOMPARE(Bar::failureCount, 0);
}
+#endif
namespace TestSpace
{
@@ -518,7 +527,7 @@ void tst_QMetaType::namespaces()
QCOMPARE(qvariant_cast<TestSpace::Foo>(v).d, 11.12);
int qungTfuId = qRegisterMetaType<ADD_TESTSPACE(QungTfu)>();
- QCOMPARE(QMetaType::typeName(qungTfuId), "TestSpace::QungTfu");
+ QCOMPARE(QMetaType(qungTfuId).name(), "TestSpace::QungTfu");
}
void tst_QMetaType::id()
@@ -532,13 +541,13 @@ void tst_QMetaType::qMetaTypeId()
{
QCOMPARE(::qMetaTypeId<QString>(), int(QMetaType::QString));
QCOMPARE(::qMetaTypeId<int>(), int(QMetaType::Int));
- QCOMPARE(::qMetaTypeId<TestSpace::Foo>(), QMetaType::type("TestSpace::Foo"));
+ QCOMPARE(::qMetaTypeId<TestSpace::Foo>(), QMetaType::fromType<TestSpace::Foo>().id());
- QCOMPARE(::qMetaTypeId<char>(), QMetaType::type("char"));
- QCOMPARE(::qMetaTypeId<uchar>(), QMetaType::type("unsigned char"));
- QCOMPARE(::qMetaTypeId<signed char>(), QMetaType::type("signed char"));
+ QCOMPARE(::qMetaTypeId<char>(), QMetaType::fromType<char>().id());
+ QCOMPARE(::qMetaTypeId<uchar>(), QMetaType::fromType<unsigned char>().id());
+ QCOMPARE(::qMetaTypeId<signed char>(), QMetaType::fromType<signed char>().id());
QVERIFY(::qMetaTypeId<signed char>() != ::qMetaTypeId<char>());
- QCOMPARE(::qMetaTypeId<qint8>(), QMetaType::type("qint8"));
+ QCOMPARE(::qMetaTypeId<qint8>(), QMetaType::fromType<qint8>().id());
}
void tst_QMetaType::properties()
@@ -550,14 +559,14 @@ void tst_QMetaType::properties()
QCOMPARE(v.typeName(), "QVariantList");
QList<QVariant> values = v.toList();
- QCOMPARE(values.count(), 2);
+ QCOMPARE(values.size(), 2);
QCOMPARE(values.at(0).toInt(), 42);
values << 43 << "world";
QVERIFY(setProperty("prop", values));
v = property("prop");
- QCOMPARE(v.toList().count(), 4);
+ QCOMPARE(v.toList().size(), 4);
}
void tst_QMetaType::normalizedTypes()
@@ -565,13 +574,13 @@ void tst_QMetaType::normalizedTypes()
int WhityIntId = ::qMetaTypeId<Whity<int> >();
int WhityDoubleId = ::qMetaTypeId<Whity<double> >();
- QCOMPARE(QMetaType::type("Whity<int>"), WhityIntId);
- QCOMPARE(QMetaType::type(" Whity < int > "), WhityIntId);
- QCOMPARE(QMetaType::type("Whity<int >"), WhityIntId);
+ QCOMPARE(QMetaType::fromName("Whity<int>").id(), WhityIntId);
+ QCOMPARE(QMetaType::fromName(" Whity < int > ").id(), WhityIntId);
+ QCOMPARE(QMetaType::fromName("Whity<int >").id(), WhityIntId);
- QCOMPARE(QMetaType::type("Whity<double>"), WhityDoubleId);
- QCOMPARE(QMetaType::type(" Whity< double > "), WhityDoubleId);
- QCOMPARE(QMetaType::type("Whity<double >"), WhityDoubleId);
+ QCOMPARE(QMetaType::fromName("Whity<double>").id(), WhityDoubleId);
+ QCOMPARE(QMetaType::fromName(" Whity< double > ").id(), WhityDoubleId);
+ QCOMPARE(QMetaType::fromName("Whity<double >").id(), WhityDoubleId);
QCOMPARE(qRegisterMetaType<Whity<int> >(" Whity < int > "), WhityIntId);
QCOMPARE(qRegisterMetaType<Whity<int> >("Whity<int>"), WhityIntId);
@@ -585,6 +594,21 @@ void tst_QMetaType::normalizedTypes()
#define TYPENAME_DATA(MetaTypeName, MetaTypeId, RealType)\
QTest::newRow(#RealType) << int(QMetaType::MetaTypeName) << #RealType;
+namespace enumerations {
+ enum Test { a = 0 };
+}
+
+static void ignoreInvalidMetaTypeWarning(int typeId)
+{
+ if (typeId < 0 || typeId > QMetaType::User + 500 ||
+ (typeId > QMetaType::LastCoreType && typeId < QMetaType::FirstGuiType) ||
+ (typeId > QMetaType::LastGuiType && typeId < QMetaType::FirstWidgetsType) ||
+ (typeId > QMetaType::LastWidgetsType && typeId < QMetaType::User)) {
+ QTest::ignoreMessage(QtWarningMsg, "Trying to construct an instance of an invalid type, type id: "
+ + QByteArray::number(typeId));
+ }
+}
+
void tst_QMetaType::typeName_data()
{
QTest::addColumn<int>("aType");
@@ -621,6 +645,8 @@ void tst_QMetaType::typeName_data()
// template instance class derived from Q_GADGET enabled class
QTest::newRow("GadgetDerivedAndTyped<int>") << ::qMetaTypeId<GadgetDerivedAndTyped<int>>() << QString::fromLatin1("GadgetDerivedAndTyped<int>");
QTest::newRow("GadgetDerivedAndTyped<int>*") << ::qMetaTypeId<GadgetDerivedAndTyped<int>*>() << QString::fromLatin1("GadgetDerivedAndTyped<int>*");
+
+ QTest::newRow("msvcKeywordPartOfName") << ::qMetaTypeId<enumerations::Test>() << QString::fromLatin1("enumerations::Test");
}
void tst_QMetaType::typeName()
@@ -631,13 +657,15 @@ void tst_QMetaType::typeName()
if (aType >= QMetaType::FirstWidgetsType)
QSKIP("The test doesn't link against QtWidgets.");
- const char *rawname = QMetaType::typeName(aType);
+ ignoreInvalidMetaTypeWarning(aType);
+ const char *rawname = QMetaType(aType).name();
QString name = QString::fromLatin1(rawname);
QCOMPARE(name, aTypeName);
QCOMPARE(name.toLatin1(), QMetaObject::normalizedType(name.toLatin1().constData()));
QCOMPARE(rawname == nullptr, aTypeName.isNull());
+ ignoreInvalidMetaTypeWarning(aType);
QMetaType mt(aType);
if (mt.isValid()) { // Gui type are not valid
QCOMPARE(QString::fromLatin1(QMetaType(aType).name()), aTypeName);
@@ -671,10 +699,8 @@ void tst_QMetaType::type()
if (aType >= QMetaType::FirstWidgetsType)
QSKIP("The test doesn't link against QtWidgets.");
- // QMetaType::type(QByteArray)
- QCOMPARE(QMetaType::type(aTypeName), aType);
- // QMetaType::type(const char *)
- QCOMPARE(QMetaType::type(aTypeName.constData()), aType);
+ QCOMPARE(QMetaType::fromName(aTypeName).id(), aType);
+ QCOMPARE(QMetaType::fromName(aTypeName.constData()).id(), aType);
}
void tst_QMetaType::type_fromSubString_data()
@@ -699,7 +725,7 @@ void tst_QMetaType::type_fromSubString()
QFETCH(int, size);
QFETCH(int, expectedType);
QByteArray ba = QByteArray::fromRawData(types + offset, size);
- QCOMPARE(QMetaType::type(ba), expectedType);
+ QCOMPARE(QMetaType::fromName(ba).id(), expectedType);
}
namespace {
@@ -726,7 +752,7 @@ void tst_QMetaType::create_data()
QTest::addColumn<int>("type");
QTest::newRow("unknown-type") << int(QMetaType::UnknownType);
#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType) \
- QTest::newRow(QMetaType::typeName(QMetaType::MetaTypeName)) << int(QMetaType::MetaTypeName);
+ QTest::newRow(QMetaType(QMetaType::MetaTypeName).name()) << int(QMetaType::MetaTypeName);
FOR_EACH_CORE_METATYPE(ADD_METATYPE_TEST_ROW)
#undef ADD_METATYPE_TEST_ROW
}
@@ -735,23 +761,36 @@ template<int ID>
static void testCreateHelper()
{
typedef typename MetaEnumToType<ID>::Type Type;
- QMetaType info(ID);
+ auto expected = std::unique_ptr<Type>(DefaultValueFactory<ID>::create());
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
void *actual1 = QMetaType::create(ID);
- void *actual2 = info.create();
- Type *expected = DefaultValueFactory<ID>::create();
+ auto cleanup1 = qScopeGuard([actual1]() {
+ QMetaType::destroy(ID, actual1);
+ });
QCOMPARE(*static_cast<Type *>(actual1), *expected);
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 0)
+ QMetaType info(ID);
+ void *actual2 = info.create();
+ auto cleanup2 = qScopeGuard([&info, actual2]() {
+ info.destroy(actual2);
+ });
QCOMPARE(*static_cast<Type *>(actual2), *expected);
- delete expected;
-
- QMetaType::destroy(ID, actual1);
- info.destroy(actual2);
}
template<>
void testCreateHelper<QMetaType::Void>()
{
- void *actual = QMetaType::create(QMetaType::Void);
- QMetaType::destroy(QMetaType::Void, actual);
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ void *actual1 = QMetaType::create(QMetaType::Void);
+ QMetaType::destroy(QMetaType::Void, actual1);
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 0)
+ QMetaType info(QMetaType::Void);
+ void *actual2 = info.create();
+ info.destroy(actual2);
}
@@ -786,15 +825,22 @@ template<int ID>
static void testCreateCopyHelper()
{
typedef typename MetaEnumToType<ID>::Type Type;
- Type *expected = TestValueFactory<ID>::create();
- QMetaType info(ID);
- void *actual1 = QMetaType::create(ID, expected);
- void *actual2 = info.create(expected);
+ auto expected = std::unique_ptr<Type>(TestValueFactory<ID>::create());
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ void *actual1 = QMetaType::create(ID, expected.get());
+ auto cleanup1 = qScopeGuard([actual1]() {
+ QMetaType::destroy(ID, actual1);
+ });
QCOMPARE(*static_cast<Type *>(actual1), *expected);
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 0)
+ QMetaType info(ID);
+ void *actual2 = info.create(expected.get());
+ auto cleanup2 = qScopeGuard([&info, actual2]() {
+ info.destroy(actual2);
+ });
QCOMPARE(*static_cast<Type *>(actual2), *expected);
- QMetaType::destroy(ID, actual1);
- info.destroy(actual2);
- delete expected;
}
template<>
@@ -802,9 +848,22 @@ void testCreateCopyHelper<QMetaType::Void>()
{
typedef MetaEnumToType<QMetaType::Void>::Type Type;
Type *expected = TestValueFactory<QMetaType::Void>::create();
- void *actual = QMetaType::create(QMetaType::Void, expected);
- QCOMPARE(static_cast<Type *>(actual), expected);
- QMetaType::destroy(QMetaType::Void, actual);
+ QCOMPARE(expected, nullptr); // we do not need to delete it
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ void *actual1 = QMetaType::create(QMetaType::Void, expected);
+ auto cleanup1 = qScopeGuard([actual1]() {
+ QMetaType::destroy(QMetaType::Void, actual1);
+ });
+ QCOMPARE(static_cast<Type *>(actual1), expected);
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 0)
+ QMetaType info(QMetaType::Void);
+ void *actual2 = info.create(expected);
+ auto cleanup2 = qScopeGuard([&info, actual2]() {
+ info.destroy(actual2);
+ });
+ QCOMPARE(static_cast<Type *>(actual2), expected);
}
void tst_QMetaType::createCopy_data()
@@ -821,7 +880,7 @@ void tst_QMetaType::createCopy()
switch (type) {
case QMetaType::UnknownType:
return []() {
- char buf[1];
+ char buf[1] = {};
QCOMPARE(QMetaType().create(&buf), nullptr);
};
#define RETURN_CREATE_COPY_FUNCTION(MetaTypeName, MetaTypeId, RealType) \
@@ -867,7 +926,9 @@ void tst_QMetaType::sizeOf()
{
QFETCH(int, type);
QFETCH(size_t, size);
- QCOMPARE(size_t(QMetaType::sizeOf(type)), size);
+ ignoreInvalidMetaTypeWarning(type);
+ QMetaType metaType(type);
+ QCOMPARE(size_t(metaType.sizeOf()), size);
}
void tst_QMetaType::sizeOfStaticLess_data()
@@ -879,6 +940,7 @@ void tst_QMetaType::sizeOfStaticLess()
{
QFETCH(int, type);
QFETCH(size_t, size);
+ ignoreInvalidMetaTypeWarning(type);
QCOMPARE(size_t(QMetaType(type).sizeOf()), size);
}
@@ -915,6 +977,7 @@ void tst_QMetaType::alignOf()
{
QFETCH(int, type);
QFETCH(size_t, size);
+ ignoreInvalidMetaTypeWarning(type);
QCOMPARE(size_t(QMetaType(type).alignOf()), size);
}
@@ -979,80 +1042,157 @@ Q_DECLARE_METATYPE(QPairPP)
enum FlagsDataEnum {};
Q_DECLARE_METATYPE(FlagsDataEnum);
+template <typename T> void addFlagsRow(const char *name, int id = qMetaTypeId<T>())
+{
+ QTest::newRow(name)
+ << id
+ << bool(QTypeInfo<T>::isRelocatable)
+ << bool(!std::is_default_constructible_v<T> || !QTypeInfo<T>::isValueInitializationBitwiseZero)
+ << bool(!std::is_trivially_copy_constructible_v<T>)
+ << bool(!std::is_trivially_destructible_v<T>)
+ << bool(QtPrivate::IsPointerToTypeDerivedFromQObject<T>::Value)
+ << bool(std::is_enum<T>::value)
+ << false;
+}
+
void tst_QMetaType::flags_data()
{
QTest::addColumn<int>("type");
- QTest::addColumn<bool>("isMovable");
- QTest::addColumn<bool>("isComplex");
+ QTest::addColumn<bool>("isRelocatable");
+ QTest::addColumn<bool>("needsConstruction");
+ QTest::addColumn<bool>("needsCopyConstruction");
+ QTest::addColumn<bool>("needsDestruction");
QTest::addColumn<bool>("isPointerToQObject");
QTest::addColumn<bool>("isEnum");
QTest::addColumn<bool>("isQmlList");
+ // invalid ids.
+ QTest::newRow("-1") << -1 << false << false << false << false << false << false << false;
+ QTest::newRow("-124125534") << -124125534 << false << false << false << false << false << false << false;
+ QTest::newRow("124125534") << 124125534 << false << false << false << false << false << false << false;
+
#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType) \
- QTest::newRow(#RealType) << MetaTypeId \
- << bool(QTypeInfo<RealType>::isRelocatable) \
- << bool(QTypeInfo<RealType>::isComplex) \
- << bool(QtPrivate::IsPointerToTypeDerivedFromQObject<RealType>::Value) \
- << bool(std::is_enum<RealType>::value) \
- << false;
+ addFlagsRow<RealType>(#RealType, MetaTypeId);
+QT_FOR_EACH_STATIC_PRIMITIVE_NON_VOID_TYPE(ADD_METATYPE_TEST_ROW)
QT_FOR_EACH_STATIC_CORE_CLASS(ADD_METATYPE_TEST_ROW)
QT_FOR_EACH_STATIC_PRIMITIVE_POINTER(ADD_METATYPE_TEST_ROW)
QT_FOR_EACH_STATIC_CORE_POINTER(ADD_METATYPE_TEST_ROW)
#undef ADD_METATYPE_TEST_ROW
- QTest::newRow("TestSpace::Foo") << ::qMetaTypeId<TestSpace::Foo>() << false << true << false << false << false;
- QTest::newRow("Whity<double>") << ::qMetaTypeId<Whity<double> >() << true << true << false << false << false;
- QTest::newRow("CustomMovable") << ::qMetaTypeId<CustomMovable>() << true << true << false << false << false;
- QTest::newRow("CustomObject*") << ::qMetaTypeId<CustomObject*>() << true << false << true << false << false;
- QTest::newRow("CustomMultiInheritanceObject*") << ::qMetaTypeId<CustomMultiInheritanceObject*>() << true << false << true << false << false;
- QTest::newRow("QPair<C,C>") << ::qMetaTypeId<QPair<C,C> >() << false << true << false << false << false;
- QTest::newRow("QPair<C,M>") << ::qMetaTypeId<QPair<C,M> >() << false << true << false << false << false;
- QTest::newRow("QPair<C,P>") << ::qMetaTypeId<QPair<C,P> >() << false << true << false << false << false;
- QTest::newRow("QPair<M,C>") << ::qMetaTypeId<QPair<M,C> >() << false << true << false << false << false;
- QTest::newRow("QPair<M,M>") << ::qMetaTypeId<QPair<M,M> >() << true << true << false << false << false;
- QTest::newRow("QPair<M,P>") << ::qMetaTypeId<QPair<M,P> >() << true << true << false << false << false;
- QTest::newRow("QPair<P,C>") << ::qMetaTypeId<QPair<P,C> >() << false << true << false << false << false;
- QTest::newRow("QPair<P,M>") << ::qMetaTypeId<QPair<P,M> >() << true << true << false << false << false;
- QTest::newRow("QPair<P,P>") << ::qMetaTypeId<QPair<P,P> >() << true << false << false << false << false;
- QTest::newRow("FlagsDataEnum") << ::qMetaTypeId<FlagsDataEnum>() << true << false << false << true << false;
-
- // invalid ids.
- QTest::newRow("-1") << -1 << false << false << false << false << false;
- QTest::newRow("-124125534") << -124125534 << false << false << false << false << false;
- QTest::newRow("124125534") << 124125534 << false << false << false << false << false;
+ addFlagsRow<TestSpace::Foo>("TestSpace::Foo");
+ addFlagsRow<Whity<double> >("Whity<double> ");
+ addFlagsRow<CustomMovable>("CustomMovable");
+ addFlagsRow<CustomObject*>("CustomObject*");
+ addFlagsRow<CustomMultiInheritanceObject*>("CustomMultiInheritanceObject*");
+ addFlagsRow<QPair<C,C> >("QPair<C,C>");
+ addFlagsRow<QPair<C,M> >("QPair<C,M>");
+ addFlagsRow<QPair<C,P> >("QPair<C,P>");
+ addFlagsRow<QPair<M,C> >("QPair<M,C>");
+ addFlagsRow<QPair<M,M> >("QPair<M,M>");
+ addFlagsRow<QPair<M,P> >("QPair<M,P>");
+ addFlagsRow<QPair<P,C> >("QPair<P,C>");
+ addFlagsRow<QPair<P,M> >("QPair<P,M>");
+ addFlagsRow<QPair<P,P> >("QPair<P,P>");
+ addFlagsRow<FlagsDataEnum>("FlagsDataEnum");
}
void tst_QMetaType::flags()
{
QFETCH(int, type);
- QFETCH(bool, isMovable);
- QFETCH(bool, isComplex);
+ QFETCH(bool, isRelocatable);
+ QFETCH(bool, needsConstruction);
+ QFETCH(bool, needsCopyConstruction);
+ QFETCH(bool, needsDestruction);
QFETCH(bool, isPointerToQObject);
QFETCH(bool, isEnum);
QFETCH(bool, isQmlList);
- QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::NeedsConstruction), isComplex);
- QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::NeedsDestruction), isComplex);
- QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::RelocatableType), isMovable);
- QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::PointerToQObject), isPointerToQObject);
- QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::IsEnumeration), isEnum);
- QCOMPARE(bool(QMetaType::typeFlags(type) & QMetaType::IsQmlList), isQmlList);
+ ignoreInvalidMetaTypeWarning(type);
+ QMetaType meta(type);
+
+ QCOMPARE(bool(meta.flags() & QMetaType::NeedsConstruction), needsConstruction);
+ QCOMPARE(bool(meta.flags() & QMetaType::NeedsCopyConstruction), needsCopyConstruction);
+ QCOMPARE(bool(meta.flags() & QMetaType::NeedsDestruction), needsDestruction);
+ QCOMPARE(bool(meta.flags() & QMetaType::RelocatableType), isRelocatable);
+ QCOMPARE(bool(meta.flags() & QMetaType::PointerToQObject), isPointerToQObject);
+ QCOMPARE(bool(meta.flags() & QMetaType::IsEnumeration), isEnum);
+ QCOMPARE(bool(meta.flags() & QMetaType::IsQmlList), isQmlList);
}
-void tst_QMetaType::flagsStaticLess_data()
+class NonDefaultConstructible
+{
+ NonDefaultConstructible(int) {}
+};
+
+struct MoveOnly
+{
+ MoveOnly() = default;
+ MoveOnly(const MoveOnly &) = delete;
+ MoveOnly(MoveOnly &&) = default;
+ MoveOnly &operator=(const MoveOnly &) = delete;
+ MoveOnly &operator=(MoveOnly &&) = default;
+};
+
+class Indestructible
+{
+protected:
+ ~Indestructible() {}
+};
+
+template <typename T> static void addFlags2Row(QMetaType metaType = QMetaType::fromType<T>())
+{
+ QTest::newRow(metaType.name() ? metaType.name() : "UnknownType")
+ << metaType
+ << std::is_default_constructible_v<T>
+ << std::is_copy_constructible_v<T>
+ << std::is_move_constructible_v<T>
+ << std::is_destructible_v<T>
+ << (QTypeTraits::has_operator_equal<T>::value || QTypeTraits::has_operator_less_than<T>::value)
+ << QTypeTraits::has_operator_less_than<T>::value;
+};
+
+void tst_QMetaType::flags2_data()
{
- flags_data();
+ QTest::addColumn<QMetaType>("type");
+ QTest::addColumn<bool>("isDefaultConstructible");
+ QTest::addColumn<bool>("isCopyConstructible");
+ QTest::addColumn<bool>("isMoveConstructible");
+ QTest::addColumn<bool>("isDestructible");
+ QTest::addColumn<bool>("isEqualityComparable");
+ QTest::addColumn<bool>("isOrdered");
+
+ addFlags2Row<void>(QMetaType());
+ addFlags2Row<void>();
+
+#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType) \
+ addFlags2Row<RealType>();
+ QT_FOR_EACH_STATIC_PRIMITIVE_NON_VOID_TYPE(ADD_METATYPE_TEST_ROW)
+ QT_FOR_EACH_STATIC_CORE_CLASS(ADD_METATYPE_TEST_ROW)
+ QT_FOR_EACH_STATIC_PRIMITIVE_POINTER(ADD_METATYPE_TEST_ROW)
+ QT_FOR_EACH_STATIC_CORE_POINTER(ADD_METATYPE_TEST_ROW)
+#undef ADD_METATYPE_TEST_ROW
+
+ addFlags2Row<NonDefaultConstructible>();
+ addFlags2Row<MoveOnly>();
+ addFlags2Row<QObject>();
+ addFlags2Row<Indestructible>();
}
-void tst_QMetaType::flagsStaticLess()
+void tst_QMetaType::flags2()
{
- QFETCH(int, type);
- QFETCH(bool, isMovable);
- QFETCH(bool, isComplex);
+ QFETCH(QMetaType, type);
+ QFETCH(bool, isDefaultConstructible);
+ QFETCH(bool, isCopyConstructible);
+ QFETCH(bool, isMoveConstructible);
+ QFETCH(bool, isDestructible);
+ QFETCH(bool, isEqualityComparable);
+ QFETCH(bool, isOrdered);
- int flags = QMetaType(type).flags();
- QCOMPARE(bool(flags & QMetaType::NeedsConstruction), isComplex);
- QCOMPARE(bool(flags & QMetaType::NeedsDestruction), isComplex);
- QCOMPARE(bool(flags & QMetaType::RelocatableType), isMovable);
+ QCOMPARE(type.isDefaultConstructible(), isDefaultConstructible);
+ QCOMPARE(type.isCopyConstructible(), isCopyConstructible);
+ QCOMPARE(type.isMoveConstructible(), isMoveConstructible);
+ QCOMPARE(type.isDestructible(), isDestructible);
+ QCOMPARE(type.isEqualityComparable(), isEqualityComparable);
+ QCOMPARE(type.isOrdered(), isOrdered);
}
void tst_QMetaType::flagsBinaryCompatibility6_0_data()
@@ -1080,7 +1220,7 @@ void tst_QMetaType::flagsBinaryCompatibility6_0_data()
QTest::addColumn<quint32>("flags");
QFile file(QFINDTESTDATA("typeFlags.bin"));
- file.open(QIODevice::ReadOnly);
+ QVERIFY(file.open(QIODevice::ReadOnly));
QList<quint32> buffer;
QDataStream ds(&file);
ds >> buffer;
@@ -1091,7 +1231,7 @@ void tst_QMetaType::flagsBinaryCompatibility6_0_data()
if (id > QMetaType::LastCoreType)
continue; // We do not link against QtGui, so we do longer consider such type as registered
QVERIFY2(QMetaType::isRegistered(id), "A type could not be removed in BC way");
- QTest::newRow(QMetaType::typeName(id)) << id << flags;
+ QTest::newRow(QMetaType(id).name()) << id << flags;
}
}
@@ -1100,16 +1240,14 @@ void tst_QMetaType::flagsBinaryCompatibility6_0()
QFETCH(quint32, id);
QFETCH(quint32, flags);
- const auto currentFlags = QMetaType::typeFlags(id);
+ const auto currentFlags = QMetaType(id).flags();
auto expectedFlags = QMetaType::TypeFlags(flags);
- if (!(currentFlags.testFlag(QMetaType::NeedsConstruction) && currentFlags.testFlag(QMetaType::NeedsDestruction))) {
- if (expectedFlags.testFlag(QMetaType::NeedsConstruction) && expectedFlags.testFlag(QMetaType::NeedsDestruction)) {
- // If type changed from RELOCATABLE to trivial, that's fine
- expectedFlags.setFlag(QMetaType::NeedsConstruction, false);
- expectedFlags.setFlag(QMetaType::NeedsDestruction, false);
- }
- }
- quint32 mask_5_0 = 0x1fb; // Only compare the values that were already defined in 5.0
+
+ // Only compare the values that were already defined in 5.0.
+ // In 6.5, some types lost NeedsConstruction and NeedsDestruction, but
+ // that's acceptable if that's because they were trivial
+ quint32 mask_5_0 = 0x1ff & ~quint32(QMetaType::NeedsConstruction | QMetaType::NeedsDestruction
+ | QMetaType::RelocatableType);
QCOMPARE(quint32(currentFlags) & mask_5_0, quint32(expectedFlags) & mask_5_0);
}
@@ -1123,42 +1261,61 @@ template<int ID>
static void testConstructHelper()
{
typedef typename MetaEnumToType<ID>::Type Type;
+ auto expected = std::unique_ptr<Type>(DefaultValueFactory<ID>::create());
QMetaType info(ID);
int size = info.sizeOf();
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
void *storage1 = qMallocAligned(size, alignof(Type));
- void *actual1 = QMetaType::construct(ID, storage1, /*copy=*/0);
- void *storage2 = qMallocAligned(size, alignof(Type));
- void *actual2 = info.construct(storage2, /*copy=*/0);
+ void *actual1 = QMetaType::construct(ID, storage1, /*copy=*/nullptr);
+ auto cleanup1 = qScopeGuard([storage1, actual1]() {
+ QMetaType::destruct(ID, actual1);
+ qFreeAligned(storage1);
+ });
QCOMPARE(actual1, storage1);
- QCOMPARE(actual2, storage2);
- Type *expected = DefaultValueFactory<ID>::create();
QCOMPARE(*static_cast<Type *>(actual1), *expected);
+ QCOMPARE(QMetaType::construct(ID, nullptr, /*copy=*/nullptr), nullptr);
+ QMetaType::destruct(ID, nullptr);
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 0)
+ void *storage2 = qMallocAligned(size, alignof(Type));
+ void *actual2 = info.construct(storage2, /*copy=*/nullptr);
+ auto cleanup2 = qScopeGuard([&info, storage2, actual2]() {
+ info.destruct(actual2);
+ qFreeAligned(storage2);
+ });
+ QCOMPARE(actual2, storage2);
QCOMPARE(*static_cast<Type *>(actual2), *expected);
- delete expected;
- QMetaType::destruct(ID, actual1);
- qFreeAligned(storage1);
- info.destruct(actual2);
- qFreeAligned(storage2);
-
- QVERIFY(QMetaType::construct(ID, 0, /*copy=*/0) == 0);
- QMetaType::destruct(ID, 0);
-
- QVERIFY(info.construct(0, /*copy=*/0) == 0);
- info.destruct(0);
+ QCOMPARE(info.construct(nullptr, /*copy=*/nullptr), nullptr);
+ info.destruct(nullptr);
}
template<>
void testConstructHelper<QMetaType::Void>()
{
- /*int size = */ QMetaType::sizeOf(QMetaType::Void);
- void *storage = 0;
- void *actual = QMetaType::construct(QMetaType::Void, storage, /*copy=*/0);
- QCOMPARE(actual, storage);
- QMetaType::destruct(QMetaType::Void, actual);
- qFreeAligned(storage);
-
- QVERIFY(QMetaType::construct(QMetaType::Void, 0, /*copy=*/0) == 0);
- QMetaType::destruct(QMetaType::Void, 0);
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ void *storage1 = nullptr;
+ void *actual1 = QMetaType::construct(QMetaType::Void, storage1, /*copy=*/nullptr);
+ auto cleanup1 = qScopeGuard([storage1, actual1]() {
+ QMetaType::destruct(QMetaType::Void, actual1);
+ qFreeAligned(storage1);
+ });
+ QCOMPARE(actual1, storage1);
+ QCOMPARE(QMetaType::construct(QMetaType::Void, nullptr, /*copy=*/nullptr), nullptr);
+ QMetaType::destruct(QMetaType::Void, nullptr);
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 0)
+ QMetaType info(QMetaType::Void);
+ void *storage2 = nullptr;
+ void *actual2 = info.construct(storage2, /*copy=*/nullptr);
+ auto cleanup2 = qScopeGuard([&info, storage2, actual2]() {
+ info.destruct(actual2);
+ qFreeAligned(storage2);
+ });
+ QCOMPARE(actual2, storage2);
+ QVERIFY(info.construct(nullptr, /*copy=*/nullptr) == nullptr);
+ info.destruct(nullptr);
}
void tst_QMetaType::construct()
@@ -1187,11 +1344,137 @@ FOR_EACH_CORE_METATYPE(RETURN_CONSTRUCT_FUNCTION)
TypeTestFunctionGetter::get(type)();
}
+
+namespace TriviallyConstructibleTests {
+
+enum Enum0 {};
+enum class Enum1 {};
+
+static_assert(QTypeInfo<int>::isValueInitializationBitwiseZero);
+static_assert(QTypeInfo<double>::isValueInitializationBitwiseZero);
+static_assert(QTypeInfo<Enum0>::isValueInitializationBitwiseZero);
+static_assert(QTypeInfo<Enum1>::isValueInitializationBitwiseZero);
+static_assert(QTypeInfo<int *>::isValueInitializationBitwiseZero);
+static_assert(QTypeInfo<void *>::isValueInitializationBitwiseZero);
+static_assert(QTypeInfo<std::nullptr_t>::isValueInitializationBitwiseZero);
+
+struct A {};
+struct B { B() {} };
+struct C { ~C() {} };
+struct D { D(int) {} };
+struct E { E() {} ~E() {} };
+struct F { int i; };
+struct G { G() : i(0) {} int i; };
+struct H { constexpr H() : i(0) {} int i; };
+struct I { I() : i(42) {} int i; };
+struct J { constexpr J() : i(42) {} int i; };
+struct K { K() : i(0) {} ~K() {} int i; };
+
+static_assert(!QTypeInfo<A>::isValueInitializationBitwiseZero);
+static_assert(!QTypeInfo<B>::isValueInitializationBitwiseZero);
+static_assert(!QTypeInfo<C>::isValueInitializationBitwiseZero);
+static_assert(!QTypeInfo<D>::isValueInitializationBitwiseZero);
+static_assert(!QTypeInfo<E>::isValueInitializationBitwiseZero);
+static_assert(!QTypeInfo<F>::isValueInitializationBitwiseZero);
+static_assert(!QTypeInfo<G>::isValueInitializationBitwiseZero);
+static_assert(!QTypeInfo<H>::isValueInitializationBitwiseZero);
+static_assert(!QTypeInfo<I>::isValueInitializationBitwiseZero);
+static_assert(!QTypeInfo<J>::isValueInitializationBitwiseZero);
+static_assert(!QTypeInfo<K>::isValueInitializationBitwiseZero);
+
+} // namespace TriviallyConstructibleTests
+
+// Value-initializing these trivially constructible types cannot be achieved by
+// memset(0) into their storage. For instance, on Itanium, a pointer to a data
+// member needs to be value-initialized by setting it to -1.
+
+// Fits into QVariant
+struct TrivialTypeNotZeroInitableSmall {
+ int TrivialTypeNotZeroInitableSmall::*pdm;
+};
+
+static_assert(std::is_trivially_default_constructible_v<TrivialTypeNotZeroInitableSmall>);
+static_assert(!QTypeInfo<TrivialTypeNotZeroInitableSmall>::isValueInitializationBitwiseZero);
+static_assert(sizeof(TrivialTypeNotZeroInitableSmall) < sizeof(QVariant)); // also checked more thoroughly below
+
+// Does not fit into QVariant internal storage
+struct TrivialTypeNotZeroInitableBig {
+ int a;
+ double b;
+ char c;
+ int array[42];
+ void (TrivialTypeNotZeroInitableBig::*pmf)();
+ int TrivialTypeNotZeroInitableBig::*pdm;
+};
+
+static_assert(std::is_trivially_default_constructible_v<TrivialTypeNotZeroInitableBig>);
+static_assert(!QTypeInfo<TrivialTypeNotZeroInitableSmall>::isValueInitializationBitwiseZero);
+static_assert(sizeof(TrivialTypeNotZeroInitableBig) > sizeof(QVariant)); // also checked more thoroughly below
+
+void tst_QMetaType::defaultConstructTrivial_QTBUG_109594()
+{
+ // MSVC miscompiles value-initialization of pointers to data members,
+ // https://developercommunity.visualstudio.com/t/Pointer-to-data-member-is-not-initialize/10238905
+ {
+ QMetaType mt = QMetaType::fromType<TrivialTypeNotZeroInitableSmall>();
+ QVERIFY(mt.isDefaultConstructible());
+ auto ptr = static_cast<TrivialTypeNotZeroInitableSmall *>(mt.create());
+ const auto cleanup = qScopeGuard([=] {
+ mt.destroy(ptr);
+ });
+#ifdef Q_CC_MSVC_ONLY
+ QEXPECT_FAIL("", "MSVC compiler bug", Continue);
+#endif
+ QCOMPARE(ptr->pdm, nullptr);
+
+ QVariant v(mt);
+ QVERIFY(QVariant::Private::canUseInternalSpace(mt.iface()));
+ auto obj = v.value<TrivialTypeNotZeroInitableSmall>();
+#ifdef Q_CC_MSVC_ONLY
+ QEXPECT_FAIL("", "MSVC compiler bug", Continue);
+#endif
+ QCOMPARE(obj.pdm, nullptr);
+ }
+
+ {
+ QMetaType mt = QMetaType::fromType<TrivialTypeNotZeroInitableBig>();
+ QVERIFY(mt.isDefaultConstructible());
+ auto ptr = static_cast<TrivialTypeNotZeroInitableBig *>(mt.create());
+ const auto cleanup = qScopeGuard([=] {
+ mt.destroy(ptr);
+ });
+ QCOMPARE(ptr->a, 0);
+ QCOMPARE(ptr->b, 0.0);
+ QCOMPARE(ptr->c, '\0');
+ QCOMPARE(ptr->pmf, nullptr);
+ for (int i : ptr->array)
+ QCOMPARE(i, 0);
+#ifdef Q_CC_MSVC_ONLY
+ QEXPECT_FAIL("", "MSVC compiler bug", Continue);
+#endif
+ QCOMPARE(ptr->pdm, nullptr);
+
+ QVariant v(mt);
+ QVERIFY(!QVariant::Private::canUseInternalSpace(mt.iface()));
+ auto obj = v.value<TrivialTypeNotZeroInitableBig>();
+ QCOMPARE(obj.a, 0);
+ QCOMPARE(obj.b, 0.0);
+ QCOMPARE(obj.c, '\0');
+ QCOMPARE(obj.pmf, nullptr);
+ for (int i : obj.array)
+ QCOMPARE(i, 0);
+#ifdef Q_CC_MSVC_ONLY
+ QEXPECT_FAIL("", "MSVC compiler bug", Continue);
+#endif
+ QCOMPARE(obj.pdm, nullptr);
+ }
+}
+
void tst_QMetaType::typedConstruct()
{
auto testMetaObjectWriteOnGadget = [](QVariant &gadget, const QList<GadgetPropertyType> &properties)
{
- auto metaObject = QMetaType::metaObjectForType(gadget.userType());
+ auto metaObject = QMetaType(gadget.userType()).metaObject();
QVERIFY(metaObject != nullptr);
QCOMPARE(metaObject->methodCount(), 0);
QCOMPARE(metaObject->propertyCount(), properties.size());
@@ -1205,7 +1488,7 @@ void tst_QMetaType::typedConstruct()
auto testMetaObjectReadOnGadget = [](QVariant gadget, const QList<GadgetPropertyType> &properties)
{
- auto metaObject = QMetaType::metaObjectForType(gadget.userType());
+ auto metaObject = QMetaType(gadget.userType()).metaObject();
QVERIFY(metaObject != nullptr);
QCOMPARE(metaObject->methodCount(), 0);
QCOMPARE(metaObject->propertyCount(), properties.size());
@@ -1213,7 +1496,7 @@ void tst_QMetaType::typedConstruct()
auto prop = metaObject->property(i);
QCOMPARE(properties[i].name, prop.name());
QCOMPARE(properties[i].type, prop.typeName());
- if (!QMetaType::typeFlags(prop.userType()).testFlag(QMetaType::IsGadget))
+ if (!QMetaType(prop.userType()).flags().testFlag(QMetaType::IsGadget))
QCOMPARE(properties[i].testData, prop.readOnGadget(gadget.constData()));
}
};
@@ -1225,7 +1508,7 @@ void tst_QMetaType::typedConstruct()
};
registerGadget("DynamicGadget1", dynamicGadget1);
- QVariant testGadget1(QMetaType(QMetaType::type("DynamicGadget1")));
+ QVariant testGadget1(QMetaType::fromName("DynamicGadget1"));
testMetaObjectWriteOnGadget(testGadget1, dynamicGadget1);
testMetaObjectReadOnGadget(testGadget1, dynamicGadget1);
@@ -1237,10 +1520,10 @@ void tst_QMetaType::typedConstruct()
{"DynamicGadget1", "dynamicGadget1_prop", testGadget1}
};
registerGadget("DynamicGadget2", dynamicGadget2);
- QVariant testGadget2(QMetaType(QMetaType::type("DynamicGadget2")));
+ QVariant testGadget2(QMetaType::fromName("DynamicGadget2"));
testMetaObjectWriteOnGadget(testGadget2, dynamicGadget2);
testMetaObjectReadOnGadget(testGadget2, dynamicGadget2);
- auto g2mo = QMetaType::metaObjectForType(testGadget2.userType());
+ auto g2mo = QMetaType(testGadget2.userType()).metaObject();
auto dynamicGadget1_prop = g2mo->property(g2mo->indexOfProperty("dynamicGadget1_prop"));
testMetaObjectReadOnGadget(dynamicGadget1_prop.readOnGadget(testGadget2.constData()), dynamicGadget1);
@@ -1272,7 +1555,7 @@ void tst_QMetaType::typedConstruct()
s_managedTypes[podTypeId] = qMakePair(dynamicGadgetProperties, std::shared_ptr<QMetaObject>{});
// Test POD
- QCOMPARE(podTypeId, QMetaType::type(podTypeName));
+ QCOMPARE(podTypeId, QMetaType::fromName(podTypeName).id());
QVariant podVariant{QMetaType(podTypeId)};
QCOMPARE(myPodTesData, static_cast<const GenericPODType *>(reinterpret_cast<const BaseGenericType *>(podVariant.constData()))->podData);
@@ -1286,27 +1569,32 @@ template<int ID>
static void testConstructCopyHelper()
{
typedef typename MetaEnumToType<ID>::Type Type;
- Type *expected = TestValueFactory<ID>::create();
+ auto expected = std::unique_ptr<Type>(TestValueFactory<ID>::create());
QMetaType info(ID);
- int size = QMetaType::sizeOf(ID);
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ const int size = QMetaType::sizeOf(ID);
QCOMPARE(info.sizeOf(), size);
void *storage1 = qMallocAligned(size, alignof(Type));
- void *actual1 = QMetaType::construct(ID, storage1, expected);
- void *storage2 = qMallocAligned(size, alignof(Type));
- void *actual2 = info.construct(storage2, expected);
+ void *actual1 = QMetaType::construct(ID, storage1, expected.get());
+ auto cleanup1 = qScopeGuard([storage1, actual1]() {
+ QMetaType::destruct(ID, actual1);
+ qFreeAligned(storage1);
+ });
QCOMPARE(actual1, storage1);
- QCOMPARE(actual2, storage2);
QCOMPARE(*static_cast<Type *>(actual1), *expected);
+ QCOMPARE(QMetaType::construct(ID, nullptr, nullptr), nullptr);
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 0)
+ void *storage2 = qMallocAligned(info.sizeOf(), alignof(Type));
+ void *actual2 = info.construct(storage2, expected.get());
+ auto cleanup2 = qScopeGuard([&info, storage2, actual2]() {
+ info.destruct(actual2);
+ qFreeAligned(storage2);
+ });
+ QCOMPARE(actual2, storage2);
QCOMPARE(*static_cast<Type *>(actual2), *expected);
- QMetaType::destruct(ID, actual1);
- qFreeAligned(storage1);
- info.destruct(actual2);
- qFreeAligned(storage2);
-
- QVERIFY(QMetaType::construct(ID, 0, expected) == 0);
- QVERIFY(info.construct(0, expected) == 0);
-
- delete expected;
+ QCOMPARE(info.construct(nullptr, expected.get()), nullptr);
}
template<>
@@ -1314,14 +1602,28 @@ void testConstructCopyHelper<QMetaType::Void>()
{
typedef MetaEnumToType<QMetaType::Void>::Type Type;
Type *expected = TestValueFactory<QMetaType::Void>::create();
- /* int size = */QMetaType::sizeOf(QMetaType::Void);
- void *storage = 0;
- void *actual = QMetaType::construct(QMetaType::Void, storage, expected);
- QCOMPARE(actual, storage);
- QMetaType::destruct(QMetaType::Void, actual);
- qFreeAligned(storage);
-
- QVERIFY(QMetaType::construct(QMetaType::Void, 0, expected) == 0);
+ QCOMPARE(expected, nullptr); // we do not need to delete it
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ void *storage1 = nullptr;
+ void *actual1 = QMetaType::construct(QMetaType::Void, storage1, expected);
+ auto cleanup1 = qScopeGuard([storage1, actual1]() {
+ QMetaType::destruct(QMetaType::Void, actual1);
+ qFreeAligned(storage1);
+ });
+ QCOMPARE(actual1, storage1);
+ QCOMPARE(QMetaType::construct(QMetaType::Void, nullptr, nullptr), nullptr);
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 0)
+ QMetaType info(QMetaType::Void);
+ void *storage2 = nullptr;
+ void *actual2 = info.construct(storage2, expected);
+ auto cleanup2 = qScopeGuard([&info, storage2, actual2]() {
+ info.destruct(actual2);
+ qFreeAligned(storage2);
+ });
+ QCOMPARE(actual2, storage2);
+ QCOMPARE(info.construct(nullptr, expected), nullptr);
}
void tst_QMetaType::constructCopy_data()
@@ -1338,7 +1640,7 @@ void tst_QMetaType::constructCopy()
switch (type) {
case QMetaType::UnknownType:
return []() {
- char buf[1], buf2[1];
+ char buf[1], buf2[1] = {};
QCOMPARE(QMetaType().construct(&buf, &buf2), nullptr);
};
#define RETURN_CONSTRUCT_COPY_FUNCTION(MetaTypeName, MetaTypeId, RealType) \
@@ -1370,7 +1672,7 @@ void tst_QMetaType::selfCompare_data()
QTest::newRow("unknown-type") << int(QMetaType::UnknownType) << orderingFor(QMetaType::UnknownType);
#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType) \
- QTest::newRow(QMetaType::typeName(QMetaType::MetaTypeName)) << int(QMetaType::MetaTypeName) << orderingFor(QMetaType::MetaTypeName);
+ QTest::newRow(QMetaType(QMetaType::MetaTypeName).name()) << int(QMetaType::MetaTypeName) << orderingFor(QMetaType::MetaTypeName);
FOR_EACH_CORE_METATYPE(ADD_METATYPE_TEST_ROW)
#undef ADD_METATYPE_TEST_ROW
}
@@ -1412,42 +1714,49 @@ Q_DECLARE_METATYPE(CustomString) //this line is useless
void tst_QMetaType::typedefs()
{
- QCOMPARE(QMetaType::type("long long"), int(QMetaType::LongLong));
- QCOMPARE(QMetaType::type("unsigned long long"), int(QMetaType::ULongLong));
- QCOMPARE(QMetaType::type("qint8"), int(QMetaType::SChar));
- QCOMPARE(QMetaType::type("quint8"), int(QMetaType::UChar));
- QCOMPARE(QMetaType::type("qint16"), int(QMetaType::Short));
- QCOMPARE(QMetaType::type("quint16"), int(QMetaType::UShort));
- QCOMPARE(QMetaType::type("qint32"), int(QMetaType::Int));
- QCOMPARE(QMetaType::type("quint32"), int(QMetaType::UInt));
- QCOMPARE(QMetaType::type("qint64"), int(QMetaType::LongLong));
- QCOMPARE(QMetaType::type("quint64"), int(QMetaType::ULongLong));
+ QCOMPARE(QMetaType::fromName("long long").id(), int(QMetaType::LongLong));
+ QCOMPARE(QMetaType::fromName("unsigned long long").id(), int(QMetaType::ULongLong));
+ QCOMPARE(QMetaType::fromName("qint8").id(), int(QMetaType::SChar));
+ QCOMPARE(QMetaType::fromName("quint8").id(), int(QMetaType::UChar));
+ QCOMPARE(QMetaType::fromName("qint16").id(), int(QMetaType::Short));
+ QCOMPARE(QMetaType::fromName("quint16").id(), int(QMetaType::UShort));
+ QCOMPARE(QMetaType::fromName("qint32").id(), int(QMetaType::Int));
+ QCOMPARE(QMetaType::fromName("quint32").id(), int(QMetaType::UInt));
+ QCOMPARE(QMetaType::fromName("qint64").id(), int(QMetaType::LongLong));
+ QCOMPARE(QMetaType::fromName("quint64").id(), int(QMetaType::ULongLong));
// make sure the qreal typeId is the type id of the type it's defined to
- QCOMPARE(QMetaType::type("qreal"), ::qMetaTypeId<qreal>());
+ QCOMPARE(QMetaType::fromName("qreal").id(), ::qMetaTypeId<qreal>());
qRegisterMetaType<CustomString>("CustomString");
- QCOMPARE(QMetaType::type("CustomString"), ::qMetaTypeId<CustomString>());
+ QCOMPARE(QMetaType::fromName("CustomString").id(), ::qMetaTypeId<CustomString>());
typedef Whity<double> WhityDouble;
qRegisterMetaType<WhityDouble>("WhityDouble");
- QCOMPARE(QMetaType::type("WhityDouble"), ::qMetaTypeId<WhityDouble>());
+ QCOMPARE(QMetaType::fromName("WhityDouble").id(), ::qMetaTypeId<WhityDouble>());
}
+struct RegisterTypeType {};
+
void tst_QMetaType::registerType()
{
// Built-in
QCOMPARE(qRegisterMetaType<QString>("QString"), int(QMetaType::QString));
QCOMPARE(qRegisterMetaType<QString>("QString"), int(QMetaType::QString));
+ qRegisterMetaType(QMetaType::fromType<QString>());
// Custom
int fooId = qRegisterMetaType<TestSpace::Foo>("TestSpace::Foo");
QVERIFY(fooId >= int(QMetaType::User));
QCOMPARE(qRegisterMetaType<TestSpace::Foo>("TestSpace::Foo"), fooId);
+ qRegisterMetaType(QMetaType::fromType<TestSpace::Foo>());
int movableId = qRegisterMetaType<CustomMovable>("CustomMovable");
QVERIFY(movableId >= int(QMetaType::User));
QCOMPARE(qRegisterMetaType<CustomMovable>("CustomMovable"), movableId);
+ qRegisterMetaType(QMetaType::fromType<CustomMovable>());
+
+ // Aliases are deprecated
// Alias to built-in
typedef QString MyString;
@@ -1455,7 +1764,7 @@ void tst_QMetaType::registerType()
QCOMPARE(qRegisterMetaType<MyString>("MyString"), int(QMetaType::QString));
QCOMPARE(qRegisterMetaType<MyString>("MyString"), int(QMetaType::QString));
- QCOMPARE(QMetaType::type("MyString"), int(QMetaType::QString));
+ QCOMPARE(QMetaType::fromType<MyString>().id(), int(QMetaType::QString));
// Alias to custom type
typedef CustomMovable MyMovable;
@@ -1464,12 +1773,29 @@ void tst_QMetaType::registerType()
QCOMPARE(qRegisterMetaType<MyMovable>("MyMovable"), movableId);
QCOMPARE(qRegisterMetaType<MyMovable>("MyMovable"), movableId);
- QCOMPARE(QMetaType::type("MyMovable"), movableId);
+ QCOMPARE(QMetaType::fromType<MyMovable>().id(), movableId);
QCOMPARE(qRegisterMetaType<MyFoo>("MyFoo"), fooId);
QCOMPARE(qRegisterMetaType<MyFoo>("MyFoo"), fooId);
- QCOMPARE(QMetaType::type("MyFoo"), fooId);
+ QCOMPARE(QMetaType::fromType<MyFoo>().id(), fooId);
+
+ // this portion of the test can only be run once
+ static bool typeWasRegistered = false;
+ if (!typeWasRegistered) {
+ QMetaType mt = QMetaType::fromType<RegisterTypeType>();
+ QVERIFY(mt.isValid());
+ QCOMPARE_NE(mt.name(), nullptr);
+
+ QVERIFY(!mt.isRegistered());
+ QVERIFY(!QMetaType::fromName(mt.name()).isValid());
+
+ QCOMPARE_GT(qRegisterMetaType(mt), 0);
+ typeWasRegistered = true;
+
+ QVERIFY(mt.isRegistered());
+ QVERIFY(QMetaType::fromName(mt.name()).isValid());
+ }
}
class IsRegisteredDummyType { };
@@ -1490,7 +1816,7 @@ void tst_QMetaType::isRegistered_data()
// unknown types
QTest::newRow("-1") << -1 << false;
QTest::newRow("-42") << -42 << false;
- QTest::newRow("IsRegisteredDummyType + 1") << (dummyTypeId + 1) << false;
+ QTest::newRow("IsRegisteredDummyType + 1000") << (dummyTypeId + 1000) << false;
QTest::newRow("QMetaType::UnknownType") << int(QMetaType::UnknownType) << false;
}
@@ -1513,25 +1839,77 @@ Q_DECLARE_METATYPE(isEnumTest_Enum1)
void tst_QMetaType::isEnum()
{
int type0 = qRegisterMetaType<int>("int");
- QVERIFY((QMetaType::typeFlags(type0) & QMetaType::IsEnumeration) == 0);
+ QVERIFY((QMetaType(type0).flags() & QMetaType::IsEnumeration) == 0);
int type1 = qRegisterMetaType<isEnumTest_Enum0>("isEnumTest_Enum0");
- QVERIFY((QMetaType::typeFlags(type1) & QMetaType::IsEnumeration) == QMetaType::IsEnumeration);
+ QVERIFY((QMetaType(type1).flags() & QMetaType::IsEnumeration) == QMetaType::IsEnumeration);
int type2 = qRegisterMetaType<isEnumTest_Struct0>("isEnumTest_Struct0");
- QVERIFY((QMetaType::typeFlags(type2) & QMetaType::IsEnumeration) == 0);
+ QVERIFY((QMetaType(type2).flags() & QMetaType::IsEnumeration) == 0);
int type3 = qRegisterMetaType<isEnumTest_Enum0 *>("isEnumTest_Enum0 *");
- QVERIFY((QMetaType::typeFlags(type3) & QMetaType::IsEnumeration) == 0);
+ QVERIFY((QMetaType(type3).flags() & QMetaType::IsEnumeration) == 0);
int type4 = qRegisterMetaType<isEnumTest_Struct0::A>("isEnumTest_Struct0::A");
- QVERIFY((QMetaType::typeFlags(type4) & QMetaType::IsEnumeration) == QMetaType::IsEnumeration);
+ QVERIFY((QMetaType(type4).flags() & QMetaType::IsEnumeration) == QMetaType::IsEnumeration);
int type5 = ::qMetaTypeId<isEnumTest_Struct1>();
- QVERIFY((QMetaType::typeFlags(type5) & QMetaType::IsEnumeration) == 0);
+ QVERIFY((QMetaType(type5).flags() & QMetaType::IsEnumeration) == 0);
int type6 = ::qMetaTypeId<isEnumTest_Enum1>();
- QVERIFY((QMetaType::typeFlags(type6) & QMetaType::IsEnumeration) == QMetaType::IsEnumeration);
+ QVERIFY((QMetaType(type6).flags() & QMetaType::IsEnumeration) == QMetaType::IsEnumeration);
+}
+
+enum E1 : unsigned char {};
+enum E2 : qlonglong {};
+enum class E3 : unsigned short {};
+
+namespace myflags {
+
+ Q_NAMESPACE
+
+ enum Flag1 : int { A, B };
+ enum Flag2 : short { X, Y };
+
+ Q_DECLARE_FLAGS(Flags1, myflags::Flag1);
+ Q_FLAG_NS(Flags1)
+ Q_DECLARE_FLAGS(Flags2, myflags::Flag2);
+ Q_FLAG_NS(Flags2)
+
+}
+
+template <typename T>
+using getUnderlyingTypeNormalized = std::conditional_t<
+ std::is_signed_v<std::underlying_type_t<T>>,
+ typename QIntegerForSize<sizeof(T)>::Signed,
+ typename QIntegerForSize<sizeof(T)>::Unsigned
+>;
+
+void tst_QMetaType::underlyingType_data()
+{
+ QTest::addColumn<QMetaType>("source");
+ QTest::addColumn<QMetaType>("underlying");
+
+ QTest::newRow("invalid") << QMetaType() << QMetaType();
+ QTest::newRow("plain") << QMetaType::fromType<isEnumTest_Enum1>()
+ << QMetaType::fromType<getUnderlyingTypeNormalized<isEnumTest_Enum1>>();
+ QTest::newRow("uchar") << QMetaType::fromType<E1>()
+ << QMetaType::fromType<getUnderlyingTypeNormalized<E1>>();
+ QTest::newRow("long") << QMetaType::fromType<E2>()
+ << QMetaType::fromType<getUnderlyingTypeNormalized<E2>>();
+ QTest::newRow("class_ushort") << QMetaType::fromType<E3>()
+ << QMetaType::fromType<getUnderlyingTypeNormalized<E3>>();
+ QTest::newRow("flags_int") << QMetaType::fromType<myflags::Flags1>()
+ << QMetaType::fromType<int>();
+ QTest::newRow("flags_short") << QMetaType::fromType<myflags::Flags2>()
+ << QMetaType::fromType<int>(); // sic, not short!
+}
+
+void tst_QMetaType::underlyingType()
+{
+ QFETCH(QMetaType, source);
+ QFETCH(QMetaType, underlying);
+ QCOMPARE(source.underlyingType(), underlying);
}
void tst_QMetaType::isRegisteredStaticLess_data()
@@ -1543,9 +1921,16 @@ void tst_QMetaType::isRegisteredStaticLess()
{
QFETCH(int, typeId);
QFETCH(bool, registered);
+ ignoreInvalidMetaTypeWarning(typeId);
QCOMPARE(QMetaType(typeId).isRegistered(), registered);
}
+struct NotARegisteredType {};
+void tst_QMetaType::isNotRegistered()
+{
+ QVERIFY(!QMetaType::fromType<NotARegisteredType>().isRegistered());
+}
+
typedef QHash<int, uint> IntUIntHash;
Q_DECLARE_METATYPE(IntUIntHash)
typedef QMap<int, uint> IntUIntMap;
@@ -1811,7 +2196,7 @@ void tst_QMetaType::automaticTemplateRegistration_1()
sp.data()->setObjectName("Test name"); \
QVariant v = QVariant::fromValue(sp); \
QCOMPARE(v.typeName(), #SMARTPOINTER "<" #ELEMENT_TYPE ">"); \
- QVERIFY(QMetaType::typeFlags(::qMetaTypeId<SMARTPOINTER < ELEMENT_TYPE > >()) & QMetaType::FLAG_TEST); \
+ QVERIFY(QMetaType(::qMetaTypeId<SMARTPOINTER < ELEMENT_TYPE > >()).flags() & QMetaType::FLAG_TEST); \
SMARTPOINTER < QObject > extractedPtr = FROMVARIANTFUNCTION<QObject>(v); \
QCOMPARE(extractedPtr.data()->objectName(), sp.data()->objectName()); \
}
@@ -1829,7 +2214,7 @@ void tst_QMetaType::automaticTemplateRegistration_1()
sp.data()->setObjectName("Test name"); \
QVariant v = QVariant::fromValue(sp); \
QCOMPARE(v.typeName(), #SMARTPOINTER "<" #ELEMENT_TYPE ">"); \
- QVERIFY(QMetaType::typeFlags(::qMetaTypeId<SMARTPOINTER < ELEMENT_TYPE > >()) & QMetaType::FLAG_TEST); \
+ QVERIFY(QMetaType(::qMetaTypeId<SMARTPOINTER < ELEMENT_TYPE > >()).flags() & QMetaType::FLAG_TEST); \
SMARTPOINTER < QObject > extractedPtr = FROMVARIANTFUNCTION<QObject>(v); \
QCOMPARE(extractedPtr.data()->objectName(), sp.data()->objectName()); \
}
@@ -1849,7 +2234,7 @@ void tst_QMetaType::automaticTemplateRegistration_1()
sp.toStrongRef()->setObjectName("Test name"); \
QVariant v = QVariant::fromValue(sp); \
QCOMPARE(v.typeName(), "QWeakPointer<" #ELEMENT_TYPE ">"); \
- QVERIFY(QMetaType::typeFlags(::qMetaTypeId<QWeakPointer < ELEMENT_TYPE > >()) & QMetaType::FLAG_TEST); \
+ QVERIFY(QMetaType(::qMetaTypeId<QWeakPointer < ELEMENT_TYPE > >()).flags() & QMetaType::FLAG_TEST); \
}
TEST_WEAK_SMARTPOINTER(QObject, WeakPointerToQObject)
@@ -1902,38 +2287,39 @@ void tst_QMetaType::saveAndLoadBuiltin()
QFETCH(int, type);
QFETCH(bool, isStreamable);
- void *value = QMetaType::create(type);
+ QMetaType metaType(type);
+ void *value = metaType.create();
QByteArray ba;
QDataStream stream(&ba, QIODevice::ReadWrite);
- QCOMPARE(QMetaType::save(stream, type, value), isStreamable);
+ QCOMPARE(metaType.save(stream, value), isStreamable);
QCOMPARE(stream.status(), QDataStream::Ok);
if (isStreamable) {
- QVERIFY(QMetaType(type).hasRegisteredDataStreamOperators());
- QVERIFY(QMetaType::load(stream, type, value)); // Hmmm, shouldn't it return false?
+ QVERIFY(metaType.hasRegisteredDataStreamOperators());
+ QVERIFY(metaType.load(stream, value)); // Hmmm, shouldn't it return false?
// std::nullptr_t is nullary: it doesn't actually read anything
if (type != QMetaType::Nullptr)
QCOMPARE(stream.status(), QDataStream::ReadPastEnd);
} else {
- QVERIFY(!QMetaType(type).hasRegisteredDataStreamOperators());
+ QVERIFY(!metaType.hasRegisteredDataStreamOperators());
}
stream.device()->seek(0);
stream.resetStatus();
- QCOMPARE(QMetaType::load(stream, type, value), isStreamable);
+ QCOMPARE(metaType.load(stream, value), isStreamable);
QCOMPARE(stream.status(), QDataStream::Ok);
if (isStreamable) {
- QVERIFY(QMetaType::load(stream, type, value)); // Hmmm, shouldn't it return false?
+ QVERIFY(metaType.load(stream, value)); // Hmmm, shouldn't it return false?
// std::nullptr_t is nullary: it doesn't actually read anything
if (type != QMetaType::Nullptr)
QCOMPARE(stream.status(), QDataStream::ReadPastEnd);
}
- QMetaType::destroy(type, value);
+ metaType.destroy(value);
}
struct CustomStreamableType
@@ -1962,25 +2348,27 @@ void tst_QMetaType::saveAndLoadCustom()
t.a = 123;
int id = ::qMetaTypeId<CustomStreamableType>();
+ QMetaType metaType(id);
+
QByteArray ba;
QDataStream stream(&ba, QIODevice::ReadWrite);
- QVERIFY(QMetaType::save(stream, id, &t));
+ QVERIFY(metaType.save(stream, &t));
QCOMPARE(stream.status(), QDataStream::Ok);
CustomStreamableType t2;
t2.a = -1;
- QVERIFY(QMetaType::load(stream, id, &t2)); // Hmmm, shouldn't it return false?
+ QVERIFY(metaType.load(stream, &t2)); // Hmmm, shouldn't it return false?
QCOMPARE(stream.status(), QDataStream::ReadPastEnd);
QCOMPARE(t2.a, -1);
stream.device()->seek(0);
stream.resetStatus();
- QVERIFY(QMetaType::load(stream, id, &t2));
+ QVERIFY(metaType.load(stream, &t2));
QCOMPARE(stream.status(), QDataStream::Ok);
QCOMPARE(t2.a, t.a);
- QVERIFY(QMetaType::load(stream, id, &t2)); // Hmmm, shouldn't it return false?
+ QVERIFY(metaType.load(stream, &t2)); // Hmmm, shouldn't it return false?
QCOMPARE(stream.status(), QDataStream::ReadPastEnd);
}
@@ -2018,6 +2406,7 @@ void tst_QMetaType::metaObject_data()
QTest::newRow("unknown-type") << int(QMetaType::UnknownType) << static_cast<const QMetaObject *>(0) << false << false << false;
QTest::newRow("QObject") << int(QMetaType::QObjectStar) << &QObject::staticMetaObject << false << false << true;
QTest::newRow("QFile*") << ::qMetaTypeId<QFile*>() << &QFile::staticMetaObject << false << false << true;
+ QTest::newRow("MyObject") << ::qMetaTypeId<MyObject>() << &MyObject::staticMetaObject << false << false << false;
QTest::newRow("MyObject*") << ::qMetaTypeId<MyObject*>() << &MyObject::staticMetaObject << false << false << true;
QTest::newRow("int") << int(QMetaType::Int) << static_cast<const QMetaObject *>(0) << false << false << false;
QTest::newRow("QEasingCurve") << ::qMetaTypeId<QEasingCurve>() << &QEasingCurve::staticMetaObject << true << false << false;
@@ -2040,7 +2429,6 @@ void tst_QMetaType::metaObject()
QFETCH(bool, isGadgetPtr);
QFETCH(bool, isQObjectPtr);
- QCOMPARE(QMetaType::metaObjectForType(type), result);
QMetaType mt(type);
QCOMPARE(mt.metaObject(), result);
QCOMPARE(!!(mt.flags() & QMetaType::IsGadget), isGadget);
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.h b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.h
index 15fe3e6874..1694e49491 100644
--- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.h
+++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.h
@@ -1,32 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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>
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
#include <QTest>
#include "tst_qmetatype_common.h"
#include "tst_qvariant_common.h"
@@ -71,7 +45,9 @@ private:
private slots:
void defined();
+#if QT_CONFIG(thread)
void threadSafety();
+#endif
void namespaces();
void id();
void qMetaTypeId();
@@ -95,12 +71,13 @@ private slots:
void alignOf();
void flags_data();
void flags();
- void flagsStaticLess_data();
- void flagsStaticLess();
+ void flags2_data();
+ void flags2();
void flagsBinaryCompatibility6_0_data();
void flagsBinaryCompatibility6_0();
void construct_data();
void construct();
+ void defaultConstructTrivial_QTBUG_109594();
void typedConstruct();
void constructCopy_data();
void constructCopy();
@@ -112,7 +89,10 @@ private slots:
void isRegistered();
void isRegisteredStaticLess_data();
void isRegisteredStaticLess();
+ void isNotRegistered();
void isEnum();
+ void underlyingType_data();
+ void underlyingType();
void automaticTemplateRegistration_1();
void automaticTemplateRegistration_2(); // defined in tst_qmetatype3.cpp
void saveAndLoadBuiltin_data();
@@ -133,9 +113,22 @@ private slots:
void fromType();
void operatorEq_data();
void operatorEq();
+ void operatorEq2_data();
+ void operatorEq2();
+ void operatorEqAcrossLibs_data();
+ void operatorEqAcrossLibs();
void typesWithInaccessibleDTors();
void voidIsNotUnknown();
void typeNameNormalization();
+ void typeNameInQtPrivate();
+
+ // Tests for deprecated APIs
+#if QT_DEPRECATED_SINCE(6, 0)
+ void testDeprecatedGetters_data() { type_data(); }
+ void testDeprecatedGetters();
+ void testDeprecatedLoadSave_data() { saveAndLoadBuiltin_data(); }
+ void testDeprecatedLoadSave();
+#endif
};
template <typename T>
@@ -283,7 +276,7 @@ Q_DECLARE_METATYPE(CustomMovable);
const QVariant v = QVariant::fromValue(t); \
QByteArray tn = createTypeName(#CONTAINER "<", #__VA_ARGS__); \
const int expectedType = ::qMetaTypeId<CONTAINER< __VA_ARGS__ > >(); \
- const int type = QMetaType::type(tn); \
+ const int type = QMetaType::fromName(tn).id(); \
QCOMPARE(type, expectedType); \
QCOMPARE((QMetaType::fromType<CONTAINER< __VA_ARGS__ >>().id()), expectedType); \
}
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype2.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype2.cpp
index 025353d9c0..68bcb53056 100644
--- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype2.cpp
+++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype2.cpp
@@ -1,33 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "tst_qmetatype.h"
-#include "tst_qvariant_common.h"
+#include "tst_qmetatype_libs.h"
#include <QtCore/private/qmetaobjectbuilder_p.h>
@@ -55,6 +30,30 @@ struct ConvertFunctor
}
};
+template<typename T>
+struct OptionalWrapper
+{
+ std::optional<T> operator()(const T& t) const
+ {
+ if (!CustomConvertibleType::s_ok)
+ return std::nullopt;
+
+ return t;
+ }
+};
+
+template<typename From>
+struct ConvertFunctorWithOptional
+{
+ std::optional<CustomConvertibleType> operator()(const From& f) const
+ {
+ if (!CustomConvertibleType::s_ok)
+ return std::nullopt;
+
+ return CustomConvertibleType(QVariant::fromValue(f));
+ }
+};
+
template<typename From, typename To>
bool hasRegisteredConverterFunction()
{
@@ -106,6 +105,7 @@ void customTypeNotYetConvertible()
testCustomTypeNotYetConvertible<QLineF, CustomConvertibleType>();
testCustomTypeNotYetConvertible<QChar, CustomConvertibleType>();
testCustomTypeNotYetConvertible<CustomConvertibleType, CustomConvertibleType2>();
+ testCustomTypeNotYetConvertible<CustomConvertibleType, std::optional<CustomConvertibleType>>();
}
void registerCustomTypeConversions()
@@ -124,20 +124,22 @@ void registerCustomTypeConversions()
QVERIFY((QMetaType::registerConverter<CustomConvertibleType, QLine>(&CustomConvertibleType::convert<QLine>)));
QVERIFY((QMetaType::registerConverter<CustomConvertibleType, QLineF>(&CustomConvertibleType::convertOk<QLineF>)));
QVERIFY((QMetaType::registerConverter<CustomConvertibleType, QChar>(&CustomConvertibleType::convert<QChar>)));
- QVERIFY((QMetaType::registerConverter<QString, CustomConvertibleType>(ConvertFunctor<QString>())));
+ QVERIFY((QMetaType::registerConverter<QString, CustomConvertibleType>(ConvertFunctorWithOptional<QString>())));
QVERIFY((QMetaType::registerConverter<bool, CustomConvertibleType>(ConvertFunctor<bool>())));
- QVERIFY((QMetaType::registerConverter<int, CustomConvertibleType>(ConvertFunctor<int>())));
+ QVERIFY((QMetaType::registerConverter<int, CustomConvertibleType>(ConvertFunctorWithOptional<int>())));
QVERIFY((QMetaType::registerConverter<double, CustomConvertibleType>(ConvertFunctor<double>())));
- QVERIFY((QMetaType::registerConverter<float, CustomConvertibleType>(ConvertFunctor<float>())));
+ QVERIFY((QMetaType::registerConverter<float, CustomConvertibleType>(ConvertFunctorWithOptional<float>())));
QVERIFY((QMetaType::registerConverter<QRect, CustomConvertibleType>(ConvertFunctor<QRect>())));
- QVERIFY((QMetaType::registerConverter<QRectF, CustomConvertibleType>(ConvertFunctor<QRectF>())));
+ QVERIFY((QMetaType::registerConverter<QRectF, CustomConvertibleType>(ConvertFunctorWithOptional<QRectF>())));
QVERIFY((QMetaType::registerConverter<QPoint, CustomConvertibleType>(ConvertFunctor<QPoint>())));
- QVERIFY((QMetaType::registerConverter<QPointF, CustomConvertibleType>(ConvertFunctor<QPointF>())));
+ QVERIFY((QMetaType::registerConverter<QPointF, CustomConvertibleType>(ConvertFunctorWithOptional<QPointF>())));
QVERIFY((QMetaType::registerConverter<QSize, CustomConvertibleType>(ConvertFunctor<QSize>())));
- QVERIFY((QMetaType::registerConverter<QSizeF, CustomConvertibleType>(ConvertFunctor<QSizeF>())));
+ QVERIFY((QMetaType::registerConverter<QSizeF, CustomConvertibleType>(ConvertFunctorWithOptional<QSizeF>())));
QVERIFY((QMetaType::registerConverter<QLine, CustomConvertibleType>(ConvertFunctor<QLine>())));
- QVERIFY((QMetaType::registerConverter<QLineF, CustomConvertibleType>(ConvertFunctor<QLineF>())));
+ QVERIFY((QMetaType::registerConverter<QLineF, CustomConvertibleType>(ConvertFunctorWithOptional<QLineF>())));
QVERIFY((QMetaType::registerConverter<QChar, CustomConvertibleType>(ConvertFunctor<QChar>())));
+ QVERIFY((QMetaType::registerConverter<CustomConvertibleType, std::optional<CustomConvertibleType>>(OptionalWrapper<CustomConvertibleType>())));
+
QVERIFY((QMetaType::registerConverter<CustomConvertibleType, CustomConvertibleType2>()));
QTest::ignoreMessage(QtWarningMsg, "Type conversion already registered from type CustomConvertibleType to type CustomConvertibleType2");
QVERIFY((!QMetaType::registerConverter<CustomConvertibleType, CustomConvertibleType2>()));
@@ -196,7 +198,7 @@ void tst_QMetaType::convertCustomType()
QCOMPARE(v.toString(), ok ? testQString : QString());
QCOMPARE(v.value<QString>(), ok ? testQString : QString());
QVERIFY(CustomConvertibleType::s_value.canConvert<CustomConvertibleType>());
- QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toString()), testQString);
+ QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toString()), ok ? testQString : QString());
QFETCH(bool, testBool);
CustomConvertibleType::s_value = testBool;
@@ -208,7 +210,7 @@ void tst_QMetaType::convertCustomType()
CustomConvertibleType::s_value = testInt;
QCOMPARE(v.toInt(), ok ? testInt : 0);
QCOMPARE(v.value<int>(), ok ? testInt : 0);
- QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toInt()), testInt);
+ QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toInt()), ok ? testInt : 0);
QFETCH(double, testDouble);
CustomConvertibleType::s_value = testDouble;
@@ -220,7 +222,7 @@ void tst_QMetaType::convertCustomType()
CustomConvertibleType::s_value = testFloat;
QCOMPARE(v.toFloat(), ok ? testFloat : 0.0);
QCOMPARE(v.value<float>(), ok ? testFloat : 0.0);
- QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toFloat()), testFloat);
+ QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toFloat()), ok ? testFloat : 0);
QFETCH(QRect, testQRect);
CustomConvertibleType::s_value = testQRect;
@@ -232,7 +234,7 @@ void tst_QMetaType::convertCustomType()
CustomConvertibleType::s_value = testQRectF;
QCOMPARE(v.toRectF(), ok ? testQRectF : QRectF());
QCOMPARE(v.value<QRectF>(), ok ? testQRectF : QRectF());
- QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toRectF()), testQRectF);
+ QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toRectF()), ok ? testQRectF : QRectF());
QFETCH(QPoint, testQPoint);
CustomConvertibleType::s_value = testQPoint;
@@ -244,7 +246,7 @@ void tst_QMetaType::convertCustomType()
CustomConvertibleType::s_value = testQPointF;
QCOMPARE(v.toPointF(), ok ? testQPointF : QPointF());
QCOMPARE(v.value<QPointF>(), ok ? testQPointF : QPointF());
- QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toPointF()), testQPointF);
+ QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toPointF()), ok ? testQPointF : QPointF());
QFETCH(QSize, testQSize);
CustomConvertibleType::s_value = testQSize;
@@ -256,7 +258,7 @@ void tst_QMetaType::convertCustomType()
CustomConvertibleType::s_value = testQSizeF;
QCOMPARE(v.toSizeF(), ok ? testQSizeF : QSizeF());
QCOMPARE(v.value<QSizeF>(), ok ? testQSizeF : QSizeF());
- QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toSizeF()), testQSizeF);
+ QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toSizeF()), ok ? testQSizeF : QSizeF());
QFETCH(QLine, testQLine);
CustomConvertibleType::s_value = testQLine;
@@ -268,7 +270,7 @@ void tst_QMetaType::convertCustomType()
CustomConvertibleType::s_value = testQLineF;
QCOMPARE(v.toLineF(), ok ? testQLineF : QLineF());
QCOMPARE(v.value<QLineF>(), ok ? testQLineF : QLineF());
- QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toLineF()), testQLineF);
+ QCOMPARE((CustomConvertibleType::s_value.value<CustomConvertibleType>().m_foo.toLineF()), ok ? testQLineF : QLineF());
QFETCH(QChar, testQChar);
CustomConvertibleType::s_value = testQChar;
@@ -277,9 +279,21 @@ void tst_QMetaType::convertCustomType()
QFETCH(CustomConvertibleType, testCustom);
v = QVariant::fromValue(testCustom);
- QVERIFY(v.canConvert(::qMetaTypeId<CustomConvertibleType2>()));
+ QVERIFY(v.canConvert(QMetaType(::qMetaTypeId<CustomConvertibleType2>())));
QCOMPARE(v.value<CustomConvertibleType2>().m_foo, testCustom.m_foo);
+ // Check that converters that actually convert to std::optional<T> are not
+ // taken to indicate success or failure of the conversion. In these cases,
+ // the conversion must always succeed, even if the converter has returned a
+ // nullopt.
+ v = QVariant::fromValue(testCustom);
+ QVERIFY(v.canConvert(QMetaType::fromType<std::optional<CustomConvertibleType>>()));
+ QVERIFY(v.convert(QMetaType::fromType<std::optional<CustomConvertibleType>>()));
+ QCOMPARE(v.value<std::optional<CustomConvertibleType>>().has_value(), ok);
+ if (ok) {
+ QCOMPARE(v.value<std::optional<CustomConvertibleType>>().value().m_foo, testCustom.m_foo);
+ }
+
QFETCH(DerivedGadgetType, testDerived);
v = QVariant::fromValue(testDerived);
QCOMPARE(v.metaType(), QMetaType::fromType<DerivedGadgetType>());
@@ -437,6 +451,124 @@ void tst_QMetaType::operatorEq()
QCOMPARE(typeB == typeA, eq);
QCOMPARE(typeA != typeB, !eq);
QCOMPARE(typeB != typeA, !eq);
+
+#if !defined(Q_OS_WIN) && !defined(Q_OS_INTEGRITY)
+ // for built-in types or locally-defined types, this must also hold true
+ if (eq)
+ QCOMPARE(typeA.iface(), typeB.iface());
+#endif
+}
+
+void tst_QMetaType::operatorEq2_data()
+{
+ create_data();
+}
+
+void tst_QMetaType::operatorEq2()
+{
+ QFETCH(int, type);
+ QMetaType fromType1, fromType2;
+ QMetaType fromId1(type), fromId2(type);
+
+ switch (type) {
+ case QMetaType::UnknownType:
+ break;
+#define GET_METATYPE_FROM_TYPE(MetaTypeName, MetaTypeId, RealType) \
+ case QMetaType::MetaTypeName: \
+ fromType1 = QMetaType::fromType<RealType>(); \
+ fromType2 = QMetaType::fromType<RealType>(); \
+ break;
+FOR_EACH_CORE_METATYPE(GET_METATYPE_FROM_TYPE)
+#undef GET_METATYPE_FROM_TYPE
+ }
+
+ // sanity check
+ QCOMPARE(fromId1.id(), type);
+ QCOMPARE(fromId2.id(), type);
+
+ // confirm that they're all equal
+ QCOMPARE(fromId1, fromId2);
+ QCOMPARE(fromType1, fromType2);
+ QCOMPARE(fromType1, fromId1);
+ QCOMPARE(fromType2, fromId2);
+
+#if !defined(Q_OS_WIN) && !defined(Q_OS_INTEGRITY)
+ // for built-in types (other than void), this must be true
+ if (type != QMetaType::Void) {
+ QCOMPARE(fromType1.iface(), fromId1.iface());
+ QCOMPARE(fromType2.iface(), fromId1.iface());
+ }
+#endif
+}
+
+#define DECLARE_LIB_FUNCTION(TYPE, ID) \
+ Q_DECL_IMPORT QMetaType metatype_ ## TYPE();
+namespace Lib1 { FOR_EACH_METATYPE_LIBS(DECLARE_LIB_FUNCTION) }
+namespace Lib2 { FOR_EACH_METATYPE_LIBS(DECLARE_LIB_FUNCTION) }
+#undef DECLARE_LIB_FUNCTION
+
+using LibMetatypeFunction = QMetaType (*)();
+void tst_QMetaType::operatorEqAcrossLibs_data()
+{
+ QTest::addColumn<int>("builtinTypeId");
+ QTest::addColumn<QMetaType>("localType");
+ QTest::addColumn<LibMetatypeFunction>("lib1Function");
+ QTest::addColumn<LibMetatypeFunction>("lib2Function");
+
+#define ADD_ROW(TYPE, ID) \
+ QTest::addRow(QT_STRINGIFY(TYPE)) << int(ID) \
+ << QMetaType::fromType<TYPE>() \
+ << &Lib1::metatype_ ## TYPE \
+ << &Lib2::metatype_ ## TYPE;
+FOR_EACH_METATYPE_LIBS(ADD_ROW)
+#undef ADD_ROW
+}
+
+void tst_QMetaType::operatorEqAcrossLibs()
+{
+ QFETCH(int, builtinTypeId);
+ QFETCH(QMetaType, localType);
+ QFETCH(LibMetatypeFunction, lib1Function);
+ QFETCH(LibMetatypeFunction, lib2Function);
+
+ QMetaType lib1Type = lib1Function();
+ QMetaType lib2Type = lib2Function();
+
+ const QtPrivate::QMetaTypeInterface *localIface = localType.iface();
+ const QtPrivate::QMetaTypeInterface *lib1Iface = lib1Type.iface();
+ const QtPrivate::QMetaTypeInterface *lib2Iface = lib2Type.iface();
+
+ // DO THIS FIRST:
+ // if this isn't a built-in type, then the QMetaTypeInterface::typeId is
+ // initially set to 0
+ QCOMPARE(lib1Type, lib2Type);
+
+ int actualTypeId = localType.id();
+ bool builtinTypeExpected = builtinTypeId != QMetaType::UnknownType;
+ bool builtinTypeActually = actualTypeId < QMetaType::User;
+
+ qDebug() << "QMetaType for type" << QByteArray(localType.name())
+ << "(type ID" << (actualTypeId >= 0x1000 ? Qt::hex : Qt::dec) << actualTypeId << ')'
+ << (builtinTypeActually ? "IS" : "is NOT") << "a built-in type;"
+ << "local interface:" << static_cast<const void *>(localIface)
+ << "lib1 interface:" << static_cast<const void *>(lib1Iface)
+ << "lib2 interface:" << static_cast<const void *>(lib2Iface);
+
+ QCOMPARE(builtinTypeActually, builtinTypeExpected);
+ QCOMPARE(lib1Type.id(), actualTypeId);
+ QCOMPARE(lib2Type.id(), actualTypeId);
+ QCOMPARE(QByteArray(lib1Type.name()), QByteArray(localType.name()));
+ QCOMPARE(QByteArray(lib2Type.name()), QByteArray(localType.name()));
+ QCOMPARE(lib1Type, localType);
+ QCOMPARE(lib2Type, localType);
+
+#if !defined(Q_OS_WIN) && !defined(Q_OS_INTEGRITY)
+ if (actualTypeId < QMetaType::FirstGuiType && actualTypeId != QMetaType::Void) {
+ // for built-in QtCore types, we expect the interfaces to be the same too
+ QCOMPARE(lib1Iface, localIface);
+ QCOMPARE(lib2Iface, localIface);
+ }
+#endif
}
class WithPrivateDTor {
@@ -508,6 +640,83 @@ void tst_QMetaType::typeNameNormalization()
}
}
+QT_BEGIN_NAMESPACE
+namespace QtPrivate { struct tst_QMetaType_TestType {}; }
+QT_END_NAMESPACE
+
+void tst_QMetaType::typeNameInQtPrivate()
+{
+ using T = QT_PREPEND_NAMESPACE(QtPrivate::tst_QMetaType_TestType);
+
+ // some compilers (GCC) are known to suppress the namespace prefix if the
+ // type and the function where it is expanded on are on the same namespace
+ static constexpr char expectedName[] = "QtPrivate::tst_QMetaType_TestType";
+ QMetaType mt = QMetaType::fromType<T>();
+ QCOMPARE(mt.name(), expectedName);
+}
+
+#if QT_DEPRECATED_SINCE(6, 0)
+void tst_QMetaType::testDeprecatedGetters()
+{
+ QFETCH(int, aType);
+ QFETCH(QByteArray, aTypeName);
+
+ if (aType >= QMetaType::FirstWidgetsType)
+ QSKIP("The test doesn't link against QtWidgets.");
+
+ // QMetaType::type("name") -> QMetaType::fromName("name").id()
+ QT_IGNORE_DEPRECATIONS(QCOMPARE(QMetaType::type(aTypeName),
+ QMetaType::fromName(aTypeName).id());)
+ // QMetaType::typeName(int) -> QMetaType(int).name()
+ QT_IGNORE_DEPRECATIONS(QCOMPARE(QLatin1String(QMetaType::typeName(aType)),
+ QLatin1String(QMetaType(aType).name()));)
+ // QMetaType::typeFlags(int) -> QMetaType(int).flags()
+ QT_IGNORE_DEPRECATIONS(QCOMPARE(QMetaType::typeFlags(aType),
+ QMetaType(aType).flags());)
+ // QMetaType::metaObjectForType(int) -> QMetaType(int).metaObject()
+ QT_IGNORE_DEPRECATIONS(QCOMPARE(QMetaType::metaObjectForType(aType),
+ QMetaType(aType).metaObject());)
+}
+
+void tst_QMetaType::testDeprecatedLoadSave()
+{
+ QFETCH(int, type);
+ QFETCH(bool, isStreamable);
+
+ if (!isStreamable)
+ return;
+
+ QMetaType metaType(type);
+ void *value = metaType.create();
+ auto cleanup = qScopeGuard([&metaType, value]() {
+ metaType.destroy(value);
+ });
+
+ QByteArray ba;
+ QDataStream stream(&ba, QIODevice::ReadWrite);
+
+ // Write using deprecated API
+ QT_IGNORE_DEPRECATIONS(QVERIFY(QMetaType::save(stream, type, value));)
+ QCOMPARE(stream.status(), QDataStream::Ok);
+
+ // Read using non-deprecated API
+ stream.device()->seek(0);
+ QVERIFY(metaType.load(stream, value));
+ QCOMPARE(stream.status(), QDataStream::Ok);
+
+ // Write using non-deprecated API
+ stream.device()->seek(0);
+ ba.clear();
+ QVERIFY(metaType.save(stream, value));
+ QCOMPARE(stream.status(), QDataStream::Ok);
+
+ // Read using deprecated API
+ stream.device()->seek(0);
+ QT_IGNORE_DEPRECATIONS(QVERIFY(QMetaType::load(stream, type, value));)
+ QCOMPARE(stream.status(), QDataStream::Ok);
+}
+#endif // QT_DEPRECATED_SINCE(6, 0)
+
// Compile-time test, it should be possible to register function pointer types
class Undefined;
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype3.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype3.cpp
index 52406b1e8d..779044589c 100644
--- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype3.cpp
+++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype3.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "tst_qmetatype.h"
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype_common.h b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype_common.h
index 1ba9c47fa8..ea59b5cd02 100644
--- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype_common.h
+++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype_common.h
@@ -1,37 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Used by both tst_qmetatype and tst_qsettings
#ifndef TST_QMETATYPE_H
#define TST_QMETATYPE_H
-#include <qmetatype.h>
+#include <QtCore>
+
#include <float.h>
#define FOR_EACH_PRIMITIVE_METATYPE(F) \
@@ -153,6 +129,9 @@ template<> struct TestValueFactory<QMetaType::UChar> {
template<> struct TestValueFactory<QMetaType::Float> {
static float *create() { return new float(FLT_MIN); }
};
+template<> struct TestValueFactory<QMetaType::Float16> {
+ static auto create() { return new qfloat16(std::numeric_limits<qfloat16>::min()); }
+};
template<> struct TestValueFactory<QMetaType::QObjectStar> {
static QObject * *create() { return new QObject *(0); }
};
diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype_libs.h b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype_libs.h
new file mode 100644
index 0000000000..673fc9083c
--- /dev/null
+++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype_libs.h
@@ -0,0 +1,24 @@
+// Copyright (C) 2022 Intel Corporation
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef TST_QMETATYPE_LIBS_H
+#define TST_QMETATYPE_LIBS_H
+
+#include <qmetatype.h>
+
+#include <stdlib.h> // for div_t
+
+// void: builtin metatype, special
+// int: builtin metatype, primitive type
+// QString: builtin metatype, class
+// QCollator: not builtin, class, Q_CORE_EXPORT
+// div_t: not builtin, class, no export
+#define FOR_EACH_METATYPE_LIBS(F) \
+ F(void, QMetaType::Void) \
+ F(int, QMetaType::Int) \
+ F(QString, QMetaType::QString) \
+ F(QCollator, QMetaType::UnknownType) \
+ F(div_t, QMetaType::UnknownType) \
+ /**/
+
+#endif // TST_QMETATYPE_LIBS_H
diff --git a/tests/auto/corelib/kernel/qmimedata/CMakeLists.txt b/tests/auto/corelib/kernel/qmimedata/CMakeLists.txt
index ec5505d3e0..ba1d5e12cd 100644
--- a/tests/auto/corelib/kernel/qmimedata/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qmimedata/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qmimedata.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmimedata Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmimedata LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmimedata
SOURCES
tst_qmimedata.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp b/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp
index 92d745090d..c9c8734353 100644
--- a/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.cpp
+++ b/tests/auto/corelib/kernel/qmimedata/tst_qmimedata.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 <QTest>
@@ -96,13 +71,20 @@ void tst_QMimeData::data() const
// set text, verify
mimeData.setData("text/plain", "pirates");
QCOMPARE(mimeData.data("text/plain"), QByteArray("pirates"));
- QCOMPARE(mimeData.data("text/html").length(), 0);
+ QCOMPARE(mimeData.data("text/html").size(), 0);
+ QCOMPARE(mimeData.data("text/markdown").size(), 0);
// html time
mimeData.setData("text/html", "ninjas");
QCOMPARE(mimeData.data("text/html"), QByteArray("ninjas"));
QCOMPARE(mimeData.data("text/plain"), QByteArray("pirates")); // make sure text not damaged
QCOMPARE(mimeData.data("text/html"), mimeData.html().toLatin1());
+
+ // markdown time
+ mimeData.setData("text/markdown", "vikings");
+ QCOMPARE(mimeData.data("text/markdown"), QByteArray("vikings"));
+ QCOMPARE(mimeData.data("text/html"), QByteArray("ninjas"));
+ QCOMPARE(mimeData.data("text/plain"), QByteArray("pirates"));
}
void tst_QMimeData::formats() const
@@ -117,6 +99,10 @@ void tst_QMimeData::formats() const
mimeData.setData("text/html", "ninjas");
QCOMPARE(mimeData.formats(), QStringList() << "text/plain" << "text/html");
+ // set markdown, verify
+ mimeData.setData("text/markdown", "vikings");
+ QCOMPARE(mimeData.formats(), QStringList() << "text/plain" << "text/html" << "text/markdown");
+
// clear, verify
mimeData.clear();
QCOMPARE(mimeData.formats(), QStringList());
@@ -324,7 +310,8 @@ void tst_QMimeData::setUrls() const
QCOMPARE(mimeData.text(), QString("http://qt-project.org\nhttp://www.google.com\n"));
// test and verify that setData doesn't corrupt url content
- foreach (const QString &format, mimeData.formats()) {
+ const auto allFormats = mimeData.formats();
+ for (const QString &format : allFormats) {
QVariant before = mimeData.retrieveData(format, QMetaType(QMetaType::QByteArray));
mimeData.setData(format, mimeData.data(format));
QVariant after = mimeData.retrieveData(format, QMetaType(QMetaType::QByteArray));
diff --git a/tests/auto/corelib/kernel/qobject/CMakeLists.txt b/tests/auto/corelib/kernel/qobject/CMakeLists.txt
index a231ef985f..46b8e2d238 100644
--- a/tests/auto/corelib/kernel/qobject/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qobject/CMakeLists.txt
@@ -1,14 +1,19 @@
-# Generated from qobject.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qobject Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qobject LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qobject
SOURCES
tst_qobject.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
LIBRARIES
Qt::CorePrivate
Qt::Network
@@ -18,4 +23,4 @@ qt_internal_add_test(tst_qobject
## Scopes:
#####################################################################
add_subdirectory(signalbug)
-add_dependencies(tst_qobject signalbug_helper) # special case
+add_dependencies(tst_qobject signalbug_helper)
diff --git a/tests/auto/corelib/kernel/qobject/signalbug/CMakeLists.txt b/tests/auto/corelib/kernel/qobject/signalbug/CMakeLists.txt
index b479ada78e..aefa1554b6 100644
--- a/tests/auto/corelib/kernel/qobject/signalbug/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qobject/signalbug/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from signalbug.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## signalbug_helper Binary:
diff --git a/tests/auto/corelib/kernel/qobject/signalbug/signalbug.cpp b/tests/auto/corelib/kernel/qobject/signalbug/signalbug.cpp
index 57fb1eb836..bb8d7984f4 100644
--- a/tests/auto/corelib/kernel/qobject/signalbug/signalbug.cpp
+++ b/tests/auto/corelib/kernel/qobject/signalbug/signalbug.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 "signalbug.h"
diff --git a/tests/auto/corelib/kernel/qobject/signalbug/signalbug.h b/tests/auto/corelib/kernel/qobject/signalbug/signalbug.h
index e6e40c35d9..ac124c2a1c 100644
--- a/tests/auto/corelib/kernel/qobject/signalbug/signalbug.h
+++ b/tests/auto/corelib/kernel/qobject/signalbug/signalbug.h
@@ -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
#ifndef SIGNAL_BUG_H
#define SIGNAL_BUG_H
diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
index 2e34099e5b..6c387fde96 100644
--- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
+++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp
@@ -1,32 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2020 Olivier Goffart <ogoffart@woboq.com>
-** Copyright (C) 2021 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2020 Olivier Goffart <ogoffart@woboq.com>
+// Copyright (C) 2021 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// This test actually wants to practice narrowing conditions, so never define this.
#ifdef QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
@@ -64,6 +39,8 @@
#include <math.h>
+using namespace Qt::StringLiterals;
+
class tst_QObject : public QObject
{
Q_OBJECT
@@ -83,6 +60,7 @@ private slots:
void connectNotify_connectSlotsByName();
void connectDisconnectNotify_shadowing();
void connectReferenceToIncompleteTypes();
+ void connectAutoQueuedIncomplete();
void emitInDefinedOrder();
void customTypes();
void streamCustomTypes();
@@ -104,10 +82,13 @@ private slots:
void signalBlocking();
void blockingQueuedConnection();
void childEvents();
+ void parentEvents();
void installEventFilter();
+ void installEventFilterOrder();
void deleteSelfInSlot();
void disconnectSelfInSlotAndDeleteAfterEmit();
void dumpObjectInfo();
+ void dumpObjectTree();
void connectToSender();
void qobjectConstCast();
void uniqConnection();
@@ -171,6 +152,8 @@ private slots:
void singleShotConnection();
void objectNameBinding();
void emitToDestroyedClass();
+ void declarativeData();
+ void asyncCallbackHelper();
};
struct QObjectCreatedOnShutdown
@@ -528,6 +511,12 @@ void tst_QObject::qobject_castTemplate()
QVERIFY(!::qobject_cast<ReceiverObject*>(o.data()));
}
+class DerivedObj : public QObject {
+ Q_OBJECT
+public:
+ using QObject::QObject;
+};
+
void tst_QObject::findChildren()
{
QObject o;
@@ -540,6 +529,10 @@ void tst_QObject::findChildren()
QTimer t1(&o);
QTimer t121(&o12);
QTimer emptyname(&o);
+ QObject oo;
+ QObject o21(&oo);
+ QObject o22(&oo);
+ QObject o23(&oo);
Q_SET_OBJECT_NAME(o);
Q_SET_OBJECT_NAME(o1);
@@ -550,6 +543,13 @@ void tst_QObject::findChildren()
Q_SET_OBJECT_NAME(t1);
Q_SET_OBJECT_NAME(t121);
emptyname.setObjectName("");
+ Q_SET_OBJECT_NAME(oo);
+ const QUtf8StringView utf8_name = u8"utf8 ⎠obj";
+ o21.setObjectName(utf8_name);
+ const QStringView utf16_name = u"utf16 ⎠obj";
+ o22.setObjectName(utf16_name);
+ constexpr QLatin1StringView L1_name("L1 ⎠obj");
+ o23.setObjectName(L1_name);
QObject *op = nullptr;
@@ -580,6 +580,27 @@ void tst_QObject::findChildren()
op = o.findChild<QObject*>("o1");
QCOMPARE(op, &o1);
+ op = oo.findChild<QObject*>(utf8_name);
+ QCOMPARE(op, &o21);
+ op = oo.findChild<QObject*>(utf8_name.chopped(1));
+ QCOMPARE(op, nullptr);
+ const QUtf8StringView utf8_name_with_trailing_data = u8"utf8 ⎠obj_data";
+ op = oo.findChild<QObject*>(utf8_name_with_trailing_data.chopped(5));
+ QCOMPARE(op, &o21);
+ op = oo.findChild<QObject*>(utf16_name);
+ QCOMPARE(op, &o22);
+ op = oo.findChild<QObject*>(utf16_name.chopped(1));
+ QCOMPARE(op, nullptr);
+ const QStringView utf16_name_with_trailing_data = u"utf16 ⎠obj_data";
+ op = oo.findChild<QObject*>(utf16_name_with_trailing_data.chopped(5));
+ QCOMPARE(op, &o22);
+ op = oo.findChild<QObject*>(L1_name);
+ QCOMPARE(op, &o23);
+ op = oo.findChild<QObject*>(L1_name.chopped(1));
+ QCOMPARE(op, nullptr);
+ op = oo.findChild<QObject*>((L1_name + "_data"_L1).chopped(5));
+ QCOMPARE(op, &o23);
+
QList<QObject*> l;
QList<QTimer*> tl;
@@ -755,7 +776,20 @@ void tst_QObject::findChildren()
l = o.findChildren<QObject*>(QRegularExpression("^harry$"), Qt::FindDirectChildrenOnly);
QCOMPARE(l.size(), 0);
+ DerivedObj dr1(&o111);
+ DerivedObj dr2(&o111);
+ Q_SET_OBJECT_NAME(dr1);
+ Q_SET_OBJECT_NAME(dr2);
+
// empty and null string check
+ op = o.findChild<QObject*>(Qt::FindDirectChildrenOnly);
+ QCOMPARE(op, &o1);
+ op = o.findChild<QTimer*>(Qt::FindDirectChildrenOnly);
+ QCOMPARE(op, &t1);
+ op = o.findChild<DerivedObj*>(Qt::FindDirectChildrenOnly);
+ QCOMPARE(op, nullptr);
+ op = o.findChild<DerivedObj*>(Qt::FindChildrenRecursively);
+ QCOMPARE(op, &dr1);
op = o.findChild<QObject*>(QString(), Qt::FindDirectChildrenOnly);
QCOMPARE(op, &o1);
op = o.findChild<QObject*>("", Qt::FindDirectChildrenOnly);
@@ -916,6 +950,42 @@ void tst_QObject::connectReferenceToIncompleteTypes() {
QVERIFY(connection);
}
+struct Incomplete2;
+class QObjectWithIncomplete2 : public QObject {
+ Q_OBJECT
+
+public:
+ QObjectWithIncomplete2(QObject *parent=nullptr) : QObject(parent) {}
+signals:
+ void signalWithIncomplete(Incomplete2 *ptr);
+public slots:
+ void slotWithIncomplete(Incomplete2 *) { calledSlot = true; }
+ void run() { Q_EMIT signalWithIncomplete(nullptr); }
+public:
+ bool calledSlot = false;
+};
+
+void tst_QObject::connectAutoQueuedIncomplete()
+{
+ auto objectWithIncomplete1 = new QObjectWithIncomplete2();
+ auto objectWithIncomplete2 = new QObjectWithIncomplete2();
+ auto t = new QThread(this);
+ auto cleanup = qScopeGuard([&](){
+ t->quit();
+ QVERIFY(t->wait());
+ delete objectWithIncomplete1;
+ delete objectWithIncomplete2;
+ });
+
+ t->start();
+ objectWithIncomplete2->moveToThread(t);
+
+ connect(objectWithIncomplete2, &QObjectWithIncomplete2::signalWithIncomplete,
+ objectWithIncomplete1, &QObjectWithIncomplete2::slotWithIncomplete);
+ QMetaObject::invokeMethod(objectWithIncomplete2, "run", Qt::QueuedConnection);
+ QTRY_VERIFY(objectWithIncomplete1->calledSlot);
+}
+
static void connectDisconnectNotifyTestSlot() {}
void tst_QObject::connectDisconnectNotifyPMF()
@@ -983,7 +1053,7 @@ void tst_QObject::disconnectNotify_receiverDestroyed()
QVERIFY(QObject::connect((SenderObject *)&s, SIGNAL(signal1()),
(ReceiverObject *)&r, SLOT(slot1())));
}
- QCOMPARE(s.disconnectedSignals.count(), 1);
+ QCOMPARE(s.disconnectedSignals.size(), 1);
QCOMPARE(s.disconnectedSignals.at(0), QMetaMethod::fromSignal(&SenderObject::signal1));
s.disconnectedSignals.clear();
@@ -994,7 +1064,7 @@ void tst_QObject::disconnectNotify_receiverDestroyed()
(ReceiverObject *)&r, SLOT(slot3())));
}
- QCOMPARE(s.disconnectedSignals.count(), 1);
+ QCOMPARE(s.disconnectedSignals.size(), 1);
QCOMPARE(s.disconnectedSignals.at(0), QMetaMethod::fromSignal(&SenderObject::signal3));
s.disconnectedSignals.clear();
@@ -1004,7 +1074,7 @@ void tst_QObject::disconnectNotify_receiverDestroyed()
QVERIFY(QObject::connect((SenderObject *)&s, SIGNAL(destroyed()), (ReceiverObject *)&r, SLOT(slot3())));
}
- QCOMPARE(s.disconnectedSignals.count(), 1);
+ QCOMPARE(s.disconnectedSignals.size(), 1);
QCOMPARE(s.disconnectedSignals.at(0), QMetaMethod::fromSignal(&QObject::destroyed));
}
@@ -1019,10 +1089,10 @@ void tst_QObject::disconnectNotify_metaObjConnection()
QVERIFY(c);
QVERIFY(QObject::disconnect(c));
- QCOMPARE(s.disconnectedSignals.count(), 1);
+ QCOMPARE(s.disconnectedSignals.size(), 1);
QCOMPARE(s.disconnectedSignals.at(0), QMetaMethod::fromSignal(&SenderObject::signal1));
- QCOMPARE(s.disconnectedSignals.count(), 1);
+ QCOMPARE(s.disconnectedSignals.size(), 1);
}
}
@@ -1504,8 +1574,7 @@ void tst_QObject::customTypes()
QCOMPARE(checker.received.value(), t1.value());
checker.received = t0;
- int idx = qRegisterMetaType<CustomType>("CustomType");
- QCOMPARE(QMetaType::type("CustomType"), idx);
+ qRegisterMetaType<CustomType>();
checker.disconnect();
connect(&checker, SIGNAL(signal1(CustomType)), &checker, SLOT(slot1(CustomType)),
@@ -1518,11 +1587,6 @@ void tst_QObject::customTypes()
QCoreApplication::processEvents();
QCOMPARE(checker.received.value(), t2.value());
QCOMPARE(instanceCount, 4);
-
- QVERIFY(QMetaType::isRegistered(idx));
- QCOMPARE(qRegisterMetaType<CustomType>("CustomType"), idx);
- QCOMPARE(QMetaType::type("CustomType"), idx);
- QVERIFY(QMetaType::isRegistered(idx));
}
QCOMPARE(instanceCount, 3);
}
@@ -1531,13 +1595,15 @@ void tst_QObject::streamCustomTypes()
{
QByteArray ba;
- int idx = qRegisterMetaType<CustomType>("CustomType");
+ qRegisterMetaType<CustomType>();
+
+ QMetaType metaType = QMetaType::fromType<CustomType>();
{
CustomType t1(1, 2, 3);
QCOMPARE(instanceCount, 1);
QDataStream stream(&ba, (QIODevice::OpenMode)QIODevice::WriteOnly);
- QMetaType::save(stream, idx, &t1);
+ metaType.save(stream, &t1);
}
QCOMPARE(instanceCount, 0);
@@ -1546,7 +1612,7 @@ void tst_QObject::streamCustomTypes()
CustomType t2;
QCOMPARE(instanceCount, 1);
QDataStream stream(&ba, (QIODevice::OpenMode)QIODevice::ReadOnly);
- QMetaType::load(stream, idx, &t2);
+ metaType.load(stream, &t2);
QCOMPARE(instanceCount, 1);
QCOMPARE(t2.i1, 1);
QCOMPARE(t2.i2, 2);
@@ -1805,13 +1871,15 @@ void tst_QObject::moveToThread()
QObject *child = new QObject(object);
QCOMPARE(object->thread(), currentThread);
QCOMPARE(child->thread(), currentThread);
- object->moveToThread(0);
+ QVERIFY(object->moveToThread(nullptr));
QCOMPARE(object->thread(), (QThread *)0);
QCOMPARE(child->thread(), (QThread *)0);
- object->moveToThread(currentThread);
+ QVERIFY(object->moveToThread(currentThread));
QCOMPARE(object->thread(), currentThread);
QCOMPARE(child->thread(), currentThread);
- object->moveToThread(0);
+ QTest::ignoreMessage(QtWarningMsg, "QObject::moveToThread: Cannot move objects with a parent");
+ QVERIFY(!child->moveToThread(nullptr));
+ QVERIFY(object->moveToThread(nullptr));
QCOMPARE(object->thread(), (QThread *)0);
QCOMPARE(child->thread(), (QThread *)0);
// can delete an object with no thread anywhere
@@ -1982,7 +2050,7 @@ void tst_QObject::property()
const int idx = mo->indexOfProperty("variant");
QVERIFY(idx != -1);
- QCOMPARE(QMetaType::Type(mo->property(idx).type()), QMetaType::QVariant);
+ QCOMPARE(mo->property(idx).userType(), QMetaType::QVariant);
QCOMPARE(object.property("variant"), QVariant());
QVariant variant1(42);
QVariant variant2("string");
@@ -2001,7 +2069,7 @@ void tst_QObject::property()
QVERIFY(!property.isEnumType());
QCOMPARE(property.typeName(), "CustomType*");
qRegisterMetaType<CustomType*>();
- QCOMPARE(property.type(), QVariant::UserType);
+ QCOMPARE_GE(property.typeId(), QMetaType::User);
QCOMPARE(property.userType(), qMetaTypeId<CustomType*>());
CustomType *customPointer = nullptr;
@@ -2016,7 +2084,7 @@ void tst_QObject::property()
property = mo->property(mo->indexOfProperty("custom"));
QVERIFY(property.isWritable());
QCOMPARE(property.typeName(), "CustomType*");
- QCOMPARE(property.type(), QVariant::UserType);
+ QCOMPARE_GE(property.typeId(), QMetaType::User);
QCOMPARE(property.userType(), qMetaTypeId<CustomType*>());
QVERIFY(object.setProperty("custom", customVariant));
@@ -2046,13 +2114,13 @@ void tst_QObject::property()
QCOMPARE(object.property("priority").toInt(), 0);
// now it's registered, so it works as expected
- int priorityMetaTypeId = qRegisterMetaType<PropertyObject::Priority>("PropertyObject::Priority");
+ int priorityMetaTypeId = qRegisterMetaType<PropertyObject::Priority>();
QVERIFY(mo->indexOfProperty("priority") != -1);
property = mo->property(mo->indexOfProperty("priority"));
QVERIFY(property.isEnumType());
QCOMPARE(property.typeName(), "PropertyObject::Priority");
- QCOMPARE(property.type(), QVariant::UserType);
+ QCOMPARE_GE(property.typeId(), QMetaType::User);
QCOMPARE(property.userType(), priorityMetaTypeId);
var = object.property("priority");
@@ -2075,7 +2143,7 @@ void tst_QObject::property()
object.setProperty("priority", var);
QCOMPARE(qvariant_cast<PropertyObject::Priority>(object.property("priority")), PropertyObject::High);
- qRegisterMetaType<CustomString>("CustomString");
+ qRegisterMetaType<CustomString>();
QVERIFY(mo->indexOfProperty("customString") != -1);
QCOMPARE(object.property("customString").toString(), QString());
object.setCustomString("String1");
@@ -2148,18 +2216,18 @@ void tst_QObject::metamethod()
QVERIFY(!(m.attributes() & QMetaMethod::Compatibility));
m = mobj->method(mobj->indexOfMethod("invoke1()"));
- QCOMPARE(m.parameterNames().count(), 0);
- QCOMPARE(m.parameterTypes().count(), 0);
+ QCOMPARE(m.parameterNames().size(), 0);
+ QCOMPARE(m.parameterTypes().size(), 0);
m = mobj->method(mobj->indexOfMethod("invoke2(int)"));
- QCOMPARE(m.parameterNames().count(), 1);
- QCOMPARE(m.parameterTypes().count(), 1);
+ QCOMPARE(m.parameterNames().size(), 1);
+ QCOMPARE(m.parameterTypes().size(), 1);
QCOMPARE(m.parameterTypes().at(0), QByteArray("int"));
QVERIFY(m.parameterNames().at(0).isEmpty());
m = mobj->method(mobj->indexOfMethod("invoke3(int,int)"));
- QCOMPARE(m.parameterNames().count(), 2);
- QCOMPARE(m.parameterTypes().count(), 2);
+ QCOMPARE(m.parameterNames().size(), 2);
+ QCOMPARE(m.parameterTypes().size(), 2);
QCOMPARE(m.parameterTypes().at(0), QByteArray("int"));
QCOMPARE(m.parameterNames().at(0), QByteArray("hinz"));
QCOMPARE(m.parameterTypes().at(1), QByteArray("int"));
@@ -2914,7 +2982,7 @@ void tst_QObject::floatProperty()
QVERIFY(idx > 0);
QMetaProperty prop = obj.metaObject()->property(idx);
QVERIFY(prop.isValid());
- QCOMPARE(int(prop.type()), QMetaType::type("float"));
+ QCOMPARE(prop.typeId(), QMetaType::fromType<float>().id());
QVERIFY(!prop.write(&obj, QVariant("Hello")));
QVERIFY(prop.write(&obj, QVariant::fromValue(128.0f)));
QVariant v = prop.read(&obj);
@@ -2929,7 +2997,7 @@ void tst_QObject::qrealProperty()
QVERIFY(idx > 0);
QMetaProperty prop = obj.metaObject()->property(idx);
QVERIFY(prop.isValid());
- QCOMPARE(int(prop.type()), QMetaType::type("qreal"));
+ QCOMPARE(prop.typeId(), QMetaType::fromType<qreal>().id());
QVERIFY(!prop.write(&obj, QVariant("Hello")));
QVERIFY(prop.write(&obj, QVariant::fromValue(128.0f)));
@@ -2974,31 +3042,31 @@ void tst_QObject::dynamicProperties()
// set a dynamic property
QVERIFY(!obj.setProperty("myuserproperty", "Hello"));
- QCOMPARE(obj.changedDynamicProperties.count(), 1);
+ QCOMPARE(obj.changedDynamicProperties.size(), 1);
QCOMPARE(obj.changedDynamicProperties.first(), QByteArray("myuserproperty"));
//check if there is no redundant DynamicPropertyChange events
QVERIFY(!obj.setProperty("myuserproperty", "Hello"));
- QCOMPARE(obj.changedDynamicProperties.count(), 1);
+ QCOMPARE(obj.changedDynamicProperties.size(), 1);
- QCOMPARE(obj.property("myuserproperty").type(), QVariant::String);
+ QCOMPARE(obj.property("myuserproperty").typeId(), QMetaType::QString);
QCOMPARE(obj.property("myuserproperty").toString(), QString("Hello"));
- QCOMPARE(obj.dynamicPropertyNames().count(), 1);
+ QCOMPARE(obj.dynamicPropertyNames().size(), 1);
QCOMPARE(obj.dynamicPropertyNames().first(), QByteArray("myuserproperty"));
// change type of the dynamic property
obj.changedDynamicProperties.clear();
QVERIFY(!obj.setProperty("myuserproperty", QByteArray("Hello")));
- QCOMPARE(obj.changedDynamicProperties.count(), 1);
+ QCOMPARE(obj.changedDynamicProperties.size(), 1);
QCOMPARE(obj.changedDynamicProperties.first(), QByteArray("myuserproperty"));
- QCOMPARE(obj.property("myuserproperty").type(), QVariant::ByteArray);
+ QCOMPARE(obj.property("myuserproperty").typeId(), QMetaType::QByteArray);
QCOMPARE(obj.property("myuserproperty").toString(), QByteArray("Hello"));
// unset the property
obj.changedDynamicProperties.clear();
QVERIFY(!obj.setProperty("myuserproperty", QVariant()));
- QCOMPARE(obj.changedDynamicProperties.count(), 1);
+ QCOMPARE(obj.changedDynamicProperties.size(), 1);
QCOMPARE(obj.changedDynamicProperties.first(), QByteArray("myuserproperty"));
obj.changedDynamicProperties.clear();
@@ -3074,6 +3142,8 @@ void tst_QObject::blockingQueuedConnection()
}
}
+static int s_eventSpyCounter = -1;
+
class EventSpy : public QObject
{
Q_OBJECT
@@ -3093,14 +3163,17 @@ public:
void clear()
{
events.clear();
+ thisCounter = -1;
}
bool eventFilter(QObject *object, QEvent *event) override
{
events.append(qMakePair(object, event->type()));
+ thisCounter = ++s_eventSpyCounter;
return false;
}
+ int thisCounter = -1;
private:
EventList events;
};
@@ -3189,6 +3262,78 @@ void tst_QObject::childEvents()
}
}
+void tst_QObject::parentEvents()
+{
+#ifdef QT_BUILD_INTERNAL
+ EventSpy::EventList expected;
+
+ {
+ // Parent events not enabled
+ QObject parent;
+ QObject child;
+
+ EventSpy spy;
+ child.installEventFilter(&spy);
+
+ QCoreApplication::postEvent(&child, new QEvent(QEvent::Type(QEvent::User + 1)));
+
+ child.setParent(&parent);
+
+ QCoreApplication::postEvent(&child, new QEvent(QEvent::Type(QEvent::User + 2)));
+
+ expected =
+ EventSpy::EventList();
+ QCOMPARE(spy.eventList(), expected);
+ spy.clear();
+
+ QCoreApplication::processEvents();
+
+ expected =
+ EventSpy::EventList()
+ << qMakePair(&child, QEvent::Type(QEvent::User + 1))
+ << qMakePair(&child, QEvent::Type(QEvent::User + 2));
+ QCOMPARE(spy.eventList(), expected);
+ }
+
+ {
+ // Parent events enabled
+ QObject parent;
+ QObject child;
+ auto *childPrivate = QObjectPrivate::get(&child);
+ childPrivate->receiveParentEvents = true;
+
+ EventSpy spy;
+ child.installEventFilter(&spy);
+
+ QCoreApplication::postEvent(&child, new QEvent(QEvent::Type(QEvent::User + 1)));
+
+ child.setParent(&parent);
+ child.setParent(nullptr);
+
+ QCoreApplication::postEvent(&child, new QEvent(QEvent::Type(QEvent::User + 2)));
+
+ expected =
+ EventSpy::EventList()
+ << qMakePair(&child, QEvent::ParentAboutToChange)
+ << qMakePair(&child, QEvent::ParentChange)
+ << qMakePair(&child, QEvent::ParentAboutToChange)
+ << qMakePair(&child, QEvent::ParentChange);
+ QCOMPARE(spy.eventList(), expected);
+ spy.clear();
+
+ QCoreApplication::processEvents();
+
+ expected =
+ EventSpy::EventList()
+ << qMakePair(&child, QEvent::Type(QEvent::User + 1))
+ << qMakePair(&child, QEvent::Type(QEvent::User + 2));
+ QCOMPARE(spy.eventList(), expected);
+ }
+#else
+ QSKIP("Needs QT_BUILD_INTERNAL");
+#endif
+}
+
void tst_QObject::installEventFilter()
{
QEvent event(QEvent::User);
@@ -3230,6 +3375,70 @@ void tst_QObject::installEventFilter()
QVERIFY(spy.eventList().isEmpty());
}
+#define CHECK_FAIL(message) \
+do {\
+ if (QTest::currentTestFailed())\
+ QFAIL("failed one line above on " message);\
+} while (false)
+
+void tst_QObject::installEventFilterOrder()
+{
+ // installEventFilter() adds new objects to d_func()->extraData->eventFilters, which
+ // affects the order of calling each object's eventFilter() when processing the events.
+
+ QObject object;
+ EventSpy spy1, spy2, spy3;
+
+ auto clearSignalSpies = [&] {
+ for (auto *s : {&spy1, &spy2, &spy3})
+ s->clear();
+ s_eventSpyCounter = -1;
+ };
+
+ const EventSpy::EventList expected = { { &object, QEvent::Type(QEvent::User + 1) } };
+
+ // Call Order: from first to last
+ auto checkCallOrder = [&expected](const QList<EventSpy *> &spies) {
+ for (int i = 0; i < spies.size(); ++i) {
+ EventSpy *spy = spies.at(i);
+ QVERIFY2(spy->eventList() == expected,
+ QString("The spy %1 wasn't triggered exactly once.").arg(i).toLatin1());
+ QCOMPARE(spy->thisCounter, i);
+ }
+ };
+
+ // Install event filters and check the order of invocations:
+ // The last installed = the first called.
+ object.installEventFilter(&spy1);
+ object.installEventFilter(&spy2);
+ object.installEventFilter(&spy3);
+ clearSignalSpies();
+ QCoreApplication::postEvent(&object, new QEvent(QEvent::Type(QEvent::User + 1)));
+ QCoreApplication::processEvents();
+ checkCallOrder({ &spy3, &spy2, &spy1 });
+ CHECK_FAIL("checkCallOrder() - 1st round");
+
+ // Install event filter for `spy1` again, which reorders spy1 in `eventFilters`
+ // (the list doesn't have duplicates).
+ object.installEventFilter(&spy1);
+ clearSignalSpies();
+ QCoreApplication::postEvent(&object, new QEvent(QEvent::Type(QEvent::User + 1)));
+ QCoreApplication::processEvents();
+ checkCallOrder({ &spy1, &spy3, &spy2 });
+ CHECK_FAIL("checkCallOrder() - 2nd round");
+
+ // Remove event filter for `spy3`, ensure it's not called anymore and the
+ // existing filters order is preserved.
+ object.removeEventFilter(&spy3);
+ clearSignalSpies();
+ QCoreApplication::postEvent(&object, new QEvent(QEvent::Type(QEvent::User + 1)));
+ QCoreApplication::processEvents();
+ checkCallOrder({ &spy1, &spy2 });
+ CHECK_FAIL("checkCallOrder() - 3rd round");
+ QVERIFY(spy3.eventList().isEmpty());
+ QCOMPARE(spy3.thisCounter, -1);
+}
+
class EmitThread : public QThread
{ Q_OBJECT
public:
@@ -3413,6 +3622,32 @@ void tst_QObject::dumpObjectInfo()
a.dumpObjectInfo(); // should not crash
}
+void tst_QObject::dumpObjectTree()
+{
+ QObject a;
+ Q_SET_OBJECT_NAME(a);
+
+ QTimer b(&a);
+ Q_SET_OBJECT_NAME(b);
+
+ QObject c(&b);
+ Q_SET_OBJECT_NAME(c);
+
+ QFile f(&a);
+ Q_SET_OBJECT_NAME(f);
+
+ const char * const output[] = {
+ "QObject::a ",
+ " QTimer::b ",
+ " QObject::c ",
+ " QFile::f ",
+ };
+ for (const char *line : output)
+ QTest::ignoreMessage(QtDebugMsg, line);
+
+ a.dumpObjectTree();
+}
+
class ConnectToSender : public QObject
{ Q_OBJECT
public slots:
@@ -4506,6 +4741,17 @@ void tst_QObject::pointerConnect()
con = connect(&r1, &ReceiverObject::slot4 , &s, &SenderObject::signal4);
QVERIFY(!con);
QVERIFY(!QObject::disconnect(con));
+
+ //connect an arbitrary PMF to a slot
+ QTest::ignoreMessage(QtWarningMsg, "QObject::connect: signal not found in ReceiverObject");
+ con = connect(&r1, &ReceiverObject::reset, &r1, &ReceiverObject::slot1);
+ QVERIFY(!con);
+ QVERIFY(!QObject::disconnect(con));
+
+ QTest::ignoreMessage(QtWarningMsg, "QObject::connect: signal not found in ReceiverObject");
+ con = connect(&r1, &ReceiverObject::reset, &r1, [](){});
+ QVERIFY(!con);
+ QVERIFY(!QObject::disconnect(con));
}
void tst_QObject::pointerDisconnect()
@@ -4688,8 +4934,7 @@ void tst_QObject::customTypesPointer()
checker.disconnect();
- int idx = qRegisterMetaType<CustomType>("CustomType");
- QCOMPARE(QMetaType::type("CustomType"), idx);
+ qRegisterMetaType<CustomType>();
connect(&checker, &QCustomTypeChecker::signal1, &checker, &QCustomTypeChecker::slot1,
Qt::QueuedConnection);
@@ -4702,11 +4947,6 @@ void tst_QObject::customTypesPointer()
QCOMPARE(checker.received.value(), t2.value());
QCOMPARE(instanceCount, 4);
- QVERIFY(QMetaType::isRegistered(idx));
- QCOMPARE(qRegisterMetaType<CustomType>("CustomType"), idx);
- QCOMPARE(QMetaType::type("CustomType"), idx);
- QVERIFY(QMetaType::isRegistered(idx));
-
// Test auto registered type (QList<CustomType>)
QList<CustomType> list;
QCOMPARE(instanceCount, 4);
@@ -5941,15 +6181,15 @@ class ConnectToPrivateSlotPrivate;
class ConnectToPrivateSlot :public QObject {
Q_OBJECT
+ Q_DECLARE_PRIVATE(ConnectToPrivateSlot)
public:
ConnectToPrivateSlot();
void test(SenderObject *obj1) ;
- Q_DECLARE_PRIVATE(ConnectToPrivateSlot)
};
class ConnectToPrivateSlotPrivate : public QObjectPrivate {
-public:
Q_DECLARE_PUBLIC(ConnectToPrivateSlot)
+public:
int receivedCount;
QVariant receivedValue;
@@ -5961,6 +6201,8 @@ public:
receivedCount++;
receivedValue = v;
};
+
+ void testFromPrivate(SenderObject *obj);
};
ConnectToPrivateSlot::ConnectToPrivateSlot(): QObject(*new ConnectToPrivateSlotPrivate) {}
@@ -5987,6 +6229,14 @@ void ConnectToPrivateSlot::test(SenderObject* obj1) {
QVERIFY(!QObjectPrivate::disconnect(obj1, &SenderObject::signal2, d, &ConnectToPrivateSlotPrivate::thisIsAPrivateSlot));
}
+// Compile test to verify that we can use QObjectPrivate::connect in
+// the code of the private class, even if Q_DECLARE_PUBLIC is used in the
+// private section of the private class.
+void ConnectToPrivateSlotPrivate::testFromPrivate(SenderObject *obj)
+{
+ QVERIFY(QObjectPrivate::connect(obj, &SenderObject::signal1, this, &ConnectToPrivateSlotPrivate::thisIsAPrivateSlot));
+}
+
void tst_QObject::connectPrivateSlots()
{
SenderObject sender;
@@ -6023,6 +6273,7 @@ void tst_QObject::connectFunctorArgDifference()
connect(&timer, &QTimer::timeout, [=](){});
connect(&timer, &QTimer::objectNameChanged, [=](const QString &){});
+ connect(&timer, &QTimer::objectNameChanged, this, [](){});
connect(qApp, &QCoreApplication::aboutToQuit, [=](){});
connect(&timer, &QTimer::objectNameChanged, [=](){});
@@ -6250,11 +6501,46 @@ void tst_QObject::connectFunctorWithContextUnique()
QVERIFY(QObject::connect(&sender, &SenderObject::signal1, &receiver, &ReceiverObject::slot1));
receiver.count_slot1 = 0;
- QTest::ignoreMessage(QtWarningMsg, "QObject::connect(SenderObject, ReceiverObject): unique connections require a pointer to member function of a QObject subclass");
+ QVERIFY(QObject::connect(&sender, &SenderObject::signal2, &receiver, &ReceiverObject::slot2));
+ receiver.count_slot2 = 0;
+
+ const auto oredType = Qt::ConnectionType(Qt::DirectConnection | Qt::UniqueConnection);
+
+ // Will assert in debug builds, so only test in release builds
+#if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS)
+ auto ignoreMsg = [] {
+ QTest::ignoreMessage(QtWarningMsg,
+ "QObject::connect(SenderObject, ReceiverObject): unique connections "
+ "require a pointer to member function of a QObject subclass");
+ };
+
+ ignoreMsg();
QVERIFY(!QObject::connect(&sender, &SenderObject::signal1, &receiver, [&](){ receiver.slot1(); }, Qt::UniqueConnection));
+ ignoreMsg();
+ QVERIFY(!QObject::connect(
+ &sender, &SenderObject::signal2, &receiver, [&]() { receiver.slot2(); }, oredType));
+#endif
+
sender.emitSignal1();
QCOMPARE(receiver.count_slot1, 1);
+
+ sender.emitSignal2();
+ QCOMPARE(receiver.count_slot2, 1);
+
+ // Check connecting to PMF doesn't hit the assert
+
+ QVERIFY(QObject::connect(&sender, &SenderObject::signal3, &receiver, &ReceiverObject::slot3,
+ Qt::UniqueConnection));
+ receiver.count_slot3 = 0;
+ sender.emitSignal3();
+ QCOMPARE(receiver.count_slot3, 1);
+
+ QVERIFY(QObject::connect(&sender, &SenderObject::signal4, &receiver, &ReceiverObject::slot4,
+ oredType));
+ receiver.count_slot4 = 0;
+ sender.emitSignal4();
+ QCOMPARE(receiver.count_slot4, 1);
}
class MyFunctor
@@ -6761,7 +7047,11 @@ struct QmlReceiver : public QtPrivate::QSlotObjectBase
, magic(0)
{}
+#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0)
static void impl(int which, QSlotObjectBase *this_, QObject *, void **metaArgs, bool *ret)
+#else
+ static void impl(QSlotObjectBase *this_, QObject *, void **metaArgs, int which, bool *ret)
+#endif
{
switch (which) {
case Destroy: delete static_cast<QmlReceiver*>(this_); return;
@@ -7026,7 +7316,7 @@ void tst_QObject::checkArgumentsForNarrowing()
{
// Clang and ICC masquerade as GCC, so introduce a more strict define
// for exactly GCC (to exclude/include it from some tests).
-#if defined(Q_CC_GNU) && !defined(Q_CC_CLANG) && !defined(Q_CC_INTEL)
+#if defined(Q_CC_GNU) && !defined(Q_CC_CLANG)
#define Q_CC_EXACTLY_GCC Q_CC_GNU
#endif
@@ -7337,7 +7627,7 @@ void tst_QObject::checkArgumentsForNarrowing()
// GCC, GHS and clang don't implement this properly yet:
// https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99625
// https://bugs.llvm.org/show_bug.cgi?id=49676
-#if defined(Q_CC_MSVC) // at least since VS2017
+#if defined(Q_CC_MSVC) && !defined(Q_CC_CLANG) // at least since VS2017
struct ConstructibleFromInt {
/* implicit */ ConstructibleFromInt(int) {}
};
@@ -8211,5 +8501,333 @@ void tst_QObject::emitToDestroyedClass()
static_assert(QtPrivate::HasQ_OBJECT_Macro<tst_QObject>::Value);
static_assert(!QtPrivate::HasQ_OBJECT_Macro<SiblingDeleter>::Value);
+Q_DECLARE_SMART_POINTER_METATYPE(std::shared_ptr)
+Q_DECLARE_SMART_POINTER_METATYPE(std::unique_ptr)
+
+
+// QTBUG-103741: OK to use smart pointers to const QObject in signals/slots
+class SenderWithSharedPointerConstQObject : public QObject
+{
+ Q_OBJECT
+
+signals:
+ void aSignal1(const QSharedPointer<const QObject> &);
+ void aSignal2(const QWeakPointer<const QObject> &);
+ void aSignal3(const QPointer<const QObject> &);
+ void aSignal4(const std::shared_ptr<const QObject> &);
+ void aSignal5(const std::unique_ptr<const QObject> &);
+};
+
+#ifdef QT_BUILD_INTERNAL
+/*
+ Since QObjectPrivate stores the declarativeData pointer in a union with the pointer
+ to the currently destroyed child, calls to the QtDeclarative handlers need to be
+ correctly guarded. QTBUG-105286
+*/
+namespace QtDeclarative {
+static QAbstractDeclarativeData *theData;
+
+static void destroyed(QAbstractDeclarativeData *data, QObject *)
+{
+ QCOMPARE(data, theData);
+}
+static void signalEmitted(QAbstractDeclarativeData *data, QObject *, int, void **)
+{
+ QCOMPARE(data, theData);
+}
+// we can't use QCOMPARE in the next two functions, as they don't return void
+static int receivers(QAbstractDeclarativeData *data, const QObject *, int)
+{
+ QTest::qCompare(data, theData, "data", "theData", __FILE__, __LINE__);
+ return 0;
+}
+static bool isSignalConnected(QAbstractDeclarativeData *data, const QObject *, int)
+{
+ QTest::qCompare(data, theData, "data", "theData", __FILE__, __LINE__);
+ return true;
+}
+
+class Object : public QObject
+{
+ Q_OBJECT
+public:
+ using QObject::QObject;
+ ~Object()
+ {
+ if (Object *p = static_cast<Object *>(parent()))
+ p->emitSignal();
+ }
+
+ void emitSignal()
+ {
+ emit theSignal();
+ }
+
+signals:
+ void theSignal();
+};
+
+}
+#endif
+
+void tst_QObject::declarativeData()
+{
+#ifdef QT_BUILD_INTERNAL
+ QScopedValueRollback destroyed(QAbstractDeclarativeData::destroyed,
+ QtDeclarative::destroyed);
+ QScopedValueRollback signalEmitted(QAbstractDeclarativeData::signalEmitted,
+ QtDeclarative::signalEmitted);
+ QScopedValueRollback receivers(QAbstractDeclarativeData::receivers,
+ QtDeclarative::receivers);
+ QScopedValueRollback isSignalConnected(QAbstractDeclarativeData::isSignalConnected,
+ QtDeclarative::isSignalConnected);
+
+ QtDeclarative::Object p;
+ QObjectPrivate *priv = QObjectPrivate::get(&p);
+ priv->declarativeData = QtDeclarative::theData = new QAbstractDeclarativeData;
+
+ connect(&p, &QtDeclarative::Object::theSignal, &p, []{
+ });
+
+ QtDeclarative::Object *child = new QtDeclarative::Object;
+ child->setParent(&p);
+#endif
+}
+
+/*
+ Compile-time test for the helpers in qobjectdefs_impl.h.
+*/
+class AsyncCaller : public QObject
+{
+ Q_OBJECT
+public:
+ ~AsyncCaller()
+ {
+ if (slotObject)
+ slotObject->destroyIfLastRef();
+ }
+ void callback0() {}
+ void callback1(const QString &) {}
+ void callbackInt(int) {}
+ int returnInt() const { return 0; }
+
+ static int staticCallback0() { return 0; }
+ static void staticCallback1(const QString &) {}
+
+ using Prototype0 = int(*)();
+ using Prototype1 = void(*)(QString);
+
+ template<typename Functor>
+ bool callMe0(const typename QtPrivate::ContextTypeForFunctor<Functor>::ContextType *, Functor &&func)
+ {
+ if (slotObject) {
+ slotObject->destroyIfLastRef();
+ slotObject = nullptr;
+ }
+ QtPrivate::AssertCompatibleFunctions<Prototype0, Functor>();
+ slotObject = QtPrivate::makeCallableObject<Prototype0>(std::forward<Functor>(func));
+ return true;
+ }
+
+ template<typename Functor>
+ bool callMe0(Functor &&func)
+ {
+ return callMe0(nullptr, std::forward<Functor>(func));
+ }
+
+ template<typename Functor>
+ bool callMe1(const typename QtPrivate::ContextTypeForFunctor<Functor>::ContextType *, Functor &&func)
+ {
+ if (slotObject) {
+ slotObject->destroyIfLastRef();
+ slotObject = nullptr;
+ }
+ QtPrivate::AssertCompatibleFunctions<Prototype1, Functor>();
+ slotObject = QtPrivate::makeCallableObject<Prototype1>(std::forward<Functor>(func));
+ return true;
+ }
+
+ template<typename Functor>
+ bool callMe1(Functor &&func)
+ {
+ return callMe1(nullptr, std::forward<Functor>(func));
+ }
+
+ QtPrivate::QSlotObjectBase *slotObject = nullptr;
+};
+
+static void freeFunction0() {}
+static void freeFunction1(QString) {}
+static void freeFunctionVariant(QVariant) {}
+
+template<typename Prototype, typename Functor>
+inline constexpr bool compiles(Functor &&) {
+ return QtPrivate::AreFunctionsCompatible<Prototype, Functor>::value;
+}
+
+void tst_QObject::asyncCallbackHelper()
+{
+ int result = 0;
+ QString arg1 = "Parameter";
+ void *argv[] = { &result, &arg1 };
+
+ auto lambda0 = []{};
+ auto lambda1 = [](const QString &) {};
+ auto lambda2 = [](const QString &, int) {};
+ const auto constLambda = [](const QString &) {};
+ auto moveOnlyLambda = [u = std::unique_ptr<int>()]{};
+ auto moveOnlyLambda1 = [u = std::unique_ptr<int>()](const QString &){};
+
+ SlotFunctor functor0;
+ SlotFunctorString functor1;
+
+ // no parameters provided or needed
+ static_assert(compiles<AsyncCaller::Prototype0>(&AsyncCaller::callback0));
+ static_assert(compiles<AsyncCaller::Prototype0>(&AsyncCaller::staticCallback0));
+ static_assert(compiles<AsyncCaller::Prototype0>(lambda0));
+ static_assert(compiles<AsyncCaller::Prototype0>(std::move(moveOnlyLambda)));
+ static_assert(compiles<AsyncCaller::Prototype0>(freeFunction0));
+ static_assert(compiles<AsyncCaller::Prototype0>(functor0));
+
+ // more parameters than needed
+ static_assert(compiles<AsyncCaller::Prototype1>(&AsyncCaller::callback0));
+ static_assert(compiles<AsyncCaller::Prototype1>(&AsyncCaller::staticCallback0));
+ static_assert(compiles<AsyncCaller::Prototype1>(lambda0));
+ static_assert(compiles<AsyncCaller::Prototype1>(freeFunction0));
+ static_assert(compiles<AsyncCaller::Prototype1>(functor0));
+
+ // matching parameter
+ static_assert(compiles<AsyncCaller::Prototype1>(&AsyncCaller::callback1));
+ static_assert(compiles<AsyncCaller::Prototype1>(&AsyncCaller::staticCallback1));
+ static_assert(compiles<AsyncCaller::Prototype1>(lambda1));
+ static_assert(compiles<AsyncCaller::Prototype1>(std::move(moveOnlyLambda1)));
+ static_assert(compiles<AsyncCaller::Prototype1>(constLambda));
+ static_assert(compiles<AsyncCaller::Prototype1>(freeFunction1));
+ static_assert(compiles<AsyncCaller::Prototype1>(functor1));
+
+ // not enough parameters
+ static_assert(!compiles<AsyncCaller::Prototype0>(&AsyncCaller::callback1));
+ static_assert(!compiles<AsyncCaller::Prototype0>(&AsyncCaller::staticCallback1));
+ static_assert(!compiles<AsyncCaller::Prototype0>(lambda1));
+ static_assert(!compiles<AsyncCaller::Prototype0>(constLambda));
+ static_assert(!compiles<AsyncCaller::Prototype0>(lambda2));
+ static_assert(!compiles<AsyncCaller::Prototype0>(freeFunction1));
+ static_assert(!compiles<AsyncCaller::Prototype0>(functor1));
+
+ // wrong parameter type
+ static_assert(!compiles<AsyncCaller::Prototype1>(&AsyncCaller::callbackInt));
+
+ // old-style slot name
+ static_assert(!compiles<AsyncCaller::Prototype0>("callback1"));
+
+ // slot with return value is ok, we just don't pass
+ // the return value through to anything.
+ static_assert(compiles<AsyncCaller::Prototype0>(&AsyncCaller::returnInt));
+
+ static_assert(compiles<AsyncCaller::Prototype1>(freeFunctionVariant));
+
+ std::function<int()> stdFunction0(&AsyncCaller::staticCallback0);
+ std::function<void(QString)> stdFunction1(&AsyncCaller::staticCallback1);
+ static_assert(compiles<AsyncCaller::Prototype0>(stdFunction0));
+ static_assert(compiles<AsyncCaller::Prototype1>(stdFunction1));
+
+ AsyncCaller caller;
+ // with context
+ QVERIFY(caller.callMe0(&caller, &AsyncCaller::callback0));
+ QVERIFY(caller.callMe0(&caller, &AsyncCaller::returnInt));
+ QVERIFY(caller.callMe0(&caller, &AsyncCaller::staticCallback0));
+ QVERIFY(caller.callMe0(&caller, lambda0));
+ QVERIFY(caller.callMe0(&caller, freeFunction0));
+ QVERIFY(caller.callMe0(&caller, std::move(moveOnlyLambda)));
+ QVERIFY(caller.callMe0(&caller, stdFunction0));
+
+ QVERIFY(caller.callMe1(&caller, &AsyncCaller::callback1));
+ QVERIFY(caller.callMe1(&caller, &AsyncCaller::staticCallback1));
+ QVERIFY(caller.callMe1(&caller, lambda1));
+ QVERIFY(caller.callMe1(&caller, freeFunction1));
+ QVERIFY(caller.callMe1(&caller, constLambda));
+ QVERIFY(caller.callMe1(&caller, stdFunction1));
+
+ // without context
+ QVERIFY(caller.callMe0(&AsyncCaller::staticCallback0));
+ QVERIFY(caller.callMe0(lambda0));
+ QVERIFY(caller.callMe0(freeFunction0));
+ QVERIFY(caller.callMe0(stdFunction0));
+
+ QVERIFY(caller.callMe1(&AsyncCaller::staticCallback1));
+ QVERIFY(caller.callMe1(lambda1));
+ QVERIFY(caller.callMe1(constLambda));
+ QVERIFY(caller.callMe1(std::move(moveOnlyLambda1)));
+ QVERIFY(caller.callMe1(freeFunction1));
+ QVERIFY(caller.callMe1(stdFunction1));
+
+ static const char *expectedPayload = "Hello World!";
+ {
+ struct MoveOnlyFunctor {
+ MoveOnlyFunctor() = default;
+ MoveOnlyFunctor(MoveOnlyFunctor &&) = default;
+ MoveOnlyFunctor(const MoveOnlyFunctor &) = delete;
+ ~MoveOnlyFunctor() = default;
+
+ int operator()() const {
+ qDebug().noquote() << payload;
+ return int(payload.length());
+ }
+ QString payload = expectedPayload;
+ } moveOnlyFunctor;
+ QVERIFY(caller.callMe0(std::move(moveOnlyFunctor)));
+ }
+ QTest::ignoreMessage(QtDebugMsg, expectedPayload);
+ caller.slotObject->call(nullptr, argv);
+ QCOMPARE(result, QLatin1String(expectedPayload).length());
+
+ // mutable lambda; same behavior as mutableFunctor - we copy the functor
+ // in the QCallableObject, so the original is not modified
+ int status = 0;
+ auto mutableLambda1 = [&status, calls = 0]() mutable { status = ++calls; };
+
+ mutableLambda1();
+ QCOMPARE(status, 1);
+ QVERIFY(caller.callMe0(mutableLambda1)); // this copies the lambda with count == 1
+ caller.slotObject->call(nullptr, argv); // this doesn't change mutableLambda1, but the copy
+ QCOMPARE(status, 2);
+ mutableLambda1();
+ QCOMPARE(status, 2); // and we are still at two
+
+ auto mutableLambda2 = [calls = 0]() mutable { return ++calls; };
+ QCOMPARE(mutableLambda2(), 1);
+ QVERIFY(caller.callMe0(mutableLambda2)); // this copies the lambda
+ caller.slotObject->call(nullptr, argv); // this call doesn't change mutableLambda2
+ QCOMPARE(mutableLambda2(), 2); // so we are still at 2
+
+ {
+ int called = -1;
+ struct MutableFunctor {
+ void operator()() { called = 0; }
+ int &called;
+ };
+ struct ConstFunctor
+ {
+ void operator()() const { called = 1; }
+ int &called;
+ };
+
+ MutableFunctor mf{called};
+ QMetaObject::invokeMethod(this, mf);
+ QCOMPARE(called, 0);
+ ConstFunctor cf{called};
+ QMetaObject::invokeMethod(this, cf);
+ QCOMPARE(called, 1);
+ QMetaObject::invokeMethod(this, [&called, u = std::unique_ptr<int>()]{ called = 2; });
+ QCOMPARE(called, 2);
+ QMetaObject::invokeMethod(this, [&called, count = 0]() mutable {
+ if (!count)
+ called = 3;
+ ++count;
+ });
+ QCOMPARE(called, 3);
+ }
+}
+
QTEST_MAIN(tst_QObject)
#include "tst_qobject.moc"
diff --git a/tests/auto/corelib/kernel/qpermission/.gitignore b/tests/auto/corelib/kernel/qpermission/.gitignore
new file mode 100644
index 0000000000..56a6bf0795
--- /dev/null
+++ b/tests/auto/corelib/kernel/qpermission/.gitignore
@@ -0,0 +1 @@
+tst_qpermission
diff --git a/tests/auto/corelib/kernel/qpermission/CMakeLists.txt b/tests/auto/corelib/kernel/qpermission/CMakeLists.txt
new file mode 100644
index 0000000000..1af0331186
--- /dev/null
+++ b/tests/auto/corelib/kernel/qpermission/CMakeLists.txt
@@ -0,0 +1,19 @@
+# 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_qpermission LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+if (NOT QT_FEATURE_permissions)
+ return()
+endif()
+
+qt_internal_add_test(tst_qpermission
+ SOURCES
+ tst_qpermission.cpp
+ LIBRARIES
+ Qt::Core
+)
diff --git a/tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp b/tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp
new file mode 100644
index 0000000000..dbf1d2dd84
--- /dev/null
+++ b/tests/auto/corelib/kernel/qpermission/tst_qpermission.cpp
@@ -0,0 +1,284 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QPermission>
+
+#include <QTest>
+
+struct DummyPermission // a minimal QPermission-compatible type
+{
+ using QtPermissionHelper = void;
+ int state = 0;
+};
+Q_DECLARE_METATYPE(DummyPermission)
+
+class tst_QPermission : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void converting_Dummy() const { return converting_impl<DummyPermission>(); }
+ void converting_Location() const { return converting_impl<QLocationPermission>(); }
+ void converting_Calendar() const { return converting_impl<QCalendarPermission>(); }
+ void converting_Contacts() const { return converting_impl<QContactsPermission>(); }
+ void converting_Camera() const { return converting_impl<QCameraPermission>(); }
+ void converting_Microphone() const { return converting_impl<QMicrophonePermission>(); }
+ void converting_Bluetooth() const { return converting_impl<QBluetoothPermission>(); }
+
+ void conversionMaintainsState() const;
+
+ void functorWithoutContext();
+ void functorWithContextInThread();
+ void receiverInThread();
+ void destroyedContextObject();
+private:
+ template <typename T>
+ void converting_impl() const;
+};
+
+template <typename T>
+void tst_QPermission::converting_impl() const
+{
+ T concrete;
+ const T cconcrete = concrete;
+ const auto metaType = QMetaType::fromType<T>();
+
+ // construction is implicit:
+ // from rvalue:
+ {
+ QPermission p = T();
+ QCOMPARE_EQ(p.type(), metaType);
+ }
+ // from mutable lvalue:
+ {
+ QPermission p = concrete;
+ QCOMPARE_EQ(p.type(), metaType);
+ }
+ // from const lvalue:
+ {
+ QPermission p = cconcrete;
+ QCOMPARE_EQ(p.type(), metaType);
+ }
+
+ // value<>() compiles:
+ {
+ const QPermission p = concrete;
+ auto v = p.value<T>();
+ static_assert(std::is_same_v<decltype(v), std::optional<T>>);
+ QCOMPARE_NE(v, std::nullopt);
+ }
+}
+
+void tst_QPermission::conversionMaintainsState() const
+{
+ DummyPermission dummy{42}, dummy_default;
+ QCOMPARE_NE(dummy.state, dummy_default.state);
+
+ QLocationPermission loc, loc_default;
+ QCOMPARE_EQ(loc_default.accuracy(), QLocationPermission::Accuracy::Approximate);
+ QCOMPARE_EQ(loc_default.availability(), QLocationPermission::Availability::WhenInUse);
+
+ loc.setAccuracy(QLocationPermission::Accuracy::Precise);
+ loc.setAvailability(QLocationPermission::Availability::Always);
+
+ QCOMPARE_EQ(loc.accuracy(), QLocationPermission::Accuracy::Precise);
+ QCOMPARE_EQ(loc.availability(), QLocationPermission::Availability::Always);
+
+ QCalendarPermission cal, cal_default;
+ QCOMPARE_EQ(cal_default.accessMode(), QCalendarPermission::AccessMode::ReadOnly);
+
+ cal.setAccessMode(QCalendarPermission::AccessMode::ReadWrite);
+
+ QCOMPARE_EQ(cal.accessMode(), QCalendarPermission::AccessMode::ReadWrite);
+
+ QContactsPermission con, con_default;
+ QCOMPARE_EQ(con_default.accessMode(), QContactsPermission::AccessMode::ReadOnly);
+
+ con.setAccessMode(QContactsPermission::AccessMode::ReadWrite);
+
+ QCOMPARE_EQ(con.accessMode(), QContactsPermission::AccessMode::ReadWrite);
+
+ //
+ // QCameraPermission, QMicrophonePermission, QBluetoothPermission don't have
+ // state at the time of writing
+ //
+
+ QPermission p; // maintain state between the blocks below to test reset behavior
+
+ {
+ p = dummy;
+ auto v = p.value<DummyPermission>();
+ QCOMPARE_NE(v, std::nullopt);
+ auto &r = *v;
+ QCOMPARE_EQ(r.state, dummy.state);
+ // check mismatched returns nullopt:
+ QCOMPARE_EQ(p.value<QCalendarPermission>(), std::nullopt);
+ }
+
+ {
+ p = loc;
+ auto v = p.value<QLocationPermission>();
+ QCOMPARE_NE(v, std::nullopt);
+ auto &r = *v;
+ QCOMPARE_EQ(r.accuracy(), loc.accuracy());
+ QCOMPARE_EQ(r.availability(), loc.availability());
+ // check mismatched returns nullopt:
+ QCOMPARE_EQ(p.value<DummyPermission>(), std::nullopt);
+ }
+
+ {
+ p = con;
+ auto v = p.value<QContactsPermission>();
+ QCOMPARE_NE(v, std::nullopt);
+ auto &r = *v;
+ QCOMPARE_EQ(r.accessMode(), con.accessMode());
+ // check mismatched returns nullopt:
+ QCOMPARE_EQ(p.value<QLocationPermission>(), std::nullopt);
+ }
+
+ {
+ p = cal;
+ auto v = p.value<QCalendarPermission>();
+ QCOMPARE_NE(v, std::nullopt);
+ auto &r = *v;
+ QCOMPARE_EQ(r.accessMode(), cal.accessMode());
+ // check mismatched returns nullopt:
+ QCOMPARE_EQ(p.value<QContactsPermission>(), std::nullopt);
+ }
+}
+
+template <typename Func,
+ typename T = std::void_t<decltype(qApp->requestPermission(std::declval<DummyPermission>(),
+ std::declval<Func>()))>
+ >
+void wrapRequestPermission(const QPermission &p, Func &&f)
+{
+ qApp->requestPermission(p, std::forward<Func>(f));
+}
+
+template <typename Functor>
+using CompatibleTest = decltype(wrapRequestPermission(std::declval<QPermission>(), std::declval<Functor>()));
+
+
+// Compile test for context-less functor overloads
+void tst_QPermission::functorWithoutContext()
+{
+ int argc = 0;
+ char *argv = nullptr;
+ QCoreApplication app(argc, &argv);
+
+ DummyPermission dummy;
+#ifdef Q_OS_DARWIN
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(".*Could not find permission plugin for DummyPermission.*"));
+#endif
+
+ qApp->requestPermission(dummy, [](const QPermission &permission){
+ QVERIFY(permission.value<DummyPermission>());
+ });
+ wrapRequestPermission(dummy, [](const QPermission &permission){
+ QVERIFY(permission.value<DummyPermission>());
+ });
+
+ auto compatible = [](const QPermission &) {};
+ using Compatible = decltype(compatible);
+ auto incompatible = [](const QString &) {};
+ using Incompatible = decltype(incompatible);
+
+ static_assert(qxp::is_detected_v<CompatibleTest, Compatible>);
+ static_assert(!qxp::is_detected_v<CompatibleTest, Incompatible>);
+}
+
+void tst_QPermission::functorWithContextInThread()
+{
+ int argc = 0;
+ char *argv = nullptr;
+ QCoreApplication app(argc, &argv);
+ QThread::currentThread()->setObjectName("main thread");
+ QThread receiverThread;
+ receiverThread.setObjectName("receiverThread");
+ QObject receiver;
+ receiver.moveToThread(&receiverThread);
+ receiverThread.start();
+ auto guard = qScopeGuard([&receiverThread]{
+ receiverThread.quit();
+ QVERIFY(receiverThread.wait(1000));
+ });
+
+ DummyPermission dummy;
+#ifdef Q_OS_DARWIN
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(".*Could not find permission plugin for DummyPermission.*"));
+#endif
+ QThread *permissionReceiverThread = nullptr;
+ qApp->requestPermission(dummy, &receiver, [&](const QPermission &permission){
+ auto dummy = permission.value<DummyPermission>();
+ QVERIFY(dummy);
+ permissionReceiverThread = QThread::currentThread();
+ });
+ QTRY_COMPARE(permissionReceiverThread, &receiverThread);
+}
+
+void tst_QPermission::receiverInThread()
+{
+ int argc = 0;
+ char *argv = nullptr;
+ QCoreApplication app(argc, &argv);
+ QThread::currentThread()->setObjectName("main thread");
+ QThread receiverThread;
+ receiverThread.setObjectName("receiverThread");
+ class Receiver : public QObject
+ {
+ public:
+ using QObject::QObject;
+ void handlePermission(const QPermission &permission)
+ {
+ auto dummy = permission.value<DummyPermission>();
+ QVERIFY(dummy);
+ permissionReceiverThread = QThread::currentThread();
+ }
+
+ QThread *permissionReceiverThread = nullptr;
+ } receiver;
+ receiver.moveToThread(&receiverThread);
+ receiverThread.start();
+ auto guard = qScopeGuard([&receiverThread]{
+ receiverThread.quit();
+ QVERIFY(receiverThread.wait(1000));
+ });
+
+ DummyPermission dummy;
+#ifdef Q_OS_DARWIN
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(".*Could not find permission plugin for DummyPermission.*"));
+#endif
+
+ qApp->requestPermission(dummy, &receiver, &Receiver::handlePermission);
+ QTRY_COMPARE(receiver.permissionReceiverThread, &receiverThread);
+
+ // compile tests: none of these work and the error output isn't horrible
+ // qApp->requestPermission(dummy, &receiver, "&tst_QPermission::receiverInThread");
+ // qApp->requestPermission(dummy, &receiver, &tst_QPermission::receiverInThread);
+ // qApp->requestPermission(dummy, &receiver, &QObject::destroyed);
+}
+
+void tst_QPermission::destroyedContextObject()
+{
+ int argc = 0;
+ char *argv = nullptr;
+ QCoreApplication app(argc, &argv);
+
+ QObject *context = new QObject;
+
+ DummyPermission dummy;
+#ifdef Q_OS_DARWIN
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(".*Could not find permission plugin for DummyPermission.*"));
+#endif
+ bool permissionReceived = false;
+ qApp->requestPermission(dummy, context, [&]{
+ permissionReceived = true;
+ });
+ QVERIFY2(!permissionReceived, "Permission received synchronously");
+ delete context;
+ QTest::qWait(100);
+ QVERIFY(!permissionReceived);
+}
+
+QTEST_APPLESS_MAIN(tst_QPermission)
+#include "tst_qpermission.moc"
diff --git a/tests/auto/corelib/kernel/qpointer/CMakeLists.txt b/tests/auto/corelib/kernel/qpointer/CMakeLists.txt
index 55a5e50ee7..b1570b8cef 100644
--- a/tests/auto/corelib/kernel/qpointer/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qpointer/CMakeLists.txt
@@ -1,13 +1,24 @@
-# Generated from qpointer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpointer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpointer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+if (NOT QT_FEATURE_thread)
+ return()
+endif()
+
qt_internal_add_test(tst_qpointer
SOURCES
tst_qpointer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
@@ -15,6 +26,6 @@ qt_internal_add_test(tst_qpointer
#####################################################################
qt_internal_extend_target(tst_qpointer CONDITION TARGET Qt::Widgets
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
)
diff --git a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp b/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp
index 6f9a422820..7365fee819 100644
--- a/tests/auto/corelib/kernel/qpointer/tst_qpointer.cpp
+++ b/tests/auto/corelib/kernel/qpointer/tst_qpointer.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 <QTest>
#include <QRunnable>
@@ -44,6 +19,8 @@ public:
private slots:
void constructors();
+ void ctad();
+ void conversion();
void destructor();
void assignment_operators();
void equality_operators();
@@ -59,14 +36,114 @@ private slots:
void constQPointer();
};
+// check that nullptr QPointer construction is Q_CONSTINIT:
+[[maybe_unused]] Q_CONSTINIT static QPointer<QFile> s_file1;
+[[maybe_unused]] Q_CONSTINIT static QPointer<QFile> s_file2 = {};
+[[maybe_unused]] Q_CONSTINIT static QPointer<QFile> s_file3 = nullptr;
+[[maybe_unused]] Q_CONSTINIT static QPointer<QFile> s_file4 = 0; // legacy nullptr
+
void tst_QPointer::constructors()
{
+ struct Derived : QObject {};
+ Derived derived;
+
QPointer<QObject> p1;
QPointer<QObject> p2(this);
QPointer<QObject> p3(p2);
+ QPointer<QObject> p4 = &derived;
QCOMPARE(p1, QPointer<QObject>(0));
QCOMPARE(p2, QPointer<QObject>(this));
QCOMPARE(p3, QPointer<QObject>(this));
+ QCOMPARE(p4, &derived);
+}
+
+void tst_QPointer::ctad()
+{
+
+ {
+ QObject o;
+ QPointer po = &o;
+ static_assert(std::is_same_v<decltype(po), QPointer<QObject>>);
+ QPointer poc = po;
+ static_assert(std::is_same_v<decltype(poc), QPointer<QObject>>);
+ QPointer pom = std::move(po);
+ static_assert(std::is_same_v<decltype(pom), QPointer<QObject>>);
+ }
+ {
+ const QObject co;
+ QPointer pco = &co;
+ static_assert(std::is_same_v<decltype(pco), QPointer<const QObject>>);
+ QPointer pcoc = pco;
+ static_assert(std::is_same_v<decltype(pcoc), QPointer<const QObject>>);
+ QPointer pcom = std::move(pco);
+ static_assert(std::is_same_v<decltype(pcom), QPointer<const QObject>>);
+ }
+ {
+ QFile f;
+ QPointer pf = &f;
+ static_assert(std::is_same_v<decltype(pf), QPointer<QFile>>);
+ QPointer pfc = pf;
+ static_assert(std::is_same_v<decltype(pfc), QPointer<QFile>>);
+ QPointer pfm = std::move(pf);
+ static_assert(std::is_same_v<decltype(pfm), QPointer<QFile>>);
+ }
+ {
+ const QFile cf;
+ QPointer pcf = &cf;
+ static_assert(std::is_same_v<decltype(pcf), QPointer<const QFile>>);
+ QPointer pcfc = pcf;
+ static_assert(std::is_same_v<decltype(pcfc), QPointer<const QFile>>);
+ QPointer pcfm = std::move(pcf);
+ static_assert(std::is_same_v<decltype(pcfm), QPointer<const QFile>>);
+ }
+}
+
+void tst_QPointer::conversion()
+{
+ // copy-conversion:
+ {
+ QFile file;
+ QPointer<QFile> pf = &file;
+ QCOMPARE_EQ(pf, &file);
+ QPointer<const QIODevice> pio = pf;
+ QCOMPARE_EQ(pio, &file);
+ QCOMPARE_EQ(pio.get(), &file);
+ QCOMPARE_EQ(pio, pf);
+ QCOMPARE_EQ(pio.get(), pf.get());
+
+ // reset
+ pio = nullptr;
+ QCOMPARE_EQ(pio, nullptr);
+ QCOMPARE_EQ(pio.get(), nullptr);
+
+ // copy-assignment
+ QCOMPARE_EQ(pf, &file);
+ pio = pf;
+ QCOMPARE_EQ(pio, &file);
+ QCOMPARE_EQ(pio.get(), &file);
+ QCOMPARE_EQ(pio, pf);
+ QCOMPARE_EQ(pio.get(), pf.get());
+ }
+ // move-conversion:
+ {
+ QFile file;
+ QPointer<QFile> pf = &file;
+ QCOMPARE_EQ(pf, &file);
+ QPointer<const QIODevice> pio = std::move(pf);
+ QCOMPARE_EQ(pf, nullptr);
+ QCOMPARE_EQ(pio, &file);
+ QCOMPARE_EQ(pio.get(), &file);
+
+ // reset
+ pio = nullptr;
+ QCOMPARE_EQ(pio, nullptr);
+ QCOMPARE_EQ(pio.get(), nullptr);
+
+ // move-assignment
+ pio = QPointer<QFile>(&file);
+ QCOMPARE_EQ(pio, &file);
+ QCOMPARE_EQ(pio.get(), &file);
+ }
}
void tst_QPointer::destructor()
diff --git a/tests/auto/corelib/kernel/qproperty/CMakeLists.txt b/tests/auto/corelib/kernel/qproperty/CMakeLists.txt
index 55a5d71752..177465d2ee 100644
--- a/tests/auto/corelib/kernel/qproperty/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qproperty/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qproperty.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qproperty Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qproperty LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qproperty
SOURCES
tst_qproperty.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp b/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp
index ef4c6868cf..cc7edb8bf2 100644
--- a/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp
+++ b/tests/auto/corelib/kernel/qproperty/tst_qproperty.cpp
@@ -1,47 +1,23 @@
-/****************************************************************************
-**
-** 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 <QObject>
#include <QSignalSpy>
#include <qtest.h>
#include <qproperty.h>
#include <private/qproperty_p.h>
+#include <private/qobject_p.h>
-#if __has_include(<source_location>) && __cplusplus >= 202002L && !defined(Q_CLANG_QDOC)
+#if __has_include(<source_location>) && __cplusplus >= 202002L && !defined(Q_QDOC)
#include <source_location>
#define QT_SOURCE_LOCATION_NAMESPACE std
-#elif __has_include(<experimental/source_location>) && !defined(Q_CLANG_QDOC)
+#elif __has_include(<experimental/source_location>) && !defined(Q_QDOC)
#include <experimental/source_location>
#define QT_SOURCE_LOCATION_NAMESPACE std::experimental
#endif
using namespace QtPrivate;
-
+using namespace Qt::StringLiterals;
struct DtorCounter {
static inline int counter = 0;
@@ -53,6 +29,7 @@ class tst_QProperty : public QObject
{
Q_OBJECT
private slots:
+ void inheritQUntypedPropertyData();
void functorBinding();
void basicDependencies();
void multipleDependencies();
@@ -91,6 +68,7 @@ private slots:
void quntypedBindableApi();
void readonlyConstQBindable();
void qobjectBindableManualNotify();
+ void qobjectBindableReallocatedBindingStorage();
void qobjectBindableSignalTakingNewValue();
void testNewStuff();
@@ -99,15 +77,22 @@ private slots:
void metaProperty();
void modifyObserverListWhileIterating();
+ void noDoubleCapture();
void compatPropertyNoDobuleNotification();
void compatPropertySignals();
void noFakeDependencies();
+#if QT_CONFIG(thread)
+ void threadSafety();
+ void threadSafety2();
+#endif // QT_CONFIG(thread)
void bindablePropertyWithInitialization();
void noDoubleNotification();
void groupedNotifications();
void groupedNotificationConsistency();
+ void bindingGroupMovingBindingData();
+ void bindingGroupBindingDeleted();
void uninstalledBindingDoesNotEvaluate();
void notify();
@@ -117,8 +102,69 @@ private slots:
void selfBindingShouldNotCrash();
void qpropertyAlias();
+ void scheduleNotify();
+
+ void notifyAfterAllDepsGone();
+
+ void propertyAdaptorBinding();
+ void propertyUpdateViaSignaledProperty();
+
+ void derefFromObserver();
};
+namespace {
+template <class T>
+constexpr auto isDerivedFromQUntypedPropertyData = std::is_base_of_v<QUntypedPropertyData, T>;
+
+template <typename Property>
+constexpr auto isDerivedFromQUntypedPropertyDataFunc(const Property &property)
+{
+ Q_UNUSED(property);
+ return isDerivedFromQUntypedPropertyData<Property>;
+}
+
+template <typename Property>
+constexpr auto isDerivedFromQUntypedPropertyDataFunc(Property *property)
+{
+ Q_UNUSED(property);
+ return isDerivedFromQUntypedPropertyData<Property>;
+}
+} // namespace
+
+void tst_QProperty::inheritQUntypedPropertyData()
+{
+ class propertyPublic : public QUntypedPropertyData
+ {
+ };
+ class propertyPrivate : private QUntypedPropertyData
+ {
+ };
+
+ // Compile time test
+ static_assert(isDerivedFromQUntypedPropertyData<propertyPublic>);
+ static_assert(isDerivedFromQUntypedPropertyData<propertyPrivate>);
+ static_assert(isDerivedFromQUntypedPropertyData<QPropertyData<int>>);
+ static_assert(isDerivedFromQUntypedPropertyData<QProperty<int>>);
+
+ // Run time test
+ propertyPublic _propertyPublic;
+ propertyPrivate _propertyPrivate;
+ QPropertyData<int> qpropertyData;
+ QProperty<int> qproperty;
+ std::unique_ptr<propertyPublic> _propertyPublicPtr{ new propertyPublic };
+ std::unique_ptr<propertyPrivate> _propertyPrivatePtr{ new propertyPrivate };
+ std::unique_ptr<QPropertyData<int>> qpropertyDataPtr{ new QPropertyData<int> };
+ std::unique_ptr<QProperty<int>> qpropertyPtr{ new QProperty<int> };
+ QVERIFY(isDerivedFromQUntypedPropertyDataFunc(_propertyPublic));
+ QVERIFY(isDerivedFromQUntypedPropertyDataFunc(_propertyPrivate));
+ QVERIFY(isDerivedFromQUntypedPropertyDataFunc(qpropertyData));
+ QVERIFY(isDerivedFromQUntypedPropertyDataFunc(qproperty));
+ QVERIFY(isDerivedFromQUntypedPropertyDataFunc(_propertyPublicPtr.get()));
+ QVERIFY(isDerivedFromQUntypedPropertyDataFunc(_propertyPrivatePtr.get()));
+ QVERIFY(isDerivedFromQUntypedPropertyDataFunc(qpropertyDataPtr.get()));
+ QVERIFY(isDerivedFromQUntypedPropertyDataFunc(qpropertyPtr.get()));
+}
+
void tst_QProperty::functorBinding()
{
QProperty<int> property([]() { return 42; });
@@ -271,6 +317,7 @@ void tst_QProperty::bindingAfterUse()
void tst_QProperty::bindingFunctionDtorCalled()
{
+ DtorCounter::counter = 0;
DtorCounter dc;
{
QProperty<int> prop;
@@ -409,7 +456,7 @@ void tst_QProperty::changeHandler()
}
testProperty = 3;
- QCOMPARE(recordedValues.count(), 2);
+ QCOMPARE(recordedValues.size(), 2);
QCOMPARE(recordedValues.at(0), 1);
QCOMPARE(recordedValues.at(1), 2);
}
@@ -452,7 +499,7 @@ void tst_QProperty::subscribe()
}
testProperty = 3;
- QCOMPARE(recordedValues.count(), 3);
+ QCOMPARE(recordedValues.size(), 3);
QCOMPARE(recordedValues.at(0), 42);
QCOMPARE(recordedValues.at(1), 1);
QCOMPARE(recordedValues.at(2), 2);
@@ -887,7 +934,7 @@ void tst_QProperty::notifiedProperty()
check();
instance.property.setValue(42);
- QCOMPARE(instance.recordedValues.count(), 1);
+ QCOMPARE(instance.recordedValues.size(), 1);
QCOMPARE(instance.recordedValues.at(0), 42);
instance.recordedValues.clear();
check();
@@ -917,7 +964,7 @@ void tst_QProperty::notifiedProperty()
subscribedCount = 0;
QCOMPARE(instance.property.value(), 100);
- QCOMPARE(instance.recordedValues.count(), 1);
+ QCOMPARE(instance.recordedValues.size(), 1);
QCOMPARE(instance.recordedValues.at(0), 100);
instance.recordedValues.clear();
check();
@@ -925,7 +972,7 @@ void tst_QProperty::notifiedProperty()
injectedValue = 200;
QCOMPARE(instance.property.value(), 200);
- QCOMPARE(instance.recordedValues.count(), 1);
+ QCOMPARE(instance.recordedValues.size(), 1);
QCOMPARE(instance.recordedValues.at(0), 200);
instance.recordedValues.clear();
check();
@@ -934,7 +981,7 @@ void tst_QProperty::notifiedProperty()
injectedValue = 400;
QCOMPARE(instance.property.value(), 400);
- QCOMPARE(instance.recordedValues.count(), 1);
+ QCOMPARE(instance.recordedValues.size(), 1);
QCOMPARE(instance.recordedValues.at(0), 400);
instance.recordedValues.clear();
check();
@@ -1173,12 +1220,12 @@ void tst_QProperty::qobjectBindableManualNotify()
object.fooData.setValueBypassingBindings(42);
// there is no change.
QCOMPARE(fooChangeCount, 0);
- QCOMPARE(fooChangedSpy.count(), 0);
+ QCOMPARE(fooChangedSpy.size(), 0);
// Once we notify manually
object.fooData.notify();
// observers are notified and the signal arrives.
QCOMPARE(fooChangeCount, 1);
- QCOMPARE(fooChangedSpy.count(), 1);
+ QCOMPARE(fooChangedSpy.size(), 1);
// If we set a binding
int i = 1;
@@ -1187,20 +1234,37 @@ void tst_QProperty::qobjectBindableManualNotify()
QCOMPARE(object.foo(), 1);
// and the change and signal count are incremented.
QCOMPARE(fooChangeCount, 2);
- QCOMPARE(fooChangedSpy.count(), 2);
+ QCOMPARE(fooChangedSpy.size(), 2);
// Changing a non-property won't trigger any notification.
i = 2;
QCOMPARE(fooChangeCount, 2);
- QCOMPARE(fooChangedSpy.count(), 2);
+ QCOMPARE(fooChangedSpy.size(), 2);
// Manually triggering the notification
object.fooData.notify();
// increments the change count
QCOMPARE(fooChangeCount, 3);
- QCOMPARE(fooChangedSpy.count(), 3);
+ QCOMPARE(fooChangedSpy.size(), 3);
// but doesn't actually cause a binding reevaluation.
QCOMPARE(object.foo(), 1);
}
+
+struct ReallocObject : QObject {
+ ReallocObject()
+ { v.setBinding([this] { return x.value() + y.value() + z.value(); }); }
+ Q_OBJECT_BINDABLE_PROPERTY(ReallocObject, int, v)
+ Q_OBJECT_BINDABLE_PROPERTY(ReallocObject, int, x)
+ Q_OBJECT_BINDABLE_PROPERTY(ReallocObject, int, y)
+ Q_OBJECT_BINDABLE_PROPERTY(ReallocObject, int, z)
+};
+
+void tst_QProperty::qobjectBindableReallocatedBindingStorage()
+{
+ ReallocObject object;
+ object.x = 1;
+ QCOMPARE(object.v.value(), 1);
+}
+
void tst_QProperty::qobjectBindableSignalTakingNewValue()
{
// Given an object of type MyQObject,
@@ -1488,6 +1552,22 @@ void tst_QProperty::modifyObserverListWhileIterating()
}
}
+void tst_QProperty::noDoubleCapture()
+{
+ QProperty<long long> size;
+ size = 3;
+ QProperty<int> max;
+ max.setBinding([&size]() -> int {
+ // each loop run attempts to capture size
+ for (int i = 0; i < size; ++i) {}
+ return size.value();
+ });
+ auto bindingPriv = QPropertyBindingPrivate::get(max.binding());
+ QCOMPARE(bindingPriv->dependencyObserverCount, 1U);
+ size = 4; // should not crash
+ QCOMPARE(max.value(), 4);
+}
+
class CompatPropertyTester : public QObject
{
Q_OBJECT
@@ -1579,7 +1659,7 @@ void tst_QProperty::compatPropertySignals()
tester.setProp2(10);
QCOMPARE(prop2Observer.value(), 10);
- QCOMPARE(prop2Spy.count(), 1);
+ QCOMPARE(prop2Spy.size(), 1);
QList<QVariant> arguments = prop2Spy.takeFirst();
QCOMPARE(arguments.size(), 1);
QCOMPARE(arguments.at(0).metaType().id(), QMetaType::Int);
@@ -1595,7 +1675,7 @@ void tst_QProperty::compatPropertySignals()
tester.setProp3(5);
QCOMPARE(prop3Observer.value(), 5);
- QCOMPARE(prop3Spy.count(), 1);
+ QCOMPARE(prop3Spy.size(), 1);
// Compat property with signal, default value, and custom setter. Signal has parameter.
QProperty<int> prop4Observer;
@@ -1607,7 +1687,7 @@ void tst_QProperty::compatPropertySignals()
tester.setProp4(10);
QCOMPARE(prop4Observer.value(), 10);
- QCOMPARE(prop4Spy.count(), 1);
+ QCOMPARE(prop4Spy.size(), 1);
arguments = prop4Spy.takeFirst();
QCOMPARE(arguments.size(), 1);
QCOMPARE(arguments.at(0).metaType().id(), QMetaType::Int);
@@ -1616,7 +1696,7 @@ void tst_QProperty::compatPropertySignals()
tester.setProp4(42);
QCOMPARE(prop4Observer.value(), 42);
- QCOMPARE(prop4Spy.count(), 1);
+ QCOMPARE(prop4Spy.size(), 1);
arguments = prop4Spy.takeFirst();
QCOMPARE(arguments.size(), 1);
QCOMPARE(arguments.at(0).metaType().id(), QMetaType::Int);
@@ -1625,7 +1705,7 @@ void tst_QProperty::compatPropertySignals()
tester.setProp4(0);
QCOMPARE(prop4Observer.value(), 42);
- QCOMPARE(prop4Spy.count(), 1);
+ QCOMPARE(prop4Spy.size(), 1);
arguments = prop4Spy.takeFirst();
QCOMPARE(arguments.size(), 1);
QCOMPARE(arguments.at(0).metaType().id(), QMetaType::Int);
@@ -1681,6 +1761,323 @@ void tst_QProperty::noFakeDependencies()
QCOMPARE(old, bindingFunctionCalled);
}
+class PropertyAdaptorTester : public QObject
+{
+ Q_OBJECT
+
+ Q_PROPERTY(int foo READ foo WRITE setFoo NOTIFY fooChanged)
+ Q_PROPERTY(int foo1 READ foo WRITE setFoo)
+
+signals:
+ void dummySignal1();
+ void dummySignal2();
+ void dummySignal3();
+ void dummySignal4();
+ void dummySignal5();
+ void dummySignal6();
+ void dummySignal7();
+ void dummySignal8();
+ void fooChanged(int newFoo);
+
+public slots:
+ void fooHasChanged() { fooChangedCount++; }
+
+public:
+ int foo() const { return fooData; }
+ void setFoo(int i)
+ {
+ if (i != fooData) {
+ fooData = i;
+ fooChanged(fooData);
+ }
+ }
+
+public:
+ int fooData = 0;
+ int fooChangedCount = 0;
+};
+
+void tst_QProperty::propertyAdaptorBinding()
+{
+ QProperty<int> source { 5 };
+ QProperty<int> dest1 { 99 };
+ QProperty<int> dest2 { 98 };
+
+ // Check binding of non BINDABLE property
+ PropertyAdaptorTester object;
+ // set up a dummy connection (needed to verify that the QBindable avoids an out-of-bounds read)
+ QObject::connect(&object, &PropertyAdaptorTester::dummySignal1, [](){});
+ QBindable<int> binding(&object, "foo");
+ QObject::connect(&object, &PropertyAdaptorTester::fooChanged, &object,
+ &PropertyAdaptorTester::fooHasChanged);
+ binding.setBinding([&]() { return source + 1; });
+ QCOMPARE(object.foo(), 6);
+ QCOMPARE(object.fooChangedCount, 1);
+
+ struct MyBindable : QBindable<int> {
+ using QBindable<int>::QBindable;
+ QtPrivate::QPropertyAdaptorSlotObject* data() {
+ return static_cast<QtPrivate::QPropertyAdaptorSlotObject*>(QUntypedBindable::data);
+ }
+ } dataBinding(&object, "foo");
+ QPropertyBindingDataPointer data{&dataBinding.data()->bindingData()};
+
+ QCOMPARE(data.observerCount(), 0);
+ dest1.setBinding(binding.makeBinding());
+ QCOMPARE(data.observerCount(), 1);
+ dest2.setBinding([=]() { return binding.value() + 1; });
+ binding = {};
+ QCOMPARE(data.observerCount(), 2);
+
+ // Check addNotifer
+ {
+ int local_foo = 0;
+ auto notifier = QBindable<int>(&object, "foo").addNotifier([&]() { local_foo++; });
+ QCOMPARE(data.observerCount(), 3);
+ QCOMPARE(object.foo(), 6);
+ QCOMPARE(dest1.value(), 6);
+ QCOMPARE(dest2.value(), 7);
+ QCOMPARE(local_foo, 0);
+ QCOMPARE(object.fooChangedCount, 1);
+
+ source = 7;
+ QCOMPARE(object.foo(), 8);
+ QCOMPARE(dest1.value(), 8);
+ QCOMPARE(dest2.value(), 9);
+ QCOMPARE(local_foo, 1);
+ QCOMPARE(object.fooChangedCount, 2);
+ }
+
+ QCOMPARE(data.observerCount(), 2);
+
+ // Check a new QBindable object can override the existing binding
+ QBindable<int>(&object, "foo").setValue(10);
+ QCOMPARE(object.foo(), 10);
+ QCOMPARE(dest1.value(), 10);
+ QCOMPARE(dest2.value(), 11);
+ QCOMPARE(object.fooChangedCount, 3);
+ source.setValue(99);
+ QCOMPARE(object.foo(), 10);
+ QCOMPARE(dest1.value(), 10);
+ QCOMPARE(dest2.value(), 11);
+ QCOMPARE(object.fooChangedCount, 3);
+ object.setFoo(12);
+ QCOMPARE(object.foo(), 12);
+ QCOMPARE(dest1.value(), 12);
+ QCOMPARE(dest2.value(), 13);
+ QCOMPARE(object.fooChangedCount, 4);
+
+ // Check binding multiple notifiers
+ QProperty<int> source2 { 20 };
+ source.setValue(21);
+ binding = QBindable<int>(&object, "foo");
+ binding.setBinding([&]() { return source + source2; });
+ QCOMPARE(object.foo(), 41);
+ QCOMPARE(dest1.value(), 41);
+ QCOMPARE(object.fooChangedCount, 5);
+ source.setValue(22);
+ QCOMPARE(object.foo(), 42);
+ QCOMPARE(dest1.value(), 42);
+ QCOMPARE(object.fooChangedCount, 6);
+ source2.setValue(21);
+ QCOMPARE(object.foo(), 43);
+ QCOMPARE(dest1.value(), 43);
+ QCOMPARE(object.fooChangedCount, 7);
+
+ // Check update group
+ {
+ const QScopedPropertyUpdateGroup guard;
+ source.setValue(23);
+ source2.setValue(22);
+ QCOMPARE(object.foo(), 43);
+ QCOMPARE(dest1.value(), 43);
+ QCOMPARE(object.fooChangedCount, 7);
+ }
+ QCOMPARE(object.foo(), 45);
+ QCOMPARE(dest1.value(), 45);
+ QCOMPARE(object.fooChangedCount, 8);
+
+ PropertyAdaptorTester object2;
+ PropertyAdaptorTester object3;
+
+ // Check multiple observers
+ QBindable<int> binding2(&object2, "foo");
+ QBindable<int> binding3(&object3, "foo");
+ binding.setBinding([=]() { return binding2.value(); });
+ binding3.setBinding([=]() { return binding.value(); });
+ QCOMPARE(object.foo(), 0);
+ QCOMPARE(object2.foo(), 0);
+ QCOMPARE(object3.foo(), 0);
+ QCOMPARE(dest1.value(), 0);
+ object2.setFoo(1);
+ QCOMPARE(object.foo(), 1);
+ QCOMPARE(object2.foo(), 1);
+ QCOMPARE(object3.foo(), 1);
+ QCOMPARE(dest1.value(), 1);
+
+ // Check interoperation with BINDABLE properties
+ MyQObject bindableObject;
+ bindableObject.fooData.setBinding([]() { return 5; });
+ QVERIFY(bindableObject.fooData.hasBinding());
+ QVERIFY(!bindableObject.barData.hasBinding());
+ QVERIFY(QBindable<int>(&bindableObject, "foo").hasBinding());
+ QBindable<int> bindableBar(&bindableObject, "bar");
+ QVERIFY(!bindableBar.hasBinding());
+ bindableBar.setBinding([]() { return 6; });
+ QVERIFY(bindableBar.hasBinding());
+ QVERIFY(bindableObject.barData.hasBinding());
+
+ // Check bad arguments
+#ifndef QT_NO_DEBUG
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, "QUntypedBindable: Property is not valid");
+#endif
+ QVERIFY(!QBindable<int>(&object, QMetaProperty{}).isValid());
+#ifndef QT_NO_DEBUG
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, "QUntypedBindable: Property foo1 has no notify signal");
+#endif
+ QVERIFY(!QBindable<int>(&object, "foo1").isValid());
+#ifndef QT_NO_DEBUG
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, "QUntypedBindable: Property foo of type int does not match requested type bool");
+#endif
+ QVERIFY(!QBindable<bool>(&object, "foo").isValid());
+#ifndef QT_NO_DEBUG
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg,
+ "QUntypedBindable: Property foo does not belong to this object");
+#endif
+ QObject qobj;
+ QVERIFY(!QBindable<int>(
+ &qobj,
+ object.metaObject()->property(object.metaObject()->indexOfProperty("foo")))
+ .isValid());
+#ifndef QT_NO_DEBUG
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, "QUntypedBindable: No property named fizz");
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, "QUntypedBindable: Property is not valid");
+#endif
+ QVERIFY(!QBindable<int>(&object, "fizz").isValid());
+}
+
+#if QT_CONFIG(thread)
+struct ThreadSafetyTester : public QObject
+{
+ Q_OBJECT
+
+public:
+ ThreadSafetyTester(QObject *parent = nullptr) : QObject(parent) {}
+
+ Q_INVOKABLE bool hasCorrectStatus() const
+ {
+ return qGetBindingStorage(this)->status({}) == QtPrivate::getBindingStatus({});
+ }
+
+ Q_INVOKABLE bool bindingTest()
+ {
+ QProperty<QString> name(u"inThread"_s);
+ bindableObjectName().setBinding([&]() -> QString { return name; });
+ name = u"inThreadChanged"_s;
+ const bool nameChangedCorrectly = objectName() == name;
+ bindableObjectName().takeBinding();
+ return nameChangedCorrectly;
+ }
+};
+
+
+void tst_QProperty::threadSafety()
+{
+ QThread workerThread;
+ auto cleanup = qScopeGuard([&](){
+ QMetaObject::invokeMethod(&workerThread, "quit");
+ workerThread.wait();
+ });
+ QScopedPointer<ThreadSafetyTester> scopedObj1(new ThreadSafetyTester);
+ auto obj1 = scopedObj1.data();
+ auto child1 = new ThreadSafetyTester(obj1);
+ obj1->moveToThread(&workerThread);
+ const auto mainThreadBindingStatus = QtPrivate::getBindingStatus({});
+ QCOMPARE(qGetBindingStorage(child1)->status({}), nullptr);
+ workerThread.start();
+
+ bool correctStatus = false;
+ bool ok = QMetaObject::invokeMethod(obj1, "hasCorrectStatus", Qt::BlockingQueuedConnection,
+ Q_RETURN_ARG(bool, correctStatus));
+ QVERIFY(ok);
+ QVERIFY(correctStatus);
+
+ bool bindingWorks = false;
+ ok = QMetaObject::invokeMethod(obj1, "bindingTest", Qt::BlockingQueuedConnection,
+ Q_RETURN_ARG(bool, bindingWorks));
+ QVERIFY(ok);
+ QVERIFY(bindingWorks);
+
+ correctStatus = false;
+ ok = QMetaObject::invokeMethod(child1, "hasCorrectStatus", Qt::BlockingQueuedConnection,
+ Q_RETURN_ARG(bool, correctStatus));
+ QVERIFY(ok);
+ QVERIFY(correctStatus);
+
+ QScopedPointer scopedObj2(new ThreadSafetyTester);
+ auto obj2 = scopedObj2.data();
+ QCOMPARE(qGetBindingStorage(obj2)->status({}), mainThreadBindingStatus);
+
+ obj2->setObjectName("moved");
+ QCOMPARE(obj2->objectName(), "moved");
+
+ obj2->moveToThread(&workerThread);
+ correctStatus = false;
+ ok = QMetaObject::invokeMethod(obj2, "hasCorrectStatus", Qt::BlockingQueuedConnection,
+ Q_RETURN_ARG(bool, correctStatus));
+
+ QVERIFY(ok);
+ QVERIFY(correctStatus);
+ // potentially unsafe, but should still work (no writes in owning thread)
+ QCOMPARE(obj2->objectName(), "moved");
+
+
+ QScopedPointer scopedObj3(new ThreadSafetyTester);
+ auto obj3 = scopedObj3.data();
+ obj3->setObjectName("moved");
+ QCOMPARE(obj3->objectName(), "moved");
+ obj3->moveToThread(nullptr);
+ QCOMPARE(obj2->objectName(), "moved");
+ obj3->setObjectName("moved again");
+ QCOMPARE(obj3->objectName(), "moved again");
+}
+
+class QPropertyUsingThread : public QThread
+{
+public:
+ QPropertyUsingThread(QObject **dest, QThread *destThread) : dest(dest), destThread(destThread) {}
+ void run() override
+ {
+ scopedObj1.reset(new ThreadSafetyTester());
+ scopedObj1->setObjectName("test");
+ QObject *child = new ThreadSafetyTester(scopedObj1.get());
+ child->setObjectName("child");
+ exec();
+ scopedObj1->moveToThread(destThread);
+ *dest = scopedObj1.release();
+ }
+ std::unique_ptr<ThreadSafetyTester> scopedObj1;
+ QObject **dest;
+ QThread *destThread;
+};
+
+void tst_QProperty::threadSafety2()
+{
+ std::unique_ptr<QObject> movedObj;
+ {
+ QObject *tmp = nullptr;
+ QPropertyUsingThread workerThread(&tmp, QThread::currentThread());
+ workerThread.start();
+ workerThread.quit();
+ workerThread.wait();
+ movedObj.reset(tmp);
+ }
+
+ QCOMPARE(movedObj->objectName(), "test");
+ QCOMPARE(movedObj->children().first()->objectName(), "child");
+}
+#endif // QT_CONFIG(thread)
+
struct CustomType
{
CustomType() = default;
@@ -1792,27 +2189,29 @@ void tst_QProperty::groupedNotifications()
QCOMPARE(nNotifications, 1);
expected = 2;
- Qt::beginPropertyUpdateGroup();
- a = 1;
- QCOMPARE(b.value(), 0);
- QCOMPARE(c.value(), 0);
- QCOMPARE(d.value(), 0);
- QCOMPARE(nNotifications, 1);
- Qt::endPropertyUpdateGroup();
+ {
+ const QScopedPropertyUpdateGroup guard;
+ a = 1;
+ QCOMPARE(b.value(), 0);
+ QCOMPARE(c.value(), 0);
+ QCOMPARE(d.value(), 0);
+ QCOMPARE(nNotifications, 1);
+ }
QCOMPARE(b.value(), 1);
QCOMPARE(c.value(), 1);
QCOMPARE(e.value(), 2);
QCOMPARE(nNotifications, 2);
expected = 7;
- Qt::beginPropertyUpdateGroup();
- a = 2;
- d = 3;
- QCOMPARE(b.value(), 1);
- QCOMPARE(c.value(), 1);
- QCOMPARE(d.value(), 3);
- QCOMPARE(nNotifications, 2);
- Qt::endPropertyUpdateGroup();
+ {
+ const QScopedPropertyUpdateGroup guard;
+ a = 2;
+ d = 3;
+ QCOMPARE(b.value(), 1);
+ QCOMPARE(c.value(), 1);
+ QCOMPARE(d.value(), 3);
+ QCOMPARE(nNotifications, 2);
+ }
QCOMPARE(b.value(), 2);
QCOMPARE(c.value(), 2);
QCOMPARE(e.value(), 7);
@@ -1835,13 +2234,71 @@ void tst_QProperty::groupedNotificationConsistency()
j = 1;
QVERIFY(!areEqual); // value changed runs before j = 1
- Qt::beginPropertyUpdateGroup();
- i = 2;
- j = 2;
- Qt::endPropertyUpdateGroup();
+ {
+ const QScopedPropertyUpdateGroup guard;
+ i = 2;
+ j = 2;
+ }
QVERIFY(areEqual); // value changed runs after everything has been evaluated
}
+void tst_QProperty::bindingGroupMovingBindingData()
+{
+ auto tester = std::make_unique<ClassWithNotifiedProperty>();
+ auto testerPriv = QObjectPrivate::get(tester.get());
+
+ auto dummyNotifier = tester->property.addNotifier([](){});
+ auto bindingData = testerPriv->bindingStorage.bindingData(&tester->property);
+ QVERIFY(bindingData); // we have a notifier, so there should be binding data
+
+ Qt::beginPropertyUpdateGroup();
+ auto cleanup = qScopeGuard([](){ Qt::endPropertyUpdateGroup(); });
+ tester->property = 42;
+ QCOMPARE(testerPriv->bindingStorage.bindingData(&tester->property), bindingData);
+ auto proxyData = QPropertyBindingDataPointer::proxyData(bindingData);
+ // as we've modified the property, we now should have a proxy for the delayed notification
+ QVERIFY(proxyData);
+ // trigger binding data reallocation
+ std::array<QUntypedPropertyData, 10> propertyDataArray;
+ for (auto&& data: propertyDataArray)
+ testerPriv->bindingStorage.bindingData(&data, true);
+ // binding data has moved
+ QVERIFY(testerPriv->bindingStorage.bindingData(&tester->property) != bindingData);
+ bindingData = testerPriv->bindingStorage.bindingData(&tester->property);
+ // the proxy data has been updated
+ QCOMPARE(proxyData->originalBindingData, bindingData);
+
+ tester.reset();
+ // the property data is gone, proxyData should have been informed
+ QCOMPARE(proxyData->originalBindingData, nullptr);
+ QVERIFY(proxyData);
+}
+
+void tst_QProperty::bindingGroupBindingDeleted()
+{
+ auto deleter = std::make_unique<ClassWithNotifiedProperty>();
+ auto toBeDeleted = std::make_unique<ClassWithNotifiedProperty>();
+
+ bool calledHandler = false;
+ deleter->property.setBinding([&](){
+ int newValue = toBeDeleted->property;
+ if (newValue == 42)
+ toBeDeleted.reset();
+ return newValue;
+ });
+ auto handler = toBeDeleted->property.onValueChanged([&]() { calledHandler = true; } );
+ {
+ Qt::beginPropertyUpdateGroup();
+ auto cleanup = qScopeGuard([](){ Qt::endPropertyUpdateGroup(); });
+ QVERIFY(toBeDeleted);
+ toBeDeleted->property = 42;
+ // ASAN should not complain here
+ }
+ QVERIFY(!toBeDeleted);
+ // the change notification is sent, even if the binding is deleted during evaluation
+ QVERIFY(calledHandler);
+}
+
void tst_QProperty::uninstalledBindingDoesNotEvaluate()
{
QProperty<int> i;
@@ -1893,7 +2350,7 @@ void tst_QProperty::notify()
testProperty = 4;
QCOMPARE(value, 3);
- QCOMPARE(recordedValues.count(), 2);
+ QCOMPARE(recordedValues.size(), 2);
QCOMPARE(recordedValues.at(0), 1);
QCOMPARE(recordedValues.at(1), 2);
}
@@ -1916,17 +2373,206 @@ void tst_QProperty::selfBindingShouldNotCrash()
void tst_QProperty::qpropertyAlias()
{
+#if QT_DEPRECATED_SINCE(6, 6)
+ QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
std::unique_ptr<QProperty<int>> i {new QProperty<int>};
QPropertyAlias<int> alias(i.get());
QVERIFY(alias.isValid());
alias.setValue(42);
QCOMPARE(i->value(), 42);
QProperty<int> j;
+ bool notifierCalled = false;
+ auto myNotifier = alias.addNotifier([&](){notifierCalled = true;});
i->setBinding([&]() -> int { return j; });
+ QVERIFY(notifierCalled);
j.setValue(42);
QCOMPARE(alias.value(), 42);
i.reset();
QVERIFY(!alias.isValid());
+ QT_WARNING_POP
+#endif
+}
+
+void tst_QProperty::scheduleNotify()
+{
+ int notifications = 0;
+ QProperty<int> p;
+ QCOMPARE(p.value(), 0);
+ const auto handler = p.addNotifier([&](){ ++notifications; });
+ QCOMPARE(notifications, 0);
+ QPropertyBinding<int> b([]() { return 0; }, QPropertyBindingSourceLocation());
+ QPropertyBindingPrivate::get(b)->scheduleNotify();
+ QCOMPARE(notifications, 0);
+ p.setBinding(b);
+ QCOMPARE(notifications, 1);
+ QCOMPARE(p.value(), 0);
+}
+
+void tst_QProperty::notifyAfterAllDepsGone()
+{
+ bool b = true;
+ QProperty<int> iprop;
+ QProperty<int> jprop(42);
+ iprop.setBinding([&](){
+ if (b)
+ return jprop.value();
+ return 13;
+ });
+ int changeCounter = 0;
+ auto keepAlive = iprop.onValueChanged([&](){ changeCounter++; });
+ QCOMPARE(iprop.value(), 42);
+ jprop = 44;
+ QCOMPARE(iprop.value(), 44);
+ QCOMPARE(changeCounter, 1);
+ b = false;
+ jprop = 43;
+ QCOMPARE(iprop.value(), 13);
+ QCOMPARE(changeCounter, 2);
+}
+
+class TestObject : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int signaled READ signaled WRITE setSignaled NOTIFY signaledChanged FINAL)
+ Q_PROPERTY(int bindable1 READ bindable1 WRITE setBindable1 BINDABLE bindable1Bindable NOTIFY bindable1Changed FINAL)
+ Q_PROPERTY(int bindable2 READ bindable2 WRITE setBindable2 BINDABLE bindable2Bindable NOTIFY bindable2Changed FINAL)
+
+public:
+ int signaled() const
+ {
+ return m_signaled;
+ }
+
+ void setSignaled(int newSignaled)
+ {
+ if (m_signaled == newSignaled)
+ return;
+ m_signaled = newSignaled;
+ emit signaledChanged();
+ }
+
+ int bindable1() const
+ {
+ return m_bindable1;
+ }
+
+ void setBindable1(int newBindable1)
+ {
+ if (m_bindable1 == newBindable1)
+ return;
+ m_bindable1 = newBindable1;
+ emit bindable1Changed();
+ }
+
+ QBindable<int> bindable1Bindable()
+ {
+ return QBindable<int>(&m_bindable1);
+ }
+
+ int bindable2() const
+ {
+ return m_bindable2;
+ }
+
+ void setBindable2(int newBindable2)
+ {
+ if (m_bindable2 == newBindable2)
+ return;
+ m_bindable2 = newBindable2;
+ emit bindable2Changed();
+ }
+
+ QBindable<int> bindable2Bindable()
+ {
+ return QBindable<int>(&m_bindable2);
+ }
+
+signals:
+ void signaledChanged();
+ void bindable1Changed();
+ void bindable2Changed();
+
+private:
+ int m_signaled = 0;
+ Q_OBJECT_COMPAT_PROPERTY(TestObject, int, m_bindable1, &TestObject::setBindable1, &TestObject::bindable1Changed);
+ Q_OBJECT_COMPAT_PROPERTY(TestObject, int, m_bindable2, &TestObject::setBindable2, &TestObject::bindable2Changed);
+};
+
+void tst_QProperty::propertyUpdateViaSignaledProperty()
+{
+ TestObject o;
+ QProperty<int> rootTrigger;
+ QProperty<int> signalTrigger;
+
+ o.bindable1Bindable().setBinding([&]() {
+ return rootTrigger.value();
+ });
+
+ QObject::connect(&o, &TestObject::bindable1Changed, &o, [&]() {
+ // Signaled changes only once, doesn't actually depend on bindable1.
+ // In reality, there could be some complicated calculation behind this that changes
+ // on certain checkpoints, but not on every iteration.
+ o.setSignaled(40);
+ });
+
+ o.bindable2Bindable().setBinding([&]() {
+ return signalTrigger.value() - o.bindable1();
+ });
+
+ QObject::connect(&o, &TestObject::signaledChanged, &o, [&]() {
+ signalTrigger.setValue(o.signaled());
+ });
+
+ rootTrigger.setValue(2);
+ QCOMPARE(o.bindable1(), 2);
+ QCOMPARE(o.bindable2(), 38);
+ rootTrigger.setValue(3);
+ QCOMPARE(o.bindable1(), 3);
+ QCOMPARE(o.bindable2(), 37);
+ rootTrigger.setValue(4);
+ QCOMPARE(o.bindable1(), 4);
+ QCOMPARE(o.bindable2(), 36);
+}
+
+void tst_QProperty::derefFromObserver()
+{
+ int triggered = 0;
+ QProperty<int> source(11);
+
+ DtorCounter::counter = 0;
+ DtorCounter dc;
+
+ QProperty<int> target([&triggered, &source, dc]() mutable {
+ dc.shouldIncrement = true;
+ return ++triggered + source.value();
+ });
+ QCOMPARE(triggered, 1);
+
+ {
+ auto propObserver = std::make_unique<QPropertyObserver>();
+ QPropertyObserverPointer propObserverPtr { propObserver.get() };
+ propObserverPtr.setBindingToNotify(QPropertyBindingPrivate::get(target.binding()));
+
+ QBindingObserverPtr bindingPtr(propObserver.get());
+
+ QCOMPARE(triggered, 1);
+ source = 25;
+ QCOMPARE(triggered, 2);
+ QCOMPARE(target, 27);
+
+ target.setBinding([]() { return 8; });
+ QCOMPARE(target, 8);
+
+ // The QBindingObserverPtr still holds on to the binding.
+ QCOMPARE(dc.counter, 0);
+ }
+
+ // The binding is actually gone now.
+ QCOMPARE(dc.counter, 1);
+
+ source = 26;
+ QCOMPARE(triggered, 2);
+ QCOMPARE(target, 8);
}
QTEST_MAIN(tst_QProperty);
diff --git a/tests/auto/corelib/kernel/qsharedmemory/CMakeLists.txt b/tests/auto/corelib/kernel/qsharedmemory/CMakeLists.txt
deleted file mode 100644
index 5553dfd56b..0000000000
--- a/tests/auto/corelib/kernel/qsharedmemory/CMakeLists.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-if(QT_FEATURE_sharedmemory)
- #####################################################################
- ## tst_qsharedmemory Test:
- #####################################################################
-
- qt_internal_add_test(tst_qsharedmemory
- SOURCES
- tst_qsharedmemory.cpp
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- )
-
- ## Scopes:
- #####################################################################
-
- qt_internal_extend_target(tst_qsharedmemory CONDITION LINUX
- PUBLIC_LIBRARIES
- rt
- )
- add_subdirectory(producerconsumer)
- if(QT_FEATURE_process)
- add_dependencies(tst_qsharedmemory producerconsumer_helper)
- endif()
-endif()
diff --git a/tests/auto/corelib/kernel/qsignalblocker/CMakeLists.txt b/tests/auto/corelib/kernel/qsignalblocker/CMakeLists.txt
index ff5a20bcad..0effacb018 100644
--- a/tests/auto/corelib/kernel/qsignalblocker/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qsignalblocker/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qsignalblocker.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsignalblocker Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsignalblocker LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsignalblocker
SOURCES
tst_qsignalblocker.cpp
diff --git a/tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp b/tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp
index aa9832f7ce..bd1f149a3f 100644
--- a/tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp
+++ b/tests/auto/corelib/kernel/qsignalblocker/tst_qsignalblocker.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@woboq.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) 2013 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -36,6 +11,7 @@ class tst_QSignalBlocker : public QObject
private slots:
void signalBlocking();
void moveAssignment();
+ void dismiss();
};
void tst_QSignalBlocker::signalBlocking()
@@ -158,5 +134,15 @@ void tst_QSignalBlocker::moveAssignment()
QVERIFY(!o2.signalsBlocked());
}
+void tst_QSignalBlocker::dismiss()
+{
+ QObject obj;
+ {
+ QSignalBlocker blocker(obj);
+ blocker.dismiss();
+ }
+ QVERIFY(obj.signalsBlocked());
+}
+
QTEST_MAIN(tst_QSignalBlocker)
#include "tst_qsignalblocker.moc"
diff --git a/tests/auto/corelib/kernel/qsignalmapper/CMakeLists.txt b/tests/auto/corelib/kernel/qsignalmapper/CMakeLists.txt
index 064b6722f8..b5de408ea8 100644
--- a/tests/auto/corelib/kernel/qsignalmapper/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qsignalmapper/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qsignalmapper.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsignalmapper Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsignalmapper LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsignalmapper
SOURCES
tst_qsignalmapper.cpp
diff --git a/tests/auto/corelib/kernel/qsignalmapper/tst_qsignalmapper.cpp b/tests/auto/corelib/kernel/qsignalmapper/tst_qsignalmapper.cpp
index c3f7bb9b85..de54cd5adc 100644
--- a/tests/auto/corelib/kernel/qsignalmapper/tst_qsignalmapper.cpp
+++ b/tests/auto/corelib/kernel/qsignalmapper/tst_qsignalmapper.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 <QTest>
diff --git a/tests/auto/corelib/kernel/qsocketnotifier/BLACKLIST b/tests/auto/corelib/kernel/qsocketnotifier/BLACKLIST
deleted file mode 100644
index 664ad32582..0000000000
--- a/tests/auto/corelib/kernel/qsocketnotifier/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-[unexpectedDisconnection]
-windows ci
-
diff --git a/tests/auto/corelib/kernel/qsocketnotifier/CMakeLists.txt b/tests/auto/corelib/kernel/qsocketnotifier/CMakeLists.txt
index 3790e46eaa..2a802b5f4d 100644
--- a/tests/auto/corelib/kernel/qsocketnotifier/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qsocketnotifier/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qsocketnotifier.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_qsocketnotifier LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -11,19 +18,16 @@ endif()
qt_internal_add_test(tst_qsocketnotifier
SOURCES
tst_qsocketnotifier.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
Qt::NetworkPrivate
)
-#### Keys ignored in scope 1:.:.:qsocketnotifier.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qsocketnotifier CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
ws2_32
)
diff --git a/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp b/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp
index 0e9e6bd493..17bba73dab 100644
--- a/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.cpp
+++ b/tests/auto/corelib/kernel/qsocketnotifier/tst_qsocketnotifier.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/QTest>
#include <QtTest/QSignalSpy>
@@ -49,6 +24,7 @@
# undef min
#endif // Q_CC_MSVC
+using namespace std::chrono_literals;
class tst_QSocketNotifier : public QObject
{
@@ -156,11 +132,11 @@ public slots:
++sequence;
if (sequence == 1) {
// read from both ends
- (void) readEnd1->read(data1, sizeof(data1));
- (void) readEnd2->read(data2, sizeof(data2));
+ QCOMPARE(readEnd1->read(data1, sizeof(data1)), 1);
+ QCOMPARE(readEnd2->read(data2, sizeof(data2)), 1);
emit finished();
} else if (sequence == 2) {
- // we should never get here
+ // check that we can't read now because we've read our byte
QCOMPARE(readEnd2->read(data2, sizeof(data2)), qint64(-2));
QVERIFY(readEnd2->isValid());
}
@@ -176,7 +152,7 @@ void tst_QSocketNotifier::unexpectedDisconnection()
Given two sockets and two QSocketNotifiers registered on each
their socket. If both sockets receive data, and the first slot
invoked by one of the socket notifiers empties both sockets, the
- other notifier will also emit activated(). This results in
+ other notifier will also emit activated(). This was causing an
unexpected disconnection in QAbstractSocket.
The use case is that somebody calls one of the
@@ -212,8 +188,9 @@ void tst_QSocketNotifier::unexpectedDisconnection()
writeEnd1->waitForBytesWritten();
writeEnd2->waitForBytesWritten();
- writeEnd1->flush();
- writeEnd2->flush();
+ // ensure both read ends are ready for reading, before the event loop
+ QVERIFY(readEnd1.waitForRead(5s));
+ QVERIFY(readEnd2.waitForRead(5s));
UnexpectedDisconnectTester tester(&readEnd1, &readEnd2);
@@ -334,8 +311,8 @@ void tst_QSocketNotifier::posixSockets()
passive->waitForBytesWritten(5000);
QTestEventLoop::instance().enterLoop(3);
- QCOMPARE(readSpy.count(), 1);
- QCOMPARE(errorSpy.count(), 0);
+ QCOMPARE(readSpy.size(), 1);
+ QCOMPARE(errorSpy.size(), 0);
char buffer[100];
int r = qt_safe_read(posixSocket, buffer, 100);
@@ -349,9 +326,9 @@ void tst_QSocketNotifier::posixSockets()
qt_safe_write(posixSocket, "goodbye", 8);
QTestEventLoop::instance().enterLoop(3);
- QCOMPARE(readSpy.count(), 1);
- QCOMPARE(writeSpy.count(), 1);
- QCOMPARE(errorSpy.count(), 0);
+ QCOMPARE(readSpy.size(), 1);
+ QCOMPARE(writeSpy.size(), 1);
+ QCOMPARE(errorSpy.size(), 0);
// Write notifier may have fired before the read notifier inside
// QTcpSocket, give QTcpSocket a chance to see the incoming data
@@ -399,7 +376,7 @@ void tst_QSocketNotifier::asyncMultipleDatagram()
&tst_QSocketNotifier::async_readDatagramSlot);
// activate socket notifiers
- QTestEventLoop::instance().enterLoopMSecs(100);
+ QTestEventLoop::instance().enterLoop(100ms);
m_asyncSender->writeDatagram("1", makeNonAny(m_asyncReceiver->localAddress()), port);
m_asyncSender->writeDatagram("2", makeNonAny(m_asyncReceiver->localAddress()), port);
@@ -412,7 +389,7 @@ void tst_QSocketNotifier::asyncMultipleDatagram()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
delete m_asyncSender;
delete m_asyncReceiver;
diff --git a/tests/auto/corelib/kernel/qsystemsemaphore/acquirerelease/main.cpp b/tests/auto/corelib/kernel/qsystemsemaphore/acquirerelease/main.cpp
deleted file mode 100644
index 7bfb6b16cc..0000000000
--- a/tests/auto/corelib/kernel/qsystemsemaphore/acquirerelease/main.cpp
+++ /dev/null
@@ -1,101 +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 <QCoreApplication>
-#include <QDebug>
-#include <QStringList>
-#include <QSystemSemaphore>
-
-int acquire(int count = 1)
-{
- QSystemSemaphore sem("store");
-
- for (int i = 0; i < count; ++i) {
- if (!sem.acquire()) {
- qWarning() << "Could not acquire" << sem.key();
- return EXIT_FAILURE;
- }
- }
- qDebug("done aquiring");
- return EXIT_SUCCESS;
-}
-
-int release()
-{
- QSystemSemaphore sem("store");
- if (!sem.release()) {
- qWarning() << "Could not release" << sem.key();
- return EXIT_FAILURE;
- }
- qDebug("done releasing");
- return EXIT_SUCCESS;
-}
-
-int acquirerelease()
-{
- QSystemSemaphore sem("store");
- if (!sem.acquire()) {
- qWarning() << "Could not acquire" << sem.key();
- return EXIT_FAILURE;
- }
- if (!sem.release()) {
- qWarning() << "Could not release" << sem.key();
- return EXIT_FAILURE;
- }
- return EXIT_SUCCESS;
-}
-
-int main(int argc, char *argv[])
-{
- QCoreApplication app(argc, argv);
-
- QStringList arguments = app.arguments();
- // binary name is not used here
- arguments.takeFirst();
- if (arguments.count() < 1) {
- qWarning("Please call the helper with the function to call as argument");
- return EXIT_FAILURE;
- }
- QString function = arguments.takeFirst();
- if (function == QLatin1String("acquire")) {
- int count = 1;
- bool ok = true;
- if (arguments.count())
- count = arguments.takeFirst().toInt(&ok);
- if (!ok)
- count = 1;
- return acquire(count);
- } else if (function == QLatin1String("release")) {
- return release();
- } else if (function == QLatin1String("acquirerelease")) {
- return acquirerelease();
- } else {
- qWarning() << "Unknown function" << function;
- }
- return EXIT_SUCCESS;
-}
diff --git a/tests/auto/corelib/kernel/qtimer/CMakeLists.txt b/tests/auto/corelib/kernel/qtimer/CMakeLists.txt
index 39a40b6983..6bb3b15850 100644
--- a/tests/auto/corelib/kernel/qtimer/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qtimer/CMakeLists.txt
@@ -1,15 +1,34 @@
-# Generated from qtimer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-#####################################################################
-## tst_qtimer Test:
-#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtimer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
-qt_internal_add_test(tst_qtimer
- SOURCES
- tst_qtimer.cpp
- PUBLIC_LIBRARIES
- Qt::CorePrivate
-)
+if (NOT QT_FEATURE_thread)
+ return()
+endif()
+
+function(addTimerTest test)
+ qt_internal_add_test(${test}
+ SOURCES
+ tst_qtimer.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::TestPrivate
+ )
+endfunction()
+
+addTimerTest(tst_qtimer)
+
+if(QT_FEATURE_glib AND UNIX)
+ addTimerTest(tst_qtimer_no_glib)
+ qt_internal_extend_target(tst_qtimer_no_glib
+ DEFINES
+ DISABLE_GLIB
+ tst_QTimer=tst_QTimer_no_glib # Class name in the unittest
+ )
+endif()
-## Scopes:
-#####################################################################
diff --git a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
index b3a500fbd8..40190ca465 100644
--- a/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
+++ b/tests/auto/corelib/kernel/qtimer/tst_qtimer.cpp
@@ -1,41 +1,27 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+/* WARNING: this source-code is reused by another test.
+
+ As Qt built with GUI support may use a different backend for its event loops
+ and other timer-related matters, it is important to test it in that form, as
+ well as in its GUI-less form. So this source file is reused by a build config
+ in the GUI module. Similarly, testing with and without glib is supported,
+ where relevant (see DISABLE_GLIB below).
+*/
#ifdef QT_GUI_LIB
+// When compiled as tests/auto/gui/kernel/qguitimer/'s source-code:
# include <QtGui/QGuiApplication>
#else
+// When compiled as tests/auto/corelib/kernel/qtimer/'s source-code:
# include <QtCore/QCoreApplication>
#endif
#include <QtCore/private/qglobal_p.h>
#include <QTest>
#include <QSignalSpy>
+#include <QtTest/private/qpropertytesthelper_p.h>
#include <qtimer.h>
#include <qthread.h>
@@ -46,6 +32,15 @@
#include <unistd.h>
#endif
+#ifdef DISABLE_GLIB
+static bool glibDisabled = []() {
+ qputenv("QT_NO_GLIB", "1");
+ return true;
+}();
+#endif
+
+using namespace std::chrono_literals;
+
class tst_QTimer : public QObject
{
Q_OBJECT
@@ -57,6 +52,12 @@ private slots:
void zeroTimer();
void singleShotTimeout();
void timeout();
+ void singleShotNormalizes_data();
+ void singleShotNormalizes();
+ void sequentialTimers_data();
+ void sequentialTimers();
+ void singleShotSequentialTimers_data();
+ void singleShotSequentialTimers();
void remainingTime();
void remainingTimeInitial_data();
void remainingTimeInitial();
@@ -81,6 +82,7 @@ private slots:
void singleShotToFunctors();
void singleShot_chrono();
void singleShot_static();
+ void crossThreadSingleShotToFunctor_data();
void crossThreadSingleShotToFunctor();
void timerOrder();
void timerOrder_data();
@@ -93,6 +95,10 @@ private slots:
void bindToTimer();
void bindTimer();
+ void automatedBindingTests();
+
+ void negativeInterval();
+ void testTimerId();
};
void tst_QTimer::zeroTimer()
@@ -109,7 +115,7 @@ void tst_QTimer::zeroTimer()
// Pass timeout to work round glib issue, see QTBUG-84291.
QCoreApplication::processEvents(QEventLoop::AllEvents, INT_MAX);
- QCOMPARE(timeoutSpy.count(), 1);
+ QCOMPARE(timeoutSpy.size(), 1);
}
void tst_QTimer::singleShotTimeout()
@@ -123,9 +129,9 @@ void tst_QTimer::singleShotTimeout()
timer.start(100);
QVERIFY(timeoutSpy.wait(500));
- QCOMPARE(timeoutSpy.count(), 1);
+ QCOMPARE(timeoutSpy.size(), 1);
QTest::qWait(500);
- QCOMPARE(timeoutSpy.count(), 1);
+ QCOMPARE(timeoutSpy.size(), 1);
}
#define TIMEOUT_TIMEOUT 200
@@ -136,12 +142,147 @@ void tst_QTimer::timeout()
QSignalSpy timeoutSpy(&timer, &QTimer::timeout);
timer.start(100);
- QCOMPARE(timeoutSpy.count(), 0);
+ QCOMPARE(timeoutSpy.size(), 0);
- QTRY_VERIFY_WITH_TIMEOUT(timeoutSpy.count() > 0, TIMEOUT_TIMEOUT);
- int oldCount = timeoutSpy.count();
+ QTRY_VERIFY_WITH_TIMEOUT(timeoutSpy.size() > 0, TIMEOUT_TIMEOUT);
+ int oldCount = timeoutSpy.size();
- QTRY_VERIFY_WITH_TIMEOUT(timeoutSpy.count() > oldCount, TIMEOUT_TIMEOUT);
+ QTRY_VERIFY_WITH_TIMEOUT(timeoutSpy.size() > oldCount, TIMEOUT_TIMEOUT);
+}
+
+void tst_QTimer::singleShotNormalizes_data()
+{
+ QTest::addColumn<QByteArray>("slotName");
+
+ QTest::newRow("normalized") << QByteArray(SLOT(exitLoop()));
+
+ QTest::newRow("space-before") << QByteArray(SLOT( exitLoop()));
+ QTest::newRow("space-after") << QByteArray(SLOT(exitLoop ()));
+ QTest::newRow("space-around") << QByteArray(SLOT( exitLoop ()));
+ QTest::newRow("spaces-before") << QByteArray(SLOT( exitLoop()));
+ QTest::newRow("spaces-after") << QByteArray(SLOT(exitLoop ()));
+ QTest::newRow("spaces-around") << QByteArray(SLOT( exitLoop ()));
+
+ QTest::newRow("space-in-parens") << QByteArray(SLOT(exitLoop( )));
+ QTest::newRow("spaces-in-parens") << QByteArray(SLOT(exitLoop( )));
+ QTest::newRow("space-after-parens") << QByteArray(SLOT(exitLoop() ));
+ QTest::newRow("spaces-after-parens") << QByteArray(SLOT(exitLoop() ));
+}
+
+void tst_QTimer::singleShotNormalizes()
+{
+ static constexpr auto TestTimeout = 250ms;
+ QFETCH(QByteArray, slotName);
+ QEventLoop loop;
+
+ // control test: regular connection
+ {
+ QTimer timer;
+ QVERIFY(QObject::connect(&timer, SIGNAL(timeout()), &QTestEventLoop::instance(), slotName));
+ timer.setSingleShot(true);
+ timer.start(1);
+ QTestEventLoop::instance().enterLoop(TestTimeout);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ }
+
+ // non-zero time
+ QTimer::singleShot(1, &QTestEventLoop::instance(), slotName);
+ QTestEventLoop::instance().enterLoop(TestTimeout);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+
+ QTimer::singleShot(1ms, &QTestEventLoop::instance(), slotName);
+ QTestEventLoop::instance().enterLoop(TestTimeout);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+
+ // zero time
+ QTimer::singleShot(0, &QTestEventLoop::instance(), slotName);
+ QTestEventLoop::instance().enterLoop(TestTimeout);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+
+ QTimer::singleShot(0ms, &QTestEventLoop::instance(), slotName);
+ QTestEventLoop::instance().enterLoop(TestTimeout);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+}
+
+void tst_QTimer::sequentialTimers_data()
+{
+#ifdef Q_OS_WIN
+ QSKIP("The API used by QEventDispatcherWin32 doesn't respect the order");
+#endif
+ QTest::addColumn<QList<int>>("timeouts");
+ auto addRow = [](const QList<int> &l) {
+ QByteArray name;
+ int last = -1;
+ for (int i = 0; i < l.size(); ++i) {
+ Q_ASSERT_X(l[i] >= last, "tst_QTimer", "input list must be sorted");
+ name += QByteArray::number(l[i]) + ',';
+ }
+ name.chop(1);
+ QTest::addRow("%s", name.constData()) << l;
+ };
+ // PreciseTimers
+ addRow({0, 0, 0, 0, 0, 0});
+ addRow({0, 1, 2});
+ addRow({1, 1, 1, 2, 2, 2, 2});
+ addRow({1, 2, 3});
+ addRow({19, 19, 19});
+ // CoarseTimer for setInterval
+ addRow({20, 20, 20, 20, 20});
+ addRow({25, 25, 25, 25, 25, 25, 50});
+}
+
+void tst_QTimer::sequentialTimers()
+{
+ QFETCH(const QList<int>, timeouts);
+ QByteArray result, expected;
+ std::vector<std::unique_ptr<QTimer>> timers;
+ expected.resize(timeouts.size());
+ result.reserve(timeouts.size());
+ timers.reserve(timeouts.size());
+ for (int i = 0; i < timeouts.size(); ++i) {
+ auto timer = std::make_unique<QTimer>();
+ timer->setSingleShot(true);
+ timer->setInterval(timeouts[i]);
+
+ char c = 'A' + i;
+ expected[i] = c;
+ QObject::connect(timer.get(), &QTimer::timeout, this, [&result, c = c]() {
+ result.append(c);
+ });
+ timers.push_back(std::move(timer));
+ }
+
+ // start the timers
+ for (auto &timer : timers)
+ timer->start();
+
+ QTestEventLoop::instance().enterLoopMSecs(timeouts.last() * 2 + 10);
+
+ QCOMPARE(result, expected);
+}
+
+void tst_QTimer::singleShotSequentialTimers_data()
+{
+ sequentialTimers_data();
+}
+
+void tst_QTimer::singleShotSequentialTimers()
+{
+ QFETCH(const QList<int>, timeouts);
+ QByteArray result, expected;
+ expected.resize(timeouts.size());
+ result.reserve(timeouts.size());
+ for (int i = 0; i < timeouts.size(); ++i) {
+ char c = 'A' + i;
+ expected[i] = c;
+ QTimer::singleShot(timeouts[i], this, [&result, c = c]() {
+ result.append(c);
+ });
+ }
+
+ QTestEventLoop::instance().enterLoopMSecs(timeouts.last() * 2 + 10);
+
+ QCOMPARE(result, expected);
}
void tst_QTimer::remainingTime()
@@ -265,19 +406,14 @@ void tst_QTimer::remainingTimeDuringActivation()
namespace {
-#if __has_include(<chrono>)
template <typename T>
std::chrono::milliseconds to_ms(T t)
{ return std::chrono::duration_cast<std::chrono::milliseconds>(t); }
-#endif
} // unnamed namespace
void tst_QTimer::basic_chrono()
{
-#if !__has_include(<chrono>)
- QSKIP("This test requires C++11 <chrono> support");
-#else
// duplicates zeroTimer, singleShotTimeout, interval and remainingTime
using namespace std::chrono;
QTimer timer;
@@ -289,24 +425,24 @@ void tst_QTimer::basic_chrono()
QCoreApplication::processEvents();
- QCOMPARE(timeoutSpy.count(), 1);
+ QCOMPARE(timeoutSpy.size(), 1);
timeoutSpy.clear();
timer.start(milliseconds(100));
- QCOMPARE(timeoutSpy.count(), 0);
+ QCOMPARE(timeoutSpy.size(), 0);
QVERIFY(timeoutSpy.wait(TIMEOUT_TIMEOUT));
- QVERIFY(timeoutSpy.count() > 0);
- int oldCount = timeoutSpy.count();
+ QVERIFY(timeoutSpy.size() > 0);
+ int oldCount = timeoutSpy.size();
QVERIFY(timeoutSpy.wait(TIMEOUT_TIMEOUT));
- QVERIFY(timeoutSpy.count() > oldCount);
+ QVERIFY(timeoutSpy.size() > oldCount);
timeoutSpy.clear();
timer.start(to_ms(microseconds(200000)));
QCOMPARE(timer.intervalAsDuration().count(), milliseconds::rep(200));
QTest::qWait(50);
- QCOMPARE(timeoutSpy.count(), 0);
+ QCOMPARE(timeoutSpy.size(), 0);
milliseconds rt = timer.remainingTimeAsDuration();
QVERIFY2(rt.count() >= 50 && rt.count() <= 200, qPrintable(QString::number(rt.count())));
@@ -315,10 +451,9 @@ void tst_QTimer::basic_chrono()
timer.setSingleShot(true);
timer.start(milliseconds(100));
QVERIFY(timeoutSpy.wait(TIMEOUT_TIMEOUT));
- QCOMPARE(timeoutSpy.count(), 1);
+ QCOMPARE(timeoutSpy.size(), 1);
QTest::qWait(500);
- QCOMPARE(timeoutSpy.count(), 1);
-#endif
+ QCOMPARE(timeoutSpy.size(), 1);
}
void tst_QTimer::livelock_data()
@@ -543,6 +678,7 @@ void tst_QTimer::moveToThread()
#endif
QTimer ti1;
QTimer ti2;
+ ti1.setSingleShot(true);
ti1.start(MOVETOTHREAD_TIMEOUT);
ti2.start(MOVETOTHREAD_TIMEOUT);
QVERIFY((ti1.timerId() & 0xffffff) != (ti2.timerId() & 0xffffff));
@@ -681,12 +817,10 @@ void tst_QTimer::timerFiresOnlyOncePerProcessEvents()
class TimerIdPersistsAfterThreadExitThread : public QThread
{
public:
- QTimer *timer;
- int timerId, returnValue;
+ QTimer *timer = nullptr;
+ Qt::TimerId timerId = Qt::TimerId::Invalid;
+ int returnValue = -1;
- TimerIdPersistsAfterThreadExitThread()
- : QThread(), timer(0), timerId(-1), returnValue(-1)
- { }
~TimerIdPersistsAfterThreadExitThread()
{
delete timer;
@@ -698,11 +832,15 @@ public:
timer = new QTimer;
connect(timer, SIGNAL(timeout()), &eventLoop, SLOT(quit()));
timer->start(100);
- timerId = timer->timerId();
+ timerId = timer->id();
returnValue = eventLoop.exec();
}
};
+namespace {
+int operator&(Qt::TimerId id, int i) { return qToUnderlying(id) & i; }
+}
+
void tst_QTimer::timerIdPersistsAfterThreadExit()
{
TimerIdPersistsAfterThreadExitThread thread;
@@ -728,6 +866,19 @@ void tst_QTimer::cancelLongTimer()
QVERIFY(!timer.isActive());
}
+void tst_QTimer::testTimerId()
+{
+ QTimer timer;
+ timer.start(100ms);
+ QVERIFY(timer.isActive());
+ QCOMPARE_GT(timer.timerId(), 0);
+ QCOMPARE_GT(timer.id(), Qt::TimerId::Invalid);
+ timer.stop();
+ QVERIFY(!timer.isActive());
+ QCOMPARE(timer.timerId(), -1);
+ QCOMPARE(timer.id(), Qt::TimerId::Invalid);
+}
+
class TimeoutCounter : public QObject
{
Q_OBJECT
@@ -902,7 +1053,7 @@ void tst_QTimer::singleShotToFunctors()
thread.wait();
struct MoveOnly : CountedStruct {
- Q_DISABLE_COPY(MoveOnly);
+ Q_DISABLE_COPY(MoveOnly)
MoveOnly(MoveOnly &&o) : CountedStruct(std::move(o)) {};
MoveOnly(int *c) : CountedStruct(c) {}
};
@@ -915,9 +1066,6 @@ void tst_QTimer::singleShotToFunctors()
void tst_QTimer::singleShot_chrono()
{
-#if !__has_include(<chrono>)
- QSKIP("This test requires C++11 <chrono> support");
-#else
// duplicates singleShotStaticFunctionZeroTimeout and singleShotToFunctors
using namespace std::chrono;
{
@@ -954,7 +1102,6 @@ void tst_QTimer::singleShot_chrono()
QTRY_COMPARE(count, 3);
_e.reset();
-#endif
}
class DontBlockEvents : public QObject
@@ -1036,30 +1183,57 @@ void tst_QTimer::postedEventsShouldNotStarveTimers()
timer.start();
SlotRepeater slotRepeater;
slotRepeater.repeatThisSlot();
- QTRY_VERIFY_WITH_TIMEOUT(timeoutSpy.count() > 5, 100);
+ QTRY_VERIFY_WITH_TIMEOUT(timeoutSpy.size() > 5, 100);
}
struct DummyFunctor {
- void operator()() {}
+ static QThread *callThread;
+ void operator()() {
+ callThread = QThread::currentThread();
+ callThread->quit();
+ }
};
+QThread *DummyFunctor::callThread = nullptr;
+
+void tst_QTimer::crossThreadSingleShotToFunctor_data()
+{
+ QTest::addColumn<int>("timeout");
+
+ QTest::addRow("zero-timer") << 0;
+ QTest::addRow("1ms") << 1;
+}
void tst_QTimer::crossThreadSingleShotToFunctor()
{
- // We're testing for crashes here, so the test simply running to
- // completion is considered a success
- QThread t;
- t.start();
+ QFETCH(int, timeout);
+ // We're also testing for crashes here, so the test simply running to
+ // completion is part of the success
+ DummyFunctor::callThread = nullptr;
- QObject* o = new QObject();
+ QThread t;
+ std::unique_ptr<QObject> o(new QObject());
o->moveToThread(&t);
- for (int i = 0; i < 10000; i++) {
- QTimer::singleShot(0, o, DummyFunctor());
- }
+ QTimer::singleShot(timeout, o.get(), DummyFunctor());
+
+ // wait enough time for the timer to have timed out before the timer
+ // could be start in the receiver's thread.
+ QTest::qWait(10 + timeout * 10);
+ t.start();
+ t.wait();
+ QCOMPARE(DummyFunctor::callThread, &t);
+
+ // continue with a stress test - the calling thread is busy, the
+ // timer should still fire and no crashes.
+ DummyFunctor::callThread = nullptr;
+ t.start();
+ for (int i = 0; i < 10000; i++)
+ QTimer::singleShot(timeout, o.get(), DummyFunctor());
- t.quit();
t.wait();
- delete o;
+ o.reset();
+
+ QCOMPARE(DummyFunctor::callThread, &t);
}
void tst_QTimer::callOnTimeout()
@@ -1079,7 +1253,7 @@ void tst_QTimer::callOnTimeout()
QTest::qWait(100);
QCOMPARE(count, 2);
- QCOMPARE(timeoutSpy.count(), 1);
+ QCOMPARE(timeoutSpy.size(), 1);
// Test that connection is bound to context lifetime
QVERIFY(connection);
@@ -1132,6 +1306,23 @@ void tst_QTimer::bindToTimer()
timer.stop();
QVERIFY(!active);
+
+ auto ignoreMsg = [] {
+ QTest::ignoreMessage(QtWarningMsg,
+ "QObject::startTimer: Timers cannot have negative intervals");
+ };
+
+ // also test that using negative interval updates the binding correctly
+ timer.start(100);
+ QVERIFY(active);
+ ignoreMsg();
+ timer.setInterval(-100);
+ QVERIFY(!active);
+ timer.start(100);
+ QVERIFY(active);
+ ignoreMsg();
+ timer.start(-100);
+ QVERIFY(!active);
}
void tst_QTimer::bindTimer()
@@ -1176,6 +1367,73 @@ void tst_QTimer::bindTimer()
QCOMPARE(timer.timerType(), Qt::VeryCoarseTimer);
}
+void tst_QTimer::automatedBindingTests()
+{
+ QTimer timer;
+
+ QVERIFY(!timer.isSingleShot());
+ QTestPrivate::testReadWritePropertyBasics(timer, true, false, "singleShot");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QTimer::singleShot");
+ return;
+ }
+
+ QCOMPARE_NE(timer.interval(), 10);
+ QTestPrivate::testReadWritePropertyBasics(timer, 10, 20, "interval");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QTimer::interval");
+ return;
+ }
+
+ QCOMPARE_NE(timer.timerType(), Qt::PreciseTimer);
+ QTestPrivate::testReadWritePropertyBasics(timer, Qt::PreciseTimer, Qt::CoarseTimer,
+ "timerType");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QTimer::timerType");
+ return;
+ }
+
+ timer.start(1000);
+ QVERIFY(timer.isActive());
+ QTestPrivate::testReadOnlyPropertyBasics(timer, true, false, "active",
+ [&timer]() { timer.stop(); });
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QTimer::active");
+ return;
+ }
+}
+
+void tst_QTimer::negativeInterval()
+{
+ auto ignoreMsg = [] {
+ QTest::ignoreMessage(QtWarningMsg,
+ "QObject::startTimer: Timers cannot have negative intervals");
+ };
+
+ QTimer timer;
+
+ // Starting with a negative interval does not change active state.
+ ignoreMsg();
+ timer.start(-100ms);
+ QVERIFY(!timer.isActive());
+
+ // Updating the interval to a negative value stops the timer and changes
+ // the active state.
+ timer.start(100ms);
+ QVERIFY(timer.isActive());
+ ignoreMsg();
+ timer.setInterval(-100);
+ QVERIFY(!timer.isActive());
+
+ // Starting with a negative interval when already started leads to stop
+ // and inactive state.
+ timer.start(100);
+ QVERIFY(timer.isActive());
+ ignoreMsg();
+ timer.start(-100ms);
+ QVERIFY(!timer.isActive());
+}
+
class OrderHelper : public QObject
{
Q_OBJECT
@@ -1249,14 +1507,10 @@ void tst_QTimer::timerOrder_data()
void tst_QTimer::timerOrderBackgroundThread()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
auto *thread = QThread::create([this]() { timerOrder(); });
thread->start();
QVERIFY(thread->wait());
delete thread;
-#endif
}
struct StaticSingleShotUser
diff --git a/tests/auto/corelib/kernel/qtranslator/CMakeLists.txt b/tests/auto/corelib/kernel/qtranslator/CMakeLists.txt
index e3e69537bf..92b6edb17c 100644
--- a/tests/auto/corelib/kernel/qtranslator/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qtranslator/CMakeLists.txt
@@ -1,9 +1,20 @@
-# Generated from qtranslator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtranslator Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtranslator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+if (NOT QT_FEATURE_thread)
+ return()
+endif()
+
qt_internal_add_test(tst_qtranslator
SOURCES
tst_qtranslator.cpp
@@ -24,7 +35,6 @@ qt_internal_add_resource(tst_qtranslator "qtranslator"
${qtranslator_resource_files}
)
-
## Scopes:
#####################################################################
@@ -44,6 +54,3 @@ if(ANDROID)
${android_testdata_resource_files}
)
endif()
-
-#### Keys ignored in scope 3:.:.:qtranslator.pro:else:
-# TESTDATA = "dependencies_la.qm" "hellotr_empty.qm" "hellotr_la.qm" "msgfmt_from_po.qm"
diff --git a/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp b/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp
index 2486eeda5c..c76500ea11 100644
--- a/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp
+++ b/tests/auto/corelib/kernel/qtranslator/tst_qtranslator.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QWaitCondition>
@@ -120,7 +95,7 @@ void tst_QTranslator::load()
{
QFile file(filepath);
- file.open(QFile::ReadOnly);
+ QVERIFY(file.open(QFile::ReadOnly));
QByteArray data = file.readAll();
QTranslator tor;
QVERIFY(tor.load((const uchar *)data.constData(), data.length()));
@@ -144,7 +119,7 @@ void tst_QTranslator::load()
void tst_QTranslator::loadLocale()
{
QLocale locale;
- auto localeName = locale.uiLanguages().value(0).replace('-', '_');
+ auto localeName = locale.uiLanguages(QLocale::TagSeparator::Underscore).value(0);
if (localeName.isEmpty())
QSKIP("This test requires at least one available UI language.");
@@ -354,7 +329,7 @@ void tst_QTranslator::dependencies()
{
QTranslator tor( 0 );
QFile file("dependencies_la.qm");
- file.open(QFile::ReadOnly);
+ QVERIFY(file.open(QFile::ReadOnly));
QByteArray data = file.readAll();
QVERIFY(tor.load((const uchar *)data.constData(), data.length()));
QVERIFY(!tor.isEmpty());
diff --git a/tests/auto/corelib/kernel/qvariant/CMakeLists.txt b/tests/auto/corelib/kernel/qvariant/CMakeLists.txt
index 45bfa4e480..eae9c0d30e 100644
--- a/tests/auto/corelib/kernel/qvariant/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qvariant/CMakeLists.txt
@@ -1,20 +1,15 @@
-# Generated from qvariant.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qvariant Test:
#####################################################################
-qt_internal_add_test(tst_qvariant
- SOURCES
- tst_qvariant.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
- INCLUDE_DIRECTORIES
- ../../../other/qvariant_common
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Gui
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qvariant LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Resources:
set(qvariant_resource_files
@@ -22,14 +17,19 @@ set(qvariant_resource_files
"stream/qt5.0/"
)
-qt_internal_add_resource(tst_qvariant "qvariant"
- PREFIX
- "/"
- FILES
- ${qvariant_resource_files}
+qt_internal_add_test(tst_qvariant
+ SOURCES
+ tst_qvariant.cpp
+ INCLUDE_DIRECTORIES
+ ../../../other/qvariant_common
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::TestPrivate
+ TESTDATA ${qvariant_resource_files}
+ BUILTIN_TESTDATA
)
-
## Scopes:
#####################################################################
diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
index 437e3ccba5..23d41cafb2 100644
--- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
+++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp
@@ -1,72 +1,96 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2016 Olivier Goffart <ogoffart@woboq.com>
-** Copyright (C) 2016 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2016 Olivier Goffart <ogoffart@woboq.com>
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <qvariant.h>
+
+// don't assume <type_traits>
+template <typename T, typename U>
+constexpr inline bool my_is_same_v = false;
+template <typename T>
+constexpr inline bool my_is_same_v<T, T> = true;
+
+#define CHECK_IMPL(func, arg, Variant, cvref, R) \
+ static_assert(my_is_same_v<decltype( func < arg >(std::declval< Variant cvref >())), R cvref >)
+
+#define CHECK_GET_IF(Variant, cvref) \
+ CHECK_IMPL(get_if, int, Variant, cvref *, int)
+
+#define CHECK_GET(Variant, cvref) \
+ CHECK_IMPL(get, int, Variant, cvref, int)
+
+CHECK_GET_IF(QVariant, /* unadorned */);
+CHECK_GET_IF(QVariant, const);
+
+CHECK_GET(QVariant, &);
+CHECK_GET(QVariant, const &);
+CHECK_GET(QVariant, &&);
+CHECK_GET(QVariant, const &&);
+
+// check for a type derived from QVariant:
+
+struct MyVariant : QVariant
+{
+ using QVariant::QVariant;
+};
+
+CHECK_GET_IF(MyVariant, /* unadorned */);
+CHECK_GET_IF(MyVariant, const);
+
+CHECK_GET(MyVariant, &);
+CHECK_GET(MyVariant, const &);
+CHECK_GET(MyVariant, &&);
+CHECK_GET(MyVariant, const &&);
+
+#undef CHECK_GET_IF
+#undef CHECK_GET
+#undef CHECK_IMPL
#include <QTest>
-#include <QQueue>
-#include <QStack>
-#include <qvariant.h>
-#include <QtCore/private/qvariant_p.h>
-#include <qbitarray.h>
-#include <qbytearraylist.h>
-#include <qdatetime.h>
-#include <qmap.h>
-#include <qiodevice.h>
-#include <qurl.h>
-#include <qlocale.h>
-#include <qdebug.h>
-#include <qjsondocument.h>
-#include <quuid.h>
-
-#include <limits.h>
-#include <float.h>
-#include <cmath>
-#include <variant>
-#include <QRegularExpression>
-#include <QDir>
+// Please stick to alphabetic order.
+#include <QAssociativeIterable>
+#include <QBitArray>
#include <QBuffer>
+#include <QByteArrayList>
+#include <QDateTime>
+#include <QDebug>
+#include <QDir>
+#include <QEasingCurve>
+#include <QMap>
+#include <QIODevice>
+#include <QHash>
#include <QJsonArray>
+#include <QJsonDocument>
#include <QJsonObject>
-#include <QEasingCurve>
-#include <QSequentialIterable>
-#include <QAssociativeIterable>
+#include <QLocale>
+#include <QQueue>
+#include <QRegularExpression>
#include <QScopeGuard>
-#include "qnumeric.h"
+#include <QSequentialIterable>
+#include <QSet>
+#include <QStack>
+#include <QTimeZone>
+#include <QtNumeric>
+#include <QUrl>
+#include <QUuid>
+#include <private/qcomparisontesthelper_p.h>
#include <private/qlocale_p.h>
#include <private/qmetatype_p.h>
#include "tst_qvariant_common.h"
+#include <limits>
+#include <float.h>
+#include <cmath>
+#include <variant>
#include <unordered_map>
+using namespace Qt::StringLiterals;
+
class CustomNonQObject;
+struct NonDefaultConstructible;
template<typename T, typename = void>
struct QVariantFromValueCompiles
@@ -83,15 +107,43 @@ struct QVariantFromValueCompiles<T, std::void_t<decltype (QVariant::fromValue(st
static_assert(QVariantFromValueCompiles<int>::value);
static_assert(!QVariantFromValueCompiles<QObject>::value);
+enum EnumTest_Enum0 { EnumTest_Enum0_value = 42, EnumTest_Enum0_negValue = -8 };
+Q_DECLARE_METATYPE(EnumTest_Enum0)
+enum EnumTest_Enum1 : qint64 { EnumTest_Enum1_value = 42, EnumTest_Enum1_bigValue = (Q_INT64_C(1) << 33) + 50 };
+Q_DECLARE_METATYPE(EnumTest_Enum1)
+
+enum EnumTest_Enum3 : qint64 { EnumTest_Enum3_value = -47, EnumTest_Enum3_bigValue = (Q_INT64_C(1) << 56) + 5 };
+Q_DECLARE_METATYPE(EnumTest_Enum3)
+enum EnumTest_Enum4 : quint64 { EnumTest_Enum4_value = 47, EnumTest_Enum4_bigValue = (Q_INT64_C(1) << 52) + 45 };
+Q_DECLARE_METATYPE(EnumTest_Enum4)
+enum EnumTest_Enum5 : uint { EnumTest_Enum5_value = 47 };
+Q_DECLARE_METATYPE(EnumTest_Enum5)
+enum EnumTest_Enum6 : uchar { EnumTest_Enum6_value = 47 };
+Q_DECLARE_METATYPE(EnumTest_Enum6)
+enum class EnumTest_Enum7 { EnumTest_Enum7_value = 47, ensureSignedEnum7 = -1 };
+Q_DECLARE_METATYPE(EnumTest_Enum7)
+enum EnumTest_Enum8 : short { EnumTest_Enum8_value = 47 };
+Q_DECLARE_METATYPE(EnumTest_Enum8)
+
+template <typename T> int qToUnderlying(QFlags<T> f)
+{
+ return f.toInt();
+}
+
class tst_QVariant : public QObject
{
Q_OBJECT
+ static void runTestFunction()
+ {
+ QFETCH(QFunctionPointer, testFunction);
+ testFunction();
+ }
+
public:
tst_QVariant(QObject *parent = nullptr)
: QObject(parent), customNonQObjectPointer(0)
{
-
}
@@ -123,6 +175,12 @@ private slots:
void canConvert_data();
void canConvert();
+
+ void canConvertAndConvert_ReturnFalse_WhenConvertingBetweenPointerAndValue_data();
+ void canConvertAndConvert_ReturnFalse_WhenConvertingBetweenPointerAndValue();
+
+ void canConvertAndConvert_ReturnFalse_WhenConvertingQObjectBetweenPointerAndValue();
+
void convert();
void toSize_data();
@@ -214,9 +272,11 @@ private slots:
void operator_eq_eq_data();
void operator_eq_eq();
+#if QT_DEPRECATED_SINCE(6, 0)
void typeName_data();
void typeName();
void typeToName();
+#endif
void streamInvalidVariant();
@@ -231,6 +291,9 @@ private slots:
void variantHash();
void convertToQUint8() const;
+ void compareCompiles() const;
+ void compareNumerics_data() const;
+ void compareNumerics() const;
void comparePointers() const;
void voidStar() const;
void dataStar() const;
@@ -244,6 +307,7 @@ private slots:
void loadBrokenUserType();
void invalidDate() const;
+ void compareCustomTypes_data() const;
void compareCustomTypes() const;
void timeToDateTime() const;
void copyingUserTypes() const;
@@ -271,8 +335,10 @@ private slots:
void forwardDeclare();
void debugStream_data();
void debugStream();
+#if QT_DEPRECATED_SINCE(6, 0)
void debugStreamType_data();
void debugStreamType();
+#endif
void loadQt4Stream_data();
void loadQt4Stream();
@@ -288,11 +354,18 @@ private slots:
void implicitConstruction();
+ void iterateSequentialContainerElements_data();
+ void iterateSequentialContainerElements() { runTestFunction(); }
+ void iterateAssociativeContainerElements_data();
+ void iterateAssociativeContainerElements() { runTestFunction(); }
void iterateContainerElements();
- void pairElements();
+ void pairElements_data();
+ void pairElements() { runTestFunction(); }
- void enums();
- void metaEnums();
+ void enums_data();
+ void enums() { runTestFunction(); }
+ void metaEnums_data();
+ void metaEnums() { runTestFunction(); }
void nullConvert();
@@ -307,10 +380,41 @@ private slots:
void preferDirectConversionOverInterfaces();
void mutableView();
+ void canViewAndView_ReturnFalseAndDefault_WhenConvertingBetweenPointerAndValue();
+
void moveOperations();
void equalsWithoutMetaObject();
+ void constructFromIncompatibleMetaType_data();
+ void constructFromIncompatibleMetaType();
+ void constructFromQtLT65MetaType();
+ void copyNonDefaultConstructible();
+
+ void inplaceConstruct();
+ void emplace();
+
+ void getIf_int() { getIf_impl(42); }
+ void getIf_QString() { getIf_impl(u"string"_s); };
+ void getIf_NonDefaultConstructible();
+ void getIfSpecial();
+
+ void get_int() { get_impl(42); }
+ void get_QString() { get_impl(u"string"_s); }
+ void get_NonDefaultConstructible();
+
private:
+ using StdVariant = std::variant<std::monostate,
+ // list here all the types with which we instantiate getIf_impl:
+ int,
+ QString,
+ NonDefaultConstructible
+ >;
+ template <typename T>
+ void getIf_impl(T t) const;
+ template <typename T>
+ void get_impl(T t) const;
+ template<typename T>
+ void canViewAndView_ReturnFalseAndDefault_WhenConvertingBetweenPointerAndValue_impl(const QByteArray &typeName);
void dataStream_data(QDataStream::Version version);
void loadQVariantFromDataStream(QDataStream::Version version);
void saveQVariantFromDataStream(QDataStream::Version version);
@@ -336,22 +440,32 @@ void tst_QVariant::constructor()
QVariant varll2(varll);
QCOMPARE(varll2, varll);
- QVariant var3(QVariant::String);
+ QVariant var3 {QMetaType::fromType<QString>()};
QCOMPARE(var3.typeName(), "QString");
QVERIFY(var3.isNull());
QVERIFY(var3.isValid());
- QVariant var4(QVariant::Invalid);
- QCOMPARE(var4.type(), QVariant::Invalid);
+ QVariant var3a = QVariant::fromMetaType(QMetaType::fromType<QString>());
+ QCOMPARE(var3a.typeName(), "QString");
+ QVERIFY(var3a.isNull());
+ QVERIFY(var3a.isValid());
+
+ QVariant var4 {QMetaType()};
+ QCOMPARE(var4.typeId(), QMetaType::UnknownType);
QVERIFY(var4.isNull());
QVERIFY(!var4.isValid());
+ QVariant var4a = QVariant::fromMetaType(QMetaType());
+ QCOMPARE(var4a.typeId(), QMetaType::UnknownType);
+ QVERIFY(var4a.isNull());
+ QVERIFY(!var4a.isValid());
+
QVariant var5(QLatin1String("hallo"));
- QCOMPARE(var5.type(), QVariant::String);
+ QCOMPARE(var5.typeId(), QMetaType::QString);
QCOMPARE(var5.typeName(), "QString");
QVariant var6(qlonglong(0));
- QCOMPARE(var6.type(), QVariant::LongLong);
+ QCOMPARE(var6.typeId(), QMetaType::LongLong);
QCOMPARE(var6.typeName(), "qlonglong");
QVariant var7 = 5;
@@ -380,10 +494,18 @@ void tst_QVariant::constructor_invalid()
QFETCH(uint, typeId);
{
QTest::ignoreMessage(QtWarningMsg, QRegularExpression("^Trying to construct an instance of an invalid type"));
- QVariant variant(static_cast<QVariant::Type>(typeId));
+ QVariant variant {QMetaType(typeId)};
+ QVERIFY(!variant.isValid());
+ QVERIFY(variant.isNull());
+ QCOMPARE(variant.typeId(), int(QMetaType::UnknownType));
+ QCOMPARE(variant.userType(), int(QMetaType::UnknownType));
+ }
+ {
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression("^Trying to construct an instance of an invalid type"));
+ QVariant variant = QVariant::fromMetaType(QMetaType(typeId));
QVERIFY(!variant.isValid());
QVERIFY(variant.isNull());
- QCOMPARE(int(variant.type()), int(QMetaType::UnknownType));
+ QCOMPARE(variant.typeId(), int(QMetaType::UnknownType));
QCOMPARE(variant.userType(), int(QMetaType::UnknownType));
}
{
@@ -397,9 +519,9 @@ void tst_QVariant::constructor_invalid()
void tst_QVariant::copy_constructor()
{
- QVariant var7(QVariant::Int);
+ QVariant var7 {QMetaType::fromType<int>()};
QVariant var8(var7);
- QCOMPARE(var8.type(), QVariant::Int);
+ QCOMPARE(var8.typeId(), QMetaType::Int);
QVERIFY(var8.isNull());
}
@@ -419,7 +541,7 @@ void tst_QVariant::isNull()
QVariant var3( QString( "blah" ) );
QVERIFY( !var3.isNull() );
- var3 = QVariant(QVariant::String);
+ var3 = QVariant(QMetaType::fromType<QString>());
QVERIFY( var3.isNull() );
QVariant var4( 0 );
@@ -432,12 +554,12 @@ void tst_QVariant::isNull()
QVERIFY( !var6.isNull() );
var6 = QVariant();
QVERIFY( var6.isNull() );
- var6.convert( QVariant::String );
+ var6.convert(QMetaType::fromType<QString>());
QVERIFY( var6.isNull() );
QVariant varLL( (qlonglong)0 );
QVERIFY( !varLL.isNull() );
- QVariant var8(QMetaType(QMetaType::Nullptr), nullptr);
+ QVariant var8(QMetaType::fromType<std::nullptr_t>(), nullptr);
QVERIFY(var8.isNull());
var8 = QVariant::fromValue<std::nullptr_t>(nullptr);
QVERIFY(var8.isNull());
@@ -446,12 +568,12 @@ void tst_QVariant::isNull()
var9 = QVariant::fromValue<QJsonValue>(QJsonValue(QJsonValue::Null));
QVERIFY(!var9.isNull());
- QVariant var10(QMetaType(QMetaType::VoidStar), nullptr);
+ QVariant var10(QMetaType::fromType<void*>(), nullptr);
QVERIFY(var10.isNull());
var10 = QVariant::fromValue<void*>(nullptr);
QVERIFY(var10.isNull());
- QVariant var11(QMetaType(QMetaType::QObjectStar), nullptr);
+ QVariant var11(QMetaType::fromType<QObject*>(), nullptr);
QVERIFY(var11.isNull());
var11 = QVariant::fromValue<QObject*>(nullptr);
QVERIFY(var11.isNull());
@@ -466,9 +588,9 @@ void tst_QVariant::swap()
{
QVariant v1 = 1, v2 = 2.0;
v1.swap(v2);
- QCOMPARE(v1.type(),QVariant::Double);
+ QCOMPARE(v1.typeId(), QMetaType::Double);
QCOMPARE(v1.toDouble(),2.0);
- QCOMPARE(v2.type(),QVariant::Int);
+ QCOMPARE(v2.typeId(), QMetaType::Int);
QCOMPARE(v2.toInt(),1);
}
@@ -542,9 +664,6 @@ void tst_QVariant::canConvert_data()
var = QVariant((uint)1);
QTest::newRow("UInt")
<< var << N << N << Y << N << Y << N << N << N << N << Y << N << N << Y << N << N << N << Y << N << N << N << N << N << N << N << N << N << Y << N << N << Y << Y;
- var = QVariant((int)1);
- QTest::newRow("Int")
- << var << N << N << Y << N << Y << N << N << N << N << Y << N << N << Y << N << Y << N << Y << N << N << N << N << N << N << N << N << N << Y << N << N << Y << Y;
var = QVariant((qulonglong)1);
QTest::newRow("ULongLong")
<< var << N << N << Y << N << Y << N << N << N << N << Y << N << N << Y << N << N << N << Y << N << N << N << N << N << N << N << N << N << Y << N << N << Y << Y;
@@ -578,13 +697,122 @@ void tst_QVariant::canConvert()
{
TST_QVARIANT_CANCONVERT_FETCH_DATA
+ // This test links against QtGui but not QtWidgets, so QSizePolicy isn't real for it.
+ QTest::ignoreMessage(QtWarningMsg, // QSizePolicy's id is 0x2000, a.k.a. 8192
+ "Trying to construct an instance of an invalid type, type id: 8192");
TST_QVARIANT_CANCONVERT_COMPARE_DATA
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
// Invalid type ids
+ QTest::ignoreMessage(QtWarningMsg,
+ "Trying to construct an instance of an invalid type, type id: -1");
QCOMPARE(val.canConvert(-1), false);
+ QTest::ignoreMessage(QtWarningMsg,
+ "Trying to construct an instance of an invalid type, type id: -23");
QCOMPARE(val.canConvert(-23), false);
+ QTest::ignoreMessage(QtWarningMsg,
+ "Trying to construct an instance of an invalid type, type id: -23876");
QCOMPARE(val.canConvert(-23876), false);
+ QTest::ignoreMessage(QtWarningMsg,
+ "Trying to construct an instance of an invalid type, type id: 23876");
QCOMPARE(val.canConvert(23876), false);
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 0)
+}
+
+namespace {
+
+// Used for testing canConvert/convert of QObject derived types
+struct QObjectDerived : QObject
+{
+ Q_OBJECT
+};
+
+// Adds a test table row for checking value <-> pointer conversion
+// If type is a pointer, the target type is value type and vice versa.
+template<typename T>
+void addRowForPointerValueConversion()
+{
+ using ValueType = std::remove_pointer_t<T>;
+ if constexpr (!std::is_same_v<ValueType, std::nullptr_t>) {
+
+ static ValueType instance{}; // static since we may need a pointer to a valid object
+
+ QVariant variant;
+ if constexpr (std::is_pointer_v<T>)
+ variant = QVariant::fromValue(&instance);
+ else
+ variant = QVariant::fromValue(instance);
+
+ // Toggle pointer/value type
+ using TargetType = std::conditional_t<std::is_pointer_v<T>, ValueType, T *>;
+
+ const QMetaType fromType = QMetaType::fromType<T>();
+ const QMetaType toType = QMetaType::fromType<TargetType>();
+
+ QTest::addRow("%s->%s", fromType.name(), toType.name())
+ << variant << QMetaType::fromType<TargetType>();
+ }
+}
+
+} // namespace
+
+void tst_QVariant::canConvertAndConvert_ReturnFalse_WhenConvertingBetweenPointerAndValue_data()
+{
+ QTest::addColumn<QVariant>("variant");
+ QTest::addColumn<QMetaType>("targetType");
+
+#define ADD_ROW(typeName, typeNameId, realType) \
+ addRowForPointerValueConversion<realType>(); \
+ addRowForPointerValueConversion<realType *>();
+
+ // Add rows for static primitive types
+ QT_FOR_EACH_STATIC_PRIMITIVE_NON_VOID_TYPE(ADD_ROW)
+
+ // Add rows for static core types
+ QT_FOR_EACH_STATIC_CORE_CLASS(ADD_ROW)
+#undef ADD_ROW
+
+}
+
+void tst_QVariant::canConvertAndConvert_ReturnFalse_WhenConvertingBetweenPointerAndValue()
+{
+ QFETCH(QVariant, variant);
+ QFETCH(QMetaType, targetType);
+
+ QVERIFY(!variant.canConvert(targetType));
+
+ QVERIFY(!variant.convert(targetType));
+
+ // As per the documentation, when QVariant::convert fails, the
+ // QVariant is cleared and changed to the requested type.
+ QVERIFY(variant.isNull());
+ QCOMPARE(variant.metaType(), targetType);
+}
+
+void tst_QVariant::canConvertAndConvert_ReturnFalse_WhenConvertingQObjectBetweenPointerAndValue()
+{
+ // Types derived from QObject are non-copyable and require their own test.
+ // We only test pointer -> value conversion, because constructing a QVariant
+ // from a non-copyable object will just set the QVariant to null.
+
+ QObjectDerived object;
+ QVariant variant = QVariant::fromValue(&object);
+
+ constexpr QMetaType targetType = QMetaType::fromType<QObjectDerived>();
+ QVERIFY(!variant.canConvert(targetType));
+
+ QTest::ignoreMessage(
+ QtWarningMsg,
+ QRegularExpression(".*does not support destruction and copy construction"));
+
+ QVERIFY(!variant.convert(targetType));
+
+ // When the QVariant::convert fails, the QVariant is cleared, and since the target type is
+ // invalid for QVariant, the QVariant's type is also cleared to an unknown type.
+ QVERIFY(variant.isNull());
+ QCOMPARE(variant.metaType(), QMetaType());
}
void tst_QVariant::convert()
@@ -596,7 +824,6 @@ void tst_QVariant::convert()
QCOMPARE(var.toInt(), 0);
}
-
void tst_QVariant::toInt_data()
{
QTest::addColumn<QVariant>("value");
@@ -640,12 +867,19 @@ void tst_QVariant::toInt_data()
QTest::newRow("undefined-QJsonValue") << QVariant(QJsonValue(QJsonValue::Undefined)) << 0 << false;
}
+#if QT_DEPRECATED_SINCE(6, 0)
+# define EXEC_DEPRECATED_CALL(x) QT_IGNORE_DEPRECATIONS(x)
+#else
+# define EXEC_DEPRECATED_CALL(x)
+#endif
+
void tst_QVariant::toInt()
{
QFETCH( QVariant, value );
QFETCH( int, result );
QFETCH( bool, valueOK );
- QVERIFY( value.isValid() == value.canConvert( QVariant::Int ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.isValid() == value.canConvert( QVariant::Int ) );)
+ QVERIFY( value.isValid() == value.canConvert(QMetaType::fromType<int>()) );
bool ok;
int i = value.toInt( &ok );
QCOMPARE( i, result );
@@ -694,7 +928,8 @@ void tst_QVariant::toUInt()
QFETCH( uint, result );
QFETCH( bool, valueOK );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::UInt ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::UInt ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<uint>()) );
bool ok;
uint i = value.toUInt( &ok );
@@ -718,7 +953,8 @@ void tst_QVariant::toSize()
QFETCH( QVariant, value );
QFETCH( QSize, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::Size ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::Size ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QSize>()) );
QSize i = value.toSize();
QCOMPARE( i, result );
@@ -739,7 +975,8 @@ void tst_QVariant::toSizeF()
QFETCH( QVariant, value );
QFETCH( QSizeF, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::SizeF ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::SizeF ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QSizeF>()) );
QSizeF i = value.toSizeF();
QCOMPARE( i, result );
@@ -760,7 +997,8 @@ void tst_QVariant::toLine()
QFETCH( QVariant, value );
QFETCH( QLine, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::Line ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::Line ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QLine>()) );
QLine i = value.toLine();
QCOMPARE( i, result );
@@ -781,7 +1019,8 @@ void tst_QVariant::toLineF()
QFETCH( QVariant, value );
QFETCH( QLineF, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::LineF ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::LineF ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QLineF>()) );
QLineF i = value.toLineF();
QCOMPARE( i, result );
@@ -803,7 +1042,8 @@ void tst_QVariant::toPoint()
QFETCH( QVariant, value );
QFETCH( QPoint, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::Point ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::Point ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QPoint>()) );
QPoint i = value.toPoint();
QCOMPARE( i, result );
}
@@ -824,7 +1064,8 @@ void tst_QVariant::toRect()
QFETCH( QVariant, value );
QFETCH( QRect, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::Rect ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::Rect ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QRect>()) );
QRect i = value.toRect();
QCOMPARE( i, result );
}
@@ -842,7 +1083,8 @@ void tst_QVariant::toChar()
QFETCH( QVariant, value );
QFETCH( QChar, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::Char ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::Char ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QChar>()) );
QChar i = value.toChar();
QCOMPARE( i, result );
@@ -880,7 +1122,8 @@ void tst_QVariant::toBool()
QFETCH( QVariant, value );
QFETCH( bool, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::Bool ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::Bool ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<bool>()) );
bool i = value.toBool();
QCOMPARE( i, result );
@@ -899,7 +1142,8 @@ void tst_QVariant::toPointF()
QFETCH( QVariant, value );
QFETCH( QPointF, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::PointF ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::PointF ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QPointF>()) );
QPointF d = value.toPointF();
QCOMPARE( d, result );
}
@@ -919,7 +1163,8 @@ void tst_QVariant::toRectF()
QFETCH( QVariant, value );
QFETCH( QRectF, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::RectF ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::RectF ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QRectF>()) );
QRectF d = value.toRectF();
QCOMPARE( d, result );
}
@@ -946,7 +1191,8 @@ void tst_QVariant::toDouble()
QFETCH( double, result );
QFETCH( bool, valueOK );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::Double ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::Double ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<double>()) );
bool ok;
double d = value.toDouble( &ok );
QCOMPARE( d, result );
@@ -975,7 +1221,8 @@ void tst_QVariant::toFloat()
QFETCH(float, result);
QFETCH(bool, valueOK);
QVERIFY(value.isValid());
- QVERIFY(value.canConvert(QMetaType::Float));
+ EXEC_DEPRECATED_CALL(QVERIFY(value.canConvert(QMetaType::Float));)
+ QVERIFY(value.canConvert(QMetaType::fromType<float>()));
bool ok;
float d = value.toFloat(&ok);
QCOMPARE(d, result);
@@ -1026,7 +1273,8 @@ void tst_QVariant::toLongLong()
QFETCH( qlonglong, result );
QFETCH( bool, valueOK );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::LongLong ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::LongLong ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<qlonglong>()) );
bool ok;
qlonglong ll = value.toLongLong( &ok );
QCOMPARE( ll, result );
@@ -1081,7 +1329,8 @@ void tst_QVariant::toULongLong()
QFETCH( qulonglong, result );
QFETCH( bool, valueOK );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::ULongLong ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::ULongLong ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<qulonglong>()) );
bool ok;
qulonglong ll = value.toULongLong( &ok );
QCOMPARE( ll, result );
@@ -1121,12 +1370,13 @@ void tst_QVariant::toByteArray()
QFETCH( QVariant, value );
QFETCH( QByteArray, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::ByteArray ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::ByteArray ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QByteArray>()) );
QByteArray ba = value.toByteArray();
QCOMPARE( ba.isNull(), result.isNull() );
QCOMPARE( ba, result );
- QVERIFY( value.convert( QVariant::ByteArray ) );
+ QVERIFY( value.convert(QMetaType::fromType<QByteArray>()) );
QCOMPARE( value.toByteArray(), result );
}
@@ -1163,12 +1413,13 @@ void tst_QVariant::toString()
QFETCH( QVariant, value );
QFETCH( QString, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::String ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::String ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QString>()) );
QString str = value.toString();
QCOMPARE( str.isNull(), result.isNull() );
QCOMPARE( str, result );
- QVERIFY( value.convert( QVariant::String ) );
+ QVERIFY( value.convert(QMetaType::fromType<QString>()) );
QCOMPARE( value.toString(), result );
}
@@ -1187,7 +1438,8 @@ void tst_QVariant::toDate()
QFETCH( QVariant, value );
QFETCH( QDate, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::Date ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::Date ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QDate>()) );
QCOMPARE( value.toDate(), result );
}
@@ -1207,7 +1459,8 @@ void tst_QVariant::toTime()
QFETCH( QVariant, value );
QFETCH( QTime, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::Time ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::Time ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QTime>()) );
QCOMPARE( value.toTime(), result );
}
@@ -1220,8 +1473,9 @@ void tst_QVariant::toDateTime_data()
<< QDateTime( QDate( 2002, 10, 10 ), QTime( 12, 34, 56 ) );
QTest::newRow( "qdate" ) << QVariant( QDate( 2002, 10, 10 ) ) << QDateTime( QDate( 2002, 10, 10 ), QTime( 0, 0, 0 ) );
QTest::newRow( "qstring" ) << QVariant( QString( "2002-10-10T12:34:56" ) ) << QDateTime( QDate( 2002, 10, 10 ), QTime( 12, 34, 56 ) );
- QTest::newRow( "qstring-utc" ) << QVariant( QString( "2002-10-10T12:34:56Z" ) )
- << QDateTime( QDate( 2002, 10, 10 ), QTime( 12, 34, 56 ), Qt::UTC );
+ QTest::newRow("qstring-utc")
+ << QVariant(QString("2002-10-10T12:34:56Z"))
+ << QDateTime(QDate(2002, 10, 10), QTime(12, 34, 56), QTimeZone::UTC);
QTest::newRow( "qstring-with-ms" ) << QVariant( QString( "2002-10-10T12:34:56.789" ) )
<< QDateTime( QDate( 2002, 10, 10 ), QTime( 12, 34, 56, 789 ) );
}
@@ -1231,10 +1485,13 @@ void tst_QVariant::toDateTime()
QFETCH( QVariant, value );
QFETCH( QDateTime, result );
QVERIFY( value.isValid() );
- QVERIFY( value.canConvert( QVariant::DateTime ) );
+ EXEC_DEPRECATED_CALL(QVERIFY( value.canConvert( QVariant::DateTime ) );)
+ QVERIFY( value.canConvert(QMetaType::fromType<QDateTime>()) );
QCOMPARE( value.toDateTime(), result );
}
+#undef EXEC_DEPRECATED_CALL
+
void tst_QVariant::toLocale()
{
QVariant variant;
@@ -1290,16 +1547,16 @@ void tst_QVariant::writeToReadFromDataStream_data()
}
QTest::newRow( "invalid" ) << QVariant() << true;
- QTest::newRow( "bitarray_invalid" ) << QVariant(QVariant::BitArray) << true;
+ QTest::newRow( "bitarray_invalid" ) << QVariant(QMetaType::fromType<QBitArray>()) << true;
QTest::newRow( "bitarray_empty" ) << QVariant( QBitArray() ) << false;
QBitArray bitarray( 3 );
bitarray[0] = 0;
bitarray[1] = 1;
bitarray[2] = 0;
QTest::newRow( "bitarray_valid" ) << QVariant( bitarray ) << false;
- QTest::newRow( "bytearray_invalid" ) << QVariant(QVariant::ByteArray) << true;
+ QTest::newRow( "bytearray_invalid" ) << QVariant(QMetaType::fromType<QByteArray>()) << true;
QTest::newRow( "bytearray_empty" ) << QVariant( QByteArray() ) << false;
- QTest::newRow( "int_invalid") << QVariant(QVariant::Int) << true;
+ QTest::newRow( "int_invalid") << QVariant(QMetaType::fromType<int>()) << true;
QByteArray bytearray(5, ' ');
bytearray[0] = 'T';
bytearray[1] = 'e';
@@ -1307,10 +1564,10 @@ void tst_QVariant::writeToReadFromDataStream_data()
bytearray[3] = 't';
bytearray[4] = '\0';
QTest::newRow( "bytearray_valid" ) << QVariant( bytearray ) << false;
- QTest::newRow( "date_invalid" ) << QVariant(QVariant::Date) << true;
+ QTest::newRow( "date_invalid" ) << QVariant(QMetaType::fromType<QDate>()) << true;
QTest::newRow( "date_empty" ) << QVariant( QDate() ) << false;
QTest::newRow( "date_valid" ) << QVariant( QDate( 2002, 07, 06 ) ) << false;
- QTest::newRow( "datetime_invalid" ) << QVariant(QVariant::DateTime) << true;
+ QTest::newRow( "datetime_invalid" ) << QVariant(QMetaType::fromType<QDateTime>()) << true;
QTest::newRow( "datetime_empty" ) << QVariant( QDateTime() ) << false;
QTest::newRow( "datetime_valid" ) << QVariant( QDateTime( QDate( 2002, 07, 06 ), QTime( 14, 0, 0 ) ) ) << false;
QTest::newRow( "double_valid" ) << QVariant( 123.456 ) << false;
@@ -1322,22 +1579,22 @@ void tst_QVariant::writeToReadFromDataStream_data()
vMap.insert( "double", QVariant( 3.45 ) );
vMap.insert( "float", QVariant( 3.45f ) );
QTest::newRow( "map_valid" ) << QVariant( vMap ) << false;
- QTest::newRow( "point_invalid" ) << QVariant(QVariant::Point) << true;
+ QTest::newRow( "point_invalid" ) << QVariant(QMetaType::fromType<QPoint>()) << true;
QTest::newRow( "point_empty" ) << QVariant::fromValue( QPoint() ) << false;
QTest::newRow( "point_valid" ) << QVariant::fromValue( QPoint( 10, 10 ) ) << false;
- QTest::newRow( "rect_invalid" ) << QVariant(QVariant::Rect) << true;
+ QTest::newRow( "rect_invalid" ) << QVariant(QMetaType::fromType<QRect>()) << true;
QTest::newRow( "rect_empty" ) << QVariant( QRect() ) << false;
QTest::newRow( "rect_valid" ) << QVariant( QRect( 10, 10, 20, 20 ) ) << false;
- QTest::newRow( "size_invalid" ) << QVariant(QVariant::Size) << true;
+ QTest::newRow( "size_invalid" ) << QVariant(QMetaType::fromType<QSize>()) << true;
QTest::newRow( "size_empty" ) << QVariant( QSize( 0, 0 ) ) << false;
QTest::newRow( "size_valid" ) << QVariant( QSize( 10, 10 ) ) << false;
- QTest::newRow( "string_invalid" ) << QVariant(QVariant::String) << true;
+ QTest::newRow( "string_invalid" ) << QVariant(QMetaType::fromType<QString>()) << true;
QTest::newRow( "string_empty" ) << QVariant( QString() ) << false;
QTest::newRow( "string_valid" ) << QVariant( QString( "Test" ) ) << false;
QStringList stringlist;
stringlist << "One" << "Two" << "Three";
QTest::newRow( "stringlist_valid" ) << QVariant( stringlist ) << false;
- QTest::newRow( "time_invalid" ) << QVariant(QVariant::Time) << true;
+ QTest::newRow( "time_invalid" ) << QVariant(QMetaType::fromType<QTime>()) << true;
QTest::newRow( "time_empty" ) << QVariant( QTime() ) << false;
QTest::newRow( "time_valid" ) << QVariant( QTime( 14, 0, 0 ) ) << false;
QTest::newRow( "uint_valid" ) << QVariant( (uint)123 ) << false;
@@ -1347,27 +1604,27 @@ void tst_QVariant::writeToReadFromDataStream_data()
QTest::newRow( "regularexpression_empty" ) << QVariant(QRegularExpression()) << false;
// types known to QMetaType, but not part of QVariant::Type
- QTest::newRow("QMetaType::Long invalid") << QVariant(QMetaType(QMetaType::Long), nullptr) << true;
+ QTest::newRow("QMetaType::Long invalid") << QVariant(QMetaType::fromType<long>(), nullptr) << true;
long longInt = -1l;
- QTest::newRow("QMetaType::Long") << QVariant(QMetaType(QMetaType::Long), &longInt) << false;
- QTest::newRow("QMetaType::Short invalid") << QVariant(QMetaType(QMetaType::Short), nullptr) << true;
+ QTest::newRow("QMetaType::Long") << QVariant(QMetaType::fromType<long>(), &longInt) << false;
+ QTest::newRow("QMetaType::Short invalid") << QVariant(QMetaType::fromType<short>(), nullptr) << true;
short shortInt = 1;
- QTest::newRow("QMetaType::Short") << QVariant(QMetaType(QMetaType::Short), &shortInt) << false;
- QTest::newRow("QMetaType::Char invalid") << QVariant(QMetaType(QMetaType::Char), nullptr) << true;
+ QTest::newRow("QMetaType::Short") << QVariant(QMetaType::fromType<short>(), &shortInt) << false;
+ QTest::newRow("QMetaType::Char invalid") << QVariant(QMetaType::fromType<QChar>(), nullptr) << true;
char ch = 'c';
- QTest::newRow("QMetaType::Char") << QVariant(QMetaType(QMetaType::Char), &ch) << false;
- QTest::newRow("QMetaType::ULong invalid") << QVariant(QMetaType(QMetaType::ULong), nullptr) << true;
+ QTest::newRow("QMetaType::Char") << QVariant(QMetaType::fromType<char>(), &ch) << false;
+ QTest::newRow("QMetaType::ULong invalid") << QVariant(QMetaType::fromType<ulong>(), nullptr) << true;
ulong ulongInt = 1ul;
- QTest::newRow("QMetaType::ULong") << QVariant(QMetaType(QMetaType::ULong), &ulongInt) << false;
- QTest::newRow("QMetaType::UShort invalid") << QVariant(QMetaType(QMetaType::UShort), nullptr) << true;
+ QTest::newRow("QMetaType::ULong") << QVariant(QMetaType::fromType<ulong>(), &ulongInt) << false;
+ QTest::newRow("QMetaType::UShort invalid") << QVariant(QMetaType::fromType<ushort>(), nullptr) << true;
ushort ushortInt = 1u;
- QTest::newRow("QMetaType::UShort") << QVariant(QMetaType(QMetaType::UShort), &ushortInt) << false;
- QTest::newRow("QMetaType::UChar invalid") << QVariant(QMetaType(QMetaType::UChar), nullptr) << true;
+ QTest::newRow("QMetaType::UShort") << QVariant(QMetaType::fromType<ushort>(), &ushortInt) << false;
+ QTest::newRow("QMetaType::UChar invalid") << QVariant(QMetaType::fromType<uchar>(), nullptr) << true;
uchar uch = 0xf0;
- QTest::newRow("QMetaType::UChar") << QVariant(QMetaType(QMetaType::UChar), &uch) << false;
- QTest::newRow("QMetaType::Float invalid") << QVariant(QMetaType(QMetaType::Float), nullptr) << true;
+ QTest::newRow("QMetaType::UChar") << QVariant(QMetaType::fromType<uchar>(), &uch) << false;
+ QTest::newRow("QMetaType::Float invalid") << QVariant(QMetaType::fromType<float>(), nullptr) << true;
float f = 1.234f;
- QTest::newRow("QMetaType::Float") << QVariant(QMetaType(QMetaType::Float), &f) << false;
+ QTest::newRow("QMetaType::Float") << QVariant(QMetaType::fromType<float>(), &f) << false;
CustomStreamableClass custom = {123};
QTest::newRow("Custom type") << QVariant::fromValue(custom) << false;
}
@@ -1389,10 +1646,11 @@ void tst_QVariant::writeToReadFromDataStream()
// Since only a few won't match since the serial numbers are different
// I won't bother adding another bool in the data test.
const int writeType = writeVariant.userType();
- if (writeType == qMetaTypeId<CustomStreamableClass>())
- QCOMPARE(qvariant_cast<CustomStreamableClass>(readVariant), qvariant_cast<CustomStreamableClass>(writeVariant));
- else if ( writeType != QVariant::Invalid && writeType != QVariant::Bitmap && writeType != QVariant::Pixmap
- && writeType != QVariant::Image) {
+ if (writeType == qMetaTypeId<CustomStreamableClass>()) {
+ QCOMPARE(qvariant_cast<CustomStreamableClass>(readVariant),
+ qvariant_cast<CustomStreamableClass>(writeVariant));
+ } else if ( writeType != QMetaType::UnknownType && writeType != QMetaType::QBitmap
+ && writeType != QMetaType::QPixmap && writeType != QMetaType::QImage) {
switch (writeType) {
default:
QCOMPARE( readVariant, writeVariant );
@@ -1467,7 +1725,7 @@ void tst_QVariant::checkDataStream()
// constructed. However, it might be worth considering changing that behavior
// in the future.
// QCOMPARE(in.status(), QDataStream::ReadCorruptData);
- QCOMPARE(v.type(), QVariant::Invalid);
+ QCOMPARE(v.typeId(), QMetaType::UnknownType);
}
void tst_QVariant::operator_eq_eq_data()
@@ -1484,7 +1742,7 @@ void tst_QVariant::operator_eq_eq_data()
// Int
QTest::newRow( "int1int1" ) << i1 << i1 << true;
QTest::newRow( "int1int0" ) << i1 << i0 << false;
- QTest::newRow( "nullint" ) << i0 << QVariant(QVariant::Int) << true;
+ QTest::newRow( "nullint" ) << i0 << QVariant(QMetaType::fromType<int>()) << true;
// LongLong and ULongLong
QVariant ll1( (qlonglong)1 );
@@ -1502,6 +1760,10 @@ void tst_QVariant::operator_eq_eq_data()
QVariant mIntString(QByteArray("-42"));
QVariant mIntQString(QString("-42"));
+ QVariant mIntZero(0);
+ QVariant mIntStringZero(QByteArray("0"));
+ QVariant mIntQStringZero(QString("0"));
+
QVariant mUInt(42u);
QVariant mUIntString(QByteArray("42"));
QVariant mUIntQString(QString("42"));
@@ -1542,6 +1804,9 @@ void tst_QVariant::operator_eq_eq_data()
QVariant mBoolString(QByteArray("false"));
QVariant mBoolQString(QString("false"));
+ QVariant mTextString(QByteArray("foobar"));
+ QVariant mTextQString(QString("foobar"));
+
QTest::newRow( "double_int" ) << QVariant(42.0) << QVariant(42) << true;
QTest::newRow( "float_int" ) << QVariant(42.f) << QVariant(42) << true;
QTest::newRow( "mInt_mIntString" ) << mInt << mIntString << false;
@@ -1549,6 +1814,21 @@ void tst_QVariant::operator_eq_eq_data()
QTest::newRow( "mInt_mIntQString" ) << mInt << mIntQString << true;
QTest::newRow( "mIntQString_mInt" ) << mIntQString << mInt << true;
+ QTest::newRow( "mIntZero_mIntStringZero" ) << mIntZero << mIntStringZero << false;
+ QTest::newRow( "mIntStringZero_mIntZero" ) << mIntStringZero << mIntZero << false;
+ QTest::newRow( "mIntZero_mIntQStringZero" ) << mIntZero << mIntQStringZero << true;
+ QTest::newRow( "mIntQStringZero_mIntZero" ) << mIntQStringZero << mIntZero << true;
+
+ QTest::newRow( "mInt_mTextString" ) << mInt << mTextString << false;
+ QTest::newRow( "mTextString_mInt" ) << mTextString << mInt << false;
+ QTest::newRow( "mInt_mTextQString" ) << mInt << mTextQString << false;
+ QTest::newRow( "mTextQString_mInt" ) << mTextQString << mInt << false;
+
+ QTest::newRow( "mIntZero_mTextString" ) << mIntZero << mTextString << false;
+ QTest::newRow( "mTextString_mIntZero" ) << mTextString << mIntZero << false;
+ QTest::newRow( "mIntZero_mTextQString" ) << mIntZero << mTextQString << false;
+ QTest::newRow( "mTextQString_mIntZero" ) << mTextQString << mIntZero << false;
+
QTest::newRow( "mUInt_mUIntString" ) << mUInt << mUIntString << false;
QTest::newRow( "mUIntString_mUInt" ) << mUIntString << mUInt << false;
QTest::newRow( "mUInt_mUIntQString" ) << mUInt << mUIntQString << true;
@@ -1559,6 +1839,11 @@ void tst_QVariant::operator_eq_eq_data()
QTest::newRow( "mDouble_mDoubleQString" ) << mDouble << mDoubleQString << true;
QTest::newRow( "mDoubleQString_mDouble" ) << mDoubleQString << mDouble << true;
+ QTest::newRow( "mDouble_mTextString" ) << mDouble << mTextString << false;
+ QTest::newRow( "mTextString_mDouble" ) << mTextString << mDouble << false;
+ QTest::newRow( "mDouble_mTextQString" ) << mDouble << mTextQString << false;
+ QTest::newRow( "mTextQString_mDouble" ) << mTextQString << mDouble << false;
+
QTest::newRow( "mFloat_mFloatString" ) << mFloat << mFloatString << false;
QTest::newRow( "mFloatString_mFloat" ) << mFloatString << mFloat << false;
QTest::newRow( "mFloat_mFloatQString" ) << mFloat << mFloatQString << true;
@@ -1725,9 +2010,11 @@ void tst_QVariant::operator_eq_eq()
QFETCH( QVariant, left );
QFETCH( QVariant, right );
QFETCH( bool, equal );
- QCOMPARE( left == right, equal );
+ QT_TEST_EQUALITY_OPS(left, right, equal);
}
+#if QT_DEPRECATED_SINCE(6, 0)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
void tst_QVariant::typeName_data()
{
QTest::addColumn<int>("type");
@@ -1800,17 +2087,23 @@ void tst_QVariant::typeToName()
// assumes that QVariant::Type contains consecutive values
int max = QVariant::LastGuiType;
- for ( int t = 1; t <= max; t++ ) {
+ for (int t = 1; t <= max; ++t) {
+ if (!QMetaType::isRegistered(t)) {
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(
+ "^Trying to construct an instance of an invalid type"));
+ }
const char *n = QVariant::typeToName( (QVariant::Type)t );
if (n)
QCOMPARE( int(QVariant::nameToType( n )), t );
-
}
+
QCOMPARE(QVariant::typeToName(QVariant::Int), "int");
// not documented but we return 0 if the type is out of range
// by testing this we catch cases where QVariant is extended
// but type_map is not updated accordingly
- QCOMPARE( QVariant::typeToName( QVariant::Type(max+1) ), (char*)0 );
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(
+ "^Trying to construct an instance of an invalid type"));
+ QCOMPARE(QVariant::typeToName(QVariant::Type(max + 1)), (const char *)nullptr);
// invalid type names
QVERIFY( QVariant::nameToType( 0 ) == QVariant::Invalid );
QVERIFY( QVariant::nameToType( "" ) == QVariant::Invalid );
@@ -1824,6 +2117,8 @@ void tst_QVariant::typeToName()
QCOMPARE(QVariant::nameToType("Q_LLONG"), QVariant::Invalid);
QCOMPARE(QVariant::nameToType("Q_ULLONG"), QVariant::Invalid);
}
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 0)
void tst_QVariant::streamInvalidVariant()
{
@@ -1834,7 +2129,7 @@ void tst_QVariant::streamInvalidVariant()
QVariant writeVariant;
QVariant readVariant;
- QVERIFY( writeVariant.type() == QVariant::Invalid );
+ QVERIFY( writeVariant.typeId() == QMetaType::UnknownType );
QByteArray data;
QDataStream writeStream( &data, QIODevice::WriteOnly );
@@ -1846,7 +2141,7 @@ void tst_QVariant::streamInvalidVariant()
QVERIFY( readX == writeX );
// Two invalid QVariant's aren't necessarily the same, so == will
// return false if one is invalid, so check the type() instead
- QVERIFY( readVariant.type() == QVariant::Invalid );
+ QVERIFY( readVariant.typeId() == QMetaType::UnknownType );
QVERIFY( readY == writeY );
}
@@ -1892,7 +2187,9 @@ void tst_QVariant::userType()
QVariant userVar;
userVar.setValue(data);
- QCOMPARE(userVar.type(), QVariant::UserType);
+ QVERIFY(QMetaType::fromName("MyType").isValid());
+ QCOMPARE(QMetaType::fromName("MyType"), QMetaType::fromType<MyType>());
+ QVERIFY(userVar.typeId() > QMetaType::User);
QCOMPARE(userVar.userType(), qMetaTypeId<MyType>());
QCOMPARE(userVar.typeName(), "MyType");
QVERIFY(!userVar.isNull());
@@ -1921,7 +2218,7 @@ void tst_QVariant::userType()
QVariant userVar;
userVar.setValue(&data);
- QCOMPARE(userVar.type(), QVariant::UserType);
+ QVERIFY(userVar.typeId() > QMetaType::User);
QCOMPARE(userVar.userType(), qMetaTypeId<MyType*>());
QCOMPARE(userVar.typeName(), "MyType*");
QVERIFY(!userVar.isNull());
@@ -2015,7 +2312,15 @@ void tst_QVariant::podUserType()
pod.a = 10;
pod.b = 20;
+ // one of these two must register the type
+ // (QVariant::fromValue calls QMetaType::fromType)
QVariant pod_as_variant = QVariant::fromValue(pod);
+ QMetaType mt = QMetaType::fromType<MyTypePOD>();
+ QCOMPARE(pod_as_variant.metaType(), mt);
+ QCOMPARE(pod_as_variant.metaType().name(), mt.name());
+ QCOMPARE(QMetaType::fromName(mt.name()), mt);
+ QCOMPARE_NE(pod_as_variant.typeId(), 0);
+
MyTypePOD pod2 = qvariant_cast<MyTypePOD>(pod_as_variant);
QCOMPARE(pod.a, pod2.a);
@@ -2033,37 +2338,37 @@ void tst_QVariant::basicUserType()
QVariant v;
{
int i = 7;
- v = QVariant(QMetaType(QMetaType::Int), &i);
+ v = QVariant(QMetaType::fromType<int>(), &i);
}
- QCOMPARE(v.type(), QVariant::Int);
+ QCOMPARE(v.typeId(), QMetaType::Int);
QCOMPARE(v.toInt(), 7);
{
QString s("foo");
- v = QVariant(QMetaType(QMetaType::QString), &s);
+ v = QVariant(QMetaType::fromType<QString>(), &s);
}
- QCOMPARE(v.type(), QVariant::String);
+ QCOMPARE(v.typeId(), QMetaType::QString);
QCOMPARE(v.toString(), QString("foo"));
{
double d = 4.4;
- v = QVariant(QMetaType(QMetaType::Double), &d);
+ v = QVariant(QMetaType::fromType<double>(), &d);
}
- QCOMPARE(v.type(), QVariant::Double);
+ QCOMPARE(v.typeId(), QMetaType::Double);
QCOMPARE(v.toDouble(), 4.4);
{
float f = 4.5f;
- v = QVariant(QMetaType(QMetaType::Float), &f);
+ v = QVariant(QMetaType::fromType<float>(), &f);
}
QCOMPARE(v.userType(), int(QMetaType::Float));
QCOMPARE(v.toDouble(), 4.5);
{
QByteArray ba("bar");
- v = QVariant(QMetaType(QMetaType::QByteArray), &ba);
+ v = QVariant(QMetaType::fromType<QByteArray>(), &ba);
}
- QCOMPARE(v.type(), QVariant::ByteArray);
+ QCOMPARE(v.typeId(), QMetaType::QByteArray);
QCOMPARE(v.toByteArray(), QByteArray("bar"));
}
@@ -2228,7 +2533,7 @@ void tst_QVariant::saveLoadCustomTypes()
QVariant v = QVariant(tp, &i);
QCOMPARE(v.userType(), tp.id());
- QCOMPARE(v.type(), QVariant::UserType);
+ QVERIFY(v.typeId() > QMetaType::User);
{
QDataStream stream(&data, QIODevice::WriteOnly);
stream << v;
@@ -2241,7 +2546,7 @@ void tst_QVariant::saveLoadCustomTypes()
stream >> v;
}
- QCOMPARE(int(v.userType()), QMetaType::type("Blah"));
+ QCOMPARE(int(v.userType()), QMetaType::fromName("Blah").id());
int value = *(int*)v.constData();
QCOMPARE(value, 42);
}
@@ -2340,7 +2645,7 @@ void tst_QVariant::qvariant_cast_QObject_data()
QTest::addColumn<bool>("isNull");
QObject *obj = new QObject;
obj->setObjectName(QString::fromLatin1("Hello"));
- QTest::newRow("from QObject") << QVariant(QMetaType(QMetaType::QObjectStar), &obj) << true << false;
+ QTest::newRow("from QObject") << QVariant(QMetaType::fromType<QObject*>(), &obj) << true << false;
QTest::newRow("from QObject2") << QVariant::fromValue(obj) << true << false;
QTest::newRow("from String") << QVariant(QLatin1String("1, 2, 3")) << false << false;
QTest::newRow("from int") << QVariant((int) 123) << false << false;
@@ -2375,18 +2680,18 @@ void tst_QVariant::qvariant_cast_QObject()
if (!isNull)
QCOMPARE(o->objectName(), QString::fromLatin1("Hello"));
QVERIFY(data.canConvert<QObject*>());
- QVERIFY(data.canConvert(QMetaType::QObjectStar));
- QVERIFY(data.canConvert(::qMetaTypeId<QObject*>()));
+ QVERIFY(data.canConvert(QMetaType::fromType<QObject*>()));
+ QVERIFY(data.canConvert(QMetaType(::qMetaTypeId<QObject*>())));
QCOMPARE(data.value<QObject*>() == nullptr, isNull);
- QVERIFY(data.convert(QMetaType::QObjectStar));
+ QVERIFY(data.convert(QMetaType::fromType<QObject*>()));
QCOMPARE(data.userType(), int(QMetaType::QObjectStar));
} else {
QVERIFY(!data.canConvert<QObject*>());
- QVERIFY(!data.canConvert(QMetaType::QObjectStar));
- QVERIFY(!data.canConvert(::qMetaTypeId<QObject*>()));
+ QVERIFY(!data.canConvert(QMetaType::fromType<QObject*>()));
+ QVERIFY(!data.canConvert(QMetaType(::qMetaTypeId<QObject*>())));
QVERIFY(!data.value<QObject*>());
QVERIFY(data.userType() != QMetaType::QObjectStar);
- QVERIFY(!data.convert(QMetaType::QObjectStar));
+ QVERIFY(!data.convert(QMetaType::fromType<QObject*>()));
}
}
@@ -2427,7 +2732,7 @@ void tst_QVariant::qvariant_cast_QObject_derived()
QObject *object = new CustomQObjectDerivedNoMetaType(this);
QVariant data = QVariant::fromValue(object);
QVERIFY(data.canConvert<CustomQObjectDerivedNoMetaType*>());
- QVERIFY(data.convert(qMetaTypeId<CustomQObjectDerivedNoMetaType*>()));
+ QVERIFY(data.convert(QMetaType(qMetaTypeId<CustomQObjectDerivedNoMetaType*>())));
QCOMPARE(data.value<CustomQObjectDerivedNoMetaType*>(), object);
QCOMPARE(data.isNull(), false);
}
@@ -2507,7 +2812,7 @@ void tst_QVariant::qvariant_cast_QObject_wrapper()
QObjectWrapper wrapper(object);
QVariant v = QVariant::fromValue(wrapper);
QCOMPARE(v.value<QObject*>(), object);
- v.convert(qMetaTypeId<QObject*>());
+ v.convert(QMetaType(qMetaTypeId<QObject*>()));
QCOMPARE(v.value<QObject*>(), object);
MyNS::SequentialContainer<int> sc;
@@ -2678,18 +2983,289 @@ void tst_QVariant::convertToQUint8() const
}
}
-void tst_QVariant::comparePointers() const
+void tst_QVariant::compareCompiles() const
{
- class MyClass
- {
+ QTestPrivate::testEqualityOperatorsCompile<QVariant>();
+}
+
+void tst_QVariant::compareNumerics_data() const
+{
+ QTest::addColumn<QVariant>("v1");
+ QTest::addColumn<QVariant>("v2");
+ QTest::addColumn<QPartialOrdering>("result");
+
+ QTest::addRow("invalid-invalid")
+ << QVariant() << QVariant() << QPartialOrdering::Unordered;
+
+ static const auto asString = [](const QVariant &v) {
+ if (v.isNull())
+ return QStringLiteral("null");
+ if (v.metaType().flags() & QMetaType::IsEnumeration)
+ return v.metaType().flags() & QMetaType::IsUnsignedEnumeration ?
+ QString::number(v.toULongLong()) :
+ QString::number(v.toLongLong());
+ switch (v.typeId()) {
+ case QMetaType::Char16:
+ return QString::number(qvariant_cast<char16_t>(v));
+ case QMetaType::Char32:
+ return QString::number(qvariant_cast<char32_t>(v));
+ case QMetaType::Char:
+ case QMetaType::UChar:
+ return QString::number(v.toUInt());
+ case QMetaType::SChar:
+ return QString::number(v.toInt());
+ }
+ return v.toString();
+ };
+
+ auto addCompareToInvalid = [](auto value) {
+ QVariant v = QVariant::fromValue(value);
+ QTest::addRow("invalid-%s(%s)", v.typeName(), qPrintable(asString(v)))
+ << QVariant() << v << QPartialOrdering::Unordered;
+ QTest::addRow("%s(%s)-invalid", v.typeName(), qPrintable(asString(v)))
+ << v << QVariant() << QPartialOrdering::Unordered;
+ };
+ addCompareToInvalid(false);
+ addCompareToInvalid(true);
+ addCompareToInvalid(char(0));
+ addCompareToInvalid(qint8(0));
+ addCompareToInvalid(quint8(0));
+ addCompareToInvalid(short(0));
+ addCompareToInvalid(ushort(0));
+ addCompareToInvalid(int(0));
+ addCompareToInvalid(uint(0));
+ addCompareToInvalid(long(0));
+ addCompareToInvalid(ulong(0));
+ addCompareToInvalid(qint64(0));
+ addCompareToInvalid(quint64(0));
+ addCompareToInvalid(0.f);
+ addCompareToInvalid(0.0);
+ addCompareToInvalid(QCborSimpleType{});
+
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_CLANG("-Wsign-compare")
+QT_WARNING_DISABLE_GCC("-Wsign-compare")
+QT_WARNING_DISABLE_MSVC(4018) // '<': signed/unsigned mismatch
+ static const auto addComparePairWithResult = [](auto value1, auto value2, QPartialOrdering order) {
+ QVariant v1 = QVariant::fromValue(value1);
+ QVariant v2 = QVariant::fromValue(value2);
+ QTest::addRow("%s(%s)-%s(%s)", v1.typeName(), qPrintable(asString(v1)),
+ v2.typeName(), qPrintable(asString(v2)))
+ << v1 << v2 << order;
+ };
+
+ static const auto addComparePair = [](auto value1, auto value2) {
+ QPartialOrdering order = QPartialOrdering::Unordered;
+ if (value1 == value2)
+ order = QPartialOrdering::Equivalent;
+ else if (value1 < value2)
+ order = QPartialOrdering::Less;
+ else if (value1 > value2)
+ order = QPartialOrdering::Greater;
+ addComparePairWithResult(value1, value2, order);
+ };
+QT_WARNING_POP
+
+ // homogeneous first
+ static const auto addList = [](auto list) {
+ for (auto v1 : list)
+ for (auto v2 : list)
+ addComparePair(v1, v2);
};
- MyClass myClass;
+ auto addSingleType = [](auto zero) {
+ using T = decltype(zero);
+ T one = T(zero + 1);
+ T min = std::numeric_limits<T>::min();
+ T max = std::numeric_limits<T>::max();
+ T mid = max / 2 + 1;
+ if (min != zero)
+ addList(std::array{zero, one, min, mid, max});
+ else
+ addList(std::array{zero, one, mid, max});
+ };
+ addList(std::array{ false, true });
+ addList(std::array{ QCborSimpleType{}, QCborSimpleType::False, QCborSimpleType(0xff) });
+ addSingleType(char(0));
+ addSingleType(char16_t(0));
+ addSingleType(char32_t(0));
+ addSingleType(qint8(0));
+ addSingleType(quint8(0));
+ addSingleType(qint16(0));
+ addSingleType(quint16(0));
+ addSingleType(qint32(0));
+ addSingleType(quint32(0));
+ addSingleType(qint64(0));
+ addSingleType(quint64(0));
+ addSingleType(0.f);
+ addSingleType(0.0);
+ addList(std::array{ EnumTest_Enum0{}, EnumTest_Enum0_value, EnumTest_Enum0_negValue });
+ addList(std::array{ EnumTest_Enum1{}, EnumTest_Enum1_value, EnumTest_Enum1_bigValue });
+ addList(std::array{ EnumTest_Enum7{}, EnumTest_Enum7::EnumTest_Enum7_value, EnumTest_Enum7::ensureSignedEnum7 });
+ addList(std::array{ Qt::AlignRight|Qt::AlignHCenter, Qt::AlignCenter|Qt::AlignVCenter });
+
+ // heterogeneous
+ addComparePair(char(0), qint8(-127));
+ addComparePair(char(127), qint8(127));
+ addComparePair(char(127), quint8(127));
+ addComparePair(qint8(-1), quint8(255));
+ addComparePair(char16_t(256), qint8(-1));
+ addComparePair(char16_t(256), short(-1));
+ addComparePair(char16_t(256), int(-1));
+ addComparePair(char32_t(256), int(-1));
+ addComparePair(0U, -1);
+ addComparePair(~0U, -1);
+ addComparePair(Q_UINT64_C(0), -1);
+ addComparePair(~Q_UINT64_C(0), -1);
+ addComparePair(Q_UINT64_C(0), Q_INT64_C(-1));
+ addComparePair(~Q_UINT64_C(0), Q_INT64_C(-1));
+ addComparePair(INT_MAX, uint(INT_MAX));
+ addComparePair(INT_MAX, qint64(INT_MAX) + 1);
+ addComparePair(INT_MAX, UINT_MAX);
+ addComparePair(INT_MAX, qint64(UINT_MAX));
+ addComparePair(INT_MAX, qint64(UINT_MAX) + 1);
+ addComparePair(INT_MAX, quint64(UINT_MAX));
+ addComparePair(INT_MAX, quint64(UINT_MAX) + 1);
+ addComparePair(INT_MAX, LONG_MIN);
+ addComparePair(INT_MAX, LONG_MAX);
+ addComparePair(INT_MAX, LLONG_MIN);
+ addComparePair(INT_MAX, LLONG_MAX);
+ addComparePair(INT_MIN, uint(INT_MIN));
+ addComparePair(INT_MIN, uint(INT_MIN) + 1);
+ addComparePair(INT_MIN + 1, uint(INT_MIN));
+ addComparePair(INT_MIN + 1, uint(INT_MIN) + 1);
+ addComparePair(INT_MIN, qint64(INT_MIN) - 1);
+ addComparePair(INT_MIN + 1, qint64(INT_MIN) + 1);
+ addComparePair(INT_MIN + 1, qint64(INT_MIN) - 1);
+ addComparePair(INT_MIN, UINT_MAX);
+ addComparePair(INT_MIN, qint64(UINT_MAX));
+ addComparePair(INT_MIN, qint64(UINT_MAX) + 1);
+ addComparePair(INT_MIN, quint64(UINT_MAX));
+ addComparePair(INT_MIN, quint64(UINT_MAX) + 1);
+ addComparePair(UINT_MAX, qint64(UINT_MAX) + 1);
+ addComparePair(UINT_MAX, quint64(UINT_MAX) + 1);
+ addComparePair(UINT_MAX, qint64(INT_MIN) - 1);
+ addComparePair(UINT_MAX, quint64(INT_MIN) + 1);
+ addComparePair(LLONG_MAX, quint64(LLONG_MAX));
+ addComparePair(LLONG_MAX, quint64(LLONG_MAX) + 1);
+ addComparePair(LLONG_MIN, quint64(LLONG_MAX));
+ addComparePair(LLONG_MIN, quint64(LLONG_MAX) + 1);
+ addComparePair(LLONG_MIN, quint64(LLONG_MIN) + 1);
+ addComparePair(LLONG_MIN + 1, quint64(LLONG_MIN) + 1);
+ addComparePair(LLONG_MIN, LLONG_MAX - 1);
+ // addComparePair(LLONG_MIN, LLONG_MAX); // already added by addSingleType()
+
+ // floating point
+ addComparePair(0.f, 0);
+ addComparePair(0.f, 0U);
+ addComparePair(0.f, Q_INT64_C(0));
+ addComparePair(0.f, Q_UINT64_C(0));
+ addComparePair(0.f, 0.);
+ addComparePair(0.f, 1.);
+ addComparePair(float(1 << 24), 1 << 24);
+ addComparePair(float(1 << 24) - 1, (1 << 24) - 1);
+ addComparePair(-float(1 << 24), 1 << 24);
+ addComparePair(-float(1 << 24) + 1, -(1 << 24) + 1);
+ addComparePair(HUGE_VALF, qInf());
+ addComparePair(HUGE_VALF, -qInf());
+ addComparePair(qQNaN(), std::numeric_limits<float>::quiet_NaN());
+ if (sizeof(qreal) == sizeof(double)) {
+ addComparePair(std::numeric_limits<float>::min(), std::numeric_limits<double>::min());
+ addComparePair(std::numeric_limits<float>::min(), std::numeric_limits<double>::max());
+ addComparePair(std::numeric_limits<float>::max(), std::numeric_limits<double>::min());
+ addComparePair(std::numeric_limits<float>::max(), std::numeric_limits<double>::max());
+ addComparePair(double(Q_INT64_C(1) << 53), Q_INT64_C(1) << 53);
+ addComparePair(double(Q_INT64_C(1) << 53) - 1, (Q_INT64_C(1) << 53) - 1);
+ addComparePair(-double(Q_INT64_C(1) << 53), Q_INT64_C(1) << 53);
+ addComparePair(-double(Q_INT64_C(1) << 53) + 1, (Q_INT64_C(1) << 53) + 1);
+ }
+
+ // enums vs integers
+ addComparePair(EnumTest_Enum0_value, 0);
+ addComparePair(EnumTest_Enum0_value, 0U);
+ addComparePair(EnumTest_Enum0_value, 0LL);
+ addComparePair(EnumTest_Enum0_value, 0ULL);
+ addComparePair(EnumTest_Enum0_value, int(EnumTest_Enum0_value));
+ addComparePair(EnumTest_Enum0_value, qint64(EnumTest_Enum0_value));
+ addComparePair(EnumTest_Enum0_value, quint64(EnumTest_Enum0_value));
+ addComparePair(EnumTest_Enum0_negValue, int(EnumTest_Enum0_value));
+ addComparePair(EnumTest_Enum0_negValue, qint64(EnumTest_Enum0_value));
+ addComparePair(EnumTest_Enum0_negValue, quint64(EnumTest_Enum0_value));
+ addComparePair(EnumTest_Enum0_negValue, int(EnumTest_Enum0_negValue));
+ addComparePair(EnumTest_Enum0_negValue, qint64(EnumTest_Enum0_negValue));
+ addComparePair(EnumTest_Enum0_negValue, quint64(EnumTest_Enum0_negValue));
+
+ addComparePair(EnumTest_Enum1_value, 0);
+ addComparePair(EnumTest_Enum1_value, 0U);
+ addComparePair(EnumTest_Enum1_value, 0LL);
+ addComparePair(EnumTest_Enum1_value, 0ULL);
+ addComparePair(EnumTest_Enum1_value, int(EnumTest_Enum1_value));
+ addComparePair(EnumTest_Enum1_value, qint64(EnumTest_Enum1_value));
+ addComparePair(EnumTest_Enum1_value, quint64(EnumTest_Enum1_value));
+ addComparePair(EnumTest_Enum1_bigValue, int(EnumTest_Enum1_value));
+ addComparePair(EnumTest_Enum1_bigValue, qint64(EnumTest_Enum1_value));
+ addComparePair(EnumTest_Enum1_bigValue, quint64(EnumTest_Enum1_value));
+ addComparePair(EnumTest_Enum1_bigValue, int(EnumTest_Enum1_bigValue));
+ addComparePair(EnumTest_Enum1_bigValue, qint64(EnumTest_Enum1_bigValue));
+ addComparePair(EnumTest_Enum1_bigValue, quint64(EnumTest_Enum1_bigValue));
+
+ addComparePair(EnumTest_Enum3_value, 0);
+ addComparePair(EnumTest_Enum3_value, 0U);
+ addComparePair(EnumTest_Enum3_value, 0LL);
+ addComparePair(EnumTest_Enum3_value, 0ULL);
+ addComparePair(EnumTest_Enum3_value, int(EnumTest_Enum3_value));
+ addComparePair(EnumTest_Enum3_value, qint64(EnumTest_Enum3_value));
+ addComparePair(EnumTest_Enum3_value, quint64(EnumTest_Enum3_value));
+ addComparePair(EnumTest_Enum3_bigValue, int(EnumTest_Enum3_value));
+ addComparePair(EnumTest_Enum3_bigValue, qint64(EnumTest_Enum3_value));
+ addComparePair(EnumTest_Enum3_bigValue, quint64(EnumTest_Enum3_value));
+ addComparePair(EnumTest_Enum3_bigValue, int(EnumTest_Enum3_bigValue));
+ addComparePair(EnumTest_Enum3_bigValue, qint64(EnumTest_Enum3_bigValue));
+ addComparePair(EnumTest_Enum3_bigValue, quint64(EnumTest_Enum3_bigValue));
+
+ // enums of different types always compare as unordered
+ addComparePairWithResult(EnumTest_Enum0_value, EnumTest_Enum1_value, QPartialOrdering::Unordered);
+}
+
+void tst_QVariant::compareNumerics() const
+{
+ QFETCH(QVariant, v1);
+ QFETCH(QVariant, v2);
+ QFETCH(QPartialOrdering, result);
+ QCOMPARE(QVariant::compare(v1, v2), result);
+
+ QEXPECT_FAIL("invalid-invalid", "needs fixing", Abort);
+ QT_TEST_EQUALITY_OPS(v1, v2, is_eq(result));
+}
+
+void tst_QVariant::comparePointers() const
+{
+ class NonQObjectClass {};
+ const std::array<NonQObjectClass, 2> arr{ NonQObjectClass{}, NonQObjectClass{} };
+
+ const QVariant nonObjV1 = QVariant::fromValue<const void*>(&arr[0]);
+ const QVariant nonObjV2 = QVariant::fromValue<const void*>(&arr[1]);
- QVariant v = QVariant::fromValue<void *>(&myClass);
- QVariant v2 = QVariant::fromValue<void *>(&myClass);
+ Qt::partial_ordering expectedOrdering = Qt::partial_ordering::equivalent;
+ QCOMPARE(QVariant::compare(nonObjV1, nonObjV1), expectedOrdering);
+ QT_TEST_EQUALITY_OPS(nonObjV1, nonObjV1, is_eq(expectedOrdering));
+
+ expectedOrdering = Qt::partial_ordering::less;
+ QCOMPARE(QVariant::compare(nonObjV1, nonObjV2), expectedOrdering);
+ QT_TEST_EQUALITY_OPS(nonObjV1, nonObjV2, is_eq(expectedOrdering));
+
+ class QObjectClass : public QObject
+ {
+ public:
+ QObjectClass(QObject *parent = nullptr) : QObject(parent) {}
+ };
+ const QObjectClass c1;
+ const QObjectClass c2;
- QCOMPARE(v, v2);
+ const QVariant objV1 = QVariant::fromValue(&c1);
+ const QVariant objV2 = QVariant::fromValue(&c2);
+ QT_TEST_EQUALITY_OPS(objV1, objV1, true);
+ QT_TEST_EQUALITY_OPS(objV1, objV2, false);
}
struct Data {};
@@ -2806,7 +3382,7 @@ void tst_QVariant::variantToDateTimeWithoutWarnings() const
{
QVariant v1(QLatin1String("xyz"));
- v1.convert(QVariant::DateTime);
+ v1.convert(QMetaType::fromType<QDateTime>());
QVariant v2(QLatin1String("xyz"));
QDateTime dt1(v2.toDateTime());
@@ -2820,7 +3396,7 @@ void tst_QVariant::invalidDateTime() const
{
QVariant variant(QString::fromLatin1("Invalid date time string"));
QVERIFY(!variant.toDateTime().isValid());
- QVERIFY(!variant.convert(QVariant::DateTime));
+ QVERIFY(!variant.convert(QMetaType::fromType<QDateTime>()));
}
struct MyClass
@@ -2861,22 +3437,22 @@ void tst_QVariant::invalidDate() const
{
QString foo("Hello");
QVariant variant(foo);
- QVERIFY(!variant.convert(QVariant::Date));
+ QVERIFY(!variant.convert(QMetaType::fromType<QDate>()));
variant = foo;
- QVERIFY(!variant.convert(QVariant::DateTime));
+ QVERIFY(!variant.convert(QMetaType::fromType<QDateTime>()));
variant = foo;
- QVERIFY(!variant.convert(QVariant::Time));
+ QVERIFY(!variant.convert(QMetaType::fromType<QTime>()));
variant = foo;
- QVERIFY(!variant.convert(QVariant::Int));
+ QVERIFY(!variant.convert(QMetaType::fromType<int>()));
variant = foo;
- QVERIFY(!variant.convert(QVariant::Double));
+ QVERIFY(!variant.convert(QMetaType::fromType<double>()));
variant = foo;
- QVERIFY(!variant.convert(QVariant::Type(QMetaType::Float)));
+ QVERIFY(!variant.convert(QMetaType::fromType<float>()));
}
struct WontCompare
@@ -2888,35 +3464,49 @@ Q_DECLARE_METATYPE(WontCompare);
struct WillCompare
{
int x;
+
+ friend bool operator==(const WillCompare &a, const WillCompare &b)
+ { return a.x == b.x; }
+ friend bool operator<(const WillCompare &a, const WillCompare &b)
+ { return a.x < b.x; }
};
-bool operator==(const WillCompare &a, const WillCompare &b) { return a.x == b.x; }
Q_DECLARE_METATYPE(WillCompare);
-void tst_QVariant::compareCustomTypes() const
+void tst_QVariant::compareCustomTypes_data() const
{
- {
- WontCompare f1{0};
- const QVariant variant1(QVariant::fromValue(f1));
+ QTest::addColumn<QVariant>("v1");
+ QTest::addColumn<QVariant>("v2");
+ QTest::addColumn<Qt::partial_ordering>("expectedOrdering");
- WontCompare f2{1};
- const QVariant variant2(QVariant::fromValue(f2));
+ QTest::newRow("same_uncomparable")
+ << QVariant::fromValue(WontCompare{0})
+ << QVariant::fromValue(WontCompare{0})
+ << Qt::partial_ordering::unordered;
- /* No comparison operator exists. */
- QVERIFY(variant1 != variant2);
- QVERIFY(variant1 != variant1);
- QVERIFY(variant2 != variant2);
- }
- {
- WillCompare f1{0};
- const QVariant variant1(QVariant::fromValue(f1));
+ QTest::newRow("same_comparable")
+ << QVariant::fromValue(WillCompare{0})
+ << QVariant::fromValue(WillCompare{0})
+ << Qt::partial_ordering::equivalent;
- WillCompare f2 {1};
- const QVariant variant2(QVariant::fromValue(f2));
+ QTest::newRow("different_comparable")
+ << QVariant::fromValue(WillCompare{1})
+ << QVariant::fromValue(WillCompare{0})
+ << Qt::partial_ordering::greater;
- QVERIFY(variant1 != variant2);
- QCOMPARE(variant1, variant1);
- QCOMPARE(variant2, variant2);
- }
+ QTest::newRow("qdatetime_vs_comparable")
+ << QVariant::fromValue(QDateTime::currentDateTimeUtc())
+ << QVariant::fromValue(WillCompare{0})
+ << Qt::partial_ordering::unordered;
+}
+
+void tst_QVariant::compareCustomTypes() const
+{
+ QFETCH(const QVariant, v1);
+ QFETCH(const QVariant, v2);
+ QFETCH(const Qt::partial_ordering, expectedOrdering);
+
+ QCOMPARE(QVariant::compare(v1, v2), expectedOrdering);
+ QT_TEST_EQUALITY_OPS(v1, v2, is_eq(expectedOrdering));
}
void tst_QVariant::timeToDateTime() const
{
@@ -3060,7 +3650,7 @@ void tst_QVariant::convertByteArrayToBool() const
QFETCH(QByteArray, output);
const QVariant variant(input);
- QCOMPARE(variant.type(), QVariant::Bool);
+ QCOMPARE(variant.typeId(), QMetaType::Bool);
QCOMPARE(variant.toBool(), input);
QVERIFY(variant.canConvert<bool>());
@@ -3086,57 +3676,57 @@ void tst_QVariant::convertIterables() const
{
QStringList list;
list.append("Hello");
- QCOMPARE(QVariant::fromValue(list).value<QVariantList>().count(), list.count());
+ QCOMPARE(QVariant::fromValue(list).value<QVariantList>().size(), list.size());
}
{
QByteArrayList list;
list.append("Hello");
- QCOMPARE(QVariant::fromValue(list).value<QVariantList>().count(), list.count());
+ QCOMPARE(QVariant::fromValue(list).value<QVariantList>().size(), list.size());
}
{
QVariantList list;
list.append("World");
- QCOMPARE(QVariant::fromValue(list).value<QVariantList>().count(), list.count());
+ QCOMPARE(QVariant::fromValue(list).value<QVariantList>().size(), list.size());
}
{
QMap<QString, int> map;
map.insert("3", 4);
- QCOMPARE(QVariant::fromValue(map).value<QVariantHash>().count(), map.count());
- QCOMPARE(QVariant::fromValue(map).value<QVariantMap>().count(), map.count());
+ QCOMPARE(QVariant::fromValue(map).value<QVariantHash>().size(), map.size());
+ QCOMPARE(QVariant::fromValue(map).value<QVariantMap>().size(), map.size());
map.insert("4", 5);
- QCOMPARE(QVariant::fromValue(map).value<QVariantHash>().count(), map.count());
- QCOMPARE(QVariant::fromValue(map).value<QVariantMap>().count(), map.count());
+ QCOMPARE(QVariant::fromValue(map).value<QVariantHash>().size(), map.size());
+ QCOMPARE(QVariant::fromValue(map).value<QVariantMap>().size(), map.size());
}
{
QVariantMap map;
map.insert("3", 4);
- QCOMPARE(QVariant::fromValue(map).value<QVariantHash>().count(), map.count());
- QCOMPARE(QVariant::fromValue(map).value<QVariantMap>().count(), map.count());
+ QCOMPARE(QVariant::fromValue(map).value<QVariantHash>().size(), map.size());
+ QCOMPARE(QVariant::fromValue(map).value<QVariantMap>().size(), map.size());
map.insert("4", 5);
- QCOMPARE(QVariant::fromValue(map).value<QVariantHash>().count(), map.count());
- QCOMPARE(QVariant::fromValue(map).value<QVariantMap>().count(), map.count());
+ QCOMPARE(QVariant::fromValue(map).value<QVariantHash>().size(), map.size());
+ QCOMPARE(QVariant::fromValue(map).value<QVariantMap>().size(), map.size());
}
{
QHash<QString, int> hash;
hash.insert("3", 4);
- QCOMPARE(QVariant::fromValue(hash).value<QVariantHash>().count(), hash.count());
- QCOMPARE(QVariant::fromValue(hash).value<QVariantMap>().count(), hash.count());
+ QCOMPARE(QVariant::fromValue(hash).value<QVariantHash>().size(), hash.size());
+ QCOMPARE(QVariant::fromValue(hash).value<QVariantMap>().size(), hash.size());
hash.insert("4", 5);
- QCOMPARE(QVariant::fromValue(hash).value<QVariantHash>().count(), hash.count());
- QCOMPARE(QVariant::fromValue(hash).value<QVariantMap>().count(), hash.count());
+ QCOMPARE(QVariant::fromValue(hash).value<QVariantHash>().size(), hash.size());
+ QCOMPARE(QVariant::fromValue(hash).value<QVariantMap>().size(), hash.size());
}
{
QVariantHash hash;
hash.insert("3", 4);
- QCOMPARE(QVariant::fromValue(hash).value<QVariantHash>().count(), hash.count());
- QCOMPARE(QVariant::fromValue(hash).value<QVariantMap>().count(), hash.count());
+ QCOMPARE(QVariant::fromValue(hash).value<QVariantHash>().size(), hash.size());
+ QCOMPARE(QVariant::fromValue(hash).value<QVariantMap>().size(), hash.size());
hash.insert("4", 5);
- QCOMPARE(QVariant::fromValue(hash).value<QVariantHash>().count(), hash.count());
- QCOMPARE(QVariant::fromValue(hash).value<QVariantMap>().count(), hash.count());
+ QCOMPARE(QVariant::fromValue(hash).value<QVariantHash>().size(), hash.size());
+ QCOMPARE(QVariant::fromValue(hash).value<QVariantMap>().size(), hash.size());
}
}
@@ -3228,13 +3818,13 @@ void tst_QVariant::fpStringRoundtrip() const
QFETCH(QVariant, number);
QVariant converted = number;
- QVERIFY(converted.convert(QVariant::String));
- QVERIFY(converted.convert(number.type()));
+ QVERIFY(converted.convert(QMetaType::fromType<QString>()));
+ QVERIFY(converted.convert(QMetaType(number.typeId())));
QCOMPARE(converted, number);
converted = number;
- QVERIFY(converted.convert(QVariant::ByteArray));
- QVERIFY(converted.convert(number.type()));
+ QVERIFY(converted.convert(QMetaType::fromType<QByteArray>()));
+ QVERIFY(converted.convert(QMetaType(number.typeId())));
QCOMPARE(converted, number);
}
@@ -3272,7 +3862,7 @@ void tst_QVariant::numericalConvert()
}
switch (v.userType())
{
- case QVariant::Double:
+ case QMetaType::Double:
QCOMPARE(v.toString() , QString::number(num, 'g', QLocale::FloatingPointShortest));
break;
case QMetaType::Float:
@@ -3337,10 +3927,8 @@ template<class T> void playWithVariant(const T &orig, bool isNull, const QString
QCOMPARE(v.toBool(), toBool);
QCOMPARE(qvariant_cast<T>(v), orig);
- if (qMetaTypeId<T>() != qMetaTypeId<QVariant>()) {
+ if (qMetaTypeId<T>() != qMetaTypeId<QVariant>())
QCOMPARE(v.userType(), qMetaTypeId<T>());
- QCOMPARE(QVariant::typeToName(QVariant::Type(v.userType())), QMetaType::typeName(qMetaTypeId<T>()));
- }
}
#define PLAY_WITH_VARIANT(Orig, IsNull, ToString, ToDouble, ToBool) \
@@ -3618,11 +4206,11 @@ void tst_QVariant::movabilityTest()
// prepare destination memory space to which variant will be moved
QVariant buffer[1];
- QCOMPARE(buffer[0].type(), QVariant::Invalid);
+ QCOMPARE(buffer[0].typeId(), QMetaType::UnknownType);
buffer[0].~QVariant();
memcpy(static_cast<void *>(buffer), static_cast<void *>(&variant), sizeof(QVariant));
- QCOMPARE(buffer[0].type(), QVariant::UserType);
+ QVERIFY(buffer[0].typeId() > QMetaType::User);
QCOMPARE(buffer[0].userType(), qMetaTypeId<MyNotMovable>());
MyNotMovable tmp(buffer[0].value<MyNotMovable>());
@@ -3634,24 +4222,24 @@ void tst_QVariant::movabilityTest()
void tst_QVariant::variantInVariant()
{
QVariant var1 = 5;
- QCOMPARE(var1.type(), QVariant::Int);
+ QCOMPARE(var1.typeId(), QMetaType::Int);
QVariant var2 = var1;
QCOMPARE(var2, var1);
- QCOMPARE(var2.type(), QVariant::Int);
+ QCOMPARE(var2.typeId(), QMetaType::Int);
QVariant var3 = QVariant::fromValue(var1);
QCOMPARE(var3, var1);
- QCOMPARE(var3.type(), QVariant::Int);
+ QCOMPARE(var3.typeId(), QMetaType::Int);
QVariant var4 = qvariant_cast<QVariant>(var1);
QCOMPARE(var4, var1);
- QCOMPARE(var4.type(), QVariant::Int);
+ QCOMPARE(var4.typeId(), QMetaType::Int);
QVariant var5;
var5 = var1;
QCOMPARE(var5, var1);
- QCOMPARE(var5.type(), QVariant::Int);
+ QCOMPARE(var5.typeId(), QMetaType::Int);
QVariant var6;
var6.setValue(var1);
QCOMPARE(var6, var1);
- QCOMPARE(var6.type(), QVariant::Int);
+ QCOMPARE(var6.typeId(), QMetaType::Int);
QCOMPARE(QVariant::fromValue(var1), QVariant::fromValue(var2));
QCOMPARE(qvariant_cast<QVariant>(var3), QVariant::fromValue(var4));
@@ -3659,7 +4247,7 @@ void tst_QVariant::variantInVariant()
QString str("hello");
QVariant var8 = qvariant_cast<QVariant>(QVariant::fromValue(QVariant::fromValue(str)));
- QCOMPARE((int)var8.type(), (int)QVariant::String);
+ QCOMPARE(var8.typeId(), QMetaType::QString);
QCOMPARE(qvariant_cast<QString>(QVariant(qvariant_cast<QVariant>(var8))), str);
QVariant var9(QMetaType::fromType<QVariant>(), &var1);
@@ -3762,11 +4350,11 @@ void tst_QVariant::modelIndexConversion()
{
QVariant modelIndexVariant = QModelIndex();
QVERIFY(modelIndexVariant.canConvert<QPersistentModelIndex>());
- QVERIFY(modelIndexVariant.convert(QMetaType::QPersistentModelIndex));
- QCOMPARE(modelIndexVariant.type(), QVariant::PersistentModelIndex);
- QVERIFY(modelIndexVariant.canConvert(QMetaType::QModelIndex));
- QVERIFY(modelIndexVariant.convert(QMetaType::QModelIndex));
- QCOMPARE(modelIndexVariant.type(), QVariant::ModelIndex);
+ QVERIFY(modelIndexVariant.convert(QMetaType::fromType<QPersistentModelIndex>()));
+ QCOMPARE(modelIndexVariant.typeId(), QMetaType::QPersistentModelIndex);
+ QVERIFY(modelIndexVariant.canConvert(QMetaType::fromType<QModelIndex>()));
+ QVERIFY(modelIndexVariant.convert(QMetaType::fromType<QModelIndex>()));
+ QCOMPARE(modelIndexVariant.typeId(), QMetaType::QModelIndex);
}
class Forward;
@@ -3839,7 +4427,8 @@ void tst_QVariant::dataStream_data(QDataStream::Version version)
path = path.prepend(":/stream/").append("/");
QDir dir(path);
uint i = 0;
- foreach (const QFileInfo &fileInfo, dir.entryInfoList(QStringList() << "*.bin")) {
+ const auto entries = dir.entryInfoList(QStringList{u"*.bin"_s});
+ for (const QFileInfo &fileInfo : entries) {
QTest::newRow((path + fileInfo.fileName()).toLatin1()) << fileInfo.filePath();
i += 1;
}
@@ -3860,15 +4449,15 @@ void tst_QVariant::loadQVariantFromDataStream(QDataStream::Version version)
QVariant loadedVariant;
stream >> typeName >> loadedVariant;
- const int id = QMetaType::type(typeName.toLatin1());
+ const int id = QMetaType::fromName(typeName.toLatin1()).id();
if (id == QMetaType::Void) {
// Void type is not supported by QVariant
return;
}
- QVariant constructedVariant(static_cast<QVariant::Type>(id));
+ QVariant constructedVariant {QMetaType(id)};
QCOMPARE(constructedVariant.userType(), id);
- QCOMPARE(QMetaType::typeName(loadedVariant.userType()), typeName.toLatin1().constData());
+ QCOMPARE(QMetaType(loadedVariant.userType()).name(), typeName.toLatin1().constData());
QCOMPARE(loadedVariant.userType(), constructedVariant.userType());
}
@@ -3883,7 +4472,7 @@ void tst_QVariant::saveQVariantFromDataStream(QDataStream::Version version)
QString typeName;
dataFileStream >> typeName;
QByteArray data = file.readAll();
- const int id = QMetaType::type(typeName.toLatin1());
+ const int id = QMetaType::fromName(typeName.toLatin1()).id();
if (id == QMetaType::Void) {
// Void type is not supported by QVariant
return;
@@ -3894,7 +4483,7 @@ void tst_QVariant::saveQVariantFromDataStream(QDataStream::Version version)
QDataStream stream(&buffer);
stream.setVersion(version);
- QVariant constructedVariant(static_cast<QVariant::Type>(id));
+ QVariant constructedVariant {QMetaType(id)};
QCOMPARE(constructedVariant.userType(), id);
stream << constructedVariant;
@@ -3912,12 +4501,13 @@ void tst_QVariant::debugStream_data()
QTest::addColumn<QVariant>("variant");
QTest::addColumn<int>("typeId");
for (int id = 0; id < QMetaType::LastCoreType + 1; ++id) {
- const char *tagName = QMetaType::typeName(id);
- if (!tagName)
- continue;
- if (id != QMetaType::Void) {
- QTest::newRow(tagName) << QVariant(static_cast<QVariant::Type>(id)) << id;
+ if (id && !QMetaType::isRegistered(id)) {
+ QTest::ignoreMessage(QtWarningMsg, QRegularExpression(
+ "^Trying to construct an instance of an invalid type"));
}
+ const char *tagName = QMetaType(id).name();
+ if (tagName && id != QMetaType::Void)
+ QTest::newRow(tagName) << QVariant(QMetaType(id)) << id;
}
QTest::newRow("QBitArray(111)") << QVariant(QBitArray(3, true)) << qMetaTypeId<QBitArray>();
QTest::newRow("CustomStreamableClass") << QVariant(QMetaType::fromType<CustomStreamableClass>(), 0) << qMetaTypeId<CustomStreamableClass>();
@@ -3936,6 +4526,7 @@ void tst_QVariant::debugStream()
QVERIFY(msgHandler.testPassed());
}
+#if QT_DEPRECATED_SINCE(6, 0)
struct MessageHandlerType : public MessageHandler
{
MessageHandlerType(const int typeId)
@@ -3946,9 +4537,11 @@ struct MessageHandlerType : public MessageHandler
// Format itself is not important, but basic data as a type name should be included in the output
ok = msg.startsWith("QVariant::");
QVERIFY2(ok, (QString::fromLatin1("Message is not started correctly: '") + msg + '\'').toLatin1().constData());
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
ok &= (currentId == QMetaType::UnknownType
? msg.contains("Invalid")
: msg.contains(QMetaType::typeName(currentId)));
+QT_WARNING_POP
QVERIFY2(ok, (QString::fromLatin1("Message doesn't contain type name: '") + msg + '\'').toLatin1().constData());
}
};
@@ -3964,9 +4557,10 @@ void tst_QVariant::debugStreamType()
QFETCH(int, typeId);
MessageHandlerType msgHandler(typeId);
- qDebug() << QVariant::Type(typeId);
+ QT_IGNORE_DEPRECATIONS(qDebug() << QVariant::Type(typeId);)
QVERIFY(msgHandler.testPassed());
}
+#endif // QT_DEPRECATED_SINCE(6, 0)
void tst_QVariant::implicitConstruction()
{
@@ -4273,7 +4867,7 @@ void sortIterable(QSequentialIterable *iterable)
}
template<typename Container>
-void testSequentialIteration()
+static void testSequentialIteration()
{
int numSeen = 0;
Container sequence;
@@ -4298,16 +4892,6 @@ void testSequentialIteration()
QCOMPARE(numSeen, (int)std::distance(sequence.begin(), sequence.end()));
QCOMPARE(containerIter, containerEnd);
- containerIter = sequence.begin();
- numSeen = 0;
- Q_FOREACH (const QVariant &v, listIter) {
- QVERIFY(ContainerAPI<Container>::compare(v, *containerIter));
- QVERIFY(ContainerAPI<Container>::compare(v, varList.at(numSeen)));
- ++containerIter;
- ++numSeen;
- }
- QCOMPARE(numSeen, (int)std::distance(sequence.begin(), sequence.end()));
-
numSeen = 0;
containerIter = sequence.begin();
for (QVariant v : listIter) {
@@ -4322,7 +4906,7 @@ void testSequentialIteration()
int numSeen = 0;
auto varList = listVariant.value<QVariantList>();
auto varIter = varList.begin();
- for (const QVariant &v : qAsConst(listIter)) {
+ for (const QVariant &v : std::as_const(listIter)) {
QVERIFY(ContainerAPI<Container>::compare(v, *varIter));
++varIter;
++numSeen;
@@ -4402,7 +4986,7 @@ void testSequentialIteration()
}
template<typename Container>
-void testAssociativeIteration()
+static void testAssociativeIteration()
{
using Key = typename Container::key_type;
using Mapped = typename Container::mapped_type;
@@ -4473,35 +5057,53 @@ void testAssociativeIteration()
QCOMPARE(f, iter.constEnd());
}
-void tst_QVariant::iterateContainerElements()
-{
- testSequentialIteration<QQueue<int>>();
- testSequentialIteration<QQueue<QVariant>>();
- testSequentialIteration<QQueue<QString>>();
- testSequentialIteration<QList<int>>();
- testSequentialIteration<QList<QVariant>>();
- testSequentialIteration<QList<QString>>();
- testSequentialIteration<QList<QByteArray>>();
- testSequentialIteration<QStack<int>>();
- testSequentialIteration<QStack<QVariant>>();
- testSequentialIteration<QStack<QString>>();
- testSequentialIteration<std::vector<int>>();
- testSequentialIteration<std::vector<QVariant>>();
- testSequentialIteration<std::vector<QString>>();
- testSequentialIteration<std::list<int>>();
- testSequentialIteration<std::list<QVariant>>();
- testSequentialIteration<std::list<QString>>();
- testSequentialIteration<QStringList>();
- testSequentialIteration<QByteArrayList>();
- testSequentialIteration<QString>();
- testSequentialIteration<QByteArray>();
+void tst_QVariant::iterateSequentialContainerElements_data()
+{
+ QTest::addColumn<QFunctionPointer>("testFunction");
+#define ADD(T) QTest::newRow(#T) << &testSequentialIteration<T>
+ ADD(QQueue<int>);
+ ADD(QQueue<QVariant>);
+ ADD(QQueue<QString>);
+ ADD(QList<int>);
+ ADD(QList<QVariant>);
+ ADD(QList<QString>);
+ ADD(QList<QByteArray>);
+ ADD(QStack<int>);
+ ADD(QStack<QVariant>);
+ ADD(QStack<QString>);
+ ADD(std::vector<int>);
+ ADD(std::vector<QVariant>);
+ ADD(std::vector<QString>);
+ ADD(std::list<int>);
+ ADD(std::list<QVariant>);
+ ADD(std::list<QString>);
+ ADD(QStringList);
+ ADD(QByteArrayList);
+ ADD(QString);
+ ADD(QByteArray);
#ifdef TEST_FORWARD_LIST
- testSequentialIteration<std::forward_list<int>>();
- testSequentialIteration<std::forward_list<QVariant>>();
- testSequentialIteration<std::forward_list<QString>>();
+ ADD(std::forward_list<int>);
+ ADD(std::forward_list<QVariant>);
+ ADD(std::forward_list<QString>);
#endif
+#undef ADD
+}
+
+void tst_QVariant::iterateAssociativeContainerElements_data()
+{
+ QTest::addColumn<QFunctionPointer>("testFunction");
+#define ADD(C, K, V) QTest::newRow(#C #K #V) << &testAssociativeIteration<C<K, V>>;
+ ADD(QHash, int, bool);
+ ADD(QHash, int, int);
+ ADD(QMap, int, bool);
+ ADD(std::map, int, bool);
+ ADD(std::unordered_map, int, bool);
+#undef ADD
+}
+void tst_QVariant::iterateContainerElements()
+{
{
QVariantList ints;
ints << 1 << 2 << 3;
@@ -4524,12 +5126,6 @@ void tst_QVariant::iterateContainerElements()
QCOMPARE(ints, intsCopy);
}
- testAssociativeIteration<QHash<int, bool>>();
- testAssociativeIteration<QHash<int, int>>();
- testAssociativeIteration<QMap<int, bool>>();
- testAssociativeIteration<std::map<int, bool>>();
- testAssociativeIteration<std::unordered_map<int, bool>>();
-
{
QMap<int, QString> mapping;
mapping.insert(1, "one");
@@ -4572,56 +5168,61 @@ void tst_QVariant::iterateContainerElements()
}
}
-void tst_QVariant::pairElements()
+template <typename Pair> static void testVariantPairElements()
{
- typedef QPair<QVariant, QVariant> QVariantPair;
+ QFETCH(std::function<void(void *)>, makeValue);
+ Pair p;
+ makeValue(&p);
+ QVariant v = QVariant::fromValue(p);
-#define TEST_PAIR_ELEMENT_ACCESS(PAIR, T1, T2, VALUE1, VALUE2) \
- { \
- PAIR<T1, T2> p(VALUE1, VALUE2); \
- QVariant v = QVariant::fromValue(p); \
- \
- QVERIFY(v.canConvert<QVariantPair>()); \
- QVariantPair pi = v.value<QVariantPair>(); \
- QCOMPARE(pi.first, QVariant::fromValue(VALUE1)); \
- QCOMPARE(pi.second, QVariant::fromValue(VALUE2)); \
- }
-
- TEST_PAIR_ELEMENT_ACCESS(QPair, int, int, 4, 5)
- TEST_PAIR_ELEMENT_ACCESS(std::pair, int, int, 4, 5)
- TEST_PAIR_ELEMENT_ACCESS(QPair, QString, QString, QStringLiteral("one"), QStringLiteral("two"))
- TEST_PAIR_ELEMENT_ACCESS(std::pair, QString, QString, QStringLiteral("one"), QStringLiteral("two"))
- TEST_PAIR_ELEMENT_ACCESS(QPair, QVariant, QVariant, 4, 5)
- TEST_PAIR_ELEMENT_ACCESS(std::pair, QVariant, QVariant, 4, 5)
- TEST_PAIR_ELEMENT_ACCESS(QPair, QVariant, int, 41, 15)
- TEST_PAIR_ELEMENT_ACCESS(std::pair, QVariant, int, 34, 65)
- TEST_PAIR_ELEMENT_ACCESS(QPair, int, QVariant, 24, 25)
- TEST_PAIR_ELEMENT_ACCESS(std::pair, int, QVariant, 44, 15)
+ QVERIFY(v.canConvert<QVariantPair>());
+ QVariantPair pi = v.value<QVariantPair>();
+ QCOMPARE(pi.first, QVariant::fromValue(p.first));
+ QCOMPARE(pi.second, QVariant::fromValue(p.second));
}
-enum EnumTest_Enum0 { EnumTest_Enum0_value = 42, EnumTest_Enum0_negValue = -8 };
-Q_DECLARE_METATYPE(EnumTest_Enum0)
-enum EnumTest_Enum1 : qint64 { EnumTest_Enum1_value = 42, EnumTest_Enum1_bigValue = (Q_INT64_C(1) << 33) + 50 };
-Q_DECLARE_METATYPE(EnumTest_Enum1)
+void tst_QVariant::pairElements_data()
+{
+ QTest::addColumn<QFunctionPointer>("testFunction");
+ QTest::addColumn<std::function<void(void *)>>("makeValue");
-enum EnumTest_Enum3 : qint64 { EnumTest_Enum3_value = -47, EnumTest_Enum3_bigValue = (Q_INT64_C(1) << 56) + 5 };
-Q_DECLARE_METATYPE(EnumTest_Enum3)
-enum EnumTest_Enum4 : quint64 { EnumTest_Enum4_value = 47, EnumTest_Enum4_bigValue = (Q_INT64_C(1) << 52) + 45 };
-Q_DECLARE_METATYPE(EnumTest_Enum4)
-enum EnumTest_Enum5 : uint { EnumTest_Enum5_value = 47 };
-Q_DECLARE_METATYPE(EnumTest_Enum5)
-enum EnumTest_Enum6 : uchar { EnumTest_Enum6_value = 47 };
-Q_DECLARE_METATYPE(EnumTest_Enum6)
-enum class EnumTest_Enum7 { EnumTest_Enum7_value = 47, ensureSignedEnum7 = -1 };
-Q_DECLARE_METATYPE(EnumTest_Enum7)
-enum EnumTest_Enum8 : short { EnumTest_Enum8_value = 47 };
-Q_DECLARE_METATYPE(EnumTest_Enum8)
+ static auto makeString = [](auto &&value) -> QString {
+ using T = std::decay_t<decltype(value)>;
+ if constexpr (std::is_integral_v<T> || std::is_floating_point_v<T>) {
+ return QString::number(value);
+ } else if constexpr (std::is_same_v<T, QVariant>) {
+ return value.toString();
+ } else {
+ return value;
+ }
+ };
+ auto addRow = [](auto &&first, auto &&second) {
+ using Pair = std::pair<std::decay_t<decltype(first)>, std::decay_t<decltype(second)>>;
+ std::function<void(void *)> makeValue = [=](void *pair) {
+ *static_cast<Pair *>(pair) = Pair{first, second};
+ };
-template<typename Enum> void testVariant(Enum value, bool *ok)
+ QTest::addRow("%s", qPrintable(makeString(first) + u',' + makeString(second)))
+ << &testVariantPairElements<Pair> << makeValue;
+ };
+
+ addRow(4, 5);
+ addRow(QStringLiteral("one"), QStringLiteral("two"));
+ addRow(QVariant(4), QVariant(5));
+ addRow(QVariant(41), 65);
+ addRow(41, QVariant(15));
+}
+
+template <auto value> static void testVariantEnum()
{
- *ok = false;
- QVariant var = QVariant::fromValue(value);
+ using Enum = decltype(value);
+ auto canLosslesslyConvert = [=](auto zero) {
+ return sizeof(value) <= sizeof(zero) ||
+ value == Enum(decltype(zero)(qToUnderlying(value)));
+ };
+ bool losslessConvertToInt = canLosslesslyConvert(int{});
+ QVariant var = QVariant::fromValue(value);
QCOMPARE(var.userType(), qMetaTypeId<Enum>());
QVERIFY(var.canConvert<Enum>());
@@ -4632,7 +5233,6 @@ template<typename Enum> void testVariant(Enum value, bool *ok)
QVERIFY(var.canConvert<qint64>());
QVERIFY(var.canConvert<quint64>());
-
QCOMPARE(var.value<Enum>(), value);
QCOMPARE(var.value<int>(), static_cast<int>(value));
QCOMPARE(var.value<uint>(), static_cast<uint>(value));
@@ -4642,11 +5242,18 @@ template<typename Enum> void testVariant(Enum value, bool *ok)
QCOMPARE(var.value<quint64>(), static_cast<quint64>(value));
QVariant var2 = var;
- QVERIFY(var2.convert(QMetaType::Int));
+ QVERIFY(var2.convert(QMetaType::fromType<int>()));
QCOMPARE(var2.value<int>(), static_cast<int>(value));
+ QVariant strVar = QString::number(qToUnderlying(value));
+ QVariant baVar = QByteArray::number(qToUnderlying(value));
+ QCOMPARE(strVar.value<Enum>(), value);
+ QCOMPARE(baVar.value<Enum>(), value);
+ QCOMPARE(var.value<QString>(), strVar);
+ QCOMPARE(var.value<QByteArray>(), baVar);
+
// unary + to silence gcc warning
- if ((+static_cast<qint64>(value) <= INT_MAX) && (+static_cast<qint64>(value) >= INT_MIN)) {
+ if (losslessConvertToInt) {
int intValue = static_cast<int>(value);
QVariant intVar = intValue;
QVERIFY(intVar.canConvert<Enum>());
@@ -4656,72 +5263,126 @@ template<typename Enum> void testVariant(Enum value, bool *ok)
QVERIFY(QVariant(longValue).canConvert<Enum>());
QCOMPARE(QVariant(longValue).value<Enum>(), value);
- *ok = true;
-}
-
-void tst_QVariant::enums()
-{
- bool ok = false;
- testVariant(EnumTest_Enum0_value, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum0_negValue, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum1_value, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum1_bigValue, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum3::EnumTest_Enum3_value, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum3::EnumTest_Enum3_bigValue, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum4::EnumTest_Enum4_value, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum4::EnumTest_Enum4_bigValue, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum5::EnumTest_Enum5_value, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum6::EnumTest_Enum6_value, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum7::EnumTest_Enum7_value, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum8::EnumTest_Enum8_value, &ok);
- QVERIFY(ok);
- testVariant(EnumTest_Enum3::EnumTest_Enum3_value, &ok);
- QVERIFY(ok);
-}
-
-template<typename Enum> void testVariantMeta(Enum value, bool *ok, const char *string)
-{
- testVariant<Enum>(value, ok);
- QVERIFY(ok);
- *ok = false;
+ auto value2 = Enum(qToUnderlying(value) + 1);
+ var2 = QVariant::fromValue(value2);
+ QCOMPARE_EQ(var, var);
+ QCOMPARE_NE(var, var2);
+ QCOMPARE(QVariant::compare(var, var), QPartialOrdering::Equivalent);
+ QCOMPARE(QVariant::compare(var, var2), QPartialOrdering::Less);
+ QCOMPARE(QVariant::compare(var2, var), QPartialOrdering::Greater);
+
+ QCOMPARE_EQ(var, static_cast<qint64>(value));
+ QCOMPARE_EQ(var, static_cast<quint64>(value));
+ QCOMPARE_EQ(static_cast<qint64>(value), var);
+ QCOMPARE_EQ(static_cast<quint64>(value), var);
+ QCOMPARE_NE(var2, static_cast<qint64>(value));
+ QCOMPARE_NE(var2, static_cast<quint64>(value));
+ QCOMPARE_NE(static_cast<qint64>(value), var2);
+ QCOMPARE_NE(static_cast<quint64>(value), var2);
+
+ if (losslessConvertToInt) {
+ QCOMPARE_EQ(var, int(value));
+ QCOMPARE_EQ(int(value), var);
+ QCOMPARE_NE(var2, int(value));
+ QCOMPARE_NE(int(value), var2);
+ }
+ if (canLosslesslyConvert(uint{})) {
+ QCOMPARE_EQ(var, uint(value));
+ QCOMPARE_EQ(uint(value), var);
+ QCOMPARE_NE(var2, uint(value));
+ QCOMPARE_NE(uint(value), var2);
+ }
+ if (canLosslesslyConvert(short{})) {
+ QCOMPARE_EQ(var, short(value));
+ QCOMPARE_EQ(short(value), var);
+ QCOMPARE_NE(var2, short(value));
+ QCOMPARE_NE(short(value), var2);
+ }
+ if (canLosslesslyConvert(ushort{})) {
+ QCOMPARE_EQ(var, ushort(value));
+ QCOMPARE_EQ(ushort(value), var);
+ QCOMPARE_NE(var2, ushort(value));
+ QCOMPARE_NE(ushort(value), var2);
+ }
+ if (canLosslesslyConvert(char{})) {
+ QCOMPARE_EQ(var, char(value));
+ QCOMPARE_EQ(char(value), var);
+ QCOMPARE_NE(var2, char(value));
+ QCOMPARE_NE(char(value), var2);
+ }
+ if (canLosslesslyConvert(uchar{})) {
+ QCOMPARE_EQ(var, uchar(value));
+ QCOMPARE_EQ(uchar(value), var);
+ QCOMPARE_NE(var2, uchar(value));
+ QCOMPARE_NE(uchar(value), var2);
+ }
+ if (canLosslesslyConvert(qint8{})) {
+ QCOMPARE_EQ(var, qint8(value));
+ QCOMPARE_EQ(qint8(value), var);
+ QCOMPARE_NE(var2, qint8(value));
+ QCOMPARE_NE(qint8(value), var2);
+ }
+
+ // string compares too (of the values in decimal)
+ QCOMPARE_EQ(var, QString::number(qToUnderlying(value)));
+ QCOMPARE_EQ(QString::number(qToUnderlying(value)), var);
+ QCOMPARE_NE(var, QString::number(qToUnderlying(value2)));
+ QCOMPARE_NE(QString::number(qToUnderlying(value2)), var);
+}
+
+void tst_QVariant::enums_data()
+{
+ QTest::addColumn<QFunctionPointer>("testFunction");
+
+#define ADD(V) QTest::newRow(#V) << &testVariantEnum<V>
+ ADD(EnumTest_Enum0_value);
+ ADD(EnumTest_Enum0_negValue);
+ ADD(EnumTest_Enum1_value);
+ ADD(EnumTest_Enum1_bigValue);
+ ADD(EnumTest_Enum3::EnumTest_Enum3_value);
+ ADD(EnumTest_Enum3::EnumTest_Enum3_bigValue);
+ ADD(EnumTest_Enum4::EnumTest_Enum4_value);
+ ADD(EnumTest_Enum4::EnumTest_Enum4_bigValue);
+ ADD(EnumTest_Enum5::EnumTest_Enum5_value);
+ ADD(EnumTest_Enum6::EnumTest_Enum6_value);
+ ADD(EnumTest_Enum7::EnumTest_Enum7_value);
+ ADD(EnumTest_Enum8::EnumTest_Enum8_value);
+ ADD(EnumTest_Enum3::EnumTest_Enum3_value);
+#undef ADD
+}
+
+// ### C++20: this would be easier if QFlags were a structural type
+template <typename Enum, auto Value> static void testVariantMetaEnum()
+{
+ Enum value(Value);
+ QFETCH(QString, string);
QVariant var = QVariant::fromValue(value);
QVERIFY(var.canConvert<QString>());
QVERIFY(var.canConvert<QByteArray>());
- QCOMPARE(var.value<QString>(), QString::fromLatin1(string));
- QCOMPARE(var.value<QByteArray>(), QByteArray(string));
+ QCOMPARE(var.value<QString>(), string);
+ QCOMPARE(var.value<QByteArray>(), string.toLatin1());
- QVariant strVar = QString::fromLatin1(string);
+ QVariant strVar = string;
QVERIFY(strVar.canConvert<Enum>());
// unary + to silence gcc warning
if ((+static_cast<qint64>(value) > INT_MAX) || (+static_cast<qint64>(value) < INT_MIN)) {
QEXPECT_FAIL("", "QMetaEnum api uses 'int' as return type QTBUG-27451", Abort);
- *ok = true;
}
QCOMPARE(strVar.value<Enum>(), value);
- strVar = QByteArray(string);
+ strVar = string.toLatin1();
QVERIFY(strVar.canConvert<Enum>());
QCOMPARE(strVar.value<Enum>(), value);
- *ok = true;
}
-void tst_QVariant::metaEnums()
+void tst_QVariant::metaEnums_data()
{
- bool ok = false;
+ QTest::addColumn<QFunctionPointer>("testFunction");
+ QTest::addColumn<QString>("string");
+
#define METAENUMS_TEST(Value) \
- testVariantMeta(Value, &ok, #Value); QVERIFY(ok)
+ QTest::newRow(#Value) << &testVariantMetaEnum<decltype(Value), Value> << #Value;
METAENUMS_TEST(MetaEnumTest_Enum0_value);
METAENUMS_TEST(MetaEnumTest_Enum1_value);
@@ -4734,17 +5395,26 @@ void tst_QVariant::metaEnums()
METAENUMS_TEST(MetaEnumTest_Enum5_value);
METAENUMS_TEST(MetaEnumTest_Enum6_value);
METAENUMS_TEST(MetaEnumTest_Enum8_value);
+ { using namespace Qt; METAENUMS_TEST(RichText); }
+#undef METAENUMS_TEST
+
+ QTest::newRow("AlignBottom")
+ << &testVariantMetaEnum<Qt::Alignment, Qt::AlignBottom> << "AlignBottom";
+
+ constexpr auto AlignHCenterBottom = Qt::AlignmentFlag((Qt::AlignHCenter | Qt::AlignBottom).toInt());
+ QTest::newRow("AlignHCenter|AlignBottom")
+ << &testVariantMetaEnum<Qt::Alignment, AlignHCenterBottom> << "AlignHCenter|AlignBottom";
}
void tst_QVariant::nullConvert()
{
// null variant with no initialized value
- QVariant nullVar(QVariant::String);
+ QVariant nullVar {QMetaType::fromType<QString>()};
QVERIFY(nullVar.isValid());
QVERIFY(nullVar.isNull());
// We can not convert a variant with no value
- QVERIFY(!nullVar.convert(QVariant::Url));
- QCOMPARE(nullVar.type(), QVariant::Url);
+ QVERIFY(!nullVar.convert(QMetaType::fromType<QUrl>()));
+ QCOMPARE(nullVar.typeId(), QMetaType::QUrl);
QVERIFY(nullVar.isNull());
}
@@ -4880,36 +5550,81 @@ void tst_QVariant::shouldDeleteVariantDataWorksForAssociative()
void tst_QVariant::fromStdVariant()
{
+#define CHECK_EQUAL(lhs, rhs, type) do { \
+ QCOMPARE(lhs.typeId(), rhs.typeId()); \
+ if (lhs.isNull()) { \
+ QVERIFY(rhs.isNull()); \
+ } else { \
+ QVERIFY(!rhs.isNull()); \
+ QCOMPARE(get< type >(lhs), get< type >(rhs)); \
+ } \
+ } while (false)
+
{
typedef std::variant<int, bool> intorbool_t;
intorbool_t stdvar = 5;
QVariant qvar = QVariant::fromStdVariant(stdvar);
QVERIFY(!qvar.isNull());
- QCOMPARE(qvar.type(), QVariant::Int);
+ QCOMPARE(qvar.typeId(), QMetaType::Int);
QCOMPARE(qvar.value<int>(), std::get<int>(stdvar));
+ {
+ const auto qv2 = QVariant::fromStdVariant(std::move(stdvar));
+ CHECK_EQUAL(qv2, qvar, int);
+ }
+
stdvar = true;
qvar = QVariant::fromStdVariant(stdvar);
QVERIFY(!qvar.isNull());
- QCOMPARE(qvar.type(), QVariant::Bool);
+ QCOMPARE(qvar.typeId(), QMetaType::Bool);
QCOMPARE(qvar.value<bool>(), std::get<bool>(stdvar));
+ {
+ const auto qv2 = QVariant::fromStdVariant(std::move(stdvar));
+ CHECK_EQUAL(qv2, qvar, bool);
+ }
}
{
std::variant<std::monostate, int> stdvar;
QVariant qvar = QVariant::fromStdVariant(stdvar);
QVERIFY(!qvar.isValid());
+ {
+ const auto qv2 = QVariant::fromStdVariant(std::move(stdvar));
+ CHECK_EQUAL(qv2, qvar, int); // fake type, they're empty
+ }
stdvar = -4;
qvar = QVariant::fromStdVariant(stdvar);
QVERIFY(!qvar.isNull());
- QCOMPARE(qvar.type(), QVariant::Int);
+ QCOMPARE(qvar.typeId(), QMetaType::Int);
QCOMPARE(qvar.value<int>(), std::get<int>(stdvar));
+ {
+ const auto qv2 = QVariant::fromStdVariant(std::move(stdvar));
+ CHECK_EQUAL(qv2, qvar, int);
+ }
}
{
std::variant<int, bool, QChar> stdvar = QChar::fromLatin1(' ');
QVariant qvar = QVariant::fromStdVariant(stdvar);
QVERIFY(!qvar.isNull());
- QCOMPARE(qvar.type(), QVariant::Char);
+ QCOMPARE(qvar.typeId(), QMetaType::QChar);
QCOMPARE(qvar.value<QChar>(), std::get<QChar>(stdvar));
+ {
+ const auto qv2 = QVariant::fromStdVariant(std::move(stdvar));
+ CHECK_EQUAL(qv2, qvar, QChar);
+ }
}
+ // rvalue fromStdVariant() actually moves:
+ {
+ const auto foo = u"foo"_s;
+ std::variant<QString, QByteArray> stdvar = foo;
+ QVariant qvar = QVariant::fromStdVariant(std::move(stdvar));
+ const auto ps = get_if<QString>(&stdvar);
+ QVERIFY(ps);
+ QVERIFY(ps->isNull()); // QString was moved from
+ QVERIFY(!qvar.isNull());
+ QCOMPARE(qvar.typeId(), QMetaType::QString);
+ QCOMPARE(get<QString>(qvar), foo);
+ }
+
+#undef CHECK_EQUAL
}
void tst_QVariant::qt4UuidDataStream()
@@ -5061,6 +5776,48 @@ void tst_QVariant::mutableView()
QCOMPARE(extracted.text, nullptr);
}
+template<typename T>
+void tst_QVariant::canViewAndView_ReturnFalseAndDefault_WhenConvertingBetweenPointerAndValue_impl(
+ const QByteArray &typeName)
+{
+ T instance{};
+
+ // Value -> Pointer
+ QVariant value = QVariant::fromValue(instance);
+ QVERIFY2(!value.canView<T *>(), typeName);
+ QCOMPARE(value.view<T *>(), nullptr); // Expect default constructed pointer
+
+ // Pointer -> Value
+ QVariant pointer = QVariant::fromValue(&instance);
+ QVERIFY2(!pointer.canView<T>(), typeName);
+ QCOMPARE(pointer.view<T>(), T{}); // Expect default constructed. Note: Weak test since instance
+ // is default constructed, but we detect data corruption
+}
+
+void tst_QVariant::canViewAndView_ReturnFalseAndDefault_WhenConvertingBetweenPointerAndValue()
+{
+#define ADD_TEST_IMPL(typeName, typeNameId, realType) \
+ canViewAndView_ReturnFalseAndDefault_WhenConvertingBetweenPointerAndValue_impl<realType>( \
+ #typeName);
+
+ // Add tests for static primitive types
+ QT_FOR_EACH_STATIC_PRIMITIVE_NON_VOID_TYPE(ADD_TEST_IMPL)
+
+ // Add tests for static core types
+ QT_FOR_EACH_STATIC_CORE_CLASS(ADD_TEST_IMPL)
+#undef ADD_TEST_IMPL
+}
+
+struct MoveTester
+{
+ bool wasMoved = false;
+ MoveTester() = default;
+ MoveTester(const MoveTester &) {}; // non-trivial on purpose
+ MoveTester(MoveTester &&other) { other.wasMoved = true; }
+ MoveTester& operator=(const MoveTester &) = default;
+ MoveTester& operator=(MoveTester &&other) {other.wasMoved = true; return *this;}
+};
+
void tst_QVariant::moveOperations()
{
{
@@ -5082,6 +5839,30 @@ void tst_QVariant::moveOperations()
v = QVariant::fromValue(list);
v2 = std::move(v);
QVERIFY(v2.value<std::list<int>>() == list);
+
+ {
+ MoveTester tester;
+ QVariant::fromValue(tester);
+ QVERIFY(!tester.wasMoved);
+ QVariant::fromValue(std::move(tester));
+ QVERIFY(tester.wasMoved);
+ }
+ {
+ const MoveTester tester;
+ QVariant::fromValue(std::move(tester));
+ QVERIFY(!tester.wasMoved); // we don't want to move from const variables
+ }
+ {
+ QVariant var(std::in_place_type<MoveTester>);
+ const auto p = get_if<MoveTester>(&var);
+ QVERIFY(p);
+ auto &tester = *p;
+ QVERIFY(!tester.wasMoved);
+ [[maybe_unused]] auto copy = var.value<MoveTester>();
+ QVERIFY(!tester.wasMoved);
+ [[maybe_unused]] auto moved = std::move(var).value<MoveTester>();
+ QVERIFY(tester.wasMoved);
+ }
}
class NoMetaObject : public QObject {};
@@ -5130,5 +5911,423 @@ void tst_QVariant::equalsWithoutMetaObject()
QVERIFY(qobjectVariant != noMetaObjectVariant);
}
+struct NonDefaultConstructible
+{
+ NonDefaultConstructible(int i) :i(i) {}
+ int i;
+ friend bool operator==(NonDefaultConstructible l, NonDefaultConstructible r)
+ { return l.i == r.i; }
+};
+
+template <> char *QTest::toString<NonDefaultConstructible>(const NonDefaultConstructible &ndc)
+{
+ return qstrdup('{' + QByteArray::number(ndc.i) + '}');
+}
+
+struct Indestructible
+{
+ Indestructible() {}
+ Indestructible(const Indestructible &) {}
+ Indestructible &operator=(const Indestructible &) { return *this; }
+private:
+ ~Indestructible() {}
+};
+
+struct NotCopyable
+{
+ NotCopyable() = default;
+ NotCopyable(const NotCopyable&) = delete;
+ NotCopyable &operator=(const NotCopyable &) = delete;
+};
+
+void tst_QVariant::constructFromIncompatibleMetaType_data()
+{
+ QTest::addColumn<QMetaType>("type");
+ auto addRow = [](QMetaType meta) {
+ QTest::newRow(meta.name()) << meta;
+ };
+ addRow(QMetaType::fromType<void>());
+ addRow(QMetaType::fromType<NonDefaultConstructible>());
+ addRow(QMetaType::fromType<QObject>());
+ addRow(QMetaType::fromType<Indestructible>());
+ addRow(QMetaType::fromType<NotCopyable>());
+}
+
+void tst_QVariant::constructFromIncompatibleMetaType()
+{
+ QFETCH(QMetaType, type);
+ const auto anticipate = [type]() {
+ // In that case, we run into a different condition (size == 0), and do not warn
+ if (type == QMetaType::fromType<NonDefaultConstructible>()) {
+ QTest::ignoreMessage(QtWarningMsg,
+ "QVariant: Cannot create type 'NonDefaultConstructible' without a "
+ "default constructor");
+ } else if (type != QMetaType::fromType<void>()) {
+ QTest::ignoreMessage(
+ QtWarningMsg,
+ "QVariant: Provided metatype for '" + QByteArray(type.name()) +
+ "' does not support destruction and copy construction");
+ }
+ };
+ anticipate();
+ QVariant var(type, nullptr);
+ QVERIFY(!var.isValid());
+ QVERIFY(!var.metaType().isValid());
+
+ anticipate();
+ QVariant regular(1.0);
+ QVERIFY(!var.canView(type));
+ QVERIFY(!var.canConvert(type));
+ QVERIFY(!QVariant(regular).convert(type));
+}
+
+void tst_QVariant::constructFromQtLT65MetaType()
+{
+ auto qsizeIface = QtPrivate::qMetaTypeInterfaceForType<QSize>();
+
+ QtPrivate::QMetaTypeInterface qsize64Iface = {
+ /*revision*/0,
+ 8,
+ 8,
+ QMetaType::NeedsConstruction | QMetaType::NeedsDestruction,
+ 0,
+ qsizeIface->metaObjectFn,
+ "FakeQSize",
+ qsizeIface->defaultCtr,
+ qsizeIface->copyCtr,
+ qsizeIface->moveCtr,
+ /*dtor =*/ nullptr,
+ qsizeIface->equals,
+ qsizeIface->lessThan,
+ qsizeIface->debugStream,
+ qsizeIface->dataStreamOut,
+ qsizeIface->dataStreamIn,
+ /*legacyregop =*/ nullptr
+ };
+ QVariant var{ QMetaType(&qsize64Iface) };
+ QVERIFY(var.isValid());
+}
+
+void tst_QVariant::copyNonDefaultConstructible()
+{
+ NonDefaultConstructible ndc(42);
+ QVariant var = QVariant::fromValue(ndc);
+ QVERIFY(var.isDetached());
+ QCOMPARE(var.metaType(), QMetaType::fromType<NonDefaultConstructible>());
+ QVERIFY(var.constData() != &ndc);
+
+ // qvariant_cast<T> and QVariant::value<T> don't compile
+ QCOMPARE(get<NonDefaultConstructible>(std::as_const(var)), ndc);
+
+ QVariant var2 = var;
+ var2.detach(); // force another copy
+ QVERIFY(var2.isDetached());
+ QVERIFY(var2.constData() != var.constData());
+ QCOMPARE(get<NonDefaultConstructible>(std::as_const(var2)),
+ get<NonDefaultConstructible>(std::as_const(var)));
+ QCOMPARE(var2, var);
+}
+
+void tst_QVariant::inplaceConstruct()
+{
+ {
+ NonDefaultConstructible ndc(42);
+ QVariant var(std::in_place_type<NonDefaultConstructible>, 42);
+ QVERIFY(get_if<NonDefaultConstructible>(&var));
+ QCOMPARE(get<NonDefaultConstructible>(var), ndc);
+ }
+
+ {
+ std::vector<int> vec {1, 2, 3, 4};
+ QVariant var(std::in_place_type<std::vector<int>>, {1, 2, 3, 4});
+ QVERIFY(get_if<std::vector<int>>(&var));
+ QCOMPARE(get<std::vector<int>>(var), vec);
+ }
+}
+
+struct LargerThanInternalQVariantStorage {
+ char data[6 * sizeof(void *)];
+};
+
+struct alignas(256) LargerThanInternalQVariantStorageOveraligned {
+ char data[6 * sizeof(void *)];
+};
+
+struct alignas(128) SmallerAlignmentEvenLargerSize {
+ char data[17 * sizeof(void *)];
+};
+
+void tst_QVariant::emplace()
+{
+ {
+ // can emplace non default constructible + can emplace on null variant
+ NonDefaultConstructible ndc(42);
+ QVariant var;
+ var.emplace<NonDefaultConstructible>(42);
+ QVERIFY(get_if<NonDefaultConstructible>(&var));
+ QCOMPARE(get<NonDefaultConstructible>(var), ndc);
+ }
+ {
+ // can emplace using ctor taking initializer_list
+ QVariant var;
+ var.emplace<std::vector<int>>({0, 1, 2, 3, 4});
+ auto vecPtr = get_if<std::vector<int>>(&var);
+ QVERIFY(vecPtr);
+ QCOMPARE(vecPtr->size(), 5U);
+ for (int i = 0; i < 5; ++i)
+ QCOMPARE(vecPtr->at(size_t(i)), i);
+ }
+ // prequisites for the test
+ QCOMPARE_LE(sizeof(std::vector<int>), sizeof(std::string));
+ QCOMPARE(alignof(std::vector<int>), alignof(std::string));
+ {
+ // emplace can reuse storage
+ auto var = QVariant::fromValue(std::string{});
+ QVERIFY(var.data_ptr().is_shared);
+ auto data = var.constData();
+ std::vector<int> &vec = var.emplace<std::vector<int>>(3, 42);
+ /* alignment is the same, so the pointer is exactly the same;
+ no offset change */
+ auto expected = std::vector<int>{42, 42, 42};
+ QCOMPARE(get_if<std::vector<int>>(&var), &vec);
+ QCOMPARE(get<std::vector<int>>(var), expected);
+ QCOMPARE(var.constData(), data);
+ }
+ {
+ // emplace can't reuse storage if the variant is shared
+ auto var = QVariant::fromValue(std::string{});
+ [[maybe_unused]] QVariant causesSharing = var;
+ QVERIFY(var.data_ptr().is_shared);
+ auto data = var.constData();
+ var.emplace<std::vector<int>>(3, 42);
+ auto expected = std::vector<int>{42, 42, 42};
+ QVERIFY(get_if<std::vector<int>>(&var));
+ QCOMPARE(get<std::vector<int>>(var), expected);
+ QCOMPARE_NE(var.constData(), data);
+ }
+ {
+ // emplace puts element into the correct place - non-shared
+ QVERIFY(QVariant::Private::canUseInternalSpace(QMetaType::fromType<QString>().iface()));
+ QVariant var;
+ var.emplace<QString>(QChar('x'));
+ QVERIFY(!var.data_ptr().is_shared);
+ }
+ {
+ // emplace puts element into the correct place - shared
+ QVERIFY(!QVariant::Private::canUseInternalSpace(QMetaType::fromType<std::string>().iface()));
+ QVariant var;
+ var.emplace<std::string>(42, 'x');
+ QVERIFY(var.data_ptr().is_shared);
+ }
+ {
+ // emplace does not reuse the storage if alignment is too large
+ auto iface = QMetaType::fromType<LargerThanInternalQVariantStorage>().iface();
+ QVERIFY(!QVariant::Private::canUseInternalSpace(iface));
+ auto var = QVariant::fromValue(LargerThanInternalQVariantStorage{});
+ auto data = var.constData();
+ var.emplace<LargerThanInternalQVariantStorageOveraligned>();
+ QCOMPARE_NE(var.constData(), data);
+ }
+ {
+ // emplace does reuse the storage if new alignment and size are together small enough
+ auto iface = QMetaType::fromType<LargerThanInternalQVariantStorageOveraligned>().iface();
+ QVERIFY(!QVariant::Private::canUseInternalSpace(iface));
+ auto var = QVariant::fromValue(LargerThanInternalQVariantStorageOveraligned{});
+ auto data = var.constData();
+ var.emplace<SmallerAlignmentEvenLargerSize>();
+ // no exact match below - the alignment is after all different
+ QCOMPARE_LE(quintptr(var.constData()), quintptr(data));
+ QCOMPARE_LE(quintptr(var.constData()),
+ quintptr(data) + sizeof(LargerThanInternalQVariantStorageOveraligned));
+ }
+}
+
+void tst_QVariant::getIf_NonDefaultConstructible()
+{
+ getIf_impl(NonDefaultConstructible{42});
+}
+
+void tst_QVariant::getIfSpecial()
+{
+ QVariant v{QString{}}; // used to be a null QVariant in Qt 5
+ QCOMPARE_NE(get_if<QString>(&v), nullptr); // not anymore...
+}
+
+void tst_QVariant::get_NonDefaultConstructible()
+{
+ get_impl(NonDefaultConstructible{42});
+}
+
+template <typename T>
+T mutate(const T &t) { return t + t; }
+template <>
+NonDefaultConstructible mutate(const NonDefaultConstructible &t)
+{
+ return NonDefaultConstructible{t.i + t.i};
+}
+
+template <typename T>
+QVariant make_null_QVariant_of_type()
+{
+ return QVariant(QMetaType::fromType<T>());
+}
+
+template <typename T>
+void tst_QVariant::getIf_impl(T t) const
+{
+ QVariant v = QVariant::fromValue(t);
+
+ QVariant null;
+ QVERIFY(null.isNull());
+
+ [[maybe_unused]]
+ QVariant nulT;
+ if constexpr (std::is_default_constructible_v<T>) {
+ // typed null QVariants don't work with non-default-constuctable types
+ nulT = make_null_QVariant_of_type<T>();
+ QVERIFY(nulT.isNull());
+ }
+
+ QVariant date = QDate(2023, 3, 3);
+ static_assert(!std::is_same_v<T, QDate>);
+
+ // for behavioral comparison:
+ StdVariant stdn = {}, stdv = t;
+
+ // returns nullptr on type mismatch:
+ {
+ // const
+ QCOMPARE_EQ(get_if<T>(&std::as_const(stdn)), nullptr);
+ QCOMPARE_EQ(get_if<T>(&std::as_const(date)), nullptr);
+ // mutable
+ QCOMPARE_EQ(get_if<T>(&stdn), nullptr);
+ QCOMPARE_EQ(get_if<T>(&date), nullptr);
+ }
+
+ // returns nullptr on null variant (QVariant only):
+ {
+ QCOMPARE_EQ(get_if<T>(&std::as_const(null)), nullptr);
+ QCOMPARE_EQ(get_if<T>(&null), nullptr);
+ if constexpr (std::is_default_constructible_v<T>) {
+ // const access return nullptr
+ QCOMPARE_EQ(get_if<T>(&std::as_const(nulT)), nullptr);
+ // but mutable access makes typed null QVariants non-null (like data())
+ QCOMPARE_NE(get_if<T>(&nulT), nullptr);
+ QVERIFY(!nulT.isNull());
+ nulT = make_null_QVariant_of_type<T>(); // reset to null state
+ }
+ }
+
+ // const access:
+ {
+ auto ps = get_if<T>(&std::as_const(stdv));
+ static_assert(std::is_same_v<decltype(ps), const T*>);
+ QCOMPARE_NE(ps, nullptr);
+ QCOMPARE_EQ(*ps, t);
+
+ auto pv = get_if<T>(&std::as_const(v));
+ static_assert(std::is_same_v<decltype(ps), const T*>);
+ QCOMPARE_NE(pv, nullptr);
+ QCOMPARE_EQ(*pv, t);
+ }
+
+ // mutable access:
+ {
+ T t2 = mutate(t);
+
+ auto ps = get_if<T>(&stdv);
+ static_assert(std::is_same_v<decltype(ps), T*>);
+ QCOMPARE_NE(ps, nullptr);
+ QCOMPARE_EQ(*ps, t);
+ *ps = t2;
+ auto ps2 = get_if<T>(&stdv);
+ QCOMPARE_NE(ps2, nullptr);
+ QCOMPARE_EQ(*ps2, t2);
+
+ auto pv = get_if<T>(&v);
+ static_assert(std::is_same_v<decltype(pv), T*>);
+ QCOMPARE_NE(pv, nullptr);
+ QCOMPARE_EQ(*pv, t);
+ *pv = t2;
+ auto pv2 = get_if<T>(&v);
+ QCOMPARE_NE(pv2, nullptr);
+ QCOMPARE_EQ(*pv2, t2);
+
+ // typed null QVariants become non-null (data() behavior):
+ if constexpr (std::is_default_constructible_v<T>) {
+ QVERIFY(nulT.isNull());
+ auto pn = get_if<T>(&nulT);
+ QVERIFY(!nulT.isNull());
+ static_assert(std::is_same_v<decltype(pn), T*>);
+ QCOMPARE_NE(pn, nullptr);
+ QCOMPARE_EQ(*pn, T{});
+ *pn = t2;
+ auto pn2 = get_if<T>(&nulT);
+ QCOMPARE_NE(pn2, nullptr);
+ QCOMPARE_EQ(*pn2, t2);
+ }
+ }
+}
+
+template <typename T>
+void tst_QVariant::get_impl(T t) const
+{
+ QVariant v = QVariant::fromValue(t);
+
+ // for behavioral comparison:
+ StdVariant stdv = t;
+
+ #define FOR_EACH_CVREF(op) \
+ op(/*unadorned*/, &&) \
+ op(&, &) \
+ op(&&, &&) \
+ op(const, const &&) \
+ op(const &, const &) \
+ op(const &&, const &&) \
+ /* end */
+
+
+ #define CHECK_RETURN_TYPE_OF(Variant, cvref_in, cvref_out) \
+ static_assert(std::is_same_v< \
+ decltype(get<T>(std::declval<Variant cvref_in >())), \
+ T cvref_out \
+ >); \
+ /* end */
+ #define CHECK_RETURN_TYPE(cvref_in, cvref_out) \
+ CHECK_RETURN_TYPE_OF(StdVariant, cvref_in, cvref_out) \
+ CHECK_RETURN_TYPE_OF(QVariant, cvref_in, cvref_out) \
+ /* end */
+ FOR_EACH_CVREF(CHECK_RETURN_TYPE)
+ #undef CHECK_RETURN_TYPE
+
+ #undef FOR_EACH_CVREF
+
+ // const access:
+ {
+ auto &&rs = get<T>(std::as_const(stdv));
+ QCOMPARE_EQ(rs, t);
+
+ auto &&rv = get<T>(std::as_const(v));
+ QCOMPARE_EQ(rv, t);
+ }
+
+ // mutable access:
+ {
+ T t2 = mutate(t);
+
+ auto &&rs = get<T>(stdv);
+ QCOMPARE_EQ(rs, t);
+ rs = t2;
+ auto &&rs2 = get<T>(stdv);
+ QCOMPARE_EQ(rs2, t2);
+
+ auto &&rv = get<T>(v);
+ QCOMPARE_EQ(rv, t);
+ rv = t2;
+ auto &&rv2 = get<T>(v);
+ QCOMPARE_EQ(rv2, t2);
+ }
+}
+
QTEST_MAIN(tst_QVariant)
#include "tst_qvariant.moc"
diff --git a/tests/auto/corelib/kernel/qwineventnotifier/CMakeLists.txt b/tests/auto/corelib/kernel/qwineventnotifier/CMakeLists.txt
index b9bcb36771..81b2c9a58c 100644
--- a/tests/auto/corelib/kernel/qwineventnotifier/CMakeLists.txt
+++ b/tests/auto/corelib/kernel/qwineventnotifier/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qwineventnotifier.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qwineventnotifier Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwineventnotifier LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qwineventnotifier
SOURCES
tst_qwineventnotifier.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/kernel/qwineventnotifier/tst_qwineventnotifier.cpp b/tests/auto/corelib/kernel/qwineventnotifier/tst_qwineventnotifier.cpp
index be1f2259e5..bf08f85fb5 100644
--- a/tests/auto/corelib/kernel/qwineventnotifier/tst_qwineventnotifier.cpp
+++ b/tests/auto/corelib/kernel/qwineventnotifier/tst_qwineventnotifier.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 <QTest>
#include <QTestEventLoop>
diff --git a/tests/auto/corelib/kernel/qwinregistrykey/.gitignore b/tests/auto/corelib/kernel/qwinregistrykey/.gitignore
new file mode 100644
index 0000000000..3d888e2868
--- /dev/null
+++ b/tests/auto/corelib/kernel/qwinregistrykey/.gitignore
@@ -0,0 +1 @@
+tst_qwinregistrykey
diff --git a/tests/auto/corelib/kernel/qwinregistrykey/CMakeLists.txt b/tests/auto/corelib/kernel/qwinregistrykey/CMakeLists.txt
new file mode 100644
index 0000000000..aeda6f0033
--- /dev/null
+++ b/tests/auto/corelib/kernel/qwinregistrykey/CMakeLists.txt
@@ -0,0 +1,15 @@
+# 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_qwinregistrykey LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qwinregistrykey
+ SOURCES
+ tst_qwinregistrykey.cpp
+ LIBRARIES
+ Qt::CorePrivate
+)
diff --git a/tests/auto/corelib/kernel/qwinregistrykey/tst_qwinregistrykey.cpp b/tests/auto/corelib/kernel/qwinregistrykey/tst_qwinregistrykey.cpp
new file mode 100644
index 0000000000..a5dca8a3d5
--- /dev/null
+++ b/tests/auto/corelib/kernel/qwinregistrykey/tst_qwinregistrykey.cpp
@@ -0,0 +1,242 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QObject>
+#include <QPair>
+#include <QScopeGuard>
+#include <private/qwinregistry_p.h>
+#include <qt_windows.h>
+
+using namespace Qt::StringLiterals;
+
+static constexpr const wchar_t TEST_KEY[] = LR"(SOFTWARE\tst_qwinregistrykey)";
+
+static const QPair<QStringView, QString> TEST_STRING = qMakePair(u"string", u"string"_s);
+static const QPair<QStringView, QString> TEST_STRING_NULL = qMakePair(u"string_null", QString());
+static const QPair<QStringView, QStringList> TEST_STRINGLIST = qMakePair(u"stringlist", QStringList{ u"element1"_s, u"element2"_s, u"element3"_s });
+static const QPair<QStringView, QStringList> TEST_STRINGLIST_NULL = qMakePair(u"stringlist_null", QStringList());
+static const QPair<QStringView, quint32> TEST_DWORD = qMakePair(u"dword", 123);
+static const QPair<QStringView, quint64> TEST_QWORD = qMakePair(u"qword", 456);
+static const QPair<QStringView, QByteArray> TEST_BINARY = qMakePair(u"binary", "binary\0"_ba);
+static const QPair<QStringView, QVariant> TEST_NOT_EXIST = qMakePair(u"not_exist", QVariant());
+static const QPair<QStringView, QVariant> TEST_DEFAULT = qMakePair(u"", u"default"_s);
+
+[[nodiscard]] static inline bool write(const HKEY key, const QStringView name, const QVariant &value)
+{
+ DWORD type = REG_NONE;
+ QByteArray buf = {};
+
+ switch (value.typeId()) {
+ case QMetaType::QStringList: {
+ // If none of the elements contains '\0', we can use REG_MULTI_SZ, the
+ // native registry string list type. Otherwise we use REG_BINARY.
+ type = REG_MULTI_SZ;
+ const QStringList list = value.toStringList();
+ for (auto it = list.constBegin(); it != list.constEnd(); ++it) {
+ if ((*it).length() == 0 || it->contains(QChar::Null)) {
+ type = REG_BINARY;
+ break;
+ }
+ }
+
+ if (type == REG_BINARY) {
+ const QString str = value.toString();
+ buf = QByteArray(reinterpret_cast<const char *>(str.data()), str.length() * 2);
+ } else {
+ for (auto it = list.constBegin(); it != list.constEnd(); ++it) {
+ const QString &str = *it;
+ buf += QByteArray(reinterpret_cast<const char *>(str.utf16()), (str.length() + 1) * 2);
+ }
+ // According to Microsoft Docs, REG_MULTI_SZ requires double '\0'.
+ buf.append((char)0);
+ buf.append((char)0);
+ }
+ break;
+ }
+
+ case QMetaType::Int:
+ case QMetaType::UInt: {
+ type = REG_DWORD;
+ quint32 num = value.toUInt();
+ buf = QByteArray(reinterpret_cast<const char *>(&num), sizeof(quint32));
+ break;
+ }
+
+ case QMetaType::LongLong:
+ case QMetaType::ULongLong: {
+ type = REG_QWORD;
+ quint64 num = value.toULongLong();
+ buf = QByteArray(reinterpret_cast<const char *>(&num), sizeof(quint64));
+ break;
+ }
+
+ case QMetaType::QByteArray:
+ default: {
+ // If the string does not contain '\0', we can use REG_SZ, the native registry
+ // string type. Otherwise we use REG_BINARY.
+ const QString str = value.toString();
+ type = str.contains(QChar::Null) ? REG_BINARY : REG_SZ;
+ int length = str.length();
+ if (type == REG_SZ)
+ ++length;
+ buf = QByteArray(reinterpret_cast<const char *>(str.utf16()), sizeof(wchar_t) * length);
+ break;
+ }
+ }
+
+ const LONG ret = RegSetValueExW(key, reinterpret_cast<const wchar_t *>(name.utf16()),
+ 0, type, reinterpret_cast<LPBYTE>(buf.data()), buf.size());
+ return ret == ERROR_SUCCESS;
+}
+
+class tst_qwinregistrykey : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void initTestCase();
+ void cleanupTestCase();
+ void qwinregistrykey();
+
+private:
+ bool m_available = false;
+};
+
+void tst_qwinregistrykey::initTestCase()
+{
+ HKEY key = nullptr;
+ const LONG ret = RegCreateKeyExW(HKEY_CURRENT_USER, TEST_KEY, 0, nullptr, 0,
+ KEY_READ | KEY_WRITE, nullptr, &key, nullptr);
+ if (ret != ERROR_SUCCESS)
+ return;
+ const auto cleanup = qScopeGuard([key](){ RegCloseKey(key); });
+ if (!write(key, TEST_STRING.first, TEST_STRING.second))
+ return;
+ if (!write(key, TEST_STRING_NULL.first, TEST_STRING_NULL.second))
+ return;
+ if (!write(key, TEST_STRINGLIST.first, TEST_STRINGLIST.second))
+ return;
+ if (!write(key, TEST_STRINGLIST_NULL.first, TEST_STRINGLIST_NULL.second))
+ return;
+ if (!write(key, TEST_DWORD.first, TEST_DWORD.second))
+ return;
+ if (!write(key, TEST_QWORD.first, TEST_QWORD.second))
+ return;
+ if (!write(key, TEST_BINARY.first, TEST_BINARY.second))
+ return;
+ if (!write(key, TEST_DEFAULT.first, TEST_DEFAULT.second))
+ return;
+ m_available = true;
+}
+
+void tst_qwinregistrykey::cleanupTestCase()
+{
+ HKEY key = nullptr;
+ const LONG ret = RegOpenKeyExW(HKEY_CURRENT_USER, TEST_KEY, 0, KEY_READ | KEY_WRITE, &key);
+ if (ret != ERROR_SUCCESS)
+ return;
+ #define C_STR(View) reinterpret_cast<const wchar_t *>(View.utf16())
+ RegDeleteValueW(key, C_STR(TEST_STRING.first));
+ RegDeleteValueW(key, C_STR(TEST_STRING_NULL.first));
+ RegDeleteValueW(key, C_STR(TEST_STRINGLIST.first));
+ RegDeleteValueW(key, C_STR(TEST_STRINGLIST_NULL.first));
+ RegDeleteValueW(key, C_STR(TEST_DWORD.first));
+ RegDeleteValueW(key, C_STR(TEST_QWORD.first));
+ RegDeleteValueW(key, C_STR(TEST_BINARY.first));
+ RegDeleteValueW(key, C_STR(TEST_DEFAULT.first));
+ #undef C_STR
+ RegDeleteKeyW(HKEY_CURRENT_USER, TEST_KEY);
+ RegCloseKey(key);
+}
+
+void tst_qwinregistrykey::qwinregistrykey()
+{
+ if (!m_available)
+ QSKIP("The test data is not ready.");
+
+ QWinRegistryKey registry(HKEY_CURRENT_USER, TEST_KEY);
+
+ QVERIFY(registry.isValid());
+
+ QVERIFY(registry.handle() != nullptr);
+
+ {
+ const auto value = registry.value<QString>(TEST_STRING.first);
+ QVERIFY(value.has_value());
+ QCOMPARE(value.value_or(QString()), TEST_STRING.second);
+ }
+
+ {
+ const auto value = registry.value<QString>(TEST_STRING_NULL.first);
+ QVERIFY(value.has_value());
+ QCOMPARE(value.value_or(QString()), TEST_STRING_NULL.second);
+
+ }
+
+ {
+ const auto value = registry.value<QStringList>(TEST_STRINGLIST.first);
+ QVERIFY(value.has_value());
+ QCOMPARE(value.value_or(QStringList()), TEST_STRINGLIST.second);
+ }
+
+ {
+ const auto value = registry.value<QStringList>(TEST_STRINGLIST_NULL.first);
+ QVERIFY(value.has_value());
+ QCOMPARE(value.value_or(QStringList()), TEST_STRINGLIST_NULL.second);
+ }
+
+ {
+ const auto value = registry.value<quint32>(TEST_DWORD.first);
+ QVERIFY(value.has_value());
+ QCOMPARE(value.value_or(0), TEST_DWORD.second);
+ }
+
+ {
+ const auto value = registry.value<quint64>(TEST_QWORD.first);
+ QVERIFY(value.has_value());
+ QCOMPARE(value.value_or(0), TEST_QWORD.second);
+ }
+
+ {
+ const auto value = registry.value<QByteArray>(TEST_BINARY.first);
+ QVERIFY(value.has_value());
+ QCOMPARE(value.value_or(QByteArray()), TEST_BINARY.second);
+ }
+
+ {
+ const auto value = registry.value<QVariant>(TEST_NOT_EXIST.first);
+ QVERIFY(!value.has_value());
+ QCOMPARE(value.value_or(QVariant()), QVariant());
+ }
+
+ {
+ const auto value = registry.value<QString>(TEST_DEFAULT.first);
+ QVERIFY(value.has_value());
+ QCOMPARE(value.value_or(QString()), TEST_DEFAULT.second);
+ }
+
+ {
+ const QString value = registry.stringValue(TEST_STRING.first);
+ QVERIFY(!value.isEmpty());
+ QCOMPARE(value, TEST_STRING.second);
+ }
+
+ QVERIFY(registry.stringValue(TEST_NOT_EXIST.first).isEmpty());
+
+ {
+ const auto value = registry.dwordValue(TEST_DWORD.first);
+ QVERIFY(value.second);
+ QCOMPARE(value.first, TEST_DWORD.second);
+ }
+
+ {
+ const auto value = registry.dwordValue(TEST_NOT_EXIST.first);
+ QVERIFY(!value.second);
+ QCOMPARE(value.first, DWORD(0));
+ }
+}
+
+QTEST_MAIN(tst_qwinregistrykey)
+
+#include "tst_qwinregistrykey.moc"
diff --git a/tests/auto/corelib/mimetypes/CMakeLists.txt b/tests/auto/corelib/mimetypes/CMakeLists.txt
index 00c7dd7df2..e8c842a410 100644
--- a/tests/auto/corelib/mimetypes/CMakeLists.txt
+++ b/tests/auto/corelib/mimetypes/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from mimetypes.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(QT_FEATURE_private_tests)
add_subdirectory(qmimetype)
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/CMakeLists.txt b/tests/auto/corelib/mimetypes/qmimedatabase/CMakeLists.txt
index 14086efd59..26aab786c2 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/CMakeLists.txt
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qmimedatabase.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(TARGET Qt::Concurrent)
add_subdirectory(qmimedatabase-xml)
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/add-extension.xml b/tests/auto/corelib/mimetypes/qmimedatabase/add-extension.xml
new file mode 100644
index 0000000000..c4141e0f70
--- /dev/null
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/add-extension.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
+ <mime-type type="image/jpeg">
+ <glob pattern="*.jnewext"/>
+ <comment>JPEG Image</comment>
+ </mime-type>
+</mime-info>
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/circular-inheritance.xml b/tests/auto/corelib/mimetypes/qmimedatabase/circular-inheritance.xml
new file mode 100644
index 0000000000..466f039803
--- /dev/null
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/circular-inheritance.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
+ <mime-type type="application/ecmascript">
+ <comment>It's more accurate to say that ECMAScript is a subset of JavaScript</comment>
+ <sub-class-of type="text/javascript"/>
+ <glob pattern="*.js"/>
+ </mime-type>
+ <mime-type type="text/javascript">
+ <comment>than to say that JavaScript is a subset of ECMAScript</comment>
+ <sub-class-of type="application/ecmascript"/>
+ <glob pattern="*.js"/>
+ </mime-type>
+</mime-info>
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt
index 2d7844493f..a267640a50 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qmimedatabase-cache.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_qmimedatabase LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -12,18 +19,19 @@ qt_internal_add_test(tst_qmimedatabase-cache
SOURCES
../tst_qmimedatabase.h
tst_qmimedatabase-cache.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
+ Qt::CorePrivate
Qt::Concurrent
)
# Resources:
-# special case begin
# the freedesktop resources are handled manually below via mimetypes_resources.cmake
#set(mimetypes_resource_files
#"mime/packages/freedesktop.org.xml"
#)
-# special case end
set(testdata_resource_files
+ "../add-extension.xml"
+ "../circular-inheritance.xml"
"../invalid-magic1.xml"
"../invalid-magic2.xml"
"../invalid-magic3.xml"
@@ -33,6 +41,8 @@ set(testdata_resource_files
"../qml-again.xml"
"../test.qml"
"../text-x-objcsrc.xml"
+ "../text-plain-subclass.xml"
+ "../webm-glob-deleteall.xml"
"../yast2-metapackage-handler-mimetypes.xml"
)
@@ -45,14 +55,17 @@ qt_internal_add_resource(tst_qmimedatabase-cache "testdata"
${testdata_resource_files}
)
-# special case begin
+qt_internal_add_resource(tst_qmimedatabase-cache "testfiles"
+ PREFIX
+ "/files"
+ FILES
+ "../test.txt"
+ "../test.qml"
+)
+
set(corelib_source_dir ../../../../../../src/corelib)
include(${corelib_source_dir}/mimetypes/mimetypes_resources.cmake)
corelib_add_mimetypes_resources(tst_qmimedatabase-cache)
-# special case end
-
-#### Keys ignored in scope 1:.:.:qmimedatabase-cache.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
## Scopes:
#####################################################################
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/tst_qmimedatabase-cache.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/tst_qmimedatabase-cache.cpp
index 1637f644be..e923cc1d50 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/tst_qmimedatabase-cache.cpp
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/tst_qmimedatabase-cache.cpp
@@ -1,36 +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$
-**
-****************************************************************************/
-
-#include "../tst_qmimedatabase.h"
-#include <QDir>
-#include <QFile>
-#include <QTest>
-#include <qstandardpaths.h>
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../tst_qmimedatabase.cpp"
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt
index 47e9a2f1d7..729ac3933a 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qmimedatabase-xml.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_qmimedatabase LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -12,18 +19,19 @@ qt_internal_add_test(tst_qmimedatabase-xml
SOURCES
../tst_qmimedatabase.h
tst_qmimedatabase-xml.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
+ Qt::CorePrivate
)
# Resources:
-# special case begin
# the freedesktop resources are handled manually below via mimetypes_resources.cmake
#set(mimetypes_resource_files
#"mime/packages/freedesktop.org.xml"
#)
-# special case end
set(testdata_resource_files
+ "../add-extension.xml"
+ "../circular-inheritance.xml"
"../invalid-magic1.xml"
"../invalid-magic2.xml"
"../invalid-magic3.xml"
@@ -33,6 +41,8 @@ set(testdata_resource_files
"../qml-again.xml"
"../test.qml"
"../text-x-objcsrc.xml"
+ "../text-plain-subclass.xml"
+ "../webm-glob-deleteall.xml"
"../yast2-metapackage-handler-mimetypes.xml"
)
@@ -45,14 +55,17 @@ qt_internal_add_resource(tst_qmimedatabase-xml "testdata"
${testdata_resource_files}
)
-# special case begin
+qt_internal_add_resource(tst_qmimedatabase-xml "testfiles"
+ PREFIX
+ "/files"
+ FILES
+ "../test.txt"
+ "../test.qml"
+)
+
set(corelib_source_dir ../../../../../../src/corelib)
include(${corelib_source_dir}/mimetypes/mimetypes_resources.cmake)
corelib_add_mimetypes_resources(tst_qmimedatabase-xml)
-# special case end
-
-#### Keys ignored in scope 1:.:.:qmimedatabase-xml.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
## Scopes:
#####################################################################
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/tst_qmimedatabase-xml.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/tst_qmimedatabase-xml.cpp
index e403baf714..f86c8b8839 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/tst_qmimedatabase-xml.cpp
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/tst_qmimedatabase-xml.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** 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 "../tst_qmimedatabase.h"
+#include "../tst_qmimedatabase.cpp"
void tst_QMimeDatabase::initTestCaseInternal()
{
qputenv("QT_NO_MIME_CACHE", "1");
}
-#include "../tst_qmimedatabase.cpp"
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/test.qml b/tests/auto/corelib/mimetypes/qmimedatabase/test.qml
index 8b7437d2e6..79a6d01a1e 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/test.qml
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/test.qml
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 David Faure <faure@kde.org>
-** 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) 2012 David Faure <faure@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
import QtQuick 1.1
Item {
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/test.txt b/tests/auto/corelib/mimetypes/qmimedatabase/test.txt
new file mode 100644
index 0000000000..79a6d01a1e
--- /dev/null
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/test.txt
@@ -0,0 +1,6 @@
+// Copyright (C) 2012 David Faure <faure@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick 1.1
+Item {
+}
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/text-plain-subclass.xml b/tests/auto/corelib/mimetypes/qmimedatabase/text-plain-subclass.xml
new file mode 100644
index 0000000000..7b5cb7506d
--- /dev/null
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/text-plain-subclass.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
+ <mime-type type="text/x-microdvd">
+ <comment>MicroDVD subtitles</comment>
+ <sub-class-of type="text/plain"/>
+ <magic priority="50">
+ <match type="string" value="{1}" offset="0"/>
+ <match type="string" value="{0}" offset="0"/>
+ <match type="string" value="}{" offset="0:6"/>
+ </magic>
+ <generic-icon name="text-x-generic"/>
+ <glob pattern="*.sub"/>
+ <glob pattern="*.txt"/>
+ </mime-type>
+</mime-info>
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
index e25dea9655..9c7f5fa820 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
@@ -1,36 +1,14 @@
-/****************************************************************************
-**
-** 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 "tst_qmimedatabase.h"
#include <qmimedatabase.h>
#include "qstandardpaths.h"
#ifdef Q_OS_UNIX
+#include <dirent.h>
+#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#endif
@@ -38,10 +16,12 @@
#include <QtCore/QElapsedTimer>
#include <QtCore/QFile>
#include <QtCore/QFileInfo>
+#include <QtCore/qspan.h>
#include <QtCore/QStandardPaths>
#include <QtCore/QTemporaryDir>
#include <QtCore/QTextStream>
#include <QtConcurrent/QtConcurrentRun>
+#include <QtCore/private/qduplicatetracker_p.h>
#include <QTest>
#include <QBuffer>
@@ -50,18 +30,30 @@
#include <QProcess>
#endif
-static const char *const additionalMimeFiles[] = {
+using namespace Qt::StringLiterals;
+
+static const std::array additionalGlobalMimeFiles = {
+ "yast2-metapackage-handler-mimetypes.xml",
+ "qml-again.xml",
+ "magic-and-hierarchy.xml",
+};
+
+static const std::array additionalLocalMimeFiles = {
+ "add-extension.xml", // adds *.jnewext to image/jpeg
"yast2-metapackage-handler-mimetypes.xml",
"qml-again.xml",
"text-x-objcsrc.xml",
+ "text-plain-subclass.xml",
"invalid-magic1.xml",
"invalid-magic2.xml",
"invalid-magic3.xml",
"magic-and-hierarchy.xml",
- 0
+ "circular-inheritance.xml",
+ "webm-glob-deleteall.xml",
};
-#define RESOURCE_PREFIX ":/qt-project.org/qmime/"
+static const auto s_resourcePrefix = ":/qt-project.org/qmime/"_L1;
+static const auto s_inodeMimetype = "inode/directory"_L1;
void initializeLang()
{
@@ -78,12 +70,12 @@ static inline QString testSuiteWarning()
str << "\nCannot find the shared-mime-info test suite\nin the parent of: "
<< QDir::toNativeSeparators(QDir::currentPath()) << "\n"
"cd " << QDir::toNativeSeparators(QStringLiteral("tests/auto/corelib/mimetypes/qmimedatabase")) << "\n"
- "wget https://gitlab.freedesktop.org/xdg/shared-mime-info/-/archive/2.1/shared-mime-info-2.1.zip\n"
- "unzip shared-mime-info-2.1.zip\n";
+ "wget https://gitlab.freedesktop.org/xdg/shared-mime-info/-/archive/2.2/shared-mime-info-2.2.zip\n"
+ "unzip shared-mime-info-2.2.zip\n";
#ifdef Q_OS_WIN
- str << "mkdir testfiles\nxcopy /s shared-mime-info-2.1 s-m-i\n";
+ str << "mkdir testfiles\nxcopy /s shared-mime-info-2.2 s-m-i\n";
#else
- str << "ln -s shared-mime-info-2.1 s-m-i\n";
+ str << "ln -s shared-mime-info-2.2 s-m-i\n";
#endif
return result;
}
@@ -138,7 +130,6 @@ void tst_QMimeDatabase::initTestCase()
if (QDir(m_localMimeDir).exists()) {
QVERIFY2(QDir(m_localMimeDir).removeRecursively(), qPrintable(m_localMimeDir + ": " + qt_error_string()));
}
- QString errorMessage;
#ifdef USE_XDG_DATA_DIRS
// Create a temporary "global" XDG data dir for later use
@@ -154,8 +145,9 @@ void tst_QMimeDatabase::initTestCase()
qDebug() << "\nGlobal XDG_DATA_DIRS: " << m_globalXdgDir;
const QString freeDesktopXml = QStringLiteral("freedesktop.org.xml");
- const QString xmlFileName = QLatin1String(RESOURCE_PREFIX "packages/") + freeDesktopXml;
+ const QString xmlFileName = s_resourcePrefix + "packages/"_L1 + freeDesktopXml;
const QString xmlTargetFileName = globalPackageDir + QLatin1Char('/') + freeDesktopXml;
+ QString errorMessage;
QVERIFY2(copyResourceFile(xmlFileName, xmlTargetFileName, &errorMessage), qPrintable(errorMessage));
#endif
@@ -163,14 +155,6 @@ void tst_QMimeDatabase::initTestCase()
if (m_testSuite.isEmpty())
qWarning("%s", qPrintable(testSuiteWarning()));
- errorMessage = QString::fromLatin1("Cannot find '%1'");
- for (uint i = 0; i < sizeof additionalMimeFiles / sizeof additionalMimeFiles[0] - 1; i++) {
- const QString resourceFilePath = QString::fromLatin1(RESOURCE_PREFIX) + QLatin1String(additionalMimeFiles[i]);
- QVERIFY2(QFile::exists(resourceFilePath), qPrintable(errorMessage.arg(resourceFilePath)));
- m_additionalMimeFileNames.append(QLatin1String(additionalMimeFiles[i]));
- m_additionalMimeFilePaths.append(resourceFilePath);
- }
-
initTestCaseInternal();
m_isUsingCacheProvider = !qEnvironmentVariableIsSet("QT_NO_MIME_CACHE");
}
@@ -192,7 +176,7 @@ void tst_QMimeDatabase::mimeTypeForName()
QMimeType s0 = db.mimeTypeForName(QString::fromLatin1("application/x-zerosize"));
QVERIFY(s0.isValid());
QCOMPARE(s0.name(), QString::fromLatin1("application/x-zerosize"));
- QCOMPARE(s0.comment(), QString::fromLatin1("empty document"));
+ QCOMPARE(s0.comment(), QString::fromLatin1("Empty document"));
QMimeType s0Again = db.mimeTypeForName(QString::fromLatin1("application/x-zerosize"));
QCOMPARE(s0Again.name(), s0.name());
@@ -200,7 +184,6 @@ void tst_QMimeDatabase::mimeTypeForName()
QMimeType s1 = db.mimeTypeForName(QString::fromLatin1("text/plain"));
QVERIFY(s1.isValid());
QCOMPARE(s1.name(), QString::fromLatin1("text/plain"));
- //qDebug("Comment is %s", qPrintable(s1.comment()));
QMimeType krita = db.mimeTypeForName(QString::fromLatin1("application/x-krita"));
QVERIFY(krita.isValid());
@@ -212,7 +195,7 @@ void tst_QMimeDatabase::mimeTypeForName()
QMimeType bzip2 = db.mimeTypeForName(QString::fromLatin1("application/x-bzip2"));
QVERIFY(bzip2.isValid());
- QCOMPARE(bzip2.comment(), QString::fromLatin1("Bzip archive"));
+ QCOMPARE(bzip2.comment(), QString::fromLatin1("Bzip2 archive"));
QMimeType defaultMime = db.mimeTypeForName(QString::fromLatin1("application/octet-stream"));
QVERIFY(defaultMime.isValid());
@@ -253,13 +236,15 @@ void tst_QMimeDatabase::mimeTypeForFileName_data()
QTest::newRow("case-sensitive uppercase match") << "textfile.C" << "text/x-c++src";
QTest::newRow("case-sensitive lowercase match") << "textfile.c" << "text/x-csrc";
QTest::newRow("case-sensitive long-extension match") << "foo.PS.gz" << "application/x-gzpostscript";
- QTest::newRow("case-sensitive-only match") << "core" << "application/x-core";
- QTest::newRow("case-sensitive-only match") << "Core" << "application/octet-stream"; // #198477
+ QTest::newRow("case-sensitive-only-match-core") << "core" << "application/x-core";
+ QTest::newRow("case-sensitive-only-match-Core") << "Core" << "application/octet-stream"; // #198477
QTest::newRow("desktop file") << "foo.desktop" << "application/x-desktop";
QTest::newRow("old kdelnk file is x-desktop too") << "foo.kdelnk" << "application/x-desktop";
- QTest::newRow("double-extension file") << "foo.tar.bz2" << "application/x-bzip-compressed-tar";
- QTest::newRow("single-extension file") << "foo.bz2" << "application/x-bzip";
+ QTest::newRow("double-extension file") << "foo.tar.bz2"
+ << "application/x-bzip2-compressed-tar";
+ QTest::newRow("single-extension file") << "foo.bz2"
+ << "application/x-bzip2";
QTest::newRow(".doc should assume msword") << "somefile.doc" << "application/msword"; // #204139
QTest::newRow("glob that uses [] syntax, 1") << "Makefile" << "text/x-makefile";
QTest::newRow("glob that uses [] syntax, 2") << "makefile" << "text/x-makefile";
@@ -270,6 +255,7 @@ void tst_QMimeDatabase::mimeTypeForFileName_data()
// fdo bug 15436, needs shared-mime-info >= 0.40 (and this tests the globs2-parsing code).
QTest::newRow("glob that ends with *, also matches *.pdf. *.pdf has higher weight") << "README.pdf" << "application/pdf";
QTest::newRow("directory") << "/" << "inode/directory";
+ QTest::newRow("resource-directory") << ":/files/" << "inode/directory";
QTest::newRow("doesn't exist, no extension") << "IDontExist" << "application/octet-stream";
QTest::newRow("doesn't exist but has known extension") << "IDontExist.txt" << "text/plain";
QTest::newRow("empty") << "" << "application/octet-stream";
@@ -279,7 +265,7 @@ static inline QByteArray msgMimeTypeForFileNameFailed(const QList<QMimeType> &ac
const QString &expected)
{
QByteArray result = "Actual (";
- foreach (const QMimeType &m, actual) {
+ for (const QMimeType &m : actual) {
result += m.name().toLocal8Bit();
result += ' ';
}
@@ -297,12 +283,12 @@ void tst_QMimeDatabase::mimeTypeForFileName()
QVERIFY(mime.isValid());
QCOMPARE(mime.name(), expectedMimeType);
- QList<QMimeType> mimes = db.mimeTypesForFileName(fileName);
+ const QList<QMimeType> mimes = db.mimeTypesForFileName(fileName);
if (expectedMimeType == "application/octet-stream") {
QVERIFY(mimes.isEmpty());
} else {
QVERIFY2(!mimes.isEmpty(), msgMimeTypeForFileNameFailed(mimes, expectedMimeType).constData());
- QVERIFY2(mimes.count() == 1, msgMimeTypeForFileNameFailed(mimes, expectedMimeType).constData());
+ QVERIFY2(mimes.size() == 1, msgMimeTypeForFileNameFailed(mimes, expectedMimeType).constData());
QCOMPARE(mimes.first().name(), expectedMimeType);
}
}
@@ -319,15 +305,22 @@ void tst_QMimeDatabase::mimeTypesForFileName_data()
QTest::newRow("non_ascii") << QString::fromUtf8("AÄ°Ä°A.pdf") << (QStringList() << "application/pdf");
}
+static QStringList mimeTypeNames(const QList<QMimeType> &mimes)
+{
+ QStringList mimeNames;
+ mimeNames.reserve(mimes.size());
+ for (const auto &mime : mimes)
+ mimeNames.append(mime.name());
+ return mimeNames;
+}
+
void tst_QMimeDatabase::mimeTypesForFileName()
{
QFETCH(QString, fileName);
QFETCH(QStringList, expectedMimeTypes);
QMimeDatabase db;
QList<QMimeType> mimes = db.mimeTypesForFileName(fileName);
- QStringList mimeNames;
- foreach (const QMimeType &mime, mimes)
- mimeNames.append(mime.name());
+ QStringList mimeNames = mimeTypeNames(mimes);
QCOMPARE(mimeNames, expectedMimeTypes);
}
@@ -351,9 +344,9 @@ void tst_QMimeDatabase::inheritance()
QVERIFY(msword.inherits(olestorage.name()));
QVERIFY(msword.inherits(QLatin1String("application/octet-stream")));
- const QMimeType directory = db.mimeTypeForName(QString::fromLatin1("inode/directory"));
+ const QMimeType directory = db.mimeTypeForName(s_inodeMimetype);
QVERIFY(directory.isValid());
- QCOMPARE(directory.parentMimeTypes().count(), 0);
+ QCOMPARE(directory.parentMimeTypes().size(), 0);
QVERIFY(!directory.inherits(QLatin1String("application/octet-stream")));
// Check that text/x-patch knows that it inherits from text/plain (it says so explicitly)
@@ -374,7 +367,7 @@ void tst_QMimeDatabase::inheritance()
const QStringList shellParents = shellscript.parentMimeTypes();
QVERIFY(shellParents.contains(QLatin1String("text/plain")));
QVERIFY(shellParents.contains(QLatin1String("application/x-executable")));
- QCOMPARE(shellParents.count(), 2); // only the above two
+ QCOMPARE(shellParents.size(), 2); // only the above two
const QStringList allShellAncestors = shellscript.allAncestors();
QVERIFY(allShellAncestors.contains(QLatin1String("text/plain")));
QVERIFY(allShellAncestors.contains(QLatin1String("application/x-executable")));
@@ -395,6 +388,13 @@ void tst_QMimeDatabase::inheritance()
const QMimeType mswordTemplate = db.mimeTypeForName(QString::fromLatin1("application/msword-template"));
QVERIFY(mswordTemplate.isValid());
QVERIFY(mswordTemplate.inherits(QLatin1String("application/msword")));
+
+ // Check that buggy type definitions that have circular inheritance don't cause an infinite
+ // loop, especially when resolving a conflict between the file's name and its contents
+ const QMimeType ecmascript = db.mimeTypeForName(QString::fromLatin1("application/ecmascript"));
+ QVERIFY(ecmascript.allAncestors().contains("text/plain"));
+ const QMimeType javascript = db.mimeTypeForFileNameAndData("xml.js", "<?xml?>");
+ QVERIFY(javascript.inherits(QString::fromLatin1("text/javascript")));
}
void tst_QMimeDatabase::aliases()
@@ -445,7 +445,7 @@ void tst_QMimeDatabase::icons()
{
QMimeDatabase db;
QMimeType directory = db.mimeTypeForFile(QString::fromLatin1("/"));
- QCOMPARE(directory.name(), QString::fromLatin1("inode/directory"));
+ QCOMPARE(directory.name(), s_inodeMimetype);
QCOMPARE(directory.iconName(), QString::fromLatin1("inode-directory"));
QCOMPARE(directory.genericIconName(), QString::fromLatin1("folder"));
@@ -464,10 +464,13 @@ void tst_QMimeDatabase::comment()
QLocale::setDefault(QLocale("de"));
QMimeDatabase db;
- QMimeType directory = db.mimeTypeForName(QStringLiteral("inode/directory"));
+ QMimeType directory = db.mimeTypeForName(s_inodeMimetype);
QCOMPARE(directory.comment(), QStringLiteral("Ordner"));
QLocale::setDefault(QLocale("fr"));
- QCOMPARE(directory.comment(), QStringLiteral("dossier"));
+ // Missing in s-m-i 2.3 due to case changes
+ // QCOMPARE(directory.comment(), QStringLiteral("dossier"));
+ QMimeType cpp = db.mimeTypeForName("text/x-c++src");
+ QCOMPARE(cpp.comment(), QStringLiteral("code source C++"));
}
// In here we do the tests that need some content in a temporary file.
@@ -522,6 +525,42 @@ void tst_QMimeDatabase::mimeTypeForFileWithContent()
QCOMPARE(mime.name(), QString::fromLatin1("application/smil+xml"));
}
+ // Test what happens with Qt resources (file engines in general)
+ {
+ QFile rccFile(":/files/test.txt");
+
+ mime = db.mimeTypeForFile(rccFile.fileName());
+ QCOMPARE(mime.name(), "text/plain"_L1);
+
+ QVERIFY(rccFile.open(QIODevice::ReadOnly));
+ mime = db.mimeTypeForData(&rccFile);
+ QCOMPARE(mime.name(), "text/x-qml"_L1);
+ QVERIFY(rccFile.isOpen());
+
+ mime = db.mimeTypeForFile(rccFile.fileName(), QMimeDatabase::MatchContent);
+ QCOMPARE(mime.name(), "text/x-qml"_L1);
+ }
+
+ // Directories
+ {
+ mime = db.mimeTypeForFile("/");
+ QCOMPARE(mime.name(), "inode/directory"_L1);
+
+ QString dirName = QDir::tempPath();
+ if (!dirName.endsWith(u'/'))
+ dirName += u'/';
+ mime = db.mimeTypeForFile(dirName);
+ QCOMPARE(mime.name(), "inode/directory"_L1);
+
+ while (dirName.endsWith(u'/'))
+ dirName.chop(1);
+ mime = db.mimeTypeForFile(dirName);
+ QCOMPARE(mime.name(), "inode/directory"_L1);
+
+ mime = db.mimeTypeForFile(":/files");
+ QCOMPARE(mime.name(), "inode/directory"_L1);
+ }
+
// Test what happens with an incorrect path
mime = db.mimeTypeForFile(QString::fromLatin1("file:///etc/passwd" /* incorrect code, use a path instead */));
QVERIFY(mime.isDefault());
@@ -571,7 +610,7 @@ void tst_QMimeDatabase::mimeTypeForData()
QCOMPARE(buffer.pos(), qint64(0));
}
-void tst_QMimeDatabase::mimeTypeForFileAndContent_data()
+void tst_QMimeDatabase::mimeTypeForFileNameAndData_data()
{
QTest::addColumn<QString>("name");
QTest::addColumn<QByteArray>("data");
@@ -590,7 +629,7 @@ void tst_QMimeDatabase::mimeTypeForFileAndContent_data()
QTest::newRow("text.xls, found by extension, user is in control") << QString::fromLatin1("text.xls") << oleData << "application/vnd.ms-excel";
}
-void tst_QMimeDatabase::mimeTypeForFileAndContent()
+void tst_QMimeDatabase::mimeTypeForFileNameAndData()
{
QFETCH(QString, name);
QFETCH(QByteArray, data);
@@ -609,6 +648,86 @@ void tst_QMimeDatabase::mimeTypeForFileAndContent()
QCOMPARE(buffer.pos(), qint64(0));
}
+#ifdef Q_OS_UNIX
+void tst_QMimeDatabase::mimeTypeForUnixSpecials_data()
+{
+#ifndef AT_FDCWD
+ QSKIP("fdopendir and fstatat are not available");
+#else
+ QTest::addColumn<QString>("name");
+ QTest::addColumn<QString>("expected");
+
+ static const char * const mimeTypes[] = {
+ "inode/blockdevice",
+ "inode/chardevice",
+ "inode/fifo",
+ "inode/socket",
+ };
+ enum SpecialType {
+ FoundBlock = 0,
+ FoundChar = 1,
+ FoundFifo = 2,
+ FoundSocket = 3,
+ };
+ uint found = 0;
+ auto nothingfound = []() {
+ QSKIP("No special Unix inode types found!");
+ };
+
+ // on a standard Linux system (systemd), /dev/log is a symlink to a socket
+ // and /dev/initctl is a symlink to a FIFO
+ int devfd = open("/dev", O_RDONLY);
+ DIR *devdir = fdopendir(devfd); // takes ownership
+ if (!devdir)
+ return nothingfound();
+
+ while (struct dirent *ent = readdir(devdir)) {
+ struct stat statbuf;
+ if (fstatat(devfd, ent->d_name, &statbuf, 0) < 0)
+ continue;
+
+ SpecialType type;
+ if (S_ISBLK(statbuf.st_mode)) {
+ type = FoundBlock;
+ } else if (S_ISCHR(statbuf.st_mode)) {
+ type = FoundChar;
+ } else if (S_ISFIFO(statbuf.st_mode)) {
+ type = FoundFifo;
+ } else if (S_ISSOCK(statbuf.st_mode)) {
+ type = FoundSocket;
+ } else {
+ if (!S_ISREG(statbuf.st_mode) && !S_ISDIR(statbuf.st_mode))
+ qWarning("Could not tell what file type '%s' is: %#o'",
+ ent->d_name, statbuf.st_mode);
+ continue;
+ }
+
+ if (found & (1U << type))
+ continue; // we've already seen such a type
+
+ const char *mimeType = mimeTypes[type];
+ QTest::addRow("%s", mimeType)
+ << u"/dev/"_s + QFile::decodeName(ent->d_name) << mimeType;
+ found |= (1U << type);
+ }
+ closedir(devdir);
+
+ if (!found)
+ nothingfound();
+#endif
+}
+
+void tst_QMimeDatabase::mimeTypeForUnixSpecials()
+{
+ QFETCH(QString, name);
+ QFETCH(QString, expected);
+
+ qInfo() << "Testing that" << name << "is" << expected;
+ QMimeDatabase db;
+ QCOMPARE(db.mimeTypeForFile(name).name(), expected);
+}
+#endif
+
void tst_QMimeDatabase::allMimeTypes()
{
QMimeDatabase db;
@@ -616,9 +735,9 @@ void tst_QMimeDatabase::allMimeTypes()
QVERIFY(!lst.isEmpty());
// Hardcoding this is the only way to check both providers find the same number of mimetypes.
- QCOMPARE(lst.count(), 811);
+ QCOMPARE(lst.size(), 908);
- foreach (const QMimeType &mime, lst) {
+ for (const QMimeType &mime : lst) {
const QString name = mime.name();
QVERIFY(!name.isEmpty());
QCOMPARE(name.count(QLatin1Char('/')), 1);
@@ -635,13 +754,15 @@ void tst_QMimeDatabase::suffixes_data()
QTest::addColumn<QString>("preferredSuffix");
QTest::newRow("mimetype with a single pattern") << "application/pdf" << "*.pdf" << "pdf";
- QTest::newRow("mimetype with multiple patterns") << "application/x-kpresenter" << "*.kpr;*.kpt" << "kpr";
+ QTest::newRow("mimetype-with-multiple-patterns-kpr") << "application/x-kpresenter" << "*.kpr;*.kpt" << "kpr";
// The preferred suffix for image/jpeg is *.jpg, as per https://bugs.kde.org/show_bug.cgi?id=176737
- QTest::newRow("jpeg") << "image/jpeg" << "*.jpe;*.jpg;*.jpeg" << "jpg";
+ QTest::newRow("jpeg") << "image/jpeg"
+ << "*.jfif;*.jpe;*.jpg;*.jpeg"
+ << "jpg";
QTest::newRow("mimetype with many patterns") << "application/vnd.wordperfect" << "*.wp;*.wp4;*.wp5;*.wp6;*.wpd;*.wpp" << "wp";
QTest::newRow("oasis text mimetype") << "application/vnd.oasis.opendocument.text" << "*.odt" << "odt";
QTest::newRow("oasis presentation mimetype") << "application/vnd.oasis.opendocument.presentation" << "*.odp" << "odp";
- QTest::newRow("mimetype with multiple patterns") << "text/plain" << "*.asc;*.txt;*,v" << "txt";
+ QTest::newRow("mimetype-multiple-patterns-text-plain") << "text/plain" << "*.asc;*.txt;*,v" << "txt";
QTest::newRow("mimetype with uncommon pattern") << "text/x-readme" << "README*" << QString();
QTest::newRow("mimetype with no patterns") << "application/x-ole-storage" << QString() << QString();
QTest::newRow("default_mimetype") << "application/octet-stream" << QString() << QString();
@@ -676,6 +797,26 @@ void tst_QMimeDatabase::knownSuffix()
QCOMPARE(db.suffixForFileName(QString::fromLatin1("foo.anim2")), QString()); // the glob is anim[0-9], no way to extract the extension without expensive regexp capturing
}
+void tst_QMimeDatabase::filterString_data()
+{
+ QTest::addColumn<QString>("mimeType");
+ QTest::addColumn<QString>("expectedFilterString");
+
+ QTest::newRow("single-pattern") << "application/pdf"
+ << "PDF document (*.pdf)";
+ QTest::newRow("multiple-patterns-text-plain") << "text/plain"
+ << "Plain text document (*.txt *.asc *,v)";
+}
+
+void tst_QMimeDatabase::filterString()
+{
+ QFETCH(QString, mimeType);
+ QFETCH(QString, expectedFilterString);
+
+ QMimeDatabase db;
+ QCOMPARE(db.mimeTypeForName(mimeType).filterString(), expectedFilterString);
+}
+
void tst_QMimeDatabase::symlinkToFifo() // QTBUG-48529
{
#if defined(Q_OS_UNIX) && !defined(Q_OS_INTEGRITY)
@@ -715,8 +856,10 @@ void tst_QMimeDatabase::findByFileName_data()
QByteArray line(1024, Qt::Uninitialized);
+ QDuplicateTracker<QString, 800> seen;
+
while (!f.atEnd()) {
- int len = f.readLine(line.data(), 1023);
+ const qint64 len = f.readLine(line.data(), 1023);
if (len <= 2 || line.at(0) == '#')
continue;
@@ -730,10 +873,16 @@ void tst_QMimeDatabase::findByFileName_data()
QString xFail;
if (list.size() >= 3)
xFail = list.at(2);
+ QString rowTag = filePath;
+ if (seen.hasSeen(rowTag)) {
+ // Two testcases for the same file, e.g.
+ // test.ogg audio/ogg oxx
+ // test.ogg audio/x-vorbis+ogg x
+ rowTag += "_2";
+ }
- QTest::newRow(filePath.toLatin1().constData())
- << QString(prefix + filePath)
- << mimeTypeType << xFail;
+ QTest::newRow(rowTag.toLatin1().constData())
+ << QString(prefix + filePath) << mimeTypeType << xFail;
}
}
@@ -745,28 +894,11 @@ void tst_QMimeDatabase::findByFileName()
QMimeDatabase database;
- //qDebug() << Q_FUNC_INFO << filePath;
-
const QMimeType resultMimeType(database.mimeTypeForFile(filePath, QMimeDatabase::MatchExtension));
- if (resultMimeType.isValid()) {
- //qDebug() << Q_FUNC_INFO << "MIME type" << resultMimeType.name() << "has generic icon name" << resultMimeType.genericIconName() << "and icon name" << resultMimeType.iconName();
-
-// Loading icons depend on the icon theme, we can't enable this test
-#if 0
- QCOMPARE(resultMimeType.genericIconName(), QIcon::fromTheme(resultMimeType.genericIconName()).name());
- QVERIFY2(!QIcon::fromTheme(resultMimeType.genericIconName()).isNull(), qPrintable(resultMimeType.genericIconName()));
- QVERIFY2(QIcon::hasThemeIcon(resultMimeType.genericIconName()), qPrintable(resultMimeType.genericIconName()));
-
- QCOMPARE(resultMimeType.iconName(), QIcon::fromTheme(resultMimeType.iconName()).name());
- QVERIFY2(!QIcon::fromTheme(resultMimeType.iconName()).isNull(), qPrintable(resultMimeType.iconName()));
- QVERIFY2(QIcon::hasThemeIcon(resultMimeType.iconName()), qPrintable(resultMimeType.iconName()));
-#endif
- }
const QString resultMimeTypeName = resultMimeType.name();
- //qDebug() << Q_FUNC_INFO << "mimeTypeForFile() returned" << resultMimeTypeName;
const bool failed = resultMimeTypeName != mimeTypeName;
- const bool shouldFail = (xFail.length() >= 1 && xFail.at(0) == QLatin1Char('x'));
+ const bool shouldFail = (xFail.size() >= 1 && xFail.at(0) == QLatin1Char('x'));
if (shouldFail != failed) {
// Results are ambiguous when multiple MIME types have the same glob
// -> accept the current result if the found MIME type actually
@@ -776,7 +908,6 @@ void tst_QMimeDatabase::findByFileName()
QVERIFY2(resultMimeType == foundMimeType, qPrintable(resultMimeType.name() + QString::fromLatin1(" vs. ") + foundMimeType.name()));
if (foundMimeType.isValid()) {
const QString extension = QFileInfo(filePath).suffix();
- //qDebug() << Q_FUNC_INFO << "globPatterns:" << foundMimeType.globPatterns() << "- extension:" << QString() + "*." + extension;
if (foundMimeType.globPatterns().contains(QString::fromLatin1("*.") + extension))
return;
}
@@ -813,7 +944,7 @@ void tst_QMimeDatabase::findByData()
QByteArray data = f.read(16384);
const QString resultMimeTypeName = database.mimeTypeForData(data).name();
- if (xFail.length() >= 2 && xFail.at(1) == QLatin1Char('x')) {
+ if (xFail.size() >= 2 && xFail.at(1) == QLatin1Char('x')) {
// Expected to fail
QVERIFY2(resultMimeTypeName != mimeTypeName, qPrintable(resultMimeTypeName));
} else {
@@ -843,8 +974,7 @@ void tst_QMimeDatabase::findByFile()
QMimeDatabase database;
const QString resultMimeTypeName = database.mimeTypeForFile(filePath).name();
- //qDebug() << Q_FUNC_INFO << filePath << "->" << resultMimeTypeName;
- if (xFail.length() >= 3 && xFail.at(2) == QLatin1Char('x')) {
+ if (xFail.size() >= 3 && xFail.at(2) == QLatin1Char('x')) {
// Expected to fail
QVERIFY2(resultMimeTypeName != mimeTypeName, qPrintable(resultMimeTypeName));
} else {
@@ -911,7 +1041,7 @@ static bool waitAndRunUpdateMimeDatabase(const QString &path)
QFileInfo mimeCacheInfo(path + QString::fromLatin1("/mime.cache"));
if (mimeCacheInfo.exists()) {
// Wait until the beginning of the next second
- while (mimeCacheInfo.lastModified().secsTo(QDateTime::currentDateTime()) == 0) {
+ while (mimeCacheInfo.lastModified(QTimeZone::UTC).secsTo(QDateTime::currentDateTimeUtc()) == 0) {
QTest::qSleep(200);
}
}
@@ -925,7 +1055,8 @@ static void checkHasMimeType(const QString &mimeType)
QVERIFY(db.mimeTypeForName(mimeType).isValid());
bool found = false;
- foreach (const QMimeType &mt, db.allMimeTypes()) {
+ const auto all = db.allMimeTypes();
+ for (const QMimeType &mt : all) {
if (mt.name() == mimeType) {
found = true;
break;
@@ -946,6 +1077,30 @@ QT_BEGIN_NAMESPACE
extern Q_CORE_EXPORT int qmime_secondsBetweenChecks; // see qmimeprovider.cpp
QT_END_NAMESPACE
+void copyFiles(const QSpan<const char *const> &additionalMimeFiles, const QString &destDir)
+{
+ const QString notFoundErrorMessage = QString::fromLatin1("Cannot find '%1'");
+ for (const char *mimeFile : additionalMimeFiles) {
+ const QString resourceFilePath = s_resourcePrefix + QLatin1String(mimeFile);
+ QVERIFY2(QFile::exists(resourceFilePath),
+ qPrintable(notFoundErrorMessage.arg(resourceFilePath)));
+
+ const QString destFile = destDir + QLatin1String(mimeFile);
+ QFile::remove(destFile);
+ QString errorMessage;
+ QVERIFY2(copyResourceFile(resourceFilePath, destFile, &errorMessage),
+ qPrintable(errorMessage));
+ }
+}
+
+void deleteFiles(const QSpan<const char *const> &additionalMimeFiles, const QString &destDir)
+{
+ for (const char *mimeFile : additionalMimeFiles) {
+ const QString destFile = destDir + QLatin1String(mimeFile);
+ QFile::remove(destFile);
+ }
+}
+
void tst_QMimeDatabase::installNewGlobalMimeType()
{
#if !defined(USE_XDG_DATA_DIRS)
@@ -965,41 +1120,28 @@ void tst_QMimeDatabase::installNewGlobalMimeType()
if (!QFileInfo(destDir).isDir())
QVERIFY(QDir(m_globalXdgDir).mkpath(destDir));
- QString errorMessage;
- for (int i = 0; i < m_additionalMimeFileNames.size(); ++i) {
- const QString destFile = destDir + m_additionalMimeFileNames.at(i);
- QFile::remove(destFile);
- QVERIFY2(copyResourceFile(m_additionalMimeFilePaths.at(i), destFile, &errorMessage), qPrintable(errorMessage));
- }
+ copyFiles(additionalGlobalMimeFiles, destDir);
+ QVERIFY(!QTest::currentTestFailed());
if (m_isUsingCacheProvider && !waitAndRunUpdateMimeDatabase(mimeDir))
QSKIP("shared-mime-info not found, skipping mime.cache test");
- if (!m_isUsingCacheProvider)
- ignoreInvalidMimetypeWarnings(mimeDir);
-
QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(),
QString::fromLatin1("text/x-SuSE-ymu"));
QVERIFY(db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid());
checkHasMimeType("text/x-suse-ymp");
// Test that a double-definition of a mimetype doesn't lead to sniffing ("conflicting globs").
- const QString qmlTestFile = QLatin1String(RESOURCE_PREFIX "test.qml");
+ const QString qmlTestFile = s_resourcePrefix + "test.qml"_L1;
QVERIFY2(!qmlTestFile.isEmpty(),
qPrintable(QString::fromLatin1("Cannot find '%1' starting from '%2'").
arg("test.qml", QDir::currentPath())));
QCOMPARE(db.mimeTypeForFile(qmlTestFile).name(),
QString::fromLatin1("text/x-qml"));
- {
- QMimeType objcsrc = db.mimeTypeForName(QStringLiteral("text/x-objcsrc"));
- QVERIFY(objcsrc.isValid());
- QCOMPARE(objcsrc.globPatterns(), QStringList());
- }
-
- const QString fooTestFile = QLatin1String(RESOURCE_PREFIX "magic-and-hierarchy.foo");
+ const QString fooTestFile = s_resourcePrefix + "magic-and-hierarchy.foo"_L1;
QCOMPARE(db.mimeTypeForFile(fooTestFile).name(), QString::fromLatin1("application/foo"));
- const QString fooTestFile2 = QLatin1String(RESOURCE_PREFIX "magic-and-hierarchy2.foo");
+ const QString fooTestFile2 = s_resourcePrefix + "magic-and-hierarchy2.foo"_L1;
QCOMPARE(db.mimeTypeForFile(fooTestFile2).name(), QString::fromLatin1("application/vnd.qnx.bar-descriptor"));
// Test if we can use the default comment
@@ -1017,8 +1159,7 @@ void tst_QMimeDatabase::installNewGlobalMimeType()
}
// Now test removing the mimetype definitions again
- for (int i = 0; i < m_additionalMimeFileNames.size(); ++i)
- QFile::remove(destDir + m_additionalMimeFileNames.at(i));
+ deleteFiles(additionalGlobalMimeFiles, destDir);
if (m_isUsingCacheProvider && !waitAndRunUpdateMimeDatabase(mimeDir))
QSKIP("shared-mime-info not found, skipping mime.cache test");
QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(),
@@ -1027,11 +1168,29 @@ void tst_QMimeDatabase::installNewGlobalMimeType()
#endif // QT_CONFIG(process)
}
+void tst_QMimeDatabase::installNewLocalMimeType_data()
+{
+ QTest::addColumn<bool>("useLocalBinaryCache");
+
+ // Test mixing the providers:
+ // * m_isUsingCacheProvider is about the global directory.
+ // ** when true, we'll test both for the local directory.
+ // ** when false, we can't, because QT_NO_MIME_CACHE is set, so it's XML+XML only
+
+#if QT_CONFIG(process)
+ if (m_isUsingCacheProvider)
+ QTest::newRow("with_binary_cache") << true;
+#endif
+ QTest::newRow("without_binary_cache") << false;
+}
+
void tst_QMimeDatabase::installNewLocalMimeType()
{
#if !QT_CONFIG(process)
QSKIP("This test requires QProcess support");
#else
+ QFETCH(bool, useLocalBinaryCache);
+
qmime_secondsBetweenChecks = 0;
QMimeDatabase db;
@@ -1042,19 +1201,16 @@ void tst_QMimeDatabase::installNewLocalMimeType()
const QString destDir = m_localMimeDir + QLatin1String("/packages/");
QVERIFY(QDir().mkpath(destDir));
- QString errorMessage;
- for (int i = 0; i < m_additionalMimeFileNames.size(); ++i) {
- const QString destFile = destDir + m_additionalMimeFileNames.at(i);
- QFile::remove(destFile);
- QVERIFY2(copyResourceFile(m_additionalMimeFilePaths.at(i), destFile, &errorMessage), qPrintable(errorMessage));
- }
- if (m_isUsingCacheProvider && !waitAndRunUpdateMimeDatabase(m_localMimeDir)) {
+
+ copyFiles(additionalLocalMimeFiles, destDir);
+ QVERIFY(!QTest::currentTestFailed());
+ if (useLocalBinaryCache && !waitAndRunUpdateMimeDatabase(m_localMimeDir)) {
const QString skipWarning = QStringLiteral("shared-mime-info not found, skipping mime.cache test (")
+ QDir::toNativeSeparators(m_localMimeDir) + QLatin1Char(')');
QSKIP(qPrintable(skipWarning));
}
- if (!m_isUsingCacheProvider)
+ if (!useLocalBinaryCache)
ignoreInvalidMimetypeWarnings(m_localMimeDir);
QVERIFY(db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid());
@@ -1075,15 +1231,33 @@ void tst_QMimeDatabase::installNewLocalMimeType()
QVERIFY(objcsrc.isValid());
QCOMPARE(objcsrc.globPatterns(), QStringList());
}
+ QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.txt"), QMimeDatabase::MatchExtension).name(),
+ QString::fromLatin1("text/plain"));
// Test that a double-definition of a mimetype doesn't lead to sniffing ("conflicting globs").
- const QString qmlTestFile = QLatin1String(RESOURCE_PREFIX "test.qml");
+ const QString qmlTestFile = s_resourcePrefix + "test.qml"_L1;
QVERIFY2(!qmlTestFile.isEmpty(),
qPrintable(QString::fromLatin1("Cannot find '%1' starting from '%2'").
arg("test.qml", QDir::currentPath())));
QCOMPARE(db.mimeTypeForFile(qmlTestFile).name(),
QString::fromLatin1("text/x-qml"));
+ { // QTBUG-101755
+ QList<QMimeType> mimes = db.mimeTypesForFileName(u"foo.webm"_s);
+ // "*.webm" glob pattern is deleted with "glob-deleteall"
+ QVERIFY2(mimes.isEmpty(), qPrintable(mimeTypeNames(mimes).join(u',')));
+ mimes = db.mimeTypesForFileName(u"foo.videowebm"_s);
+ QCOMPARE(mimes.size(), 1);
+ QCOMPARE(mimes.at(0).globPatterns(), QStringList{ "*.videowebm" });
+ // Custom "*.videowebm" pattern is used instead
+ QCOMPARE(mimes.at(0).name(), u"video/webm");
+ }
+
+ // QTBUG-116905: globPatterns() should merge all locations
+ // add-extension.xml adds *.jnewext
+ const QStringList expectedJpegPatterns{ "*.jpg", "*.jpeg", "*.jpe", "*.jfif", "*.jnewext" };
+ QCOMPARE(db.mimeTypeForName(QStringLiteral("image/jpeg")).globPatterns(), expectedJpegPatterns);
+
// Now that we have two directories with mime definitions, check that everything still works
inheritance();
if (QTest::currentTestFailed())
@@ -1112,7 +1286,7 @@ void tst_QMimeDatabase::installNewLocalMimeType()
// Now test removing local mimetypes
for (int i = 1 ; i <= 3 ; ++i)
QFile::remove(destDir + QStringLiteral("invalid-magic%1.xml").arg(i));
- if (m_isUsingCacheProvider && !waitAndRunUpdateMimeDatabase(m_localMimeDir))
+ if (useLocalBinaryCache && !waitAndRunUpdateMimeDatabase(m_localMimeDir))
QSKIP("shared-mime-info not found, skipping mime.cache test");
QVERIFY(!db.mimeTypeForName(QLatin1String("text/invalid-magic1")).isValid()); // deleted
QVERIFY(db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid()); // still present
@@ -1127,7 +1301,7 @@ void tst_QMimeDatabase::installNewLocalMimeType()
QCOMPARE(db.mimeTypeForFile(QLatin1String("foo.ymu"), QMimeDatabase::MatchExtension).name(),
QString::fromLatin1("application/octet-stream"));
QVERIFY(!db.mimeTypeForName(QLatin1String("text/x-suse-ymp")).isValid());
-#endif // QT_CONFIG(process)
+#endif
}
QTEST_GUILESS_MAIN(tst_QMimeDatabase)
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.h b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.h
index 4918dc6f4a..415c2e3e37 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.h
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.h
@@ -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
#ifndef TST_QMIMEDATABASE_H
#define TST_QMIMEDATABASE_H
@@ -60,12 +35,18 @@ private slots:
void mimeTypeForUrl();
void mimeTypeForData_data();
void mimeTypeForData();
- void mimeTypeForFileAndContent_data();
- void mimeTypeForFileAndContent();
+ void mimeTypeForFileNameAndData_data();
+ void mimeTypeForFileNameAndData();
+#ifdef Q_OS_UNIX
+ void mimeTypeForUnixSpecials_data();
+ void mimeTypeForUnixSpecials();
+#endif
void allMimeTypes();
void suffixes_data();
void suffixes();
void knownSuffix();
+ void filterString_data();
+ void filterString();
void symlinkToFifo();
void fromThreads();
@@ -83,6 +64,7 @@ private slots:
//
void installNewGlobalMimeType();
+ void installNewLocalMimeType_data();
void installNewLocalMimeType();
private:
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/webm-glob-deleteall.xml b/tests/auto/corelib/mimetypes/qmimedatabase/webm-glob-deleteall.xml
new file mode 100644
index 0000000000..05a24de17c
--- /dev/null
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/webm-glob-deleteall.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
+ <mime-type type="video/webm">
+ <glob-deleteall/>
+ <glob pattern="*.videowebm"/>
+ </mime-type>
+</mime-info>
diff --git a/tests/auto/corelib/mimetypes/qmimetype/CMakeLists.txt b/tests/auto/corelib/mimetypes/qmimetype/CMakeLists.txt
index bb84fce94f..e1781d450e 100644
--- a/tests/auto/corelib/mimetypes/qmimetype/CMakeLists.txt
+++ b/tests/auto/corelib/mimetypes/qmimetype/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qmimetype.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmimetype Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmimetype LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmimetype
SOURCES
tst_qmimetype.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/mimetypes/qmimetype/tst_qmimetype.cpp b/tests/auto/corelib/mimetypes/qmimetype/tst_qmimetype.cpp
index 6d180cd838..79304e4420 100644
--- a/tests/auto/corelib/mimetypes/qmimetype/tst_qmimetype.cpp
+++ b/tests/auto/corelib/mimetypes/qmimetype/tst_qmimetype.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** 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 <private/qmimetype_p.h>
#include <qmimetype.h>
#include <qmimedatabase.h>
+#include <QVariantMap>
#include <QTest>
@@ -45,7 +21,6 @@ private slots:
void name();
void genericIconName();
void iconName();
- void suffixes();
void gadget();
};
@@ -60,52 +35,15 @@ void tst_qmimetype::initTestCase()
static QString qMimeTypeName()
{
- static const QString result ("No name of the MIME type");
+ static const QString result("group/fake-mime");
return result;
}
-static QString qMimeTypeGenericIconName()
-{
- static const QString result ("No file name of an icon image that represents the MIME type");
- return result;
-}
-
-static QString qMimeTypeIconName()
-{
- static const QString result ("No file name of an icon image that represents the MIME type");
- return result;
-}
-
-static QStringList buildQMimeTypeFilenameExtensions()
-{
- QStringList result;
- result << QString::fromLatin1("*.png");
- return result;
-}
-
-static QStringList qMimeTypeGlobPatterns()
-{
- static const QStringList result (buildQMimeTypeFilenameExtensions());
- return result;
-}
-
-// ------------------------------------------------------------------------------------------------
-
-QMIMETYPE_BUILDER_FROM_RVALUE_REFS
-
// ------------------------------------------------------------------------------------------------
void tst_qmimetype::isValid()
{
- QMimeType instantiatedQMimeType (
- buildQMimeType (
- qMimeTypeName(),
- qMimeTypeGenericIconName(),
- qMimeTypeIconName(),
- qMimeTypeGlobPatterns()
- )
- );
-
+ QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) };
QVERIFY(instantiatedQMimeType.isValid());
QMimeType otherQMimeType (instantiatedQMimeType);
@@ -122,23 +60,8 @@ void tst_qmimetype::isValid()
void tst_qmimetype::name()
{
- QMimeType instantiatedQMimeType (
- buildQMimeType (
- qMimeTypeName(),
- qMimeTypeGenericIconName(),
- qMimeTypeIconName(),
- qMimeTypeGlobPatterns()
- )
- );
-
- QMimeType otherQMimeType (
- buildQMimeType (
- QString(),
- qMimeTypeGenericIconName(),
- qMimeTypeIconName(),
- qMimeTypeGlobPatterns()
- )
- );
+ QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) };
+ QMimeType otherQMimeType{ QMimeTypePrivate(QString()) };
// Verify that the Name is part of the equality test:
QCOMPARE(instantiatedQMimeType.name(), qMimeTypeName());
@@ -151,63 +74,23 @@ void tst_qmimetype::name()
void tst_qmimetype::genericIconName()
{
- QMimeType instantiatedQMimeType (
- buildQMimeType (
- qMimeTypeName(),
- qMimeTypeGenericIconName(),
- qMimeTypeIconName(),
- qMimeTypeGlobPatterns()
- )
- );
-
- QCOMPARE(instantiatedQMimeType.genericIconName(), qMimeTypeGenericIconName());
+ const QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) };
+ QCOMPARE(instantiatedQMimeType.genericIconName(), "group-x-generic");
}
// ------------------------------------------------------------------------------------------------
void tst_qmimetype::iconName()
{
- QMimeType instantiatedQMimeType (
- buildQMimeType (
- qMimeTypeName(),
- qMimeTypeGenericIconName(),
- qMimeTypeIconName(),
- qMimeTypeGlobPatterns()
- )
- );
-
- QCOMPARE(instantiatedQMimeType.iconName(), qMimeTypeIconName());
-}
-
-// ------------------------------------------------------------------------------------------------
-
-void tst_qmimetype::suffixes()
-{
- QMimeType instantiatedQMimeType (
- buildQMimeType (
- qMimeTypeName(),
- qMimeTypeGenericIconName(),
- qMimeTypeIconName(),
- qMimeTypeGlobPatterns()
- )
- );
-
- QCOMPARE(instantiatedQMimeType.globPatterns(), qMimeTypeGlobPatterns());
- QCOMPARE(instantiatedQMimeType.suffixes(), QStringList() << QString::fromLatin1("png"));
+ const QMimeType instantiatedQMimeType{ QMimeTypePrivate(qMimeTypeName()) };
+ QCOMPARE(instantiatedQMimeType.iconName(), "group-fake-mime");
}
// ------------------------------------------------------------------------------------------------
void tst_qmimetype::gadget()
{
- QMimeType instantiatedQMimeType (
- buildQMimeType (
- qMimeTypeName(),
- qMimeTypeGenericIconName(),
- qMimeTypeIconName(),
- qMimeTypeGlobPatterns()
- )
- );
+ QMimeType instantiatedQMimeType = QMimeDatabase().mimeTypeForName("text/plain");
const QMetaObject *metaObject = &instantiatedQMimeType.staticMetaObject;
diff --git a/tests/auto/corelib/platform/CMakeLists.txt b/tests/auto/corelib/platform/CMakeLists.txt
index 92462e98d8..3455736eab 100644
--- a/tests/auto/corelib/platform/CMakeLists.txt
+++ b/tests/auto/corelib/platform/CMakeLists.txt
@@ -1,3 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
if(ANDROID)
add_subdirectory(android)
+ add_subdirectory(android_appless)
+endif()
+if(WIN32)
+ add_subdirectory(windows)
endif()
diff --git a/tests/auto/corelib/platform/android/CMakeLists.txt b/tests/auto/corelib/platform/android/CMakeLists.txt
index c2749825ac..6b7e9b2901 100644
--- a/tests/auto/corelib/platform/android/CMakeLists.txt
+++ b/tests/auto/corelib/platform/android/CMakeLists.txt
@@ -1,21 +1,28 @@
-# Generated from android.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_android Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_android LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_android
SOURCES
tst_android.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
)
if(ANDROID)
set_property(TARGET tst_android APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
${CMAKE_CURRENT_SOURCE_DIR}/testdata
)
- # QTBUG-88840 # special case
- qt_android_generate_deployment_settings(tst_android) # special case
endif()
-
-#### Keys ignored in scope 1:.:.:android.pro:<TRUE>:
-# DISTFILES = "testdata/assets/test.txt"
diff --git a/tests/auto/other/android/testdata/assets/test.txt b/tests/auto/corelib/platform/android/testdata/assets/top_level_dir/file_in_top_dir.txt
index 61e2c47c25..61e2c47c25 100644
--- a/tests/auto/other/android/testdata/assets/test.txt
+++ b/tests/auto/corelib/platform/android/testdata/assets/top_level_dir/file_in_top_dir.txt
diff --git a/tests/auto/corelib/platform/android/testdata/assets/top_level_dir/sub_dir/file_in_sub_dir.txt b/tests/auto/corelib/platform/android/testdata/assets/top_level_dir/sub_dir/file_in_sub_dir.txt
new file mode 100644
index 0000000000..61e2c47c25
--- /dev/null
+++ b/tests/auto/corelib/platform/android/testdata/assets/top_level_dir/sub_dir/file_in_sub_dir.txt
@@ -0,0 +1 @@
+FooBar \ No newline at end of file
diff --git a/tests/auto/corelib/platform/android/testdata/assets/top_level_dir/sub_dir/sub_dir_2/sub_dir_3/file_in_sub_dir_3.txt b/tests/auto/corelib/platform/android/testdata/assets/top_level_dir/sub_dir/sub_dir_2/sub_dir_3/file_in_sub_dir_3.txt
new file mode 100644
index 0000000000..61e2c47c25
--- /dev/null
+++ b/tests/auto/corelib/platform/android/testdata/assets/top_level_dir/sub_dir/sub_dir_2/sub_dir_3/file_in_sub_dir_3.txt
@@ -0,0 +1 @@
+FooBar \ No newline at end of file
diff --git a/tests/auto/corelib/platform/android/tst_android.cpp b/tests/auto/corelib/platform/android/tst_android.cpp
index 710e5b2ecf..07b939969c 100644
--- a/tests/auto/corelib/platform/android/tst_android.cpp
+++ b/tests/auto/corelib/platform/android/tst_android.cpp
@@ -1,36 +1,21 @@
-/****************************************************************************
-**
-** 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 <jni.h>
#include <QTest>
+#include <QGuiApplication>
#include <QtCore/qnativeinterface.h>
#include <QtCore/qjniobject.h>
+#include <QtCore/qdiriterator.h>
+#include <QScreen>
+#include <qpa/qplatformscreen.h>
+#include <qpa/qplatformnativeinterface.h>
+#include <QtCore/qdiriterator.h>
+#include <QWidget>
+#include <QSignalSpy>
+
+using namespace Qt::StringLiterals;
class tst_Android : public QObject
{
@@ -38,9 +23,13 @@ Q_OBJECT
private slots:
void assetsRead();
void assetsNotWritable();
+ void assetsIterating();
void testAndroidSdkVersion();
void testAndroidActivity();
void testRunOnAndroidMainThread();
+ void testFullScreenDimensions();
+ void orientationChange_data();
+ void orientationChange();
};
void tst_Android::assetsRead()
@@ -66,6 +55,31 @@ void tst_Android::assetsNotWritable()
QVERIFY(!file.open(QIODevice::Append));
}
+void tst_Android::assetsIterating()
+{
+ QStringList assets = {"assets:/top_level_dir/file_in_top_dir.txt",
+ "assets:/top_level_dir/sub_dir",
+ "assets:/top_level_dir/sub_dir/file_in_sub_dir.txt",
+ "assets:/top_level_dir/sub_dir/sub_dir_2",
+ "assets:/top_level_dir/sub_dir/sub_dir_2/sub_dir_3",
+ "assets:/top_level_dir/sub_dir/sub_dir_2/sub_dir_3/file_in_sub_dir_3.txt"};
+
+ // Note that we have an "assets:/top_level_dir/sub_dir/empty_sub_dir" in the test's
+ // assets physical directory, but empty folders are not packaged in the built apk,
+ // so it's expected to not have such folder be listed in the assets on runtime
+
+ QDirIterator it("assets:/top_level_dir", QDirIterator::Subdirectories);
+ QStringList iteratorAssets;
+ while (it.hasNext())
+ iteratorAssets.append(it.next());
+
+ QVERIFY(assets == iteratorAssets);
+
+ auto entryList = QDir{"assets:/"_L1}.entryList(QStringList{"*.txt"_L1});
+ QCOMPARE(entryList.size(), 1);
+ QCOMPARE(entryList[0], "test.txt"_L1);
+}
+
void tst_Android::testAndroidSdkVersion()
{
QVERIFY(QNativeInterface::QAndroidApplication::sdkVersion() > 0);
@@ -189,6 +203,172 @@ void tst_Android::testRunOnAndroidMainThread()
}
}
+Q_DECLARE_JNI_CLASS(QtActivityDelegateBase, "org/qtproject/qt/android/QtActivityDelegateBase")
+
+void setSystemUiVisibility(int visibility)
+{
+ QNativeInterface::QAndroidApplication::runOnAndroidMainThread([visibility] {
+ auto context = QNativeInterface::QAndroidApplication::context();
+ auto activityDelegate = context.callMethod<QtJniTypes::QtActivityDelegateBase>("getActivityDelegate");
+ activityDelegate.callMethod<void>("setSystemUiVisibility", jint(visibility));
+ }).waitForFinished();
+}
+
+// QTBUG-107604
+void tst_Android::testFullScreenDimensions()
+{
+ static int SYSTEM_UI_VISIBILITY_NORMAL = 0;
+ static int SYSTEM_UI_VISIBILITY_FULLSCREEN = 1;
+ static int SYSTEM_UI_VISIBILITY_TRANSLUCENT = 2;
+
+ // this will trigger new layout updates
+ setSystemUiVisibility(SYSTEM_UI_VISIBILITY_FULLSCREEN);
+ setSystemUiVisibility(SYSTEM_UI_VISIBILITY_NORMAL);
+
+ QJniObject activity = QNativeInterface::QAndroidApplication::context();
+ QVERIFY(activity.isValid());
+
+ QJniObject windowManager =
+ activity.callObjectMethod("getWindowManager", "()Landroid/view/WindowManager;");
+ QVERIFY(windowManager.isValid());
+
+ QJniObject display = windowManager.callObjectMethod("getDefaultDisplay", "()Landroid/view/Display;");
+ QVERIFY(display.isValid());
+
+ QJniObject appSize("android/graphics/Point");
+ QVERIFY(appSize.isValid());
+
+ display.callMethod<void>("getSize", "(Landroid/graphics/Point;)V", appSize.object());
+
+ QJniObject realSize("android/graphics/Point");
+ QVERIFY(realSize.isValid());
+
+ display.callMethod<void>("getRealSize", "(Landroid/graphics/Point;)V", realSize.object());
+
+ QPlatformScreen *screen = QGuiApplication::primaryScreen()->handle();
+
+ {
+ // Normal -
+ // available geometry == app size (system bars visible and removed from available geometry)
+ QCoreApplication::processEvents();
+ QJniObject window = activity.callObjectMethod("getWindow", "()Landroid/view/Window;");
+ QVERIFY(window.isValid());
+
+ QJniObject decorView = window.callObjectMethod("getDecorView", "()Landroid/view/View;");
+ QVERIFY(decorView.isValid());
+
+ QJniObject insets =
+ decorView.callObjectMethod("getRootWindowInsets", "()Landroid/view/WindowInsets;");
+ QVERIFY(insets.isValid());
+
+ int insetsWidth = insets.callMethod<jint>("getSystemWindowInsetRight")
+ + insets.callMethod<jint>("getSystemWindowInsetLeft");
+
+ int insetsHeight = insets.callMethod<jint>("getSystemWindowInsetTop")
+ + insets.callMethod<jint>("getSystemWindowInsetBottom");
+
+ QTRY_COMPARE(screen->availableGeometry().width(),
+ int(appSize.getField<jint>("x")) - insetsWidth);
+ QTRY_COMPARE(screen->availableGeometry().height(),
+ int(appSize.getField<jint>("y")) - insetsHeight);
+
+ QTRY_COMPARE(screen->geometry().width(), int(realSize.getField<jint>("x")));
+ QTRY_COMPARE(screen->geometry().height(), int(realSize.getField<jint>("y")));
+ }
+
+ {
+ setSystemUiVisibility(SYSTEM_UI_VISIBILITY_FULLSCREEN);
+
+ // Fullscreen
+ // available geometry == full display size (system bars hidden)
+ QCoreApplication::processEvents();
+ QTRY_COMPARE(screen->availableGeometry().width(), int(realSize.getField<jint>("x")));
+ QTRY_COMPARE(screen->availableGeometry().height(), int(realSize.getField<jint>("y")));
+
+ QTRY_COMPARE(screen->geometry().width(), int(realSize.getField<jint>("x")));
+ QTRY_COMPARE(screen->geometry().height(), int(realSize.getField<jint>("y")));
+ }
+
+ {
+ setSystemUiVisibility(SYSTEM_UI_VISIBILITY_TRANSLUCENT);
+
+ // Translucent
+ // available geometry == full display size (system bars visible but drawable under)
+ QCoreApplication::processEvents();
+ QTRY_COMPARE(screen->availableGeometry().width(), int(realSize.getField<jint>("x")));
+ QTRY_COMPARE(screen->availableGeometry().height(), int(realSize.getField<jint>("y")));
+
+ QTRY_COMPARE(screen->geometry().width(), int(realSize.getField<jint>("x")));
+ QTRY_COMPARE(screen->geometry().height(), int(realSize.getField<jint>("y")));
+ }
+}
+
+void tst_Android::orientationChange_data()
+{
+ QTest::addColumn<int>("nativeOrientation");
+ QTest::addColumn<Qt::ScreenOrientation>("expected");
+ QTest::addColumn<QSize>("screenSize");
+
+ const QSize portraitSize = QGuiApplication::primaryScreen()->size();
+ const QSize landscapeSize = QSize(portraitSize.height(), portraitSize.width());
+
+ // Rotations without 180 degree or inverted portrait, assuming that the device is in portrait
+ // position. These are ok for Android 6(API 23), 8 (API 27) and 14 (API 34)
+ QTest::newRow("InvertedLandscape") << 8 << Qt::InvertedLandscapeOrientation << landscapeSize;
+ QTest::newRow("Portrait") << 1 << Qt::PortraitOrientation << portraitSize;
+ QTest::newRow("Landscape") << 0 << Qt::LandscapeOrientation << landscapeSize;
+ QTest::newRow("Portrait2") << 1 << Qt::PortraitOrientation << portraitSize;
+
+ // Rotations over inverted portrait doing only 90 degree turns.
+ QTest::newRow("InvertedLandscape2") << 8 << Qt::InvertedLandscapeOrientation << landscapeSize;
+ QTest::newRow("InvertedPortrait") << 9 << Qt::InvertedPortraitOrientation << portraitSize;
+ QTest::newRow("Landscape2") << 0 << Qt::LandscapeOrientation << landscapeSize;
+ QTest::newRow("InvertedPortrait2") << 9 << Qt::InvertedPortraitOrientation << portraitSize;
+ QTest::newRow("InvertedLandscape3") << 8 << Qt::InvertedLandscapeOrientation << landscapeSize;
+
+ // Rotations with 180 degree turns.
+ // Android 6 (API23) Does not understand these transitions.
+ if (QNativeInterface::QAndroidApplication::sdkVersion() > __ANDROID_API_M__) {
+ QTest::newRow("Landscape3") << 0 << Qt::LandscapeOrientation << landscapeSize;
+ QTest::newRow("InvertedLandscape4")
+ << 8 << Qt::InvertedLandscapeOrientation << landscapeSize;
+ QTest::newRow("Portrait3") << 1 << Qt::PortraitOrientation << portraitSize;
+ } else {
+ qWarning() << "180 degree turn rotation test cases are not run on Android 6 (API 23) and "
+ "below.";
+ }
+ // Android 8 (API 27) does not understand portrait-'inverted portrait'-portrait transition.
+ if (QNativeInterface::QAndroidApplication::sdkVersion() > __ANDROID_API_O_MR1__) {
+ QTest::newRow("InvertedPortrait3") << 9 << Qt::InvertedPortraitOrientation << portraitSize;
+ QTest::newRow("Portrait4") << 1 << Qt::PortraitOrientation << portraitSize;
+ } else {
+ qWarning() << "Portrait-'Inverted portrait'-Portrait rotation test cases are not run on "
+ "Android 8 (API 27) and below.";
+ }
+}
+
+void tst_Android::orientationChange()
+{
+ QFETCH(int, nativeOrientation);
+ QFETCH(Qt::ScreenOrientation, expected);
+ QFETCH(QSize, screenSize);
+
+ // For QTBUG-94459 to check that the widget size are consistent after orientation changes
+ QWidget widget;
+ widget.show();
+
+ QScreen *screen = QGuiApplication::primaryScreen();
+ QSignalSpy orientationSpy(screen, SIGNAL(orientationChanged(Qt::ScreenOrientation)));
+
+ auto context = QNativeInterface::QAndroidApplication::context();
+ context.callMethod<void>("setRequestedOrientation", nativeOrientation);
+
+ orientationSpy.wait();
+ QTRY_COMPARE(screen->orientation(), expected);
+ QCOMPARE(orientationSpy.size(), 1);
+ QCOMPARE(screen->size(), screenSize);
+ QCOMPARE(widget.size(), screen->availableSize());
+}
+
QTEST_MAIN(tst_Android)
#include "tst_android.moc"
-
diff --git a/tests/auto/corelib/platform/android_appless/CMakeLists.txt b/tests/auto/corelib/platform/android_appless/CMakeLists.txt
new file mode 100644
index 0000000000..bcb7024b29
--- /dev/null
+++ b/tests/auto/corelib/platform/android_appless/CMakeLists.txt
@@ -0,0 +1,19 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_android_appless Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_android_appless LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_android_appless
+ SOURCES
+ tst_android_appless.cpp
+ LIBRARIES
+ Qt::Gui
+)
diff --git a/tests/auto/corelib/platform/android_appless/tst_android_appless.cpp b/tests/auto/corelib/platform/android_appless/tst_android_appless.cpp
new file mode 100644
index 0000000000..cb7ad8875c
--- /dev/null
+++ b/tests/auto/corelib/platform/android_appless/tst_android_appless.cpp
@@ -0,0 +1,53 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QTimer>
+#include <QGuiApplication>
+#include <QWindow>
+
+using namespace Qt::StringLiterals;
+
+class tst_AndroidAppless : public QObject
+{
+ Q_OBJECT
+private slots:
+ void app_data();
+ void app();
+
+};
+
+#define CREATE_DUMMY_ARGC_ARGV() \
+ int argc = 1; \
+ char *argv[] = { const_cast<char *>("tst_android_appless") };
+
+
+void tst_AndroidAppless::app_data()
+{
+ QTest::addColumn<QString>("displayName");
+ QTest::addRow("one") << "The first QGuiApplication instance";
+ QTest::addRow("two") << "The second QGuiApplication instance";
+}
+
+void tst_AndroidAppless::app()
+{
+ QFETCH(const QString, displayName);
+ CREATE_DUMMY_ARGC_ARGV()
+
+ QGuiApplication app(argc, argv);
+ app.setApplicationDisplayName(displayName);
+
+ QWindow window;
+ window.show();
+
+ QTimer::singleShot(1000, &app, QGuiApplication::quit);
+
+ window.show();
+ app.exec();
+}
+
+#undef CREATE_DUMMY_ARGC_ARGV
+
+QTEST_APPLESS_MAIN(tst_AndroidAppless)
+#include "tst_android_appless.moc"
+
diff --git a/tests/auto/corelib/platform/windows/CMakeLists.txt b/tests/auto/corelib/platform/windows/CMakeLists.txt
new file mode 100644
index 0000000000..24b2a69a0e
--- /dev/null
+++ b/tests/auto/corelib/platform/windows/CMakeLists.txt
@@ -0,0 +1,4 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(qcomobject)
diff --git a/tests/auto/corelib/platform/windows/qcomobject/CMakeLists.txt b/tests/auto/corelib/platform/windows/qcomobject/CMakeLists.txt
new file mode 100644
index 0000000000..9cdd6b57bc
--- /dev/null
+++ b/tests/auto/corelib/platform/windows/qcomobject/CMakeLists.txt
@@ -0,0 +1,19 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qcomobject Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcomobject LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qcomobject
+ SOURCES
+ tst_qcomobject.cpp
+ LIBRARIES
+ Qt::CorePrivate
+)
diff --git a/tests/auto/corelib/platform/windows/qcomobject/tst_qcomobject.cpp b/tests/auto/corelib/platform/windows/qcomobject/tst_qcomobject.cpp
new file mode 100644
index 0000000000..5ad961ee66
--- /dev/null
+++ b/tests/auto/corelib/platform/windows/qcomobject/tst_qcomobject.cpp
@@ -0,0 +1,268 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+
+#ifdef Q_OS_WIN
+
+# include <private/qcomobject_p.h>
+
+# include <wrl/client.h>
+
+using Microsoft::WRL::ComPtr;
+
+QT_BEGIN_NAMESPACE
+
+template <typename T, typename... Args>
+ComPtr<T> makeComObject(Args &&...args)
+{
+ ComPtr<T> p;
+ // Don't use Attach because of MINGW64 bug
+ // #892 Microsoft::WRL::ComPtr::Attach leaks references
+ *p.GetAddressOf() = new T(std::forward<Args>(args)...);
+ return p;
+}
+
+MIDL_INTERFACE("878fab04-7da0-41ea-9c49-058c7fa0d80a")
+IIntermediate : public IUnknown{};
+
+MIDL_INTERFACE("65a29ce9-191c-4182-9185-06dd70aafc5d")
+IDirect : public IIntermediate{};
+
+class ComImplementation : public QComObject<IDirect>
+{
+};
+
+MIDL_INTERFACE("d05397e0-da7f-4055-8563-a5b80f095e6c")
+IMultipleA : public IUnknown{};
+
+MIDL_INTERFACE("67e298c5-ec5f-4c45-a779-bfba2484e142")
+IMultipleB : public IUnknown{};
+
+class MultipleComImplementation : public QComObject<IMultipleA, IMultipleB>
+{
+};
+
+MIDL_INTERFACE("b8278a1b-0c3b-4bbd-99db-1e8a141483fa")
+IOther : public IUnknown{};
+
+# ifdef __CRT_UUID_DECL
+__CRT_UUID_DECL(IIntermediate, 0x878fab04, 0x7da0, 0x41ea, 0x9c, 0x49, 0x05, 0x8c, 0x7f, 0xa0, 0xd8,
+ 0x0a)
+__CRT_UUID_DECL(IDirect, 0x65a29ce9, 0x191c, 0x4182, 0x91, 0x85, 0x06, 0xdd, 0x70, 0xaa, 0xfc, 0x5d)
+__CRT_UUID_DECL(IMultipleA, 0xd05397e0, 0xda7f, 0x4055, 0x85, 0x63, 0xa5, 0xb8, 0x0f, 0x09, 0x5e,
+ 0x6c)
+__CRT_UUID_DECL(IMultipleB, 0x67e298c5, 0xec5f, 0x4c45, 0xa7, 0x79, 0xbf, 0xba, 0x24, 0x84, 0xe1,
+ 0x42)
+__CRT_UUID_DECL(IOther, 0xb8278a1b, 0x0c3b, 0x4bbd, 0x99, 0xdb, 0x1e, 0x8a, 0x14, 0x14, 0x83, 0xfa)
+# endif
+
+namespace QtPrivate {
+
+template <>
+struct QComObjectTraits<IDirect>
+{
+ static constexpr bool isGuidOf(REFIID riid) noexcept
+ {
+ return QComObjectTraits<IDirect, IIntermediate>::isGuidOf(riid);
+ }
+};
+
+} // namespace QtPrivate
+
+class tst_QComObject : public QObject
+{
+ Q_OBJECT
+private slots:
+ void QueryInterface_returnsConvertedPointer_whenIUnknownIsRequested();
+ void QueryInterface_returnsConvertedPointer_whenDirectParentIsRequested();
+ void QueryInterface_returnsConvertedPointer_whenDirectIntermediateIsRequested();
+ void QueryInterface_returnsConvertedPointer_whenIUnknownOfMultipleParentsIsRequested();
+ void QueryInterface_returnsConvertedPointer_whenFirstOfMultipleParentsIsRequested();
+ void QueryInterface_returnsConvertedPointer_whenSecondOfMultipleParentsIsRequested();
+ void QueryInterface_returnsNullPointer_whenNonParentIsRequested();
+ void QueryInterface_returnsNullPointer_whenNullPointerIsPassedForReceivingObject();
+ void QueryInterface_incrementsReferenceCount_whenConvertedPointerIsReturned();
+ void AddRef_incrementsReferenceCountByOne();
+ void Release_decrementsReferenceCountByOne();
+};
+
+void tst_QComObject::QueryInterface_returnsConvertedPointer_whenIUnknownIsRequested()
+{
+ // Arrange
+ const ComPtr<ComImplementation> implementation = makeComObject<ComImplementation>();
+
+ ComPtr<IUnknown> unknown;
+
+ // Act
+ const HRESULT queryResult = implementation->QueryInterface(__uuidof(IUnknown), &unknown);
+
+ // Assert
+ QCOMPARE(queryResult, S_OK);
+ QCOMPARE(unknown.Get(), implementation.Get());
+}
+
+void tst_QComObject::QueryInterface_returnsConvertedPointer_whenDirectParentIsRequested()
+{
+ // Arrange
+ const ComPtr<ComImplementation> implementation = makeComObject<ComImplementation>();
+
+ ComPtr<IDirect> direct;
+
+ // Act
+ const HRESULT queryResult = implementation->QueryInterface(__uuidof(IDirect), &direct);
+
+ // Assert
+ QCOMPARE(queryResult, S_OK);
+ QCOMPARE(direct.Get(), implementation.Get());
+}
+
+void tst_QComObject::QueryInterface_returnsConvertedPointer_whenDirectIntermediateIsRequested()
+{
+ // Arrange
+ const ComPtr<ComImplementation> implementation = makeComObject<ComImplementation>();
+
+ ComPtr<IIntermediate> intermediate;
+
+ // Act
+ const HRESULT queryResult =
+ implementation->QueryInterface(__uuidof(IIntermediate), &intermediate);
+
+ // Assert
+ QCOMPARE(queryResult, S_OK);
+ QCOMPARE(intermediate.Get(), implementation.Get());
+}
+
+void tst_QComObject::
+ QueryInterface_returnsConvertedPointer_whenIUnknownOfMultipleParentsIsRequested()
+{
+ // Arrange
+ const ComPtr<MultipleComImplementation> implementation =
+ makeComObject<MultipleComImplementation>();
+
+ ComPtr<IUnknown> unknown;
+
+ // Act
+ const HRESULT queryResult = implementation->QueryInterface(__uuidof(IUnknown), &unknown);
+
+ // Assert
+ QCOMPARE(queryResult, S_OK);
+
+ // Cast MultipleComImplementation to IMultipleA to prevent ambiguity
+ QCOMPARE(unknown.Get(), static_cast<IMultipleA *>(implementation.Get()));
+}
+
+void tst_QComObject::QueryInterface_returnsConvertedPointer_whenFirstOfMultipleParentsIsRequested()
+{
+ // Arrange
+ const ComPtr<MultipleComImplementation> implementation =
+ makeComObject<MultipleComImplementation>();
+
+ ComPtr<IMultipleA> multiple;
+
+ // Act
+ const HRESULT queryResult = implementation->QueryInterface(__uuidof(IMultipleA), &multiple);
+
+ // Assert
+ QCOMPARE(queryResult, S_OK);
+ QCOMPARE(multiple.Get(), implementation.Get());
+}
+
+void tst_QComObject::QueryInterface_returnsConvertedPointer_whenSecondOfMultipleParentsIsRequested()
+{
+ // Arrange
+ const ComPtr<MultipleComImplementation> implementation =
+ makeComObject<MultipleComImplementation>();
+
+ ComPtr<IMultipleB> multiple;
+
+ // Act
+ const HRESULT queryResult = implementation->QueryInterface(__uuidof(IMultipleB), &multiple);
+
+ // Assert
+ QCOMPARE(queryResult, S_OK);
+ QCOMPARE(multiple.Get(), implementation.Get());
+}
+
+void tst_QComObject::QueryInterface_returnsNullPointer_whenNonParentIsRequested()
+{
+ // Arrange
+ const ComPtr<ComImplementation> implementation = makeComObject<ComImplementation>();
+
+ ComPtr<IOther> other;
+
+ // Act
+ const HRESULT queryResult = implementation->QueryInterface(__uuidof(IOther), &other);
+
+ // Assert
+ QCOMPARE(queryResult, E_NOINTERFACE);
+ QCOMPARE(other.Get(), nullptr);
+}
+
+void tst_QComObject::QueryInterface_returnsNullPointer_whenNullPointerIsPassedForReceivingObject()
+{
+ // Arrange
+ const ComPtr<ComImplementation> implementation = makeComObject<ComImplementation>();
+
+ // Act
+ const HRESULT queryResult = implementation->QueryInterface(__uuidof(IUnknown), nullptr);
+
+ // Assert
+ QCOMPARE(queryResult, E_POINTER);
+}
+
+void tst_QComObject::QueryInterface_incrementsReferenceCount_whenConvertedPointerIsReturned()
+{
+ // Arrange
+ const ComPtr<ComImplementation> implementation = makeComObject<ComImplementation>();
+
+ ComPtr<IUnknown> unknown;
+
+ // Act
+ implementation->QueryInterface(__uuidof(IUnknown), &unknown);
+
+ // As there's no any way to get the current reference count of an object, just add one more
+ // reference and assert against cumulative reference count value
+ const ULONG referenceCount = implementation->AddRef();
+
+ // Assert
+ QCOMPARE(referenceCount, 3);
+}
+
+void tst_QComObject::AddRef_incrementsReferenceCountByOne()
+{
+ // Arrange
+ const ComPtr<ComImplementation> implementation = makeComObject<ComImplementation>();
+
+ // Act
+ const ULONG referenceCount1 = implementation->AddRef();
+ const ULONG referenceCount2 = implementation->AddRef();
+
+ // Assert
+ QCOMPARE(referenceCount1, 2);
+ QCOMPARE(referenceCount2, 3);
+}
+
+void tst_QComObject::Release_decrementsReferenceCountByOne()
+{
+ // Arrange
+ const ComPtr<ComImplementation> implementation = makeComObject<ComImplementation>();
+
+ implementation->AddRef();
+ implementation->AddRef();
+
+ // Act
+ const ULONG referenceCount1 = implementation->Release();
+ const ULONG referenceCount2 = implementation->Release();
+
+ // Assert
+ QCOMPARE(referenceCount1, 2);
+ QCOMPARE(referenceCount2, 1);
+}
+
+QTEST_MAIN(tst_QComObject)
+# include "tst_qcomobject.moc"
+
+QT_END_NAMESPACE
+
+#endif // Q_OS_WIN
diff --git a/tests/auto/corelib/plugin/CMakeLists.txt b/tests/auto/corelib/plugin/CMakeLists.txt
index 14ce4c316d..5518231ace 100644
--- a/tests/auto/corelib/plugin/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/CMakeLists.txt
@@ -1,16 +1,14 @@
-# Generated from plugin.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# QTBUG-87438 # special case
-if(QT_BUILD_SHARED_LIBS AND NOT ANDROID)
+if(QT_BUILD_SHARED_LIBS)
add_subdirectory(qfactoryloader)
endif()
add_subdirectory(quuid)
-# QTBUG-87438 # special case
-if(QT_FEATURE_library AND NOT ANDROID)
+if(QT_FEATURE_library)
add_subdirectory(qpluginloader)
add_subdirectory(qlibrary)
endif()
-# QTBUG-87438 # special case
-if(QT_BUILD_SHARED_LIBS AND QT_FEATURE_library AND NOT ANDROID)
+if(QT_BUILD_SHARED_LIBS AND QT_FEATURE_library)
add_subdirectory(qplugin)
endif()
diff --git a/tests/auto/corelib/plugin/qfactoryloader/CMakeLists.txt b/tests/auto/corelib/plugin/qfactoryloader/CMakeLists.txt
index 6263be15a2..14174da173 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qfactoryloader/CMakeLists.txt
@@ -1,5 +1,13 @@
-# Generated from qfactoryloader.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_qfactoryloader LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(plugin1)
add_subdirectory(plugin2)
+add_subdirectory(staticplugin)
add_subdirectory(test)
diff --git a/tests/auto/corelib/plugin/qfactoryloader/plugin1/CMakeLists.txt b/tests/auto/corelib/plugin/qfactoryloader/plugin1/CMakeLists.txt
index 247c905d9e..c7cedd7e0c 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/plugin1/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qfactoryloader/plugin1/CMakeLists.txt
@@ -1,30 +1,31 @@
-# Generated from plugin1.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## plugin1 Generic Library:
#####################################################################
-qt_internal_add_cmake_library(plugin1
+qt_internal_add_cmake_library(tst_qfactoryloader_plugin1
MODULE
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qfactoryloader/bin"
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
SOURCES
plugin1.cpp plugin1.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
-#### Keys ignored in scope 1:.:.:plugin1.pro:<TRUE>:
-# INSTALLS = "target"
-# TEMPLATE = "lib"
-# target.path = "$$[QT_INSTALL_TESTS]/tst_qfactoryloader/bin"
+if(ANDROID)
+ # On Android the plugins must match the following mask:
+ # "libplugins_{suffix}_*.so"
+ # and the testcase uses "bin" as a suffix
+ set_target_properties(tst_qfactoryloader_plugin1 PROPERTIES
+ OUTPUT_NAME "plugins_bin_tst_qfactoryloader_plugin1")
+endif()
-## Scopes:
-#####################################################################
-
-qt_internal_extend_target(plugin1 CONDITION NOT QT_FEATURE_library
+qt_internal_extend_target(tst_qfactoryloader_plugin1 CONDITION NOT QT_FEATURE_library
DEFINES
QT_STATICPLUGIN
)
-qt_autogen_tools_initial_setup(plugin1)
+qt_autogen_tools_initial_setup(tst_qfactoryloader_plugin1)
diff --git a/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.cpp b/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.cpp
index bfa49dc34e..6731d560a7 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.cpp
+++ b/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.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 <QtCore/qstring.h>
#include "plugin1.h"
@@ -32,3 +7,5 @@ QString Plugin1::pluginName() const
{
return QLatin1String("Plugin1 ok");
}
+
+#include "moc_plugin1.cpp"
diff --git a/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.h b/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.h
index 8091ba52bf..aba0b5c2f5 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.h
+++ b/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.h
@@ -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
#ifndef THEPLUGIN_H
#define THEPLUGIN_H
@@ -35,7 +10,7 @@
class Plugin1 : public QObject, public PluginInterface1
{
Q_OBJECT
- Q_PLUGIN_METADATA(IID "org.qt-project.Qt.autotests.plugininterface1")
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.autotests.plugininterface1" FILE "plugin1.json")
Q_INTERFACES(PluginInterface1)
public:
diff --git a/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.json b/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.json
new file mode 100644
index 0000000000..ce67846d48
--- /dev/null
+++ b/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugin1.json
@@ -0,0 +1,5 @@
+{
+ "Keys": [
+ "plugin1"
+ ]
+}
diff --git a/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugininterface1.h b/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugininterface1.h
index 408e963adf..a652273eb5 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugininterface1.h
+++ b/tests/auto/corelib/plugin/qfactoryloader/plugin1/plugininterface1.h
@@ -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
#ifndef PLUGININTERFACE1_H
#define PLUGININTERFACE1_H
diff --git a/tests/auto/corelib/plugin/qfactoryloader/plugin2/CMakeLists.txt b/tests/auto/corelib/plugin/qfactoryloader/plugin2/CMakeLists.txt
index a384a40412..259d6fb739 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/plugin2/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qfactoryloader/plugin2/CMakeLists.txt
@@ -1,30 +1,31 @@
-# Generated from plugin2.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## plugin2 Generic Library:
#####################################################################
-qt_internal_add_cmake_library(plugin2
+qt_internal_add_cmake_library(tst_qfactoryloader_plugin2
MODULE
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qfactoryloader/bin"
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
SOURCES
plugin2.cpp plugin2.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
-#### Keys ignored in scope 1:.:.:plugin2.pro:<TRUE>:
-# INSTALLS = "target"
-# TEMPLATE = "lib"
-# target.path = "$$[QT_INSTALL_TESTS]/tst_qfactoryloader/bin"
+if(ANDROID)
+ # On Android the plugins must match the following mask:
+ # "libplugins_{suffix}_*.so"
+ # and the testcase uses "bin" as a suffix
+ set_target_properties(tst_qfactoryloader_plugin2 PROPERTIES
+ OUTPUT_NAME "plugins_bin_tst_qfactoryloader_plugin2")
+endif()
-## Scopes:
-#####################################################################
-
-qt_internal_extend_target(plugin2 CONDITION NOT QT_FEATURE_library
+qt_internal_extend_target(tst_qfactoryloader_plugin2 CONDITION NOT QT_FEATURE_library
DEFINES
QT_STATICPLUGIN
)
-qt_autogen_tools_initial_setup(plugin2)
+qt_autogen_tools_initial_setup(tst_qfactoryloader_plugin2)
diff --git a/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.cpp b/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.cpp
index 34a7207f10..c2ac873317 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.cpp
+++ b/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.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 <QtCore/qstring.h>
#include "plugin2.h"
@@ -32,3 +7,5 @@ QString Plugin2::pluginName() const
{
return QLatin1String("Plugin2 ok");
}
+
+#include "moc_plugin2.cpp"
diff --git a/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.h b/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.h
index ce214f7571..02ef062b77 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.h
+++ b/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugin2.h
@@ -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
#ifndef THEPLUGIN_H
#define THEPLUGIN_H
diff --git a/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugininterface2.h b/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugininterface2.h
index e9b7e14048..df30f2ffd3 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugininterface2.h
+++ b/tests/auto/corelib/plugin/qfactoryloader/plugin2/plugininterface2.h
@@ -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
#ifndef PLUGININTERFACE2_H
#define PLUGININTERFACE2_H
diff --git a/tests/auto/corelib/plugin/qfactoryloader/staticplugin/CMakeLists.txt b/tests/auto/corelib/plugin/qfactoryloader/staticplugin/CMakeLists.txt
new file mode 100644
index 0000000000..c43a69c707
--- /dev/null
+++ b/tests/auto/corelib/plugin/qfactoryloader/staticplugin/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_cmake_library(tst_qfactoryloader_staticplugin
+ STATIC
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Core
+)
+
+qt_autogen_tools_initial_setup(tst_qfactoryloader_staticplugin)
+
+target_compile_definitions(tst_qfactoryloader_staticplugin PRIVATE QT_STATICPLUGIN)
diff --git a/tests/auto/corelib/plugin/qfactoryloader/staticplugin/main.cpp b/tests/auto/corelib/plugin/qfactoryloader/staticplugin/main.cpp
new file mode 100644
index 0000000000..6506f9cf9b
--- /dev/null
+++ b/tests/auto/corelib/plugin/qfactoryloader/staticplugin/main.cpp
@@ -0,0 +1,22 @@
+// Copyright (C) 2018 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include <QtPlugin>
+#include <QObject>
+
+class StaticPlugin1 : public QObject
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "StaticPlugin1" FILE "plugin.json")
+public:
+ StaticPlugin1() {}
+};
+
+class StaticPlugin2 : public QObject
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "StaticPlugin2" FILE "plugin.json")
+public:
+ StaticPlugin2() {}
+};
+
+#include "main.moc"
diff --git a/tests/auto/corelib/plugin/qfactoryloader/staticplugin/plugin.json b/tests/auto/corelib/plugin/qfactoryloader/staticplugin/plugin.json
new file mode 100644
index 0000000000..7321080fb4
--- /dev/null
+++ b/tests/auto/corelib/plugin/qfactoryloader/staticplugin/plugin.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "Value" ]
+}
diff --git a/tests/auto/corelib/plugin/qfactoryloader/test/CMakeLists.txt b/tests/auto/corelib/plugin/qfactoryloader/test/CMakeLists.txt
index 675dbbd684..fb3b6f5acb 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/test/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qfactoryloader/test/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfactoryloader Test:
@@ -10,60 +11,22 @@ qt_internal_add_test(tst_qfactoryloader
../plugin1/plugininterface1.h
../plugin2/plugininterface2.h
../tst_qfactoryloader.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ tst_qfactoryloader_staticplugin
)
-## Scopes:
-#####################################################################
-
-# special case begin
-if (NOT QT_FEATURE_library)
- target_link_directories(tst_qfactoryloader PRIVATE "${CMAKE_CURRENT_BINARY_DIR}../bin")
-endif()
-# special case end
-
qt_internal_extend_target(tst_qfactoryloader CONDITION NOT QT_FEATURE_library
- PUBLIC_LIBRARIES
- # Remove: L
- # special case begin
- # this part is handled as a special case above
- # ../bin/
- # special case end
+ LIBRARIES
+ tst_qfactoryloader_plugin1
+ tst_qfactoryloader_plugin2
)
-if(ANDROID)
- # special case begin
- set_source_files_properties(
- ${CMAKE_CURRENT_BINARY_DIR}/../bin/libplugin1.so
- PROPERTIES QT_RESOURCE_TARGET_DEPENDENCY plugin1
- )
-
- set_source_files_properties(
- ${CMAKE_CURRENT_BINARY_DIR}/../bin/libplugin2.so
- PROPERTIES QT_RESOURCE_TARGET_DEPENDENCY plugin2
- )
- # Resources:
- if (ANDROID)
- set(qmake_libs_resource_files
- bin/libplugin1_${CMAKE_ANDROID_ARCH_ABI}.so
- bin/libplugin2_${CMAKE_ANDROID_ARCH_ABI}.so
- )
- else()
- set(qmake_libs_resource_files
- bin/libplugin1.so
- bin/libplugin2.so
- )
- endif()
- list(TRANSFORM qmake_libs_resource_files PREPEND "${CMAKE_CURRENT_BINARY_DIR}/../")
- # special case end
+add_dependencies(tst_qfactoryloader tst_qfactoryloader_plugin1 tst_qfactoryloader_plugin2)
- qt_internal_add_resource(tst_qfactoryloader "qmake_libs"
- PREFIX
- "android_test_data"
- BASE
- "${CMAKE_CURRENT_BINARY_DIR}/.."
- FILES
- ${qmake_libs_resource_files}
+if(ANDROID)
+ # QT_ANDROID_EXTRA_PLUGINS requires a list of directories, not files!
+ set_target_properties(tst_qfactoryloader PROPERTIES
+ QT_ANDROID_EXTRA_PLUGINS "${CMAKE_CURRENT_BINARY_DIR}/../bin"
)
endif()
diff --git a/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp b/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp
index 862877fa6f..faec311f2d 100644
--- a/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp
+++ b/tests/auto/corelib/plugin/qfactoryloader/tst_qfactoryloader.cpp
@@ -1,36 +1,13 @@
-/****************************************************************************
-**
-** 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/qtest.h>
#include <QtCore/qdir.h>
#include <QtCore/qfileinfo.h>
#include <QtCore/qplugin.h>
+#include <QtCore/qversionnumber.h>
#include <private/qfactoryloader_p.h>
+#include <private/qlibrary_p.h>
#include "plugin1/plugininterface1.h"
#include "plugin2/plugininterface2.h"
@@ -43,10 +20,6 @@ class tst_QFactoryLoader : public QObject
{
Q_OBJECT
-#ifdef Q_OS_ANDROID
- QSharedPointer<QTemporaryDir> directory;
-#endif
-
QString binFolder;
public slots:
void initTestCase();
@@ -54,43 +27,83 @@ public slots:
private slots:
void usingTwoFactoriesFromSameDir();
void extraSearchPath();
+ void multiplePaths();
+ void staticPlugin_data();
+ void staticPlugin();
};
static const char binFolderC[] = "bin";
void tst_QFactoryLoader::initTestCase()
{
-#ifdef Q_OS_ANDROID
- directory = QEXTRACTTESTDATA("android_test_data");
- QVERIFY(directory);
- QVERIFY(directory->isValid());
- QVERIFY2(QDir::setCurrent(directory->path()), qPrintable("Could not chdir to " + directory->path()));
-#endif
+ // On Android the plugins are bundled into APK's libs subdir
+#ifndef Q_OS_ANDROID
binFolder = QFINDTESTDATA(binFolderC);
QVERIFY2(!binFolder.isEmpty(), "Unable to locate 'bin' folder");
+#endif
}
void tst_QFactoryLoader::usingTwoFactoriesFromSameDir()
{
-#if QT_CONFIG(library)
+#if QT_CONFIG(library) && !defined(Q_OS_ANDROID)
// set the library path to contain the directory where the 'bin' dir is located
QCoreApplication::setLibraryPaths( { QFileInfo(binFolder).absolutePath() });
#endif
+ auto versionNumber = [](const QCborValue &value) {
+ // Qt plugins only store major & minor versions in the metadata, so
+ // the low 8 bits are always zero.
+ qint64 v = value.toInteger();
+ return QVersionNumber(v >> 16, uchar(v >> 8));
+ };
+ QVersionNumber qtVersion(QT_VERSION_MAJOR, 0);
const QString suffix = QLatin1Char('/') + QLatin1String(binFolderC);
QFactoryLoader loader1(PluginInterface1_iid, suffix);
+ const QFactoryLoader::MetaDataList list1 = loader1.metaData();
+ const QList<QCborArray> keys1 = loader1.metaDataKeys();
+ QCOMPARE(list1.size(), 1);
+ QCOMPARE(keys1.size(), 1);
+ QCOMPARE_GE(versionNumber(list1[0].value(QtPluginMetaDataKeys::QtVersion)), qtVersion);
+ QCOMPARE(list1[0].value(QtPluginMetaDataKeys::IID), PluginInterface1_iid);
+ QCOMPARE(list1[0].value(QtPluginMetaDataKeys::ClassName), "Plugin1");
+
+ // plugin1's Q_PLUGIN_METADATA has FILE "plugin1.json"
+ QCborValue metadata1 = list1[0].value(QtPluginMetaDataKeys::MetaData);
+ QCOMPARE(metadata1.type(), QCborValue::Map);
+ QCOMPARE(metadata1["Keys"], QCborArray{ "plugin1" });
+ QCOMPARE(keys1[0], QCborArray{ "plugin1" });
+ QCOMPARE(loader1.indexOf("Plugin1"), 0);
+ QCOMPARE(loader1.indexOf("PLUGIN1"), 0);
+ QCOMPARE(loader1.indexOf("Plugin2"), -1);
- PluginInterface1 *plugin1 = qobject_cast<PluginInterface1 *>(loader1.instance(0));
+ QFactoryLoader loader2(PluginInterface2_iid, suffix);
+ const QFactoryLoader::MetaDataList list2 = loader2.metaData();
+ const QList<QCborArray> keys2 = loader2.metaDataKeys();
+ QCOMPARE(list2.size(), 1);
+ QCOMPARE(keys2.size(), 1);
+ QCOMPARE_GE(versionNumber(list2[0].value(QtPluginMetaDataKeys::QtVersion)), qtVersion);
+ QCOMPARE(list2[0].value(QtPluginMetaDataKeys::IID), PluginInterface2_iid);
+ QCOMPARE(list2[0].value(QtPluginMetaDataKeys::ClassName), "Plugin2");
+
+ // plugin2's Q_PLUGIN_METADATA does not have FILE
+ QCOMPARE(list2[0].value(QtPluginMetaDataKeys::MetaData), QCborValue());
+ QCOMPARE(keys2[0], QCborArray());
+ QCOMPARE(loader2.indexOf("Plugin1"), -1);
+ QCOMPARE(loader2.indexOf("Plugin2"), -1);
+
+ QObject *obj1 = loader1.instance(0);
+ PluginInterface1 *plugin1 = qobject_cast<PluginInterface1 *>(obj1);
QVERIFY2(plugin1,
qPrintable(QString::fromLatin1("Cannot load plugin '%1'")
.arg(QLatin1String(PluginInterface1_iid))));
+ QCOMPARE(obj1->metaObject()->className(), "Plugin1");
- QFactoryLoader loader2(PluginInterface2_iid, suffix);
-
- PluginInterface2 *plugin2 = qobject_cast<PluginInterface2 *>(loader2.instance(0));
+ QObject *obj2 = loader2.instance(0);
+ PluginInterface2 *plugin2 = qobject_cast<PluginInterface2 *>(obj2);
QVERIFY2(plugin2,
qPrintable(QString::fromLatin1("Cannot load plugin '%1'")
.arg(QLatin1String(PluginInterface2_iid))));
+ QCOMPARE(obj2->metaObject()->className(), "Plugin2");
QCOMPARE(plugin1->pluginName(), QLatin1String("Plugin1 ok"));
QCOMPARE(plugin2->pluginName(), QLatin1String("Plugin2 ok"));
@@ -101,15 +114,29 @@ void tst_QFactoryLoader::extraSearchPath()
#if defined(Q_OS_ANDROID) && !QT_CONFIG(library)
QSKIP("Test not applicable in this configuration.");
#else
+#ifdef Q_OS_ANDROID
+ // On Android the libs are not stored in binFolder, but bundled into
+ // APK's libs subdir
+ const QStringList androidLibsPaths = QCoreApplication::libraryPaths();
+ QCOMPARE(androidLibsPaths.size(), 1);
+#endif
QCoreApplication::setLibraryPaths(QStringList());
- QString absoluteBinPath = QFileInfo(binFolder).absoluteFilePath();
+#ifndef Q_OS_ANDROID
+ QString pluginsPath = QFileInfo(binFolder).absoluteFilePath();
QFactoryLoader loader1(PluginInterface1_iid, "/nonexistent");
+#else
+ QString pluginsPath = androidLibsPaths.first();
+ // On Android we still need to specify a valid suffix, because it's a part
+ // of a file name, not directory structure
+ const QString suffix = QLatin1Char('/') + QLatin1String(binFolderC);
+ QFactoryLoader loader1(PluginInterface1_iid, suffix);
+#endif
// it shouldn't have scanned anything because we haven't given it a path yet
QVERIFY(loader1.metaData().isEmpty());
- loader1.setExtraSearchPath(absoluteBinPath);
+ loader1.setExtraSearchPath(pluginsPath);
PluginInterface1 *plugin1 = qobject_cast<PluginInterface1 *>(loader1.instance(0));
QVERIFY2(plugin1,
qPrintable(QString::fromLatin1("Cannot load plugin '%1'")
@@ -123,5 +150,72 @@ void tst_QFactoryLoader::extraSearchPath()
#endif
}
+void tst_QFactoryLoader::multiplePaths()
+{
+#if !QT_CONFIG(library) || !(defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN)) || defined(Q_OS_ANDROID)
+ QSKIP("Test not applicable in this configuration.");
+#else
+ QTemporaryDir dir;
+ QVERIFY(dir.isValid());
+
+ QString pluginsPath = QFileInfo(binFolder, binFolderC).absolutePath();
+ QString linkPath = dir.filePath(binFolderC);
+ QVERIFY(QFile::link(pluginsPath, linkPath));
+
+ QCoreApplication::setLibraryPaths({ QFileInfo(binFolder).absolutePath(), dir.path() });
+
+ const QString suffix = QLatin1Char('/') + QLatin1String(binFolderC);
+ QFactoryLoader loader1(PluginInterface1_iid, suffix);
+
+ QLibraryPrivate *library1 = loader1.library("plugin1");
+ QVERIFY(library1);
+ QCOMPARE(library1->loadHints(), QLibrary::PreventUnloadHint);
+#endif
+}
+
+Q_IMPORT_PLUGIN(StaticPlugin1)
+Q_IMPORT_PLUGIN(StaticPlugin2)
+constexpr bool IsDebug =
+#ifdef QT_NO_DEBUG
+ false &&
+#endif
+ true;
+
+void tst_QFactoryLoader::staticPlugin_data()
+{
+ QTest::addColumn<QString>("iid");
+ auto addRow = [](const char *iid) {
+ QTest::addRow("%s", iid) << QString(iid);
+ };
+ addRow("StaticPlugin1");
+ addRow("StaticPlugin2");
+}
+
+void tst_QFactoryLoader::staticPlugin()
+{
+ QFETCH(QString, iid);
+ QFactoryLoader loader(iid.toLatin1(), "/irrelevant");
+ QFactoryLoader::MetaDataList list = loader.metaData();
+ QCOMPARE(list.size(), 1);
+
+ QCborMap map = list.at(0).toCbor();
+ QCOMPARE(map[int(QtPluginMetaDataKeys::QtVersion)],
+ QT_VERSION_CHECK(QT_VERSION_MAJOR, QT_VERSION_MINOR, 0));
+ QCOMPARE(map[int(QtPluginMetaDataKeys::IID)], iid);
+ QCOMPARE(map[int(QtPluginMetaDataKeys::ClassName)], iid);
+ QCOMPARE(map[int(QtPluginMetaDataKeys::IsDebug)], IsDebug);
+
+ QCborValue metaData = map[int(QtPluginMetaDataKeys::MetaData)];
+ QVERIFY(metaData.isMap());
+ QCOMPARE(metaData["Keys"], QCborArray{ "Value" });
+ QCOMPARE(loader.metaDataKeys(), QList{ QCborArray{ "Value" } });
+ QCOMPARE(loader.indexOf("Value"), 0);
+
+ // instantiate
+ QObject *instance = loader.instance(0);
+ QVERIFY(instance);
+ QCOMPARE(instance->metaObject()->className(), iid);
+}
+
QTEST_MAIN(tst_QFactoryLoader)
#include "tst_qfactoryloader.moc"
diff --git a/tests/auto/corelib/plugin/qlibrary/CMakeLists.txt b/tests/auto/corelib/plugin/qlibrary/CMakeLists.txt
index c0faebc91d..b8f4af5aa8 100644
--- a/tests/auto/corelib/plugin/qlibrary/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qlibrary/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qlibrary.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_qlibrary LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(lib)
add_subdirectory(lib2)
diff --git a/tests/auto/corelib/plugin/qlibrary/lib/CMakeLists.txt b/tests/auto/corelib/plugin/qlibrary/lib/CMakeLists.txt
index 0dbae9af6f..1a318e1483 100644
--- a/tests/auto/corelib/plugin/qlibrary/lib/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qlibrary/lib/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from lib.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## mylib Generic Library:
@@ -7,14 +8,12 @@
qt_internal_add_cmake_library(mylib
SHARED
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qlibrary"
- #OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case
SOURCES
mylib.c
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
-# special case begin
set_target_properties(mylib PROPERTIES
VERSION 1.0.0
SOVERSION 1
@@ -27,41 +26,45 @@ if(WIN32)
set_property(TARGET mylib PROPERTY PREFIX "")
endif()
-
-if (MACOS)
- add_custom_command(TARGET mylib POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- $<TARGET_FILE:mylib>
- "${CMAKE_CURRENT_BINARY_DIR}/../"
+if(UNIX)
+ if(APPLE)
+ add_custom_command(TARGET mylib POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
- "${CMAKE_CURRENT_BINARY_DIR}/*dylib"
- "${CMAKE_CURRENT_BINARY_DIR}/../"
- )
-elseif (UNIX)
- add_custom_command(TARGET mylib POST_BUILD
+ $<TARGET_FILE:mylib>
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.1.0.0.dylib"
+ COMMAND ${CMAKE_COMMAND} -E create_symlink
+ "libmylib.1.0.0.dylib"
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.1.dylib"
+ VERBATIM)
+ elseif(NOT ANDROID)
+ add_custom_command(TARGET mylib POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
- $<TARGET_FILE:mylib>
- "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so.1.0.0"
+ $<TARGET_FILE:mylib>
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so.1.0.0"
COMMAND ${CMAKE_COMMAND} -E create_symlink
- "libmylib.so.1.0.0"
- "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so.1"
+ "libmylib.so.1.0.0"
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so.1"
COMMAND ${CMAKE_COMMAND} -E create_symlink
- "libmylib.so.1.0.0"
- "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so1"
- )
+ "libmylib.so.1.0.0"
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so1"
+ VERBATIM)
+ else()
+ # Android does not use symlinks. Also, according to our conventions,
+ # libraries on Android MUST be named in the following pattern:
+ # lib*.so
+ add_custom_command(TARGET mylib POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ $<TARGET_FILE:mylib>
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so"
+ VERBATIM)
+ endif()
else() #Win32
add_custom_command(TARGET mylib POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:mylib>
"${CMAKE_CURRENT_BINARY_DIR}/../mylib.dll"
- )
+ VERBATIM)
endif()
-# special case end
-
-#### Keys ignored in scope 1:.:.:lib.pro:<TRUE>:
-# INSTALLS = "target"
-# TEMPLATE = "lib"
-# target.path = "$$[QT_INSTALL_TESTS]/tst_qlibrary"
## Scopes:
#####################################################################
@@ -70,9 +73,3 @@ qt_internal_extend_target(mylib CONDITION MSVC
DEFINES
WIN32_MSVC
)
-
-#### Keys ignored in scope 4:.:.:lib.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# DESTDIR = "../debug/"
-
-#### Keys ignored in scope 5:.:.:lib.pro:else:
-# DESTDIR = "../release/"
diff --git a/tests/auto/corelib/plugin/qlibrary/lib/mylib.c b/tests/auto/corelib/plugin/qlibrary/lib/mylib.c
index 419c22a446..61fe52d182 100644
--- a/tests/auto/corelib/plugin/qlibrary/lib/mylib.c
+++ b/tests/auto/corelib/plugin/qlibrary/lib/mylib.c
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <qglobal.h>
diff --git a/tests/auto/corelib/plugin/qlibrary/lib2/CMakeLists.txt b/tests/auto/corelib/plugin/qlibrary/lib2/CMakeLists.txt
index 7603f4f0cb..f6bdeb453a 100644
--- a/tests/auto/corelib/plugin/qlibrary/lib2/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qlibrary/lib2/CMakeLists.txt
@@ -1,20 +1,20 @@
-# Generated from lib2.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## mylib Generic Library:
#####################################################################
-qt_internal_add_cmake_library(mylib2 # special case
+qt_internal_add_cmake_library(mylib2
SHARED
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}tst_qlibrary"
- #OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case
+ #OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
mylib.c
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
-# special case begin
# This test is very "annoying" to get working with CMake as it involves having
# two targets with the same name on the parent scope, which is not possible with
# CMake. Furthermore, on UNIX, this version of the library should override the
@@ -39,26 +39,57 @@ if(WIN32)
set_property(TARGET mylib2 PROPERTY PREFIX "")
endif()
-if (UNIX)
- add_custom_command(TARGET mylib2 POST_BUILD
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
- $<TARGET_FILE:mylib2>
- "${CMAKE_CURRENT_BINARY_DIR}/../system.qt.test.mylib.so"
- COMMAND ${CMAKE_COMMAND} -E copy_if_different
+if(UNIX)
+ if(APPLE)
+ add_custom_command(TARGET mylib2 POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ $<TARGET_FILE:mylib2>
+ "${CMAKE_CURRENT_BINARY_DIR}/../system.qt.test.mylib.so.dylib"
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ $<TARGET_FILE:mylib2>
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.2.0.0.dylib"
+ COMMAND ${CMAKE_COMMAND} -E create_symlink
+ "libmylib.2.0.0.dylib"
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.2.dylib"
+ COMMAND ${CMAKE_COMMAND} -E remove
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.dylib"
+ COMMAND ${CMAKE_COMMAND} -E create_symlink
+ "libmylib.2.0.0.dylib"
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.dylib"
+ COMMAND ${CMAKE_COMMAND} -E create_symlink
+ "libmylib.2.0.0.dylib"
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so2.dylib"
+ VERBATIM)
+ elseif(NOT ANDROID)
+ add_custom_command(TARGET mylib2 POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ $<TARGET_FILE:mylib2>
+ "${CMAKE_CURRENT_BINARY_DIR}/../system.qt.test.mylib.so"
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
+ $<TARGET_FILE:mylib2>
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so.2.0.0"
+ COMMAND ${CMAKE_COMMAND} -E create_symlink
+ "libmylib.so.2.0.0"
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so.2"
+ COMMAND ${CMAKE_COMMAND} -E remove
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so"
+ COMMAND ${CMAKE_COMMAND} -E create_symlink
+ "libmylib.so.2.0.0"
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so"
+ COMMAND ${CMAKE_COMMAND} -E create_symlink
+ "libmylib.so.2.0.0"
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so2"
+ VERBATIM)
+ else()
+ # Android does not use symlinks. Also, according to our conventions,
+ # libraries on Android MUST be named in the following pattern:
+ # lib*.so
+ add_custom_command(TARGET mylib2 POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:mylib2>
- "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so.2.0.0"
- COMMAND ${CMAKE_COMMAND} -E create_symlink
- "libmylib.so.2.0.0"
- "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so.2"
- COMMAND ${CMAKE_COMMAND} -E remove
- "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so"
- COMMAND ${CMAKE_COMMAND} -E create_symlink
- "libmylib.so.2.0.0"
- "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so"
- COMMAND ${CMAKE_COMMAND} -E create_symlink
- "libmylib.so.2.0.0"
- "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so2"
- )
+ "${CMAKE_CURRENT_BINARY_DIR}/../libsystem.qt.test.mylib.so"
+ VERBATIM)
+ endif()
else() #Win32
add_custom_command(TARGET mylib2 POST_BUILD
COMMAND ${CMAKE_COMMAND} -E copy_if_different
@@ -67,43 +98,13 @@ else() #Win32
COMMAND ${CMAKE_COMMAND} -E copy_if_different
$<TARGET_FILE:mylib2>
"${CMAKE_CURRENT_BINARY_DIR}/../mylib.dl2"
- )
+ VERBATIM)
endif()
-# special case end
-
-#### Keys ignored in scope 1:.:.:lib2.pro:<TRUE>:
-# INSTALLS = "target" "renamed_target"
-# QMAKE_POST_LINK = "$$member(QMAKE_POST_LINK, 0, -2)"
-# TEMPLATE = "lib"
-# VERSION = "2"
-# renamed_target.extra = "$$member(renamed_target.extra, 0, -2)"
-# renamed_target.path = "$$target.path"
-# target.path = "$$[QT_INSTALL_TESTS]$${QMAKE_DIR_SEP}tst_qlibrary"
## Scopes:
#####################################################################
-qt_internal_extend_target(mylib2 CONDITION MSVC # special case
+qt_internal_extend_target(mylib2 CONDITION MSVC
DEFINES
WIN32_MSVC
)
-
-#### Keys ignored in scope 3:.:.:lib2.pro:WIN32:
-# DESTDIR = "../$$BUILD_FOLDER/"
-# files = "$$BUILD_FOLDER$${QMAKE_DIR_SEP}mylib.dl2" "$$BUILD_FOLDER$${QMAKE_DIR_SEP}system.qt.test.mylib.dll"
-
-#### Keys ignored in scope 4:.:.:lib2.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# BUILD_FOLDER = "debug"
-
-#### Keys ignored in scope 5:.:.:lib2.pro:else:
-# BUILD_FOLDER = "release"
-
-#### Keys ignored in scope 6:.:.:lib2.pro:TEMPLATE___contains___vc._x_:
-# src = "$(TargetPath)"
-
-#### Keys ignored in scope 7:.:.:lib2.pro:else:
-# src = "$(DESTDIR_TARGET)"
-
-#### Keys ignored in scope 8:.:.:lib2.pro:else:
-# files = "libmylib.so2" "system.qt.test.mylib.so"
-# src = "$(DESTDIR)$(TARGET)"
diff --git a/tests/auto/corelib/plugin/qlibrary/lib2/mylib.c b/tests/auto/corelib/plugin/qlibrary/lib2/mylib.c
index 74eb68b2ac..5312a9355b 100644
--- a/tests/auto/corelib/plugin/qlibrary/lib2/mylib.c
+++ b/tests/auto/corelib/plugin/qlibrary/lib2/mylib.c
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <qglobal.h>
diff --git a/tests/auto/corelib/plugin/qlibrary/tst/CMakeLists.txt b/tests/auto/corelib/plugin/qlibrary/tst/CMakeLists.txt
index 73c05aeebe..fc452f37f5 100644
--- a/tests/auto/corelib/plugin/qlibrary/tst/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qlibrary/tst/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from tst.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qlibrary Test:
@@ -12,42 +13,16 @@ qt_internal_add_test(tst_qlibrary
SOURCES
../tst_qlibrary.cpp
TESTDATA ${test_data}
- LIBRARIES mylib mylib2 # special case
+ LIBRARIES mylib mylib2
)
-## Scopes:
-#####################################################################
+add_dependencies(tst_qlibrary mylib mylib2)
if(ANDROID)
- # special case begin
- set_source_files_properties(
- ${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so
- PROPERTIES QT_RESOURCE_TARGET_DEPENDENCY mylib
- )
- set_source_files_properties(
- ${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so2
- ${CMAKE_CURRENT_BINARY_DIR}/../system.qt.test.mylib.so
- PROPERTIES QT_RESOURCE_TARGET_DEPENDENCY mylib2
- )
- # special case end
- # Resources:
- set(qmake_libs_resource_files
- # special case begin
- #libmylib.prl
- libmylib.so
- libmylib.so2
- system.qt.test.mylib.so
- # special case end
- )
-
- list(TRANSFORM qmake_libs_resource_files PREPEND "${CMAKE_CURRENT_BINARY_DIR}/../")
-
- qt_internal_add_resource(tst_qlibrary "qmake_libs"
- PREFIX
- "android_test_data"
- BASE
- "${CMAKE_CURRENT_BINARY_DIR}/.."
- FILES
- ${qmake_libs_resource_files}
- )
+ list(APPEND extra_libs
+ "${CMAKE_CURRENT_BINARY_DIR}/../libmylib.so")
+ list(APPEND extra_libs
+ "${CMAKE_CURRENT_BINARY_DIR}/../libsystem.qt.test.mylib.so")
+ set_target_properties(tst_qlibrary PROPERTIES
+ QT_ANDROID_EXTRA_LIBS "${extra_libs}")
endif()
diff --git a/tests/auto/corelib/plugin/qlibrary/tst_qlibrary.cpp b/tests/auto/corelib/plugin/qlibrary/tst_qlibrary.cpp
index 6ecbf393e2..28f4581997 100644
--- a/tests/auto/corelib/plugin/qlibrary/tst_qlibrary.cpp
+++ b/tests/auto/corelib/plugin/qlibrary/tst_qlibrary.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 <QTest>
@@ -104,24 +79,27 @@ enum QLibraryOperation {
QString sys_qualifiedLibraryName(const QString &fileName);
QString directory;
-#ifdef Q_OS_ANDROID
- QSharedPointer<QTemporaryDir> temporaryDir;
-#endif
private slots:
void initTestCase();
+ void cleanup();
- void load();
void load_data();
- void library_data();
+ void load();
void resolve_data();
void resolve();
void unload_data();
void unload();
void unload_after_implicit_load();
+ void setFilenameAfterFailedLoad();
+ void loadAfterFailedLoad();
void isLibrary_data();
void isLibrary();
void version_data();
void version();
+ void loadTwoVersions();
+ void setFileNameAndVersionTwice();
+ void setFileNameAndVersionAfterFailedLoad_data() { version_data(); }
+ void setFileNameAndVersionAfterFailedLoad();
void errorString_data();
void errorString();
void loadHints();
@@ -141,24 +119,9 @@ typedef int (*VersionFunction)(void);
void tst_QLibrary::initTestCase()
{
#ifdef Q_OS_ANDROID
- auto tempDir = QEXTRACTTESTDATA("android_test_data");
-
- QVERIFY2(QDir::setCurrent(tempDir->path()), qPrintable("Could not chdir to " + tempDir->path()));
-
- // copy :/library_path into ./library_path
- QVERIFY(QDir().mkdir("library_path"));
- QDirIterator iterator(":/library_path", QDirIterator::Subdirectories);
- while (iterator.hasNext()) {
- iterator.next();
- QFileInfo sourceFileInfo(iterator.path());
- QFileInfo targetFileInfo("./library_path/" + sourceFileInfo.fileName());
- if (!targetFileInfo.exists()) {
- QDir().mkpath(targetFileInfo.path());
- QVERIFY(QFile::copy(sourceFileInfo.filePath(), targetFileInfo.filePath()));
- }
- }
- directory = tempDir->path();
- temporaryDir = std::move(tempDir);
+ const QStringList paths = QCoreApplication::libraryPaths();
+ QVERIFY(!paths.isEmpty());
+ directory = paths.first();
#else
// chdir to our testdata directory, and use relative paths in some tests.
QString testdatadir = QFileInfo(QFINDTESTDATA("library_path")).absolutePath();
@@ -167,6 +130,38 @@ void tst_QLibrary::initTestCase()
#endif
}
+void tst_QLibrary::cleanup()
+{
+ // unload the libraries, if they are still loaded after the test ended
+ // (probably in a failure)
+
+ static struct {
+ QString name;
+ int version = -1;
+ } libs[] = {
+ { directory + "/mylib" },
+ { directory + "/mylib", 1 },
+ { directory + "/mylib", 2 },
+ { sys_qualifiedLibraryName("mylib") },
+
+ // stuff that load_data() succeeds with
+ { directory + "/" PREFIX "mylib" },
+ { directory + "/" PREFIX "mylib" SUFFIX },
+#if defined(Q_OS_WIN32)
+ { directory + "/mylib.dl2" },
+ { directory + "/system.qt.test.mylib.dll" },
+#elif !defined(Q_OS_ANDROID)
+ // .so even on macOS
+ { directory + "/libmylib.so2" },
+ { directory + "/system.qt.test.mylib.so" },
+#endif
+
+ };
+ for (const auto &entry : libs) {
+ do {} while (QLibrary(entry.name, entry.version).unload());
+ }
+}
+
void tst_QLibrary::version_data()
{
#ifdef Q_OS_ANDROID
@@ -203,6 +198,70 @@ void tst_QLibrary::version()
#endif
}
+void tst_QLibrary::loadTwoVersions()
+{
+#if defined(Q_OS_ANDROID) || defined(Q_OS_WIN)
+ QSKIP("Versioned files are not generated for this OS, so this test is not applicable.");
+#endif
+
+ QLibrary lib1(directory + "/mylib", 1);
+ QLibrary lib2(directory + "/mylib", 2);
+ QVERIFY(!lib1.isLoaded());
+ QVERIFY(!lib2.isLoaded());
+
+ // load the first one
+ QVERIFY(lib1.load());
+ QVERIFY(lib1.isLoaded());
+
+ // let's see if we can load the second one too
+ QVERIFY(lib2.load());
+ QVERIFY(lib2.isLoaded());
+
+ auto p1 = (VersionFunction)lib1.resolve("mylibversion");
+ QVERIFY(p1);
+
+ auto p2 = (VersionFunction)lib2.resolve("mylibversion");
+ QVERIFY(p2);
+
+ QCOMPARE_NE(p1(), p2());
+
+ lib2.unload();
+ lib1.unload();
+}
+
+void tst_QLibrary::setFileNameAndVersionTwice()
+{
+#if defined(Q_OS_ANDROID) || defined(Q_OS_WIN)
+ QSKIP("Versioned files are not generated for this OS, so this test is not applicable.");
+#endif
+
+ QLibrary library(directory + "/mylib", 1);
+ QVERIFY(library.load());
+ QVERIFY(library.isLoaded());
+
+ auto p1 = (VersionFunction)library.resolve("mylibversion");
+ QVERIFY(p1);
+ // don't .unload()
+
+ library.setFileNameAndVersion(directory + "/mylib", 2);
+ QVERIFY(!library.isLoaded());
+ QVERIFY(library.load());
+ QVERIFY(library.isLoaded());
+
+ auto p2 = (VersionFunction)library.resolve("mylibversion");
+ QVERIFY(p2);
+ QCOMPARE_NE(p1(), p2());
+
+ QVERIFY(library.unload());
+ QVERIFY(!library.isLoaded());
+
+ // set back
+ // it'll look like it isn't loaded, but it is and we can't unload it!
+ library.setFileNameAndVersion(directory + "/mylib", 1);
+ QVERIFY(!library.isLoaded());
+ QVERIFY(!library.unload());
+}
+
void tst_QLibrary::load_data()
{
QTest::addColumn<QString>("lib");
@@ -214,7 +273,7 @@ void tst_QLibrary::load_data()
QTest::newRow( "notexist" ) << appDir + "/nolib" << false;
QTest::newRow( "badlibrary" ) << appDir + "/qlibrary.pro" << false;
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
QTest::newRow("ok (libmylib ver. 1)") << appDir + "/libmylib" <<true;
#endif
@@ -224,7 +283,10 @@ void tst_QLibrary::load_data()
QTest::newRow( "ok03 (with many dots)" ) << appDir + "/system.qt.test.mylib.dll" << true;
# elif defined Q_OS_UNIX
QTest::newRow( "ok01 (with suffix)" ) << appDir + "/libmylib" SUFFIX << true;
+#ifndef Q_OS_ANDROID
+ // We do not support non-standard suffixes on Android
QTest::newRow( "ok02 (with non-standard suffix)" ) << appDir + "/libmylib.so2" << true;
+#endif
QTest::newRow( "ok03 (with many dots)" ) << appDir + "/system.qt.test.mylib.so" << true;
# endif // Q_OS_UNIX
}
@@ -280,6 +342,76 @@ void tst_QLibrary::unload_after_implicit_load()
QCOMPARE(library.isLoaded(), false);
}
+void tst_QLibrary::setFilenameAfterFailedLoad()
+{
+#if defined(Q_OS_WIN) || defined(Q_OS_ANDROID)
+ QSKIP("### FIXME: The helper libraries are currently messed up in the CMakeLists.txt");
+#endif
+
+ QLibrary library(directory + "/nolib");
+ QVERIFY(!library.load());
+ QVERIFY(!library.isLoaded());
+ QVERIFY(!library.load());
+ QVERIFY(!library.isLoaded());
+
+ library.setFileName(directory + "/mylib");
+ QVERIFY(library.load());
+ QVERIFY(library.isLoaded());
+ auto p = (VersionFunction)library.resolve("mylibversion");
+ QVERIFY(p);
+ QCOMPARE(p(), 2);
+ library.unload();
+}
+
+void tst_QLibrary::setFileNameAndVersionAfterFailedLoad()
+{
+ QLibrary library(directory + "/nolib");
+ QVERIFY(!library.load());
+ QVERIFY(!library.isLoaded());
+ QVERIFY(!library.load());
+ QVERIFY(!library.isLoaded());
+
+#if !defined(Q_OS_AIX) && !defined(Q_OS_WIN)
+ QFETCH(QString, lib);
+ QFETCH(int, loadversion);
+ QFETCH(int, resultversion);
+
+ library.setFileNameAndVersion(directory + '/' + lib, loadversion);
+ QVERIFY(library.load());
+ QVERIFY(library.isLoaded());
+ auto p = (VersionFunction)library.resolve("mylibversion");
+ QVERIFY(p);
+ QCOMPARE(p(), resultversion);
+ library.unload();
+#endif
+}
+
+void tst_QLibrary::loadAfterFailedLoad()
+{
+#if defined(Q_OS_WIN) || defined(Q_OS_ANDROID)
+ QSKIP("### FIXME: The helper libraries are currently messed up in the CMakeLists.txt");
+#endif
+
+ QTemporaryDir dir;
+ QLibrary library(dir.path() + "/mylib");
+ QVERIFY(!library.load());
+ QVERIFY(!library.isLoaded());
+ QVERIFY(!library.load());
+ QVERIFY(!library.isLoaded());
+
+ // now copy the actual lib file into our dir
+ QString actualLib = PREFIX "mylib" SUFFIX;
+ QVERIFY(QFile::copy(directory + '/' + actualLib, dir.filePath(actualLib)));
+
+ // try again, must succeed now
+ QVERIFY(library.load());
+ QVERIFY(library.isLoaded());
+ auto p = (VersionFunction)library.resolve("mylibversion");
+ QVERIFY(p);
+ QCOMPARE(p(), 2);
+ library.unload();
+}
+
void tst_QLibrary::resolve_data()
{
QTest::addColumn<QString>("lib");
@@ -300,21 +432,27 @@ void tst_QLibrary::resolve()
QFETCH( QString, symbol );
QFETCH( bool, goodPointer );
- QLibrary library( lib );
- testFunc func = (testFunc) library.resolve( symbol.toLatin1() );
- if ( goodPointer ) {
- QVERIFY( func != 0 );
+ QLibrary library(lib);
+ QVERIFY(!library.isLoaded());
+ testFunc func = (testFunc) library.resolve(symbol.toLatin1());
+
+ if (goodPointer) {
+ QVERIFY(library.isLoaded());
+ QVERIFY(func);
+
+ QLibrary lib2(lib);
+ QVERIFY(!lib2.isLoaded());
+ QVERIFY(lib2.load());
+
+ // this unload() won't unload and it must still be loaded
+ QVERIFY(!lib2.unload());
+ func(); // doesn't crash
} else {
- QVERIFY( func == 0 );
+ QVERIFY(func == nullptr);
}
library.unload();
}
-void tst_QLibrary::library_data()
-{
- QTest::addColumn<QString>("lib");
-}
-
void tst_QLibrary::isLibrary_data()
{
QTest::addColumn<QString>("filename");
@@ -335,7 +473,7 @@ void tst_QLibrary::isLibrary_data()
QTest::newRow("version+.so+version") << QString("liboil-0.3.so.0.1.0") << so_VALID;
// special tests:
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
QTest::newRow("good (libmylib.1.0.0.dylib)") << QString("libmylib.1.0.0.dylib") << true;
QTest::newRow("good (libmylib.dylib)") << QString("libmylib.dylib") << true;
QTest::newRow("good (libmylib.so)") << QString("libmylib.so") << true;
@@ -372,7 +510,7 @@ void tst_QLibrary::errorString_data()
#ifdef Q_OS_WIN
QTest::newRow("bad load() with .dll suffix") << (int)Load << QString("nosuchlib.dll") << false << QString("Cannot load library nosuchlib.dll: The specified module could not be found.");
// QTest::newRow("bad unload") << (int)Unload << QString("nosuchlib.dll") << false << QString("QLibrary::unload_sys: Cannot unload nosuchlib.dll (The specified module could not be found.)");
-#elif defined Q_OS_MAC
+#elif defined Q_OS_DARWIN
#else
QTest::newRow("load invalid file") << (int)Load << QFINDTESTDATA("library_path/invalid.so") << false << QString("Cannot load library.*");
#endif
@@ -438,7 +576,10 @@ void tst_QLibrary::loadHints_data()
QTest::newRow( "ok03 (with many dots)" ) << appDir + "/system.qt.test.mylib.dll" << int(lh) << true;
# elif defined Q_OS_UNIX
QTest::newRow( "ok01 (with suffix)" ) << appDir + "/libmylib" SUFFIX << int(lh) << true;
+#ifndef Q_OS_ANDROID
+ // We do not support non-standard suffixes on Android
QTest::newRow( "ok02 (with non-standard suffix)" ) << appDir + "/libmylib.so2" << int(lh) << true;
+#endif
QTest::newRow( "ok03 (with many dots)" ) << appDir + "/system.qt.test.mylib.so" << int(lh) << true;
# endif // Q_OS_UNIX
}
@@ -517,7 +658,7 @@ void tst_QLibrary::multipleInstancesForOneLibrary()
QCOMPARE(lib2.isLoaded(), false);
lib1.load();
QCOMPARE(lib1.isLoaded(), true);
- QCOMPARE(lib2.isLoaded(), true);
+ QCOMPARE(lib2.isLoaded(), false); // lib2 didn't call load()
QCOMPARE(lib1.unload(), true);
QCOMPARE(lib1.isLoaded(), false);
QCOMPARE(lib2.isLoaded(), false);
@@ -526,7 +667,7 @@ void tst_QLibrary::multipleInstancesForOneLibrary()
QCOMPARE(lib1.isLoaded(), true);
QCOMPARE(lib2.isLoaded(), true);
QCOMPARE(lib1.unload(), false);
- QCOMPARE(lib1.isLoaded(), true);
+ QCOMPARE(lib1.isLoaded(), false); // lib1 did call unload()
QCOMPARE(lib2.isLoaded(), true);
QCOMPARE(lib2.unload(), true);
QCOMPARE(lib1.isLoaded(), false);
@@ -535,17 +676,6 @@ void tst_QLibrary::multipleInstancesForOneLibrary()
// Finally; unload on that is already unloaded
QCOMPARE(lib1.unload(), false);
}
-
- //now let's try with a 3rd one that will go out of scope
- {
- QLibrary lib1(lib);
- QCOMPARE(lib1.isLoaded(), false);
- lib1.load();
- QCOMPARE(lib1.isLoaded(), true);
- }
- QLibrary lib2(lib);
- //lib2 should be loaded because lib1 was loaded and never unloaded
- QCOMPARE(lib2.isLoaded(), true);
}
QTEST_MAIN(tst_QLibrary)
diff --git a/tests/auto/corelib/plugin/qplugin/CMakeLists.txt b/tests/auto/corelib/plugin/qplugin/CMakeLists.txt
index 2c901eff44..d0e8736e09 100644
--- a/tests/auto/corelib/plugin/qplugin/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qplugin/CMakeLists.txt
@@ -1,27 +1,48 @@
-# Generated from qplugin.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-add_subdirectory(invalidplugin)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qplugin LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
-# special case begin
+add_subdirectory(invalidplugin)
add_subdirectory(debugplugin)
add_subdirectory(releaseplugin)
-# The contents below are generated from ./tst_qplugin.pro
-# Collect test data
-file(GLOB_RECURSE test_data_glob
- RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- plugins/*)
-list(APPEND test_data ${test_data_glob})
-
qt_internal_add_test(tst_qplugin
SOURCES
tst_qplugin.cpp
LIBRARIES
Qt::CorePrivate
- TESTDATA ${test_data}
)
+if(NOT ANDROID)
+ # Collect test data
+ file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ plugins/*)
+ list(APPEND test_data ${test_data_glob})
+ set_target_properties(tst_qplugin PROPERTIES TESTDATA "${test_data}")
+else()
+ # On Android the plugins must be located in the libs subdir of the APK.
+ # Use QT_ANDROID_EXTRA_LIBS to achieve that.
+ set(plugins
+ invalidplugin
+ debugplugin
+ releaseplugin
+ )
+ set(extra_libs)
+ foreach(plugin IN LISTS plugins)
+ list(APPEND extra_libs
+ "${CMAKE_CURRENT_BINARY_DIR}/plugins/lib${plugin}_${CMAKE_ANDROID_ARCH_ABI}.so")
+ endforeach()
+ set_target_properties(tst_qplugin PROPERTIES
+ QT_ANDROID_EXTRA_LIBS "${extra_libs}"
+ )
+endif()
+
target_compile_definitions(tst_qplugin PRIVATE CMAKE_BUILD=1)
add_dependencies(tst_qplugin invalidplugin debugplugin releaseplugin)
-# special case end
diff --git a/tests/auto/corelib/plugin/qplugin/debugplugin/CMakeLists.txt b/tests/auto/corelib/plugin/qplugin/debugplugin/CMakeLists.txt
index ee4c0cf33c..230282f175 100644
--- a/tests/auto/corelib/plugin/qplugin/debugplugin/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qplugin/debugplugin/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from debugplugin.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## debugplugin Generic Library:
@@ -9,11 +10,8 @@ qt_internal_add_cmake_library(debugplugin
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../plugins"
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
-#### Keys ignored in scope 1:.:.:debugplugin.pro:<TRUE>:
-# TEMPLATE = "lib"
-
qt_autogen_tools_initial_setup(debugplugin)
diff --git a/tests/auto/corelib/plugin/qplugin/debugplugin/main.cpp b/tests/auto/corelib/plugin/qplugin/debugplugin/main.cpp
index c610bfdc46..fe25c44d87 100644
--- a/tests/auto/corelib/plugin/qplugin/debugplugin/main.cpp
+++ b/tests/auto/corelib/plugin/qplugin/debugplugin/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 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 <QtPlugin>
#include <QObject>
diff --git a/tests/auto/corelib/plugin/qplugin/invalidplugin/CMakeLists.txt b/tests/auto/corelib/plugin/qplugin/invalidplugin/CMakeLists.txt
index b9cdf2af05..0b12e9c0f0 100644
--- a/tests/auto/corelib/plugin/qplugin/invalidplugin/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qplugin/invalidplugin/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from invalidplugin.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## invalidplugin Generic Library:
@@ -9,11 +10,10 @@ qt_internal_add_cmake_library(invalidplugin
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../plugins"
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
-#### Keys ignored in scope 1:.:.:invalidplugin.pro:<TRUE>:
# TEMPLATE = "lib"
qt_autogen_tools_initial_setup(invalidplugin)
diff --git a/tests/auto/corelib/plugin/qplugin/invalidplugin/main.cpp b/tests/auto/corelib/plugin/qplugin/invalidplugin/main.cpp
index 50340467b5..10b6131857 100644
--- a/tests/auto/corelib/plugin/qplugin/invalidplugin/main.cpp
+++ b/tests/auto/corelib/plugin/qplugin/invalidplugin/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Intel Corporation.
-** 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) 2018 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qplugin.h>
diff --git a/tests/auto/corelib/plugin/qplugin/releaseplugin/CMakeLists.txt b/tests/auto/corelib/plugin/qplugin/releaseplugin/CMakeLists.txt
index abf3ae2a4d..3ec89eb4c6 100644
--- a/tests/auto/corelib/plugin/qplugin/releaseplugin/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qplugin/releaseplugin/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from releaseplugin.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## releaseplugin Generic Library:
@@ -9,11 +10,8 @@ qt_internal_add_cmake_library(releaseplugin
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../plugins"
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
-#### Keys ignored in scope 1:.:.:releaseplugin.pro:<TRUE>:
-# TEMPLATE = "lib"
-
qt_autogen_tools_initial_setup(releaseplugin)
diff --git a/tests/auto/corelib/plugin/qplugin/releaseplugin/main.cpp b/tests/auto/corelib/plugin/qplugin/releaseplugin/main.cpp
index dd936f7da1..ee14da8384 100644
--- a/tests/auto/corelib/plugin/qplugin/releaseplugin/main.cpp
+++ b/tests/auto/corelib/plugin/qplugin/releaseplugin/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 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 <QtPlugin>
#include <QObject>
diff --git a/tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp b/tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp
index ddc9ff7e7c..3d3cb8330d 100644
--- a/tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp
+++ b/tests/auto/corelib/plugin/qplugin/tst_qplugin.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2021 Intel Corporation.
-** 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.
+// Copyright (C) 2021 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QCoreApplication>
@@ -54,8 +29,15 @@ private slots:
};
tst_QPlugin::tst_QPlugin()
- : dir(QFINDTESTDATA("plugins"))
{
+ // On Android the plugins must be located in the APK's libs subdir
+#ifndef Q_OS_ANDROID
+ dir = QFINDTESTDATA("plugins");
+#else
+ const QStringList paths = QCoreApplication::libraryPaths();
+ if (!paths.isEmpty())
+ dir = paths.first();
+#endif
}
void tst_QPlugin::initTestCase()
@@ -75,7 +57,7 @@ void tst_QPlugin::loadDebugPlugin()
if (!QLibrary::isLibrary(fileName))
continue;
QPluginLoader loader(dir.filePath(fileName));
-#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
+#if defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN)
// we can always load a plugin on unix
QVERIFY(loader.load());
QObject *object = loader.instance();
@@ -108,7 +90,7 @@ void tst_QPlugin::loadReleasePlugin()
if (!QLibrary::isLibrary(fileName))
continue;
QPluginLoader loader(dir.filePath(fileName));
-#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
+#if defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN)
// we can always load a plugin on unix
QVERIFY(loader.load());
QObject *object = loader.instance();
@@ -170,8 +152,8 @@ void tst_QPlugin::scanInvalidPlugin_data()
<< " Unexpected metadata contents";
++cprefix[MagicLen + 0];
- QTest::newRow("cbor-major-too-new") << (cprefix + cborValid) << false
- << " Invalid metadata version";
+ QTest::newRow("cbor-major-too-new-invalid")
+ << (cprefix + cborValid) << false << " Invalid metadata version";
}
static const char invalidPluginSignature[] = "qplugin testfile";
@@ -234,13 +216,14 @@ void tst_QPlugin::scanInvalidPlugin()
memset(data + offset + metadata.size(), 0, 512 - metadata.size());
}
+#if defined(Q_OS_QNX)
+ // On QNX plugin access is still too early
+ QTest::qSleep(1000);
+#endif
+
// now try to load this
QFETCH(bool, loads);
QFETCH(QString, errMsg);
- if (!errMsg.isEmpty())
- QTest::ignoreMessage(QtWarningMsg,
- "Found invalid metadata in lib " + QFile::encodeName(newName) +
- ":" + errMsg.toUtf8());
QPluginLoader loader(newName);
QCOMPARE(loader.load(), loads);
if (loads)
diff --git a/tests/auto/corelib/plugin/qpluginloader/BLACKLIST b/tests/auto/corelib/plugin/qpluginloader/BLACKLIST
deleted file mode 100644
index bfcfdff61b..0000000000
--- a/tests/auto/corelib/plugin/qpluginloader/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[loadMachO]
-macos cmake
diff --git a/tests/auto/corelib/plugin/qpluginloader/CMakeLists.txt b/tests/auto/corelib/plugin/qpluginloader/CMakeLists.txt
index a051bb3ea6..592b8632fa 100644
--- a/tests/auto/corelib/plugin/qpluginloader/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qpluginloader/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qpluginloader.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_qpluginloader LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(lib)
add_subdirectory(staticplugin)
diff --git a/tests/auto/corelib/plugin/qpluginloader/almostplugin/CMakeLists.txt b/tests/auto/corelib/plugin/qpluginloader/almostplugin/CMakeLists.txt
index fe5d6295aa..15ae79dfb1 100644
--- a/tests/auto/corelib/plugin/qpluginloader/almostplugin/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qpluginloader/almostplugin/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from almostplugin.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## almostplugin Generic Library:
@@ -10,23 +11,8 @@ qt_internal_add_cmake_library(almostplugin
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
SOURCES
almostplugin.cpp almostplugin.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
-#### Keys ignored in scope 1:.:.:almostplugin.pro:<TRUE>:
-# INSTALLS = "target"
-# TEMPLATE = "lib"
-# target.path = "$$[QT_INSTALL_TESTS]/tst_qpluginloader/bin"
-
-## Scopes:
-#####################################################################
-
qt_autogen_tools_initial_setup(almostplugin)
-# special case begin
-# We want the opposite of this
-#qt_internal_extend_target(almostplugin CONDITION GCC
-# LINK_OPTIONS
-# "--Wl,--no-undefined"
-#)
-# special case end
diff --git a/tests/auto/corelib/plugin/qpluginloader/almostplugin/almostplugin.cpp b/tests/auto/corelib/plugin/qpluginloader/almostplugin/almostplugin.cpp
index 75806dd285..29b6df2683 100644
--- a/tests/auto/corelib/plugin/qpluginloader/almostplugin/almostplugin.cpp
+++ b/tests/auto/corelib/plugin/qpluginloader/almostplugin/almostplugin.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 <QtCore/QString>
#include "almostplugin.h"
#include <QtCore/qplugin.h>
diff --git a/tests/auto/corelib/plugin/qpluginloader/almostplugin/almostplugin.h b/tests/auto/corelib/plugin/qpluginloader/almostplugin/almostplugin.h
index 4dd8df52f0..dea26875c2 100644
--- a/tests/auto/corelib/plugin/qpluginloader/almostplugin/almostplugin.h
+++ b/tests/auto/corelib/plugin/qpluginloader/almostplugin/almostplugin.h
@@ -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
#ifndef ALMOSTPLUGIN_H
#define ALMOSTPLUGIN_H
diff --git a/tests/auto/corelib/plugin/qpluginloader/fakeplugin.cpp b/tests/auto/corelib/plugin/qpluginloader/fakeplugin.cpp
index 899586ed15..e84bfa6dbc 100644
--- a/tests/auto/corelib/plugin/qpluginloader/fakeplugin.cpp
+++ b/tests/auto/corelib/plugin/qpluginloader/fakeplugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 Intel Corporation.
-** 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) 2021 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QT_VERSION_MAJOR
# include <QtCore/qglobal.h>
#endif
diff --git a/tests/auto/corelib/plugin/qpluginloader/lib/CMakeLists.txt b/tests/auto/corelib/plugin/qpluginloader/lib/CMakeLists.txt
index 7914f07c0d..283bdb1352 100644
--- a/tests/auto/corelib/plugin/qpluginloader/lib/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qpluginloader/lib/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from lib.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpluginloaderlib Generic Library:
@@ -10,21 +11,14 @@ qt_internal_add_cmake_library(tst_qpluginloaderlib
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
SOURCES
mylib.c
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
-# special case begin
if(WIN32)
# CMake sets for Windows-GNU platforms the suffix "lib"
set_property(TARGET tst_qpluginloaderlib PROPERTY PREFIX "")
endif()
-# special case begin
-
-#### Keys ignored in scope 1:.:.:lib.pro:<TRUE>:
-# INSTALLS = "target"
-# TEMPLATE = "lib"
-# target.path = "$$[QT_INSTALL_TESTS]/tst_qpluginloader/bin"
## Scopes:
#####################################################################
@@ -34,9 +28,7 @@ qt_internal_extend_target(tst_qpluginloaderlib CONDITION MSVC
WIN32_MSVC
)
-# special case begin
set_target_properties(tst_qpluginloaderlib PROPERTIES
C_VISIBILITY_PRESET "default"
CXX_VISIBILITY_PRESET "default"
)
-# special case end
diff --git a/tests/auto/corelib/plugin/qpluginloader/lib/mylib.c b/tests/auto/corelib/plugin/qpluginloader/lib/mylib.c
index 8d23b999c4..3f1fe03114 100644
--- a/tests/auto/corelib/plugin/qpluginloader/lib/mylib.c
+++ b/tests/auto/corelib/plugin/qpluginloader/lib/mylib.c
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <qglobal.h>
diff --git a/tests/auto/corelib/plugin/qpluginloader/machtest/CMakeLists.txt b/tests/auto/corelib/plugin/qpluginloader/machtest/CMakeLists.txt
index 05cd044aa3..6cb69fc46d 100644
--- a/tests/auto/corelib/plugin/qpluginloader/machtest/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qpluginloader/machtest/CMakeLists.txt
@@ -1,2 +1,138 @@
-# Generated from machtest.pro.
+set_directory_properties(PROPERTIES
+ _qt_good_targets ""
+ _qt_stub_targets ""
+)
+function(add_plugin_binary)
+ set(no_value_options "")
+ set(single_value_options NAME ARCH OUT_TARGET)
+ set(multi_value_options SOURCES)
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "${no_value_options}" "${single_value_options}" "${multi_value_options}"
+ )
+
+ set(output_name ${arg_NAME}.${arg_ARCH})
+ set(target tst_qpluginloader.${output_name})
+ set(${arg_OUT_TARGET} ${target} PARENT_SCOPE)
+ set_property(DIRECTORY APPEND PROPERTY _qt_${arg_NAME}_targets ${target})
+ add_library(${target} MODULE ${arg_SOURCES})
+ add_dependencies(tst_qpluginloader ${target})
+ set_target_properties(${target} PROPERTIES
+ OUTPUT_NAME ${output_name}
+ PREFIX ""
+ SUFFIX ".dylib"
+ DEBUG_POSTFIX ""
+ OSX_ARCHITECTURES ${arg_ARCH}
+ )
+endfunction()
+
+function(add_good_binary)
+ set(no_value_options "")
+ set(single_value_options ARCH)
+ set(multi_value_options "")
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "${no_value_options}" "${single_value_options}" "${multi_value_options}"
+ )
+
+ add_plugin_binary(
+ NAME good
+ ARCH ${arg_ARCH}
+ SOURCES ../fakeplugin.cpp
+ OUT_TARGET target
+ )
+
+ # We cannot link against Qt6::Core, because the architecture might not match.
+ # Extract the include directories from Qt6::Core.
+ get_target_property(incdirs Qt6::Core INTERFACE_INCLUDE_DIRECTORIES)
+ target_include_directories(${target} PRIVATE ${incdirs})
+
+ # Extract the compile definitions from Qt6::Core and disable version tagging.
+ get_target_property(compdefs Qt6::Core INTERFACE_COMPILE_DEFINITIONS)
+ target_compile_definitions(${target} PRIVATE
+ ${compdefs}
+ QT_NO_VERSION_TAGGING
+ )
+endfunction()
+
+function(add_stub_binary)
+ set(no_value_options "")
+ set(single_value_options ARCH)
+ set(multi_value_options "")
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "${no_value_options}" "${single_value_options}" "${multi_value_options}"
+ )
+
+ add_plugin_binary(
+ NAME stub
+ ARCH ${arg_ARCH}
+ SOURCES stub.cpp
+ )
+endfunction()
+
+function(add_fat_binary)
+ set(no_value_options "")
+ set(single_value_options NAME OUT_TARGET)
+ set(multi_value_options TARGETS)
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "${no_value_options}" "${single_value_options}" "${multi_value_options}"
+ )
+
+ set(arch_args "")
+ foreach(dependency IN LISTS arg_TARGETS)
+ get_target_property(arch ${dependency} OSX_ARCHITECTURES)
+ list(APPEND arch_args -arch ${arch} $<TARGET_FILE_NAME:${dependency}>)
+ endforeach()
+
+ set(output_name good.fat.${arg_NAME})
+ set(output_file ${output_name}.dylib)
+ set(target tst_qpluginloader.${output_name})
+ set(${arg_OUT_TARGET} ${target} PARENT_SCOPE)
+ add_custom_command(
+ OUTPUT ${output_file}
+ COMMAND lipo -create -output ${output_file} ${arch_args}
+ DEPENDS ${arg_TARGETS}
+ )
+ add_custom_target(${target}
+ DEPENDS ${output_file}
+ )
+ add_dependencies(tst_qpluginloader ${target})
+endfunction()
+
+set(archs_to_test arm64 x86_64)
+foreach(arch IN LISTS archs_to_test)
+ add_good_binary(ARCH ${arch})
+ add_stub_binary(ARCH ${arch})
+endforeach()
+
+get_directory_property(good_targets _qt_good_targets)
+add_fat_binary(NAME all TARGETS ${good_targets})
+
+set(targets ${good_targets})
+list(FILTER targets EXCLUDE REGEX "\\.arm64$")
+add_fat_binary(NAME no-arm64 TARGETS ${targets})
+
+set(targets ${good_targets})
+list(FILTER targets EXCLUDE REGEX "\\.x86_64$")
+add_fat_binary(NAME no-x86_64 TARGETS ${targets})
+
+get_directory_property(stub_targets _qt_stub_targets)
+set(targets ${stub_targets})
+list(FILTER targets INCLUDE REGEX "\\.arm64$")
+add_fat_binary(NAME stub-arm64 TARGETS ${targets})
+
+set(targets ${stub_targets})
+list(FILTER targets INCLUDE REGEX "\\.x86_64$")
+add_fat_binary(NAME stub-x86_64 TARGETS ${targets})
+
+set(bad_binary_names "")
+foreach(i RANGE 1 13)
+ list(APPEND bad_binary_names "bad${i}.dylib")
+endforeach()
+add_custom_command(
+ OUTPUT ${bad_binary_names}
+ COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generate-bad.pl
+)
+add_custom_target(tst_qpluginloader_generate_bad_binaries
+ DEPENDS ${bad_binary_names}
+)
+add_dependencies(tst_qpluginloader tst_qpluginloader_generate_bad_binaries)
diff --git a/tests/auto/corelib/plugin/qpluginloader/machtest/generate-bad.pl b/tests/auto/corelib/plugin/qpluginloader/machtest/generate-bad.pl
index 4fed135049..3de1eb581a 100755
--- a/tests/auto/corelib/plugin/qpluginloader/machtest/generate-bad.pl
+++ b/tests/auto/corelib/plugin/qpluginloader/machtest/generate-bad.pl
@@ -1,31 +1,6 @@
#!/usr/bin/perl
-#############################################################################
-##
-## Copyright (C) 2016 Intel Corporation.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is the build configuration utility of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:GPL-EXCEPT$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 as published by the Free Software
-## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
+# Copyright (C) 2016 Intel Corporation.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
use strict;
use constant FAT_MAGIC => 0xcafebabe;
diff --git a/tests/auto/corelib/plugin/qpluginloader/machtest/ppcconverter.pl b/tests/auto/corelib/plugin/qpluginloader/machtest/ppcconverter.pl
deleted file mode 100755
index 7242d7596b..0000000000
--- a/tests/auto/corelib/plugin/qpluginloader/machtest/ppcconverter.pl
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/perl
-#############################################################################
-##
-## Copyright (C) 2016 Intel Corporation.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is the build configuration utility of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:GPL-EXCEPT$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 as published by the Free Software
-## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
-
-# Changes the Mach-O file type header to PowerPC.
-#
-# The header is (from mach-o/loader.h):
-# struct mach_header {
-# uint32_t magic; /* mach magic number identifier */
-# cpu_type_t cputype; /* cpu specifier */
-# cpu_subtype_t cpusubtype; /* machine specifier */
-# uint32_t filetype; /* type of file */
-# uint32_t ncmds; /* number of load commands */
-# uint32_t sizeofcmds; /* the size of all the load commands */
-# uint32_t flags; /* flags */
-# };
-#
-# The 64-bit header is identical in the first three fields, except for a different
-# magic number. We will not touch the magic number, we'll just reset the cputype
-# field to the PowerPC type and the subtype field to zero.
-#
-# We will not change the file's endianness. That means we might create a little-endian
-# PowerPC binary, which could not be run in real life.
-#
-# We will also not change the 64-bit ABI flag, which is found in the cputype's high
-# byte. That means we'll create a PPC64 binary if fed a 64-bit input.
-#
-use strict;
-use constant MH_MAGIC => 0xfeedface;
-use constant MH_CIGAM => 0xcefaedfe;
-use constant MH_MAGIC_64 => 0xfeedfacf;
-use constant MH_CIGAM_64 => 0xcffaedfe;
-use constant CPU_TYPE_POWERPC => 18;
-use constant CPU_SUBTYPE_POWERPC_ALL => 0;
-
-my $infile = shift @ARGV or die("Missing input filename");
-my $outfile = shift @ARGV or die("Missing output filename");
-
-open IN, "<$infile" or die("Can't open $infile for reading: $!\n");
-open OUT, ">$outfile" or die("Can't open $outfile for writing: $!\n");
-
-binmode IN;
-binmode OUT;
-
-# Read the first 12 bytes, which includes the interesting fields of the header
-my $buffer;
-read(IN, $buffer, 12);
-
-my $magic = vec($buffer, 0, 32);
-if ($magic == MH_MAGIC || $magic == MH_MAGIC_64) {
- # Big endian
- # The low byte of cputype is at offset 7
- vec($buffer, 7, 8) = CPU_TYPE_POWERPC;
-} elsif ($magic == MH_CIGAM || $magic == MH_CIGAM_64) {
- # Little endian
- # The low byte of cpytype is at offset 4
- vec($buffer, 4, 8) = CPU_TYPE_POWERPC;
-} else {
- $magic = '';
- $magic .= sprintf("%02X ", $_) for unpack("CCCC", $buffer);
- die("Invalid input. Unknown magic $magic\n");
-}
-vec($buffer, 2, 32) = CPU_SUBTYPE_POWERPC_ALL;
-
-print OUT $buffer;
-
-# Copy the rest
-while (!eof(IN)) {
- read(IN, $buffer, 4096) and
- print OUT $buffer or
- die("Problem copying: $!\n");
-}
-close(IN);
-close(OUT);
diff --git a/tests/auto/corelib/plugin/qpluginloader/staticplugin/CMakeLists.txt b/tests/auto/corelib/plugin/qpluginloader/staticplugin/CMakeLists.txt
index 1448ff3933..647c8ac207 100644
--- a/tests/auto/corelib/plugin/qpluginloader/staticplugin/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qpluginloader/staticplugin/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from staticplugin.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## staticplugin Generic Library:
@@ -8,7 +9,7 @@ qt_internal_add_cmake_library(staticplugin
STATIC
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
MOC_OPTIONS
"-M"
@@ -17,7 +18,6 @@ qt_internal_add_cmake_library(staticplugin
"ExtraMetaData=foo"
)
-#### Keys ignored in scope 1:.:.:staticplugin.pro:<TRUE>:
# TEMPLATE = "lib"
qt_autogen_tools_initial_setup(staticplugin)
diff --git a/tests/auto/corelib/plugin/qpluginloader/staticplugin/main.cpp b/tests/auto/corelib/plugin/qpluginloader/staticplugin/main.cpp
index 6d163ea336..208096b425 100644
--- a/tests/auto/corelib/plugin/qpluginloader/staticplugin/main.cpp
+++ b/tests/auto/corelib/plugin/qpluginloader/staticplugin/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Intel Corporation.
-** 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) 2018 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtPlugin>
#include <QObject>
diff --git a/tests/auto/corelib/plugin/qpluginloader/theplugin/CMakeLists.txt b/tests/auto/corelib/plugin/qpluginloader/theplugin/CMakeLists.txt
index 1e7754a167..dfce9d6a52 100644
--- a/tests/auto/corelib/plugin/qpluginloader/theplugin/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qpluginloader/theplugin/CMakeLists.txt
@@ -1,10 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_cmake_library(theplugin
MODULE
INSTALL_DIRECTORY "${INSTALL_TESTSDIR}/tst_qpluginloader/bin"
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
SOURCES
theplugin.cpp theplugin.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
qt_autogen_tools_initial_setup(theplugin)
@@ -16,7 +19,7 @@ if (UNIX AND NOT APPLE)
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../bin"
SOURCES
theoldplugin.cpp theoldplugin.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
qt_autogen_tools_initial_setup(theoldplugin)
diff --git a/tests/auto/corelib/plugin/qpluginloader/theplugin/plugininterface.h b/tests/auto/corelib/plugin/qpluginloader/theplugin/plugininterface.h
index 12285ba016..3fd6c384a4 100644
--- a/tests/auto/corelib/plugin/qpluginloader/theplugin/plugininterface.h
+++ b/tests/auto/corelib/plugin/qpluginloader/theplugin/plugininterface.h
@@ -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
#ifndef PLUGININTERFACE_H
#define PLUGININTERFACE_H
diff --git a/tests/auto/corelib/plugin/qpluginloader/theplugin/theoldplugin.cpp b/tests/auto/corelib/plugin/qpluginloader/theplugin/theoldplugin.cpp
index fd7a6e16d3..20e65b4bb0 100644
--- a/tests/auto/corelib/plugin/qpluginloader/theplugin/theoldplugin.cpp
+++ b/tests/auto/corelib/plugin/qpluginloader/theplugin/theoldplugin.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 Intel Corporation.
-** 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) 2021 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "theoldplugin.h"
#include <QtCore/QString>
#include <QtCore/qplugin.h>
diff --git a/tests/auto/corelib/plugin/qpluginloader/theplugin/theoldplugin.h b/tests/auto/corelib/plugin/qpluginloader/theplugin/theoldplugin.h
index 57fd5a41c9..786ce3f618 100644
--- a/tests/auto/corelib/plugin/qpluginloader/theplugin/theoldplugin.h
+++ b/tests/auto/corelib/plugin/qpluginloader/theplugin/theoldplugin.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 Intel Corportaion.
-** 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) 2021 Intel Corportaion.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef THEOLDPLUGIN_H
#define THEOLDPLUGIN_H
diff --git a/tests/auto/corelib/plugin/qpluginloader/theplugin/theplugin.cpp b/tests/auto/corelib/plugin/qpluginloader/theplugin/theplugin.cpp
index 01563c3dc9..bfa45c7c48 100644
--- a/tests/auto/corelib/plugin/qpluginloader/theplugin/theplugin.cpp
+++ b/tests/auto/corelib/plugin/qpluginloader/theplugin/theplugin.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 <QtCore/QString>
#include "theplugin.h"
#include <QtCore/qplugin.h>
diff --git a/tests/auto/corelib/plugin/qpluginloader/theplugin/theplugin.h b/tests/auto/corelib/plugin/qpluginloader/theplugin/theplugin.h
index 7c9324b8b3..a6b7e4a083 100644
--- a/tests/auto/corelib/plugin/qpluginloader/theplugin/theplugin.h
+++ b/tests/auto/corelib/plugin/qpluginloader/theplugin/theplugin.h
@@ -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
#ifndef THEPLUGIN_H
#define THEPLUGIN_H
diff --git a/tests/auto/corelib/plugin/qpluginloader/tst/CMakeLists.txt b/tests/auto/corelib/plugin/qpluginloader/tst/CMakeLists.txt
index 1193a9d731..16dd1cf9cf 100644
--- a/tests/auto/corelib/plugin/qpluginloader/tst/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/qpluginloader/tst/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from tst.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpluginloader Test:
@@ -14,30 +15,57 @@ qt_internal_add_test(tst_qpluginloader
../fakeplugin.cpp
../theplugin/plugininterface.h
../tst_qpluginloader.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
staticplugin
TESTDATA ${test_data}
)
+add_dependencies(tst_qpluginloader tst_qpluginloaderlib staticplugin theplugin)
+if (UNIX)
+ if(NOT APPLE)
+ add_dependencies(tst_qpluginloader theoldplugin)
+ endif()
+ if (NOT ANDROID AND NOT APPLE)
+ add_dependencies(tst_qpluginloader almostplugin)
+ endif()
+endif()
+
+if(ANDROID)
+ add_compile_definitions(ANDROID_ARCH="${CMAKE_ANDROID_ARCH_ABI}")
+ set(plugins
+ theplugin
+ theoldplugin
+ tst_qpluginloaderlib
+ )
+ set(extra_libs)
+ foreach(plugin IN LISTS plugins)
+ list(APPEND extra_libs
+ "${CMAKE_CURRENT_BINARY_DIR}/../bin/lib${plugin}_${CMAKE_ANDROID_ARCH_ABI}.so")
+ endforeach()
+ set_target_properties(tst_qpluginloader PROPERTIES
+ QT_ANDROID_EXTRA_LIBS "${extra_libs}"
+ )
+endif()
+
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qpluginloader CONDITION QT_FEATURE_private_tests
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
qt_internal_extend_target(tst_qpluginloader CONDITION CMAKE_BUILD_TYPE STREQUAL Debug AND WIN32 AND debug_and_release
- PUBLIC_LIBRARIES
+ LIBRARIES
# Remove: L../staticplugin/debug
)
qt_internal_extend_target(tst_qpluginloader CONDITION WIN32 AND debug_and_release AND NOT CMAKE_BUILD_TYPE STREQUAL Debug
- PUBLIC_LIBRARIES
+ LIBRARIES
# Remove: L../staticplugin/release
)
qt_internal_extend_target(tst_qpluginloader CONDITION UNIX OR NOT debug_and_release
- PUBLIC_LIBRARIES
+ LIBRARIES
# Remove: L../staticplugin
)
diff --git a/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp b/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp
index fcce21433e..f4ecf5bfb3 100644
--- a/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp
+++ b/tests/auto/corelib/plugin/qpluginloader/tst_qpluginloader.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2021 Intel Corporation.
-** 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.
+// Copyright (C) 2021 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSignalSpy>
@@ -41,6 +16,8 @@
# include <QtCore/private/qmachparser_p.h>
#endif
+using namespace Qt::StringLiterals;
+
// Helper macros to let us know if some suffixes are valid
#define bundle_VALID false
#define dylib_VALID false
@@ -153,7 +130,7 @@ static std::unique_ptr<QTemporaryFile> patchElf(const QString &source, ElfPatche
const char *basename = QTest::currentDataTag();
if (!basename)
basename = QTest::currentTestFunction();
- tmplib.reset(new QTemporaryFile(basename + QString(".XXXXXX" SUFFIX)));
+ tmplib.reset(new QTemporaryFile(QDir::currentPath() + u'/' + basename + u".XXXXXX" SUFFIX ""_s));
QVERIFY2(tmplib->open(), qPrintable(tmplib->errorString()));
// sanity-check
@@ -185,12 +162,22 @@ static std::unique_ptr<QTemporaryFile> patchElf(const QString &source, ElfPatche
static QString sys_qualifiedLibraryName(const QString &fileName)
{
+#ifdef Q_OS_ANDROID
+ // On Android all the libraries must be located in the APK's libs subdir
+ const QStringList paths = QCoreApplication::libraryPaths();
+ if (!paths.isEmpty()) {
+ return QLatin1String("%1/%2%3_%4%5").arg(paths.first(), PREFIX, fileName,
+ ANDROID_ARCH, SUFFIX);
+ }
+ return fileName;
+#else
QString name = QLatin1String("bin/") + QLatin1String(PREFIX) + fileName + QLatin1String(SUFFIX);
const QString libname = QFINDTESTDATA(name);
QFileInfo fi(libname);
if (fi.exists())
return fi.canonicalFilePath();
return libname;
+#endif
}
QT_FORWARD_DECLARE_CLASS(QPluginLoader)
@@ -221,6 +208,7 @@ private slots:
void preloadedPlugin_data();
void preloadedPlugin();
void staticPlugins();
+ void reregisteredStaticPlugins();
};
Q_IMPORT_PLUGIN(StaticPlugin)
@@ -292,7 +280,9 @@ void tst_QPluginLoader::errorString()
QVERIFY(!unloaded);
}
-#if !defined(Q_OS_WIN) && !defined(Q_OS_MAC) && !defined(Q_OS_HPUX)
+// A bug in QNX causes the test to crash on exit after attempting to load
+// a shared library with undefined symbols (tracked as QTBUG-114682).
+#if !defined(Q_OS_WIN) && !defined(Q_OS_DARWIN) && !defined(Q_OS_HPUX) && !defined(Q_OS_QNX)
{
QPluginLoader loader( sys_qualifiedLibraryName("almostplugin")); //a plugin with unresolved symbols
loader.setLoadHints(QLibrary::ResolveAllSymbolsHint);
@@ -349,10 +339,37 @@ void tst_QPluginLoader::loadHints()
QSKIP("This test requires Qt to create shared libraries.");
#endif
QPluginLoader loader;
- QCOMPARE(loader.loadHints(), QLibrary::LoadHints{}); //Do not crash
+ QCOMPARE(loader.loadHints(), QLibrary::PreventUnloadHint); //Do not crash
loader.setLoadHints(QLibrary::ResolveAllSymbolsHint);
+ QCOMPARE(loader.loadHints(), QLibrary::ResolveAllSymbolsHint);
+ // We can clear load hints when file name is not set.
+ loader.setLoadHints(QLibrary::LoadHints{});
+ QCOMPARE(loader.loadHints(), QLibrary::LoadHints{});
+ // Set the hints again
+ loader.setLoadHints(QLibrary::ResolveAllSymbolsHint);
+ QCOMPARE(loader.loadHints(), QLibrary::ResolveAllSymbolsHint);
loader.setFileName( sys_qualifiedLibraryName("theplugin")); //a plugin
QCOMPARE(loader.loadHints(), QLibrary::ResolveAllSymbolsHint);
+
+ QPluginLoader loader4;
+ QCOMPARE(loader4.loadHints(), QLibrary::PreventUnloadHint);
+ loader4.setLoadHints(QLibrary::LoadHints{});
+ QCOMPARE(loader4.loadHints(), QLibrary::LoadHints{});
+ loader4.setFileName(sys_qualifiedLibraryName("theplugin"));
+ // Hints are merged with hints from the previous loader.
+ QCOMPARE(loader4.loadHints(), QLibrary::ResolveAllSymbolsHint);
+ // We cannot clear load hints after associating the loader with a file.
+ loader.setLoadHints(QLibrary::LoadHints{});
+ QCOMPARE(loader.loadHints(), QLibrary::ResolveAllSymbolsHint);
+
+ QPluginLoader loader2;
+ QCOMPARE(loader2.loadHints(), QLibrary::PreventUnloadHint);
+ loader2.setFileName(sys_qualifiedLibraryName("theplugin"));
+ // Hints are merged with hints from previous loaders.
+ QCOMPARE(loader2.loadHints(), QLibrary::PreventUnloadHint | QLibrary::ResolveAllSymbolsHint);
+
+ QPluginLoader loader3(sys_qualifiedLibraryName("theplugin"));
+ QCOMPARE(loader3.loadHints(), QLibrary::PreventUnloadHint | QLibrary::ResolveAllSymbolsHint);
}
void tst_QPluginLoader::deleteinstanceOnUnload()
@@ -382,14 +399,14 @@ void tst_QPluginLoader::deleteinstanceOnUnload()
QVERIFY(spy2.isValid());
if (pass == 0) {
QCOMPARE(loader2.unload(), false); // refcount not reached 0, not really unloaded
- QCOMPARE(spy1.count(), 0);
- QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy1.size(), 0);
+ QCOMPARE(spy2.size(), 0);
}
QCOMPARE(instance1->pluginName(), QLatin1String("Plugin ok"));
QCOMPARE(instance2->pluginName(), QLatin1String("Plugin ok"));
QVERIFY(loader1.unload()); // refcount reached 0, did really unload
- QCOMPARE(spy1.count(), 1);
- QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy1.size(), 1);
+ QCOMPARE(spy2.size(), 1);
}
}
@@ -457,7 +474,7 @@ static void loadCorruptElfCommonRows()
memcpy(h, &o, sizeof(o));
});
newRow("invalid-word-size", "file is for a different word size", [](H h) {
- h->e_ident[EI_CLASS] = ELFCLASSNONE;;
+ h->e_ident[EI_CLASS] = ELFCLASSNONE;
});
newRow("unknown-word-size", "file is for a different word size", [](H h) {
h->e_ident[EI_CLASS] |= 0x40;
@@ -843,26 +860,23 @@ void tst_QPluginLoader::loadMachO_data()
# ifdef Q_PROCESSOR_X86_64
QTest::newRow("machtest/good.x86_64.dylib") << true;
- QTest::newRow("machtest/good.i386.dylib") << false;
+ QTest::newRow("machtest/good.arm64.dylib") << false;
QTest::newRow("machtest/good.fat.no-x86_64.dylib") << false;
- QTest::newRow("machtest/good.fat.no-i386.dylib") << true;
-# elif defined(Q_PROCESSOR_X86_32)
- QTest::newRow("machtest/good.i386.dylib") << true;
+ QTest::newRow("machtest/good.fat.no-arm64.dylib") << true;
+# elif defined(Q_PROCESSOR_ARM)
+ QTest::newRow("machtest/good.arm64.dylib") << true;
QTest::newRow("machtest/good.x86_64.dylib") << false;
- QTest::newRow("machtest/good.fat.no-i386.dylib") << false;
+ QTest::newRow("machtest/good.fat.no-arm64.dylib") << false;
QTest::newRow("machtest/good.fat.no-x86_64.dylib") << true;
# endif
-# ifndef Q_PROCESSOR_POWER_64
- QTest::newRow("machtest/good.ppc64.dylib") << false;
-# endif
QTest::newRow("machtest/good.fat.all.dylib") << true;
QTest::newRow("machtest/good.fat.stub-x86_64.dylib") << false;
- QTest::newRow("machtest/good.fat.stub-i386.dylib") << false;
+ QTest::newRow("machtest/good.fat.stub-arm64.dylib") << false;
QDir d(QFINDTESTDATA("machtest"));
- QStringList badlist = d.entryList(QStringList() << "bad*.dylib");
- foreach (const QString &bad, badlist)
+ const QStringList badlist = d.entryList(QStringList() << "bad*.dylib");
+ for (const QString &bad : badlist)
QTest::newRow(qPrintable("machtest/" + bad)) << false;
#endif
}
@@ -886,12 +900,7 @@ void tst_QPluginLoader::loadMachO()
}
QVERIFY(r.pos > 0);
- QVERIFY(size_t(r.length) >= sizeof(void*));
QVERIFY(r.pos + r.length < data.size());
- QCOMPARE(r.pos & (sizeof(void*) - 1), 0UL);
-
- void *value = *(void**)(data.constData() + r.pos);
- QCOMPARE(value, sizeof(void*) > 4 ? (void*)(0xc0ffeec0ffeeL) : (void*)0xc0ffee);
// now that we know it's valid, let's try to make it invalid
ulong offeredlen = r.pos;
@@ -909,11 +918,19 @@ void tst_QPluginLoader::relativePath()
#if !defined(QT_SHARED)
QSKIP("This test requires Qt to create shared libraries.");
#endif
+#ifdef Q_OS_ANDROID
+ // On Android we do not need to explicitly set library paths, as they are
+ // already set.
+ // But we need to use ARCH suffix in pulgin name
+ const QString pluginName("theplugin_" ANDROID_ARCH SUFFIX);
+#else
// Windows binaries run from release and debug subdirs, so we can't rely on the current dir.
const QString binDir = QFINDTESTDATA("bin");
QVERIFY(!binDir.isEmpty());
QCoreApplication::addLibraryPath(binDir);
- QPluginLoader loader("theplugin" SUFFIX);
+ const QString pluginName("theplugin" SUFFIX);
+#endif
+ QPluginLoader loader(pluginName);
loader.load(); // not recommended, instance() should do the job.
PluginInterface *instance = qobject_cast<PluginInterface*>(loader.instance());
QVERIFY(instance);
@@ -926,13 +943,27 @@ void tst_QPluginLoader::absolutePath()
#if !defined(QT_SHARED)
QSKIP("This test requires Qt to create shared libraries.");
#endif
+#ifdef Q_OS_ANDROID
+ // On Android we need to clear library paths to make sure that the absolute
+ // path works
+ const QStringList libraryPaths = QCoreApplication::libraryPaths();
+ QVERIFY(!libraryPaths.isEmpty());
+ QCoreApplication::setLibraryPaths(QStringList());
+ const QString pluginPath(libraryPaths.first() + "/" PREFIX "theplugin_" ANDROID_ARCH SUFFIX);
+#else
// Windows binaries run from release and debug subdirs, so we can't rely on the current dir.
const QString binDir = QFINDTESTDATA("bin");
QVERIFY(!binDir.isEmpty());
QVERIFY(QDir::isAbsolutePath(binDir));
- QPluginLoader loader(binDir + "/" PREFIX "theplugin" SUFFIX);
+ const QString pluginPath(binDir + "/" PREFIX "theplugin" SUFFIX);
+#endif
+ QPluginLoader loader(pluginPath);
loader.load(); // not recommended, instance() should do the job.
PluginInterface *instance = qobject_cast<PluginInterface*>(loader.instance());
+#ifdef Q_OS_ANDROID
+ // Restore library paths
+ QCoreApplication::setLibraryPaths(libraryPaths);
+#endif
QVERIFY(instance);
QCOMPARE(instance->pluginName(), QLatin1String("Plugin ok"));
QVERIFY(loader.unload());
@@ -953,7 +984,7 @@ void tst_QPluginLoader::reloadPlugin()
QSignalSpy spy(loader.instance(), &QObject::destroyed);
QVERIFY(spy.isValid());
QVERIFY(loader.unload()); // refcount reached 0, did really unload
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
// reload plugin
QVERIFY(loader.load());
@@ -968,6 +999,10 @@ void tst_QPluginLoader::reloadPlugin()
void tst_QPluginLoader::loadSectionTableStrippedElf()
{
+#ifdef Q_OS_ANDROID
+ if (QNativeInterface::QAndroidApplication::sdkVersion() >= 24)
+ QSKIP("Android 7+ (API 24+) linker doesn't allow missing or bad section header");
+#endif
#if !defined(QT_SHARED)
QSKIP("This test requires a shared build of Qt, as QPluginLoader::setFileName is a no-op in static builds");
#elif !defined(Q_OF_ELF)
@@ -1060,19 +1095,18 @@ void tst_QPluginLoader::staticPlugins()
const QObjectList instances = QPluginLoader::staticInstances();
QVERIFY(instances.size());
- bool found = false;
- for (QObject *obj : instances) {
- found = obj->metaObject()->className() == QLatin1String("StaticPlugin");
- if (found)
- break;
- }
- QVERIFY(found);
+ // ensure the our plugin only shows up once
+ int foundCount = std::count_if(instances.begin(), instances.end(), [](QObject *obj) {
+ return obj->metaObject()->className() == QLatin1String("StaticPlugin");
+ });
+ QCOMPARE(foundCount, 1);
const auto plugins = QPluginLoader::staticPlugins();
QCOMPARE(plugins.size(), instances.size());
// find the metadata
QJsonObject metaData;
+ bool found = false;
for (const auto &p : plugins) {
metaData = p.metaData();
found = metaData.value("className").toString() == QLatin1String("StaticPlugin");
@@ -1088,6 +1122,18 @@ void tst_QPluginLoader::staticPlugins()
QCOMPARE(metaData.value("URI").toString(), "qt.test.pluginloader.staticplugin");
}
+void tst_QPluginLoader::reregisteredStaticPlugins()
+{
+ // the Q_IMPORT_PLUGIN macro will have already done this
+ qRegisterStaticPluginFunction(qt_static_plugin_StaticPlugin());
+ staticPlugins();
+ if (QTest::currentTestFailed())
+ return;
+
+ qRegisterStaticPluginFunction(qt_static_plugin_StaticPlugin());
+ staticPlugins();
+}
+
QTEST_MAIN(tst_QPluginLoader)
#include "tst_qpluginloader.moc"
diff --git a/tests/auto/corelib/plugin/quuid/CMakeLists.txt b/tests/auto/corelib/plugin/quuid/CMakeLists.txt
index 91e75fe0ae..be90dc1849 100644
--- a/tests/auto/corelib/plugin/quuid/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/quuid/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from quuid.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_quuid LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(testProcessUniqueness)
add_subdirectory(test)
diff --git a/tests/auto/corelib/plugin/quuid/test/CMakeLists.txt b/tests/auto/corelib/plugin/quuid/test/CMakeLists.txt
index 233a410db6..1e1e820b14 100644
--- a/tests/auto/corelib/plugin/quuid/test/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/quuid/test/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_quuid Test:
#####################################################################
@@ -13,7 +16,8 @@ qt_internal_add_test(tst_quuid
qt_internal_extend_target(tst_quuid CONDITION APPLE
SOURCES
../tst_quuid_darwin.mm
- PUBLIC_LIBRARIES
+ LIBRARIES
+ Qt::CorePrivate
${FWFoundation}
)
diff --git a/tests/auto/corelib/plugin/quuid/testProcessUniqueness/CMakeLists.txt b/tests/auto/corelib/plugin/quuid/testProcessUniqueness/CMakeLists.txt
index 0bdf32a207..f207cdaa3a 100644
--- a/tests/auto/corelib/plugin/quuid/testProcessUniqueness/CMakeLists.txt
+++ b/tests/auto/corelib/plugin/quuid/testProcessUniqueness/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from testProcessUniqueness.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## testProcessUniqueness Binary:
@@ -11,6 +12,4 @@ qt_internal_add_executable(testProcessUniqueness
main.cpp
)
-# special case begin
set_target_properties(testProcessUniqueness PROPERTIES MACOSX_BUNDLE TRUE)
-# special case end
diff --git a/tests/auto/corelib/plugin/quuid/testProcessUniqueness/main.cpp b/tests/auto/corelib/plugin/quuid/testProcessUniqueness/main.cpp
index 126d2bb435..93d1201631 100644
--- a/tests/auto/corelib/plugin/quuid/testProcessUniqueness/main.cpp
+++ b/tests/auto/corelib/plugin/quuid/testProcessUniqueness/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 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 <stdio.h>
#include <QUuid>
diff --git a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp b/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
index 599996c142..c5ce490b61 100644
--- a/tests/auto/corelib/plugin/quuid/tst_quuid.cpp
+++ b/tests/auto/corelib/plugin/quuid/tst_quuid.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 <QTest>
@@ -50,6 +25,8 @@ private slots:
void fromByteArray();
void toRfc4122();
void fromRfc4122();
+ void id128();
+ void uint128();
void createUuidV3OrV5();
void check_QDataStream();
void isNull();
@@ -123,7 +100,7 @@ void tst_QUuid::fromChar()
QCOMPARE(QUuid(), QUuid("fc69b59e-cc34-"));
QCOMPARE(QUuid(), QUuid("fc69b59e-cc34"));
QCOMPARE(QUuid(), QUuid("cc34"));
- QCOMPARE(QUuid(), QUuid(NULL));
+ QCOMPARE(QUuid(), QUuid(nullptr));
QCOMPARE(uuidB, QUuid(QString("{1ab6e93a-b1cb-4a87-ba47-ec7e99039a7b}")));
}
@@ -160,7 +137,7 @@ void tst_QUuid::fromString_data()
ROW(uuidA, "{fc69b59e-cc34-4436-a43c-ee95d128b8c56"); // too long (not an error!)
ROW(invalid, "{fc69b59e-cc34-4436-a43c-ee95d128b8c" ); // premature end (within length limits)
ROW(invalid, " fc69b59e-cc34-4436-a43c-ee95d128b8c5}"); // leading space
- ROW(uuidA, "{fc69b59e-cc34-4436-a43c-ee95d128b8c5 "); // trailing space (not an error!)
+ ROW(uuidB, "{1ab6e93a-b1cb-4a87-ba47-ec7e99039a7b "); // trailing space (not an error!)
ROW(invalid, "{gc69b59e-cc34-4436-a43c-ee95d128b8c5}"); // non-hex digit in 1st group
ROW(invalid, "{fc69b59e-cp34-4436-a43c-ee95d128b8c5}"); // non-hex digit in 2nd group
ROW(invalid, "{fc69b59e-cc34-44r6-a43c-ee95d128b8c5}"); // non-hex digit in 3rd group
@@ -242,6 +219,78 @@ void tst_QUuid::fromRfc4122()
QCOMPARE(uuidB, QUuid::fromRfc4122(QByteArray::fromHex("1ab6e93ab1cb4a87ba47ec7e99039a7b")));
}
+void tst_QUuid::id128()
+{
+ constexpr QUuid::Id128Bytes bytesA = { {
+ 0xfc, 0x69, 0xb5, 0x9e,
+ 0xcc, 0x34,
+ 0x44, 0x36,
+ 0xa4, 0x3c, 0xee, 0x95, 0xd1, 0x28, 0xb8, 0xc5,
+ } };
+ constexpr QUuid::Id128Bytes bytesB = { {
+ 0x1a, 0xb6, 0xe9, 0x3a,
+ 0xb1, 0xcb,
+ 0x4a, 0x87,
+ 0xba, 0x47, 0xec, 0x7e, 0x99, 0x03, 0x9a, 0x7b,
+ } };
+
+ QCOMPARE(QUuid(bytesA), uuidA);
+ QCOMPARE(QUuid(bytesB), uuidB);
+ QVERIFY(memcmp(uuidA.toBytes().data, bytesA.data, sizeof(QUuid::Id128Bytes)) == 0);
+ QVERIFY(memcmp(uuidB.toBytes().data, bytesB.data, sizeof(QUuid::Id128Bytes)) == 0);
+
+ QUuid::Id128Bytes leBytesA = {};
+ for (int i = 0; i < 16; i++)
+ leBytesA.data[15 - i] = bytesA.data[i];
+ QCOMPARE(QUuid(leBytesA, QSysInfo::LittleEndian), uuidA);
+ QVERIFY(memcmp(uuidA.toBytes(QSysInfo::LittleEndian).data, leBytesA.data, sizeof(leBytesA)) == 0);
+
+ // check the new q{To,From}{Big,Little}Endian() overloads
+ QUuid::Id128Bytes roundtrip = qFromLittleEndian(qToLittleEndian(bytesA));
+ QVERIFY(memcmp(roundtrip.data, bytesA.data, sizeof(bytesA)) == 0);
+ roundtrip = qFromBigEndian(qToBigEndian(bytesA));
+ QVERIFY(memcmp(roundtrip.data, bytesA.data, sizeof(bytesA)) == 0);
+#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+ const QUuid::Id128Bytes beBytesA = qToBigEndian(leBytesA);
+ QVERIFY(memcmp(beBytesA.data, bytesA.data, sizeof(beBytesA)) == 0);
+ const QUuid::Id128Bytes otherLeBytesA = qFromBigEndian(bytesA);
+ QVERIFY(memcmp(otherLeBytesA.data, leBytesA.data, sizeof(leBytesA)) == 0);
+#else // Q_BIG_ENDIAN
+ const QUuid::Id128Bytes otherLeBytesA = qToLittleEndian(bytesA);
+ QVERIFY(memcmp(otherLeBytesA.data, leBytesA.data, sizeof(leBytesA)) == 0);
+ const QUuid::Id128Bytes beBytesA = qFromLittleEndian(leBytesA);
+ QVERIFY(memcmp(beBytesA.data, bytesA.data, sizeof(beBytesA)) == 0);
+#endif // Q_BYTE_ORDER == Q_LITTLE_ENDIAN
+}
+
+void tst_QUuid::uint128()
+{
+#ifdef QT_SUPPORTS_INT128
+ constexpr quint128 u = Q_UINT128_C(0xfc69b59e'cc344436'a43cee95'd128b8c5); // This is LE
+ constexpr quint128 be = qToBigEndian(u);
+ constexpr QUuid uuid = QUuid::fromUInt128(be);
+ static_assert(uuid.toUInt128() == be, "Round-trip through QUuid failed");
+
+ QCOMPARE(uuid, uuidA);
+ QCOMPARE(uuid.toUInt128(), be);
+
+ quint128 le = qFromBigEndian(be);
+ QCOMPARE(uuid.toUInt128(QSysInfo::LittleEndian), le);
+ QCOMPARE(QUuid::fromUInt128(le, QSysInfo::LittleEndian), uuidA);
+
+ QUuid::Id128Bytes bytes = { .data128 = { qToBigEndian(u) } };
+ QUuid uuid2(bytes);
+ QCOMPARE(uuid2, uuid);
+
+ // verify that toBytes() and toUInt128() provide bytewise similar result
+ constexpr quint128 val = uuid.toUInt128();
+ bytes = uuid.toBytes();
+ QVERIFY(memcmp(&val, bytes.data, sizeof(val)) == 0);
+#else
+ QSKIP("This platform has no support for 128-bit integer");
+#endif
+}
+
void tst_QUuid::createUuidV3OrV5()
{
//"www.widgets.com" is also from RFC4122
@@ -397,13 +446,13 @@ public:
void tst_QUuid::threadUniqueness()
{
QList<UuidThread *> threads(qMax(2, QThread::idealThreadCount()));
- for (int i = 0; i < threads.count(); ++i)
+ for (int i = 0; i < threads.size(); ++i)
threads[i] = new UuidThread;
- for (int i = 0; i < threads.count(); ++i)
+ for (int i = 0; i < threads.size(); ++i)
threads[i]->start();
- for (int i = 0; i < threads.count(); ++i)
+ for (int i = 0; i < threads.size(); ++i)
QVERIFY(threads[i]->wait(1000));
- for (int i = 1; i < threads.count(); ++i)
+ for (int i = 1; i < threads.size(); ++i)
QVERIFY(threads[0]->uuid != threads[i]->uuid);
qDeleteAll(threads);
}
@@ -421,7 +470,7 @@ void tst_QUuid::processUniqueness()
QString processTwoOutput;
// Start it once
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
process.start("testProcessUniqueness/testProcessUniqueness.app");
#elif defined(Q_OS_ANDROID)
process.start("libtestProcessUniqueness.so");
@@ -432,7 +481,7 @@ void tst_QUuid::processUniqueness()
processOneOutput = process.readAllStandardOutput();
// Start it twice
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
process.start("testProcessUniqueness/testProcessUniqueness.app");
#elif defined(Q_OS_ANDROID)
process.start("libtestProcessUniqueness.so");
diff --git a/tests/auto/corelib/plugin/quuid/tst_quuid_darwin.mm b/tests/auto/corelib/plugin/quuid/tst_quuid_darwin.mm
index d895fabab9..c3fc809b1f 100644
--- a/tests/auto/corelib/plugin/quuid/tst_quuid_darwin.mm
+++ b/tests/auto/corelib/plugin/quuid/tst_quuid_darwin.mm
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** 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/QUuid>
#include <QTest>
+#include <QtCore/private/qcore_mac_p.h>
+
#include <CoreFoundation/CoreFoundation.h>
#include <Foundation/Foundation.h>
diff --git a/tests/auto/corelib/serialization/CMakeLists.txt b/tests/auto/corelib/serialization/CMakeLists.txt
index 576261fcfe..3792336255 100644
--- a/tests/auto/corelib/serialization/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/CMakeLists.txt
@@ -1,18 +1,20 @@
-# Generated from serialization.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(json)
add_subdirectory(qcborstreamreader)
add_subdirectory(qcborstreamwriter)
-add_subdirectory(qcborvalue)
+if(NOT WASM)
+ add_subdirectory(qcborvalue)
+endif()
add_subdirectory(qcborvalue_json)
if(TARGET Qt::Gui)
add_subdirectory(qdatastream)
add_subdirectory(qdatastream_core_pixmap)
endif()
-if(TARGET Qt::Network)
+if(TARGET Qt::Network AND NOT WASM)
add_subdirectory(qtextstream)
endif()
-# QTBUG-87671 # special case
-if(TARGET Qt::Network AND TARGET Qt::Xml AND NOT ANDROID AND NOT INTEGRITY)
+if(TARGET Qt::Gui AND TARGET Qt::Network AND TARGET Qt::Xml AND NOT INTEGRITY AND NOT QNX AND NOT WASM)
add_subdirectory(qxmlstream)
endif()
diff --git a/tests/auto/corelib/serialization/cborlargedatavalidation.cpp b/tests/auto/corelib/serialization/cborlargedatavalidation.cpp
index 9d1eb9a81b..2fe1012f12 100644
--- a/tests/auto/corelib/serialization/cborlargedatavalidation.cpp
+++ b/tests/auto/corelib/serialization/cborlargedatavalidation.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtEndian>
@@ -62,7 +26,6 @@ protected:
qint64 readData(char *data, qint64 maxlen) override;
qint64 writeData(const char *, qint64) override { return -1; }
};
-};
qint64 LargeIODevice::readData(char *data, qint64 maxlen)
{
@@ -154,3 +117,4 @@ void addValidationHugeDevice(qsizetype byteArrayInvalid, qsizetype stringInvalid
addSize("4GB", quint64(1) << 32);
addSize("max", std::numeric_limits<qint64>::max() - sizeof(buf));
}
+} // namespace
diff --git a/tests/auto/corelib/serialization/json/CMakeLists.txt b/tests/auto/corelib/serialization/json/CMakeLists.txt
index 9022ed9f3d..c73a99a3b8 100644
--- a/tests/auto/corelib/serialization/json/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/json/CMakeLists.txt
@@ -1,42 +1,35 @@
-# Generated from json.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_json Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_json LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+set(json_resource_files
+ "bom.json"
+ "test.json"
+ "test2.json"
+ "test3.json"
+ "simple.duplicates.json"
+ "test.duplicates.json"
+ "test3.duplicates.json"
+)
+
qt_internal_add_test(tst_json
SOURCES
tst_qtjson.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
+ TESTDATA ${json_resource_files}
)
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:json.pro:NOT ANDROID:
-# TESTDATA = "bom.json" "test.json" "test3.json" "test2.json"
-
-if(ANDROID OR INTEGRITY)
- # Resources:
- set(json_resource_files
- "bom.json"
- "test.json"
- "test2.json"
- "test3.json"
- "simple.duplicates.json"
- "test.duplicates.json"
- "test3.duplicates.json"
- )
-
- qt_internal_add_resource(tst_json "json"
- PREFIX
- "/"
- FILES
- ${json_resource_files}
- )
-endif()
-
qt_internal_extend_target(tst_json CONDITION NOT QT_FEATURE_doubleconversion AND NOT QT_FEATURE_system_doubleconversion
DEFINES
QT_NO_DOUBLECONVERSION
diff --git a/tests/auto/corelib/serialization/json/tst_qtjson.cpp b/tests/auto/corelib/serialization/json/tst_qtjson.cpp
index 72dfc4a47d..54ef9be4f2 100644
--- a/tests/auto/corelib/serialization/json/tst_qtjson.cpp
+++ b/tests/auto/corelib/serialization/json/tst_qtjson.cpp
@@ -1,33 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2021 Intel Corporation.
-** 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) 2022 The Qt Company Ltd.
+// Copyright (C) 2022 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
+#include <QMap>
+#include <QVariantList>
QT_WARNING_DISABLE_DEPRECATED
@@ -50,6 +28,7 @@ class tst_QtJson: public QObject
private Q_SLOTS:
void initTestCase();
+ void compareCompiles();
void testValueSimple();
void testNumbers();
void testNumbers_2();
@@ -70,9 +49,12 @@ private Q_SLOTS:
void testArrayNested();
void testArrayNestedEmpty();
void testArrayComfortOperators();
+ void testArrayEquality_data();
+ void testArrayEquality();
void testObjectNestedEmpty();
void testValueRef();
+ void testValueRefComparison();
void testObjectIteration();
void testArrayIteration();
@@ -105,6 +87,7 @@ private Q_SLOTS:
void toJson();
void toJsonSillyNumericValues();
void toJsonLargeNumericValues();
+ void toJsonDenormalValues();
void fromJson();
void fromJsonErrors();
void parseNumbers();
@@ -190,6 +173,31 @@ void tst_QtJson::initTestCase()
testDataDir = QCoreApplication::applicationDirPath();
}
+void tst_QtJson::compareCompiles()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QJsonArray>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QJsonArray::iterator>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QJsonArray::const_iterator>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QJsonArray::iterator,
+ QJsonArray::const_iterator>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonDocument>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonObject>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonObject::iterator>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonObject::const_iterator>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonValue>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonValueConstRef>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonValueRef>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonArray, QJsonValue>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonObject, QJsonValue>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonObject, QJsonValueConstRef>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonObject, QJsonValueRef>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonValueConstRef, QJsonValue>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonValueRef, QJsonValue>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonValueRef, QJsonValueConstRef>();
+ QTestPrivate::testEqualityOperatorsCompile<QJsonObject::iterator,
+ QJsonObject::const_iterator>();
+}
+
void tst_QtJson::testValueSimple()
{
QJsonObject object;
@@ -392,17 +400,21 @@ void tst_QtJson::testNumbers_2()
QVERIFY2(floatValues[power] == floatValues_1[power], QString("floatValues[%1] != floatValues_1[%1]").arg(power).toLatin1());
}
+ QT_TEST_EQUALITY_OPS(jDocument1, jDocument2, true);
// The last value is below min denorm and should round to 0, everything else should contain a value
QVERIFY2(floatValues_1[1075] == 0, "Value after min denorm should round to 0");
// Validate the last actual value is min denorm
QVERIFY2(floatValues_1[1074] == 4.9406564584124654417656879286822e-324, QString("Min denorm value is incorrect: %1").arg(floatValues_1[1074]).toLatin1());
- // Validate that every value is half the value before it up to 1
- for (int index = 1074; index > 0; index--) {
- QVERIFY2(floatValues_1[index] != 0, QString("2**- %1 should not be 0").arg(index).toLatin1());
-
- QVERIFY2(floatValues_1[index - 1] == (floatValues_1[index] * 2), QString("Value should be double adjacent value at index %1").arg(index).toLatin1());
+ if constexpr (std::numeric_limits<double>::has_denorm == std::denorm_present) {
+ // Validate that every value is half the value before it up to 1
+ for (int index = 1074; index > 0; index--) {
+ QVERIFY2(floatValues_1[index] != 0, QString("2**- %1 should not be 0").arg(index).toLatin1());
+ QVERIFY2(floatValues_1[index - 1] == (floatValues_1[index] * 2), QString("Value should be double adjacent value at index %1").arg(index).toLatin1());
+ }
+ } else {
+ qInfo("Skipping denormal test as this system's double type lacks support");
}
}
@@ -420,6 +432,10 @@ void tst_QtJson::testNumbers_3()
QJsonDocument jDocument2(QJsonDocument::fromJson(ba));
+ QT_TEST_EQUALITY_OPS(jDocument1, jDocument2, true);
+ QT_TEST_EQUALITY_OPS(jDocument1, QJsonDocument(), false);
+ QT_TEST_EQUALITY_OPS(QJsonDocument(), QJsonDocument(), true);
+
double d1_1(jDocument2.object().value("d1").toDouble());
double d2_1(jDocument2.object().value("d2").toDouble());
QVERIFY(d1_1 != d2_1);
@@ -437,7 +453,8 @@ void tst_QtJson::testNumbers_4()
array << QJsonValue(-9223372036854775808.0);
array << QJsonValue(+18446744073709551616.0);
array << QJsonValue(-18446744073709551616.0);
- const QByteArray json(QJsonDocument(array).toJson());
+ QJsonDocument doc1 = QJsonDocument(array);
+ const QByteArray json(doc1.toJson());
const QByteArray expected =
"[\n"
" 1000000000000000,\n"
@@ -458,7 +475,8 @@ void tst_QtJson::testNumbers_4()
array2 << QJsonValue(Q_INT64_C(-9007199254740992));
array2 << QJsonValue(Q_INT64_C(+9223372036854775807));
array2 << QJsonValue(Q_INT64_C(-9223372036854775807));
- const QByteArray json2(QJsonDocument(array2).toJson());
+ QJsonDocument doc2 = QJsonDocument(array2);
+ const QByteArray json2(doc2.toJson());
const QByteArray expected2 =
"[\n"
" 1000000000000000,\n"
@@ -469,6 +487,8 @@ void tst_QtJson::testNumbers_4()
" -9223372036854775807\n"
"]\n";
QCOMPARE(json2, expected2);
+
+ QT_TEST_EQUALITY_OPS(doc1, doc2, false);
}
void tst_QtJson::testNumberComparisons()
@@ -517,6 +537,7 @@ void tst_QtJson::testObjectSimple()
QJsonValue value(QLatin1String("foo"));
object.insert("value", value);
QCOMPARE(object.value("value"), value);
+ QT_TEST_EQUALITY_OPS(object.value("value"), value, true);
int size = object.size();
object.remove("boolean");
@@ -525,6 +546,7 @@ void tst_QtJson::testObjectSimple()
QJsonValue taken = object.take("value");
QCOMPARE(taken, value);
+ QT_TEST_EQUALITY_OPS(taken, value, true);
QVERIFY2(!object.contains("value"), "key value should have been removed");
QString before = object.value("string").toString();
@@ -654,6 +676,7 @@ void tst_QtJson::testObjectInsertCopies()
QCOMPARE(obj.size(), 2);
QCOMPARE(obj.value("value"), "TEST");
QCOMPARE(obj.value("prop2"), "TEST");
+ QT_TEST_EQUALITY_OPS(rv, obj["value"].toObject(), true);
}
{
QJsonObject obj;
@@ -786,15 +809,20 @@ void tst_QtJson::testValueObject()
void tst_QtJson::testValueArray()
{
QJsonArray array;
+ QJsonArray otherArray = {"wrong value"};
+ QJsonValue value(array);
+ QCOMPARE(value.toArray(), array);
+ QCOMPARE(value.toArray(otherArray), array);
+
array.append(999.);
array.append(QLatin1String("test"));
array.append(true);
-
- QJsonValue value(array);
+ value = array;
// if we don't modify the original JsonArray, toArray()
// on the JsonValue should return the same object (non-detached).
QCOMPARE(value.toArray(), array);
+ QCOMPARE(value.toArray(otherArray), array);
// if we modify the original array, it should detach
array.append(QLatin1String("test"));
@@ -804,14 +832,28 @@ void tst_QtJson::testValueArray()
void tst_QtJson::testObjectNested()
{
QJsonObject inner, outer;
+ QJsonObject otherObject = {{"wrong key", "wrong value"}};
+ QJsonValue v = inner;
+ QCOMPARE(v.toObject(), inner);
+ QCOMPARE(v.toObject(otherObject), inner);
+ QT_TEST_EQUALITY_OPS(v.toObject(), inner, true);
+ QT_TEST_EQUALITY_OPS(v.toObject(otherObject), inner, true);
+
inner.insert("number", 999.);
outer.insert("nested", inner);
+ QT_TEST_EQUALITY_OPS(outer, inner, false);
// if we don't modify the original JsonObject, value()
// should return the same object (non-detached).
QJsonObject value = outer.value("nested").toObject();
+ v = value;
QCOMPARE(value, inner);
QCOMPARE(value.value("number").toDouble(), 999.);
+ QCOMPARE(v.toObject(), inner);
+ QCOMPARE(v.toObject(otherObject), inner);
+ QT_TEST_EQUALITY_OPS(v.toObject(), inner, true);
+ QT_TEST_EQUALITY_OPS(v.toObject(otherObject), inner, true);
+ QCOMPARE(v["number"].toDouble(), 999.);
// if we modify the original object, it should detach and not
// affect the nested object
@@ -836,6 +878,7 @@ void tst_QtJson::testObjectNested()
QCOMPARE(outer.value("nested").toObject().value("nested").toObject(), twoDeep);
QCOMPARE(outer.value("nested").toObject().value("nested").toObject().value("boolean").toBool(),
true);
+ QT_TEST_EQUALITY_OPS(outer.value("nested").toObject().value("nested").toObject(), twoDeep, true);
}
void tst_QtJson::testArrayNested()
@@ -861,6 +904,7 @@ void tst_QtJson::testArrayNested()
object.insert("boolean", true);
outer.append(object);
QCOMPARE(outer.last().toObject(), object);
+ QT_TEST_EQUALITY_OPS(outer.last().toObject(), object, true);
QCOMPARE(outer.last().toObject().value("boolean").toBool(), true);
// two deep arrays
@@ -880,6 +924,7 @@ void tst_QtJson::testArrayNestedEmpty()
QJsonValue val = object.value("inner");
QJsonArray value = object.value("inner").toArray();
QVERIFY(QJsonDocument(value).isArray());
+ QT_TEST_EQUALITY_OPS(QJsonDocument(), QJsonDocument(value), false);
QCOMPARE(value.size(), 0);
QCOMPARE(value, inner);
QCOMPARE(value.size(), 0);
@@ -897,14 +942,46 @@ void tst_QtJson::testObjectNestedEmpty()
object.insert("inner2", inner2);
QJsonObject value = object.value("inner").toObject();
QVERIFY(QJsonDocument(value).isObject());
+ QT_TEST_EQUALITY_OPS(QJsonDocument(), QJsonDocument(value), false);
QCOMPARE(value.size(), 0);
QCOMPARE(value, inner);
+ QT_TEST_EQUALITY_OPS(value, inner, true);
QCOMPARE(value.size(), 0);
object.insert("count", 0.);
QCOMPARE(object.value("inner").toObject().size(), 0);
QCOMPARE(object.value("inner").type(), QJsonValue::Object);
}
+void tst_QtJson::testArrayEquality_data()
+{
+ QTest::addColumn<QJsonArray>("array1");
+ QTest::addColumn<QJsonArray>("array2");
+ QTest::addColumn<bool>("expectedResult");
+ QTest::addRow("QJsonArray(), QJsonArray{665, 666, 667}")
+ << QJsonArray() << QJsonArray{665, 666, 667} << false;
+ QTest::addRow("QJsonArray(), QJsonArray{}")
+ << QJsonArray() << QJsonArray{} <<true;
+ QTest::addRow("QJsonArray(), QJsonArray{123, QLatin1String(\"foo\")}")
+ << QJsonArray() << QJsonArray{123, QLatin1String("foo")} << false;
+ QTest::addRow(
+ "QJsonArray{123,QLatin1String(\"foo\")}, QJsonArray{123,QLatin1String(\"foo\")}")
+ << QJsonArray{123, QLatin1String("foo")}
+ << QJsonArray{123, QLatin1String("foo")}
+ << true;
+}
+
+void tst_QtJson::testArrayEquality()
+{
+ QFETCH(QJsonArray, array1);
+ QFETCH(QJsonArray, array2);
+ QFETCH(bool, expectedResult);
+
+ QJsonValue value = QJsonValue(array1);
+
+ QT_TEST_EQUALITY_OPS(array1, array2, expectedResult);
+ QT_TEST_EQUALITY_OPS(value, array2, expectedResult);
+}
+
void tst_QtJson::testArrayComfortOperators()
{
QJsonArray first;
@@ -944,7 +1021,7 @@ void tst_QtJson::testValueRef()
QCOMPARE(object.value(QLatin1String("null")), QJsonValue());
object[QLatin1String("null")] = 100.;
QCOMPARE(object.value(QLatin1String("null")).type(), QJsonValue::Double);
- QJsonValue val = qAsConst(object)[QLatin1String("null")];
+ QJsonValue val = std::as_const(object)[QLatin1String("null")];
QCOMPARE(val.toDouble(), 100.);
QCOMPARE(object.size(), 2);
@@ -954,6 +1031,63 @@ void tst_QtJson::testValueRef()
QCOMPARE(object.value(QLatin1String("key")), QJsonValue(42));
}
+void tst_QtJson::testValueRefComparison()
+{
+ QJsonValue a0 = 42.;
+ QJsonValue a1 = QStringLiteral("142");
+
+#define CHECK_IMPL(lhs, rhs, ineq) \
+ QCOMPARE(lhs, rhs); \
+ QVERIFY(!(lhs != rhs)); \
+ QVERIFY(lhs != ineq); \
+ QVERIFY(!(lhs == ineq)); \
+ QVERIFY(ineq != rhs); \
+ QVERIFY(!(ineq == rhs)); \
+ /* end */
+
+#define CHECK(lhs, rhs, ineq) \
+ do { \
+ CHECK_IMPL(lhs, rhs, ineq) \
+ CHECK_IMPL(std::as_const(lhs), rhs, ineq) \
+ CHECK_IMPL(lhs, std::as_const(rhs), ineq) \
+ CHECK_IMPL(std::as_const(lhs), std::as_const(rhs), ineq) \
+ } while (0)
+
+ // check that the (in)equality operators aren't ambiguous in C++20:
+ QJsonArray a = {a0, a1};
+
+ static_assert(std::is_same_v<decltype(a[0]), QJsonValueRef>);
+
+ auto r0 = a.begin()[0];
+ auto r1 = a.begin()[1];
+ auto c0 = std::as_const(a).begin()[0];
+ // ref <> ref
+ CHECK(r0, r0, r1);
+ // cref <> ref
+ CHECK(c0, r0, r1);
+ // ref <> cref
+ CHECK(r0, c0, r1);
+ // ref <> val
+ CHECK(r0, a0, r1);
+ // cref <> val
+ CHECK(c0, a0, r1);
+ // val <> ref
+ CHECK(a0, r0, a1);
+ // val <> cref
+ CHECK(a0, c0, a1);
+ // val <> val
+ CHECK(a0, a0, a1);
+
+ QT_TEST_EQUALITY_OPS(r0, r1, false);
+ QT_TEST_EQUALITY_OPS(r0, c0, true);
+ QT_TEST_EQUALITY_OPS(c0, r1, false);
+ QT_TEST_EQUALITY_OPS(a0, c0, true);
+ QT_TEST_EQUALITY_OPS(a0, r1, false);
+
+#undef CHECK
+#undef CHECK_IMPL
+}
+
void tst_QtJson::testObjectIteration()
{
QJsonObject object;
@@ -967,8 +1101,9 @@ void tst_QtJson::testObjectIteration()
for (QJsonObject::iterator it = object.begin(); it != object.end(); ++it)
QFAIL("Iterator after property add-and-remove should be empty");
- for (int i = 0; i < 10; ++i)
- object[QString::number(i)] = (double)i;
+ // insert in weird order to confirm keys are sorted
+ for (int i : {0, 9, 5, 7, 8, 2, 1, 3, 6, 4})
+ object[QString::number(i)] = double(i);
QCOMPARE(object.size(), 10);
@@ -977,44 +1112,79 @@ void tst_QtJson::testObjectIteration()
for (QJsonObject::iterator it = object.begin(); it != object.end(); ++it) {
QJsonValue value = it.value();
QCOMPARE((double)it.key().toInt(), value.toDouble());
+ QT_TEST_EQUALITY_OPS(it, QJsonObject::iterator(), false);
}
{
QJsonObject object2 = object;
QCOMPARE(object, object2);
+ QT_TEST_EQUALITY_OPS(object, object2, true);
QJsonValue val = *object2.begin();
- object2.erase(object2.begin());
+ auto next = object2.erase(object2.begin());
QCOMPARE(object.size(), 10);
QCOMPARE(object2.size(), 9);
+ QVERIFY(next == object2.begin());
+ QT_TEST_EQUALITY_OPS(next, object2.begin(), true);
+
+ double d = 1; // we erased the first item
+ for (auto it = object2.constBegin(); it != object2.constEnd(); ++it, d += 1) {
+ QJsonValue value = it.value();
+ QVERIFY(it.value() != val);
+ QCOMPARE(it.value(), d);
+ QCOMPARE(it.value().toDouble(), d);
+ QCOMPARE(it.key().toInt(), value.toDouble());
+ }
+ }
- for (QJsonObject::const_iterator it = object2.constBegin(); it != object2.constEnd(); ++it) {
+ {
+ QJsonObject object2 = object;
+ QCOMPARE(object, object2);
+ QT_TEST_EQUALITY_OPS(object, object2, true);
+
+ QJsonValue val = *(object2.end() - 1);
+ auto next = object2.erase(object2.end() - 1);
+ QCOMPARE(object.size(), 10);
+ QCOMPARE(object2.size(), 9);
+ QVERIFY(next == object2.end());
+ double d = 0;
+ for (auto it = object2.constBegin(); it != object2.constEnd(); ++it, d += 1) {
QJsonValue value = it.value();
QVERIFY(it.value() != val);
- QCOMPARE((double)it.key().toInt(), value.toDouble());
+ QCOMPARE(it.value(), d);
+ QCOMPARE(it.value().toDouble(), d);
+ QCOMPARE(it.key().toInt(), value.toDouble());
}
}
{
QJsonObject object2 = object;
QCOMPARE(object, object2);
+ QT_TEST_EQUALITY_OPS(object, object2, true);
QJsonObject::iterator it = object2.find(QString::number(5));
QJsonValue val = *it;
- object2.erase(it);
+ auto next = object2.erase(it);
QCOMPARE(object.size(), 10);
QCOMPARE(object2.size(), 9);
+ QCOMPARE(*next, 6);
- for (QJsonObject::const_iterator it = object2.constBegin(); it != object2.constEnd(); ++it) {
+ int i = 0;
+ for (auto it = object2.constBegin(); it != object2.constEnd(); ++it, ++i) {
+ if (i == 5)
+ ++i;
QJsonValue value = it.value();
QVERIFY(it.value() != val);
- QCOMPARE((double)it.key().toInt(), value.toDouble());
+ QCOMPARE(it.value(), i);
+ QCOMPARE(it.value().toInt(), i);
+ QCOMPARE(it.key().toInt(), value.toDouble());
}
}
{
QJsonObject::Iterator it = object.begin();
it += 5;
+ QT_TEST_ALL_COMPARISON_OPS(it, object.begin(), Qt::strong_ordering::greater);
QCOMPARE(QJsonValue(it.value()).toDouble(), 5.);
it -= 3;
QCOMPARE(QJsonValue(it.value()).toDouble(), 2.);
@@ -1029,10 +1199,14 @@ void tst_QtJson::testObjectIteration()
it += 5;
QCOMPARE(QJsonValue(it.value()).toDouble(), 5.);
it -= 3;
+ QT_TEST_ALL_COMPARISON_OPS(object.constBegin(), it, Qt::strong_ordering::less);
QCOMPARE(QJsonValue(it.value()).toDouble(), 2.);
QJsonObject::ConstIterator it2 = it + 5;
+ QT_TEST_EQUALITY_OPS(it, it2, false);
QCOMPARE(QJsonValue(it2.value()).toDouble(), 7.);
it2 = it - 1;
+ QT_TEST_ALL_COMPARISON_OPS(it2, it, Qt::strong_ordering::less);
+ QT_TEST_ALL_COMPARISON_OPS(it2, it - 2, Qt::strong_ordering::greater);
QCOMPARE(QJsonValue(it2.value()).toDouble(), 1.);
}
@@ -1041,6 +1215,17 @@ void tst_QtJson::testObjectIteration()
it = object.erase(it);
QCOMPARE(object.size() , 0);
QCOMPARE(it, object.end());
+ QT_TEST_ALL_COMPARISON_OPS(it, object.end(), Qt::strong_ordering::equal);
+ QT_TEST_ALL_COMPARISON_OPS(it, object.constEnd(), Qt::strong_ordering::equal);
+ QT_TEST_ALL_COMPARISON_OPS(it, object.begin(),
+ Qt::strong_ordering::equal); // because object is empty
+ QT_TEST_ALL_COMPARISON_OPS(it, object.constBegin(), Qt::strong_ordering::equal);
+ QT_TEST_ALL_COMPARISON_OPS(QJsonObject::Iterator(),
+ QJsonObject::Iterator(), Qt::strong_ordering::equal);
+ QT_TEST_ALL_COMPARISON_OPS(QJsonObject::ConstIterator(),
+ QJsonObject::Iterator(), Qt::strong_ordering::equal);
+ QT_TEST_ALL_COMPARISON_OPS(QJsonObject::ConstIterator(),
+ QJsonObject::ConstIterator(), Qt::strong_ordering::equal);
}
void tst_QtJson::testArrayIteration()
@@ -1054,7 +1239,11 @@ void tst_QtJson::testArrayIteration()
int i = 0;
for (QJsonArray::iterator it = array.begin(); it != array.end(); ++it, ++i) {
QJsonValue value = (*it);
+ QJsonArray::iterator it1 = it;
QCOMPARE((double)i, value.toDouble());
+ QT_TEST_EQUALITY_OPS(QJsonArray::iterator(), QJsonArray::iterator(), true);
+ QT_TEST_EQUALITY_OPS(QJsonArray::iterator(), it, false);
+ QT_TEST_EQUALITY_OPS(it1, it, true);
}
QCOMPARE(array.begin()->toDouble(), array.constBegin()->toDouble());
@@ -1064,14 +1253,38 @@ void tst_QtJson::testArrayIteration()
QCOMPARE(array, array2);
QJsonValue val = *array2.begin();
- array2.erase(array2.begin());
+ auto next = array2.erase(array2.begin());
QCOMPARE(array.size(), 10);
QCOMPARE(array2.size(), 9);
+ QVERIFY(next == array2.begin());
i = 1;
- for (QJsonArray::const_iterator it = array2.constBegin(); it != array2.constEnd(); ++it, ++i) {
+ for (auto it = array2.constBegin(); it != array2.constEnd(); ++it, ++i) {
QJsonValue value = (*it);
- QCOMPARE((double)i, value.toDouble());
+ QCOMPARE(value.toInt(), i);
+ QCOMPARE(value.toDouble(), i);
+ QCOMPARE(it->toInt(), i);
+ QCOMPARE(it->toDouble(), i);
+ }
+ }
+
+ {
+ QJsonArray array2 = array;
+ QCOMPARE(array, array2);
+
+ QJsonValue val = array2.last();
+ auto next = array2.erase(array2.end() - 1);
+ QCOMPARE(array.size(), 10);
+ QCOMPARE(array2.size(), 9);
+ QVERIFY(next == array2.end());
+
+ i = 0;
+ for (auto it = array2.constBegin(); it != array2.constEnd(); ++it, ++i) {
+ QJsonValue value = (*it);
+ QCOMPARE(value.toInt(), i);
+ QCOMPARE(value.toDouble(), i);
+ QCOMPARE(it->toInt(), i);
+ QCOMPARE(it->toDouble(), i);
}
}
@@ -1085,6 +1298,13 @@ void tst_QtJson::testArrayIteration()
QCOMPARE(QJsonValue(*it2).toDouble(), 7.);
it2 = it - 1;
QCOMPARE(QJsonValue(*it2).toDouble(), 1.);
+ QT_TEST_EQUALITY_OPS(it, it2, false);
+ it = array.begin();
+ QT_TEST_EQUALITY_OPS(it, array.begin(), true);
+ it2 = it + 5;
+ QT_TEST_ALL_COMPARISON_OPS(it2, it, Qt::strong_ordering::greater);
+ it += 5;
+ QT_TEST_EQUALITY_OPS(it, it2, true);
}
{
@@ -1104,6 +1324,26 @@ void tst_QtJson::testArrayIteration()
it = array.erase(it);
QCOMPARE(array.size() , 0);
QCOMPARE(it, array.end());
+ QT_TEST_EQUALITY_OPS(it, array.end(), true);
+
+ {
+ int i = 0;
+ for (QJsonArray::const_iterator it = array.constBegin();
+ it != array.constEnd(); ++it, ++i) {
+ QJsonArray::const_iterator it1 = it;
+ QT_TEST_EQUALITY_OPS(QJsonArray::const_iterator(), QJsonArray::const_iterator(), true);
+ QT_TEST_EQUALITY_OPS(QJsonArray::const_iterator(), it, false);
+ QT_TEST_EQUALITY_OPS(it1, it, true);
+ }
+ }
+
+ {
+ QJsonArray::iterator nonConstIt = array.begin();
+ QJsonArray::const_iterator it = array.constBegin();
+ QT_TEST_EQUALITY_OPS(nonConstIt, it, true);
+ it+=1;
+ QT_TEST_ALL_COMPARISON_OPS(nonConstIt, it, Qt::strong_ordering::less);
+ }
}
void tst_QtJson::testObjectFind()
@@ -1117,14 +1357,12 @@ void tst_QtJson::testObjectFind()
QJsonObject::iterator it = object.find(QLatin1String("1"));
QCOMPARE((*it).toDouble(), 1.);
it = object.find(QString("11"));
- QCOMPARE((*it).type(), QJsonValue::Undefined);
QCOMPARE(it, object.end());
QJsonObject::const_iterator cit = object.constFind(QLatin1String("1"));
QCOMPARE((*cit).toDouble(), 1.);
cit = object.constFind(QString("11"));
- QCOMPARE((*it).type(), QJsonValue::Undefined);
- QCOMPARE(it, object.end());
+ QCOMPARE(cit, object.constEnd());
}
void tst_QtJson::testDocument()
@@ -1199,6 +1437,8 @@ void tst_QtJson::testDocument()
QCOMPARE(doc5.isObject(), false);
QCOMPARE(doc5.array().size(), 1);
QCOMPARE(doc5.array().at(0), QJsonValue(23));
+
+ QT_TEST_EQUALITY_OPS(doc2, doc3, true);
}
void tst_QtJson::nullValues()
@@ -1570,7 +1810,8 @@ void tst_QtJson::fromVariantHash()
void tst_QtJson::toVariantMap()
{
- QCOMPARE(QMetaType::Type(QJsonValue(QJsonObject()).toVariant().type()), QMetaType::QVariantMap); // QTBUG-32524
+ QCOMPARE(QMetaType::Type(QJsonValue(QJsonObject()).toVariant().typeId()),
+ QMetaType::QVariantMap); // QTBUG-32524
QJsonObject object;
QVariantMap map = object.toVariantMap();
@@ -1590,7 +1831,7 @@ void tst_QtJson::toVariantMap()
QCOMPARE(map.size(), 3);
QCOMPARE(map.value("Key"), QVariant(QString("Value")));
QCOMPARE(map.value("null"), QVariant::fromValue(nullptr));
- QCOMPARE(map.value("Array").type(), QVariant::List);
+ QCOMPARE(map.value("Array").typeId(), QMetaType::QVariantList);
QVariantList list = map.value("Array").toList();
QCOMPARE(list.size(), 4);
QCOMPARE(list.at(0), QVariant(true));
@@ -1619,7 +1860,7 @@ void tst_QtJson::toVariantHash()
QCOMPARE(hash.size(), 3);
QCOMPARE(hash.value("Key"), QVariant(QString("Value")));
QCOMPARE(hash.value("null"), QVariant::fromValue(nullptr));
- QCOMPARE(hash.value("Array").type(), QVariant::List);
+ QCOMPARE(hash.value("Array").typeId(), QMetaType::QVariantList);
QVariantList list = hash.value("Array").toList();
QCOMPARE(list.size(), 4);
QCOMPARE(list.at(0), QVariant(true));
@@ -1630,7 +1871,8 @@ void tst_QtJson::toVariantHash()
void tst_QtJson::toVariantList()
{
- QCOMPARE(QMetaType::Type(QJsonValue(QJsonArray()).toVariant().type()), QMetaType::QVariantList); // QTBUG-32524
+ QCOMPARE(QMetaType::Type(QJsonValue(QJsonArray()).toVariant().typeId()),
+ QMetaType::QVariantList); // QTBUG-32524
QJsonArray array;
QVariantList list = array.toVariantList();
@@ -1650,7 +1892,7 @@ void tst_QtJson::toVariantList()
QCOMPARE(list.size(), 3);
QCOMPARE(list[0], QVariant(QString("Value")));
QCOMPARE(list[1], QVariant::fromValue(nullptr));
- QCOMPARE(list[2].type(), QVariant::List);
+ QCOMPARE(list[2].typeId(), QMetaType::QVariantList);
QVariantList vlist = list[2].toList();
QCOMPARE(vlist.size(), 4);
QCOMPARE(vlist.at(0), QVariant(true));
@@ -1772,16 +2014,13 @@ void tst_QtJson::toJsonLargeNumericValues()
QJsonArray array;
array.append(QJsonValue(1.234567)); // actual precision bug in Qt 5.0.0
array.append(QJsonValue(1.7976931348623157e+308)); // JS Number.MAX_VALUE
- array.append(QJsonValue(5e-324)); // JS Number.MIN_VALUE
array.append(QJsonValue(std::numeric_limits<double>::min()));
array.append(QJsonValue(std::numeric_limits<double>::max()));
array.append(QJsonValue(std::numeric_limits<double>::epsilon()));
- array.append(QJsonValue(std::numeric_limits<double>::denorm_min()));
array.append(QJsonValue(0.0));
array.append(QJsonValue(-std::numeric_limits<double>::min()));
array.append(QJsonValue(-std::numeric_limits<double>::max()));
array.append(QJsonValue(-std::numeric_limits<double>::epsilon()));
- array.append(QJsonValue(-std::numeric_limits<double>::denorm_min()));
array.append(QJsonValue(-0.0));
array.append(QJsonValue(9007199254740992LL)); // JS Number max integer
array.append(QJsonValue(-9007199254740992LL)); // JS Number min integer
@@ -1795,27 +2034,21 @@ void tst_QtJson::toJsonLargeNumericValues()
" 1.234567,\n"
" 1.7976931348623157e+308,\n"
#ifdef QT_NO_DOUBLECONVERSION // "shortest" double conversion is not very short then
- " 4.9406564584124654e-324,\n"
" 2.2250738585072014e-308,\n"
" 1.7976931348623157e+308,\n"
" 2.2204460492503131e-16,\n"
- " 4.9406564584124654e-324,\n"
" 0,\n"
" -2.2250738585072014e-308,\n"
" -1.7976931348623157e+308,\n"
" -2.2204460492503131e-16,\n"
- " -4.9406564584124654e-324,\n"
#else
- " 5e-324,\n"
" 2.2250738585072014e-308,\n"
" 1.7976931348623157e+308,\n"
" 2.220446049250313e-16,\n"
- " 5e-324,\n"
" 0,\n"
" -2.2250738585072014e-308,\n"
" -1.7976931348623157e+308,\n"
" -2.220446049250313e-16,\n"
- " -5e-324,\n"
#endif
" 0,\n"
" 9007199254740992,\n"
@@ -1831,6 +2064,42 @@ void tst_QtJson::toJsonLargeNumericValues()
QCOMPARE(json, expected);
}
+void tst_QtJson::toJsonDenormalValues()
+{
+ if constexpr (std::numeric_limits<double>::has_denorm == std::denorm_present) {
+ QJsonObject object;
+ QJsonArray array;
+ array.append(QJsonValue(5e-324)); // JS Number.MIN_VALUE
+ array.append(QJsonValue(std::numeric_limits<double>::denorm_min()));
+ array.append(QJsonValue(-std::numeric_limits<double>::denorm_min()));
+ object.insert("Array", array);
+
+ QByteArray json = QJsonDocument(object).toJson();
+ QByteArray expected =
+ "{\n"
+ " \"Array\": [\n"
+#ifdef QT_NO_DOUBLECONVERSION // "shortest" double conversion is not very short then
+ " 4.9406564584124654e-324,\n"
+ " 4.9406564584124654e-324,\n"
+ " -4.9406564584124654e-324\n"
+#else
+ " 5e-324,\n"
+ " 5e-324,\n"
+ " -5e-324\n"
+#endif
+ " ]\n"
+ "}\n";
+
+ QCOMPARE(json, expected);
+ QJsonDocument doc;
+ doc.setObject(object);
+ json = doc.toJson();
+ QCOMPARE(json, expected);
+ } else {
+ QSKIP("Skipping 'denorm' as this type lacks denormals on this system");
+ }
+}
+
void tst_QtJson::fromJson()
{
{
@@ -2153,12 +2422,12 @@ void tst_QtJson::parseNumbers()
QCOMPARE(val.toDouble(), (double)numbers[i].n);
}
}
+ // test number parsing
+ struct Numbers {
+ const char *str;
+ double n;
+ };
{
- // test number parsing
- struct Numbers {
- const char *str;
- double n;
- };
Numbers numbers [] = {
{ "0", 0 },
{ "1", 1 },
@@ -2174,8 +2443,6 @@ void tst_QtJson::parseNumbers()
{ "1.1e10", 1.1e10 },
{ "1.1e308", 1.1e308 },
{ "-1.1e308", -1.1e308 },
- { "1.1e-308", 1.1e-308 },
- { "-1.1e-308", -1.1e-308 },
{ "1.1e+308", 1.1e+308 },
{ "-1.1e+308", -1.1e+308 },
{ "1.e+308", 1.e+308 },
@@ -2197,6 +2464,29 @@ void tst_QtJson::parseNumbers()
QCOMPARE(val.toDouble(), numbers[i].n);
}
}
+ if constexpr (std::numeric_limits<double>::has_denorm == std::denorm_present) {
+ Numbers numbers [] = {
+ { "1.1e-308", 1.1e-308 },
+ { "-1.1e-308", -1.1e-308 }
+ };
+ int size = sizeof(numbers)/sizeof(Numbers);
+ for (int i = 0; i < size; ++i) {
+ QByteArray json = "[ ";
+ json += numbers[i].str;
+ json += " ]";
+ QJsonDocument doc = QJsonDocument::fromJson(json);
+ QVERIFY(!doc.isEmpty());
+ QCOMPARE(doc.isArray(), true);
+ QCOMPARE(doc.isObject(), false);
+ QJsonArray array = doc.array();
+ QCOMPARE(array.size(), 1);
+ QJsonValue val = array.at(0);
+ QCOMPARE(val.type(), QJsonValue::Double);
+ QCOMPARE(val.toDouble(), numbers[i].n);
+ }
+ } else {
+ qInfo("Skipping denormal test as this system's double type lacks support");
+ }
}
void tst_QtJson::parseStrings()
@@ -2286,7 +2576,7 @@ void tst_QtJson::parseDuplicateKeys()
void tst_QtJson::testParser()
{
QFile file(testDataDir + "/test.json");
- file.open(QFile::ReadOnly);
+ QVERIFY(file.open(QFile::ReadOnly));
QByteArray testJson = file.readAll();
QJsonDocument doc = QJsonDocument::fromJson(testJson);
@@ -2342,6 +2632,13 @@ void tst_QtJson::testCompaction()
}
QCOMPARE(obj.size(), 1);
QCOMPARE(obj.value(QLatin1String("foo")).toString(), QLatin1String("bar"));
+
+ QJsonObject obj2;
+
+ QT_TEST_EQUALITY_OPS(obj, obj2, false);
+ QT_TEST_EQUALITY_OPS(QJsonObject(), obj2, true);
+ obj2 = obj;
+ QT_TEST_EQUALITY_OPS(obj, obj2, true);
}
void tst_QtJson::testDebugStream()
@@ -2621,57 +2918,57 @@ void tst_QtJson::testDetachBug()
void tst_QtJson::valueEquals()
{
QCOMPARE(QJsonValue(), QJsonValue());
- QVERIFY(QJsonValue() != QJsonValue(QJsonValue::Undefined));
- QVERIFY(QJsonValue() != QJsonValue(true));
- QVERIFY(QJsonValue() != QJsonValue(1.));
- QVERIFY(QJsonValue() != QJsonValue(QJsonArray()));
- QVERIFY(QJsonValue() != QJsonValue(QJsonObject()));
+ QT_TEST_EQUALITY_OPS(QJsonValue(), QJsonValue(QJsonValue::Undefined), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(), QJsonValue(true), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(), QJsonValue(1.), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(), QJsonValue(QJsonArray()), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(), QJsonValue(QJsonObject()), false);
QCOMPARE(QJsonValue(true), QJsonValue(true));
- QVERIFY(QJsonValue(true) != QJsonValue(false));
- QVERIFY(QJsonValue(true) != QJsonValue(QJsonValue::Undefined));
- QVERIFY(QJsonValue(true) != QJsonValue());
- QVERIFY(QJsonValue(true) != QJsonValue(1.));
- QVERIFY(QJsonValue(true) != QJsonValue(QJsonArray()));
- QVERIFY(QJsonValue(true) != QJsonValue(QJsonObject()));
+ QT_TEST_EQUALITY_OPS(QJsonValue(true), QJsonValue(false), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(true), QJsonValue(QJsonValue::Undefined), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(true), QJsonValue(), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(true), QJsonValue(1.), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(true), QJsonValue(QJsonArray()), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(true), QJsonValue(QJsonObject()), false);
QCOMPARE(QJsonValue(1), QJsonValue(1));
- QVERIFY(QJsonValue(1) != QJsonValue(2));
+ QT_TEST_EQUALITY_OPS(QJsonValue(1), QJsonValue(2), false);
QCOMPARE(QJsonValue(1), QJsonValue(1.));
- QVERIFY(QJsonValue(1) != QJsonValue(1.1));
- QVERIFY(QJsonValue(1) != QJsonValue(QJsonValue::Undefined));
- QVERIFY(QJsonValue(1) != QJsonValue());
- QVERIFY(QJsonValue(1) != QJsonValue(true));
- QVERIFY(QJsonValue(1) != QJsonValue(QJsonArray()));
- QVERIFY(QJsonValue(1) != QJsonValue(QJsonObject()));
+ QT_TEST_EQUALITY_OPS(QJsonValue(1), QJsonValue(1.1), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(1), QJsonValue(QJsonValue::Undefined), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(1), QJsonValue(), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(1), QJsonValue(true), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(1), QJsonValue(QJsonArray()), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(1), QJsonValue(QJsonObject()), false);
QCOMPARE(QJsonValue(1.), QJsonValue(1.));
- QVERIFY(QJsonValue(1.) != QJsonValue(2.));
- QVERIFY(QJsonValue(1.) != QJsonValue(QJsonValue::Undefined));
- QVERIFY(QJsonValue(1.) != QJsonValue());
- QVERIFY(QJsonValue(1.) != QJsonValue(true));
- QVERIFY(QJsonValue(1.) != QJsonValue(QJsonArray()));
- QVERIFY(QJsonValue(1.) != QJsonValue(QJsonObject()));
+ QT_TEST_EQUALITY_OPS(QJsonValue(1.), QJsonValue(2.), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(1.), QJsonValue(QJsonValue::Undefined), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(1.), QJsonValue(), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(1.), QJsonValue(true), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(1.), QJsonValue(QJsonArray()), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(1.), QJsonValue(QJsonObject()), false);
QCOMPARE(QJsonValue(QJsonArray()), QJsonValue(QJsonArray()));
QJsonArray nonEmptyArray;
nonEmptyArray.append(true);
- QVERIFY(QJsonValue(QJsonArray()) != nonEmptyArray);
- QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(QJsonValue::Undefined));
- QVERIFY(QJsonValue(QJsonArray()) != QJsonValue());
- QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(true));
- QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(1.));
- QVERIFY(QJsonValue(QJsonArray()) != QJsonValue(QJsonObject()));
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonArray()), nonEmptyArray, false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonArray()), QJsonValue(QJsonValue::Undefined), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonArray()), QJsonValue(), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonArray()), QJsonValue(true), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonArray()), QJsonValue(1.), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonArray()), QJsonValue(QJsonObject()), false);
QCOMPARE(QJsonValue(QJsonObject()), QJsonValue(QJsonObject()));
QJsonObject nonEmptyObject;
nonEmptyObject.insert("Key", true);
- QVERIFY(QJsonValue(QJsonObject()) != nonEmptyObject);
- QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(QJsonValue::Undefined));
- QVERIFY(QJsonValue(QJsonObject()) != QJsonValue());
- QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(true));
- QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(1.));
- QVERIFY(QJsonValue(QJsonObject()) != QJsonValue(QJsonArray()));
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonObject()), nonEmptyObject, false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonObject()), QJsonValue(QJsonValue::Undefined), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonObject()), QJsonValue(), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonObject()), QJsonValue(true), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonObject()), QJsonValue(1.), false);
+ QT_TEST_EQUALITY_OPS(QJsonValue(QJsonObject()), QJsonValue(QJsonArray()), false);
QCOMPARE(QJsonValue("foo"), QJsonValue(QLatin1String("foo")));
QCOMPARE(QJsonValue("foo"), QJsonValue(QString("foo")));
@@ -2864,7 +3161,7 @@ void tst_QtJson::documentEquals()
void tst_QtJson::bom()
{
QFile file(testDataDir + "/bom.json");
- file.open(QFile::ReadOnly);
+ QVERIFY(file.open(QFile::ReadOnly));
QByteArray json = file.readAll();
// Import json document into a QJsonDocument
@@ -3185,7 +3482,7 @@ void tst_QtJson::documentFromVariant()
// As JSON arrays they should be equal.
QCOMPARE(da1.array(), da2.array());
-
+ QT_TEST_EQUALITY_OPS(da1, da2, true);
QMap <QString, QVariant> map;
map["key"] = string;
@@ -3201,6 +3498,7 @@ void tst_QtJson::documentFromVariant()
// As JSON objects they should be equal.
QCOMPARE(do1.object(), do2.object());
+ QT_TEST_EQUALITY_OPS(do1, do2, true);
}
void tst_QtJson::parseErrorOffset_data()
@@ -3299,6 +3597,7 @@ void tst_QtJson::streamSerializationQJsonDocument()
QDataStream load(buffer);
load >> output;
QCOMPARE(output, document);
+ QT_TEST_EQUALITY_OPS(output, document, true);
}
void tst_QtJson::streamSerializationQJsonArray_data()
@@ -3688,6 +3987,7 @@ void tst_QtJson::noLeakOnNameClash()
QVERIFY2(!expected.isNull(), qPrintable(error.errorString()));
QCOMPARE(doc, expected);
+ QT_TEST_EQUALITY_OPS(doc, expected, true);
// It should not leak.
// In particular it should not forget to deref the container for the inner objects.
diff --git a/tests/auto/corelib/serialization/qcborstreamreader/CMakeLists.txt b/tests/auto/corelib/serialization/qcborstreamreader/CMakeLists.txt
index 276474ba37..29a935977b 100644
--- a/tests/auto/corelib/serialization/qcborstreamreader/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qcborstreamreader/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qcborstreamreader.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcborstreamreader Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcborstreamreader LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcborstreamreader
SOURCES
tst_qcborstreamreader.cpp
INCLUDE_DIRECTORIES
../../../../../src/3rdparty/tinycbor/src
- ../../../../../src/3rdparty/tinycbor/tests/parser
- PUBLIC_LIBRARIES
+ ../../../../../src/3rdparty/tinycbor/tests
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/serialization/qcborstreamreader/tst_qcborstreamreader.cpp b/tests/auto/corelib/serialization/qcborstreamreader/tst_qcborstreamreader.cpp
index 8d0b5a054e..63cfbce75f 100644
--- a/tests/auto/corelib/serialization/qcborstreamreader/tst_qcborstreamreader.cpp
+++ b/tests/auto/corelib/serialization/qcborstreamreader/tst_qcborstreamreader.cpp
@@ -1,48 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/qcborstream.h>
#include <QTest>
#include <QBuffer>
-#include <QtCore/private/qbytearray_p.h>
-
class tst_QCborStreamReader : public QObject
{
Q_OBJECT
@@ -124,7 +86,7 @@ template<> char *toString<QCborStreamReader::Type>(const QCborStreamReader::Type
QT_END_NAMESPACE
// Get the data from TinyCBOR (see src/3rdparty/tinycbor/tests/parser/data.cpp)
-#include "data.cpp"
+#include "parser/data.cpp"
void tst_QCborStreamReader::initTestCase_data()
{
@@ -693,6 +655,7 @@ void tst_QCborStreamReader::strings()
QCOMPARE(reader.currentStringChunkSize(), qsizetype(reader.length()));
int chunks = 0;
+ QByteArray fullString;
forever {
QCborStreamReader::StringResult<QByteArray> controlData;
if (reader.isString()) {
@@ -703,6 +666,7 @@ void tst_QCborStreamReader::strings()
controlData = controlReader.readByteArray();
}
QVERIFY(controlData.status != QCborStreamReader::Error);
+ fullString += controlData.data;
for (int i = 0; i < 10; ++i) {
// this call must work several times with the same result
@@ -725,6 +689,43 @@ void tst_QCborStreamReader::strings()
if (!isChunked)
QCOMPARE(chunks, 1);
+
+ // Now re-do and compare with toString() and toByteArray(), against
+ // the control data we calculated above
+ reader.reset();
+ QVERIFY(reader.isString() || reader.isByteArray());
+ if (reader.isByteArray()) {
+ QByteArray prefix("some prefix");
+ QByteArray ba = prefix;
+ QVERIFY(reader.readAndAppendToByteArray(ba));
+ QCOMPARE(ba, prefix + fullString);
+ } else {
+ QString prefix("some prefix");
+ QString str = prefix;
+ QVERIFY(reader.readAndAppendToString(str));
+ QCOMPARE(str, prefix + QString::fromUtf8(fullString));
+ }
+
+ // Re-do again using the UTF-8 interface.
+ reader.reset();
+ QVERIFY(reader.isString() || reader.isByteArray());
+ if (reader.isString()) {
+ QByteArray prefix("some prefix");
+ QByteArray utf8 = prefix;
+ QVERIFY(reader.readAndAppendToUtf8String(utf8));
+ QCOMPARE(utf8, prefix + fullString);
+
+ reader.reset();
+ fullString = prefix;
+ forever {
+ auto r = reader.readUtf8String();
+ QCOMPARE_NE(r.status, QCborStreamReader::Error);
+ fullString += r.data;
+ if (r.status == QCborStreamReader::EndOfString)
+ break;
+ }
+ QCOMPARE(fullString, utf8);
+ }
}
void tst_QCborStreamReader::tags_data()
@@ -917,7 +918,7 @@ void tst_QCborStreamReader::validation_data()
// Add QCborStreamReader-specific limitations due to use of QByteArray and
// QString, which are allocated by QArrayData::allocate().
const qsizetype MaxInvalid = std::numeric_limits<QByteArray::size_type>::max();
- const qsizetype MinInvalid = MaxByteArraySize + 1;
+ const qsizetype MinInvalid = QByteArray::max_size() + 1;
addValidationColumns();
addValidationData(MinInvalid);
@@ -944,11 +945,57 @@ void tst_QCborStreamReader::validation()
reader.reset();
QVERIFY(!reader.next());
QCOMPARE(reader.lastError(), error);
+
+ // check toString() and toByteArray() too
+ if (reader.isString() || reader.isByteArray()) {
+ reader.reset();
+ if (reader.isString()) {
+ QString prefix = "some prefix";
+ QString str = prefix;
+ QVERIFY(!reader.readAndAppendToString(str));
+ QVERIFY(str.startsWith(prefix)); // but may have decoded some
+ } else if (reader.isByteArray()) {
+ QByteArray prefix = "some prefix";
+ QByteArray ba = prefix;
+ QVERIFY(!reader.readAndAppendToByteArray(ba));
+ QVERIFY(ba.startsWith(prefix)); // but may have decoded some
+ }
+ QCOMPARE(reader.lastError(), error);
+
+ reader.reset();
+ if (reader.isString())
+ QVERIFY(reader.readAllString().isNull());
+ else
+ QVERIFY(reader.readAllByteArray().isNull());
+ }
+
+ reader.reset();
+
+ // and the UTF-8 API
+ if (reader.isString()) {
+ QByteArray prefix = "some prefix";
+ QByteArray ba = prefix;
+ QVERIFY(!reader.readAndAppendToUtf8String(ba));
+ QVERIFY(ba.startsWith(prefix)); // but may have decoded some
+ QCOMPARE(reader.lastError(), error);
+
+ reader.reset();
+ QVERIFY(reader.readAllUtf8String().isNull());
+
+ reader.reset();
+ auto r = reader.readUtf8String();
+ for ( ; r.status == QCborStreamReader::Ok; r = reader.readUtf8String()) {
+ // while the data is valid...
+ QVERIFY(!r.data.isNull());
+ }
+ QCOMPARE_NE(r.status, QCborStreamReader::EndOfString);
+ QCOMPARE(reader.lastError(), error);
+ }
}
void tst_QCborStreamReader::hugeDeviceValidation_data()
{
- addValidationHugeDevice(MaxByteArraySize + 1, MaxStringSize + 1);
+ addValidationHugeDevice(QByteArray::max_size() + 1, QString::max_size() + 1);
}
void tst_QCborStreamReader::hugeDeviceValidation()
@@ -957,6 +1004,17 @@ void tst_QCborStreamReader::hugeDeviceValidation()
if (!useDevice)
return;
+#if (defined(__SANITIZE_ADDRESS__) || __has_feature(address_sanitizer))
+ if ( qstrcmp(QTest::currentDataTag(), "bytearray-just-too-big") == 0
+ || qstrcmp(QTest::currentDataTag(), "string-just-too-big") == 0)
+ QSKIP("This test tries to allocate a huge memory buffer,"
+ " which Address Sanitizer flags as a problem");
+#endif
+#if defined(Q_OS_WASM)
+ QSKIP("This test tries to allocate a huge memory buffer,"
+ " causes problem on WebAssembly platform which has limited resources.");
+#endif // Q_OS_WASM
+
QFETCH(QSharedPointer<QIODevice>, device);
QFETCH(CborError, expectedError);
QFETCH(CborError, expectedValidationError);
diff --git a/tests/auto/corelib/serialization/qcborstreamwriter/CMakeLists.txt b/tests/auto/corelib/serialization/qcborstreamwriter/CMakeLists.txt
index 2796dc214c..c1a9a87677 100644
--- a/tests/auto/corelib/serialization/qcborstreamwriter/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qcborstreamwriter/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qcborstreamwriter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcborstreamwriter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcborstreamwriter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcborstreamwriter
SOURCES
tst_qcborstreamwriter.cpp
INCLUDE_DIRECTORIES
- ../../../../../src/3rdparty/tinycbor/tests/encoder
+ ../../../../../src/3rdparty/tinycbor/tests
)
diff --git a/tests/auto/corelib/serialization/qcborstreamwriter/tst_qcborstreamwriter.cpp b/tests/auto/corelib/serialization/qcborstreamwriter/tst_qcborstreamwriter.cpp
index b32a2b4d73..45e241ef5c 100644
--- a/tests/auto/corelib/serialization/qcborstreamwriter/tst_qcborstreamwriter.cpp
+++ b/tests/auto/corelib/serialization/qcborstreamwriter/tst_qcborstreamwriter.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QCborStreamWriter>
@@ -65,7 +29,7 @@ private Q_SLOTS:
// Get the data from TinyCBOR (see src/3rdparty/tinycbor/tests/encoder/data.cpp)
typedef quint64 CborTag;
-#include "data.cpp"
+#include "encoder/data.cpp"
void encodeVariant(QCborStreamWriter &writer, const QVariant &v)
{
@@ -117,9 +81,9 @@ void encodeVariant(QCborStreamWriter &writer, const QVariant &v)
list = v.value<IndeterminateLengthArray>();
writer.startArray();
} else {
- writer.startArray(list.length());
+ writer.startArray(list.size());
}
- for (const QVariant &v2 : qAsConst(list))
+ for (const QVariant &v2 : std::as_const(list))
encodeVariant(writer, v2);
QVERIFY(writer.endArray());
return;
@@ -130,9 +94,9 @@ void encodeVariant(QCborStreamWriter &writer, const QVariant &v)
map = v.value<IndeterminateLengthMap>();
writer.startMap();
} else {
- writer.startMap(map.length());
+ writer.startMap(map.size());
}
- for (auto pair : qAsConst(map)) {
+ for (auto pair : std::as_const(map)) {
encodeVariant(writer, pair.first);
encodeVariant(writer, pair.second);
}
diff --git a/tests/auto/corelib/serialization/qcborvalue/CMakeLists.txt b/tests/auto/corelib/serialization/qcborvalue/CMakeLists.txt
index 9233888671..4b72396489 100644
--- a/tests/auto/corelib/serialization/qcborvalue/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qcborvalue/CMakeLists.txt
@@ -1,15 +1,23 @@
-# Generated from qcborvalue.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcborvalue Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcborvalue LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcborvalue
SOURCES
tst_qcborvalue.cpp
INCLUDE_DIRECTORIES
../../../../../src/3rdparty/tinycbor/src
../../../../../src/3rdparty/tinycbor/tests/parser
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp b/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp
index f5a3e4817c..23b25834b9 100644
--- a/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp
+++ b/tests/auto/corelib/serialization/qcborvalue/tst_qcborvalue.cpp
@@ -1,55 +1,23 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module 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) 2022 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/qcborvalue.h>
#include <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
+
#include <QBuffer>
#include <QCborStreamReader>
#include <QCborStreamWriter>
+#include <QDateTime>
#include <QtEndian>
-
-#include <QtCore/private/qbytearray_p.h>
+#include <QTimeZone>
Q_DECLARE_METATYPE(QCborKnownTags)
Q_DECLARE_METATYPE(QCborValue)
Q_DECLARE_METATYPE(QCborValue::EncodingOptions)
+using namespace Qt::StringLiterals;
+
class tst_QCborValue : public QObject
{
Q_OBJECT
@@ -61,6 +29,7 @@ private slots:
void tagged();
void extendedTypes_data();
void extendedTypes();
+ void compareCompiles();
void copyCompare_data() { basics_data(); }
void copyCompare();
@@ -72,6 +41,9 @@ private slots:
void arrayMutation();
void arrayMutateWithCopies();
void arrayPrepend();
+ void arrayValueRef_data() { basics_data(); }
+ void arrayValueRef();
+ void arrayValueRefLargeKey();
void arrayInsertRemove_data() { basics_data(); }
void arrayInsertRemove();
void arrayInsertTagged_data() { basics_data(); }
@@ -79,16 +51,25 @@ private slots:
void arrayStringElements();
void arraySelfAssign_data() { basics_data(); }
void arraySelfAssign();
+ void arrayNested();
void mapDefaultInitialization();
void mapEmptyInitializerList();
void mapEmptyDetach();
void mapNonEmptyDetach();
void mapSimpleInitializerList();
+ void mapFromArrayLargeIntKey_data() { basics_data(); }
+ void mapFromArrayLargeIntKey();
+ void mapFromArrayNegativeIntKey_data() { basics_data(); }
+ void mapFromArrayNegativeIntKey();
+ void mapFromArrayStringKey_data() { basics_data(); }
+ void mapFromArrayStringKey();
void mapMutation();
void mapMutateWithCopies();
void mapStringValues();
void mapStringKeys();
+ void mapValueRef_data() { basics_data(); }
+ void mapValueRef();
void mapInsertRemove_data() { basics_data(); }
void mapInsertRemove();
void mapInsertTagged_data() { basics_data(); }
@@ -97,8 +78,12 @@ private slots:
void mapSelfAssign();
void mapComplexKeys_data() { basics_data(); }
void mapComplexKeys();
+ void mapNested();
+ void sorting_data();
void sorting();
+ void comparisonMap_data();
+ void comparisonMap();
void toCbor_data();
void toCbor();
@@ -121,6 +106,19 @@ private slots:
void toDiagnosticNotation_data();
void toDiagnosticNotation();
+ void cborValueRef_data();
+ void cborValueRef();
+ void cborValueConstRef_data() { cborValueRef_data(); }
+ void cborValueConstRef();
+ void cborValueRefMutatingArray_data() { cborValueRef_data(); }
+ void cborValueRefMutatingArray();
+ void cborValueRefMutatingMapIntKey_data() { cborValueRef_data(); }
+ void cborValueRefMutatingMapIntKey();
+ void cborValueRefMutatingMapLatin1StringKey_data() { cborValueRef_data(); }
+ void cborValueRefMutatingMapLatin1StringKey();
+ void cborValueRefMutatingMapStringKey_data() { cborValueRef_data(); }
+ void cborValueRefMutatingMapStringKey();
+
void datastreamSerialization_data();
void datastreamSerialization();
void streamVariantSerialization();
@@ -301,6 +299,7 @@ static void basicTypeCheck(QCborValue::Type type, const QCborValue &v, const QVa
QCOMPARE(v.isDouble(), type == QCborValue::Double);
QCOMPARE(v.isDateTime(), type == QCborValue::DateTime);
QCOMPARE(v.isUrl(), type == QCborValue::Url);
+ QCOMPARE(v.isRegularExpression(), type == QCborValue::RegularExpression);
QCOMPARE(v.isUuid(), type == QCborValue::Uuid);
QCOMPARE(v.isInvalid(), type == QCborValue::Invalid);
QCOMPARE(v.isContainer(), type == QCborValue::Array || type == QCborValue::Map);
@@ -398,7 +397,7 @@ void tst_QCborValue::extendedTypes_data()
QTest::addColumn<QCborValue>("correctedTaggedValue");
QCborValue v(QCborValue::Invalid);
QDateTime dt = QDateTime::currentDateTimeUtc();
- QDateTime dtTzOffset(dt.date(), dt.time(), Qt::OffsetFromUTC, dt.offsetFromUtc());
+ QDateTime dtTzOffset(dt.date(), dt.time(), QTimeZone::fromSecondsAheadOfUtc(dt.offsetFromUtc()));
QUuid uuid = QUuid::createUuid();
// non-correcting extended types (tagged value remains unchanged)
@@ -422,7 +421,7 @@ void tst_QCborValue::extendedTypes_data()
<< QCborKnownTags::Uuid << QCborValue(uuid.toRfc4122()) << v;
// correcting extended types
- QDateTime dtNoMsecs = dt.fromSecsSinceEpoch(dt.toSecsSinceEpoch(), Qt::UTC);
+ QDateTime dtNoMsecs = dt.fromSecsSinceEpoch(dt.toSecsSinceEpoch(), QTimeZone::UTC);
QUrl url("https://example.com/\xc2\xa9 ");
QTest::newRow("UnixTime_t:Integer") << QCborValue(dtNoMsecs) << QCborKnownTags::UnixTime_t
<< QCborValue(dtNoMsecs.toSecsSinceEpoch())
@@ -433,10 +432,11 @@ void tst_QCborValue::extendedTypes_data()
QTest::newRow("DateTime::JustDate") << QCborValue(QDateTime({2018, 1, 1}, {}))
<< QCborKnownTags::DateTimeString
<< QCborValue("2018-01-01") << QCborValue("2018-01-01T00:00:00.000");
- QTest::newRow("DateTime::TzOffset") << QCborValue(QDateTime({2018, 1, 1}, {9, 0, 0}, Qt::UTC))
- << QCborKnownTags::DateTimeString
- << QCborValue("2018-01-01T09:00:00.000+00:00")
- << QCborValue("2018-01-01T09:00:00.000Z");
+ QTest::newRow("DateTime::TzOffset")
+ << QCborValue(QDateTime({2018, 1, 1}, {9, 0}, QTimeZone::UTC))
+ << QCborKnownTags::DateTimeString
+ << QCborValue("2018-01-01T09:00:00.000+00:00")
+ << QCborValue("2018-01-01T09:00:00.000Z");
QTest::newRow("Url:NotNormalized") << QCborValue(url) << QCborKnownTags::Url
<< QCborValue("HTTPS://EXAMPLE.COM/%c2%a9%20")
<< QCborValue(url.toString());
@@ -451,6 +451,35 @@ void tst_QCborValue::extendedTypes_data()
<< QCborValue(uuid.toRfc4122() + "\1\2\3\4") << QCborValue(uuid.toRfc4122());
}
+void tst_QCborValue::compareCompiles()
+{
+ // homogeneous types
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborValue>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborValueRef>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborValueConstRef>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborArray>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborArray::Iterator>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborArray::ConstIterator>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborMap>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborMap::Iterator>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborMap::ConstIterator>();
+
+ // QCborValue, Ref and ConstRef
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborValueRef, QCborValueConstRef>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborValueConstRef, QCborValue>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborValueRef, QCborValue>();
+
+ // QCbor{Array,Map} <=> QCborValue{,Ref,ConstRef}
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborArray, QCborValue>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborArray, QCborValueRef>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborArray, QCborValueConstRef>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborMap, QCborValue>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborMap, QCborValueRef>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborMap, QCborValueConstRef>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QCborArray::Iterator,
+ QCborArray::ConstIterator>();
+}
+
void tst_QCborValue::extendedTypes()
{
QFETCH(QCborValue, extended);
@@ -478,9 +507,13 @@ void tst_QCborValue::copyCompare()
QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wself-move")
+#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU >= 1301
+QT_WARNING_DISABLE_GCC("-Wself-move")
+#endif
// self-moving
v = std::move(v);
QCOMPARE(v, other); // make sure it's still valid
+ QT_TEST_ALL_COMPARISON_OPS(v, other, Qt::strong_ordering::equal);
QT_WARNING_POP
// moving
@@ -492,24 +525,15 @@ QT_WARNING_POP
other = v;
v = other;
-
QCOMPARE(v.compare(other), 0);
- QCOMPARE(v, other);
- QVERIFY(!(v != other));
- QVERIFY(!(v < other));
-#if 0 && __has_include(<compare>)
- QVERIFY(v <= other);
- QVERIFY(v >= other);
- QVERIFY(!(v > other));
-#endif
+ QT_TEST_ALL_COMPARISON_OPS(v, other, Qt::strong_ordering::equal);
if (v.isUndefined())
other = nullptr;
else
other = {};
QVERIFY(v.type() != other.type());
- QVERIFY(!(v == other));
- QVERIFY(v != other);
+ QT_TEST_EQUALITY_OPS(v, other, false);
// they're different types, so they can't compare equal
QVERIFY(v.compare(other) != 0);
@@ -539,9 +563,8 @@ void tst_QCborValue::arrayDefaultInitialization()
QVERIFY(a.at(0).isUndefined());
QCOMPARE(a.constBegin(), a.constEnd());
- QVERIFY(a == a);
- QVERIFY(a == QCborArray());
- QVERIFY(QCborArray() == a);
+ QT_TEST_EQUALITY_OPS(a, a, true);
+ QT_TEST_EQUALITY_OPS(a, QCborArray(), true);
QCborValue v(a);
QVERIFY(v.isArray());
@@ -550,7 +573,7 @@ void tst_QCborValue::arrayDefaultInitialization()
QCborArray a2 = v.toArray();
QVERIFY(a2.isEmpty());
- QCOMPARE(a2, a);
+ QT_TEST_EQUALITY_OPS(a2, a, true);
auto front = v[0];
QVERIFY(front.isUndefined());
front = 1;
@@ -590,9 +613,8 @@ void tst_QCborValue::mapDefaultInitialization()
QVERIFY(m.value("Hello").isUndefined());
#endif
- QVERIFY(m == m);
- QVERIFY(m == QCborMap{});
- QVERIFY(QCborMap{} == m);
+ QT_TEST_EQUALITY_OPS(m, m, true);
+ QT_TEST_EQUALITY_OPS(m, QCborMap{}, true);
const QCborValue v(m);
QVERIFY(v.isMap());
@@ -605,7 +627,7 @@ void tst_QCborValue::mapDefaultInitialization()
QCborMap m2 = v.toMap();
QVERIFY(m2.isEmpty());
QCOMPARE(m2.size(), 0);
- QCOMPARE(m2, m);
+ QT_TEST_EQUALITY_OPS(m2, m, true);
}
void tst_QCborValue::arrayEmptyInitializerList()
@@ -613,9 +635,8 @@ void tst_QCborValue::arrayEmptyInitializerList()
QCborArray a{};
QVERIFY(a.isEmpty());
QCOMPARE(a.size(), 0);
- QVERIFY(a == a);
- QVERIFY(a == QCborArray());
- QVERIFY(QCborArray() == a);
+ QT_TEST_EQUALITY_OPS(a, a, true);
+ QT_TEST_EQUALITY_OPS(a, QCborArray(), true);
}
void tst_QCborValue::mapEmptyInitializerList()
@@ -623,9 +644,8 @@ void tst_QCborValue::mapEmptyInitializerList()
QCborMap m{};
QVERIFY(m.isEmpty());
QCOMPARE(m.size(), 0);
- QVERIFY(m == m);
- QVERIFY(m == QCborMap{});
- QVERIFY(QCborMap{} == m);
+ QT_TEST_EQUALITY_OPS(m, m, true);
+ QT_TEST_EQUALITY_OPS(QCborMap{}, m, true);
}
void tst_QCborValue::arrayEmptyDetach()
@@ -635,9 +655,8 @@ void tst_QCborValue::arrayEmptyDetach()
QVERIFY(a.isEmpty());
QCOMPARE(a.size(), 0);
- QVERIFY(a == a);
- QVERIFY(a == QCborArray());
- QVERIFY(QCborArray() == a);
+ QT_TEST_EQUALITY_OPS(a, a, true);
+ QT_TEST_EQUALITY_OPS(a, QCborArray(), true);
QCborValue v(a);
QVERIFY(v.isArray());
@@ -656,9 +675,8 @@ void tst_QCborValue::mapEmptyDetach()
QVERIFY(m.isEmpty());
QCOMPARE(m.size(), 0);
- QVERIFY(m == m);
- QVERIFY(m == QCborMap{});
- QVERIFY(QCborMap{} == m);
+ QT_TEST_EQUALITY_OPS(m, m, true);
+ QT_TEST_EQUALITY_OPS(QCborMap{}, m, true);
QCborValue v(m);
QVERIFY(v.isMap());
@@ -667,7 +685,7 @@ void tst_QCborValue::mapEmptyDetach()
QCborMap m2 = v.toMap();
QVERIFY(m2.isEmpty());
- QCOMPARE(m2, m);
+ QT_TEST_EQUALITY_OPS(m2, m, true);
}
void tst_QCborValue::arrayNonEmptyDetach()
@@ -728,6 +746,13 @@ void tst_QCborValue::mapNonEmptyDetach()
{ QCborMap copy(m); auto it = m.find(QLatin1String("3")); QVERIFY(it == m.end()); }
{ QCborMap copy(m); auto it = m.find(QString("3")); QVERIFY(it == m.end()); }
{ QCborMap copy(m); auto it = m.find(QCborValue(3)); QVERIFY(it == m.end()); }
+
+ QT_TEST_EQUALITY_OPS(m.constBegin(), m.constEnd(), false);
+ QT_TEST_EQUALITY_OPS(m.begin(), m.end(), false);
+ QT_TEST_EQUALITY_OPS(m.constFind(3), m.constEnd(), true);
+ QT_TEST_EQUALITY_OPS(m.find(3), m.end(), true);
+ QT_TEST_EQUALITY_OPS(m.find(3), m.constEnd(), true);
+ QT_TEST_EQUALITY_OPS(m.constFind(3), m.end(), true);
}
void tst_QCborValue::arrayInitializerList()
@@ -743,10 +768,9 @@ void tst_QCborValue::arrayInitializerList()
QCOMPARE(a.at(5), QCborValue(QCborValue::Undefined));
QCOMPARE(a.at(6), QCborValue(1.0));
- QVERIFY(a == a);
- QVERIFY(a != QCborArray{});
- QVERIFY(QCborArray{} != a);
- QVERIFY(a == QCborArray({0, -1, false, true, nullptr, {}, 1.0}));
+ QT_TEST_EQUALITY_OPS(a, a, true);
+ QT_TEST_EQUALITY_OPS(a, QCborArray{}, false);
+ QT_TEST_EQUALITY_OPS(a, QCborArray({0, -1, false, true, nullptr, {}, 1.0}), true);
QCborValue v = a;
QCOMPARE(v[0], QCborValue(0));
@@ -775,12 +799,17 @@ void tst_QCborValue::arrayInitializerList()
// iterators
auto it = a.constBegin();
auto end = a.constEnd();
+ QT_TEST_ALL_COMPARISON_OPS(it, end, Qt::strong_ordering::less);
QCOMPARE(end - it, 7);
QCOMPARE(it + 7, end);
+ QT_TEST_EQUALITY_OPS(it + 7, end, true);
QVERIFY(it->isInteger());
QCOMPARE(*it, QCborValue(0));
QCOMPARE(it[1], QCborValue(-1));
QCOMPARE(*(it + 2), QCborValue(false));
+ QT_TEST_EQUALITY_OPS(*it, QCborValue(0), true);
+ QT_TEST_EQUALITY_OPS(it[1], QCborValue(-1), true);
+ QT_TEST_EQUALITY_OPS(*(it + 2), QCborValue(false), true);
it += 3;
QCOMPARE(*it, QCborValue(true));
++it;
@@ -791,10 +820,28 @@ void tst_QCborValue::arrayInitializerList()
QCOMPARE(*end, QCborValue(1.0));
end--;
QCOMPARE(it, end);
+ QT_TEST_EQUALITY_OPS(it, end, true);
+ QT_TEST_EQUALITY_OPS(it, QCborArray::ConstIterator(), false);
+ QT_TEST_EQUALITY_OPS(QCborArray::ConstIterator(), end, false);
+ QT_TEST_EQUALITY_OPS(QCborArray::ConstIterator(), QCborArray::ConstIterator(), true);
+ QT_TEST_EQUALITY_OPS(QCborArray::ConstIterator(), QCborArray::Iterator(), true);
+
+ {
+ auto it = a.begin();
+ auto it1 = a.constBegin();
+ auto end = a.end();
+ QT_TEST_ALL_COMPARISON_OPS(it, end, Qt::strong_ordering::less);
+ QT_TEST_ALL_COMPARISON_OPS(it1, end, Qt::strong_ordering::less);
+ QT_TEST_EQUALITY_OPS(it + 7, end, true);
+ QT_TEST_EQUALITY_OPS(it1 + 7, end, true);
+ QT_TEST_EQUALITY_OPS(it, QCborArray::Iterator(), false);
+ QT_TEST_EQUALITY_OPS(QCborArray::Iterator(), end, false);
+ QT_TEST_EQUALITY_OPS(QCborArray::Iterator(), QCborArray::ConstIterator(), true);
+ }
// range for
int i = 0;
- for (const QCborValue v : qAsConst(a)) {
+ for (const QCborValue v : std::as_const(a)) {
QVERIFY(!v.isInvalid());
QCOMPARE(v.isUndefined(), i == 5); // 6th element is Undefined
++i;
@@ -806,10 +853,9 @@ void tst_QCborValue::mapSimpleInitializerList()
{
QCborMap m{{0, 0}, {1, 0}, {2, "Hello"}, {"Hello", 2}, {3, QLatin1String("World")}, {QLatin1String("World"), 3}};
QCOMPARE(m.size(), 6);
- QVERIFY(m == m);
- QVERIFY(m != QCborMap{});
- QVERIFY(QCborMap{} != m);
- QVERIFY(m == QCborMap({{0, 0}, {1, 0}, {2, "Hello"}, {"Hello", 2}, {3, QLatin1String("World")}, {QLatin1String("World"), 3}}));
+ QT_TEST_EQUALITY_OPS(m, m, true);
+ QT_TEST_EQUALITY_OPS(m, QCborMap{}, false);
+ QT_TEST_EQUALITY_OPS(m, QCborMap({{0, 0}, {1, 0}, {2, "Hello"}, {"Hello", 2}, {3, QLatin1String("World")}, {QLatin1String("World"), 3}}), true);
QCborValue vmap = m;
{
@@ -894,7 +940,7 @@ void tst_QCborValue::mapSimpleInitializerList()
// range for
int i = 0;
- for (auto pair : qAsConst(m)) {
+ for (auto pair : std::as_const(m)) {
QVERIFY(!pair.first.isUndefined());
QVERIFY(!pair.second.isUndefined());
++i;
@@ -902,6 +948,55 @@ void tst_QCborValue::mapSimpleInitializerList()
QCOMPARE(i, m.size());
}
+template <typename T> static void mapFromArray_template(T key)
+{
+ QFETCH(QCborValue::Type, type);
+ QFETCH(QCborValue, v);
+ if (v.isMap())
+ return; // already a map, nothing will happen
+
+ // verify forced conversions work
+ // (our only Array row is an empty array, so it doesn't produce the warning)
+ QCborValue v2 = v;
+ QVERIFY(v2[key].isUndefined());
+ QCOMPARE(v2.type(), QCborValue::Map);
+ QCOMPARE(v.type(), type);
+ QCborMap m = v2.toMap();
+ QCOMPARE(m.size(), 1);
+ QCOMPARE(m.begin().key(), QCborValue(key));
+
+ // non-empty array conversions
+ QCborValue va = QCborArray{v};
+ v2 = va;
+ QTest::ignoreMessage(QtWarningMsg, "Using CBOR array as map forced conversion");
+ QVERIFY(v2[key].isUndefined());
+ QCOMPARE(v2.type(), QCborValue::Map);
+ QCOMPARE(va.type(), QCborValue::Array);
+ m = v2.toMap();
+ QCOMPARE(m.size(), 2);
+ auto it = m.constBegin();
+ QCOMPARE(it.key(), QCborValue(0));
+ QCOMPARE(it.value(), v);
+ ++it;
+ QCOMPARE(it.key(), QCborValue(key));
+ QCOMPARE(it.value(), QCborValue());
+}
+
+void tst_QCborValue::mapFromArrayLargeIntKey()
+{
+ mapFromArray_template(Q_INT64_C(1) << 20);
+}
+
+void tst_QCborValue::mapFromArrayNegativeIntKey()
+{
+ mapFromArray_template(-1);
+}
+
+void tst_QCborValue::mapFromArrayStringKey()
+{
+ mapFromArray_template(QLatin1String("Hello"));
+}
+
void tst_QCborValue::arrayMutation()
{
QCborArray a{42};
@@ -920,8 +1015,8 @@ void tst_QCborValue::arrayMutation()
QVERIFY(v == a.at(0));
}
- QVERIFY(a == a);
- QVERIFY(a == QCborArray{true});
+ QT_TEST_EQUALITY_OPS(a, a, true);
+ QT_TEST_EQUALITY_OPS(a, QCborArray{true}, true);
QCborArray a2 = a;
a.append(nullptr);
@@ -973,14 +1068,6 @@ void tst_QCborValue::arrayMutation()
QVERIFY(val.isArray());
QCOMPARE(val.toArray().size(), 4);
QCOMPARE(val[3], 42);
-
- // Coerce to map on string key:
- const QLatin1String any("any");
- val[any] = any;
- QVERIFY(val.isMap());
- QCOMPARE(val.toMap().size(), 5);
- QVERIFY(val[2].isArray());
- QCOMPARE(val[2].toArray().size(), 5);
}
void tst_QCborValue::arrayMutateWithCopies()
@@ -1051,27 +1138,27 @@ void tst_QCborValue::mapMutation()
const QString strValue = QStringLiteral("value");
v = strValue;
QVERIFY(v.isString());
- QCOMPARE(v, QCborValue(strValue));
- QCOMPARE(m, QCborMap({{42, strValue}}));
+ QT_TEST_EQUALITY_OPS(v, QCborValue(strValue), true);
+ QT_TEST_EQUALITY_OPS(m, QCborMap({{42, strValue}}), true);
// HasByteData -> HasByteData
const QLatin1String otherStrValue("othervalue");
v = otherStrValue;
QVERIFY(v.isString());
- QCOMPARE(v, QCborValue(otherStrValue));
- QCOMPARE(m, QCborMap({{42, otherStrValue}}));
+ QT_TEST_EQUALITY_OPS(v, QCborValue(otherStrValue), true);
+ QT_TEST_EQUALITY_OPS(m, QCborMap({{42, otherStrValue}}), true);
// HasByteData -> simple
v = 42;
QVERIFY(v.isInteger());
- QCOMPARE(v, QCborValue(42));
- QCOMPARE(m, QCborMap({{42, 42}}));
+ QT_TEST_EQUALITY_OPS(v, QCborValue(42), true);
+ QT_TEST_EQUALITY_OPS(m, QCborMap({{42, 42}}), true);
// simple -> container
v = QCborArray{1, 2, 3};
QVERIFY(v.isArray());
- QCOMPARE(v, QCborArray({1, 2, 3}));
- QCOMPARE(m, QCborMap({{42, QCborArray{1, 2, 3}}}));
+ QT_TEST_EQUALITY_OPS(v, QCborArray({1, 2, 3}), true);
+ QT_TEST_EQUALITY_OPS(m, QCborMap({{42, QCborArray{1, 2, 3}}}), true);
// container -> simple
v = true;
@@ -1079,8 +1166,7 @@ void tst_QCborValue::mapMutation()
QVERIFY(v.isTrue());
QCOMPARE(m, QCborMap({{42, true}}));
QVERIFY(m.begin()->isTrue());
- QVERIFY(m.begin().value() == v);
- QVERIFY(v == m.begin().value());
+ QT_TEST_EQUALITY_OPS(m.begin().value(), v, true);
}
QVERIFY(m == QCborMap({{42, true}}));
@@ -1102,18 +1188,27 @@ void tst_QCborValue::mapMutation()
m2 = m;
auto it = m.begin(); // detaches again
auto end = m.end();
+ auto it1 = m.constBegin(); // detaches again
+ auto end2 = m.constEnd();
QCOMPARE(end - it, 2);
+ QT_TEST_ALL_COMPARISON_OPS(it, it + 1, Qt::strong_ordering::less);
+ QT_TEST_ALL_COMPARISON_OPS(it, it1 + 1, Qt::strong_ordering::less);
+ QT_TEST_ALL_COMPARISON_OPS(it, it - 1, Qt::strong_ordering::greater);
+ QT_TEST_ALL_COMPARISON_OPS(it, it1 - 1, Qt::strong_ordering::greater);
+ QT_TEST_EQUALITY_OPS(it, it1, true);
QCOMPARE(it + 2, end);
- QCOMPARE(it.key(), QCborValue(42));
- QCOMPARE(it.value(), QCborValue(2.5));
- QCOMPARE((++it).value(), QCborValue(nullptr));
- QCOMPARE(it.key(), QCborValue(nullptr));
- QVERIFY(m2 == m);
- QVERIFY(m == m2);
+ QT_TEST_EQUALITY_OPS(it + 2, end, true);
+ QT_TEST_EQUALITY_OPS(it + 2, end2, true);
+ QT_TEST_EQUALITY_OPS(it1 + 2, end2, true);
+ QT_TEST_EQUALITY_OPS(it.key(), QCborValue(42), true);
+ QT_TEST_EQUALITY_OPS(it.value(), QCborValue(2.5), true);
+ QT_TEST_EQUALITY_OPS((++it).value(), QCborValue(nullptr), true);
+ QT_TEST_EQUALITY_OPS(it.key(), QCborValue(nullptr), true);
+ QT_TEST_EQUALITY_OPS(m2, m, true);
it.value() = -1;
- QCOMPARE(it.key(), QCborValue(nullptr));
- QCOMPARE(it.value(), QCborValue(-1));
+ QT_TEST_EQUALITY_OPS(it.key(), QCborValue(nullptr), true);
+ QT_TEST_EQUALITY_OPS(it.value(), QCborValue(-1), true);
QCOMPARE((m.end() - 1)->toInteger(), -1);
QVERIFY((m2.end() - 1)->isNull());
QCOMPARE(++it, end);
@@ -1160,11 +1255,13 @@ void tst_QCborValue::mapMutateWithCopies()
// see QTBUG-83366
QCborMap map;
map[QLatin1String("value")] = "TEST";
+ QT_TEST_EQUALITY_OPS(map[QLatin1String("value")], "TEST", true);
QCOMPARE(map.size(), 1);
QCOMPARE(map.value("value"), "TEST");
QCborValue v = map.value("value");
map[QLatin1String("prop2")] = v;
+ QT_TEST_EQUALITY_OPS(map[QLatin1String("prop2")], v, true);
QCOMPARE(map.size(), 2);
QCOMPARE(map.value("value"), "TEST");
QCOMPARE(map.value("prop2"), "TEST");
@@ -1178,6 +1275,7 @@ void tst_QCborValue::mapMutateWithCopies()
// same as previous, but this is a QJsonValueRef
QCborValueRef rv = map[QLatin1String("prop2")];
rv = map[QLatin1String("value")];
+ QT_TEST_EQUALITY_OPS(map[QLatin1String("value")], rv, true);
QCOMPARE(map.size(), 2);
QCOMPARE(map.value("value"), "TEST");
QCOMPARE(map.value("prop2"), "TEST");
@@ -1192,6 +1290,7 @@ void tst_QCborValue::mapMutateWithCopies()
// after we create the source QCborValueRef
QCborValueRef rv = map[QLatin1String("value")];
map[QLatin1String("prop2")] = rv;
+ QT_TEST_EQUALITY_OPS(map[QLatin1String("prop2")], rv, true);
QCOMPARE(map.size(), 2);
QCOMPARE(map.value("value"), "TEST");
QCOMPARE(map.value("prop2"), "TEST");
@@ -1218,11 +1317,102 @@ void tst_QCborValue::arrayPrepend()
QCborArray a;
a.prepend(0);
a.prepend(nullptr);
- QCOMPARE(a.at(1), QCborValue(0));
- QCOMPARE(a.at(0), QCborValue(nullptr));
+ QT_TEST_EQUALITY_OPS(a.at(1), QCborValue(0), true);
+ QT_TEST_EQUALITY_OPS(a.at(0), QCborValue(nullptr), true);
QCOMPARE(a.size(), 2);
}
+void tst_QCborValue::arrayValueRef()
+{
+ QFETCH(QCborValue, v);
+ QCborArray a = { v };
+
+ // methods that return QCborValueRef
+ QT_TEST_EQUALITY_OPS(a.first(), v, true);
+ QT_TEST_EQUALITY_OPS(a.last(), v, true);
+ QT_TEST_EQUALITY_OPS(a[0], v, true);
+ QVERIFY(v == a.first());
+ QVERIFY(v == a.last());
+ QVERIFY(v == a[0]);
+ QT_TEST_EQUALITY_OPS(a.first(), v, true);
+ QT_TEST_EQUALITY_OPS(a.last(), v, true);
+
+ auto iteratorCheck = [&v](auto it) {
+ QT_TEST_EQUALITY_OPS(*it, v, true);
+ QCOMPARE(it->type(), v.type()); // just to test operator->
+ QT_TEST_EQUALITY_OPS(it[0], v, true);
+ };
+
+ iteratorCheck(a.begin());
+ if (QTest::currentTestFailed())
+ return;
+ iteratorCheck(a.constBegin());
+}
+
+void tst_QCborValue::arrayValueRefLargeKey()
+{
+ // make sure the access via QCborValue & QCborValueRef don't convert this
+ // array to a map
+ constexpr qsizetype LargeKey = 0x10000;
+ QCborArray a;
+ a[LargeKey + 1] = 123;
+
+ QCborValue v(a);
+ QT_TEST_EQUALITY_OPS(std::as_const(v)[LargeKey], QCborValue(), true);
+ QCOMPARE(std::as_const(v)[LargeKey + 1], 123);
+ QT_TEST_EQUALITY_OPS(v[LargeKey], QCborValue(), true);
+ QCOMPARE(v[LargeKey + 1], 123);
+ QCOMPARE(v.type(), QCborValue::Array);
+
+ QCborArray outer = { QCborValue(a) };
+ QCborValueRef ref = outer[0];
+ QT_TEST_EQUALITY_OPS(std::as_const(ref)[LargeKey], QCborValue(), true);
+ QCOMPARE(std::as_const(ref)[LargeKey + 1], 123);
+ QT_TEST_EQUALITY_OPS(ref[LargeKey], QCborValue(), true);
+ QCOMPARE(ref[LargeKey + 1], 123);
+ QCOMPARE(ref.type(), QCborValue::Array);
+}
+
+void tst_QCborValue::mapValueRef()
+{
+ QFETCH(QCborValue, v);
+ QLatin1String stringKey("other string");
+ qint64 intKey = 47;
+ Q_ASSERT(v != stringKey);
+ Q_ASSERT(v != intKey);
+
+ QCborMap m = { { v, v }, { stringKey, v }, { intKey, v } };
+ QCOMPARE(m.size(), 3);
+
+ // methods that return QCborValueRef
+ QT_TEST_EQUALITY_OPS(m[intKey], v, true);
+ QT_TEST_EQUALITY_OPS(m[stringKey], v, true);
+ QT_TEST_EQUALITY_OPS(m[v], v, true);
+ QVERIFY(v == m[intKey]);
+ QVERIFY(v == m[stringKey]);
+ QVERIFY(v == m[v]);
+
+ auto iteratorCheck = [=](auto it) {
+ QCOMPARE((*it).second, v);
+ QCOMPARE(it[0].second, v);
+ QCOMPARE(it[1].second, v);
+ QCOMPARE(it[2].second, v);
+ QCOMPARE(it.value(), v);
+ QCOMPARE(it->type(), v.type()); // just to test operator->
+
+ // compare keys too
+ QCOMPARE((*it).first, v);
+ QCOMPARE(it.key(), v);
+ QCOMPARE((it + 1).key(), stringKey);
+ QCOMPARE((it + 2).key(), intKey);
+ };
+
+ iteratorCheck(m.begin());
+ if (QTest::currentTestFailed())
+ return;
+ iteratorCheck(m.constBegin());
+}
+
void tst_QCborValue::arrayInsertRemove()
{
QFETCH(QCborValue, v);
@@ -1230,28 +1420,28 @@ void tst_QCborValue::arrayInsertRemove()
a.append(42);
a.append(v);
a.insert(1, QCborValue(nullptr));
- QCOMPARE(a.at(0), QCborValue(42));
- QCOMPARE(a.at(1), QCborValue(nullptr));
- QCOMPARE(a.at(2), v);
+ QT_TEST_EQUALITY_OPS(a.at(0), QCborValue(42), true);
+ QT_TEST_EQUALITY_OPS(a.at(1), QCborValue(nullptr), true);
+ QT_TEST_EQUALITY_OPS(a.at(2), v, true);
// remove 42
a.removeAt(0);
QCOMPARE(a.size(), 2);
- QCOMPARE(a.at(0), QCborValue(nullptr));
- QCOMPARE(a.at(1), v);
+ QT_TEST_EQUALITY_OPS(a.at(0), QCborValue(nullptr), true);
+ QT_TEST_EQUALITY_OPS(a.at(1), v, true);
auto it = a.begin();
it = a.erase(it); // removes nullptr
QCOMPARE(a.size(), 1);
- QCOMPARE(a.at(0), v);
+ QT_TEST_EQUALITY_OPS(a.at(0), v, true);
it = a.erase(it);
QVERIFY(a.isEmpty());
- QCOMPARE(it, a.end());
+ QT_TEST_EQUALITY_OPS(it, a.end(), true);
// reinsert the element so we can take it
a.append(v);
- QCOMPARE(a.takeAt(0), v);
+ QT_TEST_EQUALITY_OPS(a.takeAt(0), v, true);
QVERIFY(a.isEmpty());
}
@@ -1260,14 +1450,15 @@ void tst_QCborValue::arrayStringElements()
QCborArray a{"Hello"};
a.append(QByteArray("Hello"));
a.append(QLatin1String("World"));
- QVERIFY(a == a);
- QVERIFY(a == QCborArray({QLatin1String("Hello"),
- QByteArray("Hello"), QStringLiteral("World")}));
+
+ QT_TEST_EQUALITY_OPS(a, a, true);
+ QT_TEST_EQUALITY_OPS(a, QCborArray({QLatin1String("Hello"),
+ QByteArray("Hello"), QStringLiteral("World")}), true);
QCborValueRef r1 = a[0];
QCOMPARE(r1.toString(), "Hello");
QCOMPARE(r1.operator QCborValue(), QCborValue("Hello"));
- QVERIFY(r1 == QCborValue("Hello"));
+ QT_TEST_EQUALITY_OPS(r1, QCborValue("Hello"), true);
QCborValue v2 = a.at(1);
QCOMPARE(v2.toByteArray(), QByteArray("Hello"));
@@ -1276,11 +1467,11 @@ void tst_QCborValue::arrayStringElements()
// v2 must continue to be valid after the entry getting removed
a.removeAt(1);
QCOMPARE(v2.toByteArray(), QByteArray("Hello"));
- QCOMPARE(v2, QCborValue(QByteArray("Hello")));
+ QT_TEST_EQUALITY_OPS(v2, QCborValue(QByteArray("Hello")), true);
v2 = a.at(1);
QCOMPARE(v2.toString(), "World");
- QCOMPARE(v2, QCborValue("World"));
+ QT_TEST_EQUALITY_OPS(v2, QCborValue("World"), true);
QCOMPARE(a.takeAt(1).toString(), "World");
QCOMPARE(a.takeAt(0).toString(), "Hello");
@@ -1292,12 +1483,12 @@ void tst_QCborValue::mapStringValues()
QCborMap m{{0, "Hello"}};
m.insert({1, QByteArray("Hello")});
m.insert({2, QLatin1String("World")});
- QVERIFY(m == m);
+ QT_TEST_EQUALITY_OPS(m, m, true);
QCborValueRef r1 = m[0];
QCOMPARE(r1.toString(), "Hello");
QCOMPARE(r1.operator QCborValue(), QCborValue("Hello"));
- QVERIFY(r1 == QCborValue("Hello"));
+ QT_TEST_EQUALITY_OPS(r1, QCborValue("Hello"), true);
QCborValue v2 = m.value(1);
QCOMPARE(v2.toByteArray(), QByteArray("Hello"));
@@ -1306,7 +1497,7 @@ void tst_QCborValue::mapStringValues()
// v2 must continue to be valid after the entry getting removed
m.erase(m.constFind(1));
QCOMPARE(v2.toByteArray(), QByteArray("Hello"));
- QCOMPARE(v2, QCborValue(QByteArray("Hello")));
+ QT_TEST_EQUALITY_OPS(v2, QCborValue(QByteArray("Hello")), true);
v2 = (m.begin() + 1).value();
QCOMPARE(v2.toString(), "World");
@@ -1324,14 +1515,12 @@ void tst_QCborValue::mapStringKeys()
QCOMPARE(m.value(QLatin1String("World")), QCborValue(2));
QCborMap m2 = m;
- QVERIFY(m2 == m);
- QVERIFY(m == m2);
+ QT_TEST_EQUALITY_OPS(m2, m, true);
m.insert({QByteArray("foo"), "bar"});
QCOMPARE(m.size(), 3);
QCOMPARE(m2.size(), 2);
- QVERIFY(m2 != m);
- QVERIFY(m != m2);
+ QT_TEST_EQUALITY_OPS(m2, m, false);
QVERIFY(m2.value(QCborValue(QByteArray("foo"))).isUndefined());
QVERIFY(m.value(QCborValue(QLatin1String("foo"))).isUndefined());
@@ -1349,8 +1538,7 @@ void tst_QCborValue::mapInsertRemove()
m.insert(2, v);
QVERIFY(m.contains(2));
- QVERIFY(m[2] == v);
- QVERIFY(v == m[2]);
+ QT_TEST_EQUALITY_OPS(m[2], v, true);
auto it = m.find(2);
it = m.erase(it);
@@ -1363,10 +1551,8 @@ void tst_QCborValue::mapInsertRemove()
r = v;
it = m.find(42);
- QVERIFY(it.value() == v);
- QVERIFY(v == it.value());
- QVERIFY(it.value() == r);
- QVERIFY(r == it.value());
+ QT_TEST_EQUALITY_OPS(it.value(), v, true);
+ QT_TEST_EQUALITY_OPS(it.value(), r, true);
QCOMPARE(m.extract(it), v);
QVERIFY(!m.contains(42));
@@ -1387,12 +1573,12 @@ void tst_QCborValue::arrayInsertTagged()
QCborArray a{tagged};
a.insert(1, tagged);
QCOMPARE(a.size(), 2);
- QCOMPARE(a.at(0), tagged);
- QCOMPARE(a.at(1), tagged);
- QCOMPARE(a.at(0).taggedValue(), v);
- QCOMPARE(a.at(1).taggedValue(), v);
- QCOMPARE(a.takeAt(0).taggedValue(), v);
- QCOMPARE(a.takeAt(0).taggedValue(), v);
+ QT_TEST_EQUALITY_OPS(a.at(0), tagged, true);
+ QT_TEST_EQUALITY_OPS(a.at(1), tagged, true);
+ QT_TEST_EQUALITY_OPS(a.at(0).taggedValue(), v, true);
+ QT_TEST_EQUALITY_OPS(a.at(1).taggedValue(), v, true);
+ QT_TEST_EQUALITY_OPS(a.takeAt(0).taggedValue(), v, true);
+ QT_TEST_EQUALITY_OPS(a.takeAt(0).taggedValue(), v, true);
QVERIFY(a.isEmpty());
}
@@ -1406,13 +1592,13 @@ void tst_QCborValue::mapInsertTagged()
QCborMap m{{11, tagged}};
m.insert({-21, tagged});
QCOMPARE(m.size(), 2);
- QCOMPARE(m.constBegin().value(), tagged);
- QCOMPARE(m.value(-21), tagged);
- QCOMPARE(m.value(11).taggedValue(), v);
- QCOMPARE((m.end() - 1).value().taggedValue(), v);
- QCOMPARE(m.extract(m.end() - 1).taggedValue(), v);
+ QT_TEST_EQUALITY_OPS(m.constBegin().value(), tagged, true);
+ QT_TEST_EQUALITY_OPS(m.value(-21), tagged, true);
+ QT_TEST_EQUALITY_OPS(m.value(11).taggedValue(), v, true);
+ QT_TEST_EQUALITY_OPS((m.end() - 1).value().taggedValue(), v, true);
+ QT_TEST_EQUALITY_OPS(m.extract(m.end() - 1).taggedValue(), v, true);
QVERIFY(!m.contains(-21));
- QCOMPARE(m.take(11).taggedValue(), v);
+ QT_TEST_EQUALITY_OPS(m.take(11).taggedValue(), v, true);
QVERIFY(m.isEmpty());
}
@@ -1441,7 +1627,7 @@ void tst_QCborValue::arraySelfAssign()
QCOMPARE(a.size(), 2);
QCOMPARE(it->toArray().size(), 2);
- QCOMPARE(it->toArray().last(), QCborValue(36));
+ QT_TEST_EQUALITY_OPS(it->toArray().last(), QCborValue(36), true);
}
}
@@ -1459,12 +1645,12 @@ void tst_QCborValue::mapSelfAssign()
QCborValue vm = m;
m[1] = vm; // self-assign
QCOMPARE(m.size(), 2);
- QCOMPARE(m.value(0), v);
+ QT_TEST_EQUALITY_OPS(m.value(0), v, true);
QCborMap m2 = m.value(1).toMap();
// there mustn't be an element with key 1
QCOMPARE(m2.size(), 1);
- QCOMPARE(m2.value(0), v);
+ QT_TEST_EQUALITY_OPS(m2.value(0), v, true);
QVERIFY(!m2.contains(1));
}
@@ -1476,14 +1662,14 @@ void tst_QCborValue::mapSelfAssign()
QCborValueRef rv = m[1];
rv = m; // self-assign (implicit QCborValue creation)
QCOMPARE(m.size(), 2);
- QCOMPARE(m.value(0), v);
+ QT_TEST_EQUALITY_OPS(m.value(0), v, true);
QCborMap m2 = m.value(1).toMap();
// there must be an element with key 1
QCOMPARE(m2.size(), 2);
- QCOMPARE(m2.value(0), v);
+ QT_TEST_EQUALITY_OPS(m2.value(0), v, true);
QVERIFY(m2.contains(1));
- QCOMPARE(m2.value(1), QCborValue());
+ QT_TEST_EQUALITY_OPS(m2.value(1), QCborValue(), true);
}
m = {{0, v}};
@@ -1507,8 +1693,8 @@ void tst_QCborValue::mapSelfAssign()
QCOMPARE(m.size(), 2);
auto it = m.constEnd() - 1;
- QCOMPARE(it.value(), v);
- QCOMPARE(it.key(), QCborMap({{0, v}}));
+ QT_TEST_EQUALITY_OPS(it.value(), v, true);
+ QT_TEST_EQUALITY_OPS(it.key(), QCborMap({{0, v}}), true);
}
}
@@ -1581,8 +1767,125 @@ void tst_QCborValue::mapComplexKeys()
QVERIFY(!m.contains(tagged));
}
-void tst_QCborValue::sorting()
+void tst_QCborValue::arrayNested()
+{
+ const QCborArray wrongArray = { false, nullptr, QCborValue() };
+ {
+ QCborArray a1 = { 42, 47 };
+ QCborArray a2 = { QCborValue(a1) };
+ QCborArray a3 = { 41, 47 };
+ QCborArray a4 = { 41, 47, 87 };
+ QCOMPARE(a2.size(), 1);
+ const QCborValue &first = std::as_const(a2).first();
+ QVERIFY(first.isArray());
+ QCOMPARE(first.toArray(wrongArray).size(), 2);
+ QCOMPARE(first.toArray(wrongArray).first(), 42);
+ QCOMPARE(first.toArray(wrongArray).last(), 47);
+ QT_TEST_ALL_COMPARISON_OPS(a1, a3, Qt::strong_ordering::greater);
+ QT_TEST_ALL_COMPARISON_OPS(a3, a1, Qt::strong_ordering::less);
+ QT_TEST_ALL_COMPARISON_OPS(a3, a4, Qt::strong_ordering::less);
+ QT_TEST_ALL_COMPARISON_OPS(a3, a2, Qt::strong_ordering::greater);
+ }
+ {
+ QCborArray a1 = { 42, 47 };
+ QCborArray a2 = { QCborValue(a1) };
+ QCborArray a3 = { 41, 47 };
+ QCborArray a4 = { 41, 47, 87 };
+ QCOMPARE(a2.size(), 1);
+ QCborValueRef first = a2.first();
+ QVERIFY(first.isArray());
+ QCOMPARE(first.toArray(wrongArray).size(), 2);
+ QCOMPARE(first.toArray(wrongArray).first(), 42);
+ QCOMPARE(first.toArray(wrongArray).last(), 47);
+ QT_TEST_ALL_COMPARISON_OPS(a1, a3, Qt::strong_ordering::greater);
+ QT_TEST_ALL_COMPARISON_OPS(a3, a1, Qt::strong_ordering::less);
+ QT_TEST_ALL_COMPARISON_OPS(a3, a4, Qt::strong_ordering::less);
+ QT_TEST_ALL_COMPARISON_OPS(a3, a2, Qt::strong_ordering::greater);
+ }
+
+ {
+ QCborArray a1;
+ a1 = { QCborValue(a1) }; // insert it into itself
+ QCOMPARE(a1.size(), 1);
+ const QCborValue &first = std::as_const(a1).first();
+ QVERIFY(first.isArray());
+ QT_TEST_ALL_COMPARISON_OPS(first, QCborArray(), Qt::strong_ordering::equal);
+ QT_TEST_ALL_COMPARISON_OPS(first.toArray(wrongArray), QCborArray(),
+ Qt::strong_ordering::equal);
+ }
+ {
+ QCborArray a1;
+ a1 = { QCborValue(a1) }; // insert it into itself
+ QCborValueRef first = a1.first();
+ QVERIFY(first.isArray());
+ QT_TEST_ALL_COMPARISON_OPS(first, QCborArray(), Qt::strong_ordering::equal);
+ QT_TEST_ALL_COMPARISON_OPS(first.toArray(wrongArray), QCborArray(),
+ Qt::strong_ordering::equal);
+ }
+ {
+ QCborArray a1;
+ a1.append(a1); // insert into itself
+ QCOMPARE(a1.size(), 1);
+ const QCborValue &first = std::as_const(a1).first();
+ QVERIFY(first.isArray());
+ QT_TEST_ALL_COMPARISON_OPS(first, QCborArray(), Qt::strong_ordering::equal);
+ QT_TEST_ALL_COMPARISON_OPS(first.toArray(wrongArray), QCborArray(),
+ Qt::strong_ordering::equal);
+ }
+ {
+ QCborArray a1;
+ a1.append(a1); // insert into itself
+ QCborValueRef first = a1.first();
+ QVERIFY(first.isArray());
+ QT_TEST_ALL_COMPARISON_OPS(first, QCborArray(), Qt::strong_ordering::equal);
+ QT_TEST_ALL_COMPARISON_OPS(first.toArray(wrongArray), QCborArray(),
+ Qt::strong_ordering::equal);
+ }
+}
+
+void tst_QCborValue::mapNested()
{
+ const QCborMap wrongMap = { { -1, false }, {-2, nullptr }, { -3, QCborValue() } };
+ {
+ QCborMap m1 = { {1, 42}, {2, 47} };
+ QCborMap m2 = { { QString(), m1 } };
+ QCOMPARE(m2.size(), 1);
+ const QCborValue &first = m2.constBegin().value();
+ QVERIFY(first.isMap());
+ QCOMPARE(first.toMap(wrongMap).size(), 2);
+ QCOMPARE(first.toMap(wrongMap).begin().key(), 1);
+ QCOMPARE(first.toMap(wrongMap).begin().value(), 42);
+ }
+
+ {
+ QCborMap m1;
+ m1 = { { QString(), QCborValue(m1) } }; // insert it into itself
+ QCOMPARE(m1.size(), 1);
+ const QCborValue &first = m1.constBegin().value();
+ QVERIFY(first.isMap());
+ QCOMPARE(first, QCborMap());
+ QCOMPARE(first.toMap(wrongMap), QCborMap());
+ }
+}
+
+void tst_QCborValue::sorting_data()
+{
+ // CBOR data comparisons are done as if we were comparing their canonically
+ // (deterministic) encoded forms in the byte stream, including the Major
+ // Type. That has a few surprises noted below:
+ // 1) because the length of a string precedes it, effectively strings are
+ // sorted by their UTF-8 length before their contents
+ // 2) because negative integers are stored in negated form, they sort in
+ // descending order (i.e. by absolute value)
+ // 3) negative integers (Major Type 1) sort after all positive integers
+ // (Major Type 0)
+ // Effectively, this means integers are sorted as sign+magnitude.
+ // 4) floating point types (Major Type 7) sort after all integers
+
+ QTest::addColumn<QCborValue>("lhs");
+ QTest::addColumn<QCborValue>("rhs");
+ QTest::addColumn<Qt::strong_ordering>("expectedOrdering");
+
QCborValue vundef, vnull(nullptr);
QCborValue vtrue(true), vfalse(false);
QCborValue vint1(1), vint2(2);
@@ -1591,7 +1894,8 @@ void tst_QCborValue::sorting()
QCborValue vs2("Hello"), vs3("World"), vs1("foo");
QCborValue va1(QCborValue::Array), va2(QCborArray{1}), va3(QCborArray{0, 0});
QCborValue vm1(QCborValue::Map), vm2(QCborMap{{1, 0}}), vm3(QCborMap{{0, 0}, {1, 0}});
- QCborValue vdt1(QDateTime::fromMSecsSinceEpoch(0, Qt::UTC)), vdt2(QDateTime::currentDateTimeUtc());
+ QCborValue vdt1(QDateTime::fromMSecsSinceEpoch(0, QTimeZone::UTC));
+ QCborValue vdt2(QDateTime::currentDateTimeUtc());
QCborValue vtagged1(QCborKnownTags::PositiveBignum, QByteArray()),
vtagged2(QCborKnownTags::PositiveBignum, 0.0), // bignums are supposed to have byte arrays...
vtagged3(QCborKnownTags::Signature, 0),
@@ -1600,67 +1904,262 @@ void tst_QCborValue::sorting()
QCborValue vurl1(QUrl("https://example.net")), vurl2(QUrl("https://example.com/"));
QCborValue vuuid1{QUuid()}, vuuid2(QUuid::createUuid());
QCborValue vsimple1(QCborSimpleType(1)), vsimple32(QCborSimpleType(32)), vsimple255(QCborSimpleType(255));
- QCborValue vdouble1(1.5), vdouble2(qInf());
+ QCborValue vdouble1(1.5), vdouble2(qInf()), vdouble3(qQNaN());
QCborValue vndouble1(-1.5), vndouble2(-qInf());
-#define CHECK_ORDER(v1, v2) \
- QVERIFY(v1 < v2); \
- QVERIFY(!(v2 < v2))
+ auto addRow = [](QCborValue lhs, QCborValue rhs, Qt::strong_ordering order) {
+ QTest::addRow("%s-cmp-%s", qPrintable(lhs.toDiagnosticNotation()),
+ qPrintable(rhs.toDiagnosticNotation()))
+ << lhs << rhs << order;
+ };
+ auto addSelfCmp = [](QCborValue v) {
+ QTest::addRow("self-%s", qPrintable(v.toDiagnosticNotation()))
+ << v << v << Qt::strong_ordering::equal;
+ };
+
+ // self compares
+ addSelfCmp(vundef);
+ addSelfCmp(vnull);
+ addSelfCmp(vfalse);
+ addSelfCmp(vtrue);
+ addSelfCmp(vint1);
+ addSelfCmp(vint2);
+ addSelfCmp(vneg1);
+ addSelfCmp(vneg2);
+ addSelfCmp(vba1);
+ addSelfCmp(vba2);
+ addSelfCmp(vba3);
+ addSelfCmp(vs1);
+ addSelfCmp(vs2);
+ addSelfCmp(vs3);
+ addSelfCmp(va1);
+ addSelfCmp(va2);
+ addSelfCmp(va3);
+ addSelfCmp(vm1);
+ addSelfCmp(vm2);
+ addSelfCmp(vm3);
+ addSelfCmp(vdt1);
+ addSelfCmp(vdt2);
+ addSelfCmp(vtagged1);
+ addSelfCmp(vtagged2);
+ addSelfCmp(vtagged3);
+ addSelfCmp(vtagged4);
+ addSelfCmp(vtagged5);
+ addSelfCmp(vurl1);
+ addSelfCmp(vurl2);
+ addSelfCmp(vuuid1);
+ addSelfCmp(vuuid2);
+ addSelfCmp(vsimple1);
+ addSelfCmp(vsimple32);
+ addSelfCmp(vsimple255);
+ addSelfCmp(vdouble1);
+ addSelfCmp(vdouble2);
+ addSelfCmp(vdouble3); // surprise: NaNs do compare
+ addSelfCmp(vndouble1);
+ addSelfCmp(vndouble2);
// intra-type comparisons
- CHECK_ORDER(vfalse, vtrue);
- CHECK_ORDER(vsimple1, vsimple32);
- CHECK_ORDER(vsimple32, vsimple255);
- CHECK_ORDER(vint1, vint2);
- CHECK_ORDER(vdouble1, vdouble2);
- CHECK_ORDER(vndouble1, vndouble2);
- // note: shorter length sorts first
- CHECK_ORDER(vba1, vba2);
- CHECK_ORDER(vba2, vba3);
- CHECK_ORDER(vs1, vs2);
- CHECK_ORDER(vs2, vs3);
- CHECK_ORDER(va1, va2);
- CHECK_ORDER(va2, va3);
- CHECK_ORDER(vm1, vm2);
- CHECK_ORDER(vm2, vm3);
- CHECK_ORDER(vdt1, vdt2);
- CHECK_ORDER(vtagged1, vtagged2);
- CHECK_ORDER(vtagged2, vtagged3);
- CHECK_ORDER(vtagged3, vtagged4);
- CHECK_ORDER(vtagged4, vtagged5);
- CHECK_ORDER(vurl1, vurl2);
- CHECK_ORDER(vuuid1, vuuid2);
-
- // surprise 1: CBOR sorts integrals by absolute value
- CHECK_ORDER(vneg1, vneg2);
-
- // surprise 2: CBOR sorts negatives after positives (sign+magnitude)
- CHECK_ORDER(vint2, vneg1);
- QVERIFY(vint2.toInteger() > vneg1.toInteger());
- CHECK_ORDER(vdouble2, vndouble1);
- QVERIFY(vdouble2.toDouble() > vndouble1.toDouble());
+ addRow(vfalse, vtrue, Qt::strong_ordering::less);
+ addRow(vsimple1, vsimple32, Qt::strong_ordering::less);
+ addRow(vsimple32, vsimple255, Qt::strong_ordering::less);
+ addRow(vint1, vint2, Qt::strong_ordering::less);
+ addRow(vdouble1, vdouble2, Qt::strong_ordering::less);
+ addRow(vdouble2, vdouble3, Qt::strong_ordering::less); // surprise: NaNs do compare
+ addRow(vndouble1, vndouble2, Qt::strong_ordering::less); // surprise: -1.5 < -inf
+ addRow(va1, va2, Qt::strong_ordering::less);
+ addRow(va2, va3, Qt::strong_ordering::less);
+ addRow(vm1, vm2, Qt::strong_ordering::less);
+ addRow(vm2, vm3, Qt::strong_ordering::less);
+ addRow(vdt1, vdt2, Qt::strong_ordering::less);
+ addRow(vtagged1, vtagged2, Qt::strong_ordering::less);
+ addRow(vtagged2, vtagged3, Qt::strong_ordering::less);
+ addRow(vtagged3, vtagged4, Qt::strong_ordering::less);
+ addRow(vtagged4, vtagged5, Qt::strong_ordering::less);
+ addRow(vurl1, vurl2, Qt::strong_ordering::less);
+ addRow(vuuid1, vuuid2, Qt::strong_ordering::less);
+
+ // surprise 1: CBOR sorts strings by length first
+ addRow(vba1, vba2, Qt::strong_ordering::less);
+ addRow(vba2, vba3, Qt::strong_ordering::less);
+ addRow(vs1, vs2, Qt::strong_ordering::less);
+ addRow(vs2, vs3, Qt::strong_ordering::less);
+
+ // surprise 2: CBOR sorts integrals by absolute value
+ addRow(vneg1, vneg2, Qt::strong_ordering::less);
+
+ // surprise 3: CBOR sorts negatives after positives (sign+magnitude)
+ addRow(vint2, vneg1, Qt::strong_ordering::less);
+ addRow(vdouble2, vndouble1, Qt::strong_ordering::less);
// inter-type comparisons
- CHECK_ORDER(vneg2, vba1);
- CHECK_ORDER(vba3, vs1);
- CHECK_ORDER(vs3, va1);
- CHECK_ORDER(va2, vm1);
- CHECK_ORDER(vm2, vdt1);
- CHECK_ORDER(vdt2, vtagged1);
- CHECK_ORDER(vtagged2, vurl1);
- CHECK_ORDER(vurl1, vuuid1);
- CHECK_ORDER(vuuid2, vtagged3);
- CHECK_ORDER(vtagged4, vsimple1);
- CHECK_ORDER(vsimple1, vfalse);
- CHECK_ORDER(vtrue, vnull);
- CHECK_ORDER(vnull, vundef);
- CHECK_ORDER(vundef, vsimple32);
- CHECK_ORDER(vsimple255, vdouble1);
+ addRow(vneg2, vba1, Qt::strong_ordering::less);
+ addRow(vba3, vs1, Qt::strong_ordering::less);
+ addRow(vs3, va1, Qt::strong_ordering::less);
+ addRow(va2, vm1, Qt::strong_ordering::less);
+ addRow(vm2, vdt1, Qt::strong_ordering::less);
+ addRow(vdt2, vtagged1, Qt::strong_ordering::less);
+ addRow(vtagged2, vurl1, Qt::strong_ordering::less);
+ addRow(vurl1, vuuid1, Qt::strong_ordering::less);
+ addRow(vuuid2, vtagged3, Qt::strong_ordering::less);
+ addRow(vtagged4, vsimple1, Qt::strong_ordering::less);
+ addRow(vsimple1, vfalse, Qt::strong_ordering::less);
+ addRow(vtrue, vnull, Qt::strong_ordering::less);
+ addRow(vnull, vundef, Qt::strong_ordering::less);
+ addRow(vundef, vsimple32, Qt::strong_ordering::less);
+ addRow(vsimple255, vdouble1, Qt::strong_ordering::less);
// which shows all doubles sorted after integrals
- CHECK_ORDER(vint2, vdouble1);
- QVERIFY(vint2.toInteger() > vdouble1.toDouble());
-#undef CHECK_ORDER
+ addRow(vint2, vdouble1, Qt::strong_ordering::less);
+
+ // Add some non-US-ASCII strings. In the current implementation, QCborValue
+ // can store a string as either US-ASCII, UTF-8, or UTF-16, so let's exercise
+ // those comparisons.
+
+ // we don't have a QUtf8StringView constructor, so work around it
+ auto utf8string = [](QByteArray str) {
+ Q_ASSERT(str.size() < 24);
+ str.prepend(char(QCborValue::String) + str.size());
+ return QCborValue::fromCbor(str);
+ };
+
+ auto addStringCmp = [&](const char *prefix, const char *tag, QUtf8StringView lhs,
+ QUtf8StringView rhs) {
+ // CBOR orders strings by UTF-8 length
+ auto order = Qt::compareThreeWay(lhs.size(), rhs.size());
+ if (is_eq(order))
+ order = compareThreeWay(lhs, rhs);
+ Q_ASSERT(is_eq(order) || is_lt(order)); // please keep lhs <= rhs!
+
+ QCborValue lhs_utf8 = utf8string(QByteArrayView(lhs).toByteArray());
+ QCborValue rhs_utf8 = utf8string(QByteArrayView(rhs).toByteArray());
+ QCborValue lhs_utf16 = QString::fromUtf8(lhs);
+ QCborValue rhs_utf16 = QString::fromUtf8(rhs);
+
+ QTest::addRow("string-%s%s:utf8-utf8", prefix, tag) << lhs_utf8 << rhs_utf8 << order;
+ QTest::addRow("string-%s%s:utf8-utf16", prefix, tag) << lhs_utf8 << rhs_utf16 << order;
+ QTest::addRow("string-%s%s:utf16-utf8", prefix, tag) << lhs_utf16 << rhs_utf8 << order;
+ QTest::addRow("string-%s%s:utf16-utf16", prefix, tag) << lhs_utf16 << rhs_utf16 << order;
+ };
+ auto addStringCmpSameLength = [&](const char *tag, QUtf8StringView lhs, QUtf8StringView rhs) {
+ Q_ASSERT(lhs.size() == rhs.size());
+ addStringCmp("samelength-", tag, lhs, rhs);
+ };
+ auto addStringCmpShorter = [&](const char *tag, QUtf8StringView lhs, QUtf8StringView rhs) {
+ Q_ASSERT(lhs.size() < rhs.size());
+ addStringCmp("shorter-", tag, lhs, rhs);
+ };
+
+ // ascii-only is already tested
+ addStringCmp("equal-", "1continuation", "ab\u00A0c", "ab\u00A0c");
+ addStringCmp("equal-", "2continuation", "ab\u0800", "ab\u0800");
+ addStringCmp("equal-", "3continuation", "a\U00010000", "a\U00010000");
+
+ // these strings all have the same UTF-8 length (5 bytes)
+ addStringCmpSameLength("less-ascii", "abcde", "ab\u00A0c");
+ addStringCmpSameLength("less-1continuation", "ab\u00A0c", "ab\u07FFc");
+ addStringCmpSameLength("less-2continuation", "ab\u0800", "ab\uFFFC");
+ addStringCmpSameLength("less-3continuation", "a\U00010000", "a\U0010FFFC");
+ addStringCmpSameLength("less-0-vs-1continuation", "abcde", "ab\u00A0c");
+ addStringCmpSameLength("less-0-vs-2continuation", "abcde", "ab\u0800");
+ addStringCmpSameLength("less-0-vs-3continuation", "abcde", "a\U00010000");
+ addStringCmpSameLength("less-1-vs-2continuation", "ab\u00A0c", "ab\uFFFC");
+ addStringCmpSameLength("less-1-vs-3continuation", "ab\u00A0c", "a\U00010000");
+ addStringCmpSameLength("less-2-vs-3continuation", "ab\u0800", "a\U00010000");
+ addStringCmpSameLength("less-2-vs-3continuation_surrogate", "a\uFFFCz", "a\U00010000"); // even though U+D800 < U+FFFC
+
+ // these strings have different lengths in UTF-8
+ // (0continuation already tested)
+ addStringCmpShorter("1continuation", "ab\u00A0", "ab\u00A0c");
+ addStringCmpShorter("2continuation", "ab\u0800", "ab\u0800c");
+ addStringCmpShorter("3continuation", "ab\U00010000", "ab\U00010000c");
+ // most of these have the same length in UTF-16!
+ addStringCmpShorter("0-vs-1continuation", "abc", "ab\u00A0");
+ addStringCmpShorter("0-vs-2continuation", "abcd", "ab\u0800");
+ addStringCmpShorter("0-vs-3continuation", "abcde", "ab\U00010000");
+ addStringCmpShorter("1-vs-2continuation", "ab\u00A0", "ab\u0800");
+ addStringCmpShorter("1-vs-3continuation", "abc\u00A0", "ab\U00010000");
+ addStringCmpShorter("2-vs-3continuation", "ab\u0800", "ab\U00010000");
+
+ // lhs is 4xUTF-16 and 8xUTF-8; rhs is 3xUTF-16 but 9xUTF-8
+ addStringCmpShorter("3x2-vs-2x3continuation", "\U00010000\U00010000", "\u0800\u0800\u0800");
+
+ // slight surprising because normally rhs would sort first ("aa" vs "ab" prefix)
+ // (0continuation_surprise already tested)
+ addStringCmpShorter("1continuation_surprise", "ab\u00A0", "aa\u00A0c");
+ addStringCmpShorter("2continuation_surprise", "ab\u0800", "aa\u0800c");
+ addStringCmpShorter("3continuation_surprise", "ab\U00010000", "aa\U00010000c");
+ addStringCmpShorter("0-vs-1continuation_surprise", "abc", "aa\u00A0");
+ addStringCmpShorter("0-vs-2continuation_surprise", "abcd", "aa\u0800");
+ addStringCmpShorter("0-vs-3continuation_surprise", "abcde", "aa\U00010000");
+ addStringCmpShorter("1-vs-2continuation_surprise", "ab\u00A0", "aa\u0800");
+ addStringCmpShorter("1-vs-3continuation_surprise", "abc\u00A0", "aa\U00010000");
+ addStringCmpShorter("2-vs-3continuation_surprise", "ab\u0800", "aa\U00010000");
+}
+
+void tst_QCborValue::sorting()
+{
+ QFETCH(QCborValue, lhs);
+ QFETCH(QCborValue, rhs);
+ QFETCH(Qt::strong_ordering, expectedOrdering);
+
+ // do a QCOMPARE first so we get a proper QTest error in case QCborValue is
+ // broken
+ if (expectedOrdering == Qt::strong_ordering::equal)
+ QCOMPARE_EQ(lhs, rhs);
+ else if (expectedOrdering == Qt::strong_ordering::less)
+ QCOMPARE_LT(lhs, rhs);
+ else if (expectedOrdering == Qt::strong_ordering::greater)
+ QCOMPARE_GT(lhs, rhs);
+
+ QCborArray array{lhs, rhs};
+
+ QCborValueConstRef lhsCRef = array.constBegin()[0];
+ QCborValueConstRef rhsCRef = array.constBegin()[1];
+ QCborValueRef lhsRef = array[0];
+ QCborValueRef rhsRef = array[1];
+
+ // QCborValue vs QCborValue
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs, expectedOrdering);
+ // QCborValueConstRef vs QCborValueConstRef
+ QT_TEST_ALL_COMPARISON_OPS(lhsCRef, rhsCRef, expectedOrdering);
+ // QCborValueRef vs QCborValueRef
+ QT_TEST_ALL_COMPARISON_OPS(lhsRef, rhsRef, expectedOrdering);
+ // QCborValue vs QCborValueConstRef (and reverse)
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhsCRef, expectedOrdering);
+ // QCborValue vs QCborValueRef (and reverse)
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhsRef, expectedOrdering);
+ // QCborValueConstRef vs QCborValueRef (and reverse)
+ QT_TEST_ALL_COMPARISON_OPS(lhsCRef, rhsRef, expectedOrdering);
+}
+
+void tst_QCborValue::comparisonMap_data()
+{
+ QTest::addColumn<QCborMap>("left");
+ QTest::addColumn<QCborMap>("right");
+ QTest::addColumn<Qt::strong_ordering>("expectedOrdering");
+
+ QTest::addRow("map{{0, 1}, {10, 0}}, map{{10, 1}, {10, 0}}")
+ << QCborMap{{0, 1}, {10, 0}}
+ << QCborMap{{10, 1}, {10, 0}}
+ << Qt::strong_ordering::greater;
+
+ QTest::addRow("map{{0, 1}, {0, 0}}, map{{0, 1}, {0, 0}}")
+ << QCborMap{{0, 1}, {0, 0}}
+ << QCborMap{{0, 1}, {0, 0}}
+ << Qt::strong_ordering::equivalent;
+
+ QTest::addRow("map{{0, 1}, {10, 0}}, map{{10, 1}, {10, 0}, {10, 0}}")
+ << QCborMap{{10, 1}, {10, 0}}
+ << QCborMap{{0, 1}, {10, 0}, {10, 0}}
+ << Qt::strong_ordering::less;
+}
+
+void tst_QCborValue::comparisonMap()
+{
+ QFETCH(QCborMap, left);
+ QFETCH(QCborMap, right);
+ QFETCH(Qt::strong_ordering, expectedOrdering);
+ QT_TEST_ALL_COMPARISON_OPS(left, right, expectedOrdering);
}
static void addCommonCborData()
@@ -1686,7 +2185,6 @@ static void addCommonCborData()
QTest::newRow("simple0") << QCborValue(QCborValue::SimpleType) << raw("\xe0") << noxfrm;
QTest::newRow("simple1") << QCborValue(QCborSimpleType(1)) << raw("\xe1") << noxfrm;
- QTest::newRow("simple255") << QCborValue(QCborSimpleType(255)) << raw("\xf8\xff") << noxfrm;
QTest::newRow("Undefined") << QCborValue() << raw("\xf7") << noxfrm;
QTest::newRow("Null") << QCborValue(nullptr) << raw("\xf6") << noxfrm;
QTest::newRow("True") << QCborValue(true) << raw("\xf5") << noxfrm;
@@ -1749,15 +2247,16 @@ static void addCommonCborData()
QTest::newRow("DateTime") << QCborValue(dt) // this is UTC
<< "\xc0\x78\x18" + dt.toString(Qt::ISODateWithMs).toLatin1()
<< noxfrm;
- QTest::newRow("DateTime-UTC") << QCborValue(QDateTime({2018, 1, 1}, {9, 0, 0}, Qt::UTC))
+ QTest::newRow("DateTime-UTC") << QCborValue(QDateTime({2018, 1, 1}, {9, 0}, QTimeZone::UTC))
<< raw("\xc0\x78\x18" "2018-01-01T09:00:00.000Z")
<< noxfrm;
- QTest::newRow("DateTime-Local") << QCborValue(QDateTime({2018, 1, 1}, {9, 0, 0}, Qt::LocalTime))
+ QTest::newRow("DateTime-Local") << QCborValue(QDateTime({2018, 1, 1}, {9, 0}))
<< raw("\xc0\x77" "2018-01-01T09:00:00.000")
<< noxfrm;
- QTest::newRow("DateTime+01:00") << QCborValue(QDateTime({2018, 1, 1}, {9, 0, 0}, Qt::OffsetFromUTC, 3600))
- << raw("\xc0\x78\x1d" "2018-01-01T09:00:00.000+01:00")
- << noxfrm;
+ QTest::newRow("DateTime+01:00")
+ << QCborValue(QDateTime({2018, 1, 1}, {9, 0}, QTimeZone::fromSecondsAheadOfUtc(3600)))
+ << raw("\xc0\x78\x1d" "2018-01-01T09:00:00.000+01:00")
+ << noxfrm;
QTest::newRow("Url:Empty") << QCborValue(QUrl()) << raw("\xd8\x20\x60") << noxfrm;
QTest::newRow("Url") << QCborValue(QUrl("HTTPS://example.com/{%30%31}?q=%3Ca+b%20%C2%A9%3E&%26"))
<< raw("\xd8\x20\x78\x27" "https://example.com/{01}?q=<a+b \xC2\xA9>&%26")
@@ -1865,21 +2364,29 @@ void tst_QCborValue::fromCbor_data()
QTest::newRow("String:Chunked:Empty") << QCborValue(QString())
<< raw("\x7f\xff");
- QTest::newRow("DateTime:NoMilli") << QCborValue(QDateTime::fromSecsSinceEpoch(1515565477, Qt::UTC))
- << raw("\xc0\x74" "2018-01-10T06:24:37Z");
+ QTest::newRow("DateTime:NoMilli")
+ << QCborValue(QDateTime::fromSecsSinceEpoch(1515565477, QTimeZone::UTC))
+ << raw("\xc0\x74" "2018-01-10T06:24:37Z");
// date-only is only permitted local time
- QTest::newRow("DateTime:NoTime:Local") << QCborValue(QDateTime(QDate(2020, 4, 15), QTime(0, 0), Qt::LocalTime))
- << raw("\xc0\x6a" "2020-04-15");
- QTest::newRow("DateTime:24:00:00") << QCborValue(QDateTime(QDate(2020, 4, 16), QTime(0, 0), Qt::UTC))
- << raw("\xc0\x74" "2020-04-15T24:00:00Z");
- QTest::newRow("DateTime:+00:00") << QCborValue(QDateTime::fromMSecsSinceEpoch(1515565477125, Qt::UTC))
- << raw("\xc0\x78\x1d" "2018-01-10T06:24:37.125+00:00");
- QTest::newRow("DateTime:+01:00") << QCborValue(QDateTime::fromMSecsSinceEpoch(1515565477125, Qt::OffsetFromUTC, 60*60))
- << raw("\xc0\x78\x1d" "2018-01-10T07:24:37.125+01:00");
- QTest::newRow("UnixTime_t:Integer") << QCborValue(QDateTime::fromSecsSinceEpoch(1515565477, Qt::UTC))
- << raw("\xc1\x1a\x5a\x55\xb1\xa5");
- QTest::newRow("UnixTime_t:Double") << QCborValue(QDateTime::fromMSecsSinceEpoch(1515565477125, Qt::UTC))
- << raw("\xc1\xfb\x41\xd6\x95\x6c""\x69\x48\x00\x00");
+ QTest::newRow("DateTime:NoTime:Local")
+ << QCborValue(QDateTime(QDate(2020, 4, 15), QTime(0, 0)))
+ << raw("\xc0\x6a" "2020-04-15");
+ QTest::newRow("DateTime:24:00:00")
+ << QCborValue(QDateTime(QDate(2020, 4, 16), QTime(0, 0), QTimeZone::UTC))
+ << raw("\xc0\x74" "2020-04-15T24:00:00Z");
+ QTest::newRow("DateTime:+00:00")
+ << QCborValue(QDateTime::fromMSecsSinceEpoch(1515565477125, QTimeZone::UTC))
+ << raw("\xc0\x78\x1d" "2018-01-10T06:24:37.125+00:00");
+ QTest::newRow("DateTime:+01:00")
+ << QCborValue(QDateTime::fromMSecsSinceEpoch(1515565477125,
+ QTimeZone::fromSecondsAheadOfUtc(60 * 60)))
+ << raw("\xc0\x78\x1d" "2018-01-10T07:24:37.125+01:00");
+ QTest::newRow("UnixTime_t:Integer")
+ << QCborValue(QDateTime::fromSecsSinceEpoch(1515565477, QTimeZone::UTC))
+ << raw("\xc1\x1a\x5a\x55\xb1\xa5");
+ QTest::newRow("UnixTime_t:Double")
+ << QCborValue(QDateTime::fromMSecsSinceEpoch(1515565477125, QTimeZone::UTC))
+ << raw("\xc1\xfb\x41\xd6\x95\x6c""\x69\x48\x00\x00");
QTest::newRow("Url:NotNormalized") << QCborValue(QUrl("https://example.com/\xc2\xa9 "))
<< raw("\xd8\x20\x78\x1dHTTPS://EXAMPLE.COM/%c2%a9%20");
@@ -1999,7 +2506,7 @@ void tst_QCborValue::validation_data()
// Add QCborStreamReader-specific limitations due to use of QByteArray and
// QString, which are allocated by QArrayData::allocate().
const qsizetype MaxInvalid = std::numeric_limits<QByteArray::size_type>::max();
- const qsizetype MinInvalid = MaxByteArraySize + 1 - sizeof(QByteArray::size_type);
+ const qsizetype MinInvalid = QByteArray::max_size() + 1 - sizeof(QByteArray::size_type);
addValidationColumns();
addValidationData(MinInvalid);
addValidationLargeData(MinInvalid, MaxInvalid);
@@ -2086,7 +2593,7 @@ void tst_QCborValue::extendedTypeValidation_data()
// representation, which means it can't represent dates before year 1 or
// after year 9999.
{
- QDateTime dt(QDate(-1, 1, 1), QTime(0, 0), Qt::UTC);
+ QDateTime dt(QDate(-1, 1, 1), QTime(0, 0), QTimeZone::UTC);
QTest::newRow("UnixTime_t:negative-year")
<< encode(0xc1, 0x3b, quint64(-dt.toSecsSinceEpoch()) - 1)
<< QCborValue(QCborKnownTags::UnixTime_t, dt.toSecsSinceEpoch());
@@ -2158,7 +2665,7 @@ void tst_QCborValue::extendedTypeValidation()
QCborValue decoded = QCborValue::fromCbor(data, &error);
QVERIFY2(error.error == QCborError(), qPrintable(error.errorString()));
QCOMPARE(error.offset, data.size());
- QCOMPARE(decoded, expected);
+ QT_TEST_EQUALITY_OPS(decoded, expected, true);
QByteArray encoded = decoded.toCbor();
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
@@ -2172,11 +2679,16 @@ void tst_QCborValue::hugeDeviceValidation_data()
{
// because QCborValue will attempt to retain the original string in UTF-8,
// the size which it can't store is actually the byte array size
- addValidationHugeDevice(MaxByteArraySize + 1, MaxByteArraySize + 1);
+ addValidationHugeDevice(QByteArray::max_size() + 1, QByteArray::max_size() + 1);
}
void tst_QCborValue::hugeDeviceValidation()
{
+#if defined(Q_OS_WASM)
+ QSKIP("This test tries to allocate a huge memory buffer,"
+ " causes problem on WebAssembly platform which has limited resources.");
+#endif // Q_OS_WASM
+
QFETCH(QSharedPointer<QIODevice>, device);
QFETCH(CborError, expectedError);
QCborError error = { QCborError::Code(expectedError) };
@@ -2407,6 +2919,239 @@ void tst_QCborValue::toDiagnosticNotation()
QCOMPARE(result, expected);
}
+void tst_QCborValue::cborValueRef_data()
+{
+ basics_data();
+
+ // Add tagged data and non-empty containers (non-basic)
+ QTest::newRow("Array:nonempty") << QCborValue::Array << QCborValue(QCborArray{0});
+ QTest::newRow("Map:nonempty") << QCborValue::Map << QCborValue(QCborMap{ { 0, 1 } });
+ QTest::newRow("Tagged") << QCborValue::Tag << QCborValue(QCborKnownTags::Base64, QByteArray());
+}
+
+template <typename ValueRef> static void cborValueRef_template()
+{
+ const QCborArray otherArray = {2};
+ const QCborMap otherMap = { { 2, 21 } };
+ const QDateTime otherDateTime = QDateTime::fromSecsSinceEpoch(1636654201);
+ const QUrl otherUrl("http://example.org");
+ const QRegularExpression otherRE("[.]*");
+ const QUuid otherUuid = QUuid::createUuid();
+
+ QFETCH(QCborValue, v);
+ QCborArray a = { v };
+ const ValueRef ref = a[0];
+
+ QT_TEST_EQUALITY_OPS(ref, v, true);
+ QVERIFY(ref.compare(v) == 0);
+ QVERIFY(v.compare(ref) == 0);
+
+ // compare properties of the QCborValueRef against the QCborValue it represents
+ QCOMPARE(ref.type(), v.type());
+ QCOMPARE(ref.isInteger(), v.isInteger());
+ QCOMPARE(ref.isByteArray(), v.isByteArray());
+ QCOMPARE(ref.isString(), v.isString());
+ QCOMPARE(ref.isArray(), v.isArray());
+ QCOMPARE(ref.isMap(), v.isMap());
+ QCOMPARE(ref.isFalse(), v.isFalse());
+ QCOMPARE(ref.isTrue(), v.isTrue());
+ QCOMPARE(ref.isBool(), v.isBool());
+ QCOMPARE(ref.isNull(), v.isNull());
+ QCOMPARE(ref.isUndefined(), v.isUndefined());
+ QCOMPARE(ref.isDouble(), v.isDouble());
+ QCOMPARE(ref.isDateTime(), v.isDateTime());
+ QCOMPARE(ref.isUrl(), v.isUrl());
+ QCOMPARE(ref.isRegularExpression(), v.isRegularExpression());
+ QCOMPARE(ref.isUuid(), v.isUuid());
+ QCOMPARE(ref.isInvalid(), v.isInvalid());
+ QCOMPARE(ref.isContainer(), v.isContainer());
+ QCOMPARE(ref.isSimpleType(), v.isSimpleType());
+ QCOMPARE(ref.isSimpleType(QCborSimpleType::False), v.isSimpleType(QCborSimpleType::False));
+ QCOMPARE(ref.isSimpleType(QCborSimpleType::True), v.isSimpleType(QCborSimpleType::True));
+ QCOMPARE(ref.isSimpleType(QCborSimpleType::Null), v.isSimpleType(QCborSimpleType::Null));
+ QCOMPARE(ref.isSimpleType(QCborSimpleType::Undefined), v.isSimpleType(QCborSimpleType::Undefined));
+ QCOMPARE(ref.isSimpleType(QCborSimpleType(255)), v.isSimpleType(QCborSimpleType(255)));
+
+ QCOMPARE(ref.tag(), v.tag());
+ QCOMPARE(ref.taggedValue(), v.taggedValue());
+
+ QCOMPARE(ref.toBool(false), v.toBool(false));
+ QCOMPARE(ref.toBool(true), v.toBool(true));
+ QCOMPARE(ref.toInteger(47), v.toInteger(47));
+ QCOMPARE(ref.toDouble(47), v.toDouble(47));
+ QCOMPARE(ref.toByteArray("other"), v.toByteArray("other"));
+ QCOMPARE(ref.toString("other"), v.toString("other"));
+ QCOMPARE(ref.toArray(otherArray), v.toArray(otherArray));
+ QCOMPARE(ref.toMap(otherMap), v.toMap(otherMap));
+ QCOMPARE(ref.toDateTime(otherDateTime), v.toDateTime(otherDateTime));
+ QCOMPARE(ref.toRegularExpression(otherRE), v.toRegularExpression(otherRE));
+ QCOMPARE(ref.toUrl(otherUrl), v.toUrl(otherUrl));
+ QCOMPARE(ref.toUuid(otherUuid), v.toUuid(otherUuid));
+ QCOMPARE(ref.toSimpleType(QCborSimpleType(254)), v.toSimpleType(QCborSimpleType(254)));
+
+ QCOMPARE(ref.toArray().isEmpty(), v.toArray().isEmpty());
+ QCOMPARE(ref.toMap().isEmpty(), v.toMap().isEmpty());
+ QCOMPARE(ref[0], std::as_const(v)[0]);
+ QCOMPARE(ref[QLatin1String("other")], std::as_const(v)[QLatin1String("other")]);
+ QCOMPARE(ref[QString("other")], std::as_const(v)[QString("other")]);
+
+ if (qIsNaN(v.toDouble()))
+ QCOMPARE(qIsNaN(ref.toVariant().toDouble()), qIsNaN(v.toVariant().toDouble()));
+ else
+ QCOMPARE(ref.toVariant(), v.toVariant());
+ QCOMPARE(ref.toJsonValue(), v.toJsonValue());
+ QCOMPARE(ref.toCbor(), v.toCbor());
+ QCOMPARE(ref.toDiagnosticNotation(), v.toDiagnosticNotation());
+}
+
+void tst_QCborValue::cborValueRef()
+{
+ cborValueRef_template<QCborValueRef>();
+}
+
+void tst_QCborValue::cborValueConstRef()
+{
+ cborValueRef_template<QCborValueConstRef>();
+}
+
+void tst_QCborValue::cborValueRefMutatingArray()
+{
+ // complements arrayMutation()
+ QFETCH(QCborValue, v);
+
+ {
+ QCborArray origArray = { 123 };
+ QCborArray a = { QCborValue(origArray) };
+ QCborValueRef ref = a[0];
+ QVERIFY(ref.isArray());
+ QVERIFY(!ref.toArray().isEmpty());
+
+ // this will force the array to grow
+ ref[1] = v;
+
+ QCborValue va = a.at(0);
+ QVERIFY(va.isArray());
+ QCOMPARE(va.toArray().size(), 2);
+ QCOMPARE(va.toArray().first(), 123);
+ QT_TEST_EQUALITY_OPS(va.toArray().last(), v, true);
+
+ // ensure the array didn't get modified
+ QT_TEST_EQUALITY_OPS(origArray, QCborArray{123}, true);
+ }
+ {
+ QCborArray emptyArray;
+ QCborArray a = { QCborValue(emptyArray) };
+ QCborValueRef ref = a[0];
+ QVERIFY(ref.isArray());
+ QVERIFY(ref.toArray().isEmpty());
+
+ // this will force the array to become non-empty
+ ref[1] = v;
+
+ QCborValue va = a.at(0);
+ QVERIFY(va.isArray());
+ QCOMPARE(va.toArray().size(), 2);
+ QT_TEST_EQUALITY_OPS(va.toArray().first(), QCborValue(), true);
+ QT_TEST_EQUALITY_OPS(va.toArray().last(), v, true);
+
+ // ensure the array didn't get modified
+ QT_TEST_EQUALITY_OPS(emptyArray, QCborArray(), true);
+ }
+ {
+ QCborArray emptyArray = { 123, 456 };
+ emptyArray.takeFirst();
+ emptyArray.takeFirst();
+ QCborArray a = { QCborValue(emptyArray) };
+ QCborValueRef ref = a[0];
+ QVERIFY(ref.isArray());
+ QVERIFY(ref.toArray().isEmpty());
+
+ // this will force the array to become non-empty
+ ref[1] = v;
+
+ QCborValue va = a.at(0);
+ QVERIFY(va.isArray());
+ QCOMPARE(va.toArray().size(), 2);
+ QT_TEST_EQUALITY_OPS(va.toArray().first(), QCborValue(), true);
+ QT_TEST_EQUALITY_OPS(va.toArray().last(), v, true);
+
+ // ensure the array didn't get modified
+ QT_TEST_EQUALITY_OPS(emptyArray, QCborArray(), true);
+ }
+}
+
+void tst_QCborValue::cborValueRefMutatingMapIntKey()
+{
+ // complements mapMutation()
+ QFETCH(QCborValue, v);
+ QCborValue::Type type = v.type();
+
+ auto executeTest = [=](qint64 index) {
+ QCborArray a = { v };
+ QCborValueRef ref = a[0];
+
+ if (type == QCborValue::Array && !v.toArray().isEmpty())
+ QTest::ignoreMessage(QtWarningMsg, "Using CBOR array as map forced conversion");
+ ref[index] = v;
+
+ QCborValue vm = a.at(0);
+ QVERIFY(vm.isMap());
+ QCOMPARE(vm.toMap()[index].type(), type);
+ QCOMPARE(vm.toMap()[index], v);
+
+ if (type == QCborValue::Array && !v.toArray().isEmpty())
+ QCOMPARE(vm.toMap()[0], v.toArray()[0]);
+ else if (type == QCborValue::Map && !v.toMap().isEmpty())
+ QCOMPARE(vm.toMap()[0], v.toMap()[0]);
+ };
+ // accessing a negative index causes it to become a map
+ executeTest(-1);
+ if (QTest::currentTestFailed())
+ return;
+
+ // if the index is bigger than 0x10000, the array becomes a map
+ executeTest(0x10000);
+ if (QTest::currentTestFailed())
+ return;
+
+ if (type != QCborValue::Array)
+ executeTest(5);
+}
+
+template <typename String> static void cborValueRefMutatingMapStringKey_template(const String &key)
+{
+ // complements mapMutation() too
+ QFETCH(QCborValue, v);
+ QCborValue::Type type = v.type();
+ QCborArray a = { v };
+ QCborValueRef ref = a[0];
+
+ if (type == QCborValue::Array && !v.toArray().isEmpty())
+ QTest::ignoreMessage(QtWarningMsg, "Using CBOR array as map forced conversion");
+
+ // force conversion to map
+ ref[key] = v;
+
+ QCborValue vm = a.at(0);
+ QVERIFY(vm.isMap());
+ QCOMPARE(vm.toMap()[key].type(), type);
+ QCOMPARE(vm.toMap()[key], v);
+
+ if (type == QCborValue::Array && !v.toArray().isEmpty())
+ QCOMPARE(vm.toMap()[0], v.toArray()[0]);
+ else if (type == QCborValue::Map && !v.toMap().isEmpty())
+ QCOMPARE(vm.toMap()[0], v.toMap()[0]);
+}
+
+void tst_QCborValue::cborValueRefMutatingMapLatin1StringKey()
+{
+ cborValueRefMutatingMapStringKey_template(QLatin1String("other"));
+}
+
+void tst_QCborValue::cborValueRefMutatingMapStringKey()
+{
+ cborValueRefMutatingMapStringKey_template(QString("other"));
+}
void tst_QCborValue::datastreamSerialization_data()
{
@@ -2459,6 +3204,7 @@ void tst_QCborValue::streamVariantSerialization()
load >> output;
QCOMPARE(output.userType(), QMetaType::QCborArray);
QCOMPARE(qvariant_cast<QCborArray>(output), array);
+ QT_TEST_EQUALITY_OPS(qvariant_cast<QCborArray>(output), array, true);
}
{
QCborMap obj{{"foo", 42}};
@@ -2489,7 +3235,7 @@ void tst_QCborValue::debugOutput_data()
QTest::addColumn<QCborValue>("v");
QTest::addColumn<QString>("expected");
- QDateTime dt(QDate(2020, 4, 18), QTime(13, 41, 22, 123), Qt::UTC);
+ QDateTime dt(QDate(2020, 4, 18), QTime(13, 41, 22, 123), QTimeZone::UTC);
QBitArray bits = QBitArray::fromBits("\x79\x03", 11);
QTest::newRow("Undefined") << QCborValue() << "QCborValue()";
diff --git a/tests/auto/corelib/serialization/qcborvalue_json/CMakeLists.txt b/tests/auto/corelib/serialization/qcborvalue_json/CMakeLists.txt
index 213732e04d..14ac0514f9 100644
--- a/tests/auto/corelib/serialization/qcborvalue_json/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qcborvalue_json/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qcborvalue_json.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcborvalue_json Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcborvalue_json LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcborvalue_json
SOURCES
tst_qcborvalue_json.cpp
diff --git a/tests/auto/corelib/serialization/qcborvalue_json/tst_qcborvalue_json.cpp b/tests/auto/corelib/serialization/qcborvalue_json/tst_qcborvalue_json.cpp
index 723dfef90b..941bfa4008 100644
--- a/tests/auto/corelib/serialization/qcborvalue_json/tst_qcborvalue_json.cpp
+++ b/tests/auto/corelib/serialization/qcborvalue_json/tst_qcborvalue_json.cpp
@@ -1,47 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtCore module 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/qcborvalue.h>
#include <QTest>
#include <QJsonValue>
#include <QJsonObject>
#include <QJsonArray>
+#include <QVariant>
+#include <QVariantMap>
+#include <QVariantList>
Q_DECLARE_METATYPE(QCborValue)
diff --git a/tests/auto/corelib/serialization/qdatastream/CMakeLists.txt b/tests/auto/corelib/serialization/qdatastream/CMakeLists.txt
index b29088c712..ebbb232362 100644
--- a/tests/auto/corelib/serialization/qdatastream/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qdatastream/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qdatastream.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdatastream Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdatastream LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "datastream.q42")
list(APPEND test_data "typedef.q5")
@@ -11,25 +18,7 @@ list(APPEND test_data "typedef.q5")
qt_internal_add_test(tst_qdatastream
SOURCES
tst_qdatastream.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
TESTDATA ${test_data}
)
-
-## Scopes:
-#####################################################################
-
-if(ANDROID OR INTEGRITY)
- # Resources:
- set(testdata_resource_files
- "datastream.q42"
- "typedef.q5"
- )
-
- qt_internal_add_resource(tst_qdatastream "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
- )
-endif()
diff --git a/tests/auto/corelib/serialization/qdatastream/gen_typedefq5.cpp b/tests/auto/corelib/serialization/qdatastream/gen_typedefq5.cpp
index 3a10e40576..6cc2755d8a 100644
--- a/tests/auto/corelib/serialization/qdatastream/gen_typedefq5.cpp
+++ b/tests/auto/corelib/serialization/qdatastream/gen_typedefq5.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDataStream>
diff --git a/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp
index 511d8f957f..77ca884897 100644
--- a/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.cpp
+++ b/tests/auto/corelib/serialization/qdatastream/tst_qdatastream.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 <QTest>
#include <QBuffer>
@@ -44,6 +19,8 @@
#include <QtGui/QPixmap>
#include <QtGui/QTextLength>
+using namespace Qt::StringLiterals;
+
static_assert(QTypeTraits::has_ostream_operator_v<QDataStream, int>);
static_assert(QTypeTraits::has_ostream_operator_v<QDataStream, QList<int>>);
static_assert(QTypeTraits::has_ostream_operator_v<QDataStream, QMap<int, QString>>);
@@ -157,6 +134,7 @@ private slots:
void stream_atEnd();
void stream_writeError();
+ void stream_writeSizeLimitExceeded();
void stream_QByteArray2();
@@ -318,6 +296,8 @@ static int NColorRoles[] = {
QPalette::PlaceholderText + 1, // Qt_5_12
QPalette::PlaceholderText + 1, // Qt_5_13, Qt_5_14, Qt_5_15
QPalette::PlaceholderText + 1, // Qt_6_0
+ QPalette::Accent + 1, // Qt_6_6
+ QPalette::Accent + 1, // Qt_6_7
0 // add the correct value for Qt_5_14 here later
};
@@ -983,10 +963,10 @@ static void QBitArrayData(QBitArray *b, int index)
case 18: filler = "1111111111111111111111111111111111111111111111111111111111111111"; break;
}
- b->resize(filler.length());
+ b->resize(filler.size());
b->fill(0); // reset all bits to zero
- for (int i = 0; i < filler.length(); ++i) {
+ for (int i = 0; i < filler.size(); ++i) {
if (filler.at(i) == '1')
b->setBit(i, true);
}
@@ -1228,15 +1208,15 @@ void tst_QDataStream::readQCursor(QDataStream *s)
QCOMPARE(d5.hotSpot(), test.hotSpot());
// Comparing non-null QBitmaps will fail. Upcast them first to pass.
- QCOMPARE(d5.bitmap(Qt::ReturnByValue).isNull(), test.bitmap(Qt::ReturnByValue).isNull());
+ QCOMPARE(d5.bitmap().isNull(), test.bitmap().isNull());
QCOMPARE(
- static_cast<QPixmap>(d5.bitmap(Qt::ReturnByValue)),
- static_cast<QPixmap>(test.bitmap(Qt::ReturnByValue))
+ static_cast<QPixmap>(d5.bitmap()),
+ static_cast<QPixmap>(test.bitmap())
);
- QCOMPARE(d5.mask(Qt::ReturnByValue).isNull(), test.mask(Qt::ReturnByValue).isNull());
+ QCOMPARE(d5.mask().isNull(), test.mask().isNull());
QCOMPARE(
- static_cast<QPixmap>(d5.mask(Qt::ReturnByValue)),
- static_cast<QPixmap>(test.mask(Qt::ReturnByValue))
+ static_cast<QPixmap>(d5.mask()),
+ static_cast<QPixmap>(test.mask())
);
}
#endif
@@ -2211,6 +2191,19 @@ void tst_QDataStream::stream_writeError()
TEST_WRITE_ERROR(.writeRawData("test", 4))
}
+void tst_QDataStream::stream_writeSizeLimitExceeded()
+{
+ QByteArray ba;
+ QDataStream ds(&ba, QDataStream::ReadWrite);
+ // Set the version that supports only 32-bit data size
+ ds.setVersion(QDataStream::Qt_6_6);
+ QCOMPARE(ds.status(), QDataStream::Ok);
+ const qint64 size = qint64(std::numeric_limits<quint32>::max()) + 1;
+ ds.writeBytes("", size);
+ QCOMPARE(ds.status(), QDataStream::SizeLimitExceeded);
+ QVERIFY(ba.isEmpty());
+}
+
void tst_QDataStream::stream_QByteArray2()
{
QByteArray ba;
@@ -2415,8 +2408,8 @@ void tst_QDataStream::setVersion()
*/
// revise the test if new color roles or color groups are added
- QVERIFY(QPalette::NColorRoles == QPalette::PlaceholderText + 1);
- QCOMPARE(int(QPalette::NColorGroups), 3);
+ QCOMPARE(QPalette::NColorRoles, QPalette::Accent + 1);
+ QCOMPARE(static_cast<int>(QPalette::NColorGroups), 3);
QByteArray ba2;
QPalette pal1, pal2;
@@ -2817,7 +2810,6 @@ void tst_QDataStream::status_charptr_QByteArray_data()
QTest::newRow("badsize 1MB+1") << QByteArray("\x00\x10\x00\x01", 4) + oneMbMinus1 + QByteArray("j") << (int) QDataStream::ReadPastEnd << QByteArray();
QTest::newRow("badsize 3MB") << QByteArray("\x00\x30\x00\x00", 4) + threeMbMinus1 << (int) QDataStream::ReadPastEnd << QByteArray();
QTest::newRow("badsize 3MB+1") << QByteArray("\x00\x30\x00\x01", 4) + threeMbMinus1 + QByteArray("j") << (int) QDataStream::ReadPastEnd << QByteArray();
- QTest::newRow("size -1") << QByteArray("\xff\xff\xff\xff", 4) << (int) QDataStream::ReadPastEnd << QByteArray();
QTest::newRow("size -2") << QByteArray("\xff\xff\xff\xfe", 4) << (int) QDataStream::ReadPastEnd << QByteArray();
}
@@ -2840,17 +2832,35 @@ void tst_QDataStream::status_charptr_QByteArray()
{
QDataStream stream(&data, QIODevice::ReadOnly);
char *buf;
- uint len;
+ qint64 len;
stream.readBytes(buf, len);
- QCOMPARE((int)len, expectedString.size());
+ QCOMPARE(len, qint64(expectedString.size()));
QCOMPARE(QByteArray(buf, len), expectedString);
QCOMPARE(int(stream.status()), expectedStatus);
delete [] buf;
}
+#if QT_DEPRECATED_SINCE(6, 11)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
{
+ // check that old overload still works as expected
QDataStream stream(&data, QIODevice::ReadOnly);
- QByteArray buf;
+ char *buf;
+ auto cleanup = qScopeGuard([&buf] {
+ delete [] buf;
+ });
+ uint len;
+ stream.readBytes(buf, len);
+
+ QCOMPARE(len, expectedString.size());
+ QCOMPARE(QByteArray(buf, len), expectedString);
+ QCOMPARE(int(stream.status()), expectedStatus);
+ }
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 11)
+ {
+ QDataStream stream(&data, QIODevice::ReadOnly);
+ QByteArray buf = "Content to be overwritten";
stream >> buf;
if (data.startsWith("\xff\xff\xff\xff")) {
@@ -2919,12 +2929,20 @@ void tst_QDataStream::status_QString_data()
QTest::newRow("badsize 1MB+1") << QByteArray("\x00\x20\x00\x02", 4) + oneMbMinus1Data + QByteArray("j") << (int) QDataStream::ReadPastEnd << QString();
QTest::newRow("badsize 3MB") << QByteArray("\x00\x60\x00\x00", 4) + threeMbMinus1Data << (int) QDataStream::ReadPastEnd << QString();
QTest::newRow("badsize 3MB+1") << QByteArray("\x00\x60\x00\x02", 4) + threeMbMinus1Data + QByteArray("j") << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("size -2") << QByteArray("\xff\xff\xff\xfe", 4) << (int) QDataStream::ReadPastEnd << QString();
- QTest::newRow("size MAX") << QByteArray("\x7f\xff\xff\xfe", 4) << (int) QDataStream::ReadPastEnd << QString();
+ QTest::newRow("32 bit size should be 64 bit") << QByteArray("\xff\xff\xff\xfe", 4) << (int) QDataStream::ReadPastEnd << QString();
- // corrupt data
+#if QT_POINTER_SIZE != 4
+ // past end on 64 bit platforms
+ QTest::newRow("32 bit size MAX string no content") << QByteArray("\xff\xff\xff\xfc", 4) << (int) QDataStream::ReadPastEnd << QString();
+#else
+ // too big for 32 bit platforms
+ QTest::newRow("32 bit size MAX string no content") << QByteArray("\xff\xff\xff\xfc", 4) << (int) QDataStream::SizeLimitExceeded << QString();
+#endif
+ // too big on both 32 and 64 bit platforms because qsizetype is signed
+ QTest::newRow("64 bit size MAX string no content") << QByteArray("\xff\xff\xff\xfe\xff\xff\xff\xff\xff\xff\xff\xfe", 12) << (int) QDataStream::SizeLimitExceeded << QString();
+
+ // corrupt data because QChar is 16 bit => even size required
QTest::newRow("corrupt1") << QByteArray("yyyy") << (int) QDataStream::ReadCorruptData << QString();
- QTest::newRow("size -3") << QByteArray("\xff\xff\xff\xfd", 4) << (int) QDataStream::ReadCorruptData << QString();
}
void tst_QDataStream::status_QString()
@@ -2934,7 +2952,7 @@ void tst_QDataStream::status_QString()
QFETCH(QString, expectedString);
QDataStream stream(&data, QIODevice::ReadOnly);
- QString str;
+ QString str = "Content to be overwritten";
stream >> str;
QCOMPARE(str.size(), expectedString.size());
@@ -2998,6 +3016,8 @@ void tst_QDataStream::status_QBitArray_data()
QTest::newRow("badsize 16") << QDataStream::Qt_5_15 << QByteArray("\x00\x00\x00\x10\xff", 5) << (int) QDataStream::ReadPastEnd << QBitArray();
QTest::newRow("badsize 17") << QDataStream::Qt_5_15 << QByteArray("\x00\x00\x00\x11\xff\xff", 6) << (int) QDataStream::ReadPastEnd << QBitArray();
QTest::newRow("badsize 32") << QDataStream::Qt_5_15 << QByteArray("\x00\x00\x00\x20\xff\xff\xff", 7) << (int) QDataStream::ReadPastEnd << QBitArray();
+ QTest::newRow("badsize INT_MAX") << QDataStream::Qt_5_15 << QByteArray("\x7f\xff\xff\xff\xff\xff\xff", 7) << int(QDataStream::ReadPastEnd) << QBitArray(); // size accepted
+ QTest::addRow("badsize INT_MAX + 1") << QDataStream::Qt_5_15 << QByteArray("\x80\x00\x00\x01" "\xff\xff\xff", 7) << int(QDataStream::ReadCorruptData) << QBitArray(); // size rejected
QTest::newRow("new badsize 0") << QDataStream::Qt_6_0 << QByteArray("\x00\x00\x00\x00", 4) << (int) QDataStream::ReadPastEnd << QBitArray();
QTest::newRow("new badsize 9") << QDataStream::Qt_6_0 << QByteArray("\x00\x00\x00\x00\x00\x00\x00\x09\xff", 9) << (int) QDataStream::ReadPastEnd << QBitArray();
QTest::newRow("new badsize 0x10000") << QDataStream::Qt_6_0 << QByteArray("\x00\x00\x00\x01\x00\x00\x00\x00\x00", 9) << (int) QDataStream::ReadPastEnd << QBitArray();
@@ -3027,7 +3047,7 @@ void tst_QDataStream::status_QBitArray()
QDataStream stream(&data, QIODevice::ReadOnly);
stream.setVersion(version);
- QBitArray str;
+ QBitArray str(255, true);
stream >> str;
if (sizeof(qsizetype) == sizeof(int))
@@ -3094,7 +3114,9 @@ void tst_QDataStream::status_QHash_QMap()
hash2.insert("L", "MN");
// ok
+ hash = hash2;
MAP_TEST(QByteArray("\x00\x00\x00\x00", 4), QDataStream::Ok, QDataStream::Ok, StringHash());
+ hash = hash2;
MAP_TEST(QByteArray("\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", 12), QDataStream::Ok, QDataStream::Ok, hash1);
MAP_TEST(QByteArray("\x00\x00\x00\x02\x00\x00\x00\x02\x00J\x00\x00\x00\x02\x00K"
"\x00\x00\x00\x02\x00L\x00\x00\x00\x04\x00M\x00N", 30), QDataStream::Ok, QDataStream::Ok, hash2);
@@ -3175,7 +3197,9 @@ void tst_QDataStream::status_QList_QVector()
someList.append("J");
someList.append("MN");
+ list = someList;
LIST_TEST(QByteArray("\x00\x00\x00\x00", 4), QDataStream::Ok, QDataStream::Ok, List());
+ list = someList;
LIST_TEST(QByteArray("\x00\x00\x00\x01\x00\x00\x00\x00", 8), QDataStream::Ok, QDataStream::Ok, listWithEmptyString);
LIST_TEST(QByteArray("\x00\x00\x00\x02\x00\x00\x00\x02\x00J"
"\x00\x00\x00\x04\x00M\x00N", 18), QDataStream::Ok, QDataStream::Ok, someList);
@@ -3243,6 +3267,13 @@ void tst_QDataStream::streamRealDataTypes()
path.arcTo(4, 5, 6, 7, 8, 9);
path.quadTo(1, 2, 3, 4);
+ QPainterPath otherPath;
+ otherPath.arcTo(10, 4, 5, 6, 7, 8);
+ otherPath.lineTo(9, 0);
+ otherPath.cubicTo(0, 0, 10, 10, 20, 20);
+ otherPath.quadTo(2, 4, 5, 6);
+ QCOMPARE(otherPath.elementCount(), 12);
+
QColor color(64, 64, 64);
color.setAlphaF(0.5);
QRadialGradient radialGradient(5, 6, 7, 8, 9);
@@ -3274,17 +3305,17 @@ void tst_QDataStream::streamRealDataTypes()
file.close();
}
- QPointF point;
- QRectF rect;
- QPolygonF polygon;
+ QPointF point(1, 2);
+ QRectF rect(1, 2, 5, 6);
+ QPolygonF polygon {{3, 4}, {5, 6}};
QTransform transform;
- QPainterPath p;
+ QPainterPath p = otherPath;
QPicture pict;
- QTextLength textLength;
- QColor col;
- QBrush rGrad;
- QBrush cGrad;
- QPen pen;
+ QTextLength textLength(QTextLength::FixedLength, 2.5);
+ QColor col(128, 128, 127);
+ QBrush rGrad(Qt::CrossPattern);
+ QBrush cGrad(Qt::CrossPattern);
+ QPen pen(conicalBrush, 10);
QVERIFY(file.open(QIODevice::ReadOnly));
QDataStream stream(&file);
@@ -3904,18 +3935,19 @@ void tst_QDataStream::typedefQt5Compat()
// writing in Qt 6 results in the same file
QTemporaryDir dir;
QVERIFY(dir.isValid());
- QFile file(dir.filePath(u"typedef.q6"_qs));
- file.open(QIODevice::WriteOnly);
+ QFile file(dir.filePath(u"typedef.q6"_s));
+ QVERIFY(file.open(QIODevice::WriteOnly));
QDataStream stream(&file);
stream.setVersion(QDataStream::Qt_5_15);
CustomPair p {42, 100};
stream << QVariant::fromValue(p);
file.close();
- file.open(QIODevice::ReadOnly);
+ QVERIFY(file.open(QIODevice::ReadOnly));
QCOMPARE(file.readAll(), qt5Data);
}
}
QTEST_MAIN(tst_QDataStream)
+
#include "tst_qdatastream.moc"
diff --git a/tests/auto/corelib/serialization/qdatastream_core_pixmap/CMakeLists.txt b/tests/auto/corelib/serialization/qdatastream_core_pixmap/CMakeLists.txt
index b77b8212fb..d0622c642c 100644
--- a/tests/auto/corelib/serialization/qdatastream_core_pixmap/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qdatastream_core_pixmap/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdatastream_core_pixmap.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdatastream_core_pixmap Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdatastream_core_pixmap LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdatastream_core_pixmap
SOURCES
tst_qdatastream_core_pixmap.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/corelib/serialization/qdatastream_core_pixmap/tst_qdatastream_core_pixmap.cpp b/tests/auto/corelib/serialization/qdatastream_core_pixmap/tst_qdatastream_core_pixmap.cpp
index 10721cd253..f17da27f1c 100644
--- a/tests/auto/corelib/serialization/qdatastream_core_pixmap/tst_qdatastream_core_pixmap.cpp
+++ b/tests/auto/corelib/serialization/qdatastream_core_pixmap/tst_qdatastream_core_pixmap.cpp
@@ -1,36 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtGui/QPixmap>
#include <QtGui/QImage>
-class tst_QDataStream : public QObject
+class tst_QDataStreamPixmap : public QObject
{
Q_OBJECT
@@ -38,7 +13,7 @@ private slots:
void stream_with_pixmap();
};
-void tst_QDataStream::stream_with_pixmap()
+void tst_QDataStreamPixmap::stream_with_pixmap()
{
// This is a QVariantMap with a 3x3 red QPixmap and two strings inside
const QByteArray ba = QByteArray::fromBase64(
@@ -62,6 +37,6 @@ void tst_QDataStream::stream_with_pixmap()
QCOMPARE(map["z"].toString(), QString("there"));
}
-QTEST_GUILESS_MAIN(tst_QDataStream)
+QTEST_GUILESS_MAIN(tst_QDataStreamPixmap)
#include "tst_qdatastream_core_pixmap.moc"
diff --git a/tests/auto/corelib/serialization/qtextstream/BLACKLIST b/tests/auto/corelib/serialization/qtextstream/BLACKLIST
index aef7d7aa26..cb76e0454d 100644
--- a/tests/auto/corelib/serialization/qtextstream/BLACKLIST
+++ b/tests/auto/corelib/serialization/qtextstream/BLACKLIST
@@ -1,5 +1,3 @@
-[stillOpenWhenAtEnd]
-windows-7sp1
# QTBUG-87410
[readStdin]
android
diff --git a/tests/auto/corelib/serialization/qtextstream/CMakeLists.txt b/tests/auto/corelib/serialization/qtextstream/CMakeLists.txt
index 15798c963f..ac3dc91555 100644
--- a/tests/auto/corelib/serialization/qtextstream/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qtextstream/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qtextstream.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_qtextstream LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(test)
add_subdirectory(stdinProcess)
diff --git a/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/CMakeLists.txt b/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/CMakeLists.txt
index 785785d43a..bcfb0aaf4e 100644
--- a/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from readAllStdinProcess.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## readAllStdinProcess Binary:
diff --git a/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/main.cpp b/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/main.cpp
index 08d2bf8183..01f47d758f 100644
--- a/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/main.cpp
+++ b/tests/auto/corelib/serialization/qtextstream/readAllStdinProcess/main.cpp
@@ -1,33 +1,9 @@
-/****************************************************************************
-**
-** 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/QTextStream>
+#include <QtCore/QString>
#include <stdio.h>
int main(int, char**)
diff --git a/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/CMakeLists.txt b/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/CMakeLists.txt
index 897444c9af..39af3a3048 100644
--- a/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from readLineStdinProcess.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## readLineStdinProcess Binary:
diff --git a/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/main.cpp b/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/main.cpp
index 2d4aa452ca..8f81f5a720 100644
--- a/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/main.cpp
+++ b/tests/auto/corelib/serialization/qtextstream/readLineStdinProcess/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 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/QCoreApplication>
diff --git a/tests/auto/corelib/serialization/qtextstream/stdinProcess/CMakeLists.txt b/tests/auto/corelib/serialization/qtextstream/stdinProcess/CMakeLists.txt
index 73eccd1ed8..7e964bbfb2 100644
--- a/tests/auto/corelib/serialization/qtextstream/stdinProcess/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qtextstream/stdinProcess/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from stdinProcess.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## stdinProcess Binary:
diff --git a/tests/auto/corelib/serialization/qtextstream/stdinProcess/main.cpp b/tests/auto/corelib/serialization/qtextstream/stdinProcess/main.cpp
index a3c1fc525b..b8a274ed0f 100644
--- a/tests/auto/corelib/serialization/qtextstream/stdinProcess/main.cpp
+++ b/tests/auto/corelib/serialization/qtextstream/stdinProcess/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 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/QTextStream>
diff --git a/tests/auto/corelib/serialization/qtextstream/test/CMakeLists.txt b/tests/auto/corelib/serialization/qtextstream/test/CMakeLists.txt
index cb48aed16c..588a49fcf0 100644
--- a/tests/auto/corelib/serialization/qtextstream/test/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qtextstream/test/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qtextstream Test:
#####################################################################
@@ -15,12 +18,17 @@ qt_internal_add_test(tst_qtextstream
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../tst_qtextstream.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::TestPrivate
TESTDATA ${test_data}
+ QT_TEST_SERVER_LIST "cyrus"
)
+if(QT_FEATURE_sanitize_address)
+ set_property(TEST tst_qtextstream APPEND PROPERTY ENVIRONMENT "QTEST_FUNCTION_TIMEOUT=900000")
+endif()
+
# Resources:
set(qtextstream_resource_files
"../resources/big_endian/"
@@ -36,28 +44,6 @@ qt_internal_add_resource(tst_qtextstream "qtextstream"
${qtextstream_resource_files}
)
-if(INTEGRITY)
-set(qtextstream_resource_files_integrity
- "../rfc3261.txt"
- "../task113817.txt"
- "../tst_qtextstream.cpp"
-)
-
-qt_internal_add_resource(tst_qtextstream "qtextstream_integrity"
- PREFIX
- "/"
- FILES
- ${qtextstream_resource_files_integrity}
-)
-endif()
-
-## Scopes:
-
-qt_internal_extend_target(tst_qtextstream CONDITION builtin_testdata OR INTEGRITY
- DEFINES
- BUILTIN_TESTDATA
-)
-
if(QT_FEATURE_process)
- add_dependencies(tst_qtextstream stdinProcess readAllStdinProcess readLineStdinProcess)
+ add_dependencies(tst_qtextstream stdinProcess readAllStdinProcess readLineStdinProcess)
endif()
diff --git a/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp b/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp
index c02da8efe1..411084a36c 100644
--- a/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp
+++ b/tests/auto/corelib/serialization/qtextstream/tst_qtextstream.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
@@ -37,6 +12,7 @@
#include <QDebug>
#include <QElapsedTimer>
#include <QFile>
+#include <QTemporaryFile>
#include <QStringConverter>
#include <QTcpSocket>
#include <QTemporaryDir>
@@ -94,6 +70,8 @@ private slots:
// char operators
void QChar_operators_FromDevice_data();
void QChar_operators_FromDevice();
+ void char16_t_operators_FromDevice_data();
+ void char16_t_operators_FromDevice();
void char_operators_FromDevice_data();
void char_operators_FromDevice();
@@ -225,6 +203,9 @@ private slots:
void textModeOnEmptyRead();
+ void autodetectUnicode_data();
+ void autodetectUnicode();
+
private:
void generateLineData(bool for_QString);
void generateAllData(bool for_QString);
@@ -569,7 +550,7 @@ void tst_QTextStream::readLineMaxlen()
QFile::remove("testfile");
QFile file("testfile");
if (useDevice) {
- file.open(QIODevice::ReadWrite);
+ QVERIFY(file.open(QIODevice::ReadWrite));
file.write(input.toUtf8());
file.seek(0);
stream.setDevice(&file);
@@ -954,7 +935,8 @@ void tst_QTextStream::lineCount_data()
QTest::newRow("buffersize+1 line") << QByteArray(16384, '\n') << 16384;
QTest::newRow("buffersize+2 line") << QByteArray(16385, '\n') << 16385;
- QFile file(m_rfc3261FilePath); file.open(QFile::ReadOnly);
+ QFile file(m_rfc3261FilePath);
+ QVERIFY(file.open(QFile::ReadOnly));
QTest::newRow("rfc3261") << file.readAll() << 15067;
}
@@ -965,7 +947,7 @@ void tst_QTextStream::lineCount()
QFETCH(int, lineCount);
QFile out("out.txt");
- out.open(QFile::WriteOnly);
+ QVERIFY(out.open(QFile::WriteOnly));
QTextStream lineReader(data);
int lines = 0;
@@ -1211,11 +1193,16 @@ void tst_QTextStream::stillOpenWhenAtEnd()
while (!stream.readLine().isNull()) {}
QVERIFY(file.isOpen());
+#ifdef QT_TEST_SERVER
+ if (!QtNetworkSettings::verifyConnection(QtNetworkSettings::imapServerName(), 143))
+ QSKIP("No network test server available");
+#else
if (!QtNetworkSettings::verifyTestNetworkSettings())
QSKIP("No network test server available");
+#endif
QTcpSocket socket;
- socket.connectToHost(QtNetworkSettings::serverName(), 143);
+ socket.connectToHost(QtNetworkSettings::imapServerName(), 143);
QVERIFY(socket.waitForReadyRead(5000));
QTextStream stream2(&socket);
@@ -1422,18 +1409,18 @@ void tst_QTextStream::pos3LargeFile()
{
QFile file(testFileName);
- file.open(QIODevice::WriteOnly | QIODevice::Text);
+ QVERIFY(file.open(QIODevice::WriteOnly | QIODevice::Text));
QTextStream out( &file );
// NOTE: The unusual spacing is to ensure non-1-character whitespace.
QString lineString = " 0 1 2\t3 4\t \t5 6 7 8 9 \n";
// Approximate 50kb text file
- const int NbLines = (50*1024) / lineString.length() + 1;
+ const int NbLines = (50*1024) / lineString.size() + 1;
for (int line = 0; line < NbLines; ++line)
out << lineString;
// File is automatically flushed and closed on destruction.
}
QFile file(testFileName);
- file.open(QIODevice::ReadOnly | QIODevice::Text);
+ QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
QTextStream in( &file );
const int testValues[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int value;
@@ -1530,7 +1517,7 @@ void tst_QTextStream::read()
{
QFile::remove("testfile");
QFile file("testfile");
- file.open(QFile::WriteOnly);
+ QVERIFY(file.open(QFile::WriteOnly));
file.write("4.15 abc ole");
file.close();
@@ -1552,7 +1539,7 @@ void tst_QTextStream::read()
// File larger than QTEXTSTREAM_BUFFERSIZE
QFile::remove("testfile");
QFile file("testfile");
- file.open(QFile::WriteOnly);
+ QVERIFY(file.open(QFile::WriteOnly));
for (int i = 0; i < 16384 / 8; ++i)
file.write("01234567");
file.write("0");
@@ -1608,8 +1595,8 @@ void tst_QTextStream::forceSign()
// ------------------------------------------------------------------------------
void tst_QTextStream::read0d0d0a()
{
- QFile file("task113817.txt");
- file.open(QIODevice::ReadOnly | QIODevice::Text);
+ QFile file(QFINDTESTDATA("task113817.txt"));
+ QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
QTextStream stream(&file);
while (!stream.atEnd())
@@ -1773,7 +1760,7 @@ void tst_QTextStream::utf8IncompleteAtBufferBoundary()
"\342\200\223"
"\342\200\223");
- data.open(QFile::WriteOnly | QFile::Truncate);
+ QVERIFY(data.open(QFile::WriteOnly | QFile::Truncate));
{
QTextStream out(&data);
out.setEncoding(QStringConverter::Utf8);
@@ -1785,7 +1772,7 @@ void tst_QTextStream::utf8IncompleteAtBufferBoundary()
}
data.close();
- data.open(QFile::ReadOnly);
+ QVERIFY(data.open(QFile::ReadOnly));
QTextStream in(&data);
QFETCH(bool, useLocale);
@@ -1914,6 +1901,40 @@ void tst_QTextStream::QChar_operators_FromDevice()
}
// ------------------------------------------------------------------------------
+void tst_QTextStream::char16_t_operators_FromDevice_data()
+{
+ generateOperatorCharData(false);
+}
+
+// ------------------------------------------------------------------------------
+void tst_QTextStream::char16_t_operators_FromDevice()
+{
+ QFETCH(QByteArray, input);
+ QFETCH(const QChar, qchar_output);
+ QFETCH(const QByteArray, write_output);
+ const char16_t char16_t_output = qchar_output.unicode();
+
+ QBuffer buf(&input);
+ buf.open(QBuffer::ReadOnly);
+ QTextStream stream(&buf);
+ stream.setEncoding(QStringConverter::Latin1);
+ char16_t tmp;
+ stream >> tmp;
+ QCOMPARE(tmp, qchar_output);
+
+ QBuffer writeBuf;
+ writeBuf.open(QBuffer::WriteOnly);
+
+ QTextStream writeStream(&writeBuf);
+ writeStream.setEncoding(QStringConverter::Latin1);
+ writeStream << char16_t_output;
+ writeStream.flush();
+
+ QCOMPARE(writeBuf.buffer().size(), write_output.size());
+ QCOMPARE(writeBuf.buffer().constData(), write_output.constData());
+}
+
+// ------------------------------------------------------------------------------
void tst_QTextStream::char_operators_FromDevice_data()
{
generateOperatorCharData(false);
@@ -2633,13 +2654,27 @@ void tst_QTextStream::manipulators_data()
QTest::addColumn<QString>("textData");
QTest::addColumn<QByteArray>("result");
- QTest::newRow("no flags") << 10 << 0 << 0 << 0 << 5.0 << 5 << QString("five") << QByteArray("55five");
- QTest::newRow("rightadjust") << 10 << int(QTextStream::AlignRight) << 0 << 10 << 5.0 << 5 << QString("five") << QByteArray(" 5 5 five");
- QTest::newRow("leftadjust") << 10 << int(QTextStream::AlignLeft) << 0 << 10 << 5.0 << 5 << QString("five") << QByteArray("5 5 five ");
- QTest::newRow("showpos") << 10 << int(QTextStream::AlignRight) << int(QTextStream::ForceSign) << 10 << 5.0 << 5 << QString("five") << QByteArray(" +5 +5 five");
- QTest::newRow("showpos2") << 10 << int(QTextStream::AlignRight) << int(QTextStream::ForceSign) << 5 << 3.14 << -5 << QString("five") << QByteArray("+3.14 -5 five");
- QTest::newRow("hex") << 16 << int(QTextStream::AlignRight) << int(QTextStream::ShowBase) << 5 << 3.14 << -5 << QString("five") << QByteArray(" 3.14 -0x5 five");
- QTest::newRow("hex") << 16 << int(QTextStream::AlignRight) << int(QTextStream::ShowBase | QTextStream::UppercaseBase) << 5 << 3.14 << -5 << QString("five") << QByteArray(" 3.14 -0X5 five");
+ QTest::newRow("no flags")
+ << 10 << 0 << 0 << 0 << 5.0 << 5 << QString("five") << QByteArray("55five");
+ QTest::newRow("rightadjust")
+ << 10 << int(QTextStream::AlignRight) << 0 << 10 << 5.0 << 5 << QString("five")
+ << QByteArray(" 5 5 five");
+ QTest::newRow("leftadjust")
+ << 10 << int(QTextStream::AlignLeft) << 0 << 10 << 5.0 << 5 << QString("five")
+ << QByteArray("5 5 five ");
+ QTest::newRow("showpos-wide")
+ << 10 << int(QTextStream::AlignRight) << int(QTextStream::ForceSign) << 10 << 5.0 << 5 <<
+ QString("five") << QByteArray(" +5 +5 five");
+ QTest::newRow("showpos-pi")
+ << 10 << int(QTextStream::AlignRight) << int(QTextStream::ForceSign) << 5 << 3.14 << -5 <<
+ QString("five") << QByteArray("+3.14 -5 five");
+ QTest::newRow("hex-lower")
+ << 16 << int(QTextStream::AlignRight) << int(QTextStream::ShowBase) << 5 << 3.14 << -5 <<
+ QString("five") << QByteArray(" 3.14 -0x5 five");
+ QTest::newRow("hex-upper")
+ << 16 << int(QTextStream::AlignRight)
+ << int(QTextStream::ShowBase | QTextStream::UppercaseBase)
+ << 5 << 3.14 << -5 << QString("five") << QByteArray(" 3.14 -0X5 five");
}
// ------------------------------------------------------------------------------
@@ -3027,6 +3062,57 @@ void tst_QTextStream::textModeOnEmptyRead()
QVERIFY(file.isTextModeEnabled());
}
+void tst_QTextStream::autodetectUnicode_data()
+{
+ QTest::addColumn<QStringConverter::Encoding>("encoding");
+ QTest::newRow("Utf8") << QStringConverter::Utf8;
+ QTest::newRow("Utf16BE") << QStringConverter::Utf16BE;
+ QTest::newRow("Utf16LE") << QStringConverter::Utf16LE;
+ QTest::newRow("Utf32BE") << QStringConverter::Utf32BE;
+ QTest::newRow("Utf32LE") << QStringConverter::Utf32LE;
+}
+
+void tst_QTextStream::autodetectUnicode()
+{
+ QFETCH(QStringConverter::Encoding, encoding);
+
+ QTemporaryFile file;
+ QVERIFY(file.open());
+
+ QString original("HelloWorld👋");
+
+ {
+ QTextStream out(&file);
+ out.setGenerateByteOrderMark(true);
+ out.setEncoding(encoding);
+ out << original;
+ }
+ file.seek(0);
+ {
+ QTextStream in(&file);
+ QString actual;
+ in >> actual;
+ QCOMPARE(actual, original);
+ QCOMPARE(in.encoding(), encoding);
+ }
+ file.seek(0);
+ // Again, but change order of calls to QTextStream...
+ {
+ QTextStream out(&file);
+ out.setEncoding(encoding);
+ out.setGenerateByteOrderMark(true);
+ out << original;
+ }
+ file.seek(0);
+ {
+ QTextStream in(&file);
+ QString actual;
+ in >> actual;
+ QCOMPARE(actual, original);
+ QCOMPARE(in.encoding(), encoding);
+ }
+}
+
// ------------------------------------------------------------------------------
diff --git a/tests/auto/corelib/serialization/qxmlstream/CMakeLists.txt b/tests/auto/corelib/serialization/qxmlstream/CMakeLists.txt
index ab20f4d49e..30c86491ff 100644
--- a/tests/auto/corelib/serialization/qxmlstream/CMakeLists.txt
+++ b/tests/auto/corelib/serialization/qxmlstream/CMakeLists.txt
@@ -1,19 +1,33 @@
-# Generated from qxmlstream.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qxmlstream Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qxmlstream LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
-list(APPEND test_data "data")
-list(APPEND test_data "XML-Test-Suite")
+file(GLOB_RECURSE test_data
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/* XML-Test-Suite/*)
+
+file(GLOB_RECURSE tokenError
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ tokenError/*)
qt_internal_add_test(tst_qxmlstream
SOURCES
tst_qxmlstream.cpp
LIBRARIES
Qt::Network
- Qt::Xml
- Qt::GuiPrivate
- TESTDATA ${test_data}
+ Qt::CorePrivate
+ Qt::TestPrivate
+ TESTDATA
+ ${test_data}
+ ${tokenError}
)
diff --git a/tests/auto/corelib/serialization/qxmlstream/qc14n.h b/tests/auto/corelib/serialization/qxmlstream/qc14n.h
index 7fb27382aa..5ae87f1a7a 100644
--- a/tests/auto/corelib/serialization/qxmlstream/qc14n.h
+++ b/tests/auto/corelib/serialization/qxmlstream/qc14n.h
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** 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_FORWARD_DECLARE_CLASS(QIODevice)
-QT_FORWARD_DECLARE_CLASS(QString)
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include <QtCore/QDebug>
#include <QtCore/QFlags>
+#include <QtCore/QXmlStreamReader>
+
+#include <algorithm>
class QC14N
{
@@ -118,18 +94,11 @@ bool QC14N::isAttributesEqual(const QXmlStreamReader &r1,
const QXmlStreamAttributes &attrs1 = r1.attributes();
const QXmlStreamAttributes &attrs2 = r2.attributes();
- const int len = attrs1.size();
-
- if(len != attrs2.size())
+ if (attrs1.size() != attrs2.size())
return false;
- for(int i = 0; i < len; ++i)
- {
- if(!attrs2.contains(attrs1.at(i)))
- return false;
- }
-
- return true;
+ auto existsInOtherList = [&attrs2](const auto &attr) { return attrs2.contains(attr); };
+ return std::all_of(attrs1.cbegin(), attrs1.cend(), existsInOtherList);
}
bool QC14N::isDifferent(const QXmlStreamReader &r1,
diff --git a/tests/auto/corelib/serialization/qxmlstream/setupSuite.sh b/tests/auto/corelib/serialization/qxmlstream/setupSuite.sh
index 2bf5c5e020..3cf842c32a 100755
--- a/tests/auto/corelib/serialization/qxmlstream/setupSuite.sh
+++ b/tests/auto/corelib/serialization/qxmlstream/setupSuite.sh
@@ -1,31 +1,6 @@
#!/bin/sh
-#############################################################################
-##
-## Copyright (C) 2016 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is the build configuration utility of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:GPL-EXCEPT$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 as published by the Free Software
-## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
+# Copyright (C) 2016 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#
# Hello!
diff --git a/tests/auto/corelib/serialization/qxmlstream/tokenError/dtdInBody.xml b/tests/auto/corelib/serialization/qxmlstream/tokenError/dtdInBody.xml
new file mode 100644
index 0000000000..1c3ca4e271
--- /dev/null
+++ b/tests/auto/corelib/serialization/qxmlstream/tokenError/dtdInBody.xml
@@ -0,0 +1,20 @@
+<!DOCTYPE TEST [
+ <!ELEMENT TESTATTRIBUTE (CASE+)>
+ <!ELEMENT CASE (CLASS, FUNCTION)>
+ <!ELEMENT CLASS (#PCDATA)>
+
+ <!-- adding random ENTITY statement, as this is typical DTD content -->
+ <!ENTITY unite "&#x222a;">
+
+ <!ATTLIST CASE CLASS CDATA #REQUIRED>
+]>
+<TEST>
+ <CASE>
+ <CLASS>tst_QXmlStream</CLASS>
+ </CASE>
+ <!-- invalid DTD in XML body follows -->
+ <!DOCTYPE DTDTEST [
+ <!ELEMENT RESULT (CASE+)>
+ <!ATTLIST RESULT OUTPUT CDATA #REQUIRED>
+ ]>
+</TEST>
diff --git a/tests/auto/corelib/serialization/qxmlstream/tokenError/multipleDtd.xml b/tests/auto/corelib/serialization/qxmlstream/tokenError/multipleDtd.xml
new file mode 100644
index 0000000000..cd398c0f9f
--- /dev/null
+++ b/tests/auto/corelib/serialization/qxmlstream/tokenError/multipleDtd.xml
@@ -0,0 +1,20 @@
+<!DOCTYPE TEST [
+ <!ELEMENT TESTATTRIBUTE (CASE+)>
+ <!ELEMENT CASE (CLASS, FUNCTION, DATASET, COMMENTS)>
+ <!ELEMENT CLASS (#PCDATA)>
+
+ <!-- adding random ENTITY statements, as this is typical DTD content -->
+ <!ENTITY iff "&hArr;">
+
+ <!ATTLIST CASE CLASS CDATA #REQUIRED>
+]>
+<!-- invalid second DTD follows -->
+<!DOCTYPE SECOND [
+ <!ELEMENT SECONDATTRIBUTE (#PCDATA)>
+ <!ENTITY on "&#8728;">
+]>
+<TEST>
+ <CASE>
+ <CLASS>tst_QXmlStream</CLASS>
+ </CASE>
+</TEST>
diff --git a/tests/auto/corelib/serialization/qxmlstream/tokenError/wellFormed.xml b/tests/auto/corelib/serialization/qxmlstream/tokenError/wellFormed.xml
new file mode 100644
index 0000000000..1b61a3f062
--- /dev/null
+++ b/tests/auto/corelib/serialization/qxmlstream/tokenError/wellFormed.xml
@@ -0,0 +1,15 @@
+<!DOCTYPE TEST [
+ <!ELEMENT TESTATTRIBUTE (CASE+)>
+ <!ELEMENT CASE (CLASS, FUNCTION, DATASET, COMMENTS)>
+ <!ELEMENT CLASS (#PCDATA)>
+
+ <!-- adding random ENTITY statements, as this is typical DTD content -->
+ <!ENTITY unite "&#x222a;">
+
+ <!ATTLIST CASE CLASS CDATA #REQUIRED>
+]>
+<TEST>
+ <CASE>
+ <CLASS>tst_QXmlStream</CLASS>
+ </CASE>
+</TEST>
diff --git a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
index f32e044de6..b90d05b0fa 100644
--- a/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.cpp
+++ b/tests/auto/corelib/serialization/qxmlstream/tst_qxmlstream.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 <QDirIterator>
@@ -33,19 +8,23 @@
#include <QNetworkReply>
#include <QNetworkRequest>
#include <QTest>
+#include <QtTest/private/qcomparisontesthelper_p.h>
#include <QUrl>
#include <QXmlStreamReader>
#include <QBuffer>
#include <QStack>
-#include <QtGui/private/qzipreader_p.h>
+#include <private/qzipreader_p.h>
#include "qc14n.h"
+using namespace Qt::StringLiterals;
+
Q_DECLARE_METATYPE(QXmlStreamReader::ReadElementTextBehaviour)
static const char *const catalogFile = "XML-Test-Suite/xmlconf/finalCatalog.xml";
static const int expectedRunCount = 1646;
static const int expectedSkipCount = 532;
+static const char *const xmlTestsuiteDir = "XML-Test-Suite";
static const char *const xmlconfDir = "XML-Test-Suite/xmlconf/";
static const char *const xmlDatasetName = "xmltest";
static const char *const updateFilesDir = "xmltest_updates";
@@ -71,6 +50,28 @@ static inline int best(int a, int b, int c)
return qMin(qMin(a, b), c);
}
+// copied from tst_qmake.cpp
+static void copyDir(const QString &sourceDirPath, const QString &targetDirPath)
+{
+ QDir currentDir;
+ QDirIterator dit(sourceDirPath, QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden);
+ while (dit.hasNext()) {
+ dit.next();
+ const QString targetPath = targetDirPath + QLatin1Char('/') + dit.fileName();
+ currentDir.mkpath(targetPath);
+ copyDir(dit.filePath(), targetPath);
+ }
+
+ QDirIterator fit(sourceDirPath, QDir::Files | QDir::Hidden);
+ while (fit.hasNext()) {
+ fit.next();
+ const QString targetPath = targetDirPath + QLatin1Char('/') + fit.fileName();
+ QFile::remove(targetPath); // allowed to fail
+ QFile src(fit.filePath());
+ QVERIFY2(src.copy(targetPath), qPrintable(src.errorString()));
+ }
+}
+
template <typename C>
const C sorted_by_name(C c) { // return by const value so we can feed directly into range-for loops below
using T = typename C::value_type;
@@ -94,8 +95,8 @@ static QByteArray makeCanonical(const QString &filename,
bool testIncremental = false)
{
QFile file(filename);
- file.open(QIODevice::ReadOnly);
-
+ if (!file.open(QIODevice::ReadOnly))
+ qFatal("Could not open file %s", qPrintable(filename));
QXmlStreamReader reader;
QByteArray buffer;
@@ -535,13 +536,15 @@ class tst_QXmlStream: public QObject
{
Q_OBJECT
public:
- tst_QXmlStream() : m_handler(QUrl::fromLocalFile(QFINDTESTDATA(catalogFile)))
+ tst_QXmlStream() : m_handler(QUrl::fromLocalFile(m_tempDir.filePath(catalogFile)))
{
}
private slots:
void initTestCase();
void cleanupTestCase();
+ void compareCompiles();
+ void runTestSuite();
void reportFailures() const;
void reportFailures_data();
void checkBaseline() const;
@@ -560,6 +563,7 @@ private slots:
void setEntityResolver();
void readFromQBuffer() const;
void readFromQBufferInvalid() const;
+ void readFromLatin1String() const;
void readNextStartElement() const;
void readElementText() const;
void readElementText_data() const;
@@ -568,6 +572,14 @@ private slots:
void hasAttribute() const;
void writeWithUtf8Codec() const;
void writeWithStandalone() const;
+ void writeCharacters_data() const;
+ void writeCharacters() const;
+ void writeAttribute_data() const;
+ void writeAttribute() const;
+ void writeBadCharactersUtf8_data() const;
+ void writeBadCharactersUtf8() const;
+ void writeBadCharactersUtf16_data() const;
+ void writeBadCharactersUtf16() const;
void entitiesAndWhitespace_1() const;
void entitiesAndWhitespace_2() const;
void testFalsePrematureError() const;
@@ -580,15 +592,24 @@ private slots:
void invalidStringCharacters_data() const;
void invalidStringCharacters() const;
void hasError() const;
+ void readBack_data() const;
void readBack() const;
void roundTrip() const;
void roundTrip_data() const;
+ void test_fastScanName_data() const;
+ void test_fastScanName() const;
void entityExpansionLimit() const;
+ void tokenErrorHandling_data() const;
+ void tokenErrorHandling() const;
+ void checkStreamNotationDeclarations() const;
+ void checkStreamEntityDeclarations() const;
+
private:
static QByteArray readFile(const QString &filename);
+ QTemporaryDir m_tempDir;
TestSuiteHandler m_handler;
};
@@ -598,8 +619,18 @@ void tst_QXmlStream::initTestCase()
// suit as a zip archive. So we need to unzip it before running the tests,
// and also update some files there.
// We also need to remove the unzipped data during cleanup.
- const QString filesDir(QFINDTESTDATA(xmlconfDir));
- QZipReader reader(filesDir + xmlDatasetName + ".zip");
+
+ // On Android, we cannot unzip at the resource location, so we copy
+ // everything to a temporary directory first.
+ const QString XML_Test_Suite_dir = QFINDTESTDATA(xmlTestsuiteDir);
+ const QString XML_Test_Suite_destDir = m_tempDir.filePath(xmlTestsuiteDir);
+ copyDir(XML_Test_Suite_dir, XML_Test_Suite_destDir);
+
+
+ const QString filesDir(m_tempDir.filePath(xmlconfDir));
+ const QString fileName = filesDir + xmlDatasetName + ".zip";
+ QVERIFY(QFile::exists(fileName));
+ QZipReader reader(fileName);
QVERIFY(reader.isReadable());
QVERIFY(reader.extractAll(filesDir));
// update files
@@ -611,19 +642,27 @@ void tst_QXmlStream::initTestCase()
QFile::remove(destinationPath); // copy will fail if file exists
QVERIFY(QFile::copy(fileInfo.filePath(), destinationPath));
}
+}
- QFile file(QFINDTESTDATA(catalogFile));
- QVERIFY2(file.open(QIODevice::ReadOnly),
- qPrintable(QString::fromLatin1("Failed to open the test suite catalog; %1").arg(file.fileName())));
+void tst_QXmlStream::cleanupTestCase()
+{
+}
- QVERIFY(m_handler.runTests(&file));
+void tst_QXmlStream::compareCompiles()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QXmlStreamAttribute>();
+ QTestPrivate::testEqualityOperatorsCompile<QXmlStreamNamespaceDeclaration>();
+ QTestPrivate::testEqualityOperatorsCompile<QXmlStreamNotationDeclaration>();
+ QTestPrivate::testEqualityOperatorsCompile<QXmlStreamEntityDeclaration>();
}
-void tst_QXmlStream::cleanupTestCase()
+void tst_QXmlStream::runTestSuite()
{
- QDir d(QFINDTESTDATA(xmlconfDir) + xmlDatasetName);
- d.removeRecursively();
- QFile::remove(QLatin1String("test.xml"));
+ QFile file(m_tempDir.filePath(catalogFile));
+ QVERIFY2(file.open(QIODevice::ReadOnly),
+ qPrintable(QString::fromLatin1("Failed to open the test suite catalog; %1").arg(file.fileName())));
+
+ QVERIFY(m_handler.runTests(&file));
}
void tst_QXmlStream::reportFailures() const
@@ -636,7 +675,7 @@ void tst_QXmlStream::reportFailures() const
void tst_QXmlStream::reportFailures_data()
{
- const int len = m_handler.failures.count();
+ const int len = m_handler.failures.size();
QTest::addColumn<bool>("isError");
QTest::addColumn<QString>("description");
@@ -673,7 +712,7 @@ void tst_QXmlStream::checkBaseline_data() const
QTest::addColumn<QString>("expected");
QTest::addColumn<QString>("output");
- const int len = m_handler.missedBaselines.count();
+ const int len = m_handler.missedBaselines.size();
for(int i = 0; i < len; ++i)
{
@@ -702,7 +741,7 @@ void tst_QXmlStream::reportSuccess_data() const
{
QTest::addColumn<bool>("isError");
- const int len = m_handler.successes.count();
+ const int len = m_handler.successes.size();
for (int i = 0; i < len; ++i) {
const QByteArray testName = QByteArray::number(i) + ". " + m_handler.successes.at(i).toLatin1();
@@ -716,7 +755,8 @@ void tst_QXmlStream::reportSuccess_data() const
QByteArray tst_QXmlStream::readFile(const QString &filename)
{
QFile file(filename);
- file.open(QIODevice::ReadOnly);
+ if (!file.open(QIODevice::ReadOnly))
+ qFatal("Could not open file %s", qPrintable(filename));
QXmlStreamReader reader;
@@ -867,12 +907,17 @@ void tst_QXmlStream::addExtraNamespaceDeclarations()
}
{
QXmlStreamReader xml(data);
- xml.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration("undeclared", "blabla"));
- xml.addExtraNamespaceDeclaration(QXmlStreamNamespaceDeclaration("undeclared_too", "foofoo"));
+ QXmlStreamNamespaceDeclaration undeclared("undeclared", "blabla");
+ QXmlStreamNamespaceDeclaration undeclared_too("undeclared_too", "blabla");
+ xml.addExtraNamespaceDeclaration(undeclared);
+ xml.addExtraNamespaceDeclaration(undeclared_too);
while (!xml.atEnd()) {
xml.readNext();
}
QVERIFY2(!xml.hasError(), xml.errorString().toLatin1().constData());
+ QT_TEST_EQUALITY_OPS(undeclared, undeclared_too, false);
+ undeclared = undeclared_too;
+ QT_TEST_EQUALITY_OPS(undeclared, undeclared_too, true);
}
}
@@ -1093,6 +1138,25 @@ void tst_QXmlStream::readFromQBufferInvalid() const
QVERIFY(reader.hasError());
}
+void tst_QXmlStream::readFromLatin1String() const
+{
+ const auto in = "<a>M\xE5rten</a>"_L1;
+ {
+ QXmlStreamReader reader(in);
+ QVERIFY(reader.readNextStartElement());
+ QString text = reader.readElementText();
+ QCOMPARE(text, "M\xE5rten"_L1);
+ }
+ // Same as above, but with addData()
+ {
+ QXmlStreamReader reader;
+ reader.addData(in);
+ QVERIFY(reader.readNextStartElement());
+ QString text = reader.readElementText();
+ QCOMPARE(text, "M\xE5rten"_L1);
+ }
+}
+
void tst_QXmlStream::readNextStartElement() const
{
QLatin1String in("<?xml version=\"1.0\"?><A><!-- blah --><B><C/></B><B attr=\"value\"/>text</A>");
@@ -1109,6 +1173,10 @@ void tst_QXmlStream::readNextStartElement() const
}
QCOMPARE(amountOfB, 2);
+
+ // well-formed document end follows
+ QVERIFY(!reader.readNextStartElement());
+ QCOMPARE(reader.error(), QXmlStreamReader::NoError);
}
void tst_QXmlStream::readElementText() const
@@ -1226,8 +1294,20 @@ void tst_QXmlStream::hasAttributeSignature() const
void tst_QXmlStream::hasAttribute() const
{
- QXmlStreamReader reader(QLatin1String("<e xmlns:p='http://example.com/2' xmlns='http://example.com/' "
- "attr1='value' attr2='value2' p:attr3='value3' emptyAttr=''><noAttributes/></e>"));
+ auto xml = QStringLiteral("<e"
+ " xmlns:p='http://example.com/2'"
+ " xmlns='http://example.com/'"
+ " attr1='value'"
+ " attr2='value2'"
+ " p:attr3='value3'"
+ " emptyAttr=''"
+ " atträbute='meep'"
+ " α='β'"
+ " >"
+ " <noAttributes/>"
+ "</e>");
+
+ QXmlStreamReader reader(xml);
QCOMPARE(reader.readNext(), QXmlStreamReader::StartDocument);
QCOMPARE(reader.readNext(), QXmlStreamReader::StartElement);
@@ -1238,8 +1318,18 @@ void tst_QXmlStream::hasAttribute() const
QVERIFY(atts.hasAttribute(QLatin1String("attr2")));
QVERIFY(atts.hasAttribute(QLatin1String("p:attr3")));
QVERIFY(atts.hasAttribute(QLatin1String("emptyAttr")));
+ QVERIFY(atts.hasAttribute(QLatin1String("attr\xE4""bute")));
+ // α is not representable in L1...
QVERIFY(!atts.hasAttribute(QLatin1String("DOESNOTEXIST")));
+ /* string literals (UTF-8/16) */
+ QVERIFY(atts.hasAttribute(u8"atträbute"));
+ QVERIFY(atts.hasAttribute( u"atträbute"));
+ QVERIFY(atts.hasAttribute(u8"α"));
+ QVERIFY(atts.hasAttribute( u"α"));
+ QVERIFY(!atts.hasAttribute(u8"β"));
+ QVERIFY(!atts.hasAttribute( u"β"));
+
/* Test with an empty & null namespaces. */
QVERIFY(atts.hasAttribute(QString(), QLatin1String("attr2"))); /* A null string. */
QVERIFY(atts.hasAttribute(QLatin1String(""), QLatin1String("attr2"))); /* An empty string. */
@@ -1248,6 +1338,8 @@ void tst_QXmlStream::hasAttribute() const
QVERIFY(atts.hasAttribute(QString::fromLatin1("attr1")));
QVERIFY(atts.hasAttribute(QString::fromLatin1("attr2")));
QVERIFY(atts.hasAttribute(QString::fromLatin1("p:attr3")));
+ QVERIFY(atts.hasAttribute(QStringLiteral("atträbute")));
+ QVERIFY(atts.hasAttribute(QStringLiteral("α")));
QVERIFY(atts.hasAttribute(QString::fromLatin1("emptyAttr")));
QVERIFY(!atts.hasAttribute(QString::fromLatin1("DOESNOTEXIST")));
@@ -1261,6 +1353,7 @@ void tst_QXmlStream::hasAttribute() const
QVERIFY(!atts.hasAttribute(QLatin1String("WRONG_NAMESPACE"), QString::fromLatin1("attr3")));
/* Invoke on an QXmlStreamAttributes that has no attributes at all. */
+ QCOMPARE(reader.readNext(), QXmlStreamReader::Characters);
QCOMPARE(reader.readNext(), QXmlStreamReader::StartElement);
const QXmlStreamAttributes &atts2 = reader.attributes();
@@ -1279,6 +1372,15 @@ void tst_QXmlStream::hasAttribute() const
reader.readNext();
QVERIFY(!reader.hasError());
+
+ QXmlStreamAttribute attrValue1(QLatin1String("http://example.com/"), QString::fromLatin1("attr1"));
+ QXmlStreamAttribute attrValue2 = atts.at(0);
+ QT_TEST_EQUALITY_OPS(atts.at(0), QXmlStreamAttribute(), false);
+ QT_TEST_EQUALITY_OPS(atts.at(0), attrValue1, false);
+ QT_TEST_EQUALITY_OPS(atts.at(0), attrValue2, true);
+ QT_TEST_EQUALITY_OPS(attrValue1, attrValue2, false);
+ attrValue1 = attrValue2;
+ QT_TEST_EQUALITY_OPS(attrValue1, attrValue2, true);
}
void tst_QXmlStream::writeWithUtf8Codec() const
@@ -1313,6 +1415,143 @@ void tst_QXmlStream::writeWithStandalone() const
}
}
+static void writeCharacters_data_common()
+{
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<QString>("output");
+
+ QTest::newRow("empty") << QString() << QString();
+
+ // invalid content
+ QTest::newRow("null-character") << u"\0"_s << QString();
+ QTest::newRow("vertical-tab") << "\v" << QString();
+ QTest::newRow("form-feed") << "\f" << QString();
+ QTest::newRow("esc") << "\x1f" << QString();
+ QTest::newRow("U+FFFE") << u"\xfffe"_s << QString();
+ QTest::newRow("U+FFFF") << u"\xffff"_s << QString();
+
+ // simple strings
+ QTest::newRow("us-ascii") << "Hello, world" << "Hello, world";
+ QTest::newRow("latin1") << "Bokmål" << "Bokmål";
+ QTest::newRow("nonlatin1") << "Ελληνικά" << "Ελληνικά";
+ QTest::newRow("nonbmp") << u"\U00010000"_s << u"\U00010000"_s;
+
+ // escaped content
+ QTest::newRow("less-than") << "<" << "&lt;";
+ QTest::newRow("greater-than") << ">" << "&gt;";
+ QTest::newRow("ampersand") << "&" << "&amp;";
+ QTest::newRow("quote") << "\"" << "&quot;";
+}
+
+template <typename Execute, typename Transform>
+static void writeCharacters_common(Execute &&exec, Transform &&transform)
+{
+ QFETCH(QString, input);
+ QFETCH(QString, output);
+ QStringView utf16 = input;
+ QByteArray utf8ba = input.toUtf8();
+ QUtf8StringView utf8(utf8ba);
+
+ // may be invalid if input is not Latin1
+ QByteArray l1ba = input.toLatin1();
+ QLatin1StringView l1(l1ba);
+ if (l1 != input)
+ l1 = {};
+
+ auto write = [&](auto input) -> std::optional<QString> {
+ QString result;
+ QXmlStreamWriter writer(&result);
+ writer.writeStartElement("a");
+ exec(writer, input);
+ writer.writeEndElement();
+ if (writer.hasError())
+ return std::nullopt;
+ return result;
+ };
+
+ if (input.isNull() != output.isNull()) {
+ // error
+ QCOMPARE(write(utf16), std::nullopt);
+ QCOMPARE(write(utf8), std::nullopt);
+ if (!l1.isEmpty())
+ QCOMPARE(write(l1), std::nullopt);
+ } else {
+ output = transform(output);
+ QCOMPARE(write(utf16), output);
+ QCOMPARE(write(utf8), output);
+ if (!l1.isEmpty())
+ QCOMPARE(write(l1), output);
+ }
+}
+
+void tst_QXmlStream::writeCharacters_data() const
+{
+ writeCharacters_data_common();
+ QTest::newRow("tab") << "\t" << "\t";
+ QTest::newRow("newline") << "\n" << "\n";
+ QTest::newRow("carriage-return") << "\r" << "\r";
+}
+
+void tst_QXmlStream::writeCharacters() const
+{
+ auto exec = [](QXmlStreamWriter &writer, auto input) {
+ writer.writeCharacters(input);
+ };
+ auto transform = [](auto output) { return "<a>" + output + "</a>"; };
+ writeCharacters_common(exec, transform);
+}
+
+void tst_QXmlStream::writeAttribute_data() const
+{
+ writeCharacters_data_common();
+ QTest::newRow("tab") << "\t" << "&#9;";
+ QTest::newRow("newline") << "\n" << "&#10;";
+ QTest::newRow("carriage-return") << "\r" << "&#13;";
+}
+
+void tst_QXmlStream::writeAttribute() const
+{
+ auto exec = [](QXmlStreamWriter &writer, auto input) {
+ writer.writeAttribute("b", input);
+ };
+ auto transform = [](auto output) { return "<a b=\"" + output + "\"/>"; };
+ writeCharacters_common(exec, transform);
+}
+
+#include "../../io/qurlinternal/utf8data.cpp"
+void tst_QXmlStream::writeBadCharactersUtf8_data() const
+{
+ QTest::addColumn<QByteArray>("input");
+ loadInvalidUtf8Rows();
+}
+
+void tst_QXmlStream::writeBadCharactersUtf8() const
+{
+ QFETCH(QByteArray, input);
+ QString target;
+ QXmlStreamWriter writer(&target);
+ writer.writeTextElement("a", QUtf8StringView(input));
+ QVERIFY(writer.hasError());
+}
+
+void tst_QXmlStream::writeBadCharactersUtf16_data() const
+{
+ QTest::addColumn<QString>("input");
+ QTest::addRow("low-surrogate") << u"\xdc00"_s;
+ QTest::addRow("high-surrogate") << u"\xd800"_s;
+ QTest::addRow("inverted-surrogate-pair") << u"\xdc00\xd800"_s;
+ QTest::addRow("high-surrogate+non-surrogate") << u"\xd800z"_s;
+}
+
+void tst_QXmlStream::writeBadCharactersUtf16() const
+{
+ QFETCH(QString, input);
+ QString target;
+ QXmlStreamWriter writer(&target);
+ writer.writeTextElement("a", input);
+ QVERIFY(writer.hasError());
+}
+
void tst_QXmlStream::entitiesAndWhitespace_1() const
{
QXmlStreamReader reader(QLatin1String("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\"><test>&extEnt;</test>"));
@@ -1632,41 +1871,64 @@ void tst_QXmlStream::invalidStringCharacters_data() const
//
}
-static bool isValidSingleTextChar(const ushort c)
+static bool isValidSingleTextChar(char32_t c)
{
- // Conforms to https://www.w3.org/TR/REC-xml/#NT-Char - except for the high range, which is done
- // with surrogates.
+ // Conforms to https://www.w3.org/TR/REC-xml/#NT-Char
// Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
- static const QPair<ushort, ushort> validRanges[] = {
- QPair<ushort, ushort>(0x9, 0xb),
- QPair<ushort, ushort>(0xd, 0xe),
- QPair<ushort, ushort>(0x20, 0xd800),
- QPair<ushort, ushort>(0xe000, 0xfffe)
+ constexpr struct { char32_t lo, hi; } validRanges[] = {
+ {0x9, 0xA},
+ {0xD, 0xD},
+ {0x20, 0xD7ff},
+ {0xE000, 0xFFFD},
+ {0x1'0000, 0x10'FFFF},
};
- for (const QPair<ushort, ushort> &range : validRanges) {
- if (c >= range.first && c < range.second)
+ for (const auto range : validRanges) {
+ if (c >= range.lo && c <= range.hi)
return true;
}
return false;
}
+void tst_QXmlStream::readBack_data() const
+{
+ QTest::addColumn<int>("plane");
+
+ // Check all 17 Unicode planes. Split into separate executions lest the
+ // test function times out in asan builds.
+
+ for (int i = 0; i < 17; ++i)
+ QTest::addRow("plane-%02d", i) << i;
+}
+
void tst_QXmlStream::readBack() const
{
- for (ushort c = 0; c < std::numeric_limits<ushort>::max(); ++c) {
- QBuffer buffer;
+ QFETCH(const int, plane);
+
+ constexpr qsizetype MaxChunkSizeWhenEncoding = 512; // from qxmlstream.cpp
+ QBuffer buffer;
+ QString text = QString(513, 'a'); // one longer than the internal conversion buffer
+
+ for (char16_t i = 0; i < (std::numeric_limits<char16_t>::max)(); ++i) {
+
+ const char32_t c = (plane << 16) + i;
+
+ // end chunk in invalid character, split surrogates:
+ const auto pair = QChar::fromUcs4(c);
+ text.resize(MaxChunkSizeWhenEncoding + 1 - pair.size());
+ text += pair;
- QVERIFY(buffer.open(QIODevice::WriteOnly));
+ QVERIFY(buffer.open(QIODevice::WriteOnly|QIODevice::Truncate));
QXmlStreamWriter writer(&buffer);
writer.writeStartDocument();
- writer.writeTextElement("a", QString(QChar(c)));
+ writer.writeTextElement("a", text);
writer.writeEndDocument();
buffer.close();
- if (writer.hasError()) {
- QVERIFY2(!isValidSingleTextChar(c), QByteArray::number(c));
+ if (!isValidSingleTextChar(c)) {
+ QVERIFY2(writer.hasError(), QByteArray::number(c));
} else {
- QVERIFY2(isValidSingleTextChar(c), QByteArray::number(c));
+ QVERIFY2(!writer.hasError(), QByteArray::number(c));
QVERIFY(buffer.open(QIODevice::ReadOnly));
QXmlStreamReader reader(&buffer);
do {
@@ -1688,6 +1950,22 @@ void tst_QXmlStream::roundTrip_data() const
"<child xmlns:unknown=\"http://mydomain\">Text</child>"
"</father>"
"</root>\n";
+
+ // When a namespace is introduced by an attribute of an element,
+ // that element can exercise the namespace in its tag.
+ // This used (QTBUG-75456) to lead to the namespace definition
+ // being wrongly duplicated, with a new name.
+ QTest::newRow("QTBUG-75456") <<
+ "<?xml version=\"1.0\"?>"
+ "<abc:root xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:abc=\"ns1\">"
+ "<abc:parent>"
+ "<abc:child xmlns:unknown=\"http://mydomain\">Text</abc:child>"
+ "</abc:parent>"
+ "<def:parent xmlns:def=\"ns2\" id=\"test\">"
+ "<def:child id=\"Timmy\">More text</def:child>"
+ "<def:child id=\"Jimmy\">Even more text</def:child>"
+ "</def:parent>"
+ "</abc:root>\n";
}
void tst_QXmlStream::entityExpansionLimit() const
@@ -1747,5 +2025,126 @@ void tst_QXmlStream::roundTrip() const
QCOMPARE(out, in);
}
+void tst_QXmlStream::test_fastScanName_data() const
+{
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QXmlStreamReader::Error>("errorType");
+
+ // 4096 is the limit in QXmlStreamReaderPrivate::fastScanName()
+
+ QByteArray arr = "<a:" + QByteArray("b").repeated(4096 - 1);
+ QTest::newRow("data1") << arr << QXmlStreamReader::PrematureEndOfDocumentError;
+
+ arr = "<a:" + QByteArray("b").repeated(4096);
+ QTest::newRow("data2") << arr << QXmlStreamReader::NotWellFormedError;
+
+ arr = "<" + QByteArray("a").repeated(4000) + ":" + QByteArray("b").repeated(96);
+ QTest::newRow("data3") << arr << QXmlStreamReader::PrematureEndOfDocumentError;
+
+ arr = "<" + QByteArray("a").repeated(4000) + ":" + QByteArray("b").repeated(96 + 1);
+ QTest::newRow("data4") << arr << QXmlStreamReader::NotWellFormedError;
+
+ arr = "<" + QByteArray("a").repeated(4000 + 1) + ":" + QByteArray("b").repeated(96);
+ QTest::newRow("data5") << arr << QXmlStreamReader::NotWellFormedError;
+}
+
+void tst_QXmlStream::test_fastScanName() const
+{
+ QFETCH(QByteArray, data);
+ QFETCH(QXmlStreamReader::Error, errorType);
+
+ QXmlStreamReader reader(data);
+ QXmlStreamReader::TokenType tokenType;
+ while (!reader.atEnd())
+ tokenType = reader.readNext();
+
+ QCOMPARE(tokenType, QXmlStreamReader::Invalid);
+ QCOMPARE(reader.error(), errorType);
+}
+
+void tst_QXmlStream::tokenErrorHandling_data() const
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QXmlStreamReader::Error>("expectedError");
+ QTest::addColumn<QString>("errorKeyWord");
+
+ constexpr auto invalid = QXmlStreamReader::Error::UnexpectedElementError;
+ constexpr auto valid = QXmlStreamReader::Error::NoError;
+ QTest::newRow("DtdInBody") << "dtdInBody.xml" << invalid << "DTD";
+ QTest::newRow("multipleDTD") << "multipleDtd.xml" << invalid << "second DTD";
+ QTest::newRow("wellFormed") << "wellFormed.xml" << valid << "";
+}
+
+void tst_QXmlStream::tokenErrorHandling() const
+{
+ QFETCH(const QString, fileName);
+ QFETCH(const QXmlStreamReader::Error, expectedError);
+ QFETCH(const QString, errorKeyWord);
+
+ const QDir dir(QFINDTESTDATA("tokenError"));
+ QFile file(dir.absoluteFilePath(fileName));
+
+ // Cross-compiling: Files may not be found when running test standalone
+ // QSKIP in that case, because the tested functionality is platform independent.
+ if (!file.exists())
+ QSKIP(QObject::tr("Testfile %1 not found.").arg(fileName).toUtf8().constData());
+
+ QVERIFY(file.open(QIODevice::ReadOnly));
+ QXmlStreamReader reader(&file);
+ while (!reader.atEnd())
+ reader.readNext();
+
+ QCOMPARE(reader.error(), expectedError);
+ if (expectedError != QXmlStreamReader::Error::NoError)
+ QVERIFY(reader.errorString().contains(errorKeyWord));
+}
+
+void tst_QXmlStream::checkStreamNotationDeclarations() const
+{
+ QString fileName("12.xml");
+ const QDir dir(QFINDTESTDATA("data"));
+ QFile file(dir.absoluteFilePath(fileName));
+ if (!file.exists())
+ QSKIP(QObject::tr("Testfile %1 not found.").arg(fileName).toUtf8().constData());
+ QVERIFY(file.open(QIODevice::ReadOnly));
+ QXmlStreamReader reader(&file);
+ while (!reader.atEnd())
+ reader.readNext();
+
+ QVERIFY(!reader.hasError());
+ QXmlStreamNotationDeclaration notation1, notation2, notation3;
+ QT_TEST_EQUALITY_OPS(notation1, notation2, true);
+ const auto notationDeclarations = reader.notationDeclarations();
+ if (notationDeclarations.count() >= 2) {
+ notation1 = notationDeclarations.at(0);
+ notation2 = notationDeclarations.at(1);
+ notation3 = notationDeclarations.at(1);
+ }
+ QT_TEST_EQUALITY_OPS(notation1, notation2, false);
+ QT_TEST_EQUALITY_OPS(notation3, notation2, true);
+}
+
+void tst_QXmlStream::checkStreamEntityDeclarations() const
+{
+ QString fileName("5.xml");
+ const QDir dir(QFINDTESTDATA("data"));
+ QFile file(dir.absoluteFilePath(fileName));
+ if (!file.exists())
+ QSKIP(QObject::tr("Testfile %1 not found.").arg(fileName).toUtf8().constData());
+ QVERIFY(file.open(QIODevice::ReadOnly));
+ QXmlStreamReader reader(&file);
+ while (!reader.atEnd())
+ reader.readNext();
+
+ QVERIFY(!reader.hasError());
+ QXmlStreamEntityDeclaration entity;
+ QT_TEST_EQUALITY_OPS(entity, QXmlStreamEntityDeclaration(), true);
+
+ const auto entityDeclarations = reader.entityDeclarations();
+ if (entityDeclarations.count() >= 2) {
+ entity = entityDeclarations.at(1);
+ QT_TEST_EQUALITY_OPS(entityDeclarations.at(0), entityDeclarations.at(1), false);
+ QT_TEST_EQUALITY_OPS(entity, entityDeclarations.at(1), true);
+ }
+}
#include "tst_qxmlstream.moc"
-// vim: et:ts=4:sw=4:sts=4
diff --git a/tests/auto/corelib/text/CMakeLists.txt b/tests/auto/corelib/text/CMakeLists.txt
index 9b80e43bc6..099f0e7eef 100644
--- a/tests/auto/corelib/text/CMakeLists.txt
+++ b/tests/auto/corelib/text/CMakeLists.txt
@@ -1,7 +1,9 @@
-# Generated from text.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qanystringview)
add_subdirectory(qbytearray)
+add_subdirectory(qbytearray_large)
add_subdirectory(qbytearrayapisymmetry)
add_subdirectory(qbytearraylist)
add_subdirectory(qbytearraymatcher)
@@ -9,7 +11,8 @@ add_subdirectory(qbytearrayview)
add_subdirectory(qbytedatabuffer)
add_subdirectory(qchar)
add_subdirectory(qcollator)
-add_subdirectory(qlatin1string)
+add_subdirectory(qlatin1stringmatcher)
+add_subdirectory(qlatin1stringview)
add_subdirectory(qregularexpression)
add_subdirectory(qstring)
add_subdirectory(qstring_no_cast_from_bytearray)
@@ -23,7 +26,4 @@ add_subdirectory(qstringtokenizer)
add_subdirectory(qstringview)
add_subdirectory(qtextboundaryfinder)
add_subdirectory(qunicodetools)
-# QTBUG-87414 # special case
-if(NOT ANDROID)
- add_subdirectory(qlocale)
-endif()
+add_subdirectory(qlocale)
diff --git a/tests/auto/corelib/text/qanystringview/CMakeLists.txt b/tests/auto/corelib/text/qanystringview/CMakeLists.txt
index 6a01874c5d..96837dadf6 100644
--- a/tests/auto/corelib/text/qanystringview/CMakeLists.txt
+++ b/tests/auto/corelib/text/qanystringview/CMakeLists.txt
@@ -1,10 +1,22 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qstringview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qanystringview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qanystringview
SOURCES
tst_qanystringview.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::TestPrivate
)
## Scopes:
diff --git a/tests/auto/corelib/text/qanystringview/tst_qanystringview.cpp b/tests/auto/corelib/text/qanystringview/tst_qanystringview.cpp
index 73dc02b082..0eaadb870c 100644
--- a/tests/auto/corelib/text/qanystringview/tst_qanystringview.cpp
+++ b/tests/auto/corelib/text/qanystringview/tst_qanystringview.cpp
@@ -1,37 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QAnyStringView>
#include <QChar>
+#include <QDebug>
#include <QList>
#include <QString>
#include <QStringBuilder>
#include <QVarLengthArray>
+#if QT_CONFIG(cpp_winrt)
+# include <private/qt_winrtbase_p.h>
+#endif
+#include <private/qxmlstream_p.h>
+#include <private/qcomparisontesthelper_p.h>
#include <QTest>
@@ -67,6 +48,16 @@
# define ONLY_WIN(expr) QSKIP("This is a Windows-only test")
#endif
+#ifdef __cpp_impl_three_way_comparison
+# define ONLY_3WAY(expr) expr
+#else
+# define ONLY_3WAY(expr) \
+ QSKIP("This test requires C++20 spaceship operator (<=>) " \
+ "support enabled in the standard library.")
+#endif
+
+using namespace Qt::StringLiterals;
+
template <typename T>
constexpr inline bool CanConvert = std::is_convertible_v<T, QAnyStringView>;
@@ -74,6 +65,16 @@ static_assert(CanConvert<QLatin1String>);
static_assert(CanConvert<const char*>);
static_assert(CanConvert<QByteArray>);
+template <typename T>
+struct ImplicitlyConvertibleTo
+{
+ operator T() const;
+};
+
+static_assert(CanConvert<ImplicitlyConvertibleTo<QString>>);
+static_assert(CanConvert<ImplicitlyConvertibleTo<QByteArray>>);
+static_assert(!CanConvert<ImplicitlyConvertibleTo<QLatin1StringView>>);
+
// QAnyStringView qchar_does_not_compile() { return QAnyStringView(QChar('a')); }
// QAnyStringView qlatin1string_does_not_compile() { return QAnyStringView(QLatin1String("a")); }
// QAnyStringView const_char_star_does_not_compile() { return QAnyStringView("a"); }
@@ -170,6 +171,8 @@ static_assert(CanConvert<std::array<char16_t, 123>>);
static_assert(!CanConvert<std::deque<char16_t>>);
static_assert(!CanConvert<std::list<char16_t>>);
+static_assert(CanConvert<QtPrivate::XmlStringRef>);
+
//
// char32_t
//
@@ -238,6 +241,81 @@ static_assert(!CanConvert<std::list<wchar_t>>);
static_assert(CanConvert<QStringBuilder<QString, QString>>);
+#if QT_CONFIG(cpp_winrt)
+
+//
+// winrt::hstring (QTBUG-111886)
+//
+
+static_assert(CanConvert< winrt::hstring >);
+static_assert(CanConvert<const winrt::hstring >);
+static_assert(CanConvert< winrt::hstring&>);
+static_assert(CanConvert<const winrt::hstring&>);
+
+#endif // QT_CONFIG(cpp_winrt)
+
+// In bootstrapped build and in Qt 7+, two lower bits of size() are used as a
+// mask, so check that it is handled correctly, and the mask does not break the
+// actual size
+template <typename Char> struct SampleStrings
+{
+ static constexpr char emptyString[] = "";
+ static constexpr char oneChar[] = "a";
+ static constexpr char twoChars[] = "ab";
+ static constexpr char threeChars[] = "abc";
+ static constexpr char regularString[] = "Hello World!";
+ static constexpr char regularLongString[] = R"(Lorem ipsum dolor sit amet, consectetur
+adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi
+ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
+occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim
+id est laborum.)";
+ static constexpr char stringWithNulls[] = "Hello\0World\0!";
+ static constexpr qsizetype stringWithNullsLength = std::size(stringWithNulls) -1;
+};
+
+template <> struct SampleStrings<char16_t>
+{
+ static constexpr char16_t emptyString[] = u"";
+ static constexpr char16_t oneChar[] = u"a";
+ static constexpr char16_t twoChars[] = u"ab";
+ static constexpr char16_t threeChars[] = u"abc";
+ static constexpr char16_t regularString[] = u"Hello World!";
+ static constexpr char16_t regularLongString[] = uR"(Lorem ipsum dolor sit amet, consectetur
+adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
+aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi
+ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in
+voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
+occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim
+id est laborum.)";
+ static constexpr char16_t stringWithNulls[] = u"Hello\0World\0!";
+ static constexpr qsizetype stringWithNullsLength = std::size(stringWithNulls) -1;
+};
+
+template <> struct SampleStrings<QChar>
+{
+ static constexpr QChar emptyString[] = { {} }; // this one is easy
+ static const QChar *const oneChar;
+ static const QChar *const twoChars;
+ static const QChar *const threeChars;
+ static const QChar *const regularString;
+ static const QChar *const regularLongString;
+ static const QChar *const stringWithNulls;
+ static constexpr qsizetype stringWithNullsLength = SampleStrings<char16_t>::stringWithNullsLength;
+};
+const QChar *const SampleStrings<QChar>::oneChar =
+ reinterpret_cast<const QChar *>(SampleStrings<char16_t>::oneChar);
+const QChar *const SampleStrings<QChar>::twoChars =
+ reinterpret_cast<const QChar *>(SampleStrings<char16_t>::twoChars);
+const QChar *const SampleStrings<QChar>::threeChars =
+ reinterpret_cast<const QChar *>(SampleStrings<char16_t>::threeChars);
+const QChar *const SampleStrings<QChar>::regularString =
+ reinterpret_cast<const QChar *>(SampleStrings<char16_t>::regularString);
+const QChar *const SampleStrings<QChar>::regularLongString =
+ reinterpret_cast<const QChar *>(SampleStrings<char16_t>::regularLongString);
+const QChar *const SampleStrings<QChar>::stringWithNulls =
+ reinterpret_cast<const QChar *>(SampleStrings<char16_t>::stringWithNulls);
class tst_QAnyStringView : public QObject
{
@@ -246,9 +324,14 @@ class tst_QAnyStringView : public QObject
private Q_SLOTS:
void constExpr() const;
void basics() const;
+ void debug() const;
+ void asciiLiteralIsLatin1() const;
void fromQString() const { fromQStringOrByteArray<QString>(); }
void fromQByteArray() const { fromQStringOrByteArray<QByteArray>(); }
+ void fromQStringView() const { fromQStringOrByteArray<QStringView>(); }
+ void fromQUtf8StringView() const { fromQStringOrByteArray<QUtf8StringView>(); }
+ void fromQLatin1StringView() const { fromQStringOrByteArray<QLatin1StringView>(); }
void fromCharArray() const { fromArray<char>(); }
void fromChar8Array() const { ONLY_IF_CHAR_8_T(fromArray<char8_t>()); }
@@ -276,29 +359,12 @@ private Q_SLOTS:
void fromChar16TStar() const { fromLiteral(u"Hello, World!"); }
void fromWCharTStar() const { ONLY_WIN(fromLiteral(L"Hello, World!")); }
- void fromQCharRange() const
- {
- const QChar str[] = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!' };
- fromRange(std::begin(str), std::end(str));
- }
-
- void fromUShortRange() const
- {
- const ushort str[] = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!' };
- fromRange(std::begin(str), std::end(str));
- }
-
- void fromChar16TRange() const
- {
- const char16_t str[] = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!' };
- fromRange(std::begin(str), std::end(str));
- }
-
- void fromWCharTRange() const
- {
- [[maybe_unused]] const wchar_t str[] = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!' };
- ONLY_WIN(fromRange(std::begin(str), std::end(str)));
- }
+ void fromCharRange() const { fromRange<char>(); }
+ void fromChar8TRange() const { ONLY_IF_CHAR_8_T(fromRange<char8_t>()); }
+ void fromQCharRange() const { fromRange<QChar>(); }
+ void fromUShortRange() const { fromRange<ushort>(); }
+ void fromChar16TRange() const { fromRange<char16_t>(); }
+ void fromWCharTRange() const { ONLY_WIN(fromRange<wchar_t>()); }
// std::basic_string
void fromStdStringChar() const { fromStdString<char>(); }
@@ -311,8 +377,10 @@ private Q_SLOTS:
void fromChar16TContainers() const { fromContainers<char16_t>(); }
void fromWCharTContainers() const { ONLY_WIN(fromContainers<wchar_t>()); }
- void fromQStringBuilder_QString_QString() const { fromQStringBuilder(u"1"_qs % u"2"_qs, u"12"); }
+ void fromQStringBuilder_QString_QString() const { fromQStringBuilder(u"1"_s % u"2"_s, u"12"); }
+ void comparisonCompiles();
+ void comparison_data();
void comparison();
private:
@@ -325,7 +393,7 @@ private:
template <typename Char>
void fromLiteral(const Char *arg) const;
template <typename Char>
- void fromRange(const Char *first, const Char *last) const;
+ void fromRange() const;
template <typename Char, typename Container>
void fromContainer() const;
template <typename Char>
@@ -431,6 +499,100 @@ void tst_QAnyStringView::basics() const
QVERIFY(!(sv2 != sv1));
}
+void tst_QAnyStringView::debug() const
+{
+ #ifdef QT_SUPPORTS_IS_CONSTANT_EVALUATED
+ # define MAYBE_L1(str) str "_L1"
+ # define VERIFY_L1(s) QVERIFY(s.isLatin1())
+ #else
+ # define MAYBE_L1(str) "u8" str
+ # define VERIFY_L1(s) QVERIFY(s.isUtf8())
+ #endif
+ #define CHECK1(s, mod, expected) do { \
+ QString result; \
+ QDebug(&result) mod << "X"_L1 << s << "Y"_L1; \
+ /* QDebug appends an eager ' ', so trim before comparison */ \
+ /* We use X and Y affixes so we can still check spacing */ \
+ /* around the QAnyStringView itself. */ \
+ QCOMPARE(result.trimmed(), expected); \
+ } while (false)
+ #define CHECK(init, esq, eq, es, e) do { \
+ QAnyStringView s = init; \
+ CHECK1(s, , esq); \
+ CHECK1(s, .nospace(), eq); \
+ CHECK1(s, .noquote(), es); \
+ CHECK1(s, .nospace().noquote(), e); \
+ } while (false)
+
+ CHECK(nullptr,
+ R"("X" u8"" "Y")",
+ R"("X"u8"""Y")",
+ R"(X Y)",
+ R"(XY)");
+ CHECK(QLatin1StringView(nullptr),
+ R"("X" ""_L1 "Y")",
+ R"("X"""_L1"Y")",
+ R"(X Y)",
+ R"(XY)");
+ CHECK(QUtf8StringView(nullptr),
+ R"("X" u8"" "Y")",
+ R"("X"u8"""Y")",
+ R"(X Y)",
+ R"(XY)");
+ CHECK(QStringView(nullptr),
+ R"("X" u"" "Y")",
+ R"("X"u"""Y")",
+ R"(X Y)",
+ R"(XY)");
+ {
+ constexpr QAnyStringView asv = "hello";
+ VERIFY_L1(asv); // ### fails when asv isn't constexpr
+ CHECK(asv,
+ R"("X" )" MAYBE_L1(R"("hello")") R"( "Y")",
+ R"("X")" MAYBE_L1(R"("hello")") R"("Y")",
+ R"(X hello Y)",
+ R"(XhelloY)");
+ }
+ CHECK(u8"hällo",
+ R"("X" u8"h\xC3\xA4llo" "Y")",
+ R"("X"u8"h\xC3\xA4llo""Y")",
+ R"(X hällo Y)",
+ R"(XhälloY)");
+ CHECK(u"hällo",
+ R"("X" u"hällo" "Y")",
+ R"("X"u"hällo""Y")",
+ R"(X hällo Y)",
+ R"(XhälloY)");
+
+ #undef CHECK
+ #undef CHECK1
+ #undef VERIFY_L1
+ #undef MAYBE_L1
+}
+
+void tst_QAnyStringView::asciiLiteralIsLatin1() const
+{
+ if constexpr (QAnyStringView::detects_US_ASCII_at_compile_time) {
+ constexpr bool asciiCstringIsLatin1 = QAnyStringView("Hello, World").isLatin1();
+ QVERIFY(asciiCstringIsLatin1);
+ constexpr bool asciiUtf8stringIsLatin1 = QAnyStringView(u8"Hello, World").isLatin1();
+ QVERIFY(asciiUtf8stringIsLatin1);
+ constexpr bool utf8StringIsNotLatin1 = !QAnyStringView(u8"Tørrfisk").isLatin1();
+ QVERIFY(utf8StringIsNotLatin1);
+ constexpr bool asciiCstringArrayIsLatin1 =
+ QAnyStringView::fromArray("Hello, World").isLatin1();
+ QVERIFY(asciiCstringArrayIsLatin1);
+ constexpr bool asciiUtfstringArrayIsLatin1 =
+ QAnyStringView::fromArray(u8"Hello, World").isLatin1();
+ QVERIFY(asciiUtfstringArrayIsLatin1);
+ constexpr bool utf8StringArrayIsNotLatin1 =
+ !QAnyStringView::fromArray(u8"Tørrfisk").isLatin1();
+ QVERIFY(utf8StringArrayIsNotLatin1);
+ } else {
+ QSKIP("Compile-detection of US-ASCII strings not possible with this compiler");
+ }
+}
+
template <typename StringBuilder>
void tst_QAnyStringView::fromQStringBuilder(StringBuilder &&sb, QStringView expected) const
{
@@ -458,18 +620,37 @@ void tst_QAnyStringView::fromArray() const
QCOMPARE(sv2.back(), u'c');
}
+
template <typename QStringOrByteArray>
void tst_QAnyStringView::fromQStringOrByteArray() const
{
+ using Char = std::remove_cv_t<typename QStringOrByteArray::value_type>;
+ using Strings = SampleStrings<Char>;
+
QStringOrByteArray null;
- QStringOrByteArray empty = "";
+ QStringOrByteArray empty(Strings::emptyString);
QVERIFY( QAnyStringView(null).isNull());
QVERIFY( QAnyStringView(null).isEmpty());
QVERIFY( QAnyStringView(empty).isEmpty());
QVERIFY(!QAnyStringView(empty).isNull());
- conversion_tests(QStringOrByteArray("Hello World!"));
+ conversion_tests(QStringOrByteArray(Strings::oneChar));
+ if (QTest::currentTestFailed())
+ return;
+ conversion_tests(QStringOrByteArray(Strings::twoChars));
+ if (QTest::currentTestFailed())
+ return;
+ conversion_tests(QStringOrByteArray(Strings::threeChars));
+ if (QTest::currentTestFailed())
+ return;
+ conversion_tests(QStringOrByteArray(Strings::regularString));
+ if (QTest::currentTestFailed())
+ return;
+ conversion_tests(QStringOrByteArray(Strings::regularLongString));
+ if (QTest::currentTestFailed())
+ return;
+ conversion_tests(QStringOrByteArray(Strings::stringWithNulls, Strings::stringWithNullsLength));
}
template <typename Char>
@@ -493,27 +674,48 @@ void tst_QAnyStringView::fromLiteral(const Char *arg) const
}
template <typename Char>
-void tst_QAnyStringView::fromRange(const Char *first, const Char *last) const
+void tst_QAnyStringView::fromRange() const
{
+ auto doTest = [](const Char *first, const Char *last) {
+ QCOMPARE(QAnyStringView(first, first).size(), 0);
+ QCOMPARE(static_cast<const void*>(QAnyStringView(first, first).data()),
+ static_cast<const void*>(first));
+
+ const auto sv = QAnyStringView(first, last);
+ QCOMPARE(sv.size(), last - first);
+ QCOMPARE(static_cast<const void*>(sv.data()),
+ static_cast<const void*>(first));
+
+ // can't call conversion_tests() here, as it requires a single object
+ };
const Char *null = nullptr;
+ using RealChar = std::conditional_t<sizeof(Char) == 1, char, char16_t>;
+ using Strings = SampleStrings<RealChar>;
+
QCOMPARE(QAnyStringView(null, null).size(), 0);
QCOMPARE(QAnyStringView(null, null).data(), nullptr);
- QCOMPARE(QAnyStringView(first, first).size(), 0);
- QCOMPARE(static_cast<const void*>(QAnyStringView(first, first).data()),
- static_cast<const void*>(first));
- const auto sv = QAnyStringView(first, last);
- QCOMPARE(sv.size(), last - first);
- QCOMPARE(static_cast<const void*>(sv.data()),
- static_cast<const void*>(first));
+ doTest(reinterpret_cast<const Char *>(std::begin(Strings::regularString)),
+ reinterpret_cast<const Char *>(std::end(Strings::regularString)));
+ if (QTest::currentTestFailed())
+ return;
- // can't call conversion_tests() here, as it requires a single object
+ doTest(reinterpret_cast<const Char *>(std::begin(Strings::regularLongString)),
+ reinterpret_cast<const Char *>(std::end(Strings::regularLongString)));
+ if (QTest::currentTestFailed())
+ return;
+
+ doTest(reinterpret_cast<const Char *>(std::begin(Strings::stringWithNulls)),
+ reinterpret_cast<const Char *>(std::end(Strings::stringWithNulls)));
+ if (QTest::currentTestFailed())
+ return;
}
template <typename Char, typename Container>
void tst_QAnyStringView::fromContainer() const
{
const std::string s = "Hello World!";
+ const std::string n(SampleStrings<char>::stringWithNulls, SampleStrings<char>::stringWithNullsLength);
Container c;
// unspecified whether empty containers make null QAnyStringViews
@@ -521,6 +723,13 @@ void tst_QAnyStringView::fromContainer() const
std::copy(s.begin(), s.end(), std::back_inserter(c));
conversion_tests(std::move(c));
+ if (QTest::currentTestFailed())
+ return;
+
+ // repeat with nulls
+ c = {};
+ std::copy(n.begin(), n.end(), std::back_inserter(c));
+ conversion_tests(std::move(c));
}
template <typename Char>
@@ -612,22 +821,97 @@ void tst_QAnyStringView::conversion_tests(String string) const
}
}
+void tst_QAnyStringView::comparisonCompiles()
+{
+ QTestPrivate::testAllComparisonOperatorsCompile<QAnyStringView>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QAnyStringView, char16_t>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QAnyStringView, QChar>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QAnyStringView, const char16_t *>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QAnyStringView, const char *>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QAnyStringView, QByteArray>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QAnyStringView, QByteArrayView>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QAnyStringView, QString>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QAnyStringView, QStringView>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QAnyStringView, QUtf8StringView>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QAnyStringView, QLatin1StringView>();
+}
+
+void tst_QAnyStringView::comparison_data()
+{
+ QTest::addColumn<QAnyStringView>("lhs");
+ QTest::addColumn<QAnyStringView>("rhs");
+ QTest::addColumn<int>("csr"); // case sensitive result
+ QTest::addColumn<int>("cir"); // case insensitive result
+
+ auto row = [&](QAnyStringView l, QAnyStringView r, int csr, int cir) {
+ QTest::addRow("%s_vs_%s", qPrintable(l.toString()), qPrintable(r.toString()))
+ << l << r << csr << cir;
+ };
+ row(u"aa", u"aa", 0, 0);
+ row(u"aa", u"AA", 1, 0);
+ row(u"ab", u"b", -1, -1);
+ row(u"ab", u"aBb", 1, -1);
+ row(u"ab", u"B", 1, -1);
+}
+
+static int sign(int x)
+{
+ return x == 0 ? 0 : (x < 0 ? -1 : 1);
+}
+
void tst_QAnyStringView::comparison()
{
- const QAnyStringView aa = u"aa";
- const QAnyStringView upperAa = u"AA";
- const QAnyStringView bb = u"bb";
-
- QVERIFY(aa == aa);
- QVERIFY(aa != bb);
- QVERIFY(aa < bb);
- QVERIFY(bb > aa);
-
- QCOMPARE(QAnyStringView::compare(aa, aa), 0);
- QVERIFY(QAnyStringView::compare(aa, upperAa) != 0);
- QCOMPARE(QAnyStringView::compare(aa, upperAa, Qt::CaseInsensitive), 0);
- QVERIFY(QAnyStringView::compare(aa, bb) < 0);
- QVERIFY(QAnyStringView::compare(bb, aa) > 0);
+ QFETCH(const QAnyStringView, lhs);
+ QFETCH(const QAnyStringView, rhs);
+ QFETCH(const int, csr);
+ QFETCH(const int, cir);
+
+ QCOMPARE(sign(QAnyStringView::compare(lhs, rhs)), csr);
+ QCOMPARE(sign(QAnyStringView::compare(lhs, rhs, Qt::CaseInsensitive)), cir);
+
+ const Qt::strong_ordering ordering = [&csr] {
+ if (csr == 0)
+ return Qt::strong_ordering::equal;
+ else if (csr < 0)
+ return Qt::strong_ordering::less;
+ else
+ return Qt::strong_ordering::greater;
+ }();
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs, ordering);
+
+ const QString rhs_str = rhs.toString();
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs_str, ordering);
+
+ const QStringView rhs_sv(rhs_str);
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs_sv, ordering);
+
+ if (!rhs_str.contains(QChar(u'\0'))) {
+ const char16_t *utfData = reinterpret_cast<const char16_t*>(rhs_str.constData());
+ QT_TEST_ALL_COMPARISON_OPS(lhs, utfData, ordering);
+ }
+
+ if (rhs_str.size() == 1) {
+ const QChar ch = rhs_str.front();
+ QT_TEST_ALL_COMPARISON_OPS(lhs, ch, ordering);
+ }
+
+ if (rhs.isLatin1()) {
+ const QLatin1StringView rhs_l1 = rhs.asLatin1StringView();
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs_l1, ordering);
+ }
+
+ const QByteArray rhs_u8 = rhs_str.toUtf8();
+
+ const QUtf8StringView rhs_u8sv(rhs_u8.data(), rhs_u8.size());
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs_u8sv, ordering);
+
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs_u8, ordering);
+ const QByteArrayView rhs_u8view{rhs_u8.begin(), rhs_u8.size()};
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs_u8view, ordering);
+ if (!rhs_str.contains(QChar(u'\0'))) {
+ const char *rhs_u8data = rhs_u8.constData();
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs_u8data, ordering);
+ }
}
QTEST_APPLESS_MAIN(tst_QAnyStringView)
diff --git a/tests/auto/corelib/text/qbytearray/CMakeLists.txt b/tests/auto/corelib/text/qbytearray/CMakeLists.txt
index 36bbef19a5..34307d9d44 100644
--- a/tests/auto/corelib/text/qbytearray/CMakeLists.txt
+++ b/tests/auto/corelib/text/qbytearray/CMakeLists.txt
@@ -1,18 +1,21 @@
-# Generated from qbytearray.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qbytearray Test:
#####################################################################
-# Collect test data
-list(APPEND test_data "rfc3252.txt")
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qbytearray LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
qt_internal_add_test(tst_qbytearray
SOURCES
tst_qbytearray.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
- TESTDATA ${test_data}
)
## Scopes:
@@ -21,20 +24,6 @@ qt_internal_add_test(tst_qbytearray
qt_internal_extend_target(tst_qbytearray CONDITION APPLE
SOURCES
tst_qbytearray_mac.mm
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWFoundation}
)
-
-if(ANDROID OR INTEGRITY)
- # Resources:
- set(testdata_resource_files
- "rfc3252.txt"
- )
-
- qt_internal_add_resource(tst_qbytearray "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
- )
-endif()
diff --git a/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp b/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp
index b0d9f39b3e..81d79da38b 100644
--- a/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp
+++ b/tests/auto/corelib/text/qbytearray/tst_qbytearray.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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) 2022 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -37,6 +12,11 @@
#include "../shared/test_number_shared.h"
+#include <QtCore/q20iterator.h>
+#include <sstream>
+
+using namespace Qt::StringLiterals;
+
class tst_QByteArray : public QObject
{
Q_OBJECT
@@ -48,13 +28,6 @@ private slots:
void swap();
void qChecksum_data();
void qChecksum();
- void qCompress_data();
-#ifndef QT_NO_COMPRESS
- void qCompress();
- void qUncompressCorruptedData_data();
- void qUncompressCorruptedData();
- void qCompressionZeroTermination();
-#endif
void constByteArray();
void leftJustified();
void rightJustified();
@@ -78,14 +51,22 @@ private slots:
void prependExtended_data();
void prependExtended();
void append();
+ void appendFromRawData();
void appendExtended_data();
void appendExtended();
+ void appendEmptyNull();
+ void assign();
+ void assignShared();
+ void assignUsesPrependBuffer();
void insert();
void insertExtended_data();
void insertExtended();
void remove_data();
void remove();
+ void remove_extra();
void removeIf();
+ void erase();
+ void erase_single_arg();
void replace_data();
void replace();
void replaceWithSpecifiedLength();
@@ -99,7 +80,6 @@ private slots:
void blockSizeCalculations();
void resizeAfterFromRawData();
- void appendAfterFromRawData();
void toFromHex_data();
void toFromHex();
void toFromPercentEncoding();
@@ -125,8 +105,9 @@ private slots:
void reserve();
void reserveExtended_data();
void reserveExtended();
- void movablity_data();
- void movablity();
+ void resize();
+ void movability_data();
+ void movability();
void literals();
void userDefinedLiterals();
void toUpperLower_data();
@@ -142,6 +123,8 @@ private slots:
void fill();
void dataPointers();
void truncate();
+ void trimmed_data();
+ void trimmed();
void simplified();
void simplified_data();
void left();
@@ -149,6 +132,7 @@ private slots:
void mid();
void length();
void length_data();
+ void slice() const;
};
static const QByteArray::DataPointer staticStandard = {
@@ -162,6 +146,15 @@ static const QByteArray::DataPointer staticNotNullTerminated = {
4
};
+template <typename String> String detached(String s)
+{
+ if (!s.isNull()) { // detaching loses nullness, but we need to preserve it
+ auto d = s.data();
+ Q_UNUSED(d);
+ }
+ return s;
+}
+
template <class T> const T &verifyZeroTermination(const T &t) { return t; }
QByteArray verifyZeroTermination(const QByteArray &ba)
@@ -174,7 +167,7 @@ QByteArray verifyZeroTermination(const QByteArray &ba)
if (!baDataPtr->isMutable())
return ba;
- int baSize = ba.size();
+ qsizetype baSize = ba.size();
char baTerminator = ba.constData()[baSize];
if ('\0' != baTerminator)
return QString::fromUtf8(
@@ -248,86 +241,13 @@ void tst_QByteArray::qChecksum()
QFETCH(Qt::ChecksumType, standard);
QFETCH(uint, checksum);
- QCOMPARE(data.length(), int(len));
+ QCOMPARE(data.size(), int(len));
if (standard == Qt::ChecksumIso3309) {
QCOMPARE(::qChecksum(QByteArrayView(data.constData(), len)), static_cast<quint16>(checksum));
}
QCOMPARE(::qChecksum(QByteArrayView(data.constData(), len), standard), static_cast<quint16>(checksum));
}
-void tst_QByteArray::qCompress_data()
-{
- QTest::addColumn<QByteArray>("ba");
-
- const int size1 = 1024*1024;
- QByteArray ba1( size1, 0 );
-
- QTest::newRow( "00" ) << QByteArray();
-
- int i;
- for ( i=0; i<size1; i++ )
- ba1[i] = (char)( i / 1024 );
- QTest::newRow( "01" ) << ba1;
-
- for ( i=0; i<size1; i++ )
- ba1[i] = (char)( i % 256 );
- QTest::newRow( "02" ) << ba1;
-
- ba1.fill( 'A' );
- QTest::newRow( "03" ) << ba1;
-
- QFile file( QFINDTESTDATA("rfc3252.txt") );
- QVERIFY( file.open(QIODevice::ReadOnly) );
- QTest::newRow( "04" ) << file.readAll();
-}
-
-#ifndef QT_NO_COMPRESS
-void tst_QByteArray::qCompress()
-{
- QFETCH( QByteArray, ba );
- QByteArray compressed = ::qCompress( ba );
- QTEST( ::qUncompress( compressed ), "ba" );
-}
-
-void tst_QByteArray::qUncompressCorruptedData_data()
-{
- QTest::addColumn<QByteArray>("in");
-
- QTest::newRow("0x00000000") << QByteArray("\x00\x00\x00\x00", 4);
- QTest::newRow("0x000000ff") << QByteArray("\x00\x00\x00\xff", 4);
- QTest::newRow("0x3f000000") << QByteArray("\x3f\x00\x00\x00", 4);
- QTest::newRow("0x3fffffff") << QByteArray("\x3f\xff\xff\xff", 4);
- QTest::newRow("0x7fffff00") << QByteArray("\x7f\xff\xff\x00", 4);
- QTest::newRow("0x7fffffff") << QByteArray("\x7f\xff\xff\xff", 4);
- QTest::newRow("0x80000000") << QByteArray("\x80\x00\x00\x00", 4);
- QTest::newRow("0x800000ff") << QByteArray("\x80\x00\x00\xff", 4);
- QTest::newRow("0xcf000000") << QByteArray("\xcf\x00\x00\x00", 4);
- QTest::newRow("0xcfffffff") << QByteArray("\xcf\xff\xff\xff", 4);
- QTest::newRow("0xffffff00") << QByteArray("\xff\xff\xff\x00", 4);
- QTest::newRow("0xffffffff") << QByteArray("\xff\xff\xff\xff", 4);
-}
-
-// This test is expected to produce some warning messages in the test output.
-void tst_QByteArray::qUncompressCorruptedData()
-{
- QFETCH(QByteArray, in);
-
- QByteArray res;
- res = ::qUncompress(in);
- QCOMPARE(res, QByteArray());
-
- res = ::qUncompress(in + "blah");
- QCOMPARE(res, QByteArray());
-}
-
-void tst_QByteArray::qCompressionZeroTermination()
-{
- QByteArray s = "Hello, I'm a string.";
- QByteArray ba = ::qUncompress(::qCompress(s));
- QCOMPARE(ba.data()[ba.size()], '\0');
- QCOMPARE(ba, s);
-}
-#endif
void tst_QByteArray::constByteArray()
{
@@ -518,7 +438,7 @@ void tst_QByteArray::split()
QFETCH(int, size);
QList<QByteArray> list = sample.split(' ');
- QCOMPARE(list.count(), size);
+ QCOMPARE(list.size(), size);
}
void tst_QByteArray::swap()
@@ -841,7 +761,10 @@ void tst_QByteArray::qstrncpy()
// src == nullptr
QCOMPARE(::qstrncpy(dst.data(), 0, 0), (char*)0);
+ QCOMPARE(*dst.data(), 'b'); // must not have written to dst
QCOMPARE(::qstrncpy(dst.data(), 0, 10), (char*)0);
+ QCOMPARE(*dst.data(), '\0'); // must have written to dst
+ *dst.data() = 'b'; // restore
// valid pointers, but len == 0
QCOMPARE(::qstrncpy(dst.data(), src.data(), 0), dst.data());
@@ -1002,6 +925,20 @@ void tst_QByteArray::append()
}
}
+void tst_QByteArray::appendFromRawData()
+{
+ char rawData[] = "Hello World!";
+ QByteArray ba = QByteArray::fromRawData(rawData, std::size(rawData) - 1);
+
+ QByteArray copy;
+ copy.append(ba);
+ QCOMPARE(copy, ba);
+ // We make an _actual_ copy, because appending a byte array
+ // created with fromRawData() might be optimized to copy the DataPointer,
+ // which means we may point to temporary stack data.
+ QCOMPARE_NE((void *)copy.constData(), (void *)ba.constData());
+}
+
void tst_QByteArray::appendExtended_data()
{
prependExtended_data();
@@ -1026,6 +963,207 @@ void tst_QByteArray::appendExtended()
QCOMPARE(array.size(), 11);
}
+void tst_QByteArray::appendEmptyNull()
+{
+ QByteArray a;
+ QVERIFY(a.isEmpty());
+ QVERIFY(a.isNull());
+
+ QByteArray b("");
+ QVERIFY(b.isEmpty());
+ QVERIFY(!b.isNull());
+
+ // Concatenating a null and an empty-but-not-null byte arrays results in
+ // an empty but not null byte array
+ QByteArray r = a + b;
+ QVERIFY(r.isEmpty());
+ QVERIFY(!r.isNull());
+}
+
+void tst_QByteArray::assign()
+{
+ // QByteArray &assign(QByteArrayView)
+ {
+ QByteArray ba;
+ QByteArray test("data");
+ QCOMPARE(ba.assign(test), test);
+ QCOMPARE(ba.size(), test.size());
+ test = "data\0data";
+ QCOMPARE(ba.assign(test), test);
+ QCOMPARE(ba.size(), test.size());
+ test = "data\0data"_ba;
+ QCOMPARE(ba.assign(test), test);
+ QCOMPARE(ba.size(), test.size());
+ }
+ // QByteArray &assign(qsizetype, char);
+ {
+ QByteArray ba;
+ QByteArray test("ddd");
+ QCOMPARE(ba.assign(3, 'd'), test);
+ QCOMPARE(ba.size(), test.size());
+ test = "xx";
+ QCOMPARE(ba.assign(20, 'd').assign(2, 'x'), test);
+ QCOMPARE(ba.size(), test.size());
+ test = "ddddd";
+ QCOMPARE(ba.assign(0, 'x').assign(5, 'd'), test);
+ QCOMPARE(ba.size(), test.size());
+ test = "\0\0\0"_ba;
+ QCOMPARE(ba.assign(0, 'x').assign(3, '\0'), test);
+ QCOMPARE(ba.size(), test.size());
+ }
+ // QByteArray &assign(InputIterator, InputIterator)
+ {
+ QByteArray ba;
+ QByteArrayView test;
+
+ QList<char> l = {'\0', 'T', 'E', 'S', 'T'};
+ ba.assign(l.begin(), l.end());
+ test = "\0TEST"_ba;
+ QCOMPARE(ba, test);
+ QCOMPARE(ba.size(), test.size());
+
+ const std::byte bytes[] = {std::byte('T'), std::byte(0), std::byte('S'), std::byte('T')};
+ test = QByteArrayView::fromArray(bytes);
+ QCOMPARE(ba.assign(test.begin(), test.end()), test);
+ QCOMPARE(ba.size(), test.size());
+
+ std::stringstream ss;
+ ss << "T " << '\0' << ' ' << "S " << "T ";
+ ba.assign(std::istream_iterator<char>{ss}, std::istream_iterator<char>{});
+ test = "T\0ST"_ba;
+ QCOMPARE(ba, test);
+ QCOMPARE(ba.size(), test.size());
+ }
+ // Test chaining
+ {
+ QByteArray ba;
+ QByteArray test("TTTTT");
+ char arr[] = {'T', 'E', 'S', 'T'};
+ ba.assign(std::begin(arr), std::end(arr)).assign({"Hello World!"}).assign(5, 'T');
+ QCOMPARE(ba, test);
+ QCOMPARE(ba.size(), test.size());
+ test = "DATA";
+ QCOMPARE(ba.assign(300, 'T').assign({"DATA"}), test);
+ QCOMPARE(ba.size(), test.size());
+ test = QByteArray(arr, q20::ssize(arr));
+ QCOMPARE(ba.assign(10, 'c').assign(std::begin(arr), std::end(arr)), test);
+ QCOMPARE(ba.size(), test.size());
+ test = "TTT";
+ QCOMPARE(ba.assign("data").assign(QByteArrayView::fromArray(
+ {std::byte('T'), std::byte('T'), std::byte('T')})), test);
+ QCOMPARE(ba.size(), test.size());
+ test = "\0data";
+ QCOMPARE(ba.assign("data").assign("\0data"), test);
+ QCOMPARE(ba.size(), test.size());
+ }
+}
+
+void tst_QByteArray::assignShared()
+{
+ {
+ QByteArray ba;
+ ba.assign({"DATA"});
+ QVERIFY(ba.isDetached());
+ QCOMPARE(ba, QByteArray("DATA"));
+
+ auto baCopy = ba;
+ QVERIFY(!ba.isDetached());
+ QVERIFY(!baCopy.isDetached());
+ QVERIFY(ba.isSharedWith(baCopy));
+ QVERIFY(baCopy.isSharedWith(ba));
+
+ ba.assign(10, 'D');
+ QVERIFY(ba.isDetached());
+ QVERIFY(baCopy.isDetached());
+ QVERIFY(!ba.isSharedWith(baCopy));
+ QVERIFY(!baCopy.isSharedWith(ba));
+ QCOMPARE(ba, QByteArray("DDDDDDDDDD"));
+ QCOMPARE(baCopy, QByteArray("DATA"));
+ }
+ {
+ QByteArray ba("START");
+ QByteArrayView bav("DATA");
+ QVERIFY(ba.isDetached());
+ QCOMPARE(ba, QByteArray("START"));
+
+ auto copyForwardIt = ba;
+ QVERIFY(!ba.isDetached());
+ QVERIFY(!copyForwardIt.isDetached());
+ QVERIFY(ba.isSharedWith(copyForwardIt));
+ QVERIFY(copyForwardIt.isSharedWith(ba));
+
+ ba.assign(bav.begin(), bav.end());
+ QVERIFY(ba.isDetached());
+ QVERIFY(copyForwardIt.isDetached());
+ QVERIFY(!ba.isSharedWith(copyForwardIt));
+ QVERIFY(!copyForwardIt.isSharedWith(ba));
+ QCOMPARE(ba, QByteArray("DATA"));
+ QCOMPARE(copyForwardIt, QByteArray("START"));
+
+ auto copyInputIt = ba;
+ QVERIFY(!ba.isDetached());
+ QVERIFY(!copyInputIt.isDetached());
+ QVERIFY(ba.isSharedWith(copyInputIt));
+ QVERIFY(copyInputIt.isSharedWith(ba));
+
+ std::stringstream ss("1 2 3 4 5 6 ");
+ ba.assign(std::istream_iterator<char>{ss}, std::istream_iterator<char>{});
+ QVERIFY(ba.isDetached());
+ QVERIFY(copyInputIt.isDetached());
+ QVERIFY(!ba.isSharedWith(copyInputIt));
+ QVERIFY(!copyInputIt.isSharedWith(ba));
+ QCOMPARE(ba, QByteArray("123456"));
+ QCOMPARE(copyInputIt, QByteArray("DATA"));
+ }
+}
+
+void tst_QByteArray::assignUsesPrependBuffer()
+{
+ const auto capBegin = [](const QByteArray &ba) {
+ return ba.begin() - ba.d.freeSpaceAtBegin();
+ };
+ const auto capEnd = [](const QByteArray &ba) {
+ return ba.end() + ba.d.freeSpaceAtEnd();
+ };
+ // QByteArray &assign(QByteArrayView)
+ {
+ QByteArray withFreeSpaceAtBegin;
+ for (int i = 0; i < 100 && withFreeSpaceAtBegin.d.freeSpaceAtBegin() < 2; ++i)
+ withFreeSpaceAtBegin.prepend("data");
+ QCOMPARE_GT(withFreeSpaceAtBegin.d.freeSpaceAtBegin(), 1);
+
+ const auto oldCapBegin = capBegin(withFreeSpaceAtBegin);
+ const auto oldCapEnd = capEnd(withFreeSpaceAtBegin);
+
+ std::string test(withFreeSpaceAtBegin.d.freeSpaceAtBegin(), 'd');
+ withFreeSpaceAtBegin.assign(test);
+
+ QCOMPARE_EQ(withFreeSpaceAtBegin.d.freeSpaceAtBegin(), 0); // we used the prepend buffer
+ QCOMPARE_EQ(capBegin(withFreeSpaceAtBegin), oldCapBegin);
+ QCOMPARE_EQ(capEnd(withFreeSpaceAtBegin), oldCapEnd);
+ QCOMPARE(withFreeSpaceAtBegin, test.data());
+ }
+ // QByteArray &assign(InputIterator, InputIterator)
+ {
+ QByteArray withFreeSpaceAtBegin;
+ for (int i = 0; i < 100 && withFreeSpaceAtBegin.d.freeSpaceAtBegin() < 2; ++i)
+ withFreeSpaceAtBegin.prepend("data");
+ QCOMPARE_GT(withFreeSpaceAtBegin.d.freeSpaceAtBegin(), 1);
+
+ const auto oldCapBegin = capBegin(withFreeSpaceAtBegin);
+ const auto oldCapEnd = capEnd(withFreeSpaceAtBegin);
+
+ std::stringstream ss;
+ for (qsizetype i = 0; i < withFreeSpaceAtBegin.d.freeSpaceAtBegin(); ++i)
+ ss << "d ";
+
+ withFreeSpaceAtBegin.assign(std::istream_iterator<char>{ss}, std::istream_iterator<char>{});
+ QCOMPARE_EQ(withFreeSpaceAtBegin.d.freeSpaceAtBegin(), 0); // we used the prepend buffer
+ QCOMPARE_EQ(capBegin(withFreeSpaceAtBegin), oldCapBegin);
+ QCOMPARE_EQ(capEnd(withFreeSpaceAtBegin), oldCapEnd);
+ }
+}
+
void tst_QByteArray::insert()
{
const char data[] = "data";
@@ -1162,7 +1300,30 @@ void tst_QByteArray::remove()
QFETCH(int, position);
QFETCH(int, length);
QFETCH(QByteArray, expected);
- QCOMPARE(src.remove(position, length), expected);
+ // Test when it's shared
+ QByteArray ba1 = src;
+ QCOMPARE(ba1.remove(position, length), expected);
+
+ // Test when it's not shared
+ QByteArray ba2 = src;
+ ba2.detach();
+ QCOMPARE(ba2.remove(position, length), expected);
+}
+
+void tst_QByteArray::remove_extra()
+{
+ QByteArray ba = "Clock";
+ ba.removeFirst();
+ QCOMPARE(ba, "lock");
+ ba.removeLast();
+ QCOMPARE(ba, "loc");
+ ba.removeAt(ba.indexOf('o'));
+ QCOMPARE(ba, "lc");
+ ba.clear();
+ // No crash on empty byte arrays
+ ba.removeFirst();
+ ba.removeLast();
+ ba.removeAt(2);
}
void tst_QByteArray::removeIf()
@@ -1174,7 +1335,58 @@ void tst_QByteArray::removeIf()
QVERIFY(!a.isDetached());
a = QByteArray("aBcAbC");
+ // Test when it's not shared
+ QVERIFY(a.isDetached());
QCOMPARE(a.removeIf(removeA), QByteArray("BcbC"));
+
+ a = QByteArray("aBcAbC");
+ QByteArray b = a;
+ // Test when it's shared
+ QVERIFY(!b.isDetached());
+ QCOMPARE(b.removeIf(removeA), QByteArray("BcbC"));
+}
+
+void tst_QByteArray::erase()
+{
+ {
+ QByteArray ba = "kittens";
+ auto it = ba.erase(ba.cbegin(), ba.cbegin() + 2);
+ QCOMPARE(ba, "ttens");
+ QCOMPARE(it, ba.cbegin());
+ }
+
+ {
+ QByteArray ba = "kittens";
+ auto it = ba.erase(ba.cbegin(), ba.cend());
+ QCOMPARE(ba, "");
+ QCOMPARE(it, ba.cbegin());
+ QCOMPARE(ba.cbegin(), ba.cend());
+ }
+
+ {
+ QByteArray ba = "kite";
+ auto it = ba.erase(ba.cbegin(), ba.cbegin());
+ // erase() should return an iterator (not const_iterator)
+ *it = 'Z';
+ QCOMPARE(ba, "Zite");
+ QCOMPARE(it, ba.cbegin());
+ }
+}
+
+void tst_QByteArray::erase_single_arg()
+{
+ QByteArray ba = "abcdefg";
+ ba.erase(ba.cend());
+ auto it = ba.erase(ba.cbegin());
+ QCOMPARE_EQ(ba, "bcdefg");
+ QCOMPARE(it, ba.cbegin());
+
+ it = ba.erase(std::prev(ba.end()));
+ QCOMPARE_EQ(ba, "bcdef");
+ QCOMPARE(it, ba.cend());
+
+ it = ba.erase(std::find(ba.begin(), ba.end(), QChar('d')));
+ QCOMPARE(it, ba.begin() + 2);
}
void tst_QByteArray::replace_data()
@@ -1291,7 +1503,7 @@ void tst_QByteArray::number_double_data()
QTest::addRow("%s, format '%c', precision %d", title, datum.f, datum.p)
<< datum.d << datum.f << datum.p << ba;
if (datum.f != 'f') { // Also test uppercase format
- datum.f = toupper(datum.f);
+ datum.f = QtMiscUtils::toAsciiUpper(datum.f);
QByteArray upper = ba.toUpper();
QByteArray upperTitle = QByteArray(title);
if (!datum.optTitle.isEmpty())
@@ -1309,6 +1521,12 @@ void tst_QByteArray::number_double()
QFETCH(double, value);
QFETCH(char, format);
QFETCH(int, precision);
+
+ if constexpr (std::numeric_limits<double>::has_denorm != std::denorm_present) {
+ if (::qstrcmp(QTest::currentDataTag(), "Very small number, very high precision, format 'f', precision 350") == 0) {
+ QSKIP("Skipping 'denorm' as this type lacks denormals on this system");
+ }
+ }
QTEST(QByteArray::number(value, format, precision), "expected");
}
@@ -1494,17 +1712,6 @@ void tst_QByteArray::resizeAfterFromRawData()
QVERIFY(array.constData()[5] == 0);
}
-void tst_QByteArray::appendAfterFromRawData()
-{
- QByteArray arr;
- {
- char data[] = "X";
- arr += QByteArray::fromRawData(data, sizeof(data));
- data[0] = 'Y';
- }
- QCOMPARE(arr.at(0), 'X');
-}
-
void tst_QByteArray::toFromHex_data()
{
QTest::addColumn<QByteArray>("str");
@@ -1584,7 +1791,7 @@ void tst_QByteArray::toFromHex_data()
<< QByteArray("af")
<< QByteArray("xaf");
- QTest::newRow("no-leading-zero")
+ QTest::newRow("no-leading-zero-long")
<< QByteArray("\xd\xde\xad\xc0\xde")
<< '\0'
<< QByteArray("0ddeadc0de")
@@ -1646,15 +1853,15 @@ void tst_QByteArray::toFromPercentEncoding()
QByteArray data = arr.toPercentEncoding();
QCOMPARE(data, QByteArray("Qt%20is%20great%21"));
- QCOMPARE(QByteArray::fromPercentEncoding(data), arr);
+ QCOMPARE(data.percentDecoded(), arr);
data = arr.toPercentEncoding("! ", "Qt");
QCOMPARE(data, QByteArray("%51%74 is grea%74!"));
- QCOMPARE(QByteArray::fromPercentEncoding(data), arr);
+ QCOMPARE(data.percentDecoded(), arr);
data = arr.toPercentEncoding(QByteArray(), "abcdefghijklmnopqrstuvwxyz", 'Q');
QCOMPARE(data, QByteArray("Q51Q74Q20Q69Q73Q20Q67Q72Q65Q61Q74Q21"));
- QCOMPARE(QByteArray::fromPercentEncoding(data, 'Q'), arr);
+ QCOMPARE(data.percentDecoded('Q'), arr);
// verify that to/from percent encoding preserves nullity
arr = "";
@@ -1670,8 +1877,16 @@ void tst_QByteArray::toFromPercentEncoding()
QVERIFY(arr.isNull());
QVERIFY(arr.toPercentEncoding().isEmpty());
QVERIFY(arr.toPercentEncoding().isNull());
- QVERIFY(QByteArray::fromPercentEncoding(QByteArray()).isEmpty());
- QVERIFY(QByteArray::fromPercentEncoding(QByteArray()).isNull());
+ QVERIFY(QByteArray().percentDecoded().isEmpty());
+ QVERIFY(QByteArray().percentDecoded().isNull());
+
+ // Verify that literal % in the string to be encoded does round-trip:
+ arr = "Qt%20is%20great%21";
+ data = arr.toPercentEncoding();
+ QCOMPARE(data.percentDecoded(), arr);
+ arr = "87% of all statistics are made up!";
+ data = arr.toPercentEncoding();
+ QCOMPARE(data.percentDecoded(), arr);
}
void tst_QByteArray::fromPercentEncoding_data()
@@ -1693,7 +1908,7 @@ void tst_QByteArray::fromPercentEncoding()
QFETCH(QByteArray, encodedString);
QFETCH(QByteArray, decodedString);
- QCOMPARE(QByteArray::fromPercentEncoding(encodedString), decodedString);
+ QCOMPARE(encodedString.percentDecoded(), decodedString);
}
void tst_QByteArray::toPercentEncoding_data()
@@ -1754,7 +1969,7 @@ void tst_QByteArray::pecentEncodingRoundTrip()
QByteArray encodedData = original.toPercentEncoding(excludeInEncoding, includeInEncoding);
QCOMPARE(encodedData, encoded);
- QCOMPARE(QByteArray::fromPercentEncoding(encodedData), original);
+ QCOMPARE(encodedData.percentDecoded(), original);
}
struct StringComparisonData
@@ -2077,9 +2292,26 @@ void tst_QByteArray::reserveExtended()
QCOMPARE(array.capacity(), array.size());
}
-void tst_QByteArray::movablity_data()
+void tst_QByteArray::resize()
{
- QTest::addColumn<QByteArray>("array");
+ QByteArray ba;
+ ba.resize(15);
+ QCOMPARE(ba.size(), qsizetype(15));
+ ba.resize(10);
+ QCOMPARE(ba.size(), 10);
+ ba.resize(0);
+ QCOMPARE(ba.size(), 0);
+ ba.resize(5, 'a');
+ QCOMPARE(ba.size(), 5);
+ QCOMPARE(ba, "aaaaa");
+ ba.resize(10, 'b');
+ QCOMPARE(ba.size(), 10);
+ QCOMPARE(ba, "aaaaabbbbb");
+}
+
+void tst_QByteArray::movability_data()
+{
+ prependExtended_data();
QTest::newRow("0x00000000") << QByteArray("\x00\x00\x00\x00", 4);
QTest::newRow("0x000000ff") << QByteArray("\x00\x00\x00\xff", 4);
@@ -2087,11 +2319,9 @@ void tst_QByteArray::movablity_data()
QTest::newRow("empty") << QByteArray("");
QTest::newRow("null") << QByteArray();
QTest::newRow("sss") << QByteArray(3, 's');
-
- prependExtended_data();
}
-void tst_QByteArray::movablity()
+void tst_QByteArray::movability()
{
QFETCH(QByteArray, array);
@@ -2162,7 +2392,7 @@ void tst_QByteArray::literals()
{
QByteArray str(QByteArrayLiteral("abcd"));
- QVERIFY(str.length() == 4);
+ QVERIFY(str.size() == 4);
QCOMPARE(str.capacity(), 0);
QVERIFY(str == "abcd");
QVERIFY(!str.data_ptr()->isMutable());
@@ -2174,34 +2404,60 @@ void tst_QByteArray::literals()
// detach on non const access
QVERIFY(str.data() != s);
- QVERIFY(str.capacity() >= str.length());
+ QVERIFY(str.capacity() >= str.size());
QVERIFY(str2.constData() == s);
QVERIFY(str2.data() != s);
- QVERIFY(str2.capacity() >= str2.length());
+ QVERIFY(str2.capacity() >= str2.size());
}
void tst_QByteArray::userDefinedLiterals()
{
- QByteArray str = "abcd"_qba;
+ {
+ QByteArray str = "abcd"_ba;
- QVERIFY(str.length() == 4);
- QCOMPARE(str.capacity(), 0);
- QVERIFY(str == "abcd");
- QVERIFY(!str.data_ptr()->isMutable());
+ QVERIFY(str.size() == 4);
+ QCOMPARE(str.capacity(), 0);
+ QVERIFY(str == "abcd");
+ QVERIFY(!str.data_ptr()->isMutable());
- const char *s = str.constData();
- QByteArray str2 = str;
- QVERIFY(str2.constData() == s);
- QCOMPARE(str2.capacity(), 0);
+ const char *s = str.constData();
+ QByteArray str2 = str;
+ QVERIFY(str2.constData() == s);
+ QCOMPARE(str2.capacity(), 0);
- // detach on non const access
- QVERIFY(str.data() != s);
- QVERIFY(str.capacity() >= str.length());
+ // detach on non const access
+ QVERIFY(str.data() != s);
+ QVERIFY(str.capacity() >= str.size());
- QVERIFY(str2.constData() == s);
- QVERIFY(str2.data() != s);
- QVERIFY(str2.capacity() >= str2.length());
+ QVERIFY(str2.constData() == s);
+ QVERIFY(str2.data() != s);
+ QVERIFY(str2.capacity() >= str2.size());
+ }
+
+#if QT_DEPRECATED_SINCE(6, 8)
+ {
+ QT_IGNORE_DEPRECATIONS(QByteArray str = "abcd"_qba;)
+
+ QVERIFY(str.size() == 4);
+ QCOMPARE(str.capacity(), 0);
+ QVERIFY(str == "abcd");
+ QVERIFY(!str.data_ptr()->isMutable());
+
+ const char *s = str.constData();
+ QByteArray str2 = str;
+ QVERIFY(str2.constData() == s);
+ QCOMPARE(str2.capacity(), 0);
+
+ // detach on non const access
+ QVERIFY(str.data() != s);
+ QVERIFY(str.capacity() >= str.size());
+
+ QVERIFY(str2.constData() == s);
+ QVERIFY(str2.data() != s);
+ QVERIFY(str2.capacity() >= str2.size());
+ }
+#endif // QT_DEPRECATED_SINCE(6, 8)
}
void tst_QByteArray::toUpperLower_data()
@@ -2234,10 +2490,16 @@ void tst_QByteArray::toUpperLower()
QFETCH(QByteArray, input);
QFETCH(QByteArray, upper);
QFETCH(QByteArray, lower);
+ QVERIFY(upper.isUpper());
+ QVERIFY(lower.isLower());
QCOMPARE(lower.toLower(), lower);
+ QVERIFY(lower.toLower().isLower());
QCOMPARE(upper.toUpper(), upper);
+ QVERIFY(upper.toUpper().isUpper());
QCOMPARE(input.toUpper(), upper);
+ QVERIFY(input.toUpper().isUpper());
QCOMPARE(input.toLower(), lower);
+ QVERIFY(input.toLower().isLower());
QByteArray copy = input;
QCOMPARE(std::move(copy).toUpper(), upper);
@@ -2266,12 +2528,12 @@ void tst_QByteArray::toUpperLower()
void tst_QByteArray::isUpper()
{
- QVERIFY(!QByteArray().isUpper());
- QVERIFY(!QByteArray("").isUpper());
+ QVERIFY(QByteArray().isUpper());
+ QVERIFY(QByteArray("").isUpper());
QVERIFY(QByteArray("TEXT").isUpper());
- QVERIFY(!QByteArray("\xD0\xDE").isUpper()); // non-ASCII is neither upper nor lower
- QVERIFY(!QByteArray("\xD7").isUpper());
- QVERIFY(!QByteArray("\xDF").isUpper());
+ QVERIFY(QByteArray("\xD0\xDE").isUpper());
+ QVERIFY(QByteArray("\xD7").isUpper());
+ QVERIFY(QByteArray("\xDF").isUpper());
QVERIFY(!QByteArray("text").isUpper());
QVERIFY(!QByteArray("Text").isUpper());
QVERIFY(!QByteArray("tExt").isUpper());
@@ -2281,19 +2543,19 @@ void tst_QByteArray::isUpper()
QVERIFY(!QByteArray("teXT").isUpper());
QVERIFY(!QByteArray("tEXt").isUpper());
QVERIFY(!QByteArray("tExT").isUpper());
- QVERIFY(!QByteArray("@ABYZ[").isUpper());
+ QVERIFY(QByteArray("@ABYZ[").isUpper());
QVERIFY(!QByteArray("@abyz[").isUpper());
- QVERIFY(!QByteArray("`ABYZ{").isUpper());
+ QVERIFY(QByteArray("`ABYZ{").isUpper());
QVERIFY(!QByteArray("`abyz{").isUpper());
}
void tst_QByteArray::isLower()
{
- QVERIFY(!QByteArray().isLower());
- QVERIFY(!QByteArray("").isLower());
+ QVERIFY(QByteArray().isLower());
+ QVERIFY(QByteArray("").isLower());
QVERIFY(QByteArray("text").isLower());
- QVERIFY(!QByteArray("\xE0\xFF").isLower()); // non-ASCII is neither upper nor lower
- QVERIFY(!QByteArray("\xF7").isLower());
+ QVERIFY(QByteArray("\xE0\xFF").isLower());
+ QVERIFY(QByteArray("\xF7").isLower());
QVERIFY(!QByteArray("Text").isLower());
QVERIFY(!QByteArray("tExt").isLower());
QVERIFY(!QByteArray("teXt").isLower());
@@ -2304,14 +2566,14 @@ void tst_QByteArray::isLower()
QVERIFY(!QByteArray("tExT").isLower());
QVERIFY(!QByteArray("TEXT").isLower());
QVERIFY(!QByteArray("@ABYZ[").isLower());
- QVERIFY(!QByteArray("@abyz[").isLower());
+ QVERIFY(QByteArray("@abyz[").isLower());
QVERIFY(!QByteArray("`ABYZ{").isLower());
- QVERIFY(!QByteArray("`abyz{").isLower());
+ QVERIFY(QByteArray("`abyz{").isLower());
}
void tst_QByteArray::macTypes()
{
-#ifndef Q_OS_MAC
+#ifndef Q_OS_DARWIN
QSKIP("This is a Apple-only test");
#else
extern void tst_QByteArray_macTypes(); // in qbytearray_mac.mm
@@ -2324,7 +2586,7 @@ void tst_QByteArray::stdString()
std::string stdstr( "QByteArray" );
const QByteArray stlqt = QByteArray::fromStdString(stdstr);
- QCOMPARE(stlqt.length(), int(stdstr.length()));
+ QCOMPARE(stlqt.size(), int(stdstr.length()));
QCOMPARE(stlqt.data(), stdstr.c_str());
QCOMPARE(stlqt.toStdString(), stdstr);
@@ -2419,6 +2681,39 @@ void tst_QByteArray::truncate()
QVERIFY(a.isEmpty());
}
+void tst_QByteArray::trimmed_data()
+{
+ QTest::addColumn<QByteArray>("full" );
+ QTest::addColumn<QByteArray>("trimmed" );
+
+ QTest::addRow("null") << QByteArray() << QByteArray();
+ QTest::addRow("simple") << "Text"_ba << "Text"_ba;
+ QTest::addRow("single-space") << " "_ba << ""_ba;
+ QTest::addRow("single-char") << " a "_ba << "a"_ba;
+ QTest::addRow("mixed") << " a \n\t\v b "_ba << "a \n\t\v b"_ba;
+}
+
+void tst_QByteArray::trimmed()
+{
+ QFETCH(QByteArray, full);
+ QFETCH(QByteArray, trimmed);
+
+ // Shared
+ if (!full.isNull())
+ QVERIFY(!full.isDetached());
+ QCOMPARE(full.trimmed(), trimmed); // lvalue
+ QCOMPARE(QByteArray(full).trimmed(), trimmed); // rvalue
+ QCOMPARE(full.isNull(), trimmed.isNull());
+
+ // Not shared
+ full = QByteArrayView(full).toByteArray();
+ if (!full.isNull())
+ QVERIFY(full.isDetached());
+ QCOMPARE(full.trimmed(), trimmed); // lvalue
+ QCOMPARE(QByteArray(full).trimmed(), trimmed); // rvalue
+ QCOMPARE(full.isNull(), trimmed.isNull());
+}
+
void tst_QByteArray::simplified()
{
QFETCH(QByteArray, source);
@@ -2448,45 +2743,99 @@ void tst_QByteArray::simplified_data()
void tst_QByteArray::left()
{
QByteArray a;
+ QCOMPARE(QByteArray().left(0), QByteArray());
+ QCOMPARE(QByteArray().left(10), QByteArray());
QCOMPARE(a.left(0), QByteArray());
QCOMPARE(a.left(10), QByteArray());
QVERIFY(!a.isDetached());
+ QCOMPARE(QByteArray(a).left(0), QByteArray());
+ QCOMPARE(QByteArray(a).left(10), QByteArray());
+ QCOMPARE(detached(a).left(0), QByteArray());
+ QCOMPARE(detached(a).left(10), QByteArray());
a = QByteArray("abcdefgh");
const char *ptr = a.constData();
+
+ // lvalue
QCOMPARE(a.left(5), QByteArray("abcde"));
QCOMPARE(a.left(20), a);
QCOMPARE(a.left(-5), QByteArray());
// calling left() does not modify the source array
QCOMPARE(a.constData(), ptr);
+
+ // rvalue, not detached
+ QCOMPARE(QByteArray(a).left(5), QByteArray("abcde"));
+ QCOMPARE(QByteArray(a).left(20), a);
+ QCOMPARE(QByteArray(a).left(-5), QByteArray());
+ // calling left() does not modify the source array
+ QCOMPARE(a.constData(), ptr);
+
+ // rvalue, detached
+ QCOMPARE(detached(a).left(5), QByteArray("abcde"));
+ QCOMPARE(detached(a).left(20), a);
+ QCOMPARE(detached(a).left(-5), QByteArray());
+ // calling left() does not modify the source array
+ QCOMPARE(a.constData(), ptr);
}
void tst_QByteArray::right()
{
QByteArray a;
+ QCOMPARE(QByteArray().right(0), QByteArray());
+ QCOMPARE(QByteArray().right(10), QByteArray());
QCOMPARE(a.right(0), QByteArray());
QCOMPARE(a.right(10), QByteArray());
QVERIFY(!a.isDetached());
+ QCOMPARE(QByteArray(a).right(0), QByteArray());
+ QCOMPARE(QByteArray(a).right(10), QByteArray());
+ QCOMPARE(detached(a).right(0), QByteArray());
+ QCOMPARE(detached(a).right(10), QByteArray());
a = QByteArray("abcdefgh");
const char *ptr = a.constData();
+
+ // lvalue
QCOMPARE(a.right(5), QByteArray("defgh"));
QCOMPARE(a.right(20), a);
QCOMPARE(a.right(-5), QByteArray());
// calling right() does not modify the source array
QCOMPARE(a.constData(), ptr);
+
+ // rvalue, not detached
+ QCOMPARE(QByteArray(a).right(5), QByteArray("defgh"));
+ QCOMPARE(QByteArray(a).right(20), a);
+ QCOMPARE(QByteArray(a).right(-5), QByteArray());
+ // calling right() does not modify the source array
+ QCOMPARE(a.constData(), ptr);
+
+ // rvalue, detached
+ QCOMPARE(detached(a).right(5), QByteArray("defgh"));
+ QCOMPARE(detached(a).right(20), a);
+ QCOMPARE(detached(a).right(-5), QByteArray());
+ // calling right() does not modify the source array
+ QCOMPARE(a.constData(), ptr);
}
void tst_QByteArray::mid()
{
QByteArray a;
+ QCOMPARE(QByteArray().mid(0), QByteArray());
+ QCOMPARE(a.mid(0, 10), QByteArray());
QCOMPARE(a.mid(0), QByteArray());
QCOMPARE(a.mid(0, 10), QByteArray());
QCOMPARE(a.mid(10), QByteArray());
QVERIFY(!a.isDetached());
+ QCOMPARE(QByteArray(a).mid(0), QByteArray());
+ QCOMPARE(QByteArray(a).mid(0, 10), QByteArray());
+ QCOMPARE(QByteArray(a).mid(10), QByteArray());
+ QCOMPARE(detached(a).mid(0), QByteArray());
+ QCOMPARE(detached(a).mid(0, 10), QByteArray());
+ QCOMPARE(detached(a).mid(10), QByteArray());
a = QByteArray("abcdefgh");
const char *ptr = a.constData();
+
+ // lvalue
QCOMPARE(a.mid(2), QByteArray("cdefgh"));
QCOMPARE(a.mid(2, 3), QByteArray("cde"));
QCOMPARE(a.mid(20), QByteArray());
@@ -2494,6 +2843,24 @@ void tst_QByteArray::mid()
QCOMPARE(a.mid(-5, 8), QByteArray("abc"));
// calling mid() does not modify the source array
QCOMPARE(a.constData(), ptr);
+
+ // rvalue, not detached
+ QCOMPARE(QByteArray(a).mid(2), QByteArray("cdefgh"));
+ QCOMPARE(QByteArray(a).mid(2, 3), QByteArray("cde"));
+ QCOMPARE(QByteArray(a).mid(20), QByteArray());
+ QCOMPARE(QByteArray(a).mid(-5), QByteArray("abcdefgh"));
+ QCOMPARE(QByteArray(a).mid(-5, 8), QByteArray("abc"));
+ // calling mid() does not modify the source array
+ QCOMPARE(a.constData(), ptr);
+
+ // rvalue, detached
+ QCOMPARE(detached(a).mid(2), QByteArray("cdefgh"));
+ QCOMPARE(detached(a).mid(2, 3), QByteArray("cde"));
+ QCOMPARE(detached(a).mid(20), QByteArray());
+ QCOMPARE(detached(a).mid(-5), QByteArray("abcdefgh"));
+ QCOMPARE(detached(a).mid(-5, 8), QByteArray("abc"));
+ // calling mid() does not modify the source array
+ QCOMPARE(a.constData(), ptr);
}
void tst_QByteArray::length()
@@ -2501,9 +2868,14 @@ void tst_QByteArray::length()
QFETCH(QByteArray, src);
QFETCH(qsizetype, res);
- QCOMPARE(src.length(), res);
QCOMPARE(src.size(), res);
- QCOMPARE(src.count(), res);
+ QCOMPARE(src.size(), res);
+#if QT_DEPRECATED_SINCE(6, 4)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+ QCOMPARE(src.size(), res);
+QT_WARNING_POP
+#endif
}
void tst_QByteArray::length_data()
@@ -2519,5 +2891,31 @@ void tst_QByteArray::length_data()
QTest::newRow("with '\\0' no size") << QByteArray("abc\0def") << qsizetype(3);
}
+void tst_QByteArray::slice() const
+{
+ QByteArray a;
+
+ a.slice(0);
+ QVERIFY(a.isEmpty());
+ QVERIFY(a.isNull());
+ a.slice(0, 0);
+ QVERIFY(a.isEmpty());
+ QVERIFY(a.isNull());
+
+ a = "Five pineapples";
+
+ a.slice(5);
+ QCOMPARE_EQ(a, "pineapples");
+
+ a.slice(4, 3);
+ QCOMPARE_EQ(a, "app");
+
+ a.slice(a.size());
+ QVERIFY(a.isEmpty());
+
+ a.slice(0, 0);
+ QVERIFY(a.isEmpty());
+}
+
QTEST_MAIN(tst_QByteArray)
#include "tst_qbytearray.moc"
diff --git a/tests/auto/corelib/text/qbytearray/tst_qbytearray_mac.mm b/tests/auto/corelib/text/qbytearray/tst_qbytearray_mac.mm
index ca8e88d4e2..a457d84b44 100644
--- a/tests/auto/corelib/text/qbytearray/tst_qbytearray_mac.mm
+++ b/tests/auto/corelib/text/qbytearray/tst_qbytearray_mac.mm
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Samuel Gaist <samuel.gaist@edeltech.ch>
-** 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) 2014 Samuel Gaist <samuel.gaist@edeltech.ch>
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QByteArray>
#include <QTest>
+#include <QtCore/private/qcore_mac_p.h>
+
#include <CoreFoundation/CoreFoundation.h>
#include <Foundation/Foundation.h>
diff --git a/tests/auto/corelib/text/qbytearray/.gitattributes b/tests/auto/corelib/text/qbytearray_large/.gitattributes
index e04709aa2e..e04709aa2e 100644
--- a/tests/auto/corelib/text/qbytearray/.gitattributes
+++ b/tests/auto/corelib/text/qbytearray_large/.gitattributes
diff --git a/tests/auto/corelib/text/qbytearray_large/CMakeLists.txt b/tests/auto/corelib/text/qbytearray_large/CMakeLists.txt
new file mode 100644
index 0000000000..3a2c6b7216
--- /dev/null
+++ b/tests/auto/corelib/text/qbytearray_large/CMakeLists.txt
@@ -0,0 +1,24 @@
+# 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_qbytearray_large LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+set(compile_and_link_options "")
+if(WASM)
+ list(APPEND compile_and_link_options "-fexceptions")
+endif()
+
+qt_internal_add_test(tst_qbytearray_large
+ SOURCES
+ tst_qbytearray_large.cpp
+ LIBRARIES
+ Qt::Core
+ TESTDATA "rfc3252.txt"
+ COMPILE_OPTIONS ${compile_and_link_options}
+ LINK_OPTIONS ${compile_and_link_options}
+)
+
diff --git a/tests/auto/corelib/text/qbytearray/rfc3252.txt b/tests/auto/corelib/text/qbytearray_large/rfc3252.txt
index b80c61bf0a..b80c61bf0a 100644
--- a/tests/auto/corelib/text/qbytearray/rfc3252.txt
+++ b/tests/auto/corelib/text/qbytearray_large/rfc3252.txt
diff --git a/tests/auto/corelib/text/qbytearray_large/tst_qbytearray_large.cpp b/tests/auto/corelib/text/qbytearray_large/tst_qbytearray_large.cpp
new file mode 100644
index 0000000000..9cf7368907
--- /dev/null
+++ b/tests/auto/corelib/text/qbytearray_large/tst_qbytearray_large.cpp
@@ -0,0 +1,224 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// Copyright (C) 2022 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+
+#include <qbytearray.h>
+
+#include <q20iterator.h>
+#include <stdexcept>
+#include <string_view>
+
+class tst_QByteArrayLarge : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase();
+#ifndef QT_NO_COMPRESS
+ void qCompress_data();
+ void qCompress();
+ void qUncompressCorruptedData_data();
+ void qUncompressCorruptedData();
+ void qUncompress4GiBPlus();
+ void qCompressionZeroTermination();
+#endif
+ void base64_2GiB();
+};
+
+void tst_QByteArrayLarge::initTestCase()
+{
+#if defined(QT_ASAN_ENABLED)
+ QSKIP("Skipping QByteArray tests under ASAN as they are too slow");
+#endif
+}
+
+#ifndef QT_NO_COMPRESS
+void tst_QByteArrayLarge::qCompress_data()
+{
+ QTest::addColumn<QByteArray>("ba");
+
+ const int size1 = 1024*1024;
+ QByteArray ba1( size1, 0 );
+
+ QTest::newRow( "00" ) << QByteArray();
+
+ int i;
+ for ( i=0; i<size1; i++ )
+ ba1[i] = (char)( i / 1024 );
+ QTest::newRow( "01" ) << ba1;
+
+ for ( i=0; i<size1; i++ )
+ ba1[i] = (char)( i % 256 );
+ QTest::newRow( "02" ) << ba1;
+
+ ba1.fill( 'A' );
+ QTest::newRow( "03" ) << ba1;
+
+ QFile file( QFINDTESTDATA("rfc3252.txt") );
+ QVERIFY( file.open(QIODevice::ReadOnly) );
+ QTest::newRow( "04" ) << file.readAll();
+}
+
+void tst_QByteArrayLarge::qCompress()
+{
+ QFETCH( QByteArray, ba );
+ QByteArray compressed = ::qCompress( ba );
+ QTEST( ::qUncompress( compressed ), "ba" );
+}
+
+void tst_QByteArrayLarge::qUncompressCorruptedData_data()
+{
+ QTest::addColumn<QByteArray>("in");
+
+ QTest::newRow("0x00000000") << QByteArray("\x00\x00\x00\x00", 4);
+ QTest::newRow("0x000000ff") << QByteArray("\x00\x00\x00\xff", 4);
+ QTest::newRow("0x3f000000") << QByteArray("\x3f\x00\x00\x00", 4);
+ QTest::newRow("0x3fffffff") << QByteArray("\x3f\xff\xff\xff", 4);
+ QTest::newRow("0x7fffff00") << QByteArray("\x7f\xff\xff\x00", 4);
+ QTest::newRow("0x7fffffff") << QByteArray("\x7f\xff\xff\xff", 4);
+ QTest::newRow("0x80000000") << QByteArray("\x80\x00\x00\x00", 4);
+ QTest::newRow("0x800000ff") << QByteArray("\x80\x00\x00\xff", 4);
+ QTest::newRow("0xcf000000") << QByteArray("\xcf\x00\x00\x00", 4);
+ QTest::newRow("0xcfffffff") << QByteArray("\xcf\xff\xff\xff", 4);
+ QTest::newRow("0xffffff00") << QByteArray("\xff\xff\xff\x00", 4);
+ QTest::newRow("0xffffffff") << QByteArray("\xff\xff\xff\xff", 4);
+}
+
+// This test is expected to produce some warning messages in the test output.
+void tst_QByteArrayLarge::qUncompressCorruptedData()
+{
+ QFETCH(QByteArray, in);
+
+ QByteArray res;
+ res = ::qUncompress(in);
+ QCOMPARE(res, QByteArray());
+
+ res = ::qUncompress(in + "blah");
+ QCOMPARE(res, QByteArray());
+}
+
+void tst_QByteArrayLarge::qUncompress4GiBPlus()
+{
+ // after three rounds, this decompresses to 4GiB + 1 'X' bytes:
+ constexpr uchar compressed_3x[] = {
+ 0x00, 0x00, 0x1a, 0x76, 0x78, 0x9c, 0x63, 0xb0, 0xdf, 0xb4, 0xad, 0x62,
+ 0xce, 0xdb, 0x3b, 0x0b, 0xf3, 0x26, 0x27, 0x4a, 0xb4, 0x3d, 0x34, 0x5b,
+ 0xed, 0xb4, 0x41, 0xf1, 0xc0, 0x99, 0x2f, 0x02, 0x05, 0x67, 0x26, 0x88,
+ 0x6c, 0x66, 0x71, 0x34, 0x62, 0x9c, 0x75, 0x26, 0xb1, 0xa0, 0xe5, 0xcc,
+ 0xda, 0x94, 0x83, 0xc9, 0x05, 0x73, 0x0e, 0x3c, 0x39, 0xc2, 0xc7, 0xd0,
+ 0xae, 0x38, 0x53, 0x7b, 0x87, 0xdc, 0x01, 0x91, 0x45, 0x59, 0x4f, 0xda,
+ 0xbf, 0xca, 0xcc, 0x52, 0xdb, 0xbb, 0xde, 0xbb, 0xf6, 0xd3, 0x55, 0xff,
+ 0x7d, 0x77, 0x0e, 0x1b, 0xf0, 0xa4, 0xdf, 0xcf, 0xdb, 0x5f, 0x2f, 0xf5,
+ 0xd7, 0x7c, 0xfe, 0xbf, 0x3f, 0xbf, 0x3f, 0x9d, 0x7c, 0xda, 0x2c, 0xc8,
+ 0xc0, 0xc0, 0xb0, 0xe1, 0xf1, 0xb3, 0xfd, 0xfa, 0xdf, 0x8e, 0x7d, 0xef,
+ 0x7f, 0xb9, 0xc1, 0xc2, 0xae, 0x92, 0x19, 0x28, 0xf2, 0x66, 0xd7, 0xe5,
+ 0xbf, 0xed, 0x93, 0xbf, 0x6a, 0x14, 0x7c, 0xff, 0xf6, 0xe1, 0xe8, 0xb6,
+ 0x7e, 0x46, 0xa0, 0x90, 0xd9, 0xbb, 0xcf, 0x9f, 0x17, 0x37, 0x7f, 0xe5,
+ 0x6f, 0xb4, 0x7f, 0xfe, 0x5e, 0xfd, 0xb6, 0x1d, 0x1b, 0x50, 0xe8, 0xc6,
+ 0x8e, 0xe3, 0xab, 0x9f, 0xe6, 0xec, 0x65, 0xfd, 0x23, 0xb1, 0x4e, 0x7e,
+ 0xef, 0xbd, 0x6f, 0xa6, 0x40, 0xa1, 0x03, 0xc7, 0xfe, 0x0a, 0xf1, 0x00,
+ 0xe9, 0x06, 0x91, 0x83, 0x40, 0x92, 0x21, 0x43, 0x10, 0xcc, 0x11, 0x03,
+ 0x73, 0x3a, 0x90, 0x39, 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32,
+ 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32,
+ 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32,
+ 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32,
+ 0xa3, 0x32, 0xa3, 0x32, 0xa3, 0x32, 0x34, 0x90, 0x99, 0xb6, 0x7e, 0xf5,
+ 0xd3, 0xe9, 0xbf, 0x35, 0x13, 0xca, 0x8c, 0x75, 0xec, 0xec, 0xa4, 0x2f,
+ 0x7e, 0x2d, 0xf9, 0xf3, 0xf0, 0xee, 0xea, 0xd5, 0xf5, 0xd3, 0x14, 0x57,
+ 0x06, 0x00, 0x00, 0xb9, 0x1e, 0x35, 0xce
+ };
+
+ constexpr qint64 GiB = 1024LL * 1024 * 1024;
+
+ if constexpr (sizeof(qsizetype) == sizeof(int)) {
+ QSKIP("This is a 64-bit-only test.");
+ } else {
+
+ // 1st
+ auto c = ::qUncompress(std::data(compressed_3x), q20::ssize(compressed_3x));
+ QVERIFY(!c.isNull()); // check for decompression error
+
+ // 2nd
+ c = ::qUncompress(c);
+ QVERIFY(!c.isNull());
+
+ // 3rd
+ try {
+ c = ::qUncompress(c);
+ if (c.isNull()) // this step (~18MiB -> 4GiB) might have run out of memory
+ QSKIP("Failed to allocate enough memory.");
+ } catch (const std::bad_alloc &) {
+ QSKIP("Failed to allocate enough memory.");
+ }
+
+ QCOMPARE(c.size(), 4 * GiB + 1);
+ QCOMPARE(std::string_view{c}.find_first_not_of('X'),
+ std::string_view::npos);
+
+ // re-compress once
+ // (produces 18MiB, we shouldn't use much more than that in allocated capacity)
+ c = ::qCompress(c);
+ QVERIFY(!c.isNull());
+
+ // and un-compress again, to make sure compression worked (we
+ // can't compare with compressed_3x, because zlib may change):
+ c = ::qUncompress(c);
+
+ QCOMPARE(c.size(), 4 * GiB + 1);
+ QCOMPARE(std::string_view{c}.find_first_not_of('X'),
+ std::string_view::npos);
+ }
+}
+
+void tst_QByteArrayLarge::qCompressionZeroTermination()
+{
+ QByteArray s = "Hello, I'm a string.";
+ QByteArray ba = ::qUncompress(::qCompress(s));
+ QCOMPARE(ba.data()[ba.size()], '\0');
+ QCOMPARE(ba, s);
+}
+#endif
+
+void tst_QByteArrayLarge::base64_2GiB()
+{
+#ifdef Q_OS_ANDROID
+ QSKIP("Android kills the test when using too much memory");
+#endif
+ if constexpr (sizeof(qsizetype) > sizeof(int)) {
+ try {
+ constexpr qint64 GiB = 1024 * 1024 * 1024;
+ static_assert((2 * GiB + 1) % 3 == 0);
+ const char inputChar = '\0'; // all-NULs encode as
+ const char outputChar = 'A'; // all-'A's
+ const qint64 inputSize = 2 * GiB + 1;
+ const qint64 outputSize = inputSize / 3 * 4;
+ const auto sv = [](const QByteArray &ba) {
+ return std::string_view{ba.data(), size_t(ba.size())};
+ };
+ QByteArray output;
+ {
+ const QByteArray input(inputSize, inputChar);
+ output = input.toBase64();
+ QCOMPARE(output.size(), outputSize);
+ QCOMPARE(sv(output).find_first_not_of(outputChar),
+ std::string_view::npos);
+ }
+ {
+ auto r = QByteArray::fromBase64Encoding(output);
+ QCOMPARE_EQ(r.decodingStatus, QByteArray::Base64DecodingStatus::Ok);
+ QCOMPARE(r.decoded.size(), inputSize);
+ QCOMPARE(sv(r.decoded).find_first_not_of(inputChar),
+ std::string_view::npos);
+ }
+ } catch (const std::bad_alloc &) {
+ QSKIP("Could not allocate enough RAM.");
+ }
+ } else {
+ QSKIP("This is a 64-bit only test");
+ }
+}
+
+QTEST_MAIN(tst_QByteArrayLarge)
+#include "tst_qbytearray_large.moc"
diff --git a/tests/auto/corelib/text/qbytearrayapisymmetry/CMakeLists.txt b/tests/auto/corelib/text/qbytearrayapisymmetry/CMakeLists.txt
index 68689a4b79..865c9b7015 100644
--- a/tests/auto/corelib/text/qbytearrayapisymmetry/CMakeLists.txt
+++ b/tests/auto/corelib/text/qbytearrayapisymmetry/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qbytearrayapisymmetry.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qbytearrayapisymmetry Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qbytearrayapisymmetry LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qbytearrayapisymmetry
SOURCES
tst_qbytearrayapisymmetry.cpp
diff --git a/tests/auto/corelib/text/qbytearrayapisymmetry/tst_qbytearrayapisymmetry.cpp b/tests/auto/corelib/text/qbytearrayapisymmetry/tst_qbytearrayapisymmetry.cpp
index 55c1e72a3e..f03086342c 100644
--- a/tests/auto/corelib/text/qbytearrayapisymmetry/tst_qbytearrayapisymmetry.cpp
+++ b/tests/auto/corelib/text/qbytearrayapisymmetry/tst_qbytearrayapisymmetry.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -1087,7 +1062,7 @@ void tst_QByteArrayApiSymmetry::toInt_data() const
QTest::newRow("base 0-1") << QByteArray("0x10") << 0 << 16 << true;
QTest::newRow("base 0-2") << QByteArray("10") << 0 << 10 << true;
QTest::newRow("base 0-3") << QByteArray("010") << 0 << 8 << true;
- QTest::newRow("empty") << QByteArray() << 0 << 0 << false;
+ QTest::newRow("base 0 empty") << QByteArray() << 0 << 0 << false;
QTest::newRow("leading space") << QByteArray(" 100") << 10 << 100 << true;
QTest::newRow("trailing space") << QByteArray("100 ") << 10 << 100 << true;
@@ -1196,8 +1171,13 @@ void tst_QByteArrayApiSymmetry::toLong_data() const
QTest::newRow("int32 max dec") << QByteArray("2147483647") << 10 << long(B32::max()) << true;
if constexpr (sizeof(long) < sizeof(qlonglong)) {
+ QT_WARNING_PUSH
+ // See: https://github.com/llvm/llvm-project/issues/59448
+ QT_WARNING_DISABLE_CLANG("-Winteger-overflow")
const qlonglong longMaxPlusOne = static_cast<qlonglong>(Bounds::max()) + 1;
const qlonglong longMinMinusOne = static_cast<qlonglong>(Bounds::min()) - 1;
+ QT_WARNING_POP
+
QTest::newRow("long max + 1") << QByteArray::number(longMaxPlusOne) << 10 << 0L << false;
QTest::newRow("long min - 1") << QByteArray::number(longMinMinusOne) << 10 << 0L << false;
}
diff --git a/tests/auto/corelib/text/qbytearraylist/CMakeLists.txt b/tests/auto/corelib/text/qbytearraylist/CMakeLists.txt
index 4add3dabe4..ffd8f4f280 100644
--- a/tests/auto/corelib/text/qbytearraylist/CMakeLists.txt
+++ b/tests/auto/corelib/text/qbytearraylist/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qbytearraylist.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qbytearraylist Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qbytearraylist LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qbytearraylist
SOURCES
tst_qbytearraylist.cpp
diff --git a/tests/auto/corelib/text/qbytearraylist/tst_qbytearraylist.cpp b/tests/auto/corelib/text/qbytearraylist/tst_qbytearraylist.cpp
index 82459f21ea..f82f07df88 100644
--- a/tests/auto/corelib/text/qbytearraylist/tst_qbytearraylist.cpp
+++ b/tests/auto/corelib/text/qbytearraylist/tst_qbytearraylist.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2014 by Southwest Research Institute (R)
-** 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.
+// Copyright (C) 2014 by Southwest Research Institute (R)
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#define QT_USE_QSTRINGBUILDER
diff --git a/tests/auto/corelib/text/qbytearraymatcher/CMakeLists.txt b/tests/auto/corelib/text/qbytearraymatcher/CMakeLists.txt
index a70d8d91b6..f500210f0f 100644
--- a/tests/auto/corelib/text/qbytearraymatcher/CMakeLists.txt
+++ b/tests/auto/corelib/text/qbytearraymatcher/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qbytearraymatcher.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qbytearraymatcher Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qbytearraymatcher LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qbytearraymatcher
SOURCES
tst_qbytearraymatcher.cpp
diff --git a/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp b/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp
index 859854dfbc..cb2ede7db6 100644
--- a/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.cpp
+++ b/tests/auto/corelib/text/qbytearraymatcher/tst_qbytearraymatcher.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 <QTest>
@@ -34,9 +9,7 @@
#include <numeric>
#include <string>
-#if QT_CONFIG(cxx11_future)
-# include <thread>
-#endif
+#include <thread>
// COM interface
#if defined(Q_OS_WIN) && defined(interface)
@@ -116,12 +89,12 @@ void tst_QByteArrayMatcher::interface()
QCOMPARE(matcher5.indexIn(haystack), 42);
QCOMPARE(matcher6.indexIn(haystack), 42);
- QCOMPARE(matcher1.indexIn(haystack.constData(), haystack.length()), 42);
+ QCOMPARE(matcher1.indexIn(haystack.constData(), haystack.size()), 42);
QCOMPARE(matcher1.indexIn(haystack, 43), 84);
- QCOMPARE(matcher1.indexIn(haystack.constData(), haystack.length(), 43), 84);
+ QCOMPARE(matcher1.indexIn(haystack.constData(), haystack.size(), 43), 84);
QCOMPARE(matcher1.indexIn(haystack, 85), -1);
- QCOMPARE(matcher1.indexIn(haystack.constData(), haystack.length(), 85), -1);
+ QCOMPARE(matcher1.indexIn(haystack.constData(), haystack.size(), 85), -1);
QByteArrayMatcher matcher7(QByteArray("123"));
QCOMPARE(matcher7.indexIn(haystack), 6);
@@ -278,14 +251,7 @@ void tst_QByteArrayMatcher::haystacksWithMoreThan4GiBWork()
QCOMPARE(large.size(), BaseSize + needle.size());
qDebug("created dataset in %lld ms", timer.elapsed());
-# if QT_CONFIG(cxx11_future)
using MaybeThread = std::thread;
-# else
- struct MaybeThread {
- std::function<void()> func;
- void join() { func(); }
- };
-# endif
//
// WHEN: trying to match an occurrence past the 4GiB mark
diff --git a/tests/auto/corelib/text/qbytearrayview/CMakeLists.txt b/tests/auto/corelib/text/qbytearrayview/CMakeLists.txt
index 43a0e09ce3..c78a81c7bd 100644
--- a/tests/auto/corelib/text/qbytearrayview/CMakeLists.txt
+++ b/tests/auto/corelib/text/qbytearrayview/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qbytearrayview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qbytearrayview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qbytearrayview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qbytearrayview
SOURCES
tst_qbytearrayview.cpp
diff --git a/tests/auto/corelib/text/qbytearrayview/tst_qbytearrayview.cpp b/tests/auto/corelib/text/qbytearrayview/tst_qbytearrayview.cpp
index 2953fc5c04..894f0430dd 100644
--- a/tests/auto/corelib/text/qbytearrayview/tst_qbytearrayview.cpp
+++ b/tests/auto/corelib/text/qbytearrayview/tst_qbytearrayview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QByteArrayView>
@@ -33,6 +8,7 @@
// for negative testing (can't convert from)
#include <deque>
#include <list>
+#include <QVarLengthArray>
template <typename T>
constexpr bool CanConvert = std::is_convertible_v<T, QByteArrayView>;
@@ -195,6 +171,7 @@ private slots:
void comparison() const;
void compare() const;
+ void std_stringview_conversion();
private:
template <typename Data>
@@ -220,6 +197,10 @@ void tst_QByteArrayView::constExpr() const
static_assert(bv.isEmpty());
static_assert(bv.data() == nullptr);
+ constexpr std::string_view sv = bv;
+ static_assert(sv.size() == 0);
+ static_assert(sv.data() == nullptr);
+
constexpr QByteArrayView bv2(bv.data(), bv.data() + bv.size());
static_assert(bv2.isNull());
static_assert(bv2.empty());
@@ -232,6 +213,10 @@ void tst_QByteArrayView::constExpr() const
static_assert(bv.isEmpty());
static_assert(bv.data() != nullptr);
+ constexpr std::string_view sv = bv;
+ static_assert(sv.size() == bv.size());
+ static_assert(sv.data() == bv.data());
+
constexpr QByteArrayView bv2(bv.data(), bv.data() + bv.size());
static_assert(!bv2.isNull());
static_assert(bv2.empty());
@@ -264,11 +249,23 @@ void tst_QByteArrayView::constExpr() const
static_assert(bv.rbegin() != bv.rend());
static_assert(bv.crbegin() != bv.crend());
+ constexpr std::string_view sv = bv;
+ static_assert(sv.size() == bv.size());
+ static_assert(sv.data() == bv.data());
+#ifdef AMBIGUOUS_CALL // QTBUG-108805
+ static_assert(sv == bv);
+ static_assert(bv == sv);
+#endif
+
constexpr QByteArrayView bv2(bv.data(), bv.data() + bv.size());
static_assert(!bv2.isNull());
static_assert(!bv2.empty());
static_assert(bv2.size() == 5);
}
+#if !defined(Q_CC_GNU) || defined(Q_CC_CLANG)
+ // Below checks are disabled because of a compilation issue with GCC and
+ // -fsanitize=undefined. See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71962.
+ // Note: Q_CC_GNU is also defined for Clang, so we need to check that too.
{
static constexpr char hello[] = "Hello";
constexpr QByteArrayView bv(hello);
@@ -285,6 +282,13 @@ void tst_QByteArrayView::constExpr() const
static_assert(bv.at(4) == 'o');
static_assert(bv.back() == 'o');
static_assert(bv.last() == 'o');
+
+ constexpr std::string_view sv = bv;
+ static_assert(bv.size() == sv.size());
+#ifdef AMBIGUOUS_CALL // QTBUG-108805
+ static_assert(bv == sv);
+ static_assert(sv == bv);
+#endif
}
{
static constexpr char hello[] = { 'H', 'e', 'l', 'l', 'o' };
@@ -302,13 +306,57 @@ void tst_QByteArrayView::constExpr() const
static_assert(bv.at(4) == 'o');
static_assert(bv.back() == 'o');
static_assert(bv.last() == 'o');
+
+ constexpr std::string_view sv = bv;
+ static_assert(bv.size() == sv.size());
+#ifdef AMBIGUOUS_CALL // QTBUG-108805
+ static_assert(bv == sv);
+ static_assert(sv == bv);
+#endif
}
+#endif
{
constexpr char *null = nullptr;
constexpr QByteArrayView bv(null);
static_assert(bv.isNull());
static_assert(bv.isEmpty());
static_assert(bv.size() == 0);
+
+ constexpr std::string_view sv = bv;
+ static_assert(sv.size() == 0);
+ static_assert(sv.data() == nullptr);
+ }
+ {
+ constexpr QByteArrayView bv(QLatin1StringView("Hello"));
+ static_assert(bv.size() == 5);
+ static_assert(!bv.empty());
+ static_assert(!bv.isEmpty());
+ static_assert(!bv.isNull());
+ static_assert(*bv.data() == 'H');
+ static_assert(bv[0] == 'H');
+ static_assert(bv.at(0) == 'H');
+ static_assert(bv.front() == 'H');
+ static_assert(bv.first() == 'H');
+ static_assert(bv[4] == 'o');
+ static_assert(bv.at(4) == 'o');
+ static_assert(bv.back() == 'o');
+ static_assert(bv.last() == 'o');
+ }
+ {
+ constexpr QByteArrayView bv(QUtf8StringView("Hello"));
+ static_assert(bv.size() == 5);
+ static_assert(!bv.empty());
+ static_assert(!bv.isEmpty());
+ static_assert(!bv.isNull());
+ static_assert(*bv.data() == 'H');
+ static_assert(bv[0] == 'H');
+ static_assert(bv.at(0) == 'H');
+ static_assert(bv.front() == 'H');
+ static_assert(bv.first() == 'H');
+ static_assert(bv[4] == 'o');
+ static_assert(bv.at(4) == 'o');
+ static_assert(bv.back() == 'o');
+ static_assert(bv.last() == 'o');
}
}
@@ -451,7 +499,7 @@ void tst_QByteArrayView::fromQByteArray() const
QByteArray empty = "";
QVERIFY(QByteArrayView(null).isNull());
- QVERIFY(!qToByteArrayViewIgnoringNull(null).isNull());
+ QVERIFY(qToByteArrayViewIgnoringNull(null).isNull());
QVERIFY(QByteArrayView(null).isEmpty());
QVERIFY(qToByteArrayViewIgnoringNull(null).isEmpty());
@@ -651,5 +699,30 @@ void tst_QByteArrayView::compare() const
QVERIFY(alpha.compare(beta, Qt::CaseSensitive) > 0);
}
+void tst_QByteArrayView::std_stringview_conversion()
+{
+ static_assert(std::is_convertible_v<QByteArrayView, std::string_view>);
+
+ QByteArrayView bav;
+ std::string_view sv(bav);
+ QCOMPARE(sv, std::string_view());
+
+ bav = "";
+ sv = bav;
+ QCOMPARE(bav.size(), 0);
+ QCOMPARE(sv.size(), size_t(0));
+ QCOMPARE(sv, std::string_view());
+
+ bav = "Hello";
+ sv = bav;
+ QCOMPARE(sv, std::string_view("Hello"));
+
+ bav = QByteArrayView::fromArray("Hello\0world");
+ sv = bav;
+ QCOMPARE(bav.size(), 12);
+ QCOMPARE(sv.size(), size_t(12));
+ QCOMPARE(sv, std::string_view("Hello\0world", 12));
+}
+
QTEST_APPLESS_MAIN(tst_QByteArrayView)
#include "tst_qbytearrayview.moc"
diff --git a/tests/auto/corelib/text/qbytedatabuffer/CMakeLists.txt b/tests/auto/corelib/text/qbytedatabuffer/CMakeLists.txt
index 3d4010c3f3..bfcfb6bc98 100644
--- a/tests/auto/corelib/text/qbytedatabuffer/CMakeLists.txt
+++ b/tests/auto/corelib/text/qbytedatabuffer/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qbytedatabuffer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qbytedatabuffer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qbytedatabuffer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qbytedatabuffer
SOURCES
tst_qbytedatabuffer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/text/qbytedatabuffer/tst_qbytedatabuffer.cpp b/tests/auto/corelib/text/qbytedatabuffer/tst_qbytedatabuffer.cpp
index dfe37e4210..27482f6486 100644
--- a/tests/auto/corelib/text/qbytedatabuffer/tst_qbytedatabuffer.cpp
+++ b/tests/auto/corelib/text/qbytedatabuffer/tst_qbytedatabuffer.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Hewlett-Packard Development Company, L.P.
-** 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) 2012 Hewlett-Packard Development Company, L.P.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <private/qbytedata_p.h>
diff --git a/tests/auto/corelib/text/qchar/CMakeLists.txt b/tests/auto/corelib/text/qchar/CMakeLists.txt
index 06faffb60e..03b99356ea 100644
--- a/tests/auto/corelib/text/qchar/CMakeLists.txt
+++ b/tests/auto/corelib/text/qchar/CMakeLists.txt
@@ -1,33 +1,23 @@
-# Generated from qchar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qchar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qchar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "data/NormalizationTest.txt")
qt_internal_add_test(tst_qchar
SOURCES
tst_qchar.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
TESTDATA ${test_data}
)
-
-## Scopes:
-#####################################################################
-
-if(ANDROID OR INTEGRITY)
- # Resources:
- set(testdata_resource_files
- "data/NormalizationTest.txt"
- )
-
- qt_internal_add_resource(tst_qchar "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
- )
-endif()
diff --git a/tests/auto/corelib/text/qchar/tst_qchar.cpp b/tests/auto/corelib/text/qchar/tst_qchar.cpp
index fe7fd24544..fae507f4c6 100644
--- a/tests/auto/corelib/text/qchar/tst_qchar.cpp
+++ b/tests/auto/corelib/text/qchar/tst_qchar.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <qchar.h>
@@ -42,6 +17,8 @@ private slots:
void operator_eqeq_null();
void operators_data();
void operators();
+ void qchar_qlatin1char_operators_symmetry_data();
+ void qchar_qlatin1char_operators_symmetry();
void toUpper();
void toLower();
void toTitle();
@@ -67,8 +44,10 @@ private slots:
void mirroredChar();
void decomposition();
void script();
+#if !defined(Q_OS_WASM)
void normalization_data();
void normalization();
+#endif // !defined(Q_OS_WASM)
void normalization_manual();
void normalizationCorrections();
void unicodeVersion();
@@ -89,9 +68,9 @@ void tst_QChar::fromUcs4_data()
QTest::addRow("0x%08X", ucs4) << ucs4;
};
- row(0x2f868);
- row(0x1D157);
- row(0x1D157);
+ row(0x2f868); // a CJK Compatibility Ideograph
+ row(0x11139); // Chakma digit 3
+ row(0x1D157); // Musical Symbol Void Notehead
}
void tst_QChar::fromUcs4()
@@ -197,6 +176,36 @@ void tst_QChar::operators()
#undef CHECK
}
+void tst_QChar::qchar_qlatin1char_operators_symmetry_data()
+{
+ QTest::addColumn<char>("lhs");
+ QTest::addColumn<char>("rhs");
+
+ const uchar values[] = {0x00, 0x3a, 0x7f, 0x80, 0xab, 0xff};
+
+ for (uchar i : values) {
+ for (uchar j : values)
+ QTest::addRow("'\\x%02x'_op_'\\x%02x'", i, j) << char(i) << char(j);
+ }
+}
+
+void tst_QChar::qchar_qlatin1char_operators_symmetry()
+{
+ QFETCH(char, lhs);
+ QFETCH(char, rhs);
+
+ const QLatin1Char l1lhs(lhs);
+ const QLatin1Char l1rhs(rhs);
+#define CHECK(op) QCOMPARE((l1lhs op l1rhs), (QChar(l1lhs) op QChar(l1rhs)))
+ CHECK(==);
+ CHECK(!=);
+ CHECK(< );
+ CHECK(> );
+ CHECK(<=);
+ CHECK(>=);
+#undef CHECK
+}
+
void tst_QChar::toUpper()
{
QVERIFY(QChar('a').toUpper() == 'A');
@@ -784,6 +793,8 @@ void tst_QChar::script()
QVERIFY(QChar::script(0xe0100) == QChar::Script_Inherited);
}
+// wasm is limited in reading filesystems, so omit this test for now
+#if !defined(Q_OS_WASM)
void tst_QChar::normalization_data()
{
QTest::addColumn<QStringList>("columns");
@@ -795,9 +806,7 @@ void tst_QChar::normalization_data()
QString testFile = QFINDTESTDATA("data/NormalizationTest.txt");
QVERIFY2(!testFile.isEmpty(), "data/NormalizationTest.txt not found!");
QFile f(testFile);
- QVERIFY(f.exists());
-
- f.open(QIODevice::ReadOnly);
+ QVERIFY(f.open(QIODevice::ReadOnly));
while (!f.atEnd()) {
linenum++;
@@ -822,7 +831,7 @@ void tst_QChar::normalization_data()
line = line.trimmed();
if (line.endsWith(';'))
- line.truncate(line.length()-1);
+ line.truncate(line.size()-1);
QList<QByteArray> l = line.split(';');
@@ -906,6 +915,7 @@ void tst_QChar::normalization()
// #################
}
+#endif // !defined(Q_OS_WASM)
void tst_QChar::normalization_manual()
{
diff --git a/tests/auto/corelib/text/qcollator/CMakeLists.txt b/tests/auto/corelib/text/qcollator/CMakeLists.txt
index 8112ecb887..c9f5f0e9ca 100644
--- a/tests/auto/corelib/text/qcollator/CMakeLists.txt
+++ b/tests/auto/corelib/text/qcollator/CMakeLists.txt
@@ -1,14 +1,21 @@
-# Generated from qcollator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcollator Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcollator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcollator
SOURCES
tst_qcollator.cpp
DEFINES
QT_NO_CAST_TO_ASCII
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/text/qcollator/tst_qcollator.cpp b/tests/auto/corelib/text/qcollator/tst_qcollator.cpp
index 5e2c7f1b53..b6da8a3899 100644
--- a/tests/auto/corelib/text/qcollator/tst_qcollator.cpp
+++ b/tests/auto/corelib/text/qcollator/tst_qcollator.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -34,6 +9,7 @@
#include <QScopeGuard>
#include <cstring>
+#include <iostream>
class tst_QCollator : public QObject
{
@@ -77,7 +53,7 @@ void tst_QCollator::basics()
// posix implementation supports only C and default locale,
// so update it for Android and INTEGRITY builds
-#if defined(Q_OS_ANDROID) || defined(Q_OS_INTEGRITY)
+#if !QT_CONFIG(icu) && !defined(Q_OS_WIN) && !defined(Q_OS_MACOS)
c3.setLocale(QLocale());
#endif
QCollatorSortKey key1 = c3.sortKey("test");
@@ -112,7 +88,7 @@ void tst_QCollator::moveSemantics()
// test QCollatorSortKey move assignment
// posix implementation supports only C and default locale,
// so update it for Android and INTEGRITY builds
-#if defined(Q_OS_ANDROID) || defined(Q_OS_INTEGRITY)
+#if !QT_CONFIG(icu) && !defined(Q_OS_WIN) && !defined(Q_OS_MACOS)
c1.setLocale(QLocale());
#endif
QCollatorSortKey key1 = c1.sortKey("1");
@@ -288,8 +264,12 @@ void tst_QCollator::compare()
auto asSign = [](int compared) {
return compared < 0 ? -1 : compared > 0 ? 1 : 0;
};
-
-#if defined(Q_OS_ANDROID) || defined(Q_OS_INTEGRITY)
+#if defined(Q_OS_WASM)
+ if (strcmp(QTest::currentDataTag(), "english5") == 0
+ || strcmp(QTest::currentDataTag(), "english8") == 0)
+ QSKIP("Some en-us locale tests have issues on WASM");
+#endif // Q_OS_WASM
+#if !QT_CONFIG(icu) && !defined(Q_OS_WIN) && !defined(Q_OS_MACOS)
if (collator.locale() != QLocale::c() && collator.locale() != QLocale::system().collation())
QSKIP("POSIX implementation of collation only supports C and system collation locales");
#endif
@@ -297,9 +277,9 @@ void tst_QCollator::compare()
if (numericMode)
collator.setNumericMode(true);
- int keyCompareResult = result;
- [[maybe_unused]]int keyCompareCaseInsensitiveResult = caseInsensitiveResult;
- [[maybe_unused]]int keyComparePunctuationResultResult = punctuationResult;
+ [[maybe_unused]] int keyCompareResult = result;
+ [[maybe_unused]] int keyCompareCaseInsensitiveResult = caseInsensitiveResult;
+ [[maybe_unused]] int keyComparePunctuationResultResult = punctuationResult;
// trying to deal with special behavior of different OS-dependent collators
if (collator.locale() == QLocale("C")) {
diff --git a/tests/auto/corelib/text/qlatin1string/.gitignore b/tests/auto/corelib/text/qlatin1string/.gitignore
deleted file mode 100644
index dddf56b2df..0000000000
--- a/tests/auto/corelib/text/qlatin1string/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-tst_qlatin1string
diff --git a/tests/auto/corelib/text/qlatin1string/CMakeLists.txt b/tests/auto/corelib/text/qlatin1string/CMakeLists.txt
deleted file mode 100644
index 4d37ebb04c..0000000000
--- a/tests/auto/corelib/text/qlatin1string/CMakeLists.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-# Generated from qlatin1string.pro.
-
-#####################################################################
-## tst_qlatin1string Test:
-#####################################################################
-
-qt_internal_add_test(tst_qlatin1string
- SOURCES
- tst_qlatin1string.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
- QT_NO_CAST_TO_ASCII
-)
-
-## Scopes:
-#####################################################################
diff --git a/tests/auto/corelib/text/qlatin1string/tst_qlatin1string.cpp b/tests/auto/corelib/text/qlatin1string/tst_qlatin1string.cpp
deleted file mode 100644
index 039a024d64..0000000000
--- a/tests/auto/corelib/text/qlatin1string/tst_qlatin1string.cpp
+++ /dev/null
@@ -1,298 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 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 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 <QTest>
-
-#include <QString>
-
-// Preserve QLatin1String-ness (QVariant(QLatin1String) creates a QVariant::String):
-struct QLatin1StringContainer {
- QLatin1String l1;
-};
-QT_BEGIN_NAMESPACE
-Q_DECLARE_TYPEINFO(QLatin1StringContainer, Q_RELOCATABLE_TYPE);
-QT_END_NAMESPACE
-Q_DECLARE_METATYPE(QLatin1StringContainer)
-
-class tst_QLatin1String : public QObject
-{
- Q_OBJECT
-
-private Q_SLOTS:
- void construction();
- void at();
- void arg() const;
- void midLeftRight();
- void nullString();
- void emptyString();
- void iterators();
- void relationalOperators_data();
- void relationalOperators();
-};
-
-void tst_QLatin1String::construction()
-{
- {
- const char str[6] = "hello";
- QLatin1String l1s(str);
- QCOMPARE(l1s.size(), 5);
- QCOMPARE(l1s.latin1(), reinterpret_cast<const void *>(&str[0]));
- QCOMPARE(l1s.latin1(), "hello");
-
- QByteArrayView helloView(str);
- helloView = helloView.first(4);
- l1s = QLatin1String(helloView);
- QCOMPARE(l1s.latin1(), helloView.data());
- QCOMPARE(l1s.latin1(), reinterpret_cast<const void *>(helloView.data()));
- QCOMPARE(l1s.size(), helloView.size());
- }
-
- {
- const QByteArray helloArray("hello");
- QLatin1String l1s(helloArray);
- QCOMPARE(l1s.latin1(), helloArray.data());
- QCOMPARE(l1s.size(), helloArray.size());
-
- QByteArrayView helloView(helloArray);
- helloView = helloView.first(4);
- l1s = QLatin1String(helloView);
- QCOMPARE(l1s.latin1(), helloView.data());
- QCOMPARE(l1s.size(), helloView.size());
- }
-}
-
-void tst_QLatin1String::at()
-{
- const QLatin1String l1("Hello World");
- QCOMPARE(l1.at(0), QLatin1Char('H'));
- QCOMPARE(l1.at(l1.size() - 1), QLatin1Char('d'));
- QCOMPARE(l1[0], QLatin1Char('H'));
- QCOMPARE(l1[l1.size() - 1], QLatin1Char('d'));
-}
-
-void tst_QLatin1String::arg() const
-{
-#define CHECK1(pattern, arg1, expected) \
- do { \
- auto p = QLatin1String(pattern); \
- QCOMPARE(p.arg(QLatin1String(arg1)), expected); \
- QCOMPARE(p.arg(u"" arg1), expected); \
- QCOMPARE(p.arg(QStringLiteral(arg1)), expected); \
- QCOMPARE(p.arg(QString(QLatin1String(arg1))), expected); \
- } while (false) \
- /*end*/
-#define CHECK2(pattern, arg1, arg2, expected) \
- do { \
- auto p = QLatin1String(pattern); \
- QCOMPARE(p.arg(QLatin1String(arg1), QLatin1String(arg2)), expected); \
- QCOMPARE(p.arg(u"" arg1, QLatin1String(arg2)), expected); \
- QCOMPARE(p.arg(QLatin1String(arg1), u"" arg2), expected); \
- QCOMPARE(p.arg(u"" arg1, u"" arg2), expected); \
- } while (false) \
- /*end*/
-
- CHECK1("", "World", "");
- CHECK1("%1", "World", "World");
- CHECK1("!%1?", "World", "!World?");
- CHECK1("%1%1", "World", "WorldWorld");
- CHECK1("%1%2", "World", "World%2");
- CHECK1("%2%1", "World", "%2World");
-
- CHECK2("", "Hello", "World", "");
- CHECK2("%1", "Hello", "World", "Hello");
- CHECK2("!%1, %2?", "Hello", "World", "!Hello, World?");
- CHECK2("%1%1", "Hello", "World", "HelloHello");
- CHECK2("%1%2", "Hello", "World", "HelloWorld");
- CHECK2("%2%1", "Hello", "World", "WorldHello");
-
-#undef CHECK2
-#undef CHECK1
-
- QCOMPARE(QLatin1String(" %2 %2 %1 %3 ").arg(QLatin1Char('c'), QChar::CarriageReturn, u'C'), " \r \r c C ");
-}
-
-void tst_QLatin1String::midLeftRight()
-{
- const QLatin1String l1("Hello World");
- QCOMPARE(l1.mid(0), l1);
- QCOMPARE(l1.mid(0, l1.size()), l1);
- QCOMPARE(l1.left(l1.size()), l1);
- QCOMPARE(l1.right(l1.size()), l1);
-
- QCOMPARE(l1.mid(6), QLatin1String("World"));
- QCOMPARE(l1.mid(6, 5), QLatin1String("World"));
- QCOMPARE(l1.right(5), QLatin1String("World"));
-
- QCOMPARE(l1.mid(6, 1), QLatin1String("W"));
- QCOMPARE(l1.right(5).left(1), QLatin1String("W"));
-
- QCOMPARE(l1.left(5), QLatin1String("Hello"));
-}
-
-void tst_QLatin1String::nullString()
-{
- // default ctor
- {
- QLatin1String l1;
- QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(nullptr));
- QCOMPARE(l1.size(), 0);
-
- QString s = l1;
- QVERIFY(s.isNull());
- }
-
- // from nullptr
- {
- const char *null = nullptr;
- QLatin1String l1(null);
- QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(nullptr));
- QCOMPARE(l1.size(), 0);
-
- QString s = l1;
- QVERIFY(s.isNull());
- }
-
- // from null QByteArray
- {
- const QByteArray null;
- QVERIFY(null.isNull());
-
- QLatin1String l1(null);
- QEXPECT_FAIL("", "null QByteArrays become non-null QLatin1Strings...", Continue);
- QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(nullptr));
- QCOMPARE(l1.size(), 0);
-
- QString s = l1;
- QEXPECT_FAIL("", "null QByteArrays become non-null QLatin1Strings become non-null QStrings...", Continue);
- QVERIFY(s.isNull());
- }
-}
-
-void tst_QLatin1String::emptyString()
-{
- {
- const char *empty = "";
- QLatin1String l1(empty);
- QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(empty));
- QCOMPARE(l1.size(), 0);
-
- QString s = l1;
- QVERIFY(s.isEmpty());
- QVERIFY(!s.isNull());
- }
-
- {
- const char *notEmpty = "foo";
- QLatin1String l1(notEmpty, qsizetype(0));
- QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(notEmpty));
- QCOMPARE(l1.size(), 0);
-
- QString s = l1;
- QVERIFY(s.isEmpty());
- QVERIFY(!s.isNull());
- }
-
- {
- const QByteArray empty = "";
- QLatin1String l1(empty);
- QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(empty.constData()));
- QCOMPARE(l1.size(), 0);
-
- QString s = l1;
- QVERIFY(s.isEmpty());
- QVERIFY(!s.isNull());
- }
-}
-
-void tst_QLatin1String::iterators()
-{
- QLatin1String hello("hello");
- QLatin1String olleh("olleh");
-
- QVERIFY(std::equal(hello.begin(), hello.end(),
- olleh.rbegin()));
- QVERIFY(std::equal(hello.rbegin(), hello.rend(),
- QT_MAKE_CHECKED_ARRAY_ITERATOR(olleh.begin(), olleh.size())));
-
- QVERIFY(std::equal(hello.cbegin(), hello.cend(),
- olleh.rbegin()));
- QVERIFY(std::equal(hello.crbegin(), hello.crend(),
- QT_MAKE_CHECKED_ARRAY_ITERATOR(olleh.begin(), olleh.size())));
-}
-
-void tst_QLatin1String::relationalOperators_data()
-{
- QTest::addColumn<QLatin1StringContainer>("lhs");
- QTest::addColumn<int>("lhsOrderNumber");
- QTest::addColumn<QLatin1StringContainer>("rhs");
- QTest::addColumn<int>("rhsOrderNumber");
-
- struct Data {
- QLatin1String l1;
- int order;
- } data[] = {
- { QLatin1String(), 0 },
- { QLatin1String(""), 0 },
- { QLatin1String("a"), 1 },
- { QLatin1String("aa"), 2 },
- { QLatin1String("b"), 3 },
- };
-
- for (Data *lhs = data; lhs != data + sizeof data / sizeof *data; ++lhs) {
- for (Data *rhs = data; rhs != data + sizeof data / sizeof *data; ++rhs) {
- QLatin1StringContainer l = { lhs->l1 }, r = { rhs->l1 };
- QTest::addRow("\"%s\" <> \"%s\"",
- lhs->l1.data() ? lhs->l1.data() : "nullptr",
- rhs->l1.data() ? rhs->l1.data() : "nullptr")
- << l << lhs->order << r << rhs->order;
- }
- }
-}
-
-void tst_QLatin1String::relationalOperators()
-{
- QFETCH(QLatin1StringContainer, lhs);
- QFETCH(int, lhsOrderNumber);
- QFETCH(QLatin1StringContainer, rhs);
- QFETCH(int, rhsOrderNumber);
-
-#define CHECK(op) \
- QCOMPARE(lhs.l1 op rhs.l1, lhsOrderNumber op rhsOrderNumber) \
- /*end*/
- CHECK(==);
- CHECK(!=);
- CHECK(< );
- CHECK(> );
- CHECK(<=);
- CHECK(>=);
-#undef CHECK
-}
-
-QTEST_APPLESS_MAIN(tst_QLatin1String)
-
-#include "tst_qlatin1string.moc"
diff --git a/tests/auto/corelib/text/qlatin1stringmatcher/CMakeLists.txt b/tests/auto/corelib/text/qlatin1stringmatcher/CMakeLists.txt
new file mode 100644
index 0000000000..19db9fc07a
--- /dev/null
+++ b/tests/auto/corelib/text/qlatin1stringmatcher/CMakeLists.txt
@@ -0,0 +1,20 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qlatin1sgtringmatcher Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qlatin1stringmatcher LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qlatin1stringmatcher
+ SOURCES
+ tst_qlatin1stringmatcher.cpp
+)
+
+## Scopes:
+#####################################################################
diff --git a/tests/auto/corelib/text/qlatin1stringmatcher/tst_qlatin1stringmatcher.cpp b/tests/auto/corelib/text/qlatin1stringmatcher/tst_qlatin1stringmatcher.cpp
new file mode 100644
index 0000000000..82e12bdfca
--- /dev/null
+++ b/tests/auto/corelib/text/qlatin1stringmatcher/tst_qlatin1stringmatcher.cpp
@@ -0,0 +1,567 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+
+#include <QtCore/QLatin1StringMatcher>
+#include <QtCore/QStaticLatin1StringMatcher>
+
+#include <numeric>
+#include <string>
+
+#include <thread>
+
+// COM interface
+#if defined(interface)
+# undef interface
+#endif
+
+using namespace Qt::Literals::StringLiterals;
+
+class tst_QLatin1StringMatcher : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void overloads();
+ void staticOverloads();
+ void interface();
+ void indexIn();
+ void haystacksWithMoreThan4GiBWork();
+ void staticLatin1StringMatcher();
+};
+
+void tst_QLatin1StringMatcher::overloads()
+{
+ QLatin1StringView hello = "hello"_L1;
+ QByteArray hello2B = QByteArrayView(hello).toByteArray().repeated(2);
+ QLatin1StringView hello2(hello2B);
+ {
+ QLatin1StringMatcher m("hello"_L1, Qt::CaseSensitive);
+ QCOMPARE(m.pattern(), "hello"_L1);
+ QCOMPARE(m.indexIn("hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hello"_L1), -1);
+ QCOMPARE(m.indexIn("Hellohello"_L1), 5);
+ QCOMPARE(m.indexIn("helloHello"_L1), 0);
+ QCOMPARE(m.indexIn("helloHello"_L1, 1), -1);
+ }
+ {
+ QLatin1StringMatcher m("Hello"_L1, Qt::CaseSensitive);
+ QCOMPARE(m.pattern(), "Hello"_L1);
+ QCOMPARE(m.indexIn("hello"_L1), -1);
+ QCOMPARE(m.indexIn("Hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hellohello"_L1), 0);
+ QCOMPARE(m.indexIn("helloHello"_L1), 5);
+ QCOMPARE(m.indexIn("helloHello"_L1, 6), -1);
+ }
+ {
+ QLatin1StringMatcher m("hello"_L1, Qt::CaseInsensitive);
+ QCOMPARE(m.pattern(), "hello"_L1);
+ QCOMPARE(m.indexIn("hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hellohello"_L1), 0);
+ QCOMPARE(m.indexIn("helloHello"_L1), 0);
+ QCOMPARE(m.indexIn("helloHello"_L1, 1), 5);
+ QCOMPARE(m.indexIn("helloHello"_L1, 6), -1);
+ }
+ {
+ QLatin1StringMatcher m("Hello"_L1, Qt::CaseInsensitive);
+ QCOMPARE(m.pattern(), "Hello"_L1);
+ QCOMPARE(m.indexIn("hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hellohello"_L1), 0);
+ QCOMPARE(m.indexIn("helloHello"_L1), 0);
+ QCOMPARE(m.indexIn("helloHello"_L1, 1), 5);
+ QCOMPARE(m.indexIn("helloHello"_L1, 6), -1);
+ }
+ {
+ QLatin1StringMatcher m(hello, Qt::CaseSensitive);
+ QCOMPARE(m.pattern(), "hello"_L1);
+ QCOMPARE(m.indexIn(hello), 0);
+ QCOMPARE(m.indexIn(hello, 1), -1);
+ QCOMPARE(m.indexIn(hello2, 1), hello.size());
+ QCOMPARE(m.indexIn(hello2, 6), -1);
+ }
+}
+
+void tst_QLatin1StringMatcher::staticOverloads()
+{
+#ifdef QT_STATIC_BOYER_MOORE_NOT_SUPPORTED
+ QSKIP("Test is only valid on an OS that supports static latin1 string matcher");
+#else
+ constexpr QLatin1StringView hello = "hello"_L1;
+ QByteArray hello2B = QByteArrayView(hello).toByteArray().repeated(2);
+ QLatin1StringView hello2(hello2B);
+ {
+ static constexpr auto m = qMakeStaticCaseSensitiveLatin1StringMatcher("hel");
+ QCOMPARE(m.indexIn("hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hello"_L1), -1);
+ QCOMPARE(m.indexIn("Hellohello"_L1), 5);
+ QCOMPARE(m.indexIn("helloHello"_L1), 0);
+ QCOMPARE(m.indexIn("he"_L1), -1);
+ QCOMPARE(m.indexIn("hel"_L1), 0);
+ QCOMPARE(m.indexIn(hello), 0);
+ QCOMPARE(m.indexIn(hello, 1), -1); // from is 1
+ QCOMPARE(m.indexIn(hello2, 2), hello.size()); // from is 2
+ QCOMPARE(m.indexIn(hello2, 3), hello.size()); // from is 3
+ QCOMPARE(m.indexIn(hello2, 6), -1); // from is 6
+ static_assert(m.indexIn("hello"_L1) == 0);
+ static_assert(m.indexIn("Hello"_L1) == -1);
+ static_assert(m.indexIn("Hellohello"_L1) == 5);
+ static_assert(m.indexIn("helloHello"_L1) == 0);
+ static_assert(m.indexIn("he"_L1) == -1);
+ static_assert(m.indexIn("hel"_L1) == 0);
+ static_assert(m.indexIn("hellohello"_L1, 2) == 5); // from is 2
+ static_assert(m.indexIn("hellohello"_L1, 3) == 5); // from is 3
+ static_assert(m.indexIn("hellohello"_L1, 6) == -1); // from is 6
+ }
+ {
+ static constexpr auto m = qMakeStaticCaseSensitiveLatin1StringMatcher("Hel");
+ QCOMPARE(m.indexIn("hello"_L1), -1);
+ QCOMPARE(m.indexIn("Hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hellohello"_L1), 0);
+ QCOMPARE(m.indexIn("helloHello"_L1), 5);
+ QCOMPARE(m.indexIn("helloHello"_L1, 6), -1);
+ QCOMPARE(m.indexIn("He"_L1), -1);
+ QCOMPARE(m.indexIn("Hel"_L1), 0);
+ QCOMPARE(m.indexIn(hello), -1);
+ QCOMPARE(m.indexIn(hello2, 2), -1); // from is 2
+ QCOMPARE(m.indexIn(hello2, 6), -1); // from is 6
+ static_assert(m.indexIn("hello"_L1) == -1);
+ static_assert(m.indexIn("Hello"_L1) == 0);
+ static_assert(m.indexIn("Hellohello"_L1) == 0);
+ static_assert(m.indexIn("helloHello"_L1) == 5);
+ static_assert(m.indexIn("helloHello"_L1, 6) == -1);
+ static_assert(m.indexIn("He"_L1) == -1);
+ static_assert(m.indexIn("Hel"_L1) == 0);
+ static_assert(m.indexIn("hellohello"_L1, 2) == -1); // from is 2
+ static_assert(m.indexIn("hellohello"_L1, 6) == -1); // from is 6
+ }
+ {
+ static constexpr auto m = qMakeStaticCaseInsensitiveLatin1StringMatcher("hel");
+ QCOMPARE(m.indexIn("hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hellohello"_L1), 0);
+ QCOMPARE(m.indexIn("helloHello"_L1), 0);
+ QCOMPARE(m.indexIn("he"_L1), -1);
+ QCOMPARE(m.indexIn("hel"_L1), 0);
+ QCOMPARE(m.indexIn(hello), 0);
+ QCOMPARE(m.indexIn(hello, 1), -1);
+ QCOMPARE(m.indexIn(hello2, 2), hello.size()); // from is 2
+ QCOMPARE(m.indexIn(hello2, 3), hello.size()); // from is 3
+ QCOMPARE(m.indexIn(hello2, 6), -1); // from is 6
+ static_assert(m.indexIn("hello"_L1) == 0);
+ static_assert(m.indexIn("Hello"_L1) == 0);
+ static_assert(m.indexIn("Hellohello"_L1) == 0);
+ static_assert(m.indexIn("helloHello"_L1) == 0);
+ static_assert(m.indexIn("he"_L1) == -1);
+ static_assert(m.indexIn("hel"_L1) == 0);
+ static_assert(m.indexIn("hellohello"_L1, 2) == 5); // from is 2
+ static_assert(m.indexIn("hellohello"_L1, 3) == 5); // from is 3
+ static_assert(m.indexIn("hellohello"_L1, 6) == -1); // from is 6
+ }
+ {
+ static constexpr auto m = qMakeStaticCaseInsensitiveLatin1StringMatcher("Hel");
+ QCOMPARE(m.indexIn("hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hello"_L1), 0);
+ QCOMPARE(m.indexIn("Hellohello"_L1), 0);
+ QCOMPARE(m.indexIn("helloHello"_L1), 0);
+ QCOMPARE(m.indexIn("he"_L1), -1);
+ QCOMPARE(m.indexIn("hel"_L1), 0);
+ QCOMPARE(m.indexIn(hello), 0);
+ QCOMPARE(m.indexIn(hello, 1), -1);
+ QCOMPARE(m.indexIn(hello2, 2), hello.size()); // from is 2
+ QCOMPARE(m.indexIn(hello2, 3), hello.size()); // from is 3
+ QCOMPARE(m.indexIn(hello2, 6), -1); // from is 6
+ static_assert(m.indexIn("hello"_L1) == 0);
+ static_assert(m.indexIn("Hello"_L1) == 0);
+ static_assert(m.indexIn("Hellohello"_L1) == 0);
+ static_assert(m.indexIn("helloHello"_L1) == 0);
+ static_assert(m.indexIn("he"_L1) == -1);
+ static_assert(m.indexIn("hel"_L1) == 0);
+ static_assert(m.indexIn("hellohello"_L1, 2) == 5); // from is 2
+ static_assert(m.indexIn("hellohello"_L1, 3) == 5); // from is 3
+ static_assert(m.indexIn("hellohello"_L1, 6) == -1); // from is 6
+ }
+ {
+ static constexpr auto m = qMakeStaticCaseInsensitiveLatin1StringMatcher("b\xF8");
+ QCOMPARE(m.indexIn("B\xD8"_L1), 0);
+ QCOMPARE(m.indexIn("B\xF8"_L1), 0);
+ QCOMPARE(m.indexIn("b\xD8"_L1), 0);
+ QCOMPARE(m.indexIn("b\xF8"_L1), 0);
+ QCOMPARE(m.indexIn("b\xF8lle"_L1), 0);
+ QCOMPARE(m.indexIn("m\xF8lle"_L1), -1);
+ QCOMPARE(m.indexIn("Si b\xF8"_L1), 3);
+ }
+ {
+ static constexpr auto m = qMakeStaticCaseSensitiveLatin1StringMatcher("b\xF8");
+ QCOMPARE(m.indexIn("B\xD8"_L1), -1);
+ QCOMPARE(m.indexIn("B\xF8"_L1), -1);
+ QCOMPARE(m.indexIn("b\xD8"_L1), -1);
+ QCOMPARE(m.indexIn("b\xF8"_L1), 0);
+ QCOMPARE(m.indexIn("b\xF8lle"_L1), 0);
+ QCOMPARE(m.indexIn("m\xF8lle"_L1), -1);
+ QCOMPARE(m.indexIn("Si b\xF8"_L1), 3);
+ }
+#endif
+}
+
+void tst_QLatin1StringMatcher::interface()
+{
+ QLatin1StringView needle = "abc123"_L1;
+ QByteArray haystackT(500, 'a');
+ haystackT.insert(6, "123");
+ haystackT.insert(31, "abc");
+ haystackT.insert(42, "abc123");
+ haystackT.insert(84, "abc123");
+ QLatin1StringView haystack(haystackT);
+
+ QLatin1StringMatcher matcher1;
+
+ matcher1 = QLatin1StringMatcher(needle, Qt::CaseSensitive);
+ QLatin1StringMatcher matcher2;
+ matcher2.setPattern(needle);
+
+ QLatin1StringMatcher matcher3 = QLatin1StringMatcher(needle, Qt::CaseSensitive);
+ QLatin1StringMatcher matcher4;
+ matcher4 = matcher3;
+
+ QCOMPARE(matcher1.indexIn(haystack), 42);
+ QCOMPARE(matcher2.indexIn(haystack), 42);
+ QCOMPARE(matcher3.indexIn(haystack), 42);
+ QCOMPARE(matcher4.indexIn(haystack), 42);
+
+ QCOMPARE(matcher1.indexIn(haystack, 43), 84);
+ QCOMPARE(matcher1.indexIn(haystack, 85), -1);
+
+ QLatin1StringMatcher matcher5("123"_L1, Qt::CaseSensitive);
+ QCOMPARE(matcher5.indexIn(haystack), 6);
+
+ matcher5 = QLatin1StringMatcher("abc"_L1, Qt::CaseSensitive);
+ QCOMPARE(matcher5.indexIn(haystack), 31);
+
+ matcher5.setPattern(matcher4.pattern());
+ QCOMPARE(matcher5.indexIn(haystack), 42);
+
+ QLatin1StringMatcher matcher6 = matcher5;
+ QCOMPARE(matcher6.indexIn(haystack), 42);
+
+ QLatin1StringMatcher matcher7 = std::move(matcher5);
+ QCOMPARE(matcher7.indexIn(haystack), 42);
+
+ matcher1.setPattern("123"_L1);
+ matcher7 = std::move(matcher1);
+ QCOMPARE(matcher7.indexIn(haystack), 6);
+}
+
+#define LONG_STRING__32 "abcdefghijklmnopqrstuvwxyz012345"
+#define LONG_STRING__64 LONG_STRING__32 LONG_STRING__32
+#define LONG_STRING_128 LONG_STRING__64 LONG_STRING__64
+#define LONG_STRING_256 LONG_STRING_128 LONG_STRING_128
+#define LONG_STRING_512 LONG_STRING_256 LONG_STRING_256
+
+void tst_QLatin1StringMatcher::indexIn()
+{
+ const char p_data[] = { 0x0, 0x0, 0x1 };
+ QLatin1StringView pattern(p_data, sizeof(p_data));
+
+ QByteArray haystackT(8, '\0');
+ haystackT[7] = 0x1;
+ QLatin1StringView haystack(haystackT);
+
+ QLatin1StringMatcher matcher;
+
+ matcher = QLatin1StringMatcher(pattern, Qt::CaseSensitive);
+ QCOMPARE(matcher.indexIn(haystack, 0), 5);
+ QCOMPARE(matcher.indexIn(haystack, 1), 5);
+ QCOMPARE(matcher.indexIn(haystack, 2), 5);
+
+ matcher.setPattern(pattern);
+ QCOMPARE(matcher.indexIn(haystack, 0), 5);
+ QCOMPARE(matcher.indexIn(haystack, 1), 5);
+ QCOMPARE(matcher.indexIn(haystack, 2), 5);
+
+ std::array<char, 256> allChars;
+ for (int i = 0; i < 256; ++i)
+ allChars[i] = char(i);
+
+ matcher = QLatin1StringMatcher(QLatin1StringView(allChars), Qt::CaseSensitive);
+ haystackT = LONG_STRING__32 "x";
+ haystackT += matcher.pattern();
+ haystack = QLatin1StringView(haystackT);
+ QCOMPARE(matcher.indexIn(haystack, 0), 33);
+ QCOMPARE(matcher.indexIn(haystack, 1), 33);
+ QCOMPARE(matcher.indexIn(haystack, 2), 33);
+ QCOMPARE(matcher.indexIn(haystack, 33), 33);
+ QCOMPARE(matcher.indexIn(haystack, 34), -1);
+
+ matcher = QLatin1StringMatcher(QLatin1StringView(LONG_STRING_256), Qt::CaseSensitive);
+ haystackT = QByteArray(LONG_STRING__32 "x");
+ haystackT += matcher.pattern();
+ haystackT += QByteArrayView("Just junk at the end");
+ haystack = QLatin1StringView(haystackT);
+ QCOMPARE(matcher.indexIn(haystack, 0), 33);
+ QCOMPARE(matcher.indexIn(haystack, 1), 33);
+ QCOMPARE(matcher.indexIn(haystack, 2), 33);
+ QCOMPARE(matcher.indexIn(haystack, 33), 33);
+ QCOMPARE(matcher.indexIn(haystack, 34), -1);
+ matcher.setCaseSensitivity(Qt::CaseInsensitive);
+ QCOMPARE(matcher.indexIn(haystack, 0), 33);
+ QCOMPARE(matcher.indexIn(haystack, 1), 33);
+ QCOMPARE(matcher.indexIn(haystack, 2), 33);
+ QCOMPARE(matcher.indexIn(haystack, 33), 33);
+ QCOMPARE(matcher.indexIn(haystack, 34), -1);
+
+ matcher = QLatin1StringMatcher(QLatin1StringView(LONG_STRING_512), Qt::CaseInsensitive);
+ haystackT = QByteArray(LONG_STRING__32 "x");
+ haystackT += matcher.pattern();
+ haystackT += QByteArrayView("Just junk at the end");
+ haystack = QLatin1StringView(haystackT);
+ QCOMPARE(matcher.indexIn(haystack, 0), 33);
+ QCOMPARE(matcher.indexIn(haystack, 1), 33);
+ QCOMPARE(matcher.indexIn(haystack, 2), 33);
+ QCOMPARE(matcher.indexIn(haystack, 33), 33);
+ QCOMPARE(matcher.indexIn(haystack, 34), -1);
+ matcher.setCaseSensitivity(Qt::CaseSensitive);
+ QCOMPARE(matcher.indexIn(haystack, 0), 33);
+ QCOMPARE(matcher.indexIn(haystack, 1), 33);
+ QCOMPARE(matcher.indexIn(haystack, 2), 33);
+ QCOMPARE(matcher.indexIn(haystack, 33), 33);
+ QCOMPARE(matcher.indexIn(haystack, 34), -1);
+
+ matcher = QLatin1StringMatcher(QLatin1StringView(""), Qt::CaseSensitive);
+ haystackT = QByteArray(LONG_STRING__32 "x");
+ haystack = QLatin1StringView(haystackT);
+ QCOMPARE(matcher.indexIn(haystack, 0), 0);
+ QCOMPARE(matcher.indexIn(haystack, 1), 1);
+ QCOMPARE(matcher.indexIn(haystack, 2), 2);
+ QCOMPARE(matcher.indexIn(haystack, 33), 33);
+
+ matcher = QLatin1StringMatcher(QLatin1StringView(""), Qt::CaseInsensitive);
+ haystackT = QByteArray(LONG_STRING__32 "x");
+ haystack = QLatin1StringView(haystackT);
+ QCOMPARE(matcher.indexIn(haystack, 0), 0);
+ QCOMPARE(matcher.indexIn(haystack, 1), 1);
+ QCOMPARE(matcher.indexIn(haystack, 2), 2);
+ QCOMPARE(matcher.indexIn(haystack, 33), 33);
+
+ matcher = QLatin1StringMatcher(QLatin1StringView("m\xF8"), Qt::CaseInsensitive);
+ haystackT = QByteArray("M\xF8m\xF8");
+ haystack = QLatin1StringView(haystackT);
+ QCOMPARE(matcher.indexIn(haystack, 0), 0);
+ QCOMPARE(matcher.indexIn(haystack, 1), 2);
+ QCOMPARE(matcher.indexIn(haystack, 2), 2);
+ QCOMPARE(matcher.indexIn(haystack, 3), -1);
+ matcher.setCaseSensitivity(Qt::CaseSensitive);
+ QCOMPARE(matcher.indexIn(haystack, 0), 2);
+ QCOMPARE(matcher.indexIn(haystack, 1), 2);
+ QCOMPARE(matcher.indexIn(haystack, 2), 2);
+ QCOMPARE(matcher.indexIn(haystack, 3), -1);
+}
+
+void tst_QLatin1StringMatcher::haystacksWithMoreThan4GiBWork()
+{
+#if QT_POINTER_SIZE > 4
+ // use a large needle to trigger long skips in the Boyer-Moore algorithm
+ // (to speed up the test)
+ constexpr std::string_view needle = LONG_STRING_256;
+
+ //
+ // GIVEN: a haystack with more than 4 GiB of data
+ //
+
+ // don't use QByteArray because freeSpaceAtEnd() may break reserve()
+ // semantics and a realloc is the last thing we need here
+ std::string large;
+ QElapsedTimer timer;
+ timer.start();
+ constexpr size_t GiB = 1024 * 1024 * 1024;
+ constexpr size_t BaseSize = 4 * GiB + 1;
+ try {
+ large.reserve(BaseSize + needle.size());
+ large.resize(BaseSize, '\0');
+ large.append(needle);
+ } catch (const std::bad_alloc &) {
+ QSKIP("Could not allocate 4GiB plus a couple hundred bytes of RAM.");
+ }
+ QCOMPARE(large.size(), BaseSize + needle.size());
+ qDebug("created dataset in %lld ms", timer.elapsed());
+
+ using MaybeThread = std::thread;
+
+ //
+ // WHEN: trying to match an occurrence past the 4GiB mark
+ //
+
+ qsizetype dynamicResult;
+
+ auto t = MaybeThread{ [&] {
+ QLatin1StringMatcher m(QLatin1StringView(needle), Qt::CaseSensitive);
+ dynamicResult = m.indexIn(QLatin1StringView(large));
+ } };
+ t.join();
+
+ //
+ // THEN: the result index is not trucated
+ //
+
+ QCOMPARE(dynamicResult, qsizetype(BaseSize));
+#else
+ QSKIP("This test is 64-bit only.");
+#endif
+}
+
+void tst_QLatin1StringMatcher::staticLatin1StringMatcher()
+{
+#ifdef QT_STATIC_BOYER_MOORE_NOT_SUPPORTED
+ QSKIP("Test is only valid on an OS that supports static latin1 string matcher");
+#else
+ {
+ static constexpr auto smatcher = qMakeStaticCaseSensitiveLatin1StringMatcher("Hello");
+ QCOMPARE(smatcher.indexIn("Hello"_L1), 0);
+ QCOMPARE(smatcher.indexIn("Hello, World!"_L1), 0);
+ QCOMPARE(smatcher.indexIn("Hello, World!"_L1, 0), 0);
+ QCOMPARE(smatcher.indexIn("Hello, World!"_L1, 1), -1);
+ QCOMPARE(smatcher.indexIn("aHello, World!"_L1), 1);
+ QCOMPARE(smatcher.indexIn("aaHello, World!"_L1), 2);
+ QCOMPARE(smatcher.indexIn("aaaHello, World!"_L1), 3);
+ QCOMPARE(smatcher.indexIn("aaaaHello, World!"_L1), 4);
+ QCOMPARE(smatcher.indexIn("aaaaaHello, World!"_L1), 5);
+ QCOMPARE(smatcher.indexIn("aaaaaaHello, World!"_L1), 6);
+ QCOMPARE(smatcher.indexIn("HHello, World!"_L1), 1);
+ QCOMPARE(smatcher.indexIn("HeHello, World!"_L1), 2);
+ QCOMPARE(smatcher.indexIn("HelHello, World!"_L1), 3);
+ QCOMPARE(smatcher.indexIn("HellHello, World!"_L1), 4);
+ QCOMPARE(smatcher.indexIn("HellaHello, World!"_L1), 5);
+ QCOMPARE(smatcher.indexIn("HellauHello, World!"_L1), 6);
+ QCOMPARE(smatcher.indexIn("aHella, World!"_L1), -1);
+ QCOMPARE(smatcher.indexIn("aaHella, World!"_L1), -1);
+ QCOMPARE(smatcher.indexIn("aaaHella, World!"_L1), -1);
+ QCOMPARE(smatcher.indexIn("aaaaHella, World!"_L1), -1);
+ QCOMPARE(smatcher.indexIn("aaaaaHella, World!"_L1), -1);
+ QCOMPARE(smatcher.indexIn("aaaaaaHella, World!"_L1), -1);
+
+ QCOMPARE(smatcher.indexIn("aHello"_L1), 1);
+ QCOMPARE(smatcher.indexIn("aaHello"_L1), 2);
+ QCOMPARE(smatcher.indexIn("aaaHello"_L1), 3);
+ QCOMPARE(smatcher.indexIn("aaaaHello"_L1), 4);
+ QCOMPARE(smatcher.indexIn("aaaaaHello"_L1), 5);
+ QCOMPARE(smatcher.indexIn("aaaaaaHello"_L1), 6);
+ QCOMPARE(smatcher.indexIn("HHello"_L1), 1);
+ QCOMPARE(smatcher.indexIn("HeHello"_L1), 2);
+ QCOMPARE(smatcher.indexIn("HelHello"_L1), 3);
+ QCOMPARE(smatcher.indexIn("HellHello"_L1), 4);
+ QCOMPARE(smatcher.indexIn("HellaHello"_L1), 5);
+ QCOMPARE(smatcher.indexIn("HellauHello"_L1), 6);
+ QCOMPARE(smatcher.indexIn("aHella"_L1), -1);
+ QCOMPARE(smatcher.indexIn("aaHella"_L1), -1);
+ QCOMPARE(smatcher.indexIn("aaaHella"_L1), -1);
+ QCOMPARE(smatcher.indexIn("aaaaHella"_L1), -1);
+ QCOMPARE(smatcher.indexIn("aaaaaHella"_L1), -1);
+ QCOMPARE(smatcher.indexIn("aaaaaaHella"_L1), -1);
+
+ constexpr qsizetype found = smatcher.indexIn("Oh Hello"_L1);
+ static_assert(found == 3);
+
+ static_assert(smatcher.indexIn("Hello"_L1) == 0);
+ static_assert(smatcher.indexIn("Hello, World!"_L1) == 0);
+ static_assert(smatcher.indexIn("Hello, World!"_L1, 0) == 0);
+ static_assert(smatcher.indexIn("Hello, World!"_L1, 1) == -1);
+ static_assert(smatcher.indexIn("aHello, World!"_L1) == 1);
+ static_assert(smatcher.indexIn("aaHello, World!"_L1) == 2);
+ static_assert(smatcher.indexIn("aaaHello, World!"_L1) == 3);
+ static_assert(smatcher.indexIn("aaaaHello, World!"_L1) == 4);
+ static_assert(smatcher.indexIn("aaaaaHello, World!"_L1) == 5);
+ static_assert(smatcher.indexIn("aaaaaaHello, World!"_L1) == 6);
+ static_assert(smatcher.indexIn("HHello, World!"_L1) == 1);
+ static_assert(smatcher.indexIn("HeHello, World!"_L1) == 2);
+ static_assert(smatcher.indexIn("HelHello, World!"_L1) == 3);
+ static_assert(smatcher.indexIn("HellHello, World!"_L1) == 4);
+ static_assert(smatcher.indexIn("HellaHello, World!"_L1) == 5);
+ static_assert(smatcher.indexIn("HellauHello, World!"_L1) == 6);
+ static_assert(smatcher.indexIn("aHella, World!"_L1) == -1);
+ static_assert(smatcher.indexIn("aaHella, World!"_L1) == -1);
+ static_assert(smatcher.indexIn("aaaHella, World!"_L1) == -1);
+ static_assert(smatcher.indexIn("aaaaHella, World!"_L1) == -1);
+ static_assert(smatcher.indexIn("aaaaaHella, World!"_L1) == -1);
+ static_assert(smatcher.indexIn("aaaaaaHella, World!"_L1) == -1);
+
+ static_assert(smatcher.indexIn("aHello"_L1) == 1);
+ static_assert(smatcher.indexIn("aaHello"_L1) == 2);
+ static_assert(smatcher.indexIn("aaaHello"_L1) == 3);
+ static_assert(smatcher.indexIn("aaaaHello"_L1) == 4);
+ static_assert(smatcher.indexIn("aaaaaHello"_L1) == 5);
+ static_assert(smatcher.indexIn("aaaaaaHello"_L1) == 6);
+ static_assert(smatcher.indexIn("HHello"_L1) == 1);
+ static_assert(smatcher.indexIn("HeHello"_L1) == 2);
+ static_assert(smatcher.indexIn("HelHello"_L1) == 3);
+ static_assert(smatcher.indexIn("HellHello"_L1) == 4);
+ static_assert(smatcher.indexIn("HellaHello"_L1) == 5);
+ static_assert(smatcher.indexIn("HellauHello"_L1) == 6);
+ static_assert(smatcher.indexIn("aHella"_L1) == -1);
+ static_assert(smatcher.indexIn("aaHella"_L1) == -1);
+ static_assert(smatcher.indexIn("aaaHella"_L1) == -1);
+ static_assert(smatcher.indexIn("aaaaHella"_L1) == -1);
+ static_assert(smatcher.indexIn("aaaaaHella"_L1) == -1);
+ static_assert(smatcher.indexIn("aaaaaaHella"_L1) == -1);
+
+ static_assert(smatcher.indexIn("aHello"_L1) == 1);
+ static_assert(smatcher.indexIn("no"_L1) == -1);
+ static_assert(smatcher.indexIn("miss"_L1) == -1);
+ static_assert(smatcher.indexIn("amiss"_L1) == -1);
+ static_assert(smatcher.indexIn("olleH"_L1) == -1);
+ static_assert(smatcher.indexIn("HellNo"_L1) == -1);
+ static_assert(smatcher.indexIn("lloHello"_L1) == 3);
+ static_assert(smatcher.indexIn("lHello"_L1) == 1);
+ static_assert(smatcher.indexIn("oHello"_L1) == 1);
+ }
+ {
+ static constexpr auto smatcher =
+ qMakeStaticCaseSensitiveLatin1StringMatcher(LONG_STRING_256);
+
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("a" LONG_STRING_256)), 1);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("aa" LONG_STRING_256)), 2);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("aaa" LONG_STRING_256)), 3);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("aaaa" LONG_STRING_256)), 4);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("aaaaa" LONG_STRING_256)), 5);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("aaaaaa" LONG_STRING_256)), 6);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("a" LONG_STRING_256 "a")), 1);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("aa" LONG_STRING_256 "a")), 2);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("aaa" LONG_STRING_256 "a")), 3);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("aaaa" LONG_STRING_256 "a")), 4);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("aaaaa" LONG_STRING_256 "a")), 5);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView("aaaaaa" LONG_STRING_256 "a")), 6);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView(LONG_STRING__32 "x" LONG_STRING_256)), 33);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView(LONG_STRING__64 "x" LONG_STRING_256)), 65);
+ QCOMPARE(smatcher.indexIn(QLatin1StringView(LONG_STRING_128 "x" LONG_STRING_256)), 129);
+
+ static_assert(smatcher.indexIn(QLatin1StringView("a" LONG_STRING_256)) == 1);
+ static_assert(smatcher.indexIn(QLatin1StringView("aa" LONG_STRING_256)) == 2);
+ static_assert(smatcher.indexIn(QLatin1StringView("aaa" LONG_STRING_256)) == 3);
+ static_assert(smatcher.indexIn(QLatin1StringView("aaaa" LONG_STRING_256)) == 4);
+ static_assert(smatcher.indexIn(QLatin1StringView("aaaaa" LONG_STRING_256)) == 5);
+ static_assert(smatcher.indexIn(QLatin1StringView("aaaaaa" LONG_STRING_256)) == 6);
+ static_assert(smatcher.indexIn(QLatin1StringView("a" LONG_STRING_256 "a")) == 1);
+ static_assert(smatcher.indexIn(QLatin1StringView("aa" LONG_STRING_256 "a")) == 2);
+ static_assert(smatcher.indexIn(QLatin1StringView("aaa" LONG_STRING_256 "a")) == 3);
+ static_assert(smatcher.indexIn(QLatin1StringView("aaaa" LONG_STRING_256 "a")) == 4);
+ static_assert(smatcher.indexIn(QLatin1StringView("aaaaa" LONG_STRING_256 "a")) == 5);
+ static_assert(smatcher.indexIn(QLatin1StringView("aaaaaa" LONG_STRING_256 "a")) == 6);
+ static_assert(smatcher.indexIn(QLatin1StringView(LONG_STRING__32 "x" LONG_STRING_256))
+ == 33);
+ static_assert(smatcher.indexIn(QLatin1StringView(LONG_STRING__64 "x" LONG_STRING_256))
+ == 65);
+ static_assert(smatcher.indexIn(QLatin1StringView(LONG_STRING_128 "x" LONG_STRING_256))
+ == 129);
+ }
+#endif
+}
+
+#undef LONG_STRING_512
+#undef LONG_STRING_256
+#undef LONG_STRING_128
+#undef LONG_STRING__64
+#undef LONG_STRING__32
+
+QTEST_APPLESS_MAIN(tst_QLatin1StringMatcher)
+#include "tst_qlatin1stringmatcher.moc"
diff --git a/tests/auto/corelib/text/qlatin1stringview/.gitignore b/tests/auto/corelib/text/qlatin1stringview/.gitignore
new file mode 100644
index 0000000000..8156eca574
--- /dev/null
+++ b/tests/auto/corelib/text/qlatin1stringview/.gitignore
@@ -0,0 +1 @@
+tst_qlatin1stringview
diff --git a/tests/auto/corelib/text/qlatin1stringview/CMakeLists.txt b/tests/auto/corelib/text/qlatin1stringview/CMakeLists.txt
new file mode 100644
index 0000000000..7a3b493789
--- /dev/null
+++ b/tests/auto/corelib/text/qlatin1stringview/CMakeLists.txt
@@ -0,0 +1,22 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qlatin1stringview Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qlatin1stringview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qlatin1stringview
+ SOURCES
+ tst_qlatin1stringview.cpp
+ DEFINES
+ QT_NO_CAST_TO_ASCII
+)
+
+## Scopes:
+#####################################################################
diff --git a/tests/auto/corelib/text/qlatin1stringview/tst_qlatin1stringview.cpp b/tests/auto/corelib/text/qlatin1stringview/tst_qlatin1stringview.cpp
new file mode 100644
index 0000000000..e719c81731
--- /dev/null
+++ b/tests/auto/corelib/text/qlatin1stringview/tst_qlatin1stringview.cpp
@@ -0,0 +1,519 @@
+// Copyright (C) 2015 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
+
+#include <QTest>
+
+#include <QString>
+
+// Preserve QLatin1StringView-ness (QVariant(QLatin1StringView) creates a QVariant::String):
+struct QLatin1StringViewContainer {
+ QLatin1StringView l1;
+};
+QT_BEGIN_NAMESPACE
+Q_DECLARE_TYPEINFO(QLatin1StringViewContainer, Q_RELOCATABLE_TYPE);
+QT_END_NAMESPACE
+Q_DECLARE_METATYPE(QLatin1StringViewContainer)
+
+class tst_QLatin1StringView : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void constExpr();
+ void construction();
+ void userDefinedLiterals();
+ void at();
+ void arg() const;
+ void midLeftRight();
+ void nullString();
+ void emptyString();
+ void iterators();
+ void relationalOperators_data();
+ void relationalOperators();
+ void count();
+ void indexOf_data();
+ void indexOf();
+};
+
+void tst_QLatin1StringView::constExpr()
+{
+ // compile-time checks
+ {
+ constexpr QLatin1StringView l1s;
+ static_assert(l1s.size() == 0);
+ static_assert(l1s.isNull());
+ static_assert(l1s.empty());
+ static_assert(l1s.isEmpty());
+ static_assert(l1s.latin1() == nullptr);
+
+ constexpr QLatin1StringView l1s2(l1s.latin1(), l1s.latin1() + l1s.size());
+ static_assert(l1s2.isNull());
+ static_assert(l1s2.empty());
+ }
+ {
+ constexpr QLatin1StringView l1s = nullptr;
+ static_assert(l1s.size() == 0);
+ static_assert(l1s.isNull());
+ static_assert(l1s.empty());
+ static_assert(l1s.isEmpty());
+ static_assert(l1s.latin1() == nullptr);
+ }
+ {
+ constexpr QLatin1StringView l1s("");
+ static_assert(l1s.size() == 0);
+ static_assert(!l1s.isNull());
+ static_assert(l1s.empty());
+ static_assert(l1s.isEmpty());
+ static_assert(l1s.latin1() != nullptr);
+
+ constexpr QLatin1StringView l1s2(l1s.latin1(), l1s.latin1() + l1s.size());
+ static_assert(!l1s2.isNull());
+ static_assert(l1s2.empty());
+ }
+ {
+ static_assert(QLatin1StringView("Hello").size() == 5);
+ constexpr QLatin1StringView l1s("Hello");
+ static_assert(l1s.size() == 5);
+ static_assert(!l1s.empty());
+ static_assert(!l1s.isEmpty());
+ static_assert(!l1s.isNull());
+ static_assert(*l1s.latin1() == 'H');
+ static_assert(l1s[0] == QLatin1Char('H'));
+ static_assert(l1s.at(0) == QLatin1Char('H'));
+ static_assert(l1s.front() == QLatin1Char('H'));
+ static_assert(l1s.first() == QLatin1Char('H'));
+ static_assert(l1s[4] == QLatin1Char('o'));
+ static_assert(l1s.at(4) == QLatin1Char('o'));
+ static_assert(l1s.back() == QLatin1Char('o'));
+ static_assert(l1s.last() == QLatin1Char('o'));
+
+ constexpr QLatin1StringView l1s2(l1s.latin1(), l1s.latin1() + l1s.size());
+ static_assert(!l1s2.isNull());
+ static_assert(!l1s2.empty());
+ static_assert(l1s2.size() == 5);
+ }
+}
+
+void tst_QLatin1StringView::construction()
+{
+ {
+ const char str[6] = "hello";
+ QLatin1StringView l1s(str);
+ QCOMPARE(l1s.size(), 5);
+ QCOMPARE(l1s.latin1(), reinterpret_cast<const void *>(&str[0]));
+ QCOMPARE(l1s.latin1(), "hello");
+
+ QLatin1StringView s1 = {str, 5};
+ QCOMPARE(s1, l1s);
+ QLatin1StringView s2 = {str, str + 5};
+ QCOMPARE(s2, l1s);
+
+ QByteArrayView helloView(str);
+ helloView = helloView.first(4);
+ l1s = QLatin1StringView(helloView);
+ QCOMPARE(l1s.latin1(), helloView.data());
+ QCOMPARE(l1s.latin1(), reinterpret_cast<const void *>(helloView.data()));
+ QCOMPARE(l1s.size(), helloView.size());
+ }
+
+ {
+ const QByteArray helloArray("hello");
+ QLatin1StringView l1s(helloArray);
+ QCOMPARE(l1s.latin1(), helloArray.data());
+ QCOMPARE(l1s.size(), helloArray.size());
+
+ QByteArrayView helloView(helloArray);
+ helloView = helloView.first(4);
+ l1s = QLatin1StringView(helloView);
+ QCOMPARE(l1s.latin1(), helloView.data());
+ QCOMPARE(l1s.size(), helloView.size());
+ }
+}
+
+void tst_QLatin1StringView::userDefinedLiterals()
+{
+ {
+ using namespace Qt::Literals::StringLiterals;
+
+ auto str = "abcd"_L1;
+ static_assert(std::is_same_v<decltype(str), QLatin1StringView>);
+ QCOMPARE(str.size(), 4);
+ QCOMPARE(str, QLatin1StringView("abcd"));
+ QCOMPARE(str.latin1(), "abcd");
+ QCOMPARE("abcd"_L1, str.latin1());
+ QCOMPARE("M\xE5rten"_L1, QLatin1StringView("M\xE5rten"));
+
+ auto ch = 'a'_L1;
+ static_assert(std::is_same_v<decltype(ch), QLatin1Char>);
+ QCOMPARE(ch, QLatin1Char('a'));
+ QCOMPARE(ch.toLatin1(), 'a');
+ QCOMPARE('a'_L1, ch.toLatin1());
+ QCOMPARE('\xE5'_L1, QLatin1Char('\xE5'));
+ }
+ {
+ using namespace Qt::Literals;
+
+ auto str = "abcd"_L1;
+ static_assert(std::is_same_v<decltype(str), QLatin1StringView>);
+ QCOMPARE(str, QLatin1StringView("abcd"));
+
+ auto ch = 'a'_L1;
+ static_assert(std::is_same_v<decltype(ch), QLatin1Char>);
+ QCOMPARE(ch, QLatin1Char('a'));
+ }
+ {
+ using namespace Qt;
+
+ auto str = "abcd"_L1;
+ static_assert(std::is_same_v<decltype(str), QLatin1StringView>);
+ QCOMPARE(str, QLatin1StringView("abcd"));
+
+ auto ch = 'a'_L1;
+ static_assert(std::is_same_v<decltype(ch), QLatin1Char>);
+ QCOMPARE(ch, QLatin1Char('a'));
+ }
+}
+
+void tst_QLatin1StringView::at()
+{
+ const QLatin1StringView l1("Hello World");
+ QCOMPARE(l1.at(0), QLatin1Char('H'));
+ QCOMPARE(l1.at(l1.size() - 1), QLatin1Char('d'));
+ QCOMPARE(l1[0], QLatin1Char('H'));
+ QCOMPARE(l1[l1.size() - 1], QLatin1Char('d'));
+}
+
+void tst_QLatin1StringView::arg() const
+{
+#define CHECK1(pattern, arg1, expected) \
+ do { \
+ auto p = QLatin1StringView(pattern); \
+ QCOMPARE(p.arg(QLatin1StringView(arg1)), expected); \
+ QCOMPARE(p.arg(u"" arg1), expected); \
+ QCOMPARE(p.arg(QStringLiteral(arg1)), expected); \
+ QCOMPARE(p.arg(QString(QLatin1StringView(arg1))), expected); \
+ } while (false) \
+ /*end*/
+#define CHECK2(pattern, arg1, arg2, expected) \
+ do { \
+ auto p = QLatin1StringView(pattern); \
+ QCOMPARE(p.arg(QLatin1StringView(arg1), QLatin1StringView(arg2)), expected); \
+ QCOMPARE(p.arg(u"" arg1, QLatin1StringView(arg2)), expected); \
+ QCOMPARE(p.arg(QLatin1StringView(arg1), u"" arg2), expected); \
+ QCOMPARE(p.arg(u"" arg1, u"" arg2), expected); \
+ } while (false) \
+ /*end*/
+
+ CHECK1("", "World", "");
+ CHECK1("%1", "World", "World");
+ CHECK1("!%1?", "World", "!World?");
+ CHECK1("%1%1", "World", "WorldWorld");
+ CHECK1("%1%2", "World", "World%2");
+ CHECK1("%2%1", "World", "%2World");
+
+ CHECK2("", "Hello", "World", "");
+ CHECK2("%1", "Hello", "World", "Hello");
+ CHECK2("!%1, %2?", "Hello", "World", "!Hello, World?");
+ CHECK2("%1%1", "Hello", "World", "HelloHello");
+ CHECK2("%1%2", "Hello", "World", "HelloWorld");
+ CHECK2("%2%1", "Hello", "World", "WorldHello");
+
+#undef CHECK2
+#undef CHECK1
+
+ QCOMPARE(QLatin1StringView(" %2 %2 %1 %3 ").arg(QLatin1Char('c'), QChar::CarriageReturn, u'C'),
+ " \r \r c C ");
+}
+
+void tst_QLatin1StringView::midLeftRight()
+{
+ const QLatin1StringView l1("Hello World");
+ QCOMPARE(l1.mid(0), l1);
+ QCOMPARE(l1.mid(0, l1.size()), l1);
+ QCOMPARE(l1.left(l1.size()), l1);
+ QCOMPARE(l1.right(l1.size()), l1);
+
+ QCOMPARE(l1.mid(6), QLatin1StringView("World"));
+ QCOMPARE(l1.mid(6, 5), QLatin1StringView("World"));
+ QCOMPARE(l1.right(5), QLatin1StringView("World"));
+
+ QCOMPARE(l1.mid(6, 1), QLatin1StringView("W"));
+ QCOMPARE(l1.right(5).left(1), QLatin1StringView("W"));
+
+ QCOMPARE(l1.left(5), QLatin1StringView("Hello"));
+}
+
+void tst_QLatin1StringView::nullString()
+{
+ // default ctor
+ {
+ QLatin1StringView l1;
+ QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(nullptr));
+ QCOMPARE(l1.size(), 0);
+
+ QString s = l1;
+ QVERIFY(s.isNull());
+ }
+
+ // from nullptr
+ {
+ const char *null = nullptr;
+ QLatin1StringView l1(null);
+ QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(nullptr));
+ QCOMPARE(l1.size(), 0);
+
+ QString s = l1;
+ QVERIFY(s.isNull());
+ }
+
+ // from null QByteArray
+ {
+ const QByteArray null;
+ QVERIFY(null.isNull());
+
+ QLatin1StringView l1(null);
+ QEXPECT_FAIL("", "null QByteArrays become non-null QLatin1Strings...", Continue);
+ QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(nullptr));
+ QCOMPARE(l1.size(), 0);
+
+ QString s = l1;
+ QEXPECT_FAIL("", "null QByteArrays become non-null QLatin1Strings become non-null QStrings...", Continue);
+ QVERIFY(s.isNull());
+ }
+}
+
+void tst_QLatin1StringView::emptyString()
+{
+ {
+ const char *empty = "";
+ QLatin1StringView l1(empty);
+ QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(empty));
+ QCOMPARE(l1.size(), 0);
+
+ QString s = l1;
+ QVERIFY(s.isEmpty());
+ QVERIFY(!s.isNull());
+ }
+
+ {
+ const char *notEmpty = "foo";
+ QLatin1StringView l1(notEmpty, qsizetype(0));
+ QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(notEmpty));
+ QCOMPARE(l1.size(), 0);
+
+ QString s = l1;
+ QVERIFY(s.isEmpty());
+ QVERIFY(!s.isNull());
+ }
+
+ {
+ const QByteArray empty = "";
+ QLatin1StringView l1(empty);
+ QCOMPARE(static_cast<const void*>(l1.data()), static_cast<const void*>(empty.constData()));
+ QCOMPARE(l1.size(), 0);
+
+ QString s = l1;
+ QVERIFY(s.isEmpty());
+ QVERIFY(!s.isNull());
+ }
+}
+
+void tst_QLatin1StringView::iterators()
+{
+ QLatin1StringView hello("hello");
+ QLatin1StringView olleh("olleh");
+
+ QVERIFY(std::equal(hello.begin(), hello.end(),
+ olleh.rbegin()));
+ QVERIFY(std::equal(hello.rbegin(), hello.rend(),
+ QT_MAKE_CHECKED_ARRAY_ITERATOR(olleh.begin(), olleh.size())));
+
+ QVERIFY(std::equal(hello.cbegin(), hello.cend(),
+ olleh.rbegin()));
+ QVERIFY(std::equal(hello.crbegin(), hello.crend(),
+ QT_MAKE_CHECKED_ARRAY_ITERATOR(olleh.begin(), olleh.size())));
+}
+
+void tst_QLatin1StringView::relationalOperators_data()
+{
+ QTest::addColumn<QLatin1StringViewContainer>("lhs");
+ QTest::addColumn<int>("lhsOrderNumber");
+ QTest::addColumn<QLatin1StringViewContainer>("rhs");
+ QTest::addColumn<int>("rhsOrderNumber");
+
+ struct Data {
+ QLatin1StringView l1;
+ int order;
+ } data[] = {
+ { QLatin1StringView(), 0 },
+ { QLatin1StringView(""), 0 },
+ { QLatin1StringView("a"), 1 },
+ { QLatin1StringView("aa"), 2 },
+ { QLatin1StringView("b"), 3 },
+ };
+
+ for (Data *lhs = data; lhs != data + sizeof data / sizeof *data; ++lhs) {
+ for (Data *rhs = data; rhs != data + sizeof data / sizeof *data; ++rhs) {
+ QLatin1StringViewContainer l = { lhs->l1 }, r = { rhs->l1 };
+ QTest::addRow("\"%s\" <> \"%s\"",
+ lhs->l1.data() ? lhs->l1.data() : "nullptr",
+ rhs->l1.data() ? rhs->l1.data() : "nullptr")
+ << l << lhs->order << r << rhs->order;
+ }
+ }
+}
+
+void tst_QLatin1StringView::relationalOperators()
+{
+ QFETCH(QLatin1StringViewContainer, lhs);
+ QFETCH(int, lhsOrderNumber);
+ QFETCH(QLatin1StringViewContainer, rhs);
+ QFETCH(int, rhsOrderNumber);
+
+#define CHECK(op) \
+ QCOMPARE(lhs.l1 op rhs.l1, lhsOrderNumber op rhsOrderNumber) \
+ /*end*/
+ CHECK(==);
+ CHECK(!=);
+ CHECK(< );
+ CHECK(> );
+ CHECK(<=);
+ CHECK(>=);
+#undef CHECK
+}
+
+void tst_QLatin1StringView::count()
+{
+ QLatin1StringView a("ABCDEFGHIEfGEFG");
+ QCOMPARE(a.size(), 15);
+ QCOMPARE(a.count('A'), 1);
+ QCOMPARE(a.count('Z'), 0);
+ QCOMPARE(a.count('E'), 3);
+ QCOMPARE(a.count('F'), 2);
+ QCOMPARE(a.count('F', Qt::CaseInsensitive), 3);
+ QCOMPARE(a.count(QLatin1StringView("FG")), 2);
+ QCOMPARE(a.count(QLatin1StringView("FG"), Qt::CaseInsensitive), 3);
+ QCOMPARE(a.count(QLatin1StringView(), Qt::CaseInsensitive), 16);
+ QCOMPARE(a.count(QLatin1StringView(""), Qt::CaseInsensitive), 16);
+
+ QLatin1StringView nullStr;
+ QCOMPARE(nullStr.count('A'), 0);
+ QCOMPARE(nullStr.count(QLatin1StringView("AB")), 0);
+ QCOMPARE(nullStr.count(QLatin1StringView()), 1);
+ QCOMPARE(nullStr.count(QLatin1StringView("")), 1);
+
+ QLatin1StringView emptyStr("");
+ QCOMPARE(emptyStr.count('A'), 0);
+ QCOMPARE(emptyStr.count(QLatin1StringView("AB")), 0);
+ QCOMPARE(emptyStr.count(QLatin1StringView()), 1);
+ QCOMPARE(emptyStr.count(QLatin1StringView("")), 1);
+
+ using namespace Qt::Literals::StringLiterals;
+ QCOMPARE("a\0b"_L1.count(QChar::SpecialCharacter::LineSeparator), 0);
+}
+
+void tst_QLatin1StringView::indexOf_data()
+{
+ using namespace Qt::Literals::StringLiterals;
+
+ QTest::addColumn<QLatin1StringView>("needle");
+ QTest::addColumn<QLatin1StringView>("haystack");
+ QTest::addColumn<int>("from");
+ QTest::addColumn<int>("indexCaseSensitive");
+ QTest::addColumn<int>("indexCaseInsensitive");
+
+ // Should never trigger Boyer Moore algorithm
+ QTest::newRow("Single letter match start")
+ << QLatin1StringView("A") << QLatin1StringView("ABCDEF") << 0 << 0 << 0;
+ QTest::newRow("Single letter match second letter")
+ << QLatin1StringView("B") << QLatin1StringView("ABCDEF") << 0 << 1 << 1;
+ QTest::newRow("Single letter mismatch")
+ << QLatin1StringView("G") << QLatin1StringView("ABCDEF") << 0 << -1 << -1;
+ QTest::newRow("Single letter case sensitive start")
+ << QLatin1StringView("a") << QLatin1StringView("ABCDEF") << 0 << -1 << 0;
+ QTest::newRow("Single letter case sensitive end")
+ << QLatin1StringView("f") << QLatin1StringView("ABCDEF") << 0 << -1 << 5;
+ QTest::newRow("Single letter different match depending on case")
+ << QLatin1StringView("a") << QLatin1StringView("ABCabc") << 0 << 3 << 0;
+ QTest::newRow("Single letter different match depending on case from 2")
+ << QLatin1StringView("a") << QLatin1StringView("ABCABCabc") << 2 << 6 << 3;
+ QTest::newRow("Single letter negative from")
+ << QLatin1StringView("a") << QLatin1StringView("abcabc") << -3 << 3 << 3;
+ QTest::newRow("Single letter non-ASCII") // searching for "ø" in "Øø"
+ << "\xf8"_L1
+ << "\xd8\xf8"_L1 << 0 << 1 << 0;
+ QTest::newRow("Single uppercase letter")
+ << QLatin1StringView("A") << QLatin1StringView("aA") << 0 << 1 << 0;
+
+ // Might trigger Boyer Moore algorithm
+ QTest::newRow("Small match start")
+ << QLatin1StringView("ABC") << QLatin1StringView("ABCDEF") << 0 << 0 << 0;
+ QTest::newRow("Small match second letter")
+ << QLatin1StringView("BCD") << QLatin1StringView("ABCDEF") << 0 << 1 << 1;
+ QTest::newRow("Small mismatch")
+ << QLatin1StringView("EFG") << QLatin1StringView("ABCDEF") << 0 << -1 << -1;
+ QTest::newRow("Small case sensitive start")
+ << QLatin1StringView("abc") << QLatin1StringView("ABCDEF") << 0 << -1 << 0;
+ QTest::newRow("Small case sensitive end")
+ << QLatin1StringView("DEF") << QLatin1StringView("abcdef") << 0 << -1 << 3;
+ QTest::newRow("Small different match depending on case")
+ << QLatin1StringView("abcabc") << QLatin1StringView("!!ABCabcabcABC") << 0 << 5 << 2;
+ QTest::newRow("Small different match depending on case from 2")
+ << QLatin1StringView("abcabc") << QLatin1StringView("ABCABCabcabcABC") << 2 << 6 << 3;
+ QTest::newRow("Small negative from") << QLatin1StringView("negative")
+ << QLatin1StringView("negativenegative") << -8 << 8 << 8;
+ QTest::newRow("Small non-ASCII") // searching for "løve" in "LØVEløve"
+ << "l\xf8ve"_L1
+ << "L\xd8VEl\xf8ve"_L1 << 0 << 4 << 0;
+ QTest::newRow("Small skip test")
+ << QLatin1StringView("ABBB") << QLatin1StringView("ABABBB") << 0 << 2 << 2;
+ QTest::newRow("Small uppercase needle")
+ << QLatin1StringView("ABCDEF") << QLatin1StringView("abcdefABCDEF") << 0 << 6 << 0;
+
+ // Should trigger Boyer Moore algorithm
+ QTest::newRow("Medium match start")
+ << QLatin1StringView("ABCDEFGHIJKLMNOP")
+ << QLatin1StringView("ABCDEFGHIJKLMNOPQRSTUVWXYZ") << 0 << 0 << 0;
+ QTest::newRow("Medium match second letter")
+ << QLatin1StringView("BCDEFGHIJKLMNOPQ")
+ << QLatin1StringView("ABCDEFGHIJKLMNOPQRSTUVWXYZ") << 0 << 1 << 1;
+ QTest::newRow("Medium mismatch")
+ << QLatin1StringView("PONMLKJIHGFEDCBA")
+ << QLatin1StringView("ABCDEFGHIJKLMNOPQRSTUVWXYZ") << 0 << -1 << -1;
+ QTest::newRow("Medium case sensitive start")
+ << QLatin1StringView("abcdefghijklmnopq")
+ << QLatin1StringView("ABCDEFGHIJKLMNOPQRSTUVWXYZ") << 0 << -1 << 0;
+ QTest::newRow("Medium case sensitive second letter")
+ << QLatin1StringView("BCDEFGHIJKLMNOPQR")
+ << QLatin1StringView("abcdefghijklmnopqrstuvxyz") << 0 << -1 << 1;
+ QTest::newRow("Medium different match depending on case")
+ << QLatin1StringView("testingtesting")
+ << QLatin1StringView("TESTINGtestingtestingTESTING") << 0 << 7 << 0;
+ QTest::newRow("Medium different match depending on case from 2")
+ << QLatin1StringView("testingtesting")
+ << QLatin1StringView("TESTINGTESTINGtestingtestingTESTING") << 2 << 14 << 7;
+ QTest::newRow("Medium negative from")
+ << QLatin1StringView("abcdefghijklmnop")
+ << QLatin1StringView("abcdefghijklmnopabcdefghijklmnop") << -16 << 16 << 16;
+ QTest::newRow("Medium non-ASCII") // searching for "dampfschiffahrtsgesellschaftskapitän"
+ << "dampfschiffahrtsgesellschaftskapit\xe4n"_L1
+ << "DAMPFSCHIFFAHRTSGESELLSCHAFTSKAPIT\xc4Ndampfschiffahrtsgesellschaftskapit\xe4n"_L1
+ << 0 << 36 << 0;
+ QTest::newRow("Medium skip test") << QLatin1StringView("ABBBBBBBBBBBBBBB")
+ << QLatin1StringView("ABABBBBBBBBBBBBBBB") << 0 << 2 << 2;
+}
+
+void tst_QLatin1StringView::indexOf()
+{
+ QFETCH(QLatin1StringView, needle);
+ QFETCH(QLatin1StringView, haystack);
+ QFETCH(int, from);
+ QFETCH(int, indexCaseSensitive);
+ QFETCH(int, indexCaseInsensitive);
+ QCOMPARE(haystack.indexOf(needle, from, Qt::CaseSensitive), (qsizetype)indexCaseSensitive);
+ QCOMPARE(haystack.indexOf(needle, from, Qt::CaseInsensitive), (qsizetype)indexCaseInsensitive);
+}
+
+QTEST_APPLESS_MAIN(tst_QLatin1StringView)
+
+#include "tst_qlatin1stringview.moc"
diff --git a/tests/auto/corelib/text/qlocale/CMakeLists.txt b/tests/auto/corelib/text/qlocale/CMakeLists.txt
index 363baa8d52..3e6693d12b 100644
--- a/tests/auto/corelib/text/qlocale/CMakeLists.txt
+++ b/tests/auto/corelib/text/qlocale/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qlocale.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_qlocale LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(test)
add_subdirectory(syslocaleapp)
diff --git a/tests/auto/corelib/text/qlocale/syslocaleapp/CMakeLists.txt b/tests/auto/corelib/text/qlocale/syslocaleapp/CMakeLists.txt
index 3b7df027d4..0a5bce6183 100644
--- a/tests/auto/corelib/text/qlocale/syslocaleapp/CMakeLists.txt
+++ b/tests/auto/corelib/text/qlocale/syslocaleapp/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from syslocaleapp.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## syslocaleapp Binary:
diff --git a/tests/auto/corelib/text/qlocale/syslocaleapp/syslocaleapp.cpp b/tests/auto/corelib/text/qlocale/syslocaleapp/syslocaleapp.cpp
index 1e1bcc8c5f..44c6ce3aa6 100644
--- a/tests/auto/corelib/text/qlocale/syslocaleapp/syslocaleapp.cpp
+++ b/tests/auto/corelib/text/qlocale/syslocaleapp/syslocaleapp.cpp
@@ -1,40 +1,21 @@
-/****************************************************************************
-**
-** 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 <QLocale>
+#include <QCalendar>
#include <QCoreApplication>
#include <QTextStream>
int main(int argc, char** argv)
{
QCoreApplication app(argc, argv);
- QLocale l;
+ // Setting a default locale should not mess up the system one.
+ QLocale::setDefault(QLocale::Persian);
+ QLocale l = QLocale::system();
+ // A non-Roman calendar will use CLDR data instead of system data, so needs
+ // to have got the right locale index to look that up.
+ QCalendar cal = QCalendar(QCalendar::System::Jalali);
QTextStream str(stdout);
- str << l.name();
+ str << l.name() << ' ' << cal.standaloneMonthName(l, 2);
return 0;
}
diff --git a/tests/auto/corelib/text/qlocale/test/CMakeLists.txt b/tests/auto/corelib/text/qlocale/test/CMakeLists.txt
index faf90c0a8e..54ab71ea81 100644
--- a/tests/auto/corelib/text/qlocale/test/CMakeLists.txt
+++ b/tests/auto/corelib/text/qlocale/test/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qlocale Test:
#####################################################################
@@ -6,7 +9,7 @@ qt_internal_add_test(tst_qlocale
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../tst_qlocale.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
@@ -14,7 +17,7 @@ qt_internal_add_test(tst_qlocale
#####################################################################
qt_internal_extend_target(tst_qlocale CONDITION embedded
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
index 52224701f6..946a7e6821 100644
--- a/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
+++ b/tests/auto/corelib/text/qlocale/tst_qlocale.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QLocale>
@@ -46,16 +21,14 @@
#include <float.h>
#include <math.h>
+#include <fenv.h>
-#if defined(Q_OS_LINUX) && !defined(__UCLIBC__)
-# include <fenv.h>
-# define QT_USE_FENV
-#endif
-
-#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
+#if defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN)
# include <stdlib.h>
#endif
+using namespace Qt::StringLiterals;
+
Q_DECLARE_METATYPE(QLocale::FormatType)
class tst_QLocale : public QObject
@@ -70,15 +43,18 @@ private slots:
#if defined(Q_OS_WIN)
void windowsDefaultLocale();
#endif
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
void macDefaultLocale();
#endif
+ void ctor_data();
void ctor();
- void emptyCtor_data();
- void emptyCtor();
+ void ctor_match_land();
+ void systemLocale_data();
+ void systemLocale();
void consistentC();
void matchingLocales();
+
void stringToDouble_data();
void stringToDouble();
void stringToFloat_data();
@@ -90,10 +66,11 @@ private slots:
void long_long_conversion_data();
void long_long_conversion();
void long_long_conversion_extra();
- void testInfAndNan();
+ void infNaN();
void fpExceptions();
void negativeZero_data();
void negativeZero();
+
void dayOfWeek();
void dayOfWeek_data();
void formatDate();
@@ -105,6 +82,15 @@ private slots:
void formatTimeZone();
void toDateTime_data();
void toDateTime();
+ void toDate_data();
+ void toDate();
+ void toTime_data();
+ void toTime();
+
+ void doubleRoundTrip_data();
+ void doubleRoundTrip();
+ void integerRoundTrip_data();
+ void integerRoundTrip();
void negativeNumbers();
void numberOptions();
void dayName_data();
@@ -119,6 +105,15 @@ private slots:
void monthName();
void standaloneMonthName();
+ void languageToString_data();
+ void languageToString();
+ void scriptToString_data();
+ void scriptToString();
+ void territoryToString_data();
+ void territoryToString();
+ void endonym_data();
+ void endonym();
+
void defaultNumberingSystem_data();
void defaultNumberingSystem();
@@ -143,14 +138,18 @@ private slots:
void bcp47Name_data();
void bcp47Name();
- void systemLocale_data();
- void systemLocale();
-
#ifndef QT_NO_SYSTEMLOCALE
+# ifdef QT_BUILD_INTERNAL
+ void mySystemLocale_data();
+ void mySystemLocale();
+# endif
+
void systemLocaleDayAndMonthNames_data();
void systemLocaleDayAndMonthNames();
#endif
+ void numberGrouping_data();
+ void numberGrouping();
void numberGroupingIndia();
void numberFormatChakma();
@@ -171,37 +170,40 @@ private:
QString m_decimal, m_thousand, m_sdate, m_ldate, m_time;
QString m_sysapp;
QStringList cleanEnv;
- bool europeanTimeZone;
+ const bool europeanTimeZone;
void toReal_data();
using TransientLocale = QTestLocaleChange::TransientLocale;
};
tst_QLocale::tst_QLocale()
+ // Some tests are specific to CET, test if it applies:
+ : europeanTimeZone(
+ QDate(2013, 1, 1).startOfDay().offsetFromUtc() == 3600
+ && QDate(2013, 6, 1).startOfDay().offsetFromUtc() == 7200
+ // ICU in a zone not currently doing DST may ignore any historical DST
+ // excursions in its display-names (Africa/Tripoli).
+ && QDate(QDate::currentDate().year(), 1, 1).startOfDay().offsetFromUtc() == 3600
+ && QDate(QDate::currentDate().year(), 7, 1).startOfDay().offsetFromUtc() == 7200)
{
qRegisterMetaType<QLocale::FormatType>("QLocale::FormatType");
-
- // Test if in Central European Time zone
- uint x1 = QDateTime(QDate(1990, 1, 1), QTime()).toSecsSinceEpoch();
- uint x2 = QDateTime(QDate(1990, 6, 1), QTime()).toSecsSinceEpoch();
- europeanTimeZone = (x1 == 631148400 && x2 == 644191200);
}
void tst_QLocale::initTestCase()
{
-#if QT_CONFIG(process)
-# ifdef Q_OS_ANDROID
- m_sysapp = QCoreApplication::applicationDirPath() + "/libsyslocaleapp.so";
-# else // !defined(Q_OS_ANDROID)
+#ifdef Q_OS_ANDROID
+ // We can't start a QProcess on Android, and we anyway skip the test
+ // that uses m_sysapp. So no need to initialize it properly.
+ return;
+#elif QT_CONFIG(process)
const QString syslocaleapp_dir = QFINDTESTDATA("syslocaleapp");
QVERIFY2(!syslocaleapp_dir.isEmpty(),
qPrintable(QStringLiteral("Cannot find 'syslocaleapp' starting from ")
+ QDir::toNativeSeparators(QDir::currentPath())));
m_sysapp = syslocaleapp_dir + QStringLiteral("/syslocaleapp");
-# ifdef Q_OS_WIN
+#ifdef Q_OS_WIN
m_sysapp += QStringLiteral(".exe");
-# endif
-# endif // Q_OS_ANDROID
+#endif
const QFileInfo fi(m_sysapp);
QVERIFY2(fi.exists() && fi.isExecutable(),
qPrintable(QDir::toNativeSeparators(m_sysapp)
@@ -209,7 +211,8 @@ void tst_QLocale::initTestCase()
// Get an environment free of any locale-related variables
cleanEnv.clear();
- foreach (QString const& entry, QProcess::systemEnvironment()) {
+ const QStringList sysenv = QProcess::systemEnvironment();
+ for (const QString &entry : sysenv) {
if (entry.startsWith("LANG=") || entry.startsWith("LC_") || entry.startsWith("LANGUAGE="))
continue;
cleanEnv << entry;
@@ -217,74 +220,146 @@ void tst_QLocale::initTestCase()
#endif // QT_CONFIG(process)
}
-void tst_QLocale::ctor()
+void tst_QLocale::ctor_data()
{
- QLocale default_locale = QLocale::system();
- QLocale::Language default_lang = default_locale.language();
- QLocale::Territory default_country = default_locale.territory();
+ QTest::addColumn<QLocale::Language>("reqLang");
+ QTest::addColumn<QLocale::Script>("reqText");
+ QTest::addColumn<QLocale::Territory>("reqLand");
+ QTest::addColumn<QLocale::Language>("expLang");
+ QTest::addColumn<QLocale::Script>("expText");
+ QTest::addColumn<QLocale::Territory>("expLand");
+
+ // Exact match
+#define ECHO(name, lang, text, land) \
+ QTest::newRow(name) \
+ << QLocale::lang << QLocale::text << QLocale::land \
+ << QLocale::lang << QLocale::text << QLocale::land
+
+ ECHO("zh_Hans_CN", Chinese, SimplifiedHanScript, China);
+ ECHO("zh_Hant_TW", Chinese, TraditionalHanScript, Taiwan);
+ ECHO("zh_Hant_HK", Chinese, TraditionalHanScript, HongKong);
+#undef ECHO
+
+ // Determine territory from language and script:
+#define WHATLAND(name, lang, text, land) \
+ QTest::newRow(name) \
+ << QLocale::lang << QLocale::text << QLocale::AnyTerritory \
+ << QLocale::lang << QLocale::text << QLocale::land
+
+ WHATLAND("zh_Hans", Chinese, SimplifiedHanScript, China);
+ WHATLAND("zh_Hant", Chinese, TraditionalHanScript, Taiwan);
+#undef WHATLAND
+
+ // Determine script from language and territory:
+#define WHATTEXT(name, lang, text, land) \
+ QTest::newRow(name) \
+ << QLocale::lang << QLocale::AnyScript << QLocale::land \
+ << QLocale::lang << QLocale::text << QLocale::land
+
+ WHATTEXT("zh_CN", Chinese, SimplifiedHanScript, China);
+ WHATTEXT("zh_TW", Chinese, TraditionalHanScript, Taiwan);
+ WHATTEXT("zh_HK", Chinese, TraditionalHanScript, HongKong);
+#undef WHATTEXT
+
+ // No exact match, fix by change of territory:
+#define FIXLAND(name, lang, text, land, fixed) \
+ QTest::newRow(name) \
+ << QLocale::lang << QLocale::text << QLocale::land \
+ << QLocale::lang << QLocale::text << QLocale::fixed
+
+ FIXLAND("zh_Hans_TW", Chinese, SimplifiedHanScript, Taiwan, China);
+ FIXLAND("zh_Hans_US", Chinese, SimplifiedHanScript, UnitedStates, China);
+ FIXLAND("zh_Hant_CN", Chinese, TraditionalHanScript, China, Taiwan);
+ FIXLAND("zh_Hant_US", Chinese, TraditionalHanScript, UnitedStates, Taiwan);
+#undef FIXLAND
+
+ // No exact match, fix by change of script:
+#define FIXTEXT(name, lang, text, land, fixed) \
+ QTest::newRow(name) \
+ << QLocale::lang << QLocale::text << QLocale::land \
+ << QLocale::lang << QLocale::fixed << QLocale::land
+
+ FIXTEXT("zh_Latn_CN", Chinese, LatinScript, China, SimplifiedHanScript);
+ FIXTEXT("zh_Latn_TW", Chinese, LatinScript, Taiwan, TraditionalHanScript);
+#undef FIXTEXT
+
+ // No exact match, preserve language:
+#define KEEPLANG(name, lang, text, land, fixtext, fixland) \
+ QTest::newRow(name) \
+ << QLocale::lang << QLocale::text << QLocale::land \
+ << QLocale::lang << QLocale::fixtext << QLocale::fixland
+
+ KEEPLANG("zh_US", Chinese, AnyScript, UnitedStates, SimplifiedHanScript, China);
+ KEEPLANG("zh_Latn_US", Chinese, LatinScript, UnitedStates, SimplifiedHanScript, China);
+#undef KEEPLANG
+
+ // Only territory - likely subtags imply language and script:
+#define LANDFILL(name, lang, text, land) \
+ QTest::newRow(name) \
+ << QLocale::AnyLanguage << QLocale::AnyScript << QLocale::land \
+ << QLocale::lang << QLocale::text << QLocale::land
+
+ LANDFILL("und_CN", Chinese, SimplifiedHanScript, China);
+ LANDFILL("und_TW", Chinese, TraditionalHanScript, Taiwan);
+ LANDFILL("und_CA", English, LatinScript, Canada);
+ LANDFILL("und_US", English, LatinScript, UnitedStates);
+ LANDFILL("und_GB", English, LatinScript, UnitedKingdom);
+#undef LANDFILL
+}
- qDebug("Default: %s/%s", QLocale::languageToString(default_lang).toLatin1().constData(),
- QLocale::territoryToString(default_country).toLatin1().constData());
+void tst_QLocale::ctor()
+{
+ QFETCH(const QLocale::Language, reqLang);
+ QFETCH(const QLocale::Script, reqText);
+ QFETCH(const QLocale::Territory, reqLand);
{
- QLocale l;
- QVERIFY(l.language() == default_lang);
- QVERIFY(l.territory() == default_country);
+ const QLocale l(reqLang, reqText, reqLand);
+ QTEST(l.language(), "expLang");
+ QTEST(l.script(), "expText");
+ QTEST(l.territory(), "expLand");
}
+ const QLatin1String request(QTest::currentDataTag());
+ if (!request.startsWith(u"und_")) {
+ const QLocale l(request);
+ QTEST(l.language(), "expLang");
+ QTEST(l.script(), "expText");
+ QTEST(l.territory(), "expLand");
+ }
+}
-#define TEST_CTOR(req_lang, req_script, req_country, exp_lang, exp_script, exp_country) \
- do { \
- QLocale l(QLocale::req_lang, QLocale::req_script, QLocale::req_country); \
- QCOMPARE(l.language(), QLocale::exp_lang); \
- QCOMPARE(l.script(), QLocale::exp_script); \
- QCOMPARE(l.territory(), QLocale::exp_country); \
- } while (false)
-
- // Exact matches
- TEST_CTOR(Chinese, SimplifiedHanScript, China,
- Chinese, SimplifiedHanScript, China);
- TEST_CTOR(Chinese, TraditionalHanScript, Taiwan,
- Chinese, TraditionalHanScript, Taiwan);
- TEST_CTOR(Chinese, TraditionalHanScript, HongKong,
- Chinese, TraditionalHanScript, HongKong);
-
- // Best match for AnyTerritory
- TEST_CTOR(Chinese, SimplifiedHanScript, AnyTerritory,
- Chinese, SimplifiedHanScript, China);
- TEST_CTOR(Chinese, TraditionalHanScript, AnyTerritory,
- Chinese, TraditionalHanScript, Taiwan);
-
- // Best match for AnyScript (and change country to supported one, if necessary)
- TEST_CTOR(Chinese, AnyScript, China,
- Chinese, SimplifiedHanScript, China);
- TEST_CTOR(Chinese, AnyScript, Taiwan,
- Chinese, TraditionalHanScript, Taiwan);
- TEST_CTOR(Chinese, AnyScript, HongKong,
- Chinese, TraditionalHanScript, HongKong);
- TEST_CTOR(Chinese, AnyScript, UnitedStates,
- Chinese, SimplifiedHanScript, China);
-
- // Fully-specified not found; find best alternate country
- TEST_CTOR(Chinese, SimplifiedHanScript, Taiwan,
- Chinese, SimplifiedHanScript, China);
- TEST_CTOR(Chinese, SimplifiedHanScript, UnitedStates,
- Chinese, SimplifiedHanScript, China);
- TEST_CTOR(Chinese, TraditionalHanScript, China,
- Chinese, TraditionalHanScript, Taiwan);
- TEST_CTOR(Chinese, TraditionalHanScript, UnitedStates,
- Chinese, TraditionalHanScript, Taiwan);
-
- // Fully-specified not found; find best alternate script
- TEST_CTOR(Chinese, LatinScript, China,
- Chinese, SimplifiedHanScript, China);
- TEST_CTOR(Chinese, LatinScript, Taiwan,
- Chinese, TraditionalHanScript, Taiwan);
-
- // Fully-specified not found; find best alternate country and script
- TEST_CTOR(Chinese, LatinScript, UnitedStates,
- Chinese, SimplifiedHanScript, China);
-
-#undef TEST_CTOR
+void tst_QLocale::ctor_match_land()
+{
+ // QTBUG-64940: QLocale(Any, Any, land).territory() should normally be land:
+ constexpr QLocale::Territory exceptions[] = {
+ // There are, however, some exceptions:
+ QLocale::AmericanSamoa,
+ QLocale::Antarctica,
+ QLocale::AscensionIsland,
+ QLocale::BouvetIsland,
+ QLocale::CaribbeanNetherlands,
+ QLocale::ClippertonIsland,
+ QLocale::Curacao,
+ QLocale::Europe,
+ QLocale::EuropeanUnion,
+ QLocale::FrenchSouthernTerritories,
+ QLocale::Haiti,
+ QLocale::HeardAndMcDonaldIslands,
+ QLocale::OutlyingOceania,
+ QLocale::Palau,
+ QLocale::Samoa,
+ QLocale::SouthGeorgiaAndSouthSandwichIslands,
+ QLocale::TokelauTerritory,
+ QLocale::TristanDaCunha,
+ QLocale::TuvaluTerritory,
+ QLocale::Vanuatu
+ };
+ for (int i = int(QLocale::AnyTerritory) + 1; i <= int(QLocale::LastTerritory); ++i) {
+ const auto land = QLocale::Territory(i);
+ if (std::find(std::begin(exceptions), std::end(exceptions), land) != std::end(exceptions))
+ continue;
+ QCOMPARE(QLocale(QLocale::AnyLanguage, QLocale::AnyScript, land).territory(), land);
+ }
}
void tst_QLocale::defaulted_ctor()
@@ -293,8 +368,14 @@ void tst_QLocale::defaulted_ctor()
QLocale::Language default_lang = default_locale.language();
QLocale::Territory default_country = default_locale.territory();
- qDebug("Default: %s/%s", QLocale::languageToString(default_lang).toLatin1().constData(),
- QLocale::territoryToString(default_country).toLatin1().constData());
+ qDebug("Default: %s/%s", QLocale::languageToString(default_lang).toUtf8().constData(),
+ QLocale::territoryToString(default_country).toUtf8().constData());
+
+ {
+ QLocale l;
+ QCOMPARE(l.language(), default_lang);
+ QCOMPARE(l.territory(), default_country);
+ }
{
QLocale l(QLocale::C, QLocale::AnyTerritory);
@@ -302,200 +383,181 @@ void tst_QLocale::defaulted_ctor()
QCOMPARE(l.territory(), QLocale::AnyTerritory);
}
+#define CHECK_DEFAULT(lang, terr) \
+ do { \
+ const QLocale l; \
+ QCOMPARE(l.language(), lang); \
+ QCOMPARE(l.territory(), terr); \
+ } while (false)
+
#define TEST_CTOR(req_lang, req_country, exp_lang, exp_country) \
- { \
- QLocale l(QLocale::req_lang, QLocale::req_country); \
- QCOMPARE((int)l.language(), (int)exp_lang); \
- QCOMPARE((int)l.territory(), (int)exp_country); \
- }
+ do { \
+ const QLocale l(QLocale::req_lang, QLocale::req_country); \
+ QCOMPARE(l.language(), exp_lang); \
+ QCOMPARE(l.territory(), exp_country); \
+ } while (false)
- TEST_CTOR(AnyLanguage, AnyTerritory, default_lang, default_country)
- TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory)
- TEST_CTOR(Aymara, AnyTerritory, default_lang, default_country)
- TEST_CTOR(Aymara, France, default_lang, default_country)
+ TEST_CTOR(AnyLanguage, AnyTerritory, default_lang, default_country);
+ TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory);
+ TEST_CTOR(Aymara, AnyTerritory, default_lang, default_country);
+ TEST_CTOR(Aymara, France, default_lang, default_country);
- TEST_CTOR(English, AnyTerritory, QLocale::English, QLocale::UnitedStates)
- TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates)
- TEST_CTOR(English, France, QLocale::English, QLocale::UnitedStates)
- TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom)
+ TEST_CTOR(English, AnyTerritory, QLocale::English, QLocale::UnitedStates);
+ TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates);
+ TEST_CTOR(English, France, QLocale::English, QLocale::UnitedStates);
+ TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom);
- TEST_CTOR(French, France, QLocale::French, QLocale::France)
- TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory)
+ TEST_CTOR(French, France, QLocale::French, QLocale::France);
+ TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory);
TEST_CTOR(Spanish, LatinAmerica, QLocale::Spanish,
- QLocale::LatinAmerica)
+ QLocale::LatinAmerica);
QLocale::setDefault(QLocale(QLocale::English, QLocale::France));
+ CHECK_DEFAULT(QLocale::English, QLocale::UnitedStates);
- {
- QLocale l;
- QVERIFY(l.language() == QLocale::English);
- QVERIFY(l.territory() == QLocale::UnitedStates);
- }
+ TEST_CTOR(French, France, QLocale::French, QLocale::France);
+ TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom);
- TEST_CTOR(French, France, QLocale::French, QLocale::France)
- TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom)
-
- TEST_CTOR(French, France, QLocale::French, QLocale::France)
- TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory)
- TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory)
- TEST_CTOR(Aymara, AnyTerritory, QLocale::English, QLocale::UnitedStates)
+ TEST_CTOR(French, France, QLocale::French, QLocale::France);
+ TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory);
+ TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory);
+ TEST_CTOR(Aymara, AnyTerritory, QLocale::English, QLocale::UnitedStates);
QLocale::setDefault(QLocale(QLocale::English, QLocale::UnitedKingdom));
+ CHECK_DEFAULT(QLocale::English, QLocale::UnitedKingdom);
- {
- QLocale l;
- QVERIFY(l.language() == QLocale::English);
- QVERIFY(l.territory() == QLocale::UnitedKingdom);
- }
-
- TEST_CTOR(French, France, QLocale::French, QLocale::France)
- TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom)
+ TEST_CTOR(French, France, QLocale::French, QLocale::France);
+ TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom);
- TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory)
- TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory)
+ TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory);
+ TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory);
QLocale::setDefault(QLocale(QLocale::Aymara, QLocale::France));
+ CHECK_DEFAULT(QLocale::English, QLocale::UnitedKingdom);
- {
- QLocale l;
- QVERIFY(l.language() == QLocale::English);
- QVERIFY(l.territory() == QLocale::UnitedKingdom);
- }
+ TEST_CTOR(Aymara, AnyTerritory, QLocale::English, QLocale::UnitedKingdom);
+ TEST_CTOR(Aymara, France, QLocale::English, QLocale::UnitedKingdom);
- TEST_CTOR(Aymara, AnyTerritory, QLocale::English, QLocale::UnitedKingdom)
- TEST_CTOR(Aymara, France, QLocale::English, QLocale::UnitedKingdom)
+ TEST_CTOR(English, AnyTerritory, QLocale::English, QLocale::UnitedStates);
+ TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates);
+ TEST_CTOR(English, France, QLocale::English, QLocale::UnitedStates);
+ TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom);
- TEST_CTOR(English, AnyTerritory, QLocale::English, QLocale::UnitedStates)
- TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates)
- TEST_CTOR(English, France, QLocale::English, QLocale::UnitedStates)
- TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom)
-
- TEST_CTOR(French, France, QLocale::French, QLocale::France)
- TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory)
- TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory)
+ TEST_CTOR(French, France, QLocale::French, QLocale::France);
+ TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory);
+ TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory);
QLocale::setDefault(QLocale(QLocale::Aymara, QLocale::AnyTerritory));
-
- {
- QLocale l;
- QVERIFY(l.language() == QLocale::English);
- QVERIFY(l.territory() == QLocale::UnitedKingdom);
- }
-
- TEST_CTOR(Aymara, AnyTerritory, QLocale::English, QLocale::UnitedKingdom)
- TEST_CTOR(Aymara, France, QLocale::English, QLocale::UnitedKingdom)
-
- TEST_CTOR(English, AnyTerritory, QLocale::English, QLocale::UnitedStates)
- TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates)
- TEST_CTOR(English, France, QLocale::English, QLocale::UnitedStates)
- TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom)
-
- TEST_CTOR(French, France, QLocale::French, QLocale::France)
- TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory)
- TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory)
-
- TEST_CTOR(Arabic, AnyTerritory, QLocale::Arabic, QLocale::Egypt)
- TEST_CTOR(Dutch, AnyTerritory, QLocale::Dutch, QLocale::Netherlands)
- TEST_CTOR(German, AnyTerritory, QLocale::German, QLocale::Germany)
- TEST_CTOR(Greek, AnyTerritory, QLocale::Greek, QLocale::Greece)
- TEST_CTOR(Malay, AnyTerritory, QLocale::Malay, QLocale::Malaysia)
- TEST_CTOR(Persian, AnyTerritory, QLocale::Persian, QLocale::Iran)
- TEST_CTOR(Portuguese, AnyTerritory, QLocale::Portuguese, QLocale::Brazil)
- TEST_CTOR(Serbian, AnyTerritory, QLocale::Serbian, QLocale::Serbia)
- TEST_CTOR(Somali, AnyTerritory, QLocale::Somali, QLocale::Somalia)
- TEST_CTOR(Spanish, AnyTerritory, QLocale::Spanish, QLocale::Spain)
- TEST_CTOR(Swedish, AnyTerritory, QLocale::Swedish, QLocale::Sweden)
- TEST_CTOR(Uzbek, AnyTerritory, QLocale::Uzbek, QLocale::Uzbekistan)
+ CHECK_DEFAULT(QLocale::English, QLocale::UnitedKingdom);
+
+ TEST_CTOR(Aymara, AnyTerritory, QLocale::English, QLocale::UnitedKingdom);
+ TEST_CTOR(Aymara, France, QLocale::English, QLocale::UnitedKingdom);
+
+ TEST_CTOR(English, AnyTerritory, QLocale::English, QLocale::UnitedStates);
+ TEST_CTOR(English, UnitedStates, QLocale::English, QLocale::UnitedStates);
+ TEST_CTOR(English, France, QLocale::English, QLocale::UnitedStates);
+ TEST_CTOR(English, UnitedKingdom, QLocale::English, QLocale::UnitedKingdom);
+
+ TEST_CTOR(French, France, QLocale::French, QLocale::France);
+ TEST_CTOR(C, AnyTerritory, QLocale::C, QLocale::AnyTerritory);
+ TEST_CTOR(C, France, QLocale::C, QLocale::AnyTerritory);
+
+ TEST_CTOR(Arabic, AnyTerritory, QLocale::Arabic, QLocale::Egypt);
+ TEST_CTOR(Dutch, AnyTerritory, QLocale::Dutch, QLocale::Netherlands);
+ TEST_CTOR(German, AnyTerritory, QLocale::German, QLocale::Germany);
+ TEST_CTOR(Greek, AnyTerritory, QLocale::Greek, QLocale::Greece);
+ TEST_CTOR(Malay, AnyTerritory, QLocale::Malay, QLocale::Malaysia);
+ TEST_CTOR(Persian, AnyTerritory, QLocale::Persian, QLocale::Iran);
+ TEST_CTOR(Portuguese, AnyTerritory, QLocale::Portuguese, QLocale::Brazil);
+ TEST_CTOR(Serbian, AnyTerritory, QLocale::Serbian, QLocale::Serbia);
+ TEST_CTOR(Somali, AnyTerritory, QLocale::Somali, QLocale::Somalia);
+ TEST_CTOR(Spanish, AnyTerritory, QLocale::Spanish, QLocale::Spain);
+ TEST_CTOR(Swedish, AnyTerritory, QLocale::Swedish, QLocale::Sweden);
+ TEST_CTOR(Uzbek, AnyTerritory, QLocale::Uzbek, QLocale::Uzbekistan);
#undef TEST_CTOR
#define TEST_CTOR(req_lc, exp_lang, exp_country) \
- { \
- QLocale l(req_lc); \
- QVERIFY2(l.language() == QLocale::exp_lang \
- && l.territory() == QLocale::exp_country, \
- QString("requested: \"" + QString(req_lc) + "\", got: " \
- + QLocale::languageToString(l.language()) \
- + QLatin1Char('/') \
- + QLocale::territoryToString(l.territory())).toLatin1().constData()); \
- QCOMPARE(l, QLocale(QLocale::exp_lang, QLocale::exp_country)); \
- QCOMPARE(qHash(l), qHash(QLocale(QLocale::exp_lang, QLocale::exp_country))); \
- }
+ do { \
+ const QLocale l(req_lc); \
+ QCOMPARE(l.language(), QLocale::exp_lang); \
+ QCOMPARE(l.territory(), QLocale::exp_country); \
+ const QLocale m(QLocale::exp_lang, QLocale::exp_country); \
+ QCOMPARE(l, m); \
+ QCOMPARE(qHash(l), qHash(m)); \
+ } while (false)
QLocale::setDefault(QLocale(QLocale::C));
const QString empty;
- TEST_CTOR("C", C, AnyTerritory)
- TEST_CTOR("bla", C, AnyTerritory)
- TEST_CTOR("zz", C, AnyTerritory)
- TEST_CTOR("zz_zz", C, AnyTerritory)
- TEST_CTOR("zz...", C, AnyTerritory)
- TEST_CTOR("", C, AnyTerritory)
- TEST_CTOR("en/", C, AnyTerritory)
- TEST_CTOR(empty, C, AnyTerritory)
- TEST_CTOR("en", English, UnitedStates)
- TEST_CTOR("en", English, UnitedStates)
- TEST_CTOR("en.", English, UnitedStates)
- TEST_CTOR("en@", English, UnitedStates)
- TEST_CTOR("en.@", English, UnitedStates)
- TEST_CTOR("en_", English, UnitedStates)
- TEST_CTOR("en_U", English, UnitedStates)
- TEST_CTOR("en_.", English, UnitedStates)
- TEST_CTOR("en_.@", English, UnitedStates)
- TEST_CTOR("en.bla", English, UnitedStates)
- TEST_CTOR("en@bla", English, UnitedStates)
- TEST_CTOR("en_blaaa", English, UnitedStates)
- TEST_CTOR("en_zz", English, UnitedStates)
- TEST_CTOR("en_GB", English, UnitedKingdom)
- TEST_CTOR("en_GB.bla", English, UnitedKingdom)
- TEST_CTOR("en_GB@.bla", English, UnitedKingdom)
- TEST_CTOR("en_GB@bla", English, UnitedKingdom)
- TEST_CTOR("en-GB", English, UnitedKingdom)
- TEST_CTOR("en-GB@bla", English, UnitedKingdom)
- TEST_CTOR("eo", Esperanto, World)
- TEST_CTOR("yi", Yiddish, World)
-
- TEST_CTOR("no", NorwegianBokmal, Norway)
- TEST_CTOR("nb", NorwegianBokmal, Norway)
- TEST_CTOR("nn", NorwegianNynorsk, Norway)
- TEST_CTOR("no_NO", NorwegianBokmal, Norway)
- TEST_CTOR("nb_NO", NorwegianBokmal, Norway)
- TEST_CTOR("nn_NO", NorwegianNynorsk, Norway)
- TEST_CTOR("es_ES", Spanish, Spain)
- TEST_CTOR("es_419", Spanish, LatinAmerica)
- TEST_CTOR("es-419", Spanish, LatinAmerica)
- TEST_CTOR("fr_MA", French, Morocco)
+ TEST_CTOR("C", C, AnyTerritory);
+ TEST_CTOR("bla", C, AnyTerritory);
+ TEST_CTOR("zz", C, AnyTerritory);
+ TEST_CTOR("zz_zz", C, AnyTerritory);
+ TEST_CTOR("zz...", C, AnyTerritory);
+ TEST_CTOR("", C, AnyTerritory);
+ TEST_CTOR("en/", C, AnyTerritory);
+ TEST_CTOR(empty, C, AnyTerritory);
+ TEST_CTOR("en", English, UnitedStates);
+ TEST_CTOR("en", English, UnitedStates);
+ TEST_CTOR("en.", English, UnitedStates);
+ TEST_CTOR("en@", English, UnitedStates);
+ TEST_CTOR("en.@", English, UnitedStates);
+ TEST_CTOR("en_", English, UnitedStates);
+ TEST_CTOR("en_U", English, UnitedStates);
+ TEST_CTOR("en_.", English, UnitedStates);
+ TEST_CTOR("en_.@", English, UnitedStates);
+ TEST_CTOR("en.bla", English, UnitedStates);
+ TEST_CTOR("en@bla", English, UnitedStates);
+ TEST_CTOR("en_blaaa", English, UnitedStates);
+ TEST_CTOR("en_zz", English, UnitedStates);
+ TEST_CTOR("en_GB", English, UnitedKingdom);
+ TEST_CTOR("en_GB.bla", English, UnitedKingdom);
+ TEST_CTOR("en_GB@.bla", English, UnitedKingdom);
+ TEST_CTOR("en_GB@bla", English, UnitedKingdom);
+ TEST_CTOR("en-GB", English, UnitedKingdom);
+ TEST_CTOR("en-GB@bla", English, UnitedKingdom);
+ TEST_CTOR("eo", Esperanto, World);
+ TEST_CTOR("yi", Yiddish, Ukraine);
+
+ TEST_CTOR("no", NorwegianBokmal, Norway);
+ TEST_CTOR("nb", NorwegianBokmal, Norway);
+ TEST_CTOR("nn", NorwegianNynorsk, Norway);
+ TEST_CTOR("no_NO", NorwegianBokmal, Norway);
+ TEST_CTOR("nb_NO", NorwegianBokmal, Norway);
+ TEST_CTOR("nn_NO", NorwegianNynorsk, Norway);
+ TEST_CTOR("es_ES", Spanish, Spain);
+ TEST_CTOR("es_419", Spanish, LatinAmerica);
+ TEST_CTOR("es-419", Spanish, LatinAmerica);
+ TEST_CTOR("fr_MA", French, Morocco);
// test default countries for languages
- TEST_CTOR("zh", Chinese, China)
- TEST_CTOR("zh-Hans", Chinese, China)
- TEST_CTOR("ne", Nepali, Nepal)
+ TEST_CTOR("zh", Chinese, China);
+ TEST_CTOR("zh-Hans", Chinese, China);
+ TEST_CTOR("ne", Nepali, Nepal);
#undef TEST_CTOR
#define TEST_CTOR(req_lc, exp_lang, exp_script, exp_country) \
- { \
- QLocale l(req_lc); \
- QVERIFY2(l.language() == QLocale::exp_lang \
- && l.script() == QLocale::exp_script \
- && l.territory() == QLocale::exp_country, \
- QString("requested: \"" + QString(req_lc) + "\", got: " \
- + QLocale::languageToString(l.language()) \
- + QLatin1Char('/') + QLocale::scriptToString(l.script()) \
- + QLatin1Char('/') + QLocale::territoryToString(l.territory())).toLatin1().constData()); \
- }
+ do { \
+ const QLocale l(req_lc); \
+ QCOMPARE(l.language(), QLocale::exp_lang); \
+ QCOMPARE(l.script(), QLocale::exp_script); \
+ QCOMPARE(l.territory(), QLocale::exp_country); \
+ } while (false)
- TEST_CTOR("zh_CN", Chinese, SimplifiedHanScript, China)
- TEST_CTOR("zh_Hans_CN", Chinese, SimplifiedHanScript, China)
- TEST_CTOR("zh_Hans", Chinese, SimplifiedHanScript, China)
- TEST_CTOR("zh_Hant", Chinese, TraditionalHanScript, Taiwan)
- TEST_CTOR("zh_Hans_MO", Chinese, SimplifiedHanScript, Macau)
- TEST_CTOR("zh_Hant_MO", Chinese, TraditionalHanScript, Macau)
- TEST_CTOR("az_Latn_AZ", Azerbaijani, LatinScript, Azerbaijan)
- TEST_CTOR("ha_NG", Hausa, LatinScript, Nigeria)
+ TEST_CTOR("zh_CN", Chinese, SimplifiedHanScript, China);
+ TEST_CTOR("zh_Hans_CN", Chinese, SimplifiedHanScript, China);
+ TEST_CTOR("zh_Hans", Chinese, SimplifiedHanScript, China);
+ TEST_CTOR("zh_Hant", Chinese, TraditionalHanScript, Taiwan);
+ TEST_CTOR("zh_Hans_MO", Chinese, SimplifiedHanScript, Macau);
+ TEST_CTOR("zh_Hant_MO", Chinese, TraditionalHanScript, Macau);
+ TEST_CTOR("az_Latn_AZ", Azerbaijani, LatinScript, Azerbaijan);
+ TEST_CTOR("ha_NG", Hausa, LatinScript, Nigeria);
- TEST_CTOR("ru", Russian, CyrillicScript, RussianFederation)
- TEST_CTOR("ru_Cyrl", Russian, CyrillicScript, RussianFederation)
+ TEST_CTOR("ru", Russian, CyrillicScript, RussianFederation);
+ TEST_CTOR("ru_Cyrl", Russian, CyrillicScript, RussianFederation);
#undef TEST_CTOR
+#undef CHECK_DEFAULT
}
#if QT_CONFIG(process)
@@ -555,13 +617,13 @@ static inline bool runSysAppTest(const QString &binary,
}
#endif
-void tst_QLocale::emptyCtor_data()
+void tst_QLocale::systemLocale_data()
{
#if !QT_CONFIG(process)
- QSKIP("No qprocess support", SkipAll);
+ QSKIP("No qprocess support");
#endif
#ifdef Q_OS_ANDROID
- QSKIP("This test crashes on Android");
+ QSKIP("Can't start QProcess to run a custom user binary on Android");
#endif
QTest::addColumn<QString>("expected");
@@ -573,45 +635,49 @@ void tst_QLocale::emptyCtor_data()
// Note that the accepted values for fields are implementation-dependent;
// the template is language[_territory][.codeset][@modifier]
+ // "Ordibehesht" is the name (as adapted to English, German or Norsk) of the
+ // second month of the Jalali calendar. If you see anything in Arabic,
+ // setDefault(Persian) has interfered with the system locale setup.
+
// Vanilla:
- ADD_CTOR_TEST("C", "C");
+ ADD_CTOR_TEST("C", "C Ordibehesht");
// Standard forms:
- ADD_CTOR_TEST("en", "en_US");
- ADD_CTOR_TEST("en_GB", "en_GB");
- ADD_CTOR_TEST("de", "de_DE");
+ ADD_CTOR_TEST("en", "en_US Ordibehesht");
+ ADD_CTOR_TEST("en_GB", "en_GB Ordibehesht");
+ ADD_CTOR_TEST("de", "de_DE Ordibehescht");
// Norsk has some quirks:
- ADD_CTOR_TEST("no", "nb_NO");
- ADD_CTOR_TEST("nb", "nb_NO");
- ADD_CTOR_TEST("nn", "nn_NO");
- ADD_CTOR_TEST("no_NO", "nb_NO");
- ADD_CTOR_TEST("nb_NO", "nb_NO");
- ADD_CTOR_TEST("nn_NO", "nn_NO");
+ ADD_CTOR_TEST("no", "nb_NO ordibehesht");
+ ADD_CTOR_TEST("nb", "nb_NO ordibehesht");
+ ADD_CTOR_TEST("nn", "nn_NO ordibehesht");
+ ADD_CTOR_TEST("no_NO", "nb_NO ordibehesht");
+ ADD_CTOR_TEST("nb_NO", "nb_NO ordibehesht");
+ ADD_CTOR_TEST("nn_NO", "nn_NO ordibehesht");
// Not too fussy about case:
- ADD_CTOR_TEST("DE", "de_DE");
- ADD_CTOR_TEST("EN", "en_US");
+ ADD_CTOR_TEST("DE", "de_DE Ordibehescht");
+ ADD_CTOR_TEST("EN", "en_US Ordibehesht");
// Invalid fields
- ADD_CTOR_TEST("bla", "C");
- ADD_CTOR_TEST("zz", "C");
- ADD_CTOR_TEST("zz_zz", "C");
- ADD_CTOR_TEST("zz...", "C");
- ADD_CTOR_TEST("en.bla", "en_US");
- ADD_CTOR_TEST("en@bla", "en_US");
- ADD_CTOR_TEST("en_blaaa", "en_US");
- ADD_CTOR_TEST("en_zz", "en_US");
- ADD_CTOR_TEST("en_GB.bla", "en_GB");
- ADD_CTOR_TEST("en_GB@.bla", "en_GB");
- ADD_CTOR_TEST("en_GB@bla", "en_GB");
+ ADD_CTOR_TEST("bla", "C Ordibehesht");
+ ADD_CTOR_TEST("zz", "C Ordibehesht");
+ ADD_CTOR_TEST("zz_zz", "C Ordibehesht");
+ ADD_CTOR_TEST("zz...", "C Ordibehesht");
+ ADD_CTOR_TEST("en.bla", "en_US Ordibehesht");
+ ADD_CTOR_TEST("en@bla", "en_US Ordibehesht");
+ ADD_CTOR_TEST("en_blaaa", "en_US Ordibehesht");
+ ADD_CTOR_TEST("en_zz", "en_US Ordibehesht");
+ ADD_CTOR_TEST("en_GB.bla", "en_GB Ordibehesht");
+ ADD_CTOR_TEST("en_GB@.bla", "en_GB Ordibehesht");
+ ADD_CTOR_TEST("en_GB@bla", "en_GB Ordibehesht");
// Empty optional fields, but with punctuators supplied
- ADD_CTOR_TEST("en.", "en_US");
- ADD_CTOR_TEST("en@", "en_US");
- ADD_CTOR_TEST("en.@", "en_US");
- ADD_CTOR_TEST("en_", "en_US");
- ADD_CTOR_TEST("en_.", "en_US");
- ADD_CTOR_TEST("en_.@", "en_US");
+ ADD_CTOR_TEST("en.", "en_US Ordibehesht");
+ ADD_CTOR_TEST("en@", "en_US Ordibehesht");
+ ADD_CTOR_TEST("en.@", "en_US Ordibehesht");
+ ADD_CTOR_TEST("en_", "en_US Ordibehesht");
+ ADD_CTOR_TEST("en_.", "en_US Ordibehesht");
+ ADD_CTOR_TEST("en_.@", "en_US Ordibehesht");
#undef ADD_CTOR_TEST
#if QT_CONFIG(process) // for runSysApp
@@ -620,7 +686,7 @@ void tst_QLocale::emptyCtor_data()
QString errorMessage;
if (runSysApp(m_sysapp, QStringList(), cleanEnv, &defaultLoc, &errorMessage)) {
#if defined(Q_OS_MACOS)
- QString localeForInvalidLocale = "C";
+ QString localeForInvalidLocale = "C Ordibehesht";
#else
QString localeForInvalidLocale = defaultLoc;
#endif
@@ -635,7 +701,7 @@ void tst_QLocale::emptyCtor_data()
#endif // process
}
-void tst_QLocale::emptyCtor()
+void tst_QLocale::systemLocale()
{
#if QT_CONFIG(process) // for runSysAppTest
QLatin1String request(QTest::currentDataTag());
@@ -657,22 +723,18 @@ void tst_QLocale::legacyNames()
QLocale::setDefault(QLocale(QLocale::C));
#define TEST_CTOR(req_lc, exp_lang, exp_country) \
- { \
- QLocale l(req_lc); \
- QVERIFY2(l.language() == QLocale::exp_lang \
- && l.territory() == QLocale::exp_country, \
- QString("requested: \"" + QString(req_lc) + "\", got: " \
- + QLocale::languageToString(l.language()) \
- + QLatin1Char('/') \
- + QLocale::territoryToString(l.territory())).toLatin1().constData()); \
- }
+ do { \
+ const QLocale l(req_lc); \
+ QCOMPARE(l.language(), QLocale::exp_lang); \
+ QCOMPARE(l.territory(), QLocale::exp_country); \
+ } while (false)
- TEST_CTOR("mo_MD", Romanian, Moldova)
- TEST_CTOR("no", NorwegianBokmal, Norway)
- TEST_CTOR("sh_ME", Serbian, Montenegro)
- TEST_CTOR("tl", Filipino, Philippines)
- TEST_CTOR("iw", Hebrew, Israel)
- TEST_CTOR("in", Indonesian, Indonesia)
+ TEST_CTOR("mo_MD", Romanian, Moldova);
+ TEST_CTOR("no", NorwegianBokmal, Norway);
+ TEST_CTOR("sh_ME", Serbian, Montenegro);
+ TEST_CTOR("tl", Filipino, Philippines);
+ TEST_CTOR("iw", Hebrew, Israel);
+ TEST_CTOR("in", Indonesian, Indonesia);
#undef TEST_CTOR
}
@@ -738,14 +800,24 @@ void tst_QLocale::unixLocaleName_data()
void tst_QLocale::unixLocaleName()
{
- QFETCH(QLocale::Language, lang);
- QFETCH(QLocale::Territory, land);
- QFETCH(QString, expect);
+ QFETCH(const QLocale::Language, lang);
+ QFETCH(const QLocale::Territory, land);
+ QFETCH(const QString, expect);
+ const auto expected = [expect](QChar ch) {
+ // Kludge around QString::replace() not being const.
+ QString copy = expect;
+ return copy.replace(u'_', ch);
+ };
QLocale::setDefault(QLocale(QLocale::C));
- QLocale locale(lang, land);
+ const QLocale locale(lang, land);
QCOMPARE(locale.name(), expect);
+ QCOMPARE(locale.name(QLocale::TagSeparator::Dash), expected(u'-'));
+ QCOMPARE(locale.name(QLocale::TagSeparator{'|'}), expected(u'|'));
+ QTest::ignoreMessage(QtWarningMsg, "QLocale::name(): "
+ "Using non-ASCII separator '\u00ff' (ff) is unsupported");
+ QCOMPARE(locale.name(QLocale::TagSeparator{'\xff'}), QString());
}
void tst_QLocale::toReal_data()
@@ -870,6 +942,44 @@ void tst_QLocale::toReal_data()
QTest::newRow("de_DE 9.876543,0e-2") << QString("de_DE") << QString("9.876543,0e-2") << false << 0.0;
QTest::newRow("de_DE 9.876543e--2") << QString("de_DE") << QString("9.876543e")+QChar(8722)+QString("2") << false << 0.0;
QTest::newRow("de_DE 9.876543,0e--2") << QString("de_DE") << QString("9.876543,0e")+QChar(8722)+QString("2") << false << 0.0;
+
+ // Signs and exponent separator aren't single characters:
+ QTest::newRow("sv_SE 4e-3") // Swedish, Sweden
+ << u"sv_SE"_s << u"4\u00d7" "10^\u2212" "03"_s << true << 4e-3;
+ QTest::newRow("sv_SE 4x-3") // Only first character of exponent
+ << u"sv_SE"_s << u"4\u00d7\u2212" "03"_s << false << 0.0;
+ QTest::newRow("se_NO 4e-3") // Northern Sami, Norway
+ << u"se_NO"_s << u"4\u00b7" "10^\u2212" "03"_s << true << 4e-3;
+ QTest::newRow("se_NO 4x-3") // Only first character of exponent
+ << u"se_NO"_s << u"4\u00b7\u2212" "03"_s << false << 0.0;
+ QTest::newRow("ar_EG 4e-3") // Arabic, Egypt
+ << u"ar_EG"_s << u"\u0664\u0623\u0633\u061c-\u0660\u0663"_s << true << 4e-3;
+ QTest::newRow("ar_EG 4e!3") // Only first character of sign:
+ << u"ar_EG"_s << u"\u0664\u0623\u0633\u061c\u0660\u0663"_s << false << 0.0;
+ QTest::newRow("ar_EG 4x-3") // Only first character of exponent
+ << u"ar_EG"_s << u"\u0664\u0623\u061c-\u0660\u0663"_s << false << 0.0;
+ QTest::newRow("ar_EG 4x!3") // Only first character of exponent and sign
+ << u"ar_EG"_s << u"\u0664\u0623\u061c\u0660\u0663"_s << false << 0.0;
+ QTest::newRow("fa_IR 4e-3") // Farsi, Iran
+ << u"fa_IR"_s << u"\u06f4\u00d7\u06f1\u06f0^\u200e\u2212\u06f0\u06f3"_s << true << 4e-3;
+ QTest::newRow("fa_IR 4e!3") // Only first character of sign:
+ << u"fa_IR"_s << u"\u06f4\u00d7\u06f1\u06f0^\u200e\u06f0\u06f3"_s << false << 0.0;
+ QTest::newRow("fa_IR 4x-3") // Only first character of exponent
+ << u"fa_IR"_s << u"\u06f4\u00d7\u200e\u2212\u06f0\u06f3"_s << false << 0.0;
+ QTest::newRow("fa_IR 4x!3") // Only first character of exponent and sign
+ << u"fa_IR"_s << u"\u06f4\u00d7\u200e\u06f0\u06f3"_s << false << 0.0;
+
+ // Cyrillic has its own E; only officially used by Ukrainian as exponent,
+ // with other Cyrillic locales using the Latin E. QLocale allows that there
+ // may be some cross-over between these.
+ QTest::newRow("uk_UA Cyrillic E") << u"uk_UA"_s << u"4\u0415-3"_s << true << 4e-3; // Official
+ QTest::newRow("uk_UA Latin E") << u"uk_UA"_s << u"4E-3"_s << true << 4e-3;
+ QTest::newRow("uk_UA Cyrilic e") << u"uk_UA"_s << u"4\u0435-3"_s << true << 4e-3;
+ QTest::newRow("uk_UA Latin e") << u"uk_UA"_s << u"4e-3"_s << true << 4e-3;
+ QTest::newRow("ru_RU Latin E") << u"ru_RU"_s << u"4E-3"_s << true << 4e-3; // Official
+ QTest::newRow("ru_RU Cyrillic E") << u"ru_RU"_s << u"4\u0415-3"_s << true << 4e-3;
+ QTest::newRow("ru_RU Latin e") << u"ru_RU"_s << u"4e-3"_s << true << 4e-3;
+ QTest::newRow("ru_RU Cyrilic e") << u"ru_RU"_s << u"4\u0435-3"_s << true << 4e-3;
}
void tst_QLocale::stringToDouble_data()
@@ -896,6 +1006,13 @@ void tst_QLocale::stringToDouble_data()
// Underflow:
QTest::newRow("C tiny") << QString("C") << QString("2e-324") << false << 0.;
QTest::newRow("C -tiny") << QString("C") << QString("-2e-324") << false << 0.;
+
+ // Test a tiny fraction (well beyond denomal) with a huge exponent:
+ const QString zeros(500, '0');
+ QTest::newRow("C tiny fraction, huge exponent")
+ << u"C"_s << u"0."_s + zeros + u"123e501"_s << true << 1.23;
+ QTest::newRow("uk_UA tiny fraction, huge exponent")
+ << u"uk_UA"_s << u"0,"_s + zeros + u"123\u0415" "501"_s << true << 1.23;
}
void tst_QLocale::stringToDouble()
@@ -927,7 +1044,7 @@ void tst_QLocale::stringToDouble()
QCOMPARE(d, num);
if (std::isfinite(num)) {
double diff = d > num ? d - num : num - d;
- QVERIFY(diff <= MY_DOUBLE_EPSILON);
+ QCOMPARE_LE(diff, MY_DOUBLE_EPSILON);
}
}
@@ -938,7 +1055,7 @@ void tst_QLocale::stringToDouble()
QCOMPARE(d, num);
if (std::isfinite(num)) {
double diff = d > num ? d - num : num - d;
- QVERIFY(diff <= MY_DOUBLE_EPSILON);
+ QCOMPARE_LE(diff, MY_DOUBLE_EPSILON);
}
}
#undef MY_DOUBLE_EPSILON
@@ -982,6 +1099,13 @@ void tst_QLocale::stringToFloat_data()
// Underflow double, too:
QTest::newRow("C tiny") << C << QString("2e-324") << false << 0.;
QTest::newRow("C -tiny") << C << QString("-2e-324") << false << 0.;
+
+ // Test a small fraction (well beyond denomal) with a big exponent:
+ const QString zeros(80, '0');
+ QTest::newRow("C small fraction, big exponent")
+ << u"C"_s << u"0."_s + zeros + u"123e81"_s << true << 1.23;
+ QTest::newRow("uk_UA small fraction, big exponent")
+ << u"uk_UA"_s << u"0,"_s + zeros + u"123\u0415" "81"_s << true << 1.23;
}
void tst_QLocale::stringToFloat()
@@ -998,10 +1122,24 @@ void tst_QLocale::stringToFloat()
QLocale locale(locale_name);
QCOMPARE(locale.name(), locale_name);
+ if constexpr (std::numeric_limits<float>::has_denorm != std::denorm_present) {
+ if (qstrcmp(QTest::currentDataTag(), "C float -min") == 0
+ || qstrcmp(QTest::currentDataTag(), "C float min") == 0)
+ QSKIP("Skipping 'denorm' as this type lacks denormals on this system");
+ }
bool ok;
float f = locale.toFloat(num_str, &ok);
QCOMPARE(ok, good);
+ if constexpr (std::numeric_limits<double>::has_denorm != std::denorm_present) {
+ if (qstrcmp(QTest::currentDataTag(), "C double min") == 0
+ || qstrcmp(QTest::currentDataTag(), "C double -min") == 0
+ || qstrcmp(QTest::currentDataTag(), "C tiny") == 0
+ || qstrcmp(QTest::currentDataTag(), "C -tiny") == 0) {
+ QSKIP("Skipping 'denorm' as this type lacks denormals on this system");
+ }
+ }
+
{
// Make sure result is independent of locale:
TransientLocale ignoreme(LC_ALL, "ar_SA.UTF-8");
@@ -1014,7 +1152,7 @@ void tst_QLocale::stringToFloat()
QCOMPARE(f, fnum);
if (std::isfinite(fnum)) {
float diff = f > fnum ? f - fnum : fnum - f;
- QVERIFY(diff <= MY_FLOAT_EPSILON);
+ QCOMPARE_LE(diff, MY_FLOAT_EPSILON);
}
}
@@ -1025,7 +1163,7 @@ void tst_QLocale::stringToFloat()
QCOMPARE(f, fnum);
if (std::isfinite(fnum)) {
float diff = f > fnum ? f - fnum : fnum - f;
- QVERIFY(diff <= MY_FLOAT_EPSILON);
+ QCOMPARE_LE(diff, MY_FLOAT_EPSILON);
}
}
#undef MY_FLOAT_EPSILON
@@ -1041,6 +1179,52 @@ void tst_QLocale::doubleToString_data()
int shortest = QLocale::FloatingPointShortest;
+ QTest::newRow("C 0 f 0") << QString("C") << QString("0") << 0.0 << 'f' << 0;
+ QTest::newRow("C 0 f 5") << QString("C") << QString("0.00000") << 0.0 << 'f' << 5;
+ QTest::newRow("C 0 f -") << QString("C") << QString("0") << 0.0 << 'f' << shortest;
+ QTest::newRow("C 0 e 0") << QString("C") << QString("0e+00") << 0.0 << 'e' << 0;
+ QTest::newRow("C 0 e 5") << QString("C") << QString("0.00000e+00") << 0.0 << 'e' << 5;
+ QTest::newRow("C 0 e -") << QString("C") << QString("0e+00") << 0.0 << 'e' << shortest;
+ QTest::newRow("C 0 g 0") << QString("C") << QString("0") << 0.0 << 'g' << 0;
+ QTest::newRow("C 0 g 5") << QString("C") << QString("0") << 0.0 << 'g' << 5;
+ QTest::newRow("C 0 g -") << QString("C") << QString("0") << 0.0 << 'g' << shortest;
+
+ double d = std::numeric_limits<double>::max();
+ static const char doublemaxfixed[] =
+ "1797693134862315708145274237317043567980705675258449965989174768031572607800285387605"
+ "8955863276687817154045895351438246423432132688946418276846754670353751698604991057655"
+ "1282076245490090389328944075868508455133942304583236903222948165808559332123348274797"
+ "826204144723168738177180919299881250404026184124858368";
+
+ QTest::newRow("C max f 0") << QString("C") << QString(doublemaxfixed) << d << 'f' << 0;
+ QTest::newRow("C max f 5") << QString("C") << doublemaxfixed + QString(".00000") << d << 'f' << 5;
+ QTest::newRow("C max e 0") << QString("C") << QString("2e+308") << d << 'e' << 0;
+ QTest::newRow("C max g 0") << QString("C") << QString("2e+308") << d << 'g' << 0;
+ QTest::newRow("C max e 5") << QString("C") << QString("1.79769e+308") << d << 'e' << 5;
+ QTest::newRow("C max g 5") << QString("C") << QString("1.7977e+308") << d << 'g' << 5;
+#if QT_CONFIG(doubleconversion)
+ QTest::newRow("C max e -") << QString("C") << QString("1.7976931348623157e+308") << d << 'e' << shortest;
+ QTest::newRow("C max g -") << QString("C") << QString("1.7976931348623157e+308") << d << 'g' << shortest;
+ QTest::newRow("C max f -") << QString("C")
+ << QString("%1").arg("17976931348623157", -int(strlen(doublemaxfixed)), u'0')
+ << d << 'f' << shortest;
+#endif
+
+ d = std::numeric_limits<double>::min();
+ QTest::newRow("C min f 0") << QString("C") << QString("0") << d << 'f' << 0;
+ QTest::newRow("C min f 5") << QString("C") << QString("0.00000") << d << 'f' << 5;
+ QTest::newRow("C min e 0") << QString("C") << QString("2e-308") << d << 'e' << 0;
+ QTest::newRow("C min g 0") << QString("C") << QString("2e-308") << d << 'g' << 0;
+ QTest::newRow("C min e 5") << QString("C") << QString("2.22507e-308") << d << 'e' << 5;
+ QTest::newRow("C min g 5") << QString("C") << QString("2.2251e-308") << d << 'g' << 5;
+#if QT_CONFIG(doubleconversion)
+ QTest::newRow("C min e -") << QString("C") << QString("2.2250738585072014e-308") << d << 'e' << shortest;
+ QTest::newRow("C min f -") << QString("C")
+ << QString("0.%1").arg("22250738585072014", 308 - 1 + std::numeric_limits<double>::max_digits10, u'0')
+ << d << 'f' << shortest;
+ QTest::newRow("C min g -") << QString("C") << QString("2.2250738585072014e-308") << d << 'g' << shortest;
+#endif
+
QTest::newRow("C 3.4 f 5") << QString("C") << QString("3.40000") << 3.4 << 'f' << 5;
QTest::newRow("C 3.4 f 0") << QString("C") << QString("3") << 3.4 << 'f' << 0;
QTest::newRow("C 3.4 e 5") << QString("C") << QString("3.40000e+00") << 3.4 << 'e' << 5;
@@ -1095,7 +1279,9 @@ void tst_QLocale::doubleToString_data()
QTest::newRow("de_DE 1245678900 g -") << QString("de_DE") << QString("1.245.678.900") << 12456789e2 << 'g' << shortest;
QTest::newRow("de_DE 12456789100 g -") << QString("de_DE") << QString("12.456.789.100") << 124567891e2 << 'g' << shortest;
QTest::newRow("de_DE 12456789000 g -") << QString("de_DE") << QString("1,2456789E+10") << 12456789e3 << 'g' << shortest;
- QTest::newRow("de_DE 120000 g -") << QString("de_DE") << QString("120.000") << 12e4 << 'g' << shortest;
+ QTest::newRow("de_DE 12000 g -")
+ << QString("de_DE") << QString("12.000") << 12e3 << 'g' << shortest;
+ // 12e4 has "120.000" and "1.2E+05" of equal length; which shortest picks is unspecified.
QTest::newRow("de_DE 1200000 g -") << QString("de_DE") << QString("1,2E+06") << 12e5 << 'g' << shortest;
QTest::newRow("de_DE 1000 g -") << QString("de_DE") << QString("1.000") << 1e3 << 'g' << shortest;
QTest::newRow("de_DE 10000 g -") << QString("de_DE") << QString("1E+04") << 1e4 << 'g' << shortest;
@@ -1106,6 +1292,19 @@ void tst_QLocale::doubleToString_data()
QTest::newRow("C 0.000003945 e 0") << QString("C") << QString("4e-06") << 0.000003945 << 'e' << 0;
QTest::newRow("C 0.000003945 g 7") << QString("C") << QString("3.945e-06") << 0.000003945 << 'g' << 7;
QTest::newRow("C 0.000003945 g 1") << QString("C") << QString("4e-06") << 0.000003945 << 'g' << 1;
+ QTest::newRow("sv_SE 0.000003945 g 1") // Swedish, Sweden (among others)
+ << u"sv_SE"_s << u"4\u00d7" "10^\u2212" "06"_s << 0.000003945 << 'g' << 1;
+ QTest::newRow("sv_SE 3945e3 g 1")
+ << u"sv_SE"_s << u"4\u00d7" "10^+06"_s << 3945e3 << 'g' << 1;
+ QTest::newRow("se 0.000003945 g 1") // Northern Sami
+ << u"se"_s << u"4\u00b7" "10^\u2212" "06"_s << 0.000003945 << 'g' << 1;
+ QTest::newRow("ar_EG 0.000003945 g 1") // Arabic, Egypt (among others)
+ << u"ar_EG"_s << u"\u0664\u0623\u0633\u061c-\u0660\u0666"_s << 0.000003945 << 'g' << 1;
+ QTest::newRow("ar_EG 3945e3 g 1")
+ << u"ar_EG"_s << u"\u0664\u0623\u0633\u061c+\u0660\u0666"_s << 3945e3 << 'g' << 1;
+ QTest::newRow("fa_IR 0.000003945 g 1") // Farsi, Iran (same for Afghanistan)
+ << u"fa_IR"_s << u"\u06f4\u00d7\u06f1\u06f0^\u200e\u2212\u06f0\u06f6"_s
+ << 0.000003945 << 'g' << 1;
QTest::newRow("C 0.000003945 f 9") << QString("C") << QString("0.000003945") << 0.000003945 << 'f' << 9;
QTest::newRow("C 0.000003945 f -") << QString("C") << QString("0.000003945") << 0.000003945 << 'f' << shortest;
@@ -1207,6 +1406,14 @@ void tst_QLocale::strtod_data()
QTest::newRow("12456789012") << QString("12456789012") << 12456789012.0 << 11 << true;
QTest::newRow("1.2456789012e10") << QString("1.2456789012e10") << 12456789012.0 << 15 << true;
+ // Overflow - fails but reports right length:
+ QTest::newRow("1e2000") << QString("1e2000") << qInf() << 6 << false;
+ QTest::newRow("-1e2000") << QString("-1e2000") << -qInf() << 7 << false;
+
+ // Underflow - fails but reports right length:
+ QTest::newRow("1e-2000") << QString("1e-2000") << 0.0 << 7 << false;
+ QTest::newRow("-1e-2000") << QString("-1e-2000") << 0.0 << 8 << false;
+
// starts with junk, fails
QTest::newRow("a0") << QString("a0") << 0.0 << 0 << false;
QTest::newRow("a0.") << QString("a0.") << 0.0 << 0 << false;
@@ -1238,6 +1445,18 @@ void tst_QLocale::strtod_data()
QTest::newRow("12456789012f") << QString("12456789012f") << 12456789012.0 << 11 << true;
QTest::newRow("1.2456789012e10g") << QString("1.2456789012e10g") << 12456789012.0 << 15 << true;
+ // Overflow, ends with cruft - fails but reports right length:
+ QTest::newRow("1e2000 cruft") << QString("1e2000 cruft") << qInf() << 6 << false;
+ QTest::newRow("-1e2000 cruft") << QString("-1e2000 cruft") << -qInf() << 7 << false;
+
+ // NaN and nan
+ QTest::newRow("NaN") << QString("NaN") << qQNaN() << 3 << true;
+ QTest::newRow("nan") << QString("nan") << qQNaN() << 3 << true;
+
+ // Underflow, ends with cruft - fails but reports right length:
+ QTest::newRow("1e-2000 cruft") << QString("1e-2000 cruft") << 0.0 << 7 << false;
+ QTest::newRow("-1e-2000 cruft") << QString("-1e-2000 cruft") << 0.0 << 8 << false;
+
// "0x" prefix, success but only for the "0" before "x"
QTest::newRow("0x0") << QString("0x0") << 0.0 << 1 << true;
QTest::newRow("0x0.") << QString("0x0.") << 0.0 << 1 << true;
@@ -1261,7 +1480,7 @@ void tst_QLocale::strtod()
QFETCH(int, processed);
QFETCH(bool, ok);
- QByteArray numData = num_str.toLatin1();
+ QByteArray numData = num_str.toUtf8();
const char *end = nullptr;
bool actualOk = false;
double result = qstrtod(numData.constData(), &end, &actualOk);
@@ -1270,9 +1489,9 @@ void tst_QLocale::strtod()
QCOMPARE(actualOk, ok);
QCOMPARE(static_cast<int>(end - numData.constData()), processed);
- // make sure neither QByteArray, QString or QLocale also work
- // (but they don't support incomplete parsing)
- if (processed == num_str.size() || processed == 0) {
+ // Make sure QByteArray, QString and QLocale also work.
+ // (They don't support incomplete parsing, and give 0 for overflow.)
+ if (ok && (processed == num_str.size() || processed == 0)) {
actualOk = false;
QCOMPARE(num_str.toDouble(&actualOk), num);
QCOMPARE(actualOk, ok);
@@ -1395,52 +1614,109 @@ void tst_QLocale::long_long_conversion_extra()
QCOMPARE(l.toString((qulonglong)12345), QString("12,345"));
}
-void tst_QLocale::testInfAndNan()
+void tst_QLocale::infNaN()
{
- double neginf = log(0.0);
- double nan = sqrt(-1.0);
-
-#ifdef Q_OS_WIN
- // these cause INVALID floating point exception so we want to clear the status.
- _clear87();
-#endif
-
- QVERIFY(qIsInf(-neginf));
- QVERIFY(!qIsNaN(-neginf));
- QVERIFY(!qIsFinite(-neginf));
+ // TODO: QTBUG-95460 -- could support localized forms of inf/NaN
+ const QLocale c(QLocale::C);
+ QCOMPARE(c.toString(qQNaN()), u"nan");
+ QCOMPARE(c.toString(qQNaN(), 'e'), u"nan");
+ QCOMPARE(c.toString(qQNaN(), 'f'), u"nan");
+ QCOMPARE(c.toString(qQNaN(), 'g'), u"nan");
+ QCOMPARE(c.toString(qQNaN(), 'E'), u"NAN");
+ QCOMPARE(c.toString(qQNaN(), 'F'), u"NAN");
+ QCOMPARE(c.toString(qQNaN(), 'G'), u"NAN");
+
+ QCOMPARE(c.toString(qInf()), u"inf");
+ QCOMPARE(c.toString(qInf(), 'e'), u"inf");
+ QCOMPARE(c.toString(qInf(), 'f'), u"inf");
+ QCOMPARE(c.toString(qInf(), 'g'), u"inf");
+ QCOMPARE(c.toString(qInf(), 'E'), u"INF");
+ QCOMPARE(c.toString(qInf(), 'F'), u"INF");
+ QCOMPARE(c.toString(qInf(), 'G'), u"INF");
+
+ // Precision is ignored for inf and NaN:
+ QCOMPARE(c.toString(qQNaN(), 'g', 42), u"nan");
+ QCOMPARE(c.toString(qQNaN(), 'G', 42), u"NAN");
+ QCOMPARE(c.toString(qInf(), 'g', 42), u"inf");
+ QCOMPARE(c.toString(qInf(), 'G', 42), u"INF");
+
+ // Case is ignored when parsing inf and NaN:
+ bool ok = false;
+ QCOMPARE(c.toDouble("inf", &ok), qInf());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("INF", &ok), qInf());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("Inf", &ok), qInf());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("+inf", &ok), qInf());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("+INF", &ok), qInf());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("+inF", &ok), qInf());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("-inf", &ok), -qInf());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("-INF", &ok), -qInf());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("-iNf", &ok), -qInf());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("nan", &ok), qQNaN());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("NaN", &ok), qQNaN());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("NAN", &ok), qQNaN());
+ QVERIFY(ok);
+ QCOMPARE(c.toDouble("nAn", &ok), qQNaN());
+ QVERIFY(ok);
+ // Sign is invalid for NaN:
+ QCOMPARE(c.toDouble("-nan", &ok), 0.0);
+ QVERIFY(!ok);
+ QCOMPARE(c.toDouble("+nan", &ok), 0.0);
+ QVERIFY(!ok);
- QVERIFY(!qIsInf(nan));
- QVERIFY(qIsNaN(nan));
- QVERIFY(!qIsFinite(nan));
- QVERIFY(!qIsInf(1.234));
- QVERIFY(!qIsNaN(1.234));
- QVERIFY(qIsFinite(1.234));
+ // Case is ignored when parsing inf and NaN:
+ QCOMPARE(c.toFloat("inf", &ok), float(qInf()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("INF", &ok), float(qInf()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("Inf", &ok), float(qInf()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("+inf", &ok), float(qInf()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("+INF", &ok), float(qInf()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("+inF", &ok), float(qInf()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("-inf", &ok), -float(qInf()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("-INF", &ok), -float(qInf()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("-iNf", &ok), -float(qInf()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("nan", &ok), float(qQNaN()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("NaN", &ok), float(qQNaN()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("NAN", &ok), float(qQNaN()));
+ QVERIFY(ok);
+ QCOMPARE(c.toFloat("nAn", &ok), float(qQNaN()));
+ QVERIFY(ok);
+ // Sign is invalid for NaN:
+ QCOMPARE(c.toFloat("-nan", &ok), 0.0f);
+ QVERIFY(!ok);
+ QCOMPARE(c.toFloat("+nan", &ok), 0.0f);
+ QVERIFY(!ok);
}
void tst_QLocale::fpExceptions()
{
-#ifndef _MCW_EM
-#define _MCW_EM 0x0008001F
-#endif
-#ifndef _EM_INEXACT
-#define _EM_INEXACT 0x00000001
-#endif
-
- // check that double-to-string conversion doesn't throw floating point exceptions when they are
- // enabled
-#ifdef Q_OS_WIN
- _clear87();
- unsigned int oldbits = _control87(0, 0);
- _control87( 0 | _EM_INEXACT, _MCW_EM );
-#endif
-
-#ifdef QT_USE_FENV
+#if defined(FE_ALL_EXCEPT) && FE_ALL_EXCEPT != 0
+ // Check that double-to-string conversion doesn't throw floating point
+ // exceptions when they are enabled.
fenv_t envp;
fegetenv(&envp);
feclearexcept(FE_ALL_EXCEPT);
- feenableexcept(FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INVALID);
-#endif
QString::number(1000.1245);
QString::number(1.1);
@@ -1448,12 +1724,7 @@ void tst_QLocale::fpExceptions()
QVERIFY(true);
-#ifdef Q_OS_WIN
- _clear87();
- _control87(oldbits, 0xFFFFF);
-#endif
-
-#ifdef QT_USE_FENV
+ QCOMPARE(fetestexcept(FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INVALID), 0);
fesetenv(&envp);
#endif
}
@@ -1602,7 +1873,7 @@ void tst_QLocale::formatTime_data()
QTest::newRow("C-quote-dquote-H") << QTime(1, 2, 3) << "C" << "'\"H\"'" << "\"H\"";
QTest::newRow("C-H:m:s.z") << QTime(1, 2, 3, 456) << "C" << "H:m:s.z" << "1:2:3.456";
- QTest::newRow("C-H:m:s.zz") << QTime(1, 2, 3, 456) << "C" << "H:m:s.zz" << "1:2:3.456456";
+ QTest::newRow("C-H:m:s.zz") << QTime(1, 2, 3, 456) << "C" << "H:m:s.zz" << "1:2:3.456";
QTest::newRow("C-H:m:s.zzz") << QTime(1, 2, 3, 456) << "C" << "H:m:s.zzz" << "1:2:3.456";
QTest::newRow("C-H:m:s.z=400") << QTime(1, 2, 3, 400) << "C" << "H:m:s.z" << "1:2:3.4";
QTest::newRow("C-H:m:s.zzz=400") << QTime(1, 2, 3, 400) << "C" << "H:m:s.zzz" << "1:2:3.400";
@@ -1828,30 +2099,36 @@ void tst_QLocale::formatTimeZone()
{
QLocale enUS("en_US");
- QDateTime dt1(QDate(2013, 1, 1), QTime(1, 0, 0), Qt::OffsetFromUTC, 60 * 60);
+ QDateTime dt1(QDate(2013, 1, 1), QTime(1, 0), QTimeZone::fromSecondsAheadOfUtc(60 * 60));
QCOMPARE(enUS.toString(dt1, "t"), QLatin1String("UTC+01:00"));
- QDateTime dt2(QDate(2013, 1, 1), QTime(1, 0, 0), Qt::OffsetFromUTC, -60 * 60);
+ QDateTime dt2(QDate(2013, 1, 1), QTime(1, 0), QTimeZone::fromSecondsAheadOfUtc(-60 * 60));
QCOMPARE(enUS.toString(dt2, "t"), QLatin1String("UTC-01:00"));
- QDateTime dt3(QDate(2013, 1, 1), QTime(0, 0, 0), Qt::UTC);
+ QDateTime dt3(QDate(2013, 1, 1), QTime(0, 0), QTimeZone::UTC);
QCOMPARE(enUS.toString(dt3, "t"), QLatin1String("UTC"));
// LocalTime should vary
if (europeanTimeZone) {
// Time definitely in Standard Time
- QDateTime dt4(QDate(2013, 1, 1), QTime(0, 0, 0), Qt::LocalTime);
-#ifdef Q_OS_WIN
- QEXPECT_FAIL("", "Windows only returns long name (QTBUG-32759)", Continue);
-#endif // Q_OS_WIN
- QCOMPARE(enUS.toString(dt4, "t"), QLatin1String("CET"));
+ const QStringList knownCETus = {
+ u"GMT+1"_s, // ICU
+ u"Central Europe Standard Time"_s, // MS (lacks abbreviations)
+ u"Central European Standard Time"_s,
+ u"CET"_s // Standard abbreviation
+ };
+ const QString cet = enUS.toString(QDate(2013, 1, 1).startOfDay(), u"t");
+ QVERIFY2(knownCETus.contains(cet), qPrintable(cet));
// Time definitely in Daylight Time
- QDateTime dt5(QDate(2013, 6, 1), QTime(0, 0, 0), Qt::LocalTime);
-#ifdef Q_OS_WIN
- QEXPECT_FAIL("", "Windows only returns long name (QTBUG-32759)", Continue);
-#endif // Q_OS_WIN
- QCOMPARE(enUS.toString(dt5, "t"), QLatin1String("CEST"));
+ const QStringList knownCESTus = {
+ u"GMT+2"_s, // ICU
+ u"Central Europe Summer Time"_s, // MS (lacks abbreviations)
+ u"Central European Summer Time"_s,
+ u"CEST"_s // Standard abbreviation
+ };
+ const QString cest = enUS.toString(QDate(2013, 6, 1).startOfDay(), u"t");
+ QVERIFY2(knownCESTus.contains(cest), qPrintable(cest));
} else {
qDebug("(Skipped some CET-only tests)");
}
@@ -1861,17 +2138,22 @@ void tst_QLocale::formatTimeZone()
const QDateTime jan(QDate(2010, 1, 1).startOfDay(berlin));
const QDateTime jul(QDate(2010, 7, 1).startOfDay(berlin));
- QCOMPARE(enUS.toString(jan, "t"), berlin.abbreviation(jan));
- QCOMPARE(enUS.toString(jul, "t"), berlin.abbreviation(jul));
+ QCOMPARE(enUS.toString(jan, "t"), berlin.displayName(jan, QTimeZone::ShortName, enUS));
+ QCOMPARE(enUS.toString(jul, "t"), berlin.displayName(jul, QTimeZone::ShortName, enUS));
#endif
- // Current datetime should return current abbreviation
- QCOMPARE(enUS.toString(QDateTime::currentDateTime(), "t"),
- QDateTime::currentDateTime().timeZoneAbbreviation());
+ // Current datetime should use current zone's abbreviation:
+ const auto now = QDateTime::currentDateTime();
+ QString zone;
+#if QT_CONFIG(timezone) // Match logic in QDTP's startsWithLocalTimeZone() helper.
+ zone = now.timeRepresentation().displayName(now, QTimeZone::ShortName, enUS);
+ if (zone.isEmpty()) // Fall back to unlocalized from when no timezone backend:
+#endif
+ zone = now.timeZoneAbbreviation();
+ QCOMPARE(enUS.toString(now, "t"), zone);
- // Time on its own will always be current local time zone
- QCOMPARE(enUS.toString(QTime(1, 2, 3), "t"),
- QDateTime::currentDateTime().timeZoneAbbreviation());
+ // Time on its own will always use the current local time zone:
+ QCOMPARE(enUS.toString(now.time(), "t"), zone);
}
void tst_QLocale::toDateTime_data()
@@ -1880,7 +2162,8 @@ void tst_QLocale::toDateTime_data()
QTest::addColumn<QDateTime>("result");
QTest::addColumn<QString>("format");
QTest::addColumn<QString>("string");
- QTest::addColumn<bool>("clean"); // No non-format letters in format string
+ // No non-format letters in format string, no time-zone (t format):
+ QTest::addColumn<bool>("clean");
QTest::newRow("1C") << "C" << QDateTime(QDate(1974, 12, 1), QTime(5, 14, 0))
<< "d/M/yyyy hh:h:mm" << "1/12/1974 05:5:14" << true;
@@ -1934,6 +2217,18 @@ void tst_QLocale::toDateTime_data()
QTest::newRow("12no_NO") << "no_NO" << QDateTime(QDate(1974, 12, 1), QTime(15, 0, 0))
<< "d'd'dd/M/yyh" << "1d01/12/7415" << false;
+ QTest::newRow("short-ss") // QTBUG-102199: trips over an assert in CET
+ << "C" << QDateTime() // Single-digit seconds does not match ss format.
+ << u"ddd, d MMM yyyy HH:mm:ss"_s << u"Sun, 29 Mar 2020 02:26:3"_s << true;
+
+ QTest::newRow("short-ss-Z") // Same, but with a valid date-time:
+ << "C" << QDateTime()
+ << u"ddd, d MMM yyyy HH:mm:ss t"_s << u"Sun, 29 Mar 2020 02:26:3 Z"_s << false;
+
+ QTest::newRow("s-Z") // Same, but with a format that accepts the single digit:
+ << "C" << QDateTime(QDate(2020, 3, 29), QTime(2, 26, 3), QTimeZone::UTC)
+ << u"ddd, d MMM yyyy HH:mm:s t"_s << u"Sun, 29 Mar 2020 02:26:3 Z"_s << false;
+
QTest::newRow("RFC-1123")
<< "C" << QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30))
<< "ddd, dd MMM yyyy hh:mm:ss 'GMT'" << "Thu, 01 Nov 2007 18:08:30 GMT" << false;
@@ -2025,7 +2320,354 @@ void tst_QLocale::toDateTime()
QCOMPARE(l.toDateTime(string, QLocale::ShortFormat), result);
}
-#ifdef Q_OS_MAC
+void tst_QLocale::toDate_data()
+{
+ QTest::addColumn<QLocale>("locale");
+ QTest::addColumn<QDate>("result");
+ QTest::addColumn<QString>("format");
+ QTest::addColumn<QString>("string");
+ // No non-format letters in format string:
+ QTest::addColumn<bool>("clean");
+
+ const auto C = QLocale::c();
+ QTest::newRow("C-d/M/yyyy")
+ << C << QDate(1974, 12, 1) << u"d/M/yyyy"_s << u"1/12/1974"_s << true;
+ QTest::newRow("C-d/M/yyyyy")
+ << C << QDate(1974, 12, 1) << u"d/M/yyyyy"_s << u"1/12/1974y"_s << false;
+ QTest::newRow("C-dd/MM/yyy")
+ << C << QDate(1974, 1, 1) << u"dd/MM/yyy"_s << u"01/01/74y"_s << false;
+ QTest::newRow("C-ddddd/MMMMM/yy")
+ << C << QDate(1974, 12, 2) << u"ddddd/MMMMM/yy"_s << u"Monday2/December12/74"_s
+ << true;
+ QTest::newRow("C-'dddd'/MMMM/yy")
+ << C << QDate(1974, 12, 1) << u"'dddd'/MMMM/yy"_s << u"dddd/December/74"_s << false;
+ QTest::newRow("C-d'dd'd/MMMM/yyy")
+ << C << QDate(1974, 12, 1) << u"d'dd'd/MMMM/yyy"_s << u"1dd1/December/74y"_s << false;
+ QTest::newRow("C-d'dd'd/MMM'M'/yy")
+ << C << QDate(1974, 12, 1) << u"d'dd'd/MMM'M'/yy"_s << u"1dd1/DecM/74"_s << false;
+ QTest::newRow("C-d'd'dd/M/yy")
+ << C << QDate(1974, 12, 1) << u"d'd'dd/M/yy"_s << u"1d01/12/74"_s << false;
+ // Unpadded value for fixed-width field is wrong:
+ QTest::newRow("bad-day-C")
+ << C << QDate() << u"dd-MMM-yy"_s << u"4-Jun-11"_s << true;
+ QTest::newRow("bad-month-C")
+ << C << QDate() << u"d-MM-yy"_s << u"4-6-11"_s << true;
+ QTest::newRow("bad-year-C")
+ << C << QDate() << u"d-MMM-yyyy"_s << u"4-Jun-11"_s << true;
+ QTest::newRow("ok-C")
+ << C << QDate(1911, 6, 4) << u"d-MMM-yy"_s << u"4-Jun-11"_s << true;
+
+ // Locale-specific details frozen to avoid CLDR update breakage.
+ // However, updating to match CLDR from time to time would be constructive.
+ const QLocale norsk{QLocale::NorwegianBokmal, QLocale::Norway};
+ QTest::newRow("no_NO-d/M/yyyy")
+ << norsk << QDate(1974, 12, 1) << u"d/M/yyyy"_s << u"1/12/1974"_s << true;
+ QTest::newRow("no_NO-d/M/yyyyy")
+ << norsk << QDate(1974, 12, 1) << u"d/M/yyyyy"_s << u"1/12/1974y"_s << false;
+ QTest::newRow("no_NO-dd/MM/yyy")
+ << norsk << QDate(1974, 1, 1) << u"dd/MM/yyy"_s << u"01/01/74y"_s << false;
+ QTest::newRow("no_NO-ddddd/MMMMM/yy")
+ << norsk << QDate(1974, 12, 2) << u"ddddd/MMMMM/yy"_s << u"mandag2/desember12/74"_s
+ << true;
+ QTest::newRow("no_NO-'dddd'/MMMM/yy")
+ << norsk << QDate(1974, 12, 1) << u"'dddd'/MMMM/yy"_s << u"dddd/desember/74"_s
+ << false;
+ QTest::newRow("no_NO-d'dd'd/MMMM/yyy")
+ << norsk << QDate(1974, 12, 1) << u"d'dd'd/MMMM/yyy"_s << u"1dd1/desember/74y"_s
+ << false;
+ QTest::newRow("no_NO-d'dd'd/MMM'M'/yy")
+ << norsk << QDate(1974, 12, 1) << u"d'dd'd/MMM'M'/yy"_s << u"1dd1/des.M/74"_s
+ << false;
+ QTest::newRow("no_NO-d'd'dd/M/yy")
+ << norsk << QDate(1974, 12, 1) << u"d'd'dd/M/yy"_s << u"1d01/12/74"_s << false;
+
+ QTest::newRow("RFC-1123")
+ << C << QDate(2007, 11, 1) << u"ddd, dd MMM yyyy 'GMT'"_s << u"Thu, 01 Nov 2007 GMT"_s
+ << false;
+
+ const QLocale usa{QLocale::English, QLocale::UnitedStates};
+ QTest::newRow("longFormat")
+ << usa << QDate(2009, 1, 5) << u"dddd, MMMM d, yyyy"_s
+ << u"Monday, January 5, 2009"_s << true;
+ QTest::newRow("shortFormat") // Use of two-digit year considered harmful.
+ << usa << QDate(1909, 1, 5) << u"M/d/yy"_s << u"1/5/09"_s << true;
+
+ const QDate date(2017, 02, 25);
+ QTest::newRow("C:long")
+ << C << date << "dddd, d MMMM yyyy" << u"Saturday, 25 February 2017"_s << true;
+ QTest::newRow("C:short")
+ << C << date << u"d MMM yyyy"_s << u"25 Feb 2017"_s << true;
+ QTest::newRow("C:narrow")
+ << C << date << u"d MMM yyyy"_s << u"25 Feb 2017"_s << true;
+
+ // Test the same again with unicode and emoji.
+ QTest::newRow("C:long with emoji")
+ << C << date << u8"dddd, d💪MMMM yyyy" << u8"Saturday, 25💪February 2017" << true;
+ QTest::newRow("C:short with emoji")
+ << C << date << u8"d📞MMM📞yyyy" << u8"25📞Feb📞2017" << true;
+ QTest::newRow("C:narrow with emoji")
+ << C << date << u8"🇬🇧d MMM yyyy🇬🇧"
+ << u8"🇬🇧25 Feb 2017🇬🇧" << true;
+
+ const QLocale fr{QLocale::French};
+ QTest::newRow("fr:long")
+ << fr << date << "dddd d MMMM yyyy" << u"Samedi 25 février 2017"_s << true;
+ QTest::newRow("fr:short")
+ << fr << date << u"dd/MM/yyyy"_s << u"25/02/2017"_s << true;
+
+ // In Turkish, the word for Friday ("Cuma") is a prefix for the word for
+ // Saturday ("Cumartesi")
+ const QLocale turk(QLocale::Turkish);
+ QTest::newRow("tr:long-Cumartesi")
+ << turk << date << u"d MMMM yyyy dddd"_s << u"25 Åžubat 2017 Cumartesi"_s << true;
+ QTest::newRow("tr:long-Cuma")
+ << turk << date.addDays(-1) << "d MMMM yyyy dddd" << u"24 Åžubat 2017 Cuma"_s << true;
+ QTest::newRow("tr:mashed-Cumartesi")
+ << turk << date << u"d MMMMyyyydddd"_s << u"25 Åžubat2017Cumartesi"_s << true;
+ QTest::newRow("tr:mashed-Cuma")
+ << turk << date.addDays(-1) << "ddddd MMMMyyyy" << u"Cuma24 Åžubat2017"_s << true;
+ QTest::newRow("tr:short")
+ << turk << date << u"d.MM.yyyy"_s << u"25.02.2017"_s << true;
+
+ const QLocale chakma{QLocale::Chakma};
+ QTest::newRow("ccp:short")
+ << chakma << date << "dd/M/yy"
+ // "𑄸𑄻/𑄸/𑄷𑄽"
+ << QString::fromUcs4(U"\U00011138\U0001113b/\U00011138/\U00011137\U0001113d") << true;
+ QTest::newRow("ccp:long")
+ << chakma << date << "dddd, d MMMM, yyyy"
+ // "𑄥𑄧𑄚𑄨ð‘„𑄢𑄴, 𑄸𑄻 𑄜𑄬𑄛𑄴ð‘„𑄳𑄢𑄪𑄠𑄢𑄨, 𑄸𑄶𑄷𑄽"
+ << QString::fromUcs4(U"\U00011125\U00011127\U0001111a\U00011128\U0001111d\U00011122"
+ U"\U00011134, \U00011138\U0001113b \U0001111c\U0001112c\U0001111b"
+ U"\U00011134\U0001111d\U00011133\U00011122\U0001112a\U00011120"
+ U"\U00011122\U00011128, \U00011138\U00011136\U00011137\U0001113d")
+ << true;
+}
+
+void tst_QLocale::toDate()
+{
+ QFETCH(const QLocale, locale);
+ QFETCH(const QDate, result);
+ QFETCH(const QString, format);
+ QFETCH(const QString, string);
+ QFETCH(const bool, clean);
+
+ QEXPECT_FAIL("ccp:short", "QTBUG-87111: Handling of code points outside BMP is broken", Abort);
+ QEXPECT_FAIL("ccp:long", "QTBUG-87111: Handling of code points outside BMP is broken", Abort);
+ QCOMPARE(locale.toDate(string, format), result);
+ if (clean) {
+ QCOMPARE(locale.toDate(string.toLower(), format), result);
+ QCOMPARE(locale.toDate(string.toUpper(), format), result);
+ }
+
+ if (locale.dateFormat(QLocale::LongFormat) == format)
+ QCOMPARE(locale.toDate(string, QLocale::LongFormat), result);
+ if (locale.dateFormat(QLocale::ShortFormat) == format)
+ QCOMPARE(locale.toDate(string, QLocale::ShortFormat), result);
+}
+
+void tst_QLocale::toTime_data()
+{
+ QTest::addColumn<QLocale>("locale");
+ QTest::addColumn<QTime>("result");
+ QTest::addColumn<QString>("format");
+ QTest::addColumn<QString>("string");
+ // No non-format letters in format string:
+ QTest::addColumn<bool>("clean");
+
+ const auto C = QLocale::c();
+ QTest::newRow("C-hh:h:mm")
+ << C << QTime(5, 14) << u"hh:h:mm"_s << u"05:5:14"_s << true;
+ QTest::newRow("C-h")
+ << C << QTime(15, 0) << u"h"_s << u"15"_s << true;
+ QTest::newRow("C-zzz")
+ << C << QTime(0, 0, 0, 1) << u"zzz"_s << u"001"_s << true;
+ QTest::newRow("C-z/001")
+ << C << QTime(0, 0, 0, 1) << u"z"_s << u"001"_s << true;
+ QTest::newRow("C-z/1")
+ << C << QTime(0, 0, 0, 100) << u"z"_s << u"1"_s << true;
+ QTest::newRow("C-ss")
+ << C << QTime(0, 0, 13) << u"ss"_s << u"13"_s << true;
+ QTest::newRow("C-s")
+ << C << QTime(0, 0, 13) << u"s"_s << u"13"_s << true;
+ QTest::newRow("C-m'm'mm")
+ << C << QTime(0, 4) << u"m'm'mm"_s << u"4m04"_s << false;
+ QTest::newRow("C-hhmmsss")
+ << C << QTime(0, 0, 3) << u"hhmmsss"_s << u"0000033"_s << true;
+ // Unpadded value for fixed-width field is wrong:
+ QTest::newRow("bad-hour-C")
+ << C << QTime() << u"hh:m"_s << u"1:2"_s << true;
+ QTest::newRow("bad-min-C")
+ << C << QTime() << u"h:mm"_s << u"1:2"_s << true;
+ QTest::newRow("bad-sec-C")
+ << C << QTime() << u"d-MMM-yy h:m:ss"_s << u"4-Jun-11 1:2:3"_s << true;
+ QTest::newRow("bad-milli-C")
+ << C << QTime() << u"h:m:s.zzz"_s << u"1:2:3.4"_s << true;
+ QTest::newRow("ok-C")
+ << C << QTime(1, 2, 3, 400) << u"h:m:s.z"_s << u"1:2:3.4"_s << true;
+
+ // Locale-specific details frozen to avoid CLDR update breakage.
+ // However, updating to match CLDR from time to time would be constructive.
+ const QLocale norsk{QLocale::NorwegianBokmal, QLocale::Norway};
+ QTest::newRow("nb_NO-hh:h:mm")
+ << norsk << QTime(5, 14) << u"hh:h:mm"_s << u"05:5:14"_s << true;
+ QTest::newRow("nb_NO-h")
+ <<norsk << QTime(15, 0) << u"h"_s << u"15"_s << true;
+ QTest::newRow("nb_NO-zzz")
+ <<norsk << QTime(0, 0) << u"zzz"_s << u"000"_s << true;
+ QTest::newRow("nb_NO-z")
+ <<norsk << QTime(0, 0) << u"z"_s << u"0"_s << true;
+ QTest::newRow("nb_NO-ss")
+ <<norsk << QTime(0, 0, 13) << u"ss"_s << u"13"_s << true;
+ QTest::newRow("nb_NO-s")
+ <<norsk << QTime(0, 0, 13) << u"s"_s << u"13"_s << true;
+ QTest::newRow("nb_NO-m'm'mm")
+ <<norsk << QTime(0, 4) << u"m'm'mm"_s << u"4m04"_s << false;
+ QTest::newRow("nb_NO-hhmmsss")
+ <<norsk << QTime(0, 0, 3) << u"hhmmsss"_s << u"0000033"_s << true;
+
+ QTest::newRow("short-ss") // Single-digit seconds does not match ss format.
+ << C << QTime() << u"HH:mm:ss"_s << u"02:26:3"_s << true;
+ QTest::newRow("RFC-1123")
+ << C << QTime(18, 8, 30) << u"hh:mm:ss 'GMT'"_s << u"18:08:30 GMT"_s << false;
+
+ const QLocale usa{QLocale::English, QLocale::UnitedStates};
+ QTest::newRow("longFormat-AM")
+ << usa << QTime(4, 43, 32) << u"h:mm:ss AP "_s << u"4:43:32 AM "_s << true;
+ QTest::newRow("shortFormat-AM")
+ << usa << QTime(4, 43) << u"h:mm AP "_s << u"4:43 AM "_s << true;
+ QTest::newRow("longFormat-PM")
+ << usa << QTime(16, 43, 32) << u"h:mm:ss AP "_s << u"4:43:32 PM "_s << true;
+ QTest::newRow("shortFormat-PM")
+ << usa << QTime(16, 43) << u"h:mm AP "_s << u"4:43 PM "_s << true;
+ // Some locales use a narrow non-breaking space as separator, but
+ // the user can't see the difference from a space (QTBUG-114909):
+ QTest::newRow("shortFormat-AM-mixspace")
+ << usa << QTime(4, 43) << u"h:mm\u202F" "AP "_s << u"4:43 AM "_s << true;
+
+ // Parsing am/pm indicators case-insensitively:
+ const QLocale czech{QLocale::Czech, QLocale::Czechia};
+ QTest::newRow("am-cs_CZ")
+ << czech << QTime(8, 15, 44, 400) << u"hh:mm:ss.z aP"_s << u"08:15:44.4 dOp."_s
+ << true;
+ QTest::newRow("pm-cs_CZ")
+ << czech << QTime(12, 0) << u"hh:mm aP"_s << u"12:00 OdP."_s << true;
+
+ const QTime time(17, 21, 25);
+ QTest::newRow("C:long")
+ << C << time << "HH:mm:ss" << u"17:21:25"_s << true;
+ QTest::newRow("C:short")
+ << C << time << u"HH:mm:ss"_s << u"17:21:25"_s << true;
+ QTest::newRow("C:narrow")
+ << C << time << u"HH:mm:ss"_s << u"17:21:25"_s << true;
+
+ // Test the same again with unicode and emoji.
+ QTest::newRow("C:long with emoji")
+ << C << time << u8"HH💪mm💪ss" << u8"17💪21💪25" << true;
+ QTest::newRow("C:short with emoji")
+ << C << time << u8"HH📞mm📞ss" << u8"17📞21📞25" << true;
+ QTest::newRow("C:narrow with emoji")
+ << C << time << u8"🇬🇧HH:mm:ss🇬🇧"
+ << u8"🇬🇧17:21:25🇬🇧" << true;
+
+ const QLocale fr{QLocale::French};
+ QTest::newRow("fr:long")
+ << fr << time << "HH:mm:ss" << u"17:21:25"_s << true;
+ QTest::newRow("fr:short")
+ << fr << time.addSecs(-25) << u"HH:mm"_s << u"17:21"_s << true;
+ QTest::newRow("tr:short")
+ << QLocale(QLocale::Turkish) << time.addSecs(-25) << u"HH:mm"_s << u"17:21"_s << true;
+
+ const QLocale chakma{QLocale::Chakma};
+ QTest::newRow("ccp:short")
+ << chakma << time << "h:mm AP"
+ // "𑄸𑄻/𑄸/𑄷𑄽 𑄻:𑄸𑄷 PM"
+ << QString::fromUcs4(U"\U0001113b:\U00011138\U00011137 PM") << true;
+ QTest::newRow("ccp:long")
+ << chakma << time << "h:mm:ss AP"
+ // "𑄻:𑄸𑄷:𑄸𑄻 PM"
+ << QString::fromUcs4(U"\U0001113b:\U00011138\U00011137:\U00011138\U0001113b PM") << true;
+}
+
+void tst_QLocale::toTime()
+{
+ QFETCH(const QLocale, locale);
+ QFETCH(const QTime, result);
+ QFETCH(const QString, format);
+ QFETCH(const QString, string);
+ QFETCH(const bool, clean);
+
+ QEXPECT_FAIL("ccp:short", "QTBUG-87111: Handling of code points outside BMP is broken", Abort);
+ QEXPECT_FAIL("ccp:long", "QTBUG-87111: Handling of code points outside BMP is broken", Abort);
+ QCOMPARE(locale.toTime(string, format), result);
+ if (clean) {
+ QCOMPARE(locale.toTime(string.toLower(), format), result);
+ QCOMPARE(locale.toTime(string.toUpper(), format), result);
+ }
+
+ if (locale.timeFormat(QLocale::LongFormat) == format)
+ QCOMPARE(locale.toTime(string, QLocale::LongFormat), result);
+ if (locale.timeFormat(QLocale::ShortFormat) == format)
+ QCOMPARE(locale.toTime(string, QLocale::ShortFormat), result);
+}
+
+void tst_QLocale::doubleRoundTrip_data()
+{
+ QTest::addColumn<QString>("localeName");
+ QTest::addColumn<QString>("numberText");
+ QTest::addColumn<char>("numberFormat");
+
+ // Signs and exponent separator aren't single characters:
+ QTest::newRow("sv_SE 4e-06 g") // Swedish, Sweden
+ << u"sv_SE"_s << u"4\u00d7" "10^\u2212" "06"_s << 'g';
+ QTest::newRow("se_NO 4e-06 g") // Northern Sami, Norway
+ << u"se_NO"_s << u"4\u00b7" "10^\u2212" "06"_s << 'g';
+ QTest::newRow("ar_EG 4e-06 g") // Arabic, Egypt
+ << u"ar_EG"_s << u"\u0664\u0623\u0633\u061c-\u0660\u0666"_s << 'g';
+ QTest::newRow("fa_IR 4e-06 g") // Farsi, Iran
+ << u"fa_IR"_s << u"\u06f4\u00d7\u06f1\u06f0^\u200e\u2212\u06f0\u06f6"_s << 'g';
+}
+
+void tst_QLocale::doubleRoundTrip()
+{
+ QFETCH(QString, localeName);
+ QFETCH(QString, numberText);
+ QFETCH(char, numberFormat);
+
+ QLocale locale(localeName);
+ bool ok;
+
+ double number = locale.toDouble(numberText, &ok);
+ QVERIFY(ok);
+ QCOMPARE(locale.toString(number, numberFormat), numberText);
+}
+
+void tst_QLocale::integerRoundTrip_data()
+{
+ QTest::addColumn<QString>("localeName");
+ QTest::addColumn<QString>("numberText");
+
+ // Two-character signs:
+ // Arabic, Egypt
+ QTest::newRow("ar_EG -406") << u"ar_EG"_s << u"\u061c-\u0664\u0660\u0666"_s;
+ // Farsi, Iran
+ QTest::newRow("fa_IR -406") << u"fa_IR"_s << u"\u200e\u2212\u06f4\u06f0\u06f6"_s;
+}
+
+void tst_QLocale::integerRoundTrip()
+{
+ QFETCH(QString, localeName);
+ QFETCH(QString, numberText);
+
+ QLocale locale(localeName);
+ bool ok;
+
+ qlonglong number = locale.toLongLong(numberText, &ok);
+ QVERIFY(ok);
+ QCOMPARE(locale.toString(number), numberText);
+}
+
+#ifdef Q_OS_DARWIN
// Format number string according to system locale settings.
// Expected in format is US "1,234.56".
@@ -2067,7 +2709,7 @@ void tst_QLocale::macDefaultLocale()
|| locale.groupSeparator() == QStringView(u"\xA0") // no-breaking space
|| locale.groupSeparator() == QStringView(u"'")
|| locale.groupSeparator().isEmpty());
- QVERIFY(locale.decimalPoint() != locale.groupSeparator());
+ QCOMPARE_NE(locale.decimalPoint(), locale.groupSeparator());
// make sure we are using the system to parse them
QCOMPARE(locale.toString(1234.56), systemLocaleFormatNumber(QString("1,234.56")));
@@ -2127,7 +2769,7 @@ void tst_QLocale::macDefaultLocale()
QCOMPARE(locale.weekdays(), days);
}
-#endif // Q_OS_MAC
+#endif // Q_OS_DARWIN
#if defined(Q_OS_WIN)
#include <qt_windows.h>
@@ -2238,7 +2880,7 @@ void tst_QLocale::windowsDefaultLocale()
locale.toString(QDate(1974, 12, 1), QLocale::ShortFormat));
QCOMPARE(locale.toString(QDate(1974, 12, 1), QLocale::LongFormat),
QStringView(u"\u3021@\u3021\u3022@\u3021\u3029\u3027\u3024"));
- const QString expectedFormattedShortTime = QStringView(u"\u3021^\u3022").toString();
+ const QString expectedFormattedShortTime = QStringView(u"\u3021^\u3022^\u3023").toString();
QCOMPARE(locale.toString(QTime(1,2,3), QLocale::ShortFormat), expectedFormattedShortTime);
QCOMPARE(locale.toString(QTime(1,2,3), QLocale::NarrowFormat),
locale.toString(QTime(1,2,3), QLocale::ShortFormat));
@@ -2368,6 +3010,26 @@ void tst_QLocale::negativeNumbers()
i = locale.toInt(QLatin1String("-1000000"), &ok);
QVERIFY(ok);
QCOMPARE(i, -1000000);
+
+ // Several Arabic locales have an invisible script-marker before their signs:
+ const QLocale egypt(QLocale::Arabic, QLocale::Egypt);
+ QCOMPARE(egypt.toString(-403), u"\u061c-\u0664\u0660\u0663"_s);
+ i = egypt.toInt(u"\u061c-\u0664\u0660\u0663"_s, &ok);
+ QVERIFY(ok);
+ QCOMPARE(i, -403);
+ i = egypt.toInt(u"\u061c+\u0664\u0660\u0663"_s, &ok);
+ QVERIFY(ok);
+ QCOMPARE(i, 403);
+
+ // Likewise Farsi:
+ const QLocale farsi(QLocale::Persian, QLocale::Iran);
+ QCOMPARE(farsi.toString(-403), u"\u200e\u2212\u06f4\u06f0\u06f3"_s);
+ i = farsi.toInt(u"\u200e\u2212\u06f4\u06f0\u06f3"_s, &ok);
+ QVERIFY(ok);
+ QCOMPARE(i, -403);
+ i = farsi.toInt(u"\u200e+\u06f4\u06f0\u06f3"_s, &ok);
+ QVERIFY(ok);
+ QCOMPARE(i, 403);
}
#include <private/qlocale_p.h>
@@ -2385,9 +3047,9 @@ void tst_QLocale::testNames_data()
for (int i = 0; i < locale_data_count; ++i) {
const QLocaleData &item = locale_data[i];
const QByteArray lang =
- QLocale::languageToString(QLocale::Language(item.m_language_id)).toLatin1();
+ QLocale::languageToString(QLocale::Language(item.m_language_id)).toUtf8();
const QByteArray land =
- QLocale::territoryToString(QLocale::Territory(item.m_territory_id)).toLatin1();
+ QLocale::territoryToString(QLocale::Territory(item.m_territory_id)).toUtf8();
QTest::addRow("data_%d (%s/%s)", i, lang.constData(), land.constData())
<< QLocale::Language(item.m_language_id) << QLocale::Territory(item.m_territory_id);
@@ -2424,7 +3086,7 @@ void tst_QLocale::testNames()
if (language != QLocale::C) {
const int idx = name.indexOf(QLatin1Char('_'));
- QVERIFY(idx != -1);
+ QCOMPARE_NE(idx, -1);
const QString lang = name.left(idx);
QCOMPARE(QLocale(lang).language(), language);
@@ -2456,27 +3118,29 @@ void tst_QLocale::dayName_data()
QTest::newRow("ru_RU short")
<< QString("ru_RU") << QString::fromUtf8("\320\262\321\201") << 7 << QLocale::ShortFormat;
QTest::newRow("ru_RU narrow")
- << QString("ru_RU") << u"\u0412"_qs << 7 << QLocale::NarrowFormat;
+ << QString("ru_RU") << u"\u0412"_s << 7 << QLocale::NarrowFormat;
+
+ QTest::newRow("ga_IE/Mon") << QString("ga_IE") << QString("Luan") << 1 << QLocale::ShortFormat;
+ QTest::newRow("ga_IE/Sun") << QString("ga_IE") << QString("Domh") << 7 << QLocale::ShortFormat;
+ QTest::newRow("el_GR/Tue")
+ << QString("el_GR") << QString::fromUtf8("\316\244\317\201\316\257")
+ << 2 << QLocale::ShortFormat;
+ QTest::newRow("el_GR/Thu")
+ << QString("el_GR") << QString::fromUtf8("\316\240\316\255\316\274")
+ << 4 << QLocale::ShortFormat;
+ QTest::newRow("el_GR/Sat")
+ << QString("el_GR") << QString::fromUtf8("\316\243\316\254\316\262")
+ << 6 << QLocale::ShortFormat;
}
void tst_QLocale::dayName()
{
QFETCH(QString, locale_name);
- QFETCH(QString, dayName);
QFETCH(int, day);
QFETCH(QLocale::FormatType, format);
QLocale l(locale_name);
- QCOMPARE(l.dayName(day, format), dayName);
-
- QLocale ir("ga_IE");
- QCOMPARE(ir.dayName(1, QLocale::ShortFormat), QLatin1String("Luan"));
- QCOMPARE(ir.dayName(7, QLocale::ShortFormat), QLatin1String("Domh"));
-
- QLocale gr("el_GR");
- QCOMPARE(gr.dayName(2, QLocale::ShortFormat), QString::fromUtf8("\316\244\317\201\316\257"));
- QCOMPARE(gr.dayName(4, QLocale::ShortFormat), QString::fromUtf8("\316\240\316\255\316\274"));
- QCOMPARE(gr.dayName(6, QLocale::ShortFormat), QString::fromUtf8("\316\243\316\254\316\262"));
+ QTEST(l.dayName(day, format), "dayName");
}
void tst_QLocale::standaloneDayName_data()
@@ -2515,12 +3179,11 @@ void tst_QLocale::standaloneDayName_data()
void tst_QLocale::standaloneDayName()
{
QFETCH(QString, locale_name);
- QFETCH(QString, dayName);
QFETCH(int, day);
QFETCH(QLocale::FormatType, format);
QLocale l(locale_name);
- QCOMPARE(l.standaloneDayName(day, format), dayName);
+ QTEST(l.standaloneDayName(day, format), "dayName");
}
void tst_QLocale::underflowOverflow()
@@ -2573,10 +3236,9 @@ void tst_QLocale::defaultNumberingSystem_data()
void tst_QLocale::defaultNumberingSystem()
{
- QFETCH(QString, expect);
QLatin1String name(QTest::currentDataTag());
QLocale locale(name);
- QCOMPARE(locale.toString(123), expect);
+ QTEST(locale.toString(123), "expect");
}
void tst_QLocale::ampm_data()
@@ -2593,17 +3255,16 @@ void tst_QLocale::ampm_data()
QTest::newRow("tr_TR") << QString::fromUtf8("\303\226\303\226")
<< QString::fromUtf8("\303\226\123");
QTest::newRow("id_ID") << QStringLiteral("AM") << QStringLiteral("PM");
- QTest::newRow("ta_LK") << QString::fromUtf8("à®®à¯à®±à¯à®ªà®•à®²à¯") << QString::fromUtf8("பிறà¯à®ªà®•à®²à¯");
+ // CLDR v44 made Tamil's AM/PM inconsistent; AM was "à®®à¯à®±à¯à®ªà®•à®²à¯" before.
+ QTest::newRow("ta_LK") << QString::fromUtf8("AM") << QString::fromUtf8("பிறà¯à®ªà®•à®²à¯");
}
void tst_QLocale::ampm()
{
- QFETCH(QString, morn);
- QFETCH(QString, even);
QLatin1String name(QTest::currentDataTag());
QLocale locale(name == QLatin1String("C") ? QLocale(QLocale::C) : QLocale(name));
- QCOMPARE(locale.amText(), morn);
- QCOMPARE(locale.pmText(), even);
+ QTEST(locale.amText(), "morn");
+ QTEST(locale.pmText(), "even");
}
void tst_QLocale::dateFormat()
@@ -2650,7 +3311,11 @@ void tst_QLocale::dateFormat()
// And, indeed, one for a negative year:
old = sys.toString(QDate(-1173, 5, 1), QLocale::LongFormat);
QVERIFY(!old.isEmpty());
- QVERIFY2(old.contains(u"-1173"), qPrintable(old + QLatin1String(" for locale ") + sys.name()));
+ qsizetype yearDigitStart = old.indexOf(u"1173");
+ QVERIFY2(yearDigitStart != -1, qPrintable(old + QLatin1String(" for locale ") + sys.name()));
+ QStringView before = QStringView(old).first(yearDigitStart);
+ QVERIFY2(before.endsWith(QChar('-')) || before.endsWith(QChar(0x2212)),
+ qPrintable(old + QLatin1String(" has no minus sign for locale ") + sys.name()));
}
void tst_QLocale::timeFormat()
@@ -2675,6 +3340,11 @@ void tst_QLocale::timeFormat()
const QLocale bra("pt_BR");
QCOMPARE(bra.timeFormat(QLocale::ShortFormat), QLatin1String("HH:mm"));
QCOMPARE(bra.timeFormat(QLocale::LongFormat), QLatin1String("HH:mm:ss t"));
+
+ // QTBUG-123872 - we kludge CLDR's B to Ap:
+ const QLocale tw("zh_TW");
+ QCOMPARE(tw.timeFormat(QLocale::ShortFormat), "Aph:mm"_L1);
+ QCOMPARE(tw.timeFormat(QLocale::LongFormat), "Aph:mm:ss [t]"_L1);
}
void tst_QLocale::dateTimeFormat()
@@ -2717,7 +3387,7 @@ void tst_QLocale::monthName()
QCOMPARE(ru.monthName(1, QLocale::NarrowFormat), QString::fromUtf8("\320\257"));
const auto sys = QLocale::system();
if (sys.language() == QLocale::Russian) // QTBUG-92018
- QVERIFY(sys.monthName(3) != sys.standaloneMonthName(3));
+ QCOMPARE_NE(sys.monthName(3), sys.standaloneMonthName(3));
const QLocale ir("ga_IE");
QCOMPARE(ir.monthName(1, QLocale::ShortFormat), QLatin1String("Ean"));
@@ -2758,6 +3428,140 @@ void tst_QLocale::standaloneMonthName()
QCOMPARE(ru.standaloneMonthName(1, QLocale::NarrowFormat), QString::fromUtf8("\xd0\xaf"));
}
+void tst_QLocale::languageToString_data()
+{
+ QTest::addColumn<QLocale::Language>("language");
+ QTest::addColumn<QString>("name");
+
+ // Prone to change at CLDR updates.
+ QTest::newRow("cu") << QLocale::Church << u"Church Slavic"_s;
+ QTest::newRow("dyo") << QLocale::JolaFonyi << u"Jola-Fonyi"_s;
+ QTest::newRow("ff") << QLocale::Fulah << u"Fula"_s;
+ QTest::newRow("gd") << QLocale::Gaelic << u"Scottish Gaelic"_s;
+ QTest::newRow("ht") << QLocale::Haitian << u"Haitian Creole"_s;
+ QTest::newRow("lu") << QLocale::LubaKatanga << u"Luba-Katanga"_s;
+ QTest::newRow("mgh") << QLocale::MakhuwaMeetto << u"Makhuwa-Meetto"_s;
+ QTest::newRow("mgo") << QLocale::Meta << u"Meta\u02bc"_s;
+ QTest::newRow("mi") << QLocale::Maori << u"M\u0101" "ori"_s;
+ QTest::newRow("nb") << QLocale::NorwegianBokmal << u"Norwegian Bokm\u00e5" "l"_s;
+ QTest::newRow("nqo") << QLocale::Nko << u"N\u2019" "Ko"_s;
+ QTest::newRow("quc") << QLocale::Kiche << u"K\u02bc" "iche\u02bc"_s;
+ QTest::newRow("sah") << QLocale::Sakha << u"Yakut"_s;
+ QTest::newRow("vo") << QLocale::Volapuk << u"Volap\u00fc" "k"_s;
+}
+
+void tst_QLocale::languageToString()
+{
+ QFETCH(const QLocale::Language, language);
+ QTEST(QLocale::languageToString(language), "name");
+}
+
+void tst_QLocale::scriptToString_data()
+{
+ QTest::addColumn<QLocale::Script>("script");
+ QTest::addColumn<QString>("name");
+
+ // Prone to change at CLDR updates.
+ QTest::newRow("Cans")
+ << QLocale::CanadianAboriginalScript << u"Unified Canadian Aboriginal Syllabics"_s;
+ QTest::newRow("Dupl") << QLocale::DuployanScript << u"Duployan shorthand"_s;
+ QTest::newRow("Egyp") << QLocale::EgyptianHieroglyphsScript << u"Egyptian hieroglyphs"_s;
+ QTest::newRow("Nkoo") << QLocale::NkoScript << u"N\u2019" "Ko"_s;
+ QTest::newRow("Phag") << QLocale::PhagsPaScript << u"Phags-pa"_s;
+ QTest::newRow("Rohg") << QLocale::HanifiScript << u"Hanifi Rohingya"_s;
+ QTest::newRow("Sgnw") << QLocale::SignWritingScript << u"SignWriting"_s;
+ QTest::newRow("Xsux") << QLocale::CuneiformScript << u"Sumero-Akkadian Cuneiform"_s;
+}
+
+void tst_QLocale::scriptToString()
+{
+ QFETCH(const QLocale::Script, script);
+ QTEST(QLocale::scriptToString(script), "name");
+}
+
+void tst_QLocale::territoryToString_data()
+{
+ QTest::addColumn<QLocale::Territory>("territory");
+ QTest::addColumn<QString>("name");
+ // Prone to change at CLDR updates.
+
+ QTest::newRow("AX") << QLocale::AlandIslands << u"\u00c5" "land Islands"_s;
+ QTest::newRow("AG") << QLocale::AntiguaAndBarbuda << u"Antigua & Barbuda"_s;
+ QTest::newRow("BA") << QLocale::BosniaAndHerzegovina << u"Bosnia & Herzegovina"_s;
+ QTest::newRow("BL") << QLocale::SaintBarthelemy << u"St. Barth\u00e9" "lemy"_s;
+ QTest::newRow("CC") << QLocale::CocosIslands << u"Cocos (Keeling) Islands"_s;
+ QTest::newRow("CD") << QLocale::CongoKinshasa << u"Congo - Kinshasa"_s;
+ QTest::newRow("CG") << QLocale::CongoBrazzaville << u"Congo - Brazzaville"_s;
+ QTest::newRow("CI") << QLocale::IvoryCoast << u"C\u00f4" "te d\u2019" "Ivoire"_s;
+ QTest::newRow("CW") << QLocale::Curacao << u"Cura\u00e7" "ao"_s;
+ QTest::newRow("EA") << QLocale::CeutaAndMelilla << u"Ceuta & Melilla"_s;
+ QTest::newRow("GS")
+ << QLocale::SouthGeorgiaAndSouthSandwichIslands
+ << u"South Georgia & South Sandwich Islands"_s;
+ QTest::newRow("GW") << QLocale::GuineaBissau << u"Guinea-Bissau"_s;
+ QTest::newRow("HM") << QLocale::HeardAndMcDonaldIslands << u"Heard & McDonald Islands"_s;
+ QTest::newRow("IM") << QLocale::IsleOfMan << u"Isle of Man"_s;
+ QTest::newRow("KN") << QLocale::SaintKittsAndNevis << u"St. Kitts & Nevis"_s;
+ QTest::newRow("LC") << QLocale::SaintLucia << u"St. Lucia"_s;
+ QTest::newRow("MF") << QLocale::SaintMartin << u"St. Martin"_s;
+ QTest::newRow("MK") << QLocale::Macedonia << u"North Macedonia"_s;
+ QTest::newRow("MM") << QLocale::Myanmar << u"Myanmar (Burma)"_s;
+ QTest::newRow("MO") << QLocale::Macao << u"Macao SAR China"_s;
+ QTest::newRow("PM") << QLocale::SaintPierreAndMiquelon << u"St. Pierre & Miquelon"_s;
+ QTest::newRow("PN") << QLocale::Pitcairn << u"Pitcairn Islands"_s;
+ QTest::newRow("RE") << QLocale::Reunion << u"R\u00e9" "union"_s;
+ QTest::newRow("SH") << QLocale::SaintHelena << u"St. Helena"_s;
+ QTest::newRow("SJ") << QLocale::SvalbardAndJanMayen << u"Svalbard & Jan Mayen"_s;
+ QTest::newRow("ST")
+ << QLocale::SaoTomeAndPrincipe << u"S\u00e3" "o Tom\u00e9" " & Pr\u00ed" "ncipe"_s;
+ QTest::newRow("TA") << QLocale::TristanDaCunha << u"Tristan da Cunha"_s;
+ QTest::newRow("TC") << QLocale::TurksAndCaicosIslands << u"Turks & Caicos Islands"_s;
+ QTest::newRow("TR") << QLocale::Turkey << u"T\u00fc" "rkiye"_s;
+ QTest::newRow("TT") << QLocale::TrinidadAndTobago << u"Trinidad & Tobago"_s;
+ QTest::newRow("UM") << QLocale::UnitedStatesOutlyingIslands << u"U.S. Outlying Islands"_s;
+ QTest::newRow("VC") << QLocale::SaintVincentAndGrenadines << u"St. Vincent & Grenadines"_s;
+ QTest::newRow("VI") << QLocale::UnitedStatesVirginIslands << u"U.S. Virgin Islands"_s;
+ QTest::newRow("WF") << QLocale::WallisAndFutuna << u"Wallis & Futuna"_s;
+ QTest::newRow("001") << QLocale::World << u"world"_s;
+}
+
+void tst_QLocale::territoryToString()
+{
+ QFETCH(const QLocale::Territory, territory);
+ QTEST(QLocale::territoryToString(territory), "name");
+}
+
+void tst_QLocale::endonym_data()
+{
+ QTest::addColumn<QLocale>("locale");
+ QTest::addColumn<QString>("language");
+ QTest::addColumn<QString>("territory");
+
+ QTest::newRow("en")
+ << QLocale(QLocale::English, QLocale::UnitedStates)
+ << u"American English"_s << u"United States"_s;
+ QTest::newRow("en_GB")
+ << QLocale(QLocale::English, QLocale::UnitedKingdom)
+ << u"British English"_s << u"United Kingdom"_s; // So inaccurate
+}
+
+void tst_QLocale::endonym()
+{
+ QFETCH(const QLocale, locale);
+
+ auto report = qScopeGuard([locale]() {
+ qDebug()
+ << "Failed for" << locale.name()
+ << "with language" << QLocale::languageToString(locale.language())
+ << "for territory" << QLocale::territoryToString(locale.territory())
+ << "in script" << QLocale::scriptToString(locale.script());
+ });
+
+ QTEST(locale.nativeLanguageName(), "language");
+ QTEST(locale.nativeTerritoryName(), "territory");
+ report.dismiss();
+}
+
void tst_QLocale::currency()
{
const QLocale c(QLocale::C);
@@ -2837,38 +3641,88 @@ void tst_QLocale::uiLanguages_data()
QTest::newRow("en_US")
<< QLocale("en_US")
- << QStringList{QString("en"), QString("en-US"), QString("en-Latn-US")};
+ << QStringList{QString("en-Latn-US"), QString("en-US"), QString("en")};
QTest::newRow("en_Latn_US")
<< QLocale("en_Latn_US") // Specifying the default script makes no difference
- << QStringList{QString("en"), QString("en-US"), QString("en-Latn-US")};
+ << QStringList{QString("en-Latn-US"), QString("en-US"), QString("en")};
QTest::newRow("en_GB")
<< QLocale("en_GB")
- << QStringList{QString("en-GB"), QString("en-Latn-GB")};
+ << QStringList{QString("en-Latn-GB"), QString("en-GB")};
QTest::newRow("en_Dsrt_US")
<< QLocale("en_Dsrt_US")
- << QStringList{QString("en-Dsrt"), QString("en-Dsrt-US")};
+ << QStringList{QString("en-Dsrt-US"), QString("en-Dsrt")};
QTest::newRow("ru_RU")
<< QLocale("ru_RU")
- << QStringList{QString("ru"), QString("ru-RU"), QString("ru-Cyrl-RU")};
+ << QStringList{QString("ru-Cyrl-RU"), QString("ru-RU"), QString("ru")};
QTest::newRow("zh_Hant")
<< QLocale("zh_Hant")
- << QStringList{QString("zh-TW"), QString("zh-Hant-TW")};
+ << QStringList{QString("zh-Hant-TW"), QString("zh-TW")};
QTest::newRow("zh_Hans_CN")
<< QLocale(QLocale::Chinese, QLocale::SimplifiedHanScript, QLocale::China)
- << QStringList{QString("zh"), QString("zh-CN"), QString("zh-Hans-CN")};
+ << QStringList{QString("zh-Hans-CN"), QString("zh-CN"), QString("zh")};
+
+ // We presently map und (or any other unrecognized language) to C, ignoring
+ // what a sub-tag lookup would surely find us.
+ QTest::newRow("und_US") << QLocale("und_US") << QStringList{QString("C")};
+ QTest::newRow("und_Latn") << QLocale("und_Latn") << QStringList{QString("C")};
}
void tst_QLocale::uiLanguages()
{
+ // Compare mySystemLocale(), which tests the same for a custom system locale.
QFETCH(const QLocale, locale);
QFETCH(const QStringList, all);
- QCOMPARE(locale.uiLanguages(), all);
+ const auto expected = [all](QChar sep) {
+ QStringList adjusted;
+ for (QString name : all)
+ adjusted << name.replace(u'-', sep);
+ return adjusted;
+ };
+
+ {
+ // By default tags are joined with a dash:
+ const QStringList actual = locale.uiLanguages();
+ auto reporter = qScopeGuard([&actual]() {
+ qDebug("\n\t%ls", qUtf16Printable(actual.join("\n\t"_L1)));
+ });
+ QCOMPARE(actual, all);
+ reporter.dismiss();
+ }
+ {
+ // We also support joining with an underscore:
+ const QStringList actual = locale.uiLanguages(QLocale::TagSeparator::Underscore);
+ auto reporter = qScopeGuard([&actual]() {
+ qDebug("\n\t%ls", qUtf16Printable(actual.join("\n\t"_L1)));
+ });
+ QCOMPARE(actual, expected(u'_'));
+ reporter.dismiss();
+ }
+ {
+ // Or, in fact, any ASCII character:
+ const QStringList actual = locale.uiLanguages(QLocale::TagSeparator{'|'});
+ auto reporter = qScopeGuard([&actual]() {
+ qDebug("\n\t%ls", qUtf16Printable(actual.join("\n\t"_L1)));
+ });
+ QCOMPARE(actual, expected(u'|'));
+ reporter.dismiss();
+ }
+ {
+ // Non-ASCII separator (here, y-umlaut) is unsupported.
+ QTest::ignoreMessage(QtWarningMsg, "QLocale::uiLanguages(): "
+ "Using non-ASCII separator '\u00ff' (ff) is unsupported");
+ const QStringList actual = locale.uiLanguages(QLocale::TagSeparator{'\xff'});
+ auto reporter = qScopeGuard([&actual]() {
+ qDebug("\n\t%ls", qUtf16Printable(actual.join("\n\t"_L1)));
+ });
+ QCOMPARE(actual, QStringList{});
+ reporter.dismiss();
+ }
}
void tst_QLocale::weekendDays()
@@ -2929,8 +3783,7 @@ void tst_QLocale::measurementSystems_data()
void tst_QLocale::measurementSystems()
{
QFETCH(QLocale, locale);
- QFETCH(QLocale::MeasurementSystem, system);
- QCOMPARE(locale.measurementSystem(), system);
+ QTEST(locale.measurementSystem(), "system");
}
void tst_QLocale::QTBUG_26035_positivesign()
@@ -2964,6 +3817,7 @@ void tst_QLocale::textDirection_data()
case QLocale::Arabic:
case QLocale::Aramaic:
case QLocale::Avestan:
+ case QLocale::Baluchi:
case QLocale::CentralKurdish:
case QLocale::Divehi:
// case QLocale::Fulah:
@@ -2984,6 +3838,7 @@ void tst_QLocale::textDirection_data()
case QLocale::Sindhi:
case QLocale::SouthernKurdish:
case QLocale::Syriac:
+ case QLocale::Torwali:
case QLocale::Uighur:
case QLocale::Urdu:
case QLocale::WesternBalochi:
@@ -3006,10 +3861,9 @@ void tst_QLocale::textDirection()
{
QFETCH(int, language);
QFETCH(int, script);
- QFETCH(bool, rightToLeft);
QLocale locale(QLocale::Language(language), QLocale::Script(script), QLocale::AnyTerritory);
- QCOMPARE(locale.textDirection() == Qt::RightToLeft, rightToLeft);
+ QTEST(locale.textDirection() == Qt::RightToLeft, "rightToLeft");
}
void tst_QLocale::formattedDataSize_data()
@@ -3114,8 +3968,8 @@ void tst_QLocale::formattedDataSize()
QFETCH(int, decimalPlaces);
QFETCH(QLocale::DataSizeFormats, units);
QFETCH(int, bytes);
- QFETCH(QString, output);
- QCOMPARE(QLocale(language).formattedDataSize(bytes, decimalPlaces, units), output);
+
+ QTEST(QLocale(language).formattedDataSize(bytes, decimalPlaces, units), "output");
}
void tst_QLocale::bcp47Name_data()
@@ -3143,20 +3997,51 @@ void tst_QLocale::bcp47Name_data()
void tst_QLocale::bcp47Name()
{
- QFETCH(QString, expect);
- QCOMPARE(QLocale(QLatin1String(QTest::currentDataTag())).bcp47Name(), expect);
+ QFETCH(const QString, expect);
+ const auto expected = [expect](QChar ch) {
+ // Kludge around QString::replace() not being const.
+ QString copy = expect;
+ return copy.replace(u'-', ch);
+ };
+
+ const auto locale = QLocale(QLatin1String(QTest::currentDataTag()));
+ QCOMPARE(locale.bcp47Name(), expect);
+ QCOMPARE(locale.bcp47Name(QLocale::TagSeparator::Underscore), expected(u'_'));
+ QCOMPARE(locale.bcp47Name(QLocale::TagSeparator{'|'}), expected(u'|'));
+ QTest::ignoreMessage(QtWarningMsg, "QLocale::bcp47Name(): "
+ "Using non-ASCII separator '\u00ff' (ff) is unsupported");
+ QCOMPARE(locale.bcp47Name(QLocale::TagSeparator{'\xff'}), QString());
}
+#ifndef QT_NO_SYSTEMLOCALE
+# ifdef QT_BUILD_INTERNAL
class MySystemLocale : public QSystemLocale
{
+ Q_DISABLE_COPY_MOVE(MySystemLocale)
public:
- MySystemLocale(const QString &locale) : m_name(locale), m_locale(locale)
+ MySystemLocale(const QString &locale)
+ : m_name(locale), m_id(QLocaleId::fromName(locale)), m_locale(locale)
{
}
- QVariant query(QueryType type, QVariant /*in*/) const override
+ QVariant query(QueryType type, QVariant &&/*in*/) const override
{
- return type == UILanguages ? QVariant(QStringList{m_name}) : QVariant();
+ switch (type) {
+ case UILanguages:
+ if (m_name == u"en-DE") // QTBUG-104930: simulate macOS's list not including m_name.
+ return QVariant(QStringList{QStringLiteral("en-GB"), QStringLiteral("de-DE")});
+ return QVariant(QStringList{m_name});
+ case LanguageId:
+ return m_id.language_id;
+ case TerritoryId:
+ return m_id.territory_id;
+ case ScriptId:
+ return m_id.script_id;
+
+ default:
+ break;
+ }
+ return QVariant();
}
QLocale fallbackLocale() const override
@@ -3166,10 +4051,11 @@ public:
private:
const QString m_name;
+ const QLocaleId m_id;
const QLocale m_locale;
};
-void tst_QLocale::systemLocale_data()
+void tst_QLocale::mySystemLocale_data()
{
// Test uses MySystemLocale, so is platform-independent.
QTest::addColumn<QString>("name");
@@ -3178,23 +4064,75 @@ void tst_QLocale::systemLocale_data()
QTest::addRow("catalan")
<< QString("ca") << QLocale::Catalan
- << QStringList{QStringLiteral("ca"), QStringLiteral("ca-ES"), QStringLiteral("ca-Latn-ES")};
+ << QStringList{QStringLiteral("ca"), QStringLiteral("ca-Latn-ES"), QStringLiteral("ca-ES")};
+ QTest::addRow("catalan-spain")
+ << QString("ca-ES") << QLocale::Catalan
+ << QStringList{QStringLiteral("ca-ES"), QStringLiteral("ca-Latn-ES"), QStringLiteral("ca")};
+ QTest::addRow("catalan-latin")
+ << QString("ca-Latn") << QLocale::Catalan
+ << QStringList{QStringLiteral("ca-Latn"), QStringLiteral("ca-Latn-ES"),
+ QStringLiteral("ca-ES"), QStringLiteral("ca")};
QTest::addRow("ukrainian")
<< QString("uk") << QLocale::Ukrainian
- << QStringList{QStringLiteral("uk"), QStringLiteral("uk-UA"), QStringLiteral("uk-Cyrl-UA")};
+ << QStringList{QStringLiteral("uk"), QStringLiteral("uk-Cyrl-UA"), QStringLiteral("uk-UA")};
+ QTest::addRow("english-germany")
+ << QString("en-DE") << QLocale::English
+ // First two were missed out before fix to QTBUG-104930:
+ << QStringList{QStringLiteral("en-DE"), QStringLiteral("en-Latn-DE"),
+ QStringLiteral("en-GB"), QStringLiteral("en-Latn-GB"),
+ QStringLiteral("de-DE"), QStringLiteral("de-Latn-DE"), QStringLiteral("de")};
QTest::addRow("german")
<< QString("de") << QLocale::German
- << QStringList{QStringLiteral("de"), QStringLiteral("de-DE"), QStringLiteral("de-Latn-DE")};
+ << QStringList{QStringLiteral("de"), QStringLiteral("de-Latn-DE"), QStringLiteral("de-DE")};
+ QTest::addRow("german-britain")
+ << QString("de-GB") << QLocale::German
+ << QStringList{QStringLiteral("de-GB"), QStringLiteral("de-Latn-GB")};
QTest::addRow("chinese-min")
<< QString("zh") << QLocale::Chinese
- << QStringList{QStringLiteral("zh"), QStringLiteral("zh-CN"), QStringLiteral("zh-Hans-CN")};
+ << QStringList{QStringLiteral("zh"), QStringLiteral("zh-Hans-CN"), QStringLiteral("zh-CN")};
QTest::addRow("chinese-full")
<< QString("zh-Hans-CN") << QLocale::Chinese
- << QStringList{QStringLiteral("zh-Hans-CN"), QStringLiteral("zh"), QStringLiteral("zh-CN")};
+ << QStringList{QStringLiteral("zh-Hans-CN"), QStringLiteral("zh-CN"), QStringLiteral("zh")};
+
+ // For C, it should preserve what the system gave us but only add "C", never anything more:
+ QTest::addRow("C") << QString("C") << QLocale::C << QStringList{QStringLiteral("C")};
+ QTest::addRow("C-Latn")
+ << QString("C-Latn") << QLocale::C
+ << QStringList{QStringLiteral("C-Latn"), QStringLiteral("C")};
+ QTest::addRow("C-US")
+ << QString("C-US") << QLocale::C
+ << QStringList{QStringLiteral("C-US"), QStringLiteral("C")};
+ QTest::addRow("C-Latn-US")
+ << QString("C-Latn-US") << QLocale::C
+ << QStringList{QStringLiteral("C-Latn-US"), QStringLiteral("C")};
+ QTest::addRow("C-Hans")
+ << QString("C-Hans") << QLocale::C
+ << QStringList{QStringLiteral("C-Hans"), QStringLiteral("C")};
+ QTest::addRow("C-CN")
+ << QString("C-CN") << QLocale::C
+ << QStringList{QStringLiteral("C-CN"), QStringLiteral("C")};
+ QTest::addRow("C-Hans-CN")
+ << QString("C-Hans-CN") << QLocale::C
+ << QStringList{QStringLiteral("C-Hans-CN"), QStringLiteral("C")};
+
+ QTest::newRow("und-US")
+ << QString("und-US") << QLocale::C
+ << QStringList{QStringLiteral("und-US"), QStringLiteral("C")};
+
+ QTest::newRow("und-Latn")
+ << QString("und-Latn") << QLocale::C
+ << QStringList{QStringLiteral("und-Latn"), QStringLiteral("C")};
+
+ // TODO: test actual system backends correctly handle locales with
+ // script-specificity (script listed first is the default, in CLDR v40):
+ // az_{Latn,Cyrl}_AZ, bs_{Latn,Cyrl}_BA, sr_{Cyrl,Latn}_{BA,RS,XK,UZ},
+ // sr_{Latn,Cyrl}_ME, ff_{Latn,Adlm}_{BF,CM,GH,GM,GN,GW,LR,MR,NE,NG,SL,SN},
+ // shi_{Tfng,Latn}_MA, vai_{Vaii,Latn}_LR, zh_{Hant,Hans}_{MO,HK}
}
-void tst_QLocale::systemLocale()
+void tst_QLocale::mySystemLocale()
{
+ // Compare uiLanguages(), which tests this for CLDR-derived locales.
QLocale originalLocale;
QLocale originalSystemLocale = QLocale::system();
@@ -3206,14 +4144,18 @@ void tst_QLocale::systemLocale()
MySystemLocale sLocale(name);
QCOMPARE(QLocale().language(), language);
QCOMPARE(QLocale::system().language(), language);
+ auto reporter = qScopeGuard([]() {
+ qDebug("\n\t%s", qPrintable(QLocale::system().uiLanguages().join(u"\n\t")));
+ });
QCOMPARE(QLocale::system().uiLanguages(), uiLanguages);
+ reporter.dismiss();
}
+ // Verify MySystemLocale tidy-up restored prior state:
QCOMPARE(QLocale(), originalLocale);
QCOMPARE(QLocale::system(), originalSystemLocale);
}
-
-#ifndef QT_NO_SYSTEMLOCALE
+# endif // QT_BUILD_INTERNAL
void tst_QLocale::systemLocaleDayAndMonthNames_data()
{
@@ -3335,10 +4277,6 @@ void tst_QLocale::systemLocaleDayAndMonthNames()
QFETCH(QByteArray, locale);
QFETCH(QDate, date);
QFETCH(QLocale::FormatType, format);
- QFETCH(QString, month);
- QFETCH(QString, standaloneMonth);
- QFETCH(QString, day);
- QFETCH(QString, standaloneDay);
locale += ".UTF-8"; // So we don't have to repeat it on every data row !
const TransientLocale tested(LC_ALL, locale.constData());
@@ -3347,21 +4285,105 @@ void tst_QLocale::systemLocaleDayAndMonthNames()
#if !QT_CONFIG(icu)
// setlocale() does not really change locale on Windows and macOS, we
// need to actually set the locale manually to run the test
- if (!locale.startsWith(sys.name().toLatin1()))
+ if (!locale.startsWith(sys.name().toUtf8()))
QSKIP(("Set locale to " + locale + " manually to run this test.").constData());
#endif
const int m = date.month();
- QCOMPARE(sys.monthName(m, format), month);
- QCOMPARE(sys.standaloneMonthName(m, format), standaloneMonth);
+ QTEST(sys.monthName(m, format), "month");
+ QTEST(sys.standaloneMonthName(m, format), "standaloneMonth");
const int d = date.dayOfWeek();
- QCOMPARE(sys.dayName(d, format), day);
- QCOMPARE(sys.standaloneDayName(d, format), standaloneDay);
+ QTEST(sys.dayName(d, format), "day");
+ QTEST(sys.standaloneDayName(d, format), "standaloneDay");
}
#endif // QT_NO_SYSTEMLOCALE
+void tst_QLocale::numberGrouping_data()
+{
+ QTest::addColumn<QLocale>("locale");
+ QTest::addColumn<int>("number");
+ QTest::addColumn<QString>("string");
+ // Number options set here are expected to be default, but set for the
+ // avoidance of uncertainty or susceptibility to changed defaults.
+
+ QLocale c(QLocale::C); // English-style, without separators.
+ c.setNumberOptions(c.numberOptions() | QLocale::OmitGroupSeparator);
+ QTest::newRow("c:1") << c << 1 << u"1"_s;
+ QTest::newRow("c:12") << c << 12 << u"12"_s;
+ QTest::newRow("c:123") << c << 123 << u"123"_s;
+ QTest::newRow("c:1234") << c << 1234 << u"1234"_s;
+ QTest::newRow("c:12345") << c << 12345 << u"12345"_s;
+ QTest::newRow("c:123456") << c << 123456 << u"123456"_s;
+ QTest::newRow("c:1234567") << c << 1234567 << u"1234567"_s;
+ QTest::newRow("c:12345678") << c << 12345678 << u"12345678"_s;
+ QTest::newRow("c:123456789") << c << 123456789 << u"123456789"_s;
+ QTest::newRow("c:1234567890") << c << 1234567890 << u"1234567890"_s;
+
+ QLocale en(QLocale::English); // English-style, with separators:
+ en.setNumberOptions(en.numberOptions() & ~QLocale::OmitGroupSeparator);
+ QTest::newRow("en:1") << en << 1 << u"1"_s;
+ QTest::newRow("en:12") << en << 12 << u"12"_s;
+ QTest::newRow("en:123") << en << 123 << u"123"_s;
+ QTest::newRow("en:1,234") << en << 1234 << u"1,234"_s;
+ QTest::newRow("en:12,345") << en << 12345 << u"12,345"_s;
+ QTest::newRow("en:123,456") << en << 123456 << u"123,456"_s;
+ QTest::newRow("en:1,234,567") << en << 1234567 << u"1,234,567"_s;
+ QTest::newRow("en:12,345,678") << en << 12345678 << u"12,345,678"_s;
+ QTest::newRow("en:123,456,789") << en << 123456789 << u"123,456,789"_s;
+ QTest::newRow("en:1,234,567,890") << en << 1234567890 << u"1,234,567,890"_s;
+
+ QLocale es(QLocale::Spanish); // Spanish-style, with separators
+ es.setNumberOptions(es.numberOptions() & ~QLocale::OmitGroupSeparator);
+ QTest::newRow("es:1") << es << 1 << u"1"_s;
+ QTest::newRow("es:12") << es << 12 << u"12"_s;
+ QTest::newRow("es:123") << es << 123 << u"123"_s;
+ // First split doesn't happen unless first group has at least two digits:
+ QTest::newRow("es:1234") << es << 1234 << u"1234"_s;
+ QTest::newRow("es:12.345") << es << 12345 << u"12.345"_s;
+ QTest::newRow("es:123.456") << es << 123456 << u"123.456"_s;
+ // Later splits aren't limited to two digits (QTBUG-115740):
+ QTest::newRow("es:1.234.567") << es << 1234567 << u"1.234.567"_s;
+ QTest::newRow("es:12.345.678") << es << 12345678 << u"12.345.678"_s;
+ QTest::newRow("es:123.456.789") << es << 123456789 << u"123.456.789"_s;
+ QTest::newRow("es:1.234.567.890") << es << 1234567890 << u"1.234.567.890"_s;
+
+ QLocale hi(QLocale::Hindi, QLocale::India);
+ hi.setNumberOptions(hi.numberOptions() & ~QLocale::OmitGroupSeparator);
+ QTest::newRow("hi:1") << hi << 1 << u"1"_s;
+ QTest::newRow("hi:12") << hi << 12 << u"12"_s;
+ QTest::newRow("hi:123") << hi << 123 << u"123"_s;
+ QTest::newRow("hi:1,234") << hi << 1234 << u"1,234"_s;
+ QTest::newRow("hi:12,345") << hi << 12345 << u"12,345"_s;
+ QTest::newRow("hi:1,23,456") << hi << 123456 << u"1,23,456"_s;
+ QTest::newRow("hi:12,34,567") << hi << 1234567 << u"12,34,567"_s;
+ QTest::newRow("hi:1,23,45,678") << hi << 12345678 << u"1,23,45,678"_s;
+ QTest::newRow("hi:12,34,56,789") << hi << 123456789 << u"12,34,56,789"_s;
+ QTest::newRow("hi:1,23,45,67,890") << hi << 1234567890 << u"1,23,45,67,890"_s;
+}
+
+void tst_QLocale::numberGrouping()
+{
+ QFETCH(const QLocale, locale);
+ QFETCH(const int, number);
+ QFETCH(const QString, string);
+
+ QCOMPARE(locale.toString(number), string);
+ QLocale sys = QLocale::system();
+ if (sys.language() == locale.language()
+ && sys.script() == locale.script()
+ && sys.territory() == locale.territory()) {
+ sys.setNumberOptions(locale.numberOptions());
+
+ QCOMPARE(sys.toString(number), string);
+ if (QLocale() == sys) { // This normally should be the case.
+ QCOMPARE(u"%L1"_s.arg(number), string);
+ QCOMPARE(u"%L1"_s.arg(double(number), 0, 'f', 0), string);
+ }
+ }
+}
+
void tst_QLocale::numberGroupingIndia()
{
const QLocale indian(QLocale::Hindi, QLocale::India);
@@ -3501,18 +4523,18 @@ void tst_QLocale::lcsToCode()
QCOMPARE(QLocale::languageToCode(QLocale::AnyLanguage), QString());
QCOMPARE(QLocale::languageToCode(QLocale::C), QString("C"));
QCOMPARE(QLocale::languageToCode(QLocale::English), QString("en"));
- QCOMPARE(QLocale::languageToCode(QLocale::Albanian), u"sq"_qs);
- QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part1), u"sq"_qs);
- QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part2B), u"alb"_qs);
- QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part2T), u"sqi"_qs);
- QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part3), u"sqi"_qs);
+ QCOMPARE(QLocale::languageToCode(QLocale::Albanian), u"sq"_s);
+ QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part1), u"sq"_s);
+ QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part2B), u"alb"_s);
+ QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part2T), u"sqi"_s);
+ QCOMPARE(QLocale::languageToCode(QLocale::Albanian, QLocale::ISO639Part3), u"sqi"_s);
- QCOMPARE(QLocale::languageToCode(QLocale::Taita), u"dav"_qs);
+ QCOMPARE(QLocale::languageToCode(QLocale::Taita), u"dav"_s);
QCOMPARE(QLocale::languageToCode(QLocale::Taita,
QLocale::ISO639Part1 | QLocale::ISO639Part2B
| QLocale::ISO639Part2T),
QString());
- QCOMPARE(QLocale::languageToCode(QLocale::Taita, QLocale::ISO639Part3), u"dav"_qs);
+ QCOMPARE(QLocale::languageToCode(QLocale::Taita, QLocale::ISO639Part3), u"dav"_s);
QCOMPARE(QLocale::languageToCode(QLocale::English, QLocale::LanguageCodeTypes {}), QString());
// Legacy codes can only be used to convert them to Language values, not other way around.
diff --git a/tests/auto/corelib/text/qregularexpression/CMakeLists.txt b/tests/auto/corelib/text/qregularexpression/CMakeLists.txt
index 78e842b658..b1d3ed0a8d 100644
--- a/tests/auto/corelib/text/qregularexpression/CMakeLists.txt
+++ b/tests/auto/corelib/text/qregularexpression/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qregularexpression.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qregularexpression Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qregularexpression LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qregularexpression
SOURCES
tst_qregularexpression.cpp
diff --git a/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp b/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp
index 9ded894472..ad41ae331e 100644
--- a/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp
+++ b/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 Giuseppe D'Angelo <dangelog@gmail.com>.
-** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@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) 2015 Giuseppe D'Angelo <dangelog@gmail.com>.
+// Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qstring.h>
@@ -418,6 +393,7 @@ static void testMatch(const QRegularExpression &regexp,
result);
}
+// ### Qt 7: there should no longer be the need for these
typedef QRegularExpressionMatch (QRegularExpression::*QREMatchStringPMF)(const QString &, qsizetype, QRegularExpression::MatchType, QRegularExpression::MatchOptions) const;
typedef QRegularExpressionMatch (QRegularExpression::*QREMatchStringViewPMF)(QStringView, qsizetype, QRegularExpression::MatchType, QRegularExpression::MatchOptions) const;
typedef QRegularExpressionMatchIterator (QRegularExpression::*QREGlobalMatchStringPMF)(const QString &, qsizetype, QRegularExpression::MatchType, QRegularExpression::MatchOptions) const;
@@ -712,18 +688,23 @@ void tst_QRegularExpression::validity_data()
void tst_QRegularExpression::validity()
{
+ static const QRegularExpression ignoreMessagePattern(
+ "^" + QRegularExpression::escape("QRegularExpressionPrivate::doMatch(): "
+ "called on an invalid QRegularExpression object")
+ );
+
QFETCH(QString, pattern);
QFETCH(bool, validity);
QRegularExpression re(pattern);
QCOMPARE(re.isValid(), validity);
if (!validity)
- QTest::ignoreMessage(QtWarningMsg, "QRegularExpressionPrivate::doMatch(): called on an invalid QRegularExpression object");
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
QRegularExpressionMatch match = re.match("a pattern");
QCOMPARE(match.isValid(), validity);
consistencyCheck(match);
if (!validity)
- QTest::ignoreMessage(QtWarningMsg, "QRegularExpressionPrivate::doMatch(): called on an invalid QRegularExpression object");
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
QRegularExpressionMatchIterator iterator = re.globalMatch("a pattern");
QCOMPARE(iterator.isValid(), validity);
}
@@ -1116,7 +1097,7 @@ void tst_QRegularExpression::normalMatch()
testMatch<QRegularExpressionMatch>(regexp,
static_cast<QREMatchStringPMF>(&QRegularExpression::match),
- static_cast<QREMatchStringViewPMF>(&QRegularExpression::match),
+ static_cast<QREMatchStringViewPMF>(&QRegularExpression::matchView),
subject,
offset,
QRegularExpression::NormalMatch,
@@ -1388,7 +1369,7 @@ void tst_QRegularExpression::partialMatch()
testMatch<QRegularExpressionMatch>(regexp,
static_cast<QREMatchStringPMF>(&QRegularExpression::match),
- static_cast<QREMatchStringViewPMF>(&QRegularExpression::match),
+ static_cast<QREMatchStringViewPMF>(&QRegularExpression::matchView),
subject,
offset,
matchType,
@@ -1665,7 +1646,7 @@ void tst_QRegularExpression::globalMatch()
testMatch<QRegularExpressionMatchIterator>(regexp,
static_cast<QREGlobalMatchStringPMF>(&QRegularExpression::globalMatch),
- static_cast<QREGlobalMatchStringViewPMF>(&QRegularExpression::globalMatch),
+ static_cast<QREGlobalMatchStringViewPMF>(&QRegularExpression::globalMatchView),
subject,
offset,
matchType,
@@ -2005,7 +1986,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QCOMPARE(match.capturedEnd(), 4);
}
{
- const QRegularExpressionMatch match = re.match(QStringView(subject));
+ const QRegularExpressionMatch match = re.matchView(QStringView(subject));
consistencyCheck(match);
QVERIFY(match.isValid());
QVERIFY(match.hasMatch());
@@ -2023,7 +2004,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QCOMPARE(match.capturedEnd(), 4);
}
{
- const QRegularExpressionMatch match = re.match(QStringView(subject), 1);
+ const QRegularExpressionMatch match = re.matchView(QStringView(subject), 1);
consistencyCheck(match);
QVERIFY(match.isValid());
QVERIFY(match.hasMatch());
@@ -2041,7 +2022,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QCOMPARE(match.capturedEnd(), 6);
}
{
- const QRegularExpressionMatch match = re.match(QStringView(subject).mid(1));
+ const QRegularExpressionMatch match = re.matchView(QStringView(subject).mid(1));
consistencyCheck(match);
QVERIFY(match.isValid());
QVERIFY(match.hasMatch());
@@ -2059,7 +2040,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QCOMPARE(match.capturedEnd(), 6);
}
{
- const QRegularExpressionMatch match = re.match(QStringView(subject).mid(1), 1);
+ const QRegularExpressionMatch match = re.matchView(QStringView(subject).mid(1), 1);
consistencyCheck(match);
QVERIFY(match.isValid());
QVERIFY(match.hasMatch());
@@ -2077,7 +2058,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QCOMPARE(match.capturedEnd(), 7);
}
{
- const QRegularExpressionMatch match = re.match(QStringView(subject), 4);
+ const QRegularExpressionMatch match = re.matchView(QStringView(subject), 4);
consistencyCheck(match);
QVERIFY(match.isValid());
QVERIFY(match.hasMatch());
@@ -2092,7 +2073,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QVERIFY(!match.hasMatch());
}
{
- const QRegularExpressionMatch match = re.match(QStringView(subject).mid(4));
+ const QRegularExpressionMatch match = re.matchView(QStringView(subject).mid(4));
consistencyCheck(match);
QVERIFY(match.isValid());
QVERIFY(!match.hasMatch());
@@ -2125,7 +2106,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QVERIFY(!i.hasNext());
}
{
- QRegularExpressionMatchIterator i = re.globalMatch(QStringView(subject));
+ QRegularExpressionMatchIterator i = re.globalMatchView(QStringView(subject));
QVERIFY(i.isValid());
consistencyCheck(i);
@@ -2177,7 +2158,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QVERIFY(!i.hasNext());
}
{
- QRegularExpressionMatchIterator i = re.globalMatch(QStringView(subject), 1);
+ QRegularExpressionMatchIterator i = re.globalMatchView(QStringView(subject), 1);
QVERIFY(i.isValid());
consistencyCheck(i);
@@ -2219,7 +2200,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QVERIFY(!i.hasNext());
}
{
- QRegularExpressionMatchIterator i = re.globalMatch(QStringView(subject).mid(1));
+ QRegularExpressionMatchIterator i = re.globalMatchView(QStringView(subject).mid(1));
QVERIFY(i.isValid());
consistencyCheck(i);
@@ -2251,7 +2232,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QVERIFY(!i.hasNext());
}
{
- QRegularExpressionMatchIterator i = re.globalMatch(QStringView(subject).mid(1), 1);
+ QRegularExpressionMatchIterator i = re.globalMatchView(QStringView(subject).mid(1), 1);
QVERIFY(i.isValid());
consistencyCheck(i);
@@ -2283,7 +2264,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QVERIFY(!i.hasNext());
}
{
- QRegularExpressionMatchIterator i = re.globalMatch(QStringView(subject).mid(1), 1);
+ QRegularExpressionMatchIterator i = re.globalMatchView(QStringView(subject).mid(1), 1);
QVERIFY(i.isValid());
consistencyCheck(i);
@@ -2316,7 +2297,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QVERIFY(!i.hasNext());
}
{
- QRegularExpressionMatchIterator i = re.globalMatch(QStringView(subject), 4);
+ QRegularExpressionMatchIterator i = re.globalMatchView(QStringView(subject), 4);
QVERIFY(i.isValid());
consistencyCheck(i);
@@ -2338,7 +2319,7 @@ void tst_QRegularExpression::QStringAndQStringViewEquivalence()
QVERIFY(!i.hasNext());
}
{
- QRegularExpressionMatchIterator i = re.globalMatch(QStringView(subject).mid(4));
+ QRegularExpressionMatchIterator i = re.globalMatchView(QStringView(subject).mid(4));
consistencyCheck(i);
QVERIFY(i.isValid());
QVERIFY(!i.hasNext());
@@ -2408,6 +2389,10 @@ void tst_QRegularExpression::threadSafety_data()
void tst_QRegularExpression::threadSafety()
{
+#if defined(Q_OS_WASM)
+ QSKIP("This test misbehaves on WASM. Investigation needed (QTBUG-110067)");
+#endif
+
QFETCH(QString, pattern);
QFETCH(QString, subject);
@@ -2465,55 +2450,79 @@ void tst_QRegularExpression::wildcard_data()
{
QTest::addColumn<QString>("pattern");
QTest::addColumn<QString>("string");
- QTest::addColumn<qsizetype>("foundIndex");
+ QTest::addColumn<bool>("matchesPathGlob");
+ QTest::addColumn<bool>("matchesNonPathGlob");
+ QTest::addColumn<bool>("anchored");
- auto addRow = [](const char *pattern, const char *string, qsizetype foundIndex) {
- QTest::newRow(pattern) << pattern << string << foundIndex;
+ auto addRow = [](const char *pattern, const char *string, bool matchesPathGlob, bool matchesNonPathGlob, bool anchored = true) {
+ QTest::addRow("%s@%s", pattern, string) << pattern << string << matchesPathGlob << matchesNonPathGlob << anchored;
};
- addRow("*.html", "test.html", 0);
- addRow("*.html", "test.htm", -1);
- addRow("*bar*", "foobarbaz", 0);
- addRow("*", "Qt Rocks!", 0);
- addRow("*.html", "test.html", 0);
- addRow("*.h", "test.cpp", -1);
- addRow("*.???l", "test.html", 0);
- addRow("*?", "test.html", 0);
- addRow("*?ml", "test.html", 0);
- addRow("*[*]", "test.html", -1);
- addRow("*[?]","test.html", -1);
- addRow("*[?]ml","test.h?ml", 0);
- addRow("*[[]ml","test.h[ml", 0);
- addRow("*[]]ml","test.h]ml", 0);
- addRow("*.h[a-z]ml", "test.html", 0);
- addRow("*.h[A-Z]ml", "test.html", -1);
- addRow("*.h[A-Z]ml", "test.hTml", 0);
- addRow("*.h[!A-Z]ml", "test.hTml", -1);
- addRow("*.h[!A-Z]ml", "test.html", 0);
- addRow("*.h[!T]ml", "test.hTml", -1);
- addRow("*.h[!T]ml", "test.html", 0);
- addRow("*.h[!T]m[!L]", "test.htmL", -1);
- addRow("*.h[!T]m[!L]", "test.html", 0);
- addRow("*.h[][!]ml", "test.h]ml", 0);
- addRow("*.h[][!]ml", "test.h[ml", 0);
- addRow("*.h[][!]ml", "test.h!ml", 0);
-
- addRow("foo/*/bar", "foo/baz/bar", 0);
- addRow("foo/(*)/bar", "foo/baz/bar", -1);
- addRow("foo/(*)/bar", "foo/(baz)/bar", 0);
- addRow("foo/?/bar", "foo/Q/bar", 0);
- addRow("foo/?/bar", "foo/Qt/bar", -1);
- addRow("foo/(?)/bar", "foo/Q/bar", -1);
- addRow("foo/(?)/bar", "foo/(Q)/bar", 0);
+ addRow("*.html", "test.html", true, true);
+ addRow("*.html", "test.htm", false, false);
+ addRow("*bar*", "foobarbaz", true, true);
+ addRow("*", "Qt Rocks!", true, true);
+ addRow("*.h", "test.cpp", false, false);
+ addRow("*.???l", "test.html", true, true);
+ addRow("*?", "test.html", true, true);
+ addRow("*?ml", "test.html", true, true);
+ addRow("*[*]", "test.html", false, false);
+ addRow("*[?]","test.html", false, false);
+ addRow("*[?]ml","test.h?ml", true, true);
+ addRow("*[[]ml","test.h[ml", true, true);
+ addRow("*[]]ml","test.h]ml", true, true);
+ addRow("*.h[a-z]ml", "test.html", true, true);
+ addRow("*.h[A-Z]ml", "test.html", false, false);
+ addRow("*.h[A-Z]ml", "test.hTml", true, true);
+ addRow("*.h[!A-Z]ml", "test.hTml", false, false);
+ addRow("*.h[!A-Z]ml", "test.html", true, true);
+ addRow("*.h[!T]ml", "test.hTml", false, false);
+ addRow("*.h[!T]ml", "test.html", true, true);
+ addRow("*.h[!T]m[!L]", "test.htmL", false, false);
+ addRow("*.h[!T]m[!L]", "test.html", true, true);
+ addRow("*.h[][!]ml", "test.h]ml", true, true);
+ addRow("*.h[][!]ml", "test.h[ml", true, true);
+ addRow("*.h[][!]ml", "test.h!ml", true, true);
+
+ addRow("foo/*/bar", "foo/baz/bar", true, true);
+ addRow("foo/*/bar", "foo/fie/baz/bar", false, true);
+ addRow("foo?bar", "foo/bar", false, true);
+ addRow("foo/(*)/bar", "foo/baz/bar", false, false);
+ addRow("foo/(*)/bar", "foo/(baz)/bar", true, true);
+ addRow("foo/?/bar", "foo/Q/bar", true, true);
+ addRow("foo/?/bar", "foo/Qt/bar", false, false);
+ addRow("foo/(?)/bar", "foo/Q/bar", false, false);
+ addRow("foo/(?)/bar", "foo/(Q)/bar", true, true);
+
+ addRow("foo*bar", "foo/fie/baz/bar", false, true);
+ addRow("foo*bar", "foo bar", true, true);
+ addRow("foo*bar", "foo\tbar", true, true);
+ addRow("foo*bar", "foo\nbar", true, true);
+ addRow("foo*bar", "foo\r\nbar", true, true);
+
+ // different anchor modes
+ addRow("foo", "afoob", false, false, true);
+ addRow("foo", "afoob", true, true, false);
+
+ addRow("fie*bar", "foo/fie/baz/bar", false, false, true);
+ addRow("fie*bar", "foo/fie/baz/bar", false, true, false);
#ifdef Q_OS_WIN
- addRow("foo\\*\\bar", "foo\\baz\\bar", 0);
- addRow("foo\\(*)\\bar", "foo\\baz\\bar", -1);
- addRow("foo\\(*)\\bar", "foo\\(baz)\\bar", 0);
- addRow("foo\\?\\bar", "foo\\Q\\bar", 0);
- addRow("foo\\?\\bar", "foo\\Qt\\bar", -1);
- addRow("foo\\(?)\\bar", "foo\\Q\\bar", -1);
- addRow("foo\\(?)\\bar", "foo\\(Q)\\bar", 0);
+ addRow("foo\\*\\bar", "foo\\baz\\bar", true, true);
+ addRow("foo\\*\\bar", "foo/baz/bar", true, false);
+ addRow("foo\\*\\bar", "foo/baz\\bar", true, false);
+ addRow("foo\\*\\bar", "foo\\fie\\baz\\bar", false, true);
+ addRow("foo\\*\\bar", "foo/fie/baz/bar", false, false);
+ addRow("foo/*/bar", "foo\\baz\\bar", true, false);
+ addRow("foo/*/bar", "foo/baz/bar", true, true);
+ addRow("foo/*/bar", "foo\\fie\\baz\\bar", false, false);
+ addRow("foo/*/bar", "foo/fie/baz/bar", false, true);
+ addRow("foo\\(*)\\bar", "foo\\baz\\bar", false, false);
+ addRow("foo\\(*)\\bar", "foo\\(baz)\\bar", true, true);
+ addRow("foo\\?\\bar", "foo\\Q\\bar", true, true);
+ addRow("foo\\?\\bar", "foo\\Qt\\bar", false, false);
+ addRow("foo\\(?)\\bar", "foo\\Q\\bar", false, false);
+ addRow("foo\\(?)\\bar", "foo\\(Q)\\bar", true, true);
#endif
}
@@ -2521,12 +2530,22 @@ void tst_QRegularExpression::wildcard()
{
QFETCH(QString, pattern);
QFETCH(QString, string);
- QFETCH(qsizetype, foundIndex);
+ QFETCH(bool, matchesPathGlob);
+ QFETCH(bool, matchesNonPathGlob);
+ QFETCH(bool, anchored);
- QRegularExpression re(QRegularExpression::wildcardToRegularExpression(pattern));
- QRegularExpressionMatch match = re.match(string);
+ QRegularExpression::WildcardConversionOptions options = {};
+ if (!anchored)
+ options |= QRegularExpression::UnanchoredWildcardConversion;
- QCOMPARE(match.capturedStart(), foundIndex);
+ {
+ QRegularExpression re(QRegularExpression::wildcardToRegularExpression(pattern, options));
+ QCOMPARE(string.contains(re), matchesPathGlob);
+ }
+ {
+ QRegularExpression re(QRegularExpression::wildcardToRegularExpression(pattern, options | QRegularExpression::NonPathWildcardConversion));
+ QCOMPARE(string.contains(re), matchesNonPathGlob);
+ }
}
void tst_QRegularExpression::testInvalidWildcard_data()
diff --git a/tests/auto/corelib/text/qstring/CMakeLists.txt b/tests/auto/corelib/text/qstring/CMakeLists.txt
index e5f64742a2..80917554d2 100644
--- a/tests/auto/corelib/text/qstring/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstring/CMakeLists.txt
@@ -1,29 +1,47 @@
-# Generated from qstring.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-#####################################################################
-## tst_qstring Test:
-#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstring LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
-qt_internal_add_test(tst_qstring
- SOURCES
- tst_qstring.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
- PUBLIC_LIBRARIES
- Qt::CorePrivate
-)
+if(NOT QT_FEATURE_doubleconversion AND NOT QT_FEATURE_system_doubleconversion)
+ list(APPEND tst_qstring_extra_defines QT_NO_DOUBLECONVERSION)
+endif()
-## Scopes:
-#####################################################################
+if(APPLE)
+ list(APPEND tst_qstring_extra_libraries ${FWFoundation})
+ list(APPEND tst_qstring_extra_sources tst_qstring_mac.mm)
+endif()
+if(WASM)
+ list(APPEND tst_qstring_extra_sources tst_qstring_wasm.cpp)
+endif()
-qt_internal_extend_target(tst_qstring CONDITION NOT QT_FEATURE_doubleconversion AND NOT QT_FEATURE_system_doubleconversion
+foreach(test tst_qstring tst_qstring_restricted_ascii tst_qstring_no_cast_from_ascii)
+ qt_internal_add_test(${test}
+ NO_BATCH
+ SOURCES
+ tst_qstring.cpp
+ ${tst_qstring_extra_sources}
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::TestPrivate
+ ${tst_qstring_extra_libraries}
+ DEFINES
+ ${tst_qstring_extra_defines}
+ )
+endforeach()
+
+qt_internal_extend_target(tst_qstring_restricted_ascii
DEFINES
- QT_NO_DOUBLECONVERSION
+ QT_RESTRICTED_CAST_FROM_ASCII
+ tst_QString=tst_QString_restricted_ascii
)
-qt_internal_extend_target(tst_qstring CONDITION APPLE
- SOURCES
- tst_qstring_mac.mm
- PUBLIC_LIBRARIES
- ${FWFoundation}
+qt_internal_extend_target(tst_qstring_no_cast_from_ascii
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ tst_QString=tst_QString_no_cast_from_ascii
)
diff --git a/tests/auto/corelib/text/qstring/double_data.h b/tests/auto/corelib/text/qstring/double_data.h
index 0d59ecb5ff..712ed11563 100644
--- a/tests/auto/corelib/text/qstring/double_data.h
+++ b/tests/auto/corelib/text/qstring/double_data.h
@@ -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
struct SprintfDoubleData
{
diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp
index 24aa53a024..35bddf16a4 100644
--- a/tests/auto/corelib/text/qstring/tst_qstring.cpp
+++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp
@@ -1,35 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2020 Intel Corporation.
-** 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$
-**
-****************************************************************************/
-
-#ifdef QT_NO_CAST_FROM_ASCII
-# undef QT_NO_CAST_FROM_ASCII
-#endif
+// Copyright (C) 2022 The Qt Company Ltd.
+// Copyright (C) 2020 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
#ifdef QT_NO_CAST_TO_ASCII
# undef QT_NO_CAST_TO_ASCII
#endif
@@ -38,6 +10,7 @@
#endif
#include <private/qglobal_p.h> // for the icu feature test
+#include <QtTest/private/qcomparisontesthelper_p.h>
#include <QTest>
#include <QString>
#include <QStringBuilder>
@@ -53,21 +26,34 @@
#include <qlocale.h>
#include <locale.h>
#include <qhash.h>
+#include <private/qtools_p.h>
+#include <forward_list>
#include <string>
#include <algorithm>
#include <limits>
-#include <ctype.h>
+#include <sstream>
#include "../shared/test_number_shared.h"
#include "../../../../shared/localechange.h"
+using namespace Qt::StringLiterals;
+
#define CREATE_VIEW(string) \
const QString padded = QLatin1Char(' ') + string + QLatin1Char(' '); \
const QStringView view = QStringView{ padded }.mid(1, padded.size() - 2);
namespace {
+template <typename String> String detached(String s)
+{
+ if (!s.isNull()) { // detaching loses nullness, but we need to preserve it
+ auto d = s.data();
+ Q_UNUSED(d);
+ }
+ return s;
+}
+
// this wraps an argument to a QString function, as well as how to apply
// the argument to a given QString member function.
template <typename T>
@@ -81,7 +67,7 @@ class ArgBase
protected:
QString pinned;
explicit ArgBase(const char *str)
- : pinned(QString::fromLatin1(str)) {}
+ : pinned(QString::fromUtf8(str)) {}
};
template <>
@@ -92,11 +78,11 @@ public:
template <typename MemFun>
void apply0(QString &s, MemFun mf) const
- { for (QChar ch : qAsConst(this->pinned)) (s.*mf)(ch); }
+ { for (QChar ch : std::as_const(this->pinned)) (s.*mf)(ch); }
template <typename MemFun, typename A1>
void apply1(QString &s, MemFun mf, A1 a1) const
- { for (QChar ch : qAsConst(this->pinned)) (s.*mf)(a1, ch); }
+ { for (QChar ch : std::as_const(this->pinned)) (s.*mf)(a1, ch); }
};
template <>
@@ -152,11 +138,11 @@ public:
template <typename MemFun>
void apply0(QString &s, MemFun mf) const
- { (s.*mf)(this->pinned.constData(), this->pinned.length()); }
+ { (s.*mf)(this->pinned.constData(), this->pinned.size()); }
template <typename MemFun, typename A1>
void apply1(QString &s, MemFun mf, A1 a1) const
- { (s.*mf)(a1, this->pinned.constData(), this->pinned.length()); }
+ { (s.*mf)(a1, this->pinned.constData(), this->pinned.size()); }
};
template <>
@@ -175,6 +161,22 @@ public:
{ (s.*mf)(a1, l1); }
};
+template <bool b>
+class Arg<QBasicUtf8StringView<b>>
+{
+ QUtf8StringView u8;
+public:
+ explicit Arg(const char *str) : u8(str) {}
+
+ template <typename MemFunc>
+ void apply0(QString &s, MemFunc mf) const
+ { (s.*mf)(u8); }
+
+ template <typename MemFunc, typename A1>
+ void apply1(QString &s, MemFunc mf, A1 a1) const
+ { (s.*mf)(a1, u8); }
+};
+
template <>
class Arg<char>
{
@@ -291,16 +293,34 @@ static void do_apply1(MemFun mf)
QFETCH(A1, a1);
QFETCH(QString, expected);
- Arg<ArgType>(arg).apply1(s, mf, a1);
+ // Test when the string is shared
+ QString str = s;
+ Arg<ArgType>(arg).apply1(str, mf, a1);
- QCOMPARE(s, expected);
- QCOMPARE(s.isEmpty(), expected.isEmpty());
- QCOMPARE(s.isNull(), expected.isNull());
+ QCOMPARE(str, expected);
+ QCOMPARE(str.isEmpty(), expected.isEmpty());
+ QCOMPARE(str.isNull(), expected.isNull());
+
+ // Test when the string is not shared
+ str = s;
+ str.detach();
+ Arg<ArgType>(arg).apply1(str, mf, a1);
+ QCOMPARE(str, expected);
+ QCOMPARE(str.isEmpty(), expected.isEmpty());
+ // A detached string is not null
+ // QCOMPARE(str.isNull(), expected.isNull());
}
class tst_QString : public QObject
{
Q_OBJECT
+public:
+ enum DataOption {
+ EmptyIsNoop = 0x1,
+ Latin1Encoded = 0x2
+ };
+ Q_DECLARE_FLAGS(DataOptions, DataOption)
+private:
#if QT_CONFIG(regularexpression)
template<typename List, class RegExp>
@@ -313,28 +333,27 @@ class tst_QString : public QObject
void append_impl() const { do_apply0<ArgType>(MemFun(&QString::append)); }
template <typename ArgType>
void append_impl() const { append_impl<ArgType, QString &(QString::*)(const ArgType&)>(); }
- void append_data(bool emptyIsNoop = false);
+ void append_data(DataOptions options = {});
template <typename ArgType, typename MemFun>
void operator_pluseq_impl() const { do_apply0<ArgType>(MemFun(&QString::operator+=)); }
template <typename ArgType>
void operator_pluseq_impl() const { operator_pluseq_impl<ArgType, QString &(QString::*)(const ArgType&)>(); }
- void operator_pluseq_data(bool emptyIsNoop = false);
+ void operator_pluseq_data(DataOptions options = {});
template <typename ArgType, typename MemFun>
void prepend_impl() const { do_apply0<ArgType>(MemFun(&QString::prepend)); }
template <typename ArgType>
void prepend_impl() const { prepend_impl<ArgType, QString &(QString::*)(const ArgType&)>(); }
- void prepend_data(bool emptyIsNoop = false);
+ void prepend_data(DataOptions options = {});
template <typename ArgType, typename MemFun>
void insert_impl() const { do_apply1<ArgType, int>(MemFun(&QString::insert)); }
template <typename ArgType>
void insert_impl() const { insert_impl<ArgType, QString &(QString::*)(qsizetype, const ArgType&)>(); }
- void insert_data(bool emptyIsNoop = false);
-
- using TransientLocale = QTestLocaleChange::TransientLocale;
+ void insert_data(DataOptions options = {});
class TransientDefaultLocale
{
- const QLocale prior; // Records what *was* the default before we set it.
+ // This default-constructed QLocale records what *was* the default before we changed it:
+ const QLocale prior = {};
public:
TransientDefaultLocale(const QLocale &transient) { revise(transient); }
void revise(const QLocale &transient) { QLocale::setDefault(transient); }
@@ -393,88 +412,145 @@ private slots:
void remove_regexp();
#endif
void remove_extra();
+ void erase_single_arg();
+ void erase();
void swap();
void prepend_qstring() { prepend_impl<QString>(); }
- void prepend_qstring_data() { prepend_data(true); }
+ void prepend_qstring_data() { prepend_data(EmptyIsNoop); }
void prepend_qstringview() { prepend_impl<QStringView, QString &(QString::*)(QStringView)>(); }
- void prepend_qstringview_data() { prepend_data(true); }
+ void prepend_qstringview_data() { prepend_data(EmptyIsNoop); }
void prepend_qlatin1string() { prepend_impl<QLatin1String, QString &(QString::*)(QLatin1String)>(); }
- void prepend_qlatin1string_data() { prepend_data(true); }
+ void prepend_qlatin1string_data() { prepend_data({EmptyIsNoop, Latin1Encoded}); }
+ void prepend_qutf8stringview() { prepend_impl<QUtf8StringView, QString &(QString::*)(QUtf8StringView)>(); }
+ void prepend_qutf8stringview_data() { prepend_data(EmptyIsNoop); }
void prepend_qcharstar_int() { prepend_impl<QPair<const QChar *, int>, QString &(QString::*)(const QChar *, qsizetype)>(); }
- void prepend_qcharstar_int_data() { prepend_data(true); }
+ void prepend_qcharstar_int_data() { prepend_data(EmptyIsNoop); }
void prepend_qchar() { prepend_impl<Reversed<QChar>, QString &(QString::*)(QChar)>(); }
- void prepend_qchar_data() { prepend_data(true); }
+ void prepend_qchar_data() { prepend_data(EmptyIsNoop); }
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void prepend_qbytearray() { prepend_impl<QByteArray>(); }
- void prepend_qbytearray_data() { prepend_data(true); }
- void prepend_char() { prepend_impl<Reversed<char>, QString &(QString::*)(QChar)>(); }
- void prepend_char_data() { prepend_data(true); }
+ void prepend_qbytearray_data() { prepend_data(EmptyIsNoop); }
void prepend_charstar() { prepend_impl<const char *, QString &(QString::*)(const char *)>(); }
- void prepend_charstar_data() { prepend_data(true); }
+ void prepend_charstar_data() { prepend_data(EmptyIsNoop); }
void prepend_bytearray_special_cases_data();
void prepend_bytearray_special_cases();
+#endif // !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
+
+#if !defined(QT_NO_CAST_FROM_ASCII)
+ void prepend_char() { prepend_impl<Reversed<char>, QString &(QString::*)(QChar)>(); }
+ void prepend_char_data() { prepend_data({EmptyIsNoop, Latin1Encoded}); }
+#endif
+
+ void prependEventuallyProducesFreeSpaceAtBegin();
void append_qstring() { append_impl<QString>(); }
void append_qstring_data() { append_data(); }
void append_qstringview() { append_impl<QStringView, QString &(QString::*)(QStringView)>(); }
- void append_qstringview_data() { append_data(true); }
+ void append_qstringview_data() { append_data(EmptyIsNoop); }
void append_qlatin1string() { append_impl<QLatin1String, QString &(QString::*)(QLatin1String)>(); }
- void append_qlatin1string_data() { append_data(); }
+ void append_qlatin1string_data() { append_data(Latin1Encoded); }
+ void append_qutf8stringview() { append_impl<QUtf8StringView, QString &(QString::*)(QUtf8StringView)>(); }
+ void append_qutf8stringview_data() { append_data(); }
void append_qcharstar_int() { append_impl<QPair<const QChar *, int>, QString&(QString::*)(const QChar *, qsizetype)>(); }
- void append_qcharstar_int_data() { append_data(true); }
+ void append_qcharstar_int_data() { append_data(EmptyIsNoop); }
void append_qchar() { append_impl<QChar, QString &(QString::*)(QChar)>(); }
- void append_qchar_data() { append_data(true); }
+ void append_qchar_data() { append_data(EmptyIsNoop); }
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void append_qbytearray() { append_impl<QByteArray>(); }
void append_qbytearray_data() { append_data(); }
+#endif
+
+#if !defined(QT_NO_CAST_FROM_ASCII)
void append_char() { append_impl<char, QString &(QString::*)(QChar)>(); }
- void append_char_data() { append_data(true); }
+ void append_char_data() { append_data({EmptyIsNoop, Latin1Encoded}); }
+#endif
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void append_charstar() { append_impl<const char *, QString &(QString::*)(const char *)>(); }
void append_charstar_data() { append_data(); }
+#endif
+
void append_special_cases();
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void append_bytearray_special_cases_data();
void append_bytearray_special_cases();
+#endif
+
+ void appendFromRawData();
void operator_pluseq_qstring() { operator_pluseq_impl<QString>(); }
void operator_pluseq_qstring_data() { operator_pluseq_data(); }
void operator_pluseq_qstringview() { operator_pluseq_impl<QStringView, QString &(QString::*)(QStringView)>(); }
- void operator_pluseq_qstringview_data() { operator_pluseq_data(true); }
+ void operator_pluseq_qstringview_data() { operator_pluseq_data(EmptyIsNoop); }
void operator_pluseq_qlatin1string() { operator_pluseq_impl<QLatin1String, QString &(QString::*)(QLatin1String)>(); }
- void operator_pluseq_qlatin1string_data() { operator_pluseq_data(); }
+ void operator_pluseq_qlatin1string_data() { operator_pluseq_data(Latin1Encoded); }
+ void operator_pluseq_qutf8stringview() { operator_pluseq_impl<QUtf8StringView, QString &(QString::*)(QUtf8StringView)>(); }
+ void operator_pluseq_qutf8stringview_data() { operator_pluseq_data(); }
void operator_pluseq_qchar() { operator_pluseq_impl<QChar, QString &(QString::*)(QChar)>(); }
- void operator_pluseq_qchar_data() { operator_pluseq_data(true); }
+ void operator_pluseq_qchar_data() { operator_pluseq_data(EmptyIsNoop); }
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void operator_pluseq_qbytearray() { operator_pluseq_impl<QByteArray>(); }
void operator_pluseq_qbytearray_data() { operator_pluseq_data(); }
void operator_pluseq_charstar() { operator_pluseq_impl<const char *, QString &(QString::*)(const char *)>(); }
void operator_pluseq_charstar_data() { operator_pluseq_data(); }
+ void operator_assign_symmetry();
+#endif // !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
+
void operator_pluseq_special_cases();
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void operator_pluseq_bytearray_special_cases_data();
void operator_pluseq_bytearray_special_cases();
+#endif
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void operator_eqeq_bytearray_data();
void operator_eqeq_bytearray();
+#endif
void operator_eqeq_nullstring();
void operator_smaller();
void insert_qstring() { insert_impl<QString>(); }
- void insert_qstring_data() { insert_data(true); }
+ void insert_qstring_data() { insert_data(EmptyIsNoop); }
void insert_qstringview() { insert_impl<QStringView, QString &(QString::*)(qsizetype, QStringView)>(); }
- void insert_qstringview_data() { insert_data(true); }
+ void insert_qstringview_data() { insert_data(EmptyIsNoop); }
void insert_qlatin1string() { insert_impl<QLatin1String, QString &(QString::*)(qsizetype, QLatin1String)>(); }
- void insert_qlatin1string_data() { insert_data(true); }
+ void insert_qlatin1string_data() { insert_data({EmptyIsNoop, Latin1Encoded}); }
+ void insert_qutf8stringview() { insert_impl<QUtf8StringView, QString &(QString::*)(qsizetype, QUtf8StringView)>(); }
+ void insert_qutf8stringview_data() { insert_data(EmptyIsNoop); }
void insert_qcharstar_int() { insert_impl<QPair<const QChar *, int>, QString &(QString::*)(qsizetype, const QChar*, qsizetype) >(); }
- void insert_qcharstar_int_data() { insert_data(true); }
+ void insert_qcharstar_int_data() { insert_data(EmptyIsNoop); }
void insert_qchar() { insert_impl<Reversed<QChar>, QString &(QString::*)(qsizetype, QChar)>(); }
- void insert_qchar_data() { insert_data(true); }
+ void insert_qchar_data() { insert_data(EmptyIsNoop); }
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void insert_qbytearray() { insert_impl<QByteArray>(); }
- void insert_qbytearray_data() { insert_data(true); }
+ void insert_qbytearray_data() { insert_data(EmptyIsNoop); }
+#endif
+
+#ifndef QT_NO_CAST_FROM_ASCII
void insert_char() { insert_impl<Reversed<char>, QString &(QString::*)(qsizetype, QChar)>(); }
- void insert_char_data() { insert_data(true); }
+ void insert_char_data() { insert_data({EmptyIsNoop, Latin1Encoded}); }
+#endif
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void insert_charstar() { insert_impl<const char *, QString &(QString::*)(qsizetype, const char*) >(); }
- void insert_charstar_data() { insert_data(true); }
+ void insert_charstar_data() { insert_data(EmptyIsNoop); }
+#endif
+
void insert_special_cases();
+ void assign();
+ void assign_shared();
+ void assign_uses_prepend_buffer();
+
void simplified_data();
void simplified();
+ void trimmed_data();
void trimmed();
void unicodeTableAccess_data();
void unicodeTableAccess();
@@ -508,15 +584,22 @@ private slots:
void truncate();
void chop_data();
void chop();
+
void constructor();
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void constructorQByteArray_data();
void constructorQByteArray();
+#endif
+
void STL();
void macTypes();
+ void wasmTypes();
void isEmpty();
void isNull();
void nullness();
+#ifndef QT_NO_CAST_FROM_ASCII
void acc_01();
+#endif
void length_data();
void length();
void utf8_data();
@@ -556,9 +639,14 @@ private slots:
void integer_conversion_data();
void integer_conversion();
void tortureSprintfDouble();
+ void toNum_base_data();
+ void toNum_base();
+ void toNum_base_neg_data();
+ void toNum_base_neg();
+ void toNum_Bad();
+ void toNum_BadAll_data();
+ void toNum_BadAll();
void toNum();
- void localeAwareCompare_data();
- void localeAwareCompare();
void iterators();
void reverseIterators();
void split_data();
@@ -566,16 +654,26 @@ private slots:
#if QT_CONFIG(regularexpression)
void split_regularexpression_data();
void split_regularexpression();
+ void regularexpression_lifetime();
#endif
void fromUtf16_data();
+#if QT_DEPRECATED_SINCE(6, 0)
void fromUtf16();
+#endif
void fromUtf16_char16_data() { fromUtf16_data(); }
void fromUtf16_char16();
void latin1String();
+ void isInf_data();
+ void isInf();
+ void isNan_data();
+ void isNan();
void nanAndInf();
+ void comparisonCompiles();
void compare_data();
void compare();
+ void comparisonMacros_data();
+ void comparisonMacros();
void resize();
void resizeAfterFromRawData();
void resizeAfterReserve();
@@ -592,8 +690,10 @@ private slots:
#endif
void literals();
void userDefinedLiterals();
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void eightBitLiterals_data();
void eightBitLiterals();
+#endif
void reserve();
void toHtmlEscaped_data();
void toHtmlEscaped();
@@ -611,10 +711,17 @@ private slots:
void rawData();
void clear();
+ void first();
+ void last();
void sliced();
+ void slice();
void chopped();
void removeIf();
+
+ void std_stringview_conversion();
};
+Q_DECLARE_OPERATORS_FOR_FLAGS(tst_QString::DataOptions)
+
template <class T> const T &verifyZeroTermination(const T &t) { return t; }
@@ -628,12 +735,12 @@ QString verifyZeroTermination(const QString &str)
if (!strDataPtr->isMutable())
return str;
- int strSize = str.size();
+ qsizetype strSize = str.size();
QChar strTerminator = str.constData()[strSize];
- if (QChar('\0') != strTerminator)
+ if (QChar(u'\0') != strTerminator)
return QString::fromLatin1(
"*** Result ('%1') not null-terminated: 0x%2 ***").arg(str)
- .arg(strTerminator.unicode(), 4, 16, QChar('0'));
+ .arg(strTerminator.unicode(), 4, 16, QChar(u'0'));
// Skip mutating checks on shared strings
if (strDataPtr->isShared())
@@ -642,8 +749,8 @@ QString verifyZeroTermination(const QString &str)
const QChar *strData = str.constData();
const QString strCopy(strData, strSize); // Deep copy
- const_cast<QChar *>(strData)[strSize] = QChar('x');
- if (QChar('x') != str.constData()[strSize]) {
+ const_cast<QChar *>(strData)[strSize] = QChar(u'x');
+ if (QChar(u'x') != str.constData()[strSize]) {
return QString::fromLatin1("*** Failed to replace null-terminator in "
"result ('%1') ***").arg(str);
}
@@ -651,7 +758,7 @@ QString verifyZeroTermination(const QString &str)
return QString::fromLatin1( "*** Result ('%1') differs from its copy "
"after null-terminator was replaced ***").arg(str);
}
- const_cast<QChar *>(strData)[strSize] = QChar('\0'); // Restore sanity
+ const_cast<QChar *>(strData)[strSize] = QChar(u'\0'); // Restore sanity
return str;
}
@@ -704,22 +811,19 @@ void tst_QString::replace_qchar_qchar_data()
QTest::addColumn<Qt::CaseSensitivity>("cs");
QTest::addColumn<QString>("expected" );
- QTest::newRow("1") << QString("foo") << QChar('o') << QChar('a') << Qt::CaseSensitive
- << QString("faa");
- QTest::newRow("2") << QString("foo") << QChar('o') << QChar('a') << Qt::CaseInsensitive
- << QString("faa");
- QTest::newRow("3") << QString("foo") << QChar('O') << QChar('a') << Qt::CaseSensitive
- << QString("foo");
- QTest::newRow("4") << QString("foo") << QChar('O') << QChar('a') << Qt::CaseInsensitive
- << QString("faa");
- QTest::newRow("5") << QString("ababABAB") << QChar('a') << QChar(' ') << Qt::CaseSensitive
- << QString(" b bABAB");
- QTest::newRow("6") << QString("ababABAB") << QChar('a') << QChar(' ') << Qt::CaseInsensitive
- << QString(" b b B B");
- QTest::newRow("7") << QString("ababABAB") << QChar() << QChar(' ') << Qt::CaseInsensitive
- << QString("ababABAB");
- QTest::newRow("8") << QString() << QChar() << QChar('x') << Qt::CaseInsensitive << QString();
- QTest::newRow("9") << QString() << QChar('a') << QChar('x') << Qt::CaseInsensitive << QString();
+ QTest::newRow("1") << u"foo"_s << QChar(u'o') << QChar(u'a') << Qt::CaseSensitive << u"faa"_s;
+ QTest::newRow("2") << u"foo"_s << QChar(u'o') << QChar(u'a') << Qt::CaseInsensitive << u"faa"_s;
+ QTest::newRow("3") << u"foo"_s << QChar(u'O') << QChar(u'a') << Qt::CaseSensitive << u"foo"_s;
+ QTest::newRow("4") << u"foo"_s << QChar(u'O') << QChar(u'a') << Qt::CaseInsensitive << u"faa"_s;
+ QTest::newRow("5") << u"ababABAB"_s << QChar(u'a') << QChar(u' ') << Qt::CaseSensitive
+ << u" b bABAB"_s;
+ QTest::newRow("6") << u"ababABAB"_s << QChar(u'a') << QChar(u' ') << Qt::CaseInsensitive
+ << u" b b B B"_s;
+ QTest::newRow("7") << u"ababABAB"_s << QChar() << QChar(u' ') << Qt::CaseInsensitive
+ << u"ababABAB"_s;
+ QTest::newRow("8") << QString() << QChar() << QChar(u'x') << Qt::CaseInsensitive << QString();
+ QTest::newRow("9") << QString() << QChar(u'a') << QChar(u'x') << Qt::CaseInsensitive
+ << QString();
}
void tst_QString::replace_qchar_qchar()
@@ -730,7 +834,14 @@ void tst_QString::replace_qchar_qchar()
QFETCH(Qt::CaseSensitivity, cs);
QFETCH(QString, expected);
- QCOMPARE(src.replace(before, after, cs), expected);
+ QString str = src;
+ // Test when string is shared
+ QCOMPARE(str.replace(before, after, cs), expected);
+
+ str = src;
+ // Test when it's not shared
+ str.detach();
+ QCOMPARE(str.replace(before, after, cs), expected);
}
void tst_QString::replace_qchar_qstring_data()
@@ -741,29 +852,29 @@ void tst_QString::replace_qchar_qstring_data()
QTest::addColumn<Qt::CaseSensitivity>("cs");
QTest::addColumn<QString>("expected" );
- QTest::newRow("1") << QString("foo") << QChar('o') << QString("aA") << Qt::CaseSensitive
- << QString("faAaA");
- QTest::newRow("2") << QString("foo") << QChar('o') << QString("aA") << Qt::CaseInsensitive
- << QString("faAaA");
- QTest::newRow("3") << QString("foo") << QChar('O') << QString("aA") << Qt::CaseSensitive
- << QString("foo");
- QTest::newRow("4") << QString("foo") << QChar('O') << QString("aA") << Qt::CaseInsensitive
- << QString("faAaA");
- QTest::newRow("5") << QString("ababABAB") << QChar('a') << QString(" ") << Qt::CaseSensitive
- << QString(" b bABAB");
- QTest::newRow("6") << QString("ababABAB") << QChar('a') << QString(" ") << Qt::CaseInsensitive
- << QString(" b b B B");
- QTest::newRow("7") << QString("ababABAB") << QChar() << QString(" ") << Qt::CaseInsensitive
- << QString("ababABAB");
- QTest::newRow("8") << QString("ababABAB") << QChar() << QString() << Qt::CaseInsensitive
- << QString("ababABAB");
- QTest::newRow("null-in-null-with-X") << QString() << QChar() << QString("X")
+ QTest::newRow("1") << u"foo"_s << QChar(u'o') << u"aA"_s << Qt::CaseSensitive
+ << u"faAaA"_s;
+ QTest::newRow("2") << u"foo"_s << QChar(u'o') << u"aA"_s << Qt::CaseInsensitive
+ << u"faAaA"_s;
+ QTest::newRow("3") << u"foo"_s << QChar(u'O') << u"aA"_s << Qt::CaseSensitive
+ << u"foo"_s;
+ QTest::newRow("4") << u"foo"_s << QChar(u'O') << u"aA"_s << Qt::CaseInsensitive
+ << u"faAaA"_s;
+ QTest::newRow("5") << u"ababABAB"_s << QChar(u'a') << u" "_s << Qt::CaseSensitive
+ << u" b bABAB"_s;
+ QTest::newRow("6") << u"ababABAB"_s << QChar(u'a') << u" "_s << Qt::CaseInsensitive
+ << u" b b B B"_s;
+ QTest::newRow("7") << u"ababABAB"_s << QChar() << u" "_s << Qt::CaseInsensitive
+ << u"ababABAB"_s;
+ QTest::newRow("8") << u"ababABAB"_s << QChar() << QString() << Qt::CaseInsensitive
+ << u"ababABAB"_s;
+ QTest::newRow("null-in-null-with-X") << QString() << QChar() << u"X"_s
<< Qt::CaseSensitive << QString();
- QTest::newRow("x-in-null-with-abc") << QString() << QChar('x') << QString("abc")
+ QTest::newRow("x-in-null-with-abc") << QString() << QChar(u'x') << u"abc"_s
<< Qt::CaseSensitive << QString();
- QTest::newRow("null-in-empty-with-X") << QString("") << QChar() << QString("X")
+ QTest::newRow("null-in-empty-with-X") << u""_s << QChar() << u"X"_s
<< Qt::CaseInsensitive << QString();
- QTest::newRow("x-in-empty-with-abc") << QString("") << QChar('x') << QString("abc")
+ QTest::newRow("x-in-empty-with-abc") << u""_s << QChar(u'x') << u"abc"_s
<< Qt::CaseInsensitive << QString();
}
@@ -775,7 +886,14 @@ void tst_QString::replace_qchar_qstring()
QFETCH(Qt::CaseSensitivity, cs);
QFETCH(QString, expected);
- QCOMPARE(src.replace(before, after, cs), expected);
+ // Test when string needs detach
+ QString s = src;
+ QCOMPARE(s.replace(before, after, cs), expected);
+
+ // Test when it's not shared
+ s = src;
+ s.detach();
+ QCOMPARE(s.replace(before, after, cs), expected);
}
void tst_QString::replace_uint_uint_data()
@@ -786,41 +904,41 @@ void tst_QString::replace_uint_uint_data()
QTest::addColumn<QString>("after" );
QTest::addColumn<QString>("result" );
- QTest::newRow("empty_rem00") << QString() << 0 << 0 << QString("") << QString();
- QTest::newRow("empty_rem01") << QString() << 0 << 3 << QString("") << QString();
- QTest::newRow("empty_rem02") << QString() << 5 << 3 << QString("") << QString();
-
- QTest::newRow( "rem00" ) << QString("-<>ABCABCABCABC>") << 0 << 3 << QString("") << QString("ABCABCABCABC>");
- QTest::newRow( "rem01" ) << QString("ABCABCABCABC>") << 1 << 4 << QString("") << QString("ACABCABC>");
- QTest::newRow( "rem04" ) << QString("ACABCABC>") << 8 << 4 << QString("") << QString("ACABCABC");
- QTest::newRow( "rem05" ) << QString("ACABCABC") << 7 << 1 << QString("") << QString("ACABCAB");
- QTest::newRow( "rem06" ) << QString("ACABCAB") << 4 << 0 << QString("") << QString("ACABCAB");
-
- QTest::newRow("empty_rep00") << QString() << 0 << 0 << QString("X") << QString("X");
- QTest::newRow("empty_rep01") << QString() << 0 << 3 << QString("X") << QString("X");
- QTest::newRow("empty_rep02") << QString() << 5 << 3 << QString("X") << QString();
-
- QTest::newRow( "rep00" ) << QString("ACABCAB") << 4 << 0 << QString("X") << QString("ACABXCAB");
- QTest::newRow( "rep01" ) << QString("ACABXCAB") << 4 << 1 << QString("Y") << QString("ACABYCAB");
- QTest::newRow( "rep02" ) << QString("ACABYCAB") << 4 << 1 << QString("") << QString("ACABCAB");
- QTest::newRow( "rep03" ) << QString("ACABCAB") << 0 << 9999 << QString("XX") << QString("XX");
- QTest::newRow( "rep04" ) << QString("XX") << 0 << 9999 << QString("") << QString("");
- QTest::newRow( "rep05" ) << QString("ACABCAB") << 0 << 2 << QString("XX") << QString("XXABCAB");
- QTest::newRow( "rep06" ) << QString("ACABCAB") << 1 << 2 << QString("XX") << QString("AXXBCAB");
- QTest::newRow( "rep07" ) << QString("ACABCAB") << 2 << 2 << QString("XX") << QString("ACXXCAB");
- QTest::newRow( "rep08" ) << QString("ACABCAB") << 3 << 2 << QString("XX") << QString("ACAXXAB");
- QTest::newRow( "rep09" ) << QString("ACABCAB") << 4 << 2 << QString("XX") << QString("ACABXXB");
- QTest::newRow( "rep10" ) << QString("ACABCAB") << 5 << 2 << QString("XX") << QString("ACABCXX");
- QTest::newRow( "rep11" ) << QString("ACABCAB") << 6 << 2 << QString("XX") << QString("ACABCAXX");
- QTest::newRow( "rep12" ) << QString() << 0 << 10 << QString("X") << QString("X");
- QTest::newRow( "rep13" ) << QString("short") << 0 << 10 << QString("X") << QString("X");
- QTest::newRow( "rep14" ) << QString() << 0 << 10 << QString("XX") << QString("XX");
- QTest::newRow( "rep15" ) << QString("short") << 0 << 10 << QString("XX") << QString("XX");
+ QTest::newRow("empty_rem00") << QString() << 0 << 0 << u""_s << QString();
+ QTest::newRow("empty_rem01") << QString() << 0 << 3 << u""_s << QString();
+ QTest::newRow("empty_rem02") << QString() << 5 << 3 << u""_s << QString();
+
+ QTest::newRow( "rem00" ) << u"-<>ABCABCABCABC>"_s << 0 << 3 << u""_s << u"ABCABCABCABC>"_s;
+ QTest::newRow( "rem01" ) << u"ABCABCABCABC>"_s << 1 << 4 << u""_s << u"ACABCABC>"_s;
+ QTest::newRow( "rem04" ) << u"ACABCABC>"_s << 8 << 4 << u""_s << u"ACABCABC"_s;
+ QTest::newRow( "rem05" ) << u"ACABCABC"_s << 7 << 1 << u""_s << u"ACABCAB"_s;
+ QTest::newRow( "rem06" ) << u"ACABCAB"_s << 4 << 0 << u""_s << u"ACABCAB"_s;
+
+ QTest::newRow("empty_rep00") << QString() << 0 << 0 << u"X"_s << u"X"_s;
+ QTest::newRow("empty_rep01") << QString() << 0 << 3 << u"X"_s << u"X"_s;
+ QTest::newRow("empty_rep02") << QString() << 5 << 3 << u"X"_s << QString();
+
+ QTest::newRow( "rep00" ) << u"ACABCAB"_s << 4 << 0 << u"X"_s << u"ACABXCAB"_s;
+ QTest::newRow( "rep01" ) << u"ACABXCAB"_s << 4 << 1 << u"Y"_s << u"ACABYCAB"_s;
+ QTest::newRow( "rep02" ) << u"ACABYCAB"_s << 4 << 1 << u""_s << u"ACABCAB"_s;
+ QTest::newRow( "rep03" ) << u"ACABCAB"_s << 0 << 9999 << u"XX"_s << u"XX"_s;
+ QTest::newRow( "rep04" ) << u"XX"_s << 0 << 9999 << u""_s << u""_s;
+ QTest::newRow( "rep05" ) << u"ACABCAB"_s << 0 << 2 << u"XX"_s << u"XXABCAB"_s;
+ QTest::newRow( "rep06" ) << u"ACABCAB"_s << 1 << 2 << u"XX"_s << u"AXXBCAB"_s;
+ QTest::newRow( "rep07" ) << u"ACABCAB"_s << 2 << 2 << u"XX"_s << u"ACXXCAB"_s;
+ QTest::newRow( "rep08" ) << u"ACABCAB"_s << 3 << 2 << u"XX"_s << u"ACAXXAB"_s;
+ QTest::newRow( "rep09" ) << u"ACABCAB"_s << 4 << 2 << u"XX"_s << u"ACABXXB"_s;
+ QTest::newRow( "rep10" ) << u"ACABCAB"_s << 5 << 2 << u"XX"_s << u"ACABCXX"_s;
+ QTest::newRow( "rep11" ) << u"ACABCAB"_s << 6 << 2 << u"XX"_s << u"ACABCAXX"_s;
+ QTest::newRow( "rep12" ) << QString() << 0 << 10 << u"X"_s << u"X"_s;
+ QTest::newRow( "rep13" ) << u"short"_s << 0 << 10 << u"X"_s << u"X"_s;
+ QTest::newRow( "rep14" ) << QString() << 0 << 10 << u"XX"_s << u"XX"_s;
+ QTest::newRow( "rep15" ) << u"short"_s << 0 << 10 << u"XX"_s << u"XX"_s;
// This is a regression test for an old bug where QString would add index and len parameters,
// potentially causing integer overflow.
- QTest::newRow( "no overflow" ) << QString("ACABCAB") << 1 << INT_MAX - 1 << QString("") << QString("A");
- QTest::newRow( "overflow" ) << QString("ACABCAB") << 1 << INT_MAX << QString("") << QString("A");
+ QTest::newRow( "no overflow" ) << u"ACABCAB"_s << 1 << INT_MAX - 1 << u""_s << u"A"_s;
+ QTest::newRow( "overflow" ) << u"ACABCAB"_s << 1 << INT_MAX << u""_s << u"A"_s;
}
void tst_QString::replace_string_data()
@@ -831,50 +949,51 @@ void tst_QString::replace_string_data()
QTest::addColumn<QString>("result" );
QTest::addColumn<bool>("bcs" );
- QTest::newRow( "rem00" ) << QString("") << QString("") << QString("") << QString("") << true;
- QTest::newRow( "rem01" ) << QString("A") << QString("") << QString("") << QString("A") << true;
- QTest::newRow( "rem02" ) << QString("A") << QString("A") << QString("") << QString("") << true;
- QTest::newRow( "rem03" ) << QString("A") << QString("B") << QString("") << QString("A") << true;
- QTest::newRow( "rem04" ) << QString("AA") << QString("A") << QString("") << QString("") << true;
- QTest::newRow( "rem05" ) << QString("AB") << QString("A") << QString("") << QString("B") << true;
- QTest::newRow( "rem06" ) << QString("AB") << QString("B") << QString("") << QString("A") << true;
- QTest::newRow( "rem07" ) << QString("AB") << QString("C") << QString("") << QString("AB") << true;
- QTest::newRow( "rem08" ) << QString("ABA") << QString("A") << QString("") << QString("B") << true;
- QTest::newRow( "rem09" ) << QString("ABA") << QString("B") << QString("") << QString("AA") << true;
- QTest::newRow( "rem10" ) << QString("ABA") << QString("C") << QString("") << QString("ABA") << true;
- QTest::newRow( "rem11" ) << QString("banana") << QString("an") << QString("") << QString("ba") << true;
- QTest::newRow( "rem12" ) << QString("") << QString("A") << QString("") << QString("") << true;
- QTest::newRow( "rem13" ) << QString("") << QString("A") << QString() << QString("") << true;
- QTest::newRow( "rem14" ) << QString() << QString("A") << QString("") << QString() << true;
- QTest::newRow( "rem15" ) << QString() << QString("A") << QString() << QString() << true;
- QTest::newRow( "rem16" ) << QString() << QString("") << QString("") << QString("") << true;
- QTest::newRow( "rem17" ) << QString("") << QString() << QString("") << QString("") << true;
- QTest::newRow( "rem18" ) << QString("a") << QString("a") << QString("") << QString("") << false;
- QTest::newRow( "rem19" ) << QString("A") << QString("A") << QString("") << QString("") << false;
- QTest::newRow( "rem20" ) << QString("a") << QString("A") << QString("") << QString("") << false;
- QTest::newRow( "rem21" ) << QString("A") << QString("a") << QString("") << QString("") << false;
- QTest::newRow( "rem22" ) << QString("Alpha beta") << QString("a") << QString("") << QString("lph bet") << false;
-
- QTest::newRow( "rep00" ) << QString("ABC") << QString("B") << QString("-") << QString("A-C") << true;
- QTest::newRow( "rep01" ) << QString("$()*+.?[\\]^{|}") << QString("$()*+.?[\\]^{|}") << QString("X") << QString("X") << true;
- QTest::newRow( "rep02" ) << QString("ABCDEF") << QString("") << QString("X") << QString("XAXBXCXDXEXFX") << true;
- QTest::newRow( "rep03" ) << QString("") << QString("") << QString("X") << QString("X") << true;
- QTest::newRow( "rep04" ) << QString("a") << QString("a") << QString("b") << QString("b") << false;
- QTest::newRow( "rep05" ) << QString("A") << QString("A") << QString("b") << QString("b") << false;
- QTest::newRow( "rep06" ) << QString("a") << QString("A") << QString("b") << QString("b") << false;
- QTest::newRow( "rep07" ) << QString("A") << QString("a") << QString("b") << QString("b") << false;
- QTest::newRow( "rep08" ) << QString("a") << QString("a") << QString("a") << QString("a") << false;
- QTest::newRow( "rep09" ) << QString("A") << QString("A") << QString("a") << QString("a") << false;
- QTest::newRow( "rep10" ) << QString("a") << QString("A") << QString("a") << QString("a") << false;
- QTest::newRow( "rep11" ) << QString("A") << QString("a") << QString("a") << QString("a") << false;
- QTest::newRow( "rep12" ) << QString("Alpha beta") << QString("a") << QString("o") << QString("olpho beto") << false;
- QTest::newRow( "rep13" ) << QString() << QString("") << QString("A") << QString("A") << true;
- QTest::newRow( "rep14" ) << QString("") << QString() << QString("A") << QString("A") << true;
- QTest::newRow( "rep15" ) << QString("fooxbarxbazxblub") << QString("x") << QString("yz") << QString("fooyzbaryzbazyzblub") << true;
- QTest::newRow( "rep16" ) << QString("fooxbarxbazxblub") << QString("x") << QString("z") << QString("foozbarzbazzblub") << true;
- QTest::newRow( "rep17" ) << QString("fooxybarxybazxyblub") << QString("xy") << QString("z") << QString("foozbarzbazzblub") << true;
- QTest::newRow("rep18") << QString() << QString() << QString("X") << QString("X") << false;
- QTest::newRow("rep19") << QString() << QString("A") << QString("X") << QString("") << false;
+ QTest::newRow( "rem00" ) << u""_s << u""_s << u""_s << u""_s << true;
+ QTest::newRow( "rem01" ) << u"A"_s << u""_s << u""_s << u"A"_s << true;
+ QTest::newRow( "rem02" ) << u"A"_s << u"A"_s << u""_s << u""_s << true;
+ QTest::newRow( "rem03" ) << u"A"_s << u"B"_s << u""_s << u"A"_s << true;
+ QTest::newRow( "rem04" ) << u"AA"_s << u"A"_s << u""_s << u""_s << true;
+ QTest::newRow( "rem05" ) << u"AB"_s << u"A"_s << u""_s << u"B"_s << true;
+ QTest::newRow( "rem06" ) << u"AB"_s << u"B"_s << u""_s << u"A"_s << true;
+ QTest::newRow( "rem07" ) << u"AB"_s << u"C"_s << u""_s << u"AB"_s << true;
+ QTest::newRow( "rem08" ) << u"ABA"_s << u"A"_s << u""_s << u"B"_s << true;
+ QTest::newRow( "rem09" ) << u"ABA"_s << u"B"_s << u""_s << u"AA"_s << true;
+ QTest::newRow( "rem10" ) << u"ABA"_s << u"C"_s << u""_s << u"ABA"_s << true;
+ QTest::newRow( "rem11" ) << u"banana"_s << u"an"_s << u""_s << u"ba"_s << true;
+ QTest::newRow( "rem12" ) << u""_s << u"A"_s << u""_s << u""_s << true;
+ QTest::newRow( "rem13" ) << u""_s << u"A"_s << QString() << u""_s << true;
+ QTest::newRow( "rem14" ) << QString() << u"A"_s << u""_s << QString() << true;
+ QTest::newRow( "rem15" ) << QString() << u"A"_s << QString() << QString() << true;
+ QTest::newRow( "rem16" ) << QString() << u""_s << u""_s << u""_s << true;
+ QTest::newRow( "rem17" ) << u""_s << QString() << u""_s << u""_s << true;
+ QTest::newRow( "rem18" ) << u"a"_s << u"a"_s << u""_s << u""_s << false;
+ QTest::newRow( "rem19" ) << u"A"_s << u"A"_s << u""_s << u""_s << false;
+ QTest::newRow( "rem20" ) << u"a"_s << u"A"_s << u""_s << u""_s << false;
+ QTest::newRow( "rem21" ) << u"A"_s << u"a"_s << u""_s << u""_s << false;
+ QTest::newRow( "rem22" ) << u"Alpha beta"_s << u"a"_s << u""_s << u"lph bet"_s << false;
+ QTest::newRow( "rem23" ) << u"+00:00"_s << u":"_s << u""_s << u"+0000"_s << false;
+
+ QTest::newRow( "rep00" ) << u"ABC"_s << u"B"_s << u"-"_s << u"A-C"_s << true;
+ QTest::newRow( "rep01" ) << u"$()*+.?[\\]^{|}"_s << u"$()*+.?[\\]^{|}"_s << u"X"_s << u"X"_s << true;
+ QTest::newRow( "rep02" ) << u"ABCDEF"_s << u""_s << u"X"_s << u"XAXBXCXDXEXFX"_s << true;
+ QTest::newRow( "rep03" ) << u""_s << u""_s << u"X"_s << u"X"_s << true;
+ QTest::newRow( "rep04" ) << u"a"_s << u"a"_s << u"b"_s << u"b"_s << false;
+ QTest::newRow( "rep05" ) << u"A"_s << u"A"_s << u"b"_s << u"b"_s << false;
+ QTest::newRow( "rep06" ) << u"a"_s << u"A"_s << u"b"_s << u"b"_s << false;
+ QTest::newRow( "rep07" ) << u"A"_s << u"a"_s << u"b"_s << u"b"_s << false;
+ QTest::newRow( "rep08" ) << u"a"_s << u"a"_s << u"a"_s << u"a"_s << false;
+ QTest::newRow( "rep09" ) << u"A"_s << u"A"_s << u"a"_s << u"a"_s << false;
+ QTest::newRow( "rep10" ) << u"a"_s << u"A"_s << u"a"_s << u"a"_s << false;
+ QTest::newRow( "rep11" ) << u"A"_s << u"a"_s << u"a"_s << u"a"_s << false;
+ QTest::newRow( "rep12" ) << u"Alpha beta"_s << u"a"_s << u"o"_s << u"olpho beto"_s << false;
+ QTest::newRow( "rep13" ) << QString() << u""_s << u"A"_s << u"A"_s << true;
+ QTest::newRow( "rep14" ) << u""_s << QString() << u"A"_s << u"A"_s << true;
+ QTest::newRow( "rep15" ) << u"fooxbarxbazxblub"_s << u"x"_s << u"yz"_s << u"fooyzbaryzbazyzblub"_s << true;
+ QTest::newRow( "rep16" ) << u"fooxbarxbazxblub"_s << u"x"_s << u"z"_s << u"foozbarzbazzblub"_s << true;
+ QTest::newRow( "rep17" ) << u"fooxybarxybazxyblub"_s << u"xy"_s << u"z"_s << u"foozbarzbazzblub"_s << true;
+ QTest::newRow("rep18") << QString() << QString() << u"X"_s << u"X"_s << false;
+ QTest::newRow("rep19") << QString() << u"A"_s << u"X"_s << u""_s << false;
}
#if QT_CONFIG(regularexpression)
@@ -884,32 +1003,35 @@ void tst_QString::replace_regexp_data()
// Columns (all QString): string, regexp, after, result; string.replace(regexp, after) == result
// Test-cases with empty after (replacement text, third column) go in remove_regexp_data()
- QTest::newRow( "rep00" ) << QString("A <i>bon mot</i>.") << QString("<i>([^<]*)</i>") << QString("\\emph{\\1}") << QString("A \\emph{bon mot}.");
- QTest::newRow( "rep01" ) << QString("banana") << QString("^.a()") << QString("\\1") << QString("nana");
- QTest::newRow( "rep02" ) << QString("banana") << QString("(ba)") << QString("\\1X\\1") << QString("baXbanana");
- QTest::newRow( "rep03" ) << QString("banana") << QString("(ba)(na)na") << QString("\\2X\\1") << QString("naXba");
- QTest::newRow("rep04") << QString() << QString("(ba)") << QString("\\1X\\1") << QString();
-
- QTest::newRow("backref00") << QString("\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\10\\11") << QString("\\\\[34]")
- << QString("X") << QString("\\1\\2XX\\5\\6\\7\\8\\9\\A\\10\\11");
- QTest::newRow("backref01") << QString("foo") << QString("[fo]") << QString("\\1") << QString("\\1\\1\\1");
- QTest::newRow("backref02") << QString("foo") << QString("([fo])") << QString("(\\1)") << QString("(f)(o)(o)");
- QTest::newRow("backref03") << QString("foo") << QString("([fo])") << QString("\\2") << QString("\\2\\2\\2");
- QTest::newRow("backref04") << QString("foo") << QString("([fo])") << QString("\\10") << QString("f0o0o0");
- QTest::newRow("backref05") << QString("foo") << QString("([fo])") << QString("\\11") << QString("f1o1o1");
- QTest::newRow("backref06") << QString("foo") << QString("([fo])") << QString("\\19") << QString("f9o9o9");
- QTest::newRow("backref07") << QString("foo") << QString("(f)(o+)")
- << QString("\\2\\1\\10\\20\\11\\22\\19\\29\\3")
- << QString("ooff0oo0f1oo2f9oo9\\3");
- QTest::newRow("backref08") << QString("abc") << QString("(((((((((((((([abc]))))))))))))))")
- << QString("{\\14}") << QString("{a}{b}{c}");
- QTest::newRow("backref09") << QString("abcdefghijklmn")
- << QString("(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)")
- << QString("\\19\\18\\17\\16\\15\\14\\13\\12\\11\\10"
- "\\9\\90\\8\\80\\7\\70\\6\\60\\5\\50\\4\\40\\3\\30\\2\\20\\1")
- << QString("a9a8a7a6a5nmlkjii0hh0gg0ff0ee0dd0cc0bb0a");
- QTest::newRow("backref10") << QString("abc") << QString("((((((((((((((abc))))))))))))))")
- << QString("\\0\\01\\011") << QString("\\0\\01\\011");
+ QTest::newRow("empty-in-null") << QString() << "" << "after" << "after";
+ QTest::newRow("empty-in-empty") << "" << "" << "after" << "after";
+
+ QTest::newRow( "rep00" ) << u"A <i>bon mot</i>."_s << u"<i>([^<]*)</i>"_s << u"\\emph{\\1}"_s << u"A \\emph{bon mot}."_s;
+ QTest::newRow( "rep01" ) << u"banana"_s << u"^.a()"_s << u"\\1"_s << u"nana"_s;
+ QTest::newRow( "rep02" ) << u"banana"_s << u"(ba)"_s << u"\\1X\\1"_s << u"baXbanana"_s;
+ QTest::newRow( "rep03" ) << u"banana"_s << u"(ba)(na)na"_s << u"\\2X\\1"_s << u"naXba"_s;
+ QTest::newRow("rep04") << QString() << u"(ba)"_s << u"\\1X\\1"_s << QString();
+
+ QTest::newRow("backref00") << u"\\1\\2\\3\\4\\5\\6\\7\\8\\9\\A\\10\\11"_s << u"\\\\[34]"_s
+ << u"X"_s << u"\\1\\2XX\\5\\6\\7\\8\\9\\A\\10\\11"_s;
+ QTest::newRow("backref01") << u"foo"_s << u"[fo]"_s << u"\\1"_s << u"\\1\\1\\1"_s;
+ QTest::newRow("backref02") << u"foo"_s << u"([fo])"_s << u"(\\1)"_s << u"(f)(o)(o)"_s;
+ QTest::newRow("backref03") << u"foo"_s << u"([fo])"_s << u"\\2"_s << u"\\2\\2\\2"_s;
+ QTest::newRow("backref04") << u"foo"_s << u"([fo])"_s << u"\\10"_s << u"f0o0o0"_s;
+ QTest::newRow("backref05") << u"foo"_s << u"([fo])"_s << u"\\11"_s << u"f1o1o1"_s;
+ QTest::newRow("backref06") << u"foo"_s << u"([fo])"_s << u"\\19"_s << u"f9o9o9"_s;
+ QTest::newRow("backref07") << u"foo"_s << u"(f)(o+)"_s
+ << u"\\2\\1\\10\\20\\11\\22\\19\\29\\3"_s
+ << u"ooff0oo0f1oo2f9oo9\\3"_s;
+ QTest::newRow("backref08") << u"abc"_s << u"(((((((((((((([abc]))))))))))))))"_s
+ << u"{\\14}"_s << u"{a}{b}{c}"_s;
+ QTest::newRow("backref09") << u"abcdefghijklmn"_s
+ << u"(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)(l)(m)(n)"_s
+ << u"\\19\\18\\17\\16\\15\\14\\13\\12\\11\\10"
+ "\\9\\90\\8\\80\\7\\70\\6\\60\\5\\50\\4\\40\\3\\30\\2\\20\\1"_s
+ << u"a9a8a7a6a5nmlkjii0hh0gg0ff0ee0dd0cc0bb0a"_s;
+ QTest::newRow("backref10") << u"abc"_s << u"((((((((((((((abc))))))))))))))"_s
+ << u"\\0\\01\\011"_s << u"\\0\\01\\011"_s;
}
#endif
@@ -920,10 +1042,10 @@ void tst_QString::utf8_data()
QTest::addColumn<QString>("res" );
QTest::newRow("null") << QByteArray() << QString();
- QTest::newRow("empty") << QByteArray("") << QString("");
+ QTest::newRow("empty") << QByteArray("") << u""_s;
+
+ QTest::newRow("str0") << QByteArray("abcdefgh") << u"abcdefgh"_s;
- QTest::newRow( "str0" ) << QByteArray("abcdefgh")
- << QString("abcdefgh");
QTest::newRow( "str1" ) << QByteArray("\303\266\303\244\303\274\303\226\303\204\303\234\303\270\303\246\303\245\303\230\303\206\303\205")
<< QString::fromLatin1("\366\344\374\326\304\334\370\346\345\330\306\305") ;
str += QChar( 0x05e9 );
@@ -933,11 +1055,11 @@ void tst_QString::utf8_data()
<< str;
str = QChar( 0x20ac );
- str += " some text";
+ str += u" some text"_s;
QTest::newRow( "str3" ) << QByteArray("\342\202\254 some text")
<< str;
- str = "Old Italic: ";
+ str = u"Old Italic: "_s;
str += QChar(0xd800);
str += QChar(0xdf00);
str += QChar(0xd800);
@@ -957,20 +1079,20 @@ void tst_QString::length_data()
QTest::addColumn<qsizetype>("res");
QTest::newRow("null") << QString() << qsizetype(0);
- QTest::newRow("empty") << QString("") << qsizetype(0);
- QTest::newRow("data0") << QString("Test") << qsizetype(4);
- QTest::newRow("data1") << QString("The quick brown fox jumps over the lazy dog")
- << qsizetype(43);
- QTest::newRow("data3") << QString("A") << qsizetype(1);
- QTest::newRow("data4") << QString("AB") << qsizetype(2);
- QTest::newRow("data5") << QString("AB\n") << qsizetype(3);
- QTest::newRow("data6") << QString("AB\nC") << qsizetype(4);
- QTest::newRow("data7") << QString("\n") << qsizetype(1);
- QTest::newRow("data8") << QString("\nA") << qsizetype(2);
- QTest::newRow("data9") << QString("\nAB") << qsizetype(3);
- QTest::newRow("data10") << QString("\nAB\nCDE") << qsizetype(7);
- QTest::newRow("data11") << QString("shdnftrheid fhgnt gjvnfmd chfugkh bnfhg thgjf vnghturkf "
- "chfnguh bjgnfhvygh hnbhgutjfv dhdnjds dcjs d")
+ QTest::newRow("empty") << u""_s << qsizetype(0);
+ QTest::newRow("data0") << u"Test"_s << qsizetype(4);
+ QTest::newRow("data1") << u"The quick brown fox jumps over the lazy dog"_s << qsizetype(43);
+ QTest::newRow("data2") << u"Sphinx of black quartz, judge my vow!"_s << qsizetype(37);
+ QTest::newRow("data3") << u"A"_s << qsizetype(1);
+ QTest::newRow("data4") << u"AB"_s << qsizetype(2);
+ QTest::newRow("data5") << u"AB\n"_s << qsizetype(3);
+ QTest::newRow("data6") << u"AB\nC"_s << qsizetype(4);
+ QTest::newRow("data7") << u"\n"_s << qsizetype(1);
+ QTest::newRow("data8") << u"\nA"_s << qsizetype(2);
+ QTest::newRow("data9") << u"\nAB"_s << qsizetype(3);
+ QTest::newRow("data10") << u"\nAB\nCDE"_s << qsizetype(7);
+ QTest::newRow("data11") << u"shdnftrheid fhgnt gjvnfmd chfugkh bnfhg thgjf vnghturkf "
+ "chfnguh bjgnfhvygh hnbhgutjfv dhdnjds dcjs d"_s
<< qsizetype(100);
}
@@ -978,13 +1100,16 @@ void tst_QString::length()
{
// size(), length() and count() do the same
QFETCH(QString, s1);
- QTEST(s1.length(), "res");
QTEST(s1.size(), "res");
- QTEST(s1.count(), "res");
+ QTEST(s1.size(), "res");
+#if QT_DEPRECATED_SINCE(6, 4)
+ QT_IGNORE_DEPRECATIONS(QTEST(s1.size(), "res");)
+#endif
}
#include <qfile.h>
+#ifndef QT_NO_CAST_FROM_ASCII
void tst_QString::acc_01()
{
QString a;
@@ -1012,12 +1137,15 @@ void tst_QString::acc_01()
f = e;
f[7]='F';
QCOMPARE(e, QLatin1String("String E"));
+
+#ifndef QT_RESTRICTED_CAST_FROM_ASCII
char text[]="String f";
f = text;
text[7]='!';
QCOMPARE(f, QLatin1String("String f"));
f[7]='F';
QCOMPARE(text[7],'!');
+#endif
a="123";
b="456";
@@ -1027,6 +1155,7 @@ void tst_QString::acc_01()
QCOMPARE(b, QLatin1String("456"));
QCOMPARE(a, QLatin1String("253"));
+#ifndef QT_RESTRICTED_CAST_FROM_ASCII
char t[]="TEXT";
a="A";
a=t;
@@ -1037,6 +1166,7 @@ void tst_QString::acc_01()
QCOMPARE(t[0],'T');
t[0]='Z';
QCOMPARE(a, QLatin1String("XEXT"));
+#endif
a="ABC";
QCOMPARE(char(a.toLatin1()[1]),'B');
@@ -1070,10 +1200,13 @@ void tst_QString::acc_01()
QCOMPARE(QString(a+'X'), QLatin1String("ABCX"));
QCOMPARE(QString("XXXX"+a), QLatin1String("XXXXABC"));
QCOMPARE(QString('X'+a), QLatin1String("XABC"));
+#ifndef QT_RESTRICTED_CAST_FROM_ASCII
a = (const char*)0;
QVERIFY(a.isNull());
QVERIFY(*a.toLatin1().constData() == '\0');
+#endif
}
+#endif // QT_NO_CAST_FROM_ASCII
QT_WARNING_PUSH
QT_WARNING_DISABLE_GCC("-Wformat-security")
@@ -1097,15 +1230,23 @@ void tst_QString::nullness()
QString s;
QVERIFY(s.isNull());
}
+#if defined(__cpp_char8_t) || !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+#if !defined(QT_NO_CAST_FROM_ASCII)
+ // we don't have QString(std::nullptr_t), so this uses QString(const char8_t*) in C++20:
{
QString s = nullptr;
QVERIFY(s.isNull());
}
+#endif
+#endif
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
{
const char *ptr = nullptr;
QString s = ptr;
QVERIFY(s.isNull());
}
+#endif
#ifdef __cpp_char8_t
{
const char8_t *ptr = nullptr;
@@ -1142,46 +1283,63 @@ void tst_QString::isEmpty()
QVERIFY(a.isEmpty());
QVERIFY(!a.isDetached());
- QString c("Not empty");
+ QString b = QString::fromLatin1("Not empty");
+ QVERIFY(!b.isEmpty());
+
+ QString c = u"Not empty"_s;
QVERIFY(!c.isEmpty());
}
void tst_QString::constructor()
{
- QString a;
- QString b; //b(10);
- QString c("String C");
- QChar tmp[10];
- tmp[0] = 'S';
- tmp[1] = 't';
- tmp[2] = 'r';
- tmp[3] = 'i';
- tmp[4] = 'n';
- tmp[5] = 'g';
- tmp[6] = ' ';
- tmp[7] = 'D';
- tmp[8] = 'X';
- tmp[9] = '\0';
- QString d(tmp,8);
- QString ca(a);
- QString cb(b);
- QString cc(c);
+ // String literal with explicit \0 character
+ static constexpr char16_t utf16[] = u"String DX\u0000";
+ const size_t size_minus_null_terminator = std::size(utf16) - 1;
+ const auto *qchar = reinterpret_cast<const QChar *>(utf16);
- QCOMPARE(a,ca);
+ // Up to but not including the explicit \0 in utf16[]
+ QString b1(qchar);
+ QCOMPARE(b1, u"String DX");
+ // Up to and including the explicit \0 in utf16[]
+ QString b2(qchar, size_minus_null_terminator);
+ QCOMPARE(b2, QStringView(utf16, size_minus_null_terminator));
+
+ QString a;
+ QString a_copy(a);
+ QCOMPARE(a, a_copy);
QVERIFY(a.isNull());
- QVERIFY(a == (QString)"");
- QCOMPARE(b,cb);
- QCOMPARE(c,cc);
- QCOMPARE(d, QLatin1String("String D"));
+ QCOMPARE(a, u""_s);
+
+ QString c(u"String C"_s);
+ QString c_copy(c);
+ QCOMPARE(c, c_copy);
+
+ QString e(QLatin1StringView("String E"));
+ QString e_copy(e);
+ QCOMPARE(e, e_copy);
+ QCOMPARE(e, "String E"_L1);
+
+ QString d(qchar, 8);
+ QCOMPARE(d, "String D"_L1);
QString nullStr;
QVERIFY( nullStr.isNull() );
QVERIFY( nullStr.isEmpty() );
- QString empty("");
+
+ QString empty(u""_s);
QVERIFY( !empty.isNull() );
QVERIFY( empty.isEmpty() );
+
+ empty = QString::fromLatin1("");
+ QVERIFY(!empty.isNull());
+ QVERIFY(empty.isEmpty());
+
+ empty = QString::fromUtf8("");
+ QVERIFY(!empty.isNull());
+ QVERIFY(empty.isEmpty());
}
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void tst_QString::constructorQByteArray_data()
{
QTest::addColumn<QByteArray>("src" );
@@ -1193,7 +1351,7 @@ void tst_QString::constructorQByteArray_data()
ba[2] = 'M';
ba[3] = 'P';
- QTest::newRow( "1" ) << ba << QString("COMP");
+ QTest::newRow( "1" ) << ba << u"COMP"_s;
QByteArray ba1( 7, 0 );
ba1[0] = 'a';
@@ -1206,8 +1364,8 @@ void tst_QString::constructorQByteArray_data()
QTest::newRow( "2" ) << ba1 << QString::fromUtf16(u"abc\0def", 7);
- QTest::newRow( "3" ) << QByteArray::fromRawData("abcd", 3) << QString("abc");
- QTest::newRow( "4" ) << QByteArray("\xc3\xa9") << QString("\xc3\xa9");
+ QTest::newRow( "3" ) << QByteArray::fromRawData("abcd", 3) << u"abc"_s;
+ QTest::newRow( "4" ) << QByteArray("\xc3\xa9") << QString::fromUtf8("\xc3\xa9");
QTest::newRow( "4-bis" ) << QByteArray("\xc3\xa9") << QString::fromUtf8("\xc3\xa9");
QTest::newRow( "4-tre" ) << QByteArray("\xc3\xa9") << QString::fromLatin1("\xe9");
}
@@ -1226,13 +1384,13 @@ void tst_QString::constructorQByteArray()
QCOMPARE( strBA, expected );
// test constructor/operator=(const char *)
- if (src.constData()[src.length()] == '\0') {
+ if (src.constData()[src.size()] == '\0') {
qsizetype zero = expected.indexOf(QLatin1Char('\0'));
if (zero < 0)
- zero = expected.length();
+ zero = expected.size();
QString str1(src.constData());
- QCOMPARE(str1.length(), zero);
+ QCOMPARE(str1.size(), zero);
QCOMPARE(str1, expected.left(zero));
str1.clear();
@@ -1240,6 +1398,7 @@ void tst_QString::constructorQByteArray()
QCOMPARE(str1, expected.left(zero));
}
}
+#endif // !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void tst_QString::STL()
{
@@ -1253,7 +1412,8 @@ void tst_QString::STL()
QVERIFY(dataArray[0] == 'w'); // array was not modified
QVERIFY(!nullStr.isDetached());
- QString emptyStr("");
+ QString emptyStr(u""_s);
+
QVERIFY(emptyStr.toStdWString().empty());
QVERIFY(!emptyStr.isDetached());
@@ -1283,7 +1443,7 @@ void tst_QString::STL()
void tst_QString::macTypes()
{
-#ifndef Q_OS_MAC
+#ifndef Q_OS_DARWIN
QSKIP("This is a Mac-only test");
#else
extern void tst_QString_macTypes(); // in qcore_foundation.mm
@@ -1291,6 +1451,16 @@ void tst_QString::macTypes()
#endif
}
+void tst_QString::wasmTypes()
+{
+#ifndef Q_OS_WASM
+ QSKIP("This is a WASM-only test");
+#else
+ extern void tst_QString_wasmTypes(); // in qcore_wasm.cpp
+ tst_QString_wasmTypes();
+#endif
+}
+
void tst_QString::truncate()
{
QString nullStr;
@@ -1302,7 +1472,7 @@ void tst_QString::truncate()
QVERIFY(nullStr.isEmpty());
QVERIFY(!nullStr.isDetached());
- QString emptyStr("");
+ QString emptyStr(u""_s);
emptyStr.truncate(5);
QVERIFY(emptyStr.isEmpty());
emptyStr.truncate(0);
@@ -1311,11 +1481,11 @@ void tst_QString::truncate()
QVERIFY(emptyStr.isEmpty());
QVERIFY(!emptyStr.isDetached());
- QString e("String E");
+ QString e(u"String E"_s);
e.truncate(4);
QCOMPARE(e, QLatin1String("Stri"));
- e = "String E";
+ e = u"String E"_s;
e.truncate(0);
QCOMPARE(e, QLatin1String(""));
QVERIFY(e.isEmpty());
@@ -1329,13 +1499,13 @@ void tst_QString::chop_data()
QTest::addColumn<int>("count" );
QTest::addColumn<QString>("result");
- const QString original("abcd");
+ const QString original(u"abcd"_s);
QTest::newRow("null chop 1") << QString() << 1 << QString();
QTest::newRow("null chop -1") << QString() << -1 << QString();
- QTest::newRow("empty chop 1") << QString("") << 1 << QString("");
- QTest::newRow("empty chop -1") << QString("") << -1 << QString("");
- QTest::newRow("data0") << original << 1 << QString("abc");
+ QTest::newRow("empty chop 1") << u""_s << 1 << u""_s;
+ QTest::newRow("empty chop -1") << u""_s << -1 << u""_s;
+ QTest::newRow("data0") << original << 1 << u"abc"_s;
QTest::newRow("data1") << original << 0 << original;
QTest::newRow("data2") << original << -1 << original;
QTest::newRow("data3") << original << int(original.size()) << QString();
@@ -1355,14 +1525,14 @@ void tst_QString::chop()
void tst_QString::fill()
{
QString e;
- e.fill('e',1);
+ e.fill(u'e', 1);
QCOMPARE(e, QLatin1String("e"));
QString f;
- f.fill('f',3);
+ f.fill(u'f', 3);
QCOMPARE(f, QLatin1String("fff"));
- f.fill('F');
+ f.fill(u'F');
QCOMPARE(f, QLatin1String("FFF"));
- f.fill('a', 2);
+ f.fill(u'a', 2);
QCOMPARE(f, QLatin1String("aa"));
}
@@ -1419,6 +1589,43 @@ void tst_QString::asprintf()
double d = -514.25683;
QCOMPARE(QString::asprintf("%f", d), QLatin1String("-514.256830"));
+ QCOMPARE(QString::asprintf("%.f", d), QLatin1String("-514"));
+ QCOMPARE(QString::asprintf("%.0f", d), QLatin1String("-514"));
+ QCOMPARE(QString::asprintf("%1f", d), QLatin1String("-514.256830"));
+ QCOMPARE(QString::asprintf("%1.f", d), QLatin1String("-514"));
+ QCOMPARE(QString::asprintf("%1.0f", d), QLatin1String("-514"));
+ QCOMPARE(QString::asprintf("%1.6f", d), QLatin1String("-514.256830"));
+ QCOMPARE(QString::asprintf("%1.10f", d), QLatin1String("-514.2568300000"));
+ QCOMPARE(QString::asprintf("%-1f", d), QLatin1String("-514.256830"));
+ QCOMPARE(QString::asprintf("%-1.f", d), QLatin1String("-514"));
+ QCOMPARE(QString::asprintf("%-1.0f", d), QLatin1String("-514"));
+ QCOMPARE(QString::asprintf("%-1.6f", d), QLatin1String("-514.256830"));
+ QCOMPARE(QString::asprintf("%-1.10f", d), QLatin1String("-514.2568300000"));
+ QCOMPARE(QString::asprintf("%10f", d), QLatin1String("-514.256830"));
+ QCOMPARE(QString::asprintf("%10.f", d), QLatin1String(" -514"));
+ QCOMPARE(QString::asprintf("%10.0f", d), QLatin1String(" -514"));
+ QCOMPARE(QString::asprintf("%-10f", d), QLatin1String("-514.256830"));
+ QCOMPARE(QString::asprintf("%-10.f", d), QLatin1String("-514 "));
+ QCOMPARE(QString::asprintf("%-10.0f", d), QLatin1String("-514 "));
+ QCOMPARE(QString::asprintf("%010f", d), QLatin1String("-514.256830"));
+ QCOMPARE(QString::asprintf("%010.f", d), QLatin1String("-000000514"));
+ QCOMPARE(QString::asprintf("%010.0f", d), QLatin1String("-000000514"));
+ QCOMPARE(QString::asprintf("%15f", d), QLatin1String(" -514.256830"));
+ QCOMPARE(QString::asprintf("%15.6f", d), QLatin1String(" -514.256830"));
+ QCOMPARE(QString::asprintf("%15.10f", d), QLatin1String("-514.2568300000"));
+ QCOMPARE(QString::asprintf("%-15f", d), QLatin1String("-514.256830 "));
+ QCOMPARE(QString::asprintf("%-15.6f", d), QLatin1String("-514.256830 "));
+ QCOMPARE(QString::asprintf("%-15.10f", d), QLatin1String("-514.2568300000"));
+ QCOMPARE(QString::asprintf("%015f", d), QLatin1String("-0000514.256830"));
+ QCOMPARE(QString::asprintf("%015.6f", d), QLatin1String("-0000514.256830"));
+ QCOMPARE(QString::asprintf("%015.10f", d), QLatin1String("-514.2568300000"));
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_GCC("-Wformat")
+QT_WARNING_DISABLE_CLANG("-Wformat") // Flag '0' ignored when flag '-' is present
+ QCOMPARE(QString::asprintf("%-015f", d), QLatin1String("-514.256830 "));
+ QCOMPARE(QString::asprintf("%-015.6f", d), QLatin1String("-514.256830 "));
+ QCOMPARE(QString::asprintf("%-015.10f", d), QLatin1String("-514.2568300000"));
+QT_WARNING_POP
{
/* This code crashed. I don't know how to reduce it further. In other words,
@@ -1438,33 +1645,43 @@ void tst_QString::asprintfS()
QCOMPARE(QString::asprintf("%-10.10s", "Hello" ), QLatin1String("Hello "));
QCOMPARE(QString::asprintf("%-10.3s", "Hello" ), QLatin1String("Hel "));
QCOMPARE(QString::asprintf("%-5.5s", "Hello" ), QLatin1String("Hello"));
+ QCOMPARE(QString::asprintf("%*s", 4, "Hello"), QLatin1String("Hello"));
+ QCOMPARE(QString::asprintf("%*s", 10, "Hello"), QLatin1String(" Hello"));
+ QCOMPARE(QString::asprintf("%-*s", 10, "Hello"), QLatin1String("Hello "));
// Check utf8 conversion for %s
QCOMPARE(QString::asprintf("%s", "\303\266\303\244\303\274\303\226\303\204\303\234\303\270\303\246\303\245\303\230\303\206\303\205"), QString::fromLatin1("\366\344\374\326\304\334\370\346\345\330\306\305"));
int n1;
- QCOMPARE(QString::asprintf("%s%n%s", "hello", &n1, "goodbye"), QString("hellogoodbye"));
+ QCOMPARE(QString::asprintf("%s%n%s", "hello", &n1, "goodbye"), u"hellogoodbye");
QCOMPARE(n1, 5);
qlonglong n2;
- QCOMPARE(QString::asprintf("%s%s%lln%s", "foo", "bar", &n2, "whiz"), QString("foobarwhiz"));
+ QCOMPARE(QString::asprintf("%s%s%lln%s", "foo", "bar", &n2, "whiz"), u"foobarwhiz");
QCOMPARE((int)n2, 6);
{ // %ls
- QCOMPARE(QString::asprintf("%.3ls", qUtf16Printable("Hello")), QLatin1String("Hel"));
- QCOMPARE(QString::asprintf("%10.3ls", qUtf16Printable("Hello")), QLatin1String(" Hel"));
- QCOMPARE(QString::asprintf("%.10ls", qUtf16Printable("Hello")), QLatin1String("Hello"));
- QCOMPARE(QString::asprintf("%10.10ls", qUtf16Printable("Hello")), QLatin1String(" Hello"));
- QCOMPARE(QString::asprintf("%-10.10ls", qUtf16Printable("Hello")), QLatin1String("Hello "));
- QCOMPARE(QString::asprintf("%-10.3ls", qUtf16Printable("Hello")), QLatin1String("Hel "));
- QCOMPARE(QString::asprintf("%-5.5ls", qUtf16Printable("Hello")), QLatin1String("Hello"));
+
+ QString str(u"Hello"_s);
+ QCOMPARE(QString::asprintf("%.3ls", qUtf16Printable(str)), "Hel"_L1);
+ QCOMPARE(QString::asprintf("%10.3ls", qUtf16Printable(str)), " Hel"_L1);
+ QCOMPARE(QString::asprintf("%.10ls", qUtf16Printable(str)), "Hello"_L1);
+ QCOMPARE(QString::asprintf("%10.10ls", qUtf16Printable(str)), " Hello"_L1);
+ QCOMPARE(QString::asprintf("%-10.10ls", qUtf16Printable(str)), "Hello "_L1);
+ QCOMPARE(QString::asprintf("%-10.3ls", qUtf16Printable(str)), "Hel "_L1);
+ QCOMPARE(QString::asprintf("%-5.5ls", qUtf16Printable(str)), "Hello"_L1);
+ QCOMPARE(QString::asprintf("%*ls", 4, qUtf16Printable(str)), "Hello"_L1);
+ QCOMPARE(QString::asprintf("%*ls", 10, qUtf16Printable(str)), " Hello"_L1);
+ QCOMPARE(QString::asprintf("%-*ls", 10, qUtf16Printable(str)), "Hello "_L1);
// Check utf16 is preserved for %ls
QCOMPARE(QString::asprintf("%ls",
- qUtf16Printable("\303\266\303\244\303\274\303\226\303\204\303\234\303\270\303\246\303\245\303\230\303\206\303\205")),
+ qUtf16Printable(QString::fromUtf8(
+ "\303\266\303\244\303\274\303\226\303\204\303\234\303"
+ "\270\303\246\303\245\303\230\303\206\303\205"))),
QLatin1String("\366\344\374\326\304\334\370\346\345\330\306\305"));
int n;
- QCOMPARE(QString::asprintf("%ls%n%s", qUtf16Printable("hello"), &n, "goodbye"), QLatin1String("hellogoodbye"));
+ QCOMPARE(QString::asprintf("%ls%n%s", qUtf16Printable(u"hello"_s), &n, "goodbye"), "hellogoodbye"_L1);
QCOMPARE(n, 5);
}
}
@@ -1485,73 +1702,73 @@ void tst_QString::indexOf_data()
QTest::addColumn<bool>("bcs" );
QTest::addColumn<int>("resultpos" );
- QTest::newRow( "data0" ) << QString("abc") << QString("a") << 0 << true << 0;
- QTest::newRow( "data1" ) << QString("abc") << QString("a") << 0 << false << 0;
- QTest::newRow( "data2" ) << QString("abc") << QString("A") << 0 << true << -1;
- QTest::newRow( "data3" ) << QString("abc") << QString("A") << 0 << false << 0;
- QTest::newRow( "data4" ) << QString("abc") << QString("a") << 1 << true << -1;
- QTest::newRow( "data5" ) << QString("abc") << QString("a") << 1 << false << -1;
- QTest::newRow( "data6" ) << QString("abc") << QString("A") << 1 << true << -1;
- QTest::newRow( "data7" ) << QString("abc") << QString("A") << 1 << false << -1;
- QTest::newRow( "data8" ) << QString("abc") << QString("b") << 0 << true << 1;
- QTest::newRow( "data9" ) << QString("abc") << QString("b") << 0 << false << 1;
- QTest::newRow( "data10" ) << QString("abc") << QString("B") << 0 << true << -1;
- QTest::newRow( "data11" ) << QString("abc") << QString("B") << 0 << false << 1;
- QTest::newRow( "data12" ) << QString("abc") << QString("b") << 1 << true << 1;
- QTest::newRow( "data13" ) << QString("abc") << QString("b") << 1 << false << 1;
- QTest::newRow( "data14" ) << QString("abc") << QString("B") << 1 << true << -1;
- QTest::newRow( "data15" ) << QString("abc") << QString("B") << 1 << false << 1;
- QTest::newRow( "data16" ) << QString("abc") << QString("b") << 2 << true << -1;
- QTest::newRow( "data17" ) << QString("abc") << QString("b") << 2 << false << -1;
-
- QTest::newRow( "data20" ) << QString("ABC") << QString("A") << 0 << true << 0;
- QTest::newRow( "data21" ) << QString("ABC") << QString("A") << 0 << false << 0;
- QTest::newRow( "data22" ) << QString("ABC") << QString("a") << 0 << true << -1;
- QTest::newRow( "data23" ) << QString("ABC") << QString("a") << 0 << false << 0;
- QTest::newRow( "data24" ) << QString("ABC") << QString("A") << 1 << true << -1;
- QTest::newRow( "data25" ) << QString("ABC") << QString("A") << 1 << false << -1;
- QTest::newRow( "data26" ) << QString("ABC") << QString("a") << 1 << true << -1;
- QTest::newRow( "data27" ) << QString("ABC") << QString("a") << 1 << false << -1;
- QTest::newRow( "data28" ) << QString("ABC") << QString("B") << 0 << true << 1;
- QTest::newRow( "data29" ) << QString("ABC") << QString("B") << 0 << false << 1;
- QTest::newRow( "data30" ) << QString("ABC") << QString("b") << 0 << true << -1;
- QTest::newRow( "data31" ) << QString("ABC") << QString("b") << 0 << false << 1;
- QTest::newRow( "data32" ) << QString("ABC") << QString("B") << 1 << true << 1;
- QTest::newRow( "data33" ) << QString("ABC") << QString("B") << 1 << false << 1;
- QTest::newRow( "data34" ) << QString("ABC") << QString("b") << 1 << true << -1;
- QTest::newRow( "data35" ) << QString("ABC") << QString("b") << 1 << false << 1;
- QTest::newRow( "data36" ) << QString("ABC") << QString("B") << 2 << true << -1;
- QTest::newRow( "data37" ) << QString("ABC") << QString("B") << 2 << false << -1;
-
- QTest::newRow( "data40" ) << QString("aBc") << QString("bc") << 0 << true << -1;
- QTest::newRow( "data41" ) << QString("aBc") << QString("Bc") << 0 << true << 1;
- QTest::newRow( "data42" ) << QString("aBc") << QString("bC") << 0 << true << -1;
- QTest::newRow( "data43" ) << QString("aBc") << QString("BC") << 0 << true << -1;
- QTest::newRow( "data44" ) << QString("aBc") << QString("bc") << 0 << false << 1;
- QTest::newRow( "data45" ) << QString("aBc") << QString("Bc") << 0 << false << 1;
- QTest::newRow( "data46" ) << QString("aBc") << QString("bC") << 0 << false << 1;
- QTest::newRow( "data47" ) << QString("aBc") << QString("BC") << 0 << false << 1;
- QTest::newRow( "data48" ) << QString("AbC") << QString("bc") << 0 << true << -1;
- QTest::newRow( "data49" ) << QString("AbC") << QString("Bc") << 0 << true << -1;
- QTest::newRow( "data50" ) << QString("AbC") << QString("bC") << 0 << true << 1;
- QTest::newRow( "data51" ) << QString("AbC") << QString("BC") << 0 << true << -1;
- QTest::newRow( "data52" ) << QString("AbC") << QString("bc") << 0 << false << 1;
- QTest::newRow( "data53" ) << QString("AbC") << QString("Bc") << 0 << false << 1;
-
- QTest::newRow( "data54" ) << QString("AbC") << QString("bC") << 0 << false << 1;
- QTest::newRow( "data55" ) << QString("AbC") << QString("BC") << 0 << false << 1;
- QTest::newRow( "data56" ) << QString("AbC") << QString("BC") << 1 << false << 1;
- QTest::newRow( "data57" ) << QString("AbC") << QString("BC") << 2 << false << -1;
+ QTest::newRow( "data0" ) << u"abc"_s << u"a"_s << 0 << true << 0;
+ QTest::newRow( "data1" ) << u"abc"_s << u"a"_s << 0 << false << 0;
+ QTest::newRow( "data2" ) << u"abc"_s << u"A"_s << 0 << true << -1;
+ QTest::newRow( "data3" ) << u"abc"_s << u"A"_s << 0 << false << 0;
+ QTest::newRow( "data4" ) << u"abc"_s << u"a"_s << 1 << true << -1;
+ QTest::newRow( "data5" ) << u"abc"_s << u"a"_s << 1 << false << -1;
+ QTest::newRow( "data6" ) << u"abc"_s << u"A"_s << 1 << true << -1;
+ QTest::newRow( "data7" ) << u"abc"_s << u"A"_s << 1 << false << -1;
+ QTest::newRow( "data8" ) << u"abc"_s << u"b"_s << 0 << true << 1;
+ QTest::newRow( "data9" ) << u"abc"_s << u"b"_s << 0 << false << 1;
+ QTest::newRow( "data10" ) << u"abc"_s << u"B"_s << 0 << true << -1;
+ QTest::newRow( "data11" ) << u"abc"_s << u"B"_s << 0 << false << 1;
+ QTest::newRow( "data12" ) << u"abc"_s << u"b"_s << 1 << true << 1;
+ QTest::newRow( "data13" ) << u"abc"_s << u"b"_s << 1 << false << 1;
+ QTest::newRow( "data14" ) << u"abc"_s << u"B"_s << 1 << true << -1;
+ QTest::newRow( "data15" ) << u"abc"_s << u"B"_s << 1 << false << 1;
+ QTest::newRow( "data16" ) << u"abc"_s << u"b"_s << 2 << true << -1;
+ QTest::newRow( "data17" ) << u"abc"_s << u"b"_s << 2 << false << -1;
+
+ QTest::newRow( "data20" ) << u"ABC"_s << u"A"_s << 0 << true << 0;
+ QTest::newRow( "data21" ) << u"ABC"_s << u"A"_s << 0 << false << 0;
+ QTest::newRow( "data22" ) << u"ABC"_s << u"a"_s << 0 << true << -1;
+ QTest::newRow( "data23" ) << u"ABC"_s << u"a"_s << 0 << false << 0;
+ QTest::newRow( "data24" ) << u"ABC"_s << u"A"_s << 1 << true << -1;
+ QTest::newRow( "data25" ) << u"ABC"_s << u"A"_s << 1 << false << -1;
+ QTest::newRow( "data26" ) << u"ABC"_s << u"a"_s << 1 << true << -1;
+ QTest::newRow( "data27" ) << u"ABC"_s << u"a"_s << 1 << false << -1;
+ QTest::newRow( "data28" ) << u"ABC"_s << u"B"_s << 0 << true << 1;
+ QTest::newRow( "data29" ) << u"ABC"_s << u"B"_s << 0 << false << 1;
+ QTest::newRow( "data30" ) << u"ABC"_s << u"b"_s << 0 << true << -1;
+ QTest::newRow( "data31" ) << u"ABC"_s << u"b"_s << 0 << false << 1;
+ QTest::newRow( "data32" ) << u"ABC"_s << u"B"_s << 1 << true << 1;
+ QTest::newRow( "data33" ) << u"ABC"_s << u"B"_s << 1 << false << 1;
+ QTest::newRow( "data34" ) << u"ABC"_s << u"b"_s << 1 << true << -1;
+ QTest::newRow( "data35" ) << u"ABC"_s << u"b"_s << 1 << false << 1;
+ QTest::newRow( "data36" ) << u"ABC"_s << u"B"_s << 2 << true << -1;
+ QTest::newRow( "data37" ) << u"ABC"_s << u"B"_s << 2 << false << -1;
+
+ QTest::newRow( "data40" ) << u"aBc"_s << u"bc"_s << 0 << true << -1;
+ QTest::newRow( "data41" ) << u"aBc"_s << u"Bc"_s << 0 << true << 1;
+ QTest::newRow( "data42" ) << u"aBc"_s << u"bC"_s << 0 << true << -1;
+ QTest::newRow( "data43" ) << u"aBc"_s << u"BC"_s << 0 << true << -1;
+ QTest::newRow( "data44" ) << u"aBc"_s << u"bc"_s << 0 << false << 1;
+ QTest::newRow( "data45" ) << u"aBc"_s << u"Bc"_s << 0 << false << 1;
+ QTest::newRow( "data46" ) << u"aBc"_s << u"bC"_s << 0 << false << 1;
+ QTest::newRow( "data47" ) << u"aBc"_s << u"BC"_s << 0 << false << 1;
+ QTest::newRow( "data48" ) << u"AbC"_s << u"bc"_s << 0 << true << -1;
+ QTest::newRow( "data49" ) << u"AbC"_s << u"Bc"_s << 0 << true << -1;
+ QTest::newRow( "data50" ) << u"AbC"_s << u"bC"_s << 0 << true << 1;
+ QTest::newRow( "data51" ) << u"AbC"_s << u"BC"_s << 0 << true << -1;
+ QTest::newRow( "data52" ) << u"AbC"_s << u"bc"_s << 0 << false << 1;
+ QTest::newRow( "data53" ) << u"AbC"_s << u"Bc"_s << 0 << false << 1;
+
+ QTest::newRow( "data54" ) << u"AbC"_s << u"bC"_s << 0 << false << 1;
+ QTest::newRow( "data55" ) << u"AbC"_s << u"BC"_s << 0 << false << 1;
+ QTest::newRow( "data56" ) << u"AbC"_s << u"BC"_s << 1 << false << 1;
+ QTest::newRow( "data57" ) << u"AbC"_s << u"BC"_s << 2 << false << -1;
QTest::newRow( "null-in-null") << QString() << QString() << 0 << false << 0;
- QTest::newRow( "empty-in-null") << QString() << QString("") << 0 << false << 0;
- QTest::newRow( "null-in-empty") << QString("") << QString() << 0 << false << 0;
- QTest::newRow( "empty-in-empty") << QString("") << QString("") << 0 << false << 0;
- QTest::newRow( "data-in-null") << QString() << QString("a") << 0 << false << -1;
- QTest::newRow( "data-in-empty") << QString("") << QString("a") << 0 << false << -1;
+ QTest::newRow( "empty-in-null") << QString() << u""_s << 0 << false << 0;
+ QTest::newRow( "null-in-empty") << u""_s << QString() << 0 << false << 0;
+ QTest::newRow( "empty-in-empty") << u""_s << u""_s << 0 << false << 0;
+ QTest::newRow( "data-in-null") << QString() << u"a"_s << 0 << false << -1;
+ QTest::newRow( "data-in-empty") << u""_s << u"a"_s << 0 << false << -1;
- QString s1 = "abc";
+ QString s1 = u"abc"_s;
s1 += QChar(0xb5);
QString s2;
s2 += QChar(0x3bc);
@@ -1559,15 +1776,15 @@ void tst_QString::indexOf_data()
s2.prepend(QLatin1Char('C'));
QTest::newRow( "data59" ) << s1 << s2 << 0 << false << 2;
- QString veryBigHaystack(500, 'a');
- veryBigHaystack += 'B';
+ QString veryBigHaystack(500, u'a');
+ veryBigHaystack += u'B';
QTest::newRow("BoyerMooreStressTest") << veryBigHaystack << veryBigHaystack << 0 << true << 0;
- QTest::newRow("BoyerMooreStressTest2") << QString(veryBigHaystack + 'c') << veryBigHaystack << 0 << true << 0;
- QTest::newRow("BoyerMooreStressTest3") << QString('c' + veryBigHaystack) << veryBigHaystack << 0 << true << 1;
- QTest::newRow("BoyerMooreStressTest4") << veryBigHaystack << QString(veryBigHaystack + 'c') << 0 << true << -1;
- QTest::newRow("BoyerMooreStressTest5") << veryBigHaystack << QString('c' + veryBigHaystack) << 0 << true << -1;
- QTest::newRow("BoyerMooreStressTest6") << QString('d' + veryBigHaystack) << QString('c' + veryBigHaystack) << 0 << true << -1;
- QTest::newRow("BoyerMooreStressTest7") << QString(veryBigHaystack + 'c') << QString('c' + veryBigHaystack) << 0 << true << -1;
+ QTest::newRow("BoyerMooreStressTest2") << QString(veryBigHaystack + u'c') << veryBigHaystack << 0 << true << 0;
+ QTest::newRow("BoyerMooreStressTest3") << QString(u'c' + veryBigHaystack) << veryBigHaystack << 0 << true << 1;
+ QTest::newRow("BoyerMooreStressTest4") << veryBigHaystack << QString(veryBigHaystack + u'c') << 0 << true << -1;
+ QTest::newRow("BoyerMooreStressTest5") << veryBigHaystack << QString(u'c' + veryBigHaystack) << 0 << true << -1;
+ QTest::newRow("BoyerMooreStressTest6") << QString(u'd' + veryBigHaystack) << QString(u'c' + veryBigHaystack) << 0 << true << -1;
+ QTest::newRow("BoyerMooreStressTest7") << QString(veryBigHaystack + u'c') << QString(u'c' + veryBigHaystack) << 0 << true << -1;
QTest::newRow("BoyerMooreInsensitiveStressTest") << veryBigHaystack << veryBigHaystack << 0 << false << 0;
@@ -1589,8 +1806,10 @@ void tst_QString::indexOf()
QCOMPARE( haystack.indexOf(needle, startpos, cs), resultpos );
QCOMPARE( haystack.indexOf(view, startpos, cs), resultpos );
if (needleIsLatin) {
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && ! defined(QT_NO_CAST_FROM_ASCII)
QCOMPARE( haystack.indexOf(needle.toLatin1(), startpos, cs), resultpos );
QCOMPARE( haystack.indexOf(needle.toLatin1().data(), startpos, cs), resultpos );
+#endif
}
#if QT_CONFIG(regularexpression)
@@ -1620,15 +1839,19 @@ void tst_QString::indexOf()
QCOMPARE( haystack.indexOf(needle, startpos), resultpos );
QCOMPARE( haystack.indexOf(view, startpos), resultpos );
if (needleIsLatin) {
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
QCOMPARE( haystack.indexOf(needle.toLatin1(), startpos), resultpos );
QCOMPARE( haystack.indexOf(needle.toLatin1().data(), startpos), resultpos );
+#endif
}
if (startpos == 0) {
QCOMPARE( haystack.indexOf(needle), resultpos );
QCOMPARE( haystack.indexOf(view), resultpos );
if (needleIsLatin) {
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
QCOMPARE( haystack.indexOf(needle.toLatin1()), resultpos );
QCOMPARE( haystack.indexOf(needle.toLatin1().data()), resultpos );
+#endif
}
}
}
@@ -1646,39 +1869,40 @@ void tst_QString::indexOf2_data()
QTest::addColumn<int>("resultpos" );
QTest::newRow( "data0" ) << QString() << QString() << 0;
- QTest::newRow( "data1" ) << QString() << QString("") << 0;
- QTest::newRow( "data2" ) << QString("") << QString() << 0;
- QTest::newRow( "data3" ) << QString("") << QString("") << 0;
- QTest::newRow( "data4" ) << QString() << QString("a") << -1;
- QTest::newRow( "data5" ) << QString() << QString("abcdefg") << -1;
- QTest::newRow( "data6" ) << QString("") << QString("a") << -1;
- QTest::newRow( "data7" ) << QString("") << QString("abcdefg") << -1;
-
- QTest::newRow( "data8" ) << QString("a") << QString() << 0;
- QTest::newRow( "data9" ) << QString("a") << QString("") << 0;
- QTest::newRow( "data10" ) << QString("a") << QString("a") << 0;
- QTest::newRow( "data11" ) << QString("a") << QString("b") << -1;
- QTest::newRow( "data12" ) << QString("a") << QString("abcdefg") << -1;
- QTest::newRow( "data13" ) << QString("ab") << QString() << 0;
- QTest::newRow( "data14" ) << QString("ab") << QString("") << 0;
- QTest::newRow( "data15" ) << QString("ab") << QString("a") << 0;
- QTest::newRow( "data16" ) << QString("ab") << QString("b") << 1;
- QTest::newRow( "data17" ) << QString("ab") << QString("ab") << 0;
- QTest::newRow( "data18" ) << QString("ab") << QString("bc") << -1;
- QTest::newRow( "data19" ) << QString("ab") << QString("abcdefg") << -1;
-
- QTest::newRow( "data30" ) << QString("abc") << QString("a") << 0;
- QTest::newRow( "data31" ) << QString("abc") << QString("b") << 1;
- QTest::newRow( "data32" ) << QString("abc") << QString("c") << 2;
- QTest::newRow( "data33" ) << QString("abc") << QString("d") << -1;
- QTest::newRow( "data34" ) << QString("abc") << QString("ab") << 0;
- QTest::newRow( "data35" ) << QString("abc") << QString("bc") << 1;
- QTest::newRow( "data36" ) << QString("abc") << QString("cd") << -1;
- QTest::newRow( "data37" ) << QString("abc") << QString("ac") << -1;
+ QTest::newRow( "data1" ) << QString() << u""_s << 0;
+ QTest::newRow( "data2" ) << u""_s << QString() << 0;
+ QTest::newRow( "data3" ) << u""_s << u""_s << 0;
+ QTest::newRow( "data4" ) << QString() << u"a"_s << -1;
+ QTest::newRow( "data5" ) << QString() << u"abcdefg"_s << -1;
+ QTest::newRow( "data6" ) << u""_s << u"a"_s << -1;
+ QTest::newRow( "data7" ) << u""_s << u"abcdefg"_s << -1;
+
+ QTest::newRow( "data8" ) << u"a"_s << QString() << 0;
+ QTest::newRow( "data9" ) << u"a"_s << u""_s << 0;
+ QTest::newRow( "data10" ) << u"a"_s << u"a"_s << 0;
+ QTest::newRow( "data11" ) << u"a"_s << u"b"_s << -1;
+ QTest::newRow( "data12" ) << u"a"_s << u"abcdefg"_s << -1;
+ QTest::newRow( "data13" ) << u"ab"_s << QString() << 0;
+ QTest::newRow( "data14" ) << u"ab"_s << u""_s << 0;
+ QTest::newRow( "data15" ) << u"ab"_s << u"a"_s << 0;
+ QTest::newRow( "data16" ) << u"ab"_s << u"b"_s << 1;
+ QTest::newRow( "data17" ) << u"ab"_s << u"ab"_s << 0;
+ QTest::newRow( "data18" ) << u"ab"_s << u"bc"_s << -1;
+ QTest::newRow( "data19" ) << u"ab"_s << u"abcdefg"_s << -1;
+
+ QTest::newRow( "data30" ) << u"abc"_s << u"a"_s << 0;
+ QTest::newRow( "data31" ) << u"abc"_s << u"b"_s << 1;
+ QTest::newRow( "data32" ) << u"abc"_s << u"c"_s << 2;
+ QTest::newRow( "data33" ) << u"abc"_s << u"d"_s << -1;
+ QTest::newRow( "data34" ) << u"abc"_s << u"ab"_s << 0;
+ QTest::newRow( "data35" ) << u"abc"_s << u"bc"_s << 1;
+ QTest::newRow( "data36" ) << u"abc"_s << u"cd"_s << -1;
+ QTest::newRow( "data37" ) << u"abc"_s << u"ac"_s << -1;
// sizeof(whale) > 32
- QString whale = "a5zby6cx7dw8evf9ug0th1si2rj3qkp4lomn";
- QString minnow = "zby";
+ QString whale = u"a5zby6cx7dw8evf9ug0th1si2rj3qkp4lomn"_s;
+ QString minnow = u"zby"_s;
+
QTest::newRow( "data40" ) << whale << minnow << 2;
QTest::newRow( "data41" ) << QString(whale + whale) << minnow << 2;
QTest::newRow( "data42" ) << QString(minnow + whale) << minnow << 0;
@@ -1687,7 +1911,7 @@ void tst_QString::indexOf2_data()
QTest::newRow( "data45" ) << whale << QString(whale + whale) << -1;
QTest::newRow( "data46" ) << QString(whale + whale) << QString(whale + whale) << 0;
QTest::newRow( "data47" ) << QString(whale + whale) << QString(whale + minnow) << -1;
- QTest::newRow( "data48" ) << QString(minnow + whale) << whale << (int)minnow.length();
+ QTest::newRow( "data48" ) << QString(minnow + whale) << whale << (int)minnow.size();
}
void tst_QString::indexOf2()
@@ -1707,7 +1931,7 @@ void tst_QString::indexOf2()
QCOMPARE( haystack.indexOf(needle, 0, Qt::CaseInsensitive), resultpos );
QCOMPARE( haystack.indexOf(view, 0, Qt::CaseInsensitive), resultpos );
QCOMPARE( QStringMatcher(needle, Qt::CaseInsensitive).indexIn(haystack, 0), resultpos );
- if ( needle.length() > 0 ) {
+ if ( needle.size() > 0 ) {
got = haystack.lastIndexOf( needle, -1, Qt::CaseSensitive );
QVERIFY( got == resultpos || (resultpos >= 0 && got >= resultpos) );
got = haystack.lastIndexOf( needle, -1, Qt::CaseInsensitive );
@@ -1716,7 +1940,7 @@ void tst_QString::indexOf2()
QCOMPARE( chaystack.indexOf(cneedle, 0), resultpos );
QCOMPARE( QByteArrayMatcher(cneedle).indexIn(chaystack, 0), resultpos );
- if ( cneedle.length() > 0 ) {
+ if ( cneedle.size() > 0 ) {
got = chaystack.lastIndexOf(cneedle, -1);
QVERIFY( got == resultpos || (resultpos >= 0 && got >= resultpos) );
}
@@ -1725,15 +1949,20 @@ void tst_QString::indexOf2()
#if QT_CONFIG(regularexpression)
void tst_QString::indexOfInvalidRegex()
{
- QTest::ignoreMessage(QtWarningMsg, "QString(View)::indexOf: invalid QRegularExpression object");
- QCOMPARE(QString("invalid regex\\").indexOf(QRegularExpression("invalid regex\\")), -1);
- QTest::ignoreMessage(QtWarningMsg, "QString(View)::indexOf: invalid QRegularExpression object");
- QCOMPARE(QString("invalid regex\\").indexOf(QRegularExpression("invalid regex\\"), -1, nullptr), -1);
+ static const QRegularExpression ignoreMessagePattern(
+ u"^QString\\(View\\)::indexOf\\(\\): called on an invalid QRegularExpression object"_s
+ );
+
+ QString str = u"invalid regex\\"_s;
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QCOMPARE(str.indexOf(QRegularExpression(str)), -1);
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QCOMPARE(str.indexOf(QRegularExpression(str), -1, nullptr), -1);
QRegularExpressionMatch match;
QVERIFY(!match.hasMatch());
- QTest::ignoreMessage(QtWarningMsg, "QString(View)::indexOf: invalid QRegularExpression object");
- QCOMPARE(QString("invalid regex\\").indexOf(QRegularExpression("invalid regex\\"), -1, &match), -1);
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QCOMPARE(str.indexOf(QRegularExpression(str), -1, &match), -1);
QVERIFY(!match.hasMatch());
}
#endif
@@ -1746,7 +1975,7 @@ void tst_QString::lastIndexOf_data()
QTest::addColumn<int>("expected" );
QTest::addColumn<bool>("caseSensitive" );
- QString a = "ABCDEFGHIEfGEFG";
+ QString a = u"ABCDEFGHIEfGEFG"_s;
QTest::newRow("-1") << a << "G" << int(a.size()) - 1 << 14 << true;
QTest::newRow("1") << a << "G" << - 1 << 14 << true;
@@ -1781,11 +2010,11 @@ void tst_QString::lastIndexOf_data()
QTest::newRow("28") << a << "" << int(a.size()) + 10 << -1 << false;
QTest::newRow("null-in-null") << QString() << QString() << 0 << 0 << false;
- QTest::newRow("empty-in-null") << QString() << QString("") << 0 << 0 << false;
- QTest::newRow("null-in-empty") << QString("") << QString() << 0 << 0 << false;
- QTest::newRow("empty-in-empty") << QString("") << QString("") << 0 << 0 << false;
- QTest::newRow("data-in-null") << QString() << QString("a") << 0 << -1 << false;
- QTest::newRow("data-in-empty") << QString("") << QString("a") << 0 << -1 << false;
+ QTest::newRow("empty-in-null") << QString() << u""_s << 0 << 0 << false;
+ QTest::newRow("null-in-empty") << u""_s << QString() << 0 << 0 << false;
+ QTest::newRow("empty-in-empty") << u""_s << u""_s << 0 << 0 << false;
+ QTest::newRow("data-in-null") << QString() << u"a"_s << 0 << -1 << false;
+ QTest::newRow("data-in-empty") << u""_s << u"a"_s << 0 << -1 << false;
}
void tst_QString::lastIndexOf()
@@ -1801,8 +2030,10 @@ void tst_QString::lastIndexOf()
QCOMPARE(haystack.lastIndexOf(needle, from, cs), expected);
QCOMPARE(haystack.lastIndexOf(view, from, cs), expected);
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
QCOMPARE(haystack.lastIndexOf(needle.toLatin1(), from, cs), expected);
QCOMPARE(haystack.lastIndexOf(needle.toLatin1().data(), from, cs), expected);
+#endif
#if QT_CONFIG(regularexpression)
if (from >= -1 && from < haystack.size() && needle.size() > 0) {
@@ -1833,13 +2064,17 @@ void tst_QString::lastIndexOf()
if (cs == Qt::CaseSensitive) {
QCOMPARE(haystack.lastIndexOf(needle, from), expected);
QCOMPARE(haystack.lastIndexOf(view, from), expected);
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
QCOMPARE(haystack.lastIndexOf(needle.toLatin1(), from), expected);
QCOMPARE(haystack.lastIndexOf(needle.toLatin1().data(), from), expected);
+#endif
if (from == haystack.size()) {
QCOMPARE(haystack.lastIndexOf(needle), expected);
QCOMPARE(haystack.lastIndexOf(view), expected);
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
QCOMPARE(haystack.lastIndexOf(needle.toLatin1()), expected);
QCOMPARE(haystack.lastIndexOf(needle.toLatin1().data()), expected);
+#endif
}
}
if (needle.size() == 1) {
@@ -1851,38 +2086,59 @@ void tst_QString::lastIndexOf()
#if QT_CONFIG(regularexpression)
void tst_QString::lastIndexOfInvalidRegex()
{
- QTest::ignoreMessage(QtWarningMsg, "QString(View)::lastIndexOf: invalid QRegularExpression object");
- QCOMPARE(QString("invalid regex\\").lastIndexOf(QRegularExpression("invalid regex\\"), 0), -1);
- QTest::ignoreMessage(QtWarningMsg, "QString(View)::lastIndexOf: invalid QRegularExpression object");
- QCOMPARE(QString("invalid regex\\").lastIndexOf(QRegularExpression("invalid regex\\"), -1, nullptr), -1);
+ static const QRegularExpression ignoreMessagePattern(
+ u"^QString\\(View\\)::lastIndexOf\\(\\): called on an invalid QRegularExpression object"_s
+ );
+
+ const QString str(u"invalid regex\\"_s);
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QCOMPARE(str.lastIndexOf(QRegularExpression(str), 0), -1);
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QCOMPARE(str.lastIndexOf(QRegularExpression(str), -1, nullptr), -1);
QRegularExpressionMatch match;
QVERIFY(!match.hasMatch());
- QTest::ignoreMessage(QtWarningMsg, "QString(View)::lastIndexOf: invalid QRegularExpression object");
- QCOMPARE(QString("invalid regex\\").lastIndexOf(QRegularExpression("invalid regex\\"), -1, &match), -1);
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QCOMPARE(str.lastIndexOf(QRegularExpression(str), -1, &match), -1);
QVERIFY(!match.hasMatch());
}
#endif
void tst_QString::count()
{
- QString a;
- a="ABCDEFGHIEfGEFG"; // 15 chars
- QCOMPARE(a.count('A'),1);
- QCOMPARE(a.count('Z'),0);
- QCOMPARE(a.count('E'),3);
- QCOMPARE(a.count('F'),2);
- QCOMPARE(a.count('F',Qt::CaseInsensitive),3);
- QCOMPARE(a.count("FG"),2);
- QCOMPARE(a.count("FG",Qt::CaseInsensitive),3);
+ static const QRegularExpression ignoreMessagePattern(
+ u"^QString\\(View\\)::count\\(\\): called on an invalid QRegularExpression object"_s
+ );
+
+ QString a(u"ABCDEFGHIEfGEFG"_s);
+ QCOMPARE(a.size(), 15);
+
+ QCOMPARE(a.count(QChar(u'A')), 1);
+ QCOMPARE(a.count(QChar(u'Z')), 0);
+ QCOMPARE(a.count(QChar(u'E')), 3);
+ QCOMPARE(a.count(QChar(u'F')), 2);
+ QCOMPARE(a.count(QChar(u'F'), Qt::CaseInsensitive), 3);
+
+ QCOMPARE(a.count(QString(u"FG"_s)), 2);
+ QCOMPARE(a.count(QString(u"FG"_s), Qt::CaseInsensitive), 3);
+
+ QCOMPARE(a.count(QStringView(u"FG")), 2);
+ QCOMPARE(a.count(QStringView(u"FG"), Qt::CaseInsensitive), 3);
+
+ QCOMPARE(a.count(QLatin1StringView("FG")), 2);
+ QCOMPARE(a.count(QLatin1StringView("FG"), Qt::CaseInsensitive), 3);
+
QCOMPARE(a.count( QString(), Qt::CaseInsensitive), 16);
- QCOMPARE(a.count( "", Qt::CaseInsensitive), 16);
+ QCOMPARE(a.count(QString(u""_s), Qt::CaseInsensitive), 16);
+ QCOMPARE(a.count(QStringView(u""), Qt::CaseInsensitive), 16);
+ QCOMPARE(a.count(QLatin1StringView(""), Qt::CaseInsensitive), 16);
+
#if QT_CONFIG(regularexpression)
- QCOMPARE(a.count(QRegularExpression("")), 16);
- QCOMPARE(a.count(QRegularExpression("[FG][HI]")), 1);
- QCOMPARE(a.count(QRegularExpression("[G][HE]")), 2);
- QTest::ignoreMessage(QtWarningMsg, "QString(View)::count: invalid QRegularExpression object");
- QCOMPARE(a.count(QRegularExpression("invalid regex\\")), 0);
+ QCOMPARE(a.count(QRegularExpression(u""_s)), 16);
+ QCOMPARE(a.count(QRegularExpression(u"[FG][HI]"_s)), 1);
+ QCOMPARE(a.count(QRegularExpression(u"[G][HE]"_s)), 2);
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QCOMPARE(a.count(QRegularExpression(u"invalid regex\\"_s)), 0);
#endif
CREATE_VIEW(QLatin1String("FG"));
@@ -1891,88 +2147,132 @@ void tst_QString::count()
QCOMPARE(a.count( QStringView(), Qt::CaseInsensitive), 16);
QString nullStr;
- QCOMPARE(nullStr.count(), 0);
- QCOMPARE(nullStr.count('A'), 0);
- QCOMPARE(nullStr.count("AB"), 0);
+#if QT_DEPRECATED_SINCE(6, 4)
+ QT_IGNORE_DEPRECATIONS(QCOMPARE(nullStr.size(), 0);)
+#endif
+ QCOMPARE(nullStr.count(QChar(u'A')), 0);
+ QCOMPARE(nullStr.count(QString(u"AB"_s)), 0);
QCOMPARE(nullStr.count(view), 0);
+ QCOMPARE(nullStr.count(QLatin1StringView("AB")), 0);
+
QCOMPARE(nullStr.count(QString()), 1);
- QCOMPARE(nullStr.count(""), 1);
+ QCOMPARE(nullStr.count(QString(u""_s)), 1);
+ QCOMPARE(nullStr.count(QStringView(u"")), 1);
+ QCOMPARE(nullStr.count(QLatin1StringView("")), 1);
+
#if QT_CONFIG(regularexpression)
- QCOMPARE(nullStr.count(QRegularExpression("")), 1);
- QCOMPARE(nullStr.count(QRegularExpression("[FG][HI]")), 0);
- QTest::ignoreMessage(QtWarningMsg, "QString(View)::count: invalid QRegularExpression object");
- QCOMPARE(nullStr.count(QRegularExpression("invalid regex\\")), 0);
+ QCOMPARE(nullStr.count(QRegularExpression(u""_s)), 1);
+ QCOMPARE(nullStr.count(QRegularExpression(u"[FG][HI]"_s)), 0);
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QCOMPARE(nullStr.count(QRegularExpression(u"invalid regex\\"_s)), 0);
#endif
- QString emptyStr("");
- QCOMPARE(emptyStr.count(), 0);
- QCOMPARE(emptyStr.count('A'), 0);
- QCOMPARE(emptyStr.count("AB"), 0);
+ QString emptyStr(u""_s);
+#if QT_DEPRECATED_SINCE(6, 4)
+ QT_IGNORE_DEPRECATIONS(QCOMPARE(emptyStr.size(), 0);)
+#endif
+ QCOMPARE(emptyStr.count(u'A'), 0);
+ QCOMPARE(emptyStr.count(QString(u"AB"_s)), 0);
QCOMPARE(emptyStr.count(view), 0);
QCOMPARE(emptyStr.count(QString()), 1);
- QCOMPARE(emptyStr.count(""), 1);
+ QCOMPARE(emptyStr.count(QStringView()), 1);
+ QCOMPARE(emptyStr.count(QLatin1StringView()), 1);
+ QCOMPARE(emptyStr.count(QString(u""_s)), 1);
+ QCOMPARE(emptyStr.count(QStringView(u"")), 1);
+ QCOMPARE(emptyStr.count(QLatin1StringView("")), 1);
+
#if QT_CONFIG(regularexpression)
- QCOMPARE(emptyStr.count(QRegularExpression("")), 1);
- QCOMPARE(emptyStr.count(QRegularExpression("[FG][HI]")), 0);
- QTest::ignoreMessage(QtWarningMsg, "QString(View)::count: invalid QRegularExpression object");
- QCOMPARE(emptyStr.count(QRegularExpression("invalid regex\\")), 0);
+ QCOMPARE(emptyStr.count(QRegularExpression(u""_s)), 1);
+ QCOMPARE(emptyStr.count(QRegularExpression(u"[FG][HI]"_s)), 0);
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QCOMPARE(emptyStr.count(QRegularExpression(u"invalid regex\\"_s)), 0);
#endif
+
+ QString nonBmpString = u"\U00010000\U00010000abc\U00010000"_s;
+ QCOMPARE(nonBmpString.count(u"\U00010000"), 3);
+#if QT_CONFIG(regularexpression)
+ QCOMPARE(nonBmpString.count(QRegularExpression(u"\U00010000"_s)), 3);
+ QCOMPARE(nonBmpString.count(QRegularExpression(u"\U00010000a?"_s)), 3);
+ QCOMPARE(nonBmpString.count(QRegularExpression(u"\U00010000a"_s)), 1);
+ QCOMPARE(nonBmpString.count(QRegularExpression(u"."_s)), 6);
+
+ // can't search for unpaired surrogates
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QCOMPARE(nonBmpString.count(QRegularExpression(QChar(0xd800))), 0);
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QCOMPARE(nonBmpString.count(QRegularExpression(QChar(0xdc00))), 0);
+#endif // QT_CONFIG(regularexpression)
}
void tst_QString::contains()
{
- QString a;
- a="ABCDEFGHIEfGEFG"; // 15 chars
- QVERIFY(a.contains('A'));
- QVERIFY(!a.contains('Z'));
- QVERIFY(a.contains('E'));
- QVERIFY(a.contains('F'));
- QVERIFY(a.contains('F',Qt::CaseInsensitive));
- QVERIFY(a.contains("FG"));
- QVERIFY(a.contains("FG",Qt::CaseInsensitive));
+ static const QRegularExpression ignoreMessagePattern(
+ u"^QString\\(View\\)::contains\\(\\): called on an invalid QRegularExpression object"_s
+ );
+
+ QString a(u"ABCDEFGHIEfGEFG"_s);
+ QCOMPARE(a.size(), 15);
+
+ QVERIFY(a.contains(QChar(u'A')));
+ QVERIFY(!a.contains(QChar(u'Z')));
+ QVERIFY(a.contains(QChar(u'E')));
+ QVERIFY(a.contains(QChar(u'F')));
+ QVERIFY(a.contains(QChar(u'f'), Qt::CaseInsensitive));
+
+ QVERIFY(a.contains(QString(u"FG"_s)));
+ QVERIFY(a.contains(QString(u"FG"_s), Qt::CaseInsensitive));
+ QVERIFY(a.contains(QStringView(u"FG")));
+ QVERIFY(a.contains(QStringView(u"fg"), Qt::CaseInsensitive));
+
QVERIFY(a.contains(QLatin1String("FG")));
QVERIFY(a.contains(QLatin1String("fg"),Qt::CaseInsensitive));
- QVERIFY(a.contains( QString(), Qt::CaseInsensitive));
- QVERIFY(a.contains( "", Qt::CaseInsensitive));
+
+ QVERIFY(a.contains(QString(), Qt::CaseInsensitive));
+ QVERIFY(a.contains(QString(u""_s), Qt::CaseInsensitive));
+ QVERIFY(a.contains(QStringView(), Qt::CaseInsensitive));
+ QVERIFY(a.contains(QStringView(u""), Qt::CaseInsensitive));
+ QVERIFY(a.contains(QLatin1StringView(), Qt::CaseInsensitive));
+ QVERIFY(a.contains(QLatin1StringView(""), Qt::CaseInsensitive));
+
#if QT_CONFIG(regularexpression)
- QVERIFY(a.contains(QRegularExpression("[FG][HI]")));
- QVERIFY(a.contains(QRegularExpression("[G][HE]")));
+ QVERIFY(a.contains(QRegularExpression(u"[FG][HI]"_s)));
+ QVERIFY(a.contains(QRegularExpression(u"[G][HE]"_s)));
{
QRegularExpressionMatch match;
QVERIFY(!match.hasMatch());
- QVERIFY(a.contains(QRegularExpression("[FG][HI]"), &match));
+ QVERIFY(a.contains(QRegularExpression(u"[FG][HI]"_s), &match));
QVERIFY(match.hasMatch());
QCOMPARE(match.capturedStart(), 6);
QCOMPARE(match.capturedEnd(), 8);
QCOMPARE(match.captured(), QStringLiteral("GH"));
- QVERIFY(a.contains(QRegularExpression("[G][HE]"), &match));
+ QVERIFY(a.contains(QRegularExpression(u"[G][HE]"_s), &match));
QVERIFY(match.hasMatch());
QCOMPARE(match.capturedStart(), 6);
QCOMPARE(match.capturedEnd(), 8);
QCOMPARE(match.captured(), QStringLiteral("GH"));
- QVERIFY(a.contains(QRegularExpression("[f](.*)[FG]"), &match));
+ QVERIFY(a.contains(QRegularExpression(u"[f](.*)[FG]"_s), &match));
QVERIFY(match.hasMatch());
QCOMPARE(match.capturedStart(), 10);
QCOMPARE(match.capturedEnd(), 15);
- QCOMPARE(match.captured(), QString("fGEFG"));
+ QCOMPARE(match.captured(), u"fGEFG");
QCOMPARE(match.capturedStart(1), 11);
QCOMPARE(match.capturedEnd(1), 14);
QCOMPARE(match.captured(1), QStringLiteral("GEF"));
- QVERIFY(a.contains(QRegularExpression("[f](.*)[F]"), &match));
+ QVERIFY(a.contains(QRegularExpression(u"[f](.*)[F]"_s), &match));
QVERIFY(match.hasMatch());
QCOMPARE(match.capturedStart(), 10);
QCOMPARE(match.capturedEnd(), 14);
- QCOMPARE(match.captured(), QString("fGEF"));
+ QCOMPARE(match.captured(), u"fGEF");
QCOMPARE(match.capturedStart(1), 11);
QCOMPARE(match.capturedEnd(1), 13);
QCOMPARE(match.captured(1), QStringLiteral("GE"));
- QVERIFY(!a.contains(QRegularExpression("ZZZ"), &match));
+ QVERIFY(!a.contains(QRegularExpression(u"ZZZ"_s), &match));
// doesn't match, but ensure match didn't change
QVERIFY(match.hasMatch());
QCOMPARE(match.capturedStart(), 10);
@@ -1983,12 +2283,12 @@ void tst_QString::contains()
QCOMPARE(match.captured(1), QStringLiteral("GE"));
// don't crash with a null pointer
- QVERIFY(a.contains(QRegularExpression("[FG][HI]"), 0));
- QVERIFY(!a.contains(QRegularExpression("ZZZ"), 0));
+ QVERIFY(a.contains(QRegularExpression(u"[FG][HI]"_s), 0));
+ QVERIFY(!a.contains(QRegularExpression(u"ZZZ"_s), 0));
}
- QTest::ignoreMessage(QtWarningMsg, "QString(View)::contains: invalid QRegularExpression object");
- QVERIFY(!a.contains(QRegularExpression("invalid regex\\")));
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
+ QVERIFY(!a.contains(QRegularExpression(u"invalid regex\\"_s)));
#endif
CREATE_VIEW(QLatin1String("FG"));
@@ -1997,30 +2297,32 @@ void tst_QString::contains()
QVERIFY(a.contains( QStringView(), Qt::CaseInsensitive));
QString nullStr;
- QVERIFY(!nullStr.contains('A'));
- QVERIFY(!nullStr.contains("AB"));
+ QVERIFY(!nullStr.contains(u'A'));
+ QVERIFY(!nullStr.contains(QString(u"AB"_s)));
+ QVERIFY(!nullStr.contains(QLatin1StringView("AB")));
QVERIFY(!nullStr.contains(view));
#if QT_CONFIG(regularexpression)
- QVERIFY(!nullStr.contains(QRegularExpression("[FG][HI]")));
+ QVERIFY(!nullStr.contains(QRegularExpression(u"[FG][HI]"_s)));
QRegularExpressionMatch nullMatch;
- QVERIFY(nullStr.contains(QRegularExpression(""), &nullMatch));
+ QVERIFY(nullStr.contains(QRegularExpression(u""_s), &nullMatch));
QVERIFY(nullMatch.hasMatch());
- QCOMPARE(nullMatch.captured(), "");
+ QCOMPARE(nullMatch.captured(), u"");
QCOMPARE(nullMatch.capturedStart(), 0);
QCOMPARE(nullMatch.capturedEnd(), 0);
#endif
QVERIFY(!nullStr.isDetached());
- QString emptyStr("");
- QVERIFY(!emptyStr.contains('A'));
- QVERIFY(!emptyStr.contains("AB"));
+ QString emptyStr(u""_s);
+ QVERIFY(!emptyStr.contains(u'A'));
+ QVERIFY(!emptyStr.contains(QString(u"AB"_s)));
+ QVERIFY(!emptyStr.contains(QLatin1StringView("AB")));
QVERIFY(!emptyStr.contains(view));
#if QT_CONFIG(regularexpression)
- QVERIFY(!emptyStr.contains(QRegularExpression("[FG][HI]")));
+ QVERIFY(!emptyStr.contains(QRegularExpression(u"[FG][HI]"_s)));
QRegularExpressionMatch emptyMatch;
- QVERIFY(emptyStr.contains(QRegularExpression(""), &emptyMatch));
+ QVERIFY(emptyStr.contains(QRegularExpression(u""_s), &emptyMatch));
QVERIFY(emptyMatch.hasMatch());
- QCOMPARE(emptyMatch.captured(), "");
+ QCOMPARE(emptyMatch.captured(), u"");
QCOMPARE(emptyMatch.capturedStart(), 0);
QCOMPARE(emptyMatch.capturedEnd(), 0);
#endif
@@ -2032,46 +2334,125 @@ void tst_QString::left()
{
QString a;
+ // lvalue
QVERIFY(a.left(0).isNull());
QVERIFY(a.left(5).isNull());
QVERIFY(a.left(-4).isNull());
QVERIFY(!a.isDetached());
- a="ABCDEFGHIEfGEFG"; // 15 chars
+ // rvalue, not detached
+ QVERIFY(QString(a).left(0).isNull());
+ QVERIFY(QString(a).left(5).isNull());
+ QVERIFY(QString(a).left(-4).isNull());
+ QVERIFY(!QString(a).isDetached());
+
+ // rvalue, detached is not applicable
+
+ a = u"ABCDEFGHIEfGEFG"_s;
+ QCOMPARE(a.size(), 15);
+
+ // lvalue
QCOMPARE(a.left(3), QLatin1String("ABC"));
QVERIFY(!a.left(0).isNull());
QCOMPARE(a.left(0), QLatin1String(""));
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, not detached
+ QCOMPARE(QString(a).left(3), QLatin1String("ABC"));
+ QVERIFY(!QString(a).left(0).isNull());
+ QCOMPARE(QString(a).left(0), QLatin1String(""));
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, detached
+ QCOMPARE(detached(a).left(3), QLatin1String("ABC"));
+ QVERIFY(!detached(a).left(0).isNull());
+ QCOMPARE(detached(a).left(0), QLatin1String(""));
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
QString n;
+ QVERIFY(QString().left(3).isNull());
+ QVERIFY(QString().left(0).isNull());
+ QVERIFY(QString().left(0).isNull());
QVERIFY(n.left(3).isNull());
QVERIFY(n.left(0).isNull());
QVERIFY(n.left(0).isNull());
- QString l = "Left";
+ QString l = u"Left"_s;
+
+ // lvalue
QCOMPARE(l.left(-1), l);
QCOMPARE(l.left(100), l);
+ QCOMPARE(l, u"Left");
+
+ // rvalue, not detached
+ QCOMPARE(QString(l).left(-1), l);
+ QCOMPARE(QString(l).left(100), l);
+ QCOMPARE(l, u"Left");
+
+ // rvalue, detached
+ QCOMPARE(detached(l).left(-1), l);
+ QCOMPARE(detached(l).left(100), l);
+ QCOMPARE(l, u"Left");
}
void tst_QString::right()
{
QString a;
+ // lvalue
QVERIFY(a.right(0).isNull());
QVERIFY(a.right(5).isNull());
QVERIFY(a.right(-4).isNull());
QVERIFY(!a.isDetached());
- a="ABCDEFGHIEfGEFG"; // 15 chars
+ // rvalue, not detached
+ QVERIFY(QString(a).right(0).isNull());
+ QVERIFY(QString(a).right(5).isNull());
+ QVERIFY(QString(a).right(-4).isNull());
+ QVERIFY(!QString(a).isDetached());
+
+ // rvalue, detached is not applicable
+
+ a = u"ABCDEFGHIEfGEFG"_s;
+ QCOMPARE(a.size(), 15);
+
+ // lvalue
QCOMPARE(a.right(3), QLatin1String("EFG"));
QCOMPARE(a.right(0), QLatin1String(""));
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, not detached
+ QCOMPARE(QString(a).right(3), QLatin1String("EFG"));
+ QCOMPARE(QString(a).right(0), QLatin1String(""));
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, detached
+ QCOMPARE(detached(a).right(3), QLatin1String("EFG"));
+ QCOMPARE(detached(a).right(0), QLatin1String(""));
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
QString n;
+ QVERIFY(QString().right(3).isNull());
+ QVERIFY(QString().right(0).isNull());
QVERIFY(n.right(3).isNull());
QVERIFY(n.right(0).isNull());
- QString r = "Right";
+ QString r = u"Right"_s;
+
+ // lvalue
QCOMPARE(r.right(-1), r);
QCOMPARE(r.right(100), r);
+ QCOMPARE(r, u"Right");
+
+ // rvalue, not detached
+ QCOMPARE(QString(r).right(-1), r);
+ QCOMPARE(QString(r).right(100), r);
+ QCOMPARE(r, u"Right");
+
+ // rvalue, detached
+ QCOMPARE(detached(r).right(-1), r);
+ QCOMPARE(detached(r).right(100), r);
+ QCOMPARE(r, u"Right");
}
void tst_QString::mid()
@@ -2084,8 +2465,10 @@ void tst_QString::mid()
QVERIFY(a.mid(4, -3).isNull());
QVERIFY(!a.isDetached());
- a="ABCDEFGHIEfGEFG"; // 15 chars
+ a = u"ABCDEFGHIEfGEFG"_s;
+ QCOMPARE(a.size(), 15);
+ // lvalue
QCOMPARE(a.mid(3,3), QLatin1String("DEF"));
QCOMPARE(a.mid(0,0), QLatin1String(""));
QVERIFY(!a.mid(15,0).isNull());
@@ -2094,7 +2477,6 @@ void tst_QString::mid()
QVERIFY(a.mid(15,1).isEmpty());
QVERIFY(a.mid(9999).isNull());
QVERIFY(a.mid(9999,1).isNull());
-
QCOMPARE(a.mid(-1, 6), a.mid(0, 5));
QVERIFY(a.mid(-100, 6).isEmpty());
QVERIFY(a.mid(INT_MIN, 0).isEmpty());
@@ -2108,17 +2490,70 @@ void tst_QString::mid()
QCOMPARE(a.mid(-5, INT_MAX), a);
QCOMPARE(a.mid(-1, INT_MAX), a);
QCOMPARE(a.mid(0, INT_MAX), a);
- QCOMPARE(a.mid(1, INT_MAX), QString("BCDEFGHIEfGEFG"));
- QCOMPARE(a.mid(5, INT_MAX), QString("FGHIEfGEFG"));
+ QCOMPARE(a.mid(1, INT_MAX), u"BCDEFGHIEfGEFG");
+ QCOMPARE(a.mid(5, INT_MAX), u"FGHIEfGEFG");
QVERIFY(a.mid(20, INT_MAX).isNull());
QCOMPARE(a.mid(-1, -1), a);
+ // rvalue, not detached
+ QCOMPARE(QString(a).mid(3,3), QLatin1String("DEF"));
+ QCOMPARE(QString(a).mid(0,0), QLatin1String(""));
+ QVERIFY(!QString(a).mid(15,0).isNull());
+ QVERIFY(QString(a).mid(15,0).isEmpty());
+ QVERIFY(!QString(a).mid(15,1).isNull());
+ QVERIFY(QString(a).mid(15,1).isEmpty());
+ QVERIFY(QString(a).mid(9999).isNull());
+ QVERIFY(QString(a).mid(9999,1).isNull());
+ QCOMPARE(QString(a).mid(-1, 6), QString(a).mid(0, 5));
+ QVERIFY(QString(a).mid(-100, 6).isEmpty());
+ QVERIFY(QString(a).mid(INT_MIN, 0).isEmpty());
+ QCOMPARE(QString(a).mid(INT_MIN, -1), a);
+ QVERIFY(QString(a).mid(INT_MIN, INT_MAX).isNull());
+ QVERIFY(QString(a).mid(INT_MIN + 1, INT_MAX).isEmpty());
+ QCOMPARE(QString(a).mid(INT_MIN + 2, INT_MAX), a.left(1));
+ QCOMPARE(QString(a).mid(INT_MIN + a.size() + 1, INT_MAX), a);
+ QVERIFY(QString(a).mid(INT_MAX).isNull());
+ QVERIFY(QString(a).mid(INT_MAX, INT_MAX).isNull());
+ QCOMPARE(QString(a).mid(-5, INT_MAX), a);
+ QCOMPARE(QString(a).mid(-1, INT_MAX), a);
+ QCOMPARE(QString(a).mid(0, INT_MAX), a);
+ QCOMPARE(QString(a).mid(1, INT_MAX), u"BCDEFGHIEfGEFG");
+ QCOMPARE(QString(a).mid(5, INT_MAX), u"FGHIEfGEFG");
+ QVERIFY(QString(a).mid(20, INT_MAX).isNull());
+ QCOMPARE(QString(a).mid(-1, -1), a);
+
+ // rvalue, detached
+ QCOMPARE(detached(a).mid(3,3), QLatin1String("DEF"));
+ QCOMPARE(detached(a).mid(0,0), QLatin1String(""));
+ QVERIFY(!detached(a).mid(15,0).isNull());
+ QVERIFY(detached(a).mid(15,0).isEmpty());
+ QVERIFY(!detached(a).mid(15,1).isNull());
+ QVERIFY(detached(a).mid(15,1).isEmpty());
+ QVERIFY(detached(a).mid(9999).isNull());
+ QVERIFY(detached(a).mid(9999,1).isNull());
+ QCOMPARE(detached(a).mid(-1, 6), detached(a).mid(0, 5));
+ QVERIFY(detached(a).mid(-100, 6).isEmpty());
+ QVERIFY(detached(a).mid(INT_MIN, 0).isEmpty());
+ QCOMPARE(detached(a).mid(INT_MIN, -1), a);
+ QVERIFY(detached(a).mid(INT_MIN, INT_MAX).isNull());
+ QVERIFY(detached(a).mid(INT_MIN + 1, INT_MAX).isEmpty());
+ QCOMPARE(detached(a).mid(INT_MIN + 2, INT_MAX), a.left(1));
+ QCOMPARE(detached(a).mid(INT_MIN + a.size() + 1, INT_MAX), a);
+ QVERIFY(detached(a).mid(INT_MAX).isNull());
+ QVERIFY(detached(a).mid(INT_MAX, INT_MAX).isNull());
+ QCOMPARE(detached(a).mid(-5, INT_MAX), a);
+ QCOMPARE(detached(a).mid(-1, INT_MAX), a);
+ QCOMPARE(detached(a).mid(0, INT_MAX), a);
+ QCOMPARE(detached(a).mid(1, INT_MAX), u"BCDEFGHIEfGEFG");
+ QCOMPARE(detached(a).mid(5, INT_MAX), u"FGHIEfGEFG");
+ QVERIFY(detached(a).mid(20, INT_MAX).isNull());
+ QCOMPARE(detached(a).mid(-1, -1), a);
+
QString n;
QVERIFY(n.mid(3,3).isNull());
QVERIFY(n.mid(0,0).isNull());
QVERIFY(n.mid(9999,0).isNull());
QVERIFY(n.mid(9999,1).isNull());
-
QVERIFY(n.mid(-1, 6).isNull());
QVERIFY(n.mid(-100, 6).isNull());
QVERIFY(n.mid(INT_MIN, 0).isNull());
@@ -2137,10 +2572,31 @@ void tst_QString::mid()
QVERIFY(n.mid(20, INT_MAX).isNull());
QVERIFY(n.mid(-1, -1).isNull());
- QString x = "Nine pineapples";
- QCOMPARE(x.mid(5, 4), QString("pine"));
- QCOMPARE(x.mid(5), QString("pineapples"));
-
+ QVERIFY(QString().mid(3,3).isNull());
+ QVERIFY(QString().mid(0,0).isNull());
+ QVERIFY(QString().mid(9999,0).isNull());
+ QVERIFY(QString().mid(9999,1).isNull());
+ QVERIFY(QString().mid(-1, 6).isNull());
+ QVERIFY(QString().mid(-100, 6).isNull());
+ QVERIFY(QString().mid(INT_MIN, 0).isNull());
+ QVERIFY(QString().mid(INT_MIN, -1).isNull());
+ QVERIFY(QString().mid(INT_MIN, INT_MAX).isNull());
+ QVERIFY(QString().mid(INT_MIN + 1, INT_MAX).isNull());
+ QVERIFY(QString().mid(INT_MIN + 2, INT_MAX).isNull());
+ QVERIFY(QString().mid(INT_MIN + QString().size() + 1, INT_MAX).isNull());
+ QVERIFY(QString().mid(INT_MAX).isNull());
+ QVERIFY(QString().mid(INT_MAX, INT_MAX).isNull());
+ QVERIFY(QString().mid(-5, INT_MAX).isNull());
+ QVERIFY(QString().mid(-1, INT_MAX).isNull());
+ QVERIFY(QString().mid(0, INT_MAX).isNull());
+ QVERIFY(QString().mid(1, INT_MAX).isNull());
+ QVERIFY(QString().mid(5, INT_MAX).isNull());
+ QVERIFY(QString().mid(20, INT_MAX).isNull());
+ QVERIFY(QString().mid(-1, -1).isNull());
+
+ QString x = u"Nine pineapples"_s;
+ QCOMPARE(x.mid(5, 4), u"pine");
+ QCOMPARE(x.mid(5), u"pineapples");
QCOMPARE(x.mid(-1, 6), x.mid(0, 5));
QVERIFY(x.mid(-100, 6).isEmpty());
QVERIFY(x.mid(INT_MIN, 0).isEmpty());
@@ -2154,59 +2610,104 @@ void tst_QString::mid()
QCOMPARE(x.mid(-5, INT_MAX), x);
QCOMPARE(x.mid(-1, INT_MAX), x);
QCOMPARE(x.mid(0, INT_MAX), x);
- QCOMPARE(x.mid(1, INT_MAX), QString("ine pineapples"));
- QCOMPARE(x.mid(5, INT_MAX), QString("pineapples"));
+ QCOMPARE(x.mid(1, INT_MAX), u"ine pineapples");
+ QCOMPARE(x.mid(5, INT_MAX), u"pineapples");
QVERIFY(x.mid(20, INT_MAX).isNull());
QCOMPARE(x.mid(-1, -1), x);
+ QCOMPARE(x, u"Nine pineapples");
+
+ // rvalue, not detached
+ QCOMPARE(QString(x).mid(5, 4), u"pine");
+ QCOMPARE(QString(x).mid(5), u"pineapples");
+ QCOMPARE(QString(x).mid(-1, 6), QString(x).mid(0, 5));
+ QVERIFY(QString(x).mid(-100, 6).isEmpty());
+ QVERIFY(QString(x).mid(INT_MIN, 0).isEmpty());
+ QCOMPARE(QString(x).mid(INT_MIN, -1), x);
+ QVERIFY(QString(x).mid(INT_MIN, INT_MAX).isNull());
+ QVERIFY(QString(x).mid(INT_MIN + 1, INT_MAX).isEmpty());
+ QCOMPARE(QString(x).mid(INT_MIN + 2, INT_MAX), x.left(1));
+ QCOMPARE(QString(x).mid(INT_MIN + x.size() + 1, INT_MAX), x);
+ QVERIFY(QString(x).mid(INT_MAX).isNull());
+ QVERIFY(QString(x).mid(INT_MAX, INT_MAX).isNull());
+ QCOMPARE(QString(x).mid(-5, INT_MAX), x);
+ QCOMPARE(QString(x).mid(-1, INT_MAX), x);
+ QCOMPARE(QString(x).mid(0, INT_MAX), x);
+ QCOMPARE(QString(x).mid(1, INT_MAX), u"ine pineapples");
+ QCOMPARE(QString(x).mid(5, INT_MAX), u"pineapples");
+ QVERIFY(QString(x).mid(20, INT_MAX).isNull());
+ QCOMPARE(QString(x).mid(-1, -1), x);
+ QCOMPARE(x, u"Nine pineapples");
+
+ // rvalue, detached
+ QCOMPARE(detached(x).mid(5, 4), u"pine");
+ QCOMPARE(detached(x).mid(5), u"pineapples");
+ QCOMPARE(detached(x).mid(-1, 6), detached(x).mid(0, 5));
+ QVERIFY(detached(x).mid(-100, 6).isEmpty());
+ QVERIFY(detached(x).mid(INT_MIN, 0).isEmpty());
+ QCOMPARE(detached(x).mid(INT_MIN, -1), x);
+ QVERIFY(detached(x).mid(INT_MIN, INT_MAX).isNull());
+ QVERIFY(detached(x).mid(INT_MIN + 1, INT_MAX).isEmpty());
+ QCOMPARE(detached(x).mid(INT_MIN + 2, INT_MAX), x.left(1));
+ QCOMPARE(detached(x).mid(INT_MIN + x.size() + 1, INT_MAX), x);
+ QVERIFY(detached(x).mid(INT_MAX).isNull());
+ QVERIFY(detached(x).mid(INT_MAX, INT_MAX).isNull());
+ QCOMPARE(detached(x).mid(-5, INT_MAX), x);
+ QCOMPARE(detached(x).mid(-1, INT_MAX), x);
+ QCOMPARE(detached(x).mid(0, INT_MAX), x);
+ QCOMPARE(detached(x).mid(1, INT_MAX), u"ine pineapples");
+ QCOMPARE(detached(x).mid(5, INT_MAX), u"pineapples");
+ QVERIFY(detached(x).mid(20, INT_MAX).isNull());
+ QCOMPARE(detached(x).mid(-1, -1), x);
+ QCOMPARE(x, u"Nine pineapples");
}
void tst_QString::leftJustified()
{
QString a;
- QCOMPARE(a.leftJustified(3, '-'), QLatin1String("---"));
+ QCOMPARE(a.leftJustified(3, u'-'), "---"_L1);
QCOMPARE(a.leftJustified(2), QLatin1String(" "));
QVERIFY(!a.isDetached());
- a="ABC";
- QCOMPARE(a.leftJustified(5,'-'), QLatin1String("ABC--"));
- QCOMPARE(a.leftJustified(4,'-'), QLatin1String("ABC-"));
+ a= u"ABC"_s;
+ QCOMPARE(a.leftJustified(5, u'-'), "ABC--"_L1);
+ QCOMPARE(a.leftJustified(4, u'-'), "ABC-"_L1);
QCOMPARE(a.leftJustified(4), QLatin1String("ABC "));
QCOMPARE(a.leftJustified(3), QLatin1String("ABC"));
QCOMPARE(a.leftJustified(2), QLatin1String("ABC"));
QCOMPARE(a.leftJustified(1), QLatin1String("ABC"));
QCOMPARE(a.leftJustified(0), QLatin1String("ABC"));
- QCOMPARE(a.leftJustified(4,' ',true), QLatin1String("ABC "));
- QCOMPARE(a.leftJustified(3,' ',true), QLatin1String("ABC"));
- QCOMPARE(a.leftJustified(2,' ',true), QLatin1String("AB"));
- QCOMPARE(a.leftJustified(1,' ',true), QLatin1String("A"));
- QCOMPARE(a.leftJustified(0,' ',true), QLatin1String(""));
+ QCOMPARE(a.leftJustified(4, u' ', true), "ABC "_L1);
+ QCOMPARE(a.leftJustified(3, u' ', true), "ABC"_L1);
+ QCOMPARE(a.leftJustified(2, u' ', true), "AB"_L1);
+ QCOMPARE(a.leftJustified(1, u' ', true), "A"_L1);
+ QCOMPARE(a.leftJustified(0, u' ', true), ""_L1);
}
void tst_QString::rightJustified()
{
QString a;
- QCOMPARE(a.rightJustified(3, '-'), QLatin1String("---"));
+ QCOMPARE(a.rightJustified(3, u'-'), "---"_L1);
QCOMPARE(a.rightJustified(2), QLatin1String(" "));
QVERIFY(!a.isDetached());
- a="ABC";
- QCOMPARE(a.rightJustified(5,'-'), QLatin1String("--ABC"));
- QCOMPARE(a.rightJustified(4,'-'), QLatin1String("-ABC"));
+ a = u"ABC"_s;
+ QCOMPARE(a.rightJustified(5, u'-'), "--ABC"_L1);
+ QCOMPARE(a.rightJustified(4, u'-'), "-ABC"_L1);
QCOMPARE(a.rightJustified(4), QLatin1String(" ABC"));
QCOMPARE(a.rightJustified(3), QLatin1String("ABC"));
QCOMPARE(a.rightJustified(2), QLatin1String("ABC"));
QCOMPARE(a.rightJustified(1), QLatin1String("ABC"));
QCOMPARE(a.rightJustified(0), QLatin1String("ABC"));
- QCOMPARE(a.rightJustified(4,'-',true), QLatin1String("-ABC"));
- QCOMPARE(a.rightJustified(4,' ',true), QLatin1String(" ABC"));
- QCOMPARE(a.rightJustified(3,' ',true), QLatin1String("ABC"));
- QCOMPARE(a.rightJustified(2,' ',true), QLatin1String("AB"));
- QCOMPARE(a.rightJustified(1,' ',true), QLatin1String("A"));
- QCOMPARE(a.rightJustified(0,' ',true), QLatin1String(""));
+ QCOMPARE(a.rightJustified(4, u'-', true), "-ABC"_L1);
+ QCOMPARE(a.rightJustified(4, u' ', true), " ABC"_L1);
+ QCOMPARE(a.rightJustified(3, u' ', true), "ABC"_L1);
+ QCOMPARE(a.rightJustified(2, u' ', true), "AB"_L1);
+ QCOMPARE(a.rightJustified(1, u' ', true), "A"_L1);
+ QCOMPARE(a.rightJustified(0, u' ', true), ""_L1);
QCOMPARE(a, QLatin1String("ABC"));
}
@@ -2241,39 +2742,41 @@ void tst_QString::toUpper()
const QString s;
QCOMPARE( s.toUpper(), QString() ); // lvalue
QCOMPARE( QString().toUpper(), QString() ); // rvalue
- QCOMPARE( QString("").toUpper(), QString("") );
- QCOMPARE( QStringLiteral("text").toUpper(), QString("TEXT") );
- QCOMPARE( QString("text").toUpper(), QString("TEXT") );
- QCOMPARE( QString("Text").toUpper(), QString("TEXT") );
- QCOMPARE( QString("tExt").toUpper(), QString("TEXT") );
- QCOMPARE( QString("teXt").toUpper(), QString("TEXT") );
- QCOMPARE( QString("texT").toUpper(), QString("TEXT") );
- QCOMPARE( QString("TExt").toUpper(), QString("TEXT") );
- QCOMPARE( QString("teXT").toUpper(), QString("TEXT") );
- QCOMPARE( QString("tEXt").toUpper(), QString("TEXT") );
- QCOMPARE( QString("tExT").toUpper(), QString("TEXT") );
- QCOMPARE( QString("TEXT").toUpper(), QString("TEXT") );
- QCOMPARE( QString("@ABYZ[").toUpper(), QString("@ABYZ["));
- QCOMPARE( QString("@abyz[").toUpper(), QString("@ABYZ["));
- QCOMPARE( QString("`ABYZ{").toUpper(), QString("`ABYZ{"));
- QCOMPARE( QString("`abyz{").toUpper(), QString("`ABYZ{"));
-
- QCOMPARE( QString(1, QChar(0xdf)).toUpper(), QString("SS"));
+ QCOMPARE(QString(u""_s).toUpper(), QString(u""_s));
+
+ const QString TEXT(u"TEXT"_s);
+ QCOMPARE(QStringLiteral("text").toUpper(), TEXT);
+ QCOMPARE(QString(u"text"_s).toUpper(), TEXT);
+ QCOMPARE(QString(u"Text"_s).toUpper(), TEXT);
+ QCOMPARE(QString(u"tExt"_s).toUpper(), TEXT);
+ QCOMPARE(QString(u"teXt"_s).toUpper(), TEXT);
+ QCOMPARE(QString(u"texT"_s).toUpper(), TEXT);
+ QCOMPARE(QString(u"TExt"_s).toUpper(), TEXT);
+ QCOMPARE(QString(u"teXT"_s).toUpper(), TEXT);
+ QCOMPARE(QString(u"tEXt"_s).toUpper(), TEXT);
+ QCOMPARE(QString(u"tExT"_s).toUpper(), TEXT);
+ QCOMPARE(TEXT.toUpper(), TEXT);
+ QCOMPARE(QString(u"@ABYZ["_s).toUpper(), u"@ABYZ[");
+ QCOMPARE(QString(u"@abyz["_s).toUpper(), u"@ABYZ[");
+ QCOMPARE(QString(u"`ABYZ{"_s).toUpper(), u"`ABYZ{");
+ QCOMPARE(QString(u"`abyz{"_s).toUpper(), u"`ABYZ{");
+
+ QCOMPARE(QString(1, QChar(0xdf)).toUpper(), u"SS");
{
QString s = QString::fromUtf8("Gro\xc3\x9fstra\xc3\x9f""e");
// call lvalue-ref version, mustn't change the original
- QCOMPARE(s.toUpper(), QString("GROSSSTRASSE"));
+ QCOMPARE(s.toUpper(), u"GROSSSTRASSE");
QCOMPARE(s, QString::fromUtf8("Gro\xc3\x9fstra\xc3\x9f""e"));
// call rvalue-ref while shared (the original mustn't change)
QString copy = s;
- QCOMPARE(std::move(copy).toUpper(), QString("GROSSSTRASSE"));
+ QCOMPARE(std::move(copy).toUpper(), u"GROSSSTRASSE");
QCOMPARE(s, QString::fromUtf8("Gro\xc3\x9fstra\xc3\x9f""e"));
// call rvalue-ref version on detached case
copy.clear();
- QCOMPARE(std::move(s).toUpper(), QString("GROSSSTRASSE"));
+ QCOMPARE(std::move(s).toUpper(), u"GROSSSTRASSE");
}
QString lower, upper;
@@ -2302,8 +2805,8 @@ void tst_QString::toUpper()
for (int i = 0; i < 65536; ++i) {
QString str(1, QChar(i));
QString upper = str.toUpper();
- QVERIFY(upper.length() >= 1);
- if (upper.length() == 1)
+ QVERIFY(upper.size() >= 1);
+ if (upper.size() == 1)
QVERIFY(upper == QString(1, QChar(i).toUpper()));
}
}
@@ -2313,22 +2816,24 @@ void tst_QString::toLower()
const QString s;
QCOMPARE(s.toLower(), QString()); // lvalue
QCOMPARE( QString().toLower(), QString() ); // rvalue
- QCOMPARE( QString("").toLower(), QString("") );
- QCOMPARE( QString("text").toLower(), QString("text") );
- QCOMPARE( QStringLiteral("Text").toLower(), QString("text") );
- QCOMPARE( QString("Text").toLower(), QString("text") );
- QCOMPARE( QString("tExt").toLower(), QString("text") );
- QCOMPARE( QString("teXt").toLower(), QString("text") );
- QCOMPARE( QString("texT").toLower(), QString("text") );
- QCOMPARE( QString("TExt").toLower(), QString("text") );
- QCOMPARE( QString("teXT").toLower(), QString("text") );
- QCOMPARE( QString("tEXt").toLower(), QString("text") );
- QCOMPARE( QString("tExT").toLower(), QString("text") );
- QCOMPARE( QString("TEXT").toLower(), QString("text") );
- QCOMPARE( QString("@ABYZ[").toLower(), QString("@abyz["));
- QCOMPARE( QString("@abyz[").toLower(), QString("@abyz["));
- QCOMPARE( QString("`ABYZ{").toLower(), QString("`abyz{"));
- QCOMPARE( QString("`abyz{").toLower(), QString("`abyz{"));
+ QCOMPARE(QString(u""_s).toLower(), u"");
+
+ const QString lowerText(u"text"_s);
+ QCOMPARE(lowerText.toLower(), lowerText);
+ QCOMPARE(QStringLiteral("Text").toLower(), lowerText);
+ QCOMPARE(QString(u"Text"_s).toLower(), lowerText);
+ QCOMPARE(QString(u"tExt"_s).toLower(), lowerText);
+ QCOMPARE(QString(u"teXt"_s).toLower(), lowerText);
+ QCOMPARE(QString(u"texT"_s).toLower(), lowerText);
+ QCOMPARE(QString(u"TExt"_s).toLower(), lowerText);
+ QCOMPARE(QString(u"teXT"_s).toLower(), lowerText);
+ QCOMPARE(QString(u"tEXt"_s).toLower(), lowerText);
+ QCOMPARE(QString(u"tExT"_s).toLower(), lowerText);
+ QCOMPARE(QString(u"TEXT"_s).toLower(), lowerText);
+ QCOMPARE(QString(u"@ABYZ["_s).toLower(), u"@abyz[");
+ QCOMPARE(QString(u"@abyz["_s).toLower(), u"@abyz[");
+ QCOMPARE(QString(u"`ABYZ{"_s).toLower(), u"`abyz{");
+ QCOMPARE(QString(u"`abyz{"_s).toLower(), u"`abyz{");
QCOMPARE( QString(1, QChar(0x130)).toLower(), QString(QString(1, QChar(0x69)) + QChar(0x307)));
@@ -2358,8 +2863,8 @@ void tst_QString::toLower()
for (int i = 0; i < 65536; ++i) {
QString str(1, QChar(i));
QString lower = str.toLower();
- QVERIFY(lower.length() >= 1);
- if (lower.length() == 1)
+ QVERIFY(lower.size() >= 1);
+ if (lower.size() == 1)
QVERIFY(str.toLower() == QString(1, QChar(i).toLower()));
}
}
@@ -2372,60 +2877,70 @@ void tst_QString::isLower_isUpper_data()
int row = 0;
QTest::addRow("lower-and-upper-%02d", row++) << QString() << true << true;
- QTest::addRow("lower-and-upper-%02d", row++) << QString("") << true << true;
- QTest::addRow("lower-and-upper-%02d", row++) << QString(" ") << true << true;
- QTest::addRow("lower-and-upper-%02d", row++) << QString("123") << true << true;
- QTest::addRow("lower-and-upper-%02d", row++) << QString("@123$#") << true << true;
- QTest::addRow("lower-and-upper-%02d", row++) << QString("ð„žð„´ð†â™«") << true << true; // Unicode Block 'Musical Symbols'
+ QTest::addRow("lower-and-upper-%02d", row++) << u""_s << true << true;
+ QTest::addRow("lower-and-upper-%02d", row++) << u" "_s << true << true;
+ QTest::addRow("lower-and-upper-%02d", row++) << u"123"_s << true << true;
+ QTest::addRow("lower-and-upper-%02d", row++) << u"@123$#"_s << true << true;
+ QTest::addRow("lower-and-upper-%02d", row++) << QString::fromUtf8("ð„žð„´ð†â™«") << true << true; // Unicode Block 'Musical Symbols'
// not foldable
- QTest::addRow("lower-and-upper-%02d", row++) << QString("ðšŠðš‹ðšŒðšðšŽ") << true << true; // MATHEMATICAL MONOSPACE SMALL A, ... E
- QTest::addRow("lower-and-upper-%02d", row++) << QString("ð™–,ð™—,ð™˜,ð™™,ð™š") << true << true; // MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A, ... E
- QTest::addRow("lower-and-upper-%02d", row++) << QString("ð—”ð—•ð—–ð——ð—˜") << true << true; // MATHEMATICAL SANS-SERIF BOLD CAPITAL A, ... E
- QTest::addRow("lower-and-upper-%02d", row++) << QString("ð€,ð,ð‚,ðƒ,ð„") << true << true; // MATHEMATICAL BOLD CAPITAL A, ... E
+ QTest::addRow("lower-and-upper-%02d", row++) << u"ðšŠðš‹ðšŒðšðšŽ"_s << true << true; // MATHEMATICAL MONOSPACE SMALL A, ... E
+ QTest::addRow("lower-and-upper-%02d", row++) << u"ð™–,ð™—,ð™˜,ð™™,ð™š"_s << true << true; // MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A, ... E
+ QTest::addRow("lower-and-upper-%02d", row++) << u"ð—”ð—•ð—–ð——ð—˜"_s << true << true; // MATHEMATICAL SANS-SERIF BOLD CAPITAL A, ... E
+ QTest::addRow("lower-and-upper-%02d", row++) << u"ð€,ð,ð‚,ðƒ,ð„"_s << true << true; // MATHEMATICAL BOLD CAPITAL A, ... E
row = 0;
- QTest::addRow("only-lower-%02d", row++) << QString("text") << true << false;
- QTest::addRow("only-lower-%02d", row++) << QString("àaa") << true << false;
- QTest::addRow("only-lower-%02d", row++) << QString("øæß") << true << false;
- QTest::addRow("only-lower-%02d", row++) << QString("text ") << true << false;
- QTest::addRow("only-lower-%02d", row++) << QString(" text") << true << false;
- QTest::addRow("only-lower-%02d", row++) << QString("hello, world!") << true << false;
- QTest::addRow("only-lower-%02d", row++) << QString("123@abyz[") << true << false;
- QTest::addRow("only-lower-%02d", row++) << QString("`abyz{") << true << false;
- QTest::addRow("only-lower-%02d", row++) << QString("að™–a|bð™—b|cð™˜c|dð™™d|eð™še") << true << false; // MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A, ... E
- QTest::addRow("only-lower-%02d", row++) << QString("ð¨") << true << false; // DESERET SMALL LETTER LONG I
+ QTest::addRow("only-lower-%02d", row++) << u"text"_s << true << false;
+ QTest::addRow("only-lower-%02d", row++) << QString::fromUtf8("àaa") << true << false;
+ QTest::addRow("only-lower-%02d", row++) << QString::fromUtf8("øæß") << true << false;
+ QTest::addRow("only-lower-%02d", row++) << u"text "_s << true << false;
+ QTest::addRow("only-lower-%02d", row++) << u" text"_s << true << false;
+ QTest::addRow("only-lower-%02d", row++) << u"hello, world!"_s << true << false;
+ QTest::addRow("only-lower-%02d", row++) << u"123@abyz["_s << true << false;
+ QTest::addRow("only-lower-%02d", row++) << u"`abyz{"_s << true << false;
+ // MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A, ... E
+ QTest::addRow("only-lower-%02d", row++) << u"að™–a|bð™—b|cð™˜c|dð™™d|eð™še"_s << true << false;
+ // DESERET SMALL LETTER LONG I
+ QTest::addRow("only-lower-%02d", row++) << u"ð¨"_s << true << false;
// uppercase letters, not foldable
- QTest::addRow("only-lower-%02d", row++) << QString("textð—”text") << true << false; // MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+ // MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+ QTest::addRow("only-lower-%02d", row++) << u"textð—”text"_s << true << false;
row = 0;
- QTest::addRow("only-upper-%02d", row++) << QString("TEXT") << false << true;
- QTest::addRow("only-upper-%02d", row++) << QString("ÀAA") << false << true;
- QTest::addRow("only-upper-%02d", row++) << QString("ØÆẞ") << false << true;
- QTest::addRow("only-upper-%02d", row++) << QString("TEXT ") << false << true;
- QTest::addRow("only-upper-%02d", row++) << QString(" TEXT") << false << true;
- QTest::addRow("only-upper-%02d", row++) << QString("HELLO, WORLD!") << false << true;
- QTest::addRow("only-upper-%02d", row++) << QString("123@ABYZ[") << false << true;
- QTest::addRow("only-upper-%02d", row++) << QString("`ABYZ{") << false << true;
- QTest::addRow("only-upper-%02d", row++) << QString("Að€A|BðB|Cð‚C|DðƒD|Eð„E") << false << true; // MATHEMATICAL BOLD CAPITAL A, ... E
- QTest::addRow("only-upper-%02d", row++) << QString("ð€") << false << true; // DESERET CAPITAL LETTER LONG I
+ QTest::addRow("only-upper-%02d", row++) << u"TEXT"_s << false << true;
+ QTest::addRow("only-upper-%02d", row++) << u"ÀAA"_s << false << true;
+ QTest::addRow("only-upper-%02d", row++) << u"ØÆẞ"_s << false << true;
+ QTest::addRow("only-upper-%02d", row++) << u"TEXT "_s << false << true;
+ QTest::addRow("only-upper-%02d", row++) << u" TEXT"_s << false << true;
+ QTest::addRow("only-upper-%02d", row++) << u"HELLO, WORLD!"_s << false << true;
+ QTest::addRow("only-upper-%02d", row++) << u"123@ABYZ["_s << false << true;
+ QTest::addRow("only-upper-%02d", row++) << u"`ABYZ{"_s << false << true;
+ // MATHEMATICAL BOLD CAPITAL A, ... E
+ QTest::addRow("only-upper-%02d", row++) << u"Að€A|BðB|Cð‚C|DðƒD|Eð„E"_s << false << true;
+ // DESERET CAPITAL LETTER LONG I
+ QTest::addRow("only-upper-%02d", row++) << u"ð€"_s << false << true;
// lowercase letters, not foldable
- QTest::addRow("only-upper-%02d", row++) << QString("TEXTðšŠTEXT") << false << true; // MATHEMATICAL MONOSPACE SMALL A
+ // MATHEMATICAL MONOSPACE SMALL A
+ QTest::addRow("only-upper-%02d", row++) << u"TEXTðšŠTEXT"_s << false << true;
row = 0;
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("Text") << false << false;
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("tExt") << false << false;
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("teXt") << false << false;
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("texT") << false << false;
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("TExt") << false << false;
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("teXT") << false << false;
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("tEXt") << false << false;
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("tExT") << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"Text"_s << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"tExt"_s << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"teXt"_s << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"texT"_s << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"TExt"_s << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"teXT"_s << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"tEXt"_s << false << false;
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"tExT"_s << false << false;
// not foldable
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("TEXTðšŠtext") << false << false; // MATHEMATICAL MONOSPACE SMALL A
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("textð—”TEXT") << false << false; // MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+ // MATHEMATICAL MONOSPACE SMALL A
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"TEXTðšŠtext"_s << false << false;
+ // MATHEMATICAL SANS-SERIF BOLD CAPITAL A
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"textð—”TEXT"_s << false << false;
// titlecase, foldable
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("abcLjdef") << false << false; // LATIN CAPITAL LETTER L WITH SMALL LETTER J
- QTest::addRow("not-lower-nor-upper-%02d", row++) << QString("ABCLjDEF") << false << false; // LATIN CAPITAL LETTER L WITH SMALL LETTER J
+ // LATIN CAPITAL LETTER L WITH SMALL LETTER J
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"abcLjdef"_s << false << false;
+ // LATIN CAPITAL LETTER L WITH SMALL LETTER J
+ QTest::addRow("not-lower-nor-upper-%02d", row++) << u"ABCLjDEF"_s << false << false;
}
void tst_QString::isLower_isUpper()
@@ -2435,10 +2950,12 @@ void tst_QString::isLower_isUpper()
QFETCH(bool, isUpper);
QCOMPARE(string.isLower(), isLower);
+ QCOMPARE(QStringView(string).isLower(), isLower);
QCOMPARE(string.toLower() == string, isLower);
QVERIFY(string.toLower().isLower());
QCOMPARE(string.isUpper(), isUpper);
+ QCOMPARE(QStringView(string).isUpper(), isUpper);
QCOMPARE(string.toUpper() == string, isUpper);
QVERIFY(string.toUpper().isUpper());
}
@@ -2448,21 +2965,23 @@ void tst_QString::toCaseFolded()
const QString s;
QCOMPARE( s.toCaseFolded(), QString() ); // lvalue
QCOMPARE( QString().toCaseFolded(), QString() ); // rvalue
- QCOMPARE( QString("").toCaseFolded(), QString("") );
- QCOMPARE( QString("text").toCaseFolded(), QString("text") );
- QCOMPARE( QString("Text").toCaseFolded(), QString("text") );
- QCOMPARE( QString("tExt").toCaseFolded(), QString("text") );
- QCOMPARE( QString("teXt").toCaseFolded(), QString("text") );
- QCOMPARE( QString("texT").toCaseFolded(), QString("text") );
- QCOMPARE( QString("TExt").toCaseFolded(), QString("text") );
- QCOMPARE( QString("teXT").toCaseFolded(), QString("text") );
- QCOMPARE( QString("tEXt").toCaseFolded(), QString("text") );
- QCOMPARE( QString("tExT").toCaseFolded(), QString("text") );
- QCOMPARE( QString("TEXT").toCaseFolded(), QString("text") );
- QCOMPARE( QString("@ABYZ[").toCaseFolded(), QString("@abyz["));
- QCOMPARE( QString("@abyz[").toCaseFolded(), QString("@abyz["));
- QCOMPARE( QString("`ABYZ{").toCaseFolded(), QString("`abyz{"));
- QCOMPARE( QString("`abyz{").toCaseFolded(), QString("`abyz{"));
+ QCOMPARE(QString(u""_s).toCaseFolded(), u"");
+
+ const QString lowerText(u"text"_s);
+ QCOMPARE(lowerText.toCaseFolded(), lowerText);
+ QCOMPARE(QString(u"Text"_s).toCaseFolded(), lowerText);
+ QCOMPARE(QString(u"tExt"_s).toCaseFolded(), lowerText);
+ QCOMPARE(QString(u"teXt"_s).toCaseFolded(), lowerText);
+ QCOMPARE(QString(u"texT"_s).toCaseFolded(), lowerText);
+ QCOMPARE(QString(u"TExt"_s).toCaseFolded(), lowerText);
+ QCOMPARE(QString(u"teXT"_s).toCaseFolded(), lowerText);
+ QCOMPARE(QString(u"tEXt"_s).toCaseFolded(), lowerText);
+ QCOMPARE(QString(u"tExT"_s).toCaseFolded(), lowerText);
+ QCOMPARE(QString(u"TEXT"_s).toCaseFolded(), lowerText);
+ QCOMPARE(QString(u"@ABYZ["_s).toCaseFolded(), u"@abyz[");
+ QCOMPARE(QString(u"@abyz["_s).toCaseFolded(), u"@abyz[");
+ QCOMPARE(QString(u"`ABYZ{"_s).toCaseFolded(), u"`abyz{");
+ QCOMPARE(QString(u"`abyz{"_s).toCaseFolded(), u"`abyz{");
QCOMPARE( QString(1, QChar(0xa77d)).toCaseFolded(), QString(1, QChar(0x1d79)));
QCOMPARE( QString(1, QChar(0xa78d)).toCaseFolded(), QString(1, QChar(0x0265)));
@@ -2494,36 +3013,43 @@ void tst_QString::toCaseFolded()
for (int i = 0; i < 65536; ++i) {
QString str(1, QChar(i));
QString lower = str.toCaseFolded();
- QVERIFY(lower.length() >= 1);
- if (lower.length() == 1)
+ QVERIFY(lower.size() >= 1);
+ if (lower.size() == 1)
QVERIFY(str.toCaseFolded() == QString(1, QChar(i).toCaseFolded()));
}
}
-void tst_QString::trimmed()
+void tst_QString::trimmed_data()
{
- QString a;
+ QTest::addColumn<QString>("full" );
+ QTest::addColumn<QString>("trimmed" );
- QVERIFY(a.trimmed().isNull()); // lvalue
- QVERIFY(QString().trimmed().isNull()); // rvalue
- QVERIFY(!a.isDetached());
+ QTest::addRow("null") << QString() << QString();
+ QTest::addRow("simple") << u"Text"_s << u"Text"_s;
+ QTest::addRow("single-space") << u" "_s << u""_s;
+ QTest::addRow("single-char") << u" a "_s << u"a"_s;
+ QTest::addRow("mixed") << u" a \t\n\v b "_s << u"a \t\n\v b"_s;
+}
- a="Text";
- QCOMPARE(a, QLatin1String("Text"));
- QCOMPARE(a.trimmed(), QLatin1String("Text"));
- QCOMPARE(a, QLatin1String("Text"));
- a=" ";
- QCOMPARE(a.trimmed(), QLatin1String(""));
- QCOMPARE(a, QLatin1String(" "));
- a=" a ";
- QCOMPARE(a.trimmed(), QLatin1String("a"));
+void tst_QString::trimmed()
+{
+ QFETCH(QString, full);
+ QFETCH(QString, trimmed);
- a="Text";
- QCOMPARE(std::move(a).trimmed(), QLatin1String("Text"));
- a=" ";
- QCOMPARE(std::move(a).trimmed(), QLatin1String(""));
- a=" a ";
- QCOMPARE(std::move(a).trimmed(), QLatin1String("a"));
+ // Shared
+ if (!full.isNull())
+ QVERIFY(!full.isDetached());
+ QCOMPARE(full.trimmed(), trimmed); // lvalue
+ QCOMPARE(QString(full).trimmed(), trimmed); // rvalue
+ QCOMPARE(full.isNull(), trimmed.isNull());
+
+ // Not shared
+ full = QStringView(full).toString();
+ if (!full.isNull())
+ QVERIFY(full.isDetached());
+ QCOMPARE(full.trimmed(), trimmed); // lvalue
+ QCOMPARE(QString(full).trimmed(), trimmed); // rvalue
+ QCOMPARE(full.isNull(), trimmed.isNull());
}
void tst_QString::simplified_data()
@@ -2568,9 +3094,9 @@ void tst_QString::simplified()
QString result = full.simplified();
if (simple.isNull()) {
- QVERIFY2(result.isNull(), qPrintable("'" + full + "' did not yield null: " + result));
+ QVERIFY2(result.isNull(), qPrintable("'"_L1 + full + "' did not yield null: "_L1 + result));
} else if (simple.isEmpty()) {
- QVERIFY2(result.isEmpty() && !result.isNull(), qPrintable("'" + full + "' did not yield empty: " + result));
+ QVERIFY2(result.isEmpty() && !result.isNull(), qPrintable("'"_L1 + full + "' did not yield empty: "_L1 + result));
} else {
QCOMPARE(result, simple);
}
@@ -2587,26 +3113,33 @@ void tst_QString::simplified()
QCOMPARE(std::move(full).simplified(), simple);
}
-void tst_QString::insert_data(bool emptyIsNoop)
+void tst_QString::insert_data(DataOptions options)
{
QTest::addColumn<QString>("s");
QTest::addColumn<CharStarContainer>("arg");
QTest::addColumn<int>("a1");
QTest::addColumn<QString>("expected");
+ const bool emptyIsNoop = options.testFlag(EmptyIsNoop);
+
const CharStarContainer nullC;
const CharStarContainer emptyC("");
const CharStarContainer aC("a");
const CharStarContainer bC("b");
//const CharStarContainer abC("ab");
const CharStarContainer baC("ba");
+ const CharStarContainer yumlautC(options.testFlag(Latin1Encoded) ? "\xff" : "\xc3\xbf");
const QString null;
- const QString empty("");
- const QString a("a");
- const QString b("b");
- const QString ab("ab");
- const QString ba("ba");
+ const QString empty(u""_s);
+ const QString a(u'a');
+ const QString b(u'b');
+ const QString ab(u"ab"_s);
+ const QString ba(u"ba"_s);
+
+ const QString yumlaut = QStringLiteral("\u00ff"); // LATIN LETTER SMALL Y WITH UMLAUT
+ const QString yumlautA = QStringLiteral("\u00ffa");
+ const QString aYumlaut = QStringLiteral("a\u00ff");
QTest::newRow("null.insert(0, null)") << null << nullC << 0 << null;
QTest::newRow("null.insert(0, empty)") << null << emptyC << 0 << (emptyIsNoop ? null : empty);
@@ -2624,97 +3157,261 @@ void tst_QString::insert_data(bool emptyIsNoop)
QTest::newRow("a.insert(1, ba)") << a << baC << 1 << (a + ba);
QTest::newRow("ba.insert(1, a)") << ba << aC << 1 << (ba + a);
QTest::newRow("ba.insert(2, b)") << ba << bC << 2 << (ba + b);
+ QTest::newRow("ba.insert(10, b)") << ba << bC << 10 << (ba + QString(10 - ba.size(), u' ') + b);
+
+ QTest::newRow("null-insert-0-yumlaut") << null << yumlautC << 0 << yumlaut;
+ QTest::newRow("empty-insert-0-yumlaut") << empty << yumlautC << 0 << yumlaut;
+ QTest::newRow("yumlaut-insert-0-null") << yumlaut << nullC << 0 << yumlaut;
+ QTest::newRow("yumlaut-insert-0-empty") << yumlaut << emptyC << 0 << yumlaut;
+ QTest::newRow("a-insert-0-yumlaut") << a << yumlautC << 0 << yumlautA;
+ QTest::newRow("a-insert-1-yumlaut") << a << yumlautC << 1 << aYumlaut;
+
+ if (!options.testFlag(Latin1Encoded)) {
+ const auto smallTheta = QStringLiteral("\u03b8"); // GREEK LETTER SMALL THETA
+ const auto ssa = QStringLiteral("\u0937"); // DEVANAGARI LETTER SSA
+ const auto chakmaZero = QStringLiteral("\U00011136"); // CHAKMA DIGIT ZERO
+
+ const auto aSmallTheta = QStringLiteral("a\u03b8");
+ const auto aSsa = QStringLiteral("a\u0937");
+ const auto aChakmaZero = QStringLiteral("a\U00011136");
+
+ const auto smallThetaA = QStringLiteral("\u03b8a");
+ const auto ssaA = QStringLiteral("\u0937a");
+ const auto chakmaZeroA = QStringLiteral("\U00011136a");
+
+ const auto umlautTheta = QStringLiteral("\u00ff\u03b8");
+ const auto thetaUmlaut = QStringLiteral("\u03b8\u00ff");
+ const auto ssaChakma = QStringLiteral("\u0937\U00011136");
+ const auto chakmaSsa = QStringLiteral("\U00011136\u0937");
+
+ const CharStarContainer smallThetaC("\xce\xb8"); // non-Latin1
+ const CharStarContainer ssaC("\xe0\xa4\xb7"); // Higher BMP
+ const CharStarContainer chakmaZeroC("\xf0\x91\x84\xb6"); // Non-BMP
+
+ QTest::newRow("null-insert-0-theta") << null << smallThetaC << 0 << smallTheta;
+ QTest::newRow("null-insert-0-ssa") << null << ssaC << 0 << ssa;
+ QTest::newRow("null-insert-0-chakma") << null << chakmaZeroC << 0 << chakmaZero;
+
+ QTest::newRow("empty-insert-0-theta") << empty << smallThetaC << 0 << smallTheta;
+ QTest::newRow("empty-insert-0-ssa") << empty << ssaC << 0 << ssa;
+ QTest::newRow("empty-insert-0-chakma") << empty << chakmaZeroC << 0 << chakmaZero;
+
+ QTest::newRow("theta-insert-0-null") << smallTheta << nullC << 0 << smallTheta;
+ QTest::newRow("ssa-insert-0-null") << ssa << nullC << 0 << ssa;
+ QTest::newRow("chakma-insert-0-null") << chakmaZero << nullC << 0 << chakmaZero;
+
+ QTest::newRow("theta-insert-0-empty") << smallTheta << emptyC << 0 << smallTheta;
+ QTest::newRow("ssa-insert-0-empty") << ssa << emptyC << 0 << ssa;
+ QTest::newRow("chakma-insert-0-empty") << chakmaZero << emptyC << 0 << chakmaZero;
+
+ QTest::newRow("a-insert-0-theta") << a << smallThetaC << 0 << smallThetaA;
+ QTest::newRow("a-insert-0-ssa") << a << ssaC << 0 << ssaA;
+ QTest::newRow("a-insert-0-chakma") << a << chakmaZeroC << 0 << chakmaZeroA;
+ QTest::newRow("yumlaut-insert-0-theta") << yumlaut << smallThetaC << 0 << thetaUmlaut;
+ QTest::newRow("theta-insert-0-yumlaut") << smallTheta << yumlautC << 0 << umlautTheta;
+ QTest::newRow("ssa-insert-0-chakma") << ssa << chakmaZeroC << 0 << chakmaSsa;
+ QTest::newRow("chakma-insert-0-ssa") << chakmaZero << ssaC << 0 << ssaChakma;
+
+ QTest::newRow("theta-insert-1-null") << smallTheta << nullC << 1 << smallTheta;
+ QTest::newRow("ssa-insert-1-null") << ssa << nullC << 1 << ssa;
+ QTest::newRow("chakma-insert-1-null") << chakmaZero << nullC << 1 << chakmaZero;
+
+ QTest::newRow("theta-insert-1-empty") << smallTheta << emptyC << 1 << smallTheta;
+ QTest::newRow("ssa-insert-1-empty") << ssa << emptyC << 1 << ssa;
+ QTest::newRow("chakma-insert-1-empty") << chakmaZero << emptyC << 1 << chakmaZero;
+
+ QTest::newRow("a-insert-1-theta") << a << smallThetaC << 1 << aSmallTheta;
+ QTest::newRow("a-insert-1-ssa") << a << ssaC << 1 << aSsa;
+ QTest::newRow("a-insert-1-chakma") << a << chakmaZeroC << 1 << aChakmaZero;
+ QTest::newRow("yumlaut-insert-1-theta") << yumlaut << smallThetaC << 1 << umlautTheta;
+ QTest::newRow("theta-insert-1-yumlaut") << smallTheta << yumlautC << 1 << thetaUmlaut;
+ QTest::newRow("ssa-insert-1-chakma") << ssa << chakmaZeroC << 1 << ssaChakma;
+ // Beware, this will insert ssa right into the middle of the chakma:
+ // Actual (s) : "\uD804\u0937\uDD36"
+ // Expected (expected): "\uD804\uDD36\u0937"
+ // QTest::newRow("chakma.insert(1, ssa)") << chakmaZero << ssaC << 1 << chakmaSsa;
+ }
}
void tst_QString::insert_special_cases()
{
QString a;
+ QString dummy_share;
- a = "Ys";
- QCOMPARE(a.insert(1,'e'), QString("Yes"));
- QCOMPARE(a.insert(3,'!'), QString("Yes!"));
- QCOMPARE(a.insert(5,'?'), QString("Yes! ?"));
- QCOMPARE(a.insert(-1,'a'), QString("Yes! a?"));
-
- a = "ABC";
- QCOMPARE(a.insert(5,"DEF"), QString("ABC DEF"));
+ {
+ // Test when string is not shared
+ a = u"Ys"_s;
+ QCOMPARE(a.insert(1, u'e'), u"Yes");
+ QCOMPARE(a.insert(3, u'!'), u"Yes!");
+ QCOMPARE(a.insert(5, u'?'), u"Yes! ?");
+ QCOMPARE(a.insert(-1, u'a'), u"Yes! a?");
+ }
+ {
+ // Test when string is shared
+ a = u"Ys"_s;
+ dummy_share = a;
+ QCOMPARE(a.insert(1, u'e'), u"Yes");
+ dummy_share = a;
+ QCOMPARE(a.insert(3, u'!'), u"Yes!");
+ dummy_share = a;
+ QCOMPARE(a.insert(5, u'?'), u"Yes! ?");
+ dummy_share = a;
+ QCOMPARE(a.insert(-1, u'a'), u"Yes! a?");
+ }
+
+ a = u"ABC"_s;
+ dummy_share = a;
+ QCOMPARE(dummy_share.insert(5, u"DEF"_s), u"ABC DEF"_s); // Shared
+ QCOMPARE(a.insert(5, u"DEF"_s), u"ABC DEF"_s); // Not shared after dummy_shared.insert()
- a = "ABC";
- QCOMPARE(a.insert(2, QString()), QString("ABC"));
- QCOMPARE(a.insert(0,"ABC"), QString("ABCABC"));
- QCOMPARE(a, QString("ABCABC"));
- QCOMPARE(a.insert(0,a), QString("ABCABCABCABC"));
+ {
+ // Test when string is not shared
+ a = u"ABC"_s;
+ QCOMPARE(a.insert(2, QString()), u"ABC");
+ QCOMPARE(a.insert(0, u"ABC"_s), u"ABCABC");
+ QCOMPARE(a, u"ABCABC");
+ QCOMPARE(a.insert(0, a), u"ABCABCABCABC");
- QCOMPARE(a, QString("ABCABCABCABC"));
- QCOMPARE(a.insert(0,'<'), QString("<ABCABCABCABC"));
- QCOMPARE(a.insert(1,'>'), QString("<>ABCABCABCABC"));
+ QCOMPARE(a, u"ABCABCABCABC");
+ QCOMPARE(a.insert(0, u'<'), u"<ABCABCABCABC");
+ QCOMPARE(a.insert(1, u'>'), u"<>ABCABCABCABC");
+ }
+ {
+ // Test when string is shared
+ a = u"ABC"_s;
+ dummy_share = a;
+ QCOMPARE(a.insert(2, QString()), u"ABC");
+ dummy_share = a;
+ QCOMPARE(a.insert(0, u"ABC"_s), u"ABCABC");
+ dummy_share = a;
+ QCOMPARE(a, u"ABCABC");
+ dummy_share = a;
+ QCOMPARE(a.insert(0, a), u"ABCABCABCABC");
+
+ QCOMPARE(a, u"ABCABCABCABC");
+ dummy_share = a;
+ QCOMPARE(a.insert(0, u'<'), u"<ABCABCABCABC");
+ dummy_share = a;
+ QCOMPARE(a.insert(1, u'>'), u"<>ABCABCABCABC");
+ }
- a = "Meal";
const QString montreal = QStringLiteral("Montreal");
- QCOMPARE(a.insert(1, QLatin1String("ontr")), montreal);
- QCOMPARE(a.insert(4, ""), montreal);
- QCOMPARE(a.insert(3, QLatin1String("")), montreal);
- QCOMPARE(a.insert(3, QLatin1String(0)), montreal);
- QCOMPARE(a.insert(3, static_cast<const char *>(0)), montreal);
- QCOMPARE(a.insert(0, QLatin1String("a")), QLatin1String("aMontreal"));
-
- a = "Mont";
- QCOMPARE(a.insert(a.size(), QLatin1String("real")), montreal);
- QCOMPARE(a.insert(a.size() + 1, QLatin1String("ABC")), QString("Montreal ABC"));
-
- a = "AEF";
- QCOMPARE(a.insert(1, QLatin1String("BCD")), QString("ABCDEF"));
- QCOMPARE(a.insert(3, QLatin1String("-")), QString("ABC-DEF"));
- QCOMPARE(a.insert(a.size() + 1, QLatin1String("XYZ")), QString("ABC-DEF XYZ"));
+ {
+ // Test when string is not shared
+ a = u"Meal"_s;
+ QCOMPARE(a.insert(1, "ontr"_L1), montreal);
+ QCOMPARE(a.insert(4, ""_L1), montreal);
+ QCOMPARE(a.insert(3, ""_L1), montreal);
+ QCOMPARE(a.insert(3, QLatin1String(nullptr)), montreal);
+#ifndef QT_NO_CAST_FROM_ASCII
+ QCOMPARE(a.insert(3, static_cast<const char *>(0)), montreal);
+#endif
+ QCOMPARE(a.insert(0, u"a"_s), "aMontreal"_L1);
+ }
+ {
+ // Test when string is shared
+ a = u"Meal"_s;
+ dummy_share = a;
+ QCOMPARE(a.insert(1, "ontr"_L1), montreal);
+ dummy_share = a;
+ QCOMPARE(a.insert(4, ""_L1), montreal);
+ dummy_share = a;
+ QCOMPARE(a.insert(3, ""_L1), montreal);
+ dummy_share = a;
+ QCOMPARE(a.insert(3, QLatin1String(nullptr)), montreal);
+ dummy_share = a;
+ QCOMPARE(a.insert(3, QLatin1String(static_cast<const char *>(0))), montreal);
+ dummy_share = a;
+ QCOMPARE(a.insert(0, u"a"_s), "aMontreal"_L1);
+ }
{
- a = "one";
- a.prepend(u'a');
- QString b(a.data_ptr()->freeSpaceAtEnd(), u'b');
- QCOMPARE(a.insert(a.size() + 1, QLatin1String(b.toLatin1())), QString("aone ") + b);
+ // Test when string is not shared
+ a = u"Mont"_s;
+ QCOMPARE(a.insert(a.size(), "real"_L1), montreal);
+ QCOMPARE(a.insert(a.size() + 1, "ABC"_L1), u"Montreal ABC");
+ }
+ {
+ // Test when string is shared
+ a = u"Mont"_s;
+ dummy_share = a;
+ QCOMPARE(a.insert(a.size(), "real"_L1), montreal);
+ dummy_share = a;
+ QCOMPARE(a.insert(a.size() + 1, "ABC"_L1), u"Montreal ABC");
}
{
- a = "onetwothree";
- while (a.size() - 1)
- a.remove(0, 1);
- QString b(a.data_ptr()->freeSpaceAtEnd() + 1, u'b');
- QCOMPARE(a.insert(a.size() + 1, QLatin1String(b.toLatin1())), QString("e ") + b);
+ // Test when string is not shared
+ a = u"AEF"_s;
+ QCOMPARE(a.insert(1, "BCD"_L1), u"ABCDEF");
+ QCOMPARE(a.insert(3, "-"_L1), u"ABC-DEF");
+ QCOMPARE(a.insert(a.size() + 1, "XYZ"_L1), u"ABC-DEF XYZ");
}
{
- a = "one";
+ // Test when string is shared
+ a = u"AEF"_s;
+ dummy_share = a ;
+ QCOMPARE(a.insert(1, "BCD"_L1), u"ABCDEF");
+ dummy_share = a ;
+ QCOMPARE(a.insert(3, "-"_L1), u"ABC-DEF");
+ dummy_share = a ;
+ QCOMPARE(a.insert(a.size() + 1, "XYZ"_L1), u"ABC-DEF XYZ");
+ }
+
+
+ {
+ a = u"one"_s;
+ a.prepend(u'a');
+ QString b(a.data_ptr()->freeSpaceAtEnd(), u'b');
+ QCOMPARE(a.insert(a.size() + 1, QLatin1String(b.toLatin1())), u"aone "_s + b);
+ }
+ {
+ a = u"one"_s;
a.prepend(u'a');
QString b(a.data_ptr()->freeSpaceAtEnd(), u'b');
- QCOMPARE(a.insert(a.size() + 1, b), QString("aone ") + b);
+ QCOMPARE(a.insert(a.size() + 1, b), u"aone "_s + b);
}
{
- a = "onetwothree";
+ a = u"onetwothree"_s;
+ while (a.size() - 1)
+ a.remove(0, 1);
+ QString b(a.data_ptr()->freeSpaceAtEnd() + 1, u'b');
+ QCOMPARE(a.insert(a.size() + 1, QLatin1String(b.toLatin1())), u"e "_s + b);
+ }
+ {
+ a = u"onetwothree"_s;
while (a.size() - 1)
a.remove(0, 1);
QString b(a.data_ptr()->freeSpaceAtEnd() + 1, u'b');
- QCOMPARE(a.insert(a.size() + 1, b), QString("e ") + b);
+ QCOMPARE(a.insert(a.size() + 1, b), u"e "_s + b);
}
}
-void tst_QString::append_data(bool emptyIsNoop)
+void tst_QString::append_data(DataOptions options)
{
QTest::addColumn<QString>("s");
QTest::addColumn<CharStarContainer>("arg");
QTest::addColumn<QString>("expected");
+ const bool emptyIsNoop = options.testFlag(EmptyIsNoop);
+
const CharStarContainer nullC;
const CharStarContainer emptyC("");
const CharStarContainer aC("a");
const CharStarContainer bC("b");
//const CharStarContainer abC("ab");
+ const CharStarContainer yumlautC(options.testFlag(Latin1Encoded) ? "\xff" : "\xc3\xbf");
const QString null;
- const QString empty("");
- const QString a("a");
+ const QString empty(u""_s);
+ const QString a(u"a"_s);
//const QString b("b");
- const QString ab("ab");
+ const QString ab(u"ab"_s);
+
+ const QString yumlaut = QStringLiteral("\u00ff"); // LATIN LETTER SMALL Y WITH UMLAUT
+ const QString aYumlaut = QStringLiteral("a\u00ff");
QTest::newRow("null + null") << null << nullC << null;
QTest::newRow("null + empty") << null << emptyC << (emptyIsNoop ? null : empty);
@@ -2725,19 +3422,79 @@ void tst_QString::append_data(bool emptyIsNoop)
QTest::newRow("a + null") << a << nullC << a;
QTest::newRow("a + empty") << a << emptyC << a;
QTest::newRow("a + b") << a << bC << ab;
+
+ QTest::newRow("null+yumlaut") << null << yumlautC << yumlaut;
+ QTest::newRow("empty+yumlaut") << empty << yumlautC << yumlaut;
+ QTest::newRow("a+yumlaut") << a << yumlautC << aYumlaut;
+
+ if (!options.testFlag(Latin1Encoded)) {
+ const auto smallTheta = QStringLiteral("\u03b8"); // GREEK LETTER SMALL THETA
+ const auto ssa = QStringLiteral("\u0937"); // DEVANAGARI LETTER SSA
+ const auto chakmaZero = QStringLiteral("\U00011136"); // CHAKMA DIGIT ZERO
+
+ const auto aSmallTheta = QStringLiteral("a\u03b8");
+ const auto aSsa = QStringLiteral("a\u0937");
+ const auto aChakmaZero = QStringLiteral("a\U00011136");
+
+ const auto thetaChakma = QStringLiteral("\u03b8\U00011136");
+ const auto chakmaTheta = QStringLiteral("\U00011136\u03b8");
+ const auto ssaTheta = QStringLiteral("\u0937\u03b8");
+ const auto thetaSsa = QStringLiteral("\u03b8\u0937");
+ const auto ssaChakma = QStringLiteral("\u0937\U00011136");
+ const auto chakmaSsa = QStringLiteral("\U00011136\u0937");
+ const auto thetaUmlaut = QStringLiteral("\u03b8\u00ff");
+ const auto umlautTheta = QStringLiteral("\u00ff\u03b8");
+ const auto ssaUmlaut = QStringLiteral("\u0937\u00ff");
+ const auto umlautSsa = QStringLiteral("\u00ff\u0937");
+ const auto chakmaUmlaut = QStringLiteral("\U00011136\u00ff");
+ const auto umlautChakma = QStringLiteral("\u00ff\U00011136");
+
+ const CharStarContainer smallThetaC("\xce\xb8"); // non-Latin1
+ const CharStarContainer ssaC("\xe0\xa4\xb7"); // Higher BMP
+ const CharStarContainer chakmaZeroC("\xf0\x91\x84\xb6"); // Non-BMP
+
+ QTest::newRow("null+smallTheta") << null << smallThetaC << smallTheta;
+ QTest::newRow("empty+smallTheta") << empty << smallThetaC << smallTheta;
+ QTest::newRow("a+smallTheta") << a << smallThetaC << aSmallTheta;
+
+ QTest::newRow("null+ssa") << null << ssaC << ssa;
+ QTest::newRow("empty+ssa") << empty << ssaC << ssa;
+ QTest::newRow("a+ssa") << a << ssaC << aSsa;
+
+ QTest::newRow("null+chakma") << null << chakmaZeroC << chakmaZero;
+ QTest::newRow("empty+chakma") << empty << chakmaZeroC << chakmaZero;
+ QTest::newRow("a+chakma") << a << chakmaZeroC << aChakmaZero;
+
+ QTest::newRow("smallTheta+chakma") << smallTheta << chakmaZeroC << thetaChakma;
+ QTest::newRow("chakma+smallTheta") << chakmaZero << smallThetaC << chakmaTheta;
+ QTest::newRow("smallTheta+ssa") << smallTheta << ssaC << thetaSsa;
+
+ QTest::newRow("ssa+smallTheta") << ssa << smallThetaC << ssaTheta;
+ QTest::newRow("ssa+chakma") << ssa << chakmaZeroC << ssaChakma;
+ QTest::newRow("chakma+ssa") << chakmaZero << ssaC << chakmaSsa;
+
+ QTest::newRow("smallTheta+yumlaut") << smallTheta << yumlautC << thetaUmlaut;
+ QTest::newRow("yumlaut+smallTheta") << yumlaut << smallThetaC << umlautTheta;
+ QTest::newRow("ssa+yumlaut") << ssa << yumlautC << ssaUmlaut;
+ QTest::newRow("yumlaut+ssa") << yumlaut << ssaC << umlautSsa;
+ QTest::newRow("chakma+yumlaut") << chakmaZero << yumlautC << chakmaUmlaut;
+ QTest::newRow("yumlaut+chakma") << yumlaut << chakmaZeroC << umlautChakma;
+ }
}
void tst_QString::append_special_cases()
{
{
+ static constexpr char16_t utf16[] = u"Hello, World!";
+ constexpr size_t len = std::char_traits<char16_t>::length(utf16);
+ const auto *unicode = reinterpret_cast<const QChar *>(utf16);
QString a;
- static const QChar unicode[] = { 'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!' };
- a.append(unicode, sizeof unicode / sizeof *unicode);
+ a.append(unicode, len);
QCOMPARE(a, QLatin1String("Hello, World!"));
- static const QChar nl('\n');
+ static const QChar nl(u'\n');
a.append(&nl, 1);
QCOMPARE(a, QLatin1String("Hello, World!\n"));
- a.append(unicode, sizeof unicode / sizeof *unicode);
+ a.append(unicode, len);
QCOMPARE(a, QLatin1String("Hello, World!\nHello, World!"));
a.append(unicode, 0); // no-op
QCOMPARE(a, QLatin1String("Hello, World!\nHello, World!"));
@@ -2757,49 +3514,49 @@ void tst_QString::append_special_cases()
}
{
- QString a = "one";
+ QString a = u"one"_s;
a.prepend(u'a');
QString b(a.data_ptr()->freeSpaceAtEnd(), u'b');
- QCOMPARE(a.append(QLatin1String(b.toLatin1())), QString("aone") + b);
+ QCOMPARE(a.append(QLatin1String(b.toLatin1())), u"aone"_s + b);
}
{
- QString a = "onetwothree";
+ QString a = u"onetwothree"_s;
while (a.size() - 1)
a.remove(0, 1);
QString b(a.data_ptr()->freeSpaceAtEnd(), u'b');
- QCOMPARE(a.append(QLatin1String(b.toLatin1())), QString("e") + b);
+ QCOMPARE(a.append(QLatin1String(b.toLatin1())), u'e' + b);
}
{
- QString a = "one";
+ QString a = u"one"_s;
a.prepend(u'a');
QString b(a.data_ptr()->freeSpaceAtEnd(), u'b');
- QCOMPARE(a.append(b), QString("aone") + b);
+ QCOMPARE(a.append(b), u"aone"_s + b);
}
{
- QString a = "onetwothree";
+ QString a = u"onetwothree"_s;
while (a.size() - 1)
a.remove(0, 1);
QString b(a.data_ptr()->freeSpaceAtEnd() + 1, u'b');
- QCOMPARE(a.append(b), QString("e") + b);
+ QCOMPARE(a.append(b), u'e' + b);
}
{
- QString a = "one";
+ QString a = u"one"_s;
a.prepend(u'a');
- QCOMPARE(a.append(u'b'), QString("aoneb"));
+ QCOMPARE(a.append(u'b'), u"aoneb");
}
{
- QString a = "onetwothree";
- while (a.size() - 1)
- a.remove(0, 1);
- QCOMPARE(a.append(u'b'), QString("eb"));
+ QString a = u"onetwothree"_s;
+ a.erase(a.cbegin(), std::prev(a.cend()));
+ QCOMPARE(a.append(u'b'), u"eb");
}
}
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void tst_QString::append_bytearray_special_cases_data()
{
QTest::addColumn<QString>("str" );
@@ -2814,20 +3571,20 @@ void tst_QString::append_bytearray_special_cases_data()
// no 0 termination
ba.resize( 4 );
- QTest::newRow( "notTerminated_0" ) << QString() << ba << QString("abcd");
- QTest::newRow( "notTerminated_1" ) << QString("") << ba << QString("abcd");
- QTest::newRow( "notTerminated_2" ) << QString("foobar ") << ba << QString("foobar abcd");
+ QTest::newRow( "notTerminated_0" ) << QString() << ba << u"abcd"_s;
+ QTest::newRow( "notTerminated_1" ) << u""_s << ba << u"abcd"_s;
+ QTest::newRow( "notTerminated_2" ) << u"foobar "_s << ba << u"foobar abcd"_s;
// byte array with only a 0
ba.resize( 1 );
ba[0] = 0;
QByteArray ba2("foobar ");
ba2.append('\0');
- QTest::newRow( "emptyString" ) << QString("foobar ") << ba << QString(ba2);
+ QTest::newRow( "emptyString" ) << u"foobar "_s << ba << QString(ba2);
// empty byte array
ba.resize( 0 );
- QTest::newRow( "emptyByteArray" ) << QString("foobar ") << ba << QString("foobar ");
+ QTest::newRow( "emptyByteArray" ) << u"foobar "_s << ba << u"foobar "_s;
// non-ascii byte array
QTest::newRow( "nonAsciiByteArray") << QString() << QByteArray("\xc3\xa9") << QString("\xc3\xa9");
@@ -2854,30 +3611,340 @@ void tst_QString::append_bytearray_special_cases()
}
QFETCH( QByteArray, ba );
- if (!ba.contains('\0') && ba.constData()[ba.length()] == '\0') {
+ if (!ba.contains('\0') && ba.constData()[ba.size()] == '\0') {
QFETCH( QString, str );
str.append(ba.constData());
QTEST( str, "res" );
}
}
+#endif // !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
-void tst_QString::operator_pluseq_special_cases()
+void tst_QString::appendFromRawData()
{
+ const char16_t utf[] = u"Hello World!";
+ auto *rawData = reinterpret_cast<const QChar *>(utf);
+ QString str = QString::fromRawData(rawData, std::size(utf) - 1);
+
+ QString copy;
+ copy.append(str);
+ QCOMPARE(copy, str);
+ // We make an _actual_ copy, because appending a byte array
+ // created with fromRawData() might be optimized to copy the DataPointer,
+ // which means we may point to temporary stack data.
+ QCOMPARE_NE((void *)copy.constData(), (void *)str.constData());
+}
+
+void tst_QString::assign()
+{
+ // QString &assign(QAnyStringView)
{
- QString a;
- a += QChar::CarriageReturn;
- a += '\r';
- a += u'\x1111';
- QCOMPARE(a, QStringView(u"\r\r\x1111"));
+ QString str;
+ QCOMPARE(str.assign("data"), u"data");
+ QCOMPARE(str.size(), 4);
+ QCOMPARE(str.assign(u8"data\0data"), u"data\0data");
+ QCOMPARE(str.size(), 4);
+ QCOMPARE(str.assign(u"\0data\0data"), u"\0data\0data");
+ QCOMPARE(str.size(), 0);
+ QCOMPARE(str.assign(QAnyStringView("data\0")), u"data\0");
+ QCOMPARE(str.size(), 4);
+ QCOMPARE(str.assign(QStringView(u"(ノಠ益ಠ)ノ彡┻â”â”»\0")), u"(ノಠ益ಠ)ノ彡┻â”â”»\0");
+ QCOMPARE(str.size(), 11);
+ QCOMPARE(str.assign(QUtf8StringView(u8"Ù©(âŽâ›á´—â›âŽ)Û¶")), u"Ù©(âŽâ›á´—â›âŽ)Û¶");
+ QCOMPARE(str.size(), 9);
+ QCOMPARE(str.assign(QLatin1String("datadata")), u"datadata");
+ QCOMPARE(str.size(), 8);
+ }
+ // QString &assign(qsizetype, char);
+ {
+ QString str;
+ QCOMPARE(str.assign(3, u'è'), u"èèè");
+ QCOMPARE(str.size(), 3);
+ QCOMPARE(str.assign(20, u'd').assign(2, u'á´—'), u"á´—á´—");
+ QCOMPARE(str.size(), 2);
+ QCOMPARE(str.assign(0, u'x').assign(5, QLatin1Char('d')), u"ddddd");
+ QCOMPARE(str.size(), 5);
+ QCOMPARE(str.assign(3, u'x'), u"xxx");
+ QCOMPARE(str.size(), 3);
+ }
+ // QString &assign(InputIterator, InputIterator)
+ {
+ // Forward iterator versions
+ QString str;
+ const QString tstr = QString::fromUtf8(u8"(ノಠ益ಠ)\0ノ彡┻â”â”»");
+ QCOMPARE(str.assign(tstr.begin(), tstr.end()), u"(ノಠ益ಠ)\0ノ彡┻â”â”»");
+ QCOMPARE(str.size(), 6);
+
+ auto oldCap = str.capacity();
+ str.assign(tstr.begin(), tstr.begin()); // empty range
+ QCOMPARE_EQ(str.capacity(), oldCap);
+ QCOMPARE_EQ(str.size(), 0);
+
+#ifndef QT_NO_CAST_FROM_ASCII
+ const char c8[] = "a©☻🂤"; // [1, 2, 3, 4] bytes in utf-8 code points
+ str.assign(std::begin(c8), std::end(c8) - 1);
+ QCOMPARE(str, c8);
+
+ std::string c8str(c8);
+ str.assign(c8str.begin(), c8str.end());
+ QCOMPARE(str, c8);
+ QCOMPARE(str.capacity(), qsizetype(std::size(c8) - 1));
+
+ oldCap = str.capacity();
+ str.assign(c8str.begin(), c8str.begin()); // empty range
+ QCOMPARE_EQ(str.capacity(), oldCap);
+ QCOMPARE_EQ(str.size(), 0);
+
+ std::forward_list<char> fwd(std::begin(c8), std::end(c8) - 1);
+ str.assign(fwd.begin(), fwd.end());
+ QCOMPARE(str, c8);
+#endif
+#ifdef __cpp_char8_t
+ const char8_t c8t[] = u8"🂤🂤🂤🂤🂤🂤🂤🂤🂤🂤"; // 10 x 4 bytes in utf-8 code points
+ str.assign(std::begin(c8t), std::end(c8t) - 1);
+ QCOMPARE(str, c8t);
+ QCOMPARE(str.size(), 20);
+#endif
+#ifdef __cpp_lib_char8_t
+ std::u8string c8tstr(c8t);
+ str.assign(c8tstr.begin(), c8tstr.end());
+ QCOMPARE(str, c8t);
+#endif
+
+ const char16_t c16[] = u"Ù©(âŽâ›á´—â›âŽ)Û¶ 🤷";
+ str.assign(std::begin(c16), std::end(c16) - 1);
+ QCOMPARE(str, c16);
+
+ std::u16string c16str(c16);
+ str.assign(c16str.begin(), c16str.end());
+ QCOMPARE(str, c16);
+
+ oldCap = str.capacity();
+ str.assign(c16str.begin(), c16str.begin()); // empty range
+ QCOMPARE_EQ(str.capacity(), oldCap);
+ QCOMPARE_EQ(str.size(), 0);
+
+ const char32_t c32[] = U"Ù©(âŽâ›á´—â›âŽ)Û¶ 🤷";
+ str.assign(std::begin(c32), std::end(c32) - 1);
+ QCOMPARE(str, c16);
+
+ std::u32string c32str(c32);
+ str.assign(c32str.begin(), c32str.end());
+ QCOMPARE(str, c16);
+
+ oldCap = str.capacity();
+ str.assign(c32str.begin(), c32str.begin()); // empty range
+ QCOMPARE_EQ(str.capacity(), oldCap);
+ QCOMPARE_EQ(str.size(), 0);
+
+ QVarLengthArray<QLatin1Char, 5> l1ch = {'F'_L1, 'G'_L1, 'H'_L1, 'I'_L1, 'J'_L1};
+ str.assign(l1ch.begin(), l1ch.end());
+ QCOMPARE(str, u"FGHIJ");
+ std::forward_list<QChar> qch = {u'G', u'H', u'I', u'J', u'K'};
+ str.assign(qch.begin(), qch.end());
+ QCOMPARE(str, u"GHIJK");
+ const QList<char16_t> qch16 = {u'X', u'H', u'I', u'J', u'K'}; // QList<T>::iterator need not be T*
+ str.assign(qch16.begin(), qch16.end());
+ QCOMPARE(str, u"XHIJK");
+#if defined(Q_OS_WIN)
+ QVarLengthArray<wchar_t> wch = {L'A', L'B', L'C', L'D', L'E'};
+ str.assign(wch.begin(), wch.end());
+ QCOMPARE(str, u"ABCDE");
+#endif
+ // Input iterator versions
+ std::stringstream ss("50 51 52 53 54");
+ str.assign(std::istream_iterator<ushort>{ss}, std::istream_iterator<ushort>{});
+ QCOMPARE(str, u"23456");
+
+ oldCap = str.capacity();
+ str.assign(std::istream_iterator<ushort>{}, std::istream_iterator<ushort>{}); // empty range
+ QCOMPARE_EQ(str.capacity(), oldCap);
+ QCOMPARE_EQ(str.size(), 0);
+
+#ifndef QT_NO_CAST_FROM_ASCII
+ str.resize(0);
+ str.squeeze();
+ str.reserve(5);
+ const char c8cmp[] = "🂤🂤a"; // 2 + 2 + 1 byte
+ ss.clear();
+ ss.str(c8cmp);
+ str.assign(std::istream_iterator<char>{ss}, std::istream_iterator<char>{});
+ QCOMPARE(str, c8cmp);
+ QCOMPARE(str.size(), 5);
+ QCOMPARE(str.capacity(), 5);
+
+ // 1 code-point + ill-formed sequence + 1 code-point.
+ const char c8IllFormed[] = "a\xe0\x9f\x80""a";
+ ss.clear();
+ ss.str(c8IllFormed);
+ str.assign(std::istream_iterator<char>{ss}, std::istream_iterator<char>{});
+ QEXPECT_FAIL("", "Iconsistent handling of ill-formed sequences, QTBUG-117051", Continue);
+ QCOMPARE_EQ(str, QString(c8IllFormed));
+
+ const char c82[] = "ÌşṫһíᶊśꞧɨℼṩuDF49ïľι?";
+ ss.clear();
+ ss.str(c82);
+ str.assign(std::istream_iterator<char>{ss}, std::istream_iterator<char>{});
+ QCOMPARE(str, c82);
+
+ const char uc8[] = "ẵƽð”°È‰ðšêž‘ð’¾ð¿ð•˜";
+ ss.clear();
+ ss.str(uc8);
+ str.assign(std::istream_iterator<uchar>{ss}, std::istream_iterator<uchar>{});
+ QCOMPARE(str, uc8);
+
+ ss.clear();
+ const char sc8[] = "ð“‡à¥™à¥µà¯µ";
+ ss.str(sc8);
+ str.assign(std::istream_iterator<signed char>{ss}, std::istream_iterator<signed char>{});
+ QCOMPARE(str, sc8);
+
+ oldCap = str.capacity();
+ str.assign(std::istream_iterator<signed char>{}, // empty range
+ std::istream_iterator<signed char>{});
+ QCOMPARE_EQ(str.capacity(), oldCap);
+ QCOMPARE_EQ(str.size(), 0);
+#endif
+ }
+ // Test chaining
+ {
+ QString str;
+ QString tstr = u"TEST DATA"_s;
+ str.assign(tstr.begin(), tstr.end()).assign({"Hello World!"}).assign(5, u'T');
+ QCOMPARE(str, u"TTTTT");
+ QCOMPARE(str.size(), 5);
+ QCOMPARE(str.assign(300, u'T').assign({"[̲̅$̲̅(̲̅5̲̅)̲̅$̲̅]"}), u"[̲̅$̲̅(̲̅5̲̅)̲̅$̲̅]");
+ QCOMPARE(str.size(), 19);
+ QCOMPARE(str.assign(10, u'c').assign(str.begin(), str.end()), str);
+ QCOMPARE(str.size(), 10);
+ QCOMPARE(str.assign("data").assign(QByteArrayView::fromArray(
+ {std::byte('T'), std::byte('T'), std::byte('T')})), u"TTT");
+ QCOMPARE(str.size(), 3);
+ QCOMPARE(str.assign("data").assign("\0data"), u"\0data");
+ QCOMPARE(str.size(), 0);
+ }
+}
+
+void tst_QString::assign_shared()
+{
+ {
+ QString str = "DATA"_L1;
+ QVERIFY(str.isDetached());
+ auto strCopy = str;
+ QVERIFY(!str.isDetached());
+ QVERIFY(!strCopy.isDetached());
+ QVERIFY(str.isSharedWith(strCopy));
+ QVERIFY(strCopy.isSharedWith(str));
+
+ str.assign(4, u'D');
+ QVERIFY(str.isDetached());
+ QVERIFY(strCopy.isDetached());
+ QVERIFY(!str.isSharedWith(strCopy));
+ QVERIFY(!strCopy.isSharedWith(str));
+ QCOMPARE(str, u"DDDD");
+ QCOMPARE(strCopy, u"DATA");
+ }
+ {
+ QString str = "DATA"_L1;
+ QVERIFY(str.isDetached());
+ auto copyForwardIt = str;
+ QVERIFY(!str.isDetached());
+ QVERIFY(!copyForwardIt.isDetached());
+ QVERIFY(str.isSharedWith(copyForwardIt));
+ QVERIFY(copyForwardIt.isSharedWith(str));
+
+ QString tstr = u"DDDD"_s;
+ str.assign(tstr.begin(), tstr.end());
+ QVERIFY(str.isDetached());
+ QVERIFY(copyForwardIt.isDetached());
+ QVERIFY(!str.isSharedWith(copyForwardIt));
+ QVERIFY(!copyForwardIt.isSharedWith(str));
+ QCOMPARE(str, u"DDDD");
+ QCOMPARE(copyForwardIt, u"DATA");
+ }
+ {
+ QString str = "DATA"_L1;
+ QVERIFY(str.isDetached());
+ auto copyInputIt = str;
+ QVERIFY(!str.isDetached());
+ QVERIFY(!copyInputIt.isDetached());
+ QVERIFY(str.isSharedWith(copyInputIt));
+ QVERIFY(copyInputIt.isSharedWith(str));
+
+ std::stringstream ss("49 50 51 52 53 54 ");
+ str.assign(std::istream_iterator<ushort>{ss}, std::istream_iterator<ushort>{});
+ QVERIFY(str.isDetached());
+ QVERIFY(copyInputIt.isDetached());
+ QVERIFY(!str.isSharedWith(copyInputIt));
+ QVERIFY(!copyInputIt.isSharedWith(str));
+
+ QCOMPARE(str, u"123456");
+ QCOMPARE(copyInputIt, u"DATA");
+ }
+}
+
+void tst_QString::assign_uses_prepend_buffer()
+{
+ const auto capBegin = [](const QString &s) {
+ return s.begin() - s.d.freeSpaceAtBegin();
+ };
+ const auto capEnd = [](const QString &s) {
+ return s.end() + s.d.freeSpaceAtEnd();
+ };
+ // QString &assign(QAnyStringView)
+ {
+ QString withFreeSpaceAtBegin;
+ for (int i = 0; i < 100 && withFreeSpaceAtBegin.d.freeSpaceAtBegin() < 2; ++i)
+ withFreeSpaceAtBegin.prepend(u'd');
+ QCOMPARE_GT(withFreeSpaceAtBegin.d.freeSpaceAtBegin(), 1);
+
+ const auto oldCapBegin = capBegin(withFreeSpaceAtBegin);
+ const auto oldCapEnd = capEnd(withFreeSpaceAtBegin);
+
+ QString test(withFreeSpaceAtBegin.d.freeSpaceAtBegin(), u'È');
+ withFreeSpaceAtBegin.assign(test);
+
+ QCOMPARE_EQ(withFreeSpaceAtBegin.d.freeSpaceAtBegin(), 0); // we used the prepend buffer
+ QCOMPARE_EQ(capBegin(withFreeSpaceAtBegin), oldCapBegin);
+ QCOMPARE_EQ(capEnd(withFreeSpaceAtBegin), oldCapEnd);
+ QCOMPARE(withFreeSpaceAtBegin, test);
+ }
+ // QString &assign(InputIterator, InputIterator)
+ {
+ QString withFreeSpaceAtBegin;
+ for (int i = 0; i < 100 && withFreeSpaceAtBegin.d.freeSpaceAtBegin() < 2; ++i)
+ withFreeSpaceAtBegin.prepend(u'd');
+ QCOMPARE_GT(withFreeSpaceAtBegin.d.freeSpaceAtBegin(), 1);
+
+ const auto oldCapBegin = capBegin(withFreeSpaceAtBegin);
+ const auto oldCapEnd = capEnd(withFreeSpaceAtBegin);
+
+ std::stringstream ss;
+ for (qsizetype i = 0; i < withFreeSpaceAtBegin.d.freeSpaceAtBegin(); ++i)
+ ss << "d ";
+
+ withFreeSpaceAtBegin.assign(std::istream_iterator<char>{ss}, std::istream_iterator<char>{});
+ QCOMPARE_EQ(withFreeSpaceAtBegin.d.freeSpaceAtBegin(), 0); // we used the prepend buffer
+ QCOMPARE_EQ(capBegin(withFreeSpaceAtBegin), oldCapBegin);
+ QCOMPARE_EQ(capEnd(withFreeSpaceAtBegin), oldCapEnd);
}
}
-void tst_QString::operator_pluseq_data(bool emptyIsNoop)
+void tst_QString::operator_pluseq_special_cases()
{
- append_data(emptyIsNoop);
+ QString a;
+ a += QChar::CarriageReturn;
+ a += u'\r';
+ a += u'\x1111';
+ QCOMPARE(a, u"\r\r\x1111");
}
+void tst_QString::operator_pluseq_data(DataOptions options)
+{
+ append_data(options);
+}
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void tst_QString::operator_pluseq_bytearray_special_cases_data()
{
append_bytearray_special_cases_data();
@@ -2903,7 +3970,7 @@ void tst_QString::operator_pluseq_bytearray_special_cases()
}
QFETCH( QByteArray, ba );
- if (!ba.contains('\0') && ba.constData()[ba.length()] == '\0') {
+ if (!ba.contains('\0') && ba.constData()[ba.size()] == '\0') {
QFETCH( QString, str );
str += ba.constData();
@@ -2924,39 +3991,68 @@ void tst_QString::operator_eqeq_bytearray()
QVERIFY(expected == src);
QVERIFY(!(expected != src));
- if (!src.contains('\0') && src.constData()[src.length()] == '\0') {
+ if (!src.contains('\0') && src.constData()[src.size()] == '\0') {
QVERIFY(expected == src.constData());
QVERIFY(!(expected != src.constData()));
}
}
+void tst_QString::operator_assign_symmetry()
+{
+ {
+ QString str("DATA");
+ str.operator=(QString());
+ QCOMPARE_EQ(str.capacity(), 0);
+ QVERIFY(str.isNull());
+ }
+ {
+ QString str("DATA");
+ str.operator=(QByteArray());
+ QCOMPARE_EQ(str.capacity(), 0);
+ QVERIFY(str.isNull());
+ }
+ {
+ QString str("DATA");
+ const char *data = nullptr;
+ str.operator=(data);
+ QCOMPARE_EQ(str.capacity(), 0);
+ QVERIFY(str.isNull());
+ }
+}
+#endif // !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
+
void tst_QString::swap()
{
- QString s1, s2;
- s1 = "s1";
- s2 = "s2";
+ QString s1 = QString::fromUtf8("s1");
+ QString s2 = QString::fromUtf8("s2");
s1.swap(s2);
QCOMPARE(s1,QLatin1String("s2"));
QCOMPARE(s2,QLatin1String("s1"));
}
-void tst_QString::prepend_data(bool emptyIsNoop)
+void tst_QString::prepend_data(DataOptions options)
{
QTest::addColumn<QString>("s");
QTest::addColumn<CharStarContainer>("arg");
QTest::addColumn<QString>("expected");
+ const bool emptyIsNoop = options.testFlag(EmptyIsNoop);
+
const CharStarContainer nullC;
const CharStarContainer emptyC("");
const CharStarContainer aC("a");
const CharStarContainer bC("b");
const CharStarContainer baC("ba");
+ const CharStarContainer yumlautC(options.testFlag(Latin1Encoded) ? "\xff" : "\xc3\xbf");
const QString null;
- const QString empty("");
- const QString a("a");
+ const QString empty(u""_s);
+ const QString a(u'a');
//const QString b("b");
- const QString ba("ba");
+ const QString ba(u"ba"_s);
+
+ const QString yumlaut = QStringLiteral("\u00ff"); // LATIN LETTER SMALL Y WITH UMLAUT
+ const QString yumlautA = QStringLiteral("\u00ffa");
QTest::newRow("null.prepend(null)") << null << nullC << null;
QTest::newRow("null.prepend(empty)") << null << emptyC << (emptyIsNoop ? null : empty);
@@ -2968,8 +4064,65 @@ void tst_QString::prepend_data(bool emptyIsNoop)
QTest::newRow("a.prepend(empty)") << a << emptyC << a;
QTest::newRow("a.prepend(b)") << a << bC << ba;
QTest::newRow("a.prepend(ba)") << a << baC << (ba + a);
-}
+ QTest::newRow("null-prepend-yumlaut") << null << yumlautC << yumlaut;
+ QTest::newRow("empty-prepend-yumlaut") << empty << yumlautC << yumlaut;
+ QTest::newRow("a-prepend-yumlaut") << a << yumlautC << yumlautA;
+
+ if (!options.testFlag(Latin1Encoded)) {
+ const auto smallTheta = QStringLiteral("\u03b8"); // GREEK LETTER SMALL THETA
+ const auto ssa = QStringLiteral("\u0937"); // DEVANAGARI LETTER SSA
+ const auto chakmaZero = QStringLiteral("\U00011136"); // CHAKMA DIGIT ZERO
+
+ const auto smallThetaA = QStringLiteral("\u03b8a");
+ const auto ssaA = QStringLiteral("\u0937a");
+ const auto chakmaZeroA = QStringLiteral("\U00011136a");
+
+ const auto thetaChakma = QStringLiteral("\u03b8\U00011136");
+ const auto chakmaTheta = QStringLiteral("\U00011136\u03b8");
+ const auto ssaTheta = QStringLiteral("\u0937\u03b8");
+ const auto thetaSsa = QStringLiteral("\u03b8\u0937");
+ const auto ssaChakma = QStringLiteral("\u0937\U00011136");
+ const auto chakmaSsa = QStringLiteral("\U00011136\u0937");
+ const auto thetaUmlaut = QStringLiteral("\u03b8\u00ff");
+ const auto umlautTheta = QStringLiteral("\u00ff\u03b8");
+ const auto ssaUmlaut = QStringLiteral("\u0937\u00ff");
+ const auto umlautSsa = QStringLiteral("\u00ff\u0937");
+ const auto chakmaUmlaut = QStringLiteral("\U00011136\u00ff");
+ const auto umlautChakma = QStringLiteral("\u00ff\U00011136");
+
+ const CharStarContainer smallThetaC("\xce\xb8"); // non-Latin1
+ const CharStarContainer ssaC("\xe0\xa4\xb7"); // Higher BMP
+ const CharStarContainer chakmaZeroC("\xf0\x91\x84\xb6"); // Non-BMP
+
+ QTest::newRow("null-prepend-smallTheta") << null << smallThetaC << smallTheta;
+ QTest::newRow("empty-prepend-smallTheta") << empty << smallThetaC << smallTheta;
+ QTest::newRow("a-prepend-smallTheta") << a << smallThetaC << smallThetaA;
+
+ QTest::newRow("null-prepend-ssa") << null << ssaC << ssa;
+ QTest::newRow("empty-prepend-ssa") << empty << ssaC << ssa;
+ QTest::newRow("a-prepend-ssa") << a << ssaC << ssaA;
+
+ QTest::newRow("null-prepend-chakma") << null << chakmaZeroC << chakmaZero;
+ QTest::newRow("empty-prepend-chakma") << empty << chakmaZeroC << chakmaZero;
+ QTest::newRow("a-prepend-chakma") << a << chakmaZeroC << chakmaZeroA;
+
+ QTest::newRow("smallTheta-prepend-chakma") << smallTheta << chakmaZeroC << chakmaTheta;
+ QTest::newRow("chakma-prepend-smallTheta") << chakmaZero << smallThetaC << thetaChakma;
+ QTest::newRow("smallTheta-prepend-ssa") << smallTheta << ssaC << ssaTheta;
+ QTest::newRow("ssa-prepend-smallTheta") << ssa << smallThetaC << thetaSsa;
+ QTest::newRow("ssa-prepend-chakma") << ssa << chakmaZeroC << chakmaSsa;
+ QTest::newRow("chakma-prepend-ssa") << chakmaZero << ssaC << ssaChakma;
+ QTest::newRow("smallTheta-prepend-yumlaut") << smallTheta << yumlautC << umlautTheta;
+ QTest::newRow("yumlaut-prepend-smallTheta") << yumlaut << smallThetaC << thetaUmlaut;
+ QTest::newRow("ssa-prepend-yumlaut") << ssa << yumlautC << umlautSsa;
+ QTest::newRow("yumlaut-prepend-ssa") << yumlaut << ssaC << ssaUmlaut;
+ QTest::newRow("chakma-prepend-yumlaut") << chakmaZero << yumlautC << umlautChakma;
+ QTest::newRow("yumlaut-prepend-chakma") << yumlaut << chakmaZeroC << chakmaUmlaut;
+ }
+}
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void tst_QString::prepend_bytearray_special_cases_data()
{
QTest::addColumn<QString>("str" );
@@ -2985,11 +4138,11 @@ void tst_QString::prepend_bytearray_special_cases_data()
// byte array with only a 0
ba.resize( 1 );
ba[0] = 0;
- QTest::newRow( "emptyString" ) << QString("foobar ") << ba << QStringView::fromArray(u"\0foobar ").chopped(1).toString();
+ QTest::newRow( "emptyString" ) << u"foobar "_s << ba << QStringView::fromArray(u"\0foobar ").chopped(1).toString();
// empty byte array
ba.resize( 0 );
- QTest::newRow( "emptyByteArray" ) << QString(" foobar") << ba << QString(" foobar");
+ QTest::newRow( "emptyByteArray" ) << u" foobar"_s << ba << u" foobar"_s;
// non-ascii byte array
QTest::newRow( "nonAsciiByteArray") << QString() << QByteArray("\xc3\xa9") << QString("\xc3\xa9");
@@ -3017,13 +4170,22 @@ void tst_QString::prepend_bytearray_special_cases()
}
QFETCH( QByteArray, ba );
- if (!ba.contains('\0') && ba.constData()[ba.length()] == '\0') {
+ if (!ba.contains('\0') && ba.constData()[ba.size()] == '\0') {
QFETCH( QString, str );
str.prepend(ba.constData());
QTEST( str, "res" );
}
}
+#endif // !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
+
+void tst_QString::prependEventuallyProducesFreeSpaceAtBegin()
+{
+ QString s;
+ for (int i = 0; i < 100 && !s.data_ptr().freeSpaceAtBegin(); ++i)
+ s.prepend(u'd');
+ QCOMPARE_GT(s.data_ptr().freeSpaceAtBegin(), 1);
+}
void tst_QString::replace_uint_uint()
{
@@ -3032,22 +4194,50 @@ void tst_QString::replace_uint_uint()
QFETCH( int, len );
QFETCH( QString, after );
+ // Test when the string is shared
QString s1 = string;
s1.replace( (uint) index, (int) len, after );
QTEST( s1, "result" );
+ // Test when it's not shared
+ s1 = string;
+ s1.detach();
+ s1.replace((uint)index, (int)len, after);
+ QTEST(s1, "result");
+ // Test when the string is shared
QString s2 = string;
- s2.replace( (uint) index, (uint) len, after.unicode(), after.length() );
- QTEST( s2, "result" );
-
- if ( after.length() == 1 ) {
+ s2.replace((uint)index, (uint)len, after.unicode(), after.size());
+ QTEST(s2, "result");
+ // Test when it's not shared
+ s2 = string;
+ s2.detach();
+ s2.replace((uint)index, (uint)len, after.unicode(), after.size());
+ QTEST(s2, "result");
+
+ if (after.size() == 1) {
+ // Test when the string is shared
QString s3 = string;
- s3.replace( (uint) index, (uint) len, QChar(after[0]) );
- QTEST( s3, "result" );
-
+ s3.replace((uint)index, (uint)len, QChar(after[0]));
+ QTEST(s3, "result");
+ // Test when it's not shared
+ s3 = string;
+ s3.detach();
+ s3.replace((uint)index, (uint)len, QChar(after[0]));
+ QTEST(s3, "result");
+
+#if !defined(QT_NO_CAST_FROM_ASCII)
+ // Testing replace(qsizetype, qsizetype, QLatin1Char) calls aren't ambiguous
+
+ // Test when the string is shared
QString s4 = string;
- s4.replace( (uint) index, (uint) len, QChar(after[0]).toLatin1() );
- QTEST( s4, "result" );
+ s4.replace((uint)index, (uint)len, QChar(after[0]).toLatin1());
+ QTEST(s4, "result");
+ // Test when it's not shared
+ s4 = string;
+ s4.detach();
+ s4.replace((uint)index, (uint)len, QChar(after[0]).toLatin1());
+ QTEST(s4, "result");
+#endif
}
}
@@ -3055,9 +4245,9 @@ void tst_QString::replace_uint_uint_extra()
{
{
QString s;
- s.insert(0, QChar('A'));
+ s.insert(0, QChar(u'A'));
- auto bigReplacement = QString("B").repeated(s.capacity() * 3);
+ auto bigReplacement = QString(u'B').repeated(s.capacity() * 3);
s.replace( 0, 1, bigReplacement );
QCOMPARE( s, bigReplacement );
@@ -3067,7 +4257,7 @@ void tst_QString::replace_uint_uint_extra()
QString s;
s.insert(0, QLatin1String("BBB"));
- auto smallReplacement = QString("C");
+ auto smallReplacement = QString(u'C');
s.replace( 0, 3, smallReplacement );
QCOMPARE( s, smallReplacement );
@@ -3077,7 +4267,7 @@ void tst_QString::replace_uint_uint_extra()
QString s;
s.insert(0, QLatin1String("BBB"));
- auto smallReplacement = QString("C");
+ auto smallReplacement = QString(u'C');
s.replace( 5, 3, smallReplacement );
QCOMPARE( s, QLatin1String("BBB") );
@@ -3090,11 +4280,11 @@ void tst_QString::replace_extra()
This test is designed to be extremely slow if QString::replace() doesn't optimize the case
len == after.size().
*/
- QString str("dsfkljfdsjklsdjsfjklfsdjkldfjslkjsdfkllkjdsfjklsfdkjsdflkjlsdfjklsdfkjldsflkjsddlkj");
+ QString str(u"dsfkljfdsjklsdjsfjklfsdjkldfjslkjsdfkllkjdsfjklsfdkjsdflkjlsdfjklsdfkjldsflkjsddlkj"_s);
for (int j = 1; j < 12; ++j)
str += str;
- QString str2("aaaaaaaaaaaaaaaaaaaa");
+ QString str2(u"aaaaaaaaaaaaaaaaaaaa"_s);
for (int i = 0; i < 2000000; ++i) {
str.replace(10, 20, str2);
}
@@ -3104,32 +4294,32 @@ void tst_QString::replace_extra()
*/
QString copy(str);
copy.detach();
- str.replace(0, str.length(), str);
+ str.replace(0, str.size(), str);
QVERIFY(copy == str);
/*
Make sure that replacing a part of oneself with itself works.
*/
- QString str3("abcdefghij");
+ QString str3(u"abcdefghij"_s);
str3.replace(0, 1, str3);
- QCOMPARE(str3, QString("abcdefghijbcdefghij"));
+ QCOMPARE(str3, u"abcdefghijbcdefghij");
- QString str4("abcdefghij");
+ QString str4(u"abcdefghij"_s);
str4.replace(1, 3, str4);
- QCOMPARE(str4, QString("aabcdefghijefghij"));
+ QCOMPARE(str4, u"aabcdefghijefghij");
- QString str5("abcdefghij");
+ QString str5(u"abcdefghij"_s);
str5.replace(8, 10, str5);
- QCOMPARE(str5, QString("abcdefghabcdefghij"));
+ QCOMPARE(str5, u"abcdefghabcdefghij");
// Replacements using only part of the string modified:
- QString str6("abcdefghij");
+ QString str6(u"abcdefghij"_s);
str6.replace(1, 8, str6.constData() + 3, 3);
- QCOMPARE(str6, QString("adefj"));
+ QCOMPARE(str6, u"adefj");
- QString str7("abcdefghibcdefghij");
+ QString str7(u"abcdefghibcdefghij"_s);
str7.replace(str7.constData() + 1, 6, str7.constData() + 2, 3);
- QCOMPARE(str7, QString("acdehicdehij"));
+ QCOMPARE(str7, u"acdehicdehij");
const int many = 1024;
/*
@@ -3138,7 +4328,8 @@ void tst_QString::replace_extra()
changes to batch size), which lead to misbehaviour if ether QChar * array
was part of the data being modified.
*/
- QString str8("abcdefg"), ans8("acdeg");
+ QString str8(u"abcdefg"_s);
+ QString ans8(u"acdeg"_s);
{
// Make str8 and ans8 repeat themselves many + 1 times:
int i = many;
@@ -3167,37 +4358,38 @@ void tst_QString::replace_string()
QFETCH( QString, before );
QFETCH( QString, after );
QFETCH( bool, bcs );
+ QFETCH(QString, result);
Qt::CaseSensitivity cs = bcs ? Qt::CaseSensitive : Qt::CaseInsensitive;
- if ( before.length() == 1 ) {
+ if ( before.size() == 1 ) {
QChar ch = before.at( 0 );
+ // Test when isShared() is true
QString s1 = string;
s1.replace( ch, after, cs );
- QTEST( s1, "result" );
+ QCOMPARE(s1, result);
- if ( QChar(ch.toLatin1()) == ch ) {
- QString s2 = string;
- s2.replace( ch.toLatin1(), after, cs );
- QTEST( s2, "result" );
- }
+ QString s4 = string;
+ s4.begin(); // Test when isShared() is false
+ s4.replace(ch, after, cs);
+ QCOMPARE(s4, result);
}
QString s3 = string;
s3.replace( before, after, cs );
- QTEST( s3, "result" );
+ QCOMPARE(s3, result);
}
void tst_QString::replace_string_extra()
{
{
QString s;
- s.insert(0, QChar('A'));
+ s.insert(0, u'A');
- auto bigReplacement = QString("B").repeated(s.capacity() * 3);
+ auto bigReplacement = QString(u'B').repeated(s.capacity() * 3);
- s.replace( QString("A"), bigReplacement );
+ s.replace( u"A"_s, bigReplacement );
QCOMPARE( s, bigReplacement );
}
@@ -3205,9 +4397,9 @@ void tst_QString::replace_string_extra()
QString s;
s.insert(0, QLatin1String("BBB"));
- auto smallReplacement = QString("C");
+ auto smallReplacement = QString(u'C');
- s.replace( QString("BBB"), smallReplacement );
+ s.replace( u"BBB"_s, smallReplacement );
QCOMPARE( s, smallReplacement );
}
@@ -3215,10 +4407,10 @@ void tst_QString::replace_string_extra()
QString s(QLatin1String("BBB"));
QString expected(QLatin1String("BBB"));
for (int i = 0; i < 1028; ++i) {
- s.append("X");
- expected.append("GXU");
+ s.append(u'X');
+ expected.append(u"GXU"_s);
}
- s.replace(QChar('X'), "GXU");
+ s.replace(QChar(u'X'), u"GXU"_s);
QCOMPARE(s, expected);
}
}
@@ -3226,13 +4418,17 @@ void tst_QString::replace_string_extra()
#if QT_CONFIG(regularexpression)
void tst_QString::replace_regexp()
{
+ static const QRegularExpression ignoreMessagePattern(
+ u"^QString::replace\\(\\): called on an invalid QRegularExpression object"_s
+ );
+
QFETCH( QString, string );
QFETCH( QString, regexp );
QFETCH( QString, after );
QRegularExpression regularExpression(regexp);
if (!regularExpression.isValid())
- QTest::ignoreMessage(QtWarningMsg, "QString::replace: invalid QRegularExpression object");
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
string.replace(regularExpression, after);
QTEST(string, "result");
}
@@ -3241,11 +4437,11 @@ void tst_QString::replace_regexp_extra()
{
{
QString s;
- s.insert(0, QChar('A'));
+ s.insert(0, QChar(u'A'));
- auto bigReplacement = QString("B").repeated(s.capacity() * 3);
+ auto bigReplacement = QString(u'B').repeated(s.capacity() * 3);
- QRegularExpression regularExpression(QString("A"));
+ QRegularExpression regularExpression(u"A"_s);
QVERIFY(regularExpression.isValid());
s.replace( regularExpression, bigReplacement );
@@ -3256,9 +4452,9 @@ void tst_QString::replace_regexp_extra()
QString s;
s.insert(0, QLatin1String("BBB"));
- auto smallReplacement = QString("C");
+ auto smallReplacement = QString(u'C');
- QRegularExpression regularExpression(QString("BBB"));
+ QRegularExpression regularExpression(u"BBB"_s);
QVERIFY(regularExpression.isValid());
s.replace( regularExpression, smallReplacement );
@@ -3273,13 +4469,23 @@ void tst_QString::remove_uint_uint()
QFETCH( int, index );
QFETCH( int, len );
QFETCH( QString, after );
+ QFETCH(QString, result);
- if ( after.length() == 0 ) {
- QString s1 = string;
- s1.remove( (uint) index, (uint) len );
- QTEST( s1, "result" );
- } else
- QCOMPARE( 0, 0 ); // shut Qt Test
+ // For the replace() unitests?
+ if ( after.size() != 0 ) {
+ return;
+ }
+
+ // Test when isShared() is true
+ QString s1 = string;
+ s1.remove((qsizetype)index, (qsizetype)len);
+ QCOMPARE(s1, result);
+
+ QString s2 = string;
+ // Test when isShared() is false
+ s2.detach();
+ s2.remove((qsizetype)index, (qsizetype)len);
+ QCOMPARE(s2, result);
}
void tst_QString::remove_string()
@@ -3288,35 +4494,50 @@ void tst_QString::remove_string()
QFETCH( QString, before );
QFETCH( QString, after );
QFETCH( bool, bcs );
+ QFETCH(QString, result);
Qt::CaseSensitivity cs = bcs ? Qt::CaseSensitive : Qt::CaseInsensitive;
- if ( after.length() == 0 ) {
- if ( before.length() == 1 && cs ) {
+ if ( after.size() == 0 ) {
+ if ( before.size() == 1 && cs ) {
QChar ch = before.at( 0 );
+ // Test when isShared() is true
QString s1 = string;
s1.remove( ch );
- QTEST( s1, "result" );
+ QCOMPARE(s1, result);
+ // Test again with isShared() is false
+ QString s4 = string;
+ s4.begin(); // Detach
+ s4.remove( ch );
+ QCOMPARE(s4, result);
+
+#ifndef QT_NO_CAST_FROM_ASCII
+ // Testing remove(QLatin1Char) isn't ambiguous
if ( QChar(ch.toLatin1()) == ch ) {
QString s2 = string;
- s2.remove( ch );
- QTEST( s2, "result" );
+ s2.remove(ch.toLatin1());
+ QCOMPARE(s2, result);
}
+#endif
}
+ // Test when needsDetach() is true
QString s3 = string;
s3.remove( before, cs );
- QTEST( s3, "result" );
+ QCOMPARE(s3, result);
+
+ QString s5 = string;
+ s5.begin(); // Detach so needsDetach() is false
+ s5.remove( before, cs );
+ QCOMPARE(s5, result);
if (QtPrivate::isLatin1(before)) {
QString s6 = string;
s6.remove( QLatin1String(before.toLatin1()), cs );
- QTEST( s6, "result" );
+ QCOMPARE(s6, result);
}
- } else {
- QCOMPARE( 0, 0 ); // shut Qt Test
}
}
@@ -3330,23 +4551,27 @@ void tst_QString::remove_regexp_data()
// string.remove(regexp) == result
QTest::newRow("alpha:s/a+//")
- << QString("alpha") << QString("a+") << QString("") << QString("lph");
+ << u"alpha"_s << u"a+"_s << u""_s << u"lph"_s;
QTest::newRow("banana:s/^.a//")
- << QString("banana") << QString("^.a") << QString("") << QString("nana");
+ << u"banana"_s << u"^.a"_s << u""_s << u"nana"_s;
QTest::newRow("<empty>:s/^.a//")
- << QString("") << QString("^.a") << QString("") << QString("");
+ << u""_s << u"^.a"_s << u""_s << u""_s;
// The null-vs-empty distinction in after is only relevant to repplace_regexp(), but
// include both cases here to keep after's "empty here, non-empty there" rule simple.
QTest::newRow("<empty>:s/^.a/<null>/")
- << QString("") << QString("^.a") << QString() << QString("");
- QTest::newRow("<null>:s/^.a//") << QString() << QString("^.a") << QString("") << QString();
- QTest::newRow("<null>s/.a/<null>/") << QString() << QString("^.a") << QString() << QString();
+ << u""_s << u"^.a"_s << QString() << u""_s;
+ QTest::newRow("<null>:s/^.a//") << QString() << u"^.a"_s << u""_s << QString();
+ QTest::newRow("<null>s/.a/<null>/") << QString() << u"^.a"_s << QString() << QString();
QTest::newRow("invalid")
- << QString("") << QString("invalid regex\\") << QString("") << QString("");
+ << u""_s << u"invalid regex\\"_s << u""_s << u""_s;
}
void tst_QString::remove_regexp()
{
+ static const QRegularExpression ignoreMessagePattern(
+ u"^QString::replace\\(\\): called on an invalid QRegularExpression object"_s
+ );
+
QFETCH( QString, string );
QFETCH( QString, regexp );
QTEST(QString(), "after"); // non-empty replacement text tests should go in replace_regexp_data()
@@ -3354,7 +4579,7 @@ void tst_QString::remove_regexp()
QRegularExpression regularExpression(regexp);
// remove() delegates to replace(), which produces this warning:
if (!regularExpression.isValid())
- QTest::ignoreMessage(QtWarningMsg, "QString::replace: invalid QRegularExpression object");
+ QTest::ignoreMessage(QtWarningMsg, ignoreMessagePattern);
string.remove(regularExpression);
QTEST(string, "result");
}
@@ -3363,29 +4588,305 @@ void tst_QString::remove_regexp()
void tst_QString::remove_extra()
{
{
- QString s = "The quick brown fox jumps over the lazy dog. "
- "The lazy dog jumps over the quick brown fox.";
- s.remove(s);
+ QString quickFox = "The quick brown fox jumps over the lazy dog. "
+ "The lazy dog jumps over the quick brown fox."_L1;
+ QString s1 = quickFox;
+ QVERIFY(s1.data_ptr().needsDetach());
+ s1.remove(s1);
+ QVERIFY(s1.isEmpty());
+ QVERIFY(!quickFox.isEmpty());
+
+ QVERIFY(!quickFox.data_ptr().needsDetach());
+ quickFox.remove(quickFox);
+ QVERIFY(quickFox.isEmpty());
}
{
- QString s = "BCDEFGHJK";
+ QString s = u"BCDEFGHJK"_s;
QString s1 = s;
s1.insert(0, u'A'); // detaches
- s1.remove(0, 1);
+ s1.erase(s1.cbegin());
QCOMPARE(s1, s);
}
+
+ {
+ QString s = u"Clock"_s;
+ s.removeFirst();
+ QCOMPARE(s, u"lock");
+ s.removeLast();
+ QCOMPARE(s, u"loc");
+ s.removeAt(s.indexOf(u'o'));
+ QCOMPARE(s, u"lc");
+ s.clear();
+ // No crash on empty strings
+ s.removeFirst();
+ s.removeLast();
+ s.removeAt(2);
+ }
+}
+
+void tst_QString::erase_single_arg()
+{
+ QString s = u"abcdefg"_s;
+ auto it = s.erase(s.cbegin());
+ QCOMPARE_EQ(s, u"bcdefg");
+ QCOMPARE(it, s.cbegin());
+
+ it = s.erase(std::prev(s.end()));
+ QCOMPARE_EQ(s, u"bcdef");
+ QCOMPARE(it, s.cend());
+
+ it = s.erase(std::find(s.begin(), s.end(), QChar(u'd')));
+ QCOMPARE(it, s.begin() + 2);
+}
+
+void tst_QString::erase()
+{
+ QString str = u"abcdefg"_s;
+
+ QString s = str;
+ auto it = s.erase(s.begin(), s.end());
+ QCOMPARE_EQ(s, u"");
+ QCOMPARE(it, s.end());
+
+ s = str;
+ it = s.erase(std::prev(s.end()));
+ QCOMPARE_EQ(s, u"abcdef");
+ QCOMPARE(it, s.end());
+
+ it = s.erase(s.begin() + 2, s.end());
+ QCOMPARE_EQ(s, u"ab");
+ QCOMPARE(it, s.end());
+
+ it = s.erase(s.begin(), s.begin() + 1);
+ QCOMPARE_EQ(s, u"b");
+ QCOMPARE(it, s.begin());
+
+ {
+ QString s1 = QLatin1String("house");
+ QString copy = s1;
+ // erase() should return an iterator, not const_iterator
+ auto it = s1.erase(s1.cbegin(), s1.cbegin());
+ *it = QLatin1Char('m');
+ QCOMPARE(s1, u"mouse");
+ QCOMPARE(copy, u"house");
+ }
+}
+
+void tst_QString::toNum_base_data()
+{
+ QTest::addColumn<QString>("str");
+ QTest::addColumn<int>("base");
+ QTest::addColumn<int>("expected");
+
+ QTest::newRow("FF") << u"FF"_s << 16 << 255;
+ QTest::newRow("0xFF") << u"0xFF"_s << 16 << 255;
+ QTest::newRow("77") << u"77"_s << 8 << 63;
+ QTest::newRow("077") << u"077"_s << 8 << 63;
+
+ QTest::newRow("0xFF - deduced base") << u"0xFF"_s << 0 << 255;
+ QTest::newRow("077 - deduced base") << u"077"_s << 0 << 63;
+ QTest::newRow("255 - deduced base") << u"255"_s << 0 << 255;
+
+ QTest::newRow(" FF") << u" FF"_s << 16 << 255;
+ QTest::newRow(" 0xFF") << u" 0xFF"_s << 16 << 255;
+ QTest::newRow(" 77") << u" 77"_s << 8 << 63;
+ QTest::newRow(" 077") << u" 077"_s << 8 << 63;
+
+ QTest::newRow(" 0xFF - deduced base") << u" 0xFF"_s << 0 << 255;
+ QTest::newRow(" 077 - deduced base") << u" 077"_s << 0 << 63;
+ QTest::newRow(" 255 - deduced base") << u" 255"_s << 0 << 255;
+
+ QTest::newRow("\tFF\t") << u"\tFF\t"_s << 16 << 255;
+ QTest::newRow("\t0xFF ") << u"\t0xFF "_s << 16 << 255;
+ QTest::newRow(" 77 ") << u" 77 "_s << 8 << 63;
+ QTest::newRow("77 ") << u"77 "_s << 8 << 63;
+}
+
+void tst_QString::toNum_base()
+{
+ QFETCH(QString, str);
+ QFETCH(int, base);
+ QFETCH(int, expected);
+
+ bool ok = false;
+ QCOMPARE(str.toInt(&ok, base), expected);
+ QVERIFY(ok);
+
+ QCOMPARE(str.toUInt(&ok, base), uint(expected));
+ QVERIFY(ok);
+
+ QCOMPARE(str.toShort(&ok, base), expected);
+ QVERIFY(ok);
+
+ QCOMPARE(str.toUShort(&ok, base), expected);
+ QVERIFY(ok);
+
+ QCOMPARE(str.toLong(&ok, base), expected);
+ QVERIFY(ok);
+
+ QCOMPARE(str.toULong(&ok, base), ulong(expected));
+ QVERIFY(ok);
+
+ QCOMPARE(str.toLongLong(&ok, base), expected);
+ QVERIFY(ok);
+
+ QCOMPARE(str.toULongLong(&ok, base), qulonglong(expected));
+ QVERIFY(ok);
+}
+
+void tst_QString::toNum_base_neg_data()
+{
+ QTest::addColumn<QString>("str");
+ QTest::addColumn<int>("base");
+ QTest::addColumn<int>("expected");
+
+ QTest::newRow("-FE") << u"-FE"_s << 16 << -254;
+ QTest::newRow("-0xFE") << u"-0xFE"_s << 16 << -254;
+ QTest::newRow("-77") << u"-77"_s << 8 << -63;
+ QTest::newRow("-077") << u"-077"_s << 8 << -63;
+
+ QTest::newRow("-0xFE - deduced base") << u"-0xFE"_s << 0 << -254;
+ QTest::newRow("-077 - deduced base") << u"-077"_s << 0 << -63;
+ QTest::newRow("-254 - deduced base") << u"-254"_s << 0 << -254;
+}
+
+void tst_QString::toNum_base_neg()
+{
+ QFETCH(QString, str);
+ QFETCH(int, base);
+ QFETCH(int, expected);
+
+ bool ok = false;
+ QCOMPARE(str.toInt(&ok, base), expected);
+ QVERIFY(ok);
+
+ QCOMPARE(str.toShort(&ok, base), expected);
+ QVERIFY(ok);
+
+ QCOMPARE(str.toLong(&ok, base), expected);
+ QVERIFY(ok);
+
+ QCOMPARE(str.toLongLong(&ok, base), expected);
+ QVERIFY(ok);
+}
+
+void tst_QString::toNum_Bad()
+{
+ QString a;
+ bool ok = false;
+
+ QString(u"32768"_s).toShort(&ok);
+ QVERIFY(!ok);
+
+ QString(u"-32769"_s).toShort(&ok);
+ QVERIFY(!ok);
+
+ QString(u"65536"_s).toUShort(&ok);
+ QVERIFY(!ok);
+
+ QString(u"2147483648"_s).toInt(&ok);
+ QVERIFY(!ok);
+
+ QString(u"-2147483649"_s).toInt(&ok);
+ QVERIFY(!ok);
+
+ QString(u"4294967296"_s).toUInt(&ok);
+ QVERIFY(!ok);
+
+ if (sizeof(long) == 4) {
+ QString(u"2147483648"_s).toLong(&ok);
+ QVERIFY(!ok);
+
+ QString(u"-2147483649"_s).toLong(&ok);
+ QVERIFY(!ok);
+
+ QString(u"4294967296"_s).toULong(&ok);
+ QVERIFY(!ok);
+ }
+
+ QString(u"9223372036854775808"_s).toLongLong(&ok);
+ QVERIFY(!ok);
+
+ QString(u"-9223372036854775809"_s).toLongLong(&ok);
+ QVERIFY(!ok);
+
+ QString(u"18446744073709551616"_s).toULongLong(&ok);
+ QVERIFY(!ok);
+
+ QString(u"-1"_s).toUShort(&ok);
+ QVERIFY(!ok);
+
+ QString(u"-1"_s).toUInt(&ok);
+ QVERIFY(!ok);
+
+ QString(u"-1"_s).toULong(&ok);
+ QVERIFY(!ok);
+
+ QString(u"-1"_s).toULongLong(&ok);
+ QVERIFY(!ok);
+}
+
+void tst_QString::toNum_BadAll_data()
+{
+ QTest::addColumn<QString>("str");
+
+ QTest::newRow("empty") << u""_s;
+ QTest::newRow("space") << u" "_s;
+ QTest::newRow("dot") << u"."_s;
+ QTest::newRow("dash") << u"-"_s;
+ QTest::newRow("hello") << u"hello"_s;
+ QTest::newRow("1.2.3") << u"1.2.3"_s;
+ QTest::newRow("0x0x0x") << u"0x0x0x"_s;
+ QTest::newRow("123-^~<") << u"123-^~<"_s;
+ QTest::newRow("123ThisIsNotANumber") << u"123ThisIsNotANumber"_s;
+}
+
+void tst_QString::toNum_BadAll()
+{
+ QFETCH(QString, str);
+ bool ok = false;
+
+ str.toShort(&ok);
+ QVERIFY(!ok);
+
+ str.toUShort(&ok);
+ QVERIFY(!ok);
+
+ str.toInt(&ok);
+ QVERIFY(!ok);
+
+ str.toUInt(&ok);
+ QVERIFY(!ok);
+
+ str.toLong(&ok);
+ QVERIFY(!ok);
+
+ str.toULong(&ok);
+ QVERIFY(!ok);
+
+ str.toLongLong(&ok);
+ QVERIFY(!ok);
+
+ str.toULongLong(&ok);
+ QVERIFY(!ok);
+
+ str.toFloat(&ok);
+ QVERIFY(!ok);
+
+ str.toDouble(&ok);
+ QVERIFY(!ok);
}
void tst_QString::toNum()
{
#if defined (Q_OS_WIN) && defined (Q_CC_MSVC)
#define TEST_TO_INT(num, func) \
- a = #num; \
+ a = QLatin1StringView(#num); \
QVERIFY2(a.func(&ok) == num ## i64 && ok, "Failed: num=" #num ", func=" #func);
#else
#define TEST_TO_INT(num, func) \
- a = #num; \
+ a = QLatin1StringView(#num); \
QVERIFY2(a.func(&ok) == num ## LL && ok, "Failed: num=" #num ", func=" #func);
#endif
@@ -3419,11 +4920,11 @@ void tst_QString::toNum()
#if defined (Q_OS_WIN) && defined (Q_CC_MSVC)
#define TEST_TO_UINT(num, func) \
- a = #num; \
+ a = QLatin1StringView(#num); \
QVERIFY2(a.func(&ok) == num ## i64 && ok, "Failed: num=" #num ", func=" #func);
#else
#define TEST_TO_UINT(num, func) \
- a = #num; \
+ a = QLatin1StringView(#num); \
QVERIFY2(a.func(&ok) == num ## ULL && ok, "Failed: num=" #num ", func=" #func);
#endif
@@ -3444,140 +4945,11 @@ void tst_QString::toNum()
TEST_TO_UINT(18446744073709551615, toULongLong)
#undef TEST_TO_UINT
-
-#define TEST_BASE(str, base, num) \
- a = str; \
- QVERIFY2(a.toInt(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toInt"); \
- QVERIFY2(a.toUInt(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toUInt"); \
- QVERIFY2(a.toShort(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toShort"); \
- QVERIFY2(a.toUShort(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toUShort"); \
- QVERIFY2(a.toLong(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toLong"); \
- QVERIFY2(a.toULong(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toULong"); \
- QVERIFY2(a.toLongLong(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toLongLong"); \
- QVERIFY2(a.toULongLong(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toULongLong");
-
- TEST_BASE("FF", 16, 255)
- TEST_BASE("0xFF", 16, 255)
- TEST_BASE("77", 8, 63)
- TEST_BASE("077", 8, 63)
-
- TEST_BASE("0xFF", 0, 255)
- TEST_BASE("077", 0, 63)
- TEST_BASE("255", 0, 255)
-
- TEST_BASE(" FF", 16, 255)
- TEST_BASE(" 0xFF", 16, 255)
- TEST_BASE(" 77", 8, 63)
- TEST_BASE(" 077", 8, 63)
-
- TEST_BASE(" 0xFF", 0, 255)
- TEST_BASE(" 077", 0, 63)
- TEST_BASE(" 255", 0, 255)
-
- TEST_BASE("\tFF\t", 16, 255)
- TEST_BASE("\t0xFF ", 16, 255)
- TEST_BASE(" 77 ", 8, 63)
- TEST_BASE("77 ", 8, 63)
-
-#undef TEST_BASE
-
-#define TEST_NEG_BASE(str, base, num) \
- a = str; \
- QVERIFY2(a.toInt(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toInt"); \
- QVERIFY2(a.toShort(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toShort"); \
- QVERIFY2(a.toLong(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toLong"); \
- QVERIFY2(a.toLongLong(&ok, base) == num && ok, "Failed: str=" #str " base= "#base " num=" #num ", func=toLongLong");
-
- TEST_NEG_BASE("-FE", 16, -254)
- TEST_NEG_BASE("-0xFE", 16, -254)
- TEST_NEG_BASE("-77", 8, -63)
- TEST_NEG_BASE("-077", 8, -63)
-
- TEST_NEG_BASE("-0xFE", 0, -254)
- TEST_NEG_BASE("-077", 0, -63)
- TEST_NEG_BASE("-254", 0, -254)
-
-#undef TEST_NEG_BASE
-
-#define TEST_DOUBLE(num, str) \
- a = str; \
- QCOMPARE(a.toDouble(&ok), num); \
- QVERIFY(ok);
-
- TEST_DOUBLE(1.2345, "1.2345")
- TEST_DOUBLE(12.345, "1.2345e+01")
- TEST_DOUBLE(12.345, "1.2345E+01")
- TEST_DOUBLE(12345.6, "12345.6")
-
-#undef TEST_DOUBLE
-
-
-#define TEST_BAD(str, func) \
- a = str; \
- a.func(&ok); \
- QVERIFY2(!ok, "Failed: str=" #str " func=" #func);
-
- TEST_BAD("32768", toShort)
- TEST_BAD("-32769", toShort)
- TEST_BAD("65536", toUShort)
- TEST_BAD("2147483648", toInt)
- TEST_BAD("-2147483649", toInt)
- TEST_BAD("4294967296", toUInt)
- if (sizeof(long) == 4) {
- TEST_BAD("2147483648", toLong)
- TEST_BAD("-2147483649", toLong)
- TEST_BAD("4294967296", toULong)
- }
- TEST_BAD("9223372036854775808", toLongLong)
- TEST_BAD("-9223372036854775809", toLongLong)
- TEST_BAD("18446744073709551616", toULongLong)
- TEST_BAD("-1", toUShort)
- TEST_BAD("-1", toUInt)
- TEST_BAD("-1", toULong)
- TEST_BAD("-1", toULongLong)
-#undef TEST_BAD
-
-#define TEST_BAD_ALL(str) \
- a = str; \
- a.toShort(&ok); \
- QVERIFY2(!ok, "Failed: str=" #str); \
- a.toUShort(&ok); \
- QVERIFY2(!ok, "Failed: str=" #str); \
- a.toInt(&ok); \
- QVERIFY2(!ok, "Failed: str=" #str); \
- a.toUInt(&ok); \
- QVERIFY2(!ok, "Failed: str=" #str); \
- a.toLong(&ok); \
- QVERIFY2(!ok, "Failed: str=" #str); \
- a.toULong(&ok); \
- QVERIFY2(!ok, "Failed: str=" #str); \
- a.toLongLong(&ok); \
- QVERIFY2(!ok, "Failed: str=" #str); \
- a.toULongLong(&ok); \
- QVERIFY2(!ok, "Failed: str=" #str); \
- a.toFloat(&ok); \
- QVERIFY2(!ok, "Failed: str=" #str); \
- a.toDouble(&ok); \
- QVERIFY2(!ok, "Failed: str=" #str);
-
- TEST_BAD_ALL((const char*)0);
- TEST_BAD_ALL("");
- TEST_BAD_ALL(" ");
- TEST_BAD_ALL(".");
- TEST_BAD_ALL("-");
- TEST_BAD_ALL("hello");
- TEST_BAD_ALL("1.2.3");
- TEST_BAD_ALL("0x0x0x");
- TEST_BAD_ALL("123-^~<");
- TEST_BAD_ALL("123ThisIsNotANumber");
-
-#undef TEST_BAD_ALL
-
- a = "FF";
+ a = u"FF"_s;
a.toULongLong(&ok, 10);
QVERIFY(!ok);
- a = "FF";
+ a = u"FF"_s;
a.toULongLong(&ok, 0);
QVERIFY(!ok);
@@ -3608,68 +4980,68 @@ void tst_QString::toUShort()
QCOMPARE(a.toUShort(&ok),(ushort)0);
QVERIFY(!ok);
- a="";
+ a = u""_s;
QCOMPARE(a.toUShort(),(ushort)0);
QCOMPARE(a.toUShort(&ok),(ushort)0);
QVERIFY(!ok);
- a="COMPARE";
+ a = u"COMPARE"_s;
QCOMPARE(a.toUShort(),(ushort)0);
QCOMPARE(a.toUShort(&ok),(ushort)0);
QVERIFY(!ok);
- a="123";
+ a = u"123"_s;
QCOMPARE(a.toUShort(),(ushort)123);
QCOMPARE(a.toUShort(&ok),(ushort)123);
QVERIFY(ok);
- a="123A";
+ a = u"123A"_s;
QCOMPARE(a.toUShort(),(ushort)0);
QCOMPARE(a.toUShort(&ok),(ushort)0);
QVERIFY(!ok);
- a="1234567";
+ a = u"1234567"_s;
QCOMPARE(a.toUShort(),(ushort)0);
QCOMPARE(a.toUShort(&ok),(ushort)0);
QVERIFY(!ok);
- a = "aaa123aaa";
+ a = u"aaa123aaa"_s;
QCOMPARE(a.toUShort(),(ushort)0);
QCOMPARE(a.toUShort(&ok),(ushort)0);
QVERIFY(!ok);
- a = "aaa123";
+ a = u"aaa123"_s;
QCOMPARE(a.toUShort(),(ushort)0);
QCOMPARE(a.toUShort(&ok),(ushort)0);
QVERIFY(!ok);
- a = "123aaa";
+ a = u"123aaa"_s;
QCOMPARE(a.toUShort(),(ushort)0);
QCOMPARE(a.toUShort(&ok),(ushort)0);
QVERIFY(!ok);
- a = "32767";
+ a = u"32767"_s;
QCOMPARE(a.toUShort(),(ushort)32767);
QCOMPARE(a.toUShort(&ok),(ushort)32767);
QVERIFY(ok);
- a = "-32767";
+ a = u"-32767"_s;
QCOMPARE(a.toUShort(),(ushort)0);
QCOMPARE(a.toUShort(&ok),(ushort)0);
QVERIFY(!ok);
- a = "65535";
+ a = u"65535"_s;
QCOMPARE(a.toUShort(),(ushort)65535);
QCOMPARE(a.toUShort(&ok),(ushort)65535);
QVERIFY(ok);
if (sizeof(short) == 2) {
- a = "65536";
+ a = u"65536"_s;
QCOMPARE(a.toUShort(),(ushort)0);
QCOMPARE(a.toUShort(&ok),(ushort)0);
QVERIFY(!ok);
- a = "123456";
+ a = u"123456"_s;
QCOMPARE(a.toUShort(),(ushort)0);
QCOMPARE(a.toUShort(&ok),(ushort)0);
QVERIFY(!ok);
@@ -3684,68 +5056,68 @@ void tst_QString::toShort()
QCOMPARE(a.toShort(&ok),(short)0);
QVERIFY(!ok);
- a="";
+ a = u""_s;
QCOMPARE(a.toShort(),(short)0);
QCOMPARE(a.toShort(&ok),(short)0);
QVERIFY(!ok);
- a="COMPARE";
+ a = u"COMPARE"_s;
QCOMPARE(a.toShort(),(short)0);
QCOMPARE(a.toShort(&ok),(short)0);
QVERIFY(!ok);
- a="123";
+ a = u"123"_s;
QCOMPARE(a.toShort(),(short)123);
QCOMPARE(a.toShort(&ok),(short)123);
QVERIFY(ok);
- a="123A";
+ a = u"123A"_s;
QCOMPARE(a.toShort(),(short)0);
QCOMPARE(a.toShort(&ok),(short)0);
QVERIFY(!ok);
- a="1234567";
+ a = u"1234567"_s;
QCOMPARE(a.toShort(),(short)0);
QCOMPARE(a.toShort(&ok),(short)0);
QVERIFY(!ok);
- a = "aaa123aaa";
+ a = u"aaa123aaa"_s;
QCOMPARE(a.toShort(),(short)0);
QCOMPARE(a.toShort(&ok),(short)0);
QVERIFY(!ok);
- a = "aaa123";
+ a = u"aaa123"_s;
QCOMPARE(a.toShort(),(short)0);
QCOMPARE(a.toShort(&ok),(short)0);
QVERIFY(!ok);
- a = "123aaa";
+ a = u"123aaa"_s;
QCOMPARE(a.toShort(),(short)0);
QCOMPARE(a.toShort(&ok),(short)0);
QVERIFY(!ok);
- a = "32767";
+ a = u"32767"_s;
QCOMPARE(a.toShort(),(short)32767);
QCOMPARE(a.toShort(&ok),(short)32767);
QVERIFY(ok);
- a = "-32767";
+ a = u"-32767"_s;
QCOMPARE(a.toShort(),(short)-32767);
QCOMPARE(a.toShort(&ok),(short)-32767);
QVERIFY(ok);
- a = "-32768";
+ a = u"-32768"_s;
QCOMPARE(a.toShort(),(short)-32768);
QCOMPARE(a.toShort(&ok),(short)-32768);
QVERIFY(ok);
if (sizeof(short) == 2) {
- a = "32768";
+ a = u"32768"_s;
QCOMPARE(a.toShort(),(short)0);
QCOMPARE(a.toShort(&ok),(short)0);
QVERIFY(!ok);
- a = "-32769";
+ a = u"-32769"_s;
QCOMPARE(a.toShort(),(short)0);
QCOMPARE(a.toShort(&ok),(short)0);
QVERIFY(!ok);
@@ -3760,78 +5132,78 @@ void tst_QString::toInt()
QCOMPARE(a.toInt(&ok),0);
QVERIFY(!ok);
- a = "";
+ a = u""_s;
QCOMPARE(a.toInt(),0);
QCOMPARE(a.toInt(&ok),0);
QVERIFY(!ok);
- a="COMPARE";
+ a = u"COMPARE"_s;
QCOMPARE(a.toInt(),0);
QCOMPARE(a.toInt(&ok),0);
QVERIFY(!ok);
- a="123";
+ a = u"123"_s;
QCOMPARE(a.toInt(),123);
QCOMPARE(a.toInt(&ok),123);
QVERIFY(ok);
- a="123A";
+ a = u"123A"_s;
QCOMPARE(a.toInt(),0);
QCOMPARE(a.toInt(&ok),0);
QVERIFY(!ok);
- a="1234567";
+ a = u"1234567"_s;
QCOMPARE(a.toInt(),1234567);
QCOMPARE(a.toInt(&ok),1234567);
QVERIFY(ok);
- a="12345678901234";
+ a = u"12345678901234"_s;
QCOMPARE(a.toInt(),0);
QCOMPARE(a.toInt(&ok),0);
QVERIFY(!ok);
- a="3234567890";
+ a = u"3234567890"_s;
QCOMPARE(a.toInt(),0);
QCOMPARE(a.toInt(&ok),0);
QVERIFY(!ok);
- a = "aaa12345aaa";
+ a = u"aaa12345aaa"_s;
QCOMPARE(a.toInt(),0);
QCOMPARE(a.toInt(&ok),0);
QVERIFY(!ok);
- a = "aaa12345";
+ a = u"aaa12345"_s;
QCOMPARE(a.toInt(),0);
QCOMPARE(a.toInt(&ok),0);
QVERIFY(!ok);
- a = "12345aaa";
+ a = u"12345aaa"_s;
QCOMPARE(a.toInt(),0);
QCOMPARE(a.toInt(&ok),0);
QVERIFY(!ok);
- a = "2147483647"; // 2**31 - 1
+ a = u"2147483647"_s; // 2**31 - 1
QCOMPARE(a.toInt(),2147483647);
QCOMPARE(a.toInt(&ok),2147483647);
QVERIFY(ok);
if (sizeof(int) == 4) {
- a = "-2147483647"; // -(2**31 - 1)
+ a = u"-2147483647"_s; // -(2**31 - 1)
QCOMPARE(a.toInt(),-2147483647);
QCOMPARE(a.toInt(&ok),-2147483647);
QVERIFY(ok);
- a = "2147483648"; // 2**31
+ a = u"2147483648"_s; // 2**31
QCOMPARE(a.toInt(),0);
QCOMPARE(a.toInt(&ok),0);
QVERIFY(!ok);
- a = "-2147483648"; // -2**31
+ a = u"-2147483648"_s; // -2**31
QCOMPARE(a.toInt(),-2147483647 - 1);
QCOMPARE(a.toInt(&ok),-2147483647 - 1);
QVERIFY(ok);
- a = "2147483649"; // 2**31 + 1
+ a = u"2147483649"_s; // 2**31 + 1
QCOMPARE(a.toInt(),0);
QCOMPARE(a.toInt(&ok),0);
QVERIFY(!ok);
@@ -3847,22 +5219,22 @@ void tst_QString::toUInt()
QCOMPARE(a.toUInt(&ok), 0u);
QVERIFY(!ok);
- a="3234567890";
+ a = u"3234567890"_s;
QCOMPARE(a.toUInt(&ok),3234567890u);
QVERIFY(ok);
- a = "-50";
+ a = u"-50"_s;
QCOMPARE(a.toUInt(),0u);
QCOMPARE(a.toUInt(&ok),0u);
QVERIFY(!ok);
- a = "4294967295"; // 2**32 - 1
+ a = u"4294967295"_s; // 2**32 - 1
QCOMPARE(a.toUInt(),4294967295u);
QCOMPARE(a.toUInt(&ok),4294967295u);
QVERIFY(ok);
if (sizeof(int) == 4) {
- a = "4294967296"; // 2**32
+ a = u"4294967296"_s; // 2**32
QCOMPARE(a.toUInt(),0u);
QCOMPARE(a.toUInt(&ok),0u);
QVERIFY(!ok);
@@ -3879,9 +5251,9 @@ void tst_QString::toULong_data()
QTest::addColumn<bool>("ok" );
QTest::newRow( "default" ) << QString() << 10 << 0UL << false;
- QTest::newRow( "empty" ) << QString("") << 10 << 0UL << false;
- QTest::newRow( "ulong1" ) << QString("3234567890") << 10 << 3234567890UL << true;
- QTest::newRow( "ulong2" ) << QString("fFFfFfFf") << 16 << 0xFFFFFFFFUL << true;
+ QTest::newRow( "empty" ) << u""_s << 10 << 0UL << false;
+ QTest::newRow( "ulong1" ) << u"3234567890"_s << 10 << 3234567890UL << true;
+ QTest::newRow( "ulong2" ) << u"fFFfFfFf"_s << 16 << 0xFFFFFFFFUL << true;
}
void tst_QString::toULong()
@@ -3905,14 +5277,14 @@ void tst_QString::toLong_data()
QTest::addColumn<bool>("ok" );
QTest::newRow( "default" ) << QString() << 10 << 0L << false;
- QTest::newRow( "empty" ) << QString("") << 10 << 0L << false;
- QTest::newRow( "normal" ) << QString("7fFFfFFf") << 16 << 0x7fFFfFFfL << true;
- QTest::newRow( "long_max" ) << QString("2147483647") << 10 << 2147483647L << true;
+ QTest::newRow("empty") << u""_s << 10 << 0L << false;
+ QTest::newRow("normal") << u"7fFFfFFf"_s << 16 << 0x7fFFfFFfL << true;
+ QTest::newRow("long_max") << u"2147483647"_s << 10 << 2147483647L << true;
if (sizeof(long) == 4) {
- QTest::newRow( "long_max+1" ) << QString("2147483648") << 10 << 0L << false;
- QTest::newRow( "long_min-1" ) << QString("-80000001") << 16 << 0L << false;
+ QTest::newRow("long_max+1") << u"2147483648"_s << 10 << 0L << false;
+ QTest::newRow("long_min-1") << u"-80000001"_s << 16 << 0L << false;
}
- QTest::newRow( "negative" ) << QString("-7fffffff") << 16 << -0x7fffffffL << true;
+ QTest::newRow("negative") << u"-7fffffff"_s << 16 << -0x7fffffffL << true;
// QTest::newRow( "long_min" ) << QString("-80000000") << 16 << 0x80000000uL << true;
}
@@ -3941,17 +5313,17 @@ void tst_QString::toULongLong()
QCOMPARE(str.toULongLong(&ok), Q_UINT64_C(0));
QVERIFY(!ok);
- str = "18446744073709551615"; // ULLONG_MAX
+ str = u"18446744073709551615"_s; // ULLONG_MAX
QCOMPARE( str.toULongLong( 0 ), Q_UINT64_C(18446744073709551615) );
QCOMPARE( str.toULongLong( &ok ), Q_UINT64_C(18446744073709551615) );
QVERIFY( ok );
- str = "18446744073709551616"; // ULLONG_MAX + 1
+ str = u"18446744073709551616"_s; // ULLONG_MAX + 1
QCOMPARE( str.toULongLong( 0 ), Q_UINT64_C(0) );
QCOMPARE( str.toULongLong( &ok ), Q_UINT64_C(0) );
QVERIFY( !ok );
- str = "-150";
+ str = u"-150"_s;
QCOMPARE( str.toULongLong( 0 ), Q_UINT64_C(0) );
QCOMPARE( str.toULongLong( &ok ), Q_UINT64_C(0) );
QVERIFY( !ok );
@@ -3975,29 +5347,29 @@ void tst_QString::toLongLong()
QCOMPARE(str.toLongLong(&ok), Q_INT64_C(0));
QVERIFY(!ok);
- str = "9223372036854775807"; // LLONG_MAX
+ str = u"9223372036854775807"_s; // LLONG_MAX
QCOMPARE( str.toLongLong( 0 ), Q_INT64_C(9223372036854775807) );
QCOMPARE( str.toLongLong( &ok ), Q_INT64_C(9223372036854775807) );
QVERIFY( ok );
- str = "-9223372036854775808"; // LLONG_MIN
+ str = u"-9223372036854775808"_s; // LLONG_MIN
QCOMPARE( str.toLongLong( 0 ),
-Q_INT64_C(9223372036854775807) - Q_INT64_C(1) );
QCOMPARE( str.toLongLong( &ok ),
-Q_INT64_C(9223372036854775807) - Q_INT64_C(1) );
QVERIFY( ok );
- str = "aaaa9223372036854775807aaaa";
+ str = u"aaaa9223372036854775807aaaa"_s;
QCOMPARE( str.toLongLong( 0 ), Q_INT64_C(0) );
QCOMPARE( str.toLongLong( &ok ), Q_INT64_C(0) );
QVERIFY( !ok );
- str = "9223372036854775807aaaa";
+ str = u"9223372036854775807aaaa"_s;
QCOMPARE( str.toLongLong( 0 ), Q_INT64_C(0) );
QCOMPARE( str.toLongLong( &ok ), Q_INT64_C(0) );
QVERIFY( !ok );
- str = "aaaa9223372036854775807";
+ str = u"aaaa9223372036854775807"_s;
QCOMPARE( str.toLongLong( 0 ), Q_INT64_C(0) );
QCOMPARE( str.toLongLong( &ok ), Q_INT64_C(0) );
QVERIFY( !ok );
@@ -4008,9 +5380,9 @@ void tst_QString::toLongLong()
for (int j = 0; j < 36; ++j) {
for (int k = 0; k < 36; ++k) {
QString str;
- str += QChar(digits[i]);
- str += QChar(digits[j]);
- str += QChar(digits[k]);
+ str += QLatin1Char(digits[i]);
+ str += QLatin1Char(digits[j]);
+ str += QLatin1Char(digits[k]);
qlonglong value = (((i * 36) + j) * 36) + k;
QVERIFY(str.toLongLong(0, 36) == value);
}
@@ -4094,7 +5466,7 @@ void tst_QString::toFloat()
QCOMPARE(a.toFloat(&ok), 0.0f);
QVERIFY(!ok);
- a="0.000000000931322574615478515625";
+ a = u"0.000000000931322574615478515625"_s;
QCOMPARE(a.toFloat(&ok),(float)(0.000000000931322574615478515625));
QVERIFY(ok);
}
@@ -4106,35 +5478,39 @@ void tst_QString::toDouble_data()
QTest::addColumn<bool>("result_ok" );
QTest::newRow("null") << QString() << 0.0 << false;
- QTest::newRow("empty") << QString("") << 0.0 << false;
+ QTest::newRow("empty") << u""_s << 0.0 << false;
- QTest::newRow( "ok00" ) << QString("0.000000000931322574615478515625") << 0.000000000931322574615478515625 << true;
- QTest::newRow( "ok01" ) << QString(" 123.45") << 123.45 << true;
+ QTest::newRow("ok00") << u"0.000000000931322574615478515625"_s << 0.000000000931322574615478515625 << true;
+ QTest::newRow("ok01") << u" 123.45"_s << 123.45 << true;
- QTest::newRow( "ok02" ) << QString("0.1e10") << 0.1e10 << true;
- QTest::newRow( "ok03" ) << QString("0.1e-10") << 0.1e-10 << true;
+ QTest::newRow("ok02") << u"0.1e10"_s << 0.1e10 << true;
+ QTest::newRow("ok03") << u"0.1e-10"_s << 0.1e-10 << true;
- QTest::newRow( "ok04" ) << QString("1e10") << 1.0e10 << true;
- QTest::newRow( "ok05" ) << QString("1e+10") << 1.0e10 << true;
- QTest::newRow( "ok06" ) << QString("1e-10") << 1.0e-10 << true;
+ QTest::newRow("ok04") << u"1e10"_s << 1.0e10 << true;
+ QTest::newRow("ok05") << u"1e+10"_s << 1.0e10 << true;
+ QTest::newRow("ok06") << u"1e-10"_s << 1.0e-10 << true;
- QTest::newRow( "ok07" ) << QString(" 1e10") << 1.0e10 << true;
- QTest::newRow( "ok08" ) << QString(" 1e+10") << 1.0e10 << true;
- QTest::newRow( "ok09" ) << QString(" 1e-10") << 1.0e-10 << true;
+ QTest::newRow("ok07") << u" 1e10"_s << 1.0e10 << true;
+ QTest::newRow("ok08") << u" 1e+10"_s << 1.0e10 << true;
+ QTest::newRow("ok09") << u" 1e-10"_s << 1.0e-10 << true;
- QTest::newRow( "ok10" ) << QString("1.") << 1.0 << true;
- QTest::newRow( "ok11" ) << QString(".1") << 0.1 << true;
+ QTest::newRow("ok10") << u"1."_s << 1.0 << true;
+ QTest::newRow("ok11") << u".1"_s << 0.1 << true;
+ QTest::newRow("ok12") << u"1.2345"_s << 1.2345 << true;
+ QTest::newRow("ok13") << u"12345.6"_s << 12345.6 << true;
+ QTest::newRow("double-e+") << u"1.2345e+01"_s << 12.345 << true;
+ QTest::newRow("double-E+") << u"1.2345E+01"_s << 12.345 << true;
- QTest::newRow( "wrong00" ) << QString("123.45 ") << 123.45 << true;
- QTest::newRow( "wrong01" ) << QString(" 123.45 ") << 123.45 << true;
+ QTest::newRow("wrong00") << u"123.45 "_s << 123.45 << true;
+ QTest::newRow("wrong01") << u" 123.45 "_s << 123.45 << true;
- QTest::newRow( "wrong02" ) << QString("aa123.45aa") << 0.0 << false;
- QTest::newRow( "wrong03" ) << QString("123.45aa") << 0.0 << false;
- QTest::newRow( "wrong04" ) << QString("123erf") << 0.0 << false;
+ QTest::newRow("wrong02") << u"aa123.45aa"_s << 0.0 << false;
+ QTest::newRow("wrong03") << u"123.45aa"_s << 0.0 << false;
+ QTest::newRow("wrong04") << u"123erf"_s << 0.0 << false;
- QTest::newRow( "wrong05" ) << QString("abc") << 0.0 << false;
+ QTest::newRow("wrong05") << u"abc"_s << 0.0 << false;
QTest::newRow( "wrong06" ) << QString() << 0.0 << false;
- QTest::newRow( "wrong07" ) << QString("") << 0.0 << false;
+ QTest::newRow("wrong07") << u""_s << 0.0 << false;
}
void tst_QString::toDouble()
@@ -4160,28 +5536,28 @@ void tst_QString::setNum()
QCOMPARE(a.setNum((short)123), QLatin1String("123"));
QCOMPARE(a.setNum(123L), QLatin1String("123"));
QCOMPARE(a.setNum(123UL), QLatin1String("123"));
- QCOMPARE(a.setNum(2147483647L), QString("2147483647")); // 32 bit LONG_MAX
- QCOMPARE(a.setNum(-2147483647L), QString("-2147483647")); // LONG_MIN + 1
- QCOMPARE(a.setNum(-2147483647L-1L), QString("-2147483648")); // LONG_MIN
- QCOMPARE(a.setNum(1.23), QString("1.23"));
- QCOMPARE(a.setNum(1.234567), QString("1.23457"));
+ QCOMPARE(a.setNum(2147483647L), u"2147483647"); // 32 bit LONG_MAX
+ QCOMPARE(a.setNum(-2147483647L), u"-2147483647"); // LONG_MIN + 1
+ QCOMPARE(a.setNum(-2147483647L-1L), u"-2147483648"); // LONG_MIN
+ QCOMPARE(a.setNum(1.23), u"1.23");
+ QCOMPARE(a.setNum(1.234567), u"1.23457");
#if defined(LONG_MAX) && defined(LLONG_MAX) && LONG_MAX == LLONG_MAX
// LONG_MAX and LONG_MIN on 64 bit systems
- QCOMPARE(a.setNum(9223372036854775807L), QString("9223372036854775807"));
- QCOMPARE(a.setNum(-9223372036854775807L-1L), QString("-9223372036854775808"));
- QCOMPARE(a.setNum(18446744073709551615UL), QString("18446744073709551615"));
+ QCOMPARE(a.setNum(9223372036854775807L), u"9223372036854775807");
+ QCOMPARE(a.setNum(-9223372036854775807L-1L), u"-9223372036854775808");
+ QCOMPARE(a.setNum(18446744073709551615UL), u"18446744073709551615");
#endif
- QCOMPARE(a.setNum(Q_INT64_C(123)), QString("123"));
+ QCOMPARE(a.setNum(Q_INT64_C(123)), u"123");
// 2^40 == 1099511627776
- QCOMPARE(a.setNum(Q_INT64_C(-1099511627776)), QString("-1099511627776"));
- QCOMPARE(a.setNum(Q_UINT64_C(1099511627776)), QString("1099511627776"));
+ QCOMPARE(a.setNum(Q_INT64_C(-1099511627776)), u"-1099511627776");
+ QCOMPARE(a.setNum(Q_UINT64_C(1099511627776)), u"1099511627776");
QCOMPARE(a.setNum(Q_INT64_C(9223372036854775807)), // LLONG_MAX
- QString("9223372036854775807"));
+ u"9223372036854775807");
QCOMPARE(a.setNum(-Q_INT64_C(9223372036854775807) - Q_INT64_C(1)),
- QString("-9223372036854775808"));
+ u"-9223372036854775808");
QCOMPARE(a.setNum(Q_UINT64_C(18446744073709551615)), // ULLONG_MAX
- QString("18446744073709551615"));
- QCOMPARE(a.setNum(0.000000000931322574615478515625),QString("9.31323e-10"));
+ u"18446744073709551615");
+ QCOMPARE(a.setNum(0.000000000931322574615478515625), u"9.31323e-10");
// QCOMPARE(a.setNum(0.000000000931322574615478515625,'g',30),(QString)"9.31322574615478515625e-010");
// QCOMPARE(a.setNum(0.000000000931322574615478515625,'f',30),(QString)"0.00000000093132257461547852");
@@ -4191,25 +5567,25 @@ void tst_QString::startsWith()
{
QString a;
- QVERIFY(!a.startsWith('A'));
- QVERIFY(!a.startsWith("AB"));
+ QVERIFY(!a.startsWith(u'A'));
+ QVERIFY(!a.startsWith(u"AB"_s));
{
- CREATE_VIEW("AB");
+ CREATE_VIEW(u"AB"_s);
QVERIFY(!a.startsWith(view));
}
QVERIFY(!a.isDetached());
- a = "AB";
- QVERIFY( a.startsWith("A") );
- QVERIFY( a.startsWith("AB") );
- QVERIFY( !a.startsWith("C") );
- QVERIFY( !a.startsWith("ABCDEF") );
- QVERIFY( a.startsWith("") );
+ a = u"AB"_s;
+ QVERIFY(a.startsWith(u"A"));
+ QVERIFY(a.startsWith(u"AB"_s));
+ QVERIFY(!a.startsWith(u"C"));
+ QVERIFY(!a.startsWith(u"ABCDEF"_s));
+ QVERIFY(a.startsWith(u""_s));
QVERIFY( a.startsWith(QString()) );
- QVERIFY( a.startsWith('A') );
- QVERIFY( a.startsWith(QLatin1Char('A')) );
- QVERIFY( a.startsWith(QChar('A')) );
- QVERIFY( !a.startsWith('C') );
+ QVERIFY(a.startsWith(u'A'));
+ QVERIFY(a.startsWith(QLatin1Char('A')));
+ QVERIFY(a.startsWith(QChar(u'A')));
+ QVERIFY(!a.startsWith(u'C'));
QVERIFY( !a.startsWith(QChar()) );
QVERIFY( !a.startsWith(QLatin1Char(0)) );
@@ -4218,26 +5594,26 @@ void tst_QString::startsWith()
QVERIFY( !a.startsWith(QLatin1String("C")) );
QVERIFY( !a.startsWith(QLatin1String("ABCDEF")) );
QVERIFY( a.startsWith(QLatin1String("")) );
- QVERIFY( a.startsWith(QLatin1String(0)) );
-
- QVERIFY( a.startsWith("A", Qt::CaseSensitive) );
- QVERIFY( a.startsWith("A", Qt::CaseInsensitive) );
- QVERIFY( !a.startsWith("a", Qt::CaseSensitive) );
- QVERIFY( a.startsWith("a", Qt::CaseInsensitive) );
- QVERIFY( !a.startsWith("aB", Qt::CaseSensitive) );
- QVERIFY( a.startsWith("aB", Qt::CaseInsensitive) );
- QVERIFY( !a.startsWith("C", Qt::CaseSensitive) );
- QVERIFY( !a.startsWith("C", Qt::CaseInsensitive) );
- QVERIFY( !a.startsWith("c", Qt::CaseSensitive) );
- QVERIFY( !a.startsWith("c", Qt::CaseInsensitive) );
- QVERIFY( !a.startsWith("abcdef", Qt::CaseInsensitive) );
- QVERIFY( a.startsWith("", Qt::CaseInsensitive) );
+ QVERIFY( a.startsWith(QLatin1String(nullptr)) );
+
+ QVERIFY(a.startsWith(u"A"_s, Qt::CaseSensitive));
+ QVERIFY(a.startsWith(u"A"_s, Qt::CaseInsensitive));
+ QVERIFY(!a.startsWith(u"a"_s, Qt::CaseSensitive));
+ QVERIFY(a.startsWith(u"a"_s, Qt::CaseInsensitive));
+ QVERIFY(!a.startsWith(u"aB"_s, Qt::CaseSensitive));
+ QVERIFY(a.startsWith(u"aB"_s, Qt::CaseInsensitive));
+ QVERIFY(!a.startsWith(u"C"_s, Qt::CaseSensitive));
+ QVERIFY(!a.startsWith(u"C"_s, Qt::CaseInsensitive));
+ QVERIFY(!a.startsWith(u"c"_s, Qt::CaseSensitive));
+ QVERIFY(!a.startsWith(u"c"_s, Qt::CaseInsensitive));
+ QVERIFY(!a.startsWith(u"abcdef"_s, Qt::CaseInsensitive));
+ QVERIFY(a.startsWith(u""_s, Qt::CaseInsensitive));
QVERIFY( a.startsWith(QString(), Qt::CaseInsensitive) );
- QVERIFY( a.startsWith('a', Qt::CaseInsensitive) );
- QVERIFY( a.startsWith('A', Qt::CaseInsensitive) );
+ QVERIFY(a.startsWith(u'a', Qt::CaseInsensitive));
+ QVERIFY(a.startsWith(u'A', Qt::CaseInsensitive));
QVERIFY( a.startsWith(QLatin1Char('a'), Qt::CaseInsensitive) );
- QVERIFY( a.startsWith(QChar('a'), Qt::CaseInsensitive) );
- QVERIFY( !a.startsWith('c', Qt::CaseInsensitive) );
+ QVERIFY(a.startsWith(QChar(u'a'), Qt::CaseInsensitive));
+ QVERIFY(!a.startsWith(u'c', Qt::CaseInsensitive));
QVERIFY( !a.startsWith(QChar(), Qt::CaseInsensitive) );
QVERIFY( !a.startsWith(QLatin1Char(0), Qt::CaseInsensitive) );
@@ -4253,28 +5629,28 @@ void tst_QString::startsWith()
QVERIFY( !a.startsWith(QLatin1String("c"), Qt::CaseInsensitive) );
QVERIFY( !a.startsWith(QLatin1String("abcdef"), Qt::CaseInsensitive) );
QVERIFY( a.startsWith(QLatin1String(""), Qt::CaseInsensitive) );
- QVERIFY( a.startsWith(QLatin1String(0), Qt::CaseInsensitive) );
- QVERIFY( a.startsWith('A', Qt::CaseSensitive) );
- QVERIFY( a.startsWith(QLatin1Char('A'), Qt::CaseSensitive) );
- QVERIFY( a.startsWith(QChar('A'), Qt::CaseSensitive) );
- QVERIFY( !a.startsWith('a', Qt::CaseSensitive) );
+ QVERIFY( a.startsWith(QLatin1String(nullptr), Qt::CaseInsensitive) );
+ QVERIFY(a.startsWith(u'A', Qt::CaseSensitive));
+ QVERIFY(a.startsWith(QLatin1Char('A'), Qt::CaseSensitive));
+ QVERIFY(a.startsWith(QChar(u'A'), Qt::CaseSensitive));
+ QVERIFY(!a.startsWith(u'a', Qt::CaseSensitive));
QVERIFY( !a.startsWith(QChar(), Qt::CaseSensitive) );
QVERIFY( !a.startsWith(QLatin1Char(0), Qt::CaseSensitive) );
#define TEST_VIEW_STARTS_WITH(string, yes) { CREATE_VIEW(string); QCOMPARE(a.startsWith(view), yes); }
- TEST_VIEW_STARTS_WITH("A", true);
- TEST_VIEW_STARTS_WITH("AB", true);
- TEST_VIEW_STARTS_WITH("C", false);
- TEST_VIEW_STARTS_WITH("ABCDEF", false);
+ TEST_VIEW_STARTS_WITH(u"A"_s, true);
+ TEST_VIEW_STARTS_WITH(u"AB"_s, true);
+ TEST_VIEW_STARTS_WITH(u"C"_s, false);
+ TEST_VIEW_STARTS_WITH(u"ABCDEF"_s, false);
#undef TEST_VIEW_STARTS_WITH
- a = "";
- QVERIFY( a.startsWith("") );
+ a = u""_s;
+ QVERIFY(a.startsWith(u""_s));
QVERIFY( a.startsWith(QString()) );
- QVERIFY( !a.startsWith("ABC") );
+ QVERIFY(!a.startsWith(u"ABC"_s));
QVERIFY( a.startsWith(QLatin1String("")) );
- QVERIFY( a.startsWith(QLatin1String(0)) );
+ QVERIFY( a.startsWith(QLatin1String(nullptr)) );
QVERIFY( !a.startsWith(QLatin1String("ABC")) );
QVERIFY( !a.startsWith(QLatin1Char(0)) );
@@ -4282,12 +5658,12 @@ void tst_QString::startsWith()
QVERIFY( !a.startsWith(QChar()) );
a = QString();
- QVERIFY( !a.startsWith("") );
+ QVERIFY( !a.startsWith(u""_s) );
QVERIFY( a.startsWith(QString()) );
- QVERIFY( !a.startsWith("ABC") );
+ QVERIFY(!a.startsWith(u"ABC"_s));
QVERIFY( !a.startsWith(QLatin1String("")) );
- QVERIFY( a.startsWith(QLatin1String(0)) );
+ QVERIFY( a.startsWith(QLatin1String(nullptr)) );
QVERIFY( !a.startsWith(QLatin1String("ABC")) );
QVERIFY( !a.startsWith(QLatin1Char(0)) );
@@ -4295,37 +5671,37 @@ void tst_QString::startsWith()
QVERIFY( !a.startsWith(QChar()) );
// this test is independent of encoding
- a = "\xc3\xa9";
- QVERIFY( a.startsWith("\xc3\xa9") );
- QVERIFY( !a.startsWith("\xc3\xa1") );
+ a = u'é';
+ QVERIFY(a.startsWith(u"é"_s));
+ QVERIFY(!a.startsWith(u"á"_s));
// this one is dependent of encoding
- QVERIFY( a.startsWith("\xc3\x89", Qt::CaseInsensitive) );
+ QVERIFY(a.startsWith(u"É"_s, Qt::CaseInsensitive));
}
void tst_QString::endsWith()
{
QString a;
- QVERIFY(!a.endsWith('A'));
- QVERIFY(!a.endsWith("AB"));
+ QVERIFY(!a.endsWith(u'A'));
+ QVERIFY(!a.endsWith(u"AB"_s));
{
- CREATE_VIEW("AB");
+ CREATE_VIEW(u"AB"_s);
QVERIFY(!a.endsWith(view));
}
QVERIFY(!a.isDetached());
- a = "AB";
- QVERIFY( a.endsWith("B") );
- QVERIFY( a.endsWith("AB") );
- QVERIFY( !a.endsWith("C") );
- QVERIFY( !a.endsWith("ABCDEF") );
- QVERIFY( a.endsWith("") );
+ a = u"AB"_s;
+ QVERIFY( a.endsWith(u"B"_s) );
+ QVERIFY( a.endsWith(u"AB"_s) );
+ QVERIFY( !a.endsWith(u"C"_s) );
+ QVERIFY( !a.endsWith(u"ABCDEF"_s) );
+ QVERIFY( a.endsWith(u""_s) );
QVERIFY( a.endsWith(QString()) );
- QVERIFY( a.endsWith('B') );
+ QVERIFY( a.endsWith(u'B') );
QVERIFY( a.endsWith(QLatin1Char('B')) );
- QVERIFY( a.endsWith(QChar('B')) );
- QVERIFY( !a.endsWith('C') );
+ QVERIFY( a.endsWith(QChar(u'B')) );
+ QVERIFY( !a.endsWith(u'C') );
QVERIFY( !a.endsWith(QChar()) );
QVERIFY( !a.endsWith(QLatin1Char(0)) );
@@ -4334,26 +5710,26 @@ void tst_QString::endsWith()
QVERIFY( !a.endsWith(QLatin1String("C")) );
QVERIFY( !a.endsWith(QLatin1String("ABCDEF")) );
QVERIFY( a.endsWith(QLatin1String("")) );
- QVERIFY( a.endsWith(QLatin1String(0)) );
-
- QVERIFY( a.endsWith("B", Qt::CaseSensitive) );
- QVERIFY( a.endsWith("B", Qt::CaseInsensitive) );
- QVERIFY( !a.endsWith("b", Qt::CaseSensitive) );
- QVERIFY( a.endsWith("b", Qt::CaseInsensitive) );
- QVERIFY( !a.endsWith("aB", Qt::CaseSensitive) );
- QVERIFY( a.endsWith("aB", Qt::CaseInsensitive) );
- QVERIFY( !a.endsWith("C", Qt::CaseSensitive) );
- QVERIFY( !a.endsWith("C", Qt::CaseInsensitive) );
- QVERIFY( !a.endsWith("c", Qt::CaseSensitive) );
- QVERIFY( !a.endsWith("c", Qt::CaseInsensitive) );
- QVERIFY( !a.endsWith("abcdef", Qt::CaseInsensitive) );
- QVERIFY( a.endsWith("", Qt::CaseInsensitive) );
+ QVERIFY( a.endsWith(QLatin1String(nullptr)) );
+
+ QVERIFY( a.endsWith(u"B"_s, Qt::CaseSensitive) );
+ QVERIFY( a.endsWith(u"B", Qt::CaseInsensitive) );
+ QVERIFY( !a.endsWith(u"b", Qt::CaseSensitive) );
+ QVERIFY( a.endsWith(u"b"_s, Qt::CaseInsensitive) );
+ QVERIFY( !a.endsWith(u"aB"_s, Qt::CaseSensitive) );
+ QVERIFY( a.endsWith(u"aB"_s, Qt::CaseInsensitive) );
+ QVERIFY( !a.endsWith(u"C"_s, Qt::CaseSensitive) );
+ QVERIFY( !a.endsWith(u"C"_s, Qt::CaseInsensitive) );
+ QVERIFY( !a.endsWith(u"c"_s, Qt::CaseSensitive) );
+ QVERIFY( !a.endsWith(u"c"_s, Qt::CaseInsensitive) );
+ QVERIFY( !a.endsWith(u"abcdef"_s, Qt::CaseInsensitive) );
+ QVERIFY( a.endsWith(u""_s, Qt::CaseInsensitive) );
QVERIFY( a.endsWith(QString(), Qt::CaseInsensitive) );
- QVERIFY( a.endsWith('b', Qt::CaseInsensitive) );
- QVERIFY( a.endsWith('B', Qt::CaseInsensitive) );
+ QVERIFY( a.endsWith(u'b', Qt::CaseInsensitive) );
+ QVERIFY( a.endsWith(u'B', Qt::CaseInsensitive) );
QVERIFY( a.endsWith(QLatin1Char('b'), Qt::CaseInsensitive) );
- QVERIFY( a.endsWith(QChar('b'), Qt::CaseInsensitive) );
- QVERIFY( !a.endsWith('c', Qt::CaseInsensitive) );
+ QVERIFY( a.endsWith(QChar(u'b'), Qt::CaseInsensitive) );
+ QVERIFY( !a.endsWith(u'c', Qt::CaseInsensitive) );
QVERIFY( !a.endsWith(QChar(), Qt::CaseInsensitive) );
QVERIFY( !a.endsWith(QLatin1Char(0), Qt::CaseInsensitive) );
@@ -4369,11 +5745,11 @@ void tst_QString::endsWith()
QVERIFY( !a.endsWith(QLatin1String("c"), Qt::CaseInsensitive) );
QVERIFY( !a.endsWith(QLatin1String("abcdef"), Qt::CaseInsensitive) );
QVERIFY( a.endsWith(QLatin1String(""), Qt::CaseInsensitive) );
- QVERIFY( a.endsWith(QLatin1String(0), Qt::CaseInsensitive) );
- QVERIFY( a.endsWith('B', Qt::CaseSensitive) );
+ QVERIFY( a.endsWith(QLatin1String(nullptr), Qt::CaseInsensitive) );
+ QVERIFY( a.endsWith(u'B', Qt::CaseSensitive) );
QVERIFY( a.endsWith(QLatin1Char('B'), Qt::CaseSensitive) );
- QVERIFY( a.endsWith(QChar('B'), Qt::CaseSensitive) );
- QVERIFY( !a.endsWith('b', Qt::CaseSensitive) );
+ QVERIFY( a.endsWith(QChar(u'B'), Qt::CaseSensitive) );
+ QVERIFY( !a.endsWith(u'b', Qt::CaseSensitive) );
QVERIFY( !a.endsWith(QChar(), Qt::CaseSensitive) );
QVERIFY( !a.endsWith(QLatin1Char(0), Qt::CaseSensitive) );
@@ -4383,28 +5759,28 @@ void tst_QString::endsWith()
TEST_VIEW_ENDS_WITH(QLatin1String("C"), false);
TEST_VIEW_ENDS_WITH(QLatin1String("ABCDEF"), false);
TEST_VIEW_ENDS_WITH(QLatin1String(""), true);
- TEST_VIEW_ENDS_WITH(QLatin1String(0), true);
+ TEST_VIEW_ENDS_WITH(QLatin1String(nullptr), true);
#undef TEST_VIEW_ENDS_WITH
- a = "";
- QVERIFY( a.endsWith("") );
+ a = u""_s;
+ QVERIFY( a.endsWith(u""_s) );
QVERIFY( a.endsWith(QString()) );
- QVERIFY( !a.endsWith("ABC") );
+ QVERIFY( !a.endsWith(u"ABC"_s) );
QVERIFY( !a.endsWith(QLatin1Char(0)) );
QVERIFY( !a.endsWith(QLatin1Char('x')) );
QVERIFY( !a.endsWith(QChar()) );
QVERIFY( a.endsWith(QLatin1String("")) );
- QVERIFY( a.endsWith(QLatin1String(0)) );
+ QVERIFY( a.endsWith(QLatin1String(nullptr)) );
QVERIFY( !a.endsWith(QLatin1String("ABC")) );
a = QString();
- QVERIFY( !a.endsWith("") );
+ QVERIFY( !a.endsWith(u""_s) );
QVERIFY( a.endsWith(QString()) );
- QVERIFY( !a.endsWith("ABC") );
+ QVERIFY( !a.endsWith(u"ABC"_s) );
QVERIFY( !a.endsWith(QLatin1String("")) );
- QVERIFY( a.endsWith(QLatin1String(0)) );
+ QVERIFY( a.endsWith(QLatin1String(nullptr)) );
QVERIFY( !a.endsWith(QLatin1String("ABC")) );
QVERIFY( !a.endsWith(QLatin1Char(0)) );
@@ -4412,12 +5788,12 @@ void tst_QString::endsWith()
QVERIFY( !a.endsWith(QChar()) );
// this test is independent of encoding
- a = "\xc3\xa9";
- QVERIFY( a.endsWith("\xc3\xa9") );
- QVERIFY( !a.endsWith("\xc3\xa1") );
+ a = u'é';
+ QVERIFY(a.endsWith(u"é"_s));
+ QVERIFY(!a.endsWith(u"á"_s));
// this one is dependent of encoding
- QVERIFY( a.endsWith("\xc3\x89", Qt::CaseInsensitive) );
+ QVERIFY(a.endsWith(u"É"_s, Qt::CaseInsensitive));
}
void tst_QString::check_QDataStream()
@@ -4426,7 +5802,7 @@ void tst_QString::check_QDataStream()
QByteArray ar;
{
QDataStream out(&ar,QIODevice::WriteOnly);
- out << QString("COMPARE Text");
+ out << u"COMPARE Text"_s;
}
{
QDataStream in(&ar,QIODevice::ReadOnly);
@@ -4441,7 +5817,7 @@ void tst_QString::check_QTextStream()
QByteArray ar;
{
QTextStream out(&ar,QIODevice::WriteOnly);
- out << QString("This is COMPARE Text");
+ out << u"This is COMPARE Text"_s;
}
{
QTextStream in(&ar,QIODevice::ReadOnly);
@@ -4454,21 +5830,21 @@ void tst_QString::check_QTextIOStream()
{
QString a;
{
- a="";
+ a = u""_s;
QTextStream ts(&a);
// invalid Utf8
ts << "pi \261= " << 3.125;
QCOMPARE(a, QString::fromUtf16(u"pi \xfffd= 3.125"));
}
{
- a="";
+ a = u""_s;
QTextStream ts(&a);
// valid Utf8
ts << "pi ø= " << 3.125;
QCOMPARE(a, QString::fromUtf16(u"pi ø= 3.125"));
}
{
- a="123 456";
+ a = u"123 456"_s;
int x,y;
QTextStream(&a) >> x >> y;
QCOMPARE(x,123);
@@ -4517,7 +5893,7 @@ void tst_QString::setRawData()
QVERIFY(cstr.data_ptr() == csd);
// This tests the discarding of the shared data object
- cstr = "foo";
+ cstr = QString::fromUtf8("foo");
QVERIFY(cstr.isDetached());
QVERIFY(cstr.constData() != ptr2);
@@ -4544,7 +5920,7 @@ void tst_QString::setUnicode()
QCOMPARE(str, QString(ptr, 1));
// make sure that the string is resized, even if the data is nullptr
- str = "test";
+ str = u"test"_s;
QCOMPARE(str.size(), 4);
str.setUnicode(nullptr, 1);
QCOMPARE(str.size(), 1);
@@ -4556,7 +5932,7 @@ void tst_QString::fromStdString()
QVERIFY(QString::fromStdString(std::string()).isEmpty());
std::string stroustrup = "foo";
QString eng = QString::fromStdString( stroustrup );
- QCOMPARE( eng, QString("foo") );
+ QCOMPARE( eng, u"foo"_s );
const char cnull[] = "Embedded\0null\0character!";
std::string stdnull( cnull, sizeof(cnull)-1 );
QString qtnull = QString::fromStdString( stdnull );
@@ -4569,23 +5945,25 @@ void tst_QString::toStdString()
QVERIFY(nullStr.toStdString().empty());
QVERIFY(!nullStr.isDetached());
- QString emptyStr("");
+ QString emptyStr(u""_s);
QVERIFY(emptyStr.toStdString().empty());
QVERIFY(!emptyStr.isDetached());
- QString nord = "foo";
+ QString nord = u"foo"_s;
std::string stroustrup1 = nord.toStdString();
QVERIFY( qstrcmp(stroustrup1.c_str(), "foo") == 0 );
+
// For now, most QString constructors are also broken with respect
// to embedded null characters, had to find one that works...
- const QChar qcnull[] = {
- 'E', 'm', 'b', 'e', 'd', 'd', 'e', 'd', '\0',
- 'n', 'u', 'l', 'l', '\0',
- 'c', 'h', 'a', 'r', 'a', 'c', 't', 'e', 'r', '!'
- };
- QString qtnull( qcnull, sizeof(qcnull)/sizeof(QChar) );
+ const char16_t utf16[] = u"Embedded\0null\0character!";
+ const size_t size = std::size(utf16) - 1; // - 1, null terminator of the string literal
+ QString qtnull(reinterpret_cast<const QChar *>(utf16), size);
+
std::string stdnull = qtnull.toStdString();
- QCOMPARE( int(stdnull.size()), qtnull.size() );
+ QCOMPARE(int(stdnull.size()), qtnull.size());
+
+ std::u16string stdu16null = qtnull.toStdU16String();
+ QCOMPARE(int(stdu16null.size()), qtnull.size());
}
void tst_QString::utf8()
@@ -4606,8 +5984,8 @@ void tst_QString::fromUtf8_data()
QTest::addColumn<int>("len");
QString str;
- QTest::newRow("str0") << QByteArray("abcdefgh") << QString("abcdefgh") << -1;
- QTest::newRow("str0-len") << QByteArray("abcdefgh") << QString("abc") << 3;
+ QTest::newRow("str0") << QByteArray("abcdefgh") << u"abcdefgh"_s << -1;
+ QTest::newRow("str0-len") << QByteArray("abcdefgh") << u"abc"_s << 3;
QTest::newRow("str1") << QByteArray("\303\266\303\244\303\274\303\226\303\204\303\234\303\270\303\246\303\245\303\230\303\206\303\205")
<< QString::fromLatin1("\366\344\374\326\304\334\370\346\345\330\306\305") << -1;
QTest::newRow("str1-len") << QByteArray("\303\266\303\244\303\274\303\226\303\204\303\234\303\270\303\246\303\245\303\230\303\206\303\205")
@@ -4622,22 +6000,22 @@ void tst_QString::fromUtf8_data()
QTest::newRow("str2-len") << QByteArray("\327\251\327\223\327\222") << str << 2;
str = QChar(0x20ac);
- str += " some text";
+ str += u" some text"_s;
QTest::newRow("str3") << QByteArray("\342\202\254 some text") << str << -1;
str = QChar(0x20ac);
- str += " some ";
+ str += u" some "_s;
QTest::newRow("str3-len") << QByteArray("\342\202\254 some text") << str << 9;
// test that QString::fromUtf8 suppresses an initial BOM, but not a ZWNBSP
- str = "hello";
+ str = u"hello"_s;
QByteArray bom("\357\273\277");
QTest::newRow("bom0") << bom << QString() << 3;
QTest::newRow("bom1") << bom + "hello" << str << -1;
QTest::newRow("bom+zwnbsp0") << bom + bom << QString(QChar(0xfeff)) << -1;
QTest::newRow("bom+zwnbsp1") << bom + "hello" + bom << str + QChar(0xfeff) << -1;
- str = "hello";
+ str = u"hello"_s;
str += QChar::ReplacementCharacter;
str += QChar(0x68);
str += QChar::ReplacementCharacter;
@@ -4647,19 +6025,19 @@ void tst_QString::fromUtf8_data()
str += QChar(0x61);
str += QChar::ReplacementCharacter;
QTest::newRow("invalid utf8") << QByteArray("hello\344h\344\344\366\344a\304") << str << -1;
- QTest::newRow("invalid utf8-len") << QByteArray("hello\344h\344\344\366\344a\304") << QString("hello") << 5;
+ QTest::newRow("invalid utf8-len") << QByteArray("hello\344h\344\344\366\344a\304") << u"hello"_s << 5;
- str = "Prohl";
+ str = u"Prohl"_s;
str += QChar::ReplacementCharacter;
str += QChar::ReplacementCharacter;
- str += "e";
+ str += u"e"_s;
str += QChar::ReplacementCharacter;
- str += " plugin";
+ str += u" plugin"_s;
str += QChar::ReplacementCharacter;
- str += " Netscape";
+ str += u" Netscape"_s;
QTest::newRow("invalid utf8 2") << QByteArray("Prohl\355\276e\350 plugin\371 Netscape") << str << -1;
- QTest::newRow("invalid utf8-len 2") << QByteArray("Prohl\355\276e\350 plugin\371 Netscape") << QString("") << 0;
+ QTest::newRow("invalid utf8-len 2") << QByteArray("Prohl\355\276e\350 plugin\371 Netscape") << u""_s << 0;
QTest::newRow("null-1") << QByteArray() << QString() << -1;
QTest::newRow("null0") << QByteArray() << QString() << 0;
@@ -4668,7 +6046,7 @@ void tst_QString::fromUtf8_data()
QTest::newRow("other-1") << QByteArray("ab\0cd", 5) << QString::fromLatin1("ab") << -1;
QTest::newRow("other5") << QByteArray("ab\0cd", 5) << QString::fromLatin1("ab\0cd", 5) << 5;
- str = "Old Italic: ";
+ str = u"Old Italic: "_s;
str += QChar(0xd800);
str += QChar(0xdf00);
str += QChar(0xd800);
@@ -4735,7 +6113,7 @@ void tst_QString::fromLocal8Bit_data()
for (int l=0;l<111;l++) {
longQByteArray = longQByteArray + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
- longQString += "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ longQString += u"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"_s;
}
//QTest::newRow("longString") << longQByteArray << -1 << longQString;
@@ -4759,8 +6137,8 @@ void tst_QString::fromLocal8Bit()
QFETCH(int, len);
QFETCH(QString, result);
- QCOMPARE(QString::fromLocal8Bit(local8Bit.isNull() ? 0 : local8Bit.data(), len).length(),
- result.length());
+ QCOMPARE(QString::fromLocal8Bit(local8Bit.isNull() ? 0 : local8Bit.data(), len).size(),
+ result.size());
QCOMPARE(QString::fromLocal8Bit(local8Bit.isNull() ? 0 : local8Bit.data(), len), result);
}
@@ -4770,19 +6148,19 @@ void tst_QString::local8Bit_data()
QTest::addColumn<QByteArray>("result");
QTest::newRow("nullString") << QString() << QByteArray();
- QTest::newRow("emptyString") << QString("") << QByteArray("");
- QTest::newRow("string") << QString("test") << QByteArray("test");
+ QTest::newRow("emptyString") << u""_s << QByteArray("");
+ QTest::newRow("string") << u"test"_s << QByteArray("test");
QByteArray longQByteArray;
QString longQString;
for (int l=0;l<111;l++) {
longQByteArray = longQByteArray + "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
- longQString += "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ longQString += u"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"_s;
}
QTest::newRow("longString") << longQString << longQByteArray;
- QTest::newRow("someNonAlphaChars") << QString("d:/this/is/a/test.h") << QByteArray("d:/this/is/a/test.h");
+ QTest::newRow("someNonAlphaChars") << u"d:/this/is/a/test.h"_s << QByteArray("d:/this/is/a/test.h");
}
void tst_QString::local8Bit()
@@ -4799,7 +6177,7 @@ void tst_QString::invalidToLocal8Bit_data()
QTest::addColumn<QByteArray>("expect"); // Initial validly-converted prefix
{
- const QChar malformed[] = { 'A', QChar(0xd800), 'B', '\0' };
+ const QChar malformed[] = { u'A', QChar(0xd800), u'B', u'\0' };
const char expected[] = "A";
QTest::newRow("LoneHighSurrogate")
<< QString(malformed, sizeof(malformed) / sizeof(QChar))
@@ -4807,28 +6185,28 @@ void tst_QString::invalidToLocal8Bit_data()
<< QByteArray(expected, sizeof(expected) / sizeof(char) - 1);
}
{
- const QChar malformed[] = { 'A', QChar(0xdc00), 'B', '\0' };
+ const QChar malformed[] = { u'A', QChar(0xdc00), u'B', u'\0' };
const char expected[] = "A";
QTest::newRow("LoneLowSurrogate")
<< QString(malformed, sizeof(malformed) / sizeof(QChar))
<< QByteArray(expected, sizeof(expected) / sizeof(char) - 1);
}
{
- const QChar malformed[] = { 'A', QChar(0xd800), QChar(0xd801), 'B', '\0' };
+ const QChar malformed[] = { u'A', QChar(0xd800), QChar(0xd801), u'B', u'\0' };
const char expected[] = "A";
QTest::newRow("DoubleHighSurrogate")
<< QString(malformed, sizeof(malformed) / sizeof(QChar))
<< QByteArray(expected, sizeof(expected) / sizeof(char) - 1);
}
{
- const QChar malformed[] = { 'A', QChar(0xdc00), QChar(0xdc01), 'B', '\0' };
+ const QChar malformed[] = { u'A', QChar(0xdc00), QChar(0xdc01), u'B', u'\0' };
const char expected[] = "A";
QTest::newRow("DoubleLowSurrogate")
<< QString(malformed, sizeof(malformed) / sizeof(QChar))
<< QByteArray(expected, sizeof(expected) / sizeof(char) - 1);
}
{
- const QChar malformed[] = { 'A', QChar(0xdc00), QChar(0xd800), 'B', '\0' };
+ const QChar malformed[] = { u'A', QChar(0xdc00), QChar(0xd800), u'B', u'\0' };
const char expected[] = "A";
QTest::newRow("ReversedSurrogates") // low before high
<< QString(malformed, sizeof(malformed) / sizeof(QChar))
@@ -4897,21 +6275,48 @@ void tst_QString::fromLatin1Roundtrip()
// Qt Test safety check:
QCOMPARE(latin1.isNull(), unicode.isNull());
QCOMPARE(latin1.isEmpty(), unicode.isEmpty());
- QCOMPARE(latin1.length(), unicode.length());
+ QCOMPARE(latin1.size(), unicode.size());
+
+ auto roundtripTest = [&]() {
+ // fromLatin1
+ QString fromLatin1 = QString::fromLatin1(latin1, latin1.length());
+ QCOMPARE(fromLatin1.length(), unicode.length());
+ QCOMPARE(fromLatin1, unicode);
+
+ // and back:
+ QByteArray toLatin1 = unicode.toLatin1();
+ QCOMPARE(toLatin1.length(), latin1.length());
+ QCOMPARE(toLatin1, latin1);
+ };
- if (!latin1.isEmpty())
- while (latin1.length() < 128) {
- latin1 += latin1;
- unicode += unicode;
- }
+ roundtripTest();
- // fromLatin1
- QCOMPARE(QString::fromLatin1(latin1, latin1.length()).length(), unicode.length());
- QCOMPARE(QString::fromLatin1(latin1, latin1.length()), unicode);
+ if (latin1.isEmpty())
+ return;
- // and back:
- QCOMPARE(unicode.toLatin1().length(), latin1.length());
- QCOMPARE(unicode.toLatin1(), latin1);
+ if (QTest::currentTestFailed()) QFAIL("failed");
+ while (latin1.length() < 16) {
+ latin1 += latin1;
+ unicode += unicode;
+ }
+ roundtripTest();
+
+ // double again (length will be > 32)
+ if (QTest::currentTestFailed()) QFAIL("failed");
+ latin1 += latin1;
+ unicode += unicode;
+ roundtripTest();
+
+ // double again (length will be > 64)
+ if (QTest::currentTestFailed()) QFAIL("failed");
+ latin1 += latin1;
+ unicode += unicode;
+ roundtripTest();
+
+ if (QTest::currentTestFailed()) QFAIL("failed");
+ latin1 += latin1;
+ unicode += unicode;
+ roundtripTest();
}
void tst_QString::toLatin1Roundtrip_data()
@@ -4952,32 +6357,32 @@ void tst_QString::toLatin1Roundtrip()
// Qt Test safety check:
QCOMPARE(latin1.isNull(), unicodesrc.isNull());
QCOMPARE(latin1.isEmpty(), unicodesrc.isEmpty());
- QCOMPARE(latin1.length(), unicodesrc.length());
+ QCOMPARE(latin1.size(), unicodesrc.size());
QCOMPARE(latin1.isNull(), unicodedst.isNull());
QCOMPARE(latin1.isEmpty(), unicodedst.isEmpty());
- QCOMPARE(latin1.length(), unicodedst.length());
+ QCOMPARE(latin1.size(), unicodedst.size());
if (!latin1.isEmpty())
- while (latin1.length() < 128) {
+ while (latin1.size() < 128) {
latin1 += latin1;
unicodesrc += unicodesrc;
unicodedst += unicodedst;
}
// toLatin1
- QCOMPARE(unicodesrc.toLatin1().length(), latin1.length());
+ QCOMPARE(unicodesrc.toLatin1().size(), latin1.size());
QCOMPARE(unicodesrc.toLatin1(), latin1);
// and back:
- QCOMPARE(QString::fromLatin1(latin1, latin1.length()).length(), unicodedst.length());
- QCOMPARE(QString::fromLatin1(latin1, latin1.length()), unicodedst);
+ QCOMPARE(QString::fromLatin1(latin1, latin1.size()).size(), unicodedst.size());
+ QCOMPARE(QString::fromLatin1(latin1, latin1.size()), unicodedst);
// try the rvalue version of toLatin1()
QString s = unicodesrc;
QCOMPARE(std::move(s).toLatin1(), latin1);
// and verify that the moved-from object can still be used
- s = "foo";
+ s = u"foo"_s;
s.clear();
}
@@ -5040,13 +6445,13 @@ void tst_QString::fromUcs4()
static const char32_t str1[] = U"Hello Unicode World";
s = QString::fromUcs4(str1, sizeof(str1) / sizeof(str1[0]) - 1);
- QCOMPARE(s, QString("Hello Unicode World"));
+ QCOMPARE(s, u"Hello Unicode World");
s = QString::fromUcs4(str1);
- QCOMPARE(s, QString("Hello Unicode World"));
+ QCOMPARE(s, u"Hello Unicode World");
s = QString::fromUcs4(str1, 5);
- QCOMPARE(s, QString("Hello"));
+ QCOMPARE(s, u"Hello");
s = QString::fromUcs4(U"\u221212\U000020AC\U00010000");
QCOMPARE(s, QString::fromUtf8("\342\210\222" "12" "\342\202\254" "\360\220\200\200"));
@@ -5143,61 +6548,72 @@ void tst_QString::arg()
is all messed up, because Qt Test itself uses QString::arg().
*/
- TransientDefaultLocale transient(QLocale(QString("de_DE")));
+ TransientDefaultLocale transient(QLocale(u"de_DE"));
QString s3;
- QString s4( "[%0]" );
- QString s5( "[%1]" );
- QString s6( "[%3]" );
- QString s7( "[%9]" );
- QString s8( "[%0 %1]" );
- QString s9( "[%0 %3]" );
- QString s10( "[%1 %2 %3]" );
- QString s11( "[%9 %3 %0]" );
- QString s12( "[%9 %1 %3 %9 %0 %8]" );
- QString s13( "%1% %x%c%2 %d%2-%" );
- QString s14( "%1%2%3" );
-
- QCOMPARE( s4.arg("foo"), QLatin1String("[foo]") );
+ QString s4(u"[%0]"_s);
+ QString s5(u"[%1]"_s);
+ QString s6(u"[%3]"_s);
+ QString s7(u"[%9]"_s);
+ QString s8(u"[%0 %1]"_s);
+ QString s9(u"[%0 %3]"_s);
+ QString s10(u"[%1 %2 %3]"_s);
+ QString s11(u"[%9 %3 %0]"_s);
+ QString s12(u"[%9 %1 %3 %9 %0 %8]"_s);
+ QString s13(u"%1% %x%c%2 %d%2-%"_s);
+ QString s14(u"%1%2%3"_s);
+
+ const QString null;
+ const QString empty(u""_s);
+ const QString foo(u"foo"_s);
+ const QString bar(u"bar"_s);
+
+ Q_ASSERT(null.isNull());
+ Q_ASSERT(!empty.isNull());
+ QCOMPARE(s4.arg(null), "[]"_L1);
+ QCOMPARE(s4.arg(empty), "[]"_L1);
+ QCOMPARE(s4.arg(QStringView()), "[]"_L1);
+ QCOMPARE(s4.arg(QStringView(u"")), "[]"_L1);
+
+ QCOMPARE(s4.arg(foo), "[foo]"_L1);
QCOMPARE( s5.arg(QLatin1String("foo")), QLatin1String("[foo]") );
QCOMPARE( s6.arg(u"foo"), QLatin1String("[foo]") );
- QCOMPARE( s7.arg("foo"), QLatin1String("[foo]") );
- QCOMPARE( s8.arg("foo"), QLatin1String("[foo %1]") );
- QCOMPARE( s8.arg("foo").arg("bar"), QLatin1String("[foo bar]") );
- QCOMPARE( s8.arg("foo", "bar"), QLatin1String("[foo bar]") );
- QCOMPARE( s9.arg("foo"), QLatin1String("[foo %3]") );
- QCOMPARE( s9.arg("foo").arg("bar"), QLatin1String("[foo bar]") );
- QCOMPARE( s9.arg("foo", "bar"), QLatin1String("[foo bar]") );
- QCOMPARE( s10.arg("foo"), QLatin1String("[foo %2 %3]") );
- QCOMPARE( s10.arg("foo").arg("bar"), QLatin1String("[foo bar %3]") );
- QCOMPARE( s10.arg("foo", "bar"), QLatin1String("[foo bar %3]") );
- QCOMPARE( s10.arg("foo").arg("bar").arg("baz"), QLatin1String("[foo bar baz]") );
- QCOMPARE( s10.arg("foo", "bar", "baz"), QLatin1String("[foo bar baz]") );
- QCOMPARE( s11.arg("foo"), QLatin1String("[%9 %3 foo]") );
- QCOMPARE( s11.arg("foo").arg("bar"), QLatin1String("[%9 bar foo]") );
- QCOMPARE( s11.arg("foo", "bar"), QLatin1String("[%9 bar foo]") );
- QCOMPARE( s11.arg("foo").arg("bar").arg("baz"), QLatin1String("[baz bar foo]") );
- QCOMPARE( s11.arg("foo", "bar", "baz"), QLatin1String("[baz bar foo]") );
- QCOMPARE( s12.arg("a").arg("b").arg("c").arg("d").arg("e"),
+ QCOMPARE(s7.arg(foo), "[foo]"_L1);
+ QCOMPARE(s8.arg(foo), "[foo %1]"_L1);
+ QCOMPARE(s8.arg(foo).arg(bar), "[foo bar]"_L1);
+ QCOMPARE(s8.arg(foo, bar), "[foo bar]"_L1);
+ QCOMPARE(s9.arg(foo), "[foo %3]"_L1);
+ QCOMPARE(s9.arg(foo).arg(bar), "[foo bar]"_L1);
+ QCOMPARE(s9.arg(foo, bar), "[foo bar]"_L1);
+ QCOMPARE(s10.arg(foo), "[foo %2 %3]"_L1);
+ QCOMPARE(s10.arg(foo).arg(bar), "[foo bar %3]"_L1);
+ QCOMPARE(s10.arg(foo, bar), "[foo bar %3]"_L1);
+ QCOMPARE(s10.arg(foo).arg(bar).arg(u"baz"_s), "[foo bar baz]"_L1);
+ QCOMPARE(s10.arg(foo, bar, u"baz"_s), "[foo bar baz]"_L1);
+ QCOMPARE(s11.arg(foo), "[%9 %3 foo]"_L1);
+ QCOMPARE(s11.arg(foo).arg(bar), "[%9 bar foo]"_L1);
+ QCOMPARE(s11.arg(foo, bar), "[%9 bar foo]"_L1);
+ QCOMPARE(s11.arg(foo).arg(bar).arg(u"baz"_s), "[baz bar foo]"_L1);
+ QCOMPARE(s11.arg(foo, bar, u"baz"_s), "[baz bar foo]"_L1);
+ QCOMPARE( s12.arg(u"a"_s).arg(u"b"_s).arg(u"c"_s).arg(u"d"_s).arg(u"e"_s),
QLatin1String("[e b c e a d]") );
- QCOMPARE( s12.arg("a", "b", "c", "d").arg("e"), QLatin1String("[e b c e a d]") );
- QCOMPARE( s12.arg("a").arg("b", "c", "d", "e"), QLatin1String("[e b c e a d]") );
- QCOMPARE( s13.arg("alpha").arg("beta"),
+ QCOMPARE(s12.arg(u"a"_s, u"b"_s, u"c"_s, u"d"_s).arg(u"e"_s), "[e b c e a d]"_L1);
+ QCOMPARE(s12.arg(u"a"_s).arg(u"b"_s, u"c"_s, u"d"_s, u"e"_s), "[e b c e a d]"_L1);
+ QCOMPARE( s13.arg(u"alpha"_s).arg(u"beta"_s),
QLatin1String("alpha% %x%cbeta %dbeta-%") );
- QCOMPARE( s13.arg("alpha", "beta"), QLatin1String("alpha% %x%cbeta %dbeta-%") );
- QCOMPARE( s14.arg("a", "b", "c"), QLatin1String("abc") );
- QCOMPARE( s8.arg("%1").arg("foo"), QLatin1String("[foo foo]") );
- QCOMPARE( s8.arg("%1", "foo"), QLatin1String("[%1 foo]") );
- QCOMPARE( s4.arg("foo", 2), QLatin1String("[foo]") );
- QCOMPARE( s4.arg("foo", -2), QLatin1String("[foo]") );
- QCOMPARE( s4.arg("foo", 10), QLatin1String("[ foo]") );
- QCOMPARE( s4.arg("foo", -10), QLatin1String("[foo ]") );
-
- QString firstName( "James" );
- QString lastName( "Bond" );
- QString fullName = QString( "My name is %2, %1 %2" )
- .arg( firstName ).arg( lastName );
- QCOMPARE( fullName, QLatin1String("My name is Bond, James Bond") );
+ QCOMPARE(s13.arg(u"alpha"_s, u"beta"_s), "alpha% %x%cbeta %dbeta-%"_L1);
+ QCOMPARE(s14.arg(u"a"_s, u"b"_s, u"c"_s), "abc"_L1);
+ QCOMPARE(s8.arg(u"%1"_s).arg(foo), "[foo foo]"_L1);
+ QCOMPARE(s8.arg(u"%1"_s, foo), "[%1 foo]"_L1);
+ QCOMPARE(s4.arg(foo, 2), "[foo]"_L1);
+ QCOMPARE(s4.arg(foo, -2), "[foo]"_L1);
+ QCOMPARE(s4.arg(foo, 10), "[ foo]"_L1);
+ QCOMPARE(s4.arg(foo, -10), "[foo ]"_L1);
+
+ QString firstName(u"James"_s);
+ QString lastName(u"Bond"_s);
+ QString fullName = QString(u"My name is %2, %1 %2"_s).arg(firstName).arg(lastName);
+ QCOMPARE(fullName, QLatin1String("My name is Bond, James Bond"));
// ### Qt 7: clean this up, leave just the #else branch
#if QT_VERSION < QT_VERSION_CHECK(6, 6, 0)
@@ -5220,12 +6636,12 @@ void tst_QString::arg()
QCOMPARE( QString("%2²%1").arg("a").arg("b"), QString("ba") );
#else
QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: %¹, foo");
- QCOMPARE( QString("%¹").arg("foo"), QString("%¹") );
- QCOMPARE( QString("%¹%1").arg("foo"), QString("%¹foo") );
- QCOMPARE( QString("%1²").arg("E=mc"), QString("E=mc²") );
- QCOMPARE( QString("%1²%2").arg("a").arg("b"), QString("a²b") );
- QCOMPARE( QString("%¹%1²%2").arg("a").arg("b"), QString("%¹a²b") );
- QCOMPARE( QString("%2²%1").arg("a").arg("b"), QString("b²a") );
+ QCOMPARE(u"%¹"_s.arg(foo), u"%¹");
+ QCOMPARE(u"%¹%1"_s.arg(foo), u"%¹foo");
+ QCOMPARE(u"%1²"_s.arg(u"E=mc"_s), u"E=mc²");
+ QCOMPARE(u"%1²%2"_s.arg(u"a"_s).arg(u"b"_s), u"a²b");
+ QCOMPARE(u"%¹%1²%2"_s.arg(u"a"_s).arg(u"b"_s), u"%¹a²b");
+ QCOMPARE(u"%2²%1"_s.arg(u"a"_s).arg(u"b"_s), u"b²a");
#endif
// number overloads
@@ -5236,98 +6652,104 @@ void tst_QString::arg()
QLatin1String("[9223372036854775807]") );
QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: , foo");
- QCOMPARE(QString().arg("foo"), QString());
+ QCOMPARE(QString().arg(foo), QString());
QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \"\" , 0");
QCOMPARE( QString().arg(0), QString() );
QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \"\" , 0");
- QCOMPARE( QString("").arg(0), QString("") );
+ QCOMPARE(QString(u""_s).arg(0), u""_s);
QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \" \" , 0");
- QCOMPARE( QString(" ").arg(0), QLatin1String(" ") );
+ QCOMPARE(QString(u" "_s).arg(0), " "_L1);
QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \"%\" , 0");
- QCOMPARE( QString("%").arg(0), QLatin1String("%") );
+ QCOMPARE(QString(u"%"_s).arg(0), "%"_L1);
QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \"%%\" , 0");
- QCOMPARE( QString("%%").arg(0), QLatin1String("%%") );
+ QCOMPARE(QString(u"%%"_s).arg(0), "%%"_L1);
QTest::ignoreMessage(QtWarningMsg, "QString::arg: Argument missing: \"%%%\" , 0");
- QCOMPARE( QString("%%%").arg(0), QLatin1String("%%%") );
- QCOMPARE( QString("%%%1%%%2").arg("foo").arg("bar"), QLatin1String("%%foo%%bar") );
-
- QCOMPARE( QString("%1").arg("hello", -10), QLatin1String("hello ") );
- QCOMPARE( QString("%1").arg(QLatin1String("hello"), -5), QLatin1String("hello") );
- QCOMPARE( QString("%1").arg(u"hello", -2), QLatin1String("hello") );
- QCOMPARE( QString("%1").arg("hello", 0), QLatin1String("hello") );
- QCOMPARE( QString("%1").arg(QLatin1String("hello"), 2), QLatin1String("hello") );
- QCOMPARE( QString("%1").arg(u"hello", 5), QLatin1String("hello") );
- QCOMPARE( QString("%1").arg("hello", 10), QLatin1String(" hello") );
- QCOMPARE( QString("%1%1").arg("hello"), QLatin1String("hellohello") );
- QCOMPARE( QString("%2%1").arg("hello"), QLatin1String("%2hello") );
- QCOMPARE( QString("%1%1").arg(QString()), QLatin1String("") );
- QCOMPARE( QString("%2%1").arg(""), QLatin1String("%2") );
-
- QCOMPARE( QString("%2 %L1").arg(12345.6789).arg(12345.6789),
+ QCOMPARE(QString(u"%%%"_s).arg(0), "%%%"_L1);
+ QCOMPARE(QString(u"%%%1%%%2"_s).arg(foo).arg(bar), "%%foo%%bar"_L1);
+
+ QCOMPARE(u"%1"_s.arg(null, 3), " "_L1);
+ QCOMPARE(u"%1"_s.arg(empty, 3), " "_L1);
+ QCOMPARE(u"%1"_s.arg(QStringView(), 3), " "_L1);
+ QCOMPARE(u"%1"_s.arg(QStringView(u""), 3), " "_L1);
+ QCOMPARE(u"%1%1"_s.arg(null), ""_L1);
+ QCOMPARE(u"%2%1"_s.arg(empty), "%2"_L1);
+ QCOMPARE(u"%2%1"_s.arg(QStringView()), "%2"_L1);
+ QCOMPARE(u"%2%1"_s.arg(QStringView(u"")), "%2"_L1);
+ QCOMPARE(u"%1"_s.arg(u"hello"_s, -10), "hello "_L1);
+ QCOMPARE(u"%1"_s.arg("hello"_L1, -5), "hello"_L1);
+ QCOMPARE(u"%1"_s.arg(u"hello", -2), "hello"_L1);
+ QCOMPARE(u"%1"_s.arg(u"hello"_s, 0), "hello"_L1);
+ QCOMPARE(u"%1"_s.arg("hello"_L1, 2), "hello"_L1);
+ QCOMPARE(u"%1"_s.arg(u"hello", 5), "hello"_L1);
+ QCOMPARE(u"%1"_s.arg(u"hello"_s, 10), " hello"_L1);
+ QCOMPARE(u"%1%1"_s.arg(u"hello"_s), "hellohello"_L1);
+ QCOMPARE(u"%2%1"_s.arg(u"hello"_s), "%2hello"_L1);
+
+ QCOMPARE( QString(u"%2 %L1"_s).arg(12345.6789).arg(12345.6789),
QLatin1String("12345.7 12.345,7") );
- QCOMPARE( QString("[%2] [%L1]").arg(12345.6789, 9).arg(12345.6789, 9),
+ QCOMPARE( QString(u"[%2] [%L1]"_s).arg(12345.6789, 9).arg(12345.6789, 9),
QLatin1String("[ 12345.7] [ 12.345,7]") );
- QCOMPARE( QString("[%2] [%L1]").arg(12345.6789, 9, 'g', 7).arg(12345.6789, 9, 'g', 7),
+ QCOMPARE( QString(u"[%2] [%L1]"_s).arg(12345.6789, 9, 'g', 7).arg(12345.6789, 9, 'g', 7),
QLatin1String("[ 12345.68] [12.345,68]") );
- QCOMPARE( QString("[%2] [%L1]").arg(12345.6789, 10, 'g', 7, QLatin1Char('0')).arg(12345.6789, 10, 'g', 7, QLatin1Char('0')),
+ QCOMPARE( QString(u"[%2] [%L1]"_s).arg(12345.6789, 10, 'g', 7, QLatin1Char('0')).arg(12345.6789, 10, 'g', 7, QLatin1Char('0')),
QLatin1String("[0012345.68] [012.345,68]") );
- QCOMPARE( QString("%2 %L1").arg(123456789).arg(123456789),
+ QCOMPARE( QString(u"%2 %L1"_s).arg(123456789).arg(123456789),
QLatin1String("123456789 123.456.789") );
- QCOMPARE( QString("[%2] [%L1]").arg(123456789, 12).arg(123456789, 12),
+ QCOMPARE( QString(u"[%2] [%L1]"_s).arg(123456789, 12).arg(123456789, 12),
QLatin1String("[ 123456789] [ 123.456.789]") );
- QCOMPARE( QString("[%2] [%L1]").arg(123456789, 13, 10, QLatin1Char('0')).arg(123456789, 12, 10, QLatin1Char('0')),
+ QCOMPARE( QString(u"[%2] [%L1]"_s).arg(123456789, 13, 10, QLatin1Char('0')).arg(123456789, 12, 10, QLatin1Char('0')),
QLatin1String("[000123456789] [00123.456.789]") );
- QCOMPARE( QString("[%2] [%L1]").arg(123456789, 13, 16, QLatin1Char('0')).arg(123456789, 12, 16, QLatin1Char('0')),
+ QCOMPARE( QString(u"[%2] [%L1]"_s).arg(123456789, 13, 16, QLatin1Char('0')).arg(123456789, 12, 16, QLatin1Char('0')),
QLatin1String("[0000075bcd15] [00000075bcd15]") );
- QCOMPARE( QString("%L2 %L1 %3").arg(12345.7).arg(123456789).arg('c'),
+ QCOMPARE( QString(u"%L2 %L1 %3"_s).arg(12345.7).arg(123456789).arg('c'),
QLatin1String("123.456.789 12.345,7 c") );
// multi-digit replacement
- QString input("%%%L0 %1 %02 %3 %4 %5 %L6 %7 %8 %%% %090 %10 %11 %L12 %14 %L9888 %9999 %%%%%%%L");
- input = input.arg("A").arg("B").arg("C")
- .arg("D").arg("E").arg("f")
- .arg("g").arg("h").arg("i").arg("j")
- .arg("k").arg("l").arg("m")
- .arg("n").arg("o").arg("p");
+ QString input(u"%%%L0 %1 %02 %3 %4 %5 %L6 %7 %8 %%% %090 %10 %11 %L12 %14 %L9888 %9999 %%%%%%%L"_s);
+ input = input.arg(u"A"_s).arg(u"B"_s).arg(u"C"_s)
+ .arg(u"D"_s).arg(u"E"_s).arg(u"f"_s)
+ .arg(u"g"_s).arg(u"h"_s).arg(u"i"_s).arg(u"j"_s)
+ .arg(u"k"_s).arg(u"l"_s).arg(u"m"_s)
+ .arg(u"n"_s).arg(u"o"_s).arg(u"p"_s);
QCOMPARE(input, QLatin1String("%%A B C D E f g h i %%% j0 k l m n o88 p99 %%%%%%%L"));
- QString str("%1 %2 %3 %4 %5 %6 %7 %8 %9 foo %10 %11 bar");
- str = str.arg("one", "2", "3", "4", "5", "6", "7", "8", "9");
- str = str.arg("ahoy", "there");
- QCOMPARE(str, QLatin1String("one 2 3 4 5 6 7 8 9 foo ahoy there bar"));
+ QString str(u"%1 %2 %3 %4 %5 %6 %7 %8 %9 foo %10 %11 bar"_s);
+ str = str.arg(u"one"_s, u"2"_s, u"3"_s, u"4"_s, u"5"_s, u"6"_s, u"7"_s, u"8"_s, u"9"_s);
+ str = str.arg(u"ahoy"_s, u"there"_s);
+ QCOMPARE(str, "one 2 3 4 5 6 7 8 9 foo ahoy there bar"_L1);
- QString str2("%123 %234 %345 %456 %567 %999 %1000 %1230");
- str2 = str2.arg("A", "B", "C", "D", "E", "F");
+ QString str2(u"%123 %234 %345 %456 %567 %999 %1000 %1230"_s);
+ str2 = str2.arg(u"A"_s, u"B"_s, u"C"_s, u"D"_s, u"E"_s, u"F"_s);
QCOMPARE(str2, QLatin1String("A B C D E F %1000 %1230"));
- QCOMPARE(QString("%1").arg(-1, 3, 10, QChar('0')), QLatin1String("-01"));
- QCOMPARE(QString("%1").arg(-100, 3, 10, QChar('0')), QLatin1String("-100"));
- QCOMPARE(QString("%1").arg(-1, 3, 10, QChar(' ')), QLatin1String(" -1"));
- QCOMPARE(QString("%1").arg(-100, 3, 10, QChar(' ')), QLatin1String("-100"));
- QCOMPARE(QString("%1").arg(1U, 3, 10, QChar(' ')), QLatin1String(" 1"));
- QCOMPARE(QString("%1").arg(1000U, 3, 10, QChar(' ')), QLatin1String("1000"));
- QCOMPARE(QString("%1").arg(-1, 3, 10, QChar('x')), QLatin1String("x-1"));
- QCOMPARE(QString("%1").arg(-100, 3, 10, QChar('x')), QLatin1String("-100"));
- QCOMPARE(QString("%1").arg(1U, 3, 10, QChar('x')), QLatin1String("xx1"));
- QCOMPARE(QString("%1").arg(1000U, 3, 10, QChar('x')), QLatin1String("1000"));
-
- QCOMPARE(QString("%1").arg(-1., 3, 'g', -1, QChar('0')), QLatin1String("-01"));
- QCOMPARE(QString("%1").arg(-100., 3, 'g', -1, QChar('0')), QLatin1String("-100"));
- QCOMPARE(QString("%1").arg(-1., 3, 'g', -1, QChar(' ')), QLatin1String(" -1"));
- QCOMPARE(QString("%1").arg(-100., 3, 'g', -1, QChar(' ')), QLatin1String("-100"));
- QCOMPARE(QString("%1").arg(1., 3, 'g', -1, QChar('x')), QLatin1String("xx1"));
- QCOMPARE(QString("%1").arg(1000., 3, 'g', -1, QChar('x')), QLatin1String("1000"));
- QCOMPARE(QString("%1").arg(-1., 3, 'g', -1, QChar('x')), QLatin1String("x-1"));
- QCOMPARE(QString("%1").arg(-100., 3, 'g', -1, QChar('x')), QLatin1String("-100"));
-
- transient.revise(QLocale(QString("ar")));
- QCOMPARE( QString("%L1").arg(12345.6789, 10, 'g', 7, QLatin1Char('0')),
- QString::fromUtf8("\xd9\xa0\xd9\xa1\xd9\xa2\xd9\xac\xd9\xa3\xd9\xa4\xd9\xa5\xd9\xab\xd9\xa6\xd9\xa8") ); // "٠١٢٬٣٤٥٫٦٨"
- QCOMPARE( QString("%L1").arg(123456789, 13, 10, QLatin1Char('0')),
- QString("\xd9\xa0\xd9\xa0\xd9\xa1\xd9\xa2\xd9\xa3\xd9\xac\xd9\xa4\xd9\xa5\xd9\xa6\xd9\xac\xd9\xa7\xd9\xa8\xd9\xa9") ); // ٠٠١٢٣٬٤٥٦٬٧٨٩
+ QCOMPARE(u"%1"_s.arg(-1, 3, 10, QChar(u'0')), "-01"_L1);
+ QCOMPARE(u"%1"_s.arg(-100, 3, 10, QChar(u'0')), "-100"_L1);
+ QCOMPARE(u"%1"_s.arg(-1, 3, 10, QChar(u' ')), " -1"_L1);
+ QCOMPARE(u"%1"_s.arg(-100, 3, 10, QChar(u' ')), "-100"_L1);
+ QCOMPARE(u"%1"_s.arg(1U, 3, 10, QChar(u' ')), " 1"_L1);
+ QCOMPARE(u"%1"_s.arg(1000U, 3, 10, QChar(u' ')), "1000"_L1);
+ QCOMPARE(u"%1"_s.arg(-1, 3, 10, QChar(u'x')), "x-1"_L1);
+ QCOMPARE(u"%1"_s.arg(-100, 3, 10, QChar(u'x')), "-100"_L1);
+ QCOMPARE(u"%1"_s.arg(1U, 3, 10, QChar(u'x')), "xx1"_L1);
+ QCOMPARE(u"%1"_s.arg(1000U, 3, 10, QChar(u'x')), "1000"_L1);
+
+ QCOMPARE(u"%1"_s.arg(-1., 3, 'g', -1, QChar(u'0')), "-01"_L1);
+ QCOMPARE(u"%1"_s.arg(-100., 3, 'g', -1, QChar(u'0')), "-100"_L1);
+ QCOMPARE(u"%1"_s.arg(-1., 3, 'g', -1, QChar(u' ')), " -1"_L1);
+ QCOMPARE(u"%1"_s.arg(-100., 3, 'g', -1, QChar(u' ')), "-100"_L1);
+ QCOMPARE(u"%1"_s.arg(1., 3, 'g', -1, QChar(u'x')), "xx1"_L1);
+ QCOMPARE(u"%1"_s.arg(1000., 3, 'g', -1, QChar(u'x')), "1000"_L1);
+ QCOMPARE(u"%1"_s.arg(-1., 3, 'g', -1, QChar(u'x')), "x-1"_L1);
+ QCOMPARE(u"%1"_s.arg(-100., 3, 'g', -1, QChar(u'x')), "-100"_L1);
+
+ transient.revise(QLocale(u"ar"_s));
+ QCOMPARE(u"%L1"_s.arg(12345.6789, 10, 'g', 7, QLatin1Char('0')),
+ u"\u0660\u0661\u0662\u066c\u0663\u0664\u0665\u066b\u0666\u0668"); // "٠١٢٬٣٤٥٫٦٨"
+ QCOMPARE(u"%L1"_s.arg(123456789, 13, 10, QLatin1Char('0')),
+ u"\u0660\u0660\u0661\u0662\u0663\u066c\u0664\u0665\u0666\u066c\u0667\u0668\u0669"); // ٠٠١٢٣٬٤٥٦٬٧٨٩
}
void tst_QString::number()
@@ -5356,11 +6778,11 @@ void tst_QString::number_double_data()
QTest::addRow("%s, format '%c', precision %d", title, datum.f, datum.p)
<< datum.d << datum.f << datum.p << datum.expected.toString();
if (datum.f != 'f') { // Also test uppercase format
- datum.f = toupper(datum.f);
+ datum.f = QtMiscUtils::toAsciiUpper(datum.f);
QString upper = datum.expected.toString().toUpper();
QString upperTitle = QString::fromLatin1(title);
if (!datum.optTitle.isEmpty())
- upperTitle += ", uppercase";
+ upperTitle += u", uppercase"_s;
else
upperTitle = upperTitle.toUpper();
QTest::addRow("%s, format '%c', precision %d", qPrintable(upper), datum.f, datum.p)
@@ -5374,6 +6796,11 @@ void tst_QString::number_double()
QFETCH(double, value);
QFETCH(char, format);
QFETCH(int, precision);
+ if constexpr (std::numeric_limits<double>::has_denorm != std::denorm_present) {
+ if (::qstrcmp(QTest::currentDataTag(), "Very small number, very high precision, format 'f', precision 350") == 0) {
+ QSKIP("Skipping 'denorm' as this type lacks denormals on this system");
+ }
+ }
QTEST(QString::number(value, format, precision), "expected");
}
@@ -5383,43 +6810,43 @@ void tst_QString::number_base_data()
QTest::addColumn<int>("base");
QTest::addColumn<QString>("expected");
- QTest::newRow("base 10, positive") << 12346LL << 10 << QString("12346");
- QTest::newRow("base 2, positive") << 12346LL << 2 << QString("11000000111010");
- QTest::newRow("base 8, positive") << 12346LL << 8 << QString("30072");
- QTest::newRow("base 16, positive") << 12346LL << 16 << QString("303a");
- QTest::newRow("base 17, positive") << 12346LL << 17 << QString("28c4");
- QTest::newRow("base 36, positive") << 2181789482LL << 36 << QString("102zbje");
+ QTest::newRow("base 10, positive") << 12346LL << 10 << u"12346"_s;
+ QTest::newRow("base 2, positive") << 12346LL << 2 << u"11000000111010"_s;
+ QTest::newRow("base 8, positive") << 12346LL << 8 << u"30072"_s;
+ QTest::newRow("base 16, positive") << 12346LL << 16 << u"303a"_s;
+ QTest::newRow("base 17, positive") << 12346LL << 17 << u"28c4"_s;
+ QTest::newRow("base 36, positive") << 2181789482LL << 36 << u"102zbje"_s;
- QTest::newRow("base 10, negative") << -12346LL << 10 << QString("-12346");
- QTest::newRow("base 2, negative") << -12346LL << 2 << QString("-11000000111010");
- QTest::newRow("base 8, negative") << -12346LL << 8 << QString("-30072");
- QTest::newRow("base 16, negative") << -12346LL << 16 << QString("-303a");
- QTest::newRow("base 17, negative") << -12346LL << 17 << QString("-28c4");
- QTest::newRow("base 36, negative") << -2181789482LL << 36 << QString("-102zbje");
+ QTest::newRow("base 10, negative") << -12346LL << 10 << u"-12346"_s;
+ QTest::newRow("base 2, negative") << -12346LL << 2 << u"-11000000111010"_s;
+ QTest::newRow("base 8, negative") << -12346LL << 8 << u"-30072"_s;
+ QTest::newRow("base 16, negative") << -12346LL << 16 << u"-303a"_s;
+ QTest::newRow("base 17, negative") << -12346LL << 17 << u"-28c4"_s;
+ QTest::newRow("base 36, negative") << -2181789482LL << 36 << u"-102zbje"_s;
- QTest::newRow("base 2, negative") << -1LL << 2 << QString("-1");
+ QTest::newRow("base 2, minus 1") << -1LL << 2 << u"-1"_s;
QTest::newRow("largeint, base 10, positive")
- << 123456789012LL << 10 << QString("123456789012");
+ << 123456789012LL << 10 << u"123456789012"_s;
QTest::newRow("largeint, base 2, positive")
- << 123456789012LL << 2 << QString("1110010111110100110010001101000010100");
+ << 123456789012LL << 2 << u"1110010111110100110010001101000010100"_s;
QTest::newRow("largeint, base 8, positive")
- << 123456789012LL << 8 << QString("1627646215024");
+ << 123456789012LL << 8 << u"1627646215024"_s;
QTest::newRow("largeint, base 16, positive")
- << 123456789012LL << 16 << QString("1cbe991a14");
+ << 123456789012LL << 16 << u"1cbe991a14"_s;
QTest::newRow("largeint, base 17, positive")
- << 123456789012LL << 17 << QString("10bec2b629");
+ << 123456789012LL << 17 << u"10bec2b629"_s;
QTest::newRow("largeint, base 10, negative")
- << -123456789012LL << 10 << QString("-123456789012");
+ << -123456789012LL << 10 << u"-123456789012"_s;
QTest::newRow("largeint, base 2, negative")
- << -123456789012LL << 2 << QString("-1110010111110100110010001101000010100");
+ << -123456789012LL << 2 << u"-1110010111110100110010001101000010100"_s;
QTest::newRow("largeint, base 8, negative")
- << -123456789012LL << 8 << QString("-1627646215024");
+ << -123456789012LL << 8 << u"-1627646215024"_s;
QTest::newRow("largeint, base 16, negative")
- << -123456789012LL << 16 << QString("-1cbe991a14");
+ << -123456789012LL << 16 << u"-1cbe991a14"_s;
QTest::newRow("largeint, base 17, negative")
- << -123456789012LL << 17 << QString("-10bec2b629");
+ << -123456789012LL << 17 << u"-10bec2b629"_s;
}
void tst_QString::number_base()
@@ -5447,7 +6874,7 @@ void tst_QString::doubleOut()
const QString expect(QStringLiteral("1e-06"));
const double micro = 1e-6;
QCOMPARE(QString::number(micro), expect);
- QCOMPARE(QString("%1").arg(micro), expect);
+ QCOMPARE(u"%1"_s.arg(micro), expect);
{
QCOMPARE(QString::asprintf("%g", micro), expect);
}
@@ -5504,121 +6931,139 @@ void tst_QString::section_data()
QTest::addColumn<QString>("sectionString" );
QTest::addColumn<bool>("regexp" );
- QTest::newRow("null") << QString() << QString(",") << 0 << -1 << int(QString::SectionDefault) << QString() << false;
- QTest::newRow("empty") << QString("") << QString(",") << 0 << -1 << int(QString::SectionDefault) << QString("") << false;
- QTest::newRow( "data0" ) << QString("forename,middlename,surname,phone") << QString(",") << 2 << 2 << int(QString::SectionDefault) << QString("surname") << false;
- QTest::newRow( "data1" ) << QString("/usr/local/bin/myapp") << QString("/") << 3 << 4 << int(QString::SectionDefault) << QString("bin/myapp") << false;
- QTest::newRow( "data2" ) << QString("/usr/local/bin/myapp") << QString("/") << 3 << 3 << int(QString::SectionSkipEmpty) << QString("myapp") << false;
- QTest::newRow( "data3" ) << QString("forename**middlename**surname**phone") << QString("**") << 2 << 2 << int(QString::SectionDefault) << QString("surname") << false;
- QTest::newRow( "data4" ) << QString("forename**middlename**surname**phone") << QString("**") << -3 << -2 << int(QString::SectionDefault) << QString("middlename**surname") << false;
- QTest::newRow( "data5" ) << QString("##Datt######wollen######wir######mal######sehen##") << QString("#") << 0 << 0 << int(QString::SectionSkipEmpty) << QString("Datt") << false;
- QTest::newRow( "data6" ) << QString("##Datt######wollen######wir######mal######sehen##") << QString("#") << 1 << 1 << int(QString::SectionSkipEmpty) << QString("wollen") << false;
- QTest::newRow( "data7" ) << QString("##Datt######wollen######wir######mal######sehen##") << QString("#") << 2 << 2 << int(QString::SectionSkipEmpty) << QString("wir") << false;
- QTest::newRow( "data8" ) << QString("##Datt######wollen######wir######mal######sehen##") << QString("#") << 3 << 3 << int(QString::SectionSkipEmpty) << QString("mal") << false;
- QTest::newRow( "data9" ) << QString("##Datt######wollen######wir######mal######sehen##") << QString("#") << 4 << 4 << int(QString::SectionSkipEmpty) << QString("sehen") << false;
+ QTest::newRow("null") << QString() << u","_s << 0 << -1 << int(QString::SectionDefault)
+ << QString() << false;
+ QTest::newRow("empty") << u""_s << u","_s << 0 << -1 << int(QString::SectionDefault) << u""_s
+ << false;
+ QTest::newRow("data0") << u"forename,middlename,surname,phone"_s << u","_s << 2 << 2
+ << int(QString::SectionDefault) << u"surname"_s << false;
+ QTest::newRow("data1") << u"/usr/local/bin/myapp"_s << u"/"_s << 3 << 4
+ << int(QString::SectionDefault) << u"bin/myapp"_s << false;
+ QTest::newRow("data2") << u"/usr/local/bin/myapp"_s << u"/"_s << 3 << 3
+ << int(QString::SectionSkipEmpty) << u"myapp"_s << false;
+ QTest::newRow("data3") << u"forename**middlename**surname**phone"_s << u"**"_s << 2 << 2
+ << int(QString::SectionDefault) << u"surname"_s << false;
+ QTest::newRow("data4") << u"forename**middlename**surname**phone"_s << u"**"_s << -3 << -2
+ << int(QString::SectionDefault) << u"middlename**surname"_s << false;
+ QTest::newRow("data5") << u"##Datt######wollen######wir######mal######sehen##"_s << u"#"_s << 0
+ << 0 << int(QString::SectionSkipEmpty) << u"Datt"_s << false;
+ QTest::newRow("data6") << u"##Datt######wollen######wir######mal######sehen##"_s << u"#"_s << 1
+ << 1 << int(QString::SectionSkipEmpty) << u"wollen"_s << false;
+ QTest::newRow("data7") << u"##Datt######wollen######wir######mal######sehen##"_s << u"#"_s << 2
+ << 2 << int(QString::SectionSkipEmpty) << u"wir"_s << false;
+ QTest::newRow("data8") << u"##Datt######wollen######wir######mal######sehen##"_s << u"#"_s << 3
+ << 3 << int(QString::SectionSkipEmpty) << u"mal"_s << false;
+ QTest::newRow("data9") << u"##Datt######wollen######wir######mal######sehen##"_s << u"#"_s << 4
+ << 4 << int(QString::SectionSkipEmpty) << u"sehen"_s << false;
// not fixed for 3.1
- QTest::newRow( "data10" ) << QString("a/b/c/d") << QString("/") << 1 << -1 << int(QString::SectionIncludeLeadingSep | QString::SectionIncludeTrailingSep) << QString("/b/c/d") << false;
- QTest::newRow( "data11" ) << QString("aoLoboLocolod") << QString("olo") << -1 << -1 << int(QString::SectionCaseInsensitiveSeps) << QString("d") << false;
- QTest::newRow( "data12" ) << QString("F0") << QString("F") << 0 << 0 << int(QString::SectionSkipEmpty) << QString("0") << false;
- QTest::newRow( "foo1" ) << QString("foo;foo;") << QString(";") << 0 << 0
- << int(QString::SectionIncludeLeadingSep) << QString("foo") << false;
- QTest::newRow( "foo2" ) << QString("foo;foo;") << QString(";") << 1 << 1
- << int(QString::SectionIncludeLeadingSep) << QString(";foo") << false;
- QTest::newRow( "foo3" ) << QString("foo;foo;") << QString(";") << 2 << 2
- << int(QString::SectionIncludeLeadingSep) << QString(";") << false;
- QTest::newRow( "foo1rx" ) << QString("foo;foo;") << QString(";") << 0 << 0
- << int(QString::SectionIncludeLeadingSep) << QString("foo") << true;
- QTest::newRow( "foo2rx" ) << QString("foo;foo;") << QString(";") << 1 << 1
- << int(QString::SectionIncludeLeadingSep) << QString(";foo") << true;
- QTest::newRow( "foo3rx" ) << QString("foo;foo;") << QString(";") << 2 << 2
- << int(QString::SectionIncludeLeadingSep) << QString(";") << true;
-
- QTest::newRow( "qmake_path" ) << QString("/Users/sam/troll/qt4.0/src/corelib/QtCore_debug.xcode/")
- << QString("/") << 0 << -2 << int(QString::SectionDefault)
- << QString("/Users/sam/troll/qt4.0/src/corelib/QtCore_debug.xcode") << false;
- QTest::newRow( "qmake_pathrx" ) << QString("/Users/sam/troll/qt4.0/src/corelib/QtCore_debug.xcode/")
- << QString("/") << 0 << -2 << int(QString::SectionDefault)
- << QString("/Users/sam/troll/qt4.0/src/corelib/QtCore_debug.xcode") << true;
- QTest::newRow( "data13" ) << QString("||2|3|||")
- << QString("|") << 0 << 1 << int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("||") << false;
- QTest::newRow( "data14" ) << QString("||2|3|||")
- << QString("\\|") << 0 << 1 << int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("||") << true;
- QTest::newRow( "data15" ) << QString("|1|2|")
- << QString("|") << 0 << 1 << int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("|1|") << false;
- QTest::newRow( "data16" ) << QString("|1|2|")
- << QString("\\|") << 0 << 1 << int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("|1|") << true;
- QTest::newRow( "normal1" ) << QString("o1o2o")
- << QString("o") << 0 << 0
+ QTest::newRow("data10") << u"a/b/c/d"_s << u"/"_s << 1 << -1
+ << int(QString::SectionIncludeLeadingSep | QString::SectionIncludeTrailingSep)
+ << u"/b/c/d"_s << false;
+ QTest::newRow("data11") << u"aoLoboLocolod"_s << u"olo"_s << -1 << -1
+ << int(QString::SectionCaseInsensitiveSeps) << u"d"_s << false;
+ QTest::newRow("data12") << u"F0"_s << u"F"_s << 0 << 0 << int(QString::SectionSkipEmpty)
+ << u"0"_s << false;
+ QTest::newRow("foo1") << u"foo;foo;"_s << u";"_s << 0 << 0
+ << int(QString::SectionIncludeLeadingSep) << u"foo"_s << false;
+ QTest::newRow("foo2") << u"foo;foo;"_s << u";"_s << 1 << 1
+ << int(QString::SectionIncludeLeadingSep) << u";foo"_s << false;
+ QTest::newRow("foo3") << u"foo;foo;"_s << u";"_s << 2 << 2
+ << int(QString::SectionIncludeLeadingSep) << u";"_s << false;
+ QTest::newRow("foo1rx") << u"foo;foo;"_s << u";"_s << 0 << 0
+ << int(QString::SectionIncludeLeadingSep) << u"foo"_s << true;
+ QTest::newRow("foo2rx") << u"foo;foo;"_s << u";"_s << 1 << 1
+ << int(QString::SectionIncludeLeadingSep) << u";foo"_s << true;
+ QTest::newRow("foo3rx") << u"foo;foo;"_s << u";"_s << 2 << 2
+ << int(QString::SectionIncludeLeadingSep) << u";"_s << true;
+
+ QTest::newRow("qmake_path") << u"/Users/sam/troll/qt4.0/src/corelib/QtCore_debug.xcode/"_s
+ << u"/"_s << 0 << -2 << int(QString::SectionDefault)
+ << u"/Users/sam/troll/qt4.0/src/corelib/QtCore_debug.xcode"_s
+ << false;
+ QTest::newRow("qmake_pathrx") << u"/Users/sam/troll/qt4.0/src/corelib/QtCore_debug.xcode/"_s
+ << u"/"_s << 0 << -2 << int(QString::SectionDefault)
+ << u"/Users/sam/troll/qt4.0/src/corelib/QtCore_debug.xcode"_s
+ << true;
+ QTest::newRow("data13") << u"||2|3|||"_s << u"|"_s << 0 << 1
+ << int(QString::SectionIncludeLeadingSep | QString::SectionIncludeTrailingSep)
+ << u"||"_s << false;
+ QTest::newRow("data14") << u"||2|3|||"_s << u"\\|"_s << 0 << 1
+ << int(QString::SectionIncludeLeadingSep | QString::SectionIncludeTrailingSep)
+ << u"||"_s << true;
+ QTest::newRow("data15") << u"|1|2|"_s << u"|"_s << 0 << 1
+ << int(QString::SectionIncludeLeadingSep | QString::SectionIncludeTrailingSep)
+ << u"|1|"_s << false;
+ QTest::newRow("data16") << u"|1|2|"_s << u"\\|"_s << 0 << 1
+ << int(QString::SectionIncludeLeadingSep | QString::SectionIncludeTrailingSep)
+ << u"|1|"_s << true;
+ QTest::newRow("normal1") << u"o1o2o"_s
+ << u"o"_s << 0 << 0
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("o") << false;
- QTest::newRow( "normal2" ) << QString("o1o2o")
- << QString("o") << 1 << 1
+ << u"o"_s << false;
+ QTest::newRow("normal2") << u"o1o2o"_s
+ << u"o"_s << 1 << 1
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("o1o") << false;
- QTest::newRow( "normal3" ) << QString("o1o2o")
- << QString("o") << 2 << 2
+ << u"o1o"_s << false;
+ QTest::newRow("normal3") << u"o1o2o"_s
+ << u"o"_s << 2 << 2
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("o2o") << false;
- QTest::newRow( "normal4" ) << QString("o1o2o")
- << QString("o") << 2 << 3
+ << u"o2o"_s << false;
+ QTest::newRow("normal4") << u"o1o2o"_s
+ << u"o"_s << 2 << 3
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("o2o") << false;
- QTest::newRow( "normal5" ) << QString("o1o2o")
- << QString("o") << 1 << 2
+ << u"o2o"_s << false;
+ QTest::newRow("normal5") << u"o1o2o"_s
+ << u"o"_s << 1 << 2
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("o1o2o") << false;
- QTest::newRow( "range1" ) << QString("o1o2o")
- << QString("o") << -5 << -5
+ << u"o1o2o"_s << false;
+ QTest::newRow("range1") << u"o1o2o"_s
+ << u"o"_s << -5 << -5
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
<< QString() << false;
- QTest::newRow( "range2" ) << QString("oo1o2o")
- << QString("o") << -5 << 1
+ QTest::newRow("range2") << u"oo1o2o"_s
+ << u"o"_s << -5 << 1
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep
|QString::SectionSkipEmpty)
- << QString("oo1o2o") << false;
- QTest::newRow( "range3" ) << QString("o1o2o")
- << QString("o") << 2 << 1
+ << u"oo1o2o"_s << false;
+ QTest::newRow("range3") << u"o1o2o"_s
+ << u"o"_s << 2 << 1
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
<< QString() << false;
- QTest::newRow( "range4" ) << QString("o1o2o")
- << QString("o") << 4 << 4
+ QTest::newRow("range4") << u"o1o2o"_s
+ << u"o"_s << 4 << 4
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
<< QString() << false;
- QTest::newRow( "range5" ) << QString("o1oo2o")
- << QString("o") << -2 << -1
+ QTest::newRow("range5") << u"o1oo2o"_s
+ << u"o"_s << -2 << -1
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep
|QString::SectionSkipEmpty)
- << QString("o1oo2o") << false;
- QTest::newRow( "rx1" ) << QString("o1o2o")
- << QString("[a-z]") << 0 << 0
+ << u"o1oo2o"_s << false;
+ QTest::newRow("rx1") << u"o1o2o"_s
+ << u"[a-z]"_s << 0 << 0
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("o") << true;
- QTest::newRow( "rx2" ) << QString("o1o2o")
- << QString("[a-z]") << 1 << 1
+ << u"o"_s << true;
+ QTest::newRow("rx2") << u"o1o2o"_s
+ << u"[a-z]"_s << 1 << 1
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("o1o") << true;
- QTest::newRow( "rx3" ) << QString("o1o2o")
- << QString("[a-z]") << 2 << 2
+ << u"o1o"_s << true;
+ QTest::newRow("rx3") << u"o1o2o"_s
+ << u"[a-z]"_s << 2 << 2
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("o2o") << true;
- QTest::newRow( "rx4" ) << QString("o1o2o")
- << QString("[a-z]") << 2 << 3
+ << u"o2o"_s << true;
+ QTest::newRow("rx4") << u"o1o2o"_s
+ << u"[a-z]"_s << 2 << 3
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("o2o") << true;
- QTest::newRow( "rx5" ) << QString("o1o2o")
- << QString("[a-z]") << 1 << 2
+ << u"o2o"_s << true;
+ QTest::newRow("rx5") << u"o1o2o"_s
+ << u"[a-z]"_s << 1 << 2
<< int(QString::SectionIncludeLeadingSep|QString::SectionIncludeTrailingSep)
- << QString("o1o2o") << true;
- QTest::newRow( "data17" ) << QString("This is a story, a small story")
- << QString("\\b") << 3 << 3
+ << u"o1o2o"_s << true;
+ QTest::newRow("data17") << u"This is a story, a small story"_s
+ << u"\\b"_s << 3 << 3
<< int(QString::SectionDefault)
- << QString("is") << true;
- QTest::newRow( "data18" ) << QString("99.0 42.3")
- << QString("\\s*[AaBb]\\s*") << 1 << 1
+ << u"is"_s << true;
+ QTest::newRow("data18") << u"99.0 42.3"_s
+ << u"\\s*[AaBb]\\s*"_s << 1 << 1
<< int(QString::SectionIncludeLeadingSep)
<< QString() << true;
}
@@ -5654,48 +7099,52 @@ void tst_QString::operator_eqeq_nullstring()
/* Some of these might not be all that logical but it's the behaviour we've had since 3.0.0
so we should probably stick with it. */
- QVERIFY( QString() == "" );
- QVERIFY( "" == QString() );
+ QVERIFY( QString() == u""_s );
+ QVERIFY( u""_s == QString() );
- QVERIFY( QString("") == "" );
- QVERIFY( "" == QString("") );
+ QVERIFY( QString(u""_s) == u""_s );
+ QVERIFY( u""_s == QString(u""_s) );
QVERIFY(QString() == nullptr);
QVERIFY(nullptr == QString());
- QVERIFY(QString("") == nullptr);
- QVERIFY(nullptr == QString(""));
+ QVERIFY(QString(u""_s) == nullptr);
+ QVERIFY(nullptr == QString(u""_s));
QVERIFY( QString().size() == 0 );
- QVERIFY( QString("").size() == 0 );
+ QVERIFY(u""_s.size() == 0);
- QVERIFY( QString() == QString("") );
- QVERIFY( QString("") == QString() );
+ QVERIFY(QString() == u""_s);
+ QVERIFY( QString(u""_s) == QString() );
}
void tst_QString::operator_smaller()
{
QString null;
- QString empty("");
- QString foo("foo");
+ QString empty(u""_s);
+ QString foo(u"foo"_s);
+ [[maybe_unused]]
const char *nullC = nullptr;
+ [[maybe_unused]]
const char *emptyC = "";
QVERIFY( !(null < QString()) );
QVERIFY( !(null > QString()) );
- QVERIFY( !(empty < QString("")) );
- QVERIFY( !(empty > QString("")) );
+ QVERIFY(!(empty < u""_s));
+ QVERIFY(!(empty > u""_s));
QVERIFY( !(null < empty) );
QVERIFY( !(null > empty) );
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
QVERIFY( !(nullC < empty) );
QVERIFY( !(nullC > empty) );
QVERIFY( !(null < emptyC) );
QVERIFY( !(null > emptyC) );
+#endif
QVERIFY( null < foo );
QVERIFY( !(null > foo) );
@@ -5707,8 +7156,8 @@ void tst_QString::operator_smaller()
QVERIFY( foo > empty );
QVERIFY( !(foo < empty) );
- QVERIFY( !(null < QLatin1String(0)) );
- QVERIFY( !(null > QLatin1String(0)) );
+ QVERIFY( !(null < QLatin1String(nullptr)) );
+ QVERIFY( !(null > QLatin1String(nullptr)) );
QVERIFY( !(null < QLatin1String("")) );
QVERIFY( !(null > QLatin1String("")) );
@@ -5717,28 +7166,28 @@ void tst_QString::operator_smaller()
QVERIFY( !(empty < QLatin1String("")) );
QVERIFY( !(empty > QLatin1String("")) );
- QVERIFY( !(QLatin1String(0) < null) );
- QVERIFY( !(QLatin1String(0) > null) );
+ QVERIFY( !(QLatin1String(nullptr) < null) );
+ QVERIFY( !(QLatin1String(nullptr) > null) );
QVERIFY( !(QLatin1String("") < null) );
QVERIFY( !(QLatin1String("") > null) );
- QVERIFY( !(QLatin1String(0) < empty) );
- QVERIFY( !(QLatin1String(0) > empty) );
+ QVERIFY( !(QLatin1String(nullptr) < empty) );
+ QVERIFY( !(QLatin1String(nullptr) > empty) );
QVERIFY( !(QLatin1String("") < empty) );
QVERIFY( !(QLatin1String("") > empty) );
- QVERIFY( QLatin1String(0) < foo );
- QVERIFY( !(QLatin1String(0) > foo) );
+ QVERIFY( QLatin1String(nullptr) < foo );
+ QVERIFY( !(QLatin1String(nullptr) > foo) );
QVERIFY( QLatin1String("") < foo );
QVERIFY( !(QLatin1String("") > foo) );
- QVERIFY( foo > QLatin1String(0) );
- QVERIFY( !(foo < QLatin1String(0)) );
+ QVERIFY( foo > QLatin1String(nullptr) );
+ QVERIFY( !(foo < QLatin1String(nullptr)) );
QVERIFY( foo > QLatin1String("") );
QVERIFY( !(foo < QLatin1String("")) );
- QVERIFY( QLatin1String(0) == empty);
- QVERIFY( QLatin1String(0) == null);
+ QVERIFY( QLatin1String(nullptr) == empty);
+ QVERIFY( QLatin1String(nullptr) == null);
QVERIFY( QLatin1String("") == empty);
QVERIFY( QLatin1String("") == null);
@@ -5758,25 +7207,21 @@ void tst_QString::operator_smaller()
QVERIFY( (QLatin1String("z") > foo));
// operator< is not locale-aware (or shouldn't be)
- QVERIFY( foo < QString("\xc3\xa9") );
+ QCOMPARE_LT(foo, QString::fromUtf8("\xc3\xa9"));
+
+#ifndef QT_NO_CAST_FROM_ASCII
QVERIFY( foo < "\xc3\xa9" );
+#endif
- QVERIFY(QString("a") < QString("b"));
- QVERIFY(QString("a") <= QString("b"));
- QVERIFY(QString("a") <= QString("a"));
- QVERIFY(QString("a") == QString("a"));
- QVERIFY(QString("a") >= QString("a"));
- QVERIFY(QString("b") >= QString("a"));
- QVERIFY(QString("b") > QString("a"));
-
- QVERIFY("a" < QString("b"));
- QVERIFY("a" <= QString("b"));
- QVERIFY("a" <= QString("a"));
- QVERIFY("a" == QString("a"));
- QVERIFY("a" >= QString("a"));
- QVERIFY("b" >= QString("a"));
- QVERIFY("b" > QString("a"));
+ QCOMPARE_LT(QString(u"a"_s), QString(u"b"_s));
+ QCOMPARE_LE(QString(u"a"_s), QString(u"b"_s));
+ QCOMPARE_LE(QString(u"a"_s), QString(u"a"_s));
+ QCOMPARE_EQ(QString(u"a"_s), QString(u"a"_s));
+ QCOMPARE_GE(QString(u"a"_s), QString(u"a"_s));
+ QCOMPARE_GE(QString(u"b"_s), QString(u"a"_s));
+ QCOMPARE_GT(QString(u"b"_s), QString(u"a"_s));
+#ifndef QT_NO_CAST_FROM_ASCII
QVERIFY(QString("a") < "b");
QVERIFY(QString("a") <= "b");
QVERIFY(QString("a") <= "a");
@@ -5785,6 +7230,16 @@ void tst_QString::operator_smaller()
QVERIFY(QString("b") >= "a");
QVERIFY(QString("b") > "a");
+ QCOMPARE_LT("a", QString(u"b"_s));
+ QCOMPARE_LE("a", QString(u"b"_s));
+ QCOMPARE_LE("a", QString(u"a"_s));
+ QCOMPARE_EQ("a", QString(u"a"_s));
+ QCOMPARE_GE("a", QString(u"a"_s));
+ QCOMPARE_GE("b", QString(u"a"_s));
+ QCOMPARE_GT("b", QString(u"a"_s));
+#endif
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
QVERIFY(QString("a") < QByteArray("b"));
QVERIFY(QString("a") <= QByteArray("b"));
QVERIFY(QString("a") <= QByteArray("a"));
@@ -5792,23 +7247,25 @@ void tst_QString::operator_smaller()
QVERIFY(QString("a") >= QByteArray("a"));
QVERIFY(QString("b") >= QByteArray("a"));
QVERIFY(QString("b") > QByteArray("a"));
+#endif
- QVERIFY(QLatin1String("a") < QString("b"));
- QVERIFY(QLatin1String("a") <= QString("b"));
- QVERIFY(QLatin1String("a") <= QString("a"));
- QVERIFY(QLatin1String("a") == QString("a"));
- QVERIFY(QLatin1String("a") >= QString("a"));
- QVERIFY(QLatin1String("b") >= QString("a"));
- QVERIFY(QLatin1String("b") > QString("a"));
-
- QVERIFY(QString("a") < QLatin1String("b"));
- QVERIFY(QString("a") <= QLatin1String("b"));
- QVERIFY(QString("a") <= QLatin1String("a"));
- QVERIFY(QString("a") == QLatin1String("a"));
- QVERIFY(QString("a") >= QLatin1String("a"));
- QVERIFY(QString("b") >= QLatin1String("a"));
- QVERIFY(QString("b") > QLatin1String("a"));
-
+ QVERIFY(QLatin1String("a") < QString(u"b"_s));
+ QVERIFY(QLatin1String("a") <= QString(u"b"_s));
+ QVERIFY(QLatin1String("a") <= QString(u"a"_s));
+ QVERIFY(QLatin1String("a") == QString(u"a"_s));
+ QVERIFY(QLatin1String("a") >= QString(u"a"_s));
+ QVERIFY(QLatin1String("b") >= QString(u"a"_s));
+ QVERIFY(QLatin1String("b") > QString(u"a"_s));
+
+ QVERIFY(QString(u"a"_s) < QLatin1String("b"));
+ QVERIFY(QString(u"a"_s) <= QLatin1String("b"));
+ QVERIFY(QString(u"a"_s) <= QLatin1String("a"));
+ QVERIFY(QString(u"a"_s) == QLatin1String("a"));
+ QVERIFY(QString(u"a"_s) >= QLatin1String("a"));
+ QVERIFY(QString(u"b"_s) >= QLatin1String("a"));
+ QVERIFY(QString(u"b"_s) > QLatin1String("a"));
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
QVERIFY("a" < QLatin1String("b"));
QVERIFY("a" <= QLatin1String("b"));
QVERIFY("a" <= QLatin1String("a"));
@@ -5824,6 +7281,7 @@ void tst_QString::operator_smaller()
QVERIFY(QLatin1String("a") >= "a");
QVERIFY(QLatin1String("b") >= "a");
QVERIFY(QLatin1String("b") > "a");
+#endif
}
void tst_QString::integer_conversion_data()
@@ -5833,65 +7291,65 @@ void tst_QString::integer_conversion_data()
QTest::addColumn<bool>("good");
QTest::addColumn<qlonglong>("num");
- QTest::newRow("C empty 0") << QString("") << 0 << false << (qlonglong)0;
- QTest::newRow("C empty 8") << QString("") << 8 << false << (qlonglong)0;
- QTest::newRow("C empty 10") << QString("") << 10 << false << (qlonglong)0;
- QTest::newRow("C empty 16") << QString("") << 16 << false << (qlonglong)0;
+ QTest::newRow("C empty 0") << u""_s << 0 << false << qlonglong(0);
+ QTest::newRow("C empty 8") << u""_s << 8 << false << qlonglong(0);
+ QTest::newRow("C empty 10") << u""_s << 10 << false << qlonglong(0);
+ QTest::newRow("C empty 16") << u""_s << 16 << false << qlonglong(0);
QTest::newRow("C null 0") << QString() << 0 << false << (qlonglong)0;
QTest::newRow("C null 8") << QString() << 8 << false << (qlonglong)0;
QTest::newRow("C null 10") << QString() << 10 << false << (qlonglong)0;
QTest::newRow("C null 16") << QString() << 16 << false << (qlonglong)0;
- QTest::newRow("C -0xf 0") << QString(" -0xf") << 0 << true << (qlonglong)-15;
- QTest::newRow("C -0xf 0") << QString("-0xf ") << 0 << true << (qlonglong)-15;
- QTest::newRow("C \t0xf\t 0") << QString("\t0xf\t") << 0 << true << (qlonglong)15;
- QTest::newRow("C -010 0") << QString(" -010") << 0 << true << (qlonglong)-8;
- QTest::newRow("C 010 0") << QString("010 ") << 0 << true << (qlonglong)8;
- QTest::newRow("C \t-010\t 0") << QString("\t-010\t") << 0 << true << (qlonglong)-8;
- QTest::newRow("C 123 10") << QString(" 123") << 10 << true << (qlonglong)123;
- QTest::newRow("C 123 10") << QString("123 ") << 10 << true << (qlonglong)123;
- QTest::newRow("C \t123\t 10") << QString("\t123\t") << 10 << true << (qlonglong)123;
- QTest::newRow("C -0xf 16") << QString(" -0xf") << 16 << true << (qlonglong)-15;
- QTest::newRow("C -0xf 16") << QString("-0xf ") << 16 << true << (qlonglong)-15;
- QTest::newRow("C \t0xf\t 16") << QString("\t0xf\t") << 16 << true << (qlonglong)15;
-
- QTest::newRow("C -0 0") << QString("-0") << 0 << true << (qlonglong)0;
- QTest::newRow("C -0 8") << QString("-0") << 8 << true << (qlonglong)0;
- QTest::newRow("C -0 10") << QString("-0") << 10 << true << (qlonglong)0;
- QTest::newRow("C -0 16") << QString("-0") << 16 << true << (qlonglong)0;
-
- QTest::newRow("C 1.234 10") << QString("1.234") << 10 << false << (qlonglong)0;
- QTest::newRow("C 1,234 10") << QString("1,234") << 10 << false << (qlonglong)0;
-
- QTest::newRow("C 0x 0") << QString("0x") << 0 << false << (qlonglong)0;
- QTest::newRow("C 0x 16") << QString("0x") << 16 << false << (qlonglong)0;
-
- QTest::newRow("C 10 0") << QString("10") << 0 << true << (qlonglong)10;
- QTest::newRow("C 010 0") << QString("010") << 0 << true << (qlonglong)8;
- QTest::newRow("C 0x10 0") << QString("0x10") << 0 << true << (qlonglong)16;
- QTest::newRow("C 10 8") << QString("10") << 8 << true << (qlonglong)8;
- QTest::newRow("C 010 8") << QString("010") << 8 << true << (qlonglong)8;
- QTest::newRow("C 0x10 8") << QString("0x10") << 8 << false << (qlonglong)0;
- QTest::newRow("C 10 10") << QString("10") << 10 << true << (qlonglong)10;
- QTest::newRow("C 010 10") << QString("010") << 10 << true << (qlonglong)10;
- QTest::newRow("C 0x10 10") << QString("0x10") << 10 << false << (qlonglong)0;
- QTest::newRow("C 10 16") << QString("10") << 16 << true << (qlonglong)16;
- QTest::newRow("C 010 16") << QString("010") << 16 << true << (qlonglong)16;
- QTest::newRow("C 0x10 16") << QString("0x10") << 16 << true << (qlonglong)16;
-
- QTest::newRow("C -10 0") << QString("-10") << 0 << true << (qlonglong)-10;
- QTest::newRow("C -010 0") << QString("-010") << 0 << true << (qlonglong)-8;
- QTest::newRow("C -0x10 0") << QString("-0x10") << 0 << true << (qlonglong)-16;
- QTest::newRow("C -10 8") << QString("-10") << 8 << true << (qlonglong)-8;
- QTest::newRow("C -010 8") << QString("-010") << 8 << true << (qlonglong)-8;
- QTest::newRow("C -0x10 8") << QString("-0x10") << 8 << false << (qlonglong)0;
- QTest::newRow("C -10 10") << QString("-10") << 10 << true << (qlonglong)-10;
- QTest::newRow("C -010 10") << QString("-010") << 10 << true << (qlonglong)-10;
- QTest::newRow("C -0x10 10") << QString("-0x10") << 10 << false << (qlonglong)0;
- QTest::newRow("C -10 16") << QString("-10") << 16 << true << (qlonglong)-16;
- QTest::newRow("C -010 16") << QString("-010") << 16 << true << (qlonglong)-16;
- QTest::newRow("C -0x10 16") << QString("-0x10") << 16 << true << (qlonglong)-16;
+ QTest::newRow("C -0xf 0") << u" -0xf"_s << 0 << true << qlonglong(-15);
+ QTest::newRow("C -0xf 0") << u"-0xf "_s << 0 << true << qlonglong(-15);
+ QTest::newRow("C \t0xf\t 0") << u"\t0xf\t"_s << 0 << true << qlonglong(15);
+ QTest::newRow("C -010 0") << u" -010"_s << 0 << true << qlonglong(-8);
+ QTest::newRow("C 010 0") << u"010 "_s << 0 << true << qlonglong(8);
+ QTest::newRow("C \t-010\t 0") << u"\t-010\t"_s << 0 << true << qlonglong(-8);
+ QTest::newRow("C 123 10") << u" 123"_s << 10 << true << qlonglong(123);
+ QTest::newRow("C 123 10") << u"123 "_s << 10 << true << qlonglong(123);
+ QTest::newRow("C \t123\t 10") << u"\t123\t"_s << 10 << true << qlonglong(123);
+ QTest::newRow("C -0xf 16") << u" -0xf"_s << 16 << true << qlonglong(-15);
+ QTest::newRow("C -0xf 16") << u"-0xf "_s << 16 << true << qlonglong(-15);
+ QTest::newRow("C \t0xf\t 16") << u"\t0xf\t"_s << 16 << true << qlonglong(15);
+
+ QTest::newRow("C -0 0") << u"-0"_s << 0 << true << qlonglong(0);
+ QTest::newRow("C -0 8") << u"-0"_s << 8 << true << qlonglong(0);
+ QTest::newRow("C -0 10") << u"-0"_s << 10 << true << qlonglong(0);
+ QTest::newRow("C -0 16") << u"-0"_s << 16 << true << qlonglong(0);
+
+ QTest::newRow("C 1.234 10") << u"1.234"_s << 10 << false << qlonglong(0);
+ QTest::newRow("C 1,234 10") << u"1,234"_s << 10 << false << qlonglong(0);
+
+ QTest::newRow("C 0x 0") << u"0x"_s << 0 << false << qlonglong(0);
+ QTest::newRow("C 0x 16") << u"0x"_s << 16 << false << qlonglong(0);
+
+ QTest::newRow("C 10 0") << u"10"_s << 0 << true << qlonglong(10);
+ QTest::newRow("C 010 0") << u"010"_s << 0 << true << qlonglong(8);
+ QTest::newRow("C 0x10 0") << u"0x10"_s << 0 << true << qlonglong(16);
+ QTest::newRow("C 10 8") << u"10"_s << 8 << true << qlonglong(8);
+ QTest::newRow("C 010 8") << u"010"_s << 8 << true << qlonglong(8);
+ QTest::newRow("C 0x10 8") << u"0x10"_s << 8 << false << qlonglong(0);
+ QTest::newRow("C 10 10") << u"10"_s << 10 << true << qlonglong(10);
+ QTest::newRow("C 010 10") << u"010"_s << 10 << true << qlonglong(10);
+ QTest::newRow("C 0x10 10") << u"0x10"_s << 10 << false << qlonglong(0);
+ QTest::newRow("C 10 16") << u"10"_s << 16 << true << qlonglong(16);
+ QTest::newRow("C 010 16") << u"010"_s << 16 << true << qlonglong(16);
+ QTest::newRow("C 0x10 16") << u"0x10"_s << 16 << true << qlonglong(16);
+
+ QTest::newRow("C -10 0") << u"-10"_s << 0 << true << qlonglong(-10);
+ QTest::newRow("C -010 0") << u"-010"_s << 0 << true << qlonglong(-8);
+ QTest::newRow("C -0x10 0") << u"-0x10"_s << 0 << true << qlonglong(-16);
+ QTest::newRow("C -10 8") << u"-10"_s << 8 << true << qlonglong(-8);
+ QTest::newRow("C -010 8") << u"-010"_s << 8 << true << qlonglong(-8);
+ QTest::newRow("C -0x10 8") << u"-0x10"_s << 8 << false << qlonglong(0);
+ QTest::newRow("C -10 10") << u"-10"_s << 10 << true << qlonglong(-10);
+ QTest::newRow("C -010 10") << u"-010"_s << 10 << true << qlonglong(-10);
+ QTest::newRow("C -0x10 10") << u"-0x10"_s << 10 << false << qlonglong(0);
+ QTest::newRow("C -10 16") << u"-10"_s << 16 << true << qlonglong(-16);
+ QTest::newRow("C -010 16") << u"-010"_s << 16 << true << qlonglong(-16);
+ QTest::newRow("C -0x10 16") << u"-0x10"_s << 16 << true << qlonglong(-16);
// Let's try some Arabic
const char16_t arabic_str[] = { 0x0661, 0x0662, 0x0663, 0x0664, 0x0000 }; // "1234"
@@ -5922,39 +7380,39 @@ void tst_QString::double_conversion_data()
// The good...
- QTest::newRow("C 1") << QString("1") << true << 1.0;
- QTest::newRow("C 1.0") << QString("1.0") << true << 1.0;
- QTest::newRow("C 1.234") << QString("1.234") << true << 1.234;
- QTest::newRow("C 1.234e-10") << QString("1.234e-10") << true << 1.234e-10;
- QTest::newRow("C 1.234E10") << QString("1.234E10") << true << 1.234e10;
- QTest::newRow("C 1e10") << QString("1e10") << true << 1.0e10;
+ QTest::newRow("C 1") << u"1"_s << true << 1.0;
+ QTest::newRow("C 1.0") << u"1.0"_s << true << 1.0;
+ QTest::newRow("C 1.234") << u"1.234"_s << true << 1.234;
+ QTest::newRow("C 1.234e-10") << u"1.234e-10"_s << true << 1.234e-10;
+ QTest::newRow("C 1.234E10") << u"1.234E10"_s << true << 1.234e10;
+ QTest::newRow("C 1e10") << u"1e10"_s << true << 1.0e10;
// The bad...
- QTest::newRow("C empty") << QString("") << false << 0.0;
+ QTest::newRow("C empty") << u""_s << false << 0.0;
QTest::newRow("C null") << QString() << false << 0.0;
- QTest::newRow("C .") << QString(".") << false << 0.0;
- QTest::newRow("C 1e") << QString("1e") << false << 0.0;
- QTest::newRow("C 1,") << QString("1,") << false << 0.0;
- QTest::newRow("C 1,0") << QString("1,0") << false << 0.0;
- QTest::newRow("C 1,000") << QString("1,000") << false << 0.0;
- QTest::newRow("C 1e1.0") << QString("1e1.0") << false << 0.0;
- QTest::newRow("C 1e+") << QString("1e+") << false << 0.0;
- QTest::newRow("C 1e-") << QString("1e-") << false << 0.0;
- QTest::newRow("de_DE 1,0") << QString("1,0") << false << 0.0;
- QTest::newRow("de_DE 1,234") << QString("1,234") << false << 0.0;
- QTest::newRow("de_DE 1,234e-10") << QString("1,234e-10") << false << 0.0;
- QTest::newRow("de_DE 1,234E10") << QString("1,234E10") << false << 0.0;
+ QTest::newRow("C .") << u"."_s << false << 0.0;
+ QTest::newRow("C 1e") << u"1e"_s << false << 0.0;
+ QTest::newRow("C 1,") << u"1,"_s << false << 0.0;
+ QTest::newRow("C 1,0") << u"1,0"_s << false << 0.0;
+ QTest::newRow("C 1,000") << u"1,000"_s << false << 0.0;
+ QTest::newRow("C 1e1.0") << u"1e1.0"_s << false << 0.0;
+ QTest::newRow("C 1e+") << u"1e+"_s << false << 0.0;
+ QTest::newRow("C 1e-") << u"1e-"_s << false << 0.0;
+ QTest::newRow("de_DE 1,0") << u"1,0"_s << false << 0.0;
+ QTest::newRow("de_DE 1,234") << u"1,234"_s << false << 0.0;
+ QTest::newRow("de_DE 1,234e-10") << u"1,234e-10"_s << false << 0.0;
+ QTest::newRow("de_DE 1,234E10") << u"1,234E10"_s << false << 0.0;
// And the ugly...
- QTest::newRow("C .1") << QString(".1") << true << 0.1;
- QTest::newRow("C -.1") << QString("-.1") << true << -0.1;
- QTest::newRow("C 1.") << QString("1.") << true << 1.0;
- QTest::newRow("C 1.E10") << QString("1.E10") << true << 1.0e10;
- QTest::newRow("C 1e+10") << QString("1e+10") << true << 1.0e+10;
- QTest::newRow("C 1") << QString(" 1") << true << 1.0;
- QTest::newRow("C 1 ") << QString("1 ") << true << 1.0;
+ QTest::newRow("C .1") << u".1"_s << true << 0.1;
+ QTest::newRow("C -.1") << u"-.1"_s << true << -0.1;
+ QTest::newRow("C 1.") << u"1."_s << true << 1.0;
+ QTest::newRow("C 1.E10") << u"1.E10"_s << true << 1.0e10;
+ QTest::newRow("C 1e+10") << u"1e+10"_s << true << 1.0e+10;
+ QTest::newRow("C 1") << u" 1"_s << true << 1.0;
+ QTest::newRow("C 1 ") << u"1 "_s << true << 1.0;
// Let's try some Arabic
const char16_t arabic_str[] = { 0x0660, 0x066B, 0x0661, 0x0662,
@@ -6011,314 +7469,11 @@ void tst_QString::tortureSprintfDouble()
QSKIP("clib sprintf doesn't fill with 0's on this platform");
QCOMPARE(s.left(16), QString(data->expected).left(16));
#else
- QCOMPARE(s, QString(data->expected));
+ QCOMPARE(s, QLatin1String(data->expected));
#endif
}
}
-static inline int sign(int x)
-{
- return x == 0 ? 0 : (x < 0 ? -1 : 1);
-}
-
-#include <locale.h>
-
-void tst_QString::localeAwareCompare_data()
-{
- QTest::addColumn<QByteArray>("locale");
- QTest::addColumn<QString>("s1");
- QTest::addColumn<QString>("s2");
- QTest::addColumn<int>("result");
-
-#if defined(Q_OS_WIN) || defined(Q_OS_DARWIN) || QT_CONFIG(icu)
- // Although the test sets LC_ALL (and adds a suffix to wanted) test
- // LC_COLLATE because setlocale(LC_ALL, nullptr) encodes the whole locale,
- // it's not simply the value of LC_ALL. We need our own copy of the reported
- // value, as later setlocale() calls may stomp the value:
- const QByteArray current(setlocale(LC_COLLATE, nullptr));
- const auto canTest = [current](const char *wanted) {
-# if QT_CONFIG(icu)
- // ICU will correctly use en when relevant environment variables are set
- // to en.UTF-8, but setlocale() reports that as C, whose sort order is
- // simpler. Only believe we can run C tests if the environment variables
- // (which, conveniently, QLocale::system()'s Unix backend uses) say it
- // really is. Conversely, don't reject "en_US" just because setlocale()
- // misdescribes it.
- if (current == "C") {
- const QString sys = QLocale::system().name();
- if (wanted == current ? sys == u"C" : sys.startsWith(wanted))
- return true;
- qDebug("Skipping %s test-cases as we can only test in locale %s (seen as C)",
- wanted, sys.toUtf8().constData());
- return false;
- }
-# endif
- if (current.startsWith(wanted))
- return true;
-# ifdef Q_OS_WIN
- // Unhelpfully, MS doesn't deign to use the usual format of locale tags,
- // but expands the tag names to full names (in English):
- const auto want = QLocale(QLatin1String(wanted));
- if (current.startsWith(
- QString(QLocale::languageToString(want.language()) + QChar('_')
- + QLocale::territoryToString(want.territory())).toLocal8Bit())) {
- return true;
- }
-# endif
- qDebug("Skipping %s test-cases as we can only test in locale %s (seen as %s)",
- wanted, QLocale::system().name().toUtf8().constData(), current.data());
- return false;
- };
-#else
- // Otherwise, trust that setlocale() reconfigures QString::localeAwareCompare():
- const auto canTest = [](const char *) { return true; };
-#endif
- // Update tailpiece's max-value for this if you add a new locale group
- int countGroups = 0;
-
- // Compare decomposed and composed form
- if (canTest("en_US")) {
- // From ES6 test262 test suite (built-ins/String/prototype/localeCompare/15.5.4.9_CE.js). The test cases boil down to code like this:
- // console.log("\u1111\u1171\u11B6".localeCompare("\ud4db")
-
- // example from Unicode 5.0, section 3.7, definition D70
- QTest::newRow("normalize1")
- << QByteArray("en_US")
- << QString::fromUtf8("o\xCC\x88")
- << QString::fromUtf8("\xC3\xB6") << 0;
- // examples from Unicode 5.0, chapter 3.11
- QTest::newRow("normalize2")
- << QByteArray("en_US")
- << QString::fromUtf8("\xC3\xA4\xCC\xA3")
- << QString::fromUtf8("a\xCC\xA3\xCC\x88") << 0;
- QTest::newRow("normalize3")
- << QByteArray("en_US")
- << QString::fromUtf8("a\xCC\x88\xCC\xA3")
- << QString::fromUtf8("a\xCC\xA3\xCC\x88") << 0;
- QTest::newRow("normalize4")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE1\xBA\xA1\xCC\x88")
- << QString::fromUtf8("a\xCC\xA3\xCC\x88") << 0;
- QTest::newRow("normalize5")
- << QByteArray("en_US")
- << QString::fromUtf8("\xC3\xA4\xCC\x86")
- << QString::fromUtf8("a\xCC\x88\xCC\x86") << 0;
- QTest::newRow("normalize6")
- << QByteArray("en_US")
- << QString::fromUtf8("\xC4\x83\xCC\x88")
- << QString::fromUtf8("a\xCC\x86\xCC\x88") << 0;
- // example from Unicode 5.0, chapter 3.12
- QTest::newRow("normalize7")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE1\x84\x91\xE1\x85\xB1\xE1\x86\xB6")
- << QString::fromUtf8("\xED\x93\x9B") << 0;
- // examples from UTS 10, Unicode Collation Algorithm
- QTest::newRow("normalize8")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE2\x84\xAB")
- << QString::fromUtf8("\xC3\x85") << 0;
- QTest::newRow("normalize9")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE2\x84\xAB")
- << QString::fromUtf8("A\xCC\x8A") << 0;
- QTest::newRow("normalize10")
- << QByteArray("en_US")
- << QString::fromUtf8("x\xCC\x9B\xCC\xA3")
- << QString::fromUtf8("x\xCC\xA3\xCC\x9B") << 0;
- QTest::newRow("normalize11")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE1\xBB\xB1")
- << QString::fromUtf8("\xE1\xBB\xA5\xCC\x9B") << 0;
- QTest::newRow("normalize12")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE1\xBB\xB1")
- << QString::fromUtf8("u\xCC\x9B\xCC\xA3") << 0;
- QTest::newRow("normalize13")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE1\xBB\xB1")
- << QString::fromUtf8("\xC6\xB0\xCC\xA3") << 0;
- QTest::newRow("normalize14")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE1\xBB\xB1")
- << QString::fromUtf8("u\xCC\xA3\xCC\x9B") << 0;
- // examples from UAX 15, Unicode Normalization Forms
- QTest::newRow("normalize15")
- << QByteArray("en_US")
- << QString::fromUtf8("\xC3\x87")
- << QString::fromUtf8("C\xCC\xA7") << 0;
- QTest::newRow("normalize16")
- << QByteArray("en_US")
- << QString::fromUtf8("q\xCC\x87\xCC\xA3")
- << QString::fromUtf8("q\xCC\xA3\xCC\x87") << 0;
- QTest::newRow("normalize17")
- << QByteArray("en_US")
- << QString::fromUtf8("\xEA\xB0\x80")
- << QString::fromUtf8("\xE1\x84\x80\xE1\x85\xA1") << 0;
- QTest::newRow("normalize18")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE2\x84\xAB")
- << QString::fromUtf8("A\xCC\x8A") << 0;
- QTest::newRow("normalize19")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE2\x84\xA6")
- << QString::fromUtf8("\xCE\xA9") << 0;
- QTest::newRow("normalize20")
- << QByteArray("en_US")
- << QString::fromUtf8("\xC3\x85")
- << QString::fromUtf8("A\xCC\x8A") << 0;
- QTest::newRow("normalize21")
- << QByteArray("en_US")
- << QString::fromUtf8("\xC3\xB4")
- << QString::fromUtf8("o\xCC\x82") << 0;
- QTest::newRow("normalize22")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE1\xB9\xA9")
- << QString::fromUtf8("s\xCC\xA3\xCC\x87") << 0;
- QTest::newRow("normalize23")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE1\xB8\x8B\xCC\xA3")
- << QString::fromUtf8("d\xCC\xA3\xCC\x87") << 0;
- QTest::newRow("normalize24")
- << QByteArray("en_US")
- << QString::fromUtf8("\xE1\xB8\x8B\xCC\xA3")
- << QString::fromUtf8("\xE1\xB8\x8D\xCC\x87") << 0;
- QTest::newRow("normalize25")
- << QByteArray("en_US")
- << QString::fromUtf8("q\xCC\x87\xCC\xA3")
- << QString::fromUtf8("q\xCC\xA3\xCC\x87") << 0;
-
- QTest::newRow("en@5.gt.4") << QByteArray("en_US") << QString("5") << QString("4") << 1;
- QTest::newRow("en@4.lt.6") << QByteArray("en_US") << QString("4") << QString("6") << -1;
- QTest::newRow("en@5.l6.6") << QByteArray("en_US") << QString("5") << QString("6") << -1;
-
- QTest::newRow("en@null.eq.null") << QByteArray("en_US") << QString() << QString() << 0;
- QTest::newRow("en@empty.eq.null") << QByteArray("en_US") << QString("") << QString() << 0;
- QTest::newRow("en@null.lt.non-empty") << QByteArray("en_US") << QString()
- << QString("test") << -1;
- QTest::newRow("en@empty.lt.non-empty") << QByteArray("en_US") << QString("")
- << QString("test") << -1;
-
- countGroups++;
- }
-
- /*
- The C locale performs simple code-point number comparison of successive
- characters until if finds a difference. Contrast with Swedish below,
- particularly the a-umlaut vs a-ring comparison.
- */
- if (canTest("C")) {
- QTest::newRow("C@auml.lt.aring")
- << QByteArray("C")
- << QString::fromLatin1("\xe4") // &auml;
- << QString::fromLatin1("\xe5") << -1;
- QTest::newRow("C@auml.lt.ouml")
- << QByteArray("C")
- << QString::fromLatin1("\xe4")
- << QString::fromLatin1("\xf6") << -1; // &ouml;
- QTest::newRow("C.aring.lt.ouml")
- << QByteArray("C")
- << QString::fromLatin1("\xe5") // &aring;
- << QString::fromLatin1("\xf6") << -1;
-
- countGroups++;
- }
-
- /*
- In Swedish, a with ring above (E5) comes before a with
- diaresis (E4), which comes before o diaresis (F6), which
- all come after z.
- */
- if (canTest("sv_SE")) {
- QTest::newRow("swede@aring.lt.auml")
- << QByteArray("sv_SE")
- << QString::fromLatin1("\xe5")
- << QString::fromLatin1("\xe4") << -1;
- QTest::newRow("swede@auml.lt.ouml")
- << QByteArray("sv_SE")
- << QString::fromLatin1("\xe4")
- << QString::fromLatin1("\xf6") << -1;
- QTest::newRow("swede.aring.lt.ouml")
- << QByteArray("sv_SE")
- << QString::fromLatin1("\xe5")
- << QString::fromLatin1("\xf6") << -1;
- QTest::newRow("swede.z.lt.aring")
- << QByteArray("sv_SE")
- << QString::fromLatin1("z")
- << QString::fromLatin1("\xe5") << -1;
-
- countGroups++;
- }
-
- /*
- In Norwegian, ae (E6) comes before o with stroke (D8), which
- comes before a with ring above (E5).
- */
- if (canTest("nb_NO")) {
- QTest::newRow("norsk.ae.lt.oslash")
- << QByteArray("nb_NO")
- << QString::fromLatin1("\xe6")
- << QString::fromLatin1("\xd8") << -1;
- QTest::newRow("norsk.oslash.lt.aring")
- << QByteArray("nb_NO")
- << QString::fromLatin1("\xd8")
- << QString::fromLatin1("\xe5") << -1;
- QTest::newRow("norsk.ae.lt.aring")
- << QByteArray("nb_NO")
- << QString::fromLatin1("\xe6")
- << QString::fromLatin1("\xe5") << -1;
-
- countGroups++;
- }
-
- /*
- In German, z comes *after* a with diaresis (E4),
- which comes before o diaresis (F6).
- */
- if (canTest("de_DE")) {
- QTest::newRow("german.z.gt.auml")
- << QByteArray("de_DE")
- << QString::fromLatin1("z")
- << QString::fromLatin1("\xe4") << 1;
- QTest::newRow("german.auml.lt.ouml")
- << QByteArray("de_DE")
- << QString::fromLatin1("\xe4")
- << QString::fromLatin1("\xf6") << -1;
- QTest::newRow("german.z.gt.ouml")
- << QByteArray("de_DE")
- << QString::fromLatin1("z")
- << QString::fromLatin1("\xf6") << 1;
-
- countGroups++;
- }
- // Tell developers how to get all the results (bot don't spam Coin logs):
- if (countGroups < 5 && !qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci")) {
- qDebug(R"(On platforms where this test cannot control the locale used by
-QString::localeAwareCompare(), it only runs test-cases for the locale in use.
-To test thoroughly, it is necessary to run this test repeatedly with each of
-C.UTF-8, en_US.UTF-8, sv_SE.UTF-8, nb_NO.UTF-8 and de_DE.UTF-8 as the system
-locale.)");
- }
- if (!countGroups)
- QSKIP("No data for available locale");
-}
-
-void tst_QString::localeAwareCompare()
-{
- QFETCH(QByteArray, locale);
- QFETCH(const QString, s1);
- QFETCH(const QString, s2);
- QFETCH(int, result);
- locale += ".UTF-8"; // So we don't have to repeat it on every data row !
-
- const TransientLocale tested(LC_ALL, locale.constData());
- if (!tested.isValid())
- QSKIP(("Test needs locale " + locale + " installed on this machine").constData());
-
- // qDebug() << s1.toUtf8().toHex(' ') << "as" << result << "to" << s2.toUtf8().toHex(' ');
- QCOMPARE(sign(QString::localeAwareCompare(s1, s2)), result);
- QCOMPARE(sign(QString::localeAwareCompare(s2, s1)), -result);
-}
-
void tst_QString::iterators()
{
QString emptyStr;
@@ -6327,7 +7482,7 @@ void tst_QString::iterators()
QVERIFY(!emptyStr.isDetached());
QCOMPARE(emptyStr.begin(), emptyStr.end());
- QString s = "0123456789";
+ QString s = u"0123456789"_s;
auto it = s.begin();
auto constIt = s.cbegin();
@@ -6368,7 +7523,7 @@ void tst_QString::reverseIterators()
QVERIFY(!emptyStr.isDetached());
QCOMPARE(emptyStr.rbegin(), emptyStr.rend());
- QString s = "1234";
+ QString s(u"1234"_s);
QString sr = s;
std::reverse(sr.begin(), sr.end());
const QString &csr = sr;
@@ -6386,18 +7541,18 @@ void tst_QString::split_data()
QTest::addColumn<QString>("sep");
QTest::addColumn<QStringList>("result");
- QTest::newRow("1") << "a,b,c" << "," << (QStringList() << "a" << "b" << "c");
- QTest::newRow("2") << QString("-rw-r--r-- 1 0 0 519240 Jul 9 2002 bigfile")
- << " "
- << (QStringList() << "-rw-r--r--" << "" << "1" << "0" << "" << "0" << ""
- << "519240" << "Jul" << "" << "9" << "" << "2002" << "bigfile");
- QTest::newRow("one-empty") << "" << " " << (QStringList() << "");
- QTest::newRow("two-empty") << " " << " " << (QStringList() << "" << "");
- QTest::newRow("three-empty") << " " << " " << (QStringList() << "" << "" << "");
+ QTest::newRow("1") << u"a,b,c"_s << u","_s << QStringList{u"a"_s, u"b"_s, u"c"_s};
+ QTest::newRow("2") << u"-rw-r--r-- 1 0 0 519240 Jul 9 2002 bigfile"_s << u" "_s
+ << QStringList{ u"-rw-r--r--"_s, u""_s, u"1"_s, u"0"_s, u""_s,
+ u"0"_s, u""_s, u"519240"_s, u"Jul"_s, u""_s,
+ u"9"_s, u""_s, u"2002"_s, u"bigfile"_s };
+ QTest::newRow("one-empty") << u""_s << u" "_s << QStringList{u""_s};
+ QTest::newRow("two-empty") << u" "_s << u" "_s << QStringList{u""_s, u""_s};
+ QTest::newRow("three-empty") << u" "_s << u" "_s << QStringList{u""_s, u""_s, u""_s};
- QTest::newRow("all-empty") << "" << "" << (QStringList() << "" << "");
- QTest::newRow("sep-empty") << "abc" << "" << (QStringList() << "" << "a" << "b" << "c" << "");
- QTest::newRow("null-empty") << QString() << " " << QStringList { "" };
+ QTest::newRow("all-empty") << u""_s << u""_s << QStringList{u""_s, u""_s};
+ QTest::newRow("sep-empty") << u"abc"_s << u""_s << QStringList{u""_s, u"a"_s, u"b"_s, u"c"_s, u""_s};
+ QTest::newRow("null-empty") << QString() << u" "_s << QStringList{u""_s};
}
template<class> struct StringSplitWrapper;
@@ -6469,7 +7624,7 @@ QT_WARNING_DISABLE_DEPRECATED
QVERIFY(list == result);
}
- result.removeAll("");
+ result.removeAll(u""_s);
list = str.split(sep, Qt::SkipEmptyParts);
QVERIFY(list == result);
#if QT_CONFIG(regularexpression)
@@ -6501,15 +7656,15 @@ void tst_QString::split_regularexpression_data()
QTest::newRow("data01") << "Some text\n\twith strange whitespace."
<< "\\s+"
- << (QStringList() << "Some" << "text" << "with" << "strange" << "whitespace." );
+ << QStringList{u"Some"_s, u"text"_s, u"with"_s, u"strange"_s, u"whitespace."_s };
QTest::newRow("data02") << "This time, a normal English sentence."
<< "\\W+"
- << (QStringList() << "This" << "time" << "a" << "normal" << "English" << "sentence" << "");
+ << QStringList{u"This"_s, u"time"_s, u"a"_s, u"normal"_s, u"English"_s, u"sentence"_s, u""_s};
QTest::newRow("data03") << "Now: this sentence fragment."
<< "\\b"
- << (QStringList() << "" << "Now" << ": " << "this" << " " << "sentence" << " " << "fragment" << ".");
+ << QStringList{u""_s, u"Now"_s, u": "_s, u"this"_s, u" "_s, u"sentence"_s, u" "_s, u"fragment"_s, u"."_s};
}
template<class List, class RegExp>
@@ -6535,6 +7690,45 @@ void tst_QString::split_regularexpression()
split_regexp<QStringList, QRegularExpression>(string, pattern, result);
split_regexp<QList<QStringView>, QRegularExpression>(string, pattern, result);
}
+
+// Test that rvalue strings (e.g. temporaries) are kept alive in
+// QRegularExpression-related APIs
+void tst_QString::regularexpression_lifetime()
+{
+ const auto getString = [] {
+ // deliberately heap-allocated
+ return QString(QLatin1String("the quick brown fox jumps over the lazy dog"));
+ };
+
+ QRegularExpression re(u"\\w{5}"_s);
+
+ {
+ QString s = getString();
+ QRegularExpressionMatch match;
+ const bool contains = std::move(s).contains(re, &match);
+ s.fill(u'X'); // NOLINT(bugprone-use-after-move)
+ QVERIFY(contains);
+ QCOMPARE(match.capturedView(), u"quick");
+ }
+
+ {
+ QString s = getString();
+ QRegularExpressionMatch match;
+ const auto index = std::move(s).indexOf(re, 0, &match);
+ s.fill(u'X'); // NOLINT(bugprone-use-after-move)
+ QCOMPARE(index, 4);
+ QCOMPARE(match.capturedView(), u"quick");
+ }
+
+ {
+ QString s = getString();
+ QRegularExpressionMatch match;
+ const auto lastIndex = std::move(s).lastIndexOf(re, &match);
+ s.fill(u'X'); // NOLINT(bugprone-use-after-move)
+ QCOMPARE(lastIndex, 20);
+ QCOMPARE(match.capturedView(), u"jumps");
+ }
+}
#endif
void tst_QString::fromUtf16_data()
@@ -6543,18 +7737,19 @@ void tst_QString::fromUtf16_data()
QTest::addColumn<QString>("res");
QTest::addColumn<int>("len");
- QTest::newRow("str0") << QString("abcdefgh") << QString("abcdefgh") << -1;
- QTest::newRow("str0-len") << QString("abcdefgh") << QString("abc") << 3;
+ QTest::newRow("str0") << u"abcdefgh"_s << u"abcdefgh"_s << -1;
+ QTest::newRow("str0-len") << u"abcdefgh"_s << u"abc"_s << 3;
}
+#if QT_DEPRECATED_SINCE(6, 0)
void tst_QString::fromUtf16()
{
QFETCH(QString, ucs2);
QFETCH(QString, res);
QFETCH(int, len);
-
- QCOMPARE(QString::fromUtf16(ucs2.utf16(), len), res);
+ QT_IGNORE_DEPRECATIONS(QCOMPARE(QString::fromUtf16(ucs2.utf16(), len), res);)
}
+#endif // QT_DEPRECATED_SINCE(6, 0)
void tst_QString::fromUtf16_char16()
{
@@ -6572,7 +7767,7 @@ void tst_QString::unicodeStrings()
QVERIFY(nullStr.toStdU32String().empty());
QVERIFY(!nullStr.isDetached());
- QString emptyStr("");
+ QString emptyStr(u""_s);
QVERIFY(emptyStr.toStdU16String().empty());
QVERIFY(emptyStr.toStdU32String().empty());
QVERIFY(!emptyStr.isDetached());
@@ -6582,7 +7777,7 @@ void tst_QString::unicodeStrings()
static const std::u32string u32str1(U"Hello Unicode World");
s1 = QString::fromStdU16String(u16str1);
s2 = QString::fromStdU32String(u32str1);
- QCOMPARE(s1, QString("Hello Unicode World"));
+ QCOMPARE(s1, u"Hello Unicode World");
QCOMPARE(s1, s2);
QCOMPARE(s2.toStdU16String(), u16str1);
@@ -6594,7 +7789,7 @@ void tst_QString::unicodeStrings()
void tst_QString::latin1String()
{
- QString s("Hello");
+ QString s(u"Hello"_s);
QVERIFY(s == QLatin1String("Hello"));
QVERIFY(s != QLatin1String("Hello World"));
@@ -6606,72 +7801,98 @@ void tst_QString::latin1String()
QVERIFY(!(s < QLatin1String("Hell")));
}
+void tst_QString::isInf_data()
+{
+ QTest::addColumn<QString>("str");
+ QTest::addColumn<bool>("expected_ok");
+ QTest::addColumn<bool>("expected_is_inf");
+
+ QTest::newRow("inf") << u"inf"_s << true << true;
+ QTest::newRow("INF") << u"INF"_s << true << true;
+ QTest::newRow("inf ") << u"inf "_s << true << true;
+ QTest::newRow("+inf") << u"+inf"_s << true << true;
+ QTest::newRow("\t +INF") << u"\t +INF"_s << true << true;
+ QTest::newRow("\t INF") << u"\t INF"_s << true << true;
+ QTest::newRow("inF ") << u"inF "_s << true << true;
+ QTest::newRow("+iNf") << u"+iNf"_s << true << true;
+ QTest::newRow("INFe-10") << u"INFe-10"_s << false << false;
+ QTest::newRow("0xINF") << u"0xINF"_s << false << false;
+ QTest::newRow("- INF") << u"- INF"_s << false << false;
+ QTest::newRow("+ INF") << u"+ INF"_s << false << false;
+ QTest::newRow("-- INF") << u"-- INF"_s << false << false;
+ QTest::newRow("inf0") << u"inf0"_s << false << false;
+ QTest::newRow("--INF") << u"--INF"_s << false << false;
+ QTest::newRow("++INF") << u"++INF"_s << false << false;
+ QTest::newRow("INF++") << u"INF++"_s << false << false;
+ QTest::newRow("INF--") << u"INF--"_s << false << false;
+ QTest::newRow("INF +") << u"INF +"_s << false << false;
+ QTest::newRow("INF -") << u"INF -"_s << false << false;
+ QTest::newRow("0INF") << u"0INF"_s << false << false;
+}
+
+void tst_QString::isInf()
+{
+ QFETCH(QString, str);
+ QFETCH(bool, expected_ok);
+ QFETCH(bool, expected_is_inf);
+
+ bool ok = false;
+ double dbl = str.toDouble(&ok);
+ QVERIFY(ok == expected_ok);
+ QVERIFY(qIsInf(dbl) == expected_is_inf);
+}
+
+void tst_QString::isNan_data()
+{
+ QTest::addColumn<QString>("str");
+ QTest::addColumn<bool>("expected_ok");
+ QTest::addColumn<bool>("expected_is_nan");
+
+ QTest::newRow("nan") << u"nan"_s << true << true;
+ QTest::newRow("NAN") << u"NAN"_s << true << true;
+ QTest::newRow("nan ") << u"nan "_s << true << true;
+ QTest::newRow("\t NAN") << u"\t NAN"_s << true << true;
+ QTest::newRow("\t NAN ") << u"\t NAN "_s << true << true;
+ QTest::newRow("-nan") << u"-nan"_s << false << false;
+ QTest::newRow("+NAN") << u"+NAN"_s << false << false;
+ QTest::newRow("NaN") << u"NaN"_s << true << true;
+ QTest::newRow("nAn") << u"nAn"_s << true << true;
+ QTest::newRow("NANe-10") << u"NANe-10"_s << false << false;
+ QTest::newRow("0xNAN") << u"0xNAN"_s << false << false;
+ QTest::newRow("0NAN") << u"0NAN"_s << false << false;
+}
+
+void tst_QString::isNan()
+{
+ QFETCH(QString, str);
+ QFETCH(bool, expected_ok);
+ QFETCH(bool, expected_is_nan);
+
+ bool ok = false;
+ double dbl = str.toDouble(&ok);
+ QVERIFY(ok == expected_ok);
+ QVERIFY(qIsNaN(dbl) == expected_is_nan);
+}
+
void tst_QString::nanAndInf()
{
bool ok;
double d;
-#define CHECK_DOUBLE(str, expected_ok, expected_inf) \
- d = QString(str).toDouble(&ok); \
- QVERIFY(ok == expected_ok); \
- QVERIFY(qIsInf(d) == expected_inf);
-
- CHECK_DOUBLE("inf", true, true)
- CHECK_DOUBLE("INF", true, true)
- CHECK_DOUBLE("inf ", true, true)
- CHECK_DOUBLE("+inf", true, true)
- CHECK_DOUBLE("\t +INF", true, true)
- CHECK_DOUBLE("\t INF", true, true)
- CHECK_DOUBLE("inF ", true, true)
- CHECK_DOUBLE("+iNf", true, true)
- CHECK_DOUBLE("INFe-10", false, false)
- CHECK_DOUBLE("0xINF", false, false)
- CHECK_DOUBLE("- INF", false, false)
- CHECK_DOUBLE("+ INF", false, false)
- CHECK_DOUBLE("-- INF", false, false)
- CHECK_DOUBLE("inf0", false, false)
- CHECK_DOUBLE("--INF", false, false)
- CHECK_DOUBLE("++INF", false, false)
- CHECK_DOUBLE("INF++", false, false)
- CHECK_DOUBLE("INF--", false, false)
- CHECK_DOUBLE("INF +", false, false)
- CHECK_DOUBLE("INF -", false, false)
- CHECK_DOUBLE("0INF", false, false)
-#undef CHECK_INF
-
-#define CHECK_NAN(str, expected_ok, expected_nan) \
- d = QString(str).toDouble(&ok); \
- QVERIFY(ok == expected_ok); \
- QVERIFY(qIsNaN(d) == expected_nan);
-
- CHECK_NAN("nan", true, true)
- CHECK_NAN("NAN", true, true)
- CHECK_NAN("nan ", true, true)
- CHECK_NAN("\t NAN", true, true)
- CHECK_NAN("\t NAN ", true, true)
- CHECK_NAN("-nan", false, false)
- CHECK_NAN("+NAN", false, false)
- CHECK_NAN("NaN", true, true)
- CHECK_NAN("nAn", true, true)
- CHECK_NAN("NANe-10", false, false)
- CHECK_NAN("0xNAN", false, false)
- CHECK_NAN("0NAN", false, false)
-#undef CHECK_NAN
-
- d = QString("-INF").toDouble(&ok);
+ d = u"-INF"_s.toDouble(&ok);
QVERIFY(ok);
QVERIFY(d == -qInf());
- QString("INF").toLong(&ok);
+ u"INF"_s.toLong(&ok);
QVERIFY(!ok);
- QString("INF").toLong(&ok, 36);
+ u"INF"_s.toLong(&ok, 36);
QVERIFY(ok);
- QString("INF0").toLong(&ok, 36);
+ u"INF0"_s.toLong(&ok, 36);
QVERIFY(ok);
- QString("0INF0").toLong(&ok, 36);
+ u"0INF0"_s.toLong(&ok, 36);
QVERIFY(ok);
// Check that inf (float) => "inf" (QString) => inf (float).
@@ -6691,31 +7912,36 @@ void tst_QString::nanAndInf()
// Check that .arg(inf-or-nan, wide, fmt, 3, '0') padds with zeros
QString form = QStringLiteral("%1");
- QCOMPARE(form.arg(qInf(), 5, 'f', 3, '0'), u"00inf");
- QCOMPARE(form.arg(qInf(), -5, 'f', 3, '0'), u"inf00");
- QCOMPARE(form.arg(-qInf(), 6, 'f', 3, '0'), u"00-inf");
- QCOMPARE(form.arg(-qInf(), -6, 'f', 3, '0'), u"-inf00");
- QCOMPARE(form.arg(qQNaN(), -5, 'f', 3, '0'), u"nan00");
- QCOMPARE(form.arg(qInf(), 5, 'e', 3, '0'), u"00inf");
- QCOMPARE(form.arg(qInf(), -5, 'e', 3, '0'), u"inf00");
- QCOMPARE(form.arg(-qInf(), 6, 'e', 3, '0'), u"00-inf");
- QCOMPARE(form.arg(-qInf(), -6, 'e', 3, '0'), u"-inf00");
- QCOMPARE(form.arg(qQNaN(), -5, 'e', 3, '0'), u"nan00");
- QCOMPARE(form.arg(qInf(), 5, 'E', 3, '0'), u"00INF");
- QCOMPARE(form.arg(qInf(), -5, 'E', 3, '0'), u"INF00");
- QCOMPARE(form.arg(-qInf(), 6, 'E', 3, '0'), u"00-INF");
- QCOMPARE(form.arg(-qInf(), -6, 'E', 3, '0'), u"-INF00");
- QCOMPARE(form.arg(qQNaN(), -5, 'E', 3, '0'), u"NAN00");
- QCOMPARE(form.arg(qInf(), 5, 'g', 3, '0'), u"00inf");
- QCOMPARE(form.arg(qInf(), -5, 'g', 3, '0'), u"inf00");
- QCOMPARE(form.arg(-qInf(), 6, 'g', 3, '0'), u"00-inf");
- QCOMPARE(form.arg(-qInf(), -6, 'g', 3, '0'), u"-inf00");
- QCOMPARE(form.arg(qQNaN(), -5, 'g', 3, '0'), u"nan00");
- QCOMPARE(form.arg(qInf(), 5, 'G', 3, '0'), u"00INF");
- QCOMPARE(form.arg(qInf(), -5, 'G', 3, '0'), u"INF00");
- QCOMPARE(form.arg(-qInf(), 6, 'G', 3, '0'), u"00-INF");
- QCOMPARE(form.arg(-qInf(), -6, 'G', 3, '0'), u"-INF00");
- QCOMPARE(form.arg(qQNaN(), -5, 'G', 3, '0'), u"NAN00");
+ QCOMPARE(form.arg(qInf(), 5, 'f', 3, u'0'), u"00inf");
+ QCOMPARE(form.arg(qInf(), -5, 'f', 3, u'0'), u"inf00");
+ QCOMPARE(form.arg(-qInf(), 6, 'f', 3, u'0'), u"00-inf");
+ QCOMPARE(form.arg(-qInf(), -6, 'f', 3, u'0'), u"-inf00");
+ QCOMPARE(form.arg(qQNaN(), -5, 'f', 3, u'0'), u"nan00");
+ QCOMPARE(form.arg(qInf(), 5, 'F', 3, u'0'), u"00INF");
+ QCOMPARE(form.arg(qInf(), -5, 'F', 3, u'0'), u"INF00");
+ QCOMPARE(form.arg(-qInf(), 6, 'F', 3, u'0'), u"00-INF");
+ QCOMPARE(form.arg(-qInf(), -6, 'F', 3, u'0'), u"-INF00");
+ QCOMPARE(form.arg(qQNaN(), -5, 'F', 3, u'0'), u"NAN00");
+ QCOMPARE(form.arg(qInf(), 5, 'e', 3, u'0'), u"00inf");
+ QCOMPARE(form.arg(qInf(), -5, 'e', 3, u'0'), u"inf00");
+ QCOMPARE(form.arg(-qInf(), 6, 'e', 3, u'0'), u"00-inf");
+ QCOMPARE(form.arg(-qInf(), -6, 'e', 3, u'0'), u"-inf00");
+ QCOMPARE(form.arg(qQNaN(), -5, 'e', 3, u'0'), u"nan00");
+ QCOMPARE(form.arg(qInf(), 5, 'E', 3, u'0'), u"00INF");
+ QCOMPARE(form.arg(qInf(), -5, 'E', 3, u'0'), u"INF00");
+ QCOMPARE(form.arg(-qInf(), 6, 'E', 3, u'0'), u"00-INF");
+ QCOMPARE(form.arg(-qInf(), -6, 'E', 3, u'0'), u"-INF00");
+ QCOMPARE(form.arg(qQNaN(), -5, 'E', 3, u'0'), u"NAN00");
+ QCOMPARE(form.arg(qInf(), 5, 'g', 3, u'0'), u"00inf");
+ QCOMPARE(form.arg(qInf(), -5, 'g', 3, u'0'), u"inf00");
+ QCOMPARE(form.arg(-qInf(), 6, 'g', 3, u'0'), u"00-inf");
+ QCOMPARE(form.arg(-qInf(), -6, 'g', 3, u'0'), u"-inf00");
+ QCOMPARE(form.arg(qQNaN(), -5, 'g', 3, u'0'), u"nan00");
+ QCOMPARE(form.arg(qInf(), 5, 'G', 3, u'0'), u"00INF");
+ QCOMPARE(form.arg(qInf(), -5, 'G', 3, u'0'), u"INF00");
+ QCOMPARE(form.arg(-qInf(), 6, 'G', 3, u'0'), u"00-INF");
+ QCOMPARE(form.arg(-qInf(), -6, 'G', 3, u'0'), u"-INF00");
+ QCOMPARE(form.arg(qQNaN(), -5, 'G', 3, u'0'), u"NAN00");
}
void tst_QString::arg_fillChar_data()
@@ -6730,19 +7956,19 @@ void tst_QString::arg_fillChar_data()
QTest::newRow("str0")
<< QStringLiteral("%1%2%3")
- << DataList{QVariant(int(5)), QVariant(QString("f")), QVariant(int(0))}
- << IntList{3, 2, 5} << QString("abc") << QString("aa5bfcccc0");
+ << DataList{QVariant(int(5)), QVariant(u"f"_s), QVariant(int(0))}
+ << IntList{3, 2, 5} << u"abc"_s << u"aa5bfcccc0"_s;
QTest::newRow("str1")
<< QStringLiteral("%3.%1.%3.%2")
- << DataList{QVariant(int(5)), QVariant(QString("foo")), QVariant(qulonglong(INT_MAX))}
- << IntList{10, 2, 5} << QString("0 c") << QString("2147483647.0000000005.2147483647.foo");
+ << DataList{QVariant(int(5)), QVariant(u"foo"_s), QVariant(qulonglong(INT_MAX))}
+ << IntList{10, 2, 5} << u"0 c"_s << u"2147483647.0000000005.2147483647.foo"_s;
QTest::newRow("str2")
<< QStringLiteral("%9 og poteter")
- << DataList{QVariant(QString("fisk"))} << IntList{100} << QString("f")
- << QString("ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
- "fffffffffffffffffffffffffffffffffffffisk og poteter");
+ << DataList{QVariant(u"fisk"_s)} << IntList{100} << u"f"_s
+ << u"ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
+ "fffffffffffffffffffffffffffffffffffffisk og poteter"_s;
// Left-padding with zeros fits them before the minus sign:
QTest::newRow("zero-left")
@@ -6772,28 +7998,61 @@ void tst_QString::arg_fillChar()
QFETCH(IntList, widths);
QFETCH(QString, fillChars);
QFETCH(QString, expected);
- QCOMPARE(replaceValues.count(), fillChars.count());
- QCOMPARE(replaceValues.count(), widths.count());
+ QCOMPARE(replaceValues.size(), fillChars.size());
+ QCOMPARE(replaceValues.size(), widths.size());
QString actual = pattern;
- for (int i=0; i<replaceValues.count(); ++i) {
+ for (int i=0; i<replaceValues.size(); ++i) {
const QVariant &var = replaceValues.at(i);
const int width = widths.at(i);
const QChar fillChar = fillChars.at(i);
- switch (var.type()) {
- case QVariant::String: actual = actual.arg(var.toString(), width, fillChar); break;
- case QVariant::Int: actual = actual.arg(var.toInt(), width, base, fillChar); break;
- case QVariant::UInt: actual = actual.arg(var.toUInt(), width, base, fillChar); break;
- case QVariant::Double: actual = actual.arg(var.toDouble(), width, fmt, prec, fillChar); break;
- case QVariant::LongLong: actual = actual.arg(var.toLongLong(), width, base, fillChar); break;
- case QVariant::ULongLong: actual = actual.arg(var.toULongLong(), width, base, fillChar); break;
- default: QVERIFY(0); break;
+ switch (var.typeId()) {
+ case QMetaType::QString:
+ actual = actual.arg(var.toString(), width, fillChar);
+ break;
+ case QMetaType::Int:
+ actual = actual.arg(var.toInt(), width, base, fillChar);
+ break;
+ case QMetaType::UInt:
+ actual = actual.arg(var.toUInt(), width, base, fillChar);
+ break;
+ case QMetaType::Double:
+ actual = actual.arg(var.toDouble(), width, fmt, prec, fillChar);
+ break;
+ case QMetaType::LongLong:
+ actual = actual.arg(var.toLongLong(), width, base, fillChar);
+ break;
+ case QMetaType::ULongLong:
+ actual = actual.arg(var.toULongLong(), width, base, fillChar);
+ break;
+ default:
+ QVERIFY(0);
+ break;
}
}
QCOMPARE(actual, expected);
}
+void tst_QString::comparisonCompiles()
+{
+ QTestPrivate::testAllComparisonOperatorsCompile<QString>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QString, std::nullptr_t>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QString, QChar>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QString, QLatin1StringView>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QString, const char16_t *>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QString, QStringView>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QString, QUtf8StringView>();
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
+ QTestPrivate::testAllComparisonOperatorsCompile<QString, QByteArrayView>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QString, QByteArray>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QString, const char *>();
+#endif
+#ifdef __cpp_char8_t
+ QTestPrivate::testAllComparisonOperatorsCompile<QString, const char8_t *>();
+#endif
+}
+
void tst_QString::compare_data()
{
QTest::addColumn<QString>("s1");
@@ -6803,25 +8062,25 @@ void tst_QString::compare_data()
// null strings
QTest::newRow("null-null") << QString() << QString() << 0 << 0;
- QTest::newRow("text-null") << QString("a") << QString() << 1 << 1;
- QTest::newRow("null-text") << QString() << QString("a") << -1 << -1;
- QTest::newRow("null-empty") << QString() << QString("") << 0 << 0;
- QTest::newRow("empty-null") << QString("") << QString() << 0 << 0;
+ QTest::newRow("text-null") << u"a"_s << QString() << 1 << 1;
+ QTest::newRow("null-text") << QString() << u"a"_s << -1 << -1;
+ QTest::newRow("null-empty") << QString() << u""_s << 0 << 0;
+ QTest::newRow("empty-null") << u""_s << QString() << 0 << 0;
// empty strings
- QTest::newRow("data0") << QString("") << QString("") << 0 << 0;
- QTest::newRow("data1") << QString("a") << QString("") << 1 << 1;
- QTest::newRow("data2") << QString("") << QString("a") << -1 << -1;
+ QTest::newRow("data0") << u""_s << u""_s << 0 << 0;
+ QTest::newRow("data1") << u"a"_s << u""_s << 1 << 1;
+ QTest::newRow("data2") << u""_s << u"a"_s << -1 << -1;
// equal length
- QTest::newRow("data3") << QString("abc") << QString("abc") << 0 << 0;
- QTest::newRow("data4") << QString("abC") << QString("abc") << -1 << 0;
- QTest::newRow("data5") << QString("abc") << QString("abC") << 1 << 0;
+ QTest::newRow("data3") << u"abc"_s << u"abc"_s << 0 << 0;
+ QTest::newRow("data4") << u"abC"_s << u"abc"_s << -1 << 0;
+ QTest::newRow("data5") << u"abc"_s << u"abC"_s << 1 << 0;
// different length
- QTest::newRow("data6") << QString("abcdef") << QString("abc") << 1 << 1;
- QTest::newRow("data7") << QString("abCdef") << QString("abc") << -1 << 1;
- QTest::newRow("data8") << QString("abc") << QString("abcdef") << -1 << -1;
+ QTest::newRow("data6") << u"abcdef"_s << u"abc"_s << 1 << 1;
+ QTest::newRow("data7") << u"abCdef"_s << u"abc"_s << -1 << 1;
+ QTest::newRow("data8") << u"abc"_s << u"abcdef"_s << -1 << -1;
QString upper;
upper += QChar(QChar::highSurrogate(0x10400));
@@ -6829,17 +8088,17 @@ void tst_QString::compare_data()
QString lower;
lower += QChar(QChar::highSurrogate(0x10428));
lower += QChar(QChar::lowSurrogate(0x10428));
- QTest::newRow("data8") << upper << lower << -1 << 0;
+ QTest::newRow("data9") << upper << lower << -1 << 0;
// embedded nulls
- QByteArray onenull("", 1);
+ QLatin1String onenull("", 1);
QTest::newRow("data10") << QString(onenull) << QString(onenull) << 0 << 0;
- QTest::newRow("data11") << QString(onenull) << QString("") << 1 << 1;
- QTest::newRow("data12") << QString("") << QString(onenull) << -1 << -1;
- QTest::newRow("data13") << QString::fromLatin1("ab\0c", 4) << QString(QByteArray("ab\0c", 4)) << 0 << 0;
- QTest::newRow("data14") << QString(QByteArray("ab\0c", 4)) << QString("abc") << -1 << -1;
- QTest::newRow("data15") << QString("abc") << QString(QByteArray("ab\0c", 4)) << 1 << 1;
- QTest::newRow("data16") << QString("abc") << QString(QByteArray("abc", 4)) << -1 << -1;
+ QTest::newRow("data11") << QString(onenull) << u""_s << 1 << 1;
+ QTest::newRow("data12") << u""_s << QString(onenull) << -1 << -1;
+ QTest::newRow("data13") << QString::fromLatin1("ab\0c", 4) << QString(QLatin1String("ab\0c", 4)) << 0 << 0;
+ QTest::newRow("data14") << QString(QLatin1String("ab\0c", 4)) << u"abc"_s << -1 << -1;
+ QTest::newRow("data15") << u"abc"_s << QString(QLatin1String("ab\0c", 4)) << 1 << 1;
+ QTest::newRow("data16") << u"abc"_s << QString(QLatin1String("abc", 4)) << -1 << -1;
// All tests below (generated by the 3 for-loops) are meant to exercise the vectorized versions
// of ucstrncmp.
@@ -6849,10 +8108,10 @@ void tst_QString::compare_data()
in1 += QString::number(i % 10);
in2 += QString::number((70 - i + 1) % 10);
}
- Q_ASSERT(in1.length() == in2.length());
+ Q_ASSERT(in1.size() == in2.size());
Q_ASSERT(in1 != in2);
Q_ASSERT(in1.at(0) < in2.at(0));
- for (int i = 0; i < in1.length(); ++i) {
+ for (int i = 0; i < in1.size(); ++i) {
Q_ASSERT(in1.at(i) != in2.at(i));
}
@@ -6863,7 +8122,7 @@ void tst_QString::compare_data()
}
for (int i = 1; i <= 65; ++i) {
- QString start(i - 1, 'a');
+ QString start(i - 1, u'a');
QString in = start + QLatin1Char('a');
QTest::addRow("all-same-%d", i) << in << in << 0 << 0;
@@ -6873,9 +8132,9 @@ void tst_QString::compare_data()
}
for (int i = 0; i < 16; ++i) {
- QString in1(16, 'a');
+ QString in1(16, u'a');
QString in2 = in1;
- in2[i] = 'b';
+ in2[i] = u'b';
QTest::addRow("all-same-except-char-%d", i) << in1 << in2 << -1 << -1;
}
@@ -6885,7 +8144,7 @@ void tst_QString::compare_data()
QChar capitalAWithAcute = u'Ã';
QChar nbsp = u'\u00a0';
for (int i = 1; i <= 65; ++i) {
- QString padding(i - 1, ' ');
+ QString padding(i - 1, u' ');
QTest::addRow("ascii-nonascii-%d", i)
<< (padding + smallA) << (padding + smallAWithAcute) << -1 << -1;
QTest::addRow("nonascii-nonascii-equal-%d", i)
@@ -6899,12 +8158,17 @@ void tst_QString::compare_data()
static bool isLatin(const QString &s)
{
- for (int i = 0; i < s.length(); ++i)
+ for (int i = 0; i < s.size(); ++i)
if (s.at(i).unicode() > 0xff)
return false;
return true;
}
+static inline int sign(int x)
+{
+ return x == 0 ? 0 : (x < 0 ? -1 : 1);
+}
+
void tst_QString::compare()
{
QFETCH(QString, s1);
@@ -6978,10 +8242,73 @@ void tst_QString::compare()
}
}
+void tst_QString::comparisonMacros_data()
+{
+ compare_data();
+}
+
+void tst_QString::comparisonMacros()
+{
+ QFETCH(const QString, s1);
+ QFETCH(const QString, s2);
+ QFETCH(int, csr);
+
+ const Qt::strong_ordering expectedOrdering = [&csr] {
+ if (csr > 0)
+ return Qt::strong_ordering::greater;
+ else if (csr < 0)
+ return Qt::strong_ordering::less;
+ return Qt::strong_ordering::equal;
+ }();
+
+ QT_TEST_ALL_COMPARISON_OPS(s1, s2, expectedOrdering);
+
+ const QStringView s2sv(s2);
+ QT_TEST_ALL_COMPARISON_OPS(s1, s2sv, expectedOrdering);
+
+ if (!s2.contains(QChar(u'\0'))) {
+ const char16_t *utfData = reinterpret_cast<const char16_t*>(s2.constData());
+ QT_TEST_ALL_COMPARISON_OPS(s1, utfData, expectedOrdering);
+ }
+
+ if (s2.size() == 1) {
+ const QChar ch = s2.front();
+ QT_TEST_ALL_COMPARISON_OPS(s1, ch, expectedOrdering);
+ }
+
+ if (isLatin(s2)) {
+ QByteArray ba = s2.toLatin1();
+ const QLatin1StringView l1s2{ba};
+ QT_TEST_ALL_COMPARISON_OPS(s1, l1s2, expectedOrdering);
+ }
+
+ const QByteArray u8s2 = s2.toUtf8();
+
+ const QUtf8StringView u8s2sv(u8s2.data(), u8s2.size());
+ QT_TEST_ALL_COMPARISON_OPS(s1, u8s2sv, expectedOrdering);
+
+#ifdef __cpp_char8_t
+ if (!s2.contains(QChar(u'\0'))) {
+ const char8_t *char8data = reinterpret_cast<const char8_t*>(u8s2.constData());
+ QT_TEST_ALL_COMPARISON_OPS(s1, char8data, expectedOrdering);
+ }
+#endif // __cpp_char8_t
+
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
+ QT_TEST_ALL_COMPARISON_OPS(s1, u8s2, expectedOrdering);
+ const QByteArrayView u8s2view{u8s2.begin(), u8s2.size()};
+ QT_TEST_ALL_COMPARISON_OPS(s1, u8s2view, expectedOrdering);
+ if (!s2.contains(QChar(u'\0'))) {
+ const char *u8data = u8s2.constData();
+ QT_TEST_ALL_COMPARISON_OPS(s1, u8data, expectedOrdering);
+ }
+#endif // !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
+}
+
void tst_QString::resize()
{
QString s;
- s.resize(11, ' ');
+ s.resize(11, u' ');
QCOMPARE(s.size(), 11);
QCOMPARE(s, QLatin1String(" "));
@@ -7001,7 +8328,7 @@ void tst_QString::resize()
void tst_QString::resizeAfterFromRawData()
{
- QString buffer("hello world");
+ QString buffer(u"hello world"_s);
QString array = QString::fromRawData(buffer.constData(), buffer.size());
QVERIFY(array.constData() == buffer.constData());
@@ -7017,7 +8344,7 @@ void tst_QString::resizeAfterReserve()
QString s;
s.reserve(100);
- s += "hello world";
+ s += u"hello world"_s;
// resize should not affect capacity
s.resize(s.size());
@@ -7033,12 +8360,12 @@ void tst_QString::resizeAfterReserve()
// test resize(0) border case
s.reserve(100);
- s += "hello world";
+ s += u"hello world"_s;
s.resize(0);
QVERIFY(s.capacity() == 100);
// reserve() can't be used to truncate data
- s.fill('x', 100);
+ s.fill(u'x', 100);
s.reserve(50);
QVERIFY(s.capacity() == 100);
QVERIFY(s.size() == 100);
@@ -7211,7 +8538,7 @@ void tst_QString::repeated_data() const
void tst_QString::arg_locale()
{
QLocale l(QLocale::English, QLocale::UnitedKingdom);
- QString str("*%L1*%L2*");
+ QString str(u"*%L1*%L2*"_s);
TransientDefaultLocale transient(l);
QCOMPARE(str.arg(123456).arg(1234.56), QString::fromLatin1("*123,456*1,234.56*"));
@@ -7265,7 +8592,7 @@ void tst_QString::literals()
{
QString str(QStringLiteral("abcd"));
- QVERIFY(str.length() == 4);
+ QVERIFY(str.size() == 4);
QCOMPARE(str.capacity(), 0);
QVERIFY(str == QLatin1String("abcd"));
QVERIFY(!str.data_ptr()->isMutable());
@@ -7277,36 +8604,64 @@ void tst_QString::literals()
// detach on non const access
QVERIFY(str.data() != s);
- QVERIFY(str.capacity() >= str.length());
+ QVERIFY(str.capacity() >= str.size());
QVERIFY(str2.constData() == s);
QVERIFY(str2.data() != s);
- QVERIFY(str2.capacity() >= str2.length());
+ QVERIFY(str2.capacity() >= str2.size());
}
void tst_QString::userDefinedLiterals()
{
- QString str = u"abcd"_qs;
+ {
+ using namespace Qt::StringLiterals;
+ QString str = u"abcd"_s;
- QVERIFY(str.length() == 4);
- QCOMPARE(str.capacity(), 0);
- QVERIFY(str == QLatin1String("abcd"));
- QVERIFY(!str.data_ptr()->isMutable());
+ QVERIFY(str.size() == 4);
+ QCOMPARE(str.capacity(), 0);
+ QVERIFY(str == QLatin1String("abcd"));
+ QVERIFY(!str.data_ptr()->isMutable());
- const QChar *s = str.constData();
- QString str2 = str;
- QVERIFY(str2.constData() == s);
- QCOMPARE(str2.capacity(), 0);
+ const QChar *s = str.constData();
+ QString str2 = str;
+ QVERIFY(str2.constData() == s);
+ QCOMPARE(str2.capacity(), 0);
- // detach on non const access
- QVERIFY(str.data() != s);
- QVERIFY(str.capacity() >= str.length());
+ // detach on non const access
+ QVERIFY(str.data() != s);
+ QVERIFY(str.capacity() >= str.size());
- QVERIFY(str2.constData() == s);
- QVERIFY(str2.data() != s);
- QVERIFY(str2.capacity() >= str2.length());
+ QVERIFY(str2.constData() == s);
+ QVERIFY(str2.data() != s);
+ QVERIFY(str2.capacity() >= str2.size());
+ }
+
+#if QT_DEPRECATED_SINCE(6, 8)
+ {
+ QT_IGNORE_DEPRECATIONS(QString str = u"abcd"_qs;)
+
+ QVERIFY(str.size() == 4);
+ QCOMPARE(str.capacity(), 0);
+ QVERIFY(str == QLatin1String("abcd"));
+ QVERIFY(!str.data_ptr()->isMutable());
+
+ const QChar *s = str.constData();
+ QString str2 = str;
+ QVERIFY(str2.constData() == s);
+ QCOMPARE(str2.capacity(), 0);
+
+ // detach on non const access
+ QVERIFY(str.data() != s);
+ QVERIFY(str.capacity() >= str.size());
+
+ QVERIFY(str2.constData() == s);
+ QVERIFY(str2.data() != s);
+ QVERIFY(str2.capacity() >= str2.size());
+ }
+#endif // QT_DEPRECATED_SINCE(6, 8)
}
+#if !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void tst_QString::eightBitLiterals_data()
{
QTest::addColumn<QByteArray>("data");
@@ -7411,6 +8766,7 @@ void tst_QString::eightBitLiterals()
QVERIFY(stringData >= data.constData());
}
}
+#endif // !defined(QT_RESTRICTED_CAST_FROM_ASCII) && !defined(QT_NO_CAST_FROM_ASCII)
void tst_QString::reserve()
{
@@ -7429,7 +8785,7 @@ void tst_QString::toHtmlEscaped_data()
QTest::addColumn<QString>("expected");
QTest::newRow("null") << QString() << QString();
- QTest::newRow("empty") << QString("") << QString("");
+ QTest::newRow("empty") << u""_s << u""_s;
QTest::newRow("1") << "Hello World\n" << "Hello World\n";
QTest::newRow("2") << "#include <QtCore>" << "#include &lt;QtCore&gt;";
QTest::newRow("3") << "<p class=\"cool\"><a href=\"http://example.com/?foo=bar&amp;bar=foo\">plop --&gt; </a></p>"
@@ -7551,7 +8907,7 @@ void tst_QString::assignQLatin1String()
QVERIFY(empty.isEmpty());
QVERIFY(!empty.isNull());
- QString null = QLatin1String(0);
+ QString null = QLatin1String(nullptr);
QVERIFY(null.isEmpty());
QVERIFY(null.isNull());
@@ -7606,12 +8962,14 @@ void tst_QString::assignQChar()
// assign to null QString:
s = sp;
QCOMPARE(s, QString(sp));
- QCOMPARE(s.capacity(), 1);
// assign to non-null QString with enough capacity:
+ s.clear();
+ s.squeeze();
+ s.reserve(3);
s = QLatin1String("foo");
const int capacity = s.capacity();
- QCOMPARE(capacity, 3);
+ QCOMPARE(s.capacity(), 3);
s = sp;
QCOMPARE(s, QString(sp));
QCOMPARE(s.capacity(), capacity);
@@ -7621,15 +8979,13 @@ void tst_QString::assignQChar()
QString s2 = s;
s = sp;
QCOMPARE(s, QString(sp));
- QCOMPARE(s.capacity(), 1);
// assign to empty QString:
- s = QString("");
+ s = QString(u""_s);
s.detach();
QCOMPARE(s.capacity(), 0);
s = sp;
QCOMPARE(s, QString(sp));
- QCOMPARE(s.capacity(), 1);
}
void tst_QString::isRightToLeft_data()
@@ -7638,17 +8994,17 @@ void tst_QString::isRightToLeft_data()
QTest::addColumn<bool>("rtl");
QTest::newRow("null") << QString() << false;
- QTest::newRow("empty") << QString("") << false;
+ QTest::newRow("empty") << u""_s << false;
- QTest::newRow("numbers-only") << QString("12345") << false;
- QTest::newRow("latin1-only") << QString("hello") << false;
- QTest::newRow("numbers-latin1") << (QString("12345") + QString("hello")) << false;
+ QTest::newRow("numbers-only") << u"12345"_s << false;
+ QTest::newRow("latin1-only") << u"hello"_s << false;
+ QTest::newRow("numbers-latin1") << (u"12345"_s + u"hello"_s) << false;
static const char16_t unicode1[] = { 0x627, 0x627 };
QTest::newRow("arabic-only") << QString::fromUtf16(unicode1, 2) << true;
- QTest::newRow("numbers-arabic") << (QString("12345") + QString::fromUtf16(unicode1, 2)) << true;
- QTest::newRow("numbers-latin1-arabic") << (QString("12345") + QString("hello") + QString::fromUtf16(unicode1, 2)) << false;
- QTest::newRow("numbers-arabic-latin1") << (QString("12345") + QString::fromUtf16(unicode1, 2) + QString("hello")) << true;
+ QTest::newRow("numbers-arabic") << (u"12345"_s + QString::fromUtf16(unicode1, 2)) << true;
+ QTest::newRow("numbers-latin1-arabic") << (u"12345"_s + u"hello"_s + QString::fromUtf16(unicode1, 2)) << false;
+ QTest::newRow("numbers-arabic-latin1") << (u"12345"_s + QString::fromUtf16(unicode1, 2) + u"hello"_s) << true;
static const char16_t unicode2[] = { QChar::highSurrogate(0xE01DAu), QChar::lowSurrogate(0xE01DAu), QChar::highSurrogate(0x2F800u), QChar::lowSurrogate(0x2F800u) };
QTest::newRow("surrogates-VS-CJK") << QString::fromUtf16(unicode2, 4) << false;
@@ -7656,24 +9012,24 @@ void tst_QString::isRightToLeft_data()
static const char16_t unicode3[] = { QChar::highSurrogate(0x10800u), QChar::lowSurrogate(0x10800u), QChar::highSurrogate(0x10805u), QChar::lowSurrogate(0x10805u) };
QTest::newRow("surrogates-cypriot") << QString::fromUtf16(unicode3, 4) << true;
- QTest::newRow("lre") << (QString("12345") + QChar(0x202a) + QString("9") + QChar(0x202c)) << false;
- QTest::newRow("rle") << (QString("12345") + QChar(0x202b) + QString("9") + QChar(0x202c)) << false;
- QTest::newRow("r in lre") << (QString("12345") + QChar(0x202a) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + QString("a")) << true;
- QTest::newRow("l in lre") << (QString("12345") + QChar(0x202a) + QString("a") + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
- QTest::newRow("r in rle") << (QString("12345") + QChar(0x202b) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + QString("a")) << true;
- QTest::newRow("l in rle") << (QString("12345") + QChar(0x202b) + QString("a") + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
+ QTest::newRow("lre") << (u"12345"_s + QChar(0x202a) + u"9"_s + QChar(0x202c)) << false;
+ QTest::newRow("rle") << (u"12345"_s + QChar(0x202b) + u"9"_s + QChar(0x202c)) << false;
+ QTest::newRow("r in lre") << (u"12345"_s + QChar(0x202a) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + u"a"_s) << true;
+ QTest::newRow("l in lre") << (u"12345"_s + QChar(0x202a) + u"a"_s + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
+ QTest::newRow("r in rle") << (u"12345"_s + QChar(0x202b) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + u"a"_s) << true;
+ QTest::newRow("l in rle") << (u"12345"_s + QChar(0x202b) + u"a"_s + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
- QTest::newRow("lro") << (QString("12345") + QChar(0x202d) + QString("9") + QChar(0x202c)) << false;
- QTest::newRow("rlo") << (QString("12345") + QChar(0x202e) + QString("9") + QChar(0x202c)) << false;
- QTest::newRow("r in lro") << (QString("12345") + QChar(0x202d) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + QString("a")) << true;
- QTest::newRow("l in lro") << (QString("12345") + QChar(0x202d) + QString("a") + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
- QTest::newRow("r in rlo") << (QString("12345") + QChar(0x202e) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + QString("a")) << true;
- QTest::newRow("l in rlo") << (QString("12345") + QChar(0x202e) + QString("a") + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
+ QTest::newRow("lro") << (u"12345"_s + QChar(0x202d) + u"9"_s + QChar(0x202c)) << false;
+ QTest::newRow("rlo") << (u"12345"_s + QChar(0x202e) + u"9"_s + QChar(0x202c)) << false;
+ QTest::newRow("r in lro") << (u"12345"_s + QChar(0x202d) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + u"a"_s) << true;
+ QTest::newRow("l in lro") << (u"12345"_s + QChar(0x202d) + u"a"_s + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
+ QTest::newRow("r in rlo") << (u"12345"_s + QChar(0x202e) + QString::fromUtf16(unicode1, 2) + QChar(0x202c) + u"a"_s) << true;
+ QTest::newRow("l in rlo") << (u"12345"_s + QChar(0x202e) + u"a"_s + QChar(0x202c) + QString::fromUtf16(unicode1, 2)) << false;
- QTest::newRow("lri") << (QString("12345") + QChar(0x2066) + QString("a") + QChar(0x2069) + QString::fromUtf16(unicode1, 2)) << true;
- QTest::newRow("rli") << (QString("12345") + QChar(0x2067) + QString::fromUtf16(unicode1, 2) + QChar(0x2069) + QString("a")) << false;
- QTest::newRow("fsi1") << (QString("12345") + QChar(0x2068) + QString("a") + QChar(0x2069) + QString::fromUtf16(unicode1, 2)) << true;
- QTest::newRow("fsi2") << (QString("12345") + QChar(0x2068) + QString::fromUtf16(unicode1, 2) + QChar(0x2069) + QString("a")) << false;
+ QTest::newRow("lri") << (u"12345"_s + QChar(0x2066) + u"a"_s + QChar(0x2069) + QString::fromUtf16(unicode1, 2)) << true;
+ QTest::newRow("rli") << (u"12345"_s + QChar(0x2067) + QString::fromUtf16(unicode1, 2) + QChar(0x2069) + u"a"_s) << false;
+ QTest::newRow("fsi1") << (u"12345"_s + QChar(0x2068) + u"a"_s + QChar(0x2069) + QString::fromUtf16(unicode1, 2)) << true;
+ QTest::newRow("fsi2") << (u"12345"_s + QChar(0x2068) + QString::fromUtf16(unicode1, 2) + QChar(0x2069) + u"a"_s) << false;
}
void tst_QString::isRightToLeft()
@@ -7691,37 +9047,37 @@ void tst_QString::isValidUtf16_data()
int row = 0;
QTest::addRow("valid-%02d", row++) << QString() << true;
- QTest::addRow("valid-%02d", row++) << QString("") << true;
- QTest::addRow("valid-%02d", row++) << QString("abc def") << true;
- QTest::addRow("valid-%02d", row++) << QString("àbç") << true;
- QTest::addRow("valid-%02d", row++) << QString("ßẞ") << true;
- QTest::addRow("valid-%02d", row++) << QString("ð€ðð‚abcðƒð„ð…def") << true;
- QTest::addRow("valid-%02d", row++) << QString("abcð€ðð‚defðƒð„ð…") << true;
- QTest::addRow("valid-%02d", row++) << (QString("abc") + QChar(0x0000) + QString("def")) << true;
- QTest::addRow("valid-%02d", row++) << (QString("abc") + QChar(0xFFFF) + QString("def")) << true;
+ QTest::addRow("valid-%02d", row++) << u""_s << true;
+ QTest::addRow("valid-%02d", row++) << u"abc def"_s << true;
+ QTest::addRow("valid-%02d", row++) << u"àbç"_s << true;
+ QTest::addRow("valid-%02d", row++) << u"ßẞ"_s << true;
+ QTest::addRow("valid-%02d", row++) << u"ð€ðð‚abcðƒð„ð…def"_s << true;
+ QTest::addRow("valid-%02d", row++) << u"abcð€ðð‚defðƒð„ð…"_s << true;
+ QTest::addRow("valid-%02d", row++) << QString(u"abc"_s + QChar(0x0000) + u"def"_s) << true;
+ QTest::addRow("valid-%02d", row++) << QString(u"abc"_s + QChar(0xFFFF) + u"def"_s) << true;
// check that BOM presence doesn't make any difference
- QTest::addRow("valid-%02d", row++) << (QString() + QChar(0xFEFF) + QString("abcð€ðð‚defðƒð„ð…")) << true;
- QTest::addRow("valid-%02d", row++) << (QString() + QChar(0xFFFE) + QString("abcð€ðð‚defðƒð„ð…")) << true;
+ QTest::addRow("valid-%02d", row++) << (QString() + QChar(0xFEFF) + u"abcð€ðð‚defðƒð„ð…"_s) << true;
+ QTest::addRow("valid-%02d", row++) << (QString() + QChar(0xFFFE) + u"abcð€ðð‚defðƒð„ð…"_s) << true;
row = 0;
QTest::addRow("stray-high-%02d", row++) << (QString() + QChar(0xD800)) << false;
- QTest::addRow("stray-high-%02d", row++) << (QString() + QString("abc") + QChar(0xD800)) << false;
- QTest::addRow("stray-high-%02d", row++) << (QString() + QChar(0xD800) + QString("def")) << false;
- QTest::addRow("stray-high-%02d", row++) << (QString() + QString("abc") + QChar(0xD800) + QString("def")) << false;
+ QTest::addRow("stray-high-%02d", row++) << (QString() + u"abc"_s + QChar(0xD800)) << false;
+ QTest::addRow("stray-high-%02d", row++) << (QString() + QChar(0xD800) + u"def"_s) << false;
+ QTest::addRow("stray-high-%02d", row++) << (QString() + u"abc"_s + QChar(0xD800) + u"def"_s) << false;
QTest::addRow("stray-high-%02d", row++) << (QString() + QChar(0xD800) + QChar(0xD800)) << false;
- QTest::addRow("stray-high-%02d", row++) << (QString() + QString("abc") + QChar(0xD800) + QChar(0xD800)) << false;
- QTest::addRow("stray-high-%02d", row++) << (QString() + QChar(0xD800) + QChar(0xD800) + QString("def")) << false;
- QTest::addRow("stray-high-%02d", row++) << (QString() + QString("abc") + QChar(0xD800) + QChar(0xD800) + QString("def")) << false;
+ QTest::addRow("stray-high-%02d", row++) << (QString() + u"abc"_s + QChar(0xD800) + QChar(0xD800)) << false;
+ QTest::addRow("stray-high-%02d", row++) << (QString() + QChar(0xD800) + QChar(0xD800) + u"def"_s) << false;
+ QTest::addRow("stray-high-%02d", row++) << (QString() + u"abc"_s + QChar(0xD800) + QChar(0xD800) + u"def"_s) << false;
row = 0;
QTest::addRow("stray-low-%02d", row++) << (QString() + QChar(0xDC00)) << false;
- QTest::addRow("stray-low-%02d", row++) << (QString() + QString("abc") + QChar(0xDC00)) << false;
- QTest::addRow("stray-low-%02d", row++) << (QString() + QChar(0xDC00) + QString("def")) << false;
- QTest::addRow("stray-low-%02d", row++) << (QString() + QString("abc") + QChar(0xDC00) + QString("def")) << false;
+ QTest::addRow("stray-low-%02d", row++) << (QString() + u"abc"_s + QChar(0xDC00)) << false;
+ QTest::addRow("stray-low-%02d", row++) << (QString() + QChar(0xDC00) + u"def"_s) << false;
+ QTest::addRow("stray-low-%02d", row++) << (QString() + u"abc"_s + QChar(0xDC00) + u"def"_s) << false;
QTest::addRow("stray-low-%02d", row++) << (QString() + QChar(0xDC00) + QChar(0xDC00)) << false;
- QTest::addRow("stray-low-%02d", row++) << (QString() + QString("abc") + QChar(0xDC00) + QChar(0xDC00)) << false;
- QTest::addRow("stray-low-%02d", row++) << (QString() + QChar(0xDC00) + QChar(0xDC00) + QString("def")) << false;
- QTest::addRow("stray-low-%02d", row++) << (QString() + QString("abc") + QChar(0xDC00) + QChar(0xDC00) + QString("def")) << false;
+ QTest::addRow("stray-low-%02d", row++) << (QString() + u"abc"_s + QChar(0xDC00) + QChar(0xDC00)) << false;
+ QTest::addRow("stray-low-%02d", row++) << (QString() + QChar(0xDC00) + QChar(0xDC00) + u"def"_s) << false;
+ QTest::addRow("stray-low-%02d", row++) << (QString() + u"abc"_s + QChar(0xDC00) + QChar(0xDC00) + u"def"_s) << false;
}
void tst_QString::isValidUtf16()
@@ -7769,11 +9125,11 @@ void tst_QString::rawData()
QCOMPARE(s.utf16(), reinterpret_cast<const ushort *>(constPtr));
QVERIFY(!s.isDetached());
- s = "abc"; // detached
+ s = QString::fromUtf8("abc"); // detached
const QChar *dataConstPtr = s.constData();
QVERIFY(dataConstPtr != constPtr);
- const ushort *utf16Ptr = s.utf16();
+ const char16_t *char16Ptr = reinterpret_cast<const char16_t *>(s.utf16());
QString s1 = s;
QCOMPARE(s1.constData(), dataConstPtr);
@@ -7783,11 +9139,11 @@ void tst_QString::rawData()
QVERIFY(s1Ptr != dataConstPtr);
QVERIFY(s1.unicode() != s.unicode());
- *s1Ptr = 'd';
- QCOMPARE(s1, "dbc");
+ *s1Ptr = u'd';
+ QCOMPARE(s1, u"dbc");
// utf pointer is valid while the string is not changed
- QCOMPARE(QString::fromUtf16(utf16Ptr), s);
+ QCOMPARE(QString::fromUtf16(char16Ptr), s);
}
void tst_QString::clear()
@@ -7797,13 +9153,57 @@ void tst_QString::clear()
QVERIFY(s.isEmpty());
QVERIFY(!s.isDetached());
- s = "some tests string";
+ s = u"some tests string"_s;
QVERIFY(!s.isEmpty());
s.clear();
QVERIFY(s.isEmpty());
}
+void tst_QString::first()
+{
+ QString a;
+
+ QVERIFY(a.first(0).isEmpty());
+ QVERIFY(!a.isDetached());
+
+ a = u"ABCDEFGHIEfGEFG"_s; // 15 chars
+
+ // lvalue
+ QCOMPARE(a.first(5), u"ABCDE");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, not detached
+ QCOMPARE(QString(a).first(5), u"ABCDE");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, detached
+ QCOMPARE(detached(a).first(5), u"ABCDE");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+}
+
+void tst_QString::last()
+{
+ QString a;
+
+ QVERIFY(a.last(0).isEmpty());
+ QVERIFY(!a.isDetached());
+
+ a = u"ABCDEFGHIEfGEFG"_s; // 15 chars
+
+ // lvalue
+ QCOMPARE(a.last(10), u"FGHIEfGEFG");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, not detached
+ QCOMPARE(QString(a).last(10), u"FGHIEfGEFG");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, detached
+ QCOMPARE(detached(a).last(10), u"FGHIEfGEFG");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+}
+
void tst_QString::sliced()
{
QString a;
@@ -7812,10 +9212,45 @@ void tst_QString::sliced()
QVERIFY(a.sliced(0, 0).isEmpty());
QVERIFY(!a.isDetached());
- a = "ABCDEFGHIEfGEFG"; // 15 chars
+ a = u"ABCDEFGHIEfGEFG"_s; // 15 chars
+ // lvalue
QCOMPARE(a.sliced(5), u"FGHIEfGEFG");
QCOMPARE(a.sliced(5, 3), u"FGH");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, not detached
+ QCOMPARE(QString(a).sliced(5), u"FGHIEfGEFG");
+ QCOMPARE(QString(a).sliced(5, 3), u"FGH");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, detached
+ QCOMPARE(detached(a).sliced(5), u"FGHIEfGEFG");
+ QCOMPARE(detached(a).sliced(5, 3), u"FGH");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+}
+
+void tst_QString::slice()
+{
+ QString a;
+
+ a.slice(0);
+ QVERIFY(a.isEmpty());
+ QVERIFY(a.isNull());
+ a.slice(0, 0);
+ QVERIFY(a.isEmpty());
+ QVERIFY(a.isNull());
+
+ a = u"Five pineapples"_s;
+
+ a.slice(5);
+ QCOMPARE_EQ(a, u"pineapples");
+
+ a.slice(4, 3);
+ QCOMPARE_EQ(a, u"app");
+
+ a.slice(a.size());
+ QVERIFY(a.isEmpty());
}
void tst_QString::chopped()
@@ -7825,9 +9260,19 @@ void tst_QString::chopped()
QVERIFY(a.chopped(0).isEmpty());
QVERIFY(!a.isDetached());
- a = "ABCDEFGHIEfGEFG"; // 15 chars
+ a = u"ABCDEFGHIEfGEFG"_s; // 15 chars
+ // lvalue
QCOMPARE(a.chopped(10), u"ABCDE");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, not detached
+ QCOMPARE(QString(a).chopped(10), u"ABCDE");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
+
+ // rvalue, detached
+ QCOMPARE(detached(a).chopped(10), u"ABCDE");
+ QCOMPARE(a, u"ABCDEFGHIEfGEFG");
}
void tst_QString::removeIf()
@@ -7835,14 +9280,57 @@ void tst_QString::removeIf()
QString a;
auto pred = [](const QChar &c) { return c.isLower(); };
-
a.removeIf(pred);
QVERIFY(a.isEmpty());
QVERIFY(!a.isDetached());
- a = "aABbcCDd";
+ // Test when the string is not shared
+ a = "aABbcCDd"_L1;
+ QVERIFY(!a.data_ptr()->needsDetach());
a.removeIf(pred);
QCOMPARE(a, u"ABCD");
+
+ // Test when the string is shared
+ a = "aABbcCDd"_L1;
+ QString b = a;
+ QVERIFY(a.data_ptr()->needsDetach());
+ a.removeIf(pred);
+ QCOMPARE(a, u"ABCD");
+ QCOMPARE(b, "aABbcCDd"_L1);
+
+ auto removeA = [](const char c) { return c == 'a' || c == 'A'; };
+
+ a = "aBcAbCa"_L1; // Not shared
+ QCOMPARE(a.removeIf(removeA), u"BcbC");
+
+ a = "aBcAbCa"_L1;
+ b = a; // Shared
+ QCOMPARE(a.removeIf(removeA), u"BcbC");
+}
+
+void tst_QString::std_stringview_conversion()
+{
+ static_assert(std::is_convertible_v<QString, std::u16string_view>);
+
+ QString s;
+ std::u16string_view sv(s);
+ QCOMPARE(sv, std::u16string_view());
+
+ s = u""_s;
+ sv = s;
+ QCOMPARE(s.size(), 0);
+ QCOMPARE(sv.size(), size_t(0));
+ QCOMPARE(sv, std::u16string_view());
+
+ s = u"Hello"_s;
+ sv = s;
+ QCOMPARE(sv, std::u16string_view(u"Hello"));
+
+ s = u"Hello\0world"_s;
+ sv = s;
+ QCOMPARE(s.size(), 11);
+ QCOMPARE(sv.size(), size_t(11));
+ QCOMPARE(sv, std::u16string_view(u"Hello\0world", 11));
}
// QString's collation order is only supported during the lifetime as QCoreApplication
diff --git a/tests/auto/corelib/text/qstring/tst_qstring_mac.mm b/tests/auto/corelib/text/qstring/tst_qstring_mac.mm
index aad4a580cf..f9d35d938a 100644
--- a/tests/auto/corelib/text/qstring/tst_qstring_mac.mm
+++ b/tests/auto/corelib/text/qstring/tst_qstring_mac.mm
@@ -1,48 +1,28 @@
-/****************************************************************************
-**
-** 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>
#include <QTest>
+#include <QtCore/private/qcore_mac_p.h>
+
#include <CoreFoundation/CoreFoundation.h>
#include <Foundation/Foundation.h>
+using namespace Qt::StringLiterals;
+
void tst_QString_macTypes()
{
+ const QLatin1StringView testString("test string");
// QString <-> CFString
{
- QString qtString("test string");
+ QString qtString = testString;
const CFStringRef cfString = qtString.toCFString();
QCOMPARE(QString::fromCFString(cfString), qtString);
CFRelease(cfString);
}
{
- QString qtString("test string");
+ QString qtString = testString;
const CFStringRef cfString = qtString.toCFString();
QString qtStringCopy(qtString);
qtString = qtString.toUpper(); // modify
@@ -52,14 +32,14 @@ void tst_QString_macTypes()
{
QMacAutoReleasePool pool;
- QString qtString("test string");
+ QString qtString = testString;
const NSString *nsString = qtString.toNSString();
QCOMPARE(QString::fromNSString(nsString), qtString);
}
{
QMacAutoReleasePool pool;
- QString qtString("test string");
+ QString qtString = testString;
const NSString *nsString = qtString.toNSString();
QString qtStringCopy(qtString);
qtString = qtString.toUpper(); // modify
diff --git a/tests/auto/corelib/text/qstring/tst_qstring_wasm.cpp b/tests/auto/corelib/text/qstring/tst_qstring_wasm.cpp
new file mode 100644
index 0000000000..64865211dc
--- /dev/null
+++ b/tests/auto/corelib/text/qstring/tst_qstring_wasm.cpp
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QString>
+#include <QTest>
+
+#include <emscripten/val.h>
+
+void tst_QString_wasmTypes()
+{
+ const QLatin1StringView testString("test string");
+ // QString <-> emscripten::val
+ {
+ QString qtString = testString;
+ const emscripten::val jsString = qtString.toEcmaString();
+ QString qtStringCopy(qtString);
+ qtString = qtString.toUpper(); // modify
+ QCOMPARE(QString::fromEcmaString(jsString), qtStringCopy);
+ }
+ {
+ QString longString;
+ for (uint64_t i = 0; i < 1000; ++i)
+ longString += testString;
+ const emscripten::val jsString = longString.toEcmaString();
+ QString qtStringCopy(longString);
+ longString = longString.toUpper(); // modify
+ QCOMPARE(QString::fromEcmaString(jsString), qtStringCopy);
+ }
+}
diff --git a/tests/auto/corelib/text/qstring_no_cast_from_bytearray/CMakeLists.txt b/tests/auto/corelib/text/qstring_no_cast_from_bytearray/CMakeLists.txt
index 10771fc04a..6327b6952c 100644
--- a/tests/auto/corelib/text/qstring_no_cast_from_bytearray/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstring_no_cast_from_bytearray/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qstring_no_cast_from_bytearray.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstring_no_cast_from_bytearray Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstring_no_cast_from_bytearray LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstring_no_cast_from_bytearray
SOURCES
tst_qstring_no_cast_from_bytearray.cpp
diff --git a/tests/auto/corelib/text/qstring_no_cast_from_bytearray/tst_qstring_no_cast_from_bytearray.cpp b/tests/auto/corelib/text/qstring_no_cast_from_bytearray/tst_qstring_no_cast_from_bytearray.cpp
index 8212eaac48..dd9c4ba21a 100644
--- a/tests/auto/corelib/text/qstring_no_cast_from_bytearray/tst_qstring_no_cast_from_bytearray.cpp
+++ b/tests/auto/corelib/text/qstring_no_cast_from_bytearray/tst_qstring_no_cast_from_bytearray.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 <QTest>
#include <QtCore/QtCore>
diff --git a/tests/auto/corelib/text/qstringapisymmetry/CMakeLists.txt b/tests/auto/corelib/text/qstringapisymmetry/CMakeLists.txt
index 2d82e361fb..1989c26e9a 100644
--- a/tests/auto/corelib/text/qstringapisymmetry/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringapisymmetry/CMakeLists.txt
@@ -1,12 +1,21 @@
-# Generated from qstringapisymmetry.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringapisymmetry Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringapisymmetry LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstringapisymmetry
SOURCES
tst_qstringapisymmetry.cpp
+ LIBRARIES
+ Qt::CorePrivate
)
## Scopes:
diff --git a/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp b/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp
index c1795791c5..35a734cf02 100644
--- a/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp
+++ b/tests/auto/corelib/text/qstringapisymmetry/tst_qstringapisymmetry.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
-** Copyright (C) 2019 Mail.ru Group.
-** 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 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// Copyright (C) 2019 Mail.ru Group.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#undef QT_NO_CAST_FROM_ASCII
#undef QT_NO_CAST_TO_ASCII
#undef QT_ASCII_CAST_WARNINGS
+#define QT_USE_QSTRINGBUILDER
#include <QChar>
#include <QLatin1String>
@@ -39,9 +15,16 @@
#include <QStringTokenizer>
#include <QStringView>
#include <QTest>
+#include <QVarLengthArray>
+
+#include "../../../../shared/localechange.h"
+
+#include <locale.h>
Q_DECLARE_METATYPE(QLatin1String)
+namespace {
+
struct QAnyStringViewUsingL1 : QAnyStringView {}; // QAnyStringView with Latin-1 content
struct QAnyStringViewUsingU8 : QAnyStringView {}; // QAnyStringView with Utf-8 content
struct QAnyStringViewUsingU16 : QAnyStringView {}; // QAnyStringView with Utf-16 content
@@ -49,7 +32,6 @@ struct QAnyStringViewUsingU16 : QAnyStringView {}; // QAnyStringView with Utf-1
template <typename T>
QString toQString(const T &t) { return QString(t); }
QString toQString(QStringView view) { return view.toString(); }
-QString toQString(QUtf8StringView view) { return view.toString(); }
template <typename Iterable>
QStringList toQStringList(const Iterable &i) {
@@ -62,44 +44,7 @@ QStringList toQStringList(const Iterable &i) {
template <typename LHS, typename RHS>
constexpr bool is_fake_comparator_v = false;
-// FIXME: these are missing at the time of writing, add them, then remove the dummies here:
-#define MAKE_RELOP(op, A1, A2) \
- static bool operator op (A1 lhs, A2 rhs) \
- { return toQString(lhs) op toQString(rhs); } \
- /*end*/
-#define MAKE_ALL(A1, A2) \
- template <> constexpr bool is_fake_comparator_v<A1, A2> = true; \
- MAKE_RELOP(==, A1, A2) \
- MAKE_RELOP(!=, A1, A2) \
- MAKE_RELOP(<, A1, A2) \
- MAKE_RELOP(>, A1, A2) \
- MAKE_RELOP(<=, A1, A2) \
- MAKE_RELOP(>=, A1, A2) \
- /*end*/
-
-MAKE_ALL(QByteArray, QChar)
-MAKE_ALL(QByteArray, QLatin1String)
-MAKE_ALL(QByteArray, char16_t)
-MAKE_ALL(char16_t, QByteArray)
-
-MAKE_ALL(const char*, QChar)
-
-MAKE_ALL(QChar, QByteArray)
-MAKE_ALL(QChar, const char*)
-MAKE_ALL(QChar, QUtf8StringView)
-
-MAKE_ALL(QString, QUtf8StringView)
-MAKE_ALL(QByteArray, QUtf8StringView)
-MAKE_ALL(const char*, QUtf8StringView)
-
-MAKE_ALL(QUtf8StringView, QChar)
-MAKE_ALL(QUtf8StringView, char16_t)
-MAKE_ALL(QUtf8StringView, QStringView)
-MAKE_ALL(QUtf8StringView, QLatin1String)
-
-#undef MAKE_ALL
-#undef MAKE_RELOP
-// END FIXME
+} // namespace
static constexpr int sign(int i) noexcept
{
@@ -149,6 +94,7 @@ private Q_SLOTS:
void overload_QAnyStringView() { overload<QAnyStringView>(); }
void overload_QLatin1String() { overload<QLatin1String>(); }
void overload_QByteArray() { overload<QByteArray>(); }
+ void overload_QByteArrayView() { overload<QByteArrayView>(); }
void overload_const_char_star() { overload<const char*>(); }
void overload_const_char8_t_star() { IF_CHAR8T(overload<const char8_t*>()); }
void overload_const_char16_t_star() { overload<const char16_t*>(); }
@@ -168,6 +114,7 @@ private Q_SLOTS:
void overload_vector_char16_t() { overload<std::vector<char16_t>>(); }
void overload_vector_QChar() { overload<std::vector<QChar>>(); }
+ void overload_special();
private:
//
// Mixed UTF-16, UTF-8, Latin-1 checks:
@@ -178,7 +125,7 @@ private:
void compare_impl() const;
private Q_SLOTS:
- // test all combinations of {QChar, char16_t, QString, QStringView, QLatin1String, QByteArray, const char*}
+ // test all combinations of {QChar, char16_t, QString, QStringView, QLatin1String, QByteArray/View, const char*}
void compare_QChar_QChar_data() { compare_data(false); }
void compare_QChar_QChar() { compare_impl<QChar, QChar>(); }
void compare_QChar_char16_t_data() { compare_data(false); }
@@ -193,6 +140,8 @@ private Q_SLOTS:
void compare_QChar_QLatin1String() { compare_impl<QChar, QLatin1String>(); }
void compare_QChar_QByteArray_data() { compare_data(false); }
void compare_QChar_QByteArray() { compare_impl<QChar, QByteArray>(); }
+ void compare_QChar_QByteArrayView_data() { compare_data(false); }
+ void compare_QChar_QByteArrayView() { compare_impl<QChar, QByteArrayView>(); }
void compare_QChar_const_char_star_data() { compare_data(false); }
void compare_QChar_const_char_star() { compare_impl<QChar, const char *>(); }
@@ -210,6 +159,8 @@ private Q_SLOTS:
void compare_char16_t_QLatin1String() { compare_impl<char16_t, QLatin1String>(); }
void compare_char16_t_QByteArray_data() { compare_data(false); }
void compare_char16_t_QByteArray() { compare_impl<char16_t, QByteArray>(); }
+ void compare_char16_t_QByteArrayView_data() { compare_data(false); }
+ void compare_char16_t_QByteArrayView() { compare_impl<char16_t, QByteArrayView>(); }
//void compare_char16_t_const_char_star_data() { compare_data(false); }
//void compare_char16_t_const_char_star() { compare_impl<char16_t, const char *>(); }
@@ -227,6 +178,8 @@ private Q_SLOTS:
void compare_QString_QLatin1String() { compare_impl<QString, QLatin1String>(); }
void compare_QString_QByteArray_data() { compare_data(); }
void compare_QString_QByteArray() { compare_impl<QString, QByteArray>(); }
+ void compare_QString_QByteArrayView_data() { compare_data(); }
+ void compare_QString_QByteArrayView() { compare_impl<QString, QByteArrayView>(); }
void compare_QString_const_char_star_data() { compare_data(); }
void compare_QString_const_char_star() { compare_impl<QString, const char *>(); }
@@ -239,15 +192,15 @@ private Q_SLOTS:
void compare_QStringView_QStringView_data() { compare_data(); }
void compare_QStringView_QStringView() { compare_impl<QStringView, QStringView>(); }
void compare_QStringView_QUtf8StringView_data() { compare_data(); }
- void compare_QStringView_QUtf8StringView() { compare_impl<QStringView, QStringView>(); }
+ void compare_QStringView_QUtf8StringView() { compare_impl<QStringView, QUtf8StringView>(); }
void compare_QStringView_QLatin1String_data() { compare_data(); }
void compare_QStringView_QLatin1String() { compare_impl<QStringView, QLatin1String>(); }
-#ifdef NOT_YET_IMPLMENTED
void compare_QStringView_QByteArray_data() { compare_data(); }
void compare_QStringView_QByteArray() { compare_impl<QStringView, QByteArray>(); }
+ void compare_QStringView_QByteArrayView_data() { compare_data(); }
+ void compare_QStringView_QByteArrayView() { compare_impl<QStringView, QByteArrayView>(); }
void compare_QStringView_const_char_star_data() { compare_data(); }
void compare_QStringView_const_char_star() { compare_impl<QStringView, const char *>(); }
-#endif
void compare_QUtf8StringView_QChar_data() { compare_data(false); }
void compare_QUtf8StringView_QChar() { compare_impl<QUtf8StringView, QChar>(); }
@@ -261,12 +214,12 @@ private Q_SLOTS:
void compare_QUtf8StringView_QUtf8StringView() { compare_impl<QUtf8StringView, QUtf8StringView>(); }
void compare_QUtf8StringView_QLatin1String_data() { compare_data(); }
void compare_QUtf8StringView_QLatin1String() { compare_impl<QUtf8StringView, QLatin1String>(); }
-#ifdef NOT_YET_IMPLMENTED
void compare_QUtf8StringView_QByteArray_data() { compare_data(); }
void compare_QUtf8StringView_QByteArray() { compare_impl<QUtf8StringView, QByteArray>(); }
+ void compare_QUtf8StringView_QByteArrayView_data() { compare_data(); }
+ void compare_QUtf8StringView_QByteArrayView() { compare_impl<QUtf8StringView, QByteArrayView>(); }
void compare_QUtf8StringView_const_char_star_data() { compare_data(); }
void compare_QUtf8StringView_const_char_star() { compare_impl<QUtf8StringView, const char *>(); }
-#endif
void compare_QLatin1String_QChar_data() { compare_data(false); }
void compare_QLatin1String_QChar() { compare_impl<QLatin1String, QChar>(); }
@@ -282,6 +235,8 @@ private Q_SLOTS:
void compare_QLatin1String_QLatin1String() { compare_impl<QLatin1String, QLatin1String>(); }
void compare_QLatin1String_QByteArray_data() { compare_data(); }
void compare_QLatin1String_QByteArray() { compare_impl<QLatin1String, QByteArray>(); }
+ void compare_QLatin1String_QByteArrayView_data() { compare_data(); }
+ void compare_QLatin1String_QByteArrayView() { compare_impl<QLatin1String, QByteArrayView>(); }
void compare_QLatin1String_const_char_star_data() { compare_data(); }
void compare_QLatin1String_const_char_star() { compare_impl<QLatin1String, const char *>(); }
@@ -291,31 +246,54 @@ private Q_SLOTS:
void compare_QByteArray_char16_t() { compare_impl<QByteArray, char16_t>(); }
void compare_QByteArray_QString_data() { compare_data(); }
void compare_QByteArray_QString() { compare_impl<QByteArray, QString>(); }
-#ifdef NOT_YET_IMPLEMENTED
void compare_QByteArray_QStringView_data() { compare_data(); }
void compare_QByteArray_QStringView() { compare_impl<QByteArray, QStringView>(); }
-#endif
void compare_QByteArray_QUtf8StringView_data() { compare_data(); }
void compare_QByteArray_QUtf8StringView() { compare_impl<QByteArray, QUtf8StringView>(); }
void compare_QByteArray_QLatin1String_data() { compare_data(); }
void compare_QByteArray_QLatin1String() { compare_impl<QByteArray, QLatin1String>(); }
void compare_QByteArray_QByteArray_data() { compare_data(); }
void compare_QByteArray_QByteArray() { compare_impl<QByteArray, QByteArray>(); }
+ void compare_QByteArray_QByteArrayView_data() { compare_data(); }
+ void compare_QByteArray_QByteArrayView() { compare_impl<QByteArray, QByteArrayView>(); }
void compare_QByteArray_const_char_star_data() { compare_data(); }
void compare_QByteArray_const_char_star() { compare_impl<QByteArray, const char *>(); }
+ void compare_QByteArrayView_QChar_data() { compare_data(false); }
+ void compare_QByteArrayView_QChar() { compare_impl<QByteArrayView, QChar>(); }
+ void compare_QByteArrayView_char16_t_data() { compare_data(false); }
+ void compare_QByteArrayView_char16_t() { compare_impl<QByteArrayView, char16_t>(); }
+ void compare_QByteArrayView_QString_data() { compare_data(); }
+ void compare_QByteArrayView_QString() { compare_impl<QByteArrayView, QString>(); }
+ void compare_QByteArrayView_QStringView_data() { compare_data(); }
+ void compare_QByteArrayView_QStringView() { compare_impl<QByteArrayView, QStringView>(); }
+ void compare_QByteArrayView_QUtf8StringView_data() { compare_data(); }
+ void compare_QByteArrayView_QUtf8StringView() { compare_impl<QByteArrayView, QUtf8StringView>(); }
+ void compare_QByteArrayView_QLatin1String_data() { compare_data(); }
+ void compare_QByteArrayView_QLatin1String() { compare_impl<QByteArrayView, QLatin1String>(); }
+ void compare_QByteArrayView_QByteArray_data() { compare_data(); }
+ void compare_QByteArrayView_QByteArray() { compare_impl<QByteArrayView, QByteArray>(); }
+ void compare_QByteArrayView_QByteArrayView_data() { compare_data(); }
+ void compare_QByteArrayView_QByteArrayView() { compare_impl<QByteArrayView, QByteArrayView>(); }
+ void compare_QByteArrayView_const_char_star_data() { compare_data(); }
+ void compare_QByteArrayView_const_char_star() { compare_impl<QByteArrayView, const char *>(); }
+
void compare_const_char_star_QChar_data() { compare_data(false); }
void compare_const_char_star_QChar() { compare_impl<const char *, QChar>(); }
//void compare_const_char_star_char16_t_data() { compare_data(false); }
//void compare_const_char_star_char16_t() { compare_impl<const char *, char16_t>(); }
void compare_const_char_star_QString_data() { compare_data(); }
void compare_const_char_star_QString() { compare_impl<const char *, QString>(); }
+ void compare_const_char_star_QStringView_data() { compare_data(); }
+ void compare_const_char_star_QStringView() { compare_impl<const char *, QStringView>(); }
void compare_const_char_star_QUtf8StringView_data() { compare_data(); }
void compare_const_char_star_QUtf8StringView() { compare_impl<const char *, QUtf8StringView>(); }
void compare_const_char_star_QLatin1String_data() { compare_data(false); }
void compare_const_char_star_QLatin1String() { compare_impl<const char *, QLatin1String>(); }
void compare_const_char_star_QByteArray_data() { compare_data(); }
void compare_const_char_star_QByteArray() { compare_impl<const char *, QByteArray>(); }
+ void compare_const_char_star_QByteArrayView_data() { compare_data(); }
+ void compare_const_char_star_QByteArrayView() { compare_impl<const char *, QByteArrayView>(); }
//void compare_const_char_star_const_char_star_data() { compare_data(); }
//void compare_const_char_star_const_char_star() { compare_impl<const char *, const char *>(); }
@@ -339,6 +317,8 @@ private Q_SLOTS:
void member_compare_QChar_QLatin1String() { member_compare_impl<QChar, QLatin1String>(); }
void member_compare_QChar_QByteArray_data() { member_compare_data(false); }
void member_compare_QChar_QByteArray() { member_compare_impl<QChar, QByteArray>(); }
+ void member_compare_QChar_QByteArrayView_data() { member_compare_data(false); }
+ void member_compare_QChar_QByteArrayView() { member_compare_impl<QChar, QByteArrayView>(); }
void member_compare_QChar_const_char_star_data() { member_compare_data(false); }
void member_compare_QChar_const_char_star() { member_compare_impl<QChar, const char *>(); }
#endif
@@ -357,6 +337,10 @@ private Q_SLOTS:
void member_compare_QString_QLatin1String() { member_compare_impl<QString, QLatin1String>(); }
void member_compare_QString_QByteArray_data() { member_compare_data(); }
void member_compare_QString_QByteArray() { member_compare_impl<QString, QByteArray>(); }
+#ifdef NOT_YET_IMPLEMENTED
+ void member_compare_QString_QByteArrayView_data() { member_compare_data(); }
+ void member_compare_QString_QByteArrayView() { member_compare_impl<QString, QByteArrayView>(); }
+#endif
void member_compare_QString_const_char_star_data() { member_compare_data(); }
void member_compare_QString_const_char_star() { member_compare_impl<QString, const char *>(); }
@@ -370,9 +354,13 @@ private Q_SLOTS:
void member_compare_QStringView_QStringView() { member_compare_impl<QStringView, QStringView>(); }
void member_compare_QStringView_QLatin1String_data() { member_compare_data(); }
void member_compare_QStringView_QLatin1String() { member_compare_impl<QStringView, QLatin1String>(); }
+ void member_compare_QStringView_QUtf8StringView_data() { member_compare_data(); }
+ void member_compare_QStringView_QUtf8StringView() { member_compare_impl<QStringView, QUtf8StringView>(); }
#ifdef NOT_YET_IMPLEMENTED
void member_compare_QStringView_QByteArray_data() { member_compare_data(); }
void member_compare_QStringView_QByteArray() { member_compare_impl<QStringView, QByteArray>(); }
+ void member_compare_QStringView_QByteArrayView_data() { member_compare_data(); }
+ void member_compare_QStringView_QByteArrayView() { member_compare_impl<QStringView, QByteArrayView>(); }
void member_compare_QStringView_const_char_star_data() { member_compare_data(); }
void member_compare_QStringView_const_char_star() { member_compare_impl<QStringView, const char *>(); }
#endif
@@ -389,12 +377,18 @@ private Q_SLOTS:
void member_compare_QLatin1String_QStringView() { member_compare_impl<QLatin1String, QStringView>(); }
void member_compare_QLatin1String_QLatin1String_data() { member_compare_data(); }
void member_compare_QLatin1String_QLatin1String() { member_compare_impl<QLatin1String, QLatin1String>(); }
+ void member_compare_QLatin1String_QUtf8StringView_data() { member_compare_data(); }
+ void member_compare_QLatin1String_QUtf8StringView() { member_compare_impl<QLatin1String, QUtf8StringView>(); }
#ifdef NOT_YET_IMPLEMENTED
void member_compare_QLatin1String_QByteArray_data() { member_compare_data(); }
void member_compare_QLatin1String_QByteArray() { member_compare_impl<QLatin1String, QByteArray>(); }
+ void member_compare_QLatin1String_QByteArrayView_data() { member_compare_data(); }
+ void member_compare_QLatin1String_QByteArrayView() { member_compare_impl<QLatin1String, QByteArrayView>(); }
void member_compare_QLatin1String_const_char_star_data() { member_compare_data(); }
void member_compare_QLatin1String_const_char_star() { member_compare_impl<QLatin1String, const char *>(); }
+#endif
+#ifdef NOT_YET_IMPLEMENTED
void member_compare_QByteArray_QChar_data() { member_compare_data(false); }
void member_compare_QByteArray_QChar() { member_compare_impl<QByteArray, QChar>(); }
void member_compare_QByteArray_char16_t_data() { member_compare_data(false); }
@@ -406,9 +400,71 @@ private Q_SLOTS:
#endif
void member_compare_QByteArray_QByteArray_data() { member_compare_data(); }
void member_compare_QByteArray_QByteArray() { member_compare_impl<QByteArray, QByteArray>(); }
+ void member_compare_QByteArray_QByteArrayView_data() { member_compare_data(); }
+ void member_compare_QByteArray_QByteArrayView() { member_compare_impl<QByteArray, QByteArrayView>(); }
void member_compare_QByteArray_const_char_star_data() { member_compare_data(); }
void member_compare_QByteArray_const_char_star() { member_compare_impl<QByteArray, const char *>(); }
+#ifdef NOT_YET_IMPLEMENTED
+ void member_compare_QByteArrayView_QChar_data() { member_compare_data(false); }
+ void member_compare_QByteArrayView_QChar() { member_compare_impl<QByteArrayView, QChar>(); }
+ void member_compare_QByteArrayView_char16_t_data() { member_compare_data(false); }
+ void member_compare_QByteArrayView_char16_t() { member_compare_impl<QByteArrayView, char16_t>(); }
+ void member_compare_QByteArrayView_QString_data() { member_compare_data(); }
+ void member_compare_QByteArrayView_QString() { member_compare_impl<QByteArrayView, QString>(); }
+ void member_compare_QByteArrayView_QLatin1String_data() { member_compare_data(); }
+ void member_compare_QByteArrayView_QLatin1String() { member_compare_impl<QByteArrayView, QLatin1String>(); }
+#endif
+ void member_compare_QByteArrayView_QByteArray_data() { member_compare_data(); }
+ void member_compare_QByteArrayView_QByteArray() { member_compare_impl<QByteArrayView, QByteArray>(); }
+ void member_compare_QByteArrayView_QByteArrayView_data() { member_compare_data(); }
+ void member_compare_QByteArrayView_QByteArrayView() { member_compare_impl<QByteArrayView, QByteArrayView>(); }
+ void member_compare_QByteArrayView_const_char_star_data() { member_compare_data(); }
+ void member_compare_QByteArrayView_const_char_star() { member_compare_impl<QByteArrayView, const char *>(); }
+
+#ifdef NOT_YET_IMPLEMENTED
+ void member_compare_QUtf8StringView_QChar_data() { member_compare_data(false); }
+ void member_compare_QUtf8StringView_QChar() { member_compare_impl<QUtf8StringView, QChar>(); }
+ void member_compare_QUtf8StringView_char16_t_data() { member_compare_data(false); }
+ void member_compare_QUtf8StringView_char16_t() { member_compare_impl<QUtf8StringView, char16_t>(); }
+#endif
+ void member_compare_QUtf8StringView_QString_data() { member_compare_data(); }
+ void member_compare_QUtf8StringView_QString() { member_compare_impl<QUtf8StringView, QString>(); }
+ void member_compare_QUtf8StringView_QLatin1String_data() { member_compare_data(); }
+ void member_compare_QUtf8StringView_QLatin1String() { member_compare_impl<QUtf8StringView, QLatin1String>(); }
+ void member_compare_QUtf8StringView_QUtf8StringView_data() { member_compare_data(); }
+ void member_compare_QUtf8StringView_QUtf8StringView() { member_compare_impl<QUtf8StringView, QUtf8StringView>(); }
+
+private:
+ void localeAwareCompare_data();
+ template<typename LHS, typename RHS>
+ void localeAwareCompare_impl();
+
+private Q_SLOTS:
+ void localeAwareCompare_QString_QString_data() { localeAwareCompare_data(); }
+ void localeAwareCompare_QString_QString() { localeAwareCompare_impl<QString, QString>(); }
+ void localeAwareCompare_QString_QStringView_data() { localeAwareCompare_data(); }
+ void localeAwareCompare_QString_QStringView() { localeAwareCompare_impl<QString, QStringView>(); }
+ void localeAwareCompare_QStringView_QString_data() { localeAwareCompare_data(); }
+ void localeAwareCompare_QStringView_QString() { localeAwareCompare_impl<QStringView, QString>(); }
+ void localeAwareCompare_QStringView_QStringView_data() { localeAwareCompare_data(); }
+ void localeAwareCompare_QStringView_QStringView() { localeAwareCompare_impl<QStringView, QStringView>(); }
+
+private:
+ void member_localeAwareCompare_data() { localeAwareCompare_data(); }
+ template<typename LHS, typename RHS>
+ void member_localeAwareCompare_impl();
+
+private Q_SLOTS:
+ void member_localeAwareCompare_QString_QString_data() { member_localeAwareCompare_data(); }
+ void member_localeAwareCompare_QString_QString() { member_localeAwareCompare_impl<QString, QString>(); }
+ void member_localeAwareCompare_QString_QStringView_data() { member_localeAwareCompare_data(); }
+ void member_localeAwareCompare_QString_QStringView() { member_localeAwareCompare_impl<QString, QStringView>(); }
+ void member_localeAwareCompare_QStringView_QString_data() { member_localeAwareCompare_data(); }
+ void member_localeAwareCompare_QStringView_QString() { member_localeAwareCompare_impl<QStringView, QString>(); }
+ void member_localeAwareCompare_QStringView_QStringView_data() { member_localeAwareCompare_data(); }
+ void member_localeAwareCompare_QStringView_QStringView() { member_localeAwareCompare_impl<QStringView, QStringView>(); }
+
private:
void startsWith_data(bool rhsIsQChar = false);
template <typename Haystack, typename Needle> void startsWith_impl() const;
@@ -600,6 +656,7 @@ private:
void sliced_data();
template <typename String> void sliced_impl();
+ template <typename String> void slice_impl();
void first_data();
template <typename String> void first_impl();
@@ -620,8 +677,16 @@ private Q_SLOTS:
void mid_QUtf8StringView() { mid_impl<QUtf8StringView>(); }
void mid_QLatin1String_data() { mid_data(); }
void mid_QLatin1String() { mid_impl<QLatin1String>(); }
+ void mid_QAnyStringViewUsingL1_data() { mid_data(); }
+ void mid_QAnyStringViewUsingL1() { mid_impl<QAnyStringViewUsingL1>(); }
+ void mid_QAnyStringViewUsingU8_data() { mid_data(); }
+ void mid_QAnyStringViewUsingU8() { mid_impl<QAnyStringViewUsingU8>(); }
+ void mid_QAnyStringViewUsingU16_data() { mid_data(); }
+ void mid_QAnyStringViewUsingU16() { mid_impl<QAnyStringViewUsingU16>(); }
void mid_QByteArray_data() { mid_data(); }
void mid_QByteArray() { mid_impl<QByteArray>(); }
+ void mid_QByteArrayView_data() { mid_data(); }
+ void mid_QByteArrayView() { mid_impl<QByteArrayView>(); }
void left_QString_data() { left_data(); }
void left_QString() { left_impl<QString>(); }
@@ -631,8 +696,16 @@ private Q_SLOTS:
void left_QUtf8StringView() { left_impl<QUtf8StringView>(); }
void left_QLatin1String_data() { left_data(); }
void left_QLatin1String() { left_impl<QLatin1String>(); }
+ void left_QAnyStringViewUsingL1_data() { left_data(); }
+ void left_QAnyStringViewUsingL1() { left_impl<QAnyStringViewUsingL1>(); }
+ void left_QAnyStringViewUsingU8_data() { left_data(); }
+ void left_QAnyStringViewUsingU8() { left_impl<QAnyStringViewUsingU8>(); }
+ void left_QAnyStringViewUsingU16_data() { left_data(); }
+ void left_QAnyStringViewUsingU16() { left_impl<QAnyStringViewUsingU16>(); }
void left_QByteArray_data();
void left_QByteArray() { left_impl<QByteArray>(); }
+ void left_QByteArrayView_data() { left_data(); }
+ void left_QByteArrayView() { left_impl<QByteArrayView>(); }
void right_QString_data() { right_data(); }
void right_QString() { right_impl<QString>(); }
@@ -642,8 +715,16 @@ private Q_SLOTS:
void right_QUtf8StringView() { right_impl<QUtf8StringView>(); }
void right_QLatin1String_data() { right_data(); }
void right_QLatin1String() { right_impl<QLatin1String>(); }
+ void right_QAnyStringViewUsingL1_data() { right_data(); }
+ void right_QAnyStringViewUsingL1() { right_impl<QAnyStringViewUsingL1>(); }
+ void right_QAnyStringViewUsingU8_data() { right_data(); }
+ void right_QAnyStringViewUsingU8() { right_impl<QAnyStringViewUsingU8>(); }
+ void right_QAnyStringViewUsingU16_data() { right_data(); }
+ void right_QAnyStringViewUsingU16() { right_impl<QAnyStringViewUsingU16>(); }
void right_QByteArray_data();
void right_QByteArray() { right_impl<QByteArray>(); }
+ void right_QByteArrayView_data() { right_data(); }
+ void right_QByteArrayView() { right_impl<QByteArrayView>(); }
void sliced_QString_data() { sliced_data(); }
void sliced_QString() { sliced_impl<QString>(); }
@@ -653,8 +734,21 @@ private Q_SLOTS:
void sliced_QLatin1String() { sliced_impl<QLatin1String>(); }
void sliced_QUtf8StringView_data() { sliced_data(); }
void sliced_QUtf8StringView() { sliced_impl<QUtf8StringView>(); }
+ void sliced_QAnyStringViewUsingL1_data() { sliced_data(); }
+ void sliced_QAnyStringViewUsingL1() { sliced_impl<QAnyStringViewUsingL1>(); }
+ void sliced_QAnyStringViewUsingU8_data() { sliced_data(); }
+ void sliced_QAnyStringViewUsingU8() { sliced_impl<QAnyStringViewUsingU8>(); }
+ void sliced_QAnyStringViewUsingU16_data() { sliced_data(); }
+ void sliced_QAnyStringViewUsingU16() { sliced_impl<QAnyStringViewUsingU16>(); }
void sliced_QByteArray_data() { sliced_data(); }
void sliced_QByteArray() { sliced_impl<QByteArray>(); }
+ void sliced_QByteArrayView_data() { sliced_data(); }
+ void sliced_QByteArrayView() { sliced_impl<QByteArrayView>(); }
+
+ void slice_QString_data() { sliced_data(); }
+ void slice_QString() { slice_impl<QString>(); }
+ void slice_QByteArray_data() { sliced_data(); }
+ void slice_QByteArray() { slice_impl<QByteArray>(); }
void first_truncate_QString_data() { first_data(); }
void first_truncate_QString() { first_impl<QString>(); }
@@ -664,8 +758,16 @@ private Q_SLOTS:
void first_truncate_QLatin1String() { first_impl<QLatin1String>(); }
void first_truncate_QUtf8StringView_data() { first_data(); }
void first_truncate_QUtf8StringView() { first_impl<QUtf8StringView>(); }
+ void first_truncate_QAnyStringViewUsingL1_data() { first_data(); }
+ void first_truncate_QAnyStringViewUsingL1() { first_impl<QAnyStringViewUsingL1>(); }
+ void first_truncate_QAnyStringViewUsingU8_data() { first_data(); }
+ void first_truncate_QAnyStringViewUsingU8() { first_impl<QAnyStringViewUsingU8>(); }
+ void first_truncate_QAnyStringViewUsingU16_data() { first_data(); }
+ void first_truncate_QAnyStringViewUsingU16() { first_impl<QAnyStringViewUsingU16>(); }
void first_truncate_QByteArray_data() { first_data(); }
void first_truncate_QByteArray() { first_impl<QByteArray>(); }
+ void first_truncate_QByteArrayView_data() { first_data(); }
+ void first_truncate_QByteArrayView() { first_impl<QByteArrayView>(); }
void last_QString_data() { last_data(); }
void last_QString() { last_impl<QString>(); }
@@ -675,19 +777,35 @@ private Q_SLOTS:
void last_QLatin1String() { last_impl<QLatin1String>(); }
void last_QUtf8StringView_data() { last_data(); }
void last_QUtf8StringView() { last_impl<QUtf8StringView>(); }
+ void last_QAnyStringViewUsingL1_data() { last_data(); }
+ void last_QAnyStringViewUsingL1() { last_impl<QAnyStringViewUsingL1>(); }
+ void last_QAnyStringViewUsingU8_data() { last_data(); }
+ void last_QAnyStringViewUsingU8() { last_impl<QAnyStringViewUsingU8>(); }
+ void last_QAnyStringViewUsingU16_data() { last_data(); }
+ void last_QAnyStringViewUsingU16() { last_impl<QAnyStringViewUsingU16>(); }
void last_QByteArray_data() { last_data(); }
void last_QByteArray() { last_impl<QByteArray>(); }
+ void last_QByteArrayView_data() { last_data(); }
+ void last_QByteArrayView() { last_impl<QByteArrayView>(); }
void chop_QString_data() { chop_data(); }
void chop_QString() { chop_impl<QString>(); }
void chop_QStringView_data() { chop_data(); }
void chop_QStringView() { chop_impl<QStringView>(); }
- void chop_QUtf8StringView_data() { chop_data(); }
- void chop_QUtf8StringView() { chop_impl<QUtf8StringView>(); }
void chop_QLatin1String_data() { chop_data(); }
void chop_QLatin1String() { chop_impl<QLatin1String>(); }
+ void chop_QUtf8StringView_data() { chop_data(); }
+ void chop_QUtf8StringView() { chop_impl<QUtf8StringView>(); }
+ void chop_QAnyStringViewUsingL1_data() { chop_data(); }
+ void chop_QAnyStringViewUsingL1() { chop_impl<QAnyStringViewUsingL1>(); }
+ void chop_QAnyStringViewUsingU8_data() { chop_data(); }
+ void chop_QAnyStringViewUsingU8() { chop_impl<QAnyStringViewUsingU8>(); }
+ void chop_QAnyStringViewUsingU16_data() { chop_data(); }
+ void chop_QAnyStringViewUsingU16() { chop_impl<QAnyStringViewUsingU16>(); }
void chop_QByteArray_data() { chop_data(); }
void chop_QByteArray() { chop_impl<QByteArray>(); }
+ void chop_QByteArrayView_data() { chop_data(); }
+ void chop_QByteArrayView() { chop_impl<QByteArrayView>(); }
private:
void trimmed_data();
@@ -702,30 +820,78 @@ private Q_SLOTS:
void trim_trimmed_QLatin1String() { trimmed_impl<QLatin1String>(); }
void trim_trimmed_QByteArray_data() { trimmed_data(); }
void trim_trimmed_QByteArray() { trimmed_impl<QByteArray>(); }
+ void trim_trimmed_QByteArrayView_data() { trimmed_data(); }
+ void trim_trimmed_QByteArrayView() { trimmed_impl<QByteArrayView>(); }
private:
void toNumber_data();
template <typename String> void toNumber_impl();
+ void toNumberWithBases_data();
+ template <typename String> void toNumberWithBases_impl();
private Q_SLOTS:
void toNumber_QString_data() { toNumber_data(); }
void toNumber_QString() { toNumber_impl<QString>(); }
void toNumber_QStringView_data() { toNumber_data(); }
void toNumber_QStringView() { toNumber_impl<QStringView>(); }
+ void toNumber_QLatin1String_data() { toNumber_data(); }
+ void toNumber_QLatin1String() { toNumber_impl<QLatin1String>(); }
void toNumber_QByteArray_data() { toNumber_data(); }
void toNumber_QByteArray() { toNumber_impl<QByteArray>(); }
+ void toNumber_QByteArrayView_data() { toNumber_data(); }
+ void toNumber_QByteArrayView() { toNumber_impl<QByteArrayView>(); }
+
+ void toNumberWithBases_QString_data() { toNumberWithBases_data(); }
+ void toNumberWithBases_QString() { toNumberWithBases_impl<QString>(); }
+ void toNumberWithBases_QStringView_data() { toNumberWithBases_data(); }
+ void toNumberWithBases_QStringView() { toNumberWithBases_impl<QStringView>(); }
+ void toNumberWithBases_QLatin1String_data() { toNumberWithBases_data(); }
+ void toNumberWithBases_QLatin1String() { toNumberWithBases_impl<QLatin1String>(); }
+ void toNumberWithBases_QByteArray_data() { toNumberWithBases_data(); }
+ void toNumberWithBases_QByteArray() { toNumberWithBases_impl<QByteArray>(); }
+ void toNumberWithBases_QByteArrayView_data() { toNumberWithBases_data(); }
+ void toNumberWithBases_QByteArrayView() { toNumberWithBases_impl<QByteArrayView>(); }
private:
void count_data();
- template <typename String> void count_impl();
+ template<typename Haystack, typename Needle>
+ void count_impl();
private Q_SLOTS:
- void count_QString_data() { count_data(); }
- void count_QString() { count_impl<QString>(); }
- void count_QStringView_data() { count_data(); }
- void count_QStringView() { count_impl<QStringView>(); }
- void count_QByteArray_data() { count_data(); }
- void count_QByteArray() { count_impl<QByteArray>(); }
+ void count_QString_QString_data() { count_data(); }
+ void count_QString_QString() { count_impl<QString, QString>(); }
+ void count_QString_QLatin1String_data() { count_data(); }
+ void count_QString_QLatin1String() { count_impl<QString, QLatin1String>(); }
+ void count_QString_QStringView_data() { count_data(); }
+ void count_QString_QStringView() { count_impl<QString, QStringView>(); }
+ void count_QString_QChar_data() { count_data(); }
+ void count_QString_QChar() { count_impl<QString, QChar>(); }
+ void count_QString_char16_t_data() { count_data(); }
+ void count_QString_char16_t() { count_impl<QString, char16_t>(); }
+
+ void count_QStringView_QString_data() { count_data(); }
+ void count_QStringView_QString() { count_impl<QStringView, QString>(); }
+ void count_QStringView_QLatin1String_data() { count_data(); }
+ void count_QStringView_QLatin1String() { count_impl<QStringView, QLatin1String>(); }
+ void count_QStringView_QStringView_data() { count_data(); }
+ void count_QStringView_QStringView() { count_impl<QStringView, QStringView>(); }
+ void count_QStringView_QChar_data() { count_data(); }
+ void count_QStringView_QChar() { count_impl<QStringView, QChar>(); }
+ void count_QStringView_char16_t_data() { count_data(); }
+ void count_QStringView_char16_t() { count_impl<QStringView, char16_t>(); }
+
+ void count_QLatin1String_QString_data() { count_data(); }
+ void count_QLatin1String_QString() { count_impl<QLatin1String, QString>(); }
+ void count_QLatin1String_QLatin1String_data() { count_data(); }
+ void count_QLatin1String_QLatin1String() { count_impl<QLatin1String, QLatin1String>(); }
+ void count_QLatin1String_QStringView_data() { count_data(); }
+ void count_QLatin1String_QStringView() { count_impl<QLatin1String, QStringView>(); }
+ void count_QLatin1String_QChar_data() { count_data(); }
+ void count_QLatin1String_QChar() { count_impl<QLatin1String, QChar>(); }
+ void count_QLatin1String_char16_t_data() { count_data(); }
+ void count_QLatin1String_char16_t() { count_impl<QLatin1String, char16_t>(); }
+ void count_QLatin1String_QLatin1Char_data() { count_data(); }
+ void count_QLatin1String_QLatin1Char() { count_impl<QLatin1String, QLatin1Char>(); }
//
// UTF-16-only checks:
@@ -924,19 +1090,27 @@ template <> constexpr qsizetype size(const char16_t&) { return 1; }
namespace {
-void overload_s_a(const QString &) {}
+auto overload_s_a(const QString &s) { return s; }
Q_WEAK_OVERLOAD
-void overload_s_a(QAnyStringView) {}
+auto overload_s_a(QAnyStringView s) { return s; }
-void overload_sr_a(QString &&) {}
+auto overload_sr_a(QString &&s) { return std::move(s); }
Q_WEAK_OVERLOAD
-void overload_sr_a(QAnyStringView) {}
+auto overload_sr_a(QAnyStringView s) { return s; }
-void overload_s_v(const QString &) {}
-void overload_s_v(QStringView) {}
+Q_WEAK_OVERLOAD
+auto overload_a_s(const QString &s) { return s; }
+auto overload_a_s(QAnyStringView s) { return s; }
+
+Q_WEAK_OVERLOAD
+auto overload_a_sr(QString &&s) { return std::move(s); }
+auto overload_a_sr(QAnyStringView s) { return s; }
-void overload_sr_v(QString &&) {}
-void overload_sr_v(QStringView) {}
+auto overload_s_v(const QString &s) { return s; }
+auto overload_s_v(QStringView s) { return s; }
+
+auto overload_sr_v(QString &&s) { return std::move(s); }
+auto overload_sr_v(QStringView s) { return s; }
} // unnamed namespace
@@ -948,6 +1122,10 @@ void tst_QStringApiSymmetry::overload()
// check the common overload sets defined above to be free of ambiguities
// for arguments of type T
+ QT_WARNING_PUSH
+ // GCC complains about "t" and "ct"
+ QT_WARNING_DISABLE_GCC("-Wmaybe-uninitialized")
+
using CT = const T;
T t = {};
@@ -967,6 +1145,20 @@ void tst_QStringApiSymmetry::overload()
overload_sr_a(CT());
}
+ overload_a_s(t);
+ overload_a_s(ct);
+ if constexpr (!std::is_array_v<T>) {
+ overload_a_s(T());
+ overload_a_s(CT());
+ }
+
+ overload_a_sr(t);
+ overload_a_sr(ct);
+ if constexpr (!std::is_array_v<T>) {
+ overload_a_sr(T());
+ overload_a_sr(CT());
+ }
+
if constexpr (std::is_convertible_v<T, QStringView> || std::is_convertible_v<T, QString>) {
overload_s_v(t);
overload_s_v(ct);
@@ -982,6 +1174,52 @@ void tst_QStringApiSymmetry::overload()
overload_sr_v(CT());
}
}
+ QT_WARNING_POP
+}
+
+void tst_QStringApiSymmetry::overload_special()
+{
+ auto check = [](auto result, auto expected) {
+ static_assert(std::is_same_v<decltype(result), decltype(expected)>);
+ };
+
+ {
+#define rvalue QStringLiteral("hello")
+ auto lvalue = rvalue;
+ auto builder = [&] { return lvalue % ""; };
+
+ // check that QString/Builder go to the QString overload in a_s(r):
+
+ check(overload_a_s(lvalue), QString());
+ check(overload_a_s(rvalue), QString());
+ check(overload_a_s(builder()), QAnyStringView()); // weak overloads must match exactly
+ check(overload_a_s(QString(builder())), QString());
+
+ check(overload_a_sr(lvalue), QAnyStringView()); // lvalue can't bind to rvalue ref
+ check(overload_a_sr(rvalue), QString());
+ check(overload_a_sr(builder()), QAnyStringView());
+ check(overload_a_sr(QString(builder())), QString());
+
+ // check that everything goes to the QString overload in s(r)_a:
+ // exception: u""
+
+ check(overload_s_a(lvalue), QString());
+ check(overload_s_a(rvalue), QString());
+ check(overload_s_a(builder()), QString());
+ check(overload_s_a(""), QString());
+ check(overload_s_a(u""), QAnyStringView());
+ check(overload_s_a(u8""), QString());
+ check(overload_s_a(QLatin1String("")), QString());
+
+ check(overload_sr_a(lvalue), QAnyStringView()); // lvalues don't bind to rvalue refs
+ check(overload_sr_a(rvalue), QString());
+ check(overload_sr_a(builder()), QString());
+ check(overload_sr_a(""), QString());
+ check(overload_sr_a(u""), QAnyStringView());
+ check(overload_sr_a(u8""), QString());
+ check(overload_sr_a(QLatin1String("")), QString());
+#undef rvalue
+ }
}
void tst_QStringApiSymmetry::compare_data(bool hasConceptOfNullAndEmpty)
@@ -1040,6 +1278,10 @@ template <typename String> String detached(String s)
return s;
}
+template <class Str> Str make(const QString &s);
+template <> QString make(const QString &s) { return s; }
+template <> QStringView make(const QString &s) { return s; }
+
template <class Str> Str make(QStringView sf, QLatin1String l1, const QByteArray &u8);
#define MAKE(Which) \
@@ -1054,6 +1296,7 @@ MAKE(QString) { return sv.toString(); }
MAKE(QStringView) { return sv; }
MAKE(QLatin1String) { return l1; }
MAKE(QByteArray) { return u8; }
+MAKE(QByteArrayView) { return u8; }
MAKE(const char *) { return u8.data(); }
MAKE(const char16_t *) { return sv.utf16(); } // assumes `sv` doesn't represent a substring
MAKE(std::u16string) { return sv.toString().toStdU16String(); }
@@ -1068,6 +1311,7 @@ MAKE(QAnyStringViewUsingU16) { return {QAnyStringView{sv}}; }
template <typename> constexpr bool is_bytearray_like_v = false;
template <> constexpr bool is_bytearray_like_v<const char *> = true;
template <> constexpr bool is_bytearray_like_v<QByteArray> = true;
+template <> constexpr bool is_bytearray_like_v<QByteArrayView> = true;
template <typename LHS, typename RHS>
constexpr bool has_nothrow_member_compare_v = is_bytearray_like_v<LHS> == is_bytearray_like_v<RHS>;
@@ -1090,11 +1334,11 @@ void tst_QStringApiSymmetry::compare_impl() const
auto icResult = sign(
QAnyStringView::compare(QAnyStringView(lhs), QAnyStringView(rhs), Qt::CaseInsensitive));
- QCOMPARE(icResult, caseInsensitiveCompareResult);
+ QCOMPARE_EQ(icResult, caseInsensitiveCompareResult);
auto scResult = sign(
QAnyStringView::compare(QAnyStringView(lhs), QAnyStringView(rhs), Qt::CaseSensitive));
- QCOMPARE(scResult, caseSensitiveCompareResult);
+ QCOMPARE_EQ(scResult, caseSensitiveCompareResult);
#define CHECK(op) \
do { \
@@ -1116,6 +1360,11 @@ void tst_QStringApiSymmetry::compare_impl() const
CHECK(<=);
CHECK(>=);
#undef CHECK
+ // Test that all string-like types implemente compareThreeWay() as a friend
+ // function.
+ const Qt::strong_ordering expectedOrdering =
+ Qt::compareThreeWay(caseSensitiveCompareResult, 0);
+ QCOMPARE_EQ(qCompareThreeWay(lhs, rhs), expectedOrdering);
}
template <typename LHS, typename RHS>
@@ -1137,15 +1386,336 @@ void tst_QStringApiSymmetry::member_compare_impl() const
if constexpr (has_nothrow_member_compare_v<LHS, RHS>)
QVERIFY(noexcept(lhs.compare(rhs, Qt::CaseSensitive)));
- QCOMPARE(sign(lhs.compare(rhs)), caseSensitiveCompareResult);
- QCOMPARE(sign(lhs.compare(rhs, Qt::CaseSensitive)), caseSensitiveCompareResult);
+ QCOMPARE_EQ(sign(lhs.compare(rhs)), caseSensitiveCompareResult);
+ QCOMPARE_EQ(sign(lhs.compare(rhs, Qt::CaseSensitive)), caseSensitiveCompareResult);
if (is_bytearray_like_v<LHS> && is_bytearray_like_v<RHS> &&
caseSensitiveCompareResult != caseInsensitiveCompareResult &&
(!QtPrivate::isAscii(lhsUnicode) || !QtPrivate::isAscii(rhsUnicode)))
{
QEXPECT_FAIL("", "The types don't support non-ASCII case-insensitive comparison", Continue);
}
- QCOMPARE(sign(lhs.compare(rhs, Qt::CaseInsensitive)), caseInsensitiveCompareResult);
+ QCOMPARE_EQ(sign(lhs.compare(rhs, Qt::CaseInsensitive)), caseInsensitiveCompareResult);
+}
+
+void tst_QStringApiSymmetry::localeAwareCompare_data()
+{
+ QTest::addColumn<QByteArray>("locale");
+ QTest::addColumn<QString>("s1");
+ QTest::addColumn<QString>("s2");
+ QTest::addColumn<int>("result");
+
+#if defined(Q_OS_WIN) || defined(Q_OS_DARWIN) || QT_CONFIG(icu)
+ // Although the test sets LC_ALL (and adds a suffix to wanted) test
+ // LC_COLLATE because setlocale(LC_ALL, nullptr) encodes the whole locale,
+ // it's not simply the value of LC_ALL. We need our own copy of the reported
+ // value, as later setlocale() calls may stomp the value:
+ const QByteArray current(setlocale(LC_COLLATE, nullptr));
+ const auto canTest = [current](const char *wanted) {
+# if QT_CONFIG(icu)
+ // ICU will correctly use en when relevant environment variables are set
+ // to en.UTF-8, but setlocale() reports that as C, whose sort order is
+ // simpler. Only believe we can run C tests if the environment variables
+ // (which, conveniently, QLocale::system()'s Unix backend uses) say it
+ // really is. Conversely, don't reject "en_US" just because setlocale()
+ // misdescribes it.
+ if (current == "C") {
+ const QString sys = QLocale::system().name();
+ if (wanted == current ? sys == u"C" : sys.startsWith(wanted))
+ return true;
+ qDebug("Skipping %s test-cases as we can only test in locale %s (seen as C)",
+ wanted, sys.toUtf8().constData());
+ return false;
+ }
+# endif
+ if (current.startsWith(wanted))
+ return true;
+# ifdef Q_OS_WIN
+ // Unhelpfully, MS doesn't deign to use the usual format of locale tags,
+ // but expands the tag names to full names (in English):
+ const auto want = QLocale(QLatin1String(wanted));
+ if (current.startsWith(
+ QString(QLocale::languageToString(want.language()) + QChar('_')
+ + QLocale::territoryToString(want.territory())).toLocal8Bit())) {
+ return true;
+ }
+# endif
+ qDebug("Skipping %s test-cases as we can only test in locale %s (seen as %s)",
+ wanted, QLocale::system().name().toUtf8().constData(), current.data());
+ return false;
+ };
+#else
+ const auto canTest = [](const char *wanted) {
+ return QLocale(wanted) == QLocale::c() || QLocale(wanted) == QLocale::system().collation();
+ };
+#endif
+ // Update tailpiece's max-value for this if you add a new locale group
+ int countGroups = 0;
+
+ // Compare decomposed and composed form
+ if (canTest("en_US")) {
+ // From ES6 test262 test suite (built-ins/String/prototype/localeCompare/15.5.4.9_CE.js).
+ // The test cases boil down to code like this:
+ // console.log("\u1111\u1171\u11B6".localeCompare("\ud4db")
+
+ // example from Unicode 5.0, section 3.7, definition D70
+ QTest::newRow("normalize1")
+ << QByteArray("en_US")
+ << QString::fromUtf8("o\xCC\x88")
+ << QString::fromUtf8("\xC3\xB6") << 0;
+ // examples from Unicode 5.0, chapter 3.11
+ QTest::newRow("normalize2")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xC3\xA4\xCC\xA3")
+ << QString::fromUtf8("a\xCC\xA3\xCC\x88") << 0;
+ QTest::newRow("normalize3")
+ << QByteArray("en_US")
+ << QString::fromUtf8("a\xCC\x88\xCC\xA3")
+ << QString::fromUtf8("a\xCC\xA3\xCC\x88") << 0;
+ QTest::newRow("normalize4")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE1\xBA\xA1\xCC\x88")
+ << QString::fromUtf8("a\xCC\xA3\xCC\x88") << 0;
+ QTest::newRow("normalize5")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xC3\xA4\xCC\x86")
+ << QString::fromUtf8("a\xCC\x88\xCC\x86") << 0;
+ QTest::newRow("normalize6")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xC4\x83\xCC\x88")
+ << QString::fromUtf8("a\xCC\x86\xCC\x88") << 0;
+ // example from Unicode 5.0, chapter 3.12
+ QTest::newRow("normalize7")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE1\x84\x91\xE1\x85\xB1\xE1\x86\xB6")
+ << QString::fromUtf8("\xED\x93\x9B") << 0;
+ // examples from UTS 10, Unicode Collation Algorithm
+ QTest::newRow("normalize8")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE2\x84\xAB")
+ << QString::fromUtf8("\xC3\x85") << 0;
+ QTest::newRow("normalize9")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE2\x84\xAB")
+ << QString::fromUtf8("A\xCC\x8A") << 0;
+ QTest::newRow("normalize10")
+ << QByteArray("en_US")
+ << QString::fromUtf8("x\xCC\x9B\xCC\xA3")
+ << QString::fromUtf8("x\xCC\xA3\xCC\x9B") << 0;
+ QTest::newRow("normalize11")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE1\xBB\xB1")
+ << QString::fromUtf8("\xE1\xBB\xA5\xCC\x9B") << 0;
+ QTest::newRow("normalize12")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE1\xBB\xB1")
+ << QString::fromUtf8("u\xCC\x9B\xCC\xA3") << 0;
+ QTest::newRow("normalize13")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE1\xBB\xB1")
+ << QString::fromUtf8("\xC6\xB0\xCC\xA3") << 0;
+ QTest::newRow("normalize14")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE1\xBB\xB1")
+ << QString::fromUtf8("u\xCC\xA3\xCC\x9B") << 0;
+ // examples from UAX 15, Unicode Normalization Forms
+ QTest::newRow("normalize15")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xC3\x87")
+ << QString::fromUtf8("C\xCC\xA7") << 0;
+ QTest::newRow("normalize16")
+ << QByteArray("en_US")
+ << QString::fromUtf8("q\xCC\x87\xCC\xA3")
+ << QString::fromUtf8("q\xCC\xA3\xCC\x87") << 0;
+ QTest::newRow("normalize17")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xEA\xB0\x80")
+ << QString::fromUtf8("\xE1\x84\x80\xE1\x85\xA1") << 0;
+ QTest::newRow("normalize18")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE2\x84\xAB")
+ << QString::fromUtf8("A\xCC\x8A") << 0;
+ QTest::newRow("normalize19")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE2\x84\xA6")
+ << QString::fromUtf8("\xCE\xA9") << 0;
+ QTest::newRow("normalize20")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xC3\x85")
+ << QString::fromUtf8("A\xCC\x8A") << 0;
+ QTest::newRow("normalize21")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xC3\xB4")
+ << QString::fromUtf8("o\xCC\x82") << 0;
+ QTest::newRow("normalize22")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE1\xB9\xA9")
+ << QString::fromUtf8("s\xCC\xA3\xCC\x87") << 0;
+ QTest::newRow("normalize23")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE1\xB8\x8B\xCC\xA3")
+ << QString::fromUtf8("d\xCC\xA3\xCC\x87") << 0;
+ QTest::newRow("normalize24")
+ << QByteArray("en_US")
+ << QString::fromUtf8("\xE1\xB8\x8B\xCC\xA3")
+ << QString::fromUtf8("\xE1\xB8\x8D\xCC\x87") << 0;
+ QTest::newRow("normalize25")
+ << QByteArray("en_US")
+ << QString::fromUtf8("q\xCC\x87\xCC\xA3")
+ << QString::fromUtf8("q\xCC\xA3\xCC\x87") << 0;
+
+ QTest::newRow("en@5.gt.4") << QByteArray("en_US") << QString("5") << QString("4") << 1;
+ QTest::newRow("en@4.lt.6") << QByteArray("en_US") << QString("4") << QString("6") << -1;
+ QTest::newRow("en@5.l6.6") << QByteArray("en_US") << QString("5") << QString("6") << -1;
+
+ QTest::newRow("en@null.eq.null") << QByteArray("en_US") << QString() << QString() << 0;
+ QTest::newRow("en@empty.eq.null") << QByteArray("en_US") << QString("") << QString() << 0;
+ QTest::newRow("en@null.lt.non-empty") << QByteArray("en_US") << QString()
+ << QString("test") << -1;
+ QTest::newRow("en@empty.lt.non-empty") << QByteArray("en_US") << QString("")
+ << QString("test") << -1;
+
+ countGroups++;
+ }
+
+ /*
+ The C locale performs simple code-point number comparison of successive
+ characters until if finds a difference. Contrast with Swedish below,
+ particularly the a-umlaut vs a-ring comparison.
+ */
+ if (canTest("C")) {
+ QTest::newRow("C@auml.lt.aring")
+ << QByteArray("C")
+ << QString::fromLatin1("\xe4") // &auml;
+ << QString::fromLatin1("\xe5") << -1;
+ QTest::newRow("C@auml.lt.ouml")
+ << QByteArray("C")
+ << QString::fromLatin1("\xe4")
+ << QString::fromLatin1("\xf6") << -1; // &ouml;
+ QTest::newRow("C.aring.lt.ouml")
+ << QByteArray("C")
+ << QString::fromLatin1("\xe5") // &aring;
+ << QString::fromLatin1("\xf6") << -1;
+
+ countGroups++;
+ }
+
+ /*
+ In Swedish, a with ring above (E5) comes before a with
+ diaresis (E4), which comes before o diaresis (F6), which
+ all come after z.
+ */
+ if (canTest("sv_SE")) {
+ QTest::newRow("swede@aring.lt.auml")
+ << QByteArray("sv_SE")
+ << QString::fromLatin1("\xe5")
+ << QString::fromLatin1("\xe4") << -1;
+ QTest::newRow("swede@auml.lt.ouml")
+ << QByteArray("sv_SE")
+ << QString::fromLatin1("\xe4")
+ << QString::fromLatin1("\xf6") << -1;
+ QTest::newRow("swede.aring.lt.ouml")
+ << QByteArray("sv_SE")
+ << QString::fromLatin1("\xe5")
+ << QString::fromLatin1("\xf6") << -1;
+ QTest::newRow("swede.z.lt.aring")
+ << QByteArray("sv_SE")
+ << QString::fromLatin1("z")
+ << QString::fromLatin1("\xe5") << -1;
+
+ countGroups++;
+ }
+
+ /*
+ In Norwegian, ae (E6) comes before o with stroke (D8), which
+ comes before a with ring above (E5).
+ */
+ if (canTest("nb_NO")) {
+ QTest::newRow("norsk.ae.lt.oslash")
+ << QByteArray("nb_NO")
+ << QString::fromLatin1("\xe6")
+ << QString::fromLatin1("\xd8") << -1;
+ QTest::newRow("norsk.oslash.lt.aring")
+ << QByteArray("nb_NO")
+ << QString::fromLatin1("\xd8")
+ << QString::fromLatin1("\xe5") << -1;
+ QTest::newRow("norsk.ae.lt.aring")
+ << QByteArray("nb_NO")
+ << QString::fromLatin1("\xe6")
+ << QString::fromLatin1("\xe5") << -1;
+
+ countGroups++;
+ }
+
+ /*
+ In German, z comes *after* a with diaresis (E4),
+ which comes before o diaresis (F6).
+ */
+ if (canTest("de_DE")) {
+ QTest::newRow("german.z.gt.auml")
+ << QByteArray("de_DE")
+ << QString::fromLatin1("z")
+ << QString::fromLatin1("\xe4") << 1;
+ QTest::newRow("german.auml.lt.ouml")
+ << QByteArray("de_DE")
+ << QString::fromLatin1("\xe4")
+ << QString::fromLatin1("\xf6") << -1;
+ QTest::newRow("german.z.gt.ouml")
+ << QByteArray("de_DE")
+ << QString::fromLatin1("z")
+ << QString::fromLatin1("\xf6") << 1;
+
+ countGroups++;
+ }
+ // Tell developers how to get all the results (bot don't spam Coin logs):
+ if (countGroups < 5 && !qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci")) {
+ qDebug(R"(On platforms where this test cannot control the locale used by
+QString::localeAwareCompare(), it only runs test-cases for the locale in use.
+To test thoroughly, it is necessary to run this test repeatedly with each of
+C.UTF-8, en_US.UTF-8, sv_SE.UTF-8, nb_NO.UTF-8 and de_DE.UTF-8 as the system
+locale.)");
+ }
+ if (!countGroups)
+ QSKIP("No data for available locale");
+}
+
+template<typename LHS, typename RHS>
+void tst_QStringApiSymmetry::localeAwareCompare_impl()
+{
+ QFETCH(QByteArray, locale);
+ QFETCH(const QString, s1);
+ QFETCH(const QString, s2);
+ QFETCH(int, result);
+ locale += ".UTF-8"; // So we don't have to repeat it on every data row !
+
+ const QTestLocaleChange::TransientLocale tested(LC_ALL, locale.constData());
+ if (!tested.isValid())
+ QSKIP(QByteArray("Test needs locale " + locale + " installed on this machine").constData());
+
+ const auto lhs = make<LHS>(s1);
+ const auto rhs = make<RHS>(s2);
+
+ // qDebug() << s1.toUtf8().toHex(' ') << "as" << result << "to" << s2.toUtf8().toHex(' ');
+ QCOMPARE_EQ(sign(QString::localeAwareCompare(lhs, rhs)), result);
+}
+
+template<typename LHS, typename RHS>
+void tst_QStringApiSymmetry::member_localeAwareCompare_impl()
+{
+ QFETCH(QByteArray, locale);
+ QFETCH(const QString, s1);
+ QFETCH(const QString, s2);
+ QFETCH(int, result);
+ locale += ".UTF-8"; // So we don't have to repeat it on every data row !
+
+ const QTestLocaleChange::TransientLocale tested(LC_ALL, locale.constData());
+ if (!tested.isValid())
+ QSKIP(QByteArray("Test needs locale " + locale + " installed on this machine").constData());
+
+ const auto lhs = make<LHS>(s1);
+ const auto rhs = make<RHS>(s2);
+
+ // qDebug() << s1.toUtf8().toHex(' ') << "as" << result << "to" << s2.toUtf8().toHex(' ');
+ QCOMPARE_EQ(sign(lhs.localeAwareCompare(rhs)), result);
}
static QString empty = QLatin1String("");
@@ -1264,9 +1834,9 @@ void tst_QStringApiSymmetry::startsWith_impl() const
const auto haystack = make<Haystack>(haystackU16, haystackL1, haystackU8);
const auto needle = make<Needle>(needleU16, needleL1, needleU8);
- QCOMPARE(haystack.startsWith(needle), resultCS);
- QCOMPARE(haystack.startsWith(needle, Qt::CaseSensitive), resultCS);
- QCOMPARE(haystack.startsWith(needle, Qt::CaseInsensitive), resultCIS);
+ QCOMPARE_EQ(haystack.startsWith(needle), resultCS);
+ QCOMPARE_EQ(haystack.startsWith(needle, Qt::CaseSensitive), resultCS);
+ QCOMPARE_EQ(haystack.startsWith(needle, Qt::CaseInsensitive), resultCIS);
}
void tst_QStringApiSymmetry::endsWith_data(bool rhsHasVariableLength)
@@ -1351,9 +1921,9 @@ void tst_QStringApiSymmetry::endsWith_impl() const
const auto haystack = make<Haystack>(haystackU16, haystackL1, haystackU8);
const auto needle = make<Needle>(needleU16, needleL1, needleU8);
- QCOMPARE(haystack.endsWith(needle), resultCS);
- QCOMPARE(haystack.endsWith(needle, Qt::CaseSensitive), resultCS);
- QCOMPARE(haystack.endsWith(needle, Qt::CaseInsensitive), resultCIS);
+ QCOMPARE_EQ(haystack.endsWith(needle), resultCS);
+ QCOMPARE_EQ(haystack.endsWith(needle, Qt::CaseSensitive), resultCS);
+ QCOMPARE_EQ(haystack.endsWith(needle, Qt::CaseInsensitive), resultCIS);
}
void tst_QStringApiSymmetry::split_data(bool rhsHasVariableLength)
@@ -1466,11 +2036,11 @@ void tst_QStringApiSymmetry::split_impl() const
const auto haystack = make<Haystack>(haystackU16, haystackL1, haystackU8);
const auto needle = make<Needle>(needleU16, needleL1, needleU8);
- QCOMPARE(toQStringList(haystack.split(needle)), resultCS);
- QCOMPARE(toQStringList(haystack.split(needle, Qt::KeepEmptyParts, Qt::CaseSensitive)), resultCS);
- QCOMPARE(toQStringList(haystack.split(needle, Qt::KeepEmptyParts, Qt::CaseInsensitive)), resultCIS);
- QCOMPARE(toQStringList(haystack.split(needle, Qt::SkipEmptyParts, Qt::CaseSensitive)), skippedResultCS);
- QCOMPARE(toQStringList(haystack.split(needle, Qt::SkipEmptyParts, Qt::CaseInsensitive)), skippedResultCIS);
+ QCOMPARE_EQ(toQStringList(haystack.split(needle)), resultCS);
+ QCOMPARE_EQ(toQStringList(haystack.split(needle, Qt::KeepEmptyParts, Qt::CaseSensitive)), resultCS);
+ QCOMPARE_EQ(toQStringList(haystack.split(needle, Qt::KeepEmptyParts, Qt::CaseInsensitive)), resultCIS);
+ QCOMPARE_EQ(toQStringList(haystack.split(needle, Qt::SkipEmptyParts, Qt::CaseSensitive)), skippedResultCS);
+ QCOMPARE_EQ(toQStringList(haystack.split(needle, Qt::SkipEmptyParts, Qt::CaseInsensitive)), skippedResultCIS);
}
void tst_QStringApiSymmetry::tok_data(bool rhsHasVariableLength)
@@ -1505,44 +2075,44 @@ void tst_QStringApiSymmetry::tok_impl() const
const auto haystack = make<Haystack>(haystackU16, haystackL1, haystackU8);
const auto needle = make<Needle>(needleU16, needleL1, needleU8);
- QCOMPARE(toQStringList(qTokenize(haystack, needle)), resultCS);
- QCOMPARE(toQStringList(qTokenize(haystack, needle, Qt::KeepEmptyParts, Qt::CaseSensitive)), resultCS);
- QCOMPARE(toQStringList(qTokenize(haystack, needle, Qt::CaseInsensitive, Qt::KeepEmptyParts)), resultCIS);
- QCOMPARE(toQStringList(qTokenize(haystack, needle, Qt::SkipEmptyParts, Qt::CaseSensitive)), skippedResultCS);
- QCOMPARE(toQStringList(qTokenize(haystack, needle, Qt::CaseInsensitive, Qt::SkipEmptyParts)), skippedResultCIS);
+ QCOMPARE_EQ(toQStringList(qTokenize(haystack, needle)), resultCS);
+ QCOMPARE_EQ(toQStringList(qTokenize(haystack, needle, Qt::KeepEmptyParts, Qt::CaseSensitive)), resultCS);
+ QCOMPARE_EQ(toQStringList(qTokenize(haystack, needle, Qt::CaseInsensitive, Qt::KeepEmptyParts)), resultCIS);
+ QCOMPARE_EQ(toQStringList(qTokenize(haystack, needle, Qt::SkipEmptyParts, Qt::CaseSensitive)), skippedResultCS);
+ QCOMPARE_EQ(toQStringList(qTokenize(haystack, needle, Qt::CaseInsensitive, Qt::SkipEmptyParts)), skippedResultCIS);
{
const auto tok = qTokenize(deepCopied(haystack), deepCopied(needle));
// here, the temporaries returned from deepCopied() have already been destroyed,
// yet `tok` should have kept a copy alive as needed:
- QCOMPARE(toQStringList(tok), resultCS);
+ QCOMPARE_EQ(toQStringList(tok), resultCS);
}
- QCOMPARE(toQStringList(QStringTokenizer{haystack, needle}), resultCS);
- QCOMPARE(toQStringList(QStringTokenizer{haystack, needle, Qt::KeepEmptyParts, Qt::CaseSensitive}), resultCS);
- QCOMPARE(toQStringList(QStringTokenizer{haystack, needle, Qt::CaseInsensitive, Qt::KeepEmptyParts}), resultCIS);
- QCOMPARE(toQStringList(QStringTokenizer{haystack, needle, Qt::SkipEmptyParts, Qt::CaseSensitive}), skippedResultCS);
- QCOMPARE(toQStringList(QStringTokenizer{haystack, needle, Qt::CaseInsensitive, Qt::SkipEmptyParts}), skippedResultCIS);
+ QCOMPARE_EQ(toQStringList(QStringTokenizer{haystack, needle}), resultCS);
+ QCOMPARE_EQ(toQStringList(QStringTokenizer{haystack, needle, Qt::KeepEmptyParts, Qt::CaseSensitive}), resultCS);
+ QCOMPARE_EQ(toQStringList(QStringTokenizer{haystack, needle, Qt::CaseInsensitive, Qt::KeepEmptyParts}), resultCIS);
+ QCOMPARE_EQ(toQStringList(QStringTokenizer{haystack, needle, Qt::SkipEmptyParts, Qt::CaseSensitive}), skippedResultCS);
+ QCOMPARE_EQ(toQStringList(QStringTokenizer{haystack, needle, Qt::CaseInsensitive, Qt::SkipEmptyParts}), skippedResultCIS);
{
const auto tok = QStringTokenizer{deepCopied(haystack), deepCopied(needle)};
// here, the temporaries returned from deepCopied() have already been destroyed,
// yet `tok` should have kept a copy alive as needed:
- QCOMPARE(toQStringList(tok), resultCS);
+ QCOMPARE_EQ(toQStringList(tok), resultCS);
}
if constexpr (has_tokenize_method_v<Haystack>) {
- QCOMPARE(toQStringList(haystack.tokenize(needle)), resultCS);
- QCOMPARE(toQStringList(haystack.tokenize(needle, Qt::KeepEmptyParts, Qt::CaseSensitive)), resultCS);
- QCOMPARE(toQStringList(haystack.tokenize(needle, Qt::CaseInsensitive, Qt::KeepEmptyParts)), resultCIS);
- QCOMPARE(toQStringList(haystack.tokenize(needle, Qt::SkipEmptyParts, Qt::CaseSensitive)), skippedResultCS);
- QCOMPARE(toQStringList(haystack.tokenize(needle, Qt::CaseInsensitive, Qt::SkipEmptyParts)), skippedResultCIS);
+ QCOMPARE_EQ(toQStringList(haystack.tokenize(needle)), resultCS);
+ QCOMPARE_EQ(toQStringList(haystack.tokenize(needle, Qt::KeepEmptyParts, Qt::CaseSensitive)), resultCS);
+ QCOMPARE_EQ(toQStringList(haystack.tokenize(needle, Qt::CaseInsensitive, Qt::KeepEmptyParts)), resultCIS);
+ QCOMPARE_EQ(toQStringList(haystack.tokenize(needle, Qt::SkipEmptyParts, Qt::CaseSensitive)), skippedResultCS);
+ QCOMPARE_EQ(toQStringList(haystack.tokenize(needle, Qt::CaseInsensitive, Qt::SkipEmptyParts)), skippedResultCIS);
{
const auto tok = deepCopied(haystack).tokenize(deepCopied(needle));
// here, the temporaries returned from deepCopied() have already been destroyed,
// yet `tok` should have kept a copy alive as needed:
- QCOMPARE(toQStringList(tok), resultCS);
+ QCOMPARE_EQ(toQStringList(tok), resultCS);
}
}
}
@@ -1574,7 +2144,6 @@ void tst_QStringApiSymmetry::mid_data()
ROW(abc, 0, -1, abc, abc);
ROW(abc, 0, 5, abc, abc);
ROW(abc, -1, 1, abc, null);
- ROW(abc, -1, 2, abc, a);
ROW(abc, -1, 4, abc, abc);
ROW(abc, 1, -1, bc, bc);
ROW(abc, 1, 1, bc, b);
@@ -1601,25 +2170,25 @@ void tst_QStringApiSymmetry::mid_impl()
const auto mid = s.mid(pos);
const auto mid2 = s.mid(pos, n);
- QCOMPARE(mid, result);
- QCOMPARE(mid.isNull(), result.isNull());
- QCOMPARE(mid.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(mid, result);
+ QCOMPARE_EQ(mid.isNull(), result.isNull());
+ QCOMPARE_EQ(mid.isEmpty(), result.isEmpty());
- QCOMPARE(mid2, result2);
- QCOMPARE(mid2.isNull(), result2.isNull());
- QCOMPARE(mid2.isEmpty(), result2.isEmpty());
+ QCOMPARE_EQ(mid2, result2);
+ QCOMPARE_EQ(mid2.isNull(), result2.isNull());
+ QCOMPARE_EQ(mid2.isEmpty(), result2.isEmpty());
}
{
const auto mid = detached(s).mid(pos);
const auto mid2 = detached(s).mid(pos, n);
- QCOMPARE(mid, result);
- QCOMPARE(mid.isNull(), result.isNull());
- QCOMPARE(mid.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(mid, result);
+ QCOMPARE_EQ(mid.isNull(), result.isNull());
+ QCOMPARE_EQ(mid.isEmpty(), result.isEmpty());
- QCOMPARE(mid2, result2);
- QCOMPARE(mid2.isNull(), result2.isNull());
- QCOMPARE(mid2.isEmpty(), result2.isEmpty());
+ QCOMPARE_EQ(mid2, result2);
+ QCOMPARE_EQ(mid2.isNull(), result2.isNull());
+ QCOMPARE_EQ(mid2.isEmpty(), result2.isEmpty());
}
}
@@ -1672,16 +2241,16 @@ void tst_QStringApiSymmetry::left_impl()
{
const auto left = s.left(n);
- QCOMPARE(left, result);
- QCOMPARE(left.isNull(), result.isNull());
- QCOMPARE(left.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(left, result);
+ QCOMPARE_EQ(left.isNull(), result.isNull());
+ QCOMPARE_EQ(left.isEmpty(), result.isEmpty());
}
{
const auto left = detached(s).left(n);
- QCOMPARE(left, result);
- QCOMPARE(left.isNull(), result.isNull());
- QCOMPARE(left.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(left, result);
+ QCOMPARE_EQ(left.isNull(), result.isNull());
+ QCOMPARE_EQ(left.isEmpty(), result.isEmpty());
}
}
@@ -1734,16 +2303,16 @@ void tst_QStringApiSymmetry::right_impl()
{
const auto right = s.right(n);
- QCOMPARE(right, result);
- QCOMPARE(right.isNull(), result.isNull());
- QCOMPARE(right.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(right, result);
+ QCOMPARE_EQ(right.isNull(), result.isNull());
+ QCOMPARE_EQ(right.isEmpty(), result.isEmpty());
}
{
const auto right = detached(s).right(n);
- QCOMPARE(right, result);
- QCOMPARE(right.isNull(), result.isNull());
- QCOMPARE(right.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(right, result);
+ QCOMPARE_EQ(right.isNull(), result.isNull());
+ QCOMPARE_EQ(right.isEmpty(), result.isEmpty());
}
}
@@ -1803,33 +2372,54 @@ void tst_QStringApiSymmetry::sliced_impl()
{
const auto sliced = s.sliced(pos);
- QCOMPARE(sliced, result);
- QCOMPARE(sliced.isNull(), result.isNull());
- QCOMPARE(sliced.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(sliced, result);
+ QCOMPARE_EQ(sliced.isNull(), result.isNull());
+ QCOMPARE_EQ(sliced.isEmpty(), result.isEmpty());
}
{
const auto sliced = s.sliced(pos, n);
- QCOMPARE(sliced, result2);
- QCOMPARE(sliced.isNull(), result2.isNull());
- QCOMPARE(sliced.isEmpty(), result2.isEmpty());
+ QCOMPARE_EQ(sliced, result2);
+ QCOMPARE_EQ(sliced.isNull(), result2.isNull());
+ QCOMPARE_EQ(sliced.isEmpty(), result2.isEmpty());
}
{
const auto sliced = detached(s).sliced(pos);
- QCOMPARE(sliced, result);
- QCOMPARE(sliced.isNull(), result.isNull());
- QCOMPARE(sliced.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(sliced, result);
+ QCOMPARE_EQ(sliced.isNull(), result.isNull());
+ QCOMPARE_EQ(sliced.isEmpty(), result.isEmpty());
}
{
const auto sliced = detached(s).sliced(pos, n);
- QCOMPARE(sliced, result2);
- QCOMPARE(sliced.isNull(), result2.isNull());
- QCOMPARE(sliced.isEmpty(), result2.isEmpty());
+ QCOMPARE_EQ(sliced, result2);
+ QCOMPARE_EQ(sliced.isNull(), result2.isNull());
+ QCOMPARE_EQ(sliced.isEmpty(), result2.isEmpty());
}
}
+template <typename String>
+void tst_QStringApiSymmetry::slice_impl()
+{
+ QFETCH(const QStringView, unicode);
+ QFETCH(const QLatin1String, latin1);
+ QFETCH(const int, pos);
+ QFETCH(const int, n);
+ QFETCH(const QAnyStringView, result);
+ QFETCH(const QAnyStringView, result2);
+
+ const auto str = make<String>(unicode, latin1, unicode.toUtf8());
+
+ auto s = str;
+ s.slice(pos);
+ QCOMPARE_EQ(s, result);
+
+ s = str;
+ s.slice(pos, n);
+ QCOMPARE_EQ(s, result2);
+}
+
void tst_QStringApiSymmetry::first_data()
{
QTest::addColumn<QStringView>("unicode");
@@ -1874,24 +2464,24 @@ void tst_QStringApiSymmetry::first_impl()
{
const auto first = s.first(n);
- QCOMPARE(first, result);
- QCOMPARE(first.isNull(), result.isNull());
- QCOMPARE(first.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(first, result);
+ QCOMPARE_EQ(first.isNull(), result.isNull());
+ QCOMPARE_EQ(first.isEmpty(), result.isEmpty());
}
{
const auto first = detached(s).first(n);
- QCOMPARE(first, result);
- QCOMPARE(first.isNull(), result.isNull());
- QCOMPARE(first.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(first, result);
+ QCOMPARE_EQ(first.isNull(), result.isNull());
+ QCOMPARE_EQ(first.isEmpty(), result.isEmpty());
}
{
auto first = s;
first.truncate(n);
- QCOMPARE(first, result);
- QCOMPARE(first.isNull(), result.isNull());
- QCOMPARE(first.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(first, result);
+ QCOMPARE_EQ(first.isNull(), result.isNull());
+ QCOMPARE_EQ(first.isEmpty(), result.isEmpty());
}
}
@@ -1939,16 +2529,16 @@ void tst_QStringApiSymmetry::last_impl()
{
const auto last = s.last(n);
- QCOMPARE(last, result);
- QCOMPARE(last.isNull(), result.isNull());
- QCOMPARE(last.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(last, result);
+ QCOMPARE_EQ(last.isNull(), result.isNull());
+ QCOMPARE_EQ(last.isEmpty(), result.isEmpty());
}
{
const auto last = detached(s).last(n);
- QCOMPARE(last, result);
- QCOMPARE(last.isNull(), result.isNull());
- QCOMPARE(last.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(last, result);
+ QCOMPARE_EQ(last.isNull(), result.isNull());
+ QCOMPARE_EQ(last.isEmpty(), result.isEmpty());
}
}
@@ -1996,24 +2586,24 @@ void tst_QStringApiSymmetry::chop_impl()
{
const auto chopped = s.chopped(n);
- QCOMPARE(chopped, result);
- QCOMPARE(chopped.isNull(), result.isNull());
- QCOMPARE(chopped.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(chopped, result);
+ QCOMPARE_EQ(chopped.isNull(), result.isNull());
+ QCOMPARE_EQ(chopped.isEmpty(), result.isEmpty());
}
{
const auto chopped = detached(s).chopped(n);
- QCOMPARE(chopped, result);
- QCOMPARE(chopped.isNull(), result.isNull());
- QCOMPARE(chopped.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(chopped, result);
+ QCOMPARE_EQ(chopped.isNull(), result.isNull());
+ QCOMPARE_EQ(chopped.isEmpty(), result.isEmpty());
}
{
auto chopped = s;
chopped.chop(n);
- QCOMPARE(chopped, result);
- QCOMPARE(chopped.isNull(), result.isNull());
- QCOMPARE(chopped.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(chopped, result);
+ QCOMPARE_EQ(chopped.isNull(), result.isNull());
+ QCOMPARE_EQ(chopped.isEmpty(), result.isEmpty());
}
}
@@ -2022,18 +2612,20 @@ void tst_QStringApiSymmetry::trimmed_data()
QTest::addColumn<QString>("unicode");
QTest::addColumn<QAnyStringView>("result");
- const auto latin1Whitespace = QLatin1String(" \r\n\t\f\v");
+ const auto latin1Whitespace = QLatin1StringView(" \r\n\t\f\v");
QTest::addRow("null") << QString() << QAnyStringView();
auto add = [latin1Whitespace](const QString &str) {
- // run through all substrings of latin1Whitespace
- for (int len = 0; len < latin1Whitespace.size(); ++len) {
- for (int pos = 0; pos < latin1Whitespace.size() - len; ++pos) {
- const QString unicode = latin1Whitespace.mid(pos, len) + str + latin1Whitespace.mid(pos, len);
- const QScopedArrayPointer<const char> escaped(QTest::toString(unicode));
- QTest::addRow("%s", escaped.data()) << unicode << QAnyStringView(str);
- }
+ auto row = [&](QLatin1StringView spaces) {
+ const QString unicode = spaces + str + spaces;
+ const QScopedArrayPointer<const char> escaped(QTest::toString(unicode));
+ QTest::addRow("%s", escaped.data()) << unicode << QAnyStringView(str);
+ };
+ row({}); // The len = 0 case of the following.
+ for (qsizetype len = 1; len < latin1Whitespace.size(); ++len) {
+ for (qsizetype pos = 0; pos < latin1Whitespace.size() - len; ++pos)
+ row (latin1Whitespace.mid(pos, len));
}
};
@@ -2055,21 +2647,21 @@ void tst_QStringApiSymmetry::trimmed_impl()
const auto ref = unicode.isNull() ? QStringView() : QStringView(unicode);
const auto s = make<String>(ref, l1, utf8);
- QCOMPARE(s.isNull(), unicode.isNull());
+ QCOMPARE_EQ(s.isNull(), unicode.isNull());
{
const auto trimmed = s.trimmed();
- QCOMPARE(trimmed, result);
- QCOMPARE(trimmed.isNull(), result.isNull());
- QCOMPARE(trimmed.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(trimmed, result);
+ QCOMPARE_EQ(trimmed.isNull(), result.isNull());
+ QCOMPARE_EQ(trimmed.isEmpty(), result.isEmpty());
}
{
const auto trimmed = detached(s).trimmed();
- QCOMPARE(trimmed, result);
- QCOMPARE(trimmed.isNull(), result.isNull());
- QCOMPARE(trimmed.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(trimmed, result);
+ QCOMPARE_EQ(trimmed.isNull(), result.isNull());
+ QCOMPARE_EQ(trimmed.isEmpty(), result.isEmpty());
}
}
@@ -2119,60 +2711,165 @@ void tst_QStringApiSymmetry::toNumber_impl()
qint64 n = 0;
n = s.toShort(&is_ok);
- QCOMPARE(is_ok, ok && inRange<short>(result));
+ QCOMPARE_EQ(is_ok, ok && inRange<short>(result));
if (is_ok)
- QCOMPARE(n, result);
+ QCOMPARE_EQ(n, result);
n = s.toUShort(&is_ok);
- QCOMPARE(is_ok, ok && inRange<ushort>(result));
+ QCOMPARE_EQ(is_ok, ok && inRange<ushort>(result));
if (is_ok)
- QCOMPARE(n, result);
+ QCOMPARE_EQ(n, result);
n = s.toInt(&is_ok);
- QCOMPARE(is_ok, ok && inRange<int>(result));
+ QCOMPARE_EQ(is_ok, ok && inRange<int>(result));
if (is_ok)
- QCOMPARE(n, result);
+ QCOMPARE_EQ(n, result);
n = s.toUInt(&is_ok);
- QCOMPARE(is_ok, ok && inRange<uint>(result));
+ QCOMPARE_EQ(is_ok, ok && inRange<uint>(result));
if (is_ok)
- QCOMPARE(n, result);
+ QCOMPARE_EQ(n, result);
n = s.toLong(&is_ok);
- QCOMPARE(is_ok, ok && inRange<long>(result));
+ QCOMPARE_EQ(is_ok, ok && inRange<long>(result));
if (is_ok)
- QCOMPARE(n, result);
+ QCOMPARE_EQ(n, result);
n = s.toULong(&is_ok);
- QCOMPARE(is_ok, ok && inRange<ulong>(result));
+ QCOMPARE_EQ(is_ok, ok && inRange<ulong>(result));
if (is_ok)
- QCOMPARE(n, result);
+ QCOMPARE_EQ(n, result);
n = s.toLongLong(&is_ok);
- QCOMPARE(is_ok, ok && inRange<qlonglong>(result));
+ QCOMPARE_EQ(is_ok, ok && inRange<qlonglong>(result));
if (is_ok)
- QCOMPARE(n, result);
+ QCOMPARE_EQ(n, result);
n = s.toULongLong(&is_ok);
- QCOMPARE(is_ok, ok && inRange<qulonglong>(result));
+ QCOMPARE_EQ(is_ok, ok && inRange<qulonglong>(result));
if (is_ok)
- QCOMPARE(n, result);
+ QCOMPARE_EQ(n, result);
if (qint64(float(n)) == n) {
float f = s.toFloat(&is_ok);
- QCOMPARE(is_ok, ok);
+ QCOMPARE_EQ(is_ok, ok);
if (is_ok)
- QCOMPARE(qint64(f), result);
+ QCOMPARE_EQ(qint64(f), result);
}
if (qint64(double(n)) == n) {
double d = s.toDouble(&is_ok);
- QCOMPARE(is_ok, ok);
+ QCOMPARE_EQ(is_ok, ok);
if (is_ok)
- QCOMPARE(qint64(d), result);
+ QCOMPARE_EQ(qint64(d), result);
}
}
+void tst_QStringApiSymmetry::toNumberWithBases_data()
+{
+ QTest::addColumn<QString>("data");
+ QTest::addColumn<int>("base");
+ QTest::addColumn<qint64>("result");
+ QTest::addColumn<bool>("ok");
+
+ constexpr struct {
+ const char prefix[3];
+ int base;
+ } bases[] = {
+ { "0b", 2 },
+ { "0", 8 },
+ { "", 10 },
+ { "0x", 16 },
+ };
+
+ const auto check = [&](const char *input, qint64 n2, qint64 n8, qint64 n10, qint64 n16, bool result) {
+ for (const auto &e : bases) {
+ const QString data = QLatin1StringView(e.prefix) + QString::fromUtf8(input);
+ const auto row = [&](int base) {
+ const auto select = [&](int base) {
+ switch (base) {
+ case 2: return n2;
+ case 8: return n8;
+ case 10: return n10;
+ case 16: return n16;
+ }
+ Q_UNREACHABLE();
+ };
+ QTest::addRow("base%2d: %s%s", base, e.prefix, input)
+ << data << base << select(e.base /* NOT base! */) << result;
+ };
+ row(e.base); // explicit base
+ row(0); // automatically detected base
+ }
+ };
+
+ check("0", 0, 0, 0, 0, true);
+ check("y0", 0, 0, 0, 0, false);
+ check("0y", 0, 0, 0, 0, false);
+ check("10", 2, 8, 10, 16, true);
+ check("11", 3, 9, 11, 17, true);
+ check("100", 4, 64, 100, 256, true);
+}
+
+template<typename String>
+void tst_QStringApiSymmetry::toNumberWithBases_impl()
+{
+ QFETCH(const QString, data);
+ QFETCH(const int, base);
+ QFETCH(const qint64, result);
+ QFETCH(const bool, ok);
+
+ const auto utf8 = data.toUtf8();
+ const auto l1s = data.toLatin1();
+ const auto l1 = l1s.isNull() ? QLatin1String() : QLatin1String(l1s);
+
+ const auto ref = data.isNull() ? QStringView() : QStringView(data);
+ const auto s = make<String>(ref, l1, utf8);
+
+ bool is_ok = false;
+ qint64 n = 0;
+
+ n = s.toShort(&is_ok, base);
+ QCOMPARE_EQ(is_ok, ok && inRange<short>(result));
+ if (is_ok)
+ QCOMPARE_EQ(n, result);
+
+ n = s.toUShort(&is_ok, base);
+ QCOMPARE_EQ(is_ok, ok && inRange<ushort>(result));
+ if (is_ok)
+ QCOMPARE_EQ(n, result);
+
+ n = s.toInt(&is_ok, base);
+ QCOMPARE_EQ(is_ok, ok && inRange<int>(result));
+ if (is_ok)
+ QCOMPARE_EQ(n, result);
+
+ n = s.toUInt(&is_ok, base);
+ QCOMPARE_EQ(is_ok, ok && inRange<uint>(result));
+ if (is_ok)
+ QCOMPARE_EQ(n, result);
+
+ n = s.toLong(&is_ok, base);
+ QCOMPARE_EQ(is_ok, ok && inRange<long>(result));
+ if (is_ok)
+ QCOMPARE_EQ(n, result);
+
+ n = s.toULong(&is_ok, base);
+ QCOMPARE_EQ(is_ok, ok && inRange<ulong>(result));
+ if (is_ok)
+ QCOMPARE_EQ(n, result);
+
+ n = s.toLongLong(&is_ok, base);
+ QCOMPARE_EQ(is_ok, ok && inRange<qlonglong>(result));
+ if (is_ok)
+ QCOMPARE_EQ(n, result);
+
+ n = s.toULongLong(&is_ok, base);
+ QCOMPARE_EQ(is_ok, ok && inRange<qulonglong>(result));
+ if (is_ok)
+ QCOMPARE_EQ(n, result);
+}
+
void tst_QStringApiSymmetry::count_data()
{
QTest::addColumn<QString>("data");
@@ -2183,7 +2880,7 @@ void tst_QStringApiSymmetry::count_data()
QTest::addRow("xyzaaaxyz") << QString::fromUtf8("xyzaaaxyz") << QString::fromUtf8("xyz") << qsizetype(2);
}
-template <typename String>
+template<typename Haystack, typename Needle>
void tst_QStringApiSymmetry::count_impl()
{
QFETCH(const QString, data);
@@ -2195,18 +2892,16 @@ void tst_QStringApiSymmetry::count_impl()
const auto l1 = l1s.isNull() ? QLatin1String() : QLatin1String(l1s);
const auto ref = data.isNull() ? QStringView() : QStringView(data);
- const auto s = make<String>(ref, l1, utf8);
+ const auto s = make<Haystack>(ref, l1, utf8);
const auto nutf8 = needle.toUtf8();
const auto nl1s = needle.toLatin1();
- const auto nl1 = nl1s.isNull() ? QLatin1String() : QLatin1String(l1s);
+ const auto nl1 = nl1s.isNull() ? QLatin1String() : QLatin1String(nl1s);
const auto nref = needle.isNull() ? QStringView() : QStringView(needle);
- const auto ns = make<String>(nref, nl1, nutf8);
+ const auto ns = make<Needle>(nref, nl1, nutf8);
- QCOMPARE(s.count(ns), result);
- if (ns.length() == 1)
- QCOMPARE(s.count(ns.data()[0]), result);
+ QCOMPARE_EQ(s.count(ns), result);
}
//
@@ -2215,10 +2910,6 @@ void tst_QStringApiSymmetry::count_impl()
//
//
-template <class Str> Str make(const QString &s);
-template <> QString make(const QString &s) { return s; }
-template <> QStringView make(const QString &s) { return s; }
-
#define REPEAT_16X(X) X X X X X X X X X X X X X X X X
#define LONG_STRING_256 REPEAT_16X("0123456789abcdef")
@@ -2252,9 +2943,9 @@ void tst_QStringApiSymmetry::toLocal8Bit_impl()
const auto result = str.toLocal8Bit();
- QCOMPARE(result, local);
- QCOMPARE(unicode.isEmpty(), result.isEmpty());
- QCOMPARE(unicode.isNull(), result.isNull());
+ QCOMPARE_EQ(result, local);
+ QCOMPARE_EQ(unicode.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(unicode.isNull(), result.isNull());
}
void tst_QStringApiSymmetry::toLatin1_data()
@@ -2287,9 +2978,9 @@ void tst_QStringApiSymmetry::toLatin1_impl()
const auto result = str.toLatin1();
- QCOMPARE(result, latin1);
- QCOMPARE(unicode.isEmpty(), result.isEmpty());
- QCOMPARE(unicode.isNull(), result.isNull());
+ QCOMPARE_EQ(result, latin1);
+ QCOMPARE_EQ(unicode.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(unicode.isNull(), result.isNull());
}
void tst_QStringApiSymmetry::toUtf8_data()
@@ -2320,9 +3011,9 @@ void tst_QStringApiSymmetry::toUtf8_impl()
const auto result = str.toUtf8();
- QCOMPARE(result, utf8);
- QCOMPARE(unicode.isEmpty(), result.isEmpty());
- QCOMPARE(unicode.isNull(), result.isNull());
+ QCOMPARE_EQ(result, utf8);
+ QCOMPARE_EQ(unicode.isEmpty(), result.isEmpty());
+ QCOMPARE_EQ(unicode.isNull(), result.isNull());
}
void tst_QStringApiSymmetry::toUcs4_data()
@@ -2358,8 +3049,8 @@ void tst_QStringApiSymmetry::toUcs4_impl()
const auto result = str.toUcs4();
- QCOMPARE(result, ucs4);
- QCOMPARE(unicode.isEmpty(), ucs4.isEmpty());
+ QCOMPARE_EQ(result, ucs4);
+ QCOMPARE_EQ(unicode.isEmpty(), ucs4.isEmpty());
}
void tst_QStringApiSymmetry::indexOf_data(bool rhsHasVariableLength)
@@ -2398,9 +3089,9 @@ void tst_QStringApiSymmetry::indexOf_data(bool rhsHasVariableLength)
<< minus1Pos << minus1Pos;
#define ROW(h, n, st, cs, cis) \
- QTest::addRow("haystack: %s, needle: %s", #h, #n) << h << QLatin1String(#h) \
- << n << QLatin1String(#n) \
- << qsizetype(st) << qsizetype(cs) << qsizetype(cis)
+ QTest::addRow("haystack: %s, needle: %s, start: %d", #h, #n, st) \
+ << h << QLatin1String(#h) << n << QLatin1String(#n) \
+ << qsizetype(st) << qsizetype(cs) << qsizetype(cis)
ROW(abc, a, 0, 0, 0);
ROW(abc, A, 0, -1, 0);
@@ -2458,9 +3149,9 @@ void tst_QStringApiSymmetry::indexOf_impl() const
using size_type = typename Haystack::size_type;
- QCOMPARE(haystack.indexOf(needle, startpos), size_type(resultCS));
- QCOMPARE(haystack.indexOf(needle, startpos, Qt::CaseSensitive), size_type(resultCS));
- QCOMPARE(haystack.indexOf(needle, startpos, Qt::CaseInsensitive), size_type(resultCIS));
+ QCOMPARE_EQ(haystack.indexOf(needle, startpos), size_type(resultCS));
+ QCOMPARE_EQ(haystack.indexOf(needle, startpos, Qt::CaseSensitive), size_type(resultCS));
+ QCOMPARE_EQ(haystack.indexOf(needle, startpos, Qt::CaseInsensitive), size_type(resultCIS));
}
static QString ABCDEFGHIEfGEFG = QStringLiteral("ABCDEFGHIEfGEFG");
@@ -2489,7 +3180,7 @@ void tst_QStringApiSymmetry::contains_data(bool rhsHasVariableLength)
QTest::addRow("haystack: null, needle: empty") << null << QLatin1String()
<< empty << QLatin1String("") << true << true;
QTest::addRow("haystack: a, needle: empty") << a << QLatin1String("a")
- << empty << QLatin1String("") << true << true;;
+ << empty << QLatin1String("") << true << true;
QTest::addRow("haystack: empty, needle: empty") << empty << QLatin1String("")
<< empty << QLatin1String("") << true << true;
}
@@ -2531,9 +3222,9 @@ void tst_QStringApiSymmetry::contains_impl() const
const auto haystack = make<Haystack>(QStringView(haystackU16), haystackL1, haystackU8);
const auto needle = make<Needle>(QStringView(needleU16), needleL1, needleU8);
- QCOMPARE(haystack.contains(needle), resultCS);
- QCOMPARE(haystack.contains(needle, Qt::CaseSensitive), resultCS);
- QCOMPARE(haystack.contains(needle, Qt::CaseInsensitive), resultCIS);
+ QCOMPARE_EQ(haystack.contains(needle), resultCS);
+ QCOMPARE_EQ(haystack.contains(needle, Qt::CaseSensitive), resultCS);
+ QCOMPARE_EQ(haystack.contains(needle, Qt::CaseInsensitive), resultCIS);
}
void tst_QStringApiSymmetry::lastIndexOf_data(bool rhsHasVariableLength)
@@ -2569,14 +3260,18 @@ void tst_QStringApiSymmetry::lastIndexOf_data(bool rhsHasVariableLength)
<< a << QLatin1String("a") << minus1Pos << minus1Pos << minus1Pos;
if (rhsHasVariableLength) {
- QTest::addRow("haystack: a, needle: null") << a << QLatin1String("a")
- << null << QLatin1String() << qsizetype(1) << qsizetype(1) << qsizetype(1);
- QTest::addRow("haystack: a, needle: empty") << a << QLatin1String("a")
- << empty << QLatin1String("") << qsizetype(1) << qsizetype(1) << qsizetype(1);
- QTest::addRow("haystack: a, needle: null") << a << QLatin1String("a")
- << null << QLatin1String() << qsizetype(2) << minus1Pos << minus1Pos;
- QTest::addRow("haystack: a, needle: empty") << a << QLatin1String("a")
- << empty << QLatin1String("") << qsizetype(2) << minus1Pos << minus1Pos;
+ QTest::addRow("haystack: a, needle: null, start 1")
+ << a << QLatin1String("a")
+ << null << QLatin1String() << qsizetype(1) << qsizetype(1) << qsizetype(1);
+ QTest::addRow("haystack: a, needle: empty, start 1")
+ << a << QLatin1String("a")
+ << empty << QLatin1String("") << qsizetype(1) << qsizetype(1) << qsizetype(1);
+ QTest::addRow("haystack: a, needle: null, start 2")
+ << a << QLatin1String("a")
+ << null << QLatin1String() << qsizetype(2) << minus1Pos << minus1Pos;
+ QTest::addRow("haystack: a, needle: empty, start 2")
+ << a << QLatin1String("a")
+ << empty << QLatin1String("") << qsizetype(2) << minus1Pos << minus1Pos;
}
#define ROW(h, n, st, cs, cis) \
@@ -2643,16 +3338,16 @@ void tst_QStringApiSymmetry::lastIndexOf_impl() const
using size_type = typename Haystack::size_type;
- QCOMPARE(haystack.lastIndexOf(needle, startpos), size_type(resultCS));
- QCOMPARE(haystack.lastIndexOf(needle, startpos, Qt::CaseSensitive), size_type(resultCS));
- QCOMPARE(haystack.lastIndexOf(needle, startpos, Qt::CaseInsensitive), size_type(resultCIS));
+ QCOMPARE_EQ(haystack.lastIndexOf(needle, startpos), size_type(resultCS));
+ QCOMPARE_EQ(haystack.lastIndexOf(needle, startpos, Qt::CaseSensitive), size_type(resultCS));
+ QCOMPARE_EQ(haystack.lastIndexOf(needle, startpos, Qt::CaseInsensitive), size_type(resultCIS));
if (startpos == haystack.size() ||
(startpos == -1 && help::size(needle) > 0)) { // -1 skips past-the-end-match w/empty needle
// check that calls without an explicit 'from' argument work, too:
- QCOMPARE(haystack.lastIndexOf(needle), size_type(resultCS));
- QCOMPARE(haystack.lastIndexOf(needle, Qt::CaseSensitive), size_type(resultCS));
- QCOMPARE(haystack.lastIndexOf(needle, Qt::CaseInsensitive), size_type(resultCIS));
+ QCOMPARE_EQ(haystack.lastIndexOf(needle), size_type(resultCS));
+ QCOMPARE_EQ(haystack.lastIndexOf(needle, Qt::CaseSensitive), size_type(resultCS));
+ QCOMPARE_EQ(haystack.lastIndexOf(needle, Qt::CaseInsensitive), size_type(resultCIS));
}
}
@@ -2860,7 +3555,7 @@ void tst_QStringApiSymmetry::indexOf_contains_lastIndexOf_count_regexp_impl() co
// indexOf
String s = subject;
qsizetype result = s.indexOf(regexp, leftFrom);
- QCOMPARE(result, indexOf);
+ QCOMPARE_EQ(result, indexOf);
// contains
if (result >= 0)
@@ -2870,16 +3565,16 @@ void tst_QStringApiSymmetry::indexOf_contains_lastIndexOf_count_regexp_impl() co
// count
if (leftFrom >= 0)
- QCOMPARE(s.mid(leftFrom).count(regexp), count);
+ QCOMPARE_EQ(s.mid(leftFrom).count(regexp), count);
else
- QCOMPARE(s.mid(leftFrom + s.size()).count(regexp), count);
+ QCOMPARE_EQ(s.mid(leftFrom + s.size()).count(regexp), count);
// lastIndexOf
result = s.lastIndexOf(regexp, rightFrom);
- QCOMPARE(result, lastIndexOf);
+ QCOMPARE_EQ(result, lastIndexOf);
if (rightFrom == s.size()) {
result = s.lastIndexOf(regexp);
- QCOMPARE(result, lastIndexOf);
+ QCOMPARE_EQ(result, lastIndexOf);
}
}
@@ -2898,6 +3593,8 @@ void tst_QStringApiSymmetry::isValidUtf8_data()
row = 0;
QTest::addRow("overlong-%02d", row++) << QByteArray("\xc0\x00") << false;
QTest::addRow("overlong-%02d", row++) << QByteArray("\xc1\xff") << false;
+ QTest::addRow("overlong-%02d", row++) << QByteArray("\xc1\xbf") << false;
+ QTest::addRow("overlong-%02d", row++) << QByteArray("\xc1\x01") << false;
QTest::addRow("overlong-%02d", row++) << QByteArray("\xe0\x00\x00") << false;
QTest::addRow("overlong-%02d", row++) << QByteArray("\xe0\xa0\x7f") << false;
QTest::addRow("overlong-%02d", row++) << QByteArray("\xf0\x00\x00\x00") << false;
diff --git a/tests/auto/corelib/text/qstringbuilder/CMakeLists.txt b/tests/auto/corelib/text/qstringbuilder/CMakeLists.txt
index 20c980f0ad..2ac5d1a73e 100644
--- a/tests/auto/corelib/text/qstringbuilder/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringbuilder/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qstringbuilder.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qstringbuilder1)
add_subdirectory(qstringbuilder2)
diff --git a/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/CMakeLists.txt b/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/CMakeLists.txt
index 2b28032657..069b7573ba 100644
--- a/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qstringbuilder1.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringbuilder1 Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringbuilder1 LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstringbuilder1
SOURCES
tst_qstringbuilder1.cpp
diff --git a/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/stringbuilder.cpp b/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/stringbuilder.cpp
index b4c5ebb968..59362d010a 100644
--- a/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/stringbuilder.cpp
+++ b/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/stringbuilder.cpp
@@ -1,33 +1,8 @@
-/****************************************************************************
-**
-** 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$
-**
-****************************************************************************/
-
-// Do not include anything in this file. We are being #included with
-// a bunch of defines that may break other legitimate code.
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+// Do not include anything in this file. We are being #included in the unnamed namespace
+// with a bunch of defines that may break other legitimate code.
#define LITERAL "some literal"
#define LITERAL_LEN (sizeof(LITERAL)-1)
@@ -69,6 +44,7 @@ template <> QString toQString(const char16_t &c) { return QChar(c); }
template <typename T> QByteArray toQByteArray(const T &t);
template <> QByteArray toQByteArray(const QByteArray &b) { return b; }
+template <> QByteArray toQByteArray(const QByteArrayView &bav) { return bav.toByteArray(); }
template <> QByteArray toQByteArray(char * const &p) { return p; }
template <size_t N> QByteArray toQByteArray(const char (&a)[N]) { return a; }
template <> QByteArray toQByteArray(const char &c) { return QByteArray(&c, 1); }
@@ -102,6 +78,172 @@ void checkItWorksWithFreeSpaceAtBegin(const String &chunk, const Separator &sepa
QCOMPARE(str, expected);
}
+template <typename String>
+void checkNullVsEmpty(const String &empty)
+{
+ String a;
+ String b;
+ QVERIFY(a.isNull());
+ QVERIFY(b.isNull());
+ String result = a P b;
+ QVERIFY(result.isNull());
+
+ String d = empty;
+ QVERIFY(d.isEmpty());
+ QVERIFY(!d.isNull());
+ result = a P d;
+ QVERIFY(result.isEmpty());
+ QVERIFY(!result.isNull());
+
+ result = a P a P a;
+ QVERIFY(result.isNull());
+}
+
+namespace CheckAuto {
+// T is cvref-qualified, using universal reference deduction rules.
+template <typename T> struct Helper;
+
+// These specializations forward to the non-const ones, and add const on top.
+template <typename T> struct Helper<const T>
+{
+ static const T create() { return Helper<T>::create(); }
+ static const T createNull() { return Helper<T>::createNull(); }
+};
+template <typename T> struct Helper<const T &>
+{
+ static const T &create() { return Helper<T &>::create(); }
+ static const T &createNull() { return Helper<T &>::createNull(); }
+};
+
+template <> struct Helper<QString>
+{
+ static QString create() { return QString::fromUtf8("QString rvalue"); }
+ static QString createNull() { return QString(); }
+};
+
+template <> struct Helper<QString &>
+{
+ static QString &create() { static QString s = QString::fromUtf8("QString lvalue"); return s; }
+ static QString &createNull() { static QString s; return s; }
+};
+
+template <> struct Helper<QStringView>
+{
+ static QStringView create() { return QStringView(u"QStringView rvalue"); }
+ static QStringView createNull() { return QStringView(); }
+};
+
+template <> struct Helper<QStringView &>
+{
+ static QStringView &create() { static QStringView s = u"QStringView lvalue"; return s; }
+ static QStringView &createNull() { static QStringView s; return s; }
+};
+
+template <> struct Helper<QByteArray>
+{
+ static QByteArray create() { return QByteArray("QByteArray rvalue"); }
+ static QByteArray createNull() { return QByteArray(); }
+};
+
+template <> struct Helper<QByteArray &>
+{
+ static QByteArray &create() { static QByteArray ba = QByteArray("QByteArray lvalue"); return ba; }
+ static QByteArray &createNull() { static QByteArray ba; return ba; }
+};
+
+template <> struct Helper<QByteArrayView>
+{
+ static QByteArrayView create() { return QByteArrayView("QByteArrayView rvalue"); }
+ static QByteArrayView createNull() { return QByteArrayView(); }
+};
+
+template <> struct Helper<QByteArrayView &>
+{
+ static QByteArrayView &create() { static QByteArrayView ba = "QByteArrayView lvalue"; return ba; }
+ static QByteArrayView &createNull() { static QByteArrayView ba; return ba; }
+};
+
+template <> struct Helper<const char *>
+{
+ static const char *create() { return "const char * rvalue"; }
+ static const char *createNull() { return ""; }
+};
+
+template <> struct Helper<const char *&>
+{
+ static const char *&create() { static const char *s = "const char * lvalue"; return s; }
+ static const char *&createNull() { static const char *s = ""; return s; }
+};
+
+template <typename String1, typename String2, typename Result>
+void checkAutoImpl3()
+{
+ {
+ auto result = Helper<String1>::create() P Helper<String2>::create();
+ Result expected = result;
+ QCOMPARE(result, expected);
+ }
+ {
+ auto result = Helper<String2>::create() P Helper<String1>::create();
+ Result expected = result;
+ QCOMPARE(result, expected);
+ }
+ {
+ auto result = Helper<String1>::create() P Helper<String2>::create() P Helper<String1>::create();
+ Result expected = result;
+ QCOMPARE(result, expected);
+ }
+ {
+ auto result = Helper<String2>::create() P Helper<String1>::create() P Helper<String2>::create();
+ Result expected = result;
+ QCOMPARE(result, expected);
+ }
+ {
+ auto result = Helper<String1>::createNull() P Helper<String2>::create();
+ Result expected = result;
+ QCOMPARE(result, expected);
+ }
+ {
+ auto result = Helper<String1>::createNull() P Helper<String2>::createNull();
+ Result expected = result;
+ QCOMPARE(result, expected);
+ }
+}
+
+template <typename String1, typename String2, typename Result>
+void checkAutoImpl2()
+{
+ checkAutoImpl3<String1 , String2 , Result>();
+ checkAutoImpl3<String1 &, String2 , Result>();
+ checkAutoImpl3<String1 , String2 &, Result>();
+ checkAutoImpl3<String1 &, String2 &, Result>();
+}
+
+template <typename String1, typename String2, typename Result>
+void checkAutoImpl()
+{
+ checkAutoImpl2< String1, String2, Result>();
+ checkAutoImpl2<const String1, String2, Result>();
+ checkAutoImpl2< String1, const String2, Result>();
+ checkAutoImpl2<const String1, const String2, Result>();
+}
+
+} // namespace CheckAuto
+
+void checkAuto()
+{
+ CheckAuto::checkAutoImpl<QString, QString, QString>();
+ CheckAuto::checkAutoImpl<QString, QStringView, QString>();
+
+ CheckAuto::checkAutoImpl<QByteArray, QByteArray, QByteArray>();
+ CheckAuto::checkAutoImpl<QByteArray, const char *, QByteArray>();
+ CheckAuto::checkAutoImpl<QByteArray, QByteArrayView, QByteArray>();
+
+#ifndef QT_NO_CAST_FROM_ASCII
+ CheckAuto::checkAutoImpl<QString, const char *, QString>();
+ CheckAuto::checkAutoImpl<QString, QByteArray, QString>();
+#endif
+}
void runScenario()
{
@@ -120,17 +262,16 @@ void runScenario()
#define CHECK(QorP, a1, a2) \
do { \
- DO(QorP, a1, a2); \
- DO(QorP, a2, a1); \
+ QCOMPARE(QString(a1 QorP a2), toQString(a1).append(toQString(a2))); \
+ QCOMPARE(QString(a2 QorP a1), toQString(a2).append(toQString(a1))); \
} while (0)
-#define DO(QorP, a1, a2) \
- QCOMPARE(QString(a1 QorP a2), \
- toQString(a1).append(toQString(a2))) \
- /* end */
-
CHECK(P, l1string, l1string);
CHECK(P, l1string, string);
+ CHECK(P, l1string, QString(string));
+ CHECK(Q, l1string, string);
+ CHECK(Q, l1string, QString(string));
+
CHECK(Q, l1string, stringview);
CHECK(P, l1string, lchar);
CHECK(P, l1string, qchar);
@@ -141,20 +282,48 @@ void runScenario()
CHECK(Q, l1string, u16charstar);
CHECK(P, string, string);
+ CHECK(P, string, QString(string));
+ CHECK(P, QString(string), QString(string));
+ CHECK(Q, string, string);
+ CHECK(Q, string, QString(string));
+ CHECK(Q, QString(string), QString(string));
+
+ CHECK(P, string, stringview);
+ CHECK(P, QString(string), stringview);
CHECK(Q, string, stringview);
+ CHECK(Q, QString(string), stringview);
+
CHECK(P, string, lchar);
+ CHECK(P, QString(string), lchar);
+ CHECK(Q, string, lchar);
+ CHECK(Q, QString(string), lchar);
+
CHECK(P, string, qchar);
+ CHECK(P, QString(string), qchar);
CHECK(P, string, special);
+ CHECK(P, QString(string), special);
CHECK(P, string, QStringLiteral(LITERAL));
+ CHECK(P, QString(string), QStringLiteral(LITERAL));
+ CHECK(Q, string, qchar);
+ CHECK(Q, QString(string), qchar);
+ CHECK(Q, string, special);
+ CHECK(Q, QString(string), special);
+ CHECK(Q, string, QStringLiteral(LITERAL));
+ CHECK(Q, QString(string), QStringLiteral(LITERAL));
+
CHECK(Q, string, u16char);
+ CHECK(Q, QString(string), u16char);
CHECK(Q, string, u16chararray);
+ CHECK(Q, QString(string), u16chararray);
CHECK(Q, string, u16charstar);
+ CHECK(Q, QString(string), u16charstar);
CHECK(Q, stringview, stringview);
CHECK(Q, stringview, lchar);
CHECK(Q, stringview, qchar);
CHECK(Q, stringview, special);
CHECK(P, stringview, QStringLiteral(LITERAL));
+ CHECK(Q, stringview, QStringLiteral(LITERAL));
CHECK(Q, stringview, u16char);
CHECK(Q, stringview, u16chararray);
CHECK(Q, stringview, u16charstar);
@@ -194,21 +363,34 @@ void runScenario()
// CHECK(Q, u16charstar, u16charstar); // BUILTIN <-> BUILTIN cat't be overloaded
-#undef DO
+#undef CHECK
-#define DO(QorP, a1, a2) \
- QCOMPARE(QByteArray(a1 QorP a2), \
- toQByteArray(a1).append(toQByteArray(a2))) \
- /* end */
+#define CHECK(QorP, a1, a2) \
+ do { \
+ QCOMPARE(QByteArray(a1 QorP a2), toQByteArray(a1).append(toQByteArray(a2))); \
+ QCOMPARE(QByteArray(a2 QorP a1), toQByteArray(a2).append(toQByteArray(a1))); \
+ } while (0)
QByteArray bytearray = stringview.toUtf8();
+ QByteArrayView baview = QByteArrayView(bytearray).mid(0, bytearray.size() - 2);
char *charstar = bytearray.data();
char chararray[3] = { 'H', 'i', '\0' };
const char constchararray[3] = { 'H', 'i', '\0' };
char achar = 'a';
CHECK(P, bytearray, bytearray);
+ CHECK(P, QByteArray(bytearray), bytearray);
+ CHECK(P, QByteArray(bytearray), QByteArray(bytearray));
+ CHECK(P, bytearray, baview);
+ CHECK(P, QByteArray(bytearray), baview);
CHECK(P, bytearray, charstar);
+ CHECK(Q, bytearray, bytearray);
+ CHECK(Q, QByteArray(bytearray), bytearray);
+ CHECK(Q, QByteArray(bytearray), QByteArray(bytearray));
+ CHECK(Q, bytearray, baview);
+ CHECK(Q, QByteArray(bytearray), baview);
+ CHECK(Q, bytearray, charstar);
+
#ifndef Q_CC_MSVC // see QTBUG-65359
CHECK(P, bytearray, chararray);
#else
@@ -216,6 +398,8 @@ void runScenario()
#endif
CHECK(P, bytearray, constchararray);
CHECK(P, bytearray, achar);
+ CHECK(Q, bytearray, constchararray);
+ CHECK(Q, bytearray, achar);
//CHECK(Q, charstar, charstar); // BUILTIN <-> BUILTIN cat't be overloaded
//CHECK(Q, charstar, chararray);
@@ -226,7 +410,6 @@ void runScenario()
//CHECK(Q, achar, achar); // BUILTIN <-> BUILTIN cat't be overloaded
-#undef DO
#undef CHECK
QString r2(QLatin1String(LITERAL LITERAL));
@@ -382,6 +565,13 @@ void runScenario()
QCOMPARE(ba2, QByteArray(withZero + withZero + withZero));
}
+ // null vs. empty
+ checkNullVsEmpty(QStringLiteral(""));
+ checkNullVsEmpty(QByteArrayLiteral(""));
+
+ // auto
+ checkAuto();
+
checkItWorksWithFreeSpaceAtBegin(QByteArray(UTF8_LITERAL), "1234");
if (QTest::currentTestFailed())
return;
diff --git a/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/tst_qstringbuilder1.cpp b/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/tst_qstringbuilder1.cpp
index 1437717201..394372c398 100644
--- a/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/tst_qstringbuilder1.cpp
+++ b/tests/auto/corelib/text/qstringbuilder/qstringbuilder1/tst_qstringbuilder1.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 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 <QtCore/qglobal.h>
@@ -42,7 +17,11 @@
#define LITERAL "some literal"
-void runScenario(); // Defined in stringbuilder.cpp #included below.
+namespace {
+#define P %
+#include "stringbuilder.cpp"
+#undef P
+} // namespace
class tst_QStringBuilder1 : public QObject
{
@@ -52,10 +31,6 @@ private slots:
void scenario() { runScenario(); }
};
-#define P %
-#include "stringbuilder.cpp"
-#undef P
-
#include "tst_qstringbuilder1.moc"
QTEST_APPLESS_MAIN(tst_QStringBuilder1)
diff --git a/tests/auto/corelib/text/qstringbuilder/qstringbuilder2/CMakeLists.txt b/tests/auto/corelib/text/qstringbuilder/qstringbuilder2/CMakeLists.txt
index 274be115d9..8db076581a 100644
--- a/tests/auto/corelib/text/qstringbuilder/qstringbuilder2/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringbuilder/qstringbuilder2/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qstringbuilder2.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringbuilder2 Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringbuilder2 LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstringbuilder2
SOURCES
tst_qstringbuilder2.cpp
diff --git a/tests/auto/corelib/text/qstringbuilder/qstringbuilder2/tst_qstringbuilder2.cpp b/tests/auto/corelib/text/qstringbuilder/qstringbuilder2/tst_qstringbuilder2.cpp
index 8b6350a65d..dc590304f5 100644
--- a/tests/auto/corelib/text/qstringbuilder/qstringbuilder2/tst_qstringbuilder2.cpp
+++ b/tests/auto/corelib/text/qstringbuilder/qstringbuilder2/tst_qstringbuilder2.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 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 <QtCore/qglobal.h>
@@ -43,7 +18,11 @@
#define LITERAL "some literal"
-void runScenario(); // Defined in stringbuilder.cpp #included below.
+namespace {
+#define P +
+#include "../qstringbuilder1/stringbuilder.cpp"
+#undef P
+} // namespace
class tst_QStringBuilder2 : public QObject
{
@@ -53,10 +32,6 @@ private slots:
void scenario() { runScenario(); }
};
-#define P +
-#include "../qstringbuilder1/stringbuilder.cpp"
-#undef P
-
#include "tst_qstringbuilder2.moc"
QTEST_APPLESS_MAIN(tst_QStringBuilder2)
diff --git a/tests/auto/corelib/text/qstringbuilder/qstringbuilder3/CMakeLists.txt b/tests/auto/corelib/text/qstringbuilder/qstringbuilder3/CMakeLists.txt
index a1c4298f99..177b41bf2f 100644
--- a/tests/auto/corelib/text/qstringbuilder/qstringbuilder3/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringbuilder/qstringbuilder3/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qstringbuilder3.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringbuilder3 Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringbuilder3 LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstringbuilder3
SOURCES
tst_qstringbuilder3.cpp
diff --git a/tests/auto/corelib/text/qstringbuilder/qstringbuilder3/tst_qstringbuilder3.cpp b/tests/auto/corelib/text/qstringbuilder/qstringbuilder3/tst_qstringbuilder3.cpp
index 6c5994f7b3..3222b52713 100644
--- a/tests/auto/corelib/text/qstringbuilder/qstringbuilder3/tst_qstringbuilder3.cpp
+++ b/tests/auto/corelib/text/qstringbuilder/qstringbuilder3/tst_qstringbuilder3.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 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 <QtCore/qglobal.h>
@@ -42,7 +17,11 @@
#define LITERAL "some literal"
-void runScenario(); // Defined in stringbuilder.cpp #included below.
+namespace {
+#define P %
+#include "../qstringbuilder1/stringbuilder.cpp"
+#undef P
+} // namespace
class tst_QStringBuilder3 : public QObject
{
@@ -52,10 +31,6 @@ private slots:
void scenario() { runScenario(); }
};
-#define P %
-#include "../qstringbuilder1/stringbuilder.cpp"
-#undef P
-
#include "tst_qstringbuilder3.moc"
QTEST_APPLESS_MAIN(tst_QStringBuilder3)
diff --git a/tests/auto/corelib/text/qstringbuilder/qstringbuilder4/CMakeLists.txt b/tests/auto/corelib/text/qstringbuilder/qstringbuilder4/CMakeLists.txt
index b0dbcbf83a..94883b498a 100644
--- a/tests/auto/corelib/text/qstringbuilder/qstringbuilder4/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringbuilder/qstringbuilder4/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qstringbuilder4.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringbuilder4 Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringbuilder4 LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstringbuilder4
SOURCES
tst_qstringbuilder4.cpp
diff --git a/tests/auto/corelib/text/qstringbuilder/qstringbuilder4/tst_qstringbuilder4.cpp b/tests/auto/corelib/text/qstringbuilder/qstringbuilder4/tst_qstringbuilder4.cpp
index 2aecdcfff6..442c5275d2 100644
--- a/tests/auto/corelib/text/qstringbuilder/qstringbuilder4/tst_qstringbuilder4.cpp
+++ b/tests/auto/corelib/text/qstringbuilder/qstringbuilder4/tst_qstringbuilder4.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 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 <QtCore/qglobal.h>
@@ -43,7 +18,11 @@
#define LITERAL "some literal"
-void runScenario(); // Defined in stringbuilder.cpp #included below.
+namespace {
+#define P +
+#include "../qstringbuilder1/stringbuilder.cpp"
+#undef P
+} // namespace
class tst_QStringBuilder4 : public QObject
{
@@ -53,10 +32,6 @@ private slots:
void scenario() { runScenario(); }
};
-#define P +
-#include "../qstringbuilder1/stringbuilder.cpp"
-#undef P
-
#include "tst_qstringbuilder4.moc"
QTEST_APPLESS_MAIN(tst_QStringBuilder4)
diff --git a/tests/auto/corelib/text/qstringconverter/BLACKLIST b/tests/auto/corelib/text/qstringconverter/BLACKLIST
deleted file mode 100644
index 0bf1982277..0000000000
--- a/tests/auto/corelib/text/qstringconverter/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-# QTBUG-87418
-[convertUtf8]
-android
diff --git a/tests/auto/corelib/text/qstringconverter/CMakeLists.txt b/tests/auto/corelib/text/qstringconverter/CMakeLists.txt
index f64aaaf8d2..22378fe96b 100644
--- a/tests/auto/corelib/text/qstringconverter/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringconverter/CMakeLists.txt
@@ -1,27 +1,28 @@
-# Generated from qstringconverter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringconverter Test:
#####################################################################
-list(APPEND test_data "utf8.txt")
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringconverter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
qt_internal_add_test(tst_qstringconverter
SOURCES
tst_qstringconverter.cpp
TESTDATA ${test_data}
+ LIBRARIES
+ Qt::CorePrivate # for access to Qt's feature system
)
-if(INTEGRITY)
- # Resources:
- set(testdata_resource_files
- "utf8.txt"
- )
- qt_internal_add_resource(tst_qstringconverter "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
- )
-endif()
+qt_internal_add_resource(tst_qstringconverter "compressedtexture_bc1"
+ PREFIX
+ "/"
+ FILES
+ "euc_kr.txt"
+)
diff --git a/tests/auto/corelib/text/qstringconverter/euc_kr.txt b/tests/auto/corelib/text/qstringconverter/euc_kr.txt
new file mode 100644
index 0000000000..a0eb9af691
--- /dev/null
+++ b/tests/auto/corelib/text/qstringconverter/euc_kr.txt
@@ -0,0 +1 @@
+«Ð«¤«È?êȪÎʦ?íþ«³?«ÉªÇª¢ªëEUC Packed FormatªÈ¡¢2«Ð«¤«ÈͳïÒíþªÎEUC Fixed Width Formatª¬ª¢ªë¡£îñíºªÏï×ÜÃÎßüµéÄ¡¢ý­íºªÏ?Ý»?×âéĪǡ¢ìéÚõªËEUCªÈª¤ª¦íÞùêîñíºªòò¦ª¹¡£ª³ª³ªÇªâîñíºªËªÄª¤ªÆú°?ª¹ªë¡£
diff --git a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp
index 23d8fd429c..ed3f91ac94 100644
--- a/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp
+++ b/tests/auto/corelib/text/qstringconverter/tst_qstringconverter.cpp
@@ -1,60 +1,180 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
+#include <QtCore/private/qglobal_p.h>
#include <qstringconverter.h>
+#include <private/qstringconverter_p.h>
#include <qthreadpool.h>
+#include <array>
+#include <numeric>
+
+using namespace Qt::StringLiterals;
+
+QT_BEGIN_NAMESPACE
+namespace QTest {
+template <typename T>
+char *toString(const std::optional<T> &opt)
+{
+ if (opt)
+ return QTest::toString(*opt);
+ else
+ return qstrdup("std::nullopt");
+}
+} // namespace QTest
+QT_END_NAMESPACE
+
+using QTest::toString;
+
+static constexpr bool IsBigEndian = QSysInfo::ByteOrder == QSysInfo::BigEndian;
+enum CodecLimitation {
+ AsciiOnly,
+ Latin1Only,
+ FullUnicode
+};
+
+#ifdef Q_OS_WIN
+# include <qt_windows.h>
+static bool localeIsUtf8()
+{
+ return GetACP() == CP_UTF8;
+}
+#else
+static constexpr bool localeIsUtf8()
+{
+ return true;
+}
+#endif
+
+struct Codec
+{
+ const char name[12];
+ QStringConverter::Encoding code;
+ CodecLimitation limitation = FullUnicode;
+};
+static const std::array codes = {
+ Codec{ "UTF-8", QStringConverter::Utf8 },
+ Codec{ "UTF-16", QStringConverter::Utf16 },
+ Codec{ "UTF-16-le", QStringConverter::Utf16LE },
+ Codec{ "UTF-16-be", QStringConverter::Utf16BE },
+ Codec{ "UTF-32", QStringConverter::Utf32 },
+ Codec{ "UTF-32-le", QStringConverter::Utf32LE },
+ Codec{ "UTF-32-be", QStringConverter::Utf32BE },
+ Codec{ "Latin-1", QStringConverter::Latin1, Latin1Only },
+ Codec{ "System", QStringConverter::System, localeIsUtf8() ? FullUnicode : AsciiOnly }
+};
+
+static const std::array encodedBoms = {
+ QByteArrayView("\xef\xbb\xbf"), // Utf8,
+ QByteArrayView(IsBigEndian ? "\xfe\xff" : "\xff\xfe"), // Utf16,
+ QByteArrayView("\xff\xfe"), // Utf16LE,
+ QByteArrayView("\xfe\xff"), // Utf16BE,
+ QByteArrayView(IsBigEndian ? "\0\0\xfe\xff" : "\xff\xfe\0", 4), // Utf32,
+ QByteArrayView("\xff\xfe\0", 4), // Utf32LE,
+ QByteArrayView("\0\0\xfe\xff", 4), // Utf32BE,
+};
+
+struct TestString
+{
+ const char *description;
+ QUtf8StringView utf8;
+ QStringView utf16;
+ CodecLimitation limitation = FullUnicode;
+};
+static const std::array testStrings = {
+ TestString{ "empty", "", u"", AsciiOnly },
+ TestString{ "null-character", QUtf8StringView("", 1), QStringView(u"", 1), AsciiOnly },
+ TestString{ "ascii-text",
+ "This is a standard US-ASCII message",
+ "This is a standard US-ASCII message" u"",
+ AsciiOnly
+ },
+ TestString{ "ascii-with-carriage-return", "a\rb", u"a\rb", AsciiOnly },
+ TestString{ "ascii-with-control",
+ "\1This\2is\3an\4US-ASCII\020 message interspersed with control chars",
+ "\1This\2is\3an\4US-ASCII\020 message interspersed with control chars" u"",
+ AsciiOnly
+ },
+
+ TestString{ "nbsp", "\u00a0", u"\u00a0", Latin1Only },
+ TestString{ "latin1-text",
+ "Hyvää päivää, käyhän että tuon kannettavani saunaan?",
+ "Hyvää päivää, käyhän että tuon kannettavani saunaan?" u"",
+ Latin1Only
+ },
+
+#define ROW(name, string) TestString{ name, u8"" string, u"" string }
+ ROW("euro", "€"),
+ ROW("character+bom", "b\ufeff"),
+ /* Check that the codec does NOT flag EFBFBF.
+ * This is a regression test; see QTBUG-33229
+ */
+ ROW("last-bmp", "\uffff"),
+ ROW("character+last-bmp", "b\uffff"),
+ ROW("replacement", "\ufffd"),
+ ROW("supplementary-plane", "\U00010203"),
+ ROW("mahjong", "\U0001f000\U0001f001\U0001f002\U0001f003\U0001f004\U0001f005"
+ "\U0001f006\U0001f007\U0001f008\U0001f009\U0001f00a\U0001f00b\U0001f00c"
+ "\U0001f00d\U0001f00e\U0001f00f"),
+ ROW("emojis", "😂, 😃, 🧘ðŸ»â€â™‚ï¸, ðŸŒ, 🌦ï¸, ðŸž, 🚗, 📞, 🎉, â¤ï¸, ðŸ"), // https://en.wikipedia.org/wiki/Emoji
+ ROW("last-valid", "\U0010fffd"), // U+10FFFF is the strict last, but it's a non-character
+ ROW("mixed-bmp-only", "abc\u00a0\u00e1\u00e9\u01fd \u20acdef"),
+ ROW("mixed-full", "abc\u00a0\u00e1\u00e9\u01fd \U0010FFFD \u20acdef"),
+ ROW("xml", "<doc>\U00010000\U0010FFFD</doc>\r\n")
+#undef ROW
+};
+
class tst_QStringConverter : public QObject
{
Q_OBJECT
private slots:
+ void initTestCase();
+
void threadSafety();
void constructByName();
+ void invalidConverter();
+
+ void convertUtf8_data();
void convertUtf8();
+ void convertUtf8CharByChar_data() { convertUtf8_data(); }
+ void convertUtf8CharByChar();
void roundtrip_data();
void roundtrip();
- void nonFlaggedCodepointFFFF() const;
+ void convertL1U8();
+
+ void convertL1U16();
+
+#if QT_CONFIG(icu)
+ void roundtripIcu_data();
+ void roundtripIcu();
+ void icuInvalidCharacter_data();
+ void icuInvalidCharacter();
+ void icuEncodeEdgeCases_data();
+ void icuEncodeEdgeCases();
+ void icuUsableAfterMove();
+ void charByCharConsistency_data();
+ void charByCharConsistency();
+ void byteByByteConsistency_data();
+ void byteByByteConsistency();
+ void statefulPieceWise();
+#endif
+
void flagF7808080() const;
- void nonFlaggedEFBFBF() const;
- void decode0D() const;
void utf8Codec_data();
void utf8Codec();
void utf8bom_data();
void utf8bom();
+ void roundtripBom_data();
+ void roundtripBom();
void utf8stateful_data();
void utf8stateful();
@@ -73,6 +193,20 @@ private slots:
void encodingForHtml_data();
void encodingForHtml();
+
+ void availableCodesAreAvailable();
+
+#ifdef Q_OS_WIN
+ // On all other systems local 8-bit encoding is UTF-8
+ void fromLocal8Bit_data();
+ void fromLocal8Bit();
+ void fromLocal8Bit_special_cases();
+ void fromLocal8Bit_2GiB();
+ void toLocal8Bit_data();
+ void toLocal8Bit();
+ void toLocal8Bit_special_cases();
+ void toLocal8Bit_2GiB();
+#endif
};
void tst_QStringConverter::constructByName()
@@ -100,126 +234,536 @@ void tst_QStringConverter::constructByName()
QVERIFY(!strcmp(decoder.name(), "UTF-16"));
}
-void tst_QStringConverter::convertUtf8()
+void tst_QStringConverter::invalidConverter()
{
- QFile file(QFINDTESTDATA("utf8.txt"));
-
- if (!file.open(QIODevice::ReadOnly))
- QFAIL(qPrintable("File could not be opened: " + file.errorString()));
-
- QByteArray ba = file.readAll();
- QVERIFY(!ba.isEmpty());
-
+ // QStringEncoder tests
{
- QStringDecoder decoder(QStringDecoder::Utf8);
- QVERIFY(decoder.isValid());
- QString uniString = decoder(ba);
- QCOMPARE(uniString, QString::fromUtf8(ba));
- QCOMPARE(ba, uniString.toUtf8());
- uniString = decoder.decode(ba);
- QCOMPARE(uniString, QString::fromUtf8(ba));
- QCOMPARE(ba, uniString.toUtf8());
-
- QStringEncoder encoder(QStringEncoder::Utf8);
- QCOMPARE(ba, encoder(uniString));
- QCOMPARE(ba, encoder.encode(uniString));
+ QStringEncoder encoder;
+ QVERIFY(!encoder.isValid());
+ QVERIFY(!encoder.name());
+ QByteArray encoded = encoder(u"Some text");
+ QVERIFY(encoded.isEmpty());
+ QVERIFY(encoder.hasError());
+
+ encoder.resetState();
+ QVERIFY(!encoder.hasError());
+
+ encoded = encoder.encode(u"More text");
+ QVERIFY(encoded.isEmpty());
+ QVERIFY(encoder.hasError());
+ QCOMPARE(encoder.requiredSpace(42), 0);
+
+ encoder.resetState();
+ QVERIFY(!encoder.hasError());
+ char buffer[100];
+ char *position = encoder.appendToBuffer(buffer, u"Even more");
+ QCOMPARE(position, buffer);
+ QVERIFY(encoder.hasError());
}
+ // QStringDecoder tests
{
- // once again converting char by char
- QStringDecoder decoder(QStringDecoder::Utf8);
- QVERIFY(decoder.isValid());
- QString uniString;
- for (int i = 0; i < ba.size(); ++i)
- uniString += decoder(QByteArrayView(ba).sliced(i, 1));
- QCOMPARE(uniString, QString::fromUtf8(ba));
- uniString.clear();
- for (int i = 0; i < ba.size(); ++i)
- uniString += decoder.decode(QByteArrayView(ba).sliced(i, 1));
- QCOMPARE(uniString, QString::fromUtf8(ba));
-
- QStringEncoder encoder(QStringEncoder::Utf8);
- QByteArray reencoded;
- for (int i = 0; i < uniString.size(); ++i)
- reencoded += encoder(QStringView(uniString).sliced(i, 1));
- QCOMPARE(ba, encoder(uniString));
- reencoded.clear();
- for (int i = 0; i < uniString.size(); ++i)
- reencoded += encoder.encode(QStringView(uniString).sliced(i, 1));
- QCOMPARE(ba, encoder(uniString));
+ QStringDecoder decoder;
+ QVERIFY(!decoder.name());
+ QVERIFY(!decoder.isValid());
+ QString decoded = decoder("Some text");
+ QVERIFY(decoded.isEmpty());
+ QVERIFY(decoder.hasError());
+
+ decoder.resetState();
+ QVERIFY(!decoder.hasError());
+
+ decoded = decoder.decode("More text");
+ QVERIFY(decoded.isEmpty());
+ QVERIFY(decoder.hasError());
+
+ QCOMPARE(decoder.requiredSpace(42), 0);
+
+ decoder.resetState();
+ QVERIFY(!decoder.hasError());
+ char16_t buffer[100];
+ char16_t *position = decoder.appendToBuffer(buffer, "Even more");
+ QCOMPARE(position, buffer);
+ QVERIFY(decoder.hasError());
}
}
+void tst_QStringConverter::convertUtf8_data()
+{
+ QTest::addColumn<QStringConverter::Encoding>("encoding");
+ QTest::addColumn<QUtf8StringView>("utf8");
+ QTest::addColumn<QStringView>("utf16");
+ auto addRow = [](const TestString &s) {
+ QTest::addRow("Utf8:%s", s.description) << QStringDecoder::Utf8 << s.utf8 << s.utf16;
+ if (localeIsUtf8())
+ QTest::addRow("System:%s", s.description) << QStringDecoder::System << s.utf8 << s.utf16;
+ };
+
+ for (const TestString &s : testStrings)
+ addRow(s);
+}
+
+void tst_QStringConverter::convertUtf8()
+{
+ QFETCH(QStringConverter::Encoding, encoding);
+ QFETCH(QUtf8StringView, utf8);
+ QFETCH(QStringView, utf16);
+
+ QByteArray ba = QByteArray::fromRawData(utf8.data(), utf8.size());
+
+ QStringDecoder decoder(encoding);
+ QVERIFY(decoder.isValid());
+ QString uniString = decoder(ba);
+ QCOMPARE(uniString, utf16);
+ QCOMPARE(uniString, QString::fromUtf8(ba));
+ QCOMPARE(ba, uniString.toUtf8());
+
+ // do it again (using .decode())
+ uniString = decoder.decode(ba);
+ QCOMPARE(uniString, utf16);
+ QCOMPARE(uniString, QString::fromUtf8(ba));
+ QCOMPARE(ba, uniString.toUtf8());
+
+ QStringEncoder encoder(encoding);
+ QByteArray reencoded = encoder(utf16);
+ QCOMPARE(reencoded, utf8);
+ QCOMPARE(reencoded, uniString.toUtf8());
+
+ // do it again (using .encode())
+ reencoded = encoder.encode(utf16);
+ QCOMPARE(reencoded, utf8);
+ QCOMPARE(reencoded, uniString.toUtf8());
+
+ if (utf16.isEmpty())
+ return;
+
+ // repeat, with a longer string
+ constexpr qsizetype MinSize = 128;
+ uniString = utf16.toString();
+ while (uniString.size() < MinSize && ba.size() < MinSize) {
+ uniString += uniString;
+ ba += ba;
+ }
+ QCOMPARE(decoder(ba), uniString);
+ QCOMPARE(encoder(uniString), ba);
+}
+
+void tst_QStringConverter::convertUtf8CharByChar()
+{
+ QFETCH(QStringConverter::Encoding, encoding);
+ QFETCH(QUtf8StringView, utf8);
+ QFETCH(QStringView, utf16);
+
+ QByteArray ba = QByteArray::fromRawData(utf8.data(), utf8.size());
+
+ QStringDecoder decoder(encoding);
+ QVERIFY(decoder.isValid());
+ QString uniString;
+ for (int i = 0; i < ba.size(); ++i)
+ uniString += decoder(QByteArrayView(ba).sliced(i, 1));
+ QCOMPARE(uniString, utf16);
+ QCOMPARE(uniString, QString::fromUtf8(ba));
+ uniString.clear();
+
+ // do it again (using .decode())
+ for (int i = 0; i < ba.size(); ++i)
+ uniString += decoder.decode(QByteArrayView(ba).sliced(i, 1));
+ QCOMPARE(uniString, utf16);
+ QCOMPARE(uniString, QString::fromUtf8(ba));
+
+ QStringEncoder encoder(encoding);
+ QByteArray reencoded;
+ for (int i = 0; i < utf16.size(); ++i)
+ reencoded += encoder(utf16.sliced(i, 1));
+ QCOMPARE(reencoded, ba);
+ reencoded.clear();
+
+ // do it again (using .encode())
+ for (int i = 0; i < utf16.size(); ++i)
+ reencoded += encoder.encode(utf16.sliced(i, 1));
+ QCOMPARE(reencoded, ba);
+}
+
+void tst_QStringConverter::convertL1U16()
+{
+ const QLatin1StringView latin1("some plain latin1 text");
+ const QString qstr(latin1);
+
+ QStringDecoder decoder(QStringConverter::Latin1);
+ QVERIFY(decoder.isValid());
+ QString uniString = decoder(latin1);
+ QCOMPARE(uniString, qstr);
+ QCOMPARE(latin1, uniString.toLatin1());
+
+ // do it again (using .decode())
+ uniString = decoder.decode(latin1);
+ QCOMPARE(uniString, qstr);
+ QCOMPARE(latin1, uniString.toLatin1());
+
+ QStringEncoder encoder(QStringConverter::Latin1);
+ QByteArray reencoded = encoder(uniString);
+ QCOMPARE(reencoded, QByteArrayView(latin1));
+ QCOMPARE(reencoded, uniString.toLatin1());
+
+ // do it again (using .encode())
+ reencoded = encoder.encode(uniString);
+ QCOMPARE(reencoded, QByteArrayView(latin1));
+ QCOMPARE(reencoded, uniString.toLatin1());
+}
+
void tst_QStringConverter::roundtrip_data()
{
- QTest::addColumn<QString>("utf16");
+ QTest::addColumn<QStringView>("utf16");
QTest::addColumn<QStringConverter::Encoding>("code");
- const struct {
- QStringConverter::Encoding code;
- const char *name;
- } codes[] = {
- { QStringConverter::Utf8, "UTF-8" },
- { QStringConverter::Utf16, "UTF-16" },
- { QStringConverter::Utf16LE, "UTF-16-le" },
- { QStringConverter::Utf16BE, "UTF-16-be" },
- { QStringConverter::Utf32, "UTF-32" },
- { QStringConverter::Utf32LE, "UTF-32-le" },
- { QStringConverter::Utf32BE, "UTF-32-be" },
- // Latin1, System: not guaranteed to be able to represent arbitrary Unicode.
- };
- // TODO: include flag variations, too.
+ for (const auto &code : codes) {
+ for (const TestString &s : testStrings) {
+ // rules:
+ // 1) don't pass the null character to the System codec
+ // 2) only pass operate on a string that will properly convert
+ if (code.code == QStringConverter::System && s.utf16.contains(QChar(0)))
+ continue;
+ if (code.limitation < s.limitation)
+ continue;
+ QTest::addRow("%s:%s", code.name, s.description) << s.utf16 << code.code;
+ }
- for (const auto code : codes) {
- QTest::addRow("empty-%s", code.name) << u""_qs << code.code;
- {
- const char32_t zeroVal = 0x11136; // Unicode's representation of Chakma zero
- const QChar data[] = {
- QChar::highSurrogate(zeroVal), QChar::lowSurrogate(zeroVal),
- QChar::highSurrogate(zeroVal + 1), QChar::lowSurrogate(zeroVal + 1),
- QChar::highSurrogate(zeroVal + 2), QChar::lowSurrogate(zeroVal + 2),
- QChar::highSurrogate(zeroVal + 3), QChar::lowSurrogate(zeroVal + 3),
- QChar::highSurrogate(zeroVal + 4), QChar::lowSurrogate(zeroVal + 4),
- QChar::highSurrogate(zeroVal + 5), QChar::lowSurrogate(zeroVal + 5),
- QChar::highSurrogate(zeroVal + 6), QChar::lowSurrogate(zeroVal + 6),
- QChar::highSurrogate(zeroVal + 7), QChar::lowSurrogate(zeroVal + 7),
- QChar::highSurrogate(zeroVal + 8), QChar::lowSurrogate(zeroVal + 8),
- QChar::highSurrogate(zeroVal + 9), QChar::lowSurrogate(zeroVal + 9)
- };
- QTest::addRow("Chakma-digits-%s", code.name)
- << QString(data, std::size(data)) << code.code;
+ if (code.limitation == FullUnicode) {
+ using Digits = std::array<QChar, 2>;
+ using DigitsArray = std::array<Digits, 10>;
+ static constexpr DigitsArray chakmaDigits = []() {
+ const char32_t zeroVal = 0x11136; // Unicode's representation of Chakma zero
+ DigitsArray r;
+ for (int i = 0; i < int(r.size()); ++i)
+ r[i] = { QChar::highSurrogate(zeroVal + i), QChar::lowSurrogate(zeroVal + i) };
+ return r;
+ }();
+ for (int i = 0; i < int(chakmaDigits.size()); ++i)
+ QTest::addRow("%s:Chakma-digit-%d", code.name, i) << QStringView(chakmaDigits[i]) << code.code;
}
}
}
void tst_QStringConverter::roundtrip()
{
- QFETCH(QString, utf16);
+ QFETCH(QStringView, utf16);
QFETCH(QStringConverter::Encoding, code);
QStringEncoder out(code);
- const QByteArray encoded = out.encode(utf16);
+ QByteArray encoded = out.encode(utf16);
QStringDecoder back(code);
- const QString decoded = back.decode(encoded);
+ QString decoded = back.decode(encoded);
QCOMPARE(decoded, utf16);
+
+ // test some flags
+ QStringConverter::Flags flag = QStringEncoder::Flag::Stateless;
+ {
+ QStringEncoder out2(code, flag);
+ QStringDecoder back2(code, flag);
+ decoded = back2.decode(out2.encode(utf16));
+ QCOMPARE(decoded, utf16);
+ }
+ flag |= QStringConverter::Flag::ConvertInvalidToNull;
+ {
+ QStringEncoder out2(code, flag);
+ QStringDecoder back2(code, flag);
+ decoded = back2.decode(out2.encode(utf16));
+ QCOMPARE(decoded, utf16);
+ }
+
+ if (utf16.isEmpty())
+ return;
+
+ // repeat, with a longer string
+ constexpr qsizetype MinSize = 128;
+ QString uniString = utf16.toString();
+ while (uniString.size() < MinSize && encoded.size() < MinSize) {
+ uniString += uniString;
+ encoded += encoded;
+ }
+ QCOMPARE(out.encode(uniString), encoded);
+ QCOMPARE(back.decode(encoded), uniString);
+
+ QStringEncoder out2(code, flag);
+ QStringDecoder back2(code, flag);
+ decoded = back2.decode(out2.encode(uniString));
+ QCOMPARE(decoded, uniString);
}
-void tst_QStringConverter::nonFlaggedCodepointFFFF() const
+void tst_QStringConverter::convertL1U8()
{
- //Check that the code point 0xFFFF (=non-character code 0xEFBFBF) is not flagged
- const QChar ch(0xFFFF);
+ {
+ std::array<char, 256> latin1;
+ std::iota(latin1.data(), latin1.data() + latin1.size(), uchar(0));
+ std::array<char, 512> utf8;
+ auto out = QUtf8::convertFromLatin1(utf8.data(), QLatin1StringView{latin1.data(), latin1.size()});
+ QCOMPARE(QString::fromLatin1(latin1.data(), latin1.size()),
+ QString::fromUtf8(utf8.data(), out - utf8.data()));
+ }
+}
+
+#if QT_CONFIG(icu)
+
+void tst_QStringConverter::roundtripIcu_data()
+{
+ QTest::addColumn<QString>("original");
+ QTest::addColumn<QByteArray>("codec");
+
+ QTest::addRow("shift_jis") << u"å¤æ± ã‚„ 蛙飛ã³è¾¼ã‚€ã€€æ°´ã®éŸ³"_s << QByteArray("shift_jis");
+ QTest::addRow("UTF7") << u"Ãœbermäßig: Äçö"_s << QByteArray("UTF-7");
+}
- QStringEncoder encoder(QStringEncoder::Utf8);
+void tst_QStringConverter::roundtripIcu()
+{
+ QFETCH(QString, original);
+ QFETCH(QByteArray, codec);
+ QStringEncoder fromUtf16(codec);
+ if (!fromUtf16.isValid())
+ QSKIP("Unsupported codec");
+ QStringDecoder toUtf16(codec);
+ QByteArray asShiftJIS = fromUtf16(original);
+ QString roundTripped = toUtf16(asShiftJIS);
+ QCOMPARE(roundTripped, original);
+}
+
+void tst_QStringConverter::icuEncodeEdgeCases_data()
+{
+ QTest::addColumn<QString>("source");
+ QTest::addColumn<QByteArray>("expected") ;
+ QTest::addColumn<QByteArray>("codec");
+
+ QTest::addRow("empty") << QString() << QByteArray() << QByteArray("ISO-2022-CN");
+ QTest::addRow("BOMonly") << QString(QChar(QChar::ByteOrderMark)) << QByteArray() << QByteArray("ISO-2022-CN");
+ QTest::addRow("1to6") << u"좋"_s << QByteArray::fromHex("1b2428434141") << QByteArray("ISO-2022-JP-2");
+ QTest::addRow("1to7") << u"æ¼¢"_s << QByteArray::fromHex("1b2429470e6947") << QByteArray("ISO-2022-CN");
+ QTest::addRow("1to8") << u"墎"_s << QByteArray::fromHex("1b242a481b4e4949") << QByteArray("ISO-2022-CN");
+ QTest::addRow("utf7") << u"Übergröße"_s << QByteArray("+ANw-bergr+APYA3w-e") << QByteArray("UTF-7");
+}
+
+void tst_QStringConverter::icuEncodeEdgeCases()
+{
+ QFETCH(QString, source);
+ QFETCH(QByteArray, expected);
+ QFETCH(QByteArray, codec);
+ QStringEncoder encoder(codec);
+ if (!encoder.isValid())
+ QSKIP("Unsupported codec");
QVERIFY(encoder.isValid());
+ QByteArray encoded = encoder.encode(source);
+ QCOMPARE(encoded, expected);
+}
- const QByteArray asDecoded = encoder(QStringView(&ch, 1));
- QCOMPARE(asDecoded, QByteArray("\357\277\277"));
+void tst_QStringConverter::charByCharConsistency_data()
+{
+ QTest::addColumn<QStringView>("source");
+ QTest::addColumn<QByteArray>("codec");
- QByteArray ffff("\357\277\277");
- QStringDecoder decoder(QStringEncoder::Utf8, QStringDecoder::Flag::ConvertInvalidToNull);
- QVERIFY(decoder.isValid());
- QVERIFY(decoder(ffff) == QString(1, ch));
+ auto addRow = [](const TestString &s) {
+ QTest::addRow("%s_shift_jis", s.description) << s.utf16 << QByteArray("shift_jis");
+ QTest::addRow("%s_EUC-CN", s.description) << s.utf16 << QByteArray("EUC-CN");
+ };
+
+ for (const TestString &s : testStrings) {
+ if (s.utf16.isEmpty())
+ continue;
+ addRow(s);
+ }
+}
+
+void tst_QStringConverter::charByCharConsistency()
+{
+ QFETCH(const QStringView, source);
+ QFETCH(const QByteArray, codec);
+
+ const auto check = [&](QStringEncoder encoder){
+ if (!encoder.isValid())
+ QSKIP("Unsupported codec");
+
+ QByteArray fullyConverted = encoder.encode(source);
+ encoder.resetState();
+ QByteArray stepByStepConverted;
+ for (const auto& codeUnit: source) {
+ stepByStepConverted += encoder.encode(codeUnit);
+ }
+ QCOMPARE(stepByStepConverted, fullyConverted);
+ };
+
+ check(QStringEncoder(codec));
+ if (QTest::currentTestResolved()) return;
+
+ check(QStringEncoder(codec, QStringConverter::Flag::ConvertInvalidToNull));
+ if (QTest::currentTestResolved()) return;
+
+ // moved codecs also work:
+
+ {
+ QStringEncoder dec(codec);
+ check(std::move(dec));
+ }
+ if (QTest::currentTestResolved()) return;
+
+ {
+ QStringEncoder dec(codec, QStringConverter::Flag::ConvertInvalidToNull);
+ check(std::move(dec));
+ }
+ if (QTest::currentTestResolved()) return;
+
+}
+
+void tst_QStringConverter::byteByByteConsistency_data()
+{
+ QTest::addColumn<QByteArray>("source");
+ QTest::addColumn<QByteArray>("codec");
+
+ QTest::addRow("plain_ascii_utf7") << QByteArray("Hello, world!") << QByteArray("UTF-7");
+ QFile eucKr(":/euc_kr.txt");
+ if (eucKr.open(QFile::ReadOnly))
+ QTest::addRow("euc_kr_storing_jp") << eucKr.readAll() << QByteArray("EUC-KR");
+ QTest::addRow("incomplete_euc_jp") << QByteArrayLiteral("test\x8Ftest") << QByteArray("EUC-JP");
+}
+
+void tst_QStringConverter::byteByByteConsistency()
+{
+ QFETCH(const QByteArray, source);
+ QFETCH(const QByteArray, codec);
+
+ const auto check = [&](QStringDecoder decoder) {
+ if (!decoder.isValid())
+ QSKIP("Unsupported codec");
+
+ QString fullyConverted = decoder.decode(source);
+ decoder.resetState();
+ QString stepByStepConverted;
+ for (const auto& byte: source) {
+ QByteArray singleChar;
+ singleChar.append(byte);
+ stepByStepConverted += decoder.decode(singleChar);
+ }
+ QCOMPARE(stepByStepConverted, fullyConverted);
+ };
+
+ check(QStringDecoder(codec));
+ if (QTest::currentTestResolved()) return;
+
+ check(QStringDecoder(codec, QStringConverter::Flag::ConvertInvalidToNull));
+ if (QTest::currentTestResolved()) return;
+
+ // moved codecs also work:
+
+ {
+ QStringDecoder dec(codec);
+ check(std::move(dec));
+ }
+ if (QTest::currentTestResolved()) return;
+
+ {
+ QStringDecoder dec(codec, QStringConverter::Flag::ConvertInvalidToNull);
+ check(std::move(dec));
+ }
+ if (QTest::currentTestResolved()) return;
+
+}
+
+void tst_QStringConverter::statefulPieceWise()
+{
+ QStringDecoder decoder("HZ");
+ if (!decoder.isValid())
+ QSKIP("Unsupported codec");
+ QString start = decoder.decode("pure ASCII");
+ QCOMPARE(start, u"pure ASCII");
+ QString shifted = decoder.decode("~{");
+ // shift out changes the state, but won't create any output
+ QCOMPARE(shifted, "");
+ QString continuation = decoder.decode("\x42\x43");
+ QCOMPARE(continuation, "æ—…");
+ decoder.resetState();
+ // after resetting the state we're in N0 again
+ QString afterReset = decoder.decode("\x42\x43");
+ QCOMPARE(afterReset, "BC");
}
+void tst_QStringConverter::icuUsableAfterMove()
+{
+ {
+ QStringDecoder decoder("EUC-JP");
+ QVERIFY(decoder.isValid());
+ QString partial = decoder.decode("Test\x8E");
+ QCOMPARE(partial, u"Test"_s);
+ QStringDecoder moved(std::move(decoder));
+ QString complete = partial + moved.decode("\xA1Test");
+ QCOMPARE(complete, u"Test\uFF61Test"_s);
+ }
+ {
+ QStringEncoder encoder("Big5");
+ QVERIFY(encoder.isValid());
+ QByteArray encoded = encoder.encode("hello"_L1);
+ QCOMPARE(encoded, "hello");
+ QStringEncoder moved(std::move(encoder));
+ encoded = moved.encode("bye");
+ QCOMPARE(encoded, "bye");
+ }
+}
+
+void tst_QStringConverter::icuInvalidCharacter_data()
+{
+ QTest::addColumn<QString>("string");
+ QTest::addColumn<QByteArray>("bytearray");
+ QTest::addColumn<QByteArray>("codec");
+ QTest::addColumn<QStringConverter::Flags>("flags");
+ QTest::addColumn<bool>("shouldDecode");
+
+ using Flags = QStringConverter::Flags;
+ using Flag = QStringConverter::Flag;
+ QTest::addRow("encode")
+ << u"Test👪Test"_s
+ << QByteArrayLiteral("\xE3\x85\xA2\xA3\x3F\xE3\x85\xA2\xA3")
+ << QByteArray("IBM-037") << Flags(Flag::Default)
+ << false;
+ QTest::addRow("encode_null")
+ << u"Test👪Test"_s
+ << QByteArrayLiteral("\xE3\x85\xA2\xA3\0\xE3\x85\xA2\xA3")
+ << QByteArray("IBM-037") << Flags(Flag::ConvertInvalidToNull)
+ << false;
+ QTest::addRow("decode_incomplete_EUC-JP")
+ << u"test"_s
+ << QByteArrayLiteral("test\x8F")
+ << QByteArray("EUC-JP") << Flags(Flag::Stateless)
+ << true;
+ QTest::addRow("decode_invalid_EUC-JP_sequence")
+ << u"test\0test"_s
+ << QByteArrayLiteral("test\x8Ftest")
+ << QByteArray("EUC-JP") << Flags(Flag::ConvertInvalidToNull)
+ << true;
+ QTest::addRow("encode_incomplete_surrogate")
+ << u"test"_s + QChar::highSurrogate(0x11136)
+ << QByteArray("test")
+ << QByteArray("EUC-JP") << Flags(Flag::Stateless)
+ << false;
+}
+
+void tst_QStringConverter::icuInvalidCharacter()
+{
+ QFETCH(QString, string);
+ QFETCH(QByteArray, bytearray);
+ QFETCH(QByteArray, codec);
+ QFETCH(QStringConverter::Flags, flags);
+ QFETCH(bool, shouldDecode);
+ if (shouldDecode) {
+ QStringDecoder decoder(codec.data(), flags);
+ QVERIFY(decoder.isValid());
+ QString decoded = decoder.decode(bytearray);
+ QVERIFY(decoder.hasError());
+ QCOMPARE(decoded, string);
+ } else {
+ QStringEncoder encoder(codec.data(), flags);
+ QVERIFY(encoder.isValid());
+ QByteArray encoded = encoder.encode(string);
+ QVERIFY(encoder.hasError());
+ QCOMPARE(encoded, bytearray);
+ }
+}
+
+#endif
+
void tst_QStringConverter::flagF7808080() const
{
/* This test case stems from test not-wf-sa-170, tests/qxmlstream/XML-Test-Suite/xmlconf/xmltest/not-wf/sa/166.xml,
@@ -250,45 +794,6 @@ void tst_QStringConverter::flagF7808080() const
QCOMPARE(decoder(input), QString(input.size(), QChar(0)));
}
-void tst_QStringConverter::nonFlaggedEFBFBF() const
-{
- /* Check that the codec does NOT flag EFBFBF.
- * This is a regression test; see QTBUG-33229
- */
- QByteArray validInput;
- validInput.resize(3);
- validInput[0] = char(0xEF);
- validInput[1] = char(0xBF);
- validInput[2] = char(0xBF);
-
- {
- QStringDecoder decoder(QStringEncoder::Utf8, QStringDecoder::Flag::ConvertInvalidToNull);
- QVERIFY(decoder.isValid());
- QVERIFY(decoder(validInput) == QString::fromUtf8(QByteArray::fromHex("EFBFBF")));
- }
-
- // Check that 0xEFBFBF is correctly decoded when preceded by an arbitrary character
- {
- QByteArray start("B");
- start.append(validInput);
-
- QStringDecoder decoder(QStringEncoder::Utf8, QStringDecoder::Flag::ConvertInvalidToNull);
- QVERIFY(decoder.isValid());
- QVERIFY(decoder(start) == QString::fromUtf8(QByteArray("B").append(QByteArray::fromHex("EFBFBF"))));
- }
-}
-
-void tst_QStringConverter::decode0D() const
-{
- QByteArray input;
- input.resize(3);
- input[0] = 'A';
- input[1] = '\r';
- input[2] = 'B';
-
- QCOMPARE(QString::fromUtf8(input.constData()).toUtf8(), input);
-}
-
static QString fromInvalidUtf8Sequence(const QByteArray &ba)
{
return QString().fill(QChar::ReplacementCharacter, ba.size());
@@ -1381,6 +1886,51 @@ void tst_QStringConverter::utf8bom()
QCOMPARE(decoder(data), result);
}
+// someone set us up the BOM!
+void tst_QStringConverter::roundtripBom_data()
+{
+ QTest::addColumn<QStringView>("utf16");
+ QTest::addColumn<QStringConverter::Encoding>("code");
+
+ for (const auto &code : codes) {
+ if (size_t(code.code) >= encodedBoms.size())
+ break;
+ if (code.limitation != FullUnicode)
+ continue; // can't represent BOM
+
+ for (const TestString &s : testStrings) {
+ if (s.utf16.isEmpty())
+ continue;
+ QTest::addRow("%s:%s", code.name, s.description) << s.utf16 << code.code;
+ }
+ }
+}
+
+void tst_QStringConverter::roundtripBom()
+{
+ QFETCH(QStringView, utf16);
+ QFETCH(QStringConverter::Encoding, code);
+ QByteArray encodedBom = encodedBoms[code].toByteArray();
+ QChar bom = QChar::ByteOrderMark;
+
+ // QStringConverter defaults to producing no BOM, but interpreting it if it
+ // is there
+
+ QStringEncoder encoderWithoutBom(code);
+ QStringEncoder encoderWithBom(code, QStringEncoder::Flag::WriteBom);
+ QByteArray encodedWithoutBom = encoderWithoutBom(utf16);
+ QByteArray encodedWithBom = encoderWithBom(utf16);
+ QCOMPARE(encodedWithBom, encodedBom + encodedWithoutBom);
+
+ QStringDecoder decoderWithoutBom(code, QStringDecoder::Flag::ConvertInitialBom);
+ QStringDecoder decoderWithBom(code);
+ QString decoded = decoderWithBom(encodedWithBom);
+ QCOMPARE(decoded, utf16);
+
+ decoded = decoderWithoutBom(encodedWithBom);
+ QCOMPARE(decoded, bom + utf16.toString());
+}
+
void tst_QStringConverter::utf8stateful_data()
{
QTest::addColumn<QByteArray>("buffer1");
@@ -1651,7 +2201,7 @@ void tst_QStringConverter::utfHeaders()
QVERIFY(decode.isValid());
QString result = decode(encoded);
- QCOMPARE(result.length(), unicode.length());
+ QCOMPARE(result.size(), unicode.size());
QCOMPARE(result, unicode);
}
@@ -1662,7 +2212,7 @@ void tst_QStringConverter::utfHeaders()
QString result;
for (char c : encoded)
result += decode(QByteArrayView(&c, 1));
- QCOMPARE(result.length(), unicode.length());
+ QCOMPARE(result.size(), unicode.size());
QCOMPARE(result, unicode);
}
@@ -1690,25 +2240,42 @@ void tst_QStringConverter::encodingForName_data()
QTest::addColumn<QByteArray>("name");
QTest::addColumn<std::optional<QStringConverter::Encoding>>("encoding");
- QTest::newRow("UTF-8") << QByteArray("UTF-8") << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
- QTest::newRow("utf8") << QByteArray("utf8") << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
- QTest::newRow("Utf-8") << QByteArray("Utf-8") << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
- QTest::newRow("UTF-16") << QByteArray("UTF-16") << std::optional<QStringConverter::Encoding>(QStringConverter::Utf16);
- QTest::newRow("UTF-16le") << QByteArray("UTF-16le") << std::optional<QStringConverter::Encoding>(QStringConverter::Utf16LE);
- QTest::newRow("ISO-8859-1") << QByteArray("ISO-8859-1") << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1);
- QTest::newRow("ISO8859-1") << QByteArray("ISO8859-1") << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1);
- QTest::newRow("iso8859-1") << QByteArray("iso8859-1") << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1);
- QTest::newRow("latin1") << QByteArray("latin1") << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1);
- QTest::newRow("latin2") << QByteArray("latin2") << std::optional<QStringConverter::Encoding>();
- QTest::newRow("latin15") << QByteArray("latin15") << std::optional<QStringConverter::Encoding>();
+ auto row = [](const char *name, std::optional<QStringConverter::Encoding> expected = std::nullopt) {
+ auto protect = [](auto p) { return p ? *p ? p : "<empty>" : "<nullptr>"; };
+ QTest::addRow("%s", protect(name)) << QByteArray(name) << expected;
+ };
+
+ row("UTF-8", QStringConverter::Utf8);
+ row("utf8", QStringConverter::Utf8);
+ row("Utf-8", QStringConverter::Utf8);
+ row("UTF-16", QStringConverter::Utf16);
+ row("UTF-16le", QStringConverter::Utf16LE);
+ row("ISO-8859-1", QStringConverter::Latin1);
+ row("ISO8859-1", QStringConverter::Latin1);
+ row("iso8859-1", QStringConverter::Latin1);
+ row("latin1", QStringConverter::Latin1);
+ row("latin-1_-", QStringConverter::Latin1);
+ row("latin_1-_", QStringConverter::Latin1);
+ row("-_latin-1", QStringConverter::Latin1);
+ row("_-latin_1", QStringConverter::Latin1);
+
+ // failures:
+ row(nullptr);
+ row("");
+ row("latin2");
+ row("latin42");
+ row(" latin1"); // spaces are significant
+ row("\tlatin1"); // HTs are significant
}
void tst_QStringConverter::encodingForName()
{
- QFETCH(QByteArray, name);
- QFETCH(std::optional<QStringConverter::Encoding>, encoding);
+ QFETCH(const QByteArray, name);
+ QFETCH(const std::optional<QStringConverter::Encoding>, encoding);
+
+ const auto *ptr = name.isNull() ? nullptr : name.data();
- auto e = QStringConverter::encodingForName(name);
+ const auto e = QStringConverter::encodingForName(ptr);
QCOMPARE(e, encoding);
}
@@ -1792,65 +2359,102 @@ void tst_QStringConverter::encodingForHtml_data()
{
QTest::addColumn<QByteArray>("html");
QTest::addColumn<std::optional<QStringConverter::Encoding>>("encoding");
+ QTest::addColumn<QByteArray>("name"); // ICU name if we have ICU support
QByteArray html = "<html><head></head><body>blah</body></html>";
- QTest::newRow("no charset") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("no charset") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-15\" /></head></html>";
- QTest::newRow("latin 15") << html << std::optional<QStringConverter::Encoding>();
+ QTest::newRow("latin 15") << html << std::optional<QStringConverter::Encoding>() << QByteArray("ISO-8859-15");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=SJIS\" /></head></html>";
+ QTest::newRow("sjis") << html << std::optional<QStringConverter::Encoding>() << QByteArray("Shift_JIS");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-2022-JP\" /></head></html>";
+ QTest::newRow("ISO-2022-JP") << html << std::optional<QStringConverter::Encoding>() << QByteArray("ISO-2022-JP");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-2022\" /></head></html>";
+ QTest::newRow("ISO-2022") << html << std::optional<QStringConverter::Encoding>() << QByteArray("ISO-2022-JP");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=GB2312\" /></head></html>";
+ QTest::newRow("GB2312") << html << std::optional<QStringConverter::Encoding>() << QByteArray("GB2312");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=Big5\" /></head></html>";
+ QTest::newRow("Big5") << html << std::optional<QStringConverter::Encoding>() << QByteArray("Big5");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=GB18030\" /></head></html>";
+ QTest::newRow("GB18030") << html << std::optional<QStringConverter::Encoding>() << QByteArray("GB18030");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=GB2312-HKSCS\" /></head></html>";
+ QTest::newRow("GB2312-HKSCS") << html << std::optional<QStringConverter::Encoding>() << QByteArray("GB2312-HKSCS");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=Big5-HKSCS\" /></head></html>";
+ QTest::newRow("Big5-HKSCS") << html << std::optional<QStringConverter::Encoding>() << QByteArray("Big5-HKSCS");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=EucJP\" /></head></html>";
+ QTest::newRow("EucJP") << html << std::optional<QStringConverter::Encoding>() << QByteArray("EUC-JP");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=EucKR\" /></head></html>";
+ QTest::newRow("EucKR") << html << std::optional<QStringConverter::Encoding>() << QByteArray("EUC-KR");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=KOI8-R\" /></head></html>";
+ QTest::newRow("KOI8-R") << html << std::optional<QStringConverter::Encoding>() << QByteArray("KOI8-R");
+
+ html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=KOI8-U\" /></head></html>";
+ QTest::newRow("KOI8-U") << html << std::optional<QStringConverter::Encoding>() << QByteArray("KOI8-U");
html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=ISO-8859-1\" /></head></html>";
- QTest::newRow("latin 1") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1);
+ QTest::newRow("latin 1") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1) << QByteArray("ISO-8859-1");
html = "<!DOCTYPE html><html><head><meta charset=\"ISO_8859-1:1987\"><meta http-equiv=\"X-UA-Compatible\" content=\"IE=9,chrome=1\"><title>Test</title></head>";
- QTest::newRow("latin 1 (#2)") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1);
+ QTest::newRow("latin 1 (#2)") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Latin1) << QByteArray("ISO-8859-1");
html = "<!DOCTYPE html><html><head><meta charset=\"utf-8\"><meta http-equiv=\"X-UA-Compatible\" content=\"IE=9,chrome=1\"><title>Test</title></head>";
- QTest::newRow("UTF-8") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("UTF-8") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
html = "<!DOCTYPE html><html><head><meta http-equiv=\"X-UA-Compatible\" content=\"IE=9,chrome=1\"><meta charset=\"utf-8\"><title>Test</title></head>";
- QTest::newRow("UTF-8 (#2)") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("UTF-8 (#2)") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8/></head></html>";
- QTest::newRow("UTF-8, no quotes") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("UTF-8, no quotes") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset='UTF-8'/></head></html>";
- QTest::newRow("UTF-8, single quotes") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("UTF-8, single quotes") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
html = "<!DOCTYPE html><html><head><meta charset=utf-8><title>Test</title></head>";
- QTest::newRow("UTF-8, > terminator") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("UTF-8, > terminator") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
html = "<!DOCTYPE html><html><head><meta charset= utf-8 ><title>Test</title></head>";
- QTest::newRow("UTF-8, > terminator with spaces") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("UTF-8, > terminator with spaces") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
// Test invalid charsets.
html = "<!DOCTYPE html><html><head><meta charset= utf/8 ><title>Test</title></head>";
- QTest::newRow("utf/8") << html << std::optional<QStringConverter::Encoding>();
+ QTest::newRow("utf/8") << html << std::optional<QStringConverter::Encoding>() << QByteArray();
html = "<html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=invalid-foo\" /></head></html>";
- QTest::newRow("invalid charset, no default") << html << std::optional<QStringConverter::Encoding>();
+ QTest::newRow("invalid charset, no default") << html << std::optional<QStringConverter::Encoding>() << QByteArray("UTF-8");
html = "<!DOCTYPE html><html><head><meta http-equiv=\"X-UA-Compatible\" content=\"IE=9,chrome=1\"><meta charset=\"";
html.prepend(QByteArray().fill(' ', 512 - html.size()));
- QTest::newRow("invalid charset (large header)") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("invalid charset (large header)") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
html = "<!DOCTYPE html><html><head><meta http-equiv=\"X-UA-Compatible\" content=\"IE=9,chrome=1\"><meta charset=\"utf-8";
- QTest::newRow("invalid charset (no closing double quote)") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("invalid charset (no closing double quote)") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
html = "<!DOCTYPE html><html><head><meta http-equiv=\"X-UA-Compatible\" content=\"IE=9,chrome=1\"><meta charset='utf-8";
- QTest::newRow("invalid charset (no closing single quote)") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("invalid charset (no closing single quote)") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
html = "<!DOCTYPE html><html><head><meta charset=utf-8 foo=bar><title>Test</title></head>";
- QTest::newRow("invalid (space terminator)") << html << std::optional<QStringConverter::Encoding>();
+ QTest::newRow("invalid (space terminator)") << html << std::optional<QStringConverter::Encoding>() << QByteArray();
html = "<!DOCTYPE html><html><head><meta charset=\" utf' 8 /><title>Test</title></head>";
- QTest::newRow("invalid charset, early terminator (')") << html << std::optional<QStringConverter::Encoding>();
+ QTest::newRow("invalid charset, early terminator (')") << html << std::optional<QStringConverter::Encoding>() << QByteArray();
const char src[] = { char(0xff), char(0xfe), char(0x7a), char(0x03), 0, 0 };
html = src;
- QTest::newRow("greek text UTF-16LE") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf16LE);
+ QTest::newRow("greek text UTF-16LE") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf16LE) << QByteArray("UTF-16LE");
html = "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"><span style=\"color: rgb(0, 0, 0); font-family: "
@@ -1858,19 +2462,33 @@ void tst_QStringConverter::encodingForHtml_data()
"line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: "
"auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: "
"none;\">&#x37b</span>\000";
- QTest::newRow("greek text UTF-8") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("greek text UTF-8") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
html = "<!DOCTYPE html><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=unicode\">"
"<head/><body><p>bla</p></body></html>"; // QTBUG-41998, ICU will return UTF-16.
- QTest::newRow("legacy unicode UTF-8") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8);
+ QTest::newRow("legacy unicode UTF-8") << html << std::optional<QStringConverter::Encoding>(QStringConverter::Utf8) << QByteArray("UTF-8");
}
void tst_QStringConverter::encodingForHtml()
{
QFETCH(QByteArray, html);
QFETCH(std::optional<QStringConverter::Encoding>, encoding);
+ QFETCH(QByteArray, name);
QCOMPARE(QStringConverter::encodingForHtml(html), encoding);
+
+ QStringDecoder decoder = QStringDecoder::decoderForHtml(html);
+ if (encoding || // we should have a valid decoder independent of ICU support
+ decoder.isValid()) { // we got a valid decoder through ICU
+ QCOMPARE(decoder.name(), name);
+ }
+}
+
+void tst_QStringConverter::availableCodesAreAvailable()
+{
+ auto codecs = QStringConverter::availableCodecs();
+ for (const auto &codecName: codecs)
+ QVERIFY(QStringEncoder(codecName.toLatin1()).isValid());
}
class LoadAndConvert: public QRunnable
@@ -1893,8 +2511,20 @@ public:
}
};
+void tst_QStringConverter::initTestCase()
+{
+ if (localeIsUtf8())
+ qInfo("System locale is UTF-8");
+ else
+ qInfo("System locale is not UTF-8");
+}
+
void tst_QStringConverter::threadSafety()
{
+#if defined(Q_OS_WASM)
+ QSKIP("This test misbehaves on WASM. Investigation needed (QTBUG-110067)");
+#endif
+
QThreadPool::globalInstance()->setMaxThreadCount(12);
QList<QString> res;
@@ -1910,6 +2540,292 @@ void tst_QStringConverter::threadSafety()
QCOMPARE(b, QString::fromLatin1("abcdefghijklmonpqrstufvxyz"));
}
+#ifdef Q_OS_WIN
+void tst_QStringConverter::fromLocal8Bit_data()
+{
+ QTest::addColumn<QByteArray>("eightBit");
+ QTest::addColumn<QString>("utf16");
+ QTest::addColumn<quint32>("codePage");
+
+ constexpr uint WINDOWS_1252 = 1252u;
+ QTest::newRow("windows-1252") << "Hello, world!"_ba << u"Hello, world!"_s << WINDOWS_1252;
+ constexpr uint SHIFT_JIS = 932u;
+ // Mostly two byte characters, but the comma is a single byte character (0xa4)
+ QTest::newRow("shiftJIS")
+ << "\x82\xb1\x82\xf1\x82\xc9\x82\xbf\x82\xcd\xa4\x90\xa2\x8a\x45\x81\x49"_ba
+ << u"ã“ã‚“ã«ã¡ã¯ï½¤ä¸–ç•Œï¼"_s << SHIFT_JIS;
+
+ constexpr uint GB_18030 = 54936u;
+ QTest::newRow("GB-18030") << "\xc4\xe3\xba\xc3\xca\xc0\xbd\xe7\xa3\xa1"_ba << u"你好世界ï¼"_s
+ << GB_18030;
+}
+
+void tst_QStringConverter::fromLocal8Bit()
+{
+ QFETCH(const QByteArray, eightBit);
+ QFETCH(const QString, utf16);
+ QFETCH(const quint32, codePage);
+
+ QStringConverter::State state;
+
+ QString result = QLocal8Bit::convertToUnicode_sys(eightBit, codePage, &state);
+ QCOMPARE(result, utf16);
+ QCOMPARE(state.remainingChars, 0);
+
+ result.clear();
+ state.clear();
+ for (char c : eightBit)
+ result += QLocal8Bit::convertToUnicode_sys({&c, 1}, codePage, &state);
+ QCOMPARE(result, utf16);
+ QCOMPARE(state.remainingChars, 0);
+
+ result.clear();
+ state.clear();
+ // Decode the full string again, this time without state
+ state.flags |= QStringConverter::Flag::Stateless;
+ result = QLocal8Bit::convertToUnicode_sys(eightBit, codePage, &state);
+ QCOMPARE(result, utf16);
+ QCOMPARE(state.remainingChars, 0);
+}
+
+void tst_QStringConverter::fromLocal8Bit_special_cases()
+{
+ QStringConverter::State state;
+ constexpr uint SHIFT_JIS = 932u;
+ // Decode a 2-octet character, but only provide 1 octet at first:
+ QString result = QLocal8Bit::convertToUnicode_sys("\x82", SHIFT_JIS, &state);
+ QCOMPARE(result, QString());
+ QVERIFY(result.isNull());
+ QCOMPARE_GT(state.remainingChars, 0);
+ // Then provide the second octet:
+ result = QLocal8Bit::convertToUnicode_sys("\xb1", SHIFT_JIS, &state);
+ QCOMPARE(result, u"ã“");
+ QCOMPARE(state.remainingChars, 0);
+
+ // And without state:
+ result.clear();
+ QStringConverter::State statelessState;
+ statelessState.flags |= QStringConverter::Flag::Stateless;
+ result = QLocal8Bit::convertToUnicode_sys("\x82", SHIFT_JIS, &statelessState);
+ result += QLocal8Bit::convertToUnicode_sys("\xb1", SHIFT_JIS, &statelessState);
+ // 0xb1 is a valid single-octet character in Shift-JIS, so the output
+ // isn't really what you would expect:
+ QCOMPARE(result, QString(QChar::ReplacementCharacter) + u'ï½±');
+ QCOMPARE(statelessState.remainingChars, 0);
+
+ // Now try a 3-octet UTF-8 sequence:
+ result.clear();
+ state.clear();
+ constexpr uint UTF8 = 65001u;
+ // First the first 2 octets:
+ result = QLocal8Bit::convertToUnicode_sys("\xe4\xbd", UTF8, &state);
+ QCOMPARE(result, QString());
+ QVERIFY(result.isNull());
+ QCOMPARE_GT(state.remainingChars, 0);
+ // Then provide the remaining octet:
+ result = QLocal8Bit::convertToUnicode_sys("\xa0", UTF8, &state);
+ QCOMPARE(result, u"ä½ ");
+ QCOMPARE(state.remainingChars, 0);
+
+ // Now the same, but there is an incomplete sequence at the start
+ result.clear();
+ state.clear();
+ result = QLocal8Bit::convertToUnicode_sys("\xe4\xe4\xbd", UTF8, &state);
+ QCOMPARE(result, QString());
+ QVERIFY(result.isNull());
+ // Remaining octet (and a '.' to force it to discard something from the
+ // internal state which is currently limited to 4 octets):
+ result += QLocal8Bit::convertToUnicode_sys("\xa0.", UTF8, &state);
+ QCOMPARE(result, QChar::ReplacementCharacter + u"ä½ ."_s);
+ QCOMPARE(state.remainingChars, 0);
+
+ // Test QTBUG-118834, which is failing
+ result.clear();
+ state.clear();
+ result = QLocal8Bit::convertToUnicode_sys("\xe4\xe4\xbd", UTF8, &state);
+ QCOMPARE(result, QString());
+ QVERIFY(result.isNull());
+ // Remaining octet:
+ result += QLocal8Bit::convertToUnicode_sys("\xa0", UTF8, &state);
+ QEXPECT_FAIL("", "QTBUG-118834: We don't output anything because it's "
+ "within the size of our internal state, and we cannot "
+ "signal that it needs to be drained.", Continue);
+ QCOMPARE(result, QChar::ReplacementCharacter + u"ä½ "_s);
+ QEXPECT_FAIL("", "QTBUG-118834: As above", Continue);
+ QCOMPARE(state.remainingChars, 0);
+
+ // Now try a 4-octet GB 18030 sequence:
+ result.clear();
+ state.clear();
+ constexpr uint GB_18030 = 54936u;
+ const char sequence[] = "\x95\x32\x90\x31";
+ // Repeat the sequence multiple times to test handling of exhaustion of
+ // internal buffer
+ QByteArray repeated = QByteArray(sequence).repeated(2049);
+ QByteArrayView octets = QByteArrayView(repeated);
+ result = QLocal8Bit::convertToUnicode_sys(octets.first(2), GB_18030, &state);
+ QCOMPARE(result, QString());
+ QVERIFY(result.isNull());
+ QCOMPARE_GT(state.remainingChars, 0);
+ // Then provide one more octet:
+ result = QLocal8Bit::convertToUnicode_sys(octets.sliced(2, 1), GB_18030, &state);
+ QCOMPARE(result, QString());
+ QVERIFY(result.isNull());
+ QCOMPARE_GT(state.remainingChars, 0);
+ // Then provide the last octet + the rest of the string
+ result = QLocal8Bit::convertToUnicode_sys(octets.sliced(3), GB_18030, &state);
+ QCOMPARE(result.first(2), u"𠂇");
+ QCOMPARE(state.remainingChars, 0);
+}
+
+void tst_QStringConverter::fromLocal8Bit_2GiB()
+{
+#if QT_POINTER_SIZE == 4
+ QSKIP("This test is only relevant for 64-bit builds");
+#else
+ qsizetype size = qsizetype(std::numeric_limits<int>::max()) + 3;
+ QByteArray input;
+ QT_TRY {
+ input.reserve(size);
+ } QT_CATCH (const std::bad_alloc &) {
+ QSKIP("Out of memory");
+ }
+ // fill with '、' - a single octet character in Shift-JIS
+ input.fill('\xa4', std::numeric_limits<int>::max() - 1);
+ // then append 'ã“' - a two octet character in Shift-JIS
+ // which is now straddling the 2 GiB boundary
+ input += "\x82\xb1";
+ // then append another two '、', so that our output is also crossing the
+ // 2 GiB boundary
+ input += "\xa4\xa4";
+ QCOMPARE(input.size(), input.capacity());
+ constexpr uint SHIFT_JIS = 932u;
+ QStringConverter::State state;
+ QString result;
+ QT_TRY {
+ result = QLocal8Bit::convertToUnicode_sys(input, SHIFT_JIS, &state);
+ } QT_CATCH (const std::bad_alloc &) {
+ QSKIP("Out of memory");
+ }
+ QCOMPARE(result.size(), size - 1); // The 2-octet character is only 1 code unit in UTF-16
+ QCOMPARE(result.last(4), u"、ã“、、"); // Check we correctly decoded it
+ QCOMPARE(state.remainingChars, 0); // and there is nothing left in the state
+#endif
+}
+
+void tst_QStringConverter::toLocal8Bit_data()
+{
+ fromLocal8Bit_data();
+}
+
+void tst_QStringConverter::toLocal8Bit()
+{
+ QFETCH(const QByteArray, eightBit);
+ QFETCH(const QString, utf16);
+ QFETCH(const quint32, codePage);
+
+ QStringConverter::State state;
+
+ QByteArray result = QLocal8Bit::convertFromUnicode_sys(utf16, codePage, &state);
+ QCOMPARE(result, eightBit);
+ QCOMPARE(state.remainingChars, 0);
+
+ result.clear();
+ state.clear();
+ for (QChar c : utf16)
+ result += QLocal8Bit::convertFromUnicode_sys(QStringView(&c, 1), codePage, &state);
+ QCOMPARE(result, eightBit);
+ QCOMPARE(state.remainingChars, 0);
+
+ result.clear();
+ state.clear();
+ // Decode the full string again, this time without state
+ state.flags |= QStringConverter::Flag::Stateless;
+ result = QLocal8Bit::convertFromUnicode_sys(utf16, codePage, &state);
+ QCOMPARE(result, eightBit);
+ QCOMPARE(state.remainingChars, 0);
+}
+
+void tst_QStringConverter::toLocal8Bit_special_cases()
+{
+ QStringConverter::State state;
+ // Normally utf8 goes through a different code path, but we can force it here
+ constexpr uint UTF8 = 65001u;
+ // Decode a 2-code unit character, but only provide 1 code unit at first:
+ const char16_t a[] = u"𬽦";
+ QStringView codeUnits = a;
+ QByteArray result = QLocal8Bit::convertFromUnicode_sys(codeUnits.first(1), UTF8, &state);
+ QCOMPARE(result, QString());
+ QVERIFY(result.isNull());
+ QCOMPARE_GT(state.remainingChars, 0);
+ // Then provide the second code unit:
+ result = QLocal8Bit::convertFromUnicode_sys(codeUnits.sliced(1), UTF8, &state);
+ QCOMPARE(result, "\xf0\xac\xbd\xa6"_ba);
+ QCOMPARE(state.remainingChars, 0);
+
+ // Retain compat with the behavior for toLocal8Bit:
+ QCOMPARE(codeUnits.first(1).toLocal8Bit(), "?");
+
+ // QString::toLocal8Bit is already stateless, but test stateless handling
+ // explicitly anyway:
+ result.clear();
+ QStringConverter::State statelessState;
+ statelessState.flags |= QStringConverter::Flag::Stateless;
+ result = QLocal8Bit::convertFromUnicode_sys(codeUnits.first(1), UTF8, &statelessState);
+ result += QLocal8Bit::convertFromUnicode_sys(codeUnits.sliced(1), UTF8, &statelessState);
+ // Windows uses the replacement character for invalid characters:
+ QCOMPARE(result, "\ufffd\ufffd");
+
+ // Now do the same, but the second time we feed in a character, we also
+ // provide many more so the internal stack buffer is not large enough.
+ result.clear();
+ state.clear();
+ QString str = QStringView(a).toString().repeated(2048);
+ codeUnits = str;
+ result = QLocal8Bit::convertFromUnicode_sys(codeUnits.first(1), UTF8, &state);
+ QCOMPARE(result, QString());
+ QVERIFY(result.isNull());
+ QCOMPARE_GT(state.remainingChars, 0);
+ // Then we provide the rest of the string:
+ result = QLocal8Bit::convertFromUnicode_sys(codeUnits.sliced(1), UTF8, &state);
+ QCOMPARE(result.first(4), "\xf0\xac\xbd\xa6"_ba);
+ QCOMPARE(state.remainingChars, 0);
+}
+
+void tst_QStringConverter::toLocal8Bit_2GiB()
+{
+#if QT_POINTER_SIZE == 4
+ QSKIP("This test is only relevant for 64-bit builds");
+#else
+ constexpr qsizetype TwoGiB = qsizetype(std::numeric_limits<int>::max());
+ QString input;
+ QT_TRY {
+ input.reserve(TwoGiB + 1);
+ } QT_CATCH (const std::bad_alloc &) {
+ QSKIP("Out of memory");
+ }
+ // Fill with a single code unit character
+ input.fill(u'.', TwoGiB - 1);
+ // Then append a 2 code unit character, so that the input straddles the 2 GiB
+ // boundary
+ input += u"🙂";
+ QCOMPARE(input.size(), input.capacity());
+ constexpr uint UTF8 = 65001u;
+ QStringConverter::State state;
+ QByteArray result;
+ QT_TRY {
+ result = QLocal8Bit::convertFromUnicode_sys(input, UTF8, &state);
+ } QT_CATCH (const std::bad_alloc &) {
+ QSKIP("Out of memory");
+ }
+ QUtf8StringView rView = result;
+ QCOMPARE(rView.size(), TwoGiB + 3); // The 2 code unit smiley is 4 code units in UTF-8
+ QCOMPARE(rView.last(7), u8"...🙂"); // Check we correctly decoded it
+ QCOMPARE(state.remainingChars, 0); // and there is nothing left in the state
+#endif
+}
+#endif // Q_OS_WIN
+
struct DontCrashAtExit {
~DontCrashAtExit() {
QStringDecoder decoder(QStringDecoder::Utf8);
diff --git a/tests/auto/corelib/text/qstringconverter/utf8.txt b/tests/auto/corelib/text/qstringconverter/utf8.txt
deleted file mode 100644
index f5ab44c8f4..0000000000
--- a/tests/auto/corelib/text/qstringconverter/utf8.txt
+++ /dev/null
@@ -1 +0,0 @@
-<doc>ð€€ô¿½</doc>
diff --git a/tests/auto/corelib/text/qstringiterator/CMakeLists.txt b/tests/auto/corelib/text/qstringiterator/CMakeLists.txt
index 36b62a248b..7927fd9e8d 100644
--- a/tests/auto/corelib/text/qstringiterator/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringiterator/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qstringiterator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringiterator Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringiterator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstringiterator
SOURCES
tst_qstringiterator.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/text/qstringiterator/tst_qstringiterator.cpp b/tests/auto/corelib/text/qstringiterator/tst_qstringiterator.cpp
index e9c36ec365..22bff24eec 100644
--- a/tests/auto/corelib/text/qstringiterator/tst_qstringiterator.cpp
+++ b/tests/auto/corelib/text/qstringiterator/tst_qstringiterator.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
-** 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) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/QString>
diff --git a/tests/auto/corelib/text/qstringlist/CMakeLists.txt b/tests/auto/corelib/text/qstringlist/CMakeLists.txt
index e9272aa0b6..d8f8a740c3 100644
--- a/tests/auto/corelib/text/qstringlist/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringlist/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qstringlist.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringlist Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringlist LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstringlist
SOURCES
tst_qstringlist.cpp
diff --git a/tests/auto/corelib/text/qstringlist/tst_qstringlist.cpp b/tests/auto/corelib/text/qstringlist/tst_qstringlist.cpp
index 844a228e62..6ac8236d57 100644
--- a/tests/auto/corelib/text/qstringlist/tst_qstringlist.cpp
+++ b/tests/auto/corelib/text/qstringlist/tst_qstringlist.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qlist.h>
@@ -36,6 +11,8 @@
#include <algorithm>
+using namespace Qt::StringLiterals;
+
class tst_QStringList : public QObject
{
Q_OBJECT
@@ -46,6 +23,7 @@ private slots:
void replaceInStrings();
void removeDuplicates();
void removeDuplicates_data();
+ void contains_data();
void contains();
void indexOf_data();
void indexOf();
@@ -100,26 +78,33 @@ void tst_QStringList::constructors()
void tst_QStringList::indexOf_data()
{
+ QTest::addColumn<QStringList>("list");
QTest::addColumn<QString>("search");
QTest::addColumn<int>("from");
QTest::addColumn<int>("expectedResult");
- QTest::newRow("harald") << "harald" << 0 << 0;
- QTest::newRow("trond") << "trond" << 0 << 1;
- QTest::newRow("vohi") << "vohi" << 0 << 2;
- QTest::newRow("harald-1") << "harald" << 1 << 3;
+ QStringList searchIn{"harald", "trond", "vohi", "harald"};
+ QTest::newRow("harald") << searchIn << "harald" << 0 << 0;
+ QTest::newRow("trond") << searchIn << "trond" << 0 << 1;
+ QTest::newRow("vohi") << searchIn << "vohi" << 0 << 2;
+ QTest::newRow("harald-1") << searchIn << "harald" << 1 << 3;
+
+ QTest::newRow("hans") << searchIn << "hans" << 0 << -1;
+ QTest::newRow("trond-1") << searchIn << "trond" << 2 << -1;
+ QTest::newRow("harald-2") << searchIn << "harald" << -1 << 3;
+ QTest::newRow("vohi-1") << searchIn << "vohi" << -3 << 2;
+
+ QTest::newRow("from-bigger-than-size") << searchIn << "harald" << 100 << -1;
- QTest::newRow("hans") << "hans" << 0 << -1;
- QTest::newRow("trond-1") << "trond" << 2 << -1;
- QTest::newRow("harald-2") << "harald" << -1 << 3;
- QTest::newRow("vohi-1") << "vohi" << -3 << 2;
+ searchIn = {"lost+found", "foo.bar"};
+ QTest::newRow("string-with-regex-meta-char1") << searchIn << "lost+found" << 0 << 0;
+ QTest::newRow("string-with-regex-meta-char2") << searchIn << "foo.bar" << 0 << 1;
+ QTest::newRow("string-with-regex-meta-char3") << searchIn << "foo.bar" << 2 << -1;
}
void tst_QStringList::indexOf()
{
- QStringList list;
- list << "harald" << "trond" << "vohi" << "harald";
-
+ QFETCH(QStringList, list);
QFETCH(QString, search);
QFETCH(int, from);
QFETCH(int, expectedResult);
@@ -127,30 +112,45 @@ void tst_QStringList::indexOf()
QCOMPARE(list.indexOf(search, from), expectedResult);
QCOMPARE(list.indexOf(QStringView(search), from), expectedResult);
QCOMPARE(list.indexOf(QLatin1String(search.toLatin1()), from), expectedResult);
+ QCOMPARE(list.indexOf(QRegularExpression(QRegularExpression::escape(search)), from), expectedResult);
+
+ QString searchUpper = search.toUpper();
+ QCOMPARE(list.indexOf(searchUpper, from, Qt::CaseInsensitive), expectedResult);
+ QCOMPARE(list.indexOf(QStringView(searchUpper), from, Qt::CaseInsensitive), expectedResult);
+ QCOMPARE(list.indexOf(QLatin1StringView(searchUpper.toLatin1()), from, Qt::CaseInsensitive),
+ expectedResult);
+ const QRegularExpression re(QRegularExpression::escape(searchUpper),
+ QRegularExpression::CaseInsensitiveOption);
+ QCOMPARE(list.indexOf(re, from), expectedResult);
}
void tst_QStringList::lastIndexOf_data()
{
+ QTest::addColumn<QStringList>("list");
QTest::addColumn<QString>("search");
QTest::addColumn<int>("from");
QTest::addColumn<int>("expectedResult");
- QTest::newRow("harald") << "harald" << -1 << 3;
- QTest::newRow("trond") << "trond" << -1 << 1;
- QTest::newRow("vohi") << "vohi" << -1 << 2;
- QTest::newRow("harald-1") << "harald" << 2 << 0;
-
- QTest::newRow("hans") << "hans" << -1 << -1;
- QTest::newRow("vohi-1") << "vohi" << 1 << -1;
- QTest::newRow("vohi-2") << "vohi" << -1 << 2;
- QTest::newRow("vohi-3") << "vohi" << -3 << -1;
+ QStringList list{"harald", "trond", "vohi", "harald"};
+ QTest::newRow("harald") << list << "harald" << -1 << 3;
+ QTest::newRow("trond") << list << "trond" << -1 << 1;
+ QTest::newRow("vohi") << list << "vohi" << -1 << 2;
+ QTest::newRow("harald-1") << list << "harald" << 2 << 0;
+
+ QTest::newRow("hans") << list << "hans" << -1 << -1;
+ QTest::newRow("vohi-1") << list << "vohi" << 1 << -1;
+ QTest::newRow("vohi-2") << list << "vohi" << -1 << 2;
+ QTest::newRow("vohi-3") << list << "vohi" << -3 << -1;
+
+ list = {"lost+found", "foo.bar"};
+ QTest::newRow("string-with-regex-meta-char1") << list << "lost+found" << -1 << 0;
+ QTest::newRow("string-with-regex-meta-char2") << list << "foo.bar" << -1 << 1;
+ QTest::newRow("string-with-regex-meta-char3") << list << "foo.bar" << -2 << -1;
}
void tst_QStringList::lastIndexOf()
{
- QStringList list;
- list << "harald" << "trond" << "vohi" << "harald";
-
+ QFETCH(QStringList, list);
QFETCH(QString, search);
QFETCH(int, from);
QFETCH(int, expectedResult);
@@ -158,27 +158,40 @@ void tst_QStringList::lastIndexOf()
QCOMPARE(list.lastIndexOf(search, from), expectedResult);
QCOMPARE(list.lastIndexOf(QStringView(search), from), expectedResult);
QCOMPARE(list.lastIndexOf(QLatin1String(search.toLatin1()), from), expectedResult);
+ QCOMPARE(list.lastIndexOf(QRegularExpression(QRegularExpression::escape(search)), from), expectedResult);
+
+ const QString searchUpper = search.toUpper();
+ QCOMPARE(list.lastIndexOf(searchUpper, from, Qt::CaseInsensitive), expectedResult);
+ QCOMPARE(list.lastIndexOf(QStringView(searchUpper), from, Qt::CaseInsensitive), expectedResult);
+ QCOMPARE(list.lastIndexOf(QLatin1String(searchUpper.toLatin1()), from, Qt::CaseInsensitive),
+ expectedResult);
+ const QRegularExpression re(QRegularExpression::escape(searchUpper),
+ QRegularExpression::CaseInsensitiveOption);
+ QCOMPARE(list.lastIndexOf(re, from), expectedResult);
}
void tst_QStringList::filter()
{
- QStringList list1, list2;
- list1 << "Bill Gates" << "Joe Blow" << "Bill Clinton";
- list1 = list1.filter( "Bill" );
- list2 << "Bill Gates" << "Bill Clinton";
- QCOMPARE( list1, list2 );
-
- QStringList list5, list6;
- list5 << "Bill Gates" << "Joe Blow" << "Bill Clinton";
- list5 = list5.filter( QRegularExpression("[i]ll") );
- list6 << "Bill Gates" << "Bill Clinton";
- QCOMPARE( list5, list6 );
+ const QStringList list = {u"Bill Gates"_s, u"Joe Blow"_s, u"Bill Clinton"_s, u"bIll"_s};
+
+ { // CaseSensitive
+ const QStringList expected{u"Bill Gates"_s, u"Bill Clinton"_s};
+ QCOMPARE(list.filter(u"Bill"_s), expected);
+ QCOMPARE(list.filter(u"Bill"), expected);
+ QCOMPARE(list.filter("Bill"_L1), expected);
+ QCOMPARE(list.filter(QRegularExpression(u"[i]ll"_s)), expected);
+ QCOMPARE(list.filter(QStringMatcher(u"Bill")), expected);
+ }
- QStringList list7, list8;
- list7 << "Bill Gates" << "Joe Blow" << "Bill Clinton";
- list7 = list7.filter( QStringView(QString("Bill")) );
- list8 << "Bill Gates" << "Bill Clinton";
- QCOMPARE( list7, list8 );
+ { // CaseInsensitive
+ const QStringList expected = {u"Bill Gates"_s, u"Bill Clinton"_s, u"bIll"_s};
+ QCOMPARE(list.filter(u"bill"_s, Qt::CaseInsensitive), expected);
+ QCOMPARE(list.filter(u"bill", Qt::CaseInsensitive), expected);
+ QCOMPARE(list.filter("bill"_L1, Qt::CaseInsensitive), expected);
+ QCOMPARE(list.filter(QRegularExpression(u"[i]ll"_s, QRegularExpression::CaseInsensitiveOption)),
+ expected);
+ QCOMPARE(list.filter(QStringMatcher(u"Bill", Qt::CaseInsensitive)), expected);
+ }
}
void tst_QStringList::sort()
@@ -199,12 +212,12 @@ void tst_QStringList::sort()
list4 << "alpha" << "beta" << "BETA" << "epsilon" << "Gamma" << "gAmma" << "gamma";
// with this list, case insensitive sorting can give more than one permutation for "equivalent"
// elements; so we check that the sort gave the formally correct result (list[i] <= list[i+1])
- for (int i = 0; i < list4.count() - 1; ++i)
+ for (int i = 0; i < list4.size() - 1; ++i)
QVERIFY2(QString::compare(list4.at(i), list4.at(i + 1), Qt::CaseInsensitive) <= 0, qPrintable(QString("index %1 failed").arg(i)));
// additional checks
QCOMPARE(list4.at(0), QString("alpha"));
QVERIFY(list4.indexOf("epsilon") > 0);
- QVERIFY(list4.indexOf("epsilon") < (list4.count() - 1));
+ QVERIFY(list4.indexOf("epsilon") < (list4.size() - 1));
}
void tst_QStringList::replaceInStrings()
@@ -236,39 +249,50 @@ void tst_QStringList::replaceInStrings()
list13.replaceInStrings( QString("a"), QStringView(QString("o")) );
list14 << "olpho" << "beto" << "gommo" << "epsilon";
QCOMPARE( list11, list12 );
+
+ QStringList list{"alpha", "beta", "gamma"};
+ QStringList copy = list;
+ QVERIFY(!copy.isDetached());
+
+ // No matches, no detach
+ copy.replaceInStrings("z", "y");
+ QVERIFY(!copy.isDetached());
+ QCOMPARE(copy, list);
+
+ copy.replaceInStrings("a", "y");
+ QVERIFY(copy.isDetached());
+ QCOMPARE(copy, (QStringList{"ylphy", "bety", "gymmy"}));
+}
+
+void tst_QStringList::contains_data()
+{
+ QTest::addColumn<QString>("needle");
+ QTest::addColumn<Qt::CaseSensitivity>("cs");
+ QTest::addColumn<bool>("expected");
+
+ QTest::newRow("arthur") << u"arthur"_s << Qt::CaseSensitive << true;
+ QTest::newRow("ArthuR") << u"ArthuR"_s << Qt::CaseSensitive << false;
+ QTest::newRow("arthur") << u"arthur"_s << Qt::CaseInsensitive << true;
+ QTest::newRow("ArthuR") << u"ArthuR"_s << Qt::CaseInsensitive << true;
+ QTest::newRow("ARTHUR") << u"ARTHUR"_s << Qt::CaseInsensitive << true;
+ QTest::newRow("Hans") << u"Hans"_s << Qt::CaseSensitive << false;
+ QTest::newRow("hans") << u"hans"_s << Qt::CaseInsensitive << false;
+ QTest::newRow("dent") << u"dent"_s << Qt::CaseInsensitive << true;
}
void tst_QStringList::contains()
{
- QStringList list;
- list << "arthur" << "Arthur" << "arthuR" << "ARTHUR" << "Dent" << "Hans Dent";
-
- QVERIFY(list.contains("arthur"));
- QVERIFY(!list.contains("ArthuR"));
- QVERIFY(!list.contains("Hans"));
- QVERIFY(list.contains("arthur", Qt::CaseInsensitive));
- QVERIFY(list.contains("ArthuR", Qt::CaseInsensitive));
- QVERIFY(list.contains("ARTHUR", Qt::CaseInsensitive));
- QVERIFY(list.contains("dent", Qt::CaseInsensitive));
- QVERIFY(!list.contains("hans", Qt::CaseInsensitive));
-
- QVERIFY(list.contains(QLatin1String("arthur")));
- QVERIFY(!list.contains(QLatin1String("ArthuR")));
- QVERIFY(!list.contains(QLatin1String("Hans")));
- QVERIFY(list.contains(QLatin1String("arthur"), Qt::CaseInsensitive));
- QVERIFY(list.contains(QLatin1String("ArthuR"), Qt::CaseInsensitive));
- QVERIFY(list.contains(QLatin1String("ARTHUR"), Qt::CaseInsensitive));
- QVERIFY(list.contains(QLatin1String("dent"), Qt::CaseInsensitive));
- QVERIFY(!list.contains(QLatin1String("hans"), Qt::CaseInsensitive));
-
- QVERIFY(list.contains(QStringView(QString("arthur"))));
- QVERIFY(!list.contains(QStringView(QString("ArthuR"))));
- QVERIFY(!list.contains(QStringView(QString("Hans"))));
- QVERIFY(list.contains(QStringView(QString("arthur")), Qt::CaseInsensitive));
- QVERIFY(list.contains(QStringView(QString("ArthuR")), Qt::CaseInsensitive));
- QVERIFY(list.contains(QStringView(QString("ARTHUR")), Qt::CaseInsensitive));
- QVERIFY(list.contains(QStringView(QString("dent")), Qt::CaseInsensitive));
- QVERIFY(!list.contains(QStringView(QString("hans")), Qt::CaseInsensitive));
+ QFETCH(QString, needle);
+ QFETCH(Qt::CaseSensitivity, cs);
+ QFETCH(bool, expected);
+
+ const QStringList list = {
+ u"arthur"_s, u"Arthur"_s, u"arthuR"_s, u"ARTHUR"_s, u"Dent"_s, u"Hans Dent"_s
+ };
+
+ QCOMPARE(list.contains(needle, cs), expected);
+ QCOMPARE(list.contains(QStringView(needle), cs), expected);
+ QCOMPARE(list.contains(QLatin1StringView(needle.toLatin1()), cs), expected);
}
void tst_QStringList::removeDuplicates_data()
diff --git a/tests/auto/corelib/text/qstringmatcher/CMakeLists.txt b/tests/auto/corelib/text/qstringmatcher/CMakeLists.txt
index ae055089a8..390aff1c53 100644
--- a/tests/auto/corelib/text/qstringmatcher/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringmatcher/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qstringmatcher.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringmatcher Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringmatcher LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstringmatcher
SOURCES
tst_qstringmatcher.cpp
diff --git a/tests/auto/corelib/text/qstringmatcher/tst_qstringmatcher.cpp b/tests/auto/corelib/text/qstringmatcher/tst_qstringmatcher.cpp
index 42d39cc933..c7f67f8541 100644
--- a/tests/auto/corelib/text/qstringmatcher/tst_qstringmatcher.cpp
+++ b/tests/auto/corelib/text/qstringmatcher/tst_qstringmatcher.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 <QTest>
#include <qstringmatcher.h>
@@ -49,6 +24,7 @@ void tst_QStringMatcher::qstringmatcher()
QCOMPARE(matcher.caseSensitivity(), Qt::CaseSensitive);
QCOMPARE(matcher.indexIn("foo", 1), 1);
QCOMPARE(matcher.pattern(), QString());
+ QCOMPARE(matcher.patternView(), QStringView());
}
// public Qt::CaseSensitivity caseSensitivity() const
@@ -117,7 +93,30 @@ void tst_QStringMatcher::setCaseSensitivity_data()
QTest::newRow("overshot") << QString("foo") << QString("baFooz foo bar") << 14 << -1 << (int) Qt::CaseSensitive;
QTest::newRow("sensitive") << QString("foo") << QString("baFooz foo bar") << 1 << 7 << (int) Qt::CaseSensitive;
- QTest::newRow("insensitive") << QString("foo") << QString("baFooz foo bar") << 1 << 2 << (int) Qt::CaseInsensitive;
+ QTest::newRow("insensitive-1")
+ << QString("foo") << QString("baFooz foo bar") << 0 << 2 << (int)Qt::CaseInsensitive;
+ QTest::newRow("insensitive-2")
+ << QString("foo") << QString("baFooz foo bar") << 1 << 2 << (int)Qt::CaseInsensitive;
+ QTest::newRow("insensitive-3")
+ << QString("foo") << QString("baFooz foo bar") << 4 << 7 << (int)Qt::CaseInsensitive;
+ QTest::newRow("insensitive-4")
+ << QString("foogabooga") << QString("baFooGaBooga foogabooga bar") << 1 << 2
+ << (int)Qt::CaseInsensitive;
+ QTest::newRow("insensitive-5")
+ << QString("foogabooga") << QString("baFooGaBooga foogabooga bar") << 3 << 13
+ << (int)Qt::CaseInsensitive;
+ QTest::newRow("insensitive-6") << QString("foogabooga") << QString("GaBoogaFoogaBooga bar") << 0
+ << 7 << (int)Qt::CaseInsensitive;
+ QTest::newRow("insensitive-7") << QString("foogabooga") << QString("FoGaBoogaFoogaBooga") << 9
+ << 9 << (int)Qt::CaseInsensitive;
+ QTest::newRow("insensitive-8") << QString("foogaBooga") << QString("zzzzaazzffoogaBooga") << 0
+ << 9 << (int)Qt::CaseInsensitive;
+ QString stringOf32("abcdefghijklmnopqrstuvwxyz123456");
+ Q_ASSERT(stringOf32.size() == 32);
+ QString stringOf128 = stringOf32 + stringOf32 + stringOf32 + stringOf32;
+ QString needle = stringOf128 + stringOf128 + "CAse";
+ QString haystack = stringOf128 + stringOf128 + "caSE";
+ QTest::newRow("insensitive-9") << needle << haystack << 0 << 0 << (int)Qt::CaseInsensitive;
}
void tst_QStringMatcher::setCaseSensitivity()
@@ -145,6 +144,7 @@ void tst_QStringMatcher::assignOperator()
QStringMatcher m2 = m1;
QCOMPARE(m2.pattern(), needle);
+ QCOMPARE(m2.patternView(), needle);
QCOMPARE(m2.indexIn(hayStack), 3);
}
diff --git a/tests/auto/corelib/text/qstringtokenizer/CMakeLists.txt b/tests/auto/corelib/text/qstringtokenizer/CMakeLists.txt
index 67b044e445..35fa2a31fd 100644
--- a/tests/auto/corelib/text/qstringtokenizer/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringtokenizer/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qstringtokenizer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringtokenizer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringtokenizer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstringtokenizer
SOURCES
tst_qstringtokenizer.cpp
diff --git a/tests/auto/corelib/text/qstringtokenizer/tst_qstringtokenizer.cpp b/tests/auto/corelib/text/qstringtokenizer/tst_qstringtokenizer.cpp
index 1d2658c38f..0101c74a7b 100644
--- a/tests/auto/corelib/text/qstringtokenizer/tst_qstringtokenizer.cpp
+++ b/tests/auto/corelib/text/qstringtokenizer/tst_qstringtokenizer.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 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 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) 2020 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
#include <QStringTokenizer>
#include <QStringBuilder>
@@ -34,7 +9,7 @@
#include <string>
Q_DECLARE_METATYPE(Qt::SplitBehavior)
-
+namespace {
class tst_QStringTokenizer : public QObject
{
Q_OBJECT
@@ -70,6 +45,7 @@ QStringList toQStringList(const Container &c)
r.push_back(toQString(e));
return r;
}
+} // namespace
void tst_QStringTokenizer::constExpr() const
{
@@ -145,6 +121,19 @@ void tst_QStringTokenizer::toContainer() const
auto v = tok.toContainer();
QVERIFY((std::is_same_v<decltype(v), QList<QLatin1String>>));
}
+ // QLatin1String value_type into QStringList
+ {
+ auto tok = qTokenize(QLatin1String{"a,b,c"}, u',');
+ QStringList result;
+ tok.toContainer(result);
+ QCOMPARE(result, QStringList({"a", "b", "c"}));
+ }
+ // QLatin1String value_type into QStringList: rvalue overload
+ {
+ QStringList result;
+ qTokenize(QLatin1String{"a,b,c"}, u',').toContainer(result);
+ QCOMPARE(result, QStringList({"a", "b", "c"}));
+ }
}
QTEST_APPLESS_MAIN(tst_QStringTokenizer)
diff --git a/tests/auto/corelib/text/qstringview/CMakeLists.txt b/tests/auto/corelib/text/qstringview/CMakeLists.txt
index 34c145a498..ba5f540838 100644
--- a/tests/auto/corelib/text/qstringview/CMakeLists.txt
+++ b/tests/auto/corelib/text/qstringview/CMakeLists.txt
@@ -1,12 +1,21 @@
-# Generated from qstringview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstringview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstringview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstringview
SOURCES
tst_qstringview.cpp
+ LIBRARIES
+ Qt::CorePrivate
)
## Scopes:
diff --git a/tests/auto/corelib/text/qstringview/tst_qstringview.cpp b/tests/auto/corelib/text/qstringview/tst_qstringview.cpp
index 3d95022181..df3ef94371 100644
--- a/tests/auto/corelib/text/qstringview/tst_qstringview.cpp
+++ b/tests/auto/corelib/text/qstringview/tst_qstringview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 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 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) 2020 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
#include <QStringView>
#include <QStringTokenizer>
@@ -32,6 +7,11 @@
#include <QChar>
#include <QVarLengthArray>
#include <QList>
+#if QT_CONFIG(cpp_winrt)
+# include <private/qt_winrtbase_p.h>
+#endif
+#include <private/qxmlstream_p.h>
+
#include <QTest>
@@ -115,6 +95,8 @@ static_assert(CanConvert<std::array<char16_t, 123>>::value);
static_assert(!CanConvert<std::deque<char16_t>>::value);
static_assert(!CanConvert<std::list<char16_t>>::value);
+static_assert(CanConvert<QtPrivate::XmlStringRef>::value);
+
//
// wchar_t
//
@@ -149,6 +131,19 @@ static_assert(CanConvert<std::array<wchar_t, 123>>::value == CanConvertFromWChar
static_assert(!CanConvert<std::deque<wchar_t>>::value);
static_assert(!CanConvert<std::list<wchar_t>>::value);
+#if QT_CONFIG(cpp_winrt)
+
+//
+// winrt::hstring (QTBUG-111886)
+//
+
+static_assert(CanConvert< winrt::hstring >::value);
+static_assert(CanConvert<const winrt::hstring >::value);
+static_assert(CanConvert< winrt::hstring&>::value);
+static_assert(CanConvert<const winrt::hstring&>::value);
+
+#endif // QT_CONFIG(cpp_winrt)
+
class tst_QStringView : public QObject
{
Q_OBJECT
@@ -263,6 +258,8 @@ private Q_SLOTS:
void tokenize_data() const;
void tokenize() const;
+ void std_stringview_conversion();
+
private:
template <typename String>
void conversion_tests(String arg) const;
@@ -472,6 +469,10 @@ void tst_QStringView::at() const
void tst_QStringView::arg() const
{
+ // nullness checks
+ QCOMPARE(QStringView().arg(QStringView()), "");
+ QCOMPARE(QStringView(u"%1").arg(QStringView()), "");
+
#define CHECK1(pattern, arg1, expected) \
do { \
auto p = QStringView(u"" pattern); \
@@ -879,10 +880,35 @@ void tst_QStringView::overloadResolution()
{
std::u16string string;
QStringViewOverloadResolution::test(string);
- QStringViewOverloadResolution::test(qAsConst(string));
+ QStringViewOverloadResolution::test(std::as_const(string));
QStringViewOverloadResolution::test(std::move(string));
}
}
+void tst_QStringView::std_stringview_conversion()
+{
+ static_assert(std::is_convertible_v<QStringView, std::u16string_view>);
+
+ QStringView s;
+ std::u16string_view sv(s);
+ QCOMPARE(sv, std::u16string_view());
+
+ s = u"";
+ sv = s;
+ QCOMPARE(s.size(), 0);
+ QCOMPARE(sv.size(), size_t(0));
+ QCOMPARE(sv, std::u16string_view());
+
+ s = u"Hello";
+ sv = s;
+ QCOMPARE(sv, std::u16string_view(u"Hello"));
+
+ s = QStringView::fromArray(u"Hello\0world");
+ sv = s;
+ QCOMPARE(s.size(), 12);
+ QCOMPARE(sv.size(), size_t(12));
+ QCOMPARE(sv, std::u16string_view(u"Hello\0world\0", 12));
+}
+
QTEST_APPLESS_MAIN(tst_QStringView)
#include "tst_qstringview.moc"
diff --git a/tests/auto/corelib/text/qtextboundaryfinder/CMakeLists.txt b/tests/auto/corelib/text/qtextboundaryfinder/CMakeLists.txt
index 024608dc8d..17e8583aab 100644
--- a/tests/auto/corelib/text/qtextboundaryfinder/CMakeLists.txt
+++ b/tests/auto/corelib/text/qtextboundaryfinder/CMakeLists.txt
@@ -1,34 +1,24 @@
-# Generated from qtextboundaryfinder.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextboundaryfinder Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextboundaryfinder LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
-list(APPEND test_data "data")
+file(GLOB_RECURSE test_data
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*
+)
qt_internal_add_test(tst_qtextboundaryfinder
SOURCES
tst_qtextboundaryfinder.cpp
TESTDATA ${test_data}
)
-
-## Scopes:
-#####################################################################
-
-if(ANDROID)
- # Resources:
- set(testdata_resource_files
- "data/GraphemeBreakTest.txt"
- "data/LineBreakTest.txt"
- "data/SentenceBreakTest.txt"
- "data/WordBreakTest.txt"
- )
-
- qt_internal_add_resource(tst_qtextboundaryfinder "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
- )
-endif()
diff --git a/tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt b/tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt
index eff2fd33b0..4c1ed512e4 100644
--- a/tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt
+++ b/tests/auto/corelib/text/qtextboundaryfinder/data/GraphemeBreakTest.txt
@@ -1,11 +1,11 @@
-# GraphemeBreakTest-14.0.0.txt
-# Date: 2021-03-08, 06:22:32 GMT
-# © 2021 Unicode®, Inc.
+# GraphemeBreakTest-15.1.0.txt
+# Date: 2023-08-07, 15:52:55 GMT
+# © 2023 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see https://www.unicode.org/reports/tr44/
#
# Default Grapheme_Cluster_Break Test
#
@@ -36,8 +36,8 @@
÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0020 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 0020 × 0308 ÷ 0600 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 0020 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 0020 × 0308 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0020 × 0A03 ÷ # ÷ [0.2] SPACE (Other) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0020 × 0308 × 0A03 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0020 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 0020 × 0308 ÷ 1100 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 0020 ÷ 1160 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -48,10 +48,24 @@
÷ 0020 × 0308 ÷ AC00 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 0020 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 0020 × 0308 ÷ AC01 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0020 × 0900 ÷ # ÷ [0.2] SPACE (Other) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0020 × 0308 × 0900 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0020 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0020 × 0308 × 0903 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0020 ÷ 0904 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0904 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0020 ÷ 0D4E ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0D4E ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0020 ÷ 0915 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0915 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 0020 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 0020 × 0308 ÷ 231A ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0020 × 093C ÷ # ÷ [0.2] SPACE (Other) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0020 × 0308 × 093C ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0020 × 094D ÷ # ÷ [0.2] SPACE (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0020 × 0308 × 094D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 0020 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 0020 × 0308 × 200D ÷ # ÷ [0.2] SPACE (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 0020 ÷ 0378 ÷ # ÷ [0.2] SPACE (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
@@ -70,8 +84,8 @@
÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 000D ÷ 0600 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 000D ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 000D ÷ 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 000D ÷ 0308 × 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 000D ÷ 0A03 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 000D ÷ 0308 × 0A03 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 000D ÷ 1100 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 000D ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 000D ÷ 1160 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -82,10 +96,24 @@
÷ 000D ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 000D ÷ AC01 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 000D ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 000D ÷ 0900 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000D ÷ 0308 × 0900 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000D ÷ 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000D ÷ 0308 × 0903 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000D ÷ 0904 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 0904 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 000D ÷ 0D4E ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 0D4E ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000D ÷ 0915 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 000D ÷ 0308 ÷ 0915 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 000D ÷ 231A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] WATCH (ExtPict) ÷ [0.3]
÷ 000D ÷ 0308 ÷ 231A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 000D ÷ 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 000D ÷ 093C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 000D ÷ 0308 × 093C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 000D ÷ 094D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 000D ÷ 0308 × 094D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 000D ÷ 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 000D ÷ 0308 × 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 000D ÷ 0378 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3]
@@ -104,8 +132,8 @@
÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 000A ÷ 0600 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 000A ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 000A ÷ 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 000A ÷ 0308 × 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 000A ÷ 0A03 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 000A ÷ 0308 × 0A03 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 000A ÷ 1100 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 000A ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 000A ÷ 1160 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -116,10 +144,24 @@
÷ 000A ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 000A ÷ AC01 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 000A ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 000A ÷ 0900 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000A ÷ 0308 × 0900 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000A ÷ 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000A ÷ 0308 × 0903 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000A ÷ 0904 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 0904 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 000A ÷ 0D4E ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 0D4E ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 000A ÷ 0915 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 000A ÷ 0308 ÷ 0915 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 000A ÷ 231A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] WATCH (ExtPict) ÷ [0.3]
÷ 000A ÷ 0308 ÷ 231A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 000A ÷ 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 000A ÷ 093C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 000A ÷ 0308 × 093C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 000A ÷ 094D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 000A ÷ 0308 × 094D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 000A ÷ 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 000A ÷ 0308 × 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 000A ÷ 0378 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3]
@@ -138,8 +180,8 @@
÷ 0001 ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0001 ÷ 0600 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 0001 ÷ 0308 ÷ 0600 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 0001 ÷ 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 0001 ÷ 0308 × 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0001 ÷ 0A03 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0001 ÷ 0308 × 0A03 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0001 ÷ 1100 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 0001 ÷ 0308 ÷ 1100 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 0001 ÷ 1160 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -150,10 +192,24 @@
÷ 0001 ÷ 0308 ÷ AC00 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 0001 ÷ AC01 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 0001 ÷ 0308 ÷ AC01 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0001 ÷ 0900 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0001 ÷ 0308 × 0900 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0001 ÷ 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0001 ÷ 0308 × 0903 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0001 ÷ 0904 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 0904 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0001 ÷ 0D4E ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 0D4E ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0001 ÷ 0915 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0001 ÷ 0308 ÷ 0915 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 0001 ÷ 231A ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] WATCH (ExtPict) ÷ [0.3]
÷ 0001 ÷ 0308 ÷ 231A ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 0001 ÷ 0300 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 0001 ÷ 0308 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0001 ÷ 093C ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0001 ÷ 0308 × 093C ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0001 ÷ 094D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0001 ÷ 0308 × 094D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 0001 ÷ 200D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 0001 ÷ 0308 × 200D ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 0001 ÷ 0378 ÷ # ÷ [0.2] <START OF HEADING> (Control) ÷ [4.0] <reserved-0378> (Other) ÷ [0.3]
@@ -172,8 +228,8 @@
÷ 034F × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 034F ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 034F × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 034F × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 034F × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 034F × 0A03 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 034F × 0308 × 0A03 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 034F ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 034F × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 034F ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -184,10 +240,24 @@
÷ 034F × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 034F ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 034F × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 034F × 0900 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 034F × 0308 × 0900 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 034F × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 034F × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 034F ÷ 0904 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 034F × 0308 ÷ 0904 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 034F ÷ 0D4E ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 034F × 0308 ÷ 0D4E ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 034F ÷ 0915 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 034F × 0308 ÷ 0915 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 034F ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 034F × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 034F × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 034F × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 034F × 093C ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 034F × 0308 × 093C ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 034F × 094D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 034F × 0308 × 094D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 034F × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 034F × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 034F ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAPHEME JOINER (Extend) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
@@ -206,8 +276,8 @@
÷ 1F1E6 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 1F1E6 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 1F1E6 × 0308 ÷ 0600 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 1F1E6 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 1F1E6 × 0308 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1F1E6 × 0A03 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1F1E6 × 0308 × 0A03 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 1F1E6 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 1F1E6 × 0308 ÷ 1100 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 1F1E6 ÷ 1160 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -218,10 +288,24 @@
÷ 1F1E6 × 0308 ÷ AC00 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 1F1E6 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 1F1E6 × 0308 ÷ AC01 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1F1E6 × 0900 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1F1E6 × 0308 × 0900 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1F1E6 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1F1E6 × 0308 × 0903 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1F1E6 ÷ 0904 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0904 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 1F1E6 ÷ 0D4E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0D4E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1F1E6 ÷ 0915 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 1F1E6 × 0308 ÷ 0915 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 1F1E6 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 1F1E6 × 0308 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 1F1E6 × 093C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 1F1E6 × 0308 × 093C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 1F1E6 × 094D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 1F1E6 × 0308 × 094D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 1F1E6 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 1F1E6 × 0308 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 1F1E6 ÷ 0378 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
@@ -240,8 +324,8 @@
÷ 0600 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0600 × 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 0600 × 0308 ÷ 0600 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 0600 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 0600 × 0308 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0600 × 0A03 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0600 × 0308 × 0A03 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0600 × 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 0600 × 0308 ÷ 1100 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 0600 × 1160 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -252,48 +336,76 @@
÷ 0600 × 0308 ÷ AC00 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 0600 × AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 0600 × 0308 ÷ AC01 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0600 × 0900 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0600 × 0308 × 0900 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0600 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0600 × 0308 × 0903 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0600 × 0904 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0600 × 0308 ÷ 0904 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0600 × 0D4E ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0600 × 0308 ÷ 0D4E ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0600 × 0915 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0600 × 0308 ÷ 0915 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 0600 × 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] WATCH (ExtPict) ÷ [0.3]
÷ 0600 × 0308 ÷ 231A ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 0600 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 0600 × 0308 × 0300 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0600 × 093C ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0600 × 0308 × 093C ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0600 × 094D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0600 × 0308 × 094D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 0600 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 0600 × 0308 × 200D ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 0600 × 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.2] <reserved-0378> (Other) ÷ [0.3]
÷ 0600 × 0308 ÷ 0378 ÷ # ÷ [0.2] ARABIC NUMBER SIGN (Prepend) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
-÷ 0903 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3]
-÷ 0903 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
-÷ 0903 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0903 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0903 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0903 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0903 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
-÷ 0903 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
-÷ 0903 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
-÷ 0903 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
-÷ 0903 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0903 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0903 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 0903 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 0903 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 0903 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 0903 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
-÷ 0903 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
-÷ 0903 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
-÷ 0903 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
-÷ 0903 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
-÷ 0903 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
-÷ 0903 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
-÷ 0903 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
-÷ 0903 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 0903 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
-÷ 0903 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0903 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0903 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
-÷ 0903 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
-÷ 0903 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
-÷ 0903 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
-÷ 0903 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
-÷ 0903 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0A03 ÷ 0020 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 0020 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0A03 ÷ 000D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 000D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0A03 ÷ 000A ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 000A ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0A03 ÷ 0001 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 0001 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0A03 × 034F ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0A03 × 0308 × 034F ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0A03 ÷ 1F1E6 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0A03 ÷ 0600 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 0600 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0A03 × 0A03 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0A03 × 0308 × 0A03 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0A03 ÷ 1100 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 1100 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0A03 ÷ 1160 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 1160 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0A03 ÷ 11A8 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 11A8 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0A03 ÷ AC00 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0A03 × 0308 ÷ AC00 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0A03 ÷ AC01 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0A03 × 0308 ÷ AC01 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0A03 × 0900 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0A03 × 0308 × 0900 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0A03 × 0903 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0A03 × 0308 × 0903 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0A03 ÷ 0904 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 0904 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0A03 ÷ 0D4E ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 0D4E ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0A03 ÷ 0915 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 0915 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0A03 ÷ 231A ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 231A ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0A03 × 0300 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0A03 × 0308 × 0300 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0A03 × 093C ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0A03 × 0308 × 093C ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0A03 × 094D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0A03 × 0308 × 094D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0A03 × 200D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0A03 × 0308 × 200D ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0A03 ÷ 0378 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0A03 × 0308 ÷ 0378 ÷ # ÷ [0.2] GURMUKHI SIGN VISARGA (SpacingMark) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 1100 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] SPACE (Other) ÷ [0.3]
÷ 1100 × 0308 ÷ 0020 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
÷ 1100 ÷ 000D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -308,8 +420,8 @@
÷ 1100 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 1100 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 1100 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 1100 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 1100 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1100 × 0A03 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1100 × 0308 × 0A03 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 1100 × 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 1100 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 1100 × 1160 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -320,10 +432,24 @@
÷ 1100 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 1100 × AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [6.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 1100 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1100 × 0900 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1100 × 0308 × 0900 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1100 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1100 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1100 ÷ 0904 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 1100 × 0308 ÷ 0904 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 1100 ÷ 0D4E ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1100 × 0308 ÷ 0D4E ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1100 ÷ 0915 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 1100 × 0308 ÷ 0915 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 1100 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 1100 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 1100 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 1100 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 1100 × 093C ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 1100 × 0308 × 093C ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 1100 × 094D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 1100 × 0308 × 094D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 1100 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 1100 × 0308 × 200D ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 1100 ÷ 0378 ÷ # ÷ [0.2] HANGUL CHOSEONG KIYEOK (L) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
@@ -342,8 +468,8 @@
÷ 1160 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 1160 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 1160 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 1160 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 1160 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1160 × 0A03 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 1160 × 0308 × 0A03 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 1160 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 1160 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 1160 × 1160 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -354,10 +480,24 @@
÷ 1160 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 1160 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 1160 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 1160 × 0900 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1160 × 0308 × 0900 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1160 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1160 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1160 ÷ 0904 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 1160 × 0308 ÷ 0904 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 1160 ÷ 0D4E ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1160 × 0308 ÷ 0D4E ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 1160 ÷ 0915 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 1160 × 0308 ÷ 0915 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 1160 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 1160 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 1160 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 1160 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 1160 × 093C ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 1160 × 0308 × 093C ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 1160 × 094D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 1160 × 0308 × 094D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 1160 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 1160 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 1160 ÷ 0378 ÷ # ÷ [0.2] HANGUL JUNGSEONG FILLER (V) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
@@ -376,8 +516,8 @@
÷ 11A8 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 11A8 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 11A8 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 11A8 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 11A8 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 11A8 × 0A03 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 11A8 × 0308 × 0A03 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 11A8 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 11A8 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 11A8 ÷ 1160 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -388,10 +528,24 @@
÷ 11A8 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 11A8 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 11A8 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 11A8 × 0900 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 11A8 × 0308 × 0900 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 11A8 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 11A8 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 11A8 ÷ 0904 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 0904 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 11A8 ÷ 0D4E ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 0D4E ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 11A8 ÷ 0915 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 11A8 × 0308 ÷ 0915 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 11A8 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 11A8 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 11A8 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 11A8 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 11A8 × 093C ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 11A8 × 0308 × 093C ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 11A8 × 094D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 11A8 × 0308 × 094D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 11A8 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 11A8 × 0308 × 200D ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 11A8 ÷ 0378 ÷ # ÷ [0.2] HANGUL JONGSEONG KIYEOK (T) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
@@ -410,8 +564,8 @@
÷ AC00 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ AC00 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ AC00 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ AC00 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ AC00 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ AC00 × 0A03 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ AC00 × 0308 × 0A03 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ AC00 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ AC00 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ AC00 × 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [7.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -422,10 +576,24 @@
÷ AC00 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ AC00 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ AC00 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ AC00 × 0900 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC00 × 0308 × 0900 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC00 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC00 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC00 ÷ 0904 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ AC00 × 0308 ÷ 0904 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ AC00 ÷ 0D4E ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC00 × 0308 ÷ 0D4E ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC00 ÷ 0915 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ AC00 × 0308 ÷ 0915 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ AC00 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ AC00 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ AC00 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ AC00 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ AC00 × 093C ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ AC00 × 0308 × 093C ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ AC00 × 094D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ AC00 × 0308 × 094D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ AC00 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ AC00 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ AC00 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GA (LV) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
@@ -444,8 +612,8 @@
÷ AC01 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ AC01 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ AC01 × 0308 ÷ 0600 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ AC01 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ AC01 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ AC01 × 0A03 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ AC01 × 0308 × 0A03 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ AC01 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ AC01 × 0308 ÷ 1100 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ AC01 ÷ 1160 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -456,14 +624,268 @@
÷ AC01 × 0308 ÷ AC00 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ AC01 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ AC01 × 0308 ÷ AC01 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ AC01 × 0900 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC01 × 0308 × 0900 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC01 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC01 × 0308 × 0903 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC01 ÷ 0904 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ AC01 × 0308 ÷ 0904 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ AC01 ÷ 0D4E ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC01 × 0308 ÷ 0D4E ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ AC01 ÷ 0915 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ AC01 × 0308 ÷ 0915 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ AC01 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ AC01 × 0308 ÷ 231A ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ AC01 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ AC01 × 0308 × 0300 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ AC01 × 093C ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ AC01 × 0308 × 093C ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ AC01 × 094D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ AC01 × 0308 × 094D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ AC01 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ AC01 × 0308 × 200D ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ AC01 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ AC01 × 0308 ÷ 0378 ÷ # ÷ [0.2] HANGUL SYLLABLE GAG (LVT) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0900 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0900 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0900 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0900 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0900 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0900 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0900 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0900 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0900 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0900 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0900 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0900 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0900 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0900 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0900 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0900 × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0900 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0900 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0900 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0900 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0900 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0900 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0900 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0900 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0900 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0900 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0900 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0900 × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0900 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0900 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0900 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0900 × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0900 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0900 × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0900 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0900 × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0900 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0900 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0900 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0900 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0900 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0900 × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0900 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0900 × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0900 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0900 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0900 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0900 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0903 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0903 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0903 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0903 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0903 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0903 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0903 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0903 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0903 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0903 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0903 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0903 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0903 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0903 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0903 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0903 × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0903 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0903 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0903 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0903 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0903 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0903 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0903 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0903 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0903 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0903 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0903 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0903 × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0903 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0903 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0903 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0903 × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0903 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0903 × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0903 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0903 × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0903 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0903 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0903 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0903 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0903 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0903 × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0903 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0903 × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0903 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0903 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0903 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0903 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0904 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0904 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0904 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0904 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0904 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0904 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0904 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0904 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0904 × 034F ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0904 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0904 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0904 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0904 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0904 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0904 × 0A03 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0904 × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0904 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0904 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0904 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0904 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0904 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0904 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0904 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0904 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0904 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0904 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0904 × 0900 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0904 × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0904 × 0903 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0904 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0904 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0904 × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0904 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0904 × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0904 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0904 × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0904 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0904 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0904 × 0300 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0904 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0904 × 093C ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0904 × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0904 × 094D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0904 × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0904 × 200D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0904 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0904 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0904 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0D4E × 0020 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] SPACE (Other) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 0020 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0D4E ÷ 000D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 000D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0D4E ÷ 000A ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 000A ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0D4E ÷ 0001 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 0001 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0D4E × 034F ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0D4E × 0308 × 034F ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0D4E × 1F1E6 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0D4E × 0600 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 0600 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0D4E × 0A03 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0D4E × 0308 × 0A03 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0D4E × 1100 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 1100 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0D4E × 1160 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 1160 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0D4E × 11A8 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 11A8 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0D4E × AC00 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0D4E × 0308 ÷ AC00 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0D4E × AC01 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0D4E × 0308 ÷ AC01 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0D4E × 0900 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0D4E × 0308 × 0900 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0D4E × 0903 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0D4E × 0308 × 0903 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0D4E × 0904 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 0904 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0D4E × 0D4E ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 0D4E ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0D4E × 0915 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 0915 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0D4E × 231A ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] WATCH (ExtPict) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 231A ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0D4E × 0300 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0D4E × 0308 × 0300 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0D4E × 093C ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0D4E × 0308 × 093C ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0D4E × 094D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0D4E × 0308 × 094D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0D4E × 200D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0D4E × 0308 × 200D ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0D4E × 0378 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.2] <reserved-0378> (Other) ÷ [0.3]
+÷ 0D4E × 0308 ÷ 0378 ÷ # ÷ [0.2] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0915 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0915 × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 0915 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0915 × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0915 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0915 × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0915 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0915 × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 0915 × 034F ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0915 × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 0915 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0915 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0915 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0915 × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 0915 × 0A03 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0915 × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0915 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0915 × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 0915 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0915 × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 0915 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0915 × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 0915 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0915 × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 0915 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0915 × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0915 × 0900 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0915 × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0915 × 0903 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0915 × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0915 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0915 × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0915 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0915 × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0915 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0915 × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0915 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0915 × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0915 × 0300 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0915 × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0915 × 093C ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0915 × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0915 × 094D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0915 × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0915 × 200D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0915 × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 0915 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 0915 × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 231A ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] SPACE (Other) ÷ [0.3]
÷ 231A × 0308 ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
÷ 231A ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -478,8 +900,8 @@
÷ 231A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 231A ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 231A × 0308 ÷ 0600 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 231A × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 231A × 0308 × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 231A × 0A03 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 231A × 0308 × 0A03 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 231A ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 231A × 0308 ÷ 1100 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 231A ÷ 1160 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -490,10 +912,24 @@
÷ 231A × 0308 ÷ AC00 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 231A ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 231A × 0308 ÷ AC01 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 231A × 0900 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 231A × 0308 × 0900 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 231A × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 231A × 0308 × 0903 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 231A ÷ 0904 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 231A × 0308 ÷ 0904 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 231A ÷ 0D4E ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 231A × 0308 ÷ 0D4E ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 231A ÷ 0915 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 231A × 0308 ÷ 0915 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 231A ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 231A × 0308 ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 231A × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 231A × 0308 × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 231A × 093C ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 231A × 0308 × 093C ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 231A × 094D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 231A × 0308 × 094D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 231A × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 231A × 0308 × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 231A ÷ 0378 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
@@ -512,8 +948,8 @@
÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0300 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 0300 × 0308 ÷ 0600 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 0300 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 0300 × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0300 × 0A03 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0300 × 0308 × 0A03 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0300 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 0300 × 0308 ÷ 1100 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 0300 ÷ 1160 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -524,14 +960,124 @@
÷ 0300 × 0308 ÷ AC00 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 0300 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 0300 × 0308 ÷ AC01 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0300 × 0900 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0300 × 0308 × 0900 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0300 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0300 × 0308 × 0903 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0300 ÷ 0904 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0300 × 0308 ÷ 0904 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0300 ÷ 0D4E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0300 × 0308 ÷ 0D4E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0300 ÷ 0915 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0300 × 0308 ÷ 0915 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 0300 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 0300 × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0300 × 093C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0300 × 0308 × 093C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0300 × 094D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0300 × 0308 × 094D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 0300 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 0300 × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 0300 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 0300 × 0308 ÷ 0378 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 093C ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 093C × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 093C ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 093C × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 093C ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 093C × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 093C ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 093C × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 093C × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 093C × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 093C ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 093C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 093C ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 093C × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 093C × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 093C × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 093C ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 093C × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 093C ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 093C × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 093C ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 093C × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 093C ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 093C × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 093C ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 093C × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 093C × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 093C × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 093C × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 093C × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 093C ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 093C × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 093C ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 093C × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 093C ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 093C × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 093C ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 093C × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 093C × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 093C × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 093C × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 093C × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 093C × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 093C × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 093C × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 093C × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 093C ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 093C × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 094D ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 094D × 0308 ÷ 0020 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
+÷ 094D ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 094D × 0308 ÷ 000D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 094D ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 094D × 0308 ÷ 000A ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 094D ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 094D × 0308 ÷ 0001 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [5.0] <START OF HEADING> (Control) ÷ [0.3]
+÷ 094D × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 094D × 0308 × 034F ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAPHEME JOINER (Extend) ÷ [0.3]
+÷ 094D ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 094D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 094D ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 094D × 0308 ÷ 0600 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
+÷ 094D × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 094D × 0308 × 0A03 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 094D ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 094D × 0308 ÷ 1100 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
+÷ 094D ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 094D × 0308 ÷ 1160 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
+÷ 094D ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 094D × 0308 ÷ 11A8 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL JONGSEONG KIYEOK (T) ÷ [0.3]
+÷ 094D ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 094D × 0308 ÷ AC00 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
+÷ 094D ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 094D × 0308 ÷ AC01 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 094D × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 094D × 0308 × 0900 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 094D × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 094D × 0308 × 0903 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 094D ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 094D × 0308 ÷ 0904 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 094D ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 094D × 0308 ÷ 0D4E ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 094D ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 094D × 0308 ÷ 0915 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 094D ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 094D × 0308 ÷ 231A ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 094D × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 094D × 0308 × 0300 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 094D × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 094D × 0308 × 093C ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 094D × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 094D × 0308 × 094D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 094D × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 094D × 0308 × 200D ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
+÷ 094D ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
+÷ 094D × 0308 ÷ 0378 ÷ # ÷ [0.2] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
÷ 200D ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
÷ 200D × 0308 ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] SPACE (Other) ÷ [0.3]
÷ 200D ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [5.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -546,8 +1092,8 @@
÷ 200D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 200D ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 200D × 0308 ÷ 0600 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 200D × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 200D × 0308 × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 200D × 0A03 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 200D × 0308 × 0A03 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 200D ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 200D × 0308 ÷ 1100 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 200D ÷ 1160 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -558,10 +1104,24 @@
÷ 200D × 0308 ÷ AC00 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 200D ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 200D × 0308 ÷ AC01 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 200D × 0900 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 200D × 0308 × 0900 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 200D × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 200D × 0308 × 0903 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 200D ÷ 0904 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 200D × 0308 ÷ 0904 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 200D ÷ 0D4E ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 200D × 0308 ÷ 0D4E ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 200D ÷ 0915 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 200D × 0308 ÷ 0915 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 200D ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 200D × 0308 ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 200D × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 200D × 0308 × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 200D × 093C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 200D × 0308 × 093C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 200D × 094D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 200D × 0308 × 094D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 200D × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 200D × 0308 × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 200D ÷ 0378 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
@@ -580,8 +1140,8 @@
÷ 0378 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0378 ÷ 0600 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
÷ 0378 × 0308 ÷ 0600 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) ÷ [0.3]
-÷ 0378 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
-÷ 0378 × 0308 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0378 × 0A03 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
+÷ 0378 × 0308 × 0A03 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] GURMUKHI SIGN VISARGA (SpacingMark) ÷ [0.3]
÷ 0378 ÷ 1100 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 0378 × 0308 ÷ 1100 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL CHOSEONG KIYEOK (L) ÷ [0.3]
÷ 0378 ÷ 1160 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL JUNGSEONG FILLER (V) ÷ [0.3]
@@ -592,10 +1152,24 @@
÷ 0378 × 0308 ÷ AC00 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GA (LV) ÷ [0.3]
÷ 0378 ÷ AC01 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
÷ 0378 × 0308 ÷ AC01 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] HANGUL SYLLABLE GAG (LVT) ÷ [0.3]
+÷ 0378 × 0900 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0378 × 0308 × 0900 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN INVERTED CANDRABINDU (Extend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0378 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0378 × 0308 × 0903 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0378 ÷ 0904 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0378 × 0308 ÷ 0904 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER SHORT A (ConjunctLinkingScripts) ÷ [0.3]
+÷ 0378 ÷ 0D4E ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0378 × 0308 ÷ 0D4E ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] MALAYALAM LETTER DOT REPH (Prepend_ConjunctLinkingScripts) ÷ [0.3]
+÷ 0378 ÷ 0915 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0378 × 0308 ÷ 0915 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
÷ 0378 ÷ 231A ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 0378 × 0308 ÷ 231A ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 0378 × 0300 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
÷ 0378 × 0308 × 0300 ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] COMBINING GRAVE ACCENT (Extend_ExtCccZwj) ÷ [0.3]
+÷ 0378 × 093C ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0378 × 0308 × 093C ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) ÷ [0.3]
+÷ 0378 × 094D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
+÷ 0378 × 0308 × 094D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [0.3]
÷ 0378 × 200D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 0378 × 0308 × 200D ÷ # ÷ [0.2] <reserved-0378> (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 0378 ÷ 0378 ÷ # ÷ [0.2] <reserved-0378> (Other) ÷ [999.0] <reserved-0378> (Other) ÷ [0.3]
@@ -614,7 +1188,7 @@
÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [13.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
÷ 0061 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [0.3]
÷ 0061 × 0308 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] COMBINING DIAERESIS (Extend_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
-÷ 0061 × 0903 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
+÷ 0061 × 0903 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.1] DEVANAGARI SIGN VISARGA (SpacingMark_ConjunctLinkingScripts) ÷ [999.0] LATIN SMALL LETTER B (Other) ÷ [0.3]
÷ 0061 ÷ 0600 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) ÷ [999.0] ARABIC NUMBER SIGN (Prepend) × [9.2] LATIN SMALL LETTER B (Other) ÷ [0.3]
÷ 1F476 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] BABY (ExtPict) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3]
÷ 0061 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend) ÷ [999.0] BABY (ExtPict) ÷ [0.3]
@@ -624,7 +1198,18 @@
÷ 0061 × 200D ÷ 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [11.0] UPPER BLADE SCISSORS (Other) ÷ [0.3]
÷ 0061 × 200D ÷ 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) ÷ [999.0] UPPER BLADE SCISSORS (Other) ÷ [0.3]
+÷ 0915 ÷ 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) ÷ [999.0] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0915 × 094D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0915 × 094D × 094D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0915 × 094D × 200D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0915 × 093C × 200D × 094D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0915 × 093C × 094D × 200D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN NUKTA (Extend_ConjunctLinkingScripts_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] ZERO WIDTH JOINER (ZWJ_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0915 × 094D × 0924 × 094D × 092F ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER YA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0915 × 094D ÷ 0061 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] LATIN SMALL LETTER A (Other) ÷ [0.3]
+÷ 0061 × 094D ÷ 0924 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 003F × 094D ÷ 0924 ÷ # ÷ [0.2] QUESTION MARK (Other) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) ÷ [999.0] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
+÷ 0915 × 094D × 094D × 0924 ÷ # ÷ [0.2] DEVANAGARI LETTER KA (ConjunctLinkingScripts_LinkingConsonant) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.0] DEVANAGARI SIGN VIRAMA (Extend_ConjunctLinkingScripts_ConjunctLinker_ExtCccZwj) × [9.3] DEVANAGARI LETTER TA (ConjunctLinkingScripts_LinkingConsonant) ÷ [0.3]
#
-# Lines: 602
+# Lines: 1187
#
# EOF
diff --git a/tests/auto/corelib/text/qtextboundaryfinder/data/LineBreakTest.txt b/tests/auto/corelib/text/qtextboundaryfinder/data/LineBreakTest.txt
index 7d1682fe4e..614bf33fa8 100644
--- a/tests/auto/corelib/text/qtextboundaryfinder/data/LineBreakTest.txt
+++ b/tests/auto/corelib/text/qtextboundaryfinder/data/LineBreakTest.txt
@@ -1,11 +1,11 @@
-# LineBreakTest-14.0.0.txt
-# Date: 2021-08-20, 21:08:45 GMT
-# © 2021 Unicode®, Inc.
+# LineBreakTest-15.1.0.txt
+# Date: 2023-08-08, 11:38:16 GMT
+# © 2023 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see https://www.unicode.org/reports/tr44/
#
# Default Line_Break Test
#
@@ -26,10 +26,222 @@
#
# These samples may be extended or changed in the future.
#
+× 1B05 ÷ 1B05 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B05 × 0020 ÷ 1B05 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B05 × 0308 ÷ 1B05 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B05 ÷ 0023 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B05 × 0020 ÷ 0023 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B05 × 0308 ÷ 0023 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B05 ÷ 11003 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B05 × 0020 ÷ 11003 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B05 × 0308 ÷ 11003 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B05 ÷ 1BC0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B05 × 0020 ÷ 1BC0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B05 × 0308 ÷ 1BC0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B05 ÷ 2014 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1B05 × 0020 ÷ 2014 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1B05 × 0308 ÷ 2014 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1B05 × 0009 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B05 × 0020 ÷ 0009 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B05 × 0308 × 0009 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B05 ÷ 00B4 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B05 × 0020 ÷ 00B4 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B05 × 0308 ÷ 00B4 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B05 × 000B ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B05 × 0020 × 000B ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B05 × 0308 × 000B ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 000B ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B05 ÷ FFFC ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B05 × 0020 ÷ FFFC ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B05 × 0308 ÷ FFFC ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B05 × 007D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B05 × 0020 × 007D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B05 × 0308 × 007D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 007D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B05 × 000D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B05 × 0020 × 000D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B05 × 0308 × 000D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 000D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B05 × 0021 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B05 × 0020 × 0021 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B05 × 0308 × 0021 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 0021 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B05 × 00A0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B05 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B05 × 0308 × 00A0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B05 ÷ AC00 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B05 × 0020 ÷ AC00 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B05 × 0308 ÷ AC00 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B05 ÷ AC01 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B05 × 0020 ÷ AC01 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B05 × 0308 ÷ AC01 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B05 ÷ 05D0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B05 × 0020 ÷ 05D0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B05 × 0308 ÷ 05D0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B05 × 002D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B05 × 0020 ÷ 002D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B05 × 0308 × 002D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 002D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B05 ÷ 1B50 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B05 × 0020 ÷ 1B50 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B05 × 0308 ÷ 1B50 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B05 × 2024 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B05 × 0020 ÷ 2024 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B05 × 0308 × 2024 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B05 × 002C ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [13.02] COMMA (IS) ÷ [0.3]
+× 1B05 × 0020 × 002C ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1B05 × 0308 × 002C ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 002C ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1B05 ÷ 1100 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B05 × 0020 ÷ 1100 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B05 × 0308 ÷ 1100 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B05 ÷ 11A8 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B05 × 0020 ÷ 11A8 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B05 × 0308 ÷ 11A8 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B05 ÷ 1160 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B05 × 0020 ÷ 1160 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B05 × 0308 ÷ 1160 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B05 × 000A ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B05 × 0020 × 000A ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B05 × 0308 × 000A ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 000A ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B05 × 0085 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B05 × 0020 × 0085 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B05 × 0308 × 0085 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 0085 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B05 × 17D6 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B05 × 0020 ÷ 17D6 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B05 × 0308 × 17D6 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B05 ÷ 0030 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B05 × 0020 ÷ 0030 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B05 × 0308 ÷ 0030 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B05 ÷ 2329 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B05 × 0020 ÷ 2329 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B05 × 0308 ÷ 2329 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B05 ÷ 0025 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1B05 × 0020 ÷ 0025 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1B05 × 0308 ÷ 0025 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1B05 ÷ 0024 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B05 × 0020 ÷ 0024 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B05 × 0308 ÷ 0024 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B05 × 0022 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1B05 × 0020 ÷ 0022 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1B05 × 0308 × 0022 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1B05 × 0020 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B05 × 0020 × 0020 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 0020 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B05 × 002F ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1B05 × 0020 × 002F ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1B05 × 0308 × 002F ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 002F ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1B05 × 1BF2 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [28.12] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B05 × 0020 ÷ 1BF2 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B05 × 0308 × 1BF2 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.12] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B05 × 1B44 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [28.12] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B05 × 0020 ÷ 1B44 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B05 × 0308 × 1B44 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.12] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B05 × 2060 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B05 × 0020 × 2060 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B05 × 0308 × 2060 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 2060 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B05 × 200B ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B05 × 0020 × 200B ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B05 × 0308 × 200B ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 200B ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B05 ÷ 1F1E6 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B05 × 0020 ÷ 1F1E6 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B05 × 0308 ÷ 1F1E6 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B05 ÷ 261D ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B05 × 0020 ÷ 261D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B05 × 0308 ÷ 261D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 261D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B05 ÷ 1F3FB ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B05 × 0020 ÷ 1F3FB ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B05 × 0308 ÷ 1F3FB ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B05 × 00AB ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B05 × 0020 ÷ 00AB ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B05 × 0308 × 00AB ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B05 × 00BB ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B05 × 0020 × 00BB ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B05 × 0308 × 00BB ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 00BB ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B05 × 0029 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B05 × 0020 × 0029 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B05 × 0308 × 0029 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B05 × 0308 × 0020 × 0029 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B05 ÷ 0028 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B05 × 0020 ÷ 0028 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B05 × 0308 ÷ 0028 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B05 × 0001 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B05 × 0020 ÷ 0001 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B05 × 0308 × 0001 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B05 × 200D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B05 × 0020 ÷ 200D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B05 × 0308 × 200D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 200D ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B05 ÷ 00A7 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B05 × 0020 ÷ 00A7 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B05 × 0308 ÷ 00A7 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B05 ÷ 50005 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B05 × 0020 ÷ 50005 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B05 × 0308 ÷ 50005 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B05 ÷ 0E01 ÷ # × [0.3] BALINESE LETTER AKARA (AK) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B05 × 0020 ÷ 0E01 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B05 × 0308 ÷ 0E01 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B05 × 3041 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1B05 × 0020 ÷ 3041 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1B05 × 0308 × 3041 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1B05 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] BALINESE LETTER AKARA (AK) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0023 ÷ 1B05 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0023 × 0020 ÷ 1B05 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0023 × 0308 ÷ 1B05 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0023 × 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0023 × 0020 ÷ 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0023 × 0308 × 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0023 ÷ 11003 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0023 × 0020 ÷ 11003 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0023 × 0308 ÷ 11003 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0023 ÷ 1BC0 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0023 × 0020 ÷ 1BC0 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0023 × 0308 ÷ 1BC0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0023 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0023 × 0020 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0023 × 0308 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -82,10 +294,10 @@
× 0023 × 0020 ÷ 002D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0023 × 0308 × 002D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 002D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0023 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0023 × 0020 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0023 × 0308 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0023 ÷ 1B50 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0023 × 0020 ÷ 1B50 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0023 × 0308 ÷ 1B50 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 0023 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0023 × 0020 ÷ 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0023 × 0308 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -122,9 +334,9 @@
× 0023 × 0020 ÷ 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0023 × 0308 × 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-#× 0023 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0023 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0023 × 0020 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 0023 × 0308 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0023 × 0308 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0023 × 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 0023 × 0020 ÷ 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -146,6 +358,14 @@
× 0023 × 0020 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0023 × 0308 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 0023 × 0308 × 0020 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0023 ÷ 1BF2 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0023 × 0020 ÷ 1BF2 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0023 × 0308 ÷ 1BF2 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0023 ÷ 1B44 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0023 × 0020 ÷ 1B44 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0023 × 0308 ÷ 1B44 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0023 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0023 × 0020 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0023 × 0308 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -166,6 +386,14 @@
× 0023 × 0020 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0023 × 0308 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0023 × 00AB ÷ # × [0.3] NUMBER SIGN (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0023 × 0020 ÷ 00AB ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0023 × 0308 × 00AB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0023 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0023 × 00BB ÷ # × [0.3] NUMBER SIGN (AL) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0023 × 0020 × 00BB ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0023 × 0308 × 00BB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0023 × 0308 × 0020 × 00BB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0023 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0023 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0023 × 0308 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -198,10 +426,422 @@
× 0023 × 0020 ÷ 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0023 × 0308 × 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0023 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 11003 × 1B05 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [28.11] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 11003 × 0020 ÷ 1B05 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 11003 × 0308 × 1B05 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.11] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 11003 ÷ 0023 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 11003 × 0020 ÷ 0023 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 11003 × 0308 ÷ 0023 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 11003 ÷ 11003 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 11003 × 0020 ÷ 11003 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 11003 × 0308 ÷ 11003 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 11003 × 1BC0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [28.11] BATAK LETTER A (AS) ÷ [0.3]
+× 11003 × 0020 ÷ 1BC0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 11003 × 0308 × 1BC0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.11] BATAK LETTER A (AS) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 11003 ÷ 2014 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 11003 × 0020 ÷ 2014 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 11003 × 0308 ÷ 2014 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 11003 × 0009 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 11003 × 0020 ÷ 0009 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 11003 × 0308 × 0009 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 11003 ÷ 00B4 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 11003 × 0020 ÷ 00B4 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 11003 × 0308 ÷ 00B4 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 11003 × 000B ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 11003 × 0020 × 000B ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 11003 × 0308 × 000B ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 11003 × 0308 × 0020 × 000B ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 11003 ÷ FFFC ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 11003 × 0020 ÷ FFFC ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 11003 × 0308 ÷ FFFC ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 11003 × 007D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 11003 × 0020 × 007D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 11003 × 0308 × 007D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 11003 × 0308 × 0020 × 007D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 11003 × 000D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 11003 × 0020 × 000D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 11003 × 0308 × 000D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 11003 × 0308 × 0020 × 000D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 11003 × 0021 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 11003 × 0020 × 0021 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 11003 × 0308 × 0021 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 11003 × 0308 × 0020 × 0021 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 11003 × 00A0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 11003 × 0020 ÷ 00A0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 11003 × 0308 × 00A0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 11003 ÷ AC00 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 11003 × 0020 ÷ AC00 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 11003 × 0308 ÷ AC00 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 11003 ÷ AC01 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 11003 × 0020 ÷ AC01 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 11003 × 0308 ÷ AC01 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 11003 ÷ 05D0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 11003 × 0020 ÷ 05D0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 11003 × 0308 ÷ 05D0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 11003 × 002D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 11003 × 0020 ÷ 002D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 11003 × 0308 × 002D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 002D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 11003 ÷ 1B50 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 11003 × 0020 ÷ 1B50 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 11003 × 0308 ÷ 1B50 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 11003 × 2024 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 11003 × 0020 ÷ 2024 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 11003 × 0308 × 2024 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 11003 × 002C ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [13.02] COMMA (IS) ÷ [0.3]
+× 11003 × 0020 × 002C ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 11003 × 0308 × 002C ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 11003 × 0308 × 0020 × 002C ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 11003 ÷ 1100 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 11003 × 0020 ÷ 1100 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 11003 × 0308 ÷ 1100 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 11003 ÷ 11A8 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 11003 × 0020 ÷ 11A8 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 11003 × 0308 ÷ 11A8 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 11003 ÷ 1160 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 11003 × 0020 ÷ 1160 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 11003 × 0308 ÷ 1160 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 11003 × 000A ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 11003 × 0020 × 000A ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 11003 × 0308 × 000A ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 11003 × 0308 × 0020 × 000A ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 11003 × 0085 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 11003 × 0020 × 0085 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 11003 × 0308 × 0085 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 11003 × 0308 × 0020 × 0085 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 11003 × 17D6 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 11003 × 0020 ÷ 17D6 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 11003 × 0308 × 17D6 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 11003 ÷ 0030 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 11003 × 0020 ÷ 0030 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 11003 × 0308 ÷ 0030 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 11003 ÷ 2329 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 11003 × 0020 ÷ 2329 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 11003 × 0308 ÷ 2329 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 11003 ÷ 0025 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 11003 × 0020 ÷ 0025 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 11003 × 0308 ÷ 0025 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 11003 ÷ 0024 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 11003 × 0020 ÷ 0024 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 11003 × 0308 ÷ 0024 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 11003 × 0022 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 11003 × 0020 ÷ 0022 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 11003 × 0308 × 0022 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 11003 × 0020 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [0.3]
+× 11003 × 0020 × 0020 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 11003 × 0308 × 0020 × 0020 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 11003 × 002F ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 11003 × 0020 × 002F ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 11003 × 0308 × 002F ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 11003 × 0308 × 0020 × 002F ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 11003 ÷ 1BF2 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 11003 × 0020 ÷ 1BF2 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 11003 × 0308 ÷ 1BF2 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 11003 ÷ 1B44 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 11003 × 0020 ÷ 1B44 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 11003 × 0308 ÷ 1B44 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 11003 × 2060 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 11003 × 0020 × 2060 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 11003 × 0308 × 2060 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 11003 × 0308 × 0020 × 2060 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 11003 × 200B ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 11003 × 0020 × 200B ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 11003 × 0308 × 200B ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 11003 × 0308 × 0020 × 200B ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 11003 ÷ 1F1E6 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 11003 × 0020 ÷ 1F1E6 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 11003 × 0308 ÷ 1F1E6 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 11003 ÷ 261D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 11003 × 0020 ÷ 261D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 11003 × 0308 ÷ 261D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 261D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 11003 ÷ 1F3FB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 11003 × 0020 ÷ 1F3FB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 11003 × 0308 ÷ 1F3FB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 11003 × 00AB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 11003 × 0020 ÷ 00AB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 11003 × 0308 × 00AB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 11003 × 00BB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 11003 × 0020 × 00BB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 11003 × 0308 × 00BB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 11003 × 0308 × 0020 × 00BB ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 11003 × 0029 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11003 × 0020 × 0029 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11003 × 0308 × 0029 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11003 × 0308 × 0020 × 0029 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 11003 ÷ 0028 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 11003 × 0020 ÷ 0028 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 11003 × 0308 ÷ 0028 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 11003 × 0001 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 11003 × 0020 ÷ 0001 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 11003 × 0308 × 0001 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 11003 × 200D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 11003 × 0020 ÷ 200D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 11003 × 0308 × 200D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 200D ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 11003 ÷ 00A7 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 11003 × 0020 ÷ 00A7 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 11003 × 0308 ÷ 00A7 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 11003 ÷ 50005 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 11003 × 0020 ÷ 50005 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 11003 × 0308 ÷ 50005 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 11003 ÷ 0E01 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 11003 × 0020 ÷ 0E01 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 11003 × 0308 ÷ 0E01 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 11003 × 3041 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 11003 × 0020 ÷ 3041 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 11003 × 0308 × 3041 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 11003 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] BRAHMI SIGN JIHVAMULIYA (AP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1BC0 ÷ 1B05 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1BC0 × 0020 ÷ 1B05 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1BC0 × 0308 ÷ 1B05 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1BC0 ÷ 0023 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1BC0 × 0020 ÷ 0023 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1BC0 × 0308 ÷ 0023 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1BC0 ÷ 11003 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1BC0 × 0020 ÷ 11003 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1BC0 × 0308 ÷ 11003 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1BC0 ÷ 1BC0 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1BC0 × 0020 ÷ 1BC0 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1BC0 × 0308 ÷ 1BC0 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1BC0 ÷ 2014 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1BC0 × 0020 ÷ 2014 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1BC0 × 0308 ÷ 2014 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1BC0 × 0009 ÷ # × [0.3] BATAK LETTER A (AS) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1BC0 × 0020 ÷ 0009 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1BC0 × 0308 × 0009 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1BC0 ÷ 00B4 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1BC0 × 0020 ÷ 00B4 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1BC0 × 0308 ÷ 00B4 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1BC0 × 000B ÷ # × [0.3] BATAK LETTER A (AS) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1BC0 × 0020 × 000B ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1BC0 × 0308 × 000B ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 000B ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1BC0 ÷ FFFC ÷ # × [0.3] BATAK LETTER A (AS) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1BC0 × 0020 ÷ FFFC ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1BC0 × 0308 ÷ FFFC ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1BC0 × 007D ÷ # × [0.3] BATAK LETTER A (AS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1BC0 × 0020 × 007D ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1BC0 × 0308 × 007D ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 007D ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1BC0 × 000D ÷ # × [0.3] BATAK LETTER A (AS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1BC0 × 0020 × 000D ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1BC0 × 0308 × 000D ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 000D ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1BC0 × 0021 ÷ # × [0.3] BATAK LETTER A (AS) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1BC0 × 0020 × 0021 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1BC0 × 0308 × 0021 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 0021 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1BC0 × 00A0 ÷ # × [0.3] BATAK LETTER A (AS) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1BC0 × 0020 ÷ 00A0 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1BC0 × 0308 × 00A0 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1BC0 ÷ AC00 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1BC0 × 0020 ÷ AC00 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1BC0 × 0308 ÷ AC00 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1BC0 ÷ AC01 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1BC0 × 0020 ÷ AC01 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1BC0 × 0308 ÷ AC01 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1BC0 ÷ 05D0 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1BC0 × 0020 ÷ 05D0 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1BC0 × 0308 ÷ 05D0 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1BC0 × 002D ÷ # × [0.3] BATAK LETTER A (AS) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1BC0 × 0020 ÷ 002D ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1BC0 × 0308 × 002D ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 002D ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1BC0 ÷ 1B50 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1BC0 × 0020 ÷ 1B50 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1BC0 × 0308 ÷ 1B50 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1BC0 × 2024 ÷ # × [0.3] BATAK LETTER A (AS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1BC0 × 0020 ÷ 2024 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1BC0 × 0308 × 2024 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1BC0 × 002C ÷ # × [0.3] BATAK LETTER A (AS) × [13.02] COMMA (IS) ÷ [0.3]
+× 1BC0 × 0020 × 002C ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1BC0 × 0308 × 002C ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 002C ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1BC0 ÷ 1100 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1BC0 × 0020 ÷ 1100 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1BC0 × 0308 ÷ 1100 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1BC0 ÷ 11A8 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1BC0 × 0020 ÷ 11A8 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1BC0 × 0308 ÷ 11A8 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1BC0 ÷ 1160 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1BC0 × 0020 ÷ 1160 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1BC0 × 0308 ÷ 1160 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1BC0 × 000A ÷ # × [0.3] BATAK LETTER A (AS) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1BC0 × 0020 × 000A ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1BC0 × 0308 × 000A ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 000A ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1BC0 × 0085 ÷ # × [0.3] BATAK LETTER A (AS) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1BC0 × 0020 × 0085 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1BC0 × 0308 × 0085 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 0085 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1BC0 × 17D6 ÷ # × [0.3] BATAK LETTER A (AS) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1BC0 × 0020 ÷ 17D6 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1BC0 × 0308 × 17D6 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1BC0 ÷ 0030 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1BC0 × 0020 ÷ 0030 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1BC0 × 0308 ÷ 0030 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1BC0 ÷ 2329 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1BC0 × 0020 ÷ 2329 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1BC0 × 0308 ÷ 2329 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1BC0 ÷ 0025 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1BC0 × 0020 ÷ 0025 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1BC0 × 0308 ÷ 0025 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1BC0 ÷ 0024 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1BC0 × 0020 ÷ 0024 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1BC0 × 0308 ÷ 0024 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1BC0 × 0022 ÷ # × [0.3] BATAK LETTER A (AS) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1BC0 × 0020 ÷ 0022 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1BC0 × 0308 × 0022 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1BC0 × 0020 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [0.3]
+× 1BC0 × 0020 × 0020 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 0020 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1BC0 × 002F ÷ # × [0.3] BATAK LETTER A (AS) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1BC0 × 0020 × 002F ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1BC0 × 0308 × 002F ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 002F ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1BC0 × 1BF2 ÷ # × [0.3] BATAK LETTER A (AS) × [28.12] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1BC0 × 0020 ÷ 1BF2 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1BC0 × 0308 × 1BF2 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.12] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1BC0 × 1B44 ÷ # × [0.3] BATAK LETTER A (AS) × [28.12] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1BC0 × 0020 ÷ 1B44 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1BC0 × 0308 × 1B44 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.12] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1BC0 × 2060 ÷ # × [0.3] BATAK LETTER A (AS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1BC0 × 0020 × 2060 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1BC0 × 0308 × 2060 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 2060 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1BC0 × 200B ÷ # × [0.3] BATAK LETTER A (AS) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1BC0 × 0020 × 200B ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1BC0 × 0308 × 200B ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 200B ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1BC0 ÷ 1F1E6 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1BC0 × 0020 ÷ 1F1E6 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1BC0 × 0308 ÷ 1F1E6 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1BC0 ÷ 261D ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1BC0 × 0020 ÷ 261D ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1BC0 × 0308 ÷ 261D ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 261D ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1BC0 ÷ 1F3FB ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1BC0 × 0020 ÷ 1F3FB ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1BC0 × 0308 ÷ 1F3FB ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1BC0 × 00AB ÷ # × [0.3] BATAK LETTER A (AS) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1BC0 × 0020 ÷ 00AB ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1BC0 × 0308 × 00AB ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1BC0 × 00BB ÷ # × [0.3] BATAK LETTER A (AS) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1BC0 × 0020 × 00BB ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1BC0 × 0308 × 00BB ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 00BB ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1BC0 × 0029 ÷ # × [0.3] BATAK LETTER A (AS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1BC0 × 0020 × 0029 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1BC0 × 0308 × 0029 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1BC0 × 0308 × 0020 × 0029 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1BC0 ÷ 0028 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1BC0 × 0020 ÷ 0028 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1BC0 × 0308 ÷ 0028 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1BC0 × 0001 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1BC0 × 0020 ÷ 0001 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1BC0 × 0308 × 0001 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1BC0 × 200D ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1BC0 × 0020 ÷ 200D ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1BC0 × 0308 × 200D ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 200D ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1BC0 ÷ 00A7 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1BC0 × 0020 ÷ 00A7 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1BC0 × 0308 ÷ 00A7 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1BC0 ÷ 50005 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1BC0 × 0020 ÷ 50005 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1BC0 × 0308 ÷ 50005 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1BC0 ÷ 0E01 ÷ # × [0.3] BATAK LETTER A (AS) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1BC0 × 0020 ÷ 0E01 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1BC0 × 0308 ÷ 0E01 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1BC0 × 3041 ÷ # × [0.3] BATAK LETTER A (AS) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1BC0 × 0020 ÷ 3041 ÷ # × [0.3] BATAK LETTER A (AS) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1BC0 × 0308 × 3041 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1BC0 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] BATAK LETTER A (AS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2014 ÷ 1B05 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2014 × 0020 ÷ 1B05 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2014 × 0308 ÷ 1B05 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 2014 ÷ 0023 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 2014 × 0020 ÷ 0023 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 2014 × 0308 ÷ 0023 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2014 ÷ 11003 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2014 × 0020 ÷ 11003 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2014 × 0308 ÷ 11003 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2014 ÷ 1BC0 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 2014 × 0020 ÷ 1BC0 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 2014 × 0308 ÷ 1BC0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 2014 × 2014 ÷ # × [0.3] EM DASH (B2) × [17.0] EM DASH (B2) ÷ [0.3]
× 2014 × 0020 × 2014 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [17.0] EM DASH (B2) ÷ [0.3]
× 2014 × 0308 × 2014 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [17.0] EM DASH (B2) ÷ [0.3]
@@ -254,13 +894,13 @@
× 2014 × 0020 ÷ 002D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 2014 × 0308 × 002D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 002D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2014 ÷ 231A ÷ # × [0.3] EM DASH (B2) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 2014 × 0020 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2014 × 0308 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 2014 × 2024 ÷ # × [0.3] EM DASH (B2) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2014 ÷ 1B50 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2014 × 0020 ÷ 1B50 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2014 × 0308 ÷ 1B50 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2014 × 2024 ÷ # × [0.3] EM DASH (B2) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2014 × 0020 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 2014 × 0308 × 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 2014 × 0308 × 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2014 × 002C ÷ # × [0.3] EM DASH (B2) × [13.02] COMMA (IS) ÷ [0.3]
× 2014 × 0020 × 002C ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -318,6 +958,14 @@
× 2014 × 0020 × 002F ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 2014 × 0308 × 002F ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 2014 × 0308 × 0020 × 002F ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2014 ÷ 1BF2 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2014 × 0020 ÷ 1BF2 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2014 × 0308 ÷ 1BF2 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2014 ÷ 1B44 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2014 × 0020 ÷ 1B44 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2014 × 0308 ÷ 1B44 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 2014 × 2060 ÷ # × [0.3] EM DASH (B2) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2014 × 0020 × 2060 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2014 × 0308 × 2060 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -338,6 +986,14 @@
× 2014 × 0020 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2014 × 0308 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2014 × 00AB ÷ # × [0.3] EM DASH (B2) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2014 × 0020 ÷ 00AB ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2014 × 0308 × 00AB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2014 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2014 × 00BB ÷ # × [0.3] EM DASH (B2) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2014 × 0020 × 00BB ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2014 × 0308 × 00BB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2014 × 0308 × 0020 × 00BB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 2014 × 0029 ÷ # × [0.3] EM DASH (B2) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 2014 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 2014 × 0308 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -370,10 +1026,22 @@
× 2014 × 0020 ÷ 3041 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2014 × 0308 × 3041 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2014 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0009 ÷ 1B05 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0009 × 0020 ÷ 1B05 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0009 × 0308 ÷ 1B05 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0009 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 0009 × 0020 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0009 × 0308 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0009 ÷ 11003 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0009 × 0020 ÷ 11003 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0009 × 0308 ÷ 11003 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0009 ÷ 1BC0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0009 × 0020 ÷ 1BC0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0009 × 0308 ÷ 1BC0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0009 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0009 × 0020 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0009 × 0308 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -426,13 +1094,13 @@
× 0009 × 0020 ÷ 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0009 × 0308 × 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0009 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0009 × 0020 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0009 × 0308 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 0009 × 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0009 ÷ 1B50 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0009 × 0020 ÷ 1B50 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0009 × 0308 ÷ 1B50 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0009 × 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0009 × 0020 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 0009 × 0308 × 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0009 × 0308 × 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0009 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] COMMA (IS) ÷ [0.3]
× 0009 × 0020 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -490,6 +1158,14 @@
× 0009 × 0020 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0009 × 0308 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 0009 × 0308 × 0020 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0009 ÷ 1BF2 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0009 × 0020 ÷ 1BF2 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0009 × 0308 ÷ 1BF2 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0009 ÷ 1B44 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0009 × 0020 ÷ 1B44 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0009 × 0308 ÷ 1B44 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0009 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0009 × 0020 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0009 × 0308 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -510,6 +1186,14 @@
× 0009 × 0020 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0009 × 0308 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0009 × 00AB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0009 × 0020 ÷ 00AB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0009 × 0308 × 00AB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0009 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0009 × 00BB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0009 × 0020 × 00BB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0009 × 0308 × 00BB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0009 × 0308 × 0020 × 00BB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0009 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0009 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0009 × 0308 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -542,10 +1226,22 @@
× 0009 × 0020 ÷ 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0009 × 0308 × 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0009 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00B4 × 1B05 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00B4 × 0020 ÷ 1B05 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00B4 × 0308 × 1B05 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 00B4 × 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] NUMBER SIGN (AL) ÷ [0.3]
× 00B4 × 0020 ÷ 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 00B4 × 0308 × 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] NUMBER SIGN (AL) ÷ [0.3]
× 00B4 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 00B4 × 11003 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00B4 × 0020 ÷ 11003 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00B4 × 0308 × 11003 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00B4 × 1BC0 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] BATAK LETTER A (AS) ÷ [0.3]
+× 00B4 × 0020 ÷ 1BC0 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 00B4 × 0308 × 1BC0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] BATAK LETTER A (AS) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 00B4 × 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] EM DASH (B2) ÷ [0.3]
× 00B4 × 0020 ÷ 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 00B4 × 0308 × 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] EM DASH (B2) ÷ [0.3]
@@ -598,10 +1294,10 @@
× 00B4 × 0020 ÷ 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 00B4 × 0308 × 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 00B4 × 0308 × 0020 ÷ 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00B4 × 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] WATCH (ID) ÷ [0.3]
-× 00B4 × 0020 ÷ 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00B4 × 0308 × 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] WATCH (ID) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 00B4 × 1B50 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00B4 × 0020 ÷ 1B50 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00B4 × 0308 × 1B50 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 00B4 × 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] ONE DOT LEADER (IN) ÷ [0.3]
× 00B4 × 0020 ÷ 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00B4 × 0308 × 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] ONE DOT LEADER (IN) ÷ [0.3]
@@ -662,6 +1358,14 @@
× 00B4 × 0020 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 00B4 × 0308 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 00B4 × 0308 × 0020 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00B4 × 1BF2 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00B4 × 0020 ÷ 1BF2 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00B4 × 0308 × 1BF2 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00B4 × 1B44 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00B4 × 0020 ÷ 1B44 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00B4 × 0308 × 1B44 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 00B4 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00B4 × 0020 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00B4 × 0308 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -682,6 +1386,14 @@
× 00B4 × 0020 ÷ 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00B4 × 0308 × 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00B4 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00B4 × 00AB ÷ # × [0.3] ACUTE ACCENT (BB) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00B4 × 0020 ÷ 00AB ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00B4 × 0308 × 00AB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00B4 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00B4 × 00BB ÷ # × [0.3] ACUTE ACCENT (BB) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00B4 × 0020 × 00BB ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00B4 × 0308 × 00BB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00B4 × 0308 × 0020 × 00BB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 00B4 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 00B4 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 00B4 × 0308 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -714,10 +1426,22 @@
× 00B4 × 0020 ÷ 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00B4 × 0308 × 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00B4 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 000B ÷ 1B05 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 000B ÷ 0020 ÷ 1B05 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 000B ÷ 0308 ÷ 1B05 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 1B05 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 000B ÷ 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] NUMBER SIGN (AL) ÷ [0.3]
× 000B ÷ 0020 ÷ 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 000B ÷ 0308 × 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 000B ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 000B ÷ 11003 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000B ÷ 0020 ÷ 11003 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000B ÷ 0308 ÷ 11003 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 11003 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000B ÷ 1BC0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] BATAK LETTER A (AS) ÷ [0.3]
+× 000B ÷ 0020 ÷ 1BC0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 000B ÷ 0308 ÷ 1BC0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 000B ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] EM DASH (B2) ÷ [0.3]
× 000B ÷ 0020 ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 000B ÷ 0308 ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -770,10 +1494,10 @@
× 000B ÷ 0020 ÷ 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 000B ÷ 0308 × 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 000B ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000B ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] WATCH (ID) ÷ [0.3]
-× 000B ÷ 0020 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000B ÷ 0308 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 000B ÷ 1B50 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 000B ÷ 0020 ÷ 1B50 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 000B ÷ 0308 ÷ 1B50 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 1B50 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 000B ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000B ÷ 0020 ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000B ÷ 0308 × 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -812,7 +1536,7 @@
× 000B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000B ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000B ÷ 0020 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 000B ÷ 0308 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000B ÷ 0308 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000B ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000B ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] PERCENT SIGN (PO) ÷ [0.3]
× 000B ÷ 0020 ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -834,6 +1558,14 @@
× 000B ÷ 0020 × 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 000B ÷ 0308 × 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 000B ÷ 0308 × 0020 × 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 000B ÷ 1BF2 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000B ÷ 0020 ÷ 1BF2 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000B ÷ 0308 ÷ 1BF2 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000B ÷ 1B44 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 000B ÷ 0020 ÷ 1B44 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 000B ÷ 0308 ÷ 1B44 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 1B44 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 000B ÷ 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] WORD JOINER (WJ) ÷ [0.3]
× 000B ÷ 0020 × 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 000B ÷ 0308 × 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -854,6 +1586,14 @@
× 000B ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000B ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000B ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000B ÷ 00AB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000B ÷ 0020 ÷ 00AB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000B ÷ 0308 × 00AB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000B ÷ 0308 × 0020 ÷ 00AB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000B ÷ 00BB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 000B ÷ 0020 × 00BB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 000B ÷ 0308 × 00BB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 000B ÷ 0308 × 0020 × 00BB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 000B ÷ 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 000B ÷ 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 000B ÷ 0308 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -886,10 +1626,22 @@
× 000B ÷ 0020 ÷ 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000B ÷ 0308 × 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000B ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× FFFC ÷ 1B05 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× FFFC × 0020 ÷ 1B05 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× FFFC × 0308 ÷ 1B05 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× FFFC ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] NUMBER SIGN (AL) ÷ [0.3]
× FFFC × 0020 ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× FFFC × 0308 ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] NUMBER SIGN (AL) ÷ [0.3]
× FFFC × 0308 × 0020 ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× FFFC ÷ 11003 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× FFFC × 0020 ÷ 11003 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× FFFC × 0308 ÷ 11003 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 11003 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× FFFC ÷ 1BC0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] BATAK LETTER A (AS) ÷ [0.3]
+× FFFC × 0020 ÷ 1BC0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× FFFC × 0308 ÷ 1BC0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] BATAK LETTER A (AS) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× FFFC ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] EM DASH (B2) ÷ [0.3]
× FFFC × 0020 ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× FFFC × 0308 ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] EM DASH (B2) ÷ [0.3]
@@ -942,10 +1694,10 @@
× FFFC × 0020 ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× FFFC × 0308 ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HYPHEN-MINUS (HY) ÷ [0.3]
× FFFC × 0308 × 0020 ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× FFFC ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] WATCH (ID) ÷ [0.3]
-× FFFC × 0020 ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× FFFC × 0308 ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] WATCH (ID) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× FFFC ÷ 1B50 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× FFFC × 0020 ÷ 1B50 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× FFFC × 0308 ÷ 1B50 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× FFFC ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] ONE DOT LEADER (IN) ÷ [0.3]
× FFFC × 0020 ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× FFFC × 0308 ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] ONE DOT LEADER (IN) ÷ [0.3]
@@ -1006,6 +1758,14 @@
× FFFC × 0020 × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× FFFC × 0308 × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× FFFC × 0308 × 0020 × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× FFFC ÷ 1BF2 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] BATAK PANGOLAT (VF) ÷ [0.3]
+× FFFC × 0020 ÷ 1BF2 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× FFFC × 0308 ÷ 1BF2 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] BATAK PANGOLAT (VF) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× FFFC ÷ 1B44 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× FFFC × 0020 ÷ 1B44 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× FFFC × 0308 ÷ 1B44 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× FFFC × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× FFFC × 0020 × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× FFFC × 0308 × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -1026,6 +1786,14 @@
× FFFC × 0020 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× FFFC × 0308 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× FFFC × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× FFFC × 00AB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× FFFC × 0020 ÷ 00AB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× FFFC × 0308 × 00AB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× FFFC × 0308 × 0020 ÷ 00AB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× FFFC × 00BB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× FFFC × 0020 × 00BB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× FFFC × 0308 × 00BB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× FFFC × 0308 × 0020 × 00BB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× FFFC × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× FFFC × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× FFFC × 0308 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -1058,10 +1826,22 @@
× FFFC × 0020 ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× FFFC × 0308 ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× FFFC × 0308 × 0020 ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 007D ÷ 1B05 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 007D × 0020 ÷ 1B05 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 007D × 0308 ÷ 1B05 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 007D ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 007D × 0020 ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 007D × 0308 ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 007D ÷ 11003 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 007D × 0020 ÷ 11003 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 007D × 0308 ÷ 11003 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 11003 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 007D ÷ 1BC0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 007D × 0020 ÷ 1BC0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 007D × 0308 ÷ 1BC0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 007D ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 007D × 0020 ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 007D × 0308 ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -1114,13 +1894,13 @@
× 007D × 0020 ÷ 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 007D × 0308 × 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 007D ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 007D × 0020 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 007D × 0308 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 007D × 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 007D ÷ 1B50 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 007D × 0020 ÷ 1B50 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 007D × 0308 ÷ 1B50 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 007D × 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 007D × 0020 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 007D × 0308 × 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 007D × 0308 × 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 007D × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] COMMA (IS) ÷ [0.3]
× 007D × 0020 × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -1178,6 +1958,14 @@
× 007D × 0020 × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 007D × 0308 × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 007D × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 007D ÷ 1BF2 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 007D × 0020 ÷ 1BF2 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 007D × 0308 ÷ 1BF2 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 007D ÷ 1B44 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 007D × 0020 ÷ 1B44 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 007D × 0308 ÷ 1B44 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 007D × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 007D × 0020 × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 007D × 0308 × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -1198,6 +1986,14 @@
× 007D × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 007D × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 007D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 007D × 00AB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 007D × 0020 ÷ 00AB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 007D × 0308 × 00AB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 007D × 0308 × 0020 ÷ 00AB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 007D × 00BB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 007D × 0020 × 00BB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 007D × 0308 × 00BB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 007D × 0308 × 0020 × 00BB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 007D × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 007D × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 007D × 0308 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -1230,10 +2026,22 @@
× 007D × 0020 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 007D × 0308 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 007D × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 000D ÷ 1B05 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 000D ÷ 0020 ÷ 1B05 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 000D ÷ 0308 ÷ 1B05 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 1B05 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 000D ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] NUMBER SIGN (AL) ÷ [0.3]
× 000D ÷ 0020 ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 000D ÷ 0308 × 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 000D ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 000D ÷ 11003 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000D ÷ 0020 ÷ 11003 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000D ÷ 0308 ÷ 11003 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 11003 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000D ÷ 1BC0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] BATAK LETTER A (AS) ÷ [0.3]
+× 000D ÷ 0020 ÷ 1BC0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 000D ÷ 0308 ÷ 1BC0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 000D ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] EM DASH (B2) ÷ [0.3]
× 000D ÷ 0020 ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 000D ÷ 0308 ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -1286,10 +2094,10 @@
× 000D ÷ 0020 ÷ 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 000D ÷ 0308 × 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 000D ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000D ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] WATCH (ID) ÷ [0.3]
-× 000D ÷ 0020 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000D ÷ 0308 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 000D ÷ 1B50 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 000D ÷ 0020 ÷ 1B50 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 000D ÷ 0308 ÷ 1B50 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 1B50 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 000D ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] ONE DOT LEADER (IN) ÷ [0.3]
× 000D ÷ 0020 ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000D ÷ 0308 × 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -1328,7 +2136,7 @@
× 000D ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000D ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000D ÷ 0020 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 000D ÷ 0308 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000D ÷ 0308 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000D ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000D ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] PERCENT SIGN (PO) ÷ [0.3]
× 000D ÷ 0020 ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -1350,6 +2158,14 @@
× 000D ÷ 0020 × 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 000D ÷ 0308 × 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 000D ÷ 0308 × 0020 × 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 000D ÷ 1BF2 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000D ÷ 0020 ÷ 1BF2 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000D ÷ 0308 ÷ 1BF2 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000D ÷ 1B44 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 000D ÷ 0020 ÷ 1B44 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 000D ÷ 0308 ÷ 1B44 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 1B44 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 000D ÷ 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] WORD JOINER (WJ) ÷ [0.3]
× 000D ÷ 0020 × 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 000D ÷ 0308 × 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -1370,6 +2186,14 @@
× 000D ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000D ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000D ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000D ÷ 00AB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000D ÷ 0020 ÷ 00AB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000D ÷ 0308 × 00AB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000D ÷ 0308 × 0020 ÷ 00AB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000D ÷ 00BB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 000D ÷ 0020 × 00BB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 000D ÷ 0308 × 00BB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 000D ÷ 0308 × 0020 × 00BB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 000D ÷ 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 000D ÷ 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 000D ÷ 0308 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -1402,10 +2226,22 @@
× 000D ÷ 0020 ÷ 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000D ÷ 0308 × 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000D ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0021 ÷ 1B05 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0021 × 0020 ÷ 1B05 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0021 × 0308 ÷ 1B05 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0021 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 0021 × 0020 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0021 × 0308 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0021 ÷ 11003 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0021 × 0020 ÷ 11003 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0021 × 0308 ÷ 11003 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0021 ÷ 1BC0 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0021 × 0020 ÷ 1BC0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0021 × 0308 ÷ 1BC0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0021 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0021 × 0020 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0021 × 0308 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -1458,10 +2294,10 @@
× 0021 × 0020 ÷ 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0021 × 0308 × 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0021 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0021 × 0020 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0021 × 0308 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0021 ÷ 1B50 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0021 × 0020 ÷ 1B50 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0021 × 0308 ÷ 1B50 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0021 × 0020 ÷ 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0021 × 0308 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -1522,6 +2358,14 @@
× 0021 × 0020 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0021 × 0308 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 0021 × 0308 × 0020 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0021 ÷ 1BF2 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0021 × 0020 ÷ 1BF2 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0021 × 0308 ÷ 1BF2 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0021 ÷ 1B44 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0021 × 0020 ÷ 1B44 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0021 × 0308 ÷ 1B44 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0021 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0021 × 0020 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0021 × 0308 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -1542,6 +2386,14 @@
× 0021 × 0020 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0021 × 0308 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0021 × 00AB ÷ # × [0.3] EXCLAMATION MARK (EX) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0021 × 0020 ÷ 00AB ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0021 × 0308 × 00AB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0021 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0021 × 00BB ÷ # × [0.3] EXCLAMATION MARK (EX) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0021 × 0020 × 00BB ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0021 × 0308 × 00BB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0021 × 0308 × 0020 × 00BB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0021 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0021 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0021 × 0308 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -1574,10 +2426,22 @@
× 0021 × 0020 ÷ 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0021 × 0308 × 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0021 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00A0 × 1B05 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00A0 × 0020 ÷ 1B05 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00A0 × 0308 × 1B05 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 00A0 × 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] NUMBER SIGN (AL) ÷ [0.3]
× 00A0 × 0020 ÷ 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 00A0 × 0308 × 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] NUMBER SIGN (AL) ÷ [0.3]
× 00A0 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 00A0 × 11003 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00A0 × 0020 ÷ 11003 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00A0 × 0308 × 11003 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00A0 × 1BC0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] BATAK LETTER A (AS) ÷ [0.3]
+× 00A0 × 0020 ÷ 1BC0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 00A0 × 0308 × 1BC0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] BATAK LETTER A (AS) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 00A0 × 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] EM DASH (B2) ÷ [0.3]
× 00A0 × 0020 ÷ 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 00A0 × 0308 × 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] EM DASH (B2) ÷ [0.3]
@@ -1630,10 +2494,10 @@
× 00A0 × 0020 ÷ 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 00A0 × 0308 × 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 00A0 × 0308 × 0020 ÷ 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A0 × 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] WATCH (ID) ÷ [0.3]
-× 00A0 × 0020 ÷ 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00A0 × 0308 × 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] WATCH (ID) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 00A0 × 1B50 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00A0 × 0020 ÷ 1B50 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00A0 × 0308 × 1B50 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 00A0 × 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A0 × 0020 ÷ 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A0 × 0308 × 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -1694,6 +2558,14 @@
× 00A0 × 0020 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 00A0 × 0308 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] SOLIDUS (SY) ÷ [0.3]
× 00A0 × 0308 × 0020 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00A0 × 1BF2 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00A0 × 0020 ÷ 1BF2 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00A0 × 0308 × 1BF2 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00A0 × 1B44 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00A0 × 0020 ÷ 1B44 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00A0 × 0308 × 1B44 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 00A0 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00A0 × 0020 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00A0 × 0308 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -1714,6 +2586,14 @@
× 00A0 × 0020 ÷ 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A0 × 0308 × 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A0 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A0 × 00AB ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00A0 × 0020 ÷ 00AB ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00A0 × 0308 × 00AB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00A0 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00A0 × 00BB ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00A0 × 0020 × 00BB ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00A0 × 0308 × 00BB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00A0 × 0308 × 0020 × 00BB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 00A0 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 00A0 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 00A0 × 0308 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -1746,10 +2626,22 @@
× 00A0 × 0020 ÷ 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00A0 × 0308 × 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00A0 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× AC00 ÷ 1B05 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× AC00 × 0020 ÷ 1B05 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× AC00 × 0308 ÷ 1B05 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× AC00 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× AC00 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× AC00 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× AC00 ÷ 11003 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× AC00 × 0020 ÷ 11003 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× AC00 × 0308 ÷ 11003 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× AC00 ÷ 1BC0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× AC00 × 0020 ÷ 1BC0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× AC00 × 0308 ÷ 1BC0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× AC00 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× AC00 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× AC00 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -1802,10 +2694,10 @@
× AC00 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× AC00 × 0308 × 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC00 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× AC00 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC00 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× AC00 ÷ 1B50 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× AC00 × 0020 ÷ 1B50 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× AC00 × 0308 ÷ 1B50 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× AC00 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC00 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC00 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -1866,6 +2758,14 @@
× AC00 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× AC00 × 0308 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× AC00 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× AC00 ÷ 1BF2 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× AC00 × 0020 ÷ 1BF2 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× AC00 × 0308 ÷ 1BF2 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× AC00 ÷ 1B44 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× AC00 × 0020 ÷ 1B44 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× AC00 × 0308 ÷ 1B44 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× AC00 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× AC00 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× AC00 × 0308 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -1886,6 +2786,14 @@
× AC00 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC00 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC00 × 00AB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× AC00 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× AC00 × 0308 × 00AB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× AC00 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× AC00 × 00BB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× AC00 × 0020 × 00BB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× AC00 × 0308 × 00BB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× AC00 × 0308 × 0020 × 00BB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× AC00 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× AC00 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× AC00 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -1918,10 +2826,22 @@
× AC00 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× AC00 × 0308 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× AC00 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× AC01 ÷ 1B05 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× AC01 × 0020 ÷ 1B05 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× AC01 × 0308 ÷ 1B05 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× AC01 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× AC01 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× AC01 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× AC01 ÷ 11003 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× AC01 × 0020 ÷ 11003 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× AC01 × 0308 ÷ 11003 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× AC01 ÷ 1BC0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× AC01 × 0020 ÷ 1BC0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× AC01 × 0308 ÷ 1BC0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× AC01 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× AC01 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× AC01 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -1974,10 +2894,10 @@
× AC01 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× AC01 × 0308 × 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC01 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× AC01 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC01 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× AC01 ÷ 1B50 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× AC01 × 0020 ÷ 1B50 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× AC01 × 0308 ÷ 1B50 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× AC01 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC01 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× AC01 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -2038,6 +2958,14 @@
× AC01 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× AC01 × 0308 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× AC01 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× AC01 ÷ 1BF2 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× AC01 × 0020 ÷ 1BF2 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× AC01 × 0308 ÷ 1BF2 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× AC01 ÷ 1B44 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× AC01 × 0020 ÷ 1B44 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× AC01 × 0308 ÷ 1B44 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× AC01 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× AC01 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× AC01 × 0308 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -2058,6 +2986,14 @@
× AC01 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC01 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× AC01 × 00AB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× AC01 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× AC01 × 0308 × 00AB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× AC01 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× AC01 × 00BB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× AC01 × 0020 × 00BB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× AC01 × 0308 × 00BB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× AC01 × 0308 × 0020 × 00BB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× AC01 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× AC01 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× AC01 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -2090,10 +3026,22 @@
× AC01 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× AC01 × 0308 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× AC01 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 05D0 ÷ 1B05 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 05D0 × 0020 ÷ 1B05 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 05D0 × 0308 ÷ 1B05 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 05D0 × 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 05D0 × 0020 ÷ 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 05D0 × 0308 × 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 05D0 ÷ 11003 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 05D0 × 0020 ÷ 11003 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 05D0 × 0308 ÷ 11003 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 05D0 ÷ 1BC0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 05D0 × 0020 ÷ 1BC0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 05D0 × 0308 ÷ 1BC0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 05D0 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 05D0 × 0020 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 05D0 × 0308 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -2146,10 +3094,10 @@
× 05D0 × 0020 ÷ 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 05D0 × 0308 × 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 05D0 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 05D0 × 0020 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 05D0 × 0308 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 05D0 ÷ 1B50 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 05D0 × 0020 ÷ 1B50 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 05D0 × 0308 ÷ 1B50 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 05D0 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 05D0 × 0020 ÷ 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 05D0 × 0308 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -2186,9 +3134,9 @@
× 05D0 × 0020 ÷ 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 05D0 × 0308 × 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-#× 05D0 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 05D0 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 05D0 × 0020 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 05D0 × 0308 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 05D0 × 0308 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 05D0 × 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 05D0 × 0020 ÷ 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -2210,6 +3158,14 @@
× 05D0 × 0020 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 05D0 × 0308 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 05D0 × 0308 × 0020 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 05D0 ÷ 1BF2 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 05D0 × 0020 ÷ 1BF2 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 05D0 × 0308 ÷ 1BF2 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 05D0 ÷ 1B44 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 05D0 × 0020 ÷ 1B44 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 05D0 × 0308 ÷ 1B44 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 05D0 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 05D0 × 0020 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 05D0 × 0308 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -2230,6 +3186,14 @@
× 05D0 × 0020 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 05D0 × 0308 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 05D0 × 00AB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 05D0 × 0020 ÷ 00AB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 05D0 × 0308 × 00AB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 05D0 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 05D0 × 00BB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 05D0 × 0020 × 00BB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 05D0 × 0308 × 00BB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 05D0 × 0308 × 0020 × 00BB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 05D0 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 05D0 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 05D0 × 0308 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -2262,10 +3226,22 @@
× 05D0 × 0020 ÷ 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 05D0 × 0308 × 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 05D0 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 002D ÷ 1B05 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 002D × 0020 ÷ 1B05 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 002D × 0308 ÷ 1B05 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 002D ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 002D × 0020 ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 002D × 0308 ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 002D ÷ 11003 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002D × 0020 ÷ 11003 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002D × 0308 ÷ 11003 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 11003 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002D ÷ 1BC0 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 002D × 0020 ÷ 1BC0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 002D × 0308 ÷ 1BC0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 002D ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 002D × 0020 ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 002D × 0308 ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -2318,13 +3294,13 @@
× 002D × 0020 ÷ 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 002D × 0308 × 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002D ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002D × 0020 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002D × 0308 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 002D × 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002D ÷ 1B50 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002D × 0020 ÷ 1B50 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002D × 0308 ÷ 1B50 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002D × 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002D × 0020 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 002D × 0308 × 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002D × 0308 × 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002D × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] COMMA (IS) ÷ [0.3]
× 002D × 0020 × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2382,6 +3358,14 @@
× 002D × 0020 × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 002D × 0308 × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 002D × 0308 × 0020 × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 002D ÷ 1BF2 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002D × 0020 ÷ 1BF2 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002D × 0308 ÷ 1BF2 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002D ÷ 1B44 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 002D × 0020 ÷ 1B44 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 002D × 0308 ÷ 1B44 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 002D × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002D × 0020 × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002D × 0308 × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -2402,6 +3386,14 @@
× 002D × 0020 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002D × 0308 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002D × 00AB ÷ # × [0.3] HYPHEN-MINUS (HY) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002D × 0020 ÷ 00AB ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002D × 0308 × 00AB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002D × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002D × 00BB ÷ # × [0.3] HYPHEN-MINUS (HY) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 002D × 0020 × 00BB ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 002D × 0308 × 00BB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 002D × 0308 × 0020 × 00BB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 002D × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 002D × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 002D × 0308 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -2434,182 +3426,222 @@
× 002D × 0020 ÷ 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002D × 0308 × 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002D × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 231A ÷ 0023 ÷ # × [0.3] WATCH (ID) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 231A × 0020 ÷ 0023 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 231A × 0308 ÷ 0023 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0023 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 231A ÷ 2014 ÷ # × [0.3] WATCH (ID) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 231A × 0020 ÷ 2014 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 231A × 0308 ÷ 2014 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 2014 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 231A × 0009 ÷ # × [0.3] WATCH (ID) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 231A × 0020 ÷ 0009 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 231A × 0308 × 0009 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0009 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 231A ÷ 00B4 ÷ # × [0.3] WATCH (ID) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 231A × 0020 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 231A × 0308 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 231A × 000B ÷ # × [0.3] WATCH (ID) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 231A × 0020 × 000B ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 231A × 0308 × 000B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 231A × 0308 × 0020 × 000B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 231A ÷ FFFC ÷ # × [0.3] WATCH (ID) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 231A × 0020 ÷ FFFC ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 231A × 0308 ÷ FFFC ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ FFFC ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 231A × 007D ÷ # × [0.3] WATCH (ID) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 0020 × 007D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 0308 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 0308 × 0020 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 000D ÷ # × [0.3] WATCH (ID) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 231A × 0020 × 000D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 231A × 0308 × 000D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 231A × 0308 × 0020 × 000D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 231A × 0021 ÷ # × [0.3] WATCH (ID) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 231A × 0020 × 0021 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 231A × 0308 × 0021 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 231A × 0308 × 0020 × 0021 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 231A × 00A0 ÷ # × [0.3] WATCH (ID) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 231A × 0020 ÷ 00A0 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 231A × 0308 × 00A0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 231A ÷ AC00 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 231A × 0020 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 231A × 0308 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 231A ÷ AC01 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 231A × 0020 ÷ AC01 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 231A × 0308 ÷ AC01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ AC01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 231A ÷ 05D0 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 231A × 0020 ÷ 05D0 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 231A × 0308 ÷ 05D0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 231A × 002D ÷ # × [0.3] WATCH (ID) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 231A × 0020 ÷ 002D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 231A × 0308 × 002D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 002D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 231A ÷ 231A ÷ # × [0.3] WATCH (ID) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 231A × 0020 ÷ 231A ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 231A × 0308 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 231A × 2024 ÷ # × [0.3] WATCH (ID) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 0020 ÷ 2024 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 0308 × 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 002C ÷ # × [0.3] WATCH (ID) × [13.02] COMMA (IS) ÷ [0.3]
-× 231A × 0020 × 002C ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 231A × 0308 × 002C ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 231A × 0308 × 0020 × 002C ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 231A ÷ 1100 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 231A × 0020 ÷ 1100 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 231A × 0308 ÷ 1100 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 1100 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 231A ÷ 11A8 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 231A × 0020 ÷ 11A8 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 231A × 0308 ÷ 11A8 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 231A ÷ 1160 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 231A × 0020 ÷ 1160 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 231A × 0308 ÷ 1160 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 1160 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 231A × 000A ÷ # × [0.3] WATCH (ID) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 231A × 0020 × 000A ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 231A × 0308 × 000A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 231A × 0308 × 0020 × 000A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 231A × 0085 ÷ # × [0.3] WATCH (ID) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 231A × 0020 × 0085 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 231A × 0308 × 0085 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 231A × 0308 × 0020 × 0085 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 231A × 17D6 ÷ # × [0.3] WATCH (ID) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 231A × 0020 ÷ 17D6 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 231A × 0308 × 17D6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 231A ÷ 0030 ÷ # × [0.3] WATCH (ID) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A × 0020 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A × 0308 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A ÷ 2329 ÷ # × [0.3] WATCH (ID) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 231A × 0020 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 231A × 0308 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 231A × 0025 ÷ # × [0.3] WATCH (ID) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
-× 231A × 0020 ÷ 0025 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 231A × 0308 × 0025 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0025 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 231A ÷ 0024 ÷ # × [0.3] WATCH (ID) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 231A × 0020 ÷ 0024 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 231A × 0308 ÷ 0024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 231A × 0022 ÷ # × [0.3] WATCH (ID) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 231A × 0020 ÷ 0022 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 231A × 0308 × 0022 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0022 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 231A × 0020 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [0.3]
-× 231A × 0020 × 0020 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 231A × 0308 × 0020 × 0020 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 231A × 002F ÷ # × [0.3] WATCH (ID) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 231A × 0020 × 002F ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 231A × 0308 × 002F ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 231A × 0308 × 0020 × 002F ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 231A × 2060 ÷ # × [0.3] WATCH (ID) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 231A × 0020 × 2060 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 231A × 0308 × 2060 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 231A × 0308 × 0020 × 2060 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 231A × 200B ÷ # × [0.3] WATCH (ID) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 231A × 0020 × 200B ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 231A × 0308 × 200B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 231A × 0308 × 0020 × 200B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 231A ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 231A × 0020 ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 231A × 0308 ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 231A ÷ 261D ÷ # × [0.3] WATCH (ID) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 231A × 0020 ÷ 261D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 231A × 0308 ÷ 261D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 261D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 231A ÷ 1F3FB ÷ # × [0.3] WATCH (ID) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 231A × 0020 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 231A × 0308 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 231A × 0029 ÷ # × [0.3] WATCH (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 231A × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 231A × 0308 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 231A × 0308 × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 231A ÷ 0028 ÷ # × [0.3] WATCH (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 231A × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 231A × 0308 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 231A × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 231A × 0020 ÷ 0001 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 231A × 0308 × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0001 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 231A × 200D ÷ # × [0.3] WATCH (ID) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 231A × 0020 ÷ 200D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 231A × 0308 × 200D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 200D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 231A ÷ 00A7 ÷ # × [0.3] WATCH (ID) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 231A × 0020 ÷ 00A7 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 231A × 0308 ÷ 00A7 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 231A ÷ 50005 ÷ # × [0.3] WATCH (ID) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 231A × 0020 ÷ 50005 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 231A × 0308 ÷ 50005 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 50005 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 231A ÷ 0E01 ÷ # × [0.3] WATCH (ID) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 231A × 0020 ÷ 0E01 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 231A × 0308 ÷ 0E01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 231A × 3041 ÷ # × [0.3] WATCH (ID) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 231A × 0020 ÷ 3041 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 231A × 0308 × 3041 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 3041 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1B50 ÷ 1B05 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B50 × 0020 ÷ 1B05 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B50 × 0308 ÷ 1B05 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B50 ÷ 0023 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B50 × 0020 ÷ 0023 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B50 × 0308 ÷ 0023 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B50 ÷ 11003 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B50 × 0020 ÷ 11003 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B50 × 0308 ÷ 11003 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B50 ÷ 1BC0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B50 × 0020 ÷ 1BC0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B50 × 0308 ÷ 1BC0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B50 ÷ 2014 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1B50 × 0020 ÷ 2014 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1B50 × 0308 ÷ 2014 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1B50 × 0009 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B50 × 0020 ÷ 0009 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B50 × 0308 × 0009 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B50 ÷ 00B4 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B50 × 0020 ÷ 00B4 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B50 × 0308 ÷ 00B4 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B50 × 000B ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B50 × 0020 × 000B ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B50 × 0308 × 000B ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 000B ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B50 ÷ FFFC ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B50 × 0020 ÷ FFFC ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B50 × 0308 ÷ FFFC ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B50 × 007D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B50 × 0020 × 007D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B50 × 0308 × 007D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 007D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B50 × 000D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B50 × 0020 × 000D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B50 × 0308 × 000D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 000D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B50 × 0021 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B50 × 0020 × 0021 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B50 × 0308 × 0021 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 0021 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B50 × 00A0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B50 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B50 × 0308 × 00A0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B50 ÷ AC00 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B50 × 0020 ÷ AC00 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B50 × 0308 ÷ AC00 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B50 ÷ AC01 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B50 × 0020 ÷ AC01 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B50 × 0308 ÷ AC01 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B50 ÷ 05D0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B50 × 0020 ÷ 05D0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B50 × 0308 ÷ 05D0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B50 × 002D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B50 × 0020 ÷ 002D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B50 × 0308 × 002D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 002D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B50 ÷ 1B50 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B50 × 0020 ÷ 1B50 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B50 × 0308 ÷ 1B50 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B50 × 2024 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B50 × 0020 ÷ 2024 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B50 × 0308 × 2024 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B50 × 002C ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [13.02] COMMA (IS) ÷ [0.3]
+× 1B50 × 0020 × 002C ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1B50 × 0308 × 002C ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 002C ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1B50 ÷ 1100 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B50 × 0020 ÷ 1100 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B50 × 0308 ÷ 1100 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B50 ÷ 11A8 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B50 × 0020 ÷ 11A8 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B50 × 0308 ÷ 11A8 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B50 ÷ 1160 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B50 × 0020 ÷ 1160 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B50 × 0308 ÷ 1160 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B50 × 000A ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B50 × 0020 × 000A ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B50 × 0308 × 000A ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 000A ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B50 × 0085 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B50 × 0020 × 0085 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B50 × 0308 × 0085 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 0085 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B50 × 17D6 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B50 × 0020 ÷ 17D6 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B50 × 0308 × 17D6 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B50 ÷ 0030 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B50 × 0020 ÷ 0030 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B50 × 0308 ÷ 0030 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B50 ÷ 2329 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B50 × 0020 ÷ 2329 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B50 × 0308 ÷ 2329 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B50 × 0025 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
+× 1B50 × 0020 ÷ 0025 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1B50 × 0308 × 0025 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1B50 ÷ 0024 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B50 × 0020 ÷ 0024 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B50 × 0308 ÷ 0024 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B50 × 0022 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1B50 × 0020 ÷ 0022 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1B50 × 0308 × 0022 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1B50 × 0020 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B50 × 0020 × 0020 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 0020 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B50 × 002F ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1B50 × 0020 × 002F ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1B50 × 0308 × 002F ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 002F ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1B50 ÷ 1BF2 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B50 × 0020 ÷ 1BF2 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B50 × 0308 ÷ 1BF2 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B50 ÷ 1B44 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B50 × 0020 ÷ 1B44 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B50 × 0308 ÷ 1B44 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B50 × 2060 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B50 × 0020 × 2060 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B50 × 0308 × 2060 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 2060 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B50 × 200B ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B50 × 0020 × 200B ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B50 × 0308 × 200B ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 200B ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B50 ÷ 1F1E6 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B50 × 0020 ÷ 1F1E6 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B50 × 0308 ÷ 1F1E6 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B50 ÷ 261D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B50 × 0020 ÷ 261D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B50 × 0308 ÷ 261D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 261D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B50 ÷ 1F3FB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B50 × 0020 ÷ 1F3FB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B50 × 0308 ÷ 1F3FB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B50 × 00AB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B50 × 0020 ÷ 00AB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B50 × 0308 × 00AB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B50 × 00BB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B50 × 0020 × 00BB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B50 × 0308 × 00BB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 00BB ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B50 × 0029 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B50 × 0020 × 0029 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B50 × 0308 × 0029 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B50 × 0308 × 0020 × 0029 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B50 ÷ 0028 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B50 × 0020 ÷ 0028 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B50 × 0308 ÷ 0028 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B50 × 0001 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B50 × 0020 ÷ 0001 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B50 × 0308 × 0001 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B50 × 200D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B50 × 0020 ÷ 200D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B50 × 0308 × 200D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 200D ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B50 ÷ 00A7 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B50 × 0020 ÷ 00A7 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B50 × 0308 ÷ 00A7 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B50 ÷ 50005 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B50 × 0020 ÷ 50005 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B50 × 0308 ÷ 50005 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B50 ÷ 0E01 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B50 × 0020 ÷ 0E01 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B50 × 0308 ÷ 0E01 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B50 × 3041 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1B50 × 0020 ÷ 3041 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1B50 × 0308 × 3041 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1B50 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] BALINESE DIGIT ZERO (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2024 ÷ 1B05 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2024 × 0020 ÷ 1B05 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2024 × 0308 ÷ 1B05 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 2024 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 2024 × 0020 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 2024 × 0308 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2024 ÷ 11003 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2024 × 0020 ÷ 11003 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2024 × 0308 ÷ 11003 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2024 ÷ 1BC0 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 2024 × 0020 ÷ 1BC0 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 2024 × 0308 ÷ 1BC0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 2024 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 2024 × 0020 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 2024 × 0308 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -2662,10 +3694,10 @@
× 2024 × 0020 ÷ 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 2024 × 0308 × 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2024 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 2024 × 0020 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2024 × 0308 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 2024 ÷ 1B50 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2024 × 0020 ÷ 1B50 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2024 × 0308 ÷ 1B50 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2024 × 0020 ÷ 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2024 × 0308 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -2726,6 +3758,14 @@
× 2024 × 0020 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 2024 × 0308 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 2024 × 0308 × 0020 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2024 ÷ 1BF2 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2024 × 0020 ÷ 1BF2 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2024 × 0308 ÷ 1BF2 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2024 ÷ 1B44 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2024 × 0020 ÷ 1B44 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2024 × 0308 ÷ 1B44 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 2024 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2024 × 0020 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2024 × 0308 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -2746,6 +3786,14 @@
× 2024 × 0020 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2024 × 0308 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2024 × 00AB ÷ # × [0.3] ONE DOT LEADER (IN) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2024 × 0020 ÷ 00AB ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2024 × 0308 × 00AB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2024 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2024 × 00BB ÷ # × [0.3] ONE DOT LEADER (IN) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2024 × 0020 × 00BB ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2024 × 0308 × 00BB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2024 × 0308 × 0020 × 00BB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 2024 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 2024 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 2024 × 0308 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -2778,10 +3826,22 @@
× 2024 × 0020 ÷ 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2024 × 0308 × 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2024 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 002C ÷ 1B05 ÷ # × [0.3] COMMA (IS) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 002C × 0020 ÷ 1B05 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 002C × 0308 ÷ 1B05 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 002C × 0023 ÷ # × [0.3] COMMA (IS) × [29.0] NUMBER SIGN (AL) ÷ [0.3]
× 002C × 0020 ÷ 0023 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 002C × 0308 × 0023 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [29.0] NUMBER SIGN (AL) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 0023 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 002C ÷ 11003 ÷ # × [0.3] COMMA (IS) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002C × 0020 ÷ 11003 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002C × 0308 ÷ 11003 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 11003 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002C ÷ 1BC0 ÷ # × [0.3] COMMA (IS) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 002C × 0020 ÷ 1BC0 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 002C × 0308 ÷ 1BC0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 002C ÷ 2014 ÷ # × [0.3] COMMA (IS) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 002C × 0020 ÷ 2014 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 002C × 0308 ÷ 2014 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -2834,13 +3894,13 @@
× 002C × 0020 ÷ 002D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 002C × 0308 × 002D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 002D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002C ÷ 231A ÷ # × [0.3] COMMA (IS) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002C × 0020 ÷ 231A ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002C × 0308 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 002C × 2024 ÷ # × [0.3] COMMA (IS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002C ÷ 1B50 ÷ # × [0.3] COMMA (IS) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002C × 0020 ÷ 1B50 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002C × 0308 ÷ 1B50 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002C × 2024 ÷ # × [0.3] COMMA (IS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002C × 0020 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 002C × 0308 × 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002C × 0308 × 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002C × 002C ÷ # × [0.3] COMMA (IS) × [13.02] COMMA (IS) ÷ [0.3]
× 002C × 0020 × 002C ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -2898,6 +3958,14 @@
× 002C × 0020 × 002F ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 002C × 0308 × 002F ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 002C × 0308 × 0020 × 002F ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 002C ÷ 1BF2 ÷ # × [0.3] COMMA (IS) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002C × 0020 ÷ 1BF2 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002C × 0308 ÷ 1BF2 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002C ÷ 1B44 ÷ # × [0.3] COMMA (IS) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 002C × 0020 ÷ 1B44 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 002C × 0308 ÷ 1B44 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 002C × 2060 ÷ # × [0.3] COMMA (IS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002C × 0020 × 2060 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002C × 0308 × 2060 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -2918,6 +3986,14 @@
× 002C × 0020 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002C × 0308 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002C × 00AB ÷ # × [0.3] COMMA (IS) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002C × 0020 ÷ 00AB ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002C × 0308 × 00AB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002C × 0308 × 0020 ÷ 00AB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002C × 00BB ÷ # × [0.3] COMMA (IS) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 002C × 0020 × 00BB ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 002C × 0308 × 00BB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 002C × 0308 × 0020 × 00BB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 002C × 0029 ÷ # × [0.3] COMMA (IS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 002C × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 002C × 0308 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -2950,10 +4026,22 @@
× 002C × 0020 ÷ 3041 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002C × 0308 × 3041 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002C × 0308 × 0020 ÷ 3041 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1100 ÷ 1B05 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1100 × 0020 ÷ 1B05 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1100 × 0308 ÷ 1B05 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 1100 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 1100 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 1100 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1100 ÷ 11003 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1100 × 0020 ÷ 11003 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1100 × 0308 ÷ 11003 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1100 ÷ 1BC0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1100 × 0020 ÷ 1BC0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1100 × 0308 ÷ 1BC0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 1100 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 1100 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 1100 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -3006,10 +4094,10 @@
× 1100 × 0020 ÷ 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 1100 × 0308 × 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1100 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1100 × 0020 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1100 × 0308 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 1100 ÷ 1B50 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1100 × 0020 ÷ 1B50 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1100 × 0308 ÷ 1B50 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 1100 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1100 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1100 × 0308 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -3070,6 +4158,14 @@
× 1100 × 0020 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 1100 × 0308 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 1100 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1100 ÷ 1BF2 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1100 × 0020 ÷ 1BF2 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1100 × 0308 ÷ 1BF2 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1100 ÷ 1B44 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1100 × 0020 ÷ 1B44 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1100 × 0308 ÷ 1B44 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 1100 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1100 × 0020 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1100 × 0308 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -3090,6 +4186,14 @@
× 1100 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1100 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1100 × 00AB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1100 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1100 × 0308 × 00AB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1100 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1100 × 00BB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1100 × 0020 × 00BB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1100 × 0308 × 00BB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1100 × 0308 × 0020 × 00BB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 1100 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 1100 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 1100 × 0308 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -3122,10 +4226,22 @@
× 1100 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1100 × 0308 × 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1100 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 11A8 ÷ 1B05 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 11A8 × 0020 ÷ 1B05 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 11A8 × 0308 ÷ 1B05 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 11A8 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 11A8 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 11A8 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 11A8 ÷ 11003 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 11A8 × 0020 ÷ 11003 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 11A8 × 0308 ÷ 11003 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 11A8 ÷ 1BC0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 11A8 × 0020 ÷ 1BC0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 11A8 × 0308 ÷ 1BC0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 11A8 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 11A8 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 11A8 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -3178,10 +4294,10 @@
× 11A8 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 11A8 × 0308 × 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 11A8 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 11A8 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 11A8 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 11A8 ÷ 1B50 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 11A8 × 0020 ÷ 1B50 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 11A8 × 0308 ÷ 1B50 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 11A8 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 11A8 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 11A8 × 0308 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -3242,6 +4358,14 @@
× 11A8 × 0020 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 11A8 × 0308 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 11A8 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 11A8 ÷ 1BF2 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 11A8 × 0020 ÷ 1BF2 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 11A8 × 0308 ÷ 1BF2 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 11A8 ÷ 1B44 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 11A8 × 0020 ÷ 1B44 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 11A8 × 0308 ÷ 1B44 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 11A8 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 11A8 × 0020 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 11A8 × 0308 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -3262,6 +4386,14 @@
× 11A8 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 11A8 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 11A8 × 00AB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 11A8 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 11A8 × 0308 × 00AB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 11A8 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 11A8 × 00BB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 11A8 × 0020 × 00BB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 11A8 × 0308 × 00BB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 11A8 × 0308 × 0020 × 00BB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 11A8 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 11A8 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 11A8 × 0308 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -3294,10 +4426,22 @@
× 11A8 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 11A8 × 0308 × 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 11A8 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1160 ÷ 1B05 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1160 × 0020 ÷ 1B05 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1160 × 0308 ÷ 1B05 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 1160 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 1160 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 1160 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1160 ÷ 11003 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1160 × 0020 ÷ 11003 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1160 × 0308 ÷ 11003 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1160 ÷ 1BC0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1160 × 0020 ÷ 1BC0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1160 × 0308 ÷ 1BC0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 1160 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 1160 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 1160 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -3350,10 +4494,10 @@
× 1160 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 1160 × 0308 × 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1160 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1160 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1160 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 1160 ÷ 1B50 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1160 × 0020 ÷ 1B50 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1160 × 0308 ÷ 1B50 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1160 × 0308 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -3414,6 +4558,14 @@
× 1160 × 0020 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 1160 × 0308 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 1160 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1160 ÷ 1BF2 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1160 × 0020 ÷ 1BF2 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1160 × 0308 ÷ 1BF2 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1160 ÷ 1B44 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1160 × 0020 ÷ 1B44 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1160 × 0308 ÷ 1B44 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 1160 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1160 × 0020 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1160 × 0308 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -3434,6 +4586,14 @@
× 1160 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1160 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1160 × 00AB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1160 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1160 × 0308 × 00AB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1160 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1160 × 00BB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1160 × 0020 × 00BB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1160 × 0308 × 00BB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1160 × 0308 × 0020 × 00BB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 1160 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 1160 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 1160 × 0308 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -3466,10 +4626,22 @@
× 1160 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1160 × 0308 × 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1160 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 000A ÷ 1B05 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 000A ÷ 0020 ÷ 1B05 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 000A ÷ 0308 ÷ 1B05 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 1B05 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 000A ÷ 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] NUMBER SIGN (AL) ÷ [0.3]
× 000A ÷ 0020 ÷ 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 000A ÷ 0308 × 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 000A ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 000A ÷ 11003 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000A ÷ 0020 ÷ 11003 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000A ÷ 0308 ÷ 11003 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 11003 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 000A ÷ 1BC0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] BATAK LETTER A (AS) ÷ [0.3]
+× 000A ÷ 0020 ÷ 1BC0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 000A ÷ 0308 ÷ 1BC0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 000A ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] EM DASH (B2) ÷ [0.3]
× 000A ÷ 0020 ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 000A ÷ 0308 ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -3522,10 +4694,10 @@
× 000A ÷ 0020 ÷ 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 000A ÷ 0308 × 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 000A ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000A ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] WATCH (ID) ÷ [0.3]
-× 000A ÷ 0020 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000A ÷ 0308 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 000A ÷ 1B50 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 000A ÷ 0020 ÷ 1B50 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 000A ÷ 0308 ÷ 1B50 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 1B50 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 000A ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] ONE DOT LEADER (IN) ÷ [0.3]
× 000A ÷ 0020 ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 000A ÷ 0308 × 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -3564,7 +4736,7 @@
× 000A ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 000A ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000A ÷ 0020 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 000A ÷ 0308 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 000A ÷ 0308 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000A ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 000A ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] PERCENT SIGN (PO) ÷ [0.3]
× 000A ÷ 0020 ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -3586,6 +4758,14 @@
× 000A ÷ 0020 × 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 000A ÷ 0308 × 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 000A ÷ 0308 × 0020 × 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 000A ÷ 1BF2 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000A ÷ 0020 ÷ 1BF2 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000A ÷ 0308 ÷ 1BF2 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 000A ÷ 1B44 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 000A ÷ 0020 ÷ 1B44 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 000A ÷ 0308 ÷ 1B44 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 1B44 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 000A ÷ 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] WORD JOINER (WJ) ÷ [0.3]
× 000A ÷ 0020 × 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 000A ÷ 0308 × 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -3606,6 +4786,14 @@
× 000A ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000A ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 000A ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 000A ÷ 00AB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000A ÷ 0020 ÷ 00AB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000A ÷ 0308 × 00AB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000A ÷ 0308 × 0020 ÷ 00AB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 000A ÷ 00BB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 000A ÷ 0020 × 00BB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 000A ÷ 0308 × 00BB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 000A ÷ 0308 × 0020 × 00BB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 000A ÷ 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 000A ÷ 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 000A ÷ 0308 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -3638,10 +4826,22 @@
× 000A ÷ 0020 ÷ 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000A ÷ 0308 × 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 000A ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0085 ÷ 1B05 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 1B05 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 1B05 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 1B05 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0085 ÷ 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] NUMBER SIGN (AL) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0085 ÷ 0308 × 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0085 ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0085 ÷ 11003 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 11003 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 11003 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 11003 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0085 ÷ 1BC0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] BATAK LETTER A (AS) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 1BC0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 1BC0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0085 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] EM DASH (B2) ÷ [0.3]
× 0085 ÷ 0020 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0085 ÷ 0308 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -3694,10 +4894,10 @@
× 0085 ÷ 0020 ÷ 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0085 ÷ 0308 × 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0085 ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0085 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] WATCH (ID) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0085 ÷ 1B50 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 1B50 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 1B50 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 1B50 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 0085 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] ONE DOT LEADER (IN) ÷ [0.3]
× 0085 ÷ 0020 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0085 ÷ 0308 × 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -3736,7 +4936,7 @@
× 0085 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0085 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0085 ÷ 0020 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 0085 ÷ 0308 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0085 ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0085 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] PERCENT SIGN (PO) ÷ [0.3]
× 0085 ÷ 0020 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -3758,6 +4958,14 @@
× 0085 ÷ 0020 × 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0085 ÷ 0308 × 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 0085 ÷ 0308 × 0020 × 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0085 ÷ 1BF2 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 1BF2 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 1BF2 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0085 ÷ 1B44 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 1B44 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0085 ÷ 0308 ÷ 1B44 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 1B44 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0085 ÷ 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] WORD JOINER (WJ) ÷ [0.3]
× 0085 ÷ 0020 × 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0085 ÷ 0308 × 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -3778,6 +4986,14 @@
× 0085 ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0085 ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0085 ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0085 ÷ 00AB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0085 ÷ 0020 ÷ 00AB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0085 ÷ 0308 × 00AB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 ÷ 00AB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0085 ÷ 00BB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0085 ÷ 0020 × 00BB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0085 ÷ 0308 × 00BB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0085 ÷ 0308 × 0020 × 00BB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0085 ÷ 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0085 ÷ 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0085 ÷ 0308 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -3810,10 +5026,22 @@
× 0085 ÷ 0020 ÷ 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0085 ÷ 0308 × 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0085 ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 17D6 ÷ 1B05 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 17D6 × 0020 ÷ 1B05 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 17D6 × 0308 ÷ 1B05 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 17D6 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 17D6 × 0020 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 17D6 × 0308 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 17D6 ÷ 11003 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 17D6 × 0020 ÷ 11003 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 17D6 × 0308 ÷ 11003 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 17D6 ÷ 1BC0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 17D6 × 0020 ÷ 1BC0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 17D6 × 0308 ÷ 1BC0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 17D6 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 17D6 × 0020 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 17D6 × 0308 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -3866,13 +5094,13 @@
× 17D6 × 0020 ÷ 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 17D6 × 0308 × 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 17D6 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 17D6 × 0020 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 17D6 × 0308 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 17D6 × 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 17D6 ÷ 1B50 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 17D6 × 0020 ÷ 1B50 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 17D6 × 0308 ÷ 1B50 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 17D6 × 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 17D6 × 0020 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 17D6 × 0308 × 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 17D6 × 0308 × 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 17D6 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] COMMA (IS) ÷ [0.3]
× 17D6 × 0020 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -3930,6 +5158,14 @@
× 17D6 × 0020 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 17D6 × 0308 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 17D6 × 0308 × 0020 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 17D6 ÷ 1BF2 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 17D6 × 0020 ÷ 1BF2 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 17D6 × 0308 ÷ 1BF2 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 17D6 ÷ 1B44 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 17D6 × 0020 ÷ 1B44 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 17D6 × 0308 ÷ 1B44 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 17D6 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 17D6 × 0020 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 17D6 × 0308 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -3950,6 +5186,14 @@
× 17D6 × 0020 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 17D6 × 0308 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 17D6 × 00AB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 17D6 × 0020 ÷ 00AB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 17D6 × 0308 × 00AB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 17D6 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 17D6 × 00BB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 17D6 × 0020 × 00BB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 17D6 × 0308 × 00BB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 17D6 × 0308 × 0020 × 00BB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 17D6 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 17D6 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 17D6 × 0308 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -3982,10 +5226,22 @@
× 17D6 × 0020 ÷ 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 17D6 × 0308 × 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 17D6 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0030 ÷ 1B05 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0030 × 0020 ÷ 1B05 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0030 × 0308 ÷ 1B05 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0030 × 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [23.03] NUMBER SIGN (AL) ÷ [0.3]
× 0030 × 0020 ÷ 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0030 × 0308 × 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] NUMBER SIGN (AL) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0030 ÷ 11003 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0030 × 0020 ÷ 11003 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0030 × 0308 ÷ 11003 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0030 ÷ 1BC0 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0030 × 0020 ÷ 1BC0 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0030 × 0308 ÷ 1BC0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0030 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0030 × 0020 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0030 × 0308 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -4038,10 +5294,10 @@
× 0030 × 0020 ÷ 002D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0030 × 0308 × 002D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 002D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0030 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0030 × 0020 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0030 × 0308 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0030 ÷ 1B50 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0030 × 0020 ÷ 1B50 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0030 × 0308 ÷ 1B50 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0030 × 0020 ÷ 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0030 × 0308 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -4078,9 +5334,9 @@
× 0030 × 0020 ÷ 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0030 × 0308 × 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.03] DIGIT ZERO (NU) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-#× 0030 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0030 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0030 × 0020 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 0030 × 0308 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0030 × 0308 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0030 × 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [25.05] PERCENT SIGN (PO) ÷ [0.3]
× 0030 × 0020 ÷ 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -4102,6 +5358,14 @@
× 0030 × 0020 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0030 × 0308 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.03] SOLIDUS (SY) ÷ [0.3]
× 0030 × 0308 × 0020 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0030 ÷ 1BF2 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0030 × 0020 ÷ 1BF2 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0030 × 0308 ÷ 1BF2 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0030 ÷ 1B44 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0030 × 0020 ÷ 1B44 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0030 × 0308 ÷ 1B44 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0030 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0030 × 0020 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0030 × 0308 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -4122,6 +5386,14 @@
× 0030 × 0020 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0030 × 0308 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0030 × 00AB ÷ # × [0.3] DIGIT ZERO (NU) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0030 × 0020 ÷ 00AB ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0030 × 0308 × 00AB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0030 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0030 × 00BB ÷ # × [0.3] DIGIT ZERO (NU) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0030 × 0020 × 00BB ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0030 × 0308 × 00BB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0030 × 0308 × 0020 × 00BB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0030 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0030 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0030 × 0308 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -4154,10 +5426,22 @@
× 0030 × 0020 ÷ 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0030 × 0308 × 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0030 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2329 × 1B05 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2329 × 0020 × 1B05 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2329 × 0308 × 1B05 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1B05 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 2329 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
× 2329 × 0020 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
× 2329 × 0308 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
× 2329 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2329 × 11003 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2329 × 0020 × 11003 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2329 × 0308 × 11003 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2329 × 0308 × 0020 × 11003 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2329 × 1BC0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] BATAK LETTER A (AS) ÷ [0.3]
+× 2329 × 0020 × 1BC0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] BATAK LETTER A (AS) ÷ [0.3]
+× 2329 × 0308 × 1BC0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BATAK LETTER A (AS) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1BC0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BATAK LETTER A (AS) ÷ [0.3]
× 2329 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] EM DASH (B2) ÷ [0.3]
× 2329 × 0020 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
× 2329 × 0308 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EM DASH (B2) ÷ [0.3]
@@ -4210,10 +5494,10 @@
× 2329 × 0020 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 2329 × 0308 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 2329 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2329 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] WATCH (ID) ÷ [0.3]
-× 2329 × 0020 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
-× 2329 × 0308 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WATCH (ID) ÷ [0.3]
-× 2329 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
+× 2329 × 1B50 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2329 × 0020 × 1B50 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2329 × 0308 × 1B50 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1B50 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 2329 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2329 × 0020 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2329 × 0308 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -4274,6 +5558,14 @@
× 2329 × 0020 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 2329 × 0308 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 2329 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2329 × 1BF2 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2329 × 0020 × 1BF2 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2329 × 0308 × 1BF2 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1BF2 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2329 × 1B44 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2329 × 0020 × 1B44 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2329 × 0308 × 1B44 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2329 × 0308 × 0020 × 1B44 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 2329 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2329 × 0020 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2329 × 0308 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -4294,6 +5586,14 @@
× 2329 × 0020 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2329 × 0308 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2329 × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2329 × 00AB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2329 × 0020 × 00AB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2329 × 0308 × 00AB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2329 × 0308 × 0020 × 00AB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2329 × 00BB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2329 × 0020 × 00BB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2329 × 0308 × 00BB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2329 × 0308 × 0020 × 00BB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 2329 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 2329 × 0020 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 2329 × 0308 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -4326,10 +5626,22 @@
× 2329 × 0020 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2329 × 0308 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2329 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0025 ÷ 1B05 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0025 × 0020 ÷ 1B05 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0025 × 0308 ÷ 1B05 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0025 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
× 0025 × 0020 ÷ 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0025 × 0308 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0025 ÷ 11003 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0025 × 0020 ÷ 11003 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0025 × 0308 ÷ 11003 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0025 ÷ 1BC0 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0025 × 0020 ÷ 1BC0 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0025 × 0308 ÷ 1BC0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0025 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0025 × 0020 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0025 × 0308 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -4382,13 +5694,13 @@
× 0025 × 0020 ÷ 002D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0025 × 0308 × 002D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 002D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0025 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0025 × 0020 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0025 × 0308 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 0025 × 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0025 ÷ 1B50 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0025 × 0020 ÷ 1B50 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0025 × 0308 ÷ 1B50 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0025 × 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0025 × 0020 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 0025 × 0308 × 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0025 × 0308 × 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0025 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] COMMA (IS) ÷ [0.3]
× 0025 × 0020 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -4446,6 +5758,14 @@
× 0025 × 0020 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0025 × 0308 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 0025 × 0308 × 0020 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0025 ÷ 1BF2 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0025 × 0020 ÷ 1BF2 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0025 × 0308 ÷ 1BF2 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0025 ÷ 1B44 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0025 × 0020 ÷ 1B44 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0025 × 0308 ÷ 1B44 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0025 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0025 × 0020 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0025 × 0308 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -4466,6 +5786,14 @@
× 0025 × 0020 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0025 × 0308 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0025 × 00AB ÷ # × [0.3] PERCENT SIGN (PO) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0025 × 0020 ÷ 00AB ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0025 × 0308 × 00AB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0025 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0025 × 00BB ÷ # × [0.3] PERCENT SIGN (PO) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0025 × 0020 × 00BB ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0025 × 0308 × 00BB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0025 × 0308 × 0020 × 00BB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0025 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0025 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0025 × 0308 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -4498,10 +5826,22 @@
× 0025 × 0020 ÷ 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0025 × 0308 × 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0025 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0024 ÷ 1B05 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0024 × 0020 ÷ 1B05 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0024 × 0308 ÷ 1B05 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0024 × 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
× 0024 × 0020 ÷ 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0024 × 0308 × 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0024 ÷ 11003 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0024 × 0020 ÷ 11003 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0024 × 0308 ÷ 11003 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0024 ÷ 1BC0 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0024 × 0020 ÷ 1BC0 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0024 × 0308 ÷ 1BC0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0024 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0024 × 0020 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0024 × 0308 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -4554,13 +5894,13 @@
× 0024 × 0020 ÷ 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0024 × 0308 × 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0024 × 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] WATCH (ID) ÷ [0.3]
-× 0024 × 0020 ÷ 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0024 × 0308 × 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] WATCH (ID) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 0024 × 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0024 × 1B50 ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0024 × 0020 ÷ 1B50 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0024 × 0308 × 1B50 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0024 × 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0024 × 0020 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 0024 × 0308 × 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0024 × 0308 × 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0024 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] COMMA (IS) ÷ [0.3]
× 0024 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -4618,6 +5958,14 @@
× 0024 × 0020 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0024 × 0308 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 0024 × 0308 × 0020 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0024 ÷ 1BF2 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0024 × 0020 ÷ 1BF2 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0024 × 0308 ÷ 1BF2 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0024 ÷ 1B44 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0024 × 0020 ÷ 1B44 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0024 × 0308 ÷ 1B44 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0024 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0024 × 0020 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0024 × 0308 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -4638,6 +5986,14 @@
× 0024 × 0020 ÷ 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0024 × 0308 × 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0024 × 00AB ÷ # × [0.3] DOLLAR SIGN (PR) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0024 × 0020 ÷ 00AB ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0024 × 0308 × 00AB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0024 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0024 × 00BB ÷ # × [0.3] DOLLAR SIGN (PR) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0024 × 0020 × 00BB ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0024 × 0308 × 00BB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0024 × 0308 × 0020 × 00BB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0024 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0024 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0024 × 0308 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -4670,10 +6026,22 @@
× 0024 × 0020 ÷ 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0024 × 0308 × 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0024 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0022 × 1B05 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0022 × 0020 ÷ 1B05 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0022 × 0308 × 1B05 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0022 × 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] NUMBER SIGN (AL) ÷ [0.3]
× 0022 × 0020 ÷ 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0022 × 0308 × 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] NUMBER SIGN (AL) ÷ [0.3]
× 0022 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0022 × 11003 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0022 × 0020 ÷ 11003 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0022 × 0308 × 11003 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0022 × 1BC0 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] BATAK LETTER A (AS) ÷ [0.3]
+× 0022 × 0020 ÷ 1BC0 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0022 × 0308 × 1BC0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BATAK LETTER A (AS) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0022 × 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] EM DASH (B2) ÷ [0.3]
× 0022 × 0020 ÷ 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0022 × 0308 × 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] EM DASH (B2) ÷ [0.3]
@@ -4726,10 +6094,10 @@
× 0022 × 0020 ÷ 002D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0022 × 0308 × 002D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0022 × 0308 × 0020 ÷ 002D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0022 × 231A ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] WATCH (ID) ÷ [0.3]
-× 0022 × 0020 ÷ 231A ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0022 × 0308 × 231A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] WATCH (ID) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 231A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0022 × 1B50 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0022 × 0020 ÷ 1B50 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0022 × 0308 × 1B50 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 0022 × 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] ONE DOT LEADER (IN) ÷ [0.3]
× 0022 × 0020 ÷ 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0022 × 0308 × 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] ONE DOT LEADER (IN) ÷ [0.3]
@@ -4766,10 +6134,10 @@
× 0022 × 0020 ÷ 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0022 × 0308 × 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] DIGIT ZERO (NU) ÷ [0.3]
× 0022 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0022 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0022 × 0020 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0022 × 0308 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0022 × 0308 × 0020 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0022 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0022 × 0020 ÷ 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0022 × 0308 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0022 × 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
× 0022 × 0020 ÷ 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0022 × 0308 × 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
@@ -4790,6 +6158,14 @@
× 0022 × 0020 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0022 × 0308 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 0022 × 0308 × 0020 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0022 × 1BF2 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0022 × 0020 ÷ 1BF2 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0022 × 0308 × 1BF2 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0022 × 1B44 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0022 × 0020 ÷ 1B44 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0022 × 0308 × 1B44 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0022 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0022 × 0020 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0022 × 0308 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -4810,14 +6186,22 @@
× 0022 × 0020 ÷ 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0022 × 0308 × 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0022 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0022 × 00AB ÷ # × [0.3] QUOTATION MARK (QU) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0022 × 0020 ÷ 00AB ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0022 × 0308 × 00AB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0022 × 00BB ÷ # × [0.3] QUOTATION MARK (QU) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0022 × 0020 × 00BB ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0022 × 0308 × 00BB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0022 × 0308 × 0020 × 00BB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0022 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0022 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0022 × 0308 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0022 × 0308 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0022 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0022 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0022 × 0308 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0022 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0022 × 0020 ÷ 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0022 × 0308 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 0022 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
× 0022 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0022 × 0020 ÷ 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
× 0022 × 0308 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
@@ -4842,10 +6226,22 @@
× 0022 × 0020 ÷ 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0022 × 0308 × 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0022 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0020 ÷ 1B05 ÷ # × [0.3] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0020 × 0020 ÷ 1B05 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 1B05 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 1B05 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0020 ÷ 0023 ÷ # × [0.3] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0020 × 0020 ÷ 0023 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0020 ÷ 0308 × 0023 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0020 ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0020 ÷ 11003 ÷ # × [0.3] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0020 × 0020 ÷ 11003 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 11003 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 11003 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0020 ÷ 1BC0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0020 × 0020 ÷ 1BC0 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 1BC0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0020 ÷ 2014 ÷ # × [0.3] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0020 × 0020 ÷ 2014 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0020 ÷ 0308 ÷ 2014 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -4898,10 +6294,10 @@
× 0020 × 0020 ÷ 002D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0020 ÷ 0308 × 002D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0020 ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0020 × 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0020 ÷ 1B50 ÷ # × [0.3] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0020 × 0020 ÷ 1B50 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 1B50 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 1B50 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0020 × 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0020 ÷ 0308 × 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -4940,7 +6336,7 @@
× 0020 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0020 × 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 0020 ÷ 0308 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0020 ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
× 0020 × 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -4962,6 +6358,14 @@
× 0020 × 0020 × 002F ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0020 ÷ 0308 × 002F ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 0020 ÷ 0308 × 0020 × 002F ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0020 ÷ 1BF2 ÷ # × [0.3] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0020 × 0020 ÷ 1BF2 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 1BF2 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0020 ÷ 1B44 ÷ # × [0.3] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0020 × 0020 ÷ 1B44 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0020 ÷ 0308 ÷ 1B44 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 1B44 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0020 × 2060 ÷ # × [0.3] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0020 × 0020 × 2060 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0020 ÷ 0308 × 2060 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -4982,6 +6386,14 @@
× 0020 × 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0020 ÷ 0308 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0020 ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0020 ÷ 00AB ÷ # × [0.3] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0020 × 0020 ÷ 00AB ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0020 ÷ 0308 × 00AB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 ÷ 00AB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0020 × 00BB ÷ # × [0.3] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0020 × 0020 × 00BB ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0020 ÷ 0308 × 00BB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0020 ÷ 0308 × 0020 × 00BB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0020 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0020 ÷ 0308 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -5014,10 +6426,22 @@
× 0020 × 0020 ÷ 3041 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0020 ÷ 0308 × 3041 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0020 ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 002F ÷ 1B05 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 002F × 0020 ÷ 1B05 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 002F × 0308 ÷ 1B05 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 002F ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 002F × 0020 ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 002F × 0308 ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 002F ÷ 11003 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002F × 0020 ÷ 11003 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002F × 0308 ÷ 11003 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 11003 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 002F ÷ 1BC0 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 002F × 0020 ÷ 1BC0 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 002F × 0308 ÷ 1BC0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 002F ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 002F × 0020 ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 002F × 0308 ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -5070,13 +6494,13 @@
× 002F × 0020 ÷ 002D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 002F × 0308 × 002D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 002D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002F ÷ 231A ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002F × 0020 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002F × 0308 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 002F × 2024 ÷ # × [0.3] SOLIDUS (SY) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002F ÷ 1B50 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002F × 0020 ÷ 1B50 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002F × 0308 ÷ 1B50 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 002F × 2024 ÷ # × [0.3] SOLIDUS (SY) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002F × 0020 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 002F × 0308 × 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 002F × 0308 × 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 002F × 002C ÷ # × [0.3] SOLIDUS (SY) × [13.02] COMMA (IS) ÷ [0.3]
× 002F × 0020 × 002C ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -5134,6 +6558,14 @@
× 002F × 0020 × 002F ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 002F × 0308 × 002F ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 002F × 0308 × 0020 × 002F ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 002F ÷ 1BF2 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002F × 0020 ÷ 1BF2 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002F × 0308 ÷ 1BF2 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 002F ÷ 1B44 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 002F × 0020 ÷ 1B44 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 002F × 0308 ÷ 1B44 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 002F × 2060 ÷ # × [0.3] SOLIDUS (SY) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002F × 0020 × 2060 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 002F × 0308 × 2060 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -5154,6 +6586,14 @@
× 002F × 0020 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002F × 0308 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 002F × 00AB ÷ # × [0.3] SOLIDUS (SY) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002F × 0020 ÷ 00AB ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002F × 0308 × 00AB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002F × 0308 × 0020 ÷ 00AB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 002F × 00BB ÷ # × [0.3] SOLIDUS (SY) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 002F × 0020 × 00BB ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 002F × 0308 × 00BB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 002F × 0308 × 0020 × 00BB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 002F × 0029 ÷ # × [0.3] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 002F × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 002F × 0308 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -5186,10 +6626,422 @@
× 002F × 0020 ÷ 3041 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002F × 0308 × 3041 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 002F × 0308 × 0020 ÷ 3041 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1BF2 ÷ 1B05 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1BF2 × 0020 ÷ 1B05 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1BF2 × 0308 ÷ 1B05 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1BF2 ÷ 0023 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1BF2 × 0020 ÷ 0023 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1BF2 × 0308 ÷ 0023 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1BF2 ÷ 11003 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1BF2 × 0020 ÷ 11003 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1BF2 × 0308 ÷ 11003 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1BF2 ÷ 1BC0 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1BF2 × 0020 ÷ 1BC0 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1BF2 × 0308 ÷ 1BC0 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1BF2 ÷ 2014 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1BF2 × 0020 ÷ 2014 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1BF2 × 0308 ÷ 2014 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1BF2 × 0009 ÷ # × [0.3] BATAK PANGOLAT (VF) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1BF2 × 0020 ÷ 0009 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1BF2 × 0308 × 0009 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1BF2 ÷ 00B4 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1BF2 × 0020 ÷ 00B4 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1BF2 × 0308 ÷ 00B4 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1BF2 × 000B ÷ # × [0.3] BATAK PANGOLAT (VF) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1BF2 × 0020 × 000B ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1BF2 × 0308 × 000B ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 000B ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1BF2 ÷ FFFC ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1BF2 × 0020 ÷ FFFC ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1BF2 × 0308 ÷ FFFC ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1BF2 × 007D ÷ # × [0.3] BATAK PANGOLAT (VF) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1BF2 × 0020 × 007D ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1BF2 × 0308 × 007D ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 007D ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1BF2 × 000D ÷ # × [0.3] BATAK PANGOLAT (VF) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1BF2 × 0020 × 000D ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1BF2 × 0308 × 000D ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 000D ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1BF2 × 0021 ÷ # × [0.3] BATAK PANGOLAT (VF) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1BF2 × 0020 × 0021 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1BF2 × 0308 × 0021 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 0021 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1BF2 × 00A0 ÷ # × [0.3] BATAK PANGOLAT (VF) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1BF2 × 0020 ÷ 00A0 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1BF2 × 0308 × 00A0 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1BF2 ÷ AC00 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1BF2 × 0020 ÷ AC00 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1BF2 × 0308 ÷ AC00 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1BF2 ÷ AC01 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1BF2 × 0020 ÷ AC01 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1BF2 × 0308 ÷ AC01 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1BF2 ÷ 05D0 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1BF2 × 0020 ÷ 05D0 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1BF2 × 0308 ÷ 05D0 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1BF2 × 002D ÷ # × [0.3] BATAK PANGOLAT (VF) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1BF2 × 0020 ÷ 002D ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1BF2 × 0308 × 002D ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 002D ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1BF2 ÷ 1B50 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1BF2 × 0020 ÷ 1B50 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1BF2 × 0308 ÷ 1B50 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1BF2 × 2024 ÷ # × [0.3] BATAK PANGOLAT (VF) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1BF2 × 0020 ÷ 2024 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1BF2 × 0308 × 2024 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1BF2 × 002C ÷ # × [0.3] BATAK PANGOLAT (VF) × [13.02] COMMA (IS) ÷ [0.3]
+× 1BF2 × 0020 × 002C ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1BF2 × 0308 × 002C ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 002C ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1BF2 ÷ 1100 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1BF2 × 0020 ÷ 1100 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1BF2 × 0308 ÷ 1100 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1BF2 ÷ 11A8 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1BF2 × 0020 ÷ 11A8 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1BF2 × 0308 ÷ 11A8 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1BF2 ÷ 1160 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1BF2 × 0020 ÷ 1160 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1BF2 × 0308 ÷ 1160 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1BF2 × 000A ÷ # × [0.3] BATAK PANGOLAT (VF) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1BF2 × 0020 × 000A ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1BF2 × 0308 × 000A ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 000A ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1BF2 × 0085 ÷ # × [0.3] BATAK PANGOLAT (VF) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1BF2 × 0020 × 0085 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1BF2 × 0308 × 0085 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 0085 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1BF2 × 17D6 ÷ # × [0.3] BATAK PANGOLAT (VF) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1BF2 × 0020 ÷ 17D6 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1BF2 × 0308 × 17D6 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1BF2 ÷ 0030 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1BF2 × 0020 ÷ 0030 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1BF2 × 0308 ÷ 0030 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1BF2 ÷ 2329 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1BF2 × 0020 ÷ 2329 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1BF2 × 0308 ÷ 2329 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1BF2 ÷ 0025 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1BF2 × 0020 ÷ 0025 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1BF2 × 0308 ÷ 0025 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1BF2 ÷ 0024 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1BF2 × 0020 ÷ 0024 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1BF2 × 0308 ÷ 0024 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1BF2 × 0022 ÷ # × [0.3] BATAK PANGOLAT (VF) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1BF2 × 0020 ÷ 0022 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1BF2 × 0308 × 0022 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1BF2 × 0020 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [0.3]
+× 1BF2 × 0020 × 0020 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 0020 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1BF2 × 002F ÷ # × [0.3] BATAK PANGOLAT (VF) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1BF2 × 0020 × 002F ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1BF2 × 0308 × 002F ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 002F ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1BF2 ÷ 1BF2 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1BF2 × 0020 ÷ 1BF2 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1BF2 × 0308 ÷ 1BF2 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1BF2 ÷ 1B44 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1BF2 × 0020 ÷ 1B44 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1BF2 × 0308 ÷ 1B44 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1BF2 × 2060 ÷ # × [0.3] BATAK PANGOLAT (VF) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1BF2 × 0020 × 2060 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1BF2 × 0308 × 2060 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 2060 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1BF2 × 200B ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1BF2 × 0020 × 200B ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1BF2 × 0308 × 200B ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 200B ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1BF2 ÷ 1F1E6 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1BF2 × 0020 ÷ 1F1E6 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1BF2 × 0308 ÷ 1F1E6 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1BF2 ÷ 261D ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1BF2 × 0020 ÷ 261D ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1BF2 × 0308 ÷ 261D ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 261D ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1BF2 ÷ 1F3FB ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1BF2 × 0020 ÷ 1F3FB ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1BF2 × 0308 ÷ 1F3FB ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1BF2 × 00AB ÷ # × [0.3] BATAK PANGOLAT (VF) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1BF2 × 0020 ÷ 00AB ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1BF2 × 0308 × 00AB ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1BF2 × 00BB ÷ # × [0.3] BATAK PANGOLAT (VF) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1BF2 × 0020 × 00BB ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1BF2 × 0308 × 00BB ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 00BB ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1BF2 × 0029 ÷ # × [0.3] BATAK PANGOLAT (VF) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1BF2 × 0020 × 0029 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1BF2 × 0308 × 0029 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1BF2 × 0308 × 0020 × 0029 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1BF2 ÷ 0028 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1BF2 × 0020 ÷ 0028 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1BF2 × 0308 ÷ 0028 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1BF2 × 0001 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1BF2 × 0020 ÷ 0001 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1BF2 × 0308 × 0001 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1BF2 × 200D ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1BF2 × 0020 ÷ 200D ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1BF2 × 0308 × 200D ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 200D ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1BF2 ÷ 00A7 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1BF2 × 0020 ÷ 00A7 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1BF2 × 0308 ÷ 00A7 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1BF2 ÷ 50005 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1BF2 × 0020 ÷ 50005 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1BF2 × 0308 ÷ 50005 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1BF2 ÷ 0E01 ÷ # × [0.3] BATAK PANGOLAT (VF) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1BF2 × 0020 ÷ 0E01 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1BF2 × 0308 ÷ 0E01 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1BF2 × 3041 ÷ # × [0.3] BATAK PANGOLAT (VF) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1BF2 × 0020 ÷ 3041 ÷ # × [0.3] BATAK PANGOLAT (VF) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1BF2 × 0308 × 3041 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1BF2 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] BATAK PANGOLAT (VF) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1B44 ÷ 1B05 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B44 × 0020 ÷ 1B05 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B44 × 0308 ÷ 1B05 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1B44 ÷ 0023 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B44 × 0020 ÷ 0023 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B44 × 0308 ÷ 0023 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1B44 ÷ 11003 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B44 × 0020 ÷ 11003 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B44 × 0308 ÷ 11003 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1B44 ÷ 1BC0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B44 × 0020 ÷ 1BC0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B44 × 0308 ÷ 1BC0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1B44 ÷ 2014 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1B44 × 0020 ÷ 2014 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1B44 × 0308 ÷ 2014 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 1B44 × 0009 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B44 × 0020 ÷ 0009 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B44 × 0308 × 0009 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 1B44 ÷ 00B4 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B44 × 0020 ÷ 00B4 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B44 × 0308 ÷ 00B4 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 1B44 × 000B ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B44 × 0020 × 000B ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B44 × 0308 × 000B ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 000B ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 1B44 ÷ FFFC ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B44 × 0020 ÷ FFFC ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B44 × 0308 ÷ FFFC ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 1B44 × 007D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B44 × 0020 × 007D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B44 × 0308 × 007D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 007D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 1B44 × 000D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B44 × 0020 × 000D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B44 × 0308 × 000D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 000D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 1B44 × 0021 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B44 × 0020 × 0021 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B44 × 0308 × 0021 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 0021 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 1B44 × 00A0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B44 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B44 × 0308 × 00A0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 1B44 ÷ AC00 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B44 × 0020 ÷ AC00 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B44 × 0308 ÷ AC00 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 1B44 ÷ AC01 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B44 × 0020 ÷ AC01 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B44 × 0308 ÷ AC01 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 1B44 ÷ 05D0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B44 × 0020 ÷ 05D0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B44 × 0308 ÷ 05D0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 1B44 × 002D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B44 × 0020 ÷ 002D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B44 × 0308 × 002D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 002D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 1B44 ÷ 1B50 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B44 × 0020 ÷ 1B50 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B44 × 0308 ÷ 1B50 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1B44 × 2024 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B44 × 0020 ÷ 2024 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B44 × 0308 × 2024 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1B44 × 002C ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [13.02] COMMA (IS) ÷ [0.3]
+× 1B44 × 0020 × 002C ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1B44 × 0308 × 002C ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 002C ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 1B44 ÷ 1100 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B44 × 0020 ÷ 1100 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B44 × 0308 ÷ 1100 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 1B44 ÷ 11A8 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B44 × 0020 ÷ 11A8 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B44 × 0308 ÷ 11A8 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 1B44 ÷ 1160 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B44 × 0020 ÷ 1160 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B44 × 0308 ÷ 1160 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 1B44 × 000A ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B44 × 0020 × 000A ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B44 × 0308 × 000A ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 000A ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 1B44 × 0085 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B44 × 0020 × 0085 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B44 × 0308 × 0085 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 0085 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 1B44 × 17D6 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B44 × 0020 ÷ 17D6 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B44 × 0308 × 17D6 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 1B44 ÷ 0030 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B44 × 0020 ÷ 0030 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B44 × 0308 ÷ 0030 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 1B44 ÷ 2329 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B44 × 0020 ÷ 2329 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B44 × 0308 ÷ 2329 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 1B44 ÷ 0025 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1B44 × 0020 ÷ 0025 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1B44 × 0308 ÷ 0025 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 1B44 ÷ 0024 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B44 × 0020 ÷ 0024 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B44 × 0308 ÷ 0024 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 1B44 × 0022 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1B44 × 0020 ÷ 0022 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1B44 × 0308 × 0022 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 1B44 × 0020 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B44 × 0020 × 0020 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 0020 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 1B44 × 002F ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1B44 × 0020 × 002F ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1B44 × 0308 × 002F ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 002F ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1B44 ÷ 1BF2 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B44 × 0020 ÷ 1BF2 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B44 × 0308 ÷ 1BF2 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1B44 ÷ 1B44 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B44 × 0020 ÷ 1B44 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B44 × 0308 ÷ 1B44 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1B44 × 2060 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B44 × 0020 × 2060 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B44 × 0308 × 2060 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 2060 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 1B44 × 200B ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B44 × 0020 × 200B ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B44 × 0308 × 200B ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 200B ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 1B44 ÷ 1F1E6 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B44 × 0020 ÷ 1F1E6 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B44 × 0308 ÷ 1F1E6 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 1B44 ÷ 261D ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B44 × 0020 ÷ 261D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B44 × 0308 ÷ 261D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 261D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 1B44 ÷ 1F3FB ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B44 × 0020 ÷ 1F3FB ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B44 × 0308 ÷ 1F3FB ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1B44 × 00AB ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B44 × 0020 ÷ 00AB ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B44 × 0308 × 00AB ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1B44 × 00BB ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B44 × 0020 × 00BB ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B44 × 0308 × 00BB ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 00BB ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1B44 × 0029 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B44 × 0020 × 0029 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B44 × 0308 × 0029 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B44 × 0308 × 0020 × 0029 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 1B44 ÷ 0028 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B44 × 0020 ÷ 0028 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B44 × 0308 ÷ 0028 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 1B44 × 0001 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B44 × 0020 ÷ 0001 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B44 × 0308 × 0001 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 1B44 × 200D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B44 × 0020 ÷ 200D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B44 × 0308 × 200D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 200D ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 1B44 ÷ 00A7 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B44 × 0020 ÷ 00A7 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B44 × 0308 ÷ 00A7 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 1B44 ÷ 50005 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B44 × 0020 ÷ 50005 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B44 × 0308 ÷ 50005 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 1B44 ÷ 0E01 ÷ # × [0.3] BALINESE ADEG ADEG (VI) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B44 × 0020 ÷ 0E01 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B44 × 0308 ÷ 0E01 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 1B44 × 3041 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1B44 × 0020 ÷ 3041 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1B44 × 0308 × 3041 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1B44 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] BALINESE ADEG ADEG (VI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 2060 × 1B05 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2060 × 0020 ÷ 1B05 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2060 × 0308 × 1B05 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 2060 × 0023 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] NUMBER SIGN (AL) ÷ [0.3]
× 2060 × 0020 ÷ 0023 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 2060 × 0308 × 0023 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] NUMBER SIGN (AL) ÷ [0.3]
× 2060 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 2060 × 11003 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2060 × 0020 ÷ 11003 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2060 × 0308 × 11003 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 2060 × 1BC0 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] BATAK LETTER A (AS) ÷ [0.3]
+× 2060 × 0020 ÷ 1BC0 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 2060 × 0308 × 1BC0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] BATAK LETTER A (AS) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 2060 × 2014 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] EM DASH (B2) ÷ [0.3]
× 2060 × 0020 ÷ 2014 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 2060 × 0308 × 2014 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] EM DASH (B2) ÷ [0.3]
@@ -5242,10 +7094,10 @@
× 2060 × 0020 ÷ 002D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 2060 × 0308 × 002D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 2060 × 0308 × 0020 ÷ 002D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2060 × 231A ÷ # × [0.3] WORD JOINER (WJ) × [11.02] WATCH (ID) ÷ [0.3]
-× 2060 × 0020 ÷ 231A ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2060 × 0308 × 231A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] WATCH (ID) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 231A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 2060 × 1B50 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2060 × 0020 ÷ 1B50 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2060 × 0308 × 1B50 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 2060 × 2024 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] ONE DOT LEADER (IN) ÷ [0.3]
× 2060 × 0020 ÷ 2024 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 2060 × 0308 × 2024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] ONE DOT LEADER (IN) ÷ [0.3]
@@ -5306,6 +7158,14 @@
× 2060 × 0020 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 2060 × 0308 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] SOLIDUS (SY) ÷ [0.3]
× 2060 × 0308 × 0020 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 2060 × 1BF2 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2060 × 0020 ÷ 1BF2 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2060 × 0308 × 1BF2 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 2060 × 1B44 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2060 × 0020 ÷ 1B44 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2060 × 0308 × 1B44 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 2060 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2060 × 0020 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 2060 × 0308 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -5326,6 +7186,14 @@
× 2060 × 0020 ÷ 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2060 × 0308 × 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 2060 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 2060 × 00AB ÷ # × [0.3] WORD JOINER (WJ) × [11.02] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2060 × 0020 ÷ 00AB ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2060 × 0308 × 00AB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2060 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 2060 × 00BB ÷ # × [0.3] WORD JOINER (WJ) × [11.02] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2060 × 0020 × 00BB ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2060 × 0308 × 00BB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2060 × 0308 × 0020 × 00BB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 2060 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 2060 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 2060 × 0308 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -5358,10 +7226,22 @@
× 2060 × 0020 ÷ 3041 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2060 × 0308 × 3041 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 2060 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 200B ÷ 1B05 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 200B × 0020 ÷ 1B05 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 200B ÷ 0308 ÷ 1B05 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 1B05 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 200B ÷ 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] NUMBER SIGN (AL) ÷ [0.3]
× 200B × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] NUMBER SIGN (AL) ÷ [0.3]
× 200B ÷ 0308 × 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 200B ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 200B ÷ 11003 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 200B × 0020 ÷ 11003 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 200B ÷ 0308 ÷ 11003 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 11003 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 200B ÷ 1BC0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] BATAK LETTER A (AS) ÷ [0.3]
+× 200B × 0020 ÷ 1BC0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] BATAK LETTER A (AS) ÷ [0.3]
+× 200B ÷ 0308 ÷ 1BC0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 200B ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] EM DASH (B2) ÷ [0.3]
× 200B × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] EM DASH (B2) ÷ [0.3]
× 200B ÷ 0308 ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -5414,10 +7294,10 @@
× 200B × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 200B ÷ 0308 × 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 200B ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200B ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] WATCH (ID) ÷ [0.3]
-× 200B × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] WATCH (ID) ÷ [0.3]
-× 200B ÷ 0308 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 200B ÷ 1B50 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 200B × 0020 ÷ 1B50 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 200B ÷ 0308 ÷ 1B50 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 1B50 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 200B ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200B × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200B ÷ 0308 × 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -5456,7 +7336,7 @@
× 200B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 200B ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 200B × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 200B ÷ 0308 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200B ÷ 0308 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 200B ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 200B ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] PERCENT SIGN (PO) ÷ [0.3]
× 200B × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -5478,6 +7358,14 @@
× 200B × 0020 ÷ 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] SOLIDUS (SY) ÷ [0.3]
× 200B ÷ 0308 × 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 200B ÷ 0308 × 0020 × 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 200B ÷ 1BF2 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 200B × 0020 ÷ 1BF2 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 200B ÷ 0308 ÷ 1BF2 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 200B ÷ 1B44 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 200B × 0020 ÷ 1B44 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 200B ÷ 0308 ÷ 1B44 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 1B44 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 200B ÷ 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] WORD JOINER (WJ) ÷ [0.3]
× 200B × 0020 ÷ 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] WORD JOINER (WJ) ÷ [0.3]
× 200B ÷ 0308 × 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -5498,6 +7386,14 @@
× 200B × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200B ÷ 0308 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200B ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200B ÷ 00AB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 200B × 0020 ÷ 00AB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 200B ÷ 0308 × 00AB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 200B ÷ 0308 × 0020 ÷ 00AB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 200B ÷ 00BB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 200B × 0020 ÷ 00BB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 200B ÷ 0308 × 00BB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 200B ÷ 0308 × 0020 × 00BB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 200B ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 200B × 0020 ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 200B ÷ 0308 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -5530,10 +7426,22 @@
× 200B × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 200B ÷ 0308 × 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 200B ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1F1E6 ÷ 1B05 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 1B05 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 1B05 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 1F1E6 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 1F1E6 × 0020 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 1F1E6 × 0308 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1F1E6 ÷ 11003 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 11003 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 11003 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1F1E6 ÷ 1BC0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 1BC0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 1BC0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 1F1E6 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 1F1E6 × 0020 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 1F1E6 × 0308 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -5586,13 +7494,13 @@
× 1F1E6 × 0020 ÷ 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 1F1E6 × 0308 × 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F1E6 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 1F1E6 × 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F1E6 ÷ 1B50 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 1B50 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 1B50 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1F1E6 × 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F1E6 × 0020 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 1F1E6 × 0308 × 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 1F1E6 × 0308 × 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F1E6 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] COMMA (IS) ÷ [0.3]
× 1F1E6 × 0020 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -5650,6 +7558,14 @@
× 1F1E6 × 0020 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 1F1E6 × 0308 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 1F1E6 × 0308 × 0020 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1F1E6 ÷ 1BF2 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 1BF2 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 1BF2 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1F1E6 ÷ 1B44 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 1B44 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1F1E6 × 0308 ÷ 1B44 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 1F1E6 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1F1E6 × 0020 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1F1E6 × 0308 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -5670,6 +7586,14 @@
× 1F1E6 × 0020 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F1E6 × 0308 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F1E6 × 00AB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1F1E6 × 0020 ÷ 00AB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1F1E6 × 0308 × 00AB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1F1E6 × 00BB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1F1E6 × 0020 × 00BB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1F1E6 × 0308 × 00BB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1F1E6 × 0308 × 0020 × 00BB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 1F1E6 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 1F1E6 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 1F1E6 × 0308 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -5702,10 +7626,22 @@
× 1F1E6 × 0020 ÷ 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1F1E6 × 0308 × 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1F1E6 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 261D ÷ 1B05 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 261D × 0020 ÷ 1B05 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 261D × 0308 ÷ 1B05 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 261D ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 261D × 0020 ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 261D × 0308 ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 261D ÷ 11003 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 261D × 0020 ÷ 11003 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 261D × 0308 ÷ 11003 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 11003 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 261D ÷ 1BC0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 261D × 0020 ÷ 1BC0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 261D × 0308 ÷ 1BC0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 261D ÷ 2014 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 261D × 0020 ÷ 2014 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 261D × 0308 ÷ 2014 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -5758,10 +7694,10 @@
× 261D × 0020 ÷ 002D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 261D × 0308 × 002D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 002D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 261D ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 261D × 0020 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 261D × 0308 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 261D ÷ 1B50 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 261D × 0020 ÷ 1B50 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 261D × 0308 ÷ 1B50 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 261D × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 261D × 0020 ÷ 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 261D × 0308 × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -5822,6 +7758,14 @@
× 261D × 0020 × 002F ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 261D × 0308 × 002F ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 261D × 0308 × 0020 × 002F ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 261D ÷ 1BF2 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 261D × 0020 ÷ 1BF2 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 261D × 0308 ÷ 1BF2 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 261D ÷ 1B44 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 261D × 0020 ÷ 1B44 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 261D × 0308 ÷ 1B44 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 261D × 2060 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 261D × 0020 × 2060 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 261D × 0308 × 2060 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -5842,6 +7786,14 @@
× 261D × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 261D × 0308 × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.21] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 261D × 00AB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 261D × 0020 ÷ 00AB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 261D × 0308 × 00AB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 261D × 0308 × 0020 ÷ 00AB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 261D × 00BB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 261D × 0020 × 00BB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 261D × 0308 × 00BB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 261D × 0308 × 0020 × 00BB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 261D × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 261D × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 261D × 0308 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -5874,10 +7826,22 @@
× 261D × 0020 ÷ 3041 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 261D × 0308 × 3041 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 261D × 0308 × 0020 ÷ 3041 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 1F3FB ÷ 1B05 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1F3FB × 0020 ÷ 1B05 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1F3FB × 0308 ÷ 1B05 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 1F3FB ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 1F3FB × 0020 ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 1F3FB × 0308 ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 1F3FB ÷ 11003 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1F3FB × 0020 ÷ 11003 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1F3FB × 0308 ÷ 11003 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 11003 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 1F3FB ÷ 1BC0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1F3FB × 0020 ÷ 1BC0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1F3FB × 0308 ÷ 1BC0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 1F3FB ÷ 2014 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 1F3FB × 0020 ÷ 2014 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 1F3FB × 0308 ÷ 2014 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -5930,10 +7894,10 @@
× 1F3FB × 0020 ÷ 002D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 1F3FB × 0308 × 002D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 002D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F3FB ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1F3FB × 0020 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1F3FB × 0308 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 1F3FB ÷ 1B50 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1F3FB × 0020 ÷ 1B50 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1F3FB × 0308 ÷ 1B50 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 1F3FB × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F3FB × 0020 ÷ 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 1F3FB × 0308 × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -5994,6 +7958,14 @@
× 1F3FB × 0020 × 002F ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 1F3FB × 0308 × 002F ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 1F3FB × 0308 × 0020 × 002F ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 1F3FB ÷ 1BF2 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1F3FB × 0020 ÷ 1BF2 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1F3FB × 0308 ÷ 1BF2 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 1F3FB ÷ 1B44 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1F3FB × 0020 ÷ 1B44 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1F3FB × 0308 ÷ 1B44 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 1F3FB × 2060 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1F3FB × 0020 × 2060 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 1F3FB × 0308 × 2060 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -6014,6 +7986,14 @@
× 1F3FB × 0020 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F3FB × 0308 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 1F3FB × 00AB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1F3FB × 0020 ÷ 00AB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1F3FB × 0308 × 00AB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1F3FB × 0308 × 0020 ÷ 00AB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 1F3FB × 00BB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1F3FB × 0020 × 00BB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1F3FB × 0308 × 00BB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1F3FB × 0308 × 0020 × 00BB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 1F3FB × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 1F3FB × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 1F3FB × 0308 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -6046,10 +8026,422 @@
× 1F3FB × 0020 ÷ 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1F3FB × 0308 × 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 1F3FB × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00AB × 1B05 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00AB × 0020 × 1B05 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00AB × 0308 × 1B05 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00AB × 0308 × 0020 × 1B05 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00AB × 0023 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] NUMBER SIGN (AL) ÷ [0.3]
+× 00AB × 0020 × 0023 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] NUMBER SIGN (AL) ÷ [0.3]
+× 00AB × 0308 × 0023 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] NUMBER SIGN (AL) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] NUMBER SIGN (AL) ÷ [0.3]
+× 00AB × 11003 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00AB × 0020 × 11003 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00AB × 0308 × 11003 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00AB × 0308 × 0020 × 11003 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00AB × 1BC0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] BATAK LETTER A (AS) ÷ [0.3]
+× 00AB × 0020 × 1BC0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] BATAK LETTER A (AS) ÷ [0.3]
+× 00AB × 0308 × 1BC0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] BATAK LETTER A (AS) ÷ [0.3]
+× 00AB × 0308 × 0020 × 1BC0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] BATAK LETTER A (AS) ÷ [0.3]
+× 00AB × 2014 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] EM DASH (B2) ÷ [0.3]
+× 00AB × 0020 × 2014 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] EM DASH (B2) ÷ [0.3]
+× 00AB × 0308 × 2014 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] EM DASH (B2) ÷ [0.3]
+× 00AB × 0308 × 0020 × 2014 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] EM DASH (B2) ÷ [0.3]
+× 00AB × 0009 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00AB × 0020 × 0009 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00AB × 0308 × 0009 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0009 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00AB × 00B4 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] ACUTE ACCENT (BB) ÷ [0.3]
+× 00AB × 0020 × 00B4 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] ACUTE ACCENT (BB) ÷ [0.3]
+× 00AB × 0308 × 00B4 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] ACUTE ACCENT (BB) ÷ [0.3]
+× 00AB × 0308 × 0020 × 00B4 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] ACUTE ACCENT (BB) ÷ [0.3]
+× 00AB × 000B ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00AB × 0020 × 000B ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00AB × 0308 × 000B ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00AB × 0308 × 0020 × 000B ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00AB × FFFC ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00AB × 0020 × FFFC ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00AB × 0308 × FFFC ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00AB × 0308 × 0020 × FFFC ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00AB × 007D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00AB × 0020 × 007D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00AB × 0308 × 007D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00AB × 0308 × 0020 × 007D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00AB × 000D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00AB × 0020 × 000D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00AB × 0308 × 000D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00AB × 0308 × 0020 × 000D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00AB × 0021 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00AB × 0020 × 0021 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00AB × 0308 × 0021 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0021 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00AB × 00A0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00AB × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00AB × 0308 × 00A0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00AB × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00AB × AC00 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00AB × 0020 × AC00 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00AB × 0308 × AC00 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00AB × 0308 × 0020 × AC00 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00AB × AC01 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00AB × 0020 × AC01 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00AB × 0308 × AC01 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00AB × 0308 × 0020 × AC01 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00AB × 05D0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00AB × 0020 × 05D0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00AB × 0308 × 05D0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00AB × 0308 × 0020 × 05D0 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00AB × 002D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00AB × 0020 × 002D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00AB × 0308 × 002D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00AB × 0308 × 0020 × 002D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00AB × 1B50 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00AB × 0020 × 1B50 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00AB × 0308 × 1B50 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00AB × 0308 × 0020 × 1B50 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00AB × 2024 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] ONE DOT LEADER (IN) ÷ [0.3]
+× 00AB × 0020 × 2024 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] ONE DOT LEADER (IN) ÷ [0.3]
+× 00AB × 0308 × 2024 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] ONE DOT LEADER (IN) ÷ [0.3]
+× 00AB × 0308 × 0020 × 2024 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] ONE DOT LEADER (IN) ÷ [0.3]
+× 00AB × 002C ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [13.02] COMMA (IS) ÷ [0.3]
+× 00AB × 0020 × 002C ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 00AB × 0308 × 002C ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 00AB × 0308 × 0020 × 002C ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 00AB × 1100 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00AB × 0020 × 1100 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00AB × 0308 × 1100 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00AB × 0308 × 0020 × 1100 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00AB × 11A8 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00AB × 0020 × 11A8 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00AB × 0308 × 11A8 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00AB × 0308 × 0020 × 11A8 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00AB × 1160 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00AB × 0020 × 1160 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00AB × 0308 × 1160 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00AB × 0308 × 0020 × 1160 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00AB × 000A ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00AB × 0020 × 000A ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00AB × 0308 × 000A ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00AB × 0308 × 0020 × 000A ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00AB × 0085 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00AB × 0020 × 0085 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00AB × 0308 × 0085 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00AB × 17D6 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00AB × 0020 × 17D6 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00AB × 0308 × 17D6 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00AB × 0308 × 0020 × 17D6 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00AB × 0030 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] DIGIT ZERO (NU) ÷ [0.3]
+× 00AB × 0020 × 0030 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] DIGIT ZERO (NU) ÷ [0.3]
+× 00AB × 0308 × 0030 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] DIGIT ZERO (NU) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0030 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] DIGIT ZERO (NU) ÷ [0.3]
+× 00AB × 2329 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00AB × 0020 × 2329 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00AB × 0308 × 2329 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00AB × 0308 × 0020 × 2329 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00AB × 0025 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] PERCENT SIGN (PO) ÷ [0.3]
+× 00AB × 0020 × 0025 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] PERCENT SIGN (PO) ÷ [0.3]
+× 00AB × 0308 × 0025 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] PERCENT SIGN (PO) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0025 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] PERCENT SIGN (PO) ÷ [0.3]
+× 00AB × 0024 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] DOLLAR SIGN (PR) ÷ [0.3]
+× 00AB × 0020 × 0024 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] DOLLAR SIGN (PR) ÷ [0.3]
+× 00AB × 0308 × 0024 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] DOLLAR SIGN (PR) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0024 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] DOLLAR SIGN (PR) ÷ [0.3]
+× 00AB × 0022 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] QUOTATION MARK (QU) ÷ [0.3]
+× 00AB × 0020 × 0022 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] QUOTATION MARK (QU) ÷ [0.3]
+× 00AB × 0308 × 0022 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] QUOTATION MARK (QU) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0022 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] QUOTATION MARK (QU) ÷ [0.3]
+× 00AB × 0020 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) ÷ [0.3]
+× 00AB × 0020 × 0020 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 00AB × 0308 × 0020 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0020 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 00AB × 002F ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00AB × 0020 × 002F ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00AB × 0308 × 002F ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 00AB × 0308 × 0020 × 002F ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00AB × 1BF2 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00AB × 0020 × 1BF2 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00AB × 0308 × 1BF2 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00AB × 0308 × 0020 × 1BF2 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00AB × 1B44 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00AB × 0020 × 1B44 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00AB × 0308 × 1B44 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00AB × 0308 × 0020 × 1B44 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00AB × 2060 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00AB × 0020 × 2060 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00AB × 0308 × 2060 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00AB × 0308 × 0020 × 2060 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00AB × 200B ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00AB × 0020 × 200B ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00AB × 0308 × 200B ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00AB × 0308 × 0020 × 200B ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00AB × 1F1E6 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00AB × 0020 × 1F1E6 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00AB × 0308 × 1F1E6 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00AB × 0308 × 0020 × 1F1E6 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00AB × 261D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00AB × 0020 × 261D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00AB × 0308 × 261D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00AB × 0308 × 0020 × 261D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00AB × 1F3FB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00AB × 0020 × 1F3FB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00AB × 0308 × 1F3FB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00AB × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00AB × 00AB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00AB × 0020 × 00AB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00AB × 0308 × 00AB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00AB × 0308 × 0020 × 00AB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00AB × 00BB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00AB × 0020 × 00BB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00AB × 0308 × 00BB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00AB × 0308 × 0020 × 00BB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00AB × 0029 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00AB × 0020 × 0029 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00AB × 0308 × 0029 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0029 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00AB × 0028 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00AB × 0020 × 0028 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00AB × 0308 × 0028 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0028 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00AB × 0001 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00AB × 0020 × 0001 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00AB × 0308 × 0001 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0001 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00AB × 200D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00AB × 0020 × 200D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00AB × 0308 × 200D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00AB × 0308 × 0020 × 200D ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00AB × 00A7 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00AB × 0020 × 00A7 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00AB × 0308 × 00A7 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00AB × 0308 × 0020 × 00A7 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00AB × 50005 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00AB × 0020 × 50005 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00AB × 0308 × 50005 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00AB × 0308 × 0020 × 50005 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00AB × 0E01 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00AB × 0020 × 0E01 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00AB × 0308 × 0E01 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00AB × 0308 × 0020 × 0E01 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00AB × 3041 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [15.11] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00AB × 0020 × 3041 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00AB × 0308 × 3041 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00AB × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.11] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00BB × 1B05 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00BB × 0020 ÷ 1B05 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00BB × 0308 × 1B05 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00BB × 0023 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] NUMBER SIGN (AL) ÷ [0.3]
+× 00BB × 0020 ÷ 0023 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 00BB × 0308 × 0023 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] NUMBER SIGN (AL) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 00BB × 11003 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00BB × 0020 ÷ 11003 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00BB × 0308 × 11003 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 11003 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00BB × 1BC0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] BATAK LETTER A (AS) ÷ [0.3]
+× 00BB × 0020 ÷ 1BC0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 00BB × 0308 × 1BC0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BATAK LETTER A (AS) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 00BB × 2014 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] EM DASH (B2) ÷ [0.3]
+× 00BB × 0020 ÷ 2014 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 00BB × 0308 × 2014 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] EM DASH (B2) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
+× 00BB × 0009 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00BB × 0020 ÷ 0009 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00BB × 0308 × 0009 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
+× 00BB × 00B4 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] ACUTE ACCENT (BB) ÷ [0.3]
+× 00BB × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 00BB × 0308 × 00B4 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] ACUTE ACCENT (BB) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
+× 00BB × 000B ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00BB × 0020 × 000B ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00BB × 0308 × 000B ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00BB × 0308 × 0020 × 000B ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
+× 00BB × FFFC ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00BB × 0020 ÷ FFFC ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00BB × 0308 × FFFC ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 00BB × 007D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00BB × 0020 × 007D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00BB × 0308 × 007D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00BB × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 00BB × 000D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00BB × 0020 × 000D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00BB × 0308 × 000D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00BB × 0308 × 0020 × 000D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+× 00BB × 0021 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00BB × 0020 × 0021 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00BB × 0308 × 0021 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00BB × 0308 × 0020 × 0021 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
+× 00BB × 00A0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00BB × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00BB × 0308 × 00A0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
+× 00BB × AC00 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00BB × 0020 ÷ AC00 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00BB × 0308 × AC00 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 00BB × AC01 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00BB × 0020 ÷ AC01 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00BB × 0308 × AC01 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 00BB × 05D0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00BB × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00BB × 0308 × 05D0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
+× 00BB × 002D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00BB × 0020 ÷ 002D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00BB × 0308 × 002D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
+× 00BB × 1B50 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00BB × 0020 ÷ 1B50 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00BB × 0308 × 1B50 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00BB × 2024 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] ONE DOT LEADER (IN) ÷ [0.3]
+× 00BB × 0020 ÷ 2024 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 00BB × 0308 × 2024 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] ONE DOT LEADER (IN) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 00BB × 002C ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [13.02] COMMA (IS) ÷ [0.3]
+× 00BB × 0020 × 002C ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 00BB × 0308 × 002C ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
+× 00BB × 0308 × 0020 × 002C ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
+× 00BB × 1100 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00BB × 0020 ÷ 1100 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00BB × 0308 × 1100 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 00BB × 11A8 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00BB × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00BB × 0308 × 11A8 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 00BB × 1160 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00BB × 0020 ÷ 1160 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00BB × 0308 × 1160 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 00BB × 000A ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00BB × 0020 × 000A ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00BB × 0308 × 000A ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00BB × 0308 × 0020 × 000A ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+× 00BB × 0085 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00BB × 0020 × 0085 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00BB × 0308 × 0085 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00BB × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
+× 00BB × 17D6 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00BB × 0020 ÷ 17D6 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00BB × 0308 × 17D6 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
+× 00BB × 0030 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] DIGIT ZERO (NU) ÷ [0.3]
+× 00BB × 0020 ÷ 0030 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 00BB × 0308 × 0030 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] DIGIT ZERO (NU) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
+× 00BB × 2329 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00BB × 0020 ÷ 2329 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00BB × 0308 × 2329 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 2329 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00BB × 0025 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
+× 00BB × 0020 ÷ 0025 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 00BB × 0308 × 0025 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
+× 00BB × 0024 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] DOLLAR SIGN (PR) ÷ [0.3]
+× 00BB × 0020 ÷ 0024 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 00BB × 0308 × 0024 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] DOLLAR SIGN (PR) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
+× 00BB × 0022 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 00BB × 0020 ÷ 0022 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 00BB × 0308 × 0022 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
+× 00BB × 0020 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [0.3]
+× 00BB × 0020 × 0020 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
+× 00BB × 0308 × 0020 × 0020 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
+× 00BB × 002F ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00BB × 0020 × 002F ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00BB × 0308 × 002F ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
+× 00BB × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00BB × 1BF2 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00BB × 0020 ÷ 1BF2 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00BB × 0308 × 1BF2 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00BB × 1B44 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00BB × 0020 ÷ 1B44 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00BB × 0308 × 1B44 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00BB × 2060 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00BB × 0020 × 2060 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00BB × 0308 × 2060 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00BB × 0308 × 0020 × 2060 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
+× 00BB × 200B ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00BB × 0020 × 200B ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00BB × 0308 × 200B ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00BB × 0308 × 0020 × 200B ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
+× 00BB × 1F1E6 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00BB × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00BB × 0308 × 1F1E6 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 00BB × 261D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00BB × 0020 ÷ 261D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00BB × 0308 × 261D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 261D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
+× 00BB × 1F3FB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00BB × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00BB × 0308 × 1F3FB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00BB × 00AB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00BB × 0020 ÷ 00AB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00BB × 0308 × 00AB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 00AB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00BB × 00BB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00BB × 0020 × 00BB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00BB × 0308 × 00BB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00BB × 0308 × 0020 × 00BB ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00BB × 0029 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00BB × 0020 × 0029 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00BB × 0308 × 0029 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00BB × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 00BB × 0028 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00BB × 0020 ÷ 0028 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00BB × 0308 × 0028 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
+× 00BB × 0001 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00BB × 0020 ÷ 0001 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00BB × 0308 × 0001 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
+× 00BB × 200D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00BB × 0020 ÷ 200D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00BB × 0308 × 200D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 200D ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
+× 00BB × 00A7 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00BB × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00BB × 0308 × 00A7 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
+× 00BB × 50005 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00BB × 0020 ÷ 50005 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00BB × 0308 × 50005 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
+× 00BB × 0E01 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00BB × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00BB × 0308 × 0E01 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
+× 00BB × 3041 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00BB × 0020 ÷ 3041 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00BB × 0308 × 3041 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00BB × 0308 × 0020 ÷ 3041 ÷ # × [0.3] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0029 ÷ 1B05 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0029 × 0020 ÷ 1B05 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0029 × 0308 ÷ 1B05 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0029 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
× 0029 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0029 × 0308 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
× 0029 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0029 ÷ 11003 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0029 × 0020 ÷ 11003 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0029 × 0308 ÷ 11003 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0029 ÷ 1BC0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0029 × 0020 ÷ 1BC0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0029 × 0308 ÷ 1BC0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0029 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0029 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0029 × 0308 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -6102,13 +8494,13 @@
× 0029 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0029 × 0308 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0029 × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0308 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 0029 × 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 ÷ 1B50 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0029 × 0020 ÷ 1B50 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0029 × 0308 ÷ 1B50 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0029 × 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0029 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 0029 × 0308 × 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 0029 × 0308 × 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0029 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0029 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] COMMA (IS) ÷ [0.3]
× 0029 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -6166,6 +8558,14 @@
× 0029 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0029 × 0308 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 0029 × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0029 ÷ 1BF2 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0029 × 0020 ÷ 1BF2 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0029 × 0308 ÷ 1BF2 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0029 ÷ 1B44 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0029 × 0020 ÷ 1B44 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0029 × 0308 ÷ 1B44 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0029 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0029 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0029 × 0308 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -6186,6 +8586,14 @@
× 0029 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0029 × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0029 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0029 × 00AB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0029 × 0020 ÷ 00AB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0029 × 0308 × 00AB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0029 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0029 × 00BB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0029 × 0020 × 00BB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0029 × 0308 × 00BB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0029 × 0308 × 0020 × 00BB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0029 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0029 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0029 × 0308 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -6218,10 +8626,22 @@
× 0029 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0029 × 0308 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0029 × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0028 × 1B05 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0028 × 0020 × 1B05 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0028 × 0308 × 1B05 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1B05 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0028 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
× 0028 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
× 0028 × 0308 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
× 0028 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0028 × 11003 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0028 × 0020 × 11003 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0028 × 0308 × 11003 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0028 × 0308 × 0020 × 11003 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0028 × 1BC0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0028 × 0020 × 1BC0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0028 × 0308 × 1BC0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1BC0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BATAK LETTER A (AS) ÷ [0.3]
× 0028 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] EM DASH (B2) ÷ [0.3]
× 0028 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
× 0028 × 0308 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EM DASH (B2) ÷ [0.3]
@@ -6274,10 +8694,10 @@
× 0028 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0028 × 0308 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0028 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0308 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
+× 0028 × 1B50 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0028 × 0020 × 1B50 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0028 × 0308 × 1B50 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1B50 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 0028 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0028 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0028 × 0308 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -6338,6 +8758,14 @@
× 0028 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0028 × 0308 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 0028 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0028 × 1BF2 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0028 × 0020 × 1BF2 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0028 × 0308 × 1BF2 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1BF2 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0028 × 1B44 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0028 × 0020 × 1B44 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0028 × 0308 × 1B44 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0028 × 0308 × 0020 × 1B44 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0028 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0028 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0028 × 0308 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -6358,6 +8786,14 @@
× 0028 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0028 × 0308 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0028 × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0028 × 00AB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0028 × 0020 × 00AB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0028 × 0308 × 00AB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0028 × 0308 × 0020 × 00AB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0028 × 00BB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0028 × 0020 × 00BB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0028 × 0308 × 00BB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0028 × 0308 × 0020 × 00BB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0028 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0028 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0028 × 0308 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -6390,10 +8826,22 @@
× 0028 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0028 × 0308 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0028 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0001 ÷ 1B05 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0001 × 0020 ÷ 1B05 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0001 × 0308 ÷ 1B05 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0001 × 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0001 × 0020 ÷ 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0001 × 0308 × 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0001 ÷ 11003 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0001 × 0020 ÷ 11003 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0001 × 0308 ÷ 11003 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0001 ÷ 1BC0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0001 × 0020 ÷ 1BC0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0001 × 0308 ÷ 1BC0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0001 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0001 × 0020 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0001 × 0308 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -6446,10 +8894,10 @@
× 0001 × 0020 ÷ 002D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0001 × 0308 × 002D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0001 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0001 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0001 × 0308 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0001 ÷ 1B50 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0001 × 0020 ÷ 1B50 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0001 × 0308 ÷ 1B50 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 0001 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0001 × 0020 ÷ 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0001 × 0308 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -6486,9 +8934,9 @@
× 0001 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0001 × 0308 × 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-#× 0001 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0001 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0001 × 0020 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 0001 × 0308 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0001 × 0308 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0001 × 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 0001 × 0020 ÷ 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -6510,6 +8958,14 @@
× 0001 × 0020 × 002F ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0001 × 0308 × 002F ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
× 0001 × 0308 × 0020 × 002F ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0001 ÷ 1BF2 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0001 × 0020 ÷ 1BF2 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0001 × 0308 ÷ 1BF2 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0001 ÷ 1B44 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0001 × 0020 ÷ 1B44 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0001 × 0308 ÷ 1B44 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0001 × 2060 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0001 × 0020 × 2060 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0001 × 0308 × 2060 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -6530,6 +8986,14 @@
× 0001 × 0020 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0001 × 0308 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0001 × 00AB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0001 × 0020 ÷ 00AB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0001 × 0308 × 00AB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0001 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0001 × 00BB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0001 × 0020 × 00BB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0001 × 0308 × 00BB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0001 × 0308 × 0020 × 00BB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0001 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0001 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0001 × 0308 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -6562,11 +9026,23 @@
× 0001 × 0020 ÷ 3041 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0001 × 0308 × 3041 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0001 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 200D × 1B05 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 200D × 0020 ÷ 1B05 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 200D × 0308 ÷ 1B05 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 200D × 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] NUMBER SIGN (AL) ÷ [0.3]
× 200D × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 200D × 0308 × 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-# × 200D × 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] EM DASH (B2) ÷ [0.3]
+× 200D × 11003 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 200D × 0020 ÷ 11003 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 200D × 0308 ÷ 11003 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 11003 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 200D × 1BC0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] BATAK LETTER A (AS) ÷ [0.3]
+× 200D × 0020 ÷ 1BC0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 200D × 0308 ÷ 1BC0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 200D × 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] EM DASH (B2) ÷ [0.3]
× 200D × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 200D × 0308 ÷ 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
@@ -6574,7 +9050,7 @@
× 200D × 0020 ÷ 0009 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 200D × 0308 × 0009 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 0009 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-# × 200D × 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] ACUTE ACCENT (BB) ÷ [0.3]
+× 200D × 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] ACUTE ACCENT (BB) ÷ [0.3]
× 200D × 0020 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
× 200D × 0308 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
@@ -6582,7 +9058,7 @@
× 200D × 0020 × 000B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 200D × 0308 × 000B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
× 200D × 0308 × 0020 × 000B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-# × 200D × FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
+× 200D × FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 200D × 0020 ÷ FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 200D × 0308 ÷ FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
× 200D × 0308 × 0020 ÷ FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
@@ -6602,11 +9078,11 @@
× 200D × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
× 200D × 0308 × 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [12.3] NO-BREAK SPACE (GL) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-# × 200D × AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL SYLLABLE GA (H2) ÷ [0.3]
+× 200D × AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 200D × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 200D × 0308 ÷ AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
× 200D × 0308 × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-# × 200D × AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
+× 200D × AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 200D × 0020 ÷ AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 200D × 0308 ÷ AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
× 200D × 0308 × 0020 ÷ AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
@@ -6618,10 +9094,10 @@
× 200D × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 200D × 0308 × 002D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200D × 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] WATCH (ID) ÷ [0.3]
-× 200D × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 200D × 0308 ÷ 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 200D × 1B50 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 200D × 0020 ÷ 1B50 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 200D × 0308 ÷ 1B50 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 200D × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] ONE DOT LEADER (IN) ÷ [0.3]
× 200D × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 200D × 0308 × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -6630,15 +9106,15 @@
× 200D × 0020 × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
× 200D × 0308 × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] COMMA (IS) ÷ [0.3]
× 200D × 0308 × 0020 × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-# × 200D × 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
+× 200D × 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 200D × 0020 ÷ 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 200D × 0308 ÷ 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-# × 200D × 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
+× 200D × 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 200D × 0020 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 200D × 0308 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-# × 200D × 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
+× 200D × 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 200D × 0020 ÷ 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 200D × 0308 ÷ 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
@@ -6660,7 +9136,7 @@
× 200D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 200D × 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 200D × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 200D × 0308 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 200D × 0308 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 200D × 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] PERCENT SIGN (PO) ÷ [0.3]
× 200D × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -6682,6 +9158,14 @@
× 200D × 0020 × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 200D × 0308 × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
× 200D × 0308 × 0020 × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 200D × 1BF2 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] BATAK PANGOLAT (VF) ÷ [0.3]
+× 200D × 0020 ÷ 1BF2 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 200D × 0308 ÷ 1BF2 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 200D × 1B44 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 200D × 0020 ÷ 1B44 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 200D × 0308 ÷ 1B44 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 200D × 2060 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] WORD JOINER (WJ) ÷ [0.3]
× 200D × 0020 × 2060 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 200D × 0308 × 2060 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -6690,7 +9174,7 @@
× 200D × 0020 × 200B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 200D × 0308 × 200B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
× 200D × 0308 × 0020 × 200B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-# × 200D × 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+× 200D × 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 200D × 0020 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 200D × 0308 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
@@ -6702,6 +9186,14 @@
× 200D × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200D × 0308 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 200D × 00AB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 200D × 0020 ÷ 00AB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 200D × 0308 × 00AB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 200D × 0308 × 0020 ÷ 00AB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 200D × 00BB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 200D × 0020 × 00BB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 200D × 0308 × 00BB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 200D × 0308 × 0020 × 00BB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 200D × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 200D × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 200D × 0308 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -6734,10 +9226,22 @@
× 200D × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 200D × 0308 × 3041 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 200D × 0308 × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 00A7 ÷ 1B05 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00A7 × 0020 ÷ 1B05 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00A7 × 0308 ÷ 1B05 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 00A7 × 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 00A7 × 0020 ÷ 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 00A7 × 0308 × 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 00A7 ÷ 11003 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00A7 × 0020 ÷ 11003 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00A7 × 0308 ÷ 11003 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 00A7 ÷ 1BC0 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 00A7 × 0020 ÷ 1BC0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 00A7 × 0308 ÷ 1BC0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 00A7 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 00A7 × 0020 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 00A7 × 0308 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -6790,10 +9294,10 @@
× 00A7 × 0020 ÷ 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 00A7 × 0308 × 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A7 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 00A7 × 0020 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00A7 × 0308 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 00A7 ÷ 1B50 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00A7 × 0020 ÷ 1B50 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00A7 × 0308 ÷ 1B50 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 00A7 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A7 × 0020 ÷ 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 00A7 × 0308 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -6830,9 +9334,9 @@
× 00A7 × 0020 ÷ 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 00A7 × 0308 × 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-#× 00A7 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A7 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 00A7 × 0020 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 00A7 × 0308 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 00A7 × 0308 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 00A7 × 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 00A7 × 0020 ÷ 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -6854,6 +9358,14 @@
× 00A7 × 0020 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 00A7 × 0308 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 00A7 × 0308 × 0020 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 00A7 ÷ 1BF2 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00A7 × 0020 ÷ 1BF2 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00A7 × 0308 ÷ 1BF2 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 00A7 ÷ 1B44 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00A7 × 0020 ÷ 1B44 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00A7 × 0308 ÷ 1B44 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 00A7 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00A7 × 0020 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 00A7 × 0308 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -6874,6 +9386,14 @@
× 00A7 × 0020 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A7 × 0308 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 00A7 × 00AB ÷ # × [0.3] SECTION SIGN (AI_AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00A7 × 0020 ÷ 00AB ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00A7 × 0308 × 00AB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00A7 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 00A7 × 00BB ÷ # × [0.3] SECTION SIGN (AI_AL) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00A7 × 0020 × 00BB ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00A7 × 0308 × 00BB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 00A7 × 0308 × 0020 × 00BB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 00A7 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 00A7 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 00A7 × 0308 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -6906,10 +9426,22 @@
× 00A7 × 0020 ÷ 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00A7 × 0308 × 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 00A7 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 50005 ÷ 1B05 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 50005 × 0020 ÷ 1B05 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 50005 × 0308 ÷ 1B05 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 50005 × 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 50005 × 0020 ÷ 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 50005 × 0308 × 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 50005 ÷ 11003 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 50005 × 0020 ÷ 11003 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 50005 × 0308 ÷ 11003 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 50005 ÷ 1BC0 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 50005 × 0020 ÷ 1BC0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 50005 × 0308 ÷ 1BC0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 50005 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 50005 × 0020 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 50005 × 0308 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -6962,10 +9494,10 @@
× 50005 × 0020 ÷ 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 50005 × 0308 × 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 50005 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 50005 × 0020 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 50005 × 0308 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 50005 ÷ 1B50 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 50005 × 0020 ÷ 1B50 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 50005 × 0308 ÷ 1B50 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 50005 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 50005 × 0020 ÷ 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 50005 × 0308 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -7002,9 +9534,9 @@
× 50005 × 0020 ÷ 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 50005 × 0308 × 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-#× 50005 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 50005 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 50005 × 0020 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 50005 × 0308 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 50005 × 0308 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 50005 × 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 50005 × 0020 ÷ 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -7026,6 +9558,14 @@
× 50005 × 0020 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 50005 × 0308 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 50005 × 0308 × 0020 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 50005 ÷ 1BF2 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 50005 × 0020 ÷ 1BF2 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 50005 × 0308 ÷ 1BF2 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 50005 ÷ 1B44 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 50005 × 0020 ÷ 1B44 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 50005 × 0308 ÷ 1B44 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 50005 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 50005 × 0020 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 50005 × 0308 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -7046,6 +9586,14 @@
× 50005 × 0020 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 50005 × 0308 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 50005 × 00AB ÷ # × [0.3] <reserved-50005> (XX_AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 50005 × 0020 ÷ 00AB ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 50005 × 0308 × 00AB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 50005 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 50005 × 00BB ÷ # × [0.3] <reserved-50005> (XX_AL) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 50005 × 0020 × 00BB ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 50005 × 0308 × 00BB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 50005 × 0308 × 0020 × 00BB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 50005 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 50005 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 50005 × 0308 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -7078,10 +9626,22 @@
× 50005 × 0020 ÷ 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 50005 × 0308 × 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 50005 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 0E01 ÷ 1B05 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0E01 × 0020 ÷ 1B05 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0E01 × 0308 ÷ 1B05 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 0E01 × 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0E01 × 0020 ÷ 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 0E01 × 0308 × 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 0E01 ÷ 11003 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0E01 × 0020 ÷ 11003 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0E01 × 0308 ÷ 11003 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 0E01 ÷ 1BC0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0E01 × 0020 ÷ 1BC0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0E01 × 0308 ÷ 1BC0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 0E01 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 0E01 × 0020 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 0E01 × 0308 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -7134,10 +9694,10 @@
× 0E01 × 0020 ÷ 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 0E01 × 0308 × 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0E01 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0E01 × 0020 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0E01 × 0308 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
+× 0E01 ÷ 1B50 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0E01 × 0020 ÷ 1B50 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0E01 × 0308 ÷ 1B50 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0E01 × 0020 ÷ 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 0E01 × 0308 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
@@ -7174,9 +9734,9 @@
× 0E01 × 0020 ÷ 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
× 0E01 × 0308 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-#× 0E01 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0E01 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0E01 × 0020 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-#× 0E01 × 0308 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
+× 0E01 × 0308 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
× 0E01 × 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
× 0E01 × 0020 ÷ 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
@@ -7198,6 +9758,14 @@
× 0E01 × 0020 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 0E01 × 0308 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 0E01 × 0308 × 0020 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 0E01 ÷ 1BF2 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0E01 × 0020 ÷ 1BF2 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0E01 × 0308 ÷ 1BF2 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 0E01 ÷ 1B44 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0E01 × 0020 ÷ 1B44 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0E01 × 0308 ÷ 1B44 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 0E01 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0E01 × 0020 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 0E01 × 0308 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -7218,6 +9786,14 @@
× 0E01 × 0020 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0E01 × 0308 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 0E01 × 00AB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0E01 × 0020 ÷ 00AB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0E01 × 0308 × 00AB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0E01 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 0E01 × 00BB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0E01 × 0020 × 00BB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0E01 × 0308 × 00BB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0E01 × 0308 × 0020 × 00BB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 0E01 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0E01 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0E01 × 0308 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -7250,10 +9826,22 @@
× 0E01 × 0020 ÷ 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0E01 × 0308 × 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
× 0E01 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
+× 3041 ÷ 1B05 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 3041 × 0020 ÷ 1B05 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 3041 × 0308 ÷ 1B05 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 1B05 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE LETTER AKARA (AK) ÷ [0.3]
× 3041 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 3041 × 0020 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
× 3041 × 0308 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
+× 3041 ÷ 11003 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 3041 × 0020 ÷ 11003 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 3041 × 0308 ÷ 11003 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 11003 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BRAHMI SIGN JIHVAMULIYA (AP) ÷ [0.3]
+× 3041 ÷ 1BC0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 3041 × 0020 ÷ 1BC0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
+× 3041 × 0308 ÷ 1BC0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK LETTER A (AS) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 1BC0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK LETTER A (AS) ÷ [0.3]
× 3041 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] EM DASH (B2) ÷ [0.3]
× 3041 × 0020 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
× 3041 × 0308 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
@@ -7306,13 +9894,13 @@
× 3041 × 0020 ÷ 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
× 3041 × 0308 × 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 3041 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 3041 × 0020 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 3041 × 0308 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-#× 3041 × 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 3041 ÷ 1B50 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 3041 × 0020 ÷ 1B50 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 3041 × 0308 ÷ 1B50 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 1B50 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE DIGIT ZERO (ID) ÷ [0.3]
+× 3041 × 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 3041 × 0020 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-#× 3041 × 0308 × 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
+× 3041 × 0308 × 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
× 3041 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] COMMA (IS) ÷ [0.3]
× 3041 × 0020 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
@@ -7370,6 +9958,14 @@
× 3041 × 0020 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
× 3041 × 0308 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
× 3041 × 0308 × 0020 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
+× 3041 ÷ 1BF2 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 3041 × 0020 ÷ 1BF2 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 3041 × 0308 ÷ 1BF2 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 1BF2 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BATAK PANGOLAT (VF) ÷ [0.3]
+× 3041 ÷ 1B44 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 3041 × 0020 ÷ 1B44 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 3041 × 0308 ÷ 1B44 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 1B44 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] BALINESE ADEG ADEG (VI) ÷ [0.3]
× 3041 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 3041 × 0020 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
× 3041 × 0308 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
@@ -7390,6 +9986,14 @@
× 3041 × 0020 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 3041 × 0308 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 3041 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
+× 3041 × 00AB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 3041 × 0020 ÷ 00AB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 3041 × 0308 × 00AB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 3041 × 0308 × 0020 ÷ 00AB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) ÷ [0.3]
+× 3041 × 00BB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 3041 × 0020 × 00BB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 3041 × 0308 × 00BB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 3041 × 0308 × 0020 × 00BB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
× 3041 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 3041 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 3041 × 0308 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
@@ -7457,7 +10061,7 @@
× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.21] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
× 0066 × 0069 × 006E × 0061 × 006C ÷ # × [0.3] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER L (AL) ÷ [0.3]
× 0063 × 0061 × 006E × 0027 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3]
-× 0063 × 0061 × 006E × 2019 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3]
+× 0063 × 0061 × 006E × 2019 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3]
× 0027 × 0063 × 0061 × 006E × 0027 × 0020 ÷ 006E × 006F × 0074 ÷ # × [0.3] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] APOSTROPHE (QU) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER T (AL) ÷ [0.3]
× 0063 × 0061 × 006E × 0020 ÷ 0027 × 006E × 006F × 0074 × 0027 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER T (AL) × [19.01] APOSTROPHE (QU) ÷ [0.3]
× 0062 × 0075 × 0067 × 0028 × 0073 × 0029 × 0020 × 0020 × 0020 × 0020 × 0020 ÷ # × [0.3] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
@@ -7490,10 +10094,10 @@
× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
× 0063 × 006F × 0064 × 0065 × 005C ÷ 007B × 0073 × 005C × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0063 × 006F × 0064 × 0065 × 007B × 0020 × 0073 × 0020 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-#× 0063 × 006F × 0064 × 0028 × 0065 × 0029 × 2026 ÷ 0028 × 0073 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-#× 0028 × 0063 × 006F × 0064 × 0028 × 0065 × 0029 × 2026 × 0029 × 0073 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [22.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER S (AL) ÷ [0.3]
-#× 0063 × 006F × 0064 × 007B × 0065 × 007D × 2026 ÷ 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-#× 007B × 0063 × 006F × 0064 × 007B × 0065 × 007D × 2026 × 007D ÷ 0073 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [22.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER S (AL) ÷ [0.3]
+× 0063 × 006F × 0064 × 0028 × 0065 × 0029 × 2026 ÷ 0028 × 0073 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0028 × 0063 × 006F × 0064 × 0028 × 0065 × 0029 × 2026 × 0029 × 0073 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [22.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER S (AL) ÷ [0.3]
+× 0063 × 006F × 0064 × 007B × 0065 × 007D × 2026 ÷ 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
+× 007B × 0063 × 006F × 0064 × 007B × 0065 × 007D × 2026 × 007D ÷ 0073 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [22.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER S (AL) ÷ [0.3]
× 0028 × 0063 × 006F × 006E × 002D × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
× 0028 × 0063 × 006F × 006E × 00AD × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
× 0028 × 0063 × 006F × 006E × 2011 × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
@@ -7510,15 +10114,15 @@
× 0063 × 0072 × 0065 × 0301 × 005B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 005D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT SQUARE BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [0.3]
× 0063 × 0072 × 0065 × 0301 × 007B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 0308 × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0308 × 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 0028 × 0020 × 0308 × 0020 × 0029 × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 0028 × 0020 × 0308 × 0020 × 0029 × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0308 × 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0020 × 0308 × 0020 × 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 ÷ 0028 × 0020 × 0308 × 0020 × 0029 × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 0028 × 0020 × 0308 × 0020 × 0029 × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 0308 × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0308 × 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 007B × 0020 × 0308 × 0020 × 007D × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 007B × 0020 × 0308 × 0020 × 007D × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0308 × 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.11] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0020 × 0308 × 0020 × 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 ÷ 007B × 0020 × 0308 × 0020 × 007D × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) ÷ [18.0] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
+× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 007B × 0020 × 0308 × 0020 × 007D × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 0029 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 0029 × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 0029 × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
@@ -7601,14 +10205,14 @@
× 0028 × 0073 × 0029 × 0020 ÷ 672C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
× 0028 × 0073 × 0029 × 0020 ÷ 307E ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
× 0028 × 0073 × 0029 × 0020 ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-#× 308B × 3002 ÷ 0064 × 006F × 0067 ÷ FF08 × 72AC × FF09 ÷ 3092 ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-72AC (ID) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
+× 308B × 3002 ÷ 0064 × 006F × 0067 ÷ FF08 × 72AC × FF09 ÷ 3092 ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-72AC (ID) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
× 672C ÷ FF08 × 307E ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
× 672C × 0020 ÷ 0028 × 0061 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
× 70B9 × 0020 ÷ 005B × 7DE8 ÷ 96C6 × 005D ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-70B9 (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT SQUARE BRACKET (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-7DE8 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-96C6 (ID) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [0.3]
× 0061 × 0028 × 0073 × 0029 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [0.3]
× FF08 × 30B6 × 30FB ÷ 30AF ÷ 30A4 × 30C3 ÷ 30AF × 30FB ÷ 30D6 ÷ # × [0.3] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER ZA (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] KATAKANA LETTER I (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER BU (ID) ÷ [0.3]
-#× 0070 ÷ FF08 × 30AF ÷ 30A4 × 30C3 ÷ 30AF × 30FB ÷ 30D6 ÷ # × [0.3] LATIN SMALL LETTER P (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [999.0] KATAKANA LETTER I (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER BU (ID) ÷ [0.3]
-#× 0061 × 0062 ÷ FF08 × 30AF ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [0.3]
+× 0070 ÷ FF08 × 30AF ÷ 30A4 × 30C3 ÷ 30AF × 30FB ÷ 30D6 ÷ # × [0.3] LATIN SMALL LETTER P (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [999.0] KATAKANA LETTER I (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER BU (ID) ÷ [0.3]
+× 0061 × 0062 ÷ FF08 × 30AF ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [0.3]
× 0028 × 5370 ÷ 672C × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-5370 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
× 30B9 ÷ FF08 × 3044 ÷ # × [0.3] KATAKANA LETTER SU (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER I (ID) ÷ [0.3]
× 30C9 ÷ FF08 × 30DD ÷ # × [0.3] KATAKANA LETTER DO (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER PO (ID) ÷ [0.3]
@@ -7632,7 +10236,7 @@
× 8CA8 × 0029 × 0020 ÷ 002D × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8CA8 (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
× 91CF × 0029 × 0020 × 301C × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-91CF (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [16.0] WAVE DASH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
× 30C9 ÷ 91CD × FF09 × 0020 × 301C × 0020 ÷ 529B × 30FB ÷ 91CD ÷ # × [0.3] KATAKANA LETTER DO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-91CD (ID) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [7.01] SPACE (SP) × [16.0] WAVE DASH (NS) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-529B (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] CJK UNIFIED IDEOGRAPH-91CD (ID) ÷ [0.3]
-× 0061 × 0062 × 0022 × FF08 × 307E ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [19.01] QUOTATION MARK (QU) × [15.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
+× 0061 × 0062 × 0022 × FF08 × 307E ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [19.01] QUOTATION MARK (QU) × [19.02] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
× 306F × 0020 ÷ 0022 × 0073 × 0022 × 0020 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) × [19.02] LATIN SMALL LETTER S (AL) × [19.01] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [0.3]
× 306F × 3001 × 0022 × 0054 × 0068 × 0065 × 0020 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [19.01] QUOTATION MARK (QU) × [19.02] LATIN CAPITAL LETTER T (AL) × [28.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [0.3]
× 0064 × 006F × 0067 × 0022 × 0020 ÷ 3092 ÷ # × [0.3] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER G (AL) × [19.01] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
@@ -7678,9 +10282,25 @@
× 1F1F7 × 1F1FA ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) ÷ [30.13] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
× 1F1F7 × 1F1FA × 200B ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.12] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
× 05D0 × 002D × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.02] HYPHEN-MINUS (HY) × [21.1] HEBREW LETTER ALEF (HL) ÷ [0.3]
-# × 1F02C × 1F3FF ÷ # × [0.3] <reserved-1F02C> (Other) × [30.22] EMOJI MODIFIER FITZPATRICK TYPE-6 (EM) ÷ [0.3]
+× 11F26 ÷ 11F02 × 11F2D ÷ 11F26 × 11F42 × 11F26 ÷ 11F31 × 11F41 ÷ # × [0.3] KAWI LETTER PA (AK) ÷ [999.0] KAWI SIGN REPHA (AP) × [28.11] KAWI LETTER LA (AK) ÷ [999.0] KAWI LETTER PA (AK) × [28.12] KAWI CONJOINER (VI) × [28.13] KAWI LETTER PA (AK) ÷ [999.0] KAWI LETTER SA (AK) × [9.0] KAWI SIGN KILLER (CM1_CM) ÷ [0.3]
+× 1BD7 × 1BEC ÷ 1BD2 × 1BEA × 1BC9 × 1BF3 ÷ 1BC2 × 1BE7 × 1BC9 × 1BF3 ÷ # × [0.3] BATAK LETTER NORTHERN TA (AS) × [9.0] BATAK VOWEL SIGN O (CM1_CM) ÷ [999.0] BATAK LETTER RA (AS) × [9.0] BATAK VOWEL SIGN I (CM1_CM) × [28.14] BATAK LETTER NA (AS) × [28.12] BATAK PANONGONAN (VF) ÷ [999.0] BATAK LETTER HA (AS) × [9.0] BATAK VOWEL SIGN E (CM1_CM) × [28.14] BATAK LETTER NA (AS) × [28.12] BATAK PANONGONAN (VF) ÷ [0.3]
+× 1B18 ÷ 1B27 × 1B44 × 200C × 1B2B × 1B38 ÷ 1B31 × 1B44 × 1B1D × 1B36 ÷ # × [0.3] BALINESE LETTER CA (AK) ÷ [999.0] BALINESE LETTER PA (AK) × [28.12] BALINESE ADEG ADEG (VI) × [9.0] ZERO WIDTH NON-JOINER (CM1_CM) × [28.13] BALINESE LETTER MA (AK) × [9.0] BALINESE VOWEL SIGN SUKU (CM1_CM) ÷ [999.0] BALINESE LETTER SA SAPA (AK) × [28.12] BALINESE ADEG ADEG (VI) × [28.13] BALINESE LETTER TA LATIK (AK) × [9.0] BALINESE VOWEL SIGN ULU (CM1_CM) ÷ [0.3]
+× 0065 × 25CC × 0302 × 25CC × 0323 ÷ # × [0.3] LATIN SMALL LETTER E (AL) × [28.0] DOTTED CIRCLE (AL) × [9.0] COMBINING CIRCUMFLEX ACCENT (CM1_CM) × [28.0] DOTTED CIRCLE (AL) × [9.0] COMBINING DOT BELOW (CM1_CM) ÷ [0.3]
+× 25CC × 1B44 × 1B2C ÷ # × [0.3] DOTTED CIRCLE (AL) × [28.12] BALINESE ADEG ADEG (VI) × [28.13] BALINESE LETTER YA (AK) ÷ [0.3]
+× 25CC × 1B44 × 25CC × 1B44 × 1B2C ÷ # × [0.3] DOTTED CIRCLE (AL) × [28.12] BALINESE ADEG ADEG (VI) × [28.13] DOTTED CIRCLE (AL) × [28.12] BALINESE ADEG ADEG (VI) × [28.13] BALINESE LETTER YA (AK) ÷ [0.3]
+× 25CC × A9B3 × A9C0 × A9A0 ÷ # × [0.3] DOTTED CIRCLE (AL) × [9.0] JAVANESE SIGN CECAK TELU (CM1_CM) × [28.12] JAVANESE PANGKON (VI) × [28.13] JAVANESE LETTER TA (AK) ÷ [0.3]
+× 201D × 004A × 006F × 002C × 0020 ÷ 006E × 00E5 × 0072 × 2019 × 006E × 0020 ÷ 0064 × 0061 × 0020 ÷ 0068 × 0061 × 0020 ÷ 0067 × 00E5 × 0074 × 0074 × 0020 ÷ 0065 × 0074 × 0074 × 0020 ÷ 0073 × 0074 × 00F6 × 0063 × 006B × 0020 ÷ 0074 × 0065 × 002C × 0020 ÷ 0073 × 00E5 × 0020 ÷ 006B × 006F × 006D × 006D × 0065 × 0072 × 2019 × 006E × 0020 ÷ 0074 × 0065 × 0020 ÷ 0065 × 0020 ÷ 00E5 × 002C × 0020 ÷ 00E5 × 0020 ÷ 0069 × 0020 ÷ 00E5 × 0061 × 0020 ÷ 00E4 × 0020 ÷ 0065 × 0020 ÷ 00F6 × 002E × 201D × 000A ÷ 201D × 0056 × 0061 × 0073 × 0061 × 201D × 002C × 0020 ÷ 0073 × 0061 × 2019 × 006E × 002E × 000A ÷ 201D × 00C5 × 0020 ÷ 0069 × 0020 ÷ 00E5 × 0061 × 0020 ÷ 00E4 × 0020 ÷ 0065 × 0020 ÷ 00F6 × 201D × 002C × 0020 ÷ 0073 × 0061 × 0020 ÷ 006A × 0061 × 002E ÷ # × [0.3] RIGHT DOUBLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN CAPITAL LETTER J (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [28.0] LATIN SMALL LETTER R (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER K (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER E (AL) × [13.02] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [13.02] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER I (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A WITH DIAERESIS (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER O WITH DIAERESIS (AL) × [13.02] FULL STOP (IS) × [15.21] RIGHT DOUBLE QUOTATION MARK (QU_QU_Pf) × [6.0] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT DOUBLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN CAPITAL LETTER V (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER A (AL) × [15.21] RIGHT DOUBLE QUOTATION MARK (QU_QU_Pf) × [13.02] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER A (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN SMALL LETTER N (AL) × [13.02] FULL STOP (IS) × [6.0] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT DOUBLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN CAPITAL LETTER A WITH RING ABOVE (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER I (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A WITH DIAERESIS (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER O WITH DIAERESIS (AL) × [15.21] RIGHT DOUBLE QUOTATION MARK (QU_QU_Pf) × [13.02] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER J (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [0.3]
+× 0045 × 006E × 0020 ÷ 0067 × 00E5 × 006E × 0067 × 0020 ÷ 0075 × 006E × 0064 × 0066 × 00F6 × 006C × 006C × 0020 ÷ 0064 × 0065 × 0074 × 0020 ÷ 0068 × 006F × 006E × 006F × 006D × 0020 ÷ 0064 × 006F × 0063 × 006B × 002C × 0020 ÷ 006D × 0065 × 0064 × 0061 × 006E × 0020 ÷ 0068 × 0061 × 006E × 0020 ÷ 0073 × 006C × 00E4 × 0070 × 0061 × 0064 × 0065 × 0020 ÷ 0070 × 00E5 × 0020 ÷ 0064 × 0065 × 0074 × 0020 ÷ 0076 × 00E5 × 0074 × 0061 × 0020 ÷ 0068 × 00F6 × 0065 × 0074 × 003A × 0020 ÷ 00BB × 0056 × 0061 × 0072 × 0066 × 00F6 × 0072 × 0020 ÷ 00E4 × 0072 × 0020 ÷ 0068 × 00F6 × 0065 × 0074 × 0020 ÷ 0072 × 0065 × 0064 × 0061 × 006E × 0020 ÷ 0074 × 006F × 0072 × 0072 × 0074 × 0020 ÷ 006F × 0063 × 0068 × 0020 ÷ 0069 × 006E × 006B × 00F6 × 0072 × 0074 × 0020 ÷ 0064 × 00E4 × 0072 × 0020 ÷ 0062 × 006F × 0072 × 0074 × 0061 × 0020 ÷ 0070 × 00E5 × 0020 ÷ 0053 × 006F × 006C × 0062 × 0061 × 0063 × 006B × 0065 × 006E × 002C × 0020 ÷ 006F × 0063 × 0068 × 0020 ÷ 0068 × 00E4 × 0072 × 0020 ÷ 0068 × 006F × 0073 × 0020 ÷ 006F × 0073 × 0073 × 0020 ÷ 00E4 × 0072 × 0020 ÷ 0064 × 0065 × 0074 × 0020 ÷ 0076 × 00E5 × 0074 × 0074 × 003F × 00BB × 0020 ÷ 2014 × 0020 ÷ 00BB × 0044 × 00E4 × 0072 × 0066 × 00F6 × 0072 × 0020 ÷ 0061 × 0074 × 0074 × 0020 ÷ 0064 × 0065 × 0020 ÷ 0068 × 0061 × 0020 ÷ 006F × 0066 × 0074 × 0061 × 0072 × 0065 × 0020 ÷ 0073 × 006F × 006C × 0020 ÷ 00E4 × 006E × 0020 ÷ 0076 × 0069 × 002E × 00BB ÷ # × [0.3] LATIN CAPITAL LETTER E (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER O WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER L (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER M (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER K (AL) × [13.02] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER O WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER T (AL) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN CAPITAL LETTER V (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER O WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER R (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER R (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER O WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER H (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER O WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER A WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER R (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER S (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER H (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER A WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER R (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER R (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER A WITH RING ABOVE (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [13.01] QUESTION MARK (EX) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN CAPITAL LETTER D (AL) × [28.0] LATIN SMALL LETTER A WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER O WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER R (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER L (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A WITH DIAERESIS (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER I (AL) × [13.02] FULL STOP (IS) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 0076 × 006F × 0075 × 0073 × 0020 ÷ 006D × 0065 × 0020 ÷ 0068 × 0065 × 0075 × 0072 × 0074 × 0065 × 007A × 002C × 0020 ÷ 0076 × 006F × 0075 × 0073 × 0020 ÷ 0064 × 0069 × 0074 × 0065 × 0073 × 0020 × 003A × 0020 ÷ 00AB × 0020 × 0045 × 0078 × 0063 × 0075 × 0073 × 0065 × 007A × 002D ÷ 006D × 006F × 0069 × 002C × 0020 × 00BB × 0020 ÷ 0065 × 0074 × 0020 ÷ 0076 × 006F × 0075 × 0073 × 0020 ÷ 0063 × 0072 × 006F × 0079 × 0065 × 007A × 0020 ÷ 0071 × 0075 × 0065 × 0020 ÷ 0063 × 0065 × 006C × 0061 × 0020 ÷ 0073 × 0075 × 0066 × 0066 × 0069 × 0074 × 0020 × 003F ÷ # × [0.3] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [13.02] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] LATIN CAPITAL LETTER E (AL) × [28.0] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER I (AL) × [13.02] COMMA (IS) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER Y (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER Q (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) × [13.01] QUESTION MARK (EX) ÷ [0.3]
+× 006A × 2019 × 0061 × 0069 × 0020 ÷ 0064 × 0069 × 0074 × 0020 × 003A × 0020 ÷ 00AB × 0020 × 0045 × 0078 × 0063 × 0075 × 0073 × 0065 × 007A × 002D ÷ 006D × 006F × 0069 × 002E × 0020 × 00BB × 0020 ÷ 0049 × 006C × 0020 ÷ 006D × 0065 × 0020 ÷ 0073 × 0065 × 006D × 0062 × 006C × 0065 × 0020 ÷ 0064 × 006F × 006E × 0063 × 0020 ÷ 0071 × 0075 × 0065 × 0020 ÷ 0063 × 2019 × 0065 × 0073 × 0074 × 0020 ÷ 0061 × 0073 × 0073 × 0065 × 007A × 002E ÷ # × [0.3] LATIN SMALL LETTER J (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER I (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] LATIN CAPITAL LETTER E (AL) × [28.0] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER I (AL) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER I (AL) × [28.0] LATIN SMALL LETTER L (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER C (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER Q (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [13.02] FULL STOP (IS) ÷ [0.3]
+× 0045 × 0074 × 0020 ÷ 0076 × 0069 × 0073 × 0065 × 0020 ÷ 0061 × 0075 × 0020 ÷ 0066 × 0072 × 006F × 006E × 0074 × 0020 ÷ 006D × 006F × 006E × 0020 ÷ 0070 × 00E8 × 0072 × 0065 × 0020 ÷ 0065 × 006E × 0020 ÷ 0063 × 0072 × 0069 × 0061 × 006E × 0074 × 0020 × 003A × 0020 ÷ 00AB × 0020 × 0043 × 0061 × 0072 × 0061 × 006D × 0062 × 0061 × 0020 × 0021 × 0020 × 00BB × 2028 ÷ 004C × 0065 × 0020 ÷ 0063 × 006F × 0075 × 0070 × 0020 ÷ 0070 × 0061 × 0073 × 0073 × 0061 × 0020 ÷ 0073 × 0069 × 0020 ÷ 0070 × 0072 × 00E8 × 0073 × 002C × 0020 ÷ 0071 × 0075 × 0065 × 0020 ÷ 006C × 0065 × 0020 ÷ 0063 × 0068 × 0061 × 0070 × 0065 × 0061 × 0075 × 0020 ÷ 0074 × 006F × 006D × 0062 × 0061 × 2028 ÷ 0045 × 0074 × 0020 ÷ 0071 × 0075 × 0065 × 0020 ÷ 006C × 0065 × 0020 ÷ 0063 × 0068 × 0065 × 0076 × 0061 × 006C × 0020 ÷ 0066 × 0069 × 0074 × 0020 ÷ 0075 × 006E × 0020 ÷ 00E9 × 0063 × 0061 × 0072 × 0074 × 0020 ÷ 0065 × 006E × 0020 ÷ 0061 × 0072 × 0072 × 0069 × 00E8 × 0072 × 0065 × 002E × 2028 ÷ 00AB × 0020 × 0044 × 006F × 006E × 006E × 0065 × 002D ÷ 006C × 0075 × 0069 × 0020 ÷ 0074 × 006F × 0075 × 0074 × 0020 ÷ 0064 × 0065 × 0020 ÷ 006D × 00EA × 006D × 0065 × 0020 ÷ 00E0 × 0020 ÷ 0062 × 006F × 0069 × 0072 × 0065 × 002C × 0020 × 00BB × 0020 ÷ 0064 × 0069 × 0074 × 0020 ÷ 006D × 006F × 006E × 0020 ÷ 0070 × 00E8 × 0072 × 0065 × 002E ÷ # × [0.3] LATIN CAPITAL LETTER E (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER U (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E WITH GRAVE (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] LATIN CAPITAL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [6.0] LINE SEPARATOR (BK) ÷ [4.0] LATIN CAPITAL LETTER L (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER P (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER I (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E WITH GRAVE (AL) × [28.0] LATIN SMALL LETTER S (AL) × [13.02] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER Q (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER U (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER A (AL) × [6.0] LINE SEPARATOR (BK) ÷ [4.0] LATIN CAPITAL LETTER E (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER Q (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER L (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER E WITH ACUTE (AL) × [28.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E WITH GRAVE (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [13.02] FULL STOP (IS) × [6.0] LINE SEPARATOR (BK) ÷ [4.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] LATIN CAPITAL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER E (AL) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER I (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER E WITH CIRCUMFLEX (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A WITH GRAVE (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [13.02] COMMA (IS) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E WITH GRAVE (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [13.02] FULL STOP (IS) ÷ [0.3]
+× 00AB × 0020 × 004A × 0065 × 0020 ÷ 006D × 0065 × 0020 ÷ 0073 × 0075 × 0069 × 0073 × 0020 ÷ 0076 × 0065 × 006E × 0067 × 00E9 × 0020 ÷ 005B × 2026 × 005D × 2029 ÷ 00BB × 0020 ÷ 004F × 006E × 0020 ÷ 006E × 0065 × 0020 ÷ 006D × 0065 × 0020 ÷ 0076 × 0065 × 0072 × 0072 × 0061 × 0020 ÷ 006E × 0069 × 0020 ÷ 0070 × 0061 × 0072 × 006C × 0065 × 0072 × 0020 ÷ 006E × 0069 × 0020 ÷ 00E9 × 0063 × 0072 × 0069 × 0072 × 0065 × 0020 × 003B × 0020 ÷ 0076 × 006F × 0075 × 0073 × 0020 ÷ 0061 × 0075 × 0072 × 0065 × 007A × 0020 ÷ 0065 × 0075 × 0020 ÷ 006D × 0065 × 0073 × 0020 ÷ 0064 × 0065 × 0072 × 006E × 0069 × 00E8 × 0072 × 0065 × 0073 × 0020 ÷ 0070 × 0061 × 0072 × 006F × 006C × 0065 × 0073 × 0020 ÷ 0063 × 006F × 006D × 006D × 0065 × 0020 ÷ 006D × 0065 × 0073 × 0020 ÷ 0064 × 0065 × 0072 × 006E × 0069 × 00E8 × 0072 × 0065 × 0073 × 0020 ÷ 0061 × 0064 × 006F × 0072 × 0061 × 0074 × 0069 × 006F × 006E × 0073 × 002E × 2029 ÷ 00BB × 0020 ÷ 004A × 002E × 0020 ÷ 0053 × 002E × 0020 × 00BB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] LATIN CAPITAL LETTER J (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER E WITH ACUTE (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT SQUARE BRACKET (OP_OP30) × [14.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) × [6.0] PARAGRAPH SEPARATOR (BK) ÷ [4.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER E WITH ACUTE (AL) × [28.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) × [13.02] SEMICOLON (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER U (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E WITH GRAVE (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E WITH GRAVE (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER S (AL) × [13.02] FULL STOP (IS) × [6.0] PARAGRAPH SEPARATOR (BK) ÷ [4.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER J (AL) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER S (AL) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 2014 × 0020 ÷ 004B × 0068 × 00F4 × 006E × 0067 × 0020 ÷ 0061 × 0069 × 0020 ÷ 0068 × 00E3 × 006D × 0020 ÷ 0062 × 0061 × 006F × 0020 ÷ 0067 × 0069 × 1EDD × 0020 ÷ 006D × 00E0 × 0020 ÷ 0062 × 00E2 × 0079 × 0020 ÷ 0067 × 0069 × 1EDD × 0020 ÷ 0068 × 00E3 × 006D × 002C × 0020 ÷ 0074 × 0068 × 1EBF × 0020 ÷ 006E × 00F3 × 0020 ÷ 006D × 1EDB × 0069 × 0020 ÷ 00AB × 0020 × 006D × 1EDB × 0069 × 0020 × 00BB × 002E ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER K (AL) × [28.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER O WITH CIRCUMFLEX (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER I (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER A WITH TILDE (AL) × [28.0] LATIN SMALL LETTER M (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER O (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER O WITH HORN AND GRAVE (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER A WITH GRAVE (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER A WITH CIRCUMFLEX (AL) × [28.0] LATIN SMALL LETTER Y (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER O WITH HORN AND GRAVE (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER A WITH TILDE (AL) × [28.0] LATIN SMALL LETTER M (AL) × [13.02] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O WITH ACUTE (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER O WITH HORN AND ACUTE (AL) × [28.0] LATIN SMALL LETTER I (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER O WITH HORN AND ACUTE (AL) × [28.0] LATIN SMALL LETTER I (AL) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [13.02] FULL STOP (IS) ÷ [0.3]
+× 0050 × 0061 × 0073 × 0020 ÷ 0075 × 006E × 0065 × 0020 ÷ 0063 × 0069 × 0074 × 0061 × 0074 × 0069 × 006F × 006E × 0020 ÷ 00BB × 005A × 0069 × 0074 × 0061 × 0074 × 00AB × 0020 ÷ 0050 × 0061 × 0073 × 0020 ÷ 0075 × 006E × 0065 × 0020 ÷ 0063 × 0069 × 0074 × 0061 × 0074 × 0069 × 006F × 006E × 0020 ÷ 006E × 006F × 006E × 0020 ÷ 0070 × 006C × 0075 × 0073 ÷ # × [0.3] LATIN CAPITAL LETTER P (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [19.02] LATIN CAPITAL LETTER Z (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER P (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER S (AL) ÷ [0.3]
+× 00AB × 0020 × 0043 × 0069 × 0074 × 0061 × 0074 × 0069 × 006F × 006E × 0020 × 00BB × 200B ÷ 004B × 0065 × 0069 × 006E × 0020 ÷ 005A × 0069 × 0074 × 0061 × 0074 × 200B ÷ 00AB × 0020 × 0041 × 0075 × 0074 × 0072 × 0065 × 0020 ÷ 0063 × 0069 × 0074 × 0061 × 0074 × 0069 × 006F × 006E × 0020 × 00BB ÷ # × [0.3] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] LATIN CAPITAL LETTER C (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] LATIN CAPITAL LETTER K (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER Z (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pi) × [7.01] SPACE (SP) × [15.11] LATIN CAPITAL LETTER A (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) × [15.21] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU_QU_Pf) ÷ [0.3]
+× 1F02C × 1F3FF ÷ # × [0.3] <reserved-1F02C> (Other) × [30.22] EMOJI MODIFIER FITZPATRICK TYPE-6 (EM) ÷ [0.3]
× 00A9 ÷ 1F3FF ÷ # × [0.3] COPYRIGHT SIGN (AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (EM) ÷ [0.3]
#
-# Lines: 7654
+# Lines: 10274
#
# EOF
diff --git a/tests/auto/corelib/text/qtextboundaryfinder/data/LineBreakTest.txt.full b/tests/auto/corelib/text/qtextboundaryfinder/data/LineBreakTest.txt.full
deleted file mode 100644
index 8d1cef0f78..0000000000
--- a/tests/auto/corelib/text/qtextboundaryfinder/data/LineBreakTest.txt.full
+++ /dev/null
@@ -1,7686 +0,0 @@
-# LineBreakTest-14.0.0.txt
-# Date: 2021-08-20, 21:08:45 GMT
-# © 2021 Unicode®, Inc.
-# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-#
-# Unicode Character Database
-# For documentation, see http://www.unicode.org/reports/tr44/
-#
-# Default Line_Break Test
-#
-# Format:
-# <string> (# <comment>)?
-# <string> contains hex Unicode code points, with
-# ÷ wherever there is a break opportunity, and
-# × wherever there is not.
-# <comment> the format can change, but currently it shows:
-# - the sample character name
-# - (x) the Line_Break property value for the sample character
-# - [x] the rule that determines whether there is a break or not,
-# as listed in the Rules section of LineBreakTest.html
-#
-# Note:
-# The Line_Break tests use tailoring of numbers described in
-# Example 7 of Section 8.2, "Examples of Customization" of UAX #14.
-#
-# These samples may be extended or changed in the future.
-#
-× 0023 × 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0023 × 0020 ÷ 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0023 × 0308 × 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0023 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0023 × 0020 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0023 × 0308 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0023 × 0009 ÷ # × [0.3] NUMBER SIGN (AL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0023 × 0020 ÷ 0009 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0023 × 0308 × 0009 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0023 ÷ 00B4 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0023 × 0020 ÷ 00B4 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0023 × 0308 ÷ 00B4 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0023 × 000B ÷ # × [0.3] NUMBER SIGN (AL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0023 × 0020 × 000B ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0023 × 0308 × 000B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0023 × 0308 × 0020 × 000B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0023 ÷ FFFC ÷ # × [0.3] NUMBER SIGN (AL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0023 × 0020 ÷ FFFC ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0023 × 0308 ÷ FFFC ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0023 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0023 × 0020 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0023 × 0308 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0023 × 0308 × 0020 × 007D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0023 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0023 × 0020 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0023 × 0308 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0023 × 0308 × 0020 × 000D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0023 × 0021 ÷ # × [0.3] NUMBER SIGN (AL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0023 × 0020 × 0021 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0023 × 0308 × 0021 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0023 × 0308 × 0020 × 0021 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0023 × 00A0 ÷ # × [0.3] NUMBER SIGN (AL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0023 × 0020 ÷ 00A0 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0023 × 0308 × 00A0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0023 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0023 × 0020 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0023 × 0308 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0023 ÷ AC01 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0023 × 0020 ÷ AC01 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0023 × 0308 ÷ AC01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0023 × 05D0 ÷ # × [0.3] NUMBER SIGN (AL) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0023 × 0020 ÷ 05D0 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0023 × 0308 × 05D0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0023 × 002D ÷ # × [0.3] NUMBER SIGN (AL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0023 × 0020 ÷ 002D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0023 × 0308 × 002D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 002D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0023 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0023 × 0020 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0023 × 0308 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 231A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0023 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0023 × 0020 ÷ 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0023 × 0308 × 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0023 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] COMMA (IS) ÷ [0.3]
-× 0023 × 0020 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0023 × 0308 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0023 × 0308 × 0020 × 002C ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0023 ÷ 1100 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0023 × 0020 ÷ 1100 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0023 × 0308 ÷ 1100 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0023 ÷ 11A8 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0023 × 0020 ÷ 11A8 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0023 × 0308 ÷ 11A8 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0023 ÷ 1160 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0023 × 0020 ÷ 1160 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0023 × 0308 ÷ 1160 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0023 × 000A ÷ # × [0.3] NUMBER SIGN (AL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0023 × 0020 × 000A ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0023 × 0308 × 000A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0023 × 0308 × 0020 × 000A ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0023 × 0085 ÷ # × [0.3] NUMBER SIGN (AL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0023 × 0020 × 0085 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0023 × 0308 × 0085 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0023 × 0308 × 0020 × 0085 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0023 × 17D6 ÷ # × [0.3] NUMBER SIGN (AL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0023 × 0020 ÷ 17D6 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0023 × 0308 × 17D6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0023 × 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0023 × 0020 ÷ 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0023 × 0308 × 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0023 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0023 × 0020 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0023 × 0308 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0023 × 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 0023 × 0020 ÷ 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0023 × 0308 × 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0023 × 0024 ÷ # × [0.3] NUMBER SIGN (AL) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 0023 × 0020 ÷ 0024 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0023 × 0308 × 0024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0023 × 0022 ÷ # × [0.3] NUMBER SIGN (AL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0023 × 0020 ÷ 0022 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0023 × 0308 × 0022 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0023 × 0020 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [0.3]
-× 0023 × 0020 × 0020 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0023 × 0308 × 0020 × 0020 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0023 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0023 × 0020 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0023 × 0308 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0023 × 0308 × 0020 × 002F ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0023 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0023 × 0020 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0023 × 0308 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0023 × 0308 × 0020 × 2060 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0023 × 200B ÷ # × [0.3] NUMBER SIGN (AL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0023 × 0020 × 200B ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0023 × 0308 × 200B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0023 × 0308 × 0020 × 200B ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0023 ÷ 1F1E6 ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0023 × 0020 ÷ 1F1E6 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0023 × 0308 ÷ 1F1E6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0023 ÷ 261D ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0023 × 0020 ÷ 261D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0023 × 0308 ÷ 261D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 261D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0023 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0023 × 0020 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0023 × 0308 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0023 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0023 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0023 × 0308 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0023 × 0308 × 0020 × 0029 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0023 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0023 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0023 × 0308 × 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0023 × 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0023 × 0020 ÷ 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0023 × 0308 × 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0023 × 200D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0023 × 0020 ÷ 200D ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0023 × 0308 × 200D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 200D ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0023 × 00A7 ÷ # × [0.3] NUMBER SIGN (AL) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0023 × 0020 ÷ 00A7 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0023 × 0308 × 00A7 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0023 × 50005 ÷ # × [0.3] NUMBER SIGN (AL) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0023 × 0020 ÷ 50005 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0023 × 0308 × 50005 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0023 × 0E01 ÷ # × [0.3] NUMBER SIGN (AL) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0023 × 0020 ÷ 0E01 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0023 × 0308 × 0E01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0023 × 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0023 × 0020 ÷ 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0023 × 0308 × 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0023 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] NUMBER SIGN (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2014 ÷ 0023 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2014 × 0020 ÷ 0023 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2014 × 0308 ÷ 0023 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2014 × 2014 ÷ # × [0.3] EM DASH (B2) × [17.0] EM DASH (B2) ÷ [0.3]
-× 2014 × 0020 × 2014 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [17.0] EM DASH (B2) ÷ [0.3]
-× 2014 × 0308 × 2014 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [17.0] EM DASH (B2) ÷ [0.3]
-× 2014 × 0308 × 0020 × 2014 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [17.0] EM DASH (B2) ÷ [0.3]
-× 2014 × 0009 ÷ # × [0.3] EM DASH (B2) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2014 × 0020 ÷ 0009 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2014 × 0308 × 0009 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2014 ÷ 00B4 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2014 × 0020 ÷ 00B4 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2014 × 0308 ÷ 00B4 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2014 × 000B ÷ # × [0.3] EM DASH (B2) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2014 × 0020 × 000B ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2014 × 0308 × 000B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2014 × 0308 × 0020 × 000B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2014 ÷ FFFC ÷ # × [0.3] EM DASH (B2) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2014 × 0020 ÷ FFFC ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2014 × 0308 ÷ FFFC ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2014 × 007D ÷ # × [0.3] EM DASH (B2) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2014 × 0020 × 007D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2014 × 0308 × 007D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2014 × 0308 × 0020 × 007D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2014 × 000D ÷ # × [0.3] EM DASH (B2) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2014 × 0020 × 000D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2014 × 0308 × 000D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2014 × 0308 × 0020 × 000D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2014 × 0021 ÷ # × [0.3] EM DASH (B2) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2014 × 0020 × 0021 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2014 × 0308 × 0021 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2014 × 0308 × 0020 × 0021 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2014 × 00A0 ÷ # × [0.3] EM DASH (B2) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2014 × 0020 ÷ 00A0 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2014 × 0308 × 00A0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2014 ÷ AC00 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2014 × 0020 ÷ AC00 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2014 × 0308 ÷ AC00 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2014 ÷ AC01 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2014 × 0020 ÷ AC01 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2014 × 0308 ÷ AC01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2014 ÷ 05D0 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2014 × 0020 ÷ 05D0 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2014 × 0308 ÷ 05D0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2014 × 002D ÷ # × [0.3] EM DASH (B2) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2014 × 0020 ÷ 002D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2014 × 0308 × 002D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 002D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2014 ÷ 231A ÷ # × [0.3] EM DASH (B2) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 2014 × 0020 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2014 × 0308 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2014 × 2024 ÷ # × [0.3] EM DASH (B2) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2014 × 0020 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2014 × 0308 × 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2014 × 002C ÷ # × [0.3] EM DASH (B2) × [13.02] COMMA (IS) ÷ [0.3]
-× 2014 × 0020 × 002C ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2014 × 0308 × 002C ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 2014 × 0308 × 0020 × 002C ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2014 ÷ 1100 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2014 × 0020 ÷ 1100 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2014 × 0308 ÷ 1100 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2014 ÷ 11A8 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2014 × 0020 ÷ 11A8 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2014 × 0308 ÷ 11A8 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2014 ÷ 1160 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2014 × 0020 ÷ 1160 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2014 × 0308 ÷ 1160 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2014 × 000A ÷ # × [0.3] EM DASH (B2) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2014 × 0020 × 000A ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2014 × 0308 × 000A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2014 × 0308 × 0020 × 000A ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2014 × 0085 ÷ # × [0.3] EM DASH (B2) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2014 × 0020 × 0085 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2014 × 0308 × 0085 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2014 × 0308 × 0020 × 0085 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2014 × 17D6 ÷ # × [0.3] EM DASH (B2) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2014 × 0020 ÷ 17D6 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2014 × 0308 × 17D6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2014 ÷ 0030 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2014 × 0020 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2014 × 0308 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2014 ÷ 2329 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2014 × 0020 ÷ 2329 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2014 × 0308 ÷ 2329 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2014 ÷ 0025 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2014 × 0020 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2014 × 0308 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2014 ÷ 0024 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2014 × 0020 ÷ 0024 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2014 × 0308 ÷ 0024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2014 × 0022 ÷ # × [0.3] EM DASH (B2) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 2014 × 0020 ÷ 0022 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2014 × 0308 × 0022 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2014 × 0020 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [0.3]
-× 2014 × 0020 × 0020 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 2014 × 0308 × 0020 × 0020 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2014 × 002F ÷ # × [0.3] EM DASH (B2) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2014 × 0020 × 002F ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2014 × 0308 × 002F ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 2014 × 0308 × 0020 × 002F ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2014 × 2060 ÷ # × [0.3] EM DASH (B2) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2014 × 0020 × 2060 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2014 × 0308 × 2060 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2014 × 0308 × 0020 × 2060 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2014 × 200B ÷ # × [0.3] EM DASH (B2) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2014 × 0020 × 200B ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2014 × 0308 × 200B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2014 × 0308 × 0020 × 200B ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2014 ÷ 1F1E6 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2014 × 0020 ÷ 1F1E6 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2014 × 0308 ÷ 1F1E6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2014 ÷ 261D ÷ # × [0.3] EM DASH (B2) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2014 × 0020 ÷ 261D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2014 × 0308 ÷ 261D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 261D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2014 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2014 × 0020 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2014 × 0308 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2014 × 0029 ÷ # × [0.3] EM DASH (B2) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2014 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2014 × 0308 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2014 × 0308 × 0020 × 0029 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2014 ÷ 0028 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2014 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2014 × 0308 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2014 × 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2014 × 0020 ÷ 0001 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2014 × 0308 × 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2014 × 200D ÷ # × [0.3] EM DASH (B2) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2014 × 0020 ÷ 200D ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2014 × 0308 × 200D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 200D ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2014 ÷ 00A7 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2014 × 0020 ÷ 00A7 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2014 × 0308 ÷ 00A7 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2014 ÷ 50005 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2014 × 0020 ÷ 50005 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2014 × 0308 ÷ 50005 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2014 ÷ 0E01 ÷ # × [0.3] EM DASH (B2) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2014 × 0020 ÷ 0E01 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2014 × 0308 ÷ 0E01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2014 × 3041 ÷ # × [0.3] EM DASH (B2) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2014 × 0020 ÷ 3041 ÷ # × [0.3] EM DASH (B2) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2014 × 0308 × 3041 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2014 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EM DASH (B2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0009 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0009 × 0020 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0009 × 0308 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0009 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0009 × 0020 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0009 × 0308 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0009 × 0009 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0009 × 0020 ÷ 0009 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0009 × 0308 × 0009 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0009 ÷ 00B4 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0009 × 0020 ÷ 00B4 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0009 × 0308 ÷ 00B4 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0009 × 000B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0009 × 0020 × 000B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0009 × 0308 × 000B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0009 × 0308 × 0020 × 000B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0009 ÷ FFFC ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0009 × 0020 ÷ FFFC ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0009 × 0308 ÷ FFFC ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0009 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0009 × 0020 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0009 × 0308 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0009 × 0308 × 0020 × 007D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0009 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0009 × 0020 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0009 × 0308 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0009 × 0308 × 0020 × 000D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0009 × 0021 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0009 × 0020 × 0021 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0009 × 0308 × 0021 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0009 × 0308 × 0020 × 0021 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0009 ÷ 00A0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0009 × 0020 ÷ 00A0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0009 × 0308 ÷ 00A0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0009 ÷ AC00 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0009 × 0020 ÷ AC00 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0009 × 0308 ÷ AC00 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0009 ÷ AC01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0009 × 0020 ÷ AC01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0009 × 0308 ÷ AC01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0009 ÷ 05D0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0009 × 0020 ÷ 05D0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0009 × 0308 ÷ 05D0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0009 × 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0009 × 0020 ÷ 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0009 × 0308 × 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0009 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0009 × 0020 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0009 × 0308 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0009 × 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0009 × 0020 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0009 × 0308 × 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0009 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] COMMA (IS) ÷ [0.3]
-× 0009 × 0020 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0009 × 0308 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0009 × 0308 × 0020 × 002C ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0009 ÷ 1100 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0009 × 0020 ÷ 1100 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0009 × 0308 ÷ 1100 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0009 ÷ 11A8 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0009 × 0020 ÷ 11A8 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0009 × 0308 ÷ 11A8 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0009 ÷ 1160 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0009 × 0020 ÷ 1160 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0009 × 0308 ÷ 1160 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0009 × 000A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0009 × 0020 × 000A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0009 × 0308 × 000A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0009 × 0308 × 0020 × 000A ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0009 × 0085 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0009 × 0020 × 0085 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0009 × 0308 × 0085 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0009 × 0308 × 0020 × 0085 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0009 × 17D6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0009 × 0020 ÷ 17D6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0009 × 0308 × 17D6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0009 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0009 × 0020 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0009 × 0308 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0009 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0009 × 0020 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0009 × 0308 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0009 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0009 × 0020 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0009 × 0308 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0009 ÷ 0024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0009 × 0020 ÷ 0024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0009 × 0308 ÷ 0024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0009 × 0022 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0009 × 0020 ÷ 0022 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0009 × 0308 × 0022 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0009 × 0020 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [0.3]
-× 0009 × 0020 × 0020 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0009 × 0308 × 0020 × 0020 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0009 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0009 × 0020 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0009 × 0308 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0009 × 0308 × 0020 × 002F ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0009 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0009 × 0020 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0009 × 0308 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0009 × 0308 × 0020 × 2060 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0009 × 200B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0009 × 0020 × 200B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0009 × 0308 × 200B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0009 × 0308 × 0020 × 200B ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0009 ÷ 1F1E6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0009 × 0020 ÷ 1F1E6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0009 × 0308 ÷ 1F1E6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0009 ÷ 261D ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0009 × 0020 ÷ 261D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0009 × 0308 ÷ 261D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 261D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0009 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0009 × 0020 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0009 × 0308 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0009 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0009 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0009 × 0308 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0009 × 0308 × 0020 × 0029 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0009 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0009 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0009 × 0308 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0009 × 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0009 × 0020 ÷ 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0009 × 0308 × 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0009 × 200D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0009 × 0020 ÷ 200D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0009 × 0308 × 200D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 200D ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0009 ÷ 00A7 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0009 × 0020 ÷ 00A7 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0009 × 0308 ÷ 00A7 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0009 ÷ 50005 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0009 × 0020 ÷ 50005 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0009 × 0308 ÷ 50005 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0009 ÷ 0E01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0009 × 0020 ÷ 0E01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0009 × 0308 ÷ 0E01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0009 × 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0009 × 0020 ÷ 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0009 × 0308 × 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0009 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <CHARACTER TABULATION> (BA) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00B4 × 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] NUMBER SIGN (AL) ÷ [0.3]
-× 00B4 × 0020 ÷ 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00B4 × 0308 × 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] NUMBER SIGN (AL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00B4 × 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] EM DASH (B2) ÷ [0.3]
-× 00B4 × 0020 ÷ 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 00B4 × 0308 × 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] EM DASH (B2) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 00B4 × 0009 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00B4 × 0020 ÷ 0009 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00B4 × 0308 × 0009 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00B4 × 00B4 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] ACUTE ACCENT (BB) ÷ [0.3]
-× 00B4 × 0020 ÷ 00B4 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00B4 × 0308 × 00B4 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] ACUTE ACCENT (BB) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00B4 × 000B ÷ # × [0.3] ACUTE ACCENT (BB) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00B4 × 0020 × 000B ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00B4 × 0308 × 000B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 000B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00B4 ÷ FFFC ÷ # × [0.3] ACUTE ACCENT (BB) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00B4 × 0020 ÷ FFFC ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00B4 × 0308 ÷ FFFC ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00B4 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00B4 × 0020 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00B4 × 0308 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 007D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00B4 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00B4 × 0020 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00B4 × 0308 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 000D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00B4 × 0021 ÷ # × [0.3] ACUTE ACCENT (BB) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00B4 × 0020 × 0021 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00B4 × 0308 × 0021 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 0021 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00B4 × 00A0 ÷ # × [0.3] ACUTE ACCENT (BB) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00B4 × 0020 ÷ 00A0 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00B4 × 0308 × 00A0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00B4 × AC00 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00B4 × 0020 ÷ AC00 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00B4 × 0308 × AC00 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00B4 × AC01 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00B4 × 0020 ÷ AC01 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00B4 × 0308 × AC01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00B4 × 05D0 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00B4 × 0020 ÷ 05D0 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00B4 × 0308 × 05D0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00B4 × 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00B4 × 0020 ÷ 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00B4 × 0308 × 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 002D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00B4 × 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] WATCH (ID) ÷ [0.3]
-× 00B4 × 0020 ÷ 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00B4 × 0308 × 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] WATCH (ID) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 231A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00B4 × 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] ONE DOT LEADER (IN) ÷ [0.3]
-× 00B4 × 0020 ÷ 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00B4 × 0308 × 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] ONE DOT LEADER (IN) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00B4 × 002C ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] COMMA (IS) ÷ [0.3]
-× 00B4 × 0020 × 002C ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 00B4 × 0308 × 002C ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 002C ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 00B4 × 1100 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00B4 × 0020 ÷ 1100 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00B4 × 0308 × 1100 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00B4 × 11A8 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00B4 × 0020 ÷ 11A8 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00B4 × 0308 × 11A8 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00B4 × 1160 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00B4 × 0020 ÷ 1160 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00B4 × 0308 × 1160 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00B4 × 000A ÷ # × [0.3] ACUTE ACCENT (BB) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00B4 × 0020 × 000A ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00B4 × 0308 × 000A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 000A ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00B4 × 0085 ÷ # × [0.3] ACUTE ACCENT (BB) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00B4 × 0020 × 0085 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00B4 × 0308 × 0085 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 0085 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00B4 × 17D6 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00B4 × 0020 ÷ 17D6 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00B4 × 0308 × 17D6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00B4 × 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] DIGIT ZERO (NU) ÷ [0.3]
-× 00B4 × 0020 ÷ 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00B4 × 0308 × 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] DIGIT ZERO (NU) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00B4 × 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00B4 × 0020 ÷ 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00B4 × 0308 × 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00B4 × 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] PERCENT SIGN (PO) ÷ [0.3]
-× 00B4 × 0020 ÷ 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00B4 × 0308 × 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] PERCENT SIGN (PO) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00B4 × 0024 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] DOLLAR SIGN (PR) ÷ [0.3]
-× 00B4 × 0020 ÷ 0024 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00B4 × 0308 × 0024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] DOLLAR SIGN (PR) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00B4 × 0022 ÷ # × [0.3] ACUTE ACCENT (BB) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 00B4 × 0020 ÷ 0022 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00B4 × 0308 × 0022 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00B4 × 0020 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [0.3]
-× 00B4 × 0020 × 0020 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 0020 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 00B4 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 00B4 × 0020 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 00B4 × 0308 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 002F ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 00B4 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00B4 × 0020 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00B4 × 0308 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 2060 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00B4 × 200B ÷ # × [0.3] ACUTE ACCENT (BB) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00B4 × 0020 × 200B ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00B4 × 0308 × 200B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 200B ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00B4 × 1F1E6 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00B4 × 0020 ÷ 1F1E6 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00B4 × 0308 × 1F1E6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00B4 × 261D ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00B4 × 0020 ÷ 261D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00B4 × 0308 × 261D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 261D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00B4 × 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00B4 × 0020 ÷ 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00B4 × 0308 × 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00B4 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00B4 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00B4 × 0308 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00B4 × 0308 × 0020 × 0029 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00B4 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00B4 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00B4 × 0308 × 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00B4 × 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00B4 × 0020 ÷ 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00B4 × 0308 × 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00B4 × 200D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00B4 × 0020 ÷ 200D ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00B4 × 0308 × 200D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 200D ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00B4 × 00A7 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00B4 × 0020 ÷ 00A7 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00B4 × 0308 × 00A7 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00B4 × 50005 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00B4 × 0020 ÷ 50005 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00B4 × 0308 × 50005 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00B4 × 0E01 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.04] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00B4 × 0020 ÷ 0E01 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00B4 × 0308 × 0E01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.04] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00B4 × 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00B4 × 0020 ÷ 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00B4 × 0308 × 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00B4 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] ACUTE ACCENT (BB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000B ÷ 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000B ÷ 0308 × 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000B ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] EM DASH (B2) ÷ [0.3]
-× 000B ÷ 0020 ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 000B ÷ 0308 ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 000B ÷ 0009 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0009 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000B ÷ 0308 × 0009 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000B ÷ 00B4 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000B ÷ 0020 ÷ 00B4 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000B ÷ 0308 ÷ 00B4 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000B ÷ 000B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000B ÷ 0020 × 000B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000B ÷ 0308 × 000B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 000B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000B ÷ FFFC ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000B ÷ 0020 ÷ FFFC ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000B ÷ 0308 ÷ FFFC ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000B ÷ 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000B ÷ 0020 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000B ÷ 0308 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 007D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000B ÷ 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000B ÷ 0020 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000B ÷ 0308 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 000D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000B ÷ 0021 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000B ÷ 0020 × 0021 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000B ÷ 0308 × 0021 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000B ÷ 00A0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000B ÷ 0020 ÷ 00A0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000B ÷ 0308 × 00A0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000B ÷ AC00 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000B ÷ 0020 ÷ AC00 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000B ÷ 0308 ÷ AC00 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000B ÷ AC01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000B ÷ 0020 ÷ AC01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000B ÷ 0308 ÷ AC01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000B ÷ 05D0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000B ÷ 0020 ÷ 05D0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000B ÷ 0308 × 05D0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000B ÷ 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000B ÷ 0020 ÷ 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000B ÷ 0308 × 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000B ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] WATCH (ID) ÷ [0.3]
-× 000B ÷ 0020 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000B ÷ 0308 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000B ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000B ÷ 0020 ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000B ÷ 0308 × 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000B ÷ 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMMA (IS) ÷ [0.3]
-× 000B ÷ 0020 × 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 000B ÷ 0308 × 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 002C ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 000B ÷ 1100 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000B ÷ 0020 ÷ 1100 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000B ÷ 0308 ÷ 1100 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000B ÷ 11A8 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000B ÷ 0020 ÷ 11A8 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000B ÷ 0308 ÷ 11A8 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000B ÷ 1160 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000B ÷ 0020 ÷ 1160 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000B ÷ 0308 ÷ 1160 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000B ÷ 000A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000B ÷ 0020 × 000A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000B ÷ 0308 × 000A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 000A ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000B ÷ 0085 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000B ÷ 0020 × 0085 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000B ÷ 0308 × 0085 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000B ÷ 17D6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000B ÷ 0020 ÷ 17D6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000B ÷ 0308 × 17D6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000B ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000B ÷ 0308 × 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000B ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000B ÷ 0020 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000B ÷ 0308 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000B ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000B ÷ 0308 × 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000B ÷ 0024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000B ÷ 0308 × 0024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000B ÷ 0022 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] QUOTATION MARK (QU) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0022 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 000B ÷ 0308 × 0022 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 000B ÷ 0020 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [0.3]
-× 000B ÷ 0020 × 0020 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 000B ÷ 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SOLIDUS (SY) ÷ [0.3]
-× 000B ÷ 0020 × 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 000B ÷ 0308 × 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 002F ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 000B ÷ 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] WORD JOINER (WJ) ÷ [0.3]
-× 000B ÷ 0020 × 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000B ÷ 0308 × 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000B ÷ 200B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000B ÷ 0020 × 200B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000B ÷ 0308 × 200B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 200B ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000B ÷ 1F1E6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000B ÷ 0020 ÷ 1F1E6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000B ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000B ÷ 261D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000B ÷ 0020 ÷ 261D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000B ÷ 0308 ÷ 261D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000B ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000B ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000B ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000B ÷ 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000B ÷ 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000B ÷ 0308 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000B ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000B ÷ 0308 × 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000B ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000B ÷ 0308 × 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000B ÷ 200D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000B ÷ 0020 ÷ 200D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000B ÷ 0308 × 200D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000B ÷ 00A7 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000B ÷ 0020 ÷ 00A7 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000B ÷ 0308 × 00A7 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000B ÷ 50005 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000B ÷ 0020 ÷ 50005 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000B ÷ 0308 × 50005 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000B ÷ 0E01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000B ÷ 0020 ÷ 0E01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000B ÷ 0308 × 0E01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000B ÷ 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000B ÷ 0020 ÷ 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000B ÷ 0308 × 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000B ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× FFFC ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] NUMBER SIGN (AL) ÷ [0.3]
-× FFFC × 0020 ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× FFFC × 0308 ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] NUMBER SIGN (AL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0023 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× FFFC ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] EM DASH (B2) ÷ [0.3]
-× FFFC × 0020 ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× FFFC × 0308 ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] EM DASH (B2) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 2014 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× FFFC ÷ 0009 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× FFFC × 0020 ÷ 0009 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× FFFC × 0308 ÷ 0009 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0009 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× FFFC ÷ 00B4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] ACUTE ACCENT (BB) ÷ [0.3]
-× FFFC × 0020 ÷ 00B4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× FFFC × 0308 ÷ 00B4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] ACUTE ACCENT (BB) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× FFFC × 000B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× FFFC × 0020 × 000B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× FFFC × 0308 × 000B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× FFFC × 0308 × 0020 × 000B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× FFFC ÷ FFFC ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× FFFC × 0020 ÷ FFFC ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× FFFC × 0308 ÷ FFFC ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ FFFC ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× FFFC × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× FFFC × 0020 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× FFFC × 0308 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× FFFC × 0308 × 0020 × 007D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× FFFC × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× FFFC × 0020 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× FFFC × 0308 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× FFFC × 0308 × 0020 × 000D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× FFFC × 0021 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× FFFC × 0020 × 0021 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× FFFC × 0308 × 0021 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× FFFC × 0308 × 0020 × 0021 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× FFFC × 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× FFFC × 0020 ÷ 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× FFFC × 0308 × 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× FFFC ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× FFFC × 0020 ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× FFFC × 0308 ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ AC00 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× FFFC ÷ AC01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× FFFC × 0020 ÷ AC01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× FFFC × 0308 ÷ AC01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ AC01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× FFFC ÷ 05D0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× FFFC × 0020 ÷ 05D0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× FFFC × 0308 ÷ 05D0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× FFFC ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× FFFC × 0020 ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× FFFC × 0308 ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 002D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× FFFC ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] WATCH (ID) ÷ [0.3]
-× FFFC × 0020 ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× FFFC × 0308 ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] WATCH (ID) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 231A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× FFFC ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] ONE DOT LEADER (IN) ÷ [0.3]
-× FFFC × 0020 ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× FFFC × 0308 ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] ONE DOT LEADER (IN) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 2024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× FFFC × 002C ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] COMMA (IS) ÷ [0.3]
-× FFFC × 0020 × 002C ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× FFFC × 0308 × 002C ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× FFFC × 0308 × 0020 × 002C ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× FFFC ÷ 1100 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× FFFC × 0020 ÷ 1100 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× FFFC × 0308 ÷ 1100 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 1100 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× FFFC ÷ 11A8 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× FFFC × 0020 ÷ 11A8 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× FFFC × 0308 ÷ 11A8 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× FFFC ÷ 1160 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× FFFC × 0020 ÷ 1160 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× FFFC × 0308 ÷ 1160 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 1160 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× FFFC × 000A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× FFFC × 0020 × 000A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× FFFC × 0308 × 000A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× FFFC × 0308 × 0020 × 000A ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× FFFC × 0085 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× FFFC × 0020 × 0085 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× FFFC × 0308 × 0085 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× FFFC × 0308 × 0020 × 0085 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× FFFC ÷ 17D6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× FFFC × 0020 ÷ 17D6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× FFFC × 0308 ÷ 17D6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× FFFC ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] DIGIT ZERO (NU) ÷ [0.3]
-× FFFC × 0020 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× FFFC × 0308 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] DIGIT ZERO (NU) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0030 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× FFFC ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× FFFC × 0020 ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× FFFC × 0308 ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 2329 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× FFFC ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] PERCENT SIGN (PO) ÷ [0.3]
-× FFFC × 0020 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× FFFC × 0308 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] PERCENT SIGN (PO) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0025 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× FFFC ÷ 0024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] DOLLAR SIGN (PR) ÷ [0.3]
-× FFFC × 0020 ÷ 0024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× FFFC × 0308 ÷ 0024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] DOLLAR SIGN (PR) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0024 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× FFFC × 0022 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× FFFC × 0020 ÷ 0022 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× FFFC × 0308 × 0022 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0022 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× FFFC × 0020 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [0.3]
-× FFFC × 0020 × 0020 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× FFFC × 0308 × 0020 × 0020 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× FFFC × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× FFFC × 0020 × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× FFFC × 0308 × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× FFFC × 0308 × 0020 × 002F ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× FFFC × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× FFFC × 0020 × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× FFFC × 0308 × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× FFFC × 0308 × 0020 × 2060 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× FFFC × 200B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× FFFC × 0020 × 200B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× FFFC × 0308 × 200B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× FFFC × 0308 × 0020 × 200B ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× FFFC ÷ 1F1E6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× FFFC × 0020 ÷ 1F1E6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× FFFC × 0308 ÷ 1F1E6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× FFFC ÷ 261D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× FFFC × 0020 ÷ 261D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× FFFC × 0308 ÷ 261D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 261D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× FFFC ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× FFFC × 0020 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× FFFC × 0308 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× FFFC × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× FFFC × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× FFFC × 0308 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× FFFC × 0308 × 0020 × 0029 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× FFFC ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× FFFC × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× FFFC × 0308 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0028 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× FFFC × 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× FFFC × 0020 ÷ 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× FFFC × 0308 × 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0001 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× FFFC × 200D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× FFFC × 0020 ÷ 200D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× FFFC × 0308 × 200D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 200D ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× FFFC ÷ 00A7 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× FFFC × 0020 ÷ 00A7 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× FFFC × 0308 ÷ 00A7 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× FFFC ÷ 50005 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× FFFC × 0020 ÷ 50005 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× FFFC × 0308 ÷ 50005 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 50005 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× FFFC ÷ 0E01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× FFFC × 0020 ÷ 0E01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× FFFC × 0308 ÷ 0E01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× FFFC ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× FFFC × 0020 ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× FFFC × 0308 ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× FFFC × 0308 × 0020 ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 007D ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 007D × 0020 ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 007D × 0308 ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 007D ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 007D × 0020 ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 007D × 0308 ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 007D × 0009 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 007D × 0020 ÷ 0009 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 007D × 0308 × 0009 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 007D ÷ 00B4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 007D × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 007D × 0308 ÷ 00B4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 007D × 000B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 007D × 0020 × 000B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 007D × 0308 × 000B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 007D × 0308 × 0020 × 000B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 007D ÷ FFFC ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 007D × 0020 ÷ FFFC ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 007D × 0308 ÷ FFFC ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 007D × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 007D × 0020 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 007D × 0308 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 007D × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 007D × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 007D × 0020 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 007D × 0308 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 007D × 0308 × 0020 × 000D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 007D × 0021 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 007D × 0020 × 0021 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 007D × 0308 × 0021 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 007D × 0308 × 0020 × 0021 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 007D × 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 007D × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 007D × 0308 × 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 007D ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 007D × 0020 ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 007D × 0308 ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 007D ÷ AC01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 007D × 0020 ÷ AC01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 007D × 0308 ÷ AC01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 007D ÷ 05D0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 007D × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 007D × 0308 ÷ 05D0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 007D × 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 007D × 0020 ÷ 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 007D × 0308 × 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 007D ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 007D × 0020 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 007D × 0308 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 007D × 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 007D × 0020 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 007D × 0308 × 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 007D × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] COMMA (IS) ÷ [0.3]
-× 007D × 0020 × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 007D × 0308 × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 007D × 0308 × 0020 × 002C ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 007D ÷ 1100 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 007D × 0020 ÷ 1100 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 007D × 0308 ÷ 1100 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 007D ÷ 11A8 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 007D × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 007D × 0308 ÷ 11A8 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 007D ÷ 1160 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 007D × 0020 ÷ 1160 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 007D × 0308 ÷ 1160 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 007D × 000A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 007D × 0020 × 000A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 007D × 0308 × 000A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 007D × 0308 × 0020 × 000A ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 007D × 0085 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 007D × 0020 × 0085 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 007D × 0308 × 0085 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 007D × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 007D × 17D6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 007D × 0020 × 17D6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 007D × 0308 × 17D6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 007D × 0308 × 0020 × 17D6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 007D ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 007D × 0020 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 007D × 0308 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 007D ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 007D × 0020 ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 007D × 0308 ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 007D ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 007D × 0020 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 007D × 0308 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 007D ÷ 0024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 007D × 0020 ÷ 0024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 007D × 0308 ÷ 0024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 007D × 0022 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 007D × 0020 ÷ 0022 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 007D × 0308 × 0022 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 007D × 0020 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [0.3]
-× 007D × 0020 × 0020 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 007D × 0308 × 0020 × 0020 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 007D × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 007D × 0020 × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 007D × 0308 × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 007D × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 007D × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 007D × 0020 × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 007D × 0308 × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 007D × 0308 × 0020 × 2060 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 007D × 200B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 007D × 0020 × 200B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 007D × 0308 × 200B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 007D × 0308 × 0020 × 200B ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 007D ÷ 1F1E6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 007D × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 007D × 0308 ÷ 1F1E6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 007D ÷ 261D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 007D × 0020 ÷ 261D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 007D × 0308 ÷ 261D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 261D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 007D ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 007D × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 007D × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 007D × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 007D × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 007D × 0308 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 007D × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 007D ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 007D × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 007D × 0308 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 007D × 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 007D × 0020 ÷ 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 007D × 0308 × 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 007D × 200D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 007D × 0020 ÷ 200D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 007D × 0308 × 200D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 200D ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 007D ÷ 00A7 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 007D × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 007D × 0308 ÷ 00A7 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 007D ÷ 50005 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 007D × 0020 ÷ 50005 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 007D × 0308 ÷ 50005 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 007D ÷ 0E01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 007D × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 007D × 0308 ÷ 0E01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 007D × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 007D × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 007D × 0020 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 007D × 0308 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 007D × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT CURLY BRACKET (CL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000D ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] NUMBER SIGN (AL) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000D ÷ 0308 × 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000D ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] EM DASH (B2) ÷ [0.3]
-× 000D ÷ 0020 ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 000D ÷ 0308 ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 000D ÷ 0009 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0009 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000D ÷ 0308 × 0009 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000D ÷ 00B4 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] ACUTE ACCENT (BB) ÷ [0.3]
-× 000D ÷ 0020 ÷ 00B4 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000D ÷ 0308 ÷ 00B4 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000D ÷ 000B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <LINE TABULATION> (BK) ÷ [0.3]
-× 000D ÷ 0020 × 000B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000D ÷ 0308 × 000B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 000B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000D ÷ FFFC ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000D ÷ 0020 ÷ FFFC ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000D ÷ 0308 ÷ FFFC ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000D ÷ 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000D ÷ 0020 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000D ÷ 0308 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 007D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000D ÷ 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000D ÷ 0020 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000D ÷ 0308 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 000D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000D ÷ 0021 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000D ÷ 0020 × 0021 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000D ÷ 0308 × 0021 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000D ÷ 00A0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000D ÷ 0020 ÷ 00A0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000D ÷ 0308 × 00A0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000D ÷ AC00 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000D ÷ 0020 ÷ AC00 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000D ÷ 0308 ÷ AC00 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000D ÷ AC01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000D ÷ 0020 ÷ AC01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000D ÷ 0308 ÷ AC01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000D ÷ 05D0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000D ÷ 0020 ÷ 05D0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000D ÷ 0308 × 05D0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000D ÷ 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000D ÷ 0020 ÷ 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000D ÷ 0308 × 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000D ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] WATCH (ID) ÷ [0.3]
-× 000D ÷ 0020 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000D ÷ 0308 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000D ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] ONE DOT LEADER (IN) ÷ [0.3]
-× 000D ÷ 0020 ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000D ÷ 0308 × 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000D ÷ 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMMA (IS) ÷ [0.3]
-× 000D ÷ 0020 × 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 000D ÷ 0308 × 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 002C ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 000D ÷ 1100 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000D ÷ 0020 ÷ 1100 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000D ÷ 0308 ÷ 1100 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000D ÷ 11A8 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000D ÷ 0020 ÷ 11A8 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000D ÷ 0308 ÷ 11A8 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000D ÷ 1160 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000D ÷ 0020 ÷ 1160 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000D ÷ 0308 ÷ 1160 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000D × 000A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) × [5.01] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000D ÷ 0020 × 000A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000D ÷ 0308 × 000A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 000A ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000D ÷ 0085 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000D ÷ 0020 × 0085 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000D ÷ 0308 × 0085 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000D ÷ 17D6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000D ÷ 0020 ÷ 17D6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000D ÷ 0308 × 17D6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000D ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] DIGIT ZERO (NU) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000D ÷ 0308 × 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000D ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000D ÷ 0020 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000D ÷ 0308 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000D ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] PERCENT SIGN (PO) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000D ÷ 0308 × 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000D ÷ 0024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] DOLLAR SIGN (PR) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000D ÷ 0308 × 0024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000D ÷ 0022 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] QUOTATION MARK (QU) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0022 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 000D ÷ 0308 × 0022 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 000D ÷ 0020 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [0.3]
-× 000D ÷ 0020 × 0020 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 000D ÷ 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SOLIDUS (SY) ÷ [0.3]
-× 000D ÷ 0020 × 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 000D ÷ 0308 × 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 002F ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 000D ÷ 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] WORD JOINER (WJ) ÷ [0.3]
-× 000D ÷ 0020 × 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000D ÷ 0308 × 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000D ÷ 200B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000D ÷ 0020 × 200B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000D ÷ 0308 × 200B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 200B ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000D ÷ 1F1E6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000D ÷ 0020 ÷ 1F1E6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000D ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000D ÷ 261D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000D ÷ 0020 ÷ 261D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000D ÷ 0308 ÷ 261D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000D ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000D ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000D ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000D ÷ 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000D ÷ 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000D ÷ 0308 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000D ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000D ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000D ÷ 0308 × 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000D ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000D ÷ 0308 × 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000D ÷ 200D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000D ÷ 0020 ÷ 200D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000D ÷ 0308 × 200D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000D ÷ 00A7 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000D ÷ 0020 ÷ 00A7 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000D ÷ 0308 × 00A7 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000D ÷ 50005 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000D ÷ 0020 ÷ 50005 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000D ÷ 0308 × 50005 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000D ÷ 0E01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000D ÷ 0020 ÷ 0E01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000D ÷ 0308 × 0E01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000D ÷ 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000D ÷ 0020 ÷ 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000D ÷ 0308 × 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000D ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0021 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0021 × 0020 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0021 × 0308 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0021 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0021 × 0020 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0021 × 0308 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0021 × 0009 ÷ # × [0.3] EXCLAMATION MARK (EX) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0021 × 0020 ÷ 0009 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0021 × 0308 × 0009 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0021 ÷ 00B4 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0021 × 0020 ÷ 00B4 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0021 × 0308 ÷ 00B4 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0021 × 000B ÷ # × [0.3] EXCLAMATION MARK (EX) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0021 × 0020 × 000B ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0021 × 0308 × 000B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0021 × 0308 × 0020 × 000B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0021 ÷ FFFC ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0021 × 0020 ÷ FFFC ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0021 × 0308 ÷ FFFC ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0021 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0021 × 0020 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0021 × 0308 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0021 × 0308 × 0020 × 007D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0021 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0021 × 0020 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0021 × 0308 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0021 × 0308 × 0020 × 000D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0021 × 0021 ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0021 × 0020 × 0021 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0021 × 0308 × 0021 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0021 × 0308 × 0020 × 0021 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0021 × 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0021 × 0020 ÷ 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0021 × 0308 × 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0021 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0021 × 0020 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0021 × 0308 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0021 ÷ AC01 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0021 × 0020 ÷ AC01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0021 × 0308 ÷ AC01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0021 ÷ 05D0 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0021 × 0020 ÷ 05D0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0021 × 0308 ÷ 05D0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0021 × 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0021 × 0020 ÷ 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0021 × 0308 × 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 002D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0021 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0021 × 0020 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0021 × 0308 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 231A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0021 × 0020 ÷ 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0021 × 0308 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0021 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] COMMA (IS) ÷ [0.3]
-× 0021 × 0020 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0021 × 0308 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0021 × 0308 × 0020 × 002C ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0021 ÷ 1100 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0021 × 0020 ÷ 1100 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0021 × 0308 ÷ 1100 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0021 ÷ 11A8 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0021 × 0020 ÷ 11A8 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0021 × 0308 ÷ 11A8 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0021 ÷ 1160 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0021 × 0020 ÷ 1160 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0021 × 0308 ÷ 1160 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0021 × 000A ÷ # × [0.3] EXCLAMATION MARK (EX) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0021 × 0020 × 000A ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0021 × 0308 × 000A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0021 × 0308 × 0020 × 000A ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0021 × 0085 ÷ # × [0.3] EXCLAMATION MARK (EX) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0021 × 0020 × 0085 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0021 × 0308 × 0085 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0021 × 0308 × 0020 × 0085 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0021 × 17D6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0021 × 0020 ÷ 17D6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0021 × 0308 × 17D6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0021 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0021 × 0020 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0021 × 0308 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0021 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0021 × 0020 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0021 × 0308 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0021 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0021 × 0020 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0021 × 0308 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0021 ÷ 0024 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0021 × 0020 ÷ 0024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0021 × 0308 ÷ 0024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0021 × 0022 ÷ # × [0.3] EXCLAMATION MARK (EX) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0021 × 0020 ÷ 0022 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0021 × 0308 × 0022 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0021 × 0020 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [0.3]
-× 0021 × 0020 × 0020 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0021 × 0308 × 0020 × 0020 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0021 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0021 × 0020 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0021 × 0308 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0021 × 0308 × 0020 × 002F ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0021 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0021 × 0020 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0021 × 0308 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0021 × 0308 × 0020 × 2060 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0021 × 200B ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0021 × 0020 × 200B ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0021 × 0308 × 200B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0021 × 0308 × 0020 × 200B ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0021 ÷ 1F1E6 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0021 × 0020 ÷ 1F1E6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0021 × 0308 ÷ 1F1E6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0021 ÷ 261D ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0021 × 0020 ÷ 261D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0021 × 0308 ÷ 261D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 261D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0021 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0021 × 0020 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0021 × 0308 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0021 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0021 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0021 × 0308 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0021 × 0308 × 0020 × 0029 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0021 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0021 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0021 × 0308 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0021 × 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0021 × 0020 ÷ 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0021 × 0308 × 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0021 × 200D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0021 × 0020 ÷ 200D ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0021 × 0308 × 200D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 200D ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0021 ÷ 00A7 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0021 × 0020 ÷ 00A7 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0021 × 0308 ÷ 00A7 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0021 ÷ 50005 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0021 × 0020 ÷ 50005 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0021 × 0308 ÷ 50005 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0021 ÷ 0E01 ÷ # × [0.3] EXCLAMATION MARK (EX) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0021 × 0020 ÷ 0E01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0021 × 0308 ÷ 0E01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0021 × 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0021 × 0020 ÷ 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0021 × 0308 × 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0021 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EXCLAMATION MARK (EX) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A0 × 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A0 × 0020 ÷ 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A0 × 0308 × 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A0 × 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] EM DASH (B2) ÷ [0.3]
-× 00A0 × 0020 ÷ 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 00A0 × 0308 × 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] EM DASH (B2) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 00A0 × 0009 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A0 × 0020 ÷ 0009 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A0 × 0308 × 0009 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A0 × 00B4 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A0 × 0020 ÷ 00B4 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A0 × 0308 × 00B4 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A0 × 000B ÷ # × [0.3] NO-BREAK SPACE (GL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A0 × 0020 × 000B ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A0 × 0308 × 000B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 000B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A0 × FFFC ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A0 × 0020 ÷ FFFC ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A0 × 0308 × FFFC ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A0 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A0 × 0020 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A0 × 0308 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 007D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A0 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A0 × 0020 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A0 × 0308 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 000D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A0 × 0021 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A0 × 0020 × 0021 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A0 × 0308 × 0021 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 0021 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A0 × 00A0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A0 × 0020 ÷ 00A0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A0 × 0308 × 00A0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A0 × AC00 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A0 × 0020 ÷ AC00 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A0 × 0308 × AC00 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A0 × AC01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A0 × 0020 ÷ AC01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A0 × 0308 × AC01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A0 × 05D0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A0 × 0020 ÷ 05D0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A0 × 0308 × 05D0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A0 × 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A0 × 0020 ÷ 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A0 × 0308 × 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 002D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A0 × 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] WATCH (ID) ÷ [0.3]
-× 00A0 × 0020 ÷ 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00A0 × 0308 × 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] WATCH (ID) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 231A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00A0 × 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A0 × 0020 ÷ 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A0 × 0308 × 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A0 × 002C ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] COMMA (IS) ÷ [0.3]
-× 00A0 × 0020 × 002C ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 00A0 × 0308 × 002C ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] COMMA (IS) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 002C ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 00A0 × 1100 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A0 × 0020 ÷ 1100 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A0 × 0308 × 1100 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A0 × 11A8 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A0 × 0020 ÷ 11A8 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A0 × 0308 × 11A8 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A0 × 1160 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A0 × 0020 ÷ 1160 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A0 × 0308 × 1160 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A0 × 000A ÷ # × [0.3] NO-BREAK SPACE (GL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A0 × 0020 × 000A ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A0 × 0308 × 000A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 000A ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A0 × 0085 ÷ # × [0.3] NO-BREAK SPACE (GL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A0 × 0020 × 0085 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A0 × 0308 × 0085 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 0085 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A0 × 17D6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A0 × 0020 ÷ 17D6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A0 × 0308 × 17D6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A0 × 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A0 × 0020 ÷ 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A0 × 0308 × 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A0 × 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00A0 × 0020 ÷ 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00A0 × 0308 × 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00A0 × 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00A0 × 0020 ÷ 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00A0 × 0308 × 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00A0 × 0024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A0 × 0020 ÷ 0024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A0 × 0308 × 0024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A0 × 0022 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00A0 × 0020 ÷ 0022 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00A0 × 0308 × 0022 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00A0 × 0020 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A0 × 0020 × 0020 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 0020 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A0 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] SOLIDUS (SY) ÷ [0.3]
-× 00A0 × 0020 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 00A0 × 0308 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] SOLIDUS (SY) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 002F ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 00A0 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A0 × 0020 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A0 × 0308 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 2060 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A0 × 200B ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A0 × 0020 × 200B ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A0 × 0308 × 200B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 200B ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A0 × 1F1E6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A0 × 0020 ÷ 1F1E6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A0 × 0308 × 1F1E6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A0 × 261D ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00A0 × 0020 ÷ 261D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00A0 × 0308 × 261D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 261D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00A0 × 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00A0 × 0020 ÷ 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00A0 × 0308 × 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00A0 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00A0 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00A0 × 0308 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00A0 × 0308 × 0020 × 0029 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00A0 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00A0 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00A0 × 0308 × 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00A0 × 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00A0 × 0020 ÷ 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00A0 × 0308 × 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00A0 × 200D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00A0 × 0020 ÷ 200D ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00A0 × 0308 × 200D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 200D ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00A0 × 00A7 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A0 × 0020 ÷ 00A7 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A0 × 0308 × 00A7 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A0 × 50005 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A0 × 0020 ÷ 50005 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A0 × 0308 × 50005 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A0 × 0E01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A0 × 0020 ÷ 0E01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A0 × 0308 × 0E01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A0 × 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [12.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A0 × 0020 ÷ 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A0 × 0308 × 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A0 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] NO-BREAK SPACE (GL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC00 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC00 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC00 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC00 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× AC00 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× AC00 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× AC00 × 0009 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC00 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC00 × 0308 × 0009 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC00 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC00 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC00 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC00 × 000B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC00 × 0020 × 000B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC00 × 0308 × 000B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC00 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC00 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC00 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC00 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC00 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC00 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC00 × 0308 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC00 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC00 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC00 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC00 × 0308 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC00 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC00 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC00 × 0020 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC00 × 0308 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC00 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC00 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC00 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC00 × 0308 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC00 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC00 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC00 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC00 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC00 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC00 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC00 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC00 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC00 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC00 × 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC00 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC00 × 0308 × 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC00 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× AC00 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC00 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC00 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC00 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC00 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC00 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] COMMA (IS) ÷ [0.3]
-× AC00 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× AC00 × 0308 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× AC00 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× AC00 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC00 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC00 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC00 × 11A8 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [26.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC00 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC00 × 0308 × 11A8 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC00 × 1160 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC00 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC00 × 0308 × 1160 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC00 × 000A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC00 × 0020 × 000A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC00 × 0308 × 000A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC00 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC00 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC00 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC00 × 0308 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC00 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC00 × 17D6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC00 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC00 × 0308 × 17D6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC00 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC00 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC00 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC00 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× AC00 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× AC00 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× AC00 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
-× AC00 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× AC00 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× AC00 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC00 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC00 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC00 × 0022 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× AC00 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× AC00 × 0308 × 0022 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× AC00 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [0.3]
-× AC00 × 0020 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× AC00 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× AC00 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× AC00 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× AC00 × 0308 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× AC00 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× AC00 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC00 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC00 × 0308 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC00 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC00 × 200B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC00 × 0020 × 200B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC00 × 0308 × 200B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC00 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC00 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC00 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC00 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC00 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× AC00 × 0020 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× AC00 × 0308 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× AC00 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× AC00 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× AC00 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× AC00 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× AC00 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× AC00 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× AC00 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× AC00 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× AC00 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× AC00 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× AC00 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× AC00 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× AC00 × 0308 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× AC00 × 200D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× AC00 × 0020 ÷ 200D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× AC00 × 0308 × 200D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× AC00 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC00 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC00 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC00 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC00 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC00 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC00 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC00 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC00 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC00 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC00 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC00 × 0308 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC00 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GA (H2) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC01 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC01 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC01 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× AC01 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× AC01 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× AC01 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× AC01 × 0009 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC01 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC01 × 0308 × 0009 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× AC01 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC01 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC01 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× AC01 × 000B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC01 × 0020 × 000B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC01 × 0308 × 000B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC01 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× AC01 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC01 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC01 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× AC01 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC01 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC01 × 0308 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC01 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× AC01 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC01 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC01 × 0308 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC01 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× AC01 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC01 × 0020 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC01 × 0308 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC01 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× AC01 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC01 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC01 × 0308 × 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× AC01 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC01 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC01 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× AC01 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC01 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC01 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× AC01 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC01 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC01 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× AC01 × 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC01 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC01 × 0308 × 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× AC01 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× AC01 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC01 × 0308 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× AC01 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC01 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC01 × 0308 × 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× AC01 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] COMMA (IS) ÷ [0.3]
-× AC01 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× AC01 × 0308 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× AC01 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× AC01 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC01 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC01 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× AC01 × 11A8 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC01 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC01 × 0308 × 11A8 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× AC01 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC01 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC01 × 0308 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× AC01 × 000A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC01 × 0020 × 000A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC01 × 0308 × 000A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC01 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× AC01 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC01 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC01 × 0308 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC01 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× AC01 × 17D6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC01 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC01 × 0308 × 17D6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× AC01 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC01 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC01 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× AC01 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× AC01 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× AC01 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× AC01 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
-× AC01 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× AC01 × 0308 × 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× AC01 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC01 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC01 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× AC01 × 0022 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× AC01 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× AC01 × 0308 × 0022 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× AC01 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [0.3]
-× AC01 × 0020 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× AC01 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× AC01 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× AC01 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× AC01 × 0308 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× AC01 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× AC01 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC01 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC01 × 0308 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC01 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× AC01 × 200B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC01 × 0020 × 200B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC01 × 0308 × 200B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC01 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× AC01 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC01 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC01 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× AC01 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× AC01 × 0020 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× AC01 × 0308 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× AC01 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× AC01 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× AC01 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× AC01 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× AC01 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× AC01 × 0308 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× AC01 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× AC01 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× AC01 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× AC01 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× AC01 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× AC01 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× AC01 × 0308 × 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× AC01 × 200D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× AC01 × 0020 ÷ 200D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× AC01 × 0308 × 200D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× AC01 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC01 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC01 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× AC01 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC01 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC01 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× AC01 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC01 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC01 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× AC01 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC01 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC01 × 0308 × 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× AC01 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL SYLLABLE GAG (H3) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 05D0 × 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 05D0 × 0020 ÷ 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 05D0 × 0308 × 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 05D0 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 05D0 × 0020 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 05D0 × 0308 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 05D0 × 0009 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 05D0 × 0020 ÷ 0009 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 05D0 × 0308 × 0009 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 05D0 ÷ 00B4 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 05D0 × 0020 ÷ 00B4 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 05D0 × 0308 ÷ 00B4 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 05D0 × 000B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 05D0 × 0020 × 000B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 05D0 × 0308 × 000B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 000B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 05D0 ÷ FFFC ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 05D0 × 0020 ÷ FFFC ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 05D0 × 0308 ÷ FFFC ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 05D0 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 05D0 × 0020 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 05D0 × 0308 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 007D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 05D0 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 05D0 × 0020 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 05D0 × 0308 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 000D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 05D0 × 0021 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 05D0 × 0020 × 0021 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 05D0 × 0308 × 0021 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 0021 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 05D0 × 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 05D0 × 0020 ÷ 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 05D0 × 0308 × 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 05D0 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 05D0 × 0020 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 05D0 × 0308 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 05D0 ÷ AC01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 05D0 × 0020 ÷ AC01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 05D0 × 0308 ÷ AC01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 05D0 × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 05D0 × 0020 ÷ 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 05D0 × 0308 × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 05D0 × 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 05D0 × 0020 ÷ 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 05D0 × 0308 × 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 05D0 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 05D0 × 0020 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 05D0 × 0308 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 05D0 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 05D0 × 0020 ÷ 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 05D0 × 0308 × 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 05D0 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] COMMA (IS) ÷ [0.3]
-× 05D0 × 0020 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 05D0 × 0308 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 002C ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 05D0 ÷ 1100 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 05D0 × 0020 ÷ 1100 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 05D0 × 0308 ÷ 1100 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 05D0 ÷ 11A8 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 05D0 × 0020 ÷ 11A8 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 05D0 × 0308 ÷ 11A8 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 05D0 ÷ 1160 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 05D0 × 0020 ÷ 1160 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 05D0 × 0308 ÷ 1160 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 05D0 × 000A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 05D0 × 0020 × 000A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 05D0 × 0308 × 000A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 000A ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 05D0 × 0085 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 05D0 × 0020 × 0085 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 05D0 × 0308 × 0085 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 0085 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 05D0 × 17D6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 05D0 × 0020 ÷ 17D6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 05D0 × 0308 × 17D6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 05D0 × 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 05D0 × 0020 ÷ 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 05D0 × 0308 × 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 05D0 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 05D0 × 0020 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 05D0 × 0308 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 05D0 × 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 05D0 × 0020 ÷ 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 05D0 × 0308 × 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 05D0 × 0024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 05D0 × 0020 ÷ 0024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 05D0 × 0308 × 0024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 05D0 × 0022 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 05D0 × 0020 ÷ 0022 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 05D0 × 0308 × 0022 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 05D0 × 0020 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [0.3]
-× 05D0 × 0020 × 0020 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 0020 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 05D0 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 05D0 × 0020 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 05D0 × 0308 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 002F ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 05D0 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 05D0 × 0020 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 05D0 × 0308 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 2060 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 05D0 × 200B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 05D0 × 0020 × 200B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 05D0 × 0308 × 200B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 200B ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 05D0 ÷ 1F1E6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 05D0 × 0020 ÷ 1F1E6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 05D0 × 0308 ÷ 1F1E6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 05D0 ÷ 261D ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 05D0 × 0020 ÷ 261D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 05D0 × 0308 ÷ 261D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 05D0 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 05D0 × 0020 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 05D0 × 0308 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 05D0 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 05D0 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 05D0 × 0308 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 05D0 × 0308 × 0020 × 0029 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 05D0 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 05D0 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 05D0 × 0308 × 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 05D0 × 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 05D0 × 0020 ÷ 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 05D0 × 0308 × 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 05D0 × 200D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 05D0 × 0020 ÷ 200D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 05D0 × 0308 × 200D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 05D0 × 00A7 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 05D0 × 0020 ÷ 00A7 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 05D0 × 0308 × 00A7 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 05D0 × 50005 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 05D0 × 0020 ÷ 50005 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 05D0 × 0308 × 50005 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 05D0 × 0E01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 05D0 × 0020 ÷ 0E01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 05D0 × 0308 × 0E01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 05D0 × 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 05D0 × 0020 ÷ 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 05D0 × 0308 × 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 05D0 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002D ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002D × 0020 ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002D × 0308 ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002D ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 002D × 0020 ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 002D × 0308 ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 002D × 0009 ÷ # × [0.3] HYPHEN-MINUS (HY) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002D × 0020 ÷ 0009 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002D × 0308 × 0009 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002D ÷ 00B4 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002D × 0020 ÷ 00B4 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002D × 0308 ÷ 00B4 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002D × 000B ÷ # × [0.3] HYPHEN-MINUS (HY) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002D × 0020 × 000B ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002D × 0308 × 000B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002D × 0308 × 0020 × 000B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002D ÷ FFFC ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002D × 0020 ÷ FFFC ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002D × 0308 ÷ FFFC ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002D × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002D × 0020 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002D × 0308 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002D × 0308 × 0020 × 007D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002D × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002D × 0020 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002D × 0308 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002D × 0308 × 0020 × 000D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002D × 0021 ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002D × 0020 × 0021 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002D × 0308 × 0021 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002D × 0308 × 0020 × 0021 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002D ÷ 00A0 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002D × 0020 ÷ 00A0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002D × 0308 ÷ 00A0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002D ÷ AC00 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002D × 0020 ÷ AC00 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002D × 0308 ÷ AC00 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002D ÷ AC01 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002D × 0020 ÷ AC01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002D × 0308 ÷ AC01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002D ÷ 05D0 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002D × 0020 ÷ 05D0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002D × 0308 ÷ 05D0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002D × 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002D × 0020 ÷ 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002D × 0308 × 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 002D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002D ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002D × 0020 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002D × 0308 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 231A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002D × 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002D × 0020 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002D × 0308 × 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002D × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] COMMA (IS) ÷ [0.3]
-× 002D × 0020 × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 002D × 0308 × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 002D × 0308 × 0020 × 002C ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 002D ÷ 1100 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002D × 0020 ÷ 1100 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002D × 0308 ÷ 1100 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002D ÷ 11A8 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002D × 0020 ÷ 11A8 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002D × 0308 ÷ 11A8 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002D ÷ 1160 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002D × 0020 ÷ 1160 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002D × 0308 ÷ 1160 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002D × 000A ÷ # × [0.3] HYPHEN-MINUS (HY) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002D × 0020 × 000A ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002D × 0308 × 000A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002D × 0308 × 0020 × 000A ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002D × 0085 ÷ # × [0.3] HYPHEN-MINUS (HY) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002D × 0020 × 0085 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002D × 0308 × 0085 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002D × 0308 × 0020 × 0085 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002D × 17D6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002D × 0020 ÷ 17D6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002D × 0308 × 17D6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002D × 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [25.02] DIGIT ZERO (NU) ÷ [0.3]
-× 002D × 0020 ÷ 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002D × 0308 × 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.02] DIGIT ZERO (NU) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002D ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002D × 0020 ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002D × 0308 ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002D ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002D × 0020 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002D × 0308 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002D ÷ 0024 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002D × 0020 ÷ 0024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002D × 0308 ÷ 0024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002D × 0022 ÷ # × [0.3] HYPHEN-MINUS (HY) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 002D × 0020 ÷ 0022 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 002D × 0308 × 0022 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 002D × 0020 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [0.3]
-× 002D × 0020 × 0020 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 002D × 0308 × 0020 × 0020 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 002D × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002D × 0020 × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002D × 0308 × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 002D × 0308 × 0020 × 002F ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002D × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002D × 0020 × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002D × 0308 × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002D × 0308 × 0020 × 2060 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002D × 200B ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002D × 0020 × 200B ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002D × 0308 × 200B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002D × 0308 × 0020 × 200B ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002D ÷ 1F1E6 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002D × 0020 ÷ 1F1E6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002D × 0308 ÷ 1F1E6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002D ÷ 261D ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002D × 0020 ÷ 261D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002D × 0308 ÷ 261D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 261D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002D ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002D × 0020 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002D × 0308 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002D × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002D × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002D × 0308 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002D × 0308 × 0020 × 0029 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002D ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002D × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002D × 0308 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002D × 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002D × 0020 ÷ 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002D × 0308 × 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002D × 200D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002D × 0020 ÷ 200D ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002D × 0308 × 200D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 200D ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002D ÷ 00A7 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002D × 0020 ÷ 00A7 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002D × 0308 ÷ 00A7 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002D ÷ 50005 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002D × 0020 ÷ 50005 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002D × 0308 ÷ 50005 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002D ÷ 0E01 ÷ # × [0.3] HYPHEN-MINUS (HY) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002D × 0020 ÷ 0E01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002D × 0308 ÷ 0E01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002D × 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002D × 0020 ÷ 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002D × 0308 × 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002D × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HYPHEN-MINUS (HY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 231A ÷ 0023 ÷ # × [0.3] WATCH (ID) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 231A × 0020 ÷ 0023 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 231A × 0308 ÷ 0023 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0023 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 231A ÷ 2014 ÷ # × [0.3] WATCH (ID) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 231A × 0020 ÷ 2014 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 231A × 0308 ÷ 2014 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 2014 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 231A × 0009 ÷ # × [0.3] WATCH (ID) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 231A × 0020 ÷ 0009 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 231A × 0308 × 0009 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0009 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 231A ÷ 00B4 ÷ # × [0.3] WATCH (ID) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 231A × 0020 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 231A × 0308 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 231A × 000B ÷ # × [0.3] WATCH (ID) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 231A × 0020 × 000B ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 231A × 0308 × 000B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 231A × 0308 × 0020 × 000B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 231A ÷ FFFC ÷ # × [0.3] WATCH (ID) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 231A × 0020 ÷ FFFC ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 231A × 0308 ÷ FFFC ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ FFFC ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 231A × 007D ÷ # × [0.3] WATCH (ID) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 0020 × 007D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 0308 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 0308 × 0020 × 007D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 231A × 000D ÷ # × [0.3] WATCH (ID) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 231A × 0020 × 000D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 231A × 0308 × 000D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 231A × 0308 × 0020 × 000D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 231A × 0021 ÷ # × [0.3] WATCH (ID) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 231A × 0020 × 0021 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 231A × 0308 × 0021 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 231A × 0308 × 0020 × 0021 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 231A × 00A0 ÷ # × [0.3] WATCH (ID) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 231A × 0020 ÷ 00A0 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 231A × 0308 × 00A0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 231A ÷ AC00 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 231A × 0020 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 231A × 0308 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ AC00 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 231A ÷ AC01 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 231A × 0020 ÷ AC01 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 231A × 0308 ÷ AC01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ AC01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 231A ÷ 05D0 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 231A × 0020 ÷ 05D0 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 231A × 0308 ÷ 05D0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 231A × 002D ÷ # × [0.3] WATCH (ID) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 231A × 0020 ÷ 002D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 231A × 0308 × 002D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 002D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 231A ÷ 231A ÷ # × [0.3] WATCH (ID) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 231A × 0020 ÷ 231A ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 231A × 0308 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 231A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 231A × 2024 ÷ # × [0.3] WATCH (ID) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 0020 ÷ 2024 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 0308 × 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 231A × 002C ÷ # × [0.3] WATCH (ID) × [13.02] COMMA (IS) ÷ [0.3]
-× 231A × 0020 × 002C ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 231A × 0308 × 002C ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 231A × 0308 × 0020 × 002C ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 231A ÷ 1100 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 231A × 0020 ÷ 1100 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 231A × 0308 ÷ 1100 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 1100 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 231A ÷ 11A8 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 231A × 0020 ÷ 11A8 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 231A × 0308 ÷ 11A8 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 231A ÷ 1160 ÷ # × [0.3] WATCH (ID) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 231A × 0020 ÷ 1160 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 231A × 0308 ÷ 1160 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 1160 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 231A × 000A ÷ # × [0.3] WATCH (ID) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 231A × 0020 × 000A ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 231A × 0308 × 000A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 231A × 0308 × 0020 × 000A ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 231A × 0085 ÷ # × [0.3] WATCH (ID) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 231A × 0020 × 0085 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 231A × 0308 × 0085 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 231A × 0308 × 0020 × 0085 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 231A × 17D6 ÷ # × [0.3] WATCH (ID) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 231A × 0020 ÷ 17D6 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 231A × 0308 × 17D6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 231A ÷ 0030 ÷ # × [0.3] WATCH (ID) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A × 0020 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A × 0308 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 231A ÷ 2329 ÷ # × [0.3] WATCH (ID) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 231A × 0020 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 231A × 0308 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 2329 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 231A × 0025 ÷ # × [0.3] WATCH (ID) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
-× 231A × 0020 ÷ 0025 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 231A × 0308 × 0025 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0025 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 231A ÷ 0024 ÷ # × [0.3] WATCH (ID) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 231A × 0020 ÷ 0024 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 231A × 0308 ÷ 0024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0024 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 231A × 0022 ÷ # × [0.3] WATCH (ID) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 231A × 0020 ÷ 0022 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 231A × 0308 × 0022 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0022 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 231A × 0020 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [0.3]
-× 231A × 0020 × 0020 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 231A × 0308 × 0020 × 0020 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 231A × 002F ÷ # × [0.3] WATCH (ID) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 231A × 0020 × 002F ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 231A × 0308 × 002F ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 231A × 0308 × 0020 × 002F ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 231A × 2060 ÷ # × [0.3] WATCH (ID) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 231A × 0020 × 2060 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 231A × 0308 × 2060 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 231A × 0308 × 0020 × 2060 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 231A × 200B ÷ # × [0.3] WATCH (ID) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 231A × 0020 × 200B ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 231A × 0308 × 200B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 231A × 0308 × 0020 × 200B ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 231A ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 231A × 0020 ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 231A × 0308 ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 231A ÷ 261D ÷ # × [0.3] WATCH (ID) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 231A × 0020 ÷ 261D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 231A × 0308 ÷ 261D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 261D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 231A ÷ 1F3FB ÷ # × [0.3] WATCH (ID) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 231A × 0020 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 231A × 0308 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 231A × 0029 ÷ # × [0.3] WATCH (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 231A × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 231A × 0308 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 231A × 0308 × 0020 × 0029 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 231A ÷ 0028 ÷ # × [0.3] WATCH (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 231A × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 231A × 0308 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 231A × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 231A × 0020 ÷ 0001 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 231A × 0308 × 0001 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0001 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 231A × 200D ÷ # × [0.3] WATCH (ID) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 231A × 0020 ÷ 200D ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 231A × 0308 × 200D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 200D ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 231A ÷ 00A7 ÷ # × [0.3] WATCH (ID) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 231A × 0020 ÷ 00A7 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 231A × 0308 ÷ 00A7 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 231A ÷ 50005 ÷ # × [0.3] WATCH (ID) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 231A × 0020 ÷ 50005 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 231A × 0308 ÷ 50005 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 50005 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 231A ÷ 0E01 ÷ # × [0.3] WATCH (ID) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 231A × 0020 ÷ 0E01 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 231A × 0308 ÷ 0E01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 231A × 3041 ÷ # × [0.3] WATCH (ID) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 231A × 0020 ÷ 3041 ÷ # × [0.3] WATCH (ID) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 231A × 0308 × 3041 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 231A × 0308 × 0020 ÷ 3041 ÷ # × [0.3] WATCH (ID) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2024 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2024 × 0020 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2024 × 0308 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2024 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 2024 × 0020 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 2024 × 0308 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 2024 × 0009 ÷ # × [0.3] ONE DOT LEADER (IN) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2024 × 0020 ÷ 0009 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2024 × 0308 × 0009 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2024 ÷ 00B4 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2024 × 0020 ÷ 00B4 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2024 × 0308 ÷ 00B4 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2024 × 000B ÷ # × [0.3] ONE DOT LEADER (IN) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2024 × 0020 × 000B ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2024 × 0308 × 000B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2024 × 0308 × 0020 × 000B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2024 ÷ FFFC ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2024 × 0020 ÷ FFFC ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2024 × 0308 ÷ FFFC ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2024 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2024 × 0020 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2024 × 0308 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2024 × 0308 × 0020 × 007D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2024 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2024 × 0020 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2024 × 0308 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2024 × 0308 × 0020 × 000D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2024 × 0021 ÷ # × [0.3] ONE DOT LEADER (IN) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2024 × 0020 × 0021 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2024 × 0308 × 0021 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2024 × 0308 × 0020 × 0021 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2024 × 00A0 ÷ # × [0.3] ONE DOT LEADER (IN) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2024 × 0020 ÷ 00A0 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2024 × 0308 × 00A0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2024 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2024 × 0020 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2024 × 0308 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2024 ÷ AC01 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2024 × 0020 ÷ AC01 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2024 × 0308 ÷ AC01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2024 ÷ 05D0 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2024 × 0020 ÷ 05D0 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2024 × 0308 ÷ 05D0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2024 × 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2024 × 0020 ÷ 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2024 × 0308 × 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 002D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2024 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 2024 × 0020 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2024 × 0308 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2024 × 0020 ÷ 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2024 × 0308 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2024 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] COMMA (IS) ÷ [0.3]
-× 2024 × 0020 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2024 × 0308 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 2024 × 0308 × 0020 × 002C ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2024 ÷ 1100 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2024 × 0020 ÷ 1100 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2024 × 0308 ÷ 1100 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2024 ÷ 11A8 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2024 × 0020 ÷ 11A8 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2024 × 0308 ÷ 11A8 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2024 ÷ 1160 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2024 × 0020 ÷ 1160 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2024 × 0308 ÷ 1160 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2024 × 000A ÷ # × [0.3] ONE DOT LEADER (IN) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2024 × 0020 × 000A ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2024 × 0308 × 000A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2024 × 0308 × 0020 × 000A ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2024 × 0085 ÷ # × [0.3] ONE DOT LEADER (IN) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2024 × 0020 × 0085 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2024 × 0308 × 0085 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2024 × 0308 × 0020 × 0085 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2024 × 17D6 ÷ # × [0.3] ONE DOT LEADER (IN) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2024 × 0020 ÷ 17D6 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2024 × 0308 × 17D6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2024 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2024 × 0020 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2024 × 0308 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2024 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2024 × 0020 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2024 × 0308 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2024 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2024 × 0020 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2024 × 0308 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2024 ÷ 0024 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2024 × 0020 ÷ 0024 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2024 × 0308 ÷ 0024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2024 × 0022 ÷ # × [0.3] ONE DOT LEADER (IN) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 2024 × 0020 ÷ 0022 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2024 × 0308 × 0022 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2024 × 0020 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [0.3]
-× 2024 × 0020 × 0020 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 2024 × 0308 × 0020 × 0020 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2024 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2024 × 0020 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2024 × 0308 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 2024 × 0308 × 0020 × 002F ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2024 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2024 × 0020 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2024 × 0308 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2024 × 0308 × 0020 × 2060 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2024 × 200B ÷ # × [0.3] ONE DOT LEADER (IN) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2024 × 0020 × 200B ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2024 × 0308 × 200B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2024 × 0308 × 0020 × 200B ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2024 ÷ 1F1E6 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2024 × 0020 ÷ 1F1E6 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2024 × 0308 ÷ 1F1E6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2024 ÷ 261D ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2024 × 0020 ÷ 261D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2024 × 0308 ÷ 261D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 261D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2024 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2024 × 0020 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2024 × 0308 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2024 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2024 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2024 × 0308 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2024 × 0308 × 0020 × 0029 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2024 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2024 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2024 × 0308 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2024 × 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2024 × 0020 ÷ 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2024 × 0308 × 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2024 × 200D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2024 × 0020 ÷ 200D ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2024 × 0308 × 200D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 200D ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2024 ÷ 00A7 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2024 × 0020 ÷ 00A7 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2024 × 0308 ÷ 00A7 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2024 ÷ 50005 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2024 × 0020 ÷ 50005 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2024 × 0308 ÷ 50005 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2024 ÷ 0E01 ÷ # × [0.3] ONE DOT LEADER (IN) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2024 × 0020 ÷ 0E01 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2024 × 0308 ÷ 0E01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2024 × 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2024 × 0020 ÷ 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2024 × 0308 × 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2024 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] ONE DOT LEADER (IN) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002C × 0023 ÷ # × [0.3] COMMA (IS) × [29.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002C × 0020 ÷ 0023 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002C × 0308 × 0023 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [29.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0023 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002C ÷ 2014 ÷ # × [0.3] COMMA (IS) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 002C × 0020 ÷ 2014 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 002C × 0308 ÷ 2014 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 2014 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 002C × 0009 ÷ # × [0.3] COMMA (IS) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002C × 0020 ÷ 0009 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002C × 0308 × 0009 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0009 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002C ÷ 00B4 ÷ # × [0.3] COMMA (IS) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002C × 0020 ÷ 00B4 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002C × 0308 ÷ 00B4 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002C × 000B ÷ # × [0.3] COMMA (IS) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002C × 0020 × 000B ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002C × 0308 × 000B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002C × 0308 × 0020 × 000B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002C ÷ FFFC ÷ # × [0.3] COMMA (IS) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002C × 0020 ÷ FFFC ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002C × 0308 ÷ FFFC ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ FFFC ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002C × 007D ÷ # × [0.3] COMMA (IS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002C × 0020 × 007D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002C × 0308 × 007D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002C × 0308 × 0020 × 007D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002C × 000D ÷ # × [0.3] COMMA (IS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002C × 0020 × 000D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002C × 0308 × 000D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002C × 0308 × 0020 × 000D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002C × 0021 ÷ # × [0.3] COMMA (IS) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002C × 0020 × 0021 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002C × 0308 × 0021 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002C × 0308 × 0020 × 0021 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002C × 00A0 ÷ # × [0.3] COMMA (IS) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002C × 0020 ÷ 00A0 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002C × 0308 × 00A0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002C ÷ AC00 ÷ # × [0.3] COMMA (IS) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002C × 0020 ÷ AC00 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002C × 0308 ÷ AC00 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ AC00 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002C ÷ AC01 ÷ # × [0.3] COMMA (IS) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002C × 0020 ÷ AC01 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002C × 0308 ÷ AC01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ AC01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002C × 05D0 ÷ # × [0.3] COMMA (IS) × [29.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002C × 0020 ÷ 05D0 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002C × 0308 × 05D0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [29.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002C × 002D ÷ # × [0.3] COMMA (IS) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002C × 0020 ÷ 002D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002C × 0308 × 002D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 002D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002C ÷ 231A ÷ # × [0.3] COMMA (IS) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002C × 0020 ÷ 231A ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002C × 0308 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 231A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002C × 2024 ÷ # × [0.3] COMMA (IS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002C × 0020 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002C × 0308 × 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 2024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002C × 002C ÷ # × [0.3] COMMA (IS) × [13.02] COMMA (IS) ÷ [0.3]
-× 002C × 0020 × 002C ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 002C × 0308 × 002C ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 002C × 0308 × 0020 × 002C ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 002C ÷ 1100 ÷ # × [0.3] COMMA (IS) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002C × 0020 ÷ 1100 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002C × 0308 ÷ 1100 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 1100 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002C ÷ 11A8 ÷ # × [0.3] COMMA (IS) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002C × 0020 ÷ 11A8 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002C × 0308 ÷ 11A8 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002C ÷ 1160 ÷ # × [0.3] COMMA (IS) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002C × 0020 ÷ 1160 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002C × 0308 ÷ 1160 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 1160 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002C × 000A ÷ # × [0.3] COMMA (IS) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002C × 0020 × 000A ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002C × 0308 × 000A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002C × 0308 × 0020 × 000A ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002C × 0085 ÷ # × [0.3] COMMA (IS) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002C × 0020 × 0085 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002C × 0308 × 0085 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002C × 0308 × 0020 × 0085 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002C × 17D6 ÷ # × [0.3] COMMA (IS) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002C × 0020 ÷ 17D6 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002C × 0308 × 17D6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002C ÷ 0030 ÷ # × [0.3] COMMA (IS) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002C × 0020 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002C × 0308 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0030 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002C ÷ 2329 ÷ # × [0.3] COMMA (IS) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002C × 0020 ÷ 2329 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002C × 0308 ÷ 2329 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 2329 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002C ÷ 0025 ÷ # × [0.3] COMMA (IS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002C × 0020 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002C × 0308 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0025 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002C ÷ 0024 ÷ # × [0.3] COMMA (IS) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002C × 0020 ÷ 0024 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002C × 0308 ÷ 0024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0024 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002C × 0022 ÷ # × [0.3] COMMA (IS) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 002C × 0020 ÷ 0022 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 002C × 0308 × 0022 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0022 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 002C × 0020 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [0.3]
-× 002C × 0020 × 0020 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 002C × 0308 × 0020 × 0020 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 002C × 002F ÷ # × [0.3] COMMA (IS) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002C × 0020 × 002F ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002C × 0308 × 002F ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 002C × 0308 × 0020 × 002F ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002C × 2060 ÷ # × [0.3] COMMA (IS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002C × 0020 × 2060 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002C × 0308 × 2060 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002C × 0308 × 0020 × 2060 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002C × 200B ÷ # × [0.3] COMMA (IS) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002C × 0020 × 200B ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002C × 0308 × 200B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002C × 0308 × 0020 × 200B ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002C ÷ 1F1E6 ÷ # × [0.3] COMMA (IS) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002C × 0020 ÷ 1F1E6 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002C × 0308 ÷ 1F1E6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002C ÷ 261D ÷ # × [0.3] COMMA (IS) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002C × 0020 ÷ 261D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002C × 0308 ÷ 261D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 261D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002C ÷ 1F3FB ÷ # × [0.3] COMMA (IS) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002C × 0020 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002C × 0308 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002C × 0029 ÷ # × [0.3] COMMA (IS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002C × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002C × 0308 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002C × 0308 × 0020 × 0029 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002C ÷ 0028 ÷ # × [0.3] COMMA (IS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002C × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002C × 0308 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0028 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002C × 0001 ÷ # × [0.3] COMMA (IS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002C × 0020 ÷ 0001 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002C × 0308 × 0001 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0001 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002C × 200D ÷ # × [0.3] COMMA (IS) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002C × 0020 ÷ 200D ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002C × 0308 × 200D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 200D ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002C × 00A7 ÷ # × [0.3] COMMA (IS) × [29.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002C × 0020 ÷ 00A7 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002C × 0308 × 00A7 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [29.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002C × 50005 ÷ # × [0.3] COMMA (IS) × [29.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002C × 0020 ÷ 50005 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002C × 0308 × 50005 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [29.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 50005 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002C × 0E01 ÷ # × [0.3] COMMA (IS) × [29.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002C × 0020 ÷ 0E01 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002C × 0308 × 0E01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [29.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002C × 3041 ÷ # × [0.3] COMMA (IS) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002C × 0020 ÷ 3041 ÷ # × [0.3] COMMA (IS) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002C × 0308 × 3041 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002C × 0308 × 0020 ÷ 3041 ÷ # × [0.3] COMMA (IS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1100 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1100 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1100 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1100 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 1100 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 1100 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 1100 × 0009 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1100 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1100 × 0308 × 0009 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1100 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1100 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1100 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1100 × 000B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1100 × 0020 × 000B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1100 × 0308 × 000B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1100 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1100 ÷ FFFC ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1100 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1100 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1100 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1100 × 0020 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1100 × 0308 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1100 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1100 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1100 × 0020 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1100 × 0308 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1100 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1100 × 0021 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1100 × 0020 × 0021 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1100 × 0308 × 0021 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1100 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1100 × 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1100 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1100 × 0308 × 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1100 × AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1100 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1100 × 0308 × AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.01] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1100 × AC01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1100 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1100 × 0308 × AC01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.01] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1100 ÷ 05D0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1100 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1100 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1100 × 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1100 × 0020 ÷ 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1100 × 0308 × 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1100 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1100 × 0020 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1100 × 0308 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1100 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1100 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1100 × 0308 × 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1100 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] COMMA (IS) ÷ [0.3]
-× 1100 × 0020 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 1100 × 0308 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 1100 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 1100 × 1100 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1100 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1100 × 0308 × 1100 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.01] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1100 ÷ 11A8 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1100 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1100 × 0308 ÷ 11A8 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1100 × 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1100 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1100 × 0308 × 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.01] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1100 × 000A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1100 × 0020 × 000A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1100 × 0308 × 000A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1100 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1100 × 0085 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1100 × 0020 × 0085 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1100 × 0308 × 0085 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1100 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1100 × 17D6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1100 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1100 × 0308 × 17D6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1100 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1100 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1100 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1100 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1100 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1100 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1100 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
-× 1100 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1100 × 0308 × 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1100 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1100 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1100 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1100 × 0022 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 1100 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 1100 × 0308 × 0022 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 1100 × 0020 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [0.3]
-× 1100 × 0020 × 0020 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 1100 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 1100 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1100 × 0020 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1100 × 0308 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 1100 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1100 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1100 × 0020 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1100 × 0308 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1100 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1100 × 200B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1100 × 0020 × 200B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1100 × 0308 × 200B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1100 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1100 ÷ 1F1E6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1100 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1100 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1100 ÷ 261D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1100 × 0020 ÷ 261D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1100 × 0308 ÷ 261D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1100 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1100 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1100 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1100 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1100 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1100 × 0308 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1100 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1100 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1100 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1100 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1100 × 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1100 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1100 × 0308 × 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1100 × 200D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1100 × 0020 ÷ 200D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1100 × 0308 × 200D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1100 ÷ 00A7 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1100 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1100 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1100 ÷ 50005 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1100 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1100 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1100 ÷ 0E01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1100 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1100 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1100 × 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1100 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1100 × 0308 × 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1100 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 11A8 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 11A8 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 11A8 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 11A8 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 11A8 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 11A8 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 11A8 × 0009 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 11A8 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 11A8 × 0308 × 0009 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 11A8 ÷ 00B4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 11A8 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 11A8 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 11A8 × 000B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 11A8 × 0020 × 000B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 11A8 × 0308 × 000B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 11A8 ÷ FFFC ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 11A8 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 11A8 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 11A8 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 11A8 × 0020 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 11A8 × 0308 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 11A8 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 11A8 × 0020 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 11A8 × 0308 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 11A8 × 0021 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 11A8 × 0020 × 0021 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 11A8 × 0308 × 0021 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 11A8 × 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 11A8 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 11A8 × 0308 × 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 11A8 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 11A8 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 11A8 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 11A8 ÷ AC01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 11A8 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 11A8 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 11A8 ÷ 05D0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 11A8 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 11A8 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 11A8 × 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 11A8 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 11A8 × 0308 × 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 11A8 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 11A8 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 11A8 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 11A8 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 11A8 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 11A8 × 0308 × 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 11A8 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] COMMA (IS) ÷ [0.3]
-× 11A8 × 0020 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 11A8 × 0308 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 11A8 ÷ 1100 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 11A8 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 11A8 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 11A8 × 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 11A8 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 11A8 × 0308 × 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 11A8 ÷ 1160 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 11A8 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 11A8 × 0308 ÷ 1160 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 11A8 × 000A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 11A8 × 0020 × 000A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 11A8 × 0308 × 000A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 11A8 × 0085 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 11A8 × 0020 × 0085 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 11A8 × 0308 × 0085 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 11A8 × 17D6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 11A8 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 11A8 × 0308 × 17D6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 11A8 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 11A8 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 11A8 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 11A8 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 11A8 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 11A8 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 11A8 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
-× 11A8 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 11A8 × 0308 × 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 11A8 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 11A8 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 11A8 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 11A8 × 0022 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 11A8 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 11A8 × 0308 × 0022 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 11A8 × 0020 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [0.3]
-× 11A8 × 0020 × 0020 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 11A8 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 11A8 × 0020 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 11A8 × 0308 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 11A8 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 11A8 × 0020 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 11A8 × 0308 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 11A8 × 200B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 11A8 × 0020 × 200B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 11A8 × 0308 × 200B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 11A8 ÷ 1F1E6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 11A8 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 11A8 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 11A8 ÷ 261D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 11A8 × 0020 ÷ 261D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 11A8 × 0308 ÷ 261D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 11A8 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 11A8 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 11A8 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 11A8 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 11A8 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 11A8 × 0308 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 11A8 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 11A8 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 11A8 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 11A8 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 11A8 × 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 11A8 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 11A8 × 0308 × 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 11A8 × 200D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 11A8 × 0020 ÷ 200D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 11A8 × 0308 × 200D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 11A8 ÷ 00A7 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 11A8 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 11A8 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 11A8 ÷ 50005 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 11A8 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 11A8 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 11A8 ÷ 0E01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 11A8 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 11A8 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 11A8 × 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 11A8 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 11A8 × 0308 × 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 11A8 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1160 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1160 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1160 × 0308 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1160 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 1160 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 1160 × 0308 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 1160 × 0009 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1160 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1160 × 0308 × 0009 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1160 ÷ 00B4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1160 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1160 × 0308 ÷ 00B4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1160 × 000B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1160 × 0020 × 000B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1160 × 0308 × 000B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1160 × 0308 × 0020 × 000B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1160 ÷ FFFC ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1160 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1160 × 0308 ÷ FFFC ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1160 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1160 × 0020 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1160 × 0308 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1160 × 0308 × 0020 × 007D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1160 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1160 × 0020 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1160 × 0308 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1160 × 0308 × 0020 × 000D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1160 × 0021 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1160 × 0020 × 0021 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1160 × 0308 × 0021 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1160 × 0308 × 0020 × 0021 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1160 × 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1160 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1160 × 0308 × 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1160 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1160 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1160 × 0308 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1160 ÷ AC01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1160 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1160 × 0308 ÷ AC01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1160 ÷ 05D0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1160 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1160 × 0308 ÷ 05D0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1160 × 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1160 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1160 × 0308 × 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1160 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1160 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1160 × 0308 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1160 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1160 × 0308 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1160 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] COMMA (IS) ÷ [0.3]
-× 1160 × 0020 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 1160 × 0308 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 1160 × 0308 × 0020 × 002C ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 1160 ÷ 1100 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1160 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1160 × 0308 ÷ 1100 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1160 × 11A8 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [26.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1160 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1160 × 0308 × 11A8 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1160 × 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1160 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1160 × 0308 × 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1160 × 000A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1160 × 0020 × 000A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1160 × 0308 × 000A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1160 × 0308 × 0020 × 000A ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1160 × 0085 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1160 × 0020 × 0085 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1160 × 0308 × 0085 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1160 × 0308 × 0020 × 0085 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1160 × 17D6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1160 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1160 × 0308 × 17D6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1160 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1160 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1160 × 0308 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1160 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1160 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1160 × 0308 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
-× 1160 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1160 × 0308 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1160 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1160 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1160 × 0308 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1160 × 0022 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 1160 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 1160 × 0308 × 0022 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 1160 × 0020 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [0.3]
-× 1160 × 0020 × 0020 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 1160 × 0308 × 0020 × 0020 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 1160 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1160 × 0020 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1160 × 0308 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 1160 × 0308 × 0020 × 002F ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1160 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1160 × 0020 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1160 × 0308 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1160 × 0308 × 0020 × 2060 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1160 × 200B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1160 × 0020 × 200B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1160 × 0308 × 200B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1160 × 0308 × 0020 × 200B ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1160 ÷ 1F1E6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1160 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1160 × 0308 ÷ 1F1E6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1160 ÷ 261D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1160 × 0020 ÷ 261D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1160 × 0308 ÷ 261D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1160 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1160 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1160 × 0308 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1160 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1160 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1160 × 0308 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1160 × 0308 × 0020 × 0029 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1160 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1160 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1160 × 0308 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1160 × 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1160 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1160 × 0308 × 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1160 × 200D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1160 × 0020 ÷ 200D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1160 × 0308 × 200D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1160 ÷ 00A7 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1160 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1160 × 0308 ÷ 00A7 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1160 ÷ 50005 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1160 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1160 × 0308 ÷ 50005 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1160 ÷ 0E01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1160 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1160 × 0308 ÷ 0E01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1160 × 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1160 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1160 × 0308 × 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1160 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000A ÷ 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] NUMBER SIGN (AL) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000A ÷ 0308 × 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 000A ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] EM DASH (B2) ÷ [0.3]
-× 000A ÷ 0020 ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 000A ÷ 0308 ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 000A ÷ 0009 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0009 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000A ÷ 0308 × 0009 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 000A ÷ 00B4 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] ACUTE ACCENT (BB) ÷ [0.3]
-× 000A ÷ 0020 ÷ 00B4 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000A ÷ 0308 ÷ 00B4 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 000A ÷ 000B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <LINE TABULATION> (BK) ÷ [0.3]
-× 000A ÷ 0020 × 000B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000A ÷ 0308 × 000B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 000B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 000A ÷ FFFC ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000A ÷ 0020 ÷ FFFC ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000A ÷ 0308 ÷ FFFC ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 000A ÷ 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000A ÷ 0020 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000A ÷ 0308 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 007D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 000A ÷ 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000A ÷ 0020 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000A ÷ 0308 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 000D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 000A ÷ 0021 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000A ÷ 0020 × 0021 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000A ÷ 0308 × 0021 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 000A ÷ 00A0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000A ÷ 0020 ÷ 00A0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000A ÷ 0308 × 00A0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 000A ÷ AC00 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000A ÷ 0020 ÷ AC00 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000A ÷ 0308 ÷ AC00 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 000A ÷ AC01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000A ÷ 0020 ÷ AC01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000A ÷ 0308 ÷ AC01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 000A ÷ 05D0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000A ÷ 0020 ÷ 05D0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000A ÷ 0308 × 05D0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 000A ÷ 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000A ÷ 0020 ÷ 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000A ÷ 0308 × 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 000A ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] WATCH (ID) ÷ [0.3]
-× 000A ÷ 0020 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000A ÷ 0308 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 000A ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] ONE DOT LEADER (IN) ÷ [0.3]
-× 000A ÷ 0020 ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000A ÷ 0308 × 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 000A ÷ 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMMA (IS) ÷ [0.3]
-× 000A ÷ 0020 × 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 000A ÷ 0308 × 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 002C ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 000A ÷ 1100 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000A ÷ 0020 ÷ 1100 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000A ÷ 0308 ÷ 1100 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 000A ÷ 11A8 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000A ÷ 0020 ÷ 11A8 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000A ÷ 0308 ÷ 11A8 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 000A ÷ 1160 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000A ÷ 0020 ÷ 1160 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000A ÷ 0308 ÷ 1160 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 000A ÷ 000A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000A ÷ 0020 × 000A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000A ÷ 0308 × 000A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 000A ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 000A ÷ 0085 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000A ÷ 0020 × 0085 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000A ÷ 0308 × 0085 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 000A ÷ 17D6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000A ÷ 0020 ÷ 17D6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000A ÷ 0308 × 17D6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 000A ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] DIGIT ZERO (NU) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000A ÷ 0308 × 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 000A ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000A ÷ 0020 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000A ÷ 0308 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 000A ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] PERCENT SIGN (PO) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000A ÷ 0308 × 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 000A ÷ 0024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000A ÷ 0308 × 0024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 000A ÷ 0022 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] QUOTATION MARK (QU) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0022 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 000A ÷ 0308 × 0022 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 000A ÷ 0020 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [0.3]
-× 000A ÷ 0020 × 0020 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 000A ÷ 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SOLIDUS (SY) ÷ [0.3]
-× 000A ÷ 0020 × 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 000A ÷ 0308 × 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 002F ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 000A ÷ 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] WORD JOINER (WJ) ÷ [0.3]
-× 000A ÷ 0020 × 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000A ÷ 0308 × 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 000A ÷ 200B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000A ÷ 0020 × 200B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000A ÷ 0308 × 200B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 200B ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 000A ÷ 1F1E6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000A ÷ 0020 ÷ 1F1E6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000A ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 000A ÷ 261D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000A ÷ 0020 ÷ 261D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000A ÷ 0308 ÷ 261D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 000A ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000A ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000A ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 000A ÷ 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000A ÷ 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000A ÷ 0308 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000A ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 000A ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000A ÷ 0308 × 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 000A ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000A ÷ 0308 × 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 000A ÷ 200D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000A ÷ 0020 ÷ 200D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000A ÷ 0308 × 200D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 000A ÷ 00A7 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000A ÷ 0020 ÷ 00A7 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000A ÷ 0308 × 00A7 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 000A ÷ 50005 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000A ÷ 0020 ÷ 50005 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000A ÷ 0308 × 50005 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 000A ÷ 0E01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000A ÷ 0020 ÷ 0E01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000A ÷ 0308 × 0E01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 000A ÷ 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000A ÷ 0020 ÷ 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000A ÷ 0308 × 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000A ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0085 ÷ 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] NUMBER SIGN (AL) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0085 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] EM DASH (B2) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0085 ÷ 0009 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0009 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0085 ÷ 0308 × 0009 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0085 ÷ 00B4 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] ACUTE ACCENT (BB) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 00B4 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 00B4 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0085 ÷ 000B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <LINE TABULATION> (BK) ÷ [0.3]
-× 0085 ÷ 0020 × 000B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0085 ÷ 0308 × 000B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 000B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0085 ÷ FFFC ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0085 ÷ 0020 ÷ FFFC ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0085 ÷ 0308 ÷ FFFC ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0085 ÷ 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0085 ÷ 0020 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0085 ÷ 0308 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 007D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0085 ÷ 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0085 ÷ 0020 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0085 ÷ 0308 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 000D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0085 ÷ 0021 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0085 ÷ 0020 × 0021 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0085 ÷ 0308 × 0021 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 0021 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0085 ÷ 00A0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 00A0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0085 ÷ 0308 × 00A0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0085 ÷ AC00 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0085 ÷ 0020 ÷ AC00 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0085 ÷ 0308 ÷ AC00 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0085 ÷ AC01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0085 ÷ 0020 ÷ AC01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0085 ÷ 0308 ÷ AC01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0085 ÷ 05D0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 05D0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0085 ÷ 0308 × 05D0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0085 ÷ 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0085 ÷ 0308 × 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0085 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] WATCH (ID) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0085 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] ONE DOT LEADER (IN) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0085 ÷ 0308 × 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0085 ÷ 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMMA (IS) ÷ [0.3]
-× 0085 ÷ 0020 × 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0085 ÷ 0308 × 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 002C ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0085 ÷ 1100 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 1100 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 1100 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0085 ÷ 11A8 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 11A8 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 11A8 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0085 ÷ 1160 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 1160 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 1160 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0085 ÷ 000A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0085 ÷ 0020 × 000A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0085 ÷ 0308 × 000A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 000A ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0085 ÷ 0085 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0085 ÷ 0020 × 0085 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0085 ÷ 0308 × 0085 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 0085 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0085 ÷ 17D6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 17D6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0085 ÷ 0308 × 17D6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0085 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] DIGIT ZERO (NU) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0085 ÷ 0308 × 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0085 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0085 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] PERCENT SIGN (PO) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0085 ÷ 0308 × 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0085 ÷ 0024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] DOLLAR SIGN (PR) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0085 ÷ 0308 × 0024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0085 ÷ 0022 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] QUOTATION MARK (QU) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0022 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0085 ÷ 0308 × 0022 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0085 ÷ 0020 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [0.3]
-× 0085 ÷ 0020 × 0020 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 0020 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0085 ÷ 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SOLIDUS (SY) ÷ [0.3]
-× 0085 ÷ 0020 × 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0085 ÷ 0308 × 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 002F ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0085 ÷ 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] WORD JOINER (WJ) ÷ [0.3]
-× 0085 ÷ 0020 × 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0085 ÷ 0308 × 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 2060 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0085 ÷ 200B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0085 ÷ 0020 × 200B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0085 ÷ 0308 × 200B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 200B ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0085 ÷ 1F1E6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 1F1E6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0085 ÷ 261D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 261D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 261D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0085 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0085 ÷ 0308 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0085 ÷ 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0085 ÷ 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0085 ÷ 0308 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0085 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0085 ÷ 0308 × 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0085 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0085 ÷ 0308 × 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0085 ÷ 200D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 200D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0085 ÷ 0308 × 200D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0085 ÷ 00A7 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 00A7 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 00A7 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0085 ÷ 50005 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 50005 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 50005 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0085 ÷ 0E01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 0E01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0E01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0085 ÷ 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0085 ÷ 0020 ÷ 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0085 ÷ 0308 × 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0085 ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 17D6 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 17D6 × 0020 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 17D6 × 0308 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 17D6 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 17D6 × 0020 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 17D6 × 0308 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 17D6 × 0009 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 17D6 × 0020 ÷ 0009 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 17D6 × 0308 × 0009 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 17D6 ÷ 00B4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 17D6 × 0020 ÷ 00B4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 17D6 × 0308 ÷ 00B4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 17D6 × 000B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 17D6 × 0020 × 000B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 17D6 × 0308 × 000B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 000B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 17D6 ÷ FFFC ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 17D6 × 0020 ÷ FFFC ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 17D6 × 0308 ÷ FFFC ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 17D6 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 17D6 × 0020 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 17D6 × 0308 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 007D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 17D6 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 17D6 × 0020 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 17D6 × 0308 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 000D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 17D6 × 0021 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 17D6 × 0020 × 0021 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 17D6 × 0308 × 0021 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 0021 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 17D6 × 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 17D6 × 0020 ÷ 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 17D6 × 0308 × 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 17D6 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 17D6 × 0020 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 17D6 × 0308 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 17D6 ÷ AC01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 17D6 × 0020 ÷ AC01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 17D6 × 0308 ÷ AC01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 17D6 ÷ 05D0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 17D6 × 0020 ÷ 05D0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 17D6 × 0308 ÷ 05D0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 17D6 × 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 17D6 × 0020 ÷ 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 17D6 × 0308 × 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 002D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 17D6 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 17D6 × 0020 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 17D6 × 0308 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 17D6 × 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 17D6 × 0020 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 17D6 × 0308 × 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 17D6 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] COMMA (IS) ÷ [0.3]
-× 17D6 × 0020 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 17D6 × 0308 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 002C ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 17D6 ÷ 1100 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 17D6 × 0020 ÷ 1100 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 17D6 × 0308 ÷ 1100 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 17D6 ÷ 11A8 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 17D6 × 0020 ÷ 11A8 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 17D6 × 0308 ÷ 11A8 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 17D6 ÷ 1160 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 17D6 × 0020 ÷ 1160 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 17D6 × 0308 ÷ 1160 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 17D6 × 000A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 17D6 × 0020 × 000A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 17D6 × 0308 × 000A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 000A ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 17D6 × 0085 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 17D6 × 0020 × 0085 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 17D6 × 0308 × 0085 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 0085 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 17D6 × 17D6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 17D6 × 0020 ÷ 17D6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 17D6 × 0308 × 17D6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 17D6 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 17D6 × 0020 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 17D6 × 0308 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 17D6 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 17D6 × 0020 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 17D6 × 0308 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 17D6 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 17D6 × 0020 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 17D6 × 0308 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 17D6 ÷ 0024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 17D6 × 0020 ÷ 0024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 17D6 × 0308 ÷ 0024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 17D6 × 0022 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 17D6 × 0020 ÷ 0022 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 17D6 × 0308 × 0022 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 17D6 × 0020 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [0.3]
-× 17D6 × 0020 × 0020 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 0020 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 17D6 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 17D6 × 0020 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 17D6 × 0308 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 002F ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 17D6 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 17D6 × 0020 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 17D6 × 0308 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 2060 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 17D6 × 200B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 17D6 × 0020 × 200B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 17D6 × 0308 × 200B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 200B ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 17D6 ÷ 1F1E6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 17D6 × 0020 ÷ 1F1E6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 17D6 × 0308 ÷ 1F1E6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 17D6 ÷ 261D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 17D6 × 0020 ÷ 261D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 17D6 × 0308 ÷ 261D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 261D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 17D6 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 17D6 × 0020 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 17D6 × 0308 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 17D6 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 17D6 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 17D6 × 0308 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 17D6 × 0308 × 0020 × 0029 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 17D6 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 17D6 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 17D6 × 0308 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 17D6 × 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 17D6 × 0020 ÷ 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 17D6 × 0308 × 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 17D6 × 200D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 17D6 × 0020 ÷ 200D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 17D6 × 0308 × 200D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 200D ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 17D6 ÷ 00A7 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 17D6 × 0020 ÷ 00A7 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 17D6 × 0308 ÷ 00A7 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 17D6 ÷ 50005 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 17D6 × 0020 ÷ 50005 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 17D6 × 0308 ÷ 50005 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 17D6 ÷ 0E01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 17D6 × 0020 ÷ 0E01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 17D6 × 0308 ÷ 0E01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 17D6 × 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 17D6 × 0020 ÷ 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 17D6 × 0308 × 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 17D6 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] KHMER SIGN CAMNUC PII KUUH (NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0030 × 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [23.03] NUMBER SIGN (AL) ÷ [0.3]
-× 0030 × 0020 ÷ 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0030 × 0308 × 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] NUMBER SIGN (AL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0030 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0030 × 0020 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0030 × 0308 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0030 × 0009 ÷ # × [0.3] DIGIT ZERO (NU) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0030 × 0020 ÷ 0009 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0030 × 0308 × 0009 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0030 ÷ 00B4 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0030 × 0020 ÷ 00B4 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0030 × 0308 ÷ 00B4 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0030 × 000B ÷ # × [0.3] DIGIT ZERO (NU) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0030 × 0020 × 000B ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0030 × 0308 × 000B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0030 × 0308 × 0020 × 000B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0030 ÷ FFFC ÷ # × [0.3] DIGIT ZERO (NU) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0030 × 0020 ÷ FFFC ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0030 × 0308 ÷ FFFC ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0030 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0030 × 0020 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0030 × 0308 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0030 × 0308 × 0020 × 007D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0030 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0030 × 0020 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0030 × 0308 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0030 × 0308 × 0020 × 000D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0030 × 0021 ÷ # × [0.3] DIGIT ZERO (NU) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0030 × 0020 × 0021 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0030 × 0308 × 0021 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0030 × 0308 × 0020 × 0021 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0030 × 00A0 ÷ # × [0.3] DIGIT ZERO (NU) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0030 × 0020 ÷ 00A0 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0030 × 0308 × 00A0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0030 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0030 × 0020 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0030 × 0308 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0030 ÷ AC01 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0030 × 0020 ÷ AC01 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0030 × 0308 ÷ AC01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0030 × 05D0 ÷ # × [0.3] DIGIT ZERO (NU) × [23.03] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0030 × 0020 ÷ 05D0 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0030 × 0308 × 05D0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0030 × 002D ÷ # × [0.3] DIGIT ZERO (NU) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0030 × 0020 ÷ 002D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0030 × 0308 × 002D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 002D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0030 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0030 × 0020 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0030 × 0308 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0030 × 0020 ÷ 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0030 × 0308 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0030 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [25.03] COMMA (IS) ÷ [0.3]
-× 0030 × 0020 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0030 × 0308 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.03] COMMA (IS) ÷ [0.3]
-× 0030 × 0308 × 0020 × 002C ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0030 ÷ 1100 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0030 × 0020 ÷ 1100 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0030 × 0308 ÷ 1100 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0030 ÷ 11A8 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0030 × 0020 ÷ 11A8 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0030 × 0308 ÷ 11A8 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0030 ÷ 1160 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0030 × 0020 ÷ 1160 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0030 × 0308 ÷ 1160 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0030 × 000A ÷ # × [0.3] DIGIT ZERO (NU) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0030 × 0020 × 000A ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0030 × 0308 × 000A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0030 × 0308 × 0020 × 000A ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0030 × 0085 ÷ # × [0.3] DIGIT ZERO (NU) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0030 × 0020 × 0085 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0030 × 0308 × 0085 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0030 × 0308 × 0020 × 0085 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0030 × 17D6 ÷ # × [0.3] DIGIT ZERO (NU) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0030 × 0020 ÷ 17D6 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0030 × 0308 × 17D6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0030 × 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [25.03] DIGIT ZERO (NU) ÷ [0.3]
-× 0030 × 0020 ÷ 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0030 × 0308 × 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.03] DIGIT ZERO (NU) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0030 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0030 × 0020 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0030 × 0308 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0030 × 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [25.05] PERCENT SIGN (PO) ÷ [0.3]
-× 0030 × 0020 ÷ 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0030 × 0308 × 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.05] PERCENT SIGN (PO) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0030 × 0024 ÷ # × [0.3] DIGIT ZERO (NU) × [25.05] DOLLAR SIGN (PR) ÷ [0.3]
-× 0030 × 0020 ÷ 0024 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0030 × 0308 × 0024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.05] DOLLAR SIGN (PR) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0030 × 0022 ÷ # × [0.3] DIGIT ZERO (NU) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0030 × 0020 ÷ 0022 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0030 × 0308 × 0022 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0030 × 0020 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [0.3]
-× 0030 × 0020 × 0020 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0030 × 0308 × 0020 × 0020 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0030 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [25.03] SOLIDUS (SY) ÷ [0.3]
-× 0030 × 0020 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0030 × 0308 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.03] SOLIDUS (SY) ÷ [0.3]
-× 0030 × 0308 × 0020 × 002F ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0030 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0030 × 0020 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0030 × 0308 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0030 × 0308 × 0020 × 2060 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0030 × 200B ÷ # × [0.3] DIGIT ZERO (NU) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0030 × 0020 × 200B ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0030 × 0308 × 200B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0030 × 0308 × 0020 × 200B ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0030 ÷ 1F1E6 ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0030 × 0020 ÷ 1F1E6 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0030 × 0308 ÷ 1F1E6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0030 ÷ 261D ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0030 × 0020 ÷ 261D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0030 × 0308 ÷ 261D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 261D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0030 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0030 × 0020 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0030 × 0308 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0030 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0030 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0030 × 0308 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0030 × 0308 × 0020 × 0029 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0030 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0030 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0030 × 0308 × 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0030 × 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0030 × 0020 ÷ 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0030 × 0308 × 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0030 × 200D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0030 × 0020 ÷ 200D ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0030 × 0308 × 200D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 200D ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0030 × 00A7 ÷ # × [0.3] DIGIT ZERO (NU) × [23.03] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0030 × 0020 ÷ 00A7 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0030 × 0308 × 00A7 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0030 × 50005 ÷ # × [0.3] DIGIT ZERO (NU) × [23.03] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0030 × 0020 ÷ 50005 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0030 × 0308 × 50005 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0030 × 0E01 ÷ # × [0.3] DIGIT ZERO (NU) × [23.03] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0030 × 0020 ÷ 0E01 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0030 × 0308 × 0E01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0030 × 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0030 × 0020 ÷ 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0030 × 0308 × 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0030 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] DIGIT ZERO (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2329 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2329 × 0020 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2329 × 0308 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2329 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 2329 × 0020 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 2329 × 0308 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EM DASH (B2) ÷ [0.3]
-× 2329 × 0308 × 0020 × 2014 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 2329 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2329 × 0020 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2329 × 0308 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0009 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2329 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2329 × 0020 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2329 × 0308 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2329 × 0308 × 0020 × 00B4 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2329 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2329 × 0020 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2329 × 0308 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2329 × 0308 × 0020 × 000B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2329 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2329 × 0020 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2329 × 0308 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2329 × 0308 × 0020 × FFFC ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2329 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2329 × 0020 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2329 × 0308 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2329 × 0308 × 0020 × 007D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2329 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2329 × 0020 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2329 × 0308 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2329 × 0308 × 0020 × 000D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2329 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2329 × 0020 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2329 × 0308 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0021 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2329 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2329 × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2329 × 0308 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2329 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2329 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2329 × 0020 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2329 × 0308 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2329 × 0308 × 0020 × AC00 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2329 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2329 × 0020 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2329 × 0308 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2329 × 0308 × 0020 × AC01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2329 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2329 × 0020 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2329 × 0308 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2329 × 0308 × 0020 × 05D0 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2329 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2329 × 0020 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2329 × 0308 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2329 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2329 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] WATCH (ID) ÷ [0.3]
-× 2329 × 0020 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
-× 2329 × 0308 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WATCH (ID) ÷ [0.3]
-× 2329 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
-× 2329 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2329 × 0020 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2329 × 0308 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2329 × 0308 × 0020 × 2024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2329 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2329 × 0020 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2329 × 0308 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 2329 × 0308 × 0020 × 002C ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2329 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2329 × 0020 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2329 × 0308 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2329 × 0308 × 0020 × 1100 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2329 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2329 × 0020 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2329 × 0308 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2329 × 0308 × 0020 × 11A8 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2329 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2329 × 0020 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2329 × 0308 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2329 × 0308 × 0020 × 1160 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2329 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2329 × 0020 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2329 × 0308 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2329 × 0308 × 0020 × 000A ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2329 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2329 × 0020 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2329 × 0308 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2329 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2329 × 0020 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2329 × 0308 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2329 × 0308 × 0020 × 17D6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2329 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2329 × 0020 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2329 × 0308 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0030 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2329 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2329 × 0020 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2329 × 0308 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2329 × 0308 × 0020 × 2329 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2329 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2329 × 0020 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2329 × 0308 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0025 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2329 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2329 × 0020 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2329 × 0308 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0024 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2329 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2329 × 0020 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2329 × 0308 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0022 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2329 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2329 × 0020 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2329 × 0308 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0020 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2329 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2329 × 0020 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2329 × 0308 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 2329 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2329 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2329 × 0020 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2329 × 0308 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2329 × 0308 × 0020 × 2060 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2329 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2329 × 0020 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2329 × 0308 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2329 × 0308 × 0020 × 200B ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2329 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2329 × 0020 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2329 × 0308 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2329 × 0308 × 0020 × 1F1E6 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2329 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2329 × 0020 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2329 × 0308 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2329 × 0308 × 0020 × 261D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2329 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2329 × 0020 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2329 × 0308 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2329 × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2329 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2329 × 0020 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2329 × 0308 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0029 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2329 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2329 × 0020 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2329 × 0308 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0028 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2329 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2329 × 0020 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2329 × 0308 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0001 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2329 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2329 × 0020 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2329 × 0308 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2329 × 0308 × 0020 × 200D ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2329 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2329 × 0020 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2329 × 0308 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2329 × 0308 × 0020 × 00A7 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2329 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2329 × 0020 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2329 × 0308 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2329 × 0308 × 0020 × 50005 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2329 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2329 × 0020 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2329 × 0308 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2329 × 0308 × 0020 × 0E01 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2329 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2329 × 0020 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2329 × 0308 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2329 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT-POINTING ANGLE BRACKET (OP) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0025 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0025 × 0020 ÷ 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0025 × 0308 × 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0025 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0025 × 0020 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0025 × 0308 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0025 × 0009 ÷ # × [0.3] PERCENT SIGN (PO) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0025 × 0020 ÷ 0009 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0025 × 0308 × 0009 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0025 ÷ 00B4 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0025 × 0020 ÷ 00B4 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0025 × 0308 ÷ 00B4 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0025 × 000B ÷ # × [0.3] PERCENT SIGN (PO) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0025 × 0020 × 000B ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0025 × 0308 × 000B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0025 × 0308 × 0020 × 000B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0025 ÷ FFFC ÷ # × [0.3] PERCENT SIGN (PO) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0025 × 0020 ÷ FFFC ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0025 × 0308 ÷ FFFC ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0025 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0025 × 0020 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0025 × 0308 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0025 × 0308 × 0020 × 007D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0025 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0025 × 0020 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0025 × 0308 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0025 × 0308 × 0020 × 000D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0025 × 0021 ÷ # × [0.3] PERCENT SIGN (PO) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0025 × 0020 × 0021 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0025 × 0308 × 0021 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0025 × 0308 × 0020 × 0021 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0025 × 00A0 ÷ # × [0.3] PERCENT SIGN (PO) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0025 × 0020 ÷ 00A0 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0025 × 0308 × 00A0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0025 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0025 × 0020 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0025 × 0308 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0025 ÷ AC01 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0025 × 0020 ÷ AC01 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0025 × 0308 ÷ AC01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0025 × 05D0 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0025 × 0020 ÷ 05D0 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0025 × 0308 × 05D0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0025 × 002D ÷ # × [0.3] PERCENT SIGN (PO) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0025 × 0020 ÷ 002D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0025 × 0308 × 002D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 002D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0025 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0025 × 0020 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0025 × 0308 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 231A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0025 × 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0025 × 0020 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0025 × 0308 × 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0025 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] COMMA (IS) ÷ [0.3]
-× 0025 × 0020 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0025 × 0308 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0025 × 0308 × 0020 × 002C ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0025 ÷ 1100 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0025 × 0020 ÷ 1100 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0025 × 0308 ÷ 1100 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0025 ÷ 11A8 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0025 × 0020 ÷ 11A8 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0025 × 0308 ÷ 11A8 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0025 ÷ 1160 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0025 × 0020 ÷ 1160 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0025 × 0308 ÷ 1160 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0025 × 000A ÷ # × [0.3] PERCENT SIGN (PO) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0025 × 0020 × 000A ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0025 × 0308 × 000A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0025 × 0308 × 0020 × 000A ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0025 × 0085 ÷ # × [0.3] PERCENT SIGN (PO) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0025 × 0020 × 0085 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0025 × 0308 × 0085 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0025 × 0308 × 0020 × 0085 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0025 × 17D6 ÷ # × [0.3] PERCENT SIGN (PO) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0025 × 0020 ÷ 17D6 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0025 × 0308 × 17D6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0025 × 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
-× 0025 × 0020 ÷ 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0025 × 0308 × 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0025 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0025 × 0020 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0025 × 0308 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0025 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0025 × 0020 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0025 × 0308 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0025 ÷ 0024 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0025 × 0020 ÷ 0024 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0025 × 0308 ÷ 0024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0025 × 0022 ÷ # × [0.3] PERCENT SIGN (PO) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0025 × 0020 ÷ 0022 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0025 × 0308 × 0022 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0025 × 0020 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [0.3]
-× 0025 × 0020 × 0020 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0025 × 0308 × 0020 × 0020 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0025 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0025 × 0020 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0025 × 0308 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0025 × 0308 × 0020 × 002F ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0025 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0025 × 0020 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0025 × 0308 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0025 × 0308 × 0020 × 2060 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0025 × 200B ÷ # × [0.3] PERCENT SIGN (PO) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0025 × 0020 × 200B ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0025 × 0308 × 200B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0025 × 0308 × 0020 × 200B ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0025 ÷ 1F1E6 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0025 × 0020 ÷ 1F1E6 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0025 × 0308 ÷ 1F1E6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0025 ÷ 261D ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0025 × 0020 ÷ 261D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0025 × 0308 ÷ 261D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 261D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0025 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0025 × 0020 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0025 × 0308 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0025 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0025 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0025 × 0308 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0025 × 0308 × 0020 × 0029 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0025 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0025 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0025 × 0308 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0025 × 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0025 × 0020 ÷ 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0025 × 0308 × 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0025 × 200D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0025 × 0020 ÷ 200D ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0025 × 0308 × 200D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 200D ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0025 × 00A7 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0025 × 0020 ÷ 00A7 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0025 × 0308 × 00A7 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0025 × 50005 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0025 × 0020 ÷ 50005 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0025 × 0308 × 50005 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0025 × 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0025 × 0020 ÷ 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0025 × 0308 × 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0025 × 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0025 × 0020 ÷ 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0025 × 0308 × 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0025 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] PERCENT SIGN (PO) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0024 × 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0024 × 0020 ÷ 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0024 × 0308 × 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0024 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0024 × 0020 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0024 × 0308 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0024 × 0009 ÷ # × [0.3] DOLLAR SIGN (PR) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0024 × 0020 ÷ 0009 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0024 × 0308 × 0009 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0024 ÷ 00B4 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0024 × 0020 ÷ 00B4 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0024 × 0308 ÷ 00B4 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0024 × 000B ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0024 × 0020 × 000B ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0024 × 0308 × 000B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0024 × 0308 × 0020 × 000B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0024 ÷ FFFC ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0024 × 0020 ÷ FFFC ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0024 × 0308 ÷ FFFC ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0024 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0024 × 0020 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0024 × 0308 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0024 × 0308 × 0020 × 007D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0024 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0024 × 0020 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0024 × 0308 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0024 × 0308 × 0020 × 000D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0024 × 0021 ÷ # × [0.3] DOLLAR SIGN (PR) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0024 × 0020 × 0021 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0024 × 0308 × 0021 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0024 × 0308 × 0020 × 0021 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0024 × 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0024 × 0020 ÷ 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0024 × 0308 × 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0024 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0024 × 0020 ÷ AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0024 × 0308 × AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0024 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0024 × 0020 ÷ AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0024 × 0308 × AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0024 × 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0024 × 0020 ÷ 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0024 × 0308 × 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0024 × 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0024 × 0020 ÷ 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0024 × 0308 × 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 002D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0024 × 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] WATCH (ID) ÷ [0.3]
-× 0024 × 0020 ÷ 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0024 × 0308 × 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] WATCH (ID) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 231A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0024 × 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0024 × 0020 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0024 × 0308 × 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0024 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] COMMA (IS) ÷ [0.3]
-× 0024 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0024 × 0308 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0024 × 0308 × 0020 × 002C ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0024 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0024 × 0020 ÷ 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0024 × 0308 × 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0024 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0024 × 0020 ÷ 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0024 × 0308 × 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0024 × 0020 ÷ 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0024 × 0308 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [27.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0024 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0024 × 0020 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0024 × 0308 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0024 × 0308 × 0020 × 000A ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0024 × 0085 ÷ # × [0.3] DOLLAR SIGN (PR) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0024 × 0020 × 0085 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0024 × 0308 × 0085 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0024 × 0308 × 0020 × 0085 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0024 × 17D6 ÷ # × [0.3] DOLLAR SIGN (PR) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0024 × 0020 ÷ 17D6 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0024 × 0308 × 17D6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0024 × 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
-× 0024 × 0020 ÷ 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0024 × 0308 × 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [25.01] DIGIT ZERO (NU) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0024 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0024 × 0020 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0024 × 0308 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0024 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0024 × 0020 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0024 × 0308 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0024 ÷ 0024 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0024 × 0020 ÷ 0024 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0024 × 0308 ÷ 0024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0024 × 0022 ÷ # × [0.3] DOLLAR SIGN (PR) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0024 × 0020 ÷ 0022 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0024 × 0308 × 0022 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0024 × 0020 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [0.3]
-× 0024 × 0020 × 0020 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0024 × 0308 × 0020 × 0020 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0024 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0024 × 0020 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0024 × 0308 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0024 × 0308 × 0020 × 002F ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0024 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0024 × 0020 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0024 × 0308 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0024 × 0308 × 0020 × 2060 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0024 × 200B ÷ # × [0.3] DOLLAR SIGN (PR) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0024 × 0020 × 200B ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0024 × 0308 × 200B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0024 × 0308 × 0020 × 200B ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0024 ÷ 1F1E6 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0024 × 0020 ÷ 1F1E6 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0024 × 0308 ÷ 1F1E6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0024 × 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0024 × 0020 ÷ 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0024 × 0308 × 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0024 × 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0024 × 0020 ÷ 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0024 × 0308 × 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.12] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0024 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0024 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0024 × 0308 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0024 × 0308 × 0020 × 0029 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0024 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0024 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0024 × 0308 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0024 × 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0024 × 0020 ÷ 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0024 × 0308 × 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0024 × 200D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0024 × 0020 ÷ 200D ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0024 × 0308 × 200D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 200D ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0024 × 00A7 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0024 × 0020 ÷ 00A7 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0024 × 0308 × 00A7 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0024 × 50005 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0024 × 0020 ÷ 50005 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0024 × 0308 × 50005 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0024 × 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0024 × 0020 ÷ 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0024 × 0308 × 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0024 × 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0024 × 0020 ÷ 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0024 × 0308 × 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0024 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] DOLLAR SIGN (PR) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0022 × 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0022 × 0020 ÷ 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0022 × 0308 × 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0022 × 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] EM DASH (B2) ÷ [0.3]
-× 0022 × 0020 ÷ 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0022 × 0308 × 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] EM DASH (B2) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0022 × 0009 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0022 × 0020 ÷ 0009 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0022 × 0308 × 0009 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0022 × 00B4 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] ACUTE ACCENT (BB) ÷ [0.3]
-× 0022 × 0020 ÷ 00B4 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0022 × 0308 × 00B4 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] ACUTE ACCENT (BB) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0022 × 000B ÷ # × [0.3] QUOTATION MARK (QU) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0022 × 0020 × 000B ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0022 × 0308 × 000B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0022 × 0308 × 0020 × 000B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0022 × FFFC ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0022 × 0020 ÷ FFFC ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0022 × 0308 × FFFC ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0022 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0022 × 0020 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0022 × 0308 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0022 × 0308 × 0020 × 007D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0022 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0022 × 0020 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0022 × 0308 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0022 × 0308 × 0020 × 000D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0022 × 0021 ÷ # × [0.3] QUOTATION MARK (QU) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0022 × 0020 × 0021 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0022 × 0308 × 0021 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0021 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0022 × 00A0 ÷ # × [0.3] QUOTATION MARK (QU) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0022 × 0020 ÷ 00A0 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0022 × 0308 × 00A0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0022 × AC00 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0022 × 0020 ÷ AC00 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0022 × 0308 × AC00 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0022 × AC01 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0022 × 0020 ÷ AC01 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0022 × 0308 × AC01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0022 × 05D0 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0022 × 0020 ÷ 05D0 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0022 × 0308 × 05D0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0022 × 002D ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0022 × 0020 ÷ 002D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0022 × 0308 × 002D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 002D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0022 × 231A ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] WATCH (ID) ÷ [0.3]
-× 0022 × 0020 ÷ 231A ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0022 × 0308 × 231A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] WATCH (ID) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 231A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0022 × 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] ONE DOT LEADER (IN) ÷ [0.3]
-× 0022 × 0020 ÷ 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0022 × 0308 × 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] ONE DOT LEADER (IN) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0022 × 002C ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] COMMA (IS) ÷ [0.3]
-× 0022 × 0020 × 002C ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0022 × 0308 × 002C ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0022 × 0308 × 0020 × 002C ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0022 × 1100 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0022 × 0020 ÷ 1100 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0022 × 0308 × 1100 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0022 × 11A8 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0022 × 0020 ÷ 11A8 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0022 × 0308 × 11A8 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0022 × 1160 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0022 × 0020 ÷ 1160 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0022 × 0308 × 1160 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0022 × 000A ÷ # × [0.3] QUOTATION MARK (QU) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0022 × 0020 × 000A ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0022 × 0308 × 000A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0022 × 0308 × 0020 × 000A ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0022 × 0085 ÷ # × [0.3] QUOTATION MARK (QU) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0022 × 0020 × 0085 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0022 × 0308 × 0085 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0085 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0022 × 17D6 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0022 × 0020 ÷ 17D6 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0022 × 0308 × 17D6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0022 × 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0022 × 0020 ÷ 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0022 × 0308 × 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0022 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0022 × 0020 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0022 × 0308 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0022 × 0308 × 0020 × 2329 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0022 × 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
-× 0022 × 0020 ÷ 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0022 × 0308 × 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] PERCENT SIGN (PO) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0022 × 0024 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] DOLLAR SIGN (PR) ÷ [0.3]
-× 0022 × 0020 ÷ 0024 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0022 × 0308 × 0024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] DOLLAR SIGN (PR) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0022 × 0022 ÷ # × [0.3] QUOTATION MARK (QU) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0022 × 0020 ÷ 0022 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0022 × 0308 × 0022 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0022 × 0020 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [0.3]
-× 0022 × 0020 × 0020 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0020 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0022 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0022 × 0020 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0022 × 0308 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0022 × 0308 × 0020 × 002F ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0022 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0022 × 0020 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0022 × 0308 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0022 × 0308 × 0020 × 2060 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0022 × 200B ÷ # × [0.3] QUOTATION MARK (QU) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0022 × 0020 × 200B ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0022 × 0308 × 200B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0022 × 0308 × 0020 × 200B ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0022 × 1F1E6 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0022 × 0020 ÷ 1F1E6 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0022 × 0308 × 1F1E6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0022 × 261D ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0022 × 0020 ÷ 261D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0022 × 0308 × 261D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 261D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0022 × 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0022 × 0020 ÷ 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0022 × 0308 × 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0022 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0022 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0022 × 0308 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0029 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0022 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0022 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0022 × 0308 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0022 × 0308 × 0020 × 0028 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0022 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0022 × 0020 ÷ 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0022 × 0308 × 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0022 × 200D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0022 × 0020 ÷ 200D ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0022 × 0308 × 200D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 200D ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0022 × 00A7 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0022 × 0020 ÷ 00A7 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0022 × 0308 × 00A7 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0022 × 50005 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0022 × 0020 ÷ 50005 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0022 × 0308 × 50005 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0022 × 0E01 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0022 × 0020 ÷ 0E01 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0022 × 0308 × 0E01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0022 × 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [19.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0022 × 0020 ÷ 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0022 × 0308 × 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0022 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0020 ÷ 0023 ÷ # × [0.3] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0020 × 0020 ÷ 0023 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0023 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0020 ÷ 2014 ÷ # × [0.3] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0020 × 0020 ÷ 2014 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 2014 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0020 ÷ 0009 ÷ # × [0.3] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0020 × 0020 ÷ 0009 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0020 ÷ 0308 × 0009 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0020 ÷ 00B4 ÷ # × [0.3] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0020 × 0020 ÷ 00B4 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 00B4 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0020 × 000B ÷ # × [0.3] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0020 × 0020 × 000B ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0020 ÷ 0308 × 000B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 000B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0020 ÷ FFFC ÷ # × [0.3] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0020 × 0020 ÷ FFFC ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0020 ÷ 0308 ÷ FFFC ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0020 × 007D ÷ # × [0.3] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0020 × 0020 × 007D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0020 ÷ 0308 × 007D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 007D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0020 × 000D ÷ # × [0.3] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0020 × 0020 × 000D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0020 ÷ 0308 × 000D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 000D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0020 × 0021 ÷ # × [0.3] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0020 × 0020 × 0021 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0020 ÷ 0308 × 0021 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 0021 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0020 ÷ 00A0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0020 × 0020 ÷ 00A0 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0020 ÷ 0308 × 00A0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0020 ÷ AC00 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0020 × 0020 ÷ AC00 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0020 ÷ 0308 ÷ AC00 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0020 ÷ AC01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0020 × 0020 ÷ AC01 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0020 ÷ 0308 ÷ AC01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0020 ÷ 05D0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0020 × 0020 ÷ 05D0 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0020 ÷ 0308 × 05D0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0020 ÷ 002D ÷ # × [0.3] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0020 × 0020 ÷ 002D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0020 ÷ 0308 × 002D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0020 × 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0020 × 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0020 ÷ 0308 × 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0020 × 002C ÷ # × [0.3] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0020 × 0020 × 002C ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0020 ÷ 0308 × 002C ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 002C ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0020 ÷ 1100 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0020 × 0020 ÷ 1100 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 1100 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0020 ÷ 11A8 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0020 × 0020 ÷ 11A8 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 11A8 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0020 ÷ 1160 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0020 × 0020 ÷ 1160 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 1160 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0020 × 000A ÷ # × [0.3] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0020 × 0020 × 000A ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0020 ÷ 0308 × 000A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 000A ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0020 × 0085 ÷ # × [0.3] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0020 × 0020 × 0085 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0020 ÷ 0308 × 0085 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 0085 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0020 ÷ 17D6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0020 × 0020 ÷ 17D6 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0020 ÷ 0308 × 17D6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0020 × 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0020 ÷ 0308 × 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0020 × 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0020 × 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0020 ÷ 0308 × 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0020 ÷ 0024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0020 × 0020 ÷ 0024 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0020 ÷ 0308 × 0024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0020 ÷ 0022 ÷ # × [0.3] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0020 × 0020 ÷ 0022 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0020 ÷ 0308 × 0022 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0020 × 0020 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0020 × 0020 × 0020 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 0020 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0020 × 002F ÷ # × [0.3] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0020 × 0020 × 002F ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0020 ÷ 0308 × 002F ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 002F ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0020 × 2060 ÷ # × [0.3] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0020 × 0020 × 2060 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0020 ÷ 0308 × 2060 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 2060 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0020 × 200B ÷ # × [0.3] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0020 × 0020 × 200B ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0020 ÷ 0308 × 200B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 200B ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0020 ÷ 1F1E6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0020 × 0020 ÷ 1F1E6 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0020 ÷ 261D ÷ # × [0.3] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0020 × 0020 ÷ 261D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 261D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0020 × 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0020 ÷ 0308 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0020 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0020 ÷ 0308 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 × 0029 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0020 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0020 ÷ 0308 × 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0020 × 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0020 ÷ 0308 × 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0020 ÷ 200D ÷ # × [0.3] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0020 × 0020 ÷ 200D ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0020 ÷ 0308 × 200D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0020 ÷ 00A7 ÷ # × [0.3] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0020 × 0020 ÷ 00A7 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 00A7 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0020 ÷ 50005 ÷ # × [0.3] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0020 × 0020 ÷ 50005 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 50005 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0020 ÷ 0E01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0020 × 0020 ÷ 0E01 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0E01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0020 ÷ 3041 ÷ # × [0.3] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0020 × 0020 ÷ 3041 ÷ # × [0.3] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0020 ÷ 0308 × 3041 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0020 ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002F ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002F × 0020 ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002F × 0308 ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0023 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 002F ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 002F × 0020 ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 002F × 0308 ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 2014 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 002F × 0009 ÷ # × [0.3] SOLIDUS (SY) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002F × 0020 ÷ 0009 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002F × 0308 × 0009 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0009 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 002F ÷ 00B4 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002F × 0020 ÷ 00B4 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002F × 0308 ÷ 00B4 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 002F × 000B ÷ # × [0.3] SOLIDUS (SY) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002F × 0020 × 000B ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002F × 0308 × 000B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002F × 0308 × 0020 × 000B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 002F ÷ FFFC ÷ # × [0.3] SOLIDUS (SY) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002F × 0020 ÷ FFFC ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002F × 0308 ÷ FFFC ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ FFFC ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 002F × 007D ÷ # × [0.3] SOLIDUS (SY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002F × 0020 × 007D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002F × 0308 × 007D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002F × 0308 × 0020 × 007D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 002F × 000D ÷ # × [0.3] SOLIDUS (SY) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002F × 0020 × 000D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002F × 0308 × 000D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002F × 0308 × 0020 × 000D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 002F × 0021 ÷ # × [0.3] SOLIDUS (SY) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002F × 0020 × 0021 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002F × 0308 × 0021 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002F × 0308 × 0020 × 0021 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 002F × 00A0 ÷ # × [0.3] SOLIDUS (SY) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002F × 0020 ÷ 00A0 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002F × 0308 × 00A0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 002F ÷ AC00 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002F × 0020 ÷ AC00 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002F × 0308 ÷ AC00 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ AC00 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 002F ÷ AC01 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002F × 0020 ÷ AC01 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002F × 0308 ÷ AC01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ AC01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 002F × 05D0 ÷ # × [0.3] SOLIDUS (SY) × [21.2] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002F × 0020 ÷ 05D0 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002F × 0308 × 05D0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.2] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 002F × 002D ÷ # × [0.3] SOLIDUS (SY) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002F × 0020 ÷ 002D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002F × 0308 × 002D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 002D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 002F ÷ 231A ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002F × 0020 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002F × 0308 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 231A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 002F × 2024 ÷ # × [0.3] SOLIDUS (SY) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002F × 0020 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002F × 0308 × 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 2024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 002F × 002C ÷ # × [0.3] SOLIDUS (SY) × [13.02] COMMA (IS) ÷ [0.3]
-× 002F × 0020 × 002C ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 002F × 0308 × 002C ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 002F × 0308 × 0020 × 002C ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 002F ÷ 1100 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002F × 0020 ÷ 1100 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002F × 0308 ÷ 1100 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 1100 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 002F ÷ 11A8 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002F × 0020 ÷ 11A8 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002F × 0308 ÷ 11A8 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 002F ÷ 1160 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002F × 0020 ÷ 1160 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002F × 0308 ÷ 1160 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 1160 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 002F × 000A ÷ # × [0.3] SOLIDUS (SY) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002F × 0020 × 000A ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002F × 0308 × 000A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002F × 0308 × 0020 × 000A ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 002F × 0085 ÷ # × [0.3] SOLIDUS (SY) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002F × 0020 × 0085 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002F × 0308 × 0085 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002F × 0308 × 0020 × 0085 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 002F × 17D6 ÷ # × [0.3] SOLIDUS (SY) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002F × 0020 ÷ 17D6 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002F × 0308 × 17D6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 002F ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002F × 0020 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002F × 0308 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0030 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 002F ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002F × 0020 ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002F × 0308 ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 2329 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 002F ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002F × 0020 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002F × 0308 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0025 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 002F ÷ 0024 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002F × 0020 ÷ 0024 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002F × 0308 ÷ 0024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0024 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 002F × 0022 ÷ # × [0.3] SOLIDUS (SY) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 002F × 0020 ÷ 0022 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 002F × 0308 × 0022 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0022 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 002F × 0020 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [0.3]
-× 002F × 0020 × 0020 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 002F × 0308 × 0020 × 0020 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 002F × 002F ÷ # × [0.3] SOLIDUS (SY) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002F × 0020 × 002F ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002F × 0308 × 002F ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 002F × 0308 × 0020 × 002F ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 002F × 2060 ÷ # × [0.3] SOLIDUS (SY) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002F × 0020 × 2060 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002F × 0308 × 2060 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002F × 0308 × 0020 × 2060 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 002F × 200B ÷ # × [0.3] SOLIDUS (SY) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002F × 0020 × 200B ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002F × 0308 × 200B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002F × 0308 × 0020 × 200B ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 002F ÷ 1F1E6 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002F × 0020 ÷ 1F1E6 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002F × 0308 ÷ 1F1E6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 002F ÷ 261D ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002F × 0020 ÷ 261D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002F × 0308 ÷ 261D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 261D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 002F ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002F × 0020 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002F × 0308 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 002F × 0029 ÷ # × [0.3] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002F × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002F × 0308 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002F × 0308 × 0020 × 0029 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 002F ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002F × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002F × 0308 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 002F × 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002F × 0020 ÷ 0001 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002F × 0308 × 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0001 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 002F × 200D ÷ # × [0.3] SOLIDUS (SY) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002F × 0020 ÷ 200D ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002F × 0308 × 200D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 200D ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 002F ÷ 00A7 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002F × 0020 ÷ 00A7 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002F × 0308 ÷ 00A7 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 002F ÷ 50005 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002F × 0020 ÷ 50005 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002F × 0308 ÷ 50005 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 50005 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 002F ÷ 0E01 ÷ # × [0.3] SOLIDUS (SY) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002F × 0020 ÷ 0E01 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002F × 0308 ÷ 0E01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 002F × 3041 ÷ # × [0.3] SOLIDUS (SY) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002F × 0020 ÷ 3041 ÷ # × [0.3] SOLIDUS (SY) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002F × 0308 × 3041 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 002F × 0308 × 0020 ÷ 3041 ÷ # × [0.3] SOLIDUS (SY) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2060 × 0023 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] NUMBER SIGN (AL) ÷ [0.3]
-× 2060 × 0020 ÷ 0023 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2060 × 0308 × 0023 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] NUMBER SIGN (AL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 2060 × 2014 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] EM DASH (B2) ÷ [0.3]
-× 2060 × 0020 ÷ 2014 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 2060 × 0308 × 2014 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] EM DASH (B2) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 2060 × 0009 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2060 × 0020 ÷ 0009 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2060 × 0308 × 0009 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 2060 × 00B4 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] ACUTE ACCENT (BB) ÷ [0.3]
-× 2060 × 0020 ÷ 00B4 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2060 × 0308 × 00B4 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] ACUTE ACCENT (BB) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 2060 × 000B ÷ # × [0.3] WORD JOINER (WJ) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2060 × 0020 × 000B ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2060 × 0308 × 000B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2060 × 0308 × 0020 × 000B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 2060 × FFFC ÷ # × [0.3] WORD JOINER (WJ) × [11.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2060 × 0020 ÷ FFFC ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2060 × 0308 × FFFC ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 2060 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [11.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2060 × 0020 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2060 × 0308 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2060 × 0308 × 0020 × 007D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 2060 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2060 × 0020 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2060 × 0308 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2060 × 0308 × 0020 × 000D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 2060 × 0021 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2060 × 0020 × 0021 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2060 × 0308 × 0021 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2060 × 0308 × 0020 × 0021 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 2060 × 00A0 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2060 × 0020 ÷ 00A0 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2060 × 0308 × 00A0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 2060 × AC00 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2060 × 0020 ÷ AC00 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2060 × 0308 × AC00 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 2060 × AC01 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2060 × 0020 ÷ AC01 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2060 × 0308 × AC01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 2060 × 05D0 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2060 × 0020 ÷ 05D0 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2060 × 0308 × 05D0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 2060 × 002D ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2060 × 0020 ÷ 002D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2060 × 0308 × 002D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 002D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 2060 × 231A ÷ # × [0.3] WORD JOINER (WJ) × [11.02] WATCH (ID) ÷ [0.3]
-× 2060 × 0020 ÷ 231A ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2060 × 0308 × 231A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] WATCH (ID) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 231A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 2060 × 2024 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] ONE DOT LEADER (IN) ÷ [0.3]
-× 2060 × 0020 ÷ 2024 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2060 × 0308 × 2024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] ONE DOT LEADER (IN) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2060 × 002C ÷ # × [0.3] WORD JOINER (WJ) × [11.02] COMMA (IS) ÷ [0.3]
-× 2060 × 0020 × 002C ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2060 × 0308 × 002C ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] COMMA (IS) ÷ [0.3]
-× 2060 × 0308 × 0020 × 002C ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 2060 × 1100 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2060 × 0020 ÷ 1100 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2060 × 0308 × 1100 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 2060 × 11A8 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2060 × 0020 ÷ 11A8 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2060 × 0308 × 11A8 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 2060 × 1160 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2060 × 0020 ÷ 1160 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2060 × 0308 × 1160 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 2060 × 000A ÷ # × [0.3] WORD JOINER (WJ) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2060 × 0020 × 000A ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2060 × 0308 × 000A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2060 × 0308 × 0020 × 000A ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 2060 × 0085 ÷ # × [0.3] WORD JOINER (WJ) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2060 × 0020 × 0085 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2060 × 0308 × 0085 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2060 × 0308 × 0020 × 0085 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 2060 × 17D6 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2060 × 0020 ÷ 17D6 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2060 × 0308 × 17D6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 2060 × 0030 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] DIGIT ZERO (NU) ÷ [0.3]
-× 2060 × 0020 ÷ 0030 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2060 × 0308 × 0030 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] DIGIT ZERO (NU) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 2060 × 2329 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2060 × 0020 ÷ 2329 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2060 × 0308 × 2329 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 2060 × 0025 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] PERCENT SIGN (PO) ÷ [0.3]
-× 2060 × 0020 ÷ 0025 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2060 × 0308 × 0025 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] PERCENT SIGN (PO) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 2060 × 0024 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] DOLLAR SIGN (PR) ÷ [0.3]
-× 2060 × 0020 ÷ 0024 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2060 × 0308 × 0024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] DOLLAR SIGN (PR) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 2060 × 0022 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] QUOTATION MARK (QU) ÷ [0.3]
-× 2060 × 0020 ÷ 0022 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2060 × 0308 × 0022 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] QUOTATION MARK (QU) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 2060 × 0020 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [0.3]
-× 2060 × 0020 × 0020 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 2060 × 0308 × 0020 × 0020 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 2060 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [11.02] SOLIDUS (SY) ÷ [0.3]
-× 2060 × 0020 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2060 × 0308 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] SOLIDUS (SY) ÷ [0.3]
-× 2060 × 0308 × 0020 × 002F ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 2060 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2060 × 0020 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2060 × 0308 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2060 × 0308 × 0020 × 2060 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2060 × 200B ÷ # × [0.3] WORD JOINER (WJ) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2060 × 0020 × 200B ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2060 × 0308 × 200B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2060 × 0308 × 0020 × 200B ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 2060 × 1F1E6 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2060 × 0020 ÷ 1F1E6 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2060 × 0308 × 1F1E6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 2060 × 261D ÷ # × [0.3] WORD JOINER (WJ) × [11.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2060 × 0020 ÷ 261D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2060 × 0308 × 261D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 261D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 2060 × 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [11.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2060 × 0020 ÷ 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2060 × 0308 × 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 2060 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2060 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2060 × 0308 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2060 × 0308 × 0020 × 0029 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 2060 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2060 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2060 × 0308 × 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 2060 × 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2060 × 0020 ÷ 0001 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2060 × 0308 × 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 2060 × 200D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2060 × 0020 ÷ 200D ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2060 × 0308 × 200D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 200D ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 2060 × 00A7 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2060 × 0020 ÷ 00A7 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2060 × 0308 × 00A7 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 2060 × 50005 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2060 × 0020 ÷ 50005 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2060 × 0308 × 50005 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 2060 × 0E01 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2060 × 0020 ÷ 0E01 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2060 × 0308 × 0E01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 2060 × 3041 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2060 × 0020 ÷ 3041 ÷ # × [0.3] WORD JOINER (WJ) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2060 × 0308 × 3041 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 2060 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] WORD JOINER (WJ) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 200B ÷ 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] NUMBER SIGN (AL) ÷ [0.3]
-× 200B × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] NUMBER SIGN (AL) ÷ [0.3]
-× 200B ÷ 0308 × 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 200B ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] EM DASH (B2) ÷ [0.3]
-× 200B × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] EM DASH (B2) ÷ [0.3]
-× 200B ÷ 0308 ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 200B ÷ 0009 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 200B × 0020 ÷ 0009 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 200B ÷ 0308 × 0009 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0009 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 200B ÷ 00B4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 200B × 0020 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 200B ÷ 0308 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 200B × 000B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 200B × 0020 × 000B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 200B ÷ 0308 × 000B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 000B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 200B ÷ FFFC ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 200B × 0020 ÷ FFFC ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 200B ÷ 0308 ÷ FFFC ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ FFFC ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 200B ÷ 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200B × 0020 ÷ 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200B ÷ 0308 × 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 007D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200B × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 200B × 0020 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 200B ÷ 0308 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 000D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 200B ÷ 0021 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] EXCLAMATION MARK (EX) ÷ [0.3]
-× 200B × 0020 ÷ 0021 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] EXCLAMATION MARK (EX) ÷ [0.3]
-× 200B ÷ 0308 × 0021 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 0021 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 200B ÷ 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200B × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200B ÷ 0308 × 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200B ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 200B × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 200B ÷ 0308 ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 200B ÷ AC01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 200B × 0020 ÷ AC01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 200B ÷ 0308 ÷ AC01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ AC01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 200B ÷ 05D0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 200B × 0020 ÷ 05D0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 200B ÷ 0308 × 05D0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 05D0 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 200B ÷ 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200B × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200B ÷ 0308 × 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200B ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] WATCH (ID) ÷ [0.3]
-× 200B × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] WATCH (ID) ÷ [0.3]
-× 200B ÷ 0308 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 200B ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200B × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200B ÷ 0308 × 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200B ÷ 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMMA (IS) ÷ [0.3]
-× 200B × 0020 ÷ 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] COMMA (IS) ÷ [0.3]
-× 200B ÷ 0308 × 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 002C ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 200B ÷ 1100 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 200B × 0020 ÷ 1100 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 200B ÷ 0308 ÷ 1100 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 1100 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 200B ÷ 11A8 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 200B × 0020 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 200B ÷ 0308 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 200B ÷ 1160 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 200B × 0020 ÷ 1160 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 200B ÷ 0308 ÷ 1160 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 1160 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 200B × 000A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 200B × 0020 × 000A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 200B ÷ 0308 × 000A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 000A ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 200B × 0085 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 200B × 0020 × 0085 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 200B ÷ 0308 × 0085 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 0085 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 200B ÷ 17D6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 200B × 0020 ÷ 17D6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 200B ÷ 0308 × 17D6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 17D6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 200B ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] DIGIT ZERO (NU) ÷ [0.3]
-× 200B × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] DIGIT ZERO (NU) ÷ [0.3]
-× 200B ÷ 0308 × 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 200B ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 200B × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 200B ÷ 0308 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 200B ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] PERCENT SIGN (PO) ÷ [0.3]
-× 200B × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] PERCENT SIGN (PO) ÷ [0.3]
-× 200B ÷ 0308 × 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 200B ÷ 0024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 200B × 0020 ÷ 0024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 200B ÷ 0308 × 0024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0024 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 200B ÷ 0022 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] QUOTATION MARK (QU) ÷ [0.3]
-× 200B × 0020 ÷ 0022 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] QUOTATION MARK (QU) ÷ [0.3]
-× 200B ÷ 0308 × 0022 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0022 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 200B × 0020 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [0.3]
-× 200B × 0020 × 0020 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 0020 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 200B ÷ 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] SOLIDUS (SY) ÷ [0.3]
-× 200B × 0020 ÷ 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] SOLIDUS (SY) ÷ [0.3]
-× 200B ÷ 0308 × 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 002F ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 200B ÷ 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] WORD JOINER (WJ) ÷ [0.3]
-× 200B × 0020 ÷ 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] WORD JOINER (WJ) ÷ [0.3]
-× 200B ÷ 0308 × 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 2060 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 200B × 200B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 200B × 0020 × 200B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 200B ÷ 0308 × 200B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 200B ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 200B ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 200B × 0020 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 200B ÷ 0308 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 200B ÷ 261D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 200B × 0020 ÷ 261D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 200B ÷ 0308 ÷ 261D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 261D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 200B ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 200B × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 200B ÷ 0308 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 200B ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 200B × 0020 ÷ 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 200B ÷ 0308 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 200B ÷ 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 200B ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 200B × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 200B ÷ 0308 × 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 200B ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 200B × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 200B ÷ 0308 × 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 200B ÷ 200D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 200B × 0020 ÷ 200D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 200B ÷ 0308 × 200D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 200D ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 200B ÷ 00A7 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 200B × 0020 ÷ 00A7 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 200B ÷ 0308 × 00A7 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 00A7 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 200B ÷ 50005 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 200B × 0020 ÷ 50005 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 200B ÷ 0308 × 50005 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 50005 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 200B ÷ 0E01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 200B × 0020 ÷ 0E01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 200B ÷ 0308 × 0E01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 0E01 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 200B ÷ 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 200B × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) × [7.01] SPACE (SP) ÷ [8.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 200B ÷ 0308 × 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 200B ÷ 0308 × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH SPACE (ZW) ÷ [8.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1F1E6 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1F1E6 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 1F1E6 × 0009 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0009 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1F1E6 × 0308 × 0009 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1F1E6 ÷ 00B4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 00B4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 00B4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1F1E6 × 000B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1F1E6 × 0020 × 000B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1F1E6 × 0308 × 000B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 000B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1F1E6 ÷ FFFC ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1F1E6 × 0020 ÷ FFFC ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1F1E6 × 0308 ÷ FFFC ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1F1E6 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F1E6 × 0020 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F1E6 × 0308 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 007D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F1E6 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1F1E6 × 0020 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1F1E6 × 0308 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 000D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1F1E6 × 0021 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1F1E6 × 0020 × 0021 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1F1E6 × 0308 × 0021 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 0021 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1F1E6 × 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1F1E6 × 0308 × 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1F1E6 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1F1E6 × 0020 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1F1E6 × 0308 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1F1E6 ÷ AC01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1F1E6 × 0020 ÷ AC01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1F1E6 × 0308 ÷ AC01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1F1E6 ÷ 05D0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 05D0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 05D0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F1E6 × 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F1E6 × 0308 × 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 002D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F1E6 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 231A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1F1E6 × 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F1E6 × 0308 × 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F1E6 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] COMMA (IS) ÷ [0.3]
-× 1F1E6 × 0020 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 1F1E6 × 0308 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 002C ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 1F1E6 ÷ 1100 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 1100 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 1100 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1F1E6 ÷ 11A8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 11A8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 11A8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1F1E6 ÷ 1160 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 1160 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 1160 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1F1E6 × 000A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1F1E6 × 0020 × 000A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1F1E6 × 0308 × 000A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 000A ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1F1E6 × 0085 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1F1E6 × 0020 × 0085 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1F1E6 × 0308 × 0085 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 0085 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1F1E6 × 17D6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 17D6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1F1E6 × 0308 × 17D6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1F1E6 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F1E6 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1F1E6 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1F1E6 ÷ 0024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1F1E6 × 0022 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0022 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 1F1E6 × 0308 × 0022 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 1F1E6 × 0020 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [0.3]
-× 1F1E6 × 0020 × 0020 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 0020 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 1F1E6 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1F1E6 × 0020 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1F1E6 × 0308 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 002F ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1F1E6 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1F1E6 × 0020 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1F1E6 × 0308 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 2060 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1F1E6 × 200B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1F1E6 × 0020 × 200B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1F1E6 × 0308 × 200B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 200B ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1F1E6 × 1F1E6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 1F1E6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1F1E6 × 0308 × 1F1E6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.11] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1F1E6 ÷ 261D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 261D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 261D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 261D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1F1E6 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1F1E6 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1F1E6 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1F1E6 × 0308 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 × 0029 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1F1E6 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1F1E6 × 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1F1E6 × 0308 × 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1F1E6 × 200D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 200D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1F1E6 × 0308 × 200D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 200D ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1F1E6 ÷ 00A7 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 00A7 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 00A7 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1F1E6 ÷ 50005 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 50005 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 50005 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1F1E6 ÷ 0E01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 0E01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1F1E6 × 0308 ÷ 0E01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1F1E6 × 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1F1E6 × 0020 ÷ 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1F1E6 × 0308 × 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1F1E6 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 261D ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 261D × 0020 ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 261D × 0308 ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 261D ÷ 2014 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 261D × 0020 ÷ 2014 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 261D × 0308 ÷ 2014 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 2014 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 261D × 0009 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 261D × 0020 ÷ 0009 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 261D × 0308 × 0009 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 0009 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 261D ÷ 00B4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 261D × 0020 ÷ 00B4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 261D × 0308 ÷ 00B4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 261D × 000B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 261D × 0020 × 000B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 261D × 0308 × 000B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 261D × 0308 × 0020 × 000B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 261D ÷ FFFC ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 261D × 0020 ÷ FFFC ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 261D × 0308 ÷ FFFC ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ FFFC ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 261D × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 261D × 0020 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 261D × 0308 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 261D × 0308 × 0020 × 007D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 261D × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 261D × 0020 × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 261D × 0308 × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 261D × 0308 × 0020 × 000D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 261D × 0021 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 261D × 0020 × 0021 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 261D × 0308 × 0021 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 261D × 0308 × 0020 × 0021 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 261D × 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 261D × 0020 ÷ 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 261D × 0308 × 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 261D ÷ AC00 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 261D × 0020 ÷ AC00 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 261D × 0308 ÷ AC00 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ AC00 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 261D ÷ AC01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 261D × 0020 ÷ AC01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 261D × 0308 ÷ AC01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ AC01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 261D ÷ 05D0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 261D × 0020 ÷ 05D0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 261D × 0308 ÷ 05D0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 261D × 002D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 261D × 0020 ÷ 002D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 261D × 0308 × 002D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 002D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 261D ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 261D × 0020 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 261D × 0308 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 231A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 261D × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 261D × 0020 ÷ 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 261D × 0308 × 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 261D × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] COMMA (IS) ÷ [0.3]
-× 261D × 0020 × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 261D × 0308 × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 261D × 0308 × 0020 × 002C ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 261D ÷ 1100 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 261D × 0020 ÷ 1100 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 261D × 0308 ÷ 1100 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 1100 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 261D ÷ 11A8 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 261D × 0020 ÷ 11A8 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 261D × 0308 ÷ 11A8 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 261D ÷ 1160 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 261D × 0020 ÷ 1160 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 261D × 0308 ÷ 1160 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 1160 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 261D × 000A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 261D × 0020 × 000A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 261D × 0308 × 000A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 261D × 0308 × 0020 × 000A ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 261D × 0085 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 261D × 0020 × 0085 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 261D × 0308 × 0085 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 261D × 0308 × 0020 × 0085 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 261D × 17D6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 261D × 0020 ÷ 17D6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 261D × 0308 × 17D6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 261D ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 261D × 0020 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 261D × 0308 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 261D ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 261D × 0020 ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 261D × 0308 ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 261D × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
-× 261D × 0020 ÷ 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 261D × 0308 × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 261D ÷ 0024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 261D × 0020 ÷ 0024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 261D × 0308 ÷ 0024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 0024 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 261D × 0022 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 261D × 0020 ÷ 0022 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 261D × 0308 × 0022 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 0022 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 261D × 0020 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [0.3]
-× 261D × 0020 × 0020 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 261D × 0308 × 0020 × 0020 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 261D × 002F ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 261D × 0020 × 002F ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 261D × 0308 × 002F ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 261D × 0308 × 0020 × 002F ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 261D × 2060 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 261D × 0020 × 2060 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 261D × 0308 × 2060 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 261D × 0308 × 0020 × 2060 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 261D × 200B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 261D × 0020 × 200B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 261D × 0308 × 200B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 261D × 0308 × 0020 × 200B ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 261D ÷ 1F1E6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 261D × 0020 ÷ 1F1E6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 261D × 0308 ÷ 1F1E6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 261D ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 261D × 0020 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 261D × 0308 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 261D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.21] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 261D × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 261D × 0308 × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.21] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 261D × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 261D × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 261D × 0308 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 261D × 0308 × 0020 × 0029 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 261D ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 261D × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 261D × 0308 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 261D × 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 261D × 0020 ÷ 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 261D × 0308 × 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 0001 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 261D × 200D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 261D × 0020 ÷ 200D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 261D × 0308 × 200D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 200D ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 261D ÷ 00A7 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 261D × 0020 ÷ 00A7 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 261D × 0308 ÷ 00A7 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 261D ÷ 50005 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 261D × 0020 ÷ 50005 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 261D × 0308 ÷ 50005 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 50005 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 261D ÷ 0E01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 261D × 0020 ÷ 0E01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 261D × 0308 ÷ 0E01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 261D × 3041 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 261D × 0020 ÷ 3041 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 261D × 0308 × 3041 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 261D × 0308 × 0020 ÷ 3041 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1F3FB ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1F3FB × 0020 ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1F3FB × 0308 ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 0023 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 1F3FB ÷ 2014 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 1F3FB × 0020 ÷ 2014 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 1F3FB × 0308 ÷ 2014 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 2014 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 1F3FB × 0009 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1F3FB × 0020 ÷ 0009 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1F3FB × 0308 × 0009 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 0009 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 1F3FB ÷ 00B4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1F3FB × 0020 ÷ 00B4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1F3FB × 0308 ÷ 00B4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 1F3FB × 000B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1F3FB × 0020 × 000B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1F3FB × 0308 × 000B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 000B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 1F3FB ÷ FFFC ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1F3FB × 0020 ÷ FFFC ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1F3FB × 0308 ÷ FFFC ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ FFFC ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 1F3FB × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F3FB × 0020 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F3FB × 0308 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 007D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 1F3FB × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1F3FB × 0020 × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1F3FB × 0308 × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 000D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 1F3FB × 0021 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1F3FB × 0020 × 0021 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1F3FB × 0308 × 0021 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 0021 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 1F3FB × 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1F3FB × 0020 ÷ 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1F3FB × 0308 × 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 1F3FB ÷ AC00 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1F3FB × 0020 ÷ AC00 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1F3FB × 0308 ÷ AC00 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ AC00 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 1F3FB ÷ AC01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1F3FB × 0020 ÷ AC01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1F3FB × 0308 ÷ AC01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ AC01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 1F3FB ÷ 05D0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F3FB × 0020 ÷ 05D0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F3FB × 0308 ÷ 05D0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F3FB × 002D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F3FB × 0020 ÷ 002D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F3FB × 0308 × 002D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 002D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 1F3FB ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1F3FB × 0020 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1F3FB × 0308 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 231A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 1F3FB × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F3FB × 0020 ÷ 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F3FB × 0308 × 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 2024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1F3FB × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] COMMA (IS) ÷ [0.3]
-× 1F3FB × 0020 × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 1F3FB × 0308 × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 002C ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 1F3FB ÷ 1100 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1F3FB × 0020 ÷ 1100 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1F3FB × 0308 ÷ 1100 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 1100 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 1F3FB ÷ 11A8 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1F3FB × 0020 ÷ 11A8 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1F3FB × 0308 ÷ 11A8 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1F3FB ÷ 1160 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1F3FB × 0020 ÷ 1160 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1F3FB × 0308 ÷ 1160 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 1160 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1F3FB × 000A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1F3FB × 0020 × 000A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1F3FB × 0308 × 000A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 000A ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 1F3FB × 0085 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1F3FB × 0020 × 0085 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1F3FB × 0308 × 0085 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 0085 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 1F3FB × 17D6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1F3FB × 0020 ÷ 17D6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1F3FB × 0308 × 17D6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 1F3FB ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F3FB × 0020 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F3FB × 0308 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 0030 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 1F3FB ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1F3FB × 0020 ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1F3FB × 0308 ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 2329 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 1F3FB × 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
-× 1F3FB × 0020 ÷ 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1F3FB × 0308 × 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 0025 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 1F3FB ÷ 0024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1F3FB × 0020 ÷ 0024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1F3FB × 0308 ÷ 0024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 0024 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 1F3FB × 0022 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 1F3FB × 0020 ÷ 0022 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 1F3FB × 0308 × 0022 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 0022 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 1F3FB × 0020 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [0.3]
-× 1F3FB × 0020 × 0020 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 0020 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 1F3FB × 002F ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1F3FB × 0020 × 002F ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1F3FB × 0308 × 002F ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 002F ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 1F3FB × 2060 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1F3FB × 0020 × 2060 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1F3FB × 0308 × 2060 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 2060 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 1F3FB × 200B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1F3FB × 0020 × 200B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1F3FB × 0308 × 200B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 200B ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 1F3FB ÷ 1F1E6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1F3FB × 0020 ÷ 1F1E6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1F3FB × 0308 ÷ 1F1E6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 1F3FB ÷ 261D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1F3FB × 0020 ÷ 261D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1F3FB × 0308 ÷ 261D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 261D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 1F3FB ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1F3FB × 0020 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1F3FB × 0308 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 1F3FB × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1F3FB × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1F3FB × 0308 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1F3FB × 0308 × 0020 × 0029 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 1F3FB ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1F3FB × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1F3FB × 0308 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 0028 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 1F3FB × 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1F3FB × 0020 ÷ 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1F3FB × 0308 × 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 0001 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 1F3FB × 200D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1F3FB × 0020 ÷ 200D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1F3FB × 0308 × 200D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 200D ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 1F3FB ÷ 00A7 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1F3FB × 0020 ÷ 00A7 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1F3FB × 0308 ÷ 00A7 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 1F3FB ÷ 50005 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1F3FB × 0020 ÷ 50005 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1F3FB × 0308 ÷ 50005 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 50005 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 1F3FB ÷ 0E01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1F3FB × 0020 ÷ 0E01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1F3FB × 0308 ÷ 0E01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1F3FB × 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1F3FB × 0020 ÷ 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1F3FB × 0308 × 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 1F3FB × 0308 × 0020 ÷ 3041 ÷ # × [0.3] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 × 0308 × 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0029 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0308 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0029 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 × 0308 × 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0029 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 0308 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0029 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 × 0308 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0029 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 0308 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0029 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0308 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 0308 × 0020 × 007D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0029 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0308 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0029 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 0308 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0021 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0029 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 × 0308 × 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0029 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 × 0308 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0029 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 0308 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0029 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 0308 × 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0029 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 × 0308 × 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 002D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0029 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0308 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 231A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0029 × 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 0308 × 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0029 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] COMMA (IS) ÷ [0.3]
-× 0029 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0029 × 0308 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 002C ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0029 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 × 0308 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0029 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 × 0308 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0029 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 0308 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0029 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0308 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0308 × 0020 × 000A ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0029 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 0308 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0085 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0029 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0308 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 17D6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0029 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 × 0308 × 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0029 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0029 × 0020 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0029 × 0308 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0029 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 × 0308 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0029 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0308 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0029 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0308 × 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0029 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0020 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0029 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 0308 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 0308 × 0020 × 002F ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0029 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 0308 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 0308 × 0020 × 2060 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0029 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 × 0308 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 × 0308 × 0020 × 200B ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0029 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 × 0308 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0029 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 × 0308 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 261D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0029 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0308 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0029 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0029 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0029 × 0308 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0029 × 0308 × 0020 × 0029 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0029 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0029 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0029 × 0308 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0029 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 0308 × 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0029 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 0308 × 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 200D ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0029 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 0308 × 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0029 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0308 × 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0029 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 0308 × 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0029 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0308 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0029 × 0308 × 0020 × 3041 ÷ # × [0.3] RIGHT PARENTHESIS (CP_CP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [16.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 0308 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0023 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0028 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0308 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2014 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EM DASH (B2) ÷ [0.3]
-× 0028 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 0308 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0009 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0028 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 0308 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00B4 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0028 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × 0308 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0028 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 0308 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 0308 × 0020 × FFFC ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0028 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0308 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 007D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0028 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0308 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0028 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 0308 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0021 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0028 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × 0308 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00A0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0028 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × 0308 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × 0308 × 0020 × AC00 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0028 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 0308 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 0308 × 0020 × AC01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0028 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 0308 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 05D0 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0028 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 0308 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0028 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0308 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 0308 × 0020 × 231A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WATCH (ID) ÷ [0.3]
-× 0028 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 0308 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0028 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] COMMA (IS) ÷ [0.3]
-× 0028 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0028 × 0308 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0028 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 0308 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1100 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0028 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 0308 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 0308 × 0020 × 11A8 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0028 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 0308 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1160 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0028 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0308 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0308 × 0020 × 000A ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0028 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 0308 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0085 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0028 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0308 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 17D6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0028 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0308 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0030 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0028 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0028 × 0020 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0028 × 0308 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2329 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0028 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0308 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0025 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0028 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0308 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0024 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0028 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0308 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0022 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0028 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 0308 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0020 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0028 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 0308 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 0308 × 0020 × 002F ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0028 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 0308 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 0308 × 0020 × 2060 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0028 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 0308 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 0308 × 0020 × 200B ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0028 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 0308 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1F1E6 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0028 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 0308 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 0308 × 0020 × 261D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0028 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0308 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0308 × 0020 × 1F3FB ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0028 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0028 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0028 × 0308 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0028 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0028 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0028 × 0308 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0028 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0028 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 0308 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0001 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0028 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 0308 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 0308 × 0020 × 200D ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0028 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 0308 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 00A7 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0028 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0308 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 50005 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0028 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 0308 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 0308 × 0020 × 0E01 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0028 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0308 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0028 × 0308 × 0020 × 3041 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [14.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0001 × 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0001 × 0020 ÷ 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0001 × 0308 × 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0001 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0001 × 0020 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0001 × 0308 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0001 × 0009 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0001 × 0020 ÷ 0009 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0001 × 0308 × 0009 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0001 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0001 × 0020 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0001 × 0308 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0001 × 000B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0001 × 0020 × 000B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0001 × 0308 × 000B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0001 × 0308 × 0020 × 000B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0001 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0001 × 0020 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0001 × 0308 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0001 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0001 × 0020 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0001 × 0308 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0001 × 0308 × 0020 × 007D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0001 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0001 × 0020 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0001 × 0308 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0001 × 0308 × 0020 × 000D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0001 × 0021 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0001 × 0020 × 0021 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0001 × 0308 × 0021 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0001 × 0308 × 0020 × 0021 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0001 × 00A0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [12.3] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0001 × 0020 ÷ 00A0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0001 × 0308 × 00A0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.3] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0001 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0001 × 0020 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0001 × 0308 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0001 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0001 × 0020 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0001 × 0308 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0001 × 05D0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0001 × 0020 ÷ 05D0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0001 × 0308 × 05D0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0001 × 002D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0001 × 0020 ÷ 002D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0001 × 0308 × 002D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0001 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0001 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0001 × 0308 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0001 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0001 × 0020 ÷ 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0001 × 0308 × 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0001 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] COMMA (IS) ÷ [0.3]
-× 0001 × 0020 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0001 × 0308 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] COMMA (IS) ÷ [0.3]
-× 0001 × 0308 × 0020 × 002C ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0001 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0001 × 0020 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0001 × 0308 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0001 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0001 × 0020 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0001 × 0308 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0001 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0001 × 0020 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0001 × 0308 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0001 × 000A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0001 × 0020 × 000A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0001 × 0308 × 000A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0001 × 0308 × 0020 × 000A ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0001 × 0085 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0001 × 0020 × 0085 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0001 × 0308 × 0085 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0001 × 0308 × 0020 × 0085 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0001 × 17D6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0001 × 0020 ÷ 17D6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0001 × 0308 × 17D6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0001 × 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0001 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0001 × 0308 × 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0001 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0001 × 0020 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0001 × 0308 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0001 × 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 0001 × 0020 ÷ 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0001 × 0308 × 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0001 × 0024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 0001 × 0020 ÷ 0024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0001 × 0308 × 0024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0001 × 0022 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0001 × 0020 ÷ 0022 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0001 × 0308 × 0022 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0001 × 0020 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0001 × 0020 × 0020 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0001 × 0308 × 0020 × 0020 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0001 × 002F ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
-× 0001 × 0020 × 002F ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0001 × 0308 × 002F ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
-× 0001 × 0308 × 0020 × 002F ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0001 × 2060 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0001 × 0020 × 2060 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0001 × 0308 × 2060 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0001 × 0308 × 0020 × 2060 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0001 × 200B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0001 × 0020 × 200B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0001 × 0308 × 200B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0001 × 0308 × 0020 × 200B ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0001 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0001 × 0020 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0001 × 0308 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0001 ÷ 261D ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0001 × 0020 ÷ 261D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0001 × 0308 ÷ 261D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 261D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0001 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0001 × 0020 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0001 × 0308 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0001 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0001 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0001 × 0308 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0001 × 0308 × 0020 × 0029 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0001 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0001 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0001 × 0308 × 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0001 × 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0001 × 0020 ÷ 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0001 × 0308 × 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0001 × 200D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0001 × 0020 ÷ 200D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0001 × 0308 × 200D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 200D ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0001 × 00A7 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0001 × 0020 ÷ 00A7 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0001 × 0308 × 00A7 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0001 × 50005 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0001 × 0020 ÷ 50005 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0001 × 0308 × 50005 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0001 × 0E01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0001 × 0020 ÷ 0E01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0001 × 0308 × 0E01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0001 × 3041 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0001 × 0020 ÷ 3041 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0001 × 0308 × 3041 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0001 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <START OF HEADING> (CM1_CM) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 200D × 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] NUMBER SIGN (AL) ÷ [0.3]
-× 200D × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 200D × 0308 × 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 0023 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 200D × 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] EM DASH (B2) ÷ [0.3]
-× 200D × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 200D × 0308 ÷ 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 2014 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 200D × 0009 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 200D × 0020 ÷ 0009 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 200D × 0308 × 0009 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 0009 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 200D × 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] ACUTE ACCENT (BB) ÷ [0.3]
-× 200D × 0020 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 200D × 0308 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 200D × 000B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 200D × 0020 × 000B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 200D × 0308 × 000B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 200D × 0308 × 0020 × 000B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 200D × FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 200D × 0020 ÷ FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 200D × 0308 ÷ FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ FFFC ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 200D × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200D × 0020 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200D × 0308 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200D × 0308 × 0020 × 007D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 200D × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 200D × 0020 × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 200D × 0308 × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 200D × 0308 × 0020 × 000D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 200D × 0021 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] EXCLAMATION MARK (EX) ÷ [0.3]
-× 200D × 0020 × 0021 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 200D × 0308 × 0021 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 200D × 0308 × 0020 × 0021 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 200D × 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200D × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200D × 0308 × 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [12.3] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200D × AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 200D × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 200D × 0308 ÷ AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ AC00 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 200D × AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 200D × 0020 ÷ AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 200D × 0308 ÷ AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ AC01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 200D × 05D0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 200D × 0020 ÷ 05D0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 200D × 0308 × 05D0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 200D × 002D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200D × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200D × 0308 × 002D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 002D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 200D × 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] WATCH (ID) ÷ [0.3]
-× 200D × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 200D × 0308 ÷ 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 231A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 200D × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] ONE DOT LEADER (IN) ÷ [0.3]
-× 200D × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200D × 0308 × 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 2024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 200D × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMMA (IS) ÷ [0.3]
-× 200D × 0020 × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 200D × 0308 × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] COMMA (IS) ÷ [0.3]
-× 200D × 0308 × 0020 × 002C ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 200D × 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 200D × 0020 ÷ 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 200D × 0308 ÷ 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 1100 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 200D × 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 200D × 0020 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 200D × 0308 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 200D × 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 200D × 0020 ÷ 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 200D × 0308 ÷ 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 1160 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 200D × 000A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 200D × 0020 × 000A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 200D × 0308 × 000A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 200D × 0308 × 0020 × 000A ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 200D × 0085 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 200D × 0020 × 0085 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 200D × 0308 × 0085 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 200D × 0308 × 0020 × 0085 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 200D × 17D6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 200D × 0020 ÷ 17D6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 200D × 0308 × 17D6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 200D × 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] DIGIT ZERO (NU) ÷ [0.3]
-× 200D × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 200D × 0308 × 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 0030 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 200D × 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 200D × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 200D × 0308 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 2329 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 200D × 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] PERCENT SIGN (PO) ÷ [0.3]
-× 200D × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 200D × 0308 × 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 0025 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 200D × 0024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] DOLLAR SIGN (PR) ÷ [0.3]
-× 200D × 0020 ÷ 0024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 200D × 0308 × 0024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 0024 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 200D × 0022 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] QUOTATION MARK (QU) ÷ [0.3]
-× 200D × 0020 ÷ 0022 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 200D × 0308 × 0022 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 0022 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 200D × 0020 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 200D × 0020 × 0020 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 200D × 0308 × 0020 × 0020 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 200D × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] SOLIDUS (SY) ÷ [0.3]
-× 200D × 0020 × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 200D × 0308 × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] SOLIDUS (SY) ÷ [0.3]
-× 200D × 0308 × 0020 × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 200D × 2060 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] WORD JOINER (WJ) ÷ [0.3]
-× 200D × 0020 × 2060 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 200D × 0308 × 2060 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 200D × 0308 × 0020 × 2060 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 200D × 200B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 200D × 0020 × 200B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 200D × 0308 × 200B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 200D × 0308 × 0020 × 200B ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 200D × 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 200D × 0020 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 200D × 0308 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 200D × 261D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 200D × 0020 ÷ 261D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 200D × 0308 ÷ 261D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 261D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 200D × 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 200D × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 200D × 0308 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 200D × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 200D × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 200D × 0308 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [13.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 200D × 0308 × 0020 × 0029 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 200D × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 200D × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 200D × 0308 × 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 0028 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 200D × 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 200D × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 200D × 0308 × 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 0001 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 200D × 200D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 200D × 0020 ÷ 200D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 200D × 0308 × 200D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 200D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 200D × 00A7 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] SECTION SIGN (AI_AL) ÷ [0.3]
-× 200D × 0020 ÷ 00A7 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 200D × 0308 × 00A7 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 200D × 50005 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] <reserved-50005> (XX_AL) ÷ [0.3]
-× 200D × 0020 ÷ 50005 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 200D × 0308 × 50005 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 50005 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 200D × 0E01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 200D × 0020 ÷ 0E01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 200D × 0308 × 0E01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 200D × 3041 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 200D × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 200D × 0308 × 3041 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 200D × 0308 × 0020 ÷ 3041 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A7 × 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A7 × 0020 ÷ 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A7 × 0308 × 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 00A7 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 00A7 × 0020 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 00A7 × 0308 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 00A7 × 0009 ÷ # × [0.3] SECTION SIGN (AI_AL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A7 × 0020 ÷ 0009 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A7 × 0308 × 0009 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 00A7 ÷ 00B4 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A7 × 0020 ÷ 00B4 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A7 × 0308 ÷ 00B4 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 00A7 × 000B ÷ # × [0.3] SECTION SIGN (AI_AL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A7 × 0020 × 000B ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A7 × 0308 × 000B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 000B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 00A7 ÷ FFFC ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A7 × 0020 ÷ FFFC ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A7 × 0308 ÷ FFFC ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 00A7 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A7 × 0020 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A7 × 0308 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 007D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 00A7 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A7 × 0020 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A7 × 0308 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 000D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 00A7 × 0021 ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A7 × 0020 × 0021 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A7 × 0308 × 0021 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 0021 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 00A7 × 00A0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A7 × 0020 ÷ 00A0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A7 × 0308 × 00A0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 00A7 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A7 × 0020 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A7 × 0308 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 00A7 ÷ AC01 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A7 × 0020 ÷ AC01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A7 × 0308 ÷ AC01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 00A7 × 05D0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A7 × 0020 ÷ 05D0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A7 × 0308 × 05D0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 00A7 × 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A7 × 0020 ÷ 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A7 × 0308 × 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 002D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 00A7 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 00A7 × 0020 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00A7 × 0308 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 231A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 00A7 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A7 × 0020 ÷ 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A7 × 0308 × 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 00A7 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] COMMA (IS) ÷ [0.3]
-× 00A7 × 0020 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 00A7 × 0308 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 002C ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 00A7 ÷ 1100 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A7 × 0020 ÷ 1100 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A7 × 0308 ÷ 1100 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 00A7 ÷ 11A8 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A7 × 0020 ÷ 11A8 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A7 × 0308 ÷ 11A8 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 00A7 ÷ 1160 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A7 × 0020 ÷ 1160 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A7 × 0308 ÷ 1160 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 00A7 × 000A ÷ # × [0.3] SECTION SIGN (AI_AL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A7 × 0020 × 000A ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A7 × 0308 × 000A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 000A ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 00A7 × 0085 ÷ # × [0.3] SECTION SIGN (AI_AL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A7 × 0020 × 0085 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A7 × 0308 × 0085 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 0085 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 00A7 × 17D6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A7 × 0020 ÷ 17D6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A7 × 0308 × 17D6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 00A7 × 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 00A7 × 0020 ÷ 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A7 × 0308 × 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 00A7 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00A7 × 0020 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00A7 × 0308 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 00A7 × 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 00A7 × 0020 ÷ 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00A7 × 0308 × 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 00A7 × 0024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A7 × 0020 ÷ 0024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A7 × 0308 × 0024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 00A7 × 0022 ÷ # × [0.3] SECTION SIGN (AI_AL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 00A7 × 0020 ÷ 0022 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00A7 × 0308 × 0022 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 00A7 × 0020 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A7 × 0020 × 0020 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 0020 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 00A7 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 00A7 × 0020 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 00A7 × 0308 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 002F ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 00A7 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A7 × 0020 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A7 × 0308 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 2060 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 00A7 × 200B ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A7 × 0020 × 200B ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A7 × 0308 × 200B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 200B ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 00A7 ÷ 1F1E6 ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A7 × 0020 ÷ 1F1E6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A7 × 0308 ÷ 1F1E6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 00A7 ÷ 261D ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00A7 × 0020 ÷ 261D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00A7 × 0308 ÷ 261D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 261D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 00A7 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00A7 × 0020 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00A7 × 0308 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 00A7 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00A7 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00A7 × 0308 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00A7 × 0308 × 0020 × 0029 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 00A7 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00A7 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00A7 × 0308 × 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 00A7 × 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00A7 × 0020 ÷ 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00A7 × 0308 × 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 00A7 × 200D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00A7 × 0020 ÷ 200D ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00A7 × 0308 × 200D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 200D ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 00A7 × 00A7 ÷ # × [0.3] SECTION SIGN (AI_AL) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A7 × 0020 ÷ 00A7 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A7 × 0308 × 00A7 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 00A7 × 50005 ÷ # × [0.3] SECTION SIGN (AI_AL) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A7 × 0020 ÷ 50005 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A7 × 0308 × 50005 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 00A7 × 0E01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A7 × 0020 ÷ 0E01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A7 × 0308 × 0E01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 00A7 × 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A7 × 0020 ÷ 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A7 × 0308 × 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 00A7 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] SECTION SIGN (AI_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 50005 × 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 50005 × 0020 ÷ 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 50005 × 0308 × 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 50005 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 50005 × 0020 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 50005 × 0308 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 50005 × 0009 ÷ # × [0.3] <reserved-50005> (XX_AL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 50005 × 0020 ÷ 0009 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 50005 × 0308 × 0009 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 50005 ÷ 00B4 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 50005 × 0020 ÷ 00B4 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 50005 × 0308 ÷ 00B4 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 50005 × 000B ÷ # × [0.3] <reserved-50005> (XX_AL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 50005 × 0020 × 000B ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 50005 × 0308 × 000B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 50005 × 0308 × 0020 × 000B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 50005 ÷ FFFC ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 50005 × 0020 ÷ FFFC ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 50005 × 0308 ÷ FFFC ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 50005 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 50005 × 0020 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 50005 × 0308 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 50005 × 0308 × 0020 × 007D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 50005 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 50005 × 0020 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 50005 × 0308 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 50005 × 0308 × 0020 × 000D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 50005 × 0021 ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 50005 × 0020 × 0021 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 50005 × 0308 × 0021 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 50005 × 0308 × 0020 × 0021 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 50005 × 00A0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 50005 × 0020 ÷ 00A0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 50005 × 0308 × 00A0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 50005 ÷ AC00 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 50005 × 0020 ÷ AC00 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 50005 × 0308 ÷ AC00 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 50005 ÷ AC01 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 50005 × 0020 ÷ AC01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 50005 × 0308 ÷ AC01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 50005 × 05D0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 50005 × 0020 ÷ 05D0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 50005 × 0308 × 05D0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 50005 × 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 50005 × 0020 ÷ 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 50005 × 0308 × 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 002D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 50005 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 50005 × 0020 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 50005 × 0308 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 231A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 50005 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 50005 × 0020 ÷ 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 50005 × 0308 × 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 50005 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] COMMA (IS) ÷ [0.3]
-× 50005 × 0020 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 50005 × 0308 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 50005 × 0308 × 0020 × 002C ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 50005 ÷ 1100 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 50005 × 0020 ÷ 1100 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 50005 × 0308 ÷ 1100 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 50005 ÷ 11A8 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 50005 × 0020 ÷ 11A8 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 50005 × 0308 ÷ 11A8 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 50005 ÷ 1160 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 50005 × 0020 ÷ 1160 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 50005 × 0308 ÷ 1160 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 50005 × 000A ÷ # × [0.3] <reserved-50005> (XX_AL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 50005 × 0020 × 000A ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 50005 × 0308 × 000A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 50005 × 0308 × 0020 × 000A ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 50005 × 0085 ÷ # × [0.3] <reserved-50005> (XX_AL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 50005 × 0020 × 0085 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 50005 × 0308 × 0085 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 50005 × 0308 × 0020 × 0085 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 50005 × 17D6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 50005 × 0020 ÷ 17D6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 50005 × 0308 × 17D6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 50005 × 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 50005 × 0020 ÷ 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 50005 × 0308 × 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 50005 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 50005 × 0020 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 50005 × 0308 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 50005 × 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 50005 × 0020 ÷ 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 50005 × 0308 × 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 50005 × 0024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 50005 × 0020 ÷ 0024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 50005 × 0308 × 0024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 50005 × 0022 ÷ # × [0.3] <reserved-50005> (XX_AL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 50005 × 0020 ÷ 0022 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 50005 × 0308 × 0022 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 50005 × 0020 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [0.3]
-× 50005 × 0020 × 0020 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 50005 × 0308 × 0020 × 0020 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 50005 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 50005 × 0020 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 50005 × 0308 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 50005 × 0308 × 0020 × 002F ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 50005 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 50005 × 0020 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 50005 × 0308 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 50005 × 0308 × 0020 × 2060 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 50005 × 200B ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 50005 × 0020 × 200B ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 50005 × 0308 × 200B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 50005 × 0308 × 0020 × 200B ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 50005 ÷ 1F1E6 ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 50005 × 0020 ÷ 1F1E6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 50005 × 0308 ÷ 1F1E6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 50005 ÷ 261D ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 50005 × 0020 ÷ 261D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 50005 × 0308 ÷ 261D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 261D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 50005 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 50005 × 0020 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 50005 × 0308 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 50005 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 50005 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 50005 × 0308 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 50005 × 0308 × 0020 × 0029 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 50005 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 50005 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 50005 × 0308 × 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 50005 × 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 50005 × 0020 ÷ 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 50005 × 0308 × 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 50005 × 200D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 50005 × 0020 ÷ 200D ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 50005 × 0308 × 200D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 200D ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 50005 × 00A7 ÷ # × [0.3] <reserved-50005> (XX_AL) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 50005 × 0020 ÷ 00A7 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 50005 × 0308 × 00A7 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 50005 × 50005 ÷ # × [0.3] <reserved-50005> (XX_AL) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 50005 × 0020 ÷ 50005 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 50005 × 0308 × 50005 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 50005 × 0E01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 50005 × 0020 ÷ 0E01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 50005 × 0308 × 0E01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 50005 × 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 50005 × 0020 ÷ 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 50005 × 0308 × 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 50005 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] <reserved-50005> (XX_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0E01 × 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0E01 × 0020 ÷ 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0E01 × 0308 × 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 0E01 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0E01 × 0020 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0E01 × 0308 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 0E01 × 0009 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0E01 × 0020 ÷ 0009 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0E01 × 0308 × 0009 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 0E01 ÷ 00B4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0E01 × 0020 ÷ 00B4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0E01 × 0308 ÷ 00B4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 0E01 × 000B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0E01 × 0020 × 000B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0E01 × 0308 × 000B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 000B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 0E01 ÷ FFFC ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0E01 × 0020 ÷ FFFC ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0E01 × 0308 ÷ FFFC ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 0E01 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0E01 × 0020 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0E01 × 0308 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 007D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0E01 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0E01 × 0020 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0E01 × 0308 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 000D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 0E01 × 0021 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0E01 × 0020 × 0021 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0E01 × 0308 × 0021 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 0021 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0E01 × 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0E01 × 0020 ÷ 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0E01 × 0308 × 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 0E01 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0E01 × 0020 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0E01 × 0308 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 0E01 ÷ AC01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0E01 × 0020 ÷ AC01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0E01 × 0308 ÷ AC01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 0E01 × 05D0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0E01 × 0020 ÷ 05D0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0E01 × 0308 × 05D0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 0E01 × 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0E01 × 0020 ÷ 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0E01 × 0308 × 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 002D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0E01 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0E01 × 0020 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0E01 × 0308 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 231A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0E01 × 0020 ÷ 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0E01 × 0308 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0E01 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] COMMA (IS) ÷ [0.3]
-× 0E01 × 0020 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0E01 × 0308 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 002C ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 0E01 ÷ 1100 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0E01 × 0020 ÷ 1100 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0E01 × 0308 ÷ 1100 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 0E01 ÷ 11A8 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0E01 × 0020 ÷ 11A8 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0E01 × 0308 ÷ 11A8 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 0E01 ÷ 1160 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0E01 × 0020 ÷ 1160 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0E01 × 0308 ÷ 1160 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 0E01 × 000A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0E01 × 0020 × 000A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0E01 × 0308 × 000A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 000A ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 0E01 × 0085 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0E01 × 0020 × 0085 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0E01 × 0308 × 0085 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 0085 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 0E01 × 17D6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0E01 × 0020 ÷ 17D6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0E01 × 0308 × 17D6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 0E01 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0E01 × 0020 ÷ 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0E01 × 0308 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 0E01 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0E01 × 0020 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0E01 × 0308 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 0E01 × 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 0E01 × 0020 ÷ 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0E01 × 0308 × 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] PERCENT SIGN (PO) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 0E01 × 0024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 0E01 × 0020 ÷ 0024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0E01 × 0308 × 0024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [24.03] DOLLAR SIGN (PR) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 0E01 × 0022 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0E01 × 0020 ÷ 0022 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0E01 × 0308 × 0022 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 0E01 × 0020 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [0.3]
-× 0E01 × 0020 × 0020 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 0020 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0E01 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0E01 × 0020 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0E01 × 0308 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 002F ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 0E01 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0E01 × 0020 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0E01 × 0308 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 2060 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 0E01 × 200B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0E01 × 0020 × 200B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0E01 × 0308 × 200B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 200B ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 0E01 ÷ 1F1E6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0E01 × 0020 ÷ 1F1E6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0E01 × 0308 ÷ 1F1E6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 0E01 ÷ 261D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0E01 × 0020 ÷ 261D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0E01 × 0308 ÷ 261D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 261D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0E01 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0E01 × 0020 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0E01 × 0308 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0E01 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0E01 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0E01 × 0308 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0E01 × 0308 × 0020 × 0029 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0E01 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0E01 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0E01 × 0308 × 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 0E01 × 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0E01 × 0020 ÷ 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0E01 × 0308 × 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 0E01 × 200D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0E01 × 0020 ÷ 200D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0E01 × 0308 × 200D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 200D ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 0E01 × 00A7 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0E01 × 0020 ÷ 00A7 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0E01 × 0308 × 00A7 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 0E01 × 50005 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0E01 × 0020 ÷ 50005 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0E01 × 0308 × 50005 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 0E01 × 0E01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0E01 × 0020 ÷ 0E01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0E01 × 0308 × 0E01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [28.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0E01 × 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0E01 × 0020 ÷ 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0E01 × 0308 × 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0E01 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 3041 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 3041 × 0020 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 3041 × 0308 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] NUMBER SIGN (AL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0023 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NUMBER SIGN (AL) ÷ [0.3]
-× 3041 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 3041 × 0020 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 3041 × 0308 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EM DASH (B2) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 2014 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EM DASH (B2) ÷ [0.3]
-× 3041 × 0009 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 3041 × 0020 ÷ 0009 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 3041 × 0308 × 0009 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.01] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0009 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <CHARACTER TABULATION> (BA) ÷ [0.3]
-× 3041 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 3041 × 0020 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 3041 × 0308 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 00B4 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ACUTE ACCENT (BB) ÷ [0.3]
-× 3041 × 000B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 3041 × 0020 × 000B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 3041 × 0308 × 000B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 3041 × 0308 × 0020 × 000B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE TABULATION> (BK) ÷ [0.3]
-× 3041 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 3041 × 0020 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 3041 × 0308 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× 3041 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 3041 × 0020 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 3041 × 0308 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 3041 × 0308 × 0020 × 007D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 3041 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 3041 × 0020 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 3041 × 0308 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 3041 × 0308 × 0020 × 000D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-× 3041 × 0021 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 3041 × 0020 × 0021 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 3041 × 0308 × 0021 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 3041 × 0308 × 0020 × 0021 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 3041 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [12.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 3041 × 0020 ÷ 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 3041 × 0308 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] NO-BREAK SPACE (GL) ÷ [0.3]
-× 3041 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 3041 × 0020 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 3041 × 0308 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ AC00 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GA (H2) ÷ [0.3]
-× 3041 ÷ AC01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 3041 × 0020 ÷ AC01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 3041 × 0308 ÷ AC01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ AC01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE GAG (H3) ÷ [0.3]
-× 3041 ÷ 05D0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 3041 × 0020 ÷ 05D0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 3041 × 0308 ÷ 05D0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 05D0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 3041 × 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 3041 × 0020 ÷ 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 3041 × 0308 × 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) ÷ [0.3]
-× 3041 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 3041 × 0020 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 3041 × 0308 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WATCH (ID) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 231A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WATCH (ID) ÷ [0.3]
-× 3041 × 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 3041 × 0020 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 3041 × 0308 × 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 2024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 3041 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] COMMA (IS) ÷ [0.3]
-× 3041 × 0020 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 3041 × 0308 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] COMMA (IS) ÷ [0.3]
-× 3041 × 0308 × 0020 × 002C ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] COMMA (IS) ÷ [0.3]
-× 3041 ÷ 1100 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 3041 × 0020 ÷ 1100 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 3041 × 0308 ÷ 1100 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 1100 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL CHOSEONG KIYEOK (JL) ÷ [0.3]
-× 3041 ÷ 11A8 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 3041 × 0020 ÷ 11A8 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 3041 × 0308 ÷ 11A8 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 11A8 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 3041 ÷ 1160 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 3041 × 0020 ÷ 1160 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 3041 × 0308 ÷ 1160 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 1160 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 3041 × 000A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 3041 × 0020 × 000A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 3041 × 0308 × 000A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 3041 × 0308 × 0020 × 000A ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-× 3041 × 0085 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 3041 × 0020 × 0085 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 3041 × 0308 × 0085 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 3041 × 0308 × 0020 × 0085 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [6.0] <NEXT LINE (NEL)> (NL) ÷ [0.3]
-× 3041 × 17D6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 3041 × 0020 ÷ 17D6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 3041 × 0308 × 17D6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 17D6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] KHMER SIGN CAMNUC PII KUUH (NS) ÷ [0.3]
-× 3041 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 3041 × 0020 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 3041 × 0308 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DIGIT ZERO (NU) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0030 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DIGIT ZERO (NU) ÷ [0.3]
-× 3041 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 3041 × 0020 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 3041 × 0308 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 2329 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT-POINTING ANGLE BRACKET (OP) ÷ [0.3]
-× 3041 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 3041 × 0020 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 3041 × 0308 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] PERCENT SIGN (PO) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0025 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] PERCENT SIGN (PO) ÷ [0.3]
-× 3041 ÷ 0024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 3041 × 0020 ÷ 0024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 3041 × 0308 ÷ 0024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0024 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] DOLLAR SIGN (PR) ÷ [0.3]
-× 3041 × 0022 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 3041 × 0020 ÷ 0022 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 3041 × 0308 × 0022 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] QUOTATION MARK (QU) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0022 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) ÷ [0.3]
-× 3041 × 0020 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [0.3]
-× 3041 × 0020 × 0020 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 3041 × 0308 × 0020 × 0020 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 3041 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 3041 × 0020 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 3041 × 0308 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] SOLIDUS (SY) ÷ [0.3]
-× 3041 × 0308 × 0020 × 002F ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] SOLIDUS (SY) ÷ [0.3]
-× 3041 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 3041 × 0020 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 3041 × 0308 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 3041 × 0308 × 0020 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 3041 × 200B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 3041 × 0020 × 200B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 3041 × 0308 × 200B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 3041 × 0308 × 0020 × 200B ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [0.3]
-× 3041 ÷ 1F1E6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 3041 × 0020 ÷ 1F1E6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 3041 × 0308 ÷ 1F1E6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 1F1E6 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-× 3041 ÷ 261D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 3041 × 0020 ÷ 261D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 3041 × 0308 ÷ 261D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 261D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 3041 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 3041 × 0020 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 3041 × 0308 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 1F3FB ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 3041 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 3041 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 3041 × 0308 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 3041 × 0308 × 0020 × 0029 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 3041 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 3041 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 3041 × 0308 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0028 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) ÷ [0.3]
-× 3041 × 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 3041 × 0020 ÷ 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 3041 × 0308 × 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0001 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <START OF HEADING> (CM1_CM) ÷ [0.3]
-× 3041 × 200D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 3041 × 0020 ÷ 200D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 3041 × 0308 × 200D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 200D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) ÷ [0.3]
-× 3041 ÷ 00A7 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 3041 × 0020 ÷ 00A7 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 3041 × 0308 ÷ 00A7 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 00A7 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] SECTION SIGN (AI_AL) ÷ [0.3]
-× 3041 ÷ 50005 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 3041 × 0020 ÷ 50005 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 3041 × 0308 ÷ 50005 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 50005 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] <reserved-50005> (XX_AL) ÷ [0.3]
-× 3041 ÷ 0E01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 3041 × 0020 ÷ 0E01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 3041 × 0308 ÷ 0E01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [999.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 0E01 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 3041 × 3041 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 3041 × 0020 ÷ 3041 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 3041 × 0308 × 3041 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [21.03] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 3041 × 0308 × 0020 ÷ 3041 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000D × 000A ÷ 0061 × 000A ÷ 0308 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) × [5.01] <LINE FEED (LF)> (LF) ÷ [5.03] LATIN SMALL LETTER A (AL) × [6.0] <LINE FEED (LF)> (LF) ÷ [5.03] COMBINING DIAERESIS (CM1_CM) ÷ [0.3]
-× 0061 × 0308 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) ÷ [0.3]
-× 0020 ÷ 200D × 0646 ÷ # × [0.3] SPACE (SP) ÷ [18.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] ARABIC LETTER NOON (AL) ÷ [0.3]
-× 0646 × 200D × 0020 ÷ # × [0.3] ARABIC LETTER NOON (AL) × [9.0] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 000B ÷ 3041 ÷ # × [0.3] <LINE TABULATION> (BK) ÷ [4.0] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 000D ÷ 3041 ÷ # × [0.3] <CARRIAGE RETURN (CR)> (CR) ÷ [5.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 0085 ÷ 3041 ÷ # × [0.3] <NEXT LINE (NEL)> (NL) ÷ [5.04] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 200D × 261D ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 3041 × 2060 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [11.01] WORD JOINER (WJ) ÷ [0.3]
-× 2060 × 3041 ÷ # × [0.3] WORD JOINER (WJ) × [11.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 3041 × 0308 × 00A0 ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [9.0] COMBINING DIAERESIS (CM1_CM) × [12.2] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200D × 00A0 ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] NO-BREAK SPACE (GL) ÷ [0.3]
-× 200D × 002F ÷ # × [0.3] ZERO WIDTH JOINER (ZWJ_O_ZWJ_CM) × [8.1] SOLIDUS (SY) ÷ [0.3]
-× 2014 × 2014 ÷ # × [0.3] EM DASH (B2) × [17.0] EM DASH (B2) ÷ [0.3]
-× 3041 ÷ FFFC ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [20.01] OBJECT REPLACEMENT CHARACTER (CB) ÷ [0.3]
-× FFFC ÷ 3041 ÷ # × [0.3] OBJECT REPLACEMENT CHARACTER (CB) ÷ [20.02] HIRAGANA LETTER SMALL A (CJ_NS) ÷ [0.3]
-× 3041 × 002D ÷ # × [0.3] HIRAGANA LETTER SMALL A (CJ_NS) × [21.02] HYPHEN-MINUS (HY) ÷ [0.3]
-× 0E01 × 2024 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0021 × 2024 ÷ # × [0.3] EXCLAMATION MARK (EX) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 2024 × 2024 ÷ # × [0.3] ONE DOT LEADER (IN) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 0030 × 2024 ÷ # × [0.3] DIGIT ZERO (NU) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 261D × 0025 ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [23.13] PERCENT SIGN (PO) ÷ [0.3]
-× 0E01 × 0030 ÷ # × [0.3] THAI CHARACTER KO KAI (SA_AL) × [23.02] DIGIT ZERO (NU) ÷ [0.3]
-× 0024 × 261D ÷ # × [0.3] DOLLAR SIGN (PR) × [23.12] WHITE UP POINTING INDEX (EB) ÷ [0.3]
-× 0024 × 0E01 ÷ # × [0.3] DOLLAR SIGN (PR) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 0025 × 0E01 ÷ # × [0.3] PERCENT SIGN (PO) × [24.02] THAI CHARACTER KO KAI (SA_AL) ÷ [0.3]
-× 1100 × 1160 ÷ # × [0.3] HANGUL CHOSEONG KIYEOK (JL) × [26.01] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 1160 × 1160 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [26.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 11A8 × 11A8 ÷ # × [0.3] HANGUL JONGSEONG KIYEOK (JT) × [26.03] HANGUL JONGSEONG KIYEOK (JT) ÷ [0.3]
-× 1160 × 2024 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [22.0] ONE DOT LEADER (IN) ÷ [0.3]
-× 1160 × 0025 ÷ # × [0.3] HANGUL JUNGSEONG FILLER (JV) × [27.01] PERCENT SIGN (PO) ÷ [0.3]
-× 0024 × 1160 ÷ # × [0.3] DOLLAR SIGN (PR) × [27.02] HANGUL JUNGSEONG FILLER (JV) ÷ [0.3]
-× 261D × 1F3FB ÷ # × [0.3] WHITE UP POINTING INDEX (EB) × [30.21] EMOJI MODIFIER FITZPATRICK TYPE-1-2 (EM) ÷ [0.3]
-× 0066 × 0069 × 006E × 0061 × 006C ÷ # × [0.3] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER L (AL) ÷ [0.3]
-× 0063 × 0061 × 006E × 0027 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3]
-× 0063 × 0061 × 006E × 2019 × 0074 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] RIGHT SINGLE QUOTATION MARK (QU) × [19.02] LATIN SMALL LETTER T (AL) ÷ [0.3]
-× 0027 × 0063 × 0061 × 006E × 0027 × 0020 ÷ 006E × 006F × 0074 ÷ # × [0.3] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [19.01] APOSTROPHE (QU) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER T (AL) ÷ [0.3]
-× 0063 × 0061 × 006E × 0020 ÷ 0027 × 006E × 006F × 0074 × 0027 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [7.01] SPACE (SP) ÷ [18.0] APOSTROPHE (QU) × [19.02] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER T (AL) × [19.01] APOSTROPHE (QU) ÷ [0.3]
-× 0062 × 0075 × 0067 × 0028 × 0073 × 0029 × 0020 × 0020 × 0020 × 0020 × 0020 ÷ # × [0.3] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 0062 × 0075 × 0067 × 0028 × 0073 × 0029 × 00A0 × 0020 × 0020 × 0020 × 0020 × 0020 ÷ # × [0.3] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER G (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NO-BREAK SPACE (GL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [0.3]
-× 002E × 002E ÷ 307E ÷ 3059 × 3002 ÷ 0058 × 004D × 004C ÷ 306E × 002E × 002E ÷ # × [0.3] FULL STOP (IS) × [13.02] FULL STOP (IS) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [999.0] HIRAGANA LETTER SU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN CAPITAL LETTER X (AL) × [28.0] LATIN CAPITAL LETTER M (AL) × [28.0] LATIN CAPITAL LETTER L (AL) ÷ [999.0] HIRAGANA LETTER NO (ID) × [13.02] FULL STOP (IS) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 0061 × 0062 × 00AD ÷ 0062 × 0079 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER Y (AL) ÷ [0.3]
-× 002D × 0033 ÷ # × [0.3] HYPHEN-MINUS (HY) × [25.02] DIGIT THREE (NU) ÷ [0.3]
-× 0065 × 002E × 0067 × 002E ÷ # × [0.3] LATIN SMALL LETTER E (AL) × [13.02] FULL STOP (IS) × [29.0] LATIN SMALL LETTER G (AL) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 4E00 × 002E ÷ 4E00 × 002E ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-4E00 (ID) × [13.02] FULL STOP (IS) ÷ [999.0] CJK UNIFIED IDEOGRAPH-4E00 (ID) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 0061 × 0020 × 0020 ÷ 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
-× 0061 × 0020 × 0020 × 200B ÷ 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) × [7.01] SPACE (SP) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
-× 0061 × 0020 ÷ 0308 × 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [28.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
-× 0031 × 0308 × 0062 × 0028 × 0061 × 0029 × 002D ÷ 0028 × 0062 × 0029 ÷ # × [0.3] DIGIT ONE (NU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [23.03] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER B (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0067 × 0069 × 0076 × 0065 × 0020 ÷ 0062 × 006F × 006F × 006B × 0028 × 0073 × 0029 × 002E ÷ # × [0.3] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER V (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER K (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 307E ÷ 0028 × 3059 × 0029 ÷ # × [0.3] HIRAGANA LETTER MA (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER SU (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0066 × 0069 × 006E × 0064 × 0020 × 002E × 0063 × 006F × 006D ÷ # × [0.3] LATIN SMALL LETTER F (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER D (AL) × [7.01] SPACE (SP) × [13.02] FULL STOP (IS) × [29.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER M (AL) ÷ [0.3]
-× 0065 × 0071 × 0075 × 0061 × 006C × 0073 × 0020 × 002E ÷ 0033 × 0035 × 0020 ÷ 0063 × 0065 × 006E × 0074 × 0073 ÷ # × [0.3] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER Q (AL) × [28.0] LATIN SMALL LETTER U (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT THREE (NU) × [25.03] DIGIT FIVE (NU) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER S (AL) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0068 × 0065 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [0.3]
-× 007B × 0073 × 007D ÷ 0068 × 0065 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) ÷ [0.3]
-× 02C8 × 0073 × 0049 × 006C × 0259 × 0062 × 0028 × 0259 × 0029 × 006C ÷ # × [0.3] MODIFIER LETTER VERTICAL LINE (BB) × [21.04] LATIN SMALL LETTER S (AL) × [28.0] LATIN CAPITAL LETTER I (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER SCHWA (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER SCHWA (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) ÷ [0.3]
-× 02C8 × 0073 × 0049 × 006C × 0259 × 0062 × 007B × 0259 × 007D ÷ 006C ÷ # × [0.3] MODIFIER LETTER VERTICAL LINE (BB) × [21.04] LATIN SMALL LETTER S (AL) × [28.0] LATIN CAPITAL LETTER I (AL) × [28.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER SCHWA (AL) × [28.0] LATIN SMALL LETTER B (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER SCHWA (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0029 × 002E ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 002E × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] FULL STOP (IS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0029 × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0073 × 0021 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 005C ÷ 0028 × 0073 × 005C × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 0028 × 0020 × 0073 × 0020 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 002E ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.02] FULL STOP (IS) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0073 × 007D × 0021 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [13.01] EXCLAMATION MARK (EX) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 005C ÷ 007B × 0073 × 005C × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [24.03] REVERSE SOLIDUS (PR) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [24.03] REVERSE SOLIDUS (PR) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0065 × 007B × 0020 × 0073 × 0020 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER E (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] LATIN SMALL LETTER S (AL) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0063 × 006F × 0064 × 0028 × 0065 × 0029 × 2026 ÷ 0028 × 0073 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0028 × 0063 × 006F × 0064 × 0028 × 0065 × 0029 × 2026 × 0029 × 0073 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [22.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER S (AL) ÷ [0.3]
-× 0063 × 006F × 0064 × 007B × 0065 × 007D × 2026 ÷ 007B × 0073 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 007B × 0063 × 006F × 0064 × 007B × 0065 × 007D × 2026 × 007D ÷ 0073 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [22.0] HORIZONTAL ELLIPSIS (IN) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER S (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 002D × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 00AD × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 2011 × 0029 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 0029 × 002D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 0029 × 00AD ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0028 × 0063 × 006F × 006E × 0029 × 2011 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 002D × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 00AD × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 2011 × 007D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 007D × 002D ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 007D × 00AD ÷ 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 007B × 0063 × 006F × 006E × 007D × 2011 × 006C × 0061 × 006E × 0067 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER L (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 0028 × 0065 × 0301 × 0029 ÷ 0028 × 0065 × 0029 ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 005B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 005D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT SQUARE BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [0.3]
-× 0063 × 0072 × 0065 × 0301 × 007B × 0065 × 0072 × 007C ÷ 0065 × 0301 × 0028 × 0065 × 0029 ÷ 0028 × 0073 × 0029 × 007D ÷ # × [0.3] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [21.01] VERTICAL LINE (BA) ÷ [999.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING ACUTE ACCENT (CM1_CM) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 0308 × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0308 × 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 0028 × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 0029 ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 0028 × 0020 × 0308 × 0020 × 0029 × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 0028 × 0020 × 0308 × 0020 × 0029 × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT PARENTHESIS (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 0308 × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0308 × 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [9.0] COMBINING DIAERESIS (CM1_CM) × [19.01] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 007B × 00AB × 0020 ÷ 0308 × 0020 ÷ 00BB × 007D ÷ 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 0020 × 007B × 0020 × 0308 × 0020 × 007D × 0020 ÷ 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [7.01] SPACE (SP) × [15.0] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [7.01] SPACE (SP) ÷ [18.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0061 × 006D × 0062 × 0069 × 0067 × 0075 × 00AB × 202F × 007B × 0020 × 0308 × 0020 × 007D × 202F × 00BB × 0028 × 0065 × 0308 × 0029 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER G (AL) × [28.0] LATIN SMALL LETTER U (AL) × [19.01] LEFT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] LEFT CURLY BRACKET (OP_OP30) × [7.01] SPACE (SP) × [14.0] COMBINING DIAERESIS (CM1_CM) × [7.01] SPACE (SP) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NARROW NO-BREAK SPACE (GL) × [12.0] RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK (QU) × [15.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [9.0] COMBINING DIAERESIS (CM1_CM) × [13.03] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 0029 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 0029 × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 0028 × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 0029 × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD ÷ 2011 × 007D ÷ 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 00AD × 007D × 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [21.01] SOFT HYPHEN (BA) × [13.02] RIGHT CURLY BRACKET (CL) × [12.1] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0063 × 007A × 0065 × 0072 × 0077 × 006F × 006E × 006F × 007D × 00AD ÷ 2011 × 006E × 0069 × 0065 × 0062 × 0069 × 0065 × 0073 × 006B × 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER Z (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER W (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER O (AL) × [13.02] RIGHT CURLY BRACKET (CL) × [21.01] SOFT HYPHEN (BA) ÷ [999.0] NON-BREAKING HYPHEN (GL) × [12.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER S (AL) × [28.0] LATIN SMALL LETTER K (AL) × [28.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 006F × 0070 × 0065 × 0072 × 0061 × 0074 × 006F × 0072 × 005B × 005D ÷ 0028 × 0030 × 0029 × 003B ÷ # × [0.3] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [30.01] LEFT SQUARE BRACKET (OP_OP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT ZERO (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [13.02] SEMICOLON (IS) ÷ [0.3]
-× 006F × 0070 × 0065 × 0072 × 0061 × 0074 × 006F × 0072 × 005B × 005D ÷ 0028 × 0029 ÷ 007B × 007D ÷ # × [0.3] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [30.01] LEFT SQUARE BRACKET (OP_OP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 672C ÷ 0028 × 3092 × 0029 ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 0028 × 300C × 3092 × 300D × 0029 ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 300C × 0028 × 3092 × 0029 × 300D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 007B × 3092 × 007D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 007B × 300C × 3092 × 300D × 007D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT CURLY BRACKET (OP_OP30) × [14.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 672C ÷ 005B × 0028 × 3092 × 0029 × 005D ÷ 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] LEFT SQUARE BRACKET (OP_OP30) × [14.0] LEFT PARENTHESIS (OP_OP30) × [14.0] HIRAGANA LETTER WO (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 0028 × 30CB × 30E5 × 30FC × 30FB × 0029 ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 0028 × 30CB × 30E5 × 30FC × 0029 × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 007B × 30CB × 30E5 × 30FC × 30FB × 007D ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 007B × 30CB × 30E5 × 30FC × 007D × 30FB ÷ 30E8 × 30FC ÷ 30AF ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] KATAKANA LETTER NI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [13.02] RIGHT CURLY BRACKET (CL) × [16.0] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER YO (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 0028 × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 0029 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 0028 × 1850 × 1846 × 1851 × 1846 × 0029 ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 007B × 1850 × 1846 × 1851 × 1846 ÷ 1806 × 007D ÷ 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 007B × 1850 × 1846 × 1851 × 1846 × 007D ÷ 1806 × 182A × 1822 × 1834 × 1822 × 182D × 180C ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] MONGOLIAN LETTER TODO TA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [28.0] MONGOLIAN LETTER TODO DA (AL) × [28.0] MONGOLIAN LETTER TODO O (AL) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] MONGOLIAN TODO SOFT HYPHEN (BB) × [21.04] MONGOLIAN LETTER BA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER CHA (AL) × [28.0] MONGOLIAN LETTER I (AL) × [28.0] MONGOLIAN LETTER GA (AL) × [9.0] MONGOLIAN FREE VARIATION SELECTOR TWO (CM1_CM) ÷ [0.3]
-× 0028 × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 0029 × 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [30.02] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 007B × 0068 × 0074 × 0074 × 0070 × 003A × 002F × 002F × 007D ÷ 0078 × 006E × 002D × 002D ÷ 0061 ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER T (AL) × [28.0] LATIN SMALL LETTER P (AL) × [13.02] COLON (IS) × [13.02] SOLIDUS (SY) × [13.02] SOLIDUS (SY) × [13.02] RIGHT CURLY BRACKET (CL) ÷ [999.0] LATIN SMALL LETTER X (AL) × [28.0] LATIN SMALL LETTER N (AL) × [21.02] HYPHEN-MINUS (HY) × [21.02] HYPHEN-MINUS (HY) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 0028 × 0030 × 002C × 0031 × 0029 × 002B × 0028 × 0032 × 002C × 0033 × 0029 × 2295 × 0028 × 2212 × 0034 × 002C × 0035 × 0029 × 2296 × 0028 × 0036 × 002C × 0037 × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT ZERO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT ONE (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [25.05] PLUS SIGN (PR) × [25.01] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT TWO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT THREE (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [30.02] CIRCLED PLUS (AI_AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] MINUS SIGN (PR) × [25.01] DIGIT FOUR (NU) × [25.03] COMMA (IS) × [25.04] DIGIT FIVE (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) × [30.02] CIRCLED MINUS (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] DIGIT SIX (NU) × [25.03] COMMA (IS) × [25.04] DIGIT SEVEN (NU) × [25.04] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 007B × 0030 × 002C × 0031 × 007D × 002B × 007B × 0032 × 002C × 0033 × 007D ÷ 2295 × 007B × 2212 × 0034 × 002C × 0035 × 007D ÷ 2296 × 007B × 0036 × 002C × 0037 × 007D ÷ # × [0.3] LEFT CURLY BRACKET (OP_OP30) × [14.0] DIGIT ZERO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT ONE (NU) × [25.04] RIGHT CURLY BRACKET (CL) × [25.05] PLUS SIGN (PR) × [25.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] DIGIT TWO (NU) × [25.03] COMMA (IS) × [25.04] DIGIT THREE (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [999.0] CIRCLED PLUS (AI_AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] MINUS SIGN (PR) × [25.01] DIGIT FOUR (NU) × [25.03] COMMA (IS) × [25.04] DIGIT FIVE (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [999.0] CIRCLED MINUS (AL) × [30.01] LEFT CURLY BRACKET (OP_OP30) × [14.0] DIGIT SIX (NU) × [25.03] COMMA (IS) × [25.04] DIGIT SEVEN (NU) × [25.04] RIGHT CURLY BRACKET (CL) ÷ [0.3]
-× 0061 × 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
-× 0061 × 0062 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [0.3]
-× 0061 × 0062 × 0020 ÷ 0063 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) ÷ [0.3]
-× 0061 ÷ 307E ÷ # × [0.3] LATIN SMALL LETTER A (AL) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 0939 × 093F × 0928 × 094D × 0926 × 0940 × 0020 ÷ # × [0.3] DEVANAGARI LETTER HA (AL) × [9.0] DEVANAGARI VOWEL SIGN I (CM1_CM) × [28.0] DEVANAGARI LETTER NA (AL) × [9.0] DEVANAGARI SIGN VIRAMA (CM1_CM) × [28.0] DEVANAGARI LETTER DA (AL) × [9.0] DEVANAGARI VOWEL SIGN II (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 092F × 0938 × 0917 × 0941 × 091A × 093F × 0924 × 0940 × 092F × 0938 × 093E × 0020 ÷ # × [0.3] DEVANAGARI LETTER YA (AL) × [28.0] DEVANAGARI LETTER SA (AL) × [28.0] DEVANAGARI LETTER GA (AL) × [9.0] DEVANAGARI VOWEL SIGN U (CM1_CM) × [28.0] DEVANAGARI LETTER CA (AL) × [9.0] DEVANAGARI VOWEL SIGN I (CM1_CM) × [28.0] DEVANAGARI LETTER TA (AL) × [9.0] DEVANAGARI VOWEL SIGN II (CM1_CM) × [28.0] DEVANAGARI LETTER YA (AL) × [28.0] DEVANAGARI LETTER SA (AL) × [9.0] DEVANAGARI VOWEL SIGN AA (CM1_CM) × [7.01] SPACE (SP) ÷ [0.3]
-× 5370 ÷ 672C ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5370 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
-× 8AAD ÷ 3080 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8AAD (ID) ÷ [999.0] HIRAGANA LETTER MU (ID) ÷ [0.3]
-× 5165 ÷ 529B ÷ 3057 ÷ 30A8 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5165 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-529B (ID) ÷ [999.0] HIRAGANA LETTER SI (ID) ÷ [999.0] KATAKANA LETTER E (ID) ÷ [0.3]
-× 4F4D × 3002 ÷ 8A18 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-4F4D (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8A18 (ID) ÷ [0.3]
-× 672C × 3002 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [0.3]
-× 967A × 300D ÷ 306E ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-967A (ID) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [0.3]
-× 3057 × 3087 ÷ 3046 ÷ # × [0.3] HIRAGANA LETTER SI (ID) × [21.03] HIRAGANA LETTER SMALL YO (CJ_NS) ÷ [999.0] HIRAGANA LETTER U (ID) ÷ [0.3]
-× 307E ÷ 0061 ÷ 672C ÷ # × [0.3] HIRAGANA LETTER MA (ID) ÷ [999.0] LATIN SMALL LETTER A (AL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
-× C5C6 ÷ C5B4 ÷ C694 × 0020 ÷ 006F × 0072 × 0020 ÷ BABB ÷ # × [0.3] HANGUL SYLLABLE EOBS (H3) ÷ [999.0] HANGUL SYLLABLE EO (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER R (AL) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE MOS (H3) ÷ [0.3]
-× 307E ÷ 0061 × 0062 × 0020 ÷ # × [0.3] HIRAGANA LETTER MA (ID) ÷ [999.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [0.3]
-× 3067 ÷ 4F7F ÷ # × [0.3] HIRAGANA LETTER DE (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-4F7F (ID) ÷ [0.3]
-× 3059 ÷ 308B ÷ # × [0.3] HIRAGANA LETTER SU (ID) ÷ [999.0] HIRAGANA LETTER RU (ID) ÷ [0.3]
-× 306E ÷ 30D1 ÷ 30F3 ÷ # × [0.3] HIRAGANA LETTER NO (ID) ÷ [999.0] KATAKANA LETTER PA (ID) ÷ [999.0] KATAKANA LETTER N (ID) ÷ [0.3]
-× 3046 × 3000 ÷ 3048 × 3000 ÷ 304A × 300D ÷ # × [0.3] HIRAGANA LETTER U (ID) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] HIRAGANA LETTER E (ID) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] HIRAGANA LETTER O (ID) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [0.3]
-× 308B × 0020 ÷ C740 ÷ C601 × 0020 ÷ 306B ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE EUN (H3) ÷ [999.0] HANGUL SYLLABLE YEONG (H3) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER NI (ID) ÷ [0.3]
-× 3057 × 3087 ÷ 3046 × 3002 ÷ # × [0.3] HIRAGANA LETTER SI (ID) × [21.03] HIRAGANA LETTER SMALL YO (CJ_NS) ÷ [999.0] HIRAGANA LETTER U (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [0.3]
-× 30E0 ÷ 306E ÷ 4E00 ÷ # × [0.3] KATAKANA LETTER MU (ID) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-4E00 (ID) ÷ [0.3]
-× 30D5 ÷ 30EA ÷ # × [0.3] KATAKANA LETTER HU (ID) ÷ [999.0] KATAKANA LETTER RI (ID) ÷ [0.3]
-× 30D5 ÷ 30EA × 30FC ÷ 767E ÷ # × [0.3] KATAKANA LETTER HU (ID) ÷ [999.0] KATAKANA LETTER RI (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] CJK UNIFIED IDEOGRAPH-767E (ID) ÷ [0.3]
-× 30D4 × 30E5 × 30FC ÷ 30BF ÷ 3067 ÷ 4F7F ÷ 7528 ÷ 3059 ÷ 308B ÷ # × [0.3] KATAKANA LETTER PI (ID) × [21.03] KATAKANA LETTER SMALL YU (CJ_NS) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER TA (ID) ÷ [999.0] HIRAGANA LETTER DE (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-4F7F (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-7528 (ID) ÷ [999.0] HIRAGANA LETTER SU (ID) ÷ [999.0] HIRAGANA LETTER RU (ID) ÷ [0.3]
-× 30BF × 30FC ÷ 30AD × 30FC ÷ 3092 ÷ 62BC ÷ # × [0.3] KATAKANA LETTER TA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KI (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-62BC (ID) ÷ [0.3]
-× 30B7 × 30E7 ÷ 30F3 ÷ # × [0.3] KATAKANA LETTER SI (ID) × [21.03] KATAKANA LETTER SMALL YO (CJ_NS) ÷ [999.0] KATAKANA LETTER N (ID) ÷ [0.3]
-× 0061 × 002E ÷ 0032 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [7.01] SPACE (SP) ÷ [0.3]
-× 0061 × 002E ÷ 0032 × 0020 ÷ 0915 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [7.01] SPACE (SP) ÷ [18.0] DEVANAGARI LETTER KA (AL) ÷ [0.3]
-× 0061 × 002E ÷ 0032 × 0020 ÷ 672C ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
-× 0061 × 002E ÷ 0032 × 3000 ÷ 672C ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
-× 0061 × 002E ÷ 0032 × 3000 ÷ 307E ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 0061 × 002E ÷ 0032 × 3000 ÷ 0033 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] DIGIT THREE (NU) ÷ [0.3]
-× 0061 × 0062 × 002E × 0020 ÷ 0032 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] DIGIT TWO (NU) ÷ [0.3]
-× 0041 × 002E ÷ 0031 × 0020 ÷ BABB ÷ # × [0.3] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT ONE (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE MOS (H3) ÷ [0.3]
-× BD24 ÷ C5B4 × 002E × 0020 ÷ 0041 × 002E ÷ 0032 × 0020 ÷ BCFC ÷ # × [0.3] HANGUL SYLLABLE BWASS (H3) ÷ [999.0] HANGUL SYLLABLE EO (H2) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE BOL (H3) ÷ [0.3]
-× BD10 ÷ C694 × 002E × 0020 ÷ 0041 × 002E ÷ 0033 × 0020 ÷ BABB ÷ # × [0.3] HANGUL SYLLABLE BWA (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT THREE (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE MOS (H3) ÷ [0.3]
-× C694 × 002E × 0020 ÷ 0041 × 002E ÷ 0034 × 0020 ÷ BABB ÷ # × [0.3] HANGUL SYLLABLE YO (H2) × [13.02] FULL STOP (IS) × [7.01] SPACE (SP) ÷ [18.0] LATIN CAPITAL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT FOUR (NU) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE MOS (H3) ÷ [0.3]
-× 0061 × 002E ÷ 0032 × 3000 ÷ 300C ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULL STOP (IS) ÷ [999.0] DIGIT TWO (NU) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] LEFT CORNER BRACKET (OP) ÷ [0.3]
-× 306B ÷ 300C × 30D0 ÷ 0028 × 0062 × 0061 × 0029 × 300D ÷ 3084 ÷ 300C × 30B9 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER BA (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER B (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER YA (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER SU (ID) ÷ [0.3]
-× 308B ÷ 300C × 0055 × 004B ÷ 30DD ÷ 30F3 ÷ 30C9 × 300D × FF09 × 3001 ÷ 30A8 ÷ # × [0.3] HIRAGANA LETTER RU (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] LATIN CAPITAL LETTER U (AL) × [28.0] LATIN CAPITAL LETTER K (AL) ÷ [999.0] KATAKANA LETTER PO (ID) ÷ [999.0] KATAKANA LETTER N (ID) ÷ [999.0] KATAKANA LETTER DO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] KATAKANA LETTER E (ID) ÷ [0.3]
-× 306F × 3001 ÷ 300C × 003D × 0072 × 0061 × 006E × 0064 × 0028 × 0029 × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] EQUALS SIGN (AL) × [28.0] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER N (AL) × [28.0] LATIN SMALL LETTER D (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
-× 3067 × 3001 ÷ 300C × 0021 × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER DE (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
-× 8A33 ÷ 300C × 3059 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8A33 (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER SU (ID) ÷ [0.3]
-× 3066 ÷ 300C × BD24 ÷ C5B4 × 003F × 300D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER TE (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE BWASS (H3) ÷ [999.0] HANGUL SYLLABLE EO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
-× 306E ÷ 300C × 305D ÷ # × [0.3] HIRAGANA LETTER NO (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER SO (ID) ÷ [0.3]
-× 306F ÷ 300C × 30A8 ÷ # × [0.3] HIRAGANA LETTER HA (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] KATAKANA LETTER E (ID) ÷ [0.3]
-× 4F8B × FF1A ÷ 300C × 3042 × 3000 ÷ 3044 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-4F8B (ID) × [21.03] FULLWIDTH COLON (NS) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HIRAGANA LETTER A (ID) × [21.01] IDEOGRAPHIC SPACE (BA) ÷ [999.0] HIRAGANA LETTER I (ID) ÷ [0.3]
-× 304F × 3001 ÷ 300C × D3C9 ÷ C591 ÷ C740 ÷ # × [0.3] HIRAGANA LETTER KU (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE PYEONG (H3) ÷ [999.0] HANGUL SYLLABLE YANG (H3) ÷ [999.0] HANGUL SYLLABLE EUN (H3) ÷ [0.3]
-× 306B ÷ 300C × C81C ÷ BAA9 ÷ 0028 × 984C ÷ 540D × 0029 ÷ C740 ÷ # × [0.3] HIRAGANA LETTER NI (ID) ÷ [999.0] LEFT CORNER BRACKET (OP) × [14.0] HANGUL SYLLABLE JE (H2) ÷ [999.0] HANGUL SYLLABLE MOG (H3) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-984C (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-540D (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE EUN (H3) ÷ [0.3]
-× 5178 ÷ 300E × 30A6 × 30A3 ÷ 30AD ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5178 (ID) ÷ [999.0] LEFT WHITE CORNER BRACKET (OP) × [14.0] KATAKANA LETTER U (ID) × [21.03] KATAKANA LETTER SMALL I (CJ_NS) ÷ [999.0] KATAKANA LETTER KI (ID) ÷ [0.3]
-× 3067 ÷ 300E × 82F1 ÷ 8A9E ÷ # × [0.3] HIRAGANA LETTER DE (ID) ÷ [999.0] LEFT WHITE CORNER BRACKET (OP) × [14.0] CJK UNIFIED IDEOGRAPH-82F1 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-8A9E (ID) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0020 ÷ 672C ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0020 ÷ 307E ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 0028 × 0073 × 0029 × 0020 ÷ 30AF ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 308B × 3002 ÷ 0064 × 006F × 0067 ÷ FF08 × 72AC × FF09 ÷ 3092 ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER G (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] CJK UNIFIED IDEOGRAPH-72AC (ID) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
-× 672C ÷ FF08 × 307E ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 672C × 0020 ÷ 0028 × 0061 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 70B9 × 0020 ÷ 005B × 7DE8 ÷ 96C6 × 005D ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-70B9 (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT SQUARE BRACKET (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-7DE8 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-96C6 (ID) × [13.02] RIGHT SQUARE BRACKET (CP_CP30) ÷ [0.3]
-× 0061 × 0028 × 0073 × 0029 × 0020 ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [30.01] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [0.3]
-× FF08 × 30B6 × 30FB ÷ 30AF ÷ 30A4 × 30C3 ÷ 30AF × 30FB ÷ 30D6 ÷ # × [0.3] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER ZA (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] KATAKANA LETTER I (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER BU (ID) ÷ [0.3]
-× 0070 ÷ FF08 × 30AF ÷ 30A4 × 30C3 ÷ 30AF × 30FB ÷ 30D6 ÷ # × [0.3] LATIN SMALL LETTER P (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [999.0] KATAKANA LETTER I (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER BU (ID) ÷ [0.3]
-× 0061 × 0062 ÷ FF08 × 30AF ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 0028 × 5370 ÷ 672C × 0029 ÷ # × [0.3] LEFT PARENTHESIS (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-5370 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [0.3]
-× 30B9 ÷ FF08 × 3044 ÷ # × [0.3] KATAKANA LETTER SU (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER I (ID) ÷ [0.3]
-× 30C9 ÷ FF08 × 30DD ÷ # × [0.3] KATAKANA LETTER DO (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] KATAKANA LETTER PO (ID) ÷ [0.3]
-× 30C9 × 0020 ÷ 0028 × 8CEA ÷ # × [0.3] KATAKANA LETTER DO (ID) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] CJK UNIFIED IDEOGRAPH-8CEA (ID) ÷ [0.3]
-× 0073 × 0029 × 300D ÷ 307E ÷ # × [0.3] LATIN SMALL LETTER S (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 0061 × FF09 × 300F ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] RIGHT WHITE CORNER BRACKET (CL) ÷ [0.3]
-× 308B × 300D × FF09 ÷ 306F ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) ÷ [999.0] HIRAGANA LETTER HA (ID) ÷ [0.3]
-× 30C9 × 300D × FF09 × 3001 ÷ 30A8 ÷ # × [0.3] KATAKANA LETTER DO (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] KATAKANA LETTER E (ID) ÷ [0.3]
-× 0072 × 006B × 0029 × 300D ÷ 3082 ÷ # × [0.3] LATIN SMALL LETTER R (AL) × [28.0] LATIN SMALL LETTER K (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MO (ID) ÷ [0.3]
-× 30AF ÷ 0028 × 0061 × 0062 × 0020 ÷ 0063 × 0064 × 0029 × 300D ÷ 3082 ÷ # × [0.3] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [18.0] LATIN SMALL LETTER C (AL) × [28.0] LATIN SMALL LETTER D (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MO (ID) ÷ [0.3]
-× 30F3 × 30FB ÷ 30DE × 30FC ÷ 30AF ÷ 0028 × 0065 × 0078 ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER E (AL) × [28.0] LATIN SMALL LETTER X (AL) ÷ [0.3]
-× 30DE × 30FC ÷ 0028 × 006D × 0061 × 0029 × 300D ÷ 306A ÷ # × [0.3] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER M (AL) × [28.0] LATIN SMALL LETTER A (AL) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER NA (ID) ÷ [0.3]
-× 30AC ÷ 30EF × 300D × 3002 ÷ 3053 ÷ # × [0.3] KATAKANA LETTER GA (ID) ÷ [999.0] KATAKANA LETTER WA (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] HIRAGANA LETTER KO (ID) ÷ [0.3]
-× 30AF × 300D ÷ 307E ÷ # × [0.3] KATAKANA LETTER KU (ID) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 30EF × 300D × 3002 ÷ 3053 ÷ # × [0.3] KATAKANA LETTER WA (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] HIRAGANA LETTER KO (ID) ÷ [0.3]
-× 30AF × 300D ÷ 307E × 3001 ÷ 672C ÷ # × [0.3] KATAKANA LETTER KU (ID) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER MA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
-× 30AF × 300D × 3001 ÷ 30AF ÷ # × [0.3] KATAKANA LETTER KU (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 30C7 × 30A3 ÷ 30A2 ÷ FF08 × 0061 × 0062 × FF09 × 300F ÷ # × [0.3] KATAKANA LETTER DE (ID) × [21.03] KATAKANA LETTER SMALL I (CJ_NS) ÷ [999.0] KATAKANA LETTER A (ID) ÷ [999.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [13.02] RIGHT WHITE CORNER BRACKET (CL) ÷ [0.3]
-× CABD ÷ C774 ÷ C5D0 ÷ C694 × 003F × 300D ÷ 3068 ÷ 805E ÷ # × [0.3] HANGUL SYLLABLE JJOG (H3) ÷ [999.0] HANGUL SYLLABLE I (H2) ÷ [999.0] HANGUL SYLLABLE E (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-805E (ID) ÷ [0.3]
-× 540D × 0029 ÷ C740 × 0020 ÷ C54C ÷ C544 ÷ C694 × 003F × 300D ÷ 3068 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-540D (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HANGUL SYLLABLE EUN (H3) × [7.01] SPACE (SP) ÷ [18.0] HANGUL SYLLABLE AL (H3) ÷ [999.0] HANGUL SYLLABLE A (H2) ÷ [999.0] HANGUL SYLLABLE YO (H2) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT CORNER BRACKET (CL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
-× 8CA8 × 0029 × 0020 ÷ 002D × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8CA8 (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) ÷ [18.0] HYPHEN-MINUS (HY) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
-× 91CF × 0029 × 0020 × 301C × 0020 ÷ 0028 × 0070 × 006F ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-91CF (ID) × [13.02] RIGHT PARENTHESIS (CP_CP30) × [7.01] SPACE (SP) × [16.0] WAVE DASH (NS) × [7.01] SPACE (SP) ÷ [18.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER P (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [0.3]
-× 30C9 ÷ 91CD × FF09 × 0020 × 301C × 0020 ÷ 529B × 30FB ÷ 91CD ÷ # × [0.3] KATAKANA LETTER DO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-91CD (ID) × [13.02] FULLWIDTH RIGHT PARENTHESIS (CL) × [7.01] SPACE (SP) × [16.0] WAVE DASH (NS) × [7.01] SPACE (SP) ÷ [18.0] CJK UNIFIED IDEOGRAPH-529B (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] CJK UNIFIED IDEOGRAPH-91CD (ID) ÷ [0.3]
-× 0061 × 0062 × 0022 × FF08 × 307E ÷ # × [0.3] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [19.01] QUOTATION MARK (QU) × [15.0] FULLWIDTH LEFT PARENTHESIS (OP) × [14.0] HIRAGANA LETTER MA (ID) ÷ [0.3]
-× 306F × 0020 ÷ 0022 × 0073 × 0022 × 0020 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [7.01] SPACE (SP) ÷ [18.0] QUOTATION MARK (QU) × [19.02] LATIN SMALL LETTER S (AL) × [19.01] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [0.3]
-× 306F × 3001 × 0022 × 0054 × 0068 × 0065 × 0020 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [19.01] QUOTATION MARK (QU) × [19.02] LATIN CAPITAL LETTER T (AL) × [28.0] LATIN SMALL LETTER H (AL) × [28.0] LATIN SMALL LETTER E (AL) × [7.01] SPACE (SP) ÷ [0.3]
-× 0064 × 006F × 0067 × 0022 × 0020 ÷ 3092 ÷ # × [0.3] LATIN SMALL LETTER D (AL) × [28.0] LATIN SMALL LETTER O (AL) × [28.0] LATIN SMALL LETTER G (AL) × [19.01] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
-× 0039 × 0030 × 0022 × 0020 ÷ 3068 ÷ # × [0.3] DIGIT NINE (NU) × [25.03] DIGIT ZERO (NU) × [19.01] QUOTATION MARK (QU) × [7.01] SPACE (SP) ÷ [18.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
-× 30B9 × 30FB ÷ 30AA × 30FC ÷ 30D0 × 30FC × 30FB ÷ 30B6 × 30FB ÷ 30EC ÷ # × [0.3] KATAKANA LETTER SU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER O (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER BA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER ZA (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER RE (ID) ÷ [0.3]
-× 30B9 × 30FB ÷ 30B8 × 30E3 ÷ 30F3 ÷ # × [0.3] KATAKANA LETTER SU (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER ZI (ID) × [21.03] KATAKANA LETTER SMALL YA (CJ_NS) ÷ [999.0] KATAKANA LETTER N (ID) ÷ [0.3]
-× 30F3 × 30FB ÷ 30D5 × 30A9 × 30C3 ÷ 30AF ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER HU (ID) × [21.03] KATAKANA LETTER SMALL O (CJ_NS) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 30A4 ÷ 30B8 × 30FC × 30FB ÷ 30C9 × 30C3 ÷ 30B0 × 3001 ÷ 548C ÷ # × [0.3] KATAKANA LETTER I (ID) ÷ [999.0] KATAKANA LETTER ZI (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER DO (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER GU (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-548C (ID) ÷ [0.3]
-× 30E1 × 30FC ÷ 30B7 × 30E7 ÷ 30F3 × 30FB ÷ 30DE × 30FC ÷ 30AF ÷ # × [0.3] KATAKANA LETTER ME (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER SI (ID) × [21.03] KATAKANA LETTER SMALL YO (CJ_NS) ÷ [999.0] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER MA (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 30F3 × 30FB ÷ 30AF ÷ 0028 × 0061 ÷ # × [0.3] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER KU (ID) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [14.0] LATIN SMALL LETTER A (AL) ÷ [0.3]
-× 30B7 × 30E7 ÷ 30F3 × 30FB ÷ 30DE ÷ # × [0.3] KATAKANA LETTER SI (ID) × [21.03] KATAKANA LETTER SMALL YO (CJ_NS) ÷ [999.0] KATAKANA LETTER N (ID) × [21.03] KATAKANA MIDDLE DOT (NS) ÷ [999.0] KATAKANA LETTER MA (ID) ÷ [0.3]
-× 672C × 003A × 0020 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [0.3]
-× 672C × 003A × 0020 ÷ 30AF ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-672C (ID) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER KU (ID) ÷ [0.3]
-× 51FA ÷ 5178 × 003A × 0020 ÷ 30D5 ÷ 30EA × 30FC ÷ 767E ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-51FA (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-5178 (ID) × [13.02] COLON (IS) × [7.01] SPACE (SP) ÷ [18.0] KATAKANA LETTER HU (ID) ÷ [999.0] KATAKANA LETTER RI (ID) × [21.03] KATAKANA-HIRAGANA PROLONGED SOUND MARK (CJ_NS) ÷ [999.0] CJK UNIFIED IDEOGRAPH-767E (ID) ÷ [0.3]
-× 5F8C × 2026 ÷ 306B ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-5F8C (ID) × [22.0] HORIZONTAL ELLIPSIS (IN) ÷ [999.0] HIRAGANA LETTER NI (ID) ÷ [0.3]
-× 3057 × 3087 ÷ 3046 × 3002 × 3002 × 3002 ÷ # × [0.3] HIRAGANA LETTER SI (ID) × [21.03] HIRAGANA LETTER SMALL YO (CJ_NS) ÷ [999.0] HIRAGANA LETTER U (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [0.3]
-× 304D × 3001 × 0021 × 0021 × 3001 × 0021 × 0021 × 0021 ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER KI (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [13.01] EXCLAMATION MARK (EX) × [13.01] EXCLAMATION MARK (EX) × [13.02] IDEOGRAPHIC COMMA (CL) × [13.01] EXCLAMATION MARK (EX) × [13.01] EXCLAMATION MARK (EX) × [13.01] EXCLAMATION MARK (EX) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
-× 306F × 3001 × 003F ÷ 3068 × 0021 ÷ 3092 ÷ # × [0.3] HIRAGANA LETTER HA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [13.01] QUESTION MARK (EX) ÷ [999.0] HIRAGANA LETTER TO (ID) × [13.01] EXCLAMATION MARK (EX) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
-× 305F × 3001 × 2049 ÷ 0028 × 0021 × 003F × 0029 ÷ 306E ÷ # × [0.3] HIRAGANA LETTER TA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [16.0] EXCLAMATION QUESTION MARK (NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [13.01] EXCLAMATION MARK (EX) × [13.01] QUESTION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [0.3]
-× 3084 × 3001 × 2048 ÷ 0028 × 003F × 0021 × 0029 ÷ 306E ÷ # × [0.3] HIRAGANA LETTER YA (ID) × [13.02] IDEOGRAPHIC COMMA (CL) × [16.0] QUESTION EXCLAMATION MARK (NS) ÷ [999.0] LEFT PARENTHESIS (OP_OP30) × [13.01] QUESTION MARK (EX) × [13.01] EXCLAMATION MARK (EX) × [13.02] RIGHT PARENTHESIS (CP_CP30) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [0.3]
-× 305F × 0020 ÷ 203D ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER TA (ID) × [7.01] SPACE (SP) ÷ [18.0] INTERROBANG (NS) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
-× 305B × FF01 ÷ 0031 × 0030 × 0030 × 0025 ÷ 306E ÷ 5B8C ÷ # × [0.3] HIRAGANA LETTER SE (ID) × [13.01] FULLWIDTH EXCLAMATION MARK (EX) ÷ [999.0] DIGIT ONE (NU) × [25.03] DIGIT ZERO (NU) × [25.03] DIGIT ZERO (NU) × [25.05] PERCENT SIGN (PO) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-5B8C (ID) ÷ [0.3]
-× 0032 × 0033 ÷ 672C ÷ # × [0.3] DIGIT TWO (NU) × [25.03] DIGIT THREE (NU) ÷ [999.0] CJK UNIFIED IDEOGRAPH-672C (ID) ÷ [0.3]
-× 30A1 ÷ 30D9 × 30C3 ÷ 30C8 ÷ 0032 × 0036 ÷ 5B57 ÷ 3092 ÷ # × [0.3] KATAKANA LETTER SMALL A (CJ_NS) ÷ [999.0] KATAKANA LETTER BE (ID) × [21.03] KATAKANA LETTER SMALL TU (CJ_NS) ÷ [999.0] KATAKANA LETTER TO (ID) ÷ [999.0] DIGIT TWO (NU) × [25.03] DIGIT SIX (NU) ÷ [999.0] CJK UNIFIED IDEOGRAPH-5B57 (ID) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
-× 4F8B × FF1A ÷ 00A3 × 0032 × 0033 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-4F8B (ID) × [21.03] FULLWIDTH COLON (NS) ÷ [999.0] POUND SIGN (PR) × [25.01] DIGIT TWO (NU) × [25.03] DIGIT THREE (NU) ÷ [0.3]
-× 8A18 ÷ 53F7 × 0020 ÷ 00A3 × 3002 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8A18 (ID) ÷ [999.0] CJK UNIFIED IDEOGRAPH-53F7 (ID) × [7.01] SPACE (SP) ÷ [18.0] POUND SIGN (PR) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [0.3]
-× 308C ÷ 308B × 3002 ÷ 0071 × 0075 ÷ # × [0.3] HIRAGANA LETTER RE (ID) ÷ [999.0] HIRAGANA LETTER RU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN SMALL LETTER Q (AL) × [28.0] LATIN SMALL LETTER U (AL) ÷ [0.3]
-× 307E × 3002 ÷ # × [0.3] HIRAGANA LETTER MA (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [0.3]
-× 307E × 3002 ÷ 0061 × 0062 × 0020 ÷ # × [0.3] HIRAGANA LETTER MA (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) × [7.01] SPACE (SP) ÷ [0.3]
-× 308B × 3002 ÷ 6570 ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-6570 (ID) ÷ [0.3]
-× 308B × 3002 ÷ 3053 ÷ # × [0.3] HIRAGANA LETTER RU (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] HIRAGANA LETTER KO (ID) ÷ [0.3]
-× 3044 × 3002 ÷ 30D1 ÷ # × [0.3] HIRAGANA LETTER I (ID) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] KATAKANA LETTER PA (ID) ÷ [0.3]
-× 30AC ÷ 30EF × 300D × 3002 ÷ 3053 ÷ 308C ÷ # × [0.3] KATAKANA LETTER GA (ID) ÷ [999.0] KATAKANA LETTER WA (ID) × [13.02] RIGHT CORNER BRACKET (CL) × [13.02] IDEOGRAPHIC FULL STOP (CL) ÷ [999.0] HIRAGANA LETTER KO (ID) ÷ [999.0] HIRAGANA LETTER RE (ID) ÷ [0.3]
-× 8A9E ÷ 306E ÷ 0069 × 006F ÷ 306E × 3001 ÷ 0032 ÷ 5B57 ÷ 3092 ÷ # × [0.3] CJK UNIFIED IDEOGRAPH-8A9E (ID) ÷ [999.0] HIRAGANA LETTER NO (ID) ÷ [999.0] LATIN SMALL LETTER I (AL) × [28.0] LATIN SMALL LETTER O (AL) ÷ [999.0] HIRAGANA LETTER NO (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] DIGIT TWO (NU) ÷ [999.0] CJK UNIFIED IDEOGRAPH-5B57 (ID) ÷ [999.0] HIRAGANA LETTER WO (ID) ÷ [0.3]
-× 3001 ÷ 548C ÷ # × [0.3] IDEOGRAPHIC COMMA (CL) ÷ [999.0] CJK UNIFIED IDEOGRAPH-548C (ID) ÷ [0.3]
-× 3001 ÷ 30BF ÷ # × [0.3] IDEOGRAPHIC COMMA (CL) ÷ [999.0] KATAKANA LETTER TA (ID) ÷ [0.3]
-× 3001 ÷ 304B ÷ # × [0.3] IDEOGRAPHIC COMMA (CL) ÷ [999.0] HIRAGANA LETTER KA (ID) ÷ [0.3]
-× 3001 ÷ 3053 ÷ 308C ÷ 3067 ÷ 306F × 0020 ÷ # × [0.3] IDEOGRAPHIC COMMA (CL) ÷ [999.0] HIRAGANA LETTER KO (ID) ÷ [999.0] HIRAGANA LETTER RE (ID) ÷ [999.0] HIRAGANA LETTER DE (ID) ÷ [999.0] HIRAGANA LETTER HA (ID) × [7.01] SPACE (SP) ÷ [0.3]
-× 3057 × 3001 ÷ 0061 × 0062 ÷ 3068 ÷ # × [0.3] HIRAGANA LETTER SI (ID) × [13.02] IDEOGRAPHIC COMMA (CL) ÷ [999.0] LATIN SMALL LETTER A (AL) × [28.0] LATIN SMALL LETTER B (AL) ÷ [999.0] HIRAGANA LETTER TO (ID) ÷ [0.3]
-× 0061 ÷ 1F1E6 ÷ 0062 ÷ # × [0.3] LATIN SMALL LETTER A (AL) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER B (AL) ÷ [0.3]
-× 1F1F7 × 1F1FA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) ÷ [0.3]
-× 1F1F7 × 1F1FA ÷ 1F1F8 ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) ÷ [30.13] REGIONAL INDICATOR SYMBOL LETTER S (RI) ÷ [0.3]
-× 1F1F7 × 1F1FA ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) ÷ [30.13] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
-× 1F1F7 × 1F1FA × 200B ÷ 1F1F8 × 1F1EA ÷ # × [0.3] REGIONAL INDICATOR SYMBOL LETTER R (RI) × [30.11] REGIONAL INDICATOR SYMBOL LETTER U (RI) × [7.02] ZERO WIDTH SPACE (ZW) ÷ [8.0] REGIONAL INDICATOR SYMBOL LETTER S (RI) × [30.12] REGIONAL INDICATOR SYMBOL LETTER E (RI) ÷ [0.3]
-× 05D0 × 002D × 05D0 ÷ # × [0.3] HEBREW LETTER ALEF (HL) × [21.02] HYPHEN-MINUS (HY) × [21.1] HEBREW LETTER ALEF (HL) ÷ [0.3]
-× 1F02C × 1F3FF ÷ # × [0.3] <reserved-1F02C> (Other) × [30.22] EMOJI MODIFIER FITZPATRICK TYPE-6 (EM) ÷ [0.3]
-× 00A9 ÷ 1F3FF ÷ # × [0.3] COPYRIGHT SIGN (AL) ÷ [999.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (EM) ÷ [0.3]
-#
-# Lines: 7654
-#
-# EOF
diff --git a/tests/auto/corelib/text/qtextboundaryfinder/data/ReadMe.full.txt b/tests/auto/corelib/text/qtextboundaryfinder/data/ReadMe.full.txt
deleted file mode 100644
index bf370ad9be..0000000000
--- a/tests/auto/corelib/text/qtextboundaryfinder/data/ReadMe.full.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-Temporary kludge at UCD Revision 24--26 until code can be fixed up.
-
-57+53 of the tests defined by the UCD data are here commented out.
-The raw upstream files are provided as *.txt.full where this was needed.
diff --git a/tests/auto/corelib/text/qtextboundaryfinder/data/SentenceBreakTest.txt b/tests/auto/corelib/text/qtextboundaryfinder/data/SentenceBreakTest.txt
index 61ea42cf1a..d2d28275b0 100644
--- a/tests/auto/corelib/text/qtextboundaryfinder/data/SentenceBreakTest.txt
+++ b/tests/auto/corelib/text/qtextboundaryfinder/data/SentenceBreakTest.txt
@@ -1,11 +1,11 @@
-# SentenceBreakTest-14.0.0.txt
-# Date: 2021-03-08, 06:22:40 GMT
-# © 2021 Unicode®, Inc.
+# SentenceBreakTest-15.1.0.txt
+# Date: 2023-04-05, 20:41:29 GMT
+# © 2023 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see https://www.unicode.org/reports/tr44/
#
# Default Sentence_Break Test
#
@@ -500,6 +500,11 @@
÷ 0065 × 0074 × 0063 × 002E × 3002 ÷ # ÷ [0.2] LATIN SMALL LETTER E (Lower) × [998.0] LATIN SMALL LETTER T (Lower) × [998.0] LATIN SMALL LETTER C (Lower) × [998.0] FULL STOP (ATerm) × [8.1] IDEOGRAPHIC FULL STOP (STerm) ÷ [0.3]
÷ 5B57 × 3002 ÷ 5B83 ÷ # ÷ [0.2] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [998.0] IDEOGRAPHIC FULL STOP (STerm) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) ÷ [0.3]
÷ 0021 × 0020 × 0020 ÷ # ÷ [0.2] EXCLAMATION MARK (STerm) × [9.0] SPACE (Sp) × [10.0] SPACE (Sp) ÷ [0.3]
+÷ 0061 × 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] FULL STOP (ATerm) ÷ [0.3]
+÷ 0061 × 002E × 000D × 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] FULL STOP (ATerm) × [9.0] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0061 × 002E × 000D × 000A ÷ 0020 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] FULL STOP (ATerm) × [9.0] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [4.0] SPACE (Sp) ÷ [0.3]
+÷ 0061 × 002E × 000D × 000A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (Lower) × [998.0] FULL STOP (ATerm) × [9.0] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [4.0] LATIN SMALL LETTER A (Lower) ÷ [0.3]
+÷ 0041 × 002E × 000D × 000A ÷ 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (Upper) × [998.0] FULL STOP (ATerm) × [9.0] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [4.0] LATIN CAPITAL LETTER A (Upper) ÷ [0.3]
÷ 2060 × 0028 × 2060 × 0022 × 2060 × 0047 × 2060 × 006F × 2060 × 002E × 2060 × 0022 × 2060 × 0029 × 2060 × 0020 × 2060 ÷ 0028 × 2060 × 0048 × 2060 × 0065 × 2060 × 0020 × 2060 × 0064 × 2060 × 0069 × 2060 × 0064 × 2060 × 002E × 2060 × 0029 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER G (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER O (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER H (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER I (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 2060 × 0028 × 2060 × 201C × 2060 × 0047 × 2060 × 006F × 2060 × 003F × 2060 × 201D × 2060 × 0029 × 2060 × 0020 × 2060 ÷ 0028 × 2060 × 0048 × 2060 × 0065 × 2060 × 0020 × 2060 × 0064 × 2060 × 0069 × 2060 × 0064 × 2060 × 002E × 2060 × 0029 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LEFT DOUBLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER G (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER O (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] QUESTION MARK (STerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT DOUBLE QUOTATION MARK (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [9.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] LEFT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER H (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER I (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER D (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] RIGHT PARENTHESIS (Close) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 2060 × 0055 × 2060 × 002E × 2060 × 0053 × 2060 × 002E × 2060 × 0041 × 2060 × 0300 × 002E × 2060 × 0020 × 2060 × 0069 × 2060 × 0073 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER U (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER S (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER A (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] COMBINING GRAVE ACCENT (Extend_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [8.0] LATIN SMALL LETTER I (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER S (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
@@ -524,7 +529,12 @@
÷ 2060 × 0065 × 2060 × 0074 × 2060 × 0063 × 2060 × 002E × 2060 × 3002 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER E (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER T (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER C (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [8.1] IDEOGRAPHIC FULL STOP (STerm) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 2060 × 5B57 × 2060 × 3002 × 2060 ÷ 5B83 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] CJK UNIFIED IDEOGRAPH-5B57 (OLetter) × [5.0] WORD JOINER (Format_FE) × [998.0] IDEOGRAPHIC FULL STOP (STerm) × [5.0] WORD JOINER (Format_FE) ÷ [11.0] CJK UNIFIED IDEOGRAPH-5B83 (OLetter) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 2060 × 0021 × 2060 × 0020 × 2060 × 0020 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] EXCLAMATION MARK (STerm) × [5.0] WORD JOINER (Format_FE) × [9.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [10.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0061 × 2060 × 002E × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER A (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0061 × 2060 × 002E × 2060 × 000D ÷ 2060 × 000A ÷ 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER A (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] WORD JOINER (Format_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0061 × 2060 × 002E × 2060 × 000D ÷ 2060 × 000A ÷ 0020 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER A (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] WORD JOINER (Format_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [4.0] SPACE (Sp) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0061 × 2060 × 002E × 2060 × 000D ÷ 2060 × 000A ÷ 0061 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN SMALL LETTER A (Lower) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] WORD JOINER (Format_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [4.0] LATIN SMALL LETTER A (Lower) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 2060 × 0041 × 2060 × 002E × 2060 × 000D ÷ 2060 × 000A ÷ 0041 × 2060 × 2060 ÷ # ÷ [0.2] WORD JOINER (Format_FE) × [998.0] LATIN CAPITAL LETTER A (Upper) × [5.0] WORD JOINER (Format_FE) × [998.0] FULL STOP (ATerm) × [5.0] WORD JOINER (Format_FE) × [9.0] <CARRIAGE RETURN (CR)> (CR) ÷ [4.0] WORD JOINER (Format_FE) × [998.0] <LINE FEED (LF)> (LF) ÷ [4.0] LATIN CAPITAL LETTER A (Upper) × [5.0] WORD JOINER (Format_FE) × [5.0] WORD JOINER (Format_FE) ÷ [0.3]
#
-# Lines: 502
+# Lines: 512
#
# EOF
diff --git a/tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.html b/tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.html
index c14c0f7f1f..5d5d443ffc 100644
--- a/tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.html
+++ b/tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.html
@@ -6,8 +6,8 @@ td, th { vertical-align: top }
</style></head>
<body bgcolor='#FFFFFF'>
<h2>Word_Break Chart</h2>
-<p><b>Unicode Version:</b> 14.0.0</p>
-<p><b>Date:</b> 2021-07-10, 00:35:32 GMT</p>
+<p><b>Unicode Version:</b> 15.1.0</p>
+<p><b>Date:</b> 2023-03-31, 14:30:32 GMT</p>
<p>This page illustrates the application of the Word_Break specification. The material here is informative, not normative.</p> <p>The first chart shows where breaks would appear between different sample characters or strings. The sample characters are chosen mechanically to represent the different properties used by the specification.</p><p>Each cell shows the break-status for the position between the character(s) in its row header and the character(s) in its column header. The × symbol indicates no break, while the ÷ symbol indicated a break. The cells with × are also shaded to make it easier to scan the table. For example, in the cell at the intersection of the row headed by “CR†and the column headed by “LFâ€, there is a × symbol, indicating that there is no break between CR and LF.</p>
<p>After the heavy blue line in the table are additional rows, either with different sample characters or for sequences, such as “ALetter MidLetterâ€. Some column headers may be composed, reflecting “treat as†or “ignore†rules.</p>
<p>If your browser handles titles (tooltips), then hovering the mouse over the row header will show a sample character of that type. Hovering over a column header will show the sample character, plus its abbreviated general category and script. Hovering over the intersected cells shows the rule number that produces the break-status. For example, hovering over the cell at the intersection of ExtendNumLet and ALetter shows ×, with the rule 13.2. Checking below the table, rule 13.2 is “ExtendNumLet × (AHLetter | Numeric | Katakana)â€, which is the one that applies to that case. Note that a rule is invoked only when no lower-numbered rules have applied.</p>
@@ -89,90 +89,99 @@ td, th { vertical-align: top }
<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0646 ARABIC LETTER NOON (ALetter)'>&#x646;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0020 SPACE (WSegSpace)'> </span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s5' name='s5'>5</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0671 ARABIC LETTER ALEF WASLA (ALetter)'>&#x671;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0644 ARABIC LETTER LAM (ALetter)'>&#x644;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0631 ARABIC LETTER REH (ALetter)'>&#x631;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+064E ARABIC FATHA (Extend_FE)'>&#x25CC;&#x64E;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0651 ARABIC SHADDA (Extend_FE)'>&#x25CC;&#x651;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+062D ARABIC LETTER HAH (ALetter)'>&#x62D;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0650 ARABIC KASRA (Extend_FE)'>&#x25CC;&#x650;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+064A ARABIC LETTER YEH (ALetter)'>&#x64A;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0645 ARABIC LETTER MEEM (ALetter)'>&#x645;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0650 ARABIC KASRA (Extend_FE)'>&#x25CC;&#x650;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0020 SPACE (WSegSpace)'> </span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+06DD ARABIC END OF AYAH (Numeric)'>&#x25A1;</span><span title='8.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0661 ARABIC-INDIC DIGIT ONE (Numeric)'>&#x661;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s6' name='s6'>6</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='6.0'><span>&nbsp;</span>&nbsp;</span><span title='U+003A COLON (MidLetter)'>:</span><span title='7.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0721 SYRIAC LETTER MIM (ALetter)'>&#x721;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0719 SYRIAC LETTER ZAIN (ALetter)'>&#x719;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0721 SYRIAC LETTER MIM (ALetter)'>&#x721;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0718 SYRIAC LETTER WAW (ALetter)'>&#x718;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+072A SYRIAC LETTER RISH (ALetter)'>&#x72A;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0710 SYRIAC LETTER ALAPH (ALetter)'>&#x710;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0020 SPACE (WSegSpace)'> </span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+070F SYRIAC ABBREVIATION MARK (ALetter)'>&#x25A1;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+071D SYRIAC LETTER YUDH (ALetter)'>&#x71D;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0717 SYRIAC LETTER HE (ALetter)'>&#x717;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s7' name='s7'>7</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+003A COLON (MidLetter)'>:</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+003A COLON (MidLetter)'>:</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+072C SYRIAC LETTER TAW (ALetter)'>&#x72C;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+070F SYRIAC ABBREVIATION MARK (ALetter)'>&#x25A1;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+072B SYRIAC LETTER SHIN (ALetter)'>&#x72B;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0712 SYRIAC LETTER BETH (ALetter)'>&#x712;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0718 SYRIAC LETTER WAW (ALetter)'>&#x718;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s8' name='s8'>8</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+05D0 HEBREW LETTER ALEF (Hebrew_Letter)'>&#x5D0;</span><span title='7.1'><span>&nbsp;</span>&nbsp;</span><span title='U+0027 APOSTROPHE (Single_Quote)'>'</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s9' name='s9'>9</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+05D0 HEBREW LETTER ALEF (Hebrew_Letter)'>&#x5D0;</span><span title='7.2'><span>&nbsp;</span>&nbsp;</span><span title='U+0022 QUOTATION MARK (Double_Quote)'>&quot;</span><span title='7.3'><span>&nbsp;</span>&nbsp;</span><span title='U+05D0 HEBREW LETTER ALEF (Hebrew_Letter)'>&#x5D0;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='6.0'><span>&nbsp;</span>&nbsp;</span><span title='U+003A COLON (MidLetter)'>:</span><span title='7.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s10' name='s10'>10</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='9.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='8.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='10.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+003A COLON (MidLetter)'>:</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+003A COLON (MidLetter)'>:</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s11' name='s11'>11</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='12.0'><span>&nbsp;</span>&nbsp;</span><span title='U+002C COMMA (MidNum)'>,</span><span title='11.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+05D0 HEBREW LETTER ALEF (Hebrew_Letter)'>&#x5D0;</span><span title='7.1'><span>&nbsp;</span>&nbsp;</span><span title='U+0027 APOSTROPHE (Single_Quote)'>'</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s12' name='s12'>12</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+002C COMMA (MidNum)'>,</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+002C COMMA (MidNum)'>,</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+05D0 HEBREW LETTER ALEF (Hebrew_Letter)'>&#x5D0;</span><span title='7.2'><span>&nbsp;</span>&nbsp;</span><span title='U+0022 QUOTATION MARK (Double_Quote)'>&quot;</span><span title='7.3'><span>&nbsp;</span>&nbsp;</span><span title='U+05D0 HEBREW LETTER ALEF (Hebrew_Letter)'>&#x5D0;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s13' name='s13'>13</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+3031 VERTICAL KANA REPEAT MARK (Katakana)'>&#x3031;</span><span title='13.0'><span>&nbsp;</span>&nbsp;</span><span title='U+3031 VERTICAL KANA REPEAT MARK (Katakana)'>&#x3031;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='9.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='8.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='10.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s14' name='s14'>14</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='13.1'><span>&nbsp;</span>&nbsp;</span><span title='U+005F LOW LINE (ExtendNumLet)'>_</span><span title='13.2'><span>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='13.1'><span>&nbsp;</span>&nbsp;</span><span title='U+005F LOW LINE (ExtendNumLet)'>_</span><span title='13.2'><span>&nbsp;</span>&nbsp;</span><span title='U+3031 VERTICAL KANA REPEAT MARK (Katakana)'>&#x3031;</span><span title='13.1'><span>&nbsp;</span>&nbsp;</span><span title='U+005F LOW LINE (ExtendNumLet)'>_</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='12.0'><span>&nbsp;</span>&nbsp;</span><span title='U+002C COMMA (MidNum)'>,</span><span title='11.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s15' name='s15'>15</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='13.1'><span>&nbsp;</span>&nbsp;</span><span title='U+005F LOW LINE (ExtendNumLet)'>_</span><span title='13.1'><span>&nbsp;</span>&nbsp;</span><span title='U+005F LOW LINE (ExtendNumLet)'>_</span><span title='13.2'><span>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+002C COMMA (MidNum)'>,</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+002C COMMA (MidNum)'>,</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s16' name='s16'>16</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E6 REGIONAL INDICATOR SYMBOL LETTER A (RI)'>&#x1F1E6;</span><span title='15.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E7 REGIONAL INDICATOR SYMBOL LETTER B (RI)'>&#x1F1E7;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E8 REGIONAL INDICATOR SYMBOL LETTER C (RI)'>&#x1F1E8;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+3031 VERTICAL KANA REPEAT MARK (Katakana)'>&#x3031;</span><span title='13.0'><span>&nbsp;</span>&nbsp;</span><span title='U+3031 VERTICAL KANA REPEAT MARK (Katakana)'>&#x3031;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s17' name='s17'>17</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E6 REGIONAL INDICATOR SYMBOL LETTER A (RI)'>&#x1F1E6;</span><span title='16.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E7 REGIONAL INDICATOR SYMBOL LETTER B (RI)'>&#x1F1E7;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E8 REGIONAL INDICATOR SYMBOL LETTER C (RI)'>&#x1F1E8;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='13.1'><span>&nbsp;</span>&nbsp;</span><span title='U+005F LOW LINE (ExtendNumLet)'>_</span><span title='13.2'><span>&nbsp;</span>&nbsp;</span><span title='U+0030 DIGIT ZERO (Numeric)'>0</span><span title='13.1'><span>&nbsp;</span>&nbsp;</span><span title='U+005F LOW LINE (ExtendNumLet)'>_</span><span title='13.2'><span>&nbsp;</span>&nbsp;</span><span title='U+3031 VERTICAL KANA REPEAT MARK (Katakana)'>&#x3031;</span><span title='13.1'><span>&nbsp;</span>&nbsp;</span><span title='U+005F LOW LINE (ExtendNumLet)'>_</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s18' name='s18'>18</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E6 REGIONAL INDICATOR SYMBOL LETTER A (RI)'>&#x1F1E6;</span><span title='16.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E7 REGIONAL INDICATOR SYMBOL LETTER B (RI)'>&#x1F1E7;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E8 REGIONAL INDICATOR SYMBOL LETTER C (RI)'>&#x1F1E8;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='13.1'><span>&nbsp;</span>&nbsp;</span><span title='U+005F LOW LINE (ExtendNumLet)'>_</span><span title='13.1'><span>&nbsp;</span>&nbsp;</span><span title='U+005F LOW LINE (ExtendNumLet)'>_</span><span title='13.2'><span>&nbsp;</span>&nbsp;</span><span title='U+0041 LATIN CAPITAL LETTER A (ALetter)'>A</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s19' name='s19'>19</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E6 REGIONAL INDICATOR SYMBOL LETTER A (RI)'>&#x1F1E6;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='16.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E7 REGIONAL INDICATOR SYMBOL LETTER B (RI)'>&#x1F1E7;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E8 REGIONAL INDICATOR SYMBOL LETTER C (RI)'>&#x1F1E8;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E6 REGIONAL INDICATOR SYMBOL LETTER A (RI)'>&#x1F1E6;</span><span title='15.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E7 REGIONAL INDICATOR SYMBOL LETTER B (RI)'>&#x1F1E7;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E8 REGIONAL INDICATOR SYMBOL LETTER C (RI)'>&#x1F1E8;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s20' name='s20'>20</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E6 REGIONAL INDICATOR SYMBOL LETTER A (RI)'>&#x1F1E6;</span><span title='16.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E7 REGIONAL INDICATOR SYMBOL LETTER B (RI)'>&#x1F1E7;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E8 REGIONAL INDICATOR SYMBOL LETTER C (RI)'>&#x1F1E8;</span><span title='16.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E9 REGIONAL INDICATOR SYMBOL LETTER D (RI)'>&#x1F1E9;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E6 REGIONAL INDICATOR SYMBOL LETTER A (RI)'>&#x1F1E6;</span><span title='16.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E7 REGIONAL INDICATOR SYMBOL LETTER B (RI)'>&#x1F1E7;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E8 REGIONAL INDICATOR SYMBOL LETTER C (RI)'>&#x1F1E8;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s21' name='s21'>21</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F476 BABY (ExtPict)'>&#x1F476;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F3FF EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE)'>&#x1F3FF;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F476 BABY (ExtPict)'>&#x1F476;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E6 REGIONAL INDICATOR SYMBOL LETTER A (RI)'>&#x1F1E6;</span><span title='16.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E7 REGIONAL INDICATOR SYMBOL LETTER B (RI)'>&#x1F1E7;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E8 REGIONAL INDICATOR SYMBOL LETTER C (RI)'>&#x1F1E8;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s22' name='s22'>22</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E6 REGIONAL INDICATOR SYMBOL LETTER A (RI)'>&#x1F1E6;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='16.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E7 REGIONAL INDICATOR SYMBOL LETTER B (RI)'>&#x1F1E7;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E8 REGIONAL INDICATOR SYMBOL LETTER C (RI)'>&#x1F1E8;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s23' name='s23'>23</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E6 REGIONAL INDICATOR SYMBOL LETTER A (RI)'>&#x1F1E6;</span><span title='16.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E7 REGIONAL INDICATOR SYMBOL LETTER B (RI)'>&#x1F1E7;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F1E8 REGIONAL INDICATOR SYMBOL LETTER C (RI)'>&#x1F1E8;</span><span title='16.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F1E9 REGIONAL INDICATOR SYMBOL LETTER D (RI)'>&#x1F1E9;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s24' name='s24'>24</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+2701 UPPER BLADE SCISSORS (Other)'>&#x2701;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+2701 UPPER BLADE SCISSORS (Other)'>&#x2701;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F476 BABY (ExtPict)'>&#x1F476;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F3FF EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE)'>&#x1F3FF;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F476 BABY (ExtPict)'>&#x1F476;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s25' name='s25'>25</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+2701 UPPER BLADE SCISSORS (Other)'>&#x2701;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s26' name='s26'>26</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F476 BABY (ExtPict)'>&#x1F476;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F3FF EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE)'>&#x1F3FF;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0308 COMBINING DIAERESIS (Extend_FE)'>&#x25CC;&#x308;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F476 BABY (ExtPict)'>&#x1F476;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F3FF EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE)'>&#x1F3FF;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s27' name='s27'>27</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F3FF EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE)'>&#x1F3FF;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+2701 UPPER BLADE SCISSORS (Other)'>&#x2701;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+2701 UPPER BLADE SCISSORS (Other)'>&#x2701;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s28' name='s28'>28</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F3FF EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE)'>&#x1F3FF;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+2701 UPPER BLADE SCISSORS (Other)'>&#x2701;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s29' name='s29'>29</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F476 BABY (ExtPict)'>&#x1F476;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F3FF EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE)'>&#x1F3FF;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0308 COMBINING DIAERESIS (Extend_FE)'>&#x25CC;&#x308;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F476 BABY (ExtPict)'>&#x1F476;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F3FF EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE)'>&#x1F3FF;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s30' name='s30'>30</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F3FF EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE)'>&#x1F3FF;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s31' name='s31'>31</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+1F3FF EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE)'>&#x1F3FF;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s32' name='s32'>32</a></th><td><font size='5'>
-<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0308 COMBINING DIAERESIS (Extend_FE)'>&#x25CC;&#x308;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0308 COMBINING DIAERESIS (Extend_FE)'>&#x25CC;&#x308;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
<tr><th style='text-align:right'><a href='#s33' name='s33'>33</a></th><td><font size='5'>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='3.3'><span>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+</font></td></tr>
+<tr><th style='text-align:right'><a href='#s34' name='s34'>34</a></th><td><font size='5'>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+1F6D1 OCTAGONAL SIGN (ExtPict)'>&#x1F6D1;</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+</font></td></tr>
+<tr><th style='text-align:right'><a href='#s35' name='s35'>35</a></th><td><font size='5'>
+<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0308 COMBINING DIAERESIS (Extend_FE)'>&#x25CC;&#x308;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+200D ZERO WIDTH JOINER (ZWJ_FE)'>&#x25A1;</span><span title='4.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0308 COMBINING DIAERESIS (Extend_FE)'>&#x25CC;&#x308;</span><span title='5.0'><span>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
+</font></td></tr>
+<tr><th style='text-align:right'><a href='#s36' name='s36'>36</a></th><td><font size='5'>
<span title='0.2'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0061 LATIN SMALL LETTER A (ALetter)'>a</span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0020 SPACE (WSegSpace)'> </span><span title='3.4'><span>&nbsp;</span>&nbsp;</span><span title='U+0020 SPACE (WSegSpace)'> </span><span title='999.0'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span><span title='U+0062 LATIN SMALL LETTER B (ALetter)'>b</span><span title='0.3'><span style='border-right: 1px solid blue'>&nbsp;</span>&nbsp;</span>
</font></td></tr>
</table>
@@ -182,11 +191,9 @@ td, th { vertical-align: top }
<table cellspacing='0' cellpadding='0' border='0'>
<tr>
<td><a href='https://www.unicode.org/copyright.html'>
-<img src='http://www.unicode.org/img/hb_notice.gif' border='0' alt='Access to Copyright and terms of use' width='216' height='50'></a></td>
+<img src='https://www.unicode.org/img/hb_notice.gif' border='0' alt='Access to Copyright and terms of use' width='216' height='50'></a></td>
</tr>
</table>
-<script language='Javascript' type='text/javascript' src='http://www.unicode.org/webscripts/lastModified.js'>
-</script>
</center>
</div>
<br>
diff --git a/tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.txt b/tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.txt
index da985e91ae..10a111a97c 100644
--- a/tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.txt
+++ b/tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.txt
@@ -1,11 +1,11 @@
-# WordBreakTest-14.0.0.txt
-# Date: 2021-03-08, 06:22:40 GMT
-# © 2021 Unicode®, Inc.
+# WordBreakTest-15.1.0.txt
+# Date: 2023-03-31, 14:30:32 GMT
+# © 2023 Unicode®, Inc.
# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
+# For terms of use, see https://www.unicode.org/terms_of_use.html
#
# Unicode Character Database
-# For documentation, see http://www.unicode.org/reports/tr44/
+# For documentation, see https://www.unicode.org/reports/tr44/
#
# Default Word_Break Test
#
@@ -951,63 +951,63 @@
÷ 231A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 231A × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0020 ÷ 0001 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0001 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0001 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 0020 ÷ 000D ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 000D ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
+÷ 0020 × 0308 ÷ 000D ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
÷ 0020 ÷ 000A ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 000A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
+÷ 0020 × 0308 ÷ 000A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
÷ 0020 ÷ 000B ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 000B ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
+÷ 0020 × 0308 ÷ 000B ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
÷ 0020 ÷ 3031 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 3031 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
+÷ 0020 × 0308 ÷ 3031 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
÷ 0020 ÷ 0041 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0041 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0041 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
÷ 0020 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 0020 × 0308 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
÷ 0020 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 0020 × 0308 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
÷ 0020 ÷ 002E ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 002E ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
+÷ 0020 × 0308 ÷ 002E ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
÷ 0020 ÷ 0030 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0030 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0030 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
÷ 0020 ÷ 005F ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 005F ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
+÷ 0020 × 0308 ÷ 005F ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
÷ 0020 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
+÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
÷ 0020 ÷ 05D0 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 05D0 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
+÷ 0020 × 0308 ÷ 05D0 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
÷ 0020 ÷ 0022 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0022 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0022 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 0020 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0020 ÷ 231A ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 231A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-# ÷ 0020 × 0020 ÷ # ÷ [0.2] SPACE (WSegSpace) × [3.4] SPACE (WSegSpace) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0020 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-# ÷ 0020 × 00AD ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-# ÷ 0020 × 0308 × 00AD ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-# ÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-# ÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-# ÷ 0020 × 200D ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-# ÷ 0020 × 0308 × 200D ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0020 × 0308 ÷ 231A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
+÷ 0020 × 0020 ÷ # ÷ [0.2] SPACE (WSegSpace) × [3.4] SPACE (WSegSpace) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0020 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
+÷ 0020 × 00AD ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 0020 × 0308 × 00AD ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
+÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
+÷ 0020 × 200D ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
+÷ 0020 × 0308 × 200D ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
÷ 0020 ÷ 0061 × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0020 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
÷ 0020 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0020 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 0020 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
÷ 0020 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
÷ 0020 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 0020 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
÷ 0020 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-# ÷ 0020 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
+÷ 0020 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 00AD ÷ 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 00AD × 0308 ÷ 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
÷ 00AD ÷ 000D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
@@ -1154,7 +1154,7 @@
÷ 200D × 0308 ÷ 0022 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
÷ 200D ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
÷ 200D × 0308 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-# ÷ 200D × 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] WATCH (ExtPict) ÷ [0.3]
+÷ 200D × 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] WATCH (ExtPict) ÷ [0.3]
÷ 200D × 0308 ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
÷ 200D ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
÷ 200D × 0308 ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
@@ -1706,8 +1706,11 @@
÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
÷ 000D × 000A ÷ 0061 ÷ 000A ÷ 0308 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [0.3]
÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [0.3]
-# ÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] ARABIC LETTER NOON (ALetter) ÷ [0.3]
+÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] ARABIC LETTER NOON (ALetter) ÷ [0.3]
÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
+÷ 0671 × 0644 × 0631 × 064E × 0651 × 062D × 0650 × 064A × 0645 × 0650 ÷ 0020 ÷ 06DD × 0661 ÷ # ÷ [0.2] ARABIC LETTER ALEF WASLA (ALetter) × [5.0] ARABIC LETTER LAM (ALetter) × [5.0] ARABIC LETTER REH (ALetter) × [4.0] ARABIC FATHA (Extend_FE) × [4.0] ARABIC SHADDA (Extend_FE) × [5.0] ARABIC LETTER HAH (ALetter) × [4.0] ARABIC KASRA (Extend_FE) × [5.0] ARABIC LETTER YEH (ALetter) × [5.0] ARABIC LETTER MEEM (ALetter) × [4.0] ARABIC KASRA (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [999.0] ARABIC END OF AYAH (Numeric) × [8.0] ARABIC-INDIC DIGIT ONE (Numeric) ÷ [0.3]
+÷ 0721 × 0719 × 0721 × 0718 × 072A × 0710 ÷ 0020 ÷ 070F × 071D × 0717 ÷ # ÷ [0.2] SYRIAC LETTER MIM (ALetter) × [5.0] SYRIAC LETTER ZAIN (ALetter) × [5.0] SYRIAC LETTER MIM (ALetter) × [5.0] SYRIAC LETTER WAW (ALetter) × [5.0] SYRIAC LETTER RISH (ALetter) × [5.0] SYRIAC LETTER ALAPH (ALetter) ÷ [999.0] SPACE (WSegSpace) ÷ [999.0] SYRIAC ABBREVIATION MARK (ALetter) × [5.0] SYRIAC LETTER YUDH (ALetter) × [5.0] SYRIAC LETTER HE (ALetter) ÷ [0.3]
+÷ 072C × 070F × 072B × 0712 × 0718 ÷ # ÷ [0.2] SYRIAC LETTER TAW (ALetter) × [5.0] SYRIAC ABBREVIATION MARK (ALetter) × [5.0] SYRIAC LETTER SHIN (ALetter) × [5.0] SYRIAC LETTER BETH (ALetter) × [5.0] SYRIAC LETTER WAW (ALetter) ÷ [0.3]
÷ 0041 × 0041 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
÷ 0041 × 003A × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
÷ 0041 ÷ 003A ÷ 003A ÷ 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
@@ -1725,18 +1728,18 @@
÷ 0061 ÷ 1F1E6 × 200D × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
÷ 1F476 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] BABY (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) ÷ [999.0] BABY (ExtPict) ÷ [0.3]
-# ÷ 1F6D1 × 200D × 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
-# ÷ 0061 × 200D × 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
-# ÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] UPPER BLADE SCISSORS (Other) ÷ [0.3]
-# ÷ 0061 × 200D × 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] UPPER BLADE SCISSORS (Other) ÷ [0.3]
-# ÷ 1F476 × 1F3FF × 0308 × 200D × 1F476 × 1F3FF ÷ # ÷ [0.2] BABY (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] BABY (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) ÷ [0.3]
+÷ 1F6D1 × 200D × 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
+÷ 0061 × 200D × 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
+÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] UPPER BLADE SCISSORS (Other) ÷ [0.3]
+÷ 0061 × 200D × 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] UPPER BLADE SCISSORS (Other) ÷ [0.3]
+÷ 1F476 × 1F3FF × 0308 × 200D × 1F476 × 1F3FF ÷ # ÷ [0.2] BABY (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] BABY (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) ÷ [0.3]
÷ 1F6D1 × 1F3FF ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) ÷ [0.3]
-# ÷ 200D × 1F6D1 × 1F3FF ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) ÷ [0.3]
-# ÷ 200D × 1F6D1 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
-# ÷ 200D × 1F6D1 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
+÷ 200D × 1F6D1 × 1F3FF ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) ÷ [0.3]
+÷ 200D × 1F6D1 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
+÷ 200D × 1F6D1 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
÷ 1F6D1 ÷ 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
÷ 0061 × 0308 × 200D × 0308 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
-# ÷ 0061 ÷ 0020 × 0020 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] SPACE (WSegSpace) × [3.4] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
+÷ 0061 ÷ 0020 × 0020 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] SPACE (WSegSpace) × [3.4] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
÷ 0031 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
÷ 0031 × 005F × 0031 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
÷ 0031 × 005F × 0061 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
@@ -1846,6 +1849,6 @@
÷ 0061 × 005F × 0031 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
÷ 0061 × 005F × 0061 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
#
-# Lines: 1823
+# Lines: 1826
#
# EOF
diff --git a/tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.txt.full b/tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.txt.full
deleted file mode 100644
index 1d1435bfc7..0000000000
--- a/tests/auto/corelib/text/qtextboundaryfinder/data/WordBreakTest.txt.full
+++ /dev/null
@@ -1,1851 +0,0 @@
-# WordBreakTest-14.0.0.txt
-# Date: 2021-03-08, 06:22:40 GMT
-# © 2021 Unicode®, Inc.
-# Unicode and the Unicode Logo are registered trademarks of Unicode, Inc. in the U.S. and other countries.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-#
-# Unicode Character Database
-# For documentation, see http://www.unicode.org/reports/tr44/
-#
-# Default Word_Break Test
-#
-# Format:
-# <string> (# <comment>)?
-# <string> contains hex Unicode code points, with
-# ÷ wherever there is a break opportunity, and
-# × wherever there is not.
-# <comment> the format can change, but currently it shows:
-# - the sample character name
-# - (x) the Word_Break property value for the sample character
-# - [x] the rule that determines whether there is a break or not,
-# as listed in the Rules section of WordBreakTest.html
-#
-# These samples may be extended or changed in the future.
-#
-÷ 0001 ÷ 0001 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0001 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0001 ÷ 000D ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0001 × 0308 ÷ 000D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0001 ÷ 000A ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0001 × 0308 ÷ 000A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0001 ÷ 000B ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0001 × 0308 ÷ 000B ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0001 ÷ 3031 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0001 × 0308 ÷ 3031 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0001 ÷ 0041 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0041 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0001 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0001 × 0308 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0001 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0001 × 0308 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0001 ÷ 002E ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0001 × 0308 ÷ 002E ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0001 ÷ 0030 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0030 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0001 ÷ 005F ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0001 × 0308 ÷ 005F ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0001 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0001 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0001 ÷ 05D0 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0001 × 0308 ÷ 05D0 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0001 ÷ 0022 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0022 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0001 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0001 ÷ 231A ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0001 × 0308 ÷ 231A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0001 ÷ 0020 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0020 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0001 × 00AD ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0001 × 0308 × 00AD ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0001 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0001 × 0308 × 0300 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0001 × 200D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0001 × 0308 × 200D ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0001 ÷ 0061 × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0001 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0001 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0001 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0001 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0001 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0001 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0001 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0001 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0001 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <START OF HEADING> (Other) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000D ÷ 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] <START OF HEADING> (Other) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 000D ÷ 000D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 000D × 000A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 000D ÷ 000B ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 000B ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 000D ÷ 3031 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 3031 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 000D ÷ 0041 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0041 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 000D ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COLON (MidLetter) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000D ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMMA (MidNum) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000D ÷ 002E ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 002E ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 000D ÷ 0030 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 000D ÷ 005F ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 005F ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 000D ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 000D ÷ 05D0 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 000D ÷ 0022 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 000D ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000D ÷ 231A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] WATCH (ExtPict) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 231A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 000D ÷ 0020 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] SPACE (WSegSpace) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 000D ÷ 00AD ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 000D ÷ 0308 × 00AD ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 000D ÷ 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 000D ÷ 0308 × 0300 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 000D ÷ 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 000D ÷ 0308 × 200D ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 000D ÷ 0061 × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000D ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000D ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000D ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000D ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000D ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000D ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000D ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000D ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000D ÷ 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000A ÷ 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] <START OF HEADING> (Other) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 000A ÷ 000D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 000A ÷ 000A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 000A ÷ 000B ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 000B ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 000A ÷ 3031 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 3031 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 000A ÷ 0041 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0041 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 000A ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COLON (MidLetter) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000A ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMMA (MidNum) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000A ÷ 002E ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 002E ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 000A ÷ 0030 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 000A ÷ 005F ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 005F ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 000A ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 000A ÷ 05D0 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 000A ÷ 0022 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 000A ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000A ÷ 231A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] WATCH (ExtPict) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 231A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 000A ÷ 0020 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] SPACE (WSegSpace) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 000A ÷ 00AD ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 000A ÷ 0308 × 00AD ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 000A ÷ 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 000A ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 000A ÷ 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 000A ÷ 0308 × 200D ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 000A ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000A ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000A ÷ 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000B ÷ 0001 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] <START OF HEADING> (Other) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0001 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 000B ÷ 000D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 000D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 000B ÷ 000A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 000A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 000B ÷ 000B ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 000B ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 000B ÷ 3031 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 3031 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 000B ÷ 0041 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0041 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 000B ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COLON (MidLetter) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000B ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMMA (MidNum) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000B ÷ 002E ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 002E ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 000B ÷ 0030 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0030 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 000B ÷ 005F ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 005F ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 000B ÷ 1F1E6 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 1F1E6 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 000B ÷ 05D0 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 05D0 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 000B ÷ 0022 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0022 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 000B ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000B ÷ 231A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] WATCH (ExtPict) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 231A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 000B ÷ 0020 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] SPACE (WSegSpace) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0020 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 000B ÷ 00AD ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 000B ÷ 0308 × 00AD ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 000B ÷ 0300 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 000B ÷ 0308 × 0300 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 000B ÷ 200D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 000B ÷ 0308 × 200D ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 000B ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000B ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000B ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000B ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000B ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000B ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 000B ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 000B ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 000B ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000B ÷ 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] <LINE TABULATION> (Newline) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 3031 ÷ 0001 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0001 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 3031 ÷ 000D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 3031 × 0308 ÷ 000D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 3031 ÷ 000A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 3031 × 0308 ÷ 000A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 3031 ÷ 000B ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 3031 × 0308 ÷ 000B ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 3031 × 3031 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 3031 × 0308 × 3031 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 3031 ÷ 0041 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0041 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 3031 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 3031 × 0308 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 3031 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 3031 × 0308 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 3031 ÷ 002E ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 3031 × 0308 ÷ 002E ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 3031 ÷ 0030 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0030 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 3031 × 005F ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 3031 × 0308 × 005F ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 3031 ÷ 1F1E6 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 3031 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 3031 ÷ 05D0 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 3031 × 0308 ÷ 05D0 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 3031 ÷ 0022 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0022 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 3031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 3031 ÷ 231A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 3031 × 0308 ÷ 231A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 3031 ÷ 0020 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0020 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 3031 × 00AD ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 3031 × 0308 × 00AD ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 3031 × 0300 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 3031 × 0308 × 0300 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 3031 × 200D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 3031 × 0308 × 200D ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 3031 ÷ 0061 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 3031 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 3031 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 3031 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 3031 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 3031 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 3031 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 3031 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 3031 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 3031 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0041 ÷ 0001 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0041 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0041 ÷ 000D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0041 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0041 ÷ 000A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0041 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0041 ÷ 000B ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0041 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0041 ÷ 3031 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0041 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0041 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0041 × 0308 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0041 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0041 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0041 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0041 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0041 ÷ 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0041 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0041 × 0030 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0041 × 0308 × 0030 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0041 × 005F ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0041 × 0308 × 005F ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0041 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0041 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0041 × 05D0 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0041 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0041 ÷ 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0041 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0041 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0041 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0041 ÷ 231A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0041 × 0308 ÷ 231A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0041 ÷ 0020 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0041 × 0308 ÷ 0020 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0041 × 00AD ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0041 × 0308 × 00AD ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0041 × 0300 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0041 × 0308 × 0300 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0041 × 200D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0041 × 0308 × 200D ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0041 × 0061 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0041 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0041 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0041 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0041 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0041 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0041 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0041 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0041 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0041 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0041 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0041 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0041 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0041 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0041 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0041 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0041 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0041 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 003A ÷ 0001 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 003A × 0308 ÷ 0001 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 003A ÷ 000D ÷ # ÷ [0.2] COLON (MidLetter) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 003A × 0308 ÷ 000D ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 003A ÷ 000A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 003A × 0308 ÷ 000A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 003A ÷ 000B ÷ # ÷ [0.2] COLON (MidLetter) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 003A × 0308 ÷ 000B ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 003A ÷ 3031 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 003A × 0308 ÷ 3031 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 003A ÷ 0041 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 003A × 0308 ÷ 0041 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 003A ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 003A × 0308 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 003A ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 003A × 0308 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 003A ÷ 002E ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 003A × 0308 ÷ 002E ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 003A ÷ 0030 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 003A ÷ 005F ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 003A ÷ 05D0 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 003A × 0308 ÷ 05D0 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 003A ÷ 0022 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 003A ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 003A ÷ 231A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 003A × 0308 ÷ 231A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 003A ÷ 0020 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 003A × 0308 ÷ 0020 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 003A × 00AD ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 003A × 0300 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 003A × 0308 × 0300 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 003A × 200D ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 003A × 0308 × 200D ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 003A ÷ 0061 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 003A × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 003A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 003A × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 003A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 003A × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 003A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 003A × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 003A ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 003A × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 003A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 003A × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 003A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 003A × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 003A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 003A × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002C ÷ 0001 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 002C × 0308 ÷ 0001 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 002C ÷ 000D ÷ # ÷ [0.2] COMMA (MidNum) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 002C × 0308 ÷ 000D ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 002C ÷ 000A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 002C × 0308 ÷ 000A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 002C ÷ 000B ÷ # ÷ [0.2] COMMA (MidNum) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 002C × 0308 ÷ 000B ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 002C ÷ 3031 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 002C × 0308 ÷ 3031 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 002C ÷ 0041 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 002C × 0308 ÷ 0041 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 002C ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002C × 0308 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002C ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002C × 0308 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002C ÷ 002E ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 002C × 0308 ÷ 002E ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 002C ÷ 0030 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 002C × 0308 ÷ 0030 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 002C ÷ 005F ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 002C ÷ 05D0 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 002C ÷ 0022 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 002C ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002C ÷ 231A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 002C × 0308 ÷ 231A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 002C ÷ 0020 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 002C × 0308 ÷ 0020 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 002C × 00AD ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 002C × 0300 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 002C × 0308 × 0300 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 002C × 200D ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 002C × 0308 × 200D ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 002C ÷ 0061 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002C × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002C ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002C × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002C ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002C × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002C ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002C × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002C ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002C × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002C ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002C × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002E ÷ 0001 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 002E × 0308 ÷ 0001 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 002E ÷ 000D ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 002E × 0308 ÷ 000D ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 002E ÷ 000A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 002E × 0308 ÷ 000A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 002E ÷ 000B ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 002E × 0308 ÷ 000B ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 002E ÷ 3031 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 002E × 0308 ÷ 3031 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 002E ÷ 0041 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 002E × 0308 ÷ 0041 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 002E ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002E × 0308 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002E ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002E × 0308 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002E ÷ 002E ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 002E × 0308 ÷ 002E ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 002E ÷ 0030 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 002E × 0308 ÷ 0030 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 002E ÷ 005F ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 002E × 0308 ÷ 005F ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 002E ÷ 1F1E6 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 002E × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 002E ÷ 05D0 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 002E × 0308 ÷ 05D0 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 002E ÷ 0022 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 002E × 0308 ÷ 0022 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 002E ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002E × 0308 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002E ÷ 231A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 002E × 0308 ÷ 231A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 002E ÷ 0020 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 002E × 0308 ÷ 0020 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 002E × 00AD ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 002E × 0308 × 00AD ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 002E × 0300 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 002E × 0308 × 0300 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 002E × 200D ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 002E × 0308 × 200D ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 002E ÷ 0061 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002E × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002E ÷ 0061 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002E × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002E ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002E × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002E ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002E × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002E ÷ 0061 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002E × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002E ÷ 0031 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002E × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 002E ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002E × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 002E ÷ 0031 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002E × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 002E ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 002E × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] FULL STOP (MidNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0030 ÷ 0001 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0030 × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0030 ÷ 000D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0030 × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0030 ÷ 000A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0030 × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0030 ÷ 000B ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0030 × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0030 ÷ 3031 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0030 × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0030 × 0041 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0030 × 0308 × 0041 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0030 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0030 × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0030 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0030 × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0030 ÷ 002E ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0030 × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0030 × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0030 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0030 × 005F ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0030 × 0308 × 005F ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0030 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0030 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0030 × 05D0 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0030 × 0308 × 05D0 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0030 ÷ 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0030 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0030 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0030 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0030 ÷ 231A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0030 × 0308 ÷ 231A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0030 ÷ 0020 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0030 × 0308 ÷ 0020 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0030 × 00AD ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0030 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0030 × 0300 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0030 × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0030 × 200D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0030 × 0308 × 200D ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0030 × 0061 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0030 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0030 × 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0030 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0030 × 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0030 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0030 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0030 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0030 × 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0030 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [10.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0030 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0030 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0030 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0030 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0030 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0030 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0030 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0030 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [4.0] COMBINING DIAERESIS (Extend_FE) × [8.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 005F ÷ 0001 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 005F × 0308 ÷ 0001 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 005F ÷ 000D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 005F × 0308 ÷ 000D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 005F ÷ 000A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 005F × 0308 ÷ 000A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 005F ÷ 000B ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 005F × 0308 ÷ 000B ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 005F × 3031 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 005F × 0308 × 3031 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 005F × 0041 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 005F × 0308 × 0041 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 005F ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 005F × 0308 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 005F ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 005F × 0308 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 005F ÷ 002E ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 005F × 0308 ÷ 002E ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 005F × 0030 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 005F × 0308 × 0030 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 005F × 005F ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 005F × 0308 × 005F ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 005F ÷ 1F1E6 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 005F × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 005F × 05D0 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 005F × 0308 × 05D0 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 005F ÷ 0022 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 005F × 0308 ÷ 0022 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 005F ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 005F × 0308 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 005F ÷ 231A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 005F × 0308 ÷ 231A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 005F ÷ 0020 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 005F × 0308 ÷ 0020 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 005F × 00AD ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 005F × 0308 × 00AD ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 005F × 0300 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 005F × 0308 × 0300 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 005F × 200D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 005F × 0308 × 200D ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 005F × 0061 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 005F × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 005F × 0061 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 005F × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 005F × 0061 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 005F × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 005F × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 005F × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 005F × 0061 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 005F × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 005F × 0031 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 005F × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 005F × 0031 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 005F × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 005F × 0031 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 005F × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 005F × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 005F × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LOW LINE (ExtendNumLet) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0001 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 1F1E6 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 000D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 1F1E6 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 000A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 1F1E6 ÷ 000B ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 000B ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 1F1E6 ÷ 3031 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 3031 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 1F1E6 ÷ 0041 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0041 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 1F1E6 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 ÷ 002E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 002E ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 1F1E6 ÷ 0030 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0030 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 1F1E6 ÷ 005F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 005F ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 1F1E6 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [15.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 1F1E6 × 0308 × 1F1E6 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [15.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 1F1E6 ÷ 05D0 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 05D0 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 1F1E6 ÷ 0022 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0022 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 1F1E6 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 231A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 1F1E6 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0020 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 1F1E6 × 00AD ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 1F1E6 × 0308 × 00AD ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 1F1E6 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 1F1E6 × 0308 × 0300 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 1F1E6 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 1F1E6 × 0308 × 200D ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 1F1E6 ÷ 0061 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 1F1E6 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 1F1E6 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 1F1E6 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 1F1E6 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 05D0 ÷ 0001 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 0001 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 05D0 ÷ 000D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 000D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 05D0 ÷ 000A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 000A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 05D0 ÷ 000B ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 000B ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 05D0 ÷ 3031 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 3031 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 05D0 × 0041 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 05D0 × 0308 × 0041 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 05D0 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 05D0 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 05D0 ÷ 002E ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 002E ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 05D0 × 0030 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 05D0 × 0308 × 0030 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 05D0 × 005F ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 05D0 × 0308 × 005F ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 05D0 ÷ 1F1E6 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 05D0 × 05D0 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 05D0 × 0308 × 05D0 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 05D0 ÷ 0022 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 0022 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 05D0 × 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [7.1] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 05D0 × 0308 × 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.1] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 05D0 ÷ 231A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 231A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 05D0 ÷ 0020 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 05D0 × 0308 ÷ 0020 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 05D0 × 00AD ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 05D0 × 0308 × 00AD ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 05D0 × 0300 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 05D0 × 0308 × 0300 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 05D0 × 200D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 05D0 × 0308 × 200D ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 05D0 × 0061 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 05D0 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 05D0 × 0061 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 05D0 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 05D0 × 0061 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 05D0 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 05D0 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 05D0 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 05D0 × 0061 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 05D0 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 05D0 × 0031 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 05D0 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 05D0 × 0031 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 05D0 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 05D0 × 0031 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 05D0 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 05D0 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 05D0 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0022 ÷ 0001 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0001 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0022 ÷ 000D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0022 × 0308 ÷ 000D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0022 ÷ 000A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0022 × 0308 ÷ 000A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0022 ÷ 000B ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0022 × 0308 ÷ 000B ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0022 ÷ 3031 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0022 × 0308 ÷ 3031 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0022 ÷ 0041 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0041 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0022 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0022 × 0308 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0022 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0022 × 0308 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0022 ÷ 002E ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0022 × 0308 ÷ 002E ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0022 ÷ 0030 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0030 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0022 ÷ 005F ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0022 × 0308 ÷ 005F ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0022 ÷ 1F1E6 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0022 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0022 ÷ 05D0 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0022 × 0308 ÷ 05D0 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0022 ÷ 0022 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0022 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0022 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0022 ÷ 231A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0022 × 0308 ÷ 231A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0022 ÷ 0020 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0020 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0022 × 00AD ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0022 × 0308 × 00AD ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0022 × 0300 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0022 × 0308 × 0300 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0022 × 200D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0022 × 0308 × 200D ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0022 ÷ 0061 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0022 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0022 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0022 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0022 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0022 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0022 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0022 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0022 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0022 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] QUOTATION MARK (Double_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0027 ÷ 0001 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0027 ÷ 000D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0027 ÷ 000A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0027 ÷ 000B ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0027 ÷ 3031 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0027 ÷ 0041 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0041 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0027 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0027 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0027 ÷ 002E ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0027 × 0308 ÷ 002E ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0027 ÷ 0030 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0030 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0027 ÷ 005F ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0027 ÷ 05D0 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0027 × 0308 ÷ 05D0 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0027 ÷ 0022 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0027 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0027 ÷ 231A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0027 × 0308 ÷ 231A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0027 ÷ 0020 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0020 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0027 × 00AD ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0027 × 0300 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0027 × 200D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0027 × 0308 × 200D ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0027 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0027 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0027 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0027 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0027 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0027 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 231A ÷ 0001 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 231A × 0308 ÷ 0001 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 231A ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 231A × 0308 ÷ 000D ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 231A ÷ 000A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 231A × 0308 ÷ 000A ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 231A ÷ 000B ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 231A × 0308 ÷ 000B ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 231A ÷ 3031 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 231A × 0308 ÷ 3031 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 231A ÷ 0041 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 231A × 0308 ÷ 0041 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 231A ÷ 003A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 231A × 0308 ÷ 003A ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 231A ÷ 002C ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 231A × 0308 ÷ 002C ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 231A ÷ 002E ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 231A × 0308 ÷ 002E ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 231A ÷ 0030 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 231A × 0308 ÷ 0030 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 231A ÷ 005F ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 231A × 0308 ÷ 005F ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 231A ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 231A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 231A ÷ 05D0 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 231A × 0308 ÷ 05D0 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 231A ÷ 0022 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 231A × 0308 ÷ 0022 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 231A ÷ 0027 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 231A × 0308 ÷ 0027 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 231A ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 231A × 0308 ÷ 231A ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 231A ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 231A × 0308 ÷ 0020 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 231A × 00AD ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 231A × 0308 × 00AD ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 231A × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 231A × 0308 × 0300 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 231A × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 231A × 0308 × 200D ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 231A ÷ 0061 × 2060 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 231A × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 231A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 231A × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 231A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 231A × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 231A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 231A × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 231A ÷ 0061 ÷ 002C ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 231A × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 231A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 231A × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 231A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 231A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 231A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 231A × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 231A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] WATCH (ExtPict) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 231A × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] WATCH (ExtPict) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0020 ÷ 0001 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0001 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0020 ÷ 000D ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0020 × 0308 ÷ 000D ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0020 ÷ 000A ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0020 × 0308 ÷ 000A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0020 ÷ 000B ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0020 × 0308 ÷ 000B ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0020 ÷ 3031 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0020 × 0308 ÷ 3031 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0020 ÷ 0041 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0041 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0020 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0020 × 0308 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0020 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0020 × 0308 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0020 ÷ 002E ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0020 × 0308 ÷ 002E ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0020 ÷ 0030 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0030 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0020 ÷ 005F ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0020 × 0308 ÷ 005F ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0020 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0020 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0020 ÷ 05D0 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0020 × 0308 ÷ 05D0 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0020 ÷ 0022 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0022 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0020 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0020 ÷ 231A ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0020 × 0308 ÷ 231A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0020 × 0020 ÷ # ÷ [0.2] SPACE (WSegSpace) × [3.4] SPACE (WSegSpace) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0020 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0020 × 00AD ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0020 × 0308 × 00AD ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0020 × 0300 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0020 × 0308 × 0300 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0020 × 200D ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0020 × 0308 × 200D ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0020 ÷ 0061 × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0020 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0020 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0020 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0020 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0020 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0020 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0020 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0020 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0020 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 00AD ÷ 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0001 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 00AD ÷ 000D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 00AD × 0308 ÷ 000D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 00AD ÷ 000A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 00AD × 0308 ÷ 000A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 00AD ÷ 000B ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 00AD × 0308 ÷ 000B ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 00AD ÷ 3031 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 00AD × 0308 ÷ 3031 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 00AD ÷ 0041 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0041 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 00AD ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 00AD × 0308 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 00AD ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 00AD × 0308 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 00AD ÷ 002E ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 00AD × 0308 ÷ 002E ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 00AD ÷ 0030 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0030 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 00AD ÷ 005F ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 00AD × 0308 ÷ 005F ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 00AD ÷ 1F1E6 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 00AD × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 00AD ÷ 05D0 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 00AD × 0308 ÷ 05D0 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 00AD ÷ 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0022 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 00AD ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 00AD ÷ 231A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 00AD × 0308 ÷ 231A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 00AD ÷ 0020 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0020 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 00AD × 00AD ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 00AD × 0308 × 00AD ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 00AD × 0300 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 00AD × 0308 × 0300 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 00AD × 200D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 00AD × 0308 × 200D ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 00AD ÷ 0061 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 00AD ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 00AD ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 00AD ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 00AD ÷ 0061 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 00AD ÷ 0031 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 00AD ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 00AD ÷ 0031 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 00AD ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 00AD × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] SOFT HYPHEN (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0300 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0001 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0300 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0300 × 0308 ÷ 000D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0300 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0300 × 0308 ÷ 000A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0300 ÷ 000B ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0300 × 0308 ÷ 000B ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0300 ÷ 3031 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0300 × 0308 ÷ 3031 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0300 ÷ 0041 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0041 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0300 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0300 × 0308 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0300 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0300 × 0308 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0300 ÷ 002E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0300 × 0308 ÷ 002E ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0300 ÷ 0030 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0030 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0300 ÷ 005F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0300 × 0308 ÷ 005F ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0300 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0300 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0300 ÷ 05D0 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0300 × 0308 ÷ 05D0 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0300 ÷ 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0022 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0300 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0300 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0300 × 0308 ÷ 231A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0300 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0020 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0300 × 00AD ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0300 × 0308 × 00AD ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0300 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0300 × 0308 × 0300 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0300 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0300 × 0308 × 200D ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0300 ÷ 0061 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0300 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0300 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0300 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0300 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0300 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0300 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0300 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0300 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0300 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] COMBINING GRAVE ACCENT (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 200D ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 200D × 0308 ÷ 0001 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 200D ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 200D × 0308 ÷ 000D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 200D ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 200D × 0308 ÷ 000A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 200D ÷ 000B ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 200D × 0308 ÷ 000B ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 200D ÷ 3031 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 200D × 0308 ÷ 3031 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 200D ÷ 0041 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 200D × 0308 ÷ 0041 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 200D ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 200D × 0308 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 200D ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 200D × 0308 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 200D ÷ 002E ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 200D × 0308 ÷ 002E ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 200D ÷ 0030 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 200D × 0308 ÷ 0030 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 200D ÷ 005F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 200D × 0308 ÷ 005F ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 200D ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 200D × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 200D ÷ 05D0 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 200D × 0308 ÷ 05D0 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 200D ÷ 0022 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 200D × 0308 ÷ 0022 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 200D ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 200D × 0308 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 200D × 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] WATCH (ExtPict) ÷ [0.3]
-÷ 200D × 0308 ÷ 231A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 200D ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 200D × 0308 ÷ 0020 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 200D × 00AD ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 200D × 0308 × 00AD ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 200D × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 200D × 0308 × 0300 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 200D × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 200D × 0308 × 200D ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 200D ÷ 0061 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 200D × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 200D ÷ 0061 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 200D × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 200D ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 200D × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 200D ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 200D × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 200D ÷ 0061 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 200D × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 200D ÷ 0031 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 200D × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 200D ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 200D × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 200D ÷ 0031 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 200D × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 200D ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 200D × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 2060 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 × 2060 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 × 2060 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 × 2060 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0061 × 2060 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0061 × 2060 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 2060 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 2060 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 × 2060 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0061 × 2060 × 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 × 2060 × 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0061 × 2060 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0061 × 2060 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0061 × 2060 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 2060 ÷ 231A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 231A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0061 × 2060 ÷ 0020 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0061 × 2060 × 0308 ÷ 0020 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0061 × 2060 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0061 × 2060 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0061 × 2060 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0061 × 2060 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 2060 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 2060 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 2060 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 2060 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 × 2060 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 2060 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 2060 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 × 2060 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 2060 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [9.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0061 × 003A × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 003A × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0061 × 003A × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0061 × 003A × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 231A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 231A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 0020 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 0020 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0061 ÷ 003A × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 003A × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0061 ÷ 003A × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0061 × 003A × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 003A × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 003A × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 003A × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 003A × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 003A × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 003A × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 003A × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 003A × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 × 003A × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 003A × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0061 × 0027 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 0027 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0061 × 0027 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0061 × 0027 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 231A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 231A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 0020 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 0020 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0061 ÷ 0027 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0061 × 0027 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 0027 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 0027 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 0027 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 0027 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 0027 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 0027 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 0027 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 0027 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 × 0027 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 0027 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0308 × 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0308 × 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 231A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 231A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 0020 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0020 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0308 × 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 × 0027 × 2060 × 0308 × 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [6.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [7.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 0027 × 2060 × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0001 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 000D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 000A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 000B ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 3031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0041 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 002E ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0030 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 231A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 231A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0020 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0020 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0061 ÷ 002C × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 002C × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 × 0300 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0061 ÷ 002C × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 × 200D ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0061 ÷ 002C × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 231A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 231A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0020 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0020 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0031 ÷ 003A × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 003A × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0031 ÷ 003A × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 003A × 0308 ÷ 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0031 × 0027 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0031 × 0027 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 231A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 231A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 0020 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 0020 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0031 ÷ 0027 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0031 ÷ 0027 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 0027 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 0027 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 × 0027 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 × 0027 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 × 0027 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 × 0027 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 × 0027 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 × 0027 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 × 0027 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 × 0027 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] APOSTROPHE (Single_Quote) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0031 × 002C × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0031 × 002C × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 231A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 231A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 0020 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 0020 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0031 ÷ 002C × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002C × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0031 ÷ 002C × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 002C × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 × 002C × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 × 002C × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 × 002C × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 × 002C × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 × 002C × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 × 002C × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 × 002C × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 × 002C × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] COMMA (MidNum) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0001 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] <START OF HEADING> (Other) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 000D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <CARRIAGE RETURN (CR)> (CR) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 000A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 000B ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [3.2] <LINE TABULATION> (Newline) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 3031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0041 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 002E ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] FULL STOP (MidNumLet) ÷ [0.3]
-÷ 0031 × 002E × 2060 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0031 × 002E × 2060 × 0308 × 0030 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 005F ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 1F1E6 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 05D0 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0022 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] QUOTATION MARK (Double_Quote) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 231A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 231A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] WATCH (ExtPict) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 0020 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0020 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 × 00AD ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] SOFT HYPHEN (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 × 0300 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] COMBINING GRAVE ACCENT (Extend_FE) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 × 200D ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 0027 × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] APOSTROPHE (Single_Quote) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 ÷ 002E × 2060 × 0308 ÷ 0061 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 × 002E × 2060 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 003A ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [0.3]
-÷ 0031 × 002E × 2060 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 0027 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 0031 × 002E × 2060 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 002C ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [0.3]
-÷ 0031 × 002E × 2060 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 0031 × 002E × 2060 × 0308 × 0031 ÷ 002E × 2060 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [12.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [11.0] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) × [4.0] WORD JOINER (Format_FE) ÷ [0.3]
-÷ 000D × 000A ÷ 0061 ÷ 000A ÷ 0308 ÷ # ÷ [0.2] <CARRIAGE RETURN (CR)> (CR) × [3.0] <LINE FEED (LF)> (LF) ÷ [3.1] LATIN SMALL LETTER A (ALetter) ÷ [3.2] <LINE FEED (LF)> (LF) ÷ [3.1] COMBINING DIAERESIS (Extend_FE) ÷ [0.3]
-÷ 0061 × 0308 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) ÷ [0.3]
-÷ 0020 × 200D ÷ 0646 ÷ # ÷ [0.2] SPACE (WSegSpace) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] ARABIC LETTER NOON (ALetter) ÷ [0.3]
-÷ 0646 × 200D ÷ 0020 ÷ # ÷ [0.2] ARABIC LETTER NOON (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] SPACE (WSegSpace) ÷ [0.3]
-÷ 0041 × 0041 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) × [5.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0041 × 003A × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [6.0] COLON (MidLetter) × [7.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0041 ÷ 003A ÷ 003A ÷ 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 05D0 × 0027 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [7.1] APOSTROPHE (Single_Quote) ÷ [0.3]
-÷ 05D0 × 0022 × 05D0 ÷ # ÷ [0.2] HEBREW LETTER ALEF (Hebrew_Letter) × [7.2] QUOTATION MARK (Double_Quote) × [7.3] HEBREW LETTER ALEF (Hebrew_Letter) ÷ [0.3]
-÷ 0041 × 0030 × 0030 × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [9.0] DIGIT ZERO (Numeric) × [8.0] DIGIT ZERO (Numeric) × [10.0] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 0030 × 002C × 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) × [12.0] COMMA (MidNum) × [11.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 0030 ÷ 002C ÷ 002C ÷ 0030 ÷ # ÷ [0.2] DIGIT ZERO (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ZERO (Numeric) ÷ [0.3]
-÷ 3031 × 3031 ÷ # ÷ [0.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.0] VERTICAL KANA REPEAT MARK (Katakana) ÷ [0.3]
-÷ 0041 × 005F × 0030 × 005F × 3031 × 005F ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ZERO (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] VERTICAL KANA REPEAT MARK (Katakana) × [13.1] LOW LINE (ExtendNumLet) ÷ [0.3]
-÷ 0041 × 005F × 005F × 0041 ÷ # ÷ [0.2] LATIN CAPITAL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN CAPITAL LETTER A (ALetter) ÷ [0.3]
-÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [15.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
-÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
-÷ 0061 ÷ 1F1E6 × 1F1E7 × 200D ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
-÷ 0061 ÷ 1F1E6 × 200D × 1F1E7 ÷ 1F1E8 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
-÷ 0061 ÷ 1F1E6 × 1F1E7 ÷ 1F1E8 × 1F1E9 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER A (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER B (RI) ÷ [999.0] REGIONAL INDICATOR SYMBOL LETTER C (RI) × [16.0] REGIONAL INDICATOR SYMBOL LETTER D (RI) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
-÷ 1F476 × 1F3FF ÷ 1F476 ÷ # ÷ [0.2] BABY (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) ÷ [999.0] BABY (ExtPict) ÷ [0.3]
-÷ 1F6D1 × 200D × 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
-÷ 0061 × 200D × 1F6D1 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
-÷ 2701 × 200D × 2701 ÷ # ÷ [0.2] UPPER BLADE SCISSORS (Other) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] UPPER BLADE SCISSORS (Other) ÷ [0.3]
-÷ 0061 × 200D × 2701 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] UPPER BLADE SCISSORS (Other) ÷ [0.3]
-÷ 1F476 × 1F3FF × 0308 × 200D × 1F476 × 1F3FF ÷ # ÷ [0.2] BABY (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] BABY (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) ÷ [0.3]
-÷ 1F6D1 × 1F3FF ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) ÷ [0.3]
-÷ 200D × 1F6D1 × 1F3FF ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) × [4.0] EMOJI MODIFIER FITZPATRICK TYPE-6 (Extend_FE) ÷ [0.3]
-÷ 200D × 1F6D1 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
-÷ 200D × 1F6D1 ÷ # ÷ [0.2] ZERO WIDTH JOINER (ZWJ_FE) × [3.3] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
-÷ 1F6D1 ÷ 1F6D1 ÷ # ÷ [0.2] OCTAGONAL SIGN (ExtPict) ÷ [999.0] OCTAGONAL SIGN (ExtPict) ÷ [0.3]
-÷ 0061 × 0308 × 200D × 0308 × 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [4.0] COMBINING DIAERESIS (Extend_FE) × [4.0] ZERO WIDTH JOINER (ZWJ_FE) × [4.0] COMBINING DIAERESIS (Extend_FE) × [5.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
-÷ 0061 ÷ 0020 × 0020 ÷ 0062 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] SPACE (WSegSpace) × [3.4] SPACE (WSegSpace) ÷ [999.0] LATIN SMALL LETTER B (ALetter) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002C ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002C ÷ 003A ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002C ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002C ÷ 002E ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0031 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0031 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0031 × 005F × 0061 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] DIGIT ONE (Numeric) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 003A ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 003A ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 003A ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 003A ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 003A ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 003A ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COLON (MidLetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002E ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002E ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002E ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002E ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002E ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002E ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002C ÷ 003A ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002C ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002C ÷ 003A ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COLON (MidLetter) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002C ÷ 002E ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002C ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002C ÷ 002E ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] FULL STOP (MidNumLet) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002C ÷ 002C ÷ 0031 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] DIGIT ONE (Numeric) ÷ [0.3]
-÷ 0061 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0031 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] DIGIT ONE (Numeric) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-÷ 0061 × 005F × 0061 ÷ 002C ÷ 002C ÷ 0061 ÷ # ÷ [0.2] LATIN SMALL LETTER A (ALetter) × [13.1] LOW LINE (ExtendNumLet) × [13.2] LATIN SMALL LETTER A (ALetter) ÷ [999.0] COMMA (MidNum) ÷ [999.0] COMMA (MidNum) ÷ [999.0] LATIN SMALL LETTER A (ALetter) ÷ [0.3]
-#
-# Lines: 1823
-#
-# EOF
diff --git a/tests/auto/corelib/text/qtextboundaryfinder/tst_qtextboundaryfinder.cpp b/tests/auto/corelib/text/qtextboundaryfinder/tst_qtextboundaryfinder.cpp
index f9b597f604..560b4a47dd 100644
--- a/tests/auto/corelib/text/qtextboundaryfinder/tst_qtextboundaryfinder.cpp
+++ b/tests/auto/corelib/text/qtextboundaryfinder/tst_qtextboundaryfinder.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 <QTest>
#include <QScopedValueRollback>
@@ -33,9 +8,12 @@
#include <qfile.h>
#include <qdebug.h>
#include <qlist.h>
+#include <qset.h>
#include <algorithm>
+using namespace Qt::Literals::StringLiterals;
+
class tst_QTextBoundaryFinder : public QObject
{
Q_OBJECT
@@ -67,7 +45,6 @@ private slots:
void assignmentOperator();
void isAtSoftHyphen_data();
void isAtSoftHyphen();
- void thaiLineBreak();
};
@@ -97,7 +74,7 @@ inline char *toString(const QList<int> &list)
QT_END_NAMESPACE
#ifdef QT_BUILD_INTERNAL
-static void generateDataFromFile(const QString &fname)
+static void generateDataFromFile(const QString &fname, const QSet<QString> &skipSet = {})
{
QTest::addColumn<QString>("testString");
QTest::addColumn<QList<int> >("expectedBreakPositions");
@@ -105,9 +82,7 @@ static void generateDataFromFile(const QString &fname)
QString testFile = QFINDTESTDATA(fname);
QVERIFY2(!testFile.isEmpty(), (fname.toLatin1() + QByteArray(" not found!")));
QFile f(testFile);
- QVERIFY(f.exists());
-
- f.open(QIODevice::ReadOnly);
+ QVERIFY(f.open(QIODevice::ReadOnly));
int linenum = 0;
while (!f.atEnd()) {
@@ -127,7 +102,8 @@ static void generateDataFromFile(const QString &fname)
QString testString;
QList<int> expectedBreakPositions;
- foreach (const QString &part, test.simplified().split(QLatin1Char(' '), Qt::SkipEmptyParts)) {
+ const QStringList parts = test.simplified().split(QLatin1Char(' '), Qt::SkipEmptyParts);
+ for (const QString &part : parts) {
if (part.size() == 1) {
if (part.at(0).unicode() == 0xf7)
expectedBreakPositions.append(testString.size());
@@ -148,10 +124,12 @@ static void generateDataFromFile(const QString &fname)
QVERIFY(!testString.isEmpty());
QVERIFY(!expectedBreakPositions.isEmpty());
+ bool skip = false;
+
if (!comments.isEmpty()) {
const QStringList lst = comments.simplified().split(QLatin1Char(' '), Qt::SkipEmptyParts);
comments.clear();
- foreach (const QString &part, lst) {
+ for (const QString &part : lst) {
if (part.size() == 1) {
if (part.at(0).unicode() == 0xf7)
comments += QLatin1Char('+');
@@ -159,13 +137,19 @@ static void generateDataFromFile(const QString &fname)
comments += QLatin1Char('x');
continue;
}
- if (part.startsWith(QLatin1Char('(')) && part.endsWith(QLatin1Char(')')))
+ if (part.startsWith(QLatin1Char('(')) && part.endsWith(QLatin1Char(')'))) {
+ skip |= skipSet.contains(part.sliced(1, part.length() - 2));
comments += part;
+ }
}
}
const QByteArray nm = "line #" + QByteArray::number(linenum) + ": " + comments.toLatin1();
- QTest::newRow(nm.constData()) << testString << expectedBreakPositions;
+
+ if (skip)
+ qDebug() << "Skipping" << nm;
+ else
+ QTest::newRow(nm.constData()) << testString << expectedBreakPositions;
}
}
#endif
@@ -211,7 +195,7 @@ static void doTestData(const QString &testString, const QList<int> &expectedBrea
QVERIFY(boundaryFinder.boundaryReasons() == QTextBoundaryFinder::NotAtBoundary);
// test boundaryReasons()
- for (int i = 0; i <= testString.length(); ++i) {
+ for (int i = 0; i <= testString.size(); ++i) {
boundaryFinder.setPosition(i);
QCOMPARE(!!(boundaryFinder.boundaryReasons() & reasons), expectedBreakPositions.contains(i));
}
@@ -225,7 +209,10 @@ QT_END_NAMESPACE
void tst_QTextBoundaryFinder::graphemeBoundariesDefault_data()
{
- generateDataFromFile("data/GraphemeBreakTest.txt");
+
+ // QTBUG-121907: We are not using Unicode grapheme segmentation for Indic scripts.
+ QSet<QString> skipSet = {u"ConjunctLinkingScripts_LinkingConsonant"_s};
+ generateDataFromFile("data/GraphemeBreakTest.txt", skipSet);
}
void tst_QTextBoundaryFinder::graphemeBoundariesDefault()
@@ -273,7 +260,10 @@ void tst_QTextBoundaryFinder::sentenceBoundariesDefault()
void tst_QTextBoundaryFinder::lineBoundariesDefault_data()
{
- generateDataFromFile("data/LineBreakTest.txt");
+ // QTBUG-121907: Indic line breaking is not supported
+ QSet<QString> skipSet = {u"AK"_s, u"AP"_s, u"AS"_s, u"VI"_s, u"VF"_s};
+
+ generateDataFromFile("data/LineBreakTest.txt", skipSet);
}
void tst_QTextBoundaryFinder::lineBoundariesDefault()
@@ -445,9 +435,9 @@ void tst_QTextBoundaryFinder::wordBoundaries_manual_data()
{
QString testString(QString::fromUtf8("This is a sample buffer.Please test me . He's don't Le'Clerk."));
QList<int> expectedBreakPositions, expectedStartPositions, expectedEndPositions;
- expectedBreakPositions << 0 << 4 << 5 << 7 << 8 << 9 << 10 << 11 << 12 << 13 << 14 << 20 << 21 << 27
- << 28 << 34 << 35 << 39 << 40 << 42 << 43 << 44 << 45 << 46 << 47 << 48
- << 49 << 53 << 54 << 59 << 60 << 68 << 69;
+ expectedBreakPositions << 0 << 4 << 5 << 7 << 12 << 13 << 14 << 20 << 21 << 27 << 28 << 34
+ << 35 << 39 << 40 << 42 << 43 << 44 << 49 << 53 << 54 << 59 << 60
+ << 68 << 69;
expectedStartPositions << 0 << 5 << 12 << 14 << 21 << 28 << 35 << 40 << 49 << 54 << 60;
expectedEndPositions << 4 << 7 << 13 << 20 << 27 << 34 << 39 << 42 << 53 << 59 << 68;
@@ -793,7 +783,7 @@ void tst_QTextBoundaryFinder::emptyText()
void tst_QTextBoundaryFinder::fastConstructor()
{
QString text("Hello World");
- QTextBoundaryFinder finder(QTextBoundaryFinder::Word, text.constData(), text.length(), /*buffer*/0, /*buffer size*/0);
+ QTextBoundaryFinder finder(QTextBoundaryFinder::Word, text.constData(), text.size(), /*buffer*/0, /*buffer size*/0);
QCOMPARE(finder.position(), 0);
QVERIFY(finder.boundaryReasons() & QTextBoundaryFinder::StartOfItem);
@@ -807,7 +797,7 @@ void tst_QTextBoundaryFinder::fastConstructor()
QVERIFY(finder.boundaryReasons() & QTextBoundaryFinder::StartOfItem);
finder.toNextBoundary();
- QCOMPARE(finder.position(), text.length());
+ QCOMPARE(finder.position(), text.size());
QVERIFY(finder.boundaryReasons() & QTextBoundaryFinder::EndOfItem);
finder.toNextBoundary();
@@ -867,95 +857,5 @@ void tst_QTextBoundaryFinder::isAtSoftHyphen()
doTestData(testString, expectedSoftHyphenPositions, QTextBoundaryFinder::Line, QTextBoundaryFinder::SoftHyphen);
}
-#if QT_CONFIG(library)
-#include <qlibrary.h>
-#endif
-
-#define LIBTHAI_MAJOR 0
-typedef int (*th_brk_def) (const unsigned char*, int*, size_t);
-static th_brk_def th_brk = 0;
-
-static bool init_libthai()
-{
-#if QT_CONFIG(library)
- static bool triedResolve = false;
- if (!triedResolve) {
- th_brk = (th_brk_def) QLibrary::resolve("thai", (int)LIBTHAI_MAJOR, "th_brk");
- triedResolve = true;
- }
-#endif
- return th_brk != 0;
-}
-
-void tst_QTextBoundaryFinder::thaiLineBreak()
-{
- if (!init_libthai())
- QSKIP("This test requires libThai-0.1.1x to be installed.");
-#if 0
- QString text = QString::fromUtf8("สวัสดีครับ นี่เป็นà¸à¸²à¸£à¸‡à¸—ดสอบตัวเอ");
-
- QTextBoundaryFinder finder(QTextBoundaryFinder::Line, text);
- finder.setPosition(0);
- QVERIFY(finder.isAtBoundary());
- finder.setPosition(1);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(2);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(3);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(4);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(5);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(6);
- QVERIFY(finder.isAtBoundary());
- finder.setPosition(7);
- QVERIFY(finder.isAtBoundary());
- finder.setPosition(8);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(9);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(10);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(11);
- QVERIFY(finder.isAtBoundary());
- finder.setPosition(12);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(13);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(14);
- QVERIFY(finder.isAtBoundary());
- finder.setPosition(15);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(16);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(17);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(18);
- QVERIFY(finder.isAtBoundary());
- finder.setPosition(19);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(20);
- QVERIFY(finder.isAtBoundary());
- finder.setPosition(21);
- QVERIFY(finder.isAtBoundary());
- finder.setPosition(22);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(23);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(24);
- QVERIFY(!finder.isAtBoundary());
- finder.setPosition(25);
- QVERIFY(finder.isAtBoundary());
- finder.setPosition(26);
- QVERIFY(finder.isAtBoundary());
- for (int i = 27; i < 32; ++i) {
- finder.setPosition(i);
- QVERIFY(!finder.isAtBoundary());
- }
-#endif
-}
-
-
QTEST_MAIN(tst_QTextBoundaryFinder)
#include "tst_qtextboundaryfinder.moc"
diff --git a/tests/auto/corelib/text/qunicodetools/CMakeLists.txt b/tests/auto/corelib/text/qunicodetools/CMakeLists.txt
index 7c624af995..fe7d8e35e2 100644
--- a/tests/auto/corelib/text/qunicodetools/CMakeLists.txt
+++ b/tests/auto/corelib/text/qunicodetools/CMakeLists.txt
@@ -1,11 +1,20 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qunicodetools Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qunicodetools LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qunicodetools
SOURCES
tst_qunicodetools.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/text/qunicodetools/tst_qunicodetools.cpp b/tests/auto/corelib/text/qunicodetools/tst_qunicodetools.cpp
index e84674c712..774c01c73b 100644
--- a/tests/auto/corelib/text/qunicodetools/tst_qunicodetools.cpp
+++ b/tests/auto/corelib/text/qunicodetools/tst_qunicodetools.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qchar.h>
@@ -72,7 +47,7 @@ static void verifyCharClassPattern(QString str, qulonglong pattern,
QCharAttributes cleared;
memset(&cleared, 0, sizeof(QCharAttributes));
QList<QCharAttributes> attributes(str.size() + 1, cleared);
- QUnicodeTools::initCharAttributes(str, scriptItems.data(), scriptItems.count(),
+ QUnicodeTools::initCharAttributes(str, scriptItems.data(), scriptItems.size(),
attributes.data(), type);
qulonglong bit = 1ull << str.size();
diff --git a/tests/auto/corelib/text/shared/test_number_shared.h b/tests/auto/corelib/text/shared/test_number_shared.h
index 0cbe4492e5..e121144e7c 100644
--- a/tests/auto/corelib/text/shared/test_number_shared.h
+++ b/tests/auto/corelib/text/shared/test_number_shared.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <limits>
#include <QtCore/qstring.h>
@@ -37,6 +12,7 @@ struct NumberDoubleTestData
int p;
QLatin1String expected;
QLatin1String optTitle = {}; // optional
+ // Tests with same (f, p, expected) should use optTitle to avoid duplicate data tags.
};
template<typename Fun>
@@ -48,7 +24,7 @@ inline void add_number_double_shared_data(Fun addTestRowFunction)
{ 0.0, 'f', 0, QLatin1String("0") },
{ 0.0, 'e', 0, QLatin1String("0e+00") },
{ 0.0, 'e', 1, QLatin1String("0.0e+00") },
- { 0.0001, 'f', 0, QLatin1String("0") },
+ { 0.0001, 'f', 0, QLatin1String("0"), QLatin1String("0(.0001)") },
{ 0.1234, 'f', 5, QLatin1String("0.12340") },
{ -0.1234, 'f', 5, QLatin1String("-0.12340") },
{ 0.0000000314, 'f', 12, QLatin1String("0.000000031400") },
diff --git a/tests/auto/corelib/thread/CMakeLists.txt b/tests/auto/corelib/thread/CMakeLists.txt
index 08df798b0b..68110b652b 100644
--- a/tests/auto/corelib/thread/CMakeLists.txt
+++ b/tests/auto/corelib/thread/CMakeLists.txt
@@ -1,11 +1,24 @@
-# Generated from thread.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(QT_BUILD_WASM_BATCHED_TESTS) # not all tests currently work in WebAssembly
+ add_subdirectory(qatomicint)
+ add_subdirectory(qatomicinteger)
+ add_subdirectory(qatomicpointer)
+ add_subdirectory(qfuturesynchronizer)
+ add_subdirectory(qmutexlocker)
+ add_subdirectory(qreadlocker)
+ add_subdirectory(qresultstore)
+ add_subdirectory(qwritelocker)
+ return()
+endif()
if(QT_FEATURE_thread)
add_subdirectory(qatomicint)
add_subdirectory(qatomicinteger)
add_subdirectory(qatomicpointer)
add_subdirectory(qresultstore)
- if(NOT INTEGRITY)
+ if(QT_FEATURE_concurrent AND NOT INTEGRITY)
add_subdirectory(qfuture)
endif()
add_subdirectory(qfuturesynchronizer)
@@ -14,29 +27,21 @@ if(QT_FEATURE_thread)
add_subdirectory(qreadlocker)
add_subdirectory(qreadwritelock)
add_subdirectory(qsemaphore)
- # special case begin
# QTBUG-85364
if(NOT CMAKE_CROSSCOMPILING)
add_subdirectory(qthread)
endif()
- # special case end
add_subdirectory(qthreadonce)
add_subdirectory(qthreadpool)
- # special case begin
- # QTBUG-87431
- if(NOT ANDROID)
- add_subdirectory(qthreadstorage)
- endif()
- # special case end
+ add_subdirectory(qthreadstorage)
add_subdirectory(qwaitcondition)
add_subdirectory(qwritelocker)
if(NOT INTEGRITY)
add_subdirectory(qpromise)
endif()
endif()
-# special case begin
+
# QTBUG-87431
-if(TARGET Qt::Concurrent AND NOT ANDROID AND NOT INTEGRITY)
+if(TARGET Qt::Concurrent AND NOT INTEGRITY)
add_subdirectory(qfuturewatcher)
endif()
-# special case end
diff --git a/tests/auto/corelib/thread/qatomicint/BLACKLIST b/tests/auto/corelib/thread/qatomicint/BLACKLIST
deleted file mode 100644
index 406fb7cc1c..0000000000
--- a/tests/auto/corelib/thread/qatomicint/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-# QTBUG-87422
-[alignment]
-android
diff --git a/tests/auto/corelib/thread/qatomicint/CMakeLists.txt b/tests/auto/corelib/thread/qatomicint/CMakeLists.txt
index 867388cfbf..239f3cce87 100644
--- a/tests/auto/corelib/thread/qatomicint/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicint/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qatomicint.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicint Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicint LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicint
SOURCES
tst_qatomicint.cpp
diff --git a/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp b/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp
index 1f0d9e7779..63cb494c11 100644
--- a/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp
+++ b/tests/auto/corelib/thread/qatomicint/tst_qatomicint.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -186,23 +161,19 @@ void tst_QAtomicInt::warningFreeHelper()
constexprFunctionsHelperTemplate<QBasicAtomicInteger<long int> >();
constexprFunctionsHelperTemplate<QBasicAtomicInteger<unsigned long int> >();
-#ifdef Q_ATOMIC_INT16_IS_SUPPORTED
warningFreeHelperTemplate<qint16, QBasicAtomicInteger<qint16> >();
warningFreeHelperTemplate<quint16, QBasicAtomicInteger<quint16> >();
constexprFunctionsHelperTemplate<QBasicAtomicInteger<qint16> >();
constexprFunctionsHelperTemplate<QBasicAtomicInteger<quint16> >();
warningFreeHelperTemplate<qint16, QBasicAtomicInteger<char16_t> >();
constexprFunctionsHelperTemplate<QBasicAtomicInteger<char16_t> >();
-#endif
-#ifdef Q_ATOMIC_INT8_IS_SUPPORTED
warningFreeHelperTemplate<char, QBasicAtomicInteger<char> >();
warningFreeHelperTemplate<signed char, QBasicAtomicInteger<signed char> >();
warningFreeHelperTemplate<unsigned char, QBasicAtomicInteger<unsigned char> >();
constexprFunctionsHelperTemplate<QBasicAtomicInteger<char> >();
constexprFunctionsHelperTemplate<QBasicAtomicInteger<signed char> >();
constexprFunctionsHelperTemplate<QBasicAtomicInteger<unsigned char> >();
-#endif
#ifdef Q_ATOMIC_INT64_IS_SUPPORTED
#if !defined(__i386__) || (defined(Q_CC_GNU) && defined(__OPTIMIZE__))
@@ -230,19 +201,12 @@ void tst_QAtomicInt::alignment()
static_assert(alignof(QBasicAtomicInt) == alignof(TypeInStruct<int>));
static_assert(alignof(QBasicAtomicInt) == alignof(TypeInStruct<int>));
-#ifdef Q_ATOMIC_INT32_IS_SUPPORTED
QCOMPARE(alignof(QBasicAtomicInteger<int>), alignof(TypeInStruct<int>));
-#endif
-
-#ifdef Q_ATOMIC_INT16_IS_SUPPORTED
QCOMPARE(alignof(QBasicAtomicInteger<short>), alignof(TypeInStruct<short>));
-#endif
-
-#ifdef Q_ATOMIC_INT8_IS_SUPPORTED
QCOMPARE(alignof(QBasicAtomicInteger<char>), alignof(TypeInStruct<char>));
-#endif
-#ifdef Q_ATOMIC_INT64_IS_SUPPORTED
+#if !defined(Q_PROCESSOR_X86_32) && defined(Q_ATOMIC_INT64_IS_SUPPORTED)
+ // The alignment is different on x86_32
QCOMPARE(alignof(QBasicAtomicInteger<qlonglong>), alignof(TypeInStruct<qlonglong>));
#endif
}
@@ -517,7 +481,6 @@ void tst_QAtomicInt::testAndSet()
QTEST(atomic.testAndSetOrdered(expected, newval), "result");
}
-#ifdef Q_ATOMIC_INT32_IS_SUPPORTED
QFETCH(bool, result);
// the new implementation has the version that loads the current value
@@ -552,7 +515,6 @@ void tst_QAtomicInt::testAndSet()
if (!result)
QCOMPARE(currentval, value);
}
-#endif
}
void tst_QAtomicInt::isFetchAndStoreNative()
@@ -714,7 +676,6 @@ void tst_QAtomicInt::fetchAndAdd_data()
QTest::newRow("7272+2181") << 7272 << 2181;
QTest::newRow("0+-1") << 0 << -1;
- QTest::newRow("1+0") << 1 << 0;
QTest::newRow("1+-2") << 1 << -2;
QTest::newRow("2+-1") << 2 << -1;
QTest::newRow("10+-21") << 10 << -21;
@@ -730,7 +691,6 @@ void tst_QAtomicInt::fetchAndAdd_data()
QTest::newRow("5451+-4362") << 5451 << -4362;
QTest::newRow("7272+-2181") << 7272 << -2181;
- QTest::newRow("0+1") << 0 << 1;
QTest::newRow("-1+0") << -1 << 0;
QTest::newRow("-1+2") << -1 << 2;
QTest::newRow("-2+1") << -2 << 1;
diff --git a/tests/auto/corelib/thread/qatomicinteger/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/CMakeLists.txt
index 8f0637a4d2..03a6323a1f 100644
--- a/tests/auto/corelib/thread/qatomicinteger/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qatomicinteger.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(char)
add_subdirectory(char16_t)
diff --git a/tests/auto/corelib/thread/qatomicinteger/char/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/char/CMakeLists.txt
index 57601dc0e4..882a9298f6 100644
--- a/tests/auto/corelib/thread/qatomicinteger/char/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/char/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from char.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_char Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_char LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_char
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/char16_t/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/char16_t/CMakeLists.txt
index 6ac58c9136..8e53b59689 100644
--- a/tests/auto/corelib/thread/qatomicinteger/char16_t/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/char16_t/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from char16_t.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_char16_t Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_char16_t LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_char16_t
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/char32_t/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/char32_t/CMakeLists.txt
index 911e9f5067..5881d475f4 100644
--- a/tests/auto/corelib/thread/qatomicinteger/char32_t/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/char32_t/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from char32_t.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_char32_t Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_char32_t LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_char32_t
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/int/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/int/CMakeLists.txt
index be59e2dc98..0915e77a8d 100644
--- a/tests/auto/corelib/thread/qatomicinteger/int/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/int/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from int.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_int Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_int LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_int
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/long/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/long/CMakeLists.txt
index 3f632ff212..adf6638bfa 100644
--- a/tests/auto/corelib/thread/qatomicinteger/long/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/long/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from long.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_long Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_long LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_long
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/qlonglong/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/qlonglong/CMakeLists.txt
index 3de9227bb1..2ec977d7cb 100644
--- a/tests/auto/corelib/thread/qatomicinteger/qlonglong/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/qlonglong/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qlonglong.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_qlonglong Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_qlonglong LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_qlonglong
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/qptrdiff/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/qptrdiff/CMakeLists.txt
index cc6b5126d9..a2450931d5 100644
--- a/tests/auto/corelib/thread/qatomicinteger/qptrdiff/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/qptrdiff/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qptrdiff.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_qptrdiff Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_qptrdiff LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_qptrdiff
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/quintptr/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/quintptr/CMakeLists.txt
index 44cf39f06d..98302b5d07 100644
--- a/tests/auto/corelib/thread/qatomicinteger/quintptr/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/quintptr/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from quintptr.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_quintptr Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_quintptr LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_quintptr
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/qulonglong/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/qulonglong/CMakeLists.txt
index 18d3e384b9..13acfc3e2b 100644
--- a/tests/auto/corelib/thread/qatomicinteger/qulonglong/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/qulonglong/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qulonglong.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_qulonglong Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_qulonglong LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_qulonglong
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/schar/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/schar/CMakeLists.txt
index 760967532a..127f752cc2 100644
--- a/tests/auto/corelib/thread/qatomicinteger/schar/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/schar/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from schar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_schar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_schar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_schar
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/short/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/short/CMakeLists.txt
index 3f762e34ab..df9d2af4c3 100644
--- a/tests/auto/corelib/thread/qatomicinteger/short/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/short/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from short.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_short Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_short LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_short
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp b/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp
index dce27ee9c1..d1a8a8f729 100644
--- a/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp
+++ b/tests/auto/corelib/thread/qatomicinteger/tst_qatomicinteger.cpp
@@ -1,54 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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$
-**
-****************************************************************************/
-
-#ifdef QT_ATOMIC_FORCE_CXX11
-// We need to check if this compiler has C++11 atomics and constexpr support.
-// We can't rely on qcompilerdetection.h because it forces all of qglobal.h to
-// be included, which causes qbasicatomic.h to be included too.
-// Incomplete, but ok
-# if defined(__INTEL_COMPILER) && __INTEL_COMPILER >= 1500 && (__cplusplus >= 201103L || defined(__INTEL_CXX11_MODE__))
-# elif defined(__clang__) && (__cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__))
-# if !__has_feature(cxx_constexpr) || !__has_feature(cxx_atomic) || !__has_include(<atomic>)
-# undef QT_ATOMIC_FORCE_CXX11
-# endif
-# elif defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 407 && (__cplusplus >= 201103L || defined(__GXX_EXPERIMENTAL_CXX0X__))
-# elif defined(_MSC_VER)
- // We need MSVC 2015 because of: atomics (2012), constexpr (2015), and unrestricted unions (2015).
- // Support for constexpr is not working completely on MSVC 2015 but it's enough for the test.
-# else
-# undef QT_ATOMIC_FORCE_CXX11
-# endif
-
-# ifndef QT_ATOMIC_FORCE_CXX11
-# undef QATOMIC_TEST_TYPE
-# define QATOMIC_TEST_TYPE unsupported
-# endif
-#endif
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QAtomicInt>
@@ -57,6 +8,12 @@
#include <limits.h>
#include <wchar.h>
+#if !defined(Q_ATOMIC_INT8_IS_SUPPORTED)
+# error "QAtomicInteger for 8-bit types must be supported!"
+#endif
+#if !defined(Q_ATOMIC_INT16_IS_SUPPORTED)
+# error "QAtomicInteger for 16-bit types must be supported!"
+#endif
#if !defined(Q_ATOMIC_INT32_IS_SUPPORTED)
# error "QAtomicInteger for 32-bit types must be supported!"
#endif
@@ -65,31 +22,21 @@
#endif
// always supported types:
+#define TYPE_SUPPORTED_char 1
+#define TYPE_SUPPORTED_uchar 1
+#define TYPE_SUPPORTED_schar 1
+#define TYPE_SUPPORTED_short 1
+#define TYPE_SUPPORTED_ushort 1
+#define TYPE_SUPPORTED_char16_t 1
+#define TYPE_SUPPORTED_wchar_t 1
#define TYPE_SUPPORTED_int 1
#define TYPE_SUPPORTED_uint 1
#define TYPE_SUPPORTED_long 1
#define TYPE_SUPPORTED_ulong 1
#define TYPE_SUPPORTED_qptrdiff 1
#define TYPE_SUPPORTED_quintptr 1
-#if (defined(__SIZEOF_WCHAR_T__) && (__SIZEOF_WCHAR_T__-0) > 2) \
- || (defined(WCHAR_MAX) && (WCHAR_MAX-0 > 0x10000))
-# define TYPE_SUPPORTED_wchar_t 1
-#endif
-#define TYPE_SUPPORTED_char32_t 1
+#define TYPE_SUPPORTED_char32_t 1
-#ifdef Q_ATOMIC_INT8_IS_SUPPORTED
-# define TYPE_SUPPORTED_char 1
-# define TYPE_SUPPORTED_uchar 1
-# define TYPE_SUPPORTED_schar 1
-#endif
-#ifdef Q_ATOMIC_INT16_IS_SUPPORTED
-# define TYPE_SUPPORTED_short 1
-# define TYPE_SUPPORTED_ushort 1
-# define TYPE_SUPPORTED_char16_t 1
-# ifndef TYPE_SUPPORTED_wchar_t
-# define TYPE_SUPPORTED_wchar_t 1
-# endif
-#endif
#ifdef Q_ATOMIC_INT64_IS_SUPPORTED
# define TYPE_SUPPORTED_qlonglong 1
# define TYPE_SUPPORTED_qulonglong 1
@@ -117,6 +64,7 @@ typedef signed char schar;
typedef TEST_TYPE Type;
typedef Type T; // shorthand
+using U = std::make_unsigned_t<T>;
enum {
TypeIsUnsigned = Type(-1) > Type(0),
TypeIsSigned = !TypeIsUnsigned
@@ -127,6 +75,8 @@ template <> struct LargeIntTemplate<true> { typedef quint64 Type; };
template <> struct LargeIntTemplate<false> { typedef qint64 Type; };
typedef LargeIntTemplate<TypeIsUnsigned>::Type LargeInt;
+namespace {
+
class tst_QAtomicIntegerXX : public QObject
{
Q_OBJECT
@@ -342,46 +292,32 @@ void tst_QAtomicIntegerXX::loadAcquireStoreRelease()
void tst_QAtomicIntegerXX::refDeref()
{
QFETCH(LargeInt, value);
- const bool needToPreventOverflow = TypeIsSigned && value == std::numeric_limits<T>::max();
- const bool needToPreventUnderflow = TypeIsSigned && value == std::numeric_limits<T>::min();
- T nextValue = T(value);
- if (!needToPreventOverflow)
- ++nextValue;
- T prevValue = T(value);
- if (!needToPreventUnderflow)
- --prevValue;
+
+ // We perform arithmetic using the unsigned type U to avoid signed
+ // integer overflows in the non-atomic portion (atomics have well-defined,
+ // two's complement overflow, even signed ones).
+ T nextValue = T(U(value) + 1);
+ T prevValue = T(U(value) - 1);
QAtomicInteger<T> atomic(value);
- if (!needToPreventOverflow) {
QCOMPARE(atomic.ref(), (nextValue != 0));
QCOMPARE(atomic.loadRelaxed(), nextValue);
QCOMPARE(atomic.deref(), (value != 0));
- }
QCOMPARE(atomic.loadRelaxed(), T(value));
- if (!needToPreventUnderflow) {
QCOMPARE(atomic.deref(), (prevValue != 0));
QCOMPARE(atomic.loadRelaxed(), prevValue);
QCOMPARE(atomic.ref(), (value != 0));
- }
QCOMPARE(atomic.loadRelaxed(), T(value));
- if (!needToPreventOverflow) {
QCOMPARE(++atomic, nextValue);
QCOMPARE(--atomic, T(value));
- }
- if (!needToPreventUnderflow) {
QCOMPARE(--atomic, prevValue);
QCOMPARE(++atomic, T(value));
- }
- if (!needToPreventOverflow) {
QCOMPARE(atomic++, T(value));
QCOMPARE(atomic--, nextValue);
- }
- if (!needToPreventUnderflow) {
QCOMPARE(atomic--, T(value));
QCOMPARE(atomic++, prevValue);
- }
QCOMPARE(atomic.loadRelaxed(), T(value));
}
@@ -484,80 +420,55 @@ void tst_QAtomicIntegerXX::fetchAndAdd()
QFETCH(LargeInt, value);
QAtomicInteger<T> atomic(value);
+ // We perform the additions using the unsigned type U to avoid signed
+ // integer overflows in the non-atomic portion (atomics have well-defined,
+ // two's complement overflow, even signed ones).
T parcel1 = 42;
T parcel2 = T(0-parcel1);
+ T newValue1 = T(U(value) + parcel1);
+ T newValue2 = T(U(value) + parcel2);
- const bool needToPreventOverflow = TypeIsSigned && value > std::numeric_limits<T>::max() + parcel2;
- const bool needToPreventUnderflow = TypeIsSigned && value < std::numeric_limits<T>::min() + parcel1;
-
- T newValue1 = T(value);
- if (!needToPreventOverflow)
- newValue1 += parcel1;
- T newValue2 = T(value);
- if (!needToPreventUnderflow)
- newValue2 += parcel2;
-
- if (!needToPreventOverflow) {
QCOMPARE(atomic.fetchAndAddRelaxed(parcel1), T(value));
QCOMPARE(atomic.loadRelaxed(), newValue1);
QCOMPARE(atomic.fetchAndAddRelaxed(parcel2), newValue1);
- }
QCOMPARE(atomic.loadRelaxed(), T(value));
- if (!needToPreventUnderflow) {
QCOMPARE(atomic.fetchAndAddRelaxed(parcel2), T(value));
QCOMPARE(atomic.loadRelaxed(), newValue2);
QCOMPARE(atomic.fetchAndAddRelaxed(parcel1), newValue2);
- }
QCOMPARE(atomic.loadRelaxed(), T(value));
- if (!needToPreventOverflow) {
QCOMPARE(atomic.fetchAndAddAcquire(parcel1), T(value));
QCOMPARE(atomic.loadRelaxed(), newValue1);
QCOMPARE(atomic.fetchAndAddAcquire(parcel2), newValue1);
- }
QCOMPARE(atomic.loadRelaxed(), T(value));
- if (!needToPreventUnderflow) {
QCOMPARE(atomic.fetchAndAddAcquire(parcel2), T(value));
QCOMPARE(atomic.loadRelaxed(), newValue2);
QCOMPARE(atomic.fetchAndAddAcquire(parcel1), newValue2);
- }
QCOMPARE(atomic.loadRelaxed(), T(value));
- if (!needToPreventOverflow) {
QCOMPARE(atomic.fetchAndAddRelease(parcel1), T(value));
QCOMPARE(atomic.loadAcquire(), newValue1);
QCOMPARE(atomic.fetchAndAddRelease(parcel2), newValue1);
- }
QCOMPARE(atomic.loadAcquire(), T(value));
- if (!needToPreventUnderflow) {
QCOMPARE(atomic.fetchAndAddRelease(parcel2), T(value));
QCOMPARE(atomic.loadAcquire(), newValue2);
QCOMPARE(atomic.fetchAndAddRelease(parcel1), newValue2);
- }
QCOMPARE(atomic.loadAcquire(), T(value));
- if (!needToPreventOverflow) {
QCOMPARE(atomic.fetchAndAddOrdered(parcel1), T(value));
QCOMPARE(atomic.loadAcquire(), newValue1);
QCOMPARE(atomic.fetchAndAddOrdered(parcel2), newValue1);
- }
QCOMPARE(atomic.loadAcquire(), T(value));
- if (!needToPreventUnderflow) {
QCOMPARE(atomic.fetchAndAddOrdered(parcel2), T(value));
QCOMPARE(atomic.loadAcquire(), newValue2);
QCOMPARE(atomic.fetchAndAddOrdered(parcel1), newValue2);
- }
QCOMPARE(atomic.loadAcquire(), T(value));
// operator+=
- if (!needToPreventOverflow) {
QCOMPARE(atomic += parcel1, newValue1);
QCOMPARE(atomic += parcel2, T(value));
- }
- if (!needToPreventUnderflow) {
QCOMPARE(atomic += parcel2, newValue2);
QCOMPARE(atomic += parcel1, T(value));
- }
}
void tst_QAtomicIntegerXX::fetchAndSub()
@@ -565,80 +476,55 @@ void tst_QAtomicIntegerXX::fetchAndSub()
QFETCH(LargeInt, value);
QAtomicInteger<T> atomic(value);
+ // We perform the subtractions using the unsigned type U to avoid signed
+ // integer underrflows in the non-atomic portion (atomics have well-defined,
+ // two's complement underflow, even signed ones).
T parcel1 = 42;
T parcel2 = T(0-parcel1);
+ T newValue1 = T(U(value) - parcel1);
+ T newValue2 = T(U(value) - parcel2);
- const bool needToPreventOverflow = TypeIsSigned && value > std::numeric_limits<T>::max() - parcel1;
- const bool needToPreventUnderflow = TypeIsSigned && value < std::numeric_limits<T>::min() - parcel2;
-
- T newValue1 = T(value);
- if (!needToPreventUnderflow)
- newValue1 -= parcel1;
- T newValue2 = T(value);
- if (!needToPreventOverflow)
- newValue2 -= parcel2;
-
- if (!needToPreventUnderflow) {
QCOMPARE(atomic.fetchAndSubRelaxed(parcel1), T(value));
QCOMPARE(atomic.loadRelaxed(), newValue1);
QCOMPARE(atomic.fetchAndSubRelaxed(parcel2), newValue1);
- }
QCOMPARE(atomic.loadRelaxed(), T(value));
- if (!needToPreventOverflow) {
QCOMPARE(atomic.fetchAndSubRelaxed(parcel2), T(value));
QCOMPARE(atomic.loadRelaxed(), newValue2);
QCOMPARE(atomic.fetchAndSubRelaxed(parcel1), newValue2);
- }
QCOMPARE(atomic.loadRelaxed(), T(value));
- if (!needToPreventUnderflow) {
QCOMPARE(atomic.fetchAndSubAcquire(parcel1), T(value));
QCOMPARE(atomic.loadRelaxed(), newValue1);
QCOMPARE(atomic.fetchAndSubAcquire(parcel2), newValue1);
- }
QCOMPARE(atomic.loadRelaxed(), T(value));
- if (!needToPreventOverflow) {
QCOMPARE(atomic.fetchAndSubAcquire(parcel2), T(value));
QCOMPARE(atomic.loadRelaxed(), newValue2);
QCOMPARE(atomic.fetchAndSubAcquire(parcel1), newValue2);
- }
QCOMPARE(atomic.loadRelaxed(), T(value));
- if (!needToPreventUnderflow) {
QCOMPARE(atomic.fetchAndSubRelease(parcel1), T(value));
QCOMPARE(atomic.loadAcquire(), newValue1);
QCOMPARE(atomic.fetchAndSubRelease(parcel2), newValue1);
- }
QCOMPARE(atomic.loadAcquire(), T(value));
- if (!needToPreventOverflow) {
QCOMPARE(atomic.fetchAndSubRelease(parcel2), T(value));
QCOMPARE(atomic.loadAcquire(), newValue2);
QCOMPARE(atomic.fetchAndSubRelease(parcel1), newValue2);
- }
QCOMPARE(atomic.loadAcquire(), T(value));
- if (!needToPreventUnderflow) {
QCOMPARE(atomic.fetchAndSubOrdered(parcel1), T(value));
QCOMPARE(atomic.loadAcquire(), newValue1);
QCOMPARE(atomic.fetchAndSubOrdered(parcel2), newValue1);
- }
QCOMPARE(atomic.loadAcquire(), T(value));
- if (!needToPreventOverflow) {
QCOMPARE(atomic.fetchAndSubOrdered(parcel2), T(value));
QCOMPARE(atomic.loadAcquire(), newValue2);
QCOMPARE(atomic.fetchAndSubOrdered(parcel1), newValue2);
- }
QCOMPARE(atomic.loadAcquire(), T(value));
// operator-=
- if (!needToPreventUnderflow) {
QCOMPARE(atomic -= parcel1, newValue1);
QCOMPARE(atomic -= parcel2, T(value));
- }
- if (!needToPreventOverflow) {
QCOMPARE(atomic -= parcel2, newValue2);
QCOMPARE(atomic -= parcel1, T(value));
- }
}
void tst_QAtomicIntegerXX::fetchAndOr()
@@ -788,8 +674,9 @@ void tst_QAtomicIntegerXX::fetchAndXor()
QCOMPARE(atomic ^= minusOne, T(~value));
QCOMPARE(atomic ^= minusOne, T(value));
}
-
-#include "tst_qatomicinteger.moc"
+}
QTEST_APPLESS_MAIN(tst_QAtomicIntegerXX)
+#include "tst_qatomicinteger.moc"
+
diff --git a/tests/auto/corelib/thread/qatomicinteger/uchar/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/uchar/CMakeLists.txt
index 912365a6e9..95d88d31a6 100644
--- a/tests/auto/corelib/thread/qatomicinteger/uchar/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/uchar/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from uchar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_uchar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_uchar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_uchar
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/uint/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/uint/CMakeLists.txt
index 725fa91704..2ab977ef6a 100644
--- a/tests/auto/corelib/thread/qatomicinteger/uint/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/uint/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from uint.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_uint Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_uint LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_uint
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/ulong/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/ulong/CMakeLists.txt
index d5d35f587d..7707bd53b5 100644
--- a/tests/auto/corelib/thread/qatomicinteger/ulong/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/ulong/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from ulong.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_ulong Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_ulong LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_ulong
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/ushort/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/ushort/CMakeLists.txt
index fd7c002345..667e9eade6 100644
--- a/tests/auto/corelib/thread/qatomicinteger/ushort/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/ushort/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from ushort.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_ushort Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_ushort LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_ushort
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicinteger/wchar_t/CMakeLists.txt b/tests/auto/corelib/thread/qatomicinteger/wchar_t/CMakeLists.txt
index aecb81005c..0e2d084b58 100644
--- a/tests/auto/corelib/thread/qatomicinteger/wchar_t/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicinteger/wchar_t/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from wchar_t.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicinteger_wchar_t Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicinteger_wchar_t LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicinteger_wchar_t
SOURCES
../tst_qatomicinteger.cpp
diff --git a/tests/auto/corelib/thread/qatomicpointer/CMakeLists.txt b/tests/auto/corelib/thread/qatomicpointer/CMakeLists.txt
index 2c3f32d7e3..cd8df9db66 100644
--- a/tests/auto/corelib/thread/qatomicpointer/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qatomicpointer/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qatomicpointer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qatomicpointer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qatomicpointer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qatomicpointer
SOURCES
tst_qatomicpointer.cpp
diff --git a/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp b/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp
index 6ca0d3c227..347831819e 100644
--- a/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp
+++ b/tests/auto/corelib/thread/qatomicpointer/tst_qatomicpointer.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/corelib/thread/qfuture/CMakeLists.txt b/tests/auto/corelib/thread/qfuture/CMakeLists.txt
index 7844cf31b9..aa989f3df1 100644
--- a/tests/auto/corelib/thread/qfuture/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qfuture/CMakeLists.txt
@@ -1,15 +1,20 @@
-# Generated from qfuture.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfuture Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfuture LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfuture
SOURCES
tst_qfuture.cpp
-# DEFINES
-# -QT_NO_JAVA_STYLE_ITERATORS
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
@@ -17,3 +22,5 @@ qt_internal_extend_target(tst_qfuture CONDITION MSVC
COMPILE_OPTIONS
/bigobj
)
+
+qt_internal_undefine_global_definition(tst_qfuture QT_NO_JAVA_STYLE_ITERATORS)
diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
index 943ea2ea34..3fc796514d 100644
--- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
+++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp
@@ -1,30 +1,8 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#define QFUTURE_TEST
#include <QCoreApplication>
@@ -33,6 +11,10 @@
#include <QTestEventLoop>
#include <QTimer>
#include <QSignalSpy>
+#include <QVarLengthArray>
+#include <QSet>
+#include <QList>
+#include <private/qobject_p.h>
#include <QTest>
#include <qfuture.h>
@@ -44,18 +26,21 @@
#include <QtConcurrent/qtconcurrentrun.h>
#include <private/qfutureinterface_p.h>
+#include <forward_list>
+#include <list>
#include <vector>
#include <memory>
+#include <set>
// COM interface macro.
#if defined(Q_OS_WIN) && defined(interface)
# undef interface
#endif
-struct ResultStoreInt : QtPrivate::ResultStoreBase
-{
- ~ResultStoreInt() { clear<int>(); }
-};
+using namespace std::chrono_literals;
+static constexpr auto DefaultWaitTime = 2s;
+
+using namespace Qt::StringLiterals;
class SenderObject : public QObject
{
@@ -69,6 +54,23 @@ public:
{
emit multipleArgs(value1, value2, value3);
}
+ void emitTupleArgSignal(const std::tuple<int, double, QString> &t) { emit tupleArgSignal(t); }
+ void emitMultiArgsWithTupleSignal1(int value, const std::tuple<int, double, QString> &t)
+ {
+ emit multiArgsWithTupleSignal1(value, t);
+ }
+ void emitMultiArgsWithTupleSignal2(const std::tuple<int, double, QString> &t, int value)
+ {
+ emit multiArgsWithTupleSignal2(t, value);
+ }
+ void emitMultiArgsWithPairSignal1(int value, const std::pair<int, double> &p)
+ {
+ emit multiArgsWithPairSignal1(value, p);
+ }
+ void emitMultiArgsWithPairSignal2(const std::pair<int, double> &p, int value)
+ {
+ emit multiArgsWithPairSignal2(p, value);
+ }
void emitNoArgPrivateSignal() { emit noArgPrivateSignal(QPrivateSignal()); }
void emitIntArgPrivateSignal(int value) { emit intArgPrivateSignal(value, QPrivateSignal()); }
@@ -76,17 +78,51 @@ public:
{
emit multiArgsPrivateSignal(value1, value2, value3, QPrivateSignal());
}
+ void emitTupleArgPrivateSignal(const std::tuple<int, double, QString> &t)
+ {
+ emit tupleArgPrivateSignal(t, QPrivateSignal());
+ }
+ void emitMultiArgsWithTuplePrivateSignal1(int value, const std::tuple<int, double, QString> &t)
+ {
+ emit multiArgsWithTuplePrivateSignal1(value, t, QPrivateSignal());
+ }
+ void emitMultiArgsWithTuplePrivateSignal2(const std::tuple<int, double, QString> &t, int value)
+ {
+ emit multiArgsWithTuplePrivateSignal2(t, value, QPrivateSignal());
+ }
+ void emitMultiArgsWithPairPrivateSignal1(int value, const std::pair<int, double> &p)
+ {
+ emit multiArgsWithPairPrivateSignal1(value, p, QPrivateSignal());
+ }
+ void emitMultiArgsWithPairPrivateSignal2(const std::pair<int, double> &p, int value)
+ {
+ emit multiArgsWithPairPrivateSignal2(p, value, QPrivateSignal());
+ }
signals:
void noArgSignal();
void intArgSignal(int value);
void constRefArg(const QString &value);
void multipleArgs(int value1, double value2, const QString &value3);
+ void tupleArgSignal(const std::tuple<int, double, QString> &t);
+ void multiArgsWithTupleSignal1(int value, const std::tuple<int, double, QString> &t);
+ void multiArgsWithTupleSignal2(const std::tuple<int, double, QString> &t, int value);
+ void multiArgsWithPairSignal1(int value, const std::pair<int, double> &p);
+ void multiArgsWithPairSignal2(const std::pair<int, double> &p, int value);
// Private signals
void noArgPrivateSignal(QPrivateSignal);
void intArgPrivateSignal(int value, QPrivateSignal);
void multiArgsPrivateSignal(int value1, double value2, const QString &value3, QPrivateSignal);
+ void tupleArgPrivateSignal(const std::tuple<int, double, QString> &t, QPrivateSignal);
+ void multiArgsWithTuplePrivateSignal1(int value, const std::tuple<int, double, QString> &t,
+ QPrivateSignal);
+ void multiArgsWithTuplePrivateSignal2(const std::tuple<int, double, QString> &t, int value,
+ QPrivateSignal);
+ void multiArgsWithPairPrivateSignal1(int value, const std::pair<int, double> &p,
+ QPrivateSignal);
+ void multiArgsWithPairPrivateSignal2(const std::pair<int, double> &p, int value,
+ QPrivateSignal);
};
class LambdaThread : public QThread
@@ -107,6 +143,18 @@ private:
std::function<void ()> m_fn;
};
+// Emulates QWidget behavior by deleting its children early in the destructor
+// instead of leaving it to ~QObject()
+class FakeQWidget : public QObject
+{
+ Q_OBJECT
+public:
+ ~FakeQWidget() override {
+ auto *d = QObjectPrivate::get(this);
+ d->deleteChildren();
+ }
+};
+
using UniquePtr = std::unique_ptr<int>;
class tst_QFuture: public QObject
@@ -156,6 +204,7 @@ private slots:
#endif
void onCanceled();
void cancelContinuations();
+ void continuationsWithContext_data();
void continuationsWithContext();
void continuationsWithMoveOnlyLambda();
#if 0
@@ -177,6 +226,7 @@ private slots:
void rejectPendingResultOverwrite();
void createReadyFutures();
+ void continuationsAfterReadyFutures();
void getFutureInterface();
void convertQMetaType();
@@ -194,7 +244,11 @@ private slots:
void whenAnyDifferentTypesWithCanceled();
void whenAnyDifferentTypesWithFailed();
+ void continuationOverride();
void continuationsDontLeak();
+ void cancelAfterFinishWithContinuations();
+
+ void unwrap();
private:
using size_type = std::vector<int>::size_type;
@@ -209,6 +263,16 @@ private:
static void testTakeResults(QFuture<T> future, size_type resultCount);
};
+class IntResultsCleaner
+{
+public:
+ IntResultsCleaner(QtPrivate::ResultStoreBase &s) : store(s) { }
+ ~IntResultsCleaner() { store.clear<int>(); }
+
+private:
+ QtPrivate::ResultStoreBase &store;
+};
+
void tst_QFuture::resultStore()
{
int int0 = 0;
@@ -216,7 +280,9 @@ void tst_QFuture::resultStore()
int int2 = 2;
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
QCOMPARE(store.begin(), store.end());
QCOMPARE(store.resultAt(0), store.end());
QCOMPARE(store.resultAt(1), store.end());
@@ -224,7 +290,9 @@ void tst_QFuture::resultStore()
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(-1, &int0);
store.addResult(1, &int1);
QtPrivate::ResultIteratorBase it = store.begin();
@@ -246,7 +314,9 @@ void tst_QFuture::resultStore()
QList<int> vec1 = QList<int>() << 4 << 5;
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResults(-1, &vec0, 2);
store.addResults(-1, &vec1, 2);
QtPrivate::ResultIteratorBase it = store.begin();
@@ -269,7 +339,9 @@ void tst_QFuture::resultStore()
QCOMPARE(it, store.end());
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(-1, &int0);
store.addResults(-1, &vec1, 2);
store.addResult(-1, &int1);
@@ -300,7 +372,9 @@ void tst_QFuture::resultStore()
QCOMPARE(store.resultAt(4), store.end());
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(-1, &int0);
store.addResults(-1, &vec0);
store.addResult(-1, &int1);
@@ -330,7 +404,9 @@ void tst_QFuture::resultStore()
QCOMPARE(store.resultAt(3).value<int>(), int1);
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(-1, &int0);
store.addResults(-1, &vec0);
store.addResult(200, &int1);
@@ -342,7 +418,9 @@ void tst_QFuture::resultStore()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(1, &int1);
store.addResult(0, &int0);
store.addResult(-1, &int2);
@@ -353,7 +431,9 @@ void tst_QFuture::resultStore()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
QCOMPARE(store.contains(0), false);
QCOMPARE(store.contains(1), false);
QCOMPARE(store.contains(INT_MAX), false);
@@ -361,7 +441,9 @@ void tst_QFuture::resultStore()
{
// Test filter mode, where "gaps" in the result array aren't allowed.
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResult(0, &int0);
@@ -395,7 +477,9 @@ void tst_QFuture::resultStore()
{
// test canceled results
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResult(0, &int0);
@@ -432,7 +516,9 @@ void tst_QFuture::resultStore()
{
// test addResult return value
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResult(0, &int0);
@@ -478,7 +564,9 @@ void tst_QFuture::resultStore()
{
// test resultCount in non-filtered mode. It should always be possible
// to iterate through the results 0 to resultCount.
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(0, &int0);
QCOMPARE(store.count(), 1);
@@ -492,7 +580,9 @@ void tst_QFuture::resultStore()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(2, &int0);
QCOMPARE(store.count(), 0);
@@ -504,7 +594,9 @@ void tst_QFuture::resultStore()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResults(2, &vec1);
QCOMPARE(store.count(), 0);
@@ -516,7 +608,9 @@ void tst_QFuture::resultStore()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResults(2, &vec1);
QCOMPARE(store.count(), 0);
@@ -524,7 +618,9 @@ void tst_QFuture::resultStore()
QCOMPARE(store.count(), 4);
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResults(3, &vec1);
QCOMPARE(store.count(), 0);
@@ -536,7 +632,9 @@ void tst_QFuture::resultStore()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResults(3, &vec1);
QCOMPARE(store.count(), 0);
@@ -549,7 +647,9 @@ void tst_QFuture::resultStore()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResults(3, &vec1);
QCOMPARE(store.count(), 0);
@@ -559,7 +659,9 @@ void tst_QFuture::resultStore()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResults(3, &vec1);
QCOMPARE(store.count(), 0);
@@ -572,7 +674,9 @@ void tst_QFuture::resultStore()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(1, &int0);
store.addResult(3, &int0);
store.addResults(6, &vec0);
@@ -587,7 +691,9 @@ void tst_QFuture::resultStore()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResult(1, &int0);
store.addResult(3, &int0);
@@ -615,7 +721,9 @@ void tst_QFuture::resultStore()
QCOMPARE(store.contains(7), false);
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addCanceledResult(0);
QCOMPARE(store.contains(0), false);
@@ -994,13 +1102,13 @@ void tst_QFuture::multipleResults()
QList<int> fasit = QList<int>() << 1 << 2 << 3 << 4;
{
QList<int> results;
- for (int result : qAsConst(f))
+ for (int result : std::as_const(f))
results.append(result);
QCOMPARE(results, fasit);
}
{
QList<int> results;
- for (int result : qAsConst(copy))
+ for (int result : std::as_const(copy))
results.append(result);
QCOMPARE(results, fasit);
}
@@ -1873,7 +1981,7 @@ void tst_QFuture::nonGlobalThreadPool()
void run() override
{
const int ms = 100 + (QRandomGenerator::global()->bounded(100) - 100/2);
- QThread::msleep(ulong(ms));
+ QThread::sleep(std::chrono::milliseconds{ms});
reportResult(Answer);
reportFinished();
}
@@ -2158,6 +2266,26 @@ void tst_QFuture::then()
QVERIFY(threadId1 != QThread::currentThreadId());
QVERIFY(threadId2 != QThread::currentThreadId());
}
+
+ // QTBUG-106083 & QTBUG-105182
+ {
+ QThread thread;
+ thread.start();
+
+ QObject context;
+ context.moveToThread(&thread);
+
+ auto future = QtConcurrent::run([] {
+ return 42;
+ }).then([] (int result) {
+ return result + 1;
+ }).then(&context, [] (int result) {
+ return result + 1;
+ });
+ QCOMPARE(future.result(), 44);
+ thread.quit();
+ thread.wait();
+ }
}
template<class Type, class Callable>
@@ -2942,7 +3070,7 @@ void tst_QFuture::cancelContinuations()
// The chain is cancelled before the execution of continuations
{
- auto f = QtFuture::makeReadyFuture(42);
+ auto f = QtFuture::makeReadyValueFuture(42);
f.cancel();
int checkpoint = 0;
@@ -2997,7 +3125,7 @@ void tst_QFuture::cancelContinuations()
#ifndef QT_NO_EXCEPTIONS
// The chain is cancelled in the middle of execution of continuations,
- // while there's an exception in the chain, which is handeled inside
+ // while there's an exception in the chain, which is handled inside
// the continuations.
{
QPromise<int> promise;
@@ -3034,17 +3162,97 @@ void tst_QFuture::cancelContinuations()
QCOMPARE(checkpoint, 3);
}
#endif // QT_NO_EXCEPTIONS
+
+ // Check notifications from QFutureWatcher
+ {
+ QPromise<void> p;
+ auto f = p.future();
+
+ auto f1 = f.then([] {});
+ auto f2 = f1.then([] {});
+
+ QFutureWatcher<void> watcher1, watcher2;
+ int state = 0;
+ QObject::connect(&watcher1, &QFutureWatcher<void>::started, [&] {
+ QCOMPARE(state, 0);
+ ++state;
+ });
+ QObject::connect(&watcher1, &QFutureWatcher<void>::canceled, [&] {
+ QCOMPARE(state, 1);
+ ++state;
+ });
+ QObject::connect(&watcher1, &QFutureWatcher<void>::finished, [&] {
+ QCOMPARE(state, 2);
+ ++state;
+ });
+ QObject::connect(&watcher2, &QFutureWatcher<void>::started, [&] {
+ QCOMPARE(state, 3);
+ ++state;
+ });
+ QObject::connect(&watcher2, &QFutureWatcher<void>::canceled, [&] {
+ QCOMPARE(state, 4);
+ ++state;
+ });
+ QObject::connect(&watcher2, &QFutureWatcher<int>::finished, [&] {
+ QCOMPARE(state, 5);
+ ++state;
+ });
+
+ watcher1.setFuture(f1);
+ watcher2.setFuture(f2);
+
+ p.start();
+ f.cancel();
+ p.finish();
+
+ qApp->processEvents();
+
+ QCOMPARE(state, 6);
+ QVERIFY(watcher1.isFinished());
+ QVERIFY(watcher1.isCanceled());
+ QVERIFY(watcher2.isFinished());
+ QVERIFY(watcher2.isCanceled());
+ }
+
+ // Cancel continuations with context (QTBUG-108790)
+ {
+ // This test should pass with ASan
+ auto future = QtConcurrent::run([] {});
+ future.then(this, [] {});
+ future.waitForFinished();
+ future.cancel();
+ }
+}
+
+void tst_QFuture::continuationsWithContext_data()
+{
+ QTest::addColumn<bool>("inOtherThread");
+ QTest::addRow("in-other-thread") << true;
+ QTest::addRow("in-main-thread-qtbug119406") << false;
}
void tst_QFuture::continuationsWithContext()
{
- QThread thread;
- thread.start();
+ QFETCH(bool, inOtherThread);
+ auto tstThread = QThread::currentThread();
+ QThread *thread = inOtherThread ? new QThread
+ : tstThread;
auto context = new QObject();
- context->moveToThread(&thread);
- auto tstThread = QThread::currentThread();
+ const auto cleanupGuard = qScopeGuard([&] {
+ context->deleteLater();
+ if (thread != tstThread) {
+ thread->quit();
+ thread->wait();
+ delete thread;
+ }
+ });
+
+ if (inOtherThread) {
+ thread->start();
+ context->moveToThread(thread);
+ }
// .then()
{
@@ -3057,12 +3265,12 @@ void tst_QFuture::continuationsWithContext()
})
.then(context,
[&](int val) {
- if (QThread::currentThread() != &thread)
+ if (QThread::currentThread() != thread)
return 0;
return val + 1;
})
.then([&](int val) {
- if (QThread::currentThread() != &thread)
+ if (QThread::currentThread() != thread)
return 0;
return val + 1;
});
@@ -3078,12 +3286,12 @@ void tst_QFuture::continuationsWithContext()
auto future = promise.future()
.onCanceled(context,
[&] {
- if (QThread::currentThread() != &thread)
+ if (QThread::currentThread() != thread)
return 0;
return 1;
})
.then([&](int val) {
- if (QThread::currentThread() != &thread)
+ if (QThread::currentThread() != thread)
return 0;
return val + 1;
});
@@ -3093,6 +3301,40 @@ void tst_QFuture::continuationsWithContext()
QCOMPARE(future.result(), 2);
}
+ // Cancellation when the context object is destroyed
+ {
+ // Use something like QWidget which deletes its children early, i.e.
+ // before ~QObject() runs. This behavior can lead to side-effects
+ // like QPointers to the parent not being set to nullptr during child
+ // object destruction.
+ QPointer shortLivedContext = new FakeQWidget();
+ shortLivedContext->moveToThread(thread);
+
+ QPromise<int> promise;
+ auto future = promise.future()
+ .then(shortLivedContext, [&](int val) {
+ if (QThread::currentThread() != thread)
+ return 0;
+ return val + 1000;
+ })
+ .onCanceled([&, ptr=QPointer(shortLivedContext)] {
+ if (QThread::currentThread() != thread)
+ return 0;
+ if (ptr)
+ return 1;
+ return 2;
+ });
+ promise.start();
+
+ QMetaObject::invokeMethod(shortLivedContext, [&]() {
+ delete shortLivedContext;
+ }, inOtherThread ? Qt::BlockingQueuedConnection
+ : Qt::DirectConnection);
+
+ promise.finish();
+ QCOMPARE(future.result(), 2);
+ }
+
#ifndef QT_NO_EXCEPTIONS
// .onFaled()
{
@@ -3105,12 +3347,12 @@ void tst_QFuture::continuationsWithContext()
})
.onFailed(context,
[&] {
- if (QThread::currentThread() != &thread)
+ if (QThread::currentThread() != thread)
return 0;
return 1;
})
.then([&](int val) {
- if (QThread::currentThread() != &thread)
+ if (QThread::currentThread() != thread)
return 0;
return val + 1;
});
@@ -3119,11 +3361,6 @@ void tst_QFuture::continuationsWithContext()
QCOMPARE(future.result(), 2);
}
#endif // QT_NO_EXCEPTIONS
-
- context->deleteLater();
-
- thread.quit();
- thread.wait();
}
void tst_QFuture::continuationsWithMoveOnlyLambda()
@@ -3131,7 +3368,8 @@ void tst_QFuture::continuationsWithMoveOnlyLambda()
// .then()
{
std::unique_ptr<int> uniquePtr(new int(42));
- auto future = QtFuture::makeReadyFuture().then([p = std::move(uniquePtr)] { return *p; });
+ auto future = QtFuture::makeReadyVoidFuture()
+ .then([p = std::move(uniquePtr)] { return *p; });
QCOMPARE(future.result(), 42);
}
// .then() with thread pool
@@ -3139,8 +3377,8 @@ void tst_QFuture::continuationsWithMoveOnlyLambda()
QThreadPool pool;
std::unique_ptr<int> uniquePtr(new int(42));
- auto future =
- QtFuture::makeReadyFuture().then(&pool, [p = std::move(uniquePtr)] { return *p; });
+ auto future = QtFuture::makeReadyVoidFuture()
+ .then(&pool, [p = std::move(uniquePtr)] { return *p; });
QCOMPARE(future.result(), 42);
}
// .then() with context
@@ -3148,8 +3386,8 @@ void tst_QFuture::continuationsWithMoveOnlyLambda()
QObject object;
std::unique_ptr<int> uniquePtr(new int(42));
- auto future = QtFuture::makeReadyFuture().then(&object,
- [p = std::move(uniquePtr)] { return *p; });
+ auto future = QtFuture::makeReadyVoidFuture()
+ .then(&object, [p = std::move(uniquePtr)] { return *p; });
QCOMPARE(future.result(), 42);
}
@@ -3213,17 +3451,6 @@ void tst_QFuture::testFutureTaken(QFuture<T> &noMoreFuture)
{
QCOMPARE(noMoreFuture.isValid(), false);
QCOMPARE(noMoreFuture.resultCount(), 0);
- QCOMPARE(noMoreFuture.isStarted(), false);
- QCOMPARE(noMoreFuture.isRunning(), false);
- QCOMPARE(noMoreFuture.isSuspending(), false);
- QCOMPARE(noMoreFuture.isSuspended(), false);
-#if QT_DEPRECATED_SINCE(6, 0)
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- QCOMPARE(noMoreFuture.isPaused(), false);
-QT_WARNING_POP
-#endif
- QCOMPARE(noMoreFuture.isFinished(), false);
QCOMPARE(noMoreFuture.progressValue(), 0);
}
@@ -3311,7 +3538,7 @@ void tst_QFuture::runAndTake()
auto rabbit = [](){
// Let's wait a bit to give the test below some time
// to sync up with us with its watcher.
- QThread::currentThread()->msleep(100);
+ QThread::currentThread()->sleep(std::chrono::milliseconds{100});
return UniquePtr(new int(10));
};
@@ -3324,7 +3551,7 @@ void tst_QFuture::runAndTake()
auto gotcha = QtConcurrent::run(rabbit);
watcha.setFuture(gotcha);
- loop.enterLoopMSecs(500);
+ loop.enterLoop(500ms);
if (loop.timeout())
QSKIP("Failed to run the task, nothing to test");
@@ -3395,14 +3622,14 @@ void tst_QFuture::resultsReadyAt()
// Run event loop, QCoreApplication::postEvent is in use
// in QFutureInterface:
- eventProcessor.enterLoopMSecs(2000);
+ eventProcessor.enterLoop(DefaultWaitTime);
QVERIFY(!eventProcessor.timeout());
if (QTest::currentTestFailed()) // Failed in our lambda observing 'ready at'
return;
QCOMPARE(reported, nExpectedResults);
QCOMPARE(nExpectedResults, iface.future().resultCount());
- QCOMPARE(readyCounter.count(), 3);
+ QCOMPARE(readyCounter.size(), 3);
QCOMPARE(taken, 0b1111);
}
@@ -3443,6 +3670,16 @@ void tst_QFuture::canceledFutureIsNotValid()
void tst_QFuture::signalConnect()
{
+ const int intValue = 42;
+ const double doubleValue = 42.5;
+ const QString stringValue = "42";
+
+ using TupleType = std::tuple<int, double, QString>;
+ const TupleType tuple(intValue, doubleValue, stringValue);
+
+ using PairType = std::pair<int, double>;
+ const PairType pair(intValue, doubleValue);
+
// No arg
{
SenderObject sender;
@@ -3476,16 +3713,66 @@ void tst_QFuture::signalConnect()
// Multiple args
{
SenderObject sender;
- using TupleArgs = std::tuple<int, double, QString>;
auto future =
- QtFuture::connect(&sender, &SenderObject::multipleArgs).then([](TupleArgs values) {
+ QtFuture::connect(&sender, &SenderObject::multipleArgs).then([](TupleType values) {
return values;
});
- sender.emitMultipleArgs(42, 42.5, "42");
+ sender.emitMultipleArgs(intValue, doubleValue, stringValue);
+ auto result = future.result();
+ QCOMPARE(result, tuple);
+ }
+
+ // Single std::tuple arg
+ {
+ SenderObject sender;
+ QFuture<TupleType> future = QtFuture::connect(&sender, &SenderObject::tupleArgSignal);
+ sender.emitTupleArgSignal(tuple);
auto result = future.result();
- QCOMPARE(std::get<0>(result), 42);
- QCOMPARE(std::get<1>(result), 42.5);
- QCOMPARE(std::get<2>(result), "42");
+ QCOMPARE(result, tuple);
+ }
+
+ // Multi-args signal(int, std::tuple)
+ {
+ SenderObject sender;
+ QFuture<std::tuple<int, TupleType>> future =
+ QtFuture::connect(&sender, &SenderObject::multiArgsWithTupleSignal1);
+ sender.emitMultiArgsWithTupleSignal1(142, tuple);
+ const auto [v, t] = future.result();
+ QCOMPARE(v, 142);
+ QCOMPARE(t, tuple);
+ }
+
+ // Multi-args signal(std::tuple, int)
+ {
+ SenderObject sender;
+ QFuture<std::tuple<TupleType, int>> future =
+ QtFuture::connect(&sender, &SenderObject::multiArgsWithTupleSignal2);
+ sender.emitMultiArgsWithTupleSignal2(tuple, 142);
+ const auto [t, v] = future.result();
+ QCOMPARE(v, 142);
+ QCOMPARE(t, tuple);
+ }
+
+ // Multi-args signal(int, std::pair)
+ {
+ SenderObject sender;
+ QFuture<std::tuple<int, PairType>> future =
+ QtFuture::connect(&sender, &SenderObject::multiArgsWithPairSignal1);
+ sender.emitMultiArgsWithPairSignal1(142, pair);
+ const auto [v, p] = future.result();
+ QCOMPARE(v, 142);
+ QCOMPARE(p, pair);
+ }
+
+ // Multi-args signal(std::pair, int)
+ {
+ SenderObject sender;
+ QFuture<std::tuple<PairType, int>> future =
+ QtFuture::connect(&sender, &SenderObject::multiArgsWithPairSignal2);
+ sender.emitMultiArgsWithPairSignal2(pair, 142);
+ const auto [p, v] = future.result();
+ QCOMPARE(v, 142);
+ QCOMPARE(p, pair);
}
// No arg private signal
@@ -3513,12 +3800,64 @@ void tst_QFuture::signalConnect()
{
SenderObject sender;
auto future = QtFuture::connect(&sender, &SenderObject::multiArgsPrivateSignal)
- .then([](std::tuple<int, double, QString> values) { return values; });
- sender.emitMultiArgsPrivateSignal(42, 42.5, "42");
- const auto [i, d, s] = future.result();
- QCOMPARE(i, 42);
- QCOMPARE(d, 42.5);
- QCOMPARE(s, "42");
+ .then([](TupleType values) { return values; });
+ sender.emitMultiArgsPrivateSignal(intValue, doubleValue, stringValue);
+ auto result = future.result();
+ QCOMPARE(result, tuple);
+ }
+
+ // Single std::tuple arg private signal
+ {
+ SenderObject sender;
+ QFuture<TupleType> future =
+ QtFuture::connect(&sender, &SenderObject::tupleArgPrivateSignal);
+ sender.emitTupleArgPrivateSignal(tuple);
+ auto result = future.result();
+ QCOMPARE(result, tuple);
+ }
+
+ // Multi-args private signal(int, std::tuple)
+ {
+ SenderObject sender;
+ QFuture<std::tuple<int, TupleType>> future =
+ QtFuture::connect(&sender, &SenderObject::multiArgsWithTuplePrivateSignal1);
+ sender.emitMultiArgsWithTuplePrivateSignal1(142, tuple);
+ const auto [v, t] = future.result();
+ QCOMPARE(v, 142);
+ QCOMPARE(t, tuple);
+ }
+
+ // Multi-args private signal(std::tuple, int)
+ {
+ SenderObject sender;
+ QFuture<std::tuple<TupleType, int>> future =
+ QtFuture::connect(&sender, &SenderObject::multiArgsWithTuplePrivateSignal2);
+ sender.emitMultiArgsWithTuplePrivateSignal2(tuple, 142);
+ const auto [t, v] = future.result();
+ QCOMPARE(v, 142);
+ QCOMPARE(t, tuple);
+ }
+
+ // Multi-args private signal(int, std::pair)
+ {
+ SenderObject sender;
+ QFuture<std::tuple<int, PairType>> future =
+ QtFuture::connect(&sender, &SenderObject::multiArgsWithPairPrivateSignal1);
+ sender.emitMultiArgsWithPairPrivateSignal1(142, pair);
+ const auto [v, p] = future.result();
+ QCOMPARE(v, 142);
+ QCOMPARE(p, pair);
+ }
+
+ // Multi-args private signal(std::pair, int)
+ {
+ SenderObject sender;
+ QFuture<std::tuple<PairType, int>> future =
+ QtFuture::connect(&sender, &SenderObject::multiArgsWithPairPrivateSignal2);
+ sender.emitMultiArgsWithPairPrivateSignal2(pair, 142);
+ const auto [p, v] = future.result();
+ QCOMPARE(v, 142);
+ QCOMPARE(p, pair);
}
// Sender destroyed
@@ -3530,8 +3869,6 @@ void tst_QFuture::signalConnect()
QSignalSpy spy(sender, &QObject::destroyed);
sender->deleteLater();
- // emit the signal when sender is being destroyed
- QObject::connect(sender, &QObject::destroyed, [sender] { sender->emitIntArg(42); });
spy.wait();
QVERIFY(future.isCanceled());
@@ -3556,13 +3893,40 @@ void tst_QFuture::signalConnect()
QVERIFY(!future.isCanceled());
QVERIFY(future.isValid());
}
+
+ // Connect to nullptr
+ {
+ SenderObject *sender = nullptr;
+ auto future = QtFuture::connect(sender, &SenderObject::intArgSignal);
+ QVERIFY(future.isFinished());
+ QVERIFY(future.isCanceled());
+ QVERIFY(!future.isValid());
+ }
+
+ // Connect to non-signal
+ {
+ SenderObject sender;
+
+#if defined(Q_CC_MSVC_ONLY) && (Q_CC_MSVC < 1940 || __cplusplus < 202002L)
+#define EXPECT_FUTURE_CONNECT_FAIL() QEXPECT_FAIL("", "QTBUG-101761, test fails on Windows/MSVC", Continue)
+#else
+ QTest::ignoreMessage(QtWarningMsg, "QObject::connect: signal not found in SenderObject");
+#define EXPECT_FUTURE_CONNECT_FAIL()
+#endif
+
+ auto future = QtFuture::connect(&sender, &SenderObject::emitNoArg);
+ EXPECT_FUTURE_CONNECT_FAIL();
+ QVERIFY(future.isFinished());
+ EXPECT_FUTURE_CONNECT_FAIL();
+ QVERIFY(future.isCanceled());
+ EXPECT_FUTURE_CONNECT_FAIL();
+ QVERIFY(!future.isValid());
+#undef EXPECT_FUTURE_CONNECT_FAIL
+ }
}
void tst_QFuture::waitForFinished()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
QFutureInterface<void> fi;
auto future = fi.future();
@@ -3583,7 +3947,6 @@ void tst_QFuture::waitForFinished()
QVERIFY(waitingThread->wait());
QVERIFY(waitingThread->isFinished());
-#endif
}
void tst_QFuture::rejectResultOverwrite_data()
@@ -3628,9 +3991,9 @@ void tst_QFuture::rejectResultOverwrite()
});
// Run event loop, QCoreApplication::postEvent is in use
// in QFutureInterface:
- eventProcessor.enterLoopMSecs(2000);
+ eventProcessor.enterLoop(DefaultWaitTime);
QVERIFY(!eventProcessor.timeout());
- QCOMPARE(resultCounter.count(), 1);
+ QCOMPARE(resultCounter.size(), 1);
f.resume();
// overwrite with lvalue
@@ -3667,9 +4030,9 @@ void tst_QFuture::rejectResultOverwrite()
QTimer::singleShot(50, [&f]() {
f.suspend(); // should exit the loop
});
- eventProcessor.enterLoopMSecs(2000);
+ eventProcessor.enterLoop(DefaultWaitTime);
QVERIFY(!eventProcessor.timeout());
- QCOMPARE(resultCounter.count(), 1);
+ QCOMPARE(resultCounter.size(), 1);
f.resume();
QCOMPARE(f.results(), initResults);
}
@@ -3706,9 +4069,9 @@ void tst_QFuture::rejectPendingResultOverwrite()
});
// Run event loop, QCoreApplication::postEvent is in use
// in QFutureInterface:
- eventProcessor.enterLoopMSecs(2000);
+ eventProcessor.enterLoop(DefaultWaitTime);
QVERIFY(!eventProcessor.timeout());
- QCOMPARE(resultCounter.count(), 1);
+ QCOMPARE(resultCounter.size(), 1);
f.resume();
}
@@ -3750,9 +4113,9 @@ void tst_QFuture::rejectPendingResultOverwrite()
QTimer::singleShot(50, [&f]() {
f.suspend(); // should exit the loop
});
- eventProcessor.enterLoopMSecs(2000);
+ eventProcessor.enterLoop(DefaultWaitTime);
QVERIFY(!eventProcessor.timeout());
- QCOMPARE(resultCounter.count(), 1);
+ QCOMPARE(resultCounter.size(), 1);
f.resume();
}
@@ -3765,6 +4128,9 @@ void tst_QFuture::rejectPendingResultOverwrite()
void tst_QFuture::createReadyFutures()
{
+#if QT_DEPRECATED_SINCE(6, 10)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
// using const T &
{
const int val = 42;
@@ -3800,6 +4166,30 @@ void tst_QFuture::createReadyFutures()
QCOMPARE(f.resultCount(), 3);
QCOMPARE(f.results(), values);
}
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 10)
+
+ // test makeReadyValueFuture<T>()
+ {
+ const int val = 42;
+ auto f = QtFuture::makeReadyValueFuture(val);
+ QCOMPARE_EQ(f.result(), val);
+
+ int otherVal = 42;
+ f = QtFuture::makeReadyValueFuture(otherVal);
+ QCOMPARE_EQ(f.result(), otherVal);
+ }
+ {
+ auto f = QtFuture::makeReadyValueFuture(std::make_unique<int>(42));
+ QCOMPARE(*f.takeResult(), 42);
+ }
+ // test makeReadyVoidFuture()
+ {
+ auto f = QtFuture::makeReadyVoidFuture();
+ QVERIFY(f.isStarted());
+ QVERIFY(!f.isRunning());
+ QVERIFY(f.isFinished());
+ }
#ifndef QT_NO_EXCEPTIONS
// using QException
@@ -3828,12 +4218,205 @@ void tst_QFuture::createReadyFutures()
QVERIFY(caught);
}
#endif
+
+ // testing makeReadyRangeFuture with various containers
+ {
+ const QList<int> expectedResult{1, 2, 3};
+
+ const QList<int> list{1, 2, 3};
+ auto f = QtFuture::makeReadyRangeFuture(list);
+ QCOMPARE_EQ(f.resultCount(), 3);
+ QCOMPARE_EQ(f.results(), expectedResult);
+
+ QVarLengthArray<int> varArray{1, 2, 3};
+ f = QtFuture::makeReadyRangeFuture(varArray);
+ QCOMPARE_EQ(f.resultCount(), 3);
+ QCOMPARE_EQ(f.results(), expectedResult);
+
+ std::vector<int> vec{1, 2, 3};
+ f = QtFuture::makeReadyRangeFuture(std::move(vec));
+ QCOMPARE_EQ(f.resultCount(), 3);
+ QCOMPARE_EQ(f.results(), expectedResult);
+
+ f = QtFuture::makeReadyRangeFuture(std::array<int, 3>{1, 2, 3});
+ QCOMPARE_EQ(f.resultCount(), 3);
+ QCOMPARE_EQ(f.results(), expectedResult);
+
+ f = QtFuture::makeReadyRangeFuture(std::list<int>{1, 2, 3});
+ QCOMPARE_EQ(f.resultCount(), 3);
+ QCOMPARE_EQ(f.results(), expectedResult);
+
+ std::forward_list<int> fwdlist{1, 2, 3};
+ f = QtFuture::makeReadyRangeFuture(fwdlist);
+ QCOMPARE_EQ(f.resultCount(), 3);
+ QCOMPARE_EQ(f.results(), expectedResult);
+
+ const QSet<int> qset{1, 2, 3};
+ f = QtFuture::makeReadyRangeFuture(qset);
+ QCOMPARE_EQ(f.resultCount(), 3);
+ auto result = f.results();
+ std::sort(result.begin(), result.end());
+ QCOMPARE_EQ(result, expectedResult);
+
+ const QMap<QString, int> qmap{
+ {"one", 1},
+ {"two", 2},
+ {"three", 3}
+ };
+ f = QtFuture::makeReadyRangeFuture(qmap);
+ QCOMPARE_EQ(f.resultCount(), 3);
+ result = f.results();
+ std::sort(result.begin(), result.end());
+ QCOMPARE_EQ(result, expectedResult);
+
+ std::set<int> stdset{1, 2, 3};
+ f = QtFuture::makeReadyRangeFuture(stdset);
+ QCOMPARE_EQ(f.resultCount(), 3);
+ result = f.results();
+ std::sort(result.begin(), result.end());
+ QCOMPARE_EQ(result, expectedResult);
+
+ // testing ValueType[N] overload
+ const int c_array[] = {1, 2, 3};
+ f = QtFuture::makeReadyRangeFuture(c_array);
+ QCOMPARE_EQ(f.resultCount(), 3);
+ QCOMPARE_EQ(f.results(), expectedResult);
+
+ f = QtFuture::makeReadyRangeFuture({1, 2, 3});
+ QCOMPARE_EQ(f.resultCount(), 3);
+ QCOMPARE_EQ(f.results(), expectedResult);
+ }
+ // testing makeReadyRangeFuture with a more complex underlying type
+ {
+ QObject obj1;
+ QObject obj2;
+ QObject obj3;
+
+ const QList<QObject*> expectedResult{&obj1, &obj2, &obj3};
+
+ const QList<QObject*> list{&obj1, &obj2, &obj3};
+ auto f = QtFuture::makeReadyRangeFuture(list);
+ QCOMPARE_EQ(f.resultCount(), 3);
+ QCOMPARE_EQ(f.results(), expectedResult);
+
+ std::list<QObject*> stdlist{&obj1, &obj2, &obj3};
+ f = QtFuture::makeReadyRangeFuture(std::move(stdlist));
+ QCOMPARE_EQ(f.resultCount(), 3);
+ QCOMPARE_EQ(f.results(), expectedResult);
+
+ QObject* const c_array[] = {&obj1, &obj2, &obj3};
+ f = QtFuture::makeReadyRangeFuture(c_array);
+ QCOMPARE_EQ(f.resultCount(), 3);
+ QCOMPARE_EQ(f.results(), expectedResult);
+ }
+}
+
+void tst_QFuture::continuationsAfterReadyFutures()
+{
+ // continuations without a context
+ {
+ QFuture<int> f = QtFuture::makeReadyValueFuture(42)
+ .then([](int val) {
+ return val + 10;
+ })
+ .onCanceled([]() {
+ return -1;
+ });
+ QCOMPARE(f.result(), 52);
+ }
+ {
+ auto rangeF = QtFuture::makeReadyRangeFuture({1, 2, 3});
+ QFuture<int> f = rangeF
+ .then([vals = rangeF.results()](auto) {
+ return vals.last();
+ })
+ .onCanceled([]() {
+ return -1;
+ });
+ QCOMPARE(f.result(), 3);
+ }
+ {
+ QFuture<int> f = QtFuture::makeReadyVoidFuture()
+ .then([]() {
+ return 1;
+ })
+ .onCanceled([]() {
+ return -1;
+ });
+ QCOMPARE(f.result(), 1);
+ }
+#ifndef QT_NO_EXCEPTIONS
+ {
+ QException e;
+ QFuture<int> f = QtFuture::makeExceptionalFuture<int>(e)
+ .then([](int) {
+ return 1;
+ })
+ .onCanceled([]() {
+ return -1;
+ })
+ .onFailed([](const QException &) {
+ return -2;
+ });
+ QCOMPARE(f.result(), -2);
+ }
+#endif
+
+ // continuations with a context
+ QObject context;
+ {
+ QFuture<int> f = QtFuture::makeReadyValueFuture(42)
+ .then(&context, [](int val) {
+ return val + 10;
+ })
+ .onCanceled([]() {
+ return -1;
+ });
+ QCOMPARE(f.result(), 52);
+ }
+ {
+ auto rangeF = QtFuture::makeReadyRangeFuture({1, 2, 3});
+ QFuture<int> f = rangeF
+ .then(&context, [vals = rangeF.results()](auto) {
+ return vals.last();
+ })
+ .onCanceled([]() {
+ return -1;
+ });
+ QCOMPARE(f.result(), 3);
+ }
+ {
+ QFuture<int> f = QtFuture::makeReadyVoidFuture()
+ .then(&context, []() {
+ return 1;
+ })
+ .onCanceled([]() {
+ return -1;
+ });
+ QCOMPARE(f.result(), 1);
+ }
+#ifndef QT_NO_EXCEPTIONS
+ {
+ QException e;
+ QFuture<int> f = QtFuture::makeExceptionalFuture<int>(e)
+ .then(&context, [](int) {
+ return 1;
+ })
+ .onCanceled([]() {
+ return -1;
+ })
+ .onFailed([](const QException &) {
+ return -2;
+ });
+ QCOMPARE(f.result(), -2);
+ }
+#endif
}
void tst_QFuture::getFutureInterface()
{
const int val = 42;
- QFuture<int> f = QtFuture::makeReadyFuture(val);
+ QFuture<int> f = QtFuture::makeReadyValueFuture(val);
auto interface = QFutureInterfaceBase::get(f);
QCOMPARE(interface.resultCount(), 1);
@@ -3847,7 +4430,7 @@ void tst_QFuture::convertQMetaType()
QVERIFY(QMetaType::canConvert(intType, voidType));
const int val = 42;
- QFuture<int> f = QtFuture::makeReadyFuture(val);
+ QFuture<int> f = QtFuture::makeReadyValueFuture(val);
auto variant = QVariant::fromValue(f);
QVERIFY(variant.convert(voidType));
@@ -3976,7 +4559,7 @@ void tst_QFuture::whenAllIteratorsWithFailed()
p1.finish();
QVERIFY(finished);
#else
- QSKIP("Exceptions are disabled, skipping the test")
+ QSKIP("Exceptions are disabled, skipping the test");
#endif
}
@@ -4060,7 +4643,7 @@ void tst_QFuture::whenAllDifferentTypesWithCanceled()
QPromise<int> pInt;
QPromise<QString> pString;
- const QString someValue = u"some value"_qs;
+ const QString someValue = u"some value"_s;
bool finished = false;
using Futures = std::variant<QFuture<int>, QFuture<QString>>;
@@ -4099,7 +4682,7 @@ void tst_QFuture::whenAllDifferentTypesWithFailed()
QPromise<int> pInt;
QPromise<QString> pString;
- const QString someValue = u"some value"_qs;
+ const QString someValue = u"some value"_s;
bool finished = false;
using Futures = std::variant<QFuture<int>, QFuture<QString>>;
@@ -4357,6 +4940,35 @@ void tst_QFuture::whenAnyDifferentTypesWithFailed()
#endif
}
+void tst_QFuture::continuationOverride()
+{
+ QPromise<int> p;
+ bool firstExecuted = false;
+ bool secondExecuted = false;
+
+ QTest::ignoreMessage(QtWarningMsg,
+ "Adding a continuation to a future which already has a continuation. "
+ "The existing continuation is overwritten.");
+
+ QFuture<int> f1 = p.future();
+ f1.then([&firstExecuted](int) {
+ firstExecuted = true;
+ });
+
+ QFuture<int> f2 = p.future();
+ f2.then([&secondExecuted](int) {
+ secondExecuted = true;
+ });
+
+ p.start();
+ p.addResult(42);
+ p.finish();
+
+ QVERIFY(p.future().isFinished());
+ QVERIFY(!firstExecuted);
+ QVERIFY(secondExecuted);
+}
+
struct InstanceCounter
{
InstanceCounter() { ++count; }
@@ -4415,6 +5027,330 @@ void tst_QFuture::continuationsDontLeak()
QVERIFY(continuationIsRun);
}
QCOMPARE(InstanceCounter::count, 0);
+
+ {
+ // QTBUG-116731: Must pass with ASan enabled
+ bool continuationIsRun = false;
+ auto f = QtFuture::makeReadyValueFuture(42);
+ QtFuture::whenAll(f).then([&](auto) { continuationIsRun = true; });
+ QVERIFY(continuationIsRun);
+ }
+
+ {
+ // QTBUG-116731: Must pass with ASan enabled
+ bool continuationIsRun = false;
+ auto f = QtFuture::makeReadyValueFuture(42);
+ QList fs{f};
+ QtFuture::whenAll(fs.begin(), fs.end()).then([&](auto) { continuationIsRun = true; });
+ QVERIFY(continuationIsRun);
+ }
+
+ {
+ // QTBUG-116731: Must pass with ASan enabled
+ bool continuationIsRun = false;
+ auto f = QtFuture::makeReadyValueFuture(42);
+ QtFuture::whenAny(f).then([&](auto) { continuationIsRun = true; });
+ QVERIFY(continuationIsRun);
+ }
+
+ {
+ // QTBUG-116731: Must pass with ASan enabled
+ bool continuationIsRun = false;
+ auto f = QtFuture::makeReadyValueFuture(42);
+ QList fs{f};
+ QtFuture::whenAny(fs.begin(), fs.end()).then([&](auto) { continuationIsRun = true; });
+ QVERIFY(continuationIsRun);
+ }
+}
+
+// This test checks that we do not get use-after-free
+void tst_QFuture::cancelAfterFinishWithContinuations()
+{
+ QFuture<void> future;
+ bool continuationIsRun = false;
+ bool cancelCalled = false;
+ {
+ QPromise<void> promise;
+ future = promise.future();
+
+ future.then([&continuationIsRun]() {
+ continuationIsRun = true;
+ }).onCanceled([&cancelCalled]() {
+ cancelCalled = true;
+ });
+
+ promise.start();
+ promise.finish();
+ }
+
+ QVERIFY(continuationIsRun);
+ future.cancel();
+ QVERIFY(!cancelCalled);
+}
+
+void tst_QFuture::unwrap()
+{
+ // The nested future succeeds
+ {
+ QPromise<int> p;
+ QFuture<QFuture<int>> f = p.future().then([] (int value) {
+ QFuture<int> nested = QtConcurrent::run([value] {
+ return value + 1;
+ });
+ return nested;
+ });
+
+ QFuture<int> unwrapped = f.unwrap();
+ QVERIFY(!unwrapped.isStarted());
+ QVERIFY(!unwrapped.isFinished());
+
+ p.start();
+ p.addResult(42);
+ p.finish();
+
+ unwrapped.waitForFinished();
+
+ QVERIFY(unwrapped.isStarted());
+ QVERIFY(unwrapped.isFinished());
+ QCOMPARE(unwrapped.result(), 43);
+ }
+
+ // The nested future succeeds with multiple results
+ {
+ QPromise<int> p;
+ QFuture<QFuture<int>> f = p.future().then([] (int value) {
+ QPromise<int> nested;
+ nested.start();
+ nested.addResult(++value);
+ nested.addResult(++value);
+ nested.addResult(++value);
+ nested.finish();
+ return nested.future();
+ });
+
+ QFuture<int> unwrapped = f.unwrap();
+ QVERIFY(!unwrapped.isStarted());
+ QVERIFY(!unwrapped.isFinished());
+
+ p.start();
+ p.addResult(42);
+ p.finish();
+
+ f.waitForFinished();
+
+ QVERIFY(unwrapped.isStarted());
+ QVERIFY(unwrapped.isFinished());
+ QCOMPARE(unwrapped.results(), QList<int>() << 43 << 44 << 45);
+ }
+
+ // The chain is canceled, check that unwrap() propagates the cancellation.
+ {
+ QPromise<int> p;
+ QFuture<int> f = p.future().then([] (int value) {
+ QFuture<int> nested = QtConcurrent::run([value] {
+ return value + 1;
+ });
+ return nested;
+ }).unwrap().then([] (int result) {
+ return result;
+ }).onCanceled([] {
+ return -1;
+ });
+
+ p.start();
+ p.future().cancel();
+ p.finish();
+
+ f.waitForFinished();
+
+ QVERIFY(f.isStarted());
+ QVERIFY(f.isFinished());
+ QCOMPARE(f.result(), -1);
+ }
+
+#ifndef QT_NO_EXCEPTIONS
+ // The chain has an exception, check that unwrap() propagates it.
+ {
+ QPromise<int> p;
+ QFuture<int> f = p.future().then([] (int value) {
+ QFuture<int> nested = QtConcurrent::run([value] {
+ return value + 1;
+ });
+ return nested;
+ }).unwrap().then([] (int result) {
+ return result;
+ }).onFailed([] (QException &) {
+ return -1;
+ });
+
+ p.start();
+ p.setException(QException());
+ p.finish();
+
+ f.waitForFinished();
+
+ QVERIFY(f.isStarted());
+ QVERIFY(f.isFinished());
+ QCOMPARE(f.result(), -1);
+ }
+
+#endif // QT_NO_EXCEPTIONS
+
+ // The nested future is canceled
+ {
+ QPromise<int> p;
+ QFuture<int> f = p.future().then([] (int value) {
+ QFuture<int> nested = QtConcurrent::run([value] {
+ return value + 1;
+ });
+ nested.cancel();
+ return nested;
+ }).unwrap().then([] (int result) {
+ return result;
+ }).onCanceled([] {
+ return -1;
+ });
+
+ p.start();
+ p.addResult(42);
+ p.finish();
+
+ f.waitForFinished();
+
+ QVERIFY(f.isStarted());
+ QVERIFY(f.isFinished());
+ QCOMPARE(f.result(), -1);
+ }
+
+#ifndef QT_NO_EXCEPTIONS
+ // The nested future fails with an exception
+ {
+ QPromise<int> p;
+ QFuture<int> f = p.future().then([] (int value) {
+ QFuture<int> nested = QtConcurrent::run([value] {
+ throw QException();
+ return value + 1;
+ });
+ return nested;
+ }).unwrap().then([] (int result) {
+ return result;
+ }).onFailed([] (QException &) {
+ return -1;
+ });
+
+ p.start();
+ p.addResult(42);
+ p.finish();
+
+ f.waitForFinished();
+
+ QVERIFY(f.isStarted());
+ QVERIFY(f.isFinished());
+ QCOMPARE(f.result(), -1);
+ }
+#endif // QT_NO_EXCEPTIONS
+
+ // Check that continuations are called in the right order
+ {
+ QPromise<void> p;
+
+ std::atomic<bool> firstThenInvoked = false;
+ std::atomic<bool> secondThenInvoked = false;
+ std::atomic<bool> nestedThenInvoked = false;
+ auto f = p.future().then([&] {
+ if (!firstThenInvoked && !secondThenInvoked && !nestedThenInvoked)
+ firstThenInvoked = true;
+ QFuture<void> nested = QtConcurrent::run([&] {
+ QVERIFY(firstThenInvoked);
+ QVERIFY(!nestedThenInvoked);
+ QVERIFY(!secondThenInvoked);
+ nestedThenInvoked = true;
+ });
+ return nested;
+ }).unwrap().then([&] {
+ QVERIFY(firstThenInvoked);
+ QVERIFY(nestedThenInvoked);
+ QVERIFY(!secondThenInvoked);
+ secondThenInvoked = true;
+ });
+
+ QVERIFY(!firstThenInvoked);
+ QVERIFY(!nestedThenInvoked);
+ QVERIFY(!secondThenInvoked);
+
+ p.start();
+ p.finish();
+
+ f.waitForFinished();
+
+ if (QTest::currentTestFailed())
+ return;
+
+ QVERIFY(firstThenInvoked);
+ QVERIFY(nestedThenInvoked);
+ QVERIFY(secondThenInvoked);
+ }
+
+ // Unwrap multiple nested futures
+ {
+ QPromise<int> p;
+ QFuture<QFuture<QFuture<int>>> f = p.future().then([] (int value) {
+ QFuture<QFuture<int>> nested = QtConcurrent::run([value] {
+ QFuture<int> doubleNested = QtConcurrent::run([value] {
+ return value + 1;
+ });
+ return doubleNested;
+ });
+ return nested;
+ });
+
+ QFuture<int> unwrapped = f.unwrap();
+ QVERIFY(!unwrapped.isStarted());
+ QVERIFY(!unwrapped.isFinished());
+
+ p.start();
+ p.addResult(42);
+ p.finish();
+
+ unwrapped.waitForFinished();
+
+ QVERIFY(unwrapped.isStarted());
+ QVERIFY(unwrapped.isFinished());
+ QCOMPARE(unwrapped.result(), 43);
+ }
+
+ // Unwrap multiple nested void futures
+ {
+ QPromise<void> p;
+ std::atomic<bool> nestedInvoked = false;
+ std::atomic<bool> doubleNestedInvoked = false;
+ QFuture<QFuture<QFuture<void>>> f = p.future().then([&] {
+ QFuture<QFuture<void>> nested = QtConcurrent::run([&] {
+ QFuture<void> doubleNested = QtConcurrent::run([&] {
+ doubleNestedInvoked = true;
+ });
+ nestedInvoked = true;
+ return doubleNested;
+ });
+ return nested;
+ });
+
+ QFuture<void> unwrapped = f.unwrap();
+ QVERIFY(!nestedInvoked);
+ QVERIFY(!doubleNestedInvoked);
+ QVERIFY(!unwrapped.isStarted());
+ QVERIFY(!unwrapped.isFinished());
+
+ p.start();
+ p.finish();
+
+ unwrapped.waitForFinished();
+
+ QVERIFY(unwrapped.isStarted());
+ QVERIFY(unwrapped.isFinished());
+ QVERIFY(nestedInvoked);
+ QVERIFY(doubleNestedInvoked);
+ }
}
QTEST_MAIN(tst_QFuture)
diff --git a/tests/auto/corelib/thread/qfuturesynchronizer/CMakeLists.txt b/tests/auto/corelib/thread/qfuturesynchronizer/CMakeLists.txt
index e41b8e70c6..c0f4561c51 100644
--- a/tests/auto/corelib/thread/qfuturesynchronizer/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qfuturesynchronizer/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qfuturesynchronizer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfuturesynchronizer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfuturesynchronizer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfuturesynchronizer
SOURCES
tst_qfuturesynchronizer.cpp
diff --git a/tests/auto/corelib/thread/qfuturesynchronizer/tst_qfuturesynchronizer.cpp b/tests/auto/corelib/thread/qfuturesynchronizer/tst_qfuturesynchronizer.cpp
index ab42bdf341..62ad4f872a 100644
--- a/tests/auto/corelib/thread/qfuturesynchronizer/tst_qfuturesynchronizer.cpp
+++ b/tests/auto/corelib/thread/qfuturesynchronizer/tst_qfuturesynchronizer.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 <QTest>
@@ -38,6 +13,7 @@ class tst_QFutureSynchronizer : public QObject
private Q_SLOTS:
void construction();
+ void setFutureAliasingExistingMember();
void addFuture();
void cancelOnWait();
void clearFutures();
@@ -58,6 +34,38 @@ void tst_QFutureSynchronizer::construction()
QCOMPARE(synchronizerWithFuture.futures().size(), 1);
}
+void tst_QFutureSynchronizer::setFutureAliasingExistingMember()
+{
+ //
+ // GIVEN: a QFutureSynchronizer with one QFuture:
+ //
+ QFutureSynchronizer synchronizer(QtFuture::makeReadyValueFuture(42));
+
+ //
+ // WHEN: calling setFuture() with an alias of the QFuture already in `synchronizer`:
+ //
+ for (int i = 0; i < 2; ++i) {
+ // The next line triggers -Wdangling-reference, but it's a FP because
+ // of implicit sharing. We cannot keep a copy of synchronizer.futures()
+ // around to avoid the warning, as the extra copy would cause a detach()
+ // of m_futures inside setFuture() with the consequence that `f` no longer
+ // aliases an element in m_futures, which is the goal of this test.
+QT_WARNING_PUSH
+#if defined(Q_CC_GNU_ONLY) && Q_CC_GNU >= 1301
+QT_WARNING_DISABLE_GCC("-Wdangling-reference")
+#endif
+ const auto &f = synchronizer.futures().constFirst();
+QT_WARNING_POP
+ synchronizer.setFuture(f);
+ }
+
+ //
+ // THEN: it didn't crash
+ //
+ QCOMPARE(synchronizer.futures().size(), 1);
+ QCOMPARE(synchronizer.futures().constFirst().result(), 42);
+}
+
void tst_QFutureSynchronizer::addFuture()
{
QFutureSynchronizer<void> synchronizer;
@@ -107,7 +115,7 @@ void tst_QFutureSynchronizer::futures()
synchronizer.addFuture(future);
}
- QCOMPARE(futures.count(), synchronizer.futures().count());
+ QCOMPARE(futures.size(), synchronizer.futures().size());
}
void tst_QFutureSynchronizer::setFuture()
diff --git a/tests/auto/corelib/thread/qfuturewatcher/CMakeLists.txt b/tests/auto/corelib/thread/qfuturewatcher/CMakeLists.txt
index 93ac2dd870..65417199a3 100644
--- a/tests/auto/corelib/thread/qfuturewatcher/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qfuturewatcher/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qfuturewatcher.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfuturewatcher Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfuturewatcher LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfuturewatcher
SOURCES
tst_qfuturewatcher.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp b/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp
index 34068f4f51..40aa89ded4 100644
--- a/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.cpp
+++ b/tests/auto/corelib/thread/qfuturewatcher/tst_qfuturewatcher.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 <QCoreApplication>
#include <QDebug>
#include <QElapsedTimer>
@@ -34,6 +9,7 @@
#include <private/qfutureinterface_p.h>
using namespace QtConcurrent;
+using namespace std::chrono_literals;
#include <QTest>
@@ -50,6 +26,7 @@ private slots:
void cancelAndFinish();
void resultAt();
void resultReadyAt();
+ void orderedResultReadyAt();
void futureSignals();
void watchFinishedFuture();
void watchCanceledFuture();
@@ -263,8 +240,8 @@ void tst_QFutureWatcher::cancelAndFinish()
fi.cancelAndFinish();
// The signals should be emitted only once
- QTRY_COMPARE(canceledSpy.count(), 1);
- QTRY_COMPARE(finishedSpy.count(), 1);
+ QTRY_COMPARE(canceledSpy.size(), 1);
+ QTRY_COMPARE(finishedSpy.size(), 1);
}
class IntTask : public RunFunctionTaskBase<int>
@@ -304,6 +281,28 @@ void tst_QFutureWatcher::resultReadyAt()
QVERIFY(resultSpy.wait());
}
+void tst_QFutureWatcher::orderedResultReadyAt()
+{
+ for (int i = 0; i < 1000; ++i) {
+ QObject context;
+ QFuture<QString> f = run([](QPromise<QString> &fi) {
+ fi.addResult("First");
+ fi.addResult("Second");
+ });
+ QList<int> actualIndices;
+
+ QFutureWatcher<QString> watcher;
+ connect(&watcher, &QFutureWatcherBase::resultReadyAt, &context,
+ [&actualIndices](int index) { actualIndices.append(index); });
+ watcher.setFuture(f);
+ f.waitForFinished();
+ QCoreApplication::processEvents();
+ const QList<int> expectedIndices{0, 1};
+ QCOMPARE(actualIndices.size(), expectedIndices.size());
+ QCOMPARE(actualIndices, expectedIndices);
+ }
+}
+
class SignalSlotObject : public QObject
{
Q_OBJECT
@@ -374,21 +373,21 @@ void tst_QFutureWatcher::futureSignals()
const int progress = 1;
a.setProgressValue(progress);
- QTRY_COMPARE(progressSpy.count(), 2);
+ QTRY_COMPARE(progressSpy.size(), 2);
QCOMPARE(progressSpy.takeFirst().at(0).toInt(), 0);
QCOMPARE(progressSpy.takeFirst().at(0).toInt(), 1);
const int result = 10;
a.reportResult(&result);
QVERIFY(resultReadySpy.wait());
- QCOMPARE(resultReadySpy.count(), 1);
+ QCOMPARE(resultReadySpy.size(), 1);
a.reportFinished(&result);
- QTRY_COMPARE(resultReadySpy.count(), 2);
+ QTRY_COMPARE(resultReadySpy.size(), 2);
QCOMPARE(resultReadySpy.takeFirst().at(0).toInt(), 0); // check the index
QCOMPARE(resultReadySpy.takeFirst().at(0).toInt(), 1);
- QCOMPARE(finishedSpy.count(), 1);
+ QCOMPARE(finishedSpy.size(), 1);
}
}
@@ -427,10 +426,10 @@ void tst_QFutureWatcher::watchFinishedFuture()
watcher.setFuture(f);
QVERIFY(finishedSpy.wait());
- QCOMPARE(startedSpy.count(), 1);
- QCOMPARE(finishedSpy.count(), 1);
- QCOMPARE(resultReadySpy.count(), 1);
- QCOMPARE(canceledSpy.count(), 0);
+ QCOMPARE(startedSpy.size(), 1);
+ QCOMPARE(finishedSpy.size(), 1);
+ QCOMPARE(resultReadySpy.size(), 1);
+ QCOMPARE(canceledSpy.size(), 0);
}
void tst_QFutureWatcher::watchCanceledFuture()
@@ -461,10 +460,10 @@ void tst_QFutureWatcher::watchCanceledFuture()
watcher.setFuture(f);
QVERIFY(finishedSpy.wait());
- QCOMPARE(startedSpy.count(), 1);
- QCOMPARE(finishedSpy.count(), 1);
- QCOMPARE(resultReadySpy.count(), 0);
- QCOMPARE(canceledSpy.count(), 1);
+ QCOMPARE(startedSpy.size(), 1);
+ QCOMPARE(finishedSpy.size(), 1);
+ QCOMPARE(resultReadySpy.size(), 0);
+ QCOMPARE(canceledSpy.size(), 1);
}
void tst_QFutureWatcher::disconnectRunningFuture()
@@ -487,17 +486,17 @@ void tst_QFutureWatcher::disconnectRunningFuture()
const int result = 10;
a.reportResult(&result);
QVERIFY(resultReadySpy.wait());
- QCOMPARE(resultReadySpy.count(), 1);
+ QCOMPARE(resultReadySpy.size(), 1);
delete watcher;
a.reportResult(&result);
QTest::qWait(10);
- QCOMPARE(resultReadySpy.count(), 1);
+ QCOMPARE(resultReadySpy.size(), 1);
a.reportFinished(&result);
QTest::qWait(10);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(finishedSpy.size(), 0);
}
const int maxProgress = 100000;
@@ -525,7 +524,8 @@ void tst_QFutureWatcher::tooMuchProgress()
QObject::connect(&f, SIGNAL(progressValueChanged(int)), &o, SLOT(registerProgress(int)));
f.setFuture((new ProgressEmitterTask())->start());
- QTestEventLoop::instance().enterLoop(5);
+ // Android reports ca. 10k progressValueChanged per second
+ QTestEventLoop::instance().enterLoop(15);
QVERIFY(!QTestEventLoop::instance().timeout());
QVERIFY(progressValues.contains(maxProgress));
}
@@ -696,14 +696,14 @@ void tst_QFutureWatcher::changeFuture()
watcher.setFuture(b); // But oh no! we're switching to another future
QTest::qWait(10); // before the event gets delivered.
- QCOMPARE(resultReadySpy.count(), 0);
+ QCOMPARE(resultReadySpy.size(), 0);
watcher.setFuture(a);
watcher.setFuture(b);
watcher.setFuture(a); // setting it back gets us one event, not two.
QVERIFY(resultReadySpy.wait());
- QCOMPARE(resultReadySpy.count(), 1);
+ QCOMPARE(resultReadySpy.size(), 1);
}
// Test that events aren't delivered from canceled futures
@@ -731,7 +731,7 @@ void tst_QFutureWatcher::cancelEvents()
QVERIFY(finishedSpy.wait());
- QCOMPARE(resultReadySpy.count(), 0);
+ QCOMPARE(resultReadySpy.size(), 0);
}
#if QT_DEPRECATED_SINCE(6, 0)
@@ -758,14 +758,14 @@ void tst_QFutureWatcher::pauseEvents()
watcher.setFuture(iface.future());
watcher.pause();
- QTRY_COMPARE(pauseSpy.count(), 1);
+ QTRY_COMPARE(pauseSpy.size(), 1);
int value = 0;
iface.reportFinished(&value);
// A result is reported, although the watcher is paused.
// The corresponding event should be also reported.
- QTRY_COMPARE(resultReadySpy.count(), 1);
+ QTRY_COMPARE(resultReadySpy.size(), 1);
watcher.resume();
}
@@ -793,7 +793,7 @@ void tst_QFutureWatcher::pauseEvents()
a.resume(); // should give us no results.
QTest::qWait(10);
- QCOMPARE(resultReadySpy.count(), 0);
+ QCOMPARE(resultReadySpy.size(), 0);
}
}
@@ -813,23 +813,23 @@ void tst_QFutureWatcher::pausedSuspendedOrder()
bool pausedBeforeSuspended = false;
bool notSuspendedBeforePaused = false;
connect(&watcher, &QFutureWatcher<void>::paused,
- [&] { notSuspendedBeforePaused = (suspendedSpy.count() == 0); });
+ [&] { notSuspendedBeforePaused = (suspendedSpy.size() == 0); });
connect(&watcher, &QFutureWatcher<void>::suspended,
- [&] { pausedBeforeSuspended = (pausedSpy.count() == 1); });
+ [&] { pausedBeforeSuspended = (pausedSpy.size() == 1); });
watcher.setFuture(iface.future());
iface.reportSuspended();
// Make sure reportPaused() is ignored if the state is not paused
pausedSpy.wait(100);
- QCOMPARE(pausedSpy.count(), 0);
- QCOMPARE(suspendedSpy.count(), 0);
+ QCOMPARE(pausedSpy.size(), 0);
+ QCOMPARE(suspendedSpy.size(), 0);
iface.setPaused(true);
iface.reportSuspended();
- QTRY_COMPARE(suspendedSpy.count(), 1);
- QCOMPARE(pausedSpy.count(), 1);
+ QTRY_COMPARE(suspendedSpy.size(), 1);
+ QCOMPARE(pausedSpy.size(), 1);
QVERIFY(notSuspendedBeforePaused);
QVERIFY(pausedBeforeSuspended);
@@ -860,14 +860,14 @@ void tst_QFutureWatcher::suspendEvents()
watcher.setFuture(iface.future());
watcher.suspend();
- QTRY_COMPARE(suspendingSpy.count(), 1);
+ QTRY_COMPARE(suspendingSpy.size(), 1);
int value = 0;
iface.reportFinished(&value);
// A result is reported, although the watcher is paused.
// The corresponding event should be also reported.
- QTRY_COMPARE(resultReadySpy.count(), 1);
+ QTRY_COMPARE(resultReadySpy.size(), 1);
watcher.resume();
}
@@ -896,7 +896,7 @@ void tst_QFutureWatcher::suspendEvents()
a.resume(); // should give us no results.
QTest::qWait(10);
- QCOMPARE(resultReadySpy.count(), 0);
+ QCOMPARE(resultReadySpy.size(), 0);
}
}
@@ -924,39 +924,39 @@ QT_WARNING_POP
QFuture<int> future = QtConcurrent::mapped(&pool, values, [&](int value) {
++count;
// Sleep, to make sure not all threads will start at once.
- QThread::msleep(50);
+ QThread::sleep(50ms);
return value;
});
watcher.setFuture(future);
// Allow some threads to start before suspending.
- QThread::msleep(200);
+ QThread::sleep(200ms);
watcher.suspend();
watcher.suspend();
- QTRY_COMPARE(suspendedSpy.count(), 1); // suspended() should be emitted only once
- QCOMPARE(suspendingSpy.count(), 2); // suspending() is emitted as many times as requested
+ QTRY_COMPARE(suspendedSpy.size(), 1); // suspended() should be emitted only once
+ QCOMPARE(suspendingSpy.size(), 2); // suspending() is emitted as many times as requested
#if QT_DEPRECATED_SINCE(6, 0)
- QCOMPARE(pausedSpy.count(), 2); // paused() is emitted as many times as requested
+ QCOMPARE(pausedSpy.size(), 2); // paused() is emitted as many times as requested
#endif
// Make sure QFutureWatcher::resultReadyAt() is emitted only for already started threads.
- const auto resultReadyAfterPaused = resultReadySpy.count();
+ const auto resultReadyAfterPaused = resultReadySpy.size();
QCOMPARE(resultReadyAfterPaused, count);
// Make sure no more results are reported before resuming.
- QThread::msleep(200);
- QCOMPARE(resultReadyAfterPaused, resultReadySpy.count());
+ QThread::sleep(200ms);
+ QCOMPARE(resultReadyAfterPaused, resultReadySpy.size());
resultReadySpy.clear();
watcher.resume();
- QTRY_COMPARE(finishedSpy.count(), 1);
+ QTRY_COMPARE(finishedSpy.size(), 1);
// Make sure that no more suspended() signals have been emitted.
- QCOMPARE(suspendedSpy.count(), 1);
+ QCOMPARE(suspendedSpy.size(), 1);
// Make sure the rest of results were reported after resume.
- QCOMPARE(resultReadySpy.count(), numValues - resultReadyAfterPaused);
+ QCOMPARE(resultReadySpy.size(), numValues - resultReadyAfterPaused);
}
void tst_QFutureWatcher::suspendedEventsOrder()
@@ -975,23 +975,23 @@ void tst_QFutureWatcher::suspendedEventsOrder()
bool suspendingBeforeSuspended = false;
bool notSuspendedBeforeSuspending = false;
connect(&watcher, &QFutureWatcher<void>::suspending,
- [&] { notSuspendedBeforeSuspending = (suspendedSpy.count() == 0); });
+ [&] { notSuspendedBeforeSuspending = (suspendedSpy.size() == 0); });
connect(&watcher, &QFutureWatcher<void>::suspended,
- [&] { suspendingBeforeSuspended = (suspendingSpy.count() == 1); });
+ [&] { suspendingBeforeSuspended = (suspendingSpy.size() == 1); });
watcher.setFuture(iface.future());
iface.reportSuspended();
// Make sure reportPaused() is ignored if the state is not paused
suspendingSpy.wait(100);
- QCOMPARE(suspendingSpy.count(), 0);
- QCOMPARE(suspendedSpy.count(), 0);
+ QCOMPARE(suspendingSpy.size(), 0);
+ QCOMPARE(suspendedSpy.size(), 0);
iface.setSuspended(true);
iface.reportSuspended();
- QTRY_COMPARE(suspendedSpy.count(), 1);
- QCOMPARE(suspendingSpy.count(), 1);
+ QTRY_COMPARE(suspendedSpy.size(), 1);
+ QCOMPARE(suspendingSpy.size(), 1);
QVERIFY(notSuspendedBeforeSuspending);
QVERIFY(suspendingBeforeSuspended);
@@ -1021,7 +1021,7 @@ void tst_QFutureWatcher::throttling()
QVERIFY(iface.isThrottled());
- QTRY_COMPARE(resultSpy.count(), resultCount); // Process the results
+ QTRY_COMPARE(resultSpy.size(), resultCount); // Process the results
QVERIFY(!iface.isThrottled());
@@ -1163,7 +1163,7 @@ public:
void tst_QFutureWatcher::warnRace()
{
-#ifndef Q_OS_MAC //I don't know why it is not working on mac
+#ifndef Q_OS_DARWIN // I don't know why it is not working on mac
#ifndef QT_NO_DEBUG
QTest::ignoreMessage(QtWarningMsg, "QFutureWatcher::connect: connecting after calling setFuture() is likely to produce race");
#endif
diff --git a/tests/auto/corelib/thread/qmutex/CMakeLists.txt b/tests/auto/corelib/thread/qmutex/CMakeLists.txt
index 1412036fc9..5a92a2bffd 100644
--- a/tests/auto/corelib/thread/qmutex/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qmutex/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qmutex.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmutex Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmutex LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmutex
SOURCES
tst_qmutex.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/thread/qmutex/tst_qmutex.cpp b/tests/auto/corelib/thread/qmutex/tst_qmutex.cpp
index c00ddea908..4753444ab9 100644
--- a/tests/auto/corelib/thread/qmutex/tst_qmutex.cpp
+++ b/tests/auto/corelib/thread/qmutex/tst_qmutex.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSemaphore>
@@ -35,9 +10,12 @@
#include <qelapsedtimer.h>
#include <qmutex.h>
#include <qthread.h>
+#include <qvarlengtharray.h>
#include <qwaitcondition.h>
#include <private/qvolatile_p.h>
+using namespace std::chrono_literals;
+
class tst_QMutex : public QObject
{
Q_OBJECT
@@ -51,8 +29,6 @@ public:
Q_ENUM(TimeUnit)
private slots:
- void convertToMilliseconds_data();
- void convertToMilliseconds();
void tryLock_non_recursive();
void try_lock_for_non_recursive();
void try_lock_until_non_recursive();
@@ -85,121 +61,15 @@ static QSemaphore threadsTurn;
enum {
#ifdef Q_OS_WIN
systemTimersResolution = 16,
+#elif defined(Q_OS_QNX)
+ systemTimersResolution = 10,
#else
systemTimersResolution = 1,
#endif
waitTime = 100
};
-#if __has_include(<chrono>)
static constexpr std::chrono::milliseconds waitTimeAsDuration(waitTime);
-#endif
-
-void tst_QMutex::convertToMilliseconds_data()
-{
- QTest::addColumn<TimeUnit>("unit");
- QTest::addColumn<double>("doubleValue");
- QTest::addColumn<qint64>("intValue");
- QTest::addColumn<qint64>("expected");
-
-#if !__has_include(<chrono>)
- QSKIP("This test requires <chrono>");
-#endif
-
- auto add = [](TimeUnit unit, double d, long long i, qint64 expected) {
- const QScopedArrayPointer<char> enumName(QTest::toString(unit));
- QTest::addRow("%s:%f:%lld", enumName.data(), d, i)
- << unit << d << qint64(i) << expected;
- };
-
- auto forAllUnitsAdd = [=](double d, long long i, qint64 expected) {
- for (auto unit : {TimeUnit::Nanoseconds, TimeUnit::Microseconds, TimeUnit::Milliseconds, TimeUnit::Seconds})
- add(unit, d, i, expected);
- };
-
- forAllUnitsAdd(-0.5, -1, 0); // all negative values result in 0
-
- forAllUnitsAdd(0, 0, 0);
-
- add(TimeUnit::Nanoseconds, 1, 1, 1);
- add(TimeUnit::Nanoseconds, 1000 * 1000, 1000 * 1000, 1);
- add(TimeUnit::Nanoseconds, 1000 * 1000 + 0.5, 1000 * 1000 + 1, 2);
-
- add(TimeUnit::Microseconds, 1, 1, 1);
- add(TimeUnit::Microseconds, 1000, 1000, 1);
- add(TimeUnit::Microseconds, 1000 + 0.5, 1000 + 1, 2);
-
- add(TimeUnit::Milliseconds, 1, 1, 1);
- add(TimeUnit::Milliseconds, 1.5, 2, 2);
-
- add(TimeUnit::Seconds, 0.9991, 1, 1000);
-
- //
- // overflowing int results in INT_MAX (equivalent to a spurious wakeup after ~24 days); check it:
- //
-
- // spot on:
- add(TimeUnit::Nanoseconds, INT_MAX * 1000. * 1000, INT_MAX * Q_INT64_C(1000) * 1000, INT_MAX);
- add(TimeUnit::Microseconds, INT_MAX * 1000., INT_MAX * Q_INT64_C(1000), INT_MAX);
- add(TimeUnit::Milliseconds, INT_MAX, INT_MAX, INT_MAX);
-
- // minimally above:
- add(TimeUnit::Nanoseconds, INT_MAX * 1000. * 1000 + 1, INT_MAX * Q_INT64_C(1000) * 1000 + 1, INT_MAX);
- add(TimeUnit::Microseconds, INT_MAX * 1000. + 1, INT_MAX * Q_INT64_C(1000) + 1, INT_MAX);
- add(TimeUnit::Milliseconds, INT_MAX + 1., INT_MAX + Q_INT64_C(1), INT_MAX);
- add(TimeUnit::Seconds, INT_MAX / 1000. + 1, INT_MAX / 1000 + 1, INT_MAX);
-
- // minimally below:
- add(TimeUnit::Nanoseconds, INT_MAX * 1000. * 1000 - 1, INT_MAX * Q_INT64_C(1000) * 1000 - 1, INT_MAX);
- add(TimeUnit::Microseconds, INT_MAX * 1000. - 1, INT_MAX * Q_INT64_C(1000) - 1, INT_MAX);
- add(TimeUnit::Milliseconds, INT_MAX - 0.1, INT_MAX , INT_MAX);
-
-}
-
-void tst_QMutex::convertToMilliseconds()
-{
-#if !__has_include(<chrono>)
- QSKIP("This test requires <chrono>");
-#else
- QFETCH(TimeUnit, unit);
- QFETCH(double, doubleValue);
- QFETCH(qint64, intValue);
- QFETCH(qint64, expected);
-
- constexpr qint64 maxShort = std::numeric_limits<short>::max();
- constexpr qint64 maxInt = std::numeric_limits<int>::max();
- constexpr qint64 maxUInt = std::numeric_limits<uint>::max();
-
- switch (unit) {
-#define CASE(Unit, Period) \
- case TimeUnit::Unit: \
- DO(double, Period, doubleValue); \
- if (intValue < maxShort) \
- DO(short, Period, short(intValue)); \
- if (intValue < maxInt) \
- DO(int, Period, int(intValue)); \
- DO(qint64, Period, intValue); \
- if (intValue >= 0) { \
- if (intValue < maxUInt) \
- DO(uint, Period, uint(intValue)); \
- DO(quint64, Period, quint64(intValue)); \
- } \
- break
-#define DO(Rep, Period, val) \
- do { \
- const std::chrono::duration<Rep, Period> wait((val)); \
- QCOMPARE(QtPrivate::convertToMilliseconds(wait), expected); \
- } while (0)
-
- CASE(Nanoseconds, std::nano);
- CASE(Microseconds, std::micro);
- CASE(Milliseconds, std::milli);
- CASE(Seconds, std::ratio<1>);
-#undef DO
-#undef CASE
- }
-#endif
-}
void tst_QMutex::tryLock_non_recursive()
{
@@ -229,19 +99,19 @@ void tst_QMutex::tryLock_non_recursive()
QElapsedTimer timer;
timer.start();
QVERIFY(!normalMutex.tryLock(waitTime));
- QVERIFY(timer.elapsed() >= waitTime - systemTimersResolution);
+ QCOMPARE_GE(timer.elapsed(), waitTime - systemTimersResolution);
testsTurn.release();
// TEST 4: thread can acquire lock, timeout = waitTime
threadsTurn.acquire();
timer.start();
QVERIFY(normalMutex.tryLock(waitTime));
- QVERIFY(timer.elapsed() <= waitTime + systemTimersResolution);
+ QCOMPARE_LE(timer.elapsed(), waitTime + systemTimersResolution);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
timer.start();
// it's non-recursive, so the following lock needs to fail
QVERIFY(!normalMutex.tryLock(waitTime));
- QVERIFY(timer.elapsed() >= waitTime - systemTimersResolution);
+ QCOMPARE_GE(timer.elapsed(), waitTime - systemTimersResolution);
QVERIFY(lockCount.testAndSetRelaxed(1, 0));
normalMutex.unlock();
testsTurn.release();
@@ -255,7 +125,7 @@ void tst_QMutex::tryLock_non_recursive()
threadsTurn.acquire();
timer.start();
QVERIFY(normalMutex.tryLock(0));
- QVERIFY(timer.elapsed() < waitTime + systemTimersResolution);
+ QCOMPARE_LT(timer.elapsed(), waitTime + systemTimersResolution);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
QVERIFY(!normalMutex.tryLock(0));
QVERIFY(lockCount.testAndSetRelaxed(1, 0));
@@ -266,7 +136,7 @@ void tst_QMutex::tryLock_non_recursive()
threadsTurn.acquire();
timer.start();
QVERIFY(normalMutex.tryLock(3000));
- QVERIFY(timer.elapsed() < 3000 + systemTimersResolution);
+ QCOMPARE_LT(timer.elapsed(), 3000 + systemTimersResolution);
normalMutex.unlock();
testsTurn.release();
@@ -277,47 +147,47 @@ void tst_QMutex::tryLock_non_recursive()
Thread thread;
thread.start();
- // TEST 1: thread can't acquire lock
+ qDebug("TEST 1: thread can't acquire lock");
testsTurn.acquire();
normalMutex.lock();
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
threadsTurn.release();
- // TEST 2: thread can acquire lock
+ qDebug("TEST 2: thread can acquire lock");
testsTurn.acquire();
QVERIFY(lockCount.testAndSetRelaxed(1, 0));
normalMutex.unlock();
threadsTurn.release();
- // TEST 3: thread can't acquire lock, timeout = waitTime
+ qDebug("TEST 3: thread can't acquire lock, timeout = waitTime");
testsTurn.acquire();
normalMutex.lock();
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
threadsTurn.release();
- // TEST 4: thread can acquire lock, timeout = waitTime
+ qDebug("TEST 4: thread can acquire lock, timeout = waitTime");
testsTurn.acquire();
QVERIFY(lockCount.testAndSetRelaxed(1, 0));
normalMutex.unlock();
threadsTurn.release();
- // TEST 5: thread can't acquire lock, timeout = 0
+ qDebug("TEST 5: thread can't acquire lock, timeout = 0");
testsTurn.acquire();
normalMutex.lock();
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
threadsTurn.release();
- // TEST 6: thread can acquire lock, timeout = 0
+ qDebug("TEST 6: thread can acquire lock, timeout = 0");
testsTurn.acquire();
QVERIFY(lockCount.testAndSetRelaxed(1, 0));
normalMutex.unlock();
threadsTurn.release();
- // TEST 7: thread can acquire lock, timeout = 3000 (QTBUG-24795)
+ qDebug("TEST 7: thread can acquire lock, timeout = 3000 (QTBUG-24795)");
testsTurn.acquire();
normalMutex.lock();
threadsTurn.release();
- QThread::msleep(100);
+ QThread::sleep(100ms);
normalMutex.unlock();
// wait for thread to finish
@@ -326,10 +196,8 @@ void tst_QMutex::tryLock_non_recursive()
thread.wait();
}
-void tst_QMutex::try_lock_for_non_recursive() {
-#if !__has_include(<chrono>)
- QSKIP("This test requires <chrono>");
-#else
+void tst_QMutex::try_lock_for_non_recursive()
+{
class Thread : public QThread
{
public:
@@ -356,19 +224,19 @@ void tst_QMutex::try_lock_for_non_recursive() {
QElapsedTimer timer;
timer.start();
QVERIFY(!normalMutex.try_lock_for(waitTimeAsDuration));
- QVERIFY(timer.elapsed() >= waitTime - systemTimersResolution);
+ QCOMPARE_GE(timer.elapsed(), waitTime - systemTimersResolution);
testsTurn.release();
// TEST 4: thread can acquire lock, timeout = waitTime
threadsTurn.acquire();
timer.start();
QVERIFY(normalMutex.try_lock_for(waitTimeAsDuration));
- QVERIFY(timer.elapsed() <= waitTime + systemTimersResolution);
+ QCOMPARE_LE(timer.elapsed(), waitTime + systemTimersResolution);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
timer.start();
// it's non-recursive, so the following lock needs to fail
QVERIFY(!normalMutex.try_lock_for(waitTimeAsDuration));
- QVERIFY(timer.elapsed() >= waitTime - systemTimersResolution);
+ QCOMPARE_GE(timer.elapsed(), waitTime - systemTimersResolution);
QVERIFY(lockCount.testAndSetRelaxed(1, 0));
normalMutex.unlock();
testsTurn.release();
@@ -382,7 +250,7 @@ void tst_QMutex::try_lock_for_non_recursive() {
threadsTurn.acquire();
timer.start();
QVERIFY(normalMutex.try_lock_for(std::chrono::milliseconds::zero()));
- QVERIFY(timer.elapsed() < waitTime + systemTimersResolution);
+ QCOMPARE_LT(timer.elapsed(), waitTime + systemTimersResolution);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
QVERIFY(!normalMutex.try_lock_for(std::chrono::milliseconds::zero()));
QVERIFY(lockCount.testAndSetRelaxed(1, 0));
@@ -393,7 +261,7 @@ void tst_QMutex::try_lock_for_non_recursive() {
threadsTurn.acquire();
timer.start();
QVERIFY(normalMutex.try_lock_for(std::chrono::milliseconds(3000)));
- QVERIFY(timer.elapsed() < 3000 + systemTimersResolution);
+ QCOMPARE_LT(timer.elapsed(), 3000 + systemTimersResolution);
normalMutex.unlock();
testsTurn.release();
@@ -444,21 +312,17 @@ void tst_QMutex::try_lock_for_non_recursive() {
testsTurn.acquire();
normalMutex.lock();
threadsTurn.release();
- QThread::msleep(100);
+ QThread::sleep(100ms);
normalMutex.unlock();
// wait for thread to finish
testsTurn.acquire();
threadsTurn.release();
thread.wait();
-#endif
}
void tst_QMutex::try_lock_until_non_recursive()
{
-#if !__has_include(<chrono>)
- QSKIP("This test requires <chrono>");
-#else
class Thread : public QThread
{
public:
@@ -485,19 +349,19 @@ void tst_QMutex::try_lock_until_non_recursive()
threadsTurn.acquire();
auto endTimePoint = std::chrono::steady_clock::now() + waitTimeAsDuration;
QVERIFY(!normalMutex.try_lock_until(endTimePoint));
- QVERIFY(std::chrono::steady_clock::now() >= endTimePoint - systemTimersResolutionAsDuration);
+ QCOMPARE_GE(std::chrono::steady_clock::now(), endTimePoint - systemTimersResolutionAsDuration);
testsTurn.release();
// TEST 4: thread can acquire lock, timeout = waitTime
threadsTurn.acquire();
endTimePoint = std::chrono::steady_clock::now() + waitTimeAsDuration;
QVERIFY(normalMutex.try_lock_until(endTimePoint));
- QVERIFY(std::chrono::steady_clock::now() <= endTimePoint + systemTimersResolutionAsDuration);
+ QCOMPARE_LE(std::chrono::steady_clock::now(), endTimePoint + systemTimersResolutionAsDuration);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
endTimePoint = std::chrono::steady_clock::now() + waitTimeAsDuration;
// it's non-recursive, so the following lock needs to fail
QVERIFY(!normalMutex.try_lock_until(endTimePoint));
- QVERIFY(std::chrono::steady_clock::now() >= endTimePoint - systemTimersResolutionAsDuration);
+ QCOMPARE_GE(std::chrono::steady_clock::now(), endTimePoint - systemTimersResolutionAsDuration);
QVERIFY(lockCount.testAndSetRelaxed(1, 0));
normalMutex.unlock();
testsTurn.release();
@@ -511,7 +375,7 @@ void tst_QMutex::try_lock_until_non_recursive()
threadsTurn.acquire();
endTimePoint = std::chrono::steady_clock::now() + waitTimeAsDuration;
QVERIFY(normalMutex.try_lock_until(std::chrono::steady_clock::now()));
- QVERIFY(std::chrono::steady_clock::now() < endTimePoint + systemTimersResolutionAsDuration);
+ QCOMPARE_LT(std::chrono::steady_clock::now(), endTimePoint + systemTimersResolutionAsDuration);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
QVERIFY(!normalMutex.try_lock_until(std::chrono::steady_clock::now()));
QVERIFY(lockCount.testAndSetRelaxed(1, 0));
@@ -522,7 +386,7 @@ void tst_QMutex::try_lock_until_non_recursive()
threadsTurn.acquire();
endTimePoint = std::chrono::steady_clock::now() + std::chrono::milliseconds(3000);
QVERIFY(normalMutex.try_lock_until(endTimePoint));
- QVERIFY(std::chrono::steady_clock::now() < endTimePoint + systemTimersResolutionAsDuration);
+ QCOMPARE_LT(std::chrono::steady_clock::now(), endTimePoint + systemTimersResolutionAsDuration);
normalMutex.unlock();
testsTurn.release();
@@ -573,14 +437,13 @@ void tst_QMutex::try_lock_until_non_recursive()
testsTurn.acquire();
normalMutex.lock();
threadsTurn.release();
- QThread::msleep(100);
+ QThread::sleep(100ms);
normalMutex.unlock();
// wait for thread to finish
testsTurn.acquire();
threadsTurn.release();
thread.wait();
-#endif
}
void tst_QMutex::tryLock_recursive()
@@ -611,14 +474,14 @@ void tst_QMutex::tryLock_recursive()
QElapsedTimer timer;
timer.start();
QVERIFY(!recursiveMutex.tryLock(waitTime));
- QVERIFY(timer.elapsed() >= waitTime - systemTimersResolution);
+ QCOMPARE_GE(timer.elapsed(), waitTime - systemTimersResolution);
QVERIFY(!recursiveMutex.tryLock(0));
testsTurn.release();
threadsTurn.acquire();
timer.start();
QVERIFY(recursiveMutex.tryLock(waitTime));
- QVERIFY(timer.elapsed() <= waitTime + systemTimersResolution);
+ QCOMPARE_LE(timer.elapsed(), waitTime + systemTimersResolution);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
QVERIFY(recursiveMutex.tryLock(waitTime));
QVERIFY(lockCount.testAndSetRelaxed(1, 2));
@@ -636,7 +499,7 @@ void tst_QMutex::tryLock_recursive()
threadsTurn.acquire();
timer.start();
QVERIFY(recursiveMutex.tryLock(0));
- QVERIFY(timer.elapsed() < waitTime + systemTimersResolution);
+ QCOMPARE_LT(timer.elapsed(), waitTime + systemTimersResolution);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
QVERIFY(recursiveMutex.tryLock(0));
QVERIFY(lockCount.testAndSetRelaxed(1, 2));
@@ -709,9 +572,6 @@ void tst_QMutex::tryLock_recursive()
void tst_QMutex::try_lock_for_recursive()
{
-#if !__has_include(<chrono>)
- QSKIP("This test requires <chrono>");
-#else
class Thread : public QThread
{
public:
@@ -738,14 +598,14 @@ void tst_QMutex::try_lock_for_recursive()
QElapsedTimer timer;
timer.start();
QVERIFY(!recursiveMutex.try_lock_for(waitTimeAsDuration));
- QVERIFY(timer.elapsed() >= waitTime - systemTimersResolution);
+ QCOMPARE_GE(timer.elapsed(), waitTime - systemTimersResolution);
QVERIFY(!recursiveMutex.try_lock_for(std::chrono::milliseconds::zero()));
testsTurn.release();
threadsTurn.acquire();
timer.start();
QVERIFY(recursiveMutex.try_lock_for(waitTimeAsDuration));
- QVERIFY(timer.elapsed() <= waitTime + systemTimersResolution);
+ QCOMPARE_LE(timer.elapsed(), waitTime + systemTimersResolution);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
QVERIFY(recursiveMutex.try_lock_for(waitTimeAsDuration));
QVERIFY(lockCount.testAndSetRelaxed(1, 2));
@@ -763,7 +623,7 @@ void tst_QMutex::try_lock_for_recursive()
threadsTurn.acquire();
timer.start();
QVERIFY(recursiveMutex.try_lock_for(std::chrono::milliseconds::zero()));
- QVERIFY(timer.elapsed() < waitTime + systemTimersResolution);
+ QCOMPARE_LT(timer.elapsed(), waitTime + systemTimersResolution);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
QVERIFY(recursiveMutex.try_lock_for(std::chrono::milliseconds::zero()));
QVERIFY(lockCount.testAndSetRelaxed(1, 2));
@@ -832,14 +692,10 @@ void tst_QMutex::try_lock_for_recursive()
testsTurn.acquire();
threadsTurn.release();
thread.wait();
-#endif
}
void tst_QMutex::try_lock_until_recursive()
{
-#if !__has_include(<chrono>)
- QSKIP("This test requires <chrono>");
-#else
class Thread : public QThread
{
public:
@@ -866,14 +722,14 @@ void tst_QMutex::try_lock_until_recursive()
threadsTurn.acquire();
auto endTimePoint = std::chrono::steady_clock::now() + waitTimeAsDuration;
QVERIFY(!recursiveMutex.try_lock_until(endTimePoint));
- QVERIFY(std::chrono::steady_clock::now() >= endTimePoint - systemTimersResolutionAsDuration);
+ QCOMPARE_GE(std::chrono::steady_clock::now(), endTimePoint - systemTimersResolutionAsDuration);
QVERIFY(!recursiveMutex.try_lock());
testsTurn.release();
threadsTurn.acquire();
endTimePoint = std::chrono::steady_clock::now() + waitTimeAsDuration;
QVERIFY(recursiveMutex.try_lock_until(endTimePoint));
- QVERIFY(std::chrono::steady_clock::now() <= endTimePoint + systemTimersResolutionAsDuration);
+ QCOMPARE_LE(std::chrono::steady_clock::now(), endTimePoint + systemTimersResolutionAsDuration);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
endTimePoint = std::chrono::steady_clock::now() + waitTimeAsDuration;
QVERIFY(recursiveMutex.try_lock_until(endTimePoint));
@@ -892,7 +748,7 @@ void tst_QMutex::try_lock_until_recursive()
threadsTurn.acquire();
endTimePoint = std::chrono::steady_clock::now() + waitTimeAsDuration;
QVERIFY(recursiveMutex.try_lock_until(std::chrono::steady_clock::now()));
- QVERIFY(std::chrono::steady_clock::now() <= endTimePoint + systemTimersResolutionAsDuration);
+ QCOMPARE_LE(std::chrono::steady_clock::now(), endTimePoint + systemTimersResolutionAsDuration);
QVERIFY(lockCount.testAndSetRelaxed(0, 1));
QVERIFY(recursiveMutex.try_lock_until(std::chrono::steady_clock::now()));
QVERIFY(lockCount.testAndSetRelaxed(1, 2));
@@ -961,7 +817,6 @@ void tst_QMutex::try_lock_until_recursive()
testsTurn.acquire();
threadsTurn.release();
thread.wait();
-#endif
}
class mutex_Thread : public QThread
@@ -1087,8 +942,8 @@ void tst_QMutex::lock_unlock_locked_tryLock()
}
}
-enum { one_minute = 6 * 1000, //not really one minute, but else it is too long.
- threadCount = 10 };
+constexpr int one_minute = 6 * 1000; // not really one minute, but else it is too long.
+constexpr int threadCount = 10;
class StressTestThread : public QThread
{
@@ -1325,12 +1180,13 @@ QAtomicInt MoreStressTestThread::errorCount = 0;
void tst_QMutex::moreStress()
{
- MoreStressTestThread threads[threadCount];
- for (int i = 0; i < threadCount; ++i)
- threads[i].start();
+ QVarLengthArray<MoreStressTestThread, threadCount> threads(qMin(QThread::idealThreadCount(),
+ int(threadCount)));
+ for (auto &thread : threads)
+ thread.start();
QVERIFY(threads[0].wait(one_minute + 10000));
- for (int i = 1; i < threadCount; ++i)
- QVERIFY(threads[i].wait(10000));
+ for (auto &thread : threads)
+ QVERIFY(thread.wait(10000));
qDebug("locked %d times", MoreStressTestThread::lockCount.loadRelaxed());
QCOMPARE(MoreStressTestThread::errorCount.loadRelaxed(), 0);
}
diff --git a/tests/auto/corelib/thread/qmutexlocker/CMakeLists.txt b/tests/auto/corelib/thread/qmutexlocker/CMakeLists.txt
index b73d0d073d..7b2d6dc1c2 100644
--- a/tests/auto/corelib/thread/qmutexlocker/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qmutexlocker/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qmutexlocker.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmutexlocker Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmutexlocker LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmutexlocker
SOURCES
tst_qmutexlocker.cpp
diff --git a/tests/auto/corelib/thread/qmutexlocker/tst_qmutexlocker.cpp b/tests/auto/corelib/thread/qmutexlocker/tst_qmutexlocker.cpp
index d873291fd6..6ccab04c27 100644
--- a/tests/auto/corelib/thread/qmutexlocker/tst_qmutexlocker.cpp
+++ b/tests/auto/corelib/thread/qmutexlocker/tst_qmutexlocker.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 <QTest>
@@ -67,6 +42,7 @@ private slots:
void scopeTest();
void unlockAndRelockTest();
void lockerStateTest();
+ void moveSemantics();
};
void tst_QMutexLocker::scopeTest()
@@ -80,6 +56,7 @@ void tst_QMutexLocker::scopeTest()
{
QMutexLocker locker(&mutex);
+ QVERIFY(locker.isLocked());
waitForTest();
}
@@ -122,16 +99,23 @@ void tst_QMutexLocker::unlockAndRelockTest()
void run() override
{
QMutexLocker locker(&mutex);
+ QVERIFY(locker.isLocked());
waitForTest();
+ QVERIFY(locker.isLocked());
locker.unlock();
+ QVERIFY(!locker.isLocked());
waitForTest();
+ QVERIFY(!locker.isLocked());
locker.relock();
+ QVERIFY(locker.isLocked());
waitForTest();
+
+ QVERIFY(locker.isLocked());
}
};
@@ -169,10 +153,13 @@ void tst_QMutexLocker::lockerStateTest()
{
{
QMutexLocker locker(&mutex);
- locker.relock();
+ QVERIFY(locker.isLocked());
+
locker.unlock();
+ QVERIFY(!locker.isLocked());
waitForTest();
+ QVERIFY(!locker.isLocked());
}
waitForTest();
@@ -200,5 +187,71 @@ void tst_QMutexLocker::lockerStateTest()
thread = nullptr;
}
+void tst_QMutexLocker::moveSemantics()
+{
+ {
+ QMutexLocker<QMutex> locker(nullptr);
+ QVERIFY(!locker.isLocked());
+ QCOMPARE(locker.mutex(), nullptr);
+
+ QMutexLocker locker2(std::move(locker));
+ QVERIFY(!locker.isLocked());
+ QVERIFY(!locker2.isLocked());
+ QCOMPARE(locker.mutex(), nullptr);
+ QCOMPARE(locker2.mutex(), nullptr);
+ }
+
+ QMutex mutex;
+
+ {
+ QMutexLocker locker(&mutex);
+ QVERIFY(locker.isLocked());
+ QCOMPARE(locker.mutex(), &mutex);
+ QVERIFY(!mutex.tryLock());
+
+ QMutexLocker locker2(std::move(locker));
+ QVERIFY(!locker.isLocked());
+ QVERIFY(locker2.isLocked());
+ QCOMPARE(locker.mutex(), nullptr);
+ QCOMPARE(locker2.mutex(), &mutex);
+ QVERIFY(!mutex.tryLock());
+ }
+
+ QVERIFY(mutex.tryLock());
+ mutex.unlock();
+
+ {
+ QMutex mutex;
+ QMutexLocker locker(&mutex);
+ QVERIFY(locker.isLocked());
+ QCOMPARE(locker.mutex(), &mutex);
+ QVERIFY(!mutex.tryLock());
+
+ locker.unlock();
+ QVERIFY(!locker.isLocked());
+ QCOMPARE(locker.mutex(), &mutex);
+ QVERIFY(mutex.tryLock());
+ mutex.unlock();
+
+ QMutexLocker locker2(std::move(locker));
+ QVERIFY(!locker.isLocked());
+ QVERIFY(!locker2.isLocked());
+ QCOMPARE(locker.mutex(), nullptr);
+ QCOMPARE(locker2.mutex(), &mutex);
+ QVERIFY(mutex.tryLock());
+ mutex.unlock();
+
+ locker2.relock();
+ QVERIFY(!locker.isLocked());
+ QVERIFY(locker2.isLocked());
+ QCOMPARE(locker.mutex(), nullptr);
+ QCOMPARE(locker2.mutex(), &mutex);
+ QVERIFY(!mutex.tryLock());
+ }
+
+ QVERIFY(mutex.tryLock());
+ mutex.unlock();
+}
+
QTEST_MAIN(tst_QMutexLocker)
#include "tst_qmutexlocker.moc"
diff --git a/tests/auto/corelib/thread/qpromise/CMakeLists.txt b/tests/auto/corelib/thread/qpromise/CMakeLists.txt
index b841c7812b..c1ca30b34a 100644
--- a/tests/auto/corelib/thread/qpromise/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qpromise/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qpromise.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpromise Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpromise LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpromise
SOURCES
tst_qpromise.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/thread/qpromise/snippet_qpromise.cpp b/tests/auto/corelib/thread/qpromise/snippet_qpromise.cpp
index 2e7b8832d3..2cef0dca95 100644
--- a/tests/auto/corelib/thread/qpromise/snippet_qpromise.cpp
+++ b/tests/auto/corelib/thread/qpromise/snippet_qpromise.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** 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: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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Note: this file is published under a license that is different from a default
// test sources license. This is intentional to comply with default
@@ -100,9 +53,9 @@ void snippet_QPromise::multithreadExample()
QFuture<int> future = sharedPromise->future();
// ...
-//! [multithread_init]
sharedPromise->start();
+//! [multithread_init]
//! [multithread_main]
// here, QPromise is shared between threads via a smart pointer
@@ -135,7 +88,9 @@ void snippet_QPromise::multithreadExample()
for (auto& t : threads)
t->wait();
+//! [multithread_cleanup]
sharedPromise->finish();
+//! [multithread_cleanup]
#endif
}
diff --git a/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp b/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp
index 52f4daa24a..2c12e41c93 100644
--- a/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp
+++ b/tests/auto/corelib/thread/qpromise/tst_qpromise.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QCoreApplication>
#include <QDebug>
@@ -39,6 +14,8 @@
#include <memory>
#include <chrono>
+using namespace std::chrono_literals;
+
class tst_QPromise : public QObject
{
Q_OBJECT
@@ -47,6 +24,7 @@ private slots:
void promise();
void futureFromPromise();
void addResult();
+ void addResultWithBracedInitializer();
void addResultOutOfOrder();
#ifndef QT_NO_EXCEPTIONS
void setException();
@@ -64,6 +42,10 @@ private slots:
void cancelWhenDestroyed();
#endif
void cancelWhenReassigned();
+ void cancelWhenDestroyedWithoutStarting();
+ void cancelWhenDestroyedRunsContinuations();
+ void cancelWhenDestroyedWithFailureHandler(); // QTBUG-114606
+ void continuationsRunWhenFinished();
void finishWhenSwapped();
void cancelWhenMoved();
void waitUntilResumed();
@@ -191,6 +173,15 @@ void tst_QPromise::addResult()
QCOMPARE(f.resultCount(), 3);
QCOMPARE(f.resultAt(2), result);
}
+ // add multiple results in one go:
+ {
+ QList results = {42, 4242, 424242};
+ QVERIFY(promise.addResults(results));
+ QCOMPARE(f.resultCount(), 6);
+ QCOMPARE(f.resultAt(3), 42);
+ QCOMPARE(f.resultAt(4), 4242);
+ QCOMPARE(f.resultAt(5), 424242);
+ }
// add as lvalue at position and overwrite
{
int result = -1;
@@ -208,6 +199,28 @@ void tst_QPromise::addResult()
}
}
+void tst_QPromise::addResultWithBracedInitializer() // QTBUG-111826
+{
+ struct MyClass
+ {
+ QString strValue;
+ int intValue = 0;
+#ifndef __cpp_aggregate_paren_init // make emplacement work with MyClass
+ MyClass(QString s, int i) : strValue(std::move(s)), intValue(i) {}
+#endif
+ };
+
+ {
+ QPromise<MyClass> myPromise;
+ myPromise.addResult({"bar", 1});
+ }
+
+ {
+ QPromise<MyClass> myPromise;
+ myPromise.emplaceResult("bar", 1);
+ }
+}
+
void tst_QPromise::addResultOutOfOrder()
{
// Compare results available in QFuture to expected results
@@ -279,6 +292,10 @@ void tst_QPromise::setException()
std::make_exception_ptr(TestException()));
RUN_TEST_FUNC(testExceptionCaught, QPromise<int>(),
std::make_exception_ptr(TestException()));
+ RUN_TEST_FUNC(testExceptionCaught, QPromise<CopyOnlyType>(),
+ std::make_exception_ptr(TestException()));
+ RUN_TEST_FUNC(testExceptionCaught, QPromise<MoveOnlyType>(),
+ std::make_exception_ptr(TestException()));
}
#endif
@@ -292,6 +309,8 @@ void tst_QPromise::cancel()
testCancel(QPromise<void>());
testCancel(QPromise<int>());
+ testCancel(QPromise<CopyOnlyType>());
+ testCancel(QPromise<MoveOnlyType>());
}
void tst_QPromise::progress()
@@ -319,13 +338,13 @@ void tst_QPromise::progress()
RUN_TEST_FUNC(testProgress, QPromise<void>());
RUN_TEST_FUNC(testProgress, QPromise<int>());
+ RUN_TEST_FUNC(testProgress, QPromise<CopyOnlyType>());
+ RUN_TEST_FUNC(testProgress, QPromise<MoveOnlyType>());
}
void tst_QPromise::addInThread()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
+#if QT_CONFIG(cxx11_future)
const auto testAddResult = [] (auto promise, const auto &result) {
promise.start();
auto f = promise.future();
@@ -346,9 +365,7 @@ void tst_QPromise::addInThread()
void tst_QPromise::addInThreadMoveOnlyObject()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
+#if QT_CONFIG(cxx11_future)
QPromise<MoveOnlyType> promise;
promise.start();
auto f = promise.future();
@@ -365,9 +382,7 @@ void tst_QPromise::addInThreadMoveOnlyObject()
void tst_QPromise::reportFromMultipleThreads()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
+#if QT_CONFIG(cxx11_future)
QPromise<int> promise;
auto f = promise.future();
promise.start();
@@ -391,9 +406,7 @@ void tst_QPromise::reportFromMultipleThreads()
void tst_QPromise::reportFromMultipleThreadsByMovedPromise()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
+#if QT_CONFIG(cxx11_future)
QPromise<int> initialPromise;
auto f = initialPromise.future();
{
@@ -425,9 +438,7 @@ void tst_QPromise::reportFromMultipleThreadsByMovedPromise()
void tst_QPromise::doNotCancelWhenFinished()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
+#if QT_CONFIG(cxx11_future)
const auto testFinishedPromise = [] (auto promise) {
auto f = promise.future();
promise.start();
@@ -444,15 +455,15 @@ void tst_QPromise::doNotCancelWhenFinished()
RUN_TEST_FUNC(testFinishedPromise, QPromise<void>());
RUN_TEST_FUNC(testFinishedPromise, QPromise<int>());
RUN_TEST_FUNC(testFinishedPromise, QPromise<QString>());
+ RUN_TEST_FUNC(testFinishedPromise, QPromise<CopyOnlyType>());
+ RUN_TEST_FUNC(testFinishedPromise, QPromise<MoveOnlyType>());
#endif
}
#ifndef QT_NO_EXCEPTIONS
void tst_QPromise::cancelWhenDestroyed()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
+#if QT_CONFIG(cxx11_future)
QPromise<int> initialPromise;
auto f = initialPromise.future();
@@ -486,15 +497,13 @@ void tst_QPromise::cancelWhenDestroyed()
void tst_QPromise::cancelWhenReassigned()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
+#if QT_CONFIG(cxx11_future)
QPromise<int> promise;
auto f = promise.future();
promise.start();
ThreadWrapper thr([p = std::move(promise)] () mutable {
- QThread::msleep(100);
+ QThread::sleep(100ms);
p = QPromise<int>(); // assign new promise, old must be correctly destroyed
});
@@ -505,11 +514,123 @@ void tst_QPromise::cancelWhenReassigned()
#endif
}
-void tst_QPromise::finishWhenSwapped()
+template <typename T>
+static inline void testCancelWhenDestroyedWithoutStarting()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
+ QFuture<T> future;
+ {
+ QPromise<T> promise;
+ future = promise.future();
+ }
+ future.waitForFinished();
+ QVERIFY(!future.isStarted());
+ QVERIFY(future.isCanceled());
+ QVERIFY(future.isFinished());
+}
+
+void tst_QPromise::cancelWhenDestroyedWithoutStarting()
+{
+ testCancelWhenDestroyedWithoutStarting<void>();
+ testCancelWhenDestroyedWithoutStarting<int>();
+ testCancelWhenDestroyedWithoutStarting<CopyOnlyType>();
+ testCancelWhenDestroyedWithoutStarting<MoveOnlyType>();
+}
+
+template <typename T>
+static inline void testCancelWhenDestroyedRunsContinuations()
+{
+ QFuture<T> future;
+ bool onCanceledCalled = false;
+ bool thenCalled = false;
+ {
+ QPromise<T> promise;
+ future = promise.future();
+ future.then([&] (auto&&) {
+ thenCalled = true;
+ }).onCanceled([&] () {
+ onCanceledCalled = true;
+ });
+ }
+ QVERIFY(future.isFinished());
+ QVERIFY(!thenCalled);
+ QVERIFY(onCanceledCalled);
+}
+
+void tst_QPromise::cancelWhenDestroyedRunsContinuations()
+{
+ testCancelWhenDestroyedRunsContinuations<void>();
+ testCancelWhenDestroyedRunsContinuations<int>();
+ testCancelWhenDestroyedRunsContinuations<CopyOnlyType>();
+ testCancelWhenDestroyedRunsContinuations<MoveOnlyType>();
+}
+
+template <typename T>
+static inline void testCancelWhenDestroyedWithFailureHandler()
+{
+ QFuture<T> future;
+ bool onFailedCalled = false;
+ bool thenCalled = false;
+ {
+ QPromise<T> promise;
+ future = promise.future();
+ future
+ .onFailed([&] () {
+ onFailedCalled = true;
+ if constexpr (!std::is_same_v<void, T>)
+ return T{};
+ })
+ .then([&] (auto&&) {
+ thenCalled = true;
+ });
+ }
+ QVERIFY(future.isFinished());
+ QVERIFY(!onFailedCalled);
+ QVERIFY(!thenCalled);
+}
+
+void tst_QPromise::cancelWhenDestroyedWithFailureHandler()
+{
+#ifndef QT_NO_EXCEPTIONS
+ testCancelWhenDestroyedWithFailureHandler<void>();
+ testCancelWhenDestroyedWithFailureHandler<int>();
+ testCancelWhenDestroyedWithFailureHandler<CopyOnlyType>();
+ testCancelWhenDestroyedWithFailureHandler<MoveOnlyType>();
#else
+ QSKIP("Exceptions are disabled, skipping the test");
+#endif
+}
+
+template <typename T>
+static inline void testContinuationsRunWhenFinished()
+{
+ QPromise<T> promise;
+ QFuture<T> future = promise.future();
+
+ bool thenCalled = false;
+ future.then([&] (auto&&) {
+ thenCalled = true;
+ });
+
+ promise.start();
+ if constexpr (!std::is_void_v<T>) {
+ promise.addResult(T{});
+ }
+ promise.finish();
+
+ QVERIFY(thenCalled);
+}
+
+void tst_QPromise::continuationsRunWhenFinished()
+{
+ testContinuationsRunWhenFinished<void>();
+ testContinuationsRunWhenFinished<int>();
+ testContinuationsRunWhenFinished<CopyOnlyType>();
+ testContinuationsRunWhenFinished<MoveOnlyType>();
+}
+
+void tst_QPromise::finishWhenSwapped()
+{
+#if QT_CONFIG(cxx11_future)
QPromise<int> promise1;
auto f1 = promise1.future();
promise1.start();
@@ -519,7 +640,7 @@ void tst_QPromise::finishWhenSwapped()
promise2.start();
ThreadWrapper thr([&promise1, &promise2] () mutable {
- QThread::msleep(100);
+ QThread::sleep(100ms);
promise1.addResult(0);
promise2.addResult(1);
swap(promise1, promise2); // ADL must resolve this
@@ -547,22 +668,21 @@ void tst_QPromise::finishWhenSwapped()
#endif
}
-void tst_QPromise::cancelWhenMoved()
+template <typename T>
+void testCancelWhenMoved()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
- QPromise<int> promise1;
+#if QT_CONFIG(cxx11_future)
+ QPromise<T> promise1;
auto f1 = promise1.future();
promise1.start();
- QPromise<int> promise2;
+ QPromise<T> promise2;
auto f2 = promise2.future();
promise2.start();
// Move promises to local scope to test cancellation behavior
ThreadWrapper thr([p1 = std::move(promise1), p2 = std::move(promise2)] () mutable {
- QThread::msleep(100);
+ QThread::sleep(100ms);
p1 = std::move(p2);
p1.finish(); // this finish is for future #2
});
@@ -580,6 +700,14 @@ void tst_QPromise::cancelWhenMoved()
#endif
}
+void tst_QPromise::cancelWhenMoved()
+{
+ testCancelWhenMoved<void>();
+ testCancelWhenMoved<int>();
+ testCancelWhenMoved<CopyOnlyType>();
+ testCancelWhenMoved<MoveOnlyType>();
+}
+
void tst_QPromise::waitUntilResumed()
{
#if !QT_CONFIG(cxx11_future)
@@ -598,7 +726,7 @@ void tst_QPromise::waitUntilResumed()
while (!f.isSuspended()) { // busy wait until worker thread suspends
QCOMPARE(f.isFinished(), false); // exit condition in case of failure
- QThread::msleep(50); // allow another thread to actually carry on
+ QThread::sleep(50ms); // allow another thread to actually carry on
}
f.resume();
@@ -611,9 +739,7 @@ void tst_QPromise::waitUntilResumed()
void tst_QPromise::waitUntilCanceled()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
+#if QT_CONFIG(cxx11_future)
QPromise<int> promise;
promise.start();
auto f = promise.future();
@@ -627,7 +753,7 @@ void tst_QPromise::waitUntilCanceled()
while (!f.isSuspended()) { // busy wait until worker thread suspends
QCOMPARE(f.isFinished(), false); // exit condition in case of failure
- QThread::msleep(50); // allow another thread to actually carry on
+ QThread::sleep(50ms); // allow another thread to actually carry on
}
f.cancel();
diff --git a/tests/auto/corelib/thread/qreadlocker/CMakeLists.txt b/tests/auto/corelib/thread/qreadlocker/CMakeLists.txt
index da6091d588..7e80a4df81 100644
--- a/tests/auto/corelib/thread/qreadlocker/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qreadlocker/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qreadlocker.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qreadlocker Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qreadlocker LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qreadlocker
SOURCES
tst_qreadlocker.cpp
diff --git a/tests/auto/corelib/thread/qreadlocker/tst_qreadlocker.cpp b/tests/auto/corelib/thread/qreadlocker/tst_qreadlocker.cpp
index c270aa2683..e21f80c05d 100644
--- a/tests/auto/corelib/thread/qreadlocker/tst_qreadlocker.cpp
+++ b/tests/auto/corelib/thread/qreadlocker/tst_qreadlocker.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 <QTest>
diff --git a/tests/auto/corelib/thread/qreadwritelock/CMakeLists.txt b/tests/auto/corelib/thread/qreadwritelock/CMakeLists.txt
index 8852a31fa4..5ed3012e04 100644
--- a/tests/auto/corelib/thread/qreadwritelock/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qreadwritelock/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qreadwritelock.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qreadwritelock Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qreadwritelock LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qreadwritelock
SOURCES
tst_qreadwritelock.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::TestPrivate
)
diff --git a/tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp b/tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp
index f1468817ec..86dfa5faff 100644
--- a/tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp
+++ b/tests/auto/corelib/thread/qreadwritelock/tst_qreadwritelock.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSemaphore>
@@ -40,10 +15,6 @@
#ifdef Q_OS_UNIX
#include <unistd.h>
#endif
-#if defined(Q_OS_WIN)
-# include <qt_windows.h>
-# define sleep(X) Sleep(X)
-#endif
//on solaris, threads that loop on the release bool variable
//needs to sleep more than 1 usec.
@@ -55,6 +26,8 @@
#include <stdio.h>
+using namespace std::chrono_literals;
+
class tst_QReadWriteLock : public QObject
{
Q_OBJECT
@@ -497,8 +470,8 @@ class ReadLockLoopThread : public QThread
public:
QReadWriteLock &testRwlock;
int runTime;
- int holdTime;
- int waitTime;
+ std::chrono::milliseconds holdTime;
+ std::chrono::milliseconds waitTime;
bool print;
QElapsedTimer t;
inline ReadLockLoopThread(QReadWriteLock &l, int runTime, int holdTime=0, int waitTime=0, bool print=false)
@@ -514,9 +487,9 @@ public:
while (t.elapsed()<runTime) {
testRwlock.lockForRead();
if(print) printf("reading\n");
- if (holdTime) msleep(ulong(holdTime));
+ if (holdTime > 0ms) sleep(holdTime);
testRwlock.unlock();
- if (waitTime) msleep(ulong(waitTime));
+ if (waitTime > 0ms) sleep(waitTime);
}
}
};
@@ -533,8 +506,8 @@ class WriteLockLoopThread : public QThread
public:
QReadWriteLock &testRwlock;
int runTime;
- int holdTime;
- int waitTime;
+ std::chrono::milliseconds holdTime;
+ std::chrono::milliseconds waitTime;
bool print;
QElapsedTimer t;
inline WriteLockLoopThread(QReadWriteLock &l, int runTime, int holdTime=0, int waitTime=0, bool print=false)
@@ -550,9 +523,9 @@ public:
while (t.elapsed() < runTime) {
testRwlock.lockForWrite();
if (print) printf(".");
- if (holdTime) msleep(ulong(holdTime));
+ if (holdTime > 0ms) sleep(holdTime);
testRwlock.unlock();
- if (waitTime) msleep(ulong(waitTime));
+ if (waitTime > 0ms) sleep(waitTime);
}
}
};
@@ -572,7 +545,7 @@ class WriteLockCountThread : public QThread
public:
QReadWriteLock &testRwlock;
int runTime;
- int waitTime;
+ std::chrono::milliseconds waitTime;
int maxval;
QElapsedTimer t;
inline WriteLockCountThread(QReadWriteLock &l, int runTime, int waitTime, int maxval)
@@ -593,7 +566,7 @@ public:
QtPrivate::volatilePreIncrement(count);
count=0;
testRwlock.unlock();
- msleep(ulong(waitTime));
+ sleep(waitTime);
}
}
};
@@ -610,7 +583,7 @@ class ReadLockCountThread : public QThread
public:
QReadWriteLock &testRwlock;
int runTime;
- int waitTime;
+ std::chrono::milliseconds waitTime;
QElapsedTimer t;
inline ReadLockCountThread(QReadWriteLock &l, int runTime, int waitTime)
:testRwlock(l)
@@ -625,7 +598,7 @@ public:
if(count)
qFatal("Non-zero count at Read! (%d)",count );
testRwlock.unlock();
- msleep(ulong(waitTime));
+ sleep(waitTime);
}
}
};
@@ -642,7 +615,7 @@ void tst_QReadWriteLock::readLockBlockRelease()
threadDone=false;
ReadLockThread rlt(testLock);
rlt.start();
- sleep(1);
+ QThread::sleep(1s);
testLock.unlock();
rlt.wait();
QVERIFY(threadDone);
@@ -659,7 +632,7 @@ void tst_QReadWriteLock::writeLockBlockRelease()
threadDone=false;
WriteLockThread wlt(testLock);
wlt.start();
- sleep(1);
+ QThread::sleep(1s);
testLock.unlock();
wlt.wait();
QVERIFY(threadDone);
@@ -678,10 +651,10 @@ void tst_QReadWriteLock::multipleReadersBlockRelease()
ReadLockReleasableThread rlt2(testLock);
rlt1.start();
rlt2.start();
- sleep(1);
+ QThread::sleep(1s);
WriteLockThread wlt(testLock);
wlt.start();
- sleep(1);
+ QThread::sleep(1s);
release.storeRelaxed(true);
wlt.wait();
rlt1.wait();
diff --git a/tests/auto/corelib/thread/qresultstore/CMakeLists.txt b/tests/auto/corelib/thread/qresultstore/CMakeLists.txt
index ca30061d15..0f9d8d9e52 100644
--- a/tests/auto/corelib/thread/qresultstore/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qresultstore/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qresultstore.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qresultstore Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qresultstore LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qresultstore
SOURCES
tst_qresultstore.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp b/tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp
index 48b0eaf1eb..265b2cd1f6 100644
--- a/tests/auto/corelib/thread/qresultstore/tst_qresultstore.cpp
+++ b/tests/auto/corelib/thread/qresultstore/tst_qresultstore.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 <QTest>
@@ -32,9 +7,14 @@
using namespace QtPrivate;
-struct ResultStoreInt : ResultStoreBase
+class IntResultsCleaner
{
- ~ResultStoreInt() { clear<int>(); }
+public:
+ IntResultsCleaner(QtPrivate::ResultStoreBase &s) : store(s) { }
+ ~IntResultsCleaner() { store.clear<int>(); }
+
+private:
+ QtPrivate::ResultStoreBase &store;
};
class tst_QtConcurrentResultStore : public QObject
@@ -87,7 +67,9 @@ void tst_QtConcurrentResultStore::iterators()
QCOMPARE(store.resultAt(1), store.end());
}
{
- ResultStoreInt storebase;
+ QtPrivate::ResultStoreBase storebase;
+ IntResultsCleaner cleanGuard(storebase);
+
storebase.addResult(-1, &int0); // note to self: adding a pointer to the stack here is ok since
storebase.addResult(1, &int1); // ResultStoreBase does not take ownership, only ResultStore<> does.
ResultIteratorBase it = storebase.begin();
@@ -110,7 +92,9 @@ void tst_QtConcurrentResultStore::addResult()
{
{
// test addResult return value
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
QCOMPARE(store.addResult(0, &int0), 0);
@@ -156,7 +140,9 @@ void tst_QtConcurrentResultStore::addResult()
void tst_QtConcurrentResultStore::addResults()
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResults(-1, &vec0);
store.addResults(-1, &vec1);
ResultIteratorBase it = store.begin();
@@ -189,7 +175,9 @@ void tst_QtConcurrentResultStore::addResults()
void tst_QtConcurrentResultStore::resultIndex()
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(-1, &int0);
store.addResults(-1, &vec0);
store.addResult(-1, &int1);
@@ -222,7 +210,9 @@ void tst_QtConcurrentResultStore::resultIndex()
void tst_QtConcurrentResultStore::resultAt()
{
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(-1, &int0);
store.addResults(-1, &vec0);
store.addResult(200, &int1);
@@ -233,7 +223,9 @@ void tst_QtConcurrentResultStore::resultAt()
QCOMPARE(store.resultAt(200).value<int>(), int1);
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(1, &int1);
store.addResult(0, &int0);
store.addResult(-1, &int2);
@@ -247,7 +239,9 @@ void tst_QtConcurrentResultStore::resultAt()
void tst_QtConcurrentResultStore::contains()
{
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
QCOMPARE(store.contains(0), false);
QCOMPARE(store.contains(1), false);
QCOMPARE(store.contains(INT_MAX), false);
@@ -259,7 +253,9 @@ void tst_QtConcurrentResultStore::contains()
QVERIFY(store.contains(int2));
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(1, &int0);
store.addResult(3, &int0);
store.addResults(6, &vec0);
@@ -274,7 +270,9 @@ void tst_QtConcurrentResultStore::contains()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResult(1, &int0);
store.addResult(3, &int0);
@@ -302,7 +300,9 @@ void tst_QtConcurrentResultStore::contains()
QCOMPARE(store.contains(7), false);
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addCanceledResult(0);
QCOMPARE(store.contains(0), false);
@@ -316,7 +316,9 @@ void tst_QtConcurrentResultStore::contains()
void tst_QtConcurrentResultStore::filterMode()
{
// Test filter mode, where "gaps" in the result array aren't allowed.
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
QCOMPARE(store.filterMode(), false);
store.setFilterMode(true);
QVERIFY(store.filterMode());
@@ -361,7 +363,9 @@ void tst_QtConcurrentResultStore::filterMode()
void tst_QtConcurrentResultStore::addCanceledResult()
{
// test canceled results
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResult(0, &int0);
@@ -401,7 +405,9 @@ void tst_QtConcurrentResultStore::count()
{
// test resultCount in non-filtered mode. It should always be possible
// to iterate through the results 0 to resultCount.
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(0, &int0);
QCOMPARE(store.count(), 1);
@@ -415,7 +421,9 @@ void tst_QtConcurrentResultStore::count()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResult(2, &int0);
QCOMPARE(store.count(), 0);
@@ -427,7 +435,9 @@ void tst_QtConcurrentResultStore::count()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResults(2, &vec1);
QCOMPARE(store.count(), 0);
@@ -439,7 +449,9 @@ void tst_QtConcurrentResultStore::count()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResults(2, &vec1);
QCOMPARE(store.count(), 0);
@@ -447,7 +459,9 @@ void tst_QtConcurrentResultStore::count()
QCOMPARE(store.count(), 4);
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.addResults(3, &vec1);
QCOMPARE(store.count(), 0);
@@ -459,7 +473,9 @@ void tst_QtConcurrentResultStore::count()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResults(3, &vec1);
QCOMPARE(store.count(), 0);
@@ -472,7 +488,9 @@ void tst_QtConcurrentResultStore::count()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResults(3, &vec1);
QCOMPARE(store.count(), 0);
@@ -482,7 +500,9 @@ void tst_QtConcurrentResultStore::count()
}
{
- ResultStoreInt store;
+ QtPrivate::ResultStoreBase store;
+ IntResultsCleaner cleanGuard(store);
+
store.setFilterMode(true);
store.addResults(3, &vec1);
QCOMPARE(store.count(), 0);
@@ -529,17 +549,12 @@ struct CountedObject
const size_t previousLiveCount;
};
- int id = 0;
+ size_t id = 0;
static size_t liveCount;
};
size_t CountedObject::liveCount = 0;
-struct ResultStoreCountedObject : ResultStoreBase
-{
- ~ResultStoreCountedObject() { clear<CountedObject>(); }
-};
-
void tst_QtConcurrentResultStore::pendingResultsDoNotLeak_data()
{
QTest::addColumn<bool>("filterMode");
@@ -553,7 +568,9 @@ void tst_QtConcurrentResultStore::pendingResultsDoNotLeak()
QFETCH(bool, filterMode);
CountedObject::LeakChecker leakChecker; Q_UNUSED(leakChecker)
- ResultStoreCountedObject store;
+ QtPrivate::ResultStoreBase store;
+ auto cleanGaurd = qScopeGuard([&] { store.clear<CountedObject>(); });
+
store.setFilterMode(filterMode);
// lvalue
diff --git a/tests/auto/corelib/thread/qsemaphore/BLACKLIST b/tests/auto/corelib/thread/qsemaphore/BLACKLIST
index f7f6d5149c..ecd42cff7c 100644
--- a/tests/auto/corelib/thread/qsemaphore/BLACKLIST
+++ b/tests/auto/corelib/thread/qsemaphore/BLACKLIST
@@ -1,8 +1,2 @@
[tryAcquireWithTimeout]
-osx
-[tryAcquireWithTimeout:0.2s]
-windows
-macos
-[tryAcquireWithTimeout:2s]
-windows
macos
diff --git a/tests/auto/corelib/thread/qsemaphore/CMakeLists.txt b/tests/auto/corelib/thread/qsemaphore/CMakeLists.txt
index 1860347448..9f8a87558a 100644
--- a/tests/auto/corelib/thread/qsemaphore/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qsemaphore/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qsemaphore.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsemaphore Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsemaphore LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsemaphore
SOURCES
tst_qsemaphore.cpp
diff --git a/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp b/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp
index 1d3f3d6776..3bb1e1960c 100644
--- a/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.cpp
+++ b/tests/auto/corelib/thread/qsemaphore/tst_qsemaphore.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 <QTest>
diff --git a/tests/auto/corelib/thread/qthread/BLACKLIST b/tests/auto/corelib/thread/qthread/BLACKLIST
index c683154da1..08e9912455 100644
--- a/tests/auto/corelib/thread/qthread/BLACKLIST
+++ b/tests/auto/corelib/thread/qthread/BLACKLIST
@@ -1,5 +1,3 @@
[wait3_slowDestructor]
windows-10
-[sleep]
-windows-7sp1
diff --git a/tests/auto/corelib/thread/qthread/CMakeLists.txt b/tests/auto/corelib/thread/qthread/CMakeLists.txt
index 96c649f106..abcea1ef9c 100644
--- a/tests/auto/corelib/thread/qthread/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qthread/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qthread.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qthread Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qthread LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qthread
SOURCES
tst_qthread.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::TestPrivate
)
diff --git a/tests/auto/corelib/thread/qthread/tst_qthread.cpp b/tests/auto/corelib/thread/qthread/tst_qthread.cpp
index b9c5eeb243..a7194d4442 100644
--- a/tests/auto/corelib/thread/qthread/tst_qthread.cpp
+++ b/tests/auto/corelib/thread/qthread/tst_qthread.cpp
@@ -1,37 +1,14 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QTestEventLoop>
#include <QSignalSpy>
#include <QSemaphore>
#include <QAbstractEventDispatcher>
+#if defined(Q_OS_WIN32)
#include <QWinEventNotifier>
+#endif
#include <qcoreapplication.h>
#include <qelapsedtimer.h>
@@ -42,6 +19,8 @@
#include <qdebug.h>
#include <qmetaobject.h>
#include <qscopeguard.h>
+#include <private/qobject_p.h>
+#include <private/qthread_p.h>
#ifdef Q_OS_UNIX
#include <pthread.h>
@@ -59,6 +38,8 @@
#include <QtTest/private/qemulationdetector_p.h>
+using namespace std::chrono_literals;
+
class tst_QThread : public QObject
{
Q_OBJECT
@@ -91,6 +72,7 @@ private slots:
void adoptedThreadExecFinished();
void adoptMultipleThreads();
void adoptMultipleThreadsOverlap();
+ void adoptedThreadBindingStatus();
void exitAndStart();
void exitAndExec();
@@ -114,6 +96,11 @@ private slots:
void create();
void createDestruction();
void threadIdReuse();
+
+ void terminateAndPrematureDestruction();
+ void terminateAndDoubleDestruction();
+
+ void bindingListCleanupAfterDelete();
};
enum { one_minute = 60 * 1000, five_minutes = 5 * one_minute };
@@ -260,17 +247,19 @@ public:
elapsed = 0;
QElapsedTimer timer;
timer.start();
+ std::chrono::nanoseconds dur{0};
switch (sleepType) {
case Second:
- sleep(interval);
+ dur = std::chrono::seconds{interval};
break;
case Millisecond:
- msleep(interval);
+ dur = std::chrono::milliseconds{interval};
break;
case Microsecond:
- usleep(interval);
+ dur = std::chrono::microseconds{interval};
break;
}
+ sleep(dur);
elapsed = timer.elapsed();
cond.wakeOne();
@@ -482,6 +471,10 @@ void tst_QThread::terminate()
#if defined(Q_OS_ANDROID)
QSKIP("Thread termination is not supported on Android.");
#endif
+#if defined(__SANITIZE_ADDRESS__) || __has_feature(address_sanitizer)
+ QSKIP("Thread termination might result in stack underflow address sanitizer errors.");
+#endif
+
Terminate_Thread thread;
{
QMutexLocker locker(&thread.mutex);
@@ -548,6 +541,10 @@ void tst_QThread::terminated()
#if defined(Q_OS_ANDROID)
QSKIP("Thread termination is not supported on Android.");
#endif
+#if defined(__SANITIZE_ADDRESS__) || __has_feature(address_sanitizer)
+ QSKIP("Thread termination might result in stack underflow address sanitizer errors.");
+#endif
+
SignalRecorder recorder;
Terminate_Thread thread;
connect(&thread, SIGNAL(finished()), &recorder, SLOT(slot()), Qt::DirectConnection);
@@ -953,6 +950,20 @@ void tst_QThread::adoptMultipleThreadsOverlap()
QCOMPARE(recorder.activationCount.loadRelaxed(), numThreads);
}
+void tst_QThread::adoptedThreadBindingStatus()
+{
+ NativeThreadWrapper nativeThread;
+ nativeThread.setWaitForStop();
+
+ nativeThread.startAndWait();
+ QVERIFY(nativeThread.qthread);
+ auto privThread = static_cast<QThreadPrivate *>(QObjectPrivate::get(nativeThread.qthread));
+ QVERIFY(privThread->m_statusOrPendingObjects.bindingStatus());
+
+ nativeThread.stop();
+ nativeThread.join();
+}
+
// Disconnects on WinCE
void tst_QThread::stressTest()
{
@@ -1218,13 +1229,10 @@ void tst_QThread::isRunningInFinished()
}
}
-QT_BEGIN_NAMESPACE
-Q_CORE_EXPORT uint qGlobalPostedEventsCount();
-QT_END_NAMESPACE
-
-class DummyEventDispatcher : public QAbstractEventDispatcher {
+class DummyEventDispatcher : public QAbstractEventDispatcherV2
+{
+ Q_OBJECT
public:
- DummyEventDispatcher() : QAbstractEventDispatcher() {}
bool processEvents(QEventLoop::ProcessEventsFlags) override {
visited.storeRelaxed(true);
emit awake();
@@ -1233,11 +1241,11 @@ public:
}
void registerSocketNotifier(QSocketNotifier *) override {}
void unregisterSocketNotifier(QSocketNotifier *) override {}
- void registerTimer(int, qint64, Qt::TimerType, QObject *) override {}
- bool unregisterTimer(int) override { return false; }
+ void registerTimer(Qt::TimerId, Duration, Qt::TimerType, QObject *) override {}
+ bool unregisterTimer(Qt::TimerId) override { return false; }
bool unregisterTimers(QObject *) override { return false; }
- QList<TimerInfo> registeredTimers(QObject *) const override { return QList<TimerInfo>(); }
- int remainingTime(int) override { return 0; }
+ QList<TimerInfoV2> timersForObject(QObject *) const override { return {}; }
+ Duration remainingTime(Qt::TimerId) const override { return 0s; }
void wakeUp() override {}
void interrupt() override {}
@@ -1348,9 +1356,6 @@ void tst_QThread::quitLock()
void tst_QThread::create()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
{
const auto &function = [](){};
QScopedPointer<QThread> thread(QThread::create(function));
@@ -1590,7 +1595,6 @@ void tst_QThread::create()
QVERIFY(!thread);
}
#endif // QT_NO_EXCEPTIONS
-#endif // QT_CONFIG(cxx11_future)
}
void tst_QThread::createDestruction()
@@ -1600,7 +1604,7 @@ void tst_QThread::createDestruction()
for (;;) {
if (QThread::currentThread()->isInterruptionRequested())
return;
- QThread::msleep(1);
+ QThread::sleep(1ms);
}
};
@@ -1719,7 +1723,7 @@ void tst_QThread::threadIdReuse()
bool threadIdReused = false;
for (int i = 0; i < 42; i++) {
- QThread::msleep(1);
+ QThread::sleep(1ms);
Qt::HANDLE threadId2;
bool waitOk = false;
@@ -1746,5 +1750,100 @@ void tst_QThread::threadIdReuse()
}
}
+class WaitToRun_Thread : public QThread
+{
+ Q_OBJECT
+public:
+ void run() override
+ {
+ emit running();
+ QThread::exec();
+ }
+
+Q_SIGNALS:
+ void running();
+};
+
+
+void tst_QThread::terminateAndPrematureDestruction()
+{
+#if defined(__SANITIZE_ADDRESS__) || __has_feature(address_sanitizer)
+ QSKIP("Thread termination might result in stack underflow address sanitizer errors.");
+#endif
+
+ WaitToRun_Thread thread;
+ QSignalSpy spy(&thread, &WaitToRun_Thread::running);
+ thread.start();
+ QVERIFY(spy.wait(500));
+
+ QScopedPointer<QObject> obj(new QObject);
+ QPointer<QObject> pObj(obj.data());
+ obj->deleteLater();
+
+ thread.terminate();
+ QVERIFY2(pObj, "object was deleted prematurely!");
+ thread.wait(500);
+}
+
+void tst_QThread::terminateAndDoubleDestruction()
+{
+#if defined(__SANITIZE_ADDRESS__) || __has_feature(address_sanitizer)
+ QSKIP("Thread termination might result in stack underflow address sanitizer errors.");
+#endif
+
+ class ChildObject : public QObject
+ {
+ public:
+ ChildObject(QObject *parent)
+ : QObject(parent)
+ {
+ QSignalSpy spy(&thread, &WaitToRun_Thread::running);
+ thread.start();
+ spy.wait(500);
+ }
+
+ ~ChildObject()
+ {
+ QVERIFY2(!inDestruction, "Double object destruction!");
+ inDestruction = true;
+ thread.terminate();
+ thread.wait(500);
+ }
+
+ bool inDestruction = false;
+ WaitToRun_Thread thread;
+ };
+
+ class TestObject : public QObject
+ {
+ public:
+ TestObject()
+ : child(new ChildObject(this))
+ {
+ }
+
+ ~TestObject()
+ {
+ child->deleteLater();
+ }
+
+ ChildObject *child = nullptr;
+ };
+
+ TestObject obj;
+}
+
+void tst_QThread::bindingListCleanupAfterDelete()
+{
+ QThread t;
+ auto optr = std::make_unique<QObject>();
+ optr->moveToThread(&t);
+ auto threadPriv = static_cast<QThreadPrivate *>(QObjectPrivate::get(&t));
+ auto list = threadPriv->m_statusOrPendingObjects.list();
+ QVERIFY(list);
+ optr.reset();
+ QVERIFY(list->empty());
+}
+
QTEST_MAIN(tst_QThread)
#include "tst_qthread.moc"
diff --git a/tests/auto/corelib/thread/qthreadonce/CMakeLists.txt b/tests/auto/corelib/thread/qthreadonce/CMakeLists.txt
index 18ec7723f2..2c92ca002e 100644
--- a/tests/auto/corelib/thread/qthreadonce/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qthreadonce/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qthreadonce.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qthreadonce Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qthreadonce LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qthreadonce
SOURCES
qthreadonce.cpp
diff --git a/tests/auto/corelib/thread/qthreadonce/qthreadonce.cpp b/tests/auto/corelib/thread/qthreadonce/qthreadonce.cpp
index 3826fa148e..b32f455241 100644
--- a/tests/auto/corelib/thread/qthreadonce/qthreadonce.cpp
+++ b/tests/auto/corelib/thread/qthreadonce/qthreadonce.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 "qplatformdefs.h"
diff --git a/tests/auto/corelib/thread/qthreadonce/qthreadonce.h b/tests/auto/corelib/thread/qthreadonce/qthreadonce.h
index e5918b8fa5..1f804433e4 100644
--- a/tests/auto/corelib/thread/qthreadonce/qthreadonce.h
+++ b/tests/auto/corelib/thread/qthreadonce/qthreadonce.h
@@ -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
#ifndef QTHREADONCE_H
diff --git a/tests/auto/corelib/thread/qthreadonce/tst_qthreadonce.cpp b/tests/auto/corelib/thread/qthreadonce/tst_qthreadonce.cpp
index 76b5d87283..37e1f744f3 100644
--- a/tests/auto/corelib/thread/qthreadonce/tst_qthreadonce.cpp
+++ b/tests/auto/corelib/thread/qthreadonce/tst_qthreadonce.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 <QTest>
diff --git a/tests/auto/corelib/thread/qthreadpool/BLACKLIST b/tests/auto/corelib/thread/qthreadpool/BLACKLIST
deleted file mode 100644
index b8c1f3bf3f..0000000000
--- a/tests/auto/corelib/thread/qthreadpool/BLACKLIST
+++ /dev/null
@@ -1,4 +0,0 @@
-[expiryTimeoutRace]
-opensuse-leap
-ubuntu
-rhel
diff --git a/tests/auto/corelib/thread/qthreadpool/CMakeLists.txt b/tests/auto/corelib/thread/qthreadpool/CMakeLists.txt
index ebf9fc104f..fee9c541db 100644
--- a/tests/auto/corelib/thread/qthreadpool/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qthreadpool/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qthreadpool.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qthreadpool Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qthreadpool LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qthreadpool
SOURCES
tst_qthreadpool.cpp
diff --git a/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp b/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp
index db030c4db4..2006016d47 100644
--- a/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp
+++ b/tests/auto/corelib/thread/qthreadpool/tst_qthreadpool.cpp
@@ -1,36 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSemaphore>
#include <qelapsedtimer.h>
+#include <qrunnable.h>
#include <qthreadpool.h>
#include <qstring.h>
#include <qmutex.h>
@@ -39,6 +15,8 @@
#include <unistd.h>
#endif
+using namespace std::chrono_literals;
+
typedef void (*FunctionPointer)();
class FunctionPointerTask : public QRunnable
@@ -68,6 +46,7 @@ public:
private slots:
void runFunction();
void runFunction2();
+ void runFunction3();
void createThreadRunFunction();
void runMultiple();
void waitcomplete();
@@ -108,6 +87,7 @@ private slots:
void takeAllAndIncreaseMaxThreadCount();
void waitForDoneAfterTake();
void threadReuse();
+ void nullFunctions();
private:
QMutex m_functionTestMutex;
@@ -161,10 +141,25 @@ void noSleepTestFunctionMutex()
tst_QThreadPool::functionTestMutex->unlock();
}
+constexpr int DefaultWaitForDoneTimeout = 1 * 60 * 1000; // 1min
+// Using qFatal instead of QVERIFY to force exit if threads are still running after timeout.
+// Otherwise, QCoreApplication will still wait for the stale threads and never exit the test.
+#define WAIT_FOR_DONE(manager) \
+ if ((manager).waitForDone(DefaultWaitForDoneTimeout)) {} else \
+ qFatal("waitForDone returned false. Aborting to stop background threads.")
+
+// uses explicit timeout in dtor's waitForDone() to avoid tests hanging overly long
+class TestThreadPool : public QThreadPool
+{
+public:
+ using QThreadPool::QThreadPool;
+ ~TestThreadPool() { WAIT_FOR_DONE(*this); }
+};
+
void tst_QThreadPool::runFunction()
{
{
- QThreadPool manager;
+ TestThreadPool manager;
testFunctionCount = 0;
manager.start(noSleepTestFunction);
}
@@ -175,16 +170,33 @@ void tst_QThreadPool::runFunction2()
{
int localCount = 0;
{
- QThreadPool manager;
+ TestThreadPool manager;
manager.start([&]() { ++localCount; });
}
QCOMPARE(localCount, 1);
}
+struct DeleteCheck
+{
+ static bool s_deleted;
+ ~DeleteCheck() { s_deleted = true; }
+};
+bool DeleteCheck::s_deleted = false;
+
+void tst_QThreadPool::runFunction3()
+{
+ std::unique_ptr<DeleteCheck> ptr(new DeleteCheck);
+ {
+ TestThreadPool manager;
+ manager.start([my_ptr = std::move(ptr)]() { });
+ }
+ QVERIFY(DeleteCheck::s_deleted);
+}
+
void tst_QThreadPool::createThreadRunFunction()
{
{
- QThreadPool manager;
+ TestThreadPool manager;
testFunctionCount = 0;
manager.start(noSleepTestFunction);
}
@@ -197,7 +209,7 @@ void tst_QThreadPool::runMultiple()
const int runs = 10;
{
- QThreadPool manager;
+ TestThreadPool manager;
testFunctionCount = 0;
for (int i = 0; i < runs; ++i) {
manager.start(sleepTestFunctionMutex);
@@ -206,7 +218,7 @@ void tst_QThreadPool::runMultiple()
QCOMPARE(testFunctionCount, runs);
{
- QThreadPool manager;
+ TestThreadPool manager;
testFunctionCount = 0;
for (int i = 0; i < runs; ++i) {
manager.start(noSleepTestFunctionMutex);
@@ -215,7 +227,7 @@ void tst_QThreadPool::runMultiple()
QCOMPARE(testFunctionCount, runs);
{
- QThreadPool manager;
+ TestThreadPool manager;
for (int i = 0; i < 500; ++i)
manager.start(emptyFunct);
}
@@ -226,6 +238,7 @@ void tst_QThreadPool::waitcomplete()
testFunctionCount = 0;
const int runs = 500;
for (int i = 0; i < 500; ++i) {
+ // TestThreadPool pool; // no, we're checking ~QThreadPool()'s waitForDone()
QThreadPool pool;
pool.start(noSleepTestFunction);
}
@@ -244,7 +257,7 @@ public:
void tst_QThreadPool::runTask()
{
- QThreadPool manager;
+ TestThreadPool manager;
ran.storeRelaxed(false);
manager.start(new TestTask());
QTRY_VERIFY(ran.loadRelaxed());
@@ -306,7 +319,7 @@ public:
*/
void tst_QThreadPool::threadRecycling()
{
- QThreadPool threadPool;
+ TestThreadPool threadPool;
threadPool.start(new ThreadRecorderTask());
threadRecyclingSemaphore.acquire();
@@ -334,7 +347,7 @@ void tst_QThreadPool::threadRecycling()
void tst_QThreadPool::threadPriority()
{
QThread::Priority priority = QThread::HighPriority;
- QThreadPool threadPool;
+ TestThreadPool threadPool;
threadPool.setThreadPriority(priority);
threadPool.start(new ThreadRecorderTask());
@@ -371,7 +384,7 @@ void tst_QThreadPool::expiryTimeout()
{
ExpiryTimeoutTask task;
- QThreadPool threadPool;
+ TestThreadPool threadPool;
threadPool.setMaxThreadCount(1);
int expiryTimeout = threadPool.expiryTimeout();
@@ -405,18 +418,15 @@ void tst_QThreadPool::expiryTimeout()
void tst_QThreadPool::expiryTimeoutRace() // QTBUG-3786
{
-#ifdef Q_OS_WIN
- QSKIP("This test is unstable on Windows. See QTBUG-3786.");
-#endif
ExpiryTimeoutTask task;
- QThreadPool threadPool;
+ TestThreadPool threadPool;
threadPool.setMaxThreadCount(1);
threadPool.setExpiryTimeout(50);
const int numTasks = 20;
for (int i = 0; i < numTasks; ++i) {
threadPool.start(&task);
- QThread::msleep(50); // exactly the same as the expiry timeout
+ QThread::sleep(50ms); // exactly the same as the expiry timeout
}
QVERIFY(task.semaphore.tryAcquire(numTasks, 10000));
QCOMPARE(task.runCount.loadRelaxed(), numTasks);
@@ -437,7 +447,7 @@ void tst_QThreadPool::exceptions()
{
ExceptionTask task;
{
- QThreadPool threadPool;
+ TestThreadPool threadPool;
// Uncomment this for a nice crash.
// threadPool.start(&task);
}
@@ -481,7 +491,7 @@ void tst_QThreadPool::setMaxThreadCount()
// setting the limit on children should have no effect on the parent
{
- QThreadPool threadPool2(threadPool);
+ TestThreadPool threadPool2(threadPool);
savedLimit = threadPool2.maxThreadCount();
// maxThreadCount() should always return the previous argument to
@@ -511,7 +521,7 @@ void tst_QThreadPool::setMaxThreadCountStartsAndStopsThreads()
}
};
- QThreadPool threadPool;
+ TestThreadPool threadPool;
threadPool.setMaxThreadCount(-1); // docs say we'll always start at least one
WaitingTask task;
@@ -599,7 +609,7 @@ void tst_QThreadPool::reserveThread()
// reserving threads in children should not effect the parent
{
- QThreadPool threadpool2(threadpool);
+ TestThreadPool threadpool2(threadpool);
threadpool2.setMaxThreadCount(limit);
// reserve up to the limit
@@ -663,7 +673,7 @@ void tst_QThreadPool::releaseThread()
// releasing threads in children should not effect the parent
{
- QThreadPool threadpool2(threadpool);
+ TestThreadPool threadpool2(threadpool);
threadpool2.setMaxThreadCount(limit);
// reserve up to the limit
@@ -864,7 +874,7 @@ void tst_QThreadPool::start()
const int runs = 1000;
count.storeRelaxed(0);
{
- QThreadPool threadPool;
+ TestThreadPool threadPool;
for (int i = 0; i< runs; ++i) {
threadPool.start(new CountingRunnable());
}
@@ -891,13 +901,13 @@ void tst_QThreadPool::tryStart()
count.storeRelaxed(0);
WaitingTask task;
- QThreadPool threadPool;
+ TestThreadPool threadPool;
for (int i = 0; i < threadPool.maxThreadCount(); ++i) {
threadPool.start(&task);
}
QVERIFY(!threadPool.tryStart(&task));
task.semaphore.release(threadPool.maxThreadCount());
- threadPool.waitForDone();
+ WAIT_FOR_DONE(threadPool);
QCOMPARE(count.loadRelaxed(), threadPool.maxThreadCount());
}
@@ -928,7 +938,7 @@ void tst_QThreadPool::tryStartPeakThreadCount()
};
CounterTask task;
- QThreadPool threadPool;
+ TestThreadPool threadPool;
for (int i = 0; i < 4*QThread::idealThreadCount(); ++i) {
if (threadPool.tryStart(&task) == false)
@@ -957,7 +967,7 @@ void tst_QThreadPool::tryStartCount()
};
SleeperTask task;
- QThreadPool threadPool;
+ TestThreadPool threadPool;
const int runs = 5;
for (int i = 0; i < runs; ++i) {
@@ -1005,7 +1015,7 @@ void tst_QThreadPool::priorityStart()
QSemaphore sem;
QAtomicPointer<QRunnable> firstStarted;
QRunnable *expected;
- QThreadPool threadPool;
+ TestThreadPool threadPool;
threadPool.setMaxThreadCount(1); // start only one thread at a time
// queue the holder first
@@ -1017,7 +1027,7 @@ void tst_QThreadPool::priorityStart()
threadPool.start(expected = new Runner(firstStarted), 1); // priority 1
sem.release();
- QVERIFY(threadPool.waitForDone());
+ WAIT_FOR_DONE(threadPool);
QCOMPARE(firstStarted.loadRelaxed(), expected);
}
@@ -1027,7 +1037,7 @@ void tst_QThreadPool::waitForDone()
total.start();
pass.start();
- QThreadPool threadPool;
+ TestThreadPool threadPool;
while (total.elapsed() < 10000) {
int runs;
count.storeRelaxed(runs = 0);
@@ -1036,7 +1046,7 @@ void tst_QThreadPool::waitForDone()
threadPool.start(new CountingRunnable());
++runs;
}
- threadPool.waitForDone();
+ WAIT_FOR_DONE(threadPool);
QCOMPARE(count.loadRelaxed(), runs);
count.storeRelaxed(runs = 0);
@@ -1046,7 +1056,7 @@ void tst_QThreadPool::waitForDone()
threadPool.start(new CountingRunnable());
runs += 2;
}
- threadPool.waitForDone();
+ WAIT_FOR_DONE(threadPool);
QCOMPARE(count.loadRelaxed(), runs);
}
}
@@ -1068,7 +1078,7 @@ void tst_QThreadPool::waitForDoneTimeout()
}
};
- QThreadPool threadPool;
+ TestThreadPool threadPool;
mutex.lock();
threadPool.start(new BlockedTask(mutex));
@@ -1092,7 +1102,7 @@ void tst_QThreadPool::clear()
}
};
- QThreadPool threadPool;
+ TestThreadPool threadPool;
threadPool.setMaxThreadCount(10);
int runs = 2 * threadPool.maxThreadCount();
count.storeRelaxed(0);
@@ -1101,7 +1111,7 @@ void tst_QThreadPool::clear()
}
threadPool.clear();
sem.release(threadPool.maxThreadCount());
- threadPool.waitForDone();
+ WAIT_FOR_DONE(threadPool);
QCOMPARE(count.loadRelaxed(), threadPool.maxThreadCount());
}
@@ -1111,10 +1121,10 @@ void tst_QThreadPool::clearWithAutoDelete()
{
public:
MyRunnable() {}
- void run() override { QThread::usleep(30); }
+ void run() override { QThread::sleep(30us); }
};
- QThreadPool threadPool;
+ TestThreadPool threadPool;
threadPool.setMaxThreadCount(4);
const int loopCount = 20;
const int batchSize = 500;
@@ -1127,7 +1137,6 @@ void tst_QThreadPool::clearWithAutoDelete()
threadPool.start(runnable);
}
}
- QVERIFY(threadPool.waitForDone());
}
void tst_QThreadPool::tryTake()
@@ -1167,7 +1176,7 @@ void tst_QThreadPool::tryTake()
Runs = MaxThreadCount * OverProvisioning
};
- QThreadPool threadPool;
+ TestThreadPool threadPool;
threadPool.setMaxThreadCount(MaxThreadCount);
BlockingRunnable *runnables[Runs];
@@ -1199,7 +1208,7 @@ void tst_QThreadPool::tryTake()
runnables[0]->dummy = 0; // valgrind will catch this if tryTake() is crazy enough to delete currently running jobs
QCOMPARE(dtorCounter.loadRelaxed(), int(Runs - MaxThreadCount));
sem.release(MaxThreadCount);
- threadPool.waitForDone();
+ WAIT_FOR_DONE(threadPool);
QCOMPARE(runCounter.loadRelaxed(), int(MaxThreadCount));
QCOMPARE(count.loadRelaxed(), int(MaxThreadCount));
QCOMPARE(dtorCounter.loadRelaxed(), int(Runs - 1));
@@ -1216,7 +1225,7 @@ void tst_QThreadPool::destroyingWaitsForTasksToFinish()
int runs;
count.storeRelaxed(runs = 0);
{
- QThreadPool threadPool;
+ TestThreadPool threadPool;
pass.restart();
while (pass.elapsed() < 100) {
threadPool.start(new CountingRunnable());
@@ -1227,7 +1236,7 @@ void tst_QThreadPool::destroyingWaitsForTasksToFinish()
count.storeRelaxed(runs = 0);
{
- QThreadPool threadPool;
+ TestThreadPool threadPool;
pass.restart();
while (pass.elapsed() < 100) {
threadPool.start(new CountingRunnable());
@@ -1269,10 +1278,10 @@ void tst_QThreadPool::stackSize()
}
};
- QThreadPool threadPool;
+ TestThreadPool threadPool;
threadPool.setStackSize(targetStackSize);
threadPool.start(new StackSizeChecker(&threadStackSize));
- QVERIFY(threadPool.waitForDone(30000)); // 30s timeout
+ WAIT_FOR_DONE(threadPool);
QCOMPARE(threadStackSize, targetStackSize);
}
@@ -1333,7 +1342,7 @@ void tst_QThreadPool::takeAllAndIncreaseMaxThreadCount() {
QSemaphore mainBarrier;
QSemaphore taskBarrier;
- QThreadPool threadPool;
+ TestThreadPool threadPool;
threadPool.setMaxThreadCount(1);
Task task1(&mainBarrier, &taskBarrier);
@@ -1364,7 +1373,7 @@ void tst_QThreadPool::takeAllAndIncreaseMaxThreadCount() {
taskBarrier.release(1);
- threadPool.waitForDone();
+ WAIT_FOR_DONE(threadPool);
QCOMPARE(threadPool.activeThreadCount(), 0);
}
@@ -1397,7 +1406,7 @@ void tst_QThreadPool::waitForDoneAfterTake()
// Blocks the tasks from completing their run function
QSemaphore threadBarrier;
- QThreadPool manager;
+ TestThreadPool manager;
manager.setMaxThreadCount(threadCount);
// Fill all the threads with runnables that wait for the threadBarrier
@@ -1428,12 +1437,6 @@ void tst_QThreadPool::waitForDoneAfterTake()
// Release runnables that are waiting and expect all runnables to complete
threadBarrier.release(threadCount);
-
- // Using qFatal instead of QVERIFY to force exit if threads are still running after timeout.
- // Otherwise, QCoreApplication will still wait for the stale threads and never exit the test.
- if (!manager.waitForDone(5 * 60 * 1000))
- qFatal("waitForDone returned false. Aborting to stop background threads.");
-
}
/*
@@ -1443,7 +1446,7 @@ void tst_QThreadPool::waitForDoneAfterTake()
*/
void tst_QThreadPool::threadReuse()
{
- QThreadPool manager;
+ TestThreadPool manager;
manager.setExpiryTimeout(-1);
manager.setMaxThreadCount(1);
@@ -1460,5 +1463,30 @@ void tst_QThreadPool::threadReuse()
}
}
+void tst_QThreadPool::nullFunctions()
+{
+ const auto expectWarning = [] {
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg,
+ "Trying to create null QRunnable. This may stop working.");
+ };
+ // Note this is not necessarily testing intended behavior, only undocumented behavior.
+ // If this is changed it should be noted in Behavioral Changes.
+ FunctionPointer nullFunction = nullptr;
+ std::function<void()> nullStdFunction(nullptr);
+ {
+ TestThreadPool manager;
+ // should not crash:
+ expectWarning();
+ manager.start(nullFunction);
+ expectWarning();
+ manager.start(nullStdFunction);
+ // should fail (and not leak):
+ expectWarning();
+ QVERIFY(!manager.tryStart(nullStdFunction));
+ expectWarning();
+ QVERIFY(!manager.tryStart(nullFunction));
+ }
+}
+
QTEST_MAIN(tst_QThreadPool);
#include "tst_qthreadpool.moc"
diff --git a/tests/auto/corelib/thread/qthreadstorage/BLACKLIST b/tests/auto/corelib/thread/qthreadstorage/BLACKLIST
deleted file mode 100644
index 84906ff86e..0000000000
--- a/tests/auto/corelib/thread/qthreadstorage/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-# QTBUG-87431
-[crashOnExit]
-android
diff --git a/tests/auto/corelib/thread/qthreadstorage/CMakeLists.txt b/tests/auto/corelib/thread/qthreadstorage/CMakeLists.txt
index 26a691e8ca..14d8d7dd40 100644
--- a/tests/auto/corelib/thread/qthreadstorage/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qthreadstorage/CMakeLists.txt
@@ -1,7 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qthreadstorage Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qthreadstorage LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qthreadstorage
SOURCES
tst_qthreadstorage.cpp
diff --git a/tests/auto/corelib/thread/qthreadstorage/crashonexit/CMakeLists.txt b/tests/auto/corelib/thread/qthreadstorage/crashonexit/CMakeLists.txt
index c76dbda738..4d62e61a36 100644
--- a/tests/auto/corelib/thread/qthreadstorage/crashonexit/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qthreadstorage/crashonexit/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## crashonexit Binary:
#####################################################################
diff --git a/tests/auto/corelib/thread/qthreadstorage/crashonexit/crashOnExit.cpp b/tests/auto/corelib/thread/qthreadstorage/crashonexit/crashOnExit.cpp
index 5a42156b85..3b3a4d4813 100644
--- a/tests/auto/corelib/thread/qthreadstorage/crashonexit/crashOnExit.cpp
+++ b/tests/auto/corelib/thread/qthreadstorage/crashonexit/crashOnExit.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 <QtCore/QCoreApplication>
#include <QtCore/QThreadStorage>
diff --git a/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp b/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp
index 5e079880bd..ca382cf60c 100644
--- a/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.cpp
+++ b/tests/auto/corelib/thread/qthreadstorage/tst_qthreadstorage.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 <QTest>
#if QT_CONFIG(process)
@@ -297,11 +272,14 @@ static inline bool runCrashOnExit(const QString &binary, QString *errorMessage)
void tst_QThreadStorage::crashOnExit()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Can't start QProcess to run a custom user binary on Android");
+#endif
#if !QT_CONFIG(process)
QSKIP("No qprocess support", SkipAll);
#else
QString errorMessage;
- QVERIFY2(runCrashOnExit("crashOnExit_helper", &errorMessage),
+ QVERIFY2(runCrashOnExit("./crashOnExit_helper", &errorMessage),
qPrintable(errorMessage));
#endif
}
diff --git a/tests/auto/corelib/thread/qwaitcondition/CMakeLists.txt b/tests/auto/corelib/thread/qwaitcondition/CMakeLists.txt
index e600ff3a42..0a2830622e 100644
--- a/tests/auto/corelib/thread/qwaitcondition/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qwaitcondition/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qwaitcondition.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qwaitcondition Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwaitcondition LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qwaitcondition
SOURCES
tst_qwaitcondition.cpp
diff --git a/tests/auto/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp b/tests/auto/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp
index 56ca0bc53d..4e3413afe8 100644
--- a/tests/auto/corelib/thread/qwaitcondition/tst_qwaitcondition.cpp
+++ b/tests/auto/corelib/thread/qwaitcondition/tst_qwaitcondition.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 <QTest>
#include <QReadWriteLock>
@@ -397,7 +372,7 @@ public:
{ }
static inline void sleep(ulong s)
- { QThread::sleep(s); }
+ { QThread::sleep(std::chrono::seconds{s}); }
void run() override
{
@@ -429,7 +404,7 @@ public:
{ }
static inline void sleep(ulong s)
- { QThread::sleep(s); }
+ { QThread::sleep(std::chrono::seconds{s}); }
void run() override
{
diff --git a/tests/auto/corelib/thread/qwritelocker/CMakeLists.txt b/tests/auto/corelib/thread/qwritelocker/CMakeLists.txt
index 200fa2ee3c..5345522ea5 100644
--- a/tests/auto/corelib/thread/qwritelocker/CMakeLists.txt
+++ b/tests/auto/corelib/thread/qwritelocker/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qwritelocker.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qwritelocker Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwritelocker LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qwritelocker
SOURCES
tst_qwritelocker.cpp
diff --git a/tests/auto/corelib/thread/qwritelocker/tst_qwritelocker.cpp b/tests/auto/corelib/thread/qwritelocker/tst_qwritelocker.cpp
index 2828b529a8..b4e6b45dbd 100644
--- a/tests/auto/corelib/thread/qwritelocker/tst_qwritelocker.cpp
+++ b/tests/auto/corelib/thread/qwritelocker/tst_qwritelocker.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 <QTest>
diff --git a/tests/auto/corelib/time/CMakeLists.txt b/tests/auto/corelib/time/CMakeLists.txt
index e861a1ac71..f2dfbfa527 100644
--- a/tests/auto/corelib/time/CMakeLists.txt
+++ b/tests/auto/corelib/time/CMakeLists.txt
@@ -1,10 +1,9 @@
-# Generated from time.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qcalendar)
add_subdirectory(qdate)
add_subdirectory(qdatetime)
add_subdirectory(qdatetimeparser)
add_subdirectory(qtime)
-if(QT_FEATURE_timezone)
- add_subdirectory(qtimezone)
-endif()
+add_subdirectory(qtimezone)
diff --git a/tests/auto/corelib/time/qcalendar/CMakeLists.txt b/tests/auto/corelib/time/qcalendar/CMakeLists.txt
index 685039523d..5b1b2dfc2a 100644
--- a/tests/auto/corelib/time/qcalendar/CMakeLists.txt
+++ b/tests/auto/corelib/time/qcalendar/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qcalendar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcalendar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcalendar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcalendar
SOURCES
tst_qcalendar.cpp
diff --git a/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp b/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp
index 0bb41fd730..61999202d2 100644
--- a/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp
+++ b/tests/auto/corelib/time/qcalendar/tst_qcalendar.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
@@ -56,6 +31,49 @@ private slots:
void gregory();
};
+static void checkCenturyResolution(const QCalendar &cal, const QCalendar::YearMonthDay &base)
+{
+ quint8 weekDayMask = 0;
+ for (int offset = -7; offset < 8; ++offset) {
+ const auto probe = QDate(base.year, base.month, base.day, cal).addYears(100 * offset, cal);
+ const int dow = cal.dayOfWeek(probe);
+ if (probe.isValid() && dow > 0 && dow < 8)
+ weekDayMask |= 1 << quint8(dow - 1);
+ }
+ for (int j = 1; j < 8; ++j) {
+ const bool seen = weekDayMask & (1 << quint8(j - 1));
+ const QDate check = cal.matchCenturyToWeekday(base, j);
+ if (check.isValid()) {
+ const auto parts = cal.partsFromDate(check);
+ const int dow = cal.dayOfWeek(check);
+ QCOMPARE(dow, j);
+ QCOMPARE(parts.day, base.day);
+ QCOMPARE(parts.month, base.month);
+ int gap = parts.year - base.year;
+ if (!cal.hasYearZero() && (parts.year > 0) != (base.year > 0))
+ gap += parts.year > 0 ? -1 : +1;
+ auto report = qScopeGuard([parts, base]() {
+ qDebug("Wrongly matched year: %d replaced %d", parts.year, base.year);
+ });
+ QCOMPARE(gap % 100, 0);
+ // We searched 7 centuries each side of base.
+ if (seen) {
+ QCOMPARE_LT(gap / 100, 8);
+ QCOMPARE_GT(gap / 100, -8);
+ } else {
+ QVERIFY(gap / 100 >= 8 || gap / 100 <= -8);
+ }
+ report.dismiss();
+ } else {
+ auto report = qScopeGuard([j, base]() {
+ qDebug("Missed dow[%d] for %d/%d/%d", j, base.year, base.month, base.day);
+ });
+ QVERIFY(!seen);
+ report.dismiss();
+ }
+ }
+}
+
// Support for basic():
void tst_QCalendar::checkYear(const QCalendar &cal, int year, bool normal)
{
@@ -74,7 +92,7 @@ void tst_QCalendar::checkYear(const QCalendar &cal, int year, bool normal)
int sum = 0;
const int longest = cal.maximumDaysInMonth();
- for (int i = moons; i > 0; i--) {
+ for (int i = moons; i > 0; --i) {
const int last = cal.daysInMonth(i, year);
sum += last;
// Valid month has some days and no more than max:
@@ -87,6 +105,10 @@ void tst_QCalendar::checkYear(const QCalendar &cal, int year, bool normal)
QVERIFY(!cal.isDateValid(year, i, last + 1));
if (normal) // Unspecified year gets same daysInMonth():
QCOMPARE(cal.daysInMonth(i), last);
+
+ checkCenturyResolution(cal, {year, i, (last + 1) / 2});
+ if (QTest::currentTestFailed())
+ return;
}
// Months add up to the whole year:
QCOMPARE(sum, days);
@@ -393,13 +415,12 @@ void tst_QCalendar::gregory()
// dateToJulianDay() and weekDayOfJulian():
if (!year) // No year zero.
continue;
- qint64 first, last;
- QVERIFY2(QGregorianCalendar::julianFromParts(year, 1, 1, &first),
- "Only year zero should lack a first day");
+ const auto first = QGregorianCalendar::julianFromParts(year, 1, 1);
+ QVERIFY2(first, "Only year zero should lack a first day");
QCOMPARE(QGregorianCalendar::yearStartWeekDay(year),
- QGregorianCalendar::weekDayOfJulian(first));
- QVERIFY2(QGregorianCalendar::julianFromParts(year, 12, 31, &last),
- "Only year zero should lack a last day");
+ QGregorianCalendar::weekDayOfJulian(*first));
+ const auto last = QGregorianCalendar::julianFromParts(year, 12, 31);
+ QVERIFY2(last, "Only year zero should lack a last day");
const int lastTwo = (year + (year < 0 ? 1 : 0)) % 100 + (year < -1 ? 100 : 0);
const QDate probe(year, lastTwo && lastTwo <= 12 ? lastTwo : 8,
@@ -417,13 +438,14 @@ void tst_QCalendar::gregory()
if (year > 0 && lastTwo > 31)
QCOMPARE(match % 100, lastTwo);
// Its first and last days of the year match those of year:
- qint64 day;
- QVERIFY(QGregorianCalendar::julianFromParts(match, 1, 1, &day));
- QCOMPARE(QGregorianCalendar::weekDayOfJulian(day),
- QGregorianCalendar::weekDayOfJulian(first));
- QVERIFY(QGregorianCalendar::julianFromParts(match, 12, 31, &day));
- QCOMPARE(QGregorianCalendar::weekDayOfJulian(day),
- QGregorianCalendar::weekDayOfJulian(last));
+ auto day = QGregorianCalendar::julianFromParts(match, 1, 1);
+ QVERIFY(day);
+ QCOMPARE(QGregorianCalendar::weekDayOfJulian(*day),
+ QGregorianCalendar::weekDayOfJulian(*first));
+ day = QGregorianCalendar::julianFromParts(match, 12, 31);
+ QVERIFY(day);
+ QCOMPARE(QGregorianCalendar::weekDayOfJulian(*day),
+ QGregorianCalendar::weekDayOfJulian(*last));
}
}
}
diff --git a/tests/auto/corelib/time/qdate/CMakeLists.txt b/tests/auto/corelib/time/qdate/CMakeLists.txt
index 647be9a6f8..4d0f04a967 100644
--- a/tests/auto/corelib/time/qdate/CMakeLists.txt
+++ b/tests/auto/corelib/time/qdate/CMakeLists.txt
@@ -1,15 +1,23 @@
-# Generated from qdate.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdate Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdate LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdate
SOURCES
tst_qdate.cpp
DEFINES
QT_NO_FOREACH
QT_NO_KEYWORDS
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/time/qdate/tst_qdate.cpp b/tests/auto/corelib/time/qdate/tst_qdate.cpp
index 911ad90a7a..cacdad307f 100644
--- a/tests/auto/corelib/time/qdate/tst_qdate.cpp
+++ b/tests/auto/corelib/time/qdate/tst_qdate.cpp
@@ -1,37 +1,27 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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) 2022 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
-#include <private/qglobal_p.h> // for the icu feature test
+#include <QDateTime>
#include <QTest>
+
+#include <QLocale>
+#include <QMap>
#include <QTimeZone>
-#include <qdatetime.h>
-#include <qlocale.h>
+
+#include <private/qglobal_p.h> // for the icu feature test
+#include <private/qcomparisontesthelper_p.h>
+#include <private/qdatetime_p.h>
+#if !QT_CONFIG(timezone)
+# include <private/qtenvironmentvariables_p.h> // for qTzName()
+#endif
+
+using namespace QtPrivate::DateTimeConstants;
+using namespace Qt::StringLiterals;
+
+#if defined(Q_OS_WIN) && !QT_CONFIG(icu)
+# define USING_WIN_TZ
+#endif
class tst_QDate : public QObject
{
@@ -56,10 +46,8 @@ private Q_SLOTS:
void weekNumber_invalid();
void weekNumber_data();
void weekNumber();
-#if QT_CONFIG(timezone)
void startOfDay_endOfDay_data();
void startOfDay_endOfDay();
-#endif
void startOfDay_endOfDay_fixed_data();
void startOfDay_endOfDay_fixed();
void startOfDay_endOfDay_bounds();
@@ -71,12 +59,12 @@ private Q_SLOTS:
void addYears_data();
void addYears();
void daysTo();
+ void orderingCompiles();
void operator_eq_eq_data();
void operator_eq_eq();
- void operator_lt();
- void operator_gt();
- void operator_lt_eq();
- void operator_gt_eq();
+ void ordering_data();
+ void ordering();
+ void ordering_chrono_types();
void operator_insert_extract_data();
void operator_insert_extract();
#if QT_CONFIG(datestring)
@@ -102,6 +90,15 @@ private Q_SLOTS:
void qdebug() const;
private:
QDate defDate() const { return QDate(1900, 1, 1); }
+
+ QDate epochDate() const {
+ using namespace QtPrivate::DateTimeConstants;
+ Q_ASSERT(JULIAN_DAY_FOR_EPOCH == QDate(1970, 1, 1).toJulianDay());
+ return QDate::fromJulianDay(JULIAN_DAY_FOR_EPOCH);
+ }
+
+ static constexpr qint64 minJd = JulianDayMin;
+ static constexpr qint64 maxJd = JulianDayMax;
QDate invalidDate() const { return QDate(); }
};
@@ -112,9 +109,6 @@ void tst_QDate::isNull_data()
QTest::addColumn<qint64>("jd");
QTest::addColumn<bool>("null");
- qint64 minJd = Q_INT64_C(-784350574879);
- qint64 maxJd = Q_INT64_C( 784354017364);
-
QTest::newRow("qint64 min") << std::numeric_limits<qint64>::min() << true;
QTest::newRow("minJd - 1") << minJd - 1 << true;
QTest::newRow("minJd") << minJd << false;
@@ -198,6 +192,32 @@ void tst_QDate::isValid_data()
QTest::newRow("jd latest formula") << 1400000 << 12 << 31 << qint64(513060925) << true;
}
+#if __cpp_lib_chrono >= 201907L
+// QDate has a bigger range than year_month_date. The tests use this bigger
+// range. However building a year_month_time with "out of range" data has
+// unspecified results, so don't do that. See [time.cal.year],
+// [time.cal.month], [time.cal.day]. Also, std::chrono::year has a year 0, so
+// take that into account.
+static std::optional<std::chrono::year_month_day> convertToStdYearMonthDay(int y, int m, int d)
+{
+ using namespace std::chrono;
+
+ if (y >= int((year::min)())
+ && y <= int((year::max)())
+ && m >= 0
+ && m <= 255
+ && d >= 0
+ && d <= 255)
+ {
+ if (y < 0)
+ ++y;
+ return std::make_optional(year(y) / m / d);
+ }
+
+ return std::nullopt;
+}
+#endif
+
void tst_QDate::isValid()
{
QFETCH(int, year);
@@ -217,6 +237,19 @@ void tst_QDate::isValid()
QCOMPARE(d.year(), year);
QCOMPARE(d.month(), month);
QCOMPARE(d.day(), day);
+#if __cpp_lib_chrono >= 201907L
+ std::optional<std::chrono::year_month_day> ymd = convertToStdYearMonthDay(year, month, day);
+ if (ymd) {
+ QDate d = *ymd;
+ QCOMPARE(d.year(), year);
+ QCOMPARE(d.month(), month);
+ QCOMPARE(d.day(), day);
+
+ const std::chrono::sys_days qdateSysDays = d.toStdSysDays();
+ const std::chrono::sys_days ymdSysDays = *ymd;
+ QCOMPARE(qdateSysDays, ymdSysDays);
+ }
+#endif
} else {
QCOMPARE(d.year(), 0);
QCOMPARE(d.month(), 0);
@@ -463,123 +496,178 @@ void tst_QDate::weekNumber_invalid()
QCOMPARE( dt.weekNumber( &yearNumber ), 0 );
}
-#if QT_CONFIG(timezone)
+/* The MS backend tends to lack data for historical transitions. So some of the
+ transition-based tests will get wrong results, that we can't do anything
+ about, when using that backend. Rather than complicating the #if-ery more,
+ overtly record, in a flags column, which we need to ignore and merely make
+ the testing of these flags subject to #if-ery.
+
+ Android appears to lack at least one other.
+*/
+enum BackendKludge { IgnoreStart = 1, IgnoreEnd = 2, };
+Q_DECLARE_FLAGS(BackendKludges, BackendKludge)
+Q_DECLARE_OPERATORS_FOR_FLAGS(BackendKludges)
+
void tst_QDate::startOfDay_endOfDay_data()
{
QTest::addColumn<QDate>("date"); // Typically a spring-forward.
// A zone in which that date's start and end are worth checking:
- QTest::addColumn<QByteArray>("zoneName");
+ QTest::addColumn<QTimeZone>("zone");
// The start and end times in that zone:
QTest::addColumn<QTime>("start");
QTest::addColumn<QTime>("end");
+ // Ignored for backends that don't need it:
+ QTest::addColumn<BackendKludges>("kludge");
+
+ const QTime early(0, 0), late(23, 59, 59, 999), invalid(QDateTime().time());
+ constexpr BackendKludges Clean = {};
+ constexpr BackendKludges IgnoreBoth = IgnoreStart | IgnoreEnd;
+#ifdef USING_WIN_TZ
+ constexpr BackendKludges MsNoStart = IgnoreStart;
+ constexpr BackendKludges MsNoBoth = IgnoreBoth;
+#else
+ constexpr BackendKludges MsNoStart = Clean;
+ constexpr BackendKludges MsNoBoth = Clean;
+ // And use IgnoreBoth directly for the one transition Android lacks.
+#endif
+ const QTimeZone UTC(QTimeZone::UTC);
- const QTime initial(0, 0), final(23, 59, 59, 999), invalid(QDateTime().time());
+ using Bound = std::numeric_limits<qint64>;
+ const auto dateAtMillis = [UTC](qint64 millis) {
+ return QDateTime::fromMSecsSinceEpoch(millis, UTC).date();
+ };
- // UTC is always a valid zone.
- QTest::newRow("epoch")
- << QDate(1970, 1, 1) << QByteArray("UTC")
- << initial << final;
- if (QTimeZone("America/Sao_Paulo").isValid()) {
- QTest::newRow("Brazil")
- << QDate(2008, 10, 19) << QByteArray("America/Sao_Paulo")
- << QTime(1, 0) << final;
- }
-#if QT_CONFIG(icu) || !defined(Q_OS_WIN) // MS's TZ APIs lack data
- if (QTimeZone("Europe/Sofia").isValid()) {
- QTest::newRow("Sofia")
- << QDate(1994, 3, 27) << QByteArray("Europe/Sofia")
- << QTime(1, 0) << final;
- }
-#endif
- if (QTimeZone("Pacific/Kiritimati").isValid()) {
- QTest::newRow("Kiritimati")
- << QDate(1994, 12, 31) << QByteArray("Pacific/Kiritimati")
- << invalid << invalid;
+ // UTC and fixed offset are always available and predictable:
+ QTest::newRow("epoch") << epochDate() << UTC << early << late << Clean;
+
+ // First and last days in QDateTime's supported range:
+ QTest::newRow("earliest")
+ << dateAtMillis(Bound::min()) << UTC << invalid << late << Clean;
+ QTest::newRow("latest")
+ << dateAtMillis(Bound::max()) << UTC << early << invalid << Clean;
+
+ const struct {
+ const char *test;
+ const char *zone;
+ const QDate day;
+ const QTime start;
+ const QTime end;
+ const BackendKludges msOpt;
+ } transitions[] = {
+ // The western Mexico time-zones skipped the first hour of 1970.
+ { "BajaMexico", "America/Hermosillo", QDate(1970, 1, 1), QTime(1, 0), late, MsNoStart },
+
+ // Compare tst_QDateTime::fromStringDateFormat(ISO 24:00 in DST).
+ { "Brazil", "America/Sao_Paulo", QDate(2008, 10, 19), QTime(1, 0), late, Clean },
+
+ // Several southern zones within EET (but not the northern ones) spent
+ // part of the 1990s using midnight as spring transition.
+ { "Sofia", "Europe/Sofia", QDate(1994, 3, 27), QTime(1, 0), late, MsNoStart },
+
+ // Two Pacific zones skipped days to get on the west of the
+ // International Date Line; those days have neither start nor end.
+ { "Kiritimati", "Pacific/Kiritimati", QDate(1994, 12, 31), invalid, invalid, IgnoreBoth },
+ { "Samoa", "Pacific/Apia", QDate(2011, 12, 30), invalid, invalid, MsNoBoth },
+
+ // TODO: find other zones with transitions at/crossing midnight.
+ };
+ const QTimeZone local = QTimeZone::LocalTime;
+
+#if QT_CONFIG(timezone)
+ const QTimeZone sys = QTimeZone::systemTimeZone();
+ QVERIFY2(sys.isValid(), "Test depends on properly configured system");
+ for (const auto &tran : transitions) {
+ if (QTimeZone zone(tran.zone); zone.isValid()) {
+ QTest::newRow(tran.test)
+ << tran.day << zone << tran.start << tran.end << tran.msOpt;
+ if (zone == sys) {
+ QTest::addRow("Local=%s", tran.test)
+ << tran.day << local << tran.start << tran.end << tran.msOpt;
+ }
+ }
}
- if (QTimeZone("Pacific/Apia").isValid()) {
- QTest::newRow("Samoa")
- << QDate(2011, 12, 30) << QByteArray("Pacific/Apia")
- << invalid << invalid;
+#else
+ const auto isLocalZone = [](const char *zone) {
+ const QLatin1StringView name(zone);
+ for (int i = 0; i < 2; ++i) {
+ if (qTzName(i) == name)
+ return true;
+ }
+ return false;
+ };
+ for (const auto &tran : transitions) {
+ if (isLocalZone(tran.zone)) { // Might need a different name to match
+ QTest::addRow("Local=%s", tran.test)
+ << tran.day << local << tran.start << tran.end << tran.msOpt;
+ }
}
- // TODO: find other zones with transitions at/crossing midnight.
+#endif // timezone
}
void tst_QDate::startOfDay_endOfDay()
{
- QFETCH(QDate, date);
- QFETCH(QByteArray, zoneName);
- QFETCH(QTime, start);
- QFETCH(QTime, end);
- const QTimeZone zone(zoneName);
+ QFETCH(const QDate, date);
+ QFETCH(const QTimeZone, zone);
+ QFETCH(const QTime, start);
+ QFETCH(const QTime, end);
+#if defined(USING_WIN_TZ) || defined(Q_OS_ANDROID) // Coping with backend limitations.
+ QFETCH(const BackendKludges, kludge);
+#define UNLESSKLUDGE(flag) if (!kludge.testFlag(flag))
+#else
+#define UNLESSKLUDGE(flag)
+#endif
QVERIFY(zone.isValid());
- const bool isSystem = QTimeZone::systemTimeZone() == zone;
+
QDateTime front(date.startOfDay(zone)), back(date.endOfDay(zone));
if (end.isValid())
QCOMPARE(date.addDays(1).startOfDay(zone).addMSecs(-1), back);
if (start.isValid())
QCOMPARE(date.addDays(-1).endOfDay(zone).addMSecs(1), front);
- do { // Avoids duplicating these tests for local-time when it *is* zone:
- if (start.isValid()) {
- QCOMPARE(front.date(), date);
- QCOMPARE(front.time(), start);
- }
- if (end.isValid()) {
- QCOMPARE(back.date(), date);
- QCOMPARE(back.time(), end);
- }
- if (front.timeSpec() == Qt::LocalTime)
- break;
- front = date.startOfDay(Qt::LocalTime);
- back = date.endOfDay(Qt::LocalTime);
- } while (isSystem);
- if (end.isValid())
- QCOMPARE(date.addDays(1).startOfDay(Qt::LocalTime).addMSecs(-1), back);
- if (start.isValid())
- QCOMPARE(date.addDays(-1).endOfDay(Qt::LocalTime).addMSecs(1), front);
- if (!isSystem) {
- // These might fail if system zone coincides with zone; but only if it
- // did something similarly unusual on the date picked for this test.
- if (start.isValid()) {
- QCOMPARE(front.date(), date);
- QCOMPARE(front.time(), QTime(0, 0));
- }
- if (end.isValid()) {
- QCOMPARE(back.date(), date);
- QCOMPARE(back.time(), QTime(23, 59, 59, 999));
- }
+
+ if (start.isValid()) {
+ QVERIFY(front.isValid());
+ QCOMPARE(front.date(), date);
+ UNLESSKLUDGE(IgnoreStart) QCOMPARE(front.time(), start);
+ } else UNLESSKLUDGE(IgnoreStart) {
+ auto report = qScopeGuard([front]() { qDebug() << "Start of day:" << front; });
+ QVERIFY(!front.isValid());
+ report.dismiss();
}
+ if (end.isValid()) {
+ QVERIFY(back.isValid());
+ QCOMPARE(back.date(), date);
+ UNLESSKLUDGE(IgnoreEnd) QCOMPARE(back.time(), end);
+ } else UNLESSKLUDGE(IgnoreEnd) {
+ auto report = qScopeGuard([back]() { qDebug() << "End of day:" << back; });
+ QVERIFY(!back.isValid());
+ report.dismiss();
+ }
+#undef UNLESSKLUDGE
}
-#endif // timezone
void tst_QDate::startOfDay_endOfDay_fixed_data()
{
+ QTest::addColumn<QDate>("date");
+
const qint64 kilo(1000);
using Bounds = std::numeric_limits<qint64>;
- const QDateTime
- first(QDateTime::fromMSecsSinceEpoch(Bounds::min() + 1, Qt::UTC)),
- start32sign(QDateTime::fromMSecsSinceEpoch(Q_INT64_C(-0x80000000) * kilo, Qt::UTC)),
- end32sign(QDateTime::fromMSecsSinceEpoch(Q_INT64_C(0x80000000) * kilo, Qt::UTC)),
- end32unsign(QDateTime::fromMSecsSinceEpoch(Q_INT64_C(0x100000000) * kilo, Qt::UTC)),
- last(QDateTime::fromMSecsSinceEpoch(Bounds::max(), Qt::UTC));
-
- const struct {
- const char *name;
- QDate date;
- } data[] = {
- { "epoch", QDate(1970, 1, 1) },
- { "y2k-leap-day", QDate(2000, 2, 29) },
- // Just outside the start and end of 32-bit time_t:
- { "pre-sign32", QDate(start32sign.date().year(), 1, 1) },
- { "post-sign32", QDate(end32sign.date().year(), 12, 31) },
- { "post-uint32", QDate(end32unsign.date().year(), 12, 31) },
- // Just inside the start and end of QDateTime's range:
- { "first-full", first.date().addDays(1) },
- { "last-full", last.date().addDays(-1) }
- };
-
- QTest::addColumn<QDate>("date");
- for (const auto &r : data)
- QTest::newRow(r.name) << r.date;
+ const auto UTC = QTimeZone::UTC;
+ const QDateTime first(QDateTime::fromMSecsSinceEpoch(Bounds::min() + 1, UTC));
+ const QDateTime start32sign(QDateTime::fromMSecsSinceEpoch(Q_INT64_C(-0x80000000) * kilo, UTC));
+ const QDateTime end32sign(QDateTime::fromMSecsSinceEpoch(Q_INT64_C(0x80000000) * kilo, UTC));
+ const QDateTime end32unsign(QDateTime::fromMSecsSinceEpoch(Q_INT64_C(0x100000000) * kilo, UTC));
+ const QDateTime last(QDateTime::fromMSecsSinceEpoch(Bounds::max(), UTC));
+
+ QTest::newRow("epoch") << epochDate();
+ QTest::newRow("y2k-leap-day") << QDate(2000, 2, 29);
+ QTest::newRow("start-1900") << QDate(1900, 1, 1); // QTBUG-99747
+ // Just outside the start and end of 32-bit time_t:
+ QTest::newRow("pre-sign32") << QDate(start32sign.date().year(), 1, 1);
+ QTest::newRow("post-sign32") << QDate(end32sign.date().year(), 12, 31);
+ QTest::newRow("post-uint32") << QDate(end32unsign.date().year(), 12, 31);
+ // Just inside the start and end of QDateTime's range:
+ QTest::newRow("first-full") << first.date().addDays(1);
+ QTest::newRow("last-full") << last.date().addDays(-1);
}
void tst_QDate::startOfDay_endOfDay_fixed()
@@ -587,56 +675,79 @@ void tst_QDate::startOfDay_endOfDay_fixed()
const QTime early(0, 0), late(23, 59, 59, 999);
QFETCH(QDate, date);
- QDateTime start(date.startOfDay(Qt::UTC));
- QDateTime end(date.endOfDay(Qt::UTC));
+ QDateTime start(date.startOfDay(QTimeZone::UTC));
+ QDateTime end(date.endOfDay(QTimeZone::UTC));
QCOMPARE(start.date(), date);
QCOMPARE(end.date(), date);
QCOMPARE(start.time(), early);
QCOMPARE(end.time(), late);
- QCOMPARE(date.addDays(1).startOfDay(Qt::UTC).addMSecs(-1), end);
- QCOMPARE(date.addDays(-1).endOfDay(Qt::UTC).addMSecs(1), start);
+ QCOMPARE(date.addDays(1).startOfDay(QTimeZone::UTC).addMSecs(-1), end);
+ QCOMPARE(date.addDays(-1).endOfDay(QTimeZone::UTC).addMSecs(1), start);
for (int offset = -60 * 16; offset <= 60 * 16; offset += 65) {
- start = date.startOfDay(Qt::OffsetFromUTC, offset);
- end = date.endOfDay(Qt::OffsetFromUTC, offset);
+ const auto zone = QTimeZone::fromSecondsAheadOfUtc(offset);
+ start = date.startOfDay(zone);
+ end = date.endOfDay(zone);
QCOMPARE(start.date(), date);
QCOMPARE(end.date(), date);
QCOMPARE(start.time(), early);
QCOMPARE(end.time(), late);
- QCOMPARE(date.addDays(1).startOfDay(Qt::OffsetFromUTC, offset).addMSecs(-1), end);
- QCOMPARE(date.addDays(-1).endOfDay(Qt::OffsetFromUTC, offset).addMSecs(1), start);
+ QCOMPARE(date.addDays(1).startOfDay(zone).addMSecs(-1), end);
+ QCOMPARE(date.addDays(-1).endOfDay(zone).addMSecs(1), start);
+ }
+
+ // Minimal testing for LocalTime and TimeZone
+ QCOMPARE(date.startOfDay().date(), date);
+ QCOMPARE(date.endOfDay().date(), date);
+#if QT_CONFIG(timezone)
+ const QTimeZone cet("Europe/Oslo");
+ if (cet.isValid()) {
+ QCOMPARE(date.startOfDay(cet).date(), date);
+ QCOMPARE(date.endOfDay(cet).date(), date);
}
+#endif
}
void tst_QDate::startOfDay_endOfDay_bounds()
{
// Check the days in which QDateTime's range starts and ends:
using Bounds = std::numeric_limits<qint64>;
+ const auto UTC = QTimeZone::UTC;
const QDateTime
- first(QDateTime::fromMSecsSinceEpoch(Bounds::min(), Qt::UTC)),
- last(QDateTime::fromMSecsSinceEpoch(Bounds::max(), Qt::UTC)),
- epoch(QDateTime::fromMSecsSinceEpoch(0, Qt::UTC));
+ first(QDateTime::fromMSecsSinceEpoch(Bounds::min(), UTC)),
+ last(QDateTime::fromMSecsSinceEpoch(Bounds::max(), UTC)),
+ epoch(QDateTime::fromMSecsSinceEpoch(0, UTC));
// First, check these *are* the start and end of QDateTime's range:
QVERIFY(first.isValid());
QVERIFY(last.isValid());
QVERIFY(first < epoch);
QVERIFY(last > epoch);
- // QDateTime's addMSecs doesn't check against {und,ov}erflow ...
QVERIFY(!first.addMSecs(-1).isValid() || first.addMSecs(-1) > first);
QVERIFY(!last.addMSecs(1).isValid() || last.addMSecs(1) < last);
// Now test start/end methods with them:
- QCOMPARE(first.date().endOfDay(Qt::UTC).time(), QTime(23, 59, 59, 999));
- QCOMPARE(last.date().startOfDay(Qt::UTC).time(), QTime(0, 0));
- QVERIFY(!first.date().startOfDay(Qt::UTC).isValid());
- QVERIFY(!last.date().endOfDay(Qt::UTC).isValid());
+ QCOMPARE(first.date().endOfDay(UTC).time(), QTime(23, 59, 59, 999));
+ QCOMPARE(last.date().startOfDay(UTC).time(), QTime(0, 0));
+ QVERIFY(!first.date().startOfDay(UTC).isValid());
+ QVERIFY(!last.date().endOfDay(UTC).isValid());
+
+ // Test for QTBUG-100873, shouldn't assert:
+ const QDate qdteMin(1752, 9, 14); // Used by QDateTimeEdit
+ QCOMPARE(qdteMin.startOfDay(UTC).date(), qdteMin);
+ QCOMPARE(qdteMin.startOfDay().date(), qdteMin);
+#if QT_CONFIG(timezone)
+ const QTimeZone sys = QTimeZone::systemTimeZone();
+ QVERIFY2(sys.isValid(), "Test depends on properly configured system");
+ QCOMPARE(qdteMin.startOfDay(sys).date(), qdteMin);
+ QTimeZone berlin("Europe/Berlin");
+ if (berlin.isValid())
+ QCOMPARE(qdteMin.startOfDay(berlin).date(), qdteMin);
+#endif
}
void tst_QDate::julianDaysLimits()
{
qint64 min = std::numeric_limits<qint64>::min();
qint64 max = std::numeric_limits<qint64>::max();
- qint64 minJd = Q_INT64_C(-784350574879);
- qint64 maxJd = Q_INT64_C( 784354017364);
QDate maxDate = QDate::fromJulianDay(maxJd);
QDate minDate = QDate::fromJulianDay(minJd);
@@ -704,11 +815,19 @@ void tst_QDate::addDays()
QFETCH( int, expectedDay );
QDate dt( year, month, day );
- dt = dt.addDays( amountToAdd );
+ QDate dt2 = dt.addDays( amountToAdd );
- QCOMPARE( dt.year(), expectedYear );
- QCOMPARE( dt.month(), expectedMonth );
- QCOMPARE( dt.day(), expectedDay );
+ QCOMPARE( dt2.year(), expectedYear );
+ QCOMPARE( dt2.month(), expectedMonth );
+ QCOMPARE( dt2.day(), expectedDay );
+
+#if __cpp_lib_chrono >= 201907L
+ QDate dt3 = dt.addDuration( std::chrono::days( amountToAdd ) );
+
+ QCOMPARE( dt3.year(), expectedYear );
+ QCOMPARE( dt3.month(), expectedMonth );
+ QCOMPARE( dt3.day(), expectedDay );
+#endif
}
void tst_QDate::addDays_data()
@@ -851,9 +970,6 @@ void tst_QDate::addYears_data()
void tst_QDate::daysTo()
{
- qint64 minJd = Q_INT64_C(-784350574879);
- qint64 maxJd = Q_INT64_C( 784354017364);
-
QDate dt1(2000, 1, 1);
QDate dt2(2000, 1, 5);
QCOMPARE(dt1.daysTo(dt2), (qint64) 4);
@@ -878,6 +994,17 @@ void tst_QDate::daysTo()
QCOMPARE(zeroDate.daysTo(minDate), minJd);
}
+void tst_QDate::orderingCompiles()
+{
+ QTestPrivate::testAllComparisonOperatorsCompile<QDate>();
+#if __cpp_lib_chrono >= 201907L
+ QTestPrivate::testAllComparisonOperatorsCompile<QDate, std::chrono::year_month_day>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QDate, std::chrono::year_month_day_last>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QDate, std::chrono::year_month_weekday>();
+ QTestPrivate::testAllComparisonOperatorsCompile<QDate, std::chrono::year_month_weekday_last>();
+#endif
+}
+
void tst_QDate::operator_eq_eq_data()
{
QTest::addColumn<QDate>("d1");
@@ -914,137 +1041,83 @@ void tst_QDate::operator_eq_eq()
QFETCH(QDate, d2);
QFETCH(bool, expectEqual);
- bool equal = d1 == d2;
- QCOMPARE(equal, expectEqual);
- bool notEqual = d1 != d2;
- QCOMPARE(notEqual, !expectEqual);
+ QT_TEST_EQUALITY_OPS(d1, d2, expectEqual);
- if (equal)
+ if (expectEqual)
QVERIFY(qHash(d1) == qHash(d2));
}
-void tst_QDate::operator_lt()
-{
- QDate d1(2000,1,2);
- QDate d2(2000,1,2);
- QVERIFY( !(d1 < d2) );
-
- d1 = QDate(2001,12,4);
- d2 = QDate(2001,12,5);
- QVERIFY( d1 < d2 );
-
- d1 = QDate(2001,11,5);
- d2 = QDate(2001,12,5);
- QVERIFY( d1 < d2 );
-
- d1 = QDate(2000,12,5);
- d2 = QDate(2001,12,5);
- QVERIFY( d1 < d2 );
-
- d1 = QDate(2002,12,5);
- d2 = QDate(2001,12,5);
- QVERIFY( !(d1 < d2) );
-
- d1 = QDate(2001,12,5);
- d2 = QDate(2001,11,5);
- QVERIFY( !(d1 < d2) );
-
- d1 = QDate(2001,12,6);
- d2 = QDate(2001,12,5);
- QVERIFY( !(d1 < d2) );
-}
-
-void tst_QDate::operator_gt()
+void tst_QDate::ordering_data()
{
- QDate d1(2000,1,2);
- QDate d2(2000,1,2);
- QVERIFY( !(d1 > d2) );
-
- d1 = QDate(2001,12,4);
- d2 = QDate(2001,12,5);
- QVERIFY( !(d1 > d2) );
-
- d1 = QDate(2001,11,5);
- d2 = QDate(2001,12,5);
- QVERIFY( !(d1 > d2) );
-
- d1 = QDate(2000,12,5);
- d2 = QDate(2001,12,5);
- QVERIFY( !(d1 > d2) );
-
- d1 = QDate(2002,12,5);
- d2 = QDate(2001,12,5);
- QVERIFY( d1 > d2 );
-
- d1 = QDate(2001,12,5);
- d2 = QDate(2001,11,5);
- QVERIFY( d1 > d2 );
-
- d1 = QDate(2001,12,6);
- d2 = QDate(2001,12,5);
- QVERIFY( d1 > d2 );
+ QTest::addColumn<QDate>("left");
+ QTest::addColumn<QDate>("right");
+ QTest::addColumn<Qt::strong_ordering>("expectedOrdering");
+
+ QTest::newRow("2000-1-2_vs_2000-1-2")
+ << QDate(2000, 1, 2) << QDate(2000, 1, 2) << Qt::strong_ordering::equivalent;
+ QTest::newRow("2001-12-4_vs_2001-12-5")
+ << QDate(2001, 12, 4) << QDate(2001, 12, 5) << Qt::strong_ordering::less;
+ QTest::newRow("2001-11-5_vs_2001-12-5")
+ << QDate(2001, 11, 5) << QDate(2001, 12, 5) << Qt::strong_ordering::less;
+ QTest::newRow("2000-12-5_vs_2001-12-5")
+ << QDate(2000, 12, 5) << QDate(2001, 12, 5) << Qt::strong_ordering::less;
+ QTest::newRow("2002-12-5_vs_2001-12-5")
+ << QDate(2002, 12, 5) << QDate(2001, 12, 5) << Qt::strong_ordering::greater;
+ QTest::newRow("2001-12-5_vs_2001-11-5")
+ << QDate(2001, 12, 5) << QDate(2001, 11, 5) << Qt::strong_ordering::greater;
+ QTest::newRow("2001-12-6_vs_2001-12-5")
+ << QDate(2001, 12, 6) << QDate(2001, 12, 5) << Qt::strong_ordering::greater;
}
-void tst_QDate::operator_lt_eq()
+void tst_QDate::ordering()
{
- QDate d1(2000,1,2);
- QDate d2(2000,1,2);
- QVERIFY( d1 <= d2 );
-
- d1 = QDate(2001,12,4);
- d2 = QDate(2001,12,5);
- QVERIFY( d1 <= d2 );
-
- d1 = QDate(2001,11,5);
- d2 = QDate(2001,12,5);
- QVERIFY( d1 <= d2 );
+ QFETCH(QDate, left);
+ QFETCH(QDate, right);
+ QFETCH(Qt::strong_ordering, expectedOrdering);
- d1 = QDate(2000,12,5);
- d2 = QDate(2001,12,5);
- QVERIFY( d1 <= d2 );
-
- d1 = QDate(2002,12,5);
- d2 = QDate(2001,12,5);
- QVERIFY( !(d1 <= d2) );
-
- d1 = QDate(2001,12,5);
- d2 = QDate(2001,11,5);
- QVERIFY( !(d1 <= d2) );
-
- d1 = QDate(2001,12,6);
- d2 = QDate(2001,12,5);
- QVERIFY( !(d1 <= d2) );
+ QT_TEST_ALL_COMPARISON_OPS(left, right, expectedOrdering);
}
-void tst_QDate::operator_gt_eq()
+void tst_QDate::ordering_chrono_types()
{
- QDate d1(2000,1,2);
- QDate d2(2000,1,2);
- QVERIFY( d1 >= d2 );
-
- d1 = QDate(2001,12,4);
- d2 = QDate(2001,12,5);
- QVERIFY( !(d1 >= d2) );
-
- d1 = QDate(2001,11,5);
- d2 = QDate(2001,12,5);
- QVERIFY( !(d1 >= d2) );
-
- d1 = QDate(2000,12,5);
- d2 = QDate(2001,12,5);
- QVERIFY( !(d1 >= d2) );
-
- d1 = QDate(2002,12,5);
- d2 = QDate(2001,12,5);
- QVERIFY( d1 >= d2 );
-
- d1 = QDate(2001,12,5);
- d2 = QDate(2001,11,5);
- QVERIFY( d1 >= d2 );
-
- d1 = QDate(2001,12,6);
- d2 = QDate(2001,12,5);
- QVERIFY( d1 >= d2 );
+#if __cpp_lib_chrono >= 201907L
+ using namespace std::chrono;
+ QDate friday(2001, 11, 30); // the 5th Friday of November 2001
+ // std::chrono::year_month_day
+ QT_TEST_ALL_COMPARISON_OPS(friday, year_month_day(2001y, November, 29d),
+ Qt::strong_ordering::greater);
+ QT_TEST_ALL_COMPARISON_OPS(friday, year_month_day(2001y, November, 30d),
+ Qt::strong_ordering::equivalent);
+ QT_TEST_ALL_COMPARISON_OPS(friday, year_month_day(2001y, December, 1d),
+ Qt::strong_ordering::less);
+
+ // std::chrono::year_month_day_last
+ QT_TEST_ALL_COMPARISON_OPS(friday, year_month_day_last(2001y, {October / last}),
+ Qt::strong_ordering::greater);
+ QT_TEST_ALL_COMPARISON_OPS(friday, year_month_day_last(2001y, {November / last}),
+ Qt::strong_ordering::equivalent);
+ QT_TEST_ALL_COMPARISON_OPS(friday, year_month_day_last(2001y, {December / last}),
+ Qt::strong_ordering::less);
+
+ // std::chrono::year_month_weekday
+ QT_TEST_ALL_COMPARISON_OPS(friday, year_month_weekday(2001y, November, Thursday[5]),
+ Qt::strong_ordering::greater);
+ QT_TEST_ALL_COMPARISON_OPS(friday, year_month_weekday(2001y, November, Friday[5]),
+ Qt::strong_ordering::equivalent);
+ QT_TEST_ALL_COMPARISON_OPS(friday, year_month_weekday(2001y, December, Saturday[1]),
+ Qt::strong_ordering::less);
+
+ // std::chrono::year_month_weekday_last
+ QDate thursday(2001, 11, 29); // the last Thursday of November 2001
+ QT_TEST_ALL_COMPARISON_OPS(thursday, year_month_weekday_last(2001y, November, Wednesday[last]),
+ Qt::strong_ordering::greater);
+ QT_TEST_ALL_COMPARISON_OPS(thursday, year_month_weekday_last(2001y, November, Thursday[last]),
+ Qt::strong_ordering::equivalent);
+ QT_TEST_ALL_COMPARISON_OPS(thursday, year_month_weekday_last(2001y, November, Friday[last]),
+ Qt::strong_ordering::less);
+#else
+ QSKIP("This test requires C++20-level <chrono> support enabled in the standard library.");
+#endif // __cpp_lib_chrono >= 201907L
}
Q_DECLARE_METATYPE(QDataStream::Version)
@@ -1148,13 +1221,13 @@ void tst_QDate::fromStringDateFormat_data()
<< QString::fromLatin1(" 13 Feb 1987 13:24:51 +0100")
<< Qt::RFC2822Date << QDate(1987, 2, 13);
QTest::newRow("RFC 2822 with day") << QString::fromLatin1("Thu, 01 Jan 1970 00:12:34 +0000")
- << Qt::RFC2822Date << QDate(1970, 1, 1);
+ << Qt::RFC2822Date << epochDate();
QTest::newRow("RFC 2822 with day after space")
<< QString::fromLatin1(" Thu, 01 Jan 1970 00:12:34 +0000")
- << Qt::RFC2822Date << QDate(1970, 1, 1);
+ << Qt::RFC2822Date << epochDate();
// No timezone
QTest::newRow("RFC 2822 no timezone") << QString::fromLatin1("01 Jan 1970 00:12:34")
- << Qt::RFC2822Date << QDate(1970, 1, 1);
+ << Qt::RFC2822Date << epochDate();
// No time specified
QTest::newRow("RFC 2822 date only") << QString::fromLatin1("01 Nov 2002")
<< Qt::RFC2822Date << QDate(2002, 11, 1);
@@ -1193,7 +1266,7 @@ void tst_QDate::fromStringDateFormat_data()
<< Qt::RFC2822Date << QDate(1987, 2, 13);
// No timezone
QTest::newRow("RFC 850 and 1036 no timezone") << QString::fromLatin1("Thu Jan 01 00:12:34 1970")
- << Qt::RFC2822Date << QDate(1970, 1, 1);
+ << Qt::RFC2822Date << epochDate();
// No time specified
QTest::newRow("RFC 850 and 1036 date only") << QString::fromLatin1("Fri Nov 01 2002")
<< Qt::RFC2822Date << QDate(2002, 11, 1);
@@ -1234,152 +1307,172 @@ void tst_QDate::fromStringFormat_data()
{
QTest::addColumn<QString>("string");
QTest::addColumn<QString>("format");
+ QTest::addColumn<int>("baseYear");
QTest::addColumn<QDate>("expected");
- // Get names:
- const QString january = QStringLiteral("January");
- const QString february = QStringLiteral("February");
- const QString march = QStringLiteral("March");
- const QString august = QStringLiteral("August");
- const QString mon = QStringLiteral("Mon");
- const QString monday = QStringLiteral("Monday");
- const QString tuesday = QStringLiteral("Tuesday");
- const QString wednesday = QStringLiteral("Wednesday");
- const QString thursday = QStringLiteral("Thursday");
- const QString friday = QStringLiteral("Friday");
- const QString saturday = QStringLiteral("Saturday");
- const QString sunday = QStringLiteral("Sunday");
-
- QTest::newRow("data0") << QString("") << QString("") << defDate();
- QTest::newRow("data1") << QString(" ") << QString("") << invalidDate();
- QTest::newRow("data2") << QString(" ") << QString(" ") << defDate();
- QTest::newRow("data3") << QString("-%$%#") << QString("$*(#@") << invalidDate();
- QTest::newRow("data4") << QString("d") << QString("'d'") << defDate();
- QTest::newRow("data5") << QString("101010") << QString("dMyy") << QDate(1910, 10, 10);
- QTest::newRow("data6") << QString("101010b") << QString("dMyy") << invalidDate();
- QTest::newRow("data7") << january << QString("MMMM") << defDate();
- QTest::newRow("data8") << QString("ball") << QString("balle") << invalidDate();
- QTest::newRow("data9") << QString("balleh") << QString("balleh") << defDate();
- QTest::newRow("data10") << QString("10.01.1") << QString("M.dd.d") << QDate(defDate().year(), 10, 1);
- QTest::newRow("data11") << QString("-1.01.1") << QString("M.dd.d") << invalidDate();
- QTest::newRow("data12") << QString("11010") << QString("dMMyy") << invalidDate();
- QTest::newRow("data13") << QString("-2") << QString("d") << invalidDate();
- QTest::newRow("data14") << QString("132") << QString("Md") << invalidDate();
- QTest::newRow("data15") << february << QString("MMMM") << QDate(defDate().year(), 2, 1);
-
- QString date = mon + QLatin1Char(' ') + august + " 8 2005";
- QTest::newRow("data16") << date << QString("ddd MMMM d yyyy") << QDate(2005, 8, 8);
- QTest::newRow("data17") << QString("2000:00") << QString("yyyy:yy") << QDate(2000, 1, 1);
- QTest::newRow("data18") << QString("1999:99") << QString("yyyy:yy") << QDate(1999, 1, 1);
- QTest::newRow("data19") << QString("2099:99") << QString("yyyy:yy") << QDate(2099, 1, 1);
- QTest::newRow("data20") << QString("2001:01") << QString("yyyy:yy") << QDate(2001, 1, 1);
- QTest::newRow("data21") << QString("99") << QString("yy") << QDate(1999, 1, 1);
- QTest::newRow("data22") << QString("01") << QString("yy") << QDate(1901, 1, 1);
-
- QTest::newRow("data23") << monday << QString("dddd") << QDate(1900, 1, 1);
- QTest::newRow("data24") << tuesday << QString("dddd") << QDate(1900, 1, 2);
- QTest::newRow("data25") << wednesday << QString("dddd") << QDate(1900, 1, 3);
- QTest::newRow("data26") << thursday << QString("dddd") << QDate(1900, 1, 4);
- QTest::newRow("data27") << friday << QString("dddd") << QDate(1900, 1, 5);
- QTest::newRow("data28") << saturday << QString("dddd") << QDate(1900, 1, 6);
- QTest::newRow("data29") << sunday << QString("dddd") << QDate(1900, 1, 7);
-
- QTest::newRow("data30") << monday + " 2006" << QString("dddd yyyy") << QDate(2006, 1, 2);
- QTest::newRow("data31") << tuesday + " 2006" << QString("dddd yyyy") << QDate(2006, 1, 3);
- QTest::newRow("data32") << wednesday + " 2006" << QString("dddd yyyy") << QDate(2006, 1, 4);
- QTest::newRow("data33") << thursday + " 2006" << QString("dddd yyyy") << QDate(2006, 1, 5);
- QTest::newRow("data34") << friday + " 2006" << QString("dddd yyyy") << QDate(2006, 1, 6);
- QTest::newRow("data35") << saturday + " 2006" << QString("dddd yyyy") << QDate(2006, 1, 7);
- QTest::newRow("data36") << sunday + " 2006" << QString("dddd yyyy") << QDate(2006, 1, 1);
-
- QTest::newRow("data37") << tuesday + " 2007 " + march << QString("dddd yyyy MMMM") << QDate(2007, 3, 6);
-
- QTest::newRow("data38") << QString("21052006") << QString("ddMMyyyy") << QDate(2006,5,21);
- QTest::newRow("data39") << QString("210506") << QString("ddMMyy") << QDate(1906,5,21);
- QTest::newRow("data40") << QString("21/5/2006") << QString("d/M/yyyy") << QDate(2006,5,21);
- QTest::newRow("data41") << QString("21/5/06") << QString("d/M/yy") << QDate(1906,5,21);
- QTest::newRow("data42") << QString("20060521") << QString("yyyyMMdd") << QDate(2006,5,21);
- QTest::newRow("data43") << QString("060521") << QString("yyMMdd") << QDate(1906,5,21);
- QTest::newRow("lateMarch") << QString("9999-03-06") << QString("yyyy-MM-dd") << QDate(9999, 3, 6);
- QTest::newRow("late") << QString("9999-12-31") << QString("yyyy-MM-dd") << QDate(9999, 12, 31);
+ QTest::newRow("empty") << u""_s << u""_s << 1900 << defDate();
+ QTest::newRow("space-as-empty") << u" "_s << u""_s << 1900 << invalidDate();
+ QTest::newRow("space") << u" "_s << u" "_s << 1900 << defDate();
+ QTest::newRow("mispunc") << u"-%$%#"_s << u"$*(#@"_s << 1900 << invalidDate();
+ QTest::newRow("literal-d") << u"d"_s << u"'d'"_s << 1900 << defDate();
+ QTest::newRow("greedy") << u"101010"_s << u"dMyy"_s << 1900 << QDate(1910, 10, 10);
+ QTest::newRow("greedy-miss") << u"101010b"_s << u"dMyy"_s << 1900 << invalidDate();
+ QTest::newRow("January") << u"January"_s << u"MMMM"_s << 1900 << defDate();
+ QTest::newRow("mistext") << u"ball"_s << u"balle"_s << 1900 << invalidDate();
+ QTest::newRow("text") << u"balleh"_s << u"balleh"_s << 1900 << defDate();
+ QTest::newRow("yearless:19") << u"10.01.1"_s << u"M.dd.d"_s << 1900 << QDate(1900, 10, 1);
+ QTest::newRow("yearless:20") << u"10.01.1"_s << u"M.dd.d"_s << 2000 << QDate(2000, 10, 1);
+ QTest::newRow("neg-month") << u"-1.01.1"_s << u"M.dd.d"_s << 1900 << invalidDate();
+ QTest::newRow("greedy-break") << u"11010"_s << u"dMMyy"_s << 1900 << invalidDate();
+ QTest::newRow("neg-day") << u"-2"_s << u"d"_s << 1900 << invalidDate();
+ QTest::newRow("Md:132") << u"132"_s << u"Md"_s << 1900 << invalidDate();
+ QTest::newRow("February") << u"February"_s << u"MMMM"_s << 1900 << QDate(1900, 2, 1);
+
+ QTest::newRow("mon-aug-8th")
+ << u"Mon August 8 2005"_s << u"ddd MMMM d yyyy"_s << 1900 << QDate(2005, 8, 8);
+ QTest::newRow("year-match-20000") << u"2000:00"_s << u"yyyy:yy"_s << 1900 << QDate(2000, 1, 1);
+ QTest::newRow("year-match-1999") << u"1999:99"_s << u"yyyy:yy"_s << 1900 << QDate(1999, 1, 1);
+ QTest::newRow("year-match-2099") << u"2099:99"_s << u"yyyy:yy"_s << 1900 << QDate(2099, 1, 1);
+ QTest::newRow("year-match-2001") << u"2001:01"_s << u"yyyy:yy"_s << 1900 << QDate(2001, 1, 1);
+ QTest::newRow("just-yy-1999") << u"99"_s << u"yy"_s << 1900 << QDate(1999, 1, 1);
+ QTest::newRow("just-yy-1901") << u"01"_s << u"yy"_s << 1900 << QDate(1901, 1, 1);
+ QTest::newRow("just-yy-2001") << u"01"_s << u"yy"_s << 1970 << QDate(2001, 1, 1);
+
+ QTest::newRow("Monday") << u"Monday"_s << u"dddd"_s << 1900 << QDate(1900, 1, 1);
+ QTest::newRow("Tuesday") << u"Tuesday"_s << u"dddd"_s << 1900 << QDate(1900, 1, 2);
+ QTest::newRow("Wednesday") << u"Wednesday"_s << u"dddd"_s << 1900 << QDate(1900, 1, 3);
+ QTest::newRow("Thursday") << u"Thursday"_s << u"dddd"_s << 1900 << QDate(1900, 1, 4);
+ QTest::newRow("Friday") << u"Friday"_s << u"dddd"_s << 1900 << QDate(1900, 1, 5);
+ QTest::newRow("Saturday") << u"Saturday"_s << u"dddd"_s << 1900 << QDate(1900, 1, 6);
+ QTest::newRow("Sunday") << u"Sunday"_s << u"dddd"_s << 1900 << QDate(1900, 1, 7);
+
+ QTest::newRow("Mon06") << u"Monday 2006"_s << u"dddd yyyy"_s << 1900 << QDate(2006, 1, 2);
+ QTest::newRow("Tues06") << u"Tuesday 2006"_s << u"dddd yyyy"_s << 1900 << QDate(2006, 1, 3);
+ QTest::newRow("Wed06") << u"Wednesday 2006"_s << u"dddd yyyy"_s << 1900 << QDate(2006, 1, 4);
+ QTest::newRow("Thu06") << u"Thursday 2006"_s << u"dddd yyyy"_s << 1900 << QDate(2006, 1, 5);
+ QTest::newRow("Fri06") << u"Friday 2006"_s << u"dddd yyyy"_s << 1900 << QDate(2006, 1, 6);
+ QTest::newRow("Sat06") << u"Saturday 2006"_s << u"dddd yyyy"_s << 1900 << QDate(2006, 1, 7);
+ QTest::newRow("Sun06") << u"Sunday 2006"_s << u"dddd yyyy"_s << 1900 << QDate(2006, 1, 1);
+ QTest::newRow("Tue07Mar")
+ << u"Tuesday 2007 March"_s << u"dddd yyyy MMMM"_s << 1900 << QDate(2007, 3, 6);
+
+ QTest::newRow("21May2006")
+ << u"21052006"_s << u"ddMMyyyy"_s << 1900 << QDate(2006, 5, 21);
+ QTest::newRow("21May06:19")
+ << u"210506"_s << u"ddMMyy"_s << 1900 << QDate(1906, 5, 21);
+ QTest::newRow("21May06:20")
+ << u"210506"_s << u"ddMMyy"_s << 1970 << QDate(2006, 5, 21);
+ QTest::newRow("21/May/2006")
+ << u"21/5/2006"_s << u"d/M/yyyy"_s << 1900 << QDate(2006, 5, 21);
+ QTest::newRow("21/5/06")
+ << u"21/5/06"_s << u"d/M/yy"_s << 1900 << QDate(1906, 5, 21);
+ QTest::newRow("21/5/06:19")
+ << u"21/5/06"_s << u"d/M/yy"_s << 1900 << QDate(1906, 5, 21);
+ QTest::newRow("21/5/06:20")
+ << u"21/5/06"_s << u"d/M/yy"_s << 1910 << QDate(2006, 5, 21);
+ QTest::newRow("2006May21")
+ << u"20060521"_s << u"yyyyMMdd"_s << 1900 << QDate(2006, 5, 21);
+ QTest::newRow("06May21:19")
+ << u"060521"_s << u"yyMMdd"_s << 1900 << QDate(1906, 5, 21);
+ QTest::newRow("06May21:20")
+ << u"060521"_s << u"yyMMdd"_s << 1907 << QDate(2006, 5, 21);
+ QTest::newRow("lateMarch")
+ << u"9999-03-06"_s << u"yyyy-MM-dd"_s << 1900 << QDate(9999, 3, 6);
+ QTest::newRow("late")
+ << u"9999-12-31"_s << u"yyyy-MM-dd"_s << 1900 << QDate(9999, 12, 31);
+
+ QTest::newRow("quoted-dd")
+ << u"21dd-05-2006"_s << u"dd'dd'-MM-yyyy"_s << 1900 << QDate(2006, 5, 21);
+ QTest::newRow("quoted-MM")
+ << u"21-MM05-2006"_s << u"dd-'MM'MM-yyyy"_s << 1900 << QDate(2006, 5, 21);
+ QTest::newRow("quotes-empty")
+ << u"21-'05-2006"_s << u"dd-MM-''yy"_s << 1900 << QDate(2006, 5, 21);
// Test unicode handling.
QTest::newRow("Unicode in format string")
- << QString(u8"2020🤣09🤣21") << QString(u8"yyyy🤣MM🤣dd") << QDate(2020, 9, 21);
- QTest::newRow("Unicode in quoted format string")
- << QString(u8"🤣🤣2020ðŸ‘09🤣21") << QString(u8"'🤣🤣'yyyyðŸ‘MM🤣dd") << QDate(2020, 9, 21);
+ << QString(u8"2020🤣09🤣21") << QString(u8"yyyy🤣MM🤣dd") << 1900 << QDate(2020, 9, 21);
+ QTest::newRow("Unicode-in-format-string-quoted-emoji")
+ << QString(u8"🤣🤣2020ðŸ‘09🤣21") << QString(u8"'🤣🤣'yyyyðŸ‘MM🤣dd") << 1900
+ << QDate(2020, 9, 21);
+ QTest::newRow("Unicode-in-quoted-dd-format-string")
+ << QString(u8"🤣🤣2020ðŸ‘09🤣21dd") << QString(u8"🤣🤣yyyyðŸ‘MM🤣dd'dd'") << 1900
+ << QDate(2020, 9, 21);
+ QTest::newRow("Unicode-in-all-formats-quoted-string")
+ << QString(u8"🤣🤣yyyy2020ðŸ‘MM09🤣21dd") << QString(u8"🤣🤣'yyyy'yyyyðŸ‘'MM'MM🤣dd'dd'")
+ << 1900 << QDate(2020, 9, 21);
// QTBUG-84334
QTest::newRow("-ve year: front, nosep")
- << QString("-20060521") << QString("yyyyMMdd") << QDate(-2006, 5, 21);
+ << u"-20060521"_s << u"yyyyMMdd"_s << 1900 << QDate(-2006, 5, 21);
QTest::newRow("-ve year: mid, nosep")
- << QString("05-200621") << QString("MMyyyydd") << QDate(-2006, 5, 21);
+ << u"05-200621"_s << u"MMyyyydd"_s << 1900 << QDate(-2006, 5, 21);
QTest::newRow("-ve year: back, nosep")
- << QString("0521-2006") << QString("MMddyyyy") << QDate(-2006, 5, 21);
+ << u"0521-2006"_s << u"MMddyyyy"_s << 1900 << QDate(-2006, 5, 21);
// - as separator should not interfere with negative year numbers:
QTest::newRow("-ve year: front, dash")
- << QString("-2006-05-21") << QString("yyyy-MM-dd") << QDate(-2006, 5, 21);
+ << u"-2006-05-21"_s << u"yyyy-MM-dd"_s << 1900 << QDate(-2006, 5, 21);
QTest::newRow("positive year: front, dash")
- << QString("-2006-05-21") << QString("-yyyy-MM-dd") << QDate(2006, 5, 21);
+ << u"-2006-05-21"_s << u"-yyyy-MM-dd"_s << 1900 << QDate(2006, 5, 21);
QTest::newRow("-ve year: mid, dash")
- << QString("05--2006-21") << QString("MM-yyyy-dd") << QDate(-2006, 5, 21);
+ << u"05--2006-21"_s << u"MM-yyyy-dd"_s << 1900 << QDate(-2006, 5, 21);
QTest::newRow("-ve year: back, dash")
- << QString("05-21--2006") << QString("MM-dd-yyyy") << QDate(-2006, 5, 21);
+ << u"05-21--2006"_s << u"MM-dd-yyyy"_s << 1900 << QDate(-2006, 5, 21);
// negative three digit year numbers should be rejected:
QTest::newRow("-ve 3digit year: front")
- << QString("-206-05-21") << QString("yyyy-MM-dd") << QDate();
+ << u"-206-05-21"_s << u"yyyy-MM-dd"_s << 1900 << QDate();
QTest::newRow("-ve 3digit year: mid")
- << QString("05--206-21") << QString("MM-yyyy-dd") << QDate();
+ << u"05--206-21"_s << u"MM-yyyy-dd"_s << 1900 << QDate();
QTest::newRow("-ve 3digit year: back")
- << QString("05-21--206") << QString("MM-dd-yyyy") << QDate();
+ << u"05-21--206"_s << u"MM-dd-yyyy"_s << 1900 << QDate();
// negative month numbers should be rejected:
QTest::newRow("-ve 2digit month: mid")
- << QString("2060--05-21") << QString("yyyy-MM-dd") << QDate();
+ << u"2060--05-21"_s << u"yyyy-MM-dd"_s << 1900 << QDate();
QTest::newRow("-ve 2digit month: front")
- << QString("-05-2060-21") << QString("MM-yyyy-dd") << QDate();
+ << u"-05-2060-21"_s << u"MM-yyyy-dd"_s << 1900 << QDate();
QTest::newRow("-ve 2digit month: back")
- << QString("21-2060--05") << QString("dd-yyyy-MM") << QDate();
+ << u"21-2060--05"_s << u"dd-yyyy-MM"_s << 1900 << QDate();
// negative single digit month numbers should be rejected:
QTest::newRow("-ve 1digit month: mid")
- << QString("2060--5-21") << QString("yyyy-MM-dd") << QDate();
+ << u"2060--5-21"_s << u"yyyy-MM-dd"_s << 1900 << QDate();
QTest::newRow("-ve 1digit month: front")
- << QString("-5-2060-21") << QString("MM-yyyy-dd") << QDate();
+ << u"-5-2060-21"_s << u"MM-yyyy-dd"_s << 1900 << QDate();
QTest::newRow("-ve 1digit month: back")
- << QString("21-2060--5") << QString("dd-yyyy-MM") << QDate();
+ << u"21-2060--5"_s << u"dd-yyyy-MM"_s << 1900 << QDate();
// negative day numbers should be rejected:
QTest::newRow("-ve 2digit day: front")
- << QString("-21-2060-05") << QString("dd-yyyy-MM") << QDate();
+ << u"-21-2060-05"_s << u"dd-yyyy-MM"_s << 1900 << QDate();
QTest::newRow("-ve 2digit day: mid")
- << QString("2060--21-05") << QString("yyyy-dd-MM") << QDate();
+ << u"2060--21-05"_s << u"yyyy-dd-MM"_s << 1900 << QDate();
QTest::newRow("-ve 2digit day: back")
- << QString("05-2060--21") << QString("MM-yyyy-dd") << QDate();
+ << u"05-2060--21"_s << u"MM-yyyy-dd"_s << 1900 << QDate();
// negative single digit day numbers should be rejected:
QTest::newRow("-ve 1digit day: front")
- << QString("-2-2060-05") << QString("dd-yyyy-MM") << QDate();
+ << u"-2-2060-05"_s << u"dd-yyyy-MM"_s << 1900 << QDate();
QTest::newRow("-ve 1digit day: mid")
- << QString("05--2-2060") << QString("MM-dd-yyyy") << QDate();
+ << u"05--2-2060"_s << u"MM-dd-yyyy"_s << 1900 << QDate();
QTest::newRow("-ve 1digit day: back")
- << QString("2060-05--2") << QString("yyyy-MM-dd") << QDate();
+ << u"2060-05--2"_s << u"yyyy-MM-dd"_s << 1900 << QDate();
// positive three digit year numbers should be rejected:
- QTest::newRow("3digit year, front") << QString("206-05-21") << QString("yyyy-MM-dd") << QDate();
- QTest::newRow("3digit year, mid") << QString("05-206-21") << QString("MM-yyyy-dd") << QDate();
- QTest::newRow("3digit year, back") << QString("05-21-206") << QString("MM-dd-yyyy") << QDate();
+ QTest::newRow("3digit year, front") << u"206-05-21"_s << u"yyyy-MM-dd"_s << 1900 << QDate();
+ QTest::newRow("3digit year, mid") << u"05-206-21"_s << u"MM-yyyy-dd"_s << 1900 << QDate();
+ QTest::newRow("3digit year, back") << u"05-21-206"_s << u"MM-dd-yyyy"_s << 1900 << QDate();
// positive five digit year numbers should be rejected:
QTest::newRow("5digit year, front")
- << QString("00206-05-21") << QString("yyyy-MM-dd") << QDate();
- QTest::newRow("5digit year, mid") << QString("05-00206-21") << QString("MM-yyyy-dd") << QDate();
+ << u"00206-05-21"_s << u"yyyy-MM-dd"_s << 1900 << QDate();
+ QTest::newRow("5digit year, mid")
+ << u"05-00206-21"_s << u"MM-yyyy-dd"_s << 1900 << QDate();
QTest::newRow("5digit year, back")
- << QString("05-21-00206") << QString("MM-dd-yyyy") << QDate();
+ << u"05-21-00206"_s << u"MM-dd-yyyy"_s << 1900 << QDate();
QTest::newRow("dash separator, no year at end")
- << QString("05-21-") << QString("dd-MM-yyyy") << QDate();
+ << u"05-21-"_s << u"dd-MM-yyyy"_s << 1900 << QDate();
QTest::newRow("slash separator, no year at end")
- << QString("11/05/") << QString("d/MM/yyyy") << QDate();
+ << u"11/05/"_s << u"d/MM/yyyy"_s << 1900 << QDate();
// QTBUG-84349
- QTest::newRow("+ sign in year field") << QString("+0200322") << QString("yyyyMMdd") << QDate();
- QTest::newRow("+ sign in month field") << QString("2020+322") << QString("yyyyMMdd") << QDate();
- QTest::newRow("+ sign in day field") << QString("202003+1") << QString("yyyyMMdd") << QDate();
+ QTest::newRow("+ sign in year field") << u"+0200322"_s << u"yyyyMMdd"_s << 1900 << QDate();
+ QTest::newRow("+ sign in month field") << u"2020+322"_s << u"yyyyMMdd"_s << 1900 << QDate();
+ QTest::newRow("+ sign in day field") << u"202003+1"_s << u"yyyyMMdd"_s << 1900 << QDate();
}
@@ -1387,9 +1480,12 @@ void tst_QDate::fromStringFormat()
{
QFETCH(QString, string);
QFETCH(QString, format);
+ QFETCH(int, baseYear);
QFETCH(QDate, expected);
- QDate dt = QDate::fromString(string, format);
+ QDate dt = QDate::fromString(string, format, baseYear);
+ QEXPECT_FAIL("quotes-empty", "QTBUG-110669: doubled single-quotes in format mishandled",
+ Continue);
QCOMPARE(dt, expected);
}
#endif // datetimeparser
@@ -1602,9 +1698,6 @@ void tst_QDate::roundtrip() const
loopDate = loopDate.addDays(1);
}
- qint64 minJd = Q_INT64_C(-784350574879);
- qint64 maxJd = Q_INT64_C( 784354017364);
-
// Test Gregorian round trip at top end of conversion range
loopDate = QDate::fromJulianDay(maxJd);
while (loopDate.toJulianDay() >= maxJd - 146397) {
@@ -1620,6 +1713,38 @@ void tst_QDate::roundtrip() const
QCOMPARE(loopDate.toJulianDay(), testDate.toJulianDay());
loopDate = loopDate.addDays(1);
}
+
+#if __cpp_lib_chrono >= 201907L
+ // Test roundtrip for from/to std::chrono conversions.
+ // Compile-time test, to verify it's all constexpr.
+ using namespace std::chrono;
+ {
+ constexpr sys_days expected{days{minJd}};
+ constexpr sys_days actual{QDate::fromStdSysDays(expected).toStdSysDays()};
+ static_assert(actual == expected);
+ }
+ {
+ // constexpr year_month_day expected{sys_days{days{maxJd}}}; // Overflow at least on MSVC
+ constexpr year_month_day expected{1970y, January, 1d};
+ constexpr sys_days actual{QDate(expected).toStdSysDays()};
+ static_assert(actual == sys_days(expected));
+ }
+ {
+ constexpr year_month_day_last expected{2001y, {October / last}};
+ constexpr sys_days actual{QDate(expected).toStdSysDays()};
+ static_assert(actual == sys_days(expected));
+ }
+ {
+ constexpr year_month_weekday expected{2001y, December, Saturday[1]};
+ constexpr sys_days actual{QDate(expected).toStdSysDays()};
+ static_assert(actual == sys_days(expected));
+ }
+ {
+ constexpr year_month_weekday_last expected{2001y, November, Friday[last]};
+ constexpr sys_days actual{QDate(expected).toStdSysDays()};
+ static_assert(actual == sys_days(expected));
+ }
+#endif // __cpp_lib_chrono >= 201907L
}
void tst_QDate::qdebug() const
diff --git a/tests/auto/corelib/time/qdatetime/CMakeLists.txt b/tests/auto/corelib/time/qdatetime/CMakeLists.txt
index c5b8d2bb6e..499369c131 100644
--- a/tests/auto/corelib/time/qdatetime/CMakeLists.txt
+++ b/tests/auto/corelib/time/qdatetime/CMakeLists.txt
@@ -1,29 +1,33 @@
-# Generated from qdatetime.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdatetime Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdatetime LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdatetime
SOURCES
tst_qdatetime.cpp
DEFINES
QT_NO_FOREACH
QT_NO_KEYWORDS
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
)
## Scopes:
#####################################################################
-#### Keys ignored in scope 2:.:.:qdatetime.pro:MSVC:
-# QMAKE_CFLAGS_RELEASE = "--O1"
-# QMAKE_CXXFLAGS_RELEASE = "--O1"
-
qt_internal_extend_target(tst_qdatetime CONDITION APPLE
SOURCES
tst_qdatetime_mac.mm
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWFoundation}
)
diff --git a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp
index 844dead504..f9c6afc795 100644
--- a/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp
+++ b/tests/auto/corelib/time/qdatetime/tst_qdatetime.cpp
@@ -1,41 +1,28 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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) 2022 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include <QDateTime>
#include <QTest>
-#include <time.h>
-#include <qdatetime.h>
+
+#include <QTimeZone>
#include <private/qdatetime_p.h>
+#include <private/qtenvironmentvariables_p.h> // for qTzSet(), qTzName()
+#include <private/qcomparisontesthelper_p.h>
#ifdef Q_OS_WIN
-# include <qt_windows.h>
+# include <qt_windows.h>
+# if !QT_CONFIG(icu)
+// The native MS back-end for time-zones lacks info about historic transitions:
+# define INADEQUATE_TZ_DATA
+# endif
+#endif
+#ifdef Q_OS_ANDROID // Also seems to lack full-day zone transitions:
+# define INADEQUATE_TZ_DATA
#endif
+using namespace Qt::StringLiterals;
+
class tst_QDateTime : public QObject
{
Q_OBJECT
@@ -48,11 +35,14 @@ public Q_SLOTS:
private Q_SLOTS:
void ctor();
void operator_eq();
+ void moveSemantics();
void isNull();
void isValid();
void date();
void time();
+#if QT_DEPRECATED_SINCE(6, 9)
void timeSpec();
+#endif
void toSecsSinceEpoch_data();
void toSecsSinceEpoch();
void daylightSavingsTimeChange_data();
@@ -62,13 +52,17 @@ private Q_SLOTS:
void setDate();
void setTime_data();
void setTime();
+ void setTimeZone_data();
+ void setTimeZone();
+#if QT_DEPRECATED_SINCE(6, 9)
void setTimeSpec_data();
void setTimeSpec();
+#endif
void setSecsSinceEpoch();
void setMSecsSinceEpoch_data();
void setMSecsSinceEpoch();
void fromSecsSinceEpoch();
- void fromMSecsSinceEpoch_data();
+ void fromMSecsSinceEpoch_data() { setMSecsSinceEpoch_data(); }
void fromMSecsSinceEpoch();
#if QT_CONFIG(datestring)
void toString_isoDate_data();
@@ -92,20 +86,25 @@ private Q_SLOTS:
void addSecs();
void addMSecs_data();
void addMSecs();
+#if QT_DEPRECATED_SINCE(6, 9)
void toTimeSpec_data();
void toTimeSpec();
- void toLocalTime_data();
+ void toLocalTime_data() { toTimeSpec_data(); }
void toLocalTime();
- void toUTC_data();
+ void toUTC_data() { toTimeSpec_data(); }
void toUTC();
void toUTC_extra();
+#endif
void daysTo();
void secsTo_data();
void secsTo();
- void msecsTo_data();
+ void msecsTo_data() { addMSecs_data(); }
void msecsTo();
+ void orderingCompiles();
void operator_eqeq_data();
void operator_eqeq();
+ void ordering_data();
+ void ordering();
void operator_insert_extract_data();
void operator_insert_extract();
void currentDateTime();
@@ -123,8 +122,10 @@ private Q_SLOTS:
#endif
void offsetFromUtc();
+#if QT_DEPRECATED_SINCE(6, 9)
void setOffsetFromUtc();
void toOffsetFromUtc();
+#endif
void zoneAtTime_data();
void zoneAtTime();
@@ -151,11 +152,44 @@ private Q_SLOTS:
void macTypes();
+ void stdCompatibilitySysTime_data();
+ void stdCompatibilitySysTime();
+ void stdCompatibilityLocalTime_data();
+ void stdCompatibilityLocalTime();
+#if QT_CONFIG(timezone)
+ void stdCompatibilityZonedTime_data();
+ void stdCompatibilityZonedTime();
+#endif
+
private:
- enum { LocalTimeIsUtc = 0, LocalTimeAheadOfUtc = 1, LocalTimeBehindUtc = -1} localTimeType;
+ /*
+ Various zones close to UTC (notably Iceland, the WET zones and several in
+ West Africa) or nominally assigned to it historically (north Canada, the
+ Antarctic) and those that have crossed the international date-line (by
+ skipping or repeating a day) don't have a consistent answer to "which side
+ of UTC is it ?" So the various LocalTimeType members may be different.
+ */
+ enum LocalTimeType { LocalTimeIsUtc = 0, LocalTimeAheadOfUtc = 1, LocalTimeBehindUtc = -1};
+ const LocalTimeType solarMeanType, epochTimeType, futureTimeType, distantTimeType;
+ static constexpr auto UTC = QTimeZone::UTC;
+ static constexpr qint64 epochJd = Q_INT64_C(2440588);
int preZoneFix;
bool zoneIsCET;
+ static LocalTimeType timeTypeFor(qint64 jand, qint64 juld)
+ {
+ constexpr uint day = 24 * 3600; // in seconds
+ QDateTime jan = QDateTime::fromSecsSinceEpoch(jand * day);
+ QDateTime jul = QDateTime::fromSecsSinceEpoch(juld * day);
+ if (jan.date().toJulianDay() < jand + epochJd || jul.date().toJulianDay() < juld + epochJd)
+ return LocalTimeBehindUtc;
+ if (jan.date().toJulianDay() > jand + epochJd || jul.date().toJulianDay() > juld + epochJd
+ || jan.time().hour() > 0 || jul.time().hour() > 0) {
+ return LocalTimeAheadOfUtc;
+ }
+ return LocalTimeIsUtc;
+ }
+
class TimeZoneRollback
{
const QByteArray prior;
@@ -166,7 +200,7 @@ private:
{ reset(zone); }
void reset(const QByteArray &zone)
{
- qputenv("TZ", zone.constData());
+ qputenv("TZ", zone);
qTzSet();
}
~TimeZoneRollback()
@@ -174,7 +208,7 @@ private:
if (prior.isNull())
qunsetenv("TZ");
else
- qputenv("TZ", prior.constData());
+ qputenv("TZ", prior);
qTzSet();
}
};
@@ -183,7 +217,18 @@ private:
Q_DECLARE_METATYPE(Qt::TimeSpec)
Q_DECLARE_METATYPE(Qt::DateFormat)
-tst_QDateTime::tst_QDateTime()
+tst_QDateTime::tst_QDateTime() :
+ // UTC starts of January and July in the commented years:
+ solarMeanType(timeTypeFor(-62091, -61910)), // 1800
+ epochTimeType(timeTypeFor(0, 181)), // 1970
+ // Use stable future, to which current rule is extrapolated, as surrogate for variable current:
+ futureTimeType(timeTypeFor(24837, 25018)), // 2038
+ // The glibc functions only handle DST as far as a 32-bit signed day-count
+ // from some date in 1970 reaches; the future extreme of that is in the
+ // second half of 5'881'580 CE. Beyond 5'881'581 CE it treats all zones as
+ // being in their January state, regardless of time of year. So use data for
+ // this later year for tests of QDateTime's upper bound.
+ distantTimeType(timeTypeFor(0x800000adLL, 0x80000162LL))
{
/*
Due to some jurisdictions changing their zones and rules, it's possible
@@ -197,7 +242,6 @@ tst_QDateTime::tst_QDateTime()
might not be properly handled by our work-arounds for the MS backend and
32-bit time_t; so don't probe them here.
*/
- const uint day = 24 * 3600; // in seconds
zoneIsCET = (QDateTime(QDate(2038, 1, 19), QTime(4, 14, 7)).toSecsSinceEpoch() == 0x7fffffff
// Entries a year apart robustly differ by multiples of day.
&& QDate(2015, 7, 1).startOfDay().toSecsSinceEpoch() == 1435701600
@@ -227,31 +271,6 @@ tst_QDateTime::tst_QDateTime()
Q_ASSERT(preZoneFix > -7200 && preZoneFix < 7200);
// So it's OK to add it to a QTime() between 02:00 and 22:00, but otherwise
// we must add it to the QDateTime constructed from it.
-
- /*
- Again, rule changes can cause a TZ to look like UTC at some sample dates
- but deviate at some date relevant to a test using localTimeType. These
- tests mostly use years outside the 1970--2037 range, for which we trust
- our TZ data, so we can't helpfully be exhaustive. Instead, scan a sample
- of years' starts and middles.
- */
- const int sampled = 3;
- // UTC starts of months in 2004, 2038 and 1970:
- qint64 jans[sampled] = { 12418 * day, 24837 * day, 0 };
- qint64 juls[sampled] = { 12600 * day, 25018 * day, 181 * day };
- localTimeType = LocalTimeIsUtc;
- for (int i = sampled; i-- > 0; ) {
- QDateTime jan = QDateTime::fromSecsSinceEpoch(jans[i]);
- QDateTime jul = QDateTime::fromSecsSinceEpoch(juls[i]);
- if (jan.date().year() < 1970 || jul.date().month() < 7) {
- localTimeType = LocalTimeBehindUtc;
- break;
- } else if (jan.time().hour() > 0 || jul.time().hour() > 0
- || jan.date().day() > 1 || jul.date().day() > 1) {
- localTimeType = LocalTimeAheadOfUtc;
- break;
- }
- }
}
void tst_QDateTime::initTestCase()
@@ -259,7 +278,7 @@ void tst_QDateTime::initTestCase()
// Never construct a message like this in an i18n context...
const char *typemsg1 = "exactly";
const char *typemsg2 = "and therefore not";
- switch (localTimeType) {
+ switch (futureTimeType) {
case LocalTimeIsUtc:
break;
case LocalTimeBehindUtc:
@@ -282,9 +301,9 @@ void tst_QDateTime::ctor()
{
QDateTime dt1(QDate(2004, 1, 2), QTime(1, 2, 3));
QCOMPARE(dt1.timeSpec(), Qt::LocalTime);
- QDateTime dt2(QDate(2004, 1, 2), QTime(1, 2, 3), Qt::LocalTime);
+ QDateTime dt2(QDate(2004, 1, 2), QTime(1, 2, 3));
QCOMPARE(dt2.timeSpec(), Qt::LocalTime);
- QDateTime dt3(QDate(2004, 1, 2), QTime(1, 2, 3), Qt::UTC);
+ QDateTime dt3(QDate(2004, 1, 2), QTime(1, 2, 3), UTC);
QCOMPARE(dt3.timeSpec(), Qt::UTC);
QVERIFY(dt1 == dt2);
@@ -298,25 +317,26 @@ void tst_QDateTime::ctor()
QDate offsetDate(2013, 1, 1);
QTime offsetTime(1, 2, 3);
- QDateTime offset1(offsetDate, offsetTime, Qt::OffsetFromUTC);
+ QDateTime offset1(offsetDate, offsetTime, QTimeZone::fromSecondsAheadOfUtc(0));
QCOMPARE(offset1.timeSpec(), Qt::UTC);
QCOMPARE(offset1.offsetFromUtc(), 0);
QCOMPARE(offset1.date(), offsetDate);
QCOMPARE(offset1.time(), offsetTime);
- QDateTime offset2(offsetDate, offsetTime, Qt::OffsetFromUTC, 0);
+ QDateTime offset2(offsetDate, offsetTime,
+ QTimeZone::fromDurationAheadOfUtc(std::chrono::seconds{}));
QCOMPARE(offset2.timeSpec(), Qt::UTC);
QCOMPARE(offset2.offsetFromUtc(), 0);
QCOMPARE(offset2.date(), offsetDate);
QCOMPARE(offset2.time(), offsetTime);
- QDateTime offset3(offsetDate, offsetTime, Qt::OffsetFromUTC, 60 * 60);
+ QDateTime offset3(offsetDate, offsetTime, QTimeZone::fromSecondsAheadOfUtc(60 * 60));
QCOMPARE(offset3.timeSpec(), Qt::OffsetFromUTC);
QCOMPARE(offset3.offsetFromUtc(), 60 * 60);
QCOMPARE(offset3.date(), offsetDate);
QCOMPARE(offset3.time(), offsetTime);
- QDateTime offset4(offsetDate, QTime(0, 0), Qt::OffsetFromUTC, 60 * 60);
+ QDateTime offset4(offsetDate, QTime(0, 0), QTimeZone::fromSecondsAheadOfUtc(60 * 60));
QCOMPARE(offset4.timeSpec(), Qt::OffsetFromUTC);
QCOMPARE(offset4.offsetFromUtc(), 60 * 60);
QCOMPARE(offset4.date(), offsetDate);
@@ -325,13 +345,25 @@ void tst_QDateTime::ctor()
void tst_QDateTime::operator_eq()
{
- QVERIFY(QDateTime() != QDateTime(QDate(1970, 1, 1), QTime(0, 0))); // QTBUG-79006
- QDateTime dt1(QDate(2004, 3, 24), QTime(23, 45, 57), Qt::UTC);
- QDateTime dt2(QDate(2005, 3, 11), QTime(0, 0), Qt::UTC);
+ QVERIFY(QDateTime() != QDate(1970, 1, 1).startOfDay()); // QTBUG-79006
+ QDateTime dt1(QDate(2004, 3, 24), QTime(23, 45, 57), UTC);
+ QDateTime dt2(QDate(2005, 3, 11), QTime(0, 0), UTC);
dt2 = dt1;
QVERIFY(dt1 == dt2);
}
+void tst_QDateTime::moveSemantics()
+{
+ QDateTime dt1{QDate{2004, 3, 24}, QTime{23, 45, 57}, UTC};
+ QDateTime dt2{QDate{2005, 3, 11}, QTime{0, 0}, UTC};
+ QDateTime copy = dt1;
+ QDateTime moved = std::move(dt1);
+ QCOMPARE(copy, moved);
+ copy = dt2;
+ moved = std::move(dt2);
+ QCOMPARE(copy, moved);
+}
+
void tst_QDateTime::isNull()
{
QDateTime dt1;
@@ -340,15 +372,27 @@ void tst_QDateTime::isNull()
QVERIFY(dt1.isNull());
dt1.setTime(QTime());
QVERIFY(dt1.isNull());
- dt1.setTimeSpec(Qt::UTC);
- QVERIFY(dt1.isNull()); // maybe it should return false?
+ dt1.setTimeZone(UTC);
+ QVERIFY(dt1.isNull());
+ dt1.setTime(QTime(12, 34, 56));
+ QVERIFY(!dt1.isNull());
+ dt1.setTime(QTime()); // Date still invalid, so this really clears time.
+ QVERIFY(dt1.isNull());
dt1.setDate(QDate(2004, 1, 2));
QVERIFY(!dt1.isNull());
dt1.setTime(QTime(12, 34, 56));
QVERIFY(!dt1.isNull());
- dt1.setTime(QTime());
+ dt1.setTime(QTime()); // Actually sets time to QTime(0, 0), as date is still valid.
+ QVERIFY(!dt1.isNull());
+ dt1.setDate(QDate()); // Time remains valid
QVERIFY(!dt1.isNull());
+ dt1.setTime(QTime()); // Now really sets time invalid, too
+ QVERIFY(dt1.isNull());
+
+ // Either date or time non-null => date-time isn't null:
+ QVERIFY(!QDateTime(QDate(), QTime(0, 0)).isNull());
+ QVERIFY(!QDateTime(QDate(2022, 2, 16), QTime()).isNull());
}
void tst_QDateTime::isValid()
@@ -359,49 +403,61 @@ void tst_QDateTime::isValid()
QVERIFY(!dt1.isValid());
dt1.setTime(QTime());
QVERIFY(!dt1.isValid());
- dt1.setTimeSpec(Qt::UTC);
+ dt1.setTimeZone(UTC);
QVERIFY(!dt1.isValid());
dt1.setDate(QDate(2004, 1, 2));
QVERIFY(dt1.isValid());
+ dt1.setTime(QTime()); // Effectively QTime(0, 0)
+ QVERIFY(dt1.isValid());
dt1.setDate(QDate());
QVERIFY(!dt1.isValid());
dt1.setTime(QTime(12, 34, 56));
QVERIFY(!dt1.isValid());
- dt1.setTime(QTime());
+ dt1.setTime(QTime()); // Does sets time invalid, as date is invalid
QVERIFY(!dt1.isValid());
+ dt1.setDate(QDate(2004, 1, 2)); // Kicks time back to QTime(0, 0)
+ QVERIFY(dt1.isValid());
+
+ // Invalid date => invalid date-time:
+ QVERIFY(!QDateTime(QDate(), QTime(0, 0)).isValid());
+ // Invalid time gets replaced with QTime(0, 0) when date is valid:
+ QVERIFY(QDateTime(QDate(2022, 2, 16), QTime()).isValid());
}
void tst_QDateTime::date()
{
- QDateTime dt1(QDate(2004, 3, 24), QTime(23, 45, 57), Qt::LocalTime);
+ QDateTime dt1(QDate(2004, 3, 24), QTime(23, 45, 57));
QCOMPARE(dt1.date(), QDate(2004, 3, 24));
- QDateTime dt2(QDate(2004, 3, 25), QTime(0, 45, 57), Qt::LocalTime);
+ QDateTime dt2(QDate(2004, 3, 25), QTime(0, 45, 57));
QCOMPARE(dt2.date(), QDate(2004, 3, 25));
- QDateTime dt3(QDate(2004, 3, 24), QTime(23, 45, 57), Qt::UTC);
+ QDateTime dt3(QDate(2004, 3, 24), QTime(23, 45, 57), UTC);
QCOMPARE(dt3.date(), QDate(2004, 3, 24));
- QDateTime dt4(QDate(2004, 3, 25), QTime(0, 45, 57), Qt::UTC);
+ QDateTime dt4(QDate(2004, 3, 25), QTime(0, 45, 57), UTC);
QCOMPARE(dt4.date(), QDate(2004, 3, 25));
}
void tst_QDateTime::time()
{
- QDateTime dt1(QDate(2004, 3, 24), QTime(23, 45, 57), Qt::LocalTime);
+ QDateTime dt1(QDate(2004, 3, 24), QTime(23, 45, 57));
QCOMPARE(dt1.time(), QTime(23, 45, 57));
- QDateTime dt2(QDate(2004, 3, 25), QTime(0, 45, 57), Qt::LocalTime);
+ QDateTime dt2(QDate(2004, 3, 25), QTime(0, 45, 57));
QCOMPARE(dt2.time(), QTime(0, 45, 57));
- QDateTime dt3(QDate(2004, 3, 24), QTime(23, 45, 57), Qt::UTC);
+ QDateTime dt3(QDate(2004, 3, 24), QTime(23, 45, 57), UTC);
QCOMPARE(dt3.time(), QTime(23, 45, 57));
- QDateTime dt4(QDate(2004, 3, 25), QTime(0, 45, 57), Qt::UTC);
+ QDateTime dt4(QDate(2004, 3, 25), QTime(0, 45, 57), UTC);
QCOMPARE(dt4.time(), QTime(0, 45, 57));
}
+#if QT_DEPRECATED_SINCE(6, 9)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QDateTime::timeSpec()
{
QDateTime dt1(QDate(2004, 1, 24), QTime(23, 45, 57));
@@ -415,49 +471,51 @@ void tst_QDateTime::timeSpec()
QCOMPARE(dt1.toTimeSpec(Qt::LocalTime).timeSpec(), Qt::LocalTime);
QCOMPARE(dt1.toTimeSpec(Qt::UTC).timeSpec(), Qt::UTC);
- QDateTime dt2(QDate(2004, 1, 24), QTime(23, 45, 57), Qt::LocalTime);
+ QDateTime dt2(QDate(2004, 1, 24), QTime(23, 45, 57));
QCOMPARE(dt2.timeSpec(), Qt::LocalTime);
- QDateTime dt3(QDate(2004, 1, 25), QTime(0, 45, 57), Qt::UTC);
+ QDateTime dt3(QDate(2004, 1, 25), QTime(0, 45, 57), UTC);
QCOMPARE(dt3.timeSpec(), Qt::UTC);
QDateTime dt4 = QDateTime::currentDateTime();
QCOMPARE(dt4.timeSpec(), Qt::LocalTime);
}
+QT_WARNING_POP
+#endif
void tst_QDateTime::setDate()
{
- QDateTime dt1(QDate(2004, 3, 25), QTime(0, 45, 57), Qt::UTC);
+ QDateTime dt1(QDate(2004, 3, 25), QTime(0, 45, 57), UTC);
dt1.setDate(QDate(2004, 6, 25));
QCOMPARE(dt1.date(), QDate(2004, 6, 25));
QCOMPARE(dt1.time(), QTime(0, 45, 57));
QCOMPARE(dt1.timeSpec(), Qt::UTC);
- QDateTime dt2(QDate(2004, 3, 25), QTime(0, 45, 57), Qt::LocalTime);
+ QDateTime dt2(QDate(2004, 3, 25), QTime(0, 45, 57));
dt2.setDate(QDate(2004, 6, 25));
QCOMPARE(dt2.date(), QDate(2004, 6, 25));
QCOMPARE(dt2.time(), QTime(0, 45, 57));
QCOMPARE(dt2.timeSpec(), Qt::LocalTime);
- QDateTime dt3(QDate(4004, 3, 25), QTime(0, 45, 57), Qt::UTC);
+ QDateTime dt3(QDate(4004, 3, 25), QTime(0, 45, 57), UTC);
dt3.setDate(QDate(4004, 6, 25));
QCOMPARE(dt3.date(), QDate(4004, 6, 25));
QCOMPARE(dt3.time(), QTime(0, 45, 57));
QCOMPARE(dt3.timeSpec(), Qt::UTC);
- QDateTime dt4(QDate(4004, 3, 25), QTime(0, 45, 57), Qt::LocalTime);
+ QDateTime dt4(QDate(4004, 3, 25), QTime(0, 45, 57));
dt4.setDate(QDate(4004, 6, 25));
QCOMPARE(dt4.date(), QDate(4004, 6, 25));
QCOMPARE(dt4.time(), QTime(0, 45, 57));
QCOMPARE(dt4.timeSpec(), Qt::LocalTime);
- QDateTime dt5(QDate(1760, 3, 25), QTime(0, 45, 57), Qt::UTC);
+ QDateTime dt5(QDate(1760, 3, 25), QTime(0, 45, 57), UTC);
dt5.setDate(QDate(1760, 6, 25));
QCOMPARE(dt5.date(), QDate(1760, 6, 25));
QCOMPARE(dt5.time(), QTime(0, 45, 57));
QCOMPARE(dt5.timeSpec(), Qt::UTC);
- QDateTime dt6(QDate(1760, 3, 25), QTime(0, 45, 57), Qt::LocalTime);
+ QDateTime dt6(QDate(1760, 3, 25), QTime(0, 45, 57));
dt6.setDate(QDate(1760, 6, 25));
QCOMPARE(dt6.date(), QDate(1760, 6, 25));
QCOMPARE(dt6.time(), QTime(0, 45, 57));
@@ -469,12 +527,18 @@ void tst_QDateTime::setTime_data()
QTest::addColumn<QDateTime>("dateTime");
QTest::addColumn<QTime>("newTime");
- QTest::newRow("data0") << QDateTime(QDate(2004, 3, 25), QTime(0, 45, 57), Qt::UTC) << QTime(23, 11, 22);
- QTest::newRow("data1") << QDateTime(QDate(2004, 3, 25), QTime(0, 45, 57), Qt::LocalTime) << QTime(23, 11, 22);
- QTest::newRow("data2") << QDateTime(QDate(4004, 3, 25), QTime(0, 45, 57), Qt::UTC) << QTime(23, 11, 22);
- QTest::newRow("data3") << QDateTime(QDate(4004, 3, 25), QTime(0, 45, 57), Qt::LocalTime) << QTime(23, 11, 22);
- QTest::newRow("data4") << QDateTime(QDate(1760, 3, 25), QTime(0, 45, 57), Qt::UTC) << QTime(23, 11, 22);
- QTest::newRow("data5") << QDateTime(QDate(1760, 3, 25), QTime(0, 45, 57), Qt::LocalTime) << QTime(23, 11, 22);
+ QTest::newRow("data0")
+ << QDateTime(QDate(2004, 3, 25), QTime(0, 45, 57), UTC) << QTime(23, 11, 22);
+ QTest::newRow("data1")
+ << QDateTime(QDate(2004, 3, 25), QTime(0, 45, 57)) << QTime(23, 11, 22);
+ QTest::newRow("data2")
+ << QDateTime(QDate(4004, 3, 25), QTime(0, 45, 57), UTC) << QTime(23, 11, 22);
+ QTest::newRow("data3")
+ << QDateTime(QDate(4004, 3, 25), QTime(0, 45, 57)) << QTime(23, 11, 22);
+ QTest::newRow("data4")
+ << QDateTime(QDate(1760, 3, 25), QTime(0, 45, 57), UTC) << QTime(23, 11, 22);
+ QTest::newRow("data5")
+ << QDateTime(QDate(1760, 3, 25), QTime(0, 45, 57)) << QTime(23, 11, 22);
QTest::newRow("set on std/dst") << QDateTime::currentDateTime() << QTime(23, 11, 22);
}
@@ -494,16 +558,73 @@ void tst_QDateTime::setTime()
QCOMPARE(dateTime.timeSpec(), expectedTimeSpec);
}
+void tst_QDateTime::setTimeZone_data()
+{
+ QTest::addColumn<QDateTime>("dateTime");
+ QTest::addColumn<QTimeZone>("zone");
+ const QDate day(2004, 3, 25);
+ const QTime time(0, 45, 57);
+ struct {
+ const char *id;
+ QTimeZone zone;
+ } data[] = {
+ { nullptr, QTimeZone() }, // For time-zone, when supported.
+ { "UTC", UTC },
+ { "LocalTime", QTimeZone() },
+ { "Offset", QTimeZone::fromSecondsAheadOfUtc(3600) }
+ };
+#if QT_CONFIG(timezone)
+ const QTimeZone cet("Europe/Oslo");
+ if (cet.isValid()) {
+ data[0].zone = cet;
+ data[0].id = "Zone";
+ }
+#endif
+ for (const auto &from : data) {
+ if (from.id) {
+ for (const auto &to : data) {
+ if (to.id) {
+ QTest::addRow("%s => %s", from.id, to.id)
+ << QDateTime(day, time, from.zone) << to.zone;
+ }
+ }
+ }
+ }
+}
+
+void tst_QDateTime::setTimeZone()
+{
+ QFETCH(QDateTime, dateTime);
+ QFETCH(QTimeZone, zone);
+
+ // QDateTime::setTimeZone() preserves the date and time rather than
+ // converting to the new time representation.
+ const QDate expectedDate(dateTime.date());
+ const QTime expectedTime(dateTime.time());
+
+ dateTime.setTimeZone(zone);
+
+ QCOMPARE(dateTime.date(), expectedDate);
+ QCOMPARE(dateTime.time(), expectedTime);
+ QCOMPARE(dateTime.timeRepresentation(), zone);
+}
+
+#if QT_DEPRECATED_SINCE(6, 9)
void tst_QDateTime::setTimeSpec_data()
{
QTest::addColumn<QDateTime>("dateTime");
QTest::addColumn<Qt::TimeSpec>("newTimeSpec");
- QTest::newRow("UTC => UTC") << QDateTime(QDate(2004, 3, 25), QTime(0, 45, 57), Qt::UTC) << Qt::UTC;
- QTest::newRow("UTC => LocalTime") << QDateTime(QDate(2004, 3, 25), QTime(0, 45, 57), Qt::UTC) << Qt::LocalTime;
- QTest::newRow("UTC => OffsetFromUTC") << QDateTime(QDate(2004, 3, 25), QTime(0, 45, 57), Qt::UTC) << Qt::OffsetFromUTC;
+ QTest::newRow("UTC => UTC")
+ << QDateTime(QDate(2004, 3, 25), QTime(0, 45, 57), UTC) << Qt::UTC;
+ QTest::newRow("UTC => LocalTime")
+ << QDateTime(QDate(2004, 3, 25), QTime(0, 45, 57), UTC) << Qt::LocalTime;
+ QTest::newRow("UTC => OffsetFromUTC")
+ << QDateTime(QDate(2004, 3, 25), QTime(0, 45, 57), UTC) << Qt::OffsetFromUTC;
}
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QDateTime::setTimeSpec()
{
QFETCH(QDateTime, dateTime);
@@ -521,59 +642,61 @@ void tst_QDateTime::setTimeSpec()
else
QCOMPARE(dateTime.timeSpec(), newTimeSpec);
}
+QT_WARNING_POP
+#endif
void tst_QDateTime::setSecsSinceEpoch()
{
QDateTime dt1;
dt1.setSecsSinceEpoch(0);
- QCOMPARE(dt1.toUTC(), QDate(1970, 1, 1).startOfDay(Qt::UTC));
+ QCOMPARE(dt1.toUTC(), QDate(1970, 1, 1).startOfDay(UTC));
QCOMPARE(dt1.timeSpec(), Qt::LocalTime);
- dt1.setTimeSpec(Qt::UTC);
+ dt1.setTimeZone(UTC);
dt1.setSecsSinceEpoch(0);
- QCOMPARE(dt1, QDate(1970, 1, 1).startOfDay(Qt::UTC));
+ QCOMPARE(dt1, QDate(1970, 1, 1).startOfDay(UTC));
QCOMPARE(dt1.timeSpec(), Qt::UTC);
dt1.setSecsSinceEpoch(123456);
- QCOMPARE(dt1, QDateTime(QDate(1970, 1, 2), QTime(10, 17, 36), Qt::UTC));
+ QCOMPARE(dt1, QDateTime(QDate(1970, 1, 2), QTime(10, 17, 36), UTC));
if (zoneIsCET) {
QDateTime dt2;
dt2.setSecsSinceEpoch(123456);
- QCOMPARE(dt2, QDateTime(QDate(1970, 1, 2), QTime(11, 17, 36), Qt::LocalTime));
+ QCOMPARE(dt2, QDateTime(QDate(1970, 1, 2), QTime(11, 17, 36)));
}
dt1.setSecsSinceEpoch((uint)(quint32)-123456);
- QCOMPARE(dt1, QDateTime(QDate(2106, 2, 5), QTime(20, 10, 40), Qt::UTC));
+ QCOMPARE(dt1, QDateTime(QDate(2106, 2, 5), QTime(20, 10, 40), UTC));
if (zoneIsCET) {
QDateTime dt2;
dt2.setSecsSinceEpoch((uint)(quint32)-123456);
- QCOMPARE(dt2, QDateTime(QDate(2106, 2, 5), QTime(21, 10, 40), Qt::LocalTime));
+ QCOMPARE(dt2, QDateTime(QDate(2106, 2, 5), QTime(21, 10, 40)));
}
dt1.setSecsSinceEpoch(1214567890);
- QCOMPARE(dt1, QDateTime(QDate(2008, 6, 27), QTime(11, 58, 10), Qt::UTC));
+ QCOMPARE(dt1, QDateTime(QDate(2008, 6, 27), QTime(11, 58, 10), UTC));
if (zoneIsCET) {
QDateTime dt2;
dt2.setSecsSinceEpoch(1214567890);
- QCOMPARE(dt2, QDateTime(QDate(2008, 6, 27), QTime(13, 58, 10), Qt::LocalTime));
+ QCOMPARE(dt2, QDateTime(QDate(2008, 6, 27), QTime(13, 58, 10)));
}
dt1.setSecsSinceEpoch(0x7FFFFFFF);
- QCOMPARE(dt1, QDateTime(QDate(2038, 1, 19), QTime(3, 14, 7), Qt::UTC));
+ QCOMPARE(dt1, QDateTime(QDate(2038, 1, 19), QTime(3, 14, 7), UTC));
if (zoneIsCET) {
QDateTime dt2;
dt2.setSecsSinceEpoch(0x7FFFFFFF);
- QCOMPARE(dt2, QDateTime(QDate(2038, 1, 19), QTime(4, 14, 7), Qt::LocalTime));
+ QCOMPARE(dt2, QDateTime(QDate(2038, 1, 19), QTime(4, 14, 7)));
}
- dt1 = QDateTime(QDate(2013, 1, 1), QTime(0, 0), Qt::OffsetFromUTC, 60 * 60);
+ dt1 = QDateTime(QDate(2013, 1, 1), QTime(0, 0), QTimeZone::fromSecondsAheadOfUtc(60 * 60));
dt1.setSecsSinceEpoch(123456);
- QCOMPARE(dt1, QDateTime(QDate(1970, 1, 2), QTime(10, 17, 36), Qt::UTC));
+ QCOMPARE(dt1, QDateTime(QDate(1970, 1, 2), QTime(10, 17, 36), UTC));
QCOMPARE(dt1.timeSpec(), Qt::OffsetFromUTC);
QCOMPARE(dt1.offsetFromUtc(), 60 * 60);
// Only testing UTC; see fromSecsSinceEpoch() for fuller test.
- dt1.setTimeSpec(Qt::UTC);
+ dt1.setTimeZone(UTC);
const qint64 maxSeconds = std::numeric_limits<qint64>::max() / 1000;
dt1.setSecsSinceEpoch(maxSeconds);
QVERIFY(dt1.isValid());
@@ -595,56 +718,56 @@ void tst_QDateTime::setMSecsSinceEpoch_data()
QTest::newRow("zero")
<< Q_INT64_C(0)
- << QDateTime(QDate(1970, 1, 1), QTime(0, 0), Qt::UTC)
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 0), UTC)
<< QDateTime(QDate(1970, 1, 1), QTime(1, 0));
QTest::newRow("+1ms")
<< Q_INT64_C(+1)
- << QDateTime(QDate(1970, 1, 1), QTime(0, 0, 0, 1), Qt::UTC)
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 0, 0, 1), UTC)
<< QDateTime(QDate(1970, 1, 1), QTime(1, 0, 0, 1));
QTest::newRow("+1s")
<< Q_INT64_C(+1000)
- << QDateTime(QDate(1970, 1, 1), QTime(0, 0, 1), Qt::UTC)
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 0, 1), UTC)
<< QDateTime(QDate(1970, 1, 1), QTime(1, 0, 1));
QTest::newRow("-1ms")
<< Q_INT64_C(-1)
- << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59, 999), Qt::UTC)
+ << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59, 999), UTC)
<< QDateTime(QDate(1970, 1, 1), QTime(0, 59, 59, 999));
QTest::newRow("-1s")
<< Q_INT64_C(-1000)
- << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59), Qt::UTC)
+ << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59), UTC)
<< QDateTime(QDate(1970, 1, 1), QTime(0, 59, 59));
QTest::newRow("123456789")
<< Q_INT64_C(123456789)
- << QDateTime(QDate(1970, 1, 2), QTime(10, 17, 36, 789), Qt::UTC)
- << QDateTime(QDate(1970, 1, 2), QTime(11, 17, 36, 789), Qt::LocalTime);
+ << QDateTime(QDate(1970, 1, 2), QTime(10, 17, 36, 789), UTC)
+ << QDateTime(QDate(1970, 1, 2), QTime(11, 17, 36, 789));
QTest::newRow("-123456789")
<< Q_INT64_C(-123456789)
- << QDateTime(QDate(1969, 12, 30), QTime(13, 42, 23, 211), Qt::UTC)
- << QDateTime(QDate(1969, 12, 30), QTime(14, 42, 23, 211), Qt::LocalTime);
+ << QDateTime(QDate(1969, 12, 30), QTime(13, 42, 23, 211), UTC)
+ << QDateTime(QDate(1969, 12, 30), QTime(14, 42, 23, 211));
QTest::newRow("post-32-bit-time_t")
<< (Q_INT64_C(1000) << 32)
- << QDateTime(QDate(2106, 2, 7), QTime(6, 28, 16), Qt::UTC)
+ << QDateTime(QDate(2106, 2, 7), QTime(6, 28, 16), UTC)
<< QDateTime(QDate(2106, 2, 7), QTime(7, 28, 16));
QTest::newRow("very-large")
<< (Q_INT64_C(123456) << 32)
- << QDateTime(QDate(18772, 8, 15), QTime(1, 8, 14, 976), Qt::UTC)
+ << QDateTime(QDate(18772, 8, 15), QTime(1, 8, 14, 976), UTC)
<< QDateTime(QDate(18772, 8, 15), QTime(3, 8, 14, 976));
QTest::newRow("old min (Tue Nov 25 00:00:00 -4714)")
<< Q_INT64_C(-210866716800000)
- << QDateTime(QDate::fromJulianDay(1), QTime(0, 0), Qt::UTC)
+ << QDateTime(QDate::fromJulianDay(1), QTime(0, 0), UTC)
<< QDateTime(QDate::fromJulianDay(1), QTime(1, 0)).addSecs(preZoneFix);
QTest::newRow("old max (Tue Jun 3 21:59:59 5874898)")
<< Q_INT64_C(185331720376799999)
- << QDateTime(QDate::fromJulianDay(0x7fffffff), QTime(21, 59, 59, 999), Qt::UTC)
+ << QDateTime(QDate::fromJulianDay(0x7fffffff), QTime(21, 59, 59, 999), UTC)
<< QDateTime(QDate::fromJulianDay(0x7fffffff), QTime(23, 59, 59, 999));
QTest::newRow("min")
<< std::numeric_limits<qint64>::min()
- << QDateTime(QDate(-292275056, 5, 16), QTime(16, 47, 4, 192), Qt::UTC)
+ << QDateTime(QDate(-292275056, 5, 16), QTime(16, 47, 4, 192), UTC)
<< QDateTime(QDate(-292275056, 5, 16), QTime(17, 47, 4, 192).addSecs(preZoneFix));
QTest::newRow("max")
<< std::numeric_limits<qint64>::max()
- << QDateTime(QDate(292278994, 8, 17), QTime(7, 12, 55, 807), Qt::UTC)
- << QDateTime(QDate(292278994, 8, 17), QTime(9, 12, 55, 807), Qt::LocalTime);
+ << QDateTime(QDate(292278994, 8, 17), QTime(7, 12, 55, 807), UTC)
+ << QDateTime(QDate(292278994, 8, 17), QTime(9, 12, 55, 807));
}
void tst_QDateTime::setMSecsSinceEpoch()
@@ -652,9 +775,10 @@ void tst_QDateTime::setMSecsSinceEpoch()
QFETCH(qint64, msecs);
QFETCH(QDateTime, utc);
QFETCH(QDateTime, cet);
+ using Bound = std::numeric_limits<qint64>;
QDateTime dt;
- dt.setTimeSpec(Qt::UTC);
+ dt.setTimeZone(UTC);
dt.setMSecsSinceEpoch(msecs);
QCOMPARE(dt, utc);
@@ -663,14 +787,14 @@ void tst_QDateTime::setMSecsSinceEpoch()
QCOMPARE(dt.timeSpec(), Qt::UTC);
{
- QDateTime dt1 = QDateTime::fromMSecsSinceEpoch(msecs, Qt::UTC);
+ QDateTime dt1 = QDateTime::fromMSecsSinceEpoch(msecs, UTC);
QCOMPARE(dt1, utc);
QCOMPARE(dt1.date(), utc.date());
QCOMPARE(dt1.time(), utc.time());
QCOMPARE(dt1.timeSpec(), Qt::UTC);
}
{
- QDateTime dt1(utc.date(), utc.time(), Qt::UTC);
+ QDateTime dt1(utc.date(), utc.time(), UTC);
QCOMPARE(dt1, utc);
QCOMPARE(dt1.date(), utc.date());
QCOMPARE(dt1.time(), utc.time());
@@ -685,10 +809,10 @@ void tst_QDateTime::setMSecsSinceEpoch()
QCOMPARE(dt1.timeSpec(), Qt::UTC);
}
- if (zoneIsCET && (msecs == std::numeric_limits<qint64>::max()
+ if (zoneIsCET && (msecs == Bound::max()
// LocalTime will also overflow for min in a CET zone west
// of Greenwich (Europe/Madrid):
- || (preZoneFix < -3600 && msecs == std::numeric_limits<qint64>::min()))) {
+ || (preZoneFix < -3600 && msecs == Bound::min()))) {
QVERIFY(!cet.isValid()); // overflows
} else if (zoneIsCET) {
QVERIFY(cet.isValid());
@@ -696,7 +820,7 @@ void tst_QDateTime::setMSecsSinceEpoch()
// Test converting from LocalTime to UTC back to LocalTime.
QDateTime localDt;
- localDt.setTimeSpec(Qt::LocalTime);
+ localDt.setTimeZone(QTimeZone::LocalTime);
localDt.setMSecsSinceEpoch(msecs);
QCOMPARE(localDt, utc);
@@ -726,53 +850,51 @@ void tst_QDateTime::setMSecsSinceEpoch()
QCOMPARE(dt.toMSecsSinceEpoch(), msecs);
QCOMPARE(qint64(dt.toSecsSinceEpoch()), msecs / 1000);
- QDateTime reference(QDate(1970, 1, 1), QTime(0, 0), Qt::UTC);
+ QDateTime reference(QDate(1970, 1, 1), QTime(0, 0), UTC);
QCOMPARE(dt, reference.addMSecs(msecs));
// Tests that we correctly recognize when we fall off the extremities:
- if (msecs == std::numeric_limits<qint64>::max()) {
- QDateTime off(QDate(1970, 1, 1).startOfDay(Qt::OffsetFromUTC, 1));
+ if (msecs == Bound::max()) {
+ QDateTime off(QDate(1970, 1, 1).startOfDay(QTimeZone::fromSecondsAheadOfUtc(1)));
off.setMSecsSinceEpoch(msecs);
QVERIFY(!off.isValid());
- } else if (msecs == std::numeric_limits<qint64>::min()) {
- QDateTime off(QDate(1970, 1, 1).startOfDay(Qt::OffsetFromUTC, -1));
+ } else if (msecs == Bound::min()) {
+ QDateTime off(QDate(1970, 1, 1).startOfDay(QTimeZone::fromSecondsAheadOfUtc(-1)));
off.setMSecsSinceEpoch(msecs);
QVERIFY(!off.isValid());
}
- if ((localTimeType == LocalTimeAheadOfUtc && msecs == std::numeric_limits<qint64>::max())
- || (localTimeType == LocalTimeBehindUtc && msecs == std::numeric_limits<qint64>::min())) {
+ // Check overflow; only robust if local time is the same at epoch as relevant bound.
+ // See setting of LocalTimeType values for details.
+ if (epochTimeType == LocalTimeAheadOfUtc
+ ? distantTimeType == LocalTimeAheadOfUtc && msecs == Bound::max()
+ : (solarMeanType == LocalTimeBehindUtc && msecs == Bound::min()
+ && epochTimeType == LocalTimeBehindUtc)) {
QDateTime curt = QDate(1970, 1, 1).startOfDay(); // initially in short-form
curt.setMSecsSinceEpoch(msecs); // Overflows due to offset
QVERIFY(!curt.isValid());
}
}
-void tst_QDateTime::fromMSecsSinceEpoch_data()
-{
- setMSecsSinceEpoch_data();
-}
-
void tst_QDateTime::fromMSecsSinceEpoch()
{
QFETCH(qint64, msecs);
QFETCH(QDateTime, utc);
QFETCH(QDateTime, cet);
using Bound = std::numeric_limits<qint64>;
- if (msecs == Bound::min())
- qDebug() << "Local overflow:" << preZoneFix << Qt::hex;
- QDateTime dtLocal = QDateTime::fromMSecsSinceEpoch(msecs, Qt::LocalTime);
- QDateTime dtUtc = QDateTime::fromMSecsSinceEpoch(msecs, Qt::UTC);
- QDateTime dtOffset = QDateTime::fromMSecsSinceEpoch(msecs, Qt::OffsetFromUTC, 60*60);
+ QDateTime dtLocal = QDateTime::fromMSecsSinceEpoch(msecs);
+ QDateTime dtUtc = QDateTime::fromMSecsSinceEpoch(msecs, UTC);
+ QDateTime dtOffset
+ = QDateTime::fromMSecsSinceEpoch(msecs, QTimeZone::fromSecondsAheadOfUtc(60 * 60));
// LocalTime will overflow for "min" or "max" tests, depending on whether
// you're East or West of Greenwich. In UTC, we won't overflow. If we're
// actually west of Greenwich but (e.g. Europe/Madrid) our zone claims east,
// "min" can also overflow (case only caught if local time is CET).
- const bool localOverflow = (localTimeType == LocalTimeAheadOfUtc
- ? msecs == Bound::max() || preZoneFix < -3600
- : localTimeType == LocalTimeBehindUtc && msecs == Bound::min());
- if (!localOverflow)
+ const bool localOverflow =
+ (distantTimeType == LocalTimeAheadOfUtc && (msecs == Bound::max() || preZoneFix < -3600))
+ || (solarMeanType == LocalTimeBehindUtc && msecs == Bound::min());
+ if (!localOverflow) // Can fail if offset changes sign, e.g. Alaska, Philippines.
QCOMPARE(dtLocal, utc);
QCOMPARE(dtUtc, utc);
@@ -806,7 +928,7 @@ void tst_QDateTime::fromMSecsSinceEpoch()
if (msecs != Bound::max())
QCOMPARE(qint64(dtOffset.toSecsSinceEpoch()), msecs / 1000);
- QDateTime reference(QDate(1970, 1, 1), QTime(0, 0), Qt::UTC);
+ QDateTime reference(QDate(1970, 1, 1), QTime(0, 0), UTC);
if (!localOverflow)
QCOMPARE(dtLocal, reference.addMSecs(msecs));
QCOMPARE(dtUtc, reference.addMSecs(msecs));
@@ -818,16 +940,31 @@ void tst_QDateTime::fromSecsSinceEpoch()
{
// Compare setSecsSinceEpoch()
const qint64 maxSeconds = std::numeric_limits<qint64>::max() / 1000;
- const QDateTime early = QDateTime::fromSecsSinceEpoch(-maxSeconds, Qt::UTC);
- const QDateTime late = QDateTime::fromSecsSinceEpoch(maxSeconds, Qt::UTC);
+ const QDateTime early = QDateTime::fromSecsSinceEpoch(-maxSeconds, UTC);
+ const QDateTime late = QDateTime::fromSecsSinceEpoch(maxSeconds, UTC);
QVERIFY(late.isValid());
- QVERIFY(!QDateTime::fromSecsSinceEpoch(maxSeconds + 1, Qt::UTC).isValid());
+ QVERIFY(!QDateTime::fromSecsSinceEpoch(maxSeconds + 1, UTC).isValid());
QVERIFY(early.isValid());
- QVERIFY(!QDateTime::fromSecsSinceEpoch(-maxSeconds - 1, Qt::UTC).isValid());
+ QVERIFY(!QDateTime::fromSecsSinceEpoch(-maxSeconds - 1, UTC).isValid());
// Local time: need to adjust for its zone offset
- const qint64 last = maxSeconds - qMax(late.addYears(-1).toLocalTime().offsetFromUtc(), 0);
+ const int lateOffset = late.addYears(-1).toLocalTime().offsetFromUtc();
+#if QT_CONFIG(timezone)
+ // Check what system zone believes in, as it's used as fall-back to cope
+ // with times outside the system time_t functions' range, or overflow on the
+ // results of using those functions. (It seems glibc's handling of
+ // Australasian zones parts company with the IANA DB after about 5881580 CE,
+ // leaving NZ in permanent DST after that, for example.) Of course, if
+ // that's less than lateOffset (as it is for glibc's similar handling of
+ // MET), the fall-back code will also fail when the primary code fails, so
+ // use the lesser of these late offsets.
+ const int lateZone = qMin(QTimeZone::systemTimeZone().offsetFromUtc(late), lateOffset);
+#else
+ const int lateZone = lateOffset;
+#endif
+
+ const qint64 last = maxSeconds - qMax(lateZone, 0);
QVERIFY(QDateTime::fromSecsSinceEpoch(last).isValid());
QVERIFY(!QDateTime::fromSecsSinceEpoch(last + 1).isValid());
const qint64 first = -maxSeconds - qMin(early.addYears(1).toLocalTime().offsetFromUtc(), 0);
@@ -835,10 +972,14 @@ void tst_QDateTime::fromSecsSinceEpoch()
QVERIFY(!QDateTime::fromSecsSinceEpoch(first - 1).isValid());
// Use an offset for which .toUTC()'s return would flip the validity:
- QVERIFY(QDateTime::fromSecsSinceEpoch(maxSeconds - 7200, Qt::OffsetFromUTC, 7200).isValid());
- QVERIFY(!QDateTime::fromSecsSinceEpoch(maxSeconds - 7199, Qt::OffsetFromUTC, 7200).isValid());
- QVERIFY(QDateTime::fromSecsSinceEpoch(7200 - maxSeconds, Qt::OffsetFromUTC, -7200).isValid());
- QVERIFY(!QDateTime::fromSecsSinceEpoch(7199 - maxSeconds, Qt::OffsetFromUTC, -7200).isValid());
+ QVERIFY(QDateTime::fromSecsSinceEpoch(maxSeconds - 7200,
+ QTimeZone::fromSecondsAheadOfUtc(7200)).isValid());
+ QVERIFY(!QDateTime::fromSecsSinceEpoch(maxSeconds - 7199,
+ QTimeZone::fromSecondsAheadOfUtc(7200)).isValid());
+ QVERIFY(QDateTime::fromSecsSinceEpoch(7200 - maxSeconds,
+ QTimeZone::fromSecondsAheadOfUtc(-7200)).isValid());
+ QVERIFY(!QDateTime::fromSecsSinceEpoch(7199 - maxSeconds,
+ QTimeZone::fromSecondsAheadOfUtc(-7200)).isValid());
#if QT_CONFIG(timezone)
// As for offset, use zones each side of UTC:
@@ -861,23 +1002,23 @@ void tst_QDateTime::toString_isoDate_data()
<< QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34))
<< Qt::ISODate << QString("1978-11-09T13:28:34");
QTest::newRow("UTC")
- << QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34), Qt::UTC)
+ << QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34), UTC)
<< Qt::ISODate << QString("1978-11-09T13:28:34Z");
QDateTime dt(QDate(1978, 11, 9), QTime(13, 28, 34));
- dt.setOffsetFromUtc(19800);
+ dt.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(19800));
QTest::newRow("positive OffsetFromUTC")
<< dt << Qt::ISODate
<< QString("1978-11-09T13:28:34+05:30");
- dt.setOffsetFromUtc(-7200);
+ dt.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(-7200));
QTest::newRow("negative OffsetFromUTC")
<< dt << Qt::ISODate
<< QString("1978-11-09T13:28:34-02:00");
- dt.setOffsetFromUtc(-900);
+ dt.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(-900));
QTest::newRow("negative non-integral OffsetFromUTC")
<< dt << Qt::ISODate
<< QString("1978-11-09T13:28:34-00:15");
QTest::newRow("invalid") // ISODate < 2019 doesn't allow -ve year numbers; QTBUG-91070
- << QDateTime(QDate(-1, 11, 9), QTime(13, 28, 34), Qt::UTC)
+ << QDateTime(QDate(-1, 11, 9), QTime(13, 28, 34), UTC)
<< Qt::ISODate << QString();
QTest::newRow("without-ms")
<< QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34, 20))
@@ -914,7 +1055,7 @@ void tst_QDateTime::toString_isoDate()
void tst_QDateTime::toString_isoDate_extra()
{
- QDateTime dt = QDateTime::fromMSecsSinceEpoch(0, Qt::UTC);
+ QDateTime dt = QDateTime::fromMSecsSinceEpoch(0, UTC);
QCOMPARE(dt.toString(Qt::ISODate), QLatin1String("1970-01-01T00:00:00Z"));
#if QT_CONFIG(timezone)
QTimeZone PST("America/Vancouver");
@@ -943,15 +1084,15 @@ void tst_QDateTime::toString_textDate_data()
+ ' ' + QLocale::c().monthName(1, QLocale::ShortFormat);
// ### Qt 7 GMT: change to UTC - see matching QDateTime::fromString() comment
- QTest::newRow("localtime") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3), Qt::LocalTime)
+ QTest::newRow("localtime") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3))
<< wednesdayJanuary + QString(" 2 01:02:03 2013");
- QTest::newRow("utc") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3), Qt::UTC)
+ QTest::newRow("utc") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3), UTC)
<< wednesdayJanuary + QString(" 2 01:02:03 2013 GMT");
- QTest::newRow("offset+") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3), Qt::OffsetFromUTC,
- 10 * 60 * 60)
+ QTest::newRow("offset+") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3),
+ QTimeZone::fromSecondsAheadOfUtc(10 * 60 * 60))
<< wednesdayJanuary + QString(" 2 01:02:03 2013 GMT+1000");
- QTest::newRow("offset-") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3), Qt::OffsetFromUTC,
- -10 * 60 * 60)
+ QTest::newRow("offset-") << QDateTime(QDate(2013, 1, 2), QTime(1, 2, 3),
+ QTimeZone::fromSecondsAheadOfUtc(-10 * 60 * 60))
<< wednesdayJanuary + QString(" 2 01:02:03 2013 GMT-1000");
QTest::newRow("invalid") << QDateTime()
<< QString("");
@@ -981,9 +1122,9 @@ void tst_QDateTime::toString_textDate_extra()
auto endsWithGmt = [](const QDateTime &dt) {
return dt.toString().endsWith(QLatin1String("GMT"));
};
- QDateTime dt = QDateTime::fromMSecsSinceEpoch(0, Qt::LocalTime);
+ QDateTime dt = QDateTime::fromMSecsSinceEpoch(0);
QVERIFY(!endsWithGmt(dt));
- dt = QDateTime::fromMSecsSinceEpoch(0, Qt::UTC).toLocalTime();
+ dt = QDateTime::fromMSecsSinceEpoch(0, UTC).toLocalTime();
QVERIFY(!endsWithGmt(dt));
#if QT_CONFIG(timezone)
@@ -1016,7 +1157,7 @@ void tst_QDateTime::toString_textDate_extra()
else
QCOMPARE(dt.toString(), QLatin1String("Thu Jan 1 00:00:00 1970"));
#endif
- dt = QDateTime::fromMSecsSinceEpoch(0, Qt::UTC);
+ dt = QDateTime::fromMSecsSinceEpoch(0, UTC);
QVERIFY(endsWithGmt(dt));
}
@@ -1031,22 +1172,22 @@ void tst_QDateTime::toString_rfcDate_data()
<< QString("09 Nov 1978 13:28:34 +0100");
}
QTest::newRow("UTC")
- << QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34), Qt::UTC)
+ << QDateTime(QDate(1978, 11, 9), QTime(13, 28, 34), UTC)
<< QString("09 Nov 1978 13:28:34 +0000");
QDateTime dt(QDate(1978, 11, 9), QTime(13, 28, 34));
- dt.setOffsetFromUtc(19800);
+ dt.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(19800));
QTest::newRow("positive OffsetFromUTC")
<< dt
<< QString("09 Nov 1978 13:28:34 +0530");
- dt.setOffsetFromUtc(-7200);
+ dt.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(-7200));
QTest::newRow("negative OffsetFromUTC")
<< dt
<< QString("09 Nov 1978 13:28:34 -0200");
QTest::newRow("invalid")
- << QDateTime(QDate(1978, 13, 9), QTime(13, 28, 34), Qt::UTC)
+ << QDateTime(QDate(1978, 13, 9), QTime(13, 28, 34), UTC)
<< QString();
QTest::newRow("999 milliseconds UTC")
- << QDateTime(QDate(2000, 1, 1), QTime(13, 28, 34, 999), Qt::UTC)
+ << QDateTime(QDate(2000, 1, 1), QTime(13, 28, 34, 999), UTC)
<< QString("01 Jan 2000 13:28:34 +0000");
}
@@ -1078,29 +1219,44 @@ void tst_QDateTime::toString_strformat()
{
// Most tests are in QLocale, just test that the api works.
QDate testDate(2013, 1, 1);
- QTime testTime(1, 2, 3);
- QDateTime testDateTime(testDate, testTime, Qt::UTC);
+ QTime testTime(1, 2, 3, 456);
+ QDateTime testDateTime(testDate, testTime, UTC);
QCOMPARE(testDate.toString("yyyy-MM-dd"), QString("2013-01-01"));
QCOMPARE(testTime.toString("hh:mm:ss"), QString("01:02:03"));
+ QCOMPARE(testTime.toString("hh:mm:ss.zz"), QString("01:02:03.456"));
QCOMPARE(testDateTime.toString("yyyy-MM-dd hh:mm:ss t"), QString("2013-01-01 01:02:03 UTC"));
- // TODO QTBUG-95966: find better ways to use repeated 't'
- QCOMPARE(testDateTime.toString("yyyy-MM-dd hh:mm:ss tt"), QString("2013-01-01 01:02:03 UTCUTC"));
+ QCOMPARE(testDateTime.toString("yyyy-MM-dd hh:mm:ss tt"), QString("2013-01-01 01:02:03 +0000"));
+ QCOMPARE(testDateTime.toString("yyyy-MM-dd hh:mm:ss ttt"), QString("2013-01-01 01:02:03 +00:00"));
+ QCOMPARE(testDateTime.toString("yyyy-MM-dd hh:mm:ss tttt"), QString("2013-01-01 01:02:03 UTC"));
}
#endif // datestring
void tst_QDateTime::addDays()
{
- for (int pass = 0; pass < 2; ++pass) {
- QDateTime dt(QDate(2004, 1, 1), QTime(12, 34, 56), pass == 0 ? Qt::LocalTime : Qt::UTC);
- dt = dt.addDays(185);
+ const QTimeZone zones[] = {
+ QTimeZone(QTimeZone::LocalTime),
+ QTimeZone(QTimeZone::UTC),
+#if QT_CONFIG(timezone)
+ QTimeZone("Europe/Oslo"),
+#endif
+ QTimeZone::fromSecondsAheadOfUtc(3600)
+ };
+ for (const auto &zone : zones) {
+ QDateTime dt = QDateTime(QDate(2004, 1, 1), QTime(12, 34, 56), zone).addDays(185);
QVERIFY(dt.date().year() == 2004 && dt.date().month() == 7 && dt.date().day() == 4);
QVERIFY(dt.time().hour() == 12 && dt.time().minute() == 34 && dt.time().second() == 56
&& dt.time().msec() == 0);
- QCOMPARE(dt.timeSpec(), (pass == 0 ? Qt::LocalTime : Qt::UTC));
+ QCOMPARE(dt.timeRepresentation(), zone);
dt = dt.addDays(-185);
QCOMPARE(dt.date(), QDate(2004, 1, 1));
QCOMPARE(dt.time(), QTime(12, 34, 56));
+
+ // Test we can do this before time-zones existed:
+ dt = QDateTime(QDate(1704, 1, 1), QTime(12, 0), zone).addDays(185);
+ QCOMPARE(dt.date(), QDate(1704, 7, 4));
+ QCOMPARE(dt.time(), QTime(12, 0));
+ QCOMPARE(dt.timeRepresentation(), zone);
}
QDateTime dt(QDate(1752, 9, 14), QTime(12, 34, 56));
@@ -1115,19 +1271,19 @@ void tst_QDateTime::addDays()
}
// Test preserves TimeSpec
- QDateTime dt1(QDate(2013, 1, 1), QTime(0, 0), Qt::UTC);
+ QDateTime dt1(QDate(2013, 1, 1), QTime(0, 0), UTC);
QDateTime dt2 = dt1.addDays(2);
QCOMPARE(dt2.date(), QDate(2013, 1, 3));
QCOMPARE(dt2.time(), QTime(0, 0));
QCOMPARE(dt2.timeSpec(), Qt::UTC);
- dt1 = QDateTime(QDate(2013, 1, 1), QTime(0, 0), Qt::LocalTime);
+ dt1 = QDateTime(QDate(2013, 1, 1), QTime(0, 0));
dt2 = dt1.addDays(2);
QCOMPARE(dt2.date(), QDate(2013, 1, 3));
QCOMPARE(dt2.time(), QTime(0, 0));
QCOMPARE(dt2.timeSpec(), Qt::LocalTime);
- dt1 = QDateTime(QDate(2013, 1, 1), QTime(0, 0), Qt::OffsetFromUTC, 60*60);
+ dt1 = QDateTime(QDate(2013, 1, 1), QTime(0, 0), QTimeZone::fromSecondsAheadOfUtc(60 * 60));
dt2 = dt1.addDays(2);
QCOMPARE(dt2.date(), QDate(2013, 1, 3));
QCOMPARE(dt2.time(), QTime(0, 0));
@@ -1144,15 +1300,62 @@ void tst_QDateTime::addDays()
QCOMPARE(dt2.timeSpec(), Qt::TimeZone);
QCOMPARE(dt2.timeZone(), cet);
}
-#endif
+# ifndef INADEQUATE_TZ_DATA
+ if (const QTimeZone lint("Pacific/Kiritimati"); lint.isValid()) {
+ // Line Islands Time skipped Sat 1994-12-31:
+ dt1 = QDateTime(QDate(1994, 12, 30), QTime(12, 0), lint);
+ dt2 = QDateTime(QDate(1995, 1, 1), QTime(12, 0), lint);
+ // Trying to step into the hole gets the other side:
+ QCOMPARE(dt1.addDays(1), dt2);
+ QCOMPARE(dt2.addDays(-1), dt1);
+ // But the other side is in fact two days away:
+ QCOMPARE(dt1.addDays(2), dt2);
+ QCOMPARE(dt2.addDays(-2), dt1);
+ QCOMPARE(dt1.daysTo(dt2), 2);
+ }
+# ifndef Q_OS_DARWIN
+ if (const QTimeZone alaska("America/Anchorage"); alaska.isValid()) {
+ // On Julian date 1867, Sat Oct 7 (at 14:31 local solar mean time for
+ // Anchorage, 15:30 LMT in Sitka, which hosted the transfer ceremony)
+ // Russia sold Alaska to the USA, which changed the calendar to
+ // Gregorian, hence the date to Fri Oct 18. Compare addSecs:Alaska-Day.
+ // Friday evening and Saturday morning were repeated, with different dates.
+ // Friday noon, as described by the Russians:
+ dt1 = QDateTime(QDate(1867, 10, 6, QCalendar(QCalendar::System::Julian)),
+ QTime(12, 0), alaska);
+ // Sunday noon, as described by the Americans:
+ dt2 = QDateTime(QDate(1867, 10, 20), QTime(12, 0), alaska);
+ // Three elapsed days, but daysTo() and addDays only see two:
+ QCOMPARE(dt1.addDays(2), dt2);
+ QCOMPARE(dt2.addDays(-2), dt1);
+ QCOMPARE(dt1.daysTo(dt2), 2);
+ // Stepping into the duplicated day (Julian 7th, Gregorian 19th) gets
+ // the nearer side, with the same nominal date (and time):
+ QCOMPARE(dt1.addDays(1).date(), dt2.addDays(-1).date());
+ QCOMPARE(dt1.addDays(1).time(), dt2.addDays(-1).time());
+ QCOMPARE(dt1.addDays(1).daysTo(dt2.addDays(-1)), 0);
+ // Yet they differ by a day:
+ QCOMPARE_NE(dt1.addDays(1), dt2.addDays(-1));
+ QCOMPARE(dt1.addDays(1).secsTo(dt2.addDays(-1)), 24 * 60 * 60);
+ // Stepping from one duplicate one day towards the other jumps it:
+ QCOMPARE(dt1, dt2.addDays(-1).addDays(-1));
+ QCOMPARE(dt1.addDays(1).addDays(1), dt2);
+ }
+# endif // Darwin
+# endif // inadequate zone data
+#endif // timezone
- // Test last UTC second of 1969 *is* valid (despite being time_t(-1))
- dt1 = QDateTime(QDate(1969, 12, 30), QTime(23, 59, 59), Qt::UTC).toLocalTime().addDays(1);
- QVERIFY(dt1.isValid());
- QCOMPARE(dt1.toSecsSinceEpoch(), -1);
- dt2 = QDateTime(QDate(1970, 1, 1), QTime(23, 59, 59), Qt::UTC).toLocalTime().addDays(-1);
- QVERIFY(dt2.isValid());
- QCOMPARE(dt2.toSecsSinceEpoch(), -1);
+ // Baja Mexico has a transition at the epoch, see fromStringDateFormat_data().
+ if (QDateTime(QDate(1969, 12, 30), QTime(0, 0)).secsTo(
+ QDateTime(QDate(1970, 1, 2), QTime(0, 0))) == 3 * 24 * 60 * 60) {
+ // Test last UTC second of 1969 *is* valid (despite being time_t(-1))
+ dt1 = QDateTime(QDate(1969, 12, 30), QTime(23, 59, 59), UTC).toLocalTime().addDays(1);
+ QVERIFY(dt1.isValid());
+ QCOMPARE(dt1.toSecsSinceEpoch(), -1);
+ dt2 = QDateTime(QDate(1970, 1, 1), QTime(23, 59, 59), UTC).toLocalTime().addDays(-1);
+ QVERIFY(dt2.isValid());
+ QCOMPARE(dt2.toSecsSinceEpoch(), -1);
+ }
}
void tst_QDateTime::addInvalid()
@@ -1172,7 +1375,7 @@ void tst_QDateTime::addInvalid()
offset = bad.addMSecs(73);
QVERIFY(offset.isNull());
- QDateTime bound = QDateTime::fromMSecsSinceEpoch(std::numeric_limits<qint64>::min(), Qt::UTC);
+ QDateTime bound = QDateTime::fromMSecsSinceEpoch(std::numeric_limits<qint64>::min(), UTC);
QVERIFY(bound.isValid());
offset = bound.addMSecs(-1);
QVERIFY(!offset.isValid());
@@ -1251,13 +1454,13 @@ void tst_QDateTime::addMonths()
QCOMPARE(end.time(), testTime);
QCOMPARE(end.timeSpec(), Qt::LocalTime);
- start = QDateTime(testDate, testTime, Qt::UTC);
+ start = QDateTime(testDate, testTime, UTC);
end = start.addMonths(months);
QCOMPARE(end.date(), resultDate);
QCOMPARE(end.time(), testTime);
QCOMPARE(end.timeSpec(), Qt::UTC);
- start = QDateTime(testDate, testTime, Qt::OffsetFromUTC, 60 * 60);
+ start = QDateTime(testDate, testTime, QTimeZone::fromSecondsAheadOfUtc(60 * 60));
end = start.addMonths(months);
QCOMPARE(end.date(), resultDate);
QCOMPARE(end.time(), testTime);
@@ -1303,13 +1506,13 @@ void tst_QDateTime::addYears()
QCOMPARE(end.time(), testTime);
QCOMPARE(end.timeSpec(), Qt::LocalTime);
- start = QDateTime(startDate, testTime, Qt::UTC);
+ start = QDateTime(startDate, testTime, UTC);
end = start.addYears(years1).addYears(years2);
QCOMPARE(end.date(), resultDate);
QCOMPARE(end.time(), testTime);
QCOMPARE(end.timeSpec(), Qt::UTC);
- start = QDateTime(startDate, testTime, Qt::OffsetFromUTC, 60 * 60);
+ start = QDateTime(startDate, testTime, QTimeZone::fromSecondsAheadOfUtc(60 * 60));
end = start.addYears(years1).addYears(years2);
QCOMPARE(end.date(), resultDate);
QCOMPARE(end.time(), testTime);
@@ -1328,107 +1531,144 @@ void tst_QDateTime::addMSecs_data()
const qint64 daySecs(86400);
QTest::newRow("utc0")
- << QDateTime(QDate(2004, 1, 1), standardTime, Qt::UTC) << daySecs
- << QDateTime(QDate(2004, 1, 2), standardTime, Qt::UTC);
+ << QDateTime(QDate(2004, 1, 1), standardTime, UTC) << daySecs
+ << QDateTime(QDate(2004, 1, 2), standardTime, UTC);
QTest::newRow("utc1")
- << QDateTime(QDate(2004, 1, 1), standardTime, Qt::UTC) << (daySecs * 185)
- << QDateTime(QDate(2004, 7, 4), standardTime, Qt::UTC);
+ << QDateTime(QDate(2004, 1, 1), standardTime, UTC) << (daySecs * 185)
+ << QDateTime(QDate(2004, 7, 4), standardTime, UTC);
QTest::newRow("utc2")
- << QDateTime(QDate(2004, 1, 1), standardTime, Qt::UTC) << (daySecs * 366)
- << QDateTime(QDate(2005, 1, 1), standardTime, Qt::UTC);
+ << QDateTime(QDate(2004, 1, 1), standardTime, UTC) << (daySecs * 366)
+ << QDateTime(QDate(2005, 1, 1), standardTime, UTC);
QTest::newRow("utc3")
- << QDateTime(QDate(1760, 1, 1), standardTime, Qt::UTC) << daySecs
- << QDateTime(QDate(1760, 1, 2), standardTime, Qt::UTC);
+ << QDateTime(QDate(1760, 1, 1), standardTime, UTC) << daySecs
+ << QDateTime(QDate(1760, 1, 2), standardTime, UTC);
QTest::newRow("utc4")
- << QDateTime(QDate(1760, 1, 1), standardTime, Qt::UTC) << (daySecs * 185)
- << QDateTime(QDate(1760, 7, 4), standardTime, Qt::UTC);
+ << QDateTime(QDate(1760, 1, 1), standardTime, UTC) << (daySecs * 185)
+ << QDateTime(QDate(1760, 7, 4), standardTime, UTC);
QTest::newRow("utc5")
- << QDateTime(QDate(1760, 1, 1), standardTime, Qt::UTC) << (daySecs * 366)
- << QDateTime(QDate(1761, 1, 1), standardTime, Qt::UTC);
+ << QDateTime(QDate(1760, 1, 1), standardTime, UTC) << (daySecs * 366)
+ << QDateTime(QDate(1761, 1, 1), standardTime, UTC);
QTest::newRow("utc6")
- << QDateTime(QDate(4000, 1, 1), standardTime, Qt::UTC) << daySecs
- << QDateTime(QDate(4000, 1, 2), standardTime, Qt::UTC);
+ << QDateTime(QDate(4000, 1, 1), standardTime, UTC) << daySecs
+ << QDateTime(QDate(4000, 1, 2), standardTime, UTC);
QTest::newRow("utc7")
- << QDateTime(QDate(4000, 1, 1), standardTime, Qt::UTC) << (daySecs * 185)
- << QDateTime(QDate(4000, 7, 4), standardTime, Qt::UTC);
+ << QDateTime(QDate(4000, 1, 1), standardTime, UTC) << (daySecs * 185)
+ << QDateTime(QDate(4000, 7, 4), standardTime, UTC);
QTest::newRow("utc8")
- << QDateTime(QDate(4000, 1, 1), standardTime, Qt::UTC) << (daySecs * 366)
- << QDateTime(QDate(4001, 1, 1), standardTime, Qt::UTC);
+ << QDateTime(QDate(4000, 1, 1), standardTime, UTC) << (daySecs * 366)
+ << QDateTime(QDate(4001, 1, 1), standardTime, UTC);
QTest::newRow("utc9")
- << QDateTime(QDate(4000, 1, 1), standardTime, Qt::UTC) << qint64(0)
- << QDateTime(QDate(4000, 1, 1), standardTime, Qt::UTC);
+ << QDateTime(QDate(4000, 1, 1), standardTime, UTC) << qint64(0)
+ << QDateTime(QDate(4000, 1, 1), standardTime, UTC);
if (zoneIsCET) {
QTest::newRow("cet0")
- << QDateTime(QDate(2004, 1, 1), standardTime, Qt::LocalTime) << daySecs
- << QDateTime(QDate(2004, 1, 2), standardTime, Qt::LocalTime);
+ << QDateTime(QDate(2004, 1, 1), standardTime) << daySecs
+ << QDateTime(QDate(2004, 1, 2), standardTime);
QTest::newRow("cet1")
- << QDateTime(QDate(2004, 1, 1), standardTime, Qt::LocalTime) << (daySecs * 185)
- << QDateTime(QDate(2004, 7, 4), daylightTime, Qt::LocalTime);
+ << QDateTime(QDate(2004, 1, 1), standardTime) << (daySecs * 185)
+ << QDateTime(QDate(2004, 7, 4), daylightTime);
QTest::newRow("cet2")
- << QDateTime(QDate(2004, 1, 1), standardTime, Qt::LocalTime) << (daySecs * 366)
- << QDateTime(QDate(2005, 1, 1), standardTime, Qt::LocalTime);
+ << QDateTime(QDate(2004, 1, 1), standardTime) << (daySecs * 366)
+ << QDateTime(QDate(2005, 1, 1), standardTime);
QTest::newRow("cet3")
- << QDateTime(QDate(1760, 1, 1), standardTime, Qt::LocalTime) << daySecs
- << QDateTime(QDate(1760, 1, 2), standardTime, Qt::LocalTime);
+ << QDateTime(QDate(1760, 1, 1), standardTime) << daySecs
+ << QDateTime(QDate(1760, 1, 2), standardTime);
QTest::newRow("cet4")
- << QDateTime(QDate(1760, 1, 1), standardTime, Qt::LocalTime) << (daySecs * 185)
- << QDateTime(QDate(1760, 7, 4), standardTime, Qt::LocalTime);
+ << QDateTime(QDate(1760, 1, 1), standardTime) << (daySecs * 185)
+ << QDateTime(QDate(1760, 7, 4), standardTime);
QTest::newRow("cet5")
- << QDateTime(QDate(1760, 1, 1), standardTime, Qt::LocalTime) << (daySecs * 366)
- << QDateTime(QDate(1761, 1, 1), standardTime, Qt::LocalTime);
+ << QDateTime(QDate(1760, 1, 1), standardTime) << (daySecs * 366)
+ << QDateTime(QDate(1761, 1, 1), standardTime);
QTest::newRow("cet6")
- << QDateTime(QDate(4000, 1, 1), standardTime, Qt::LocalTime) << daySecs
- << QDateTime(QDate(4000, 1, 2), standardTime, Qt::LocalTime);
+ << QDateTime(QDate(4000, 1, 1), standardTime) << daySecs
+ << QDateTime(QDate(4000, 1, 2), standardTime);
QTest::newRow("cet7")
- << QDateTime(QDate(4000, 1, 1), standardTime, Qt::LocalTime) << (daySecs * 185)
- << QDateTime(QDate(4000, 7, 4), daylightTime, Qt::LocalTime);
+ << QDateTime(QDate(4000, 1, 1), standardTime) << (daySecs * 185)
+ << QDateTime(QDate(4000, 7, 4), daylightTime);
QTest::newRow("cet8")
- << QDateTime(QDate(4000, 1, 1), standardTime, Qt::LocalTime) << (daySecs * 366)
- << QDateTime(QDate(4001, 1, 1), standardTime, Qt::LocalTime);
+ << QDateTime(QDate(4000, 1, 1), standardTime) << (daySecs * 366)
+ << QDateTime(QDate(4001, 1, 1), standardTime);
QTest::newRow("cet9")
- << QDateTime(QDate(4000, 1, 1), standardTime, Qt::LocalTime) << qint64(0)
- << QDateTime(QDate(4000, 1, 1), standardTime, Qt::LocalTime);
+ << QDateTime(QDate(4000, 1, 1), standardTime) << qint64(0)
+ << QDateTime(QDate(4000, 1, 1), standardTime);
}
// Year sign change
QTest::newRow("toNegative")
- << QDateTime(QDate(1, 1, 1), QTime(0, 0), Qt::UTC) << qint64(-1)
- << QDateTime(QDate(-1, 12, 31), QTime(23, 59, 59), Qt::UTC);
+ << QDateTime(QDate(1, 1, 1), QTime(0, 0), UTC) << qint64(-1)
+ << QDateTime(QDate(-1, 12, 31), QTime(23, 59, 59), UTC);
QTest::newRow("toPositive")
- << QDateTime(QDate(-1, 12, 31), QTime(23, 59, 59), Qt::UTC) << qint64(1)
- << QDateTime(QDate(1, 1, 1), QTime(0, 0), Qt::UTC);
+ << QDateTime(QDate(-1, 12, 31), QTime(23, 59, 59), UTC) << qint64(1)
+ << QDateTime(QDate(1, 1, 1), QTime(0, 0), UTC);
QTest::newRow("invalid") << QDateTime() << qint64(1) << QDateTime();
// Check Offset details are preserved
QTest::newRow("offset0")
- << QDateTime(QDate(2013, 1, 1), QTime(1, 2, 3), Qt::OffsetFromUTC, 60 * 60)
+ << QDateTime(QDate(2013, 1, 1), QTime(1, 2, 3), QTimeZone::fromSecondsAheadOfUtc(60 * 60))
<< qint64(60 * 60)
- << QDateTime(QDate(2013, 1, 1), QTime(2, 2, 3), Qt::OffsetFromUTC, 60 * 60);
+ << QDateTime(QDate(2013, 1, 1), QTime(2, 2, 3), QTimeZone::fromSecondsAheadOfUtc(60 * 60));
// Check last second of 1969
QTest::newRow("epoch-1s-utc")
- << QDateTime(QDate(1970, 1, 1), QTime(0, 0), Qt::UTC) << qint64(-1)
- << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59), Qt::UTC);
+ << QDate(1970, 1, 1).startOfDay(UTC) << qint64(-1)
+ << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59), UTC);
QTest::newRow("epoch-1s-local")
- << QDateTime(QDate(1970, 1, 1), QTime(0, 0)) << qint64(-1)
+ << QDate(1970, 1, 1).startOfDay() << qint64(-1)
<< QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59));
QTest::newRow("epoch-1s-utc-as-local")
- << QDate(1970, 1, 1).startOfDay(Qt::UTC).toLocalTime() << qint64(-1)
- << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59), Qt::UTC).toLocalTime();
+ << QDate(1970, 1, 1).startOfDay(UTC).toLocalTime() << qint64(-1)
+ << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59), UTC).toLocalTime();
// Overflow and Underflow
const qint64 maxSeconds = std::numeric_limits<qint64>::max() / 1000;
QTest::newRow("after-last")
- << QDateTime::fromSecsSinceEpoch(maxSeconds, Qt::UTC) << qint64(1) << QDateTime();
+ << QDateTime::fromSecsSinceEpoch(maxSeconds, UTC) << qint64(1) << QDateTime();
QTest::newRow("to-last")
- << QDateTime::fromSecsSinceEpoch(maxSeconds - 1, Qt::UTC) << qint64(1)
- << QDateTime::fromSecsSinceEpoch(maxSeconds, Qt::UTC);
+ << QDateTime::fromSecsSinceEpoch(maxSeconds - 1, UTC) << qint64(1)
+ << QDateTime::fromSecsSinceEpoch(maxSeconds, UTC);
QTest::newRow("before-first")
- << QDateTime::fromSecsSinceEpoch(-maxSeconds, Qt::UTC) << qint64(-1) << QDateTime();
+ << QDateTime::fromSecsSinceEpoch(-maxSeconds, UTC) << qint64(-1) << QDateTime();
QTest::newRow("to-first")
- << QDateTime::fromSecsSinceEpoch(1 - maxSeconds, Qt::UTC) << qint64(-1)
- << QDateTime::fromSecsSinceEpoch(-maxSeconds, Qt::UTC);
+ << QDateTime::fromSecsSinceEpoch(1 - maxSeconds, UTC) << qint64(-1)
+ << QDateTime::fromSecsSinceEpoch(-maxSeconds, UTC);
+
+#if QT_CONFIG(timezone)
+ if (const QTimeZone cet("Europe/Oslo"); cet.isValid()) {
+ QTest::newRow("CET-spring-forward")
+ << QDateTime(QDate(2023, 3, 26), QTime(1, 30), cet) << qint64(60 * 60)
+ << QDateTime(QDate(2023, 3, 26), QTime(3, 30), cet);
+ QTest::newRow("CET-fall-back")
+ << QDateTime(QDate(2023, 10, 29), QTime(1, 30), cet) << qint64(3 * 60 * 60)
+ << QDateTime(QDate(2023, 10, 29), QTime(3, 30), cet);
+ }
+# ifndef INADEQUATE_TZ_DATA
+ const QTimeZone lint("Pacific/Kiritimati");
+ if (lint.isValid()) {
+ // Line Islands Time skipped Sat 1994-12-31:
+ QTest::newRow("Kiritimati-day-off")
+ << QDateTime(QDate(1994, 12, 30), QTime(23, 30), lint) << qint64(60 * 60)
+ << QDateTime(QDate(1995, 1, 1), QTime(0, 30), lint);
+ }
+# ifndef Q_OS_DARWIN
+ if (const QTimeZone alaska("America/Anchorage"); alaska.isValid()) {
+ // On Julian date 1867, Sat Oct 7 (at 14:31 local solar mean time for
+ // Anchorage, 15:30 LMT in Sitka, which hosted the transfer ceremony)
+ // Russia sold Alaska to the USA, which changed the calendar to
+ // Gregorian, hence the date to Fri Oct 18. Contrast addDays().
+ const QDate sat(1867, 10, 19);
+ Q_ASSERT(sat == QDate(1867, 10, 7, QCalendar(QCalendar::System::Julian)));
+ // At the start of the day, it was Sat 7th; by evening it was Fri 18th;
+ // then the next day was Sat 19th.
+ QTest::newRow("Alaska-Day")
+ // The actual morning of the hand-over:
+ << QDateTime(sat, QTime(6, 0), alaska) << qint64(12 * 60 * 60)
+ // The evening of the same day.
+ << QDateTime(sat, QTime(18, 0), alaska).addDays(-1);
+ }
+# endif // Darwin
+# endif // inadequate zone data
+#endif // timezone
}
void tst_QDateTime::addSecs_data()
@@ -1438,9 +1678,9 @@ void tst_QDateTime::addSecs_data()
const qint64 maxSeconds = std::numeric_limits<qint64>::max() / 1000;
// Results would be representable, but the step isn't
QTest::newRow("leap-up")
- << QDateTime::fromSecsSinceEpoch(-1, Qt::UTC) << 1 + maxSeconds << QDateTime();
+ << QDateTime::fromSecsSinceEpoch(-1, UTC) << 1 + maxSeconds << QDateTime();
QTest::newRow("leap-down")
- << QDateTime::fromSecsSinceEpoch(1, Qt::UTC) << -1 - maxSeconds << QDateTime();
+ << QDateTime::fromSecsSinceEpoch(1, UTC) << -1 - maxSeconds << QDateTime();
}
void tst_QDateTime::addSecs()
@@ -1449,14 +1689,30 @@ void tst_QDateTime::addSecs()
QFETCH(const qint64, nsecs);
QFETCH(const QDateTime, result);
QDateTime test = dt.addSecs(nsecs);
+ QDateTime test2 = dt + std::chrono::seconds(nsecs);
+ QDateTime test3 = dt;
+ test3 += std::chrono::seconds(nsecs);
if (!result.isValid()) {
QVERIFY(!test.isValid());
+ QVERIFY(!test2.isValid());
+ QVERIFY(!test3.isValid());
} else {
QCOMPARE(test, result);
+ QCOMPARE(test2, result);
+ QCOMPARE(test3, result);
QCOMPARE(test.timeSpec(), dt.timeSpec());
- if (test.timeSpec() == Qt::OffsetFromUTC)
+ QCOMPARE(test2.timeSpec(), dt.timeSpec());
+ QCOMPARE(test3.timeSpec(), dt.timeSpec());
+ if (test.timeSpec() == Qt::OffsetFromUTC) {
QCOMPARE(test.offsetFromUtc(), dt.offsetFromUtc());
+ QCOMPARE(test2.offsetFromUtc(), dt.offsetFromUtc());
+ QCOMPARE(test3.offsetFromUtc(), dt.offsetFromUtc());
+ }
QCOMPARE(result.addSecs(-nsecs), dt);
+ QCOMPARE(result - std::chrono::seconds(nsecs), dt);
+ test3 -= std::chrono::seconds(nsecs);
+ QCOMPARE(test3, dt);
+ QCOMPARE(dt.secsTo(result), nsecs);
}
}
@@ -1466,18 +1722,29 @@ void tst_QDateTime::addMSecs()
QFETCH(const qint64, nsecs);
QFETCH(const QDateTime, result);
- QDateTime test = dt.addMSecs(qint64(nsecs) * 1000);
- if (!result.isValid()) {
- QVERIFY(!test.isValid());
- } else {
- QCOMPARE(test, result);
- QCOMPARE(test.timeSpec(), dt.timeSpec());
- if (test.timeSpec() == Qt::OffsetFromUTC)
- QCOMPARE(test.offsetFromUtc(), dt.offsetFromUtc());
- QCOMPARE(result.addMSecs(qint64(-nsecs) * 1000), dt);
- }
+ const auto verify = [&](const QDateTime &test) {
+ if (!result.isValid()) {
+ QVERIFY(!test.isValid());
+ } else {
+ QCOMPARE(test, result);
+ QCOMPARE(test.timeSpec(), dt.timeSpec());
+ if (test.timeSpec() == Qt::OffsetFromUTC)
+ QCOMPARE(test.offsetFromUtc(), dt.offsetFromUtc());
+ QCOMPARE(result.addMSecs(qint64(-nsecs) * 1000), dt);
+ }
+ };
+#define VERIFY(datum) \
+ verify(datum); \
+ if (QTest::currentTestFailed()) \
+ return
+
+ VERIFY(dt.addMSecs(qint64(nsecs) * 1000));
+ VERIFY(dt.addDuration(std::chrono::seconds(nsecs)));
+ VERIFY(dt.addDuration(std::chrono::milliseconds(nsecs * 1000)));
+#undef VERIFY
}
+#if QT_DEPRECATED_SINCE(6, 9)
void tst_QDateTime::toTimeSpec_data()
{
if (!zoneIsCET)
@@ -1490,56 +1757,64 @@ void tst_QDateTime::toTimeSpec_data()
QTime localStandardTime(5, 20, 30);
QTime localDaylightTime(6, 20, 30);
- QTest::newRow("winter1") << QDateTime(QDate(2004, 1, 1), utcTime, Qt::UTC)
- << QDateTime(QDate(2004, 1, 1), localStandardTime, Qt::LocalTime);
- QTest::newRow("winter2") << QDateTime(QDate(2004, 2, 29), utcTime, Qt::UTC)
- << QDateTime(QDate(2004, 2, 29), localStandardTime, Qt::LocalTime);
+ QTest::newRow("winter1")
+ << QDateTime(QDate(2004, 1, 1), utcTime, UTC)
+ << QDateTime(QDate(2004, 1, 1), localStandardTime);
+ QTest::newRow("winter2")
+ << QDateTime(QDate(2004, 2, 29), utcTime, UTC)
+ << QDateTime(QDate(2004, 2, 29), localStandardTime);
QTest::newRow("winter3")
- << QDateTime(QDate(1760, 2, 29), utcTime, Qt::UTC)
+ << QDateTime(QDate(1760, 2, 29), utcTime, UTC)
<< QDateTime(QDate(1760, 2, 29), localStandardTime.addSecs(preZoneFix));
- QTest::newRow("winter4") << QDateTime(QDate(6000, 2, 29), utcTime, Qt::UTC)
- << QDateTime(QDate(6000, 2, 29), localStandardTime, Qt::LocalTime);
+ QTest::newRow("winter4")
+ << QDateTime(QDate(6000, 2, 29), utcTime, UTC)
+ << QDateTime(QDate(6000, 2, 29), localStandardTime);
// Test mktime boundaries (1970 - 2038) and adjustDate().
QTest::newRow("1969/12/31 23:00 UTC")
- << QDateTime(QDate(1969, 12, 31), QTime(23, 0), Qt::UTC)
- << QDateTime(QDate(1970, 1, 1), QTime(0, 0), Qt::LocalTime);
+ << QDateTime(QDate(1969, 12, 31), QTime(23, 0), UTC)
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 0));
QTest::newRow("1969/12/31 23:59:59 UTC")
- << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59), Qt::UTC)
- << QDateTime(QDate(1970, 1, 1), QTime(0, 59, 59), Qt::LocalTime);
+ << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59), UTC)
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 59, 59));
QTest::newRow("2037/12/31 23:00 UTC")
- << QDateTime(QDate(2037, 12, 31), QTime(23, 0), Qt::UTC)
- << QDateTime(QDate(2038, 1, 1), QTime(0, 0), Qt::LocalTime);
+ << QDateTime(QDate(2037, 12, 31), QTime(23, 0), UTC)
+ << QDateTime(QDate(2038, 1, 1), QTime(0, 0));
QTest::newRow("-271821/4/20 00:00 UTC (JavaScript min date, start of day)")
- << QDateTime(QDate(-271821, 4, 20), QTime(0, 0), Qt::UTC)
+ << QDateTime(QDate(-271821, 4, 20), QTime(0, 0), UTC)
<< QDateTime(QDate(-271821, 4, 20), QTime(1, 0)).addSecs(preZoneFix);
QTest::newRow("-271821/4/20 23:00 UTC (JavaScript min date, end of day)")
- << QDateTime(QDate(-271821, 4, 20), QTime(23, 0), Qt::UTC)
+ << QDateTime(QDate(-271821, 4, 20), QTime(23, 0), UTC)
<< QDateTime(QDate(-271821, 4, 21), QTime(0, 0)).addSecs(preZoneFix);
if (zoneIsCET) {
- QTest::newRow("summer1") << QDateTime(QDate(2004, 6, 30), utcTime, Qt::UTC)
- << QDateTime(QDate(2004, 6, 30), localDaylightTime, Qt::LocalTime);
+ QTest::newRow("summer1")
+ << QDateTime(QDate(2004, 6, 30), utcTime, UTC)
+ << QDateTime(QDate(2004, 6, 30), localDaylightTime);
QTest::newRow("summer2")
- << QDateTime(QDate(1760, 6, 30), utcTime, Qt::UTC)
+ << QDateTime(QDate(1760, 6, 30), utcTime, UTC)
<< QDateTime(QDate(1760, 6, 30), localStandardTime.addSecs(preZoneFix));
- QTest::newRow("summer3") << QDateTime(QDate(4000, 6, 30), utcTime, Qt::UTC)
- << QDateTime(QDate(4000, 6, 30), localDaylightTime, Qt::LocalTime);
+ QTest::newRow("summer3")
+ << QDateTime(QDate(4000, 6, 30), utcTime, UTC)
+ << QDateTime(QDate(4000, 6, 30), localDaylightTime);
QTest::newRow("275760/9/23 00:00 UTC (JavaScript max date, start of day)")
- << QDateTime(QDate(275760, 9, 23), QTime(0, 0), Qt::UTC)
- << QDateTime(QDate(275760, 9, 23), QTime(2, 0), Qt::LocalTime);
+ << QDate(275760, 9, 23).startOfDay(UTC)
+ << QDateTime(QDate(275760, 9, 23), QTime(2, 0));
QTest::newRow("275760/9/23 22:00 UTC (JavaScript max date, end of day)")
- << QDateTime(QDate(275760, 9, 23), QTime(22, 0), Qt::UTC)
- << QDateTime(QDate(275760, 9, 24), QTime(0, 0), Qt::LocalTime);
+ << QDateTime(QDate(275760, 9, 23), QTime(22, 0), UTC)
+ << QDate(275760, 9, 24).startOfDay();
}
- QTest::newRow("msec") << QDateTime(QDate(4000, 6, 30), utcTime.addMSecs(1), Qt::UTC)
- << QDateTime(QDate(4000, 6, 30), localDaylightTime.addMSecs(1), Qt::LocalTime);
+ QTest::newRow("msec")
+ << QDateTime(QDate(4000, 6, 30), utcTime.addMSecs(1), UTC)
+ << QDateTime(QDate(4000, 6, 30), localDaylightTime.addMSecs(1));
}
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QDateTime::toTimeSpec()
{
QFETCH(QDateTime, fromUtc);
@@ -1598,11 +1873,6 @@ void tst_QDateTime::toTimeSpec()
QCOMPARE(localToOffset.toTimeSpec(Qt::LocalTime), fromLocal);
}
-void tst_QDateTime::toLocalTime_data()
-{
- toTimeSpec_data();
-}
-
void tst_QDateTime::toLocalTime()
{
QFETCH(QDateTime, fromUtc);
@@ -1613,11 +1883,6 @@ void tst_QDateTime::toLocalTime()
QCOMPARE(fromUtc.toLocalTime(), fromLocal.toLocalTime());
}
-void tst_QDateTime::toUTC_data()
-{
- toTimeSpec_data();
-}
-
void tst_QDateTime::toUTC()
{
QFETCH(QDateTime, fromUtc);
@@ -1637,6 +1902,8 @@ void tst_QDateTime::toUTC_extra()
QString t = dt.toUTC().toString("zzz");
QCOMPARE(s, t);
}
+QT_WARNING_POP
+#endif // 6.9 deprecation
void tst_QDateTime::daysTo()
{
@@ -1668,11 +1935,11 @@ void tst_QDateTime::secsTo_data()
addSecs_data();
QTest::newRow("disregard milliseconds #1")
- << QDateTime(QDate(2012, 3, 7), QTime(0, 58, 0, 0)) << qint64(60)
+ << QDateTime(QDate(2012, 3, 7), QTime(0, 58)) << qint64(60)
<< QDateTime(QDate(2012, 3, 7), QTime(0, 59, 0, 400));
QTest::newRow("disregard milliseconds #2")
- << QDateTime(QDate(2012, 3, 7), QTime(0, 59, 0, 0)) << qint64(60)
+ << QDateTime(QDate(2012, 3, 7), QTime(0, 59)) << qint64(60)
<< QDateTime(QDate(2012, 3, 7), QTime(1, 0, 0, 400));
}
@@ -1697,11 +1964,6 @@ void tst_QDateTime::secsTo()
}
}
-void tst_QDateTime::msecsTo_data()
-{
- addMSecs_data();
-}
-
void tst_QDateTime::msecsTo()
{
QFETCH(const QDateTime, dt);
@@ -1710,7 +1972,9 @@ void tst_QDateTime::msecsTo()
if (result.isValid()) {
QCOMPARE(dt.msecsTo(result), qint64(nsecs) * 1000);
+ QCOMPARE(result - dt, std::chrono::milliseconds(nsecs * 1000));
QCOMPARE(result.msecsTo(dt), -qint64(nsecs) * 1000);
+ QCOMPARE(dt - result, -std::chrono::milliseconds(nsecs * 1000));
QVERIFY((dt == result) == (0 == (qint64(nsecs) * 1000)));
QVERIFY((dt != result) == (0 != (qint64(nsecs) * 1000)));
QVERIFY((dt < result) == (0 < (qint64(nsecs) * 1000)));
@@ -1719,10 +1983,17 @@ void tst_QDateTime::msecsTo()
QVERIFY((dt >= result) == (0 >= (qint64(nsecs) * 1000)));
} else {
QVERIFY(dt.msecsTo(result) == 0);
+ QCOMPARE(result - dt, std::chrono::milliseconds(0));
QVERIFY(result.msecsTo(dt) == 0);
+ QCOMPARE(dt - result, std::chrono::milliseconds(0));
}
}
+void tst_QDateTime::orderingCompiles()
+{
+ QTestPrivate::testAllComparisonOperatorsCompile<QDateTime>();
+}
+
void tst_QDateTime::currentDateTime()
{
time_t buf1, buf2;
@@ -1742,30 +2013,32 @@ void tst_QDateTime::currentDateTime()
// 1 second difference from the more accurate method used by QDateTime::currentDateTime()
upperBound = upperBound.addSecs(2);
- QString details = QString("\n"
- "lowerBound: %1\n"
- "dt1: %2\n"
- "dt2: %3\n"
- "dt3: %4\n"
- "upperBound: %5\n")
- .arg(lowerBound.toSecsSinceEpoch())
- .arg(dt1.toSecsSinceEpoch())
- .arg(dt2.toSecsSinceEpoch())
- .arg(dt3.toSecsSinceEpoch())
- .arg(upperBound.toSecsSinceEpoch());
+ auto reporter = qScopeGuard([=]() {
+ qInfo("\n"
+ "lowerBound: %lld\n"
+ "dt1: %lld\n"
+ "dt2: %lld\n"
+ "dt3: %lld\n"
+ "upperBound: %lld\n",
+ lowerBound.toSecsSinceEpoch(),
+ dt1.toSecsSinceEpoch(),
+ dt2.toSecsSinceEpoch(),
+ dt3.toSecsSinceEpoch(),
+ upperBound.toSecsSinceEpoch());
+ });
+
+ QCOMPARE_LT(lowerBound, upperBound);
+ QCOMPARE_LE(lowerBound, dt1);
+ QCOMPARE_LT(dt1, upperBound);
+ QCOMPARE_LE(lowerBound, dt2);
+ QCOMPARE_LT(dt2, upperBound);
+ QCOMPARE_LE(lowerBound, dt3);
+ QCOMPARE_LT(dt3, upperBound);
+ reporter.dismiss();
- QVERIFY2(lowerBound < upperBound, qPrintable(details));
-
- QVERIFY2(lowerBound <= dt1, qPrintable(details));
- QVERIFY2(dt1 < upperBound, qPrintable(details));
- QVERIFY2(lowerBound <= dt2, qPrintable(details));
- QVERIFY2(dt2 < upperBound, qPrintable(details));
- QVERIFY2(lowerBound <= dt3, qPrintable(details));
- QVERIFY2(dt3 < upperBound, qPrintable(details));
-
- QVERIFY(dt1.timeSpec() == Qt::LocalTime);
- QVERIFY(dt2.timeSpec() == Qt::LocalTime);
- QVERIFY(dt3.timeSpec() == Qt::UTC);
+ QCOMPARE(dt1.timeSpec(), Qt::LocalTime);
+ QCOMPARE(dt2.timeSpec(), Qt::LocalTime);
+ QCOMPARE(dt3.timeSpec(), Qt::UTC);
}
void tst_QDateTime::currentDateTimeUtc()
@@ -1788,30 +2061,32 @@ void tst_QDateTime::currentDateTimeUtc()
// 1 second difference from the more accurate method used by QDateTime::currentDateTime()
upperBound = upperBound.addSecs(2);
- QString details = QString("\n"
- "lowerBound: %1\n"
- "dt1: %2\n"
- "dt2: %3\n"
- "dt3: %4\n"
- "upperBound: %5\n")
- .arg(lowerBound.toSecsSinceEpoch())
- .arg(dt1.toSecsSinceEpoch())
- .arg(dt2.toSecsSinceEpoch())
- .arg(dt3.toSecsSinceEpoch())
- .arg(upperBound.toSecsSinceEpoch());
+ auto reporter = qScopeGuard([=]() {
+ qInfo("\n"
+ "lowerBound: %lld\n"
+ "dt1: %lld\n"
+ "dt2: %lld\n"
+ "dt3: %lld\n"
+ "upperBound: %lld\n",
+ lowerBound.toSecsSinceEpoch(),
+ dt1.toSecsSinceEpoch(),
+ dt2.toSecsSinceEpoch(),
+ dt3.toSecsSinceEpoch(),
+ upperBound.toSecsSinceEpoch());
+ });
+
+ QCOMPARE_LT(lowerBound, upperBound);
+ QCOMPARE_LE(lowerBound, dt1);
+ QCOMPARE_LT(dt1, upperBound);
+ QCOMPARE_LE(lowerBound, dt2);
+ QCOMPARE_LT(dt2, upperBound);
+ QCOMPARE_LE(lowerBound, dt3);
+ QCOMPARE_LT(dt3, upperBound);
+ reporter.dismiss();
- QVERIFY2(lowerBound < upperBound, qPrintable(details));
-
- QVERIFY2(lowerBound <= dt1, qPrintable(details));
- QVERIFY2(dt1 < upperBound, qPrintable(details));
- QVERIFY2(lowerBound <= dt2, qPrintable(details));
- QVERIFY2(dt2 < upperBound, qPrintable(details));
- QVERIFY2(lowerBound <= dt3, qPrintable(details));
- QVERIFY2(dt3 < upperBound, qPrintable(details));
-
- QVERIFY(dt1.timeSpec() == Qt::UTC);
- QVERIFY(dt2.timeSpec() == Qt::LocalTime);
- QVERIFY(dt3.timeSpec() == Qt::UTC);
+ QCOMPARE(dt1.timeSpec(), Qt::UTC);
+ QCOMPARE(dt2.timeSpec(), Qt::LocalTime);
+ QCOMPARE(dt3.timeSpec(), Qt::UTC);
}
void tst_QDateTime::currentDateTimeUtc2()
@@ -1910,7 +2185,7 @@ void tst_QDateTime::daylightSavingsTimeChange()
QFETCH(int, months);
// First with simple construction
- QDateTime dt = QDateTime(outDST, QTime(0, 0, 0), Qt::LocalTime);
+ QDateTime dt = outDST.startOfDay();
int outDSTsecs = dt.toSecsSinceEpoch();
dt.setDate(inDST);
@@ -1935,29 +2210,29 @@ void tst_QDateTime::daylightSavingsTimeChange()
// now using fromSecsSinceEpoch
dt = QDateTime::fromSecsSinceEpoch(outDSTsecs);
- QCOMPARE(dt, QDateTime(outDST, QTime(0, 0, 0)));
+ QCOMPARE(dt, outDST.startOfDay());
dt.setDate(inDST);
dt = dt.addSecs(60);
- QCOMPARE(dt, QDateTime(inDST, QTime(0, 1, 0)));
+ QCOMPARE(dt, QDateTime(inDST, QTime(0, 1)));
// using addMonths:
dt = dt.addMonths(months).addSecs(60);
- QCOMPARE(dt, QDateTime(outDST, QTime(0, 2, 0)));
+ QCOMPARE(dt, QDateTime(outDST, QTime(0, 2)));
// back again:
dt = dt.addMonths(-months).addSecs(60);
- QCOMPARE(dt, QDateTime(inDST, QTime(0, 3, 0)));
+ QCOMPARE(dt, QDateTime(inDST, QTime(0, 3)));
// using addDays:
dt = dt.addDays(days).addSecs(60);
- QCOMPARE(dt, QDateTime(outDST, QTime(0, 4, 0)));
+ QCOMPARE(dt, QDateTime(outDST, QTime(0, 4)));
// back again:
dt = dt.addDays(-days).addSecs(60);
- QCOMPARE(dt, QDateTime(inDST, QTime(0, 5, 0)));
+ QCOMPARE(dt, QDateTime(inDST, QTime(0, 5)));
// Now use the result of a UTC -> LocalTime conversion
- dt = QDateTime(outDST, QTime(0, 0), Qt::LocalTime).toUTC();
- dt = QDateTime(dt.date(), dt.time(), Qt::UTC).toLocalTime();
+ dt = outDST.startOfDay().toUTC();
+ dt = QDateTime(dt.date(), dt.time(), UTC).toLocalTime();
QCOMPARE(dt, QDateTime(outDST, QTime(0, 0)));
// using addDays:
@@ -1982,6 +2257,7 @@ void tst_QDateTime::daylightSavingsTimeChange()
void tst_QDateTime::springForward_data()
{
+ QTest::addColumn<QTimeZone>("zone");
QTest::addColumn<QDate>("day"); // day of DST transition
QTest::addColumn<QTime>("time"); // in the "missing hour"
QTest::addColumn<int>("step"); // days to step; +ve from before, -ve from after
@@ -1995,67 +2271,136 @@ void tst_QDateTime::springForward_data()
document any such conflicts, if discovered.
See http://www.timeanddate.com/time/zones/ for data on more candidates to
- test.
- */
+ test. Note, however, that the IANA DB disagrees with it for some zones,
+ and is authoritative.
+ */
- uint winter = QDate(2015, 1, 1).startOfDay().toSecsSinceEpoch();
- uint summer = QDate(2015, 7, 1).startOfDay().toSecsSinceEpoch();
+ const QTimeZone local(QTimeZone::LocalTime);
+ const uint winter = QDate(2015, 1, 1).startOfDay(local).toSecsSinceEpoch();
+ const uint summer = QDate(2015, 7, 1).startOfDay(local).toSecsSinceEpoch();
if (winter == 1420066800 && summer == 1435701600) {
- QTest::newRow("CET from day before") << QDate(2015, 3, 29) << QTime(2, 30, 0) << 1 << 60;
- QTest::newRow("CET from day after") << QDate(2015, 3, 29) << QTime(2, 30, 0) << -1 << 120;
+ QTest::newRow("Local (CET) from day before")
+ << local << QDate(2015, 3, 29) << QTime(2, 30) << 1 << 60;
+ QTest::newRow("Local (CET) from day after")
+ << local << QDate(2015, 3, 29) << QTime(2, 30) << -1 << 120;
} else if (winter == 1420063200 && summer == 1435698000) {
- // e.g. Finland, where our CI runs ...
- QTest::newRow("EET from day before") << QDate(2015, 3, 29) << QTime(3, 30, 0) << 1 << 120;
- QTest::newRow("EET from day after") << QDate(2015, 3, 29) << QTime(3, 30, 0) << -1 << 180;
+ // EET: but there's some variation in the date and time.
+ // Asia/{Amman,Beirut,Gaza,Hebron}, Europe/Chisinau and Israel: at start of
+ QDate date(2015, 3, 29); // Sunday by default.
+ QTime time(0, 30);
+ if (auto thursday = QDate(2015, 3, 26); thursday.startOfDay(local).time() > time) {
+ // Asia/Damascus: start of March 26th.
+ date = thursday;
+ } else if (auto friday = QDate(2015, 3, 27); friday.startOfDay(local).time() > time) {
+ // Israel, Asia/{Jerusalem,Tel_Aviv}: start of March 27th (IANA DB).
+ date = friday;
+ } else if (friday.startOfDay(local).addSecs(2 * 60 * 60).time() == QTime(3, 0)) {
+ // Israel, Asia/{Jerusalem,Tel_Aviv} according to glibc at 02:00 on March 27th.
+ date = friday;
+ time = QTime(2, 30);
+ } else if (date.startOfDay(local).time() < time) {
+ // Most of Europeean EET, e.g. Finland.
+ time = QTime(3, 30);
+ }
+ QTest::newRow("Local (EET) from day before")
+ << local << date << time << 1 << 120;
+ QTest::newRow("Local (EET) from day after")
+ << local << date << time << -1 << 180;
} else if (winter == 1420070400 && summer == 1435705200) {
// Western European Time, WET/WEST; a.k.a. GMT/BST
- QTest::newRow("WET from day before") << QDate(2015, 3, 29) << QTime(1, 30, 0) << 1 << 0;
- QTest::newRow("WET from day after") << QDate(2015, 3, 29) << QTime(1, 30, 0) << -1 << 60;
+ QTest::newRow("Local (WET) from day before")
+ << local << QDate(2015, 3, 29) << QTime(1, 30) << 1 << 0;
+ QTest::newRow("Local (WET) from day after")
+ << local << QDate(2015, 3, 29) << QTime(1, 30) << -1 << 60;
} else if (winter == 1420099200 && summer == 1435734000) {
// Western USA, Canada: Pacific Time (e.g. US/Pacific)
- QTest::newRow("PT from day before") << QDate(2015, 3, 8) << QTime(2, 30, 0) << 1 << -480;
- QTest::newRow("PT from day after") << QDate(2015, 3, 8) << QTime(2, 30, 0) << -1 << -420;
+ QDate date(2015, 3, 8);
+ // America/Ensenada did its transition on April 5th, like the rest of Mexico.
+ if (QDate(2015, 4, 1).startOfDay().toSecsSinceEpoch() == 1427875200)
+ date = QDate(2015, 4, 5);
+ QTest::newRow("Local (PT) from day before")
+ << local << date << QTime(2, 30) << 1 << -480;
+ QTest::newRow("Local (PT) from day after")
+ << local << date << QTime(2, 30) << -1 << -420;
} else if (winter == 1420088400 && summer == 1435723200) {
// Eastern USA, Canada: Eastern Time (e.g. US/Eastern)
- QTest::newRow("ET from day before") << QDate(2015, 3, 8) << QTime(2, 30, 0) << 1 << -300;
- QTest::newRow("ET from day after") << QDate(2015, 3, 8) << QTime(2, 30, 0) << -1 << -240;
+ // Havana matches offset and date, but at midnight.
+ const QTime start = QDate(2015, 3, 8).startOfDay(local).time();
+ const QTime when = start == QTime(0, 0) ? QTime(2, 30) : QTime(0, 30);
+ QTest::newRow("Local(ET) from day before")
+ << local << QDate(2015, 3, 8) << when << 1 << -300;
+ QTest::newRow("Local(ET) from day after")
+ << local << QDate(2015, 3, 8) << when << -1 << -240;
+#if !QT_CONFIG(timezone)
} else {
// Includes the numbers you need to test for your zone, as above:
QString msg(QString::fromLatin1("No spring forward test data for this TZ (%1, %2)"
).arg(winter).arg(summer));
QSKIP(qPrintable(msg));
+#endif
+ }
+#if QT_CONFIG(timezone)
+ if (const QTimeZone cet("Europe/Oslo"); cet.isValid()) {
+ QTest::newRow("CET from day before")
+ << cet << QDate(2015, 3, 29) << QTime(2, 30) << 1 << 60;
+ QTest::newRow("CET from day after")
+ << cet << QDate(2015, 3, 29) << QTime(2, 30) << -1 << 120;
+ }
+ if (const QTimeZone eet("Europe/Helsinki"); eet.isValid()) {
+ QTest::newRow("EET from day before")
+ << eet << QDate(2015, 3, 29) << QTime(3, 30) << 1 << 120;
+ QTest::newRow("EET from day after")
+ << eet << QDate(2015, 3, 29) << QTime(3, 30) << -1 << 180;
+ }
+ if (const QTimeZone wet("Europe/Lisbon"); wet.isValid()) {
+ QTest::newRow("WET from day before")
+ << wet << QDate(2015, 3, 29) << QTime(1, 30) << 1 << 0;
+ QTest::newRow("WET from day after")
+ << wet << QDate(2015, 3, 29) << QTime(1, 30) << -1 << 60;
+ }
+ if (const QTimeZone pacific("America/Vancouver"); pacific.isValid()) {
+ QTest::newRow("PT from day before")
+ << pacific << QDate(2015, 3, 8) << QTime(2, 30) << 1 << -480;
+ QTest::newRow("PT from day after")
+ << pacific << QDate(2015, 3, 8) << QTime(2, 30) << -1 << -420;
+ }
+ if (const QTimeZone eastern("America/Ottawa"); eastern.isValid()) {
+ QTest::newRow("ET from day before")
+ << eastern << QDate(2015, 3, 8) << QTime(2, 30) << 1 << -300;
+ QTest::newRow("ET from day after")
+ << eastern << QDate(2015, 3, 8) << QTime(2, 30) << -1 << -240;
}
+#endif
}
void tst_QDateTime::springForward()
{
+ QFETCH(QTimeZone, zone);
QFETCH(QDate, day);
QFETCH(QTime, time);
QFETCH(int, step);
QFETCH(int, adjust);
- QDateTime direct = QDateTime(day.addDays(-step), time, Qt::LocalTime).addDays(step);
- if (direct.isValid()) { // mktime() may deem a time in the gap invalid
- QCOMPARE(direct.date(), day);
- QCOMPARE(direct.time().minute(), time.minute());
- QCOMPARE(direct.time().second(), time.second());
- int off = direct.time().hour() - time.hour();
- QVERIFY(off == 1 || off == -1);
- // Note: function doc claims always +1, but this should be reviewed !
- }
-
- // Repeat, but getting there via .toLocalTime():
- QDateTime detour = QDateTime(day.addDays(-step),
- time.addSecs(-60 * adjust),
- Qt::UTC).toLocalTime();
+ QDateTime direct = QDateTime(day.addDays(-step), time, zone).addDays(step);
+ QVERIFY(direct.isValid());
+ QCOMPARE(direct.date(), day);
+ QCOMPARE(direct.time().minute(), time.minute());
+ QCOMPARE(direct.time().second(), time.second());
+ const int off = step < 0 ? -1 : 1;
+ QCOMPARE(direct.time().hour() - time.hour(), off);
+ // adjust is the offset on the other side of the gap:
+ QCOMPARE(direct.offsetFromUtc(), (adjust + off * 60) * 60);
+
+ // Repeat, but getting there via .toTimeZone(). Apply adjust to datetime,
+ // not time, as the time wraps round if the adjustment crosses midnight.
+ QDateTime detour = QDateTime(day.addDays(-step), time,
+ UTC).addSecs(-60 * adjust).toTimeZone(zone);
QCOMPARE(detour.time(), time);
detour = detour.addDays(step);
// Insist on consistency:
- if (direct.isValid())
- QCOMPARE(detour, direct);
- else
- QVERIFY(!detour.isValid());
+ QCOMPARE(detour, direct);
+ QCOMPARE(detour.offsetFromUtc(), direct.offsetFromUtc());
}
void tst_QDateTime::operator_eqeq_data()
@@ -2069,14 +2414,14 @@ void tst_QDateTime::operator_eqeq_data()
QDateTime dateTime1a = dateTime1.addMSecs(1);
QDateTime dateTime2(QDate(2012, 20, 6), QTime(14, 33, 2, 500)); // Invalid
QDateTime dateTime2a = dateTime2.addMSecs(-1); // Still invalid
- QDateTime dateTime3(QDate(1970, 1, 1), QTime(0, 0), Qt::UTC); // UTC epoch
+ QDateTime dateTime3(QDate(1970, 1, 1), QTime(0, 0), UTC); // UTC epoch
QDateTime dateTime3a = dateTime3.addDays(1);
QDateTime dateTime3b = dateTime3.addDays(-1);
// Ensure that different times may be equal when considering timezone.
QDateTime dateTime3c(dateTime3.addSecs(3600));
- dateTime3c.setOffsetFromUtc(3600);
+ dateTime3c.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(3600));
QDateTime dateTime3d(dateTime3.addSecs(-3600));
- dateTime3d.setOffsetFromUtc(-3600);
+ dateTime3d.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(-3600));
QDateTime dateTime3e(dateTime3.date(), dateTime3.time()); // Local time's epoch
QTest::newRow("data0") << dateTime1 << dateTime1 << true << false;
@@ -2092,7 +2437,7 @@ void tst_QDateTime::operator_eqeq_data()
QTest::newRow("data10") << dateTime3 << dateTime3c << true << false;
QTest::newRow("data11") << dateTime3 << dateTime3d << true << false;
QTest::newRow("data12") << dateTime3c << dateTime3d << true << false;
- if (localTimeType == LocalTimeIsUtc)
+ if (epochTimeType == LocalTimeIsUtc)
QTest::newRow("data13") << dateTime3 << dateTime3e << true << false;
// ... but a zone (sometimes) ahead of or behind UTC (e.g. Europe/London)
// might agree with UTC about the epoch, all the same.
@@ -2102,8 +2447,8 @@ void tst_QDateTime::operator_eqeq_data()
if (zoneIsCET) {
QTest::newRow("data14")
- << QDateTime(QDate(2004, 1, 2), QTime(2, 2, 3), Qt::LocalTime)
- << QDateTime(QDate(2004, 1, 2), QTime(1, 2, 3), Qt::UTC) << true << true;
+ << QDateTime(QDate(2004, 1, 2), QTime(2, 2, 3))
+ << QDateTime(QDate(2004, 1, 2), QTime(1, 2, 3), UTC) << true << true;
QTest::newRow("local-fall-back") // Sun, 31 Oct 2004, 02:30, both ways round:
<< QDateTime::fromMSecsSinceEpoch(Q_INT64_C(1099186200000))
<< QDateTime::fromMSecsSinceEpoch(Q_INT64_C(1099182600000))
@@ -2127,23 +2472,16 @@ void tst_QDateTime::operator_eqeq()
QFETCH(bool, expectEqual);
QFETCH(bool, checkEuro);
- QVERIFY(dt1 == dt1);
- QVERIFY(!(dt1 != dt1));
-
- QVERIFY(dt2 == dt2);
- QVERIFY(!(dt2 != dt2));
+ QT_TEST_EQUALITY_OPS(dt1, dt1, true);
+ QT_TEST_EQUALITY_OPS(dt2, dt2, true);
+ QT_TEST_EQUALITY_OPS(dt1, dt2, expectEqual);
QVERIFY(dt1 != QDateTime::currentDateTime());
QVERIFY(dt2 != QDateTime::currentDateTime());
QVERIFY(dt1.toUTC() == dt1.toUTC());
- bool equal = dt1 == dt2;
- QCOMPARE(equal, expectEqual);
- bool notEqual = dt1 != dt2;
- QCOMPARE(notEqual, !expectEqual);
-
- if (equal)
+ if (expectEqual)
QVERIFY(qHash(dt1) == qHash(dt2));
if (checkEuro && zoneIsCET) {
@@ -2152,6 +2490,64 @@ void tst_QDateTime::operator_eqeq()
}
}
+void tst_QDateTime::ordering_data()
+{
+ QTest::addColumn<QDateTime>("left");
+ QTest::addColumn<QDateTime>("right");
+ QTest::addColumn<Qt::weak_ordering>("expectedOrdering");
+
+ Q_CONSTINIT static const auto constructName = [](const QDateTime &dt) -> QByteArray {
+ if (dt.isNull())
+ return "null";
+ if (!dt.isValid())
+ return "invalid";
+ return dt.toString(Qt::ISODateWithMs).toLatin1();
+ };
+
+ Q_CONSTINIT static const auto generateRow =
+ [](const QDateTime &left, const QDateTime &right, Qt::weak_ordering ordering) {
+ const QByteArray leftStr = constructName(left);
+ const QByteArray rightStr = constructName(right);
+ QTest::addRow("%s_vs_%s", leftStr.constData(), rightStr.constData())
+ << left << right << ordering;
+ };
+
+ QDateTime june(QDate(2012, 6, 20), QTime(14, 33, 2, 500));
+ QDateTime juneLater = june.addMSecs(1);
+ QDateTime badDay(QDate(2012, 20, 6), QTime(14, 33, 2, 500)); // Invalid
+ QDateTime epoch(QDate(1970, 1, 1), QTime(0, 0), UTC); // UTC epoch
+ QDateTime nextDay = epoch.addDays(1);
+ QDateTime prevDay = epoch.addDays(-1);
+ // Ensure that different times may be equal when considering timezone.
+ QDateTime epochEast1h(epoch.addSecs(3600));
+ epochEast1h.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(3600));
+ QDateTime epochWest1h(epoch.addSecs(-3600));
+ epochWest1h.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(-3600));
+ QDateTime local1970(epoch.date(), epoch.time()); // Local time's epoch
+
+ generateRow(june, june, Qt::weak_ordering::equivalent);
+ generateRow(june, juneLater, Qt::weak_ordering::less);
+ generateRow(june, badDay, Qt::weak_ordering::greater);
+ generateRow(badDay, QDateTime(), Qt::weak_ordering::equivalent);
+ generateRow(june, QDateTime(), Qt::weak_ordering::greater);
+ generateRow(epoch, nextDay, Qt::weak_ordering::less);
+ generateRow(epoch, prevDay, Qt::weak_ordering::greater);
+ generateRow(epoch, epochEast1h, Qt::weak_ordering::equivalent);
+ generateRow(epoch, epochWest1h, Qt::weak_ordering::equivalent);
+ generateRow(epochEast1h, epochWest1h, Qt::weak_ordering::equivalent);
+ if (epochTimeType == LocalTimeIsUtc)
+ generateRow(epoch, local1970, Qt::weak_ordering::equivalent);
+}
+
+void tst_QDateTime::ordering()
+{
+ QFETCH(QDateTime, left);
+ QFETCH(QDateTime, right);
+ QFETCH(Qt::weak_ordering, expectedOrdering);
+
+ QT_TEST_ALL_COMPARISON_OPS(left, right, expectedOrdering);
+}
+
Q_DECLARE_METATYPE(QDataStream::Version)
void tst_QDateTime::operator_insert_extract_data()
@@ -2191,7 +2587,7 @@ void tst_QDateTime::operator_insert_extract()
TimeZoneRollback useZone(serialiseAs);
// It is important that dateTime is created after the time zone shift
- QDateTime dateTime(QDate(yearNumber, 8, 14), QTime(8, 0), Qt::LocalTime);
+ QDateTime dateTime(QDate(yearNumber, 8, 14), QTime(8, 0));
QDateTime dateTimeAsUTC(dateTime.toUTC());
QByteArray byteArray;
@@ -2217,7 +2613,8 @@ void tst_QDateTime::operator_insert_extract()
// Ensure that a change in timezone between serialisation and deserialisation
// still results in identical UTC-converted datetimes.
useZone.reset(deserialiseAs);
- QDateTime expectedLocalTime(dateTimeAsUTC.toLocalTime());
+ QDateTime expectedLocalTime(dateTimeAsUTC.toLocalTime()); // *After* resetting zone.
+ QCOMPARE(expectedLocalTime, dateTimeAsUTC); // Different description, same moment in time.
{
// Deserialise whole QDateTime at once.
QDataStream dataStream(&byteArray, QIODevice::ReadOnly);
@@ -2233,7 +2630,7 @@ void tst_QDateTime::operator_insert_extract()
if (dataStreamVersion < QDataStream::Qt_4_0) {
// Versions lower than Qt 4 don't serialise the timeSpec, instead
// assuming that everything is LocalTime.
- deserialised.setTimeSpec(Qt::UTC);
+ deserialised.setTimeZone(UTC);
}
// Qt 4.* versions do serialise the timeSpec, so we only need to convert from UTC here.
deserialised = deserialised.toLocalTime();
@@ -2251,9 +2648,17 @@ void tst_QDateTime::operator_insert_extract()
qint8 deserialisedSpec;
if (dataStreamVersion >= QDataStream::Qt_4_0)
dataStream >> deserialisedSpec;
- deserialised = QDateTime(deserialisedDate, deserialisedTime, Qt::UTC);
- if (dataStreamVersion >= QDataStream::Qt_4_0)
- deserialised = deserialised.toTimeSpec(static_cast<Qt::TimeSpec>(deserialisedSpec));
+ deserialised = QDateTime(deserialisedDate, deserialisedTime, UTC);
+ QCOMPARE(deserialised.toLocalTime(), deserialised);
+ const auto isLocalTime = [](qint8 spec) -> bool {
+ // The spec is in fact a QDateTimePrivate::Spec, not Qt::TimeSpec;
+ // and no offset or zone is stored, so only UTC and LocalTime are
+ // really supported. Fortunately this test only uses those.
+ const auto decoded = static_cast<QDateTimePrivate::Spec>(spec);
+ return decoded != QDateTimePrivate::UTC && decoded != QDateTimePrivate::OffsetFromUTC;
+ };
+ if (dataStreamVersion >= QDataStream::Qt_4_0 && isLocalTime(deserialisedSpec))
+ deserialised = deserialised.toTimeZone(QTimeZone::LocalTime);
// Ensure local time is still correct.
QCOMPARE(deserialised, expectedLocalTime);
// Sanity check UTC times.
@@ -2276,54 +2681,61 @@ void tst_QDateTime::fromStringDateFormat_data()
QTest::addColumn<Qt::DateFormat>("dateFormat");
QTest::addColumn<QDateTime>("expected");
+ // Fails 1970 start dates in western Mexico
+ // due to changing from PST to MST at the start of 1970.
+ const bool goodEpochStart = QDateTime(QDate(1970, 1, 1), QTime(0, 0)).isValid();
+
// Test Qt::TextDate format.
QTest::newRow("text date") << QString::fromLatin1("Tue Jun 17 08:00:10 2003")
- << Qt::TextDate << QDateTime(QDate(2003, 6, 17), QTime(8, 0, 10, 0), Qt::LocalTime);
+ << Qt::TextDate << QDateTime(QDate(2003, 6, 17), QTime(8, 0, 10));
QTest::newRow("text date Year 0999") << QString::fromLatin1("Tue Jun 17 08:00:10 0999")
- << Qt::TextDate << QDateTime(QDate(999, 6, 17), QTime(8, 0, 10, 0), Qt::LocalTime);
+ << Qt::TextDate << QDateTime(QDate(999, 6, 17), QTime(8, 0, 10));
QTest::newRow("text date Year 999") << QString::fromLatin1("Tue Jun 17 08:00:10 999")
- << Qt::TextDate << QDateTime(QDate(999, 6, 17), QTime(8, 0, 10, 0), Qt::LocalTime);
+ << Qt::TextDate << QDateTime(QDate(999, 6, 17), QTime(8, 0, 10));
QTest::newRow("text date Year 12345") << QString::fromLatin1("Tue Jun 17 08:00:10 12345")
- << Qt::TextDate << QDateTime(QDate(12345, 6, 17), QTime(8, 0, 10, 0), Qt::LocalTime);
+ << Qt::TextDate << QDateTime(QDate(12345, 6, 17), QTime(8, 0, 10));
QTest::newRow("text date Year -4712") << QString::fromLatin1("Tue Jan 1 00:01:02 -4712")
- << Qt::TextDate << QDateTime(QDate(-4712, 1, 1), QTime(0, 1, 2, 0), Qt::LocalTime);
- QTest::newRow("text epoch")
- << QString::fromLatin1("Thu Jan 1 00:00:00 1970") << Qt::TextDate
- << QDateTime(QDate(1970, 1, 1), QTime(0, 0), Qt::LocalTime);
+ << Qt::TextDate << QDateTime(QDate(-4712, 1, 1), QTime(0, 1, 2));
QTest::newRow("text data1") << QString::fromLatin1("Thu Jan 2 12:34 1970")
- << Qt::TextDate << QDateTime(QDate(1970, 1, 2), QTime(12, 34, 0), Qt::LocalTime);
+ << Qt::TextDate << QDateTime(QDate(1970, 1, 2), QTime(12, 34));
+ if (goodEpochStart) {
+ QTest::newRow("text epoch year after time")
+ << QString::fromLatin1("Thu Jan 1 00:00:00 1970") << Qt::TextDate
+ << QDate(1970, 1, 1).startOfDay();
+ QTest::newRow("text epoch spaced")
+ << QString::fromLatin1(" Thu Jan 1 00:00:00 1970 ")
+ << Qt::TextDate << QDate(1970, 1, 1).startOfDay();
+ QTest::newRow("text epoch time after year")
+ << QString::fromLatin1("Thu Jan 1 1970 00:00:00")
+ << Qt::TextDate << QDate(1970, 1, 1).startOfDay();
+ }
QTest::newRow("text epoch terse")
<< QString::fromLatin1("Thu Jan 1 00 1970") << Qt::TextDate << QDateTime();
QTest::newRow("text epoch stray :00")
<< QString::fromLatin1("Thu Jan 1 00:00:00:00 1970") << Qt::TextDate << QDateTime();
- QTest::newRow("text epoch spaced")
- << QString::fromLatin1(" Thu Jan 1 00:00:00 1970 ")
- << Qt::TextDate << QDateTime(QDate(1970, 1, 1), QTime(0, 0), Qt::LocalTime);
QTest::newRow("text data6") << QString::fromLatin1("Thu Jan 1 00:00:00")
<< Qt::TextDate << QDateTime();
- QTest::newRow("text data7") << QString::fromLatin1("Thu Jan 1 1970 00:00:00")
- << Qt::TextDate << QDateTime(QDate(1970, 1, 1), QTime(0, 0), Qt::LocalTime);
QTest::newRow("text bad offset") << QString::fromLatin1("Thu Jan 1 00:12:34 1970 UTC+foo")
<< Qt::TextDate << QDateTime();
QTest::newRow("text UTC early") << QString::fromLatin1("Thu Jan 1 00:12:34 1970 UTC")
- << Qt::TextDate << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << Qt::TextDate << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), UTC);
QTest::newRow("text UTC-3 early") << QString::fromLatin1("Thu Jan 1 00:12:34 1970 UTC-0300")
- << Qt::TextDate << QDateTime(QDate(1970, 1, 1), QTime(3, 12, 34), Qt::UTC);
+ << Qt::TextDate << QDateTime(QDate(1970, 1, 1), QTime(3, 12, 34), UTC);
QTest::newRow("text UTC+3 early") << QString::fromLatin1("Thu Jan 1 00:12:34 1970 UTC+0300")
- << Qt::TextDate << QDateTime(QDate(1969, 12, 31), QTime(21, 12, 34), Qt::UTC);
+ << Qt::TextDate << QDateTime(QDate(1969, 12, 31), QTime(21, 12, 34), UTC);
QTest::newRow("text UTC+1 early") << QString::fromLatin1("Thu Jan 1 1970 00:12:34 UTC+0100")
- << Qt::TextDate << QDateTime(QDate(1969, 12, 31), QTime(23, 12, 34), Qt::UTC);
+ << Qt::TextDate << QDateTime(QDate(1969, 12, 31), QTime(23, 12, 34), UTC);
// We produce use GMT as prefix, so need to parse it:
QTest::newRow("text GMT early")
<< QString::fromLatin1("Thu Jan 1 00:12:34 1970 GMT") << Qt::TextDate
- << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), UTC);
QTest::newRow("text GMT+3 early")
<< QString::fromLatin1("Thu Jan 1 00:12:34 1970 GMT+0300") << Qt::TextDate
- << QDateTime(QDate(1969, 12, 31), QTime(21, 12, 34), Qt::UTC);
+ << QDateTime(QDate(1969, 12, 31), QTime(21, 12, 34), UTC);
// ... and we match (only) it case-insensitively:
QTest::newRow("text gmt early")
<< QString::fromLatin1("Thu Jan 1 00:12:34 1970 gmt") << Qt::TextDate
- << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), UTC);
QTest::newRow("text empty") << QString::fromLatin1("")
<< Qt::TextDate << QDateTime();
@@ -2419,83 +2831,95 @@ void tst_QDateTime::fromStringDateFormat_data()
// Normal usage:
QTest::newRow("ISO +01:00") << QString::fromLatin1("1987-02-13T13:24:51+01:00")
- << Qt::ISODate << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), UTC);
QTest::newRow("ISO +00:01") << QString::fromLatin1("1987-02-13T13:24:51+00:01")
- << Qt::ISODate << QDateTime(QDate(1987, 2, 13), QTime(13, 23, 51), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(1987, 2, 13), QTime(13, 23, 51), UTC);
QTest::newRow("ISO -01:00") << QString::fromLatin1("1987-02-13T13:24:51-01:00")
- << Qt::ISODate << QDateTime(QDate(1987, 2, 13), QTime(14, 24, 51), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(1987, 2, 13), QTime(14, 24, 51), UTC);
QTest::newRow("ISO -00:01") << QString::fromLatin1("1987-02-13T13:24:51-00:01")
- << Qt::ISODate << QDateTime(QDate(1987, 2, 13), QTime(13, 25, 51), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(1987, 2, 13), QTime(13, 25, 51), UTC);
QTest::newRow("ISO +0000") << QString::fromLatin1("1970-01-01T00:12:34+0000")
- << Qt::ISODate << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), UTC);
QTest::newRow("ISO +00:00") << QString::fromLatin1("1970-01-01T00:12:34+00:00")
- << Qt::ISODate << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), UTC);
QTest::newRow("ISO -03") << QString::fromLatin1("2014-12-15T12:37:09-03")
- << Qt::ISODate << QDateTime(QDate(2014, 12, 15), QTime(15, 37, 9), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(2014, 12, 15), QTime(15, 37, 9), UTC);
QTest::newRow("ISO zzz-03") << QString::fromLatin1("2014-12-15T12:37:09.745-03")
- << Qt::ISODate << QDateTime(QDate(2014, 12, 15), QTime(15, 37, 9, 745), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(2014, 12, 15), QTime(15, 37, 9, 745), UTC);
QTest::newRow("ISO -3") << QString::fromLatin1("2014-12-15T12:37:09-3")
- << Qt::ISODate << QDateTime(QDate(2014, 12, 15), QTime(15, 37, 9), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(2014, 12, 15), QTime(15, 37, 9), UTC);
QTest::newRow("ISO zzz-3") << QString::fromLatin1("2014-12-15T12:37:09.745-3")
- << Qt::ISODate << QDateTime(QDate(2014, 12, 15), QTime(15, 37, 9, 745), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(2014, 12, 15), QTime(15, 37, 9, 745), UTC);
QTest::newRow("ISO lower-case") << QString::fromLatin1("2005-06-28T07:57:30.002z")
- << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 2), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 2), UTC);
// No time specified - defaults to Qt::LocalTime.
QTest::newRow("ISO data3") << QString::fromLatin1("2002-10-01")
- << Qt::ISODate << QDateTime(QDate(2002, 10, 1), QTime(0, 0), Qt::LocalTime);
+ << Qt::ISODate << QDate(2002, 10, 1).startOfDay();
// Excess digits in milliseconds, round correctly:
QTest::newRow("ISO") << QString::fromLatin1("2005-06-28T07:57:30.0010000000Z")
- << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 1), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 1), UTC);
QTest::newRow("ISO rounding") << QString::fromLatin1("2005-06-28T07:57:30.0015Z")
- << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 2), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 2), UTC);
// ... and accept comma as separator:
QTest::newRow("ISO with comma 1") << QString::fromLatin1("2005-06-28T07:57:30,0040000000Z")
- << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 4), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 4), UTC);
QTest::newRow("ISO with comma 2") << QString::fromLatin1("2005-06-28T07:57:30,0015Z")
- << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 2), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 2), UTC);
QTest::newRow("ISO with comma 3") << QString::fromLatin1("2005-06-28T07:57:30,0014Z")
- << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 1), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 1), UTC);
QTest::newRow("ISO with comma 4") << QString::fromLatin1("2005-06-28T07:57:30,1Z")
- << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 100), Qt::UTC);
+ << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 100), UTC);
QTest::newRow("ISO with comma 5") << QString::fromLatin1("2005-06-28T07:57:30,11")
- << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 110), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 110));
// 24:00:00 Should be next day according to ISO 8601 section 4.2.3.
QTest::newRow("ISO 24:00") << QString::fromLatin1("2012-06-04T24:00:00")
- << Qt::ISODate << QDateTime(QDate(2012, 6, 5), QTime(0, 0), Qt::LocalTime);
- QTest::newRow("ISO 24:00 in DST") // Only special if TZ=America/Sao_Paulo
+ << Qt::ISODate << QDate(2012, 6, 5).startOfDay();
+#if QT_CONFIG(timezone)
+ const QByteArray sysId = QTimeZone::systemTimeZoneId();
+ const bool midnightSkip = sysId == "America/Sao_Paulo" || sysId == "America/Asuncion"
+ || sysId == "America/Cordoba" || sysId == "America/Argentina/Cordoba"
+ || sysId == "America/Campo_Grande"
+ || sysId == "America/Cuiaba" || sysId == "America/Buenos_Aires"
+ || sysId == "America/Argentina/Buenos_Aires"
+ || sysId == "America/Argentina/Tucuman" || sysId == "Brazil/East";
+ QTest::newRow("ISO 24:00 in DST") // Midnight spring forward in some of South America.
<< QString::fromLatin1("2008-10-18T24:00") << Qt::ISODate
- << QDateTime(QDate(2008, 10, 19),
- QTime(QTimeZone::systemTimeZoneId() == "America/Sao_Paulo" ? 1 : 0, 0),
- Qt::LocalTime);
- QTest::newRow("ISO 24:00 end of month") << QString::fromLatin1("2012-06-30T24:00:00")
- << Qt::ISODate << QDateTime(QDate(2012, 7, 1), QTime(0, 0), Qt::LocalTime);
- QTest::newRow("ISO 24:00 end of year") << QString::fromLatin1("2012-12-31T24:00:00")
- << Qt::ISODate << QDateTime(QDate(2013, 1, 1), QTime(0, 0), Qt::LocalTime);
- QTest::newRow("ISO 24:00, fract ms") << QString::fromLatin1("2012-01-01T24:00:00.000")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 2), QTime(0, 0), Qt::LocalTime);
- QTest::newRow("ISO 24:00 end of year, fract ms") << QString::fromLatin1("2012-12-31T24:00:00.000")
- << Qt::ISODate << QDateTime(QDate(2013, 1, 1), QTime(0, 0), Qt::LocalTime);
+ << QDateTime(QDate(2008, 10, 19), QTime(midnightSkip ? 1 : 0, 0));
+#endif
+ QTest::newRow("ISO 24:00 end of month")
+ << QString::fromLatin1("2012-06-30T24:00:00")
+ << Qt::ISODate << QDate(2012, 7, 1).startOfDay();
+ QTest::newRow("ISO 24:00 end of year")
+ << QString::fromLatin1("2012-12-31T24:00:00")
+ << Qt::ISODate << QDate(2013, 1, 1).startOfDay();
+ QTest::newRow("ISO 24:00, fract ms")
+ << QString::fromLatin1("2012-01-01T24:00:00.000")
+ << Qt::ISODate << QDate(2012, 1, 2).startOfDay();
+ QTest::newRow("ISO 24:00 end of year, fract ms")
+ << QString::fromLatin1("2012-12-31T24:00:00.000")
+ << Qt::ISODate << QDate(2013, 1, 1).startOfDay();
// Test fractional seconds.
- QTest::newRow("ISO .0 of a second (period)") << QString::fromLatin1("2012-01-01T08:00:00.0")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 0), Qt::LocalTime);
+ QTest::newRow("ISO .0 of a second (period)")
+ << QString::fromLatin1("2012-01-01T08:00:00.0")
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0));
QTest::newRow("ISO .00 of a second (period)") << QString::fromLatin1("2012-01-01T08:00:00.00")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 0), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0));
QTest::newRow("ISO .000 of a second (period)") << QString::fromLatin1("2012-01-01T08:00:00.000")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 0), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0));
QTest::newRow("ISO .1 of a second (comma)") << QString::fromLatin1("2012-01-01T08:00:00,1")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 100), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 100));
QTest::newRow("ISO .99 of a second (comma)") << QString::fromLatin1("2012-01-01T08:00:00,99")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 990), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 990));
QTest::newRow("ISO .998 of a second (comma)") << QString::fromLatin1("2012-01-01T08:00:00,998")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 998), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 998));
QTest::newRow("ISO .999 of a second (comma)") << QString::fromLatin1("2012-01-01T08:00:00,999")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 999), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 999));
QTest::newRow("ISO .3335 of a second (comma)") << QString::fromLatin1("2012-01-01T08:00:00,3335")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 334), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 334));
QTest::newRow("ISO .333333 of a second (comma)") << QString::fromLatin1("2012-01-01T08:00:00,333333")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 333), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 333));
QTest::newRow("ISO .00009 of a second (period)") << QString::fromLatin1("2012-01-01T08:00:00.00009")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 0), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0));
QTest::newRow("ISO second fraction") << QString::fromLatin1("2013-05-06T01:02:03.456")
<< Qt::ISODate << QDateTime(QDate(2013, 5, 6), QTime(1, 2, 3, 456));
QTest::newRow("ISO max milli")
@@ -2522,17 +2946,17 @@ void tst_QDateTime::fromStringDateFormat_data()
<< Qt::ISODate << QDateTime();
// Test fractional minutes.
QTest::newRow("ISO .0 of a minute (period)") << QString::fromLatin1("2012-01-01T08:00.0")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 0), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0));
QTest::newRow("ISO .8 of a minute (period)") << QString::fromLatin1("2012-01-01T08:00.8")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 48, 0), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 48));
QTest::newRow("ISO .99999 of a minute (period)") << QString::fromLatin1("2012-01-01T08:00.99999")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 59, 999), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 59, 999));
QTest::newRow("ISO .0 of a minute (comma)") << QString::fromLatin1("2012-01-01T08:00,0")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 0, 0), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0));
QTest::newRow("ISO .8 of a minute (comma)") << QString::fromLatin1("2012-01-01T08:00,8")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 48, 0), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 48));
QTest::newRow("ISO .99999 of a minute (comma)") << QString::fromLatin1("2012-01-01T08:00,99999")
- << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 59, 999), Qt::LocalTime);
+ << Qt::ISODate << QDateTime(QDate(2012, 1, 1), QTime(8, 0, 59, 999));
QTest::newRow("ISO empty") << QString::fromLatin1("") << Qt::ISODate << QDateTime();
QTest::newRow("ISO short") << QString::fromLatin1("2017-07-01T") << Qt::ISODate << QDateTime();
QTest::newRow("ISO zoned date")
@@ -2544,32 +2968,28 @@ void tst_QDateTime::fromStringDateFormat_data()
// Test Qt::RFC2822Date format (RFC 2822).
QTest::newRow("RFC 2822 +0100") << QString::fromLatin1("13 Feb 1987 13:24:51 +0100")
- << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), UTC);
QTest::newRow("RFC 2822 after space +0100")
<< QString::fromLatin1(" 13 Feb 1987 13:24:51 +0100")
- << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), UTC);
QTest::newRow("RFC 2822 with day +0100") << QString::fromLatin1("Fri, 13 Feb 1987 13:24:51 +0100")
- << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), UTC);
QTest::newRow("RFC 2822 with day after space +0100")
<< QString::fromLatin1(" Fri, 13 Feb 1987 13:24:51 +0100")
- << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), UTC);
QTest::newRow("RFC 2822 -0100") << QString::fromLatin1("13 Feb 1987 13:24:51 -0100")
- << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(14, 24, 51), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(14, 24, 51), UTC);
QTest::newRow("RFC 2822 with day -0100") << QString::fromLatin1("Fri, 13 Feb 1987 13:24:51 -0100")
- << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(14, 24, 51), Qt::UTC);
- QTest::newRow("RFC 2822 +0000") << QString::fromLatin1("01 Jan 1970 00:12:34 +0000")
- << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
- QTest::newRow("RFC 2822 with day +0000") << QString::fromLatin1("Thu, 01 Jan 1970 00:12:34 +0000")
- << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(14, 24, 51), UTC);
QTest::newRow("RFC 2822 +0000") << QString::fromLatin1("01 Jan 1970 00:12:34 +0000")
- << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), UTC);
QTest::newRow("RFC 2822 with day +0000") << QString::fromLatin1("Thu, 01 Jan 1970 00:12:34 +0000")
- << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), UTC);
QTest::newRow("RFC 2822 missing space before +0100")
<< QString::fromLatin1("Thu, 01 Jan 1970 00:12:34+0100") << Qt::RFC2822Date << QDateTime();
// No timezone assume UTC
QTest::newRow("RFC 2822 no timezone") << QString::fromLatin1("01 Jan 1970 00:12:34")
- << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), UTC);
// No time specified
QTest::newRow("RFC 2822 date only") << QString::fromLatin1("01 Nov 2002")
<< Qt::RFC2822Date << QDateTime();
@@ -2614,23 +3034,21 @@ void tst_QDateTime::fromStringDateFormat_data()
// sure *it's* not what's invalid:
QTest::newRow("RFC 2822 (not invalid)")
<< QString::fromLatin1("01 Jan 2012 08:00:00 +0100")
- << Qt::RFC2822Date << QDateTime(QDate(2012, 1, 1), QTime(7, 0), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(2012, 1, 1), QTime(7, 0), UTC);
// Test Qt::RFC2822Date format (RFC 850 and 1036, permissive).
QTest::newRow("RFC 850 and 1036 +0100") << QString::fromLatin1("Fri Feb 13 13:24:51 1987 +0100")
- << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), UTC);
QTest::newRow("RFC 1036 after space +0100")
<< QString::fromLatin1(" Fri Feb 13 13:24:51 1987 +0100")
- << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(12, 24, 51), UTC);
QTest::newRow("RFC 850 and 1036 -0100") << QString::fromLatin1("Fri Feb 13 13:24:51 1987 -0100")
- << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(14, 24, 51), Qt::UTC);
- QTest::newRow("RFC 850 and 1036 +0000") << QString::fromLatin1("Thu Jan 01 00:12:34 1970 +0000")
- << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1987, 2, 13), QTime(14, 24, 51), UTC);
QTest::newRow("RFC 850 and 1036 +0000") << QString::fromLatin1("Thu Jan 01 00:12:34 1970 +0000")
- << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), UTC);
// No timezone assume UTC
QTest::newRow("RFC 850 and 1036 no timezone") << QString::fromLatin1("Thu Jan 01 00:12:34 1970")
- << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(1970, 1, 1), QTime(0, 12, 34), UTC);
// No time specified
QTest::newRow("RFC 850 and 1036 date only")
<< QString::fromLatin1("Fri Nov 01 2002")
@@ -2654,7 +3072,7 @@ void tst_QDateTime::fromStringDateFormat_data()
// Again, check the text in the "invalid character" tests isn't the source of invalidity:
QTest::newRow("RFC 850 and 1036 (not invalid)")
<< QString::fromLatin1("Sun Jan 01 08:00:00 2012 +0100")
- << Qt::RFC2822Date << QDateTime(QDate(2012, 1, 1), QTime(7, 0), Qt::UTC);
+ << Qt::RFC2822Date << QDateTime(QDate(2012, 1, 1), QTime(7, 0), UTC);
QTest::newRow("RFC empty") << QString::fromLatin1("") << Qt::RFC2822Date << QDateTime();
}
@@ -2674,234 +3092,271 @@ void tst_QDateTime::fromStringStringFormat_data()
{
QTest::addColumn<QString>("string");
QTest::addColumn<QString>("format");
+ QTest::addColumn<int>("baseYear");
QTest::addColumn<QDateTime>("expected");
- const QDate defDate(1900, 1, 1);
- QTest::newRow("data0")
- << QString("101010") << QString("dMyy") << QDate(1910, 10, 10).startOfDay();
- QTest::newRow("data1") << QString("1020") << QString("sss") << QDateTime();
- QTest::newRow("data2")
- << QString("1010") << QString("sss") << QDateTime(defDate, QTime(0, 0, 10));
- QTest::newRow("data3") << QString("10hello20") << QString("ss'hello'ss") << QDateTime();
- QTest::newRow("data4") << QString("10") << QString("''") << QDateTime();
- QTest::newRow("data5") << QString("10") << QString("'") << QDateTime();
- QTest::newRow("data6") << QString("pm") << QString("ap") << QDateTime(defDate, QTime(12, 0));
- QTest::newRow("data7") << QString("foo") << QString("ap") << QDateTime();
+ // Indian/Cocos had a transition at the start of 1900, so its Jan 1st starts
+ // at 00:02:20 on that day; this leads to perverse results. QTBUG-77948.
+ if (const QDate defDate(1900, 1, 1); defDate.startOfDay().time() == QTime(0, 0)) {
+ QTest::newRow("dMyy-only:19")
+ << u"101010"_s << u"dMyy"_s << 1900 << QDate(1910, 10, 10).startOfDay();
+ QTest::newRow("dMyy-only:20")
+ << u"101010"_s << u"dMyy"_s << 1911 << QDate(2010, 10, 10).startOfDay();
+ QTest::newRow("secs-repeat-valid")
+ << u"1010"_s << u"sss"_s << 1900 << QDateTime(defDate, QTime(0, 0, 10));
+ QTest::newRow("pm-only")
+ << u"pm"_s << u"ap"_s << 1900 << QDateTime(defDate, QTime(12, 0));
+ QTest::newRow("date-only:19")
+ << u"10 Oct 10"_s << u"dd MMM yy"_s << 1900 << QDate(1910, 10, 10).startOfDay();
+ QTest::newRow("date-only:20")
+ << u"10 Oct 10"_s << u"dd MMM yy"_s << 1950 << QDate(2010, 10, 10).startOfDay();
+ QTest::newRow("dow-date-only")
+ << u"Fri December 3 2004"_s << u"ddd MMMM d yyyy"_s << 1900
+ << QDate(2004, 12, 3).startOfDay();
+ QTest::newRow("dow-mon-yr-only")
+ << u"Thu January 2004"_s << u"ddd MMMM yyyy"_s << 1900
+ << QDate(2004, 1, 1).startOfDay();
+ }
+ QTest::newRow("yy=24/Mar/20") // QTBUG-123579
+ << u"Wed, 20 Mar 24 16:17:00"_s << u"ddd, dd MMM yy HH:mm:ss"_s << 1900
+ << QDateTime(QDate(2024, 3, 20), QTime(16, 17));
+ QTest::newRow("secs-conflict") << u"1020"_s << u"sss"_s << 1900 << QDateTime();
+ QTest::newRow("secs-split-conflict")
+ << u"10hello20"_s << u"ss'hello'ss"_s << 1900 << QDateTime();
+ QTest::newRow("nomatch-quote-twice") << u"10"_s << u"''"_s << 1900 << QDateTime();
+ QTest::newRow("momatch-quote") << u"10"_s << u"'"_s << 1900 << QDateTime();
+ QTest::newRow("nomatch-am-pm") << u"foo"_s << u"ap"_s << 1900 << QDateTime();
// Day non-conflict should not hide earlier year conflict (1963-03-01 was a
// Friday; asking for Thursday moves this, without conflict, to the 7th):
- QTest::newRow("data8")
- << QString("77 03 1963 Thu") << QString("yy MM yyyy ddd") << QDateTime();
- QTest::newRow("data9")
- << QString("101010") << QString("dMyy") << QDate(1910, 10, 10).startOfDay();
- QTest::newRow("data10")
- << QString("101010") << QString("dMyy") << QDate(1910, 10, 10).startOfDay();
- QTest::newRow("data11")
- << QString("10 Oct 10") << QString("dd MMM yy") << QDate(1910, 10, 10).startOfDay();
- QTest::newRow("data12")
- << QString("Fri December 3 2004") << QString("ddd MMMM d yyyy")
- << QDate(2004, 12, 3).startOfDay();
- QTest::newRow("data13") << QString("30.02.2004") << QString("dd.MM.yyyy") << QDateTime();
- QTest::newRow("data14") << QString("32.01.2004") << QString("dd.MM.yyyy") << QDateTime();
- QTest::newRow("data15")
- << QString("Thu January 2004") << QString("ddd MMMM yyyy")
- << QDate(2004, 1, 1).startOfDay();
- QTest::newRow("data16") << QString("2005-06-28T07:57:30.001Z")
- << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime(QDate(2005, 06, 28), QTime(07, 57, 30, 1), Qt::UTC);
+ QTest::newRow("year-conflict")
+ << u"77 03 1963 Thu"_s << u"yy MM yyyy ddd"_s << 1900 << QDateTime();
+ QTest::newRow("Feb-overflow") << u"30.02.2004"_s << u"dd.MM.yyyy"_s << 1900 << QDateTime();
+ QTest::newRow("Jan-overflow") << u"32.01.2004"_s << u"dd.MM.yyyy"_s << 1900 << QDateTime();
+ QTest::newRow("zulu-time-with-z-centisec")
+ << u"2005-06-28T07:57:30.01Z"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime(QDate(2005, 06, 28), QTime(07, 57, 30, 10), UTC);
+ QTest::newRow("zulu-time-with-zz-decisec")
+ << u"2005-06-28T07:57:30.1Z"_s << u"yyyy-MM-ddThh:mm:ss.zzt"_s << 1900
+ << QDateTime(QDate(2005, 06, 28), QTime(07, 57, 30, 100), UTC);
+ QTest::newRow("zulu-time-with-zzz-centisec")
+ << u"2005-06-28T07:57:30.01Z"_s << u"yyyy-MM-ddThh:mm:ss.zzzt"_s << 1900
+ << QDateTime(); // Invalid because too few digits for zzz
+ QTest::newRow("zulu-time-with-z-millisec")
+ << u"2005-06-28T07:57:30.001Z"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime(QDate(2005, 06, 28), QTime(07, 57, 30, 1), UTC);
QTest::newRow("utc-time-spec-as:UTC+0")
- << QString("2005-06-28T07:57:30.001UTC+0") << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 1), Qt::UTC);
+ << u"2005-06-28T07:57:30.001UTC+0"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 1), UTC);
QTest::newRow("utc-time-spec-as:UTC-0")
- << QString("2005-06-28T07:57:30.001UTC-0") << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 1), Qt::UTC);
+ << u"2005-06-28T07:57:30.001UTC-0"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 1), UTC);
QTest::newRow("offset-from-utc:UTC+1")
- << QString("2001-09-13T07:33:01.001 UTC+1") << QString("yyyy-MM-ddThh:mm:ss.z t")
- << QDateTime(QDate(2001, 9, 13), QTime(7, 33, 1, 1), Qt::OffsetFromUTC, 3600);
+ << u"2001-09-13T07:33:01.001 UTC+1"_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900
+ << QDateTime(QDate(2001, 9, 13), QTime(7, 33, 1, 1),
+ QTimeZone::fromSecondsAheadOfUtc(3600));
QTest::newRow("offset-from-utc:UTC-11:01")
- << QString("2008-09-13T07:33:01.001 UTC-11:01") << QString("yyyy-MM-ddThh:mm:ss.z t")
- << QDateTime(QDate(2008, 9, 13), QTime(7, 33, 1, 1), Qt::OffsetFromUTC, -39660);
+ << u"2008-09-13T07:33:01.001 UTC-11:01"_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900
+ << QDateTime(QDate(2008, 9, 13), QTime(7, 33, 1, 1),
+ QTimeZone::fromSecondsAheadOfUtc(-39660));
QTest::newRow("offset-from-utc:UTC+02:57")
- << QString("2001-09-15T09:33:01.001UTC+02:57") << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime(QDate(2001, 9, 15), QTime(9, 33, 1, 1), Qt::OffsetFromUTC, 10620);
+ << u"2001-09-15T09:33:01.001UTC+02:57"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime(QDate(2001, 9, 15), QTime(9, 33, 1, 1),
+ QTimeZone::fromSecondsAheadOfUtc(10620));
QTest::newRow("offset-from-utc:-03:00") // RFC 3339 offset format
- << QString("2001-09-15T09:33:01.001-03:00") << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime(QDate(2001, 9, 15), QTime(9, 33, 1, 1), Qt::OffsetFromUTC, -10800);
+ << u"2001-09-15T09:33:01.001-03:00"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime(QDate(2001, 9, 15), QTime(9, 33, 1, 1),
+ QTimeZone::fromSecondsAheadOfUtc(-10800));
QTest::newRow("offset-from-utc:+0205") // ISO 8601 basic offset format
- << QString("2001-09-15T09:33:01.001+0205") << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime(QDate(2001, 9, 15), QTime(9, 33, 1, 1), Qt::OffsetFromUTC, 7500);
+ << u"2001-09-15T09:33:01.001+0205"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime(QDate(2001, 9, 15), QTime(9, 33, 1, 1),
+ QTimeZone::fromSecondsAheadOfUtc(7500));
QTest::newRow("offset-from-utc:-0401") // ISO 8601 basic offset format
- << QString("2001-09-15T09:33:01.001-0401") << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime(QDate(2001, 9, 15), QTime(9, 33, 1, 1), Qt::OffsetFromUTC, -14460);
+ << u"2001-09-15T09:33:01.001-0401"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime(QDate(2001, 9, 15), QTime(9, 33, 1, 1),
+ QTimeZone::fromSecondsAheadOfUtc(-14460));
QTest::newRow("offset-from-utc:+10") // ISO 8601 basic (hour-only) offset format
- << QString("2001-09-15T09:33:01.001 +10") << QString("yyyy-MM-ddThh:mm:ss.z t")
- << QDateTime(QDate(2001, 9, 15), QTime(9, 33, 1, 1), Qt::OffsetFromUTC, 36000);
+ << u"2001-09-15T09:33:01.001 +10"_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900
+ << QDateTime(QDate(2001, 9, 15), QTime(9, 33, 1, 1),
+ QTimeZone::fromSecondsAheadOfUtc(36000));
QTest::newRow("offset-from-utc:UTC+10:00") // Time-spec specifier at the beginning
- << QString("UTC+10:00 2008-10-13T07:33") << QString("t yyyy-MM-ddThh:mm")
- << QDateTime(QDate(2008, 10, 13), QTime(7, 33), Qt::OffsetFromUTC, 36000);
+ << u"UTC+10:00 2008-10-13T07:33"_s << u"t yyyy-MM-ddThh:mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(7, 33),
+ QTimeZone::fromSecondsAheadOfUtc(36000));
QTest::newRow("offset-from-utc:UTC-03:30") // Time-spec specifier in the middle
- << QString("2008-10-13 UTC-03:30 11.50") << QString("yyyy-MM-dd t hh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), Qt::OffsetFromUTC, -12600);
+ << u"2008-10-13 UTC-03:30 11.50"_s << u"yyyy-MM-dd t hh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50),
+ QTimeZone::fromSecondsAheadOfUtc(-12600));
QTest::newRow("offset-from-utc:UTC-2") // Time-spec specifier joined with text/time
- << QString("2008-10-13 UTC-2Z11.50") << QString("yyyy-MM-dd tZhh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), Qt::OffsetFromUTC, -7200);
+ << u"2008-10-13 UTC-2Z11.50"_s << u"yyyy-MM-dd tZhh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50),
+ QTimeZone::fromSecondsAheadOfUtc(-7200));
QTest::newRow("offset-from-utc:followed-by-colon")
- << QString("2008-10-13 UTC-0100:11.50") << QString("yyyy-MM-dd t:hh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), Qt::OffsetFromUTC, -3600);
+ << u"2008-10-13 UTC-0100:11.50"_s << u"yyyy-MM-dd t:hh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50),
+ QTimeZone::fromSecondsAheadOfUtc(-3600));
QTest::newRow("offset-from-utc:late-colon")
- << QString("2008-10-13 UTC+05T:11.50") << QString("yyyy-MM-dd tT:hh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), Qt::OffsetFromUTC, 18000);
+ << u"2008-10-13 UTC+05T:11.50"_s << u"yyyy-MM-dd tT:hh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50),
+ QTimeZone::fromSecondsAheadOfUtc(18000));
QTest::newRow("offset-from-utc:merged-with-time")
- << QString("2008-10-13 UTC+010011.50") << QString("yyyy-MM-dd thh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), Qt::OffsetFromUTC, 3600);
+ << u"2008-10-13 UTC+010011.50"_s << u"yyyy-MM-dd thh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50),
+ QTimeZone::fromSecondsAheadOfUtc(3600));
QTest::newRow("offset-from-utc:double-colon-delimiter")
- << QString("2008-10-13 UTC+12::11.50") << QString("yyyy-MM-dd t::hh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), Qt::OffsetFromUTC, 43200);
+ << u"2008-10-13 UTC+12::11.50"_s << u"yyyy-MM-dd t::hh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50),
+ QTimeZone::fromSecondsAheadOfUtc(43200));
QTest::newRow("offset-from-utc:3-digit-with-colon")
- << QString("2008-10-13 -4:30 11.50") << QString("yyyy-MM-dd t hh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), Qt::OffsetFromUTC, -16200);
- QTest::newRow("offset-from-utc:merged-with-time")
- << QString("2008-10-13 UTC+010011.50") << QString("yyyy-MM-dd thh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), Qt::OffsetFromUTC, 3600);
+ << u"2008-10-13 -4:30 11.50"_s << u"yyyy-MM-dd t hh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50),
+ QTimeZone::fromSecondsAheadOfUtc(-16200));
QTest::newRow("offset-from-utc:with-colon-merged-with-time")
- << QString("2008-10-13 UTC+01:0011.50") << QString("yyyy-MM-dd thh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), Qt::OffsetFromUTC, 3600);
+ << u"2008-10-13 UTC+01:0011.50"_s << u"yyyy-MM-dd thh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50),
+ QTimeZone::fromSecondsAheadOfUtc(3600));
QTest::newRow("invalid-offset-from-utc:out-of-range")
- << QString("2001-09-15T09:33:01.001-50") << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001-50"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime();
QTest::newRow("invalid-offset-from-utc:single-digit-format")
- << QString("2001-09-15T09:33:01.001+5") << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001+5"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900 << QDateTime();
QTest::newRow("invalid-offset-from-utc:three-digit-format")
- << QString("2001-09-15T09:33:01.001-701") << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001-701"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime();
QTest::newRow("invalid-offset-from-utc:three-digit-minutes")
- << QString("2001-09-15T09:33:01.001+11:570") << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001+11:570"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime();
QTest::newRow("invalid-offset-from-utc:single-digit-minutes")
- << QString("2001-09-15T09:33:01.001+11:5") << QString("yyyy-MM-ddThh:mm:ss.zt")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001+11:5"_s << u"yyyy-MM-ddThh:mm:ss.zt"_s << 1900
+ << QDateTime();
QTest::newRow("invalid-offset-from-utc:invalid-sign-symbol")
- << QString("2001-09-15T09:33:01.001 ~11:30") << QString("yyyy-MM-ddThh:mm:ss.z t")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001 ~11:30"_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900
+ << QDateTime();
QTest::newRow("invalid-offset-from-utc:symbol-in-hours")
- << QString("2001-09-15T09:33:01.001 UTC+o8:30") << QString("yyyy-MM-ddThh:mm:ss.z t")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001 UTC+o8:30"_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900
+ << QDateTime();
QTest::newRow("invalid-offset-from-utc:symbol-in-minutes")
- << QString("2001-09-15T09:33:01.001 UTC+08:3i") << QString("yyyy-MM-ddThh:mm:ss.z t")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001 UTC+08:3i"_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900
+ << QDateTime();
QTest::newRow("invalid-offset-from-utc:UTC+123") // Invalid offset (UTC and 3 digit format)
- << QString("2001-09-15T09:33:01.001 UTC+123") << QString("yyyy-MM-ddThh:mm:ss.z t")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001 UTC+123"_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900
+ << QDateTime();
QTest::newRow("invalid-offset-from-utc:UTC+00005") // Invalid offset with leading zeroes
- << QString("2001-09-15T09:33:01.001 UTC+00005") << QString("yyyy-MM-ddThh:mm:ss.z t")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001 UTC+00005"_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900
+ << QDateTime();
QTest::newRow("invalid-offset-from-utc:three-digit-with-colon-delimiter")
- << QString("2008-10-13 +123:11.50") << QString("yyyy-MM-dd t:hh.mm")
- << QDateTime();
+ << u"2008-10-13 +123:11.50"_s << u"yyyy-MM-dd t:hh.mm"_s << 1900 << QDateTime();
QTest::newRow("invalid-offset-from-utc:double-colon-as-part-of-offset")
- << QString("2008-10-13 UTC+12::11.50") << QString("yyyy-MM-dd thh.mm")
- << QDateTime();
+ << u"2008-10-13 UTC+12::11.50"_s << u"yyyy-MM-dd thh.mm"_s << 1900 << QDateTime();
QTest::newRow("invalid-offset-from-utc:single-colon-as-part-of-offset")
- << QString("2008-10-13 UTC+12::11.50") << QString("yyyy-MM-dd t:hh.mm")
- << QDateTime();
+ << u"2008-10-13 UTC+12::11.50"_s << u"yyyy-MM-dd t:hh.mm"_s << 1900 << QDateTime();
QTest::newRow("invalid-offset-from-utc:starts-with-colon")
- << QString("2008-10-13 UTC+:59 11.50") << QString("yyyy-MM-dd t hh.mm")
- << QDateTime();
+ << u"2008-10-13 UTC+:59 11.50"_s << u"yyyy-MM-dd t hh.mm"_s << 1900 << QDateTime();
QTest::newRow("invalid-offset-from-utc:empty-offset")
- << QString("2008-10-13 UTC+ 11.50") << QString("yyyy-MM-dd t hh.mm")
- << QDateTime();
+ << u"2008-10-13 UTC+ 11.50"_s << u"yyyy-MM-dd t hh.mm"_s << 1900 << QDateTime();
QTest::newRow("invalid-offset-from-utc:time-section-instead-of-offset")
- << QString("2008-10-13 UTC+11.50") << QString("yyyy-MM-dd thh.mm")
- << QDateTime();
+ << u"2008-10-13 UTC+11.50"_s << u"yyyy-MM-dd thh.mm"_s << 1900 << QDateTime();
QTest::newRow("invalid-offset-from-utc:missing-minutes-if-colon")
- << QString("2008-10-13 +05: 11.50") << QString("yyyy-MM-dd t hh.mm")
- << QDateTime();
+ << u"2008-10-13 +05: 11.50"_s << u"yyyy-MM-dd t hh.mm"_s << 1900 << QDateTime();
QTest::newRow("invalid-offset-from-utc:1-digit-minutes-if-colon")
- << QString("2008-10-13 UTC+05:1 11.50") << QString("yyyy-MM-dd t hh.mm")
- << QDateTime();
+ << u"2008-10-13 UTC+05:1 11.50"_s << u"yyyy-MM-dd t hh.mm"_s << 1900 << QDateTime();
QTest::newRow("invalid-time-spec:random-symbol")
- << QString("2001-09-15T09:33:01.001 $") << QString("yyyy-MM-ddThh:mm:ss.z t")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001 $"_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900
+ << QDateTime();
QTest::newRow("invalid-time-spec:random-digit")
- << QString("2001-09-15T09:33:01.001 1") << QString("yyyy-MM-ddThh:mm:ss.z t")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001 1"_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900
+ << QDateTime();
QTest::newRow("invalid-offset-from-utc:merged-with-time")
- << QString("2008-10-13 UTC+0111.50") << QString("yyyy-MM-dd thh.mm")
- << QDateTime();
+ << u"2008-10-13 UTC+0111.50"_s << u"yyyy-MM-dd thh.mm"_s << 1900 << QDateTime();
QTest::newRow("invalid-offset-from-utc:with-colon-3-digit-merged-with-time")
- << QString("2008-10-13 UTC+01:011.50") << QString("yyyy-MM-dd thh.mm")
- << QDateTime();
+ << u"2008-10-13 UTC+01:011.50"_s << u"yyyy-MM-dd thh.mm"_s << 1900 << QDateTime();
QTest::newRow("invalid-time-spec:empty")
- << QString("2001-09-15T09:33:01.001 ") << QString("yyyy-MM-ddThh:mm:ss.z t")
- << QDateTime();
+ << u"2001-09-15T09:33:01.001 "_s << u"yyyy-MM-ddThh:mm:ss.z t"_s << 1900 << QDateTime();
#if QT_CONFIG(timezone)
QTimeZone southBrazil("America/Sao_Paulo");
if (southBrazil.isValid()) {
QTest::newRow("spring-forward-midnight")
- << QString("2008-10-19 23:45.678 America/Sao_Paulo") << QString("yyyy-MM-dd mm:ss.zzz t")
- // That's in the hour skipped - expect the matching time after the spring-forward, in DST:
- << QDateTime(QDate(2008, 10, 19), QTime(1, 23, 45, 678), southBrazil);
+ // NB: no hour field, so hour takes its default, 0, so that
+ // default can be over-ridden:
+ << u"2008-10-19 23:45.678 America/Sao_Paulo"_s << u"yyyy-MM-dd mm:ss.zzz t"_s << 1900
+ // That's in the hour skipped - expect the matching time after
+ // the spring-forward, in DST:
+ << QDateTime(QDate(2008, 10, 19), QTime(1, 23, 45, 678), southBrazil);
}
QTimeZone berlintz("Europe/Berlin");
if (berlintz.isValid()) {
QTest::newRow("begin-of-high-summer-time-with-tz")
- << QString("1947-05-11 03:23:45.678 Europe/Berlin")
- << QString("yyyy-MM-dd hh:mm:ss.zzz t")
- // That's in the hour skipped - expecting an invalid DateTime
- << QDateTime(QDate(1947, 5, 11), QTime(3, 23, 45, 678), berlintz);
+ << u"1947-05-11 03:23:45.678 Europe/Berlin"_s << u"yyyy-MM-dd hh:mm:ss.zzz t"_s
+ // That's in the hour skipped - expecting an invalid DateTime
+ << 1900 << QDateTime(QDate(1947, 5, 11), QTime(3, 23, 45, 678), berlintz);
}
#endif
- QTest::newRow("late") << QString("9999-12-31T23:59:59.999Z")
- << QString("yyyy-MM-ddThh:mm:ss.zZ")
- << QDateTime(QDate(9999, 12, 31), QTime(23, 59, 59, 999));
+ QTest::newRow("late")
+ << u"9999-12-31T23:59:59.999Z"_s << u"yyyy-MM-ddThh:mm:ss.zZ"_s << 1900
+ << QDateTime(QDate(9999, 12, 31), QTime(23, 59, 59, 999));
// Separators match /([^aAdhHMmstyz]*)/
QTest::newRow("oddly-separated") // To show broken-separator's format is valid.
- << QStringLiteral("2018 wilful long working block relief 12-19T21:09 cruel blurb encore flux")
- << QStringLiteral("yyyy wilful long working block relief MM-ddThh:mm cruel blurb encore flux")
- << QDateTime(QDate(2018, 12, 19), QTime(21, 9));
+ << u"2018 wilful long working block relief 12-19T21:09 cruel blurb encore flux"_s
+ << u"yyyy wilful long working block relief MM-ddThh:mm cruel blurb encore flux"_s
+ << 1900 << QDateTime(QDate(2018, 12, 19), QTime(21, 9));
QTest::newRow("broken-separator")
- << QStringLiteral("2018 wilful")
- << QStringLiteral("yyyy wilful long working block relief MM-ddThh:mm cruel blurb encore flux")
- << QDateTime();
+ << u"2018 wilful"_s
+ << u"yyyy wilful long working block relief MM-ddThh:mm cruel blurb encore flux"_s
+ << 1900 << QDateTime();
QTest::newRow("broken-terminator")
- << QStringLiteral("2018 wilful long working block relief 12-19T21:09 cruel")
- << QStringLiteral("yyyy wilful long working block relief MM-ddThh:mm cruel blurb encore flux")
- << QDateTime();
+ << u"2018 wilful long working block relief 12-19T21:09 cruel"_s
+ << u"yyyy wilful long working block relief MM-ddThh:mm cruel blurb encore flux"_s
+ << 1900 << QDateTime();
// test unicode
- QTest::newRow("unicode handling") << QString(u8"2005🤣06🤣28T07🤣57🤣30.001Z")
- << QString(u8"yyyy🤣MM🤣ddThh🤣mm🤣ss.zt")
- << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 1), Qt::UTC);
-
- // QTBUG-84349
- QTest::newRow("QTBUG-84349: positive sign in month")
- << QStringLiteral("9922+221102233Z") << QStringLiteral("yyyyMMddHHmmsst")
- << QDateTime();
+ QTest::newRow("unicode handling")
+ << QString(u8"2005🤣06🤣28T07🤣57🤣30.001Z")
+ << QString(u8"yyyy🤣MM🤣ddThh🤣mm🤣ss.zt") << 1900
+ << QDateTime(QDate(2005, 6, 28), QTime(7, 57, 30, 1), UTC);
+
+ // Two tests derived from malformed ASN.1 strings (QTBUG-84349):
+ QTest::newRow("curft+ASN.1:UTC")
+ << u"22+221102233Z"_s << u"yyMMddHHmmsst"_s << 1900 << QDateTime();
+ QTest::newRow("curft+ASN.1:Generalized")
+ << u"9922+221102233Z"_s << u"yyyyMMddHHmmsst"_s << 1900 << QDateTime();
+ // Verify baseYear needed by plain ASN.1 works:
+ QTest::newRow("ASN.1:UTC-start")
+ << u"500101000000Z"_s << u"yyMMddHHmmsst"_s << 1950
+ << QDate(1950, 1, 1).startOfDay(QTimeZone::UTC);
+ QTest::newRow("ASN.1:UTC-end")
+ << u"491231235959Z"_s << u"yyMMddHHmmsst"_s << 1950
+ << QDate(2049, 12, 31).endOfDay(QTimeZone::UTC).addMSecs(-999);
// fuzzer test
QTest::newRow("integer overflow found by fuzzer")
- << QStringLiteral("EEE1200000MUB") << QStringLiteral("t")
- << QDateTime();
+ << u"EEE1200000MUB"_s << u"t"_s << 1900 << QDateTime();
+
+ // Rich time-zone specifiers (QTBUG-95966):
+ const auto east3hours = QTimeZone::fromSecondsAheadOfUtc(10800);
+ QTest::newRow("timezone-tt-with-offset:+0300")
+ << u"2008-10-13 +0300 11.50"_s << u"yyyy-MM-dd tt hh.mm"_s
+ << 1900 << QDateTime(QDate(2008, 10, 13), QTime(11, 50), east3hours);
+ QTest::newRow("timezone-ttt-with-offset:+03:00")
+ << u"2008-10-13 +03:00 11.50"_s << u"yyyy-MM-dd ttt hh.mm"_s
+ << 1900 << QDateTime(QDate(2008, 10, 13), QTime(11, 50), east3hours);
+ QTest::newRow("timezone-tttt-with-offset:+03:00")
+ << u"2008-10-13 +03:00 11.50"_s << u"yyyy-MM-dd tttt hh.mm"_s
+ << 1900 << QDateTime(); // Offset not valid when zone name expected.
}
void tst_QDateTime::fromStringStringFormat()
{
QFETCH(QString, string);
QFETCH(QString, format);
+ QFETCH(int, baseYear);
QFETCH(QDateTime, expected);
- QDateTime dt = QDateTime::fromString(string, format);
+ QDateTime dt = QDateTime::fromString(string, format, baseYear);
QCOMPARE(dt, expected);
if (expected.isValid()) {
QCOMPARE(dt.timeSpec(), expected.timeSpec());
-#if QT_CONFIG(timezone)
- if (expected.timeSpec() == Qt::TimeZone)
- QCOMPARE(dt.timeZone(), expected.timeZone());
-#endif
- // OffsetFromUTC needs an offset check - we may as well do it for all:
- QCOMPARE(dt.offsetFromUtc(), expected.offsetFromUtc());
+ QCOMPARE(dt.timeRepresentation(), dt.timeRepresentation());
} else {
QCOMPARE(dt.isValid(), expected.isValid());
QCOMPARE(dt.toMSecsSinceEpoch(), expected.toMSecsSinceEpoch());
@@ -2913,10 +3368,11 @@ void tst_QDateTime::fromStringStringFormat_localTimeZone_data()
QTest::addColumn<QByteArray>("localTimeZone");
QTest::addColumn<QString>("string");
QTest::addColumn<QString>("format");
+ QTest::addColumn<int>("baseYear");
QTest::addColumn<QDateTime>("expected");
- bool lacksRows = true;
#if QT_CONFIG(timezone)
+ bool lacksRows = true;
// Note that the localTimeZone needn't match the zone used in the string and
// expected date-time; indeed, having them different is probably best.
// Both zones need to be valid; GMT always is, so is a safe one to use for
@@ -2924,44 +3380,62 @@ void tst_QDateTime::fromStringStringFormat_localTimeZone_data()
QTimeZone etcGmtWithOffset("Etc/GMT+3");
if (etcGmtWithOffset.isValid()) {
lacksRows = false;
- QTest::newRow("local-timezone-with-offset:Etc/GMT+3") << QByteArrayLiteral("GMT")
- << QString("2008-10-13 Etc/GMT+3 11.50") << QString("yyyy-MM-dd t hh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), etcGmtWithOffset);
- // TODO QTBUG-95966: find better ways to use repeated 't'
- QTest::newRow("double-timezone-with-offset:Etc/GMT+3") << QByteArrayLiteral("GMT")
- << QString("2008-10-13 Etc/GMT+3Etc/GMT+3 11.50") << QString("yyyy-MM-dd tt hh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), etcGmtWithOffset);
+ QTest::newRow("local-timezone-t-with-zone:Etc/GMT+3")
+ << "GMT"_ba << u"2008-10-13 Etc/GMT+3 11.50"_s << u"yyyy-MM-dd t hh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50), etcGmtWithOffset);
+ QTest::newRow("local-timezone-tttt-with-zone:Etc/GMT+3")
+ << "GMT"_ba << u"2008-10-13 Etc/GMT+3 11.50"_s << u"yyyy-MM-dd tttt hh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50), etcGmtWithOffset);
}
+ QTest::newRow("local-timezone-tt-with-zone:Etc/GMT+3")
+ << "GMT"_ba << u"2008-10-13 Etc/GMT+3 11.50"_s << u"yyyy-MM-dd tt hh.mm"_s << 1900
+ << QDateTime(); // Zone name not valid when offset expected
+ QTest::newRow("local-timezone-ttt-with-zone:Etc/GMT+3")
+ << "GMT"_ba << u"2008-10-13 Etc/GMT+3 11.50"_s << u"yyyy-MM-dd ttt hh.mm"_s << 1900
+ << QDateTime(); // Zone name not valid when offset expected
QTimeZone gmtWithOffset("GMT-2");
if (gmtWithOffset.isValid()) {
lacksRows = false;
- QTest::newRow("local-timezone-with-offset:GMT-2") << QByteArrayLiteral("GMT")
- << QString("2008-10-13 GMT-2 11.50") << QString("yyyy-MM-dd t hh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), gmtWithOffset);
+ QTest::newRow("local-timezone-with-offset:GMT-2")
+ << "GMT"_ba << u"2008-10-13 GMT-2 11.50"_s << u"yyyy-MM-dd t hh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50), gmtWithOffset);
}
QTimeZone gmt("GMT");
if (gmt.isValid()) {
lacksRows = false;
- QTest::newRow("local-timezone-with-offset:GMT") << QByteArrayLiteral("GMT")
- << QString("2008-10-13 GMT 11.50") << QString("yyyy-MM-dd t hh.mm")
- << QDateTime(QDate(2008, 10, 13), QTime(11, 50), gmt);
+ const bool fullyLocal = ([]() {
+ TimeZoneRollback useZone("GMT");
+ return qTzName(0) == u"GMT"_s;
+ })();
+ QTest::newRow("local-timezone-with-offset:GMT")
+ << "GMT"_ba << u"2008-10-13 GMT 11.50"_s << u"yyyy-MM-dd t hh.mm"_s << 1900
+ << QDateTime(QDate(2008, 10, 13), QTime(11, 50),
+ fullyLocal ? QTimeZone(QTimeZone::LocalTime) : gmt);
}
QTimeZone helsinki("Europe/Helsinki");
if (helsinki.isValid()) {
lacksRows = false;
- // QTBUG-96861: QAsn1Element::toDateTime() tripped over an assert in
- // QTimeZonePrivate::dataForLocalTime() on macOS and iOS.
- // The first 20m 11s of 1921-05-01 were skipped, so the parser's attempt
- // to construct a local time after scanning yyMM tripped up on the start
- // of the day, when the zone backend lacked transition data.
- QTest::newRow("Helsinki-joins-EET")
- << QByteArrayLiteral("Europe/Helsinki")
- << QString("210506000000Z") << QString("yyMMddHHmmsst")
- << QDateTime(QDate(1921, 5, 6), QTime(0, 0), Qt::UTC);
+ // QTBUG-96861: QAsn1Element::toDateTime() tripped over an assert due to
+ // the first 20m 11s of 1921-05-01 being skipped, so the parser's
+ // attempt to construct a local time after scanning yyMM tripped up on
+ // the start of the day, when the zone backend lacked transition data.
+ // (Because QDTP tries to use local time until it reads the final zone
+ // field, constructing a new QDT after reading each field, hence
+ // transiently wanting 1921-05-01 00:00:00 before reading the dd field.)
+ QTest::newRow("Helsinki-joins-EET:19")
+ << "Europe/Helsinki"_ba << u"210506000000Z"_s << u"yyMMddHHmmsst"_s << 1900
+ << QDateTime(QDate(1921, 5, 6), QTime(0, 0), UTC);
+ // Strictly, ASN.1 wants us to parse that with a different baseYear, so
+ // check that, too, but tweak to match the 1921 transition's mid-point:
+ QTest::newRow("Helsinki-joins-EET:20")
+ << "Europe/Helsinki"_ba << u"210501001006Z"_s << u"yyMMddHHmmsst"_s << 1950
+ << QDateTime(QDate(2021, 5, 1), QTime(0, 10, 6), UTC);
}
-#endif
if (lacksRows)
QSKIP("Testcases all use zones unsupported on this platform");
+#else
+ QSKIP("Test only possible with timezone support enabled");
+#endif
}
void tst_QDateTime::fromStringStringFormat_localTimeZone()
@@ -2979,25 +3453,26 @@ void tst_QDateTime::offsetFromUtc()
QCOMPARE(QDateTime().offsetFromUtc(), 0);
// Offset constructor
- QDateTime dt1(QDate(2013, 1, 1), QTime(1, 0), Qt::OffsetFromUTC, 60 * 60);
+ QDateTime dt1(QDate(2013, 1, 1), QTime(1, 0), QTimeZone::fromSecondsAheadOfUtc(60 * 60));
QCOMPARE(dt1.offsetFromUtc(), 60 * 60);
+ QVERIFY(dt1.timeRepresentation().isValid());
#if QT_CONFIG(timezone)
QVERIFY(dt1.timeZone().isValid());
#endif
- dt1 = QDateTime(QDate(2013, 1, 1), QTime(1, 0), Qt::OffsetFromUTC, -60 * 60);
+ dt1 = QDateTime(QDate(2013, 1, 1), QTime(1, 0), QTimeZone::fromSecondsAheadOfUtc(-60 * 60));
QCOMPARE(dt1.offsetFromUtc(), -60 * 60);
// UTC should be 0 offset
- QDateTime dt2(QDate(2013, 1, 1), QTime(0, 0), Qt::UTC);
+ QDateTime dt2(QDate(2013, 1, 1), QTime(0, 0), UTC);
QCOMPARE(dt2.offsetFromUtc(), 0);
// LocalTime should vary
if (zoneIsCET) {
// Time definitely in Standard Time so 1 hour ahead
- QDateTime dt3(QDate(2013, 1, 1), QTime(0, 0), Qt::LocalTime);
+ QDateTime dt3 = QDate(2013, 1, 1).startOfDay();
QCOMPARE(dt3.offsetFromUtc(), 1 * 60 * 60);
// Time definitely in Daylight Time so 2 hours ahead
- QDateTime dt4(QDate(2013, 6, 1), QTime(0, 0), Qt::LocalTime);
+ QDateTime dt4 = QDate(2013, 6, 1).startOfDay();
QCOMPARE(dt4.offsetFromUtc(), 2 * 60 * 60);
} else {
qDebug("Skipped some tests specific to Central European Time "
@@ -3013,6 +3488,9 @@ void tst_QDateTime::offsetFromUtc()
#endif
}
+#if QT_DEPRECATED_SINCE(6, 9)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QDateTime::setOffsetFromUtc()
{
/* Basic tests. */
@@ -3088,7 +3566,7 @@ void tst_QDateTime::setOffsetFromUtc()
void tst_QDateTime::toOffsetFromUtc()
{
- QDateTime dt1(QDate(2013, 1, 1), QTime(0, 0), Qt::UTC);
+ QDateTime dt1(QDate(2013, 1, 1), QTime(0, 0), QTimeZone::UTC);
QDateTime dt2 = dt1.toOffsetFromUtc(60 * 60);
QCOMPARE(dt2, dt1);
@@ -3108,6 +3586,8 @@ void tst_QDateTime::toOffsetFromUtc()
QCOMPARE(dt2.date(), QDate(2013, 1, 1));
QCOMPARE(dt2.time(), QTime(0, 0));
}
+QT_WARNING_POP
+#endif // 6.9 deprecation
void tst_QDateTime::zoneAtTime_data()
{
@@ -3183,28 +3663,46 @@ void tst_QDateTime::zoneAtTime()
void tst_QDateTime::timeZoneAbbreviation()
{
- QDateTime dt1(QDate(2013, 1, 1), QTime(1, 0), Qt::OffsetFromUTC, 60 * 60);
+ QDateTime dt1(QDate(2013, 1, 1), QTime(1, 0), QTimeZone::fromSecondsAheadOfUtc(60 * 60));
QCOMPARE(dt1.timeZoneAbbreviation(), QString("UTC+01:00"));
- QDateTime dt2(QDate(2013, 1, 1), QTime(1, 0), Qt::OffsetFromUTC, -60 * 60);
+ QDateTime dt2(QDate(2013, 1, 1), QTime(1, 0), QTimeZone::fromSecondsAheadOfUtc(-60 * 60));
QCOMPARE(dt2.timeZoneAbbreviation(), QString("UTC-01:00"));
- QDateTime dt3(QDate(2013, 1, 1), QTime(0, 0), Qt::UTC);
+ QDateTime dt3(QDate(2013, 1, 1), QTime(0, 0), UTC);
QCOMPARE(dt3.timeZoneAbbreviation(), QString("UTC"));
// LocalTime should vary
if (zoneIsCET) {
// Time definitely in Standard Time
- QDateTime dt4(QDate(2013, 1, 1), QTime(0, 0), Qt::LocalTime);
+ QDateTime dt4 = QDate(2013, 1, 1).startOfDay();
+ /* Note that MET is functionally an alias for CET (their zoneinfo files
+ differ only in the first letter of the abbreviations), unlike the
+ various zones that give CET as their abbreviation.
+ */
+ {
+ const auto abbrev = dt4.timeZoneAbbreviation();
+ auto reporter = qScopeGuard([abbrev]() {
+ qDebug() << "Unexpected abbreviation" << abbrev;
+ });
#ifdef Q_OS_WIN
- QEXPECT_FAIL("", "Windows only reports long name (QTBUG-32759)", Continue);
+ QEXPECT_FAIL("", "Windows only reports long name (QTBUG-32759)", Continue);
#endif
- QCOMPARE(dt4.timeZoneAbbreviation(), QStringLiteral("CET"));
+ QVERIFY(abbrev == u"CET"_s || abbrev == u"MET"_s);
+ reporter.dismiss();
+ }
// Time definitely in Daylight Time
- QDateTime dt5(QDate(2013, 6, 1), QTime(0, 0), Qt::LocalTime);
+ QDateTime dt5 = QDate(2013, 6, 1).startOfDay();
+ {
+ const auto abbrev = dt5.timeZoneAbbreviation();
+ auto reporter = qScopeGuard([abbrev]() {
+ qDebug() << "Unexpected abbreviation" << abbrev;
+ });
#ifdef Q_OS_WIN
- QEXPECT_FAIL("", "Windows only reports long name (QTBUG-32759)", Continue);
+ QEXPECT_FAIL("", "Windows only reports long name (QTBUG-32759)", Continue);
#endif
- QCOMPARE(dt5.timeZoneAbbreviation(), QStringLiteral("CEST"));
+ QVERIFY(abbrev == u"CEST"_s || abbrev == u"MEST"_s);
+ reporter.dismiss();
+ }
} else {
qDebug("(Skipped some CET-only tests)");
}
@@ -3297,8 +3795,8 @@ void tst_QDateTime::utcOffsetLessThan() const
QDateTime dt1(QDate(2002, 10, 10), QTime(0, 0));
QDateTime dt2(dt1);
- dt1.setOffsetFromUtc(-(2 * 60 * 60)); // Minus two hours.
- dt2.setOffsetFromUtc(-(3 * 60 * 60)); // Minus three hours.
+ dt1.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(-(2 * 60 * 60))); // Minus two hours.
+ dt2.setTimeZone(QTimeZone::fromSecondsAheadOfUtc(-(3 * 60 * 60))); // Minus three hours.
QVERIFY(dt1 != dt2);
QVERIFY(!(dt1 == dt2));
@@ -3308,14 +3806,14 @@ void tst_QDateTime::utcOffsetLessThan() const
void tst_QDateTime::isDaylightTime() const
{
- QDateTime utc1(QDate(2012, 1, 1), QTime(0, 0), Qt::UTC);
+ QDateTime utc1(QDate(2012, 1, 1), QTime(0, 0), UTC);
QVERIFY(!utc1.isDaylightTime());
- QDateTime utc2(QDate(2012, 6, 1), QTime(0, 0), Qt::UTC);
+ QDateTime utc2(QDate(2012, 6, 1), QTime(0, 0), UTC);
QVERIFY(!utc2.isDaylightTime());
- QDateTime offset1(QDate(2012, 1, 1), QTime(0, 0), Qt::OffsetFromUTC, 1 * 60 * 60);
+ QDateTime offset1(QDate(2012, 1, 1), QTime(0, 0), QTimeZone::fromSecondsAheadOfUtc(60 * 60));
QVERIFY(!offset1.isDaylightTime());
- QDateTime offset2(QDate(2012, 6, 1), QTime(0, 0), Qt::OffsetFromUTC, 1 * 60 * 60);
+ QDateTime offset2(QDate(2012, 6, 1), QTime(0, 0), QTimeZone::fromSecondsAheadOfUtc(60 * 60));
QVERIFY(!offset2.isDaylightTime());
if (zoneIsCET) {
@@ -3344,8 +3842,8 @@ void tst_QDateTime::daylightTransitions() const
const qint64 spring2012 = 1332637200000;
const qint64 autumn2012 = 1351386000000;
const qint64 msecsOneHour = 3600000;
- QCOMPARE(spring2012, QDateTime(QDate(2012, 3, 25), QTime(1, 0), Qt::UTC).toMSecsSinceEpoch());
- QCOMPARE(autumn2012, QDateTime(QDate(2012, 10, 28), QTime(1, 0), Qt::UTC).toMSecsSinceEpoch());
+ QCOMPARE(spring2012, QDateTime(QDate(2012, 3, 25), QTime(1, 0), UTC).toMSecsSinceEpoch());
+ QCOMPARE(autumn2012, QDateTime(QDate(2012, 10, 28), QTime(1, 0), UTC).toMSecsSinceEpoch());
// Test for correct behviour for StandardTime -> DaylightTime transition, i.e. missing hour
@@ -3353,19 +3851,32 @@ void tst_QDateTime::daylightTransitions() const
QDateTime before(QDate(2012, 3, 25), QTime(1, 59, 59, 999));
QVERIFY(before.isValid());
+ QVERIFY(!before.isDaylightTime());
QCOMPARE(before.date(), QDate(2012, 3, 25));
QCOMPARE(before.time(), QTime(1, 59, 59, 999));
QCOMPARE(before.toMSecsSinceEpoch(), spring2012 - 1);
- QDateTime missing(QDate(2012, 3, 25), QTime(2, 0));
- QVERIFY(!missing.isValid());
- QCOMPARE(missing.date(), QDate(2012, 3, 25));
- QCOMPARE(missing.time(), QTime(2, 0));
- // datetimeparser relies on toMSecsSinceEpoch to still work:
- QCOMPARE(missing.toMSecsSinceEpoch(), spring2012);
+ QDateTime entering(QDate(2012, 3, 25), QTime(2, 0),
+ QDateTime::TransitionResolution::PreferBefore);
+ QVERIFY(entering.isValid());
+ QVERIFY(!entering.isDaylightTime());
+ QCOMPARE(entering.date(), QDate(2012, 3, 25));
+ QCOMPARE(entering.time(), QTime(1, 0));
+ // QDateTimeParser relies on toMSecsSinceEpoch() to still work:
+ QCOMPARE(entering.toMSecsSinceEpoch(), spring2012 - msecsOneHour);
+
+ QDateTime leaving(QDate(2012, 3, 25), QTime(2, 0),
+ QDateTime::TransitionResolution::PreferAfter);
+ QVERIFY(leaving.isValid());
+ QVERIFY(leaving.isDaylightTime());
+ QCOMPARE(leaving.date(), QDate(2012, 3, 25));
+ QCOMPARE(leaving.time(), QTime(3, 0));
+ // QDateTimeParser relies on toMSecsSinceEpoch to still work:
+ QCOMPARE(leaving.toMSecsSinceEpoch(), spring2012);
QDateTime after(QDate(2012, 3, 25), QTime(3, 0));
QVERIFY(after.isValid());
+ QVERIFY(after.isDaylightTime());
QCOMPARE(after.date(), QDate(2012, 3, 25));
QCOMPARE(after.time(), QTime(3, 0));
QCOMPARE(after.toMSecsSinceEpoch(), spring2012);
@@ -3385,19 +3896,18 @@ void tst_QDateTime::daylightTransitions() const
QCOMPARE(after.toMSecsSinceEpoch(), spring2012);
// Test changing time spec re-validates the date/time
-
- QDateTime utc(QDate(2012, 3, 25), QTime(2, 0), Qt::UTC);
+ QDateTime utc(QDate(2012, 3, 25), QTime(2, 0), UTC);
QVERIFY(utc.isValid());
QCOMPARE(utc.date(), QDate(2012, 3, 25));
QCOMPARE(utc.time(), QTime(2, 0));
- utc.setTimeSpec(Qt::LocalTime);
- QVERIFY(!utc.isValid());
+ utc.setTimeZone(QTimeZone::LocalTime); // Resolved to RelativeToBefore.
+ QVERIFY(utc.isValid());
QCOMPARE(utc.date(), QDate(2012, 3, 25));
- QCOMPARE(utc.time(), QTime(2, 0));
- utc.setTimeSpec(Qt::UTC);
+ QCOMPARE(utc.time(), QTime(3, 0));
+ utc.setTimeZone(UTC); // Preserves the changed time().
QVERIFY(utc.isValid());
QCOMPARE(utc.date(), QDate(2012, 3, 25));
- QCOMPARE(utc.time(), QTime(2, 0));
+ QCOMPARE(utc.time(), QTime(3, 0));
// Test date maths, if result falls in missing hour then becomes next
// hour (or is always invalid; mktime() may reject gap-times).
@@ -3435,19 +3945,17 @@ void tst_QDateTime::daylightTransitions() const
#undef CHECK_SPRING_FORWARD
// Test for correct behviour for DaylightTime -> StandardTime transition, fall-back
- // TODO (QTBUG-79923): Compare to results of direct QDateTime(date, time, fold)
- // construction; see Prior/Post commented-out tests.
QDateTime autumnMidnight = QDate(2012, 10, 28).startOfDay();
QVERIFY(autumnMidnight.isValid());
- // QCOMPARE(autumnMidnight, QDateTime(QDate(2012, 10, 28), QTime(2, 0), Prior));
QCOMPARE(autumnMidnight.date(), QDate(2012, 10, 28));
QCOMPARE(autumnMidnight.time(), QTime(0, 0));
QCOMPARE(autumnMidnight.toMSecsSinceEpoch(), autumn2012 - 3 * msecsOneHour);
QDateTime startFirst = autumnMidnight.addMSecs(2 * msecsOneHour);
QVERIFY(startFirst.isValid());
- // QCOMPARE(startFirst, QDateTime(QDate(2012, 10, 28), QTime(2, 0), Prior));
+ QCOMPARE(startFirst, QDateTime(QDate(2012, 10, 28), QTime(2, 0),
+ QDateTime::TransitionResolution::PreferBefore));
QCOMPARE(startFirst.date(), QDate(2012, 10, 28));
QCOMPARE(startFirst.time(), QTime(2, 0));
QCOMPARE(startFirst.toMSecsSinceEpoch(), autumn2012 - msecsOneHour);
@@ -3455,7 +3963,9 @@ void tst_QDateTime::daylightTransitions() const
// 1 msec before transition is 2:59:59.999 FirstOccurrence
QDateTime endFirst = startFirst.addMSecs(msecsOneHour - 1);
QVERIFY(endFirst.isValid());
- // QCOMPARE(endFirst, QDateTime(QDate(2012, 10, 28), QTime(2, 59, 59, 999), Prior));
+ QCOMPARE(endFirst,
+ QDateTime(QDate(2012, 10, 28), QTime(2, 59, 59, 999),
+ QDateTime::TransitionResolution::PreferBefore));
QCOMPARE(endFirst.date(), QDate(2012, 10, 28));
QCOMPARE(endFirst.time(), QTime(2, 59, 59, 999));
QCOMPARE(endFirst.toMSecsSinceEpoch(), autumn2012 - 1);
@@ -3463,7 +3973,8 @@ void tst_QDateTime::daylightTransitions() const
// At the transition, starting the second pass
QDateTime startRepeat = endFirst.addMSecs(1);
QVERIFY(startRepeat.isValid());
- // QCOMPARE(startRepeat, QDateTime(QDate(2012, 10, 28), QTime(2, 0), Post));
+ QCOMPARE(startRepeat, QDateTime(QDate(2012, 10, 28), QTime(2, 0),
+ QDateTime::TransitionResolution::PreferAfter));
QCOMPARE(startRepeat.date(), QDate(2012, 10, 28));
QCOMPARE(startRepeat.time(), QTime(2, 0));
QCOMPARE(startRepeat.toMSecsSinceEpoch(), autumn2012);
@@ -3471,7 +3982,9 @@ void tst_QDateTime::daylightTransitions() const
// 59:59.999 after transition is 2:59:59.999 SecondOccurrence
QDateTime endRepeat = endFirst.addMSecs(msecsOneHour);
QVERIFY(endRepeat.isValid());
- // QCOMPARE(endRepeat, QDateTime(QDate(2012, 10, 28), QTime(2, 59, 59, 999), Post));
+ QCOMPARE(endRepeat,
+ QDateTime(QDate(2012, 10, 28), QTime(2, 59, 59, 999),
+ QDateTime::TransitionResolution::PreferAfter));
QCOMPARE(endRepeat.date(), QDate(2012, 10, 28));
QCOMPARE(endRepeat.time(), QTime(2, 59, 59, 999));
QCOMPARE(endRepeat.toMSecsSinceEpoch(), autumn2012 + msecsOneHour - 1);
@@ -3727,9 +4240,9 @@ void tst_QDateTime::timeZones() const
{
#if QT_CONFIG(timezone)
QTimeZone invalidTz = QTimeZone("Vulcan/ShiKahr");
- QCOMPARE(invalidTz.isValid(), false);
+ QVERIFY(!invalidTz.isValid());
QDateTime invalidDateTime = QDateTime(QDate(2000, 1, 1), QTime(0, 0), invalidTz);
- QCOMPARE(invalidDateTime.isValid(), false);
+ QVERIFY(!invalidDateTime.isValid());
QCOMPARE(invalidDateTime.date(), QDate(2000, 1, 1));
QCOMPARE(invalidDateTime.time(), QTime(0, 0));
@@ -3737,39 +4250,39 @@ void tst_QDateTime::timeZones() const
QTimeZone nzTzOffset = QTimeZone(12 * 3600);
// During Standard Time NZ is +12:00
- QDateTime utcStd(QDate(2012, 6, 1), QTime(0, 0), Qt::UTC);
+ QDateTime utcStd(QDate(2012, 6, 1), QTime(0, 0), UTC);
QDateTime nzStd(QDate(2012, 6, 1), QTime(12, 0), nzTz);
QDateTime nzStdOffset(QDate(2012, 6, 1), QTime(12, 0), nzTzOffset);
- QCOMPARE(nzStd.isValid(), true);
+ QVERIFY(nzStd.isValid());
QCOMPARE(nzStd.timeSpec(), Qt::TimeZone);
QCOMPARE(nzStd.date(), QDate(2012, 6, 1));
QCOMPARE(nzStd.time(), QTime(12, 0));
QVERIFY(nzStd.timeZone() == nzTz);
QCOMPARE(nzStd.timeZone().id(), QByteArray("Pacific/Auckland"));
QCOMPARE(nzStd.offsetFromUtc(), 43200);
- QCOMPARE(nzStd.isDaylightTime(), false);
+ QVERIFY(!nzStd.isDaylightTime());
QCOMPARE(nzStd.toMSecsSinceEpoch(), utcStd.toMSecsSinceEpoch());
- QCOMPARE(nzStdOffset.isValid(), true);
+ QVERIFY(nzStdOffset.isValid());
QCOMPARE(nzStdOffset.timeSpec(), Qt::TimeZone);
QCOMPARE(nzStdOffset.date(), QDate(2012, 6, 1));
QCOMPARE(nzStdOffset.time(), QTime(12, 0));
QVERIFY(nzStdOffset.timeZone() == nzTzOffset);
- QCOMPARE(nzStdOffset.timeZone().id(), QByteArray("UTC+12"));
+ QCOMPARE(nzStdOffset.timeZone().id(), QByteArray("UTC+12:00"));
QCOMPARE(nzStdOffset.offsetFromUtc(), 43200);
- QCOMPARE(nzStdOffset.isDaylightTime(), false);
+ QVERIFY(!nzStdOffset.isDaylightTime());
QCOMPARE(nzStdOffset.toMSecsSinceEpoch(), utcStd.toMSecsSinceEpoch());
// During Daylight Time NZ is +13:00
- QDateTime utcDst(QDate(2012, 1, 1), QTime(0, 0), Qt::UTC);
+ QDateTime utcDst(QDate(2012, 1, 1), QTime(0, 0), UTC);
QDateTime nzDst(QDate(2012, 1, 1), QTime(13, 0), nzTz);
- QCOMPARE(nzDst.isValid(), true);
+ QVERIFY(nzDst.isValid());
QCOMPARE(nzDst.date(), QDate(2012, 1, 1));
QCOMPARE(nzDst.time(), QTime(13, 0));
QCOMPARE(nzDst.offsetFromUtc(), 46800);
- QCOMPARE(nzDst.isDaylightTime(), true);
+ QVERIFY(nzDst.isDaylightTime());
QCOMPARE(nzDst.toMSecsSinceEpoch(), utcDst.toMSecsSinceEpoch());
QDateTime utc = nzStd.toUTC();
@@ -3789,7 +4302,7 @@ void tst_QDateTime::timeZones() const
QCOMPARE(aus.date(), QDate(2012, 6, 1));
QCOMPARE(aus.time(), QTime(10, 0));
- QDateTime dt1(QDate(2012, 6, 1), QTime(0, 0), Qt::UTC);
+ QDateTime dt1(QDate(2012, 6, 1), QTime(0, 0), UTC);
QCOMPARE(dt1.timeSpec(), Qt::UTC);
dt1.setTimeZone(nzTz);
QCOMPARE(dt1.timeSpec(), Qt::TimeZone);
@@ -3801,13 +4314,13 @@ void tst_QDateTime::timeZones() const
QCOMPARE(dt2.date(), dt1.date());
QCOMPARE(dt2.time(), dt1.time());
QCOMPARE(dt2.timeSpec(), dt1.timeSpec());
- QCOMPARE(dt2.timeZone(), dt1.timeZone());
+ QCOMPARE(dt2.timeRepresentation(), dt1.timeRepresentation());
QDateTime dt3 = QDateTime::fromMSecsSinceEpoch(1338465600000, nzTz);
QCOMPARE(dt3.date(), dt1.date());
QCOMPARE(dt3.time(), dt1.time());
QCOMPARE(dt3.timeSpec(), dt1.timeSpec());
- QCOMPARE(dt3.timeZone(), dt1.timeZone());
+ QCOMPARE(dt3.timeRepresentation(), dt1.timeRepresentation());
// The start of year 1 should be *describable* in any zone (QTBUG-78051)
dt3 = QDateTime(QDate(1, 1, 1), QTime(0, 0), ausTz);
@@ -3837,7 +4350,7 @@ void tst_QDateTime::timeZones() const
// Standard Time to Daylight Time 2013 on 2013-03-31 is 2:00 local time / 1:00 UTC
const qint64 gapMSecs = 1364691600000;
- QCOMPARE(gapMSecs, QDateTime(QDate(2013, 3, 31), QTime(1, 0), Qt::UTC).toMSecsSinceEpoch());
+ QCOMPARE(gapMSecs, QDateTime(QDate(2013, 3, 31), QTime(1, 0), UTC).toMSecsSinceEpoch());
// Test MSecs to local
// - Test 1 msec before tran = 01:59:59.999
@@ -3864,18 +4377,57 @@ void tst_QDateTime::timeZones() const
QCOMPARE(atGap.toMSecsSinceEpoch(), gapMSecs);
// - Test transition hole, setting 02:00:00 is invalid
QDateTime inGap = QDateTime(QDate(2013, 3, 31), QTime(2, 0), cet);
- QVERIFY(!inGap.isValid());
+ QVERIFY(inGap.isValid());
QCOMPARE(inGap.date(), QDate(2013, 3, 31));
- QCOMPARE(inGap.time(), QTime(2, 0));
- // - Test transition hole, setting 02:59:59.999 is invalid
+ QCOMPARE(inGap.time(), QTime(3, 0));
+ QCOMPARE(inGap.offsetFromUtc(), 7200);
+ // - Test transition hole, 02:59:59.999 was skipped:
inGap = QDateTime(QDate(2013, 3, 31), QTime(2, 59, 59, 999), cet);
- QVERIFY(!inGap.isValid());
+ QVERIFY(inGap.isValid());
QCOMPARE(inGap.date(), QDate(2013, 3, 31));
- QCOMPARE(inGap.time(), QTime(2, 59, 59, 999));
+ QCOMPARE(inGap.time(), QTime(3, 59, 59, 999));
+ QCOMPARE(inGap.offsetFromUtc(), 7200);
+ // Test similar for local time, if it's CET:
+ if (zoneIsCET) {
+ inGap = QDateTime(QDate(2013, 3, 31), QTime(2, 30));
+ QVERIFY(inGap.isValid());
+ QCOMPARE(inGap.date(), QDate(2013, 3, 31));
+ QCOMPARE(inGap.offsetFromUtc(), 7200);
+ QCOMPARE(inGap.time(), QTime(3, 30));
+ }
+
+ // Test a gap more than 1'141'707.91-years from 1970, outside ShortData's range,
+ // The zone version is non-short in any case, but check it anyway.
+ // However, we can only test this if the underlying OS believes CET continues
+ // exercising DST indefinitely; Darwin, for example, assumes we'll have all
+ // kicked the habit by the end of 2100.
+ constexpr int longYear = 1'143'678;
+ constexpr qint64 millisInWeek = qint64(7) * 24 * 60 * 60 * 1000;
+ if (QDateTime(QDate(longYear, 3, 24), QTime(12, 0), cet).msecsTo(
+ QDateTime(QDate(longYear, 3, 31), QTime(12, 0), cet)) < millisInWeek) {
+ inGap = QDateTime(QDate(longYear, 3, 27), QTime(2, 30), cet);
+ QVERIFY(inGap.isValid());
+ QCOMPARE(inGap.date(), QDate(longYear, 3, 27));
+ QCOMPARE(inGap.time(), QTime(3, 30));
+ QCOMPARE(inGap.offsetFromUtc(), 7200);
+ } else {
+ qDebug("Skipping far-future check beyond zoned end of DST");
+ }
+ if (zoneIsCET && QDateTime(QDate(longYear, 3, 24), QTime(12, 0)).msecsTo(
+ QDateTime(QDate(longYear, 3, 31), QTime(12, 0))) < millisInWeek) {
+ inGap = QDateTime(QDate(longYear, 3, 27), QTime(2, 30));
+ QVERIFY(inGap.isValid());
+ QCOMPARE(inGap.date(), QDate(longYear, 3, 27));
+ QCOMPARE(inGap.offsetFromUtc(), 7200);
+ QCOMPARE(inGap.time(), QTime(3, 30));
+ } else {
+ qDebug(zoneIsCET ? "Skipping far-future check beyond local end of DST"
+ : "Skipping CET-specific test");
+ }
// Standard Time to Daylight Time 2013 on 2013-10-27 is 3:00 local time / 1:00 UTC
const qint64 replayMSecs = 1382835600000;
- QCOMPARE(replayMSecs, QDateTime(QDate(2013, 10, 27), QTime(1, 0), Qt::UTC).toMSecsSinceEpoch());
+ QCOMPARE(replayMSecs, QDateTime(QDate(2013, 10, 27), QTime(1, 0), UTC).toMSecsSinceEpoch());
// Test MSecs to local
// - Test 1 hour before tran = 02:00:00 local first occurrence
@@ -3897,7 +4449,7 @@ void tst_QDateTime::timeZones() const
// - Test 1 hour after tran = 03:00:00 local
QDateTime hourAfter = QDateTime::fromMSecsSinceEpoch(replayMSecs + 3600000, cet);
QCOMPARE(hourAfter.date(), QDate(2013, 10, 27));
- QCOMPARE(hourAfter.time(), QTime(3, 0, 0));
+ QCOMPARE(hourAfter.time(), QTime(3, 0));
// TODO (QTBUG-79923): Compare to results of direct QDateTime(date, time, cet, fold)
// construction; see Prior/Post commented-out tests.
@@ -3949,14 +4501,14 @@ void tst_QDateTime::systemTimeZoneChange() const
// Start out in Brisbane time:
TimeZoneRollback useZone(QByteArray("AEST-10:00"));
- if (QDateTime(date, early, Qt::LocalTime).offsetFromUtc() != 600 * 60)
+ if (QDateTime(date, early).offsetFromUtc() != 600 * 60)
QSKIP("Test depends on system support for changing zone to AEST-10:00");
#if QT_CONFIG(timezone)
QVERIFY(QTimeZone::systemTimeZone().isValid());
#endif
- const QDateTime localDate = QDateTime(date, early, Qt::LocalTime);
- const QDateTime utcDate = QDateTime(date, early, Qt::UTC);
+ const QDateTime localDate = QDateTime(date, early);
+ const QDateTime utcDate = QDateTime(date, early, UTC);
const qint64 localMsecs = localDate.toMSecsSinceEpoch();
const qint64 utcMsecs = utcDate.toMSecsSinceEpoch();
#if QT_CONFIG(timezone)
@@ -3973,16 +4525,16 @@ void tst_QDateTime::systemTimeZoneChange() const
// Change to Indian time
useZone.reset(QByteArray("IST-05:30"));
- if (QDateTime(date, early, Qt::LocalTime).offsetFromUtc() != 330 * 60)
+ if (QDateTime(date, early).offsetFromUtc() != 330 * 60)
QSKIP("Test depends on system support for changing zone to IST-05:30");
#if QT_CONFIG(timezone)
QVERIFY(QTimeZone::systemTimeZone().isValid());
#endif
- QCOMPARE(localDate, QDateTime(date, early, Qt::LocalTime));
+ QCOMPARE(localDate, QDateTime(date, early));
// Note: localDate.toMSecsSinceEpoch == localMsecs, unchanged, iff localDate is pimpled.
- QVERIFY(localMsecs != QDateTime(date, early, Qt::LocalTime).toMSecsSinceEpoch());
- QCOMPARE(utcDate, QDateTime(date, early, Qt::UTC));
+ QVERIFY(localMsecs != QDateTime(date, early).toMSecsSinceEpoch());
+ QCOMPARE(utcDate, QDateTime(date, early, UTC));
QCOMPARE(utcDate.toMSecsSinceEpoch(), utcMsecs);
#if QT_CONFIG(timezone)
QCOMPARE(tzDate.toMSecsSinceEpoch(), tzMsecs);
@@ -4002,17 +4554,19 @@ void tst_QDateTime::invalid_data() const
QTest::newRow("simple") << invalidDate << Qt::LocalTime << true;
QTest::newRow("UTC") << invalidDate.toUTC() << Qt::UTC << true;
QTest::newRow("offset")
- << invalidDate.toOffsetFromUtc(3600) << Qt::OffsetFromUTC << true;
+ << invalidDate.toTimeZone(QTimeZone::fromSecondsAheadOfUtc(3600)) << Qt::OffsetFromUTC
+ << true;
#if QT_CONFIG(timezone)
QTest::newRow("CET")
<< invalidDate.toTimeZone(QTimeZone("Europe/Oslo")) << Qt::TimeZone << true;
// Crash tests, QTBUG-80146:
QTest::newRow("nozone+construct")
- << QDateTime(QDate(1970, 1, 1), QTime(12, 0), QTimeZone()) << Qt::TimeZone << false;
+ << QDateTime(QDate(1970, 1, 1), QTime(12, 0), QTimeZone())
+ << Qt::TimeZone << false;
QTest::newRow("nozone+fromMSecs")
<< QDateTime::fromMSecsSinceEpoch(42, QTimeZone()) << Qt::TimeZone << false;
- QDateTime valid(QDate(1970, 1, 1), QTime(12, 0), Qt::UTC);
+ QDateTime valid(QDate(1970, 1, 1), QTime(12, 0), UTC);
QTest::newRow("tonozone") << valid.toTimeZone(QTimeZone()) << Qt::TimeZone << false;
#endif
}
@@ -4028,38 +4582,36 @@ void tst_QDateTime::invalid() const
if (!goodZone)
QCOMPARE(when.toMSecsSinceEpoch(), 0);
QVERIFY(!when.isDaylightTime());
-#if QT_CONFIG(timezone)
- QCOMPARE(when.timeZone().isValid(), goodZone);
-#endif
+ QCOMPARE(when.timeRepresentation().isValid(), goodZone);
}
void tst_QDateTime::range() const
{
using Bounds = std::numeric_limits<qint64>;
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(Bounds::min() + 1, Qt::UTC).date().year(),
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(Bounds::min() + 1, UTC).date().year(),
int(QDateTime::YearRange::First));
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(Bounds::max() - 1, Qt::UTC).date().year(),
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(Bounds::max() - 1, UTC).date().year(),
int(QDateTime::YearRange::Last));
constexpr qint64 millisPerDay = 24 * 3600 * 1000;
constexpr qint64 wholeDays = Bounds::max() / millisPerDay;
constexpr qint64 millisRemainder = Bounds::max() % millisPerDay;
QVERIFY(QDateTime(QDate(1970, 1, 1).addDays(wholeDays),
QTime::fromMSecsSinceStartOfDay(millisRemainder),
- Qt::UTC).isValid());
+ UTC).isValid());
QVERIFY(!QDateTime(QDate(1970, 1, 1).addDays(wholeDays),
QTime::fromMSecsSinceStartOfDay(millisRemainder + 1),
- Qt::UTC).isValid());
+ UTC).isValid());
QVERIFY(QDateTime(QDate(1970, 1, 1).addDays(-wholeDays - 1),
QTime::fromMSecsSinceStartOfDay(3600 * 24000 - millisRemainder - 1),
- Qt::UTC).isValid());
+ UTC).isValid());
QVERIFY(!QDateTime(QDate(1970, 1, 1).addDays(-wholeDays - 1),
QTime::fromMSecsSinceStartOfDay(3600 * 24000 - millisRemainder - 2),
- Qt::UTC).isValid());
+ UTC).isValid());
}
void tst_QDateTime::macTypes()
{
-#ifndef Q_OS_MAC
+#ifndef Q_OS_DARWIN
QSKIP("This is a Apple-only test");
#else
extern void tst_QDateTime_macTypes(); // in qdatetime_mac.mm
@@ -4067,5 +4619,223 @@ void tst_QDateTime::macTypes()
#endif
}
+#if __cpp_lib_chrono >= 201907L
+using StdSysMillis = std::chrono::sys_time<std::chrono::milliseconds>;
+Q_DECLARE_METATYPE(StdSysMillis);
+#endif
+
+void tst_QDateTime::stdCompatibilitySysTime_data()
+{
+#if __cpp_lib_chrono >= 201907L
+ QTest::addColumn<StdSysMillis>("sysTime");
+ QTest::addColumn<QDateTime>("expected");
+
+ using namespace std::chrono;
+
+ QTest::newRow("zero")
+ << StdSysMillis(0s)
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 0), UTC);
+ QTest::newRow("1s")
+ << StdSysMillis(1s)
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 0, 1), UTC);
+ QTest::newRow("1ms")
+ << StdSysMillis(1ms)
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 0, 0, 1), UTC);
+ QTest::newRow("365d")
+ << StdSysMillis(days(365))
+ << QDateTime(QDate(1971, 1, 1), QTime(0, 0), UTC);
+ QTest::newRow("-1s")
+ << StdSysMillis(-1s)
+ << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59), UTC);
+ QTest::newRow("-1ms")
+ << StdSysMillis(-1ms)
+ << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59, 999), UTC);
+
+ {
+ // The first leap second occurred on 30 June 1972 at 23:59:60.
+ // Check that QDateTime does not take that leap second into account (like sys_time)
+ const year_month_day firstLeapSecondDate = 1972y/July/1;
+ const sys_days firstLeapSecondDateAsSysDays = firstLeapSecondDate;
+ QTest::newRow("first_leap_second")
+ << StdSysMillis(firstLeapSecondDateAsSysDays)
+ << QDateTime(QDate(1972, 7, 1), QTime(0, 0), UTC);
+ }
+
+ {
+ // Random date
+ const sys_days date = 2000y/January/31;
+ const StdSysMillis dateTime = date + 3h + 10min + 42s;
+ QTest::newRow("2000-01-31 03:10:42")
+ << dateTime
+ << QDateTime(QDate(2000, 1, 31), QTime(3, 10, 42), UTC);
+ }
+#else
+ QSKIP("This test requires C++20's <chrono>.");
+#endif
+}
+
+void tst_QDateTime::stdCompatibilitySysTime()
+{
+#if __cpp_lib_chrono >= 201907L
+ QFETCH(StdSysMillis, sysTime);
+ QFETCH(QDateTime, expected);
+
+ using namespace std::chrono;
+
+ // system_clock in milliseconds -> QDateTime
+ QDateTime dtFromSysTime = QDateTime::fromStdTimePoint(sysTime);
+ QCOMPARE(dtFromSysTime, expected);
+ QCOMPARE(dtFromSysTime.timeSpec(), Qt::UTC);
+
+ // QDateTime -> system_clock in milliseconds
+ StdSysMillis sysTimeFromDt = dtFromSysTime.toStdSysMilliseconds();
+ QCOMPARE(sysTimeFromDt, sysTime);
+
+ // system_clock in seconds -> QDateTime
+ sys_seconds sysTimeSecs = floor<seconds>(sysTime);
+ QDateTime dtFromSysSeconds = QDateTime::fromStdTimePoint(sysTimeSecs);
+ QDateTime expectedInSeconds = expected.addMSecs(-expected.time().msec()); // "floor"
+ QCOMPARE(dtFromSysSeconds, expectedInSeconds);
+ QCOMPARE(dtFromSysSeconds.timeSpec(), Qt::UTC);
+
+ // QDateTime -> system_clock in seconds
+ sys_seconds sysTimeFromDtSecs = dtFromSysSeconds.toStdSysSeconds();
+ QCOMPARE(sysTimeFromDtSecs, sysTimeSecs);
+
+ // utc_clock in milliseconds -> QDateTime
+ utc_time<std::chrono::milliseconds> utcTime = utc_clock::from_sys(sysTime);
+ QDateTime dtFromUtcTime = QDateTime::fromStdTimePoint(utcTime);
+ QCOMPARE(dtFromUtcTime, expected);
+ QCOMPARE(dtFromUtcTime.timeSpec(), Qt::UTC);
+
+ // QDateTime -> system_clock in milliseconds
+ sysTimeFromDt = dtFromUtcTime.toStdSysMilliseconds();
+ QCOMPARE(sysTimeFromDt, sysTime);
+#else
+ QSKIP("This test requires C++20's <chrono>.");
+#endif
+}
+
+#if __cpp_lib_chrono >= 201907L
+using StdLocalMillis = std::chrono::local_time<std::chrono::milliseconds>;
+Q_DECLARE_METATYPE(StdLocalMillis);
+#endif
+
+void tst_QDateTime::stdCompatibilityLocalTime_data()
+{
+#if __cpp_lib_chrono >= 201907L
+ QTest::addColumn<StdLocalMillis>("localTime");
+ QTest::addColumn<QDateTime>("expected");
+
+ using namespace std::chrono;
+
+ QTest::newRow("zero")
+ << StdLocalMillis(0s)
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 0));
+ QTest::newRow("1s")
+ << StdLocalMillis(1s)
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 0, 1));
+ QTest::newRow("1ms")
+ << StdLocalMillis(1ms)
+ << QDateTime(QDate(1970, 1, 1), QTime(0, 0, 0, 1));
+ QTest::newRow("365d")
+ << StdLocalMillis(days(365))
+ << QDateTime(QDate(1971, 1, 1), QTime(0, 0));
+ QTest::newRow("-1s")
+ << StdLocalMillis(-1s)
+ << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59));
+ QTest::newRow("-1ms")
+ << StdLocalMillis(-1ms)
+ << QDateTime(QDate(1969, 12, 31), QTime(23, 59, 59, 999));
+ {
+ // Random date
+ const local_days date = local_days(2000y/January/31);
+ const StdLocalMillis dateTime = date + 3h + 10min + 42s;
+ QTest::newRow("2000-01-31 03:10:42")
+ << dateTime
+ << QDateTime(QDate(2000, 1, 31), QTime(3, 10, 42));
+ }
+#else
+ QSKIP("This test requires C++20's <chrono>.");
+#endif
+}
+
+void tst_QDateTime::stdCompatibilityLocalTime()
+{
+#if __cpp_lib_chrono >= 201907L
+ QFETCH(StdLocalMillis, localTime);
+ QFETCH(QDateTime, expected);
+
+ using namespace std::chrono;
+
+ QDateTime dtFromLocalTime = QDateTime::fromStdLocalTime(localTime);
+ QCOMPARE(dtFromLocalTime, expected);
+ QCOMPARE(dtFromLocalTime.timeSpec(), Qt::LocalTime);
+
+ const time_zone *tz = current_zone();
+ QVERIFY(tz);
+ const StdSysMillis sysMillis = tz->to_sys(localTime);
+ QCOMPARE(dtFromLocalTime.toStdSysMilliseconds(), sysMillis);
+#else
+ QSKIP("This test requires C++20's <chrono>.");
+#endif
+}
+
+#if QT_CONFIG(timezone)
+#if __cpp_lib_chrono >= 201907L
+using StdZonedMillis = std::chrono::zoned_time<std::chrono::milliseconds>;
+Q_DECLARE_METATYPE(StdZonedMillis);
+#endif
+
+void tst_QDateTime::stdCompatibilityZonedTime_data()
+{
+#if __cpp_lib_chrono >= 201907L
+ QTest::addColumn<StdZonedMillis>("zonedTime");
+ QTest::addColumn<QDateTime>("expected");
+
+ using namespace std::chrono;
+ using namespace std::literals;
+
+ const char timeZoneName[] = "Europe/Oslo";
+ const QTimeZone timeZone(timeZoneName);
+
+ {
+ StdZonedMillis zs(timeZoneName, local_days(2021y/1/1));
+ QTest::addRow("localTimeOslo")
+ << zs
+ << QDateTime(QDate(2021, 1, 1), QTime(0, 0), timeZone);
+ }
+ {
+ StdZonedMillis zs(timeZoneName, sys_days(2021y/1/1));
+ QTest::addRow("sysTimeOslo")
+ << zs
+ << QDateTime(QDate(2021, 1, 1), QTime(1, 0), timeZone);
+ }
+ {
+ StdZonedMillis zs(timeZoneName, sys_days(2021y/7/1));
+ QTest::addRow("sysTimeOslo summer")
+ << zs
+ << QDateTime(QDate(2021, 7, 1), QTime(2, 0), timeZone);
+ }
+#else
+ QSKIP("This test requires C++20's <chrono>.");
+#endif
+}
+
+void tst_QDateTime::stdCompatibilityZonedTime()
+{
+#if __cpp_lib_chrono >= 201907L
+ QFETCH(StdZonedMillis, zonedTime);
+ QFETCH(QDateTime, expected);
+
+ QDateTime dtFromZonedTime = QDateTime::fromStdZonedTime(zonedTime);
+ QCOMPARE(dtFromZonedTime, expected);
+ QCOMPARE(dtFromZonedTime.timeSpec(), Qt::TimeZone);
+#else
+ QSKIP("This test requires C++20's <chrono>.");
+#endif
+}
+#endif // QT_CONFIG(timezone)
+
QTEST_APPLESS_MAIN(tst_QDateTime)
#include "tst_qdatetime.moc"
diff --git a/tests/auto/corelib/time/qdatetime/tst_qdatetime_mac.mm b/tests/auto/corelib/time/qdatetime/tst_qdatetime_mac.mm
index 295454c472..08379ccb41 100644
--- a/tests/auto/corelib/time/qdatetime/tst_qdatetime_mac.mm
+++ b/tests/auto/corelib/time/qdatetime/tst_qdatetime_mac.mm
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2014 Petroules Corporation.
-** 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.
+// Copyright (C) 2014 Petroules Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QDateTime>
#include <QTest>
+#include <QtCore/private/qcore_mac_p.h>
+
#include <CoreFoundation/CoreFoundation.h>
#include <Foundation/Foundation.h>
diff --git a/tests/auto/corelib/time/qdatetimeparser/CMakeLists.txt b/tests/auto/corelib/time/qdatetimeparser/CMakeLists.txt
index 9bdeb62501..6bdd66ebfc 100644
--- a/tests/auto/corelib/time/qdatetimeparser/CMakeLists.txt
+++ b/tests/auto/corelib/time/qdatetimeparser/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdatetimeparser.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdatetimeparser Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdatetimeparser LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdatetimeparser
SOURCES
tst_qdatetimeparser.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/time/qdatetimeparser/tst_qdatetimeparser.cpp b/tests/auto/corelib/time/qdatetimeparser/tst_qdatetimeparser.cpp
index 98dd36bc32..bfc811eebe 100644
--- a/tests/auto/corelib/time/qdatetimeparser/tst_qdatetimeparser.cpp
+++ b/tests/auto/corelib/time/qdatetimeparser/tst_qdatetimeparser.cpp
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <private/qdatetimeparser_p.h>
+using namespace Qt::StringLiterals;
+
QT_BEGIN_NAMESPACE
// access to needed members in QDateTimeParser
@@ -71,6 +48,7 @@ class tst_QDateTimeParser : public QObject
Q_OBJECT
private Q_SLOTS:
+ void reparse();
void parseSection_data();
void parseSection();
@@ -78,6 +56,61 @@ private Q_SLOTS:
void intermediateYear();
};
+void tst_QDateTimeParser::reparse()
+{
+ const QDateTime when = QDate(2023, 6, 15).startOfDay();
+ // QTBUG-114575: 6.2 through 6.5 got back a bogus Qt::TimeZone (with zero offset):
+ const auto expect = ([](QStringView name) {
+ // When local time is UTC or a fixed offset from it, the parser prefers
+ // to interpret a UTC or offset suffix as such, rather than as local
+ // time (thereby avoiding DST-ness checks). We have to match that here.
+ if (name == "UTC"_L1)
+ return Qt::UTC;
+ if (name.startsWith(u'+') || name.startsWith(u'-')) {
+ if (std::all_of(name.begin() + 1, name.end(), [](QChar ch) { return ch == u'0'; }))
+ return Qt::UTC;
+ if (std::all_of(name.begin() + 1, name.end(), [](QChar ch) { return ch.isDigit(); }))
+ return Qt::OffsetFromUTC;
+ // Potential hh:mm offset ? Not yet seen as local tzname[] entry.
+ }
+ return Qt::LocalTime;
+ });
+
+ const QStringView format = u"dd/MM/yyyy HH:mm t";
+ QDateTimeParser who(QMetaType::QDateTime, QDateTimeParser::DateTimeEdit);
+ QVERIFY(who.parseFormat(format));
+ {
+ // QDTP defaults to the system locale.
+ const auto state = who.parse(QLocale::system().toString(when, format), -1, when, false);
+ QCOMPARE(state.state, QDateTimeParser::Acceptable);
+ QVERIFY(!state.conflicts);
+ QCOMPARE(state.padded, 0);
+ QCOMPARE(state.value.timeSpec(), expect(when.timeZoneAbbreviation()));
+ QCOMPARE(state.value, when);
+ }
+ {
+ // QDT::toString() uses the C locale:
+ who.setDefaultLocale(QLocale::c());
+ const QString zoneName = ([when]() {
+#if QT_CONFIG(timezone)
+ if (QLocale::c() != QLocale::system()) {
+ const QString local = when.timeRepresentation().displayName(
+ when, QTimeZone::ShortName, QLocale::c());
+ if (!local.isEmpty())
+ return local;
+ }
+#endif
+ return when.timeZoneAbbreviation();
+ })();
+ const auto state = who.parse(when.toString(format), -1, when, false);
+ QCOMPARE(state.state, QDateTimeParser::Acceptable);
+ QVERIFY(!state.conflicts);
+ QCOMPARE(state.padded, 0);
+ QCOMPARE(state.value.timeSpec(), expect(zoneName));
+ QCOMPARE(state.value, when);
+ }
+}
+
void tst_QDateTimeParser::parseSection_data()
{
QTest::addColumn<QString>("format");
@@ -165,10 +198,12 @@ void tst_QDateTimeParser::intermediateYear()
QVERIFY(testParser.parseFormat(format));
+ // Indian/Cocos has a transition at the start of 1900, so it started this
+ // day at 00:02:20, throwing a time offset into QDTP.
QDateTime val(QDate(1900, 1, 1).startOfDay());
const QDateTimeParser::StateNode tmp = testParser.parse(input, -1, val, false);
QCOMPARE(tmp.state, QDateTimeParser::Intermediate);
- QCOMPARE(tmp.value, expected.startOfDay());
+ QCOMPARE(tmp.value.date(), expected);
}
QTEST_APPLESS_MAIN(tst_QDateTimeParser)
diff --git a/tests/auto/corelib/time/qtime/CMakeLists.txt b/tests/auto/corelib/time/qtime/CMakeLists.txt
index 6d3034c595..6fe2968107 100644
--- a/tests/auto/corelib/time/qtime/CMakeLists.txt
+++ b/tests/auto/corelib/time/qtime/CMakeLists.txt
@@ -1,15 +1,23 @@
-# Generated from qtime.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtime Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtime LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtime
SOURCES
tst_qtime.cpp
DEFINES
QT_NO_FOREACH
QT_NO_KEYWORDS
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
)
diff --git a/tests/auto/corelib/time/qtime/tst_qtime.cpp b/tests/auto/corelib/time/qtime/tst_qtime.cpp
index 480fbcc14f..c0fdb07115 100644
--- a/tests/auto/corelib/time/qtime/tst_qtime.cpp
+++ b/tests/auto/corelib/time/qtime/tst_qtime.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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 <private/qglobal_p.h>
+#include <private/qcomparisontesthelper_p.h>
#include <QTest>
#include "qdatetime.h"
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
@@ -52,12 +28,11 @@ private Q_SLOTS:
void addMSecs();
void addSecs_data();
void addSecs();
+ void orderingCompiles();
void operator_eq_eq_data();
void operator_eq_eq();
- void operator_lt();
- void operator_gt();
- void operator_lt_eq();
- void operator_gt_eq();
+ void ordering_data();
+ void ordering();
#if QT_CONFIG(datestring)
# if QT_CONFIG(datetimeparser)
void fromStringFormat_data();
@@ -309,7 +284,7 @@ void tst_QTime::secsTo_data()
QTest::newRow("disregard msec (1s)") << QTime(12, 30, 1, 500) << QTime(12, 30, 2, 400) << 1;
QTest::newRow("disregard msec (0s)") << QTime(12, 30, 1, 500) << QTime(12, 30, 1, 900) << 0;
QTest::newRow("disregard msec (-1s)") << QTime(12, 30, 2, 400) << QTime(12, 30, 1, 500) << -1;
- QTest::newRow("disregard msec (0s)") << QTime(12, 30, 1, 900) << QTime(12, 30, 1, 500) << 0;
+ QTest::newRow("disregard msec (-0s)") << QTime(12, 30, 1, 900) << QTime(12, 30, 1, 500) << 0;
}
void tst_QTime::secsTo()
@@ -345,6 +320,11 @@ void tst_QTime::msecsTo()
QCOMPARE( t1.msecsTo( t2 ), delta );
}
+void tst_QTime::orderingCompiles()
+{
+ QTestPrivate::testAllComparisonOperatorsCompile<QTime>();
+}
+
void tst_QTime::operator_eq_eq_data()
{
QTest::addColumn<QTime>("t1");
@@ -370,169 +350,42 @@ void tst_QTime::operator_eq_eq()
QFETCH(QTime, t2);
QFETCH(bool, expectEqual);
- bool equal = t1 == t2;
- QCOMPARE(equal, expectEqual);
- bool notEqual = t1 != t2;
- QCOMPARE(notEqual, !expectEqual);
+ QT_TEST_EQUALITY_OPS(t1, t2, expectEqual);
- if (equal)
+ if (expectEqual)
QVERIFY(qHash(t1) == qHash(t2));
}
-void tst_QTime::operator_lt()
+void tst_QTime::ordering_data()
{
- QTime t1(0,0,0,0);
- QTime t2(0,0,0,0);
- QVERIFY( !(t1 < t2) );
-
- t1 = QTime(12,34,56,20);
- t2 = QTime(12,34,56,30);
- QVERIFY( t1 < t2 );
-
- t1 = QTime(13,34,46,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( t1 < t2 );
-
- t1 = QTime(13,24,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( t1 < t2 );
-
- t1 = QTime(12,34,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( t1 < t2 );
-
- t1 = QTime(14,34,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( !(t1 < t2) );
-
- t1 = QTime(13,44,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( !(t1 < t2) );
-
- t1 = QTime(13,34,56,20);
- t2 = QTime(13,34,46,20);
- QVERIFY( !(t1 < t2) );
-
- t1 = QTime(13,44,56,30);
- t2 = QTime(13,44,56,20);
- QVERIFY( !(t1 < t2) );
+ QTest::addColumn<QTime>("left");
+ QTest::addColumn<QTime>("right");
+ QTest::addColumn<Qt::strong_ordering>("expectedOrdering");
+
+ auto generateRow = [](QTime t1, QTime t2, Qt::strong_ordering ordering) {
+ const QByteArray t1Str = t1.toString("hh:mm:ss.zz").toLatin1();
+ const QByteArray t2Str = t2.toString("hh:mm:ss.zz").toLatin1();
+ QTest::addRow("%s_vs_%s", t1Str.constData(), t2Str.constData()) << t1 << t2 << ordering;
+ };
+
+ generateRow(QTime(0, 0), QTime(0, 0), Qt::strong_ordering::equivalent);
+ generateRow(QTime(12, 34, 56, 20), QTime(12, 34, 56, 30), Qt::strong_ordering::less);
+ generateRow(QTime(13, 34, 46, 20), QTime(13, 34, 56, 20), Qt::strong_ordering::less);
+ generateRow(QTime(13, 24, 56, 20), QTime(13, 34, 56, 20), Qt::strong_ordering::less);
+ generateRow(QTime(12, 34, 56, 20), QTime(13, 34, 56, 20), Qt::strong_ordering::less);
+ generateRow(QTime(14, 34, 56, 20), QTime(13, 34, 56, 20), Qt::strong_ordering::greater);
+ generateRow(QTime(13, 44, 56, 20), QTime(13, 34, 56, 20), Qt::strong_ordering::greater);
+ generateRow(QTime(13, 34, 56, 20), QTime(13, 34, 46, 20), Qt::strong_ordering::greater);
+ generateRow(QTime(13, 34, 56, 30), QTime(13, 34, 56, 20), Qt::strong_ordering::greater);
}
-void tst_QTime::operator_gt()
+void tst_QTime::ordering()
{
- QTime t1(0,0,0,0);
- QTime t2(0,0,0,0);
- QVERIFY( !(t1 > t2) );
+ QFETCH(QTime, left);
+ QFETCH(QTime, right);
+ QFETCH(Qt::strong_ordering, expectedOrdering);
- t1 = QTime(12,34,56,20);
- t2 = QTime(12,34,56,30);
- QVERIFY( !(t1 > t2) );
-
- t1 = QTime(13,34,46,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( !(t1 > t2) );
-
- t1 = QTime(13,24,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( !(t1 > t2) );
-
- t1 = QTime(12,34,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( !(t1 > t2) );
-
- t1 = QTime(14,34,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( t1 > t2 );
-
- t1 = QTime(13,44,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( t1 > t2 );
-
- t1 = QTime(13,34,56,20);
- t2 = QTime(13,34,46,20);
- QVERIFY( t1 > t2 );
-
- t1 = QTime(13,44,56,30);
- t2 = QTime(13,44,56,20);
- QVERIFY( t1 > t2 );
-}
-
-void tst_QTime::operator_lt_eq()
-{
- QTime t1(0,0,0,0);
- QTime t2(0,0,0,0);
- QVERIFY( t1 <= t2 );
-
- t1 = QTime(12,34,56,20);
- t2 = QTime(12,34,56,30);
- QVERIFY( t1 <= t2 );
-
- t1 = QTime(13,34,46,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( t1 <= t2 );
-
- t1 = QTime(13,24,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( t1 <= t2 );
-
- t1 = QTime(12,34,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( t1 <= t2 );
-
- t1 = QTime(14,34,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( !(t1 <= t2) );
-
- t1 = QTime(13,44,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( !(t1 <= t2) );
-
- t1 = QTime(13,34,56,20);
- t2 = QTime(13,34,46,20);
- QVERIFY( !(t1 <= t2) );
-
- t1 = QTime(13,44,56,30);
- t2 = QTime(13,44,56,20);
- QVERIFY( !(t1 <= t2) );
-}
-
-void tst_QTime::operator_gt_eq()
-{
- QTime t1(0,0,0,0);
- QTime t2(0,0,0,0);
- QVERIFY( t1 >= t2 );
-
- t1 = QTime(12,34,56,20);
- t2 = QTime(12,34,56,30);
- QVERIFY( !(t1 >= t2) );
-
- t1 = QTime(13,34,46,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( !(t1 >= t2) );
-
- t1 = QTime(13,24,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( !(t1 >= t2) );
-
- t1 = QTime(12,34,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( !(t1 >= t2) );
-
- t1 = QTime(14,34,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( t1 >= t2 );
-
- t1 = QTime(13,44,56,20);
- t2 = QTime(13,34,56,20);
- QVERIFY( t1 >= t2 );
-
- t1 = QTime(13,34,56,20);
- t2 = QTime(13,34,46,20);
- QVERIFY( t1 >= t2 );
-
- t1 = QTime(13,44,56,30);
- t2 = QTime(13,44,56,20);
- QVERIFY( t1 >= t2 );
+ QT_TEST_ALL_COMPARISON_OPS(left, right, expectedOrdering);
}
#if QT_CONFIG(datestring)
@@ -718,7 +571,7 @@ void tst_QTime::fromStringDateFormat_data()
<< Qt::RFC2822Date << invalidTime();
// The common date text used by the "invalid character" tests, just to be
// sure *it's* not what's invalid:
- QTest::newRow("RFC 850 and 1036 invalid character at end")
+ QTest::newRow("RFC 850 and 1036 no invalid character")
<< QString::fromLatin1("Sun Jan 01 08:00:00 2012 +0100")
<< Qt::RFC2822Date << QTime(8, 0, 0);
diff --git a/tests/auto/corelib/time/qtimezone/CMakeLists.txt b/tests/auto/corelib/time/qtimezone/CMakeLists.txt
index 160ade2afd..612bab0db5 100644
--- a/tests/auto/corelib/time/qtimezone/CMakeLists.txt
+++ b/tests/auto/corelib/time/qtimezone/CMakeLists.txt
@@ -1,17 +1,25 @@
-# Generated from qtimezone.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtimezone Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtimezone LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtimezone
SOURCES
tst_qtimezone.cpp
DEFINES
QT_NO_FOREACH
QT_NO_KEYWORDS
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
+ Qt::TestPrivate
)
## Scopes:
@@ -25,6 +33,6 @@ qt_internal_extend_target(tst_qtimezone CONDITION QT_FEATURE_icu
qt_internal_extend_target(tst_qtimezone CONDITION APPLE
SOURCES
tst_qtimezone_darwin.mm
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWFoundation}
)
diff --git a/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp b/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp
index f68aeced2f..a350ffeb04 100644
--- a/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp
+++ b/tests/auto/corelib/time/qtimezone/tst_qtimezone.cpp
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qtimezone.h>
#include <private/qtimezoneprivate_p.h>
+#include <private/qcomparisontesthelper_p.h>
+
#include <qlocale.h>
#if defined(Q_OS_WIN)
@@ -43,15 +20,20 @@ class tst_QTimeZone : public QObject
{
Q_OBJECT
-public:
- tst_QTimeZone();
-
private Q_SLOTS:
// Public class default system tests
void createTest();
void nullTest();
- void systemZone();
+ void assign();
+ void compareCompiles();
+ void compare_data();
+ void compare();
+ void timespec();
+ void offset();
void dataStreamTest();
+#if QT_CONFIG(timezone)
+ void asBackendZone();
+ void systemZone();
void isTimeZoneIdAvailable();
void availableTimeZoneIds();
void utcOffsetId_data();
@@ -75,28 +57,28 @@ private Q_SLOTS:
void macTest();
void darwinTypes();
void winTest();
+ void localeSpecificDisplayName_data();
+ void localeSpecificDisplayName();
+ void stdCompatibility_data();
+ void stdCompatibility();
+#endif // timezone backends
private:
void printTimeZone(const QTimeZone &tz);
-#ifdef QT_BUILD_INTERNAL
+#if defined(QT_BUILD_INTERNAL) && QT_CONFIG(timezone)
// Generic tests of privates, called by implementation-specific private tests:
void testCetPrivate(const QTimeZonePrivate &tzp);
void testEpochTranPrivate(const QTimeZonePrivate &tzp);
-#endif // QT_BUILD_INTERNAL
- const bool debug;
-};
-
-tst_QTimeZone::tst_QTimeZone()
+#endif // QT_BUILD_INTERNAL && timezone backends
// Set to true to print debug output, test Display Names and run long stress tests
- : debug(false)
-{
-}
+ static constexpr bool debug = false;
+};
void tst_QTimeZone::printTimeZone(const QTimeZone &tz)
{
QDateTime now = QDateTime::currentDateTime();
- QDateTime jan = QDateTime(QDate(2012, 1, 1), QTime(0, 0, 0), Qt::UTC);
- QDateTime jun = QDateTime(QDate(2012, 6, 1), QTime(0, 0, 0), Qt::UTC);
+ QDateTime jan = QDateTime(QDate(2012, 1, 1), QTime(0, 0), QTimeZone::UTC);
+ QDateTime jun = QDateTime(QDate(2012, 6, 1), QTime(0, 0), QTimeZone::UTC);
qDebug() << "";
qDebug() << "Time Zone = " << tz;
qDebug() << "";
@@ -180,9 +162,9 @@ void tst_QTimeZone::createTest()
QCOMPARE(tz.territory(), QLocale::NewZealand);
- QDateTime jan = QDateTime(QDate(2012, 1, 1), QTime(0, 0, 0), Qt::UTC);
- QDateTime jun = QDateTime(QDate(2012, 6, 1), QTime(0, 0, 0), Qt::UTC);
- QDateTime janPrev = QDateTime(QDate(2011, 1, 1), QTime(0, 0, 0), Qt::UTC);
+ QDateTime jan = QDateTime(QDate(2012, 1, 1), QTime(0, 0), QTimeZone::UTC);
+ QDateTime jun = QDateTime(QDate(2012, 6, 1), QTime(0, 0), QTimeZone::UTC);
+ QDateTime janPrev = QDateTime(QDate(2011, 1, 1), QTime(0, 0), QTimeZone::UTC);
QCOMPARE(tz.offsetFromUtc(jan), 13 * 3600);
QCOMPARE(tz.offsetFromUtc(jun), 12 * 3600);
@@ -202,7 +184,8 @@ void tst_QTimeZone::createTest()
QTimeZone::OffsetData tran = tz.nextTransition(jan);
// 2012-04-01 03:00 NZDT, +13 -> +12
QCOMPARE(tran.atUtc,
- QDateTime(QDate(2012, 4, 1), QTime(3, 0), Qt::OffsetFromUTC, 13 * 3600));
+ QDateTime(QDate(2012, 4, 1), QTime(3, 0),
+ QTimeZone::fromSecondsAheadOfUtc(13 * 3600)));
QCOMPARE(tran.offsetFromUtc, 12 * 3600);
QCOMPARE(tran.standardTimeOffset, 12 * 3600);
QCOMPARE(tran.daylightTimeOffset, 0);
@@ -210,7 +193,8 @@ void tst_QTimeZone::createTest()
tran = tz.nextTransition(jun);
// 2012-09-30 02:00 NZST, +12 -> +13
QCOMPARE(tran.atUtc,
- QDateTime(QDate(2012, 9, 30), QTime(2, 0), Qt::OffsetFromUTC, 12 * 3600));
+ QDateTime(QDate(2012, 9, 30), QTime(2, 0),
+ QTimeZone::fromSecondsAheadOfUtc(12 * 3600)));
QCOMPARE(tran.offsetFromUtc, 13 * 3600);
QCOMPARE(tran.standardTimeOffset, 12 * 3600);
QCOMPARE(tran.daylightTimeOffset, 3600);
@@ -218,7 +202,8 @@ void tst_QTimeZone::createTest()
tran = tz.previousTransition(jan);
// 2011-09-25 02:00 NZST, +12 -> +13
QCOMPARE(tran.atUtc,
- QDateTime(QDate(2011, 9, 25), QTime(2, 0), Qt::OffsetFromUTC, 12 * 3600));
+ QDateTime(QDate(2011, 9, 25), QTime(2, 0),
+ QTimeZone::fromSecondsAheadOfUtc(12 * 3600)));
QCOMPARE(tran.offsetFromUtc, 13 * 3600);
QCOMPARE(tran.standardTimeOffset, 12 * 3600);
QCOMPARE(tran.daylightTimeOffset, 3600);
@@ -226,23 +211,26 @@ void tst_QTimeZone::createTest()
tran = tz.previousTransition(jun);
// 2012-04-01 03:00 NZDT, +13 -> +12 (again)
QCOMPARE(tran.atUtc,
- QDateTime(QDate(2012, 4, 1), QTime(3, 0), Qt::OffsetFromUTC, 13 * 3600));
+ QDateTime(QDate(2012, 4, 1), QTime(3, 0),
+ QTimeZone::fromSecondsAheadOfUtc(13 * 3600)));
QCOMPARE(tran.offsetFromUtc, 12 * 3600);
QCOMPARE(tran.standardTimeOffset, 12 * 3600);
QCOMPARE(tran.daylightTimeOffset, 0);
QTimeZone::OffsetDataList expected;
// Reuse 2012's fall-back data for 2011-04-03:
- tran.atUtc = QDateTime(QDate(2011, 4, 3), QTime(3, 0), Qt::OffsetFromUTC, 13 * 3600);
+ tran.atUtc = QDateTime(QDate(2011, 4, 3), QTime(3, 0),
+ QTimeZone::fromSecondsAheadOfUtc(13 * 3600));
expected << tran;
// 2011's spring-forward:
- tran.atUtc = QDateTime(QDate(2011, 9, 25), QTime(2, 0), Qt::OffsetFromUTC, 12 * 3600);
+ tran.atUtc = QDateTime(QDate(2011, 9, 25), QTime(2, 0),
+ QTimeZone::fromSecondsAheadOfUtc(12 * 3600));
tran.offsetFromUtc = 13 * 3600;
tran.daylightTimeOffset = 3600;
expected << tran;
QTimeZone::OffsetDataList result = tz.transitions(janPrev, jan);
- QCOMPARE(result.count(), expected.count());
- for (int i = 0; i < expected.count(); ++i) {
+ QCOMPARE(result.size(), expected.size());
+ for (int i = 0; i < expected.size(); ++i) {
QCOMPARE(result.at(i).atUtc, expected.at(i).atUtc);
QCOMPARE(result.at(i).offsetFromUtc, expected.at(i).offsetFromUtc);
QCOMPARE(result.at(i).standardTimeOffset, expected.at(i).standardTimeOffset);
@@ -278,9 +266,9 @@ void tst_QTimeZone::nullTest()
QCOMPARE(nullTz1.territory(), QLocale::AnyTerritory);
QCOMPARE(nullTz1.comment(), QString());
- QDateTime jan = QDateTime(QDate(2012, 1, 1), QTime(0, 0, 0), Qt::UTC);
- QDateTime jun = QDateTime(QDate(2012, 6, 1), QTime(0, 0, 0), Qt::UTC);
- QDateTime janPrev = QDateTime(QDate(2011, 1, 1), QTime(0, 0, 0), Qt::UTC);
+ QDateTime jan = QDateTime(QDate(2012, 1, 1), QTime(0, 0), QTimeZone::UTC);
+ QDateTime jun = QDateTime(QDate(2012, 6, 1), QTime(0, 0), QTimeZone::UTC);
+ QDateTime janPrev = QDateTime(QDate(2011, 1, 1), QTime(0, 0), QTimeZone::UTC);
QCOMPARE(nullTz1.abbreviation(jan), QString());
QCOMPARE(nullTz1.displayName(jan), QString());
@@ -321,28 +309,157 @@ void tst_QTimeZone::nullTest()
QCOMPARE(data.daylightTimeOffset, invalidOffset);
}
-void tst_QTimeZone::systemZone()
+void tst_QTimeZone::assign()
{
- const QTimeZone zone = QTimeZone::systemTimeZone();
- QVERIFY(zone.isValid());
- QCOMPARE(zone.id(), QTimeZone::systemTimeZoneId());
- QCOMPARE(zone, QTimeZone(QTimeZone::systemTimeZoneId()));
- // Check it behaves the same as local-time:
- const QDate dates[] = {
- QDate::fromJulianDay(0), // far in the distant past (LMT)
- QDate(1625, 6, 8), // Before time-zones (date of Cassini's birth)
- QDate(1901, 12, 13), // Last day before 32-bit time_t's range
- QDate(1969, 12, 31), // Last day before the epoch
- QDate(1970, 0, 0), // Start of epoch
- QDate(2000, 2, 29), // An anomalous leap day
- QDate(2038, 1, 20) // First day after 32-bit time_t's range
- };
- for (const auto &date : dates)
- QCOMPARE(date.startOfDay(Qt::LocalTime), date.startOfDay(zone));
+ QTimeZone assignee;
+ QCOMPARE(assignee.timeSpec(), Qt::TimeZone);
+ assignee = QTimeZone();
+ QCOMPARE(assignee.timeSpec(), Qt::TimeZone);
+ assignee = QTimeZone::UTC;
+ QCOMPARE(assignee.timeSpec(), Qt::UTC);
+ assignee = QTimeZone::LocalTime;
+ QCOMPARE(assignee.timeSpec(), Qt::LocalTime);
+ assignee = QTimeZone();
+ QCOMPARE(assignee.timeSpec(), Qt::TimeZone);
+ assignee = QTimeZone::fromSecondsAheadOfUtc(1);
+ QCOMPARE(assignee.timeSpec(), Qt::OffsetFromUTC);
+ assignee = QTimeZone::fromSecondsAheadOfUtc(0);
+ QCOMPARE(assignee.timeSpec(), Qt::UTC);
+#if QT_CONFIG(timezone)
+ {
+ const QTimeZone cet("Europe/Oslo");
+ assignee = cet;
+ QCOMPARE(assignee.timeSpec(), Qt::TimeZone);
+ }
+#endif
+}
+
+void tst_QTimeZone::compareCompiles()
+{
+ QTestPrivate::testEqualityOperatorsCompile<QTimeZone>();
+}
+
+void tst_QTimeZone::compare_data()
+{
+ QTest::addColumn<QTimeZone>("left");
+ QTest::addColumn<QTimeZone>("right");
+ QTest::addColumn<bool>("expectedEqual");
+
+ const QTimeZone local;
+ const QTimeZone utc(QTimeZone::UTC);
+ const auto secondEast = QTimeZone::fromSecondsAheadOfUtc(1);
+ const auto zeroOffset = QTimeZone::fromSecondsAheadOfUtc(0);
+ const auto durationEast = QTimeZone::fromDurationAheadOfUtc(std::chrono::seconds{1});
+
+ QTest::newRow("local vs default-constructed") << local << QTimeZone() << true;
+ QTest::newRow("local vs UTC") << local << utc << false;
+ QTest::newRow("local vs secondEast") << local << secondEast << false;
+ QTest::newRow("secondEast vs UTC") << secondEast << utc << false;
+ QTest::newRow("UTC vs zeroOffset") << utc << zeroOffset << true;
+ QTest::newRow("secondEast vs durationEast") << secondEast << durationEast << true;
+}
+
+void tst_QTimeZone::compare()
+{
+ QFETCH(QTimeZone, left);
+ QFETCH(QTimeZone, right);
+ QFETCH(bool, expectedEqual);
+
+ QT_TEST_EQUALITY_OPS(left, right, expectedEqual);
+}
+
+void tst_QTimeZone::timespec()
+{
+ using namespace std::chrono_literals;
+ QCOMPARE(QTimeZone().timeSpec(), Qt::TimeZone);
+ QCOMPARE(QTimeZone(QTimeZone::UTC).timeSpec(), Qt::UTC);
+ QCOMPARE(QTimeZone(QTimeZone::LocalTime).timeSpec(), Qt::LocalTime);
+ QCOMPARE(QTimeZone::fromSecondsAheadOfUtc(0).timeSpec(), Qt::UTC);
+ QCOMPARE(QTimeZone::fromDurationAheadOfUtc(0s).timeSpec(), Qt::UTC);
+ QCOMPARE(QTimeZone::fromDurationAheadOfUtc(0min).timeSpec(), Qt::UTC);
+ QCOMPARE(QTimeZone::fromDurationAheadOfUtc(0h).timeSpec(), Qt::UTC);
+ QCOMPARE(QTimeZone::fromSecondsAheadOfUtc(1).timeSpec(), Qt::OffsetFromUTC);
+ QCOMPARE(QTimeZone::fromSecondsAheadOfUtc(-1).timeSpec(), Qt::OffsetFromUTC);
+ QCOMPARE(QTimeZone::fromSecondsAheadOfUtc(36000).timeSpec(), Qt::OffsetFromUTC);
+ QCOMPARE(QTimeZone::fromSecondsAheadOfUtc(-36000).timeSpec(), Qt::OffsetFromUTC);
+ QCOMPARE(QTimeZone::fromDurationAheadOfUtc(3h - 20min +17s).timeSpec(), Qt::OffsetFromUTC);
+ {
+ const QTimeZone zone;
+ QCOMPARE(zone.timeSpec(), Qt::TimeZone);
+ }
+ {
+ const QTimeZone zone = { QTimeZone::UTC };
+ QCOMPARE(zone.timeSpec(), Qt::UTC);
+ }
+ {
+ const QTimeZone zone = { QTimeZone::LocalTime };
+ QCOMPARE(zone.timeSpec(), Qt::LocalTime);
+ }
+ {
+ const auto zone = QTimeZone::fromSecondsAheadOfUtc(0);
+ QCOMPARE(zone.timeSpec(), Qt::UTC);
+ }
+ {
+ const auto zone = QTimeZone::fromDurationAheadOfUtc(0s);
+ QCOMPARE(zone.timeSpec(), Qt::UTC);
+ }
+ {
+ const auto zone = QTimeZone::fromSecondsAheadOfUtc(1);
+ QCOMPARE(zone.timeSpec(), Qt::OffsetFromUTC);
+ }
+ {
+ const auto zone = QTimeZone::fromDurationAheadOfUtc(1s);
+ QCOMPARE(zone.timeSpec(), Qt::OffsetFromUTC);
+ }
+#if QT_CONFIG(timezone)
+ QCOMPARE(QTimeZone("Europe/Oslo").timeSpec(), Qt::TimeZone);
+#endif
+}
+
+void tst_QTimeZone::offset()
+{
+ QCOMPARE(QTimeZone().fixedSecondsAheadOfUtc(), 0);
+ QCOMPARE(QTimeZone(QTimeZone::UTC).fixedSecondsAheadOfUtc(), 0);
+ QCOMPARE(QTimeZone::fromSecondsAheadOfUtc(0).fixedSecondsAheadOfUtc(), 0);
+ QCOMPARE(QTimeZone::fromDurationAheadOfUtc(std::chrono::seconds{}).fixedSecondsAheadOfUtc(), 0);
+ QCOMPARE(QTimeZone::fromDurationAheadOfUtc(std::chrono::minutes{}).fixedSecondsAheadOfUtc(), 0);
+ QCOMPARE(QTimeZone::fromDurationAheadOfUtc(std::chrono::hours{}).fixedSecondsAheadOfUtc(), 0);
+ QCOMPARE(QTimeZone::fromSecondsAheadOfUtc(1).fixedSecondsAheadOfUtc(), 1);
+ QCOMPARE(QTimeZone::fromSecondsAheadOfUtc(-1).fixedSecondsAheadOfUtc(), -1);
+ QCOMPARE(QTimeZone::fromSecondsAheadOfUtc(36000).fixedSecondsAheadOfUtc(), 36000);
+ QCOMPARE(QTimeZone::fromSecondsAheadOfUtc(-36000).fixedSecondsAheadOfUtc(), -36000);
+ {
+ const QTimeZone zone;
+ QCOMPARE(zone.fixedSecondsAheadOfUtc(), 0);
+ }
+ {
+ const QTimeZone zone = { QTimeZone::UTC };
+ QCOMPARE(zone.fixedSecondsAheadOfUtc(), 0);
+ }
+ {
+ const auto zone = QTimeZone::fromSecondsAheadOfUtc(0);
+ QCOMPARE(zone.fixedSecondsAheadOfUtc(), 0);
+ }
+ {
+ const auto zone = QTimeZone::fromDurationAheadOfUtc(std::chrono::seconds{});
+ QCOMPARE(zone.fixedSecondsAheadOfUtc(), 0);
+ }
+ {
+ const auto zone = QTimeZone::fromSecondsAheadOfUtc(1);
+ QCOMPARE(zone.fixedSecondsAheadOfUtc(), 1);
+ }
+ {
+ const auto zone = QTimeZone::fromDurationAheadOfUtc(std::chrono::seconds{1});
+ QCOMPARE(zone.fixedSecondsAheadOfUtc(), 1);
+ }
+#if QT_CONFIG(timezone)
+ QCOMPARE(QTimeZone("Europe/Oslo").fixedSecondsAheadOfUtc(), 0);
+#endif
}
void tst_QTimeZone::dataStreamTest()
{
+#ifndef QT_NO_DATASTREAM
// Test the OffsetFromUtc backend serialization. First with a custom timezone:
QTimeZone tz1("QST", 123456, "Qt Standard Time", "QST", QLocale::Norway, "Qt Testing");
QByteArray tmp;
@@ -396,14 +513,60 @@ void tst_QTimeZone::dataStreamTest()
ds >> tz2;
}
QCOMPARE(tz2.id(), tz1.id());
+#endif
+}
+
+#if QT_CONFIG(timezone)
+void tst_QTimeZone::asBackendZone()
+{
+ QCOMPARE(QTimeZone(QTimeZone::LocalTime).asBackendZone(), QTimeZone::systemTimeZone());
+ QCOMPARE(QTimeZone(QTimeZone::UTC).asBackendZone(), QTimeZone::utc());
+ QCOMPARE(QTimeZone::fromSecondsAheadOfUtc(-300).asBackendZone(), QTimeZone(-300));
+ QTimeZone cet("Europe/Oslo");
+ QCOMPARE(cet.asBackendZone(), cet);
+}
+
+void tst_QTimeZone::systemZone()
+{
+ const QTimeZone zone = QTimeZone::systemTimeZone();
+ QVERIFY2(zone.isValid(),
+ "Invalid system zone setting, tests are doomed on misconfigured system.");
+ // This may fail on Windows if CLDR data doesn't map system MS ID to IANA ID:
+ QCOMPARE(zone.id(), QTimeZone::systemTimeZoneId());
+ QCOMPARE(zone, QTimeZone(QTimeZone::systemTimeZoneId()));
+ // Check it behaves the same as local-time:
+ const QDate dates[] = {
+ QDate::fromJulianDay(0), // far in the distant past (LMT)
+ QDate(1625, 6, 8), // Before time-zones (date of Cassini's birth)
+ QDate(1901, 12, 13), // Last day before 32-bit time_t's range
+ QDate(1969, 12, 31), // Last day before the epoch
+ QDate(1970, 0, 0), // Start of epoch
+ QDate(2000, 2, 29), // An anomalous leap day
+ QDate(2038, 1, 20) // First day after 32-bit time_t's range
+ };
+ for (const auto &date : dates)
+ QCOMPARE(date.startOfDay(QTimeZone::LocalTime), date.startOfDay(zone));
+
+#if __cpp_lib_chrono >= 201907L
+ const std::chrono::time_zone *currentTimeZone = std::chrono::current_zone();
+ QCOMPARE(QByteArrayView(currentTimeZone->name()), QByteArrayView(zone.id()));
+#endif
}
void tst_QTimeZone::isTimeZoneIdAvailable()
{
const QList<QByteArray> available = QTimeZone::availableTimeZoneIds();
for (const QByteArray &id : available) {
- QVERIFY(QTimeZone::isTimeZoneIdAvailable(id));
+ QVERIFY2(QTimeZone::isTimeZoneIdAvailable(id), id);
+ QVERIFY2(QTimeZone(id).isValid(), id);
+ QCOMPARE(QTimeZone(id).id(), id);
+ }
+ for (qint32 offset = QTimeZone::MinUtcOffsetSecs;
+ offset <= QTimeZone::MinUtcOffsetSecs; ++offset) {
+ const QByteArray id = QTimeZone(offset).id();
+ QVERIFY2(QTimeZone::isTimeZoneIdAvailable(id), id);
QVERIFY2(QTimeZone(id).isValid(), id);
+ QCOMPARE(QTimeZone(id).id(), id);
}
}
@@ -468,7 +631,11 @@ void tst_QTimeZone::utcOffsetId_data()
ROW("UTC-11", true, -39600);
ROW("UTC-09", true, -32400);
ROW("UTC-08", true, -28800);
+ ROW("UTC-8", true, -28800);
+ ROW("UTC-2:5", true, -7500);
ROW("UTC-02", true, -7200);
+ ROW("UTC+2", true, 7200);
+ ROW("UTC+2:5", true, 7500);
ROW("UTC+12", true, 43200);
ROW("UTC+13", true, 46800);
// Encountered in bug reports:
@@ -512,10 +679,23 @@ void tst_QTimeZone::utcOffsetId()
QTimeZone zone(id);
QCOMPARE(zone.isValid(), valid);
if (valid) {
- QDateTime epoch(QDate(1970, 1, 1), QTime(0, 0, 0), Qt::UTC);
+ QDateTime epoch(QDate(1970, 1, 1), QTime(0, 0), QTimeZone::UTC);
QFETCH(int, offset);
QCOMPARE(zone.offsetFromUtc(epoch), offset);
QVERIFY(!zone.hasDaylightTime());
+
+ // zone.id() will be an IANA ID with zero minutes field if original was
+ // a UTC offset by a whole number of hours. It will also zero-pad a
+ // single-digit hour or minute to two digits.
+ if (const qsizetype cut = id.indexOf(':'); cut >= 0) {
+ if (id.size() == cut + 2) // "...:m" -> "...:0m"
+ id.insert(cut + 1, '0');
+ } else if (zone.id().contains(':')) {
+ id += ":00";
+ }
+ if (id.indexOf(':') == 5) // UTC±h:mm -> UTC±0h:mm
+ id.insert(4, '0');
+
QCOMPARE(zone.id(), id);
}
}
@@ -527,7 +707,7 @@ void tst_QTimeZone::specificTransition_data()
QTest::addColumn<QDate>("stop");
QTest::addColumn<int>("count");
QTest::addColumn<QDateTime>("atUtc");
- // In minutes:
+ // In seconds:
QTest::addColumn<int>("offset");
QTest::addColumn<int>("stdoff");
QTest::addColumn<int>("dstoff");
@@ -544,16 +724,16 @@ void tst_QTimeZone::specificTransition_data()
{
QTest::newRow("Moscow/2014") // From original bug-report
<< QByteArray("Europe/Moscow")
- << QDate(2011, 4, 1) << QDate(2017, 12,31) << 1
- << QDateTime(QDate(2014, 10, 26), QTime(2, 0, 0),
- Qt::OffsetFromUTC, 4 * 3600).toUTC()
+ << QDate(2011, 4, 1) << QDate(2021, 12, 31) << 1
+ << QDateTime(QDate(2014, 10, 26), QTime(2, 0),
+ QTimeZone::fromSecondsAheadOfUtc(4 * 3600)).toUTC()
<< 3 * 3600 << 3 * 3600 << 0;
}
QTest::newRow("Moscow/2011") // Transition on 2011-03-27
<< QByteArray("Europe/Moscow")
<< QDate(2010, 11, 1) << QDate(2014, 10, 25) << 1
- << QDateTime(QDate(2011, 3, 27), QTime(2, 0, 0),
- Qt::OffsetFromUTC, 3 * 3600).toUTC()
+ << QDateTime(QDate(2011, 3, 27), QTime(2, 0),
+ QTimeZone::fromSecondsAheadOfUtc(3 * 3600)).toUTC()
<< 4 * 3600 << 4 * 3600 << 0;
}
@@ -574,14 +754,15 @@ void tst_QTimeZone::specificTransition()
if (!timeZone.isValid())
QSKIP("Missing time-zone data");
QTimeZone::OffsetDataList transits =
- timeZone.transitions(QDateTime(start, QTime(0, 0), timeZone),
- QDateTime(stop, QTime(23, 59), timeZone));
- QCOMPARE(transits.length(), count);
- const QTimeZone::OffsetData &transition = transits.at(0);
- QCOMPARE(transition.offsetFromUtc, offset);
- QCOMPARE(transition.standardTimeOffset, stdoff);
- QCOMPARE(transition.daylightTimeOffset, dstoff);
- QCOMPARE(transition.atUtc, atUtc);
+ timeZone.transitions(start.startOfDay(timeZone), stop.endOfDay(timeZone));
+ QCOMPARE(transits.size(), count);
+ if (count) {
+ const QTimeZone::OffsetData &transition = transits.at(0);
+ QCOMPARE(transition.offsetFromUtc, offset);
+ QCOMPARE(transition.standardTimeOffset, stdoff);
+ QCOMPARE(transition.daylightTimeOffset, dstoff);
+ QCOMPARE(transition.atUtc, atUtc);
+ }
}
void tst_QTimeZone::transitionEachZone_data()
@@ -596,19 +777,15 @@ void tst_QTimeZone::transitionEachZone_data()
int start, stop;
int year;
} table[] = {
- { 25666200, 3, 12, 1970 }, // 1970-10-25 01:30 UTC; North America
- { 1288488600, -4, 8, 2010 } // 2010-10-31 01:30 UTC; Europe, Russia
+ { 1288488600, -4, 8, 2010 }, // 2010-10-31 01:30 UTC; Europe, Russia
+ { 25666200, 3, 12, 1970 }, // 1970-10-25 01:30 UTC; North America
};
const auto zones = QTimeZone::availableTimeZoneIds();
- for (int k = std::size(table); k-- > 0; ) {
+ for (const auto &entry : table) {
for (const QByteArray &zone : zones) {
- const QString name = QString::asprintf("%s@%d", zone.constData(), table[k].year);
- QTest::newRow(name.toUtf8().constData())
- << zone
- << table[k].baseSecs
- << table[k].start
- << table[k].stop;
+ QTest::addRow("%s@%d", zone.constData(), entry.year)
+ << zone << entry.baseSecs << entry.start << entry.stop;
}
}
}
@@ -649,17 +826,29 @@ void tst_QTimeZone::transitionEachZone()
void tst_QTimeZone::checkOffset_data()
{
- QTest::addColumn<QByteArray>("zoneName");
+ QTest::addColumn<QTimeZone>("zone");
QTest::addColumn<QDateTime>("when");
QTest::addColumn<int>("netOffset");
QTest::addColumn<int>("stdOffset");
QTest::addColumn<int>("dstOffset");
+ const QTimeZone UTC = QTimeZone::UTC;
+ QTest::addRow("UTC")
+ << UTC << QDate(1970, 1, 1).startOfDay(UTC) << 0 << 0 << 0;
+ const auto east = QTimeZone::fromSecondsAheadOfUtc(28'800); // 8 hours
+ QTest::addRow("UTC+8")
+ << east << QDate(2000, 2, 29).startOfDay(east) << 28'800 << 28'800 << 0;
+ const auto west = QTimeZone::fromDurationAheadOfUtc(std::chrono::hours{-8});
+ QTest::addRow("UTC-8")
+ << west << QDate(2100, 2, 28).startOfDay(west) << -28'800 << -28'800 << 0;
+
struct {
const char *zone, *nick;
int year, month, day, hour, min, sec;
int std, dst;
} table[] = {
+ // Exercise the UTC-backend:
+ { "UTC", "epoch", 1970, 1, 1, 0, 0, 0, 0, 0 },
// Zone with no transitions (QTBUG-74614, QTBUG-74666, when TZ backend uses minimal data)
{ "Etc/UTC", "epoch", 1970, 1, 1, 0, 0, 0, 0, 0 },
{ "Etc/UTC", "pre_int32", 1901, 12, 13, 20, 45, 51, 0, 0 },
@@ -667,42 +856,44 @@ void tst_QTimeZone::checkOffset_data()
{ "Etc/UTC", "post_uint32", 2106, 2, 7, 6, 28, 17, 0, 0 },
{ "Etc/UTC", "initial", -292275056, 5, 16, 16, 47, 5, 0, 0 },
{ "Etc/UTC", "final", 292278994, 8, 17, 7, 12, 55, 0, 0 },
- // Kiev: regression test for QTBUG-64122 (on MS):
- { "Europe/Kiev", "summer", 2017, 10, 27, 12, 0, 0, 2 * 3600, 3600 },
- { "Europe/Kiev", "winter", 2017, 10, 29, 12, 0, 0, 2 * 3600, 0 }
+ // Kyiv: regression test for QTBUG-64122 (on MS):
+ { "Europe/Kyiv", "summer", 2017, 10, 27, 12, 0, 0, 2 * 3600, 3600 },
+ { "Europe/Kyiv", "winter", 2017, 10, 29, 12, 0, 0, 2 * 3600, 0 }
};
- bool lacksRows = true;
for (const auto &entry : table) {
QTimeZone zone(entry.zone);
if (zone.isValid()) {
QTest::addRow("%s@%s", entry.zone, entry.nick)
- << QByteArray(entry.zone)
+ << zone
<< QDateTime(QDate(entry.year, entry.month, entry.day),
QTime(entry.hour, entry.min, entry.sec), zone)
<< entry.dst + entry.std << entry.std << entry.dst;
- lacksRows = false;
} else {
qWarning("Skipping %s@%s test as zone is invalid", entry.zone, entry.nick);
}
}
- if (lacksRows)
- QSKIP("No valid zone info found, skipping test");
}
void tst_QTimeZone::checkOffset()
{
- QFETCH(QByteArray, zoneName);
+ QFETCH(QTimeZone, zone);
QFETCH(QDateTime, when);
QFETCH(int, netOffset);
QFETCH(int, stdOffset);
QFETCH(int, dstOffset);
- QTimeZone zone(zoneName);
QVERIFY(zone.isValid()); // It was when _data() added the row !
QCOMPARE(zone.offsetFromUtc(when), netOffset);
QCOMPARE(zone.standardTimeOffset(when), stdOffset);
QCOMPARE(zone.daylightTimeOffset(when), dstOffset);
QCOMPARE(zone.isDaylightTime(when), dstOffset != 0);
+
+ // Also test offsetData(), which gets all this data in one go:
+ const auto data = zone.offsetData(when);
+ QCOMPARE(data.atUtc, when);
+ QCOMPARE(data.offsetFromUtc, netOffset);
+ QCOMPARE(data.standardTimeOffset, stdOffset);
+ QCOMPARE(data.daylightTimeOffset, dstOffset);
}
void tst_QTimeZone::availableTimeZoneIds()
@@ -728,12 +919,13 @@ void tst_QTimeZone::availableTimeZoneIds()
void tst_QTimeZone::stressTest()
{
+ const auto UTC = QTimeZone::UTC;
const QList<QByteArray> idList = QTimeZone::availableTimeZoneIds();
for (const QByteArray &id : idList) {
QTimeZone testZone = QTimeZone(id);
QCOMPARE(testZone.isValid(), true);
QCOMPARE(testZone.id(), id);
- QDateTime testDate = QDateTime(QDate(2015, 1, 1), QTime(0, 0, 0), Qt::UTC);
+ QDateTime testDate = QDateTime(QDate(2015, 1, 1), QTime(0, 0), UTC);
testZone.territory();
testZone.comment();
testZone.displayName(testDate);
@@ -750,10 +942,10 @@ void tst_QTimeZone::stressTest()
testZone.nextTransition(testDate);
testZone.previousTransition(testDate);
// Dates known to be outside possible tz file pre-calculated rules range
- QDateTime lowDate1 = QDateTime(QDate(1800, 1, 1), QTime(0, 0, 0), Qt::UTC);
- QDateTime lowDate2 = QDateTime(QDate(1800, 6, 1), QTime(0, 0, 0), Qt::UTC);
- QDateTime highDate1 = QDateTime(QDate(2200, 1, 1), QTime(0, 0, 0), Qt::UTC);
- QDateTime highDate2 = QDateTime(QDate(2200, 6, 1), QTime(0, 0, 0), Qt::UTC);
+ QDateTime lowDate1 = QDateTime(QDate(1800, 1, 1), QTime(0, 0), UTC);
+ QDateTime lowDate2 = QDateTime(QDate(1800, 6, 1), QTime(0, 0), UTC);
+ QDateTime highDate1 = QDateTime(QDate(2200, 1, 1), QTime(0, 0), UTC);
+ QDateTime highDate2 = QDateTime(QDate(2200, 6, 1), QTime(0, 0), UTC);
testZone.nextTransition(lowDate1);
testZone.nextTransition(lowDate2);
testZone.previousTransition(lowDate2);
@@ -806,46 +998,54 @@ void tst_QTimeZone::windowsId()
QByteArray("CST6CDT"));
QCOMPARE(QTimeZone::windowsIdToDefaultIanaId(QByteArray()), QByteArray());
- // No country is sorted list of all zones
- QList<QByteArray> list;
- list << "America/Chicago" << "America/Indiana/Knox" << "America/Indiana/Tell_City"
- << "America/Matamoros" << "America/Menominee" << "America/North_Dakota/Beulah"
- << "America/North_Dakota/Center" << "America/North_Dakota/New_Salem"
- << "America/Rainy_River" << "America/Rankin_Inlet" << "America/Resolute"
- << "America/Winnipeg" << "CST6CDT";
- QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time"), list);
-
- // Check country with no match returns empty list
- list.clear();
- QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time", QLocale::NewZealand),
- list);
-
- // Check valid country returns list in preference order
- list.clear();
- list << "America/Winnipeg" << "America/Rainy_River" << "America/Rankin_Inlet"
- << "America/Resolute";
- QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time", QLocale::Canada), list);
-
- list.clear();
- list << "America/Matamoros";
- QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time", QLocale::Mexico), list);
-
- list.clear();
- list << "America/Chicago" << "America/Indiana/Knox" << "America/Indiana/Tell_City"
- << "America/Menominee" << "America/North_Dakota/Beulah" << "America/North_Dakota/Center"
- << "America/North_Dakota/New_Salem";
- QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time", QLocale::UnitedStates),
- list);
-
- list.clear();
- list << "CST6CDT";
- QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time", QLocale::AnyTerritory),
- list);
-
- // Check no windowsId return empty
- list.clear();
- QCOMPARE(QTimeZone::windowsIdToIanaIds(QByteArray()), list);
- QCOMPARE(QTimeZone::windowsIdToIanaIds(QByteArray(), QLocale::AnyTerritory), list);
+ {
+ // With no country, expect sorted list of all zones for ID
+ const QList<QByteArray> list = {
+ "America/Chicago", "America/Indiana/Knox", "America/Indiana/Tell_City",
+ "America/Matamoros", "America/Menominee", "America/North_Dakota/Beulah",
+ "America/North_Dakota/Center", "America/North_Dakota/New_Salem",
+ "America/Ojinaga", "America/Rainy_River", "America/Rankin_Inlet",
+ "America/Resolute", "America/Winnipeg", "CST6CDT"
+ };
+ QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time"), list);
+ }
+ {
+ // Check country with no match returns empty list
+ const QList<QByteArray> empty;
+ QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time", QLocale::NewZealand),
+ empty);
+ }
+ {
+ // Check valid country returns list in preference order
+ const QList<QByteArray> list = {
+ "America/Winnipeg", "America/Rainy_River", "America/Rankin_Inlet", "America/Resolute"
+ };
+ QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time", QLocale::Canada), list);
+ }
+ {
+ const QList<QByteArray> list = { "America/Matamoros", "America/Ojinaga" };
+ QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time", QLocale::Mexico), list);
+ }
+ {
+ const QList<QByteArray> list = {
+ "America/Chicago", "America/Indiana/Knox", "America/Indiana/Tell_City",
+ "America/Menominee", "America/North_Dakota/Beulah", "America/North_Dakota/Center",
+ "America/North_Dakota/New_Salem"
+ };
+ QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time", QLocale::UnitedStates),
+ list);
+ }
+ {
+ const QList<QByteArray> list = { "CST6CDT" };
+ QCOMPARE(QTimeZone::windowsIdToIanaIds("Central Standard Time", QLocale::AnyTerritory),
+ list);
+ }
+ {
+ // Check empty if given no windowsId:
+ const QList<QByteArray> empty;
+ QCOMPARE(QTimeZone::windowsIdToIanaIds(QByteArray()), empty);
+ QCOMPARE(QTimeZone::windowsIdToIanaIds(QByteArray(), QLocale::AnyTerritory), empty);
+ }
}
void tst_QTimeZone::isValidId_data()
@@ -868,7 +1068,7 @@ void tst_QTimeZone::isValidId_data()
// Parts separated by '/', each part min 1 and max of 14 chars
TESTSET("empty", "", false);
TESTSET("minimal", "m", true);
-#ifdef Q_OS_ANDROID
+#if defined(Q_OS_ANDROID) || QT_CONFIG(icu)
TESTSET("maximal", "East-Saskatchewan", true); // Android actually uses this
TESTSET("too long", "North-Saskatchewan", false); // ... but thankfully not this.
#else
@@ -939,7 +1139,7 @@ void tst_QTimeZone::isValidId_data()
QTest::newRow("a,z alone") << QByteArray("a,z") << false;
QTest::newRow("/z alone") << QByteArray("/z") << false;
QTest::newRow("-z alone") << QByteArray("-z") << false;
-#ifdef Q_OS_ANDROID
+#if defined(Q_OS_ANDROID) || QT_CONFIG(icu)
QTest::newRow("long alone") << QByteArray("12345678901234567") << true;
QTest::newRow("over-long alone") << QByteArray("123456789012345678") << false;
#else
@@ -966,6 +1166,7 @@ void tst_QTimeZone::serialize()
{
int parts = 0;
#ifndef QT_NO_DEBUG_STREAM
+ QTest::ignoreMessage(QtDebugMsg, "QTimeZone(\"\")");
qDebug() << QTimeZone(); // to verify no crash
parts++;
#endif
@@ -1023,18 +1224,25 @@ void tst_QTimeZone::utcTest()
QCOMPARE(tzp.hasDaylightTime(), false);
QCOMPARE(tzp.hasTransitions(), false);
- // Test create from UTC Offset (uses minimal id, skipping minutes if 0)
+ // Test create from UTC Offset:
QDateTime now = QDateTime::currentDateTime();
QTimeZone tz(36000);
QVERIFY(tz.isValid());
- QCOMPARE(tz.id(), QByteArray("UTC+10"));
+ QCOMPARE(tz.id(), QByteArray("UTC+10:00"));
QCOMPARE(tz.offsetFromUtc(now), 36000);
QCOMPARE(tz.standardTimeOffset(now), 36000);
QCOMPARE(tz.daylightTimeOffset(now), 0);
- // Test invalid UTC offset, must be in range -14 to +14 hours
- int min = -14*60*60;
- int max = 14*60*60;
+ tz = QTimeZone(15 * 3600); // no IANA ID, so uses minimal id, skipping :00 minutes
+ QVERIFY(tz.isValid());
+ QCOMPARE(tz.id(), QByteArray("UTC+15"));
+ QCOMPARE(tz.offsetFromUtc(now), 15 * 3600);
+ QCOMPARE(tz.standardTimeOffset(now), 15 * 3600);
+ QCOMPARE(tz.daylightTimeOffset(now), 0);
+
+ // Test validity range of UTC offsets:
+ int min = QTimeZone::MinUtcOffsetSecs;
+ int max = QTimeZone::MaxUtcOffsetSecs;
QCOMPARE(QTimeZone(min - 1).isValid(), false);
QCOMPARE(QTimeZone(min).isValid(), true);
QCOMPARE(QTimeZone(min + 1).isValid(), true);
@@ -1074,14 +1282,16 @@ void tst_QTimeZone::icuTest()
{
#if defined(QT_BUILD_INTERNAL) && QT_CONFIG(icu)
// Known datetimes
- qint64 std = QDateTime(QDate(2012, 1, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch();
- qint64 dst = QDateTime(QDate(2012, 6, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch();
+ qint64 std = QDateTime(QDate(2012, 1, 1), QTime(0, 0), QTimeZone::UTC).toMSecsSinceEpoch();
+ qint64 dst = QDateTime(QDate(2012, 6, 1), QTime(0, 0), QTimeZone::UTC).toMSecsSinceEpoch();
// Test default constructor
QIcuTimeZonePrivate tzpd;
QVERIFY(tzpd.isValid());
- // Test invalid constructor
+ // Test invalid is not available:
+ QVERIFY(!tzpd.isTimeZoneIdAvailable("Gondwana/Erewhon"));
+ // and construction gives an invalid result:
QIcuTimeZonePrivate tzpi("Gondwana/Erewhon");
QCOMPARE(tzpi.isValid(), false);
@@ -1119,9 +1329,10 @@ void tst_QTimeZone::icuTest()
void tst_QTimeZone::tzTest()
{
#if defined QT_BUILD_INTERNAL && defined Q_OS_UNIX && !defined Q_OS_DARWIN && !defined Q_OS_ANDROID
+ const auto UTC = QTimeZone::UTC;
// Known datetimes
- qint64 std = QDateTime(QDate(2012, 1, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch();
- qint64 dst = QDateTime(QDate(2012, 6, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch();
+ qint64 std = QDateTime(QDate(2012, 1, 1), QTime(0, 0), UTC).toMSecsSinceEpoch();
+ qint64 dst = QDateTime(QDate(2012, 6, 1), QTime(0, 0), UTC).toMSecsSinceEpoch();
// Test default constructor
QTzTimeZonePrivate tzpd;
@@ -1129,7 +1340,7 @@ void tst_QTimeZone::tzTest()
// Test invalid constructor
QTzTimeZonePrivate tzpi("Gondwana/Erewhon");
- QCOMPARE(tzpi.isValid(), false);
+ QVERIFY(!tzpi.isValid());
// Test named constructor
QTzTimeZonePrivate tzp("Europe/Berlin");
@@ -1154,8 +1365,8 @@ void tst_QTimeZone::tzTest()
// It shouldn't have any transitions. QTimeZone::hasTransitions() only says
// whether the backend supports them, so ask for transitions in a wide
// enough interval that one would show up, if there are any:
- QVERIFY(permaDst.transitions(QDate(2015, 1, 1).startOfDay(Qt::UTC).toMSecsSinceEpoch(),
- QDate(2020, 1, 1).startOfDay(Qt::UTC).toMSecsSinceEpoch()
+ QVERIFY(permaDst.transitions(QDate(2015, 1, 1).startOfDay(UTC).toMSecsSinceEpoch(),
+ QDate(2020, 1, 1).startOfDay(UTC).toMSecsSinceEpoch()
).isEmpty());
QTimeZone tzBrazil("BRT+3"); // parts of Northern Brazil, as a POSIX rule
@@ -1226,14 +1437,16 @@ void tst_QTimeZone::tzTest()
}
dat = tzp.nextTransition(ancient);
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(dat.atMSecsSinceEpoch, Qt::OffsetFromUTC, 3600),
- QDateTime(QDate(1893, 4, 1), QTime(0, 6, 32), Qt::OffsetFromUTC, 3600));
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(dat.atMSecsSinceEpoch,
+ QTimeZone::fromSecondsAheadOfUtc(3600)),
+ QDateTime(QDate(1893, 4, 1), QTime(0, 6, 32),
+ QTimeZone::fromSecondsAheadOfUtc(3600)));
QCOMPARE(dat.standardTimeOffset, 3600);
QCOMPARE(dat.daylightTimeOffset, 0);
// Date-times late enough to exercise POSIX rules:
- qint64 stdHi = QDate(2100, 1, 1).startOfDay(Qt::UTC).toMSecsSinceEpoch();
- qint64 dstHi = QDate(2100, 6, 1).startOfDay(Qt::UTC).toMSecsSinceEpoch();
+ qint64 stdHi = QDate(2100, 1, 1).startOfDay(UTC).toMSecsSinceEpoch();
+ qint64 dstHi = QDate(2100, 6, 1).startOfDay(UTC).toMSecsSinceEpoch();
// Relevant last Sundays in October and March:
QCOMPARE(Qt::DayOfWeek(QDate(2099, 10, 25).dayOfWeek()), Qt::Sunday);
QCOMPARE(Qt::DayOfWeek(QDate(2100, 3, 28).dayOfWeek()), Qt::Sunday);
@@ -1253,32 +1466,33 @@ void tst_QTimeZone::tzTest()
dat = tzp.previousTransition(stdHi);
QCOMPARE(dat.abbreviation, QStringLiteral("CET"));
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(dat.atMSecsSinceEpoch, Qt::UTC),
- QDateTime(QDate(2099, 10, 25), QTime(3, 0), Qt::OffsetFromUTC, 7200));
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(dat.atMSecsSinceEpoch, UTC),
+ QDateTime(QDate(2099, 10, 25), QTime(3, 0), QTimeZone::fromSecondsAheadOfUtc(7200)));
QCOMPARE(dat.offsetFromUtc, 3600);
QCOMPARE(dat.standardTimeOffset, 3600);
QCOMPARE(dat.daylightTimeOffset, 0);
dat = tzp.previousTransition(dstHi);
QCOMPARE(dat.abbreviation, QStringLiteral("CEST"));
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(dat.atMSecsSinceEpoch, Qt::UTC),
- QDateTime(QDate(2100, 3, 28), QTime(2, 0), Qt::OffsetFromUTC, 3600));
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(dat.atMSecsSinceEpoch, UTC),
+ QDateTime(QDate(2100, 3, 28), QTime(2, 0), QTimeZone::fromSecondsAheadOfUtc(3600)));
QCOMPARE(dat.offsetFromUtc, 7200);
QCOMPARE(dat.standardTimeOffset, 3600);
QCOMPARE(dat.daylightTimeOffset, 3600);
dat = tzp.nextTransition(stdHi);
QCOMPARE(dat.abbreviation, QStringLiteral("CEST"));
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(dat.atMSecsSinceEpoch, Qt::UTC),
- QDateTime(QDate(2100, 3, 28), QTime(2, 0), Qt::OffsetFromUTC, 3600));
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(dat.atMSecsSinceEpoch, UTC),
+ QDateTime(QDate(2100, 3, 28), QTime(2, 0), QTimeZone::fromSecondsAheadOfUtc(3600)));
QCOMPARE(dat.offsetFromUtc, 7200);
QCOMPARE(dat.standardTimeOffset, 3600);
QCOMPARE(dat.daylightTimeOffset, 3600);
dat = tzp.nextTransition(dstHi);
QCOMPARE(dat.abbreviation, QStringLiteral("CET"));
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(dat.atMSecsSinceEpoch, Qt::OffsetFromUTC, 3600),
- QDateTime(QDate(2100, 10, 31), QTime(3, 0), Qt::OffsetFromUTC, 7200));
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(dat.atMSecsSinceEpoch,
+ QTimeZone::fromSecondsAheadOfUtc(3600)),
+ QDateTime(QDate(2100, 10, 31), QTime(3, 0), QTimeZone::fromSecondsAheadOfUtc(7200)));
QCOMPARE(dat.offsetFromUtc, 3600);
QCOMPARE(dat.standardTimeOffset, 3600);
QCOMPARE(dat.daylightTimeOffset, 0);
@@ -1293,9 +1507,12 @@ void tst_QTimeZone::tzTest()
QCOMPARE(datatz1.offsetFromUtc, datautc1.offsetFromUtc);
// Test TZ timezone vs UTC timezone for non-whole-hour positive offset:
- QTzTimeZonePrivate tztz2("Asia/Calcutta");
+ QTzTimeZonePrivate tztz2k("Asia/Kolkata"); // New name
+ QTzTimeZonePrivate tztz2c("Asia/Calcutta"); // Legacy name
+ // Can't assign QtzTZP, so use a reference; prefer new name.
+ QTzTimeZonePrivate &tztz2 = tztz2k.isValid() ? tztz2k : tztz2c;
QUtcTimeZonePrivate tzutc2("UTC+05:30");
- QVERIFY(tztz2.isValid());
+ QVERIFY2(tztz2.isValid(), tztz2.id().constData());
QVERIFY(tzutc2.isValid());
QTzTimeZonePrivate::Data datatz2 = tztz2.data(std);
QTzTimeZonePrivate::Data datautc2 = tzutc2.data(std);
@@ -1307,7 +1524,7 @@ void tst_QTimeZone::tzTest()
QCOMPARE(tzBarnaul.data(std).abbreviation, QString("+07"));
// first full day of the new rule (tzdata2016b)
- QDateTime dt(QDate(2016, 3, 28), QTime(0, 0, 0), Qt::UTC);
+ QDateTime dt(QDate(2016, 3, 28), QTime(0, 0), UTC);
QCOMPARE(tzBarnaul.data(dt.toMSecsSinceEpoch()).abbreviation, QString("+07"));
}
#endif // QT_BUILD_INTERNAL && Q_OS_UNIX && !Q_OS_DARWIN
@@ -1317,8 +1534,8 @@ void tst_QTimeZone::macTest()
{
#if defined(QT_BUILD_INTERNAL) && defined(Q_OS_DARWIN)
// Known datetimes
- qint64 std = QDateTime(QDate(2012, 1, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch();
- qint64 dst = QDateTime(QDate(2012, 6, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch();
+ qint64 std = QDateTime(QDate(2012, 1, 1), QTime(0, 0), QTimeZone::UTC).toMSecsSinceEpoch();
+ qint64 dst = QDateTime(QDate(2012, 6, 1), QTime(0, 0), QTimeZone::UTC).toMSecsSinceEpoch();
// Test default constructor
QMacTimeZonePrivate tzpd;
@@ -1373,8 +1590,8 @@ void tst_QTimeZone::winTest()
{
#if defined(QT_BUILD_INTERNAL) && defined(USING_WIN_TZ)
// Known datetimes
- qint64 std = QDateTime(QDate(2012, 1, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch();
- qint64 dst = QDateTime(QDate(2012, 6, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch();
+ qint64 std = QDateTime(QDate(2012, 1, 1), QTime(0, 0), QTimeZone::UTC).toMSecsSinceEpoch();
+ qint64 dst = QDateTime(QDate(2012, 6, 1), QTime(0, 0), QTimeZone::UTC).toMSecsSinceEpoch();
// Test default constructor
QWinTimeZonePrivate tzpd;
@@ -1419,16 +1636,68 @@ void tst_QTimeZone::winTest()
testEpochTranPrivate(QWinTimeZonePrivate("America/Toronto"));
#endif // QT_BUILD_INTERNAL && USING_WIN_TZ
}
+
#undef ZONE_DNAME_CHECK
+void tst_QTimeZone::localeSpecificDisplayName_data()
+{
+#ifdef USING_WIN_TZ
+ QSKIP("MS backend does not use locale parameter");
+#endif
+ QTest::addColumn<QByteArray>("zoneName");
+ QTest::addColumn<QLocale>("locale");
+ QTest::addColumn<QTimeZone::TimeType>("timeType");
+ QTest::addColumn<QString>("expectedName");
+
+ QStringList names;
+ QLocale locale;
+ // Pick a non-system locale; German or French
+ if (QLocale::system().language() != QLocale::German) {
+ locale = QLocale(QLocale::German);
+ names << QString("Mitteleurop\u00e4ische Normalzeit")
+ << QString("Mitteleurop\u00e4ische Sommerzeit");
+ } else {
+ locale = QLocale(QLocale::French);
+ names << QString("heure normale d\u2019Europe centrale")
+ << QString("heure d\u2019\u00E9t\u00E9 d\u2019Europe centrale");
+ }
+
+ qsizetype index = 0;
+ QTest::newRow("Berlin, standard time")
+ << QByteArray("Europe/Berlin") << locale << QTimeZone::StandardTime
+ << names.at(index++);
+
+ QTest::newRow("Berlin, summer time")
+ << QByteArray("Europe/Berlin") << locale << QTimeZone::DaylightTime
+ << names.at(index++);
+}
+
+void tst_QTimeZone::localeSpecificDisplayName()
+{
+ // This test checks that QTimeZone::displayName() correctly uses the
+ // specified locale, NOT the system locale (see QTBUG-101460).
+ QFETCH(QByteArray, zoneName);
+ QFETCH(QLocale, locale);
+ QFETCH(QTimeZone::TimeType, timeType);
+ QFETCH(QString, expectedName);
+
+ QTimeZone zone(zoneName);
+ QVERIFY(zone.isValid());
+
+ const QString localeName = zone.displayName(timeType, QTimeZone::LongName, locale);
+ QCOMPARE(localeName, expectedName);
+}
+
#ifdef QT_BUILD_INTERNAL
// Test each private produces the same basic results for CET
void tst_QTimeZone::testCetPrivate(const QTimeZonePrivate &tzp)
{
// Known datetimes
- qint64 std = QDateTime(QDate(2012, 1, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch();
- qint64 dst = QDateTime(QDate(2012, 6, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch();
- qint64 prev = QDateTime(QDate(2011, 1, 1), QTime(0, 0, 0), Qt::UTC).toMSecsSinceEpoch();
+ const auto UTC = QTimeZone::UTC;
+ const auto eastOneHour = QTimeZone::fromSecondsAheadOfUtc(3600);
+ qint64 std = QDateTime(QDate(2012, 1, 1), QTime(0, 0), UTC).toMSecsSinceEpoch();
+ qint64 dst = QDateTime(QDate(2012, 6, 1), QTime(0, 0), UTC).toMSecsSinceEpoch();
+ qint64 prev = QDateTime(QDate(2011, 1, 1), QTime(0, 0), UTC).toMSecsSinceEpoch();
QCOMPARE(tzp.offsetFromUtc(std), 3600);
QCOMPARE(tzp.offsetFromUtc(dst), 7200);
@@ -1461,32 +1730,34 @@ void tst_QTimeZone::testCetPrivate(const QTimeZonePrivate &tzp)
if (tzp.hasTransitions()) {
QTimeZonePrivate::Data tran = tzp.nextTransition(std);
// 2012-03-25 02:00 CET, +1 -> +2
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, Qt::UTC),
- QDateTime(QDate(2012, 3, 25), QTime(2, 0), Qt::OffsetFromUTC, 3600));
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, UTC),
+ QDateTime(QDate(2012, 3, 25), QTime(2, 0), eastOneHour));
QCOMPARE(tran.offsetFromUtc, 7200);
QCOMPARE(tran.standardTimeOffset, 3600);
QCOMPARE(tran.daylightTimeOffset, 3600);
tran = tzp.nextTransition(dst);
// 2012-10-28 03:00 CEST, +2 -> +1
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, Qt::UTC),
- QDateTime(QDate(2012, 10, 28), QTime(3, 0), Qt::OffsetFromUTC, 2 * 3600));
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, UTC),
+ QDateTime(QDate(2012, 10, 28), QTime(3, 0),
+ QTimeZone::fromSecondsAheadOfUtc(2 * 3600)));
QCOMPARE(tran.offsetFromUtc, 3600);
QCOMPARE(tran.standardTimeOffset, 3600);
QCOMPARE(tran.daylightTimeOffset, 0);
tran = tzp.previousTransition(std);
// 2011-10-30 03:00 CEST, +2 -> +1
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, Qt::UTC),
- QDateTime(QDate(2011, 10, 30), QTime(3, 0), Qt::OffsetFromUTC, 2 * 3600));
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, UTC),
+ QDateTime(QDate(2011, 10, 30), QTime(3, 0),
+ QTimeZone::fromSecondsAheadOfUtc(2 * 3600)));
QCOMPARE(tran.offsetFromUtc, 3600);
QCOMPARE(tran.standardTimeOffset, 3600);
QCOMPARE(tran.daylightTimeOffset, 0);
tran = tzp.previousTransition(dst);
// 2012-03-25 02:00 CET, +1 -> +2 (again)
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, Qt::UTC),
- QDateTime(QDate(2012, 3, 25), QTime(2, 0), Qt::OffsetFromUTC, 3600));
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, UTC),
+ QDateTime(QDate(2012, 3, 25), QTime(2, 0), eastOneHour));
QCOMPARE(tran.offsetFromUtc, 7200);
QCOMPARE(tran.standardTimeOffset, 3600);
QCOMPARE(tran.daylightTimeOffset, 3600);
@@ -1494,25 +1765,24 @@ void tst_QTimeZone::testCetPrivate(const QTimeZonePrivate &tzp)
QTimeZonePrivate::DataList expected;
// 2011-03-27 02:00 CET, +1 -> +2
tran.atMSecsSinceEpoch = QDateTime(QDate(2011, 3, 27), QTime(2, 0),
- Qt::OffsetFromUTC, 3600).toMSecsSinceEpoch();
+ eastOneHour).toMSecsSinceEpoch();
tran.offsetFromUtc = 7200;
tran.standardTimeOffset = 3600;
tran.daylightTimeOffset = 3600;
expected << tran;
// 2011-10-30 03:00 CEST, +2 -> +1
tran.atMSecsSinceEpoch = QDateTime(QDate(2011, 10, 30), QTime(3, 0),
- Qt::OffsetFromUTC, 2 * 3600).toMSecsSinceEpoch();
+ QTimeZone::fromSecondsAheadOfUtc(2 * 3600)
+ ).toMSecsSinceEpoch();
tran.offsetFromUtc = 3600;
tran.standardTimeOffset = 3600;
tran.daylightTimeOffset = 0;
expected << tran;
QTimeZonePrivate::DataList result = tzp.transitions(prev, std);
- QCOMPARE(result.count(), expected.count());
- for (int i = 0; i < expected.count(); ++i) {
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(result.at(i).atMSecsSinceEpoch,
- Qt::OffsetFromUTC, 3600),
- QDateTime::fromMSecsSinceEpoch(expected.at(i).atMSecsSinceEpoch,
- Qt::OffsetFromUTC, 3600));
+ QCOMPARE(result.size(), expected.size());
+ for (int i = 0; i < expected.size(); ++i) {
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(result.at(i).atMSecsSinceEpoch, eastOneHour),
+ QDateTime::fromMSecsSinceEpoch(expected.at(i).atMSecsSinceEpoch, eastOneHour));
QCOMPARE(result.at(i).offsetFromUtc, expected.at(i).offsetFromUtc);
QCOMPARE(result.at(i).standardTimeOffset, expected.at(i).standardTimeOffset);
QCOMPARE(result.at(i).daylightTimeOffset, expected.at(i).daylightTimeOffset);
@@ -1526,10 +1796,13 @@ void tst_QTimeZone::testEpochTranPrivate(const QTimeZonePrivate &tzp)
if (!tzp.hasTransitions())
return; // test only viable for transitions
+ const auto UTC = QTimeZone::UTC;
+ const auto hour = std::chrono::hours{1};
QTimeZonePrivate::Data tran = tzp.nextTransition(0); // i.e. first after epoch
// 1970-04-26 02:00 EST, -5 -> -4
- const QDateTime after = QDateTime(QDate(1970, 4, 26), QTime(2, 0), Qt::OffsetFromUTC, -5 * 3600);
- const QDateTime found = QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, Qt::UTC);
+ const QDateTime after = QDateTime(QDate(1970, 4, 26), QTime(2, 0),
+ QTimeZone::fromDurationAheadOfUtc(-5 * hour));
+ const QDateTime found = QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, UTC);
#ifdef USING_WIN_TZ // MS gets the date wrong: 5th April instead of 26th.
QCOMPARE(found.toOffsetFromUtc(-5 * 3600).time(), after.time());
#else
@@ -1540,16 +1813,16 @@ void tst_QTimeZone::testEpochTranPrivate(const QTimeZonePrivate &tzp)
QCOMPARE(tran.daylightTimeOffset, 3600);
// Pre-epoch time-zones might not be supported at all:
- tran = tzp.nextTransition(QDateTime(QDate(1601, 1, 1), QTime(0, 0),
- Qt::UTC).toMSecsSinceEpoch());
+ tran = tzp.nextTransition(QDateTime(QDate(1601, 1, 1), QTime(0, 0), UTC).toMSecsSinceEpoch());
if (tran.atMSecsSinceEpoch != QTimeZonePrivate::invalidMSecs()
// Toronto *did* have a transition before 1970 (DST since 1918):
&& tran.atMSecsSinceEpoch < 0) {
// ... but, if they are, we should be able to search back to them:
tran = tzp.previousTransition(0); // i.e. last before epoch
// 1969-10-26 02:00 EDT, -4 -> -5
- QCOMPARE(QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, Qt::UTC),
- QDateTime(QDate(1969, 10, 26), QTime(2, 0), Qt::OffsetFromUTC, -4 * 3600));
+ QCOMPARE(QDateTime::fromMSecsSinceEpoch(tran.atMSecsSinceEpoch, UTC),
+ QDateTime(QDate(1969, 10, 26), QTime(2, 0),
+ QTimeZone::fromDurationAheadOfUtc(-4 * hour)));
QCOMPARE(tran.offsetFromUtc, -5 * 3600);
QCOMPARE(tran.standardTimeOffset, -5 * 3600);
QCOMPARE(tran.daylightTimeOffset, 0);
@@ -1560,5 +1833,47 @@ void tst_QTimeZone::testEpochTranPrivate(const QTimeZonePrivate &tzp)
}
#endif // QT_BUILD_INTERNAL
+#if __cpp_lib_chrono >= 201907L
+Q_DECLARE_METATYPE(const std::chrono::time_zone *);
+#endif
+
+void tst_QTimeZone::stdCompatibility_data()
+{
+#if __cpp_lib_chrono >= 201907L
+ QTest::addColumn<const std::chrono::time_zone *>("timeZone");
+ const std::chrono::tzdb &tzdb = std::chrono::get_tzdb();
+ qDebug() << "Using tzdb version:" << QByteArrayView(tzdb.version);
+
+ for (const std::chrono::time_zone &zone : tzdb.zones)
+ QTest::addRow(zone.name().data()) << &zone;
+#else
+ QSKIP("This test requires C++20's <chrono>.");
+#endif
+}
+
+void tst_QTimeZone::stdCompatibility()
+{
+#if __cpp_lib_chrono >= 201907L
+ QFETCH(const std::chrono::time_zone *, timeZone);
+ QByteArrayView zoneName = QByteArrayView(timeZone->name());
+ QTimeZone tz = QTimeZone::fromStdTimeZonePtr(timeZone);
+ if (tz.isValid()) {
+ QCOMPARE(tz.id(), zoneName);
+ } else {
+ // QTBUG-102187: a few timezones reported by tzdb might not be
+ // recognized by QTimeZone. This happens for instance on Windows, where
+ // tzdb is using ICU, whose database does not match QTimeZone's.
+ const bool isKnownUnknown =
+ !zoneName.contains('/')
+ || zoneName == "Antarctica/Troll"
+ || zoneName.startsWith("SystemV/");
+ QVERIFY(isKnownUnknown);
+ }
+#else
+ QSKIP("This test requires C++20's <chrono>.");
+#endif
+}
+#endif // timezone backends
+
QTEST_APPLESS_MAIN(tst_QTimeZone)
#include "tst_qtimezone.moc"
diff --git a/tests/auto/corelib/time/qtimezone/tst_qtimezone_darwin.mm b/tests/auto/corelib/time/qtimezone/tst_qtimezone_darwin.mm
index 040bd941ae..f4ef15036d 100644
--- a/tests/auto/corelib/time/qtimezone/tst_qtimezone_darwin.mm
+++ b/tests/auto/corelib/time/qtimezone/tst_qtimezone_darwin.mm
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QtCore/QTimeZone>
#include <QTest>
@@ -34,7 +9,7 @@
void tst_QTimeZone_darwinTypes()
{
-#if !defined(QT_NO_SYSTEMLOCALE)
+#if QT_CONFIG(timezone)
// QTimeZone <-> CFTimeZone
{
QTimeZone qtTimeZone("America/Los_Angeles");
@@ -64,5 +39,5 @@ void tst_QTimeZone_darwinTypes()
QVERIFY([qtTimeZone.toNSTimeZone() isEqual:nsTimeZone]);
[autoreleasepool release];
}
-#endif
+#endif // feature timezone
}
diff --git a/tests/auto/corelib/tools/CMakeLists.txt b/tests/auto/corelib/tools/CMakeLists.txt
index 3398033b3f..5cca2e2df6 100644
--- a/tests/auto/corelib/tools/CMakeLists.txt
+++ b/tests/auto/corelib/tools/CMakeLists.txt
@@ -1,4 +1,7 @@
-# Generated from tools.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(qatomicscopedvaluerollback)
if(NOT INTEGRITY)
add_subdirectory(collections)
endif()
@@ -14,7 +17,9 @@ add_subdirectory(qduplicatetracker)
add_subdirectory(qeasingcurve)
add_subdirectory(qexplicitlyshareddatapointer)
add_subdirectory(qflatmap)
-add_subdirectory(qfreelist)
+if(QT_FEATURE_private_tests)
+ add_subdirectory(qfreelist)
+endif()
add_subdirectory(qhash)
add_subdirectory(qhashfunctions)
add_subdirectory(qhashseed)
@@ -37,17 +42,17 @@ add_subdirectory(qscopedpointer)
add_subdirectory(qscopedvaluerollback)
add_subdirectory(qscopeguard)
add_subdirectory(qtaggedpointer)
+add_subdirectory(qtyperevision)
add_subdirectory(qset)
add_subdirectory(qsharedpointer)
add_subdirectory(qsize)
add_subdirectory(qsizef)
+add_subdirectory(qspan)
add_subdirectory(qstl)
+add_subdirectory(quniquehandle)
add_subdirectory(qvarlengtharray)
add_subdirectory(qversionnumber)
-# QTBUG-88137 # special case
-if(NOT ANDROID)
- add_subdirectory(qtimeline)
-endif()
+add_subdirectory(qtimeline)
if(APPLE)
add_subdirectory(qmacautoreleasepool)
endif()
diff --git a/tests/auto/corelib/tools/collections/CMakeLists.txt b/tests/auto/corelib/tools/collections/CMakeLists.txt
index 32ef8d7506..687d88b2e4 100644
--- a/tests/auto/corelib/tools/collections/CMakeLists.txt
+++ b/tests/auto/corelib/tools/collections/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from collections.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_collections Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_collections LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_collections
SOURCES
tst_collections.cpp
- DEFINES
- # -QT_NO_JAVA_STYLE_ITERATORS # special case remove
)
+
+qt_internal_undefine_global_definition(tst_collections QT_NO_JAVA_STYLE_ITERATORS)
diff --git a/tests/auto/corelib/tools/collections/tst_collections.cpp b/tests/auto/corelib/tools/collections/tst_collections.cpp
index 7306e036a9..2fab6cae3a 100644
--- a/tests/auto/corelib/tools/collections/tst_collections.cpp
+++ b/tests/auto/corelib/tools/collections/tst_collections.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** 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
+#undef QT_NO_FOREACH // this file tests Q_FOREACH over containers (centralize in a tst_qforeach?)
// test the container forwards
#include <QtContainerFwd>
@@ -319,8 +295,8 @@ constexpr inline bool has_prepend_v<QVarLengthArray<T,N>> = false; // deprecated
void tst_Collections::typeinfo()
{
- QVERIFY(QTypeInfo<int*>::isPointer);
- QVERIFY(!QTypeInfo<int>::isPointer);
+ QVERIFY(std::is_pointer_v<int*>);
+ QVERIFY(!std::is_pointer_v<int>);
QVERIFY(QTypeInfo<QString>::isComplex);
QVERIFY(!QTypeInfo<int>::isComplex);
}
@@ -554,7 +530,7 @@ void tst_Collections::list()
list << "one" << "two" << "one" << "two";
QVERIFY(!list.removeOne("three"));
QVERIFY(list.removeOne("two"));
- QCOMPARE(list, QList<QString>() << "one" << "one" << "two");;
+ QCOMPARE(list, QList<QString>() << "one" << "one" << "two");
QVERIFY(list.removeOne("two"));
QCOMPARE(list, QList<QString>() << "one" << "one");
QVERIFY(!list.removeOne("two"));
@@ -709,7 +685,7 @@ QT_WARNING_POP
list.insert(0, "atzero");
QCOMPARE(list.at(0), QString("atzero"));
- int listCount = list.count();
+ int listCount = list.size();
list.insert(listCount, "atcount");
QCOMPARE(list.at(listCount), QString("atcount"));
}
@@ -2043,8 +2019,8 @@ void tst_Collections::qstring()
s = "ascii";
s += QChar((uchar) 0xb0);
QVERIFY(s.toUtf8() != s.toLatin1());
- QCOMPARE(s[s.length()-1].unicode(), (ushort)0xb0);
- QCOMPARE(s.left(s.length()-1), QLatin1String("ascii"));
+ QCOMPARE(s[s.size()-1].unicode(), char16_t(0xb0));
+ QCOMPARE(s.left(s.size()-1), QLatin1String("ascii"));
QVERIFY(s == QString::fromUtf8(s.toUtf8().constData()));
@@ -2096,7 +2072,7 @@ void tst_Collections::qstring()
QString str = "Hello";
- QString cstr = QString::fromRawData(str.unicode(), str.length());
+ QString cstr = QString::fromRawData(str.unicode(), str.size());
QCOMPARE(str, QLatin1String("Hello"));
QCOMPARE(cstr, QLatin1String("Hello"));
cstr.clear();
@@ -2718,7 +2694,7 @@ void tst_Collections::vector_stl()
QFETCH(QStringList, elements);
QList<QString> vector;
- for (int i = 0; i < elements.count(); ++i)
+ for (int i = 0; i < elements.size(); ++i)
vector << elements.at(i);
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
@@ -2753,7 +2729,7 @@ void tst_Collections::list_stl()
QFETCH(QStringList, elements);
QList<QString> list;
- for (int i = 0; i < elements.count(); ++i)
+ for (int i = 0; i < elements.size(); ++i)
list << elements.at(i);
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
@@ -2846,7 +2822,7 @@ void instantiateContainer()
container.clear();
container.contains(value);
- container.count();
+ container.size();
container.empty();
container.isEmpty();
container.size();
@@ -3094,9 +3070,8 @@ class T2;
void tst_Collections::forwardDeclared()
{
-#define COMMA ,
-#define TEST(type) do { \
- using C = type; \
+#define TEST(...) do { \
+ using C = __VA_ARGS__; \
C *x = nullptr; \
C::iterator i; \
C::const_iterator j; \
@@ -3105,16 +3080,15 @@ void tst_Collections::forwardDeclared()
Q_UNUSED(j); \
} while (false)
- TEST(QHash<Key1 COMMA T1>);
- TEST(QMap<Key1 COMMA T1>);
- TEST(QMultiMap<Key1 COMMA T1>);
+ TEST(QHash<Key1, T1>);
+ TEST(QMap<Key1, T1>);
+ TEST(QMultiMap<Key1, T1>);
TEST(QList<T1>);
TEST(QVector<T1>);
TEST(QStack<T1>);
TEST(QQueue<T1>);
TEST(QSet<T1>);
#undef TEST
-#undef COMMA
{
using C = QPair<T1, T2>;
@@ -3271,7 +3245,7 @@ template<template<class> class C> void QTBUG13079_collectionInsideCollectionImpl
QCOMPARE(nodeList.first().s, QString::fromLatin1("child"));
nodeList = nodeList.first().children;
- QCOMPARE(nodeList.count(), 0);
+ QCOMPARE(nodeList.size(), 0);
nodeList << QTBUG13079_Node<C>();
}
@@ -3296,7 +3270,7 @@ template<template<class, class> class C> void QTBUG13079_collectionInsideCollect
QCOMPARE(nodeMap[12].s, QString::fromLatin1("child"));
nodeMap = nodeMap[12].children;
- QCOMPARE(nodeMap.count(), 0);
+ QCOMPARE(nodeMap.size(), 0);
nodeMap[42] = QTBUG13079_NodeAssoc<C>();
}
@@ -3363,7 +3337,7 @@ void tst_Collections::QTBUG13079_collectionInsideCollection()
QSet<QTBUG13079_Node<QSet> > nodeSet;
nodeSet << QTBUG13079_Node<QSet>();
nodeSet = nodeSet.begin()->children;
- QCOMPARE(nodeSet.count(), 0);
+ QCOMPARE(nodeSet.size(), 0);
}
QTBUG13079_collectionInsideCollectionAssocImpl<QMap>();
@@ -3385,7 +3359,7 @@ template<class Container> void foreach_test_arrays(const Container &container)
set << val;
i++;
}
- QCOMPARE(set.count(), container.count());
+ QCOMPARE(set.size(), container.size());
//modify the container while iterating.
Container c2 = container;
@@ -3422,9 +3396,9 @@ void tst_Collections::foreach_2()
varl2 << i;
varl3 << i;
}
- QCOMPARE(varl1.count(), intlist.count());
- QCOMPARE(varl2.count(), intlist.count());
- QCOMPARE(varl3.count(), intlist.count());
+ QCOMPARE(varl1.size(), intlist.size());
+ QCOMPARE(varl2.size(), intlist.size());
+ QCOMPARE(varl3.size(), intlist.size());
QVarLengthArray<QString> varl4;
QVarLengthArray<QString, 3> varl5;
@@ -3434,9 +3408,9 @@ void tst_Collections::foreach_2()
varl5 << str;
varl6 << str;
}
- QCOMPARE(varl4.count(), strlist.count());
- QCOMPARE(varl5.count(), strlist.count());
- QCOMPARE(varl6.count(), strlist.count());
+ QCOMPARE(varl4.size(), strlist.size());
+ QCOMPARE(varl5.size(), strlist.size());
+ QCOMPARE(varl6.size(), strlist.size());
}
struct IntOrString
@@ -3466,8 +3440,8 @@ template<class Container> void insert_remove_loop_impl()
t.insert(t.begin() + 2, T(IntOrString(7)));
t.insert(t.begin() + 5, 3, T(IntOrString(8)));
int expect1[] = { 4 , 1 , 7, 5 , 5 , 8, 8, 8, 6, 5, 2 , 3 };
- QCOMPARE(size_t(t.count()), sizeof(expect1)/sizeof(int));
- for (int i = 0; i < t.count(); i++) {
+ QCOMPARE(size_t(t.size()), sizeof(expect1)/sizeof(int));
+ for (int i = 0; i < t.size(); i++) {
QCOMPARE(t[i], T(IntOrString(expect1[i])));
}
@@ -3481,8 +3455,8 @@ template<class Container> void insert_remove_loop_impl()
t.remove(7);
t.remove(2, 3);
int expect2[] = { 4 , 1 , 9, 8, 6, 5, 2 , 3 };
- QCOMPARE(size_t(t.count()), sizeof(expect2)/sizeof(int));
- for (int i = 0; i < t.count(); i++) {
+ QCOMPARE(size_t(t.size()), sizeof(expect2)/sizeof(int));
+ for (int i = 0; i < t.size(); i++) {
QCOMPARE(t[i], T(IntOrString(expect2[i])));
}
@@ -3494,16 +3468,16 @@ template<class Container> void insert_remove_loop_impl()
}
int expect3[] = { 1 , 9, 5, 3 };
- QCOMPARE(size_t(t.count()), sizeof(expect3)/sizeof(int));
- for (int i = 0; i < t.count(); i++) {
+ QCOMPARE(size_t(t.size()), sizeof(expect3)/sizeof(int));
+ for (int i = 0; i < t.size(); i++) {
QCOMPARE(t[i], T(IntOrString(expect3[i])));
}
t.erase(t.begin() + 1, t.end() - 1);
int expect4[] = { 1 , 3 };
- QCOMPARE(size_t(t.count()), sizeof(expect4)/sizeof(int));
- for (int i = 0; i < t.count(); i++) {
+ QCOMPARE(size_t(t.size()), sizeof(expect4)/sizeof(int));
+ for (int i = 0; i < t.size(); i++) {
QCOMPARE(t[i], T(IntOrString(expect4[i])));
}
@@ -3520,8 +3494,8 @@ template<class Container> void insert_remove_loop_impl()
int expect5[] = { 1, 1, 2, 3*3, 3, 3*3+1, 10, 11*11, 11, 11*11+1, 12 , 13*13, 13, 13*13+1, 14,
15*15, 15, 15*15+1, 16 , 17*17, 17, 17*17+1 ,18 , 19*19, 19, 19*19+1, 20, 21*21, 21, 21*21+1 };
- QCOMPARE(size_t(t.count()), sizeof(expect5)/sizeof(int));
- for (int i = 0; i < t.count(); i++) {
+ QCOMPARE(size_t(t.size()), sizeof(expect5)/sizeof(int));
+ for (int i = 0; i < t.size(); i++) {
QCOMPARE(t[i], T(IntOrString(expect5[i])));
}
@@ -3531,8 +3505,8 @@ template<class Container> void insert_remove_loop_impl()
t.insert(2, 4, T(IntOrString(7)));
int expect6[] = { 1, 2, 7, 7, 7, 7, 9, 9, 9, 9, 3, 4 };
- QCOMPARE(size_t(t.count()), sizeof(expect6)/sizeof(int));
- for (int i = 0; i < t.count(); i++) {
+ QCOMPARE(size_t(t.size()), sizeof(expect6)/sizeof(int));
+ for (int i = 0; i < t.size(); i++) {
QCOMPARE(t[i], T(IntOrString(expect6[i])));
}
diff --git a/tests/auto/corelib/tools/containerapisymmetry/CMakeLists.txt b/tests/auto/corelib/tools/containerapisymmetry/CMakeLists.txt
index 68d6f4bc0e..0ae1092043 100644
--- a/tests/auto/corelib/tools/containerapisymmetry/CMakeLists.txt
+++ b/tests/auto/corelib/tools/containerapisymmetry/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from containerapisymmetry.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_containerapisymmetry Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_containerapisymmetry LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_containerapisymmetry
SOURCES
tst_containerapisymmetry.cpp
diff --git a/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp b/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp
index 7fe1dd9b4d..5eb9dbfa36 100644
--- a/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp
+++ b/tests/auto/corelib/tools/containerapisymmetry/tst_containerapisymmetry.cpp
@@ -1,43 +1,19 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 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 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 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
#include <QTest>
#include "qbytearray.h"
#include "qdebug.h"
#include "qhash.h"
+#include "qmap.h"
+#include "qset.h"
#include "qlist.h"
#include "qstring.h"
#include "qvarlengtharray.h"
#include <algorithm>
#include <functional>
-#include <vector> // for reference
#include <iostream>
#include <list>
#include <set>
@@ -46,10 +22,7 @@
#include <forward_list>
#include <unordered_set>
#include <unordered_map>
-
-#if __cplusplus >= 202002L && defined(__cpp_lib_erase_if)
-# define STDLIB_HAS_UNIFORM_ERASURE
-#endif
+#include <q20vector.h> // For reference
QT_BEGIN_NAMESPACE
std::ostream &operator<<(std::ostream &os, const QChar &c)
@@ -345,6 +318,49 @@ private Q_SLOTS:
private:
template <typename Container>
+ void resize_impl() const;
+
+private Q_SLOTS:
+ void resize_std_vector() { resize_impl<std::vector<int>>(); }
+ void resize_QList() { resize_impl<QList<qintptr>>(); }
+ void resize_QVarLengthArray() { resize_impl<QVarLengthArray<int>>(); }
+ void resize_QString() { resize_impl<QString>(); }
+ void resize_QByteArray() { resize_impl<QByteArray>(); }
+
+private:
+ template <typename Container>
+ void copesWithValueTypesWithConstMembers_impl();
+
+ struct ConstMember {
+ #ifndef __cpp_aggregate_paren_init // also check that we can emplace aggregates (C++20 only)
+ explicit ConstMember(int n) : n(n) {}
+ #endif
+ const int n;
+
+ friend bool operator==(const ConstMember &lhs, const ConstMember &rhs) noexcept
+ { return lhs.n == rhs.n; }
+ friend bool operator!=(const ConstMember &lhs, const ConstMember &rhs) noexcept
+ { return !(lhs == rhs); }
+ };
+
+private Q_SLOTS:
+ void copesWithValueTypesWithConstMembers_std_vector() { copesWithValueTypesWithConstMembers_impl<std::vector<ConstMember>>(); }
+ void copesWithValueTypesWithConstMembers_QVarLengthArray() { copesWithValueTypesWithConstMembers_impl<QVarLengthArray<ConstMember, 2>>(); }
+
+private:
+ template <typename Container>
+ void assign_impl() const;
+
+private Q_SLOTS:
+ void assign_std_vector() { assign_impl<std::vector<int>>(); };
+ void assign_std_string() { assign_impl<std::string>(); }
+ void assign_QVarLengthArray() { assign_impl<QVarLengthArray<int, 4>>(); };
+ void assign_QList() { assign_impl<QList<int>>(); }
+ void assign_QByteArray() { assign_impl<QByteArray>(); }
+ void assign_QString() { assign_impl<QString>(); }
+
+private:
+ template <typename Container>
void front_back_impl() const;
private Q_SLOTS:
@@ -366,31 +382,53 @@ private:
template <typename Container>
void erase_if_associative_impl() const;
+ template <typename Container>
+ void member_erase_impl() const;
+
+ template <typename Container>
+ void member_erase_associative_impl() const;
+
+ template <typename Container>
+ void member_erase_set_impl() const;
+
private Q_SLOTS:
void erase_QList() { erase_impl<QList<int>>(); }
void erase_QVarLengthArray() { erase_impl<QVarLengthArray<int>>(); }
void erase_QString() { erase_impl<QString>(); }
void erase_QByteArray() { erase_impl<QByteArray>(); }
- void erase_std_vector() {
-#ifdef STDLIB_HAS_UNIFORM_ERASURE
- erase_impl<std::vector<int>>();
-#endif
- }
+ void erase_std_vector() { erase_impl<std::vector<int>>(); }
void erase_if_QList() { erase_if_impl<QList<int>>(); }
void erase_if_QVarLengthArray() { erase_if_impl<QVarLengthArray<int>>(); }
void erase_if_QSet() { erase_if_impl<QSet<int>>(); }
void erase_if_QString() { erase_if_impl<QString>(); }
void erase_if_QByteArray() { erase_if_impl<QByteArray>(); }
- void erase_if_std_vector() {
-#ifdef STDLIB_HAS_UNIFORM_ERASURE
- erase_if_impl<std::vector<int>>();
-#endif
- }
+ void erase_if_std_vector() { erase_if_impl<std::vector<int>>(); }
void erase_if_QMap() { erase_if_associative_impl<QMap<int, int>>(); }
void erase_if_QMultiMap() {erase_if_associative_impl<QMultiMap<int, int>>(); }
void erase_if_QHash() { erase_if_associative_impl<QHash<int, int>>(); }
void erase_if_QMultiHash() { erase_if_associative_impl<QMultiHash<int, int>>(); }
+
+ void member_erase_QList() { member_erase_impl<QList<int>>(); }
+ void member_erase_QVarLengthArray() { member_erase_impl<QVarLengthArray<int>>(); }
+ void member_erase_QString() { member_erase_impl<QString>(); }
+ void member_erase_QByteArray() { member_erase_impl<QByteArray>(); }
+ void member_erase_QSet() { member_erase_set_impl<QSet<int>>(); }
+
+ void member_erase_QMap() { member_erase_associative_impl<QMap<int, int>>(); }
+ void member_erase_QMultiMap() {member_erase_associative_impl<QMultiMap<int, int>>(); }
+ void member_erase_QHash() { member_erase_associative_impl<QHash<int, int>>(); }
+ void member_erase_QMultiHash() { member_erase_associative_impl<QMultiHash<int, int>>(); }
+
+private:
+ template <typename Container>
+ void keyValueRange_impl() const;
+
+private Q_SLOTS:
+ void keyValueRange_QMap() { keyValueRange_impl<QMap<int, int>>(); }
+ void keyValueRange_QMultiMap() { keyValueRange_impl<QMultiMap<int, int>>(); }
+ void keyValueRange_QHash() { keyValueRange_impl<QHash<int, int>>(); }
+ void keyValueRange_QMultiHash() { keyValueRange_impl<QMultiHash<int, int>>(); }
};
void tst_ContainerApiSymmetry::init()
@@ -692,7 +730,8 @@ Container make(int size)
Container c;
c.reserve(size);
using V = typename Container::value_type;
- std::generate_n(std::inserter(c, c.end()), size, [i = 1]() mutable { return V(i++); });
+ int i = 0;
+ std::generate_n(std::inserter(c, c.end()), size, [&i] { return V(++i); });
return c;
}
@@ -718,20 +757,209 @@ template <typename T> T clean(T &&t) { return std::forward<T>(t); }
inline char clean(QLatin1Char ch) { return ch.toLatin1(); }
template <typename Container>
+void tst_ContainerApiSymmetry::resize_impl() const
+{
+ using V = typename Container::value_type;
+ using S = typename Container::size_type;
+ auto c = make<Container>(3);
+ QCOMPARE(c.size(), S(3));
+ c.resize(4, V(5));
+ QCOMPARE(std::size(c), S(4));
+ QCOMPARE(c.back(), V(5));
+
+ // ctor/resize symmetry:
+ {
+ Container c1(S(5), V(4));
+ QCOMPARE(c1.size(), S(5));
+
+ Container c2;
+ c2.resize(S(5), V(4));
+ QCOMPARE(c2.size(), S(5));
+
+ QCOMPARE(c1, c2);
+ }
+}
+
+template <typename T>
+[[maybe_unused]]
+constexpr bool is_vector_v = false;
+template <typename...Args>
+constexpr bool is_vector_v<std::vector<Args...>> = true;
+
+template <typename Container, typename Value>
+void wrap_resize(Container &c, typename Container::size_type n, const Value &v)
+{
+#ifdef __GLIBCXX__ // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83981
+ if constexpr (is_vector_v<Container>) {
+ while (c.size() < n)
+ c.push_back(v);
+ } else
+#endif
+ {
+ c.resize(n, v);
+ }
+}
+
+template <typename Container>
+void tst_ContainerApiSymmetry::copesWithValueTypesWithConstMembers_impl()
+{
+ // The problem:
+ //
+ // using V = ConstMember;
+ // V v{42};
+ // assert(v.n == 42); // OK
+ // new (&v) V{24};
+ // assert(v.n == 24); // UB in C++17: v.n could still be 42 (C++17 [basic.life]/8)
+ // // OK in C++20 (C++20 [basic.life]/8)
+ // assert(std::launder(&v)->n == 24); // OK
+ // assert(v.n == 24); // _still_ UB!
+ //
+ // Containers:
+ // - must not expose this problem
+ // - must compile in the first place, even though V
+ // - is not assignable
+ // - is not default-constructible
+
+ using S = typename Container::size_type;
+ using V = typename Container::value_type;
+
+ Container c;
+ // the following are all functions that by rights should not require the type to be
+ // - default-constructible
+ // - assignable
+ // make sure they work
+ c.reserve(S(5));
+ c.shrink_to_fit();
+ wrap_resize(c, 1, V(42));
+ QCOMPARE(c[0], V(42));
+ wrap_resize(c, 2, V(48));
+ QCOMPARE(c[0], V(42));
+ QCOMPARE(c[1], V(48));
+ c.clear();
+ c.emplace_back(24);
+ QCOMPARE(c.front(), V(24));
+ c.push_back(V(41));
+ QCOMPARE(c.back(), V(41));
+ {
+ const auto v142 = V(142);
+ c.push_back(v142);
+ }
+ QCOMPARE(c.size(), S(3));
+ QCOMPARE(c[0], V(24));
+ QCOMPARE(c[1], V(41));
+ QCOMPARE(c[2], V(142));
+}
+
+template <typename Container>
+void tst_ContainerApiSymmetry::assign_impl() const
+{
+#define CHECK(Arr, ComparisonData, Sz_n, Sz_e) \
+ QCOMPARE(Sz_n, Sz_e); \
+ for (const auto &e : Arr) \
+ QCOMPARE(e, ComparisonData) \
+ /*end*/
+#define RET_CHECK(...) \
+ do { \
+ if constexpr (std::is_void_v<decltype( __VA_ARGS__ )>) { \
+ /* e.g. std::vector */ \
+ __VA_ARGS__ ; \
+ } else { \
+ /* e.g. std::basic_string */ \
+ auto &&r = __VA_ARGS__ ; \
+ QCOMPARE_EQ(&r, &c); \
+ } \
+ } while (false) \
+ /* end */
+ using V = typename Container::value_type;
+ using S = typename Container::size_type;
+ auto tData = V(65);
+ {
+ // fill version
+ auto c = make<Container>(4);
+ const S oldCapacity = c.capacity();
+ RET_CHECK(c.assign(4, tData));
+ CHECK(c, tData, c.size(), S(4));
+ QCOMPARE_EQ(c.capacity(), oldCapacity);
+
+ tData = V(66);
+ c.assign(8, tData); // may reallocate
+ CHECK(c, tData, c.size(), S(8));
+
+ const S grownCapacity = c.capacity();
+ c.assign(0, tData);
+ CHECK(c, tData, c.size(), S(0));
+ QCOMPARE_EQ(c.capacity(), grownCapacity);
+ }
+ {
+ // range version for non input iterator
+ auto c = make<Container>(4);
+ auto iter = make<Container>(1);
+
+ iter.assign(8, tData);
+ RET_CHECK(c.assign(iter.begin(), iter.end())); // may reallocate
+ CHECK(c, tData, c.size(), S(8));
+
+ const S oldCapacity = c.capacity();
+ c.assign(iter.begin(), iter.begin());
+ CHECK(c, tData, c.size(), S(0));
+ QCOMPARE_EQ(c.capacity(), oldCapacity);
+ }
+ {
+ // range version for input iterator
+ auto c = make<Container>(4);
+ const S oldCapacity = c.capacity();
+
+ std::stringstream ss;
+ ss << tData << ' ' << tData << ' ';
+ RET_CHECK(c.assign(std::istream_iterator<V>{ss}, std::istream_iterator<V>{}));
+ CHECK(c, tData, c.size(), S(2));
+ QCOMPARE_EQ(c.capacity(), oldCapacity);
+
+ ss.str("");
+ ss.clear();
+ tData = V(66);
+ ss << tData << ' ' << tData << ' ' << tData << ' ' << tData << ' ';
+ c.assign(std::istream_iterator<V>{ss}, std::istream_iterator<V>{});
+ CHECK(c, tData, c.size(), S(4));
+ QCOMPARE_EQ(c.capacity(), oldCapacity);
+
+ ss.str("");
+ ss.clear();
+ tData = V(67);
+ ss << tData << ' ' << tData << ' ' << tData << ' ' << tData << ' '
+ << tData << ' ' << tData << ' ' << tData << ' ';
+ c.assign(std::istream_iterator<V>{ss}, std::istream_iterator<V>{}); // may reallocate
+ CHECK(c, tData, c.size(), S(7));
+ }
+ {
+ // initializer-list version
+ auto c = make<Container>(4);
+ const S oldCapacity = c.capacity();
+ std::initializer_list<V> list = {tData, tData, tData};
+ RET_CHECK(c.assign(list));
+ CHECK(c, tData, c.size(), S(3));
+ QCOMPARE_EQ(c.capacity(), oldCapacity);
+ }
+
+#undef RET_CHECK
+#undef CHECK
+}
+
+template<typename Container>
void tst_ContainerApiSymmetry::front_back_impl() const
{
using V = typename Container::value_type;
auto c1 = make<Container>(1);
QCOMPARE(clean(c1.front()), V(1));
QCOMPARE(clean(c1.back()), V(1));
- QCOMPARE(clean(qAsConst(c1).front()), V(1));
- QCOMPARE(clean(qAsConst(c1).back()), V(1));
+ QCOMPARE(clean(std::as_const(c1).front()), V(1));
+ QCOMPARE(clean(std::as_const(c1).back()), V(1));
auto c2 = make<Container>(2);
QCOMPARE(clean(c2.front()), V(1));
QCOMPARE(clean(c2.back()), V(2));
- QCOMPARE(clean(qAsConst(c2).front()), V(1));
- QCOMPARE(clean(qAsConst(c2).back()), V(2));
+ QCOMPARE(clean(std::as_const(c2).front()), V(1));
+ QCOMPARE(clean(std::as_const(c2).back()), V(2));
}
namespace {
@@ -750,6 +978,7 @@ void tst_ContainerApiSymmetry::erase_impl() const
auto c = make<Container>(7); // {1, 2, 3, 4, 5, 6, 7}
QCOMPARE(c.size(), S(7));
+ using q20::erase; // For std::vector
auto result = erase(c, V(1));
QCOMPARE(result, S(1));
QCOMPARE(c.size(), S(6));
@@ -771,21 +1000,38 @@ void tst_ContainerApiSymmetry::erase_if_impl() const
auto c = make<Container>(7); // {1, 2, 3, 4, 5, 6, 7}
QCOMPARE(c.size(), S(7));
- auto result = erase_if(c, [](V i) { return Conv::toInt(i) % 2 == 0; });
+ decltype(c.size()) oldSize, count;
+
+ oldSize = c.size();
+ count = 0;
+
+ using q20::erase_if; // For std::vector
+
+ S result = erase_if(c, [&](V i) { ++count; return Conv::toInt(i) % 2 == 0; });
QCOMPARE(result, S(3));
QCOMPARE(c.size(), S(4));
+ QCOMPARE(count, oldSize);
- result = erase_if(c, [](V i) { return Conv::toInt(i) % 123 == 0; });
+ oldSize = c.size();
+ count = 0;
+ result = erase_if(c, [&](V i) { ++count; return Conv::toInt(i) % 123 == 0; });
QCOMPARE(result, S(0));
QCOMPARE(c.size(), S(4));
+ QCOMPARE(count, oldSize);
- result = erase_if(c, [](V i) { return Conv::toInt(i) % 3 == 0; });
+ oldSize = c.size();
+ count = 0;
+ result = erase_if(c, [&](V i) { ++count; return Conv::toInt(i) % 3 == 0; });
QCOMPARE(result, S(1));
QCOMPARE(c.size(), S(3));
+ QCOMPARE(count, oldSize);
- result = erase_if(c, [](V i) { return Conv::toInt(i) % 2 == 1; });
+ oldSize = c.size();
+ count = 0;
+ result = erase_if(c, [&](V i) { ++count; return Conv::toInt(i) % 2 == 1; });
QCOMPARE(result, S(3));
QCOMPARE(c.size(), S(0));
+ QCOMPARE(count, oldSize);
}
template <typename Container>
@@ -837,5 +1083,185 @@ void tst_ContainerApiSymmetry::erase_if_associative_impl() const
QCOMPARE(c.size(), S(0));
}
+template <typename Container>
+void tst_ContainerApiSymmetry::member_erase_impl() const
+{
+ using S = typename Container::size_type;
+ using V = typename Container::value_type;
+ const S size = 7;
+ auto c = make<Container>(size); // {1, 2, 3, 4, 5, 6, 7}
+ QCOMPARE(c.size(), size);
+
+ auto copy = c;
+ // Container::erase() returns an iterator, not const_iterator
+ auto it = c.erase(c.cbegin(), c.cbegin());
+ static_assert(std::is_same_v<decltype(it), typename Container::iterator>);
+ QCOMPARE(c.size(), size);
+ const V newVal{100};
+ QCOMPARE_NE(*it, newVal);
+ *it = newVal;
+ QCOMPARE(it, c.cbegin());
+ QCOMPARE(*c.cbegin(), newVal);
+
+ QCOMPARE(std::find(copy.cbegin(), copy.cend(), newVal), copy.cend());
+}
+
+template <typename Container>
+void tst_ContainerApiSymmetry::member_erase_associative_impl() const
+{
+ using S = typename Container::size_type;
+ using V = typename Container::mapped_type;
+
+ const S size = 20;
+ auto c = makeAssociative<Container>(size);
+ QCOMPARE(c.size(), size);
+
+ // Verify Container::erase() returns iterator, not const_iterator
+ auto it = c.erase(c.cbegin());
+ static_assert(std::is_same_v<decltype(it), typename Container::iterator>);
+ QCOMPARE(c.size(), size - 1);
+ QCOMPARE(it, c.cbegin());
+ const auto current = it.value();
+ it.value() = current + V(5);
+ QCOMPARE(c.cbegin().value(),current + V(5));
+}
+
+template <typename Container>
+void tst_ContainerApiSymmetry::member_erase_set_impl() const
+{
+ using S = typename Container::size_type;
+
+ const S size = 20;
+ auto c = make<Container>(size);
+ QCOMPARE(c.size(), size);
+
+ // Verify Container::erase() returns iterator, not const_iterator
+ auto it = c.erase(c.cbegin());
+ static_assert(std::is_same_v<decltype(it), typename Container::iterator>);
+ QCOMPARE(c.size(), size - 1);
+ QCOMPARE(it, c.cbegin());
+}
+
+template <typename Container>
+void tst_ContainerApiSymmetry::keyValueRange_impl() const
+{
+ constexpr int COUNT = 20;
+
+ using K = typename Container::key_type;
+ using V = typename Container::mapped_type;
+ QVector<K> keys;
+ keys.reserve(COUNT);
+ QVector<V> values;
+ values.reserve(COUNT);
+
+ auto c = makeAssociative<Container>(COUNT);
+ auto returnC = [&](){ return c; };
+
+ const auto verify = [](QVector<K> v, int count, int offset = 0) -> bool {
+ if (v.size() != count)
+ return false;
+ std::sort(v.begin(), v.end());
+ for (int i = 0; i < count; ++i) {
+ // vector is indexed from 0, but makeAssociative starts from 1
+ if (v[i] != i + 1 + offset)
+ return false;
+ }
+ return true;
+ };
+
+ // Check that the range has the right size
+ auto range = c.asKeyValueRange();
+ QCOMPARE(std::distance(range.begin(), range.end()), COUNT);
+
+ auto constRange = std::as_const(c).asKeyValueRange();
+ QCOMPARE(std::distance(constRange.begin(), constRange.end()), COUNT);
+
+ auto rvalueRange = returnC().asKeyValueRange();
+ QCOMPARE(std::distance(rvalueRange.begin(), rvalueRange.end()), COUNT);
+
+ // auto, mutating
+ keys.clear(); values.clear();
+ for (auto [key, value] : c.asKeyValueRange()) {
+ keys << key;
+ values << value;
+ QCOMPARE(key, value);
+ QCOMPARE(c.value(key), value);
+ ++value;
+ QCOMPARE(key, value - 1);
+ QCOMPARE(c.value(key), value);
+ }
+ QVERIFY(verify(keys, COUNT));
+ QVERIFY(verify(values, COUNT));
+
+ // auto, non-mutating
+ keys.clear(); values.clear();
+ for (auto [key, value] : c.asKeyValueRange()) {
+ keys << key;
+ values << value;
+ QCOMPARE(key, value - 1);
+ QCOMPARE(c.value(key), value);
+ }
+ QVERIFY(verify(keys, COUNT));
+ QVERIFY(verify(values, COUNT, 1));
+
+ // auto &&, mutating
+ keys.clear(); values.clear();
+ for (auto &&[key, value] : c.asKeyValueRange()) {
+ keys << key;
+ values << value;
+ QCOMPARE(key, value - 1);
+ QCOMPARE(c.value(key), value);
+ ++value;
+ QCOMPARE(key, value - 2);
+ QCOMPARE(c.value(key), value);
+ }
+ QVERIFY(verify(keys, COUNT));
+ QVERIFY(verify(values, COUNT, 1));
+
+ // auto, non-mutating (const map)
+ keys.clear(); values.clear();
+ for (auto [key, value] : std::as_const(c).asKeyValueRange()) {
+ keys << key;
+ values << value;
+ QCOMPARE(key, value - 2);
+ QCOMPARE(c.value(key), value);
+ }
+ QVERIFY(verify(keys, COUNT));
+ QVERIFY(verify(values, COUNT, 2));
+
+ // auto &&, non-mutating (const map)
+ keys.clear(); values.clear();
+ for (auto &&[key, value] : std::as_const(c).asKeyValueRange()) {
+ keys << key;
+ values << value;
+ QCOMPARE(key, value - 2);
+ QCOMPARE(c.value(key), value);
+ }
+ QVERIFY(verify(keys, COUNT));
+ QVERIFY(verify(values, COUNT, 2));
+
+ // auto, non-mutating (rvalue map)
+ keys.clear(); values.clear();
+ for (auto [key, value] : returnC().asKeyValueRange()) {
+ keys << key;
+ values << value;
+ QCOMPARE(key, value - 2);
+ QCOMPARE(c.value(key), value);
+ }
+ QVERIFY(verify(keys, COUNT));
+ QVERIFY(verify(values, COUNT, 2));
+
+ // auto &&, non-mutating (rvalue map)
+ keys.clear(); values.clear();
+ for (auto &&[key, value] : returnC().asKeyValueRange()) {
+ keys << key;
+ values << value;
+ QCOMPARE(key, value - 2);
+ QCOMPARE(c.value(key), value);
+ }
+ QVERIFY(verify(keys, COUNT));
+ QVERIFY(verify(values, COUNT, 2));
+}
+
QTEST_APPLESS_MAIN(tst_ContainerApiSymmetry)
#include "tst_containerapisymmetry.moc"
diff --git a/tests/auto/corelib/tools/qalgorithms/CMakeLists.txt b/tests/auto/corelib/tools/qalgorithms/CMakeLists.txt
index d793c81ce6..9e87144a4c 100644
--- a/tests/auto/corelib/tools/qalgorithms/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qalgorithms/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qalgorithms.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qalgorithms Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qalgorithms LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qalgorithms
SOURCES
tst_qalgorithms.cpp
diff --git a/tests/auto/corelib/tools/qalgorithms/tst_qalgorithms.cpp b/tests/auto/corelib/tools/qalgorithms/tst_qalgorithms.cpp
index 0b921ffdbe..8d68a7a270 100644
--- a/tests/auto/corelib/tools/qalgorithms/tst_qalgorithms.cpp
+++ b/tests/auto/corelib/tools/qalgorithms/tst_qalgorithms.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 "../../../../../src/corelib/tools/qalgorithms.h"
#include <QTest>
@@ -95,6 +70,18 @@ private:
void countLeading_impl();
};
+template <typename T> struct PrintIfFailed
+{
+ T value;
+ PrintIfFailed(T v) : value(v) {}
+ ~PrintIfFailed()
+ {
+ if (!QTest::currentTestFailed())
+ return;
+ qWarning() << "Original value was" << Qt::hex << Qt::showbase << T(value);
+ }
+};
+
void tst_QAlgorithms::swap()
{
{
@@ -274,23 +261,26 @@ void tst_QAlgorithms::popCount_data_impl(size_t sizeof_T_Int)
const uint bits = bitsSetInByte(byte);
const quint64 value = static_cast<quint64>(byte);
const quint64 input = value << ((i % sizeof_T_Int) * 8U);
- QTest::addRow("0x%016llx", input) << input << bits;
+ QTest::addRow("%u-bits", i) << input << bits;
}
// and some random ones:
- if (sizeof_T_Int >= 8)
+ if (sizeof_T_Int >= 8) {
for (size_t i = 0; i < 1000; ++i) {
const quint64 input = QRandomGenerator::global()->generate64();
- QTest::addRow("0x%016llx", input) << input << bitsSetInInt64(input);
+ QTest::addRow("random-%zu", i) << input << bitsSetInInt64(input);
}
- else if (sizeof_T_Int >= 2)
- for (size_t i = 0; i < 1000 ; ++i) {
- const quint32 input = QRandomGenerator::global()->generate();
- if (sizeof_T_Int >= 4)
- QTest::addRow("0x%08x", input) << quint64(input) << bitsSetInInt(input);
- else
- QTest::addRow("0x%04x", quint16(input & 0xFFFF)) << quint64(input & 0xFFFF) << bitsSetInShort(input & 0xFFFF);
+ } else if (sizeof_T_Int >= 2) {
+ for (size_t i = 0; i < 1000 ; ++i) {
+ const quint32 input = QRandomGenerator::global()->generate();
+ if (sizeof_T_Int >= 4) {
+ QTest::addRow("random-%zu", i) << quint64(input) << bitsSetInInt(input);
+ } else {
+ QTest::addRow("random-%zu", i)
+ << quint64(input & 0xFFFF) << bitsSetInShort(input & 0xFFFF);
}
+ }
+ }
}
template <typename T_Int>
@@ -300,22 +290,23 @@ void tst_QAlgorithms::popCount_impl()
QFETCH(uint, expected);
const T_Int value = static_cast<T_Int>(input);
-
+ PrintIfFailed pf(value);
QCOMPARE(qPopulationCount(value), expected);
}
+// Number of test-cases per offset into each size (arbitrary):
+static constexpr int casesPerOffset = 3;
+
void tst_QAlgorithms::countTrailing_data_impl(size_t sizeof_T_Int)
{
using namespace QTest;
addColumn<quint64>("input");
addColumn<uint>("expected");
- int nibs = sizeof_T_Int*2;
-
- newRow(("0x"+QByteArray::number(0,16).rightJustified(nibs,'0')).constData()) << Q_UINT64_C(0) << uint(sizeof_T_Int*8);
+ addRow("0") << Q_UINT64_C(0) << uint(sizeof_T_Int*8);
for (uint i = 0; i < sizeof_T_Int*8; ++i) {
const quint64 input = Q_UINT64_C(1) << i;
- newRow(("0x"+QByteArray::number(input,16).rightJustified(nibs,'0')).constData()) << input << i;
+ addRow("bit-%u", i) << input << i;
}
quint64 type_mask;
@@ -326,12 +317,12 @@ void tst_QAlgorithms::countTrailing_data_impl(size_t sizeof_T_Int)
// and some random ones:
for (uint i = 0; i < sizeof_T_Int*8; ++i) {
- for (uint j = 0; j < sizeof_T_Int*3; ++j) { // 3 is arbitrary
+ const quint64 b = Q_UINT64_C(1) << i;
+ const quint64 mask = ((~(b - 1)) ^ b) & type_mask;
+ for (uint j = 0; j < sizeof_T_Int * casesPerOffset; ++j) {
const quint64 r = QRandomGenerator::global()->generate64();
- const quint64 b = Q_UINT64_C(1) << i;
- const quint64 mask = ((~(b-1)) ^ b) & type_mask;
const quint64 input = (r&mask) | b;
- newRow(("0x"+QByteArray::number(input,16).rightJustified(nibs,'0')).constData()) << input << i;
+ addRow("%u-bits-random-%u", i, j) << input << i;
}
}
}
@@ -343,7 +334,7 @@ void tst_QAlgorithms::countTrailing_impl()
QFETCH(uint, expected);
const T_Int value = static_cast<T_Int>(input);
-
+ PrintIfFailed pf(value);
QCOMPARE(qCountTrailingZeroBits(value), expected);
}
@@ -353,22 +344,20 @@ void tst_QAlgorithms::countLeading_data_impl(size_t sizeof_T_Int)
addColumn<quint64>("input");
addColumn<uint>("expected");
- int nibs = sizeof_T_Int*2;
-
- newRow(("0x"+QByteArray::number(0,16).rightJustified(nibs,'0')).constData()) << Q_UINT64_C(0) << uint(sizeof_T_Int*8);
+ addRow("0") << Q_UINT64_C(0) << uint(sizeof_T_Int*8);
for (uint i = 0; i < sizeof_T_Int*8; ++i) {
const quint64 input = Q_UINT64_C(1) << i;
- newRow(("0x"+QByteArray::number(input,16).rightJustified(nibs,'0')).constData()) << input << uint(sizeof_T_Int*8-i-1);
+ addRow("bit-%u", i) << input << uint(sizeof_T_Int*8-i-1);
}
// and some random ones:
for (uint i = 0; i < sizeof_T_Int*8; ++i) {
- for (uint j = 0; j < sizeof_T_Int*3; ++j) { // 3 is arbitrary
+ const quint64 b = Q_UINT64_C(1) << i;
+ const quint64 mask = b - 1;
+ for (uint j = 0; j < sizeof_T_Int * casesPerOffset; ++j) {
const quint64 r = QRandomGenerator::global()->generate64();
- const quint64 b = Q_UINT64_C(1) << i;
- const quint64 mask = b-1;
const quint64 input = (r&mask) | b;
- newRow(("0x"+QByteArray::number(input,16).rightJustified(nibs,'0')).constData()) << input << uint(sizeof_T_Int*8-i-1);
+ addRow("%u-bits-random-%u", i, j) << input << uint(sizeof_T_Int*8-i-1);
}
}
}
@@ -380,7 +369,7 @@ void tst_QAlgorithms::countLeading_impl()
QFETCH(uint, expected);
const T_Int value = static_cast<T_Int>(input);
-
+ PrintIfFailed pf(value);
QCOMPARE(qCountLeadingZeroBits(value), expected);
}
diff --git a/tests/auto/corelib/tools/qarraydata/CMakeLists.txt b/tests/auto/corelib/tools/qarraydata/CMakeLists.txt
index 4a2f9d0d6a..1d84630de2 100644
--- a/tests/auto/corelib/tools/qarraydata/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qarraydata/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qarraydata.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qarraydata Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qarraydata LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qarraydata
EXCEPTIONS
SOURCES
diff --git a/tests/auto/corelib/tools/qarraydata/simplevector.h b/tests/auto/corelib/tools/qarraydata/simplevector.h
index 1fc5e9b8e1..b92cd4a887 100644
--- a/tests/auto/corelib/tools/qarraydata/simplevector.h
+++ b/tests/auto/corelib/tools/qarraydata/simplevector.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef QARRAY_TEST_SIMPLE_VECTOR_H
@@ -32,6 +7,7 @@
#include <QtCore/qarraydata.h>
#include <QtCore/qarraydatapointer.h>
+#include <QtCore/qvarlengtharray.h>
#include <algorithm>
@@ -52,7 +28,7 @@ public:
}
explicit SimpleVector(size_t n, bool capacityReserved = false)
- : d(Data::allocate(n))
+ : d(n)
{
if (n)
d->appendInitialize(n);
@@ -61,7 +37,7 @@ public:
}
SimpleVector(size_t n, const T &t, bool capacityReserved = false)
- : d(Data::allocate(n))
+ : d(n)
{
if (n)
d->copyAppend(n, t);
@@ -70,7 +46,7 @@ public:
}
SimpleVector(const T *begin, const T *end, bool capacityReserved = false)
- : d(Data::allocate(end - begin))
+ : d(end - begin)
{
if (end - begin)
d->copyAppend(begin, end);
@@ -83,11 +59,6 @@ public:
{
}
- explicit SimpleVector(QPair<Data*, T*> ptr, size_t len = 0)
- : d(ptr, len)
- {
- }
-
SimpleVector(const QArrayDataPointer<T> &other)
: d(other)
{
@@ -159,7 +130,7 @@ public:
}
}
- SimpleVector detached(Data::allocate(qMax(n, size())));
+ SimpleVector detached(DataPointer(qMax(n, size())));
if (size()) {
detached.d->copyAppend(constBegin(), constEnd());
detached.d->setFlag(QArrayData::CapacityReserved);
@@ -173,7 +144,7 @@ public:
return;
if (d->needsDetach() || newSize > capacity()) {
- SimpleVector detached(Data::allocate(d->detachCapacity(newSize)));
+ SimpleVector detached(DataPointer(d->detachCapacity(newSize)));
if (newSize) {
if (newSize < size()) {
const T *const begin = constBegin();
@@ -247,7 +218,7 @@ public:
const T *const end = begin + d->size;
if (d->needsDetach()) {
- SimpleVector detached(Data::allocate(d->detachCapacity(size() - (last - first))));
+ SimpleVector detached(DataPointer(d->detachCapacity(size() - (last - first))));
if (first != begin)
detached.d->copyAppend(begin, first);
detached.d->copyAppend(last, end);
diff --git a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp
index 6d51039d02..e7a84d57ee 100644
--- a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp
+++ b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QTest>
#include <QtCore/QString>
@@ -131,8 +107,8 @@ void tst_QArrayData::simpleVector()
SimpleVector<int> v4(nullptr, data, 0);
SimpleVector<int> v5(nullptr, data, 1);
SimpleVector<int> v6(nullptr, data, 7);
- SimpleVector<int> v7(10, 5);
- SimpleVector<int> v8(array, array + sizeof(array)/sizeof(*array));
+ const SimpleVector<int> v7(10, 5);
+ const SimpleVector<int> v8(array, array + sizeof(array)/sizeof(*array));
v3 = v1;
v1.swap(v3);
@@ -260,7 +236,7 @@ void tst_QArrayData::simpleVector()
{
int count = 0;
- Q_FOREACH (int value, v7) {
+ for (int value : v7) {
QCOMPARE(value, 5);
++count;
}
@@ -270,7 +246,7 @@ void tst_QArrayData::simpleVector()
{
int count = 0;
- Q_FOREACH (int value, v8) {
+ for (int value : v8) {
QCOMPARE(value, count);
++count;
}
@@ -508,7 +484,7 @@ void tst_QArrayData::allocate()
keeper.headers.append(data);
if (grow)
- QVERIFY(data->allocatedCapacity() > capacity);
+ QCOMPARE_GE(data->allocatedCapacity(), capacity);
else
QCOMPARE(data->allocatedCapacity(), capacity);
@@ -1140,8 +1116,7 @@ void tst_QArrayData::arrayOpsExtra()
const auto cloneArrayDataPointer = [] (auto &dataPointer, size_t capacity) {
using ArrayPointer = std::decay_t<decltype(dataPointer)>;
- using Type = std::decay_t<typename ArrayPointer::parameter_type>;
- ArrayPointer copy(QTypedArrayData<Type>::allocate(qsizetype(capacity)));
+ ArrayPointer copy{qsizetype(capacity)};
copy->copyAppend(dataPointer.begin(), dataPointer.end());
return copy;
};
@@ -2061,7 +2036,7 @@ void tst_QArrayData::dataPointerAllocate()
const auto createDataPointer = [] (qsizetype capacity, auto initValue) {
using Type = std::decay_t<decltype(initValue)>;
Q_UNUSED(initValue);
- return QArrayDataPointer<Type>(QTypedArrayData<Type>::allocate(capacity));
+ return QArrayDataPointer<Type>(capacity);
};
const auto testRealloc = [&] (qsizetype capacity, qsizetype newSize, auto initValue) {
@@ -2477,7 +2452,7 @@ void tst_QArrayData::relocateWithExceptions()
};
const auto createDataPointer = [](qsizetype capacity, qsizetype initSize) {
- QArrayDataPointer<ThrowingType> qadp(QTypedArrayData<ThrowingType>::allocate(capacity));
+ QArrayDataPointer<ThrowingType> qadp(capacity);
qadp->appendInitialize(initSize);
int i = 0;
std::generate(qadp.begin(), qadp.end(), [&i]() { return ThrowingType(i++); });
diff --git a/tests/auto/corelib/tools/qatomicscopedvaluerollback/CMakeLists.txt b/tests/auto/corelib/tools/qatomicscopedvaluerollback/CMakeLists.txt
new file mode 100644
index 0000000000..b20e56421f
--- /dev/null
+++ b/tests/auto/corelib/tools/qatomicscopedvaluerollback/CMakeLists.txt
@@ -0,0 +1,13 @@
+# 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_qatomicscopedvaluerollback LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qatomicscopedvaluerollback
+ SOURCES
+ tst_qatomicscopedvaluerollback.cpp
+)
diff --git a/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp b/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp
new file mode 100644
index 0000000000..89bd1d7ff6
--- /dev/null
+++ b/tests/auto/corelib/tools/qatomicscopedvaluerollback/tst_qatomicscopedvaluerollback.cpp
@@ -0,0 +1,164 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/qatomicscopedvaluerollback.h>
+
+#include <QTest>
+
+class tst_QAtomicScopedValueRollback : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void leavingScope();
+ void leavingScopeAfterCommit();
+ void rollbackToPreviousCommit();
+ void exceptions();
+ void earlyExitScope();
+private:
+ void earlyExitScope_helper(int exitpoint, std::atomic<int> &member);
+};
+
+void tst_QAtomicScopedValueRollback::leavingScope()
+{
+ QAtomicInt i = 0;
+ QBasicAtomicInteger<bool> b = false;
+ std::atomic<bool> b2 = false;
+ int x = 0, y = 42;
+ QBasicAtomicPointer<int> p = &x;
+
+ //test rollback on going out of scope
+ {
+ QAtomicScopedValueRollback ri(i);
+ QAtomicScopedValueRollback rb(b);
+ QAtomicScopedValueRollback rb2(b2, true);
+ QAtomicScopedValueRollback rp(p);
+ QCOMPARE(b.loadRelaxed(), false);
+ QCOMPARE(b2, true);
+ QCOMPARE(i.loadRelaxed(), 0);
+ QCOMPARE(p.loadRelaxed(), &x);
+ b.storeRelaxed(true);
+ i.storeRelaxed(1);
+ p.storeRelaxed(&y);
+ QCOMPARE(b.loadRelaxed(), true);
+ QCOMPARE(i.loadRelaxed(), 1);
+ QCOMPARE(p.loadRelaxed(), &y);
+ }
+ QCOMPARE(b.loadRelaxed(), false);
+ QCOMPARE(b2, false);
+ QCOMPARE(i.loadRelaxed(), 0);
+ QCOMPARE(p.loadRelaxed(), &x);
+}
+
+void tst_QAtomicScopedValueRollback::leavingScopeAfterCommit()
+{
+ std::atomic<int> i = 0;
+ QAtomicInteger<bool> b = false;
+
+ //test rollback on going out of scope
+ {
+ QAtomicScopedValueRollback ri(i);
+ QAtomicScopedValueRollback rb(b);
+ QCOMPARE(b.loadRelaxed(), false);
+ QCOMPARE(i, 0);
+ b.storeRelaxed(true);
+ i = 1;
+ QCOMPARE(b.loadRelaxed(), true);
+ QCOMPARE(i, 1);
+ ri.commit();
+ rb.commit();
+ }
+ QCOMPARE(b.loadRelaxed(), true);
+ QCOMPARE(i, 1);
+}
+
+void tst_QAtomicScopedValueRollback::rollbackToPreviousCommit()
+{
+ QBasicAtomicInt i = 0;
+ {
+ QAtomicScopedValueRollback ri(i);
+ i++;
+ ri.commit();
+ i++;
+ }
+ QCOMPARE(i.loadRelaxed(), 1);
+ {
+ QAtomicScopedValueRollback ri1(i);
+ i++;
+ ri1.commit();
+ i++;
+ ri1.commit();
+ i++;
+ }
+ QCOMPARE(i.loadRelaxed(), 3);
+}
+
+void tst_QAtomicScopedValueRollback::exceptions()
+{
+ std::atomic<bool> b = false;
+ bool caught = false;
+ QT_TRY
+ {
+ QAtomicScopedValueRollback rb(b);
+ b = true;
+ QT_THROW(std::bad_alloc()); //if Qt compiled without exceptions this is noop
+ rb.commit(); //if Qt compiled without exceptions, true is committed
+ }
+ QT_CATCH(...)
+ {
+ caught = true;
+ }
+ QCOMPARE(b, !caught); //expect false if exception was thrown, true otherwise
+}
+
+void tst_QAtomicScopedValueRollback::earlyExitScope()
+{
+ QAtomicInt ai = 0;
+ std::atomic<int> aj = 0;
+ while (true) {
+ QAtomicScopedValueRollback ri(ai);
+ ++ai;
+ aj = ai.loadRelaxed();
+ if (ai.loadRelaxed() > 8) break;
+ ri.commit();
+ }
+ QCOMPARE(ai.loadRelaxed(), 8);
+ QCOMPARE(aj.load(), 9);
+
+ for (int i = 0; i < 5; ++i) {
+ aj = 1;
+ earlyExitScope_helper(i, aj);
+ QCOMPARE(aj.load(), 1 << i);
+ }
+}
+
+static void operator*=(std::atomic<int> &lhs, int rhs)
+{
+ int expected = lhs.load();
+ while (!lhs.compare_exchange_weak(expected, expected * rhs))
+ ;
+}
+
+void tst_QAtomicScopedValueRollback::earlyExitScope_helper(int exitpoint, std::atomic<int>& member)
+{
+ QAtomicScopedValueRollback r(member);
+ member *= 2;
+ if (exitpoint == 0)
+ return;
+ r.commit();
+ member *= 2;
+ if (exitpoint == 1)
+ return;
+ r.commit();
+ member *= 2;
+ if (exitpoint == 2)
+ return;
+ r.commit();
+ member *= 2;
+ if (exitpoint == 3)
+ return;
+ r.commit();
+}
+
+QTEST_MAIN(tst_QAtomicScopedValueRollback)
+#include "tst_qatomicscopedvaluerollback.moc"
diff --git a/tests/auto/corelib/tools/qbitarray/CMakeLists.txt b/tests/auto/corelib/tools/qbitarray/CMakeLists.txt
index 37e7a873e8..802d647abb 100644
--- a/tests/auto/corelib/tools/qbitarray/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qbitarray/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qbitarray.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qbitarray Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qbitarray LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qbitarray
SOURCES
tst_qbitarray.cpp
diff --git a/tests/auto/corelib/tools/qbitarray/tst_qbitarray.cpp b/tests/auto/corelib/tools/qbitarray/tst_qbitarray.cpp
index 263083972c..5fcf444485 100644
--- a/tests/auto/corelib/tools/qbitarray/tst_qbitarray.cpp
+++ b/tests/auto/corelib/tools/qbitarray/tst_qbitarray.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 <QTest>
#include <QtCore/QBuffer>
@@ -32,16 +7,19 @@
#include "qbitarray.h"
+#include <QtCore/qelapsedtimer.h>
+#include <QtCore/qscopeguard.h>
+
/**
* Helper function to initialize a bitarray from a string
*/
static QBitArray QStringToQBitArray(const QString &str)
{
QBitArray ba;
- ba.resize(str.length());
+ ba.resize(str.size());
int i;
QChar tru('1');
- for (i = 0; i < str.length(); i++)
+ for (i = 0; i < str.size(); i++)
{
if (str.at(i) == tru)
{
@@ -51,10 +29,17 @@ static QBitArray QStringToQBitArray(const QString &str)
return ba;
}
+static QBitArray detached(QBitArray a)
+{
+ a.detach();
+ return a;
+}
+
class tst_QBitArray : public QObject
{
Q_OBJECT
private slots:
+ void canHandleIntMaxBits();
void size_data();
void size();
void countBits_data();
@@ -68,12 +53,21 @@ private slots:
// operator &=
void operator_andeq_data();
void operator_andeq();
+ // operator &
+ void operator_and_data() { operator_andeq_data(); }
+ void operator_and();
// operator |=
void operator_oreq_data();
void operator_oreq();
+ // operator |
+ void operator_or_data() { operator_oreq_data(); }
+ void operator_or();
// operator ^=
void operator_xoreq_data();
void operator_xoreq();
+ // operator ^
+ void operator_xor_data() { operator_xoreq_data(); }
+ void operator_xor();
// operator ~
void operator_neg_data();
void operator_neg();
@@ -91,6 +85,54 @@ private slots:
void toUInt32();
};
+void tst_QBitArray::canHandleIntMaxBits()
+{
+ QElapsedTimer timer;
+ timer.start();
+ const auto print = qScopeGuard([&] {
+ qDebug("Function took %lldms", qlonglong(timer.elapsed()));
+ });
+
+ try {
+ constexpr qsizetype Size1 = sizeof(void*) > sizeof(int) ? qsizetype(INT_MAX) + 2 :
+ INT_MAX - 2;
+ constexpr qsizetype Size2 = Size1 + 2;
+
+ QBitArray ba(Size1, true);
+ QCOMPARE(ba.size(), Size1);
+ QCOMPARE(ba.at(Size1 - 1), true);
+
+ ba.resize(Size2);
+ QCOMPARE(ba.size(), Size2);
+ QCOMPARE(ba.at(Size1 - 1), true);
+ QCOMPARE(ba.at(Size1), false);
+ QCOMPARE(ba.at(Size2 - 1), false);
+
+ QByteArray serialized;
+ if constexpr (sizeof(void*) > sizeof(int)) {
+ QDataStream ds(&serialized, QIODevice::WriteOnly);
+ ds.setVersion(QDataStream::Qt_5_15);
+ ds << ba;
+ QCOMPARE(ds.status(), QDataStream::Status::SizeLimitExceeded);
+ serialized.clear();
+ }
+ {
+ QDataStream ds(&serialized, QIODevice::WriteOnly);
+ ds << ba;
+ QCOMPARE(ds.status(), QDataStream::Status::Ok);
+ }
+ {
+ QDataStream ds(serialized);
+ QBitArray ba2;
+ ds >> ba2;
+ QCOMPARE(ds.status(), QDataStream::Status::Ok);
+ QCOMPARE(ba, ba2);
+ }
+ } catch (const std::bad_alloc &) {
+ QSKIP("Failed to allocate sufficient memory");
+ }
+}
+
void tst_QBitArray::size_data()
{
//create the testtable instance and define the elements
@@ -150,7 +192,6 @@ void tst_QBitArray::countBits_data()
QTest::newRow("11111111111111111111111111111111") << QString("11111111111111111111111111111111") << 32 << 32;
QTest::newRow("11111111111111111111111111111111111111111111111111111111")
<< QString("11111111111111111111111111111111111111111111111111111111") << 56 << 56;
- QTest::newRow("00000000000000000000000000000000000") << QString("00000000000000000000000000000000000") << 35 << 0;
QTest::newRow("00000000000000000000000000000000") << QString("00000000000000000000000000000000") << 32 << 0;
QTest::newRow("00000000000000000000000000000000000000000000000000000000")
<< QString("00000000000000000000000000000000000000000000000000000000") << 56 << 0;
@@ -168,6 +209,8 @@ void tst_QBitArray::countBits()
bits.setBit(i);
}
+ QCOMPARE(bits.size(), numBits);
+ // NOLINTNEXTLINE(qt-port-to-std-compatible-api): We want to test count() and size()
QCOMPARE(bits.count(), numBits);
QCOMPARE(bits.count(true), onBits);
QCOMPARE(bits.count(false), numBits - onBits);
@@ -325,9 +368,64 @@ void tst_QBitArray::operator_andeq()
QFETCH(QBitArray, input2);
QFETCH(QBitArray, res);
- input1&=input2;
+ QBitArray result = input1;
+ result &= input2;
+ QCOMPARE(result, res);
+ result = input1;
+ result &= std::move(input2);
+ QCOMPARE(result, res);
+ result = input1;
+ result &= detached(input2);
+ QCOMPARE(result, res);
+
+ // operation is commutative
+ result = input2;
+ result &= input1;
+ QCOMPARE(result, res);
+ result = input2;
+ result &= std::move(input1);
+ QCOMPARE(result, res);
+ result = input2;
+ result &= detached(input1);
+ QCOMPARE(result, res);
+
+ // operation is idempotent
+ result &= result;
+ QCOMPARE(result, res);
+ result &= std::move(result);
+ QCOMPARE(result, res);
+ result &= detached(result);
+ QCOMPARE(result, res);
+}
- QCOMPARE(input1, res);
+void tst_QBitArray::operator_and()
+{
+ QFETCH(QBitArray, input1);
+ QFETCH(QBitArray, input2);
+ QFETCH(QBitArray, res);
+
+ QBitArray result = input1 & input2;
+ QCOMPARE(result, res);
+ result = input1 & QBitArray(input2);
+ QCOMPARE(result, res);
+ result = input1 & detached(input2);
+ QCOMPARE(result, res);
+
+ // operation is commutative
+ result = input2 & input1;
+ QCOMPARE(result, res);
+ result = input2 & QBitArray(input1);
+ QCOMPARE(result, res);
+ result = input2 & detached(input1);
+ QCOMPARE(result, res);
+
+ // operation is idempotent
+ result = result & result;
+ QCOMPARE(result, res);
+ result = result & QBitArray(result);
+ QCOMPARE(result, res);
+ result = result & detached(result);
+ QCOMPARE(result, res);
}
void tst_QBitArray::operator_oreq_data()
@@ -376,9 +474,64 @@ void tst_QBitArray::operator_oreq()
QFETCH(QBitArray, input2);
QFETCH(QBitArray, res);
- input1|=input2;
+ QBitArray result = input1;
+ result |= input2;
+ QCOMPARE(result, res);
+ result = input1;
+ result |= QBitArray(input2);
+ QCOMPARE(result, res);
+ result = input1;
+ result |= detached(input2);
+ QCOMPARE(result, res);
+
+ // operation is commutative
+ result = input2;
+ result |= input1;
+ QCOMPARE(result, res);
+ result = input2;
+ result |= QBitArray(input1);
+ QCOMPARE(result, res);
+ result = input2;
+ result |= detached(input1);
+ QCOMPARE(result, res);
+
+ // operation is idempotent
+ result |= result;
+ QCOMPARE(result, res);
+ result |= QBitArray(result);
+ QCOMPARE(result, res);
+ result |= detached(result);
+ QCOMPARE(result, res);
+}
- QCOMPARE(input1, res);
+void tst_QBitArray::operator_or()
+{
+ QFETCH(QBitArray, input1);
+ QFETCH(QBitArray, input2);
+ QFETCH(QBitArray, res);
+
+ QBitArray result = input1 | input2;
+ QCOMPARE(result, res);
+ result = input1 | QBitArray(input2);
+ QCOMPARE(result, res);
+ result = input1 | detached(input2);
+ QCOMPARE(result, res);
+
+ // operation is commutative
+ result = input2 | input1;
+ QCOMPARE(result, res);
+ result = input2 | QBitArray(input1);
+ QCOMPARE(result, res);
+ result = input2 | detached(input1);
+ QCOMPARE(result, res);
+
+ // operation is idempotent
+ result = result | result;
+ QCOMPARE(result, res);
+ result = result | QBitArray(result);
+ QCOMPARE(result, res);
+ result = result | detached(result);
+ QCOMPARE(result, res);
}
void tst_QBitArray::operator_xoreq_data()
@@ -425,11 +578,102 @@ void tst_QBitArray::operator_xoreq()
QFETCH(QBitArray, input2);
QFETCH(QBitArray, res);
- input1^=input2;
-
- QCOMPARE(input1, res);
+ QBitArray result = input1;
+ result ^= input2;
+ QCOMPARE(result, res);
+ result = input1;
+ result ^= QBitArray(input2);
+ QCOMPARE(result, res);
+ result = input1;
+ result ^= detached(input2);
+ QCOMPARE(result, res);
+
+ // operation is commutative
+ result = input2;
+ result ^= input1;
+ QCOMPARE(result, res);
+ result = input2;
+ result ^= QBitArray(input1);
+ QCOMPARE(result, res);
+ result = input2;
+ result ^= detached(input1);
+ QCOMPARE(result, res);
+
+ // XORing with oneself is nilpotent
+ result = input1;
+ result ^= input1;
+ QCOMPARE(result, QBitArray(input1.size()));
+ result = input1;
+ result ^= QBitArray(result);
+ QCOMPARE(result, QBitArray(input1.size()));
+ result = input1;
+ result ^= detached(result);
+ QCOMPARE(result, QBitArray(input1.size()));
+
+ result = input2;
+ result ^= input2;
+ QCOMPARE(result, QBitArray(input2.size()));
+ result = input2;
+ result ^= QBitArray(input2);
+ QCOMPARE(result, QBitArray(input2.size()));
+ result = input2;
+ result ^= detached(input2);
+ QCOMPARE(result, QBitArray(input2.size()));
+
+ result = res;
+ result ^= res;
+ QCOMPARE(result, QBitArray(res.size()));
+ result = res;
+ result ^= QBitArray(res);
+ QCOMPARE(result, QBitArray(res.size()));
+ result = res;
+ result ^= detached(res);
+ QCOMPARE(result, QBitArray(res.size()));
}
+void tst_QBitArray::operator_xor()
+{
+ QFETCH(QBitArray, input1);
+ QFETCH(QBitArray, input2);
+ QFETCH(QBitArray, res);
+
+ QBitArray result = input1 ^ input2;
+ QCOMPARE(result, res);
+ result = input1 ^ QBitArray(input2);
+ QCOMPARE(result, res);
+ result = input1 ^ detached(input2);
+ QCOMPARE(result, res);
+
+ // operation is commutative
+ result = input2 ^ input1;
+ QCOMPARE(result, res);
+ result = input2 ^ QBitArray(input1);
+ QCOMPARE(result, res);
+ result = input2 ^ detached(input1);
+ QCOMPARE(result, res);
+
+ // XORing with oneself is nilpotent
+ result = input1 ^ input1;
+ QCOMPARE(result, QBitArray(input1.size()));
+ result = input1 ^ QBitArray(input1);
+ QCOMPARE(result, QBitArray(input1.size()));
+ result = input1 ^ detached(input1);
+ QCOMPARE(result, QBitArray(input1.size()));
+
+ result = input2 ^ input2;
+ QCOMPARE(result, QBitArray(input2.size()));
+ result = input2 ^ QBitArray(input2);
+ QCOMPARE(result, QBitArray(input2.size()));
+ result = input2 ^ detached(input2);
+ QCOMPARE(result, QBitArray(input2.size()));
+
+ result = res ^ res;
+ QCOMPARE(result, QBitArray(res.size()));
+ result = res ^ QBitArray(res);
+ QCOMPARE(result, QBitArray(res.size()));
+ result = res ^ detached(res);
+ QCOMPARE(result, QBitArray(res.size()));
+}
void tst_QBitArray::operator_neg_data()
{
@@ -478,6 +722,7 @@ void tst_QBitArray::operator_neg()
input = ~input;
QCOMPARE(input, res);
+ QCOMPARE(~~input, res); // performs two in-place negations
}
void tst_QBitArray::datastream_data()
@@ -497,7 +742,6 @@ void tst_QBitArray::datastream_data()
QTest::newRow("11111111111111111111111111111111") << QString("11111111111111111111111111111111") << 32 << 32;
QTest::newRow("11111111111111111111111111111111111111111111111111111111")
<< QString("11111111111111111111111111111111111111111111111111111111") << 56 << 56;
- QTest::newRow("00000000000000000000000000000000000") << QString("00000000000000000000000000000000000") << 35 << 0;
QTest::newRow("00000000000000000000000000000000") << QString("00000000000000000000000000000000") << 32 << 0;
QTest::newRow("00000000000000000000000000000000000000000000000000000000")
<< QString("00000000000000000000000000000000000000000000000000000000") << 56 << 0;
@@ -519,7 +763,7 @@ void tst_QBitArray::datastream()
bits.setBit(i);
}
- QCOMPARE(bits.count(), numBits);
+ QCOMPARE(bits.size(), numBits);
QCOMPARE(bits.count(true), onBits);
QCOMPARE(bits.count(false), numBits - onBits);
@@ -534,7 +778,7 @@ void tst_QBitArray::datastream()
QBitArray array1, array2, array3;
stream2 >> array1 >> array2 >> array3;
- QCOMPARE(array1.count(), numBits);
+ QCOMPARE(array1.size(), numBits);
QCOMPARE(array1.count(true), onBits);
QCOMPARE(array1.count(false), numBits - onBits);
diff --git a/tests/auto/corelib/tools/qcache/CMakeLists.txt b/tests/auto/corelib/tools/qcache/CMakeLists.txt
index 5ed12a7973..8ffe942d70 100644
--- a/tests/auto/corelib/tools/qcache/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qcache/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qcache.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcache Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcache LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcache
SOURCES
tst_qcache.cpp
diff --git a/tests/auto/corelib/tools/qcache/tst_qcache.cpp b/tests/auto/corelib/tools/qcache/tst_qcache.cpp
index beae524a58..5fccb8f1d0 100644
--- a/tests/auto/corelib/tools/qcache/tst_qcache.cpp
+++ b/tests/auto/corelib/tools/qcache/tst_qcache.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 <QTest>
@@ -490,6 +465,7 @@ struct TrivialHashType {
};
quint64 qHash(TrivialHashType t, size_t seed = 0)
{
+ Q_UNUSED(seed);
return t.hash;
}
diff --git a/tests/auto/corelib/tools/qcommandlineparser/CMakeLists.txt b/tests/auto/corelib/tools/qcommandlineparser/CMakeLists.txt
index f25766164a..5aa8bd2500 100644
--- a/tests/auto/corelib/tools/qcommandlineparser/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qcommandlineparser/CMakeLists.txt
@@ -1,7 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qcommandlineparser Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcommandlineparser LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcommandlineparser
SOURCES
tst_qcommandlineparser.cpp
diff --git a/tests/auto/corelib/tools/qcommandlineparser/testhelper/CMakeLists.txt b/tests/auto/corelib/tools/qcommandlineparser/testhelper/CMakeLists.txt
index 2068f988dd..20cec30a9c 100644
--- a/tests/auto/corelib/tools/qcommandlineparser/testhelper/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qcommandlineparser/testhelper/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qcommandlineparser_test_helper.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qcommandlineparser_test_helper Binary:
diff --git a/tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.cpp b/tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.cpp
index dd4235ca40..b5f178a3d1 100644
--- a/tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.cpp
+++ b/tests/auto/corelib/tools/qcommandlineparser/testhelper/qcommandlineparser_test_helper.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 David Faure <faure@kde.org>
-** 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) 2013 David Faure <faure@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QCoreApplication>
diff --git a/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp b/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp
index 55206173e3..812cf2d1b3 100644
--- a/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp
+++ b/tests/auto/corelib/tools/qcommandlineparser/tst_qcommandlineparser.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 David Faure <faure@kde.org>
-** Copyright (C) 2021 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) 2021 David Faure <faure@kde.org>
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#if QT_CONFIG(process)
@@ -151,6 +126,7 @@ void tst_QCommandLineParser::testBooleanOption()
QVERIFY(parser.parse(args));
QCOMPARE(parser.optionNames(), expectedOptionNames);
QCOMPARE(parser.isSet("b"), expectedIsSet);
+ QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: option not expecting values: \"b\"");
QCOMPARE(parser.values("b"), QStringList());
QCOMPARE(parser.positionalArguments(), QStringList());
// Should warn on typos
@@ -188,6 +164,7 @@ void tst_QCommandLineParser::testOptionsAndPositional()
QVERIFY(parser.parse(args));
QCOMPARE(parser.optionNames(), expectedOptionNames);
QCOMPARE(parser.isSet("b"), expectedIsSet);
+ QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: option not expecting values: \"b\"");
QCOMPARE(parser.values("b"), QStringList());
QCOMPARE(parser.positionalArguments(), expectedPositionalArguments);
}
@@ -386,6 +363,7 @@ void tst_QCommandLineParser::testProcessNotCalled()
QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: call process() or parse() before isSet");
QVERIFY(!parser.isSet("b"));
QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: call process() or parse() before values");
+ QTest::ignoreMessage(QtWarningMsg, "QCommandLineParser: option not expecting values: \"b\"");
QCOMPARE(parser.values("b"), QStringList());
}
@@ -473,37 +451,40 @@ void tst_QCommandLineParser::testSingleDashWordOptionModes_data()
QTest::addColumn<QStringList>("commandLine");
QTest::addColumn<QStringList>("expectedOptionNames");
QTest::addColumn<QStringList>("expectedOptionValues");
+ QTest::addColumn<QStringList>("invalidOptionValues");
QTest::newRow("collapsed") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-abc" << "val")
- << (QStringList() << "a" << "b" << "c") << (QStringList() << QString() << QString() << "val");
+ << (QStringList() << "a" << "b" << "c") << (QStringList() << QString() << QString() << "val")
+ << (QStringList() << "a" << "b");
QTest::newRow("collapsed_with_equalsign_value") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-abc=val")
- << (QStringList() << "a" << "b" << "c") << (QStringList() << QString() << QString() << "val");
+ << (QStringList() << "a" << "b" << "c") << (QStringList() << QString() << QString() << "val")
+ << (QStringList() << "a" << "b");
QTest::newRow("collapsed_explicit_longoption") << QCommandLineParser::ParseAsCompactedShortOptions << QStringList("--nn")
- << QStringList("nn") << QStringList();
+ << QStringList("nn") << QStringList() << QStringList();
QTest::newRow("collapsed_longoption_value") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "--abc" << "val")
- << QStringList("abc") << QStringList("val");
+ << QStringList("abc") << QStringList("val") << QStringList();
QTest::newRow("compiler") << QCommandLineParser::ParseAsCompactedShortOptions << QStringList("-cab")
- << QStringList("c") << QStringList("ab");
+ << QStringList("c") << QStringList("ab") << QStringList();
QTest::newRow("compiler_with_space") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-c" << "val")
- << QStringList("c") << QStringList("val");
+ << QStringList("c") << QStringList("val") << QStringList();
QTest::newRow("implicitlylong") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "-abc" << "val")
- << QStringList("abc") << QStringList("val");
+ << QStringList("abc") << QStringList("val") << QStringList();
QTest::newRow("implicitlylong_equal") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "-abc=val")
- << QStringList("abc") << QStringList("val");
+ << QStringList("abc") << QStringList("val") << QStringList();
QTest::newRow("implicitlylong_longoption") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "--nn")
- << QStringList("nn") << QStringList();
+ << QStringList("nn") << QStringList() << QStringList();
QTest::newRow("implicitlylong_longoption_value") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "--abc" << "val")
- << QStringList("abc") << QStringList("val");
+ << QStringList("abc") << QStringList("val") << QStringList();
QTest::newRow("implicitlylong_with_space") << QCommandLineParser::ParseAsCompactedShortOptions << (QStringList() << "-c" << "val")
- << QStringList("c") << QStringList("val");
+ << QStringList("c") << QStringList("val") << QStringList();
QTest::newRow("forceshort_detached") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "-I" << "45")
- << QStringList("I") << QStringList("45");
+ << QStringList("I") << QStringList("45") << QStringList();
QTest::newRow("forceshort_attached") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "-I46")
- << QStringList("I") << QStringList("46");
+ << QStringList("I") << QStringList("46") << QStringList();
QTest::newRow("forceshort_mixed") << QCommandLineParser::ParseAsLongOptions << (QStringList() << "-I45" << "-nn")
- << (QStringList() << "I" << "nn") << QStringList("45");
+ << (QStringList() << "I" << "nn") << QStringList("45") << QStringList();
}
void tst_QCommandLineParser::testSingleDashWordOptionModes()
@@ -512,6 +493,7 @@ void tst_QCommandLineParser::testSingleDashWordOptionModes()
QFETCH(QStringList, commandLine);
QFETCH(QStringList, expectedOptionNames);
QFETCH(QStringList, expectedOptionValues);
+ QFETCH(QStringList, invalidOptionValues);
commandLine.prepend("tst_QCommandLineParser");
@@ -528,14 +510,19 @@ void tst_QCommandLineParser::testSingleDashWordOptionModes()
QVERIFY(parser.addOption(forceShort));
QVERIFY(parser.parse(commandLine));
QCOMPARE(parser.optionNames(), expectedOptionNames);
- for (int i = 0; i < expectedOptionValues.count(); ++i)
- QCOMPARE(parser.value(parser.optionNames().at(i)), expectedOptionValues.at(i));
+ for (int i = 0; i < expectedOptionValues.size(); ++i) {
+ const QString option = parser.optionNames().at(i);
+ if (invalidOptionValues.contains(option)) {
+ QByteArray msg = QLatin1String("QCommandLineParser: option not expecting values: \"%1\"").arg(option).toLatin1();
+ QTest::ignoreMessage(QtWarningMsg, msg.data());
+ }
+ QCOMPARE(parser.value(option), expectedOptionValues.at(i));
+ }
QCOMPARE(parser.unknownOptionNames(), QStringList());
}
void tst_QCommandLineParser::testCpp11StyleInitialization()
{
-#if defined(Q_COMPILER_UNIFORM_INIT)
QCoreApplication app(empty_argc, empty_argv);
QCommandLineParser parser;
@@ -549,9 +536,6 @@ void tst_QCommandLineParser::testCpp11StyleInitialization()
QVERIFY(parser.parse({"tst_QCommandLineParser", "-a", "-vvv", "--infile=in.txt"}));
QCOMPARE(parser.optionNames(), (QStringList{"a", "v", "v", "v", "infile"}));
QCOMPARE(parser.value("infile"), QString("in.txt"));
-#else
- QSKIP("This test requires C++11 uniform initialization support in the compiler.");
-#endif
}
void tst_QCommandLineParser::testVersionOption()
@@ -578,7 +562,7 @@ void tst_QCommandLineParser::testVersionOption()
static const char expectedOptionsHelp[] =
"Options:\n"
" -h, --help Displays help on commandline options.\n"
- " --help-all Displays help including Qt specific options.\n"
+ " --help-all Displays help, including generic Qt options.\n"
" -v, --version Displays version information.\n"
" --load <url> Load file from URL.\n"
" -o, --output <file> Set output file.\n"
@@ -787,7 +771,7 @@ void tst_QCommandLineParser::testVeryLongOptionNames()
output.replace(QStringLiteral("\r\n"), QStringLiteral("\n"));
#endif
const QStringList lines = output.split('\n');
- const int last = lines.count() - 1;
+ const int last = lines.size() - 1;
// Let's not compare everything, just the final parts.
QCOMPARE(lines.at(last - 7), " cdefghijklmnopqrstuvwxyz");
QCOMPARE(lines.at(last - 6), " --looooooooooooong-option, --looooong-opt-alias <l Short description");
diff --git a/tests/auto/corelib/tools/qcontiguouscache/CMakeLists.txt b/tests/auto/corelib/tools/qcontiguouscache/CMakeLists.txt
index dc9722ccc7..5c32c34023 100644
--- a/tests/auto/corelib/tools/qcontiguouscache/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qcontiguouscache/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qcontiguouscache.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcontiguouscache Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcontiguouscache LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcontiguouscache
SOURCES
tst_qcontiguouscache.cpp
diff --git a/tests/auto/corelib/tools/qcontiguouscache/tst_qcontiguouscache.cpp b/tests/auto/corelib/tools/qcontiguouscache/tst_qcontiguouscache.cpp
index b25ed55648..ca110b1240 100644
--- a/tests/auto/corelib/tools/qcontiguouscache/tst_qcontiguouscache.cpp
+++ b/tests/auto/corelib/tools/qcontiguouscache/tst_qcontiguouscache.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 <QObject>
#include <QTest>
@@ -75,20 +50,24 @@ void tst_QContiguousCache::empty()
{
QContiguousCache<int> c(10);
QCOMPARE(c.capacity(), 10);
+ QCOMPARE(c.size(), 0);
+ // NOLINTNEXTLINE(qt-port-to-std-compatible-api): Test both size() and count()
QCOMPARE(c.count(), 0);
QVERIFY(c.isEmpty());
c.append(1);
+ // NOLINTNEXTLINE(qt-port-to-std-compatible-api): Test both size() and count()
QCOMPARE(c.count(), 1);
+ QCOMPARE(c.size(), 1);
QVERIFY(!c.isEmpty());
c.clear();
QCOMPARE(c.capacity(), 10);
- QCOMPARE(c.count(), 0);
+ QCOMPARE(c.size(), 0);
QVERIFY(c.isEmpty());
c.prepend(1);
- QCOMPARE(c.count(), 1);
+ QCOMPARE(c.size(), 1);
QVERIFY(!c.isEmpty());
c.clear();
- QCOMPARE(c.count(), 0);
+ QCOMPARE(c.size(), 0);
QVERIFY(c.isEmpty());
QCOMPARE(c.capacity(), 10);
}
@@ -99,9 +78,9 @@ void tst_QContiguousCache::swap()
c1.append(1);
c1.swap(c2);
QCOMPARE(c1.capacity(), 100);
- QCOMPARE(c1.count(), 0 );
+ QCOMPARE(c1.size(), 0 );
QCOMPARE(c2.capacity(), 10 );
- QCOMPARE(c2.count(), 1 );
+ QCOMPARE(c2.size(), 1 );
}
void tst_QContiguousCache::append_data()
@@ -137,7 +116,7 @@ void tst_QContiguousCache::append()
QCOMPARE(c.available(), qMax(qsizetype(0), cacheSize - i));
QCOMPARE(c.first(), qMax(qsizetype(1), i-cacheSize+1));
QCOMPARE(c.last(), i);
- QCOMPARE(c.count(), qMin(i, cacheSize));
+ QCOMPARE(c.size(), qMin(i, cacheSize));
QCOMPARE(c.isFull(), i >= cacheSize);
i++;
}
@@ -150,7 +129,7 @@ void tst_QContiguousCache::append()
// test taking from end until empty.
for (j = 0; j < cacheSize; j++, i--) {
QCOMPARE(c.takeLast(), i-1);
- QCOMPARE(c.count(), cacheSize-j-1);
+ QCOMPARE(c.size(), cacheSize-j-1);
QCOMPARE(c.available(), j+1);
QVERIFY(!c.isFull());
QCOMPARE(c.isEmpty(), j==cacheSize-1);
@@ -188,7 +167,7 @@ void tst_QContiguousCache::prepend()
QCOMPARE(c.available(), qMax(0, cacheSize - i));
QCOMPARE(c.last(), qMax(1, i-cacheSize+1));
QCOMPARE(c.first(), i);
- QCOMPARE(c.count(), qMin(i, cacheSize));
+ QCOMPARE(c.size(), qMin(i, cacheSize));
QCOMPARE(c.isFull(), i >= cacheSize);
i++;
}
@@ -201,7 +180,7 @@ void tst_QContiguousCache::prepend()
// test taking from start until empty.
for (j = 0; j < cacheSize; j++, i--) {
QCOMPARE(c.takeFirst(), i-1);
- QCOMPARE(c.count(), cacheSize-j-1);
+ QCOMPARE(c.size(), cacheSize-j-1);
QCOMPARE(c.available(), j+1);
QVERIFY(!c.isFull());
QCOMPARE(c.isEmpty(), j==cacheSize-1);
@@ -321,7 +300,7 @@ void tst_QContiguousCache::setCapacity()
for (i = 280; i < 310; ++i)
contiguousCache.insert(i, i);
QCOMPARE(contiguousCache.capacity(), 100);
- QCOMPARE(contiguousCache.count(), 30);
+ QCOMPARE(contiguousCache.size(), 30);
QCOMPARE(contiguousCache.firstIndex(), 280);
QCOMPARE(contiguousCache.lastIndex(), 309);
@@ -333,7 +312,7 @@ void tst_QContiguousCache::setCapacity()
contiguousCache.setCapacity(150);
QCOMPARE(contiguousCache.capacity(), 150);
- QCOMPARE(contiguousCache.count(), 30);
+ QCOMPARE(contiguousCache.size(), 30);
QCOMPARE(contiguousCache.firstIndex(), 280);
QCOMPARE(contiguousCache.lastIndex(), 309);
@@ -345,7 +324,7 @@ void tst_QContiguousCache::setCapacity()
contiguousCache.setCapacity(20);
QCOMPARE(contiguousCache.capacity(), 20);
- QCOMPARE(contiguousCache.count(), 20);
+ QCOMPARE(contiguousCache.size(), 20);
QCOMPARE(contiguousCache.firstIndex(), 290);
QCOMPARE(contiguousCache.lastIndex(), 309);
diff --git a/tests/auto/corelib/tools/qcryptographichash/CMakeLists.txt b/tests/auto/corelib/tools/qcryptographichash/CMakeLists.txt
index cea74758cc..8a0c08fcad 100644
--- a/tests/auto/corelib/tools/qcryptographichash/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qcryptographichash/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qcryptographichash.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcryptographichash Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcryptographichash LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -16,20 +23,6 @@ qt_internal_add_test(tst_qcryptographichash
TESTDATA ${test_data}
)
-## Scopes:
-#####################################################################
-
-if(ANDROID OR INTEGRITY)
- # Resources:
- set(testdata_resource_files
- "data/2c1517dad3678f03917f15849b052fd5.md5"
- "data/d41d8cd98f00b204e9800998ecf8427e.md5"
- )
-
- qt_internal_add_resource(tst_qcryptographichash "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
- )
+if(QT_FEATURE_sanitize_address)
+ set_property(TEST tst_qcryptographichash APPEND PROPERTY ENVIRONMENT "QTEST_FUNCTION_TIMEOUT=900000")
endif()
diff --git a/tests/auto/corelib/tools/qcryptographichash/tst_qcryptographichash.cpp b/tests/auto/corelib/tools/qcryptographichash/tst_qcryptographichash.cpp
index 6b61349d01..c08afd67c4 100644
--- a/tests/auto/corelib/tools/qcryptographichash/tst_qcryptographichash.cpp
+++ b/tests/auto/corelib/tools/qcryptographichash/tst_qcryptographichash.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 <QtCore/QCoreApplication>
@@ -33,9 +8,7 @@
#include <QCryptographicHash>
#include <QtCore/QMetaEnum>
-#if QT_CONFIG(cxx11_future)
-# include <thread>
-#endif
+#include <thread>
Q_DECLARE_METATYPE(QCryptographicHash::Algorithm)
@@ -50,16 +23,24 @@ private slots:
void sha1();
void sha3_data();
void sha3();
+ void keccak();
+ void keccak_data();
void blake2_data();
void blake2();
void files_data();
void files();
void hashLength_data();
void hashLength();
+ void addDataAcceptsNullByteArrayView_data() { hashLength_data(); }
+ void addDataAcceptsNullByteArrayView();
+ void move();
+ void swap();
// keep last
void moreThan4GiBOfData_data();
void moreThan4GiBOfData();
+ void keccakBufferOverflow();
private:
+ void ensureLargeData();
std::vector<char> large;
};
@@ -74,6 +55,8 @@ void tst_QCryptographicHash::repeated_result()
QCryptographicHash::Algorithm _algo = QCryptographicHash::Algorithm(algo);
QCryptographicHash hash(_algo);
+ QCOMPARE_EQ(hash.algorithm(), _algo);
+
QFETCH(QByteArray, first);
hash.addData(first);
@@ -169,6 +152,27 @@ void tst_QCryptographicHash::intermediary_result_data()
<< QByteArray("abc") << QByteArray("abc")
<< QByteArray::fromHex("B751850B1A57168A5693CD924B6B096E08F621827444F70D884F5D0240D2712E10E116E9192AF3C91A7EC57647E3934057340B4CF408D5A56592F8274EEC53F0")
<< QByteArray::fromHex("BB582DA40D15399ACF62AFCBBD6CFC9EE1DD5129B1EF9935DD3B21668F1A73D7841018BE3B13F281C3A8E9DA7EDB60F57B9F9F1C04033DF4CE3654B7B2ADB310");
+
+ QTest::newRow("keccak_224_abc_abc")
+ << int(QCryptographicHash::Keccak_224)
+ << QByteArray("abc") << QByteArray("abc")
+ << QByteArray::fromHex("c30411768506ebe1c2871b1ee2e87d38df342317300a9b97a95ec6a8")
+ << QByteArray::fromHex("048330e7c7c8b4a41ab713b3a6f958d77b8cf3ee969930f1584dd550");
+ QTest::newRow("keccak_256_abc_abc")
+ << int(QCryptographicHash::Keccak_256)
+ << QByteArray("abc") << QByteArray("abc")
+ << QByteArray::fromHex("4e03657aea45a94fc7d47ba826c8d667c0d1e6e33a64a036ec44f58fa12d6c45")
+ << QByteArray::fromHex("9f0adad0a59b05d2e04a1373342b10b9eb16c57c164c8a3bfcbf46dccee39a21");
+ QTest::newRow("keccak_384_abc_abc")
+ << int(QCryptographicHash::Keccak_384)
+ << QByteArray("abc") << QByteArray("abc")
+ << QByteArray::fromHex("f7df1165f033337be098e7d288ad6a2f74409d7a60b49c36642218de161b1f99f8c681e4afaf31a34db29fb763e3c28e")
+ << QByteArray::fromHex("d733b87d392d270889d3da23ae113f349e25574b445f319cde4cd3f877c753e9e3c65980421339b3a131457ff393939f");
+ QTest::newRow("keccak_512_abc_abc")
+ << int(QCryptographicHash::Keccak_512)
+ << QByteArray("abc") << QByteArray("abc")
+ << QByteArray::fromHex("18587dc2ea106b9a1563e32b3312421ca164c7f1f07bc922a9c83d77cea3a1e5d0c69910739025372dc14ac9642629379540c17e2a65b19d77aa511a9d00bb96")
+ << QByteArray::fromHex("a7c392d2a42155761ca76bddde1c47d55486b007edf465397bfb9dfa74d11c8f0d7c86cd29415283f1b5e7f655cec25b869c9e9c33a8986f0b38542fb12bfb93");
}
void tst_QCryptographicHash::intermediary_result()
@@ -275,6 +279,68 @@ void tst_QCryptographicHash::sha3()
QCOMPARE(result, expectedResult);
}
+void tst_QCryptographicHash::keccak_data()
+{
+ QTest::addColumn<QCryptographicHash::Algorithm>("algorithm");
+ QTest::addColumn<QByteArray>("data");
+ QTest::addColumn<QByteArray>("expectedResult");
+
+#define ROW(Tag, Algorithm, Input, Result) \
+ QTest::newRow(Tag) << Algorithm << QByteArrayLiteral(Input) << QByteArray::fromHex(Result)
+
+ ROW("keccak_224_pangram",
+ QCryptographicHash::Keccak_224,
+ "The quick brown fox jumps over the lazy dog",
+ "310aee6b30c47350576ac2873fa89fd190cdc488442f3ef654cf23fe");
+
+ ROW("keccak_224_pangram_dot",
+ QCryptographicHash::Keccak_224,
+ "The quick brown fox jumps over the lazy dog.",
+ "c59d4eaeac728671c635ff645014e2afa935bebffdb5fbd207ffdeab");
+
+ ROW("keccak_256_pangram",
+ QCryptographicHash::Keccak_256,
+ "The quick brown fox jumps over the lazy dog",
+ "4d741b6f1eb29cb2a9b9911c82f56fa8d73b04959d3d9d222895df6c0b28aa15");
+
+ ROW("keccak_256_pangram_dot",
+ QCryptographicHash::Keccak_256,
+ "The quick brown fox jumps over the lazy dog.",
+ "578951e24efd62a3d63a86f7cd19aaa53c898fe287d2552133220370240b572d");
+
+ ROW("keccak_384_pangram",
+ QCryptographicHash::Keccak_384,
+ "The quick brown fox jumps over the lazy dog",
+ "283990fa9d5fb731d786c5bbee94ea4db4910f18c62c03d173fc0a5e494422e8a0b3da7574dae7fa0baf005e504063b3");
+
+ ROW("keccak_384_pangram_dot",
+ QCryptographicHash::Keccak_384,
+ "The quick brown fox jumps over the lazy dog.",
+ "9ad8e17325408eddb6edee6147f13856ad819bb7532668b605a24a2d958f88bd5c169e56dc4b2f89ffd325f6006d820b");
+
+ ROW("skeccak_512_pangram",
+ QCryptographicHash::Keccak_512,
+ "The quick brown fox jumps over the lazy dog",
+ "d135bb84d0439dbac432247ee573a23ea7d3c9deb2a968eb31d47c4fb45f1ef4422d6c531b5b9bd6f449ebcc449ea94d0a8f05f62130fda612da53c79659f609");
+
+ ROW("keccak_512_pangram_dot",
+ QCryptographicHash::Keccak_512,
+ "The quick brown fox jumps over the lazy dog.",
+ "ab7192d2b11f51c7dd744e7b3441febf397ca07bf812cceae122ca4ded6387889064f8db9230f173f6d1ab6e24b6e50f065b039f799f5592360a6558eb52d760");
+
+#undef ROW
+}
+
+void tst_QCryptographicHash::keccak()
+{
+ QFETCH(QCryptographicHash::Algorithm, algorithm);
+ QFETCH(QByteArray, data);
+ QFETCH(QByteArray, expectedResult);
+
+ const auto result = QCryptographicHash::hash(data, algorithm);
+ QCOMPARE(result, expectedResult);
+}
+
void tst_QCryptographicHash::blake2_data()
{
QTest::addColumn<QCryptographicHash::Algorithm>("algorithm");
@@ -414,7 +480,7 @@ void tst_QCryptographicHash::hashLength_data()
auto metaEnum = QMetaEnum::fromType<QCryptographicHash::Algorithm>();
for (int i = 0, value = metaEnum.value(i); value != -1; value = metaEnum.value(++i)) {
auto algorithm = QCryptographicHash::Algorithm(value);
- QTest::addRow("%s", metaEnum.valueToKey(value)) << algorithm;
+ QTest::addRow("%s", metaEnum.key(i)) << algorithm;
}
}
@@ -422,16 +488,81 @@ void tst_QCryptographicHash::hashLength()
{
QFETCH(const QCryptographicHash::Algorithm, algorithm);
- QByteArray output = QCryptographicHash::hash("test", algorithm);
- QCOMPARE(QCryptographicHash::hashLength(algorithm), output.length());
+ qsizetype expectedSize;
+ if (algorithm == QCryptographicHash::NumAlgorithms) {
+ // It's UB to call ::hash() with NumAlgorithms, but hashLength() is
+ // fine and returns 0 for invalid values:
+ expectedSize = 0;
+ } else {
+ expectedSize = QCryptographicHash::hash("test", algorithm).size();
+ }
+ QCOMPARE(QCryptographicHash::hashLength(algorithm), expectedSize);
+}
+
+void tst_QCryptographicHash::addDataAcceptsNullByteArrayView()
+{
+ QFETCH(const QCryptographicHash::Algorithm, algorithm);
+
+ if (!QCryptographicHash::supportsAlgorithm(algorithm))
+ QSKIP("QCryptographicHash doesn't support this algorithm");
+
+ QCryptographicHash hash1(algorithm);
+ hash1.addData("meep");
+ hash1.addData(QByteArrayView{}); // after other data
+
+ QCryptographicHash hash2(algorithm);
+ hash2.addData(QByteArrayView{}); // before any other data
+ hash2.addData("meep");
+
+ const auto expected = QCryptographicHash::hash("meep", algorithm);
+
+ QCOMPARE(hash1.resultView(), expected);
+ QCOMPARE(hash2.resultView(), expected);
}
-void tst_QCryptographicHash::moreThan4GiBOfData_data()
+void tst_QCryptographicHash::move()
+{
+ QCryptographicHash hash1(QCryptographicHash::Sha1);
+ hash1.addData("a");
+
+ // move constructor
+ auto hash2(std::move(hash1));
+ hash2.addData("b");
+
+ // move assign operator
+ QCryptographicHash hash3(QCryptographicHash::Sha256);
+ hash3.addData("no effect on the end result");
+ hash3 = std::move(hash2);
+ hash3.addData("c");
+
+ QCOMPARE(hash3.resultView(), QByteArray::fromHex("A9993E364706816ABA3E25717850C26C9CD0D89D"));
+}
+
+void tst_QCryptographicHash::swap()
+{
+ QCryptographicHash hash1(QCryptographicHash::Sha1);
+ QCryptographicHash hash2(QCryptographicHash::Sha256);
+
+ hash1.addData("da");
+ hash2.addData("te");
+
+ hash1.swap(hash2);
+
+ hash2.addData("ta");
+ hash1.addData("st");
+
+ QCOMPARE(hash2.result(), QCryptographicHash::hash("data", QCryptographicHash::Sha1));
+ QCOMPARE(hash1.result(), QCryptographicHash::hash("test", QCryptographicHash::Sha256));
+}
+
+void tst_QCryptographicHash::ensureLargeData()
{
#if QT_POINTER_SIZE > 4
QElapsedTimer timer;
timer.start();
const size_t GiB = 1024 * 1024 * 1024;
+ if (large.size() == 4 * GiB + 1)
+ return;
try {
large.resize(4 * GiB + 1, '\0');
} catch (const std::bad_alloc &) {
@@ -440,7 +571,14 @@ void tst_QCryptographicHash::moreThan4GiBOfData_data()
QCOMPARE(large.size(), 4 * GiB + 1);
large.back() = '\1';
qDebug("created dataset in %lld ms", timer.elapsed());
+#endif
+}
+void tst_QCryptographicHash::moreThan4GiBOfData_data()
+{
+#if QT_POINTER_SIZE > 4
+ if (ensureLargeData(); large.empty())
+ return;
QTest::addColumn<QCryptographicHash::Algorithm>("algorithm");
auto me = QMetaEnum::fromType<QCryptographicHash::Algorithm>();
auto row = [me] (QCryptographicHash::Algorithm algo) {
@@ -465,14 +603,7 @@ void tst_QCryptographicHash::moreThan4GiBOfData()
{
QFETCH(const QCryptographicHash::Algorithm, algorithm);
-# if QT_CONFIG(cxx11_future)
using MaybeThread = std::thread;
-# else
- struct MaybeThread {
- std::function<void()> func;
- void join() { func(); }
- };
-# endif
QElapsedTimer timer;
timer.start();
@@ -503,5 +634,33 @@ void tst_QCryptographicHash::moreThan4GiBOfData()
QCOMPARE(single, chunked);
}
+void tst_QCryptographicHash::keccakBufferOverflow()
+{
+#if QT_POINTER_SIZE == 4
+ QSKIP("This is a 64-bit-only test");
+#else
+
+ if (ensureLargeData(); large.empty())
+ return;
+
+ QElapsedTimer timer;
+ timer.start();
+ const auto sg = qScopeGuard([&] {
+ qDebug() << "test finished in" << timer.restart() << "ms";
+ });
+
+ constexpr qsizetype magic = INT_MAX/4;
+ QCOMPARE_GE(large.size(), size_t(magic + 1));
+
+ QCryptographicHash hash(QCryptographicHash::Algorithm::Keccak_224);
+ const auto first = QByteArrayView{large}.first(1);
+ const auto second = QByteArrayView{large}.sliced(1, magic);
+ hash.addData(first);
+ hash.addData(second);
+ (void)hash.resultView();
+ QVERIFY(true); // didn't crash
+#endif
+}
+
QTEST_MAIN(tst_QCryptographicHash)
#include "tst_qcryptographichash.moc"
diff --git a/tests/auto/corelib/tools/qduplicatetracker/CMakeLists.txt b/tests/auto/corelib/tools/qduplicatetracker/CMakeLists.txt
index a38255f3e9..13645c50b8 100644
--- a/tests/auto/corelib/tools/qduplicatetracker/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qduplicatetracker/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qduplicatetracker.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qduplicatetracker Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qduplicatetracker LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qduplicatetracker
SOURCES
tst_qduplicatetracker.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp b/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp
index f2cb3b3b44..ad0b6abbc7 100644
--- a/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp
+++ b/tests/auto/corelib/tools/qduplicatetracker/tst_qduplicatetracker.cpp
@@ -1,36 +1,13 @@
-/****************************************************************************
-**
-** 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 <QtTest/QtTest>
#include <QtCore/private/qduplicatetracker_p.h>
#include <QObject>
+
+#include <string>
#include <utility>
class tst_QDuplicateTracker : public QObject
@@ -75,6 +52,27 @@ void tst_QDuplicateTracker::hasSeen()
QVERIFY(!tracker.hasSeen(string3));
QVERIFY(tracker.hasSeen(string3));
}
+
+ {
+ QDuplicateTracker<std::string, 2> tracker;
+ std::string string1("string1");
+ std::string string2("string2");
+ std::string string2_2("string2");
+ std::string string3("string3");
+
+ // Move when seen
+ QVERIFY(!tracker.hasSeen(string1));
+ QVERIFY(tracker.hasSeen(std::move(string1)));
+
+ // Move when unseen
+ QVERIFY(!tracker.hasSeen(std::move(string2)));
+ QVERIFY(tracker.hasSeen(string2_2));
+
+ // Past the prealloc amount
+ QVERIFY(!tracker.hasSeen(string3));
+ QVERIFY(tracker.hasSeen(string3));
+ }
+
}
void tst_QDuplicateTracker::clear()
diff --git a/tests/auto/corelib/tools/qeasingcurve/CMakeLists.txt b/tests/auto/corelib/tools/qeasingcurve/CMakeLists.txt
index ce12cd9bfc..3f76f8a38f 100644
--- a/tests/auto/corelib/tools/qeasingcurve/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qeasingcurve/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qeasingcurve.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qeasingcurve Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qeasingcurve LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qeasingcurve
SOURCES
tst_qeasingcurve.cpp
diff --git a/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp b/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp
index 09ab680b49..fc8c1a3e5c 100644
--- a/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.cpp
+++ b/tests/auto/corelib/tools/qeasingcurve/tst_qeasingcurve.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 <QTest>
@@ -399,7 +374,7 @@ void tst_QEasingCurve::valueForProgress()
// in theory the baseline should't have an error of more than 0.00005 due to how its rounded,
// but due to FP imprecision, we have to adjust the error a bit more.
const qreal errorBound = 0.00006;
- for (int i = 0; i < at.count(); ++i) {
+ for (int i = 0; i < at.size(); ++i) {
const qreal ex = expected.at(i);
const qreal error = qAbs(ex - curve.valueForProgress(at.at(i)/qreal(100)));
QVERIFY(error <= errorBound);
@@ -599,18 +574,18 @@ void tst_QEasingCurve::bezierSpline_data()
static inline void setupBezierSpline(QEasingCurve *easingCurve, const QString &string)
{
- QStringList pointStr = string.split(QLatin1Char(' '));
+ const QStringList pointStr = string.split(QLatin1Char(' '));
QList<QPointF> points;
- foreach (const QString &str, pointStr) {
+ for (const QString &str : pointStr) {
QStringList coordStr = str.split(QLatin1Char(','));
QPointF point(coordStr.first().toDouble(), coordStr.last().toDouble());
points.append(point);
}
- QVERIFY(points.count() % 3 == 0);
+ QVERIFY(points.size() % 3 == 0);
- for (int i = 0; i < points.count() / 3; i++) {
+ for (int i = 0; i < points.size() / 3; i++) {
QPointF c1 = points.at(i * 3);
QPointF c2 = points.at(i * 3 + 1);
QPointF p1 = points.at(i * 3 + 2);
@@ -628,7 +603,7 @@ void tst_QEasingCurve::bezierSpline()
setupBezierSpline(&bezierEasingCurve, definition);
const qreal errorBound = 0.002;
- for (int i = 0; i < at.count(); ++i) {
+ for (int i = 0; i < at.size(); ++i) {
const qreal ex = expected.at(i);
const qreal value = bezierEasingCurve.valueForProgress(at.at(i)/qreal(100));
const qreal error = qAbs(ex - value);
@@ -667,11 +642,11 @@ void tst_QEasingCurve::tcbSpline_data()
static inline void setupTCBSpline(QEasingCurve *easingCurve, const QString &string)
{
- QStringList pointStr = string.split(QLatin1Char(' '));
+ const QStringList pointStr = string.split(QLatin1Char(' '));
- foreach (const QString &str, pointStr) {
+ for (const QString &str : pointStr) {
QStringList coordStr = str.split(QLatin1Char(','));
- Q_ASSERT(coordStr.count() == 5);
+ Q_ASSERT(coordStr.size() == 5);
QPointF point(coordStr.first().toDouble(), coordStr.at(1).toDouble());
qreal t = coordStr.at(2).toDouble();
qreal c = coordStr.at(3).toDouble();
@@ -690,7 +665,7 @@ void tst_QEasingCurve::tcbSpline()
setupTCBSpline(&tcbEasingCurve, definition);
const qreal errorBound = 0.002;
- for (int i = 0; i < at.count(); ++i) {
+ for (int i = 0; i < at.size(); ++i) {
const qreal ex = expected.at(i);
const qreal value = tcbEasingCurve.valueForProgress(at.at(i)/qreal(100));
const qreal error = qAbs(ex - value);
diff --git a/tests/auto/corelib/tools/qexplicitlyshareddatapointer/CMakeLists.txt b/tests/auto/corelib/tools/qexplicitlyshareddatapointer/CMakeLists.txt
index 92850a8c4e..280918e302 100644
--- a/tests/auto/corelib/tools/qexplicitlyshareddatapointer/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qexplicitlyshareddatapointer/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qexplicitlyshareddatapointer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qexplicitlyshareddatapointer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qexplicitlyshareddatapointer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qexplicitlyshareddatapointer
SOURCES
tst_qexplicitlyshareddatapointer.cpp
diff --git a/tests/auto/corelib/tools/qexplicitlyshareddatapointer/tst_qexplicitlyshareddatapointer.cpp b/tests/auto/corelib/tools/qexplicitlyshareddatapointer/tst_qexplicitlyshareddatapointer.cpp
index 8ff8a7309f..5e105a090a 100644
--- a/tests/auto/corelib/tools/qexplicitlyshareddatapointer/tst_qexplicitlyshareddatapointer.cpp
+++ b/tests/auto/corelib/tools/qexplicitlyshareddatapointer/tst_qexplicitlyshareddatapointer.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 <QTest>
@@ -248,4 +223,3 @@ void tst_QExplicitlySharedDataPointer::swap() const
QTEST_MAIN(tst_QExplicitlySharedDataPointer)
#include "tst_qexplicitlyshareddatapointer.moc"
-// vim: et:ts=4:sw=4:sts=4
diff --git a/tests/auto/corelib/tools/qflatmap/CMakeLists.txt b/tests/auto/corelib/tools/qflatmap/CMakeLists.txt
index 5d79b16776..bc98c669fc 100644
--- a/tests/auto/corelib/tools/qflatmap/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qflatmap/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qflatmap.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qflatmap Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qflatmap LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qflatmap
SOURCES
tst_qflatmap.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp b/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp
index 1de1c3ad71..986cf2407b 100644
--- a/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp
+++ b/tests/auto/corelib/tools/qflatmap/tst_qflatmap.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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
#define QT_USE_QSTRINGBUILDER
+#define QFLATMAP_ENABLE_STL_COMPATIBLE_INSERT
#include <QTest>
@@ -40,6 +16,20 @@
#include <list>
#include <tuple>
+static constexpr bool is_even(int n) { return n % 2 == 0; }
+static constexpr bool is_empty(QAnyStringView v) { return v.isEmpty(); }
+
+namespace {
+template <typename P>
+constexpr inline bool is_pair_impl_v = false;
+template <typename T, typename S>
+constexpr inline bool is_pair_impl_v<std::pair<T,S>> = true;
+template <typename P>
+constexpr inline bool is_pair_v = is_pair_impl_v<std::decay_t<P>>;
+template <typename P>
+using if_pair = std::enable_if_t<is_pair_v<P>, bool>;
+}
+
class tst_QFlatMap : public QObject
{
Q_OBJECT
@@ -51,11 +41,21 @@ private slots:
void removal();
void extraction();
void iterators();
+ void remove_if_pair() { remove_if_impl([](const auto &p) -> if_pair<decltype(p)> { return is_even(p.first) && is_empty(p.second); }); }
+ void remove_if_key_value() { remove_if_impl([](const auto &k, const auto &v) { return is_even(k) && is_empty(v); }); }
+ void remove_if_key() { remove_if_impl([](int k) { return is_even(k); }, true); }
void statefulComparator();
- void transparency();
+ void transparency_using();
+ void transparency_struct();
void try_emplace_and_insert_or_assign();
void viewIterators();
void varLengthArray();
+
+private:
+ template <typename Compare>
+ void transparency_impl();
+ template <typename Predicate>
+ void remove_if_impl(Predicate p, bool removeNonEmptyValues = false);
};
void tst_QFlatMap::constructing()
@@ -142,7 +142,7 @@ void tst_QFlatMap::insertion()
QCOMPARE(m.value("foo").data(), "FOO");
QCOMPARE(m.value("bar").data(), "BAR");
QCOMPARE(m.value("baz").data(), "BAZ");
- QCOMPARE(m.value("oof").data(), "OOF");
+ QCOMPARE(m.value("oof").data(), "eek");
QCOMPARE(m.value("bla").data(), "BLA");
QCOMPARE(m.value("blubb").data(), "BLUBB");
@@ -156,7 +156,7 @@ void tst_QFlatMap::insertion()
m.insert(std::begin(a1), std::end(a1));
m.insert(Qt::OrderedUniqueRange, std::begin(a2), std::end(a2));
QCOMPARE(m.size(), 10);
- QCOMPARE(m.value("narf").data(), "NARFFFFFF");
+ QCOMPARE(m.value("narf").data(), "NARF");
QCOMPARE(m.value("gnampf").data(), "GNAMPF");
}
@@ -201,7 +201,7 @@ void tst_QFlatMap::extraction()
using Map = QFlatMap<int, QByteArray>;
Map::key_container_type expectedKeys = { 1, 2, 3 };
Map::mapped_container_type expectedValues = { "een", "twee", "dree" };
- Map m(expectedKeys, expectedValues);
+ Map m(Qt::OrderedUniqueRange, expectedKeys, expectedValues);
auto keys = m.keys();
auto values = m.values();
QCOMPARE(keys, expectedKeys);
@@ -214,7 +214,7 @@ void tst_QFlatMap::extraction()
void tst_QFlatMap::iterators()
{
using Map = QFlatMap<int, QByteArray>;
- auto m = Map{ { 1, "foo" }, { 2, "bar" }, { 3, "baz" } };
+ auto m = Map{ Qt::OrderedUniqueRange, { { 1, "foo" }, { 2, "bar" }, { 3, "baz" } } };
{
// forward / backward
Map::iterator a = m.begin();
@@ -358,6 +358,74 @@ void tst_QFlatMap::iterators()
}
}
+template <typename Pred>
+void tst_QFlatMap::remove_if_impl(Pred p, bool removeNonEmptyValues)
+{
+ // empty stays empty:
+ {
+ QFlatMap<int, QString> m;
+ QCOMPARE(m.remove_if(p), 0);
+ QVERIFY(m.isEmpty());
+ }
+ // a matching element is removed:
+ {
+ {
+ QFlatMap<int, QString> m;
+ m.insert_or_assign(0, "");
+ QCOMPARE(m.remove_if(p), 1);
+ QVERIFY(m.isEmpty());
+ }
+ if (removeNonEmptyValues) {
+ QFlatMap<int, QString> m;
+ m.insert_or_assign(0, "x");
+ QCOMPARE(m.remove_if(p), 1);
+ QVERIFY(m.isEmpty());
+ }
+ }
+ // a non-matching element is not removed:
+ {
+ {
+ QFlatMap<int, QString> m;
+ m.insert_or_assign(1, "");
+ QCOMPARE(m.remove_if(p), 0);
+ QVERIFY(m.contains(1));
+ QVERIFY(m[1].isEmpty());
+ }
+ if (removeNonEmptyValues) {
+ QFlatMap<int, QString> m;
+ m.insert_or_assign(1, "x");
+ QCOMPARE(m.remove_if(p), 0);
+ QVERIFY(m.contains(1));
+ QCOMPARE(m[1], "x");
+ }
+ }
+ // of matching and non-matching elements, only matching ones are removed:
+ {
+ {
+ QFlatMap<int, QString> m;
+ m.insert_or_assign(0, "");
+ m.insert_or_assign(1, "");
+ const auto copy = m;
+ QCOMPARE(m.remove_if(p), 1);
+ QCOMPARE(copy.size(), 2);
+ QCOMPARE(copy[0], "");
+ QCOMPARE(copy[1], "");
+ QCOMPARE(m.size(), 1);
+ QVERIFY(m.contains(1));
+ QVERIFY(m[1].isEmpty());
+ }
+ {
+ QFlatMap<int, QString> m;
+ m.insert_or_assign(1, "");
+ m.insert_or_assign(2, "");
+ QCOMPARE(m.remove_if(p), 1);
+ QCOMPARE(m.size(), 1);
+ QVERIFY(m.contains(1));
+ QVERIFY(m[1].isEmpty());
+ }
+ }
+}
+
void tst_QFlatMap::removal()
{
using Map = QFlatMap<int, QByteArray>;
@@ -405,17 +473,35 @@ void tst_QFlatMap::statefulComparator()
QVERIFY(m2.key_comp().count > m1.key_comp().count);
}
-void tst_QFlatMap::transparency()
+void tst_QFlatMap::transparency_using()
+{
+ struct StringViewCompare
+ {
+ using is_transparent [[maybe_unused]] = void;
+ bool operator()(QAnyStringView lhs, QAnyStringView rhs) const
+ {
+ return lhs < rhs;
+ }
+ };
+ transparency_impl<StringViewCompare>();
+}
+
+void tst_QFlatMap::transparency_struct()
{
struct StringViewCompare
{
- using is_transparent = void;
- bool operator()(const QStringView &lhs, const QStringView &rhs) const
+ struct is_transparent {};
+ bool operator()(QAnyStringView lhs, QAnyStringView rhs) const
{
return lhs < rhs;
}
};
+ transparency_impl<StringViewCompare>();
+}
+template <typename StringViewCompare>
+void tst_QFlatMap::transparency_impl()
+{
using Map = QFlatMap<QString, QString, StringViewCompare>;
auto m = Map{ { "one", "een" }, { "two", "twee" }, { "three", "dree" } };
@@ -424,8 +510,21 @@ void tst_QFlatMap::transparency()
const QStringView sv2{numbers.constData() + 4, 3};
const QStringView sv3{numbers.constData() + 8, 5};
QCOMPARE(m.lower_bound(sv1).value(), "een");
+ QCOMPARE(m.value(sv1), "een");
QCOMPARE(m.lower_bound(sv2).value(), "twee");
+ QCOMPARE(m.value(sv2), "twee");
QCOMPARE(m.lower_bound(sv3).value(), "dree");
+ QCOMPARE(m.value(sv3), "dree");
+
+ QVERIFY(m.contains(sv2));
+ auto twee = m.take(sv2);
+ static_assert(std::is_same_v<decltype(twee), QString>);
+ QCOMPARE(twee, "twee");
+ QVERIFY(!m.contains(sv2));
+
+ QVERIFY(m.contains(QLatin1String("one")));
+ QVERIFY(m.remove(QAnyStringView(u8"one")));
+ QVERIFY(!m.contains(QLatin1String("one")));
}
void tst_QFlatMap::try_emplace_and_insert_or_assign()
@@ -583,7 +682,7 @@ void tst_QFlatMap::viewIterators()
});
auto it = keys.begin();
QCOMPARE(*it, "kaksi");
- QCOMPARE(it->length(), 5);
+ QCOMPARE(it->size(), 5);
++it;
QCOMPARE(*it, "kolme");
it++;
@@ -604,7 +703,7 @@ void tst_QFlatMap::viewIterators()
});
auto it = values.begin();
QCOMPARE(*it, "twee");
- QCOMPARE(it->length(), 4);
+ QCOMPARE(it->size(), 4);
++it;
QCOMPARE(*it, "dree");
it++;
@@ -621,8 +720,8 @@ void tst_QFlatMap::viewIterators()
void tst_QFlatMap::varLengthArray()
{
using Map = QVarLengthFlatMap<int, QByteArray, 1024>;
- Map m{ { 2, "twee" } };
- m.insert(1, "een");
+ Map m(Qt::OrderedUniqueRange, { { 2, "twee" } });
+ m.insert_or_assign(1, "een");
m.remove(1);
QVERIFY(!m.isEmpty());
m.remove(2);
diff --git a/tests/auto/corelib/tools/qfreelist/CMakeLists.txt b/tests/auto/corelib/tools/qfreelist/CMakeLists.txt
index b1ac63ccff..a37d3131f5 100644
--- a/tests/auto/corelib/tools/qfreelist/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qfreelist/CMakeLists.txt
@@ -1,20 +1,19 @@
-# Generated from qfreelist.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfreelist Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfreelist LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfreelist
SOURCES
tst_qfreelist.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
-
-## Scopes:
-#####################################################################
-
-qt_internal_extend_target(tst_qfreelist CONDITION NOT QT_FEATURE_private_tests
- SOURCES
- ../../../../../src/corelib/tools/qfreelist.cpp
-)
diff --git a/tests/auto/corelib/tools/qfreelist/tst_qfreelist.cpp b/tests/auto/corelib/tools/qfreelist/tst_qfreelist.cpp
index 5537c70c48..a45fa6d400 100644
--- a/tests/auto/corelib/tools/qfreelist/tst_qfreelist.cpp
+++ b/tests/auto/corelib/tools/qfreelist/tst_qfreelist.cpp
@@ -1,31 +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 <QtCore/QCoreApplication>
#include <QtCore/QElapsedTimer>
@@ -141,7 +115,7 @@ public:
needToRelease << i;
} while (t.elapsed() < TimeLimit);
- foreach (int x, needToRelease)
+ for (int x : std::as_const(needToRelease))
freelist.release(x);
}
};
diff --git a/tests/auto/corelib/tools/qhash/CMakeLists.txt b/tests/auto/corelib/tools/qhash/CMakeLists.txt
index b01782aed5..8702b8bf23 100644
--- a/tests/auto/corelib/tools/qhash/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qhash/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qhash.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qhash Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhash LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qhash
SOURCES
tst_qhash.cpp
- DEFINES
- #-QT_NO_JAVA_STYLE_ITERATORS # special case remove
)
+
+qt_internal_undefine_global_definition(tst_qhash QT_NO_JAVA_STYLE_ITERATORS)
diff --git a/tests/auto/corelib/tools/qhash/tst_qhash.cpp b/tests/auto/corelib/tools/qhash/tst_qhash.cpp
index bab22c454a..b3dbdfa40c 100644
--- a/tests/auto/corelib/tools/qhash/tst_qhash.cpp
+++ b/tests/auto/corelib/tools/qhash/tst_qhash.cpp
@@ -1,35 +1,13 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <qdebug.h>
#include <qhash.h>
#include <qmap.h>
+#include <qscopeguard.h>
+#include <qset.h>
#include <algorithm>
#include <vector>
@@ -38,6 +16,8 @@
#include <qsemaphore.h>
+using namespace Qt::StringLiterals;
+
class tst_QHash : public QObject
{
Q_OBJECT
@@ -58,12 +38,24 @@ private slots:
void qhash();
void take(); // copied from tst_QMap
void operator_eq(); // slightly modified from tst_QMap
+ void heterogeneousSearch();
+ void heterogeneousSearchConstKey();
+ void heterogeneousSearchByteArray();
+ void heterogeneousSearchString();
+ void heterogeneousSearchLatin1String();
+
void rehash_isnt_quadratic();
void dont_need_default_constructor();
void qmultihash_specific();
void qmultihash_qhash_rvalue_ref_ctor();
void qmultihash_qhash_rvalue_ref_unite();
void qmultihashUnite();
+ void qmultihashSize();
+ void qmultihashHeterogeneousSearch();
+ void qmultihashHeterogeneousSearchConstKey();
+ void qmultihashHeterogeneousSearchByteArray();
+ void qmultihashHeterogeneousSearchString();
+ void qmultihashHeterogeneousSearchLatin1String();
void compare();
void compare2();
@@ -83,6 +75,7 @@ private slots:
void eraseValidIteratorOnSharedHash();
void equal_range();
void insert_hash();
+ void multiHashStoresInReverseInsertionOrder();
void emplace();
@@ -97,12 +90,18 @@ private slots:
void fineTuningInEmptyHash();
void reserveShared();
+ void reserveLessThanCurrentAmount();
+ void reserveKeepCapacity_data();
+ void reserveKeepCapacity();
void QTBUG98265();
void detachAndReferences();
void lookupUsingKeyIterator();
+
+ void squeeze();
+ void squeezeShared();
};
struct IdentityTracker {
@@ -186,13 +185,13 @@ void tst_QHash::count()
{
MyMap map;
MyMap map2( map );
- QCOMPARE( map.count(), 0 );
- QCOMPARE( map2.count(), 0 );
+ QCOMPARE( map.size(), 0 );
+ QCOMPARE( map2.size(), 0 );
QCOMPARE( MyClass::count, 0 );
// detach
map2["Hallo"] = MyClass( "Fritz" );
- QCOMPARE( map.count(), 0 );
- QCOMPARE( map2.count(), 1 );
+ QCOMPARE( map.size(), 0 );
+ QCOMPARE( map2.size(), 1 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 1 );
#endif
@@ -202,11 +201,11 @@ void tst_QHash::count()
{
typedef QHash<QString, MyClass> Map;
Map map;
- QCOMPARE( map.count(), 0);
+ QCOMPARE( map.size(), 0);
map.insert( "Torben", MyClass("Weis") );
- QCOMPARE( map.count(), 1 );
+ QCOMPARE( map.size(), 1 );
map.insert( "Claudia", MyClass("Sorg") );
- QCOMPARE( map.count(), 2 );
+ QCOMPARE( map.size(), 2 );
map.insert( "Lars", MyClass("Linzbach") );
map.insert( "Matthias", MyClass("Ettrich") );
map.insert( "Sue", MyClass("Paludo") );
@@ -214,7 +213,7 @@ void tst_QHash::count()
map.insert( "Haavard", MyClass("Nord") );
map.insert( "Arnt", MyClass("Gulbrandsen") );
map.insert( "Paul", MyClass("Tvete") );
- QCOMPARE( map.count(), 9 );
+ QCOMPARE( map.size(), 9 );
map.insert( "Paul", MyClass("Tvete 1") );
map.insert( "Paul", MyClass("Tvete 2") );
map.insert( "Paul", MyClass("Tvete 3") );
@@ -222,68 +221,68 @@ void tst_QHash::count()
map.insert( "Paul", MyClass("Tvete 5") );
map.insert( "Paul", MyClass("Tvete 6") );
- QCOMPARE( map.count(), 9 );
+ QCOMPARE( map.size(), 9 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
Map map2( map );
- QVERIFY( map2.count() == 9 );
+ QVERIFY( map2.size() == 9 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
map2.insert( "Kay", MyClass("Roemer") );
- QVERIFY( map2.count() == 10 );
- QVERIFY( map.count() == 9 );
+ QVERIFY( map2.size() == 10 );
+ QVERIFY( map.size() == 9 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 19 );
#endif
map2 = map;
- QVERIFY( map.count() == 9 );
- QVERIFY( map2.count() == 9 );
+ QVERIFY( map.size() == 9 );
+ QVERIFY( map2.size() == 9 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
map2.insert( "Kay", MyClass("Roemer") );
- QVERIFY( map2.count() == 10 );
+ QVERIFY( map2.size() == 10 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 19 );
#endif
map2.clear();
- QVERIFY( map.count() == 9 );
- QVERIFY( map2.count() == 0 );
+ QVERIFY( map.size() == 9 );
+ QVERIFY( map2.size() == 0 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
map2 = map;
- QVERIFY( map.count() == 9 );
- QVERIFY( map2.count() == 9 );
+ QVERIFY( map.size() == 9 );
+ QVERIFY( map2.size() == 9 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
map2.clear();
- QVERIFY( map.count() == 9 );
- QVERIFY( map2.count() == 0 );
+ QVERIFY( map.size() == 9 );
+ QVERIFY( map2.size() == 0 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
map.remove( "Lars" );
- QVERIFY( map.count() == 8 );
- QVERIFY( map2.count() == 0 );
+ QVERIFY( map.size() == 8 );
+ QVERIFY( map2.size() == 0 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 8 );
#endif
map.remove( "Mist" );
- QVERIFY( map.count() == 8 );
- QVERIFY( map2.count() == 0 );
+ QVERIFY( map.size() == 8 );
+ QVERIFY( map2.size() == 0 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 8 );
#endif
@@ -297,22 +296,22 @@ void tst_QHash::count()
#ifndef Q_CC_SUN
QVERIFY( MyClass::count == 1 );
#endif
- QVERIFY( map.count() == 1 );
+ QVERIFY( map.size() == 1 );
(void)map["Torben"].str;
(void)map["Lars"].str;
#ifndef Q_CC_SUN
QVERIFY( MyClass::count == 2 );
#endif
- QVERIFY( map.count() == 2 );
+ QVERIFY( map.size() == 2 );
const Map& cmap = map;
(void)cmap["Depp"].str;
#ifndef Q_CC_SUN
QVERIFY( MyClass::count == 2 );
#endif
- QVERIFY( map.count() == 2 );
- QVERIFY( cmap.count() == 2 );
+ QVERIFY( map.size() == 2 );
+ QVERIFY( cmap.size() == 2 );
}
QCOMPARE( MyClass::count, 0 );
{
@@ -594,7 +593,7 @@ void tst_QHash::erase_edge_case()
for (qsizetype i = 0; i < numBuckets * 4 && index < 2; ++i) {
const size_t hash = qHash(i, QHashSeed::globalSeed());
const size_t bucketForHash = QHashPrivate::GrowthPolicy::bucketForHash(numBuckets, hash);
- if (bucketForHash == numBuckets - 1)
+ if (qsizetype(bucketForHash) == numBuckets - 1)
keys[index++] = i;
}
QCOMPARE(index, 2); // Sanity check. If this fails then the test needs an update!
@@ -922,16 +921,31 @@ class QGlobalQHashSeedResetter
int oldSeed;
public:
// not entirely correct (may lost changes made by another thread between the query
- // of the old and the setting of the new seed), but qSetGlobalQHashSeed doesn't
+ // of the old and the setting of the new seed), but setHashSeed() can't
// return the old value, so this is the best we can do:
explicit QGlobalQHashSeedResetter(int newSeed)
- : oldSeed(qGlobalQHashSeed())
+ : oldSeed(getHashSeed())
{
- qSetGlobalQHashSeed(newSeed);
+ setHashSeed(newSeed);
}
~QGlobalQHashSeedResetter()
{
- qSetGlobalQHashSeed(oldSeed);
+ setHashSeed(oldSeed);
+ }
+
+private:
+ // The functions are implemented to replace the deprecated
+ // qGlobalQHashSeed() and qSetGlobalQHashSeed()
+ static int getHashSeed()
+ {
+ return int(QHashSeed::globalSeed() & INT_MAX);
+ }
+ static void setHashSeed(int seed)
+ {
+ if (seed == 0)
+ QHashSeed::setDeterministicGlobalSeed();
+ else
+ QHashSeed::resetRandomGlobalSeed();
}
};
@@ -1155,6 +1169,222 @@ void tst_QHash::operator_eq()
}
}
+#ifdef __cpp_concepts
+struct HeterogeneousHashingType
+{
+ inline static int conversionCount = 0;
+ QString s;
+
+ Q_IMPLICIT operator QString() const
+ {
+ ++conversionCount;
+ return s;
+ }
+
+ // std::equality_comparable_with requires we be self-comparable too
+ friend bool operator==(const HeterogeneousHashingType &t1, const HeterogeneousHashingType &t2) = default;
+
+ friend bool operator==(const QString &string, const HeterogeneousHashingType &tester)
+ { return tester.s == string; }
+ friend bool operator!=(const QString &string, const HeterogeneousHashingType &tester)
+ { return !(tester.s == string); }
+
+ friend size_t qHash(const HeterogeneousHashingType &tester, size_t seed)
+ { return qHash(tester.s, seed); }
+};
+QT_BEGIN_NAMESPACE
+template <> struct QHashHeterogeneousSearch<QString, HeterogeneousHashingType> : std::true_type {};
+template <> struct QHashHeterogeneousSearch<HeterogeneousHashingType, QString> : std::true_type {};
+QT_END_NAMESPACE
+static_assert(std::is_same_v<QString, std::common_type_t<QString, HeterogeneousHashingType>>);
+static_assert(std::equality_comparable_with<QString, HeterogeneousHashingType>);
+static_assert(QHashPrivate::HeterogeneouslySearchableWith<QString, HeterogeneousHashingType>);
+static_assert(QHashPrivate::HeterogeneouslySearchableWith<HeterogeneousHashingType, QString>);
+
+template <typename T> struct HeterogeneousSearchTestHelper
+{
+ static void resetCounter() {}
+ static void checkCounter() {}
+};
+template <> struct HeterogeneousSearchTestHelper<HeterogeneousHashingType>
+{
+ static void resetCounter()
+ {
+ HeterogeneousHashingType::conversionCount = 0;
+ }
+ static void checkCounter()
+ {
+ QTest::setThrowOnFail(true);
+ auto scopeExit = qScopeGuard([] { QTest::setThrowOnFail(false); });
+ QCOMPARE(HeterogeneousHashingType::conversionCount, 0);
+ }
+};
+#else
+using HeterogeneousHashingType = QString;
+#endif
+
+template <template <typename, typename> class Hash, typename String, typename View, typename Converter>
+static void heterogeneousSearchTest(const QList<std::remove_const_t<String>> &keys, Converter conv)
+{
+#ifdef __cpp_concepts
+ using Helper = HeterogeneousSearchTestHelper<View>;
+ String key = keys.last();
+ String otherKey = keys.first();
+ auto keyHolder = conv(key);
+ auto otherKeyHolder = conv(otherKey);
+ View keyView(keyHolder);
+ View otherKeyView(otherKeyHolder);
+
+ Hash<String, qsizetype> hash;
+ static constexpr bool IsMultiHash = !std::is_same_v<decltype(hash.remove(String())), bool>;
+ hash[key] = keys.size();
+
+ Helper::resetCounter();
+ QVERIFY(hash.contains(keyView));
+ QCOMPARE_EQ(hash.count(keyView), 1);
+ QCOMPARE_EQ(hash.value(keyView), keys.size());
+ QCOMPARE_EQ(hash.value(keyView, -1), keys.size());
+ QCOMPARE_EQ(std::as_const(hash)[keyView], keys.size());
+ QCOMPARE_EQ(hash.find(keyView), hash.begin());
+ QCOMPARE_EQ(std::as_const(hash).find(keyView), hash.constBegin());
+ QCOMPARE_EQ(hash.constFind(keyView), hash.constBegin());
+ QCOMPARE_EQ(hash.equal_range(keyView), std::make_pair(hash.begin(), hash.end()));
+ QCOMPARE_EQ(std::as_const(hash).equal_range(keyView),
+ std::make_pair(hash.constBegin(), hash.constEnd()));
+ Helper::checkCounter();
+
+ QVERIFY(!hash.contains(otherKeyView));
+ QCOMPARE_EQ(hash.count(otherKeyView), 0);
+ QCOMPARE_EQ(hash.value(otherKeyView), 0);
+ QCOMPARE_EQ(hash.value(otherKeyView, -1), -1);
+ QCOMPARE_EQ(std::as_const(hash)[otherKeyView], 0);
+ QCOMPARE_EQ(hash.find(otherKeyView), hash.end());
+ QCOMPARE_EQ(std::as_const(hash).find(otherKeyView), hash.constEnd());
+ QCOMPARE_EQ(hash.constFind(otherKeyView), hash.constEnd());
+ QCOMPARE_EQ(hash.equal_range(otherKeyView), std::make_pair(hash.end(), hash.end()));
+ QCOMPARE_EQ(std::as_const(hash).equal_range(otherKeyView),
+ std::make_pair(hash.constEnd(), hash.constEnd()));
+ Helper::checkCounter();
+
+ // non-const versions
+ QCOMPARE_EQ(hash[keyView], keys.size()); // already there
+ Helper::checkCounter();
+
+ QCOMPARE_EQ(hash[otherKeyView], 0); // inserts
+ Helper::resetCounter();
+ hash[otherKeyView] = INT_MAX;
+ Helper::checkCounter();
+
+ if constexpr (IsMultiHash) {
+ hash.insert(key, keys.size());
+ QCOMPARE_EQ(hash.count(keyView), 2);
+
+ // not depending on which of the two the current implementation finds
+ QCOMPARE_NE(hash.value(keyView), 0);
+ QCOMPARE_NE(hash.value(keyView, -1000), -1000);
+ QCOMPARE_NE(std::as_const(hash)[keyView], 0);
+ QCOMPARE_NE(hash.find(keyView), hash.end());
+ QCOMPARE_NE(std::as_const(hash).find(keyView), hash.constEnd());
+ QCOMPARE_NE(hash.constFind(keyView), hash.constEnd());
+ QCOMPARE_NE(hash.equal_range(keyView), std::make_pair(hash.end(), hash.end()));
+ QCOMPARE_NE(std::as_const(hash).equal_range(keyView),
+ std::make_pair(hash.constEnd(), hash.constEnd()));
+
+ // QMultiHash-specific functions
+ QVERIFY(hash.contains(keyView, keys.size()));
+ QCOMPARE_EQ(hash.count(keyView, 0), 0);
+ QCOMPARE_EQ(hash.count(keyView, keys.size()), 2);
+ QCOMPARE_EQ(hash.values(keyView), QList<qsizetype>({ keys.size(), keys.size() }));
+
+ hash.insert(key, -keys.size());
+ QCOMPARE_EQ(hash.count(keyView), 3);
+ QCOMPARE_EQ(hash.find(keyView, 0), hash.end());
+ QCOMPARE_NE(hash.find(keyView, keys.size()), hash.end());
+ QCOMPARE_NE(hash.find(keyView, -keys.size()), hash.end());
+ QCOMPARE_EQ(std::as_const(hash).find(keyView, 0), hash.constEnd());
+ QCOMPARE_NE(std::as_const(hash).find(keyView, keys.size()), hash.constEnd());
+ QCOMPARE_NE(std::as_const(hash).find(keyView, -keys.size()), hash.constEnd());
+ QCOMPARE_EQ(hash.constFind(keyView, 0), hash.constEnd());
+ QCOMPARE_NE(hash.constFind(keyView, keys.size()), hash.constEnd());
+ QCOMPARE_NE(hash.constFind(keyView, -keys.size()), hash.constEnd());
+
+ // removals
+ QCOMPARE_EQ(hash.remove(keyView, -keys.size()), 1);
+ QCOMPARE_EQ(hash.remove(keyView), 2);
+ } else {
+ // removals
+ QCOMPARE_EQ(hash.remove(keyView), true);
+ }
+
+ QCOMPARE_EQ(hash.take(otherKeyView), INT_MAX);
+ QVERIFY(hash.isEmpty());
+ Helper::checkCounter();
+
+ // repeat with more keys
+ for (qsizetype i = 0; i < keys.size() - 1; ++i) {
+ hash.insert(keys[i], -(i + 1));
+ hash.insert(keys[i], i + 1);
+ }
+
+ QVERIFY(!hash.contains(keyView));
+ QCOMPARE_EQ(hash.count(keyView), 0);
+ QCOMPARE_EQ(hash.value(keyView), 0);
+ QCOMPARE_EQ(hash.value(keyView, -1), -1);
+ QCOMPARE_EQ(std::as_const(hash)[keyView], 0);
+ QCOMPARE_EQ(hash.find(keyView), hash.end());
+ QCOMPARE_EQ(hash.constFind(keyView), hash.constEnd());
+ Helper::checkCounter();
+#else
+ Q_UNUSED(keys);
+ Q_UNUSED(conv);
+ QSKIP("This feature requires C++20 (concepts)");
+#endif
+}
+
+template <template <typename, typename> class Hash, typename String, typename View>
+static void heterogeneousSearchTest(const QList<std::remove_const_t<String>> &keys)
+{
+ heterogeneousSearchTest<Hash, String, View>(keys, [](const String &s) { return View(s); });
+}
+
+template <template <typename, typename> class Hash, typename T>
+static void heterogeneousSearchLatin1String(T)
+{
+ if constexpr (!T::value) {
+ QSKIP("QLatin1StringView and QString do not have the same hash on this platform");
+ } else {
+ // similar to the above
+ auto toLatin1 = [](const QString &s) { return s.toLatin1(); };
+ heterogeneousSearchTest<Hash, QString, QLatin1StringView>({ "Hello", {}, "World" }, toLatin1);
+ }
+}
+
+void tst_QHash::heterogeneousSearch()
+{
+ heterogeneousSearchTest<QHash, QString, HeterogeneousHashingType>({ "Hello", {}, "World" });
+}
+
+void tst_QHash::heterogeneousSearchConstKey()
+{
+ // QHash<const QString, X> seen in the wild (e.g. Qt Creator)
+ heterogeneousSearchTest<QHash, const QString, HeterogeneousHashingType>({ "Hello", {}, "World" });
+}
+
+void tst_QHash::heterogeneousSearchByteArray()
+{
+ heterogeneousSearchTest<QHash, QByteArray, QByteArrayView>({ "Hello", {}, "World" });
+}
+
+void tst_QHash::heterogeneousSearchString()
+{
+ heterogeneousSearchTest<QHash, QString, QStringView>({ "Hello", {}, "World" });
+}
+
+void tst_QHash::heterogeneousSearchLatin1String()
+{
+ ::heterogeneousSearchLatin1String<QHash>(QHashHeterogeneousSearch<QString, QLatin1StringView>{});
+}
+
void tst_QHash::compare()
{
QHash<int, QString> hash1,hash2;
@@ -1647,9 +1877,9 @@ void tst_QHash::rehash_isnt_quadratic()
{
// this test should be incredibly slow if rehash() is quadratic
for (int j = 0; j < 5; ++j) {
- QMultiHash<int, int> testHash;
+ QHash<int, int> testHash;
for (int i = 0; i < 500000; ++i)
- testHash.insert(1, 1);
+ testHash.insert(i, 1);
}
}
@@ -1706,26 +1936,26 @@ void tst_QHash::qmultihash_specific()
}
QVERIFY(hash1.contains(9, 99));
- QCOMPARE(hash1.count(), 45);
+ QCOMPARE(hash1.size(), 45);
hash1.remove(9, 99);
QVERIFY(!hash1.contains(9, 99));
- QCOMPARE(hash1.count(), 44);
+ QCOMPARE(hash1.size(), 44);
hash1.remove(9, 99);
QVERIFY(!hash1.contains(9, 99));
- QCOMPARE(hash1.count(), 44);
+ QCOMPARE(hash1.size(), 44);
hash1.remove(1, 99);
- QCOMPARE(hash1.count(), 44);
+ QCOMPARE(hash1.size(), 44);
hash1.insert(1, 99);
hash1.insert(1, 99);
- QCOMPARE(hash1.count(), 46);
+ QCOMPARE(hash1.size(), 46);
hash1.remove(1, 99);
- QCOMPARE(hash1.count(), 44);
+ QCOMPARE(hash1.size(), 44);
hash1.remove(1, 99);
- QCOMPARE(hash1.count(), 44);
+ QCOMPARE(hash1.size(), 44);
{
QMultiHash<int, int>::const_iterator i = hash1.constFind(1, 11);
@@ -1771,10 +2001,10 @@ void tst_QHash::qmultihash_specific()
}
QCOMPARE(hash1.count(9), 8);
- QCOMPARE(hash1.count(), 44);
+ QCOMPARE(hash1.size(), 44);
hash1.remove(9);
QCOMPARE(hash1.count(9), 0);
- QCOMPARE(hash1.count(), 36);
+ QCOMPARE(hash1.size(), 36);
{
QMultiHash<int, int> map1;
@@ -1790,7 +2020,7 @@ void tst_QHash::qmultihash_specific()
map2.insert(42, 1);
map2.insert(10, 2);
map2.insert(48, 3);
- QCOMPARE(map1.count(), map2.count());
+ QCOMPARE(map1.size(), map2.size());
QVERIFY(map1.remove(42,5));
QVERIFY(map1 != map2);
QVERIFY(map2.remove(42,5));
@@ -1799,7 +2029,7 @@ void tst_QHash::qmultihash_specific()
QHash<int, int> hash;
hash.insert(-1, -1);
map2.unite(hash);
- QCOMPARE(map2.count(), 6);
+ QCOMPARE(map2.size(), 6);
QCOMPARE(map2[-1], -1);
}
}
@@ -2052,6 +2282,103 @@ void tst_QHash::qmultihashUnite()
}
}
+void tst_QHash::qmultihashSize()
+{
+ // QMultiHash has an extra m_size member that counts the number of values,
+ // while d->size (shared with QHash) counts the number of distinct keys.
+ {
+ QMultiHash<int, int> hash;
+ QCOMPARE(hash.size(), 0);
+ QVERIFY(hash.isEmpty());
+
+ hash.insert(0, 42);
+ QCOMPARE(hash.size(), 1);
+ QVERIFY(!hash.isEmpty());
+
+ hash.insert(0, 42);
+ QCOMPARE(hash.size(), 2);
+ QVERIFY(!hash.isEmpty());
+
+ hash.emplace(0, 42);
+ QCOMPARE(hash.size(), 3);
+ QVERIFY(!hash.isEmpty());
+
+ QCOMPARE(hash.take(0), 42);
+ QCOMPARE(hash.size(), 2);
+ QVERIFY(!hash.isEmpty());
+
+ QCOMPARE(hash.remove(0), 2);
+ QCOMPARE(hash.size(), 0);
+ QVERIFY(hash.isEmpty());
+ }
+
+ {
+ QMultiHash<int, int> hash;
+ hash.emplace(0, 0);
+ hash.emplace(0, 0);
+ QCOMPARE(hash.size(), 2);
+ QVERIFY(!hash.isEmpty());
+
+ hash.emplace(0, 1);
+ QCOMPARE(hash.size(), 3);
+ QVERIFY(!hash.isEmpty());
+
+ QCOMPARE(hash.remove(0, 0), 2);
+ QCOMPARE(hash.size(), 1);
+ QVERIFY(!hash.isEmpty());
+
+ hash.remove(0);
+ QCOMPARE(hash.size(), 0);
+ QVERIFY(hash.isEmpty());
+ }
+
+ {
+ QMultiHash<int, int> hash;
+
+ hash[0] = 0;
+ QCOMPARE(hash.size(), 1);
+ QVERIFY(!hash.isEmpty());
+
+ hash.replace(0, 1);
+ QCOMPARE(hash.size(), 1);
+ QVERIFY(!hash.isEmpty());
+
+ hash.insert(0, 1);
+ hash.erase(hash.cbegin());
+ QCOMPARE(hash.size(), 1);
+ QVERIFY(!hash.isEmpty());
+
+ hash.erase(hash.cbegin());
+ QCOMPARE(hash.size(), 0);
+ QVERIFY(hash.isEmpty());
+ }
+}
+
+void tst_QHash::qmultihashHeterogeneousSearch()
+{
+ heterogeneousSearchTest<QMultiHash, QString, HeterogeneousHashingType>({ "Hello", {}, "World" });
+}
+
+void tst_QHash::qmultihashHeterogeneousSearchConstKey()
+{
+ heterogeneousSearchTest<QMultiHash, const QString, HeterogeneousHashingType>({ "Hello", {}, "World" });
+}
+
+void tst_QHash::qmultihashHeterogeneousSearchByteArray()
+{
+ heterogeneousSearchTest<QMultiHash, QByteArray, QByteArrayView>({ "Hello", {}, "World" });
+}
+
+void tst_QHash::qmultihashHeterogeneousSearchString()
+{
+ heterogeneousSearchTest<QMultiHash, QString, QStringView>({ "Hello", {}, "World" });
+}
+
+void tst_QHash::qmultihashHeterogeneousSearchLatin1String()
+{
+ ::heterogeneousSearchLatin1String<QMultiHash>(QHashHeterogeneousSearch<QString, QLatin1StringView>{});
+}
+
void tst_QHash::keys_values_uniqueKeys()
{
QMultiHash<QString, int> hash;
@@ -2186,7 +2513,7 @@ void tst_QHash::twoArguments_qHash()
void tst_QHash::initializerList()
{
QHash<int, QString> hash = {{1, "bar"}, {1, "hello"}, {2, "initializer_list"}};
- QCOMPARE(hash.count(), 2);
+ QCOMPARE(hash.size(), 2);
QCOMPARE(hash[1], QString("hello"));
QCOMPARE(hash[2], QString("initializer_list"));
@@ -2196,9 +2523,9 @@ void tst_QHash::initializerList()
// QCOMPARE(stdh[1], QString("bar"));
QMultiHash<QString, int> multiHash{{"il", 1}, {"il", 2}, {"il", 3}};
- QCOMPARE(multiHash.count(), 3);
+ QCOMPARE(multiHash.size(), 3);
QList<int> values = multiHash.values("il");
- QCOMPARE(values.count(), 3);
+ QCOMPARE(values.size(), 3);
QHash<int, int> emptyHash{};
QVERIFY(emptyHash.isEmpty());
@@ -2370,7 +2697,7 @@ void tst_QHash::insert_hash()
hash.insert(hash2);
- QCOMPARE(hash.count(), 5);
+ QCOMPARE(hash.size(), 5);
for (int i = 0; i < 5; ++i)
QCOMPARE(hash[i], i);
}
@@ -2382,7 +2709,7 @@ void tst_QHash::insert_hash()
hash.insert(hash2);
- QCOMPARE(hash.count(), 1);
+ QCOMPARE(hash.size(), 1);
QCOMPARE(hash[0], 5);
}
{
@@ -2392,7 +2719,7 @@ void tst_QHash::insert_hash()
hash.insert(hash2);
- QCOMPARE(hash.count(), 1);
+ QCOMPARE(hash.size(), 1);
QCOMPARE(hash[0], 5);
QCOMPARE(hash, hash2);
}
@@ -2405,13 +2732,31 @@ void tst_QHash::insert_hash()
// insert into ourself, nothing should happen
hash.insert(hash);
- QCOMPARE(hash.count(), 3);
+ QCOMPARE(hash.size(), 3);
QCOMPARE(hash[0], 7);
QCOMPARE(hash[2], 5);
QCOMPARE(hash[7], 55);
}
}
+void tst_QHash::multiHashStoresInReverseInsertionOrder()
+{
+ const QString strings[] = {
+ u"zero"_s,
+ u"null"_s,
+ u"nada"_s,
+ };
+ {
+ QMultiHash<int, QString> hash;
+ for (const QString &string : strings)
+ hash.insert(0, string);
+ auto printOnFailure = qScopeGuard([&] { qDebug() << hash; });
+ QVERIFY(std::equal(hash.begin(), hash.end(),
+ std::rbegin(strings), std::rend(strings)));
+ printOnFailure.dismiss();
+ }
+}
+
void tst_QHash::emplace()
{
{
@@ -2579,13 +2924,13 @@ void tst_QHash::countInEmptyHash()
{
{
QHash<int, int> hash;
- QCOMPARE(hash.count(), 0);
+ QCOMPARE(hash.size(), 0);
QCOMPARE(hash.count(42), 0);
}
{
QMultiHash<int, int> hash;
- QCOMPARE(hash.count(), 0);
+ QCOMPARE(hash.size(), 0);
QCOMPARE(hash.count(42), 0);
QCOMPARE(hash.count(42, 1), 0);
}
@@ -2666,6 +3011,70 @@ void tst_QHash::reserveShared()
QCOMPARE(hash.capacity(), oldCap);
}
+void tst_QHash::reserveLessThanCurrentAmount()
+{
+ {
+ QHash<int, int> hash;
+ for (int i = 0; i < 1000; ++i)
+ hash.insert(i, i * 10);
+
+ // This used to hang in an infinite loop: QTBUG-102067
+ hash.reserve(1);
+
+ // Make sure that hash still has all elements
+ for (int i = 0; i < 1000; ++i)
+ QCOMPARE(hash.value(i), i * 10);
+ }
+ {
+ QMultiHash<int, int> hash;
+ for (int i = 0; i < 1000; ++i) {
+ hash.insert(i, i * 10);
+ hash.insert(i, i * 10 + 1);
+ }
+
+ // This used to hang in infinite loop: QTBUG-102067
+ hash.reserve(1);
+
+ // Make sure that hash still has all elements
+ for (int i = 0; i < 1000; ++i)
+ QCOMPARE(hash.values(i), QList<int>({ i * 10 + 1, i * 10 }));
+ }
+}
+
+void tst_QHash::reserveKeepCapacity_data()
+{
+ QTest::addColumn<qsizetype>("requested");
+ auto addRow = [](qsizetype requested) {
+ QTest::addRow("%td", ptrdiff_t(requested)) << requested;
+ };
+
+ QHash<int, int> testHash = {{1, 1}};
+ qsizetype minCapacity = testHash.capacity();
+ addRow(minCapacity - 1);
+ addRow(minCapacity + 0);
+ addRow(minCapacity + 1);
+ addRow(2 * minCapacity - 1);
+ addRow(2 * minCapacity + 0);
+ addRow(2 * minCapacity + 1);
+}
+
+void tst_QHash::reserveKeepCapacity()
+{
+ QFETCH(qsizetype, requested);
+
+ QHash<qsizetype, qsizetype> hash;
+ hash.reserve(requested);
+ qsizetype initialCapacity = hash.capacity();
+ QCOMPARE_GE(initialCapacity, requested);
+
+ // insert this many elements into the hash
+ for (qsizetype i = 0; i < requested; ++i)
+ hash.insert(i, i);
+
+ // it mustn't have increased capacity after inserting the elements
+ QCOMPARE(hash.capacity(), initialCapacity);
+}
+
void tst_QHash::QTBUG98265()
{
QMultiHash<QUuid, QByteArray> a;
@@ -2684,9 +3093,6 @@ void tst_QHash::QTBUG98265()
*/
void tst_QHash::detachAndReferences()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires cxx11_future")
-#else
// Repeat a few times because it's not a guarantee
for (int i = 0; i < 50; ++i) {
QHash<char, char> hash;
@@ -2724,7 +3130,6 @@ void tst_QHash::detachAndReferences()
QVERIFY(hash.contains(kCopy));
QCOMPARE(hash.value(kCopy), vCopy);
}
-#endif
}
void tst_QHash::lookupUsingKeyIterator()
@@ -2736,11 +3141,101 @@ void tst_QHash::lookupUsingKeyIterator()
qsizetype rehashLimit = minCapacity == 64 ? 63 : 8;
for (char16_t c = u'a'; c <= u'a' + rehashLimit; ++c)
- hash.insert(QString(QChar(c)), u"h"_qs);
+ hash.insert(QString(QChar(c)), u"h"_s);
for (auto it = hash.keyBegin(), end = hash.keyEnd(); it != end; ++it)
QVERIFY(!hash[*it].isEmpty());
}
+void tst_QHash::squeeze()
+{
+ {
+ QHash<int, int> hash;
+ hash.reserve(1000);
+ for (int i = 0; i < 10; ++i)
+ hash.insert(i, i * 10);
+ QVERIFY(hash.isDetached());
+ const size_t buckets = hash.bucket_count();
+ const qsizetype size = hash.size();
+
+ hash.squeeze();
+
+ QVERIFY(hash.bucket_count() < buckets);
+ QCOMPARE(hash.size(), size);
+ for (int i = 0; i < size; ++i)
+ QCOMPARE(hash.value(i), i * 10);
+ }
+ {
+ QMultiHash<int, int> hash;
+ hash.reserve(1000);
+ for (int i = 0; i < 10; ++i) {
+ hash.insert(i, i * 10);
+ hash.insert(i, i * 10 + 1);
+ }
+ QVERIFY(hash.isDetached());
+ const size_t buckets = hash.bucket_count();
+ const qsizetype size = hash.size();
+
+ hash.squeeze();
+
+ QVERIFY(hash.bucket_count() < buckets);
+ QCOMPARE(hash.size(), size);
+ for (int i = 0; i < (size / 2); ++i)
+ QCOMPARE(hash.values(i), QList<int>({ i * 10 + 1, i * 10 }));
+ }
+}
+
+void tst_QHash::squeezeShared()
+{
+ {
+ QHash<int, int> hash;
+ hash.reserve(1000);
+ for (int i = 0; i < 10; ++i)
+ hash.insert(i, i * 10);
+
+ QHash<int, int> other = hash;
+
+ // Check that when squeezing a hash with shared d_ptr, the number of
+ // buckets actually decreases.
+ QVERIFY(!other.isDetached());
+ const size_t buckets = other.bucket_count();
+ const qsizetype size = other.size();
+
+ other.squeeze();
+
+ QCOMPARE(hash.bucket_count(), buckets);
+ QVERIFY(other.bucket_count() < buckets);
+
+ QCOMPARE(other.size(), size);
+ for (int i = 0; i < size; ++i)
+ QCOMPARE(other.value(i), i * 10);
+ }
+ {
+ QMultiHash<int, int> hash;
+ hash.reserve(1000);
+ for (int i = 0; i < 10; ++i) {
+ hash.insert(i, i * 10);
+ hash.insert(i, i * 10 + 1);
+ }
+
+ QMultiHash<int, int> other = hash;
+
+ // Check that when squeezing a hash with shared d_ptr, the number of
+ // buckets actually decreases.
+ QVERIFY(!other.isDetached());
+ const size_t buckets = other.bucket_count();
+ const qsizetype size = other.size();
+
+ other.squeeze();
+
+ QCOMPARE(hash.bucket_count(), buckets);
+ QVERIFY(other.bucket_count() < buckets);
+
+ QCOMPARE(other.size(), size);
+ for (int i = 0; i < (size / 2); ++i)
+ QCOMPARE(other.values(i), QList<int>({ i * 10 + 1, i * 10 }));
+ }
+}
+
QTEST_APPLESS_MAIN(tst_QHash)
#include "tst_qhash.moc"
diff --git a/tests/auto/corelib/tools/qhashfunctions/CMakeLists.txt b/tests/auto/corelib/tools/qhashfunctions/CMakeLists.txt
index 86d4207d6e..6cbba503dc 100644
--- a/tests/auto/corelib/tools/qhashfunctions/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qhashfunctions/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qhashfunctions.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qhashfunctions Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhashfunctions LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qhashfunctions
SOURCES
tst_qhashfunctions.cpp
diff --git a/tests/auto/corelib/tools/qhashfunctions/tst_qhashfunctions.cpp b/tests/auto/corelib/tools/qhashfunctions/tst_qhashfunctions.cpp
index 3281c4cefd..00ee5763ed 100644
--- a/tests/auto/corelib/tools/qhashfunctions/tst_qhashfunctions.cpp
+++ b/tests/auto/corelib/tools/qhashfunctions/tst_qhashfunctions.cpp
@@ -1,34 +1,12 @@
-/****************************************************************************
-**
-** 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.
+// Copyright (C) 2024 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
+#include <QVarLengthArray>
#include <qhash.h>
+#include <qfloat16.h>
#include <iterator>
#include <sstream>
@@ -40,11 +18,11 @@ class tst_QHashFunctions : public QObject
{
Q_OBJECT
public:
- enum {
- // random value
- RandomSeed = 1045982819
- };
- uint seed;
+ // random values
+ static constexpr quint64 ZeroSeed = 0;
+ static constexpr quint64 RandomSeed32 = 1045982819;
+ static constexpr quint64 RandomSeed64 = QtPrivate::QHashCombine{}(RandomSeed32, RandomSeed32);
+ size_t seed;
template <typename T1, typename T2> void stdPair_template(const T1 &t1, const T2 &t2);
@@ -53,7 +31,15 @@ public slots:
void init();
private Q_SLOTS:
- void consistent();
+ void unsignedIntegerConsistency_data();
+ void unsignedIntegerConsistency();
+ void signedIntegerConsistency_data();
+ void signedIntegerConsistency();
+ void extendedIntegerConsistency();
+ void floatingPointConsistency_data();
+ void floatingPointConsistency();
+ void stringConsistency_data();
+ void stringConsistency();
void qhash();
void qhash_of_empty_and_null_qstring();
void qhash_of_empty_and_null_qbytearray();
@@ -77,29 +63,277 @@ private Q_SLOTS:
void stdPair_string_pairIntInt() { stdPair_template(QString("Hello"), std::make_pair(42, -47)); } // QTBUG-92910
void stdPair_int_pairIntPairIntInt() { stdPair_template(1, std::make_pair(2, std::make_pair(3, 4))); }
+ void enum_int_consistent_hash_qtbug108032();
+
+#if QT_DEPRECATED_SINCE(6, 6)
void setGlobalQHashSeed();
+#endif
};
-void tst_QHashFunctions::consistent()
+void tst_QHashFunctions::initTestCase()
{
- // QString-like
- const QString s = QStringLiteral("abcdefghijklmnopqrstuvxyz").repeated(16);
- QCOMPARE(qHash(s), qHash(QStringView(s)));
+ QTest::addColumn<quint64>("seedValue");
+
+ QTest::newRow("zero-seed") << ZeroSeed;
+ QTest::newRow("zero-seed-negated") << ~ZeroSeed;
+ QTest::newRow("non-zero-seed-32bit") << RandomSeed32;
+ QTest::newRow("non-zero-seed-32bit-negated")
+ << quint64{~quint32(RandomSeed32)}; // ensure this->seed gets same value on 32/64-bit
+ if constexpr (sizeof(size_t) == sizeof(quint64)) {
+ QTest::newRow("non-zero-seed-64bit") << RandomSeed64;
+ QTest::newRow("non-zero-seed-64bit-negated") << ~RandomSeed64;
+ }
}
-void tst_QHashFunctions::initTestCase()
+void tst_QHashFunctions::init()
{
- static_assert(int(RandomSeed) > 0);
+ QFETCH_GLOBAL(quint64, seedValue);
+ seed = size_t(seedValue);
+}
- QTest::addColumn<uint>("seedValue");
- QTest::newRow("zero-seed") << 0U;
- QTest::newRow("non-zero-seed") << uint(RandomSeed);
+template <typename T> static void addPositiveCommonRows()
+{
+ QTest::addRow("zero") << T(0);
+ QTest::addRow("positive_7bit") << T(42);
+ QTest::addRow("positive_15bit") << T(0x1f3f);
+ QTest::addRow("positive_31bit") << T(0x4b3d'93c4);
+ QTest::addRow("positive_63bit") << T(Q_INT64_C(0x39df'7338'4b14'fcb0));
+
+ QTest::addRow("SCHAR_MAX") << T(SCHAR_MAX);
+ QTest::addRow("SHRT_MAX") << T(SHRT_MAX);
+ QTest::addRow("INT_MAX") << T(INT_MAX);
+ QTest::addRow("LLONG_MAX") << T(LLONG_MAX);
}
-void tst_QHashFunctions::init()
+void tst_QHashFunctions::signedIntegerConsistency_data()
+{
+ QTest::addColumn<qint64>("value");
+ addPositiveCommonRows<qint64>();
+ QTest::addRow("negative_7bit") << Q_INT64_C(-28);
+ QTest::addRow("negative_15bit") << Q_INT64_C(-0x387c);
+ QTest::addRow("negative_31bit") << qint64(-0x7713'30f9);
+
+ QTest::addRow("SCHAR_MIN") << qint64(SCHAR_MIN);
+ QTest::addRow("SHRT_MIN") << qint64(SHRT_MIN);
+ QTest::addRow("INT_MIN") << qint64(INT_MIN);
+ QTest::addRow("LLONG_MIN") << LLONG_MIN;
+}
+
+void tst_QHashFunctions::unsignedIntegerConsistency_data()
+{
+ QTest::addColumn<quint64>("value");
+ addPositiveCommonRows<quint64>();
+
+ QTest::addRow("positive_8bit") << Q_UINT64_C(0xE4);
+ QTest::addRow("positive_16bit") << Q_UINT64_C(0xcafe);
+ QTest::addRow("positive_32bit") << quint64(0xcafe'babe);
+
+ QTest::addRow("UCHAR_MAX") << quint64(UCHAR_MAX);
+ QTest::addRow("UHRT_MAX") << quint64(USHRT_MAX);
+ QTest::addRow("UINT_MAX") << quint64(UINT_MAX);
+ QTest::addRow("ULLONG_MAX") << ULLONG_MAX;
+}
+
+static void unsignedIntegerConsistency(quint64 value, size_t seed)
{
- QFETCH_GLOBAL(uint, seedValue);
- seed = seedValue;
+ quint8 v8 = quint8(value);
+ quint16 v16 = quint16(value);
+ quint32 v32 = quint32(value);
+
+ const auto hu8 = qHash(v8, seed);
+ const auto hu16 = qHash(v16, seed);
+ const auto hu32 = qHash(v32, seed);
+ const auto hu64 = qHash(value, seed);
+
+ if (v8 == value)
+ QCOMPARE(hu8, hu32);
+ if (v16 == value)
+ QCOMPARE(hu16, hu32);
+ if (v32 == value)
+ QCOMPARE(hu64, hu32);
+
+#if QT_SUPPORTS_INT128
+ const auto hu128 = qHash(quint128(value), seed);
+ QCOMPARE(hu128, hu64);
+#endif
+
+ // there are a few more unsigned types:
+#ifdef __cpp_char8_t
+ const auto hc8 = qHash(char8_t(value), seed);
+#endif
+ const auto hc16 = qHash(char16_t(value), seed);
+ const auto hc32 = qHash(char32_t(value), seed);
+#ifdef __cpp_char8_t
+ QCOMPARE(hc8, hu8);
+#endif
+ QCOMPARE(hc16, hu16);
+ QCOMPARE(hc32, hu32);
+}
+
+void tst_QHashFunctions::unsignedIntegerConsistency()
+{
+ QFETCH(quint64, value);
+ ::unsignedIntegerConsistency(value, seed);
+}
+
+void tst_QHashFunctions::signedIntegerConsistency()
+{
+ QFETCH(qint64, value);
+ qint8 v8 = qint8(value);
+ qint16 v16 = qint16(value);
+ qint32 v32 = qint32(value);
+
+ const auto hs8 = qHash(v8, seed);
+ const auto hs16 = qHash(v16, seed);
+ const auto hs32 = qHash(v32, seed);
+ const auto hs64 = qHash(value, seed);
+
+ if (v8 == value)
+ QCOMPARE(hs8, hs32);
+ if (v16 == value)
+ QCOMPARE(hs16, hs32);
+ if (v32 == value) {
+ // because of QTBUG-116080, this may not match, but we can't guarantee
+ // it mismatches 100% of the time either
+ if constexpr (sizeof(size_t) > sizeof(int) || QT_VERSION_MAJOR > 6)
+ QCOMPARE(hs64, hs32);
+ }
+
+#if QT_SUPPORTS_INT128
+ const auto hs128 = qHash(qint128(value), seed);
+ QCOMPARE(hs128, hs64);
+#endif
+
+ if (value > 0) {
+ quint64 u64 = quint64(value);
+ const auto hu64 = qHash(u64, seed);
+ QCOMPARE(hu64, hs64);
+ ::unsignedIntegerConsistency(u64, seed);
+ // by A == B && B == C -> A == C, we've shown hsXX == huXX for all XX
+ }
+}
+
+void tst_QHashFunctions::extendedIntegerConsistency()
+{
+#ifdef QT_SUPPORTS_INT128
+ // We only need to check qint128 and quint128 consistency here.
+ qint128 v65bit = Q_INT128_C(0x1'abea'06b7'dcf5'106a);
+ qint128 v127bit = Q_INT128_C(0x387c'ac7a'22a0'5242'9ee9'bcaa'6a53'13af);
+
+ QCOMPARE(qHash(quint128(v65bit), seed), qHash(v65bit, seed));
+ QCOMPARE(qHash(quint128(v127bit), seed), qHash(v127bit, seed));
+#else
+ QSKIP("This platform does not support extended integer types.");
+#endif
+}
+
+void tst_QHashFunctions::floatingPointConsistency_data()
+{
+ QTest::addColumn<double>("value");
+ QTest::addRow("zero") << 0.0;
+
+ QTest::addRow("1.0") << 1.0;
+ QTest::addRow("infinity") << std::numeric_limits<double>::infinity();
+
+ QTest::addRow("fp16_epsilon") << double(std::numeric_limits<qfloat16>::epsilon());
+ QTest::addRow("fp16_min") << double(std::numeric_limits<qfloat16>::min());
+ QTest::addRow("fp16_max") << double(std::numeric_limits<qfloat16>::max());
+
+ QTest::addRow("float_epsilon") << double(std::numeric_limits<float>::epsilon());
+ QTest::addRow("float_min") << double(std::numeric_limits<float>::min());
+ QTest::addRow("float_max") << double(std::numeric_limits<float>::max());
+
+ QTest::addRow("double_epsilon") << double(std::numeric_limits<double>::epsilon());
+ QTest::addRow("double_min") << double(std::numeric_limits<double>::min());
+ QTest::addRow("double_max") << double(std::numeric_limits<double>::max());
+}
+
+void tst_QHashFunctions::floatingPointConsistency()
+{
+ QFETCH(double, value);
+ long double lvalue = value;
+ float fp32 = float(value);
+ qfloat16 fp16 = qfloat16(value);
+
+ const auto hfld = qHash(lvalue, seed);
+ const auto hf64 = qHash(value, seed);
+ const auto hf32 = qHash(fp32, seed);
+ const auto hf16 = qHash(fp16, seed);
+
+ const auto hnfld = qHash(-lvalue, seed);
+ const auto hnf64 = qHash(-value, seed);
+ const auto hnf32 = qHash(-fp32, seed);
+ const auto hnf16 = qHash(-fp16, seed);
+
+ if (fp16 == fp32) {
+ QCOMPARE(hf16, hf32);
+ QCOMPARE(hnf16, hnf32);
+ }
+
+ // See QTBUG-116077; the rest isn't guaranteed to match (but we can't
+ // guarantee it will mismatch either).
+ return;
+
+ if (fp32 == value) {
+ QCOMPARE(hf32, hf64);
+ QCOMPARE(hnf32, hnf64);
+ }
+
+ QCOMPARE(hfld, hf64);
+ QCOMPARE(hnfld, hnf64);
+}
+
+void tst_QHashFunctions::stringConsistency_data()
+{
+ QTest::addColumn<QString>("value");
+ QTest::newRow("null") << QString();
+ QTest::newRow("empty") << "";
+ QTest::newRow("withnull") << QStringLiteral("A\0z");
+ QTest::newRow("short-ascii") << "Hello"; // 10 bytes
+ QTest::newRow("medium-ascii") << "Hello, World"; // 24 bytes
+ QTest::newRow("long-ascii") << QStringLiteral("abcdefghijklmnopqrstuvxyz").repeated(16);
+
+ QTest::newRow("short-latin1") << "Bokmål";
+ QTest::newRow("medium-latin1") << "Det går bra!"; // 24 bytes
+ QTest::newRow("long-latin1")
+ << R"(Alle mennesker er født frie og med samme menneskeverd og menneskerettigheter.
+ De er utstyrt med fornuft og samvittighet og bør handle mot hverandre i brorskapets ånd.)";
+
+ QTest::newRow("short-nonlatin1") << "Ελληνικά";
+ QTest::newRow("long-nonlatin1")
+ << R"('Ολοι οι άνθÏωποι γεννιοÏνται ελεÏθεÏοι και ίσοι στην αξιοπÏέπεια και τα
+ δικαιώματα. Είναι Ï€Ïοικισμένοι με λογική και συνείδηση, και οφείλουν να συμπεÏιφέÏονται μεταξÏ
+ τους με πνεÏμα αδελφοσÏνης.)";
+}
+
+void tst_QHashFunctions::stringConsistency()
+{
+ QFETCH(QString, value);
+ QStringView sv = value;
+ QByteArray u8ba = value.toUtf8();
+ QByteArray u8bav = u8ba;
+
+ // sanity checking:
+ QCOMPARE(sv.isNull(), value.isNull());
+ QCOMPARE(sv.isEmpty(), value.isEmpty());
+ QCOMPARE(u8ba.isNull(), value.isNull());
+ QCOMPARE(u8ba.isEmpty(), value.isEmpty());
+ QCOMPARE(u8bav.isNull(), value.isNull());
+ QCOMPARE(u8bav.isEmpty(), value.isEmpty());
+
+ QCOMPARE(qHash(sv, seed), qHash(value, seed));
+ QCOMPARE(qHash(u8bav, seed), qHash(u8ba, seed));
+
+ if (seed == 0 || QHashHeterogeneousSearch<QString, QLatin1StringView>::value) {
+ QByteArray l1ba = value.toLatin1();
+ QLatin1StringView l1sv(l1ba.data(), l1ba.size());
+#ifdef Q_PROCESSOR_ARM
+ // zero-extending aeshash not implemented on ARM
+#else
+ if (value == l1sv)
+ QCOMPARE(qHash(l1sv, seed), qHash(value, seed));
+#endif
+ }
}
void tst_QHashFunctions::qhash()
@@ -202,9 +436,7 @@ void tst_QHashFunctions::qhash_of_zero_floating_points()
{
QCOMPARE(qHash(-0.0f, seed), qHash(0.0f, seed));
QCOMPARE(qHash(-0.0 , seed), qHash(0.0 , seed));
-#ifndef Q_OS_DARWIN
QCOMPARE(qHash(-0.0L, seed), qHash(0.0L, seed));
-#endif
}
void tst_QHashFunctions::qthash_data()
@@ -374,13 +606,9 @@ void tst_QHashFunctions::stdPair_template(const T1 &t1, const T2 &t2)
std::pair<T1, T2> dpair{};
std::pair<T1, T2> vpair{t1, t2};
- size_t seed = QHashSeed::globalSeed();
-
// confirm proper working of the pair and of the underlying types
QVERIFY(t1 == t1);
QVERIFY(t2 == t2);
- QCOMPARE(qHash(t1), qHash(t1));
- QCOMPARE(qHash(t2), qHash(t2));
QCOMPARE(qHash(t1, seed), qHash(t1, seed));
QCOMPARE(qHash(t2, seed), qHash(t2, seed));
@@ -388,14 +616,25 @@ void tst_QHashFunctions::stdPair_template(const T1 &t1, const T2 &t2)
QVERIFY(vpair == vpair);
// therefore their hashes should be equal
- QCOMPARE(qHash(dpair), qHash(dpair));
QCOMPARE(qHash(dpair, seed), qHash(dpair, seed));
- QCOMPARE(qHash(vpair), qHash(vpair));
QCOMPARE(qHash(vpair, seed), qHash(vpair, seed));
}
+void tst_QHashFunctions::enum_int_consistent_hash_qtbug108032()
+{
+ enum E { E1, E2, E3 };
+
+ static_assert(QHashPrivate::HasQHashSingleArgOverload<E>);
+
+ QCOMPARE(qHash(E1, seed), qHash(int(E1), seed));
+ QCOMPARE(qHash(E2, seed), qHash(int(E2), seed));
+ QCOMPARE(qHash(E3, seed), qHash(int(E3), seed));
+}
+
+#if QT_DEPRECATED_SINCE(6, 6)
void tst_QHashFunctions::setGlobalQHashSeed()
{
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
// Setter works as advertised
qSetGlobalQHashSeed(0);
QCOMPARE(qGlobalQHashSeed(), 0);
@@ -408,7 +647,9 @@ void tst_QHashFunctions::setGlobalQHashSeed()
// Reset works as advertised
qSetGlobalQHashSeed(-1);
QVERIFY(qGlobalQHashSeed() > 0);
+QT_WARNING_POP
}
+#endif // QT_DEPRECATED_SINCE(6, 6)
QTEST_APPLESS_MAIN(tst_QHashFunctions)
#include "tst_qhashfunctions.moc"
diff --git a/tests/auto/corelib/tools/qhashseed/CMakeLists.txt b/tests/auto/corelib/tools/qhashseed/CMakeLists.txt
index bc40c63b3e..27b4cce133 100644
--- a/tests/auto/corelib/tools/qhashseed/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qhashseed/CMakeLists.txt
@@ -1,7 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qhashseed Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhashseed LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qhashseed
SOURCES
tst_qhashseed.cpp
diff --git a/tests/auto/corelib/tools/qhashseed/tst_qhashseed.cpp b/tests/auto/corelib/tools/qhashseed/tst_qhashseed.cpp
index f91ecced76..99fc7c5772 100644
--- a/tests/auto/corelib/tools/qhashseed/tst_qhashseed.cpp
+++ b/tests/auto/corelib/tools/qhashseed/tst_qhashseed.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 Intel Corporation.
-** 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) 2021 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/corelib/tools/qhashseed/tst_qhashseed_helper.cpp b/tests/auto/corelib/tools/qhashseed/tst_qhashseed_helper.cpp
index 752228e5a1..25e7909870 100644
--- a/tests/auto/corelib/tools/qhashseed/tst_qhashseed_helper.cpp
+++ b/tests/auto/corelib/tools/qhashseed/tst_qhashseed_helper.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 Intel Corporation.
-** 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) 2021 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qhashfunctions.h>
#include <stdio.h>
diff --git a/tests/auto/corelib/tools/qline/CMakeLists.txt b/tests/auto/corelib/tools/qline/CMakeLists.txt
index 49253ff06c..17a3a1bcef 100644
--- a/tests/auto/corelib/tools/qline/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qline/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qline.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qline Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qline LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qline
SOURCES
tst_qline.cpp
@@ -13,6 +20,6 @@ qt_internal_add_test(tst_qline
#####################################################################
qt_internal_extend_target(tst_qline CONDITION UNIX AND NOT APPLE AND NOT HAIKU AND NOT INTEGRITY AND NOT VXWORKS
- PUBLIC_LIBRARIES
+ LIBRARIES
m
)
diff --git a/tests/auto/corelib/tools/qline/tst_qline.cpp b/tests/auto/corelib/tools/qline/tst_qline.cpp
index ad8438dfe9..51f1f8ac79 100644
--- a/tests/auto/corelib/tools/qline/tst_qline.cpp
+++ b/tests/auto/corelib/tools/qline/tst_qline.cpp
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qline.h>
#include <qmath.h>
+#include <array>
+
class tst_QLine : public QObject
{
Q_OBJECT
@@ -58,6 +35,9 @@ private slots:
void testAngleTo_data();
void testSet();
+
+ void toLineF_data();
+ void toLineF();
};
const qreal epsilon = sizeof(qreal) == sizeof(double) ? 1e-8 : 1e-4;
@@ -269,6 +249,13 @@ void tst_QLine::testLength()
QCOMPARE(l.length(), qreal(length));
l.setLength(lengthToSet);
+
+ if constexpr (std::numeric_limits<double>::has_denorm != std::denorm_present) {
+ if (qstrcmp(QTest::currentDataTag(), "[tiny,tiny]->|2| (-tiny/2,-tiny/2)") == 0
+ || qstrcmp(QTest::currentDataTag(), "[4e-323,5e-324]|1892|") == 0) {
+ QSKIP("Skipping 'denorm' as this type lacks denormals on this system");
+ }
+ }
// Scaling tiny values up to big can be imprecise: don't try to test vx, vy
if (length > 0 && qFuzzyIsNull(length)) {
QVERIFY(l.length() > lengthToSet / 2 && l.length() < lengthToSet * 2);
@@ -495,5 +482,35 @@ void tst_QLine::testAngleTo_data()
}
}
+void tst_QLine::toLineF_data()
+{
+ QTest::addColumn<QLine>("input");
+ QTest::addColumn<QLineF>("result");
+
+ auto row = [](int x1, int y1, int x2, int y2) {
+ QTest::addRow("((%d, %d)->(%d, %d))", x1, y1, x2, y2)
+ << QLine(x1, y1, x2, y2) << QLineF(x1, y1, x2, y2);
+ };
+ constexpr std::array samples = {-1, 0, 1};
+ for (int x1 : samples) {
+ for (int y1 : samples) {
+ for (int x2 : samples) {
+ for (int y2 : samples) {
+ row(x1, y1, x2, y2);
+ }
+ }
+ }
+ }
+}
+
+void tst_QLine::toLineF()
+{
+ QFETCH(const QLine, input);
+ QFETCH(const QLineF, result);
+
+ QCOMPARE(input.toLineF(), result);
+}
+
+
QTEST_MAIN(tst_QLine)
#include "tst_qline.moc"
diff --git a/tests/auto/corelib/tools/qlist/CMakeLists.txt b/tests/auto/corelib/tools/qlist/CMakeLists.txt
index 89b92ab305..fdcfcd7424 100644
--- a/tests/auto/corelib/tools/qlist/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qlist/CMakeLists.txt
@@ -1,12 +1,21 @@
-# Generated from qlist.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qlist Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qlist LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qlist
SOURCES
tst_qlist.cpp
+ LIBRARIES
+ Qt::CorePrivate
)
## Scopes:
diff --git a/tests/auto/corelib/tools/qlist/tst_qlist.cpp b/tests/auto/corelib/tools/qlist/tst_qlist.cpp
index f40370bfb8..35d69e8433 100644
--- a/tests/auto/corelib/tools/qlist/tst_qlist.cpp
+++ b/tests/auto/corelib/tools/qlist/tst_qlist.cpp
@@ -1,43 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QAtomicInt>
#include <QThread>
#include <QSemaphore>
-#include <QScopedValueRollback>
+#include <QAtomicScopedValueRollback>
#include <qlist.h>
-#if __cplusplus >= 202002L && (!defined(_GLIBCXX_RELEASE) || _GLIBCXX_RELEASE >= 11)
+#ifdef QT_COMPILER_HAS_LWG3346
# if __has_include(<concepts>)
# include <concepts>
-# if defined(__cpp_concepts)
+# if defined(__cpp_lib_concepts) && __cpp_lib_concepts >= 202002L
static_assert(std::contiguous_iterator<QList<int>::iterator>);
static_assert(std::contiguous_iterator<QList<int>::const_iterator>);
# endif
@@ -256,6 +231,16 @@ private slots:
void appendCustom() const { append<Custom>(); }
void appendRvalue() const;
void appendList() const;
+ void assignEmpty() const;
+ void assignInt() const { assign<int>(); }
+ void assignMovable() const { assign<Movable>(); }
+ void assignCustom() const { assign<Custom>(); }
+ void assignUsesPrependBuffer_int_data() { assignUsesPrependBuffer_data(); }
+ void assignUsesPrependBuffer_int() const { assignUsesPrependBuffer<int>(); }
+ void assignUsesPrependBuffer_Movable_data() { assignUsesPrependBuffer_data(); }
+ void assignUsesPrependBuffer_Movable() const { assignUsesPrependBuffer<Movable>(); }
+ void assignUsesPrependBuffer_Custom_data() { assignUsesPrependBuffer_data(); }
+ void assignUsesPrependBuffer_Custom() const { assignUsesPrependBuffer<Custom>(); }
void at() const;
void capacityInt() const { capacity<int>(); }
void capacityMovable() const { capacity<Movable>(); }
@@ -337,6 +322,7 @@ private slots:
void resizeToZero() const;
void resizeToTheSameSize_data();
void resizeToTheSameSize() const;
+ void resizeForOverwrite() const;
void iterators() const;
void constIterators() const;
void reverseIterators() const;
@@ -421,6 +407,9 @@ private:
template<typename T> void testAssignment() const;
template<typename T> void add() const;
template<typename T> void append() const;
+ template<typename T> void assign() const;
+ void assignUsesPrependBuffer_data() const;
+ template<typename T> void assignUsesPrependBuffer() const;
template<typename T> void assignFromInitializerList() const;
template<typename T> void capacity() const;
template<typename T> void clear() const;
@@ -573,25 +562,22 @@ void tst_QList::constructors_reserveAndInitialize() const
{
// default-initialise items
- QList<int> myInt(5, 42);
+ const QList<int> myInt(5, 42);
QVERIFY(myInt.capacity() == 5);
- foreach (int meaningoflife, myInt) {
+ for (int meaningoflife : myInt)
QCOMPARE(meaningoflife, 42);
- }
- QList<QString> myString(5, QString::fromLatin1("c++"));
+ const QList<QString> myString(5, QString::fromLatin1("c++"));
QVERIFY(myString.capacity() == 5);
// make sure all items are initialised ok
- foreach (QString meaningoflife, myString) {
+ for (const QString &meaningoflife : myString)
QCOMPARE(meaningoflife, QString::fromLatin1("c++"));
- }
- QList<Custom> myCustom(5, Custom('n'));
+ const QList<Custom> myCustom(5, Custom('n'));
QVERIFY(myCustom.capacity() == 5);
// make sure all items are initialised ok
- foreach (Custom meaningoflife, myCustom) {
+ for (Custom meaningoflife : myCustom)
QCOMPARE(meaningoflife.i, 'n');
- }
}
template<typename T>
@@ -775,6 +761,162 @@ void tst_QList::append() const
}
}
+void tst_QList::assignEmpty() const
+{
+ // Test that the realloc branch in assign(it, it) doesn't crash.
+ using T = int;
+ QList<T> list;
+ QList<T> ref1 = list;
+ QVERIFY(list.d.needsDetach());
+ list.assign(list.begin(), list.begin());
+
+#if !defined Q_OS_QNX // QNX has problems with the empty istream_iterator
+ auto empty = std::istream_iterator<T>{};
+ list.squeeze();
+ QCOMPARE_EQ(list.capacity(), 0);
+ ref1 = list;
+ QVERIFY(list.d.needsDetach());
+ list.assign(empty, empty);
+#endif
+}
+
+template <typename T>
+void tst_QList::assign() const
+{
+ TST_QLIST_CHECK_LEAKS(T)
+ {
+ QList<T> myvec;
+ myvec.assign(2, T_FOO);
+ QVERIFY(myvec.isDetached());
+ QCOMPARE(myvec, QList<T>() << T_FOO << T_FOO);
+
+ QList<T> myvecCopy = myvec;
+ QVERIFY(!myvec.isDetached());
+ QVERIFY(!myvecCopy.isDetached());
+ QVERIFY(myvec.isSharedWith(myvecCopy));
+ QVERIFY(myvecCopy.isSharedWith(myvec));
+
+ myvec.assign(3, T_BAR);
+ QCOMPARE(myvec, QList<T>() << T_BAR << T_BAR << T_BAR);
+ QVERIFY(myvec.isDetached());
+ QVERIFY(myvecCopy.isDetached());
+ QVERIFY(!myvec.isSharedWith(myvecCopy));
+ QVERIFY(!myvecCopy.isSharedWith(myvec));
+ }
+ {
+ QList<T> myvec;
+ myvec.assign(4, T_FOO);
+ QVERIFY(myvec.isDetached());
+ QCOMPARE(myvec, QList<T>() << T_FOO << T_FOO << T_FOO << T_FOO);
+
+ QList<T> myvecCopy = myvec;
+ QVERIFY(!myvec.isDetached());
+ QVERIFY(!myvecCopy.isDetached());
+ QVERIFY(myvec.isSharedWith(myvecCopy));
+ QVERIFY(myvecCopy.isSharedWith(myvec));
+
+ myvecCopy.assign(myvec.begin(), myvec.begin() + 2);
+ QVERIFY(myvec.isDetached());
+ QVERIFY(myvecCopy.isDetached());
+ QVERIFY(!myvec.isSharedWith(myvecCopy));
+ QVERIFY(!myvecCopy.isSharedWith(myvec));
+ QCOMPARE(myvecCopy, QList<T>() << T_FOO << T_FOO);
+ }
+}
+
+inline namespace Scenarios {
+Q_NAMESPACE
+enum ListState {
+ UnsharedList,
+ SharedList,
+};
+Q_ENUM_NS(ListState)
+enum RelationWithPrependBuffer {
+ FitsIntoFreeSpaceAtBegin,
+ FitsFreeSpaceAtBeginExactly,
+ ExceedsFreeSpaceAtBegin,
+ FitsFreeSpaceAtBeginPlusSizeExactly,
+ FullCapacity,
+};
+Q_ENUM_NS(RelationWithPrependBuffer)
+} // namespace Scenarios
+
+void tst_QList::assignUsesPrependBuffer_data() const
+{
+ QTest::addColumn<ListState>("listState");
+ QTest::addColumn<RelationWithPrependBuffer>("relationWithPrependBuffer");
+
+ const auto sme = QMetaEnum::fromType<ListState>();
+ const auto rme = QMetaEnum::fromType<RelationWithPrependBuffer>();
+
+ for (int i = 0, s = sme.value(i); s != -1; s = sme.value(++i)) {
+ for (int j = 0, r = rme.value(j); r != -1; r = rme.value(++j)) {
+ QTest::addRow("%s-%s", sme.key(i), rme.key(j))
+ << ListState(s) << RelationWithPrependBuffer(r);
+ }
+ }
+}
+
+template <typename T>
+void tst_QList::assignUsesPrependBuffer() const
+{
+ QFETCH(const ListState, listState);
+ QFETCH(const RelationWithPrependBuffer, relationWithPrependBuffer);
+
+ const auto capBegin = [](const QList<T> &l) {
+ return l.begin() - l.d.freeSpaceAtBegin();
+ };
+ const auto capEnd = [](const QList<T> &l) {
+ return l.end() + l.d.freeSpaceAtEnd();
+ };
+
+ TST_QLIST_CHECK_LEAKS(T)
+ {
+ // Test the prepend optimization.
+ QList<T> withFreeSpaceAtBegin(16, T_FOO);
+ // try at most 100 times to create freeSpaceAtBegin():
+ for (int i = 0; i < 100 && withFreeSpaceAtBegin.d.freeSpaceAtBegin() < 2; ++i)
+ withFreeSpaceAtBegin.prepend(T_FOO);
+ QCOMPARE_GT(withFreeSpaceAtBegin.d.freeSpaceAtBegin(), 1);
+
+ auto c = [&] {
+ switch (listState) {
+ case UnsharedList: return std::move(withFreeSpaceAtBegin);
+ case SharedList: return withFreeSpaceAtBegin;
+ }
+ Q_UNREACHABLE_RETURN(withFreeSpaceAtBegin);
+ }();
+
+ const auto n = [&] () -> qsizetype {
+ switch (relationWithPrependBuffer) {
+ case FitsIntoFreeSpaceAtBegin:
+ return qsizetype(1);
+ case FitsFreeSpaceAtBeginExactly:
+ return c.d.freeSpaceAtBegin();
+ case ExceedsFreeSpaceAtBegin:
+ return c.d.freeSpaceAtBegin() + 1;
+ case FitsFreeSpaceAtBeginPlusSizeExactly:
+ return c.d.freeSpaceAtBegin() + c.size();
+ case FullCapacity:
+ return c.capacity();
+ };
+ Q_UNREACHABLE_RETURN(0);
+ }();
+
+ const auto oldCapBegin = capBegin(c);
+ const auto oldCapEnd = capEnd(c);
+
+ const std::vector v(n, T_BAR);
+ c.assign(v.begin(), v.end());
+ QCOMPARE_EQ(c.d.freeSpaceAtBegin(), 0); // we used the prepend-buffer
+ if (listState != SharedList) {
+ // check that we didn't reallocate
+ QCOMPARE_EQ(capBegin(c), oldCapBegin);
+ QCOMPARE_EQ(capEnd(c), oldCapEnd);
+ }
+ }
+}
+
void tst_QList::appendRvalue() const
{
QList<QString> v;
@@ -966,6 +1108,7 @@ void tst_QList::appendList() const
// Using operators
// <<
QList<ConstructionCounted> v6;
+ v6.reserve(4);
v6 << (QList<ConstructionCounted>() << 1 << 2);
v6 << (QList<ConstructionCounted>() << 3 << 4);
QCOMPARE(v6, expectedFour);
@@ -1103,20 +1246,20 @@ void tst_QList::count() const
{
// zero size
QList<T> myvec;
- QVERIFY(myvec.count() == 0);
+ QVERIFY(myvec.size() == 0);
QVERIFY(!myvec.isDetached());
// grow
myvec.append(SimpleValue<T>::at(0));
- QVERIFY(myvec.count() == 1);
+ QVERIFY(myvec.size() == 1);
myvec.append(SimpleValue<T>::at(1));
- QVERIFY(myvec.count() == 2);
+ QVERIFY(myvec.size() == 2);
// shrink
myvec.remove(0);
- QVERIFY(myvec.count() == 1);
+ QVERIFY(myvec.size() == 1);
myvec.remove(0);
- QVERIFY(myvec.count() == 0);
+ QVERIFY(myvec.size() == 0);
}
// count of items
@@ -1930,11 +2073,11 @@ void tst_QList::move() const
list << T_FOO << T_BAR << T_BAZ;
// move an item
- list.move(0, list.count() - 1);
+ list.move(0, list.size() - 1);
QCOMPARE(list, QList<T>() << T_BAR << T_BAZ << T_FOO);
// move it back
- list.move(list.count() - 1, 0);
+ list.move(list.size() - 1, 0);
QCOMPARE(list, QList<T>() << T_FOO << T_BAR << T_BAZ);
// move an item in the middle
@@ -2389,6 +2532,51 @@ void tst_QList::resizeToTheSameSize() const
QCOMPARE(y.size(), x.size());
}
+void tst_QList::resizeForOverwrite() const
+{
+ constexpr int BUILD_COUNT = 42;
+ {
+ // Smoke test
+ QList<int> l(BUILD_COUNT, Qt::Uninitialized);
+ l.resizeForOverwrite(l.size() + BUILD_COUNT);
+ }
+
+ {
+ const int beforeCounter = Movable::counter.loadRelaxed();
+ QList<Movable> l(BUILD_COUNT, Qt::Uninitialized);
+ const int after1Counter = Movable::counter.loadRelaxed();
+ QCOMPARE(after1Counter, beforeCounter + BUILD_COUNT);
+
+ l.resizeForOverwrite(l.size() + BUILD_COUNT);
+ const int after2Counter = Movable::counter.loadRelaxed();
+ QCOMPARE(after2Counter, after1Counter + BUILD_COUNT);
+ }
+
+ struct QtInitializationSupport {
+ bool wasInitialized;
+ QtInitializationSupport() : wasInitialized(true) {}
+ explicit QtInitializationSupport(Qt::Initialization) : wasInitialized(false) {}
+ };
+
+ {
+ QList<QtInitializationSupport> l(BUILD_COUNT);
+ for (const auto &elem : l)
+ QVERIFY(elem.wasInitialized);
+ l.resize(l.size() + BUILD_COUNT);
+ for (const auto &elem : l)
+ QVERIFY(elem.wasInitialized);
+ }
+
+ {
+ QList<QtInitializationSupport> l(BUILD_COUNT, Qt::Uninitialized);
+ for (const auto &elem : l)
+ QVERIFY(!elem.wasInitialized);
+ l.resizeForOverwrite(l.size() + BUILD_COUNT);
+ for (const auto &elem : l)
+ QVERIFY(!elem.wasInitialized);
+ }
+}
+
void tst_QList::iterators() const
{
QList<int> v;
@@ -2698,24 +2886,24 @@ void tst_QList::size() const
// zero size
QList<T> myvec;
QVERIFY(myvec.size() == 0);
- QCOMPARE(myvec.length(), myvec.size());
+ QCOMPARE(myvec.size(), myvec.size());
QVERIFY(!myvec.isDetached());
// grow
myvec.append(SimpleValue<T>::at(0));
QVERIFY(myvec.size() == 1);
- QCOMPARE(myvec.length(), myvec.size());
+ QCOMPARE(myvec.size(), myvec.size());
myvec.append(SimpleValue<T>::at(1));
QVERIFY(myvec.size() == 2);
- QCOMPARE(myvec.length(), myvec.size());
+ QCOMPARE(myvec.size(), myvec.size());
// shrink
myvec.remove(0);
QVERIFY(myvec.size() == 1);
- QCOMPARE(myvec.length(), myvec.size());
+ QCOMPARE(myvec.size(), myvec.size());
myvec.remove(0);
QVERIFY(myvec.size() == 0);
- QCOMPARE(myvec.length(), myvec.size());
+ QCOMPARE(myvec.size(), myvec.size());
}
// ::squeeze() is tested in ::capacity().
@@ -3206,7 +3394,7 @@ void tst_QList::emplaceReturnsIterator()
void tst_QList::emplaceFront() const
{
- QScopedValueRollback<QAtomicInt> rollback(Movable::counter, 0);
+ QAtomicScopedValueRollback rollback(Movable::counter, 0);
QList<Movable> vec;
vec.emplaceFront('b');
@@ -3231,7 +3419,7 @@ void tst_QList::emplaceFrontReturnsRef() const
void tst_QList::emplaceBack()
{
- QScopedValueRollback<QAtomicInt> rollback(Movable::counter, 0);
+ QAtomicScopedValueRollback rollback(Movable::counter, 0);
QList<Movable> vec;
@@ -3638,7 +3826,7 @@ void tst_QList::stability_append() const
std::generate(v.begin(), v.end(), [&k]() { return SimpleValue<T>::at(k++); });
QList<T> src(1, SimpleValue<T>::at(0));
v.append(src.begin(), src.end());
- QVERIFY(v.size() < v.capacity());
+ QCOMPARE_LE(v.size(), v.capacity());
for (int i = 0; i < v.capacity() - v.size(); ++i) {
auto [copy, reference] = qlistCopyAndReferenceFromRange(v.begin(), v.end());
diff --git a/tests/auto/corelib/tools/qmacautoreleasepool/CMakeLists.txt b/tests/auto/corelib/tools/qmacautoreleasepool/CMakeLists.txt
index e2f1ed45ea..b968945ac6 100644
--- a/tests/auto/corelib/tools/qmacautoreleasepool/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qmacautoreleasepool/CMakeLists.txt
@@ -1,12 +1,20 @@
-# Generated from qmacautoreleasepool.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmacautoreleasepool Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmacautoreleasepool LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmacautoreleasepool
SOURCES
tst_qmacautoreleasepool.mm
- PUBLIC_LIBRARIES
+ LIBRARIES
+ Qt::CorePrivate
${FWFoundation}
)
diff --git a/tests/auto/corelib/tools/qmacautoreleasepool/tst_qmacautoreleasepool.mm b/tests/auto/corelib/tools/qmacautoreleasepool/tst_qmacautoreleasepool.mm
index 56e9a2748d..e7923b47f3 100644
--- a/tests/auto/corelib/tools/qmacautoreleasepool/tst_qmacautoreleasepool.mm
+++ b/tests/auto/corelib/tools/qmacautoreleasepool/tst_qmacautoreleasepool.mm
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** 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
#include <QTest>
+#include <QtCore/private/qcore_mac_p.h>
+
#include <Foundation/Foundation.h>
class tst_QMacAutoreleasePool : public QObject
@@ -37,7 +14,6 @@ private slots:
void noPool();
void rootLevelPool();
void stackAllocatedPool();
- void heapAllocatedPool();
};
static id lastDeallocedObject = nil;
@@ -86,26 +62,6 @@ void tst_QMacAutoreleasePool::stackAllocatedPool()
[pool drain];
}
-void tst_QMacAutoreleasePool::heapAllocatedPool()
-{
- // The special case, a pool allocated on the heap, or as a member of a
- // heap allocated object. This is not a supported use of QMacAutoReleasePool,
- // and will result in warnings if the pool is prematurely drained.
-
- NSObject *allocedObject = nil;
- {
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
- QMacAutoReleasePool *qtPool = nullptr;
- {
- qtPool = new QMacAutoReleasePool;
- allocedObject = [[[DeallocTracker alloc] init] autorelease];
- }
- [pool drain];
- delete qtPool;
- }
- QCOMPARE(lastDeallocedObject, allocedObject);
-}
-
QTEST_APPLESS_MAIN(tst_QMacAutoreleasePool)
#include "tst_qmacautoreleasepool.moc"
diff --git a/tests/auto/corelib/tools/qmakearray/CMakeLists.txt b/tests/auto/corelib/tools/qmakearray/CMakeLists.txt
index fc5be609e1..cec589628f 100644
--- a/tests/auto/corelib/tools/qmakearray/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qmakearray/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qmakearray.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmakearray Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmakearray LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmakearray
SOURCES
tst_qmakearray.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/tools/qmakearray/tst_qmakearray.cpp b/tests/auto/corelib/tools/qmakearray/tst_qmakearray.cpp
index 2e27272364..1d796452b0 100644
--- a/tests/auto/corelib/tools/qmakearray/tst_qmakearray.cpp
+++ b/tests/auto/corelib/tools/qmakearray/tst_qmakearray.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/corelib/tools/qmap/CMakeLists.txt b/tests/auto/corelib/tools/qmap/CMakeLists.txt
index c0a2cb79ab..bddf9267f8 100644
--- a/tests/auto/corelib/tools/qmap/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qmap/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qmap.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmap Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmap LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmap
SOURCES
tst_qmap.cpp
- DEFINES
- #-QT_NO_JAVA_STYLE_ITERATORS # special case remove
)
+
+qt_internal_undefine_global_definition(tst_qmap QT_NO_JAVA_STYLE_ITERATORS)
diff --git a/tests/auto/corelib/tools/qmap/tst_qmap.cpp b/tests/auto/corelib/tools/qmap/tst_qmap.cpp
index e5bddb5d8d..6950dcf705 100644
--- a/tests/auto/corelib/tools/qmap/tst_qmap.cpp
+++ b/tests/auto/corelib/tools/qmap/tst_qmap.cpp
@@ -1,34 +1,13 @@
-/****************************************************************************
-**
-** 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 <qmap.h>
#include <QTest>
+
#include <QDebug>
+#include <QScopeGuard>
+
+using namespace Qt::StringLiterals;
QT_WARNING_DISABLE_DEPRECATED
@@ -85,6 +64,15 @@ private slots:
void eraseValidIteratorOnSharedMap();
void removeElementsInMap();
void toStdMap();
+
+ void multiMapStoresInReverseInsertionOrder();
+
+ // Tests for deprecated APIs.
+#if QT_DEPRECATED_SINCE(6, 0)
+ void deprecatedInsertMulti();
+ void deprecatedIteratorApis();
+ void deprecatedInsert();
+#endif // QT_DEPRECATED_SINCE(6, 0)
};
struct IdentityTracker {
@@ -184,8 +172,8 @@ void tst_QMap::count()
{
MyMap map;
MyMap map2( map );
- QCOMPARE( map.count(), 0 );
- QCOMPARE( map2.count(), 0 );
+ QCOMPARE( map.size(), 0 );
+ QCOMPARE( map2.size(), 0 );
QCOMPARE( MyClass::count, int(0) );
QCOMPARE(map.count("key"), 0);
QCOMPARE(map.size(), 0);
@@ -194,9 +182,9 @@ void tst_QMap::count()
QVERIFY(!map2.isDetached());
// detach
map2["Hallo"] = MyClass( "Fritz" );
- QCOMPARE( map.count(), 0 );
QCOMPARE( map.size(), 0 );
- QCOMPARE( map2.count(), 1 );
+ QCOMPARE( map.size(), 0 );
+ QCOMPARE( map2.size(), 1 );
QCOMPARE( map2.size(), 1 );
QVERIFY(!map.isDetached());
#ifndef Q_CC_SUN
@@ -208,11 +196,11 @@ void tst_QMap::count()
{
typedef QMap<QString, MyClass> Map;
Map map;
- QCOMPARE( map.count(), 0);
+ QCOMPARE( map.size(), 0);
map.insert( "Torben", MyClass("Weis") );
- QCOMPARE( map.count(), 1 );
+ QCOMPARE( map.size(), 1 );
map.insert( "Claudia", MyClass("Sorg") );
- QCOMPARE( map.count(), 2 );
+ QCOMPARE( map.size(), 2 );
map.insert( "Lars", MyClass("Linzbach") );
map.insert( "Matthias", MyClass("Ettrich") );
map.insert( "Sue", MyClass("Paludo") );
@@ -220,7 +208,7 @@ void tst_QMap::count()
map.insert( "Haavard", MyClass("Nord") );
map.insert( "Arnt", MyClass("Gulbrandsen") );
map.insert( "Paul", MyClass("Tvete") );
- QCOMPARE( map.count(), 9 );
+ QCOMPARE( map.size(), 9 );
map.insert( "Paul", MyClass("Tvete 1") );
map.insert( "Paul", MyClass("Tvete 2") );
map.insert( "Paul", MyClass("Tvete 3") );
@@ -228,69 +216,69 @@ void tst_QMap::count()
map.insert( "Paul", MyClass("Tvete 5") );
map.insert( "Paul", MyClass("Tvete 6") );
- QCOMPARE( map.count(), 9 );
+ QCOMPARE( map.size(), 9 );
QCOMPARE( map.count("Paul"), 1 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
Map map2( map );
- QVERIFY( map2.count() == 9 );
+ QVERIFY( map2.size() == 9 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
map2.insert( "Kay", MyClass("Roemer") );
- QVERIFY( map2.count() == 10 );
- QVERIFY( map.count() == 9 );
+ QVERIFY( map2.size() == 10 );
+ QVERIFY( map.size() == 9 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 19 );
#endif
map2 = map;
- QVERIFY( map.count() == 9 );
- QVERIFY( map2.count() == 9 );
+ QVERIFY( map.size() == 9 );
+ QVERIFY( map2.size() == 9 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
map2.insert( "Kay", MyClass("Roemer") );
- QVERIFY( map2.count() == 10 );
+ QVERIFY( map2.size() == 10 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 19 );
#endif
map2.clear();
- QVERIFY( map.count() == 9 );
- QVERIFY( map2.count() == 0 );
+ QVERIFY( map.size() == 9 );
+ QVERIFY( map2.size() == 0 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
map2 = map;
- QVERIFY( map.count() == 9 );
- QVERIFY( map2.count() == 9 );
+ QVERIFY( map.size() == 9 );
+ QVERIFY( map2.size() == 9 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
map2.clear();
- QVERIFY( map.count() == 9 );
- QVERIFY( map2.count() == 0 );
+ QVERIFY( map.size() == 9 );
+ QVERIFY( map2.size() == 0 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 9 );
#endif
map.remove( "Lars" );
- QVERIFY( map.count() == 8 );
- QVERIFY( map2.count() == 0 );
+ QVERIFY( map.size() == 8 );
+ QVERIFY( map2.size() == 0 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 8 );
#endif
map.remove( "Mist" );
- QVERIFY( map.count() == 8 );
- QVERIFY( map2.count() == 0 );
+ QVERIFY( map.size() == 8 );
+ QVERIFY( map2.size() == 0 );
#ifndef Q_CC_SUN
QCOMPARE( MyClass::count, 8 );
#endif
@@ -304,22 +292,22 @@ void tst_QMap::count()
#ifndef Q_CC_SUN
QVERIFY( MyClass::count == 1 );
#endif
- QVERIFY( map.count() == 1 );
+ QVERIFY( map.size() == 1 );
(void)map["Torben"].str;
(void)map["Lars"].str;
#ifndef Q_CC_SUN
QVERIFY( MyClass::count == 2 );
#endif
- QVERIFY( map.count() == 2 );
+ QVERIFY( map.size() == 2 );
const Map& cmap = map;
(void)cmap["Depp"].str;
#ifndef Q_CC_SUN
QVERIFY( MyClass::count == 2 );
#endif
- QVERIFY( map.count() == 2 );
- QVERIFY( cmap.count() == 2 );
+ QVERIFY( map.size() == 2 );
+ QVERIFY( cmap.size() == 2 );
}
QCOMPARE( MyClass::count, 0 );
{
@@ -336,8 +324,8 @@ void tst_QMap::count()
{
QMultiMap<int, MyClass> map;
QMultiMap<int, MyClass> map2(map);
- QCOMPARE(map.count(), 0);
- QCOMPARE(map2.count(), 0);
+ QCOMPARE(map.size(), 0);
+ QCOMPARE(map2.size(), 0);
QCOMPARE(MyClass::count, 0);
QCOMPARE(map.count(1), 0);
QCOMPARE(map.size(), 0);
@@ -347,26 +335,26 @@ void tst_QMap::count()
// detach
map2.insert(0, MyClass("value0"));
- QCOMPARE(map.count(), 0);
QCOMPARE(map.size(), 0);
- QCOMPARE(map2.count(), 1);
+ QCOMPARE(map.size(), 0);
+ QCOMPARE(map2.size(), 1);
QCOMPARE(map2.size(), 1);
QVERIFY(!map.isDetached());
QCOMPARE(MyClass::count, 1);
map2.insert(1, MyClass("value1"));
map2.insert(2, MyClass("value2"));
- QCOMPARE(map2.count(), 3);
+ QCOMPARE(map2.size(), 3);
QCOMPARE(MyClass::count, 3);
map2.insert(0, MyClass("value0_1"));
map2.insert(0, MyClass("value0_2"));
- QCOMPARE(map2.count(), 5);
+ QCOMPARE(map2.size(), 5);
QCOMPARE(map2.count(0), 3);
QCOMPARE(MyClass::count, 5);
map2.clear();
- QCOMPARE(map2.count(), 0);
+ QCOMPARE(map2.size(), 0);
QCOMPARE(MyClass::count, 0);
}
@@ -447,7 +435,12 @@ void tst_QMap::beginEnd()
// detach
map2.insert( "2", "c" );
QVERIFY( map.constBegin() == map.constBegin() );
- QVERIFY( map.constBegin() != map2.constBegin() );
+
+ // comparing iterators between two different std::map is UB (and raises an
+ // assertion failure with MSVC debug-mode iterators), so we compare the
+ // elements' addresses.
+ QVERIFY(&map.constBegin().key() != &map2.constBegin().key());
+ QVERIFY(&map.constBegin().value() != &map2.constBegin().value());
}
void tst_QMap::firstLast()
@@ -647,16 +640,19 @@ void tst_QMap::operator_eq()
QMap<int, int> b;
QVERIFY(a == b);
+ QCOMPARE(qHash(a), qHash(b));
QVERIFY(!(a != b));
a.insert(1,1);
b.insert(1,1);
QVERIFY(a == b);
+ QCOMPARE(qHash(a), qHash(b));
QVERIFY(!(a != b));
a.insert(0,1);
b.insert(0,1);
QVERIFY(a == b);
+ QCOMPARE(qHash(a), qHash(b));
QVERIFY(!(a != b));
// compare for inequality:
@@ -679,6 +675,7 @@ void tst_QMap::operator_eq()
QMap<QString, QString> b;
QVERIFY(a == b);
+ QCOMPARE(qHash(a), qHash(b));
QVERIFY(!(a != b));
a.insert("Hello", "World");
@@ -687,6 +684,7 @@ void tst_QMap::operator_eq()
b.insert("Hello", "World");
QVERIFY(a == b);
+ QCOMPARE(qHash(a), qHash(b));
QVERIFY(!(a != b));
a.insert("Goodbye", "cruel world");
@@ -703,6 +701,7 @@ void tst_QMap::operator_eq()
// empty keys and null keys match:
b.insert(QString(""), QString());
QVERIFY(a == b);
+ QCOMPARE(qHash(a), qHash(b));
QVERIFY(!(a != b));
}
@@ -892,7 +891,7 @@ void tst_QMap::constFind()
for (i = 3; i < 10; ++i) {
compareString = testString.arg(i);
- map.insertMulti(4, compareString);
+ map.insert(4, compareString);
}
QMultiMap<int, QString>::const_iterator it = map.constFind(4);
@@ -998,7 +997,7 @@ void tst_QMap::lowerUpperBound()
map.insert(3, "three");
map.insert(7, "seven");
- map.insertMulti(7, "seven_2");
+ map.insert(7, "seven_2");
QCOMPARE(map.upperBound(0).key(), 1);
QCOMPARE(map.upperBound(1).key(), 3);
@@ -1129,29 +1128,6 @@ void tst_QMap::iterators()
QVERIFY(stlIt.value() == testString.arg(i));
QCOMPARE(i, 100);
- // Same but exercising deprecated APIs
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- stlIt = map.begin();
- QCOMPARE(stlIt.value(), QLatin1String("Teststring 1"));
-
- stlIt += 5;
- QCOMPARE(stlIt.value(), QLatin1String("Teststring 6"));
-
- stlIt++;
- QCOMPARE(stlIt.value(), QLatin1String("Teststring 7"));
-
- stlIt = stlIt - 3;
- QCOMPARE(stlIt.value(), QLatin1String("Teststring 4"));
-
- stlIt--;
- QCOMPARE(stlIt.value(), QLatin1String("Teststring 3"));
-
- for(stlIt = map.begin(), i = 1; stlIt != map.end(); ++stlIt, ++i)
- QVERIFY(stlIt.value() == testString.arg(i));
- QCOMPARE(i, 100);
-QT_WARNING_POP
-
//STL-Style const-iterators
QMap<int, QString>::const_iterator cstlIt = map.constBegin();
@@ -1173,29 +1149,6 @@ QT_WARNING_POP
QVERIFY(cstlIt.value() == testString.arg(i));
QCOMPARE(i, 100);
- // Same but exercising deprecated APIs
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- cstlIt = map.constBegin();
- QCOMPARE(cstlIt.value(), QLatin1String("Teststring 1"));
-
- cstlIt += 5;
- QCOMPARE(cstlIt.value(), QLatin1String("Teststring 6"));
-
- cstlIt++;
- QCOMPARE(cstlIt.value(), QLatin1String("Teststring 7"));
-
- cstlIt = cstlIt - 3;
- QCOMPARE(cstlIt.value(), QLatin1String("Teststring 4"));
-
- cstlIt--;
- QCOMPARE(cstlIt.value(), QLatin1String("Teststring 3"));
-
- for(cstlIt = map.constBegin(), i = 1; cstlIt != map.constEnd(); ++cstlIt, ++i)
- QVERIFY(cstlIt.value() == testString.arg(i));
- QCOMPARE(i, 100);
-QT_WARNING_POP
-
//Java-Style iterators
QMapIterator<int, QString> javaIt(map);
@@ -1648,26 +1601,26 @@ void tst_QMap::qmultimap_specific()
}
QVERIFY(map1.contains(9, 99));
- QCOMPARE(map1.count(), 45);
+ QCOMPARE(map1.size(), 45);
map1.remove(9, 99);
QVERIFY(!map1.contains(9, 99));
- QCOMPARE(map1.count(), 44);
+ QCOMPARE(map1.size(), 44);
map1.remove(9, 99);
QVERIFY(!map1.contains(9, 99));
- QCOMPARE(map1.count(), 44);
+ QCOMPARE(map1.size(), 44);
map1.remove(1, 99);
- QCOMPARE(map1.count(), 44);
+ QCOMPARE(map1.size(), 44);
map1.insert(1, 99);
map1.insert(1, 99);
- QCOMPARE(map1.count(), 46);
+ QCOMPARE(map1.size(), 46);
map1.remove(1, 99);
- QCOMPARE(map1.count(), 44);
+ QCOMPARE(map1.size(), 44);
map1.remove(1, 99);
- QCOMPARE(map1.count(), 44);
+ QCOMPARE(map1.size(), 44);
{
QMultiMap<int, int>::const_iterator i = map1.constFind(1, 11);
@@ -1726,7 +1679,7 @@ void tst_QMap::qmultimap_specific()
map2.insert(42, 1);
map2.insert(10, 2);
map2.insert(48, 3);
- QCOMPARE(map1.count(), map2.count());
+ QCOMPARE(map1.size(), map2.size());
QVERIFY(map1.remove(42,5));
QVERIFY(map2.remove(42,5));
QVERIFY(map1 == map2);
@@ -1848,7 +1801,7 @@ void tst_QMap::equal_range()
QCOMPARE(cresult.first, cmap.find(2));
QCOMPARE(cresult.second, cmap.find(4));
- map.insertMulti(1, "another one");
+ map.insert(1, "another one");
result = map.equal_range(1);
QCOMPARE(result.first, map.find(1));
@@ -1861,19 +1814,13 @@ void tst_QMap::equal_range()
QCOMPARE(map.count(1), 2);
}
-template <class T>
-const T &const_(const T &t)
-{
- return t;
-}
-
void tst_QMap::insert()
{
QMap<QString, float> map;
map.insert("cs/key1", 1);
map.insert("cs/key2", 2);
map.insert("cs/key1", 3);
- QCOMPARE(map.count(), 2);
+ QCOMPARE(map.size(), 2);
QMap<int, int> intMap;
for (int i = 0; i < 1000; ++i) {
@@ -1944,12 +1891,15 @@ void testDetachWhenInsert()
dest.insert(3, 3);
Map<int, int> destCopy = dest;
- dest.insert(source);
+ if constexpr (std::is_same_v<decltype(dest), QMap<int, int>>)
+ dest.insert(source); // QMap
+ else
+ dest.unite(source); // QMultiMap
QCOMPARE(source, referenceSource);
QCOMPARE(dest, referenceDestination);
- QCOMPARE(destCopy.count(), 1); // unchanged
+ QCOMPARE(destCopy.size(), 1); // unchanged
}
// copy insertion of shared map
@@ -1964,13 +1914,16 @@ void testDetachWhenInsert()
dest.insert(3, 3);
Map<int, int> destCopy = dest;
- dest.insert(source);
+ if constexpr (std::is_same_v<decltype(dest), QMap<int, int>>)
+ dest.insert(source); // QMap
+ else
+ dest.unite(source); // QMultiMap
QCOMPARE(source, referenceSource);
QCOMPARE(sourceCopy, referenceSource);
QCOMPARE(dest, referenceDestination);
- QCOMPARE(destCopy.count(), 1); // unchanged
+ QCOMPARE(destCopy.size(), 1); // unchanged
}
// move insertion of non-shared map
@@ -1984,10 +1937,13 @@ void testDetachWhenInsert()
dest.insert(3, 3);
Map<int, int> destCopy = dest;
- dest.insert(source);
+ if constexpr (std::is_same_v<decltype(dest), QMap<int, int>>)
+ dest.insert(source); // QMap
+ else
+ dest.unite(source); // QMultiMap
QCOMPARE(dest, referenceDestination);
- QCOMPARE(destCopy.count(), 1); // unchanged
+ QCOMPARE(destCopy.size(), 1); // unchanged
}
// move insertion of shared map
@@ -2002,12 +1958,15 @@ void testDetachWhenInsert()
dest.insert(3, 3);
Map<int, int> destCopy = dest;
- dest.insert(std::move(source));
+ if constexpr (std::is_same_v<decltype(dest), QMap<int, int>>)
+ dest.insert(std::move(source)); // QMap
+ else
+ dest.unite(std::move(source)); // QMultiMap
QCOMPARE(sourceCopy, referenceSource);
QCOMPARE(dest, referenceDestination);
- QCOMPARE(destCopy.count(), 1); // unchanged
+ QCOMPARE(destCopy.size(), 1); // unchanged
}
};
@@ -2038,7 +1997,7 @@ void tst_QMap::insertMap()
map.insert(map2);
- QCOMPARE(map.count(), 5);
+ QCOMPARE(map.size(), 5);
for (int i = 0; i < 5; ++i)
QCOMPARE(map[i], i);
}
@@ -2053,7 +2012,7 @@ void tst_QMap::insertMap()
map.insert(map2);
- QCOMPARE(map.count(), 17);
+ QCOMPARE(map.size(), 17);
for (int i = 0; i < 10; ++i) {
// i * 3 == i except for i = 4, 8
QCOMPARE(map[i * 3], (i && i % 4 == 0) ? i - (i / 4) : i);
@@ -2075,7 +2034,7 @@ void tst_QMap::insertMap()
QMap<int, int> map2;
map.insert(map2);
- QCOMPARE(map.count(), 1);
+ QCOMPARE(map.size(), 1);
QCOMPARE(map[1], 1);
}
{
@@ -2084,7 +2043,7 @@ void tst_QMap::insertMap()
map2.insert(1, 1);
map.insert(map2);
- QCOMPARE(map.count(), 1);
+ QCOMPARE(map.size(), 1);
QCOMPARE(map[1], 1);
QMap<int, int> map3;
@@ -2100,7 +2059,7 @@ void tst_QMap::insertMap()
// Test inserting into self, nothing should happen
map.insert(map);
- QCOMPARE(map.count(), 3);
+ QCOMPARE(map.size(), 3);
for (int i = 0; i < 3; ++i)
QCOMPARE(map[i], i);
}
@@ -2118,7 +2077,7 @@ void tst_QMap::insertMap()
map.insert(map2);
- QCOMPARE(map.count(), 1);
+ QCOMPARE(map.size(), 1);
}
testDetachWhenInsert<QMap>();
@@ -2180,7 +2139,7 @@ void tst_QMap::checkMostLeftNode()
void tst_QMap::initializerList()
{
QMap<int, QString> map = {{1, "bar"}, {1, "hello"}, {2, "initializer_list"}};
- QCOMPARE(map.count(), 2);
+ QCOMPARE(map.size(), 2);
QCOMPARE(map[1], QString("hello"));
QCOMPARE(map[2], QString("initializer_list"));
@@ -2190,9 +2149,9 @@ void tst_QMap::initializerList()
// QCOMPARE(stdm[1], QString("bar"));
QMultiMap<QString, int> multiMap{{"il", 1}, {"il", 2}, {"il", 3}};
- QCOMPARE(multiMap.count(), 3);
+ QCOMPARE(multiMap.size(), 3);
QList<int> values = multiMap.values("il");
- QCOMPARE(values.count(), 3);
+ QCOMPARE(values.size(), 3);
QMap<int, int> emptyMap{};
QVERIFY(emptyMap.isEmpty());
@@ -2274,48 +2233,48 @@ void tst_QMap::testInsertMultiWithHint()
{
QMultiMap<int, int> map;
- map.insertMulti(map.end(), 64, 65);
+ map.insert(map.end(), 64, 65);
map.insert(128, 129);
map.insert(256, 257);
sanityCheckTree(map, __LINE__);
- map.insertMulti(map.end(), 512, 513);
- map.insertMulti(map.end(), 512, 513 * 2);
+ map.insert(map.end(), 512, 513);
+ map.insert(map.end(), 512, 513 * 2);
sanityCheckTree(map, __LINE__);
QCOMPARE(map.size(), 5);
- map.insertMulti(map.end(), 256, 258); // wrong hint
+ map.insert(map.end(), 256, 258); // wrong hint
sanityCheckTree(map, __LINE__);
QCOMPARE(map.size(), 6);
- QMultiMap<int, int>::iterator i = map.insertMulti(map.constBegin(), 256, 259); // wrong hint
+ QMultiMap<int, int>::iterator i = map.insert(map.constBegin(), 256, 259); // wrong hint
sanityCheckTree(map, __LINE__);
QCOMPARE(map.size(), 7);
- QMultiMap<int, int>::iterator j = map.insertMulti(map.constBegin(), 69, 66);
+ QMultiMap<int, int>::iterator j = map.insert(map.constBegin(), 69, 66);
sanityCheckTree(map, __LINE__);
QCOMPARE(map.size(), 8);
- j = map.insertMulti(j, 68, 259);
+ j = map.insert(j, 68, 259);
sanityCheckTree(map, __LINE__);
QCOMPARE(map.size(), 9);
- j = map.insertMulti(j, 67, 67);
+ j = map.insert(j, 67, 67);
sanityCheckTree(map, __LINE__);
QCOMPARE(map.size(), 10);
- i = map.insertMulti(i, 256, 259);
+ i = map.insert(i, 256, 259);
sanityCheckTree(map, __LINE__);
QCOMPARE(map.size(), 11);
- i = map.insertMulti(i, 256, 260);
+ i = map.insert(i, 256, 260);
sanityCheckTree(map, __LINE__);
QCOMPARE(map.size(), 12);
- map.insertMulti(i, 64, 67);
+ map.insert(i, 64, 67);
sanityCheckTree(map, __LINE__);
QCOMPARE(map.size(), 13);
- map.insertMulti(map.constBegin(), 20, 20);
+ map.insert(map.constBegin(), 20, 20);
sanityCheckTree(map, __LINE__);
QCOMPARE(map.size(), 14);
}
@@ -2324,9 +2283,9 @@ void tst_QMap::eraseValidIteratorOnSharedMap()
{
QMultiMap<int, int> a, b;
a.insert(10, 10);
- a.insertMulti(10, 40);
- a.insertMulti(10, 25);
- a.insertMulti(10, 30);
+ a.insert(10, 40);
+ a.insert(10, 25);
+ a.insert(10, 30);
a.insert(20, 20);
QMultiMap<int, int>::iterator i = a.begin();
@@ -2351,8 +2310,8 @@ void tst_QMap::eraseValidIteratorOnSharedMap()
// Border cases
QMultiMap <QString, QString> ms1, ms2, ms3;
ms1.insert("foo", "bar");
- ms1.insertMulti("foo", "quux");
- ms1.insertMulti("foo", "bar");
+ ms1.insert("foo", "quux");
+ ms1.insert("foo", "bar");
QMultiMap <QString, QString>::iterator si = ms1.begin();
ms2 = ms1;
@@ -2601,5 +2560,90 @@ void tst_QMap::toStdMap()
toStdMapTestMethod<QMultiMap<int, QString>>(expectedMultiMap);
}
+void tst_QMap::multiMapStoresInReverseInsertionOrder()
+{
+ const QString strings[] = {
+ u"zero"_s,
+ u"null"_s,
+ u"nada"_s,
+ };
+ {
+ QMultiMap<int, QString> map;
+ for (const QString &string : strings)
+ map.insert(0, string);
+ auto printOnFailure = qScopeGuard([&] { qDebug() << map; });
+ QVERIFY(std::equal(map.begin(), map.end(),
+ std::rbegin(strings), std::rend(strings)));
+ printOnFailure.dismiss();
+ }
+}
+
+#if QT_DEPRECATED_SINCE(6, 0)
+void tst_QMap::deprecatedInsertMulti()
+{
+ QMultiMap<int, QString> referenceMap;
+ referenceMap.insert(1, "value1");
+ referenceMap.insert(2, "value2");
+ referenceMap.insert(3, "value3");
+ referenceMap.insert(1, "value1_2");
+ referenceMap.insert(referenceMap.find(2), 2, "value2_2");
+ referenceMap.insert(referenceMap.end(), 1, "value1_3");
+
+ QMultiMap<int, QString> deprecatedMap;
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ deprecatedMap.insertMulti(1, "value1");
+ deprecatedMap.insertMulti(2, "value2");
+ deprecatedMap.insertMulti(3, "value3");
+ deprecatedMap.insertMulti(1, "value1_2");
+ deprecatedMap.insertMulti(deprecatedMap.find(2), 2, "value2_2");
+ deprecatedMap.insertMulti(deprecatedMap.end(), 1, "value1_3");
+QT_WARNING_POP
+
+ QCOMPARE(deprecatedMap, referenceMap);
+}
+
+void tst_QMap::deprecatedIteratorApis()
+{
+ QMap<int, QString> map;
+ QString testString = "Teststring %1";
+ for (int i = 1; i < 100; ++i)
+ map.insert(i, testString.arg(i));
+
+ auto it = map.begin();
+ QCOMPARE(it.value(), QLatin1String("Teststring 1"));
+ QT_IGNORE_DEPRECATIONS(it += 5;)
+ QCOMPARE(it.value(), QLatin1String("Teststring 6"));
+ QT_IGNORE_DEPRECATIONS(it = it - 3;)
+ QCOMPARE(it.value(), QLatin1String("Teststring 3"));
+
+ auto cit = map.constBegin();
+ QCOMPARE(cit.value(), QLatin1String("Teststring 1"));
+ QT_IGNORE_DEPRECATIONS(cit += 5;)
+ QCOMPARE(cit.value(), QLatin1String("Teststring 6"));
+ QT_IGNORE_DEPRECATIONS(cit = cit - 3;)
+ QCOMPARE(cit.value(), QLatin1String("Teststring 3"));
+}
+
+void tst_QMap::deprecatedInsert()
+{
+ QMultiMap<int, QString> refMap;
+ refMap.insert(1, "value1");
+ refMap.insert(2, "value2");
+ refMap.insert(3, "value3");
+
+ QMultiMap<int, QString> depMap = refMap;
+
+ QMultiMap<int, QString> otherMap;
+ otherMap.insert(1, "value1_2");
+ otherMap.insert(3, "value3_2");
+ otherMap.insert(4, "value4");
+
+ refMap.unite(otherMap);
+ QT_IGNORE_DEPRECATIONS(depMap.insert(otherMap);)
+
+ QCOMPARE(refMap, depMap);
+}
+#endif // QT_DEPRECATED_SINCE(6, 0)
+
QTEST_APPLESS_MAIN(tst_QMap)
#include "tst_qmap.moc"
diff --git a/tests/auto/corelib/tools/qmargins/CMakeLists.txt b/tests/auto/corelib/tools/qmargins/CMakeLists.txt
index aa58ce03ab..2e0ea797ff 100644
--- a/tests/auto/corelib/tools/qmargins/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qmargins/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qmargins.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmargins Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmargins LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmargins
SOURCES
tst_qmargins.cpp
diff --git a/tests/auto/corelib/tools/qmargins/tst_qmargins.cpp b/tests/auto/corelib/tools/qmargins/tst_qmargins.cpp
index 8eaa4edd3b..2611f62f01 100644
--- a/tests/auto/corelib/tools/qmargins/tst_qmargins.cpp
+++ b/tests/auto/corelib/tools/qmargins/tst_qmargins.cpp
@@ -1,34 +1,40 @@
-/****************************************************************************
-**
-** 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QMargins>
+#ifdef QVARIANT_H
+# error "This test requires qmargins.h to not include qvariant.h"
+#endif
+
+// don't assume <type_traits>
+template <typename T, typename U>
+constexpr inline bool my_is_same_v = false;
+template <typename T>
+constexpr inline bool my_is_same_v<T, T> = true;
+
+#define CHECK(cvref) \
+ static_assert(my_is_same_v<decltype(get<0>(std::declval<QMargins cvref >())), int cvref >); \
+ static_assert(my_is_same_v<decltype(get<1>(std::declval<QMargins cvref >())), int cvref >); \
+ static_assert(my_is_same_v<decltype(get<2>(std::declval<QMargins cvref >())), int cvref >); \
+ static_assert(my_is_same_v<decltype(get<3>(std::declval<QMargins cvref >())), int cvref >); \
+ \
+ static_assert(my_is_same_v<decltype(get<0>(std::declval<QMarginsF cvref >())), qreal cvref >); \
+ static_assert(my_is_same_v<decltype(get<1>(std::declval<QMarginsF cvref >())), qreal cvref >); \
+ static_assert(my_is_same_v<decltype(get<2>(std::declval<QMarginsF cvref >())), qreal cvref >); \
+ static_assert(my_is_same_v<decltype(get<3>(std::declval<QMarginsF cvref >())), qreal cvref >)
+
+CHECK(&);
+CHECK(const &);
+CHECK(&&);
+CHECK(const &&);
+
+#undef CHECK
#include <QTest>
#include <qmargins.h>
+#include <array>
+
Q_DECLARE_METATYPE(QMargins)
class tst_QMargins : public QObject
@@ -54,6 +60,9 @@ private slots:
#endif
void structuredBinding();
+
+ void toMarginsF_data();
+ void toMarginsF();
};
// Testing get/set functions
@@ -339,5 +348,34 @@ void tst_QMargins::structuredBinding()
}
}
+void tst_QMargins::toMarginsF_data()
+{
+ QTest::addColumn<QMargins>("input");
+ QTest::addColumn<QMarginsF>("result");
+
+ auto row = [](int x1, int y1, int x2, int y2) {
+ QTest::addRow("(%d, %d, %d, %d)", x1, y1, x2, y2)
+ << QMargins(x1, y1, x2, y2) << QMarginsF(x1, y1, x2, y2);
+ };
+ constexpr std::array samples = {-1, 0, 1};
+ for (int x1 : samples) {
+ for (int y1 : samples) {
+ for (int x2 : samples) {
+ for (int y2 : samples) {
+ row(x1, y1, x2, y2);
+ }
+ }
+ }
+ }
+}
+
+void tst_QMargins::toMarginsF()
+{
+ QFETCH(const QMargins, input);
+ QFETCH(const QMarginsF, result);
+
+ QCOMPARE(input.toMarginsF(), result);
+}
+
QTEST_APPLESS_MAIN(tst_QMargins)
#include "tst_qmargins.moc"
diff --git a/tests/auto/corelib/tools/qmessageauthenticationcode/CMakeLists.txt b/tests/auto/corelib/tools/qmessageauthenticationcode/CMakeLists.txt
index dcc86fe555..a21481b7ba 100644
--- a/tests/auto/corelib/tools/qmessageauthenticationcode/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qmessageauthenticationcode/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qmessageauthenticationcode.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmessageauthenticationcode Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmessageauthenticationcode LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmessageauthenticationcode
SOURCES
tst_qmessageauthenticationcode.cpp
diff --git a/tests/auto/corelib/tools/qmessageauthenticationcode/tst_qmessageauthenticationcode.cpp b/tests/auto/corelib/tools/qmessageauthenticationcode/tst_qmessageauthenticationcode.cpp
index 3c8f8e13d1..9e94ad77e9 100644
--- a/tests/auto/corelib/tools/qmessageauthenticationcode/tst_qmessageauthenticationcode.cpp
+++ b/tests/auto/corelib/tools/qmessageauthenticationcode/tst_qmessageauthenticationcode.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Ruslan Nigmatullin <euroelessar@yandex.ru>
-** 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) 2013 Ruslan Nigmatullin <euroelessar@yandex.ru>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
@@ -37,16 +12,64 @@ class tst_QMessageAuthenticationCode : public QObject
{
Q_OBJECT
private slots:
+ void repeated_setKey_data();
+ void repeated_setKey();
void result_data();
void result();
void result_incremental_data();
void result_incremental();
void addData_overloads_data();
void addData_overloads();
+ void move();
+ void swap();
};
Q_DECLARE_METATYPE(QCryptographicHash::Algorithm)
+void tst_QMessageAuthenticationCode::repeated_setKey_data()
+{
+ using A = QCryptographicHash::Algorithm;
+ QTest::addColumn<A>("algo");
+
+ const auto me = QMetaEnum::fromType<A>();
+ for (int i = 0, value; (value = me.value(i)) != -1; ++i)
+ QTest::addRow("%s", me.key(i)) << A(value);
+}
+
+void tst_QMessageAuthenticationCode::repeated_setKey()
+{
+ QFETCH(const QCryptographicHash::Algorithm, algo);
+
+ if (!QCryptographicHash::supportsAlgorithm(algo))
+ QSKIP("QCryptographicHash doesn't support this algorithm");
+
+ // GIVEN: two long keys, so we're sure the key needs to be hashed in order
+ // to fit into the hash algorithm's block
+
+ static const QByteArray key1(1024, 'a');
+ static const QByteArray key2(2048, 'b');
+
+ // WHEN: processing the same message
+
+ QMessageAuthenticationCode macX(algo);
+ QMessageAuthenticationCode mac1(algo, key1);
+ QMessageAuthenticationCode mac2(algo, key2);
+
+ const auto check = [](QMessageAuthenticationCode &mac) {
+ mac.addData("This is nonsense, ignore it, please.");
+ return mac.result();
+ };
+
+ macX.setKey(key1);
+ QCOMPARE(check(macX), check(mac1));
+
+ // THEN: the result does not depend on whether a new QMAC instance was used
+ // or an old one re-used (iow: setKey() reset()s)
+
+ macX.setKey(key2);
+ QCOMPARE(check(macX), check(mac2));
+}
+
void tst_QMessageAuthenticationCode::result_data()
{
QTest::addColumn<QCryptographicHash::Algorithm>("algo");
@@ -124,14 +147,13 @@ void tst_QMessageAuthenticationCode::result()
QFETCH(QByteArray, message);
QFETCH(QByteArray, code);
- QMessageAuthenticationCode mac(algo);
- mac.setKey(key);
+ QMessageAuthenticationCode mac(algo, key);
mac.addData(message);
- QByteArray result = mac.result();
+ QByteArrayView resultView = mac.resultView();
- QCOMPARE(result, code);
+ QCOMPARE(resultView, code);
- result = QMessageAuthenticationCode::hash(message, key, algo);
+ const auto result = QMessageAuthenticationCode::hash(message, key, algo);
QCOMPARE(result, code);
}
@@ -147,17 +169,16 @@ void tst_QMessageAuthenticationCode::result_incremental()
QFETCH(QByteArray, message);
QFETCH(QByteArray, code);
- int index = message.length() / 2;
+ int index = message.size() / 2;
QByteArray leftPart(message.mid(0, index));
QByteArray rightPart(message.mid(index));
QCOMPARE(leftPart + rightPart, message);
- QMessageAuthenticationCode mac(algo);
- mac.setKey(key);
+ QMessageAuthenticationCode mac(algo, key);
mac.addData(leftPart);
mac.addData(rightPart);
- QByteArray result = mac.result();
+ QByteArrayView result = mac.resultView();
QCOMPARE(result, code);
}
@@ -179,7 +200,7 @@ void tst_QMessageAuthenticationCode::addData_overloads()
QMessageAuthenticationCode mac(algo);
mac.setKey(key);
mac.addData(message.constData(), message.size());
- QByteArray result = mac.result();
+ QByteArrayView result = mac.resultView();
QCOMPARE(result, code);
}
@@ -191,12 +212,55 @@ void tst_QMessageAuthenticationCode::addData_overloads()
QMessageAuthenticationCode mac(algo);
mac.setKey(key);
QVERIFY(mac.addData(&buffer));
- QByteArray result = mac.result();
+ QByteArrayView result = mac.resultView();
buffer.close();
QCOMPARE(result, code);
}
}
+void tst_QMessageAuthenticationCode::move()
+{
+ const QByteArray key = "123";
+
+ QMessageAuthenticationCode src(QCryptographicHash::Sha1, key);
+ src.addData("a");
+
+ // move constructor
+ auto intermediary = std::move(src);
+ intermediary.addData("b");
+
+ // move assign operator
+ QMessageAuthenticationCode dst(QCryptographicHash::Sha256, key);
+ dst.addData("no effect on the end result");
+ dst = std::move(intermediary);
+ dst.addData("c");
+
+ QCOMPARE(dst.resultView(),
+ QMessageAuthenticationCode::hash("abc", key, QCryptographicHash::Sha1));
+}
+
+void tst_QMessageAuthenticationCode::swap()
+{
+ const QByteArray key1 = "123";
+ const QByteArray key2 = "abcdefg";
+
+ QMessageAuthenticationCode mac1(QCryptographicHash::Sha1, key1);
+ QMessageAuthenticationCode mac2(QCryptographicHash::Sha256, key2);
+
+ mac1.addData("da");
+ mac2.addData("te");
+
+ mac1.swap(mac2);
+
+ mac2.addData("ta");
+ mac1.addData("st");
+
+ QCOMPARE(mac2.resultView(),
+ QMessageAuthenticationCode::hash("data", key1, QCryptographicHash::Sha1));
+ QCOMPARE(mac1.resultView(),
+ QMessageAuthenticationCode::hash("test", key2, QCryptographicHash::Sha256));
+}
+
QTEST_MAIN(tst_QMessageAuthenticationCode)
#include "tst_qmessageauthenticationcode.moc"
diff --git a/tests/auto/corelib/tools/qoffsetstringarray/CMakeLists.txt b/tests/auto/corelib/tools/qoffsetstringarray/CMakeLists.txt
index 67dffe0284..d0205cfa15 100644
--- a/tests/auto/corelib/tools/qoffsetstringarray/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qoffsetstringarray/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qoffsetstringarray.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qoffsetstringarray Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qoffsetstringarray LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qoffsetstringarray
SOURCES
tst_qoffsetstringarray.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/tools/qoffsetstringarray/tst_qoffsetstringarray.cpp b/tests/auto/corelib/tools/qoffsetstringarray/tst_qoffsetstringarray.cpp
index aecbe0b616..dbb24e7af4 100644
--- a/tests/auto/corelib/tools/qoffsetstringarray/tst_qoffsetstringarray.cpp
+++ b/tests/auto/corelib/tools/qoffsetstringarray/tst_qoffsetstringarray.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -38,6 +13,7 @@ class tst_QOffsetStringArray : public QObject
private slots:
void init();
void access();
+ void contains();
};
@@ -114,6 +90,16 @@ void tst_QOffsetStringArray::access()
QCOMPARE(messages[6], "");
}
+void tst_QOffsetStringArray::contains()
+{
+ QVERIFY(!messages.contains(""));
+ QVERIFY( messages.contains("level - 0"));
+ std::string l2 = "level - 2"; // make sure we don't compare pointer values
+ QVERIFY( messages.contains(l2));
+ QByteArray L4 = "Level - 4";
+ QVERIFY( messages.contains(L4, Qt::CaseInsensitive));
+ QVERIFY(!messages.contains(L4, Qt::CaseSensitive));
+}
QTEST_APPLESS_MAIN(tst_QOffsetStringArray)
#include "tst_qoffsetstringarray.moc"
diff --git a/tests/auto/corelib/tools/qpair/CMakeLists.txt b/tests/auto/corelib/tools/qpair/CMakeLists.txt
index 3d0ba82e44..2dd048e015 100644
--- a/tests/auto/corelib/tools/qpair/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qpair/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qpair.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpair Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpair LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpair
SOURCES
tst_qpair.cpp
diff --git a/tests/auto/corelib/tools/qpair/tst_qpair.cpp b/tests/auto/corelib/tools/qpair/tst_qpair.cpp
index 3bdc7f8895..0c9d87bb01 100644
--- a/tests/auto/corelib/tools/qpair/tst_qpair.cpp
+++ b/tests/auto/corelib/tools/qpair/tst_qpair.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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 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) 2012 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
#include <QTest>
@@ -90,7 +65,7 @@ static_assert( QTypeInfo<QPairPM>::isRelocatable );
static_assert(!QTypeInfo<QPairPP>::isComplex);
static_assert( QTypeInfo<QPairPP>::isRelocatable );
-static_assert(!QTypeInfo<QPairPP>::isPointer);
+static_assert(!std::is_pointer_v<QPairPP>);
void tst_QPair::pairOfReferences()
diff --git a/tests/auto/corelib/tools/qpoint/CMakeLists.txt b/tests/auto/corelib/tools/qpoint/CMakeLists.txt
index ddc0733231..f1402d8815 100644
--- a/tests/auto/corelib/tools/qpoint/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qpoint/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qpoint.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpoint Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpoint LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpoint
SOURCES
tst_qpoint.cpp
diff --git a/tests/auto/corelib/tools/qpoint/tst_qpoint.cpp b/tests/auto/corelib/tools/qpoint/tst_qpoint.cpp
index 3ce8c3942d..7fea787131 100644
--- a/tests/auto/corelib/tools/qpoint/tst_qpoint.cpp
+++ b/tests/auto/corelib/tools/qpoint/tst_qpoint.cpp
@@ -1,36 +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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QPoint>
+#ifdef QVARIANT_H
+# error "This test requires qpoint.h to not include qvariant.h"
+#endif
+
+// don't assume <type_traits>
+template <typename T, typename U>
+constexpr inline bool my_is_same_v = false;
+template <typename T>
+constexpr inline bool my_is_same_v<T, T> = true;
+
+#define CHECK(cvref) \
+ static_assert(my_is_same_v<decltype(get<0>(std::declval<QPoint cvref >())), int cvref >); \
+ static_assert(my_is_same_v<decltype(get<1>(std::declval<QPoint cvref >())), int cvref >)
+
+CHECK(&);
+CHECK(const &);
+CHECK(&&);
+CHECK(const &&);
+
+#undef CHECK
#include <QTest>
#include <QBuffer>
#include <qpoint.h>
+#include <array>
+
class tst_QPoint : public QObject
{
Q_OBJECT
@@ -45,6 +44,9 @@ private slots:
void transposed();
+ void toPointF_data();
+ void toPointF();
+
void rx();
void ry();
@@ -131,6 +133,30 @@ void tst_QPoint::getSet()
QCOMPARE(point.y(), i);
}
+void tst_QPoint::toPointF_data()
+{
+ QTest::addColumn<QPoint>("input");
+ QTest::addColumn<QPointF>("result");
+
+ auto row = [](int x, int y) {
+ QTest::addRow("(%d, %d)", x, y) << QPoint(x, y) << QPointF(x, y);
+ };
+ constexpr std::array samples = {-1, 0, 1};
+ for (int x : samples) {
+ for (int y : samples) {
+ row(x, y);
+ }
+ }
+}
+
+void tst_QPoint::toPointF()
+{
+ QFETCH(const QPoint, input);
+ QFETCH(const QPointF, result);
+
+ QCOMPARE(input.toPointF(), result);
+}
+
void tst_QPoint::transposed()
{
QCOMPARE(QPoint(1, 2).transposed(), QPoint(2, 1));
diff --git a/tests/auto/corelib/tools/qpointf/CMakeLists.txt b/tests/auto/corelib/tools/qpointf/CMakeLists.txt
index 09f725f8e6..16e5a9036a 100644
--- a/tests/auto/corelib/tools/qpointf/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qpointf/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qpointf.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpointf Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpointf LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpointf
SOURCES
tst_qpointf.cpp
diff --git a/tests/auto/corelib/tools/qpointf/tst_qpointf.cpp b/tests/auto/corelib/tools/qpointf/tst_qpointf.cpp
index 645c1ba210..392c22c70a 100644
--- a/tests/auto/corelib/tools/qpointf/tst_qpointf.cpp
+++ b/tests/auto/corelib/tools/qpointf/tst_qpointf.cpp
@@ -1,30 +1,27 @@
-/****************************************************************************
-**
-** 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 <QPointF>
+#ifdef QVARIANT_H
+# error "This test requires qpoint.h to not include qvariant.h"
+#endif
+
+// don't assume <type_traits>
+template <typename T, typename U>
+constexpr inline bool my_is_same_v = false;
+template <typename T>
+constexpr inline bool my_is_same_v<T, T> = true;
+
+#define CHECK(cvref) \
+ static_assert(my_is_same_v<decltype(get<0>(std::declval<QPointF cvref >())), qreal cvref >); \
+ static_assert(my_is_same_v<decltype(get<1>(std::declval<QPointF cvref >())), qreal cvref >)
+
+CHECK(&);
+CHECK(const &);
+CHECK(&&);
+CHECK(const &&);
+
+#undef CHECK
#include <QTest>
#include <QBuffer>
diff --git a/tests/auto/corelib/tools/qqueue/CMakeLists.txt b/tests/auto/corelib/tools/qqueue/CMakeLists.txt
index c3528163eb..bf229eee6a 100644
--- a/tests/auto/corelib/tools/qqueue/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qqueue/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qqueue.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qqueue Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qqueue LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qqueue
SOURCES
tst_qqueue.cpp
diff --git a/tests/auto/corelib/tools/qqueue/tst_qqueue.cpp b/tests/auto/corelib/tools/qqueue/tst_qqueue.cpp
index 959927cab8..44d4c34768 100644
--- a/tests/auto/corelib/tools/qqueue/tst_qqueue.cpp
+++ b/tests/auto/corelib/tools/qqueue/tst_qqueue.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 <QTest>
diff --git a/tests/auto/corelib/tools/qrect/CMakeLists.txt b/tests/auto/corelib/tools/qrect/CMakeLists.txt
index d48bec0c7d..a02e1c33a5 100644
--- a/tests/auto/corelib/tools/qrect/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qrect/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qrect.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qrect Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qrect LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qrect
SOURCES
tst_qrect.cpp
diff --git a/tests/auto/corelib/tools/qrect/tst_qrect.cpp b/tests/auto/corelib/tools/qrect/tst_qrect.cpp
index 4057eb67fb..0f3dd1a0ef 100644
--- a/tests/auto/corelib/tools/qrect/tst_qrect.cpp
+++ b/tests/auto/corelib/tools/qrect/tst_qrect.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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qrect.h>
@@ -32,6 +7,7 @@
#include <limits.h>
#include <qdebug.h>
+#include <array>
class tst_QRect : public QObject
{
@@ -124,6 +100,9 @@ private slots:
void margins();
void marginsf();
+ void toRectF_data();
+ void toRectF();
+
void translate_data();
void translate();
@@ -2526,16 +2505,11 @@ void tst_QRect::newMoveLeft_data()
{
// QTest::newRow( "LargestCoordQRect_MinimumInt" ) -- Not tested as it would cause an overflow
- QTest::newRow( "LargestCoordQRect_MiddleNegativeInt" ) << getQRectCase( LargestCoordQRect ) << getIntCase( MiddleNegativeInt )
- << QRect( QPoint( INT_MIN/2, INT_MIN ), QPoint(INT_MIN/2-1, INT_MAX ) );
- QTest::newRow( "LargestCoordQRect_ZeroInt" ) << getQRectCase( LargestCoordQRect ) << getIntCase( ZeroInt )
- << QRect( QPoint( 0, INT_MIN ), QPoint(-1, INT_MAX ) );
- QTest::newRow( "LargestCoordQRect_MiddlePositiveInt" ) << getQRectCase( LargestCoordQRect ) << getIntCase( MiddlePositiveInt )
- << QRect( QPoint( INT_MAX/2, INT_MIN ), QPoint(INT_MAX/2-1, INT_MAX ) );
- QTest::newRow( "LargestCoordQRect_MaximumInt" ) << getQRectCase( LargestCoordQRect ) << getIntCase( MaximumInt )
- << QRect( QPoint( INT_MAX, INT_MIN ), QPoint(INT_MAX-1, INT_MAX ) );
- QTest::newRow( "LargestCoordQRect_RandomInt" ) << getQRectCase( LargestCoordQRect ) << getIntCase( RandomInt )
- << QRect( QPoint( 4953, INT_MIN ), QPoint(4952, INT_MAX ) );
+ // QTest::newRow( "LargestCoordQRect_MiddleNegativeInt" ) -- Not tested as it would cause an overflow
+ // QTest::newRow( "LargestCoordQRect_ZeroInt" ) -- Not tested as it would cause an overflow
+ // QTest::newRow( "LargestCoordQRect_MiddlePositiveInt" ) -- Not tested as it would cause an overflow
+ // QTest::newRow( "LargestCoordQRect_MaximumInt" ) -- Not tested as it would cause an overflow
+ // QTest::newRow( "LargestCoordQRect_RandomInt" ) -- Not tested as it would cause an overflow
}
{
@@ -2695,16 +2669,11 @@ void tst_QRect::newMoveTop_data()
{
// QTest::newRow( "LargestCoordQRect_MinimumInt" ) -- Not tested as it would cause an overflow
- QTest::newRow( "LargestCoordQRect_MiddleNegativeInt" ) << getQRectCase( LargestCoordQRect ) << getIntCase( MiddleNegativeInt )
- << QRect( QPoint(INT_MIN,INT_MIN/2), QPoint(INT_MAX,INT_MIN/2-1) );
- QTest::newRow( "LargestCoordQRect_ZeroInt" ) << getQRectCase( LargestCoordQRect ) << getIntCase( ZeroInt )
- << QRect( QPoint(INT_MIN,0), QPoint(INT_MAX,-1) );
- QTest::newRow( "LargestCoordQRect_MiddlePositiveInt" ) << getQRectCase( LargestCoordQRect ) << getIntCase( MiddlePositiveInt )
- << QRect( QPoint(INT_MIN,INT_MAX/2), QPoint(INT_MAX,INT_MAX/2-1) );
- QTest::newRow( "LargestCoordQRect_MaximumInt" ) << getQRectCase( LargestCoordQRect ) << getIntCase( MaximumInt )
- << QRect( QPoint(INT_MIN,INT_MAX), QPoint(INT_MAX,INT_MAX-1) );
- QTest::newRow( "LargestCoordQRect_RandomInt" ) << getQRectCase( LargestCoordQRect ) << getIntCase( RandomInt )
- << QRect( QPoint(INT_MIN,4953), QPoint(INT_MAX,4952) );
+ // QTest::newRow( "LargestCoordQRect_MiddleNegativeInt" ) -- Not tested as it would cause an overflow
+ // QTest::newRow( "LargestCoordQRect_ZeroInt" ) -- Not tested as it would cause an overflow
+ // QTest::newRow( "LargestCoordQRect_MiddlePositiveInt" ) -- Not tested as it would cause an overflow
+ // QTest::newRow( "LargestCoordQRect_MaximumInt" ) -- Not tested as it would cause an overflow
+ // QTest::newRow( "LargestCoordQRect_RandomInt" ) -- Not tested as it would cause an overflow
}
{
@@ -3536,6 +3505,39 @@ void tst_QRect::marginsf()
QCOMPARE(a, rectangle.marginsRemoved(margins));
}
+void tst_QRect::toRectF_data()
+{
+ QTest::addColumn<QRect>("input");
+ QTest::addColumn<QRectF>("result");
+
+ auto row = [](int x1, int y1, int w, int h) {
+ // QRectF -> QRect conversion tries to maintain size(), not bottomRight(),
+ // so compare in (topLeft(), size()) space
+ QTest::addRow("((%d, %d) (%dx%d))", x1, y1, w, h)
+ << QRect({x1, y1}, QSize{w, h}) << QRectF(QPointF(x1, y1), QSizeF(w, h));
+ };
+ constexpr std::array samples = {-1, 0, 1};
+ for (int x1 : samples) {
+ for (int y1 : samples) {
+ for (int w : samples) {
+ for (int h : samples) {
+ row(x1, y1, w, h);
+ }
+ }
+ }
+ }
+}
+
+void tst_QRect::toRectF()
+{
+ QFETCH(const QRect, input);
+ QFETCH(const QRectF, result);
+
+ QCOMPARE(result.toRect(), input); // consistency check
+ QCOMPARE(input.toRectF(), result);
+}
+
+
void tst_QRect::translate_data()
{
QTest::addColumn<QRect>("r");
@@ -4313,8 +4315,6 @@ void tst_QRect::containsPointF_data()
QTest::addColumn<QPointF>("point");
QTest::addColumn<bool>("contains");
- QTest::newRow("test 27") << QRectF() << QPointF() << false;
-
QTest::newRow("test 01") << QRectF(0, 0, 10, 10) << QPointF( 0, 0) << true;
QTest::newRow("test 02") << QRectF(0, 0, 10, 10) << QPointF( 0, 10) << true;
QTest::newRow("test 03") << QRectF(0, 0, 10, 10) << QPointF(10, 0) << true;
diff --git a/tests/auto/corelib/tools/qringbuffer/CMakeLists.txt b/tests/auto/corelib/tools/qringbuffer/CMakeLists.txt
index d5d633c0bd..cfb7c6f461 100644
--- a/tests/auto/corelib/tools/qringbuffer/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qringbuffer/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qringbuffer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qringbuffer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qringbuffer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qringbuffer
SOURCES
tst_qringbuffer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/tools/qringbuffer/tst_qringbuffer.cpp b/tests/auto/corelib/tools/qringbuffer/tst_qringbuffer.cpp
index 6efa39f4f5..c7b79cfae1 100644
--- a/tests/auto/corelib/tools/qringbuffer/tst_qringbuffer.cpp
+++ b/tests/auto/corelib/tools/qringbuffer/tst_qringbuffer.cpp
@@ -1,33 +1,9 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QBuffer>
+#include <QVarLengthArray>
#include <private/qringbuffer_p.h>
#include <qlist.h>
diff --git a/tests/auto/corelib/tools/qscopedpointer/CMakeLists.txt b/tests/auto/corelib/tools/qscopedpointer/CMakeLists.txt
index df2d2aa509..7bfcfdebbf 100644
--- a/tests/auto/corelib/tools/qscopedpointer/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qscopedpointer/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qscopedpointer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qscopedpointer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qscopedpointer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qscopedpointer
SOURCES
tst_qscopedpointer.cpp
diff --git a/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp b/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp
index 967a3ccf55..3468c97f42 100644
--- a/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.cpp
+++ b/tests/auto/corelib/tools/qscopedpointer/tst_qscopedpointer.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 <QTest>
#include <QtCore/QScopedPointer>
@@ -61,6 +36,11 @@ private Q_SLOTS:
void comparison();
void array();
// TODO instanciate on const object
+
+ // Tests for deprecated APIs
+#if QT_DEPRECATED_SINCE(6, 1)
+ void deprecatedTake();
+#endif // QT_DEPRECATED_SINCE(6, 1)
};
void tst_QScopedPointer::defaultConstructor()
@@ -367,51 +347,57 @@ void scopedPointerComparisonTest(const A1 &a1, const A2 &a2, const B &b)
QVERIFY(a2 != b);
}
+// tst_QScopedPointer::comparison creates two QScopedPointers referring to the
+// same memory. This will lead to double-deletion error during cleanup if we
+// use a default QScopedPointer{Array}Deleter. This DummyDeleter does nothing,
+// so we can safely reference the same memory from multiple QScopedPointer
+// instances, and manage the memory manually.
+// That is fine for the comparison() test, because its goal is to check the
+// object's (in)equality, not the memory management
+struct DummyDeleter
+{
+ static inline void cleanup(RefCounted *) noexcept {}
+ void operator()(RefCounted *pointer) const noexcept
+ {
+ cleanup(pointer);
+ }
+};
+
void tst_QScopedPointer::comparison()
{
QCOMPARE( RefCounted::instanceCount.loadRelaxed(), 0 );
{
- RefCounted *a = new RefCounted;
- RefCounted *b = new RefCounted;
+ auto a = std::make_unique<RefCounted>();
+ auto b = std::make_unique<RefCounted>();
QCOMPARE( RefCounted::instanceCount.loadRelaxed(), 2 );
- QScopedPointer<RefCounted> pa1(a);
- QScopedPointer<RefCounted> pa2(a);
- QScopedPointer<RefCounted> pb(b);
+ QScopedPointer<RefCounted, DummyDeleter> pa1(a.get());
+ QScopedPointer<RefCounted, DummyDeleter> pa2(a.get());
+ QScopedPointer<RefCounted, DummyDeleter> pb(b.get());
scopedPointerComparisonTest(pa1, pa1, pb);
scopedPointerComparisonTest(pa2, pa2, pb);
scopedPointerComparisonTest(pa1, pa2, pb);
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- pa2.take();
-QT_WARNING_POP
-
QCOMPARE( RefCounted::instanceCount.loadRelaxed(), 2 );
}
QCOMPARE( RefCounted::instanceCount.loadRelaxed(), 0 );
{
- RefCounted *a = new RefCounted[42];
- RefCounted *b = new RefCounted[43];
+ auto a = std::make_unique<RefCounted[]>(42);
+ auto b = std::make_unique<RefCounted[]>(43);
QCOMPARE( RefCounted::instanceCount.loadRelaxed(), 85 );
- QScopedArrayPointer<RefCounted> pa1(a);
- QScopedArrayPointer<RefCounted> pa2(a);
- QScopedArrayPointer<RefCounted> pb(b);
+ QScopedArrayPointer<RefCounted, DummyDeleter> pa1(a.get());
+ QScopedArrayPointer<RefCounted, DummyDeleter> pa2(a.get());
+ QScopedArrayPointer<RefCounted, DummyDeleter> pb(b.get());
scopedPointerComparisonTest(pa1, pa2, pb);
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- pa2.take();
-QT_WARNING_POP
-
QCOMPARE( RefCounted::instanceCount.loadRelaxed(), 85 );
}
@@ -459,6 +445,23 @@ void tst_QScopedPointer::array()
QCOMPARE(instCount, RefCounted::instanceCount.loadRelaxed());
}
+#if QT_DEPRECATED_SINCE(6, 1)
+void tst_QScopedPointer::deprecatedTake()
+{
+ RefCounted *a = new RefCounted;
+
+ QScopedPointer<RefCounted> pa1(a);
+ QScopedPointer<RefCounted> pa2(a);
+
+ QCOMPARE(RefCounted::instanceCount.loadRelaxed(), 1);
+
+ QT_IGNORE_DEPRECATIONS(pa2.take();)
+
+ // check that pa2 holds nullptr, but the memory was not released
+ QVERIFY(pa2.isNull());
+ QCOMPARE(RefCounted::instanceCount.loadRelaxed(), 1);
+}
+#endif // QT_DEPRECATED_SINCE(6, 1)
QTEST_MAIN(tst_QScopedPointer)
#include "tst_qscopedpointer.moc"
diff --git a/tests/auto/corelib/tools/qscopedvaluerollback/CMakeLists.txt b/tests/auto/corelib/tools/qscopedvaluerollback/CMakeLists.txt
index fa3e3e3024..359a910a0a 100644
--- a/tests/auto/corelib/tools/qscopedvaluerollback/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qscopedvaluerollback/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qscopedvaluerollback.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qscopedvaluerollback Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qscopedvaluerollback LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qscopedvaluerollback
SOURCES
tst_qscopedvaluerollback.cpp
diff --git a/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp b/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp
index a05cf7ef33..3b493b4e75 100644
--- a/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.cpp
+++ b/tests/auto/corelib/tools/qscopedvaluerollback/tst_qscopedvaluerollback.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 <QTest>
#include <QtCore/QScopedValueRollback>
diff --git a/tests/auto/corelib/tools/qscopeguard/CMakeLists.txt b/tests/auto/corelib/tools/qscopeguard/CMakeLists.txt
index d21df799ea..6f6d664554 100644
--- a/tests/auto/corelib/tools/qscopeguard/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qscopeguard/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qscopeguard.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qscopeguard Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qscopeguard LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qscopeguard
SOURCES
tst_qscopeguard.cpp
diff --git a/tests/auto/corelib/tools/qscopeguard/tst_qscopeguard.cpp b/tests/auto/corelib/tools/qscopeguard/tst_qscopeguard.cpp
index 90b3557ef5..b7c2b952e2 100644
--- a/tests/auto/corelib/tools/qscopeguard/tst_qscopeguard.cpp
+++ b/tests/auto/corelib/tools/qscopeguard/tst_qscopeguard.cpp
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Sérgio Martins <sergio.martins@kdab.com>
-** 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) 2018 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Sérgio Martins <sergio.martins@kdab.com>
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/QScopeGuard>
+#include <optional>
+
/*!
\class tst_QScopeGuard
\internal
@@ -45,6 +22,7 @@ private Q_SLOTS:
void construction();
void constructionFromLvalue();
void constructionFromRvalue();
+ void optionalGuard();
void leavingScope();
void exceptions();
};
@@ -142,6 +120,24 @@ void tst_QScopeGuard::constructionFromRvalue()
QCOMPARE(Callable::moved, 1);
}
+void tst_QScopeGuard::optionalGuard()
+{
+ int i = 0;
+ auto lambda = [&] { ++i; };
+ std::optional sg = false ? std::optional{qScopeGuard(lambda)} : std::nullopt;
+ QVERIFY(!sg);
+ QCOMPARE(i, 0);
+ sg.emplace(qScopeGuard(lambda));
+ QVERIFY(sg);
+ sg->dismiss();
+ sg.reset();
+ QCOMPARE(i, 0);
+ sg.emplace(qScopeGuard(lambda));
+ QCOMPARE(i, 0);
+ sg.reset();
+ QCOMPARE(i, 1);
+}
+
void tst_QScopeGuard::leavingScope()
{
auto cleanup = qScopeGuard([] { s_globalState++; QCOMPARE(s_globalState, 3); });
diff --git a/tests/auto/corelib/tools/qset/CMakeLists.txt b/tests/auto/corelib/tools/qset/CMakeLists.txt
index ed92c1e036..9e3e33ee7c 100644
--- a/tests/auto/corelib/tools/qset/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qset/CMakeLists.txt
@@ -1,15 +1,19 @@
-# Generated from qset.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qset Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qset LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qset
SOURCES
tst_qset.cpp
- #DEFINES # special case remove
- #-QT_NO_JAVA_STYLE_ITERATORS # special case remove
)
-## Scopes:
-#####################################################################
+qt_internal_undefine_global_definition(tst_qset QT_NO_JAVA_STYLE_ITERATORS)
diff --git a/tests/auto/corelib/tools/qset/tst_qset.cpp b/tests/auto/corelib/tools/qset/tst_qset.cpp
index 421657dc27..116d38112b 100644
--- a/tests/auto/corelib/tools/qset/tst_qset.cpp
+++ b/tests/auto/corelib/tools/qset/tst_qset.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 <QTest>
#include <qset.h>
@@ -33,7 +8,7 @@
int toNumber(const QString &str)
{
int res = 0;
- for (int i = 0; i < str.length(); ++i)
+ for (int i = 0; i < str.size(); ++i)
res = (res * 10) + str[i].digitValue();
return res;
}
@@ -164,44 +139,44 @@ void tst_QSet::size()
QSet<int> set;
QVERIFY(set.size() == 0);
QVERIFY(set.isEmpty());
- QVERIFY(set.count() == set.size());
+ QVERIFY(set.size() == set.size());
QVERIFY(set.isEmpty() == set.empty());
QVERIFY(!set.isDetached());
set.insert(1);
QVERIFY(set.size() == 1);
QVERIFY(!set.isEmpty());
- QVERIFY(set.count() == set.size());
+ QVERIFY(set.size() == set.size());
QVERIFY(set.isEmpty() == set.empty());
set.insert(1);
QVERIFY(set.size() == 1);
QVERIFY(!set.isEmpty());
- QVERIFY(set.count() == set.size());
+ QVERIFY(set.size() == set.size());
QVERIFY(set.isEmpty() == set.empty());
set.insert(2);
QVERIFY(set.size() == 2);
QVERIFY(!set.isEmpty());
- QVERIFY(set.count() == set.size());
+ QVERIFY(set.size() == set.size());
QVERIFY(set.isEmpty() == set.empty());
set.remove(1);
QVERIFY(set.size() == 1);
QVERIFY(!set.isEmpty());
- QVERIFY(set.count() == set.size());
+ QVERIFY(set.size() == set.size());
QVERIFY(set.isEmpty() == set.empty());
set.remove(1);
QVERIFY(set.size() == 1);
QVERIFY(!set.isEmpty());
- QVERIFY(set.count() == set.size());
+ QVERIFY(set.size() == set.size());
QVERIFY(set.isEmpty() == set.empty());
set.remove(2);
QVERIFY(set.size() == 0);
QVERIFY(set.isEmpty());
- QVERIFY(set.count() == set.size());
+ QVERIFY(set.size() == set.size());
QVERIFY(set.isEmpty() == set.empty());
}
@@ -257,27 +232,39 @@ void tst_QSet::squeeze()
set.squeeze();
QVERIFY(set.capacity() < 100);
- for (int i = 0; i < 512; ++i)
+ for (int i = 0; i < 500; ++i)
set.insert(i);
- QVERIFY(set.capacity() == 512);
+ QCOMPARE(set.size(), 500);
+
+ // squeezed capacity for 500 elements
+ qsizetype capacity = set.capacity(); // current implementation: 512
+ QCOMPARE_GE(capacity, set.size());
set.reserve(50000);
- QVERIFY(set.capacity() >= 50000);
+ QVERIFY(set.capacity() >= 50000); // current implementation: 65536
set.squeeze();
- QVERIFY(set.capacity() == 512);
+ QCOMPARE(set.capacity(), capacity);
+ // removing elements does not shed capacity
set.remove(499);
- QVERIFY(set.capacity() == 512);
+ QCOMPARE(set.capacity(), capacity);
set.insert(499);
- QVERIFY(set.capacity() == 512);
+ QCOMPARE(set.capacity(), capacity);
- set.insert(1000);
- QVERIFY(set.capacity() == 1024);
+ // grow it beyond the current capacity
+ for (int i = set.size(); i <= capacity; ++i)
+ set.insert(i);
+ QCOMPARE(set.size(), capacity + 1);
+ QCOMPARE_GT(set.capacity(), capacity + 1);// current implementation: 2 * capacity (1024)
for (int i = 0; i < 500; ++i)
set.remove(i);
+
+ // removing elements does not shed capacity
+ QCOMPARE_GT(set.capacity(), capacity + 1);
+
set.squeeze();
QVERIFY(set.capacity() < 100);
}
@@ -869,7 +856,7 @@ void tst_QSet::setOperationsOnEmptySet()
empty.unite(nonEmpty);
QCOMPARE(empty, nonEmpty);
- QVERIFY(empty.isDetached());
+ QVERIFY(!empty.isDetached());
}
}
@@ -952,13 +939,11 @@ void tst_QSet::javaIterator()
QSetIterator<QString> i(set1);
QSetIterator<QString> j(set1);
- int n = 0;
while (i.hasNext()) {
QVERIFY(j.hasNext());
set1.remove(i.peekNext());
sum1 += toNumber(i.next());
sum2 += toNumber(j.next());
- ++n;
}
QVERIFY(!j.hasNext());
QVERIFY(sum1 == 24999 * 25000 / 2);
@@ -1036,7 +1021,7 @@ void tst_QSet::makeSureTheComfortFunctionsCompile()
void tst_QSet::initializerList()
{
QSet<int> set = {1, 1, 2, 3, 4, 5};
- QCOMPARE(set.count(), 5);
+ QCOMPARE(set.size(), 5);
QVERIFY(set.contains(1));
QVERIFY(set.contains(2));
QVERIFY(set.contains(3));
@@ -1045,7 +1030,7 @@ void tst_QSet::initializerList()
// check _which_ of the equal elements gets inserted (in the QHash/QMap case, it's the last):
const QSet<IdentityTracker> set2 = {{1, 0}, {1, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}};
- QCOMPARE(set2.count(), 5);
+ QCOMPARE(set2.size(), 5);
const int dummy = -1;
const IdentityTracker searchKey = {1, dummy};
QCOMPARE(set2.find(searchKey)->id, 0);
@@ -1064,23 +1049,33 @@ void tst_QSet::qhash()
//
{
// create some deterministic initial state:
- qSetGlobalQHashSeed(0);
+ QHashSeed::setDeterministicGlobalSeed();
QSet<int> s1;
s1.reserve(4);
s1 << 400 << 300 << 200 << 100;
- // also change the seed:
- qSetGlobalQHashSeed(0x10101010);
+ int retries = 128;
+ while (--retries >= 0) {
+ // reset the global seed to something different
+ QHashSeed::resetRandomGlobalSeed();
- QSet<int> s2;
- s2.reserve(100); // provoke different bucket counts
- s2 << 100 << 200 << 300 << 400; // and insert elements in different order, too
+ QSet<int> s2;
+ s2.reserve(100); // provoke different bucket counts
+ s2 << 100 << 200 << 300 << 400; // and insert elements in different order, too
+ QVERIFY(s1.capacity() != s2.capacity());
- QVERIFY(s1.capacity() != s2.capacity());
- QCOMPARE(s1, s2);
- QVERIFY(!std::equal(s1.cbegin(), s1.cend(), s2.cbegin())); // verify that the order _is_ different
- QCOMPARE(qHash(s1), qHash(s2));
+ // see if we got a _different_ order
+ if (std::equal(s1.cbegin(), s1.cend(), s2.cbegin()))
+ continue;
+
+ // check if the two QHashes still compare equal and produce the
+ // same hash, despite containing elements in different orders
+ QCOMPARE(s1, s2);
+ QCOMPARE(qHash(s1), qHash(s2));
+ }
+ QVERIFY2(retries != 0, "Could not find a QSet with a different order of elements even "
+ "after a lot of retries. This is unlikely, but possible.");
}
//
@@ -1112,7 +1107,7 @@ void tst_QSet::intersects()
s1 << 200;
QVERIFY(s1.intersects(s2));
- qSetGlobalQHashSeed(0x10101010);
+ QHashSeed::resetRandomGlobalSeed();
QSet<int> s3;
s3 << 500;
QVERIFY(!s1.intersects(s3));
diff --git a/tests/auto/corelib/tools/qsharedpointer/CMakeLists.txt b/tests/auto/corelib/tools/qsharedpointer/CMakeLists.txt
index d29f203bf9..0db0cba4c0 100644
--- a/tests/auto/corelib/tools/qsharedpointer/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qsharedpointer/CMakeLists.txt
@@ -1,13 +1,22 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qsharedpointer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsharedpointer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsharedpointer
SOURCES
forwarddeclared.cpp
nontracked.cpp
wrapper.cpp
tst_qsharedpointer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/tools/qsharedpointer/externaltests.cpp b/tests/auto/corelib/tools/qsharedpointer/externaltests.cpp
index 08b0f21cc9..c676924668 100644
--- a/tests/auto/corelib/tools/qsharedpointer/externaltests.cpp
+++ b/tests/auto/corelib/tools/qsharedpointer/externaltests.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 "externaltests.h"
@@ -80,7 +55,7 @@ namespace QTest {
{
if (process.state() == QProcess::Running) {
process.terminate();
- QThread::msleep(20);
+ QThread::sleep(std::chrono::milliseconds{20});
if (process.state() == QProcess::Running)
process.kill();
}
diff --git a/tests/auto/corelib/tools/qsharedpointer/externaltests.h b/tests/auto/corelib/tools/qsharedpointer/externaltests.h
index bae6adaefe..790ca61992 100644
--- a/tests/auto/corelib/tools/qsharedpointer/externaltests.h
+++ b/tests/auto/corelib/tools/qsharedpointer/externaltests.h
@@ -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
#ifndef QTEST_EXTERNAL_TESTS_H
diff --git a/tests/auto/corelib/tools/qsharedpointer/forwarddeclared.cpp b/tests/auto/corelib/tools/qsharedpointer/forwarddeclared.cpp
index df343b5ebc..5a0af60c11 100644
--- a/tests/auto/corelib/tools/qsharedpointer/forwarddeclared.cpp
+++ b/tests/auto/corelib/tools/qsharedpointer/forwarddeclared.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "forwarddeclared.h"
#include "qsharedpointer.h"
diff --git a/tests/auto/corelib/tools/qsharedpointer/forwarddeclared.h b/tests/auto/corelib/tools/qsharedpointer/forwarddeclared.h
index c72324841c..ba436d99cf 100644
--- a/tests/auto/corelib/tools/qsharedpointer/forwarddeclared.h
+++ b/tests/auto/corelib/tools/qsharedpointer/forwarddeclared.h
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef FORWARDDECLARED_H
#define FORWARDDECLARED_H
diff --git a/tests/auto/corelib/tools/qsharedpointer/nontracked.cpp b/tests/auto/corelib/tools/qsharedpointer/nontracked.cpp
index fa52c4f6c5..b572fa1b9f 100644
--- a/tests/auto/corelib/tools/qsharedpointer/nontracked.cpp
+++ b/tests/auto/corelib/tools/qsharedpointer/nontracked.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
/*
* This file exists because tst_qsharedpointer.cpp is compiled with
diff --git a/tests/auto/corelib/tools/qsharedpointer/nontracked.h b/tests/auto/corelib/tools/qsharedpointer/nontracked.h
index 76af80d2d7..e10ea08a4d 100644
--- a/tests/auto/corelib/tools/qsharedpointer/nontracked.h
+++ b/tests/auto/corelib/tools/qsharedpointer/nontracked.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef NONTRACKED_H
#define NONTRACKED_H
diff --git a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
index d526314d41..f42637a3fe 100644
--- a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
+++ b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp
@@ -1,32 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 The Qt Company Ltd.
-** Copyright (C) 2020 Intel Corporation.
-** Copyright (C) 2019 Klarälvdalens Datakonsult AB.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2022 Intel Corporation.
+// Copyright (C) 2021 Klarälvdalens Datakonsult AB.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#define QT_SHAREDPOINTER_TRACK_POINTERS
#include "qsharedpointer.h"
@@ -116,6 +91,7 @@ private slots:
void invalidConstructs_data();
void invalidConstructs();
#endif
+ void ownerComparisons();
// let invalidConstructs be the last test, because it's the slowest;
// add new tests above this block
@@ -795,9 +771,14 @@ public:
void tst_QSharedPointer::downCast()
{
{
+ // copy construction
QSharedPointer<DerivedData> ptr = QSharedPointer<DerivedData>(new DerivedData);
+ QSharedPointer<DerivedData> copy = ptr;
QSharedPointer<Data> baseptr = qSharedPointerCast<Data>(ptr);
QSharedPointer<Data> other;
+ QWeakPointer<DerivedData> weak = ptr;
+ QWeakPointer<Data> baseweak = qSharedPointerCast<Data>(ptr);
+ QWeakPointer<Data> baseweak2 = qSharedPointerCast<Data>(weak);
QVERIFY(ptr == baseptr);
QVERIFY(baseptr == ptr);
@@ -808,11 +789,55 @@ void tst_QSharedPointer::downCast()
QVERIFY(other != ptr);
QVERIFY(! (ptr == other));
QVERIFY(! (other == ptr));
+
+ // copy assignments
+ baseptr = qSharedPointerCast<Data>(ptr);
+ baseweak = qSharedPointerCast<Data>(ptr);
+ baseweak2 = baseweak;
+
+ // move assignments (these don't actually move)
+ baseptr = qSharedPointerCast<Data>(std::move(ptr));
+ ptr = copy;
+ baseweak = qSharedPointerCast<Data>(std::move(ptr));
+ ptr = copy;
+ baseweak2 = qSharedPointerCast<Data>(std::move(baseweak));
+
+ // move construction (these don't actually move)
+ ptr = copy;
+ QSharedPointer<Data> ptr3(qSharedPointerCast<Data>(std::move(ptr)));
+ ptr = copy;
+ QWeakPointer<Data> baseweak3(qSharedPointerCast<Data>(std::move(ptr)));
+ ptr = copy;
+ QWeakPointer<Data> baseweak4(qSharedPointerCast<Data>(std::move(weak)));
}
{
+ // copy construction
QSharedPointer<DerivedData> ptr = QSharedPointer<DerivedData>(new DerivedData);
+ QSharedPointer<DerivedData> copy = ptr;
QSharedPointer<Data> baseptr = ptr;
+ QWeakPointer<DerivedData> weak = ptr;
+ QWeakPointer<Data> baseweak = ptr;
+ QWeakPointer<Data> baseweak2 = weak;
+
+ // copy assignments
+ baseptr = ptr;
+ baseweak = ptr;
+ baseweak2 = weak;
+
+ // move assignments (only the QSharedPointer-QSharedPointer actually moves)
+ baseweak = std::move(ptr);
+ baseweak2 = std::move(weak);
+ ptr = copy;
+ baseptr = std::move(ptr);
+
+ // move construction (only the QSharedPointer-QSharedPointer actually moves)
+ ptr = copy;
+ QWeakPointer<Data> baseweak3(std::move(ptr));
+ ptr = copy;
+ QWeakPointer<Data> baseweak4(std::move(weak));
+ ptr = copy;
+ QSharedPointer<Data> baseptr2(std::move(ptr));
}
int destructorCount;
@@ -1251,6 +1276,22 @@ void tst_QSharedPointer::virtualBaseDifferentPointers()
QVERIFY(baseptr == aBase);
}
safetyCheck();
+ {
+ VirtualDerived *aData = new VirtualDerived;
+
+ QSharedPointer<VirtualDerived> ptr = QSharedPointer<VirtualDerived>(aData);
+ QWeakPointer<VirtualDerived> wptr = ptr;
+
+ ptr.reset();
+ QVERIFY(wptr.toStrongRef().isNull());
+
+ QWeakPointer<Data> wptr2 = wptr;
+ QVERIFY(wptr2.toStrongRef().isNull());
+
+ QWeakPointer<Data> wptr3 = std::move(wptr);
+ QVERIFY(wptr3.toStrongRef().isNull());
+ }
+ safetyCheck();
}
#ifndef QTEST_NO_RTTI
@@ -1958,7 +1999,7 @@ class StrongThread: public QThread
protected:
void run() override
{
- usleep(QRandomGenerator::global()->bounded(2000));
+ sleep(std::chrono::microseconds{QRandomGenerator::global()->bounded(2000)});
ptr->ref();
ptr.clear();
}
@@ -1971,7 +2012,7 @@ class WeakThread: public QThread
protected:
void run() override
{
- usleep(QRandomGenerator::global()->bounded(2000));
+ sleep(std::chrono::microseconds{QRandomGenerator::global()->bounded(2000)});
QSharedPointer<ThreadData> ptr = weak;
if (ptr)
ptr->ref();
@@ -2034,11 +2075,11 @@ void tst_QSharedPointer::threadStressTest()
base.clear();
// start threads
- for (int i = 0; i < allThreads.count(); ++i)
+ for (int i = 0; i < allThreads.size(); ++i)
if (allThreads[i]) allThreads[i]->start();
// wait for them to finish
- for (int i = 0; i < allThreads.count(); ++i)
+ for (int i = 0; i < allThreads.size(); ++i)
if (allThreads[i]) allThreads[i]->wait();
qDeleteAll(allThreads);
@@ -2801,5 +2842,140 @@ void tst_QSharedPointer::overloads()
weakOverloaded.test();
}
+void tst_QSharedPointer::ownerComparisons()
+{
+ using SP = QSharedPointer<int>;
+ using WP = QWeakPointer<int>;
+
+#define CHECK_EQ(a, b) \
+ do { \
+ QVERIFY(a.owner_equal(b)); \
+ QVERIFY(b.owner_equal(a)); \
+ QVERIFY(!a.owner_before(b)); \
+ QVERIFY(!b.owner_before(a)); \
+ QVERIFY(a.owner_hash() == b.owner_hash()); \
+ } while (false)
+
+#define CHECK_NOT_EQ(a, b) \
+ do { \
+ QVERIFY(!a.owner_equal(b)); \
+ QVERIFY(!b.owner_equal(a)); \
+ QVERIFY(a.owner_before(b) || b.owner_before(a)); \
+ } while (false)
+
+ // null
+ {
+ SP sp1;
+ SP sp2;
+ WP wp1 = sp1;
+ WP wp2;
+
+ CHECK_EQ(sp1, sp1);
+ CHECK_EQ(sp1, sp2);
+ CHECK_EQ(sp1, wp1);
+ CHECK_EQ(sp2, wp2);
+ CHECK_EQ(wp1, wp1);
+ CHECK_EQ(wp1, wp2);
+ CHECK_EQ(wp2, wp2);
+ }
+
+ // same owner
+ {
+ SP sp1 = SP::create(123);
+ SP sp2 = sp1;
+ WP wp1 = sp1;
+ SP wp2 = sp2;
+
+ CHECK_EQ(sp1, sp1);
+ CHECK_EQ(sp1, sp2);
+ CHECK_EQ(sp1, wp1);
+ CHECK_EQ(sp2, wp2);
+ CHECK_EQ(wp1, wp1);
+ CHECK_EQ(wp1, wp2);
+ }
+
+ // owning vs null
+ {
+ SP sp1 = SP::create(123);
+ SP sp2;
+ WP wp1 = sp1;
+ WP wp2 = sp2;
+
+ CHECK_EQ(sp1, sp1);
+ CHECK_NOT_EQ(sp1, sp2);
+ CHECK_EQ(sp1, wp1);
+ CHECK_EQ(sp2, wp2);
+ CHECK_EQ(wp1, wp1);
+ CHECK_NOT_EQ(wp1, wp2);
+ }
+
+ // different owners
+ {
+ SP sp1 = SP::create(123);
+ SP sp2 = SP::create(456);
+ WP wp1 = sp1;
+ WP wp2 = sp2;
+
+ CHECK_EQ(sp1, sp1);
+ CHECK_NOT_EQ(sp1, sp2);
+ CHECK_EQ(sp1, wp1);
+ CHECK_EQ(sp2, wp2);
+ CHECK_EQ(wp1, wp1);
+ CHECK_NOT_EQ(wp1, wp2);
+ }
+
+ // reset vs. null
+ {
+ SP sp1 = SP::create(123);
+ SP sp2;
+ WP wp1 = sp1;
+ WP wp2;
+
+ CHECK_EQ(sp1, sp1);
+ CHECK_NOT_EQ(sp1, sp2);
+ CHECK_EQ(sp1, wp1);
+ CHECK_NOT_EQ(sp1, wp2);
+ CHECK_EQ(wp1, wp1);
+ CHECK_NOT_EQ(wp1, wp2);
+
+ sp1.reset();
+
+ CHECK_EQ(sp1, sp1);
+ CHECK_EQ(sp1, sp2);
+ CHECK_NOT_EQ(sp1, wp1);
+ CHECK_EQ(sp2, wp2);
+ CHECK_EQ(wp1, wp1);
+ CHECK_NOT_EQ(wp1, wp2);
+ }
+
+ // expired weak pointers
+ {
+ WP wp1 = SP::create(123);
+ WP wp2;
+
+ CHECK_EQ(wp1, wp1);
+ CHECK_NOT_EQ(wp1, wp2);
+ }
+
+ {
+ WP wp1 = SP::create(123);
+ WP wp2 = wp1;
+
+ CHECK_EQ(wp1, wp1);
+ CHECK_EQ(wp1, wp2);
+ }
+
+ {
+ WP wp1 = SP::create(123);
+ WP wp2 = SP::create(456);
+
+ CHECK_EQ(wp1, wp1);
+ CHECK_EQ(wp2, wp2);
+ CHECK_NOT_EQ(wp1, wp2);
+ }
+#undef CHECK_EQ
+#undef CHECK_NOT_EQ
+}
+
QTEST_MAIN(tst_QSharedPointer)
#include "tst_qsharedpointer.moc"
diff --git a/tests/auto/corelib/tools/qsharedpointer/wrapper.cpp b/tests/auto/corelib/tools/qsharedpointer/wrapper.cpp
index 24a0cdc9c1..b39eee7d98 100644
--- a/tests/auto/corelib/tools/qsharedpointer/wrapper.cpp
+++ b/tests/auto/corelib/tools/qsharedpointer/wrapper.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
#ifdef QT_SHAREDPOINTER_TRACK_POINTERS
# undef QT_SHAREDPOINTER_TRACK_POINTERS
diff --git a/tests/auto/corelib/tools/qsharedpointer/wrapper.h b/tests/auto/corelib/tools/qsharedpointer/wrapper.h
index 18cea6e199..3b0bc09fed 100644
--- a/tests/auto/corelib/tools/qsharedpointer/wrapper.h
+++ b/tests/auto/corelib/tools/qsharedpointer/wrapper.h
@@ -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
#ifndef WRAPPER_H
#define WRAPPER_H
diff --git a/tests/auto/corelib/tools/qsize/CMakeLists.txt b/tests/auto/corelib/tools/qsize/CMakeLists.txt
index 5ecd154cd3..91de696ddd 100644
--- a/tests/auto/corelib/tools/qsize/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qsize/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qsize.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsize Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsize LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsize
SOURCES
tst_qsize.cpp
diff --git a/tests/auto/corelib/tools/qsize/tst_qsize.cpp b/tests/auto/corelib/tools/qsize/tst_qsize.cpp
index 83b4f1bd34..c9699c5e76 100644
--- a/tests/auto/corelib/tools/qsize/tst_qsize.cpp
+++ b/tests/auto/corelib/tools/qsize/tst_qsize.cpp
@@ -1,34 +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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QSize>
+#ifdef QVARIANT_H
+# error "This test requires qsize.h to not include qvariant.h"
+#endif
+
+// don't assume <type_traits>
+template <typename T, typename U>
+constexpr inline bool my_is_same_v = false;
+template <typename T>
+constexpr inline bool my_is_same_v<T, T> = true;
+
+#define CHECK(cvref) \
+ static_assert(my_is_same_v<decltype(get<0>(std::declval<QSize cvref >())), int cvref >); \
+ static_assert(my_is_same_v<decltype(get<1>(std::declval<QSize cvref >())), int cvref >)
+
+CHECK(&);
+CHECK(const &);
+CHECK(&&);
+CHECK(const &&);
+
+#undef CHECK
#include <QTest>
#include <qsize.h>
+#include <array>
+
Q_DECLARE_METATYPE(QMargins)
class tst_QSize : public QObject
@@ -47,6 +46,9 @@ private slots:
void grownOrShrunkBy_data();
void grownOrShrunkBy();
+ void toSizeF_data();
+ void toSizeF();
+
void transpose_data();
void transpose();
@@ -232,6 +234,30 @@ void tst_QSize::grownOrShrunkBy()
QCOMPARE(shrunk.grownBy(margins), input);
}
+void tst_QSize::toSizeF_data()
+{
+ QTest::addColumn<QSize>("input");
+ QTest::addColumn<QSizeF>("result");
+
+ auto row = [](int w, int h) {
+ QTest::addRow("(%d, %d)", w, h) << QSize(w, h) << QSizeF(w, h);
+ };
+ constexpr std::array samples = {-1, 0, 1};
+ for (int w : samples) {
+ for (int h : samples) {
+ row(w, h);
+ }
+ }
+}
+
+void tst_QSize::toSizeF()
+{
+ QFETCH(const QSize, input);
+ QFETCH(const QSizeF, result);
+
+ QCOMPARE(input.toSizeF(), result);
+}
+
void tst_QSize::transpose_data()
{
QTest::addColumn<QSize>("input1");
diff --git a/tests/auto/corelib/tools/qsizef/CMakeLists.txt b/tests/auto/corelib/tools/qsizef/CMakeLists.txt
index eb59fc6d8e..9adaafe2ea 100644
--- a/tests/auto/corelib/tools/qsizef/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qsizef/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qsizef.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsizef Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsizef LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsizef
SOURCES
tst_qsizef.cpp
diff --git a/tests/auto/corelib/tools/qsizef/tst_qsizef.cpp b/tests/auto/corelib/tools/qsizef/tst_qsizef.cpp
index 3a65506dee..ee33fa13b6 100644
--- a/tests/auto/corelib/tools/qsizef/tst_qsizef.cpp
+++ b/tests/auto/corelib/tools/qsizef/tst_qsizef.cpp
@@ -1,30 +1,27 @@
-/****************************************************************************
-**
-** 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 <QSizeF>
+#ifdef QVARIANT_H
+# error "This test requires qsize.h to not include qvariant.h"
+#endif
+
+// don't assume <type_traits>
+template <typename T, typename U>
+constexpr inline bool my_is_same_v = false;
+template <typename T>
+constexpr inline bool my_is_same_v<T, T> = true;
+
+#define CHECK(cvref) \
+ static_assert(my_is_same_v<decltype(get<0>(std::declval<QSizeF cvref >())), qreal cvref >); \
+ static_assert(my_is_same_v<decltype(get<1>(std::declval<QSizeF cvref >())), qreal cvref >)
+
+CHECK(&);
+CHECK(const &);
+CHECK(&&);
+CHECK(const &&);
+
+#undef CHECK
#include <QTest>
#include <qsize.h>
diff --git a/tests/auto/corelib/tools/qspan/CMakeLists.txt b/tests/auto/corelib/tools/qspan/CMakeLists.txt
new file mode 100644
index 0000000000..595d19dc43
--- /dev/null
+++ b/tests/auto/corelib/tools/qspan/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2023 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_qspan LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qspan
+ SOURCES
+ tst_qspan.cpp
+)
diff --git a/tests/auto/corelib/tools/qspan/tst_qspan.cpp b/tests/auto/corelib/tools/qspan/tst_qspan.cpp
new file mode 100644
index 0000000000..91d2ecf739
--- /dev/null
+++ b/tests/auto/corelib/tools/qspan/tst_qspan.cpp
@@ -0,0 +1,450 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QSpan>
+
+#include <QList>
+#include <QTest>
+
+#include <algorithm>
+#include <array>
+#ifdef __cpp_lib_span
+#include <span>
+#endif
+#include <vector>
+
+namespace {
+
+struct NotNothrowMovable {
+ NotNothrowMovable(NotNothrowMovable &&) noexcept(false) {};
+ NotNothrowMovable &operator=(NotNothrowMovable &&) noexcept(false) { return *this; };
+};
+static_assert(!std::is_nothrow_move_constructible_v<NotNothrowMovable>);
+static_assert(!std::is_nothrow_move_assignable_v<NotNothrowMovable>);
+
+} // unnamed namespace
+
+//
+// QSpan is nothrow movable even if the payload type is not:
+//
+static_assert(std::is_nothrow_move_constructible_v<QSpan<NotNothrowMovable>>);
+static_assert(std::is_nothrow_move_constructible_v<QSpan<NotNothrowMovable, 42>>);
+static_assert(std::is_nothrow_move_constructible_v<QSpan<NotNothrowMovable, 0>>);
+
+static_assert(std::is_nothrow_move_assignable_v<QSpan<NotNothrowMovable>>);
+static_assert(std::is_nothrow_move_assignable_v<QSpan<NotNothrowMovable, 42>>);
+static_assert(std::is_nothrow_move_assignable_v<QSpan<NotNothrowMovable, 0>>);
+
+//
+// All QSpans are trivially destructible and trivially copyable:
+//
+static_assert(std::is_trivially_copyable_v<QSpan<NotNothrowMovable>>);
+static_assert(std::is_trivially_copyable_v<QSpan<NotNothrowMovable, 42>>);
+static_assert(std::is_trivially_copyable_v<QSpan<NotNothrowMovable, 0>>);
+
+static_assert(std::is_trivially_destructible_v<QSpan<NotNothrowMovable>>);
+static_assert(std::is_trivially_destructible_v<QSpan<NotNothrowMovable, 42>>);
+static_assert(std::is_trivially_destructible_v<QSpan<NotNothrowMovable, 0>>);
+
+//
+// Fixed-size QSpans implicitly convert to variable-sized ones:
+//
+static_assert(std::is_convertible_v<QSpan<int, 42>, QSpan<int>>);
+static_assert(std::is_convertible_v<QSpan<int, 0>, QSpan<int>>);
+
+#ifdef __cpp_lib_span
+static_assert(std::is_convertible_v<std::span<int, 42>, QSpan<int>>);
+static_assert(std::is_convertible_v<std::span<int, 0>, QSpan<int>>);
+
+#ifdef __cpp_lib_concepts
+// requires enable_borrowed_range
+static_assert(std::is_convertible_v<QSpan<int, 42>, std::span<int>>);
+static_assert(std::is_convertible_v<QSpan<int, 0>, std::span<int>>);
+#endif // __cpp_lib_concepts
+#endif // __cpp_lib_span
+
+//
+// Mutable spans implicitly convert to read-only ones, but not vice versa:
+//
+static_assert(std::is_convertible_v<QSpan<int>, QSpan<const int>>);
+static_assert(std::is_convertible_v<QSpan<int, 42>, QSpan<const int, 42>>);
+static_assert(std::is_convertible_v<QSpan<int, 0>, QSpan<const int, 0>>);
+
+static_assert(!std::is_convertible_v<QSpan<const int>, QSpan<int>>);
+static_assert(!std::is_convertible_v<QSpan<const int, 42>, QSpan<int, 42>>);
+static_assert(!std::is_convertible_v<QSpan<const int, 0>, QSpan<int, 0>>);
+
+#ifdef __cpp_lib_span
+static_assert(std::is_convertible_v<std::span<int>, QSpan<const int>>);
+static_assert(std::is_convertible_v<std::span<int, 42>, QSpan<const int, 42>>);
+static_assert(std::is_convertible_v<std::span<int, 0>, QSpan<const int, 0>>);
+
+static_assert(!std::is_convertible_v<std::span<const int>, QSpan<int>>);
+static_assert(!std::is_convertible_v<std::span<const int, 42>, QSpan<int, 42>>);
+static_assert(!std::is_convertible_v<std::span<const int, 0>, QSpan<int, 0>>);
+
+static_assert(std::is_convertible_v<QSpan<int>, std::span<const int>>);
+// fixed-size std::span constructors are explicit:
+static_assert(!std::is_convertible_v<QSpan<int, 42>, std::span<const int, 42>>);
+static_assert(!std::is_convertible_v<QSpan<int, 0>, std::span<const int, 0>>);
+// observe: is_convertible<From,To>, but is_constuctible<To,From>!
+static_assert(std::is_constructible_v<std::span<const int, 42>, QSpan<int, 42>>);
+static_assert(std::is_constructible_v<std::span<const int, 0>, QSpan<int, 0>>);
+
+static_assert(!std::is_convertible_v<QSpan<const int>, std::span<int>>);
+static_assert(!std::is_convertible_v<QSpan<const int, 42>, std::span<int, 42>>);
+static_assert(!std::is_convertible_v<QSpan<const int, 0>, std::span<int, 0>>);
+#endif // __cpp_lib_span
+
+// Spans don't convert from nonsense:
+static_assert(!std::is_constructible_v<QSpan<const int>, int&&>);
+
+// Span is constructible from initializer_list
+static_assert( std::is_convertible_v<std::initializer_list<int>, QSpan<const int>>);
+static_assert(!std::is_convertible_v<std::initializer_list<int>, QSpan< int>>);
+static_assert(!std::is_constructible_v<QSpan<int>, std::initializer_list<int>>);
+
+static_assert( std::is_convertible_v<std::initializer_list<int>, QSpan<const int, 4>>); // non-standard, but QSpan considers initializer_list a range
+static_assert( std::is_constructible_v<QSpan<const int, 4>, std::initializer_list<int>>);
+static_assert(!std::is_constructible_v<QSpan< int, 4>, std::initializer_list<int>>);
+
+class tst_QSpan : public QObject
+{
+ Q_OBJECT
+public:
+ using QObject::QObject;
+
+private Q_SLOTS:
+ void onlyZeroExtentSpansHaveDefaultCtors() const;
+ void zeroExtentSpansMaintainADataPointer() const;
+ void fromArray() const;
+ void fromStdArray() const;
+ void fromStdInitializerList() const;
+ void fromZeroSizeStdArray() const;
+ void fromStdVector() const;
+ void fromQList() const;
+ void fromInitList() const;
+
+private:
+ template <typename T, std::size_t N>
+ void check_nonempty_span(QSpan<T, N>, qsizetype expectedSize) const;
+ template <typename T, std::size_t N>
+ void check_empty_span_incl_subspans(QSpan<T, N>) const;
+ template <typename T, std::size_t N>
+ void check_empty_span(QSpan<T, N>) const;
+ template <typename T, std::size_t N>
+ void check_null_span(QSpan<T, N>) const;
+
+ template <std::size_t ExpectedExtent, typename C>
+ void from_container_impl(C &&c) const;
+ template <typename C>
+ void from_variable_size_container_impl(C &&c) const;
+};
+
+#define RETURN_IF_FAILED() \
+ do { if (QTest::currentTestFailed()) return; } while (false)
+
+void tst_QSpan::onlyZeroExtentSpansHaveDefaultCtors() const
+{
+ static_assert(std::is_nothrow_default_constructible_v<QSpan<int, 0>>);
+ static_assert(std::is_nothrow_default_constructible_v<QSpan<const int, 0>>);
+ static_assert(std::is_nothrow_default_constructible_v<QSpan<int>>);
+ static_assert(std::is_nothrow_default_constructible_v<QSpan<const int, 0>>);
+
+ QSpan<int, 0> si;
+ check_null_span(si);
+ RETURN_IF_FAILED();
+
+ QSpan<const int, 0> sci;
+ check_null_span(sci);
+ RETURN_IF_FAILED();
+
+ QSpan<int> sdi;
+ check_null_span(sdi);
+ RETURN_IF_FAILED();
+
+ QSpan<const int> sdci;
+ check_null_span(sdci);
+ RETURN_IF_FAILED();
+
+ static_assert(!std::is_default_constructible_v<QSpan<int, 1>>);
+ static_assert(!std::is_default_constructible_v<QSpan<const int, 42>>);
+}
+
+void tst_QSpan::zeroExtentSpansMaintainADataPointer() const
+{
+ int i;
+ QSpan<int, 0> si{&i, 0};
+ QCOMPARE(si.data(), &i);
+ check_empty_span_incl_subspans(si);
+ RETURN_IF_FAILED();
+
+ QSpan<const int, 0> sci{&i, 0};
+ QCOMPARE(sci.data(), &i);
+ check_empty_span_incl_subspans(sci);
+ RETURN_IF_FAILED();
+
+ QSpan<int, 0> sdi{&i, 0};
+ QCOMPARE(sdi.data(), &i);
+ check_empty_span_incl_subspans(sdi);
+ RETURN_IF_FAILED();
+
+ QSpan<const int, 0> sdci{&i, 0};
+ QCOMPARE(sdci.data(), &i);
+ check_empty_span_incl_subspans(sdci);
+ RETURN_IF_FAILED();
+}
+
+template <typename T, std::size_t N>
+void tst_QSpan::check_nonempty_span(QSpan<T, N> s, qsizetype expectedSize) const
+{
+ static_assert(N > 0);
+ QCOMPARE_GT(expectedSize, 0); // otherwise, use check_empty_span!
+
+ QVERIFY(!s.empty());
+ QVERIFY(!s.isEmpty());
+
+ QCOMPARE_EQ(s.size(), expectedSize);
+ QCOMPARE_NE(s.data(), nullptr);
+
+ QCOMPARE_NE(s.begin(), s.end());
+ QCOMPARE_NE(s.rbegin(), s.rend());
+ QCOMPARE_NE(s.cbegin(), s.cend());
+ QCOMPARE_NE(s.crbegin(), s.crend());
+
+ QCOMPARE_EQ(s.end() - s.begin(), s.size());
+ QCOMPARE_EQ(s.cend() - s.cbegin(), s.size());
+ QCOMPARE_EQ(s.rend() - s.rbegin(), s.size());
+ QCOMPARE_EQ(s.crend() - s.crbegin(), s.size());
+
+ QCOMPARE_EQ(std::addressof(s.front()), std::addressof(*s.begin()));
+ QCOMPARE_EQ(std::addressof(s.front()), std::addressof(*s.cbegin()));
+ QCOMPARE_EQ(std::addressof(s.front()), std::addressof(s[0]));
+ QCOMPARE_EQ(std::addressof(s.back()), std::addressof(*s.rbegin()));
+ QCOMPARE_EQ(std::addressof(s.back()), std::addressof(*s.crbegin()));
+ QCOMPARE_EQ(std::addressof(s.back()), std::addressof(s[s.size() - 1]));
+
+ // ### more?
+
+ if (expectedSize == 1) {
+ // don't run into Mandates: Offset >= Extent
+ if constexpr (N > 0) { // incl. N == std::dynamic_extent
+ check_empty_span_incl_subspans(s.template subspan<1>());
+ RETURN_IF_FAILED();
+ }
+ check_empty_span_incl_subspans(s.subspan(1));
+ RETURN_IF_FAILED();
+ } else {
+ // don't run into Mandates: Offset >= Extent
+ if constexpr (N > 1) { // incl. N == std::dynamic_extent
+ check_nonempty_span(s.template subspan<1>(), expectedSize - 1);
+ RETURN_IF_FAILED();
+ }
+ check_nonempty_span(s.subspan(1), expectedSize - 1);
+ RETURN_IF_FAILED();
+ }
+}
+
+template <typename T, std::size_t N>
+void tst_QSpan::check_empty_span(QSpan<T, N> s) const
+{
+ QVERIFY(s.empty());
+ QVERIFY(s.isEmpty());
+
+ QCOMPARE_EQ(s.size(), 0);
+
+ QCOMPARE_EQ(s.begin(), s.end());
+ QCOMPARE_EQ(s.cbegin(), s.cend());
+ QCOMPARE_EQ(s.rbegin(), s.rend());
+ QCOMPARE_EQ(s.crbegin(), s.crend());
+}
+
+template <typename T, std::size_t N>
+void tst_QSpan::check_empty_span_incl_subspans(QSpan<T, N> s) const
+{
+ check_empty_span(s);
+ RETURN_IF_FAILED();
+
+ {
+ const auto fi = s.template first<0>();
+ check_empty_span(fi);
+ RETURN_IF_FAILED();
+ QCOMPARE_EQ(fi.data(), s.data());
+ }
+ {
+ const auto la = s.template last<0>();
+ check_empty_span(la);
+ RETURN_IF_FAILED();
+ QCOMPARE_EQ(la.data(), s.data());
+ }
+ {
+ const auto ss = s.template subspan<0>();
+ check_empty_span(ss);
+ RETURN_IF_FAILED();
+ QCOMPARE_EQ(ss.data(), s.data());
+ }
+ {
+ const auto ss = s.template subspan<0, 0>();
+ check_empty_span(ss);
+ RETURN_IF_FAILED();
+ QCOMPARE_EQ(ss.data(), s.data());
+ }
+
+ {
+ const auto fi = s.first(0);
+ check_empty_span(fi);
+ RETURN_IF_FAILED();
+ QCOMPARE_EQ(fi.data(), s.data());
+ }
+ {
+ const auto la = s.last(0);
+ check_empty_span(la);
+ RETURN_IF_FAILED();
+ QCOMPARE_EQ(la.data(), s.data());
+ }
+ {
+ const auto ss = s.subspan(0);
+ check_empty_span(ss);
+ RETURN_IF_FAILED();
+ QCOMPARE_EQ(ss.data(), s.data());
+ }
+ {
+ const auto ss = s.subspan(0, 0);
+ check_empty_span(ss);
+ RETURN_IF_FAILED();
+ QCOMPARE_EQ(ss.data(), s.data());
+ }
+}
+
+
+template<typename T, std::size_t N>
+void tst_QSpan::check_null_span(QSpan<T, N> s) const
+{
+ QCOMPARE_EQ(s.data(), nullptr);
+ QCOMPARE_EQ(s.begin(), nullptr);
+ QCOMPARE_EQ(s.cbegin(), nullptr);
+ QCOMPARE_EQ(s.end(), nullptr);
+ check_empty_span_incl_subspans(s);
+}
+
+template <std::size_t ExpectedExtent, typename C>
+void tst_QSpan::from_container_impl(C &&c) const
+{
+ const auto c_size = qsizetype(QSpanPrivate::adl_size(c));
+ const auto c_data = QSpanPrivate::adl_data(c);
+
+ using V = std::remove_reference_t<QSpanPrivate::range_reference_t<C>>;
+ {
+ QSpan si = c; // CTAD
+ static_assert(std::is_same_v<decltype(si), QSpan<V, ExpectedExtent>>);
+
+ QCOMPARE_EQ(si.size(), c_size);
+ QCOMPARE_EQ(si.data(), c_data);
+
+ check_nonempty_span(si, c_size);
+ RETURN_IF_FAILED();
+
+ QSpan<const int> sci = c;
+
+ QCOMPARE_EQ(sci.size(), c_size);
+ QCOMPARE_EQ(sci.data(), c_data);
+
+ check_nonempty_span(sci, c_size);
+ RETURN_IF_FAILED();
+ }
+ {
+ QSpan sci = std::as_const(c); // CTAD
+ static_assert(std::is_same_v<decltype(sci), QSpan<const int, ExpectedExtent>>);
+
+ QCOMPARE_EQ(sci.size(), c_size);
+ QCOMPARE_EQ(sci.data(), c_data);
+
+ check_nonempty_span(sci, c_size);
+ RETURN_IF_FAILED();
+ }
+}
+
+template <typename C>
+void tst_QSpan::from_variable_size_container_impl(C &&c) const
+{
+ constexpr auto E = q20::dynamic_extent;
+ from_container_impl<E>(std::forward<C>(c));
+}
+
+void tst_QSpan::fromArray() const
+{
+ int ai[] = {42, 84, 168, 336};
+ from_container_impl<4>(ai);
+}
+
+void tst_QSpan::fromStdArray() const
+{
+ std::array<int, 4> ai = {42, 84, 168, 336};
+ from_container_impl<4>(ai);
+}
+
+void tst_QSpan::fromStdInitializerList() const
+{
+ std::initializer_list<int> il = {42, 84, 168, 336};
+
+ QSpan sci = il; // CTAD
+ // special case: always deduced as <const int>:
+ static_assert(std::is_same_v<decltype(sci), QSpan<const int>>);
+
+ QCOMPARE_EQ(sci.size(), qsizetype(il.size()));
+ QCOMPARE_EQ(sci.data(), il.begin());
+
+ check_nonempty_span(sci, 4);
+ RETURN_IF_FAILED();
+}
+
+void tst_QSpan::fromZeroSizeStdArray() const
+{
+ std::array<int, 0> ai = {};
+ QSpan si = ai; // CTAD
+ static_assert(std::is_same_v<decltype(si), QSpan<int, 0>>);
+ QCOMPARE_EQ(si.data(), ai.data());
+
+ const std::array<int, 0> cai = {};
+ QSpan csi = cai; // CTAD
+ static_assert(std::is_same_v<decltype(csi), QSpan<const int, 0>>);
+ QCOMPARE_EQ(csi.data(), cai.data());
+
+ std::array<const int, 0> aci = {};
+ QSpan sci = aci; // CTAD
+ static_assert(std::is_same_v<decltype(sci), QSpan<const int, 0>>);
+ QCOMPARE_EQ(sci.data(), aci.data());
+
+ std::array<const int, 0> caci = {};
+ QSpan csci = caci; // CTAD
+ static_assert(std::is_same_v<decltype(csci), QSpan<const int, 0>>);
+ QCOMPARE_EQ(csci.data(), caci.data());
+}
+
+void tst_QSpan::fromStdVector() const
+{
+ std::vector<int> vi = {42, 84, 168, 336};
+ from_variable_size_container_impl(vi);
+}
+
+void tst_QSpan::fromQList() const
+{
+ QList<int> li = {42, 84, 168, 336};
+ from_variable_size_container_impl(li);
+}
+
+void tst_QSpan::fromInitList() const
+{
+ from_variable_size_container_impl(std::initializer_list<int>{42, 84, 168, 336});
+
+ auto l1 = [](QSpan<const int>){};
+ l1({1, 2, 3});
+
+ auto l2 = [](QSpan<const int, 3>){};
+ l2({4, 5, 6});
+}
+
+#undef RETURN_IF_FAILED
+
+QTEST_APPLESS_MAIN(tst_QSpan);
+#include "tst_qspan.moc"
diff --git a/tests/auto/corelib/tools/qstl/CMakeLists.txt b/tests/auto/corelib/tools/qstl/CMakeLists.txt
index 49b209cffa..b2f053e6ce 100644
--- a/tests/auto/corelib/tools/qstl/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qstl/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qstl.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstl Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstl LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstl
SOURCES
tst_qstl.cpp
diff --git a/tests/auto/corelib/tools/qstl/tst_qstl.cpp b/tests/auto/corelib/tools/qstl/tst_qstl.cpp
index 1cd74ad305..43d40bc128 100644
--- a/tests/auto/corelib/tools/qstl/tst_qstl.cpp
+++ b/tests/auto/corelib/tools/qstl/tst_qstl.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 <QTest>
diff --git a/tests/auto/corelib/tools/qtaggedpointer/CMakeLists.txt b/tests/auto/corelib/tools/qtaggedpointer/CMakeLists.txt
index 7f3ae75028..fb2e5dc922 100644
--- a/tests/auto/corelib/tools/qtaggedpointer/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qtaggedpointer/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qtaggedpointer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtaggedpointer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtaggedpointer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtaggedpointer
SOURCES
tst_qtaggedpointer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/corelib/tools/qtaggedpointer/tst_qtaggedpointer.cpp b/tests/auto/corelib/tools/qtaggedpointer/tst_qtaggedpointer.cpp
index dcc966fc2f..a1e61fc3a1 100644
--- a/tests/auto/corelib/tools/qtaggedpointer/tst_qtaggedpointer.cpp
+++ b/tests/auto/corelib/tools/qtaggedpointer/tst_qtaggedpointer.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QtCore/qtaggedpointer.h>
@@ -36,6 +11,7 @@ class tst_QTaggedPointer : public QObject
private Q_SLOTS:
void constExpr();
void construction();
+ void assignment();
void dereferenceOperator();
void pointerOperator();
void negationOperator();
@@ -105,6 +81,47 @@ void tst_QTaggedPointer::construction()
}
}
+void tst_QTaggedPointer::assignment()
+{
+ QScopedPointer<int> rawPointer(new int(5));
+ QTaggedPointer<int> p(rawPointer.data(), 0x1);
+ QTaggedPointer<int> p2(rawPointer.data(), 0x2);
+
+ QCOMPARE(p.data(), rawPointer.data());
+ QCOMPARE(p.tag(), quintptr(0x1));
+
+ QCOMPARE(p2.data(), rawPointer.data());
+ QCOMPARE(p2.tag(), quintptr(0x2));
+
+ p = nullptr;
+ QCOMPARE(p.data(), nullptr);
+ QCOMPARE(p.tag(), quintptr(0x1));
+
+ p = rawPointer.data();
+ QCOMPARE(p.data(), rawPointer.data());
+ QCOMPARE(p.tag(), quintptr(0x1));
+
+ p = {};
+ QCOMPARE(p.data(), nullptr);
+ QCOMPARE(p.tag(), quintptr(0x0));
+
+ p = p2;
+ QCOMPARE(p.data(), rawPointer.data());
+ QCOMPARE(p.tag(), quintptr(0x2));
+
+ p = nullptr;
+ QCOMPARE(p.data(), nullptr);
+ QCOMPARE(p.tag(), quintptr(0x2));
+
+ p = {};
+ QCOMPARE(p.data(), nullptr);
+ QCOMPARE(p.tag(), quintptr(0x0));
+
+ p = rawPointer.data();
+ QCOMPARE(p.data(), rawPointer.data());
+ QCOMPARE(p.tag(), quintptr(0x0));
+}
+
class AbstractClass
{
public:
diff --git a/tests/auto/corelib/tools/qtimeline/CMakeLists.txt b/tests/auto/corelib/tools/qtimeline/CMakeLists.txt
index e3a24e9440..a43e93990a 100644
--- a/tests/auto/corelib/tools/qtimeline/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qtimeline/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qtimeline.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtimeline Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtimeline LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtimeline
SOURCES
tst_qtimeline.cpp
diff --git a/tests/auto/corelib/tools/qtimeline/tst_qtimeline.cpp b/tests/auto/corelib/tools/qtimeline/tst_qtimeline.cpp
index 1ea18d700c..3593a65c4e 100644
--- a/tests/auto/corelib/tools/qtimeline/tst_qtimeline.cpp
+++ b/tests/auto/corelib/tools/qtimeline/tst_qtimeline.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QtTest/private/qpropertytesthelper_p.h>
@@ -105,7 +80,7 @@ void tst_QTimeLine::range()
timeLine.setStartFrame(5000);
QVERIFY(timeLine.currentFrame() > oldValue);
timeLine.setFrameRange(0, 500);
- QTRY_VERIFY(spy.count() > 1);
+ QTRY_VERIFY(spy.size() > 1);
QVERIFY(timeLine.currentFrame() < oldValue);
}
@@ -127,7 +102,7 @@ void tst_QTimeLine::currentTime()
spy.clear();
timeLine.setCurrentTime(timeLine.duration()/2);
timeLine.setCurrentTime(timeLine.duration()/2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
QCOMPARE(timeLine.currentTime(), timeLine.duration()/2);
timeLine.resume();
@@ -178,10 +153,10 @@ void tst_QTimeLine::bindableCurrentTime()
spy.clear();
QProperty<int> referenceCurrentTime(timeLine.duration() / 2);
timeLine.bindableCurrentTime().setBinding([&]() { return referenceCurrentTime.value(); });
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
// setting it a second time to check that valueChanged() is emitted only once
referenceCurrentTime = timeLine.duration() / 2;
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
QCOMPARE(timeLine.currentTime(), timeLine.duration() / 2);
@@ -197,7 +172,7 @@ void tst_QTimeLine::bindableCurrentTime()
spy.clear();
referenceCurrentTime = 0;
QCOMPARE(currentTimeObserver.value(), timeLine.duration());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QTimeLine::duration()
@@ -261,7 +236,7 @@ void tst_QTimeLine::frameRate()
timeLine.start();
QTest::qWait(timeLine.duration()*2);
QCOMPARE(timeLine.state(), QTimeLine::NotRunning);
- int slowCount = spy.count();
+ int slowCount = spy.size();
// Faster!!
timeLine.setUpdateInterval(1000 / 100);
@@ -270,7 +245,7 @@ void tst_QTimeLine::frameRate()
timeLine.start();
QTest::qWait(timeLine.duration()*2);
QCOMPARE(timeLine.state(), QTimeLine::NotRunning);
- QVERIFY2(slowCount < spy.count(), QByteArray::number(spy.count()));
+ QVERIFY2(slowCount < spy.size(), QByteArray::number(spy.size()));
}
void tst_QTimeLine::bindableUpdateInterval()
@@ -295,7 +270,7 @@ void tst_QTimeLine::bindableUpdateInterval()
timeLine.start();
QTest::qWait(timeLine.duration() * 2);
QCOMPARE(timeLine.state(), QTimeLine::NotRunning);
- int slowCount = spy.count();
+ int slowCount = spy.size();
// Faster!!
updateIntervalReference = 1000 / 100;
@@ -304,7 +279,7 @@ void tst_QTimeLine::bindableUpdateInterval()
timeLine.start();
QTest::qWait(timeLine.duration() * 2);
QCOMPARE(timeLine.state(), QTimeLine::NotRunning);
- QVERIFY2(slowCount < spy.count(), QByteArray::number(spy.count()));
+ QVERIFY2(slowCount < spy.size(), QByteArray::number(spy.size()));
}
void tst_QTimeLine::value()
@@ -319,7 +294,7 @@ void tst_QTimeLine::value()
QTRY_VERIFY(timeLine.currentValue() > 0);
QTRY_COMPARE(timeLine.state(), QTimeLine::NotRunning);
QCOMPARE(timeLine.currentValue(), 1.0);
- QVERIFY(spy.count() > 0);
+ QVERIFY(spy.size() > 0);
// Reverse should decrease the value
timeLine.setCurrentTime(100);
@@ -405,8 +380,8 @@ void tst_QTimeLine::loopCount()
loop.exec();
- QCOMPARE(finishedSpy.count(), 1);
- QCOMPARE(frameChangedSpy.count(), 11);
+ QCOMPARE(finishedSpy.size(), 1);
+ QCOMPARE(frameChangedSpy.size(), 11);
for (int i = 0; i < 11; ++i)
QCOMPARE(frameChangedSpy.at(i).at(0).toInt(), (i+1) % 3);
}
@@ -415,8 +390,8 @@ void tst_QTimeLine::loopCount()
timeLine.start();
loop.exec();
- QCOMPARE(finishedSpy.count(), 2);
- QCOMPARE(frameChangedSpy.count(), 22);
+ QCOMPARE(finishedSpy.size(), 2);
+ QCOMPARE(frameChangedSpy.size(), 22);
for (int i = 11; i < 22; ++i) {
QCOMPARE(frameChangedSpy.at(i).at(0).toInt(), 2 - (i+2) % 3);
}
@@ -481,8 +456,8 @@ void tst_QTimeLine::bindableLoopCount()
loop.exec();
- QCOMPARE(finishedSpy.count(), 1);
- QCOMPARE(frameChangedSpy.count(), 11);
+ QCOMPARE(finishedSpy.size(), 1);
+ QCOMPARE(frameChangedSpy.size(), 11);
for (int i = 0; i < 11; ++i)
QCOMPARE(frameChangedSpy.at(i).at(0).toInt(), (i + 1) % 3);
}
@@ -491,8 +466,8 @@ void tst_QTimeLine::bindableLoopCount()
timeLine.start();
loop.exec();
- QCOMPARE(finishedSpy.count(), 2);
- QCOMPARE(frameChangedSpy.count(), 22);
+ QCOMPARE(finishedSpy.size(), 2);
+ QCOMPARE(frameChangedSpy.size(), 22);
for (int i = 11; i < 22; ++i)
QCOMPARE(frameChangedSpy.at(i).at(0).toInt(), 2 - (i + 2) % 3);
}
@@ -661,14 +636,14 @@ void tst_QTimeLine::frameChanged()
timeLine.start();
QTest::qWait(timeLine.duration()/2);
QCOMPARE(timeLine.state(), QTimeLine::Running);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QTest::qWait(timeLine.duration());
if (timeLine.state() != QTimeLine::NotRunning)
QEXPECT_FAIL("", "QTBUG-24796: QTimeLine runs slower than it should", Abort);
QCOMPARE(timeLine.state(), QTimeLine::NotRunning);
- if (spy.count() != 1)
+ if (spy.size() != 1)
QEXPECT_FAIL("", "QTBUG-24796: QTimeLine runs slower than it should", Abort);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
// Test what happens when the frames are all emitted well before duration expires.
timeLine.setUpdateInterval(5);
@@ -677,7 +652,7 @@ void tst_QTimeLine::frameChanged()
timeLine.start();
QTest::qWait(timeLine.duration()*2);
QCOMPARE(timeLine.state(), QTimeLine::NotRunning);
- QCOMPARE(spy.count(), 10);
+ QCOMPARE(spy.size(), 10);
}
void tst_QTimeLine::stopped()
@@ -690,11 +665,11 @@ void tst_QTimeLine::stopped()
timeLine.start();
QTest::qWait(timeLine.duration()*2);
QCOMPARE(timeLine.state(), QTimeLine::NotRunning);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
spy.clear();
timeLine.start();
timeLine.stop();
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
timeLine.setDirection(QTimeLine::Backward);
QCOMPARE(timeLine.loopCount(), 1);
}
@@ -706,13 +681,13 @@ void tst_QTimeLine::finished()
QSignalSpy spy(&timeLine, &QTimeLine::finished);
QVERIFY(spy.isValid());
timeLine.start();
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QCOMPARE(timeLine.state(), QTimeLine::NotRunning);
spy.clear();
timeLine.start();
timeLine.stop();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QTimeLine::isRunning()
@@ -745,7 +720,7 @@ void tst_QTimeLine::multipleTimeLines()
timeLine.start();
timeLineKiller.stop();
QTest::qWait(timeLine.duration()*2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QTimeLine::sineCurve()
diff --git a/tests/auto/corelib/tools/qtyperevision/CMakeLists.txt b/tests/auto/corelib/tools/qtyperevision/CMakeLists.txt
new file mode 100644
index 0000000000..527156e3c2
--- /dev/null
+++ b/tests/auto/corelib/tools/qtyperevision/CMakeLists.txt
@@ -0,0 +1,15 @@
+# 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_qtyperevision LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qtyperevision
+ SOURCES
+ tst_qtyperevision.cpp
+ LIBRARIES
+ Qt::TestPrivate
+)
diff --git a/tests/auto/corelib/tools/qtyperevision/tst_qtyperevision.cpp b/tests/auto/corelib/tools/qtyperevision/tst_qtyperevision.cpp
new file mode 100644
index 0000000000..66c746382a
--- /dev/null
+++ b/tests/auto/corelib/tools/qtyperevision/tst_qtyperevision.cpp
@@ -0,0 +1,202 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// Copyright (C) 2014 Keith Gardner <kreios4004@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QtCore/qtyperevision.h>
+#include <QtTest/private/qcomparisontesthelper_p.h>
+
+using namespace Qt::StringLiterals;
+
+class tst_QTypeRevision : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void qTypeRevision_data();
+ void qTypeRevision();
+ void qTypeRevisionTypes();
+ void qTypeRevisionComparisonCompiles();
+ void qTypeRevisionComparison_data();
+ void qTypeRevisionComparison();
+};
+
+template<typename Integer>
+void compileTestRevisionMajorMinor()
+{
+ const Integer major = 8;
+ const Integer minor = 4;
+
+ const QTypeRevision r2 = QTypeRevision::fromVersion(major, minor);
+ QCOMPARE(r2.majorVersion(), 8);
+ QCOMPARE(r2.minorVersion(), 4);
+
+ const QTypeRevision r3 = QTypeRevision::fromMajorVersion(major);
+ QCOMPARE(r3.majorVersion(), 8);
+ QVERIFY(!r3.hasMinorVersion());
+
+ const QTypeRevision r4 = QTypeRevision::fromMinorVersion(minor);
+ QVERIFY(!r4.hasMajorVersion());
+ QCOMPARE(r4.minorVersion(), 4);
+}
+
+
+template<typename Integer>
+void compileTestRevision()
+{
+ if (std::is_signed<Integer>::value)
+ compileTestRevision<typename QIntegerForSize<sizeof(Integer) / 2>::Signed>();
+ else
+ compileTestRevision<typename QIntegerForSize<sizeof(Integer) / 2>::Unsigned>();
+
+ const Integer value = 0x0510;
+ const QTypeRevision r = QTypeRevision::fromEncodedVersion(value);
+
+ QCOMPARE(r.majorVersion(), 5);
+ QCOMPARE(r.minorVersion(), 16);
+ QCOMPARE(r.toEncodedVersion<Integer>(), value);
+
+ compileTestRevisionMajorMinor<Integer>();
+}
+
+template<>
+void compileTestRevision<qint16>()
+{
+ compileTestRevisionMajorMinor<quint8>();
+}
+
+template<>
+void compileTestRevision<quint8>()
+{
+ compileTestRevisionMajorMinor<quint8>();
+}
+
+template<>
+void compileTestRevision<qint8>()
+{
+ compileTestRevisionMajorMinor<qint8>();
+}
+
+void tst_QTypeRevision::qTypeRevision_data()
+{
+ QTest::addColumn<QTypeRevision>("revision");
+ QTest::addColumn<bool>("valid");
+ QTest::addColumn<int>("major");
+ QTest::addColumn<int>("minor");
+
+ QTest::addRow("Qt revision") << QTypeRevision::fromVersion(QT_VERSION_MAJOR, QT_VERSION_MINOR)
+ << true << QT_VERSION_MAJOR << QT_VERSION_MINOR;
+ QTest::addRow("invalid") << QTypeRevision() << false << 0xff << 0xff;
+ QTest::addRow("major") << QTypeRevision::fromMajorVersion(6) << true << 6 << 0xff;
+ QTest::addRow("minor") << QTypeRevision::fromMinorVersion(15) << true << 0xff << 15;
+ QTest::addRow("zero") << QTypeRevision::fromVersion(0, 0) << true << 0 << 0;
+
+ // We're intentionally not testing negative numbers.
+ // There are asserts against negative numbers in QTypeRevision.
+ // You must not pass them as major or minor versions, or values.
+}
+
+void tst_QTypeRevision::qTypeRevision()
+{
+ const QTypeRevision other = QTypeRevision::fromVersion(127, 128);
+
+ QFETCH(QTypeRevision, revision);
+
+ QFETCH(bool, valid);
+ QFETCH(int, major);
+ QFETCH(int, minor);
+
+ QCOMPARE(revision.isValid(), valid);
+ QCOMPARE(revision.majorVersion(), major);
+ QCOMPARE(revision.minorVersion(), minor);
+
+ QCOMPARE(revision.hasMajorVersion(), QTypeRevision::isValidSegment(major));
+ QCOMPARE(revision.hasMinorVersion(), QTypeRevision::isValidSegment(minor));
+
+ const QTypeRevision copy = QTypeRevision::fromEncodedVersion(revision.toEncodedVersion<int>());
+ QCOMPARE(copy, revision);
+
+ QVERIFY(revision != other);
+ QVERIFY(copy != other);
+}
+
+void tst_QTypeRevision::qTypeRevisionTypes()
+{
+ compileTestRevision<quint64>();
+ compileTestRevision<qint64>();
+
+ QVERIFY(!QTypeRevision::isValidSegment(0xff));
+ QVERIFY(!QTypeRevision::isValidSegment(-1));
+
+ const QTypeRevision maxRevision = QTypeRevision::fromVersion(254, 254);
+ QVERIFY(maxRevision.hasMajorVersion());
+ QVERIFY(maxRevision.hasMinorVersion());
+}
+
+void tst_QTypeRevision::qTypeRevisionComparisonCompiles()
+{
+ QTestPrivate::testAllComparisonOperatorsCompile<QTypeRevision>();
+}
+
+void tst_QTypeRevision::qTypeRevisionComparison_data()
+{
+ QTest::addColumn<QTypeRevision>("lhs");
+ QTest::addColumn<QTypeRevision>("rhs");
+ QTest::addColumn<Qt::strong_ordering>("expectedResult");
+
+ static auto versionStr = [](QTypeRevision r) {
+ QByteArray res = r.hasMajorVersion() ? QByteArray::number(r.majorVersion())
+ : "x"_ba;
+ res.append('.');
+ res.append(r.hasMinorVersion() ? QByteArray::number(r.minorVersion())
+ : "x"_ba);
+ return res;
+ };
+
+ const QTypeRevision revisions[] = {
+ QTypeRevision::zero(),
+ QTypeRevision::fromMajorVersion(0),
+ QTypeRevision::fromVersion(0, 1),
+ QTypeRevision::fromVersion(0, 20),
+ QTypeRevision::fromMinorVersion(0),
+ QTypeRevision(),
+ QTypeRevision::fromMinorVersion(1),
+ QTypeRevision::fromMinorVersion(20),
+ QTypeRevision::fromVersion(1, 0),
+ QTypeRevision::fromMajorVersion(1),
+ QTypeRevision::fromVersion(1, 1),
+ QTypeRevision::fromVersion(1, 20),
+ QTypeRevision::fromVersion(20, 0),
+ QTypeRevision::fromMajorVersion(20),
+ QTypeRevision::fromVersion(20, 1),
+ QTypeRevision::fromVersion(20, 20),
+ };
+
+ const int length = sizeof(revisions) / sizeof(QTypeRevision);
+ for (int i = 0; i < length; ++i) {
+ for (int j = i; j < length; ++j) {
+ const Qt::strong_ordering expectedRes = (i == j)
+ ? Qt::strong_ordering::equal
+ : (i < j) ? Qt::strong_ordering::less
+ : Qt::strong_ordering::greater;
+
+ const auto lhs = revisions[i];
+ const auto rhs = revisions[j];
+ QTest::addRow("%s_vs_%s", versionStr(lhs).constData(), versionStr(rhs).constData())
+ << lhs << rhs << expectedRes;
+ }
+ }
+}
+
+void tst_QTypeRevision::qTypeRevisionComparison()
+{
+ QFETCH(const QTypeRevision, lhs);
+ QFETCH(const QTypeRevision, rhs);
+ QFETCH(const Qt::strong_ordering, expectedResult);
+
+ QT_TEST_ALL_COMPARISON_OPS(lhs, rhs, expectedResult);
+}
+
+QTEST_APPLESS_MAIN(tst_QTypeRevision)
+
+#include "tst_qtyperevision.moc"
diff --git a/tests/auto/corelib/tools/quniquehandle/CMakeLists.txt b/tests/auto/corelib/tools/quniquehandle/CMakeLists.txt
new file mode 100644
index 0000000000..fe46826f37
--- /dev/null
+++ b/tests/auto/corelib/tools/quniquehandle/CMakeLists.txt
@@ -0,0 +1,15 @@
+# Copyright (C) 2023 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_quniquehandle LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_quniquehandle
+ SOURCES
+ tst_quniquehandle.cpp
+ LIBRARIES
+ Qt::CorePrivate
+)
diff --git a/tests/auto/corelib/tools/quniquehandle/tst_quniquehandle.cpp b/tests/auto/corelib/tools/quniquehandle/tst_quniquehandle.cpp
new file mode 100644
index 0000000000..ed46999e73
--- /dev/null
+++ b/tests/auto/corelib/tools/quniquehandle/tst_quniquehandle.cpp
@@ -0,0 +1,308 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <private/quniquehandle_p.h>
+
+#include <QTest>
+
+QT_USE_NAMESPACE;
+
+// clang-format off
+namespace GlobalResource {
+
+std::array<bool, 3> s_resources = { false, false, false };
+
+using handle = size_t;
+constexpr handle s_invalidHandle = static_cast<handle>(-1);
+
+handle open()
+{
+ const auto it = std::find_if(s_resources.begin(), s_resources.end(),
+ [](bool resource) {
+ return !resource;
+ });
+
+ if (it == s_resources.end())
+ return s_invalidHandle;
+
+ *it = true;
+
+ return std::distance(s_resources.begin(), it);
+}
+
+bool open(handle* dest)
+{
+ const handle resource = open();
+
+ if (resource == s_invalidHandle)
+ return false;
+
+ *dest = resource;
+ return true;
+}
+
+bool close(handle h)
+{
+ if (h >= s_resources.size())
+ return false; // Invalid handle
+
+ if (!s_resources[h])
+ return false; // Un-allocated resource
+
+ s_resources[h] = false;
+ return true;
+}
+
+bool isOpen(handle h)
+{
+ return s_resources[h];
+}
+
+void reset()
+{
+ std::fill(s_resources.begin(), s_resources.end(), false);
+}
+
+bool isReset()
+{
+ return std::all_of(s_resources.begin(), s_resources.end(), [](bool res) {
+ return !res;
+ });
+}
+
+} // namespace GlobalResource
+
+struct TestTraits
+{
+ using Type = GlobalResource::handle;
+
+ static bool close(Type handle)
+ {
+ return GlobalResource::close(handle);
+ }
+
+ static Type invalidValue() noexcept
+ {
+ return GlobalResource::s_invalidHandle;
+ }
+};
+
+using Handle = QUniqueHandle<TestTraits>;
+
+class tst_QUniqueHandle : public QObject
+{
+ Q_OBJECT
+
+private slots:
+
+ void init() const
+ {
+ GlobalResource::reset();
+ }
+
+ void cleanup() const
+ {
+ QVERIFY(GlobalResource::isReset());
+ }
+
+ void defaultConstructor_initializesToInvalidHandle() const
+ {
+ const Handle h;
+ QCOMPARE_EQ(h.get(), TestTraits::invalidValue());
+ }
+
+ void constructor_initializesToValid_whenCalledWithValidHandle() const
+ {
+ const auto res = GlobalResource::open();
+
+ const Handle h{ res };
+
+ QCOMPARE_EQ(h.get(), res);
+ }
+
+ void copyConstructor_and_assignmentOperator_areDeleted() const
+ {
+ static_assert(!std::is_copy_constructible_v<Handle> && !std::is_copy_assignable_v<Handle>);
+ }
+
+ void moveConstructor_movesOwnershipAndResetsSource() const
+ {
+ Handle source{ GlobalResource::open() };
+ const Handle dest{ std::move(source) };
+
+ QVERIFY(!source.isValid());
+ QVERIFY(dest.isValid());
+ QVERIFY(GlobalResource::isOpen(dest.get()));
+ }
+
+ void moveAssignment_movesOwnershipAndResetsSource() const
+ {
+ Handle source{ GlobalResource::open() };
+ Handle dest;
+ dest = { std::move(source) };
+
+ QVERIFY(!source.isValid());
+ QVERIFY(dest.isValid());
+ QVERIFY(GlobalResource::isOpen(dest.get()));
+ }
+
+ void isValid_returnsFalse_onlyWhenHandleIsInvalid() const
+ {
+ const Handle invalid;
+ QVERIFY(!invalid.isValid());
+
+ const Handle valid{ GlobalResource::open() };
+ QVERIFY(valid.isValid());
+ }
+
+ void destructor_callsClose_whenHandleIsValid()
+ {
+ {
+ const Handle h0{ GlobalResource::open() };
+ const Handle h1{ GlobalResource::open() };
+ const Handle h2{ GlobalResource::open() };
+ QVERIFY(!GlobalResource::isReset());
+ }
+
+ QVERIFY(GlobalResource::isReset());
+ }
+
+ void operatorBool_returnsFalse_onlyWhenHandleIsInvalid() const
+ {
+ const Handle invalid;
+ QVERIFY(!invalid);
+
+ const Handle valid{ GlobalResource::open() };
+ QVERIFY(valid);
+ }
+
+ void get_returnsValue() const
+ {
+ const Handle invalid;
+ QCOMPARE_EQ(invalid.get(), GlobalResource::s_invalidHandle);
+
+ const auto resource = GlobalResource::open();
+ const Handle valid{ resource };
+ QCOMPARE_EQ(valid.get(), resource);
+ }
+
+ void reset_resetsPreviousValueAndTakesOwnership() const
+ {
+ const auto resource0 = GlobalResource::open();
+ const auto resource1 = GlobalResource::open();
+
+ Handle h1{ resource0 };
+ h1.reset(resource1);
+
+ QVERIFY(!GlobalResource::isOpen(resource0));
+ QVERIFY(GlobalResource::isOpen(resource1));
+ }
+
+ void release_returnsInvalidResource_whenCalledOnInvalidHandle() const
+ {
+ Handle h;
+ QCOMPARE_EQ(h.release(), GlobalResource::s_invalidHandle);
+ }
+
+ void release_releasesOwnershipAndReturnsResource_whenHandleOwnsObject() const
+ {
+ GlobalResource::handle resource{ GlobalResource::open() };
+ GlobalResource::handle released{};
+ {
+ Handle h{ resource };
+ released = h.release();
+ }
+ QVERIFY(GlobalResource::isOpen(resource));
+ QCOMPARE_EQ(resource, released);
+
+ GlobalResource::close(resource);
+ }
+
+ void swap_swapsOwnership() const
+ {
+ const auto resource0 = GlobalResource::open();
+ const auto resource1 = GlobalResource::open();
+
+ Handle h0{ resource0 };
+ Handle h1{ resource1 };
+
+ std::swap(h0, h1);
+
+ QCOMPARE_EQ(h0.get(), resource1);
+ QCOMPARE_EQ(h1.get(), resource0);
+ }
+
+ void comparison_behavesAsInt_whenHandleTypeIsInt_data() const
+ {
+ QTest::addColumn<int>("lhs");
+ QTest::addColumn<int>("rhs");
+
+ QTest::addRow("lhs == rhs") << 1 << 1;
+ QTest::addRow("lhs < rhs") << 0 << 1;
+ QTest::addRow("lhs > rhs") << 1 << 0;
+ }
+
+ void comparison_behavesAsInt_whenHandleTypeIsInt() const
+ {
+ struct IntTraits
+ {
+ using Type = int;
+
+ static bool close(Type)
+ {
+ return true;
+ }
+
+ static Type invalidValue() noexcept
+ {
+ return INT_MAX;
+ }
+ };
+
+ using Handle = QUniqueHandle<IntTraits>;
+
+ QFETCH(int, lhs);
+ QFETCH(int, rhs);
+
+ QCOMPARE_EQ(Handle{ lhs } == Handle{ rhs }, lhs == rhs);
+ QCOMPARE_EQ(Handle{ lhs } != Handle{ rhs }, lhs != rhs);
+ QCOMPARE_EQ(Handle{ lhs } < Handle{ rhs }, lhs < rhs);
+ QCOMPARE_EQ(Handle{ lhs } <= Handle{ rhs }, lhs <= rhs);
+ QCOMPARE_EQ(Handle{ lhs } > Handle{ rhs }, lhs > rhs);
+ QCOMPARE_EQ(Handle{ lhs } >= Handle{ rhs }, lhs >= rhs);
+
+ QCOMPARE_EQ(Handle{ }, Handle{ });
+ }
+
+ void sort_sortsHandles() const
+ {
+ const auto resource0 = GlobalResource::open();
+ const auto resource1 = GlobalResource::open();
+
+ QVERIFY(resource1 > resource0); // Precondition of underlying allocator
+
+ Handle h0{ resource0 };
+ Handle h1{ resource1 };
+
+ std::vector<Handle> handles;
+ handles.push_back(std::move(h1));
+ handles.push_back(std::move(h0));
+
+ std::sort(handles.begin(), handles.end());
+
+ QCOMPARE_LT(handles.front(), handles.back());
+ QCOMPARE_LT(handles.front().get(), handles.back().get());
+ }
+
+ void addressOf_returnsAddressOfHandle() const
+ {
+ Handle h;
+ QVERIFY(GlobalResource::open(&h));
+ QVERIFY(h.isValid());
+ }
+
+};
+
+// clang-format on
+QTEST_MAIN(tst_QUniqueHandle)
+#include "tst_quniquehandle.moc"
diff --git a/tests/auto/corelib/tools/qvarlengtharray/CMakeLists.txt b/tests/auto/corelib/tools/qvarlengtharray/CMakeLists.txt
index bdc927d5b6..eccb2634cc 100644
--- a/tests/auto/corelib/tools/qvarlengtharray/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qvarlengtharray/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qvarlengtharray.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qvarlengtharray Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qvarlengtharray LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qvarlengtharray
SOURCES
tst_qvarlengtharray.cpp
diff --git a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
index cc4454fbd4..6a92663bc4 100644
--- a/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.cpp
+++ b/tests/auto/corelib/tools/qvarlengtharray/tst_qvarlengtharray.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/QTest>
#include <QVarLengthArray>
@@ -32,6 +7,8 @@
#include <qscopeguard.h>
#include <qscopedvaluerollback.h>
+#include <algorithm>
+#include <q20iterator.h>
#include <memory>
struct Tracker
@@ -65,13 +42,31 @@ public:
{ return !operator==(lhs, rhs); }
};
+class NonCopyable
+{
+ Q_DISABLE_COPY(NonCopyable)
+ int n;
+public:
+ NonCopyable() : n(0) {}
+ explicit NonCopyable(int n) : n(n) {}
+
+ friend bool operator==(const NonCopyable &lhs, const NonCopyable &rhs) noexcept
+ { return lhs.n == rhs.n; }
+ friend bool operator!=(const NonCopyable &lhs, const NonCopyable &rhs) noexcept
+ { return !operator==(lhs, rhs); }
+};
+
class tst_QVarLengthArray : public QObject
{
Q_OBJECT
private slots:
void defaultConstructor_int() { defaultConstructor<int>(); }
void defaultConstructor_QString() { defaultConstructor<QString>(); }
+ void sizeConstructor_int() { sizeConstructor<int>(); }
+ void sizeConstructor_QString() { sizeConstructor<QString>(); }
+ void sizeConstructor_NonCopyable() { sizeConstructor<NonCopyable>(); }
void append();
+ void preallocatedSize();
#if QT_DEPRECATED_SINCE(6, 3)
void prepend();
#endif
@@ -117,9 +112,13 @@ private slots:
void remove();
void erase();
+ // special cases:
+ void copesWithCopyabilityOfMoveOnlyVector(); // QTBUG-109745
private:
template <typename T>
void defaultConstructor();
+ template <typename T>
+ void sizeConstructor();
template <qsizetype N, typename T>
void move(T t1, T t2);
template <qsizetype N>
@@ -149,6 +148,31 @@ void tst_QVarLengthArray::defaultConstructor()
}
}
+template <typename T>
+void tst_QVarLengthArray::sizeConstructor()
+{
+ {
+ QVarLengthArray<T, 123> vla(0);
+ QCOMPARE(vla.size(), 0);
+ QVERIFY(vla.empty());
+ QVERIFY(vla.isEmpty());
+ QCOMPARE(vla.begin(), vla.end());
+ QCOMPARE(vla.capacity(), 123);
+ }
+ {
+ QVarLengthArray<T, 124> vla(124);
+ QCOMPARE(vla.size(), 124);
+ QVERIFY(!vla.empty());
+ QCOMPARE(vla.capacity(), 124);
+ }
+ {
+ QVarLengthArray<T, 124> vla(125);
+ QCOMPARE(vla.size(), 125);
+ QVERIFY(!vla.empty());
+ QCOMPARE_GE(vla.capacity(), 125);
+ }
+}
+
void tst_QVarLengthArray::append()
{
QVarLengthArray<QString, 2> v;
@@ -171,6 +195,15 @@ void tst_QVarLengthArray::append()
v2.append(5);
}
+void tst_QVarLengthArray::preallocatedSize()
+{
+ // The default is 256:
+ static_assert(QVarLengthArray<int>::PreallocatedSize == 256);
+ // Otherwise, whatever was given as template argument:
+ static_assert(QVarLengthArray<int, 42>::PreallocatedSize == 42);
+ static_assert(QVarLengthArray<int, 1'000'000>::PreallocatedSize == 1'000'000);
+}
+
#if QT_DEPRECATED_SINCE(6, 3)
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
@@ -409,6 +442,17 @@ void tst_QVarLengthArray::appendCausingRealloc()
QVarLengthArray<float, 1> d(1);
for (int i=0; i<30; i++)
d.append(i);
+
+ // Regression test for QTBUG-110412:
+ constexpr qsizetype InitialCapacity = 10;
+ QVarLengthArray<float, InitialCapacity> d2(InitialCapacity);
+ std::iota(d2.begin(), d2.end(), 0.0f);
+ QCOMPARE_EQ(d2.size(), d2.capacity()); // by construction
+ float floats[1000];
+ std::iota(std::begin(floats), std::end(floats), InitialCapacity + 0.0f);
+ d2.append(floats, q20::ssize(floats));
+ QCOMPARE_EQ(d2.size(), q20::ssize(floats) + InitialCapacity);
+ QCOMPARE_GE(d2.capacity(), d2.size());
}
void tst_QVarLengthArray::appendIsStronglyExceptionSafe()
@@ -600,6 +644,12 @@ struct MyBase
bool hasMoved() const { return !wasConstructedAt(this); }
protected:
+ void swap(MyBase &other) {
+ using std::swap;
+ swap(data, other.data);
+ swap(isCopy, other.isCopy);
+ }
+
MyBase(const MyBase *data, bool isCopy)
: data(data), isCopy(isCopy) {}
@@ -674,6 +724,14 @@ struct MyMovable
return *this;
}
+ void swap(MyMovable &other) noexcept
+ {
+ MyBase::swap(other);
+ std::swap(i, other.i);
+ }
+
+ friend void swap(MyMovable &lhs, MyMovable &rhs) noexcept { lhs.swap(rhs); }
+
bool operator==(const MyMovable &other) const
{
return i == other.i;
@@ -689,6 +747,15 @@ struct MyComplex
{
return i == other.i;
}
+
+ void swap(MyComplex &other) noexcept
+ {
+ MyBase::swap(other);
+ std::swap(i, other.i);
+ }
+
+ friend void swap(MyComplex &lhs, MyComplex &rhs) noexcept { lhs.swap(rhs); }
+
char i;
};
@@ -961,8 +1028,8 @@ void tst_QVarLengthArray::count()
// tests size(), count() and length(), since they're the same thing
{
const QVarLengthArray<int> list;
- QCOMPARE(list.length(), 0);
- QCOMPARE(list.count(), 0);
+ QCOMPARE(list.size(), 0);
+ QCOMPARE(list.size(), 0);
QCOMPARE(list.size(), 0);
QVERIFY(list.isEmpty());
}
@@ -970,8 +1037,8 @@ void tst_QVarLengthArray::count()
{
QVarLengthArray<int> list;
list.append(0);
- QCOMPARE(list.length(), 1);
- QCOMPARE(list.count(), 1);
+ QCOMPARE(list.size(), 1);
+ QCOMPARE(list.size(), 1);
QCOMPARE(list.size(), 1);
QVERIFY(!list.isEmpty());
}
@@ -980,8 +1047,8 @@ void tst_QVarLengthArray::count()
QVarLengthArray<int> list;
list.append(0);
list.append(1);
- QCOMPARE(list.length(), 2);
- QCOMPARE(list.count(), 2);
+ QCOMPARE(list.size(), 2);
+ QCOMPARE(list.size(), 2);
QCOMPARE(list.size(), 2);
QVERIFY(!list.isEmpty());
}
@@ -991,8 +1058,8 @@ void tst_QVarLengthArray::count()
list.append(0);
list.append(0);
list.append(0);
- QCOMPARE(list.length(), 3);
- QCOMPARE(list.count(), 3);
+ QCOMPARE(list.size(), 3);
+ QCOMPARE(list.size(), 3);
QCOMPARE(list.size(), 3);
QVERIFY(!list.isEmpty());
}
@@ -1003,23 +1070,23 @@ void tst_QVarLengthArray::count()
list.append(0);
list.append(0);
list.append(0);
- QCOMPARE(list.length(), 3);
- QCOMPARE(list.count(), 3);
+ QCOMPARE(list.size(), 3);
+ QCOMPARE(list.size(), 3);
QCOMPARE(list.size(), 3);
QVERIFY(!list.isEmpty());
list.removeLast();
- QCOMPARE(list.length(), 2);
- QCOMPARE(list.count(), 2);
+ QCOMPARE(list.size(), 2);
+ QCOMPARE(list.size(), 2);
QCOMPARE(list.size(), 2);
QVERIFY(!list.isEmpty());
list.removeLast();
- QCOMPARE(list.length(), 1);
- QCOMPARE(list.count(), 1);
+ QCOMPARE(list.size(), 1);
+ QCOMPARE(list.size(), 1);
QCOMPARE(list.size(), 1);
QVERIFY(!list.isEmpty());
list.removeLast();
- QCOMPARE(list.length(), 0);
- QCOMPARE(list.count(), 0);
+ QCOMPARE(list.size(), 0);
+ QCOMPARE(list.size(), 0);
QCOMPARE(list.size(), 0);
QVERIFY(list.isEmpty());
}
@@ -1058,16 +1125,16 @@ void tst_QVarLengthArray::first()
QCOMPARE(list.first(), 27);
list.append(1987);
QCOMPARE(list.first(), 27);
- QCOMPARE(list.length(), 3);
+ QCOMPARE(list.size(), 3);
// remove some, make sure it stays sane
list.removeLast();
QCOMPARE(list.first(), 27);
- QCOMPARE(list.length(), 2);
+ QCOMPARE(list.size(), 2);
list.removeLast();
QCOMPARE(list.first(), 27);
- QCOMPARE(list.length(), 1);
+ QCOMPARE(list.size(), 1);
}
void tst_QVarLengthArray::last()
@@ -1080,16 +1147,16 @@ void tst_QVarLengthArray::last()
QCOMPARE(list.last(), 4);
list.append(1987);
QCOMPARE(list.last(), 1987);
- QCOMPARE(list.length(), 3);
+ QCOMPARE(list.size(), 3);
// remove some, make sure it stays sane
list.removeLast();
QCOMPARE(list.last(), 4);
- QCOMPARE(list.length(), 2);
+ QCOMPARE(list.size(), 2);
list.removeLast();
QCOMPARE(list.last(), 27);
- QCOMPARE(list.length(), 1);
+ QCOMPARE(list.size(), 1);
}
void tst_QVarLengthArray::squeeze()
@@ -1133,7 +1200,7 @@ void tst_QVarLengthArray::operators()
// +=: not provided, emulate
//myvla += myvlatwo;
- for (const QString &s : qAsConst(myvlatwo))
+ for (const QString &s : std::as_const(myvlatwo))
myvla.push_back(s);
QCOMPARE(myvla, combined);
@@ -1321,6 +1388,17 @@ void tst_QVarLengthArray::insertMove()
QCOMPARE(MyBase::copyCount, 0);
{
+ MyMovable m1, m2;
+ QCOMPARE(MyBase::liveCount, 2);
+ QCOMPARE(MyBase::copyCount, 0);
+ using std::swap;
+ swap(m1, m2);
+ QCOMPARE(MyBase::liveCount, 2);
+ QCOMPARE(MyBase::movedCount, 0);
+ QCOMPARE(MyBase::copyCount, 0);
+ }
+
+ {
QVarLengthArray<MyMovable, 6> vec;
MyMovable m1;
MyMovable m2;
@@ -1665,5 +1743,26 @@ void tst_QVarLengthArray::erase()
QCOMPARE(arr, QVarLengthArray<QString>({ "val0" }));
}
+void tst_QVarLengthArray::copesWithCopyabilityOfMoveOnlyVector()
+{
+ // std::vector<move-only-type> is_copyable
+ // (https://quuxplusone.github.io/blog/2020/02/05/vector-is-copyable-except-when-its-not/)
+
+ QVarLengthArray<std::vector<std::unique_ptr<int>>, 2> vla;
+ vla.emplace_back(42);
+ vla.emplace_back(43);
+ vla.emplace_back(44); // goes to the heap
+ QCOMPARE_EQ(vla.size(), 3);
+ QCOMPARE_EQ(vla.front().size(), 42U);
+ QCOMPARE_EQ(vla.front().front(), nullptr);
+ QCOMPARE_EQ(vla.back().size(), 44U);
+
+ auto moved = std::move(vla);
+ QCOMPARE_EQ(moved.size(), 3);
+ QCOMPARE_EQ(moved.front().size(), 42U);
+ QCOMPARE_EQ(moved.front().front(), nullptr);
+ QCOMPARE_EQ(moved.back().size(), 44U);
+}
+
QTEST_APPLESS_MAIN(tst_QVarLengthArray)
#include "tst_qvarlengtharray.moc"
diff --git a/tests/auto/corelib/tools/qversionnumber/CMakeLists.txt b/tests/auto/corelib/tools/qversionnumber/CMakeLists.txt
index 2ab3703121..8f6ed66841 100644
--- a/tests/auto/corelib/tools/qversionnumber/CMakeLists.txt
+++ b/tests/auto/corelib/tools/qversionnumber/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qversionnumber.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qversionnumber Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qversionnumber LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qversionnumber
SOURCES
tst_qversionnumber.cpp
diff --git a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp
index 42ef770817..da9dcc9366 100644
--- a/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp
+++ b/tests/auto/corelib/tools/qversionnumber/tst_qversionnumber.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2014 Keith Gardner <kreios4004@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 The Qt Company Ltd.
+// Copyright (C) 2014 Keith Gardner <kreios4004@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/qversionnumber.h>
@@ -78,14 +53,14 @@ private slots:
void toString();
void isNull_data();
void isNull();
+ void iterators_data();
+ void iterators();
+ void iteratorsAreDefaultConstructible();
+ void valueInitializedIteratorsCompareEqual();
void serialize_data();
void serialize();
void moveSemantics();
void qtVersion();
- void qTypeRevision_data();
- void qTypeRevision();
- void qTypeRevisionTypes();
- void qTypeRevisionComparison();
};
void tst_QVersionNumber::singleInstanceData()
@@ -269,6 +244,11 @@ void tst_QVersionNumber::constructorExplicit()
QVersionNumber v8 = {4, 5, 6};
QCOMPARE(v7.segments(), v8.segments());
+
+ QVersionNumber v9(4, 5, 6);
+ QVersionNumber vA({4, 5, 6});
+
+ QCOMPARE(v9.segments(), vA.segments());
}
void tst_QVersionNumber::constructorCopy_data()
@@ -599,6 +579,45 @@ void tst_QVersionNumber::isNull()
QCOMPARE(version.isNull(), isNull);
}
+void tst_QVersionNumber::iterators_data()
+{
+ singleInstanceData();
+}
+
+void tst_QVersionNumber::iterators()
+{
+ QFETCH(const QList<int>, segments);
+ QFETCH(QVersionNumber, expectedVersion);
+
+ QVERIFY(std::equal(expectedVersion.begin(), expectedVersion.end(),
+ segments.begin(), segments.end()));
+ QVERIFY(std::equal(std::as_const(expectedVersion).begin(), std::as_const(expectedVersion).end(),
+ segments.begin(), segments.end()));
+ QVERIFY(std::equal(expectedVersion.cbegin(), expectedVersion.cend(),
+ segments.cbegin(), segments.cend()));
+ QVERIFY(std::equal(expectedVersion.rbegin(), expectedVersion.rend(),
+ segments.rbegin(), segments.rend()));
+ QVERIFY(std::equal(std::as_const(expectedVersion).rbegin(), std::as_const(expectedVersion).rend(),
+ segments.rbegin(), segments.rend()));
+ QVERIFY(std::equal(expectedVersion.crbegin(), expectedVersion.crend(),
+ segments.crbegin(), segments.crend()));
+}
+
+void tst_QVersionNumber::iteratorsAreDefaultConstructible()
+{
+ static_assert(std::is_default_constructible_v<QVersionNumber::const_iterator>);
+ [[maybe_unused]] QVersionNumber::const_iterator ci;
+ [[maybe_unused]] QVersionNumber::const_reverse_iterator cri;
+}
+
+void tst_QVersionNumber::valueInitializedIteratorsCompareEqual()
+{
+ QVersionNumber::const_iterator it = {}, jt = {};
+ QCOMPARE_EQ(it, jt);
+ QVersionNumber::const_reverse_iterator rit = {}, rjt = {};
+ QCOMPARE_EQ(rit, rjt);
+}
+
void tst_QVersionNumber::serialize_data()
{
singleInstanceData();
@@ -690,153 +709,6 @@ void tst_QVersionNumber::qtVersion()
QCOMPARE(v.toString(), QString(qVersion()));
}
-template<typename Integer>
-void compileTestRevisionMajorMinor()
-{
- const Integer major = 8;
- const Integer minor = 4;
-
- const QTypeRevision r2 = QTypeRevision::fromVersion(major, minor);
- QCOMPARE(r2.majorVersion(), 8);
- QCOMPARE(r2.minorVersion(), 4);
-
- const QTypeRevision r3 = QTypeRevision::fromMajorVersion(major);
- QCOMPARE(r3.majorVersion(), 8);
- QVERIFY(!r3.hasMinorVersion());
-
- const QTypeRevision r4 = QTypeRevision::fromMinorVersion(minor);
- QVERIFY(!r4.hasMajorVersion());
- QCOMPARE(r4.minorVersion(), 4);
-}
-
-
-template<typename Integer>
-void compileTestRevision()
-{
- if (std::is_signed<Integer>::value)
- compileTestRevision<typename QIntegerForSize<sizeof(Integer) / 2>::Signed>();
- else
- compileTestRevision<typename QIntegerForSize<sizeof(Integer) / 2>::Unsigned>();
-
- const Integer value = 0x0510;
- const QTypeRevision r = QTypeRevision::fromEncodedVersion(value);
-
- QCOMPARE(r.majorVersion(), 5);
- QCOMPARE(r.minorVersion(), 16);
- QCOMPARE(r.toEncodedVersion<Integer>(), value);
-
- compileTestRevisionMajorMinor<Integer>();
-}
-
-template<>
-void compileTestRevision<qint16>()
-{
- compileTestRevisionMajorMinor<quint8>();
-}
-
-template<>
-void compileTestRevision<quint8>()
-{
- compileTestRevisionMajorMinor<quint8>();
-}
-
-template<>
-void compileTestRevision<qint8>()
-{
- compileTestRevisionMajorMinor<qint8>();
-}
-
-void tst_QVersionNumber::qTypeRevision_data()
-{
- QTest::addColumn<QTypeRevision>("revision");
- QTest::addColumn<bool>("valid");
- QTest::addColumn<int>("major");
- QTest::addColumn<int>("minor");
-
- QTest::addRow("Qt revision") << QTypeRevision::fromVersion(QT_VERSION_MAJOR, QT_VERSION_MINOR)
- << true << QT_VERSION_MAJOR << QT_VERSION_MINOR;
- QTest::addRow("invalid") << QTypeRevision() << false << 0xff << 0xff;
- QTest::addRow("major") << QTypeRevision::fromMajorVersion(6) << true << 6 << 0xff;
- QTest::addRow("minor") << QTypeRevision::fromMinorVersion(15) << true << 0xff << 15;
- QTest::addRow("zero") << QTypeRevision::fromVersion(0, 0) << true << 0 << 0;
-
- // We're intentionally not testing negative numbers.
- // There are asserts against negative numbers in QTypeRevision.
- // You must not pass them as major or minor versions, or values.
-}
-
-void tst_QVersionNumber::qTypeRevision()
-{
- const QTypeRevision other = QTypeRevision::fromVersion(127, 128);
-
- QFETCH(QTypeRevision, revision);
-
- QFETCH(bool, valid);
- QFETCH(int, major);
- QFETCH(int, minor);
-
- QCOMPARE(revision.isValid(), valid);
- QCOMPARE(revision.majorVersion(), major);
- QCOMPARE(revision.minorVersion(), minor);
-
- QCOMPARE(revision.hasMajorVersion(), QTypeRevision::isValidSegment(major));
- QCOMPARE(revision.hasMinorVersion(), QTypeRevision::isValidSegment(minor));
-
- const QTypeRevision copy = QTypeRevision::fromEncodedVersion(revision.toEncodedVersion<int>());
- QCOMPARE(copy, revision);
-
- QVERIFY(revision != other);
- QVERIFY(copy != other);
-}
-
-void tst_QVersionNumber::qTypeRevisionTypes()
-{
- compileTestRevision<quint64>();
- compileTestRevision<qint64>();
-
- QVERIFY(!QTypeRevision::isValidSegment(0xff));
- QVERIFY(!QTypeRevision::isValidSegment(-1));
-
- const QTypeRevision maxRevision = QTypeRevision::fromVersion(254, 254);
- QVERIFY(maxRevision.hasMajorVersion());
- QVERIFY(maxRevision.hasMinorVersion());
-}
-
-void tst_QVersionNumber::qTypeRevisionComparison()
-{
- const QTypeRevision revisions[] = {
- QTypeRevision::zero(),
- QTypeRevision::fromMajorVersion(0),
- QTypeRevision::fromVersion(0, 1),
- QTypeRevision::fromVersion(0, 20),
- QTypeRevision::fromMinorVersion(0),
- QTypeRevision(),
- QTypeRevision::fromMinorVersion(1),
- QTypeRevision::fromMinorVersion(20),
- QTypeRevision::fromVersion(1, 0),
- QTypeRevision::fromMajorVersion(1),
- QTypeRevision::fromVersion(1, 1),
- QTypeRevision::fromVersion(1, 20),
- QTypeRevision::fromVersion(20, 0),
- QTypeRevision::fromMajorVersion(20),
- QTypeRevision::fromVersion(20, 1),
- QTypeRevision::fromVersion(20, 20),
- };
-
- const int length = sizeof(revisions) / sizeof(QTypeRevision);
-
- for (int i = 0; i < length; ++i) {
- for (int j = 0; j < length; ++j) {
- QCOMPARE(revisions[i] == revisions[j], i == j);
- QCOMPARE(revisions[i] != revisions[j], i != j);
- QCOMPARE(revisions[i] < revisions[j], i < j);
- QCOMPARE(revisions[i] > revisions[j], i > j);
- QCOMPARE(revisions[i] <= revisions[j], i <= j);
- QCOMPARE(revisions[i] >= revisions[j], i >= j);
- }
- }
-}
-
QTEST_APPLESS_MAIN(tst_QVersionNumber)
#include "tst_qversionnumber.moc"
diff --git a/tests/auto/dbus/CMakeLists.txt b/tests/auto/dbus/CMakeLists.txt
index 1b5022454a..d67877a0b3 100644
--- a/tests/auto/dbus/CMakeLists.txt
+++ b/tests/auto/dbus/CMakeLists.txt
@@ -1,10 +1,12 @@
-# Generated from dbus.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qdbusconnection_delayed)
add_subdirectory(qdbusconnection)
add_subdirectory(qdbusconnection_no_app)
add_subdirectory(qdbusconnection_no_bus)
add_subdirectory(qdbusconnection_no_libdbus)
+add_subdirectory(qdbusconnection_signalorder)
add_subdirectory(qdbusconnection_spyhook)
add_subdirectory(qdbuscontext)
add_subdirectory(qdbuslocalcalls)
diff --git a/tests/auto/dbus/qdbusabstractadaptor/BLACKLIST b/tests/auto/dbus/qdbusabstractadaptor/BLACKLIST
deleted file mode 100644
index d3d970f4f4..0000000000
--- a/tests/auto/dbus/qdbusabstractadaptor/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[overloadedSignalEmission]
-linux
diff --git a/tests/auto/dbus/qdbusabstractadaptor/CMakeLists.txt b/tests/auto/dbus/qdbusabstractadaptor/CMakeLists.txt
index 797c56221b..01cc7613ff 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusabstractadaptor/CMakeLists.txt
@@ -1,8 +1,14 @@
-# Generated from qdbusabstractadaptor.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_qdbusabstractadaptor LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(qmyserver)
-# special case begin
qt_internal_add_test(tst_qdbusabstractadaptor
SOURCES
myobject.h
@@ -11,4 +17,4 @@ qt_internal_add_test(tst_qdbusabstractadaptor
Qt::CorePrivate
Qt::DBus
)
-# special case end
+add_dependencies(tst_qdbusabstractadaptor qmyserver)
diff --git a/tests/auto/dbus/qdbusabstractadaptor/myobject.h b/tests/auto/dbus/qdbusabstractadaptor/myobject.h
index 768e817043..d6e332ac1c 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/myobject.h
+++ b/tests/auto/dbus/qdbusabstractadaptor/myobject.h
@@ -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
#ifndef MYOBJECT_H
#define MYOBJECT_H
@@ -51,7 +26,7 @@ public slots:
signature = msg.signature();
path = msg.path();
value.clear();
- if (msg.arguments().count())
+ if (msg.arguments().size())
value = msg.arguments().at(0);
}
diff --git a/tests/auto/dbus/qdbusabstractadaptor/qmyserver/CMakeLists.txt b/tests/auto/dbus/qdbusabstractadaptor/qmyserver/CMakeLists.txt
index 0ce4a3e3d3..4e33775bf1 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/qmyserver/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusabstractadaptor/qmyserver/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qmyserver.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qmyserver Binary:
@@ -6,10 +7,10 @@
qt_internal_add_executable(qmyserver
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
- NO_INSTALL # special case
+ NO_INSTALL
SOURCES
../myobject.h
qmyserver.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusabstractadaptor/qmyserver/qmyserver.cpp b/tests/auto/dbus/qdbusabstractadaptor/qmyserver/qmyserver.cpp
index a452d299b4..fb7b659d9f 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/qmyserver/qmyserver.cpp
+++ b/tests/auto/dbus/qdbusabstractadaptor/qmyserver/qmyserver.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QCoreApplication>
#include <QDBusServer>
diff --git a/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp b/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
index 23fe3ff51a..173e6e6765 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
+++ b/tests/auto/dbus/qdbusabstractadaptor/tst_qdbusabstractadaptor.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QDebug>
@@ -893,7 +868,7 @@ void tst_QDBusAbstractAdaptor::readProperties()
properties.call(QDBus::BlockWithGui, "Get", "local." + name, propname);
QVariant value = reply;
- QCOMPARE(value.userType(), int(QVariant::String));
+ QCOMPARE(value.userType(), int(QMetaType::QString));
QCOMPARE(value.toString(), QString("QString %1::%2() const").arg(name, propname));
}
}
@@ -982,7 +957,7 @@ void tst_QDBusAbstractAdaptor::readAllProperties()
qPrintable(propname + " on " + name));
QVariant value = reply.value().value(propname);
- QCOMPARE(value.userType(), int(QVariant::String));
+ QCOMPARE(value.userType(), int(QMetaType::QString));
QCOMPARE(value.toString(), QString("QString %1::%2() const").arg(name, propname));
}
}
@@ -1084,12 +1059,6 @@ void tst_QDBusAbstractAdaptor::methodCallsPeer_data()
void tst_QDBusAbstractAdaptor::methodCallsPeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
- if (QSysInfo::productType().compare("opensuse", Qt::CaseInsensitive) == 0
- && QSysInfo::productVersion() == QLatin1String("42.1")
- && qgetenv("QTEST_ENVIRONMENT").split(' ').contains("ci")) {
- QSKIP("This test is occasionally hanging in the CI");
- }
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1152,7 +1121,6 @@ void tst_QDBusAbstractAdaptor::methodCallsPeer()
void tst_QDBusAbstractAdaptor::methodCallScriptablePeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1172,7 +1140,6 @@ void tst_QDBusAbstractAdaptor::signalEmissionsPeer_data()
void tst_QDBusAbstractAdaptor::signalEmissionsPeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QFETCH(QString, interface);
QFETCH(QString, name);
QFETCH(QVariant, parameter);
@@ -1237,7 +1204,6 @@ void tst_QDBusAbstractAdaptor::signalEmissionsPeer()
void tst_QDBusAbstractAdaptor::sameSignalDifferentPathsPeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1266,7 +1232,6 @@ void tst_QDBusAbstractAdaptor::sameSignalDifferentPathsPeer()
void tst_QDBusAbstractAdaptor::sameObjectDifferentPathsPeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1289,8 +1254,7 @@ void tst_QDBusAbstractAdaptor::sameObjectDifferentPathsPeer()
void tst_QDBusAbstractAdaptor::scriptableSignalOrNotPeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
- QDBusConnection con("peer");;
+ QDBusConnection con("peer");
QVERIFY(con.isConnected());
{
@@ -1361,7 +1325,6 @@ void tst_QDBusAbstractAdaptor::overloadedSignalEmissionPeer_data()
void tst_QDBusAbstractAdaptor::overloadedSignalEmissionPeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1413,7 +1376,6 @@ void tst_QDBusAbstractAdaptor::overloadedSignalEmissionPeer()
void tst_QDBusAbstractAdaptor::readPropertiesPeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1430,7 +1392,7 @@ void tst_QDBusAbstractAdaptor::readPropertiesPeer()
properties.call(QDBus::BlockWithGui, "Get", "local." + name, propname);
QVariant value = reply;
- QCOMPARE(value.userType(), int(QVariant::String));
+ QCOMPARE(value.userType(), int(QMetaType::QString));
QCOMPARE(value.toString(), QString("QString %1::%2() const").arg(name, propname));
}
}
@@ -1438,7 +1400,6 @@ void tst_QDBusAbstractAdaptor::readPropertiesPeer()
void tst_QDBusAbstractAdaptor::readPropertiesInvalidInterfacePeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1459,7 +1420,6 @@ void tst_QDBusAbstractAdaptor::readPropertiesEmptyInterfacePeer_data()
void tst_QDBusAbstractAdaptor::readPropertiesEmptyInterfacePeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1490,7 +1450,6 @@ void tst_QDBusAbstractAdaptor::readPropertiesEmptyInterfacePeer()
void tst_QDBusAbstractAdaptor::readAllPropertiesPeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1509,7 +1468,7 @@ void tst_QDBusAbstractAdaptor::readAllPropertiesPeer()
qPrintable(propname + " on " + name));
QVariant value = reply.value().value(propname);
- QCOMPARE(value.userType(), int(QVariant::String));
+ QCOMPARE(value.userType(), int(QMetaType::QString));
QCOMPARE(value.toString(), QString("QString %1::%2() const").arg(name, propname));
}
}
@@ -1517,7 +1476,6 @@ void tst_QDBusAbstractAdaptor::readAllPropertiesPeer()
void tst_QDBusAbstractAdaptor::readAllPropertiesInvalidInterfacePeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1583,7 +1541,6 @@ void tst_QDBusAbstractAdaptor::readAllPropertiesEmptyInterfacePeer()
void tst_QDBusAbstractAdaptor::writePropertiesPeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1865,10 +1822,9 @@ void tst_QDBusAbstractAdaptor::typeMatching()
reply = iface.call(QDBus::BlockWithGui, "retrieve" + basename);
QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
- QCOMPARE(reply.arguments().count(), 1);
+ QCOMPARE(reply.arguments().size(), 1);
- const QVariant &retval = reply.arguments().at(0);
- QVERIFY(compare(retval, value));
+ QVERIFY(compare(reply.arguments().at(0), value));
}
void tst_QDBusAbstractAdaptor::methodWithMoreThanOneReturnValue()
@@ -1883,19 +1839,18 @@ void tst_QDBusAbstractAdaptor::methodWithMoreThanOneReturnValue()
QDBusInterface remote(con.baseService(), "/", "local.Interface3", con);
QDBusMessage reply = remote.call(QDBus::BlockWithGui, "methodStringString", testString);
- QCOMPARE(reply.arguments().count(), 2);
+ QCOMPARE(reply.arguments().size(), 2);
QDBusReply<int> intreply = reply;
QVERIFY(intreply.isValid());
QCOMPARE(intreply.value(), 42);
- QCOMPARE(reply.arguments().at(1).userType(), int(QVariant::String));
+ QCOMPARE(reply.arguments().at(1).userType(), int(QMetaType::QString));
QCOMPARE(qdbus_cast<QString>(reply.arguments().at(1)), testString);
}
void tst_QDBusAbstractAdaptor::methodWithMoreThanOneReturnValuePeer()
{
- QSKIP("Test is currently too flaky (QTBUG-66223)");
QDBusConnection con("peer");
QVERIFY(con.isConnected());
@@ -1906,13 +1861,13 @@ void tst_QDBusAbstractAdaptor::methodWithMoreThanOneReturnValuePeer()
QDBusInterface remote(QString(), "/", "local.Interface3", con);
QDBusMessage reply = remote.call(QDBus::BlockWithGui, "methodStringString", testString);
- QCOMPARE(reply.arguments().count(), 2);
+ QCOMPARE(reply.arguments().size(), 2);
QDBusReply<int> intreply = reply;
QVERIFY(intreply.isValid());
QCOMPARE(intreply.value(), 42);
- QCOMPARE(reply.arguments().at(1).userType(), int(QVariant::String));
+ QCOMPARE(reply.arguments().at(1).userType(), int(QMetaType::QString));
QCOMPARE(qdbus_cast<QString>(reply.arguments().at(1)), testString);
}
diff --git a/tests/auto/dbus/qdbusabstractinterface/CMakeLists.txt b/tests/auto/dbus/qdbusabstractinterface/CMakeLists.txt
index 4530f60561..4010ae5682 100644
--- a/tests/auto/dbus/qdbusabstractinterface/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusabstractinterface/CMakeLists.txt
@@ -1,8 +1,12 @@
-# Generated from qdbusabstractinterface.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-add_subdirectory(qpinger)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusabstractinterface LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
-# special case begin
qt_internal_add_test(tst_qdbusabstractinterface
SOURCES
interface.cpp
@@ -21,4 +25,5 @@ qt_internal_extend_target(tst_qdbusabstractinterface
-i interface.h
)
-# special case end
+add_subdirectory(qpinger)
+add_dependencies(tst_qdbusabstractinterface qpinger)
diff --git a/tests/auto/dbus/qdbusabstractinterface/interface.cpp b/tests/auto/dbus/qdbusabstractinterface/interface.cpp
index ef1ff74734..1226e5bb49 100644
--- a/tests/auto/dbus/qdbusabstractinterface/interface.cpp
+++ b/tests/auto/dbus/qdbusabstractinterface/interface.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 "interface.h"
#include <QThread>
@@ -33,16 +8,9 @@ Interface::Interface()
{
}
-// Export the sleep function
-// TODO QT5: remove this class, QThread::msleep is now public
-class FriendlySleepyThread : public QThread {
-public:
- using QThread::msleep;
-};
-
int Interface::sleepMethod(int msec)
{
- FriendlySleepyThread::msleep(msec);
+ QThread::sleep(std::chrono::milliseconds{msec});
return 42;
}
diff --git a/tests/auto/dbus/qdbusabstractinterface/interface.h b/tests/auto/dbus/qdbusabstractinterface/interface.h
index f9e6c0e028..53744998d0 100644
--- a/tests/auto/dbus/qdbusabstractinterface/interface.h
+++ b/tests/auto/dbus/qdbusabstractinterface/interface.h
@@ -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
#ifndef INTERFACE_H
#define INTERFACE_H
diff --git a/tests/auto/dbus/qdbusabstractinterface/org.qtproject.QtDBus.Pinger.xml b/tests/auto/dbus/qdbusabstractinterface/org.qtproject.QtDBus.Pinger.xml
index ad61351cb2..70d5a4e9c3 100644
--- a/tests/auto/dbus/qdbusabstractinterface/org.qtproject.QtDBus.Pinger.xml
+++ b/tests/auto/dbus/qdbusabstractinterface/org.qtproject.QtDBus.Pinger.xml
@@ -12,7 +12,7 @@
</signal>
<signal name="complexSignal">
<arg name="" type="(s)"/>
- <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="RegisteredType"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="RegisteredType"/>
</signal>
<method name="voidMethod" />
<method name="sleepMethod">
diff --git a/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface/CMakeLists.txt b/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface/CMakeLists.txt
index 3df1ff8177..55634f0677 100644
--- a/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface/CMakeLists.txt
@@ -1,9 +1,8 @@
-# Generated from qdbusabstractinterface.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusabstractinterface Test:
#####################################################################
-# special case begin
# this test can not be generated here. It needs to be set up in the
# parent directory
-# special case end
diff --git a/tests/auto/dbus/qdbusabstractinterface/qpinger/CMakeLists.txt b/tests/auto/dbus/qdbusabstractinterface/qpinger/CMakeLists.txt
index f5658b96a6..362928712d 100644
--- a/tests/auto/dbus/qdbusabstractinterface/qpinger/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusabstractinterface/qpinger/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qpinger.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qpinger Binary:
@@ -6,10 +7,10 @@
qt_internal_add_executable(qpinger
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
- NO_INSTALL # special case
+ NO_INSTALL
SOURCES
../interface.cpp ../interface.h
qpinger.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp b/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
index 2ff7d31332..47e5becc15 100644
--- a/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
+++ b/tests/auto/dbus/qdbusabstractinterface/qpinger/qpinger.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QCoreApplication>
diff --git a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
index 7cdf9dfe9c..ec585948d7 100644
--- a/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
+++ b/tests/auto/dbus/qdbusabstractinterface/tst_qdbusabstractinterface.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QTestEventLoop>
@@ -889,7 +864,7 @@ void tst_QDBusAbstractInterface::getStringSignal()
QCOMPARE(s.size(), 1);
QCOMPARE(s[0].size(), 1);
- QCOMPARE(s[0][0].userType(), int(QVariant::String));
+ QCOMPARE(s[0][0].userType(), int(QMetaType::QString));
QCOMPARE(s[0][0].toString(), expectedValue);
}
@@ -971,7 +946,7 @@ void tst_QDBusAbstractInterface::getStringSignalPeer()
QCOMPARE(s.size(), 1);
QCOMPARE(s[0].size(), 1);
- QCOMPARE(s[0][0].userType(), int(QVariant::String));
+ QCOMPARE(s[0][0].userType(), int(QMetaType::QString));
QCOMPARE(s[0][0].toString(), expectedValue);
}
diff --git a/tests/auto/dbus/qdbusconnection/CMakeLists.txt b/tests/auto/dbus/qdbusconnection/CMakeLists.txt
index b50d92a64d..56ae21f291 100644
--- a/tests/auto/dbus/qdbusconnection/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusconnection/CMakeLists.txt
@@ -1,12 +1,21 @@
-# Generated from qdbusconnection.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusconnection Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusconnection LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusconnection
SOURCES
tst_qdbusconnection.cpp tst_qdbusconnection.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
+ TESTDATA
+ tst_qdbusconnection.conf
)
diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.conf b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.conf
new file mode 100644
index 0000000000..7dec73d0d7
--- /dev/null
+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.conf
@@ -0,0 +1,23 @@
+<!-- This configuration file for tst_qdbusconnection.
+-->
+
+<!DOCTYPE busconfig PUBLIC "-//freedesktop//DTD D-Bus Bus Configuration 1.0//EN"
+ "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
+<busconfig>
+ <type>tst_qdbusconnection</type>
+
+ <listen>unix:tmpdir=/tmp</listen>
+
+ <auth>EXTERNAL</auth>
+
+ <policy context="default">
+ <!-- Allow everything to be sent -->
+ <allow send_destination="*" eavesdrop="true"/>
+ <!-- Allow everything to be received -->
+ <allow eavesdrop="true"/>
+ <!-- Allow anyone to own anything -->
+ <allow own="*"/>
+ </policy>
+
+ <limit name="max_completed_connections">0</limit>
+</busconfig>
diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
index cd6288ee34..504d1a4fea 100644
--- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "tst_qdbusconnection.h"
@@ -139,7 +114,7 @@ void tst_QDBusConnection::sendSignalToName()
QVERIFY(con.send(msg));
- QTRY_COMPARE(spy.args.count(), 1);
+ QTRY_COMPARE(spy.args.size(), 1);
QCOMPARE(spy.args.at(0).toString(), QString("ping"));
}
@@ -164,7 +139,7 @@ void tst_QDBusConnection::sendSignalToOtherName()
QTest::qWait(1000);
- QCOMPARE(spy.args.count(), 0);
+ QCOMPARE(spy.args.size(), 0);
}
void tst_QDBusConnection::send()
@@ -178,7 +153,7 @@ void tst_QDBusConnection::send()
QDBusMessage reply = con.call(msg);
- QCOMPARE(reply.arguments().count(), 1);
+ QCOMPARE(reply.arguments().size(), 1);
QCOMPARE(reply.arguments().at(0).typeName(), "QStringList");
QVERIFY(reply.arguments().at(0).toStringList().contains(con.baseService()));
}
@@ -197,7 +172,7 @@ void tst_QDBusConnection::sendWithGui()
QDBusMessage reply = con.call(msg, QDBus::BlockWithGui);
- QCOMPARE(reply.arguments().count(), 1);
+ QCOMPARE(reply.arguments().size(), 1);
QCOMPARE(reply.arguments().at(0).typeName(), "QStringList");
QVERIFY(reply.arguments().at(0).toStringList().contains(con.baseService()));
}
@@ -216,7 +191,7 @@ void tst_QDBusConnection::sendAsync()
"/org/freedesktop/DBus", "org.freedesktop.DBus", "ListNames");
QVERIFY(con.callWithCallback(msg, &spy, SLOT(asyncReply(QDBusMessage))));
- QTRY_COMPARE(spy.args.count(), 1);
+ QTRY_COMPARE(spy.args.size(), 1);
QCOMPARE(spy.args.value(0).typeName(), "QStringList");
QVERIFY(spy.args.at(0).toStringList().contains(con.baseService()));
}
@@ -239,7 +214,7 @@ void tst_QDBusConnection::connect()
QVERIFY(con.send(msg));
- QTRY_COMPARE(spy.args.count(), 1);
+ QTRY_COMPARE(spy.args.size(), 1);
QCOMPARE(spy.args.at(0).toString(), QString("ping"));
}
@@ -1051,7 +1026,7 @@ void tst_QDBusConnection::multipleInterfacesInQObject()
"local.BaseObject", "anotherMethod");
QDBusMessage reply = con.call(msg, QDBus::Block);
QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
- QCOMPARE(reply.arguments().count(), 0);
+ QCOMPARE(reply.arguments().size(), 0);
QVERIFY_HOOKCALLED();
}
@@ -1437,6 +1412,67 @@ void tst_QDBusConnection::pendingCallWhenDisconnected()
#endif
}
+void tst_QDBusConnection::connectionLimit()
+{
+#if !QT_CONFIG(process)
+ QSKIP("Test requires QProcess");
+#else
+ if (!QCoreApplication::instance())
+ QSKIP("Test requires a QCoreApplication");
+
+ QProcess daemon;
+ daemon.start("dbus-daemon",
+ QStringList() << "--config-file" << QFINDTESTDATA("tst_qdbusconnection.conf")
+ << "--nofork"
+ << "--print-address");
+ QVERIFY2(daemon.waitForReadyRead(2000),
+ "Daemon didn't print its address in time; error: \"" + daemon.errorString().toLocal8Bit() +
+ "\"; stderr:\n" + daemon.readAllStandardError());
+
+ QString address = QString::fromLocal8Bit(daemon.readAll().trimmed());
+ QDBusConnection con = QDBusConnection::connectToBus(address, "connectionLimit");
+ QVERIFY2(!con.isConnected(), "Unexpected successful connection");
+ QCOMPARE(con.lastError().type(), QDBusError::LimitsExceeded);
+
+ // kill the bus
+ daemon.terminate();
+ daemon.waitForFinished();
+#endif
+}
+
+void tst_QDBusConnection::emptyServerAddress()
+{
+ QDBusServer server({}, nullptr);
+}
+
+void tst_QDBusConnection::parentClassSignal()
+{
+ if (!QCoreApplication::instance())
+ QSKIP("Test requires a QCoreApplication");
+
+ const QString path = "/path";
+
+ QDBusConnection con = QDBusConnection::sessionBus();
+ QVERIFY(con.isConnected());
+
+ // register one object at root:
+ MyObject obj;
+ QVERIFY(con.registerObject(path, &obj, QDBusConnection::ExportAllContents));
+ QCOMPARE(con.objectRegisteredAt(path), static_cast<QObject *>(&obj));
+
+ SignalReceiver recv;
+ QVERIFY(con.connect(con.baseService(), path, "local.BaseObject", "baseObjectSignal", &recv,
+ SLOT(oneSlot())));
+ QVERIFY(con.connect(con.baseService(), path, "local.MyObject", "myObjectSignal", &recv,
+ SLOT(oneSlot())));
+
+ emit obj.baseObjectSignal();
+ QTRY_COMPARE(recv.signalsReceived, 1);
+
+ emit obj.myObjectSignal();
+ QTRY_COMPARE(recv.signalsReceived, 2);
+}
+
QString MyObject::path;
QString MyObjectWithoutInterface::path;
QString MyObjectWithoutInterface::interface;
diff --git a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
index a2e80149bc..4137859414 100644
--- a/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
+++ b/tests/auto/dbus/qdbusconnection/tst_qdbusconnection.h
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef TST_QDBUSCONNECTION_H
#define TST_QDBUSCONNECTION_H
@@ -46,11 +21,14 @@ public:
BaseObject(QObject *parent = nullptr) : QObject(parent) { }
public slots:
void anotherMethod() { }
+signals:
+ void baseObjectSignal();
};
class MyObject: public BaseObject
{
Q_OBJECT
+ Q_CLASSINFO("D-Bus Interface", "local.MyObject")
public slots:
void method(const QDBusMessage &msg);
@@ -58,6 +36,9 @@ public:
static QString path;
int callCount;
MyObject(QObject *parent = nullptr) : BaseObject(parent), callCount(0) {}
+
+signals:
+ void myObjectSignal();
};
class MyObjectWithoutInterface: public QObject
@@ -139,6 +120,11 @@ private slots:
void callVirtualObject();
void callVirtualObjectLocal();
void pendingCallWhenDisconnected();
+ void connectionLimit();
+
+ void emptyServerAddress();
+
+ void parentClassSignal();
public:
QString serviceName() const { return "org.qtproject.Qt.Autotests.QDBusConnection"; }
@@ -179,7 +165,7 @@ public:
bool registerObject()
{
- Q_FOREACH (const QString &name, m_connections) {
+ for (const QString &name : std::as_const(m_connections)) {
if (!registerObject(QDBusConnection(name)))
return false;
}
@@ -188,7 +174,7 @@ public:
void unregisterObject()
{
- Q_FOREACH (const QString &name, m_connections) {
+ for (const QString &name : std::as_const(m_connections)) {
QDBusConnection c(name);
c.unregisterObject(m_path);
}
diff --git a/tests/auto/dbus/qdbusconnection_delayed/CMakeLists.txt b/tests/auto/dbus/qdbusconnection_delayed/CMakeLists.txt
index 8a3187e741..d25c57f37f 100644
--- a/tests/auto/dbus/qdbusconnection_delayed/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusconnection_delayed/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdbusconnection_delayed.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusconnection_delayed Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusconnection_delayed LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusconnection_delayed
SOURCES
tst_qdbusconnection_delayed.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusconnection_delayed/tst_qdbusconnection_delayed.cpp b/tests/auto/dbus/qdbusconnection_delayed/tst_qdbusconnection_delayed.cpp
index b93ebbc4cd..1ce59749f7 100644
--- a/tests/auto/dbus/qdbusconnection_delayed/tst_qdbusconnection_delayed.cpp
+++ b/tests/auto/dbus/qdbusconnection_delayed/tst_qdbusconnection_delayed.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QTestEventLoop>
diff --git a/tests/auto/dbus/qdbusconnection_no_app/CMakeLists.txt b/tests/auto/dbus/qdbusconnection_no_app/CMakeLists.txt
index 7479baf89c..3368ce33f0 100644
--- a/tests/auto/dbus/qdbusconnection_no_app/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusconnection_no_app/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qdbusconnection_no_app.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusconnection_no_app Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusconnection_no_app LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusconnection_no_app
SOURCES
../qdbusconnection/tst_qdbusconnection.h
tst_qdbusconnection_no_app.cpp
DEFINES
tst_QDBusConnection=tst_QDBusConnection_NoApplication
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusconnection_no_app/tst_qdbusconnection_no_app.cpp b/tests/auto/dbus/qdbusconnection_no_app/tst_qdbusconnection_no_app.cpp
index c7f4805ca0..4b0157e83c 100644
--- a/tests/auto/dbus/qdbusconnection_no_app/tst_qdbusconnection_no_app.cpp
+++ b/tests/auto/dbus/qdbusconnection_no_app/tst_qdbusconnection_no_app.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Ugly hack, look away
#include "../qdbusconnection/tst_qdbusconnection.cpp"
diff --git a/tests/auto/dbus/qdbusconnection_no_bus/CMakeLists.txt b/tests/auto/dbus/qdbusconnection_no_bus/CMakeLists.txt
index 02d3f816c8..d6954e4c4b 100644
--- a/tests/auto/dbus/qdbusconnection_no_bus/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusconnection_no_bus/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdbusconnection_no_bus.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusconnection_no_bus Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusconnection_no_bus LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusconnection_no_bus
SOURCES
tst_qdbusconnection_no_bus.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusconnection_no_bus/tst_qdbusconnection_no_bus.cpp b/tests/auto/dbus/qdbusconnection_no_bus/tst_qdbusconnection_no_bus.cpp
index 715b94d404..abc3749304 100644
--- a/tests/auto/dbus/qdbusconnection_no_bus/tst_qdbusconnection_no_bus.cpp
+++ b/tests/auto/dbus/qdbusconnection_no_bus/tst_qdbusconnection_no_bus.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 <QTest>
#include <QDebug>
diff --git a/tests/auto/dbus/qdbusconnection_no_libdbus/CMakeLists.txt b/tests/auto/dbus/qdbusconnection_no_libdbus/CMakeLists.txt
index a212065da9..879572f3bd 100644
--- a/tests/auto/dbus/qdbusconnection_no_libdbus/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusconnection_no_libdbus/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qdbusconnection_no_libdbus.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusconnection_no_libdbus Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusconnection_no_libdbus LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusconnection_no_libdbus
SOURCES
../qdbusconnection_no_bus/tst_qdbusconnection_no_bus.cpp
DEFINES
SIMULATE_LOAD_FAIL
tst_QDBusConnectionNoBus=tst_QDBusConnectionNoLibDBus1
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusconnection_no_libdbus/tst_qdbusconnection_no_libdbus.cpp b/tests/auto/dbus/qdbusconnection_no_libdbus/tst_qdbusconnection_no_libdbus.cpp
index 946a9a2d97..0a1287e725 100644
--- a/tests/auto/dbus/qdbusconnection_no_libdbus/tst_qdbusconnection_no_libdbus.cpp
+++ b/tests/auto/dbus/qdbusconnection_no_libdbus/tst_qdbusconnection_no_libdbus.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 <qcoreapplication.h>
#include <qdebug.h>
diff --git a/tests/auto/dbus/qdbusconnection_signalorder/CMakeLists.txt b/tests/auto/dbus/qdbusconnection_signalorder/CMakeLists.txt
new file mode 100644
index 0000000000..182007da92
--- /dev/null
+++ b/tests/auto/dbus/qdbusconnection_signalorder/CMakeLists.txt
@@ -0,0 +1,19 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qdbusconnection_signalorder Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusconnection_signalorder LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qdbusconnection_signalorder
+ SOURCES
+ tst_qdbusconnection_signalorder.cpp
+ LIBRARIES
+ Qt::DBus
+)
diff --git a/tests/auto/dbus/qdbusconnection_signalorder/tst_qdbusconnection_signalorder.cpp b/tests/auto/dbus/qdbusconnection_signalorder/tst_qdbusconnection_signalorder.cpp
new file mode 100644
index 0000000000..06dc451ac6
--- /dev/null
+++ b/tests/auto/dbus/qdbusconnection_signalorder/tst_qdbusconnection_signalorder.cpp
@@ -0,0 +1,103 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+#include <QDBusConnection>
+#include <QDBusMessage>
+#include <QObject>
+#include <QTest>
+#include <QTimer>
+
+using namespace Qt::StringLiterals;
+
+static constexpr int MAX_TEST_DURATION_MS = 10000;
+static constexpr int NUM_MESSAGES = 20;
+
+class SignalReceiver : public QObject
+{
+ Q_OBJECT
+public:
+ explicit SignalReceiver(QDBusConnection &connection, const QString &serviceName);
+
+ int nextValue() const { return m_nextValue; }
+ bool inOrder() const { return m_inOrder; }
+
+Q_SIGNALS:
+ void testSignal(int);
+ void done();
+
+private Q_SLOTS:
+ void testSlot(int number);
+
+private:
+ int m_nextValue = 0;
+ bool m_inOrder = true;
+};
+
+SignalReceiver::SignalReceiver(QDBusConnection &connection, const QString &serviceName)
+{
+ connection.connect(serviceName, "/", {}, "testSignal", this, SLOT(testSlot(int)));
+}
+
+void SignalReceiver::testSlot(int number)
+{
+ if (m_nextValue != number) {
+ m_inOrder = false;
+ qWarning("Message out of sequence, expected: %d, received: %d", m_nextValue, number);
+ }
+
+ m_nextValue++;
+
+ if (m_nextValue == NUM_MESSAGES) {
+ Q_EMIT done();
+ }
+}
+
+class tst_QDBusConnection_SignalOrder : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void signalOrder();
+};
+
+// This is a regression test for QTBUG-105457. The bug is a race condition,
+// so it cannot be reliably triggered at each test execution.
+void tst_QDBusConnection_SignalOrder::signalOrder()
+{
+ int argc = 1;
+ static char appName[] = "tst_qdbusconnection_signalorder";
+ char *argv[] = { appName, 0 };
+ QCoreApplication app(argc, argv);
+
+ const QString serviceName =
+ u"org.qtproject.tst_dbusconnection_signalorder_%1"_s.arg(app.applicationPid());
+
+ auto connection = QDBusConnection::sessionBus();
+
+ QVERIFY(connection.isConnected());
+ QVERIFY(connection.registerService(serviceName));
+
+ // Limit the test execution time in case if something goes wrong inside
+ // the signal receiver.
+ QTimer::singleShot(MAX_TEST_DURATION_MS, &app, &QCoreApplication::quit);
+
+ SignalReceiver signalReceiver(connection, serviceName);
+ connect(&signalReceiver, &SignalReceiver::done, &app, &QCoreApplication::quit);
+
+ QVERIFY(connection.registerObject("/", &signalReceiver, QDBusConnection::ExportAllSlots));
+
+ for (int i = 0; i < NUM_MESSAGES; i++) {
+ auto testSignal = QDBusMessage::createSignal("/", serviceName, "testSignal");
+ testSignal << i;
+ QVERIFY(connection.send(testSignal));
+ }
+
+ app.exec();
+
+ QVERIFY(signalReceiver.inOrder());
+ QCOMPARE(signalReceiver.nextValue(), NUM_MESSAGES);
+}
+
+QTEST_APPLESS_MAIN(tst_QDBusConnection_SignalOrder)
+
+#include "tst_qdbusconnection_signalorder.moc"
diff --git a/tests/auto/dbus/qdbusconnection_spyhook/CMakeLists.txt b/tests/auto/dbus/qdbusconnection_spyhook/CMakeLists.txt
index 6f197cd877..80417296a0 100644
--- a/tests/auto/dbus/qdbusconnection_spyhook/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusconnection_spyhook/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qdbusconnection_spyhook.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusconnection_spyhook Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusconnection_spyhook LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusconnection_spyhook
SOURCES
../qdbusconnection/tst_qdbusconnection.h
tst_qdbusconnection_spyhook.cpp
DEFINES
tst_QDBusConnection=tst_QDBusConnection_SpyHook
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusconnection_spyhook/tst_qdbusconnection_spyhook.cpp b/tests/auto/dbus/qdbusconnection_spyhook/tst_qdbusconnection_spyhook.cpp
index 92bbbe1ef3..57466afc04 100644
--- a/tests/auto/dbus/qdbusconnection_spyhook/tst_qdbusconnection_spyhook.cpp
+++ b/tests/auto/dbus/qdbusconnection_spyhook/tst_qdbusconnection_spyhook.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtDBus/QDBusMessage>
diff --git a/tests/auto/dbus/qdbuscontext/CMakeLists.txt b/tests/auto/dbus/qdbuscontext/CMakeLists.txt
index ed1bd137e1..28bb3ebbc7 100644
--- a/tests/auto/dbus/qdbuscontext/CMakeLists.txt
+++ b/tests/auto/dbus/qdbuscontext/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdbuscontext.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbuscontext Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbuscontext LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbuscontext
SOURCES
tst_qdbuscontext.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbuscontext/tst_qdbuscontext.cpp b/tests/auto/dbus/qdbuscontext/tst_qdbuscontext.cpp
index 87e2c8a1c1..b44e353365 100644
--- a/tests/auto/dbus/qdbuscontext/tst_qdbuscontext.cpp
+++ b/tests/auto/dbus/qdbuscontext/tst_qdbuscontext.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 <QTest>
#include <QDBusContext>
diff --git a/tests/auto/dbus/qdbusinterface/CMakeLists.txt b/tests/auto/dbus/qdbusinterface/CMakeLists.txt
index f47d8be56b..56439f9ef6 100644
--- a/tests/auto/dbus/qdbusinterface/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusinterface/CMakeLists.txt
@@ -1,7 +1,13 @@
-# Generated from qdbusinterface.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_qdbusinterface LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(qmyserver)
-# special case begin
#####################################################################
## ../tst_qdbusinterface Test:
@@ -14,22 +20,18 @@ qt_internal_add_test(tst_qdbusinterface
LIBRARIES
Qt::CorePrivate
Qt::DBusPrivate
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::DBus
)
-#### Keys ignored in scope 1:.:.:qdbusinterface.pro:<TRUE>:
-# CONFIG = "testcase"
-# DESTDIR = "./"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qdbusinterface CONDITION QT_FEATURE_dbus_linked
DEFINES
QT_LINKED_LIBDBUS
- PUBLIC_LIBRARIES
+ LIBRARIES
dbus-1
)
@@ -38,4 +40,5 @@ qt_internal_extend_target(tst_qdbusinterface CONDITION NOT QT_FEATURE_dbus_linke
../../../../src/dbus/qdbus_symbols.cpp
)
-# special case end
+add_dependencies(tst_qdbusinterface qmyserver_qdbusinterface)
+
diff --git a/tests/auto/dbus/qdbusinterface/myobject.h b/tests/auto/dbus/qdbusinterface/myobject.h
index e6f6d4a505..355d4d3752 100644
--- a/tests/auto/dbus/qdbusinterface/myobject.h
+++ b/tests/auto/dbus/qdbusinterface/myobject.h
@@ -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
#ifndef MYOBJECT_H
#define MYOBJECT_H
diff --git a/tests/auto/dbus/qdbusinterface/qmyserver/CMakeLists.txt b/tests/auto/dbus/qdbusinterface/qmyserver/CMakeLists.txt
index 5ee288169d..55eb2c39cc 100644
--- a/tests/auto/dbus/qdbusinterface/qmyserver/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusinterface/qmyserver/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qmyserver.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qmyserver_qdbusinterface Binary:
@@ -6,10 +7,10 @@
qt_internal_add_executable(qmyserver_qdbusinterface
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
- NO_INSTALL # special case
+ NO_INSTALL
SOURCES
../myobject.h
qmyserver.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp b/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp
index f7a935b1ba..5d8692d9a6 100644
--- a/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp
+++ b/tests/auto/dbus/qdbusinterface/qmyserver/qmyserver.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QCoreApplication>
#include <QDBusServer>
diff --git a/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp b/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp
index c02c6c82b0..803ae4fa0f 100644
--- a/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.cpp
+++ b/tests/auto/dbus/qdbusinterface/tst_qdbusinterface.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 <QTest>
#include <QDebug>
@@ -45,6 +20,8 @@
#include "../qdbusmarshall/common.h"
#include "myobject.h"
+using namespace Qt::StringLiterals;
+
#define TEST_INTERFACE_NAME "org.qtproject.QtDBus.MyObject"
#define TEST_SIGNAL_NAME "somethingHappened"
@@ -223,6 +200,10 @@ private slots:
void complexPropertyWritePeer();
void interactiveAuthorizationRequired();
+
+ void interfaceNameFallback_data();
+ void interfaceNameFallback();
+
private:
QProcess proc;
};
@@ -331,6 +312,13 @@ void tst_QDBusInterface::notValid()
QVERIFY(!interface.isValid());
QVERIFY(!QMetaObject::invokeMethod(&interface, "ListNames", Qt::DirectConnection));
+
+ // With a connection, but empty/null service and path specified
+ QDBusConnection con = QDBusConnection::sessionBus();
+ QVERIFY(con.isConnected());
+ QDBusInterface iface({}, {}, {}, con);
+ QVERIFY(!iface.isValid());
+ QVERIFY(!QMetaObject::invokeMethod(&interface, "ListNames", Qt::DirectConnection));
}
void tst_QDBusInterface::notValidDerived()
@@ -486,14 +474,14 @@ void tst_QDBusInterface::callMethod()
QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
// verify what the callee received
- QCOMPARE(MyObject::callArgs.count(), 1);
+ QCOMPARE(MyObject::callArgs.size(), 1);
QVariant v = MyObject::callArgs.at(0);
QDBusVariant dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
QCOMPARE(dv.variant().toString(), QString("foo"));
// verify reply
- QCOMPARE(reply.arguments().count(), 1);
+ QCOMPARE(reply.arguments().size(), 1);
v = reply.arguments().at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -505,14 +493,14 @@ void tst_QDBusInterface::callMethod()
QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
// verify what the callee received
- QCOMPARE(MyObject::callArgs.count(), 1);
+ QCOMPARE(MyObject::callArgs.size(), 1);
v = MyObject::callArgs.at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
QCOMPARE(dv.variant().toString(), QString("bar"));
// verify reply
- QCOMPARE(reply.arguments().count(), 1);
+ QCOMPARE(reply.arguments().size(), 1);
v = reply.arguments().at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -533,7 +521,7 @@ void tst_QDBusInterface::invokeMethod()
QCOMPARE(MyObject::callCount, 1);
// verify what the callee received
- QCOMPARE(MyObject::callArgs.count(), 1);
+ QCOMPARE(MyObject::callArgs.size(), 1);
QVariant v = MyObject::callArgs.at(0);
QDBusVariant dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -545,7 +533,7 @@ void tst_QDBusInterface::invokeMethod()
QCOMPARE(MyObject::callCount, 2);
// verify what the callee received
- QCOMPARE(MyObject::callArgs.count(), 1);
+ QCOMPARE(MyObject::callArgs.size(), 1);
v = MyObject::callArgs.at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -567,7 +555,7 @@ void tst_QDBusInterface::invokeMethodWithReturn()
QCOMPARE(MyObject::callCount, 1);
// verify what the callee received
- QCOMPARE(MyObject::callArgs.count(), 1);
+ QCOMPARE(MyObject::callArgs.size(), 1);
QVariant v = MyObject::callArgs.at(0);
QDBusVariant dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -582,7 +570,7 @@ void tst_QDBusInterface::invokeMethodWithReturn()
QCOMPARE(MyObject::callCount, 2);
// verify what the callee received
- QCOMPARE(MyObject::callArgs.count(), 1);
+ QCOMPARE(MyObject::callArgs.size(), 1);
v = MyObject::callArgs.at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -611,7 +599,7 @@ void tst_QDBusInterface::invokeMethodWithMultiReturn()
QCOMPARE(MyObject::callCount, 1);
// verify what the callee received
- QCOMPARE(MyObject::callArgs.count(), 2);
+ QCOMPARE(MyObject::callArgs.size(), 2);
QVariant v = MyObject::callArgs.at(0);
QDBusVariant dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -636,7 +624,7 @@ void tst_QDBusInterface::invokeMethodWithMultiReturn()
QCOMPARE(MyObject::callCount, 2);
// verify what the callee received
- QCOMPARE(MyObject::callArgs.count(), 2);
+ QCOMPARE(MyObject::callArgs.size(), 2);
v = MyObject::callArgs.at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -667,7 +655,7 @@ void tst_QDBusInterface::invokeMethodWithComplexReturn()
QCOMPARE(MyObject::callCount, 1);
// verify what the callee received
- QCOMPARE(MyObject::callArgs.count(), 1);
+ QCOMPARE(MyObject::callArgs.size(), 1);
QVariant v = MyObject::callArgs.at(0);
QCOMPARE(v.userType(), qMetaTypeId<QDBusArgument>());
QCOMPARE(qdbus_cast<QList<int> >(v), arg);
@@ -681,7 +669,7 @@ void tst_QDBusInterface::invokeMethodWithComplexReturn()
QCOMPARE(MyObject::callCount, 2);
// verify what the callee received
- QCOMPARE(MyObject::callArgs.count(), 1);
+ QCOMPARE(MyObject::callArgs.size(), 1);
v = MyObject::callArgs.at(0);
QCOMPARE(v.userType(), qMetaTypeId<QDBusArgument>());
QCOMPARE(qdbus_cast<QList<int> >(v), arg2);
@@ -721,14 +709,14 @@ void tst_QDBusInterface::callMethodPeer()
// verify what the callee received
QVariantList callArgs = callArgsPeer();
- QCOMPARE(callArgs.count(), 1);
+ QCOMPARE(callArgs.size(), 1);
QVariant v = callArgs.at(0);
QDBusVariant dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
QCOMPARE(dv.variant().toString(), QString("foo"));
// verify reply
- QCOMPARE(reply.arguments().count(), 1);
+ QCOMPARE(reply.arguments().size(), 1);
v = reply.arguments().at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -741,14 +729,14 @@ void tst_QDBusInterface::callMethodPeer()
// verify what the callee received
callArgs = callArgsPeer();
- QCOMPARE(callArgs.count(), 1);
+ QCOMPARE(callArgs.size(), 1);
v = callArgs.at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
QCOMPARE(dv.variant().toString(), QString("bar"));
// verify reply
- QCOMPARE(reply.arguments().count(), 1);
+ QCOMPARE(reply.arguments().size(), 1);
v = reply.arguments().at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -770,7 +758,7 @@ void tst_QDBusInterface::invokeMethodPeer()
// verify what the callee received
QVariantList callArgs = callArgsPeer();
- QCOMPARE(callArgs.count(), 1);
+ QCOMPARE(callArgs.size(), 1);
QVariant v = callArgs.at(0);
QDBusVariant dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -783,7 +771,7 @@ void tst_QDBusInterface::invokeMethodPeer()
// verify what the callee received
callArgs = callArgsPeer();
- QCOMPARE(callArgs.count(), 1);
+ QCOMPARE(callArgs.size(), 1);
v = callArgs.at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -806,7 +794,7 @@ void tst_QDBusInterface::invokeMethodWithReturnPeer()
// verify what the callee received
QVariantList callArgs = callArgsPeer();
- QCOMPARE(callArgs.count(), 1);
+ QCOMPARE(callArgs.size(), 1);
QVariant v = callArgs.at(0);
QDBusVariant dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -822,7 +810,7 @@ void tst_QDBusInterface::invokeMethodWithReturnPeer()
// verify what the callee received
callArgs = callArgsPeer();
- QCOMPARE(callArgs.count(), 1);
+ QCOMPARE(callArgs.size(), 1);
v = callArgs.at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -852,7 +840,7 @@ void tst_QDBusInterface::invokeMethodWithMultiReturnPeer()
// verify what the callee received
QVariantList callArgs = callArgsPeer();
- QCOMPARE(callArgs.count(), 2);
+ QCOMPARE(callArgs.size(), 2);
QVariant v = callArgs.at(0);
QDBusVariant dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -878,7 +866,7 @@ void tst_QDBusInterface::invokeMethodWithMultiReturnPeer()
// verify what the callee received
callArgs = callArgsPeer();
- QCOMPARE(callArgs.count(), 2);
+ QCOMPARE(callArgs.size(), 2);
v = callArgs.at(0);
dv = qdbus_cast<QDBusVariant>(v);
QCOMPARE(dv.variant().userType(), QMetaType::QString);
@@ -910,7 +898,7 @@ void tst_QDBusInterface::invokeMethodWithComplexReturnPeer()
// verify what the callee received
QVariantList callArgs = callArgsPeer();
- QCOMPARE(callArgs.count(), 1);
+ QCOMPARE(callArgs.size(), 1);
QVariant v = callArgs.at(0);
QCOMPARE(v.userType(), qMetaTypeId<QDBusArgument>());
QCOMPARE(qdbus_cast<QList<int> >(v), arg);
@@ -925,7 +913,7 @@ void tst_QDBusInterface::invokeMethodWithComplexReturnPeer()
// verify what the callee received
callArgs = callArgsPeer();
- QCOMPARE(callArgs.count(), 1);
+ QCOMPARE(callArgs.size(), 1);
v = callArgs.at(0);
QCOMPARE(v.userType(), qMetaTypeId<QDBusArgument>());
QCOMPARE(qdbus_cast<QList<int> >(v), arg2);
@@ -1027,7 +1015,7 @@ void tst_QDBusInterface::propertyRead()
QVariant v = iface.property("prop1");
QVERIFY(v.isValid());
- QCOMPARE(v.userType(), int(QVariant::Int));
+ QCOMPARE(v.userType(), int(QMetaType::Int));
QCOMPARE(v.toInt(), arg);
QCOMPARE(MyObject::callCount, 1);
}
@@ -1090,7 +1078,7 @@ void tst_QDBusInterface::propertyReadPeer()
QVariant v = iface.property("prop1");
QVERIFY(v.isValid());
- QCOMPARE(v.userType(), int(QVariant::Int));
+ QCOMPARE(v.userType(), int(QMetaType::Int));
QCOMPARE(v.toInt(), arg);
QCOMPARE(callCountPeer(), 1);
}
@@ -1165,6 +1153,60 @@ void tst_QDBusInterface::interactiveAuthorizationRequired()
QVERIFY(reply.arguments().at(0).toBool());
}
+class TestObject : public QObject
+{
+ Q_OBJECT
+public Q_SLOTS:
+ void test() { }
+};
+
+void tst_QDBusInterface::interfaceNameFallback_data()
+{
+ QTest::addColumn<QString>("appName");
+ QTest::addColumn<QString>("orgDomain");
+ QTest::addColumn<QString>("interfaceName");
+
+ QTest::addRow("empty.empty") << "" << "" << "local.tst_qdbusinterface";
+ QTest::addRow("with-domain") << "" << "qt-project.org" << "org.qt_project.tst_qdbusinterface";
+ QTest::addRow("numbers") << "prog42" << "7-zip.org" << "org._7_zip.prog42";
+ QTest::addRow("non-latin1") << u"\u00e6"_s << u"\u00e5"_s << "xn__5ca.xn__6ca";
+}
+
+void tst_QDBusInterface::interfaceNameFallback()
+{
+ QFETCH(QString, appName);
+ QFETCH(QString, orgDomain);
+ QFETCH(QString, interfaceName);
+
+ auto app = QCoreApplication::instance();
+ auto oldApplicationName = app->applicationName();
+ auto oldOrganizationDomain = app->organizationDomain();
+
+ app->setApplicationName(appName);
+ app->setOrganizationDomain(orgDomain);
+ auto obj = new TestObject;
+
+ auto cleanup = qScopeGuard([&] {
+ obj->deleteLater();
+ app->setApplicationName(oldApplicationName);
+ app->setOrganizationDomain(oldOrganizationDomain);
+ });
+
+ auto con = QDBusConnection::sessionBus();
+ const QString path = "/interfaceNameFallback"_L1;
+
+ QVERIFY(con.registerObject(path, obj, QDBusConnection::ExportAllContents));
+
+ QDBusInterface interface(con.baseService(), path, "org.freedesktop.DBus.Introspectable"_L1,
+ con);
+ auto reply = interface.call("Introspect");
+
+ QCOMPARE(reply.type(), QDBusMessage::ReplyMessage);
+ QString tag = u"<interface name=\"%1.TestObject\">"_s.arg(interfaceName);
+ auto result = reply.arguments().at(0).toString();
+ QVERIFY2(result.contains(tag), qUtf8Printable(u"Tag '%1' not found\n%2"_s.arg(tag, result)));
+}
+
QTEST_MAIN(tst_QDBusInterface)
#include "tst_qdbusinterface.moc"
diff --git a/tests/auto/dbus/qdbuslocalcalls/CMakeLists.txt b/tests/auto/dbus/qdbuslocalcalls/CMakeLists.txt
index 1a70c4af74..bf1ee7953f 100644
--- a/tests/auto/dbus/qdbuslocalcalls/CMakeLists.txt
+++ b/tests/auto/dbus/qdbuslocalcalls/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdbuslocalcalls.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbuslocalcalls Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbuslocalcalls LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbuslocalcalls
SOURCES
tst_qdbuslocalcalls.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbuslocalcalls/tst_qdbuslocalcalls.cpp b/tests/auto/dbus/qdbuslocalcalls/tst_qdbuslocalcalls.cpp
index 5caea5b14d..35e3471bbe 100644
--- a/tests/auto/dbus/qdbuslocalcalls/tst_qdbuslocalcalls.cpp
+++ b/tests/auto/dbus/qdbuslocalcalls/tst_qdbuslocalcalls.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 <QTest>
#include <QTestEventLoop>
@@ -134,20 +109,20 @@ void tst_QDBusLocalCalls::makeInvalidCalls()
QDBusMessage callMsg = QDBusMessage::createMethodCall(conn.baseService(),
"/", QString(), "echo");
QDBusMessage replyMsg = doCall(callMsg);
- QCOMPARE(int(replyMsg.type()), int(QDBusMessage::ErrorMessage));
+ QCOMPARE(replyMsg.type(), QDBusMessage::ErrorMessage);
QDBusError error(replyMsg);
- QCOMPARE(int(error.type()), int(QDBusError::UnknownMethod));
+ QCOMPARE(error.type(), QDBusError::UnknownMethod);
}
{
QDBusMessage callMsg = QDBusMessage::createMethodCall(conn.baseService(),
"/no_object", QString(), "echo");
QDBusMessage replyMsg = doCall(callMsg);
- QCOMPARE(int(replyMsg.type()), int(QDBusMessage::ErrorMessage));
+ QCOMPARE(replyMsg.type(), QDBusMessage::ErrorMessage);
QDBusError error(replyMsg);
- QCOMPARE(int(error.type()), int(QDBusError::UnknownObject));
+ QCOMPARE(error.type(), QDBusError::UnknownObject);
}
}
@@ -159,10 +134,10 @@ void tst_QDBusLocalCalls::makeCalls()
callMsg << value;
QDBusMessage replyMsg = doCall(callMsg);
- QCOMPARE(int(replyMsg.type()), int(QDBusMessage::ReplyMessage));
+ QCOMPARE(replyMsg.type(), QDBusMessage::ReplyMessage);
QVariantList replyArgs = replyMsg.arguments();
- QCOMPARE(replyArgs.count(), 1);
+ QCOMPARE(replyArgs.size(), 1);
QCOMPARE(replyArgs.at(0), value);
}
@@ -174,10 +149,10 @@ void tst_QDBusLocalCalls::makeCallsVariant()
callMsg << QVariant::fromValue(QDBusVariant(value));
QDBusMessage replyMsg = doCall(callMsg);
- QCOMPARE(int(replyMsg.type()), int(QDBusMessage::ReplyMessage));
+ QCOMPARE(replyMsg.type(), QDBusMessage::ReplyMessage);
QVariantList replyArgs = replyMsg.arguments();
- QCOMPARE(replyArgs.count(), 1);
+ QCOMPARE(replyArgs.size(), 1);
const QVariant &reply = replyArgs.at(0);
QCOMPARE(reply.userType(), qMetaTypeId<QDBusVariant>());
@@ -191,10 +166,10 @@ void tst_QDBusLocalCalls::makeCallsTwoRets()
callMsg << (QStringList() << "One" << "Two");
QDBusMessage replyMsg = doCall(callMsg);
- QCOMPARE(int(replyMsg.type()), int(QDBusMessage::ReplyMessage));
+ QCOMPARE(replyMsg.type(), QDBusMessage::ReplyMessage);
QVariantList replyArgs = replyMsg.arguments();
- QCOMPARE(replyArgs.count(), 2);
+ QCOMPARE(replyArgs.size(), 2);
QCOMPARE(replyArgs.at(0).toString(), QString::fromLatin1("One"));
QCOMPARE(replyArgs.at(1).toString(), QString::fromLatin1("Two"));
}
@@ -211,10 +186,10 @@ void tst_QDBusLocalCalls::makeCallsComplex()
callMsg << QVariant::fromValue(value);
QDBusMessage replyMsg = doCall(callMsg);
- QCOMPARE(int(replyMsg.type()), int(QDBusMessage::ReplyMessage));
+ QCOMPARE(replyMsg.type(), QDBusMessage::ReplyMessage);
QVariantList replyArgs = replyMsg.arguments();
- QCOMPARE(replyArgs.count(), 1);
+ QCOMPARE(replyArgs.size(), 1);
const QVariant &reply = replyArgs.at(0);
QCOMPARE(reply.userType(), qMetaTypeId<QDBusArgument>());
QCOMPARE(qdbus_cast<QList<int> >(reply), value);
@@ -226,10 +201,10 @@ void tst_QDBusLocalCalls::makeDelayedCalls()
"/", QString(), "delayed");
QTest::ignoreMessage(QtWarningMsg, "QDBusConnection: cannot call local method 'delayed' at object / (with signature '') on blocking mode");
QDBusMessage replyMsg = doCall(callMsg);
- QCOMPARE(int(replyMsg.type()), int(QDBusMessage::ErrorMessage));
+ QCOMPARE(replyMsg.type(), QDBusMessage::ErrorMessage);
QDBusError error(replyMsg);
- QCOMPARE(int(error.type()), int(QDBusError::InternalError));
+ QCOMPARE(error.type(), QDBusError::InternalError);
}
void tst_QDBusLocalCalls::asyncReplySignal()
diff --git a/tests/auto/dbus/qdbusmarshall/CMakeLists.txt b/tests/auto/dbus/qdbusmarshall/CMakeLists.txt
index 5d40035aee..db24390069 100644
--- a/tests/auto/dbus/qdbusmarshall/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusmarshall/CMakeLists.txt
@@ -1,7 +1,15 @@
-# Generated from qdbusmarshall.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_qdbusmarshall LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
endif()
-add_subdirectory(qpong)
add_subdirectory(qdbusmarshall)
+add_subdirectory(qpong)
+add_dependencies(tst_qdbusmarshall qpong)
diff --git a/tests/auto/dbus/qdbusmarshall/common.h b/tests/auto/dbus/qdbusmarshall/common.h
index 9bdc1ebe66..9a7c1e1553 100644
--- a/tests/auto/dbus/qdbusmarshall/common.h
+++ b/tests/auto/dbus/qdbusmarshall/common.h
@@ -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 <QtGlobal>
#include <QMap>
@@ -177,7 +152,9 @@ void commonInit()
qDBusRegisterMetaType<QMap<QDBusObjectPath, QString> >();
qDBusRegisterMetaType<QMap<qlonglong, QDateTime> >();
qDBusRegisterMetaType<QMap<QDBusSignature, QString> >();
+ qDBusRegisterMetaType<QMap<QString, std::pair<int, int>>>();
+ qDBusRegisterMetaType<std::pair<int, int>>();
qDBusRegisterMetaType<MyStruct>();
qDBusRegisterMetaType<MyVariantMapStruct>();
qDBusRegisterMetaType<QList<MyVariantMapStruct> >();
@@ -231,15 +208,17 @@ inline const char* mapName(const PropertyMap&)
QString printable(const QDBusIntrospection::Method& m)
{
QString result = "method " + m.name + "(";
- foreach (QDBusIntrospection::Argument arg, m.inputArgs)
+ for (QDBusIntrospection::Argument arg : m.inputArgs) {
result += QString("in %1 %2, ")
.arg(arg.type, arg.name);
- foreach (QDBusIntrospection::Argument arg, m.outputArgs)
+ }
+ for (QDBusIntrospection::Argument arg : m.outputArgs) {
result += QString("out %1 %2, ")
.arg(arg.type, arg.name);
+ }
AnnotationsMap::const_iterator it = m.annotations.begin();
for ( ; it != m.annotations.end(); ++it)
- result += QString("%1 \"%2\", ").arg(it.key()).arg(it.value());
+ result += QString("%1 \"%2\", ").arg(it.key()).arg(it.value().value);
result += ")";
return result;
@@ -248,12 +227,13 @@ QString printable(const QDBusIntrospection::Method& m)
QString printable(const QDBusIntrospection::Signal& s)
{
QString result = "signal " + s.name + "(";
- foreach (QDBusIntrospection::Argument arg, s.outputArgs)
+ for (QDBusIntrospection::Argument arg : s.outputArgs) {
result += QString("out %1 %2, ")
.arg(arg.type, arg.name);
+ }
AnnotationsMap::const_iterator it = s.annotations.begin();
for ( ; it != s.annotations.end(); ++it)
- result += QString("%1 \"%2\", ").arg(it.key()).arg(it.value());
+ result += QString("%1 \"%2\", ").arg(it.key()).arg(it.value().value);
result += ")";
return result;
@@ -272,7 +252,7 @@ QString printable(const QDBusIntrospection::Property& p)
AnnotationsMap::const_iterator it = p.annotations.begin();
for ( ; it != p.annotations.end(); ++it)
- result += QString("%1 \"%2\", ").arg(it.key()).arg(it.value());
+ result += QString("%1 \"%2\", ").arg(it.key()).arg(it.value().value);
return result;
}
@@ -359,7 +339,7 @@ bool compare(const QDBusVariant &s1, const QDBusVariant &s2)
template<typename T>
bool compare(const QList<T> &l1, const QList<T> &l2)
{
- if (l1.count() != l2.count())
+ if (l1.size() != l2.size())
return false;
typename QList<T>::ConstIterator it1 = l1.constBegin();
@@ -374,7 +354,7 @@ bool compare(const QList<T> &l1, const QList<T> &l2)
template<typename Key, typename T>
bool compare(const QMap<Key, T> &m1, const QMap<Key, T> &m2)
{
- if (m1.count() != m2.size())
+ if (m1.size() != m2.size())
return false;
typename QMap<Key, T>::ConstIterator i1 = m1.constBegin();
typename QMap<Key, T>::ConstIterator end = m1.constEnd();
@@ -402,7 +382,7 @@ bool compareToArgument(const QDBusArgument &arg, const QVariant &v2)
// try to demarshall the arg according to v2
switch (v2.userType())
{
- case QVariant::Bool:
+ case QMetaType::Bool:
return compare<bool>(arg, v2);
case QMetaType::UChar:
return compare<uchar>(arg, v2);
@@ -410,45 +390,45 @@ bool compareToArgument(const QDBusArgument &arg, const QVariant &v2)
return compare<short>(arg, v2);
case QMetaType::UShort:
return compare<ushort>(arg, v2);
- case QVariant::Int:
+ case QMetaType::Int:
return compare<int>(arg, v2);
- case QVariant::UInt:
+ case QMetaType::UInt:
return compare<uint>(arg, v2);
- case QVariant::LongLong:
+ case QMetaType::LongLong:
return compare<qlonglong>(arg, v2);
- case QVariant::ULongLong:
+ case QMetaType::ULongLong:
return compare<qulonglong>(arg, v2);
- case QVariant::Double:
+ case QMetaType::Double:
return compare<double>(arg, v2);
- case QVariant::String:
+ case QMetaType::QString:
return compare<QString>(arg, v2);
- case QVariant::ByteArray:
+ case QMetaType::QByteArray:
return compare<QByteArray>(arg, v2);
- case QVariant::List:
+ case QMetaType::QVariantList:
return compare<QVariantList>(arg, v2);
- case QVariant::Map:
+ case QMetaType::QVariantMap:
return compare<QVariantMap>(arg, v2);
- case QVariant::Point:
+ case QMetaType::QPoint:
return compare<QPoint>(arg, v2);
- case QVariant::PointF:
+ case QMetaType::QPointF:
return compare<QPointF>(arg, v2);
- case QVariant::Size:
+ case QMetaType::QSize:
return compare<QSize>(arg, v2);
- case QVariant::SizeF:
+ case QMetaType::QSizeF:
return compare<QSizeF>(arg, v2);
- case QVariant::Line:
+ case QMetaType::QLine:
return compare<QLine>(arg, v2);
- case QVariant::LineF:
+ case QMetaType::QLineF:
return compare<QLineF>(arg, v2);
- case QVariant::Rect:
+ case QMetaType::QRect:
return compare<QRect>(arg, v2);
- case QVariant::RectF:
+ case QMetaType::QRectF:
return compare<QRectF>(arg, v2);
- case QVariant::Date:
+ case QMetaType::QDate:
return compare<QDate>(arg, v2);
- case QVariant::Time:
+ case QMetaType::QTime:
return compare<QTime>(arg, v2);
- case QVariant::DateTime:
+ case QMetaType::QDateTime:
return compare<QDateTime>(arg, v2);
default:
int id = v2.userType();
@@ -493,6 +473,8 @@ bool compareToArgument(const QDBusArgument &arg, const QVariant &v2)
return compare<QMap<qlonglong, QDateTime> >(arg, v2);
else if (id == qMetaTypeId<QMap<QDBusSignature, QString> >())
return compare<QMap<QDBusSignature, QString> >(arg, v2);
+ else if (id == qMetaTypeId<QMap<QString, std::pair<int, int>>>())
+ return compare<QMap<QString, std::pair<int, int>>>(arg, v2);
else if (id == qMetaTypeId<QList<QByteArray> >())
return compare<QList<QByteArray> >(arg, v2);
@@ -549,16 +531,16 @@ template<> bool compare(const QVariant &v1, const QVariant &v2)
return false;
int id = v1.userType();
- if (id == QVariant::List)
+ if (id == QMetaType::QVariantList)
return compare(v1.toList(), v2.toList());
- else if (id == QVariant::Map)
+ else if (id == QMetaType::QVariantMap)
return compare(v1.toMap(), v2.toMap());
- else if (id == QVariant::String)
+ else if (id == QMetaType::QString)
return compare(v1.toString(), v2.toString());
- else if (id == QVariant::ByteArray)
+ else if (id == QMetaType::QByteArray)
return compare(v1.toByteArray(), v2.toByteArray());
else if (id == QMetaType::UChar)
@@ -663,7 +645,7 @@ template<> bool compare(const QVariant &v1, const QVariant &v2)
else if (id == qMetaTypeId<MyStruct>()) // (is)
return qvariant_cast<MyStruct>(v1) == qvariant_cast<MyStruct>(v2);
- else if (id < int(QVariant::UserType)) // yes, v1.type()
+ else if (id < int(QMetaType::User)) // yes, v1.type()
// QVariant can compare
return v1 == v2;
diff --git a/tests/auto/dbus/qdbusmarshall/qdbusmarshall/CMakeLists.txt b/tests/auto/dbus/qdbusmarshall/qdbusmarshall/CMakeLists.txt
index 2019292184..daad23cdf5 100644
--- a/tests/auto/dbus/qdbusmarshall/qdbusmarshall/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusmarshall/qdbusmarshall/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qdbusmarshall.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusmarshall Test:
@@ -8,7 +9,7 @@ qt_internal_add_test(tst_qdbusmarshall
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../tst_qdbusmarshall.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::DBusPrivate
)
@@ -16,14 +17,12 @@ qt_internal_add_test(tst_qdbusmarshall
## Scopes:
#####################################################################
-# special case begin
# This test case interacts with dbus code directly via the private
# headers. The include path is also not exposed via Qt:DBus.
-# special case end
qt_internal_extend_target(tst_qdbusmarshall CONDITION QT_FEATURE_dbus_linked
DEFINES
QT_LINKED_LIBDBUS
- PUBLIC_LIBRARIES
+ LIBRARIES
dbus-1
)
diff --git a/tests/auto/dbus/qdbusmarshall/qpong/CMakeLists.txt b/tests/auto/dbus/qdbusmarshall/qpong/CMakeLists.txt
index 527d464b74..8cf4dc32cc 100644
--- a/tests/auto/dbus/qdbusmarshall/qpong/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusmarshall/qpong/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qpong.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qpong Binary:
@@ -8,6 +9,6 @@ qt_internal_add_executable(qpong
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
SOURCES
qpong.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusmarshall/qpong/qpong.cpp b/tests/auto/dbus/qdbusmarshall/qpong/qpong.cpp
index 7333f5961d..3507ecb534 100644
--- a/tests/auto/dbus/qdbusmarshall/qpong/qpong.cpp
+++ b/tests/auto/dbus/qdbusmarshall/qpong/qpong.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** 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 <QCoreApplication>
#include <QDBusMessage>
#include <QDBusConnection>
+#include <QLoggingCategory>
static const char serviceName[] = "org.qtproject.autotests.qpong";
static const char objectPath[] = "/org/qtproject/qpong";
@@ -57,6 +33,9 @@ int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
+ // Silence many warnings from findSlot() about ping() not having the expected argument types
+ QLoggingCategory::setFilterRules("qt.dbus.integration=false");
+
QDBusConnection con = QDBusConnection::sessionBus();
if (!con.isConnected())
exit(1);
diff --git a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp
index c6928ca28d..e7a8273115 100644
--- a/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp
+++ b/tests/auto/dbus/qdbusmarshall/tst_qdbusmarshall.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
#include <QtCore/QtCore>
#include <QTest>
#include <QTestEventLoop>
@@ -437,7 +413,7 @@ void tst_QDBusMarshall::sendArrayOfArrays_data()
QTest::newRow("emptyvariantlist") << QVariant::fromValue(variants) << "aav"
<< "[Argument: aav {}]";
variants << QVariantList();
- QTest::newRow("emptyvariantlist") << QVariant::fromValue(variants) << "aav"
+ QTest::newRow("variantlist-empty-variantlist-element") << QVariant::fromValue(variants) << "aav"
<< "[Argument: aav {[Argument: av {}]}]";
variants << (QVariantList() << QString("Hello") << QByteArray("World"))
<< (QVariantList() << 42 << -43.0 << 44U << Q_INT64_C(-45))
@@ -500,6 +476,17 @@ void tst_QDBusMarshall::sendMaps_data()
QTest::newRow("gs-map") << QVariant::fromValue(gsmap) << "a{gs}"
<< "[Argument: a{gs} {[Signature: a{gs}] = \"array of dict_entry of (signature, string)\", [Signature: i] = \"int32\", [Signature: s] = \"string\"}]";
+ QMap<QString, std::pair<int, int>> siimap;
+ QTest::newRow("empty-sii-map") << QVariant::fromValue(siimap) << "a{s(ii)}"
+ << "[Argument: a{s(ii)} {}]";
+ siimap["0,0"] = { 0, 0 };
+ siimap["1,-1"] = { 1, -1 };
+ QTest::newRow("sii-map") << QVariant::fromValue(siimap) << "a{s(ii)}"
+ << "[Argument: a{s(ii)} {"
+ "\"0,0\" = [Argument: (ii) 0, 0], "
+ "\"1,-1\" = [Argument: (ii) 1, -1]"
+ "}]";
+
if (fileDescriptorPassing) {
svmap["zzfiledescriptor"] = QVariant::fromValue(QDBusUnixFileDescriptor(fileDescriptorForTest()));
QTest::newRow("sv-map1-fd") << QVariant::fromValue(svmap) << "a{sv}"
@@ -594,8 +581,8 @@ void tst_QDBusMarshall::sendComplex_data()
QTest::newRow("empty-lldtmap") << QVariant::fromValue(lldtmap) << "a{x((iii)(iiii)i)}"
<< "[Argument: a{x((iii)(iiii)i)} {}]";
lldtmap[0] = QDateTime();
- lldtmap[1] = QDateTime(QDate(1970, 1, 1), QTime(0, 0, 1), Qt::UTC);
- lldtmap[1150629776] = QDateTime(QDate(2006, 6, 18), QTime(11, 22, 56), Qt::UTC);
+ lldtmap[1] = QDateTime(QDate(1970, 1, 1), QTime(0, 0, 1), QTimeZone::UTC);
+ lldtmap[1150629776] = QDateTime(QDate(2006, 6, 18), QTime(11, 22, 56), QTimeZone::UTC);
QTest::newRow("lldtmap") << QVariant::fromValue(lldtmap) << "a{x((iii)(iiii)i)}"
<< "[Argument: a{x((iii)(iiii)i)} {0 = [Argument: ((iii)(iiii)i) [Argument: (iii) 0, 0, 0], [Argument: (iiii) -1, -1, -1, -1], 0], 1 = [Argument: ((iii)(iiii)i) [Argument: (iii) 1970, 1, 1], [Argument: (iiii) 0, 0, 1, 0], 1], 1150629776 = [Argument: ((iii)(iiii)i) [Argument: (iii) 2006, 6, 18], [Argument: (iiii) 11, 22, 56, 0], 1]}]";
@@ -738,14 +725,14 @@ void tst_QDBusMarshall::sendArgument_data()
<< QVariant::fromValue(QVariant::fromValue(QDBusVariant(1)));
arg = QDBusArgument();
- arg.beginArray(QVariant::Int);
+ arg.beginArray(QMetaType::Int);
arg << 1 << 2 << 3 << -4;
arg.endArray();
QTest::newRow("array-of-int") << QVariant::fromValue(arg) << "ai" << int(QDBusArgument::ArrayType)
<< QVariant::fromValue(arg);
arg = QDBusArgument();
- arg.beginMap(QVariant::Int, QVariant::UInt);
+ arg.beginMap(QMetaType::Int, QMetaType::UInt);
arg.beginMapEntry();
arg << 1 << 2U;
arg.endMapEntry();
@@ -782,9 +769,9 @@ void tst_QDBusMarshall::sendBasic()
qPrintable(reply.errorName() + ": " + reply.errorMessage()));
//qDebug() << reply;
- QCOMPARE(reply.arguments().count(), msg.arguments().count());
+ QCOMPARE(reply.arguments().size(), msg.arguments().size());
QTEST(reply.signature(), "sig");
- for (int i = 0; i < reply.arguments().count(); ++i) {
+ for (int i = 0; i < reply.arguments().size(); ++i) {
QVERIFY(compare(reply.arguments().at(i), msg.arguments().at(i)));
//printf("\n! %s\n* %s\n", qPrintable(qDBusArgumentToString(reply.arguments().at(i))), qPrintable(stringResult));
QCOMPARE(QDBusUtil::argumentToString(reply.arguments().at(i)), stringResult);
@@ -806,9 +793,9 @@ void tst_QDBusMarshall::sendVariant()
QDBusMessage reply = con.call(msg);
// qDebug() << reply;
- QCOMPARE(reply.arguments().count(), msg.arguments().count());
+ QCOMPARE(reply.arguments().size(), msg.arguments().size());
QCOMPARE(reply.signature(), QString("v"));
- for (int i = 0; i < reply.arguments().count(); ++i)
+ for (int i = 0; i < reply.arguments().size(); ++i)
QVERIFY(compare(reply.arguments().at(i), msg.arguments().at(i)));
}
@@ -972,12 +959,12 @@ void tst_QDBusMarshall::sendCallErrors_data()
<< "org.qtproject.QtDBus.Error.InvalidMember"
<< "Invalid method name: this isn't valid" << "";
- QTest::newRow("invalid-variant1") << serviceName << objectPath << interfaceName << "ping"
+ QTest::newRow("invalid-variant") << serviceName << objectPath << interfaceName << "ping"
<< (QVariantList() << QVariant())
<< "org.freedesktop.DBus.Error.Failed"
<< "Marshalling failed: Invalid QVariant passed in arguments"
<< "QDBusMarshaller: cannot add an invalid QVariant";
- QTest::newRow("invalid-variant1") << serviceName << objectPath << interfaceName << "ping"
+ QTest::newRow("invalid-qdbusvariant") << serviceName << objectPath << interfaceName << "ping"
<< (QVariantList() << QVariant::fromValue(QDBusVariant()))
<< "org.freedesktop.DBus.Error.Failed"
<< "Marshalling failed: Invalid QVariant passed in arguments"
@@ -987,7 +974,7 @@ void tst_QDBusMarshall::sendCallErrors_data()
<< (QVariantList() << QLocale::c())
<< "org.freedesktop.DBus.Error.Failed"
<< "Marshalling failed: Unregistered type QLocale passed in arguments"
- << "QDBusMarshaller: type `QLocale' (18) is not registered with D-BUS. Use qDBusRegisterMetaType to register it";
+ << "QDBusMarshaller: type 'QLocale' (18) is not registered with D-Bus. Use qDBusRegisterMetaType to register it";
// this type is known to the meta type system, but not registered with D-Bus
qRegisterMetaType<UnregisteredType>();
@@ -995,7 +982,7 @@ void tst_QDBusMarshall::sendCallErrors_data()
<< (QVariantList() << QVariant::fromValue(UnregisteredType()))
<< "org.freedesktop.DBus.Error.Failed"
<< "Marshalling failed: Unregistered type UnregisteredType passed in arguments"
- << QString("QDBusMarshaller: type `UnregisteredType' (%1) is not registered with D-BUS. Use qDBusRegisterMetaType to register it")
+ << QString("QDBusMarshaller: type 'UnregisteredType' (%1) is not registered with D-Bus. Use qDBusRegisterMetaType to register it")
.arg(qMetaTypeId<UnregisteredType>());
QTest::newRow("invalid-object-path-arg") << serviceName << objectPath << interfaceName << "ping"
@@ -1092,12 +1079,12 @@ typedef QScopedPointer<DBusConnection, DisconnectRawDBus> ScopedDBusConnection;
typedef QScopedPointer<DBusMessage, UnrefDBusMessage> ScopedDBusMessage;
typedef QScopedPointer<DBusPendingCall, UnrefDBusPendingCall> ScopedDBusPendingCall;
-template <typename T> struct SetResetValue
+template <typename T, typename T2 = T> struct SetResetValue
{
- const T oldValue;
+ const T2 oldValue;
T &value;
public:
- SetResetValue(T &v, T newValue) : oldValue(v), value(v)
+ SetResetValue(T &v, T2 newValue) : oldValue(v), value(v)
{
value = newValue;
}
@@ -1107,7 +1094,7 @@ public:
}
};
-// mostly the same as qdbusintegrator.cpp:connectionCapabilies
+// mostly the same as qdbusintegrator.cpp:connectionCapabilities
static bool canSendUnixFd(DBusConnection *connection)
{
typedef dbus_bool_t (*can_send_type_t)(DBusConnection *, int);
@@ -1144,8 +1131,8 @@ void tst_QDBusMarshall::receiveUnknownType()
// make sure this QDBusConnection won't handle Unix file descriptors
QAtomicInt &capabRef = QDBusConnectionPrivate::d(con)->capabilities;
- SetResetValue<QAtomicInt> resetter(capabRef,
- capabRef & ~QDBusConnection::UnixFileDescriptorPassing);
+ SetResetValue<QAtomicInt, int> resetter(capabRef,
+ capabRef & ~QDBusConnection::UnixFileDescriptorPassing);
if (qstrcmp(QTest::currentDataTag(), "in-call") == 0) {
// create a call back to us containing a file descriptor
@@ -1170,6 +1157,7 @@ void tst_QDBusMarshall::receiveUnknownType()
// now spin our event loop. We don't catch this call, so let's get the reply
QEventLoop loop;
QTimer::singleShot(200, &loop, SLOT(quit()));
+ QTest::ignoreMessage(QtWarningMsg, "QDBusConnection: couldn't handle call to theSlot, no slot matched");
loop.exec();
// now try to receive the reply
@@ -1230,7 +1218,7 @@ void tst_QDBusMarshall::receiveUnknownType()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
QCOMPARE(spy.list.size(), 1);
- QCOMPARE(spy.list.at(0).arguments().count(), 1);
+ QCOMPARE(spy.list.at(0).arguments().size(), 1);
QFETCH(int, receivedTypeId);
//qDebug() << spy.list.at(0).arguments().at(0).typeName();
QCOMPARE(spy.list.at(0).arguments().at(0).userType(), receivedTypeId);
@@ -1327,22 +1315,23 @@ void tst_QDBusMarshall::demarshallStrings_data()
// All primitive types demarshall to null string types
typedef QPair<QVariant, char> ValSigPair;
- const QList<ValSigPair> nullStringTypes
- = QList<ValSigPair>()
- << ValSigPair(QVariant::fromValue(QString()), 's')
- << ValSigPair(QVariant::fromValue(QDBusObjectPath()), 'o')
- << ValSigPair(QVariant::fromValue(QDBusSignature()), 'g');
- foreach (ValSigPair valSigPair, nullStringTypes) {
- QTest::newRow("bool(false)") << QVariant(false) << valSigPair.second << valSigPair.first;
- QTest::newRow("bool(true)") << QVariant(true) << valSigPair.second << valSigPair.first;
- QTest::newRow("byte") << QVariant::fromValue(uchar(1)) << valSigPair.second << valSigPair.first;
- QTest::newRow("int16") << QVariant::fromValue(short(2)) << valSigPair.second << valSigPair.first;
- QTest::newRow("uint16") << QVariant::fromValue(ushort(3)) << valSigPair.second << valSigPair.first;
- QTest::newRow("int") << QVariant(1) << valSigPair.second << valSigPair.first;
- QTest::newRow("uint") << QVariant(2U) << valSigPair.second << valSigPair.first;
- QTest::newRow("int64") << QVariant(Q_INT64_C(3)) << valSigPair.second << valSigPair.first;
- QTest::newRow("uint64") << QVariant(Q_UINT64_C(4)) << valSigPair.second << valSigPair.first;
- QTest::newRow("double") << QVariant(42.5) << valSigPair.second << valSigPair.first;
+ const QList<ValSigPair> nullStringTypes = {
+ ValSigPair(QVariant::fromValue(QString()), 's'),
+ ValSigPair(QVariant::fromValue(QDBusObjectPath()), 'o'),
+ ValSigPair(QVariant::fromValue(QDBusSignature()), 'g')
+ };
+ for (const auto &[v, charSymbol] : nullStringTypes) {
+ const char *name = v.typeName();
+ QTest::addRow("bool(false)-%s", name) << QVariant(false) << charSymbol << v;
+ QTest::addRow("bool(true)-%s", name) << QVariant(true) << charSymbol << v;
+ QTest::addRow("byte-%s", name) << QVariant::fromValue(uchar(1)) << charSymbol << v;
+ QTest::addRow("int16-%s", name) << QVariant::fromValue(short(2)) << charSymbol << v;
+ QTest::addRow("uint16-%s", name) << QVariant::fromValue(ushort(3)) << charSymbol << v;
+ QTest::addRow("int-%s", name) << QVariant(1) << charSymbol << v;
+ QTest::addRow("uint-%s", name) << QVariant(2U) << charSymbol << v;
+ QTest::addRow("int64-%s", name) << QVariant(Q_INT64_C(3)) << charSymbol << v;
+ QTest::addRow("uint64-%s", name) << QVariant(Q_UINT64_C(4)) << charSymbol << v;
+ QTest::addRow("double-%s", name) << QVariant(42.5) << charSymbol << v;
}
// String types should demarshall to each other. This is a regression test
diff --git a/tests/auto/dbus/qdbusmetaobject/CMakeLists.txt b/tests/auto/dbus/qdbusmetaobject/CMakeLists.txt
index dec7ce5b27..2107d334e0 100644
--- a/tests/auto/dbus/qdbusmetaobject/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusmetaobject/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdbusmetaobject.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusmetaobject Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusmetaobject LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusmetaobject
SOURCES
tst_qdbusmetaobject.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBusPrivate
)
diff --git a/tests/auto/dbus/qdbusmetaobject/tst_qdbusmetaobject.cpp b/tests/auto/dbus/qdbusmetaobject/tst_qdbusmetaobject.cpp
index 3743a8ad07..898667d5d5 100644
--- a/tests/auto/dbus/qdbusmetaobject/tst_qdbusmetaobject.cpp
+++ b/tests/auto/dbus/qdbusmetaobject/tst_qdbusmetaobject.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 <QTest>
#include <QCoreApplication>
diff --git a/tests/auto/dbus/qdbusmetatype/CMakeLists.txt b/tests/auto/dbus/qdbusmetatype/CMakeLists.txt
index cd2295d831..5a1ba189fc 100644
--- a/tests/auto/dbus/qdbusmetatype/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusmetatype/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdbusmetatype.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusmetatype Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusmetatype LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusmetatype
SOURCES
tst_qdbusmetatype.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusmetatype/tst_qdbusmetatype.cpp b/tests/auto/dbus/qdbusmetatype/tst_qdbusmetatype.cpp
index 6735bdaf80..be9a240fd5 100644
--- a/tests/auto/dbus/qdbusmetatype/tst_qdbusmetatype.cpp
+++ b/tests/auto/dbus/qdbusmetatype/tst_qdbusmetatype.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 <QTest>
#include <QCoreApplication>
@@ -270,6 +245,15 @@ void tst_QDBusMetaType::initTestCase()
qDBusRegisterMetaType<QList<Struct3> >();
qDBusRegisterMetaType<QList<Struct4> >();
+#ifdef Q_CC_GNU_ONLY
+ // GCC has a defect/extension (depending on your point of view) that allows
+ // a template class with defaulted template parameters to match a Template
+ // Template Parameter (TTP) with fewer template arguments. The call below
+ // tries to use the template<template <typename> class Container, ...>
+ // template functions qdbusargument.h
+ qDBusRegisterMetaType<std::vector<Struct1> >();
+#endif
+
qDBusRegisterMetaType<Invalid0>();
qDBusRegisterMetaType<Invalid1>();
qDBusRegisterMetaType<Invalid2>();
@@ -330,6 +314,9 @@ void tst_QDBusMetaType::dynamicTypes_data()
QTest::newRow("Struct1") << qMetaTypeId<Struct1>() << "(s)";
QTest::newRow("QList<Struct1>") << qMetaTypeId<QList<Struct1> >() << "a(s)";
+#ifdef Q_CC_GNU_ONLY
+ QTest::newRow("std::vector<Struct1>") << qMetaTypeId<std::vector<Struct1> >() << "a(s)";
+#endif
QTest::newRow("Struct2") << qMetaTypeId<Struct2>() << "(sos)";
QTest::newRow("QList<Struct2>") << qMetaTypeId<QList<Struct2>>() << "a(sos)";
@@ -387,21 +374,21 @@ void tst_QDBusMetaType::invalidTypes()
{
// same test
if (qstrcmp(QTest::currentDataTag(), "Invalid0") == 0)
- QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type `Invalid0' produces invalid D-BUS signature `<empty>' (Did you forget to call beginStructure() ?)");
+ QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type 'Invalid0' produces invalid D-Bus signature '<empty>' (Did you forget to call beginStructure() ?)");
else if (qstrcmp(QTest::currentDataTag(), "Invalid1") == 0)
- QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type `Invalid1' attempts to redefine basic D-BUS type 's' (QString) (Did you forget to call beginStructure() ?)");
+ QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type 'Invalid1' attempts to redefine basic D-Bus type 's' (QString) (Did you forget to call beginStructure() ?)");
else if (qstrcmp(QTest::currentDataTag(), "Invalid2") == 0)
- QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type `Invalid2' attempts to redefine basic D-BUS type 'o' (QDBusObjectPath) (Did you forget to call beginStructure() ?)");
+ QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type 'Invalid2' attempts to redefine basic D-Bus type 'o' (QDBusObjectPath) (Did you forget to call beginStructure() ?)");
else if (qstrcmp(QTest::currentDataTag(), "Invalid3") == 0)
- QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type `Invalid3' attempts to redefine basic D-BUS type 'as' (QStringList) (Did you forget to call beginStructure() ?)");
+ QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type 'Invalid3' attempts to redefine basic D-Bus type 'as' (QStringList) (Did you forget to call beginStructure() ?)");
else if (qstrcmp(QTest::currentDataTag(), "Invalid4") == 0)
- QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type `Invalid4' attempts to redefine basic D-BUS type 'ay' (QByteArray) (Did you forget to call beginStructure() ?)");
+ QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type 'Invalid4' attempts to redefine basic D-Bus type 'ay' (QByteArray) (Did you forget to call beginStructure() ?)");
else if (qstrcmp(QTest::currentDataTag(), "Invalid5") == 0)
- QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type `Invalid5' produces invalid D-BUS signature `ii' (Did you forget to call beginStructure() ?)");
+ QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type 'Invalid5' produces invalid D-Bus signature 'ii' (Did you forget to call beginStructure() ?)");
else if (qstrcmp(QTest::currentDataTag(), "Invalid7") == 0)
- QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type `Invalid7' produces invalid D-BUS signature `()' (Did you forget to call beginStructure() ?)");
+ QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type 'Invalid7' produces invalid D-Bus signature '()' (Did you forget to call beginStructure() ?)");
else if (qstrcmp(QTest::currentDataTag(), "QList<Invalid0>") == 0)
- QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type `QList<Invalid0>' produces invalid D-BUS signature `a' (Did you forget to call beginStructure() ?)");
+ QTest::ignoreMessage(QtWarningMsg, "QDBusMarshaller: type 'QList<Invalid0>' produces invalid D-Bus signature 'a' (Did you forget to call beginStructure() ?)");
staticTypes();
staticTypes(); // run twice: the error messages should be printed once only
diff --git a/tests/auto/dbus/qdbuspendingcall/CMakeLists.txt b/tests/auto/dbus/qdbuspendingcall/CMakeLists.txt
index 0f80718a6e..4493d2364f 100644
--- a/tests/auto/dbus/qdbuspendingcall/CMakeLists.txt
+++ b/tests/auto/dbus/qdbuspendingcall/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdbuspendingcall.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbuspendingcall Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbuspendingcall LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbuspendingcall
SOURCES
tst_qdbuspendingcall.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbuspendingcall/tst_qdbuspendingcall.cpp b/tests/auto/dbus/qdbuspendingcall/tst_qdbuspendingcall.cpp
index 0698c4591f..f901c7a536 100644
--- a/tests/auto/dbus/qdbuspendingcall/tst_qdbuspendingcall.cpp
+++ b/tests/auto/dbus/qdbuspendingcall/tst_qdbuspendingcall.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QTestEventLoop>
@@ -182,7 +157,7 @@ void tst_QDBusPendingCall::waitForFinished()
QCOMPARE(reply.signature(), QString("as"));
const QVariantList args = ac.reply().arguments();
- QCOMPARE(args.count(), 1);
+ QCOMPARE(args.size(), 1);
const QVariant &arg = args.at(0);
QCOMPARE(arg.userType(), QMetaType::QStringList);
diff --git a/tests/auto/dbus/qdbuspendingreply/CMakeLists.txt b/tests/auto/dbus/qdbuspendingreply/CMakeLists.txt
index aea3c185e4..52e11b3dbd 100644
--- a/tests/auto/dbus/qdbuspendingreply/CMakeLists.txt
+++ b/tests/auto/dbus/qdbuspendingreply/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdbuspendingreply.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbuspendingreply Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbuspendingreply LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbuspendingreply
SOURCES
tst_qdbuspendingreply.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbuspendingreply/tst_qdbuspendingreply.cpp b/tests/auto/dbus/qdbuspendingreply/tst_qdbuspendingreply.cpp
index 21563799d4..da25f768d0 100644
--- a/tests/auto/dbus/qdbuspendingreply/tst_qdbuspendingreply.cpp
+++ b/tests/auto/dbus/qdbuspendingreply/tst_qdbuspendingreply.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 <QTest>
#include <QObject>
diff --git a/tests/auto/dbus/qdbusreply/CMakeLists.txt b/tests/auto/dbus/qdbusreply/CMakeLists.txt
index 2de7d0cb21..6427d92d7c 100644
--- a/tests/auto/dbus/qdbusreply/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusreply/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdbusreply.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusreply Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusreply LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusreply
SOURCES
tst_qdbusreply.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusreply/tst_qdbusreply.cpp b/tests/auto/dbus/qdbusreply/tst_qdbusreply.cpp
index 0d217dae69..e05da43019 100644
--- a/tests/auto/dbus/qdbusreply/tst_qdbusreply.cpp
+++ b/tests/auto/dbus/qdbusreply/tst_qdbusreply.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 <QTest>
#include <QDebug>
diff --git a/tests/auto/dbus/qdbusservicewatcher/CMakeLists.txt b/tests/auto/dbus/qdbusservicewatcher/CMakeLists.txt
index 326d072815..48144cd353 100644
--- a/tests/auto/dbus/qdbusservicewatcher/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusservicewatcher/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qdbusservicewatcher.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusservicewatcher Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusservicewatcher LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusservicewatcher
SOURCES
tst_qdbusservicewatcher.cpp
diff --git a/tests/auto/dbus/qdbusservicewatcher/tst_qdbusservicewatcher.cpp b/tests/auto/dbus/qdbusservicewatcher/tst_qdbusservicewatcher.cpp
index 3758824a9e..741c50217f 100644
--- a/tests/auto/dbus/qdbusservicewatcher/tst_qdbusservicewatcher.cpp
+++ b/tests/auto/dbus/qdbusservicewatcher/tst_qdbusservicewatcher.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtTest/private/qpropertytesthelper_p.h>
@@ -124,12 +99,12 @@ void tst_QDBusServiceWatcher::watchForCreation()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spyR.count(), 1);
+ QCOMPARE(spyR.size(), 1);
QCOMPARE(spyR.at(0).at(0).toString(), registeredName);
- QCOMPARE(spyU.count(), 0);
+ QCOMPARE(spyU.size(), 0);
- QCOMPARE(spyO.count(), 1);
+ QCOMPARE(spyO.size(), 1);
QCOMPARE(spyO.at(0).at(0).toString(), registeredName);
QVERIFY(spyO.at(0).at(1).toString().isEmpty());
QCOMPARE(spyO.at(0).at(2).toString(), con.baseService());
@@ -147,12 +122,12 @@ void tst_QDBusServiceWatcher::watchForCreation()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spyR.count(), 1);
+ QCOMPARE(spyR.size(), 1);
QCOMPARE(spyR.at(0).at(0).toString(), registeredName);
- QCOMPARE(spyU.count(), 0);
+ QCOMPARE(spyU.size(), 0);
- QCOMPARE(spyO.count(), 1);
+ QCOMPARE(spyO.size(), 1);
QCOMPARE(spyO.at(0).at(0).toString(), registeredName);
QVERIFY(spyO.at(0).at(1).toString().isEmpty());
QCOMPARE(spyO.at(0).at(2).toString(), con.baseService());
@@ -188,12 +163,12 @@ void tst_QDBusServiceWatcher::watchForDisappearance()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spyR.count(), 0);
+ QCOMPARE(spyR.size(), 0);
- QCOMPARE(spyU.count(), 1);
+ QCOMPARE(spyU.size(), 1);
QCOMPARE(spyU.at(0).at(0).toString(), registeredName);
- QCOMPARE(spyO.count(), 1);
+ QCOMPARE(spyO.size(), 1);
QCOMPARE(spyO.at(0).at(0).toString(), registeredName);
QCOMPARE(spyO.at(0).at(1).toString(), con.baseService());
QVERIFY(spyO.at(0).at(2).toString().isEmpty());
@@ -222,12 +197,12 @@ void tst_QDBusServiceWatcher::watchForDisappearanceUniqueConnection()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spyR.count(), 0);
+ QCOMPARE(spyR.size(), 0);
- QCOMPARE(spyU.count(), 1);
+ QCOMPARE(spyU.size(), 1);
QCOMPARE(spyU.at(0).at(0).toString(), watchedName);
- QCOMPARE(spyO.count(), 1);
+ QCOMPARE(spyO.size(), 1);
QCOMPARE(spyO.at(0).at(0).toString(), watchedName);
QCOMPARE(spyO.at(0).at(1).toString(), watchedName);
QVERIFY(spyO.at(0).at(2).toString().isEmpty());
@@ -259,12 +234,12 @@ void tst_QDBusServiceWatcher::watchForOwnerChange()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spyR.count(), 1);
+ QCOMPARE(spyR.size(), 1);
QCOMPARE(spyR.at(0).at(0).toString(), registeredName);
- QCOMPARE(spyU.count(), 0);
+ QCOMPARE(spyU.size(), 0);
- QCOMPARE(spyO.count(), 1);
+ QCOMPARE(spyO.size(), 1);
QCOMPARE(spyO.at(0).at(0).toString(), registeredName);
QVERIFY(spyO.at(0).at(1).toString().isEmpty());
QCOMPARE(spyO.at(0).at(2).toString(), con.baseService());
@@ -282,13 +257,13 @@ void tst_QDBusServiceWatcher::watchForOwnerChange()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spyR.count(), 1);
+ QCOMPARE(spyR.size(), 1);
QCOMPARE(spyR.at(0).at(0).toString(), registeredName);
- QCOMPARE(spyU.count(), 1);
+ QCOMPARE(spyU.size(), 1);
QCOMPARE(spyU.at(0).at(0).toString(), registeredName);
- QCOMPARE(spyO.count(), 2);
+ QCOMPARE(spyO.size(), 2);
QCOMPARE(spyO.at(0).at(0).toString(), registeredName);
QCOMPARE(spyO.at(0).at(1).toString(), con.baseService());
QVERIFY(spyO.at(0).at(2).toString().isEmpty());
@@ -323,12 +298,12 @@ void tst_QDBusServiceWatcher::modeChange()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spyR.count(), 1);
+ QCOMPARE(spyR.size(), 1);
QCOMPARE(spyR.at(0).at(0).toString(), registeredName);
- QCOMPARE(spyU.count(), 0);
+ QCOMPARE(spyU.size(), 0);
- QCOMPARE(spyO.count(), 1);
+ QCOMPARE(spyO.size(), 1);
QCOMPARE(spyO.at(0).at(0).toString(), registeredName);
QVERIFY(spyO.at(0).at(1).toString().isEmpty());
QCOMPARE(spyO.at(0).at(2).toString(), con.baseService());
@@ -346,12 +321,12 @@ void tst_QDBusServiceWatcher::modeChange()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spyR.count(), 0);
+ QCOMPARE(spyR.size(), 0);
- QCOMPARE(spyU.count(), 1);
+ QCOMPARE(spyU.size(), 1);
QCOMPARE(spyU.at(0).at(0).toString(), registeredName);
- QCOMPARE(spyO.count(), 1);
+ QCOMPARE(spyO.size(), 1);
QCOMPARE(spyO.at(0).at(0).toString(), registeredName);
QCOMPARE(spyO.at(0).at(1).toString(), con.baseService());
QVERIFY(spyO.at(0).at(2).toString().isEmpty());
@@ -402,9 +377,9 @@ void tst_QDBusServiceWatcher::setConnection()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spyR.count(), 1);
+ QCOMPARE(spyR.size(), 1);
QCOMPARE(spyR.at(0).at(0).toString(), serviceName);
- QCOMPARE(spyU.count(), 0);
+ QCOMPARE(spyU.size(), 0);
// is the system bus available?
if (!QDBusConnection::systemBus().isConnected())
@@ -425,9 +400,9 @@ void tst_QDBusServiceWatcher::setConnection()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spyR.count(), 0);
+ QCOMPARE(spyR.size(), 0);
- QCOMPARE(spyU.count(), 1);
+ QCOMPARE(spyU.size(), 1);
QCOMPARE(spyU.at(0).at(0).toString(), watchedName);
}
diff --git a/tests/auto/dbus/qdbusthreading/CMakeLists.txt b/tests/auto/dbus/qdbusthreading/CMakeLists.txt
index c4f75ab06e..807e401a02 100644
--- a/tests/auto/dbus/qdbusthreading/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusthreading/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdbusthreading.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusthreading Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusthreading LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusthreading
SOURCES
tst_qdbusthreading.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/auto/dbus/qdbusthreading/tst_qdbusthreading.cpp b/tests/auto/dbus/qdbusthreading/tst_qdbusthreading.cpp
index 3e1ec4242b..cccf00fd6b 100644
--- a/tests/auto/dbus/qdbusthreading/tst_qdbusthreading.cpp
+++ b/tests/auto/dbus/qdbusthreading/tst_qdbusthreading.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 <QTest>
#include <QTestEventLoop>
diff --git a/tests/auto/dbus/qdbustype/CMakeLists.txt b/tests/auto/dbus/qdbustype/CMakeLists.txt
index 3bf0dea697..1a4e75f61a 100644
--- a/tests/auto/dbus/qdbustype/CMakeLists.txt
+++ b/tests/auto/dbus/qdbustype/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qdbustype.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbustype Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbustype LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbustype
SOURCES
tst_qdbustype.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::DBusPrivate
)
@@ -18,7 +25,7 @@ qt_internal_add_test(tst_qdbustype
qt_internal_extend_target(tst_qdbustype CONDITION QT_FEATURE_dbus_linked
DEFINES
QT_LINKED_LIBDBUS
- PUBLIC_LIBRARIES
+ LIBRARIES
dbus-1
)
diff --git a/tests/auto/dbus/qdbustype/tst_qdbustype.cpp b/tests/auto/dbus/qdbustype/tst_qdbustype.cpp
index de48210b26..f4ad4cb77a 100644
--- a/tests/auto/dbus/qdbustype/tst_qdbustype.cpp
+++ b/tests/auto/dbus/qdbustype/tst_qdbustype.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the FOO 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/QCoreApplication>
@@ -187,7 +162,6 @@ static void addNakedDictEntry()
void tst_QDBusType::isValidFixedType_data()
{
addColumns();
- addFixedTypes();
addBasicTypes(Invalid);
addVariant(Invalid);
addInvalidSingleLetterTypes();
@@ -198,7 +172,7 @@ void tst_QDBusType::isValidFixedType()
QFETCH(QString, data);
QFETCH(bool, result);
QFETCH(bool, isValid);
- QVERIFY2(data.length() == 1, "Test is malformed, this function must test only one-letter types");
+ QVERIFY2(data.size() == 1, "Test is malformed, this function must test only one-letter types");
QVERIFY(isValid || (!isValid && !result));
int type = data.at(0).unicode();
@@ -220,7 +194,7 @@ void tst_QDBusType::isValidBasicType()
QFETCH(QString, data);
QFETCH(bool, result);
QFETCH(bool, isValid);
- QVERIFY2(data.length() == 1, "Test is malformed, this function must test only one-letter types");
+ QVERIFY2(data.size() == 1, "Test is malformed, this function must test only one-letter types");
QVERIFY(isValid || (!isValid && !result));
int type = data.at(0).unicode();
diff --git a/tests/auto/dbus/qdbusxmlparser/CMakeLists.txt b/tests/auto/dbus/qdbusxmlparser/CMakeLists.txt
index bbb874dc61..6d92443213 100644
--- a/tests/auto/dbus/qdbusxmlparser/CMakeLists.txt
+++ b/tests/auto/dbus/qdbusxmlparser/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qdbusxmlparser.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusxmlparser Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusxmlparser LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusxmlparser
SOURCES
tst_qdbusxmlparser.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::DBusPrivate
Qt::Xml
diff --git a/tests/auto/dbus/qdbusxmlparser/tst_qdbusxmlparser.cpp b/tests/auto/dbus/qdbusxmlparser/tst_qdbusxmlparser.cpp
index e935934fa1..7f1c4e933c 100644
--- a/tests/auto/dbus/qdbusxmlparser/tst_qdbusxmlparser.cpp
+++ b/tests/auto/dbus/qdbusxmlparser/tst_qdbusxmlparser.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 <QCoreApplication>
#include <QDomDocument>
@@ -57,10 +32,18 @@ private slots:
void properties();
};
+static void addAnnotation(QDBusIntrospection::Annotations &annotations, const QString &name,
+ const QString &value)
+{
+ annotations.insert(
+ name,
+ QDBusIntrospection::Annotation{ QDBusIntrospection::SourceLocation{}, name, value });
+}
+
void tst_QDBusXmlParser::initTestCase()
{
- // Always initialize the hash seed to 0 to get reliable test results
- qSetGlobalQHashSeed(0);
+ // Always initialize the hash seed with a known value to get reliable test results
+ QHashSeed::setDeterministicGlobalSeed();
}
void tst_QDBusXmlParser::parsing_data()
@@ -125,21 +108,21 @@ void tst_QDBusXmlParser::parsing_data()
void tst_QDBusXmlParser::parsing_common(const QString &xmlData)
{
- QDBusIntrospection::Object obj =
+ const QDBusIntrospection::Object obj =
QDBusIntrospection::parseObject(xmlData, "local.testing", "/");
QFETCH(int, interfaceCount);
QFETCH(int, objectCount);
QFETCH(int, annotationCount);
QFETCH(QStringList, introspection);
- QCOMPARE(obj.interfaces.count(), interfaceCount);
- QCOMPARE(obj.childObjects.count(), objectCount);
- QCOMPARE(QDBusIntrospection::parseInterface(xmlData).annotations.count(), annotationCount);
+ QCOMPARE(obj.interfaces.size(), interfaceCount);
+ QCOMPARE(obj.childObjects.size(), objectCount);
+ QCOMPARE(QDBusIntrospection::parseInterface(xmlData).annotations.size(), annotationCount);
QDBusIntrospection::Interfaces ifaces = QDBusIntrospection::parseInterfaces(xmlData);
// also verify the naming
int i = 0;
- foreach (QString name, obj.interfaces) {
+ for (const QString &name : obj.interfaces) {
const QString expectedName = QString("iface.iface%1").arg(i+1);
QCOMPARE(name, expectedName);
@@ -149,7 +132,7 @@ void tst_QDBusXmlParser::parsing_common(const QString &xmlData)
}
i = 0;
- foreach (QString name, obj.childObjects)
+ for (const QString &name : obj.childObjects)
QCOMPARE(name, QString("obj%1").arg(++i));
}
@@ -216,7 +199,7 @@ void tst_QDBusXmlParser::methods_data()
// add a third, with annotations
method.name = "Baz";
- method.annotations.insert("foo.testing", "nothing to see here");
+ addAnnotation(method.annotations, "foo.testing", "nothing to see here");
map << method;
QTest::newRow("method-with-annotation") <<
"<method name=\"Foo\"/>"
@@ -315,7 +298,7 @@ void tst_QDBusXmlParser::methods_data()
method = QDBusIntrospection::Method();
method.inputArgs << arg("a{sv}", "variantMap") << arg("u", "index");
method.outputArgs << arg("s", "key") << arg("v", "value");
- method.annotations.insert("foo.equivalent", "QVariantMap");
+ addAnnotation(method.annotations, "foo.equivalent", "QVariantMap");
method.name = "Method2";
map << method;
@@ -352,7 +335,7 @@ void tst_QDBusXmlParser::methods()
QFETCH(MethodMap, methodMap);
MethodMap parsedMap = iface.methods;
- QCOMPARE(parsedMap.count(), methodMap.count());
+ QCOMPARE(parsedMap.size(), methodMap.size());
QCOMPARE(parsedMap, methodMap);
}
@@ -384,7 +367,7 @@ void tst_QDBusXmlParser::signals__data()
// add a third, with annotations
signal.name = "Baz";
- signal.annotations.insert("foo.testing", "nothing to see here");
+ addAnnotation(signal.annotations, "foo.testing", "nothing to see here");
map << signal;
QTest::newRow("signal-with-annotation") <<
"<signal name=\"Foo\"/>"
@@ -433,7 +416,7 @@ void tst_QDBusXmlParser::signals__data()
// with annotation "foo.equivalent":"QVariantMap"
signal = QDBusIntrospection::Signal();
signal.outputArgs << arg("s", "key") << arg("v", "value");
- signal.annotations.insert("foo.equivalent", "QVariantMap");
+ addAnnotation(signal.annotations, "foo.equivalent", "QVariantMap");
signal.name = "Signal2";
map << signal;
@@ -466,7 +449,7 @@ void tst_QDBusXmlParser::signals_()
QFETCH(SignalMap, signalMap);
SignalMap parsedMap = iface.signals_;
- QCOMPARE(signalMap.count(), parsedMap.count());
+ QCOMPARE(signalMap.size(), parsedMap.size());
QCOMPARE(signalMap, parsedMap);
}
@@ -517,8 +500,8 @@ void tst_QDBusXmlParser::properties_data()
prop.name = "baz";
prop.type = "as";
prop.access = QDBusIntrospection::Property::Write;
- prop.annotations.insert("foo.annotation", "Hello, World");
- prop.annotations.insert("foo.annotation2", "Goodbye, World");
+ addAnnotation(prop.annotations, "foo.annotation", "Hello, World");
+ addAnnotation(prop.annotations, "foo.annotation2", "Goodbye, World");
map << prop;
QTest::newRow("complex") <<
"<property access=\"read\" type=\"i\" name=\"bar\"/>"
@@ -556,7 +539,7 @@ void tst_QDBusXmlParser::properties()
QFETCH(PropertyMap, propertyMap);
PropertyMap parsedMap = iface.properties;
- QCOMPARE(propertyMap.count(), parsedMap.count());
+ QCOMPARE(propertyMap.size(), parsedMap.size());
QCOMPARE(propertyMap, parsedMap);
}
diff --git a/tests/auto/gui/CMakeLists.txt b/tests/auto/gui/CMakeLists.txt
index 7ba124952d..b0fb8891f5 100644
--- a/tests/auto/gui/CMakeLists.txt
+++ b/tests/auto/gui/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from gui.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(kernel)
if(NOT UIKIT)
diff --git a/tests/auto/gui/image/CMakeLists.txt b/tests/auto/gui/image/CMakeLists.txt
index 27916d0409..9cc6d4d2bf 100644
--- a/tests/auto/gui/image/CMakeLists.txt
+++ b/tests/auto/gui/image/CMakeLists.txt
@@ -1,6 +1,7 @@
-# Generated from image.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# QTBUG-87669 # special case
+# QTBUG-87669
if(TARGET Qt::Network AND NOT ANDROID)
add_subdirectory(qimagereader)
endif()
@@ -17,7 +18,8 @@ add_subdirectory(qiconhighdpi)
if(QT_FEATURE_private_tests)
add_subdirectory(qpixmapcache)
endif()
-# QTBUG-87669 # special case
+
+# QTBUG-87669
if(NOT ANDROID)
add_subdirectory(qicon)
endif()
diff --git a/tests/auto/gui/image/qicoimageformat/CMakeLists.txt b/tests/auto/gui/image/qicoimageformat/CMakeLists.txt
index 704c51a6be..17ec68df4e 100644
--- a/tests/auto/gui/image/qicoimageformat/CMakeLists.txt
+++ b/tests/auto/gui/image/qicoimageformat/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qicoimageformat.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qicoimageformat Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qicoimageformat LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -13,37 +20,8 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qicoimageformat
SOURCES
tst_qicoimageformat.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
TESTDATA ${test_data}
)
-## Scopes:
-#####################################################################
-
-if(ANDROID)
- # Resources:
- set(qicoimageformat_resource_files
- "icons/invalid/35floppy.ico"
- "icons/valid/35FLOPPY.ICO"
- "icons/valid/AddPerfMon.ico"
- "icons/valid/App.ico"
- "icons/valid/Obj_N2_Internal_Mem.ico"
- "icons/valid/Qt.ico"
- "icons/valid/Status_Play.ico"
- "icons/valid/TIMER01.ICO"
- "icons/valid/WORLD.ico"
- "icons/valid/WORLDH.ico"
- "icons/valid/abcardWindow.ico"
- "icons/valid/semitransparent.ico"
- "icons/valid/trolltechlogo_tiny.ico"
- "icons/valid/yellow.cur"
- )
-
- qt_internal_add_resource(tst_qicoimageformat "qicoimageformat"
- PREFIX
- "/"
- FILES
- ${qicoimageformat_resource_files}
- )
-endif()
diff --git a/tests/auto/gui/image/qicoimageformat/icons/masked/24bpp.ico b/tests/auto/gui/image/qicoimageformat/icons/masked/24bpp.ico
new file mode 100644
index 0000000000..7e9cfa2414
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/masked/24bpp.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/masked/24bpp.png b/tests/auto/gui/image/qicoimageformat/icons/masked/24bpp.png
new file mode 100644
index 0000000000..f0a19c05e3
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/masked/24bpp.png
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/masked/32bpp.ico b/tests/auto/gui/image/qicoimageformat/icons/masked/32bpp.ico
new file mode 100644
index 0000000000..a22248d76a
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/masked/32bpp.ico
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/icons/masked/32bpp.png b/tests/auto/gui/image/qicoimageformat/icons/masked/32bpp.png
new file mode 100644
index 0000000000..a6ceac73fa
--- /dev/null
+++ b/tests/auto/gui/image/qicoimageformat/icons/masked/32bpp.png
Binary files differ
diff --git a/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp b/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp
index 37d5f4998c..136f56facf 100644
--- a/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.cpp
+++ b/tests/auto/gui/image/qicoimageformat/tst_qicoimageformat.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 <QTest>
#include <QtGui>
#include <QtCore>
@@ -52,6 +27,8 @@ private slots:
void pngCompression();
void write_data();
void write();
+ void icoMask_data();
+ void icoMask();
private:
QString m_IconPath;
@@ -344,6 +321,33 @@ void tst_QIcoImageFormat::write()
}
}
+void tst_QIcoImageFormat::icoMask_data()
+{
+ QTest::addColumn<QString>("inFile");
+ QTest::addColumn<QString>("outFile");
+
+ QTest::newRow("24bpp") << "masked/24bpp.ico" << "masked/24bpp.png";
+ QTest::newRow("32bpp") << "masked/32bpp.ico" << "masked/32bpp.png";
+}
+
+void tst_QIcoImageFormat::icoMask()
+{
+ QFETCH(QString, inFile);
+ QFETCH(QString, outFile);
+
+ QImage inImage;
+ QImageReader inReader(m_IconPath + QLatin1Char('/') + inFile);
+ inReader.read(&inImage);
+
+ QImage outImage;
+ QImageReader outReader(m_IconPath + QLatin1Char('/') + outFile);
+ outReader.read(&outImage);
+ outImage.setColorSpace(inImage.colorSpace());
+ outImage = outImage.convertToFormat(inImage.format());
+
+ QCOMPARE(inImage, outImage);
+}
+
QTEST_MAIN(tst_QIcoImageFormat)
#include "tst_qicoimageformat.moc"
diff --git a/tests/auto/gui/image/qicon/CMakeLists.txt b/tests/auto/gui/image/qicon/CMakeLists.txt
index 5f6b139205..c693c559cc 100644
--- a/tests/auto/gui/image/qicon/CMakeLists.txt
+++ b/tests/auto/gui/image/qicon/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qicon.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qicon Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qicon LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -33,7 +40,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qicon
SOURCES
tst_qicon.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
TESTDATA ${test_data}
)
@@ -55,6 +62,10 @@ set(tst_qicon_resource_files
"./icons/themeparent/index.theme"
"./icons/themeparent/scalable/actions/address-book-new.svg"
"./icons/themeparent/scalable/actions/appointment-new.svg"
+ "./icons/fallbacktheme/index.theme"
+ "./icons/fallbacktheme/16x16/edit-cut.png"
+ "./icons/hicolor/index.theme"
+ "./icons/hicolor/16x16/hicolor-icon.png"
"./second_icons/testtheme/32x32/actions/appointment-new.png"
"./styles/commonstyle/images/standardbutton-open-128.png"
"./styles/commonstyle/images/standardbutton-open-16.png"
@@ -91,6 +102,6 @@ qt_internal_add_resource(tst_qicon "qmake_immediate"
#####################################################################
qt_internal_extend_target(tst_qicon CONDITION TARGET Qt::Widgets
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
)
diff --git a/tests/auto/gui/image/qicon/icons/fallbacktheme/16x16/edit-cut.png b/tests/auto/gui/image/qicon/icons/fallbacktheme/16x16/edit-cut.png
new file mode 100644
index 0000000000..661ef1ad03
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/fallbacktheme/16x16/edit-cut.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/fallbacktheme/index.theme b/tests/auto/gui/image/qicon/icons/fallbacktheme/index.theme
new file mode 100644
index 0000000000..809d296669
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/fallbacktheme/index.theme
@@ -0,0 +1,8 @@
+[Icon Theme]
+Name=fallbacktheme
+
+Directories=16x16
+
+[16x16]
+Size=16
+Type=Fixed
diff --git a/tests/auto/gui/image/qicon/icons/hicolor/16x16/hicolor-icon.png b/tests/auto/gui/image/qicon/icons/hicolor/16x16/hicolor-icon.png
new file mode 100644
index 0000000000..661ef1ad03
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/hicolor/16x16/hicolor-icon.png
Binary files differ
diff --git a/tests/auto/gui/image/qicon/icons/hicolor/index.theme b/tests/auto/gui/image/qicon/icons/hicolor/index.theme
new file mode 100644
index 0000000000..e5e5cef9b1
--- /dev/null
+++ b/tests/auto/gui/image/qicon/icons/hicolor/index.theme
@@ -0,0 +1,11 @@
+[Icon Theme]
+Name=hicolor
+
+# Provide a minimal hicolor theme, so that our hicolor fallback
+# lookup during testing will find that theme on all systems.
+
+Directories=16x16
+
+[16x16]
+Size=16
+Type=Fixed
diff --git a/tests/auto/gui/image/qicon/icons/testtheme/index.theme b/tests/auto/gui/image/qicon/icons/testtheme/index.theme
index e18736ab43..53664b14b2 100644
--- a/tests/auto/gui/image/qicon/icons/testtheme/index.theme
+++ b/tests/auto/gui/image/qicon/icons/testtheme/index.theme
@@ -1,7 +1,7 @@
[Icon Theme]
_Name=Test
_Comment=Test Theme
-Inherits=crystalsvg, themeparent
+Inherits=themeparent
Example=x-directory-normal
# KDE Specific Stuff
diff --git a/tests/auto/gui/image/qicon/icons/themeparent/index.theme b/tests/auto/gui/image/qicon/icons/themeparent/index.theme
index e536a0bf2f..96267addd6 100644
--- a/tests/auto/gui/image/qicon/icons/themeparent/index.theme
+++ b/tests/auto/gui/image/qicon/icons/themeparent/index.theme
@@ -1,7 +1,6 @@
[Icon Theme]
_Name=Test
_Comment=Test Theme
-Inherits=gnome,crystalsvg
Example=x-directory-normal
# KDE Specific Stuff
diff --git a/tests/auto/gui/image/qicon/tst_qicon.cpp b/tests/auto/gui/image/qicon/tst_qicon.cpp
index 3363f86809..99b4a0589e 100644
--- a/tests/auto/gui/image/qicon/tst_qicon.cpp
+++ b/tests/auto/gui/image/qicon/tst_qicon.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 <QTest>
#include <QImageReader>
@@ -66,6 +41,7 @@ private slots:
void streamAvailableSizes();
void fromTheme();
void fromThemeCache();
+ void fromThemeConstant();
#ifndef QT_NO_WIDGETS
void task184901_badCache();
@@ -216,21 +192,21 @@ void tst_QIcon::isNull() {
// test string constructor with empty string
QIcon iconEmptyString = QIcon(QString());
QVERIFY(iconEmptyString.isNull());
- QVERIFY(!iconEmptyString.actualSize(QSize(32, 32)).isValid());;
+ QVERIFY(!iconEmptyString.actualSize(QSize(32, 32)).isValid());
// test string constructor with non-existing file
QIcon iconNoFile = QIcon("imagedoesnotexist");
- QVERIFY(!iconNoFile.isNull());
+ QVERIFY(iconNoFile.isNull());
QVERIFY(!iconNoFile.actualSize(QSize(32, 32)).isValid());
// test string constructor with non-existing file with suffix
QIcon iconNoFileSuffix = QIcon("imagedoesnotexist.png");
- QVERIFY(!iconNoFileSuffix.isNull());
+ QVERIFY(iconNoFileSuffix.isNull());
QVERIFY(!iconNoFileSuffix.actualSize(QSize(32, 32)).isValid());
// test string constructor with existing file but unsupported format
QIcon iconUnsupportedFormat = QIcon(m_sourceFileName);
- QVERIFY(!iconUnsupportedFormat.isNull());
+ QVERIFY(iconUnsupportedFormat.isNull());
QVERIFY(!iconUnsupportedFormat.actualSize(QSize(32, 32)).isValid());
// test string constructor with existing file and supported format
@@ -577,6 +553,10 @@ void tst_QIcon::availableSizes()
void tst_QIcon::name()
{
+ const auto reset = qScopeGuard([]{
+ QIcon::setThemeName({});
+ QIcon::setThemeSearchPaths({});
+ });
{
// No name if icon does not come from a theme
QIcon icon(":/image.png");
@@ -654,6 +634,7 @@ void tst_QIcon::task184901_badCache()
void tst_QIcon::fromTheme()
{
+ const bool abIconFromPlatform = !QIcon::fromTheme("address-book-new").isNull();
QString firstSearchPath = QLatin1String(":/icons");
QString secondSearchPath = QLatin1String(":/second_icons");
QIcon::setThemeSearchPaths(QStringList() << firstSearchPath << secondSearchPath);
@@ -742,14 +723,44 @@ void tst_QIcon::fromTheme()
QCOMPARE(i.availableSizes(), abIcon.availableSizes());
}
+ // Setting or changing the fallback theme should invalidate earlier lookups.
+ // We can only test this if the system doesn't provide an icon, because once
+ // we got a valid icon, it will be cached, and even if we proxy to a different
+ // engine when a fallback theme is set, the cacheKey of the icon will be the
+ // same.
+ const QIcon editCut = QIcon::fromTheme("edit-cut");
+ if (editCut.isNull()) {
+ QIcon::setFallbackThemeName("fallbacktheme");
+ QVERIFY(!QIcon::fromTheme("edit-cut").isNull());
+ }
+
// Make sure setting the theme name clears the state
QIcon::setThemeName("");
abIcon = QIcon::fromTheme("address-book-new");
- QVERIFY(abIcon.isNull());
+ QCOMPARE_NE(abIcon.isNull(), abIconFromPlatform);
+
+ // Test fallback icon behavior for empty theme names.
+ // Can only reliably test this on systems that don't have a
+ // named system icon theme.
+ QIcon::setThemeName(""); // Reset user-theme
+ if (QIcon::themeName().isEmpty()) {
+ // Test icon from fallback theme even when theme name is empty
+ QIcon::setFallbackThemeName("fallbacktheme");
+ QVERIFY(!QIcon::fromTheme("edit-cut").isNull());
+
+ // Test icon from fallback path even when theme name is empty
+ fallbackIcon = QIcon::fromTheme("red");
+ QVERIFY(!fallbackIcon.isNull());
+ QVERIFY(QIcon::hasThemeIcon("red"));
+ QCOMPARE(fallbackIcon.availableSizes().size(), 1);
+ }
// Passing a full path to fromTheme is not very useful, but should work anyway
QIcon fullPathIcon = QIcon::fromTheme(m_pngImageFileName);
QVERIFY(!fullPathIcon.isNull());
+
+ // Restore to system fallback theme
+ QIcon::setFallbackThemeName("");
}
static inline QString findGtkUpdateIconCache()
@@ -810,7 +821,7 @@ void tst_QIcon::fromThemeCache()
QTest::qWait(1000); // wait enough to have a different modification time in seconds
QVERIFY(QFile(QStringLiteral(":/styles/commonstyle/images/standardbutton-save-16.png"))
.copy(dir.path() + QLatin1String("/testcache/16x16/actions/button-save.png")));
- QVERIFY(QFileInfo(cacheName).lastModified() < QFileInfo(dir.path() + QLatin1String("/testcache/16x16/actions")).lastModified());
+ QVERIFY(QFileInfo(cacheName).lastModified(QTimeZone::UTC) < QFileInfo(dir.path() + QLatin1String("/testcache/16x16/actions")).lastModified(QTimeZone::UTC));
QIcon::setThemeSearchPaths(QStringList() << dir.path()); // reload themes
QVERIFY(!QIcon::fromTheme("button-open").isNull());
@@ -831,13 +842,18 @@ void tst_QIcon::fromThemeCache()
QCOMPARE(process.exitStatus(), QProcess::NormalExit);
QCOMPARE(process.exitCode(), 0);
#endif // QT_CONFIG(process)
- QVERIFY(QFileInfo(cacheName).lastModified() >= QFileInfo(dir.path() + QLatin1String("/testcache/16x16/actions")).lastModified());
+ QVERIFY(QFileInfo(cacheName).lastModified(QTimeZone::UTC) >= QFileInfo(dir.path() + QLatin1String("/testcache/16x16/actions")).lastModified(QTimeZone::UTC));
QIcon::setThemeSearchPaths(QStringList() << dir.path()); // reload themes
QVERIFY(!QIcon::fromTheme("button-open").isNull());
QVERIFY(!QIcon::fromTheme("button-open-fallback").isNull());
QVERIFY(QIcon::fromTheme("notexist-fallback").isNull());
}
+void tst_QIcon::fromThemeConstant()
+{
+ const QIcon icon = QIcon::fromTheme(QIcon::ThemeIcon::EditCut);
+}
+
void tst_QIcon::task223279_inconsistentAddFile()
{
QIcon icon1;
diff --git a/tests/auto/gui/image/qiconhighdpi/CMakeLists.txt b/tests/auto/gui/image/qiconhighdpi/CMakeLists.txt
index 989cf1f44d..f0ccb97c8a 100644
--- a/tests/auto/gui/image/qiconhighdpi/CMakeLists.txt
+++ b/tests/auto/gui/image/qiconhighdpi/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qiconhighdpi.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qiconhighdpi Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qiconhighdpi LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -13,7 +20,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qiconhighdpi
SOURCES
tst_qiconhighdpi.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
TESTDATA ${test_data}
)
diff --git a/tests/auto/gui/image/qiconhighdpi/tst_qiconhighdpi.cpp b/tests/auto/gui/image/qiconhighdpi/tst_qiconhighdpi.cpp
index 3282776ee6..34f0132865 100644
--- a/tests/auto/gui/image/qiconhighdpi/tst_qiconhighdpi.cpp
+++ b/tests/auto/gui/image/qiconhighdpi/tst_qiconhighdpi.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QTest>
#include <qicon.h>
@@ -42,6 +17,7 @@ private slots:
void addPixmap_data();
void addPixmap();
void ninePatch();
+ void preferUpscale();
};
tst_QIconHighDpi::tst_QIconHighDpi()
@@ -236,6 +212,23 @@ void tst_QIconHighDpi::ninePatch()
}
}
+void tst_QIconHighDpi::preferUpscale()
+{
+ QIcon icon;
+
+ // manual pixmap adder for full control of devicePixelRatio
+ auto addPixmapWithDpr = [&icon](const QString &path, qreal dpr) {
+ QImage image(path);
+ image.setDevicePixelRatio(dpr);
+ icon.addPixmap(QPixmap::fromImage(image));
+ };
+
+ addPixmapWithDpr(":/icons/testtheme/22x22/actions/appointment-new.png", 1);
+ addPixmapWithDpr(":/icons/testtheme/22x22@2/actions/appointment-new.png", 2);
+
+ QCOMPARE(icon.pixmap(QSize(22, 22), 1.25f).devicePixelRatio(), 1.25f);
+}
+
int main(int argc, char *argv[])
{
QGuiApplication app(argc, argv);
diff --git a/tests/auto/gui/image/qimage/CMakeLists.txt b/tests/auto/gui/image/qimage/CMakeLists.txt
index 4c95b32e48..8d0842026d 100644
--- a/tests/auto/gui/image/qimage/CMakeLists.txt
+++ b/tests/auto/gui/image/qimage/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qimage.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qimage Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qimage LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -13,54 +20,20 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qimage
SOURCES
tst_qimage.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
TESTDATA ${test_data}
)
-## Scopes:
-#####################################################################
-
-if(ANDROID)
- # Resources:
- set(qimage_resource_files
- "images/image.bmp"
- "images/image.gif"
- "images/image.ico"
- "images/image.jpg"
- "images/image.pbm"
- "images/image.pgm"
- "images/image.png"
- "images/image.ppm"
- "images/image.xbm"
- "images/image.xpm"
- "images/jpeg_exif_orientation_value_1.jpg"
- "images/jpeg_exif_orientation_value_2.jpg"
- "images/jpeg_exif_orientation_value_3.jpg"
- "images/jpeg_exif_orientation_value_4.jpg"
- "images/jpeg_exif_orientation_value_5.jpg"
- "images/jpeg_exif_orientation_value_6.jpg"
- "images/jpeg_exif_orientation_value_7.jpg"
- "images/jpeg_exif_orientation_value_8.jpg"
- )
-
- qt_internal_add_resource(tst_qimage "qimage"
- PREFIX
- "/"
- FILES
- ${qimage_resource_files}
- )
-endif()
-
qt_internal_extend_target(tst_qimage CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
gdi32
user32
)
qt_internal_extend_target(tst_qimage CONDITION APPLE
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWCoreGraphics}
)
diff --git a/tests/auto/gui/image/qimage/images/CGATS001Compat-v2-micro.icc b/tests/auto/gui/image/qimage/images/CGATS001Compat-v2-micro.icc
new file mode 100644
index 0000000000..b5a73495bf
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/CGATS001Compat-v2-micro.icc
Binary files differ
diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp
index 6f9e0641ac..1d0cdfcc4e 100644
--- a/tests/auto/gui/image/qimage/tst_qimage.cpp
+++ b/tests/auto/gui/image/qimage/tst_qimage.cpp
@@ -1,38 +1,15 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QBuffer>
+#include <QMatrix4x4>
#include <qimage.h>
#include <qimagereader.h>
#include <qlist.h>
+#include <qset.h>
#include <qtransform.h>
#include <qrandom.h>
#include <stdio.h>
@@ -91,6 +68,7 @@ private slots:
void rotate_data();
void rotate();
+ void rotateBigImage();
void copy();
@@ -130,6 +108,8 @@ private slots:
void smoothScaleAlpha();
void smoothScaleFormats_data();
void smoothScaleFormats();
+ void smoothScaleNoConversion_data();
+ void smoothScaleNoConversion();
void transformed_data();
void transformed();
@@ -189,6 +169,11 @@ private slots:
void largeInplaceRgbConversion_data();
void largeInplaceRgbConversion();
+ void colorSpaceRgbConversion_data();
+ void colorSpaceRgbConversion();
+ void colorSpaceCmykConversion_data();
+ void colorSpaceCmykConversion();
+
void deepCopyWhenPaintingActive();
void scaled_QTBUG19157();
@@ -250,12 +235,18 @@ private slots:
void largeFillScale();
void largeRasterScale();
+ void metadataChangeWithReadOnlyPixels();
+ void scaleIndexed();
+
#if defined(Q_OS_WIN)
void toWinHBITMAP_data();
void toWinHBITMAP();
void fromMonoHBITMAP();
#endif // Q_OS_WIN
+ void tofromPremultipliedFormat_data();
+ void tofromPremultipliedFormat();
+
private:
const QString m_prefix;
};
@@ -335,7 +326,9 @@ static QLatin1String formatToString(QImage::Format format)
return QLatin1String("RGBA32FPx4");
case QImage::Format_RGBA32FPx4_Premultiplied:
return QLatin1String("RGBA32FPx4pm");
- default:
+ case QImage::Format_CMYK8888:
+ return QLatin1String("CMYK8888");
+ case QImage::NImageFormats:
break;
};
Q_UNREACHABLE();
@@ -1153,10 +1146,9 @@ void tst_QImage::rotate_data()
QTest::addColumn<QImage::Format>("format");
QTest::addColumn<int>("degrees");
- QList<int> degrees;
- degrees << 0 << 90 << 180 << 270;
+ constexpr int degrees[] = {0, 90, 180, 270};
- foreach (int d, degrees) {
+ for (int d : degrees) {
const QString dB = QString::number(d);
for (int i = QImage::Format_Indexed8; i < QImage::NImageFormats; i++) {
QImage::Format format = static_cast<QImage::Format>(i);
@@ -1234,6 +1226,23 @@ void tst_QImage::rotate()
QCOMPARE(original, dest);
}
+void tst_QImage::rotateBigImage()
+{
+ // QTBUG-105088
+ QImage big_image(3840, 2160, QImage::Format_ARGB32_Premultiplied);
+ QTransform t;
+ t.translate(big_image.width() / 2.0, big_image.height() / 2.0);
+ t.rotate(-89, Qt::YAxis, big_image.width());
+ t.translate(-big_image.width() / 2.0, -big_image.height() / 2.0);
+ QVERIFY(!big_image.transformed(t).isNull());
+
+ QMatrix4x4 m;
+ m.translate(big_image.width() / 2.0, big_image.height() / 2.0);
+ m.projectedRotate(89, 0, 1, 0, big_image.width());
+ m.translate(-big_image.width() / 2.0, -big_image.height() / 2.0);
+ QVERIFY(!big_image.transformed(m.toTransform()).isNull());
+}
+
void tst_QImage::copy()
{
// Task 99250
@@ -1505,6 +1514,8 @@ void tst_QImage::setPixelWithAlpha_data()
continue;
if (c == QImage::Format_Alpha8)
continue;
+ if (c == QImage::Format_CMYK8888)
+ continue;
QTest::newRow(qPrintable(formatToString(QImage::Format(c)))) << QImage::Format(c);
}
}
@@ -2062,6 +2073,24 @@ void tst_QImage::smoothScaleFormats()
QVERIFY(rotated.hasAlphaChannel());
}
+void tst_QImage::smoothScaleNoConversion_data()
+{
+ QTest::addColumn<QImage::Format>("format");
+ QTest::addRow("Mono") << QImage::Format_Mono;
+ QTest::addRow("MonoLSB") << QImage::Format_MonoLSB;
+ QTest::addRow("Indexed8") << QImage::Format_Indexed8;
+}
+
+void tst_QImage::smoothScaleNoConversion()
+{
+ QFETCH(QImage::Format, format);
+ QImage img(128, 128, format);
+ img.fill(1);
+ img.setColorTable(QList<QRgb>() << qRgba(255,0,0,255) << qRgba(0,0,0,0));
+ img = img.scaled(QSize(48, 48), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ QVERIFY(img.hasAlphaChannel());
+}
+
static int count(const QImage &img, int x, int y, int dx, int dy, QRgb pixel)
{
int i = 0;
@@ -2548,7 +2577,8 @@ void tst_QImage::rgbSwapped_data()
for (int i = QImage::Format_Indexed8; i < QImage::NImageFormats; ++i) {
if (i == QImage::Format_Alpha8
|| i == QImage::Format_Grayscale8
- || i == QImage::Format_Grayscale16) {
+ || i == QImage::Format_Grayscale16
+ || i == QImage::Format_CMYK8888) {
continue;
}
QTest::addRow("%s", formatToString(QImage::Format(i)).data()) << QImage::Format(i);
@@ -2642,20 +2672,20 @@ void tst_QImage::mirrored_data()
QTest::newRow("Format_Mono, horizontal+vertical") << QImage::Format_Mono << true << true << 16 << 16;
QTest::newRow("Format_MonoLSB, horizontal+vertical") << QImage::Format_MonoLSB << true << true << 16 << 16;
- QTest::newRow("Format_RGB32, vertical") << QImage::Format_RGB32 << true << false << 8 << 16;
- QTest::newRow("Format_ARGB32, vertical") << QImage::Format_ARGB32 << true << false << 16 << 8;
+ QTest::newRow("Format_RGB32, vertical, narrow") << QImage::Format_RGB32 << true << false << 8 << 16;
+ QTest::newRow("Format_ARGB32, vertical, short") << QImage::Format_ARGB32 << true << false << 16 << 8;
QTest::newRow("Format_Mono, vertical, non-aligned") << QImage::Format_Mono << true << false << 19 << 25;
QTest::newRow("Format_MonoLSB, vertical, non-aligned") << QImage::Format_MonoLSB << true << false << 19 << 25;
// Non-aligned horizontal 1-bit needs special handling so test this.
QTest::newRow("Format_Mono, horizontal, non-aligned") << QImage::Format_Mono << false << true << 13 << 17;
- QTest::newRow("Format_Mono, horizontal, non-aligned") << QImage::Format_Mono << false << true << 19 << 25;
- QTest::newRow("Format_Mono, horizontal+vertical, non-aligned") << QImage::Format_Mono << true << true << 25 << 47;
+ QTest::newRow("Format_Mono, horizontal, non-aligned, big") << QImage::Format_Mono << false << true << 19 << 25;
+ QTest::newRow("Format_Mono, horizontal+vertical, non-aligned, big") << QImage::Format_Mono << true << true << 25 << 47;
QTest::newRow("Format_Mono, horizontal+vertical, non-aligned") << QImage::Format_Mono << true << true << 21 << 16;
QTest::newRow("Format_MonoLSB, horizontal, non-aligned") << QImage::Format_MonoLSB << false << true << 13 << 17;
- QTest::newRow("Format_MonoLSB, horizontal, non-aligned") << QImage::Format_MonoLSB << false << true << 19 << 25;
- QTest::newRow("Format_MonoLSB, horizontal+vertical, non-aligned") << QImage::Format_MonoLSB << true << true << 25 << 47;
+ QTest::newRow("Format_MonoLSB, horizontal, non-aligned, big") << QImage::Format_MonoLSB << false << true << 19 << 25;
+ QTest::newRow("Format_MonoLSB, horizontal+vertical, non-aligned, big") << QImage::Format_MonoLSB << true << true << 25 << 47;
QTest::newRow("Format_MonoLSB, horizontal+vertical, non-aligned") << QImage::Format_MonoLSB << true << true << 21 << 16;
}
@@ -3030,13 +3060,15 @@ void tst_QImage::inplaceRgbConversion_data()
for (int i = QImage::Format_RGB32; i < QImage::NImageFormats; ++i) {
if (i == QImage::Format_Alpha8
|| i == QImage::Format_Grayscale8
- || i == QImage::Format_Grayscale16) {
+ || i == QImage::Format_Grayscale16
+ || i == QImage::Format_CMYK8888) {
continue;
}
for (int j = QImage::Format_RGB32; j < QImage::NImageFormats; ++j) {
if (j == QImage::Format_Alpha8
|| j == QImage::Format_Grayscale8
- || j == QImage::Format_Grayscale16) {
+ || j == QImage::Format_Grayscale16
+ || j == QImage::Format_CMYK8888) {
continue;
}
if (i == j)
@@ -3217,6 +3249,144 @@ void tst_QImage::largeInplaceRgbConversion()
}
}
+void tst_QImage::colorSpaceRgbConversion_data()
+{
+ QTest::addColumn<QImage::Format>("fromFormat");
+ QTest::addColumn<QImage::Format>("toFormat");
+
+ // The various possible code paths for color space conversions compatible with RGB color spaces:
+ QImage::Format formats[] = {
+ QImage::Format_RGB32,
+ QImage::Format_ARGB32,
+ QImage::Format_ARGB32_Premultiplied,
+ QImage::Format_RGBX64,
+ QImage::Format_RGBA64,
+ QImage::Format_RGBA64_Premultiplied,
+ QImage::Format_RGBX32FPx4,
+ QImage::Format_RGBA32FPx4,
+ QImage::Format_RGBA32FPx4_Premultiplied,
+ QImage::Format_Grayscale8,
+ QImage::Format_Grayscale16,
+ };
+
+ for (auto fromFormat : formats) {
+ const QLatin1String formatI = formatToString(fromFormat);
+ for (auto toFormat : formats) {
+ QTest::addRow("%s -> %s", formatI.data(), formatToString(toFormat).data())
+ << fromFormat << toFormat;
+ }
+ }
+}
+
+void tst_QImage::colorSpaceRgbConversion()
+{
+ // Test that all color space conversions work
+ QFETCH(QImage::Format, fromFormat);
+ QFETCH(QImage::Format, toFormat);
+
+ bool srcGrayscale = fromFormat == QImage::Format_Grayscale8 || fromFormat == QImage::Format_Grayscale16;
+ bool dstGrayscale = toFormat == QImage::Format_Grayscale8 || toFormat == QImage::Format_Grayscale16;
+
+ QImage image(16, 16, fromFormat);
+ image.setColorSpace(QColorSpace::SRgb);
+
+ for (int i = 0; i < image.height(); ++i) {
+ for (int j = 0; j < image.width(); ++j) {
+ if (srcGrayscale || dstGrayscale)
+ image.setPixel(j, i, qRgb((i + j) * 8, (i + j) * 8, (i + j) * 8));
+ else
+ image.setPixel(j, i, qRgb(j * 16, i * 16, (i + j) * 8));
+ }
+ }
+
+ QImage imageConverted = image.convertedToColorSpace(QColorSpace::DisplayP3, toFormat);
+ QCOMPARE(imageConverted.format(), toFormat);
+ QCOMPARE(imageConverted.size(), image.size());
+ if (dstGrayscale) {
+ int gray = 0;
+ for (int x = 0; x < image.width(); ++x) {
+ int newGray = qGray(imageConverted.pixel(x, 6));
+ QCOMPARE_GE(newGray, gray);
+ gray = newGray;
+ }
+ } else {
+ int red = 0;
+ int blue = 0;
+ for (int x = 0; x < image.width(); ++x) {
+ int newRed = qRed(imageConverted.pixel(x, 5));
+ int newBlue = qBlue(imageConverted.pixel(x, 7));
+ QCOMPARE_GE(newBlue, blue);
+ QCOMPARE_GE(newRed, red);
+ blue = newBlue;
+ red = newRed;
+ }
+ }
+}
+
+
+void tst_QImage::colorSpaceCmykConversion_data()
+{
+ QTest::addColumn<QImage::Format>("toFormat");
+
+ QImage::Format formats[] = {
+ QImage::Format_RGB32,
+ QImage::Format_ARGB32,
+ QImage::Format_ARGB32_Premultiplied,
+ QImage::Format_RGBX64,
+ QImage::Format_RGBA64,
+ QImage::Format_RGBA64_Premultiplied,
+ QImage::Format_RGBX32FPx4,
+ QImage::Format_RGBA32FPx4,
+ QImage::Format_RGBA32FPx4_Premultiplied,
+ QImage::Format_Grayscale8,
+ QImage::Format_Grayscale16,
+ };
+
+ for (auto toFormat : formats)
+ QTest::addRow("CMYK8888 -> %s", formatToString(toFormat).data()) << toFormat;
+}
+
+void tst_QImage::colorSpaceCmykConversion()
+{
+ QFETCH(QImage::Format, toFormat);
+
+ bool dstGrayscale = toFormat == QImage::Format_Grayscale8 || toFormat == QImage::Format_Grayscale16;
+
+ QImage image(16, 16, QImage::Format_CMYK8888);
+ QFile iccProfile(m_prefix +"CGATS001Compat-v2-micro.icc");
+ iccProfile.open(QIODevice::ReadOnly);
+ image.setColorSpace(QColorSpace::fromIccProfile(iccProfile.readAll()));
+ QVERIFY(image.colorSpace().isValid());
+
+ for (int i = 0; i < image.height(); ++i) {
+ for (int j = 0; j < image.width(); ++j) {
+ if (dstGrayscale)
+ image.setPixel(j, i, qRgb((i + j) * 8, (i + j) * 8, (i + j) * 8));
+ else
+ image.setPixel(j, i, qRgb(j * 16, i * 16, (i + j) * 8));
+ }
+ }
+
+ QImage imageConverted = image.convertedToColorSpace(QColorSpace::SRgb, toFormat);
+ QCOMPARE(imageConverted.format(), toFormat);
+ QCOMPARE(imageConverted.size(), image.size());
+ if (dstGrayscale) {
+ int gray = 0;
+ for (int x = 0; x < image.width(); ++x) {
+ int newGray = qGray(imageConverted.pixel(x, 6));
+ QCOMPARE_GE(newGray, gray);
+ gray = newGray;
+ }
+ } else {
+ int red = 0;
+ for (int x = 0; x < image.width(); ++x) {
+ int newRed = qRed(imageConverted.pixel(x, 5));
+ QCOMPARE_GE(newRed, red);
+ red = newRed;
+ }
+ }
+}
+
void tst_QImage::deepCopyWhenPaintingActive()
{
QImage image(64, 64, QImage::Format_ARGB32_Premultiplied);
@@ -3325,7 +3495,8 @@ void tst_QImage::invertPixelsRGB_data()
for (int i = QImage::Format_RGB32; i < QImage::NImageFormats; ++i) {
if (i == QImage::Format_Alpha8
|| i == QImage::Format_Grayscale8
- || i == QImage::Format_Grayscale16) {
+ || i == QImage::Format_Grayscale16
+ || i == QImage::Format_CMYK8888) {
continue;
}
QTest::addRow("%s", formatToString(QImage::Format(i)).data()) << QImage::Format(i);
@@ -3457,6 +3628,9 @@ void tst_QImage::exifInvalidData()
void tst_QImage::exifReadComments()
{
+#ifdef QT_NO_IMAGEIO_TEXT_LOADING
+ QSKIP("Reading text from image file is configured off");
+#endif
QImage image;
QVERIFY(image.load(m_prefix + "jpeg_exif_utf8_comment.jpg"));
QVERIFY(!image.isNull());
@@ -3850,7 +4024,7 @@ void tst_QImage::reinterpretAsFormat_data()
QTest::newRow("rgb32 -> argb32") << QImage::Format_RGB32 << QImage::Format_ARGB32 << QColor(Qt::cyan) << QColor(Qt::cyan);
QTest::newRow("argb32pm -> rgb32") << QImage::Format_ARGB32_Premultiplied << QImage::Format_RGB32 << QColor(Qt::transparent) << QColor(Qt::black);
QTest::newRow("argb32 -> rgb32") << QImage::Format_ARGB32 << QImage::Format_RGB32 << QColor(255, 0, 0, 127) << QColor(255, 0, 0);
- QTest::newRow("argb32pm -> rgb32") << QImage::Format_ARGB32_Premultiplied << QImage::Format_RGB32 << QColor(255, 0, 0, 127) << QColor(127, 0, 0);
+ QTest::newRow("argb32pm (red) -> rgb32") << QImage::Format_ARGB32_Premultiplied << QImage::Format_RGB32 << QColor(255, 0, 0, 127) << QColor(127, 0, 0);
}
void tst_QImage::reinterpretAsFormat()
@@ -3945,7 +4119,10 @@ void tst_QImage::hugeQImage()
#if Q_PROCESSOR_WORDSIZE < 8
QSKIP("Test only makes sense on 64-bit machines");
#else
- QImage image(25000, 25000, QImage::Format_RGB32);
+ std::unique_ptr<char[]> enough(new (std::nothrow) char[qsizetype(25000)*25000*4]);
+ if (!enough)
+ QSKIP("Could not allocate enough memory");
+ QImage image((uchar*)enough.get(), 25000, 25000, QImage::Format_RGB32);
QVERIFY(!image.isNull());
QCOMPARE(image.height(), 25000);
@@ -4059,6 +4236,34 @@ void tst_QImage::largeRasterScale()
// image.save("largeRasterScale.png", "PNG");
}
+void tst_QImage::metadataChangeWithReadOnlyPixels()
+{
+ const QRgb data[3] = { qRgb(255, 0, 0), qRgb(0, 255, 0), qRgb(0, 0, 255) };
+ QImage image((const uchar *)data, 3, 1, QImage::Format_RGB32);
+
+ QCOMPARE(image.constBits(), (const uchar *)data);
+ image.setDotsPerMeterX(100);
+ QCOMPARE(image.constBits(), (const uchar *)data);
+
+ QImage image2 = image;
+ QCOMPARE(image2.constBits(), (const uchar *)data);
+ image2.setDotsPerMeterX(200);
+ // Pixels and metadata has the same sharing mechanism, so a change of a shared
+ // image metadata forces pixel detach (remove this sub-test if that ever changes).
+ QVERIFY(image2.constBits() != (const uchar *)data);
+ QCOMPARE(image.constBits(), (const uchar *)data);
+}
+
+void tst_QImage::scaleIndexed()
+{
+ QImage image(10, 10, QImage::Format_Indexed8);
+ image.setColor(0, qRgb(0,0,0));
+ image.setColor(1, qRgb(1,1,1));
+ image.fill(1);
+ image.setDevicePixelRatio(2);
+ QImage image2 = image.scaled(20, 20, Qt::KeepAspectRatio, Qt::SmoothTransformation); // do not crash
+}
+
#if defined(Q_OS_WIN)
static inline QColor COLORREFToQColor(COLORREF cr)
@@ -4171,5 +4376,27 @@ void tst_QImage::fromMonoHBITMAP() // QTBUG-72343, corruption for mono bitmaps
#endif // Q_OS_WIN
+void tst_QImage::tofromPremultipliedFormat_data()
+{
+ QTest::addColumn<QImage::Format>("unpremul");
+ QTest::addColumn<QImage::Format>("premul");
+
+ // Test all available formats with both premultiplied and unpremultiplied versions
+ QTest::newRow("argb32") << QImage::Format_ARGB32 << QImage::Format_ARGB32_Premultiplied;
+ QTest::newRow("rgba8888") << QImage::Format_RGBA8888 << QImage::Format_RGBA8888_Premultiplied;
+ QTest::newRow("rgba64") << QImage::Format_RGBA64 << QImage::Format_RGBA64_Premultiplied;
+ QTest::newRow("rgba16fpx4") << QImage::Format_RGBA16FPx4 << QImage::Format_RGBA16FPx4_Premultiplied;
+ QTest::newRow("rgba32fpx4") << QImage::Format_RGBA32FPx4 << QImage::Format_RGBA32FPx4_Premultiplied;
+}
+
+void tst_QImage::tofromPremultipliedFormat()
+{
+ QFETCH(QImage::Format, unpremul);
+ QFETCH(QImage::Format, premul);
+
+ QCOMPARE(qt_toPremultipliedFormat(unpremul), premul);
+ QCOMPARE(qt_toUnpremultipliedFormat(premul), unpremul);
+}
+
QTEST_GUILESS_MAIN(tst_QImage)
#include "tst_qimage.moc"
diff --git a/tests/auto/gui/image/qimageiohandler/CMakeLists.txt b/tests/auto/gui/image/qimageiohandler/CMakeLists.txt
index 4bbf2f5b01..9fbd9c9b9f 100644
--- a/tests/auto/gui/image/qimageiohandler/CMakeLists.txt
+++ b/tests/auto/gui/image/qimageiohandler/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qimageiohandler.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qimageiohandler Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qimageiohandler LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qimageiohandler
SOURCES
tst_qimageiohandler.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.cpp b/tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.cpp
index 9fa0e37cad..bd325e185c 100644
--- a/tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.cpp
+++ b/tests/auto/gui/image/qimageiohandler/tst_qimageiohandler.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 <QTest>
diff --git a/tests/auto/gui/image/qimagereader/BLACKLIST b/tests/auto/gui/image/qimagereader/BLACKLIST
new file mode 100644
index 0000000000..6422ff1dac
--- /dev/null
+++ b/tests/auto/gui/image/qimagereader/BLACKLIST
@@ -0,0 +1,8 @@
+[setClipRect:SVG: rect]
+wayland
+[setClipRect:SVGZ: rect]
+wayland
+[setScaledClipRect:SVG: rect]
+wayland
+[setScaledClipRect:SVGZ: rect]
+wayland
diff --git a/tests/auto/gui/image/qimagereader/CMakeLists.txt b/tests/auto/gui/image/qimagereader/CMakeLists.txt
index a0cda3bb73..2a14ca3c9c 100644
--- a/tests/auto/gui/image/qimagereader/CMakeLists.txt
+++ b/tests/auto/gui/image/qimagereader/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qimagereader.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qimagereader Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qimagereader LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -17,7 +24,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qimagereader
SOURCES
tst_qimagereader.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -42,24 +49,3 @@ qt_internal_add_resource(tst_qimagereader "qmake_immediate"
${qmake_immediate_resource_files}
)
-
-#### Keys ignored in scope 1:.:.:qimagereader.pro:<TRUE>:
-# MOC_DIR = "tmp"
-
-## Scopes:
-#####################################################################
-
-if(ANDROID)
- # Resources:
- set(android_testdata_resource_files
- "images/kollada-noext"
- "images/trans.gif"
- )
-
- qt_internal_add_resource(tst_qimagereader "android_testdata"
- PREFIX
- "/"
- FILES
- ${android_testdata_resource_files}
- )
-endif()
diff --git a/tests/auto/gui/image/qimagereader/images/image.pbm b/tests/auto/gui/image/qimagereader/images/image.pbm
index 67e5efa3e9..e529536ca4 100644
--- a/tests/auto/gui/image/qimagereader/images/image.pbm
+++ b/tests/auto/gui/image/qimagereader/images/image.pbm
@@ -1,8 +1,8 @@
P1
16 6
1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
-1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
-1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
-1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
-1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
-1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1
+10 00 00 00 01 00 00 01
+1000 0000 0100 0001
+100000000 1000001
+1000000001000001
+10 000 0000 10000 01
diff --git a/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp
index 3191f9f06b..96af8b4e9b 100644
--- a/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp
+++ b/tests/auto/gui/image/qimagereader/tst_qimagereader.cpp
@@ -1,31 +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 <QTest>
@@ -36,7 +10,7 @@
#include <QImageReader>
#include <QImageWriter>
#include <QPixmap>
-#include <QSet>
+#include <QScopeGuard>
#include <QTcpSocket>
#include <QTcpServer>
#include <QTimer>
@@ -88,12 +62,17 @@ private slots:
void setScaledSize_data();
void setScaledSize();
+ void setScaledSizeOneDimension_data();
+ void setScaledSizeOneDimension();
+
void setClipRect_data();
void setClipRect();
void setScaledClipRect_data();
void setScaledClipRect();
+ void setFormat();
+
void imageFormat_data();
void imageFormat();
@@ -324,25 +303,52 @@ void tst_QImageReader::jpegRgbCmyk()
QImage image1(prefix + QLatin1String("YCbCr_cmyk.jpg"));
QImage image2(prefix + QLatin1String("YCbCr_cmyk.png"));
- if (image1 != image2) {
- // first, do some obvious tests
- QCOMPARE(image1.height(), image2.height());
- QCOMPARE(image1.width(), image2.width());
- QCOMPARE(image1.format(), image2.format());
- QCOMPARE(image1.format(), QImage::Format_RGB32);
-
- // compare all the pixels with a slack of 3. This ignores rounding errors
- // in libjpeg/libpng, where some versions sacrifice accuracy for speed.
- for (int h = 0; h < image1.height(); ++h) {
- const uchar *s1 = image1.constScanLine(h);
- const uchar *s2 = image2.constScanLine(h);
- for (int w = 0; w < image1.width() * 4; ++w) {
- if (*s1 != *s2) {
- QVERIFY2(qAbs(*s1 - *s2) <= 3, qPrintable(QString("images differ in line %1, col %2 (image1: %3, image2: %4)").arg(h).arg(w).arg(*s1, 0, 16).arg(*s2, 0, 16)));
- }
- s1++;
- s2++;
- }
+ QVERIFY(!image1.isNull());
+ QVERIFY(!image2.isNull());
+
+ QCOMPARE(image1.height(), image2.height());
+ QCOMPARE(image1.width(), image2.width());
+
+ QCOMPARE(image1.format(), QImage::Format_CMYK8888);
+ QCOMPARE(image2.format(), QImage::Format_RGB32);
+
+ // compare all the pixels with a slack of 3. This ignores rounding errors
+ // in libjpeg/libpng, where some versions sacrifice accuracy for speed.
+ const auto fuzzyCompareColors = [](const QColor &c1, const QColor &c2) {
+ int c1rgba[4];
+ int c2rgba[4];
+
+ c1.getRgb(c1rgba + 0,
+ c1rgba + 1,
+ c1rgba + 2,
+ c1rgba + 3);
+
+ c2.getRgb(c2rgba + 0,
+ c2rgba + 1,
+ c2rgba + 2,
+ c2rgba + 3);
+
+ const auto fuzzyCompare = [](int a, int b) {
+ return qAbs(a - b) <= 3;
+ };
+
+ return fuzzyCompare(c1rgba[0], c2rgba[0]) &&
+ fuzzyCompare(c1rgba[1], c2rgba[1]) &&
+ fuzzyCompare(c1rgba[2], c2rgba[2]) &&
+ fuzzyCompare(c1rgba[3], c2rgba[3]);
+ };
+
+ for (int h = 0; h < image1.height(); ++h) {
+ const uchar *sl1 = image1.constScanLine(h);
+ const uchar *sl2 = image2.constScanLine(h);
+ for (int w = 0; w < image1.width(); ++w) {
+ const uchar *s1 = sl1 + w * 4;
+ const uchar *s2 = sl2 + w * 4;
+
+ QColor c1 = QColor::fromCmyk(s1[0], s1[1], s1[2], s1[3]);
+ QColor c2 = QColor::fromRgb(s2[2], s2[1], s2[0]);
+ QVERIFY2(fuzzyCompareColors(c1, c2),
+ qPrintable(QString("images differ in line %1, col %2").arg(h).arg(w)));
}
}
}
@@ -395,6 +401,60 @@ void tst_QImageReader::setScaledSize()
QCOMPARE(image.size(), newSize);
}
+void tst_QImageReader::setScaledSizeOneDimension_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QByteArray>("format");
+
+ QTest::newRow("PNG: kollada") << QString("kollada") << QByteArray("png");
+ QTest::newRow("JPEG: beavis") << QString("beavis") << QByteArray("jpeg");
+ QTest::newRow("GIF: earth") << QString("earth") << QByteArray("gif");
+ QTest::newRow("SVG: rect") << QString("rect") << QByteArray("svg");
+ QTest::newRow("BMP: colorful") << QString("colorful") << QByteArray("bmp");
+ QTest::newRow("XPM: marble") << QString("marble") << QByteArray("xpm");
+ QTest::newRow("PPM: teapot") << QString("teapot") << QByteArray("ppm");
+ QTest::newRow("XBM: gnus") << QString("gnus") << QByteArray("xbm");
+}
+
+void tst_QImageReader::setScaledSizeOneDimension()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QByteArray, format);
+
+ SKIP_IF_UNSUPPORTED(format);
+
+ const QSize originalSize = QImageReader(prefix + fileName).size();
+ QVERIFY(!originalSize.isEmpty());
+
+ auto testScaledSize = [&] (const QSize &scaledSize) {
+ QSize expectedSize = scaledSize;
+ if (scaledSize.width() <= 0)
+ expectedSize.setWidth(qRound(originalSize.width() *
+ (qreal(scaledSize.height()) / originalSize.height())));
+ else if (scaledSize.height() <= 0)
+ expectedSize.setHeight(qRound(originalSize.height() *
+ (qreal(scaledSize.width()) / originalSize.width())));
+
+ QImageReader reader(prefix + fileName);
+ reader.setScaledSize(scaledSize);
+ QImage image = reader.read();
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.size(), expectedSize);
+ };
+
+ // downscale
+ testScaledSize(QSize(originalSize.width() / 2, 0));
+ testScaledSize(QSize(originalSize.width() / 2, -1));
+ testScaledSize(QSize(0, originalSize.height() / 2));
+ testScaledSize(QSize(-1, originalSize.height() / 2));
+
+ // upscale
+ testScaledSize(QSize(originalSize.width() * 2, 0));
+ testScaledSize(QSize(originalSize.width() * 2, -1));
+ testScaledSize(QSize(0, originalSize.height() * 2));
+ testScaledSize(QSize(-1, originalSize.height() * 2));
+}
+
void tst_QImageReader::task255627_setNullScaledSize_data()
{
setScaledSize_data();
@@ -510,9 +570,38 @@ void tst_QImageReader::setScaledClipRect()
QImageReader originalReader(prefix + fileName);
originalReader.setScaledSize(QSize(300, 300));
QImage originalImage = originalReader.read();
+ if (format.contains("svg")) {
+ // rendering of subrect may yield slight rounding differences, truncate them away
+ image.convertTo(QImage::Format_RGB444);
+ originalImage.convertTo(QImage::Format_RGB444);
+ }
QCOMPARE(originalImage.copy(newRect), image);
}
+void tst_QImageReader::setFormat()
+{
+ QByteArray ppmImage = "P1 2 2\n1 0\n0 1";
+ QBuffer buf(&ppmImage);
+ QImageReader reader(&buf);
+
+ // read image in autodetected format
+ QCOMPARE(reader.size(), QSize(2,2));
+ buf.close();
+
+ // try reading with non-matching format, must not succeed
+ reader.setDecideFormatFromContent(false);
+ reader.setFormat("bmp");
+ reader.setDevice(&buf);
+ QCOMPARE(reader.size(), QSize());
+ buf.close();
+
+ // read with manually set matching format
+ reader.setFormat("ppm");
+ reader.setDevice(&buf);
+ QCOMPARE(reader.size(), QSize(2,2));
+ buf.close();
+}
+
void tst_QImageReader::imageFormat_data()
{
QTest::addColumn<QString>("fileName");
@@ -527,7 +616,7 @@ void tst_QImageReader::imageFormat_data()
QTest::newRow("ppm-4") << QString("test.ppm") << QByteArray("ppm") << QImage::Format_RGB32;
QTest::newRow("jpeg-1") << QString("beavis.jpg") << QByteArray("jpeg") << QImage::Format_Grayscale8;
- QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg") << QImage::Format_RGB32;
+ QTest::newRow("jpeg-2") << QString("YCbCr_cmyk.jpg") << QByteArray("jpeg") << QImage::Format_CMYK8888;
QTest::newRow("jpeg-3") << QString("YCbCr_rgb.jpg") << QByteArray("jpeg") << QImage::Format_RGB32;
QTest::newRow("gif-1") << QString("earth.gif") << QByteArray("gif") << QImage::Format_Invalid;
@@ -588,41 +677,31 @@ void tst_QImageReader::multiWordNamedColorXPM()
QCOMPARE(image.pixel(0, 2), qRgb(255, 250, 205)); // lemon chiffon
}
-void tst_QImageReader::supportedFormats()
+namespace {
+template <typename ForwardIterator>
+bool is_sorted_unique(ForwardIterator first, ForwardIterator last)
{
- QList<QByteArray> formats = QImageReader::supportedImageFormats();
- QList<QByteArray> sortedFormats = formats;
- std::sort(sortedFormats.begin(), sortedFormats.end());
-
- // check that the list is sorted
- QCOMPARE(formats, sortedFormats);
-
- QSet<QByteArray> formatSet;
- foreach (QByteArray format, formats)
- formatSet << format;
+ // a range is sorted with no dups iff each *i < *(i+1), so check that none are >=:
+ return std::adjacent_find(first, last, std::greater_equal<>{}) == last;
+}
+}
- // check that the list does not contain duplicates
- QCOMPARE(formatSet.size(), formats.size());
+void tst_QImageReader::supportedFormats()
+{
+ const QList<QByteArray> formats = QImageReader::supportedImageFormats();
+ auto printOnFailure = qScopeGuard([&] { qDebug() << formats; });
+ QVERIFY(is_sorted_unique(formats.begin(), formats.end()));
+ printOnFailure.dismiss();
}
void tst_QImageReader::supportedMimeTypes()
{
- QList<QByteArray> mimeTypes = QImageReader::supportedMimeTypes();
- QList<QByteArray> sortedMimeTypes = mimeTypes;
- std::sort(sortedMimeTypes.begin(), sortedMimeTypes.end());
-
- // check that the list is sorted
- QCOMPARE(mimeTypes, sortedMimeTypes);
-
- QSet<QByteArray> mimeTypeSet;
- foreach (QByteArray mimeType, mimeTypes)
- mimeTypeSet << mimeType;
-
+ const QList<QByteArray> mimeTypes = QImageReader::supportedMimeTypes();
+ auto printOnFailure = qScopeGuard([&] { qDebug() << mimeTypes; });
+ QVERIFY(is_sorted_unique(mimeTypes.begin(), mimeTypes.end()));
// check the list as a minimum contains image/bmp
- QVERIFY(mimeTypeSet.contains("image/bmp"));
-
- // check that the list does not contain duplicates
- QCOMPARE(mimeTypeSet.size(), mimeTypes.size());
+ QVERIFY(mimeTypes.contains("image/bmp"));
+ printOnFailure.dismiss();
}
void tst_QImageReader::setBackgroundColor_data()
@@ -667,7 +746,7 @@ void tst_QImageReader::supportsAnimation_data()
QTest::newRow("BMP: colorful") << QString("colorful.bmp") << false;
QTest::newRow("BMP: font") << QString("font.bmp") << false;
QTest::newRow("BMP: signed char") << QString("crash-signed-char.bmp") << false;
- QTest::newRow("BMP: test32bfv4") << QString("test32bfv4.bmp") << false;;
+ QTest::newRow("BMP: test32bfv4") << QString("test32bfv4.bmp") << false;
QTest::newRow("BMP: test32v5") << QString("test32v5.bmp") << false;
QTest::newRow("XPM: marble") << QString("marble.xpm") << false;
QTest::newRow("PNG: kollada") << QString("kollada.png") << false;
@@ -1617,43 +1696,56 @@ void tst_QImageReader::supportsOption_data()
QTest::addColumn<QIntList>("options");
QTest::newRow("png") << QString("black.png")
- << (QIntList() << QImageIOHandler::Gamma
- << QImageIOHandler::Description
- << QImageIOHandler::Quality
- << QImageIOHandler::CompressionRatio
- << QImageIOHandler::Size
- << QImageIOHandler::ScaledSize);
+ << QIntList{
+ QImageIOHandler::Gamma,
+ QImageIOHandler::Description,
+ QImageIOHandler::Quality,
+ QImageIOHandler::CompressionRatio,
+ QImageIOHandler::Size,
+ QImageIOHandler::ScaledSize,
+ QImageIOHandler::ImageFormat,
+ };
}
void tst_QImageReader::supportsOption()
{
QFETCH(QString, fileName);
- QFETCH(QIntList, options);
-
- QSet<QImageIOHandler::ImageOption> allOptions;
- allOptions << QImageIOHandler::Size
- << QImageIOHandler::ClipRect
- << QImageIOHandler::Description
- << QImageIOHandler::ScaledClipRect
- << QImageIOHandler::ScaledSize
- << QImageIOHandler::CompressionRatio
- << QImageIOHandler::Gamma
- << QImageIOHandler::Quality
- << QImageIOHandler::Name
- << QImageIOHandler::SubType
- << QImageIOHandler::IncrementalReading
- << QImageIOHandler::Endianness
- << QImageIOHandler::Animation
- << QImageIOHandler::BackgroundColor;
+ QFETCH(const QIntList, options);
QImageReader reader(prefix + fileName);
- for (int i = 0; i < options.size(); ++i) {
- QVERIFY(reader.supportsOption(QImageIOHandler::ImageOption(options.at(i))));
- allOptions.remove(QImageIOHandler::ImageOption(options.at(i)));
- }
- foreach (QImageIOHandler::ImageOption option, allOptions)
- QVERIFY(!reader.supportsOption(option));
+ for (int i = 0; ; ++i) {
+ // this switch ensures the compiler warns when we miss an enumerator [-Wswitch]
+ // do _not_ add a default case!
+ switch (const auto o = QImageIOHandler::ImageOption(i)) {
+ case QImageIOHandler::Size:
+ case QImageIOHandler::ClipRect:
+ case QImageIOHandler::Description:
+ case QImageIOHandler::ScaledClipRect:
+ case QImageIOHandler::ScaledSize:
+ case QImageIOHandler::CompressionRatio:
+ case QImageIOHandler::Gamma:
+ case QImageIOHandler::Quality:
+ case QImageIOHandler::Name:
+ case QImageIOHandler::SubType:
+ case QImageIOHandler::IncrementalReading:
+ case QImageIOHandler::Endianness:
+ case QImageIOHandler::Animation:
+ case QImageIOHandler::BackgroundColor:
+ case QImageIOHandler::ImageFormat:
+ case QImageIOHandler::SupportedSubTypes:
+ case QImageIOHandler::OptimizedWrite:
+ case QImageIOHandler::ProgressiveScanWrite:
+ case QImageIOHandler::ImageTransformation:
+ {
+ auto printOnFailure = qScopeGuard([&] { qDebug("failed at %d", i); });
+ QCOMPARE(reader.supportsOption(o), options.contains(i));
+ printOnFailure.dismiss();
+ continue; // ... as long as `i` represents a valid ImageOption value
+ }
+ }
+ break; // ... once `i` no longer represents a valid ImageOption value
+ }
}
void tst_QImageReader::autoDetectImageFormat()
@@ -1822,13 +1914,13 @@ void tst_QImageReader::testIgnoresFormatAndExtension()
SKIP_IF_UNSUPPORTED(expected.toLatin1());
- QList<QByteArray> formats = QImageReader::supportedImageFormats();
+ const QList<QByteArray> formats = QImageReader::supportedImageFormats();
QString fileNameBase = prefix + name + QLatin1Char('.');
QString tempPath = m_temporaryDir.path();
if (!tempPath.endsWith(QLatin1Char('/')))
tempPath += QLatin1Char('/');
- foreach (const QByteArray &f, formats) {
+ for (const QByteArray &f : formats) {
if (f == extension.toLocal8Bit())
continue;
@@ -1978,19 +2070,31 @@ void tst_QImageReader::preserveTexts_data()
for (int c = 0xa0; c <= 0xff; c++)
latin1set.append(QLatin1Char(c));
- QStringList fileNames;
- fileNames << QLatin1String(":/images/kollada.png")
- << QLatin1String(":/images/txts.jpg");
- foreach (const QString &fileName, fileNames) {
- QTest::newRow("Simple") << fileName << "simpletext";
- QTest::newRow("Whitespace") << fileName << " A text with whitespace ";
- QTest::newRow("Newline") << fileName << "A text\nwith newlines\n";
- QTest::newRow("Double newlines") << fileName << "A text\n\nwith double newlines\n\n";
- QTest::newRow("Long") << fileName << QString("A rather long text, at least after many repetitions. ").repeated(100);
- QTest::newRow("All Latin1 chars") << fileName << latin1set;
+ const QList<QLatin1StringView> fileNames{
+ QLatin1StringView(":/images/kollada.png"),
+ QLatin1StringView(":/images/txts.jpg")
+ // Common prefix of length 9 before file names: ":/images/", skipped below by + 9.
+ };
+ for (const auto &fileName : fileNames) {
+ QTest::addRow("Simple %s", fileName.data() + 9)
+ << QString(fileName) << "simpletext";
+ QTest::addRow("Whitespace %s", fileName.data() + 9)
+ << QString(fileName) << " A text with whitespace ";
+ QTest::addRow("Newline %s", fileName.data() + 9)
+ << QString(fileName) << "A text\nwith newlines\n";
+ QTest::addRow("Double newlines %s", fileName.data() + 9)
+ << QString(fileName) << "A text\n\nwith double newlines\n\n";
+ QTest::addRow("Long %s", fileName.data() + 9)
+ << QString(fileName)
+ << QString("A rather long text, at least after many repetitions. ").repeated(100);
+ QTest::addRow("All Latin1 chars %s", fileName.data() + 9)
+ << QString(fileName) << latin1set;
#if 0
// Depends on iTXt support in libpng
- QTest::newRow("Multibyte string") << fileName << QString::fromUtf8("\341\233\222\341\233\226\341\232\251\341\232\271\341\232\242\341\233\232\341\232\240");
+ QTest::addRow("Multibyte string %s", fileName.data() + 9)
+ << QString(fileName)
+ << QString::fromUtf8("\341\233\222\341\233\226\341\232\251\341\232"
+ "\271\341\232\242\341\233\232\341\232\240");
#endif
}
}
diff --git a/tests/auto/gui/image/qimagewriter/CMakeLists.txt b/tests/auto/gui/image/qimagewriter/CMakeLists.txt
index e74321731f..06273ce7e4 100644
--- a/tests/auto/gui/image/qimagewriter/CMakeLists.txt
+++ b/tests/auto/gui/image/qimagewriter/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qimagewriter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qimagewriter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qimagewriter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -13,38 +20,8 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qimagewriter
SOURCES
tst_qimagewriter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
TESTDATA ${test_data}
)
-#### Keys ignored in scope 1:.:.:qimagewriter.pro:<TRUE>:
-# MOC_DIR = "tmp"
-
-## Scopes:
-#####################################################################
-
-if(ANDROID)
- # Resources:
- set(qimagewriter_resource_files
- "images/YCbCr_cmyk.jpg"
- "images/YCbCr_rgb.jpg"
- "images/beavis.jpg"
- "images/colorful.bmp"
- "images/earth.gif"
- "images/font.bmp"
- "images/gnus.xbm"
- "images/kollada.png"
- "images/marble.xpm"
- "images/ship63.pbm"
- "images/teapot.ppm"
- "images/trolltech.gif"
- )
-
- qt_internal_add_resource(tst_qimagewriter "qimagewriter"
- PREFIX
- "/"
- FILES
- ${qimagewriter_resource_files}
- )
-endif()
diff --git a/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp b/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp
index 2f3c744fd9..1059cc48ab 100644
--- a/tests/auto/gui/image/qimagewriter/tst_qimagewriter.cpp
+++ b/tests/auto/gui/image/qimagewriter/tst_qimagewriter.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 <QTest>
#include <QDebug>
@@ -127,7 +102,7 @@ void tst_QImageWriter::getSetCheck()
QCOMPARE((QIODevice *) var1, obj1.device());
// The class should possibly handle a 0-pointer as a device, since
- // there is a default contructor, so it's "handling" a 0 device by default.
+ // there is a default constructor, so it's "handling" a 0 device by default.
// For example: QMovie::setDevice(0) works just fine
obj1.setDevice((QIODevice *)0);
QCOMPARE((QIODevice *) 0, obj1.device());
diff --git a/tests/auto/gui/image/qmovie/CMakeLists.txt b/tests/auto/gui/image/qmovie/CMakeLists.txt
index 545ee481d1..52e0a347c4 100644
--- a/tests/auto/gui/image/qmovie/CMakeLists.txt
+++ b/tests/auto/gui/image/qmovie/CMakeLists.txt
@@ -1,20 +1,28 @@
-# Generated from qmovie.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmovie Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmovie LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- animations/*)
+ animations/* multiframe/*)
list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qmovie
SOURCES
tst_qmovie.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
+ Qt::TestPrivate
TESTDATA ${test_data}
)
@@ -23,6 +31,7 @@ set(resources_resource_files
"animations/comicsecard.gif"
"animations/corrupt.gif"
"animations/trolltech.gif"
+ "multiframe/Obj_N2_Internal_Mem.ico"
)
qt_internal_add_resource(tst_qmovie "resources"
@@ -32,16 +41,11 @@ qt_internal_add_resource(tst_qmovie "resources"
${resources_resource_files}
)
-
-#### Keys ignored in scope 1:.:.:qmovie.pro:<TRUE>:
-# MOC_DIR = "tmp"
-# QT_FOR_CONFIG = "gui-private"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qmovie CONDITION TARGET Qt::Widgets
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
)
diff --git a/tests/auto/gui/image/qmovie/multiframe/Obj_N2_Internal_Mem.ico b/tests/auto/gui/image/qmovie/multiframe/Obj_N2_Internal_Mem.ico
new file mode 100644
index 0000000000..8da119efdd
--- /dev/null
+++ b/tests/auto/gui/image/qmovie/multiframe/Obj_N2_Internal_Mem.ico
Binary files differ
diff --git a/tests/auto/gui/image/qmovie/tst_qmovie.cpp b/tests/auto/gui/image/qmovie/tst_qmovie.cpp
index 11592ffc2a..c2171d4209 100644
--- a/tests/auto/gui/image/qmovie/tst_qmovie.cpp
+++ b/tests/auto/gui/image/qmovie/tst_qmovie.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QTestEventLoop>
#include <QSignalSpy>
+#include <QtTest/private/qpropertytesthelper_p.h>
#include <QIODevice>
#ifndef QT_NO_WIDGETS
@@ -66,6 +42,13 @@ private slots:
#endif
void emptyMovie();
void bindings();
+ void automatedBindings();
+#ifndef QT_NO_ICO
+ void multiFrameImage();
+#endif
+
+ void setScaledSize_data();
+ void setScaledSize();
};
// Testing get/set functions
@@ -181,7 +164,7 @@ void tst_QMovie::playMovie()
movie.start();
QCOMPARE(movie.state(), QMovie::Running);
QTestEventLoop::instance().enterLoop(2);
- QCOMPARE(finishedSpy.count(), 0);
+ QCOMPARE(finishedSpy.size(), 0);
QCOMPARE(movie.state(), QMovie::Running);
QCOMPARE(movie.currentFrameNumber(), 0);
}
@@ -264,5 +247,78 @@ void tst_QMovie::bindings()
QCOMPARE(cacheModeObserver, QMovie::CacheAll);
}
+void tst_QMovie::automatedBindings()
+{
+ QMovie movie;
+
+ QTestPrivate::testReadWritePropertyBasics(movie, 50, 100, "speed");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QMovie::speed");
+ return;
+ }
+
+ QTestPrivate::testReadWritePropertyBasics(movie, QMovie::CacheAll, QMovie::CacheNone,
+ "cacheMode");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QMovie::cacheMode");
+ return;
+ }
+}
+
+#ifndef QT_NO_ICO
+/*! \internal
+ Test behavior of QMovie with image formats that are multi-frame,
+ but not normally intended as animation formats (such as tiff and ico).
+*/
+void tst_QMovie::multiFrameImage()
+{
+ QMovie movie(QFINDTESTDATA("multiframe/Obj_N2_Internal_Mem.ico"));
+ const int expectedFrameCount = 9;
+
+ QCOMPARE(movie.frameCount(), expectedFrameCount);
+ QVERIFY(movie.isValid());
+ movie.setSpeed(1000); // speed up the test: play at 10 FPS (1000% of normal)
+ QElapsedTimer playTimer;
+ QSignalSpy frameChangedSpy(&movie, &QMovie::frameChanged);
+ QSignalSpy errorSpy(&movie, &QMovie::error);
+ QSignalSpy finishedSpy(&movie, &QMovie::finished);
+ playTimer.start();
+ movie.start();
+ QTRY_COMPARE(finishedSpy.size(), 1);
+ QCOMPARE_GE(playTimer.elapsed(), 100 * expectedFrameCount);
+ QCOMPARE(movie.nextFrameDelay(), 100);
+ QCOMPARE(errorSpy.size(), 0);
+ QCOMPARE(frameChangedSpy.size(), expectedFrameCount);
+}
+#endif
+
+void tst_QMovie::setScaledSize_data()
+{
+ QTest::addColumn<QString>("fileName");
+ QTest::addColumn<QSize>("scaledSize");
+ QTest::addColumn<QSize>("expectedSize");
+
+ QTest::newRow("trolltech (50, 50)") << QString("animations/trolltech.gif") << QSize(50, 50) << QSize(50, 50);
+ QTest::newRow("trolltech (400, 400)") << QString("animations/trolltech.gif") << QSize(400, 400) << QSize(400, 400);
+ QTest::newRow("trolltech (50, 0)") << QString("animations/trolltech.gif") << QSize(50, 0) << QSize(50, 25);
+ QTest::newRow("trolltech (50, -1)") << QString("animations/trolltech.gif") << QSize(50, -1) << QSize(50, 25);
+ QTest::newRow("trolltech (0, 50)") << QString("animations/trolltech.gif") << QSize(0, 50) << QSize(100, 50);
+ QTest::newRow("trolltech (-1, 50)") << QString("animations/trolltech.gif") << QSize(-1, 50) << QSize(100, 50);
+}
+
+void tst_QMovie::setScaledSize()
+{
+ QFETCH(QString, fileName);
+ QFETCH(QSize, scaledSize);
+ QFETCH(QSize, expectedSize);
+
+ QMovie movie(QFINDTESTDATA(fileName));
+ movie.setScaledSize(scaledSize);
+
+ movie.start();
+ QCOMPARE(movie.currentFrameNumber(), 0);
+ QCOMPARE(movie.currentImage().size(), expectedSize);
+}
+
QTEST_MAIN(tst_QMovie)
#include "tst_qmovie.moc"
diff --git a/tests/auto/gui/image/qpicture/CMakeLists.txt b/tests/auto/gui/image/qpicture/CMakeLists.txt
index 29bf68fa06..30b0aafd11 100644
--- a/tests/auto/gui/image/qpicture/CMakeLists.txt
+++ b/tests/auto/gui/image/qpicture/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qpicture.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpicture Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpicture LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpicture
SOURCES
tst_qpicture.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/image/qpicture/tst_qpicture.cpp b/tests/auto/gui/image/qpicture/tst_qpicture.cpp
index 25e284a6ec..2fa4436154 100644
--- a/tests/auto/gui/image/qpicture/tst_qpicture.cpp
+++ b/tests/auto/gui/image/qpicture/tst_qpicture.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 <QTest>
diff --git a/tests/auto/gui/image/qpixmap/CMakeLists.txt b/tests/auto/gui/image/qpixmap/CMakeLists.txt
index 1946715047..8531ef5b7b 100644
--- a/tests/auto/gui/image/qpixmap/CMakeLists.txt
+++ b/tests/auto/gui/image/qpixmap/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qpixmap.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpixmap Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpixmap LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -25,7 +32,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qpixmap
SOURCES
tst_qpixmap.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -95,13 +102,13 @@ qt_internal_add_resource(tst_qpixmap "qpixmap"
#####################################################################
qt_internal_extend_target(tst_qpixmap CONDITION TARGET Qt::Widgets
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
Qt::WidgetsPrivate
)
qt_internal_extend_target(tst_qpixmap CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
gdi32
user32
)
diff --git a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp b/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
index 69f6796bbb..137439d98b 100644
--- a/tests/auto/gui/image/qpixmap/tst_qpixmap.cpp
+++ b/tests/auto/gui/image/qpixmap/tst_qpixmap.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 <QSet>
#include <QTemporaryFile>
@@ -1448,7 +1423,7 @@ void tst_QPixmap::loadFromDataImage()
QPixmap pixmapWithCopy = QPixmap::fromImage(imageRef);
QFile file(imagePath);
- file.open(QIODevice::ReadOnly);
+ QVERIFY(file.open(QIODevice::ReadOnly));
QByteArray rawData = file.readAll();
QPixmap directLoadingPixmap;
diff --git a/tests/auto/gui/image/qpixmapcache/CMakeLists.txt b/tests/auto/gui/image/qpixmapcache/CMakeLists.txt
index 9e99842e6e..444de9cb3e 100644
--- a/tests/auto/gui/image/qpixmapcache/CMakeLists.txt
+++ b/tests/auto/gui/image/qpixmapcache/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qpixmapcache.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpixmapcache Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpixmapcache LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpixmapcache
SOURCES
tst_qpixmapcache.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
diff --git a/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp b/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp
index a87ec5d025..8384a46491 100644
--- a/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp
+++ b/tests/auto/gui/image/qpixmapcache/tst_qpixmapcache.cpp
@@ -1,32 +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$
-**
-****************************************************************************/
-
-#define Q_TEST_QPIXMAPCACHE
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -34,6 +7,16 @@
#include <qpixmapcache.h>
#include "private/qpixmapcache_p.h"
+#include <functional>
+
+QT_BEGIN_NAMESPACE // The test requires QT_BUILD_INTERNAL
+Q_AUTOTEST_EXPORT void qt_qpixmapcache_flush_detached_pixmaps();
+Q_AUTOTEST_EXPORT int qt_qpixmapcache_qpixmapcache_total_used();
+Q_AUTOTEST_EXPORT int q_QPixmapCache_keyHashSize();
+QT_END_NAMESPACE
+
+using namespace Qt::StringLiterals;
+
class tst_QPixmapCache : public QObject
{
Q_OBJECT
@@ -50,13 +33,22 @@ private slots:
void setCacheLimit();
void find();
void insert();
+ void failedInsertReturnsInvalidKey();
+#if QT_DEPRECATED_SINCE(6, 6)
void replace();
+#endif
void remove();
void clear();
void pixmapKey();
void noLeak();
+ void clearDoesNotLeakStringKeys();
+ void evictionDoesNotLeakStringKeys();
+ void reducingCacheLimitDoesNotLeakStringKeys();
void strictCacheLimit();
void noCrashOnLargeInsert();
+
+private:
+ void stringLeak_impl(std::function<void()> whenOp);
};
static QPixmapCache::KeyData* getPrivate(QPixmapCache::Key &key)
@@ -123,28 +115,32 @@ void tst_QPixmapCache::setCacheLimit()
//The int part of the API
p1 = new QPixmap(2, 3);
QPixmapCache::Key key = QPixmapCache::insert(*p1);
- QVERIFY(QPixmapCache::find(key, p1) != 0);
+ QVERIFY(QPixmapCache::find(key, p1));
delete p1;
QPixmapCache::setCacheLimit(0);
- QVERIFY(QPixmapCache::find(key, p1) == 0);
+ QVERIFY(!QPixmapCache::find(key, p1));
- p1 = new QPixmap(2, 3);
QPixmapCache::setCacheLimit(1000);
- QPixmapCache::replace(key, *p1);
- QVERIFY(QPixmapCache::find(key, p1) == 0);
+#if QT_DEPRECATED_SINCE(6, 6)
+ QT_WARNING_PUSH
+ QT_WARNING_DISABLE_DEPRECATED
+ p1 = new QPixmap(2, 3);
+ QVERIFY(!QPixmapCache::replace(key, *p1));
+ QVERIFY(!QPixmapCache::find(key, p1));
delete p1;
+#endif // QT_DEPRECATED_SINCE(6, 6)
//Let check if keys are released when the pixmap cache is
//full or has been flushed.
QPixmapCache::clear();
p1 = new QPixmap(2, 3);
key = QPixmapCache::insert(*p1);
- QVERIFY(QPixmapCache::find(key, p1) != 0);
+ QVERIFY(QPixmapCache::find(key, p1));
p1->detach(); // dectach so that the cache thinks no-one is using it.
QPixmapCache::setCacheLimit(0);
- QVERIFY(QPixmapCache::find(key, p1) == 0);
+ QVERIFY(!QPixmapCache::find(key, p1));
QPixmapCache::setCacheLimit(1000);
key = QPixmapCache::insert(*p1);
QVERIFY(key.isValid());
@@ -158,7 +154,7 @@ void tst_QPixmapCache::setCacheLimit()
QPixmap p2;
p1 = new QPixmap(2, 3);
key = QPixmapCache::insert(*p1);
- QVERIFY(QPixmapCache::find(key, &p2) != 0);
+ QVERIFY(QPixmapCache::find(key, &p2));
//we flush the cache
p1->detach();
p2.detach();
@@ -166,8 +162,8 @@ void tst_QPixmapCache::setCacheLimit()
QPixmapCache::setCacheLimit(1000);
QPixmapCache::Key key2 = QPixmapCache::insert(*p1);
QCOMPARE(getPrivate(key2)->key, 1);
- QVERIFY(QPixmapCache::find(key, &p2) == 0);
- QVERIFY(QPixmapCache::find(key2, &p2) != 0);
+ QVERIFY(!QPixmapCache::find(key, &p2));
+ QVERIFY(QPixmapCache::find(key2, &p2));
QCOMPARE(p2, *p1);
delete p1;
@@ -185,12 +181,12 @@ void tst_QPixmapCache::setCacheLimit()
p1->detach();
QPixmapCache::Key key3 = QPixmapCache::insert(*p1);
p1->detach();
- QPixmapCache::flushDetachedPixmaps();
+ qt_qpixmapcache_flush_detached_pixmaps();
key2 = QPixmapCache::insert(*p1);
QCOMPARE(getPrivate(key2)->key, 1);
//This old key is not valid anymore after the flush
QVERIFY(!key.isValid());
- QVERIFY(QPixmapCache::find(key, &p2) == 0);
+ QVERIFY(!QPixmapCache::find(key, &p2));
delete p1;
}
@@ -228,7 +224,7 @@ void tst_QPixmapCache::find()
QPixmapCache::insert(p5);
//at that time the first key has been erase because no more place in the cache
- QVERIFY(QPixmapCache::find(key, &p1) == 0);
+ QVERIFY(!QPixmapCache::find(key, &p1));
QVERIFY(!key.isValid());
}
@@ -287,6 +283,7 @@ void tst_QPixmapCache::insert()
for (int i = 0; i < numberOfKeys; ++i) {
QPixmap p3(10,10);
keys.append(QPixmapCache::insert(p3));
+ QVERIFY(keys.back().isValid());
}
num = 0;
@@ -300,6 +297,35 @@ void tst_QPixmapCache::insert()
QVERIFY(num <= estimatedNum);
}
+void tst_QPixmapCache::failedInsertReturnsInvalidKey()
+{
+ //
+ // GIVEN: a pixmap whose memory footprint exceeds the cache's limit:
+ //
+ QPixmapCache::setCacheLimit(20);
+
+ QPixmap pm(256, 256);
+ pm.fill(Qt::transparent);
+ QCOMPARE_GT(pm.width() * pm.height() * pm.depth() / 8,
+ QPixmapCache::cacheLimit() * 1024);
+
+ //
+ // WHEN: trying to add this pixmap to the cache
+ //
+ const auto success = QPixmapCache::insert(u"foo"_s, pm); // QString API
+ { QPixmap r; QVERIFY(!QPixmapCache::find(u"foo"_s, &r)); }
+ const auto key = QPixmapCache::insert(pm); // "int" API
+
+ //
+ // THEN: failure is reported to the user
+ //
+ QVERIFY(!key.isValid()); // "int" API
+ QVERIFY(!success); // QString API
+}
+
+#if QT_DEPRECATED_SINCE(6, 6)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QPixmapCache::replace()
{
//The int part of the API
@@ -328,6 +354,8 @@ void tst_QPixmapCache::replace()
//Broken keys
QCOMPARE(QPixmapCache::replace(QPixmapCache::Key(), p2), false);
}
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 6)
void tst_QPixmapCache::remove()
{
@@ -361,11 +389,11 @@ void tst_QPixmapCache::remove()
QVERIFY(p1.toImage() == p1.toImage()); // sanity check
QPixmapCache::remove(key);
- QVERIFY(QPixmapCache::find(key, &p1) == 0);
+ QVERIFY(!QPixmapCache::find(key, &p1));
//Broken key
QPixmapCache::remove(QPixmapCache::Key());
- QVERIFY(QPixmapCache::find(QPixmapCache::Key(), &p1) == 0);
+ QVERIFY(!QPixmapCache::find(QPixmapCache::Key(), &p1));
//Test if keys are release
QPixmapCache::clear();
@@ -379,7 +407,7 @@ void tst_QPixmapCache::remove()
QPixmapCache::clear();
key = QPixmapCache::insert(p1);
QCOMPARE(getPrivate(key)->key, 1);
- QVERIFY(QPixmapCache::find(key, &p1) != 0);
+ QVERIFY(QPixmapCache::find(key, &p1));
QPixmapCache::remove(key);
QCOMPARE(p1.isDetached(), true);
@@ -389,8 +417,8 @@ void tst_QPixmapCache::remove()
QPixmapCache::insert("red", p1);
key = QPixmapCache::insert(p1);
QPixmapCache::remove(key);
- QVERIFY(QPixmapCache::find(key, &p1) == 0);
- QVERIFY(QPixmapCache::find("red", &p1) != 0);
+ QVERIFY(!QPixmapCache::find(key, &p1));
+ QVERIFY(QPixmapCache::find("red", &p1));
}
void tst_QPixmapCache::clear()
@@ -434,7 +462,7 @@ void tst_QPixmapCache::clear()
QPixmapCache::clear();
for (int k = 0; k < numberOfKeys; ++k) {
- QVERIFY(QPixmapCache::find(keys.at(k), &p1) == 0);
+ QVERIFY(!QPixmapCache::find(keys.at(k), &p1));
QVERIFY(!keys[k].isValid());
}
}
@@ -483,10 +511,6 @@ void tst_QPixmapCache::pixmapKey()
QVERIFY(!getPrivate(key8));
}
-QT_BEGIN_NAMESPACE
-extern int q_QPixmapCache_keyHashSize();
-QT_END_NAMESPACE
-
void tst_QPixmapCache::noLeak()
{
QPixmapCache::Key key;
@@ -503,6 +527,68 @@ void tst_QPixmapCache::noLeak()
QCOMPARE(oldSize, newSize);
}
+void tst_QPixmapCache::clearDoesNotLeakStringKeys()
+{
+ stringLeak_impl([] { QPixmapCache::clear(); });
+}
+
+void tst_QPixmapCache::evictionDoesNotLeakStringKeys()
+{
+ stringLeak_impl([] {
+ // fill the cache with other pixmaps to force eviction of "our" pixmap:
+ constexpr int Iterations = 10;
+ for (int i = 0; i < Iterations; ++i) {
+ QPixmap pm(64, 64);
+ pm.fill(Qt::transparent);
+ [[maybe_unused]] auto r = QPixmapCache::insert(pm);
+ }
+ });
+}
+
+void tst_QPixmapCache::reducingCacheLimitDoesNotLeakStringKeys()
+{
+ stringLeak_impl([] {
+ QPixmapCache::setCacheLimit(0);
+ });
+}
+
+void tst_QPixmapCache::stringLeak_impl(std::function<void()> whenOp)
+{
+ QVERIFY(whenOp);
+
+ QPixmapCache::setCacheLimit(20); // 20KiB
+ //
+ // GIVEN: a QPixmap with QString key `key` in QPixmapCache
+ //
+ QString key;
+ {
+ QPixmap pm(64, 64);
+ QCOMPARE_LT(pm.width() * pm.height() * std::ceil(pm.depth() / 8.0),
+ QPixmapCache::cacheLimit() * 1024);
+ pm.fill(Qt::transparent);
+ key = u"theKey"_s.repeated(20); // avoid eventual QString SSO
+ QVERIFY(key.isDetached());
+ QPixmapCache::insert(key, pm);
+ }
+ QVERIFY(!key.isDetached()); // was saved inside QPixmapCache
+
+ //
+ // WHEN: performing the given operation
+ //
+ whenOp();
+ if (QTest::currentTestFailed())
+ return;
+
+ //
+ // THEN: `key` is no longer referenced by QPixmapCache:
+ //
+ QVERIFY(key.isDetached());
+ // verify that the pixmap is really gone from the cache
+ // (do it after the key check, because QPixmapCache cleans up `key` on a failed lookup)
+ QPixmap r;
+ QVERIFY(!QPixmapCache::find(key, &r));
+}
+
void tst_QPixmapCache::strictCacheLimit()
{
@@ -524,7 +610,7 @@ void tst_QPixmapCache::strictCacheLimit()
QPixmapCache::insert(id + "-b", pixmap);
}
- QVERIFY(QPixmapCache::totalUsed() <= limit);
+ QVERIFY(qt_qpixmapcache_qpixmapcache_total_used() <= limit);
}
void tst_QPixmapCache::noCrashOnLargeInsert()
diff --git a/tests/auto/gui/itemmodels/CMakeLists.txt b/tests/auto/gui/itemmodels/CMakeLists.txt
index 69b6cb0e22..4c25418ef1 100644
--- a/tests/auto/gui/itemmodels/CMakeLists.txt
+++ b/tests/auto/gui/itemmodels/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from itemmodels.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qstandarditem)
if(TARGET Qt::Widgets)
diff --git a/tests/auto/gui/itemmodels/qfilesystemmodel/BLACKLIST b/tests/auto/gui/itemmodels/qfilesystemmodel/BLACKLIST
index ae8a64dc1f..4119afce84 100644
--- a/tests/auto/gui/itemmodels/qfilesystemmodel/BLACKLIST
+++ b/tests/auto/gui/itemmodels/qfilesystemmodel/BLACKLIST
@@ -3,6 +3,3 @@ ubuntu
b2qt
[specialFiles]
b2qt
-# QTBUG-87427
-[specialFiles]
-android
diff --git a/tests/auto/gui/itemmodels/qfilesystemmodel/CMakeLists.txt b/tests/auto/gui/itemmodels/qfilesystemmodel/CMakeLists.txt
index 31fd8ca32d..85fb4fe2e1 100644
--- a/tests/auto/gui/itemmodels/qfilesystemmodel/CMakeLists.txt
+++ b/tests/auto/gui/itemmodels/qfilesystemmodel/CMakeLists.txt
@@ -1,25 +1,23 @@
-# Generated from qfilesystemmodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfilesystemmodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfilesystemmodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfilesystemmodel
SOURCES
tst_qfilesystemmodel.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::Widgets
Qt::WidgetsPrivate
Qt::TestPrivate
)
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:qfilesystemmodel.pro:WIN32:
-# testcase.timeout = "900"
-
-#### Keys ignored in scope 3:.:.:qfilesystemmodel.pro:MACOS:
-# testcase.timeout = "900"
diff --git a/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp b/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp
index b6f6328acd..8ef0b6272a 100644
--- a/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.cpp
+++ b/tests/auto/gui/itemmodels/qfilesystemmodel/tst_qfilesystemmodel.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 <QTest>
@@ -45,6 +20,7 @@
#include <QStyle>
#include <QtGlobal>
#include <QTemporaryDir>
+#include <QAbstractItemModelTester>
#if defined(Q_OS_WIN)
# include <qt_windows.h> // for SetFileAttributes
#endif
@@ -52,6 +28,9 @@
#include <algorithm>
+using namespace Qt::StringLiterals;
+using namespace std::chrono;
+
#define WAITTIME 1000
// Will try to wait for the condition while allowing event processing
@@ -86,6 +65,7 @@ private slots:
void rootPath();
void readOnly();
void iconProvider();
+ void nullIconProvider();
void rowCount();
@@ -101,6 +81,8 @@ private slots:
void filters_data();
void filters();
+ void showFilesOnly();
+
void nameFilters();
void setData_data();
@@ -172,6 +154,8 @@ void tst_QFileSystemModel::indexPath()
{
#if !defined(Q_OS_WIN)
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
int depth = QDir::currentPath().count('/');
model->setRootPath(QDir::currentPath());
QString backPath;
@@ -186,12 +170,14 @@ void tst_QFileSystemModel::indexPath()
void tst_QFileSystemModel::rootPath()
{
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QCOMPARE(model->rootPath(), QString(QDir().path()));
QSignalSpy rootChanged(model.data(), &QFileSystemModel::rootPathChanged);
QModelIndex root = model->setRootPath(model->rootPath());
root = model->setRootPath("this directory shouldn't exist");
- QCOMPARE(rootChanged.count(), 0);
+ QCOMPARE(rootChanged.size(), 0);
QString oldRootPath = model->rootPath();
const QStringList documentPaths = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
@@ -208,48 +194,50 @@ void tst_QFileSystemModel::rootPath()
QTRY_VERIFY(model->rowCount(root) >= 0);
QCOMPARE(model->rootPath(), QString(documentPath));
- QCOMPARE(rootChanged.count(), oldRootPath == model->rootPath() ? 0 : 1);
+ QCOMPARE(rootChanged.size(), oldRootPath == model->rootPath() ? 0 : 1);
QCOMPARE(model->rootDirectory().absolutePath(), documentPath);
model->setRootPath(QDir::rootPath());
- int oldCount = rootChanged.count();
+ int oldCount = rootChanged.size();
oldRootPath = model->rootPath();
root = model->setRootPath(documentPath + QLatin1String("/."));
QTRY_VERIFY(model->rowCount(root) >= 0);
QCOMPARE(model->rootPath(), documentPath);
- QCOMPARE(rootChanged.count(), oldRootPath == model->rootPath() ? oldCount : oldCount + 1);
+ QCOMPARE(rootChanged.size(), oldRootPath == model->rootPath() ? oldCount : oldCount + 1);
QCOMPARE(model->rootDirectory().absolutePath(), documentPath);
QDir newdir = documentPath;
if (newdir.cdUp()) {
- oldCount = rootChanged.count();
+ oldCount = rootChanged.size();
oldRootPath = model->rootPath();
root = model->setRootPath(documentPath + QLatin1String("/.."));
QTRY_VERIFY(model->rowCount(root) >= 0);
QCOMPARE(model->rootPath(), newdir.path());
- QCOMPARE(rootChanged.count(), oldCount + 1);
+ QCOMPARE(rootChanged.size(), oldCount + 1);
QCOMPARE(model->rootDirectory().absolutePath(), newdir.path());
}
#ifdef Q_OS_WIN
// check case insensitive root node on windows, tests QTBUG-71701
- QModelIndex index = model->setRootPath(uR"(\\localhost\c$)"_qs);
+ QModelIndex index = model->setRootPath(uR"(\\localhost\c$)"_s);
QVERIFY(index.isValid());
- QCOMPARE(model->rootPath(), u"//localhost/c$"_qs);
+ QCOMPARE(model->rootPath(), u"//localhost/c$"_s);
- index = model->setRootPath(uR"(\\localhost\C$)"_qs);
+ index = model->setRootPath(uR"(\\localhost\C$)"_s);
QVERIFY(index.isValid());
- QCOMPARE(model->rootPath(), u"//localhost/C$"_qs);
+ QCOMPARE(model->rootPath(), u"//localhost/C$"_s);
- index = model->setRootPath(uR"(\\LOCALHOST\C$)"_qs);
+ index = model->setRootPath(uR"(\\LOCALHOST\C$)"_s);
QVERIFY(index.isValid());
- QCOMPARE(model->rootPath(), u"//LOCALHOST/C$"_qs);
+ QCOMPARE(model->rootPath(), u"//LOCALHOST/C$"_s);
#endif
}
void tst_QFileSystemModel::readOnly()
{
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QCOMPARE(model->isReadOnly(), true);
QTemporaryFile file(flatDirTestPath + QStringLiteral("/XXXXXX.dat"));
QVERIFY2(file.open(), qPrintable(file.errorString()));
@@ -261,10 +249,14 @@ void tst_QFileSystemModel::readOnly()
QModelIndex root = model->setRootPath(flatDirTestPath);
QTRY_VERIFY(model->rowCount(root) > 0);
+
+ // ItemIsEditable should change, ItemNeverHasChildren should not change
QVERIFY(!(model->flags(model->index(fileName)) & Qt::ItemIsEditable));
+ QVERIFY(model->flags(model->index(fileName)) & Qt::ItemNeverHasChildren);
model->setReadOnly(false);
QCOMPARE(model->isReadOnly(), false);
QVERIFY(model->flags(model->index(fileName)) & Qt::ItemIsEditable);
+ QVERIFY(model->flags(model->index(fileName)) & Qt::ItemNeverHasChildren);
}
class CustomFileIconProvider : public QFileIconProvider
@@ -299,6 +291,8 @@ private:
void tst_QFileSystemModel::iconProvider()
{
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QVERIFY(model->iconProvider());
QScopedPointer<QFileIconProvider> provider(new QFileIconProvider);
model->setIconProvider(provider.data());
@@ -318,6 +312,19 @@ void tst_QFileSystemModel::iconProvider()
QCOMPARE(myModel->fileIcon(myModel->index(QDir::homePath())).pixmap(50, 50), mb);
}
+void tst_QFileSystemModel::nullIconProvider()
+{
+ QFileSystemModel model;
+ QAbstractItemModelTester tester(&model);
+ tester.setUseFetchMore(false);
+ QVERIFY(model.iconProvider());
+ // No crash when setIconProvider(nullptr) is used
+ model.setIconProvider(nullptr);
+ const auto documentPaths = QStandardPaths::standardLocations(QStandardPaths::DocumentsLocation);
+ QVERIFY(!documentPaths.isEmpty());
+ model.setRootPath(documentPaths.constFirst());
+}
+
bool tst_QFileSystemModel::createFiles(QFileSystemModel *model, const QString &test_path,
const QStringList &initial_files, int existingFileCount,
const QStringList &initial_dirs)
@@ -408,11 +415,13 @@ void tst_QFileSystemModel::rowCount()
QSignalSpy *spy2 = nullptr;
QSignalSpy *spy3 = nullptr;
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QModelIndex root = prepareTestModelRoot(model.data(), flatDirTestPath, &spy2, &spy3);
QVERIFY(root.isValid());
- QVERIFY(spy2 && spy2->count() > 0);
- QVERIFY(spy3 && spy3->count() > 0);
+ QVERIFY(spy2 && spy2->size() > 0);
+ QVERIFY(spy3 && spy3->size() > 0);
}
void tst_QFileSystemModel::rowsInserted_data()
@@ -436,6 +445,8 @@ void tst_QFileSystemModel::rowsInserted()
{
const QString tmp = flatDirTestPath;
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QModelIndex root = prepareTestModelRoot(model.data(), tmp);
QVERIFY(root.isValid());
@@ -452,7 +463,7 @@ void tst_QFileSystemModel::rowsInserted()
QVERIFY(createFiles(model.data(), tmp, files, 5));
QTRY_COMPARE(model->rowCount(root), oldCount + count);
int totalRowsInserted = 0;
- for (int i = 0; i < spy0.count(); ++i) {
+ for (int i = 0; i < spy0.size(); ++i) {
int start = spy0[i].value(1).toInt();
int end = spy0[i].value(2).toInt();
totalRowsInserted += end - start + 1;
@@ -461,24 +472,24 @@ void tst_QFileSystemModel::rowsInserted()
const QString expected = ascending == Qt::AscendingOrder ? QStringLiteral("j") : QStringLiteral("b");
QTRY_COMPARE(lastEntry(root), expected);
- if (spy0.count() > 0) {
+ if (spy0.size() > 0) {
if (count == 0)
- QCOMPARE(spy0.count(), 0);
+ QCOMPARE(spy0.size(), 0);
else
- QVERIFY(spy0.count() >= 1);
+ QVERIFY(spy0.size() >= 1);
}
- if (count == 0) QCOMPARE(spy1.count(), 0); else QVERIFY(spy1.count() >= 1);
+ if (count == 0) QCOMPARE(spy1.size(), 0); else QVERIFY(spy1.size() >= 1);
QVERIFY(createFiles(model.data(), tmp, QStringList(".hidden_file"), 5 + count));
if (count != 0)
- QTRY_VERIFY(spy0.count() >= 1);
+ QTRY_VERIFY(spy0.size() >= 1);
else
- QTRY_COMPARE(spy0.count(), 0);
+ QTRY_COMPARE(spy0.size(), 0);
if (count != 0)
- QTRY_VERIFY(spy1.count() >= 1);
+ QTRY_VERIFY(spy1.size() >= 1);
else
- QTRY_COMPARE(spy1.count(), 0);
+ QTRY_COMPARE(spy1.size(), 0);
}
void tst_QFileSystemModel::rowsRemoved_data()
@@ -490,6 +501,8 @@ void tst_QFileSystemModel::rowsRemoved()
{
const QString tmp = flatDirTestPath;
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QModelIndex root = prepareTestModelRoot(model.data(), tmp);
QVERIFY(root.isValid());
@@ -507,14 +520,14 @@ void tst_QFileSystemModel::rowsRemoved()
}
for (int i = 0 ; i < 10; ++i) {
if (count != 0) {
- if (i == 10 || spy0.count() != 0) {
- QVERIFY(spy0.count() >= 1);
- QVERIFY(spy1.count() >= 1);
+ if (i == 10 || spy0.size() != 0) {
+ QVERIFY(spy0.size() >= 1);
+ QVERIFY(spy1.size() >= 1);
}
} else {
- if (i == 10 || spy0.count() == 0) {
- QCOMPARE(spy0.count(), 0);
- QCOMPARE(spy1.count(), 0);
+ if (i == 10 || spy0.size() == 0) {
+ QCOMPARE(spy0.size(), 0);
+ QCOMPARE(spy1.size(), 0);
}
}
QStringList lst;
@@ -533,11 +546,11 @@ void tst_QFileSystemModel::rowsRemoved()
QVERIFY(QFile::remove(tmp + QLatin1String("/.c")));
if (count != 0) {
- QVERIFY(spy0.count() >= 1);
- QVERIFY(spy1.count() >= 1);
+ QVERIFY(spy0.size() >= 1);
+ QVERIFY(spy1.size() >= 1);
} else {
- QCOMPARE(spy0.count(), 0);
- QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy0.size(), 0);
+ QCOMPARE(spy1.size(), 0);
}
}
@@ -552,6 +565,8 @@ void tst_QFileSystemModel::dataChanged()
const QString tmp = flatDirTestPath;
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QModelIndex root = prepareTestModelRoot(model.data(), tmp);
QVERIFY(root.isValid());
@@ -567,7 +582,7 @@ void tst_QFileSystemModel::dataChanged()
QTest::qWait(WAITTIME);
- if (count != 0) QVERIFY(spy.count() >= 1); else QCOMPARE(spy.count(), 0);
+ if (count != 0) QVERIFY(spy.size() >= 1); else QCOMPARE(spy.size(), 0);
}
void tst_QFileSystemModel::filters_data()
@@ -612,6 +627,8 @@ void tst_QFileSystemModel::filters()
{
QString tmp = flatDirTestPath;
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QVERIFY(createFiles(model.data(), tmp, QStringList()));
QModelIndex root = model->setRootPath(tmp);
QFETCH(QStringList, files);
@@ -620,7 +637,7 @@ void tst_QFileSystemModel::filters()
QFETCH(QStringList, nameFilters);
QFETCH(int, rowCount);
- if (nameFilters.count() > 0)
+ if (nameFilters.size() > 0)
model->setNameFilters(nameFilters);
model->setNameFilterDisables(false);
model->setFilter(dirFilters);
@@ -632,12 +649,12 @@ void tst_QFileSystemModel::filters()
QDir xFactor(tmp);
QStringList dirEntries;
- if (nameFilters.count() > 0)
+ if (nameFilters.size() > 0)
dirEntries = xFactor.entryList(nameFilters, dirFilters);
else
dirEntries = xFactor.entryList(dirFilters);
- QCOMPARE(dirEntries.count(), rowCount);
+ QCOMPARE(dirEntries.size(), rowCount);
QStringList modelEntries;
@@ -649,7 +666,7 @@ void tst_QFileSystemModel::filters()
QCOMPARE(dirEntries, modelEntries);
#ifdef Q_OS_LINUX
- if (files.count() >= 3 && rowCount >= 3 && rowCount != 5) {
+ if (files.size() >= 3 && rowCount >= 3 && rowCount != 5) {
QString fileName1 = (tmp + '/' + files.at(0));
QString fileName2 = (tmp + '/' + files.at(1));
QString fileName3 = (tmp + '/' + files.at(2));
@@ -675,11 +692,46 @@ void tst_QFileSystemModel::filters()
#endif
}
+void tst_QFileSystemModel::showFilesOnly()
+{
+ QString tmp = flatDirTestPath;
+ QFileSystemModel model;
+ QAbstractItemModelTester tester(&model);
+ tester.setUseFetchMore(false);
+ QVERIFY(createFiles(&model, tmp, QStringList()));
+ const QStringList files{u"a"_s, u"b"_s, u"c"_s};
+ const auto subdir = u"sub_directory"_s;
+ QVERIFY(createFiles(&model, tmp, files, 0, {subdir}));
+
+ // The model changes asynchronously when we run the event loop in the QTRY_...
+ // macros, so the root index returned by an earlier call to setRootPath might
+ // become invalid. Make sure we use a fresh one for each iteration.
+
+ // QTBUG-74471
+ // WHAT: setting the root path of the model to a dir with some files and a subdir
+ QTRY_COMPARE(model.rowCount(model.setRootPath(tmp)), files.size() + 1);
+
+ // Change the model to only show files
+ model.setFilter(QDir::Files);
+ QTRY_COMPARE(model.rowCount(model.setRootPath(tmp)), files.size());
+
+ // WHEN: setting the root path to a subdir
+ QModelIndex subIndex = model.setRootPath(tmp + u'/' + subdir);
+ QTRY_COMPARE(model.rowCount(subIndex), 0);
+
+ // THEN: setting the root path to the previous (parent) dir, the model should
+ // still only show files.
+ // Doubling the default timeout (5s) as this test to fails on macos on the CI
+ QTRY_COMPARE_WITH_TIMEOUT(model.rowCount(model.setRootPath(tmp)), files.size(), 10s);
+}
+
void tst_QFileSystemModel::nameFilters()
{
QStringList list;
list << "a" << "b" << "c";
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
model->setNameFilters(list);
model->setNameFilterDisables(false);
QCOMPARE(model->nameFilters(), list);
@@ -725,6 +777,8 @@ void tst_QFileSystemModel::setData_data()
void tst_QFileSystemModel::setData()
{
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QSignalSpy spy(model.data(), &QFileSystemModel::fileRenamed);
QFETCH(QString, subdirName);
QFETCH(QStringList, files);
@@ -744,7 +798,7 @@ void tst_QFileSystemModel::setData()
tmpIdx = model->index(tmp);
model->fetchMore(tmpIdx);
}
- QTRY_COMPARE(model->rowCount(tmpIdx), files.count());
+ QTRY_COMPARE(model->rowCount(tmpIdx), files.size());
QModelIndex idx = model->index(tmp + '/' + oldFileName);
QCOMPARE(idx.isValid(), true);
@@ -754,16 +808,17 @@ void tst_QFileSystemModel::setData()
QCOMPARE(model->setData(idx, newFileName), success);
model->setReadOnly(true);
if (success) {
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> arguments = spy.takeFirst();
QCOMPARE(model->data(idx, QFileSystemModel::FileNameRole).toString(), newFileName);
+ QCOMPARE(model->data(idx, QFileSystemModel::FileInfoRole).value<QFileInfo>().fileName(), newFileName);
QCOMPARE(model->fileInfo(idx).filePath(), tmp + '/' + newFileName);
QCOMPARE(model->index(arguments.at(0).toString()), model->index(tmp));
QCOMPARE(arguments.at(1).toString(), oldFileName);
QCOMPARE(arguments.at(2).toString(), newFileName);
QCOMPARE(QFile::rename(tmp + '/' + newFileName, tmp + '/' + oldFileName), true);
}
- QTRY_COMPARE(model->rowCount(tmpIdx), files.count());
+ QTRY_COMPARE(model->rowCount(tmpIdx), files.size());
// cleanup
if (!subdirName.isEmpty())
QVERIFY(QDir(tmp).removeRecursively());
@@ -777,6 +832,8 @@ void tst_QFileSystemModel::sortPersistentIndex()
file.close();
QTRY_VERIFY(QDir(flatDirTestPath).entryInfoList().contains(fileInfo));
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QModelIndex root = model->setRootPath(flatDirTestPath);
QTRY_VERIFY(model->rowCount(root) > 0);
@@ -821,13 +878,13 @@ void tst_QFileSystemModel::sort()
//Create a file that will be at the end when sorting by name (For Mac, the default)
//but if we sort by size descending it will be the first
QFile tempFile(dirPath + "/plop2.txt");
- tempFile.open(QIODevice::WriteOnly | QIODevice::Text);
+ QVERIFY(tempFile.open(QIODevice::WriteOnly | QIODevice::Text));
QTextStream out(&tempFile);
out << "The magic number is: " << 49 << "\n";
tempFile.close();
QFile tempFile2(dirPath + "/plop.txt");
- tempFile2.open(QIODevice::WriteOnly | QIODevice::Text);
+ QVERIFY(tempFile2.open(QIODevice::WriteOnly | QIODevice::Text));
QTextStream out2(&tempFile2);
out2 << "The magic number is : " << 49 << " but i write some stuff in the file \n";
tempFile2.close();
@@ -856,7 +913,7 @@ void tst_QFileSystemModel::sort()
expectedOrder << tempFile2.fileName() << tempFile.fileName() << dirPath + QChar('/') + ".." << dirPath + QChar('/') + ".";
if (fileDialogMode) {
- QTRY_COMPARE(myModel->rowCount(parent), expectedOrder.count());
+ QTRY_COMPARE(myModel->rowCount(parent), expectedOrder.size());
// File dialog Mode means sub trees are not sorted, only the current root.
// There's no way we can check that the sub tree is "not sorted"; just check if it
// has the same contents of the expected list
@@ -883,6 +940,8 @@ void tst_QFileSystemModel::mkdir()
QString tmp = flatDirTestPath;
QString newFolderPath = QDir::toNativeSeparators(tmp + '/' + "NewFoldermkdirtest4");
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QModelIndex tmpDir = model->index(tmp);
QVERIFY(tmpDir.isValid());
QDir bestatic(newFolderPath);
@@ -918,6 +977,8 @@ void tst_QFileSystemModel::deleteFile()
}
newFile.close();
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QModelIndex idx = model->index(newFilePath);
QVERIFY(idx.isValid());
QVERIFY(model->remove(idx));
@@ -980,12 +1041,14 @@ void tst_QFileSystemModel::caseSensitivity()
QStringList files;
files << "a" << "c" << "C";
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QVERIFY(createFiles(model.data(), tmp, files));
QModelIndex root = model->index(tmp);
QStringList paths;
QModelIndexList indexes;
QCOMPARE(model->rowCount(root), 0);
- for (int i = 0; i < files.count(); ++i) {
+ for (int i = 0; i < files.size(); ++i) {
const QString path = tmp + '/' + files.at(i);
const QModelIndex index = model->index(path);
QVERIFY(index.isValid());
@@ -995,7 +1058,7 @@ void tst_QFileSystemModel::caseSensitivity()
if (!QFileSystemEngine::isCaseSensitive()) {
// QTBUG-31103, QTBUG-64147: Verify that files can be accessed by paths with fLipPeD case.
- for (int i = 0; i < paths.count(); ++i) {
+ for (int i = 0; i < paths.size(); ++i) {
const QModelIndex flippedCaseIndex = model->index(flipCase(paths.at(i)));
QCOMPARE(indexes.at(i), flippedCaseIndex);
}
@@ -1016,11 +1079,12 @@ void tst_QFileSystemModel::drives()
QFileSystemModel model;
model.setRootPath(path);
model.fetchMore(QModelIndex());
- QFileInfoList drives = QDir::drives();
+ const QFileInfoList drives = QDir::drives();
int driveCount = 0;
- foreach(const QFileInfo& driveRoot, drives)
+ for (const QFileInfo& driveRoot : drives) {
if (driveRoot.exists())
driveCount++;
+ }
QTRY_COMPARE(model.rowCount(), driveCount);
}
@@ -1045,6 +1109,8 @@ void tst_QFileSystemModel::dirsBeforeFiles()
}
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QModelIndex root = model->setRootPath(dir.absolutePath());
// Wait for model to be notified by the file system watcher
QTRY_COMPARE(model->rowCount(root), 2 * itemCount);
@@ -1119,6 +1185,8 @@ void tst_QFileSystemModel::permissions() // checks QTBUG-20503
const QString tmp = flatDirTestPath;
const QString file = tmp + QLatin1String("/f");
QScopedPointer<QFileSystemModel> model(new QFileSystemModel);
+ QAbstractItemModelTester tester(model.get());
+ tester.setUseFetchMore(false);
QVERIFY(createFiles(model.data(), tmp, QStringList{QLatin1String("f")}));
QVERIFY(QFile::setPermissions(file, permissions));
@@ -1183,6 +1251,9 @@ void tst_QFileSystemModel::specialFiles()
#ifndef Q_OS_UNIX
QSKIP("Not implemented");
#endif
+#ifdef Q_OS_ANDROID
+ QSKIP("Android does not allow access to root filesystem");
+#endif
QFileSystemModel model;
diff --git a/tests/auto/gui/itemmodels/qstandarditem/CMakeLists.txt b/tests/auto/gui/itemmodels/qstandarditem/CMakeLists.txt
index e5446d596a..db29eaaf94 100644
--- a/tests/auto/gui/itemmodels/qstandarditem/CMakeLists.txt
+++ b/tests/auto/gui/itemmodels/qstandarditem/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qstandarditem.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstandarditem Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstandarditem LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstandarditem
SOURCES
tst_qstandarditem.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.cpp b/tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.cpp
index 61683b20a6..70fb2b39d3 100644
--- a/tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.cpp
+++ b/tests/auto/gui/itemmodels/qstandarditem/tst_qstandarditem.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 <QTest>
@@ -782,10 +757,10 @@ void tst_QStandardItem::takeColumn()
QList<QStandardItem *> taken = item.takeColumn(column);
if (expectSuccess) {
- QCOMPARE(taken.count(), item.rowCount());
+ QCOMPARE(taken.size(), item.rowCount());
QCOMPARE(item.columnCount(), columns - 1);
int index = column;
- for (int i = 0; i < taken.count(); ++i) {
+ for (int i = 0; i < taken.size(); ++i) {
QCOMPARE(taken.at(i), originalChildren.takeAt(index));
index += item.columnCount();
}
@@ -843,10 +818,10 @@ void tst_QStandardItem::takeRow()
QList<QStandardItem *> taken = item.takeRow(row);
if (expectSuccess) {
- QCOMPARE(taken.count(), item.columnCount());
+ QCOMPARE(taken.size(), item.columnCount());
QCOMPARE(item.rowCount(), rows - 1);
int index = row * columns;
- for (int i = 0; i < taken.count(); ++i) {
+ for (int i = 0; i < taken.size(); ++i) {
QCOMPARE(taken.at(i), originalChildren.takeAt(index));
}
index = 0;
@@ -1009,8 +984,8 @@ void tst_QStandardItem::sortChildren()
QCOMPARE(two->child(1)->text(), QLatin1String("e"));
QCOMPARE(two->child(2)->text(), QLatin1String("f"));
- QCOMPARE(layoutAboutToBeChangedSpy.count(), (x == 0) ? 0 : 3);
- QCOMPARE(layoutChangedSpy.count(), (x == 0) ? 0 : 3);
+ QCOMPARE(layoutAboutToBeChangedSpy.size(), (x == 0) ? 0 : 3);
+ QCOMPARE(layoutChangedSpy.size(), (x == 0) ? 0 : 3);
if (x == 0)
delete item;
@@ -1026,11 +1001,37 @@ public:
int type() const override { return QStandardItem::UserType + 1; }
bool operator<(const QStandardItem &other) const override {
- return text().length() < other.text().length();
+ return text().size() < other.text().size();
}
using QStandardItem::clone;
using QStandardItem::emitDataChanged;
+
+ void setData(const QVariant &value, int role) override
+ {
+ switch (role) {
+ case Qt::DisplayRole:
+ QStandardItem::setData(value, role);
+ break;
+ default:
+ // setFlags() uses "UserRole - 1" to store the flags, which is an
+ // implementation detail not exposed in the docs.
+ QStandardItem::setData(value, role);
+ break;
+ }
+ }
+
+ QVariant data(int role) const override
+ {
+ switch (role) {
+ case Qt::DisplayRole:
+ return QStandardItem::data(role);
+ default:
+ // flags() uses "UserRole - 1" to get the flags, which is an implementation
+ // detail not exposed in the docs.
+ return QStandardItem::data(role);
+ }
+ }
};
Q_DECLARE_METATYPE(QStandardItem*)
@@ -1052,8 +1053,8 @@ void tst_QStandardItem::subclassing()
QSignalSpy itemChangedSpy(&model, &QStandardItemModel::itemChanged);
item->emitDataChanged();
- QCOMPARE(itemChangedSpy.count(), 1);
- QCOMPARE(itemChangedSpy.at(0).count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
+ QCOMPARE(itemChangedSpy.at(0).size(), 1);
QCOMPARE(qvariant_cast<QStandardItem*>(itemChangedSpy.at(0).at(0)), item);
CustomItem *child0 = new CustomItem("cc");
@@ -1066,6 +1067,12 @@ void tst_QStandardItem::subclassing()
QCOMPARE(item->child(0), child2);
QCOMPARE(item->child(1), child0);
QCOMPARE(item->child(2), child1);
+
+ item->setFlags(Qt::ItemFlags{0});
+ QCOMPARE(item->flags(), Qt::ItemFlags{0});
+
+ item->setFlags(Qt::ItemFlags{Qt::ItemIsEditable | Qt::ItemIsSelectable});
+ QCOMPARE(item->flags(), Qt::ItemFlags{Qt::ItemIsEditable | Qt::ItemIsSelectable});
}
void tst_QStandardItem::lessThan()
diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/CMakeLists.txt b/tests/auto/gui/itemmodels/qstandarditemmodel/CMakeLists.txt
index 49cbcbfa88..31ae25d008 100644
--- a/tests/auto/gui/itemmodels/qstandarditemmodel/CMakeLists.txt
+++ b/tests/auto/gui/itemmodels/qstandarditemmodel/CMakeLists.txt
@@ -1,16 +1,24 @@
-# Generated from qstandarditemmodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstandarditemmodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstandarditemmodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstandarditemmodel
SOURCES
tst_qstandarditemmodel.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
Qt::WidgetsPrivate
+ Qt::TestPrivate
)
diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
index 7758a5d5cc..ef2fd83d4c 100644
--- a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
+++ b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp
@@ -1,41 +1,22 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QStandardItemModel>
#include <QTreeView>
+#include <QMap>
#include <QSignalSpy>
#include <QAbstractItemModelTester>
#include <private/qabstractitemmodel_p.h>
+#include <private/qpropertytesthelper_p.h>
#include <private/qtreeview_p.h>
+#include <algorithm>
+
+using namespace Qt::StringLiterals;
+
class tst_QStandardItemModel : public QObject
{
Q_OBJECT
@@ -112,6 +93,7 @@ private slots:
void indexFromItem();
void itemFromIndex();
void getSetItemPrototype();
+ void getSetItemData_data();
void getSetItemData();
void setHeaderLabels_data();
void setHeaderLabels();
@@ -138,6 +120,7 @@ private slots:
void taskQTBUG_45114_setItemData();
void setItemPersistentIndex();
void signalsOnTakeItem();
+ void takeChild();
void createPersistentOnLayoutAboutToBeChanged();
private:
QStandardItemModel *m_model = nullptr;
@@ -473,16 +456,16 @@ void tst_QStandardItemModel::setHeaderData()
for (int i = 0; i < count; ++i) {
QString customString = QString("custom") + QString::number(i);
QCOMPARE(m_model->setHeaderData(i, orient, customString), true);
- QCOMPARE(headerDataChangedSpy.count(), 1);
- QCOMPARE(dataChangedSpy.count(), 0);
+ QCOMPARE(headerDataChangedSpy.size(), 1);
+ QCOMPARE(dataChangedSpy.size(), 0);
QVariantList args = headerDataChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<Qt::Orientation>(args.at(0)), orient);
QCOMPARE(args.at(1).toInt(), i);
QCOMPARE(args.at(2).toInt(), i);
QCOMPARE(m_model->headerData(i, orient).toString(), customString);
QCOMPARE(m_model->setHeaderData(i, orient, customString), true);
- QCOMPARE(headerDataChangedSpy.count(), 0);
- QCOMPARE(dataChangedSpy.count(), 0);
+ QCOMPARE(headerDataChangedSpy.size(), 0);
+ QCOMPARE(dataChangedSpy.size(), 0);
}
//check read from invalid sections
@@ -745,7 +728,7 @@ void tst_QStandardItemModel::data()
const QMap<int, QVariant> itmData = m_model->itemData(m_model->index(0, 0));
QCOMPARE(itmData.value(Qt::DisplayRole), QLatin1String("initialitem"));
QCOMPARE(itmData.value(Qt::ToolTipRole), QLatin1String("tooltip"));
- QVERIFY(!itmData.contains(Qt::UserRole - 1));
+ QVERIFY(!itmData.contains(Qt::UserRole - 1)); // Qt::UserRole - 1 is used to store flags
QVERIFY(m_model->itemData(QModelIndex()).isEmpty());
}
@@ -786,9 +769,9 @@ void tst_QStandardItemModel::clear()
model.clear();
- QCOMPARE(modelResetSpy.count(), 1);
- QCOMPARE(layoutChangedSpy.count(), 0);
- QCOMPARE(rowsRemovedSpy.count(), 0);
+ QCOMPARE(modelResetSpy.size(), 1);
+ QCOMPARE(layoutChangedSpy.size(), 0);
+ QCOMPARE(rowsRemovedSpy.size(), 0);
QCOMPARE(model.index(0, 0), QModelIndex());
QCOMPARE(model.columnCount(), 0);
QCOMPARE(model.rowCount(), 0);
@@ -830,8 +813,8 @@ void tst_QStandardItemModel::sort()
QFETCH(QStringList, expected);
// prepare model
QStandardItemModel model;
- QVERIFY(model.insertRows(0, initial.count(), QModelIndex()));
- QCOMPARE(model.rowCount(QModelIndex()), initial.count());
+ QVERIFY(model.insertRows(0, initial.size(), QModelIndex()));
+ QCOMPARE(model.rowCount(QModelIndex()), initial.size());
model.insertColumns(0, 1, QModelIndex());
QCOMPARE(model.columnCount(QModelIndex()), 1);
for (int row = 0; row < model.rowCount(QModelIndex()); ++row) {
@@ -847,8 +830,8 @@ void tst_QStandardItemModel::sort()
// sort
model.sort(0, sortOrder);
- QCOMPARE(layoutAboutToBeChangedSpy.count(), 1);
- QCOMPARE(layoutChangedSpy.count(), 1);
+ QCOMPARE(layoutAboutToBeChangedSpy.size(), 1);
+ QCOMPARE(layoutChangedSpy.size(), 1);
// make sure the model is sorted
for (int row = 0; row < model.rowCount(QModelIndex()); ++row) {
@@ -892,7 +875,7 @@ void tst_QStandardItemModel::sortRole()
QFETCH(QVariantList, expectedData);
QStandardItemModel model;
- for (int i = 0; i < initialText.count(); ++i) {
+ for (int i = 0; i < initialText.size(); ++i) {
QStandardItem *item = new QStandardItem;
item->setText(initialText.at(i));
item->setData(initialData.at(i), Qt::UserRole);
@@ -900,7 +883,7 @@ void tst_QStandardItemModel::sortRole()
}
model.setSortRole(sortRole);
model.sort(0, sortOrder);
- for (int i = 0; i < expectedText.count(); ++i) {
+ for (int i = 0; i < expectedText.size(); ++i) {
QStandardItem *item = model.item(i);
QCOMPARE(item->text(), expectedText.at(i));
QCOMPARE(item->data(Qt::UserRole), expectedData.at(i));
@@ -921,6 +904,9 @@ void tst_QStandardItemModel::sortRoleBindings()
sortRoleObserver.setBinding([&] { return model.sortRole(); });
model.setSortRole(Qt::EditRole);
QCOMPARE(sortRoleObserver, Qt::EditRole);
+
+ QTestPrivate::testReadWritePropertyBasics(model, static_cast<int>(Qt::DisplayRole),
+ static_cast<int>(Qt::EditRole), "sortRole");
}
void tst_QStandardItemModel::findItems()
@@ -931,15 +917,15 @@ void tst_QStandardItemModel::findItems()
model.item(1)->appendRow(new QStandardItem(QLatin1String("foo")));
QList<QStandardItem*> matches;
matches = model.findItems(QLatin1String("foo"), Qt::MatchExactly|Qt::MatchRecursive, 0);
- QCOMPARE(matches.count(), 2);
+ QCOMPARE(matches.size(), 2);
matches = model.findItems(QLatin1String("foo"), Qt::MatchExactly, 0);
- QCOMPARE(matches.count(), 1);
+ QCOMPARE(matches.size(), 1);
matches = model.findItems(QLatin1String("food"), Qt::MatchExactly|Qt::MatchRecursive, 0);
- QCOMPARE(matches.count(), 0);
+ QCOMPARE(matches.size(), 0);
matches = model.findItems(QLatin1String("foo"), Qt::MatchExactly|Qt::MatchRecursive, -1);
- QCOMPARE(matches.count(), 0);
+ QCOMPARE(matches.size(), 0);
matches = model.findItems(QLatin1String("foo"), Qt::MatchExactly|Qt::MatchRecursive, 1);
- QCOMPARE(matches.count(), 0);
+ QCOMPARE(matches.size(), 0);
}
void tst_QStandardItemModel::getSetHeaderItem()
@@ -1050,33 +1036,49 @@ void tst_QStandardItemModel::getSetItemPrototype()
QCOMPARE(model.itemPrototype(), nullptr);
}
+using RoleMap = QMap<int, QVariant>;
+using RoleList = QList<int>;
+
+static RoleMap getSetItemDataRoleMap(int textRole)
+{
+ return {{textRole, "text"_L1},
+ {Qt::StatusTipRole, "statusTip"_L1},
+ {Qt::ToolTipRole, "toolTip"_L1},
+ {Qt::WhatsThisRole, "whatsThis"_L1},
+ {Qt::SizeHintRole, QSize{64, 48}},
+ {Qt::FontRole, QFont{}},
+ {Qt::TextAlignmentRole, int(Qt::AlignLeft|Qt::AlignVCenter)},
+ {Qt::BackgroundRole, QColor(Qt::blue)},
+ {Qt::ForegroundRole, QColor(Qt::green)},
+ {Qt::CheckStateRole, int(Qt::PartiallyChecked)},
+ {Qt::AccessibleTextRole, "accessibleText"_L1},
+ {Qt::AccessibleDescriptionRole, "accessibleDescription"_L1}};
+}
+
+void tst_QStandardItemModel::getSetItemData_data()
+{
+ QTest::addColumn<RoleMap>("itemData");
+ QTest::addColumn<RoleMap>("expectedItemData");
+ QTest::addColumn<RoleList>("expectedRoles");
+
+ // QTBUG-112326: verify that text data set using Qt::EditRole is mapped to
+ // Qt::DisplayRole and both roles are in the changed signal
+ const RoleMap expectedItemData = getSetItemDataRoleMap(Qt::DisplayRole);
+ RoleList expectedRoles = expectedItemData.keys() << Qt::EditRole;
+ std::sort(expectedRoles.begin(), expectedRoles.end());
+
+ QTest::newRow("DisplayRole") << expectedItemData
+ << expectedItemData << expectedRoles;
+
+ QTest::newRow("EditRole") << getSetItemDataRoleMap(Qt::EditRole)
+ << expectedItemData << expectedRoles;
+}
+
void tst_QStandardItemModel::getSetItemData()
{
- QMap<int, QVariant> roles;
- QLatin1String text("text");
- roles.insert(Qt::DisplayRole, text);
- QLatin1String statusTip("statusTip");
- roles.insert(Qt::StatusTipRole, statusTip);
- QLatin1String toolTip("toolTip");
- roles.insert(Qt::ToolTipRole, toolTip);
- QLatin1String whatsThis("whatsThis");
- roles.insert(Qt::WhatsThisRole, whatsThis);
- QSize sizeHint(64, 48);
- roles.insert(Qt::SizeHintRole, sizeHint);
- QFont font;
- roles.insert(Qt::FontRole, font);
- Qt::Alignment textAlignment(Qt::AlignLeft|Qt::AlignVCenter);
- roles.insert(Qt::TextAlignmentRole, int(textAlignment));
- QColor backgroundColor(Qt::blue);
- roles.insert(Qt::BackgroundRole, backgroundColor);
- QColor textColor(Qt::green);
- roles.insert(Qt::ForegroundRole, textColor);
- Qt::CheckState checkState(Qt::PartiallyChecked);
- roles.insert(Qt::CheckStateRole, int(checkState));
- QLatin1String accessibleText("accessibleText");
- roles.insert(Qt::AccessibleTextRole, accessibleText);
- QLatin1String accessibleDescription("accessibleDescription");
- roles.insert(Qt::AccessibleDescriptionRole, accessibleDescription);
+ QFETCH(RoleMap, itemData);
+ QFETCH(RoleMap, expectedItemData);
+ QFETCH(RoleList, expectedRoles);
QStandardItemModel model;
model.insertRows(0, 1);
@@ -1085,11 +1087,17 @@ void tst_QStandardItemModel::getSetItemData()
QSignalSpy modelDataChangedSpy(
&model, &QStandardItemModel::dataChanged);
- QVERIFY(model.setItemData(idx, roles));
- QCOMPARE(modelDataChangedSpy.count(), 1);
- QVERIFY(model.setItemData(idx, roles));
- QCOMPARE(modelDataChangedSpy.count(), 1); //it was already changed once
- QCOMPARE(model.itemData(idx), roles);
+ QVERIFY(model.setItemData(idx, itemData));
+ QCOMPARE(modelDataChangedSpy.size(), 1);
+ const QVariantList &args = modelDataChangedSpy.constFirst();
+ QCOMPARE(args.size(), 3);
+ auto roleList = args.at(2).value<QList<int> >();
+ std::sort(roleList.begin(), roleList.end());
+ QCOMPARE(roleList, expectedRoles);
+
+ QVERIFY(model.setItemData(idx, itemData));
+ QCOMPARE(modelDataChangedSpy.size(), 1); //it was already changed once
+ QCOMPARE(model.itemData(idx), expectedItemData);
}
void tst_QStandardItemModel::setHeaderLabels_data()
@@ -1152,12 +1160,12 @@ void tst_QStandardItemModel::setHeaderLabels()
model.setHorizontalHeaderLabels(labels);
else
model.setVerticalHeaderLabels(labels);
- for (int i = 0; i < expectedLabels.count(); ++i)
+ for (int i = 0; i < expectedLabels.size(); ++i)
QCOMPARE(model.headerData(i, orientation).toString(), expectedLabels.at(i));
- QCOMPARE(columnsInsertedSpy.count(),
- (orientation == Qt::Vertical) ? 0 : labels.count() > columns);
- QCOMPARE(rowsInsertedSpy.count(),
- (orientation == Qt::Horizontal) ? 0 : labels.count() > rows);
+ QCOMPARE(columnsInsertedSpy.size(),
+ (orientation == Qt::Vertical) ? 0 : labels.size() > columns);
+ QCOMPARE(rowsInsertedSpy.size(),
+ (orientation == Qt::Horizontal) ? 0 : labels.size() > rows);
}
void tst_QStandardItemModel::itemDataChanged()
@@ -1168,8 +1176,8 @@ void tst_QStandardItemModel::itemDataChanged()
QSignalSpy itemChangedSpy(&model, &QStandardItemModel::itemChanged);
model.setItem(0, &item);
- QCOMPARE(dataChangedSpy.count(), 1);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
QModelIndex index = model.indexFromItem(&item);
QList<QVariant> args;
args = dataChangedSpy.takeFirst();
@@ -1179,8 +1187,8 @@ void tst_QStandardItemModel::itemDataChanged()
QCOMPARE(qvariant_cast<QStandardItem*>(args.at(0)), &item);
item.setData(QLatin1String("foo"), Qt::DisplayRole);
- QCOMPARE(dataChangedSpy.count(), 1);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = dataChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QModelIndex>(args.at(0)), index);
QCOMPARE(qvariant_cast<QModelIndex>(args.at(1)), index);
@@ -1188,12 +1196,12 @@ void tst_QStandardItemModel::itemDataChanged()
QCOMPARE(qvariant_cast<QStandardItem*>(args.at(0)), &item);
item.setData(item.data(Qt::DisplayRole), Qt::DisplayRole);
- QCOMPARE(dataChangedSpy.count(), 0);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.size(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
item.setFlags(Qt::ItemIsEnabled);
- QCOMPARE(dataChangedSpy.count(), 1);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = dataChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QModelIndex>(args.at(0)), index);
QCOMPARE(qvariant_cast<QModelIndex>(args.at(1)), index);
@@ -1201,8 +1209,8 @@ void tst_QStandardItemModel::itemDataChanged()
QCOMPARE(qvariant_cast<QStandardItem*>(args.at(0)), &item);
item.setFlags(item.flags());
- QCOMPARE(dataChangedSpy.count(), 0);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.size(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
}
void tst_QStandardItemModel::takeHeaderItem()
@@ -1330,7 +1338,7 @@ void tst_QStandardItemModel::setNullChild()
QSignalSpy spy(&model, &QAbstractItemModel::dataChanged);
item->setChild(0, nullptr);
QCOMPARE(item->child(0), nullptr);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QStandardItemModel::deleteChild()
@@ -1342,7 +1350,7 @@ void tst_QStandardItemModel::deleteChild()
QSignalSpy spy(&model, &QAbstractItemModel::dataChanged);
delete item->child(0);
QCOMPARE(item->child(0), nullptr);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QStandardItemModel::rootItemFlags()
@@ -1583,8 +1591,8 @@ void tst_QStandardItemModel::removeRowsAndColumns()
QStringList row_list = QString("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20").split(',');
QStringList col_list = row_list;
QStandardItemModel model;
- for (int c = 0; c < col_list.count(); c++)
- for (int r = 0; r < row_list.count(); r++)
+ for (int c = 0; c < col_list.size(); c++)
+ for (int r = 0; r < row_list.size(); r++)
model.setItem(r, c, new QStandardItem(row_list[r] + QLatin1Char('x') + col_list[c]));
VERIFY_MODEL
@@ -1605,16 +1613,22 @@ void tst_QStandardItemModel::removeRowsAndColumns()
VERIFY_MODEL
QList<QStandardItem *> row_taken = model.takeRow(6);
- QCOMPARE(row_taken.count(), col_list.count());
- for (int c = 0; c < col_list.count(); c++)
- QCOMPARE(row_taken[c]->text() , row_list[6] + QLatin1Char('x') + col_list[c]);
+ QCOMPARE(row_taken.size(), col_list.size());
+ for (qsizetype c = 0; c < row_taken.size(); c++) {
+ auto item = row_taken.at(c);
+ QCOMPARE(item->text() , row_list[6] + QLatin1Char('x') + col_list[c]);
+ delete item;
+ }
row_list.remove(6);
VERIFY_MODEL
QList<QStandardItem *> col_taken = model.takeColumn(10);
- QCOMPARE(col_taken.count(), row_list.count());
- for (int r = 0; r < row_list.count(); r++)
- QCOMPARE(col_taken[r]->text() , row_list[r] + QLatin1Char('x') + col_list[10]);
+ QCOMPARE(col_taken.size(), row_list.size());
+ for (qsizetype r = 0; r < col_taken.size(); r++) {
+ auto item = col_taken.at(r);
+ QCOMPARE(item->text() , row_list[r] + QLatin1Char('x') + col_list[10]);
+ delete item;
+ }
col_list.remove(10);
VERIFY_MODEL
}
@@ -1630,8 +1644,8 @@ void tst_QStandardItemModel::itemRoleNames()
QStringList row_list = QString("1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20").split(',');
QStringList col_list = row_list;
QStandardItemModel model;
- for (int c = 0; c < col_list.count(); c++)
- for (int r = 0; r < row_list.count(); r++)
+ for (int c = 0; c < col_list.size(); c++)
+ for (int r = 0; r < row_list.size(); r++)
model.setItem(r, c, new QStandardItem(row_list[r] + QLatin1Char('x') + col_list[c]));
VERIFY_MODEL
@@ -1671,7 +1685,7 @@ void tst_QStandardItemModel::taskQTBUG_45114_setItemData()
QModelIndex index = item->index();
QCOMPARE(model.itemData(index).size(), 3);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QMap<int, QVariant> roles;
@@ -1679,21 +1693,21 @@ void tst_QStandardItemModel::taskQTBUG_45114_setItemData()
roles.insert(Qt::UserRole + 2, 2);
model.setItemData(index, roles);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
roles.insert(Qt::UserRole + 1, 1);
roles.insert(Qt::UserRole + 2, 2);
roles.insert(Qt::UserRole + 3, QVariant());
model.setItemData(index, roles);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
roles.clear();
roles.insert(Qt::UserRole + 1, 10);
roles.insert(Qt::UserRole + 3, 12);
model.setItemData(index, roles);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QMap<int, QVariant> itemRoles = model.itemData(index);
QCOMPARE(itemRoles.size(), 4);
@@ -1705,13 +1719,13 @@ void tst_QStandardItemModel::taskQTBUG_45114_setItemData()
roles.insert(Qt::UserRole + 3, 1);
model.setItemData(index, roles);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
roles.clear();
roles.insert(Qt::UserRole + 3, QVariant());
model.setItemData(index, roles);
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
itemRoles = model.itemData(index);
QCOMPARE(itemRoles.size(), 3);
@@ -1764,13 +1778,13 @@ void tst_QStandardItemModel::signalsOnTakeItem() // QTBUG-89145
QSignalSpy dataChangedSpy(&m, &QAbstractItemModel::dataChanged);
QStandardItem *const takenItem = m.takeItem(1, 0);
for (auto &&spy : removeSpies) {
- QCOMPARE(spy->count(), 1);
+ QCOMPARE(spy->size(), 1);
const auto spyArgs = spy->takeFirst();
QCOMPARE(spyArgs.at(0).value<QModelIndex>(), parentIndex);
QCOMPARE(spyArgs.at(1).toInt(), 0);
QCOMPARE(spyArgs.at(2).toInt(), 1);
}
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
const auto dataChangedSpyArgs = dataChangedSpy.takeFirst();
QCOMPARE(dataChangedSpyArgs.at(0).value<QModelIndex>(), m.index(1, 0));
QCOMPARE(dataChangedSpyArgs.at(1).value<QModelIndex>(), m.index(1, 0));
@@ -1784,6 +1798,7 @@ void tst_QStandardItemModel::signalsOnTakeItem() // QTBUG-89145
QCOMPARE(takenItem->model(), nullptr);
QCOMPARE(takenItem->child(0, 0)->model(), nullptr);
QCOMPARE(m.index(1, 0).data(), QVariant());
+ delete takenItem;
}
void tst_QStandardItemModel::createPersistentOnLayoutAboutToBeChanged() // QTBUG-93466
@@ -1821,5 +1836,36 @@ void tst_QStandardItemModel::createPersistentOnLayoutAboutToBeChanged() // QTBUG
QCOMPARE(layoutChangedSpy.size(), 1);
}
+void tst_QStandardItemModel::takeChild() // QTBUG-117900
+{
+ {
+ // with model
+ QStandardItemModel model1;
+ QStandardItemModel model2;
+ QStandardItem base1("base1");
+ model1.setItem(0, 0, &base1);
+ QStandardItem base2("base2");
+ model2.setItem(0, 0, &base2);
+ auto item = new QStandardItem("item1");
+ item->appendRow(new QStandardItem("child"));
+ base1.appendRow(item);
+ base2.appendRow(base1.takeChild(0, 0));
+ QCOMPARE(base1.child(0, 0), nullptr);
+ QCOMPARE(base2.child(0, 0), item);
+ }
+ {
+ // without model
+ QStandardItem base1("base1");
+ QStandardItem base2("base2");
+ auto item = new QStandardItem("item1");
+ item->appendRow(new QStandardItem("child"));
+ base1.appendRow(item);
+ base2.appendRow(base1.takeChild(0, 0));
+ QCOMPARE(base1.child(0, 0), nullptr);
+ QCOMPARE(base2.child(0, 0), item);
+ }
+}
+
+
QTEST_MAIN(tst_QStandardItemModel)
#include "tst_qstandarditemmodel.moc"
diff --git a/tests/auto/gui/kernel/CMakeLists.txt b/tests/auto/gui/kernel/CMakeLists.txt
index 74657ed1b6..9acd817610 100644
--- a/tests/auto/gui/kernel/CMakeLists.txt
+++ b/tests/auto/gui/kernel/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from kernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(QT_FEATURE_action)
add_subdirectory(qaction)
@@ -9,6 +10,7 @@ add_subdirectory(qcursor)
add_subdirectory(qdrag)
add_subdirectory(qevent)
add_subdirectory(qfileopenevent)
+add_subdirectory(qguichronotimer)
add_subdirectory(qguieventdispatcher)
add_subdirectory(qguitimer)
if(NOT ANDROID AND NOT WASM)
@@ -22,11 +24,13 @@ add_subdirectory(qpalette)
add_subdirectory(qscreen)
add_subdirectory(qsurfaceformat)
add_subdirectory(qwindow)
-add_subdirectory(qguiapplication)
+if(QT_FEATURE_private_tests)
+ add_subdirectory(qguiapplication)
+endif()
add_subdirectory(qpixelformat)
add_subdirectory(qrasterwindow)
add_subdirectory(qaddpostroutine)
-if(NOT ANDROID AND NOT UIKIT)
+if(NOT UIKIT)
add_subdirectory(qclipboard)
endif()
if(TARGET Qt::Network)
diff --git a/tests/auto/gui/kernel/noqteventloop/CMakeLists.txt b/tests/auto/gui/kernel/noqteventloop/CMakeLists.txt
index 9e47156add..e9d3d96af9 100644
--- a/tests/auto/gui/kernel/noqteventloop/CMakeLists.txt
+++ b/tests/auto/gui/kernel/noqteventloop/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from noqteventloop.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_noqteventloop Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_noqteventloop LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_noqteventloop
SOURCES
tst_noqteventloop.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -18,6 +25,6 @@ qt_internal_add_test(tst_noqteventloop
#####################################################################
qt_internal_extend_target(tst_noqteventloop CONDITION QT_FEATURE_dynamicgl AND WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
diff --git a/tests/auto/gui/kernel/noqteventloop/tst_noqteventloop.cpp b/tests/auto/gui/kernel/noqteventloop/tst_noqteventloop.cpp
index 65f2329e3d..65fe4a83ed 100644
--- a/tests/auto/gui/kernel/noqteventloop/tst_noqteventloop.cpp
+++ b/tests/auto/gui/kernel/noqteventloop/tst_noqteventloop.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 <QTest>
@@ -156,7 +131,8 @@ public:
}
- void run() {
+ void run() override
+ {
struct ScopedCleanup
{
/* This is in order to ensure that the window is hidden when returning from run(),
diff --git a/tests/auto/gui/kernel/qaction/CMakeLists.txt b/tests/auto/gui/kernel/qaction/CMakeLists.txt
index ed0a0a8a5b..8f70a36c61 100644
--- a/tests/auto/gui/kernel/qaction/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qaction/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qaction.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qaction_kernel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qaction_kernel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qaction_kernel
SOURCES
tst_qaction.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/kernel/qaction/tst_qaction.cpp b/tests/auto/gui/kernel/qaction/tst_qaction.cpp
index 7f817a5c98..4a4d1a75c8 100644
--- a/tests/auto/gui/kernel/qaction/tst_qaction.cpp
+++ b/tests/auto/gui/kernel/qaction/tst_qaction.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSignalSpy>
@@ -234,11 +209,11 @@ void tst_QAction::setToolTip()
QFETCH(QStringList, values);
QFETCH(QStringList, expectedToolTips);
- QCOMPARE(properties.count(), values.count());
- QCOMPARE(properties.count(), expectedToolTips.count());
+ QCOMPARE(properties.size(), values.size());
+ QCOMPARE(properties.size(), expectedToolTips.size());
QAction action(nullptr);
- for (int i = 0; i < properties.count(); ++i) {
+ for (int i = 0; i < properties.size(); ++i) {
const auto property = properties.at(i);
const auto value = values.at(i);
const auto expectedToolTip = expectedToolTips.at(i);
@@ -297,19 +272,19 @@ void tst_QAction::task229128TriggeredSignalWithoutActiongroup()
// test without a group
const QScopedPointer<QAction> actionWithoutGroup(new QAction("Test", nullptr));
QSignalSpy spyWithoutGroup(actionWithoutGroup.data(), QOverload<bool>::of(&QAction::triggered));
- QCOMPARE(spyWithoutGroup.count(), 0);
+ QCOMPARE(spyWithoutGroup.size(), 0);
actionWithoutGroup->trigger();
// signal should be emitted
- QCOMPARE(spyWithoutGroup.count(), 1);
+ QCOMPARE(spyWithoutGroup.size(), 1);
// it is now a checkable checked action
actionWithoutGroup->setCheckable(true);
actionWithoutGroup->setChecked(true);
spyWithoutGroup.clear();
- QCOMPARE(spyWithoutGroup.count(), 0);
+ QCOMPARE(spyWithoutGroup.size(), 0);
actionWithoutGroup->trigger();
// signal should be emitted
- QCOMPARE(spyWithoutGroup.count(), 1);
+ QCOMPARE(spyWithoutGroup.size(), 1);
}
void tst_QAction::setData() // QTBUG-62006
@@ -317,14 +292,14 @@ void tst_QAction::setData() // QTBUG-62006
QAction act(nullptr);
QSignalSpy spy(&act, &QAction::changed);
QCOMPARE(act.data(), QVariant());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
act.setData(QVariant());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
act.setData(-1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
act.setData(-1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QAction::setEnabledSetVisible()
@@ -333,22 +308,22 @@ void tst_QAction::setEnabledSetVisible()
QSignalSpy spy(&action, &QAction::enabledChanged);
QVERIFY(action.isEnabled());
QVERIFY(action.isVisible());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
action.setVisible(false);
QVERIFY(!action.isEnabled());
QVERIFY(!action.isVisible());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
action.setEnabled(false);
QVERIFY(!action.isEnabled());
QVERIFY(!action.isVisible());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
action.setVisible(true);
QVERIFY(!action.isEnabled());
QVERIFY(action.isVisible());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
action.resetEnabled();
QVERIFY(action.isEnabled());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_QAction::setCheckabledSetChecked()
@@ -359,37 +334,37 @@ void tst_QAction::setCheckabledSetChecked()
QSignalSpy checkableSpy(&action, &QAction::checkableChanged);
QVERIFY(!action.isCheckable());
QVERIFY(!action.isChecked());
- QCOMPARE(changedSpy.count(), 0);
- QCOMPARE(checkedSpy.count(), 0);
- QCOMPARE(checkableSpy.count(), 0);
+ QCOMPARE(changedSpy.size(), 0);
+ QCOMPARE(checkedSpy.size(), 0);
+ QCOMPARE(checkableSpy.size(), 0);
action.setCheckable(true);
QVERIFY(action.isCheckable());
QVERIFY(!action.isChecked());
- QCOMPARE(changedSpy.count(), 1);
- QCOMPARE(checkedSpy.count(), 0);
- QCOMPARE(checkableSpy.count(), 1);
+ QCOMPARE(changedSpy.size(), 1);
+ QCOMPARE(checkedSpy.size(), 0);
+ QCOMPARE(checkableSpy.size(), 1);
action.setChecked(true);
QVERIFY(action.isCheckable());
QVERIFY(action.isChecked());
- QCOMPARE(changedSpy.count(), 2);
- QCOMPARE(checkedSpy.count(), 1);
- QCOMPARE(checkableSpy.count(), 1);
+ QCOMPARE(changedSpy.size(), 2);
+ QCOMPARE(checkedSpy.size(), 1);
+ QCOMPARE(checkableSpy.size(), 1);
action.setCheckable(false);
QVERIFY(!action.isCheckable());
QVERIFY(!action.isChecked());
- QCOMPARE(changedSpy.count(), 3);
- QCOMPARE(checkedSpy.count(), 2);
- QCOMPARE(checkableSpy.count(), 2);
+ QCOMPARE(changedSpy.size(), 3);
+ QCOMPARE(checkedSpy.size(), 2);
+ QCOMPARE(checkableSpy.size(), 2);
action.setCheckable(true);
QVERIFY(action.isCheckable());
QVERIFY(action.isChecked());
- QCOMPARE(changedSpy.count(), 4);
- QCOMPARE(checkedSpy.count(), 3);
- QCOMPARE(checkableSpy.count(), 3);
+ QCOMPARE(changedSpy.size(), 4);
+ QCOMPARE(checkedSpy.size(), 3);
+ QCOMPARE(checkableSpy.size(), 3);
}
QTEST_MAIN(tst_QAction)
diff --git a/tests/auto/gui/kernel/qactiongroup/CMakeLists.txt b/tests/auto/gui/kernel/qactiongroup/CMakeLists.txt
index 10354f865c..360a20cc95 100644
--- a/tests/auto/gui/kernel/qactiongroup/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qactiongroup/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qactiongroup.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qactiongroup_kernel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qactiongroup_kernel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qactiongroup_kernel
SOURCES
tst_qactiongroup.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/kernel/qactiongroup/tst_qactiongroup.cpp b/tests/auto/gui/kernel/qactiongroup/tst_qactiongroup.cpp
index 8ac3a0b4c7..a9e331e111 100644
--- a/tests/auto/gui/kernel/qactiongroup/tst_qactiongroup.cpp
+++ b/tests/auto/gui/kernel/qactiongroup/tst_qactiongroup.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/gui/kernel/qaddpostroutine/CMakeLists.txt b/tests/auto/gui/kernel/qaddpostroutine/CMakeLists.txt
index 454196ce1b..46a0475521 100644
--- a/tests/auto/gui/kernel/qaddpostroutine/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qaddpostroutine/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qaddpostroutine.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qaddpostroutine Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qaddpostroutine LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qaddpostroutine
SOURCES
tst_qaddpostroutine.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/kernel/qaddpostroutine/tst_qaddpostroutine.cpp b/tests/auto/gui/kernel/qaddpostroutine/tst_qaddpostroutine.cpp
index 731547f681..c5cc0a9b20 100644
--- a/tests/auto/gui/kernel/qaddpostroutine/tst_qaddpostroutine.cpp
+++ b/tests/auto/gui/kernel/qaddpostroutine/tst_qaddpostroutine.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
diff --git a/tests/auto/gui/kernel/qbackingstore/CMakeLists.txt b/tests/auto/gui/kernel/qbackingstore/CMakeLists.txt
index 64ef31a0b5..811da8bb53 100644
--- a/tests/auto/gui/kernel/qbackingstore/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qbackingstore/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qbackingstore.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qbackingstore Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qbackingstore LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qbackingstore
SOURCES
tst_qbackingstore.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/kernel/qbackingstore/tst_qbackingstore.cpp b/tests/auto/gui/kernel/qbackingstore/tst_qbackingstore.cpp
index afc40bff50..a830d14be8 100644
--- a/tests/auto/gui/kernel/qbackingstore/tst_qbackingstore.cpp
+++ b/tests/auto/gui/kernel/qbackingstore/tst_qbackingstore.cpp
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** 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 <qwindow.h>
#include <qbackingstore.h>
#include <qpa/qplatformbackingstore.h>
+#include <qpa/qplatformintegration.h>
+#include <private/qguiapplication_p.h>
#include <qpainter.h>
#include <QTest>
@@ -55,6 +32,8 @@ private slots:
void scroll();
void flush();
+
+ void staticContents();
};
void tst_QBackingStore::initTestCase_data()
@@ -114,6 +93,11 @@ void tst_QBackingStore::paint()
QRect rect(0, 0, 100, 100);
backingStore.resize(rect.size());
+ // Partial fill of a fresh backingstore should not crash
+ backingStore.beginPaint(QRect(0, 0, 50, 50));
+ backingStore.endPaint();
+ backingStore.flush(rect);
+
// Two rounds, with flush in between
for (int i = 0; i < 2; ++i) {
backingStore.beginPaint(rect);
@@ -264,7 +248,7 @@ public:
backingStore.resize(size());
}
- void exposeEvent(QExposeEvent *event) override
+ void paintEvent(QPaintEvent *event) override
{
QRect rect(QPoint(), size());
@@ -276,10 +260,7 @@ public:
backingStore.endPaint();
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
backingStore.flush(event->region().boundingRect());
-QT_WARNING_POP
}
private:
@@ -295,5 +276,79 @@ void tst_QBackingStore::flush()
QTRY_VERIFY(window.isExposed());
}
+void tst_QBackingStore::staticContents()
+{
+ const auto *integration = QGuiApplicationPrivate::platformIntegration();
+ if (!integration->hasCapability(QPlatformIntegration::BackingStoreStaticContents))
+ QSKIP("Platform does not support static backingstore content");
+
+ QWindow window;
+ window.create();
+
+ const auto dpr = window.devicePixelRatio();
+
+ QBackingStore backingStore(&window);
+
+ QRect initialRect(0, 0, 100, 100);
+
+ // Static contents without paint first should not crash
+ backingStore.setStaticContents(initialRect);
+ backingStore.resize(initialRect.size());
+ QCOMPARE(backingStore.size(), initialRect.size());
+ backingStore.beginPaint(QRect(0, 0, 50, 50));
+ backingStore.endPaint();
+ backingStore.handle()->toImage();
+
+ {
+ backingStore.setStaticContents(QRect());
+ backingStore.beginPaint(initialRect);
+ QPainter p(backingStore.paintDevice());
+ p.fillRect(initialRect, Qt::green);
+ p.end();
+ backingStore.endPaint();
+
+ QImage image = backingStore.handle()->toImage();
+ if (image.isNull())
+ QSKIP("Platform backingstore does not implement toImage");
+
+ QCOMPARE(image.pixelColor(initialRect.topLeft() * dpr), Qt::green);
+ QCOMPARE(image.pixelColor(initialRect.bottomLeft() * dpr), Qt::green);
+ QCOMPARE(image.pixelColor(initialRect.topRight() * dpr), Qt::green);
+ QCOMPARE(image.pixelColor(initialRect.bottomRight() * dpr), Qt::green);
+ }
+
+ {
+ backingStore.setStaticContents(initialRect);
+
+ QRect resizedRect(0, 0, 200, 200);
+ backingStore.resize(resizedRect.size());
+
+ QRegion repaintRegion = QRegion(resizedRect) - QRegion(initialRect);
+
+ backingStore.beginPaint(repaintRegion);
+ QPainter p(backingStore.paintDevice());
+ for (auto repaintRect : repaintRegion)
+ p.fillRect(repaintRect, Qt::red);
+ p.end();
+ backingStore.endPaint();
+
+ QImage image = backingStore.handle()->toImage();
+ if (image.isNull())
+ QSKIP("Platform backingstore does not implement toImage");
+
+ QCOMPARE(image.pixelColor(initialRect.topLeft() * dpr), Qt::green);
+ QCOMPARE(image.pixelColor(initialRect.bottomLeft() * dpr), Qt::green);
+ QCOMPARE(image.pixelColor(initialRect.topRight() * dpr), Qt::green);
+ QCOMPARE(image.pixelColor(initialRect.bottomRight() * dpr), Qt::green);
+
+ for (auto repaintRect : repaintRegion) {
+ QCOMPARE(image.pixelColor(repaintRect.topLeft() * dpr), Qt::red);
+ QCOMPARE(image.pixelColor(repaintRect.bottomLeft() * dpr), Qt::red);
+ QCOMPARE(image.pixelColor(repaintRect.topRight() * dpr), Qt::red);
+ QCOMPARE(image.pixelColor(repaintRect.bottomRight() * dpr), Qt::red);
+ }
+ }
+}
+
#include <tst_qbackingstore.moc>
QTEST_MAIN(tst_QBackingStore);
diff --git a/tests/auto/gui/kernel/qclipboard/CMakeLists.txt b/tests/auto/gui/kernel/qclipboard/CMakeLists.txt
index 05eba972d6..b7a0467758 100644
--- a/tests/auto/gui/kernel/qclipboard/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qclipboard/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qclipboard.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_qclipboard LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(copier)
add_subdirectory(paster)
diff --git a/tests/auto/gui/kernel/qclipboard/copier/CMakeLists.txt b/tests/auto/gui/kernel/qclipboard/copier/CMakeLists.txt
index ef599b121e..ea7def8c0d 100644
--- a/tests/auto/gui/kernel/qclipboard/copier/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qclipboard/copier/CMakeLists.txt
@@ -1,23 +1,16 @@
-# Generated from copier.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## copier Binary:
#####################################################################
-# special case begin
set(args OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
-# special case end
qt_internal_add_executable(copier
- ${args} # special case
+ ${args}
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:copier.pro:WIN32:
-# DESTDIR = "../copier"
diff --git a/tests/auto/gui/kernel/qclipboard/copier/main.cpp b/tests/auto/gui/kernel/qclipboard/copier/main.cpp
index 32e91a9939..362ede38b7 100644
--- a/tests/auto/gui/kernel/qclipboard/copier/main.cpp
+++ b/tests/auto/gui/kernel/qclipboard/copier/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 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 <QtGui/QGuiApplication>
#include <QtGui/QClipboard>
#include <QtCore/QStringList>
diff --git a/tests/auto/gui/kernel/qclipboard/paster/CMakeLists.txt b/tests/auto/gui/kernel/qclipboard/paster/CMakeLists.txt
index 571ae4944e..9bc1985ee4 100644
--- a/tests/auto/gui/kernel/qclipboard/paster/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qclipboard/paster/CMakeLists.txt
@@ -1,23 +1,16 @@
-# Generated from paster.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## paster Binary:
#####################################################################
-# special case begin
set(args OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
-# special case end
qt_internal_add_executable(paster
- ${args} # special case
+ ${args}
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:paster.pro:WIN32:
-# DESTDIR = "../paster"
diff --git a/tests/auto/gui/kernel/qclipboard/paster/main.cpp b/tests/auto/gui/kernel/qclipboard/paster/main.cpp
index 7fca8af1cb..bf47b10ba6 100644
--- a/tests/auto/gui/kernel/qclipboard/paster/main.cpp
+++ b/tests/auto/gui/kernel/qclipboard/paster/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 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 <QtGui/QGuiApplication>
#include <QtGui/QClipboard>
#include <QtGui/QImage>
diff --git a/tests/auto/gui/kernel/qclipboard/test/BLACKLIST b/tests/auto/gui/kernel/qclipboard/test/BLACKLIST
new file mode 100644
index 0000000000..3ca7791b37
--- /dev/null
+++ b/tests/auto/gui/kernel/qclipboard/test/BLACKLIST
@@ -0,0 +1,5 @@
+# QTBUG-87429
+[testSignals]
+android
+[setMimeData]
+android
diff --git a/tests/auto/gui/kernel/qclipboard/test/CMakeLists.txt b/tests/auto/gui/kernel/qclipboard/test/CMakeLists.txt
index 0e9fa8f40d..fad30c16fd 100644
--- a/tests/auto/gui/kernel/qclipboard/test/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qclipboard/test/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qclipboard Test:
@@ -8,7 +9,7 @@ qt_internal_add_test(tst_qclipboard
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../tst_qclipboard.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -17,9 +18,8 @@ qt_internal_add_test(tst_qclipboard
#####################################################################
qt_internal_extend_target(tst_qclipboard CONDITION MACOS
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWAppKit}
)
-#### Keys ignored in scope 6:.:.:test.pro:NOT ANDROID:
# TEST_HELPER_INSTALLS = "../copier/copier" "../paster/paster"
diff --git a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp
index 42af0dea2c..30366c6aa1 100644
--- a/tests/auto/gui/kernel/qclipboard/tst_qclipboard.cpp
+++ b/tests/auto/gui/kernel/qclipboard/tst_qclipboard.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 <QTest>
@@ -46,8 +21,9 @@
#ifdef Q_OS_WIN
# include <QtGui/private/qguiapplication_p.h>
-# include <QtGui/private/qwindowsmime_p.h>
+# include <QtGui/qwindowsmimeconverter.h>
# include <QtGui/qpa/qplatformintegration.h>
+# include <QtCore/qt_windows.h>
#endif
class tst_QClipboard : public QObject
@@ -66,6 +42,7 @@ private slots:
void testSignals();
void setMimeData();
void clearBeforeSetText();
+ void getTextFromHTMLMimeType();
# ifdef Q_OS_WIN
void testWindowsMimeRegisterType();
void testWindowsMime_data();
@@ -86,7 +63,7 @@ void tst_QClipboard::initTestCase()
#if QT_CONFIG(clipboard)
void tst_QClipboard::init()
{
-#if QT_CONFIG(process)
+#if QT_CONFIG(process) && !defined(Q_OS_ANDROID)
const QString testdataDir = QFileInfo(QFINDTESTDATA("copier")).absolutePath();
QVERIFY2(QDir::setCurrent(testdataDir), qPrintable("Could not chdir to " + testdataDir));
#endif
@@ -149,7 +126,7 @@ public:
operator bool() const
{
- if (m_timer.elapsed() && !m_spy.count())
+ if (m_timer.elapsed() && !m_spy.size())
return true;
m_spy.clear();
return false;
@@ -191,11 +168,11 @@ void tst_QClipboard::testSignals()
// Test the default mode signal.
clipboard->setText(text);
- QTRY_COMPARE(dataChangedSpy.count(), 1);
- QCOMPARE(searchChangedSpy.count(), 0);
- QCOMPARE(selectionChangedSpy.count(), 0);
- QCOMPARE(changedSpy.count(), 1);
- QCOMPARE(changedSpy.at(0).count(), 1);
+ QTRY_COMPARE(dataChangedSpy.size(), 1);
+ QCOMPARE(searchChangedSpy.size(), 0);
+ QCOMPARE(selectionChangedSpy.size(), 0);
+ QCOMPARE(changedSpy.size(), 1);
+ QCOMPARE(changedSpy.at(0).size(), 1);
QCOMPARE(qvariant_cast<QClipboard::Mode>(changedSpy.at(0).at(0)), QClipboard::Clipboard);
changedSpy.clear();
@@ -203,29 +180,29 @@ void tst_QClipboard::testSignals()
// Test the selection mode signal.
if (clipboard->supportsSelection()) {
clipboard->setText(text, QClipboard::Selection);
- QCOMPARE(selectionChangedSpy.count(), 1);
- QCOMPARE(changedSpy.count(), 1);
- QCOMPARE(changedSpy.at(0).count(), 1);
+ QCOMPARE(selectionChangedSpy.size(), 1);
+ QCOMPARE(changedSpy.size(), 1);
+ QCOMPARE(changedSpy.at(0).size(), 1);
QCOMPARE(qvariant_cast<QClipboard::Mode>(changedSpy.at(0).at(0)), QClipboard::Selection);
} else {
- QCOMPARE(selectionChangedSpy.count(), 0);
+ QCOMPARE(selectionChangedSpy.size(), 0);
}
- QCOMPARE(dataChangedSpy.count(), 1);
- QCOMPARE(searchChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.size(), 1);
+ QCOMPARE(searchChangedSpy.size(), 0);
changedSpy.clear();
// Test the search mode signal.
if (clipboard->supportsFindBuffer()) {
clipboard->setText(text, QClipboard::FindBuffer);
- QCOMPARE(searchChangedSpy.count(), 1);
- QCOMPARE(changedSpy.count(), 1);
- QCOMPARE(changedSpy.at(0).count(), 1);
+ QCOMPARE(searchChangedSpy.size(), 1);
+ QCOMPARE(changedSpy.size(), 1);
+ QCOMPARE(changedSpy.at(0).size(), 1);
QCOMPARE(qvariant_cast<QClipboard::Mode>(changedSpy.at(0).at(0)), QClipboard::FindBuffer);
} else {
- QCOMPARE(searchChangedSpy.count(), 0);
+ QCOMPARE(searchChangedSpy.size(), 0);
}
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
}
#if defined(Q_OS_WIN) || defined(Q_OS_MAC) || defined(Q_OS_QNX)
@@ -365,16 +342,16 @@ void tst_QClipboard::setMimeData()
QGuiApplication::clipboard()->clear(QClipboard::FindBuffer);
if (QGuiApplication::clipboard()->supportsSelection())
- QCOMPARE(spySelection.count(), 1);
+ QCOMPARE(spySelection.size(), 1);
else
- QCOMPARE(spySelection.count(), 0);
+ QCOMPARE(spySelection.size(), 0);
if (QGuiApplication::clipboard()->supportsFindBuffer())
- QCOMPARE(spyFindBuffer.count(), 1);
+ QCOMPARE(spyFindBuffer.size(), 1);
else
- QCOMPARE(spyFindBuffer.count(), 0);
+ QCOMPARE(spyFindBuffer.size(), 0);
- QTRY_COMPARE(spyData.count(), 1);
+ QTRY_COMPARE(spyData.size(), 1);
// an other crash test
data = new QMimeData;
@@ -401,16 +378,16 @@ void tst_QClipboard::setMimeData()
QGuiApplication::clipboard()->setMimeData(newData, QClipboard::FindBuffer);
if (QGuiApplication::clipboard()->supportsSelection())
- QCOMPARE(spySelection.count(), 1);
+ QCOMPARE(spySelection.size(), 1);
else
- QCOMPARE(spySelection.count(), 0);
+ QCOMPARE(spySelection.size(), 0);
if (QGuiApplication::clipboard()->supportsFindBuffer())
- QCOMPARE(spyFindBuffer.count(), 1);
+ QCOMPARE(spyFindBuffer.size(), 1);
else
- QCOMPARE(spyFindBuffer.count(), 0);
+ QCOMPARE(spyFindBuffer.size(), 0);
- QTRY_COMPARE(spyData.count(), 1);
+ QTRY_COMPARE(spyData.size(), 1);
}
void tst_QClipboard::clearBeforeSetText()
@@ -449,12 +426,30 @@ void tst_QClipboard::clearBeforeSetText()
QCOMPARE(QGuiApplication::clipboard()->text(), text);
}
+void tst_QClipboard::getTextFromHTMLMimeType()
+{
+ QClipboard * clipboard = QGuiApplication::clipboard();
+ QMimeData * mimeData = new QMimeData();
+ const QString testString("TEST");
+ const QString htmlString(QLatin1String("<html><body>") + testString + QLatin1String("</body></html>"));
+
+ mimeData->setText(testString);
+ mimeData->setHtml(htmlString);
+ clipboard->setMimeData(mimeData);
+
+ QCOMPARE(clipboard->text(), testString);
+ QVERIFY(clipboard->mimeData()->hasText());
+ QVERIFY(clipboard->mimeData()->hasHtml());
+ QCOMPARE(clipboard->mimeData()->text(), testString);
+ QCOMPARE(clipboard->mimeData()->html(), htmlString);
+}
+
# ifdef Q_OS_WIN
-using QWindowsMime = QNativeInterface::Private::QWindowsMime;
+using QWindowsMimeConverter = QWindowsMimeConverter;
using QWindowsApplication = QNativeInterface::Private::QWindowsApplication;
-class TestMime : public QWindowsMime
+class TestMime : public QWindowsMimeConverter
{
public:
bool canConvertFromMime(const FORMATETC &, const QMimeData *) const override
diff --git a/tests/auto/gui/kernel/qcursor/CMakeLists.txt b/tests/auto/gui/kernel/qcursor/CMakeLists.txt
index 1304dd2ba2..52c88fc231 100644
--- a/tests/auto/gui/kernel/qcursor/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qcursor/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qcursor.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcursor Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcursor LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcursor
SOURCES
tst_qcursor.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/kernel/qcursor/tst_qcursor.cpp b/tests/auto/gui/kernel/qcursor/tst_qcursor.cpp
index eb33cce95b..edc44b9ea6 100644
--- a/tests/auto/gui/kernel/qcursor/tst_qcursor.cpp
+++ b/tests/auto/gui/kernel/qcursor/tst_qcursor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QtTest/QTest>
#include <qcursor.h>
diff --git a/tests/auto/gui/kernel/qdrag/CMakeLists.txt b/tests/auto/gui/kernel/qdrag/CMakeLists.txt
index b03f82da39..015cfe70d0 100644
--- a/tests/auto/gui/kernel/qdrag/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qdrag/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdrag.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdrag Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdrag LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdrag
SOURCES
tst_qdrag.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/kernel/qdrag/tst_qdrag.cpp b/tests/auto/gui/kernel/qdrag/tst_qdrag.cpp
index 5c243df6d0..9e0d5ad0f4 100644
--- a/tests/auto/gui/kernel/qdrag/tst_qdrag.cpp
+++ b/tests/auto/gui/kernel/qdrag/tst_qdrag.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 <QTest>
diff --git a/tests/auto/gui/kernel/qevent/CMakeLists.txt b/tests/auto/gui/kernel/qevent/CMakeLists.txt
index 2bb22eb469..c6ad861f25 100644
--- a/tests/auto/gui/kernel/qevent/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qevent/CMakeLists.txt
@@ -1,10 +1,20 @@
-# Generated from qevent.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qevent Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qevent LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qevent
SOURCES
tst_qevent.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::CorePrivate
)
diff --git a/tests/auto/gui/kernel/qevent/tst_qevent.cpp b/tests/auto/gui/kernel/qevent/tst_qevent.cpp
index 6542ed5ad3..6960f99af2 100644
--- a/tests/auto/gui/kernel/qevent/tst_qevent.cpp
+++ b/tests/auto/gui/kernel/qevent/tst_qevent.cpp
@@ -1,36 +1,72 @@
-/****************************************************************************
-**
-** 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 <QTest>
-#include <QtCore/qcoreapplication.h>
-#include <QtCore/qcoreevent.h>
+#include <QtGui/qguiapplication.h>
+#include <QtGui/qevent.h>
+#include <QtCore/private/qfutureinterface_p.h>
+
+#define FOR_EACH_CORE_EVENT(X) \
+ /* qcoreevent.h */ \
+ X(QEvent, (QEvent::None)) \
+ X(QTimerEvent, (42)) \
+ X(QChildEvent, (QEvent::ChildAdded, nullptr)) \
+ X(QDynamicPropertyChangeEvent, ("size")) \
+ /* qfutureinterface_p.h */ \
+ X(QFutureCallOutEvent, ()) \
+ /* end */
+
+#define FOR_EACH_GUI_EVENT(X) \
+ /* qevent.h */ \
+ X(QInputEvent, (QEvent::None, nullptr)) \
+ X(QPointerEvent, (QEvent::None, nullptr)) \
+ /* doesn't work with nullptr: */ \
+ X(QSinglePointEvent, (QEvent::None, QPointingDevice::primaryPointingDevice(), {}, {}, {}, {}, {}, {})) \
+ X(QEnterEvent, ({}, {}, {})) \
+ X(QMouseEvent, (QEvent::None, {}, {}, {}, {}, {}, {}, {}, QPointingDevice::primaryPointingDevice())) \
+ X(QHoverEvent, (QEvent::None, {}, {}, QPointF{})) \
+ X(QWheelEvent, ({}, {}, {}, {}, {}, {}, {}, {})) \
+ X(QTabletEvent, (QEvent::None, QPointingDevice::primaryPointingDevice(), {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {})) \
+ X(QNativeGestureEvent, ({}, QPointingDevice::primaryPointingDevice(), 0, {}, {}, {}, {}, {})) \
+ X(QKeyEvent, (QEvent::None, 0, {})) \
+ X(QFocusEvent, (QEvent::None)) \
+ X(QPaintEvent, (QRect{0, 0, 100, 100})) \
+ X(QMoveEvent, ({}, {})) \
+ X(QExposeEvent, ({})) \
+ X(QPlatformSurfaceEvent, ({})) \
+ X(QResizeEvent, ({}, {})) \
+ X(QCloseEvent, ()) \
+ X(QIconDragEvent, ()) \
+ X(QShowEvent, ()) \
+ X(QHideEvent, ()) \
+ X(QContextMenuEvent, (QContextMenuEvent::Reason::Keyboard, {}, {})) \
+ X(QInputMethodEvent, ()) \
+ X(QInputMethodQueryEvent, ({})) \
+ X(QDropEvent, ({}, {}, {}, {}, {})) \
+ X(QDragMoveEvent, ({}, {}, {}, {}, {})) \
+ X(QDragEnterEvent, ({}, {}, {}, {}, {})) \
+ X(QDragLeaveEvent, ()) \
+ X(QHelpEvent, ({}, {}, {})) \
+ X(QStatusTipEvent, ({})) \
+ X(QWhatsThisClickedEvent, ({})) \
+ X(QActionEvent, (0, nullptr)) \
+ X(QFileOpenEvent, (QString{})) \
+ X(QToolBarChangeEvent, (false)) \
+ X(QShortcutEvent, ({}, 0)) \
+ X(QWindowStateChangeEvent, ({})) \
+ X(QTouchEvent, (QEvent::None)) \
+ X(QScrollPrepareEvent, ({})) \
+ X(QScrollEvent, ({}, {}, {})) \
+ X(QScreenOrientationChangeEvent, (nullptr, {})) \
+ X(QApplicationStateChangeEvent, ({})) \
+ /* end */
+
+#define FOR_EACH_EVENT(X) \
+ FOR_EACH_CORE_EVENT(X) \
+ FOR_EACH_GUI_EVENT(X) \
+ /* end */
class tst_QEvent : public QObject
{
@@ -40,6 +76,7 @@ public:
~tst_QEvent();
private slots:
+ void clone() const;
void registerEventType_data();
void registerEventType();
void exhaustEventTypeRegistration(); // keep behind registerEventType() test
@@ -55,6 +92,18 @@ tst_QEvent::tst_QEvent()
tst_QEvent::~tst_QEvent()
{ }
+void tst_QEvent::clone() const
+{
+#define ACTION(Type, Init) do { \
+ const std::unique_ptr<const Type> e(new Type Init); \
+ auto c = e->clone(); \
+ static_assert(std::is_same_v<decltype(c), Type *>); \
+ delete c; \
+ } while (0);
+
+ FOR_EACH_EVENT(ACTION)
+}
+
void tst_QEvent::registerEventType_data()
{
QTest::addColumn<int>("hint");
diff --git a/tests/auto/gui/kernel/qfileopenevent/CMakeLists.txt b/tests/auto/gui/kernel/qfileopenevent/CMakeLists.txt
index 2404833737..9906400a66 100644
--- a/tests/auto/gui/kernel/qfileopenevent/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qfileopenevent/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qfileopenevent.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_qfileopenevent LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(test)
add_subdirectory(qfileopeneventexternal)
diff --git a/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/CMakeLists.txt b/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/CMakeLists.txt
index 658a70619f..7a39bc111c 100644
--- a/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qfileopeneventexternal.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qfileopeneventexternal Binary:
@@ -8,9 +9,6 @@ qt_internal_add_executable(qfileopeneventexternal
GUI
SOURCES
qfileopeneventexternal.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
-
-#### Keys ignored in scope 1:.:.:qfileopeneventexternal.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/qfileopeneventexternal.cpp b/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/qfileopeneventexternal.cpp
index f21b0680bc..bd74e7497f 100644
--- a/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/qfileopeneventexternal.cpp
+++ b/tests/auto/gui/kernel/qfileopenevent/qfileopeneventexternal/qfileopeneventexternal.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 <QtGui>
#include <QEvent>
@@ -39,8 +14,8 @@ struct MyApplication : public QGuiApplication
{
if (event->type() == QEvent::FileOpen) {
QFileOpenEvent* ev = static_cast<QFileOpenEvent *>(event);
- QFile file;
- bool ok = ev->openFile(file, QFile::Append | QFile::Unbuffered);
+ QFile file(ev->file());
+ bool ok = file.open(QFile::Append | QFile::Unbuffered);
if (ok)
file.write(QByteArray("+external"));
return true;
diff --git a/tests/auto/gui/kernel/qfileopenevent/test/CMakeLists.txt b/tests/auto/gui/kernel/qfileopenevent/test/CMakeLists.txt
index faa5e5acfc..d7f4e32f70 100644
--- a/tests/auto/gui/kernel/qfileopenevent/test/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qfileopenevent/test/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfileopenevent Test:
@@ -7,6 +8,6 @@
qt_internal_add_test(tst_qfileopenevent
SOURCES
tst_qfileopenevent.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/kernel/qfileopenevent/test/tst_qfileopenevent.cpp b/tests/auto/gui/kernel/qfileopenevent/test/tst_qfileopenevent.cpp
index 31cb036515..4b9a23ffcf 100644
--- a/tests/auto/gui/kernel/qfileopenevent/test/tst_qfileopenevent.cpp
+++ b/tests/auto/gui/kernel/qfileopenevent/test/tst_qfileopenevent.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 <QtCore/QTemporaryDir>
#include <QTest>
@@ -79,7 +54,7 @@ void tst_qfileopenevent::cleanupTestCase()
void tst_qfileopenevent::createFile(const QString &filename, const QByteArray &content)
{
QFile file(filename);
- file.open(QFile::WriteOnly);
+ QVERIFY(file.open(QFile::WriteOnly));
file.write(content);
file.close();
}
@@ -103,8 +78,9 @@ void tst_qfileopenevent::constructor()
QByteArray tst_qfileopenevent::readFileContent(QFileOpenEvent& event)
{
- QFile file;
- event.openFile(file, QFile::ReadOnly);
+ QFile file(event.file());
+ if (!file.open(QFile::ReadOnly))
+ qFatal("Cannot open file %s", qPrintable(event.file()));
file.seek(0);
QByteArray data = file.readAll();
return data;
@@ -112,8 +88,8 @@ QByteArray tst_qfileopenevent::readFileContent(QFileOpenEvent& event)
bool tst_qfileopenevent::appendFileContent(QFileOpenEvent& event, const QByteArray& writeContent)
{
- QFile file;
- bool ok = event.openFile(file, QFile::Append | QFile::Unbuffered);
+ QFile file(event.file());
+ bool ok = file.open(QFile::Append | QFile::Unbuffered);
if (ok)
ok = file.write(writeContent) == writeContent.size();
return ok;
@@ -152,8 +128,8 @@ void tst_qfileopenevent::handleLifetime()
QScopedPointer<QFileOpenEvent> event(createFileAndEvent(QLatin1String("testHandleLifetime"), QByteArray("test content")));
// open a QFile after the original RFile is closed
- QFile qFile;
- QCOMPARE(event->openFile(qFile, QFile::Append | QFile::Unbuffered), true);
+ QFile qFile(event->file());
+ QVERIFY(qFile.open(QFile::Append | QFile::Unbuffered));
event.reset(0);
// write to the QFile after the event is closed
@@ -163,7 +139,7 @@ void tst_qfileopenevent::handleLifetime()
// check the content
QFile checkContent("testHandleLifetime");
- checkContent.open(QFile::ReadOnly);
+ QVERIFY(checkContent.open(QFile::ReadOnly));
QString content(checkContent.readAll());
QCOMPARE(content, QLatin1String("test content+closed original handles"));
checkContent.close();
@@ -177,7 +153,8 @@ void tst_qfileopenevent::multiOpen()
QFile files[5];
for (int i=0; i<5; i++) {
- QCOMPARE(event->openFile(files[i], QFile::ReadOnly), true);
+ files[i].setFileName(event->file());
+ QVERIFY(files[i].open(QFile::ReadOnly));
}
for (int i=0; i<5; i++)
files[i].seek(i);
diff --git a/tests/auto/gui/kernel/qguiapplication/BLACKLIST b/tests/auto/gui/kernel/qguiapplication/BLACKLIST
index 2f1e5f333e..3fa6c4880b 100644
--- a/tests/auto/gui/kernel/qguiapplication/BLACKLIST
+++ b/tests/auto/gui/kernel/qguiapplication/BLACKLIST
@@ -1,6 +1,2 @@
-[focusObject]
-ubuntu-16.04
-opensuse-42.3
-
[quitOnLastWindowClosedWithEventLoopLocker]
b2qt
diff --git a/tests/auto/gui/kernel/qguiapplication/CMakeLists.txt b/tests/auto/gui/kernel/qguiapplication/CMakeLists.txt
index ffd07cad26..6f1f845edd 100644
--- a/tests/auto/gui/kernel/qguiapplication/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qguiapplication/CMakeLists.txt
@@ -1,60 +1,48 @@
-# Generated from qguiapplication.pro.
-
-if(NOT QT_FEATURE_private_tests)
- return()
-endif()
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qguiapplication Test:
#####################################################################
-# special case begin
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qguiapplication LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
if (WIN32)
set(target_version "1.2.3.4")
else()
set(target_version "1.2.3")
endif()
-# special case end
+
+# Resources:
+set(tst_qguiapplication_resource_files
+ "icons/appicon.png"
+ "icons/usericon.png"
+)
qt_internal_add_test(tst_qguiapplication
- VERSION ${target_version} # special case
+ VERSION ${target_version}
SOURCES
- ../../../corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp ../../../corelib/kernel/qcoreapplication/tst_qcoreapplication.h # special case
+ ../../../corelib/kernel/qcoreapplication/tst_qcoreapplication.cpp ../../../corelib/kernel/qcoreapplication/tst_qcoreapplication.h
tst_qguiapplication.cpp
DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0x050E00
+ QT_QGUIAPPLICATIONTEST=1
INCLUDE_DIRECTORIES
../../../corelib/kernel/qcoreapplication
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::GuiPrivate
+ TESTDATA ${tst_qguiapplication_resource_files}
+ BUILTIN_TESTDATA
)
-# Resources:
-set(tst_qguiapplication_resource_files
- "icons/appicon.png"
- "icons/usericon.png"
-)
-
-qt_internal_add_resource(tst_qguiapplication "tst_qguiapplication"
- PREFIX
- "/"
- FILES
- ${tst_qguiapplication_resource_files}
-)
-
-# special case begin
+if (ANDROID)
+ set_property(TARGET tst_qguiapplication PROPERTY QT_ANDROID_VERSION_NAME ${target_version})
+endif()
if (APPLE)
set_property(TARGET tst_qguiapplication PROPERTY MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist")
set_property(TARGET tst_qguiapplication PROPERTY PROPERTY MACOSX_BUNDLE TRUE)
endif()
-# special case end
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 3:.:../../../corelib/kernel/qcoreapplication:../../../corelib/kernel/qcoreapplication/qcoreapplication.pro:WIN32:
-# VERSION = "1.2.3.4"
-
-#### Keys ignored in scope 4:.:../../../corelib/kernel/qcoreapplication:../../../corelib/kernel/qcoreapplication/qcoreapplication.pro:else:
-# VERSION = "1.2.3"
diff --git a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
index 836419659b..6b8700f580 100644
--- a/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.cpp
+++ b/tests/auto/gui/kernel/qguiapplication/tst_qguiapplication.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 <QTest>
@@ -72,6 +47,7 @@ private slots:
void changeFocusWindow();
void keyboardModifiers();
void palette();
+ void paletteNoCrash();
void font();
void modalWindow();
void quitOnLastWindowClosed();
@@ -85,6 +61,8 @@ private slots:
void staticFunctions();
+ void topLevelAt();
+
void settableStyleHints_data();
void settableStyleHints(); // Needs to run last as it changes style hints.
};
@@ -123,20 +101,20 @@ void tst_QGuiApplication::displayName()
QGuiApplication::setApplicationName("The Core Application");
QCOMPARE(QGuiApplication::applicationName(), QString::fromLatin1("The Core Application"));
QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("The Core Application"));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QGuiApplication::setApplicationDisplayName("The GUI Application");
QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("The GUI Application"));
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QGuiApplication::setApplicationName("The Core Application 2");
QCOMPARE(QGuiApplication::applicationName(), QString::fromLatin1("The Core Application 2"));
QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("The GUI Application"));
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QGuiApplication::setApplicationDisplayName("The GUI Application 2");
QCOMPARE(QGuiApplication::applicationDisplayName(), QString::fromLatin1("The GUI Application 2"));
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
}
void tst_QGuiApplication::desktopFileName()
@@ -147,8 +125,8 @@ void tst_QGuiApplication::desktopFileName()
QCOMPARE(QGuiApplication::desktopFileName(), QString());
- QGuiApplication::setDesktopFileName("io.qt.QGuiApplication.desktop");
- QCOMPARE(QGuiApplication::desktopFileName(), QString::fromLatin1("io.qt.QGuiApplication.desktop"));
+ QGuiApplication::setDesktopFileName("io.qt.QGuiApplication");
+ QCOMPARE(QGuiApplication::desktopFileName(), QString::fromLatin1("io.qt.QGuiApplication"));
QGuiApplication::setDesktopFileName(QString());
QCOMPARE(QGuiApplication::desktopFileName(), QString());
@@ -247,12 +225,12 @@ void tst_QGuiApplication::focusObject()
window1.setFocusObject(&obj1);
QCOMPARE(app.focusObject(), &obj1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
window1.setFocusObject(&obj2);
QCOMPARE(app.focusObject(), &obj2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
window2.setFocusObject(&obj3);
@@ -261,12 +239,12 @@ void tst_QGuiApplication::focusObject()
QVERIFY(QTest::qWaitForWindowExposed(&window2));
QTRY_COMPARE(app.focusWindow(), &window2);
QCOMPARE(app.focusObject(), &obj3);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
// focus change on unfocused window does not show
spy.clear();
window1.setFocusObject(&obj1);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(app.focusObject(), &obj3);
}
@@ -278,13 +256,13 @@ void tst_QGuiApplication::allWindows()
QWindow *window2 = new QWindow(window1);
QVERIFY(app.allWindows().contains(window1));
QVERIFY(app.allWindows().contains(window2));
- QCOMPARE(app.allWindows().count(), 2);
+ QCOMPARE(app.allWindows().size(), 2);
delete window1;
window1 = nullptr;
window2 = nullptr;
QVERIFY(!app.allWindows().contains(window2));
QVERIFY(!app.allWindows().contains(window1));
- QCOMPARE(app.allWindows().count(), 0);
+ QCOMPARE(app.allWindows().size(), 0);
}
void tst_QGuiApplication::topLevelWindows()
@@ -295,13 +273,13 @@ void tst_QGuiApplication::topLevelWindows()
QWindow *window2 = new QWindow(window1);
QVERIFY(app.topLevelWindows().contains(window1));
QVERIFY(!app.topLevelWindows().contains(window2));
- QCOMPARE(app.topLevelWindows().count(), 1);
+ QCOMPARE(app.topLevelWindows().size(), 1);
delete window1;
window1 = nullptr;
window2 = nullptr;
QVERIFY(!app.topLevelWindows().contains(window2));
QVERIFY(!app.topLevelWindows().contains(window1));
- QCOMPARE(app.topLevelWindows().count(), 0);
+ QCOMPARE(app.topLevelWindows().size(), 0);
}
class ShowCloseShowWindow : public QWindow
@@ -482,16 +460,12 @@ void tst_QGuiApplication::keyboardModifiers()
QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
// wheel events
- QPoint global = window->mapToGlobal(center);
QPoint delta(0, 1);
- QWindowSystemInterface::handleWheelEvent(window.data(), center, global, delta, delta, Qt::NoModifier);
- QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::AllEvents);
+ QTest::wheelEvent(window.data(), center, delta, delta, Qt::NoModifier);
QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::NoModifier);
- QWindowSystemInterface::handleWheelEvent(window.data(), center, global, delta, delta, Qt::AltModifier);
- QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::AllEvents);
+ QTest::wheelEvent(window.data(), center, delta, delta, Qt::AltModifier);
QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::AltModifier);
- QWindowSystemInterface::handleWheelEvent(window.data(), center, global, delta, delta, Qt::ControlModifier);
- QWindowSystemInterface::sendWindowSystemEvents(QEventLoop::AllEvents);
+ QTest::wheelEvent(window.data(), center, delta, delta, Qt::ControlModifier);
QCOMPARE(QGuiApplication::keyboardModifiers(), Qt::ControlModifier);
// touch events
@@ -545,52 +519,78 @@ void tst_QGuiApplication::palette()
// The default application palette is not resolved
QVERIFY(!QGuiApplication::palette().resolveMask());
+ // TODO: add event processing instead of the signal
+#if QT_DEPRECATED_SINCE(6, 0)
QSignalSpy signalSpy(&app, SIGNAL(paletteChanged(QPalette)));
+#endif
QPalette oldPalette = QGuiApplication::palette();
QPalette newPalette = QPalette(Qt::red);
QGuiApplication::setPalette(newPalette);
QVERIFY(palettesMatch(QGuiApplication::palette(), newPalette));
- QCOMPARE(signalSpy.count(), 1);
+#if QT_DEPRECATED_SINCE(6, 0)
+ QCOMPARE(signalSpy.size(), 1);
QVERIFY(palettesMatch(signalSpy.at(0).at(0).value<QPalette>(), newPalette));
+#endif
QCOMPARE(QGuiApplication::palette(), QPalette());
QGuiApplication::setPalette(oldPalette);
QVERIFY(palettesMatch(QGuiApplication::palette(), oldPalette));
- QCOMPARE(signalSpy.count(), 2);
+#if QT_DEPRECATED_SINCE(6, 0)
+ QCOMPARE(signalSpy.size(), 2);
QVERIFY(palettesMatch(signalSpy.at(1).at(0).value<QPalette>(), oldPalette));
+#endif
QCOMPARE(QGuiApplication::palette(), QPalette());
QGuiApplication::setPalette(oldPalette);
QVERIFY(palettesMatch(QGuiApplication::palette(), oldPalette));
- QCOMPARE(signalSpy.count(), 2);
+#if QT_DEPRECATED_SINCE(6, 0)
+ QCOMPARE(signalSpy.size(), 2);
+#endif
QCOMPARE(QGuiApplication::palette(), QPalette());
}
+void tst_QGuiApplication::paletteNoCrash()
+{
+ QGuiApplication::setDesktopSettingsAware(false);
+ int argc = 1;
+ char *argv[] = { const_cast<char*>("tst_qguiapplication") };
+ // this would crash on windows (QTBUG-111527)
+ QGuiApplication a(argc, argv);
+}
+
void tst_QGuiApplication::font()
{
int argc = 1;
char *argv[] = { const_cast<char*>("tst_qguiapplication") };
QGuiApplication app(argc, argv);
+#if QT_DEPRECATED_SINCE(6, 0)
QSignalSpy signalSpy(&app, SIGNAL(fontChanged(QFont)));
+#endif
QFont oldFont = QGuiApplication::font();
QFont newFont = QFont("BogusFont", 33);
QGuiApplication::setFont(newFont);
QCOMPARE(QGuiApplication::font(), newFont);
- QCOMPARE(signalSpy.count(), 1);
+#if QT_DEPRECATED_SINCE(6, 0)
+ QCOMPARE(signalSpy.size(), 1);
QCOMPARE(signalSpy.at(0).at(0), QVariant(newFont));
+#endif
QGuiApplication::setFont(oldFont);
QCOMPARE(QGuiApplication::font(), oldFont);
- QCOMPARE(signalSpy.count(), 2);
+#if QT_DEPRECATED_SINCE(6, 0)
+ QCOMPARE(signalSpy.size(), 2);
QCOMPARE(signalSpy.at(1).at(0), QVariant(oldFont));
+#endif
QGuiApplication::setFont(oldFont);
QCOMPARE(QGuiApplication::font(), oldFont);
- QCOMPARE(signalSpy.count(), 2);
+#if QT_DEPRECATED_SINCE(6, 0)
+ QCOMPARE(signalSpy.size(), 2);
+#endif
}
class BlockableWindow : public QWindow
@@ -895,9 +895,9 @@ void tst_QGuiApplication::quitOnLastWindowClosed()
app.exec();
- QCOMPARE(spyAboutToQuit.count(), 1);
+ QCOMPARE(spyAboutToQuit.size(), 1);
// Should be around 10 if closing caused the quit
- QVERIFY2(spyTimeout.count() < 15, QByteArray::number(spyTimeout.count()).constData());
+ QVERIFY2(spyTimeout.size() < 15, QByteArray::number(spyTimeout.size()).constData());
}
void tst_QGuiApplication::quitOnLastWindowClosedMulti()
@@ -938,7 +938,7 @@ void tst_QGuiApplication::quitOnLastWindowClosedMulti()
app.exec();
QVERIFY(!prematureQuit);
- QCOMPARE(spyAboutToQuit.count(), 1); // fired only once
+ QCOMPARE(spyAboutToQuit.size(), 1); // fired only once
}
void tst_QGuiApplication::dontQuitOnLastWindowClosed()
@@ -966,8 +966,8 @@ void tst_QGuiApplication::dontQuitOnLastWindowClosed()
app.setQuitOnLastWindowClosed(true); // restore underlying static to default value
- QCOMPARE(spyTimeout.count(), 1); // quit timer fired
- QCOMPARE(spyLastWindowClosed.count(), 1); // lastWindowClosed emitted
+ QCOMPARE(spyTimeout.size(), 1); // quit timer fired
+ QCOMPARE(spyLastWindowClosed.size(), 1); // lastWindowClosed emitted
}
class QuitSpy : public QObject
@@ -1156,8 +1156,8 @@ void tst_QGuiApplication::layoutDirection()
{
qRegisterMetaType<Qt::LayoutDirection>();
- Qt::LayoutDirection oldDirection = QGuiApplication::layoutDirection();
- Qt::LayoutDirection newDirection = oldDirection == Qt::LeftToRight ? Qt::RightToLeft : Qt::LeftToRight;
+ const Qt::LayoutDirection oldDirection = QGuiApplication::layoutDirection();
+ const Qt::LayoutDirection newDirection = oldDirection == Qt::LeftToRight ? Qt::RightToLeft : Qt::LeftToRight;
QGuiApplication::setLayoutDirection(newDirection);
QCOMPARE(QGuiApplication::layoutDirection(), newDirection);
@@ -1169,14 +1169,70 @@ void tst_QGuiApplication::layoutDirection()
QGuiApplication::setLayoutDirection(oldDirection);
QCOMPARE(QGuiApplication::layoutDirection(), oldDirection);
- QCOMPARE(signalSpy.count(), 1);
+ QCOMPARE(signalSpy.size(), 1);
QCOMPARE(signalSpy.at(0).at(0).toInt(), static_cast<int>(oldDirection));
QGuiApplication::setLayoutDirection(oldDirection);
QCOMPARE(QGuiApplication::layoutDirection(), oldDirection);
- QCOMPARE(signalSpy.count(), 1);
+ QCOMPARE(signalSpy.size(), 1);
+
+ // with QGuiApplication instantiated, install a translator that gives us control
+ class LayoutDirectionTranslator : public QTranslator
+ {
+ public:
+ LayoutDirectionTranslator(Qt::LayoutDirection direction)
+ : direction(direction)
+ {}
+
+ bool isEmpty() const override { return false; }
+ QString translate(const char *context, const char *sourceText, const char *disambiguation, int n) const override
+ {
+ if (QByteArrayView(sourceText) == "QT_LAYOUT_DIRECTION")
+ return direction == Qt::LeftToRight ? QLatin1String("LTR") : QLatin1String("RTL");
+ return QTranslator::translate(context, sourceText, disambiguation, n);
+ }
+
+ const Qt::LayoutDirection direction;
+ };
+
+ int layoutDirectionChangedCount = 0;
+ // reset to auto-detection, should be back to oldDirection now
+ QGuiApplication::setLayoutDirection(Qt::LayoutDirectionAuto);
+ QCOMPARE(QGuiApplication::layoutDirection(), oldDirection);
+ signalSpy.clear();
+ {
+ // this translator doesn't change the direction
+ LayoutDirectionTranslator translator(oldDirection);
+ QGuiApplication::installTranslator(&translator);
+ QCOMPARE(QGuiApplication::layoutDirection(), translator.direction);
+ QCOMPARE(signalSpy.size(), layoutDirectionChangedCount);
+ }
+ QCOMPARE(signalSpy.size(), layoutDirectionChangedCount); // ltrTranslator removed, no change
+
+ // install a new translator that changes the direction
+ {
+ LayoutDirectionTranslator translator(newDirection);
+ QGuiApplication::installTranslator(&translator);
+ QCOMPARE(QGuiApplication::layoutDirection(), translator.direction);
+ QCOMPARE(signalSpy.size(), ++layoutDirectionChangedCount);
+ }
+ // rtlTranslator removed
+ QCOMPARE(signalSpy.size(), ++layoutDirectionChangedCount);
+
+ // override translation
+ QGuiApplication::setLayoutDirection(newDirection);
+ QCOMPARE(signalSpy.size(), ++layoutDirectionChangedCount);
+ {
+ // this translator will be ignored
+ LayoutDirectionTranslator translator(oldDirection);
+ QGuiApplication::installTranslator(&translator);
+ QCOMPARE(QGuiApplication::layoutDirection(), newDirection);
+ QCOMPARE(signalSpy.size(), layoutDirectionChangedCount);
+ }
+ QCOMPARE(signalSpy.size(), layoutDirectionChangedCount);
}
+
void tst_QGuiApplication::globalShareContext()
{
#ifndef QT_NO_OPENGL
@@ -1267,6 +1323,40 @@ void tst_QGuiApplication::staticFunctions()
QPixmap::defaultDepth();
}
+void tst_QGuiApplication::topLevelAt()
+{
+ int argc = 1;
+ char *argv[] = { const_cast<char*>("tst_qguiapplication") };
+ QGuiApplication app(argc, argv);
+
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("QGuiApplication::topLevelAt() is not Wayland compliant, see also QTBUG-121015");
+
+ QWindow bottom;
+ bottom.setObjectName("Bottom");
+ bottom.setFlag(Qt::FramelessWindowHint);
+ bottom.setGeometry(200, 200, 200, 200);
+ bottom.showNormal();
+ QVERIFY(QTest::qWaitForWindowExposed(&bottom));
+ QTRY_COMPARE(app.topLevelAt(QPoint(300, 300)), &bottom);
+
+ QWindow top;
+ top.setObjectName("Top");
+ top.setFlag(Qt::FramelessWindowHint);
+ top.setGeometry(200, 200, 200, 200);
+ top.showNormal();
+ QVERIFY(QTest::qWaitForWindowExposed(&top));
+ top.raise();
+ QTRY_COMPARE(app.topLevelAt(QPoint(300, 300)), &top);
+
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowMasks))
+ QSKIP("QWindow::setMask() is not supported.");
+
+ top.setMask(QRect(0, 0, 50, 50));
+ QTRY_COMPARE(app.topLevelAt(QPoint(300, 300)), &bottom);
+ QTRY_COMPARE(app.topLevelAt(QPoint(225, 225)), &top);
+}
+
void tst_QGuiApplication::settableStyleHints_data()
{
QTest::addColumn<bool>("appInstance");
diff --git a/tests/auto/gui/kernel/qguichronotimer/CMakeLists.txt b/tests/auto/gui/kernel/qguichronotimer/CMakeLists.txt
new file mode 100644
index 0000000000..37848d8cec
--- /dev/null
+++ b/tests/auto/gui/kernel/qguichronotimer/CMakeLists.txt
@@ -0,0 +1,38 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qguichronotimer Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qguichronotimer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+function(addGuiChronoTimerTest test)
+ qt_internal_add_test(${test}
+ SOURCES
+ ../../../corelib/kernel/qchronotimer/tst_qchronotimer.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::TestPrivate
+ )
+endfunction()
+
+addGuiChronoTimerTest(tst_qguichronotimer)
+qt_internal_extend_target(tst_qguichronotimer
+ DEFINES
+ tst_Qtimer=tst_QGuiChronoTimer
+)
+
+if(QT_FEATURE_glib AND UNIX)
+ addGuiChronoTimerTest(tst_qguichronotimer_no_glib)
+ qt_internal_extend_target(tst_qguichronotimer_no_glib
+ DEFINES
+ DISABLE_GLIB
+ tst_QTimer=tst_QGuiChronoTimer_no_glib # Class name in the unittest
+ )
+endif()
diff --git a/tests/auto/gui/kernel/qguieventdispatcher/CMakeLists.txt b/tests/auto/gui/kernel/qguieventdispatcher/CMakeLists.txt
index b1c0508198..62299f77df 100644
--- a/tests/auto/gui/kernel/qguieventdispatcher/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qguieventdispatcher/CMakeLists.txt
@@ -1,12 +1,40 @@
-# Generated from qguieventdispatcher.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qguieventdispatcher Test:
#####################################################################
-qt_internal_add_test(tst_qguieventdispatcher
- SOURCES
- ../../../corelib/kernel/qeventdispatcher/tst_qeventdispatcher.cpp
- PUBLIC_LIBRARIES
- Qt::Gui
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qguieventdispatcher LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+set(test_names "tst_qguieventdispatcher")
+if(QT_FEATURE_glib AND UNIX)
+ list(APPEND test_names "tst_qguieventdispatcher_no_glib")
+endif()
+
+foreach(test ${test_names})
+ qt_internal_add_test(${test}
+ NO_BATCH
+ SOURCES
+ ../../../corelib/kernel/qeventdispatcher/tst_qeventdispatcher.cpp
+ LIBRARIES
+ Qt::Gui
+ )
+endforeach()
+
+qt_internal_extend_target(tst_qguieventdispatcher
+ DEFINES
+ tst_QEventDispatcher=tst_qguieventdispatcher
)
+
+if (TARGET tst_qeventdispatcher_no_glib)
+ qt_internal_extend_target(tst_qguieventdispatcher_no_glib
+ DEFINES
+ DISABLE_GLIB
+ tst_QEventDispatcher=tst_qguieventdispatcher_no_glib
+ )
+endif()
diff --git a/tests/auto/gui/kernel/qguieventloop/CMakeLists.txt b/tests/auto/gui/kernel/qguieventloop/CMakeLists.txt
index ec9441a1dc..89c518be10 100644
--- a/tests/auto/gui/kernel/qguieventloop/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qguieventloop/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qguieventloop.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qguieventloop Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qguieventloop LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qguieventloop
SOURCES
../../../corelib/kernel/qeventloop/tst_qeventloop.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::Network
@@ -17,7 +24,7 @@ qt_internal_add_test(tst_qguieventloop
#####################################################################
qt_internal_extend_target(tst_qguieventloop CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
diff --git a/tests/auto/gui/kernel/qguimetatype/CMakeLists.txt b/tests/auto/gui/kernel/qguimetatype/CMakeLists.txt
index 0887f05fc6..7c93e4b8a2 100644
--- a/tests/auto/gui/kernel/qguimetatype/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qguimetatype/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qguimetatype.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qguimetatype Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qguimetatype LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qguimetatype
SOURCES
tst_qguimetatype.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp b/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp
index aac914bc68..54e95a2b38 100644
--- a/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.cpp
+++ b/tests/auto/gui/kernel/qguimetatype/tst_qguimetatype.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 <QtCore>
@@ -45,6 +20,8 @@ private slots:
void sizeOf();
void flags_data();
void flags();
+ void flags2_data();
+ void flags2();
void construct_data();
void construct();
void constructCopy_data();
@@ -318,14 +295,27 @@ struct TypeAlignment
enum { Value = alignof(T) };
};
+template <typename T> void addFlagsRow(const char *name, int id = qMetaTypeId<T>())
+{
+ QTest::newRow(name)
+ << id
+ << bool(QTypeInfo<T>::isRelocatable)
+ << bool(!std::is_trivially_default_constructible_v<T>)
+ << bool(!std::is_trivially_copy_constructible_v<T>)
+ << bool(!std::is_trivially_destructible_v<T>);
+}
+
+// tst_QGuiMetaType::flags is nearly identical to tst_QMetaType::flags
void tst_QGuiMetaType::flags_data()
{
QTest::addColumn<int>("type");
QTest::addColumn<bool>("isRelocatable");
- QTest::addColumn<bool>("isComplex");
+ QTest::addColumn<bool>("needsConstruction");
+ QTest::addColumn<bool>("needsCopyConstruction");
+ QTest::addColumn<bool>("needsDestruction");
#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType) \
- QTest::newRow(#RealType) << MetaTypeId << bool(QTypeInfo<RealType>::isRelocatable) << bool(QTypeInfo<RealType>::isComplex);
+ addFlagsRow<RealType>(#RealType, MetaTypeId);
QT_FOR_EACH_STATIC_GUI_CLASS(ADD_METATYPE_TEST_ROW)
#undef ADD_METATYPE_TEST_ROW
}
@@ -334,13 +324,62 @@ void tst_QGuiMetaType::flags()
{
QFETCH(int, type);
QFETCH(bool, isRelocatable);
- QFETCH(bool, isComplex);
+ QFETCH(bool, needsConstruction);
+ QFETCH(bool, needsCopyConstruction);
+ QFETCH(bool, needsDestruction);
- QCOMPARE(bool(QMetaType(type).flags() & QMetaType::NeedsConstruction), isComplex);
- QCOMPARE(bool(QMetaType(type).flags() & QMetaType::NeedsDestruction), isComplex);
+ QCOMPARE(bool(QMetaType(type).flags() & QMetaType::NeedsConstruction), needsConstruction);
+ QCOMPARE(bool(QMetaType(type).flags() & QMetaType::NeedsCopyConstruction), needsCopyConstruction);
+ QCOMPARE(bool(QMetaType(type).flags() & QMetaType::NeedsDestruction), needsDestruction);
QCOMPARE(bool(QMetaType(type).flags() & QMetaType::RelocatableType), isRelocatable);
}
+template <typename T> static void addFlags2Row(QMetaType metaType = QMetaType::fromType<T>())
+{
+ QTest::newRow(metaType.name() ? metaType.name() : "UnknownType")
+ << metaType
+ << std::is_default_constructible_v<T>
+ << std::is_copy_constructible_v<T>
+ << std::is_move_constructible_v<T>
+ << std::is_destructible_v<T>
+ << (QTypeTraits::has_operator_equal<T>::value || QTypeTraits::has_operator_less_than<T>::value)
+ << QTypeTraits::has_operator_less_than<T>::value;
+};
+
+// tst_QGuiMetaType::flags2 is nearly identical to tst_QMetaType::flags2
+void tst_QGuiMetaType::flags2_data()
+{
+ QTest::addColumn<QMetaType>("type");
+ QTest::addColumn<bool>("isDefaultConstructible");
+ QTest::addColumn<bool>("isCopyConstructible");
+ QTest::addColumn<bool>("isMoveConstructible");
+ QTest::addColumn<bool>("isDestructible");
+ QTest::addColumn<bool>("isEqualityComparable");
+ QTest::addColumn<bool>("isOrdered");
+
+#define ADD_METATYPE_TEST_ROW(MetaTypeName, MetaTypeId, RealType) \
+ addFlags2Row<RealType>();
+QT_FOR_EACH_STATIC_GUI_CLASS(ADD_METATYPE_TEST_ROW)
+#undef ADD_METATYPE_TEST_ROW
+}
+
+void tst_QGuiMetaType::flags2()
+{
+ QFETCH(QMetaType, type);
+ QFETCH(bool, isDefaultConstructible);
+ QFETCH(bool, isCopyConstructible);
+ QFETCH(bool, isMoveConstructible);
+ QFETCH(bool, isDestructible);
+ QFETCH(bool, isEqualityComparable);
+ QFETCH(bool, isOrdered);
+
+ QCOMPARE(type.isDefaultConstructible(), isDefaultConstructible);
+ QCOMPARE(type.isCopyConstructible(), isCopyConstructible);
+ QCOMPARE(type.isMoveConstructible(), isMoveConstructible);
+ QCOMPARE(type.isDestructible(), isDestructible);
+ QCOMPARE(type.isEqualityComparable(), isEqualityComparable);
+ QCOMPARE(type.isOrdered(), isOrdered);
+}
void tst_QGuiMetaType::construct_data()
{
diff --git a/tests/auto/gui/kernel/qguitimer/CMakeLists.txt b/tests/auto/gui/kernel/qguitimer/CMakeLists.txt
index 5375155a82..bc292e133b 100644
--- a/tests/auto/gui/kernel/qguitimer/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qguitimer/CMakeLists.txt
@@ -1,13 +1,38 @@
-# Generated from qguitimer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qguitimer Test:
#####################################################################
-qt_internal_add_test(tst_qguitimer
- SOURCES
- ../../../corelib/kernel/qtimer/tst_qtimer.cpp
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Gui
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qguitimer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+function(addGuiTimerTest test)
+ qt_internal_add_test(${test}
+ SOURCES
+ ../../../corelib/kernel/qtimer/tst_qtimer.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::TestPrivate
+ )
+endfunction()
+
+addGuiTimerTest(tst_qguitimer)
+qt_internal_extend_target(tst_qguitimer
+ DEFINES
+ tst_Qtimer=tst_QGuiTimer
)
+
+if(QT_FEATURE_glib AND UNIX)
+ addGuiTimerTest(tst_qguitimer_no_glib)
+ qt_internal_extend_target(tst_qguitimer_no_glib
+ DEFINES
+ DISABLE_GLIB
+ tst_QTimer=tst_QGuiTimer_no_glib # Class name in the unittest
+ )
+endif()
diff --git a/tests/auto/gui/kernel/qguivariant/CMakeLists.txt b/tests/auto/gui/kernel/qguivariant/CMakeLists.txt
index 3a0adab6e3..eda22152ec 100644
--- a/tests/auto/gui/kernel/qguivariant/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qguivariant/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qguivariant.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(test)
add_subdirectory(no_application)
diff --git a/tests/auto/gui/kernel/qguivariant/no_application/CMakeLists.txt b/tests/auto/gui/kernel/qguivariant/no_application/CMakeLists.txt
index 2e6f548f11..4470411a3b 100644
--- a/tests/auto/gui/kernel/qguivariant/no_application/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qguivariant/no_application/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from no_application.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## no_application Test:
#####################################################################
-qt_internal_add_test(no_application
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_gui_variant_no_application LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_gui_variant_no_application
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/kernel/qguivariant/no_application/main.cpp b/tests/auto/gui/kernel/qguivariant/no_application/main.cpp
index 1ab0f63240..2b6ec7b870 100644
--- a/tests/auto/gui/kernel/qguivariant/no_application/main.cpp
+++ b/tests/auto/gui/kernel/qguivariant/no_application/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 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 <QTest>
diff --git a/tests/auto/gui/kernel/qguivariant/test/CMakeLists.txt b/tests/auto/gui/kernel/qguivariant/test/CMakeLists.txt
index a3292511bd..36b732e4ae 100644
--- a/tests/auto/gui/kernel/qguivariant/test/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qguivariant/test/CMakeLists.txt
@@ -1,27 +1,29 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qguivariant Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qguivariant LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+# Resources:
+file(GLOB_RECURSE qguivariant_resource_files
+ RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
+ "data/*"
+)
+
qt_internal_add_test(tst_qguivariant
SOURCES
tst_qguivariant.cpp
INCLUDE_DIRECTORIES
../../../../other/qvariant_common
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
+ TESTDATA ${qguivariant_resource_files}
+ BUILTIN_TESTDATA
)
-
-# Resources:
-set(qguivariant_resource_files
- "data"
-)
-
-qt_internal_add_resource(tst_qguivariant "qguivariant"
- PREFIX
- "/"
- FILES
- ${qguivariant_resource_files}
-)
-
diff --git a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp
index aea5cb3ac3..cb22024f76 100644
--- a/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.cpp
+++ b/tests/auto/gui/kernel/qguivariant/test/tst_qguivariant.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 <QTest>
@@ -245,7 +220,7 @@ void tst_QGuiVariant::toColor_data()
QTest::newRow("qstring(#ff0000)") << QVariant(QString::fromUtf8("#ff0000")) << c;
QTest::newRow("qbytearray(#ff0000)") << QVariant(QByteArray("#ff0000")) << c;
- c.setNamedColor("#88112233");
+ c = QColor::fromString("#88112233");
QTest::newRow("qstring(#88112233)") << QVariant(QString::fromUtf8("#88112233")) << c;
QTest::newRow("qbytearray(#88112233)") << QVariant(QByteArray("#88112233")) << c;
}
diff --git a/tests/auto/gui/kernel/qhighdpi/CMakeLists.txt b/tests/auto/gui/kernel/qhighdpi/CMakeLists.txt
index bdd9a5e17f..aa61bfbb0b 100644
--- a/tests/auto/gui/kernel/qhighdpi/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qhighdpi/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qhighdpi.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qhighdpi Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhighdpi LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qhighdpi
SOURCES
tst_qhighdpi.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp b/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp
index cd721f249b..6fe4faec03 100644
--- a/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp
+++ b/tests/auto/gui/kernel/qhighdpi/tst_qhighdpi.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <private/qhighdpiscaling_p.h>
#include <qpa/qplatformscreen.h>
@@ -35,6 +10,7 @@
#include <QJsonObject>
#include <QJsonDocument>
#include <QStringView>
+#include <QSignalSpy>
Q_LOGGING_CATEGORY(lcTests, "qt.gui.tests")
@@ -60,10 +36,13 @@ private slots:
void screenDpiAndDpr_data();
void screenDpiAndDpr();
void screenDpiChange();
+ void screenDpiChangeWithWindow();
void environment_QT_SCALE_FACTOR();
void environment_QT_SCREEN_SCALE_FACTORS_data();
void environment_QT_SCREEN_SCALE_FACTORS();
void environment_QT_USE_PHYSICAL_DPI();
+ void environment_QT_SCALE_FACTOR_ROUNDING_POLICY();
+ void application_setScaleFactorRoundingPolicy();
void screenAt_data();
void screenAt();
void screenGeometry_data();
@@ -78,6 +57,8 @@ private slots:
void mouseVelocity_data();
void setCursor();
void setCursor_data();
+ void setGlobalFactorEmits();
+ void setScreenFactorEmits();
};
/// Offscreen platform plugin test setup
@@ -88,7 +69,7 @@ const int standardScreenCount = 3;
QJsonArray tst_QHighDpi::createStandardScreens(const QList<qreal> &dpiValues)
{
- Q_ASSERT(dpiValues.count() == standardScreenCount);
+ Q_ASSERT(dpiValues.size() == standardScreenCount);
// Create row of three screens: screen#0 screen#1 screen#2
return QJsonArray {
@@ -205,65 +186,6 @@ QJsonObject tst_QHighDpi::offscreenConfiguration()
return getConfiguration(platformNativeInterface);
}
-// JsonValueRef implements support for mutating nested JSON structures, e.g.
-//
-// JsonValueRef::get(&config)["screens"][0]["logicalDpi"] = 192
-//
-class JsonValueRef {
-public:
- static JsonValueRef get(QJsonValue *value) {
- return JsonValueRef(value);
- }
-
- JsonValueRef(QJsonValue *value)
- : m_value(value) { }
-
- JsonValueRef(QJsonValue *value, JsonValueRef *parent, QString key)
- : m_value(value), m_parent(parent), m_key(key) { }
-
- JsonValueRef(QJsonValue *value, JsonValueRef *parent, int index)
- : m_value(value), m_parent(parent), m_index(index) { }
-
- ~JsonValueRef() {
- if (m_parent) {
- if (!m_key.isNull()) {
- QJsonObject parentObject = m_parent->m_value->toObject();
- parentObject[m_key] = *m_value;
- *m_parent->m_value = parentObject;
- } else if (m_index > -1) {
- QJsonArray parentArray = m_parent->m_value->toArray();
- parentArray[m_index] = *m_value;
- *m_parent->m_value = parentArray;
- }
- delete m_value; // owned if we have a parent, see operator[]
- }
- }
-
- JsonValueRef operator[](const char *str) {
- QString key = QString::fromUtf8(str);
- return JsonValueRef(new QJsonValue((*m_value)[key]), this, key);
- }
-
- JsonValueRef operator[](int index) {
- return JsonValueRef(new QJsonValue((*m_value)[index]), this, index);
- }
-
- void operator=(int value) {
- *m_value = QJsonValue(value);
- }
-
- void operator=(const char *str) {
- *m_value = QJsonValue(QString(str));
- }
-
-private:
- Q_DISABLE_COPY(JsonValueRef);
- QJsonValue *m_value = nullptr;
- JsonValueRef *m_parent = nullptr;
- QString m_key;
- int m_index = -1;
-};
-
void tst_QHighDpi::cleanup()
{
// Some test functions set environment variables. Unset them here,
@@ -271,6 +193,7 @@ void tst_QHighDpi::cleanup()
qunsetenv("QT_SCALE_FACTOR");
qunsetenv("QT_SCREEN_SCALE_FACTORS");
qunsetenv("QT_USE_PHYSICAL_DPI");
+ qunsetenv("QT_SCALE_FACTOR_ROUNDING_POLICY");
}
void tst_QHighDpi::qhighdpiscaling_data()
@@ -316,6 +239,9 @@ void tst_QHighDpi::screenDpiAndDpr()
QWindow window(screen);
QCOMPARE(window.devicePixelRatio(), screen->devicePixelRatio());
+ window.setGeometry(QRect(screen->geometry().center(), QSize(10, 10)));
+ window.create();
+ QCOMPARE(window.devicePixelRatio(), screen->devicePixelRatio());
}
}
@@ -329,10 +255,12 @@ void tst_QHighDpi::screenDpiChange()
// Set new DPI
int newDpi = 192;
QJsonValue config = offscreenConfiguration();
- JsonValueRef::get(&config)["screens"][0]["logicalDpi"] = newDpi;
- JsonValueRef::get(&config)["screens"][1]["logicalDpi"] = newDpi;
- JsonValueRef::get(&config)["screens"][2]["logicalDpi"] = newDpi;
- setOffscreenConfiguration(config.toObject());
+ // API defect until Qt 7, so go indirectly via CBOR
+ QCborMap map = QCborMap::fromJsonObject(config.toObject());
+ map[QLatin1String("screens")][0][QLatin1String("logicalDpi")] = newDpi;
+ map[QLatin1String("screens")][1][QLatin1String("logicalDpi")] = newDpi;
+ map[QLatin1String("screens")][2][QLatin1String("logicalDpi")] = newDpi;
+ setOffscreenConfiguration(map.toJsonObject());
// TODO check events
@@ -340,16 +268,52 @@ void tst_QHighDpi::screenDpiChange()
for (QScreen *screen : app->screens()) {
QCOMPARE(screen->devicePixelRatio(), newDpi / standardBaseDpi);
QCOMPARE(screen->logicalDotsPerInch(), newDpi / screen->devicePixelRatio());
+
QWindow window(screen);
QCOMPARE(window.devicePixelRatio(), screen->devicePixelRatio());
+ window.create();
+ QCOMPARE(window.devicePixelRatio(), screen->devicePixelRatio());
}
QCOMPARE(app->devicePixelRatio(), newDpi / standardBaseDpi);
}
+void tst_QHighDpi::screenDpiChangeWithWindow()
+{
+ QList<qreal> dpiValues = { 96, 192, 288 };
+ std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
+
+ // Create windows for screens
+ QList<QScreen *> screens = app->screens();
+ QList<QWindow *> windows;
+ for (int i = 0; i < screens.count(); ++i) {
+ QScreen *screen = screens[i];
+ QWindow *window = new QWindow();
+ windows.append(window);
+ window->setGeometry(QRect(screen->geometry().center(), QSize(10, 10)));
+ window->create();
+ QCOMPARE(window->devicePixelRatio(), dpiValues[i] / standardBaseDpi);
+ }
+
+ // Change screen DPI
+ QList<qreal> newDpiValues = { 288, 192, 96 };
+ QJsonValue config = offscreenConfiguration();
+ QCborMap map = QCborMap::fromJsonObject(config.toObject());
+ for (int i = 0; i < screens.count(); ++i) {
+ map[QLatin1String("screens")][i][QLatin1String("logicalDpi")] = newDpiValues[i];
+ }
+ setOffscreenConfiguration(map.toJsonObject());
+
+ // Verify that window DPR changes on Screen DPI change.
+ for (int i = 0; i < screens.count(); ++i) {
+ QWindow *window = windows[i];
+ QCOMPARE(window->devicePixelRatio(), newDpiValues[i] / standardBaseDpi);
+ }
+}
+
void tst_QHighDpi::environment_QT_SCALE_FACTOR()
{
qreal factor = 3.1415;
- qputenv("QT_SCALE_FACTOR", QByteArray::number(factor));
+ qputenv("QT_SCALE_FACTOR", std::to_string(factor));
QList<qreal> dpiValues { 96, 144, 192 };
std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
@@ -392,9 +356,10 @@ void tst_QHighDpi::environment_QT_SCREEN_SCALE_FACTORS()
QFETCH(QByteArray, environment);
QFETCH(QList<qreal>, expectedDprValues);
+ qputenv("QT_SCREEN_SCALE_FACTORS", environment);
+
// Verify that setting QT_SCREEN_SCALE_FACTORS overrides the from-platform-screen-DPI DPR.
{
- qputenv("QT_SCREEN_SCALE_FACTORS", environment);
std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(platformScreenDpi));
int i = 0;
for (QScreen *screen : app->screens()) {
@@ -406,6 +371,18 @@ void tst_QHighDpi::environment_QT_SCREEN_SCALE_FACTORS()
QCOMPARE(window.devicePixelRatio(), expextedDpr);
}
}
+
+ // Verify that setHighDpiScaleFactorRoundingPolicy applies to QT_SCREEN_SCALE_FACTORS as well
+ QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Round);
+ {
+ std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(platformScreenDpi));
+ int i = 0;
+ for (QScreen *screen : app->screens()) {
+ qreal expectedRounderDpr = qRound(expectedDprValues[i++]);
+ qreal windowDpr = QWindow(screen).devicePixelRatio();
+ QCOMPARE(windowDpr, expectedRounderDpr);
+ }
+ }
}
void tst_QHighDpi::environment_QT_USE_PHYSICAL_DPI()
@@ -433,6 +410,59 @@ void tst_QHighDpi::environment_QT_USE_PHYSICAL_DPI()
}
}
+void tst_QHighDpi::environment_QT_SCALE_FACTOR_ROUNDING_POLICY()
+{
+ QList<qreal> dpiValues { 96, 144, 192 };
+
+ qputenv("QT_SCALE_FACTOR_ROUNDING_POLICY", "PassThrough");
+ {
+ std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
+ for (int i = 0; i < dpiValues.size(); ++i)
+ QCOMPARE(app->screens()[i]->devicePixelRatio(), dpiValues[i] / qreal(96));
+ }
+
+ qputenv("QT_SCALE_FACTOR_ROUNDING_POLICY", "Round");
+ {
+ std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
+ for (int i = 0; i < dpiValues.size(); ++i)
+ QCOMPARE(app->screens()[i]->devicePixelRatio(), qRound(dpiValues[i] / qreal(96)));
+ }
+
+ qunsetenv("QT_SCALE_FACTOR_ROUNDING_POLICY");
+ {
+ std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
+ for (int i = 0; i < dpiValues.size(); ++i)
+ QCOMPARE(app->screens()[i]->devicePixelRatio(), dpiValues[i] / qreal(96));
+ }
+}
+
+void tst_QHighDpi::application_setScaleFactorRoundingPolicy()
+{
+ QList<qreal> dpiValues { 96, 144, 192 };
+ QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Round);
+ {
+ std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
+ for (int i = 0; i < dpiValues.size(); ++i)
+ QCOMPARE(app->screens()[i]->devicePixelRatio(), qRound(dpiValues[i] / qreal(96)));
+ }
+
+ QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
+ {
+ std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
+ for (int i = 0; i < dpiValues.size(); ++i)
+ QCOMPARE(app->screens()[i]->devicePixelRatio(), dpiValues[i] / qreal(96));
+ }
+
+ // Verify that environment overrides app setting
+ QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Round);
+ qputenv("QT_SCALE_FACTOR_ROUNDING_POLICY", "PassThrough");
+ {
+ std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
+ for (int i = 0; i < dpiValues.size(); ++i)
+ QCOMPARE(app->screens()[i]->devicePixelRatio(), dpiValues[i] / qreal(96));
+ }
+}
+
void tst_QHighDpi::minimumDpr()
{
QList<qreal> dpiValues { 40, 60, 95 };
@@ -476,7 +506,7 @@ void tst_QHighDpi::screenAt()
QFETCH(QList<qreal>, dpiValues);
std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
- QCOMPARE(app->screens().count(), standardScreenCount); // standard setup
+ QCOMPARE(app->screens().size(), standardScreenCount); // standard setup
// Verify that screenAt() returns the correct or no screen for various points,
// for all screens.
@@ -485,7 +515,7 @@ void tst_QHighDpi::screenAt()
qreal dpi = dpiValues[i++];
// veryfy virtualSiblings and that AA_EnableHighDpiScaling is active
- QCOMPARE(screen->virtualSiblings().count(), standardScreenCount);
+ QCOMPARE(screen->virtualSiblings().size(), standardScreenCount);
QCOMPARE(screen->geometry().size(), QSize(standardScreenWidth, standardScreenHeight) * (96.0 / dpi));
// test points on screen
@@ -824,5 +854,34 @@ void tst_QHighDpi::setCursor()
}
}
+void tst_QHighDpi::setGlobalFactorEmits()
+{
+ QList<qreal> dpiValues { 96, 96, 96 };
+ std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
+
+ std::vector<std::unique_ptr<QSignalSpy>> spies;
+ for (QScreen *screen : app->screens())
+ spies.push_back(std::make_unique<QSignalSpy>(screen, &QScreen::geometryChanged));
+
+ QHighDpiScaling::setGlobalFactor(2);
+
+ for (const auto &spy : spies)
+ QCOMPARE(spy->count(), 1);
+
+ QHighDpiScaling::setGlobalFactor(1);
+}
+
+void tst_QHighDpi::setScreenFactorEmits()
+{
+ QList<qreal> dpiValues { 96, 96, 96 };
+ std::unique_ptr<QGuiApplication> app(createStandardOffscreenApp(dpiValues));
+
+ for (QScreen *screen : app->screens()) {
+ QSignalSpy spy(screen, &QScreen::geometryChanged);
+ QHighDpiScaling::setScreenFactor(screen, 2);
+ QCOMPARE(spy.count(), 1);
+ }
+}
+
#include "tst_qhighdpi.moc"
QTEST_APPLESS_MAIN(tst_QHighDpi);
diff --git a/tests/auto/gui/kernel/qinputdevice/CMakeLists.txt b/tests/auto/gui/kernel/qinputdevice/CMakeLists.txt
index aea72357dd..afbfd9bb37 100644
--- a/tests/auto/gui/kernel/qinputdevice/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qinputdevice/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qinputdevice.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qinputdevice Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qinputdevice LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qinputdevice
SOURCES
tst_qinputdevice.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
diff --git a/tests/auto/gui/kernel/qinputdevice/tst_qinputdevice.cpp b/tests/auto/gui/kernel/qinputdevice/tst_qinputdevice.cpp
index 077a44b229..8587aebf2a 100644
--- a/tests/auto/gui/kernel/qinputdevice/tst_qinputdevice.cpp
+++ b/tests/auto/gui/kernel/qinputdevice/tst_qinputdevice.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <qpa/qwindowsysteminterface.h>
@@ -43,12 +18,56 @@ private slots:
void multiSeatDevices();
private:
+ const QInputDevice *getPrimaryKeyboard(const QString& seatName = QString());
+ const QPointingDevice *getPrimaryPointingDevice(const QString& seatName = QString());
};
void tst_QInputDevice::initTestCase()
{
}
+const QInputDevice *tst_QInputDevice::getPrimaryKeyboard(const QString& seatName)
+{
+ QList<const QInputDevice *> devices = QInputDevice::devices();
+ const QInputDevice *ret = nullptr;
+ for (const QInputDevice *d : devices) {
+ if (d->type() != QInputDevice::DeviceType::Keyboard)
+ continue;
+ if (seatName.isNull() || d->seatName() == seatName) {
+ // the master keyboard's parent is not another input device
+ if (!d->parent() || !qobject_cast<const QInputDevice *>(d->parent()))
+ return d;
+ if (!ret)
+ ret = d;
+ }
+ }
+ return ret;
+}
+
+const QPointingDevice *tst_QInputDevice::getPrimaryPointingDevice(const QString& seatName)
+{
+ QList<const QInputDevice *> devices = QInputDevice::devices();
+ const QPointingDevice *mouse = nullptr;
+ const QPointingDevice *touchpad = nullptr;
+ for (const QInputDevice *dev : devices) {
+ if (!seatName.isNull() && dev->seatName() != seatName)
+ continue;
+ if (dev->type() == QInputDevice::DeviceType::Mouse) {
+ if (!mouse)
+ mouse = static_cast<const QPointingDevice *>(dev);
+ // the core pointer is likely a mouse, and its parent is not another input device
+ if (!mouse->parent() || !qobject_cast<const QInputDevice *>(mouse->parent()))
+ return mouse;
+ } else if (dev->type() == QInputDevice::DeviceType::TouchPad) {
+ if (!touchpad || !dev->parent() || dev->parent()->metaObject() != dev->metaObject())
+ touchpad = static_cast<const QPointingDevice *>(dev);
+ }
+ }
+ if (mouse)
+ return mouse;
+ return touchpad;
+}
+
void tst_QInputDevice::multiSeatDevices()
{
QWindowSystemInterface::registerInputDevice(new QInputDevice("seat 1 kbd", 1000, QInputDevice::DeviceType::Keyboard, "seat 1", this));
@@ -59,15 +78,17 @@ void tst_QInputDevice::multiSeatDevices()
QWindowSystemInterface::registerInputDevice(new QPointingDevice("seat 2 mouse", 2010, QInputDevice::DeviceType::Mouse, QPointingDevice::PointerType::Generic,
QInputDevice::Capability::Position | QInputDevice::Capability::Hover,
1, 2, "seat 2", QPointingDeviceUniqueId(), this));
- QVERIFY(QInputDevice::devices().count() >= 4);
+ QVERIFY(QInputDevice::devices().size() >= 4);
QVERIFY(QInputDevicePrivate::fromId(1010));
QVERIFY(QInputDevicePrivate::fromId(1010)->hasCapability(QInputDevice::Capability::Scroll));
QVERIFY(QInputDevicePrivate::fromId(2010));
QVERIFY(!QInputDevicePrivate::fromId(2010)->hasCapability(QInputDevice::Capability::Scroll));
QVERIFY(QInputDevice::primaryKeyboard());
- QCOMPARE(QInputDevice::primaryKeyboard()->systemId(), qint64(1) << 33);
+ if (!getPrimaryKeyboard())
+ QCOMPARE(QInputDevice::primaryKeyboard()->systemId(), qint64(1) << 33);
QVERIFY(QPointingDevice::primaryPointingDevice());
- QCOMPARE(QPointingDevice::primaryPointingDevice()->systemId(), 1);
+ if (!getPrimaryPointingDevice())
+ QCOMPARE(QPointingDevice::primaryPointingDevice()->systemId(), 1);
QVERIFY(QInputDevice::primaryKeyboard("seat 1"));
QCOMPARE(QInputDevice::primaryKeyboard("seat 1")->systemId(), 1000);
QVERIFY(QPointingDevice::primaryPointingDevice("seat 1"));
diff --git a/tests/auto/gui/kernel/qinputmethod/CMakeLists.txt b/tests/auto/gui/kernel/qinputmethod/CMakeLists.txt
index bbe8652e99..e3ce0774bc 100644
--- a/tests/auto/gui/kernel/qinputmethod/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qinputmethod/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qinputmethod.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qinputmethod Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qinputmethod LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qinputmethod
SOURCES
tst_qinputmethod.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/kernel/qinputmethod/tst_qinputmethod.cpp b/tests/auto/gui/kernel/qinputmethod/tst_qinputmethod.cpp
index 318309d959..619de7bed3 100644
--- a/tests/auto/gui/kernel/qinputmethod/tst_qinputmethod.cpp
+++ b/tests/auto/gui/kernel/qinputmethod/tst_qinputmethod.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 <QTest>
#include <QSignalSpy>
@@ -150,7 +125,7 @@ void tst_qinputmethod::animating()
QSignalSpy spy(qApp->inputMethod(), SIGNAL(animatingChanged()));
m_platformInputContext.emitAnimatingChanged();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_qinputmethod::keyboarRectangle()
@@ -162,7 +137,7 @@ void tst_qinputmethod::keyboarRectangle()
QSignalSpy spy(qApp->inputMethod(), SIGNAL(keyboardRectangleChanged()));
m_platformInputContext.emitKeyboardRectChanged();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_qinputmethod::inputItemTransform()
@@ -177,7 +152,7 @@ void tst_qinputmethod::inputItemTransform()
qApp->inputMethod()->setInputItemTransform(transform);
QCOMPARE(qApp->inputMethod()->inputItemTransform(), transform);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
// reset
qApp->inputMethod()->setInputItemTransform(QTransform());
@@ -274,13 +249,13 @@ void tst_qinputmethod::query()
void tst_qinputmethod::inputDirection()
{
- QCOMPARE(m_platformInputContext.m_inputDirectionCallCount, 0);
+ auto originalCount = m_platformInputContext.m_inputDirectionCallCount;
qApp->inputMethod()->inputDirection();
- QCOMPARE(m_platformInputContext.m_inputDirectionCallCount, 1);
+ QCOMPARE(m_platformInputContext.m_inputDirectionCallCount, originalCount + 1);
- QCOMPARE(m_platformInputContext.m_localeCallCount, 0);
+ originalCount = m_platformInputContext.m_localeCallCount;
qApp->inputMethod()->locale();
- QCOMPARE(m_platformInputContext.m_localeCallCount, 1);
+ QCOMPARE(m_platformInputContext.m_localeCallCount, originalCount + 1);
}
void tst_qinputmethod::inputMethodAccepted()
diff --git a/tests/auto/gui/kernel/qkeyevent/CMakeLists.txt b/tests/auto/gui/kernel/qkeyevent/CMakeLists.txt
index bd9f602e56..c3c9892d14 100644
--- a/tests/auto/gui/kernel/qkeyevent/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qkeyevent/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qkeyevent.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qkeyevent Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qkeyevent LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qkeyevent
SOURCES
tst_qkeyevent.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/kernel/qkeyevent/tst_qkeyevent.cpp b/tests/auto/gui/kernel/qkeyevent/tst_qkeyevent.cpp
index 1873c190d5..7d8e0aa5dc 100644
--- a/tests/auto/gui/kernel/qkeyevent/tst_qkeyevent.cpp
+++ b/tests/auto/gui/kernel/qkeyevent/tst_qkeyevent.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QTest>
diff --git a/tests/auto/gui/kernel/qkeysequence/CMakeLists.txt b/tests/auto/gui/kernel/qkeysequence/CMakeLists.txt
index 9d0e25d356..1676302d1b 100644
--- a/tests/auto/gui/kernel/qkeysequence/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qkeysequence/CMakeLists.txt
@@ -1,17 +1,15 @@
-# Generated from qkeysequence.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qkeysequence Test:
#####################################################################
-qt_internal_add_test(tst_qkeysequence
- SOURCES
- tst_qkeysequence.cpp
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Gui
- Qt::GuiPrivate
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qkeysequence LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Resources:
set(qkeysequence_resource_files
@@ -19,10 +17,13 @@ set(qkeysequence_resource_files
"qt_de.qm"
)
-qt_internal_add_resource(tst_qkeysequence "qkeysequence"
- PREFIX
- "/"
- FILES
- ${qkeysequence_resource_files}
+qt_internal_add_test(tst_qkeysequence
+ SOURCES
+ tst_qkeysequence.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ TESTDATA ${qkeysequence_resource_files}
+ BUILTIN_TESTDATA
)
-
diff --git a/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp b/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp
index fb7296f834..67fef3cf44 100644
--- a/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.cpp
+++ b/tests/auto/gui/kernel/qkeysequence/tst_qkeysequence.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 <QTest>
@@ -498,10 +473,15 @@ void tst_QKeySequence::toStringFromKeycode_data()
QTest::newRow("A") << QKeySequence(Qt::Key_A) << "A";
QTest::newRow("-1") << QKeySequence(-1) << "";
QTest::newRow("Unknown") << QKeySequence(Qt::Key_unknown) << "";
+ QTest::newRow("Ctrl+Unknown") << QKeySequence(Qt::ControlModifier | Qt::Key_unknown) << "";
QTest::newRow("Ctrl+Num+Ins") << QKeySequence(Qt::ControlModifier | Qt::KeypadModifier | Qt::Key_Insert) << "Ctrl+Num+Ins";
QTest::newRow("Ctrl+Num+Del") << QKeySequence(Qt::ControlModifier | Qt::KeypadModifier | Qt::Key_Delete) << "Ctrl+Num+Del";
QTest::newRow("Ctrl+Alt+Num+Del") << QKeySequence(Qt::ControlModifier | Qt::AltModifier | Qt::KeypadModifier | Qt::Key_Delete) << "Ctrl+Alt+Num+Del";
QTest::newRow("Ctrl+Ins") << QKeySequence(Qt::ControlModifier | Qt::Key_Insert) << "Ctrl+Ins";
+ QTest::newRow("Ctrl") << QKeySequence(Qt::Key_Control) << "Control";
+ QTest::newRow("Alt") << QKeySequence(Qt::Key_Alt) << "Alt";
+ QTest::newRow("Shift") << QKeySequence(Qt::Key_Shift) << "Shift";
+ QTest::newRow("Meta") << QKeySequence(Qt::Key_Meta) << "Meta";
}
void tst_QKeySequence::toStringFromKeycode()
@@ -579,10 +559,6 @@ void tst_QKeySequence::parseString_data()
//QTest::newRow("Ctrl") << "Ctrl" << QKeySequence(Qt::CTRL);
//QTest::newRow("Shift") << "Shift" << QKeySequence(Qt::SHIFT);
- // Only Keys
- QTest::newRow("a") << "a" << QKeySequence(Qt::Key_A);
- QTest::newRow("A") << "A" << QKeySequence(Qt::Key_A);
-
// Incomplete
QTest::newRow("Meta+Shift+") << "Meta+Shift+" << QKeySequence(Qt::Key_unknown);
}
diff --git a/tests/auto/gui/kernel/qmouseevent/CMakeLists.txt b/tests/auto/gui/kernel/qmouseevent/CMakeLists.txt
index baf9b83b55..ac2200792b 100644
--- a/tests/auto/gui/kernel/qmouseevent/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qmouseevent/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qmouseevent.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmouseevent Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmouseevent LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmouseevent
SOURCES
tst_qmouseevent.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
diff --git a/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp b/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp
index d5174e0942..f703111384 100644
--- a/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp
+++ b/tests/auto/gui/kernel/qmouseevent/tst_qmouseevent.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
@@ -32,6 +7,8 @@
#include <qwindow.h>
#include <QtGui/private/qpointingdevice_p.h>
+#include <QtCore/qpointer.h>
+
Q_LOGGING_CATEGORY(lcTests, "qt.gui.tests")
class MouseEventWidget : public QWindow
@@ -122,6 +99,7 @@ private slots:
void grabbers_data();
void grabbers();
void velocity();
+ void clone();
private:
MouseEventWidget* testMouseWidget;
@@ -288,14 +266,14 @@ void tst_QMouseEvent::grabbers()
auto firstEPD = devPriv->pointById(0);
QCOMPARE(firstEPD->eventPoint.pressTimestamp(), testMouseWidget->pressTimestamp);
QCOMPARE(firstEPD->exclusiveGrabber, grabExclusive ? testMouseWidget : nullptr);
- QCOMPARE(firstEPD->passiveGrabbers.count(), grabPassive ? 1 : 0);
+ QCOMPARE(firstEPD->passiveGrabbers.size(), grabPassive ? 1 : 0);
if (grabPassive)
QCOMPARE(firstEPD->passiveGrabbers.first(), testMouseWidget);
// Ensure that grabbers are forgotten after release delivery
QTest::mouseRelease(testMouseWidget, Qt::LeftButton, Qt::KeyboardModifiers(), {10, 10});
QTRY_COMPARE(firstEPD->exclusiveGrabber, nullptr);
- QCOMPARE(firstEPD->passiveGrabbers.count(), 0);
+ QCOMPARE(firstEPD->passiveGrabbers.size(), 0);
}
void tst_QMouseEvent::velocity()
@@ -334,5 +312,24 @@ void tst_QMouseEvent::velocity()
QVERIFY(testMouseWidget->velocity.y() > 0);
}
+void tst_QMouseEvent::clone()
+{
+ const QPointF pos(10.0f, 10.0f);
+
+ QMouseEvent originalMe(QEvent::MouseButtonPress, pos, pos, pos, Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
+ QVERIFY(!originalMe.allPointsAccepted());
+ QVERIFY(!originalMe.points().first().isAccepted());
+
+ // create a clone of the original
+ std::unique_ptr<QMouseEvent> clonedMe(originalMe.clone());
+ QVERIFY(!clonedMe->allPointsAccepted());
+ QVERIFY(!clonedMe->points().first().isAccepted());
+
+ // now we alter originalMe, which should *not* change clonedMe
+ originalMe.setAccepted(true);
+ QVERIFY(!clonedMe->allPointsAccepted());
+ QVERIFY(!clonedMe->points().first().isAccepted());
+}
+
QTEST_MAIN(tst_QMouseEvent)
#include "tst_qmouseevent.moc"
diff --git a/tests/auto/gui/kernel/qmouseevent_modal/CMakeLists.txt b/tests/auto/gui/kernel/qmouseevent_modal/CMakeLists.txt
index 698327736e..034b9c794d 100644
--- a/tests/auto/gui/kernel/qmouseevent_modal/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qmouseevent_modal/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qmouseevent_modal.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmouseevent_modal Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmouseevent_modal LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmouseevent_modal
SOURCES
tst_qmouseevent_modal.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp b/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp
index ec2a9729bb..0fe218d503 100644
--- a/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.cpp
+++ b/tests/auto/gui/kernel/qmouseevent_modal/tst_qmouseevent_modal.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 <QTest>
diff --git a/tests/auto/gui/kernel/qopenglwindow/CMakeLists.txt b/tests/auto/gui/kernel/qopenglwindow/CMakeLists.txt
index d171716776..0f57b98bc3 100644
--- a/tests/auto/gui/kernel/qopenglwindow/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qopenglwindow/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qopenglwindow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qopenglwindow Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qopenglwindow LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qopenglwindow
SOURCES
tst_qopenglwindow.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/kernel/qopenglwindow/tst_qopenglwindow.cpp b/tests/auto/gui/kernel/qopenglwindow/tst_qopenglwindow.cpp
index 379034a20e..06a1ffb296 100644
--- a/tests/auto/gui/kernel/qopenglwindow/tst_qopenglwindow.cpp
+++ b/tests/auto/gui/kernel/qopenglwindow/tst_qopenglwindow.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 <QtOpenGL/QOpenGLWindow>
#include <QTest>
@@ -144,6 +119,9 @@ void tst_QOpenGLWindow::resize()
if (isPlatformWayland())
QSKIP("Wayland: Crashes on Intel Mesa due to a driver bug (QTBUG-66848).");
+ if (QGuiApplication::platformName().startsWith(QLatin1String("eglfs"), Qt::CaseInsensitive))
+ QSKIP("EGLFS does not allow resizing on top level window");
+
Window w;
w.reset();
w.resize(640, 480);
diff --git a/tests/auto/gui/kernel/qpalette/CMakeLists.txt b/tests/auto/gui/kernel/qpalette/CMakeLists.txt
index f69ac75a41..7983b9ac25 100644
--- a/tests/auto/gui/kernel/qpalette/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qpalette/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qpalette.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpalette Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpalette LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpalette
SOURCES
tst_qpalette.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/kernel/qpalette/tst_qpalette.cpp b/tests/auto/gui/kernel/qpalette/tst_qpalette.cpp
index 9ef313f36d..c21828bee2 100644
--- a/tests/auto/gui/kernel/qpalette/tst_qpalette.cpp
+++ b/tests/auto/gui/kernel/qpalette/tst_qpalette.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 <QTest>
@@ -47,6 +22,8 @@ private Q_SLOTS:
void noBrushesSetForDefaultPalette();
void cannotCheckIfInvalidBrushSet();
void checkIfBrushForCurrentGroupSet();
+ void cacheKey();
+ void dataStream();
};
void tst_QPalette::roleValues_data()
@@ -75,9 +52,10 @@ void tst_QPalette::roleValues_data()
QTest::newRow("QPalette::ToolTipBase") << int(QPalette::ToolTipBase) << 18;
QTest::newRow("QPalette::ToolTipText") << int(QPalette::ToolTipText) << 19;
QTest::newRow("QPalette::PlaceholderText") << int(QPalette::PlaceholderText) << 20;
+ QTest::newRow("QPalette::Accent") << int(QPalette::Accent) << 21;
// Change this value as you add more roles.
- QTest::newRow("QPalette::NColorRoles") << int(QPalette::NColorRoles) << 21;
+ QTest::newRow("QPalette::NColorRoles") << int(QPalette::NColorRoles) << 22;
}
void tst_QPalette::roleValues()
@@ -122,6 +100,21 @@ void tst_QPalette::resolve()
QVERIFY(p2ResolvedTo1 != p1);
QVERIFY(p2ResolvedTo1 != p2);
+
+ QPalette p3;
+ // ensure the resolve mask is full
+ for (int r = 0; r < QPalette::NColorRoles; ++r)
+ p3.setBrush(QPalette::All, QPalette::ColorRole(r), Qt::red);
+ const QPalette::ResolveMask fullMask = p3.resolveMask();
+
+ QPalette p3ResolvedToP1 = p3.resolve(p1);
+ QVERIFY(p3ResolvedToP1.isCopyOf(p3));
+
+ QPalette p4;
+ QCOMPARE(p4.resolveMask(), QPalette::ResolveMask{});
+ // resolve must detach even if p4 has no mask
+ p4 = p4.resolve(p3);
+ QCOMPARE(p3.resolveMask(), fullMask);
}
@@ -207,9 +200,6 @@ void tst_QPalette::setBrush()
const QPalette pp = p;
QVERIFY(pp.isCopyOf(p));
- // Setting the same brush won't detach
- p.setBrush(QPalette::Disabled, QPalette::Button, Qt::green);
- QVERIFY(pp.isCopyOf(p));
}
void tst_QPalette::isBrushSet()
@@ -234,7 +224,7 @@ void tst_QPalette::isBrushSet()
QVERIFY(!p2.isBrushSet(QPalette::Active, QPalette::Dark));
p2.setBrush(QPalette::Active, QPalette::Dark, p2.brush(QPalette::Active, QPalette::Dark));
QVERIFY(!p3.isBrushSet(QPalette::Active, QPalette::Dark));
- QVERIFY(!p2.isBrushSet(QPalette::Active, QPalette::Dark));
+ QVERIFY(p2.isBrushSet(QPalette::Active, QPalette::Dark));
}
void tst_QPalette::setAllPossibleBrushes()
@@ -248,8 +238,14 @@ void tst_QPalette::setAllPossibleBrushes()
}
for (int r = 0; r < QPalette::NColorRoles; ++r) {
+ const QPalette::ColorRole role = static_cast<QPalette::ColorRole>(r);
for (int g = 0; g < QPalette::NColorGroups; ++g) {
- QVERIFY(p.isBrushSet(QPalette::ColorGroup(g), QPalette::ColorRole(r)));
+ const QPalette::ColorGroup group = static_cast<QPalette::ColorGroup>(g);
+ // NoRole has no resolve bit => isBrushSet returns false
+ if (role == QPalette::NoRole)
+ QVERIFY(!p.isBrushSet(group, role));
+ else
+ QVERIFY(p.isBrushSet(group, role));
}
}
}
@@ -277,5 +273,120 @@ void tst_QPalette::checkIfBrushForCurrentGroupSet()
QVERIFY(p.isBrushSet(QPalette::Current, QPalette::Link));
}
+void tst_QPalette::cacheKey()
+{
+ const QPalette defaultPalette;
+ // precondition: all palettes are expected to have contrasting text on base
+ QVERIFY(defaultPalette.base() != defaultPalette.text());
+ const auto defaultCacheKey = defaultPalette.cacheKey();
+ const auto defaultSerNo = defaultCacheKey >> 32;
+ const auto defaultDetachNo = defaultCacheKey & 0xffffffff;
+
+ QPalette changeTwicePalette(defaultPalette);
+ changeTwicePalette.setBrush(QPalette::All, QPalette::ButtonText, Qt::red);
+ const auto firstChangeCacheKey = changeTwicePalette.cacheKey();
+ QCOMPARE_NE(firstChangeCacheKey, defaultCacheKey);
+ changeTwicePalette.setBrush(QPalette::All, QPalette::ButtonText, Qt::green);
+ const auto secondChangeCacheKey = changeTwicePalette.cacheKey();
+ QCOMPARE_NE(firstChangeCacheKey, secondChangeCacheKey);
+
+ QPalette copyDifferentData(defaultPalette);
+ QPalette copyDifferentMask(defaultPalette);
+ QPalette copyDifferentMaskAndData(defaultPalette);
+
+ QCOMPARE(defaultPalette.cacheKey(), copyDifferentData.cacheKey());
+
+ // deep detach of both private and data
+ copyDifferentData.setBrush(QPalette::Base, defaultPalette.text());
+ const auto differentDataKey = copyDifferentData.cacheKey();
+ const auto differentDataSerNo = differentDataKey >> 32;
+ const auto differentDataDetachNo = differentDataKey & 0xffffffff;
+ auto loggerDeepDetach = qScopeGuard([&](){
+ qDebug() << "Deep detach serial" << differentDataSerNo;
+ qDebug() << "Deep detach detach number" << differentDataDetachNo;
+ });
+
+ QCOMPARE_NE(copyDifferentData.cacheKey(), defaultCacheKey);
+ QCOMPARE(defaultPalette.cacheKey(), defaultCacheKey);
+
+ // shallow detach, both privates reference the same data
+ copyDifferentMask.setResolveMask(0xffffffffffffffff);
+ const auto differentMaskKey = copyDifferentMask.cacheKey();
+ const auto differentMaskSerNo = differentMaskKey >> 32;
+ const auto differentMaskDetachNo = differentMaskKey & 0xffffffff;
+ auto loggerShallowDetach = qScopeGuard([&](){
+ qDebug() << "Shallow detach serial" << differentMaskSerNo;
+ qDebug() << "Shallow detach detach number" << differentMaskDetachNo;
+ });
+
+ QCOMPARE(differentMaskSerNo, defaultSerNo);
+ QCOMPARE_NE(differentMaskSerNo, defaultDetachNo);
+ QCOMPARE_NE(differentMaskKey, defaultCacheKey);
+ QCOMPARE_NE(differentMaskKey, differentDataKey);
+
+ // shallow detach, both privates reference the same data
+ copyDifferentMaskAndData.setResolveMask(0xeeeeeeeeeeeeeeee);
+ const auto modifiedCacheKey = copyDifferentMaskAndData.cacheKey();
+ QCOMPARE_NE(modifiedCacheKey, copyDifferentMask.cacheKey());
+ QCOMPARE_NE(modifiedCacheKey, defaultCacheKey);
+ QCOMPARE_NE(modifiedCacheKey, copyDifferentData.cacheKey());
+ QCOMPARE_NE(copyDifferentMask.cacheKey(), defaultCacheKey);
+
+ // full detach - both key elements are different
+ copyDifferentMaskAndData.setBrush(QPalette::Base, defaultPalette.text());
+ const auto modifiedAllKey = copyDifferentMaskAndData.cacheKey();
+ const auto modifiedAllSerNo = modifiedAllKey >> 32;
+ const auto modifiedAllDetachNo = modifiedAllKey & 0xffffffff;
+ QCOMPARE_NE(modifiedAllSerNo, defaultSerNo);
+ QCOMPARE_NE(modifiedAllDetachNo, defaultDetachNo);
+
+ QCOMPARE_NE(modifiedAllKey, copyDifferentMask.cacheKey());
+ QCOMPARE_NE(modifiedAllKey, defaultCacheKey);
+ QCOMPARE_NE(modifiedAllKey, differentDataKey);
+ QCOMPARE_NE(modifiedAllKey, modifiedCacheKey);
+
+ loggerDeepDetach.dismiss();
+ loggerShallowDetach.dismiss();
+}
+
+void tst_QPalette::dataStream()
+{
+ const QColor highlight(42, 42, 42);
+ const QColor accent(13, 13, 13);
+ QPalette palette;
+ palette.setBrush(QPalette::Highlight, highlight);
+ palette.setBrush(QPalette::Accent, accent);
+
+ // When saved with Qt_6_5 or earlier, Accent defaults to Highlight
+ {
+ QByteArray b;
+ {
+ QDataStream stream(&b, QIODevice::WriteOnly);
+ stream.setVersion(QDataStream::Qt_6_5);
+ stream << palette;
+ }
+ QPalette test;
+ QDataStream stream (&b, QIODevice::ReadOnly);
+ stream.setVersion(QDataStream::Qt_6_5);
+ stream >> test;
+ QCOMPARE(test.accent().color(), highlight);
+ }
+
+ // When saved with Qt_6_6 or later, Accent is saved explicitly
+ {
+ QByteArray b;
+ {
+ QDataStream stream(&b, QIODevice::WriteOnly);
+ stream.setVersion(QDataStream::Qt_6_6);
+ stream << palette;
+ }
+ QPalette test;
+ QDataStream stream (&b, QIODevice::ReadOnly);
+ stream.setVersion(QDataStream::Qt_6_6);
+ stream >> test;
+ QCOMPARE(test.accent().color(), accent);
+ }
+}
+
QTEST_MAIN(tst_QPalette)
#include "tst_qpalette.moc"
diff --git a/tests/auto/gui/kernel/qpixelformat/CMakeLists.txt b/tests/auto/gui/kernel/qpixelformat/CMakeLists.txt
index e33600dd8c..c711ceeafa 100644
--- a/tests/auto/gui/kernel/qpixelformat/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qpixelformat/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qpixelformat.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpixelformat Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpixelformat LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpixelformat
SOURCES
tst_qpixelformat.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/kernel/qpixelformat/tst_qpixelformat.cpp b/tests/auto/gui/kernel/qpixelformat/tst_qpixelformat.cpp
index 6372303290..d6d471bf6b 100644
--- a/tests/auto/gui/kernel/qpixelformat/tst_qpixelformat.cpp
+++ b/tests/auto/gui/kernel/qpixelformat/tst_qpixelformat.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 <QTest>
#include <QtGui/qpixelformat.h>
diff --git a/tests/auto/gui/kernel/qrasterwindow/CMakeLists.txt b/tests/auto/gui/kernel/qrasterwindow/CMakeLists.txt
index 82391cf18f..dc9d6a70c7 100644
--- a/tests/auto/gui/kernel/qrasterwindow/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qrasterwindow/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qrasterwindow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qrasterwindow Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qrasterwindow LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qrasterwindow
SOURCES
tst_qrasterwindow.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/kernel/qrasterwindow/tst_qrasterwindow.cpp b/tests/auto/gui/kernel/qrasterwindow/tst_qrasterwindow.cpp
index f0725bff2d..a06e360e35 100644
--- a/tests/auto/gui/kernel/qrasterwindow/tst_qrasterwindow.cpp
+++ b/tests/auto/gui/kernel/qrasterwindow/tst_qrasterwindow.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 <QtGui/QRasterWindow>
#include <QTest>
@@ -70,7 +45,7 @@ void tst_QRasterWindow::basic()
w.reset();
w.resize(400, 400);
w.show();
- QVERIFY(QTest::qWaitForWindowExposed(&w));;
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
QVERIFY(w.paintCount >= 1);
diff --git a/tests/auto/gui/kernel/qscreen/BLACKLIST b/tests/auto/gui/kernel/qscreen/BLACKLIST
index 0395ea7b1d..ca3136fdb2 100644
--- a/tests/auto/gui/kernel/qscreen/BLACKLIST
+++ b/tests/auto/gui/kernel/qscreen/BLACKLIST
@@ -1,3 +1,3 @@
-# QTBUG-87390
[grabWindow]
-android
+# QTBUG-100412
+windows
diff --git a/tests/auto/gui/kernel/qscreen/CMakeLists.txt b/tests/auto/gui/kernel/qscreen/CMakeLists.txt
index 9bed97cfcb..8502176ca4 100644
--- a/tests/auto/gui/kernel/qscreen/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qscreen/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qscreen.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qscreen Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qscreen LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qscreen
SOURCES
tst_qscreen.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/kernel/qscreen/tst_qscreen.cpp b/tests/auto/gui/kernel/qscreen/tst_qscreen.cpp
index 83d476e812..74a03ac851 100644
--- a/tests/auto/gui/kernel/qscreen/tst_qscreen.cpp
+++ b/tests/auto/gui/kernel/qscreen/tst_qscreen.cpp
@@ -1,35 +1,13 @@
-/****************************************************************************
-**
-** 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 <qpainter.h>
#include <qrasterwindow.h>
#include <qscreen.h>
#include <qpa/qwindowsysteminterface.h>
+#include <qpa/qplatformintegration.h>
+#include <private/qguiapplication_p.h>
+#include <private/qhighdpiscaling_p.h>
#include <QTest>
#include <QSignalSpy>
@@ -180,34 +158,34 @@ void tst_QScreen::orientationChange()
QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::LandscapeOrientation);
QWindowSystemInterface::flushWindowSystemEvents();
QTRY_COMPARE(screen->orientation(), Qt::LandscapeOrientation);
- QCOMPARE(spy.count(), ++expectedSignalCount);
+ QCOMPARE(spy.size(), ++expectedSignalCount);
QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::PortraitOrientation);
QWindowSystemInterface::flushWindowSystemEvents();
QTRY_COMPARE(screen->orientation(), Qt::PortraitOrientation);
- QCOMPARE(spy.count(), ++expectedSignalCount);
+ QCOMPARE(spy.size(), ++expectedSignalCount);
QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::InvertedLandscapeOrientation);
QWindowSystemInterface::flushWindowSystemEvents();
QTRY_COMPARE(screen->orientation(), Qt::InvertedLandscapeOrientation);
- QCOMPARE(spy.count(), ++expectedSignalCount);
+ QCOMPARE(spy.size(), ++expectedSignalCount);
QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::InvertedPortraitOrientation);
QWindowSystemInterface::flushWindowSystemEvents();
QTRY_COMPARE(screen->orientation(), Qt::InvertedPortraitOrientation);
- QCOMPARE(spy.count(), ++expectedSignalCount);
+ QCOMPARE(spy.size(), ++expectedSignalCount);
QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::LandscapeOrientation);
QWindowSystemInterface::flushWindowSystemEvents();
QTRY_COMPARE(screen->orientation(), Qt::LandscapeOrientation);
- QCOMPARE(spy.count(), ++expectedSignalCount);
+ QCOMPARE(spy.size(), ++expectedSignalCount);
}
void tst_QScreen::grabWindow_data()
{
- if (QGuiApplication::platformName().startsWith(QLatin1String("offscreen"), Qt::CaseInsensitive))
- QSKIP("Offscreen: Screen grabbing not implemented.");
-
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::ScreenWindowGrabbing)
+ || (QGuiApplication::platformName().toLower() == QStringLiteral("xcb") && !qEnvironmentVariableIsEmpty("WAYLAND_DISPLAY")))
+ QSKIP("This platform does not support grabbing windows on screen.");
QTest::addColumn<int>("screenIndex");
QTest::addColumn<QByteArray>("screenName");
QTest::addColumn<bool>("grabWindow");
@@ -279,20 +257,30 @@ void tst_QScreen::grabWindow()
QCOMPARE(screen->name().toUtf8(), screenName);
const double screenDpr = screen->devicePixelRatio();
+ if (QHighDpiScaling::isActive()) {
+ const float rawFactor = QHighDpiScaling::factor(screen);
+ const float roundedFactor = qRound(rawFactor);
+ if (!qFuzzyCompare(roundedFactor, rawFactor))
+ QSKIP("HighDPI enabled with non-integer factor. Skip due to possible rounding errors.");
+ }
+
Window window(screen);
window.setGeometry(windowRect);
+#ifndef Q_OS_ANDROID
window.show();
+#else
+ window.showNormal();
+#endif
if (!QTest::qWaitForWindowExposed(&window))
QSKIP("Failed to expose window - aborting");
- if (QGuiApplication::platformName().startsWith(QLatin1String("xcb"), Qt::CaseInsensitive))
- QTest::qWait(1500); // this is ridiculously necessary because of effects combined with slowness of VMs
-#ifdef Q_OS_MACOS // wait for desktop on screen to scroll into place
- QTest::qWait(1000);
-#endif
+ // this is necessary because of scrolling effects combined with potential slowness of VMs
+ QTest::qWait(1500);
- QSize expectedGrabSize = grabRect.isValid() ? grabRect.size() : (grabWindow ? windowRect.size() : screen->size());
+ QSize expectedGrabSize = grabRect.isValid()
+ ? grabRect.size()
+ : (grabWindow ? windowRect.size() : screen->size());
// we ask for pixel coordinates, but will get a pixmap with device-specific DPR
expectedGrabSize *= screen->devicePixelRatio();
@@ -300,7 +288,9 @@ void tst_QScreen::grabWindow()
QImage paintedImage = window.image;
QCOMPARE(paintedImage.devicePixelRatio(), screenDpr);
- const QPixmap pixmap = screen->grabWindow(grabWindow ? window.winId() : 0, grabRect.x(), grabRect.y(), grabRect.width(), grabRect.height());
+ const QPixmap pixmap = screen->grabWindow(grabWindow
+ ? window.winId()
+ : 0, grabRect.x(), grabRect.y(), grabRect.width(), grabRect.height());
QImage grabbedImage = pixmap.toImage();
const QSize grabbedSize = grabbedImage.size();
diff --git a/tests/auto/gui/kernel/qshortcut/CMakeLists.txt b/tests/auto/gui/kernel/qshortcut/CMakeLists.txt
index 469ab47769..517a4e8a1a 100644
--- a/tests/auto/gui/kernel/qshortcut/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qshortcut/CMakeLists.txt
@@ -1,12 +1,20 @@
-# Generated from qshortcut.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qshortcut_kernel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qshortcut_kernel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qshortcut_kernel
SOURCES
tst_qshortcut.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
+ Qt::GuiPrivate
)
diff --git a/tests/auto/gui/kernel/qshortcut/tst_qshortcut.cpp b/tests/auto/gui/kernel/qshortcut/tst_qshortcut.cpp
index 777f486263..cb6ebab800 100644
--- a/tests/auto/gui/kernel/qshortcut/tst_qshortcut.cpp
+++ b/tests/auto/gui/kernel/qshortcut/tst_qshortcut.cpp
@@ -1,81 +1,59 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtGui/qguiapplication.h>
#include <QtGui/qshortcut.h>
-#include <QtGui/qpainter.h>
-#include <QtGui/qrasterwindow.h>
-#include <QtGui/qscreen.h>
#include <QtGui/qwindow.h>
+#include <QtTest/qsignalspy.h>
+
+#include <QtGui/private/qguiapplication_p.h>
+#include <qpa/qplatformintegration.h>
class tst_QShortcut : public QObject
{
Q_OBJECT
-public:
private slots:
- void trigger();
-};
-
-class ColoredWindow : public QRasterWindow {
-public:
- ColoredWindow(QColor c) : m_color(c) {}
-
-protected:
- void paintEvent(QPaintEvent *event) override;
-
-private:
- const QColor m_color;
+ void applicationShortcut();
+ void windowShortcut();
};
-void ColoredWindow::paintEvent(QPaintEvent *)
+void tst_QShortcut::applicationShortcut()
{
- QPainter p(this);
- p.fillRect(QRect(QPoint(), size()), m_color);
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("Window activation is not supported");
+
+ auto *shortcut = new QShortcut(Qt::CTRL | Qt::Key_A, this);
+ shortcut->setContext(Qt::ApplicationShortcut);
+ QSignalSpy activatedSpy(shortcut, &QShortcut::activated);
+
+ // Need a window to send key event to, even if the shortcut is application
+ // global. The documentation for Qt::ApplicationShortcut also says that
+ // the shortcut "is active when one of the applications windows are active",
+ // but this is only honored for Qt Widgets, not for Qt Gui. For now we
+ // activate the window just in case.
+ QWindow window;
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+ QTRY_COMPARE(QGuiApplication::applicationState(), Qt::ApplicationActive);
+ QTest::sendKeyEvent(QTest::Shortcut, &window, Qt::Key_A, 'a', Qt::ControlModifier);
+
+ QVERIFY(activatedSpy.size() > 0);
}
-static void sendKey(QWindow *target, Qt::Key k, char c, Qt::KeyboardModifiers modifiers)
+void tst_QShortcut::windowShortcut()
{
- QTest::sendKeyEvent(QTest::Press, target, k, c, modifiers);
- QTest::sendKeyEvent(QTest::Release, target, k, c, modifiers);
-}
-
-void tst_QShortcut::trigger()
-{
- ColoredWindow w(Qt::yellow);
- w.setTitle(QTest::currentTestFunction());
- w.resize(QGuiApplication::primaryScreen()->size() / 4);
+ QWindow w;
new QShortcut(Qt::CTRL | Qt::Key_Q, &w, SLOT(close()));
w.show();
QVERIFY(QTest::qWaitForWindowExposed(&w));
+
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QEXPECT_FAIL("", "It failed on Wayland, QTBUG-120334", Abort);
+
QTRY_VERIFY(QGuiApplication::applicationState() == Qt::ApplicationActive);
- sendKey(&w, Qt::Key_Q, 'q', Qt::ControlModifier);
+ QTest::sendKeyEvent(QTest::Click, &w, Qt::Key_Q, 'q', Qt::ControlModifier);
QTRY_VERIFY(!w.isVisible());
}
diff --git a/tests/auto/gui/kernel/qsurfaceformat/CMakeLists.txt b/tests/auto/gui/kernel/qsurfaceformat/CMakeLists.txt
index f1fab57ebe..1303f48cf3 100644
--- a/tests/auto/gui/kernel/qsurfaceformat/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qsurfaceformat/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsurfaceformat.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsurfaceformat Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsurfaceformat LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsurfaceformat
SOURCES
tst_qsurfaceformat.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/kernel/qsurfaceformat/tst_qsurfaceformat.cpp b/tests/auto/gui/kernel/qsurfaceformat/tst_qsurfaceformat.cpp
index f4410b2dae..3f655bd905 100644
--- a/tests/auto/gui/kernel/qsurfaceformat/tst_qsurfaceformat.cpp
+++ b/tests/auto/gui/kernel/qsurfaceformat/tst_qsurfaceformat.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 <qsurfaceformat.h>
diff --git a/tests/auto/gui/kernel/qtouchevent/BLACKLIST b/tests/auto/gui/kernel/qtouchevent/BLACKLIST
index 2876c120fc..c4e4b2291d 100644
--- a/tests/auto/gui/kernel/qtouchevent/BLACKLIST
+++ b/tests/auto/gui/kernel/qtouchevent/BLACKLIST
@@ -1,8 +1,6 @@
-[multiPointRawEventTranslationOnTouchScreen]
-ubuntu-16.04
-[multiPointRawEventTranslationOnTouchScreen]
-android
[multiPointRawEventTranslationOnTouchPad]
+# QTBUG-101519
+windows-11
android
[touchBeginWithGraphicsWidget]
android
diff --git a/tests/auto/gui/kernel/qtouchevent/CMakeLists.txt b/tests/auto/gui/kernel/qtouchevent/CMakeLists.txt
index e9a6271f58..160263ac66 100644
--- a/tests/auto/gui/kernel/qtouchevent/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qtouchevent/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtouchevent.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtouchevent Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtouchevent LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtouchevent
SOURCES
tst_qtouchevent.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
diff --git a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp
index cc86e866f6..37ddcb8962 100644
--- a/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp
+++ b/tests/auto/gui/kernel/qtouchevent/tst_qtouchevent.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the $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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui/QCursor>
#include <QtGui/QScreen>
@@ -34,12 +9,18 @@
#include <QtWidgets/QGraphicsWidget>
#include <QtWidgets/QWidget>
#include <QTest>
+#include <QSet>
+#include <QVarLengthArray>
#include <qpa/qwindowsysteminterface.h>
#include <qpa/qwindowsysteminterface_p.h>
#include <private/qevent_p.h>
#include <QtGui/private/qeventpoint_p.h>
#include <private/qhighdpiscaling_p.h>
#include <private/qpointingdevice_p.h>
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformintegration.h>
+
+#include <QtCore/qpointer.h>
Q_LOGGING_CATEGORY(lcTests, "qt.gui.tests")
@@ -69,6 +50,24 @@ public:
deleteInTouchBegin = deleteInTouchUpdate = deleteInTouchEnd = false;
}
+ void paintEvent(QPaintEvent *) override
+ {
+ QPainter painter(this);
+ painter.drawRect(rect());
+ painter.setPen(Qt::darkGray);
+ painter.drawText(rect(), Qt::AlignHCenter | Qt::AlignCenter, objectName());
+ static const QString pointFormat = QString::fromUtf8("\360\237\226\227 %1, %2");
+ painter.setPen(Qt::darkGreen);
+ for (const auto &pt : std::as_const(touchBeginPoints))
+ painter.drawText(pt.position(), pointFormat.arg(pt.position().toPoint().x()).arg(pt.position().toPoint().y()));
+ painter.setPen(Qt::darkYellow);
+ for (const auto &pt : std::as_const(touchUpdatePoints))
+ painter.drawText(pt.position(), pointFormat.arg(pt.position().toPoint().x()).arg(pt.position().toPoint().y()));
+ painter.setPen(Qt::darkRed);
+ for (const auto &pt : std::as_const(touchEndPoints))
+ painter.drawText(pt.position(), pointFormat.arg(pt.position().toPoint().x()).arg(pt.position().toPoint().y()));
+ }
+
bool event(QEvent *event) override
{
lastNormalizedPositions.clear();
@@ -82,13 +81,15 @@ public:
auto touchEvent = static_cast<QTouchEvent *>(event);
touchBeginPoints = touchEvent->points();
Q_ASSERT(touchBeginPoints.first().device() == touchEvent->pointingDevice());
- for (const QEventPoint &pt : qAsConst(touchBeginPoints))
+ for (const QEventPoint &pt : std::as_const(touchBeginPoints))
lastNormalizedPositions << pt.normalizedPosition();
timestamp = touchEvent->timestamp();
deviceFromEvent = touchEvent->pointingDevice();
event->setAccepted(acceptTouchBegin);
if (deleteInTouchBegin)
delete this;
+ else
+ update();
break;
}
case QEvent::TouchUpdate: {
@@ -98,13 +99,15 @@ public:
seenTouchUpdate = seenTouchBegin && !seenTouchEnd;
auto touchEvent = static_cast<QTouchEvent *>(event);
touchUpdatePoints = touchEvent->points();
- for (const QEventPoint &pt : qAsConst(touchUpdatePoints))
+ for (const QEventPoint &pt : std::as_const(touchUpdatePoints))
lastNormalizedPositions << pt.normalizedPosition();
timestamp = touchEvent->timestamp();
deviceFromEvent = touchEvent->pointingDevice();
event->setAccepted(acceptTouchUpdate);
if (deleteInTouchUpdate)
delete this;
+ else
+ update();
break;
}
case QEvent::TouchEnd: {
@@ -114,13 +117,15 @@ public:
seenTouchEnd = seenTouchBegin && !seenTouchEnd;
auto touchEvent = static_cast<QTouchEvent *>(event);
touchEndPoints = touchEvent->points();
- for (const QEventPoint &pt : qAsConst(touchEndPoints))
+ for (const QEventPoint &pt : std::as_const(touchEndPoints))
lastNormalizedPositions << pt.normalizedPosition();
timestamp = touchEvent->timestamp();
deviceFromEvent = touchEvent->pointingDevice();
event->setAccepted(acceptTouchEnd);
if (deleteInTouchEnd)
delete this;
+ else
+ update();
break;
}
default:
@@ -366,9 +371,11 @@ void tst_QTouchEvent::state()
QVERIFY(!touchEvent3.isBeginEvent());
QVERIFY(!touchEvent3.isUpdateEvent());
QVERIFY(touchEvent3.isEndEvent());
+#if QT_DEPRECATED_SINCE(6, 0)
QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED // test Qt 5 compatibility wrappers
QCOMPARE(touchEvent3.touchPoints(), touchEvent3.points());
QT_WARNING_POP
+#endif
}
void tst_QTouchEvent::touchDisabledByDefault()
@@ -729,7 +736,7 @@ void tst_QTouchEvent::basicRawEventTranslation()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(!touchWidget.seenTouchUpdate);
QVERIFY(!touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchBeginPoints.count(), 1);
+ QCOMPARE(touchWidget.touchBeginPoints.size(), 1);
QCOMPARE(touchWidget.timestamp, timestamp);
QEventPoint touchBeginPoint = touchWidget.touchBeginPoints.first();
QCOMPARE(touchBeginPoint.id(), 0);
@@ -759,7 +766,7 @@ void tst_QTouchEvent::basicRawEventTranslation()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(touchWidget.seenTouchUpdate);
QVERIFY(!touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchUpdatePoints.count(), 1);
+ QCOMPARE(touchWidget.touchUpdatePoints.size(), 1);
QEventPoint touchUpdatePoint = touchWidget.touchUpdatePoints.first();
QCOMPARE(touchUpdatePoint.id(), 0);
QCOMPARE(touchUpdatePoint.state(), rawTouchPoint.state());
@@ -787,7 +794,7 @@ void tst_QTouchEvent::basicRawEventTranslation()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(touchWidget.seenTouchUpdate);
QVERIFY(touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchEndPoints.count(), 1);
+ QCOMPARE(touchWidget.touchEndPoints.size(), 1);
QEventPoint touchEndPoint = touchWidget.touchEndPoints.first();
QCOMPARE(touchEndPoint.id(), 0);
QCOMPARE(touchEndPoint.state(), rawTouchPoint.state());
@@ -810,9 +817,11 @@ void tst_QTouchEvent::basicRawEventTranslation()
void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen()
{
tst_QTouchEventWidget touchWidget;
+ touchWidget.setObjectName("parent touch widget");
touchWidget.setWindowTitle(QTest::currentTestFunction());
touchWidget.setAttribute(Qt::WA_AcceptTouchEvents);
- touchWidget.setGeometry(100, 100, 400, 300);
+ const QPoint topLeft = QGuiApplication::primaryScreen()->availableGeometry().topLeft() + QPoint(100, 100);
+ touchWidget.setGeometry({topLeft, QSize(400, 300)});
tst_QTouchEventWidget leftWidget(&touchWidget);
leftWidget.setObjectName("leftWidget");
@@ -826,24 +835,25 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen()
touchWidget.show();
QVERIFY(QTest::qWaitForWindowExposed(&touchWidget));
+ if (touchWidget.geometry().topLeft() != topLeft) {
+ qCDebug(lcTests) << "tried to set position 100, 100 on screen; got geometry"
+ << touchWidget.geometry() << "frame" << touchWidget.frameGeometry();
+ QSKIP("failed to position the widget window on this platform");
+ }
- QPointF leftPos = leftWidget.rect().center();
- QPointF rightPos = rightWidget.rect().center();
- QPointF centerPos = touchWidget.rect().center();
- QPointF leftScreenPos = leftWidget.mapToGlobal(leftPos.toPoint());
- QPointF rightScreenPos = rightWidget.mapToGlobal(rightPos.toPoint());
- QPointF centerScreenPos = touchWidget.mapToGlobal(centerPos.toPoint());
+ QPoint leftPos = leftWidget.rect().center();
+ QPoint rightPos = rightWidget.rect().center();
+ QPoint centerPos = touchWidget.rect().center();
+ QPoint leftScenePos = leftWidget.mapToParent(leftPos);
+ QPoint rightScenePos = rightWidget.mapToParent(rightPos);
+ QPoint leftScreenPos = leftWidget.mapToGlobal(leftPos);
+ QPoint rightScreenPos = rightWidget.mapToGlobal(rightPos);
+ QPoint centerScreenPos = touchWidget.mapToGlobal(centerPos);
// generate TouchBegins on both leftWidget and rightWidget
- ulong timestamp = 0;
- auto rawTouchPoints = QList<QEventPoint>()
- << QEventPoint(0, QEventPoint::State::Pressed, QPointF(), leftScreenPos)
- << QEventPoint(1, QEventPoint::State::Pressed, QPointF(), rightScreenPos);
- QWindow *window = touchWidget.windowHandle();
- QList<QWindowSystemInterface::TouchPoint> nativeTouchPoints =
- QWindowSystemInterfacePrivate::toNativeTouchPoints(rawTouchPoints, window);
- QWindowSystemInterface::handleTouchEvent(window, ++timestamp, touchScreenDevice, nativeTouchPoints);
- QCoreApplication::processEvents();
+ auto touchSequence = QTest::touchEvent(touchWidget.windowHandle(), touchScreenDevice);
+ touchSequence.press(0, leftScenePos).press(1, rightScenePos);
+ QVERIFY(touchSequence.commit()); // verify acceptance
QVERIFY(!touchWidget.seenTouchBegin);
QVERIFY(!touchWidget.seenTouchUpdate);
QVERIFY(!touchWidget.seenTouchEnd);
@@ -853,14 +863,14 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen()
QVERIFY(rightWidget.seenTouchBegin);
QVERIFY(!rightWidget.seenTouchUpdate);
QVERIFY(!rightWidget.seenTouchEnd);
- QCOMPARE(leftWidget.touchBeginPoints.count(), 1);
- QCOMPARE(rightWidget.touchBeginPoints.count(), 1);
+ QCOMPARE(leftWidget.touchBeginPoints.size(), 1);
+ QCOMPARE(rightWidget.touchBeginPoints.size(), 1);
const int touchPointId0 = 0;
const int touchPointId1 = touchPointId0 + 1;
{
- QEventPoint leftTouchPoint = leftWidget.touchBeginPoints.first();
+ const QEventPoint &leftTouchPoint = leftWidget.touchBeginPoints.first();
QCOMPARE(leftTouchPoint.id(), touchPointId0);
- QCOMPARE(leftTouchPoint.state(), rawTouchPoints[0].state());
+ QCOMPARE(leftTouchPoint.state(), QEventPoint::Pressed);
QCOMPARE(leftTouchPoint.position(), leftPos);
QCOMPARE(leftTouchPoint.pressPosition(), leftPos);
QCOMPARE(leftTouchPoint.lastPosition(), leftPos);
@@ -870,15 +880,12 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen()
QCOMPARE(leftTouchPoint.globalPosition(), leftScreenPos);
QCOMPARE(leftTouchPoint.globalPressPosition(), leftScreenPos);
QCOMPARE(leftTouchPoint.globalLastPosition(), leftScreenPos);
- QCOMPARE(leftTouchPoint.position(), leftPos);
- QCOMPARE(leftTouchPoint.scenePosition(), leftScreenPos);
- QCOMPARE(leftTouchPoint.globalPosition(), leftScreenPos);
QCOMPARE(leftTouchPoint.ellipseDiameters(), QSizeF(0, 0));
QCOMPARE(leftTouchPoint.pressure(), qreal(1.));
- QEventPoint rightTouchPoint = rightWidget.touchBeginPoints.first();
+ const QEventPoint &rightTouchPoint = rightWidget.touchBeginPoints.first();
QCOMPARE(rightTouchPoint.id(), touchPointId1);
- QCOMPARE(rightTouchPoint.state(), rawTouchPoints[1].state());
+ QCOMPARE(rightTouchPoint.state(), QEventPoint::Pressed);
QCOMPARE(rightTouchPoint.position(), rightPos);
QCOMPARE(rightTouchPoint.pressPosition(), rightPos);
QCOMPARE(rightTouchPoint.lastPosition(), rightPos);
@@ -888,20 +895,13 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen()
QCOMPARE(rightTouchPoint.globalPosition(), rightScreenPos);
QCOMPARE(rightTouchPoint.globalPressPosition(), rightScreenPos);
QCOMPARE(rightTouchPoint.globalLastPosition(), rightScreenPos);
- QCOMPARE(rightTouchPoint.position(), rightPos);
- QCOMPARE(rightTouchPoint.scenePosition(), rightScreenPos);
- QCOMPARE(rightTouchPoint.globalPosition(), rightScreenPos);
QCOMPARE(rightTouchPoint.ellipseDiameters(), QSizeF(0, 0));
QCOMPARE(rightTouchPoint.pressure(), qreal(1.));
}
- rawTouchPoints.clear();
- rawTouchPoints << QEventPoint(0, QEventPoint::State::Updated, QPointF(), centerScreenPos)
- << QEventPoint(1, QEventPoint::State::Updated, QPointF(), centerScreenPos);
- nativeTouchPoints =
- QWindowSystemInterfacePrivate::toNativeTouchPoints(rawTouchPoints, window);
- QWindowSystemInterface::handleTouchEvent(window, ++timestamp, touchScreenDevice, nativeTouchPoints);
- QCoreApplication::processEvents();
+ // an unlikely event with the two touchpoints moving exactly on top of each other
+ touchSequence.move(0, centerPos).move(1, centerPos);
+ QVERIFY(touchSequence.commit()); // verify acceptance
QVERIFY(!touchWidget.seenTouchBegin);
QVERIFY(!touchWidget.seenTouchUpdate);
QVERIFY(!touchWidget.seenTouchEnd);
@@ -911,13 +911,13 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen()
QVERIFY(rightWidget.seenTouchBegin);
QVERIFY(rightWidget.seenTouchUpdate);
QVERIFY(!rightWidget.seenTouchEnd);
- QCOMPARE(leftWidget.touchUpdatePoints.count(), 1);
- QCOMPARE(rightWidget.touchUpdatePoints.count(), 1);
+ QCOMPARE(leftWidget.touchUpdatePoints.size(), 1);
+ QCOMPARE(rightWidget.touchUpdatePoints.size(), 1);
{
- QEventPoint leftTouchPoint = leftWidget.touchUpdatePoints.first();
+ const QEventPoint &leftTouchPoint = leftWidget.touchUpdatePoints.first();
QCOMPARE(leftTouchPoint.id(), touchPointId0);
- QCOMPARE(leftTouchPoint.state(), rawTouchPoints[0].state());
- QCOMPARE(leftTouchPoint.position(), QPointF(leftWidget.mapFromParent(centerPos.toPoint())));
+ QCOMPARE(leftTouchPoint.state(), QEventPoint::Updated);
+ QCOMPARE(leftTouchPoint.position(), QPointF(leftWidget.mapFromParent(centerPos)));
QCOMPARE(leftTouchPoint.pressPosition(), leftPos);
QCOMPARE(leftTouchPoint.lastPosition(), leftPos);
QCOMPARE(leftTouchPoint.scenePosition(), centerScreenPos);
@@ -926,16 +926,13 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen()
QCOMPARE(leftTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(leftTouchPoint.globalPressPosition(), leftScreenPos);
QCOMPARE(leftTouchPoint.globalLastPosition(), leftScreenPos);
- QCOMPARE(leftTouchPoint.position(), leftWidget.mapFromParent(centerPos.toPoint()));
- QCOMPARE(leftTouchPoint.scenePosition(), centerScreenPos);
- QCOMPARE(leftTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(leftTouchPoint.ellipseDiameters(), QSizeF(0, 0));
QCOMPARE(leftTouchPoint.pressure(), qreal(1.));
- QEventPoint rightTouchPoint = rightWidget.touchUpdatePoints.first();
+ const QEventPoint &rightTouchPoint = rightWidget.touchUpdatePoints.first();
QCOMPARE(rightTouchPoint.id(), touchPointId1);
- QCOMPARE(rightTouchPoint.state(), rawTouchPoints[1].state());
- QCOMPARE(rightTouchPoint.position(), QPointF(rightWidget.mapFromParent(centerPos.toPoint())));
+ QCOMPARE(rightTouchPoint.state(), QEventPoint::Updated);
+ QCOMPARE(rightTouchPoint.position(), QPointF(rightWidget.mapFromParent(centerPos)));
QCOMPARE(rightTouchPoint.pressPosition(), rightPos);
QCOMPARE(rightTouchPoint.lastPosition(), rightPos);
QCOMPARE(rightTouchPoint.scenePosition(), centerScreenPos);
@@ -944,21 +941,13 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen()
QCOMPARE(rightTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(rightTouchPoint.globalPressPosition(), rightScreenPos);
QCOMPARE(rightTouchPoint.globalLastPosition(), rightScreenPos);
- QCOMPARE(rightTouchPoint.position(), rightWidget.mapFromParent(centerPos.toPoint()));
- QCOMPARE(rightTouchPoint.scenePosition(), centerScreenPos);
- QCOMPARE(rightTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(rightTouchPoint.ellipseDiameters(), QSizeF(0, 0));
QCOMPARE(rightTouchPoint.pressure(), qreal(1.));
}
// generate TouchEnds on both leftWidget and rightWidget
- rawTouchPoints.clear();
- rawTouchPoints << QEventPoint(0, QEventPoint::State::Released, QPointF(), centerScreenPos)
- << QEventPoint(1, QEventPoint::State::Released, QPointF(), centerScreenPos);
- nativeTouchPoints =
- QWindowSystemInterfacePrivate::toNativeTouchPoints(rawTouchPoints, window);
- QWindowSystemInterface::handleTouchEvent(window, ++timestamp, touchScreenDevice, nativeTouchPoints);
- QCoreApplication::processEvents();
+ touchSequence.release(0, centerPos).release(1, centerPos);
+ QVERIFY(touchSequence.commit()); // verify acceptance
QVERIFY(!touchWidget.seenTouchBegin);
QVERIFY(!touchWidget.seenTouchUpdate);
QVERIFY(!touchWidget.seenTouchEnd);
@@ -968,13 +957,13 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen()
QVERIFY(rightWidget.seenTouchBegin);
QVERIFY(rightWidget.seenTouchUpdate);
QVERIFY(rightWidget.seenTouchEnd);
- QCOMPARE(leftWidget.touchEndPoints.count(), 1);
- QCOMPARE(rightWidget.touchEndPoints.count(), 1);
+ QCOMPARE(leftWidget.touchEndPoints.size(), 1);
+ QCOMPARE(rightWidget.touchEndPoints.size(), 1);
{
- QEventPoint leftTouchPoint = leftWidget.touchEndPoints.first();
+ const QEventPoint &leftTouchPoint = leftWidget.touchEndPoints.first();
QCOMPARE(leftTouchPoint.id(), touchPointId0);
- QCOMPARE(leftTouchPoint.state(), rawTouchPoints[0].state());
- QCOMPARE(leftTouchPoint.position(), QPointF(leftWidget.mapFromParent(centerPos.toPoint())));
+ QCOMPARE(leftTouchPoint.state(), QEventPoint::Released);
+ QCOMPARE(leftTouchPoint.position(), QPointF(leftWidget.mapFromParent(centerPos)));
QCOMPARE(leftTouchPoint.pressPosition(), leftPos);
QCOMPARE(leftTouchPoint.lastPosition(), leftPos);
QCOMPARE(leftTouchPoint.scenePosition(), centerScreenPos);
@@ -983,16 +972,13 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen()
QCOMPARE(leftTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(leftTouchPoint.globalPressPosition(), leftScreenPos);
QCOMPARE(leftTouchPoint.globalLastPosition(), leftScreenPos);
- QCOMPARE(leftTouchPoint.position(), leftWidget.mapFromParent(centerPos.toPoint()));
- QCOMPARE(leftTouchPoint.scenePosition(), centerScreenPos);
- QCOMPARE(leftTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(leftTouchPoint.ellipseDiameters(), QSizeF(0, 0));
QCOMPARE(leftTouchPoint.pressure(), qreal(0.));
- QEventPoint rightTouchPoint = rightWidget.touchEndPoints.first();
+ const QEventPoint &rightTouchPoint = rightWidget.touchEndPoints.first();
QCOMPARE(rightTouchPoint.id(), touchPointId1);
- QCOMPARE(rightTouchPoint.state(), rawTouchPoints[1].state());
- QCOMPARE(rightTouchPoint.position(), QPointF(rightWidget.mapFromParent(centerPos.toPoint())));
+ QCOMPARE(rightTouchPoint.state(), QEventPoint::Released);
+ QCOMPARE(rightTouchPoint.position(), QPointF(rightWidget.mapFromParent(centerPos)));
QCOMPARE(rightTouchPoint.pressPosition(), rightPos);
QCOMPARE(rightTouchPoint.lastPosition(), rightPos);
QCOMPARE(rightTouchPoint.scenePosition(), centerScreenPos);
@@ -1001,9 +987,6 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchScreen()
QCOMPARE(rightTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(rightTouchPoint.globalPressPosition(), rightScreenPos);
QCOMPARE(rightTouchPoint.globalLastPosition(), rightScreenPos);
- QCOMPARE(rightTouchPoint.position(), rightWidget.mapFromParent(centerPos.toPoint()));
- QCOMPARE(rightTouchPoint.scenePosition(), centerScreenPos);
- QCOMPARE(rightTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(rightTouchPoint.ellipseDiameters(), QSizeF(0, 0));
QCOMPARE(rightTouchPoint.pressure(), qreal(0.));
}
@@ -1033,7 +1016,7 @@ void tst_QTouchEvent::touchOnMultipleTouchscreens()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(!touchWidget.seenTouchUpdate);
QVERIFY(!touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchBeginPoints.count(), 1);
+ QCOMPARE(touchWidget.touchBeginPoints.size(), 1);
QCOMPARE(touchWidget.timestamp, timestamp);
QEventPoint touchBeginPoint = touchWidget.touchBeginPoints.first();
QCOMPARE(touchBeginPoint.id(), 1);
@@ -1048,7 +1031,7 @@ void tst_QTouchEvent::touchOnMultipleTouchscreens()
QWindowSystemInterface::handleTouchEvent(window, ++timestamp, secondaryTouchScreenDevice, nativeTouchPoints);
QCoreApplication::processEvents();
QVERIFY(!touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchBeginPoints.count(), 1);
+ QCOMPARE(touchWidget.touchBeginPoints.size(), 1);
QCOMPARE(touchWidget.timestamp, timestamp);
touchBeginPoint = touchWidget.touchBeginPoints[0];
QCOMPARE(touchBeginPoint.id(), 10);
@@ -1063,7 +1046,7 @@ void tst_QTouchEvent::touchOnMultipleTouchscreens()
QWindowSystemInterface::handleTouchEvent(window, ++timestamp, secondaryTouchScreenDevice, nativeTouchPoints);
QCoreApplication::processEvents();
QVERIFY(!touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchBeginPoints.count(), 1);
+ QCOMPARE(touchWidget.touchBeginPoints.size(), 1);
QCOMPARE(touchWidget.timestamp, timestamp);
touchBeginPoint = touchWidget.touchBeginPoints[0];
QCOMPARE(touchBeginPoint.id(), 11);
@@ -1079,7 +1062,7 @@ void tst_QTouchEvent::touchOnMultipleTouchscreens()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(touchWidget.seenTouchUpdate);
QVERIFY(!touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchUpdatePoints.count(), 1);
+ QCOMPARE(touchWidget.touchUpdatePoints.size(), 1);
QEventPoint touchUpdatePoint = touchWidget.touchUpdatePoints.first();
QCOMPARE(touchUpdatePoint.id(), 1);
QCOMPARE(touchUpdatePoint.state(), QEventPoint::State::Updated);
@@ -1094,7 +1077,7 @@ void tst_QTouchEvent::touchOnMultipleTouchscreens()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(touchWidget.seenTouchUpdate);
QVERIFY(touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchEndPoints.count(), 1);
+ QCOMPARE(touchWidget.touchEndPoints.size(), 1);
QEventPoint touchEndPoint = touchWidget.touchEndPoints.first();
QCOMPARE(touchEndPoint.id(), 1);
QCOMPARE(touchEndPoint.state(), QEventPoint::State::Released);
@@ -1119,7 +1102,7 @@ void tst_QTouchEvent::touchOnMultipleTouchscreens()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(touchWidget.seenTouchUpdate);
QVERIFY(!touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchUpdatePoints.count(), 2);
+ QCOMPARE(touchWidget.touchUpdatePoints.size(), 2);
QCOMPARE(touchWidget.touchUpdatePoints[0].id(), 10);
QCOMPARE(touchWidget.touchUpdatePoints[1].id(), 11);
@@ -1134,7 +1117,7 @@ void tst_QTouchEvent::touchOnMultipleTouchscreens()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(touchWidget.seenTouchUpdate);
QVERIFY(touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchEndPoints.count(), 1);
+ QCOMPARE(touchWidget.touchEndPoints.size(), 1);
touchEndPoint = touchWidget.touchEndPoints.first();
QCOMPARE(touchEndPoint.id(), 11);
QCOMPARE(touchEndPoint.state(), QEventPoint::State::Released);
@@ -1150,6 +1133,9 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
QSKIP("The macOS mouse cursor interferes with this test can cannot be moved away");
#endif
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
tst_QTouchEventWidget touchWidget;
touchWidget.setObjectName("touchWidget");
touchWidget.setWindowTitle(QTest::currentTestFunction());
@@ -1168,7 +1154,7 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
rightWidget.setGeometry(300, 100, 100, 100);
touchWidget.show();
- QVERIFY(QTest::qWaitForWindowExposed(&touchWidget));
+ QVERIFY(QTest::qWaitForWindowActive(&touchWidget));
const QPointF leftPos = leftWidget.rect().center();
const QPointF rightPos = rightWidget.rect().center();
@@ -1206,8 +1192,9 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
QVERIFY(!rightWidget.seenTouchBegin);
QVERIFY(!rightWidget.seenTouchUpdate);
QVERIFY(!rightWidget.seenTouchEnd);
- QCOMPARE(leftWidget.touchBeginPoints.count(), 2);
- QCOMPARE(rightWidget.touchBeginPoints.count(), 0);
+ QCOMPARE(leftWidget.touchBeginPoints.size(), 2);
+ QCOMPARE(rightWidget.touchBeginPoints.size(), 0);
+ QCOMPARE(leftWidget.lastNormalizedPositions.size(), 2);
{
QEventPoint leftTouchPoint = leftWidget.touchBeginPoints.at(0);
qCDebug(lcTests) << "lastNormalizedPositions after press" << leftWidget.lastNormalizedPositions;
@@ -1223,7 +1210,7 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
QCOMPARE(leftTouchPoint.globalPosition(), leftScreenPos);
QCOMPARE(leftTouchPoint.globalPressPosition(), leftScreenPos);
QCOMPARE(leftTouchPoint.globalLastPosition(), leftScreenPos);
- QVERIFY(qAbs(leftWidget.lastNormalizedPositions.at(0).x() - 0.2) < 0.05); // 0.198, might depend on window frame size
+ QCOMPARE_LT(qAbs(leftWidget.lastNormalizedPositions.at(0).x() - 0.2), 0.05); // 0.198, might depend on window frame size
QCOMPARE(leftTouchPoint.position(), leftPos);
QCOMPARE(leftTouchPoint.scenePosition(), leftScreenPos);
QCOMPARE(leftTouchPoint.globalPosition(), leftScreenPos);
@@ -1243,7 +1230,7 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
QCOMPARE(rightTouchPoint.globalPosition(), rightScreenPos);
QCOMPARE(rightTouchPoint.globalPressPosition(), rightScreenPos);
QCOMPARE(rightTouchPoint.globalLastPosition(), rightScreenPos);
- QVERIFY(qAbs(leftWidget.lastNormalizedPositions.at(1).x() - 0.8) < 0.05); // 0.798, might depend on window frame size
+ QCOMPARE_LT(qAbs(leftWidget.lastNormalizedPositions.at(1).x() - 0.8), 0.05); // 0.798, might depend on window frame size
QCOMPARE(rightTouchPoint.scenePosition(), rightScreenPos);
QCOMPARE(rightTouchPoint.globalPosition(), rightScreenPos);
QCOMPARE(rightTouchPoint.ellipseDiameters(), QSizeF(0, 0));
@@ -1268,8 +1255,9 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
QVERIFY(!rightWidget.seenTouchBegin);
QVERIFY(!rightWidget.seenTouchUpdate);
QVERIFY(!rightWidget.seenTouchEnd);
- QCOMPARE(leftWidget.touchUpdatePoints.count(), 2);
- QCOMPARE(rightWidget.touchUpdatePoints.count(), 0);
+ QCOMPARE(leftWidget.touchUpdatePoints.size(), 2);
+ QCOMPARE(rightWidget.touchUpdatePoints.size(), 0);
+ QCOMPARE(leftWidget.lastNormalizedPositions.size(), 2);
{
QEventPoint leftTouchPoint = leftWidget.touchUpdatePoints.at(0);
qCDebug(lcTests) << "lastNormalizedPositions after update" << leftWidget.lastNormalizedPositions;
@@ -1285,7 +1273,7 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
QCOMPARE(leftTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(leftTouchPoint.globalPressPosition(), leftScreenPos);
QCOMPARE(leftTouchPoint.globalLastPosition(), leftScreenPos);
- QVERIFY(qAbs(leftWidget.lastNormalizedPositions.at(0).x() - 0.5) < 0.05); // 0.498, might depend on window frame size
+ QCOMPARE_LT(qAbs(leftWidget.lastNormalizedPositions.at(0).x() - 0.5), 0.05); // 0.498, might depend on window frame size
QCOMPARE(leftTouchPoint.position(), leftWidget.mapFromParent(centerPos.toPoint()));
QCOMPARE(leftTouchPoint.scenePosition(), centerScreenPos);
QCOMPARE(leftTouchPoint.globalPosition(), centerScreenPos);
@@ -1305,7 +1293,7 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
QCOMPARE(rightTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(rightTouchPoint.globalPressPosition(), rightScreenPos);
QCOMPARE(rightTouchPoint.globalLastPosition(), rightScreenPos);
- QVERIFY(qAbs(leftWidget.lastNormalizedPositions.at(1).x() - 0.5) < 0.05); // 0.498, might depend on window frame size
+ QCOMPARE_LT(qAbs(leftWidget.lastNormalizedPositions.at(1).x() - 0.5), 0.05); // 0.498, might depend on window frame size
QCOMPARE(rightTouchPoint.position(), leftWidget.mapFromParent(centerPos.toPoint()));
QCOMPARE(rightTouchPoint.scenePosition(), centerScreenPos);
QCOMPARE(rightTouchPoint.globalPosition(), centerScreenPos);
@@ -1330,8 +1318,9 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
QVERIFY(!rightWidget.seenTouchBegin);
QVERIFY(!rightWidget.seenTouchUpdate);
QVERIFY(!rightWidget.seenTouchEnd);
- QCOMPARE(leftWidget.touchEndPoints.count(), 2);
- QCOMPARE(rightWidget.touchEndPoints.count(), 0);
+ QCOMPARE(leftWidget.touchEndPoints.size(), 2);
+ QCOMPARE(rightWidget.touchEndPoints.size(), 0);
+ QCOMPARE(leftWidget.lastNormalizedPositions.size(), 2);
{
QEventPoint leftTouchPoint = leftWidget.touchEndPoints.at(0);
qCDebug(lcTests) << "lastNormalizedPositions after release" << leftWidget.lastNormalizedPositions;
@@ -1348,7 +1337,7 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
QCOMPARE(leftTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(leftTouchPoint.globalPressPosition(), leftScreenPos);
QCOMPARE(leftTouchPoint.globalLastPosition(), leftScreenPos);
- QVERIFY(qAbs(leftWidget.lastNormalizedPositions.at(0).x() - 0.5) < 0.05); // 0.498, might depend on window frame size
+ QCOMPARE_LT(qAbs(leftWidget.lastNormalizedPositions.at(0).x() - 0.5), 0.05); // 0.498, might depend on window frame size
QCOMPARE(leftTouchPoint.position(), leftWidget.mapFromParent(centerPos.toPoint()));
QCOMPARE(leftTouchPoint.scenePosition(), centerScreenPos);
QCOMPARE(leftTouchPoint.globalPosition(), centerScreenPos);
@@ -1368,7 +1357,7 @@ void tst_QTouchEvent::multiPointRawEventTranslationOnTouchPad()
QCOMPARE(rightTouchPoint.globalPosition(), centerScreenPos);
QCOMPARE(rightTouchPoint.globalPressPosition(), rightScreenPos);
QCOMPARE(rightTouchPoint.globalLastPosition(), rightScreenPos);
- QVERIFY(qAbs(leftWidget.lastNormalizedPositions.at(1).x() - 0.5) < 0.05); // 0.498, might depend on window frame size
+ QCOMPARE_LT(qAbs(leftWidget.lastNormalizedPositions.at(1).x() - 0.5), 0.05); // 0.498, might depend on window frame size
QCOMPARE(rightTouchPoint.position(), leftWidget.mapFromParent(centerPos.toPoint()));
QCOMPARE(rightTouchPoint.scenePosition(), centerScreenPos);
QCOMPARE(rightTouchPoint.globalPosition(), centerScreenPos);
@@ -1414,16 +1403,16 @@ void tst_QTouchEvent::basicRawEventTranslationOfIds()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(!touchWidget.seenTouchUpdate);
QVERIFY(!touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchBeginPoints.count(), 2);
+ QCOMPARE(touchWidget.touchBeginPoints.size(), 2);
- for (int i = 0; i < touchWidget.touchBeginPoints.count(); ++i) {
+ for (int i = 0; i < touchWidget.touchBeginPoints.size(); ++i) {
QEventPoint touchBeginPoint = touchWidget.touchBeginPoints.at(i);
QCOMPARE(touchBeginPoint.id(), i);
QCOMPARE(touchBeginPoint.state(), rawTouchPoints[i].state());
}
// moving the point should translate to TouchUpdate
- for (int i = 0; i < rawTouchPoints.count(); ++i) {
+ for (int i = 0; i < rawTouchPoints.size(); ++i) {
auto &p = rawTouchPoints[i];
QMutableEventPoint::setState(p, QEventPoint::State::Updated);
QMutableEventPoint::setGlobalPosition(p, p.globalPosition() + delta);
@@ -1435,7 +1424,7 @@ void tst_QTouchEvent::basicRawEventTranslationOfIds()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(touchWidget.seenTouchUpdate);
QVERIFY(!touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchUpdatePoints.count(), 2);
+ QCOMPARE(touchWidget.touchUpdatePoints.size(), 2);
QCOMPARE(touchWidget.touchUpdatePoints.at(0).id(), 0);
QCOMPARE(touchWidget.touchUpdatePoints.at(1).id(), 1);
@@ -1450,7 +1439,7 @@ void tst_QTouchEvent::basicRawEventTranslationOfIds()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(touchWidget.seenTouchUpdate);
QCOMPARE(touchWidget.seenTouchEnd, false);
- QCOMPARE(touchWidget.touchUpdatePoints.count(), 2);
+ QCOMPARE(touchWidget.touchUpdatePoints.size(), 2);
QCOMPARE(touchWidget.touchUpdatePoints[0].id(), 0);
QCOMPARE(touchWidget.touchUpdatePoints[1].id(), 1);
@@ -1464,7 +1453,7 @@ void tst_QTouchEvent::basicRawEventTranslationOfIds()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(touchWidget.seenTouchUpdate);
QVERIFY(!touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchUpdatePoints.count(), 2);
+ QCOMPARE(touchWidget.touchUpdatePoints.size(), 2);
QCOMPARE(touchWidget.touchUpdatePoints[0].id(), 0);
QCOMPARE(touchWidget.touchUpdatePoints[1].id(), 42);
@@ -1478,7 +1467,7 @@ void tst_QTouchEvent::basicRawEventTranslationOfIds()
QVERIFY(touchWidget.seenTouchBegin);
QVERIFY(touchWidget.seenTouchUpdate);
QVERIFY(touchWidget.seenTouchEnd);
- QCOMPARE(touchWidget.touchUpdatePoints.count(), 2);
+ QCOMPARE(touchWidget.touchUpdatePoints.size(), 2);
QCOMPARE(touchWidget.touchUpdatePoints[0].id(), 0);
QCOMPARE(touchWidget.touchUpdatePoints[1].id(), 42);
}
@@ -1842,25 +1831,25 @@ void tst_QTouchEvent::testQGuiAppDelivery()
// Now the real thing.
QWindowSystemInterface::handleTouchEvent(&w, touchScreenDevice, points); // TouchBegin
QCoreApplication::processEvents();
- QCOMPARE(filter.d.count(), 1);
+ QCOMPARE(filter.d.size(), 1);
QCOMPARE(filter.d.contains(touchScreenDevice), true);
- QCOMPARE(filter.d.value(touchScreenDevice).points.count(), 1);
+ QCOMPARE(filter.d.value(touchScreenDevice).points.size(), 1);
QCOMPARE(filter.d.value(touchScreenDevice).lastSeenType, QEvent::TouchBegin);
points[0].state = QEventPoint::State::Updated;
QWindowSystemInterface::handleTouchEvent(&w, touchScreenDevice, points); // TouchUpdate
QCoreApplication::processEvents();
- QCOMPARE(filter.d.count(), 1);
+ QCOMPARE(filter.d.size(), 1);
QCOMPARE(filter.d.contains(touchScreenDevice), true);
- QCOMPARE(filter.d.value(touchScreenDevice).points.count(), 2);
+ QCOMPARE(filter.d.value(touchScreenDevice).points.size(), 2);
QCOMPARE(filter.d.value(touchScreenDevice).lastSeenType, QEvent::TouchUpdate);
points[0].state = QEventPoint::State::Released;
QWindowSystemInterface::handleTouchEvent(&w, touchScreenDevice, points); // TouchEnd
QCoreApplication::processEvents();
- QCOMPARE(filter.d.count(), 1);
+ QCOMPARE(filter.d.size(), 1);
QCOMPARE(filter.d.contains(touchScreenDevice), true);
- QCOMPARE(filter.d.value(touchScreenDevice).points.count(), 3);
+ QCOMPARE(filter.d.value(touchScreenDevice).points.size(), 3);
QCOMPARE(filter.d.value(touchScreenDevice).lastSeenType, QEvent::TouchEnd);
}
@@ -1903,8 +1892,8 @@ void tst_QTouchEvent::testMultiDevice()
QCOMPARE(filter.d.value(touchScreenDevice).lastSeenType, QEvent::TouchBegin);
QCOMPARE(filter.d.value(deviceTwo).lastSeenType, QEvent::TouchBegin);
- QCOMPARE(filter.d.value(touchScreenDevice).points.count(), 1);
- QCOMPARE(filter.d.value(deviceTwo).points.count(), 2);
+ QCOMPARE(filter.d.value(touchScreenDevice).points.size(), 1);
+ QCOMPARE(filter.d.value(deviceTwo).points.size(), 2);
QCOMPARE(filter.d.value(touchScreenDevice).points.at(0).globalPosition(), area0.center());
// This fails because QGuiApplicationPrivate::processTouchEvent() sends synth-mouse events
@@ -1959,7 +1948,7 @@ void tst_QTouchEvent::grabbers()
// Ensure that grabbers are persistent between events, within the stored touchpoints
QCOMPARE(devPriv->pointById(0)->exclusiveGrabber, grabExclusive ? &w : nullptr);
- QCOMPARE(devPriv->pointById(0)->passiveGrabbers.count(), grabPassive ? 1 : 0);
+ QCOMPARE(devPriv->pointById(0)->passiveGrabbers.size(), grabPassive ? 1 : 0);
if (grabPassive)
QCOMPARE(devPriv->pointById(0)->passiveGrabbers.first(), &w);
diff --git a/tests/auto/gui/kernel/qwindow/BLACKLIST b/tests/auto/gui/kernel/qwindow/BLACKLIST
index ee1d6563cb..69df8883c8 100644
--- a/tests/auto/gui/kernel/qwindow/BLACKLIST
+++ b/tests/auto/gui/kernel/qwindow/BLACKLIST
@@ -1,9 +1,4 @@
[positioning]
-opensuse-leap
-[positioning:default]
-linux
-macos ci
-[positioning:fake]
macos ci
[modalWithChildWindow]
# QTBUG-69160
@@ -11,13 +6,11 @@ android
[modalWindowEnterEventOnHide_QTBUG35109]
osx
android
-windows-10
+windows
[spuriousMouseMove]
# QTBUG-69162
windows-10
android
-[testInputEvents]
-rhel-7.4
[modalWindowPosition]
# QTBUG-69161
android
@@ -28,3 +21,8 @@ android
android
[modalWindowModallity]
android
+[enterLeaveOnWindowShowHide]
+windows-10
+windows-11
+android
+rhel
diff --git a/tests/auto/gui/kernel/qwindow/CMakeLists.txt b/tests/auto/gui/kernel/qwindow/CMakeLists.txt
index 23671cc385..5824989ac3 100644
--- a/tests/auto/gui/kernel/qwindow/CMakeLists.txt
+++ b/tests/auto/gui/kernel/qwindow/CMakeLists.txt
@@ -1,22 +1,51 @@
-# Generated from qwindow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qwindow Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwindow LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qwindow
SOURCES
tst_qwindow.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
)
+if(APPLE OR WIN32 OR QT_FEATURE_xcb)
+ qt_internal_add_test(tst_foreignwindow
+ LOWDPI
+ SOURCES
+ tst_foreignwindow.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ )
+
+ if(APPLE)
+ enable_language(OBJCXX)
+ set_source_files_properties(tst_foreignwindow.cpp PROPERTIES LANGUAGE OBJCXX)
+ set_property(TARGET tst_foreignwindow PROPERTY PROPERTY MACOSX_BUNDLE TRUE)
+ endif()
+
+ if(QT_FEATURE_xcb)
+ target_link_libraries(tst_foreignwindow PRIVATE XCB::XCB)
+ endif()
+endif()
+
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qwindow CONDITION QT_FEATURE_dynamicgl AND WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
diff --git a/tests/auto/gui/kernel/qwindow/tst_foreignwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_foreignwindow.cpp
new file mode 100644
index 0000000000..526abd6ea3
--- /dev/null
+++ b/tests/auto/gui/kernel/qwindow/tst_foreignwindow.cpp
@@ -0,0 +1,190 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+
+#include <QtCore/qloggingcategory.h>
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformintegration.h>
+
+#include "../../../../shared/nativewindow.h"
+
+class tst_ForeignWindow: public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase()
+ {
+ auto *platformIntegration = QGuiApplicationPrivate::platformIntegration();
+ if (!platformIntegration->hasCapability(QPlatformIntegration::ForeignWindows))
+ QSKIP("This platform does not support foreign windows");
+ }
+
+ void fromWinId();
+ void initialState();
+
+ void embedForeignWindow();
+ void embedInForeignWindow();
+
+ void destroyExplicitly();
+ void destroyWhenParentIsDestroyed();
+};
+
+void tst_ForeignWindow::fromWinId()
+{
+ NativeWindow nativeWindow;
+ QVERIFY(nativeWindow);
+
+ std::unique_ptr<QWindow> foreignWindow(QWindow::fromWinId(nativeWindow));
+ QVERIFY(foreignWindow);
+ QVERIFY(foreignWindow->flags().testFlag(Qt::ForeignWindow));
+ QVERIFY(foreignWindow->handle());
+
+ // fromWinId does not take (exclusive) ownership of the native window,
+ // so deleting the foreign window should not be a problem/cause crashes.
+ foreignWindow.reset();
+}
+
+void tst_ForeignWindow::initialState()
+{
+ NativeWindow nativeWindow;
+ QVERIFY(nativeWindow);
+
+ // A foreign window can be used to embed a Qt UI in a foreign window hierarchy,
+ // in which case the foreign window merely acts as a parent and should not be
+ // modified, or to embed a foreign window in a Qt UI, in which case the foreign
+ // window must to be able to re-parent, move, resize, show, etc, so that the
+ // containing Qt UI can treat it as any other window.
+
+ // At the point of creation though, we don't know what the foreign window
+ // will be used for, so the platform should not assume it can modify the
+ // window. Any properties set on the native window should persist past
+ // creation of the foreign window.
+
+ const QRect initialGeometry(123, 456, 321, 654);
+ nativeWindow.setGeometry(initialGeometry);
+ QTRY_COMPARE(nativeWindow.geometry(), initialGeometry);
+
+ std::unique_ptr<QWindow> foreignWindow(QWindow::fromWinId(nativeWindow));
+ QCOMPARE(nativeWindow.geometry(), initialGeometry);
+
+ // For extra bonus points, the foreign window should actually
+ // reflect the state of the native window.
+ QCOMPARE(foreignWindow->geometry(), initialGeometry);
+}
+
+void tst_ForeignWindow::embedForeignWindow()
+{
+ // A foreign window embedded into a Qt UI requires that the rest of Qt
+ // is to be able to treat the foreign child window as any other window
+ // that it can show, hide, stack, and move around.
+
+ QWindow parentWindow;
+
+ NativeWindow nativeWindow;
+ QVERIFY(nativeWindow);
+
+ // As a prerequisite to that, we must be able to reparent the foreign window
+ std::unique_ptr<QWindow> foreignWindow(QWindow::fromWinId(nativeWindow));
+ foreignWindow->setParent(&parentWindow);
+ QTRY_COMPARE(nativeWindow.parentWinId(), parentWindow.winId());
+
+ // FIXME: This test is flakey on Linux. Figure out why
+#if !defined(Q_OS_LINUX)
+ foreignWindow->setParent(nullptr);
+ QTRY_VERIFY(nativeWindow.parentWinId() != parentWindow.winId());
+#endif
+}
+
+void tst_ForeignWindow::embedInForeignWindow()
+{
+ // When a foreign window is used as a container to embed a Qt UI
+ // in a foreign window hierarchy, the foreign window merely acts
+ // as a parent, and should not be modified.
+
+ {
+ // At a minimum, we must be able to reparent into the window
+ NativeWindow nativeWindow;
+ QVERIFY(nativeWindow);
+
+ std::unique_ptr<QWindow> foreignWindow(QWindow::fromWinId(nativeWindow));
+
+ QWindow embeddedWindow;
+ embeddedWindow.setParent(foreignWindow.get());
+ QTRY_VERIFY(nativeWindow.isParentOf(embeddedWindow.winId()));
+ }
+
+ {
+ // The foreign window's native window should not be reparent as a
+ // result of creating the foreign window, adding and removing children,
+ // or destroying the foreign window.
+
+ NativeWindow topLevelNativeWindow;
+ NativeWindow childNativeWindow;
+ childNativeWindow.setParent(topLevelNativeWindow);
+ QVERIFY(topLevelNativeWindow.isParentOf(childNativeWindow));
+
+ std::unique_ptr<QWindow> foreignWindow(QWindow::fromWinId(childNativeWindow));
+ QVERIFY(topLevelNativeWindow.isParentOf(childNativeWindow));
+
+ QWindow embeddedWindow;
+ embeddedWindow.setParent(foreignWindow.get());
+ QTRY_VERIFY(childNativeWindow.isParentOf(embeddedWindow.winId()));
+ QVERIFY(topLevelNativeWindow.isParentOf(childNativeWindow));
+
+ embeddedWindow.setParent(nullptr);
+ QVERIFY(topLevelNativeWindow.isParentOf(childNativeWindow));
+
+ foreignWindow.reset();
+ QVERIFY(topLevelNativeWindow.isParentOf(childNativeWindow));
+ }
+}
+
+void tst_ForeignWindow::destroyExplicitly()
+{
+ NativeWindow nativeWindow;
+ QVERIFY(nativeWindow);
+
+ std::unique_ptr<QWindow> foreignWindow(QWindow::fromWinId(nativeWindow));
+ QVERIFY(foreignWindow->handle());
+
+ // Explicitly destroying a foreign window is a no-op, as
+ // the documentation claims that it "releases the native
+ // platform resources associated with this window.", which
+ // is not technically true for foreign windows.
+ auto *windowHandleBeforeDestroy = foreignWindow->handle();
+ foreignWindow->destroy();
+ QCOMPARE(foreignWindow->handle(), windowHandleBeforeDestroy);
+}
+
+void tst_ForeignWindow::destroyWhenParentIsDestroyed()
+{
+ QWindow parentWindow;
+
+ NativeWindow nativeWindow;
+ QVERIFY(nativeWindow);
+
+ std::unique_ptr<QWindow> foreignWindow(QWindow::fromWinId(nativeWindow));
+ foreignWindow->setParent(&parentWindow);
+ QTRY_COMPARE(nativeWindow.parentWinId(), parentWindow.winId());
+
+ // Reparenting into a window will result in creating it
+ QVERIFY(parentWindow.handle());
+
+ // Destroying the parent window of the foreign window results
+ // in destroying the foreign window as well, as the foreign
+ // window no longer has a parent it can be embedded in.
+ QVERIFY(foreignWindow->handle());
+ parentWindow.destroy();
+ QVERIFY(!foreignWindow->handle());
+
+ // But the foreign window can be recreated again, and will
+ // continue to be a native child of the parent window.
+ foreignWindow->create();
+ QVERIFY(foreignWindow->handle());
+ QTRY_COMPARE(nativeWindow.parentWinId(), parentWindow.winId());
+}
+
+#include <tst_foreignwindow.moc>
+QTEST_MAIN(tst_ForeignWindow)
diff --git a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp b/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
index 46d6f5bf44..a9e2c5f882 100644
--- a/tests/auto/gui/kernel/qwindow/tst_qwindow.cpp
+++ b/tests/auto/gui/kernel/qwindow/tst_qwindow.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 <qrasterwindow.h>
#include <qpa/qwindowsysteminterface.h>
@@ -32,6 +7,7 @@
#include <qpa/qplatformwindow.h>
#include <private/qguiapplication_p.h>
#include <private/qhighdpiscaling_p.h>
+#include <private/qwindow_p.h>
#include <QtGui/QPainter>
#include <QTest>
@@ -47,6 +23,12 @@
Q_LOGGING_CATEGORY(lcTests, "qt.gui.tests")
+static bool isPlatformEglFS()
+{
+ static const bool isEglFS = !QGuiApplication::platformName().compare(QLatin1String("eglfs"), Qt::CaseInsensitive);
+ return isEglFS;
+}
+
class tst_QWindow: public QObject
{
Q_OBJECT
@@ -55,6 +37,7 @@ private slots:
void create();
void setParent();
void setVisible();
+ void setVisibleThenCreate();
void setVisibleFalseDoesNotCreateWindow();
void eventOrderOnShow();
void paintEvent();
@@ -95,6 +78,7 @@ private slots:
void modalWithChildWindow();
void modalWindowModallity();
void modalWindowPosition();
+ void modalCloseWhileBlocked();
#ifndef QT_NO_CURSOR
void modalWindowEnterEventOnHide_QTBUG35109();
void spuriousMouseMove();
@@ -111,6 +95,15 @@ private slots:
void keepPendingUpdateRequests();
void activateDeactivateEvent();
void qobject_castOnDestruction();
+ void touchToMouseTranslationByPopup();
+ void stateChangeSignal();
+#ifndef QT_NO_CURSOR
+ void enterLeaveOnWindowShowHide_data();
+ void enterLeaveOnWindowShowHide();
+#endif
+ void windowExposedAfterReparent();
+ void childEvents();
+ void parentEvents();
private:
QPoint m_availableTopLeft;
@@ -121,8 +114,17 @@ private:
QInputDevice::Capability::Position | QInputDevice::Capability::MouseEmulation);
};
+static bool isPlatformWayland()
+{
+ return QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive);
+}
+
void tst_QWindow::initTestCase()
{
+#ifdef Q_OS_ANDROID
+ if (QNativeInterface::QAndroidApplication::sdkVersion() == 33)
+ QSKIP("Is flaky on Android 13 / RHEL 8.6 and 8.8 (QTQAINFRA-5606)");
+#endif
// Size of reference window, 200 for < 2000, scale up for larger screens
// to avoid Windows warnings about minimum size for decorated windows.
int width = 200;
@@ -132,6 +134,10 @@ void tst_QWindow::initTestCase()
if (screenWidth > 2000)
width = 100 * ((screenWidth + 500) / 1000);
m_testWindowSize = QSize(width, width);
+
+ // Make sure test runs consistently on all compositors by force-disabling window decorations
+ if (isPlatformWayland())
+ qputenv("QT_WAYLAND_DISABLE_WINDOWDECORATION", "1");
}
void tst_QWindow::cleanup()
@@ -244,6 +250,40 @@ void tst_QWindow::setVisible()
QVERIFY(QTest::qWaitForWindowExposed(&i));
}
+class SurfaceCreatedWindow : public QWindow
+{
+ Q_OBJECT
+public:
+ using QWindow::QWindow;
+
+ bool eventFilter(QObject *o, QEvent *e) override
+ {
+ if (e->type() == QEvent::PlatformSurface) {
+ auto type = static_cast<QPlatformSurfaceEvent*>(e)->surfaceEventType();
+ if (type == QPlatformSurfaceEvent::SurfaceCreated)
+ ++surfaceCreatedEvents;
+ }
+ return QWindow::eventFilter(o, e);
+ }
+
+ int surfaceCreatedEvents = 0;
+};
+
+void tst_QWindow::setVisibleThenCreate()
+{
+ QWindow parent;
+ parent.setObjectName("Parent");
+ SurfaceCreatedWindow child(&parent);
+ child.installEventFilter(&child);
+ child.setObjectName("Child");
+ child.setVisible(true);
+ child.create();
+ QCOMPARE(child.surfaceCreatedEvents, 1);
+ parent.setVisible(true);
+ QCOMPARE(child.surfaceCreatedEvents, 1);
+ QVERIFY(QTest::qWaitForWindowExposed(&child));
+}
+
void tst_QWindow::setVisibleFalseDoesNotCreateWindow()
{
QWindow w;
@@ -311,13 +351,6 @@ public:
m_received[event->type()]++;
m_order << event->type();
switch (event->type()) {
- case QEvent::Expose:
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- m_exposeRegion = static_cast<QExposeEvent *>(event)->region();
-QT_WARNING_POP
- break;
-
case QEvent::PlatformSurface:
m_surfaceventType = static_cast<QPlatformSurfaceEvent *>(event)->surfaceEventType();
break;
@@ -347,11 +380,6 @@ QT_WARNING_POP
return m_order.indexOf(type);
}
- QRegion exposeRegion() const
- {
- return m_exposeRegion;
- }
-
QPlatformSurfaceEvent::SurfaceEventType surfaceEventType() const
{
return m_surfaceventType;
@@ -363,7 +391,6 @@ QT_WARNING_POP
private:
QHash<QEvent::Type, int> m_received;
QList<QEvent::Type> m_order;
- QRegion m_exposeRegion;
QPlatformSurfaceEvent::SurfaceEventType m_surfaceventType;
};
@@ -455,11 +482,16 @@ void tst_QWindow::resizeEventAfterResize()
// Make sure we get a resizeEvent after calling resize
window.resize(m_testWindowSize);
+ if (isPlatformEglFS())
+ QEXPECT_FAIL("", "eglfs windows are fullscreen by default.", Continue);
+
QTRY_COMPARE(window.received(QEvent::Resize), 2);
}
void tst_QWindow::exposeEventOnShrink_QTBUG54040()
{
+ if (isPlatformEglFS())
+ QSKIP("", "eglfs windows are fullscreen by default.", Continue);
Window window;
window.setGeometry(QRect(m_availableTopLeft + QPoint(80, 80), m_testWindowSize));
window.setTitle(QTest::currentTestFunction());
@@ -523,13 +555,11 @@ static QString msgRectMismatch(const QRect &r1, const QRect &r2)
return result;
}
-static bool isPlatformWayland()
-{
- return !QGuiApplication::platformName().compare(QLatin1String("wayland"), Qt::CaseInsensitive);
-}
-
void tst_QWindow::positioning()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Fails on Android. QTBUG-105201");
+#endif
if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(
QPlatformIntegration::NonFullScreenWindows)) {
QSKIP("This platform does not support non-fullscreen windows");
@@ -551,9 +581,8 @@ void tst_QWindow::positioning()
QCOMPARE(window.geometry(), geometry);
// explicitly use non-fullscreen show. show() can be fullscreen on some platforms
window.showNormal();
- QCoreApplication::processEvents();
- QVERIFY(QTest::qWaitForWindowExposed(&window));
+ QVERIFY(QTest::qWaitForWindowActive(&window));
QMargins originalMargins = window.frameMargins();
@@ -645,9 +674,8 @@ void tst_QWindow::childWindowPositioning_data()
void tst_QWindow::childWindowPositioning()
{
- if (isPlatformWayland())
- QSKIP("Wayland: This is flaky (protocol errors for xdg-shell v6). See QTBUG-67648.");
-
+ if (isPlatformEglFS())
+ QSKIP("eglfs does not support child windows.");
const QPoint topLeftOrigin(0, 0);
ColoredWindow topLevelWindowFirst(Qt::green);
@@ -750,7 +778,7 @@ void tst_QWindow::stateChange()
// explicitly use non-fullscreen show. show() can be fullscreen on some platforms
window.showNormal();
QVERIFY(QTest::qWaitForWindowExposed(&window));
- for (Qt::WindowState state : qAsConst(stateSequence)) {
+ for (Qt::WindowState state : std::as_const(stateSequence)) {
window.setWindowState(state);
QCoreApplication::processEvents();
}
@@ -824,16 +852,6 @@ void tst_QWindow::isExposed()
QTRY_VERIFY(window.received(QEvent::Expose) > 0);
QTRY_VERIFY(window.isExposed());
-#ifndef Q_OS_WIN
- // This is a top-level window so assuming it is completely exposed, the
- // expose region must be (0, 0), (width, height). If this is not the case,
- // the platform plugin is sending expose events with a region in an
- // incorrect coordinate system.
- QRect r = window.exposeRegion().boundingRect();
- r = QRect(window.mapToGlobal(r.topLeft()), r.size());
- QCOMPARE(r, window.geometry());
-#endif
-
window.hide();
QCoreApplication::processEvents();
@@ -978,6 +996,9 @@ public:
if (spinLoopWhenPressed)
QCoreApplication::processEvents();
}
+ if (closeOnTap)
+ this->close();
+
}
void mouseReleaseEvent(QMouseEvent *event) override
{
@@ -1034,7 +1055,7 @@ public:
}
touchEventType = event->type();
QList<QTouchEvent::TouchPoint> points = event->points();
- for (int i = 0; i < points.count(); ++i) {
+ for (int i = 0; i < points.size(); ++i) {
const auto &point = points.at(i);
switch (point.state()) {
case QEventPoint::State::Pressed:
@@ -1045,6 +1066,8 @@ public:
touchPressLocalPos = point.position();
touchPressGlobalPos = point.globalPosition();
}
+ if (closeOnTap)
+ this->close();
break;
case QEventPoint::State::Released:
++touchReleasedCount;
@@ -1101,6 +1124,8 @@ public:
const QPointingDevice *mouseDevice = nullptr;
const QPointingDevice *touchDevice = nullptr;
+
+ bool closeOnTap = false;
};
static void simulateMouseClick(QWindow *target, const QPointF &local, const QPointF &global)
@@ -1324,6 +1349,8 @@ void tst_QWindow::mouseToTouchTranslation()
QTRY_COMPARE(window.touchPressedCount, 1);
QTRY_COMPARE(window.touchReleasedCount, 1);
QCOMPARE(window.mouseDevice, window.touchDevice);
+ if (isPlatformWayland())
+ QEXPECT_FAIL("", "Wayland: This fails. See QTBUG-100887.", Abort);
QCOMPARE(window.touchDevice->type(), QInputDevice::DeviceType::Mouse);
QCOMPARE(window.touchPressLocalPos.toPoint(), localPos);
QCOMPARE(window.touchPressGlobalPos.toPoint(), window.mapToGlobal(localPos));
@@ -1481,9 +1508,6 @@ void tst_QWindow::touchCancelWithTouchToMouse()
void tst_QWindow::touchInterruptedByPopup()
{
- if (isPlatformWayland())
- QSKIP("Wayland: This test crashes with xdg-shell unstable v6");
-
InputTestWindow window;
window.setTitle(QLatin1String(QTest::currentTestFunction()));
window.setGeometry(QRect(m_availableTopLeft + QPoint(80, 80), m_testWindowSize));
@@ -1548,7 +1572,7 @@ void tst_QWindow::orientation()
QSignalSpy spy(&window, SIGNAL(contentOrientationChanged(Qt::ScreenOrientation)));
window.reportContentOrientationChange(Qt::LandscapeOrientation);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QWindow::sizes()
@@ -1567,40 +1591,58 @@ void tst_QWindow::sizes()
QCOMPARE(window.minimumHeight(), 0);
QCOMPARE(window.minimumSize(), QSize(10, 0));
QCOMPARE(window.maximumSize(), oldMaximum);
- QCOMPARE(minimumWidthSpy.count(), 1);
- QCOMPARE(minimumHeightSpy.count(), 0);
- QCOMPARE(maximumWidthSpy.count(), 0);
- QCOMPARE(maximumHeightSpy.count(), 0);
+ QCOMPARE(minimumWidthSpy.size(), 1);
+ QCOMPARE(minimumHeightSpy.size(), 0);
+ QCOMPARE(maximumWidthSpy.size(), 0);
+ QCOMPARE(maximumHeightSpy.size(), 0);
window.setMinimumHeight(10);
QCOMPARE(window.minimumWidth(), 10);
QCOMPARE(window.minimumHeight(), 10);
QCOMPARE(window.minimumSize(), QSize(10, 10));
QCOMPARE(window.maximumSize(), oldMaximum);
- QCOMPARE(minimumWidthSpy.count(), 1);
- QCOMPARE(minimumHeightSpy.count(), 1);
- QCOMPARE(maximumWidthSpy.count(), 0);
- QCOMPARE(maximumHeightSpy.count(), 0);
+ QCOMPARE(minimumWidthSpy.size(), 1);
+ QCOMPARE(minimumHeightSpy.size(), 1);
+ QCOMPARE(maximumWidthSpy.size(), 0);
+ QCOMPARE(maximumHeightSpy.size(), 0);
window.setMaximumWidth(100);
QCOMPARE(window.maximumWidth(), 100);
QCOMPARE(window.maximumHeight(), oldMaximum.height());
QCOMPARE(window.minimumSize(), QSize(10, 10));
QCOMPARE(window.maximumSize(), QSize(100, oldMaximum.height()));
- QCOMPARE(minimumWidthSpy.count(), 1);
- QCOMPARE(minimumHeightSpy.count(), 1);
- QCOMPARE(maximumWidthSpy.count(), 1);
- QCOMPARE(maximumHeightSpy.count(), 0);
+ QCOMPARE(minimumWidthSpy.size(), 1);
+ QCOMPARE(minimumHeightSpy.size(), 1);
+ QCOMPARE(maximumWidthSpy.size(), 1);
+ QCOMPARE(maximumHeightSpy.size(), 0);
window.setMaximumHeight(100);
QCOMPARE(window.maximumWidth(), 100);
QCOMPARE(window.maximumHeight(), 100);
QCOMPARE(window.minimumSize(), QSize(10, 10));
QCOMPARE(window.maximumSize(), QSize(100, 100));
- QCOMPARE(minimumWidthSpy.count(), 1);
- QCOMPARE(minimumHeightSpy.count(), 1);
- QCOMPARE(maximumWidthSpy.count(), 1);
- QCOMPARE(maximumHeightSpy.count(), 1);
+ QCOMPARE(minimumWidthSpy.size(), 1);
+ QCOMPARE(minimumHeightSpy.size(), 1);
+ QCOMPARE(maximumWidthSpy.size(), 1);
+ QCOMPARE(maximumHeightSpy.size(), 1);
+
+ // test if min and max limits will change the size
+ QVERIFY(window.minimumWidth() < 50 && window.maximumWidth() > 80);
+ QVERIFY(window.minimumHeight() < 50 && window.maximumHeight() > 80);
+ window.resize(50, 50);
+ QCOMPARE(window.size(), QSize(50, 50));
+ window.setMinimumSize(QSize(60, 60));
+ QCOMPARE(window.size(), QSize(60, 60));
+ window.resize(80, 80);
+ window.setMaximumSize(QSize(70, 70));
+ QCOMPARE(window.size(), QSize(70, 70));
+
+ // QTBUG-113233
+ // test for an invalid min/max pair
+ window.setMinimumSize(QSize(80, 80)); // current maximumSize = QSize(70, 70)
+ QCOMPARE(window.size(), QSize(70, 70));
+ window.setMaximumSize(QSize(90, 90));
+ QCOMPARE(window.size(), QSize(80, 80));
}
class CloseOnCloseEventWindow : public QWindow
@@ -1832,25 +1874,25 @@ void tst_QWindow::windowModality()
QCOMPARE(window.modality(), Qt::NonModal);
window.setModality(Qt::NonModal);
QCOMPARE(window.modality(), Qt::NonModal);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
window.setModality(Qt::WindowModal);
QCOMPARE(window.modality(), Qt::WindowModal);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
window.setModality(Qt::WindowModal);
QCOMPARE(window.modality(), Qt::WindowModal);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
window.setModality(Qt::ApplicationModal);
QCOMPARE(window.modality(), Qt::ApplicationModal);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
window.setModality(Qt::ApplicationModal);
QCOMPARE(window.modality(), Qt::ApplicationModal);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
window.setModality(Qt::NonModal);
QCOMPARE(window.modality(), Qt::NonModal);
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
}
void tst_QWindow::inputReentrancy()
@@ -2033,32 +2075,32 @@ void tst_QWindow::visibility()
QVERIFY(window.isVisible());
QVERIFY(window.visibility() != QWindow::Hidden);
QVERIFY(window.visibility() != QWindow::AutomaticVisibility);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
window.setVisibility(QWindow::Hidden);
QVERIFY(!window.isVisible());
QCOMPARE(window.visibility(), QWindow::Hidden);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
window.setVisibility(QWindow::FullScreen);
QVERIFY(window.isVisible());
QCOMPARE(window.windowState(), Qt::WindowFullScreen);
QCOMPARE(window.visibility(), QWindow::FullScreen);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QTRY_COMPARE(window.lastReceivedWindowState, Qt::WindowFullScreen);
spy.clear();
window.setWindowState(Qt::WindowNoState);
QCOMPARE(window.visibility(), QWindow::Windowed);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QTRY_COMPARE(window.lastReceivedWindowState, Qt::WindowNoState);
spy.clear();
window.setVisible(false);
QCOMPARE(window.visibility(), QWindow::Hidden);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
}
@@ -2091,9 +2133,6 @@ void tst_QWindow::mask()
void tst_QWindow::initialSize()
{
- if (isPlatformWayland())
- QSKIP("Wayland: This fails. See QTBUG-66818.");
-
QSize defaultSize(0,0);
{
Window w;
@@ -2108,6 +2147,10 @@ void tst_QWindow::initialSize()
w.setTitle(QLatin1String(QTest::currentTestFunction()));
w.setWidth(m_testWindowSize.width());
w.showNormal();
+
+ if (isPlatformEglFS())
+ QEXPECT_FAIL("", "eglfs windows are fullscreen by default.", Continue);
+
QTRY_COMPARE(w.width(), m_testWindowSize.width());
QTRY_VERIFY(w.height() > 0);
}
@@ -2119,6 +2162,8 @@ void tst_QWindow::initialSize()
w.showNormal();
const QSize expectedSize = testSize;
+ if (isPlatformEglFS())
+ QEXPECT_FAIL("", "eglfs windows are fullscreen by default.", Continue);
QTRY_COMPARE(w.size(), expectedSize);
}
}
@@ -2283,6 +2328,9 @@ void tst_QWindow::modalWindowModallity()
void tst_QWindow::modalWindowPosition()
{
+ if (isPlatformWayland())
+ QSKIP("Window position not queryable on Wayland");
+
QWindow window;
window.setTitle(QLatin1String(QTest::currentTestFunction()));
window.setGeometry(QRect(m_availableTopLeft + QPoint(100, 100), m_testWindowSize));
@@ -2291,9 +2339,29 @@ void tst_QWindow::modalWindowPosition()
window.setModality(Qt::WindowModal);
window.show();
QVERIFY(QTest::qWaitForWindowExposed(&window));
+
+ if (isPlatformEglFS())
+ QEXPECT_FAIL("", "eglfs windows are fullscreen by default.", Continue);
+
QCOMPARE(window.geometry(), origGeo);
}
+void tst_QWindow::modalCloseWhileBlocked()
+{
+ QWindow first;
+ first.setModality(Qt::ApplicationModal);
+ first.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&first));
+
+ QWindow second;
+ second.setModality(Qt::ApplicationModal);
+ second.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&first));
+
+ first.close();
+ QTRY_VERIFY(!first.isVisible());
+}
+
#ifndef QT_NO_CURSOR
void tst_QWindow::modalWindowEnterEventOnHide_QTBUG35109()
{
@@ -2303,6 +2371,9 @@ void tst_QWindow::modalWindowEnterEventOnHide_QTBUG35109()
if (isPlatformOffscreenOrMinimal())
QSKIP("Can't test window focusing on offscreen/minimal");
+ if (isPlatformEglFS())
+ QSKIP("QCursor::setPos() is not supported on this platform");
+
const QPoint center = QGuiApplication::primaryScreen()->availableGeometry().center();
const int childOffset = 16;
@@ -2483,6 +2554,8 @@ void tst_QWindow::spuriousMouseMove()
QSKIP("No enter events sent");
if (platformName == QLatin1String("wayland"))
QSKIP("Setting mouse cursor position is not possible on Wayland");
+ if (isPlatformEglFS())
+ QSKIP("QCursor::setPos() is not supported on this platform");
const QRect screenGeometry = QGuiApplication::primaryScreen()->geometry();
const QPoint center = screenGeometry.center();
QCursor::setPos(center);
@@ -2758,6 +2831,395 @@ void tst_QWindow::qobject_castOnDestruction()
});
}
+void tst_QWindow::touchToMouseTranslationByPopup()
+{
+ InputTestWindow window;
+ window.setTitle(QLatin1String(QTest::currentTestFunction()));
+ window.ignoreTouch = true;
+ window.setGeometry(QRect(m_availableTopLeft, m_testWindowSize));
+ window.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&window));
+
+ InputTestWindow popupWindow;
+ popupWindow.setGeometry(QRect(m_availableTopLeft + QPoint(20, 20),
+ QSize(m_testWindowSize.width(), m_testWindowSize.height() / 2)));
+ popupWindow.setFlag(Qt::Popup);
+ popupWindow.setTransientParent(&window);
+ popupWindow.ignoreTouch = true;
+ popupWindow.closeOnTap = true;
+ popupWindow.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&popupWindow));
+
+ QTest::touchEvent(&popupWindow, touchDevice).press(0, {1, 1}, &window);
+ QVERIFY(!popupWindow.isVisible());
+
+ // Omit touchpoint 0: because the popup was closed, touchpoint0.release is not sent.
+ const QPoint tp1(50, 1);
+ QTest::touchEvent(&window, touchDevice).press(1, tp1, &window);
+ QTRY_COMPARE(window.mousePressButton, int(Qt::LeftButton));
+ QTest::touchEvent(&window, touchDevice).release(1, tp1, &window);
+ QTRY_COMPARE(window.mouseReleaseButton, int(Qt::LeftButton));
+}
+
+// Test that windowStateChanged is not emitted on noop change (QTBUG-102478)
+void tst_QWindow::stateChangeSignal()
+{
+ // Test only for Windows, Linux and macOS
+#if !defined(Q_OS_LINUX) && !defined(Q_OS_WINDOWS) && !defined(Q_OS_DARWIN)
+ QSKIP("Singular windowStateChanged signal emission is guaranteed for Linux, Windows and macOS only.\n"
+ "On other operating systems, the signal may be emitted twice.");
+#endif
+ QWindow w;
+ Q_ASSERT(connect (&w, &QWindow::windowStateChanged, [](Qt::WindowState s){qCDebug(lcTests) << "State change to" << s;}));
+ QSignalSpy spy(&w, SIGNAL(windowStateChanged(Qt::WindowState)));
+ unsigned short signalCount = 0;
+ QList<Qt::WindowState> effectiveStates;
+ Q_ASSERT(connect(&w, &QWindow::windowStateChanged, [&effectiveStates](Qt::WindowState state)
+ { effectiveStates.append(state); }));
+ // Part 1:
+ // => test signal emission on programmatic state changes
+ QCOMPARE(w.windowState(), Qt::WindowNoState);
+ // - wait for target state to be set
+ // - wait for signal spy to have reached target count
+ // - extract state from signal and compare to target
+#define CHECK_STATE(State)\
+ QTRY_VERIFY(QTest::qWaitFor([&w](){return (w.windowState() == State); }));\
+ CHECK_SIGNAL(State)
+#define CHECK_SIGNAL(State)\
+ QTRY_COMPARE(spy.count(), signalCount);\
+ if (signalCount > 0) {\
+ QVariantList list = spy.at(signalCount - 1).toList();\
+ QCOMPARE(list.count(), 1);\
+ bool ok;\
+ const int stateInt = list.at(0).toInt(&ok);\
+ QVERIFY(ok);\
+ const Qt::WindowState newState = static_cast<Qt::WindowState>(stateInt);\
+ QCOMPARE(newState, State);\
+ }
+ // Check initialization
+ CHECK_STATE(Qt::WindowNoState);
+ // showMaximized after init
+ // expected behavior: signal emitted once with state == WindowMaximized
+ ++signalCount;
+ w.showMaximized();
+ CHECK_STATE(Qt::WindowMaximized);
+ // setWindowState to normal
+ // expected behavior: signal emitted once with state == WindowNoState
+ ++signalCount;
+ w.setWindowState(Qt::WindowNoState);
+ CHECK_STATE(Qt::WindowNoState);
+ // redundant setWindowState to normal - except windows, where the no-op is counted
+ // expected behavior: No emits.
+ // On Windows, a no-op state change causes a no-op resize and repaint, leading to a
+ // no-op state change and singal emission.
+#ifdef Q_OS_WINDOWS
+ ++signalCount;
+ ++signalCount;
+#endif
+ w.setWindowState(Qt::WindowNoState);
+ CHECK_STATE(Qt::WindowNoState);
+ // setWindowState to minimized
+ // expected behavior: signal emitted once with state == WindowMinimized
+ ++signalCount;
+ w.showMinimized();
+ CHECK_STATE(Qt::WindowMinimized);
+ // setWindowState to Normal
+ // expected behavior: signal emitted once with state == WindowNoState
+ ++signalCount;
+ w.showNormal();
+ CHECK_STATE(Qt::WindowNoState);
+ /*
+ - Testcase showFullScreen is omitted: Depending on window manager,
+ WindowFullScreen can be mapped to WindowMaximized
+ - Transition from WindowMinimized to WindowMaximized is omitted:
+ WindowNoState to WindowMaximized
+ */
+ // Part 2:
+ // => test signal emission on simulated user interaction
+ // To test the code path, inject state change events into the QPA event queue.
+ // Test the signal emission only, not the window's actual visible state.
+
+ // Flush pending events and clear
+ QCoreApplication::processEvents();
+ spy.clear();
+ effectiveStates.clear();
+ signalCount = 0;
+ // Maximize window
+ QWindowSystemInterface::handleWindowStateChanged(&w, Qt::WindowMaximized, w.windowState());
+ ++signalCount;
+ CHECK_SIGNAL(Qt::WindowMaximized);
+ // Normalize window
+ QWindowSystemInterface::handleWindowStateChanged(&w, Qt::WindowNoState, w.windowState());
+ ++signalCount;
+ CHECK_SIGNAL(Qt::WindowNoState);
+ // Minimize window
+ QWindowSystemInterface::handleWindowStateChanged(&w, Qt::WindowMinimized, w.windowState());
+ ++signalCount;
+ CHECK_SIGNAL(Qt::WindowMinimized);
+}
+
+#ifndef QT_NO_CURSOR
+void tst_QWindow::enterLeaveOnWindowShowHide_data()
+{
+ QTest::addColumn<Qt::WindowType>("windowType");
+ QTest::addRow("dialog") << Qt::Dialog;
+ QTest::addRow("popup") << Qt::Popup;
+}
+
+/*!
+ Verify that we get enter and leave events if the window under the mouse
+ opens and closes a modal dialog or popup. QWindow might get multiple
+ events in a row, as the various QPA plugins need to use different techniques
+ to synthesize events if the native platform doesn't provide them for us.
+*/
+void tst_QWindow::enterLeaveOnWindowShowHide()
+{
+ if (isPlatformWayland())
+ QSKIP("Can't set cursor position and qWaitForWindowActive on Wayland");
+
+ if (isPlatformEglFS())
+ QSKIP("QCursor::setPos() is not supported on this platform");
+
+ QFETCH(Qt::WindowType, windowType);
+
+ class Window : public QWindow
+ {
+ public:
+ int numEnterEvents = 0;
+ int numLeaveEvents = 0;
+ QPoint enterPosition;
+ protected:
+ bool event(QEvent *e) override
+ {
+ switch (e->type()) {
+ case QEvent::Enter:
+ ++numEnterEvents;
+ enterPosition = static_cast<QEnterEvent*>(e)->position().toPoint();
+ break;
+ case QEvent::Leave:
+ ++numLeaveEvents;
+ break;
+ default:
+ break;
+ }
+ return QWindow::event(e);
+ }
+ };
+
+ int expectedEnter = 0;
+ int expectedLeave = 0;
+
+ Window window;
+ const QRect screenGeometry = window.screen()->availableGeometry();
+ const QPoint cursorPos = screenGeometry.topLeft() + QPoint(50, 50);
+ window.setGeometry(QRect(cursorPos - QPoint(50, 50), screenGeometry.size() / 4));
+ QCursor::setPos(cursorPos);
+
+ if (!QTest::qWaitFor([&]{ return window.geometry().contains(QCursor::pos()); }))
+ QSKIP("We can't move the cursor");
+
+ window.show();
+ window.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+
+ ++expectedEnter;
+ QTRY_COMPARE_WITH_TIMEOUT(window.numEnterEvents, expectedEnter, 250);
+ QCOMPARE(window.enterPosition, window.mapFromGlobal(QCursor::pos()));
+
+ QWindow secondary;
+ secondary.setFlag(windowType);
+ secondary.setModality(Qt::WindowModal);
+ secondary.setTransientParent(&window);
+ secondary.setPosition(cursorPos + QPoint(50, 50));
+ secondary.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&secondary));
+ ++expectedLeave;
+ QTRY_VERIFY(window.numLeaveEvents >= expectedLeave);
+ secondary.close();
+ ++expectedEnter;
+ QTRY_VERIFY(window.numEnterEvents >= expectedEnter);
+ QCOMPARE(window.enterPosition, window.mapFromGlobal(QCursor::pos()));
+}
+#endif
+
+void tst_QWindow::windowExposedAfterReparent()
+{
+ QWindow parent;
+ QWindow child(&parent);
+ child.show();
+ parent.show();
+
+ QVERIFY(QTest::qWaitForWindowExposed(&parent));
+ QVERIFY(QTest::qWaitForWindowExposed(&child));
+
+ child.setParent(nullptr);
+ QCoreApplication::processEvents();
+ QVERIFY(QTest::qWaitForWindowExposed(&child));
+
+ child.setParent(&parent);
+ QCoreApplication::processEvents();
+ QVERIFY(QTest::qWaitForWindowExposed(&child));
+}
+
+struct ParentWindow : public QWindow
+{
+ bool event(QEvent *event) override
+ {
+ [&]() -> void {
+ if (event->type() == QEvent::ChildWindowAdded
+ || event->type() == QEvent::ChildWindowRemoved) {
+ // We should not receive child events after the window has been destructed
+ QVERIFY(this->isWindowType());
+
+ auto *parentWindow = this;
+ auto *childEvent = static_cast<QChildWindowEvent*>(event);
+ auto *childWindow = childEvent->child();
+
+ if (event->type() == QEvent::ChildWindowAdded) {
+ QVERIFY(childWindow->parent());
+ QVERIFY(parentWindow->isAncestorOf(childWindow));
+ if (childWindow->handle())
+ QVERIFY(childWindow->handle()->parent() == parentWindow->handle());
+
+ } else {
+ QVERIFY(!childWindow->parent());
+ QVERIFY(!parentWindow->isAncestorOf(childWindow));
+ if (childWindow->handle())
+ QVERIFY(childWindow->handle()->parent() != parentWindow->handle());
+ }
+ }
+ }();
+
+ return QWindow::event(event);
+ }
+};
+
+void tst_QWindow::childEvents()
+{
+ ParentWindow parent;
+
+ {
+ // ChildAdded via constructor
+ QWindow constructorChild(&parent);
+ if (QTest::currentTestFailed()) return;
+ // ChildRemoved via destructor
+ }
+
+ if (QTest::currentTestFailed()) return;
+
+ // ChildAdded and ChildRemoved via setParent
+ QWindow child;
+ child.setParent(&parent);
+ if (QTest::currentTestFailed()) return;
+ child.setParent(nullptr);
+ if (QTest::currentTestFailed()) return;
+
+ parent.create();
+ child.create();
+
+ // ChildAdded and ChildRemoved after creation
+ child.setParent(&parent);
+ if (QTest::currentTestFailed()) return;
+ child.setParent(nullptr);
+ if (QTest::currentTestFailed()) return;
+}
+
+struct ChildWindowPrivate;
+struct ChildWindow : public QWindow
+{
+ ChildWindow(QWindow *parent = nullptr);
+};
+
+struct ChildWindowPrivate : public QWindowPrivate
+{
+ ChildWindowPrivate() : QWindowPrivate()
+ {
+ receiveParentEvents = true;
+ }
+};
+
+ChildWindow::ChildWindow(QWindow *parent)
+ : QWindow(*new ChildWindowPrivate, parent)
+{}
+
+struct ParentEventTester : public QObject
+{
+ bool eventFilter(QObject *object, QEvent *event) override
+ {
+ [&]() -> void {
+ if (event->type() == QEvent::ParentWindowAboutToChange
+ || event->type() == QEvent::ParentWindowChange) {
+ // We should not receive parent events after the window has been destructed
+ QVERIFY(object->isWindowType());
+ auto *window = static_cast<QWindow*>(object);
+
+ if (event->type() == QEvent::ParentWindowAboutToChange) {
+ QVERIFY(window->parent() != nextExpectedParent);
+ if (window->handle()) {
+ QVERIFY(window->handle()->parent() !=
+ (nextExpectedParent ? nextExpectedParent->handle() : nullptr));
+ }
+ } else {
+ QVERIFY(window->parent() == nextExpectedParent);
+ if (window->handle()) {
+ QVERIFY(window->handle()->parent() ==
+ (nextExpectedParent ? nextExpectedParent->handle() : nullptr));
+ }
+ }
+ }
+ }();
+
+ return QObject::eventFilter(object, event);
+ }
+
+ QWindow *nextExpectedParent = nullptr;
+};
+
+
+
+void tst_QWindow::parentEvents()
+{
+ QWindow parent;
+
+ {
+ ParentEventTester tester;
+
+ {
+ // We can't hook in early enough to get the parent change during
+ // QObject construction.
+ ChildWindow child(&parent);
+
+ // But we can observe the one during destruction
+ child.installEventFilter(&tester);
+ tester.nextExpectedParent = nullptr;
+ }
+ }
+ if (QTest::currentTestFailed()) return;
+
+ ParentEventTester tester;
+ ChildWindow child;
+ child.installEventFilter(&tester);
+
+ tester.nextExpectedParent = &parent;
+ child.setParent(&parent);
+ if (QTest::currentTestFailed()) return;
+
+ tester.nextExpectedParent = nullptr;
+ child.setParent(nullptr);
+ if (QTest::currentTestFailed()) return;
+
+ parent.create();
+ child.create();
+
+ tester.nextExpectedParent = &parent;
+ child.setParent(&parent);
+ if (QTest::currentTestFailed()) return;
+
+ tester.nextExpectedParent = nullptr;
+ child.setParent(nullptr);
+ if (QTest::currentTestFailed()) return;
+}
+
#include <tst_qwindow.moc>
QTEST_MAIN(tst_QWindow)
diff --git a/tests/auto/gui/math3d/CMakeLists.txt b/tests/auto/gui/math3d/CMakeLists.txt
index 11c50163ad..a7f2a55aa1 100644
--- a/tests/auto/gui/math3d/CMakeLists.txt
+++ b/tests/auto/gui/math3d/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from math3d.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qquaternion)
add_subdirectory(qvectornd)
diff --git a/tests/auto/gui/math3d/qmatrixnxn/CMakeLists.txt b/tests/auto/gui/math3d/qmatrixnxn/CMakeLists.txt
index 5c54bd6b95..22f581e9c8 100644
--- a/tests/auto/gui/math3d/qmatrixnxn/CMakeLists.txt
+++ b/tests/auto/gui/math3d/qmatrixnxn/CMakeLists.txt
@@ -1,14 +1,19 @@
-# Generated from qmatrixnxn.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmatrixnxn Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmatrixnxn LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmatrixnxn
SOURCES
tst_qmatrixnxn.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp b/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp
index 972bbe2f1c..38ecaa7e44 100644
--- a/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.cpp
+++ b/tests/auto/gui/math3d/qmatrixnxn/tst_qmatrixnxn.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 <QTest>
#include <QtCore/qmath.h>
@@ -125,6 +100,7 @@ private slots:
void rotate4x4_data();
void rotate4x4();
+ void projectedRotate();
void normalMatrix_data();
void normalMatrix();
@@ -157,6 +133,11 @@ private slots:
void properties();
void metaTypes();
+ // Tests for deprecated APIs
+#if QT_DEPRECATED_SINCE(6, 1)
+ void deprecatedMultiplications();
+#endif
+
private:
static void setMatrix(QMatrix2x2& m, const float *values);
static void setMatrixDirect(QMatrix2x2& m, const float *values);
@@ -1994,12 +1975,7 @@ void tst_QMatrixNxN::scale4x4()
}
QVector3D v1(2.0f, 3.0f, -4.0f);
- QVector3D v2 = m1 * v1;
- QCOMPARE(v2.x(), (float)(2.0f * x));
- QCOMPARE(v2.y(), (float)(3.0f * y));
- QCOMPARE(v2.z(), (float)(-4.0f * z));
-
- v2 = v1 * m1;
+ QVector3D v2 = m1.map(v1);
QCOMPARE(v2.x(), (float)(2.0f * x));
QCOMPARE(v2.y(), (float)(3.0f * y));
QCOMPARE(v2.z(), (float)(-4.0f * z));
@@ -2018,7 +1994,7 @@ void tst_QMatrixNxN::scale4x4()
QCOMPARE(v4.w(), (float)34.0f);
QPoint p1(2, 3);
- QPoint p2 = m1 * p1;
+ QPoint p2 = m1.map(p1);
QCOMPARE(p2.x(), (int)(2.0f * x));
QCOMPARE(p2.y(), (int)(3.0f * y));
@@ -2027,7 +2003,7 @@ void tst_QMatrixNxN::scale4x4()
QCOMPARE(p2.y(), (int)(3.0f * y));
QPointF p3(2.0f, 3.0f);
- QPointF p4 = m1 * p3;
+ QPointF p4 = m1.map(p3);
QCOMPARE(p4.x(), (float)(2.0f * x));
QCOMPARE(p4.y(), (float)(3.0f * y));
@@ -2140,7 +2116,7 @@ void tst_QMatrixNxN::translate4x4()
}
QVector3D v1(2.0f, 3.0f, -4.0f);
- QVector3D v2 = m1 * v1;
+ QVector3D v2 = m1.map(v1);
QCOMPARE(v2.x(), (float)(2.0f + x));
QCOMPARE(v2.y(), (float)(3.0f + y));
QCOMPARE(v2.z(), (float)(-4.0f + z));
@@ -2160,12 +2136,12 @@ void tst_QMatrixNxN::translate4x4()
QCOMPARE(v6.w(), (float)34.0f);
QPoint p1(2, 3);
- QPoint p2 = m1 * p1;
+ QPoint p2 = m1.map(p1);
QCOMPARE(p2.x(), (int)(2.0f + x));
QCOMPARE(p2.y(), (int)(3.0f + y));
QPointF p3(2.0f, 3.0f);
- QPointF p4 = m1 * p3;
+ QPointF p4 = m1.map(p3);
QCOMPARE(p4.x(), (float)(2.0f + x));
QCOMPARE(p4.y(), (float)(3.0f + y));
@@ -2370,7 +2346,7 @@ void tst_QMatrixNxN::rotate4x4()
p1z /= p1w;
QVector3D v1(2.0f, 3.0f, -4.0f);
- QVector3D v2 = m1 * v1;
+ QVector3D v2 = m1.map(v1);
QVERIFY(qFuzzyCompare(v2.x(), v1x));
QVERIFY(qFuzzyCompare(v2.y(), v1y));
QVERIFY(qFuzzyCompare(v2.z(), v1z));
@@ -2390,12 +2366,12 @@ void tst_QMatrixNxN::rotate4x4()
QVERIFY(qFuzzyCompare(v6.w(), v5w));
QPoint p1(2, 3);
- QPoint p2 = m1 * p1;
+ QPoint p2 = m1.map(p1);
QCOMPARE(p2.x(), qRound(p1x));
QCOMPARE(p2.y(), qRound(p1y));
QPointF p3(2.0f, 3.0f);
- QPointF p4 = m1 * p3;
+ QPointF p4 = m1.map(p3);
QVERIFY(qFuzzyCompare(float(p4.x()), p1x));
QVERIFY(qFuzzyCompare(float(p4.y()), p1y));
@@ -2408,6 +2384,22 @@ void tst_QMatrixNxN::rotate4x4()
}
}
+void tst_QMatrixNxN::projectedRotate()
+{
+ QMatrix4x4 m1, m2;
+ const QPointF origin(1000, 1000);
+
+ m1.translate(origin.x(), origin.y());
+ m1.projectedRotate(60, 0, 1, 0, 0);
+ m1.translate(-origin.x(), -origin.y());
+
+ m2.translate(origin.x(), origin.y());
+ m2.rotate(60, 0, 1, 0);
+ m2.translate(-origin.x(), -origin.y());
+
+ QCOMPARE(m1.toTransform(), m2.toTransform());
+}
+
static bool isSame(const QMatrix3x3& m1, const Matrix3& m2)
{
for (int row = 0; row < 3; ++row) {
@@ -2629,11 +2621,11 @@ void tst_QMatrixNxN::ortho()
{
QMatrix4x4 m1;
m1.ortho(QRect(0, 0, 300, 150));
- QPointF p1 = m1 * QPointF(0, 0);
- QPointF p2 = m1 * QPointF(300, 0);
- QPointF p3 = m1 * QPointF(0, 150);
- QPointF p4 = m1 * QPointF(300, 150);
- QVector3D p5 = m1 * QVector3D(300, 150, 1);
+ QPointF p1 = m1.map(QPointF(0, 0));
+ QPointF p2 = m1.map(QPointF(300, 0));
+ QPointF p3 = m1.map(QPointF(0, 150));
+ QPointF p4 = m1.map(QPointF(300, 150));
+ QVector3D p5 = m1.map(QVector3D(300, 150, 1));
QVERIFY(qFuzzyCompare(float(p1.x()), -1.0f));
QVERIFY(qFuzzyCompare(float(p1.y()), 1.0f));
QVERIFY(qFuzzyCompare(float(p2.x()), 1.0f));
@@ -2648,11 +2640,11 @@ void tst_QMatrixNxN::ortho()
QMatrix4x4 m2;
m2.ortho(QRectF(0, 0, 300, 150));
- p1 = m2 * QPointF(0, 0);
- p2 = m2 * QPointF(300, 0);
- p3 = m2 * QPointF(0, 150);
- p4 = m2 * QPointF(300, 150);
- p5 = m2 * QVector3D(300, 150, 1);
+ p1 = m2.map(QPointF(0, 0));
+ p2 = m2.map(QPointF(300, 0));
+ p3 = m2.map(QPointF(0, 150));
+ p4 = m2.map(QPointF(300, 150));
+ p5 = m2.map(QVector3D(300, 150, 1));
QVERIFY(qFuzzyCompare(float(p1.x()), -1.0f));
QVERIFY(qFuzzyCompare(float(p1.y()), 1.0f));
QVERIFY(qFuzzyCompare(float(p2.x()), 1.0f));
@@ -2667,11 +2659,11 @@ void tst_QMatrixNxN::ortho()
QMatrix4x4 m3;
m3.ortho(0, 300, 150, 0, -1, 1);
- p1 = m3 * QPointF(0, 0);
- p2 = m3 * QPointF(300, 0);
- p3 = m3 * QPointF(0, 150);
- p4 = m3 * QPointF(300, 150);
- p5 = m3 * QVector3D(300, 150, 1);
+ p1 = m3.map(QPointF(0, 0));
+ p2 = m3.map(QPointF(300, 0));
+ p3 = m3.map(QPointF(0, 150));
+ p4 = m3.map(QPointF(300, 150));
+ p5 = m3.map(QVector3D(300, 150, 1));
QVERIFY(qFuzzyCompare(float(p1.x()), -1.0f));
QVERIFY(qFuzzyCompare(float(p1.y()), 1.0f));
QVERIFY(qFuzzyCompare(float(p2.x()), 1.0f));
@@ -2686,11 +2678,11 @@ void tst_QMatrixNxN::ortho()
QMatrix4x4 m4;
m4.ortho(0, 300, 150, 0, -2, 3);
- p1 = m4 * QPointF(0, 0);
- p2 = m4 * QPointF(300, 0);
- p3 = m4 * QPointF(0, 150);
- p4 = m4 * QPointF(300, 150);
- p5 = m4 * QVector3D(300, 150, 1);
+ p1 = m4.map(QPointF(0, 0));
+ p2 = m4.map(QPointF(300, 0));
+ p3 = m4.map(QPointF(0, 150));
+ p4 = m4.map(QPointF(300, 150));
+ p5 = m4.map(QVector3D(300, 150, 1));
QVERIFY(qFuzzyCompare(float(p1.x()), -1.0f));
QVERIFY(qFuzzyCompare(float(p1.y()), 1.0f));
QVERIFY(qFuzzyCompare(float(p2.x()), 1.0f));
@@ -2718,11 +2710,11 @@ void tst_QMatrixNxN::frustum()
{
QMatrix4x4 m1;
m1.frustum(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f);
- QVector3D p1 = m1 * QVector3D(-1.0f, -1.0f, 1.0f);
- QVector3D p2 = m1 * QVector3D(1.0f, -1.0f, 1.0f);
- QVector3D p3 = m1 * QVector3D(-1.0f, 1.0f, 1.0f);
- QVector3D p4 = m1 * QVector3D(1.0f, 1.0f, 1.0f);
- QVector3D p5 = m1 * QVector3D(0.0f, 0.0f, 2.0f);
+ QVector3D p1 = m1.map(QVector3D(-1.0f, -1.0f, 1.0f));
+ QVector3D p2 = m1.map(QVector3D(1.0f, -1.0f, 1.0f));
+ QVector3D p3 = m1.map(QVector3D(-1.0f, 1.0f, 1.0f));
+ QVector3D p4 = m1.map(QVector3D(1.0f, 1.0f, 1.0f));
+ QVector3D p5 = m1.map(QVector3D(0.0f, 0.0f, 2.0f));
QVERIFY(qFuzzyCompare(p1.x(), -1.0f));
QVERIFY(qFuzzyCompare(p1.y(), -1.0f));
QVERIFY(qFuzzyCompare(p1.z(), -1.0f));
@@ -2754,11 +2746,11 @@ void tst_QMatrixNxN::perspective()
{
QMatrix4x4 m1;
m1.perspective(45.0f, 1.0f, -1.0f, 1.0f);
- QVector3D p1 = m1 * QVector3D(-1.0f, -1.0f, 1.0f);
- QVector3D p2 = m1 * QVector3D(1.0f, -1.0f, 1.0f);
- QVector3D p3 = m1 * QVector3D(-1.0f, 1.0f, 1.0f);
- QVector3D p4 = m1 * QVector3D(1.0f, 1.0f, 1.0f);
- QVector3D p5 = m1 * QVector3D(0.0f, 0.0f, 2.0f);
+ QVector3D p1 = m1.map(QVector3D(-1.0f, -1.0f, 1.0f));
+ QVector3D p2 = m1.map(QVector3D(1.0f, -1.0f, 1.0f));
+ QVector3D p3 = m1.map(QVector3D(-1.0f, 1.0f, 1.0f));
+ QVector3D p4 = m1.map(QVector3D(1.0f, 1.0f, 1.0f));
+ QVector3D p5 = m1.map(QVector3D(0.0f, 0.0f, 2.0f));
QVERIFY(qFuzzyCompare(p1.x(), 2.41421f));
QVERIFY(qFuzzyCompare(p1.y(), 2.41421f));
QVERIFY(qFuzzyCompare(p1.z(), -1.0f));
@@ -2824,25 +2816,25 @@ void tst_QMatrixNxN::flipCoordinates()
{
QMatrix4x4 m1;
m1.flipCoordinates();
- QVector3D p1 = m1 * QVector3D(2, 3, 4);
+ QVector3D p1 = m1.map(QVector3D(2, 3, 4));
QVERIFY(p1 == QVector3D(2, -3, -4));
QMatrix4x4 m2;
m2.scale(2.0f, 3.0f, 1.0f);
m2.flipCoordinates();
- QVector3D p2 = m2 * QVector3D(2, 3, 4);
+ QVector3D p2 = m2.map(QVector3D(2, 3, 4));
QVERIFY(p2 == QVector3D(4, -9, -4));
QMatrix4x4 m3;
m3.translate(2.0f, 3.0f, 1.0f);
m3.flipCoordinates();
- QVector3D p3 = m3 * QVector3D(2, 3, 4);
+ QVector3D p3 = m3.map(QVector3D(2, 3, 4));
QVERIFY(p3 == QVector3D(4, 0, -3));
QMatrix4x4 m4;
m4.rotate(90.0f, 0.0f, 0.0f, 1.0f);
m4.flipCoordinates();
- QVector3D p4 = m4 * QVector3D(2, 3, 4);
+ QVector3D p4 = m4.map(QVector3D(2, 3, 4));
QVERIFY(p4 == QVector3D(3, 2, -4));
}
@@ -3044,7 +3036,7 @@ void tst_QMatrixNxN::convertQTransform()
QCOMPARE(p1.y(), 150.0 + 2.0);
QMatrix4x4 m2(m1);
- QPointF p2 = m2 * QPointF(100.0, 150.0);
+ QPointF p2 = m2.map(QPointF(100.0, 150.0));
QCOMPARE((double)p2.x(), 100.0 - 3.5);
QCOMPARE((double)p2.y(), 150.0 + 2.0);
QCOMPARE(m1, m2.toTransform());
@@ -3056,7 +3048,7 @@ void tst_QMatrixNxN::convertQTransform()
QCOMPARE(p3.y(), -2.0 * 150.0);
QMatrix4x4 m4(m3);
- QPointF p4 = m4 * QPointF(100.0, 150.0);
+ QPointF p4 = m4.map(QPointF(100.0, 150.0));
QCOMPARE((double)p4.x(), 1.5 * 100.0);
QCOMPARE((double)p4.y(), -2.0 * 150.0);
QCOMPARE(m3, m4.toTransform());
@@ -3066,7 +3058,7 @@ void tst_QMatrixNxN::convertQTransform()
QPointF p5 = m5.map(QPointF(100.0, 150.0));
QMatrix4x4 m6(m5);
- QPointF p6 = m6 * QPointF(100.0, 150.0);
+ QPointF p6 = m6.map(QPointF(100.0, 150.0));
QVERIFY(qFuzzyCompare(float(p5.x()), float(p6.x())));
QVERIFY(qFuzzyCompare(float(p5.y()), float(p6.y())));
@@ -3316,9 +3308,9 @@ void tst_QMatrixNxN::properties()
void tst_QMatrixNxN::metaTypes()
{
- QCOMPARE(QMetaType::type("QMatrix4x4"), int(QMetaType::QMatrix4x4));
+ QCOMPARE(QMetaType::fromName("QMatrix4x4").id(), int(QMetaType::QMatrix4x4));
- QCOMPARE(QByteArray(QMetaType::typeName(QMetaType::QMatrix4x4)),
+ QCOMPARE(QByteArray(QMetaType(QMetaType::QMatrix4x4).name()),
QByteArray("QMatrix4x4"));
QVERIFY(QMetaType::isRegistered(QMetaType::QMatrix4x4));
@@ -3326,6 +3318,58 @@ void tst_QMatrixNxN::metaTypes()
QCOMPARE(qMetaTypeId<QMatrix4x4>(), int(QMetaType::QMatrix4x4));
}
+#if QT_DEPRECATED_SINCE(6, 1)
+void tst_QMatrixNxN::deprecatedMultiplications()
+{
+ QMatrix4x4 m;
+ m.scale(1.0f, 2.0f, 3.0f);
+ // QMatrix4x4 and QVector3D
+ {
+ QVector3D v(4.0f, 5.0f, 6.0f);
+ {
+ // QMatrix4x4 * QVector3D
+ QT_IGNORE_DEPRECATIONS(const QVector3D v1 = m * v;)
+ const QVector3D v2 = m.map(v);
+
+ QCOMPARE(v1.x(), v2.x());
+ QCOMPARE(v1.y(), v2.y());
+ QCOMPARE(v1.z(), v2.z());
+ }
+ {
+ // QVector3D * QMatrix4x4
+ QT_IGNORE_DEPRECATIONS(const QVector3D v1 = v * m;)
+
+ QVector4D v4(v, 1.0);
+ const QVector4D v2 = v4 * m;
+
+ QCOMPARE(v1.x(), v2.x());
+ QCOMPARE(v1.y(), v2.y());
+ QCOMPARE(v1.z(), v2.z());
+ }
+ }
+ {
+ // QMatrix4x4 * QPoint
+ const QPoint p(4, 5);
+
+ QT_IGNORE_DEPRECATIONS(const QPoint p1 = m * p;)
+ const QPoint p2 = m.map(p);
+
+ QCOMPARE(p1.x(), p2.x());
+ QCOMPARE(p1.y(), p2.y());
+ }
+ {
+ // QMatrix4x4 * QPointF
+ const QPointF p(4.0f, 5.0f);
+
+ QT_IGNORE_DEPRECATIONS(const QPointF p1 = m * p;)
+ const QPointF p2 = m.map(p);
+
+ QCOMPARE(p1.x(), p2.x());
+ QCOMPARE(p1.y(), p2.y());
+ }
+}
+#endif // QT_DEPRECATED_SINCE(6, 1)
+
QTEST_APPLESS_MAIN(tst_QMatrixNxN)
#include "tst_qmatrixnxn.moc"
diff --git a/tests/auto/gui/math3d/qquaternion/CMakeLists.txt b/tests/auto/gui/math3d/qquaternion/CMakeLists.txt
index fbeb76abdd..205865faba 100644
--- a/tests/auto/gui/math3d/qquaternion/CMakeLists.txt
+++ b/tests/auto/gui/math3d/qquaternion/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qquaternion.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qquaternion Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qquaternion LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qquaternion
SOURCES
tst_qquaternion.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp b/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp
index e37480f633..8cdc06354e 100644
--- a/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp
+++ b/tests/auto/gui/math3d/qquaternion/tst_qquaternion.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QTest>
#include <QtCore/qmath.h>
@@ -600,7 +577,7 @@ void tst_QQuaternion::multiply_data()
for (float x = -1.0f; x <= 1.0f; x += 0.5f)
for (float y = -1.0f; y <= 1.0f; y += 0.5f)
for (float z = -1.0f; z <= 1.0f; z += 0.5f) {
- QTest::newRow("exhaustive")
+ QTest::addRow("exhaustive: (%.1f, %.1f, %.1f), %.1f", x, y, z, w)
<< x << y << z << w
<< z << w << y << x;
}
@@ -987,28 +964,6 @@ void tst_QQuaternion::rotationTo()
QVERIFY(myFuzzyCompare(vec2, from));
}
-static QByteArray testnameForAxis(const QVector3D &axis)
-{
- QByteArray testname;
- if (axis == QVector3D()) {
- testname = "null";
- } else {
- if (axis.x()) {
- testname += axis.x() < 0 ? '-' : '+';
- testname += 'X';
- }
- if (axis.y()) {
- testname += axis.y() < 0 ? '-' : '+';
- testname += 'Y';
- }
- if (axis.z()) {
- testname += axis.z() < 0 ? '-' : '+';
- testname += 'Z';
- }
- }
- return testname;
-}
-
// Test quaternion convertion to and from orthonormal axes.
void tst_QQuaternion::fromDirection_data()
{
@@ -1031,7 +986,10 @@ void tst_QQuaternion::fromDirection_data()
QVector3D xAxis, yAxis, zAxis;
q.getAxes(&xAxis, &yAxis, &zAxis);
- QTest::newRow("dir: " + testnameForAxis(zAxis) + ", up: " + testnameForAxis(yAxis))
+ QTest::addRow("ortho dirs: (%.1f,%.1f,%.1f), (%.1f,%.1f,%.1f), (%.1f,%.1f,%.1f)",
+ xAxis.x(), xAxis.y(), xAxis.z(),
+ yAxis.x(), yAxis.y(), yAxis.z(),
+ zAxis.x(), zAxis.y(), zAxis.z())
<< zAxis * 10.0f << yAxis * 10.0f;
}
@@ -1050,7 +1008,10 @@ void tst_QQuaternion::fromDirection_data()
QVector3D xAxis, yAxis, zAxis;
q.getAxes(&xAxis, &yAxis, &zAxis);
- QTest::newRow("dir: " + testnameForAxis(zAxis) + ", up: null")
+ QTest::addRow("bad dirs: (%.1f,%.1f,%.1f), (%.1f,%.1f,%.1f), (%.1f,%.1f,%.1f)",
+ xAxis.x(), xAxis.y(), xAxis.z(),
+ yAxis.x(), yAxis.y(), yAxis.z(),
+ zAxis.x(), zAxis.y(), zAxis.z())
<< zAxis * 10.0f << QVector3D();
}
}
diff --git a/tests/auto/gui/math3d/qvectornd/CMakeLists.txt b/tests/auto/gui/math3d/qvectornd/CMakeLists.txt
index c29550463a..5de1ff11e6 100644
--- a/tests/auto/gui/math3d/qvectornd/CMakeLists.txt
+++ b/tests/auto/gui/math3d/qvectornd/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qvectornd.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qvectornd Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qvectornd LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qvectornd
SOURCES
tst_qvectornd.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/math3d/qvectornd/tst_qvectornd.cpp b/tests/auto/gui/math3d/qvectornd/tst_qvectornd.cpp
index c7bcb9d262..3272ffac0e 100644
--- a/tests/auto/gui/math3d/qvectornd/tst_qvectornd.cpp
+++ b/tests/auto/gui/math3d/qvectornd/tst_qvectornd.cpp
@@ -1,30 +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
+
+#include <QVector2D>
+#include <QVector3D>
+#include <QVector4D>
+#ifdef QVARIANT_H
+# error "This test requires qvector{2,3,4}d.h to not include qvariant.h"
+#endif
+
+// don't assume <type_traits>
+template <typename T, typename U>
+constexpr inline bool my_is_same_v = false;
+template <typename T>
+constexpr inline bool my_is_same_v<T, T> = true;
+
+#define CHECK(cvref) \
+ static_assert(my_is_same_v<decltype(get<0>(std::declval<QVector2D cvref >())), float cvref >); \
+ static_assert(my_is_same_v<decltype(get<1>(std::declval<QVector2D cvref >())), float cvref >); \
+ \
+ static_assert(my_is_same_v<decltype(get<0>(std::declval<QVector3D cvref >())), float cvref >); \
+ static_assert(my_is_same_v<decltype(get<1>(std::declval<QVector3D cvref >())), float cvref >); \
+ static_assert(my_is_same_v<decltype(get<2>(std::declval<QVector3D cvref >())), float cvref >); \
+ \
+ static_assert(my_is_same_v<decltype(get<0>(std::declval<QVector4D cvref >())), float cvref >); \
+ static_assert(my_is_same_v<decltype(get<1>(std::declval<QVector4D cvref >())), float cvref >); \
+ static_assert(my_is_same_v<decltype(get<2>(std::declval<QVector4D cvref >())), float cvref >); \
+ static_assert(my_is_same_v<decltype(get<3>(std::declval<QVector4D cvref >())), float cvref >)
+
+CHECK(&);
+CHECK(const &);
+CHECK(&&);
+CHECK(const &&);
+
+#undef CHECK
#include <QTest>
#include <QtCore/qmath.h>
diff --git a/tests/auto/gui/painting/CMakeLists.txt b/tests/auto/gui/painting/CMakeLists.txt
index 4f933139ca..b49a80b180 100644
--- a/tests/auto/gui/painting/CMakeLists.txt
+++ b/tests/auto/gui/painting/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from painting.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qpainterpath)
add_subdirectory(qpainterpathstroker)
@@ -9,14 +10,18 @@ add_subdirectory(qpagelayout)
add_subdirectory(qpageranges)
add_subdirectory(qpagesize)
add_subdirectory(qpainter)
-add_subdirectory(qpdfwriter)
+if (QT_FEATURE_pdf)
+ add_subdirectory(qpdfwriter)
+endif()
add_subdirectory(qpen)
add_subdirectory(qpaintengine)
add_subdirectory(qtransform)
add_subdirectory(qpolygon)
-# QTBUG-87669 # special case
+
+# QTBUG-87669
if(NOT ANDROID)
add_subdirectory(qcolorspace)
+ add_subdirectory(qcolortransform)
endif()
if(QT_FEATURE_private_tests)
add_subdirectory(qpathclipper)
diff --git a/tests/auto/gui/painting/qbrush/CMakeLists.txt b/tests/auto/gui/painting/qbrush/CMakeLists.txt
index c8dad25d94..313bce20a4 100644
--- a/tests/auto/gui/painting/qbrush/CMakeLists.txt
+++ b/tests/auto/gui/painting/qbrush/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qbrush.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qbrush Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qbrush LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qbrush
SOURCES
tst_qbrush.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
diff --git a/tests/auto/gui/painting/qbrush/tst_qbrush.cpp b/tests/auto/gui/painting/qbrush/tst_qbrush.cpp
index ea380e3cc9..678c8d9b32 100644
--- a/tests/auto/gui/painting/qbrush/tst_qbrush.cpp
+++ b/tests/auto/gui/painting/qbrush/tst_qbrush.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 <QTest>
diff --git a/tests/auto/gui/painting/qcolor/CMakeLists.txt b/tests/auto/gui/painting/qcolor/CMakeLists.txt
index 87753803fb..52e551855c 100644
--- a/tests/auto/gui/painting/qcolor/CMakeLists.txt
+++ b/tests/auto/gui/painting/qcolor/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qcolor.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcolor Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcolor LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcolor
SOURCES
tst_qcolor.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/painting/qcolor/tst_qcolor.cpp b/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
index 5c93a41b71..f592db5544 100644
--- a/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
+++ b/tests/auto/gui/painting/qcolor/tst_qcolor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
@@ -38,6 +13,12 @@
#include <private/qdrawingprimitive_sse2_p.h>
#include <qrgba64.h>
+#if QT_DEPRECATED_SINCE(6, 6)
+# define DEPRECATED_IN_6_6(...) QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED __VA_ARGS__ QT_WARNING_POP
+#else
+# define DEPRECATED_IN_6_6(...)
+#endif
+
class tst_QColor : public QObject
{
Q_OBJECT
@@ -54,8 +35,8 @@ private slots:
void name();
void namehex_data();
void namehex();
- void setNamedColor_data();
- void setNamedColor();
+ void fromString_data();
+ void fromString();
void constructNamedColorWithSpace();
@@ -92,7 +73,7 @@ private slots:
void toCmykNonDestructive();
void toHsl_data();
- void toHsl();;
+ void toHsl();
void toHslNonDestructive();
void convertTo();
@@ -243,13 +224,13 @@ void tst_QColor::isValid_data()
QTest::newRow("defaultConstructor") << QColor() << false;
QTest::newRow("rgbConstructor-valid") << QColor(2,5,7) << true;
QTest::newRow("rgbConstructor-invalid") << QColor(2,5,999) << false;
- QTest::newRow("nameQStringConstructor-valid") << QColor(QString("#ffffff")) << true;
- QTest::newRow("nameQStringConstructor-invalid") << QColor(QString("#ffffgg")) << false;
- QTest::newRow("nameQStringConstructor-empty") << QColor(QString("")) << false;
- QTest::newRow("nameQStringConstructor-named") << QColor(QString("red")) << true;
- QTest::newRow("nameCharConstructor-valid") << QColor("#ffffff") << true;
- QTest::newRow("nameCharConstructor-invalid") << QColor("#ffffgg") << false;
- QTest::newRow("nameCharConstructor-invalid-2") << QColor("#fffffg") << false;
+ QTest::newRow("nameQStringConstructor-valid") << QColor::fromString("#ffffff") << true;
+ QTest::newRow("nameQStringConstructor-invalid") << QColor::fromString("#ffffgg") << false;
+ QTest::newRow("nameQStringConstructor-empty") << QColor::fromString("") << false;
+ QTest::newRow("nameQStringConstructor-named") << QColor::fromString("red") << true;
+ QTest::newRow("nameCharConstructor-valid") << QColor::fromString("#ffffff") << true;
+ QTest::newRow("nameCharConstructor-invalid") << QColor::fromString("#ffffgg") << false;
+ QTest::newRow("nameCharConstructor-invalid-2") << QColor::fromString("#fffffg") << false;
}
void tst_QColor::isValid()
@@ -335,7 +316,10 @@ void tst_QColor::namehex()
{
QFETCH(QString, hexcolor);
QFETCH(QColor, color);
+ DEPRECATED_IN_6_6(
QCOMPARE(QColor(hexcolor), color);
+ )
+ QCOMPARE(QColor::fromString(hexcolor), color);
}
void tst_QColor::globalColors_data()
@@ -721,25 +705,36 @@ static const int rgbTblSize = sizeof(rgbTbl) / sizeof(RGBData);
#undef rgb
-void tst_QColor::setNamedColor_data()
+void tst_QColor::fromString_data()
{
+#if QT_DEPRECATED_SINCE(6, 6)
QTest::addColumn<QColor>("byCtor");
QTest::addColumn<QColor>("bySetNamedColor");
+#endif
+ QTest::addColumn<QColor>("byFromString");
QTest::addColumn<QColor>("expected");
for (const auto e : rgbTbl) {
QColor expected;
expected.setRgba(e.value);
-#define ROW(expr) \
- do { \
- QColor bySetNamedColor; \
- bySetNamedColor.setNamedColor(expr); \
- auto byCtor = QColor(expr); \
- QTest::addRow("%s: %s", e.name, #expr) \
- << byCtor << bySetNamedColor << expected; \
- } while (0) \
- /*end*/
+#define ROW(expr) row(expr, #expr)
+ auto row = [&] (auto expr, const char *exprS) {
+ QT_WARNING_PUSH
+ #if QT_DEPRECATED_SINCE(6, 6)
+ QT_WARNING_DISABLE_DEPRECATED
+ QColor bySetNamedColor;
+ bySetNamedColor.setNamedColor(expr);
+ auto byCtor = QColor(expr);
+ #endif
+ QTest::addRow("%s: %s", e.name, exprS)
+ #if QT_DEPRECATED_SINCE(6, 6)
+ << byCtor << bySetNamedColor
+ #endif
+ << QColor::fromString(expr)
+ << expected;
+ QT_WARNING_POP
+ };
const auto l1 = QLatin1String(e.name);
const auto l1UpperBA = QByteArray(e.name).toUpper();
@@ -766,29 +761,42 @@ void tst_QColor::setNamedColor_data()
}
}
-void tst_QColor::setNamedColor()
+void tst_QColor::fromString()
{
+#if QT_DEPRECATED_SINCE(6, 6)
QFETCH(QColor, byCtor);
QFETCH(QColor, bySetNamedColor);
+#endif
+ QFETCH(QColor, byFromString);
QFETCH(QColor, expected);
+#if QT_DEPRECATED_SINCE(6, 6)
QCOMPARE(byCtor, expected);
QCOMPARE(bySetNamedColor, expected);
+#endif
+ QCOMPARE(byFromString, expected);
}
void tst_QColor::constructNamedColorWithSpace()
{
+ DEPRECATED_IN_6_6(
QColor whiteSmoke("white smoke");
QCOMPARE(whiteSmoke, QColor(245, 245, 245));
+ )
+ QCOMPARE(QColor::fromString("white smoke"), QColorConstants::Svg::whitesmoke);
}
void tst_QColor::colorNames()
{
- QStringList all = QColor::colorNames();
+ const QStringList all = QColor::colorNames();
QCOMPARE(all.size(), rgbTblSize);
for (int i = 0; i < all.size(); ++i)
QCOMPARE(all.at(i), QLatin1String(rgbTbl[i].name));
+ for (const QString &name : all)
+ QVERIFY(QColor::isValidColorName(name));
+ for (const auto &e : rgbTbl)
+ QVERIFY(QColor::isValidColorName(e.name));
}
void tst_QColor::spec()
diff --git a/tests/auto/gui/painting/qcolorspace/CMakeLists.txt b/tests/auto/gui/painting/qcolorspace/CMakeLists.txt
index 9e3460d363..383c1bb890 100644
--- a/tests/auto/gui/painting/qcolorspace/CMakeLists.txt
+++ b/tests/auto/gui/painting/qcolorspace/CMakeLists.txt
@@ -1,39 +1,33 @@
-# Generated from qcolorspace.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcolorspace Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcolorspace LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
-file(GLOB_RECURSE test_data_glob
+file(GLOB_RECURSE test_data
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
- resources/*)
-list(APPEND test_data ${test_data_glob})
+ resources/*
+)
+
+foreach(file IN LISTS test_data)
+ set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}")
+endforeach()
qt_internal_add_test(tst_qcolorspace
SOURCES
tst_qcolorspace.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
TESTDATA ${test_data}
+ BUILTIN_TESTDATA
)
-
-file(GLOB resource_glob_0 RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "resources/*")
-foreach(file IN LISTS resource_glob_0)
- set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}")
-endforeach()
-
-# Resources:
-set(qmake_immediate_resource_files
- ${resource_glob_0}
-)
-
-qt_internal_add_resource(tst_qcolorspace "qmake_immediate"
- PREFIX
- "/"
- FILES
- ${qmake_immediate_resource_files}
-)
-
diff --git a/tests/auto/gui/painting/qcolorspace/resources/CGATS001Compat-v2-micro.icc b/tests/auto/gui/painting/qcolorspace/resources/CGATS001Compat-v2-micro.icc
new file mode 100644
index 0000000000..b5a73495bf
--- /dev/null
+++ b/tests/auto/gui/painting/qcolorspace/resources/CGATS001Compat-v2-micro.icc
Binary files differ
diff --git a/tests/auto/gui/painting/qcolorspace/resources/VideoHD.icc b/tests/auto/gui/painting/qcolorspace/resources/VideoHD.icc
new file mode 100644
index 0000000000..b96eb68136
--- /dev/null
+++ b/tests/auto/gui/painting/qcolorspace/resources/VideoHD.icc
Binary files differ
diff --git a/tests/auto/gui/painting/qcolorspace/resources/sGrey-v4.icc b/tests/auto/gui/painting/qcolorspace/resources/sGrey-v4.icc
new file mode 100644
index 0000000000..2187b6786a
--- /dev/null
+++ b/tests/auto/gui/painting/qcolorspace/resources/sGrey-v4.icc
Binary files differ
diff --git a/tests/auto/gui/painting/qcolorspace/resources/sRGB_ICC_v4_Appearance.icc b/tests/auto/gui/painting/qcolorspace/resources/sRGB_ICC_v4_Appearance.icc
new file mode 100644
index 0000000000..30da950907
--- /dev/null
+++ b/tests/auto/gui/painting/qcolorspace/resources/sRGB_ICC_v4_Appearance.icc
Binary files differ
diff --git a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
index 576885de34..7505d463ed 100644
--- a/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
+++ b/tests/auto/gui/painting/qcolorspace/tst_qcolorspace.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -65,7 +40,14 @@ private slots:
void imageConversion64PM();
void imageConversionOverLargerGamut_data();
void imageConversionOverLargerGamut();
-
+ void imageConversionOverLargerGamut2_data();
+ void imageConversionOverLargerGamut2();
+ void imageConversionOverAnyGamutFP_data();
+ void imageConversionOverAnyGamutFP();
+ void imageConversionOverAnyGamutFP2_data();
+ void imageConversionOverAnyGamutFP2();
+ void imageConversionOverNonThreeComponentMatrix_data();
+ void imageConversionOverNonThreeComponentMatrix();
void loadImage();
void primaries();
@@ -84,6 +66,11 @@ private slots:
void transferFunctionTable();
void description();
+ void whitePoint_data();
+ void whitePoint();
+ void setWhitePoint();
+ void grayColorSpace();
+ void grayColorSpaceEffectivelySRgb();
};
tst_QColorSpace::tst_QColorSpace()
@@ -201,15 +188,41 @@ void tst_QColorSpace::fromIccProfile_data()
QTest::addColumn<QString>("testProfile");
QTest::addColumn<QColorSpace::NamedColorSpace>("namedColorSpace");
QTest::addColumn<QColorSpace::TransferFunction>("transferFunction");
+ QTest::addColumn<QColorSpace::TransformModel>("transformModel");
+ QTest::addColumn<QColorSpace::ColorModel>("colorModel");
QTest::addColumn<QString>("description");
QString prefix = QFINDTESTDATA("resources/");
// Read the official sRGB ICCv2 profile:
QTest::newRow("sRGB2014 (ICCv2)") << prefix + "sRGB2014.icc" << QColorSpace::SRgb
- << QColorSpace::TransferFunction::SRgb << QString("sRGB2014");
+ << QColorSpace::TransferFunction::SRgb
+ << QColorSpace::TransformModel::ThreeComponentMatrix
+ << QColorSpace::ColorModel::Rgb << QString("sRGB2014");
// My monitor's profile:
QTest::newRow("HP ZR30w (ICCv4)") << prefix + "HP_ZR30w.icc" << QColorSpace::NamedColorSpace(0)
- << QColorSpace::TransferFunction::Gamma << QString("HP Z30i");
+ << QColorSpace::TransferFunction::Gamma
+ << QColorSpace::TransformModel::ThreeComponentMatrix
+ << QColorSpace::ColorModel::Rgb << QString("HP Z30i");
+ // A profile to HD TV
+ QTest::newRow("VideoHD") << prefix + "VideoHD.icc" << QColorSpace::NamedColorSpace(0)
+ << QColorSpace::TransferFunction::Custom
+ << QColorSpace::TransformModel::ElementListProcessing
+ << QColorSpace::ColorModel::Rgb << QString("HDTV (Rec. 709)");
+ // sRGB on PCSLab format
+ QTest::newRow("sRGB ICCv4 Appearance") << prefix + "sRGB_ICC_v4_Appearance.icc" << QColorSpace::NamedColorSpace(0)
+ << QColorSpace::TransferFunction::Custom
+ << QColorSpace::TransformModel::ElementListProcessing
+ << QColorSpace::ColorModel::Rgb << QString("sRGB_ICC_v4_Appearance.icc");
+ // Grayscale profile
+ QTest::newRow("sGrey-v4") << prefix + "sGrey-v4.icc" << QColorSpace::NamedColorSpace(0)
+ << QColorSpace::TransferFunction::SRgb
+ << QColorSpace::TransformModel::ThreeComponentMatrix
+ << QColorSpace::ColorModel::Gray << QString("sGry");
+ // CMYK profile
+ QTest::newRow("CGATS compat") << prefix + "CGATS001Compat-v2-micro.icc" << QColorSpace::NamedColorSpace(0)
+ << QColorSpace::TransferFunction::Custom
+ << QColorSpace::TransformModel::ElementListProcessing
+ << QColorSpace::ColorModel::Cmyk << QString("uCMY");
}
void tst_QColorSpace::fromIccProfile()
@@ -217,10 +230,12 @@ void tst_QColorSpace::fromIccProfile()
QFETCH(QString, testProfile);
QFETCH(QColorSpace::NamedColorSpace, namedColorSpace);
QFETCH(QColorSpace::TransferFunction, transferFunction);
+ QFETCH(QColorSpace::TransformModel, transformModel);
+ QFETCH(QColorSpace::ColorModel, colorModel);
QFETCH(QString, description);
QFile file(testProfile);
- file.open(QIODevice::ReadOnly);
+ QVERIFY(file.open(QIODevice::ReadOnly));
QByteArray iccProfile = file.readAll();
QColorSpace fileColorSpace = QColorSpace::fromIccProfile(iccProfile);
QVERIFY(fileColorSpace.isValid());
@@ -229,7 +244,14 @@ void tst_QColorSpace::fromIccProfile()
QCOMPARE(fileColorSpace, namedColorSpace);
QCOMPARE(fileColorSpace.transferFunction(), transferFunction);
+ QCOMPARE(fileColorSpace.transformModel(), transformModel);
+ QCOMPARE(fileColorSpace.colorModel(), colorModel);
QCOMPARE(fileColorSpace.description(), description);
+
+ QByteArray iccProfile2 = fileColorSpace.iccProfile();
+ QCOMPARE(iccProfile, iccProfile2);
+ QColorSpace fileColorSpace2 = QColorSpace::fromIccProfile(iccProfile2);
+ QCOMPARE(fileColorSpace2, fileColorSpace);
}
void tst_QColorSpace::imageConversion_data()
@@ -240,9 +262,10 @@ void tst_QColorSpace::imageConversion_data()
QTest::newRow("sRGB -> Display-P3") << QColorSpace::SRgb << QColorSpace::DisplayP3 << 0;
QTest::newRow("sRGB -> Adobe RGB") << QColorSpace::SRgb << QColorSpace::AdobeRgb << 2;
- QTest::newRow("Display-P3 -> sRGB") << QColorSpace::DisplayP3 << QColorSpace::SRgb << 0;
QTest::newRow("Adobe RGB -> sRGB") << QColorSpace::AdobeRgb << QColorSpace::SRgb << 2;
+ QTest::newRow("Adobe RGB -> Display-P3") << QColorSpace::AdobeRgb << QColorSpace::DisplayP3 << 4;
QTest::newRow("Display-P3 -> Adobe RGB") << QColorSpace::DisplayP3 << QColorSpace::AdobeRgb << 2;
+ QTest::newRow("Display-P3 -> sRGB") << QColorSpace::DisplayP3 << QColorSpace::SRgb << 0;
QTest::newRow("sRGB -> sRGB Linear") << QColorSpace::SRgb << QColorSpace::SRgbLinear << 0;
QTest::newRow("sRGB Linear -> sRGB") << QColorSpace::SRgbLinear << QColorSpace::SRgb << 0;
}
@@ -269,9 +292,9 @@ void tst_QColorSpace::imageConversion()
int lastBlue = 0;
for (int i = 0; i < 256; ++i) {
QRgb p = testImage.pixel(i, 0);
- QVERIFY(qRed(p) >= lastRed);
- QVERIFY(qGreen(p) >= lastGreen);
- QVERIFY(qBlue(p) >= lastBlue);
+ QCOMPARE_GE(qRed(p), lastRed);
+ QCOMPARE_GE(qGreen(p), lastGreen);
+ QCOMPARE_GE(qBlue(p), lastBlue);
lastRed = qRed(p);
lastGreen = qGreen(p);
lastBlue = qBlue(p);
@@ -284,11 +307,12 @@ void tst_QColorSpace::imageConversion()
QCOMPARE(testImage.colorSpace(), QColorSpace(fromColorSpace));
for (int i = 0; i < 256; ++i) {
QRgb p = testImage.pixel(i, 0);
- QVERIFY(qAbs(qRed(p) - qGreen(p)) <= tolerance);
- QVERIFY(qAbs(qRed(p) - qBlue(p)) <= tolerance);
- QVERIFY((lastRed - qRed(p)) <= (tolerance / 2));
- QVERIFY((lastGreen - qGreen(p)) <= (tolerance / 2));
- QVERIFY((lastBlue - qBlue(p)) <= (tolerance / 2));
+ QCOMPARE_LE(qAbs(qRed(p) - qBlue(p)), tolerance);
+ QCOMPARE_LE(qAbs(qRed(p) - qGreen(p)), tolerance);
+ QCOMPARE_LE(qAbs(qGreen(p) - qBlue(p)), tolerance);
+ QCOMPARE_LE(lastRed - qRed(p), tolerance / 2);
+ QCOMPARE_LE(lastBlue - qBlue(p), tolerance / 2);
+ QCOMPARE_LE(lastGreen - qGreen(p), tolerance / 2);
lastRed = qRed(p);
lastGreen = qGreen(p);
lastBlue = qBlue(p);
@@ -329,9 +353,9 @@ void tst_QColorSpace::imageConversion64()
int lastBlue = 0;
for (int i = 0; i < 256; ++i) {
QRgb p = testImage.pixel(i, 0);
- QVERIFY(qRed(p) >= lastRed);
- QVERIFY(qGreen(p) >= lastGreen);
- QVERIFY(qBlue(p) >= lastBlue);
+ QCOMPARE_GE(qRed(p), lastRed);
+ QCOMPARE_GE(qGreen(p), lastGreen);
+ QCOMPARE_GE(qBlue(p), lastBlue);
lastRed = qRed(p);
lastGreen = qGreen(p);
lastBlue = qBlue(p);
@@ -346,9 +370,9 @@ void tst_QColorSpace::imageConversion64()
QRgb p = testImage.pixel(i, 0);
QCOMPARE(qRed(p), qGreen(p));
QCOMPARE(qRed(p), qBlue(p));
- QVERIFY((lastRed - qRed(p)) <= 0);
- QVERIFY((lastGreen - qGreen(p)) <= 0);
- QVERIFY((lastBlue - qBlue(p)) <= 0);
+ QCOMPARE_GE(qRed(p), lastRed);
+ QCOMPARE_GE(qGreen(p), lastGreen);
+ QCOMPARE_GE(qBlue(p), lastBlue);
lastRed = qRed(p);
lastGreen = qGreen(p);
lastBlue = qBlue(p);
@@ -372,8 +396,10 @@ void tst_QColorSpace::imageConversion64PM()
for (int j = 0; j < 16; ++j) {
int a = j * 15;
- for (int i = 0; i < 256; ++i)
- testImage.setPixel(i, j, qPremultiply(qRgba(i, i, i, a)));
+ for (int i = 0; i < 256; ++i) {
+ QRgba64 color = QRgba64::fromRgba(i, i, i, a);
+ testImage.setPixelColor(i, j, QColor::fromRgba64(color));
+ }
}
testImage.setColorSpace(fromColorSpace);
@@ -389,17 +415,17 @@ void tst_QColorSpace::imageConversion64PM()
const int expectedAlpha = j * 15;
for (int i = 0; i < 256; ++i) {
QRgb p = testImage.pixel(i, j);
- QVERIFY(qRed(p) >= lastRed);
- QVERIFY(qGreen(p) >= lastGreen);
- QVERIFY(qBlue(p) >= lastBlue);
+ QCOMPARE_GE(qRed(p), lastRed);
+ QCOMPARE_GE(qGreen(p), lastGreen);
+ QCOMPARE_GE(qBlue(p), lastBlue);
QCOMPARE(qAlpha(p), expectedAlpha);
lastRed = qRed(p);
lastGreen = qGreen(p);
lastBlue = qBlue(p);
}
- QVERIFY(lastRed <= expectedAlpha);
- QVERIFY(lastGreen <= expectedAlpha);
- QVERIFY(lastBlue <= expectedAlpha);
+ QCOMPARE_LE(lastRed, expectedAlpha);
+ QCOMPARE_LE(lastGreen, expectedAlpha);
+ QCOMPARE_LE(lastBlue, expectedAlpha);
lastRed = 0;
lastGreen = 0;
lastBlue = 0;
@@ -412,15 +438,15 @@ void tst_QColorSpace::imageConversion64PM()
for (int i = 0; i < 256; ++i) {
QRgb expected = qPremultiply(qRgba(i, i, i, expectedAlpha));
QRgb p = testImage.pixel(i, j);
- QCOMPARE(qRed(p), qGreen(p));
- QCOMPARE(qRed(p), qBlue(p));
+ QCOMPARE_LE(qAbs(qRed(p) - qGreen(p)), 1);
+ QCOMPARE_LE(qAbs(qRed(p) - qBlue(p)), 1);
QCOMPARE(qAlpha(p), expectedAlpha);
- QVERIFY((lastRed - qRed(p)) <= 0);
- QVERIFY((lastGreen - qGreen(p)) <= 0);
- QVERIFY((lastBlue - qBlue(p)) <= 0);
- QVERIFY(qAbs(qRed(p) - qRed(expected)) <= 1);
- QVERIFY(qAbs(qGreen(p) - qGreen(expected)) <= 1);
- QVERIFY(qAbs(qBlue(p) - qBlue(expected)) <= 1);
+ QCOMPARE_GE(qRed(p), lastRed);
+ QCOMPARE_GE(qGreen(p), lastGreen);
+ QCOMPARE_GE(qBlue(p), lastBlue);
+ QCOMPARE_LE(qAbs(qRed(p) - qRed(expected)), 1);
+ QCOMPARE_LE(qAbs(qGreen(p) - qGreen(expected)), 1);
+ QCOMPARE_LE(qAbs(qBlue(p) - qBlue(expected)), 1);
lastRed = qRed(p);
lastGreen = qGreen(p);
lastBlue = qBlue(p);
@@ -460,14 +486,14 @@ void tst_QColorSpace::imageConversionOverLargerGamut()
testImage.setColorSpace(csfrom);
for (int y = 0; y < 256; ++y)
for (int x = 0; x < 256; ++x)
- testImage.setPixel(x, y, qRgb(x, y, 0));
+ testImage.setPixel(x, y, qRgb(x, y, qAbs(x - y)));
QImage resultImage = testImage.convertedToColorSpace(csto);
for (int y = 0; y < 256; ++y) {
int lastRed = 0;
for (int x = 0; x < 256; ++x) {
QRgb p = resultImage.pixel(x, y);
- QVERIFY(qRed(p) >= lastRed);
+ QCOMPARE_GE(qRed(p), lastRed);
lastRed = qRed(p);
}
}
@@ -475,7 +501,7 @@ void tst_QColorSpace::imageConversionOverLargerGamut()
int lastGreen = 0;
for (int y = 0; y < 256; ++y) {
QRgb p = resultImage.pixel(x, y);
- QVERIFY(qGreen(p) >= lastGreen);
+ QCOMPARE_GE(qGreen(p), lastGreen);
lastGreen = qGreen(p);
}
}
@@ -489,6 +515,187 @@ void tst_QColorSpace::imageConversionOverLargerGamut()
}
}
+void tst_QColorSpace::imageConversionOverLargerGamut2_data()
+{
+ QTest::addColumn<QImage::Format>("format");
+
+ QTest::newRow("rgbx16x4") << QImage::Format_RGBX16FPx4;
+ QTest::newRow("rgba16x4") << QImage::Format_RGBA16FPx4;
+ QTest::newRow("rgba16x4PM") << QImage::Format_RGBA16FPx4_Premultiplied;
+ QTest::newRow("rgbx32x4") << QImage::Format_RGBX32FPx4;
+ QTest::newRow("rgba32x4") << QImage::Format_RGBA32FPx4;
+ QTest::newRow("rgba32x4PM") << QImage::Format_RGBA32FPx4_Premultiplied;
+}
+
+void tst_QColorSpace::imageConversionOverLargerGamut2()
+{
+ QFETCH(QImage::Format, format);
+
+ QColorSpace csfrom = QColorSpace::DisplayP3;
+ QColorSpace csto = QColorSpace::SRgb;
+
+ QImage testImage(256, 256, format);
+ testImage.setColorSpace(csfrom);
+ for (int y = 0; y < 256; ++y)
+ for (int x = 0; x < 256; ++x)
+ testImage.setPixel(x, y, qRgba(x, y, 16, 255));
+
+ QImage resultImage = testImage.convertedToColorSpace(csto);
+ for (int y = 0; y < 256; ++y) {
+ float lastRed = -256.0f;
+ for (int x = 0; x < 256; ++x) {
+ float pr = resultImage.pixelColor(x, y).redF();
+ QVERIFY(pr >= lastRed);
+ lastRed = pr;
+ }
+ }
+ for (int x = 0; x < 256; ++x) {
+ float lastGreen = -256.0f;
+ for (int y = 0; y < 256; ++y) {
+ float pg = resultImage.pixelColor(x, y).greenF();
+ QVERIFY(pg >= lastGreen);
+ lastGreen = pg;
+ }
+ }
+ // Test colors outside of sRGB are converted to values outside of 0-1 range.
+ QVERIFY(resultImage.pixelColor(255, 0).redF() > 1.0f);
+ QVERIFY(resultImage.pixelColor(255, 0).greenF() < 0.0f);
+ QVERIFY(resultImage.pixelColor(0, 255).redF() < 0.0f);
+ QVERIFY(resultImage.pixelColor(0, 255).greenF() > 1.0f);
+}
+
+void tst_QColorSpace::imageConversionOverAnyGamutFP_data()
+{
+ QTest::addColumn<QColorSpace::NamedColorSpace>("fromColorSpace");
+ QTest::addColumn<QColorSpace::NamedColorSpace>("toColorSpace");
+
+ QTest::newRow("sRGB -> Display-P3") << QColorSpace::SRgb << QColorSpace::DisplayP3;
+ QTest::newRow("sRGB -> Adobe RGB") << QColorSpace::SRgb << QColorSpace::AdobeRgb;
+ QTest::newRow("sRGB -> ProPhoto RGB") << QColorSpace::SRgb << QColorSpace::ProPhotoRgb;
+ QTest::newRow("Adobe RGB -> sRGB") << QColorSpace::AdobeRgb << QColorSpace::SRgb;
+ QTest::newRow("Adobe RGB -> Display-P3") << QColorSpace::AdobeRgb << QColorSpace::DisplayP3;
+ QTest::newRow("Adobe RGB -> ProPhoto RGB") << QColorSpace::AdobeRgb << QColorSpace::ProPhotoRgb;
+ QTest::newRow("Display-P3 -> sRGB") << QColorSpace::DisplayP3 << QColorSpace::SRgb;
+ QTest::newRow("Display-P3 -> Adobe RGB") << QColorSpace::DisplayP3 << QColorSpace::AdobeRgb;
+ QTest::newRow("Display-P3 -> ProPhoto RGB") << QColorSpace::DisplayP3 << QColorSpace::ProPhotoRgb;
+}
+
+void tst_QColorSpace::imageConversionOverAnyGamutFP()
+{
+ QFETCH(QColorSpace::NamedColorSpace, fromColorSpace);
+ QFETCH(QColorSpace::NamedColorSpace, toColorSpace);
+
+ QColorSpace csfrom(fromColorSpace);
+ QColorSpace csto(toColorSpace);
+ csfrom.setTransferFunction(QColorSpace::TransferFunction::Linear);
+ csto.setTransferFunction(QColorSpace::TransferFunction::Linear);
+
+ QImage testImage(256, 256, QImage::Format_RGBX32FPx4);
+ testImage.setColorSpace(csfrom);
+ for (int y = 0; y < 256; ++y)
+ for (int x = 0; x < 256; ++x)
+ testImage.setPixel(x, y, qRgb(x, y, 0));
+
+ QImage resultImage = testImage.convertedToColorSpace(csto);
+ resultImage.convertToColorSpace(csfrom);
+
+ for (int y = 0; y < 256; ++y) {
+ for (int x = 0; x < 256; ++x) {
+ QCOMPARE(resultImage.pixel(x, y), testImage.pixel(x, y));
+ }
+ }
+}
+
+void tst_QColorSpace::imageConversionOverAnyGamutFP2_data()
+{
+ imageConversionOverAnyGamutFP_data();
+}
+
+void tst_QColorSpace::imageConversionOverAnyGamutFP2()
+{
+ QFETCH(QColorSpace::NamedColorSpace, fromColorSpace);
+ QFETCH(QColorSpace::NamedColorSpace, toColorSpace);
+
+ // Same as imageConversionOverAnyGamutFP but using format switching transform
+ QColorSpace csfrom(fromColorSpace);
+ QColorSpace csto(toColorSpace);
+ csfrom.setTransferFunction(QColorSpace::TransferFunction::Linear);
+ csto.setTransferFunction(QColorSpace::TransferFunction::Linear);
+
+ QImage testImage(256, 256, QImage::Format_RGB32);
+ testImage.setColorSpace(csfrom);
+ for (int y = 0; y < 256; ++y)
+ for (int x = 0; x < 256; ++x)
+ testImage.setPixel(x, y, qRgb(x, y, 0));
+
+ QImage resultImage = testImage.convertedToColorSpace(csto, QImage::Format_RGBX32FPx4);
+ resultImage.convertToColorSpace(csfrom, QImage::Format_RGB32);
+
+ for (int y = 0; y < 256; ++y) {
+ for (int x = 0; x < 256; ++x) {
+ QCOMPARE(resultImage.pixel(x, y), testImage.pixel(x, y));
+ }
+ }
+}
+
+void tst_QColorSpace::imageConversionOverNonThreeComponentMatrix_data()
+{
+ QTest::addColumn<QColorSpace>("fromColorSpace");
+ QTest::addColumn<QColorSpace>("toColorSpace");
+
+ QString prefix = QFINDTESTDATA("resources/");
+ QFile file1(prefix + "VideoHD.icc");
+ QFile file2(prefix + "sRGB_ICC_v4_Appearance.icc");
+ QVERIFY(file1.open(QFile::ReadOnly));
+ QVERIFY(file2.open(QFile::ReadOnly));
+ QByteArray iccProfile1 = file1.readAll();
+ QByteArray iccProfile2 = file2.readAll();
+ QColorSpace hdtvColorSpace = QColorSpace::fromIccProfile(iccProfile1);
+ QColorSpace srgbPcsColorSpace = QColorSpace::fromIccProfile(iccProfile2);
+
+ QTest::newRow("sRGB PCSLab -> sRGB") << srgbPcsColorSpace << QColorSpace(QColorSpace::SRgb);
+ QTest::newRow("sRGB -> sRGB PCSLab") << QColorSpace(QColorSpace::SRgb) << srgbPcsColorSpace;
+ QTest::newRow("HDTV -> sRGB") << hdtvColorSpace << QColorSpace(QColorSpace::SRgb);
+ QTest::newRow("sRGB -> HDTV") << QColorSpace(QColorSpace::SRgb) << hdtvColorSpace;
+ QTest::newRow("sRGB PCSLab -> HDTV") << srgbPcsColorSpace << hdtvColorSpace;
+ QTest::newRow("HDTV -> sRGB PCSLab") << hdtvColorSpace << srgbPcsColorSpace;
+}
+
+void tst_QColorSpace::imageConversionOverNonThreeComponentMatrix()
+{
+ QFETCH(QColorSpace, fromColorSpace);
+ QFETCH(QColorSpace, toColorSpace);
+ QVERIFY(fromColorSpace.isValid());
+ QVERIFY(toColorSpace.isValidTarget());
+
+ QVERIFY(!fromColorSpace.transformationToColorSpace(toColorSpace).isIdentity());
+
+ QImage testImage(256, 256, QImage::Format_RGBX64);
+ testImage.setColorSpace(fromColorSpace);
+ for (int y = 0; y < 256; ++y)
+ for (int x = 0; x < 256; ++x)
+ testImage.setPixel(x, y, qRgb(x, y, 0));
+
+ QImage resultImage = testImage.convertedToColorSpace(toColorSpace);
+ QCOMPARE(resultImage.size(), testImage.size());
+ for (int y = 0; y < 256; ++y) {
+ int lastRed = 0;
+ for (int x = 0; x < 256; ++x) {
+ QRgb p = resultImage.pixel(x, y);
+ QVERIFY(qRed(p) >= lastRed);
+ lastRed = qRed(p);
+ }
+ }
+ for (int x = 0; x < 256; ++x) {
+ int lastGreen = 0;
+ for (int y = 0; y < 256; ++y) {
+ QRgb p = resultImage.pixel(x, y);
+ QVERIFY(qGreen(p) >= lastGreen);
+ lastGreen = qGreen(p);
+ }
+ }
+}
+
void tst_QColorSpace::loadImage()
{
QString prefix = QFINDTESTDATA("resources/");
@@ -666,10 +873,28 @@ void tst_QColorSpace::changePrimaries()
cs.setPrimaries(QColorSpace::Primaries::DciP3D65);
QVERIFY(cs.isValid());
QCOMPARE(cs, QColorSpace(QColorSpace::DisplayP3));
+ QCOMPARE(cs.transformModel(), QColorSpace::TransformModel::ThreeComponentMatrix);
cs.setTransferFunction(QColorSpace::TransferFunction::Linear);
cs.setPrimaries(QPointF(0.3127, 0.3290), QPointF(0.640, 0.330),
QPointF(0.3000, 0.6000), QPointF(0.150, 0.060));
QCOMPARE(cs, QColorSpace(QColorSpace::SRgbLinear));
+
+
+ QFile iccFile(QFINDTESTDATA("resources/") + "VideoHD.icc");
+ QVERIFY(iccFile.open(QFile::ReadOnly));
+ QByteArray iccData = iccFile.readAll();
+ QColorSpace hdtvColorSpace = QColorSpace::fromIccProfile(iccData);
+ QVERIFY(hdtvColorSpace.isValid());
+ QCOMPARE(hdtvColorSpace.transformModel(), QColorSpace::TransformModel::ElementListProcessing);
+ QCOMPARE(hdtvColorSpace.primaries(), QColorSpace::Primaries::Custom);
+ QCOMPARE(hdtvColorSpace.transferFunction(), QColorSpace::TransferFunction::Custom);
+ // Unsets both primaries and transferfunction because they were inseparable in element list processing
+ hdtvColorSpace.setPrimaries(QColorSpace::Primaries::SRgb);
+ QVERIFY(!hdtvColorSpace.isValid());
+ hdtvColorSpace.setTransferFunction(QColorSpace::TransferFunction::SRgb);
+ QVERIFY(hdtvColorSpace.isValid());
+ QCOMPARE(hdtvColorSpace.transformModel(), QColorSpace::TransformModel::ThreeComponentMatrix);
+ QCOMPARE(hdtvColorSpace, QColorSpace(QColorSpace::SRgb));
}
void tst_QColorSpace::transferFunctionTable()
@@ -718,5 +943,92 @@ void tst_QColorSpace::description()
QCOMPARE(srgb.description(), QLatin1String("Linear sRGB")); // Set to empty returns default behavior
}
+void tst_QColorSpace::whitePoint_data()
+{
+ QTest::addColumn<QColorSpace::NamedColorSpace>("namedColorSpace");
+ QTest::addColumn<QPointF>("whitePoint");
+
+ QTest::newRow("sRGB") << QColorSpace::SRgb << QColorVector::D65Chromaticity();
+ QTest::newRow("Adobe RGB") << QColorSpace::AdobeRgb << QColorVector::D65Chromaticity();
+ QTest::newRow("Display-P3") << QColorSpace::DisplayP3 << QColorVector::D65Chromaticity();
+ QTest::newRow("ProPhoto RGB") << QColorSpace::ProPhotoRgb << QColorVector::D50Chromaticity();
+}
+
+void tst_QColorSpace::whitePoint()
+{
+ QFETCH(QColorSpace::NamedColorSpace, namedColorSpace);
+ QFETCH(QPointF, whitePoint);
+
+ QColorSpace colorSpace(namedColorSpace);
+ QPointF wpt = colorSpace.whitePoint();
+ QCOMPARE_LE(qAbs(wpt.x() - whitePoint.x()), 0.0000001);
+ QCOMPARE_LE(qAbs(wpt.y() - whitePoint.y()), 0.0000001);
+}
+
+void tst_QColorSpace::setWhitePoint()
+{
+ QColorSpace colorSpace(QColorSpace::SRgb);
+ colorSpace.setWhitePoint(QPointF(0.33, 0.33));
+ QCOMPARE_NE(colorSpace, QColorSpace(QColorSpace::SRgb));
+ colorSpace.setWhitePoint(QColorVector::D65Chromaticity());
+ // Check our matrix manipulations returned us to where we came from
+ QCOMPARE(colorSpace, QColorSpace(QColorSpace::SRgb));
+}
+
+void tst_QColorSpace::grayColorSpace()
+{
+ QColorSpace spc;
+ QCOMPARE(spc.colorModel(), QColorSpace::ColorModel::Undefined);
+ QVERIFY(!spc.isValid());
+ spc.setWhitePoint(QColorVector::D65Chromaticity());
+ spc.setTransferFunction(QColorSpace::TransferFunction::SRgb);
+ QVERIFY(spc.isValid());
+ QCOMPARE(spc.colorModel(), QColorSpace::ColorModel::Gray);
+
+ QColorSpace spc2(QColorVector::D65Chromaticity(), QColorSpace::TransferFunction::SRgb);
+ QVERIFY(spc2.isValid());
+ QCOMPARE(spc2.colorModel(), QColorSpace::ColorModel::Gray);
+ QCOMPARE(spc, spc2);
+
+ QImage rgbImage(1, 8, QImage::Format_RGB32);
+ QImage grayImage(1, 255, QImage::Format_Grayscale8);
+ // RGB images can not have gray color space
+ rgbImage.setColorSpace(spc2);
+ grayImage.setColorSpace(spc2);
+ QCOMPARE_NE(rgbImage.colorSpace(), spc2);
+ QCOMPARE(grayImage.colorSpace(), spc2);
+ // But gray images can have RGB color space
+ rgbImage.setColorSpace(QColorSpace::SRgb);
+ grayImage.setColorSpace(QColorSpace::SRgb);
+ QCOMPARE(rgbImage.colorSpace(), QColorSpace(QColorSpace::SRgb));
+ QCOMPARE(grayImage.colorSpace(), QColorSpace(QColorSpace::SRgb));
+
+ // While we can not set a grayscale color space on rgb image, we can convert to one
+ QImage grayImage2 = rgbImage.convertedToColorSpace(spc2);
+ QCOMPARE(grayImage2.colorSpace(), spc2);
+ QCOMPARE(grayImage2.format(), QImage::Format_Grayscale8);
+}
+
+void tst_QColorSpace::grayColorSpaceEffectivelySRgb()
+{
+ // Test grayscale colorspace conversion by making a gray color space that should act like sRGB on gray values.
+ QColorSpace sRgb(QColorSpace::SRgb);
+ QColorSpace sRgbGray(QColorVector::D65Chromaticity(), QColorSpace::TransferFunction::SRgb);
+
+ QImage grayImage1(256, 1, QImage::Format_Grayscale8);
+ QImage grayImage2(256, 1, QImage::Format_Grayscale8);
+ for (int i = 0; i < 256; ++i) {
+ grayImage1.bits()[i] = i;
+ grayImage2.bits()[i] = i;
+ }
+ grayImage1.setColorSpace(sRgb);
+ grayImage2.setColorSpace(sRgbGray);
+
+ QImage rgbImage1 = grayImage1.convertedTo(QImage::Format_RGB32);
+ QImage rgbImage2 = grayImage2.convertedToColorSpace(sRgb, QImage::Format_RGB32);
+
+ QCOMPARE(rgbImage1, rgbImage2);
+}
+
QTEST_MAIN(tst_QColorSpace)
#include "tst_qcolorspace.moc"
diff --git a/tests/auto/gui/painting/qcolortransform/CMakeLists.txt b/tests/auto/gui/painting/qcolortransform/CMakeLists.txt
new file mode 100644
index 0000000000..4aa4a8bc4a
--- /dev/null
+++ b/tests/auto/gui/painting/qcolortransform/CMakeLists.txt
@@ -0,0 +1,20 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qcolortransform Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcolortransform LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qcolortransform
+ SOURCES
+ tst_qcolortransform.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
diff --git a/tests/auto/gui/painting/qcolortransform/tst_qcolortransform.cpp b/tests/auto/gui/painting/qcolortransform/tst_qcolortransform.cpp
new file mode 100644
index 0000000000..7a976b5f5e
--- /dev/null
+++ b/tests/auto/gui/painting/qcolortransform/tst_qcolortransform.cpp
@@ -0,0 +1,380 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+#include <QTest>
+
+#include <qcolorspace.h>
+#include <qcolortransform.h>
+#include <qrgbafloat.h>
+#include <QtGui/private/qcolortransform_p.h>
+
+class tst_QColorTransform : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QColorTransform();
+
+private slots:
+ void mapRGB32_data();
+ void mapRGB32();
+ void mapRGB64_data();
+ void mapRGB64();
+ void mapRGBAFP16x4_data();
+ void mapRGBAFP16x4();
+ void mapRGBAFP32x4_data();
+ void mapRGBAFP32x4();
+ void mapQColor_data();
+ void mapQColor();
+ void mapRGB32Prepared_data();
+ void mapRGB32Prepared();
+
+ void transformIsIdentity();
+};
+
+tst_QColorTransform::tst_QColorTransform()
+{ }
+
+
+void tst_QColorTransform::mapRGB32_data()
+{
+ QTest::addColumn<QColorTransform>("transform");
+ QTest::addColumn<bool>("sharesRed");
+
+ QColorSpace srgb(QColorSpace::SRgb);
+ QColorSpace srgbLinear(QColorSpace::SRgbLinear);
+ QColorSpace adobeRgb(QColorSpace::AdobeRgb);
+ QColorSpace adobeRgbLinear = adobeRgb.withTransferFunction(QColorSpace::TransferFunction::Linear);
+ QColorSpace dp3(QColorSpace::DisplayP3);
+ QColorSpace dp3Linear = dp3.withTransferFunction(QColorSpace::TransferFunction::Linear);
+
+ QTest::newRow("default") << QColorTransform() << true;
+ QTest::newRow("sRGB to Linear sRGB") << srgb.transformationToColorSpace(srgbLinear) << true;
+ QTest::newRow("AdobeRGB to sRGB") << adobeRgb.transformationToColorSpace(srgb) << true;
+ QTest::newRow("Linear AdobeRGB to AdobeRGB") << adobeRgbLinear.transformationToColorSpace(adobeRgb) << true;
+ QTest::newRow("Linear AdobeRGB to Linear sRGB") << adobeRgbLinear.transformationToColorSpace(srgbLinear) << true;
+ QTest::newRow("sRgb to AdobeRGB") << srgb.transformationToColorSpace(adobeRgb) << true;
+ QTest::newRow("DP3 to sRGB") << dp3.transformationToColorSpace(srgb) << false;
+ QTest::newRow("DP3 to Linear DP3") << dp3.transformationToColorSpace(dp3Linear) << false;
+ QTest::newRow("Linear DP3 to Linear sRGB") << dp3Linear.transformationToColorSpace(srgbLinear) << false;
+}
+
+void tst_QColorTransform::mapRGB32()
+{
+ QFETCH(QColorTransform, transform);
+ QFETCH(bool, sharesRed);
+ // Do basic sanity tests of conversions between similar sane color spaces
+
+ QRgb testColor = qRgb(32, 64, 128);
+ QRgb result = transform.map(testColor);
+ QVERIFY(qRed(result) < qGreen(result));
+ QVERIFY(qGreen(result) < qBlue(result));
+ QCOMPARE(qAlpha(result), 255);
+ if (transform.isIdentity())
+ QVERIFY(result == testColor);
+ else
+ QVERIFY(result != testColor);
+
+ testColor = qRgb(128, 64, 32);
+ result = transform.map(testColor);
+ QVERIFY(qRed(result) > qGreen(result));
+ QVERIFY(qGreen(result) > qBlue(result));
+ QCOMPARE(qAlpha(result), 255);
+ if (transform.isIdentity())
+ QVERIFY(result == testColor);
+ else
+ QVERIFY(result != testColor);
+
+ testColor = qRgba(15, 31, 63, 128);
+ result = transform.map(testColor);
+ QVERIFY(qRed(result) < qGreen(result));
+ QVERIFY(qGreen(result) < qBlue(result));
+ QCOMPARE(qAlpha(result), 128);
+ if (transform.isIdentity())
+ QVERIFY(result == testColor);
+ else
+ QVERIFY(result != testColor);
+
+ testColor = qRgb(0, 0, 0);
+ result = transform.map(testColor);
+ QCOMPARE(qRed(result), 0);
+ QCOMPARE(qGreen(result), 0);
+ QCOMPARE(qBlue(result), 0);
+ QCOMPARE(qAlpha(result), 255);
+
+ testColor = qRgb(255, 255, 255);
+ result = transform.map(testColor);
+ QCOMPARE(qRed(result), 255);
+ QCOMPARE(qGreen(result), 255);
+ QCOMPARE(qBlue(result), 255);
+ QCOMPARE(qAlpha(result), 255);
+
+ testColor = qRgb(255, 255, 0);
+ result = transform.map(testColor);
+ QCOMPARE(qAlpha(result), 255);
+ if (sharesRed)
+ QCOMPARE(qRed(result), 255);
+
+ testColor = qRgb(0, 255, 255);
+ result = transform.map(testColor);
+ QCOMPARE(qBlue(result), 255);
+ QCOMPARE(qAlpha(result), 255);
+}
+
+void tst_QColorTransform::mapRGB64_data()
+{
+ mapRGB32_data();
+}
+
+void tst_QColorTransform::mapRGB64()
+{
+ QFETCH(QColorTransform, transform);
+ QFETCH(bool, sharesRed);
+
+ QRgba64 testColor = QRgba64::fromRgba(128, 64, 32, 255);
+ QRgba64 result = transform.map(testColor);
+ QVERIFY(result.red() > result.green());
+ QVERIFY(result.green() > result.blue());
+ QCOMPARE(result.alpha(), 0xffff);
+ if (transform.isIdentity())
+ QVERIFY(result == testColor);
+ else
+ QVERIFY(result != testColor);
+
+ testColor = QRgba64::fromRgba64(0, 0, 0, 0xffff);
+ result = transform.map(testColor);
+ QCOMPARE(result, testColor);
+
+ testColor = QRgba64::fromRgba64(0xffff, 0xffff, 0xffff, 0xffff);
+ result = transform.map(testColor);
+ QCOMPARE(result, testColor);
+
+ testColor = QRgba64::fromRgba64(0xffff, 0xffff, 0, 0xffff);
+ result = transform.map(testColor);
+ QCOMPARE(result.alpha(), 0xffff);
+ if (sharesRed)
+ QCOMPARE(result.red(), 0xffff);
+
+ testColor = QRgba64::fromRgba64(0, 0xffff, 0xffff, 0xffff);
+ result = transform.map(testColor);
+ QCOMPARE(result.blue(), 0xffff);
+ QCOMPARE(result.alpha(), 0xffff);
+}
+
+void tst_QColorTransform::mapRGBAFP16x4_data()
+{
+ mapRGB32_data();
+}
+
+void tst_QColorTransform::mapRGBAFP16x4()
+{
+ QFETCH(QColorTransform, transform);
+ QFETCH(bool, sharesRed);
+
+ QRgbaFloat16 testColor = QRgbaFloat16::fromRgba(128, 64, 32, 255);
+ QRgbaFloat16 result = transform.map(testColor);
+ QVERIFY(result.red() > result.green());
+ QVERIFY(result.green() > result.blue());
+ QCOMPARE(result.alpha(), 1.0f);
+ if (transform.isIdentity())
+ QVERIFY(result == testColor);
+ else
+ QVERIFY(result != testColor);
+
+ testColor = QRgbaFloat16{qfloat16(0.0f), qfloat16(0.0f), qfloat16(0.0f), qfloat16(1.0f)};
+ result = transform.map(testColor);
+ QCOMPARE(result, testColor);
+
+ testColor = QRgbaFloat16{qfloat16(1.0f), qfloat16(1.0f), qfloat16(1.0f), qfloat16(1.0f)};
+ result = transform.map(testColor);
+ QCOMPARE(result, testColor);
+
+ testColor = QRgbaFloat16{qfloat16(1.0f), qfloat16(1.0f), qfloat16(1.0f), qfloat16(1.0f)};
+ result = transform.map(testColor);
+ QCOMPARE(result.alpha(), 1.0f);
+ if (sharesRed)
+ QCOMPARE(result.red(), 1.0f);
+
+ testColor = QRgbaFloat16{qfloat16(0.0f), qfloat16(1.0f), qfloat16(1.0f), qfloat16(1.0f)};
+ result = transform.map(testColor);
+ // QRgbaFloat16 might overflow blue if we convert to a smaller gamut:
+ QCOMPARE(result.blue16(), 65535);
+ QCOMPARE(result.alpha(), 1.0f);
+}
+
+void tst_QColorTransform::mapRGBAFP32x4_data()
+{
+ mapRGB32_data();
+}
+
+void tst_QColorTransform::mapRGBAFP32x4()
+{
+ QFETCH(QColorTransform, transform);
+ QFETCH(bool, sharesRed);
+
+ QRgbaFloat32 testColor = QRgbaFloat32::fromRgba(128, 64, 32, 255);
+ QRgbaFloat32 result = transform.map(testColor);
+ QVERIFY(result.red() > result.green());
+ QVERIFY(result.green() > result.blue());
+ QCOMPARE(result.alpha(), 1.0f);
+ if (transform.isIdentity())
+ QVERIFY(result == testColor);
+ else
+ QVERIFY(result != testColor);
+
+ testColor = QRgbaFloat32{0.0f, 0.0f, 0.0f, 1.0f};
+ result = transform.map(testColor);
+ QCOMPARE(result.red(), 0.0f);
+ QCOMPARE(result.green(), 0.0f);
+ QCOMPARE(result.blue(), 0.0f);
+ QCOMPARE(result.alpha(), 1.0f);
+
+ testColor = QRgbaFloat32{1.0f, 1.0f, 1.0f, 1.0f};
+ result = transform.map(testColor);
+ QCOMPARE(result.red(), 1.0f);
+ QCOMPARE(result.green(), 1.0f);
+ QCOMPARE(result.blue(), 1.0f);
+ QCOMPARE(result.alpha(), 1.0f);
+
+ testColor = QRgbaFloat32{1.0f, 1.0f, 0.0f, 1.0f};
+ result = transform.map(testColor);
+ QCOMPARE(result.alpha(), 1.0f);
+ if (sharesRed)
+ QCOMPARE(result.red(), 1.0f);
+
+ testColor = QRgbaFloat32{0.0f, 1.0f, 1.0f, 1.0f};
+ result = transform.map(testColor);
+ // QRgbaFloat16 might overflow blue if we convert to a smaller gamut:
+ QCOMPARE(result.blue16(), 65535);
+ QCOMPARE(result.alpha(), 1.0f);
+}
+
+void tst_QColorTransform::mapQColor_data()
+{
+ mapRGB32_data();
+}
+
+void tst_QColorTransform::mapQColor()
+{
+ QFETCH(QColorTransform, transform);
+ QFETCH(bool, sharesRed);
+
+ QColor testColor(32, 64, 128);
+ QColor result = transform.map(testColor);
+ QVERIFY(result.redF() < result.greenF());
+ QVERIFY(result.greenF() < result.blueF());
+ QCOMPARE(result.alphaF(), 1.0f);
+ if (transform.isIdentity())
+ QVERIFY(result == testColor);
+ else
+ QVERIFY(result != testColor);
+
+ testColor = Qt::black;
+ result = transform.map(testColor);
+ QCOMPARE(result, testColor);
+
+ testColor = Qt::white;
+ result = transform.map(testColor);
+ QCOMPARE(result, testColor);
+
+ testColor = QColor(255, 255, 0);
+ result = transform.map(testColor);
+ QCOMPARE(result.alphaF(), 1);
+ if (sharesRed)
+ QVERIFY(result.redF() >= 1.0f);
+
+ testColor = QColor(0, 255, 255);
+ result = transform.map(testColor);
+ QCOMPARE(result.alphaF(), 1.0f);
+ QVERIFY(result.blueF() >= 1.0f);
+}
+
+void tst_QColorTransform::mapRGB32Prepared_data()
+{
+ mapRGB32_data();
+}
+
+void tst_QColorTransform::mapRGB32Prepared()
+{
+ QFETCH(QColorTransform, transform);
+ QFETCH(bool, sharesRed);
+
+ // The same tests as mapRGB32 but prepared, to use the LUT code-paths
+ if (!transform.isIdentity())
+ QColorTransformPrivate::get(transform)->prepare();
+
+ QRgb testColor = qRgb(32, 64, 128);
+ QRgb result = transform.map(testColor);
+ QVERIFY(qRed(result) < qGreen(result));
+ QVERIFY(qGreen(result) < qBlue(result));
+ QCOMPARE(qAlpha(result), 255);
+ if (transform.isIdentity())
+ QVERIFY(result == testColor);
+ else
+ QVERIFY(result != testColor);
+
+ testColor = qRgb(128, 64, 32);
+ result = transform.map(testColor);
+ QVERIFY(qRed(result) > qGreen(result));
+ QVERIFY(qGreen(result) > qBlue(result));
+ QCOMPARE(qAlpha(result), 255);
+ if (transform.isIdentity())
+ QVERIFY(result == testColor);
+ else
+ QVERIFY(result != testColor);
+
+ testColor = qRgba(15, 31, 63, 128);
+ result = transform.map(testColor);
+ QVERIFY(qRed(result) < qGreen(result));
+ QVERIFY(qGreen(result) < qBlue(result));
+ QCOMPARE(qAlpha(result), 128);
+ if (transform.isIdentity())
+ QVERIFY(result == testColor);
+ else
+ QVERIFY(result != testColor);
+
+ testColor = qRgb(0, 0, 0);
+ result = transform.map(testColor);
+ QCOMPARE(qRed(result), 0);
+ QCOMPARE(qGreen(result), 0);
+ QCOMPARE(qBlue(result), 0);
+ QCOMPARE(qAlpha(result), 255);
+
+ testColor = qRgb(255, 255, 255);
+ result = transform.map(testColor);
+ QCOMPARE(qRed(result), 255);
+ QCOMPARE(qGreen(result), 255);
+ QCOMPARE(qBlue(result), 255);
+ QCOMPARE(qAlpha(result), 255);
+
+ testColor = qRgb(255, 255, 0);
+ result = transform.map(testColor);
+ QCOMPARE(qAlpha(result), 255);
+ if (sharesRed)
+ QCOMPARE(qRed(result), 255);
+
+ testColor = qRgb(0, 255, 255);
+ result = transform.map(testColor);
+ QCOMPARE(qBlue(result), 255);
+ QCOMPARE(qAlpha(result), 255);
+}
+
+void tst_QColorTransform::transformIsIdentity()
+{
+ QColorTransform ct;
+ QVERIFY(ct.isIdentity());
+
+ QColorSpace cs = QColorSpace::SRgb;
+ ct = cs.transformationToColorSpace(QColorSpace::SRgb);
+ QVERIFY(ct.isIdentity());
+
+ ct = cs.transformationToColorSpace(QColorSpace::SRgbLinear);
+ QVERIFY(!ct.isIdentity());
+
+ ct = cs.withTransferFunction(QColorSpace::TransferFunction::Linear).transformationToColorSpace(QColorSpace::SRgbLinear);
+ QVERIFY(ct.isIdentity());
+}
+
+QTEST_MAIN(tst_QColorTransform)
+#include "tst_qcolortransform.moc"
diff --git a/tests/auto/gui/painting/qpagelayout/CMakeLists.txt b/tests/auto/gui/painting/qpagelayout/CMakeLists.txt
index 913619461e..b19568592b 100644
--- a/tests/auto/gui/painting/qpagelayout/CMakeLists.txt
+++ b/tests/auto/gui/painting/qpagelayout/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qpagelayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpagelayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpagelayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpagelayout
SOURCES
tst_qpagelayout.cpp
DEFINES
QT_USE_USING_NAMESPACE
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
diff --git a/tests/auto/gui/painting/qpagelayout/tst_qpagelayout.cpp b/tests/auto/gui/painting/qpagelayout/tst_qpagelayout.cpp
index 830e0cd16c..cbbf857357 100644
--- a/tests/auto/gui/painting/qpagelayout/tst_qpagelayout.cpp
+++ b/tests/auto/gui/painting/qpagelayout/tst_qpagelayout.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 John Layt <jlayt@kde.org>
-** 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) 2014 John Layt <jlayt@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtGui/qpagelayout.h>
@@ -37,6 +12,8 @@ private slots:
void invalid();
void basics();
void setGetMargins();
+ void setUnits_data();
+ void setUnits();
};
void tst_QPageLayout::invalid()
@@ -113,12 +90,14 @@ void tst_QPageLayout::basics()
QCOMPARE(tenpoint.margins(QPageLayout::Millimeter), QMarginsF(3.53, 3.53, 3.53, 3.53));
QCOMPARE(tenpoint.marginsPoints(), QMargins(10, 10, 10, 10));
QCOMPARE(tenpoint.marginsPixels(72), QMargins(10, 10, 10, 10));
+ QCOMPARE(tenpoint.marginsPixels(600), QMargins(83, 83, 83, 83));
QCOMPARE(tenpoint.minimumMargins(), QMarginsF(0, 0, 0, 0));
QCOMPARE(tenpoint.maximumMargins(), QMarginsF(595, 842, 595, 842));
QCOMPARE(tenpoint.fullRect(), QRectF(0, 0, 595, 842));
QCOMPARE(tenpoint.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 210, 297));
QCOMPARE(tenpoint.fullRectPoints(), QRect(0, 0, 595, 842));
QCOMPARE(tenpoint.fullRectPixels(72), QRect(0, 0, 595, 842));
+ QCOMPARE(tenpoint.fullRectPixels(600), QRect(0, 0, 4958, 7016));
QCOMPARE(tenpoint.paintRect(), QRectF(10, 10, 575, 822));
QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter), QRectF(3.53, 3.53, 202.94, 289.94));
QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).x(), 3.53);
@@ -131,6 +110,7 @@ void tst_QPageLayout::basics()
QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).bottom(), 293.47);
QCOMPARE(tenpoint.paintRectPoints(), QRect(10, 10, 575, 822));
QCOMPARE(tenpoint.paintRectPixels(72), QRect(10, 10, 575, 822));
+ QCOMPARE(tenpoint.paintRectPixels(600), QRect(83, 83, 4792, 6850));
// Change orientation
tenpoint.setOrientation(QPageLayout::Landscape);
@@ -142,10 +122,12 @@ void tst_QPageLayout::basics()
QCOMPARE(tenpoint.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
QCOMPARE(tenpoint.fullRectPoints(), QRect(0, 0, 842, 595));
QCOMPARE(tenpoint.fullRectPixels(72), QRect(0, 0, 842, 595));
+ QCOMPARE(tenpoint.fullRectPixels(600), QRect(0, 0, 7016, 4958));
QCOMPARE(tenpoint.paintRect(), QRectF(10, 10, 822, 575));
QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter), QRectF(3.53, 3.53, 289.94, 202.94));
QCOMPARE(tenpoint.paintRectPoints(), QRect(10, 10, 822, 575));
QCOMPARE(tenpoint.paintRectPixels(72), QRect(10, 10, 822, 575));
+ QCOMPARE(tenpoint.paintRectPixels(600), QRect(83, 83, 6850, 4792));
// Change mode
QCOMPARE(tenpoint.mode(), QPageLayout::StandardMode);
@@ -159,10 +141,77 @@ void tst_QPageLayout::basics()
QCOMPARE(tenpoint.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
QCOMPARE(tenpoint.fullRectPoints(), QRect(0, 0, 842, 595));
QCOMPARE(tenpoint.fullRectPixels(72), QRect(0, 0, 842, 595));
+ QCOMPARE(tenpoint.fullRectPixels(600), QRect(0, 0, 7016, 4958));
QCOMPARE(tenpoint.paintRect(), QRectF(0, 0, 842, 595));
QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
QCOMPARE(tenpoint.paintRectPoints(), QRect(0, 0, 842, 595));
QCOMPARE(tenpoint.paintRectPixels(72), QRect(0, 0, 842, 595));
+ QCOMPARE(tenpoint.paintRectPixels(600), QRect(0, 0, 7016, 4958));
+
+ // A4, 8.4pt margins
+ QPageLayout fraction = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF(8.4, 8.4, 8.4, 8.4));
+ QCOMPARE(fraction.isValid(), true);
+ QCOMPARE(fraction.margins(), QMarginsF(8.4, 8.4, 8.4, 8.4));
+ QCOMPARE(fraction.margins(QPageLayout::Millimeter), QMarginsF(2.96, 2.96, 2.96, 2.96));
+ QCOMPARE(fraction.marginsPoints(), QMarginsF(8, 8, 8, 8));
+ QCOMPARE(fraction.marginsPixels(72), QMargins(8, 8, 8, 8));
+ QCOMPARE(fraction.marginsPixels(600), QMargins(70, 70, 70, 70));
+ QCOMPARE(fraction.minimumMargins(), QMarginsF(0, 0, 0, 0));
+ QCOMPARE(fraction.maximumMargins(), QMarginsF(595, 842, 595, 842));
+ QCOMPARE(fraction.fullRect(), QRectF(0, 0, 595, 842));
+ QCOMPARE(fraction.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 210, 297));
+ QCOMPARE(fraction.fullRectPoints(), QRect(0, 0, 595, 842));
+ QCOMPARE(fraction.fullRectPixels(72), QRect(0, 0, 595, 842));
+ QCOMPARE(fraction.fullRectPixels(600), QRect(0, 0, 4958, 7016));
+ QCOMPARE(fraction.paintRect(), QRectF(8.4, 8.4, 578.2, 825.2));
+ QCOMPARE(fraction.paintRect(QPageLayout::Millimeter), QRectF(2.96, 2.96, 204.08, 291.08));
+ QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).x(), 2.96);
+ QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).y(), 2.96);
+ QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).width(), 204.08);
+ QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).height(), 291.08);
+ QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).left(), 2.96);
+ QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).right(), 207.04);
+ QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).top(), 2.96);
+ QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).bottom(), 294.04);
+ QCOMPARE(fraction.paintRectPoints(), QRect(8, 8, 579, 826));
+ QCOMPARE(fraction.paintRectPixels(72), QRect(8, 8, 579, 826));
+ QCOMPARE(fraction.paintRectPixels(600), QRect(70, 70, 4818, 6876));
+
+ // Change orientation
+ fraction.setOrientation(QPageLayout::Landscape);
+ QCOMPARE(fraction.orientation(), QPageLayout::Landscape);
+ QCOMPARE(fraction.margins(), QMarginsF(8.4, 8.4, 8.4, 8.4));
+ QCOMPARE(fraction.minimumMargins(), QMarginsF(0, 0, 0, 0));
+ QCOMPARE(fraction.maximumMargins(), QMarginsF(842, 595, 842, 595));
+ QCOMPARE(fraction.fullRect(), QRectF(0, 0, 842, 595));
+ QCOMPARE(fraction.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
+ QCOMPARE(fraction.fullRectPoints(), QRect(0, 0, 842, 595));
+ QCOMPARE(fraction.fullRectPixels(72), QRect(0, 0, 842, 595));
+ QCOMPARE(fraction.fullRectPixels(600), QRect(0, 0, 7016, 4958));
+ QCOMPARE(fraction.paintRect(), QRectF(8.4, 8.4, 825.2, 578.2));
+ QCOMPARE(fraction.paintRect(QPageLayout::Millimeter), QRectF(2.96, 2.96, 291.08, 204.08));
+ QCOMPARE(fraction.paintRectPoints(), QRect(8, 8, 826, 579));
+ QCOMPARE(fraction.paintRectPixels(72), QRect(8, 8, 826, 579));
+ QCOMPARE(fraction.paintRectPixels(600), QRect(70, 70, 6876, 4818));
+
+ // Change mode
+ QCOMPARE(fraction.mode(), QPageLayout::StandardMode);
+ fraction.setMode(QPageLayout::FullPageMode);
+ QCOMPARE(fraction.mode(), QPageLayout::FullPageMode);
+ QCOMPARE(fraction.orientation(), QPageLayout::Landscape);
+ QCOMPARE(fraction.margins(), QMarginsF(8.4, 8.4, 8.4, 8.4));
+ QCOMPARE(fraction.minimumMargins(), QMarginsF(0, 0, 0, 0));
+ QCOMPARE(fraction.maximumMargins(), QMarginsF(842, 595, 842, 595));
+ QCOMPARE(fraction.fullRect(), QRectF(0, 0, 842, 595));
+ QCOMPARE(fraction.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
+ QCOMPARE(fraction.fullRectPoints(), QRect(0, 0, 842, 595));
+ QCOMPARE(fraction.fullRectPixels(72), QRect(0, 0, 842, 595));
+ QCOMPARE(fraction.fullRectPixels(600), QRect(0, 0, 7016, 4958));
+ QCOMPARE(fraction.paintRect(), QRectF(0, 0, 842, 595));
+ QCOMPARE(fraction.paintRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
+ QCOMPARE(fraction.paintRectPoints(), QRect(0, 0, 842, 595));
+ QCOMPARE(fraction.paintRectPixels(72), QRect(0, 0, 842, 595));
+ QCOMPARE(fraction.paintRectPixels(600), QRect(0, 0, 7016, 4958));
}
void tst_QPageLayout::setGetMargins()
@@ -263,6 +312,54 @@ void tst_QPageLayout::setGetMargins()
QCOMPARE(fullPage.maximumMargins(), max);
}
+void tst_QPageLayout::setUnits_data()
+{
+ QTest::addColumn<QPageLayout::Unit>("units");
+ QTest::newRow("Millimeter") << QPageLayout::Millimeter;
+ QTest::newRow("Point") << QPageLayout::Point;
+ QTest::newRow("Inch") << QPageLayout::Inch;
+ QTest::newRow("Pica") << QPageLayout::Pica;
+ QTest::newRow("Didot") << QPageLayout::Didot;
+ QTest::newRow("Cicero") << QPageLayout::Cicero;
+}
+
+void tst_QPageLayout::setUnits()
+{
+ QFETCH(QPageLayout::Unit, units);
+ QPageLayout pageLayout = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF(), units);
+ int maxLeftX100 = qFloor(pageLayout.maximumMargins().left() * 100);
+ QVERIFY(maxLeftX100 > 0);
+ for (int i = 1; i <= maxLeftX100; ++i) {
+ const qreal margin = i / 100.;
+ const QMarginsF unitsMargins = QMarginsF(margin, margin, margin, margin);
+ pageLayout.setMargins(unitsMargins);
+ pageLayout.setUnits(QPageLayout::Point);
+ const QMarginsF pointsMargins = pageLayout.margins();
+ if (units == QPageLayout::Point) {
+ QCOMPARE(pointsMargins, unitsMargins);
+ } else {
+ QCOMPARE_GT(pointsMargins.left(), unitsMargins.left());
+ QCOMPARE_GT(pointsMargins.top(), unitsMargins.top());
+ QCOMPARE_GT(pointsMargins.right(), unitsMargins.right());
+ QCOMPARE_GT(pointsMargins.bottom(), unitsMargins.bottom());
+ }
+ pageLayout.setUnits(units);
+ const QMarginsF convertedUnitsMargins = pageLayout.margins();
+ if (units == QPageLayout::Didot) {
+ // When using Didot units, the small multiplier and ceiling function in conversion
+ // may cause the converted units to not match the original exactly. However, we
+ // can verify that the converted margins are always greater than or equal to the
+ // original.
+ QCOMPARE_GE(convertedUnitsMargins.left(), unitsMargins.left());
+ QCOMPARE_GE(convertedUnitsMargins.top(), unitsMargins.top());
+ QCOMPARE_GE(convertedUnitsMargins.right(), unitsMargins.right());
+ QCOMPARE_GE(convertedUnitsMargins.bottom(), unitsMargins.bottom());
+ } else {
+ QCOMPARE(convertedUnitsMargins, unitsMargins);
+ }
+ }
+}
+
QTEST_APPLESS_MAIN(tst_QPageLayout)
#include "tst_qpagelayout.moc"
diff --git a/tests/auto/gui/painting/qpageranges/CMakeLists.txt b/tests/auto/gui/painting/qpageranges/CMakeLists.txt
index 660d4b4336..99ab477eae 100644
--- a/tests/auto/gui/painting/qpageranges/CMakeLists.txt
+++ b/tests/auto/gui/painting/qpageranges/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qpageranges.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpageranges Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpageranges LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpageranges
SOURCES
tst_qpageranges.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/painting/qpageranges/tst_qpageranges.cpp b/tests/auto/gui/painting/qpageranges/tst_qpageranges.cpp
index 4912aa43c1..d2dbf990e3 100644
--- a/tests/auto/gui/painting/qpageranges/tst_qpageranges.cpp
+++ b/tests/auto/gui/painting/qpageranges/tst_qpageranges.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <qpageranges.h>
@@ -95,7 +70,7 @@ void tst_QPageRanges::addPage()
QFETCH(PageRangeList, expected);
QPageRanges result;
- for (int pageNumber : qAsConst(pageNumbers)) {
+ for (int pageNumber : std::as_const(pageNumbers)) {
if (QByteArrayView(QTest::currentDataTag()) == "invalid")
QTest::ignoreMessage(QtWarningMsg, "QPageRanges::addPage: 'pageNumber' must be greater than 0");
result.addPage(pageNumber);
@@ -137,7 +112,7 @@ void tst_QPageRanges::addRange()
QFETCH(PageRangeList, expected);
QPageRanges result;
- for (const auto &range : qAsConst(ranges)) {
+ for (const auto &range : std::as_const(ranges)) {
const QByteArrayView testdata(QTest::currentDataTag());
if (testdata.startsWith("invalid"))
QTest::ignoreMessage(QtWarningMsg, "QPageRanges::addRange: 'from' and 'to' must be greater than 0");
diff --git a/tests/auto/gui/painting/qpagesize/CMakeLists.txt b/tests/auto/gui/painting/qpagesize/CMakeLists.txt
index fc6fd931c2..b16cd2714a 100644
--- a/tests/auto/gui/painting/qpagesize/CMakeLists.txt
+++ b/tests/auto/gui/painting/qpagesize/CMakeLists.txt
@@ -1,14 +1,21 @@
-# Generated from qpagesize.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpagesize Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpagesize LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpagesize
SOURCES
tst_qpagesize.cpp
DEFINES
QT_USE_USING_NAMESPACE
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/painting/qpagesize/tst_qpagesize.cpp b/tests/auto/gui/painting/qpagesize/tst_qpagesize.cpp
index 838f7e59cd..de9b799902 100644
--- a/tests/auto/gui/painting/qpagesize/tst_qpagesize.cpp
+++ b/tests/auto/gui/painting/qpagesize/tst_qpagesize.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 <QTest>
#include <QtGlobal>
@@ -74,11 +49,13 @@ void tst_QPageSize::basics()
QCOMPARE(a4.size(QPageSize::Pica), QSizeF(49.58, 70.17));
QCOMPARE(a4.sizePoints(), QSize(595, 842));
QCOMPARE(a4.sizePixels(72), QSize(595, 842));
+ QCOMPARE(a4.sizePixels(600), QSize(4958, 7016)); // Rounded down
QCOMPARE(a4.rect(QPageSize::Millimeter), QRectF(0, 0, 210, 297));
QCOMPARE(a4.rect(QPageSize::Inch), QRectF(0, 0, 8.27, 11.69));
QCOMPARE(a4.rect(QPageSize::Pica), QRectF(0, 0, 49.58, 70.17));
QCOMPARE(a4.rectPoints(), QRect(0, 0, 595, 842));
QCOMPARE(a4.rectPixels(72), QRect(0, 0, 595, 842));
+ QCOMPARE(a4.rectPixels(600), QRect(0, 0, 4958, 7016)); // Rounded down
// Simple QPageSize::PaperSizeId later in list
QPageSize folio = QPageSize(QPageSize::Folio);
diff --git a/tests/auto/gui/painting/qpaintengine/CMakeLists.txt b/tests/auto/gui/painting/qpaintengine/CMakeLists.txt
index b843135645..4cd0151a01 100644
--- a/tests/auto/gui/painting/qpaintengine/CMakeLists.txt
+++ b/tests/auto/gui/painting/qpaintengine/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qpaintengine.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpaintengine Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpaintengine LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpaintengine
SOURCES
tst_qpaintengine.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/painting/qpaintengine/tst_qpaintengine.cpp b/tests/auto/gui/painting/qpaintengine/tst_qpaintengine.cpp
index 4363799702..02441de54c 100644
--- a/tests/auto/gui/painting/qpaintengine/tst_qpaintengine.cpp
+++ b/tests/auto/gui/painting/qpaintengine/tst_qpaintengine.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 <QTest>
diff --git a/tests/auto/gui/painting/qpainter/CMakeLists.txt b/tests/auto/gui/painting/qpainter/CMakeLists.txt
index 9466dddadd..261e1eb2cf 100644
--- a/tests/auto/gui/painting/qpainter/CMakeLists.txt
+++ b/tests/auto/gui/painting/qpainter/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qpainter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpainter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpainter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -26,7 +33,7 @@ list(APPEND test_data "task217400.png")
qt_internal_add_test(tst_qpainter
SOURCES
tst_qpainter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -37,202 +44,7 @@ qt_internal_add_test(tst_qpainter
#####################################################################
qt_internal_extend_target(tst_qpainter CONDITION TARGET Qt::Widgets
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
Qt::WidgetsPrivate
)
-
-if(ANDROID)
- # Resources:
- set(testdata_resource_files
- "drawEllipse/10x10SizeAt0x0.png"
- "drawEllipse/10x10SizeAt100x100.png"
- "drawEllipse/10x10SizeAt200x200.png"
- "drawEllipse/13x100SizeAt0x0.png"
- "drawEllipse/13x100SizeAt100x100.png"
- "drawEllipse/13x100SizeAt200x200.png"
- "drawEllipse/200x200SizeAt0x0.png"
- "drawEllipse/200x200SizeAt100x100.png"
- "drawEllipse/200x200SizeAt200x200.png"
- "drawLine_rop_bitmap/dst.xbm"
- "drawLine_rop_bitmap/res/res_AndNotROP.xbm"
- "drawLine_rop_bitmap/res/res_AndROP.xbm"
- "drawLine_rop_bitmap/res/res_ClearROP.xbm"
- "drawLine_rop_bitmap/res/res_CopyROP.xbm"
- "drawLine_rop_bitmap/res/res_NandROP.xbm"
- "drawLine_rop_bitmap/res/res_NopROP.xbm"
- "drawLine_rop_bitmap/res/res_NorROP.xbm"
- "drawLine_rop_bitmap/res/res_NotAndROP.xbm"
- "drawLine_rop_bitmap/res/res_NotCopyROP.xbm"
- "drawLine_rop_bitmap/res/res_NotOrROP.xbm"
- "drawLine_rop_bitmap/res/res_NotROP.xbm"
- "drawLine_rop_bitmap/res/res_NotXorROP.xbm"
- "drawLine_rop_bitmap/res/res_OrNotROP.xbm"
- "drawLine_rop_bitmap/res/res_OrROP.xbm"
- "drawLine_rop_bitmap/res/res_SetROP.xbm"
- "drawLine_rop_bitmap/res/res_XorROP.xbm"
- "drawPixmap_rop/dst1.png"
- "drawPixmap_rop/dst2.png"
- "drawPixmap_rop/dst3.png"
- "drawPixmap_rop/res/res_AndNotROP0.png"
- "drawPixmap_rop/res/res_AndNotROP1.png"
- "drawPixmap_rop/res/res_AndNotROP2.png"
- "drawPixmap_rop/res/res_AndNotROP3.png"
- "drawPixmap_rop/res/res_AndNotROP4.png"
- "drawPixmap_rop/res/res_AndNotROP5.png"
- "drawPixmap_rop/res/res_AndNotROP6.png"
- "drawPixmap_rop/res/res_AndNotROP7.png"
- "drawPixmap_rop/res/res_AndROP0.png"
- "drawPixmap_rop/res/res_AndROP1.png"
- "drawPixmap_rop/res/res_AndROP2.png"
- "drawPixmap_rop/res/res_AndROP3.png"
- "drawPixmap_rop/res/res_AndROP4.png"
- "drawPixmap_rop/res/res_AndROP5.png"
- "drawPixmap_rop/res/res_AndROP6.png"
- "drawPixmap_rop/res/res_AndROP7.png"
- "drawPixmap_rop/res/res_ClearROP0.png"
- "drawPixmap_rop/res/res_ClearROP1.png"
- "drawPixmap_rop/res/res_ClearROP2.png"
- "drawPixmap_rop/res/res_ClearROP3.png"
- "drawPixmap_rop/res/res_ClearROP4.png"
- "drawPixmap_rop/res/res_ClearROP5.png"
- "drawPixmap_rop/res/res_ClearROP6.png"
- "drawPixmap_rop/res/res_ClearROP7.png"
- "drawPixmap_rop/res/res_CopyROP0.png"
- "drawPixmap_rop/res/res_CopyROP1.png"
- "drawPixmap_rop/res/res_CopyROP2.png"
- "drawPixmap_rop/res/res_CopyROP3.png"
- "drawPixmap_rop/res/res_CopyROP4.png"
- "drawPixmap_rop/res/res_CopyROP5.png"
- "drawPixmap_rop/res/res_CopyROP6.png"
- "drawPixmap_rop/res/res_CopyROP7.png"
- "drawPixmap_rop/res/res_NandROP0.png"
- "drawPixmap_rop/res/res_NandROP1.png"
- "drawPixmap_rop/res/res_NandROP2.png"
- "drawPixmap_rop/res/res_NandROP3.png"
- "drawPixmap_rop/res/res_NandROP4.png"
- "drawPixmap_rop/res/res_NandROP5.png"
- "drawPixmap_rop/res/res_NandROP6.png"
- "drawPixmap_rop/res/res_NandROP7.png"
- "drawPixmap_rop/res/res_NopROP0.png"
- "drawPixmap_rop/res/res_NopROP1.png"
- "drawPixmap_rop/res/res_NopROP2.png"
- "drawPixmap_rop/res/res_NopROP3.png"
- "drawPixmap_rop/res/res_NopROP4.png"
- "drawPixmap_rop/res/res_NopROP5.png"
- "drawPixmap_rop/res/res_NopROP6.png"
- "drawPixmap_rop/res/res_NopROP7.png"
- "drawPixmap_rop/res/res_NorROP0.png"
- "drawPixmap_rop/res/res_NorROP1.png"
- "drawPixmap_rop/res/res_NorROP2.png"
- "drawPixmap_rop/res/res_NorROP3.png"
- "drawPixmap_rop/res/res_NorROP4.png"
- "drawPixmap_rop/res/res_NorROP5.png"
- "drawPixmap_rop/res/res_NorROP6.png"
- "drawPixmap_rop/res/res_NorROP7.png"
- "drawPixmap_rop/res/res_NotAndROP0.png"
- "drawPixmap_rop/res/res_NotAndROP1.png"
- "drawPixmap_rop/res/res_NotAndROP2.png"
- "drawPixmap_rop/res/res_NotAndROP3.png"
- "drawPixmap_rop/res/res_NotAndROP4.png"
- "drawPixmap_rop/res/res_NotAndROP5.png"
- "drawPixmap_rop/res/res_NotAndROP6.png"
- "drawPixmap_rop/res/res_NotAndROP7.png"
- "drawPixmap_rop/res/res_NotCopyROP0.png"
- "drawPixmap_rop/res/res_NotCopyROP1.png"
- "drawPixmap_rop/res/res_NotCopyROP2.png"
- "drawPixmap_rop/res/res_NotCopyROP3.png"
- "drawPixmap_rop/res/res_NotCopyROP4.png"
- "drawPixmap_rop/res/res_NotCopyROP5.png"
- "drawPixmap_rop/res/res_NotCopyROP6.png"
- "drawPixmap_rop/res/res_NotCopyROP7.png"
- "drawPixmap_rop/res/res_NotOrROP0.png"
- "drawPixmap_rop/res/res_NotOrROP1.png"
- "drawPixmap_rop/res/res_NotOrROP2.png"
- "drawPixmap_rop/res/res_NotOrROP3.png"
- "drawPixmap_rop/res/res_NotOrROP4.png"
- "drawPixmap_rop/res/res_NotOrROP5.png"
- "drawPixmap_rop/res/res_NotOrROP6.png"
- "drawPixmap_rop/res/res_NotOrROP7.png"
- "drawPixmap_rop/res/res_NotROP0.png"
- "drawPixmap_rop/res/res_NotROP1.png"
- "drawPixmap_rop/res/res_NotROP2.png"
- "drawPixmap_rop/res/res_NotROP3.png"
- "drawPixmap_rop/res/res_NotROP4.png"
- "drawPixmap_rop/res/res_NotROP5.png"
- "drawPixmap_rop/res/res_NotROP6.png"
- "drawPixmap_rop/res/res_NotROP7.png"
- "drawPixmap_rop/res/res_NotXorROP0.png"
- "drawPixmap_rop/res/res_NotXorROP1.png"
- "drawPixmap_rop/res/res_NotXorROP2.png"
- "drawPixmap_rop/res/res_NotXorROP3.png"
- "drawPixmap_rop/res/res_NotXorROP4.png"
- "drawPixmap_rop/res/res_NotXorROP5.png"
- "drawPixmap_rop/res/res_NotXorROP6.png"
- "drawPixmap_rop/res/res_NotXorROP7.png"
- "drawPixmap_rop/res/res_OrNotROP0.png"
- "drawPixmap_rop/res/res_OrNotROP1.png"
- "drawPixmap_rop/res/res_OrNotROP2.png"
- "drawPixmap_rop/res/res_OrNotROP3.png"
- "drawPixmap_rop/res/res_OrNotROP4.png"
- "drawPixmap_rop/res/res_OrNotROP5.png"
- "drawPixmap_rop/res/res_OrNotROP6.png"
- "drawPixmap_rop/res/res_OrNotROP7.png"
- "drawPixmap_rop/res/res_OrROP0.png"
- "drawPixmap_rop/res/res_OrROP1.png"
- "drawPixmap_rop/res/res_OrROP2.png"
- "drawPixmap_rop/res/res_OrROP3.png"
- "drawPixmap_rop/res/res_OrROP4.png"
- "drawPixmap_rop/res/res_OrROP5.png"
- "drawPixmap_rop/res/res_OrROP6.png"
- "drawPixmap_rop/res/res_OrROP7.png"
- "drawPixmap_rop/res/res_SetROP0.png"
- "drawPixmap_rop/res/res_SetROP1.png"
- "drawPixmap_rop/res/res_SetROP2.png"
- "drawPixmap_rop/res/res_SetROP3.png"
- "drawPixmap_rop/res/res_SetROP4.png"
- "drawPixmap_rop/res/res_SetROP5.png"
- "drawPixmap_rop/res/res_SetROP6.png"
- "drawPixmap_rop/res/res_SetROP7.png"
- "drawPixmap_rop/res/res_XorROP0.png"
- "drawPixmap_rop/res/res_XorROP1.png"
- "drawPixmap_rop/res/res_XorROP2.png"
- "drawPixmap_rop/res/res_XorROP3.png"
- "drawPixmap_rop/res/res_XorROP4.png"
- "drawPixmap_rop/res/res_XorROP5.png"
- "drawPixmap_rop/res/res_XorROP6.png"
- "drawPixmap_rop/res/res_XorROP7.png"
- "drawPixmap_rop/src1.xbm"
- "drawPixmap_rop/src2-mask.xbm"
- "drawPixmap_rop/src2.xbm"
- "drawPixmap_rop/src3.xbm"
- "drawPixmap_rop_bitmap/dst.xbm"
- "drawPixmap_rop_bitmap/res/res_AndNotROP.xbm"
- "drawPixmap_rop_bitmap/res/res_AndROP.xbm"
- "drawPixmap_rop_bitmap/res/res_ClearROP.xbm"
- "drawPixmap_rop_bitmap/res/res_CopyROP.xbm"
- "drawPixmap_rop_bitmap/res/res_NandROP.xbm"
- "drawPixmap_rop_bitmap/res/res_NopROP.xbm"
- "drawPixmap_rop_bitmap/res/res_NorROP.xbm"
- "drawPixmap_rop_bitmap/res/res_NotAndROP.xbm"
- "drawPixmap_rop_bitmap/res/res_NotCopyROP.xbm"
- "drawPixmap_rop_bitmap/res/res_NotOrROP.xbm"
- "drawPixmap_rop_bitmap/res/res_NotROP.xbm"
- "drawPixmap_rop_bitmap/res/res_NotXorROP.xbm"
- "drawPixmap_rop_bitmap/res/res_OrNotROP.xbm"
- "drawPixmap_rop_bitmap/res/res_OrROP.xbm"
- "drawPixmap_rop_bitmap/res/res_SetROP.xbm"
- "drawPixmap_rop_bitmap/res/res_XorROP.xbm"
- "drawPixmap_rop_bitmap/src1-mask.xbm"
- "drawPixmap_rop_bitmap/src1.xbm"
- "drawPixmap_rop_bitmap/src2.xbm"
- "task217400.png"
- )
-
- qt_internal_add_resource(tst_qpainter "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
- )
-endif()
diff --git a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
index cfcaf5b67e..92b28f65bd 100644
--- a/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
+++ b/tests/auto/gui/painting/qpainter/tst_qpainter.cpp
@@ -1,31 +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 <QTest>
#include <qpainter.h>
@@ -69,6 +43,9 @@ Q_OBJECT
public:
tst_QPainter();
+ enum ClipType { ClipRect, ClipRectF, ClipRegionSingle, ClipRegionMulti, ClipPathR, ClipPath };
+ Q_ENUM(ClipType);
+
private slots:
void cleanupTestCase();
void getSetCheck();
@@ -84,6 +61,7 @@ private slots:
#endif
void drawPixmapFragments();
void drawPixmapNegativeScale();
+ void drawPixmapRounding();
void drawLine_data();
void drawLine();
@@ -155,6 +133,8 @@ private slots:
void clipBoundingRect();
void transformedClip();
+ void scaledClipConsistency_data();
+ void scaledClipConsistency();
void setOpacity_data();
void setOpacity();
@@ -190,6 +170,7 @@ private slots:
void radialGradientRgb30();
#endif
+ void radialGradient_QTBUG120332_ubsan();
void fpe_pixmapTransform();
void fpe_zeroLengthLines();
void fpe_divByZero();
@@ -767,6 +748,16 @@ void tst_QPainter::drawPixmapNegativeScale()
QVERIFY(resultImage.pixel(12, 8) == qRgba(0, 0, 0, 255)); // and right strip is now black
}
+void tst_QPainter::drawPixmapRounding()
+{
+ // Just test that we don't assert
+ QBitmap bm(8, 8);
+ QImage out(64, 64, QImage::Format_RGB32);
+ QPainter p(&out);
+ qreal y = 26.499999999999996;
+ p.drawPixmap(QPointF(0, y), bm);
+}
+
void tst_QPainter::drawLine_data()
{
QTest::addColumn<QLine>("line");
@@ -1752,10 +1743,11 @@ void tst_QPainter::setClipRect()
/*
Verify that the clipping works correctly.
- The red outline should be covered by the blue rect on top and left,
- while it should be clipped on the right and bottom and thus the red outline be visible
+ Just like fillRect, cliprect should snap rightwards and downwards in case of .5 coordinates.
+ The red outline should be covered by the blue rect on top,
+ while it should be clipped on the other edges and thus the red outline be visible
- See: QTBUG-83229
+ See: QTBUG-83229, modified by QTBUG-100329
*/
void tst_QPainter::clipRect()
{
@@ -1781,7 +1773,7 @@ void tst_QPainter::clipRect()
p.end();
QCOMPARE(image.pixelColor(clipRect.left() + 1, clipRect.top()), QColor(Qt::blue));
- QCOMPARE(image.pixelColor(clipRect.left(), clipRect.top() + 1), QColor(Qt::blue));
+ QCOMPARE(image.pixelColor(clipRect.left(), clipRect.top() + 1), QColor(Qt::red));
QCOMPARE(image.pixelColor(clipRect.left() + 1, clipRect.bottom()), QColor(Qt::red));
QCOMPARE(image.pixelColor(clipRect.right(), clipRect.top() + 1), QColor(Qt::red));
}
@@ -2101,21 +2093,22 @@ void tst_QPainter::clippedLines_data()
QPen pen2(QColor(223, 223, 0, 223));
pen2.setWidth(2);
- QList<QLineF> lines;
- lines << QLineF(15, 15, 65, 65)
- << QLineF(14, 14, 66, 66)
- << QLineF(16, 16, 64, 64)
- << QLineF(65, 65, 15, 15)
- << QLineF(66, 66, 14, 14)
- << QLineF(64, 64, 14, 14)
- << QLineF(15, 50, 15, 64)
- << QLineF(15, 50, 15, 65)
- << QLineF(15, 50, 15, 66)
- << QLineF(15, 50, 64, 50)
- << QLineF(15, 50, 65, 50)
- << QLineF(15, 50, 66, 50);
-
- foreach (QLineF line, lines) {
+ const auto lines = {
+ QLineF(15, 15, 65, 65),
+ QLineF(14, 14, 66, 66),
+ QLineF(16, 16, 64, 64),
+ QLineF(65, 65, 15, 15),
+ QLineF(66, 66, 14, 14),
+ QLineF(64, 64, 14, 14),
+ QLineF(15, 50, 15, 64),
+ QLineF(15, 50, 15, 65),
+ QLineF(15, 50, 15, 66),
+ QLineF(15, 50, 64, 50),
+ QLineF(15, 50, 65, 50),
+ QLineF(15, 50, 66, 50),
+ };
+
+ for (QLineF line : lines) {
const QByteArray desc = "line (" + QByteArray::number(line.x1())
+ ", " + QByteArray::number(line.y1()) + ", "
+ QByteArray::number(line.x2()) + ", " + QByteArray::number(line.y2())
@@ -2516,6 +2509,12 @@ void tst_QPainter::drawhelper_blend_untransformed_data()
setOpacity_data();
}
+static const auto &defaultOpacities()
+{
+ static const std::array opacities = {qreal(0.0), 0.1 , 0.01, 0.4, 0.5, 0.6, 0.9, 1.0};
+ return opacities;
+}
+
void tst_QPainter::drawhelper_blend_untransformed()
{
QFETCH(QImage::Format, destFormat);
@@ -2536,9 +2535,7 @@ void tst_QPainter::drawhelper_blend_untransformed()
p.fillRect(paintRect, srcColor);
p.end();
- QList<qreal> opacities = (QList<qreal>() << 0.0 << 0.1 << 0.01 << 0.4
- << 0.5 << 0.6 << 0.9 << 1.0);
- foreach (qreal opacity, opacities) {
+ for (qreal opacity : defaultOpacities()) {
p.begin(&dest);
p.fillRect(paintRect, destColor);
@@ -2593,9 +2590,7 @@ void tst_QPainter::drawhelper_blend_tiled_untransformed()
const QBrush brush(src);
- QList<qreal> opacities = (QList<qreal>() << 0.0 << 0.1 << 0.01 << 0.4
- << 0.5 << 0.6 << 0.9 << 1.0);
- foreach (qreal opacity, opacities) {
+ for (qreal opacity : defaultOpacities()) {
p.begin(&dest);
p.fillRect(paintRect, destColor);
@@ -2789,7 +2784,7 @@ void tst_QPainter::monoImages()
for (int i = 1; i < QImage::NImageFormats; ++i) {
for (int j = 0; j < numColorPairs; ++j) {
const QImage::Format format = QImage::Format(i);
- if (format == QImage::Format_Indexed8)
+ if (format == QImage::Format_Indexed8 || format == QImage::Format_CMYK8888)
continue;
QImage img(2, 2, format);
@@ -2849,7 +2844,14 @@ void tst_QPainter::monoImages()
}
}
-#if !defined(Q_OS_AIX) && !defined(Q_CC_MSVC) && !defined(Q_OS_SOLARIS) && !defined(__UCLIBC__) && !defined(Q_OS_INTEGRITY)
+#if defined(Q_OS_DARWIN) || defined(Q_OS_FREEBSD) || defined(Q_OS_ANDROID)
+# define TEST_FPE_EXCEPTIONS
+#elif defined(Q_OS_LINUX) && defined(__GLIBC__)
+# define TEST_FPE_EXCEPTIONS
+#elif defined(Q_OS_WIN) && defined(Q_CC_GNU)
+# define TEST_FPE_EXCEPTIONS
+#endif
+#ifdef TEST_FPE_EXCEPTIONS
#include <fenv.h>
static const QString fpeExceptionString(int exception)
@@ -3552,9 +3554,13 @@ void tst_QPainter::drawImage_data()
for (int srcFormat = QImage::Format_Mono; srcFormat < QImage::NImageFormats; ++srcFormat) {
for (int dstFormat = QImage::Format_Mono; dstFormat < QImage::NImageFormats; ++dstFormat) {
- // Indexed8 can't be painted to, and Alpha8 can't hold a color.
- if (dstFormat == QImage::Format_Indexed8 || dstFormat == QImage::Format_Alpha8)
+ // Indexed8 and CMYK8888 can't be painted to, and Alpha8 can't hold a color.
+ if (dstFormat == QImage::Format_Indexed8 ||
+ dstFormat == QImage::Format_CMYK8888 ||
+ dstFormat == QImage::Format_Alpha8) {
continue;
+ }
+
for (int odd_x = 0; odd_x <= 1; ++odd_x) {
for (int odd_width = 0; odd_width <= 1; ++odd_width) {
QTest::addRow("srcFormat %d, dstFormat %d, odd x: %d, odd width: %d",
@@ -3797,10 +3803,10 @@ static QLinearGradient inverseGradient(QLinearGradient g)
{
QLinearGradient g2 = g;
- QGradientStops stops = g.stops();
+ const QGradientStops stops = g.stops();
QGradientStops inverse;
- foreach (QGradientStop stop, stops)
+ for (const QGradientStop &stop : stops)
inverse << QGradientStop(1 - stop.first, stop.second);
g2.setStops(inverse);
@@ -3906,6 +3912,21 @@ void tst_QPainter::gradientPixelFormat()
QCOMPARE(a, b.convertToFormat(QImage::Format_ARGB32_Premultiplied));
}
+void tst_QPainter::radialGradient_QTBUG120332_ubsan()
+{
+ // Check if Radial Gradient will cause division by zero or not when
+ // the center point coincide with the focal point.
+ QImage image(8, 8, QImage::Format_ARGB32_Premultiplied);
+ QPainter painter(&image);
+
+ QPointF center(0.5, 0.5);
+ QPointF focal(0.5, 0.5);
+ QRadialGradient gradient(center, 0.5, focal, 0.5);
+ gradient.setColorAt(0, Qt::blue);
+ gradient.setColorAt(1, Qt::red);
+ painter.fillRect(image.rect(), QBrush(gradient));
+}
+
void tst_QPainter::gradientInterpolation()
{
QImage image(256, 8, QImage::Format_ARGB32_Premultiplied);
@@ -4583,6 +4604,96 @@ void tst_QPainter::transformedClip()
}
}
+void tst_QPainter::scaledClipConsistency_data()
+{
+ QTest::addColumn<ClipType>("clipType");
+
+ QTest::newRow("clipRect") << ClipRect;
+ QTest::newRow("clipRectF") << ClipRectF;
+ QTest::newRow("clipRegionSingle") << ClipRegionSingle;
+ QTest::newRow("clipRegionMulti") << ClipRegionMulti;
+ QTest::newRow("clipPathR") << ClipPathR;
+ QTest::newRow("clipPath") << ClipPath;
+}
+
+void tst_QPainter::scaledClipConsistency()
+{
+ QFETCH(ClipType, clipType);
+
+ const QList<QRect> clipRects = {
+ // Varying odd and even coordinates and width/height
+ QRect(1, 1, 7, 8),
+ QRect(8, 0, 8, 9),
+ QRect(0, 9, 8, 7),
+ QRect(8, 9, 8, 7),
+ };
+ // Assert that these are edge to edge:
+ QPointF center = QRectF(clipRects[0]).bottomRight();
+ Q_ASSERT(QRectF(clipRects[1]).bottomLeft() == center);
+ Q_ASSERT(QRectF(clipRects[2]).topRight() == center);
+ Q_ASSERT(QRectF(clipRects[3]).topLeft() == center);
+
+ QRegion multiRegion;
+ for (const QRect &clipRect : clipRects)
+ multiRegion += clipRect;
+
+ QColor fillColor(Qt::black);
+ fillColor.setAlphaF(0.5);
+
+ for (int i = 100; i <= 300; i++) {
+ qreal dpr = qreal(i) / 100.0;
+ QImage img(QSize(16, 16) * dpr, QImage::Format_RGB32);
+ img.fill(Qt::white);
+ img.setDevicePixelRatio(dpr);
+
+ for (const QRect &clipRect : clipRects) {
+ QPainter p(&img);
+ switch (clipType) {
+ case ClipRect:
+ p.setClipRect(clipRect);
+ break;
+ case ClipRectF:
+ p.setClipRect(QRectF(clipRect));
+ break;
+ case ClipRegionSingle:
+ p.setClipRegion(QRegion(clipRect));
+ break;
+ case ClipRegionMulti:
+ p.setClipRegion(multiRegion);
+ break;
+ case ClipPath:
+ p.rotate(0.001); // Avoid the path being optimized to a rectf
+ Q_FALLTHROUGH();
+ case ClipPathR: {
+ QPainterPath path;
+ path.addRect(clipRect); // Will be recognized and converted back to a rectf
+ p.setClipPath(path);
+ break;
+ }
+ default:
+ Q_ASSERT(false);
+ break;
+ }
+ p.fillRect(p.window(), fillColor);
+ if (clipType == ClipRegionMulti)
+ break; // once is enough, we're not using the clipRect anyway
+ }
+
+ int qtWidth = img.width() / 4;
+ int qtHeight = img.height() / 4;
+ QPoint imgCenter = img.rect().center();
+ const QRgb targetColor = img.pixel(qtWidth, qtHeight);
+
+ // Test that there are no gaps or overlaps where the cliprects meet
+ for (int offset = -2; offset <= 2; offset++) {
+ QCOMPARE(img.pixel(imgCenter.x() + offset, qtHeight), targetColor);
+ QCOMPARE(img.pixel(imgCenter.x() + offset, img.height() - qtHeight), targetColor);
+ QCOMPARE(img.pixel(qtWidth, imgCenter.y() + offset), targetColor);
+ QCOMPARE(img.pixel(img.width() - qtWidth, imgCenter.y() + offset), targetColor);
+ }
+ }
+}
+
#if defined(Q_OS_MAC)
// Only Mac supports sub pixel positions in raster engine currently
void tst_QPainter::drawText_subPixelPositionsInRaster_qtbug5053()
@@ -4819,10 +4930,7 @@ void tst_QPainter::QTBUG25153_drawLine()
{
QImage image(2, 2, QImage::Format_RGB32);
- QList<Qt::PenCapStyle> styles;
- styles << Qt::FlatCap << Qt::SquareCap << Qt::RoundCap;
-
- foreach (Qt::PenCapStyle style, styles) {
+ for (Qt::PenCapStyle style : {Qt::FlatCap, Qt::SquareCap, Qt::RoundCap}) {
image.fill(0xffffffff);
QPainter p(&image);
p.setPen(QPen(Qt::black, 0, Qt::SolidLine, style));
@@ -4933,16 +5041,16 @@ void tst_QPainter::blendARGBonRGB_data()
QTest::newRow("ARGB_PM over RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32_Premultiplied
<< QPainter::CompositionMode_SourceOver << qRgba(85, 0, 0, 85) << 85;
#if QT_CONFIG(raster_64bit)
- QTest::newRow("ARGB source RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32
- << QPainter::CompositionMode_Source << qRgba(255, 0, 0, 85) << 85;
- QTest::newRow("ARGB source RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32
- << QPainter::CompositionMode_Source << qRgba(255, 0, 0, 120) << 85;
+ QTest::newRow("ARGB@85 source RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32
+ << QPainter::CompositionMode_Source << qRgba(255, 0, 0, 85) << 85;
+ QTest::newRow("ARGB@120 source RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32
+ << QPainter::CompositionMode_Source << qRgba(255, 0, 0, 120) << 85;
#endif
- QTest::newRow("ARGB_PM source RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32_Premultiplied
- << QPainter::CompositionMode_Source << qRgba(85, 0, 0, 85) << 85;
+ QTest::newRow("ARGB_PM@85 source RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32_Premultiplied
+ << QPainter::CompositionMode_Source << qRgba(85, 0, 0, 85) << 85;
#if QT_CONFIG(raster_64bit)
- QTest::newRow("ARGB_PM source RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32_Premultiplied
- << QPainter::CompositionMode_Source << qRgba(180, 0, 0, 180) << 170;
+ QTest::newRow("ARGB_PM@180 source RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32_Premultiplied
+ << QPainter::CompositionMode_Source << qRgba(180, 0, 0, 180) << 170;
#endif
QTest::newRow("ARGB source-in RGB30") << QImage::Format_RGB30 << QImage::Format_ARGB32
<< QPainter::CompositionMode_SourceIn << qRgba(255, 0, 0, 85) << 85;
@@ -5103,7 +5211,7 @@ void tst_QPainter::drawPolyline()
p.setPen(pen);
QVERIFY(p.pen().isCosmetic());
if (r) {
- for (int i = 0; i < points.count()-1; i++) {
+ for (int i = 0; i < points.size()-1; i++) {
p.drawLine(points.at(i), points.at(i+1));
}
} else {
@@ -5428,6 +5536,7 @@ void tst_QPainter::hdrColors()
QCOMPARE(img.pixelColor(4, 4), color);
QImage img2(10, 10, QImage::Format_RGBX32FPx4);
+ img2.fill(Qt::black); // fill to avoid random FP values like Inf which can break SourceOver composition
{
QPainter p(&img2);
p.drawImage(0, 0, img);
diff --git a/tests/auto/gui/painting/qpainter/utils/createImages/main.cpp b/tests/auto/gui/painting/qpainter/utils/createImages/main.cpp
index 53ea3ce9fb..7cb9e74216 100644
--- a/tests/auto/gui/painting/qpainter/utils/createImages/main.cpp
+++ b/tests/auto/gui/painting/qpainter/utils/createImages/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 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.h>
diff --git a/tests/auto/gui/painting/qpainterpath/BLACKLIST b/tests/auto/gui/painting/qpainterpath/BLACKLIST
deleted file mode 100644
index b3e6d3bfe4..0000000000
--- a/tests/auto/gui/painting/qpainterpath/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[contains_QPointF]
-msvc-2019
diff --git a/tests/auto/gui/painting/qpainterpath/CMakeLists.txt b/tests/auto/gui/painting/qpainterpath/CMakeLists.txt
index 47450c9146..1da6e25511 100644
--- a/tests/auto/gui/painting/qpainterpath/CMakeLists.txt
+++ b/tests/auto/gui/painting/qpainterpath/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qpainterpath.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpainterpath Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpainterpath LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpainterpath
SOURCES
tst_qpainterpath.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp b/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp
index dcba95d33c..c00dc3a78a 100644
--- a/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.cpp
+++ b/tests/auto/gui/painting/qpainterpath/tst_qpainterpath.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 <QTest>
@@ -106,6 +81,8 @@ private slots:
void intersectionEquality();
void intersectionPointOnEdge();
+
+ void boundsAtStartPoint();
};
void tst_QPainterPath::cleanupTestCase()
@@ -410,11 +387,11 @@ void tst_QPainterPath::contains_QRectF_data()
QTest::newRow("inside 2 rects (winding)") << path << QRectF(51, 51, 48, 48) << true;
path.addEllipse(0, 0, 150, 150);
- QTest::newRow("topRight 2 rects") << path << QRectF(100, 25, 24, 24) << true;
- QTest::newRow("bottomLeft 2 rects") << path << QRectF(25, 100, 24, 24) << true;
+ QTest::newRow("topRight rects+circle") << path << QRectF(100, 25, 24, 24) << true;
+ QTest::newRow("bottomLeft rects+circle") << path << QRectF(25, 100, 24, 24) << true;
path.setFillRule(Qt::OddEvenFill);
- QTest::newRow("inside 2 rects") << path << QRectF(50, 50, 49, 49) << false;
+ QTest::newRow("inside rects+circle") << path << QRectF(50, 50, 49, 49) << false;
}
void tst_QPainterPath::contains_QRectF()
@@ -788,6 +765,21 @@ void tst_QPainterPath::testOperatorDatastream()
}
QCOMPARE(other, path);
+
+ // Check reset & detach
+ QPainterPath p3;
+ p3.lineTo(1, 1);
+ QCOMPARE(p3.elementCount(), 2);
+ QPainterPath p4 = p3;
+ QCOMPARE(p4.elementCount(), 2);
+ {
+ QFile data(tempDir.path() + "/data");
+ QVERIFY(data.open(QFile::ReadOnly));
+ QDataStream stream(&data);
+ stream >> p3;
+ }
+ QCOMPARE(p3.elementCount(), path.elementCount());
+ QCOMPARE(p4.elementCount(), 2);
}
void tst_QPainterPath::closing()
@@ -918,17 +910,17 @@ void tst_QPainterPath::testArcMoveTo_data()
QRectF(100, 100, 100, -100),
QRectF(100, 100, -100, -100),
};
+ constexpr qreal tinyAngle = 1e-10;
- for (uint domain = 0; domain < sizeof rects / sizeof *rects; ++domain) {
- const QByteArray dB = QByteArray::number(domain);
- for (int i=-360; i<=360; ++i) {
- QTest::newRow(("test " + dB + ' ' + QByteArray::number(i)).constData())
- << rects[domain] << (qreal) i;
- }
+ int index = 0;
+ for (const auto &rect : rects) {
+ for (int i = -360; i <= 360; ++i)
+ QTest::addRow("test %d %d", index, i) << rect << qreal(i);
// test low angles
- QTest::newRow("low angles 1") << rects[domain] << (qreal) 1e-10;
- QTest::newRow("low angles 2") << rects[domain] << (qreal)-1e-10;
+ QTest::addRow("low +angle %d", index) << rect << tinyAngle;
+ QTest::addRow("low -angle %d", index) << rect << -tinyAngle;
+ ++index;
}
}
@@ -1245,38 +1237,65 @@ void tst_QPainterPath::testNaNandInfinites()
QPointF p3 = QPointF(qQNaN(), 1);
QPointF pInf = QPointF(qInf(), 1);
- // all these operations with NaN/Inf should be ignored
- // can't test operator>> reliably, as we can't create a path with NaN to << later
+ // All these operations with NaN/Inf should be ignored.
+ // Can't test operator>> reliably, as we can't create a path with NaN to << later.
+#ifdef QT_NO_DEBUG
+# define WARNS(name)
+#else
+# define WARNS(name) \
+ QTest::ignoreMessage(QtWarningMsg, "QPainterPath::" #name ": " \
+ "Adding point with invalid coordinates, ignoring call")
+#endif
+ WARNS(moveTo);
path1.moveTo(p1);
+ WARNS(moveTo);
path1.moveTo(qSNaN(), qQNaN());
+ WARNS(moveTo);
path1.moveTo(pInf);
+ WARNS(lineTo);
path1.lineTo(p1);
+ WARNS(lineTo);
path1.lineTo(qSNaN(), qQNaN());
+ WARNS(lineTo);
path1.lineTo(pInf);
+ WARNS(cubicTo);
path1.cubicTo(p1, p2, p3);
+ WARNS(cubicTo);
path1.cubicTo(p1, QPointF(1, 1), QPointF(2, 2));
+ WARNS(cubicTo);
path1.cubicTo(pInf, QPointF(10, 10), QPointF(5, 1));
+ WARNS(quadTo);
path1.quadTo(p1, p2);
+ WARNS(quadTo);
path1.quadTo(QPointF(1, 1), p3);
+ WARNS(quadTo);
path1.quadTo(QPointF(1, 1), pInf);
+ WARNS(arcTo);
path1.arcTo(QRectF(p1, p2), 5, 5);
+ WARNS(arcTo);
path1.arcTo(QRectF(pInf, QPointF(1, 1)), 5, 5);
+ WARNS(addRect);
path1.addRect(QRectF(p1, p2));
+ WARNS(addRect);
path1.addRect(QRectF(pInf, QPointF(1, 1)));
+ WARNS(addEllipse);
path1.addEllipse(QRectF(p1, p2));
+ WARNS(addEllipse);
path1.addEllipse(QRectF(pInf, QPointF(1, 1)));
+#undef WARNS
+
QCOMPARE(path1, path2);
path1.lineTo(QPointF(1, 1));
- QVERIFY(path1 != path2);
+ QCOMPARE_NE(path1, path2);
}
#endif // signaling_nan
@@ -1440,6 +1459,32 @@ void tst_QPainterPath::intersectionPointOnEdge()
QVERIFY(p.intersects(r));
}
+void tst_QPainterPath::boundsAtStartPoint()
+{
+ const QPointF startPoint(10, 10);
+ const QPainterPath constructedPath(startPoint);
+ {
+ const auto boundingRect = constructedPath.boundingRect();
+ const auto topLeft = boundingRect.topLeft();
+ QCOMPARE(topLeft, startPoint);
+ QCOMPARE(topLeft, constructedPath.elementAt(0));
+ QCOMPARE(boundingRect, constructedPath.controlPointRect());
+ }
+
+ QPainterPath defaultPath;
+ defaultPath.moveTo(startPoint);
+ {
+ const auto boundingRect = defaultPath.boundingRect();
+ const auto topLeft = boundingRect.topLeft();
+ QCOMPARE(topLeft, startPoint);
+ QCOMPARE(topLeft, defaultPath.elementAt(0));
+ QCOMPARE(boundingRect, defaultPath.controlPointRect());
+ }
+
+ QCOMPARE(constructedPath.boundingRect(), defaultPath.boundingRect());
+ QCOMPARE(constructedPath.controlPointRect(), defaultPath.controlPointRect());
+}
+
QTEST_APPLESS_MAIN(tst_QPainterPath)
#include "tst_qpainterpath.moc"
diff --git a/tests/auto/gui/painting/qpainterpathstroker/CMakeLists.txt b/tests/auto/gui/painting/qpainterpathstroker/CMakeLists.txt
index f4c301c42e..d30778de3f 100644
--- a/tests/auto/gui/painting/qpainterpathstroker/CMakeLists.txt
+++ b/tests/auto/gui/painting/qpainterpathstroker/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qpainterpathstroker.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpainterpathstroker Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpainterpathstroker LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpainterpathstroker
SOURCES
tst_qpainterpathstroker.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/painting/qpainterpathstroker/tst_qpainterpathstroker.cpp b/tests/auto/gui/painting/qpainterpathstroker/tst_qpainterpathstroker.cpp
index de3f612b10..ce80019273 100644
--- a/tests/auto/gui/painting/qpainterpathstroker/tst_qpainterpathstroker.cpp
+++ b/tests/auto/gui/painting/qpainterpathstroker/tst_qpainterpathstroker.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 <QTest>
diff --git a/tests/auto/gui/painting/qpathclipper/CMakeLists.txt b/tests/auto/gui/painting/qpathclipper/CMakeLists.txt
index 191b1b8a93..2cf25cfdf2 100644
--- a/tests/auto/gui/painting/qpathclipper/CMakeLists.txt
+++ b/tests/auto/gui/painting/qpathclipper/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qpathclipper.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_qpathclipper LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -14,18 +21,15 @@ qt_internal_add_test(tst_qpathclipper
tst_qpathclipper.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
-#### Keys ignored in scope 1:.:.:qpathclipper.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qpathclipper CONDITION UNIX AND NOT APPLE AND NOT HAIKU AND NOT INTEGRITY
- PUBLIC_LIBRARIES
+ LIBRARIES
m
)
diff --git a/tests/auto/gui/painting/qpathclipper/pathcompare.h b/tests/auto/gui/painting/qpathclipper/pathcompare.h
index 4f855194a4..593176686e 100644
--- a/tests/auto/gui/painting/qpathclipper/pathcompare.h
+++ b/tests/auto/gui/painting/qpathclipper/pathcompare.h
@@ -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
#ifndef PATHCOMPARE_H
#define PATHCOMPARE_H
diff --git a/tests/auto/gui/painting/qpathclipper/paths.cpp b/tests/auto/gui/painting/qpathclipper/paths.cpp
index a814958394..7b1486152b 100644
--- a/tests/auto/gui/painting/qpathclipper/paths.cpp
+++ b/tests/auto/gui/painting/qpathclipper/paths.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 "paths.h"
QPainterPath Paths::rect()
diff --git a/tests/auto/gui/painting/qpathclipper/paths.h b/tests/auto/gui/painting/qpathclipper/paths.h
index 61daa0c3a4..73b41d324a 100644
--- a/tests/auto/gui/painting/qpathclipper/paths.h
+++ b/tests/auto/gui/painting/qpathclipper/paths.h
@@ -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
#ifndef PATHS_H
#define PATHS_H
diff --git a/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp b/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp
index 83a8d6bd47..c5ef8373fd 100644
--- a/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.cpp
+++ b/tests/auto/gui/painting/qpathclipper/tst_qpathclipper.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 "private/qpathclipper_p.h"
#include "paths.h"
#include "pathcompare.h"
@@ -495,15 +470,19 @@ void tst_QPathClipper::clipTest(int subjectIndex, int clipIndex, QPathClipper::O
break;
}
- if (expected != inResult) {
- char str[256];
- const char *opStr =
- op == QPathClipper::BoolAnd ? "and" :
- op == QPathClipper::BoolOr ? "or" : "sub";
- sprintf(str, "Expected: %d, actual: %d, subject: %d, clip: %d, op: %s\n",
- int(expected), int(inResult), subjectIndex, clipIndex, opStr);
- QFAIL(str);
- }
+ auto failLogger = qScopeGuard([&]{
+ qCritical().noquote().nospace()
+ << "\n\tExpected: " << expected
+ << "\n\tActual: " << inResult
+ << "\n\tSubject: " << subjectIndex
+ << "\n\tClip: " << clipIndex
+ << "\n\tOp: " << (op == QPathClipper::BoolAnd
+ ? "and"
+ : op == QPathClipper::BoolOr
+ ? "or" : "sub");
+ });
+ QCOMPARE(inResult, expected);
+ failLogger.dismiss();
}
}
@@ -797,7 +776,7 @@ void tst_QPathClipper::testIntersections7()
void tst_QPathClipper::testIntersections8()
{
QPainterPath path1 = Paths::node() * QTransform().translate(100, 50);
- QPainterPath path2 = Paths::node() * QTransform().translate(150, 50);;
+ QPainterPath path2 = Paths::node() * QTransform().translate(150, 50);
QVERIFY(path1.intersects(path2));
QVERIFY(path2.intersects(path1));
@@ -845,7 +824,7 @@ void tst_QPathClipper::testIntersections9()
QVERIFY(path1.intersects(path2));
QVERIFY(path2.intersects(path1));
- path1 = QPainterPath();;
+ path1 = QPainterPath();
path2 = QPainterPath();
path1.addRect(QRectF(-1,191, 136, 106));
@@ -853,7 +832,7 @@ void tst_QPathClipper::testIntersections9()
QVERIFY(path1.intersects(path2));
QVERIFY(path2.intersects(path1));
- path1 = QPainterPath();;
+ path1 = QPainterPath();
path2 = QPainterPath();
path1.moveTo(-1 , 143);
diff --git a/tests/auto/gui/painting/qpdfwriter/CMakeLists.txt b/tests/auto/gui/painting/qpdfwriter/CMakeLists.txt
index c6eb5b1034..3a42d81600 100644
--- a/tests/auto/gui/painting/qpdfwriter/CMakeLists.txt
+++ b/tests/auto/gui/painting/qpdfwriter/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qpdfwriter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpdfwriter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpdfwriter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpdfwriter
SOURCES
tst_qpdfwriter.cpp
DEFINES
QT_USE_USING_NAMESPACE
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
diff --git a/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp b/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp
index c74baf0ba4..4d6b1f01b9 100644
--- a/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.cpp
+++ b/tests/auto/gui/painting/qpdfwriter/tst_qpdfwriter.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 <QTest>
#include <QtGlobal>
diff --git a/tests/auto/gui/painting/qpen/CMakeLists.txt b/tests/auto/gui/painting/qpen/CMakeLists.txt
index 321c40fa8f..05fbbfb552 100644
--- a/tests/auto/gui/painting/qpen/CMakeLists.txt
+++ b/tests/auto/gui/painting/qpen/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qpen.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpen Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpen LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpen
SOURCES
tst_qpen.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/painting/qpen/tst_qpen.cpp b/tests/auto/gui/painting/qpen/tst_qpen.cpp
index 64c01a81b5..b3ff1c76f9 100644
--- a/tests/auto/gui/painting/qpen/tst_qpen.cpp
+++ b/tests/auto/gui/painting/qpen/tst_qpen.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 <QTest>
diff --git a/tests/auto/gui/painting/qpolygon/CMakeLists.txt b/tests/auto/gui/painting/qpolygon/CMakeLists.txt
index a61529d397..42b108efcd 100644
--- a/tests/auto/gui/painting/qpolygon/CMakeLists.txt
+++ b/tests/auto/gui/painting/qpolygon/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qpolygon.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpolygon Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpolygon LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpolygon
SOURCES
tst_qpolygon.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
@@ -15,6 +22,6 @@ qt_internal_add_test(tst_qpolygon
#####################################################################
qt_internal_extend_target(tst_qpolygon CONDITION UNIX AND NOT APPLE AND NOT HAIKU AND NOT INTEGRITY
- PUBLIC_LIBRARIES
+ LIBRARIES
m
)
diff --git a/tests/auto/gui/painting/qpolygon/tst_qpolygon.cpp b/tests/auto/gui/painting/qpolygon/tst_qpolygon.cpp
index 4cde0aa549..cd24135ac6 100644
--- a/tests/auto/gui/painting/qpolygon/tst_qpolygon.cpp
+++ b/tests/auto/gui/painting/qpolygon/tst_qpolygon.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 <QTest>
@@ -41,6 +16,7 @@ class tst_QPolygon : public QObject
private slots:
void constructors();
+ void toPolygonF();
void boundingRect_data();
void boundingRect();
void boundingRectF_data();
@@ -80,6 +56,17 @@ void tst_QPolygon::constructors()
constructors_helperF(QRectF(1, 2, 3, 4));
}
+void tst_QPolygon::toPolygonF()
+{
+ const QPolygon p = {{1, 1}, {-1, 1}, {-1, -1}, {1, -1}};
+ auto pf = p.toPolygonF();
+ static_assert(std::is_same_v<decltype(pf), QPolygonF>);
+ QCOMPARE(pf.size(), p.size());
+ auto p2 = pf.toPolygon();
+ static_assert(std::is_same_v<decltype(p2), QPolygon>);
+ QCOMPARE(p, p2);
+}
+
void tst_QPolygon::boundingRect_data()
{
QTest::addColumn<QPolygon>("poly");
@@ -181,8 +168,8 @@ void tst_QPolygon::swap()
QPolygon p2(QList<QPoint>() << QPoint(0, 0) << QPoint(0, 10) << QPoint(10, 10)
<< QPoint(10, 0));
p1.swap(p2);
- QCOMPARE(p1.count(),4);
- QCOMPARE(p2.count(),3);
+ QCOMPARE(p1.size(),4);
+ QCOMPARE(p2.size(),3);
}
void tst_QPolygon::intersections_data()
diff --git a/tests/auto/gui/painting/qregion/CMakeLists.txt b/tests/auto/gui/painting/qregion/CMakeLists.txt
index 9564e0719e..ba580438cd 100644
--- a/tests/auto/gui/painting/qregion/CMakeLists.txt
+++ b/tests/auto/gui/painting/qregion/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qregion.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qregion Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qregion LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qregion
SOURCES
tst_qregion.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
diff --git a/tests/auto/gui/painting/qregion/tst_qregion.cpp b/tests/auto/gui/painting/qregion/tst_qregion.cpp
index 29179c44a0..3d60e62fc1 100644
--- a/tests/auto/gui/painting/qregion/tst_qregion.cpp
+++ b/tests/auto/gui/painting/qregion/tst_qregion.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 <QTest>
diff --git a/tests/auto/gui/painting/qtransform/CMakeLists.txt b/tests/auto/gui/painting/qtransform/CMakeLists.txt
index 4d50e2cf33..557e5fa742 100644
--- a/tests/auto/gui/painting/qtransform/CMakeLists.txt
+++ b/tests/auto/gui/painting/qtransform/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtransform.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtransform Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtransform LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtransform
SOURCES
tst_qtransform.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
@@ -15,6 +22,6 @@ qt_internal_add_test(tst_qtransform
#####################################################################
qt_internal_extend_target(tst_qtransform CONDITION UNIX AND NOT APPLE AND NOT HAIKU AND NOT INTEGRITY
- PUBLIC_LIBRARIES
+ LIBRARIES
m
)
diff --git a/tests/auto/gui/painting/qtransform/tst_qtransform.cpp b/tests/auto/gui/painting/qtransform/tst_qtransform.cpp
index 1bab7200f0..428174bfc6 100644
--- a/tests/auto/gui/painting/qtransform/tst_qtransform.cpp
+++ b/tests/auto/gui/painting/qtransform/tst_qtransform.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 <QTest>
diff --git a/tests/auto/gui/platform/CMakeLists.txt b/tests/auto/gui/platform/CMakeLists.txt
index fc2d330fd7..4b2cee205d 100644
--- a/tests/auto/gui/platform/CMakeLists.txt
+++ b/tests/auto/gui/platform/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
if(QT_FEATURE_xcb)
add_subdirectory(qx11info)
endif()
diff --git a/tests/auto/gui/platform/qx11info/CMakeLists.txt b/tests/auto/gui/platform/qx11info/CMakeLists.txt
index c4ce1f91c8..40188f24a0 100644
--- a/tests/auto/gui/platform/qx11info/CMakeLists.txt
+++ b/tests/auto/gui/platform/qx11info/CMakeLists.txt
@@ -1,7 +1,16 @@
+# 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_qx11info LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qx11info
SOURCES
tst_qx11info.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::GuiPrivate
XCB::XCB
)
diff --git a/tests/auto/gui/platform/qx11info/tst_qx11info.cpp b/tests/auto/gui/platform/qx11info/tst_qx11info.cpp
index 0cd11c87ac..a4effb07cc 100644
--- a/tests/auto/gui/platform/qx11info/tst_qx11info.cpp
+++ b/tests/auto/gui/platform/qx11info/tst_qx11info.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 David Faure <david.faure@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 The Qt Company Ltd.
+// Copyright (C) 2016 David Faure <david.faure@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui>
#include <QtTest/QtTest>
@@ -112,6 +87,8 @@ void tst_QX11Info::startupId()
{
int argc = 0;
QGuiApplication app(argc, 0);
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("This test is only for X11, not Wayland.");
// This relies on the fact that no widget was shown yet,
// so please make sure this method is always the first test.
@@ -133,6 +110,8 @@ void tst_QX11Info::isPlatformX11()
{
int argc = 0;
QGuiApplication app(argc, 0);
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("This test is only for X11, not Wayland.");
QVERIFY(QX11Info::isPlatformX11());
}
@@ -141,6 +120,8 @@ void tst_QX11Info::appTime()
{
int argc = 0;
QGuiApplication app(argc, 0);
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("This test is only for X11, not Wayland.");
// No X11 event received yet
QCOMPARE(QX11Info::appTime(), 0ul);
@@ -367,6 +348,8 @@ void tst_QX11Info::peeker()
{
int argc = 0;
QGuiApplication app(argc, 0);
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("This test is only for X11, not Wayland.");
PeekerTest test;
test.show();
@@ -378,6 +361,8 @@ void tst_QX11Info::isCompositingManagerRunning()
{
int argc = 0;
QGuiApplication app(argc, 0);
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("This test is only for X11, not Wayland.");
const bool b = QX11Info::isCompositingManagerRunning();
Q_UNUSED(b);
const bool b2 = QX11Info::isCompositingManagerRunning(0);
diff --git a/tests/auto/gui/qopengl/CMakeLists.txt b/tests/auto/gui/qopengl/CMakeLists.txt
index 3be29695a5..48e07d2878 100644
--- a/tests/auto/gui/qopengl/CMakeLists.txt
+++ b/tests/auto/gui/qopengl/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qopengl.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qopengl Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qopengl LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qopengl
SOURCES
tst_qopengl.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/qopengl/tst_qopengl.cpp b/tests/auto/gui/qopengl/tst_qopengl.cpp
index e2e7f153a0..af59f3e31a 100644
--- a/tests/auto/gui/qopengl/tst_qopengl.cpp
+++ b/tests/auto/gui/qopengl/tst_qopengl.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 <QtOpenGL/QOpenGLFramebufferObject>
#include <QtOpenGL/QOpenGLPaintDevice>
@@ -32,7 +7,9 @@
#include <QtOpenGL/qopengltextureblitter.h>
#include <QtOpenGL/QOpenGLVertexArrayObject>
#include <QtOpenGL/QOpenGLBuffer>
-#include <QtOpenGL/QOpenGLFunctions_4_2_Core>
+#if !QT_CONFIG(opengles2)
+# include <QtOpenGL/QOpenGLFunctions_4_2_Core>
+#endif
#include <QtOpenGL/QOpenGLVersionFunctionsFactory>
#include <QtGui/private/qopenglcontext_p.h>
#include <QtGui/QOpenGLFunctions>
@@ -643,6 +620,10 @@ static bool supportsInternalFboFormat(QOpenGLContext *ctx, int glFormat)
void tst_QOpenGL::fboRenderingRGB30()
{
+#ifdef Q_OS_ANDROID
+ if (QNativeInterface::QAndroidApplication::sdkVersion() >= 31)
+ QSKIP("Fails on Android 12 (QTBUG-105738)");
+#endif
#if defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(__x86_64__)
QSKIP("QTBUG-22617");
#endif
@@ -1182,6 +1163,7 @@ void tst_QOpenGL::sizeLessWindow()
// child window
{
QWindow parent;
+ parent.setSurfaceType(QWindow::OpenGLSurface);
QWindow window(&parent);
window.setSurfaceType(QWindow::OpenGLSurface);
@@ -1610,6 +1592,13 @@ void tst_QOpenGL::bufferCreate()
buf.allocate(128);
QCOMPARE(buf.size(), 128);
+ {
+ QOpenGLBuffer moved = std::move(buf);
+ QCOMPARE_EQ(moved.isCreated(), true);
+ QCOMPARE_EQ(moved.size(), 128);
+ buf = std::move(moved);
+ }
+
buf.release();
buf.destroy();
@@ -1695,10 +1684,11 @@ void tst_QOpenGL::nullTextureInitializtion()
/*
Verify that the clipping works correctly.
- The red outline should be covered by the blue rect on top and left,
- while it should be clipped on the right and bottom and thus the red outline be visible
+ Just like fillRect, cliprect should snap rightwards and downwards in case of .5 coordinates.
+ The red outline should be covered by the blue rect on top,
+ while it should be clipped on the other edges and thus the red outline be visible
- See: QTBUG-83229
+ See: QTBUG-83229, modified by QTBUG-100329
*/
void tst_QOpenGL::clipRect()
{
@@ -1754,7 +1744,7 @@ void tst_QOpenGL::clipRect()
QCOMPARE(fb.size(), size);
QCOMPARE(fb.pixelColor(clipRect.left() + 1, clipRect.top()), QColor(Qt::blue));
- QCOMPARE(fb.pixelColor(clipRect.left(), clipRect.top() + 1), QColor(Qt::blue));
+ QCOMPARE(fb.pixelColor(clipRect.left(), clipRect.top() + 1), QColor(Qt::red));
QCOMPARE(fb.pixelColor(clipRect.left() + 1, clipRect.bottom()), QColor(Qt::red));
// Enable this once QTBUG-85286 is fixed
diff --git a/tests/auto/gui/qopenglconfig/CMakeLists.txt b/tests/auto/gui/qopenglconfig/CMakeLists.txt
index d193e15c2e..ea70afd20a 100644
--- a/tests/auto/gui/qopenglconfig/CMakeLists.txt
+++ b/tests/auto/gui/qopenglconfig/CMakeLists.txt
@@ -1,16 +1,23 @@
-# Generated from qopenglconfig.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qopenglconfig Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qopenglconfig LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "buglist.json")
qt_internal_add_test(tst_qopenglconfig
SOURCES
tst_qopenglconfig.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/qopenglconfig/tst_qopenglconfig.cpp b/tests/auto/gui/qopenglconfig/tst_qopenglconfig.cpp
index d65293f8b8..423f9419da 100644
--- a/tests/auto/gui/qopenglconfig/tst_qopenglconfig.cpp
+++ b/tests/auto/gui/qopenglconfig/tst_qopenglconfig.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 <QtGui/QOpenGLFunctions>
#include <QtGui/QScreen>
diff --git a/tests/auto/gui/qvulkan/CMakeLists.txt b/tests/auto/gui/qvulkan/CMakeLists.txt
index 7cca165ed2..d4e2dd6f87 100644
--- a/tests/auto/gui/qvulkan/CMakeLists.txt
+++ b/tests/auto/gui/qvulkan/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qvulkan.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qvulkan Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qvulkan LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qvulkan
SOURCES
tst_qvulkan.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/qvulkan/tst_qvulkan.cpp b/tests/auto/gui/qvulkan/tst_qvulkan.cpp
index b1cc2dd052..c8f5c27481 100644
--- a/tests/auto/gui/qvulkan/tst_qvulkan.cpp
+++ b/tests/auto/gui/qvulkan/tst_qvulkan.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** 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
#include <QtGui/QVulkanInstance>
#include <QtGui/QVulkanFunctions>
#include <QtGui/QVulkanWindow>
+#include <QtCore/qvarlengtharray.h>
#include <QTest>
@@ -112,6 +88,10 @@ void tst_QVulkan::vulkanCheckSupported()
void tst_QVulkan::vulkan11()
{
+#ifdef Q_OS_ANDROID
+ if (QNativeInterface::QAndroidApplication::sdkVersion() >= 31)
+ QSKIP("Fails on Android 12 (QTBUG-105739)");
+#endif
#if VK_VERSION_1_1
QVulkanInstance inst;
if (inst.supportedApiVersion() < QVersionNumber(1, 1))
@@ -161,15 +141,17 @@ void tst_QVulkan::vulkan11()
QByteArray deviceUuid = QByteArray::fromRawData((const char *) deviceIdProps.deviceUUID, VK_UUID_SIZE).toHex();
QByteArray driverUuid = QByteArray::fromRawData((const char *) deviceIdProps.driverUUID, VK_UUID_SIZE).toHex();
qDebug() << "deviceUUID" << deviceUuid << "driverUUID" << driverUuid;
+ const bool deviceUuidZero = std::find_if(deviceUuid.cbegin(), deviceUuid.cend(), [](char c) -> bool { return c; }) == deviceUuid.cend();
+ const bool driverUuidZero = std::find_if(driverUuid.cbegin(), driverUuid.cend(), [](char c) -> bool { return c; }) == driverUuid.cend();
// deviceUUID cannot be all zero as per spec
- bool seenNonZero = false;
- for (int i = 0; i < VK_UUID_SIZE; ++i) {
- if (deviceIdProps.deviceUUID[i]) {
- seenNonZero = true;
- break;
- }
+ if (!driverUuidZero) {
+ // ...but then there are implementations such as some
+ // versions of Mesa lavapipe, that returns all zeroes
+ // for both uuids. skip the check if the driver uuid
+ // was zero too.
+ // https://gitlab.freedesktop.org/mesa/mesa/-/issues/5875
+ QVERIFY(!deviceUuidZero);
}
- QVERIFY(seenNonZero);
} else {
qDebug("Physical device is not Vulkan 1.1 capable");
}
@@ -184,6 +166,10 @@ void tst_QVulkan::vulkan11()
void tst_QVulkan::vulkanPlainWindow()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Fails on Android 7 emulator (QTBUG-108328)");
+#endif
+
QVulkanInstance inst;
if (!inst.create())
QSKIP("Vulkan init failed; skip");
@@ -471,6 +457,10 @@ void tst_QVulkan::vulkanWindowRenderer()
void tst_QVulkan::vulkanWindowGrab()
{
+#ifdef Q_OS_ANDROID
+ if (QNativeInterface::QAndroidApplication::sdkVersion() >= 31)
+ QSKIP("Fails on Android 12 (QTBUG-105739)");
+#endif
QVulkanInstance inst;
inst.setLayers(QByteArrayList() << "VK_LAYER_KHRONOS_validation");
if (!inst.create())
diff --git a/tests/auto/gui/rhi/CMakeLists.txt b/tests/auto/gui/rhi/CMakeLists.txt
index 786e121f00..898a67d2dc 100644
--- a/tests/auto/gui/rhi/CMakeLists.txt
+++ b/tests/auto/gui/rhi/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from rhi.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qshader)
add_subdirectory(qrhi)
diff --git a/tests/auto/gui/rhi/qrhi/BLACKLIST b/tests/auto/gui/rhi/qrhi/BLACKLIST
index dc2bc57077..b3284f8979 100644
--- a/tests/auto/gui/rhi/qrhi/BLACKLIST
+++ b/tests/auto/gui/rhi/qrhi/BLACKLIST
@@ -17,3 +17,5 @@ android
android
[renderToRgb10Texture]
android
+[tessellation vulkan]
+android
diff --git a/tests/auto/gui/rhi/qrhi/CMakeLists.txt b/tests/auto/gui/rhi/qrhi/CMakeLists.txt
index 65d072c6b9..3b0d643060 100644
--- a/tests/auto/gui/rhi/qrhi/CMakeLists.txt
+++ b/tests/auto/gui/rhi/qrhi/CMakeLists.txt
@@ -1,26 +1,28 @@
-# Generated from qrhi.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qrhi Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qrhi LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+# Resources:
+file(GLOB_RECURSE qrhi_resource_files
+ RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
+ data/*
+)
+
qt_internal_add_test(tst_qrhi
SOURCES
tst_qrhi.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
+ TESTDATA ${qrhi_resource_files}
+ BUILTIN_TESTDATA
)
-
-# Resources:
-set(qrhi_resource_files
- "data"
-)
-
-qt_internal_add_resource(tst_qrhi "qrhi"
- PREFIX
- "/"
- FILES
- ${qrhi_resource_files}
-)
-
diff --git a/tests/auto/gui/rhi/qrhi/data/buildshaders.bat b/tests/auto/gui/rhi/qrhi/data/buildshaders.bat
index b2348b42f5..fe40459719 100644
--- a/tests/auto/gui/rhi/qrhi/data/buildshaders.bat
+++ b/tests/auto/gui/rhi/qrhi/data/buildshaders.bat
@@ -1,41 +1,5 @@
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-::
:: Copyright (C) 2019 The Qt Company Ltd.
-:: Contact: https://www.qt.io/licensing/
-::
-:: This file is part of the QtQuick module 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$
-::
-:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:: SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
qsb --glsl "150,120,100 es" --hlsl 50 -c --msl 12 -o simple.vert.qsb simple.vert
qsb --glsl "150,120,100 es" --hlsl 50 -c --msl 12 -o simple.frag.qsb simple.frag
@@ -47,3 +11,20 @@ qsb --glsl "150,120,100 es" --hlsl 50 -c --msl 12 -o textured.vert.qsb textured.
qsb --glsl "150,120,100 es" --hlsl 50 -c --msl 12 -o textured.frag.qsb textured.frag
qsb --glsl "150,120,100 es" --hlsl 50 -c --msl 12 -o textured_multiubuf.vert.qsb textured_multiubuf.vert
qsb --glsl "150,120,100 es" --hlsl 50 -c --msl 12 -o textured_multiubuf.frag.qsb textured_multiubuf.frag
+qsb --glsl 320es,410 --msl 12 --msltess simpletess.vert -o simpletess.vert.qsb
+qsb --glsl 320es,410 --msl 12 --tess-mode triangles simpletess.tesc -o simpletess.tesc.qsb
+qsb --glsl 320es,410 --msl 12 --tess-vertex-count 3 simpletess.tese -o simpletess.tese.qsb
+qsb --glsl 320es,410 --msl 12 simpletess.frag -o simpletess.frag.qsb
+qsb --glsl 310es,430 --msl 12 --hlsl 50 storagebuffer.comp -o storagebuffer.comp.qsb
+qsb --glsl 320es,430 --msl 12 --msltess storagebuffer_runtime.vert -o storagebuffer_runtime.vert.qsb
+qsb --glsl 320es,430 --msl 12 --tess-mode triangles storagebuffer_runtime.tesc -o storagebuffer_runtime.tesc.qsb
+qsb --glsl 320es,430 --msl 12 --tess-vertex-count 3 storagebuffer_runtime.tese -o storagebuffer_runtime.tese.qsb
+qsb --glsl 320es,430 --msl 12 storagebuffer_runtime.frag -o storagebuffer_runtime.frag.qsb
+qsb --glsl 320es,430 --hlsl 50 -c --msl 12 storagebuffer_runtime.comp -o storagebuffer_runtime.comp.qsb
+qsb --glsl "150,120,100 es" --hlsl 50 -c --msl 12 -o half.vert.qsb half.vert
+qsb --glsl 320es,430 --msl 21 --msltess tessinterfaceblocks.vert -o tessinterfaceblocks.vert.qsb
+qsb --glsl 320es,430 --msl 21 --tess-mode triangles tessinterfaceblocks.tesc -o tessinterfaceblocks.tesc.qsb
+qsb --glsl 320es,430 --msl 21 --tess-vertex-count 3 tessinterfaceblocks.tese -o tessinterfaceblocks.tese.qsb
+qsb --glsl 320es,430 --msl 21 simpletess.frag -o tessinterfaceblocks.frag.qsb
+qsb --view-count 2 --glsl "300 es,330" --hlsl 61 -c --msl 12 multiview.vert -o multiview.vert.qsb
+qsb --glsl "300 es,330" --hlsl 61 -c --msl 12 multiview.frag -o multiview.frag.qsb
diff --git a/tests/auto/gui/rhi/qrhi/data/half.vert b/tests/auto/gui/rhi/qrhi/data/half.vert
new file mode 100644
index 0000000000..b503201351
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/half.vert
@@ -0,0 +1,10 @@
+#version 440
+
+layout(location = 0) in vec3 position;
+
+out gl_PerVertex { vec4 gl_Position; };
+
+void main()
+{
+ gl_Position = vec4(position, 1.0);
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/half.vert.qsb b/tests/auto/gui/rhi/qrhi/data/half.vert.qsb
new file mode 100644
index 0000000000..fb8680024a
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/half.vert.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/multiview.frag b/tests/auto/gui/rhi/qrhi/data/multiview.frag
new file mode 100644
index 0000000000..375587662f
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/multiview.frag
@@ -0,0 +1,10 @@
+#version 440
+
+layout(location = 0) in vec3 v_color;
+
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+ fragColor = vec4(v_color, 1.0);
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/multiview.frag.qsb b/tests/auto/gui/rhi/qrhi/data/multiview.frag.qsb
new file mode 100644
index 0000000000..db8133f12e
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/multiview.frag.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/multiview.vert b/tests/auto/gui/rhi/qrhi/data/multiview.vert
new file mode 100644
index 0000000000..b9c9e5a704
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/multiview.vert
@@ -0,0 +1,18 @@
+#version 440
+#extension GL_EXT_multiview : require
+
+layout(location = 0) in vec4 pos;
+layout(location = 1) in vec3 color;
+
+layout(location = 0) out vec3 v_color;
+
+layout(std140, binding = 0) uniform buf
+{
+ mat4 mvp[2];
+};
+
+void main()
+{
+ v_color = color;
+ gl_Position = mvp[gl_ViewIndex] * pos;
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/multiview.vert.qsb b/tests/auto/gui/rhi/qrhi/data/multiview.vert.qsb
new file mode 100644
index 0000000000..cf1f67f58f
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/multiview.vert.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/simpletess.frag b/tests/auto/gui/rhi/qrhi/data/simpletess.frag
new file mode 100644
index 0000000000..375587662f
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/simpletess.frag
@@ -0,0 +1,10 @@
+#version 440
+
+layout(location = 0) in vec3 v_color;
+
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+ fragColor = vec4(v_color, 1.0);
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/simpletess.frag.qsb b/tests/auto/gui/rhi/qrhi/data/simpletess.frag.qsb
new file mode 100644
index 0000000000..0f42103ac5
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/simpletess.frag.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/simpletess.tesc b/tests/auto/gui/rhi/qrhi/data/simpletess.tesc
new file mode 100644
index 0000000000..e192fc77c7
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/simpletess.tesc
@@ -0,0 +1,22 @@
+#version 440
+
+layout(vertices = 3) out;
+
+layout(location = 0) in vec3 inColor[];
+layout(location = 0) out vec3 outColor[];
+layout(location = 1) patch out float a_per_patch_output_variable;
+
+void main()
+{
+ if (gl_InvocationID == 0) {
+ gl_TessLevelOuter[0] = 4.0;
+ gl_TessLevelOuter[1] = 4.0;
+ gl_TessLevelOuter[2] = 4.0;
+
+ gl_TessLevelInner[0] = 4.0;
+ }
+
+ gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+ outColor[gl_InvocationID] = inColor[gl_InvocationID];
+ a_per_patch_output_variable = 1.0;
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/simpletess.tesc.qsb b/tests/auto/gui/rhi/qrhi/data/simpletess.tesc.qsb
new file mode 100644
index 0000000000..8c98d92c46
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/simpletess.tesc.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/simpletess.tese b/tests/auto/gui/rhi/qrhi/data/simpletess.tese
new file mode 100644
index 0000000000..17b348635a
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/simpletess.tese
@@ -0,0 +1,17 @@
+#version 440
+
+layout(triangles, fractional_odd_spacing, ccw) in;
+
+layout(location = 0) in vec3 inColor[];
+layout(location = 0) out vec3 outColor;
+layout(location = 1) patch in float a_per_patch_output_variable;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+};
+
+void main()
+{
+ gl_Position = mvp * ((gl_TessCoord.x * gl_in[0].gl_Position) + (gl_TessCoord.y * gl_in[1].gl_Position) + (gl_TessCoord.z * gl_in[2].gl_Position));
+ outColor = gl_TessCoord.x * inColor[0] + gl_TessCoord.y * inColor[1] + gl_TessCoord.z * inColor[2] * a_per_patch_output_variable;
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/simpletess.tese.qsb b/tests/auto/gui/rhi/qrhi/data/simpletess.tese.qsb
new file mode 100644
index 0000000000..8aa7632717
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/simpletess.tese.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/simpletess.vert b/tests/auto/gui/rhi/qrhi/data/simpletess.vert
new file mode 100644
index 0000000000..3838d2f3bb
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/simpletess.vert
@@ -0,0 +1,12 @@
+#version 440
+
+layout(location = 0) in vec3 position;
+layout(location = 1) in vec3 color;
+
+layout(location = 0) out vec3 v_color;
+
+void main()
+{
+ gl_Position = vec4(position, 1.0);
+ v_color = color;
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/simpletess.vert.qsb b/tests/auto/gui/rhi/qrhi/data/simpletess.vert.qsb
new file mode 100644
index 0000000000..ee90983e0b
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/simpletess.vert.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer.comp b/tests/auto/gui/rhi/qrhi/data/storagebuffer.comp
new file mode 100644
index 0000000000..ffa0bc7004
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer.comp
@@ -0,0 +1,28 @@
+#version 430
+layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+
+
+layout (binding = 0, std430) readonly buffer toGpu
+{
+ float _float;
+ vec2 _vec2;
+ vec3 _vec3;
+ vec4 _vec4;
+};
+
+layout (binding = 1, std140) buffer fromGpu
+{
+ int _int;
+ ivec2 _ivec2;
+ ivec3 _ivec3;
+ ivec4 _ivec4;
+};
+
+void main()
+{
+ _int = int(_float);
+ _ivec2 = ivec2(_vec2);
+ _ivec3 = ivec3(_vec3);
+ _ivec4 = ivec4(_vec4);
+}
+
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer.comp.qsb b/tests/auto/gui/rhi/qrhi/data/storagebuffer.comp.qsb
new file mode 100644
index 0000000000..b02f541cc5
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer.comp.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.comp b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.comp
new file mode 100644
index 0000000000..d36f5426bc
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.comp
@@ -0,0 +1,25 @@
+#version 430
+
+layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+
+layout (binding = 0, std430) buffer toGpu
+{
+ float _float[];
+};
+
+
+layout (binding = 1, std140) buffer fromGpu
+{
+ int _int[];
+};
+
+void main()
+{
+ int length = min(_float.length(), _int.length());
+
+ for (int i = 0; i < length; ++i)
+ _int[i] = int(_float[i]);
+
+}
+
+
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.comp.qsb b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.comp.qsb
new file mode 100644
index 0000000000..b4c43ecc9b
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.comp.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.frag b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.frag
new file mode 100644
index 0000000000..2e45a5f62a
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.frag
@@ -0,0 +1,33 @@
+#version 450
+
+layout (location = 0) out vec4 fragColor;
+
+layout (std430, binding = 1) readonly buffer ssboG
+{
+ float g[];
+};
+
+layout (std430, binding = 2) readonly buffer ssboB
+{
+ float b[];
+};
+
+layout (std430, binding = 6) readonly buffer ssboR
+{
+ float r[];
+};
+
+layout (std430, binding = 3) readonly buffer ssbo3
+{
+ vec4 _vec4;
+};
+
+void main()
+{
+
+ // some OpenGL implementations will optimize out the buffer variables if we don't use them
+ // resulting in a .length() of 0.
+ float a = (r[0]+g[0]+b[0])>0?1:1;
+
+ fragColor = a * vec4(r.length(), g.length(), b.length(), 255)/vec4(255);
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.frag.qsb b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.frag.qsb
new file mode 100644
index 0000000000..53fc9a1906
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.frag.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tesc b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tesc
new file mode 100644
index 0000000000..56060285d2
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tesc
@@ -0,0 +1,42 @@
+#version 450
+
+layout(vertices = 3) out;
+
+
+layout (std430, binding = 7) readonly buffer ssbo7
+{
+ float float7[];
+};
+
+layout (std430, binding = 8) readonly buffer ssbo8
+{
+ float float8[];
+};
+
+layout (std430, binding = 9) readonly buffer ssbo9
+{
+ float float9[];
+};
+
+layout (std430, binding = 10) readonly buffer ssbo10
+{
+ float float10[];
+};
+
+void main()
+{
+
+ // some OpenGL implementations will optimize out the buffer variables if we don't use them
+ // resulting in a .length() of 0
+ float a = float7[0] == 0 && float8[0] == 0 && float9[0] == 0 && float10[0] == 0 ? 1 : 1;
+
+ if (gl_InvocationID == 0) {
+ gl_TessLevelOuter[0] = float7.length() * a;
+ gl_TessLevelOuter[1] = float8.length() * a;
+ gl_TessLevelOuter[2] = float9.length() * a;
+ gl_TessLevelInner[0] = float10.length() * a;
+ }
+
+ gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tesc.qsb b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tesc.qsb
new file mode 100644
index 0000000000..e48aa0269c
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tesc.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tese b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tese
new file mode 100644
index 0000000000..a8bec13561
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tese
@@ -0,0 +1,39 @@
+#version 450
+
+layout(triangles, fractional_odd_spacing, ccw) in;
+
+layout (std140, binding = 6) uniform unused0
+{
+ int unused;
+}u0;
+
+layout (binding = 0) uniform u
+{
+ mat4 matrix;
+};
+
+layout (std430, binding = 5) readonly buffer ssbo5
+{
+ float _float[];
+};
+
+layout (std430, binding = 8) readonly buffer ssbo8
+{
+ float float8[];
+};
+
+layout (std430, binding = 1) readonly buffer unused1
+{
+ int unused[];
+}u1;
+
+
+void main()
+{
+ // some OpenGL implementations will optimize out the buffer variables if we don't use them
+ // resulting in a .length() of 0
+ float a = _float[0] == 0 && float8[0] == 1 ? 1 : 1;
+
+ if(_float.length() == 64)
+ gl_Position = a * matrix * ((gl_TessCoord.x * gl_in[0].gl_Position) + (gl_TessCoord.y * gl_in[1].gl_Position) + (gl_TessCoord.z * gl_in[2].gl_Position)) * (float8.length()==2?1:0);
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tese.qsb b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tese.qsb
new file mode 100644
index 0000000000..23a433b5ae
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.tese.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.vert b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.vert
new file mode 100644
index 0000000000..b3ac10efea
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.vert
@@ -0,0 +1,48 @@
+#version 450
+
+layout (location = 0) in vec3 position;
+
+layout (std140, binding = 6) uniform unused0
+{
+ int unused;
+}u0;
+
+layout (binding = 0) uniform u
+{
+ mat4 matrix;
+};
+
+layout (std430, binding = 5) readonly buffer ssbo5
+{
+ float _float[];
+};
+
+layout (std140, binding = 3) readonly buffer ssbo3
+{
+ vec4 _vec4;
+};
+
+layout (std430, binding = 4) readonly buffer ssbo1
+{
+ bool _bool[];
+};
+
+layout (std430, binding = 1) readonly buffer unused1
+{
+ int unused[];
+}u1;
+
+
+void main()
+{
+
+ // some OpenGL implementations will optimize out the buffer variables if we don't use them
+ // resulting in a .length() of 0
+ float a = _float[0] == 0 && _bool[0] ? 1 : 1;
+
+ gl_Position = vec4(0);
+
+ if(_bool.length() == 32)
+ gl_Position = a * matrix * vec4(position*_vec4.xyz, _float.length() == 64 ? 1.0 : 0.0);
+
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.vert.qsb b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.vert.qsb
new file mode 100644
index 0000000000..8b1cff52fd
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/storagebuffer_runtime.vert.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.frag.qsb b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.frag.qsb
new file mode 100644
index 0000000000..7eda4bed2d
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.frag.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tesc b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tesc
new file mode 100644
index 0000000000..92a2dc28fa
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tesc
@@ -0,0 +1,56 @@
+#version 440
+
+layout(vertices = 3) out;
+
+layout(location = 4) in VertOut
+{
+ vec3 v_color;
+ int a;
+ float b;
+}vOut[];
+
+layout(location = 5) out TescOutA {
+ vec3 color;
+ int id;
+}tcOutA[];
+
+layout(location = 10) out TescOutB {
+ vec2 some;
+ int other[3];
+ vec3 variables;
+}tcOutB[];
+
+layout(location = 2) patch out TescOutC {
+ vec3 stuff;
+ float more_stuff;
+}tcOutC;
+
+void main()
+{
+ // tesc builtin outputs
+ gl_TessLevelOuter[0] = 1.0;
+ gl_TessLevelOuter[1] = 2.0;
+ gl_TessLevelOuter[2] = 3.0;
+ gl_TessLevelOuter[3] = 4.0;
+ gl_TessLevelInner[0] = 5.0;
+ gl_TessLevelInner[1] = 6.0;
+
+ gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+ gl_out[gl_InvocationID].gl_PointSize = 10 + gl_InvocationID;
+ gl_out[gl_InvocationID].gl_ClipDistance[0] = 20.0 + gl_InvocationID;
+ gl_out[gl_InvocationID].gl_ClipDistance[1] = 40.0 + gl_InvocationID;
+ gl_out[gl_InvocationID].gl_ClipDistance[2] = 60.0 + gl_InvocationID;
+ gl_out[gl_InvocationID].gl_ClipDistance[3] = 80.0 + gl_InvocationID;
+ gl_out[gl_InvocationID].gl_ClipDistance[4] = 100.0 + gl_InvocationID;
+
+ // outputs
+ tcOutA[gl_InvocationID].color = vOut[gl_InvocationID].v_color;
+ tcOutA[gl_InvocationID].id = gl_InvocationID + 91;
+ tcOutB[gl_InvocationID].some = vec2(gl_InvocationID, vOut[gl_InvocationID].a);
+ tcOutB[gl_InvocationID].other[0] = gl_PrimitiveID + 10;
+ tcOutB[gl_InvocationID].other[1] = gl_PrimitiveID + 20;
+ tcOutB[gl_InvocationID].other[2] = gl_PrimitiveID + 30;
+ tcOutB[gl_InvocationID].variables = vec3(3.0f, vOut[gl_InvocationID].b, 17.0f);
+ tcOutC.stuff = vec3(1.0, 2.0, 3.0);
+ tcOutC.more_stuff = 4.0;
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tesc.qsb b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tesc.qsb
new file mode 100644
index 0000000000..b503d596c6
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tesc.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tese b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tese
new file mode 100644
index 0000000000..05430a5f63
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tese
@@ -0,0 +1,96 @@
+#version 440
+
+layout(triangles, fractional_odd_spacing, ccw) in;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+};
+
+layout(location = 5) in TescOutA {
+ vec3 color;
+ int id;
+}tcOutA[];
+
+layout(location = 10) in TescOutB {
+ vec2 some;
+ int other[3];
+ vec3 variables;
+}tcOutB[];
+
+layout(location = 2) patch in TescOutC {
+ vec3 stuff;
+ float more_stuff;
+}tcOutC;
+
+layout(location = 0) out vec3 outColor;
+
+struct A {
+ vec3 color;
+ int id;
+};
+
+struct B {
+ vec2 some;
+ int other[3];
+ vec3 variables;
+};
+
+struct C {
+ vec3 stuff;
+ float more_stuff;
+};
+
+struct Element {
+ A a[3];
+ B b[3];
+ C c;
+ vec4 tesslevelOuter;
+ vec2 tessLevelInner;
+ float pointSize[3];
+ float clipDistance[3][5];
+ vec3 tessCoord;
+ int patchVerticesIn;
+ int primitiveID;
+};
+
+layout(std430, binding = 1) buffer result {
+ int count;
+ Element elements[];
+};
+
+void main()
+{
+ gl_Position = mvp * ((gl_TessCoord.x * gl_in[0].gl_Position) + (gl_TessCoord.y * gl_in[1].gl_Position) + (gl_TessCoord.z * gl_in[2].gl_Position));
+ outColor = gl_TessCoord.x * tcOutA[0].color + gl_TessCoord.y * tcOutA[1].color + gl_TessCoord.z * tcOutA[2].color;
+
+ count = 1;
+
+ elements[gl_PrimitiveID].c.stuff = tcOutC.stuff;
+ elements[gl_PrimitiveID].c.more_stuff = tcOutC.more_stuff;
+ elements[gl_PrimitiveID].tesslevelOuter = vec4(gl_TessLevelOuter[0], gl_TessLevelOuter[1], gl_TessLevelOuter[2], gl_TessLevelOuter[3]);
+ elements[gl_PrimitiveID].tessLevelInner = vec2(gl_TessLevelInner[0], gl_TessLevelInner[1]);
+
+ for (int i = 0; i < 3; ++i) {
+
+ elements[gl_PrimitiveID].a[i].color = tcOutA[i].color;
+ elements[gl_PrimitiveID].a[i].id = tcOutA[i].id;
+
+ elements[gl_PrimitiveID].b[i].some = tcOutB[i].some;
+ elements[gl_PrimitiveID].b[i].other = tcOutB[i].other;
+ elements[gl_PrimitiveID].b[i].variables = tcOutB[i].variables;
+
+ elements[gl_PrimitiveID].pointSize[i] = gl_in[i].gl_PointSize;
+ elements[gl_PrimitiveID].clipDistance[i][0] = gl_in[i].gl_ClipDistance[0];
+ elements[gl_PrimitiveID].clipDistance[i][1] = gl_in[i].gl_ClipDistance[1];
+ elements[gl_PrimitiveID].clipDistance[i][2] = gl_in[i].gl_ClipDistance[2];
+ elements[gl_PrimitiveID].clipDistance[i][3] = gl_in[i].gl_ClipDistance[3];
+ elements[gl_PrimitiveID].clipDistance[i][4] = gl_in[i].gl_ClipDistance[4];
+
+ }
+
+ elements[gl_PrimitiveID].tessCoord = gl_TessCoord;
+ elements[gl_PrimitiveID].patchVerticesIn = 3;
+ elements[gl_PrimitiveID].primitiveID = gl_PrimitiveID;
+
+}
+
diff --git a/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tese.qsb b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tese.qsb
new file mode 100644
index 0000000000..898bda454a
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.tese.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.vert b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.vert
new file mode 100644
index 0000000000..7c722bb374
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.vert
@@ -0,0 +1,20 @@
+#version 440
+
+layout(location = 0) in vec3 position;
+layout(location = 1) in vec3 color;
+
+
+layout(location = 4) out VertOut
+{
+ vec3 v_color;
+ int a;
+ float b;
+};
+
+void main()
+{
+ gl_Position = vec4(position, 1.0);
+ v_color = color;
+ a = gl_VertexIndex;
+ b = 13.0f + gl_VertexIndex;
+}
diff --git a/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.vert.qsb b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.vert.qsb
new file mode 100644
index 0000000000..07384d643c
--- /dev/null
+++ b/tests/auto/gui/rhi/qrhi/data/tessinterfaceblocks.vert.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp b/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp
index e71e7a9a2f..8929b69cec 100644
--- a/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp
+++ b/tests/auto/gui/rhi/qrhi/tst_qrhi.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QThread>
@@ -34,31 +9,28 @@
#include <qrgbafloat.h>
#include <qrgba64.h>
-#include <QtGui/private/qrhi_p.h>
-#include <QtGui/private/qrhi_p_p.h>
-#include <QtGui/private/qrhinull_p.h>
+#include <private/qrhi_p.h>
#if QT_CONFIG(opengl)
# include <QOpenGLContext>
# include <QOpenGLFunctions>
-# include <QtGui/private/qrhigles2_p.h>
+# include <QtGui/private/qguiapplication_p.h>
+# include <qpa/qplatformintegration.h>
# define TST_GL
#endif
#if QT_CONFIG(vulkan)
# include <QVulkanInstance>
# include <QVulkanFunctions>
-# include <QtGui/private/qrhivulkan_p.h>
# define TST_VK
#endif
#ifdef Q_OS_WIN
-#include <QtGui/private/qrhid3d11_p.h>
# define TST_D3D11
+# define TST_D3D12
#endif
-#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
-# include <QtGui/private/qrhimetal_p.h>
+#if QT_CONFIG(metal)
# define TST_MTL
#endif
@@ -74,9 +46,10 @@ private slots:
void cleanupTestCase();
void rhiTestData();
- void rhiTestDataOpenGL();
void create_data();
void create();
+ void stats_data();
+ void stats();
void nativeHandles_data();
void nativeHandles();
void nativeHandlesImportVulkan();
@@ -98,6 +71,8 @@ private slots:
void resourceUpdateBatchTextureRawDataStride();
void resourceUpdateBatchLotsOfResources_data();
void resourceUpdateBatchLotsOfResources();
+ void resourceUpdateBatchBetweenFrames_data();
+ void resourceUpdateBatchBetweenFrames();
void invalidPipeline_data();
void invalidPipeline();
void srbLayoutCompatibility_data();
@@ -108,6 +83,8 @@ private slots:
void renderPassDescriptorCompatibility();
void renderPassDescriptorClone_data();
void renderPassDescriptorClone();
+ void textureWithSampleCount_data();
+ void textureWithSampleCount();
void renderToTextureSimple_data();
void renderToTextureSimple();
@@ -129,12 +106,16 @@ private slots:
void renderToTextureTexturedQuadAllDynamicBuffers();
void renderToTextureDeferredSrb_data();
void renderToTextureDeferredSrb();
+ void renderToTextureDeferredUpdateSamplerInSrb_data();
+ void renderToTextureDeferredUpdateSamplerInSrb();
void renderToTextureMultipleUniformBuffersAndDynamicOffset_data();
void renderToTextureMultipleUniformBuffersAndDynamicOffset();
void renderToTextureSrbReuse_data();
void renderToTextureSrbReuse();
void renderToTextureIndexedDraw_data();
void renderToTextureIndexedDraw();
+ void renderToTextureArrayMultiView_data();
+ void renderToTextureArrayMultiView();
void renderToWindowSimple_data();
void renderToWindowSimple();
void finishWithinSwapchainFrame_data();
@@ -146,12 +127,12 @@ private slots:
void pipelineCache_data();
void pipelineCache();
- void textureImportOpenGL_data();
void textureImportOpenGL();
- void renderbufferImportOpenGL_data();
void renderbufferImportOpenGL();
void threeDimTexture_data();
void threeDimTexture();
+ void oneDimTexture_data();
+ void oneDimTexture();
void leakedResourceDestroy_data();
void leakedResourceDestroy();
@@ -160,6 +141,22 @@ private slots:
void renderToRgb10Texture_data();
void renderToRgb10Texture();
+ void tessellation_data();
+ void tessellation();
+
+ void tessellationInterfaceBlocks_data();
+ void tessellationInterfaceBlocks();
+
+ void storageBuffer_data();
+ void storageBuffer();
+ void storageBufferRuntimeSizeCompute_data();
+ void storageBufferRuntimeSizeCompute();
+ void storageBufferRuntimeSizeGraphics_data();
+ void storageBufferRuntimeSizeGraphics();
+
+ void halfPrecisionAttributes_data();
+ void halfPrecisionAttributes();
+
private:
void setWindowType(QWindow *window, QRhi::Implementation impl);
@@ -172,7 +169,10 @@ private:
QRhiVulkanInitParams vk;
#endif
#ifdef TST_D3D11
- QRhiD3D11InitParams d3d;
+ QRhiD3D11InitParams d3d11;
+#endif
+#ifdef TST_D3D12
+ QRhiD3D12InitParams d3d12;
#endif
#ifdef TST_MTL
QRhiMetalInitParams mtl;
@@ -188,6 +188,12 @@ private:
void tst_QRhi::initTestCase()
{
#ifdef TST_GL
+ QSurfaceFormat fmt;
+ fmt.setDepthBufferSize(24);
+ fmt.setStencilBufferSize(8);
+ QSurfaceFormat::setDefaultFormat(fmt);
+
+ initParams.gl.format = QSurfaceFormat::defaultFormat();
fallbackSurface = QRhiGles2InitParams::newFallbackSurface();
initParams.gl.fallbackSurface = fallbackSurface;
#endif
@@ -197,7 +203,7 @@ void tst_QRhi::initTestCase()
if (supportedVersion >= QVersionNumber(1, 2))
vulkanInstance.setApiVersion(QVersionNumber(1, 2));
else if (supportedVersion >= QVersionNumber(1, 1))
- vulkanInstance.setApiVersion(QVersionNumber(1, 2));
+ vulkanInstance.setApiVersion(QVersionNumber(1, 1));
vulkanInstance.setLayers({ "VK_LAYER_KHRONOS_validation" });
vulkanInstance.setExtensions(QRhiVulkanInitParams::preferredInstanceExtensions());
vulkanInstance.create();
@@ -205,7 +211,10 @@ void tst_QRhi::initTestCase()
#endif
#ifdef TST_D3D11
- initParams.d3d.enableDebugLayer = true;
+ initParams.d3d11.enableDebugLayer = true;
+#endif
+#ifdef TST_D3D12
+ initParams.d3d12.enableDebugLayer = true;
#endif
}
@@ -223,32 +232,29 @@ void tst_QRhi::rhiTestData()
QTest::addColumn<QRhi::Implementation>("impl");
QTest::addColumn<QRhiInitParams *>("initParams");
+// webOS does not support raster (software) pipeline
+#ifndef Q_OS_WEBOS
QTest::newRow("Null") << QRhi::Null << static_cast<QRhiInitParams *>(&initParams.null);
+#endif
#ifdef TST_GL
- QTest::newRow("OpenGL") << QRhi::OpenGLES2 << static_cast<QRhiInitParams *>(&initParams.gl);
+ if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::OpenGL))
+ QTest::newRow("OpenGL") << QRhi::OpenGLES2 << static_cast<QRhiInitParams *>(&initParams.gl);
#endif
#ifdef TST_VK
if (vulkanInstance.isValid())
QTest::newRow("Vulkan") << QRhi::Vulkan << static_cast<QRhiInitParams *>(&initParams.vk);
#endif
#ifdef TST_D3D11
- QTest::newRow("Direct3D 11") << QRhi::D3D11 << static_cast<QRhiInitParams *>(&initParams.d3d);
+ QTest::newRow("Direct3D 11") << QRhi::D3D11 << static_cast<QRhiInitParams *>(&initParams.d3d11);
+#endif
+#ifdef TST_D3D12
+ QTest::newRow("Direct3D 12") << QRhi::D3D12 << static_cast<QRhiInitParams *>(&initParams.d3d12);
#endif
#ifdef TST_MTL
QTest::newRow("Metal") << QRhi::Metal << static_cast<QRhiInitParams *>(&initParams.mtl);
#endif
}
-void tst_QRhi::rhiTestDataOpenGL()
-{
- QTest::addColumn<QRhi::Implementation>("impl");
- QTest::addColumn<QRhiInitParams *>("initParams");
-
-#ifdef TST_GL
- QTest::newRow("OpenGL") << QRhi::OpenGLES2 << static_cast<QRhiInitParams *>(&initParams.gl);
-#endif
-}
-
void tst_QRhi::create_data()
{
rhiTestData();
@@ -271,10 +277,13 @@ void tst_QRhi::create()
QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
if (rhi) {
+ QVERIFY(QRhi::probe(impl, initParams));
+
qDebug() << rhi->driverInfo();
QCOMPARE(rhi->backend(), impl);
QVERIFY(strcmp(rhi->backendName(), ""));
+ QVERIFY(!strcmp(rhi->backendName(), QRhi::backendName(rhi->backend())));
QVERIFY(!rhi->driverInfo().deviceName.isEmpty());
QCOMPARE(rhi->thread(), QThread::currentThread());
@@ -309,8 +318,13 @@ void tst_QRhi::create()
QVERIFY(resUpd);
resUpd->release();
- QVERIFY(!rhi->supportedSampleCounts().isEmpty());
- QVERIFY(rhi->supportedSampleCounts().contains(1));
+ const QVector<int> supportedSampleCounts = rhi->supportedSampleCounts();
+ QVERIFY(!supportedSampleCounts.isEmpty());
+ QVERIFY(supportedSampleCounts.contains(1));
+ for (int i = 1; i < supportedSampleCounts.count(); ++i) {
+ // Verify the list is sorted. Internally the backends rely on this.
+ QVERIFY(supportedSampleCounts[i] > supportedSampleCounts[i - 1]);
+ }
QVERIFY(rhi->ubufAlignment() > 0);
QCOMPARE(rhi->ubufAligned(123), aligned(123, rhi->ubufAlignment()));
@@ -397,7 +411,21 @@ void tst_QRhi::create()
QRhi::PipelineCacheDataLoadSave,
QRhi::ImageDataStride,
QRhi::RenderBufferImport,
- QRhi::ThreeDimensionalTextures
+ QRhi::ThreeDimensionalTextures,
+ QRhi::RenderTo3DTextureSlice,
+ QRhi::TextureArrays,
+ QRhi::Tessellation,
+ QRhi::GeometryShader,
+ QRhi::TextureArrayRange,
+ QRhi::NonFillPolygonMode,
+ QRhi::OneDimensionalTextures,
+ QRhi::OneDimensionalTextureMipmaps,
+ QRhi::HalfAttributes,
+ QRhi::RenderToOneDimensionalTexture,
+ QRhi::ThreeDimensionalTextureMipmaps,
+ QRhi::MultiView,
+ QRhi::TextureViewFormat,
+ QRhi::ResolveDepthStencil
};
for (size_t i = 0; i <sizeof(features) / sizeof(QRhi::Feature); ++i)
rhi->isFeatureSupported(features[i]);
@@ -413,6 +441,38 @@ void tst_QRhi::create()
}
}
+void tst_QRhi::stats_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::stats()
+{
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing statistics getter");
+
+ QRhiStats stats = rhi->statistics();
+ qDebug() << stats;
+ QCOMPARE(stats.totalPipelineCreationTime, 0);
+
+ if (impl == QRhi::Vulkan) {
+ QScopedPointer<QRhiBuffer> buf(rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, 32768));
+ QVERIFY(buf->create());
+ QScopedPointer<QRhiTexture> tex(rhi->newTexture(QRhiTexture::RGBA8, QSize(1024, 1024)));
+ QVERIFY(tex->create());
+
+ stats = rhi->statistics();
+ qDebug() << stats;
+ QVERIFY(stats.allocCount > 0);
+ QVERIFY(stats.blockCount > 0);
+ QVERIFY(stats.usedBytes > 0);
+ }
+}
+
void tst_QRhi::nativeHandles_data()
{
rhiTestData();
@@ -439,10 +499,10 @@ void tst_QRhi::nativeHandles()
case QRhi::Vulkan:
{
const QRhiVulkanNativeHandles *vkHandles = static_cast<const QRhiVulkanNativeHandles *>(rhiHandles);
+ QVERIFY(vkHandles->inst);
+ QCOMPARE(vkHandles->inst, &vulkanInstance);
QVERIFY(vkHandles->physDev);
QVERIFY(vkHandles->dev);
- QVERIFY(vkHandles->gfxQueueFamilyIdx >= 0);
- QVERIFY(vkHandles->gfxQueueIdx >= 0);
QVERIFY(vkHandles->gfxQueue);
QVERIFY(vkHandles->vmemAllocator);
}
@@ -472,6 +532,17 @@ void tst_QRhi::nativeHandles()
}
break;
#endif
+#ifdef TST_D3D12
+ case QRhi::D3D12:
+ {
+ const QRhiD3D12NativeHandles *d3dHandles = static_cast<const QRhiD3D12NativeHandles *>(rhiHandles);
+ QVERIFY(d3dHandles->dev);
+ QVERIFY(d3dHandles->minimumFeatureLevel > 0);
+ QVERIFY(d3dHandles->adapterLuidLow || d3dHandles->adapterLuidHigh);
+ QVERIFY(d3dHandles->commandQueue);
+ }
+ break;
+#endif
#ifdef TST_MTL
case QRhi::Metal:
{
@@ -516,6 +587,10 @@ void tst_QRhi::nativeHandles()
case QRhi::D3D11:
break;
#endif
+#ifdef TST_D3D12
+ case QRhi::D3D12:
+ break;
+#endif
#ifdef TST_MTL
case QRhi::Metal:
{
@@ -575,6 +650,10 @@ void tst_QRhi::nativeHandles()
case QRhi::D3D11:
break;
#endif
+#ifdef TST_D3D12
+ case QRhi::D3D12:
+ break;
+#endif
#ifdef TST_MTL
case QRhi::Metal:
break;
@@ -642,7 +721,7 @@ void tst_QRhi::nativeHandlesImportVulkan()
void tst_QRhi::nativeHandlesImportD3D11()
{
#ifdef TST_D3D11
- QScopedPointer<QRhi> rhi(QRhi::create(QRhi::D3D11, &initParams.d3d, QRhi::Flags(), nullptr));
+ QScopedPointer<QRhi> rhi(QRhi::create(QRhi::D3D11, &initParams.d3d11, QRhi::Flags(), nullptr));
if (!rhi)
QSKIP("QRhi could not be created, skipping testing D3D11 native handle import");
@@ -654,7 +733,7 @@ void tst_QRhi::nativeHandlesImportD3D11()
h.featureLevel = 0; // see if these are queried as expected, even when not provided
h.adapterLuidLow = 0;
h.adapterLuidHigh = 0;
- QScopedPointer<QRhi> adoptingRhi(QRhi::create(QRhi::D3D11, &initParams.d3d, QRhi::Flags(), &h));
+ QScopedPointer<QRhi> adoptingRhi(QRhi::create(QRhi::D3D11, &initParams.d3d11, QRhi::Flags(), &h));
QVERIFY(adoptingRhi);
const QRhiD3D11NativeHandles *newNativeHandles = static_cast<const QRhiD3D11NativeHandles *>(adoptingRhi->nativeHandles());
QCOMPARE(newNativeHandles->dev, nativeHandles->dev);
@@ -669,7 +748,7 @@ void tst_QRhi::nativeHandlesImportD3D11()
QRhiD3D11NativeHandles h = *nativeHandles;
h.dev = nullptr;
h.context = nullptr;
- QScopedPointer<QRhi> adoptingRhi(QRhi::create(QRhi::D3D11, &initParams.d3d, QRhi::Flags(), &h));
+ QScopedPointer<QRhi> adoptingRhi(QRhi::create(QRhi::D3D11, &initParams.d3d11, QRhi::Flags(), &h));
QVERIFY(adoptingRhi);
const QRhiD3D11NativeHandles *newNativeHandles = static_cast<const QRhiD3D11NativeHandles *>(adoptingRhi->nativeHandles());
QVERIFY(newNativeHandles->dev != nativeHandles->dev);
@@ -689,7 +768,6 @@ void tst_QRhi::nativeHandlesImportOpenGL()
#ifdef TST_GL
QRhiGles2NativeHandles h;
QScopedPointer<QOpenGLContext> ctx(new QOpenGLContext);
- ctx->setFormat(QRhiGles2InitParams::adjustedFormat());
if (!ctx->create())
QSKIP("No OpenGL context, skipping OpenGL-specific test");
h.context = ctx.data();
@@ -755,6 +833,14 @@ void tst_QRhi::nativeTexture()
}
break;
#endif
+#ifdef TST_D3D12
+ case QRhi::D3D12:
+ {
+ auto *texture = reinterpret_cast<void *>(nativeTex.object);
+ QVERIFY(texture);
+ }
+ break;
+#endif
#ifdef TST_MTL
case QRhi::Metal:
{
@@ -830,6 +916,18 @@ void tst_QRhi::nativeBuffer()
}
break;
#endif
+ #ifdef TST_D3D12
+ case QRhi::D3D12:
+ {
+ QVERIFY(nativeBuf.slotCount >= 1); // always backed by native buffers
+ for (int i = 0; i < nativeBuf.slotCount; ++i) {
+ auto *buffer = static_cast<void * const *>(nativeBuf.objects[i]);
+ QVERIFY(buffer);
+ QVERIFY(*buffer);
+ }
+ }
+ break;
+ #endif
#ifdef TST_MTL
case QRhi::Metal:
{
@@ -894,7 +992,7 @@ void tst_QRhi::resourceUpdateBatchBuffer()
batch->updateDynamicBuffer(dynamicBuffer.data(), 10, bufferSize - 10, a.constData());
batch->updateDynamicBuffer(dynamicBuffer.data(), 0, 12, b.constData());
- QRhiBufferReadbackResult readResult;
+ QRhiReadbackResult readResult;
bool readCompleted = false;
readResult.completed = [&readCompleted] { readCompleted = true; };
batch->readBackBuffer(dynamicBuffer.data(), 5, 10, &readResult);
@@ -921,7 +1019,7 @@ void tst_QRhi::resourceUpdateBatchBuffer()
batch->uploadStaticBuffer(dynamicBuffer.data(), 10, bufferSize - 10, a.constData());
batch->uploadStaticBuffer(dynamicBuffer.data(), 0, 12, b.constData());
- QRhiBufferReadbackResult readResult;
+ QRhiReadbackResult readResult;
bool readCompleted = false;
readResult.completed = [&readCompleted] { readCompleted = true; };
@@ -1030,7 +1128,7 @@ void tst_QRhi::resourceUpdateBatchRGBATextureUpload()
QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
- QRhiTextureUploadEntry upload(0, 0, { image.constBits(), int(image.sizeInBytes()) });
+ QRhiTextureUploadEntry upload(0, 0, { image.constBits(), quint32(image.sizeInBytes()) });
QRhiTextureUploadDescription uploadDesc(upload);
batch->uploadTexture(texture.data(), uploadDesc);
@@ -1118,8 +1216,8 @@ void tst_QRhi::resourceUpdateBatchRGBATextureUpload()
// SourceTopLeft is not supported for non-QImage-based uploads.
const QImage im = image.copy(QRect(greenRectPos, copySize));
QRhiTextureSubresourceUploadDescription desc;
- desc.setData(QByteArray::fromRawData(reinterpret_cast<const char *>(im.constBits()),
- int(im.sizeInBytes())));
+ desc.setData(QByteArray::fromRawData(reinterpret_cast<const char *>(im.constBits()), im.sizeInBytes()));
+
desc.setSourceSize(copySize);
desc.setDestinationTopLeft(QPoint(gap, gap));
@@ -1443,6 +1541,86 @@ void tst_QRhi::resourceUpdateBatchLotsOfResources()
submitResourceUpdates(rhi.data(), b);
}
+void tst_QRhi::resourceUpdateBatchBetweenFrames_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::resourceUpdateBatchBetweenFrames()
+{
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing resource updates");
+
+ QImage image(128, 128, QImage::Format_RGBA8888_Premultiplied);
+ image.fill(Qt::red);
+ static const float bufferData[64] = {};
+
+ QRhiCommandBuffer *cb = nullptr;
+ QRhi::FrameOpResult result = rhi->beginOffscreenFrame(&cb);
+ QVERIFY(result == QRhi::FrameOpSuccess);
+ QVERIFY(cb);
+
+ static const int TEXTURE_COUNT = 123;
+ static const int BUFFER_COUNT = 456;
+
+ QRhiResourceUpdateBatch *u = rhi->nextResourceUpdateBatch();
+ std::vector<std::unique_ptr<QRhiTexture>> textures;
+ std::vector<std::unique_ptr<QRhiBuffer>> buffers;
+
+ for (int i = 0; i < TEXTURE_COUNT; ++i) {
+ std::unique_ptr<QRhiTexture> texture(rhi->newTexture(QRhiTexture::RGBA8,
+ image.size(),
+ 1,
+ QRhiTexture::UsedAsTransferSource));
+ QVERIFY(texture->create());
+ u->uploadTexture(texture.get(), image);
+ textures.push_back(std::move(texture));
+ }
+
+ for (int i = 0; i < BUFFER_COUNT; ++i) {
+ std::unique_ptr<QRhiBuffer> buffer(rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, 256));
+ QVERIFY(buffer->create());
+ u->uploadStaticBuffer(buffer.get(), bufferData);
+ buffers.push_back(std::move(buffer));
+ }
+
+ rhi->endOffscreenFrame();
+ cb = nullptr;
+
+ // 'u' stays valid, commit it in another frame
+
+ result = rhi->beginOffscreenFrame(&cb);
+ QVERIFY(result == QRhi::FrameOpSuccess);
+ QVERIFY(cb);
+
+ cb->resourceUpdate(u); // this should work
+
+ rhi->endOffscreenFrame();
+
+ u = rhi->nextResourceUpdateBatch();
+ QRhiReadbackResult readResult;
+ bool readCompleted = false;
+ readResult.completed = [&readCompleted] { readCompleted = true; };
+ u->readBackTexture(textures[5].get(), &readResult);
+
+ QVERIFY(submitResourceUpdates(rhi.data(), u));
+ QVERIFY(readCompleted);
+ QCOMPARE(readResult.format, QRhiTexture::RGBA8);
+ QCOMPARE(readResult.pixelSize, image.size());
+
+ QImage wrapperImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888_Premultiplied);
+ for (int y = 0; y < image.height(); ++y) {
+ for (int x = 0; x < image.width(); ++x)
+ QCOMPARE(wrapperImage.pixel(x, y), qRgba(255, 0, 0, 255));
+ }
+}
+
static QShader loadShader(const char *name)
{
QFile f(QString::fromUtf8(name));
@@ -2931,6 +3109,147 @@ void tst_QRhi::renderToTextureDeferredSrb()
QCOMPARE(result.pixel(4, 227), empty);
}
+void tst_QRhi::renderToTextureDeferredUpdateSamplerInSrb_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::renderToTextureDeferredUpdateSamplerInSrb()
+{
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing rendering");
+
+ QImage inputImage;
+ inputImage.load(QLatin1String(":/data/qt256.png"));
+ QVERIFY(!inputImage.isNull());
+
+ QScopedPointer<QRhiTexture> texture(rhi->newTexture(QRhiTexture::RGBA8, inputImage.size(), 1,
+ QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource));
+ QVERIFY(texture->create());
+
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ texture.data() }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->create());
+
+ QRhiCommandBuffer *cb = nullptr;
+ QVERIFY(rhi->beginOffscreenFrame(&cb) == QRhi::FrameOpSuccess);
+ QVERIFY(cb);
+
+ QRhiResourceUpdateBatch *updates = rhi->nextResourceUpdateBatch();
+
+ QScopedPointer<QRhiBuffer> vbuf(rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(quadVerticesUvs)));
+ QVERIFY(vbuf->create());
+ updates->uploadStaticBuffer(vbuf.data(), quadVerticesUvs);
+
+ QScopedPointer<QRhiTexture> inputTexture(rhi->newTexture(QRhiTexture::RGBA8, inputImage.size()));
+ QVERIFY(inputTexture->create());
+ updates->uploadTexture(inputTexture.data(), inputImage);
+
+ QScopedPointer<QRhiSampler> sampler1(rhi->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::Linear,
+ QRhiSampler::Repeat, QRhiSampler::Repeat));
+ QVERIFY(sampler1->create());
+ QScopedPointer<QRhiSampler> sampler2(rhi->newSampler(QRhiSampler::Nearest, QRhiSampler::Nearest, QRhiSampler::None,
+ QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge));
+ QVERIFY(sampler2->create());
+
+ QScopedPointer<QRhiBuffer> ubuf(rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64 + 4));
+ QVERIFY(ubuf->create());
+
+ QMatrix4x4 matrix;
+ updates->updateDynamicBuffer(ubuf.data(), 0, 64, matrix.constData());
+ float opacity = 0.5f;
+ updates->updateDynamicBuffer(ubuf.data(), 64, 4, &opacity);
+
+ const QRhiShaderResourceBinding::StageFlags commonVisibility = QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage;
+ QScopedPointer<QRhiShaderResourceBindings> srb(rhi->newShaderResourceBindings());
+ srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, commonVisibility, ubuf.data()),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, inputTexture.data(), sampler1.data())
+ });
+ QVERIFY(srb->create());
+
+ QScopedPointer<QRhiGraphicsPipeline> pipeline(rhi->newGraphicsPipeline());
+ pipeline->setTopology(QRhiGraphicsPipeline::TriangleStrip);
+ QShader vs = loadShader(":/data/textured.vert.qsb");
+ QVERIFY(vs.isValid());
+ QShader fs = loadShader(":/data/textured.frag.qsb");
+ QVERIFY(fs.isValid());
+ pipeline->setShaderStages({ { QRhiShaderStage::Vertex, vs }, { QRhiShaderStage::Fragment, fs } });
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({ { 4 * sizeof(float) } });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float2, 2 * sizeof(float) }
+ });
+ pipeline->setVertexInputLayout(inputLayout);
+ pipeline->setShaderResourceBindings(srb.data());
+ pipeline->setRenderPassDescriptor(rpDesc.data());
+
+ QVERIFY(pipeline->create());
+
+ // Now update the sampler to a different one, so if the pipeline->create()
+ // baked in static samplers somewhere (with 3D APIs where that's a thing),
+ // based on sampler1, that's now all invalid.
+ srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, commonVisibility, ubuf.data()),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, inputTexture.data(), sampler2.data())
+ });
+ srb->updateResources(); // now it references sampler2, not sampler1
+
+ cb->beginPass(rt.data(), Qt::black, { 1.0f, 0 }, updates);
+ cb->setGraphicsPipeline(pipeline.data());
+ cb->setShaderResources();
+ cb->setViewport({ 0, 0, float(texture->pixelSize().width()), float(texture->pixelSize().height()) });
+ QRhiCommandBuffer::VertexInput vbindings(vbuf.data(), 0);
+ cb->setVertexInput(0, 1, &vbindings);
+ cb->draw(4);
+
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888_Premultiplied);
+ };
+ QRhiResourceUpdateBatch *readbackBatch = rhi->nextResourceUpdateBatch();
+ readbackBatch->readBackTexture({ texture.data() }, &readResult);
+ cb->endPass(readbackBatch);
+
+ rhi->endOffscreenFrame();
+
+ QVERIFY(!result.isNull());
+
+ if (impl == QRhi::Null)
+ return;
+
+ if (rhi->isYUpInFramebuffer() != rhi->isYUpInNDC())
+ result = std::move(result).mirrored();
+
+ // opacity 0.5 (premultiplied)
+ static const auto checkSemiWhite = [](const QRgb &c) {
+ QRgb semiWhite127 = qPremultiply(qRgba(255, 255, 255, 127));
+ QRgb semiWhite128 = qPremultiply(qRgba(255, 255, 255, 128));
+ return c == semiWhite127 || c == semiWhite128;
+ };
+ QVERIFY(checkSemiWhite(result.pixel(79, 77)));
+ QVERIFY(checkSemiWhite(result.pixel(124, 81)));
+ QVERIFY(checkSemiWhite(result.pixel(128, 149)));
+ QVERIFY(checkSemiWhite(result.pixel(120, 189)));
+ QVERIFY(checkSemiWhite(result.pixel(116, 185)));
+ QVERIFY(checkSemiWhite(result.pixel(191, 172)));
+
+ QRgb empty = qRgba(0, 0, 0, 0);
+ QCOMPARE(result.pixel(11, 45), empty);
+ QCOMPARE(result.pixel(246, 202), empty);
+ QCOMPARE(result.pixel(130, 18), empty);
+ QCOMPARE(result.pixel(4, 227), empty);
+}
+
void tst_QRhi::renderToTextureMultipleUniformBuffersAndDynamicOffset_data()
{
rhiTestData();
@@ -3248,7 +3567,6 @@ void tst_QRhi::setWindowType(QWindow *window, QRhi::Implementation impl)
switch (impl) {
#ifdef TST_GL
case QRhi::OpenGLES2:
- window->setFormat(QRhiGles2InitParams::adjustedFormat());
window->setSurfaceType(QSurface::OpenGLSurface);
break;
#endif
@@ -3389,6 +3707,182 @@ void tst_QRhi::renderToTextureIndexedDraw()
QVERIFY(redCount > blueCount);
}
+void tst_QRhi::renderToTextureArrayMultiView_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::renderToTextureArrayMultiView()
+{
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing rendering");
+
+ if (!rhi->isFeatureSupported(QRhi::MultiView))
+ QSKIP("Multiview not supported, skipping testing on this backend");
+
+ if (rhi->backend() == QRhi::Vulkan && rhi->driverInfo().deviceType == QRhiDriverInfo::CpuDevice)
+ QSKIP("lavapipe does not like multiview, skip for now");
+
+ for (int sampleCount : rhi->supportedSampleCounts()) {
+ const QSize outputSize(1920, 1080);
+ QRhiTexture::Flags textureFlags = QRhiTexture::RenderTarget;
+ if (sampleCount <= 1)
+ textureFlags |= QRhiTexture::UsedAsTransferSource;
+ QScopedPointer<QRhiTexture> texture(rhi->newTextureArray(QRhiTexture::RGBA8, 2, outputSize, sampleCount, textureFlags));
+ QVERIFY(texture->create());
+
+ // exercise a depth-stencil buffer as well, not that the triangle needs it; note that this also needs to be a two-layer texture array
+ QScopedPointer<QRhiTexture> ds(rhi->newTextureArray(QRhiTexture::D24S8, 2, outputSize, sampleCount, QRhiTexture::RenderTarget));
+ QVERIFY(ds->create());
+
+ QScopedPointer<QRhiTexture> resolveTexture;
+ if (sampleCount > 1) {
+ resolveTexture.reset(rhi->newTextureArray(QRhiTexture::RGBA8, 2, outputSize, 1, QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource));
+ QVERIFY(resolveTexture->create());
+ }
+
+ QRhiColorAttachment multiViewAtt(texture.get());
+ multiViewAtt.setMultiViewCount(2);
+ if (sampleCount > 1)
+ multiViewAtt.setResolveTexture(resolveTexture.get());
+
+ QRhiTextureRenderTargetDescription rtDesc(multiViewAtt);
+ rtDesc.setDepthTexture(ds.get());
+
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget(rtDesc));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->create());
+
+ QRhiCommandBuffer *cb = nullptr;
+ QVERIFY(rhi->beginOffscreenFrame(&cb) == QRhi::FrameOpSuccess);
+ QVERIFY(cb);
+
+ QRhiResourceUpdateBatch *updates = rhi->nextResourceUpdateBatch();
+
+ static float triangleData[] = {
+ 0.0f, 0.5f, 1.0f, 0.0f, 0.0f,
+ -0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
+ 0.5f, -0.5f, 0.0f, 0.0f, 1.0f
+ };
+
+ QScopedPointer<QRhiBuffer> vbuf(rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(triangleData)));
+ QVERIFY(vbuf->create());
+ updates->uploadStaticBuffer(vbuf.data(), triangleData);
+
+ QScopedPointer<QRhiBuffer> ubuf(rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 128)); // mat4 mvp[2]
+ QVERIFY(ubuf->create());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb(rhi->newShaderResourceBindings());
+ srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, ubuf.get())
+ });
+ QVERIFY(srb->create());
+
+ QScopedPointer<QRhiGraphicsPipeline> ps(rhi->newGraphicsPipeline());
+ ps->setShaderStages({
+ { QRhiShaderStage::Vertex, loadShader(":/data/multiview.vert.qsb") },
+ { QRhiShaderStage::Fragment, loadShader(":/data/multiview.frag.qsb") }
+ });
+ ps->setMultiViewCount(2); // the view count must be set both on the render target and the pipeline
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 5 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float3, quint32(2 * sizeof(float)) }
+ });
+ ps->setDepthTest(true);
+ ps->setDepthWrite(true);
+ ps->setSampleCount(sampleCount);
+ ps->setVertexInputLayout(inputLayout);
+ ps->setShaderResourceBindings(srb.get());
+ ps->setRenderPassDescriptor(rpDesc.get());
+ QVERIFY(ps->create());
+
+ QMatrix4x4 mvp = rhi->clipSpaceCorrMatrix();
+ mvp.perspective(45.0f, outputSize.width() / float(outputSize.height()), 0.01f, 1000.0f);
+ mvp.translate(0, 0, -2);
+ mvp.rotate(90, 0, 0, 1); // point left
+ updates->updateDynamicBuffer(ubuf.get(), 0, 64, mvp.constData());
+ mvp.rotate(-180, 0, 0, 1); // point right
+ updates->updateDynamicBuffer(ubuf.get(), 64, 64, mvp.constData());
+
+ cb->beginPass(rt.data(), Qt::black, { 1.0f, 0 }, updates);
+ cb->setGraphicsPipeline(ps.data());
+ cb->setShaderResources();
+ cb->setViewport({ 0, 0, float(outputSize.width()), float(outputSize.height()) });
+ QRhiCommandBuffer::VertexInput vbindings(vbuf.data(), 0);
+ cb->setVertexInput(0, 1, &vbindings);
+ cb->draw(3);
+
+ QRhiResourceUpdateBatch *readbackBatch = rhi->nextResourceUpdateBatch();
+ QRhiReadbackResult readResult[2];
+ QRhiReadbackDescription readbackDesc;
+ if (sampleCount > 1)
+ readbackDesc.setTexture(resolveTexture.get());
+ else
+ readbackDesc.setTexture(texture.get());
+ readbackDesc.setLayer(0);
+ readbackBatch->readBackTexture(readbackDesc, &readResult[0]);
+ readbackDesc.setLayer(1);
+ readbackBatch->readBackTexture(readbackDesc, &readResult[1]);
+
+ cb->endPass(readbackBatch);
+
+ rhi->endOffscreenFrame();
+
+ if (rhi->backend() == QRhi::Null)
+ QSKIP("No real content with Null backend, skipping multiview content check");
+
+ // both readbacks should be finished now due to using offscreen frames
+
+ QImage image0 = QImage(reinterpret_cast<const uchar *>(readResult[0].data.constData()),
+ readResult[0].pixelSize.width(), readResult[0].pixelSize.height(),
+ QImage::Format_RGBA8888);
+ if (rhi->isYUpInFramebuffer()) // note that we used clipSpaceCorrMatrix
+ image0 = image0.mirrored();
+
+ QImage image1 = QImage(reinterpret_cast<const uchar *>(readResult[1].data.constData()),
+ readResult[1].pixelSize.width(), readResult[1].pixelSize.height(),
+ QImage::Format_RGBA8888);
+ if (rhi->isYUpInFramebuffer())
+ image1 = image1.mirrored();
+
+ QVERIFY(!image0.isNull());
+ QVERIFY(!image1.isNull());
+
+ // image0 should have a triangle rotated so that it points left with the red
+ // tip. image1 should have a triangle rotated so that it points right with
+ // the red tip. Both are centered, so we will check in range 0..width/2 for
+ // image0 and width/2..width-1 for image1 to see if the red-enough pixels
+ // are present.
+
+ int y = image0.height() / 2;
+ int n = 0;
+ for (int x = 0; x < image0.width() / 2; ++x) {
+ QRgb c = image0.pixel(x, y);
+ if (qRed(c) > 250 && qGreen(c) < 10 && qBlue(c) < 10)
+ ++n;
+ }
+ QVERIFY(n >= 10);
+
+ y = image1.height() / 2;
+ n = 0;
+ for (int x = image1.width() / 2; x < image1.width(); ++x) {
+ QRgb c = image1.pixel(x, y);
+ if (qRed(c) > 250 && qGreen(c) < 10 && qBlue(c) < 10)
+ ++n;
+ }
+ QVERIFY(n >= 10);
+ }
+}
+
void tst_QRhi::renderToWindowSimple_data()
{
rhiTestData();
@@ -3444,6 +3938,9 @@ void tst_QRhi::renderToWindowSimple()
QVERIFY(rhi->beginFrame(swapChain.data()) == QRhi::FrameOpSuccess);
QRhiCommandBuffer *cb = swapChain->currentFrameCommandBuffer();
QRhiRenderTarget *rt = swapChain->currentFrameRenderTarget();
+ QCOMPARE(rt->resourceType(), QRhiResource::SwapChainRenderTarget);
+ QVERIFY(rt->renderPassDescriptor());
+ QCOMPARE(static_cast<QRhiSwapChainRenderTarget *>(rt)->swapChain(), swapChain.data());
const QSize outputSize = swapChain->currentPixelSize();
QCOMPARE(rt->pixelSize(), outputSize);
QRhiViewport viewport(0, 0, float(outputSize.width()), float(outputSize.height()));
@@ -3640,7 +4137,7 @@ void tst_QRhi::resourceUpdateBatchBufferTextureWithSwapchainFrames()
const char *b = "abcdefghi";
bool readCompleted = false;
- QRhiBufferReadbackResult readResult;
+ QRhiReadbackResult readResult;
readResult.completed = [&readCompleted] { readCompleted = true; };
QRhiReadbackResult texReadResult;
texReadResult.completed = [&readCompleted] { readCompleted = true; };
@@ -3828,33 +4325,51 @@ void tst_QRhi::textureRenderTargetAutoRebuild()
if (!rhi)
QSKIP("QRhi could not be created, skipping testing rendering");
- QScopedPointer<QRhiTexture> texture(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 1, QRhiTexture::RenderTarget));
- QVERIFY(texture->create());
- QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ { texture.data() } }));
- QScopedPointer<QRhiRenderPassDescriptor> rp(rt->newCompatibleRenderPassDescriptor());
- rt->setRenderPassDescriptor(rp.data());
- QVERIFY(rt->create());
+ // case 1: beginPass's implicit create()
+ {
+ QScopedPointer<QRhiTexture> texture(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 1, QRhiTexture::RenderTarget));
+ QVERIFY(texture->create());
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ { texture.data() } }));
+ QScopedPointer<QRhiRenderPassDescriptor> rp(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rp.data());
+ QVERIFY(rt->create());
- QRhiCommandBuffer *cb = nullptr;
- QVERIFY(rhi->beginOffscreenFrame(&cb) == QRhi::FrameOpSuccess);
- QVERIFY(cb);
- cb->beginPass(rt.data(), Qt::red, { 1.0f, 0 });
- cb->endPass();
- rhi->endOffscreenFrame();
+ QRhiCommandBuffer *cb = nullptr;
+ QVERIFY(rhi->beginOffscreenFrame(&cb) == QRhi::FrameOpSuccess);
+ QVERIFY(cb);
+ cb->beginPass(rt.data(), Qt::red, { 1.0f, 0 });
+ cb->endPass();
+ rhi->endOffscreenFrame();
- texture->setPixelSize(QSize(256, 256));
- QVERIFY(texture->create());
- QCOMPARE(texture->pixelSize(), QSize(256, 256));
- // rt still has the old size and knows nothing about texture's underlying native texture resource possibly changing
- QCOMPARE(rt->pixelSize(), QSize(512, 512));
+ texture->setPixelSize(QSize(256, 256));
+ QVERIFY(texture->create());
+ QCOMPARE(texture->pixelSize(), QSize(256, 256));
- QVERIFY(rhi->beginOffscreenFrame(&cb) == QRhi::FrameOpSuccess);
- QVERIFY(cb);
- // no rt->create() but beginPass() does it implicitly for us
- cb->beginPass(rt.data(), Qt::red, { 1.0f, 0 });
- QCOMPARE(rt->pixelSize(), QSize(256, 256));
- cb->endPass();
- rhi->endOffscreenFrame();
+ QVERIFY(rhi->beginOffscreenFrame(&cb) == QRhi::FrameOpSuccess);
+ QVERIFY(cb);
+ // no rt->create() but beginPass() does it implicitly for us
+ cb->beginPass(rt.data(), Qt::red, { 1.0f, 0 });
+ QCOMPARE(rt->pixelSize(), QSize(256, 256));
+ cb->endPass();
+ rhi->endOffscreenFrame();
+ }
+
+ // case 2: pixelSize's implicit create()
+ {
+ QSize sz(512, 512);
+ QScopedPointer<QRhiTexture> texture(rhi->newTexture(QRhiTexture::RGBA8, sz, 1, QRhiTexture::RenderTarget));
+ QVERIFY(texture->create());
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ { texture.data() } }));
+ QScopedPointer<QRhiRenderPassDescriptor> rp(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rp.data());
+ QVERIFY(rt->create());
+ QCOMPARE(rt->pixelSize(), sz);
+
+ sz = QSize(256, 256);
+ texture->setPixelSize(sz);
+ QVERIFY(texture->create());
+ QCOMPARE(rt->pixelSize(), sz);
+ }
}
void tst_QRhi::srbLayoutCompatibility_data()
@@ -3896,7 +4411,7 @@ void tst_QRhi::srbLayoutCompatibility()
QVERIFY(srb2->isLayoutCompatible(srb1.data()));
QCOMPARE(srb1->serializedLayoutDescription(), srb2->serializedLayoutDescription());
- QVERIFY(srb1->serializedLayoutDescription().count() == 0);
+ QVERIFY(srb1->serializedLayoutDescription().size() == 0);
}
// different count (not compatible)
@@ -3914,8 +4429,8 @@ void tst_QRhi::srbLayoutCompatibility()
QVERIFY(!srb2->isLayoutCompatible(srb1.data()));
QVERIFY(srb1->serializedLayoutDescription() != srb2->serializedLayoutDescription());
- QVERIFY(srb1->serializedLayoutDescription().count() == 0);
- QVERIFY(srb2->serializedLayoutDescription().count() == 1 * QRhiShaderResourceBinding::LAYOUT_DESC_ENTRIES_PER_BINDING);
+ QVERIFY(srb1->serializedLayoutDescription().size() == 0);
+ QVERIFY(srb2->serializedLayoutDescription().size() == 1 * QRhiShaderResourceBinding::LAYOUT_DESC_ENTRIES_PER_BINDING);
}
// full match (compatible)
@@ -3940,7 +4455,7 @@ void tst_QRhi::srbLayoutCompatibility()
QVERIFY(!srb1->serializedLayoutDescription().isEmpty());
QVERIFY(!srb2->serializedLayoutDescription().isEmpty());
QCOMPARE(srb1->serializedLayoutDescription(), srb2->serializedLayoutDescription());
- QVERIFY(srb1->serializedLayoutDescription().count() == 2 * QRhiShaderResourceBinding::LAYOUT_DESC_ENTRIES_PER_BINDING);
+ QVERIFY(srb1->serializedLayoutDescription().size() == 2 * QRhiShaderResourceBinding::LAYOUT_DESC_ENTRIES_PER_BINDING);
// see what we would get if a binding list got serialized "manually", without pulling it out from the srb after building
// (the results should be identical)
@@ -4255,6 +4770,59 @@ void tst_QRhi::renderPassDescriptorCompatibility()
} else {
qDebug("Skipping texture format dependent tests");
}
+
+ if (rhi->isFeatureSupported(QRhi::MultiView)) {
+ {
+ QScopedPointer<QRhiTexture> texArr(rhi->newTextureArray(QRhiTexture::RGBA8, 2, QSize(512, 512), 1, QRhiTexture::RenderTarget));
+ QVERIFY(texArr->create());
+ QRhiColorAttachment multiViewAtt(texArr.data());
+ multiViewAtt.setMultiViewCount(2);
+ QRhiTextureRenderTargetDescription rtDesc(multiViewAtt);
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget(rtDesc));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->create());
+
+ QScopedPointer<QRhiTextureRenderTarget> rt2(rhi->newTextureRenderTarget(rtDesc));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc2(rt2->newCompatibleRenderPassDescriptor());
+ rt2->setRenderPassDescriptor(rpDesc2.data());
+ QVERIFY(rt2->create());
+
+ QVERIFY(rpDesc->isCompatible(rpDesc2.data()));
+ QVERIFY(rpDesc2->isCompatible(rpDesc.data()));
+ QCOMPARE(rpDesc->serializedFormat(), rpDesc2->serializedFormat());
+
+ QScopedPointer<QRhiRenderPassDescriptor> rpDescClone(rpDesc->newCompatibleRenderPassDescriptor());
+ QVERIFY(rpDesc->isCompatible(rpDescClone.data()));
+ QVERIFY(rpDesc2->isCompatible(rpDescClone.data()));
+ QCOMPARE(rpDesc->serializedFormat(), rpDescClone->serializedFormat());
+
+ // With Vulkan the multiViewCount really matters since it is baked
+ // in to underlying native object (VkRenderPass). Verify that the
+ // compatibility check fails when the view count differs. Other
+ // backends cannot do this test since they will likely report the
+ // rps being compatible regardless.
+ if (impl == QRhi::Vulkan) {
+ QRhiColorAttachment nonMultiViewAtt(texArr.data());
+ QRhiTextureRenderTargetDescription rtDesc3(nonMultiViewAtt);
+ QScopedPointer<QRhiTextureRenderTarget> rt3(rhi->newTextureRenderTarget(rtDesc3));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc3(rt3->newCompatibleRenderPassDescriptor());
+ rt3->setRenderPassDescriptor(rpDesc3.data());
+ QVERIFY(rt3->create());
+
+ QVERIFY(!rpDesc->isCompatible(rpDesc3.data()));
+ QVERIFY(!rpDesc2->isCompatible(rpDesc3.data()));
+ QVERIFY(rpDesc->serializedFormat() != rpDesc3->serializedFormat());
+
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc3Clone(rpDesc3->newCompatibleRenderPassDescriptor());
+ QVERIFY(!rpDesc->isCompatible(rpDesc3Clone.data()));
+ QVERIFY(!rpDesc2->isCompatible(rpDesc3Clone.data()));
+ QVERIFY(rpDesc->serializedFormat() != rpDesc3Clone->serializedFormat());
+ }
+ }
+ } else {
+ qDebug("Skipping multiview dependent tests");
+ }
}
void tst_QRhi::renderPassDescriptorClone_data()
@@ -4372,22 +4940,67 @@ void tst_QRhi::pipelineCache()
}
}
-void tst_QRhi::textureImportOpenGL_data()
+void tst_QRhi::textureWithSampleCount_data()
{
- rhiTestDataOpenGL();
+ rhiTestData();
}
-void tst_QRhi::textureImportOpenGL()
+void tst_QRhi::textureWithSampleCount()
{
QFETCH(QRhi::Implementation, impl);
- if (impl != QRhi::OpenGLES2)
- QSKIP("Skipping OpenGL-dependent test");
-
-#ifdef TST_GL
QFETCH(QRhiInitParams *, initParams);
QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing renderpass descriptors");
+
+ if (!rhi->isFeatureSupported(QRhi::MultisampleTexture))
+ QSKIP("No multisample texture support with this backend, skipping");
+
+ {
+ QScopedPointer<QRhiTexture> tex(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 1));
+ QVERIFY(tex->create());
+ }
+
+ // Ensure 0 is accepted the same way as 1.
+ {
+ QScopedPointer<QRhiTexture> tex(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 0));
+ QVERIFY(tex->create());
+ }
+
+ // Note that we intentionally do not pass in RenderTarget in flags. Where
+ // matters for create(), the backend is expected to act as if it was
+ // specified whenever samples > 1. (in practice it does not make sense to not
+ // have the flag for an msaa texture, but we only care about create() here)
+
+ // Pick the commonly supported sample count of 4.
+ {
+ QScopedPointer<QRhiTexture> tex(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 4));
+ QVERIFY(tex->create());
+ }
+
+ // Now a bogus value that is typically in-between the supported values.
+ {
+ QScopedPointer<QRhiTexture> tex(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 3));
+ QVERIFY(tex->create());
+ }
+
+ // Now a bogus value that is out of range.
+ {
+ QScopedPointer<QRhiTexture> tex(rhi->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 123));
+ QVERIFY(tex->create());
+ }
+}
+
+
+void tst_QRhi::textureImportOpenGL()
+{
+#ifdef TST_GL
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::OpenGL))
+ QSKIP("Skipping OpenGL-dependent test");
+
+ QScopedPointer<QRhi> rhi(QRhi::create(QRhi::OpenGLES2, &initParams.gl, QRhi::Flags(), nullptr));
+ if (!rhi)
QSKIP("QRhi could not be created, skipping testing native texture");
QVERIFY(rhi->makeThreadLocalNativeContextCurrent());
@@ -4426,21 +5039,13 @@ void tst_QRhi::textureImportOpenGL()
#endif
}
-void tst_QRhi::renderbufferImportOpenGL_data()
-{
- rhiTestDataOpenGL();
-}
-
void tst_QRhi::renderbufferImportOpenGL()
{
- QFETCH(QRhi::Implementation, impl);
- if (impl != QRhi::OpenGLES2)
- QSKIP("Skipping OpenGL-dependent test");
-
#ifdef TST_GL
- QFETCH(QRhiInitParams *, initParams);
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::OpenGL))
+ QSKIP("Skipping OpenGL-dependent test");
- QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ QScopedPointer<QRhi> rhi(QRhi::create(QRhi::OpenGLES2, &initParams.gl, QRhi::Flags(), nullptr));
if (!rhi)
QSKIP("QRhi could not be created, skipping testing native texture");
@@ -4532,7 +5137,7 @@ void tst_QRhi::threeDimTexture()
}
// mipmaps
- {
+ if (rhi->isFeatureSupported(QRhi::ThreeDimensionalTextureMipmaps)) {
QScopedPointer<QRhiTexture> texture(rhi->newTexture(QRhiTexture::RGBA8, WIDTH, HEIGHT, DEPTH,
1, QRhiTexture::MipMapped | QRhiTexture::UsedWithGenerateMips));
QVERIFY(texture->create());
@@ -4577,6 +5182,8 @@ void tst_QRhi::threeDimTexture()
// problems with this.
if (impl != QRhi::Null && impl != QRhi::OpenGLES2)
QVERIFY(imageRGBAEquals(result, referenceImage, 2));
+ } else {
+ qDebug("Skipping 3D texture mipmap generation test because it is reported as unsupported");
}
// render target (one slice)
@@ -4595,11 +5202,531 @@ void tst_QRhi::threeDimTexture()
rt->setRenderPassDescriptor(rp.data());
QVERIFY(rt->create());
+ // render to slice 23
+ QRhiCommandBuffer *cb = nullptr;
+ QVERIFY(rhi->beginOffscreenFrame(&cb) == QRhi::FrameOpSuccess);
+ QVERIFY(cb);
+ cb->beginPass(rt.data(), Qt::blue, { 1.0f, 0 });
+ // slice 23 is now blue
+ cb->endPass();
+ rhi->endOffscreenFrame();
+
+ // Fill all other slices with some color. We should be free to do this
+ // step *before* the "render to slice 23" block above as well. However,
+ // as QTBUG-111772 shows, some Vulkan implementations have problems
+ // then. (or it could be QRhi is doing something wrong, but there is no
+ // evidence of that yet) For now, keep the order of first rendering to
+ // a slice and then uploading data for the rest.
QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
QVERIFY(batch);
-
for (int i = 0; i < DEPTH; ++i) {
- QImage img(WIDTH, HEIGHT, QImage::Format_RGBA8888);
+ if (i != SLICE) {
+ QImage img(WIDTH, HEIGHT, QImage::Format_RGBA8888);
+ img.fill(QColor::fromRgb(i * 2, 0, 0));
+ QRhiTextureUploadEntry sliceUpload(i, 0, QRhiTextureSubresourceUploadDescription(img));
+ batch->uploadTexture(texture.data(), sliceUpload);
+ }
+ }
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+
+ // read back slice 23 (blue)
+ batch = rhi->nextResourceUpdateBatch();
+ QVERIFY(batch);
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ };
+ QRhiReadbackDescription readbackDescription(texture.data());
+ readbackDescription.setLayer(23);
+ batch->readBackTexture(readbackDescription, &readResult);
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ QVERIFY(!result.isNull());
+ QImage referenceImage(WIDTH, HEIGHT, result.format());
+ referenceImage.fill(QColor::fromRgbF(0.0f, 0.0f, 1.0f));
+ // the Null backend does not render so skip the verification for that
+ if (impl != QRhi::Null)
+ QVERIFY(imageRGBAEquals(result, referenceImage));
+
+ // read back slice 0 (black)
+ batch = rhi->nextResourceUpdateBatch();
+ result = QImage();
+ readbackDescription.setLayer(0);
+ batch->readBackTexture(readbackDescription, &readResult);
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ QVERIFY(!result.isNull());
+ referenceImage.fill(QColor::fromRgbF(0.0f, 0.0f, 0.0f));
+ QVERIFY(imageRGBAEquals(result, referenceImage));
+
+ // read back slice 127 (almost red)
+ batch = rhi->nextResourceUpdateBatch();
+ result = QImage();
+ readbackDescription.setLayer(127);
+ batch->readBackTexture(readbackDescription, &readResult);
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ QVERIFY(!result.isNull());
+ referenceImage.fill(QColor::fromRgb(254, 0, 0));
+ QVERIFY(imageRGBAEquals(result, referenceImage));
+ }
+}
+void tst_QRhi::oneDimTexture_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::oneDimTexture()
+{
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing 1D textures");
+
+ if (!rhi->isFeatureSupported(QRhi::OneDimensionalTextures))
+ QSKIP("Skipping testing 1D textures because they are reported as unsupported");
+
+ const int WIDTH = 512;
+ const int LAYERS = 128;
+
+ {
+ QScopedPointer<QRhiTexture> texture(rhi->newTexture(QRhiTexture::RGBA8, WIDTH, 0, 0));
+ QVERIFY(texture->create());
+
+ QVERIFY(texture->flags().testFlag(QRhiTexture::Flag::OneDimensional));
+
+ QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
+ QVERIFY(batch);
+
+ QImage img(WIDTH, 1, QImage::Format_RGBA8888);
+ img.fill(QColor::fromRgb(255, 0, 0));
+
+ QRhiTextureUploadEntry upload(0, 0, QRhiTextureSubresourceUploadDescription(img));
+ batch->uploadTexture(texture.data(), upload);
+
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ }
+
+ {
+ QScopedPointer<QRhiTexture> texture(
+ rhi->newTextureArray(QRhiTexture::RGBA8, LAYERS, QSize(WIDTH, 0)));
+ QVERIFY(texture->create());
+
+ QVERIFY(texture->flags().testFlag(QRhiTexture::Flag::OneDimensional));
+ QVERIFY(texture->flags().testFlag(QRhiTexture::Flag::TextureArray));
+
+ QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
+ QVERIFY(batch);
+
+ for (int i = 0; i < LAYERS; ++i) {
+ QImage img(WIDTH, 1, QImage::Format_RGBA8888);
+ img.fill(QColor::fromRgb(i * 2, 0, 0));
+ QRhiTextureUploadEntry layerUpload(i, 0, QRhiTextureSubresourceUploadDescription(img));
+ batch->uploadTexture(texture.data(), layerUpload);
+ }
+
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ }
+
+ // Copy from 2D texture to 1D texture
+ {
+ const int WIDTH = 256;
+ const int HEIGHT = 256;
+
+ QScopedPointer<QRhiTexture> srcTexture(rhi->newTexture(
+ QRhiTexture::RGBA8, WIDTH, HEIGHT, 0, 1, QRhiTexture::Flag::UsedAsTransferSource));
+ QVERIFY(srcTexture->create());
+
+ QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
+ QVERIFY(batch);
+
+ QImage img(WIDTH, HEIGHT, QImage::Format_RGBA8888);
+ for (int x = 0; x < WIDTH; ++x) {
+ for (int y = 0; y < HEIGHT; ++y) {
+ img.setPixelColor(x, y, QColor::fromRgb(x, y, 0));
+ }
+ }
+ QRhiTextureUploadEntry upload(0, 0, QRhiTextureSubresourceUploadDescription(img));
+ batch->uploadTexture(srcTexture.data(), upload);
+
+ QScopedPointer<QRhiTexture> dstTexture(rhi->newTexture(
+ QRhiTexture::RGBA8, WIDTH, 0, 0, 1, QRhiTexture::Flag::UsedAsTransferSource));
+ QVERIFY(dstTexture->create());
+
+ QRhiTextureCopyDescription copy;
+ copy.setPixelSize(QSize(WIDTH / 2, 1));
+ copy.setDestinationTopLeft(QPoint(WIDTH / 2, 0));
+ copy.setSourceTopLeft(QPoint(33, 67));
+ batch->copyTexture(dstTexture.data(), srcTexture.data(), copy);
+
+ copy.setDestinationTopLeft(QPoint(0, 0));
+ copy.setSourceTopLeft(QPoint(99, 12));
+ batch->copyTexture(dstTexture.data(), srcTexture.data(), copy);
+
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ };
+
+ QRhiReadbackDescription readbackDescription(dstTexture.data());
+ batch->readBackTexture(readbackDescription, &readResult);
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ QVERIFY(!result.isNull());
+ QImage referenceImage(WIDTH, 1, result.format());
+ for (int i = 0; i < WIDTH / 2; ++i) {
+ referenceImage.setPixelColor(i, 0, img.pixelColor(99 + i, 12));
+ referenceImage.setPixelColor(WIDTH / 2 + i, 0, img.pixelColor(33 + i, 67));
+ }
+
+ QVERIFY(imageRGBAEquals(result, referenceImage));
+ }
+
+ // Copy from 2D texture to 1D texture array
+ {
+ const int WIDTH = 256;
+ const int HEIGHT = 256;
+ const int LAYERS = 64;
+
+ QScopedPointer<QRhiTexture> srcTexture(rhi->newTexture(
+ QRhiTexture::RGBA8, WIDTH, HEIGHT, 0, 1, QRhiTexture::Flag::UsedAsTransferSource));
+ QVERIFY(srcTexture->create());
+
+ QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
+ QVERIFY(batch);
+
+ QImage img(WIDTH, HEIGHT, QImage::Format_RGBA8888);
+ for (int x = 0; x < WIDTH; ++x) {
+ for (int y = 0; y < HEIGHT; ++y) {
+ img.setPixelColor(x, y, QColor::fromRgb(x, y, 0));
+ }
+ }
+ QRhiTextureUploadEntry upload(0, 0, QRhiTextureSubresourceUploadDescription(img));
+ batch->uploadTexture(srcTexture.data(), upload);
+
+ QScopedPointer<QRhiTexture> dstTexture(
+ rhi->newTextureArray(QRhiTexture::RGBA8, LAYERS, QSize(WIDTH, 0), 1,
+ QRhiTexture::Flag::UsedAsTransferSource));
+ QVERIFY(dstTexture->create());
+
+ QRhiTextureCopyDescription copy;
+ copy.setPixelSize(QSize(WIDTH / 2, 1));
+ copy.setDestinationTopLeft(QPoint(WIDTH / 2, 0));
+ copy.setSourceTopLeft(QPoint(33, 67));
+ copy.setDestinationLayer(12);
+ batch->copyTexture(dstTexture.data(), srcTexture.data(), copy);
+
+ copy.setDestinationTopLeft(QPoint(0, 0));
+ copy.setSourceTopLeft(QPoint(99, 12));
+ batch->copyTexture(dstTexture.data(), srcTexture.data(), copy);
+
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ };
+
+ QRhiReadbackDescription readbackDescription(dstTexture.data());
+ readbackDescription.setLayer(12);
+ batch->readBackTexture(readbackDescription, &readResult);
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ QVERIFY(!result.isNull());
+ QImage referenceImage(WIDTH, 1, result.format());
+ for (int i = 0; i < WIDTH / 2; ++i) {
+ referenceImage.setPixelColor(i, 0, img.pixelColor(99 + i, 12));
+ referenceImage.setPixelColor(WIDTH / 2 + i, 0, img.pixelColor(33 + i, 67));
+ }
+
+ QVERIFY(imageRGBAEquals(result, referenceImage));
+ }
+
+ // Copy from 1D texture array to 1D texture
+ {
+ const int WIDTH = 256;
+ const int LAYERS = 256;
+
+ QScopedPointer<QRhiTexture> srcTexture(
+ rhi->newTextureArray(QRhiTexture::RGBA8, LAYERS, QSize(WIDTH, 0), 1,
+ QRhiTexture::Flag::UsedAsTransferSource));
+ QVERIFY(srcTexture->create());
+
+ QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
+ QVERIFY(batch);
+
+ for (int y = 0; y < LAYERS; ++y) {
+ QImage img(WIDTH, 1, QImage::Format_RGBA8888);
+ for (int x = 0; x < WIDTH; ++x) {
+ img.setPixelColor(x, 0, QColor::fromRgb(x, y, 0));
+ }
+ QRhiTextureUploadEntry upload(y, 0, QRhiTextureSubresourceUploadDescription(img));
+ batch->uploadTexture(srcTexture.data(), upload);
+ }
+
+ QScopedPointer<QRhiTexture> dstTexture(rhi->newTexture(
+ QRhiTexture::RGBA8, WIDTH, 0, 0, 1, QRhiTexture::Flag::UsedAsTransferSource));
+ QVERIFY(dstTexture->create());
+
+ QRhiTextureCopyDescription copy;
+ copy.setPixelSize(QSize(WIDTH / 2, 1));
+ copy.setDestinationTopLeft(QPoint(WIDTH / 2, 0));
+ copy.setSourceLayer(67);
+ copy.setSourceTopLeft(QPoint(33, 0));
+ batch->copyTexture(dstTexture.data(), srcTexture.data(), copy);
+
+ copy.setDestinationTopLeft(QPoint(0, 0));
+ copy.setSourceLayer(12);
+ copy.setSourceTopLeft(QPoint(99, 0));
+ batch->copyTexture(dstTexture.data(), srcTexture.data(), copy);
+
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ };
+
+ QRhiReadbackDescription readbackDescription(dstTexture.data());
+ batch->readBackTexture(readbackDescription, &readResult);
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ QVERIFY(!result.isNull());
+ QImage referenceImage(WIDTH, 1, result.format());
+ for (int i = 0; i < WIDTH / 2; ++i) {
+ referenceImage.setPixelColor(i, 0, QColor::fromRgb(99 + i, 12, 0));
+ referenceImage.setPixelColor(WIDTH / 2 + i, 0, QColor::fromRgb(33 + i, 67, 0));
+ }
+
+ QVERIFY(imageRGBAEquals(result, referenceImage));
+ }
+
+ // Copy from 1D texture to 1D texture array
+ {
+ const int WIDTH = 256;
+ const int LAYERS = 256;
+
+ QScopedPointer<QRhiTexture> srcTexture(rhi->newTexture(
+ QRhiTexture::RGBA8, WIDTH, 0, 0, 1, QRhiTexture::Flag::UsedAsTransferSource));
+ QVERIFY(srcTexture->create());
+
+ QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
+ QVERIFY(batch);
+
+ QImage img(WIDTH, 1, QImage::Format_RGBA8888);
+ for (int x = 0; x < WIDTH; ++x) {
+ img.setPixelColor(x, 0, QColor::fromRgb(x, 0, 0));
+ }
+ QRhiTextureUploadEntry upload(0, 0, QRhiTextureSubresourceUploadDescription(img));
+ batch->uploadTexture(srcTexture.data(), upload);
+
+ QScopedPointer<QRhiTexture> dstTexture(
+ rhi->newTextureArray(QRhiTexture::RGBA8, LAYERS, QSize(WIDTH, 0), 1,
+ QRhiTexture::Flag::UsedAsTransferSource));
+ QVERIFY(dstTexture->create());
+
+ QRhiTextureCopyDescription copy;
+ copy.setPixelSize(QSize(WIDTH / 2, 1));
+ copy.setDestinationTopLeft(QPoint(WIDTH / 2, 0));
+ copy.setDestinationLayer(67);
+ copy.setSourceTopLeft(QPoint(33, 0));
+ batch->copyTexture(dstTexture.data(), srcTexture.data(), copy);
+
+ copy.setDestinationTopLeft(QPoint(0, 0));
+ copy.setSourceTopLeft(QPoint(99, 0));
+ batch->copyTexture(dstTexture.data(), srcTexture.data(), copy);
+
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ };
+
+ QRhiReadbackDescription readbackDescription(dstTexture.data());
+ readbackDescription.setLayer(67);
+ batch->readBackTexture(readbackDescription, &readResult);
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ QVERIFY(!result.isNull());
+ QImage referenceImage(WIDTH, 1, result.format());
+ for (int i = 0; i < WIDTH / 2; ++i) {
+ referenceImage.setPixelColor(i, 0, QColor::fromRgb(99 + i, 0, 0));
+ referenceImage.setPixelColor(WIDTH / 2 + i, 0, QColor::fromRgb(33 + i, 0, 0));
+ }
+
+ QVERIFY(imageRGBAEquals(result, referenceImage));
+ }
+
+ // mipmaps and 1D render target
+ if (!rhi->isFeatureSupported(QRhi::OneDimensionalTextureMipmaps)
+ || !rhi->isFeatureSupported(QRhi::RenderToOneDimensionalTexture))
+ {
+ QSKIP("Skipping testing 1D texture mipmaps and 1D render target because they are reported as unsupported");
+ }
+
+ {
+ QScopedPointer<QRhiTexture> texture(
+ rhi->newTexture(QRhiTexture::RGBA8, WIDTH, 0, 0, 1,
+ QRhiTexture::MipMapped | QRhiTexture::UsedWithGenerateMips));
+ QVERIFY(texture->create());
+
+ QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
+ QVERIFY(batch);
+
+ QImage img(WIDTH, 1, QImage::Format_RGBA8888);
+ img.fill(QColor::fromRgb(128, 0, 0));
+ QRhiTextureUploadEntry upload(0, 0, QRhiTextureSubresourceUploadDescription(img));
+ batch->uploadTexture(texture.data(), upload);
+
+ batch->generateMips(texture.data());
+
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+
+ // read back level 1 (256x1, #800000ff)
+ batch = rhi->nextResourceUpdateBatch();
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ };
+ QRhiReadbackDescription readbackDescription(texture.data());
+ readbackDescription.setLevel(1);
+ readbackDescription.setLayer(0);
+ batch->readBackTexture(readbackDescription, &readResult);
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ QVERIFY(!result.isNull());
+ QImage referenceImage(WIDTH / 2, 1, result.format());
+ referenceImage.fill(QColor::fromRgb(128, 0, 0));
+
+ QVERIFY(imageRGBAEquals(result, referenceImage, 2));
+ }
+
+ {
+ QScopedPointer<QRhiTexture> texture(
+ rhi->newTextureArray(QRhiTexture::RGBA8, LAYERS, QSize(WIDTH, 0), 1,
+ QRhiTexture::MipMapped | QRhiTexture::UsedWithGenerateMips));
+ QVERIFY(texture->create());
+
+ QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
+ QVERIFY(batch);
+
+ for (int i = 0; i < LAYERS; ++i) {
+ QImage img(WIDTH, 1, QImage::Format_RGBA8888);
+ img.fill(QColor::fromRgb(i * 2, 0, 0));
+ QRhiTextureUploadEntry sliceUpload(i, 0, QRhiTextureSubresourceUploadDescription(img));
+ batch->uploadTexture(texture.data(), sliceUpload);
+ }
+
+ batch->generateMips(texture.data());
+
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+
+ // read back slice 63 of level 1 (256x1, #7E0000FF)
+ batch = rhi->nextResourceUpdateBatch();
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ };
+ QRhiReadbackDescription readbackDescription(texture.data());
+ readbackDescription.setLevel(1);
+ readbackDescription.setLayer(63);
+ batch->readBackTexture(readbackDescription, &readResult);
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ QVERIFY(!result.isNull());
+ QImage referenceImage(WIDTH / 2, 1, result.format());
+ referenceImage.fill(QColor::fromRgb(126, 0, 0));
+
+ // Now restrict the test a bit. The Null QRhi backend has broken support for
+ // mipmap generation of 1D texture arrays.
+ if (impl != QRhi::Null)
+ QVERIFY(imageRGBAEquals(result, referenceImage, 2));
+ }
+
+ // 1D texture render target
+ // NB with Vulkan we require Vulkan 1.1 for this to work.
+ // Metal does not allow 1D texture render targets
+ {
+ QScopedPointer<QRhiTexture> texture(
+ rhi->newTexture(QRhiTexture::RGBA8, WIDTH, 0, 0, 1,
+ QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource));
+ QVERIFY(texture->create());
+
+ QRhiColorAttachment att(texture.data());
+ QRhiTextureRenderTargetDescription rtDesc(att);
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget(rtDesc));
+ QScopedPointer<QRhiRenderPassDescriptor> rp(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rp.data());
+ QVERIFY(rt->create());
+
+ QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
+ QVERIFY(batch);
+
+ QImage img(WIDTH, 1, QImage::Format_RGBA8888);
+ img.fill(QColor::fromRgb(128, 0, 0));
+ QRhiTextureUploadEntry upload(0, 0, QRhiTextureSubresourceUploadDescription(img));
+ batch->uploadTexture(texture.data(), upload);
+
+ QRhiCommandBuffer *cb = nullptr;
+ QVERIFY(rhi->beginOffscreenFrame(&cb) == QRhi::FrameOpSuccess);
+ QVERIFY(cb);
+ cb->beginPass(rt.data(), Qt::blue, { 1.0f, 0 }, batch);
+ // texture is now blue
+ cb->endPass();
+ rhi->endOffscreenFrame();
+
+ // read back texture (blue)
+ batch = rhi->nextResourceUpdateBatch();
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ };
+ QRhiReadbackDescription readbackDescription(texture.data());
+ batch->readBackTexture(readbackDescription, &readResult);
+ QVERIFY(submitResourceUpdates(rhi.data(), batch));
+ QVERIFY(!result.isNull());
+ QImage referenceImage(WIDTH, 1, result.format());
+ referenceImage.fill(QColor::fromRgbF(0.0f, 0.0f, 1.0f));
+ // the Null backend does not render so skip the verification for that
+ if (impl != QRhi::Null)
+ QVERIFY(imageRGBAEquals(result, referenceImage));
+ }
+
+ // 1D array texture render target (one slice)
+ // NB with Vulkan we require Vulkan 1.1 for this to work.
+ // Metal does not allow 1D texture render targets
+ {
+ const int SLICE = 23;
+ QScopedPointer<QRhiTexture> texture(rhi->newTextureArray(
+ QRhiTexture::RGBA8, LAYERS, QSize(WIDTH, 0), 1,
+ QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource));
+ QVERIFY(texture->create());
+
+ QRhiColorAttachment att(texture.data());
+ att.setLayer(SLICE);
+ QRhiTextureRenderTargetDescription rtDesc(att);
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget(rtDesc));
+ QScopedPointer<QRhiRenderPassDescriptor> rp(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rp.data());
+ QVERIFY(rt->create());
+
+ QRhiResourceUpdateBatch *batch = rhi->nextResourceUpdateBatch();
+ QVERIFY(batch);
+
+ for (int i = 0; i < LAYERS; ++i) {
+ QImage img(WIDTH, 1, QImage::Format_RGBA8888);
img.fill(QColor::fromRgb(i * 2, 0, 0));
QRhiTextureUploadEntry sliceUpload(i, 0, QRhiTextureSubresourceUploadDescription(img));
batch->uploadTexture(texture.data(), sliceUpload);
@@ -4627,7 +5754,7 @@ void tst_QRhi::threeDimTexture()
batch->readBackTexture(readbackDescription, &readResult);
QVERIFY(submitResourceUpdates(rhi.data(), batch));
QVERIFY(!result.isNull());
- QImage referenceImage(WIDTH, HEIGHT, result.format());
+ QImage referenceImage(WIDTH, 1, result.format());
referenceImage.fill(QColor::fromRgbF(0.0f, 0.0f, 1.0f));
// the Null backend does not render so skip the verification for that
if (impl != QRhi::Null)
@@ -4694,12 +5821,36 @@ void tst_QRhi::leakedResourceDestroy()
rt->setRenderPassDescriptor(rpDesc.data());
QVERIFY(rt->create());
+ QRhiRenderBuffer *rb = rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil, QSize(512, 512));
+ QVERIFY(rb->create());
+
+ QRhiShaderResourceBindings *srb = rhi->newShaderResourceBindings();
+ QVERIFY(srb->create());
+
if (impl == QRhi::Vulkan)
qDebug("Vulkan validation layer warnings may be printed below - this is expected");
+ if (impl == QRhi::D3D12)
+ qDebug("QD3D12CpuDescriptorPool warnings may be printed below - this is expected");
+
+ qDebug("QRhi resource leak check warnings may be printed below - this is expected");
+
+ // make the QRhi go away early
rhi.reset();
- // let the scoped ptr do its job with the resources
+ // see if the internal rhi backpointer got nulled out
+ QVERIFY(buffer->rhi() == nullptr);
+ QVERIFY(texture->rhi() == nullptr);
+ QVERIFY(rt->rhi() == nullptr);
+ QVERIFY(rpDesc->rhi() == nullptr);
+ QVERIFY(rb->rhi() == nullptr);
+ QVERIFY(srb->rhi() == nullptr);
+
+ // test out deleteLater on some of the resources
+ rb->deleteLater();
+ srb->deleteLater();
+
+ // let the scoped ptr do its job with the rest
}
void tst_QRhi::renderToFloatTexture_data()
@@ -4879,5 +6030,1055 @@ void tst_QRhi::renderToRgb10Texture()
QVERIFY(redCount > blueCount); // 1742 > 178
}
+void tst_QRhi::tessellation_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::tessellation()
+{
+#ifdef Q_OS_ANDROID
+ if (QNativeInterface::QAndroidApplication::sdkVersion() >= 31)
+ QSKIP("Fails on Android 12 (QTBUG-108844)");
+#endif
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing rendering");
+
+ if (!rhi->isFeatureSupported(QRhi::Tessellation)) {
+ // From a Vulkan or Metal implementation we expect tessellation to work,
+ // even though it is optional (as per spec) for Vulkan.
+ QVERIFY(rhi->backend() != QRhi::Vulkan);
+ QVERIFY(rhi->backend() != QRhi::Metal);
+ QSKIP("Tessellation is not supported with this graphics API, skipping test");
+ }
+
+ if (rhi->backend() == QRhi::D3D11 || rhi->backend() == QRhi::D3D12)
+ QSKIP("Skipping tessellation test on D3D for now, test assets not prepared for HLSL yet");
+
+ QScopedPointer<QRhiTexture> texture(rhi->newTexture(QRhiTexture::RGBA8, QSize(1280, 720), 1,
+ QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource));
+ QVERIFY(texture->create());
+
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ texture.data() }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->create());
+
+ static const float triangleVertices[] = {
+ 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f,
+ -0.5f, -0.5f, 0.0f, 1.0f, 0.0f, 0.0f,
+ 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,
+ };
+
+ QRhiResourceUpdateBatch *u = rhi->nextResourceUpdateBatch();
+ QScopedPointer<QRhiBuffer> vbuf(rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(triangleVertices)));
+ QVERIFY(vbuf->create());
+ u->uploadStaticBuffer(vbuf.data(), triangleVertices);
+
+ QScopedPointer<QRhiBuffer> ubuf(rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64));
+ QVERIFY(ubuf->create());
+
+ // Use the 3D API specific correction matrix that flips Y, so we can use
+ // the OpenGL-targeted vertex data and the tessellation winding order of
+ // counter-clockwise to get uniform results.
+ QMatrix4x4 mvp = rhi->clipSpaceCorrMatrix();
+ u->updateDynamicBuffer(ubuf.data(), 0, 64, mvp.constData());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb(rhi->newShaderResourceBindings());
+ srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::TessellationEvaluationStage, ubuf.data()),
+ });
+ QVERIFY(srb->create());
+
+ QScopedPointer<QRhiGraphicsPipeline> pipeline(rhi->newGraphicsPipeline());
+
+ pipeline->setTopology(QRhiGraphicsPipeline::Patches);
+ pipeline->setPatchControlPointCount(3);
+
+ pipeline->setShaderStages({
+ { QRhiShaderStage::Vertex, loadShader(":/data/simpletess.vert.qsb") },
+ { QRhiShaderStage::TessellationControl, loadShader(":/data/simpletess.tesc.qsb") },
+ { QRhiShaderStage::TessellationEvaluation, loadShader(":/data/simpletess.tese.qsb") },
+ { QRhiShaderStage::Fragment, loadShader(":/data/simpletess.frag.qsb") }
+ });
+
+ pipeline->setCullMode(QRhiGraphicsPipeline::Back); // to ensure the winding order is correct
+
+ // won't get the wireframe with OpenGL ES
+ if (rhi->isFeatureSupported(QRhi::NonFillPolygonMode))
+ pipeline->setPolygonMode(QRhiGraphicsPipeline::Line);
+
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 6 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float3, 3 * sizeof(float) }
+ });
+
+ pipeline->setVertexInputLayout(inputLayout);
+ pipeline->setShaderResourceBindings(srb.data());
+ pipeline->setRenderPassDescriptor(rpDesc.data());
+
+ QVERIFY(pipeline->create());
+
+ QRhiCommandBuffer *cb = nullptr;
+ QCOMPARE(rhi->beginOffscreenFrame(&cb), QRhi::FrameOpSuccess);
+
+ cb->beginPass(rt.data(), Qt::black, { 1.0f, 0 }, u);
+ cb->setGraphicsPipeline(pipeline.data());
+ cb->setViewport({ 0, 0, float(rt->pixelSize().width()), float(rt->pixelSize().height()) });
+ cb->setShaderResources();
+ QRhiCommandBuffer::VertexInput vbufBinding(vbuf.data(), 0);
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(3);
+
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ };
+ QRhiResourceUpdateBatch *readbackBatch = rhi->nextResourceUpdateBatch();
+ readbackBatch->readBackTexture({ texture.data() }, &readResult);
+ cb->endPass(readbackBatch);
+
+ rhi->endOffscreenFrame();
+
+ if (rhi->isYUpInFramebuffer()) // we used clipSpaceCorrMatrix so this is different from many other tests
+ result = std::move(result).mirrored();
+
+ QCOMPARE(result.size(), rt->pixelSize());
+
+ // cannot check rendering results with Null, because there is no rendering there
+ if (impl == QRhi::Null)
+ return;
+
+ int redCount = 0, greenCount = 0, blueCount = 0;
+ for (int y = 0; y < result.height(); ++y) {
+ const quint32 *p = reinterpret_cast<const quint32 *>(result.constScanLine(y));
+ int x = result.width() - 1;
+ while (x-- >= 0) {
+ const QRgb c(*p++);
+ const int red = qRed(c);
+ const int green = qGreen(c);
+ const int blue = qBlue(c);
+ // just count the color components that are above a certain threshold
+ if (red > 240)
+ ++redCount;
+ if (green > 240)
+ ++greenCount;
+ if (blue > 240)
+ ++blueCount;
+ }
+ }
+
+ // Line drawing can be different between the 3D APIs. What we will check if
+ // the number of strong-enough r/g/b components above a certain threshold.
+ // That is good enough to ensure that something got rendered, i.e. that
+ // tessellation is not completely broken.
+ //
+ // For the record the actual values are something like:
+ // OpenGL (NVIDIA, Windows) 59 82 82
+ // Metal (Intel, macOS 12.5) 59 79 79
+ // Vulkan (NVIDIA, Windows) 71 85 85
+
+ QVERIFY(redCount > 50);
+ QVERIFY(blueCount > 50);
+ QVERIFY(greenCount > 50);
+}
+
+void tst_QRhi::tessellationInterfaceBlocks_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::tessellationInterfaceBlocks()
+{
+#ifdef Q_OS_ANDROID
+ if (QNativeInterface::QAndroidApplication::sdkVersion() >= 31)
+ QSKIP("Fails on Android 12 (QTBUG-108844)");
+#endif
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ // This test is intended for Metal, but will run on other tessellation render pipelines
+ //
+ // Metal tessellation uses a combination of compute pipelines for the vert and tesc, and a
+ // render pipeline for the tese and frag. This test uses input output interface blocks between
+ // the tesc and tese, and all tese stage builtin inputs to check that the Metal tese-frag
+ // pipeline vertex inputs are correctly configured. The tese writes the values to a storage
+ // buffer whose values are checked by the unit test. MSL 2.1 is required for this test.
+ // (requires support for writing to a storage buffer in the vertex shader within a render
+ // pipeline)
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing rendering");
+
+ if (!rhi->isFeatureSupported(QRhi::Tessellation)) {
+ // From a Vulkan or Metal implementation we expect tessellation to work,
+ // even though it is optional (as per spec) for Vulkan.
+ QVERIFY(rhi->backend() != QRhi::Vulkan);
+ QVERIFY(rhi->backend() != QRhi::Metal);
+ QSKIP("Tessellation is not supported with this graphics API, skipping test");
+ }
+
+ if (rhi->backend() == QRhi::D3D11 || rhi->backend() == QRhi::D3D12)
+ QSKIP("Skipping tessellation test on D3D for now, test assets not prepared for HLSL yet");
+
+ if (rhi->backend() == QRhi::OpenGLES2)
+ QSKIP("Skipping test on OpenGL as gl_ClipDistance[] support inconsistent");
+
+ QScopedPointer<QRhiTexture> texture(
+ rhi->newTexture(QRhiTexture::RGBA8, QSize(1280, 720), 1,
+ QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource));
+ QVERIFY(texture->create());
+
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ texture.data() }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->create());
+
+ static const float triangleVertices[] = {
+ 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f, -0.5f, -0.5f, 0.0f,
+ 1.0f, 0.0f, 0.0f, 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,
+ };
+
+ QRhiResourceUpdateBatch *u = rhi->nextResourceUpdateBatch();
+ QScopedPointer<QRhiBuffer> vbuf(rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer,
+ sizeof(triangleVertices)));
+ QVERIFY(vbuf->create());
+ u->uploadStaticBuffer(vbuf.data(), triangleVertices);
+
+ QScopedPointer<QRhiBuffer> ubuf(
+ rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64));
+ QVERIFY(ubuf->create());
+
+ // Use the 3D API specific correction matrix that flips Y, so we can use
+ // the OpenGL-targeted vertex data and the tessellation winding order of
+ // counter-clockwise to get uniform results.
+ QMatrix4x4 mvp = rhi->clipSpaceCorrMatrix();
+ u->updateDynamicBuffer(ubuf.data(), 0, 64, mvp.constData());
+
+ QScopedPointer<QRhiBuffer> buffer(
+ rhi->newBuffer(QRhiBuffer::Static, QRhiBuffer::UsageFlag::StorageBuffer, 1024));
+ QVERIFY(buffer->create());
+
+ u->uploadStaticBuffer(buffer.data(), 0, 1024, QByteArray(1024, 0).constData());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb(rhi->newShaderResourceBindings());
+ srb->setBindings(
+ { QRhiShaderResourceBinding::uniformBuffer(
+ 0, QRhiShaderResourceBinding::TessellationEvaluationStage, ubuf.data()),
+ QRhiShaderResourceBinding::bufferLoadStore(
+ 1, QRhiShaderResourceBinding::TessellationEvaluationStage, buffer.data()) });
+ QVERIFY(srb->create());
+
+ QScopedPointer<QRhiGraphicsPipeline> pipeline(rhi->newGraphicsPipeline());
+
+ pipeline->setTopology(QRhiGraphicsPipeline::Patches);
+ pipeline->setPatchControlPointCount(3);
+
+ pipeline->setShaderStages(
+ { { QRhiShaderStage::Vertex, loadShader(":/data/tessinterfaceblocks.vert.qsb") },
+ { QRhiShaderStage::TessellationControl,
+ loadShader(":/data/tessinterfaceblocks.tesc.qsb") },
+ { QRhiShaderStage::TessellationEvaluation,
+ loadShader(":/data/tessinterfaceblocks.tese.qsb") },
+ { QRhiShaderStage::Fragment, loadShader(":/data/tessinterfaceblocks.frag.qsb") } });
+
+ pipeline->setCullMode(QRhiGraphicsPipeline::Back); // to ensure the winding order is correct
+
+ // won't get the wireframe with OpenGL ES
+ if (rhi->isFeatureSupported(QRhi::NonFillPolygonMode))
+ pipeline->setPolygonMode(QRhiGraphicsPipeline::Line);
+
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({ { 6 * sizeof(float) } });
+ inputLayout.setAttributes({ { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float3, 3 * sizeof(float) } });
+
+ pipeline->setVertexInputLayout(inputLayout);
+ pipeline->setShaderResourceBindings(srb.data());
+ pipeline->setRenderPassDescriptor(rpDesc.data());
+
+ QVERIFY(pipeline->create());
+
+ QRhiCommandBuffer *cb = nullptr;
+ QCOMPARE(rhi->beginOffscreenFrame(&cb), QRhi::FrameOpSuccess);
+
+ cb->beginPass(rt.data(), Qt::black, { 1.0f, 0 }, u);
+ cb->setGraphicsPipeline(pipeline.data());
+ cb->setViewport({ 0, 0, float(rt->pixelSize().width()), float(rt->pixelSize().height()) });
+ cb->setShaderResources();
+ QRhiCommandBuffer::VertexInput vbufBinding(vbuf.data(), 0);
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(3);
+
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ };
+ QRhiResourceUpdateBatch *readbackBatch = rhi->nextResourceUpdateBatch();
+ readbackBatch->readBackTexture({ texture.data() }, &readResult);
+
+ QRhiReadbackResult bufferReadResult;
+ bufferReadResult.completed = []() {};
+ readbackBatch->readBackBuffer(buffer.data(), 0, 1024, &bufferReadResult);
+
+ cb->endPass(readbackBatch);
+
+ rhi->endOffscreenFrame();
+
+ if (rhi->isYUpInFramebuffer()) // we used clipSpaceCorrMatrix so this is different from many
+ // other tests
+ result = std::move(result).mirrored();
+
+ QCOMPARE(result.size(), rt->pixelSize());
+
+ // cannot check rendering results with Null, because there is no rendering there
+ if (impl == QRhi::Null)
+ return;
+
+ int redCount = 0, greenCount = 0, blueCount = 0;
+ for (int y = 0; y < result.height(); ++y) {
+ const quint32 *p = reinterpret_cast<const quint32 *>(result.constScanLine(y));
+ int x = result.width() - 1;
+ while (x-- >= 0) {
+ const QRgb c(*p++);
+ const int red = qRed(c);
+ const int green = qGreen(c);
+ const int blue = qBlue(c);
+ // just count the color components that are above a certain threshold
+ if (red > 240)
+ ++redCount;
+ if (green > 240)
+ ++greenCount;
+ if (blue > 240)
+ ++blueCount;
+ }
+ }
+
+ // make sure we drew something
+ QVERIFY(redCount > 50);
+ QVERIFY(blueCount > 50);
+ QVERIFY(greenCount > 50);
+
+ // StorageBlock("result" "" knownSize=16 binding=1 set=0 runtimeArrayStride=336 QList(
+ // BlockVariable("int" "count" offset=0 size=4),
+ // BlockVariable("struct" "elements" offset=16 size=0 array=QList(0) structMembers=QList(
+ // BlockVariable("struct" "a" offset=0 size=48 array=QList(3) structMembers=QList(
+ // BlockVariable("vec3" "color" offset=0 size=12),
+ // BlockVariable("int" "id" offset=12 size=4))),
+ // BlockVariable("struct" "b" offset=48 size=144 array=QList(3) structMembers=QList(
+ // BlockVariable("vec2" "some" offset=0 size=8),
+ // BlockVariable("int" "other" offset=8 size=12 array=QList(3)),
+ // BlockVariable("vec3" "variables" offset=32 size=12))),
+ // BlockVariable("struct" "c" offset=192 size=16 structMembers=QList(
+ // BlockVariable("vec3" "stuff" offset=0 size=12),
+ // BlockVariable("float" "more_stuff" offset=12 size=4))),
+ // BlockVariable("vec4" "tesslevelOuter" offset=208 size=16),
+ // BlockVariable("vec2" "tessLevelInner" offset=224 size=8),
+ // BlockVariable("float" "pointSize" offset=232 size=12 array=QList(3)),
+ // BlockVariable("float" "clipDistance" offset=244 size=60 array=QList(5, 3)),
+ // BlockVariable("vec3" "tessCoord" offset=304 size=12),
+ // BlockVariable("int" "patchVerticesIn" offset=316 size=4),
+ // BlockVariable("int" "primitiveID" offset=320 size=4)))))
+
+ // int count
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[0])[0], 1);
+
+ // a[0].color
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 0 + 0])[0], 0.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 0 + 0])[1], 0.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 0 + 0])[2], 1.0f);
+
+ // a[0].id
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 0 + 12])[0], 91);
+
+ // a[1].color
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 16 + 0])[0], 1.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 16 + 0])[1], 0.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 16 + 0])[2], 0.0f);
+
+ // a[1].id
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 16 + 12])[0], 92);
+
+ // a[2].color
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 32 + 0])[0], 0.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 32 + 0])[1], 1.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 32 + 0])[2], 0.0f);
+
+ // a[2].id
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 32 + 12])[0], 93);
+
+ // b[0].some
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 48 + 0])[0], 0.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 48 + 0])[1], 0.0f);
+
+ // b[0].other[0]
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 48 + 8])[0], 10.0f);
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 48 + 8])[1], 20.0f);
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 48 + 8])[2], 30.0f);
+
+ // b[0].variables
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 48 + 32])[0], 3.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 48 + 32])[1], 13.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 48 + 32])[2], 17.0f);
+
+ // b[1].some
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 96 + 0])[0], 1.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 96 + 0])[1], 1.0f);
+
+ // b[1].other[0]
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 96 + 8])[0], 10.0f);
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 96 + 8])[1], 20.0f);
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 96 + 8])[2], 30.0f);
+
+ // b[1].variables
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 96 + 32])[0], 3.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 96 + 32])[1], 14.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 96 + 32])[2], 17.0f);
+
+ // b[2].some
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 144 + 0])[0], 2.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 144 + 0])[1], 2.0f);
+
+ // b[2].other[0]
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 144 + 8])[0], 10.0f);
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 144 + 8])[1], 20.0f);
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 144 + 8])[2], 30.0f);
+
+ // b[2].variables
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 144 + 32])[0], 3.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 144 + 32])[1], 15.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 144 + 32])[2], 17.0f);
+
+ // c.stuff
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 192 + 0])[0], 1.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 192 + 0])[1], 2.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 192 + 0])[2], 3.0f);
+
+ // c.more_stuff
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 192 + 12])[0], 4.0f);
+
+ // tessLevelOuter
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 208 + 0])[0], 1.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 208 + 0])[1], 2.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 208 + 0])[2], 3.0f);
+
+ // tessLevelInner
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 224 + 0])[0], 5.0f);
+
+ // pointSize[0]
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 232 + 0])[0], 10.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 232 + 0])[1], 11.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 232 + 0])[2], 12.0f);
+
+ // clipDistance[0][0]
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 0])[0], 20.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 0])[1], 40.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 0])[2], 60.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 0])[3], 80.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 0])[4], 100.0f);
+
+ // clipDistance[1][0]
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 20])[0], 21.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 20])[1], 41.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 20])[2], 61.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 20])[3], 81.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 20])[4], 101.0f);
+
+ // clipDistance[2][0]
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 40])[0], 22.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 40])[1], 42.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 40])[2], 62.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 40])[3], 82.0f);
+ QCOMPARE(reinterpret_cast<const float *>(&bufferReadResult.data.constData()[16 + 244 + 40])[4], 102.0f);
+
+ // patchVerticesIn
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 316 + 0])[0], 3);
+
+ // primitiveID
+ QCOMPARE(reinterpret_cast<const int *>(&bufferReadResult.data.constData()[16 + 320 + 0])[0], 0);
+}
+
+void tst_QRhi::storageBuffer_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::storageBuffer()
+{
+ // Use a compute shader to copy from one storage buffer of float types to
+ // another of int types. We fill the "toGpu" buffer with known float type
+ // data generated and uploaded from the CPU, then dispatch a compute shader
+ // to copy from the "toGpu" buffer to the "fromGpu" buffer. We then
+ // readback the "fromGpu" buffer and verify that the results are as
+ // expected.
+
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ // we can't test with Null as there is no compute
+ if (impl == QRhi::Null)
+ return;
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing");
+
+ if (!rhi->isFeatureSupported(QRhi::Feature::Compute))
+ QSKIP("Compute is not supported with this graphics API, skipping test");
+
+ QShader s = loadShader(":/data/storagebuffer.comp.qsb");
+ QVERIFY(s.isValid());
+ QCOMPARE(s.description().storageBlocks().size(), 2);
+
+ QMap<QByteArray, QShaderDescription::StorageBlock> blocks;
+ for (const QShaderDescription::StorageBlock &block : s.description().storageBlocks())
+ blocks[block.blockName] = block;
+
+ QMap<QByteArray, QShaderDescription::BlockVariable> toGpuMembers;
+ for (const QShaderDescription::BlockVariable &member: blocks["toGpu"].members)
+ toGpuMembers[member.name] = member;
+
+ QMap<QByteArray, QShaderDescription::BlockVariable> fromGpuMembers;
+ for (const QShaderDescription::BlockVariable &member: blocks["fromGpu"].members)
+ fromGpuMembers[member.name] = member;
+
+ for (QRhiBuffer::Type type : {QRhiBuffer::Type::Immutable, QRhiBuffer::Type::Static}) {
+
+ QRhiCommandBuffer *cb = nullptr;
+ rhi->beginOffscreenFrame(&cb);
+ QVERIFY(cb);
+
+ QRhiResourceUpdateBatch *u = rhi->nextResourceUpdateBatch();
+ QVERIFY(u);
+
+ QScopedPointer<QRhiBuffer> toGpuBuffer(rhi->newBuffer(type, QRhiBuffer::UsageFlag::StorageBuffer, blocks["toGpu"].knownSize));
+ QVERIFY(toGpuBuffer->create());
+
+ QScopedPointer<QRhiBuffer> fromGpuBuffer(rhi->newBuffer(type, QRhiBuffer::UsageFlag::StorageBuffer, blocks["fromGpu"].knownSize));
+ QVERIFY(fromGpuBuffer->create());
+
+ QByteArray toGpuData(blocks["toGpu"].knownSize, 0);
+ reinterpret_cast<float *>(&toGpuData.data()[toGpuMembers["_float"].offset])[0] = 1.0f;
+ reinterpret_cast<float *>(&toGpuData.data()[toGpuMembers["_vec2"].offset])[0] = 2.0f;
+ reinterpret_cast<float *>(&toGpuData.data()[toGpuMembers["_vec2"].offset])[1] = 3.0f;
+ reinterpret_cast<float *>(&toGpuData.data()[toGpuMembers["_vec3"].offset])[0] = 4.0f;
+ reinterpret_cast<float *>(&toGpuData.data()[toGpuMembers["_vec3"].offset])[1] = 5.0f;
+ reinterpret_cast<float *>(&toGpuData.data()[toGpuMembers["_vec3"].offset])[2] = 6.0f;
+ reinterpret_cast<float *>(&toGpuData.data()[toGpuMembers["_vec4"].offset])[0] = 7.0f;
+ reinterpret_cast<float *>(&toGpuData.data()[toGpuMembers["_vec4"].offset])[1] = 8.0f;
+ reinterpret_cast<float *>(&toGpuData.data()[toGpuMembers["_vec4"].offset])[2] = 9.0f;
+ reinterpret_cast<float *>(&toGpuData.data()[toGpuMembers["_vec4"].offset])[3] = 10.0f;
+
+ u->uploadStaticBuffer(toGpuBuffer.data(), 0, toGpuData.size(), toGpuData.constData());
+ u->uploadStaticBuffer(fromGpuBuffer.data(), 0, blocks["fromGpu"].knownSize, QByteArray(blocks["fromGpu"].knownSize, 0).constData());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb(rhi->newShaderResourceBindings());
+ srb->setBindings({QRhiShaderResourceBinding::bufferLoad(blocks["toGpu"].binding, QRhiShaderResourceBinding::ComputeStage, toGpuBuffer.data()),
+ QRhiShaderResourceBinding::bufferLoadStore(blocks["fromGpu"].binding, QRhiShaderResourceBinding::ComputeStage, fromGpuBuffer.data())});
+
+ QVERIFY(srb->create());
+
+ QScopedPointer<QRhiComputePipeline> pipeline(rhi->newComputePipeline());
+ pipeline->setShaderStage({QRhiShaderStage::Compute, s});
+ pipeline->setShaderResourceBindings(srb.data());
+ QVERIFY(pipeline->create());
+
+ cb->beginComputePass(u);
+
+ cb->setComputePipeline(pipeline.data());
+ cb->setShaderResources();
+ cb->dispatch(1, 1, 1);
+
+ u = rhi->nextResourceUpdateBatch();
+ QVERIFY(u);
+
+ int readCompletedNotifications = 0;
+ QRhiReadbackResult result;
+ result.completed = [&readCompletedNotifications]() { readCompletedNotifications++; };
+ u->readBackBuffer(fromGpuBuffer.data(), 0, blocks["fromGpu"].knownSize, &result);
+
+ cb->endComputePass(u);
+
+ rhi->endOffscreenFrame();
+
+ QCOMPARE(readCompletedNotifications, 1);
+
+ QCOMPARE(result.data.size(), blocks["fromGpu"].knownSize);
+ QCOMPARE(reinterpret_cast<const int *>(&result.data.constData()[fromGpuMembers["_int"].offset])[0], 1);
+ QCOMPARE(reinterpret_cast<const int *>(&result.data.constData()[fromGpuMembers["_ivec2"].offset])[0], 2);
+ QCOMPARE(reinterpret_cast<const int *>(&result.data.constData()[fromGpuMembers["_ivec2"].offset])[1], 3);
+ QCOMPARE(reinterpret_cast<const int *>(&result.data.constData()[fromGpuMembers["_ivec3"].offset])[0], 4);
+ QCOMPARE(reinterpret_cast<const int *>(&result.data.constData()[fromGpuMembers["_ivec3"].offset])[1], 5);
+ QCOMPARE(reinterpret_cast<const int *>(&result.data.constData()[fromGpuMembers["_ivec3"].offset])[2], 6);
+ QCOMPARE(reinterpret_cast<const int *>(&result.data.constData()[fromGpuMembers["_ivec4"].offset])[0], 7);
+ QCOMPARE(reinterpret_cast<const int *>(&result.data.constData()[fromGpuMembers["_ivec4"].offset])[1], 8);
+ QCOMPARE(reinterpret_cast<const int *>(&result.data.constData()[fromGpuMembers["_ivec4"].offset])[2], 9);
+ QCOMPARE(reinterpret_cast<const int *>(&result.data.constData()[fromGpuMembers["_ivec4"].offset])[3], 10);
+
+ }
+}
+
+ void tst_QRhi::storageBufferRuntimeSizeCompute_data()
+{
+ rhiTestData();
+}
+
+ void tst_QRhi::storageBufferRuntimeSizeCompute()
+{
+ // Use a compute shader to copy from one storage buffer with std430 runtime
+ // float array to another with std140 runtime int array. We fill the
+ // "toGpu" buffer with known float data generated and uploaded from the
+ // CPU, then dispatch a compute shader to copy from the "toGpu" buffer to
+ // the "fromGpu" buffer. We then readback the "fromGpu" buffer and verify
+ // that the results are as expected. This is primarily to test Metal
+ // SPIRV-Cross buffer size buffers.
+
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ // we can't test with Null as there is no compute
+ if (impl == QRhi::Null)
+ return;
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing");
+
+ if (!rhi->isFeatureSupported(QRhi::Feature::Compute))
+ QSKIP("Compute is not supported with this graphics API, skipping test");
+
+ QShader s = loadShader(":/data/storagebuffer_runtime.comp.qsb");
+ QVERIFY(s.isValid());
+ QCOMPARE(s.description().storageBlocks().size(), 2);
+
+ QMap<QByteArray, QShaderDescription::StorageBlock> blocks;
+ for (const QShaderDescription::StorageBlock &block : s.description().storageBlocks())
+ blocks[block.blockName] = block;
+
+ QMap<QByteArray, QShaderDescription::BlockVariable> toGpuMembers;
+ for (const QShaderDescription::BlockVariable &member : blocks["toGpu"].members)
+ toGpuMembers[member.name] = member;
+
+ QMap<QByteArray, QShaderDescription::BlockVariable> fromGpuMembers;
+ for (const QShaderDescription::BlockVariable &member : blocks["fromGpu"].members)
+ fromGpuMembers[member.name] = member;
+
+ for (QRhiBuffer::Type type : { QRhiBuffer::Type::Immutable, QRhiBuffer::Type::Static }) {
+ QRhiCommandBuffer *cb = nullptr;
+
+ rhi->beginOffscreenFrame(&cb);
+ QVERIFY(cb);
+
+ QRhiResourceUpdateBatch *u = rhi->nextResourceUpdateBatch();
+ QVERIFY(u);
+
+ const int stride430 = sizeof(float);
+ const int stride140 = 4 * sizeof(float);
+ const int length = 32;
+
+ QScopedPointer<QRhiBuffer> toGpuBuffer(
+ rhi->newBuffer(type, QRhiBuffer::UsageFlag::StorageBuffer,
+ blocks["toGpu"].knownSize + length * stride430));
+ QVERIFY(toGpuBuffer->create());
+
+ QScopedPointer<QRhiBuffer> fromGpuBuffer(
+ rhi->newBuffer(type, QRhiBuffer::UsageFlag::StorageBuffer,
+ blocks["fromGpu"].knownSize + length * stride140));
+ QVERIFY(fromGpuBuffer->create());
+
+ QByteArray toGpuData(toGpuBuffer->size(), 0);
+ for (int i = 0; i < length; ++i)
+ reinterpret_cast<float &>(toGpuData.data()[toGpuMembers["_float"].offset + i * stride430]) = float(i);
+
+ u->uploadStaticBuffer(toGpuBuffer.data(), 0, toGpuData.size(), toGpuData.constData());
+ u->uploadStaticBuffer(fromGpuBuffer.data(), 0, blocks["fromGpu"].knownSize,
+ QByteArray(fromGpuBuffer->size(), 0).constData());
+
+ QScopedPointer<QRhiShaderResourceBindings> srb(rhi->newShaderResourceBindings());
+ srb->setBindings(
+ { QRhiShaderResourceBinding::bufferLoadStore(
+ blocks["toGpu"].binding, QRhiShaderResourceBinding::ComputeStage,
+ toGpuBuffer.data()),
+ QRhiShaderResourceBinding::bufferLoadStore(
+ blocks["fromGpu"].binding, QRhiShaderResourceBinding::ComputeStage,
+ fromGpuBuffer.data()) });
+ QVERIFY(srb->create());
+
+ QScopedPointer<QRhiComputePipeline> pipeline(rhi->newComputePipeline());
+ pipeline->setShaderStage({ QRhiShaderStage::Compute, s });
+ pipeline->setShaderResourceBindings(srb.data());
+ QVERIFY(pipeline->create());
+
+ cb->beginComputePass(u);
+
+ cb->setComputePipeline(pipeline.data());
+ cb->setShaderResources();
+ cb->dispatch(1, 1, 1);
+
+ u = rhi->nextResourceUpdateBatch();
+ QVERIFY(u);
+ int readbackCompleted = 0;
+ QRhiReadbackResult result;
+ result.completed = [&readbackCompleted]() { readbackCompleted++; };
+ u->readBackBuffer(fromGpuBuffer.data(), 0, fromGpuBuffer->size(), &result);
+
+ cb->endComputePass(u);
+
+ rhi->endOffscreenFrame();
+
+ QVERIFY(readbackCompleted > 0);
+ QCOMPARE(result.data.size(), fromGpuBuffer->size());
+
+ for (int i = 0; i < length; ++i)
+ QCOMPARE(reinterpret_cast<const int &>(result.data.constData()[fromGpuMembers["_int"].offset + i * stride140]), i);
+
+ QCOMPARE(readbackCompleted, 1);
+
+ }
+
+}
+
+void tst_QRhi::storageBufferRuntimeSizeGraphics_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::storageBufferRuntimeSizeGraphics()
+{
+#ifdef Q_OS_ANDROID
+ if (QNativeInterface::QAndroidApplication::sdkVersion() >= 31)
+ QSKIP("Fails on Android 12 (QTBUG-108844)");
+#endif
+ // Draws a tessellated triangle with color determined by the length of
+ // buffers bound to shader stages. This is primarily to test Metal
+ // SPIRV-Cross buffer size buffers.
+
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing rendering");
+
+ if (!rhi->isFeatureSupported(QRhi::Tessellation)) {
+ // From a Vulkan or Metal implementation we expect tessellation to work,
+ // even though it is optional (as per spec) for Vulkan.
+ QVERIFY(rhi->backend() != QRhi::Vulkan);
+ QVERIFY(rhi->backend() != QRhi::Metal);
+ QSKIP("Tessellation is not supported with this graphics API, skipping test");
+ }
+
+ if (rhi->backend() == QRhi::D3D11 || rhi->backend() == QRhi::D3D12)
+ QSKIP("Skipping tessellation test on D3D for now, test assets not prepared for HLSL yet");
+
+ QScopedPointer<QRhiTexture> texture(rhi->newTexture(QRhiTexture::RGBA8, QSize(64, 64), 1,
+ QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource));
+ QVERIFY(texture->create());
+
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ texture.data() }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->create());
+
+ static const float triangleVertices[] = {
+ 0.0f, 0.5f, 0.0f,
+ -0.5f, -0.5f, 0.0f,
+ 0.5f, -0.5f, 0.0f,
+ };
+
+ QRhiResourceUpdateBatch *u = rhi->nextResourceUpdateBatch();
+ QScopedPointer<QRhiBuffer> vbuf(rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(triangleVertices)));
+ QVERIFY(vbuf->create());
+ u->uploadStaticBuffer(vbuf.data(), triangleVertices);
+
+ QScopedPointer<QRhiBuffer> ubuf(rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64));
+ QVERIFY(ubuf->create());
+
+ QMatrix4x4 mvp = rhi->clipSpaceCorrMatrix();
+ u->updateDynamicBuffer(ubuf.data(), 0, 64, mvp.constData());
+
+ QScopedPointer<QRhiBuffer> ssbo5(rhi->newBuffer(QRhiBuffer::Static, QRhiBuffer::StorageBuffer, 256));
+ QVERIFY(ssbo5->create());
+
+ QScopedPointer<QRhiBuffer> ssbo3(rhi->newBuffer(QRhiBuffer::Static, QRhiBuffer::StorageBuffer, 16));
+ QVERIFY(ssbo3->create());
+
+ u->uploadStaticBuffer(ssbo3.data(), QVector<float>({ 1.0f, 1.0f, 1.0f, 1.0f }).constData());
+
+ QScopedPointer<QRhiBuffer> ssbo4(rhi->newBuffer(QRhiBuffer::Static, QRhiBuffer::StorageBuffer, 128));
+ QVERIFY(ssbo4->create());
+
+ const int red = 79;
+ const int green = 43;
+ const int blue = 251;
+
+ QScopedPointer<QRhiBuffer> ssboR(rhi->newBuffer(QRhiBuffer::Static, QRhiBuffer::StorageBuffer, red * sizeof(float)));
+ QVERIFY(ssboR->create());
+
+ QScopedPointer<QRhiBuffer> ssboG(rhi->newBuffer(QRhiBuffer::Static, QRhiBuffer::StorageBuffer, green * sizeof(float)));
+ QVERIFY(ssboG->create());
+
+ QScopedPointer<QRhiBuffer> ssboB(rhi->newBuffer(QRhiBuffer::Static, QRhiBuffer::StorageBuffer, blue * sizeof(float)));
+ QVERIFY(ssboB->create());
+
+ const int tessOuter0 = 1;
+ const int tessOuter1 = 2;
+ const int tessOuter2 = 3;
+ const int tessInner0 = 4;
+
+ QScopedPointer<QRhiBuffer> ssboTessOuter0(rhi->newBuffer(QRhiBuffer::Static, QRhiBuffer::StorageBuffer, tessOuter0 * sizeof(float)));
+ QVERIFY(ssboTessOuter0->create());
+
+ QScopedPointer<QRhiBuffer> ssboTessOuter1(rhi->newBuffer(QRhiBuffer::Static, QRhiBuffer::StorageBuffer, tessOuter1 * sizeof(float)));
+ QVERIFY(ssboTessOuter1->create());
+
+ QScopedPointer<QRhiBuffer> ssboTessOuter2(rhi->newBuffer(QRhiBuffer::Static, QRhiBuffer::StorageBuffer, tessOuter2 * sizeof(float)));
+ QVERIFY(ssboTessOuter2->create());
+
+ QScopedPointer<QRhiBuffer> ssboTessInner0(rhi->newBuffer(QRhiBuffer::Static, QRhiBuffer::StorageBuffer, tessInner0 * sizeof(float)));
+ QVERIFY(ssboTessInner0->create());
+
+
+ QScopedPointer<QRhiShaderResourceBindings> srb(rhi->newShaderResourceBindings());
+ srb->setBindings({ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::TessellationEvaluationStage, ubuf.data()),
+ QRhiShaderResourceBinding::bufferLoad(5, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::TessellationEvaluationStage, ssbo5.data()),
+ QRhiShaderResourceBinding::bufferLoad(3, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::TessellationEvaluationStage | QRhiShaderResourceBinding::FragmentStage, ssbo3.data()),
+ QRhiShaderResourceBinding::bufferLoad(4, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::TessellationEvaluationStage, ssbo4.data()),
+ QRhiShaderResourceBinding::bufferLoad(7, QRhiShaderResourceBinding::TessellationControlStage, ssboTessOuter0.data()),
+ QRhiShaderResourceBinding::bufferLoad(8, QRhiShaderResourceBinding::TessellationControlStage | QRhiShaderResourceBinding::TessellationEvaluationStage, ssboTessOuter1.data()),
+ QRhiShaderResourceBinding::bufferLoad(9, QRhiShaderResourceBinding::TessellationControlStage, ssboTessOuter2.data()),
+ QRhiShaderResourceBinding::bufferLoad(10, QRhiShaderResourceBinding::TessellationControlStage, ssboTessInner0.data()),
+ QRhiShaderResourceBinding::bufferLoad(1, QRhiShaderResourceBinding::FragmentStage, ssboG.data()),
+ QRhiShaderResourceBinding::bufferLoad(2, QRhiShaderResourceBinding::FragmentStage, ssboB.data()),
+ QRhiShaderResourceBinding::bufferLoad(6, QRhiShaderResourceBinding::FragmentStage, ssboR.data()) });
+
+ QVERIFY(srb->create());
+
+ QScopedPointer<QRhiGraphicsPipeline> pipeline(rhi->newGraphicsPipeline());
+
+ pipeline->setTopology(QRhiGraphicsPipeline::Patches);
+ pipeline->setPatchControlPointCount(3);
+
+ pipeline->setShaderStages({
+ { QRhiShaderStage::Vertex, loadShader(":/data/storagebuffer_runtime.vert.qsb") },
+ { QRhiShaderStage::TessellationControl, loadShader(":/data/storagebuffer_runtime.tesc.qsb") },
+ { QRhiShaderStage::TessellationEvaluation, loadShader(":/data/storagebuffer_runtime.tese.qsb") },
+ { QRhiShaderStage::Fragment, loadShader(":/data/storagebuffer_runtime.frag.qsb") }
+ });
+
+ pipeline->setCullMode(QRhiGraphicsPipeline::None);
+
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 3 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
+ });
+
+ pipeline->setVertexInputLayout(inputLayout);
+ pipeline->setShaderResourceBindings(srb.data());
+ pipeline->setRenderPassDescriptor(rpDesc.data());
+
+ QVERIFY(pipeline->create());
+
+ QRhiCommandBuffer *cb = nullptr;
+ QCOMPARE(rhi->beginOffscreenFrame(&cb), QRhi::FrameOpSuccess);
+
+ cb->beginPass(rt.data(), Qt::black, { 1.0f, 0 }, u);
+ cb->setGraphicsPipeline(pipeline.data());
+ cb->setViewport({ 0, 0, float(rt->pixelSize().width()), float(rt->pixelSize().height()) });
+ cb->setShaderResources();
+ QRhiCommandBuffer::VertexInput vbufBinding(vbuf.data(), 0);
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(3);
+
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ };
+ QRhiResourceUpdateBatch *readbackBatch = rhi->nextResourceUpdateBatch();
+ readbackBatch->readBackTexture({ texture.data() }, &readResult);
+ cb->endPass(readbackBatch);
+
+ rhi->endOffscreenFrame();
+
+ QCOMPARE(result.size(), rt->pixelSize());
+
+ // cannot check rendering results with Null, because there is no rendering there
+ if (impl == QRhi::Null)
+ return;
+
+ QCOMPARE(result.pixel(32, 32), qRgb(red, green, blue));
+}
+
+void tst_QRhi::halfPrecisionAttributes_data()
+{
+ rhiTestData();
+}
+
+void tst_QRhi::halfPrecisionAttributes()
+{
+#ifdef Q_OS_ANDROID
+ if (QNativeInterface::QAndroidApplication::sdkVersion() >= 31)
+ QSKIP("Fails on Android 12 (QTBUG-108844)");
+#endif
+ QFETCH(QRhi::Implementation, impl);
+ QFETCH(QRhiInitParams *, initParams);
+
+ QScopedPointer<QRhi> rhi(QRhi::create(impl, initParams, QRhi::Flags(), nullptr));
+ if (!rhi)
+ QSKIP("QRhi could not be created, skipping testing rendering");
+
+ if (!rhi->isFeatureSupported(QRhi::HalfAttributes)) {
+ QVERIFY(rhi->backend() != QRhi::Vulkan);
+ QVERIFY(rhi->backend() != QRhi::Metal);
+ QVERIFY(rhi->backend() != QRhi::D3D11);
+ QVERIFY(rhi->backend() != QRhi::D3D12);
+ QSKIP("Half precision vertex attributes are not supported with this graphics API, skipping test");
+ }
+
+ const QSize outputSize(1920, 1080);
+ QScopedPointer<QRhiTexture> texture(rhi->newTexture(QRhiTexture::RGBA8, outputSize, 1,
+ QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource));
+ QVERIFY(texture->create());
+
+ QScopedPointer<QRhiTextureRenderTarget> rt(rhi->newTextureRenderTarget({ texture.data() }));
+ QScopedPointer<QRhiRenderPassDescriptor> rpDesc(rt->newCompatibleRenderPassDescriptor());
+ rt->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(rt->create());
+
+ QRhiCommandBuffer *cb = nullptr;
+ QVERIFY(rhi->beginOffscreenFrame(&cb) == QRhi::FrameOpSuccess);
+ QVERIFY(cb);
+
+ QRhiResourceUpdateBatch *updates = rhi->nextResourceUpdateBatch();
+
+ //
+ // This test uses half3 vertices
+ //
+ // Note: D3D does not support half3 - rhi passes it through as half4. Because of this, D3D will
+ // report the following warning and error if we don't take precautions:
+ //
+ // D3D11 WARNING: ID3D11DeviceContext::Draw: Input vertex slot 0 has stride 6 which is less than
+ // the minimum stride logically expected from the current Input Layout (8 bytes). This is OK, as
+ // hardware is perfectly capable of reading overlapping data. However the developer probably did
+ // not intend to make use of this behavior. [ EXECUTION WARNING #355:
+ // DEVICE_DRAW_VERTEX_BUFFER_STRIDE_TOO_SMALL]
+ //
+ // D3D11 ERROR: ID3D11DeviceContext::Draw: Vertex Buffer Stride (6) at the input vertex slot 0
+ // is not aligned properly. The current Input Layout imposes an alignment of (4) because of the
+ // Formats used with this slot. [ EXECUTION ERROR #367: DEVICE_DRAW_VERTEX_STRIDE_UNALIGNED]
+ //
+ // The same warning and error are produced for D3D12. The rendered output is correct despite
+ // the warning and error.
+ //
+ // To avoid these errors, we pad the vertices to 8 byte stride.
+ //
+ static const qfloat16 vertices[] = {
+ qfloat16(-1.0), qfloat16(-1.0), qfloat16(0.0), qfloat16(0.0),
+ qfloat16(1.0), qfloat16(-1.0), qfloat16(0.0), qfloat16(0.0),
+ qfloat16(0.0), qfloat16(1.0), qfloat16(0.0), qfloat16(0.0),
+ };
+
+ QScopedPointer<QRhiBuffer> vbuf(rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(vertices)));
+ QVERIFY(vbuf->create());
+ updates->uploadStaticBuffer(vbuf.data(), vertices);
+
+ QScopedPointer<QRhiShaderResourceBindings> srb(rhi->newShaderResourceBindings());
+ QVERIFY(srb->create());
+
+ QScopedPointer<QRhiGraphicsPipeline> pipeline(rhi->newGraphicsPipeline());
+ QShader vs = loadShader(":/data/half.vert.qsb");
+ QVERIFY(vs.isValid());
+ QShader fs = loadShader(":/data/simple.frag.qsb");
+ QVERIFY(fs.isValid());
+ pipeline->setShaderStages({ { QRhiShaderStage::Vertex, vs }, { QRhiShaderStage::Fragment, fs } });
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({ { 4 * sizeof(qfloat16) } }); // 8 byte vertex stride for D3D
+ inputLayout.setAttributes({ { 0, 0, QRhiVertexInputAttribute::Half3, 0 } });
+ pipeline->setVertexInputLayout(inputLayout);
+ pipeline->setShaderResourceBindings(srb.data());
+ pipeline->setRenderPassDescriptor(rpDesc.data());
+ QVERIFY(pipeline->create());
+
+ cb->beginPass(rt.data(), Qt::blue, { 1.0f, 0 }, updates);
+ cb->setGraphicsPipeline(pipeline.data());
+ cb->setViewport({ 0, 0, float(outputSize.width()), float(outputSize.height()) });
+ QRhiCommandBuffer::VertexInput vbindings(vbuf.data(), 0);
+ cb->setVertexInput(0, 1, &vbindings);
+ cb->draw(3);
+
+ QRhiReadbackResult readResult;
+ QImage result;
+ readResult.completed = [&readResult, &result] {
+ result = QImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888_Premultiplied); // non-owning, no copy needed because readResult outlives result
+ };
+ QRhiResourceUpdateBatch *readbackBatch = rhi->nextResourceUpdateBatch();
+ readbackBatch->readBackTexture({ texture.data() }, &readResult);
+ cb->endPass(readbackBatch);
+
+ rhi->endOffscreenFrame();
+ // Offscreen frames are synchronous, so the readback is guaranteed to
+ // complete at this point. This would not be the case with swapchain-based
+ // frames.
+ QCOMPARE(result.size(), texture->pixelSize());
+
+ if (impl == QRhi::Null)
+ return;
+
+ // Now we have a red rectangle on blue background.
+ const int y = 100;
+ const quint32 *p = reinterpret_cast<const quint32 *>(result.constScanLine(y));
+ int x = result.width() - 1;
+ int redCount = 0;
+ int blueCount = 0;
+ const int maxFuzz = 1;
+ while (x-- >= 0) {
+ const QRgb c(*p++);
+ if (qRed(c) >= (255 - maxFuzz) && qGreen(c) == 0 && qBlue(c) == 0)
+ ++redCount;
+ else if (qRed(c) == 0 && qGreen(c) == 0 && qBlue(c) >= (255 - maxFuzz))
+ ++blueCount;
+ else
+ QFAIL("Encountered a pixel that is neither red or blue");
+ }
+
+ QCOMPARE(redCount + blueCount, texture->pixelSize().width());
+ QVERIFY(redCount != 0);
+ QVERIFY(blueCount != 0);
+
+ // The triangle is "pointing up" in the resulting image with OpenGL
+ // (because Y is up both in normalized device coordinates and in images)
+ // and Vulkan (because Y is down in both and the vertex data was specified
+ // with Y up in mind), but "pointing down" with D3D (because Y is up in NDC
+ // but down in images).
+ if (rhi->isYUpInFramebuffer() == rhi->isYUpInNDC())
+ QVERIFY(redCount < blueCount);
+ else
+ QVERIFY(redCount > blueCount);
+
+}
+
#include <tst_qrhi.moc>
QTEST_MAIN(tst_QRhi)
diff --git a/tests/auto/gui/rhi/qshader/CMakeLists.txt b/tests/auto/gui/rhi/qshader/CMakeLists.txt
index 9a0e246aa4..09bf0d585d 100644
--- a/tests/auto/gui/rhi/qshader/CMakeLists.txt
+++ b/tests/auto/gui/rhi/qshader/CMakeLists.txt
@@ -1,26 +1,28 @@
-# Generated from qshader.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qshader Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qshader LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+# Resources:
+file(GLOB_RECURSE qshader_resource_files
+ RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
+ "data/*"
+)
+
qt_internal_add_test(tst_qshader
SOURCES
tst_qshader.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
+ TESTDATA ${qshader_resource_files}
+ BUILTIN_TESTDATA
)
-
-# Resources:
-set(qshader_resource_files
- "data"
-)
-
-qt_internal_add_resource(tst_qshader "qshader"
- PREFIX
- "/"
- FILES
- ${qshader_resource_files}
-)
-
diff --git a/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.frag.qsb b/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.frag.qsb
new file mode 100644
index 0000000000..4d49ede3ff
--- /dev/null
+++ b/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.frag.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.tesc.qsb b/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.tesc.qsb
new file mode 100644
index 0000000000..ea68da7eb4
--- /dev/null
+++ b/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.tesc.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.tese.qsb b/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.tese.qsb
new file mode 100644
index 0000000000..41005f76bc
--- /dev/null
+++ b/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.tese.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.vert.qsb b/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.vert.qsb
new file mode 100644
index 0000000000..39734b6d5d
--- /dev/null
+++ b/tests/auto/gui/rhi/qshader/data/metal_enabled_tessellation_v7.vert.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qshader/data/storage_buffer_info_v8.comp.qsb b/tests/auto/gui/rhi/qshader/data/storage_buffer_info_v8.comp.qsb
new file mode 100644
index 0000000000..edcd84cbe6
--- /dev/null
+++ b/tests/auto/gui/rhi/qshader/data/storage_buffer_info_v8.comp.qsb
Binary files differ
diff --git a/tests/auto/gui/rhi/qshader/data/color.vert b/tests/auto/gui/rhi/qshader/data_src/color.vert
index c92f71b9e1..c92f71b9e1 100644
--- a/tests/auto/gui/rhi/qshader/data/color.vert
+++ b/tests/auto/gui/rhi/qshader/data_src/color.vert
diff --git a/tests/auto/gui/rhi/qshader/data/texture.frag b/tests/auto/gui/rhi/qshader/data_src/texture.frag
index bd22f817e0..bd22f817e0 100644
--- a/tests/auto/gui/rhi/qshader/data/texture.frag
+++ b/tests/auto/gui/rhi/qshader/data_src/texture.frag
diff --git a/tests/auto/gui/rhi/qshader/data/texture_sep.frag b/tests/auto/gui/rhi/qshader/data_src/texture_sep.frag
index 368e851bb4..368e851bb4 100644
--- a/tests/auto/gui/rhi/qshader/data/texture_sep.frag
+++ b/tests/auto/gui/rhi/qshader/data_src/texture_sep.frag
diff --git a/tests/auto/gui/rhi/qshader/tst_qshader.cpp b/tests/auto/gui/rhi/qshader/tst_qshader.cpp
index cf037e6d4f..9e179c95c3 100644
--- a/tests/auto/gui/rhi/qshader/tst_qshader.cpp
+++ b/tests/auto/gui/rhi/qshader/tst_qshader.cpp
@@ -1,37 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QFile>
#include <QBuffer>
-#include <QtGui/private/qshaderdescription_p_p.h>
-#include <QtGui/private/qshader_p_p.h>
+#include <private/qshaderdescription_p.h>
+#include <private/qshader_p.h>
class tst_QShader : public QObject
{
@@ -43,12 +18,15 @@ private slots:
void genVariants();
void shaderDescImplicitSharing();
void bakedShaderImplicitSharing();
+ void sortedKeys();
void mslResourceMapping();
void serializeShaderDesc();
void comparison();
void loadV4();
void manualShaderPackCreation();
void loadV6WithSeparateImagesAndSamplers();
+ void loadV7();
+ void loadV8();
};
static QShader getShader(const QString &name)
@@ -81,7 +59,7 @@ void tst_QShader::simpleCompileCheckResults()
QShader s = getShader(QLatin1String(":/data/color_spirv_v5.vert.qsb"));
QVERIFY(s.isValid());
QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 5);
- QCOMPARE(s.availableShaders().count(), 1);
+ QCOMPARE(s.availableShaders().size(), 1);
const QShaderCode shader = s.shader(QShaderKey(QShader::SpirvShader,
QShaderVersion(100)));
@@ -90,7 +68,7 @@ void tst_QShader::simpleCompileCheckResults()
const QShaderDescription desc = s.description();
QVERIFY(desc.isValid());
- QCOMPARE(desc.inputVariables().count(), 2);
+ QCOMPARE(desc.inputVariables().size(), 2);
for (const QShaderDescription::InOutVariable &v : desc.inputVariables()) {
switch (v.location) {
case 0:
@@ -106,7 +84,7 @@ void tst_QShader::simpleCompileCheckResults()
break;
}
}
- QCOMPARE(desc.outputVariables().count(), 1);
+ QCOMPARE(desc.outputVariables().size(), 1);
for (const QShaderDescription::InOutVariable &v : desc.outputVariables()) {
switch (v.location) {
case 0:
@@ -118,15 +96,15 @@ void tst_QShader::simpleCompileCheckResults()
break;
}
}
- QCOMPARE(desc.uniformBlocks().count(), 1);
+ QCOMPARE(desc.uniformBlocks().size(), 1);
const QShaderDescription::UniformBlock blk = desc.uniformBlocks().first();
QCOMPARE(blk.blockName, QByteArrayLiteral("buf"));
QCOMPARE(blk.structName, QByteArrayLiteral("ubuf"));
QCOMPARE(blk.size, 68);
QCOMPARE(blk.binding, 0);
QCOMPARE(blk.descriptorSet, 0);
- QCOMPARE(blk.members.count(), 2);
- for (int i = 0; i < blk.members.count(); ++i) {
+ QCOMPARE(blk.members.size(), 2);
+ for (int i = 0; i < blk.members.size(); ++i) {
const QShaderDescription::BlockVariable v = blk.members[i];
switch (i) {
case 0:
@@ -143,7 +121,7 @@ void tst_QShader::simpleCompileCheckResults()
QCOMPARE(v.type, QShaderDescription::Float);
break;
default:
- QFAIL(qPrintable(QStringLiteral("Too many blocks: %1").arg(blk.members.count())));
+ QFAIL(qPrintable(QStringLiteral("Too many blocks: %1").arg(blk.members.size())));
break;
}
}
@@ -156,7 +134,7 @@ void tst_QShader::genVariants()
// + batchable variants
QVERIFY(s.isValid());
QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 5);
- QCOMPARE(s.availableShaders().count(), 2 * 6);
+ QCOMPARE(s.availableShaders().size(), 2 * 6);
int batchableVariantCount = 0;
int batchableGlslVariantCount = 0;
@@ -179,33 +157,33 @@ void tst_QShader::shaderDescImplicitSharing()
QShader s = getShader(QLatin1String(":/data/color_spirv_v5.vert.qsb"));
QVERIFY(s.isValid());
QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 5);
- QCOMPARE(s.availableShaders().count(), 1);
+ QCOMPARE(s.availableShaders().size(), 1);
QVERIFY(s.availableShaders().contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
QShaderDescription d0 = s.description();
QVERIFY(d0.isValid());
- QCOMPARE(d0.inputVariables().count(), 2);
- QCOMPARE(d0.outputVariables().count(), 1);
- QCOMPARE(d0.uniformBlocks().count(), 1);
+ QCOMPARE(d0.inputVariables().size(), 2);
+ QCOMPARE(d0.outputVariables().size(), 1);
+ QCOMPARE(d0.uniformBlocks().size(), 1);
QShaderDescription d1 = d0;
QVERIFY(QShaderDescriptionPrivate::get(&d0) == QShaderDescriptionPrivate::get(&d1));
- QCOMPARE(d0.inputVariables().count(), 2);
- QCOMPARE(d0.outputVariables().count(), 1);
- QCOMPARE(d0.uniformBlocks().count(), 1);
- QCOMPARE(d1.inputVariables().count(), 2);
- QCOMPARE(d1.outputVariables().count(), 1);
- QCOMPARE(d1.uniformBlocks().count(), 1);
+ QCOMPARE(d0.inputVariables().size(), 2);
+ QCOMPARE(d0.outputVariables().size(), 1);
+ QCOMPARE(d0.uniformBlocks().size(), 1);
+ QCOMPARE(d1.inputVariables().size(), 2);
+ QCOMPARE(d1.outputVariables().size(), 1);
+ QCOMPARE(d1.uniformBlocks().size(), 1);
QCOMPARE(d0, d1);
d1.detach();
QVERIFY(QShaderDescriptionPrivate::get(&d0) != QShaderDescriptionPrivate::get(&d1));
- QCOMPARE(d0.inputVariables().count(), 2);
- QCOMPARE(d0.outputVariables().count(), 1);
- QCOMPARE(d0.uniformBlocks().count(), 1);
- QCOMPARE(d1.inputVariables().count(), 2);
- QCOMPARE(d1.outputVariables().count(), 1);
- QCOMPARE(d1.uniformBlocks().count(), 1);
+ QCOMPARE(d0.inputVariables().size(), 2);
+ QCOMPARE(d0.outputVariables().size(), 1);
+ QCOMPARE(d0.uniformBlocks().size(), 1);
+ QCOMPARE(d1.inputVariables().size(), 2);
+ QCOMPARE(d1.outputVariables().size(), 1);
+ QCOMPARE(d1.uniformBlocks().size(), 1);
QCOMPARE(d0, d1);
d1 = QShaderDescription();
@@ -217,24 +195,24 @@ void tst_QShader::bakedShaderImplicitSharing()
QShader s0 = getShader(QLatin1String(":/data/color_spirv_v5.vert.qsb"));
QVERIFY(s0.isValid());
QCOMPARE(QShaderPrivate::get(&s0)->qsbVersion, 5);
- QCOMPARE(s0.availableShaders().count(), 1);
+ QCOMPARE(s0.availableShaders().size(), 1);
QVERIFY(s0.availableShaders().contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
{
QShader s1 = s0;
QVERIFY(QShaderPrivate::get(&s0) == QShaderPrivate::get(&s1));
- QCOMPARE(s0.availableShaders().count(), 1);
+ QCOMPARE(s0.availableShaders().size(), 1);
QVERIFY(s0.availableShaders().contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
- QCOMPARE(s1.availableShaders().count(), 1);
+ QCOMPARE(s1.availableShaders().size(), 1);
QVERIFY(s1.availableShaders().contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
QCOMPARE(s0.stage(), s1.stage());
QCOMPARE(s0, s1);
s1.detach();
QVERIFY(QShaderPrivate::get(&s0) != QShaderPrivate::get(&s1));
- QCOMPARE(s0.availableShaders().count(), 1);
+ QCOMPARE(s0.availableShaders().size(), 1);
QVERIFY(s0.availableShaders().contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
- QCOMPARE(s1.availableShaders().count(), 1);
+ QCOMPARE(s1.availableShaders().size(), 1);
QVERIFY(s1.availableShaders().contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
QCOMPARE(s0.stage(), s1.stage());
QCOMPARE(s0, s1);
@@ -247,22 +225,32 @@ void tst_QShader::bakedShaderImplicitSharing()
s1.setStage(QShader::FragmentStage); // call a setter to trigger a detach
QVERIFY(QShaderPrivate::get(&s0) != QShaderPrivate::get(&s1));
- QCOMPARE(s0.availableShaders().count(), 1);
+ QCOMPARE(s0.availableShaders().size(), 1);
QVERIFY(s0.availableShaders().contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
- QCOMPARE(s1.availableShaders().count(), 1);
+ QCOMPARE(s1.availableShaders().size(), 1);
QVERIFY(s1.availableShaders().contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
QShaderDescription d0 = s0.description();
- QCOMPARE(d0.inputVariables().count(), 2);
- QCOMPARE(d0.outputVariables().count(), 1);
- QCOMPARE(d0.uniformBlocks().count(), 1);
+ QCOMPARE(d0.inputVariables().size(), 2);
+ QCOMPARE(d0.outputVariables().size(), 1);
+ QCOMPARE(d0.uniformBlocks().size(), 1);
QShaderDescription d1 = s1.description();
- QCOMPARE(d1.inputVariables().count(), 2);
- QCOMPARE(d1.outputVariables().count(), 1);
- QCOMPARE(d1.uniformBlocks().count(), 1);
+ QCOMPARE(d1.inputVariables().size(), 2);
+ QCOMPARE(d1.outputVariables().size(), 1);
+ QCOMPARE(d1.uniformBlocks().size(), 1);
QVERIFY(s0 != s1);
}
}
+void tst_QShader::sortedKeys()
+{
+ QShader s = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb"));
+ QVERIFY(s.isValid());
+ QList<QShaderKey> availableShaders = s.availableShaders();
+ QCOMPARE(availableShaders.size(), 7);
+ std::sort(availableShaders.begin(), availableShaders.end());
+ QCOMPARE(availableShaders, s.availableShaders());
+}
+
void tst_QShader::mslResourceMapping()
{
QShader s = getShader(QLatin1String(":/data/texture_all_v4.frag.qsb"));
@@ -270,7 +258,7 @@ void tst_QShader::mslResourceMapping()
QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 4);
const QList<QShaderKey> availableShaders = s.availableShaders();
- QCOMPARE(availableShaders.count(), 7);
+ QCOMPARE(availableShaders.size(), 7);
QVERIFY(availableShaders.contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
QVERIFY(availableShaders.contains(QShaderKey(QShader::MslShader, QShaderVersion(12))));
QVERIFY(availableShaders.contains(QShaderKey(QShader::HlslShader, QShaderVersion(50))));
@@ -289,7 +277,7 @@ void tst_QShader::mslResourceMapping()
resMap = s.nativeResourceBindingMap(QShaderKey(QShader::MslShader, QShaderVersion(12)));
QVERIFY(!resMap.isEmpty());
- QCOMPARE(resMap.count(), 2);
+ QCOMPARE(resMap.size(), 2);
QCOMPARE(resMap.value(0).first, 0); // mapped to native buffer index 0
QCOMPARE(resMap.value(1), qMakePair(0, 0)); // mapped to native texture index 0 and sampler index 0
}
@@ -306,7 +294,7 @@ void tst_QShader::serializeShaderDesc()
QBuffer buf(&data);
QDataStream ds(&buf);
QVERIFY(buf.open(QIODevice::WriteOnly));
- desc.serialize(&ds);
+ desc.serialize(&ds, QShaderPrivate::QSB_VERSION);
}
QVERIFY(!data.isEmpty());
@@ -331,7 +319,7 @@ void tst_QShader::serializeShaderDesc()
QBuffer buf(&data);
QDataStream ds(&buf);
QVERIFY(buf.open(QIODevice::WriteOnly));
- desc.serialize(&ds);
+ desc.serialize(&ds, QShaderPrivate::QSB_VERSION);
}
QVERIFY(!data.isEmpty());
@@ -391,7 +379,7 @@ void tst_QShader::loadV4()
QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 4);
const QList<QShaderKey> availableShaders = s.availableShaders();
- QCOMPARE(availableShaders.count(), 7);
+ QCOMPARE(availableShaders.size(), 7);
QVERIFY(availableShaders.contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
QVERIFY(availableShaders.contains(QShaderKey(QShader::MslShader, QShaderVersion(12))));
QVERIFY(availableShaders.contains(QShaderKey(QShader::HlslShader, QShaderVersion(50))));
@@ -402,7 +390,7 @@ void tst_QShader::loadV4()
const QShaderDescription desc = s.description();
QVERIFY(desc.isValid());
- QCOMPARE(desc.inputVariables().count(), 1);
+ QCOMPARE(desc.inputVariables().size(), 1);
for (const QShaderDescription::InOutVariable &v : desc.inputVariables()) {
switch (v.location) {
case 0:
@@ -414,7 +402,7 @@ void tst_QShader::loadV4()
break;
}
}
- QCOMPARE(desc.outputVariables().count(), 1);
+ QCOMPARE(desc.outputVariables().size(), 1);
for (const QShaderDescription::InOutVariable &v : desc.outputVariables()) {
switch (v.location) {
case 0:
@@ -426,15 +414,15 @@ void tst_QShader::loadV4()
break;
}
}
- QCOMPARE(desc.uniformBlocks().count(), 1);
+ QCOMPARE(desc.uniformBlocks().size(), 1);
const QShaderDescription::UniformBlock blk = desc.uniformBlocks().first();
QCOMPARE(blk.blockName, QByteArrayLiteral("buf"));
QCOMPARE(blk.structName, QByteArrayLiteral("ubuf"));
QCOMPARE(blk.size, 68);
QCOMPARE(blk.binding, 0);
QCOMPARE(blk.descriptorSet, 0);
- QCOMPARE(blk.members.count(), 2);
- for (int i = 0; i < blk.members.count(); ++i) {
+ QCOMPARE(blk.members.size(), 2);
+ for (int i = 0; i < blk.members.size(); ++i) {
const QShaderDescription::BlockVariable v = blk.members[i];
switch (i) {
case 0:
@@ -451,7 +439,7 @@ void tst_QShader::loadV4()
QCOMPARE(v.type, QShaderDescription::Float);
break;
default:
- QFAIL(qPrintable(QStringLiteral("Bad many blocks: %1").arg(blk.members.count())));
+ QFAIL(qPrintable(QStringLiteral("Bad many blocks: %1").arg(blk.members.size())));
break;
}
}
@@ -562,11 +550,11 @@ void tst_QShader::manualShaderPackCreation()
const QByteArray serialized = shaderPack.serialized();
QShader newShaderPack = QShader::fromSerialized(serialized);
- QCOMPARE(newShaderPack.availableShaders().count(), 2);
- QCOMPARE(newShaderPack.description().inputVariables().count(), 1);
- QCOMPARE(newShaderPack.description().outputVariables().count(), 1);
- QCOMPARE(newShaderPack.description().uniformBlocks().count(), 1);
- QCOMPARE(newShaderPack.description().combinedImageSamplers().count(), 1);
+ QCOMPARE(newShaderPack.availableShaders().size(), 2);
+ QCOMPARE(newShaderPack.description().inputVariables().size(), 1);
+ QCOMPARE(newShaderPack.description().outputVariables().size(), 1);
+ QCOMPARE(newShaderPack.description().uniformBlocks().size(), 1);
+ QCOMPARE(newShaderPack.description().combinedImageSamplers().size(), 1);
QCOMPARE(newShaderPack.shader(QShaderKey(QShader::GlslShader, QShaderVersion(100, QShaderVersion::GlslEs))).shader(), fs_gles);
QCOMPARE(newShaderPack.shader(QShaderKey(QShader::GlslShader, QShaderVersion(120))).shader(), fs_gl);
}
@@ -578,7 +566,7 @@ void tst_QShader::loadV6WithSeparateImagesAndSamplers()
QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 6);
const QList<QShaderKey> availableShaders = s.availableShaders();
- QCOMPARE(availableShaders.count(), 6);
+ QCOMPARE(availableShaders.size(), 6);
QVERIFY(availableShaders.contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
QVERIFY(availableShaders.contains(QShaderKey(QShader::MslShader, QShaderVersion(12))));
QVERIFY(availableShaders.contains(QShaderKey(QShader::HlslShader, QShaderVersion(50))));
@@ -588,10 +576,10 @@ void tst_QShader::loadV6WithSeparateImagesAndSamplers()
QShader::NativeResourceBindingMap resMap =
s.nativeResourceBindingMap(QShaderKey(QShader::HlslShader, QShaderVersion(50)));
- QVERIFY(resMap.count() == 4);
+ QVERIFY(resMap.size() == 4);
QVERIFY(s.separateToCombinedImageSamplerMappingList(QShaderKey(QShader::HlslShader, QShaderVersion(50))).isEmpty());
resMap = s.nativeResourceBindingMap(QShaderKey(QShader::MslShader, QShaderVersion(12)));
- QVERIFY(resMap.count() == 4);
+ QVERIFY(resMap.size() == 4);
QVERIFY(s.separateToCombinedImageSamplerMappingList(QShaderKey(QShader::MslShader, QShaderVersion(12))).isEmpty());
for (auto key : {
@@ -600,8 +588,112 @@ void tst_QShader::loadV6WithSeparateImagesAndSamplers()
QShaderKey(QShader::GlslShader, QShaderVersion(150)) })
{
auto list = s.separateToCombinedImageSamplerMappingList(key);
- QCOMPARE(list.count(), 2);
+ QCOMPARE(list.size(), 2);
+ }
+}
+
+void tst_QShader::loadV7()
+{
+ QShader vert = getShader(QLatin1String(":/data/metal_enabled_tessellation_v7.vert.qsb"));
+ QVERIFY(vert.isValid());
+ QCOMPARE(QShaderPrivate::get(&vert)->qsbVersion, 7);
+ QCOMPARE(vert.availableShaders().size(), 8);
+
+ QCOMPARE(vert.description().inputVariables().size(), 2);
+ QCOMPARE(vert.description().outputBuiltinVariables().size(), 1);
+ QCOMPARE(vert.description().outputBuiltinVariables()[0].type, QShaderDescription::PositionBuiltin);
+ QCOMPARE(vert.description().outputVariables().size(), 1);
+ QCOMPARE(vert.description().outputVariables()[0].name, QByteArrayLiteral("v_color"));
+
+ QVERIFY(vert.availableShaders().contains(QShaderKey(QShader::MslShader, QShaderVersion(12))));
+ QVERIFY(!vert.shader(QShaderKey(QShader::MslShader, QShaderVersion(12), QShader::NonIndexedVertexAsComputeShader)).shader().isEmpty());
+ QVERIFY(!vert.shader(QShaderKey(QShader::MslShader, QShaderVersion(12), QShader::UInt16IndexedVertexAsComputeShader)).shader().isEmpty());
+ QVERIFY(!vert.shader(QShaderKey(QShader::MslShader, QShaderVersion(12), QShader::UInt32IndexedVertexAsComputeShader)).shader().isEmpty());
+
+ QShader tesc = getShader(QLatin1String(":/data/metal_enabled_tessellation_v7.tesc.qsb"));
+ QVERIFY(tesc.isValid());
+ QCOMPARE(QShaderPrivate::get(&tesc)->qsbVersion, 7);
+ QCOMPARE(tesc.availableShaders().size(), 5);
+ QCOMPARE(tesc.description().tessellationOutputVertexCount(), 3u);
+
+ QCOMPARE(tesc.description().inputBuiltinVariables().size(), 2);
+ QCOMPARE(tesc.description().outputBuiltinVariables().size(), 3);
+ // builtins must be sorted based on the type
+ QCOMPARE(tesc.description().inputBuiltinVariables()[0].type, QShaderDescription::PositionBuiltin);
+ QCOMPARE(tesc.description().inputBuiltinVariables()[1].type, QShaderDescription::InvocationIdBuiltin);
+ QCOMPARE(tesc.description().outputBuiltinVariables()[0].type, QShaderDescription::PositionBuiltin);
+ QCOMPARE(tesc.description().outputBuiltinVariables()[1].type, QShaderDescription::TessLevelOuterBuiltin);
+ QCOMPARE(tesc.description().outputBuiltinVariables()[2].type, QShaderDescription::TessLevelInnerBuiltin);
+
+ QCOMPARE(tesc.description().outputVariables().size(), 3);
+ for (const QShaderDescription::InOutVariable &v : tesc.description().outputVariables()) {
+ switch (v.location) {
+ case 0:
+ QCOMPARE(v.name, QByteArrayLiteral("outColor"));
+ QCOMPARE(v.type, QShaderDescription::Vec3);
+ QCOMPARE(v.perPatch, false);
+ break;
+ case 1:
+ QCOMPARE(v.name, QByteArrayLiteral("stuff"));
+ QCOMPARE(v.type, QShaderDescription::Vec3);
+ QCOMPARE(v.perPatch, true);
+ break;
+ case 2:
+ QCOMPARE(v.name, QByteArrayLiteral("more_stuff"));
+ QCOMPARE(v.type, QShaderDescription::Float);
+ QCOMPARE(v.perPatch, true);
+ break;
+ default:
+ QFAIL(qPrintable(QStringLiteral("Bad location: %1").arg(v.location)));
+ break;
+ }
}
+
+ QVERIFY(!tesc.shader(QShaderKey(QShader::MslShader, QShaderVersion(12))).shader().isEmpty());
+ QCOMPARE(tesc.nativeShaderInfo(QShaderKey(QShader::SpirvShader, QShaderVersion(100))).extraBufferBindings.size(), 0);
+ QCOMPARE(tesc.nativeShaderInfo(QShaderKey(QShader::MslShader, QShaderVersion(12))).extraBufferBindings.size(), 5);
+
+ QShader tese = getShader(QLatin1String(":/data/metal_enabled_tessellation_v7.tese.qsb"));
+ QVERIFY(tese.isValid());
+ QCOMPARE(QShaderPrivate::get(&tese)->qsbVersion, 7);
+ QCOMPARE(tese.availableShaders().size(), 5);
+ QCOMPARE(tese.description().tessellationMode(), QShaderDescription::TrianglesTessellationMode);
+ QCOMPARE(tese.description().tessellationWindingOrder(), QShaderDescription::CcwTessellationWindingOrder);
+ QCOMPARE(tese.description().tessellationPartitioning(), QShaderDescription::FractionalOddTessellationPartitioning);
+
+ QCOMPARE(tese.description().inputBuiltinVariables()[0].type, QShaderDescription::PositionBuiltin);
+ QCOMPARE(tese.description().inputBuiltinVariables()[1].type, QShaderDescription::TessLevelOuterBuiltin);
+ QCOMPARE(tese.description().inputBuiltinVariables()[2].type, QShaderDescription::TessLevelInnerBuiltin);
+ QCOMPARE(tese.description().inputBuiltinVariables()[3].type, QShaderDescription::TessCoordBuiltin);
+
+ QCOMPARE(tese.nativeResourceBindingMap(QShaderKey(QShader::MslShader, QShaderVersion(12))).size(), 1);
+ QCOMPARE(tese.nativeResourceBindingMap(QShaderKey(QShader::MslShader, QShaderVersion(12))).value(0), qMakePair(0, -1));
+
+ QShader frag = getShader(QLatin1String(":/data/metal_enabled_tessellation_v7.frag.qsb"));
+ QVERIFY(frag.isValid());
+ QCOMPARE(QShaderPrivate::get(&frag)->qsbVersion, 7);
+}
+
+void tst_QShader::loadV8()
+{
+ QShader s = getShader(QLatin1String(":/data/storage_buffer_info_v8.comp.qsb"));
+ QVERIFY(s.isValid());
+ QCOMPARE(QShaderPrivate::get(&s)->qsbVersion, 8);
+
+ const QList<QShaderKey> availableShaders = s.availableShaders();
+ QCOMPARE(availableShaders.size(), 5);
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::SpirvShader, QShaderVersion(100))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::MslShader, QShaderVersion(12))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::HlslShader, QShaderVersion(50))));
+ QVERIFY(availableShaders.contains(
+ QShaderKey(QShader::GlslShader, QShaderVersion(310, QShaderVersion::GlslEs))));
+ QVERIFY(availableShaders.contains(QShaderKey(QShader::GlslShader, QShaderVersion(430))));
+
+ QCOMPARE(s.description().storageBlocks().size(), 1);
+ QCOMPARE(s.description().storageBlocks().last().runtimeArrayStride, 4);
+ QCOMPARE(s.description().storageBlocks().last().qualifierFlags,
+ QShaderDescription::QualifierFlags(QShaderDescription::QualifierWriteOnly
+ | QShaderDescription::QualifierRestrict));
}
#include <tst_qshader.moc>
diff --git a/tests/auto/gui/text/CMakeLists.txt b/tests/auto/gui/text/CMakeLists.txt
index b7262f7c00..bad13de7dc 100644
--- a/tests/auto/gui/text/CMakeLists.txt
+++ b/tests/auto/gui/text/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from text.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qabstracttextdocumentlayout)
add_subdirectory(qfont)
@@ -13,9 +14,10 @@ add_subdirectory(qtextcursor)
add_subdirectory(qtextdocumentfragment)
add_subdirectory(qtextdocumentlayout)
add_subdirectory(qtextformat)
+add_subdirectory(qtextimagehandler)
add_subdirectory(qtextlist)
add_subdirectory(qtextobject)
-# add_subdirectory(qtextscriptengine) # disable until system_harfbuzz feature is available # special case
+# add_subdirectory(qtextscriptengine) # disable until system_harfbuzz feature is available
add_subdirectory(qtexttable)
add_subdirectory(qinputcontrol)
if(QT_FEATURE_private_tests AND TARGET Qt::Xml)
@@ -24,11 +26,9 @@ endif()
if(QT_FEATURE_private_tests)
add_subdirectory(qfontcache)
add_subdirectory(qtextlayout)
- add_subdirectory(qzip)
add_subdirectory(qtextodfwriter)
endif()
-# QTBUG-87671 # special case
-if(TARGET Qt::Xml AND NOT ANDROID)
+if(TARGET Qt::Xml)
add_subdirectory(qtextdocument)
endif()
if(QT_FEATURE_private_tests AND UNIX)
diff --git a/tests/auto/gui/text/qabstracttextdocumentlayout/CMakeLists.txt b/tests/auto/gui/text/qabstracttextdocumentlayout/CMakeLists.txt
index f78e1d81c7..316b9cd3c6 100644
--- a/tests/auto/gui/text/qabstracttextdocumentlayout/CMakeLists.txt
+++ b/tests/auto/gui/text/qabstracttextdocumentlayout/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qabstracttextdocumentlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstracttextdocumentlayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstracttextdocumentlayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstracttextdocumentlayout
SOURCES
tst_qabstracttextdocumentlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/text/qabstracttextdocumentlayout/tst_qabstracttextdocumentlayout.cpp b/tests/auto/gui/text/qabstracttextdocumentlayout/tst_qabstracttextdocumentlayout.cpp
index cdd2b9cd44..2ae2ccda0a 100644
--- a/tests/auto/gui/text/qabstracttextdocumentlayout/tst_qabstracttextdocumentlayout.cpp
+++ b/tests/auto/gui/text/qabstracttextdocumentlayout/tst_qabstracttextdocumentlayout.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 <QTest>
@@ -151,7 +126,7 @@ void tst_QAbstractTextDocumentLayout::anchorAt()
QAbstractTextDocumentLayout *documentLayout = doc.documentLayout();
QTextBlock firstBlock = doc.begin();
QTextLayout *layout = firstBlock.layout();
- layout->setPreeditArea(doc.toPlainText().length(), "xxx");
+ layout->setPreeditArea(doc.toPlainText().size(), "xxx");
doc.setPageSize(QSizeF(1000, 1000));
QFontMetrics metrics(layout->font());
@@ -181,7 +156,7 @@ void tst_QAbstractTextDocumentLayout::imageAt()
QAbstractTextDocumentLayout *documentLayout = doc.documentLayout();
QTextBlock firstBlock = doc.begin();
QTextLayout *layout = firstBlock.layout();
- layout->setPreeditArea(doc.toPlainText().length(), "xxx");
+ layout->setPreeditArea(doc.toPlainText().size(), "xxx");
doc.setPageSize(QSizeF(1000, 1000));
QFontMetrics metrics(layout->font());
@@ -206,7 +181,7 @@ void tst_QAbstractTextDocumentLayout::formatAt()
QAbstractTextDocumentLayout *documentLayout = doc.documentLayout();
QTextBlock firstBlock = doc.begin();
QTextLayout *layout = firstBlock.layout();
- layout->setPreeditArea(doc.toPlainText().length(), "xxx");
+ layout->setPreeditArea(doc.toPlainText().size(), "xxx");
doc.setPageSize(QSizeF(1000, 1000));
QFontMetrics metrics(layout->font());
diff --git a/tests/auto/gui/text/qcssparser/CMakeLists.txt b/tests/auto/gui/text/qcssparser/CMakeLists.txt
index 058a42d68c..e766ec5484 100644
--- a/tests/auto/gui/text/qcssparser/CMakeLists.txt
+++ b/tests/auto/gui/text/qcssparser/CMakeLists.txt
@@ -1,55 +1,28 @@
-# Generated from qcssparser.pro.
-
-if(NOT QT_FEATURE_private_tests)
- return()
-endif()
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcssparser Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcssparser LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
-list(APPEND test_data "testdata")
+file(GLOB_RECURSE test_data
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ testdata/*
+)
qt_internal_add_test(tst_qcssparser
SOURCES
tst_qcssparser.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Xml
TESTDATA ${test_data}
)
-
-#### Keys ignored in scope 1:.:.:qcssparser.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
-
-## Scopes:
-#####################################################################
-
-if(ANDROID)
- # Resources:
- set(testdata_resource_files
- "testdata/scanner/comments/input"
- "testdata/scanner/comments/output"
- "testdata/scanner/comments2/input"
- "testdata/scanner/comments2/output"
- "testdata/scanner/comments3/input"
- "testdata/scanner/comments3/output"
- "testdata/scanner/comments4/input"
- "testdata/scanner/comments4/output"
- "testdata/scanner/quotedstring/input"
- "testdata/scanner/quotedstring/output"
- "testdata/scanner/simple/input"
- "testdata/scanner/simple/output"
- "testdata/scanner/unicode/input"
- "testdata/scanner/unicode/output"
- )
-
- qt_internal_add_resource(tst_qcssparser "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
- )
-endif()
diff --git a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
index 7c16f4aa76..a438d7ebc8 100644
--- a/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
+++ b/tests/auto/gui/text/qcssparser/tst_qcssparser.cpp
@@ -1,30 +1,6 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QtXml/QtXml>
#include <QtGui/QFontInfo>
@@ -94,7 +70,8 @@ void tst_QCssParser::scanner_data()
#endif
d.cd("testdata");
d.cd("scanner");
- foreach (QFileInfo test, d.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot)) {
+ const auto entries = d.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
+ for (const QFileInfo &test : entries) {
QString dir = test.absoluteFilePath() + QDir::separator();
QTest::newRow(qPrintable(test.baseName()))
<< dir + "input"
@@ -151,7 +128,7 @@ static const char *tokenName(QCss::TokenType t)
static void debug(const QList<QCss::Symbol> &symbols, int index = -1)
{
qDebug() << "all symbols:";
- for (int i = 0; i < symbols.count(); ++i)
+ for (int i = 0; i < symbols.size(); ++i)
qDebug() << '(' << i << "); Token:" << tokenName(symbols.at(i).token) << "; Lexem:" << symbols.at(i).lexem();
if (index != -1)
qDebug() << "failure at index" << index;
@@ -169,10 +146,10 @@ void tst_QCssParser::scanner()
QList<QCss::Symbol> symbols;
QCss::Scanner::scan(QCss::Scanner::preprocess(QString::fromUtf8(inputFile.readAll())), &symbols);
- QVERIFY(symbols.count() > 1);
+ QVERIFY(symbols.size() > 1);
QCOMPARE(symbols.last().token, QCss::S);
QCOMPARE(symbols.last().lexem(), QLatin1String("\n"));
- symbols.remove(symbols.count() - 1, 1);
+ symbols.remove(symbols.size() - 1, 1);
QFile outputFile(output);
QVERIFY(outputFile.open(QIODevice::ReadOnly|QIODevice::Text));
@@ -184,14 +161,14 @@ void tst_QCssParser::scanner()
lines.append(line);
}
- if (lines.count() != symbols.count()) {
+ if (lines.size() != symbols.size()) {
debug(symbols);
- QCOMPARE(lines.count(), symbols.count());
+ QCOMPARE(lines.size(), symbols.size());
}
- for (int i = 0; i < lines.count(); ++i) {
+ for (int i = 0; i < lines.size(); ++i) {
QStringList l = lines.at(i).split(QChar::fromLatin1('|'));
- QCOMPARE(l.count(), 2);
+ QCOMPARE(l.size(), 2);
const QString expectedToken = l.at(0);
const QString expectedLexem = l.at(1);
QString actualToken = QString::fromLatin1(tokenName(symbols.at(i).token));
@@ -375,9 +352,9 @@ void tst_QCssParser::expr()
QVERIFY(parser.testExpr());
QCOMPARE(parser.parseExpr(&values), parseSuccess);
if (parseSuccess) {
- QCOMPARE(values.count(), expectedValues.count());
+ QCOMPARE(values.size(), expectedValues.size());
- for (int i = 0; i < values.count(); ++i) {
+ for (int i = 0; i < values.size(); ++i) {
QCOMPARE(int(values.at(i).type), int(expectedValues.at(i).type));
QCOMPARE(values.at(i).variant, expectedValues.at(i).variant);
}
@@ -396,7 +373,7 @@ void tst_QCssParser::import()
QVERIFY(parser.testImport());
QVERIFY(parser.parseImport(&rule));
QCOMPARE(rule.href, QString("www.kde.org"));
- QCOMPARE(rule.media.count(), 2);
+ QCOMPARE(rule.media.size(), 2);
QCOMPARE(rule.media.at(0), QString("print"));
QCOMPARE(rule.media.at(1), QString("screen"));
}
@@ -407,7 +384,7 @@ void tst_QCssParser::media()
QVERIFY(parser.testMedia());
QCss::MediaRule rule;
QVERIFY(parser.parseMedia(&rule));
- QCOMPARE(rule.media.count(), 2);
+ QCOMPARE(rule.media.size(), 2);
QCOMPARE(rule.media.at(0), QString("print"));
QCOMPARE(rule.media.at(1), QString("screen"));
QVERIFY(rule.styleRules.isEmpty());
@@ -430,8 +407,8 @@ void tst_QCssParser::ruleset()
QVERIFY(parser.testRuleset());
QCss::StyleRule rule;
QVERIFY(parser.parseRuleset(&rule));
- QCOMPARE(rule.selectors.count(), 1);
- QCOMPARE(rule.selectors.at(0).basicSelectors.count(), 1);
+ QCOMPARE(rule.selectors.size(), 1);
+ QCOMPARE(rule.selectors.at(0).basicSelectors.size(), 1);
QCOMPARE(rule.selectors.at(0).basicSelectors.at(0).elementName, QString("p"));
QVERIFY(rule.declarations.isEmpty());
}
@@ -441,10 +418,10 @@ void tst_QCssParser::ruleset()
QVERIFY(parser.testRuleset());
QCss::StyleRule rule;
QVERIFY(parser.parseRuleset(&rule));
- QCOMPARE(rule.selectors.count(), 2);
- QCOMPARE(rule.selectors.at(0).basicSelectors.count(), 1);
+ QCOMPARE(rule.selectors.size(), 2);
+ QCOMPARE(rule.selectors.at(0).basicSelectors.size(), 1);
QCOMPARE(rule.selectors.at(0).basicSelectors.at(0).elementName, QString("p"));
- QCOMPARE(rule.selectors.at(1).basicSelectors.count(), 1);
+ QCOMPARE(rule.selectors.at(1).basicSelectors.size(), 1);
QCOMPARE(rule.selectors.at(1).basicSelectors.at(0).elementName, QString("div"));
QVERIFY(rule.declarations.isEmpty());
}
@@ -454,14 +431,14 @@ void tst_QCssParser::ruleset()
QVERIFY(parser.testRuleset());
QCss::StyleRule rule;
QVERIFY(parser.parseRuleset(&rule));
- QCOMPARE(rule.selectors.count(), 2);
+ QCOMPARE(rule.selectors.size(), 2);
- QCOMPARE(rule.selectors.at(0).basicSelectors.count(), 1);
- QCOMPARE(rule.selectors.at(0).basicSelectors.at(0).pseudos.count(), 1);
+ QCOMPARE(rule.selectors.at(0).basicSelectors.size(), 1);
+ QCOMPARE(rule.selectors.at(0).basicSelectors.at(0).pseudos.size(), 1);
QCOMPARE(rule.selectors.at(0).basicSelectors.at(0).pseudos.at(0).name, QString("before"));
- QCOMPARE(rule.selectors.at(1).basicSelectors.count(), 1);
- QCOMPARE(rule.selectors.at(1).basicSelectors.at(0).pseudos.count(), 1);
+ QCOMPARE(rule.selectors.at(1).basicSelectors.size(), 1);
+ QCOMPARE(rule.selectors.at(1).basicSelectors.at(0).pseudos.size(), 1);
QCOMPARE(rule.selectors.at(1).basicSelectors.at(0).pseudos.at(0).name, QString("after"));
QVERIFY(rule.declarations.isEmpty());
@@ -713,21 +690,21 @@ void tst_QCssParser::selector()
QCss::Selector selector;
QVERIFY(parser.parseSelector(&selector));
- QCOMPARE(selector.basicSelectors.count(), expectedSelector.basicSelectors.count());
- for (int i = 0; i < selector.basicSelectors.count(); ++i) {
+ QCOMPARE(selector.basicSelectors.size(), expectedSelector.basicSelectors.size());
+ for (int i = 0; i < selector.basicSelectors.size(); ++i) {
const QCss::BasicSelector sel = selector.basicSelectors.at(i);
const QCss::BasicSelector expectedSel = expectedSelector.basicSelectors.at(i);
QCOMPARE(sel.elementName, expectedSel.elementName);
QCOMPARE(int(sel.relationToNext), int(expectedSel.relationToNext));
- QCOMPARE(sel.pseudos.count(), expectedSel.pseudos.count());
- for (int i = 0; i < sel.pseudos.count(); ++i) {
+ QCOMPARE(sel.pseudos.size(), expectedSel.pseudos.size());
+ for (int i = 0; i < sel.pseudos.size(); ++i) {
QCOMPARE(sel.pseudos.at(i).name, expectedSel.pseudos.at(i).name);
QCOMPARE(sel.pseudos.at(i).function, expectedSel.pseudos.at(i).function);
}
- QCOMPARE(sel.attributeSelectors.count(), expectedSel.attributeSelectors.count());
- for (int i = 0; i < sel.attributeSelectors.count(); ++i) {
+ QCOMPARE(sel.attributeSelectors.size(), expectedSel.attributeSelectors.size());
+ for (int i = 0; i < sel.attributeSelectors.size(); ++i) {
QCOMPARE(sel.attributeSelectors.at(i).name, expectedSel.attributeSelectors.at(i).name);
QCOMPARE(sel.attributeSelectors.at(i).value, expectedSel.attributeSelectors.at(i).value);
QCOMPARE(int(sel.attributeSelectors.at(i).valueMatchCriterium), int(expectedSel.attributeSelectors.at(i).valueMatchCriterium));
@@ -785,13 +762,13 @@ void tst_QCssParser::malformedDeclarations()
QCss::StyleRule rule;
QVERIFY(parser.parseRuleset(&rule));
- QCOMPARE(rule.selectors.count(), 1);
- QCOMPARE(rule.selectors.at(0).basicSelectors.count(), 1);
+ QCOMPARE(rule.selectors.size(), 1);
+ QCOMPARE(rule.selectors.at(0).basicSelectors.size(), 1);
QCOMPARE(rule.selectors.at(0).basicSelectors.at(0).elementName, QString("p"));
- QVERIFY(rule.declarations.count() >= 1);
+ QVERIFY(rule.declarations.size() >= 1);
QCOMPARE(int(rule.declarations.last().d->propertyId), int(QCss::Color));
- QCOMPARE(rule.declarations.last().d->values.count(), 1);
+ QCOMPARE(rule.declarations.last().d->values.size(), 1);
QCOMPARE(int(rule.declarations.last().d->values.at(0).type), int(QCss::Value::Identifier));
QCOMPARE(rule.declarations.last().d->values.at(0).variant.toString(), QString("green"));
}
@@ -811,17 +788,17 @@ void tst_QCssParser::invalidAtKeywords()
QCss::StyleSheet sheet;
QVERIFY(parser.parse(&sheet));
- QCOMPARE(sheet.styleRules.count() + sheet.nameIndex.count(), 1);
+ QCOMPARE(sheet.styleRules.size() + sheet.nameIndex.size(), 1);
QCss::StyleRule rule = (!sheet.styleRules.isEmpty()) ?
sheet.styleRules.at(0) : *sheet.nameIndex.begin();
- QCOMPARE(rule.selectors.count(), 1);
- QCOMPARE(rule.selectors.at(0).basicSelectors.count(), 1);
+ QCOMPARE(rule.selectors.size(), 1);
+ QCOMPARE(rule.selectors.at(0).basicSelectors.size(), 1);
QCOMPARE(rule.selectors.at(0).basicSelectors.at(0).elementName, QString("h1"));
- QCOMPARE(rule.declarations.count(), 1);
+ QCOMPARE(rule.declarations.size(), 1);
QCOMPARE(int(rule.declarations.at(0).d->propertyId), int(QCss::Color));
- QCOMPARE(rule.declarations.at(0).d->values.count(), 1);
+ QCOMPARE(rule.declarations.at(0).d->values.size(), 1);
QCOMPARE(int(rule.declarations.at(0).d->values.at(0).type), int(QCss::Value::Identifier));
QCOMPARE(rule.declarations.at(0).d->values.at(0).variant.toString(), QString("blue"));
}
@@ -1166,9 +1143,9 @@ void tst_QCssParser::styleSelector()
QList<QCss::Declaration> decls = testSelector.declarationsForNode(n);
if (match) {
- QCOMPARE(decls.count(), 1);
+ QCOMPARE(decls.size(), 1);
QCOMPARE(int(decls.at(0).d->propertyId), int(QCss::BackgroundColor));
- QCOMPARE(decls.at(0).d->values.count(), 1);
+ QCOMPARE(decls.at(0).d->values.size(), 1);
QCOMPARE(int(decls.at(0).d->values.at(0).type), int(QCss::Value::Identifier));
QCOMPARE(decls.at(0).d->values.at(0).variant.toString(), QString("green"));
} else {
@@ -1208,11 +1185,11 @@ void tst_QCssParser::specificity()
QCss::StyleSheet sheet;
QVERIFY(parser.parse(&sheet));
- QCOMPARE(sheet.styleRules.count() + sheet.nameIndex.count() + sheet.idIndex.count() , 1);
+ QCOMPARE(sheet.styleRules.size() + sheet.nameIndex.size() + sheet.idIndex.size() , 1);
QCss::StyleRule rule = (!sheet.styleRules.isEmpty()) ? sheet.styleRules.at(0)
: (!sheet.nameIndex.isEmpty()) ? *sheet.nameIndex.begin()
: *sheet.idIndex.begin();
- QCOMPARE(rule.selectors.count(), 1);
+ QCOMPARE(rule.selectors.size(), 1);
QTEST(rule.selectors.at(0).specificity(), "specificity");
}
@@ -1261,15 +1238,15 @@ void tst_QCssParser::specificitySort()
n.ptr = &e;
QList<QCss::Declaration> decls = testSelector.declarationsForNode(n);
- QCOMPARE(decls.count(), 2);
+ QCOMPARE(decls.size(), 2);
QCOMPARE(int(decls.at(0).d->propertyId), int(QCss::Color));
- QCOMPARE(decls.at(0).d->values.count(), 1);
+ QCOMPARE(decls.at(0).d->values.size(), 1);
QCOMPARE(int(decls.at(0).d->values.at(0).type), int(QCss::Value::Identifier));
QCOMPARE(decls.at(0).d->values.at(0).variant.toString(), QString("green"));
QCOMPARE(int(decls.at(1).d->propertyId), int(QCss::Color));
- QCOMPARE(decls.at(1).d->values.count(), 1);
+ QCOMPARE(decls.at(1).d->values.size(), 1);
QCOMPARE(int(decls.at(1).d->values.at(0).type), int(QCss::Value::Identifier));
QCOMPARE(decls.at(1).d->values.at(0).variant.toString(), QString("red"));
}
@@ -1344,7 +1321,7 @@ void tst_QCssParser::rulesForNode()
QList<QCss::StyleRule> rules = testSelector.styleRulesForNode(n);
QList<QCss::Declaration> decls;
- for (int i = 0; i < rules.count(); i++) {
+ for (int i = 0; i < rules.size(); i++) {
const QCss::Selector &selector = rules.at(i).selectors.at(0);
quint64 negated = 0;
quint64 cssClass = selector.pseudoClass(&negated);
@@ -1353,7 +1330,7 @@ void tst_QCssParser::rulesForNode()
decls += rules.at(i).declarations;
}
- QCOMPARE(decls.count(), declCount);
+ QCOMPARE(decls.size(), declCount);
if (declCount > 0)
QCOMPARE(decls.at(0).d->values.at(0).variant.toString(), value0);
@@ -1480,14 +1457,14 @@ void tst_QCssParser::pseudoElement()
n.ptr = &e;
QList<QCss::StyleRule> rules = testSelector.styleRulesForNode(n);
QList<QCss::Declaration> decls;
- for (int i = 0; i < rules.count(); i++) {
+ for (int i = 0; i < rules.size(); i++) {
const QCss::Selector& selector = rules.at(i).selectors.at(0);
if (pseudoElement.compare(selector.pseudoElement(), Qt::CaseInsensitive) != 0)
continue;
decls += rules.at(i).declarations;
}
- QCOMPARE(decls.count(), declCount);
+ QCOMPARE(decls.size(), declCount);
}
void tst_QCssParser::gradient_data()
@@ -1568,20 +1545,26 @@ void tst_QCssParser::gradient()
QList<QCss::StyleRule> rules = testSelector.styleRulesForNode(n);
QList<QCss::Declaration> decls = rules.at(0).declarations;
QCss::ValueExtractor ve(decls);
- QBrush fg, sfg;
- QBrush sbg, abg;
- QVERIFY(ve.extractPalette(&fg, &sfg, &sbg, &abg));
+ QBrush foreground;
+ QBrush selectedForeground;
+ QBrush selectedBackground;
+ QBrush alternateBackground;
+ QBrush placeHolderTextForeground;
+ QBrush accent;
+ QVERIFY(ve.extractPalette(&foreground, &selectedForeground, &selectedBackground,
+ &alternateBackground, &placeHolderTextForeground, &accent));
+
if (type == "linear") {
- QCOMPARE(sbg.style(), Qt::LinearGradientPattern);
- const QLinearGradient *lg = static_cast<const QLinearGradient *>(sbg.gradient());
+ QCOMPARE(selectedBackground.style(), Qt::LinearGradientPattern);
+ const auto *lg = static_cast<const QLinearGradient *>(selectedBackground.gradient());
QCOMPARE(lg->start(), start);
QCOMPARE(lg->finalStop(), finalStop);
} else if (type == "conical") {
- QCOMPARE(sbg.style(), Qt::ConicalGradientPattern);
- const QConicalGradient *cg = static_cast<const QConicalGradient *>(sbg.gradient());
+ QCOMPARE(selectedBackground.style(), Qt::ConicalGradientPattern);
+ const auto *cg = static_cast<const QConicalGradient *>(selectedBackground.gradient());
QCOMPARE(cg->center(), start);
}
- const QGradient *g = sbg.gradient();
+ const QGradient *g = selectedBackground.gradient();
QCOMPARE(g->spread(), QGradient::Spread(spread));
QCOMPARE(g->stops().at(0).first, stop0);
QCOMPARE(g->stops().at(0).second, color0);
@@ -1621,7 +1604,7 @@ void tst_QCssParser::extractFontFamily()
QCss::StyleSheet sheet;
QVERIFY(parser.parse(&sheet));
- QCOMPARE(sheet.styleRules.count() + sheet.nameIndex.count(), 1);
+ QCOMPARE(sheet.styleRules.size() + sheet.nameIndex.size(), 1);
QCss::StyleRule rule = (!sheet.styleRules.isEmpty()) ?
sheet.styleRules.at(0) : *sheet.nameIndex.begin();
@@ -1679,7 +1662,7 @@ void tst_QCssParser::extractBorder()
QCss::StyleSheet sheet;
QVERIFY(parser.parse(&sheet));
- QCOMPARE(sheet.styleRules.count() + sheet.nameIndex.count(), 1);
+ QCOMPARE(sheet.styleRules.size() + sheet.nameIndex.size(), 1);
QCss::StyleRule rule = (!sheet.styleRules.isEmpty()) ?
sheet.styleRules.at(0) : *sheet.nameIndex.begin();
const QList<QCss::Declaration> decls = rule.declarations;
@@ -1709,7 +1692,7 @@ void tst_QCssParser::noTextDecoration()
QCss::StyleSheet sheet;
QVERIFY(parser.parse(&sheet));
- QCOMPARE(sheet.styleRules.count() + sheet.nameIndex.count(), 1);
+ QCOMPARE(sheet.styleRules.size() + sheet.nameIndex.size(), 1);
QCss::StyleRule rule = (!sheet.styleRules.isEmpty()) ?
sheet.styleRules.at(0) : *sheet.nameIndex.begin();
const QList<QCss::Declaration> decls = rule.declarations;
@@ -1734,7 +1717,7 @@ void tst_QCssParser::quotedAndUnquotedIdentifiers()
QCss::StyleSheet sheet;
QVERIFY(parser.parse(&sheet));
- QCOMPARE(sheet.styleRules.count() + sheet.nameIndex.count(), 1);
+ QCOMPARE(sheet.styleRules.size() + sheet.nameIndex.size(), 1);
QCss::StyleRule rule = (!sheet.styleRules.isEmpty()) ?
sheet.styleRules.at(0) : *sheet.nameIndex.begin();
const QList<QCss::Declaration> decls = rule.declarations;
diff --git a/tests/auto/gui/text/qfont/BLACKLIST b/tests/auto/gui/text/qfont/BLACKLIST
index 3629f1fee6..f85d8ceebb 100644
--- a/tests/auto/gui/text/qfont/BLACKLIST
+++ b/tests/auto/gui/text/qfont/BLACKLIST
@@ -1,10 +1,8 @@
[defaultFamily:cursive]
-ubuntu-20.04
centos
b2qt
rhel
[defaultFamily:fantasy]
-ubuntu-20.04
centos
b2qt
rhel
diff --git a/tests/auto/gui/text/qfont/CMakeLists.txt b/tests/auto/gui/text/qfont/CMakeLists.txt
index 6e0583bc30..88ae9959e4 100644
--- a/tests/auto/gui/text/qfont/CMakeLists.txt
+++ b/tests/auto/gui/text/qfont/CMakeLists.txt
@@ -1,18 +1,15 @@
-# Generated from qfont.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfont Test:
#####################################################################
-qt_internal_add_test(tst_qfont
- SOURCES
- tst_qfont.cpp
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Gui
- Qt::GuiPrivate
- Qt::TestPrivate
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfont LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Resources:
set(testfont_resource_files
@@ -20,18 +17,22 @@ set(testfont_resource_files
"weirdfont.otf"
)
-qt_internal_add_resource(tst_qfont "testfont"
- PREFIX
- "/"
- FILES
- ${testfont_resource_files}
+qt_internal_add_test(tst_qfont
+ SOURCES
+ tst_qfont.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::TestPrivate
+ TESTDATA ${testfont_resource_files}
+ BUILTIN_TESTDATA
)
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qfont CONDITION TARGET Qt::Widgets
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
)
diff --git a/tests/auto/gui/text/qfont/tst_qfont.cpp b/tests/auto/gui/text/qfont/tst_qfont.cpp
index e0ece40bdf..5426d7b117 100644
--- a/tests/auto/gui/text/qfont/tst_qfont.cpp
+++ b/tests/auto/gui/text/qfont/tst_qfont.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QTest>
#include <QBuffer>
@@ -44,6 +21,9 @@
#endif
#include <qlist.h>
#include <QtTest/private/qemulationdetector_p.h>
+#include <private/qcomparisontesthelper_p.h>
+
+using namespace Qt::StringLiterals;
class tst_QFont : public QObject
{
@@ -79,6 +59,9 @@ private slots:
void setFamilies();
void setFamiliesAndFamily_data();
void setFamiliesAndFamily();
+ void featureAccessors();
+ void tagCompares_data();
+ void tagCompares();
};
// Testing get/set functions
@@ -175,7 +158,7 @@ void tst_QFont::italicOblique()
continue;
}
QFont f = QFontDatabase::font(family, style, 12);
- QVERIFY(f.italic());
+ QVERIFY2(f.italic(), qPrintable(QString::asprintf("Failed for font \"%ls\"", qUtf16Printable(f.family()))));
}
}
}
@@ -382,15 +365,15 @@ void tst_QFont::insertAndRemoveSubstitutions()
// inserting Foo
QFont::insertSubstitution("BogusFontFamily", "Foo");
- QCOMPARE(QFont::substitutes("BogusFontFamily").count(), 1);
- QCOMPARE(QFont::substitutes("bogusfontfamily").count(), 1);
+ QCOMPARE(QFont::substitutes("BogusFontFamily").size(), 1);
+ QCOMPARE(QFont::substitutes("bogusfontfamily").size(), 1);
// inserting Bar and Baz
QStringList moreFonts;
moreFonts << "Bar" << "Baz";
QFont::insertSubstitutions("BogusFontFamily", moreFonts);
- QCOMPARE(QFont::substitutes("BogusFontFamily").count(), 3);
- QCOMPARE(QFont::substitutes("bogusfontfamily").count(), 3);
+ QCOMPARE(QFont::substitutes("BogusFontFamily").size(), 3);
+ QCOMPARE(QFont::substitutes("bogusfontfamily").size(), 3);
QFont::removeSubstitutions("BogusFontFamily");
// make sure it is empty again
@@ -417,7 +400,7 @@ void tst_QFont::serialize_data()
QTest::newRow("defaultConstructed") << font << QDataStream::Qt_1_0;
font.setLetterSpacing(QFont::AbsoluteSpacing, 105);
- QTest::newRow("letterSpacing") << font << QDataStream::Qt_4_5;
+ QTest::newRow("letterSpacing=105") << font << QDataStream::Qt_4_5;
font = basicFont;
font.setWordSpacing(50.0);
@@ -461,7 +444,7 @@ void tst_QFont::serialize_data()
font = basicFont;
font.setLetterSpacing(QFont::AbsoluteSpacing, 10);
// Fails for 4.4 because letterSpacing wasn't read until 4.5.
- QTest::newRow("letterSpacing") << font << QDataStream::Qt_4_5;
+ QTest::newRow("letterSpacing=10") << font << QDataStream::Qt_4_5;
font = basicFont;
font.setKerning(false);
@@ -614,6 +597,11 @@ void tst_QFont::defaultFamily()
break;
}
}
+
+#if defined(Q_OS_UNIX) && defined(QT_NO_FONTCONFIG)
+ QSKIP("This platform does not support checking for default font acceptability");
+#endif
+
#ifdef Q_PROCESSOR_ARM_32
if (QTestPrivate::isRunningArmOnX86())
QEXPECT_FAIL("", "Fails on ARMv7 QEMU (QTQAINFRA-4127)", Continue);
@@ -861,5 +849,83 @@ void tst_QFont::setFamiliesAndFamily()
QFontDatabase::removeApplicationFont(weirdFontId);
}
+void tst_QFont::featureAccessors()
+{
+ const QFont::Tag abcdTag("abcd");
+ QCOMPARE(abcdTag.toString(), "abcd");
+ QVERIFY(abcdTag.isValid());
+
+ QFont font;
+ QVERIFY(font.featureTags().isEmpty());
+ font.setFeature("abcd", 0xc0ffee);
+
+ QVERIFY(font.isFeatureSet(abcdTag));
+ QVERIFY(!font.isFeatureSet("bcde"));
+ QCOMPARE(font.featureTags().size(), 1);
+ QCOMPARE(font.featureTags().first(), abcdTag);
+ QCOMPARE(font.featureTags().first(), "abcd");
+ QCOMPARE(font.featureValue(abcdTag), 0xc0ffeeU);
+ QCOMPARE(font.featureValue("bcde"), 0U);
+ font.setFeature(abcdTag, 0xf00d);
+ QCOMPARE(font.featureTags().size(), 1);
+ QCOMPARE(font.featureValue(abcdTag), 0xf00dU);
+
+ QFont::Tag invalidTag;
+ QVERIFY(!invalidTag.isValid());
+ font.setFeature(invalidTag, 0xcaca0);
+ QVERIFY(!font.isFeatureSet(invalidTag));
+ QCOMPARE(font.featureTags().size(), 1);
+ QFont font2 = font;
+
+ font.unsetFeature("abcd");
+ QVERIFY(!font.isFeatureSet("abcd"));
+ QVERIFY(font.featureTags().isEmpty());
+
+ QVERIFY(font2.isFeatureSet("abcd"));
+ font2.clearFeatures();
+ QVERIFY(font.featureTags().isEmpty());
+
+ // various constructor compile tests
+ QFont::Tag tag;
+ tag = QFont::Tag("1234");
+ QVERIFY(QFont::Tag::fromString(QByteArray("abcd")));
+ QVERIFY(QFont::Tag::fromString(u"frac"_s));
+
+ // named constructors with invalid input
+ QTest::ignoreMessage(QtWarningMsg, "The tag name must be exactly 4 characters long!");
+ QVERIFY(!QFont::Tag::fromString(u"fraction"_s));
+ QVERIFY(!QFont::Tag::fromValue(0));
+ QVERIFY(QFont::Tag::fromValue(abcdTag.value()));
+
+ enum Features {
+ Frac = QFont::Tag("frac").value()
+ };
+}
+
+void tst_QFont::tagCompares_data()
+{
+ QTestPrivate::testAllComparisonOperatorsCompile<QFont::Tag>();
+
+ QTest::addColumn<QFont::Tag>("lhs");
+ QTest::addColumn<QFont::Tag>("rhs");
+ QTest::addColumn<Qt::strong_ordering>("expectedOrder");
+
+ auto row = [](QFont::Tag left, QFont::Tag right) {
+ QTest::addRow("%s<=>%s", left.toString().constData(), right.toString().constData())
+ << left << right << Qt::compareThreeWay(left.value(), right.value());
+ };
+ row("frac", "wght");
+}
+
+void tst_QFont::tagCompares()
+{
+ QFETCH(QFont::Tag, lhs);
+ QFETCH(QFont::Tag, rhs);
+ QFETCH(Qt::strong_ordering, expectedOrder);
+
+ QVERIFY(comparesEqual(lhs, lhs));
+ QCOMPARE(compareThreeWay(lhs, rhs), expectedOrder);
+}
+
QTEST_MAIN(tst_QFont)
#include "tst_qfont.moc"
diff --git a/tests/auto/gui/text/qfontcache/CMakeLists.txt b/tests/auto/gui/text/qfontcache/CMakeLists.txt
index fb93c91e0c..d9645c115a 100644
--- a/tests/auto/gui/text/qfontcache/CMakeLists.txt
+++ b/tests/auto/gui/text/qfontcache/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qfontcache.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfontcache Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfontcache LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfontcache
SOURCES
tst_qfontcache.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qfontcache/tst_qfontcache.cpp b/tests/auto/gui/text/qfontcache/tst_qfontcache.cpp
index 17d199210d..79f24a2f0d 100644
--- a/tests/auto/gui/text/qfontcache/tst_qfontcache.cpp
+++ b/tests/auto/gui/text/qfontcache/tst_qfontcache.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 <QTest>
diff --git a/tests/auto/gui/text/qfontdatabase/BLACKLIST b/tests/auto/gui/text/qfontdatabase/BLACKLIST
index 95494d6111..88aa9e9c79 100644
--- a/tests/auto/gui/text/qfontdatabase/BLACKLIST
+++ b/tests/auto/gui/text/qfontdatabase/BLACKLIST
@@ -1,5 +1,4 @@
-[systemFixedFont] # QTBUG-54623
-b2qt
-# QTBUG-87405
[systemFixedFont]
-android
+b2qt
+# QTBUG-100948
+qnx
diff --git a/tests/auto/gui/text/qfontdatabase/CMakeLists.txt b/tests/auto/gui/text/qfontdatabase/CMakeLists.txt
index 73ab56d49f..18b96ded5d 100644
--- a/tests/auto/gui/text/qfontdatabase/CMakeLists.txt
+++ b/tests/auto/gui/text/qfontdatabase/CMakeLists.txt
@@ -1,16 +1,23 @@
-# Generated from qfontdatabase.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfontdatabase Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfontdatabase LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "LED_REAL.TTF")
qt_internal_add_test(tst_qfontdatabase
SOURCES
tst_qfontdatabase.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -30,11 +37,15 @@ set_source_files_properties("../../../shared/resources/testfont_italic.ttf"
set_source_files_properties("../../../shared/resources/testfont_open.otf"
PROPERTIES QT_RESOURCE_ALIAS "testfont_open.otf"
)
+set_source_files_properties("../../../shared/resources/testfont_variable.ttf"
+ PROPERTIES QT_RESOURCE_ALIAS "testfont_variable.ttf"
+)
set(testdata_resource_files
"../../../shared/resources/testfont.ttf"
"../../../shared/resources/testfont_condensed.ttf"
"../../../shared/resources/testfont_italic.ttf"
"../../../shared/resources/testfont_open.otf"
+ "../../../shared/resources/testfont_variable.ttf"
"LED_REAL.TTF"
)
diff --git a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
index 5a18260ffc..849e7432d1 100644
--- a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
+++ b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.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 <QTest>
#include <QSignalSpy>
@@ -37,6 +12,11 @@
#include <private/qfont_p.h>
#include <private/qfontengine_p.h>
#include <qpa/qplatformfontdatabase.h>
+#include <qpa/qplatformintegration.h>
+
+#include <QtGui/private/qguiapplication_p.h>
+
+using namespace Qt::StringLiterals;
Q_LOGGING_CATEGORY(lcTests, "qt.text.tests")
@@ -84,15 +64,20 @@ private slots:
void stretchRespected();
+ void variableFont();
+
#ifdef Q_OS_WIN
void findCourier();
#endif
+ void addApplicationFontFallback();
+
private:
QString m_ledFont;
QString m_testFont;
QString m_testFontCondensed;
QString m_testFontItalic;
+ QString m_testFontVariable;
};
tst_QFontDatabase::tst_QFontDatabase()
@@ -105,10 +90,12 @@ void tst_QFontDatabase::initTestCase()
m_testFont = QFINDTESTDATA("testfont.ttf");
m_testFontCondensed = QFINDTESTDATA("testfont_condensed.ttf");
m_testFontItalic = QFINDTESTDATA("testfont_italic.ttf");
+ m_testFontVariable = QFINDTESTDATA("testfont_variable.ttf");
QVERIFY(!m_ledFont.isEmpty());
QVERIFY(!m_testFont.isEmpty());
QVERIFY(!m_testFontCondensed.isEmpty());
QVERIFY(!m_testFontItalic.isEmpty());
+ QVERIFY(!m_testFontVariable.isEmpty());
}
void tst_QFontDatabase::styles_data()
@@ -246,7 +233,7 @@ void tst_QFontDatabase::addAppFont()
int id;
if (useMemoryFont) {
QFile fontfile(m_ledFont);
- fontfile.open(QIODevice::ReadOnly);
+ QVERIFY(fontfile.open(QIODevice::ReadOnly));
QByteArray fontdata = fontfile.readAll();
QVERIFY(!fontdata.isEmpty());
id = QFontDatabase::addApplicationFontFromData(fontdata);
@@ -259,7 +246,7 @@ void tst_QFontDatabase::addAppFont()
QCOMPARE(id, -1);
return;
#endif
- QCOMPARE(fontDbChangedSpy.count(), 1);
+ QCOMPARE(fontDbChangedSpy.size(), 1);
if (id == -1)
QSKIP("Skip the test since app fonts are not supported on this system");
@@ -268,9 +255,9 @@ void tst_QFontDatabase::addAppFont()
const QStringList newFamilies = QFontDatabase::families();
QVERIFY(!newFamilies.isEmpty());
- QVERIFY(newFamilies.count() >= oldFamilies.count());
+ QVERIFY(newFamilies.size() >= oldFamilies.size());
- for (int i = 0; i < addedFamilies.count(); ++i) {
+ for (int i = 0; i < addedFamilies.size(); ++i) {
QString family = addedFamilies.at(i);
QVERIFY(newFamilies.contains(family));
QFont qfont(family);
@@ -279,9 +266,9 @@ void tst_QFontDatabase::addAppFont()
}
QVERIFY(QFontDatabase::removeApplicationFont(id));
- QCOMPARE(fontDbChangedSpy.count(), 2);
+ QCOMPARE(fontDbChangedSpy.size(), 2);
- QVERIFY(QFontDatabase::families().count() <= oldFamilies.count());
+ QVERIFY(QFontDatabase::families().size() <= oldFamilies.size());
}
void tst_QFontDatabase::addTwoAppFontsFromFamily()
@@ -342,8 +329,8 @@ void tst_QFontDatabase::fallbackFonts()
layout.createLine();
layout.endLayout();
- QList<QGlyphRun> runs = layout.glyphRuns(0, 1);
- foreach (QGlyphRun run, runs) {
+ const QList<QGlyphRun> runs = layout.glyphRuns(0, 1);
+ for (QGlyphRun run : runs) {
QRawFont rawFont = run.rawFont();
QVERIFY(rawFont.isValid());
@@ -438,13 +425,12 @@ void tst_QFontDatabase::condensedFontMatching()
QFont f;
f.setStyleStrategy(QFont::NoFontMerging);
QFontPrivate *font_d = QFontPrivate::get(f);
- if (font_d->engineForScript(QChar::Script_Common)->type() != QFontEngine::Freetype)
+ if (font_d->engineForScript(QChar::Script_Common)->type() != QFontEngine::Freetype
+ && font_d->engineForScript(QChar::Script_Common)->type() != QFontEngine::DirectWrite) {
QEXPECT_FAIL("","No matching of sub-family by stretch on Windows", Continue);
+ }
#endif
-#ifdef Q_OS_ANDROID
- QEXPECT_FAIL("", "QTBUG-69216", Continue);
-#endif
QCOMPARE(QFontMetrics(tfcByStretch).horizontalAdvance(testString()),
QFontMetrics(tfcByStyleName).horizontalAdvance(testString()));
@@ -507,29 +493,147 @@ void tst_QFontDatabase::registerOpenTypePreferredNamesApplication()
#ifdef Q_OS_WIN
void tst_QFontDatabase::findCourier()
{
- QFont font = QFontDatabase::font(u"Courier"_qs, u""_qs, 16);
+ QFont font = QFontDatabase::font(u"Courier"_s, u""_s, 16);
QFontInfo info(font);
- QCOMPARE(info.family(), u"Courier New"_qs);
+ QCOMPARE(info.family(), u"Courier New"_s);
QCOMPARE(info.pointSize(), 16);
font = QFontDatabase::font("Courier", "", 64);
info = font;
- QCOMPARE(info.family(), u"Courier New"_qs);
+ QCOMPARE(info.family(), u"Courier New"_s);
QCOMPARE(info.pointSize(), 64);
// By setting "PreferBitmap" we should get Courier itself.
font.setStyleStrategy(QFont::PreferBitmap);
info = font;
- QCOMPARE(info.family(), u"Courier"_qs);
+ QCOMPARE(info.family(), u"Courier"_s);
// Which has an upper bound on point size
QCOMPARE(info.pointSize(), 19);
font.setStyleStrategy(QFont::PreferDefault);
info = font;
- QCOMPARE(info.family(), u"Courier New"_qs);
+ QCOMPARE(info.family(), u"Courier New"_s);
QCOMPARE(info.pointSize(), 64);
}
#endif
+void tst_QFontDatabase::variableFont()
+{
+ {
+ QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase();
+ if (!pfdb->supportsVariableApplicationFonts())
+ QSKIP("Variable application fonts not supported on this platform");
+ }
+
+ int id = QFontDatabase::addApplicationFont(m_testFontVariable);
+ if (id == -1)
+ QSKIP("Skip the test since app fonts are not supported on this system");
+
+ QString family = QFontDatabase::applicationFontFamilies(id).first();
+ {
+ QFont font(family);
+ QCOMPARE(QFontInfo(font).styleName(), u"Regular"_s);
+ QCOMPARE(QFontInfo(font).weight(), QFont::Normal);
+ }
+
+ {
+ QFont font(family);
+ font.setWeight(QFont::Black);
+ QCOMPARE(QFontInfo(font).styleName(), u"QtExtraBold"_s);
+ QCOMPARE(QFontInfo(font).weight(), int(QFont::Black));
+ }
+
+ {
+ QFont regularFont(family);
+ QFont extraBoldFont(family);
+ extraBoldFont.setStyleName(u"QtExtraBold"_s);
+
+ QFontMetricsF regularFm(regularFont);
+ QFontMetricsF extraBoldFm(extraBoldFont);
+
+ QVERIFY(regularFm.horizontalAdvance(QLatin1Char('1')) < extraBoldFm.horizontalAdvance(QLatin1Char('1')));
+ }
+
+ QFontDatabase::removeApplicationFont(id);
+}
+
+void tst_QFontDatabase::addApplicationFontFallback()
+{
+ int ledId = -1;
+ int id = -1;
+ auto cleanup = qScopeGuard([&id, &ledId] {
+ if (id >= 0)
+ QFontDatabase::removeApplicationFont(id);
+ if (ledId >= 0)
+ QFontDatabase::removeApplicationFont(ledId);
+ });
+
+ const QChar hebrewChar(0x05D0); // Hebrew 'aleph'
+
+ ledId = QFontDatabase::addApplicationFont(m_ledFont);
+ if (ledId < 0)
+ QSKIP("Skip the test since app fonts are not supported on this system");
+
+ auto getHebrewFont = [&]() {
+ QTextLayout layout;
+ layout.setText(hebrewChar);
+ layout.setFont(QFont(u"LED Real"_s));
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns();
+ if (glyphRuns.isEmpty())
+ return QString{};
+
+ return glyphRuns.first().rawFont().familyName();
+ };
+
+ QString defaultHebrewFont = getHebrewFont();
+ if (defaultHebrewFont.isEmpty())
+ QSKIP("Skip the test since Hebrew is not supported on this system");
+
+ QVERIFY(QFontDatabase::applicationFallbackFontFamilies(QChar::Script_Hebrew).isEmpty());
+ QFontDatabase::addApplicationFallbackFontFamily(QChar::Script_Hebrew, u"QtBidiTestFont"_s);
+
+ QCOMPARE(QFontDatabase::applicationFallbackFontFamilies(QChar::Script_Hebrew).size(), 1);
+ QCOMPARE(QFontDatabase::applicationFallbackFontFamilies(QChar::Script_Hebrew).first(), u"QtBidiTestFont"_s);
+
+ {
+ QString hebrewFontNow = getHebrewFont();
+ QCOMPARE(hebrewFontNow, defaultHebrewFont);
+ }
+
+ id = QFontDatabase::addApplicationFont(m_testFont);
+ QVERIFY(id >= 0);
+
+ {
+ QString hebrewFontNow = getHebrewFont();
+ QCOMPARE(hebrewFontNow, u"QtBidiTestFont"_s);
+ }
+
+ QFontDatabase::removeApplicationFallbackFontFamily(QChar::Script_Hebrew, u"QtBidiTestFont"_s);
+
+ {
+ QString hebrewFontNow = getHebrewFont();
+ QCOMPARE(hebrewFontNow, defaultHebrewFont);
+ }
+
+ QFontDatabase::setApplicationFallbackFontFamilies(QChar::Script_Hebrew, QStringList(u"QtBidiTestFont"_s));
+
+ {
+ QString hebrewFontNow = getHebrewFont();
+ QCOMPARE(hebrewFontNow, u"QtBidiTestFont"_s);
+ }
+
+ QFontDatabase::setApplicationFallbackFontFamilies(QChar::Script_Hebrew, QStringList{});
+
+ {
+ QString hebrewFontNow = getHebrewFont();
+ QCOMPARE(hebrewFontNow, defaultHebrewFont);
+ }
+
+}
+
QTEST_MAIN(tst_QFontDatabase)
#include "tst_qfontdatabase.moc"
diff --git a/tests/auto/gui/text/qfontmetrics/CMakeLists.txt b/tests/auto/gui/text/qfontmetrics/CMakeLists.txt
index d7a22671d6..d014d27d46 100644
--- a/tests/auto/gui/text/qfontmetrics/CMakeLists.txt
+++ b/tests/auto/gui/text/qfontmetrics/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qfontmetrics.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfontmetrics Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfontmetrics LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfontmetrics
SOURCES
tst_qfontmetrics.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp
index f6700eb43a..678eb0393f 100644
--- a/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.cpp
+++ b/tests/auto/gui/text/qfontmetrics/tst_qfontmetrics.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 <QTest>
@@ -59,6 +34,8 @@ private slots:
void zeroWidthMetrics();
void verticalMetrics_data();
void verticalMetrics();
+ void largeText_data();
+ void largeText(); // QTBUG-123339
};
void tst_QFontMetrics::same()
@@ -413,5 +390,25 @@ void tst_QFontMetrics::verticalMetrics()
QVERIFY(fm.ascent() != 0 || fm.descent() != 0);
}
+void tst_QFontMetrics::largeText_data()
+{
+ QTest::addColumn<qsizetype>("size");
+ for (int i = 1; i < 20; ++i) {
+ qsizetype size = qsizetype(1) << i;
+ QByteArray rowText = QByteArray::number(size);
+ QTest::newRow(rowText.constData()) << size;
+ }
+}
+
+void tst_QFontMetrics::largeText()
+{
+ QFont font;
+ QFontMetrics fm(font);
+ QFETCH(qsizetype, size);
+ QString string(size, QLatin1Char('A'));
+ QRect boundingRect = fm.boundingRect(string);
+ QVERIFY(boundingRect.isValid());
+}
+
QTEST_MAIN(tst_QFontMetrics)
#include "tst_qfontmetrics.moc"
diff --git a/tests/auto/gui/text/qglyphrun/BLACKLIST b/tests/auto/gui/text/qglyphrun/BLACKLIST
deleted file mode 100644
index d8fefd3d9f..0000000000
--- a/tests/auto/gui/text/qglyphrun/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-[mixedScripts]
-ubuntu-18.04
-ubuntu-20.04
diff --git a/tests/auto/gui/text/qglyphrun/CMakeLists.txt b/tests/auto/gui/text/qglyphrun/CMakeLists.txt
index b0585af16f..a9ffd3729d 100644
--- a/tests/auto/gui/text/qglyphrun/CMakeLists.txt
+++ b/tests/auto/gui/text/qglyphrun/CMakeLists.txt
@@ -1,15 +1,15 @@
-# Generated from qglyphrun.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qglyphrun Test:
#####################################################################
-qt_internal_add_test(tst_qglyphrun
- SOURCES
- tst_qglyphrun.cpp
- PUBLIC_LIBRARIES
- Qt::Gui
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qglyphrun LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Resources:
set_source_files_properties("../../../shared/resources/test.ttf"
@@ -17,12 +17,15 @@ set_source_files_properties("../../../shared/resources/test.ttf"
)
set(testdata_resource_files
"../../../shared/resources/test.ttf"
+ "Ligatures.otf"
)
-qt_internal_add_resource(tst_qglyphrun "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
+qt_internal_add_test(tst_qglyphrun
+ SOURCES
+ tst_qglyphrun.cpp
+ LIBRARIES
+ Qt::Gui
+ TESTDATA ${testdata_resource_files}
+ BUILTIN_TESTDATA
)
diff --git a/tests/auto/gui/text/qglyphrun/Ligatures.otf b/tests/auto/gui/text/qglyphrun/Ligatures.otf
new file mode 100644
index 0000000000..194218a0f6
--- /dev/null
+++ b/tests/auto/gui/text/qglyphrun/Ligatures.otf
Binary files differ
diff --git a/tests/auto/gui/text/qglyphrun/tst_qglyphrun.cpp b/tests/auto/gui/text/qglyphrun/tst_qglyphrun.cpp
index 119ec7a19d..8c0c0324c9 100644
--- a/tests/auto/gui/text/qglyphrun/tst_qglyphrun.cpp
+++ b/tests/auto/gui/text/qglyphrun/tst_qglyphrun.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 <QTest>
@@ -64,6 +39,10 @@ private slots:
void mixedScripts();
void multiLineBoundingRect();
void defaultIgnorables();
+ void stringIndexes();
+ void retrievalFlags_data();
+ void retrievalFlags();
+ void objectReplacementCharacter();
private:
int m_testFontId;
@@ -429,7 +408,7 @@ void tst_QGlyphRun::drawMultiScriptText1()
QPixmap drawGlyphs(1000, 1000);
drawGlyphs.fill(Qt::white);
- QList<QGlyphRun> glyphsList = textLayout.glyphRuns();
+ const QList<QGlyphRun> glyphsList = textLayout.glyphRuns();
QCOMPARE(glyphsList.size(), 1);
{
@@ -439,8 +418,7 @@ void tst_QGlyphRun::drawMultiScriptText1()
{
QPainter p(&drawGlyphs);
- foreach (QGlyphRun glyphs, glyphsList)
- p.drawGlyphRun(QPointF(50, 50), glyphs);
+ p.drawGlyphRun(QPointF(50, 50), glyphsList.first());
}
#if defined(DEBUG_SAVE_IMAGE)
@@ -470,7 +448,7 @@ void tst_QGlyphRun::drawMultiScriptText2()
QPixmap drawGlyphs(1000, 1000);
drawGlyphs.fill(Qt::white);
- QList<QGlyphRun> glyphsList = textLayout.glyphRuns();
+ const QList<QGlyphRun> glyphsList = textLayout.glyphRuns();
QCOMPARE(glyphsList.size(), 2);
{
@@ -480,7 +458,7 @@ void tst_QGlyphRun::drawMultiScriptText2()
{
QPainter p(&drawGlyphs);
- foreach (QGlyphRun glyphs, glyphsList)
+ for (const QGlyphRun &glyphs : glyphsList)
p.drawGlyphRun(QPointF(50, 50), glyphs);
}
@@ -585,6 +563,9 @@ void tst_QGlyphRun::boundingRect()
void tst_QGlyphRun::mixedScripts()
{
+ if (QFontDatabase::families(QFontDatabase::Korean).isEmpty())
+ QSKIP("This test requires support for Hangul text");
+
QString s;
s += QChar(0x31); // The character '1'
s += QChar(0xbc14); // Hangul character
@@ -630,17 +611,365 @@ void tst_QGlyphRun::multiLineBoundingRect()
void tst_QGlyphRun::defaultIgnorables()
{
+ {
+ QTextLayout layout;
+ layout.setFont(QFont("QtsSpecialTestFont"));
+ layout.setText(QChar(0x200D));
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ QList<QGlyphRun> runs = layout.glyphRuns();
+ QCOMPARE(runs.size(), 0);
+ }
+
+ {
+ QTextLayout layout;
+ layout.setFont(QFont("QtsSpecialTestFont"));
+ layout.setText(QStringLiteral("AAA") + QChar(0xFE0F) + QStringLiteral("111"));
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ QList<QGlyphRun> runs = layout.glyphRuns();
+ QVERIFY(!runs.isEmpty());
+
+ bool hasFullMainFontRun = false;
+ for (const QGlyphRun &run : runs) {
+ // QtsSpecialFont will be used for at least five characters: AA[...]111
+ // Depending on the font selected for the 0xFE0F variant selector, the
+ // third 'A' may be in QtsSpecialFont or in the fallback. This is platform-specific,
+ // so we accept either.
+ if (run.rawFont().familyName() == QStringLiteral("QtsSpecialTestFont")
+ && run.glyphIndexes().size() >= 5) {
+ hasFullMainFontRun = true;
+ break;
+ }
+ }
+ QVERIFY(hasFullMainFontRun);
+ }
+}
+
+void tst_QGlyphRun::stringIndexes()
+{
+ int ligatureFontId = QFontDatabase::addApplicationFont(QFINDTESTDATA("Ligatures.otf"));
+ QVERIFY(ligatureFontId >= 0);
+
+ QFont ligatureFont = QFont("QtLigatures");
+ QCOMPARE(QFontInfo(ligatureFont).family(), QString::fromLatin1("QtLigatures"));
+
+ QTextLayout::GlyphRunRetrievalFlags retrievalFlags
+ = QTextLayout::RetrieveGlyphIndexes | QTextLayout::RetrieveStringIndexes;
+
+ // Three characters -> three glyphs
+ {
+ QTextLayout layout;
+ layout.setText("f i");
+ layout.setFont(ligatureFont);
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ {
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(-1, -1, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 3);
+ QCOMPARE(stringIndexes.at(0), 0);
+ QCOMPARE(stringIndexes.at(1), 1);
+ QCOMPARE(stringIndexes.at(2), 2);
+ }
+
+ {
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(2, -1, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 1);
+ QCOMPARE(stringIndexes.at(0), 2);
+ }
+ }
+
+ // Two characters -> one glyph
+ {
+ QTextLayout layout;
+ layout.setText("fi");
+ layout.setFont(ligatureFont);
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ {
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(-1, -1, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().size(), 1);
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(0), uint(233));
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 1);
+ QCOMPARE(stringIndexes.at(0), 0);
+ }
+
+ {
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(1, -1, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().size(), 1);
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(0), uint(233));
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 1);
+ QCOMPARE(stringIndexes.at(0), 1);
+ }
+ }
+
+ // Four characters -> three glyphs
+ {
+ QTextLayout layout;
+ layout.setText("ffii");
+ layout.setFont(ligatureFont);
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ {
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(-1, -1, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().size(), 3);
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(0), uint(71));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(1), uint(233));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(2), uint(74));
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 3);
+ QCOMPARE(stringIndexes.at(0), uint(0));
+ QCOMPARE(stringIndexes.at(1), uint(1));
+ QCOMPARE(stringIndexes.at(2), uint(3));
+ }
+
+ {
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(1, 1, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().size(), 1);
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(0), uint(233));
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 1);
+ QCOMPARE(stringIndexes.at(0), uint(1));
+ }
+
+ {
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(1, 2, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().size(), 1);
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(0), uint(233));
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 1);
+ QCOMPARE(stringIndexes.at(0), uint(1));
+ }
+
+ {
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(1, 3, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().size(), 2);
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(0), uint(233));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(1), uint(74));
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 2);
+ QCOMPARE(stringIndexes.at(0), 1);
+ QCOMPARE(stringIndexes.at(1), 3);
+ }
+
+ }
+
+ // One character -> two glyphs
+ {
+ QTextLayout layout;
+ layout.setText(QChar(0xe6)); // LATIN SMALL LETTER AE
+ layout.setFont(ligatureFont);
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(-1, -1, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().size(), 2);
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(0), uint(66));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(1), uint(70));
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 2);
+ QCOMPARE(stringIndexes.at(0), uint(0));
+ QCOMPARE(stringIndexes.at(1), uint(0));
+ }
+
+ // Three characters -> four glyphs
+ {
+ QTextLayout layout;
+ layout.setText(QString('f') + QChar(0xe6) + QChar('i'));
+ layout.setFont(ligatureFont);
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ {
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(-1, -1, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().size(), 4);
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(0), uint(71));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(1), uint(66));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(2), uint(70));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(3), uint(74));
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 4);
+ QCOMPARE(stringIndexes.at(0), 0);
+ QCOMPARE(stringIndexes.at(1), 1);
+ QCOMPARE(stringIndexes.at(2), 1);
+ QCOMPARE(stringIndexes.at(3), 2);
+ }
+
+ {
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(1, -1, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().size(), 3);
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(0), uint(66));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(1), uint(70));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(2), uint(74));
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 3);
+ QCOMPARE(stringIndexes.at(0), 1);
+ QCOMPARE(stringIndexes.at(1), 1);
+ QCOMPARE(stringIndexes.at(2), 2);
+ }
+
+ {
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(0, 2, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().size(), 3);
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(0), uint(71));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(1), uint(66));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(2), uint(70));
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 3);
+ QCOMPARE(stringIndexes.at(0), 0);
+ QCOMPARE(stringIndexes.at(1), 1);
+ QCOMPARE(stringIndexes.at(2), 1);
+ }
+
+
+ }
+
+ // Five characters -> five glyphs
+ {
+ QTextLayout layout;
+ layout.setText(QLatin1String("ffi") + QChar(0xe6) + QLatin1Char('i'));
+ layout.setFont(ligatureFont);
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(-1, -1, retrievalFlags);
+ QCOMPARE(glyphRuns.size(), 1);
+
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().size(), 5);
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(0), uint(71));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(1), uint(233));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(2), uint(66));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(3), uint(70));
+ QCOMPARE(glyphRuns.at(0).glyphIndexes().at(4), uint(74));
+
+ QList<qsizetype> stringIndexes = glyphRuns.at(0).stringIndexes();
+ QCOMPARE(stringIndexes.size(), 5);
+ QCOMPARE(stringIndexes.at(0), 0);
+ QCOMPARE(stringIndexes.at(1), 1);
+ QCOMPARE(stringIndexes.at(2), 3);
+ QCOMPARE(stringIndexes.at(3), 3);
+ QCOMPARE(stringIndexes.at(4), 4);
+ }
+
+}
+
+void tst_QGlyphRun::retrievalFlags_data()
+{
+ QTest::addColumn<QTextLayout::GlyphRunRetrievalFlags>("flags");
+ QTest::addColumn<bool>("expectedGlyphIndexes");
+ QTest::addColumn<bool>("expectedStringIndexes");
+ QTest::addColumn<bool>("expectedString");
+ QTest::addColumn<bool>("expectedGlyphPositions");
+
+ QTest::newRow("Glyph indexes")
+ << QTextLayout::GlyphRunRetrievalFlags(QTextLayout::RetrieveGlyphIndexes)
+ << true << false << false << false;
+ QTest::newRow("Glyph Positions")
+ << QTextLayout::GlyphRunRetrievalFlags(QTextLayout::RetrieveGlyphPositions)
+ << false << false << false << true;
+ QTest::newRow("String indexes")
+ << QTextLayout::GlyphRunRetrievalFlags(QTextLayout::RetrieveStringIndexes)
+ << false << true << false << false;
+ QTest::newRow("String")
+ << QTextLayout::GlyphRunRetrievalFlags(QTextLayout::RetrieveString)
+ << false << false << true << false;
+
+ QTest::newRow("Default")
+ << QTextLayout::GlyphRunRetrievalFlags(QTextLayout::DefaultRetrievalFlags)
+ << true << false << false << true;
+ QTest::newRow("All")
+ << QTextLayout::GlyphRunRetrievalFlags(QTextLayout::RetrieveAll)
+ << true << true << true << true;
+}
+
+void tst_QGlyphRun::retrievalFlags()
+{
+ QFETCH(QTextLayout::GlyphRunRetrievalFlags, flags);
+ QFETCH(bool, expectedGlyphIndexes);
+ QFETCH(bool, expectedStringIndexes);
+ QFETCH(bool, expectedString);
+ QFETCH(bool, expectedGlyphPositions);
+
QTextLayout layout;
- layout.setFont(QFont("QtsSpecialTestFont"));
- layout.setText(QChar(0x200D));
+ layout.setText(QLatin1String("abc"));
layout.beginLayout();
layout.createLine();
layout.endLayout();
- QList<QGlyphRun> runs = layout.glyphRuns();
- QCOMPARE(runs.size(), 1);
- QCOMPARE(runs.at(0).glyphIndexes().size(), 1);
- QCOMPARE(runs.at(0).glyphIndexes()[0], uint(0));
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns(-1, -1, flags);
+ QVERIFY(!glyphRuns.isEmpty());
+
+ QGlyphRun firstGlyphRun = glyphRuns.first();
+ QCOMPARE(firstGlyphRun.glyphIndexes().isEmpty(), !expectedGlyphIndexes);
+ QCOMPARE(firstGlyphRun.stringIndexes().isEmpty(), !expectedStringIndexes);
+ QCOMPARE(firstGlyphRun.sourceString().isEmpty(), !expectedString);
+ QCOMPARE(firstGlyphRun.positions().isEmpty(), !expectedGlyphPositions);
+}
+
+void tst_QGlyphRun::objectReplacementCharacter()
+{
+ QTextLayout layout;
+ layout.setFont(m_testFont);
+ layout.setText(QStringLiteral("\uFFFC"));
+ layout.beginLayout();
+ layout.createLine();
+ layout.endLayout();
+
+ QList<QGlyphRun> glyphRuns = layout.glyphRuns();
+ QCOMPARE(glyphRuns.size(), 1);
+ QCOMPARE(glyphRuns.first().glyphIndexes().size(), 1);
+ QCOMPARE(glyphRuns.first().glyphIndexes().first(), uint(5));
}
#endif // QT_NO_RAWFONT
diff --git a/tests/auto/gui/text/qinputcontrol/CMakeLists.txt b/tests/auto/gui/text/qinputcontrol/CMakeLists.txt
index 048a96ef77..75fc85bc39 100644
--- a/tests/auto/gui/text/qinputcontrol/CMakeLists.txt
+++ b/tests/auto/gui/text/qinputcontrol/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qinputcontrol.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qinputcontrol Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qinputcontrol LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qinputcontrol
SOURCES
tst_qinputcontrol.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
diff --git a/tests/auto/gui/text/qinputcontrol/tst_qinputcontrol.cpp b/tests/auto/gui/text/qinputcontrol/tst_qinputcontrol.cpp
index 3e64c3c09a..678f4491c4 100644
--- a/tests/auto/gui/text/qinputcontrol/tst_qinputcontrol.cpp
+++ b/tests/auto/gui/text/qinputcontrol/tst_qinputcontrol.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 <QTest>
diff --git a/tests/auto/gui/text/qrawfont/BLACKLIST b/tests/auto/gui/text/qrawfont/BLACKLIST
deleted file mode 100644
index 44b3d7d481..0000000000
--- a/tests/auto/gui/text/qrawfont/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-# QTBUG-85364
-windows-10 gcc cmake
diff --git a/tests/auto/gui/text/qrawfont/CMakeLists.txt b/tests/auto/gui/text/qrawfont/CMakeLists.txt
index 04db8d8760..d2a318a2a3 100644
--- a/tests/auto/gui/text/qrawfont/CMakeLists.txt
+++ b/tests/auto/gui/text/qrawfont/CMakeLists.txt
@@ -1,17 +1,15 @@
-# Generated from qrawfont.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qrawfont Test:
#####################################################################
-qt_internal_add_test(tst_qrawfont
- SOURCES
- tst_qrawfont.cpp
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Gui
- Qt::GuiPrivate
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qrawfont LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Resources:
set_source_files_properties("../../../shared/resources/testfont.ttf"
@@ -23,10 +21,14 @@ set(testdata_resource_files
"testfont_os2_v1.ttf"
)
-qt_internal_add_resource(tst_qrawfont "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
+qt_internal_add_test(tst_qrawfont
+ SOURCES
+ tst_qrawfont.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ TESTDATA ${testdata_resource_files}
+ BUILTIN_TESTDATA
)
diff --git a/tests/auto/gui/text/qrawfont/tst_qrawfont.cpp b/tests/auto/gui/text/qrawfont/tst_qrawfont.cpp
index a730174ee9..5ec2536718 100644
--- a/tests/auto/gui/text/qrawfont/tst_qrawfont.cpp
+++ b/tests/auto/gui/text/qrawfont/tst_qrawfont.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 <QTest>
#include <QtGui/QFontDatabase>
@@ -121,7 +96,7 @@ void tst_QRawFont::initTestCase()
if (testFont.isEmpty() || testFontBoldItalic.isEmpty())
QFAIL("qrawfont unittest font files not found!");
- if (QFontDatabase::families().count() == 0)
+ if (QFontDatabase::families().size() == 0)
QSKIP("No fonts available!!!");
}
@@ -423,13 +398,13 @@ void tst_QRawFont::textLayout()
void tst_QRawFont::fontTable_data()
{
- QTest::addColumn<QByteArray>("tagName");
+ QTest::addColumn<QFont::Tag>("tag");
QTest::addColumn<QFont::HintingPreference>("hintingPreference");
QTest::addColumn<int>("offset");
QTest::addColumn<quint32>("expectedValue");
QTest::newRow("Head table, magic number, default hinting")
- << QByteArray("head")
+ << QFont::Tag("head")
<< QFont::PreferDefaultHinting
<< 12
<< (QSysInfo::ByteOrder == QSysInfo::BigEndian
@@ -437,7 +412,7 @@ void tst_QRawFont::fontTable_data()
: 0xF53C0F5F);
QTest::newRow("Head table, magic number, no hinting")
- << QByteArray("head")
+ << QFont::Tag("head")
<< QFont::PreferNoHinting
<< 12
<< (QSysInfo::ByteOrder == QSysInfo::BigEndian
@@ -445,7 +420,7 @@ void tst_QRawFont::fontTable_data()
: 0xF53C0F5F);
QTest::newRow("Head table, magic number, vertical hinting")
- << QByteArray("head")
+ << QFont::Tag("head")
<< QFont::PreferVerticalHinting
<< 12
<< (QSysInfo::ByteOrder == QSysInfo::BigEndian
@@ -453,7 +428,7 @@ void tst_QRawFont::fontTable_data()
: 0xF53C0F5F);
QTest::newRow("Head table, magic number, full hinting")
- << QByteArray("head")
+ << QFont::Tag("head")
<< QFont::PreferFullHinting
<< 12
<< (QSysInfo::ByteOrder == QSysInfo::BigEndian
@@ -463,7 +438,7 @@ void tst_QRawFont::fontTable_data()
void tst_QRawFont::fontTable()
{
- QFETCH(QByteArray, tagName);
+ QFETCH(QFont::Tag, tag);
QFETCH(QFont::HintingPreference, hintingPreference);
QFETCH(int, offset);
QFETCH(quint32, expectedValue);
@@ -471,11 +446,13 @@ void tst_QRawFont::fontTable()
QRawFont font(testFont, 10, hintingPreference);
QVERIFY(font.isValid());
- QByteArray table = font.fontTable(tagName);
+ QByteArray table = font.fontTable(tag);
QVERIFY(!table.isEmpty());
const quint32 *value = reinterpret_cast<const quint32 *>(table.constData() + offset);
QCOMPARE(*value, expectedValue);
+
+ QCOMPARE(font.fontTable(tag.toString()), table);
}
typedef QList<QFontDatabase::WritingSystem> WritingSystemList;
@@ -515,7 +492,7 @@ void tst_QRawFont::supportedWritingSystems_data()
void tst_QRawFont::supportedWritingSystems()
{
QFETCH(QString, fileName);
- QFETCH(WritingSystemList, writingSystems);
+ QFETCH(const WritingSystemList, writingSystems);
QFETCH(QFont::HintingPreference, hintingPreference);
QRawFont font(fileName, 10, hintingPreference);
@@ -524,7 +501,7 @@ void tst_QRawFont::supportedWritingSystems()
WritingSystemList actualWritingSystems = font.supportedWritingSystems();
QCOMPARE(actualWritingSystems.size(), writingSystems.size());
- foreach (QFontDatabase::WritingSystem writingSystem, writingSystems)
+ for (QFontDatabase::WritingSystem writingSystem : writingSystems)
QVERIFY(actualWritingSystems.contains(writingSystem));
}
@@ -1077,7 +1054,7 @@ void tst_QRawFont::qtbug65923_partal_clone_data()
void tst_QRawFont::qtbug65923_partal_clone()
{
QFile file(testFont);
- file.open(QIODevice::ReadOnly);
+ QVERIFY(file.open(QIODevice::ReadOnly));
QByteArray fontData = file.readAll();
QRawFont outerFont;
diff --git a/tests/auto/gui/text/qstatictext/CMakeLists.txt b/tests/auto/gui/text/qstatictext/CMakeLists.txt
index a7ba4e392a..bdad2609fe 100644
--- a/tests/auto/gui/text/qstatictext/CMakeLists.txt
+++ b/tests/auto/gui/text/qstatictext/CMakeLists.txt
@@ -1,21 +1,28 @@
-# Generated from qstatictext.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstatictext Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstatictext LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstatictext
SOURCES
tst_qstatictext.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
## Scopes:
#####################################################################
-qt_internal_extend_target(tst_qstatictext CONDITION QT_FEATURE_private_tests
- PUBLIC_LIBRARIES
+qt_internal_extend_target(tst_qstatictext CONDITION QT_FEATURE_developer_build
+ LIBRARIES
Qt::CorePrivate
Qt::GuiPrivate
)
diff --git a/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp b/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp
index b55257533a..add2303199 100644
--- a/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp
+++ b/tests/auto/gui/text/qstatictext/tst_qstatictext.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <QtCore/QSet>
#include <QtGui/QGuiApplication>
#include <QtGui/QPainter>
#include <QtGui/QImage>
@@ -74,10 +50,6 @@ private slots:
void rotatedPainter();
void scaledPainter();
void projectedPainter();
-#if 0
- void rotatedScaledAndTranslatedPainter_data();
- void rotatedScaledAndTranslatedPainter();
-#endif
void transformationChanged();
void plainTextVsRichText();
@@ -261,8 +233,8 @@ void tst_QStaticText::compareToDrawText()
#if defined(DEBUG_SAVE_IMAGE)
imageDrawText.save("compareToDrawText_imageDrawText.png");
- imageDrawStaticText.save("compareToDrawText_imageDrawStaticPlainText.png");
- imageDrawStaticText.save("compareToDrawText_imageDrawStaticRichText.png");
+ imageDrawStaticPlainText.save("compareToDrawText_imageDrawStaticPlainText.png");
+ imageDrawStaticRichText.save("compareToDrawText_imageDrawStaticRichText.png");
#endif
QVERIFY(imageDrawText.toImage() != m_whiteSquare);
@@ -525,61 +497,6 @@ void tst_QStaticText::projectedPainter()
QCOMPARE(imageDrawStaticText, imageDrawText);
}
-#if 0
-void tst_QStaticText::rotatedScaledAndTranslatedPainter_data()
-{
- QTest::addColumn<qreal>("offset");
-
- for (int i=0; i<100; ++i) {
- qreal offset = 300 + i / 100.;
- QTest::newRow(QByteArray::number(offset).constData()) << offset;
- }
-}
-
-void tst_QStaticText::rotatedScaledAndTranslatedPainter()
-{
- QFETCH(qreal, offset);
-
- QPixmap imageDrawText(1000, 1000);
- imageDrawText.fill(Qt::white);
- {
- QPainter p(&imageDrawText);
- p.translate(offset, 0);
- p.rotate(45.0);
- p.scale(2.0, 2.0);
- p.translate(100, 200);
-
- p.drawText(11, 12, "Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
- }
-
- QPixmap imageDrawStaticText(1000, 1000);
- imageDrawStaticText.fill(Qt::white);
- {
- QPainter p(&imageDrawStaticText);
- p.translate(offset, 0);
- p.rotate(45.0);
- p.scale(2.0, 2.0);
- p.translate(100, 200);
-
- QStaticText text("Lorem ipsum dolor sit amet, consectetur adipiscing elit.");
- text.setTextFormat(Qt::PlainText);
-
- p.drawStaticText(QPointF(11, 12 - QFontMetricsF(p.font()).ascent()), text);
- }
-
-#if defined(DEBUG_SAVE_IMAGE)
- imageDrawText.save("rotatedScaledAndPainter_imageDrawText.png");
- imageDrawStaticText.save("rotatedScaledAndPainter_imageDrawStaticText.png");
-#endif
-
- QVERIFY(imageDrawText.toImage() != m_whiteSquare);
-
- if (!supportsTransformations())
- QEXPECT_FAIL("", "Graphics system does not support transformed text on this platform", Abort);
- QCOMPARE(imageDrawStaticText, imageDrawText);
-}
-#endif
-
void tst_QStaticText::transformationChanged()
{
QPixmap imageDrawText(1000, 1000);
diff --git a/tests/auto/gui/text/qsyntaxhighlighter/CMakeLists.txt b/tests/auto/gui/text/qsyntaxhighlighter/CMakeLists.txt
index 9ac732cee0..f1c9146ce1 100644
--- a/tests/auto/gui/text/qsyntaxhighlighter/CMakeLists.txt
+++ b/tests/auto/gui/text/qsyntaxhighlighter/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsyntaxhighlighter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsyntaxhighlighter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsyntaxhighlighter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsyntaxhighlighter
SOURCES
tst_qsyntaxhighlighter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
@@ -15,6 +22,6 @@ qt_internal_add_test(tst_qsyntaxhighlighter
#####################################################################
qt_internal_extend_target(tst_qsyntaxhighlighter CONDITION TARGET Qt::Widgets
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
)
diff --git a/tests/auto/gui/text/qsyntaxhighlighter/tst_qsyntaxhighlighter.cpp b/tests/auto/gui/text/qsyntaxhighlighter/tst_qsyntaxhighlighter.cpp
index 43086a1c14..748f494a41 100644
--- a/tests/auto/gui/text/qsyntaxhighlighter/tst_qsyntaxhighlighter.cpp
+++ b/tests/auto/gui/text/qsyntaxhighlighter/tst_qsyntaxhighlighter.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 <QTest>
@@ -125,7 +100,7 @@ public:
virtual void highlightBlock(const QString &text) override
{
- for (int i = 0; i < formats.count(); ++i) {
+ for (int i = 0; i < formats.size(); ++i) {
const QTextLayout::FormatRange &range = formats.at(i);
setFormat(range.start, range.length, range.format);
}
@@ -186,7 +161,7 @@ public:
commentFormat.setForeground(Qt::darkGreen);
commentFormat.setFontWeight(QFont::StyleItalic);
commentFormat.setFontFixedPitch(true);
- int textLength = text.length();
+ int textLength = text.size();
if (text.startsWith(QLatin1Char(';'))){
// The entire line is a comment
@@ -439,7 +414,7 @@ void tst_QSyntaxHighlighter::preservePreeditArea()
QCOMPARE(hl->callCount, 1);
formats = layout->formats();
- QCOMPARE(formats.count(), 3);
+ QCOMPARE(formats.size(), 3);
range = formats.at(0);
@@ -518,7 +493,7 @@ void tst_QSyntaxHighlighter::noContentsChangedDuringHighlight()
QSignalSpy contentsChangedSpy(doc, SIGNAL(contentsChanged()));
cursor.insertText("Hello World");
- QCOMPARE(contentsChangedSpy.count(), 1);
+ QCOMPARE(contentsChangedSpy.size(), 1);
QVERIFY(hl->highlighted);
QVERIFY(lout->documentChangedCalled);
}
diff --git a/tests/auto/gui/text/qtextblock/CMakeLists.txt b/tests/auto/gui/text/qtextblock/CMakeLists.txt
index aedd6c27a3..83cc1ce08e 100644
--- a/tests/auto/gui/text/qtextblock/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextblock/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtextblock.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextblock Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextblock LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtextblock
SOURCES
tst_qtextblock.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qtextblock/tst_qtextblock.cpp b/tests/auto/gui/text/qtextblock/tst_qtextblock.cpp
index 0d638706eb..50331ddef2 100644
--- a/tests/auto/gui/text/qtextblock/tst_qtextblock.cpp
+++ b/tests/auto/gui/text/qtextblock/tst_qtextblock.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/QTest>
diff --git a/tests/auto/gui/text/qtextcursor/CMakeLists.txt b/tests/auto/gui/text/qtextcursor/CMakeLists.txt
index a82dc928e9..487965f9f8 100644
--- a/tests/auto/gui/text/qtextcursor/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextcursor/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtextcursor.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextcursor Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextcursor LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtextcursor
SOURCES
tst_qtextcursor.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qtextcursor/tst_qtextcursor.cpp b/tests/auto/gui/text/qtextcursor/tst_qtextcursor.cpp
index 17d2336b74..6984cd1bd2 100644
--- a/tests/auto/gui/text/qtextcursor/tst_qtextcursor.cpp
+++ b/tests/auto/gui/text/qtextcursor/tst_qtextcursor.cpp
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <QLoggingCategory>
+#include <qfontinfo.h>
#include <qtextdocument.h>
#include <qtexttable.h>
#include <qvariant.h>
@@ -41,6 +18,8 @@
#include <private/qtextcursor_p.h>
+Q_LOGGING_CATEGORY(lcTests, "qt.gui.tests")
+
QT_FORWARD_DECLARE_CLASS(QTextDocument)
class tst_QTextCursor : public QObject
@@ -110,6 +89,14 @@ private slots:
void selectVisually();
void insertText();
+#ifndef QT_NO_TEXTHTMLPARSER
+ void insertHtml_data();
+ void insertHtml();
+#endif
+#if QT_CONFIG(textmarkdownreader)
+ void insertMarkdown_data();
+ void insertMarkdown();
+#endif
void insertFragmentShouldUseCurrentCharFormat();
@@ -1428,6 +1415,221 @@ void tst_QTextCursor::insertText()
QCOMPARE(cursor.block().text(), QString("yoyodyne"));
}
+
+#ifndef QT_NO_TEXTHTMLPARSER
+
+void tst_QTextCursor::insertHtml_data()
+{
+ QTest::addColumn<QString>("initialText");
+ QTest::addColumn<int>("expectedInitialBlockCount");
+ QTest::addColumn<bool>("insertBlock");
+ QTest::addColumn<bool>("insertAsPlainText");
+ QTest::addColumn<int>("insertPosition");
+ QTest::addColumn<QString>("insertText");
+ QTest::addColumn<QString>("expectedSelText");
+ QTest::addColumn<QString>("expectedText");
+ QTest::addColumn<QString>("expectedMarkdown");
+
+ const QString htmlHeadingString("<h1>Hello World</h1>");
+
+ QTest::newRow("insert as html at end of heading")
+ << htmlHeadingString << 1
+ << false << false << 11 << QString("Other\ntext")
+ << QString("Hello WorldOther text")
+ << QString("Hello WorldOther text")
+ << QString("# Hello WorldOther text\n\n");
+
+ QTest::newRow("insert as html in new block at end of heading")
+ << htmlHeadingString << 1
+ << false << true << 11 << QString("Other\ntext")
+ << QString("Hello WorldOther\u2029text")
+ << QString("Hello WorldOther\ntext")
+ << QString("# Hello WorldOther\n\n# text\n\n");
+
+ QTest::newRow("insert as html in middle of heading")
+ << htmlHeadingString << 1
+ << false << false << 6 << QString("\n\nOther\ntext\n\n")
+ << QString("Hello Other text World")
+ << QString("Hello Other text World")
+ << QString("# Hello Other text World\n\n");
+
+ QTest::newRow("insert as text at end of heading")
+ << htmlHeadingString << 1
+ << true << false << 11 << QString("\n\nOther\ntext")
+ << QString("Hello World\u2029Other text")
+ << QString("Hello World\nOther text")
+ << QString("# Hello World\n\nOther text\n\n");
+
+ QTest::newRow("insert as text in new block at end of heading")
+ << htmlHeadingString << 1
+ << true << true << 11 << QString("\n\nOther\ntext")
+ << QString("Hello World\u2029\u2029\u2029Other\u2029text")
+ << QString("Hello World\n\n\nOther\ntext")
+ << QString("# Hello World\n\n**Other**\n\n**text**\n\n");
+
+ QTest::newRow("insert as text in middle of heading")
+ << htmlHeadingString << 1
+ << true << false << 6 << QString("Other\ntext")
+ << QString("Hello \u2029Other textWorld")
+ << QString("Hello \nOther textWorld")
+ << QString("# Hello \n\nOther text**World**\n\n");
+}
+
+void tst_QTextCursor::insertHtml()
+{
+ QFETCH(QString, initialText);
+ QFETCH(int, expectedInitialBlockCount);
+ QFETCH(bool, insertBlock);
+ QFETCH(bool, insertAsPlainText);
+ QFETCH(int, insertPosition);
+ QFETCH(QString, insertText);
+ QFETCH(QString, expectedSelText);
+ QFETCH(QString, expectedText);
+ QFETCH(QString, expectedMarkdown);
+
+ cursor.insertHtml(initialText);
+ QCOMPARE(blockCount(), expectedInitialBlockCount);
+ cursor.setPosition(insertPosition);
+ if (insertBlock)
+ cursor.insertBlock(QTextBlockFormat());
+ qCDebug(lcTests) << "pos" << cursor.position() << "block" << cursor.blockNumber()
+ << "heading" << cursor.blockFormat().headingLevel();
+ if (insertAsPlainText)
+ cursor.insertText(insertText);
+ else
+ cursor.insertHtml(insertText);
+ cursor.select(QTextCursor::Document);
+ qCDebug(lcTests) << "sel text after insertion" << cursor.selectedText();
+ qCDebug(lcTests) << "text after insertion" << cursor.document()->toPlainText();
+ qCDebug(lcTests) << "html after insertion" << cursor.document()->toHtml();
+ qCDebug(lcTests) << "markdown after insertion" << cursor.document()->toMarkdown();
+ QCOMPARE(cursor.selectedText(), expectedSelText);
+ QCOMPARE(cursor.document()->toPlainText(), expectedText);
+ if (auto defaultFont = QFontDatabase::systemFont(QFontDatabase::GeneralFont); QFontInfo(defaultFont).fixedPitch()) {
+ qWarning() << defaultFont << "is QFontDatabase::GeneralFont, and is fixedPitch";
+ QSKIP("cannot reliably distinguish normal and monospace markdown spans on this system (QTBUG-103484)");
+ }
+ QCOMPARE(cursor.document()->toMarkdown(), expectedMarkdown);
+}
+
+#endif // QT_NO_TEXTHTMLPARSER
+
+#if QT_CONFIG(textmarkdownreader)
+
+void tst_QTextCursor::insertMarkdown_data()
+{
+ QTest::addColumn<QString>("initialText");
+ QTest::addColumn<int>("expectedInitialBlockCount");
+ QTest::addColumn<int>("insertPosition");
+ QTest::addColumn<QString>("insertText");
+ QTest::addColumn<QString>("expectedSelText");
+ QTest::addColumn<QString>("expectedText");
+ QTest::addColumn<QString>("expectedMarkdown");
+
+ QTest::newRow("bold fragment in italic span")
+ << "someone said *hello world*" << 1
+ << 19 << QString(" **crazy** ")
+ << QString("someone said hello crazyworld")
+ << QString("someone said hello crazyworld")
+ << QString("someone said *hello ***crazy***world*\n\n"); // explicit B+I: not necessary but OK
+
+ QTest::newRow("list in a paragraph")
+ << "hello list with 3 items" << 1
+ << 10 << QString("1. one\n2. two\n")
+ << QString("hello list\u2029one\u2029two\u2029 with 3 items")
+ << QString("hello list\none\ntwo\n with 3 items")
+ << QString("hello list\n\n1. one\n2. two\n3. with 3 items\n");
+
+ QTest::newRow("list in a list")
+ << "1) bread\n2) milk\n" << 2
+ << 6 << QString("0) eggs\n1) maple syrup\n")
+ << QString("bread\u2029eggs\u2029maple syrup\u2029milk")
+ << QString("bread\neggs\nmaple syrup\nmilk")
+ << QString("1) bread\n2) eggs\n0) maple syrup\n1) milk\n");
+ // Renumbering would happen if we re-read the whole document.
+ // Currently insertion only uses the new list format after a paragraph separator.
+ // For that reason "bread" and "eggs" use the original list format, while "maple syrup" and
+ // "milk" use the format from the just inserted list.
+
+ QTest::newRow("list after a list")
+ << "1) bread\n2) milk\n\n" << 2
+ << 13 << QString("\n0) eggs\n1) maple syrup\n")
+ << QString("bread\u2029milk\u2029eggs\u2029maple syrup")
+ << QString("bread\nmilk\neggs\nmaple syrup")
+ << QString("1) bread\n2) milk\n3) eggs\n0) maple syrup\n");
+ // Same behavior as above. "eggs" uses the original list format, but "maple syrup" uses the
+ // format of the inserted list, which means "maple syrup" now has a start of 0.
+
+ const QString markdownHeadingString("# Hello\nWorld\n");
+
+ QTest::newRow("markdown heading at end of markdown heading")
+ << markdownHeadingString << 2
+ << 11 << QString("\n\n## Other text")
+ << QString("Hello\u2029World\u2029Other text")
+ << QString("Hello\nWorld\nOther text")
+ << QString("# Hello\n\nWorld\n\n## Other text\n\n");
+
+ QTest::newRow("markdown heading into middle of markdown heading")
+ << markdownHeadingString << 2
+ << 6 << QString("## Other\ntext\n\n")
+ << QString("Hello\u2029Other\u2029text\u2029World")
+ << QString("Hello\nOther\ntext\nWorld")
+ << QString("# Hello\n\n**Other**\n\ntext\n\nWorld\n\n");
+
+ QTest::newRow("markdown heading without trailing newline into middle of markdown heading")
+ << markdownHeadingString << 2
+ << 6 << QString("## Other\ntext")
+ << QString("Hello\u2029Other\u2029textWorld")
+ << QString("Hello\nOther\ntextWorld")
+ << QString("# Hello\n\n**Other**\n\ntextWorld\n\n");
+
+ QTest::newRow("text into middle of markdown heading after newline")
+ << markdownHeadingString << 2
+ << 6 << QString("Other ")
+ << QString("Hello\u2029OtherWorld")
+ << QString("Hello\nOtherWorld")
+ << QString("# Hello\n\nOtherWorld\n\n");
+
+ QTest::newRow("text into middle of markdown heading before newline")
+ << markdownHeadingString << 2
+ << 5 << QString(" Other ")
+ << QString("HelloOther\u2029World")
+ << QString("HelloOther\nWorld")
+ << QString("# HelloOther\n\nWorld\n\n");
+}
+
+void tst_QTextCursor::insertMarkdown()
+{
+ QFETCH(QString, initialText);
+ QFETCH(int, expectedInitialBlockCount);
+ QFETCH(int, insertPosition);
+ QFETCH(QString, insertText);
+ QFETCH(QString, expectedSelText);
+ QFETCH(QString, expectedText);
+ QFETCH(QString, expectedMarkdown);
+
+ cursor.insertMarkdown(initialText);
+ QCOMPARE(blockCount(), expectedInitialBlockCount);
+ cursor.setPosition(insertPosition);
+ qCDebug(lcTests) << "pos" << cursor.position() << "block" << cursor.blockNumber()
+ << "heading" << cursor.blockFormat().headingLevel();
+ cursor.insertMarkdown(insertText);
+ cursor.select(QTextCursor::Document);
+ qCDebug(lcTests) << "sel text after insertion" << cursor.selectedText();
+ qCDebug(lcTests) << "text after insertion" << cursor.document()->toPlainText();
+ qCDebug(lcTests) << "html after insertion" << cursor.document()->toHtml();
+ qCDebug(lcTests) << "markdown after insertion" << cursor.document()->toMarkdown();
+ QCOMPARE(cursor.selectedText(), expectedSelText);
+ QCOMPARE(cursor.document()->toPlainText(), expectedText);
+ if (auto defaultFont = QFontDatabase::systemFont(QFontDatabase::GeneralFont); QFontInfo(defaultFont).fixedPitch()) {
+ qWarning() << defaultFont << "is QFontDatabase::GeneralFont, and is fixedPitch";
+ QSKIP("cannot reliably distinguish normal and monospace markdown spans on this system (QTBUG-103484)");
+ }
+ QCOMPARE(cursor.document()->toMarkdown(), expectedMarkdown);
+}
+
+#endif // textmarkdownreader
+
void tst_QTextCursor::insertFragmentShouldUseCurrentCharFormat()
{
QTextDocumentFragment fragment = QTextDocumentFragment::fromPlainText("Hello World");
@@ -1557,26 +1759,26 @@ void tst_QTextCursor::update_data()
QTest::newRow("removeInsideSelection")
<< text
<< /*position*/ 0
- << /*anchor*/ int(text.length())
+ << /*anchor*/ int(text.size())
// delete 'big'
<< 6
<< 6 + charsToDelete
<< QString() // don't insert anything, just remove
<< /*expectedPosition*/ 0
- << /*expectedAnchor*/ int(text.length() - charsToDelete)
+ << /*expectedAnchor*/ int(text.size() - charsToDelete)
;
text = "Hello big world";
charsToDelete = 3;
QTest::newRow("removeInsideSelectionWithSwappedAnchorAndPosition")
<< text
- << /*position*/ int(text.length())
+ << /*position*/ int(text.size())
<< /*anchor*/ 0
// delete 'big'
<< 6
<< 6 + charsToDelete
<< QString() // don't insert anything, just remove
- << /*expectedPosition*/ int(text.length() - charsToDelete)
+ << /*expectedPosition*/ int(text.size() - charsToDelete)
<< /*expectedAnchor*/ 0
;
@@ -1587,13 +1789,13 @@ void tst_QTextCursor::update_data()
QTest::newRow("replaceInsideSelection")
<< text
<< /*position*/ 0
- << /*anchor*/ int(text.length())
+ << /*anchor*/ int(text.size())
// delete 'big' ...
<< 6
<< 6 + charsToDelete
<< textToInsert // ... and replace 'big' with 'small'
<< /*expectedPosition*/ 0
- << /*expectedAnchor*/ int(text.length() - charsToDelete + textToInsert.length())
+ << /*expectedAnchor*/ int(text.size() - charsToDelete + textToInsert.size())
;
text = "Hello big world";
@@ -1601,13 +1803,13 @@ void tst_QTextCursor::update_data()
textToInsert = "small";
QTest::newRow("replaceInsideSelectionWithSwappedAnchorAndPosition")
<< text
- << /*position*/ int(text.length())
+ << /*position*/ int(text.size())
<< /*anchor*/ 0
// delete 'big' ...
<< 6
<< 6 + charsToDelete
<< textToInsert // ... and replace 'big' with 'small'
- << /*expectedPosition*/ int(text.length() - charsToDelete + textToInsert.length())
+ << /*expectedPosition*/ int(text.size() - charsToDelete + textToInsert.size())
<< /*expectedAnchor*/ 0
;
@@ -1616,14 +1818,14 @@ void tst_QTextCursor::update_data()
charsToDelete = 3;
QTest::newRow("removeBeforeSelection")
<< text
- << /*position*/ int(text.length() - 5)
- << /*anchor*/ int(text.length())
+ << /*position*/ int(text.size() - 5)
+ << /*anchor*/ int(text.size())
// delete 'big'
<< 6
<< 6 + charsToDelete
<< QString() // don't insert anything, just remove
- << /*expectedPosition*/ int(text.length() - 5 - charsToDelete)
- << /*expectedAnchor*/ int(text.length() - charsToDelete)
+ << /*expectedPosition*/ int(text.size() - 5 - charsToDelete)
+ << /*expectedAnchor*/ int(text.size() - charsToDelete)
;
text = "Hello big world";
diff --git a/tests/auto/gui/text/qtextdocument/CMakeLists.txt b/tests/auto/gui/text/qtextdocument/CMakeLists.txt
index bff5cabfb7..62fa1d46ca 100644
--- a/tests/auto/gui/text/qtextdocument/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextdocument/CMakeLists.txt
@@ -1,14 +1,21 @@
-# Generated from qtextdocument.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextdocument Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextdocument LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtextdocument
SOURCES
common.h
tst_qtextdocument.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qtextdocument/common.h b/tests/auto/gui/text/qtextdocument/common.h
index 11ad99cfa0..3c05913008 100644
--- a/tests/auto/gui/text/qtextdocument/common.h
+++ b/tests/auto/gui/text/qtextdocument/common.h
@@ -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 <QAbstractTextDocumentLayout>
#include <private/qtextdocument_p.h>
diff --git a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
index bb2f3750aa..40f78ed778 100644
--- a/tests/auto/gui/text/qtextdocument/tst_qtextdocument.cpp
+++ b/tests/auto/gui/text/qtextdocument/tst_qtextdocument.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 <QTest>
@@ -205,6 +180,12 @@ private slots:
void insertHtmlWithComments_data();
void insertHtmlWithComments();
+ void delayedLayout();
+ void undoContentChangeIndices();
+
+ void restoreStrokeFromHtml();
+ void restoreForegroundGradientFromHtml();
+
private:
void backgroundImage_checkExpectedHtml(const QTextDocument &doc);
void buildRegExpData();
@@ -297,6 +278,8 @@ void tst_QTextDocument::init()
"<html><head><meta name=\"qrichtext\" content=\"1\" /><meta charset=\"utf-8\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"hr { height: 1px; border-width: 0; }\n"
+ "li.unchecked::marker { content: \"\\2610\"; }\n"
+ "li.checked::marker { content: \"\\2612\"; }\n"
"</style></head>"
"<body style=\" font-family:'%1'; font-size:%2; font-weight:%3; font-style:%4;\">\n");
htmlHead = htmlHead.arg(defaultFont.family())
@@ -486,17 +469,17 @@ void tst_QTextDocument::basicIsModifiedChecks()
QVERIFY(!doc->isModified());
cursor.insertText("Hello World");
QVERIFY(doc->isModified());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(spy.takeFirst().at(0).toBool());
doc->undo();
QVERIFY(!doc->isModified());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(!spy.takeFirst().at(0).toBool());
doc->redo();
QVERIFY(doc->isModified());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(spy.takeFirst().at(0).toBool());
}
@@ -587,16 +570,16 @@ void tst_QTextDocument::noundo_basicIsModifiedChecks()
QVERIFY(!doc->isModified());
cursor.insertText("Hello World");
QVERIFY(doc->isModified());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(spy.takeFirst().at(0).toBool());
doc->undo();
QVERIFY(doc->isModified());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
doc->redo();
QVERIFY(doc->isModified());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QTextDocument::task240325()
@@ -616,9 +599,6 @@ void tst_QTextDocument::task240325()
QCOMPARE(doc->blockCount(), 1);
for (QTextBlock block = doc->begin() ; block!=doc->end() ; block = block.next()) {
QTextLayout *layout = block.layout();
-#ifdef Q_OS_ANDROID
- QEXPECT_FAIL("", "QTBUG-69242", Abort);
-#endif
QCOMPARE(layout->lineCount(), 4);
for (int lineIdx=0;lineIdx<layout->lineCount();++lineIdx) {
@@ -767,6 +747,9 @@ void tst_QTextDocument::mightBeRichText_data()
" PUBLIC ""-//W3C//DTD XHTML 1.0 Strict//EN\" \"DTD/xhtml1-strict.dtd\">\n"
"<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">";
QVERIFY(Qt::mightBeRichText(QString::fromLatin1(qtDocuHeader)));
+ QVERIFY(Qt::mightBeRichText(QLatin1StringView(qtDocuHeader)));
+ QVERIFY(QUtf8StringView(qtDocuHeader).isValidUtf8());
+ QVERIFY(Qt::mightBeRichText(QUtf8StringView(qtDocuHeader)));
QTest::addColumn<QString>("input");
QTest::addColumn<bool>("result");
@@ -786,6 +769,10 @@ void tst_QTextDocument::mightBeRichText()
QFETCH(QString, input);
QFETCH(bool, result);
QCOMPARE(result, Qt::mightBeRichText(input));
+ QCOMPARE(result, Qt::mightBeRichText(QStringView(input)));
+ QCOMPARE(result, Qt::mightBeRichText(QUtf8StringView(input.toUtf8())));
+ QVERIFY(QtPrivate::isLatin1(input));
+ QCOMPARE(result, Qt::mightBeRichText(QLatin1StringView(input.toLatin1())));
}
Q_DECLARE_METATYPE(QTextDocumentFragment)
@@ -1397,7 +1384,7 @@ void tst_QTextDocument::toHtml_data()
QTest::newRow("lists") << QTextDocumentFragment(&doc)
<<
QString("EMPTYBLOCK") +
- QString("<ul style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;\"><li DEFAULTBLOCKSTYLE>Blubb</li>\n<li DEFAULTBLOCKSTYLE>Blah</li></ul>");
+ QString("<ul style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;\">\n<li DEFAULTBLOCKSTYLE>Blubb</li>\n<li DEFAULTBLOCKSTYLE>Blah</li></ul>");
}
{
@@ -1420,7 +1407,7 @@ void tst_QTextDocument::toHtml_data()
QTest::newRow("charfmt-for-list-item") << QTextDocumentFragment(&doc)
<<
QString("EMPTYBLOCK") +
- QString("<ul style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;\"><li DEFAULTBLOCKSTYLE>Blubb</li>\n<li style=\" color:#0000ff;\" DEFAULTBLOCKSTYLE><span style=\" color:#ff0000;\">Blah</span></li></ul>");
+ QString("<ul style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;\">\n<li DEFAULTBLOCKSTYLE>Blubb</li>\n<li style=\" color:#0000ff;\" DEFAULTBLOCKSTYLE><span style=\" color:#ff0000;\">Blah</span></li></ul>");
}
{
@@ -1450,7 +1437,7 @@ void tst_QTextDocument::toHtml_data()
QTest::newRow("list-indent") << QTextDocumentFragment(&doc)
<<
QString("EMPTYBLOCK") +
- QString("<ul style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 4;\"><li DEFAULTBLOCKSTYLE>Blah</li></ul>");
+ QString("<ul style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 4;\">\n<li DEFAULTBLOCKSTYLE>Blah</li></ul>");
}
{
@@ -1738,7 +1725,7 @@ void tst_QTextDocument::toHtml_data()
QTest::newRow("list-ul-margin") << QTextDocumentFragment(&doc)
<< QString("EMPTYBLOCK") +
- QString("<ul style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;\"><li DEFAULTBLOCKSTYLE>Blah</li></ul>");
+ QString("<ul style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;\">\n<li DEFAULTBLOCKSTYLE>Blah</li></ul>");
}
{
CREATE_DOC_AND_CURSOR();
@@ -1748,12 +1735,12 @@ void tst_QTextDocument::toHtml_data()
cursor.insertHtml(listHtml);
QTest::newRow("nested-lists-one") << QTextDocumentFragment(&doc)
- << QString("<ul DEFAULTULSTYLE 1;\"><li style=\" margin-top:12px; margin-bottom:0px; "
+ << QString("<ul DEFAULTULSTYLE 1;\">\n<li style=\" margin-top:12px; margin-bottom:0px; "
"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
- "item-1</li>\n<li DEFAULTBLOCKSTYLE>item-2\n<ul DEFAULTULSTYLE 2;\"><li "
+ "item-1</li>\n<li DEFAULTBLOCKSTYLE>item-2\n<ul DEFAULTULSTYLE 2;\">\n<li "
"DEFAULTBLOCKSTYLE>item-2.1</li>\n<li DEFAULTBLOCKSTYLE>item-2.2\n<ul "
- "DEFAULTULSTYLE 3;\"><li DEFAULTBLOCKSTYLE>item-2.2.1</li></ul></li>\n"
- "<li DEFAULTBLOCKSTYLE>item-2.3\n<ul DEFAULTULSTYLE 3;\"><li DEFAULTBLOCKSTYLE>"
+ "DEFAULTULSTYLE 3;\">\n<li DEFAULTBLOCKSTYLE>item-2.2.1</li></ul></li>\n"
+ "<li DEFAULTBLOCKSTYLE>item-2.3\n<ul DEFAULTULSTYLE 3;\">\n<li DEFAULTBLOCKSTYLE>"
"item-2.3.1</li></ul></li></ul></li>\n<li DEFAULTLASTLISTYLE>item-3</li></ul>");
}
{
@@ -1762,9 +1749,9 @@ void tst_QTextDocument::toHtml_data()
cursor.insertHtml(listHtml);
QTest::newRow("nested-lists-two") << QTextDocumentFragment(&doc)
- << QString("<ul DEFAULTULSTYLE 1;\"><li style=\" margin-top:12px; margin-bottom:0px; "
+ << QString("<ul DEFAULTULSTYLE 1;\">\n<li style=\" margin-top:12px; margin-bottom:0px; "
"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
- "item-1</li>\n<li DEFAULTLASTLISTYLE>item-2\n<ul DEFAULTULSTYLE 2;\"><li "
+ "item-1</li>\n<li DEFAULTLASTLISTYLE>item-2\n<ul DEFAULTULSTYLE 2;\">\n<li "
"DEFAULTBLOCKSTYLE>item-2.1</li></ul></li></ul>");
}
{
@@ -1774,9 +1761,9 @@ void tst_QTextDocument::toHtml_data()
cursor.insertHtml(listHtml);
QTest::newRow("nested-lists-three") << QTextDocumentFragment(&doc)
- << QString("<ul DEFAULTULSTYLE 1;\"><li style=\" margin-top:12px; margin-bottom:0px; "
+ << QString("<ul DEFAULTULSTYLE 1;\">\n<li style=\" margin-top:12px; margin-bottom:0px; "
"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
- "item-1</li>\n<li DEFAULTLASTLISTYLE>item-2\n<ul DEFAULTULSTYLE 2;\"><li "
+ "item-1</li>\n<li DEFAULTLASTLISTYLE>item-2\n<ul DEFAULTULSTYLE 2;\">\n<li "
"DEFAULTBLOCKSTYLE>item-2.1</li>\n<li DEFAULTBLOCKSTYLE>item-2.2</li></ul>"
"</li></ul>");
}
@@ -1787,12 +1774,39 @@ void tst_QTextDocument::toHtml_data()
cursor.insertHtml(listHtml);
QTest::newRow("not-nested-list") << QTextDocumentFragment(&doc)
- << QString("<ul DEFAULTULSTYLE 1;\"><li style=\" margin-top:12px; margin-bottom:0px; "
+ << QString("<ul DEFAULTULSTYLE 1;\">\n<li style=\" margin-top:12px; margin-bottom:0px; "
"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
- "item-1.1</li>\n<li DEFAULTBLOCKSTYLE>item-1.2</li></ul>\n<ul DEFAULTULSTYLE 1;\">"
+ "item-1.1</li>\n<li DEFAULTBLOCKSTYLE>item-1.2</li></ul>\n<ul DEFAULTULSTYLE 1;\">\n"
"<li style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; "
"margin-right:0px; -qt-block-indent:0; text-indent:0px;\">item-2.1</li></ul>");
}
+ {
+ CREATE_DOC_AND_CURSOR();
+ const QString listHtml = "<ul><li>bullet</li><li class=\"unchecked\">unchecked item</li><li class=\"checked\">checked item</li></ul>";
+ cursor.insertHtml(listHtml);
+
+ QTest::newRow("list with and without checkboxes") << QTextDocumentFragment(&doc)
+ << QString("<ul style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;\">\n"
+ "<li style=\" margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">bullet</li>\n"
+ "<li class=\"unchecked\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">unchecked item</li>\n"
+ "<li class=\"checked\" style=\" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">checked item</li></ul>");
+ }
+
+ {
+ CREATE_DOC_AND_CURSOR();
+
+ QTextListFormat fmt;
+ fmt.setStyle(QTextListFormat::ListDecimal);
+ fmt.setStart(4);
+ cursor.insertList(fmt);
+ cursor.insertText("Blah");
+ cursor.insertBlock();
+ cursor.insertText("Bleh");
+
+ QTest::newRow("ordered list with start") << QTextDocumentFragment(&doc)
+ << QString("EMPTYBLOCK") +
+ QString("<ol start=\"4\" style=\"margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;\">\n<li style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Blah</li>\n<li style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Bleh</li></ol>");
+ }
}
void tst_QTextDocument::toHtml()
@@ -1958,7 +1972,7 @@ void tst_QTextDocument::toHtmlBodyBgColor()
doc.rootFrame()->setFrameFormat(fmt);
QString expectedHtml = htmlHead;
- expectedHtml.insert(htmlHead.length() - 2, " bgcolor=\"#0000ff\"");
+ expectedHtml.insert(htmlHead.size() - 2, " bgcolor=\"#0000ff\"");
expectedHtml += "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Blah</p>"
+ htmlTail;
@@ -1978,7 +1992,7 @@ void tst_QTextDocument::toHtmlBodyBgColorRgba()
doc.rootFrame()->setFrameFormat(fmt);
QString expectedHtml = htmlHead;
- expectedHtml.insert(htmlHead.length() - 2, " bgcolor=\"rgba(255,0,0,0.2)\"");
+ expectedHtml.insert(htmlHead.size() - 2, " bgcolor=\"rgba(255,0,0,0.2)\"");
expectedHtml += "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Blah</p>"
+ htmlTail;
@@ -1998,7 +2012,7 @@ void tst_QTextDocument::toHtmlBodyBgColorTransparent()
doc.rootFrame()->setFrameFormat(fmt);
QString expectedHtml = htmlHead;
- expectedHtml.insert(htmlHead.length() - 2, " bgcolor=\"transparent\"");
+ expectedHtml.insert(htmlHead.size() - 2, " bgcolor=\"transparent\"");
expectedHtml += "<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Blah</p>"
+ htmlTail;
@@ -2064,7 +2078,7 @@ void tst_QTextDocument::toHtmlDefaultFontSpacingProperties()
doc.setDefaultFont(fnt);
QString expectedOutput = htmlHead;
- expectedOutput.insert(htmlHead.length() - 3, " letter-spacing:13px; word-spacing:15px;");
+ expectedOutput.insert(htmlHead.size() - 3, " letter-spacing:13px; word-spacing:15px;");
expectedOutput +=
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Blah</p>"
+ htmlTail;
@@ -2084,7 +2098,7 @@ void tst_QTextDocument::toHtmlTextDecorationUnderline()
doc.setDefaultFont(fnt);
QString expectedOutput = htmlHead;
- expectedOutput.insert(htmlHead.length() - 3, " text-decoration: underline;");
+ expectedOutput.insert(htmlHead.size() - 3, " text-decoration: underline;");
expectedOutput +=
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Some text</p>"
+ htmlTail;
@@ -2099,7 +2113,7 @@ void tst_QTextDocument::toHtmlTextDecorationUnderline()
cursor.mergeCharFormat(format);
expectedOutput = htmlHead;
- expectedOutput.insert(htmlHead.length() - 3, " text-decoration: underline;");
+ expectedOutput.insert(htmlHead.size() - 3, " text-decoration: underline;");
expectedOutput +=
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; "
"margin-right:0px; -qt-block-indent:0; text-indent:0px;\">"
@@ -2753,11 +2767,11 @@ void tst_QTextDocument::defaultTableStyle()
brushes << sideProperty.value<QBrush>();
}
auto errorDetails = qScopeGuard([&]{
- if (brushes.count() != borderBrushes.count()) {
- qWarning("Different count: %lld vs %lld", brushes.count(), borderBrushes.count());
+ if (brushes.size() != borderBrushes.size()) {
+ qWarning("Different count: %lld vs %lld", brushes.size(), borderBrushes.size());
return;
}
- for (int i = 0; i < brushes.count(); ++i) {
+ for (int i = 0; i < brushes.size(); ++i) {
QString side;
QDebug(&side) << QTextFormat::Property(QTextFormat::TableCellTopBorderBrush + i);
QString actual;
@@ -2881,13 +2895,13 @@ void tst_QTextDocument::blockCountChanged()
doc->setPlainText("Foo");
QCOMPARE(doc->blockCount(), 1);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
doc->setPlainText("Foo\nBar");
QCOMPARE(doc->blockCount(), 2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).value(0).toInt(), 2);
spy.clear();
@@ -2895,16 +2909,16 @@ void tst_QTextDocument::blockCountChanged()
cursor.movePosition(QTextCursor::End);
cursor.insertText("Blahblah");
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
cursor.insertBlock();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).value(0).toInt(), 3);
spy.clear();
doc->undo();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).value(0).toInt(), 2);
}
@@ -3083,12 +3097,12 @@ void tst_QTextDocument::characterAt()
QString text("12345\n67890");
cursor.insertText(text);
int length = doc.characterCount();
- QCOMPARE(length, text.length() + 1);
+ QCOMPARE(length, text.size() + 1);
QCOMPARE(doc.characterAt(length-1), QChar(QChar::ParagraphSeparator));
QCOMPARE(doc.characterAt(-1), QChar());
QCOMPARE(doc.characterAt(length), QChar());
QCOMPARE(doc.characterAt(length + 1), QChar());
- for (int i = 0; i < text.length(); ++i) {
+ for (int i = 0; i < text.size(); ++i) {
QChar c = text.at(i);
if (c == QLatin1Char('\n'))
c = QChar(QChar::ParagraphSeparator);
@@ -3168,11 +3182,11 @@ void tst_QTextDocument::testUndoCommandAdded()
QVERIFY(spy.isEmpty());
cursor.insertText("a");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
cursor.insertText("b"); // should be merged
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
cursor.insertText("c"); // should be merged
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(doc->toPlainText(), QString("abc"));
doc->undo();
QCOMPARE(doc->toPlainText(), QString(""));
@@ -3180,11 +3194,11 @@ void tst_QTextDocument::testUndoCommandAdded()
doc->clear();
spy.clear();
cursor.insertText("aaa");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
cursor.insertText("aaaa\nbcd");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
cursor.beginEditBlock();
@@ -3194,11 +3208,11 @@ void tst_QTextDocument::testUndoCommandAdded()
cursor.insertText("\nccc");
QVERIFY(spy.isEmpty());
cursor.endEditBlock();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
cursor.insertBlock();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
cursor.setPosition(5);
@@ -3210,18 +3224,18 @@ void tst_QTextDocument::testUndoCommandAdded()
QTextCharFormat cf;
cf.setFontItalic(true);
cursor.mergeCharFormat(cf);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
doc->undo();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
doc->undo();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
doc->redo();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
doc->redo();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QTextDocument::testUndoBlocks()
@@ -3801,7 +3815,7 @@ void tst_QTextDocument::mergeFontFamilies()
QTextCursor cursor = QTextCursor(&td);
cursor.setPosition(0);
- cursor.setPosition(QByteArray("Hello World").length(), QTextCursor::KeepAnchor);
+ cursor.setPosition(QByteArray("Hello World").size(), QTextCursor::KeepAnchor);
cursor.mergeCharFormat(newFormat);
QVERIFY(td.toHtml().contains(QLatin1String("font-family:'Jokerman';")));
@@ -3947,7 +3961,7 @@ void tst_QTextDocument::insertHtmlWithComments()
QTextDocument doc;
doc.setHtml(html);
- QCOMPARE(doc.blockCount(), expectedBlocks.count());
+ QCOMPARE(doc.blockCount(), expectedBlocks.size());
QStringList blockContent;
auto currentBlock = doc.begin();
@@ -3959,5 +3973,190 @@ void tst_QTextDocument::insertHtmlWithComments()
QCOMPARE(blockContent, expectedBlocks);
}
+void tst_QTextDocument::delayedLayout()
+{
+ QTextDocument doc;
+ doc.setHtml("<html>Foobar</html>");
+ QCOMPARE(doc.blockCount(), 1);
+
+ doc.setLayoutEnabled(false);
+
+ // Force creation of a layout
+ QVERIFY(doc.documentLayout());
+
+ QTextBlock block = doc.begin();
+ QTextLayout *layout = block.layout();
+ QCOMPARE(layout->lineCount(), 0); // layout didn't happen yet
+
+ doc.setLayoutEnabled(true);
+ QCOMPARE(layout->lineCount(), 1); // layout happened
+}
+
+void tst_QTextDocument::undoContentChangeIndices() // QTBUG-113865
+{
+ QTextDocument doc;
+ QTestDocumentLayout *layout = new QTestDocumentLayout(&doc);
+ QString content = QString("<html><body>"
+ "<ul><li>Undo</li></ul>"
+ "<ul><li>operation</li></ul>"
+ "<ul><li>of</li></ul>"
+ "<ul><li>unnumbered</li></ul>"
+ "<ul><li>lists</li></ul>"
+ "<ul><li>shows</li></ul>"
+ "<ul><li>invalid</li></ul>"
+ "<ul><li>content</li></ul>"
+ "<ul><li>indices</li></ul>"
+ "</body></html>");
+ doc.setDocumentLayout(layout);
+ doc.setHtml(content);
+
+ // Select the entire document content
+ QTextCursor cursor(&doc);
+ cursor.select(QTextCursor::Document);
+ cursor.removeSelectedText();
+
+ // Undo above operation
+ doc.undo();
+
+ // Move the cursor to the end
+ cursor.movePosition(QTextCursor::End);
+ cursor.insertHtml(content);
+
+ // Select the whole document and remove the content
+ cursor.select(QTextCursor::Document);
+ cursor.removeSelectedText();
+
+ int documentLength = 0;
+ int changeRemoved = 0;
+ int changeAdded = 0;
+ int changePos = 0;
+ connect(&doc, &QTextDocument::contentsChange, this, [&](int pos, int removed, int added){
+ documentLength = doc.characterCount();
+ changeRemoved = removed;
+ changeAdded = added;
+ changePos = pos;
+ });
+
+ // Undo above operation
+ doc.undo();
+
+ const int changeEnd = changeAdded + changeRemoved;
+
+ QVERIFY(documentLength > 0);
+ QCOMPARE(changePos, 0);
+ QVERIFY(changeRemoved >= 0);
+ QVERIFY(documentLength >= changeEnd);
+}
+
+void tst_QTextDocument::restoreStrokeFromHtml()
+{
+ QTextDocument document;
+ QTextCursor textCursor(&document);
+ QTextCharFormat textOutline;
+ textOutline.setTextOutline(QPen(Qt::red, 2.3));
+ textCursor.insertText("Outlined text", textOutline);
+ {
+ QTextDocument otherDocument;
+ otherDocument.setHtml(document.toHtml());
+ QCOMPARE(otherDocument.blockCount(), 1);
+ QTextBlock block = otherDocument.firstBlock();
+ QTextFragment fragment = block.begin().fragment();
+ QCOMPARE(fragment.text(), QStringLiteral("Outlined text"));
+ QTextCharFormat fmt = fragment.charFormat();
+ QVERIFY(fmt.hasProperty(QTextCharFormat::TextOutline));
+ QPen pen = fmt.textOutline();
+ QCOMPARE(pen.color(), QColor(Qt::red));
+ QCOMPARE(pen.widthF(), 2.3);
+ }
+}
+
+void tst_QTextDocument::restoreForegroundGradientFromHtml()
+{
+ QTextDocument document;
+
+ QTextCursor textCursor(&document);
+
+ QTextCharFormat foregroundGradient;
+ QLinearGradient lg;
+ lg.setColorAt(0.0, Qt::green);
+ lg.setColorAt(1.0, Qt::blue);
+ lg.setStart(QPointF(0,0));
+ lg.setFinalStop(QPointF(800, 1000));
+ foregroundGradient.setForeground(QBrush(lg));
+ textCursor.insertText("Linear gradient text\n", foregroundGradient);
+
+ QRadialGradient rg;
+ rg.setCoordinateMode(QGradient::ObjectBoundingMode);
+ rg.setSpread(QGradient::ReflectSpread);
+ rg.setColorAt(0.0, Qt::green);
+ rg.setColorAt(1.0, Qt::blue);
+ QPointF center(0.5, 0.5);
+ rg.setCenter(center);
+ rg.setFocalPoint(center);
+ rg.setRadius(0.5);
+ foregroundGradient.setForeground(QBrush(rg));
+ textCursor.insertText("Radial gradient text\n", foregroundGradient);
+
+ QConicalGradient cg;
+ cg.setCoordinateMode(QGradient::ObjectMode);
+ cg.setSpread(QGradient::RepeatSpread);
+ cg.setColorAt(0.0, Qt::green);
+ cg.setColorAt(1.0, Qt::blue);
+ cg.setCenter(QPointF(0.5, 0.5));
+ cg.setAngle(0.0);
+ foregroundGradient.setForeground(QBrush(cg));
+ textCursor.insertText("Conical gradient text\n", foregroundGradient);
+
+ {
+ QTextDocument otherDocument;
+ otherDocument.setHtml(document.toHtml());
+
+ QCOMPARE(otherDocument.blockCount(), document.blockCount());
+
+ QTextBlock block = otherDocument.firstBlock();
+ QTextFragment fragment = block.begin().fragment();
+
+ QCOMPARE(fragment.text(), QStringLiteral("Linear gradient text"));
+
+ QTextCharFormat fmt = fragment.charFormat();
+ QVERIFY(fmt.hasProperty(QTextCharFormat::ForegroundBrush));
+
+ QBrush brush = fmt.foreground();
+ QCOMPARE(brush.style(), Qt::LinearGradientPattern);
+ QCOMPARE(brush.gradient()->coordinateMode(), lg.coordinateMode());
+ QCOMPARE(brush.gradient()->spread(), lg.spread());
+ QCOMPARE(brush.gradient()->stops().size(), lg.stops().size());
+ QCOMPARE(static_cast<const QLinearGradient *>(brush.gradient())->start(), lg.start());
+ QCOMPARE(static_cast<const QLinearGradient *>(brush.gradient())->finalStop(), lg.finalStop());
+
+ block = block.next();
+ fragment = block.begin().fragment();
+
+ fmt = fragment.charFormat();
+ QVERIFY(fmt.hasProperty(QTextCharFormat::ForegroundBrush));
+
+ brush = fmt.foreground();
+ QCOMPARE(brush.style(), Qt::RadialGradientPattern);
+ QCOMPARE(brush.gradient()->coordinateMode(), rg.coordinateMode());
+ QCOMPARE(brush.gradient()->spread(), rg.spread());
+ QCOMPARE(static_cast<const QRadialGradient *>(brush.gradient())->center(), rg.center());
+ QCOMPARE(static_cast<const QRadialGradient *>(brush.gradient())->focalPoint(), rg.focalPoint());
+ QCOMPARE(static_cast<const QRadialGradient *>(brush.gradient())->radius(), rg.radius());
+
+ block = block.next();
+ fragment = block.begin().fragment();
+
+ fmt = fragment.charFormat();
+ QVERIFY(fmt.hasProperty(QTextCharFormat::ForegroundBrush));
+
+ brush = fmt.foreground();
+ QCOMPARE(brush.style(), Qt::ConicalGradientPattern);
+ QCOMPARE(brush.gradient()->coordinateMode(), cg.coordinateMode());
+ QCOMPARE(brush.gradient()->spread(), cg.spread());
+ QCOMPARE(static_cast<const QConicalGradient *>(brush.gradient())->center(), cg.center());
+ QCOMPARE(static_cast<const QConicalGradient *>(brush.gradient())->angle(), cg.angle());
+ }
+}
+
QTEST_MAIN(tst_QTextDocument)
#include "tst_qtextdocument.moc"
diff --git a/tests/auto/gui/text/qtextdocumentfragment/CMakeLists.txt b/tests/auto/gui/text/qtextdocumentfragment/CMakeLists.txt
index 6f1207c49a..4a4075106e 100644
--- a/tests/auto/gui/text/qtextdocumentfragment/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextdocumentfragment/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtextdocumentfragment.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextdocumentfragment Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextdocumentfragment LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtextdocumentfragment
SOURCES
tst_qtextdocumentfragment.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp
index eaa29ca5f3..f2c3b36dcd 100644
--- a/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.cpp
+++ b/tests/auto/gui/text/qtextdocumentfragment/tst_qtextdocumentfragment.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 <QTest>
@@ -41,6 +16,8 @@
#include <qtextcursor.h>
+using namespace Qt::StringLiterals;
+
QT_FORWARD_DECLARE_CLASS(QTextDocument)
class tst_QTextDocumentFragment : public QObject
@@ -121,6 +98,7 @@ private slots:
void html_thCentered();
void orderedListNumbering();
void html_blockAfterList();
+ void html_listStartAttribute();
void html_subAndSuperScript();
void html_cssColors();
void obeyFragmentMarkersInImport();
@@ -269,6 +247,7 @@ private slots:
void html_fromFirefox();
void html_emptyInlineInsideBlock();
void css_fontAndWordSpacing();
+ void html_brWithWhitespaceAfterList();
private:
inline void setHtml(const QString &html)
@@ -1200,7 +1179,7 @@ void tst_QTextDocumentFragment::copySubTable()
table->cellAt(row, col).firstCursorPosition().insertText(rowS + QString::number(col));
}
- QCOMPARE(table->format().columnWidthConstraints().count(), table->columns());
+ QCOMPARE(table->format().columnWidthConstraints().size(), table->columns());
// select 2x2 subtable
cursor = table->cellAt(1, 1).firstCursorPosition();
@@ -1496,6 +1475,22 @@ void tst_QTextDocumentFragment::html_blockAfterList()
QCOMPARE(cursor.blockFormat().indent(), 0);
}
+void tst_QTextDocumentFragment::html_listStartAttribute()
+{
+ const char html[] = "<ol start=-1><li>Foo</ol><ol><li>Bar</ol>";
+ cursor.insertFragment(QTextDocumentFragment::fromHtml(html));
+
+ cursor.movePosition(QTextCursor::Start);
+
+ QVERIFY(cursor.currentList());
+ QCOMPARE(cursor.currentList()->format().start(), -1);
+
+ QVERIFY(cursor.movePosition(QTextCursor::NextBlock));
+
+ QVERIFY(cursor.currentList());
+ QCOMPARE(cursor.currentList()->format().start(), 1);
+}
+
void tst_QTextDocumentFragment::html_subAndSuperScript()
{
const char subHtml[] = "<sub>Subby</sub>";
@@ -2260,7 +2255,7 @@ void tst_QTextDocumentFragment::html_frameImport()
cursor.insertFragment(frag);
QList<QTextFrame *> childFrames = doc->rootFrame()->childFrames();
- QCOMPARE(childFrames.count(), 1);
+ QCOMPARE(childFrames.size(), 1);
QTextFrame *frame = childFrames.first();
QCOMPARE(frame->frameFormat().margin(), ffmt.margin());
QCOMPARE(frame->frameFormat().border(), ffmt.border());
@@ -2288,7 +2283,7 @@ void tst_QTextDocumentFragment::html_frameImport2()
cursor.insertFragment(frag);
QList<QTextFrame *> childFrames = doc->rootFrame()->childFrames();
- QCOMPARE(childFrames.count(), 1);
+ QCOMPARE(childFrames.size(), 1);
QTextFrame *frame = childFrames.first();
QCOMPARE(frame->frameFormat().topMargin(), ffmt.topMargin());
QCOMPARE(frame->frameFormat().bottomMargin(), ffmt.bottomMargin());
@@ -2303,7 +2298,7 @@ void tst_QTextDocumentFragment::html_dontAddMarginsAcrossTableCells()
cursor.insertFragment(QTextDocumentFragment::fromHtml(QString::fromLatin1(html)));
QList<QTextFrame *> childFrames = doc->rootFrame()->childFrames();
- QCOMPARE(childFrames.count(), 1);
+ QCOMPARE(childFrames.size(), 1);
QTextFrame *frame = childFrames.first();
cursor = frame->firstCursorPosition();
QCOMPARE(cursor.blockFormat().leftMargin(), qreal(50.0));
@@ -2785,7 +2780,7 @@ void tst_QTextDocumentFragment::html_columnWidths()
QTextTableFormat fmt = table->format();
const QList<QTextLength> columnWidths = fmt.columnWidthConstraints();
- QCOMPARE(columnWidths.count(), 2);
+ QCOMPARE(columnWidths.size(), 2);
QCOMPARE(columnWidths.at(0).type(), QTextLength::VariableLength);
QCOMPARE(columnWidths.at(1).type(), QTextLength::PercentageLength);
QCOMPARE(columnWidths.at(1).rawValue(), qreal(1));
@@ -4193,7 +4188,7 @@ void tst_QTextDocumentFragment::html_entities()
setHtml(html);
QCOMPARE(doc->blockCount(), 1);
QString txt = doc->begin().text();
- QCOMPARE(txt.length(), 1);
+ QCOMPARE(txt.size(), 1);
QCOMPARE(txt.at(0).unicode(), code);
}
@@ -4328,5 +4323,24 @@ void tst_QTextDocumentFragment::css_fontAndWordSpacing()
}
}
+void tst_QTextDocumentFragment::html_brWithWhitespaceAfterList() // QTBUG-81662
+{
+ setHtml(QString::fromLatin1("<ul><li>one</li><li>two</li></ul>\n <br/>\nhello"));
+
+ QCOMPARE(doc->blockCount(), 3);
+
+ QTextBlock block = doc->begin();
+ QVERIFY(block.textList());
+
+ block = block.next();
+ QVERIFY(block.textList());
+
+ block = block.next();
+ QCOMPARE(block.text(), u"\u2028hello"_s);
+
+ block = block.next();
+ QVERIFY(block.text().isEmpty());
+}
+
QTEST_MAIN(tst_QTextDocumentFragment)
#include "tst_qtextdocumentfragment.moc"
diff --git a/tests/auto/gui/text/qtextdocumentlayout/BLACKLIST b/tests/auto/gui/text/qtextdocumentlayout/BLACKLIST
index 5a2f81c448..ed85376c92 100644
--- a/tests/auto/gui/text/qtextdocumentlayout/BLACKLIST
+++ b/tests/auto/gui/text/qtextdocumentlayout/BLACKLIST
@@ -1,6 +1,3 @@
[imageAtRightAlignedTab]
-rhel-6.6
-rhel-7.4
-rhel-7.6
sles
centos
diff --git a/tests/auto/gui/text/qtextdocumentlayout/CMakeLists.txt b/tests/auto/gui/text/qtextdocumentlayout/CMakeLists.txt
index da41073962..07386d4e24 100644
--- a/tests/auto/gui/text/qtextdocumentlayout/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextdocumentlayout/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtextdocumentlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextdocumentlayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextdocumentlayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtextdocumentlayout
SOURCES
tst_qtextdocumentlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
@@ -15,6 +22,6 @@ qt_internal_add_test(tst_qtextdocumentlayout
#####################################################################
qt_internal_extend_target(tst_qtextdocumentlayout CONDITION TARGET Qt::Widgets
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
)
diff --git a/tests/auto/gui/text/qtextdocumentlayout/tst_qtextdocumentlayout.cpp b/tests/auto/gui/text/qtextdocumentlayout/tst_qtextdocumentlayout.cpp
index 0075203c97..2a279682ca 100644
--- a/tests/auto/gui/text/qtextdocumentlayout/tst_qtextdocumentlayout.cpp
+++ b/tests/auto/gui/text/qtextdocumentlayout/tst_qtextdocumentlayout.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 <QTest>
@@ -58,6 +33,7 @@ private slots:
void floatingTablePageBreak();
void imageAtRightAlignedTab();
void blockVisibility();
+ void testHitTest();
void largeImage();
@@ -405,5 +381,41 @@ void tst_QTextDocumentLayout::largeImage()
}
}
+void tst_QTextDocumentLayout::testHitTest()
+{
+ QTextDocument document;
+ QTextCursor cur(&document);
+ int topMargin = 20;
+
+ //insert 500 blocks into textedit
+ for (int i = 0; i < 500; i++) {
+ cur.insertBlock();
+ cur.insertHtml(QString("block %1").arg(i));
+ }
+
+ //randomly set half the blocks invisible
+ QTextBlock blk=document.begin();
+ for (int i = 0; i < 500; i++) {
+ if (i % 7)
+ blk.setVisible(0);
+ blk = blk.next();
+ }
+
+ //set margin for all blocks (not strictly necessary, but makes easier to click in between blocks)
+ QTextBlockFormat blkfmt;
+ blkfmt.setTopMargin(topMargin);
+ cur.movePosition(QTextCursor::Start);
+ cur.movePosition(QTextCursor::End, QTextCursor::KeepAnchor);
+ cur.mergeBlockFormat(blkfmt);
+
+ for (int y = cur.selectionStart(); y < cur.selectionEnd(); y += 10) {
+ QPoint mousePoint(1, y);
+ int cursorPos = document.documentLayout()->hitTest(mousePoint, Qt::FuzzyHit);
+ int positionY = document.findBlock(cursorPos).layout()->position().toPoint().y();
+ //mousePoint is in the rect of the current Block
+ QVERIFY(positionY - topMargin <= y);
+ }
+}
+
QTEST_MAIN(tst_QTextDocumentLayout)
#include "tst_qtextdocumentlayout.moc"
diff --git a/tests/auto/gui/text/qtextformat/CMakeLists.txt b/tests/auto/gui/text/qtextformat/CMakeLists.txt
index cacd7fbd18..4dea90900e 100644
--- a/tests/auto/gui/text/qtextformat/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextformat/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtextformat.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextformat Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextformat LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtextformat
SOURCES
tst_qtextformat.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp b/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp
index cf87cd41aa..d20a2f1ea5 100644
--- a/tests/auto/gui/text/qtextformat/tst_qtextformat.cpp
+++ b/tests/auto/gui/text/qtextformat/tst_qtextformat.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 <QTest>
@@ -212,7 +187,7 @@ void tst_QTextFormat::resolveFont()
QTextCursor(&doc).insertText("Test", fmt);
QList<QTextFormat> formats = doc.allFormats();
- QCOMPARE(formats.count(), 3);
+ QCOMPARE(formats.size(), 3);
QCOMPARE(formats.at(2).type(), int(QTextFormat::CharFormat));
fmt = formats.at(2).toCharFormat();
@@ -337,8 +312,8 @@ void tst_QTextFormat::getSetTabs()
public:
Comparator(const QList<QTextOption::Tab> &tabs, const QList<QTextOption::Tab> &tabs2)
{
- QCOMPARE(tabs.count(), tabs2.count());
- for(int i=0; i < tabs.count(); i++) {
+ QCOMPARE(tabs.size(), tabs2.size());
+ for(int i=0; i < tabs.size(); i++) {
QTextOption::Tab t1 = tabs[i];
QTextOption::Tab t2 = tabs2[i];
QCOMPARE(t1.position, t2.position);
@@ -389,7 +364,7 @@ void tst_QTextFormat::testTabsUsed()
QCOMPARE(line.cursorToX(4), 100.);
QTextOption option = layout->textOption();
- QCOMPARE(option.tabs().count(), tabs.count());
+ QCOMPARE(option.tabs().size(), tabs.size());
}
@@ -673,16 +648,16 @@ void tst_QTextFormat::clearCollection()
charFormat2.setUnderlineStyle(QTextCharFormat::SingleUnderline);
int formatIndex2 = collection.indexForFormat(charFormat2);
QCOMPARE(formatIndex2, 1);
- QCOMPARE(collection.formats.count(), 2);
- QCOMPARE(collection.hashes.count(), 2);
+ QCOMPARE(collection.formats.size(), 2);
+ QCOMPARE(collection.hashes.size(), 2);
QCOMPARE(collection.defaultFont(), f);
collection.clear();
- QCOMPARE(collection.formats.count(), 0);
- QCOMPARE(collection.hashes.count(), 0);
+ QCOMPARE(collection.formats.size(), 0);
+ QCOMPARE(collection.hashes.size(), 0);
QCOMPARE(collection.indexForFormat(charFormat2), 0);
- QCOMPARE(collection.formats.count(), 1);
- QCOMPARE(collection.hashes.count(), 1);
+ QCOMPARE(collection.formats.size(), 1);
+ QCOMPARE(collection.hashes.size(), 1);
QCOMPARE(collection.defaultFont(), f); // kept, QTextDocument::clear or setPlainText should not reset the font set by setDefaultFont
}
@@ -704,7 +679,7 @@ void tst_QTextFormat::dataStreamCompatibility()
QVERIFY(properties.contains(QTextFormat::FontFamilies));
QVERIFY(!properties.contains(QTextFormat::OldFontLetterSpacingType));
QVERIFY(!properties.contains(QTextFormat::OldFontStretch));
- QVERIFY(!properties.contains(QTextFormat::FontFamily));
+ QVERIFY(!properties.contains(QTextFormat::OldFontFamily));
}
QByteArray memory;
@@ -735,7 +710,7 @@ void tst_QTextFormat::dataStreamCompatibility()
QVERIFY(properties.contains(QTextFormat::FontFamilies));
QVERIFY(!properties.contains(QTextFormat::OldFontLetterSpacingType));
QVERIFY(!properties.contains(QTextFormat::OldFontStretch));
- QVERIFY(!properties.contains(QTextFormat::FontFamily));
+ QVERIFY(!properties.contains(QTextFormat::OldFontFamily));
}
}
@@ -755,7 +730,7 @@ void tst_QTextFormat::dataStreamCompatibility()
QVERIFY(properties.contains(QTextFormat::FontFamilies));
QVERIFY(!properties.contains(QTextFormat::OldFontLetterSpacingType));
QVERIFY(!properties.contains(QTextFormat::OldFontStretch));
- QVERIFY(!properties.contains(QTextFormat::FontFamily));
+ QVERIFY(!properties.contains(QTextFormat::OldFontFamily));
}
}
@@ -788,7 +763,7 @@ void tst_QTextFormat::dataStreamCompatibility()
QVERIFY(properties.contains(QTextFormat::FontFamilies));
QVERIFY(!properties.contains(QTextFormat::OldFontLetterSpacingType));
QVERIFY(!properties.contains(QTextFormat::OldFontStretch));
- QVERIFY(!properties.contains(QTextFormat::FontFamily));
+ QVERIFY(!properties.contains(QTextFormat::OldFontFamily));
}
}
@@ -810,7 +785,7 @@ void tst_QTextFormat::dataStreamCompatibility()
QVERIFY(!properties.contains(QTextFormat::FontFamilies));
QVERIFY(properties.contains(QTextFormat::OldFontLetterSpacingType));
QVERIFY(properties.contains(QTextFormat::OldFontStretch));
- QVERIFY(properties.contains(QTextFormat::FontFamily));
+ QVERIFY(properties.contains(QTextFormat::OldFontFamily));
}
}
diff --git a/tests/auto/gui/text/qtextimagehandler/CMakeLists.txt b/tests/auto/gui/text/qtextimagehandler/CMakeLists.txt
new file mode 100644
index 0000000000..8d282b8f2c
--- /dev/null
+++ b/tests/auto/gui/text/qtextimagehandler/CMakeLists.txt
@@ -0,0 +1,29 @@
+# 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_qtextimagehandler LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+list(APPEND test_data "data/image.png")
+list(APPEND test_data "data/image@2x.png")
+
+qt_internal_add_test(tst_qtextimagehandler
+ SOURCES
+ tst_qtextimagehandler.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ TESTDATA
+ ${test_data}
+)
+
+qt_internal_add_resource(tst_qtextimagehandler "qtextimagehandler"
+ PREFIX
+ "/"
+ FILES
+ ${test_data}
+)
diff --git a/tests/auto/gui/text/qtextimagehandler/tst_qtextimagehandler.cpp b/tests/auto/gui/text/qtextimagehandler/tst_qtextimagehandler.cpp
index d5dde13770..5311aa6f2b 100644
--- a/tests/auto/gui/text/qtextimagehandler/tst_qtextimagehandler.cpp
+++ b/tests/auto/gui/text/qtextimagehandler/tst_qtextimagehandler.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
- **
- ** 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -42,6 +17,7 @@ private slots:
void init();
void cleanup();
void cleanupTestCase();
+ void loadAtNImages_data();
void loadAtNImages();
};
@@ -61,24 +37,40 @@ void tst_QTextImageHandler::cleanupTestCase()
{
}
+void tst_QTextImageHandler::loadAtNImages_data()
+{
+ QTest::addColumn<QString>("imageFile");
+
+ QTest::addRow("file") << QFINDTESTDATA("data/image.png");
+ QTest::addRow("file_url") << QUrl::fromLocalFile(QFINDTESTDATA("data/image.png")).toString();
+ QTest::addRow("resource") << ":/data/image.png";
+ QTest::addRow("qrc_url") << "qrc:/data/image.png";
+}
+
void tst_QTextImageHandler::loadAtNImages()
{
+ QFETCH(QString, imageFile);
+
QTextDocument doc;
QTextCursor c(&doc);
- c.insertHtml("<img src=\"data/image.png\">");
+ c.insertHtml("<img src=\"" + imageFile + "\">");
+ const auto formats = doc.allFormats();
+ const auto it = std::find_if(formats.begin(), formats.end(), [](const auto &format){
+ return format.objectType() == QTextFormat::ImageObject;
+ });
+ QVERIFY(it != formats.end());
+ const QTextImageFormat format = (*it).toImageFormat();
QTextImageHandler handler;
- QTextImageFormat fmt;
- fmt.setName("data/image.png");
- for (int i = 1; i < 3; ++i) {
+ for (const auto &dpr : {1, 2}) {
QImage img(20, 20, QImage::Format_ARGB32_Premultiplied);
img.fill(Qt::white);
- img.setDevicePixelRatio(i);
+ img.setDevicePixelRatio(dpr);
QPainter p(&img);
- handler.drawObject(&p, QRect(0, 0, 20, 20), &doc, 0, fmt);
+ handler.drawObject(&p, QRect(0, 0, 20, 20), &doc, 0, format);
p.end();
QVERIFY(!img.isNull());
- const auto expectedColor = i == 1 ? Qt::red : Qt::green;
+ const auto expectedColor = dpr == 1 ? Qt::red : Qt::green;
QCOMPARE(img.pixelColor(0, 0), expectedColor);
}
}
diff --git a/tests/auto/gui/text/qtextlayout/CMakeLists.txt b/tests/auto/gui/text/qtextlayout/CMakeLists.txt
index 3fb5dea8b9..655c0985a0 100644
--- a/tests/auto/gui/text/qtextlayout/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextlayout/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtextlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextlayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextlayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtextlayout
SOURCES
tst_qtextlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
index 32a0374fcd..209f5a56e2 100644
--- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
+++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** 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
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
/*
!!!!!! Warning !!!!!
@@ -149,7 +125,9 @@ private slots:
void tooManyDirectionalCharctersCrash_qtbug77819();
void softHyphens_data();
void softHyphens();
+ void min_maximumWidth_data();
void min_maximumWidth();
+ void negativeLineWidth();
private:
QFont testFont;
@@ -314,14 +292,14 @@ void tst_QTextLayout::simpleBoundingRect()
QString hello("hello world");
- const int width = hello.length() * testFont.pixelSize();
+ const int width = hello.size() * testFont.pixelSize();
QTextLayout layout(hello, testFont);
layout.beginLayout();
QTextLine line = layout.createLine();
line.setLineWidth(width);
- QCOMPARE(line.textLength(), hello.length());
+ QCOMPARE(line.textLength(), hello.size());
QCOMPARE(layout.boundingRect(), QRectF(0, 0, width, QFontMetrics(testFont).height()));
}
@@ -356,18 +334,18 @@ void tst_QTextLayout::threeLineBoundingRect()
QString thirdWord("world");
QString text(firstWord + wordBoundary1 + secondWord + wordBoundary2 + thirdWord);
- int firstLineWidth = firstWord.length() * testFont.pixelSize();
- int secondLineWidth = secondWord.length() * testFont.pixelSize();
- int thirdLineWidth = thirdWord.length() * testFont.pixelSize();
+ int firstLineWidth = firstWord.size() * testFont.pixelSize();
+ int secondLineWidth = secondWord.size() * testFont.pixelSize();
+ int thirdLineWidth = thirdWord.size() * testFont.pixelSize();
// Trailing spaces do not count to line width:
if (!wordBoundary1.isSpace())
firstLineWidth += testFont.pixelSize();
if (!wordBoundary2.isSpace())
secondLineWidth += testFont.pixelSize();
// But trailing spaces do count to line length:
- const int firstLineLength = firstWord.length() + 1;
- const int secondLineLength = secondWord.length() + 1;
- const int thirdLineLength = thirdWord.length();
+ const int firstLineLength = firstWord.size() + 1;
+ const int secondLineLength = secondWord.size() + 1;
+ const int thirdLineLength = thirdWord.size();
const int longestLine = qMax(firstLineWidth, qMax(secondLineWidth, thirdLineWidth));
@@ -411,7 +389,7 @@ void tst_QTextLayout::boundingRectWithLongLineAndNoWrap()
{
QString longString("thisisaverylongstringthatcannotbewrappedatallitjustgoesonandonlikeonebigword");
- const int width = longString.length() * testFont.pixelSize() / 20; // very small widthx
+ const int width = longString.size() * testFont.pixelSize() / 20; // very small widthx
QTextLayout layout(longString, testFont);
layout.beginLayout();
@@ -536,18 +514,24 @@ void tst_QTextLayout::noWrap()
void tst_QTextLayout::cursorToXForInlineObjects()
{
- QChar ch(QChar::ObjectReplacementCharacter);
- QString text(ch);
- QTextLayout layout(text, testFont);
- layout.beginLayout();
+ QString text = QStringLiteral("<html><body><img src=\"\" width=\"32\" height=\"32\" /></body></html>");
- QTextEngine *engine = layout.engine();
- const int item = engine->findItem(0);
- engine->layoutData->items[item].width = 32;
+ QTextDocument document;
+ document.setHtml(text);
+ QCOMPARE(document.blockCount(), 1);
- QTextLine line = layout.createLine();
- line.setLineWidth(0x10000);
+ // Trigger layout
+ {
+ QImage img(1, 1, QImage::Format_ARGB32_Premultiplied);
+ QPainter p(&img);
+ document.drawContents(&p);
+ }
+ QTextLayout *layout = document.firstBlock().layout();
+ QVERIFY(layout != nullptr);
+ QCOMPARE(layout->lineCount(), 1);
+
+ QTextLine line = layout->lineAt(0);
QCOMPARE(line.cursorToX(0), qreal(0));
QCOMPARE(line.cursorToX(1), qreal(32));
}
@@ -745,29 +729,29 @@ void tst_QTextLayout::cursorToXForBidiBoundaries_data()
QTest::addColumn<Qt::LayoutDirection>("textDirection");
QTest::addColumn<QString>("text");
QTest::addColumn<int>("cursorPosition");
- QTest::addColumn<int>("expectedX");
+ QTest::addColumn<int>("runsToInclude");
QTest::addRow("LTR, abcشزذabc, 0") << Qt::LeftToRight << "abcشزذabc"
<< 0 << 0;
QTest::addRow("RTL, abcشزذabc, 9") << Qt::RightToLeft << "abcشزذabc"
- << 9 << TESTFONT_SIZE * 3;
+ << 9 << 1;
QTest::addRow("LTR, abcشزذabc, 3") << Qt::LeftToRight << "abcشزذabc"
<< 0 << 0;
QTest::addRow("RTL, abcشزذabc, 6") << Qt::RightToLeft << "abcشزذabc"
- << 9 << TESTFONT_SIZE * 3;
+ << 9 << 1;
QTest::addRow("LTR, شزذabcشزذ, 0") << Qt::LeftToRight << "شزذabcشزذ"
- << 0 << TESTFONT_SIZE * 2;
+ << 0 << 1;
QTest::addRow("RTL, شزذabcشزذ, 9") << Qt::RightToLeft << "شزذabcشزذ"
<< 9 << 0;
QTest::addRow("LTR, شزذabcشزذ, 3") << Qt::LeftToRight << "شزذabcشزذ"
- << 3 << TESTFONT_SIZE * 2;
+ << 3 << 1;
QTest::addRow("RTL, شزذabcشزذ, 3") << Qt::RightToLeft << "شزذabcشزذ"
- << 3 << TESTFONT_SIZE * 5;
+ << 3 << 2;
QTest::addRow("LTR, شزذabcشزذ, 6") << Qt::LeftToRight << "شزذabcشزذ"
- << 6 << TESTFONT_SIZE * 5;
+ << 6 << 2;
QTest::addRow("RTL, شزذabcشزذ, 6") << Qt::RightToLeft << "شزذabcشزذ"
- << 6 << TESTFONT_SIZE * 2;
+ << 6 << 1;
}
void tst_QTextLayout::cursorToXForBidiBoundaries()
@@ -775,7 +759,7 @@ void tst_QTextLayout::cursorToXForBidiBoundaries()
QFETCH(Qt::LayoutDirection, textDirection);
QFETCH(QString, text);
QFETCH(int, cursorPosition);
- QFETCH(int, expectedX);
+ QFETCH(int, runsToInclude);
QTextOption option;
option.setTextDirection(textDirection);
@@ -784,12 +768,30 @@ void tst_QTextLayout::cursorToXForBidiBoundaries()
layout.setTextOption(option);
layout.beginLayout();
- QTextLine line = layout.createLine();
- line.setLineWidth(0x10000);
+ {
+ QTextLine line = layout.createLine();
+ line.setLineWidth(0x10000);
+ }
+ layout.endLayout();
- QCOMPARE(line.cursorToX(cursorPosition), expectedX);
+ QTextLine line = layout.lineAt(0);
+ QList<QGlyphRun> glyphRuns = line.glyphRuns(-1,
+ -1,
+ QTextLayout::RetrieveStringIndexes
+ | QTextLayout::RetrieveGlyphIndexes);
+ QVERIFY(runsToInclude <= glyphRuns.size());
+
+ std::sort(glyphRuns.begin(), glyphRuns.end(),
+ [](const QGlyphRun &first, const QGlyphRun &second) {
+ return first.stringIndexes().first() < second.stringIndexes().first();
+ });
+
+ qreal expectedX = 0.0;
+ for (int i = 0; i < runsToInclude; ++i) {
+ expectedX += glyphRuns.at(i).boundingRect().width();
+ }
- layout.endLayout();
+ QCOMPARE(line.cursorToX(cursorPosition), expectedX);
}
void tst_QTextLayout::horizontalAlignment_data()
@@ -1084,7 +1086,7 @@ void tst_QTextLayout::defaultWordSeparators_data()
QString separators(".,:;-<>[](){}=/+%&^*");
separators += QLatin1String("!?");
- for (int i = 0; i < separators.count(); ++i) {
+ for (int i = 0; i < separators.size(); ++i) {
QTest::newRow(QString::number(i).toLatin1().data())
<< QString::fromLatin1("abcd") + separators.at(i) + QString::fromLatin1("efgh")
<< 0 << 4;
@@ -1164,7 +1166,7 @@ void tst_QTextLayout::xToCursorAtEndOfLine()
QString text = "FirstLine SecondLine";
text.replace('\n', QChar::LineSeparator);
- const qreal firstLineWidth = QString("FirstLine").length() * testFont.pixelSize();
+ const qreal firstLineWidth = QString("FirstLine").size() * testFont.pixelSize();
QTextLayout layout(text, testFont);
layout.setCacheEnabled(true);
@@ -1307,7 +1309,7 @@ void tst_QTextLayout::integerOverflow()
QVERIFY(line.isValid());
line.setLineWidth(INT_MAX);
- QCOMPARE(line.textLength(), txt.length());
+ QCOMPARE(line.textLength(), txt.size());
QVERIFY(!layout.createLine().isValid());
@@ -1882,7 +1884,7 @@ void tst_QTextLayout::capitalization_allUpperCase()
QTextEngine *engine = layout.engine();
engine->itemize();
- QCOMPARE(engine->layoutData->items.count(), 1);
+ QCOMPARE(engine->layoutData->items.size(), 1);
QCOMPARE(engine->layoutData->items.at(0).analysis.flags, ushort(QScriptAnalysis::Uppercase));
}
@@ -1902,7 +1904,7 @@ void tst_QTextLayout::capitalization_allUpperCase_newline()
QTextEngine *engine = layout.engine();
engine->itemize();
- QCOMPARE(engine->layoutData->items.count(), 3);
+ QCOMPARE(engine->layoutData->items.size(), 3);
QCOMPARE(engine->layoutData->items.at(0).analysis.flags, ushort(QScriptAnalysis::Uppercase));
QCOMPARE(engine->layoutData->items.at(1).analysis.flags, ushort(QScriptAnalysis::LineOrParagraphSeparator));
QCOMPARE(engine->layoutData->items.at(2).analysis.flags, ushort(QScriptAnalysis::Uppercase));
@@ -1920,7 +1922,7 @@ void tst_QTextLayout::capitalization_allLowerCase()
QTextEngine *engine = layout.engine();
engine->itemize();
- QCOMPARE(engine->layoutData->items.count(), 1);
+ QCOMPARE(engine->layoutData->items.size(), 1);
QCOMPARE(engine->layoutData->items.at(0).analysis.flags, ushort(QScriptAnalysis::Lowercase));
}
@@ -1936,7 +1938,7 @@ void tst_QTextLayout::capitalization_smallCaps()
QTextEngine *engine = layout.engine();
engine->itemize();
- QCOMPARE(engine->layoutData->items.count(), 2);
+ QCOMPARE(engine->layoutData->items.size(), 2);
QCOMPARE(engine->layoutData->items.at(0).analysis.flags, ushort(QScriptAnalysis::None));
QCOMPARE(engine->layoutData->items.at(1).analysis.flags, ushort(QScriptAnalysis::SmallCaps));
}
@@ -1953,7 +1955,7 @@ void tst_QTextLayout::capitalization_capitalize()
QTextEngine *engine = layout.engine();
engine->itemize();
- QCOMPARE(engine->layoutData->items.count(), 5);
+ QCOMPARE(engine->layoutData->items.size(), 5);
QCOMPARE(engine->layoutData->items.at(0).analysis.flags, ushort(QScriptAnalysis::Uppercase));
QCOMPARE(engine->layoutData->items.at(1).analysis.flags, ushort(QScriptAnalysis::None));
QCOMPARE(engine->layoutData->items.at(2).analysis.flags, ushort(QScriptAnalysis::Tab));
@@ -2064,7 +2066,7 @@ void tst_QTextLayout::columnWrapWithTabs()
textLayout.beginLayout();
QTextLine line = textLayout.createLine();
line.setNumColumns(30);
- QCOMPARE(line.textLength(), text.length());
+ QCOMPARE(line.textLength(), text.size());
textLayout.endLayout();
}
@@ -2075,7 +2077,7 @@ void tst_QTextLayout::columnWrapWithTabs()
textLayout.beginLayout();
QTextLine line = textLayout.createLine();
line.setNumColumns(30);
- QVERIFY(line.textLength() < text.length());
+ QVERIFY(line.textLength() < text.size());
textLayout.endLayout();
}
@@ -2479,7 +2481,7 @@ void tst_QTextLayout::nbspWithFormat()
layout.setText(s1 + s2 + nbsp + s3);
QTextLayout::FormatRange formatRange;
- formatRange.start = s1.length() + s2.length();
+ formatRange.start = s1.size() + s2.size();
formatRange.length = 1;
formatRange.format.setFontUnderline(true);
@@ -2496,9 +2498,9 @@ void tst_QTextLayout::nbspWithFormat()
QCOMPARE(layout.lineCount(), 2);
QCOMPARE(layout.lineAt(0).textStart(), 0);
- QCOMPARE(layout.lineAt(0).textLength(), s1.length());
- QCOMPARE(layout.lineAt(1).textStart(), s1.length());
- QCOMPARE(layout.lineAt(1).textLength(), s2.length() + 1 + s3.length());
+ QCOMPARE(layout.lineAt(0).textLength(), s1.size());
+ QCOMPARE(layout.lineAt(1).textStart(), s1.size());
+ QCOMPARE(layout.lineAt(1).textLength(), s2.size() + 1 + s3.size());
}
void tst_QTextLayout::koreanWordWrap()
@@ -2672,13 +2674,35 @@ void tst_QTextLayout::softHyphens()
}
}
+void tst_QTextLayout::min_maximumWidth_data()
+{
+ QTest::addColumn<QString>("text");
+
+ QTest::newRow("long string") << QStringLiteral("lmong_long_crazy_87235982735_23857239682376923876923876-fuwhfhfw-names-AAAA-deeaois2019-03-03.and.more");
+ QTest::newRow("QTBUG-106947") << QStringLiteral("text text");
+ QTest::newRow("spaces") << QStringLiteral(" text text ");
+ QTest::newRow("QTBUG-104986") << QStringLiteral("text\ntext\ntext");
+ QTest::newRow("spaces + line breaks") << QStringLiteral(" \n text\n \ntext \n ");
+}
+
void tst_QTextLayout::min_maximumWidth()
{
- QString longString("lmong_long_crazy_87235982735_23857239682376923876923876-fuwhfhfw-names-AAAA-deeaois2019-03-03.and.more");
- QTextLayout layout(longString, testFont);
+ QFETCH(QString, text);
+ text.replace('\n', QChar::LineSeparator);
+
+ QTextLayout layout(text, testFont);
+ layout.setCacheEnabled(true);
+
+ QTextOption opt;
+ opt.setWrapMode(QTextOption::NoWrap);
+ layout.setTextOption(opt);
+ layout.beginLayout();
+ while (layout.createLine().isValid()) { }
+ layout.endLayout();
+
+ const qreal nonWrappedMaxWidth = layout.maximumWidth();
for (int wrapMode = QTextOption::NoWrap; wrapMode <= QTextOption::WrapAtWordBoundaryOrAnywhere; ++wrapMode) {
- QTextOption opt;
opt.setWrapMode((QTextOption::WrapMode)wrapMode);
layout.setTextOption(opt);
layout.beginLayout();
@@ -2687,6 +2711,9 @@ void tst_QTextLayout::min_maximumWidth()
const qreal minWidth = layout.minimumWidth();
const qreal maxWidth = layout.maximumWidth();
+ QCOMPARE_LE(minWidth, maxWidth);
+ QCOMPARE_LE(maxWidth, nonWrappedMaxWidth); // maxWidth for wrapped text shouldn't exceed maxWidth for the text without wrapping.
+
// Try the layout from slightly wider than the widest (maxWidth)
// and narrow it down to slighly narrower than minWidth
// layout.maximumWidth() should return the same regardless
@@ -2708,5 +2735,28 @@ void tst_QTextLayout::min_maximumWidth()
}
}
+void tst_QTextLayout::negativeLineWidth()
+{
+ {
+ QTextLayout layout;
+ layout.setText("Foo bar");
+ layout.beginLayout();
+ QTextLine line = layout.createLine();
+ line.setLineWidth(-1);
+ QVERIFY(line.textLength() > 0);
+ layout.endLayout();
+ }
+
+ {
+ QTextLayout layout;
+ layout.setText("Foo bar");
+ layout.beginLayout();
+ QTextLine line = layout.createLine();
+ line.setNumColumns(2, -1);
+ QVERIFY(line.textLength() > 0);
+ layout.endLayout();
+ }
+}
+
QTEST_MAIN(tst_QTextLayout)
#include "tst_qtextlayout.moc"
diff --git a/tests/auto/gui/text/qtextlist/CMakeLists.txt b/tests/auto/gui/text/qtextlist/CMakeLists.txt
index 2f325d5e17..5764df3e99 100644
--- a/tests/auto/gui/text/qtextlist/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextlist/CMakeLists.txt
@@ -1,14 +1,21 @@
-# Generated from qtextlist.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextlist Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextlist LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtextlist
SOURCES
../qtextdocument/common.h
tst_qtextlist.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qtextlist/tst_qtextlist.cpp b/tests/auto/gui/text/qtextlist/tst_qtextlist.cpp
index b160d41a05..28eae93f6a 100644
--- a/tests/auto/gui/text/qtextlist/tst_qtextlist.cpp
+++ b/tests/auto/gui/text/qtextlist/tst_qtextlist.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 <QTest>
@@ -61,6 +36,8 @@ private slots:
void blockUpdate();
void numbering_data();
void numbering();
+ void start_data();
+ void start();
private:
QTextDocument *doc;
@@ -425,5 +402,61 @@ void tst_QTextList::numbering()
QCOMPARE(cursor.currentList()->itemText(cursor.block()), result);
}
+void tst_QTextList::start_data()
+{
+ QTest::addColumn<int>("format");
+ QTest::addColumn<int>("start");
+ QTest::addColumn<QStringList>("expectedItemTexts");
+
+ QTest::newRow("-1.") << int(QTextListFormat::ListDecimal) << -1
+ << QStringList{ "-1.", "0.", "1." };
+ QTest::newRow("0.") << int(QTextListFormat::ListDecimal) << 0
+ << QStringList{ "0.", "1.", "2." };
+ QTest::newRow("1.") << int(QTextListFormat::ListDecimal) << 1
+ << QStringList{ "1.", "2.", "3." };
+
+ QTest::newRow("A. -1") << int(QTextListFormat::ListUpperAlpha) << -1
+ << QStringList{ "-1.", "0.", "A." };
+ QTest::newRow("A. 0.") << int(QTextListFormat::ListUpperAlpha) << 0
+ << QStringList{ "0.", "A.", "B." };
+ QTest::newRow("a. -1") << int(QTextListFormat::ListLowerAlpha) << -1
+ << QStringList{ "-1.", "0.", "a." };
+ QTest::newRow("a. 0.") << int(QTextListFormat::ListLowerAlpha) << 0
+ << QStringList{ "0.", "a.", "b." };
+ QTest::newRow("d. 4.") << int(QTextListFormat::ListLowerAlpha) << 4
+ << QStringList{ "d.", "e.", "f." };
+
+ QTest::newRow("I. -1") << int(QTextListFormat::ListUpperRoman) << -1
+ << QStringList{ "-1.", "0.", "I." };
+ QTest::newRow("I. 0.") << int(QTextListFormat::ListUpperRoman) << 0
+ << QStringList{ "0.", "I.", "II." };
+ QTest::newRow("i. -1") << int(QTextListFormat::ListLowerRoman) << -1
+ << QStringList{ "-1.", "0.", "i." };
+ QTest::newRow("i. 0.") << int(QTextListFormat::ListLowerRoman) << 0
+ << QStringList{ "0.", "i.", "ii." };
+}
+
+void tst_QTextList::start()
+{
+ QFETCH(int, format);
+ QFETCH(int, start);
+ QFETCH(QStringList, expectedItemTexts);
+
+ QTextListFormat fmt;
+ fmt.setStyle(QTextListFormat::Style(format));
+ fmt.setStart(start);
+ QTextList *list = cursor.createList(fmt);
+ QVERIFY(list);
+
+ while (list->count() < int(expectedItemTexts.size()))
+ cursor.insertBlock();
+
+ QCOMPARE(list->count(), expectedItemTexts.size());
+
+ for (int i = 0; i < list->count(); ++i)
+ QCOMPARE(cursor.currentList()->itemText(cursor.currentList()->item(i)),
+ expectedItemTexts[i]);
+}
+
QTEST_MAIN(tst_QTextList)
#include "tst_qtextlist.moc"
diff --git a/tests/auto/gui/text/qtextmarkdownimporter/BLACKLIST b/tests/auto/gui/text/qtextmarkdownimporter/BLACKLIST
deleted file mode 100644
index ee09d02090..0000000000
--- a/tests/auto/gui/text/qtextmarkdownimporter/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-# QTBUG-89819
-[lists]
-ci b2qt 32bit
diff --git a/tests/auto/gui/text/qtextmarkdownimporter/CMakeLists.txt b/tests/auto/gui/text/qtextmarkdownimporter/CMakeLists.txt
index 3f23f03c3d..937dd5bd80 100644
--- a/tests/auto/gui/text/qtextmarkdownimporter/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextmarkdownimporter/CMakeLists.txt
@@ -1,19 +1,26 @@
-# Generated from qtextmarkdownimporter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextmarkdownimporter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextmarkdownimporter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
-list(APPEND test_data "data/thematicBreaks.md")
-list(APPEND test_data "data/headingBulletsContinuations.md")
-list(APPEND test_data "data/fuzz20450.md")
-list(APPEND test_data "data/fuzz20580.md")
+file(GLOB_RECURSE test_data
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*
+)
qt_internal_add_test(tst_qtextmarkdownimporter
SOURCES
tst_qtextmarkdownimporter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qtextmarkdownimporter/data/paragraphs.md b/tests/auto/gui/text/qtextmarkdownimporter/data/paragraphs.md
new file mode 100644
index 0000000000..3d89536376
--- /dev/null
+++ b/tests/auto/gui/text/qtextmarkdownimporter/data/paragraphs.md
@@ -0,0 +1,9 @@
+This paragraph has enough text to auto-wrap when QTextMarkdownWriter writes it
+to a markdown file. The wrapping should be around 80 columns.
+
+This paragrah has been broken up into shorter lines.
+Each line break is created
+by hitting shift-enter in QTextEdit.
+But it's treated as one QTextBlock.
+
+This paragraph also has short lines.
Each ends with a Unicode LineSeparator.

diff --git a/tests/auto/gui/text/qtextmarkdownimporter/data/thematicBreaks.md b/tests/auto/gui/text/qtextmarkdownimporter/data/thematicBreaks.md
index 7a0d5388ad..e784879326 100644
--- a/tests/auto/gui/text/qtextmarkdownimporter/data/thematicBreaks.md
+++ b/tests/auto/gui/text/qtextmarkdownimporter/data/thematicBreaks.md
@@ -11,6 +11,7 @@ stars
stars with tabs between
***
stars with whitespace after
+
---
hyphens with whitespace after
_____
diff --git a/tests/auto/gui/text/qtextmarkdownimporter/data/yaml-only.md b/tests/auto/gui/text/qtextmarkdownimporter/data/yaml-only.md
new file mode 100644
index 0000000000..1eff4db37f
--- /dev/null
+++ b/tests/auto/gui/text/qtextmarkdownimporter/data/yaml-only.md
@@ -0,0 +1,6 @@
+---
+name: "Space"
+title: "Outer space"
+keywords:
+ - astronomy
+---
diff --git a/tests/auto/gui/text/qtextmarkdownimporter/data/yaml.md b/tests/auto/gui/text/qtextmarkdownimporter/data/yaml.md
new file mode 100644
index 0000000000..41303a0187
--- /dev/null
+++ b/tests/auto/gui/text/qtextmarkdownimporter/data/yaml.md
@@ -0,0 +1,11 @@
+---
+name: "Venus"
+discoverer: "Galileo Galilei"
+title: "A description of the planet Venus"
+keywords:
+ - planets
+ - solar system
+ - astronomy
+---
+*Venus* is the second planet from the Sun, orbiting it every 224.7 Earth days.
+
diff --git a/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp b/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp
index fddcf2b692..d9fe000253 100644
--- a/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp
+++ b/tests/auto/gui/text/qtextmarkdownimporter/tst_qtextmarkdownimporter.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QBuffer>
@@ -54,6 +29,7 @@ class tst_QTextMarkdownImporter : public QObject
Q_OBJECT
private slots:
+ void paragraphs();
void headingBulletsContinuations();
void thematicBreaks();
void lists_data();
@@ -66,6 +42,15 @@ private slots:
void fragmentsAndProperties();
void pathological_data();
void pathological();
+ void fencedCodeBlocks_data();
+ void fencedCodeBlocks();
+ void frontMatter_data();
+ void frontMatter();
+ void toRawText_data();
+ void toRawText();
+
+private:
+ bool isMainFontFixed();
public:
enum CharFormat {
@@ -84,6 +69,55 @@ public:
Q_DECLARE_METATYPE(tst_QTextMarkdownImporter::CharFormats)
Q_DECLARE_OPERATORS_FOR_FLAGS(tst_QTextMarkdownImporter::CharFormats)
+bool tst_QTextMarkdownImporter::isMainFontFixed()
+{
+ bool ret = QFontInfo(QGuiApplication::font()).fixedPitch();
+ if (ret) {
+ qCWarning(lcTests) << "QFontDatabase::GeneralFont is monospaced: markdown writing is likely to use too many backticks";
+ qCWarning(lcTests) << "system fonts: fixed" << QFontDatabase::systemFont(QFontDatabase::FixedFont)
+ << "fixed?" << QFontInfo(QFontDatabase::systemFont(QFontDatabase::FixedFont)).fixedPitch()
+ << "general" << QFontDatabase::systemFont(QFontDatabase::GeneralFont);
+ }
+ return ret;
+}
+
+void tst_QTextMarkdownImporter::paragraphs()
+{
+ QFile f(QFINDTESTDATA("data/paragraphs.md"));
+ QVERIFY(f.open(QFile::ReadOnly | QIODevice::Text));
+ QString md = QString::fromUtf8(f.readAll());
+ f.close();
+
+ int lineSeparatorCount = 0;
+ QTextDocument doc;
+ QTextMarkdownImporter(&doc, QTextMarkdownImporter::DialectGitHub).import(md);
+ QTextFrame::iterator iterator = doc.rootFrame()->begin();
+ int i = 0;
+ while (!iterator.atEnd()) {
+ QTextBlock block = iterator.currentBlock();
+ int lineSeparatorPos = block.text().indexOf(QChar::LineSeparator);
+ qCDebug(lcTests) << i << block.text();
+ while (lineSeparatorPos > 0) {
+ ++lineSeparatorCount;
+ qCDebug(lcTests) << " LineSeparator @" << lineSeparatorPos;
+ lineSeparatorPos = block.text().indexOf(QChar::LineSeparator, lineSeparatorPos + 1);
+ }
+ ++iterator;
+ ++i;
+ }
+ QCOMPARE(doc.blockCount(), 3);
+ QCOMPARE(lineSeparatorCount, 2);
+
+#ifdef DEBUG_WRITE_HTML
+ {
+ QFile out("/tmp/paragraphs.html");
+ out.open(QFile::WriteOnly);
+ out.write(doc.toHtml().toLatin1());
+ out.close();
+ }
+#endif
+}
+
void tst_QTextMarkdownImporter::headingBulletsContinuations()
{
const QStringList expectedBlocks = QStringList() <<
@@ -109,7 +143,7 @@ void tst_QTextMarkdownImporter::headingBulletsContinuations()
f.close();
QTextDocument doc;
- QTextMarkdownImporter(QTextMarkdownImporter::DialectGitHub).import(&doc, md);
+ QTextMarkdownImporter(&doc, QTextMarkdownImporter::DialectGitHub).import(md);
QTextFrame::iterator iterator = doc.rootFrame()->begin();
QTextFrame *currentFrame = iterator.currentFrame();
QStringList::const_iterator expectedIt = expectedBlocks.constBegin();
@@ -157,7 +191,7 @@ void tst_QTextMarkdownImporter::thematicBreaks()
f.close();
QTextDocument doc;
- QTextMarkdownImporter(QTextMarkdownImporter::DialectGitHub).import(&doc, md);
+ QTextMarkdownImporter(&doc, QTextMarkdownImporter::DialectGitHub).import(md);
QTextFrame::iterator iterator = doc.rootFrame()->begin();
QTextFrame *currentFrame = iterator.currentFrame();
int i = 0;
@@ -190,36 +224,58 @@ void tst_QTextMarkdownImporter::thematicBreaks()
void tst_QTextMarkdownImporter::lists_data()
{
QTest::addColumn<QString>("input");
+ QTest::addColumn<int>("skipToCheckStart");
+ QTest::addColumn<int>("expectedListStart");
QTest::addColumn<int>("expectedItemCount");
QTest::addColumn<bool>("expectedEmptyItems");
QTest::addColumn<QString>("rewrite");
// Some of these cases show odd behavior, which is subject to change
// as the importer and the writer are tweaked to fix bugs over time.
- QTest::newRow("dot newline") << ".\n" << 0 << true << ".\n\n";
- QTest::newRow("number dot newline") << "1.\n" << 1 << true << "1. \n";
- QTest::newRow("star newline") << "*\n" << 1 << true << "* \n";
- QTest::newRow("hyphen newline") << "-\n" << 1 << true << "- \n";
- QTest::newRow("hyphen space newline") << "- \n" << 1 << true << "- \n";
- QTest::newRow("hyphen space letter newline") << "- a\n" << 1 << false << "- a\n";
+ QTest::newRow("dot newline") << ".\n" << 0 << 1 << 0 << true << ".\n\n";
+ QTest::newRow("number dot newline") << "1.\n" << 0 << 1 << 1 << true << "1. \n";
+ QTest::newRow("number offset start") << "2. text\n" << 0 << 2 << 1 << false << "2. text\n";
+ QTest::newRow("second list offset start")
+ << "1. text\n\nintervening paragraph\n\n4. second list item"
+ << 2 << 4 << 2 << false
+ << "1. text\n\nintervening paragraph\n\n4. second list item\n";
+ QTest::newRow("list continuation offset start")
+ << "3. text\n\n next paragraph in item 1\n10. second list item"
+ << 2 << 3 << 2 << false
+ << "3. text\n\n next paragraph in item 1\n\n4. second list item\n";
+ QTest::newRow("nested list offset start")
+ << "1. text\n\n 0. indented list item\n\n4. second item in first list"
+ << 1 << 0 << 3 << false
+ << "1. text\n 0. indented list item\n2. second item in first list\n";
+ QTest::newRow("offset start after nested list")
+ << "1. text\n\n 0. indented list item\n\n4. second item in first list"
+ << 2 << 1 << 3 << false
+ << "1. text\n 0. indented list item\n2. second item in first list\n";
+ QTest::newRow("star newline") << "*\n" << 0 << 1 << 1 << true << "* \n";
+ QTest::newRow("hyphen newline") << "-\n" << 0 << 1 << 1 << true << "- \n";
+ QTest::newRow("hyphen space newline") << "- \n" << 0 << 1 << 1 << true << "- \n";
+ QTest::newRow("hyphen space letter newline") << "- a\n" << 0 << 1 << 1 << false << "- a\n";
QTest::newRow("hyphen nbsp newline") <<
- QString::fromUtf8("-\u00A0\n") << 0 << true << "-\u00A0\n\n";
- QTest::newRow("nested empty lists") << "*\n *\n *\n" << 1 << true << " * \n";
- QTest::newRow("list nested in empty list") << "-\n * a\n" << 2 << false << "- \n * a\n";
+ QString::fromUtf8("-\u00A0\n") << 0 << 1 << 0 << true << "\\-\u00A0\n\n";
+ QTest::newRow("nested empty lists") << "*\n *\n *\n" << 0 << 1 << 1 << true << " * \n";
+ QTest::newRow("list nested in empty list") << "-\n * a\n" << 0 << 1 << 2 << false << "- \n * a\n";
QTest::newRow("lists nested in empty lists")
- << "-\n * a\n * b\n- c\n *\n + d\n" << 5 << false
+ << "-\n * a\n * b\n- c\n *\n + d\n" << 0 << 1 << 5 << false
<< "- \n * a\n * b\n- c *\n + d\n";
QTest::newRow("numeric lists nested in empty lists")
- << "- \n 1. a\n 2. b\n- c\n 1.\n + d\n" << 4 << false
+ << "- \n 1. a\n 2. b\n- c\n 1.\n + d\n" << 0 << 1 << 4 << false
<< "- \n 1. a\n 2. b\n- c 1. + d\n";
QTest::newRow("styled spans in list items")
- << "1. normal text\n2. **bold** text\n3. `code` in the item\n4. *italic* text\n5. _underlined_ text\n" << 5 << false
+ << "1. normal text\n2. **bold** text\n3. `code` in the item\n4. *italic* text\n5. _underlined_ text\n"
+ << 0 << 1 << 5 << false
<< "1. normal text\n2. **bold** text\n3. `code` in the item\n4. *italic* text\n5. _underlined_ text\n";
}
void tst_QTextMarkdownImporter::lists()
{
QFETCH(QString, input);
+ QFETCH(int, skipToCheckStart);
+ QFETCH(int, expectedListStart);
QFETCH(int, expectedItemCount);
QFETCH(bool, expectedEmptyItems);
QFETCH(QString, rewrite);
@@ -235,6 +291,8 @@ void tst_QTextMarkdownImporter::lists()
out.close();
}
#endif
+ qCDebug(lcTests) << " original:" << input;
+ qCDebug(lcTests) << "rewritten:" << doc.toMarkdown();
QTextFrame::iterator iterator = doc.rootFrame()->begin();
QTextFrame *currentFrame = iterator.currentFrame();
@@ -247,10 +305,12 @@ void tst_QTextMarkdownImporter::lists()
QCOMPARE(iterator.currentFrame(), currentFrame);
// Check whether the block is text or a horizontal rule
QTextBlock block = iterator.currentBlock();
+ QTextListFormat listFmt;
if (block.textList()) {
++itemCount;
if (!block.text().isEmpty())
emptyItems = false;
+ listFmt = block.textList()->format();
}
qCDebug(lcTests, "%d %s%s", i,
(block.textList() ? "<li>" : "<p>"), qPrintable(block.text()));
@@ -269,11 +329,18 @@ void tst_QTextMarkdownImporter::lists()
QCOMPARE(listItemFmt.fontItalic(), false);
QCOMPARE(listItemFmt.fontUnderline(), false);
QCOMPARE(listItemFmt.fontFixedPitch(), false);
+ if (i == skipToCheckStart) {
+ qCDebug(lcTests) << "skipped to list item" << i << block.text()
+ << "start" << listFmt.start() << "expected" << expectedListStart;
+ QCOMPARE(listFmt.start(), expectedListStart);
+ }
++iterator;
++i;
}
QCOMPARE(itemCount, expectedItemCount);
QCOMPARE(emptyItems, expectedEmptyItems);
+ if (doc.toMarkdown() != rewrite && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(doc.toMarkdown(), rewrite);
}
@@ -386,7 +453,7 @@ void tst_QTextMarkdownImporter::avoidBlankLineAtBeginning_data()
QTest::newRow("Text block") << QString("Markdown text") << 1;
QTest::newRow("Headline") << QString("Markdown text\n============") << 1;
- QTest::newRow("Code block") << QString(" Markdown text") << 2;
+ QTest::newRow("Code block") << QString(" Markdown text") << 1;
QTest::newRow("Unordered list") << QString("* Markdown text") << 1;
QTest::newRow("Ordered list") << QString("1. Markdown text") << 1;
QTest::newRow("Blockquote") << QString("> Markdown text") << 1;
@@ -398,7 +465,7 @@ void tst_QTextMarkdownImporter::avoidBlankLineAtBeginning() // QTBUG-81060
QFETCH(int, expectedNumberOfParagraphs);
QTextDocument doc;
- QTextMarkdownImporter(QTextMarkdownImporter::DialectGitHub).import(&doc, input);
+ QTextMarkdownImporter(&doc, QTextMarkdownImporter::DialectGitHub).import(input);
QTextFrame::iterator iterator = doc.rootFrame()->begin();
int i = 0;
while (!iterator.atEnd()) {
@@ -443,7 +510,7 @@ void tst_QTextMarkdownImporter::fragmentsAndProperties()
QFETCH(int, expectedNumberOfFragments);
QTextDocument doc;
- QTextMarkdownImporter(QTextMarkdownImporter::DialectGitHub).import(&doc, input);
+ QTextMarkdownImporter(&doc, QTextMarkdownImporter::DialectGitHub).import(input);
#ifdef DEBUG_WRITE_HTML
{
QFile out("/tmp/" + QLatin1String(QTest::currentDataTag()) + ".html");
@@ -498,5 +565,211 @@ void tst_QTextMarkdownImporter::pathological() // avoid crashing on crazy input
QTextDocument().setMarkdown(f.readAll());
}
+void tst_QTextMarkdownImporter::fencedCodeBlocks_data()
+{
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<int>("expectedCodeBlockCount");
+ QTest::addColumn<int>("expectedPlainBlockCount");
+ QTest::addColumn<QString>("expectedLanguage");
+ QTest::addColumn<QString>("expectedFenceChar");
+ QTest::addColumn<QString>("rewrite");
+
+ QTest::newRow("backtick fence with language")
+ << "```pseudocode\nprint('hello world\\n')\n```\n"
+ << 1 << 0 << "pseudocode" << "`"
+ << "```pseudocode\nprint('hello world\\n')\n```\n\n";
+ QTest::newRow("backtick fence with punctuated language")
+ << "```html+js\n<html><head><script>function hi() { console.log('\\\"hello world') }</script></head>blah</html>\n```\n"
+ << 1 << 0 << "html+js" << "`"
+ << "```html+js\n<html><head><script>function hi() { console.log('\\\"hello world') }</script></head>blah</html>\n```\n\n";
+ QTest::newRow("tilde fence with language")
+ << "~~~pseudocode\nprint('hello world\\n')\n~~~\n"
+ << 1 << 0 << "pseudocode" << "~"
+ << "~~~pseudocode\nprint('hello world\\n')\n~~~\n\n";
+ QTest::newRow("embedded backticks")
+ << "```\nnone `one` ``two``\n```\nplain\n```\n```three``` ````four````\n```\nplain\n"
+ << 2 << 2 << QString() << "`"
+ << "```\nnone `one` ``two``\n```\nplain\n\n```\n```three``` ````four````\n```\nplain\n\n";
+}
+
+void tst_QTextMarkdownImporter::fencedCodeBlocks()
+{
+ QFETCH(QString, input);
+ QFETCH(int, expectedCodeBlockCount);
+ QFETCH(int, expectedPlainBlockCount);
+ QFETCH(QString, expectedLanguage);
+ QFETCH(QString, expectedFenceChar);
+ QFETCH(QString, rewrite);
+
+ QTextDocument doc;
+ doc.setMarkdown(input);
+
+#ifdef DEBUG_WRITE_HTML
+ {
+ QFile out("/tmp/" + QLatin1String(QTest::currentDataTag()) + ".html");
+ out.open(QFile::WriteOnly);
+ out.write(doc.toHtml().toLatin1());
+ out.close();
+ }
+#endif
+
+ QTextFrame::iterator iterator = doc.rootFrame()->begin();
+ QTextFrame *currentFrame = iterator.currentFrame();
+ int codeBlockCount = 0;
+ int plainBlockCount = 0;
+ while (!iterator.atEnd()) {
+ // There are no child frames
+ QCOMPARE(iterator.currentFrame(), currentFrame);
+ // Check whether the block is code or plain
+ QTextBlock block = iterator.currentBlock();
+ const bool codeBlock = block.blockFormat().hasProperty(QTextFormat::BlockCodeFence);
+ QCOMPARE(block.blockFormat().nonBreakableLines(), codeBlock);
+ QCOMPARE(block.blockFormat().stringProperty(QTextFormat::BlockCodeLanguage), codeBlock ? expectedLanguage : QString());
+ if (codeBlock) {
+ QCOMPARE(block.blockFormat().stringProperty(QTextFormat::BlockCodeFence), expectedFenceChar);
+ ++codeBlockCount;
+ } else {
+ ++plainBlockCount;
+ }
+ qCDebug(lcTests) << (codeBlock ? "code" : "text") << block.text() << block.charFormat().fontFamilies();
+ ++iterator;
+ }
+ QCOMPARE(codeBlockCount, expectedCodeBlockCount);
+ QCOMPARE(plainBlockCount, expectedPlainBlockCount);
+ if (doc.toMarkdown() != rewrite && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(doc.toMarkdown(), rewrite);
+}
+
+void tst_QTextMarkdownImporter::frontMatter_data()
+{
+ QTest::addColumn<QString>("inputFile");
+ QTest::addColumn<int>("expectedBlockCount");
+
+ QTest::newRow("yaml + markdown") << QFINDTESTDATA("data/yaml.md") << 1;
+ QTest::newRow("yaml only") << QFINDTESTDATA("data/yaml-only.md") << 0;
+}
+
+void tst_QTextMarkdownImporter::frontMatter()
+{
+ QFETCH(QString, inputFile);
+ QFETCH(int, expectedBlockCount);
+
+ QFile f(inputFile);
+ QVERIFY(f.open(QFile::ReadOnly | QIODevice::Text));
+ QString md = QString::fromUtf8(f.readAll());
+ f.close();
+ const int yamlBegin = md.indexOf("name:");
+ const int yamlEnd = md.indexOf("---", yamlBegin);
+ const QString yaml = md.sliced(yamlBegin, yamlEnd - yamlBegin);
+
+ QTextDocument doc;
+ QTextMarkdownImporter(&doc, QTextMarkdownImporter::DialectGitHub).import(md);
+ int blockCount = 0;
+ for (QTextFrame::iterator iterator = doc.rootFrame()->begin(); !iterator.atEnd(); ++iterator) {
+ // Check whether the block is text or a horizontal rule
+ if (!iterator.currentBlock().text().isEmpty())
+ ++blockCount;
+ }
+ QCOMPARE(blockCount, expectedBlockCount); // yaml is not part of the markdown text
+ QCOMPARE(doc.metaInformation(QTextDocument::FrontMatter), yaml); // without fences
+}
+
+void tst_QTextMarkdownImporter::toRawText_data()
+{
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<QString>("expectedRawText");
+
+ // tests to verify that fixing QTBUG-122083 is safe
+ // https://spec.commonmark.org/0.31.2/#example-12
+ QTest::newRow("punctuation backslash escapes") <<
+ R"(\!\"\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\<\=\>\?\@\[\\\]\^\_\`\{\|\}\~)" <<
+ R"(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)";
+ // https://spec.commonmark.org/0.31.2/#example-13
+ QTest::newRow("literal backslashes") <<
+ QString(uR"(\→\A\a\ \3\φ\«)") <<
+ QString(uR"(\→\A\a\ \3\φ\«)");
+ // https://spec.commonmark.org/0.31.2/#example-14
+ QTest::newRow("escape to avoid em") <<
+ R"(\*not emphasized*)" <<
+ R"(*not emphasized*)";
+ QTest::newRow("escape to avoid html") <<
+ R"(\<br/> not a tag)" <<
+ R"(<br/> not a tag)";
+ QTest::newRow("escape to avoid link") <<
+ R"(\[not a link](/foo))" <<
+ R"([not a link](/foo))";
+ QTest::newRow("escape to avoid mono") <<
+ R"(\`not code`)" <<
+ R"(`not code`)";
+ QTest::newRow("escape to avoid num list") <<
+ R"(1\. not a list)" <<
+ R"(1. not a list)";
+ QTest::newRow("escape to avoid list") <<
+ R"(\* not a list)" <<
+ R"(* not a list)";
+ QTest::newRow("escape to avoid heading") <<
+ R"(\# not a heading)" <<
+ R"(# not a heading)";
+ QTest::newRow("escape to avoid reflink") <<
+ R"(\[foo]: /url "not a reference")" <<
+ R"([foo]: /url "not a reference")";
+ QTest::newRow("escape to avoid entity") <<
+ R"(\&ouml; not a character entity)" <<
+ R"(&ouml; not a character entity)";
+ // https://spec.commonmark.org/0.31.2/#example-15
+ QTest::newRow("escape backslash only") <<
+ R"(\\*emphasis*)" <<
+ R"(\emphasis)";
+ // https://spec.commonmark.org/0.31.2/#example-16
+ QTest::newRow("backslash line break") <<
+ "foo\\\nbar" <<
+ "foo\u2029bar";
+ // https://spec.commonmark.org/0.31.2/#example-17
+ QTest::newRow("backslash in mono span") <<
+ R"(`` \[\` ``)" <<
+ R"(\[\`)";
+ // https://spec.commonmark.org/0.31.2/#example-18
+ QTest::newRow("backslash in indented code") <<
+ R"( \[\])" <<
+ R"(\[\])";
+ // https://spec.commonmark.org/0.31.2/#example-19
+ QTest::newRow("backslash in fenced code") <<
+ "~~~\n\\[\\]\n~~~" <<
+ R"(\[\])";
+ // https://spec.commonmark.org/0.31.2/#example-20
+ QTest::newRow("backslash in autolink") <<
+ R"(<https://example.com?find=\*>)" <<
+ R"(https://example.com?find=\*)";
+ // https://spec.commonmark.org/0.31.2/#example-21
+ QTest::newRow("backslash in autolink") <<
+ "<a href=\"/bar\\/)\"" <<
+ "<a href=\"/bar/)\"";
+ // https://spec.commonmark.org/0.31.2/#example-22
+ QTest::newRow("escapes in link") <<
+ R"([foo](/bar\* "ti\*tle"))" <<
+ R"(foo)";
+ // https://spec.commonmark.org/0.31.2/#example-24
+ QTest::newRow("backslash in code lang") <<
+ "```\nfoo\\+bar\nfoo\n```" <<
+ "foo\\+bar\u2029foo";
+ // end of tests to verify that fixing QTBUG-122083 is safe
+ // (it's ok to add unrelated markdown-to-rawtext cases later)
+}
+
+void tst_QTextMarkdownImporter::toRawText()
+{
+ QFETCH(QString, input);
+ QFETCH(QString, expectedRawText);
+
+ QTextDocument doc;
+ doc.setMarkdown(input);
+
+ // These are testing md4c more than Qt, so any change may be an md4c bug, or a fix
+ QCOMPARE(doc.toRawText(), expectedRawText);
+ if (doc.blockCount() == 1)
+ QCOMPARE(doc.firstBlock().text(), expectedRawText);
+}
+
QTEST_MAIN(tst_QTextMarkdownImporter)
#include "tst_qtextmarkdownimporter.moc"
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/BLACKLIST b/tests/auto/gui/text/qtextmarkdownwriter/BLACKLIST
deleted file mode 100644
index 12cb21f40a..0000000000
--- a/tests/auto/gui/text/qtextmarkdownwriter/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-# QTBUG-89819
-ci b2qt 32bit
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/CMakeLists.txt b/tests/auto/gui/text/qtextmarkdownwriter/CMakeLists.txt
index 884195345c..0cdf1d9225 100644
--- a/tests/auto/gui/text/qtextmarkdownwriter/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextmarkdownwriter/CMakeLists.txt
@@ -1,17 +1,26 @@
-# Generated from qtextmarkdownwriter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextmarkdownwriter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextmarkdownwriter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
-list(APPEND test_data "data/example.md")
-list(APPEND test_data "data/blockquotes.md")
+file(GLOB_RECURSE test_data
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ data/*
+)
qt_internal_add_test(tst_qtextmarkdownwriter
SOURCES
tst_qtextmarkdownwriter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/data/blockquotes.md b/tests/auto/gui/text/qtextmarkdownwriter/data/blockquotes.md
index 702ccef134..8e605ef7e6 100644
--- a/tests/auto/gui/text/qtextmarkdownwriter/data/blockquotes.md
+++ b/tests/auto/gui/text/qtextmarkdownwriter/data/blockquotes.md
@@ -8,18 +8,17 @@ MacFarlane writes:
> What distinguishes Markdown from many other lightweight markup syntaxes,
> which are often easier to write, is its readability. As Gruber writes:
-
+>
> > The overriding design goal for Markdown's formatting syntax is to make it
> > as readable as possible. The idea is that a Markdown-formatted document should
> > be publishable as-is, as plain text, without looking like it's been marked up
> > with tags or formatting instructions. (
-> > [http://daringfireball.net/projects/markdown/](http://daringfireball.net/projects/markdown/)
-> > )
-
+> > <http://daringfireball.net/projects/markdown/> )
+>
> The point can be illustrated by comparing a sample of AsciiDoc with an
> equivalent sample of Markdown. Here is a sample of AsciiDoc from the AsciiDoc
> manual:
-
+>
> ```AsciiDoc
> 1. List item one.
> +
@@ -50,6 +49,7 @@ Now let's have an indented code block:
}
and end with a fenced code block:
+
~~~pseudocode
#include <something.h>
#include <else.h>
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/data/blockquotesWithLists.md b/tests/auto/gui/text/qtextmarkdownwriter/data/blockquotesWithLists.md
new file mode 100644
index 0000000000..1728889adc
--- /dev/null
+++ b/tests/auto/gui/text/qtextmarkdownwriter/data/blockquotesWithLists.md
@@ -0,0 +1,14 @@
+What if we have a quotation containing a list?
+
+> First some quoted text, and then a list:
+>
+> - one
+> - two is longer and has enough words to form a paragraph with text continuing
+> onto the next line
+>
+> enough of that, let's try a numbered list
+>
+> 1. List item one
+> 2. List item two is longer and has enough words to form a paragraph with
+> text continuing onto the next line.
+> \ No newline at end of file
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/data/example.md b/tests/auto/gui/text/qtextmarkdownwriter/data/example.md
index a9a157f25a..15b30598e6 100644
--- a/tests/auto/gui/text/qtextmarkdownwriter/data/example.md
+++ b/tests/auto/gui/text/qtextmarkdownwriter/data/example.md
@@ -83,7 +83,7 @@ is used extensively in
[Qt Assistant](http://doc.qt.io/qt-5/qtassistant-index.html). Hyperlinks are
automatically created when an HTML file is imported into an editor. Since the
rich text framework supports hyperlinks natively, they can also be created
-programatically.
+programmatically.
## Undo and Redo
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/data/links.md b/tests/auto/gui/text/qtextmarkdownwriter/data/links.md
index 33cdb2b3ab..c9aae80c67 100644
--- a/tests/auto/gui/text/qtextmarkdownwriter/data/links.md
+++ b/tests/auto/gui/text/qtextmarkdownwriter/data/links.md
@@ -23,3 +23,6 @@ title")
* [link](/url "title
title title")
* nonlink
+
+Qt has the <https://qt.io> site
+
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/data/listItemWithBlockquote.md b/tests/auto/gui/text/qtextmarkdownwriter/data/listItemWithBlockquote.md
new file mode 100644
index 0000000000..c417125fea
--- /dev/null
+++ b/tests/auto/gui/text/qtextmarkdownwriter/data/listItemWithBlockquote.md
@@ -0,0 +1,6 @@
+What if we have a list item containing a block quote?
+
+- one
+- > two is longer and has enough words to form a paragraph with text continuing
+ > onto the next line
+
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/data/longHeadings.md b/tests/auto/gui/text/qtextmarkdownwriter/data/longHeadings.md
new file mode 100644
index 0000000000..72692b4845
--- /dev/null
+++ b/tests/auto/gui/text/qtextmarkdownwriter/data/longHeadings.md
@@ -0,0 +1,9 @@
+# The quick brown fox jumped over the lazy dog while the cat played the fiddle and the cow jumped over the moon
+
+Hey diddle diddle
+
+## This document has a verbose subheading too, which we do not expect to wrap in the output
+
+Qt can write it right. Long text here in this paragraph will actually wrap,
+even though its heading doesn't.
+
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/data/yaml.md b/tests/auto/gui/text/qtextmarkdownwriter/data/yaml.md
new file mode 100644
index 0000000000..41303a0187
--- /dev/null
+++ b/tests/auto/gui/text/qtextmarkdownwriter/data/yaml.md
@@ -0,0 +1,11 @@
+---
+name: "Venus"
+discoverer: "Galileo Galilei"
+title: "A description of the planet Venus"
+keywords:
+ - planets
+ - solar system
+ - astronomy
+---
+*Venus* is the second planet from the Sun, orbiting it every 224.7 Earth days.
+
diff --git a/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp b/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp
index 24bb1a5992..0d261bc27e 100644
--- a/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp
+++ b/tests/auto/gui/text/qtextmarkdownwriter/tst_qtextmarkdownwriter.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QTextDocument>
@@ -34,9 +9,13 @@
#include <QTextTable>
#include <QBuffer>
#include <QDebug>
+#include <QFontInfo>
+#include <QLoggingCategory>
#include <private/qtextmarkdownwriter_p.h>
+Q_LOGGING_CATEGORY(lcTests, "qt.text.tests")
+
// #define DEBUG_WRITE_OUTPUT
class tst_QTextMarkdownWriter : public QObject
@@ -55,17 +34,31 @@ private slots:
void testWriteNestedBulletLists_data();
void testWriteNestedBulletLists();
void testWriteNestedNumericLists();
+ void testWriteNumericListWithStart();
void testWriteTable();
+ void frontMatter();
+ void charFormatWrapping_data();
+ void charFormatWrapping();
+ void charFormat_data();
+ void charFormat();
void rewriteDocument_data();
void rewriteDocument();
void fromHtml_data();
void fromHtml();
+ void fromPlainTextAndBack_data();
+ void fromPlainTextAndBack();
+ void escapeSpecialCharacters_data();
+ void escapeSpecialCharacters();
private:
+ bool isMainFontFixed();
+ bool isFixedFontProportional();
QString documentToUnixMarkdown();
private:
QTextDocument *document;
+ QFont m_monoFont = QFontDatabase::systemFont(QFontDatabase::FixedFont);
+ QFont m_defaultFont;
};
void tst_QTextMarkdownWriter::init()
@@ -78,10 +71,39 @@ void tst_QTextMarkdownWriter::cleanup()
delete document;
}
+bool tst_QTextMarkdownWriter::isMainFontFixed()
+{
+ bool ret = QFontInfo(QGuiApplication::font()).fixedPitch();
+ if (ret) {
+ qCWarning(lcTests) << "QFontDatabase::GeneralFont is monospaced: markdown writing is likely to use too many backticks"
+ << QFontDatabase::systemFont(QFontDatabase::GeneralFont);
+ }
+ return ret;
+}
+
+bool tst_QTextMarkdownWriter::isFixedFontProportional()
+{
+ bool ret = !QFontInfo(QFontDatabase::systemFont(QFontDatabase::FixedFont)).fixedPitch();
+ if (ret) {
+ qCWarning(lcTests) << "QFontDatabase::FixedFont is NOT monospaced: markdown writing is likely to use too few backticks"
+ << QFontDatabase::systemFont(QFontDatabase::FixedFont);
+ }
+ return ret;
+}
+
+QString tst_QTextMarkdownWriter::documentToUnixMarkdown()
+{
+ QString ret;
+ QTextStream ts(&ret, QIODevice::WriteOnly);
+ QTextMarkdownWriter writer(ts, QTextDocument::MarkdownDialectGitHub);
+ writer.writeAll(document);
+ return ret;
+}
+
void tst_QTextMarkdownWriter::testWriteParagraph_data()
{
QTest::addColumn<QString>("input");
- QTest::addColumn<QString>("output");
+ QTest::addColumn<QString>("expectedOutput");
QTest::newRow("empty") << "" <<
"";
@@ -104,12 +126,15 @@ void tst_QTextMarkdownWriter::testWriteParagraph_data()
void tst_QTextMarkdownWriter::testWriteParagraph()
{
QFETCH(QString, input);
- QFETCH(QString, output);
+ QFETCH(QString, expectedOutput);
QTextCursor cursor(document);
cursor.insertText(input);
- QCOMPARE(documentToUnixMarkdown(), output);
+ const QString output = documentToUnixMarkdown();
+ if (output != expectedOutput && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(output, expectedOutput);
}
void tst_QTextMarkdownWriter::testWriteList()
@@ -122,8 +147,11 @@ void tst_QTextMarkdownWriter::testWriteList()
cursor.insertText("ListItem 2");
list->add(cursor.block());
- QCOMPARE(documentToUnixMarkdown(), QString::fromLatin1(
- "- ListItem 1\n- ListItem 2\n"));
+ const QString output = documentToUnixMarkdown();
+ const QString expected = QString::fromLatin1("- ListItem 1\n- ListItem 2\n");
+ if (output != expected && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(output, expected);
}
void tst_QTextMarkdownWriter::testWriteEmptyList()
@@ -158,8 +186,12 @@ void tst_QTextMarkdownWriter::testWriteCheckboxListItemEndingWithCode()
QCOMPARE(cursor.selectedText(), QString::fromLatin1("Image.originalSize"));
cursor.setCharFormat(fmt);
- QCOMPARE(documentToUnixMarkdown(), QString::fromLatin1(
- "- [ ] `Image.originalSize` property (not necessary; `PdfDocument.pagePointSize()`\n substitutes)\n"));
+ const QString output = documentToUnixMarkdown();
+ const QString expected = QString::fromLatin1(
+ "- [ ] `Image.originalSize` property (not necessary; `PdfDocument.pagePointSize()`\n substitutes)\n");
+ if (output != expected && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(output, expected);
}
void tst_QTextMarkdownWriter::testWriteNestedBulletLists_data()
@@ -241,7 +273,7 @@ void tst_QTextMarkdownWriter::testWriteNestedBulletLists()
cursor.insertText("continuation");
}
- QString output = documentToUnixMarkdown();
+ const QString output = documentToUnixMarkdown();
#ifdef DEBUG_WRITE_OUTPUT
{
QFile out("/tmp/" + QLatin1String(QTest::currentDataTag()) + ".md");
@@ -250,7 +282,9 @@ void tst_QTextMarkdownWriter::testWriteNestedBulletLists()
out.close();
}
#endif
- QCOMPARE(documentToUnixMarkdown(), expectedOutput);
+ if (output != expectedOutput && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(output, expectedOutput);
}
void tst_QTextMarkdownWriter::testWriteNestedNumericLists()
@@ -262,29 +296,137 @@ void tst_QTextMarkdownWriter::testWriteNestedNumericLists()
list1->add(cursor.block());
QTextListFormat fmt2;
+ // Alpha "numbering" is not supported in markdown, so we'll actually get decimal.
+ fmt2.setStyle(QTextListFormat::ListLowerAlpha);
+ fmt2.setNumberSuffix(QLatin1String(")"));
+ fmt2.setIndent(2);
+ QTextList *list2 = cursor.insertList(fmt2);
+ cursor.insertText("ListItem 2");
+
+ QTextListFormat fmt3;
+ fmt3.setStyle(QTextListFormat::ListDecimal);
+ fmt3.setIndent(3);
+ cursor.insertList(fmt3);
+ cursor.insertText("ListItem 3");
+
+ cursor.insertBlock();
+ cursor.insertText("ListItem 4");
+ list1->add(cursor.block());
+
+ cursor.insertBlock();
+ cursor.insertText("ListItem 5");
+ list2->add(cursor.block());
+
+ const QString output = documentToUnixMarkdown();
+
+ #ifdef DEBUG_WRITE_OUTPUT
+ {
+ QFile out(QDir::temp().filePath(QLatin1String(QTest::currentTestFunction()) + ".md"));
+ out.open(QFile::WriteOnly);
+ out.write(output.toUtf8());
+ out.close();
+ }
+ {
+ QFile out(QDir::temp().filePath(QLatin1String(QTest::currentTestFunction()) + ".html"));
+ out.open(QFile::WriteOnly);
+ out.write(document->toHtml().toUtf8());
+ out.close();
+ }
+#endif
+
+ // While we can set the start index for a block, if list items intersect each other, they will
+ // still use the list numbering.
+ const QString expected = QString::fromLatin1(
+ "1. ListItem 1\n 1) ListItem 2\n 1. ListItem 3\n2. ListItem 4\n 2) ListItem 5\n");
+ if (output != expected && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(output, expected);
+}
+
+void tst_QTextMarkdownWriter::testWriteNumericListWithStart()
+{
+ QTextCursor cursor(document);
+
+ // The first list will start at 2.
+ QTextListFormat fmt1;
+ fmt1.setStyle(QTextListFormat::ListDecimal);
+ fmt1.setStart(2);
+ QTextList *list1 = cursor.createList(fmt1);
+ cursor.insertText("ListItem 1");
+ list1->add(cursor.block());
+
+ // This list uses the default start (1) again.
+ QTextListFormat fmt2;
+ // Alpha "numbering" is not supported in markdown, so we'll actually get decimal.
fmt2.setStyle(QTextListFormat::ListLowerAlpha);
fmt2.setNumberSuffix(QLatin1String(")"));
fmt2.setIndent(2);
QTextList *list2 = cursor.insertList(fmt2);
cursor.insertText("ListItem 2");
+ // Negative list numbers are disallowed by most Markdown implementations. This list will start
+ // at 1 for that reason.
QTextListFormat fmt3;
fmt3.setStyle(QTextListFormat::ListDecimal);
fmt3.setIndent(3);
+ fmt3.setStart(-1);
cursor.insertList(fmt3);
cursor.insertText("ListItem 3");
+ // Continuing list1, so the second item will have the number 3.
cursor.insertBlock();
cursor.insertText("ListItem 4");
list1->add(cursor.block());
+ // This will look out of place: it's in a different position than its list would suggest.
+ // Generates invalid markdown numbering (OK for humans, but md4c will parse it differently than we "meant").
+ // TODO QTBUG-111707: the writer needs to add newlines, otherwise ListItem 5 becomes part of the text for ListItem 4.
cursor.insertBlock();
cursor.insertText("ListItem 5");
list2->add(cursor.block());
- // There's no QTextList API to set the starting number so we hard-coded all lists to start at 1 (QTBUG-65384)
- QCOMPARE(documentToUnixMarkdown(), QString::fromLatin1(
- "1. ListItem 1\n 1) ListItem 2\n 1. ListItem 3\n2. ListItem 4\n 2) ListItem 5\n"));
+ // 0 indexed lists are fine.
+ QTextListFormat fmt4;
+ fmt4.setStyle(QTextListFormat::ListDecimal);
+ fmt4.setStart(0);
+ QTextList *list4 = cursor.insertList(fmt4);
+ cursor.insertText("SecondList Item 0");
+ list4->add(cursor.block());
+
+ // Ensure list numbers are incremented properly.
+ cursor.insertBlock();
+ cursor.insertText("SecondList Item 1");
+ list4->add(cursor.block());
+
+ const QString output = documentToUnixMarkdown();
+ const QString expected = QString::fromLatin1(
+ R"(2. ListItem 1
+ 1) ListItem 2
+ 1. ListItem 3
+3. ListItem 4
+ 2) ListItem 5
+0. SecondList Item 0
+1. SecondList Item 1
+)");
+
+#ifdef DEBUG_WRITE_OUTPUT
+ {
+ QFile out(QDir::temp().filePath(QLatin1String(QTest::currentTestFunction()) + ".md"));
+ out.open(QFile::WriteOnly);
+ out.write(output.toUtf8());
+ out.close();
+ }
+ {
+ QFile out(QDir::temp().filePath(QLatin1String(QTest::currentTestFunction()) + ".html"));
+ out.open(QFile::WriteOnly);
+ out.write(document->toHtml().toUtf8());
+ out.close();
+ }
+#endif
+
+ if (output != expected && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(output, expected);
}
void tst_QTextMarkdownWriter::testWriteTable()
@@ -337,6 +479,8 @@ void tst_QTextMarkdownWriter::testWriteTable()
QString expected = QString::fromLatin1(
"\n|one |two |three|\n|------|----|-----|\n|alice |bob |carl |\n|dennis|eric|fiona|\n|gina | | |\n\n");
+ if (md != expected && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(md, expected);
// create table with merged cells
@@ -386,7 +530,221 @@ void tst_QTextMarkdownWriter::testWriteTable()
}
#endif
- QCOMPARE(md, QString::fromLatin1("\n|a ||b|\n|-|-|-|\n|c|d ||\n|e|f| |\n\n"));
+ expected = QString::fromLatin1("\n|a ||b|\n|-|-|-|\n|c|d ||\n|e|f| |\n\n");
+ if (md != expected && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(md, expected);
+}
+
+void tst_QTextMarkdownWriter::frontMatter()
+{
+ QTextCursor cursor(document);
+ cursor.insertText("bar");
+ document->setMetaInformation(QTextDocument::FrontMatter, "foo");
+
+ const QString output = documentToUnixMarkdown();
+ const QString expectedOutput("---\nfoo\n---\nbar\n\n");
+ if (output != expectedOutput && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(output, expectedOutput);
+}
+
+void tst_QTextMarkdownWriter::charFormatWrapping_data()
+{
+ QTest::addColumn<QTextFormat::Property>("property");
+ QTest::addColumn<QVariant>("propertyValue");
+ QTest::addColumn<QString>("followingText");
+ QTest::addColumn<QString>("expectedIndicator");
+
+ const QString spaced = " after";
+ const QString unspaced = ", and some more after";
+
+ QTest::newRow("FontFixedPitch-spaced")
+ << QTextFormat::FontFixedPitch << QVariant(true) << spaced << "`";
+ QTest::newRow("FontFixedPitch-unspaced")
+ << QTextFormat::FontFixedPitch << QVariant(true) << unspaced << "`";
+ QTest::newRow("FontItalic")
+ << QTextFormat::FontItalic << QVariant(true) << spaced << "*";
+ QTest::newRow("FontUnderline")
+ << QTextFormat::FontUnderline << QVariant(true) << spaced << "_";
+ QTest::newRow("FontStrikeOut")
+ << QTextFormat::FontStrikeOut << QVariant(true) << spaced << "~~";
+ QTest::newRow("FontWeight-spaced")
+ << QTextFormat::FontWeight << QVariant(700) << spaced << "**";
+ QTest::newRow("FontWeight-unspaced")
+ << QTextFormat::FontWeight << QVariant(700) << unspaced << "**";
+}
+
+void tst_QTextMarkdownWriter::charFormatWrapping() // QTBUG-116927
+{
+ QFETCH(QTextFormat::Property, property);
+ QFETCH(QVariant, propertyValue);
+ QFETCH(QString, expectedIndicator);
+ QFETCH(QString, followingText);
+
+ const QString newLine("\n");
+ QTextCursor cursor(document);
+ cursor.insertText("around sixty-four characters to go before some formatted words ");
+ QTextCharFormat fmt;
+ fmt.setProperty(property, propertyValue);
+ cursor.setCharFormat(fmt);
+ cursor.insertText("formatted text");
+
+ cursor.setCharFormat({});
+ cursor.insertText(followingText);
+ qsizetype lastNewLineIndex = 100;
+
+ for (int push = 0; push < 10; ++push) {
+ if (push > 0) {
+ cursor.movePosition(QTextCursor::StartOfBlock);
+ cursor.insertText("a");
+ }
+
+ const QString output = documentToUnixMarkdown().trimmed(); // get rid of trailing newlines
+ const auto nlIdx = output.indexOf(newLine);
+ qCDebug(lcTests) << "push" << push << ":" << output << "newline @" << nlIdx;
+ // we're always wrapping in this test: expect to find a newline
+ QCOMPARE_GT(nlIdx, 70);
+ // don't expect the newline to be more than one character to the right of where we found it last time
+ // i.e. if we already started breaking in the middle: "`formatted\ntext`",
+ // then we would not expect that prepending one more character would make it go
+ // back to breaking afterwards: "`formatted text`\n" (because then the line becomes longer than necessary)
+ QCOMPARE_LE(nlIdx, lastNewLineIndex + 1);
+ lastNewLineIndex = nlIdx;
+ const QString nextChars = output.sliced(nlIdx + newLine.size(), expectedIndicator.size());
+ const auto startingIndicatorIdx = output.indexOf(expectedIndicator);
+ // the starting indicator always exists, except in case of font problems on some CI platforms
+ if (startingIndicatorIdx <= 0)
+ QSKIP("starting indicator not found, probably due to platform font problems (QTBUG-103484 etc.)");
+ const auto endingIndicatorIdx = output.indexOf(expectedIndicator, startingIndicatorIdx + 5);
+ qCDebug(lcTests) << "next chars past newline" << nextChars
+ << "indicators @" << startingIndicatorIdx << endingIndicatorIdx;
+ // the closing indicator must exist
+ QCOMPARE_GT(endingIndicatorIdx, startingIndicatorIdx);
+ // don't start a new line with an ending indicator:
+ // we can have "**formatted\ntext**" or "**formatted text**\n" or "\n**formatted text**"
+ // but not "**formatted text\n**"
+ if (startingIndicatorIdx < nlIdx)
+ QCOMPARE_NE(nextChars, expectedIndicator);
+ }
+}
+
+void tst_QTextMarkdownWriter::charFormat_data()
+{
+ QTest::addColumn<QTextFormat::Property>("property");
+ QTest::addColumn<QVariant>("propertyValue");
+ QTest::addColumn<QFont>("explicitFont");
+ QTest::addColumn<QString>("expectedOutput");
+
+ const QTextFormat::Property NoProperty = QTextFormat::ObjectIndex;
+
+ QTest::newRow("FontFixedPitch")
+ << QTextFormat::FontFixedPitch << QVariant(true) << m_defaultFont
+ << "before `formatted` after";
+ if (!isFixedFontProportional()) {
+ // QTBUG-54623 QTBUG-75649 QTBUG-79900 QTBUG-103484 etc.
+ QTest::newRow("mono font") << NoProperty << QVariant() << m_monoFont
+ << "before `formatted` after";
+ }
+
+ {
+ QFont font;
+ font.setItalic(true);
+ QTest::newRow("italic font")
+ << NoProperty << QVariant() << font
+ << "before *formatted* after";
+ }
+ QTest::newRow("FontItalic")
+ << QTextFormat::FontItalic << QVariant(true) << m_defaultFont
+ << "before *formatted* after";
+
+ {
+ QFont font;
+ font.setUnderline(true);
+ QTest::newRow("underline font")
+ << NoProperty << QVariant() << font
+ << "before _formatted_ after";
+ }
+ QTest::newRow("FontUnderline")
+ << QTextFormat::FontUnderline << QVariant(true) << m_defaultFont
+ << "before _formatted_ after";
+
+ {
+ QFont font;
+ font.setStrikeOut(true);
+ QTest::newRow("strikeout font")
+ << NoProperty << QVariant() << font
+ << "before ~~formatted~~ after";
+ }
+ QTest::newRow("FontStrikeOut")
+ << QTextFormat::FontStrikeOut << QVariant(true) << m_defaultFont
+ << "before ~~formatted~~ after";
+
+ {
+ QFont font;
+ font.setBold(true);
+ QTest::newRow("bold font")
+ << NoProperty << QVariant() << font
+ << "before **formatted** after";
+ }
+ {
+ QFont font;
+ font.setWeight(QFont::Black);
+ QTest::newRow("black font")
+ << NoProperty << QVariant() << font
+ << "before **formatted** after";
+ }
+ QTest::newRow("FontWeight")
+ << QTextFormat::FontWeight << QVariant(700) << m_defaultFont
+ << "before **formatted** after";
+
+ QTest::newRow("AnchorHref")
+ << QTextFormat::AnchorHref << QVariant("linky linky") << m_defaultFont
+ << "before [formatted](linky linky) after";
+
+ QTest::newRow("TextToolTip") // no effect without AnchorHref
+ << QTextFormat::TextToolTip << QVariant("such a tool") << m_defaultFont
+ << "before formatted after";
+}
+
+void tst_QTextMarkdownWriter::charFormat()
+{
+ if (isMainFontFixed())
+ QSKIP("QTextMarkdownWriter would generate bogus backticks");
+
+ QFETCH(QTextFormat::Property, property);
+ QFETCH(QVariant, propertyValue);
+ QFETCH(QFont, explicitFont);
+ QFETCH(QString, expectedOutput);
+
+ QTextCursor cursor(document);
+ cursor.insertText("before ");
+
+ QTextCharFormat fmt;
+ if (explicitFont != m_defaultFont)
+ fmt.setFont(explicitFont);
+ if (property != QTextFormat::ObjectIndex) // != 0
+ fmt.setProperty(property, propertyValue);
+ if (explicitFont == m_monoFont) {
+ QFontInfo fontInfo(fmt.font());
+ qCDebug(lcTests) << "mono font" << explicitFont << "fontInfo fixedPitch" << fontInfo.fixedPitch() << "fmt fixedPitch" << fmt.fontFixedPitch();
+ }
+ cursor.setCharFormat(fmt);
+ cursor.insertText("formatted");
+
+ cursor.setCharFormat({});
+ cursor.insertText(" after");
+
+ const QString output = documentToUnixMarkdown();
+#ifdef DEBUG_WRITE_OUTPUT
+ {
+ QFile out(QDir::temp().filePath(QLatin1String(QTest::currentDataTag()) + ".md"));
+ out.open(QFile::WriteOnly);
+ out.write(output.toUtf8());
+ out.close();
+ }
+#endif
+ QCOMPARE(output.trimmed(), expectedOutput);
}
void tst_QTextMarkdownWriter::rewriteDocument_data()
@@ -394,11 +752,15 @@ void tst_QTextMarkdownWriter::rewriteDocument_data()
QTest::addColumn<QString>("inputFile");
QTest::newRow("block quotes") << "blockquotes.md";
+ QTest::newRow("block quotes with lists") << "blockquotesWithLists.md";
+ // QTest::newRow("list item with block quote") << "listItemWithBlockquote.md"; // not supported for now
QTest::newRow("example") << "example.md";
QTest::newRow("list items after headings") << "headingsAndLists.md";
QTest::newRow("word wrap") << "wordWrap.md";
QTest::newRow("links") << "links.md";
QTest::newRow("lists and code blocks") << "listsAndCodeBlocks.md";
+ QTest::newRow("front matter") << "yaml.md";
+ QTest::newRow("long headings") << "longHeadings.md";
}
void tst_QTextMarkdownWriter::rewriteDocument()
@@ -419,17 +781,19 @@ void tst_QTextMarkdownWriter::rewriteDocument()
out.close();
#endif
+ if (md != orig && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
QCOMPARE(md, orig);
}
void tst_QTextMarkdownWriter::fromHtml_data()
{
- QTest::addColumn<QString>("expectedInput");
+ QTest::addColumn<QString>("input");
QTest::addColumn<QString>("expectedOutput");
QTest::newRow("long URL") <<
"<span style=\"font-style:italic;\">https://www.example.com/dir/subdir/subsubdir/subsubsubdir/subsubsubsubdir/subsubsubsubsubdir/</span>" <<
- "*https://www.example.com/dir/subdir/subsubdir/subsubsubdir/subsubsubsubdir/subsubsubsubsubdir/*\n\n";
+ "\n*https://www.example.com/dir/subdir/subsubdir/subsubsubdir/subsubsubsubdir/subsubsubsubsubdir/*\n\n";
QTest::newRow("non-emphasis inline asterisk") << "3 * 4" << "3 * 4\n\n";
QTest::newRow("arithmetic") << "(2 * a * x + b)^2 = b^2 - 4 * a * c" << "(2 * a * x + b)^2 = b^2 - 4 * a * c\n\n";
QTest::newRow("escaped asterisk after newline") <<
@@ -461,22 +825,51 @@ void tst_QTextMarkdownWriter::fromHtml_data()
"![foo](/url \"title\")\n\n";
QTest::newRow("code") <<
"<pre class=\"language-pseudocode\">\n#include \"foo.h\"\n\nblock {\n statement();\n}\n\n</pre>" <<
- "```pseudocode\n#include \"foo.h\"\n\nblock {\n statement();\n}\n```\n\n";
- // TODO
-// QTest::newRow("escaped number and paren after double newline") <<
-// "<p>(The first sentence of this paragraph is a line, the next paragraph has a number</p>13) but that's not part of an ordered list" <<
-// "(The first sentence of this paragraph is a line, the next paragraph has a number\n\n13\\) but that's not part of an ordered list\n\n";
+ "```pseudocode\n#include \"foo.h\"\n\nblock {\n statement();\n}\n\n```\n\n";
+ QTest::newRow("escaped number and paren after single newline") <<
+ "<p>(The first sentence of this paragraph is a line, next paragraph has a number 13) but that's not part of an ordered list</p>" <<
+ "(The first sentence of this paragraph is a line, next paragraph has a number\n13\\) but that's not part of an ordered list\n\n";
+ QTest::newRow("escaped number and paren after double newline") <<
+ "<p>(The first sentence of this paragraph is a line, the next paragraph has a number</p>13) but that's not part of an ordered list" <<
+ "(The first sentence of this paragraph is a line, the next paragraph has a number\n\n13\\) but that's not part of an ordered list\n\n";
QTest::newRow("preformats with embedded backticks") <<
- "<pre>none `one` ``two``</pre><pre>```three``` ````four````</pre>plain" <<
- "``` none `one` ``two`` ```\n\n````` ```three``` ````four```` `````\n\nplain\n\n";
+ "<pre>none `one` ``two``</pre>plain<pre>```three``` ````four````</pre>plain" <<
+ "```\nnone `one` ``two``\n\n```\nplain\n\n```\n```three``` ````four````\n\n```\nplain\n\n";
+ QTest::newRow("list items with and without checkboxes") <<
+ "<ul><li>bullet</li><li class=\"unchecked\">unchecked item</li><li class=\"checked\">checked item</li></ul>" <<
+ "- bullet\n- [ ] unchecked item\n- [x] checked item\n";
+ QTest::newRow("table with backslash in cell") << // QTBUG-96051
+ "<table><tr><td>1011011 [</td><td>1011100 backslash \\</td></tr></table>" <<
+ "|1011011 [|1011100 backslash \\\\|";
+ // https://spec.commonmark.org/0.31.2/#example-12
+ // escaping punctuation is ok, but QTextMarkdownWriter currently doesn't do that (which is also ok)
+ QTest::newRow("punctuation") <<
+ R"(<p>!&quot;#$%&amp;'()*+,-./:;&lt;=&gt;?@[\]^_`{|}~</p>)" <<
+ R"(!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~)";
+ // https://spec.commonmark.org/0.31.2/#example-14
+ QTest::newRow("backslash asterisk no emphasis") << // QTBUG-122083
+ R"(\*no emphasis*)" <<
+ R"(\\\*no emphasis*)";
+ // https://spec.commonmark.org/0.31.2/#example-15
+ QTest::newRow("backslash before emphasis") <<
+ R"(\<em>emphasis</em>)" <<
+ R"(\\*emphasis*)";
+ // https://spec.commonmark.org/0.31.2/#example-20
+ QTest::newRow("backslash-asterisk in autolink") <<
+ R"(<p><a href="https://example.com?find=\\*">https://example.com?find=\*</a></p>)" <<
+ R"(<https://example.com?find=\\*>)";
+ // https://spec.commonmark.org/0.31.2/#example-24
+ QTest::newRow("plus in fenced code lang") <<
+ "<pre class=\"language-foo+bar\">foo</pre>" <<
+ "```foo+bar\nfoo\n```";
}
void tst_QTextMarkdownWriter::fromHtml()
{
- QFETCH(QString, expectedInput);
+ QFETCH(QString, input);
QFETCH(QString, expectedOutput);
- document->setHtml(expectedInput);
+ document->setHtml(input);
QString output = documentToUnixMarkdown();
#ifdef DEBUG_WRITE_OUTPUT
@@ -488,16 +881,140 @@ void tst_QTextMarkdownWriter::fromHtml()
}
#endif
+ output = output.trimmed();
+ expectedOutput = expectedOutput.trimmed();
+ if (output != expectedOutput && (isMainFontFixed() || isFixedFontProportional()))
+ QEXPECT_FAIL("", "fixed main font or proportional fixed font (QTBUG-103484)", Continue);
QCOMPARE(output, expectedOutput);
}
-QString tst_QTextMarkdownWriter::documentToUnixMarkdown()
+void tst_QTextMarkdownWriter::fromPlainTextAndBack_data()
{
- QString ret;
- QTextStream ts(&ret, QIODevice::WriteOnly);
- QTextMarkdownWriter writer(ts, QTextDocument::MarkdownDialectGitHub);
- writer.writeAll(document);
- return ret;
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<QString>("expectedMarkdown");
+
+ // tests to verify that fixing QTBUG-122083 is safe
+ QTest::newRow("single backslashes") <<
+ R"(\ again: \ not esc: \* \-\-\ \*abc*)" <<
+ R"(\\ again: \\ not esc: \\* \\-\\-\\ \\\*abc*)";
+ // https://spec.commonmark.org/0.31.2/#example-12
+ QTest::newRow("punctuation") <<
+ R"(!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~)" <<
+ R"(!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~)";
+ // https://spec.commonmark.org/0.31.2/#example-13
+ QTest::newRow("literal backslashes") <<
+ QString(uR"(\→\A\a\ \3\φ\«)") <<
+ "\\\\\u2192\\\\A\\\\a\\\\ \\\\3\\\\\u03C6\\\\\u00AB";
+ // https://spec.commonmark.org/0.31.2/#example-14
+ QTest::newRow("escape to avoid em") <<
+ R"(*not emphasized*)" <<
+ R"(\*not emphasized*)";
+ QTest::newRow("escape to avoid html") <<
+ R"(<br/> not a tag)" <<
+ R"(\<br/> not a tag)";
+ QTest::newRow("escape to avoid link") <<
+ R"([not a link](/foo))" <<
+ R"(\[not a link](/foo))";
+ QTest::newRow("escape to avoid mono") <<
+ R"(`not code`)" <<
+ R"(\`not code`)";
+ QTest::newRow("escape to avoid num list") <<
+ R"(1. not a list)" <<
+ R"(1\. not a list)";
+ QTest::newRow("escape to avoid list") <<
+ R"(* not a list)" <<
+ R"(\* not a list)";
+ QTest::newRow("escape to avoid heading") <<
+ R"(# not a heading)" <<
+ R"(\# not a heading)";
+ QTest::newRow("escape to avoid reflink") <<
+ R"([foo]: /url "not a reference")" <<
+ R"(\[foo]: /url "not a reference")";
+ QTest::newRow("escape to avoid entity") <<
+ R"(&ouml; not a character entity)" <<
+ R"(\&ouml; not a character entity)";
+ // end of tests to verify that fixing QTBUG-122083 is safe
+ // (it's ok to add unrelated plain-to-markdown-to-plaintext cases later)
+}
+
+void tst_QTextMarkdownWriter::fromPlainTextAndBack()
+{
+ QFETCH(QString, input);
+ QFETCH(QString, expectedMarkdown);
+
+ document->setPlainText(input);
+ QString output = documentToUnixMarkdown();
+
+#ifdef DEBUG_WRITE_OUTPUT
+ {
+ QFile out("/tmp/" + QLatin1String(QTest::currentDataTag()) + ".md");
+ out.open(QFile::WriteOnly);
+ out.write(output.toUtf8());
+ out.close();
+ }
+#endif
+
+ output = output.trimmed();
+ expectedMarkdown = expectedMarkdown.trimmed();
+ if (output != expectedMarkdown && (isMainFontFixed() || isFixedFontProportional()))
+ QSKIP("", "fixed main font or proportional fixed font (QTBUG-103484)");
+ QCOMPARE(output, expectedMarkdown);
+ QCOMPARE(document->toPlainText(), input);
+ document->setMarkdown(output);
+ QCOMPARE(document->toPlainText(), input);
+ if (document->blockCount() == 1)
+ QCOMPARE(document->firstBlock().text(), input);
+}
+
+void tst_QTextMarkdownWriter::escapeSpecialCharacters_data()
+{
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<QString>("expectedOutput");
+
+ QTest::newRow("backslash") << "foo \\ bar \\\\ baz \\" << "foo \\\\ bar \\\\\\\\ baz \\\\";
+ QTest::newRow("not emphasized") << "*normal* **normal too**" << "\\*normal* \\**normal too**";
+ QTest::newRow("not code") << "`normal` `normal too`" << "\\`normal` \\`normal too`";
+ QTest::newRow("code fence") << "```not a fence; ``` no risk here; ```not a fence" // TODO slightly inconsistent
+ << "\\```not a fence; ``` no risk here; \\```not a fence";
+ QTest::newRow("not html") << "<p>not a tag: <br/> nope</p>" << "\\<p>not a tag: \\<br/> nope\\</p>";
+ QTest::newRow("not a link") << "text [not a link](/foo)" << "text \\[not a link](/foo)";
+ QTest::newRow("not a circle") << "* polaris" << "\\* polaris";
+ QTest::newRow("not a square") << "+ groovy" << "\\+ groovy";
+ QTest::newRow("not a bullet") << "- stayin alive" << "\\- stayin alive";
+ QTest::newRow("arithmetic") << "1 + 2 - 3 * 4" << "1 + 2 - 3 * 4";
+ QTest::newRow("not a list") << "1. not a list" << "1\\. not a list";
+ QTest::newRow("not a list either") << "Jupiter and 10." << "Jupiter and 10.";
+ QTest::newRow("not a heading") << "# not a heading" << "\\# not a heading";
+ QTest::newRow("a non-entity") << "&ouml; not a character entity" << "\\&ouml; not a character entity";
+}
+
+/*! \internal
+ If the user types into a Qt-based editor plain text that the
+ markdown parser would misinterpret, escape it when we save to markdown
+ to clarify that it's plain text.
+ https://spec.commonmark.org/0.31.2/#backslash-escapes
+*/
+void tst_QTextMarkdownWriter::escapeSpecialCharacters() // QTBUG-96051, QTBUG-122083
+{
+ QFETCH(QString, input);
+ QFETCH(QString, expectedOutput);
+
+ document->setPlainText(input);
+ QString output = documentToUnixMarkdown();
+
+#ifdef DEBUG_WRITE_OUTPUT
+ {
+ QFile out("/tmp/" + QLatin1String(QTest::currentDataTag()) + ".md");
+ out.open(QFile::WriteOnly);
+ out.write(output.toUtf8());
+ out.close();
+ }
+#endif
+
+ output = output.trimmed();
+ if (output != expectedOutput && (isMainFontFixed() || isFixedFontProportional()))
+ QEXPECT_FAIL("", "fixed main font or proportional fixed font (QTBUG-103484)", Continue);
+ QCOMPARE(output, expectedOutput);
}
QTEST_MAIN(tst_QTextMarkdownWriter)
diff --git a/tests/auto/gui/text/qtextobject/CMakeLists.txt b/tests/auto/gui/text/qtextobject/CMakeLists.txt
index 07ea132de0..dd7aeae60e 100644
--- a/tests/auto/gui/text/qtextobject/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextobject/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtextobject.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextobject Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextobject LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtextobject
SOURCES
tst_qtextobject.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
@@ -15,6 +22,6 @@ qt_internal_add_test(tst_qtextobject
#####################################################################
qt_internal_extend_target(tst_qtextobject CONDITION TARGET Qt::Widgets
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
)
diff --git a/tests/auto/gui/text/qtextobject/tst_qtextobject.cpp b/tests/auto/gui/text/qtextobject/tst_qtextobject.cpp
index 2afca43915..e75dfcb270 100644
--- a/tests/auto/gui/text/qtextobject/tst_qtextobject.cpp
+++ b/tests/auto/gui/text/qtextobject/tst_qtextobject.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 <QTest>
diff --git a/tests/auto/gui/text/qtextodfwriter/CMakeLists.txt b/tests/auto/gui/text/qtextodfwriter/CMakeLists.txt
index 2a468b0c5e..d371fe2ee1 100644
--- a/tests/auto/gui/text/qtextodfwriter/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextodfwriter/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtextodfwriter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextodfwriter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextodfwriter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtextodfwriter
SOURCES
tst_qtextodfwriter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qtextodfwriter/tst_qtextodfwriter.cpp b/tests/auto/gui/text/qtextodfwriter/tst_qtextodfwriter.cpp
index e9e2eac268..6b56e7c727 100644
--- a/tests/auto/gui/text/qtextodfwriter/tst_qtextodfwriter.cpp
+++ b/tests/auto/gui/text/qtextodfwriter/tst_qtextodfwriter.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 <QTest>
#include <QTextDocument>
@@ -104,7 +79,7 @@ QString tst_QTextOdfWriter::getContentFromXml()
if (index > 0) {
index = stringContent.indexOf('>', index);
if (index > 0)
- ret = stringContent.mid(index+1, stringContent.length() - index - 10);
+ ret = stringContent.mid(index+1, stringContent.size() - index - 10);
}
return ret;
}
@@ -304,7 +279,7 @@ file.open(QIODevice::WriteOnly);
file.write(buffer->data());
file.close();
*/
- QVERIFY(buffer->data().length() > 80);
+ QVERIFY(buffer->data().size() > 80);
QCOMPARE(buffer->data()[0], 'P'); // its a zip :)
QCOMPARE(buffer->data()[1], 'K');
QString mimetype(buffer->data().mid(38, 39));
diff --git a/tests/auto/gui/text/qtextpiecetable/CMakeLists.txt b/tests/auto/gui/text/qtextpiecetable/CMakeLists.txt
index 49cfcfab6a..8bdf17890c 100644
--- a/tests/auto/gui/text/qtextpiecetable/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextpiecetable/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qtextpiecetable.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_qtextpiecetable LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(WIN32)
return()
@@ -15,11 +22,8 @@ qt_internal_add_test(tst_qtextpiecetable
SOURCES
../qtextdocument/common.h
tst_qtextpiecetable.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
)
-
-#### Keys ignored in scope 1:.:.:qtextpiecetable.pro:<TRUE>:
-# _REQUIREMENTS = "!win32" "qtConfig(private_tests)"
diff --git a/tests/auto/gui/text/qtextpiecetable/tst_qtextpiecetable.cpp b/tests/auto/gui/text/qtextpiecetable/tst_qtextpiecetable.cpp
index 32ab425ccf..f47d5dc0d6 100644
--- a/tests/auto/gui/text/qtextpiecetable/tst_qtextpiecetable.cpp
+++ b/tests/auto/gui/text/qtextpiecetable/tst_qtextpiecetable.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 <QTest>
@@ -124,21 +99,21 @@ void tst_QTextPieceTable::cleanup()
void tst_QTextPieceTable::insertion1()
{
- table->insert(0, "aacc", charFormatIndex);
+ table->insert(0, u"aacc", charFormatIndex);
QCOMPARE(table->plainText(), QString("aacc"));
- table->insert(2, "bb", charFormatIndex);
+ table->insert(2, u"bb", charFormatIndex);
QCOMPARE(table->plainText(), QString("aabbcc"));
- table->insert(1, "1", charFormatIndex);
+ table->insert(1, u"1", charFormatIndex);
QCOMPARE(table->plainText(), QString("a1abbcc"));
- table->insert(6, "d", charFormatIndex);
+ table->insert(6, u"d", charFormatIndex);
QCOMPARE(table->plainText(), QString("a1abbcdc"));
- table->insert(8, "z", charFormatIndex);
+ table->insert(8, u"z", charFormatIndex);
QCOMPARE(table->plainText(), QString("a1abbcdcz"));
}
void tst_QTextPieceTable::insertion2()
{
- table->insert(0, "bb", charFormatIndex);
+ table->insert(0, u"bb", charFormatIndex);
QCOMPARE(table->plainText(), QString("bb"));
}
@@ -201,21 +176,21 @@ void tst_QTextPieceTable::insertion5()
void tst_QTextPieceTable::removal1()
{
- table->insert(0, "abbccc", charFormatIndex);
+ table->insert(0, u"abbccc", charFormatIndex);
QCOMPARE(table->plainText(), QString("abbccc"));
table->remove(1, 2);
QCOMPARE(table->plainText(), QString("accc"));
- table->insert(1, "1", charFormatIndex);
+ table->insert(1, u"1", charFormatIndex);
QCOMPARE(table->plainText(), QString("a1ccc"));
table->remove(4, 1);
QCOMPARE(table->plainText(), QString("a1cc"));
- table->insert(4, "z", charFormatIndex);
+ table->insert(4, u"z", charFormatIndex);
QCOMPARE(table->plainText(), QString("a1ccz"));
}
void tst_QTextPieceTable::removal2()
{
- table->insert(0, "bb", charFormatIndex);
+ table->insert(0, u"bb", charFormatIndex);
QCOMPARE(table->plainText(), QString("bb"));
table->remove(0, 2);
QCOMPARE(table->plainText(), QString(""));
@@ -224,7 +199,7 @@ void tst_QTextPieceTable::removal2()
table->remove(0, 1);
QCOMPARE(table->plainText(), QString(""));
- table->insert(0, "bb", charFormatIndex);
+ table->insert(0, u"bb", charFormatIndex);
QCOMPARE(table->plainText(), QString("bb"));
table->insertBlock(1, blockFormatIndex, charFormatIndex);
QCOMPARE(table->plainText(), QString("b") + QString(QChar(QChar::ParagraphSeparator)) + QString("b"));
@@ -295,16 +270,16 @@ void tst_QTextPieceTable::removal4()
void tst_QTextPieceTable::undoRedo1()
{
- table->insert(0, "01234567", charFormatIndex);
- table->insert(0, "a", charFormatIndex);
- table->insert(1, "b", charFormatIndex);
+ table->insert(0, u"01234567", charFormatIndex);
+ table->insert(0, u"a", charFormatIndex);
+ table->insert(1, u"b", charFormatIndex);
QCOMPARE(table->plainText(), QString("ab01234567"));
table->undo();
QCOMPARE(table->plainText(), QString("01234567"));
table->redo();
QCOMPARE(table->plainText(), QString("ab01234567"));
table->undo();
- table->insert(1, "c", charFormatIndex);
+ table->insert(1, u"c", charFormatIndex);
QCOMPARE(table->plainText(), QString("0c1234567"));
table->undo();
QCOMPARE(table->plainText(), QString("01234567"));
@@ -314,8 +289,8 @@ void tst_QTextPieceTable::undoRedo1()
void tst_QTextPieceTable::undoRedo2()
{
- table->insert(0, "01", charFormatIndex);
- table->insert(1, "a", charFormatIndex);
+ table->insert(0, u"01", charFormatIndex);
+ table->insert(1, u"a", charFormatIndex);
QCOMPARE(table->plainText(), QString("0a1"));
table->undo();
QCOMPARE(table->plainText(), QString("01"));
@@ -329,8 +304,8 @@ void tst_QTextPieceTable::undoRedo2()
void tst_QTextPieceTable::undoRedo3()
{
- table->insert(0, "01", charFormatIndex);
- table->insert(2, "ab", charFormatIndex);
+ table->insert(0, u"01", charFormatIndex);
+ table->insert(2, u"ab", charFormatIndex);
table->remove(2, 1);
QCOMPARE(table->plainText(), QString("01b"));
table->undo();
@@ -345,8 +320,8 @@ void tst_QTextPieceTable::undoRedo3()
void tst_QTextPieceTable::undoRedo4()
{
- table->insert(0, "01", charFormatIndex);
- table->insert(0, "ab", charFormatIndex);
+ table->insert(0, u"01", charFormatIndex);
+ table->insert(0, u"ab", charFormatIndex);
table->remove(0, 1);
QCOMPARE(table->plainText(), QString("b01"));
table->undo();
@@ -366,7 +341,7 @@ void tst_QTextPieceTable::undoRedo4()
void tst_QTextPieceTable::undoRedo5()
{
table->beginEditBlock();
- table->insert(0, "01", charFormatIndex);
+ table->insert(0, u"01", charFormatIndex);
table->remove(1, 1);
table->endEditBlock();
QCOMPARE(table->plainText(), QString("0"));
@@ -409,8 +384,8 @@ void tst_QTextPieceTable::undoRedo6()
void tst_QTextPieceTable::undoRedo7()
{
- table->insert(0, "a", charFormatIndex);
- table->insert(1, "b", charFormatIndex);
+ table->insert(0, u"a", charFormatIndex);
+ table->insert(1, u"b", charFormatIndex);
QCOMPARE(table->plainText(), QString("ab"));
table->undo();
@@ -419,8 +394,8 @@ void tst_QTextPieceTable::undoRedo7()
void tst_QTextPieceTable::undoRedo8()
{
- table->insert(0, "a", charFormatIndex);
- table->insert(1, "b", charFormatIndex);
+ table->insert(0, u"a", charFormatIndex);
+ table->insert(1, u"b", charFormatIndex);
QCOMPARE(table->plainText(), QString("ab"));
table->remove(0, 1);
@@ -433,8 +408,8 @@ void tst_QTextPieceTable::undoRedo8()
void tst_QTextPieceTable::undoRedo9()
{
- table->insert(0, "a", charFormatIndex);
- table->insert(1, "b", charFormatIndex);
+ table->insert(0, u"a", charFormatIndex);
+ table->insert(1, u"b", charFormatIndex);
QCOMPARE(table->plainText(), QString("ab"));
table->remove(1, 1);
@@ -455,9 +430,9 @@ void tst_QTextPieceTable::undoRedo10()
QTextBlockFormat f;
int idx = table->formatCollection()->indexForFormat(f);
- table->insert(0, "a", cfIdx);
+ table->insert(0, u"a", cfIdx);
table->insertBlock(1, idx, cfIdx);
- table->insert(1, "b", cfIdx);
+ table->insert(1, u"b", cfIdx);
cf.setForeground(Qt::red);
int newCfIdx = table->formatCollection()->indexForFormat(cf);
@@ -510,7 +485,7 @@ void tst_QTextPieceTable::checkDocumentChanged()
// single insert
layout->expect(0, 0, 15);
- table->insert(0, "012345678901234", charFormatIndex);
+ table->insert(0, u"012345678901234", charFormatIndex);
QVERIFY(!layout->error);
// single remove
@@ -521,7 +496,7 @@ void tst_QTextPieceTable::checkDocumentChanged()
// symmetric insert/remove
layout->expect(0, 0, 0);
table->beginEditBlock();
- table->insert(0, "01234", charFormatIndex);
+ table->insert(0, u"01234", charFormatIndex);
table->remove(0, 5);
table->endEditBlock();
QVERIFY(!layout->error);
@@ -529,7 +504,7 @@ void tst_QTextPieceTable::checkDocumentChanged()
layout->expect(0, 5, 5);
table->beginEditBlock();
table->remove(0, 5);
- table->insert(0, "01234", charFormatIndex);
+ table->insert(0, u"01234", charFormatIndex);
table->endEditBlock();
QVERIFY(!layout->error);
@@ -537,13 +512,13 @@ void tst_QTextPieceTable::checkDocumentChanged()
layout->expect(0, 3, 5);
table->beginEditBlock();
table->remove(0, 3);
- table->insert(0, "01234", charFormatIndex);
+ table->insert(0, u"01234", charFormatIndex);
table->endEditBlock();
QVERIFY(!layout->error);
layout->expect(0, 0, 2);
table->beginEditBlock();
- table->insert(0, "01234", charFormatIndex);
+ table->insert(0, u"01234", charFormatIndex);
table->remove(0, 3);
table->endEditBlock();
QVERIFY(!layout->error);
@@ -551,14 +526,14 @@ void tst_QTextPieceTable::checkDocumentChanged()
// insert + remove inside insert block
layout->expect(0, 0, 2);
table->beginEditBlock();
- table->insert(0, "01234", charFormatIndex);
+ table->insert(0, u"01234", charFormatIndex);
table->remove(1, 3);
table->endEditBlock();
QVERIFY(!layout->error);
layout->expect(0, 0, 2);
table->beginEditBlock();
- table->insert(0, "01234", charFormatIndex);
+ table->insert(0, u"01234", charFormatIndex);
table->remove(2, 3);
table->endEditBlock();
QVERIFY(!layout->error);
@@ -566,42 +541,42 @@ void tst_QTextPieceTable::checkDocumentChanged()
// insert + remove partly outside
layout->expect(0, 1, 0);
table->beginEditBlock();
- table->insert(1, "0", charFormatIndex);
+ table->insert(1, u"0", charFormatIndex);
table->remove(0, 2);
table->endEditBlock();
QVERIFY(!layout->error);
layout->expect(0, 1, 1);
table->beginEditBlock();
- table->insert(1, "01", charFormatIndex);
+ table->insert(1, u"01", charFormatIndex);
table->remove(0, 2);
table->endEditBlock();
QVERIFY(!layout->error);
layout->expect(0, 1, 2);
table->beginEditBlock();
- table->insert(1, "012", charFormatIndex);
+ table->insert(1, u"012", charFormatIndex);
table->remove(0, 2);
table->endEditBlock();
QVERIFY(!layout->error);
layout->expect(1, 1, 0);
table->beginEditBlock();
- table->insert(1, "0", charFormatIndex);
+ table->insert(1, u"0", charFormatIndex);
table->remove(1, 2);
table->endEditBlock();
QVERIFY(!layout->error);
layout->expect(1, 1, 1);
table->beginEditBlock();
- table->insert(1, "01", charFormatIndex);
+ table->insert(1, u"01", charFormatIndex);
table->remove(2, 2);
table->endEditBlock();
QVERIFY(!layout->error);
layout->expect(1, 1, 2);
table->beginEditBlock();
- table->insert(1, "012", charFormatIndex);
+ table->insert(1, u"012", charFormatIndex);
table->remove(3, 2);
table->endEditBlock();
QVERIFY(!layout->error);
@@ -609,14 +584,14 @@ void tst_QTextPieceTable::checkDocumentChanged()
// insert + remove non overlapping
layout->expect(0, 1, 1);
table->beginEditBlock();
- table->insert(1, "0", charFormatIndex);
+ table->insert(1, u"0", charFormatIndex);
table->remove(0, 1);
table->endEditBlock();
QVERIFY(!layout->error);
layout->expect(0, 2, 2);
table->beginEditBlock();
- table->insert(2, "1", charFormatIndex);
+ table->insert(2, u"1", charFormatIndex);
table->remove(0, 1);
table->endEditBlock();
QVERIFY(!layout->error);
@@ -624,14 +599,14 @@ void tst_QTextPieceTable::checkDocumentChanged()
layout->expect(0, 2, 2);
table->beginEditBlock();
table->remove(0, 1);
- table->insert(1, "0", charFormatIndex);
+ table->insert(1, u"0", charFormatIndex);
table->endEditBlock();
QVERIFY(!layout->error);
layout->expect(0, 3, 3);
table->beginEditBlock();
table->remove(0, 1);
- table->insert(2, "1", charFormatIndex);
+ table->insert(2, u"1", charFormatIndex);
table->endEditBlock();
@@ -656,9 +631,9 @@ void tst_QTextPieceTable::checkDocumentChanged2()
layout->expect(0, 0, 12);
table->beginEditBlock();
- table->insert(0, "0123", charFormatIndex);
- table->insert(4, "4567", anotherCharFormatIndex);
- table->insert(8, "8901", charFormatIndex);
+ table->insert(0, u"0123", charFormatIndex);
+ table->insert(4, u"4567", anotherCharFormatIndex);
+ table->insert(8, u"8901", charFormatIndex);
table->endEditBlock();
QVERIFY(!layout->error);
@@ -721,7 +696,7 @@ void tst_QTextPieceTable::blockInsertion2()
int pos = 0;
table->insertBlock(pos, blockFormatIndex, charFormatIndex);
pos += 1;
- table->insert(pos, "a", charFormatIndex);
+ table->insert(pos, u"a", charFormatIndex);
pos += 1;
pos -= 1;
@@ -744,11 +719,11 @@ void tst_QTextPieceTable::blockRemoval1()
int idx1 = table->formatCollection()->indexForFormat(fmt1);
int idx2 = table->formatCollection()->indexForFormat(fmt2);
- table->insert(0, "0123", charFormatIndex);
+ table->insert(0, u"0123", charFormatIndex);
table->insertBlock(4, idx1, charFormatIndex);
- table->insert(5, "5678", charFormatIndex);
+ table->insert(5, u"5678", charFormatIndex);
table->insertBlock(9, idx2, charFormatIndex);
- table->insert(10, "0123", charFormatIndex);
+ table->insert(10, u"0123", charFormatIndex);
QCOMPARE(table->blocksFind(0).blockFormat(), QTextBlockFormat());
QCOMPARE(table->blocksFind(4).blockFormat(), QTextBlockFormat());
@@ -792,11 +767,11 @@ void tst_QTextPieceTable::blockRemoval2()
int idx1 = table->formatCollection()->indexForFormat(fmt1);
int idx2 = table->formatCollection()->indexForFormat(fmt2);
- table->insert(0, "0123", charFormatIndex);
+ table->insert(0, u"0123", charFormatIndex);
table->insertBlock(4, idx1, charFormatIndex);
- table->insert(5, "5678", charFormatIndex);
+ table->insert(5, u"5678", charFormatIndex);
table->insertBlock(9, idx2, charFormatIndex);
- table->insert(10, "0123", charFormatIndex);
+ table->insert(10, u"0123", charFormatIndex);
QCOMPARE(table->blocksFind(0).blockFormat(), QTextBlockFormat());
QCOMPARE(table->blocksFind(4).blockFormat(), QTextBlockFormat());
@@ -838,11 +813,11 @@ void tst_QTextPieceTable::blockRemoval3()
int idx1 = table->formatCollection()->indexForFormat(fmt1);
int idx2 = table->formatCollection()->indexForFormat(fmt2);
- table->insert(0, "0123", charFormatIndex);
+ table->insert(0, u"0123", charFormatIndex);
table->insertBlock(4, idx1, charFormatIndex);
- table->insert(5, "5678", charFormatIndex);
+ table->insert(5, u"5678", charFormatIndex);
table->insertBlock(9, idx2, charFormatIndex);
- table->insert(10, "0123", charFormatIndex);
+ table->insert(10, u"0123", charFormatIndex);
QCOMPARE(table->blocksFind(0).blockFormat(), QTextBlockFormat());
QCOMPARE(table->blocksFind(4).blockFormat(), QTextBlockFormat());
@@ -935,11 +910,11 @@ void tst_QTextPieceTable::blockRemoval5()
int idx1 = table->formatCollection()->indexForFormat(fmt1);
int idx2 = table->formatCollection()->indexForFormat(fmt2);
- table->insert(0, "0123", charFormatIndex);
+ table->insert(0, u"0123", charFormatIndex);
table->insertBlock(4, idx1, charFormatIndex);
- table->insert(5, "5678", charFormatIndex);
+ table->insert(5, u"5678", charFormatIndex);
table->insertBlock(9, idx2, charFormatIndex);
- table->insert(10, "0123", charFormatIndex);
+ table->insert(10, u"0123", charFormatIndex);
QCOMPARE(table->blocksFind(0).blockFormat(), QTextBlockFormat());
QCOMPARE(table->blocksFind(4).blockFormat(), QTextBlockFormat());
@@ -987,7 +962,7 @@ void tst_QTextPieceTable::checkBlockSeparation()
void tst_QTextPieceTable::checkFrames1()
{
QTextFrameFormat ffmt;
- table->insert(0, "Hello", charFormatIndex);
+ table->insert(0, u"Hello", charFormatIndex);
QPointer<QTextFrame> frame = table->insertFrame(1, 3, ffmt);
QTextFrame *root = table->rootFrame();
@@ -996,7 +971,7 @@ void tst_QTextPieceTable::checkFrames1()
QVERIFY(root);
QVERIFY(!root->parentFrame());
- QCOMPARE(root->childFrames().count(), 1);
+ QCOMPARE(root->childFrames().size(), 1);
QVERIFY(frame->format() == ffmt);
QCOMPARE(frame->firstPosition(), 2);
QCOMPARE(frame->lastPosition(), 4);
@@ -1004,10 +979,10 @@ void tst_QTextPieceTable::checkFrames1()
QPointer<QTextFrame> frame2 = table->insertFrame(2, 3, ffmt);
- QCOMPARE(root->childFrames().count(), 1);
+ QCOMPARE(root->childFrames().size(), 1);
QCOMPARE(root->childFrames().at(0), frame.data());
- QCOMPARE(frame->childFrames().count(), 1);
- QCOMPARE(frame2->childFrames().count(), 0);
+ QCOMPARE(frame->childFrames().size(), 1);
+ QCOMPARE(frame2->childFrames().size(), 0);
QCOMPARE(frame2->parentFrame(), frame.data());
QCOMPARE(frame2->firstPosition(), 3);
QCOMPARE(frame2->lastPosition(), 4);
@@ -1018,10 +993,10 @@ void tst_QTextPieceTable::checkFrames1()
table->removeFrame(frame);
- QCOMPARE(root->childFrames().count(), 1);
+ QCOMPARE(root->childFrames().size(), 1);
QCOMPARE(root->childFrames().at(0), frame2.data());
QVERIFY(!frame);
- QCOMPARE(frame2->childFrames().count(), 0);
+ QCOMPARE(frame2->childFrames().size(), 0);
QCOMPARE(frame2->parentFrame(), root);
QCOMPARE(frame2->firstPosition(), 2);
QCOMPARE(frame2->lastPosition(), 3);
@@ -1030,11 +1005,11 @@ void tst_QTextPieceTable::checkFrames1()
frame = table->frameAt(2);
- QCOMPARE(root->childFrames().count(), 1);
+ QCOMPARE(root->childFrames().size(), 1);
QCOMPARE(root->childFrames().at(0), frame.data());
- QCOMPARE(frame->childFrames().count(), 1);
+ QCOMPARE(frame->childFrames().size(), 1);
QCOMPARE(frame->childFrames().at(0), frame2.data());
- QCOMPARE(frame2->childFrames().count(), 0);
+ QCOMPARE(frame2->childFrames().size(), 0);
QCOMPARE(frame2->parentFrame(), frame.data());
QCOMPARE(frame2->firstPosition(), 3);
QCOMPARE(frame2->lastPosition(), 4);
@@ -1044,9 +1019,9 @@ void tst_QTextPieceTable::checkFrames1()
table->undo();
- QCOMPARE(root->childFrames().count(), 1);
+ QCOMPARE(root->childFrames().size(), 1);
QCOMPARE(root->childFrames().at(0), frame.data());
- QCOMPARE(frame->childFrames().count(), 0);
+ QCOMPARE(frame->childFrames().size(), 0);
QVERIFY(!frame2);
QCOMPARE(frame->firstPosition(), 2);
@@ -1056,7 +1031,7 @@ void tst_QTextPieceTable::checkFrames1()
void tst_QTextPieceTable::removeFrameDirect()
{
QTextFrameFormat ffmt;
- table->insert(0, "Hello", charFormatIndex);
+ table->insert(0, u"Hello", charFormatIndex);
QTextFrame *frame = table->insertFrame(1, 5, ffmt);
@@ -1090,7 +1065,7 @@ void tst_QTextPieceTable::removeWithChildFrame()
In this case frameAt(2) != frameAt(6), so the assertion in remove() needed an adjustement.
*/
QTextFrameFormat ffmt;
- table->insert(0, "Hello World", charFormatIndex);
+ table->insert(0, u"Hello World", charFormatIndex);
QTextFrame *frame = table->insertFrame(1, 6, ffmt);
QTextFrame *childFrame = table->insertFrame(3, 5, ffmt);
@@ -1120,7 +1095,7 @@ void tst_QTextPieceTable::clearWithFrames()
The idea is to remove from [1] until [7].
*/
QTextFrameFormat ffmt;
- table->insert(0, "Hello World", charFormatIndex);
+ table->insert(0, u"Hello World", charFormatIndex);
QTextFrame *firstFrame = table->insertFrame(1, 2, ffmt);
QTextFrame *secondFrame = table->insertFrame(4, 6, ffmt);
diff --git a/tests/auto/gui/text/qtextscriptengine/CMakeLists.txt b/tests/auto/gui/text/qtextscriptengine/CMakeLists.txt
index 01d418ebd4..9bb9e4c13b 100644
--- a/tests/auto/gui/text/qtextscriptengine/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextscriptengine/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtextscriptengine.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextscriptengine Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextscriptengine LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtextscriptengine
SOURCES
tst_qtextscriptengine.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/gui/text/qtextscriptengine/generate/CMakeLists.txt b/tests/auto/gui/text/qtextscriptengine/generate/CMakeLists.txt
index d3b6b1dc6d..db284b2e1c 100644
--- a/tests/auto/gui/text/qtextscriptengine/generate/CMakeLists.txt
+++ b/tests/auto/gui/text/qtextscriptengine/generate/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from generate.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## generate Binary:
@@ -9,9 +10,8 @@ qt_internal_add_executable(generate
SOURCES
main.cpp
INCLUDE_DIRECTORIES
- .
/usr/include/freetype2
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
)
diff --git a/tests/auto/gui/text/qtextscriptengine/generate/main.cpp b/tests/auto/gui/text/qtextscriptengine/generate/main.cpp
index 708864521a..5082c2b406 100644
--- a/tests/auto/gui/text/qtextscriptengine/generate/main.cpp
+++ b/tests/auto/gui/text/qtextscriptengine/generate/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 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/gui/text/qtextscriptengine/tst_qtextscriptengine.cpp b/tests/auto/gui/text/qtextscriptengine/tst_qtextscriptengine.cpp
index b3a33c2d92..975658005e 100644
--- a/tests/auto/gui/text/qtextscriptengine/tst_qtextscriptengine.cpp
+++ b/tests/auto/gui/text/qtextscriptengine/tst_qtextscriptengine.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 <QTest>
#include <private/qfontengine_p.h>
@@ -1119,11 +1094,12 @@ void tst_QTextScriptEngine::combiningMarks_qtbug15675_data()
bool hasTests = false;
- QStringList families;
- families << QStringLiteral("Monaco");
- families << QStringLiteral("DejaVu Sans Mono");
+ const QString families[] = {
+ QStringLiteral("Monaco"),
+ QStringLiteral("DejaVu Sans Mono"),
+ };
- foreach (const QString &family, families) {
+ for (const QString &family : families) {
QFont font(family);
font.setStyleStrategy(QFont::NoFontMerging);
if (QFontInfo(font).family() != family)
diff --git a/tests/auto/gui/text/qtexttable/CMakeLists.txt b/tests/auto/gui/text/qtexttable/CMakeLists.txt
index 94d33d3530..e83a38f087 100644
--- a/tests/auto/gui/text/qtexttable/CMakeLists.txt
+++ b/tests/auto/gui/text/qtexttable/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtexttable.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtexttable Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtexttable LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtexttable
SOURCES
tst_qtexttable.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -16,6 +23,6 @@ qt_internal_add_test(tst_qtexttable
#####################################################################
qt_internal_extend_target(tst_qtexttable CONDITION TARGET Qt::Widgets
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
)
diff --git a/tests/auto/gui/text/qtexttable/tst_qtexttable.cpp b/tests/auto/gui/text/qtexttable/tst_qtexttable.cpp
index 8575da04bb..d0e1e1cd74 100644
--- a/tests/auto/gui/text/qtexttable/tst_qtexttable.cpp
+++ b/tests/auto/gui/text/qtexttable/tst_qtexttable.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 <QTest>
@@ -100,6 +75,8 @@ private slots:
#endif
void checkBorderAttributes_data();
void checkBorderAttributes();
+ void checkTableBorderAttributes_data();
+ void checkTableBorderAttributes();
#ifndef QT_NO_WIDGETS
void columnWidthWithSpans();
@@ -146,7 +123,7 @@ void tst_QTextTable::variousTableModifications()
QTextTableFormat tableFmt;
QTextTable *tab = cursor.insertTable(2, 2, tableFmt);
- QCOMPARE(doc->toPlainText().length(), 5);
+ QCOMPARE(doc->toPlainText().size(), 5);
QCOMPARE(tab, cursor.currentTable());
QCOMPARE(tab->columns(), 2);
QCOMPARE(tab->rows(), 2);
@@ -201,14 +178,14 @@ void tst_QTextTable::variousTableModifications()
cursor.movePosition(QTextCursor::NextBlock);
QCOMPARE(cursor.position(), 1);
cursor.deleteChar();
- QCOMPARE(doc->toPlainText().length(), 5);
+ QCOMPARE(doc->toPlainText().size(), 5);
cursor.movePosition(QTextCursor::NextBlock);
QCOMPARE(cursor.position(), 2);
cursor.deleteChar();
- QCOMPARE(doc->toPlainText().length(), 5);
+ QCOMPARE(doc->toPlainText().size(), 5);
cursor.deletePreviousChar();
QCOMPARE(cursor.position(), 2);
- QCOMPARE(doc->toPlainText().length(), 5);
+ QCOMPARE(doc->toPlainText().size(), 5);
QTextTable *table = cursor.currentTable();
QCOMPARE(table->rows(), 2);
@@ -217,16 +194,16 @@ void tst_QTextTable::variousTableModifications()
table->insertRows(2, 1);
QCOMPARE(table->rows(), 3);
QCOMPARE(table->columns(), 2);
- QCOMPARE(doc->toPlainText().length(), 7);
+ QCOMPARE(doc->toPlainText().size(), 7);
table->insertColumns(2, 2);
QCOMPARE(table->rows(), 3);
QCOMPARE(table->columns(), 4);
- QCOMPARE(doc->toPlainText().length(), 13);
+ QCOMPARE(doc->toPlainText().size(), 13);
table->resize(4, 5);
QCOMPARE(table->rows(), 4);
QCOMPARE(table->columns(), 5);
- QCOMPARE(doc->toPlainText().length(), 21);
+ QCOMPARE(doc->toPlainText().size(), 21);
}
void tst_QTextTable::tableShrinking()
@@ -234,7 +211,7 @@ void tst_QTextTable::tableShrinking()
QTextTableFormat tableFmt;
cursor.insertTable(3, 4, tableFmt);
- QCOMPARE(doc->toPlainText().length(), 13);
+ QCOMPARE(doc->toPlainText().size(), 13);
QTextTable *table = cursor.currentTable();
QCOMPARE(table->rows(), 3);
@@ -243,16 +220,16 @@ void tst_QTextTable::tableShrinking()
table->removeRows(1, 1);
QCOMPARE(table->rows(), 2);
QCOMPARE(table->columns(), 4);
- QCOMPARE(doc->toPlainText().length(), 9);
+ QCOMPARE(doc->toPlainText().size(), 9);
table->removeColumns(1, 2);
QCOMPARE(table->rows(), 2);
QCOMPARE(table->columns(), 2);
- QCOMPARE(doc->toPlainText().length(), 5);
+ QCOMPARE(doc->toPlainText().size(), 5);
table->resize(1, 1);
QCOMPARE(table->rows(), 1);
QCOMPARE(table->columns(), 1);
- QCOMPARE(doc->toPlainText().length(), 2);
+ QCOMPARE(doc->toPlainText().size(), 2);
}
void tst_QTextTable::spans()
@@ -277,7 +254,7 @@ void tst_QTextTable::variousModifications2()
QTextTableFormat tableFmt;
cursor.insertTable(2, 5, tableFmt);
- QCOMPARE(doc->toPlainText().length(), 11);
+ QCOMPARE(doc->toPlainText().size(), 11);
QTextTable *table = cursor.currentTable();
QCOMPARE(cursor.position(), 1);
QCOMPARE(table->rows(), 2);
@@ -1173,8 +1150,8 @@ void tst_QTextTable::QTBUG31330_renderBackground()
doc.print(&paintDevice);
QVERIFY(paintDevice.pages >= 2);
- QCOMPARE(engine.rects.count(), paintDevice.pages);
- for (int i = 0; i < engine.rects.count(); ++i) {
+ QCOMPARE(engine.rects.size(), paintDevice.pages);
+ for (int i = 0; i < engine.rects.size(); ++i) {
QRectF rect = engine.rects[i];
QVERIFY(rect.top() > 0);
QVERIFY(rect.bottom() < 1000);
@@ -1286,6 +1263,72 @@ void tst_QTextTable::checkBorderAttributes()
}
}
+void tst_QTextTable::checkTableBorderAttributes_data()
+{
+ QTest::addColumn<QString>("html");
+ QTest::addColumn<qreal>("tableBorderWidth");
+ QTest::addColumn<QTextFrameFormat::BorderStyle>("tableBorderStyle");
+ QTest::addColumn<QBrush>("tableBorderBrush");
+
+ const QString tableHtmlStart = QStringLiteral("<html><head><style>");
+ const QString tableHtmlEnd1 = QStringLiteral("</style></head><body>"
+ "<table><tr><td>One</td><td>Two</td></tr></table>"
+ "</body></html>");
+ const QString tableHtmlEnd2 = QStringLiteral("</style></head><body>"
+ "<table border=10><tr><td>One</td><td>Two</td></tr></table>"
+ "</body></html>");
+
+ QTest::newRow("table-border-attributes-shorthand")
+ << QString("%1"
+ "table {"
+ "border: 2px solid red;"
+ "}"
+ "%2").arg(tableHtmlStart).arg(tableHtmlEnd1)
+ << 2.0 << QTextFrameFormat::BorderStyle_Solid << QBrush(Qt::red);
+
+ QTest::newRow("table-border-attributes-explicit")
+ << QString("%1"
+ "table {"
+ "border-width: 2px;"
+ "border-color: red;"
+ "border-style: dashed;"
+ "}"
+ "%2").arg(tableHtmlStart).arg(tableHtmlEnd1)
+ << 2.0 << QTextFrameFormat::BorderStyle_Dashed << QBrush(Qt::red);
+
+ QTest::newRow("table-border-override")
+ << QString("%1"
+ "table {"
+ "border: 2px solid red;"
+ "}"
+ "%2").arg(tableHtmlStart).arg(tableHtmlEnd2)
+ << 2.0 << QTextFrameFormat::BorderStyle_Solid << QBrush(Qt::red);
+
+ QTest::newRow("table-border-default")
+ << QString("%1"
+ "%2").arg(tableHtmlStart).arg(tableHtmlEnd2)
+ << 10.0 << QTextFrameFormat::BorderStyle_Outset << QBrush(Qt::darkGray);
+}
+
+void tst_QTextTable::checkTableBorderAttributes()
+{
+ QFETCH(QString, html);
+ QFETCH(qreal, tableBorderWidth);
+ QFETCH(QTextFrameFormat::BorderStyle, tableBorderStyle);
+ QFETCH(QBrush, tableBorderBrush);
+
+ QTextDocument doc;
+ doc.setHtml(html);
+ QTextCursor cursor(doc.firstBlock());
+ cursor.movePosition(QTextCursor::Right);
+
+ QTextTable *currentTable = cursor.currentTable();
+ QVERIFY(currentTable);
+ QCOMPARE(currentTable->format().border(), tableBorderWidth);
+ QCOMPARE(currentTable->format().borderStyle(), tableBorderStyle);
+ QCOMPARE(currentTable->format().borderBrush(), tableBorderBrush);
+}
+
#ifndef QT_NO_WIDGETS
void tst_QTextTable::columnWidthWithSpans()
{
diff --git a/tests/auto/gui/text/qzip/CMakeLists.txt b/tests/auto/gui/text/qzip/CMakeLists.txt
deleted file mode 100644
index 7240a611d2..0000000000
--- a/tests/auto/gui/text/qzip/CMakeLists.txt
+++ /dev/null
@@ -1,35 +0,0 @@
-# Generated from qzip.pro.
-
-#####################################################################
-## tst_qzip Test:
-#####################################################################
-
-# Collect test data
-list(APPEND test_data "testdata")
-
-qt_internal_add_test(tst_qzip
- SOURCES
- tst_qzip.cpp
- PUBLIC_LIBRARIES
- Qt::Gui
- Qt::GuiPrivate
- TESTDATA ${test_data}
-)
-
-## Scopes:
-#####################################################################
-
-if(ANDROID)
- # Resources:
- set(testdata_resource_files
- "testdata/symlink.zip"
- "testdata/test.zip"
- )
-
- qt_internal_add_resource(tst_qzip "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
- )
-endif()
diff --git a/tests/auto/gui/util/CMakeLists.txt b/tests/auto/gui/util/CMakeLists.txt
index 048e18360c..830a9ff2f0 100644
--- a/tests/auto/gui/util/CMakeLists.txt
+++ b/tests/auto/gui/util/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from util.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qdesktopservices)
add_subdirectory(qdoublevalidator)
diff --git a/tests/auto/gui/util/qdesktopservices/CMakeLists.txt b/tests/auto/gui/util/qdesktopservices/CMakeLists.txt
index 475a3405c0..64a1aaa930 100644
--- a/tests/auto/gui/util/qdesktopservices/CMakeLists.txt
+++ b/tests/auto/gui/util/qdesktopservices/CMakeLists.txt
@@ -1,14 +1,19 @@
-# Generated from qdesktopservices.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdesktopservices Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdesktopservices LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdesktopservices
SOURCES
tst_qdesktopservices.cpp
- DEFINES
- # QT_DISABLE_DEPRECATED_BEFORE=0 # special case
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp b/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp
index 7446f8ed9f..e08b299209 100644
--- a/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp
+++ b/tests/auto/gui/util/qdesktopservices/tst_qdesktopservices.cpp
@@ -1,36 +1,13 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <qdesktopservices.h>
#include <qregularexpression.h>
+using namespace Qt::StringLiterals;
+
class tst_qdesktopservices : public QObject
{
Q_OBJECT
@@ -65,6 +42,10 @@ public slots:
}
};
+#if QT_VERSION < QT_VERSION_CHECK(6, 6, 0)
+# define CAN_IMPLICITLY_UNSET
+#endif
+
void tst_qdesktopservices::handlers()
{
MyUrlHandler fooHandler;
@@ -72,6 +53,12 @@ void tst_qdesktopservices::handlers()
QDesktopServices::setUrlHandler(QString("foo"), &fooHandler, "handle");
QDesktopServices::setUrlHandler(QString("bar"), &barHandler, "handle");
+#ifndef CAN_IMPLICITLY_UNSET
+ const auto unsetHandlers = qScopeGuard([] {
+ QDesktopServices::unsetUrlHandler(u"bar"_s);
+ QDesktopServices::unsetUrlHandler(u"foo"_s);
+ });
+#endif
QUrl fooUrl("foo://blub/meh");
QUrl barUrl("bar://hmm/hmmmm");
@@ -81,6 +68,15 @@ void tst_qdesktopservices::handlers()
QCOMPARE(fooHandler.lastHandledUrl.toString(), fooUrl.toString());
QCOMPARE(barHandler.lastHandledUrl.toString(), barUrl.toString());
+
+#ifdef CAN_IMPLICITLY_UNSET
+ for (int i = 0; i < 2; ++i)
+ QTest::ignoreMessage(QtWarningMsg,
+ "Please call QDesktopServices::unsetUrlHandler() before destroying a "
+ "registered URL handler object.\n"
+ "Support for destroying a registered URL handler object is deprecated, "
+ "and will be removed in Qt 6.6.");
+#endif
}
QTEST_MAIN(tst_qdesktopservices)
diff --git a/tests/auto/gui/util/qdoublevalidator/CMakeLists.txt b/tests/auto/gui/util/qdoublevalidator/CMakeLists.txt
index 27996300d7..f79fe8b00c 100644
--- a/tests/auto/gui/util/qdoublevalidator/CMakeLists.txt
+++ b/tests/auto/gui/util/qdoublevalidator/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdoublevalidator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdoublevalidator Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdoublevalidator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdoublevalidator
SOURCES
tst_qdoublevalidator.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/util/qdoublevalidator/tst_qdoublevalidator.cpp b/tests/auto/gui/util/qdoublevalidator/tst_qdoublevalidator.cpp
index 77d52682f6..b44975ea0b 100644
--- a/tests/auto/gui/util/qdoublevalidator/tst_qdoublevalidator.cpp
+++ b/tests/auto/gui/util/qdoublevalidator/tst_qdoublevalidator.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 <QTest>
@@ -168,6 +143,7 @@ void tst_QDoubleValidator::validate_data()
QTest::newRow("data56") << "C" << 1229.0 << 1231.0 << -1 << QString("123E+") << ITM << INV;
QTest::newRow("data57") << "C" << 1229.0 << 1231.0 << -1 << QString("123E+1") << ACC << INV;
QTest::newRow("data58") << "C" << 0.0 << 100.0 << -1 << QString("0.0") << ACC << ACC;
+ QTest::newRow("overlong") << "C" << 0.0 << 99.9 << 2 << QString("1234.0") << ITM << INV;
QTest::newRow("data_de0") << "de" << 0.0 << 100.0 << 1 << QString("50,0") << ACC << ACC;
QTest::newRow("data_de1") << "de" << 00.0 << 100.0 << 1 << QString("500,0") << ITM << ITM;
@@ -335,74 +311,74 @@ void tst_QDoubleValidator::notifySignals()
QCOMPARE(dv.decimals(), 10);
dv.setTop(0.8);
- QCOMPARE(topSpy.count(), 1);
- QCOMPARE(changedSpy.count(), 1);
+ QCOMPARE(topSpy.size(), 1);
+ QCOMPARE(changedSpy.size(), 1);
QCOMPARE(dv.top(), 0.8);
dv.setBottom(0.2);
- QCOMPARE(bottomSpy.count(), 1);
- QCOMPARE(changedSpy.count(), 2);
+ QCOMPARE(bottomSpy.size(), 1);
+ QCOMPARE(changedSpy.size(), 2);
QCOMPARE(dv.bottom(), 0.2);
dv.setRange(0.2, 0.7);
- QCOMPARE(topSpy.count(), 2);
- QCOMPARE(bottomSpy.count(), 1);
- QCOMPARE(decSpy.count(), 0);
- QCOMPARE(changedSpy.count(), 3);
+ QCOMPARE(topSpy.size(), 2);
+ QCOMPARE(bottomSpy.size(), 1);
+ QCOMPARE(decSpy.size(), 0);
+ QCOMPARE(changedSpy.size(), 3);
QCOMPARE(dv.bottom(), 0.2);
QCOMPARE(dv.top(), 0.7);
QCOMPARE(dv.decimals(), 10);
dv.setRange(0.3, 0.7);
- QCOMPARE(topSpy.count(), 2);
- QCOMPARE(bottomSpy.count(), 2);
- QCOMPARE(changedSpy.count(), 4);
+ QCOMPARE(topSpy.size(), 2);
+ QCOMPARE(bottomSpy.size(), 2);
+ QCOMPARE(changedSpy.size(), 4);
QCOMPARE(dv.bottom(), 0.3);
QCOMPARE(dv.top(), 0.7);
QCOMPARE(dv.decimals(), 10);
dv.setRange(0.4, 0.6);
- QCOMPARE(topSpy.count(), 3);
- QCOMPARE(bottomSpy.count(), 3);
- QCOMPARE(changedSpy.count(), 5);
+ QCOMPARE(topSpy.size(), 3);
+ QCOMPARE(bottomSpy.size(), 3);
+ QCOMPARE(changedSpy.size(), 5);
QCOMPARE(dv.bottom(), 0.4);
QCOMPARE(dv.top(), 0.6);
QCOMPARE(dv.decimals(), 10);
dv.setDecimals(5);
- QCOMPARE(decSpy.count(), 1);
- QCOMPARE(changedSpy.count(), 6);
+ QCOMPARE(decSpy.size(), 1);
+ QCOMPARE(changedSpy.size(), 6);
QCOMPARE(dv.decimals(), 5);
dv.setRange(0.4, 0.6, 100);
- QCOMPARE(topSpy.count(), 3);
- QCOMPARE(bottomSpy.count(), 3);
- QCOMPARE(decSpy.count(), 2);
- QCOMPARE(changedSpy.count(), 7);
+ QCOMPARE(topSpy.size(), 3);
+ QCOMPARE(bottomSpy.size(), 3);
+ QCOMPARE(decSpy.size(), 2);
+ QCOMPARE(changedSpy.size(), 7);
QCOMPARE(dv.bottom(), 0.4);
QCOMPARE(dv.top(), 0.6);
QCOMPARE(dv.decimals(), 100);
dv.setNotation(QDoubleValidator::StandardNotation);
- QCOMPARE(notSpy.count(), 1);
- QCOMPARE(changedSpy.count(), 8);
+ QCOMPARE(notSpy.size(), 1);
+ QCOMPARE(changedSpy.size(), 8);
QCOMPARE(dv.notation(), QDoubleValidator::StandardNotation);
dv.setRange(dv.bottom(), dv.top(), dv.decimals());
- QCOMPARE(topSpy.count(), 3);
- QCOMPARE(bottomSpy.count(), 3);
- QCOMPARE(decSpy.count(), 2);
- QCOMPARE(changedSpy.count(), 8);
+ QCOMPARE(topSpy.size(), 3);
+ QCOMPARE(bottomSpy.size(), 3);
+ QCOMPARE(decSpy.size(), 2);
+ QCOMPARE(changedSpy.size(), 8);
dv.setNotation(dv.notation());
- QCOMPARE(notSpy.count(), 1);
- QCOMPARE(changedSpy.count(), 8);
+ QCOMPARE(notSpy.size(), 1);
+ QCOMPARE(changedSpy.size(), 8);
dv.setLocale(QLocale("C"));
- QCOMPARE(changedSpy.count(), 8);
+ QCOMPARE(changedSpy.size(), 8);
dv.setLocale(QLocale("en"));
- QCOMPARE(changedSpy.count(), 9);
+ QCOMPARE(changedSpy.size(), 9);
}
void tst_QDoubleValidator::fixup()
@@ -441,7 +417,7 @@ void tst_QDoubleValidator::fixup_data()
QTest::newRow("C standard with invalid digit grouping")
<< "C" << QDoubleValidator::StandardNotation << -1 << "1,234,5.678"
<< "12345.678";
- QTest::newRow("C standard with invalid number of decimals")
+ QTest::newRow("C standard with invalid group size")
<< "C" << QDoubleValidator::StandardNotation << 2 << "-12,34.678"
<< "-1234.68";
QTest::newRow("C standard truncate decimals")
@@ -470,7 +446,7 @@ void tst_QDoubleValidator::fixup_data()
QTest::newRow("C scientific with invalid digit grouping")
<< "C" << QDoubleValidator::ScientificNotation << -1 << "12,34.98765e2"
<< "1.23498765e+05";
- QTest::newRow("C scientific with invalid number of decimals")
+ QTest::newRow("C scientific with invalid group size")
<< "C" << QDoubleValidator::ScientificNotation << 2 << "-12,34.98765e2"
<< "-1.23e+05";
QTest::newRow("C scientific truncate decimals")
@@ -510,7 +486,7 @@ void tst_QDoubleValidator::fixup_data()
QTest::newRow("en standard with invalid digit grouping")
<< "en" << QDoubleValidator::StandardNotation << -1 << "-1,234,5.678"
<< "-12,345.678";
- QTest::newRow("en standard with invalid number of decimals")
+ QTest::newRow("en standard with invalid group size")
<< "en" << QDoubleValidator::StandardNotation << 2 << "12,34.678"
<< "1,234.68";
QTest::newRow("en standard no fractional part")
@@ -526,7 +502,7 @@ void tst_QDoubleValidator::fixup_data()
QTest::newRow("en scientific with invalid digit grouping")
<< "en" << QDoubleValidator::ScientificNotation << -1 << "-12,34.98765e2"
<< "-1.23498765E+05";
- QTest::newRow("en scientific with invalid number of decimals")
+ QTest::newRow("en scientific with invalid group size")
<< "en" << QDoubleValidator::ScientificNotation << 2 << "12,34.98765e2"
<< "1.23E+05";
QTest::newRow("en scientific no fractional part")
@@ -553,7 +529,7 @@ void tst_QDoubleValidator::fixup_data()
QTest::newRow("de standard with invalid digit grouping")
<< "de" << QDoubleValidator::StandardNotation << -1 << "1.234.5,678"
<< "12.345,678";
- QTest::newRow("de standard with invalid number of decimals")
+ QTest::newRow("de standard with invalid group size")
<< "de" << QDoubleValidator::StandardNotation << 2 << "-12.34,678"
<< "-1.234,68";
QTest::newRow("de standard no fractional part")
@@ -568,7 +544,7 @@ void tst_QDoubleValidator::fixup_data()
QTest::newRow("de scientific with invalid digit grouping")
<< "de" << QDoubleValidator::ScientificNotation << -1 << "12.34,98765e2"
<< "1,23498765E+05";
- QTest::newRow("de scientific with invalid number of decimals")
+ QTest::newRow("de scientific with invalid group size")
<< "de" << QDoubleValidator::ScientificNotation << 2 << "-12.34,98765e2"
<< "-1,23E+05";
QTest::newRow("de scientific no fractional part")
@@ -584,6 +560,22 @@ void tst_QDoubleValidator::fixup_data()
<< "de" << QDoubleValidator::ScientificNotation << -1 << "-12.34"
<< "-1,234E+03";
+ // es locale uses ',' as decimal point and '.' as grouping separator.
+ // It doesn't apply grouping unless the the next-to-least significant group
+ // has more than one digit in it.
+ QTest::newRow("es standard no digit grouping")
+ << "es" << QDoubleValidator::StandardNotation << -1 << "1234,567" << "1234,567";
+ QTest::newRow("es standard with digit grouping")
+ << "es" << QDoubleValidator::StandardNotation << -1 << "-12.345,678" << "-12.345,678";
+ QTest::newRow("es standard with invalid group size")
+ << "es" << QDoubleValidator::StandardNotation << -1 << "1.234.5,678" << "12.345,678";
+ QTest::newRow("es standard with invalid digit grouping")
+ << "es" << QDoubleValidator::StandardNotation << 2 << "-1.234,678" << "-1234,68";
+ QTest::newRow("es standard big with invalid digit grouping")
+ << "es" << QDoubleValidator::StandardNotation << 2 << "-1234.678,9" << "-1.234.678,9";
+ QTest::newRow("es standard no fractional part")
+ << "es" << QDoubleValidator::StandardNotation << -1 << "12.34" << "1234";
+
// hi locale uses '.' as decimal point and ',' as grouping separator.
// The rightmost group is of three digits, all the others contain two
// digits.
@@ -666,7 +658,7 @@ void tst_QDoubleValidator::setRangeOverloads_data()
QTest::newRow("scientific, 1 digits after point")
<< QDoubleValidator::ScientificNotation << -1 << -100.0 << 100.0 << 0
<< QString("1.2e1") << ACC << INV;
- QTest::newRow("scientific, 3 digits after point, not in range")
+ QTest::newRow("scientific, 3 digits after point, demand fewer")
<< QDoubleValidator::ScientificNotation << 3 << -100.0 << 100.0 << 1
<< QString("10.234e-1") << ACC << INV;
QTest::newRow("scientific, 3 digits after point, not in range")
diff --git a/tests/auto/gui/util/qintvalidator/CMakeLists.txt b/tests/auto/gui/util/qintvalidator/CMakeLists.txt
index 83891a3541..841b83a8e0 100644
--- a/tests/auto/gui/util/qintvalidator/CMakeLists.txt
+++ b/tests/auto/gui/util/qintvalidator/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qintvalidator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qintvalidator Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qintvalidator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qintvalidator
SOURCES
tst_qintvalidator.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/util/qintvalidator/tst_qintvalidator.cpp b/tests/auto/gui/util/qintvalidator/tst_qintvalidator.cpp
index 48b04cef14..bfa69c90b8 100644
--- a/tests/auto/gui/util/qintvalidator/tst_qintvalidator.cpp
+++ b/tests/auto/gui/util/qintvalidator/tst_qintvalidator.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 <QTest>
@@ -190,8 +165,10 @@ void tst_QIntValidator::validateFrench()
QIntValidator validator(-2000, 2000, 0);
validator.setLocale(QLocale::French);
int i;
+ // Grouping separator is a narrow no-break space; QLocale accepts a space as it.
QString s = QLatin1String("1 ");
- QCOMPARE(validator.validate(s, i), QValidator::Acceptable);
+ // Shouldn't end with a group separator
+ QCOMPARE(validator.validate(s, i), QValidator::Intermediate);
validator.fixup(s);
QCOMPARE(s, s);
@@ -236,45 +213,45 @@ void tst_QIntValidator::notifySignals()
QSignalSpy changedSpy(&iv, SIGNAL(changed()));
iv.setTop(9);
- QCOMPARE(topSpy.count(), 1);
- QCOMPARE(changedSpy.count(), 1);
+ QCOMPARE(topSpy.size(), 1);
+ QCOMPARE(changedSpy.size(), 1);
QCOMPARE(iv.top(), 9);
iv.setBottom(1);
- QCOMPARE(bottomSpy.count(), 1);
- QCOMPARE(changedSpy.count(), 2);
+ QCOMPARE(bottomSpy.size(), 1);
+ QCOMPARE(changedSpy.size(), 2);
QCOMPARE(iv.bottom(), 1);
iv.setRange(1, 8);
- QCOMPARE(topSpy.count(), 2);
- QCOMPARE(bottomSpy.count(), 1);
- QCOMPARE(changedSpy.count(), 3);
+ QCOMPARE(topSpy.size(), 2);
+ QCOMPARE(bottomSpy.size(), 1);
+ QCOMPARE(changedSpy.size(), 3);
QCOMPARE(iv.top(), 8);
QCOMPARE(iv.bottom(), 1);
iv.setRange(2, 8);
- QCOMPARE(topSpy.count(), 2);
- QCOMPARE(bottomSpy.count(), 2);
- QCOMPARE(changedSpy.count(), 4);
+ QCOMPARE(topSpy.size(), 2);
+ QCOMPARE(bottomSpy.size(), 2);
+ QCOMPARE(changedSpy.size(), 4);
QCOMPARE(iv.top(), 8);
QCOMPARE(iv.bottom(), 2);
iv.setRange(3, 7);
- QCOMPARE(topSpy.count(), 3);
- QCOMPARE(bottomSpy.count(), 3);
- QCOMPARE(changedSpy.count(), 5);
+ QCOMPARE(topSpy.size(), 3);
+ QCOMPARE(bottomSpy.size(), 3);
+ QCOMPARE(changedSpy.size(), 5);
QCOMPARE(iv.top(), 7);
QCOMPARE(iv.bottom(), 3);
iv.setRange(3, 7);
- QCOMPARE(topSpy.count(), 3);
- QCOMPARE(bottomSpy.count(), 3);
- QCOMPARE(changedSpy.count(), 5);
+ QCOMPARE(topSpy.size(), 3);
+ QCOMPARE(bottomSpy.size(), 3);
+ QCOMPARE(changedSpy.size(), 5);
iv.setLocale(QLocale("C"));
- QCOMPARE(changedSpy.count(), 5);
+ QCOMPARE(changedSpy.size(), 5);
iv.setLocale(QLocale("en"));
- QCOMPARE(changedSpy.count(), 6);
+ QCOMPARE(changedSpy.size(), 6);
}
void tst_QIntValidator::fixup()
@@ -331,9 +308,9 @@ void tst_QIntValidator::fixup_data()
// Normally the groups contain three digits, but the leftmost group should
// have at least two digits.
QTest::newRow("es no digit grouping 1000") << "es" << "1000" << "1000";
- QTest::newRow("es no digit grouping 10000") << "es" << "10000" << "10.000";
- QTest::newRow("es with digit grouping") << "es" << "1000.000" << "1000.000";
- QTest::newRow("es invalid digit grouping") << "es" << "1.000.000" << "1000.000";
+ QTest::newRow("es with digit grouping 10000") << "es" << "10000" << "10.000";
+ QTest::newRow("es with digit grouping million") << "es" << "1.000.000" << "1.000.000";
+ QTest::newRow("es invalid digit grouping") << "es" << "1000.000" << "1.000.000";
}
QTEST_APPLESS_MAIN(tst_QIntValidator)
diff --git a/tests/auto/gui/util/qregularexpressionvalidator/CMakeLists.txt b/tests/auto/gui/util/qregularexpressionvalidator/CMakeLists.txt
index 9caf7a1596..1d48205537 100644
--- a/tests/auto/gui/util/qregularexpressionvalidator/CMakeLists.txt
+++ b/tests/auto/gui/util/qregularexpressionvalidator/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qregularexpressionvalidator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qregularexpressionvalidator Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qregularexpressionvalidator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qregularexpressionvalidator
SOURCES
tst_qregularexpressionvalidator.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/util/qregularexpressionvalidator/tst_qregularexpressionvalidator.cpp b/tests/auto/gui/util/qregularexpressionvalidator/tst_qregularexpressionvalidator.cpp
index 0d1d748e00..17f9e6a1bd 100644
--- a/tests/auto/gui/util/qregularexpressionvalidator/tst_qregularexpressionvalidator.cpp
+++ b/tests/auto/gui/util/qregularexpressionvalidator/tst_qregularexpressionvalidator.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
-** 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) 2012 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui/QRegularExpressionValidator>
#include <QTest>
@@ -98,12 +73,12 @@ void tst_QRegularExpressionValidator::validate()
QTEST(result, "state");
if (result == QValidator::Invalid)
- QCOMPARE(pos, value.length());
+ QCOMPARE(pos, value.size());
else
QCOMPARE(pos, -1); // ensure pos is not modified if validate returned Acceptable or Intermediate
- QCOMPARE(spy.count(), signalCount);
- QCOMPARE(changedSpy.count(), signalCount);
+ QCOMPARE(spy.size(), signalCount);
+ QCOMPARE(changedSpy.size(), signalCount);
}
QTEST_GUILESS_MAIN(tst_QRegularExpressionValidator)
diff --git a/tests/auto/gui/util/qtexturefilereader/CMakeLists.txt b/tests/auto/gui/util/qtexturefilereader/CMakeLists.txt
index de809f577d..70e2c02417 100644
--- a/tests/auto/gui/util/qtexturefilereader/CMakeLists.txt
+++ b/tests/auto/gui/util/qtexturefilereader/CMakeLists.txt
@@ -1,16 +1,15 @@
-# Generated from qtexturefilereader.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtexturefilereader Test:
#####################################################################
-qt_internal_add_test(tst_qtexturefilereader
- SOURCES
- tst_qtexturefilereader.cpp
- PUBLIC_LIBRARIES
- Qt::Gui
- Qt::GuiPrivate
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtexturefilereader LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Resources:
set(qtexturefilereader_resource_files
@@ -18,15 +17,19 @@ set(qtexturefilereader_resource_files
"texturefiles/car_mips.ktx"
"texturefiles/cubemap_float32_rgba.ktx"
"texturefiles/cubemap_metadata.ktx"
+ "texturefiles/invalid.ktx"
"texturefiles/newlogo.astc"
"texturefiles/newlogo_srgb.astc"
"texturefiles/pattern.pkm"
)
-qt_internal_add_resource(tst_qtexturefilereader "qtexturefilereader"
- PREFIX
- "/"
- FILES
- ${qtexturefilereader_resource_files}
+qt_internal_add_test(tst_qtexturefilereader
+ SOURCES
+ tst_qtexturefilereader.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ TESTDATA ${qtexturefilereader_resource_files}
+ BUILTIN_TESTDATA
)
diff --git a/tests/auto/gui/util/qtexturefilereader/texturefiles/invalid.ktx b/tests/auto/gui/util/qtexturefilereader/texturefiles/invalid.ktx
new file mode 100644
index 0000000000..68a92221db
--- /dev/null
+++ b/tests/auto/gui/util/qtexturefilereader/texturefiles/invalid.ktx
Binary files differ
diff --git a/tests/auto/gui/util/qtexturefilereader/tst_qtexturefilereader.cpp b/tests/auto/gui/util/qtexturefilereader/tst_qtexturefilereader.cpp
index 89144eb245..62760e3844 100644
--- a/tests/auto/gui/util/qtexturefilereader/tst_qtexturefilereader.cpp
+++ b/tests/auto/gui/util/qtexturefilereader/tst_qtexturefilereader.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <private/qtexturefilereader_p.h>
#include <QTest>
@@ -36,6 +11,7 @@ class tst_qtexturefilereader : public QObject
private slots:
void checkHandlers_data();
void checkHandlers();
+ void checkInvalid();
void checkMetadata();
};
@@ -165,6 +141,18 @@ void tst_qtexturefilereader::checkMetadata()
QCOMPARE(kvs.value("test C"), QByteArrayLiteral("3\x0000"));
}
+void tst_qtexturefilereader::checkInvalid()
+{
+ QFile f(":/texturefiles/invalid.ktx");
+ QVERIFY(f.open(QIODevice::ReadOnly));
+ QTextureFileReader r(&f);
+ QTextureFileData d = r.read();
+ auto kvs = d.keyValueMetadata();
+
+ // Basically just checking that we don't crash on and invalid file
+ QVERIFY(kvs.empty());
+}
+
QTEST_MAIN(tst_qtexturefilereader)
#include "tst_qtexturefilereader.moc"
diff --git a/tests/auto/gui/util/qundogroup/CMakeLists.txt b/tests/auto/gui/util/qundogroup/CMakeLists.txt
index c1396326f7..98c2f64f88 100644
--- a/tests/auto/gui/util/qundogroup/CMakeLists.txt
+++ b/tests/auto/gui/util/qundogroup/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qundogroup.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qundogroup Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qundogroup LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qundogroup
SOURCES
tst_qundogroup.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/util/qundogroup/tst_qundogroup.cpp b/tests/auto/gui/util/qundogroup/tst_qundogroup.cpp
index c609ab4ffd..36f72b2ca0 100644
--- a/tests/auto/gui/util/qundogroup/tst_qundogroup.cpp
+++ b/tests/auto/gui/util/qundogroup/tst_qundogroup.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 <QTest>
#include <QUndoGroup>
#include <QUndoStack>
@@ -90,7 +65,7 @@ InsertCommand::InsertCommand(QString *str, int idx, const QString &text,
QUndoCommand *parent)
: QUndoCommand(parent)
{
- QVERIFY(str->length() >= idx);
+ QVERIFY(str->size() >= idx);
setText("insert");
@@ -101,22 +76,22 @@ InsertCommand::InsertCommand(QString *str, int idx, const QString &text,
void InsertCommand::redo()
{
- QVERIFY(m_str->length() >= m_idx);
+ QVERIFY(m_str->size() >= m_idx);
m_str->insert(m_idx, m_text);
}
void InsertCommand::undo()
{
- QCOMPARE(m_str->mid(m_idx, m_text.length()), m_text);
+ QCOMPARE(m_str->mid(m_idx, m_text.size()), m_text);
- m_str->remove(m_idx, m_text.length());
+ m_str->remove(m_idx, m_text.size());
}
RemoveCommand::RemoveCommand(QString *str, int idx, int len, QUndoCommand *parent)
: QUndoCommand(parent)
{
- QVERIFY(str->length() >= idx + len);
+ QVERIFY(str->size() >= idx + len);
setText("remove");
@@ -127,14 +102,14 @@ RemoveCommand::RemoveCommand(QString *str, int idx, int len, QUndoCommand *paren
void RemoveCommand::redo()
{
- QCOMPARE(m_str->mid(m_idx, m_text.length()), m_text);
+ QCOMPARE(m_str->mid(m_idx, m_text.size()), m_text);
- m_str->remove(m_idx, m_text.length());
+ m_str->remove(m_idx, m_text.size());
}
void RemoveCommand::undo()
{
- QVERIFY(m_str->length() >= m_idx);
+ QVERIFY(m_str->size() >= m_idx);
m_str->insert(m_idx, m_text);
}
@@ -156,9 +131,9 @@ void AppendCommand::redo()
void AppendCommand::undo()
{
- QCOMPARE(m_str->mid(m_str->length() - m_text.length()), m_text);
+ QCOMPARE(m_str->mid(m_str->size() - m_text.size()), m_text);
- m_str->truncate(m_str->length() - m_text.length());
+ m_str->truncate(m_str->size() - m_text.size());
}
int AppendCommand::id() const
diff --git a/tests/auto/gui/util/qundostack/CMakeLists.txt b/tests/auto/gui/util/qundostack/CMakeLists.txt
index 0e56171add..de36f4a1ad 100644
--- a/tests/auto/gui/util/qundostack/CMakeLists.txt
+++ b/tests/auto/gui/util/qundostack/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qundostack.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qundostack Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qundostack LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qundostack
SOURCES
tst_qundostack.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/gui/util/qundostack/tst_qundostack.cpp b/tests/auto/gui/util/qundostack/tst_qundostack.cpp
index 6707c12d80..3567bc6097 100644
--- a/tests/auto/gui/util/qundostack/tst_qundostack.cpp
+++ b/tests/auto/gui/util/qundostack/tst_qundostack.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 <QTest>
@@ -122,7 +97,7 @@ InsertCommand::InsertCommand(QString *str, int idx, const QString &text,
QUndoCommand *parent)
: QUndoCommand(parent)
{
- QVERIFY(str->length() >= idx);
+ QVERIFY(str->size() >= idx);
setText("insert");
@@ -133,22 +108,22 @@ InsertCommand::InsertCommand(QString *str, int idx, const QString &text,
void InsertCommand::redo()
{
- QVERIFY(m_str->length() >= m_idx);
+ QVERIFY(m_str->size() >= m_idx);
m_str->insert(m_idx, m_text);
}
void InsertCommand::undo()
{
- QCOMPARE(m_str->mid(m_idx, m_text.length()), m_text);
+ QCOMPARE(m_str->mid(m_idx, m_text.size()), m_text);
- m_str->remove(m_idx, m_text.length());
+ m_str->remove(m_idx, m_text.size());
}
RemoveCommand::RemoveCommand(QString *str, int idx, int len, QUndoCommand *parent)
: QUndoCommand(parent)
{
- QVERIFY(str->length() >= idx + len);
+ QVERIFY(str->size() >= idx + len);
setText("remove");
@@ -159,14 +134,14 @@ RemoveCommand::RemoveCommand(QString *str, int idx, int len, QUndoCommand *paren
void RemoveCommand::redo()
{
- QCOMPARE(m_str->mid(m_idx, m_text.length()), m_text);
+ QCOMPARE(m_str->mid(m_idx, m_text.size()), m_text);
- m_str->remove(m_idx, m_text.length());
+ m_str->remove(m_idx, m_text.size());
}
void RemoveCommand::undo()
{
- QVERIFY(m_str->length() >= m_idx);
+ QVERIFY(m_str->size() >= m_idx);
m_str->insert(m_idx, m_text);
}
@@ -197,9 +172,9 @@ void AppendCommand::redo()
void AppendCommand::undo()
{
- QCOMPARE(m_str->mid(m_str->length() - m_text.length()), m_text);
+ QCOMPARE(m_str->mid(m_str->size() - m_text.size()), m_text);
- m_str->truncate(m_str->length() - m_text.length());
+ m_str->truncate(m_str->size() - m_text.size());
}
int AppendCommand::id() const
@@ -349,44 +324,44 @@ static void checkState(QSignalSpy &redoTextChangedSpy,
QCOMPARE(stack.canRedo(), _canRedo);
QCOMPARE(stack.redoText(), QString(_redoText));
if (_indexChanged) {
- QCOMPARE(indexChangedSpy.count(), 1);
+ QCOMPARE(indexChangedSpy.size(), 1);
QCOMPARE(indexChangedSpy.at(0).at(0).toInt(), _index);
indexChangedSpy.clear();
} else {
- QCOMPARE(indexChangedSpy.count(), 0);
+ QCOMPARE(indexChangedSpy.size(), 0);
}
if (_cleanChanged) {
- QCOMPARE(cleanChangedSpy.count(), 1);
+ QCOMPARE(cleanChangedSpy.size(), 1);
QCOMPARE(cleanChangedSpy.at(0).at(0).toBool(), _clean);
cleanChangedSpy.clear();
} else {
- QCOMPARE(cleanChangedSpy.count(), 0);
+ QCOMPARE(cleanChangedSpy.size(), 0);
}
if (_undoChanged) {
- QCOMPARE(canUndoChangedSpy.count(), 1);
+ QCOMPARE(canUndoChangedSpy.size(), 1);
QCOMPARE(canUndoChangedSpy.at(0).at(0).toBool(), _canUndo);
QCOMPARE(undoAction->isEnabled(), _canUndo);
- QCOMPARE(undoTextChangedSpy.count(), 1);
+ QCOMPARE(undoTextChangedSpy.size(), 1);
QCOMPARE(undoTextChangedSpy.at(0).at(0).toString(), QString(_undoText));
QCOMPARE(undoAction->text(), glue("foo", _undoText));
canUndoChangedSpy.clear();
undoTextChangedSpy.clear();
} else {
- QCOMPARE(canUndoChangedSpy.count(), 0);
- QCOMPARE(undoTextChangedSpy.count(), 0);
+ QCOMPARE(canUndoChangedSpy.size(), 0);
+ QCOMPARE(undoTextChangedSpy.size(), 0);
}
if (_redoChanged) {
- QCOMPARE(canRedoChangedSpy.count(), 1);
+ QCOMPARE(canRedoChangedSpy.size(), 1);
QCOMPARE(canRedoChangedSpy.at(0).at(0).toBool(), _canRedo);
QCOMPARE(redoAction->isEnabled(), _canRedo);
- QCOMPARE(redoTextChangedSpy.count(), 1);
+ QCOMPARE(redoTextChangedSpy.size(), 1);
QCOMPARE(redoTextChangedSpy.at(0).at(0).toString(), QString(_redoText));
QCOMPARE(redoAction->text(), glue("bar", _redoText));
canRedoChangedSpy.clear();
redoTextChangedSpy.clear();
} else {
- QCOMPARE(canRedoChangedSpy.count(), 0);
- QCOMPARE(redoTextChangedSpy.count(), 0);
+ QCOMPARE(canRedoChangedSpy.size(), 0);
+ QCOMPARE(redoTextChangedSpy.size(), 0);
}
}
diff --git a/tests/auto/guiapplauncher/examples.txt b/tests/auto/guiapplauncher/examples.txt
index d59e14bfed..7aef839925 100644
--- a/tests/auto/guiapplauncher/examples.txt
+++ b/tests/auto/guiapplauncher/examples.txt
@@ -20,11 +20,9 @@
"graphicsview/flowlayout Example", "examples/widgets/graphicsview/flowlayout", "flowlayout", 10, -1
"graphicsview/portedasteroids Example", "examples/widgets/graphicsview/portedasteroids", "portedasteroids", 10, -1
"graphicsview/portedcanvas Example", "examples/widgets/graphicsview/portedcanvas", "portedcanvas", 10, -1
-"graphicsview/weatheranchorlayout Example", "examples/widgets/graphicsview/weatheranchorlayout", "weatheranchorlayout", 10, -1
"itemviews/addressbook Example", "examples/widgets/itemviews/addressbook", "addressbook", 0, -1
"itemviews/basicsortfiltermodel Example", "examples/widgets/itemviews/basicsortfiltermodel", "basicsortfiltermodel", 10, -1
"itemviews/chart Example", "examples/widgets/itemviews/chart", "chart", 0, -1
-"itemviews/coloreditorfactory Example", "examples/widgets/itemviews/coloreditorfactory", "coloreditorfactory", 10, -1
"itemviews/combowidgetmapper Example", "examples/widgets/itemviews/combowidgetmapper", "combowidgetmapper", 6, -1
"itemviews/customsortfiltermodel Example", "examples/widgets/itemviews/customsortfiltermodel", "customsortfiltermodel", 6, -1
"itemviews/dirview Example", "examples/widgets/itemviews/dirview", "dirview", 0, -1
@@ -64,7 +62,6 @@
"painting/affine Example", "examples/widgets/painting/affine", "affine", 0, -1
"painting/basicdrawing Example", "examples/widgets/painting/basicdrawing", "basicdrawing", 10, -1
"painting/composition Example", "examples/widgets/painting/composition", "composition", 0, -1
-"painting/concentriccircles Example", "examples/widgets/painting/concentriccircles", "concentriccircles", 0, -1
"painting/deform Example", "examples/widgets/painting/deform", "deform", 0, -1
"painting/fontsampler Example", "examples/widgets/painting/fontsampler", "fontsampler", 0, -1
"painting/gradients Example", "examples/widgets/painting/gradients", "gradients", 0, -1
@@ -87,7 +84,6 @@
"widgets/charactermap Example", "examples/widgets/widgets/charactermap", "charactermap", 10, -1
"widgets/codeeditor Example", "examples/widgets/widgets/codeeditor", "codeeditor", 0, -1
"widgets/digitalclock Example", "examples/widgets/widgets/digitalclock", "digitalclock", 10, -1
-"widgets/groupbox Example", "examples/widgets/widgets/groupbox", "groupbox", 10, -1
"widgets/icons Example", "examples/widgets/widgets/icons", "icons", 10, -1
"widgets/imageviewer Example", "examples/widgets/widgets/imageviewer", "imageviewer", 10, -1
"widgets/lineedits Example", "examples/widgets/widgets/lineedits", "lineedits", 10, -1
diff --git a/tests/auto/network-settings.h b/tests/auto/network-settings.h
index d261c4afb5..33b29f105c 100644
--- a/tests/auto/network-settings.h
+++ b/tests/auto/network-settings.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QString>
#include <QTest>
@@ -117,7 +92,11 @@ public:
static bool hasIPv6()
{
-#ifdef Q_OS_UNIX
+#if defined(Q_OS_QNX)
+ // Qt's support for IPv6 on QNX appears to be broken.
+ // This is an unaccepable situation after 2011-01-31.
+ return false;
+#elif defined(Q_OS_UNIX)
int s = ::socket(AF_INET6, SOCK_DGRAM, 0);
if (s == -1)
return false;
diff --git a/tests/auto/network/CMakeLists.txt b/tests/auto/network/CMakeLists.txt
index c8bb0cf799..9b15208f71 100644
--- a/tests/auto/network/CMakeLists.txt
+++ b/tests/auto/network/CMakeLists.txt
@@ -1,5 +1,6 @@
-# Generated from network.pro.
-# special case begin
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
# SSL library include path is not propagated with private tests which results in
# test not being able to find the ssl header when they are not in the standard
# include paths
@@ -12,9 +13,8 @@ if (QT_FEATURE_private_tests)
include_directories($<TARGET_PROPERTY:WrapOpenSSLHeaders::WrapOpenSSLHeaders,INTERFACE_INCLUDE_DIRECTORIES>)
endif()
endif()
-# special case end
-# add_subdirectory(selftest) # special case not ported
+# add_subdirectory(selftest) # TODO: not ported
add_subdirectory(access)
add_subdirectory(kernel)
add_subdirectory(ssl)
diff --git a/tests/auto/network/access/CMakeLists.txt b/tests/auto/network/access/CMakeLists.txt
index d225eb1299..44b7d5c1bb 100644
--- a/tests/auto/network/access/CMakeLists.txt
+++ b/tests/auto/network/access/CMakeLists.txt
@@ -1,14 +1,20 @@
-# Generated from access.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+add_subdirectory(qhttpheaders)
add_subdirectory(qnetworkdiskcache)
add_subdirectory(qnetworkcookiejar)
add_subdirectory(qnetworkaccessmanager)
add_subdirectory(qnetworkcookie)
add_subdirectory(qnetworkrequest)
+add_subdirectory(qnetworkrequestfactory)
add_subdirectory(qnetworkreply)
add_subdirectory(qnetworkcachemetadata)
add_subdirectory(qabstractnetworkcache)
+add_subdirectory(qrestaccessmanager)
if(QT_FEATURE_private_tests)
+ add_subdirectory(qhttp2connection)
+ add_subdirectory(qhttpheaderparser)
add_subdirectory(qhttpnetworkconnection)
add_subdirectory(qhttpnetworkreply)
add_subdirectory(hpack)
diff --git a/tests/auto/network/access/hpack/CMakeLists.txt b/tests/auto/network/access/hpack/CMakeLists.txt
index 421a60c17d..32cd4b2f06 100644
--- a/tests/auto/network/access/hpack/CMakeLists.txt
+++ b/tests/auto/network/access/hpack/CMakeLists.txt
@@ -1,17 +1,21 @@
-# Generated from hpack.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_hpack Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_hpack LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_hpack
SOURCES
tst_hpack.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
Qt::NetworkPrivate
)
-
-#### Keys ignored in scope 1:.:.:hpack.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/auto/network/access/hpack/tst_hpack.cpp b/tests/auto/network/access/hpack/tst_hpack.cpp
index ee66ba73ca..e6b43eaed4 100644
--- a/tests/auto/network/access/hpack/tst_hpack.cpp
+++ b/tests/auto/network/access/hpack/tst_hpack.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2014 Governikus GmbH & Co. KG.
-** 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.
+// Copyright (C) 2014 Governikus GmbH & Co. KG.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QRandomGenerator>
diff --git a/tests/auto/network/access/hsts/CMakeLists.txt b/tests/auto/network/access/hsts/CMakeLists.txt
index ba3b110f59..821a034940 100644
--- a/tests/auto/network/access/hsts/CMakeLists.txt
+++ b/tests/auto/network/access/hsts/CMakeLists.txt
@@ -1,17 +1,23 @@
-# Generated from hsts.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qhsts Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhsts LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qhsts
SOURCES
tst_qhsts.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
Qt::NetworkPrivate
)
-#### Keys ignored in scope 1:.:.:hsts.pro:<TRUE>:
# TEMPLATE = "app"
diff --git a/tests/auto/network/access/hsts/tst_qhsts.cpp b/tests/auto/network/access/hsts/tst_qhsts.cpp
index f59d04e9e2..4e9a5cc53f 100644
--- a/tests/auto/network/access/hsts/tst_qhsts.cpp
+++ b/tests/auto/network/access/hsts/tst_qhsts.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 <QTest>
@@ -34,6 +9,7 @@
#include <QtCore/qpair.h>
#include <QtCore/qurl.h>
+#include <QtNetwork/qhttpheaders.h>
#include <QtNetwork/private/qhstsstore_p.h>
#include <QtNetwork/private/qhsts_p.h>
@@ -214,104 +190,108 @@ void tst_QHsts::testPolicyExpiration()
void tst_QHsts::testSTSHeaderParser()
{
QHstsHeaderParser parser;
- using Header = QPair<QByteArray, QByteArray>;
- using Headers = QList<Header>;
QVERIFY(!parser.includeSubDomains());
QVERIFY(!parser.expirationDate().isValid());
- Headers list;
- QVERIFY(!parser.parse(list));
+ QHttpHeaders headers;
+ QVERIFY(!parser.parse(headers));
QVERIFY(!parser.includeSubDomains());
QVERIFY(!parser.expirationDate().isValid());
- list << Header("Strict-Transport-security", "200");
- QVERIFY(!parser.parse(list));
+ headers.append("Strict-Transport-security", "200");
+ QVERIFY(!parser.parse(headers));
QVERIFY(!parser.includeSubDomains());
QVERIFY(!parser.expirationDate().isValid());
// This header is missing REQUIRED max-age directive, so we'll ignore it:
- list << Header("Strict-Transport-Security", "includeSubDomains");
- QVERIFY(!parser.parse(list));
+ headers.append("Strict-Transport-Security", "includeSubDomains");
+ QVERIFY(!parser.parse(headers));
QVERIFY(!parser.includeSubDomains());
QVERIFY(!parser.expirationDate().isValid());
- list.pop_back();
- list << Header("Strict-Transport-Security", "includeSubDomains;max-age=1000");
- QVERIFY(parser.parse(list));
+ headers.removeAt(headers.size() - 1);
+ headers.append("Strict-Transport-Security", "includeSubDomains;max-age=1000");
+ QVERIFY(parser.parse(headers));
QVERIFY(parser.expirationDate() > QDateTime::currentDateTimeUtc());
QVERIFY(parser.includeSubDomains());
- list.pop_back();
+ headers.removeAt(headers.size() - 1);
+ headers.append("strict-transport-security", "includeSubDomains;max-age=1000");
+ QVERIFY(parser.parse(headers));
+ QVERIFY(parser.expirationDate() > QDateTime::currentDateTimeUtc());
+ QVERIFY(parser.includeSubDomains());
+
+ headers.removeAt(headers.size() - 1);
// Invalid (includeSubDomains twice):
- list << Header("Strict-Transport-Security", "max-age = 1000 ; includeSubDomains;includeSubDomains");
- QVERIFY(!parser.parse(list));
+ headers.append("Strict-Transport-Security", "max-age = 1000 ; includeSubDomains;includeSubDomains");
+ QVERIFY(!parser.parse(headers));
QVERIFY(!parser.includeSubDomains());
QVERIFY(!parser.expirationDate().isValid());
- list.pop_back();
+ headers.removeAt(headers.size() - 1);
// Invalid (weird number of seconds):
- list << Header("Strict-Transport-Security", "max-age=-1000 ; includeSubDomains");
- QVERIFY(!parser.parse(list));
+ headers.append("Strict-Transport-Security", "max-age=-1000 ; includeSubDomains");
+ QVERIFY(!parser.parse(headers));
QVERIFY(!parser.includeSubDomains());
QVERIFY(!parser.expirationDate().isValid());
- list.pop_back();
+ headers.removeAt(headers.size() - 1);
// Note, directives are case-insensitive + we should ignore unknown directive.
- list << Header("Strict-Transport-Security", ";max-age=1000 ;includesubdomains;;"
+ headers.append("Strict-Transport-Security", ";max-age=1000 ;includesubdomains;;"
"nowsomeunknownheader=\"somevaluewithescapes\\;\"");
- QVERIFY(parser.parse(list));
+ QVERIFY(parser.parse(headers));
QVERIFY(parser.includeSubDomains());
QVERIFY(parser.expirationDate().isValid());
- list.pop_back();
+ headers.removeAt(headers.size() - 1);
// Check that we know how to unescape max-age:
- list << Header("Strict-Transport-Security", "max-age=\"1000\"");
- QVERIFY(parser.parse(list));
+ headers.append("Strict-Transport-Security", "max-age=\"1000\"");
+ QVERIFY(parser.parse(headers));
QVERIFY(!parser.includeSubDomains());
QVERIFY(parser.expirationDate().isValid());
- list.pop_back();
+ headers.removeAt(headers.size() - 1);
// The only STS header, with invalid syntax though, to be ignored:
- list << Header("Strict-Transport-Security", "max-age; max-age=15768000");
- QVERIFY(!parser.parse(list));
+ headers.append("Strict-Transport-Security", "max-age; max-age=15768000");
+ QVERIFY(!parser.parse(headers));
QVERIFY(!parser.includeSubDomains());
QVERIFY(!parser.expirationDate().isValid());
// Now we check that our parse chosses the first valid STS header and ignores
// others:
- list.clear();
- list << Header("Strict-Transport-Security", "includeSubdomains; max-age=\"hehehe\";");
- list << Header("Strict-Transport-Security", "max-age=10101");
- QVERIFY(parser.parse(list));
+ headers.clear();
+ headers.append("Strict-Transport-Security", "includeSubdomains; max-age=\"hehehe\";");
+ headers.append("Strict-Transport-Security", "max-age=10101");
+ QVERIFY(parser.parse(headers));
QVERIFY(!parser.includeSubDomains());
QVERIFY(parser.expirationDate().isValid());
- list.clear();
- list << Header("Strict-Transport-Security", "max-age=0");
- QVERIFY(parser.parse(list));
+ headers.clear();
+ headers.append("Strict-Transport-Security", "max-age=0");
+ QVERIFY(parser.parse(headers));
QVERIFY(!parser.includeSubDomains());
QVERIFY(parser.expirationDate() <= QDateTime::currentDateTimeUtc());
// Parsing is case-insensitive:
- list.pop_back();
- list << Header("Strict-Transport-Security", "Max-aGE=1000; InclUdesUbdomains");
- QVERIFY(parser.parse(list));
+ headers.removeAt(headers.size() - 1);
+ headers.append("Strict-Transport-Security", "Max-aGE=1000; InclUdesUbdomains");
+ QVERIFY(parser.parse(headers));
QVERIFY(parser.includeSubDomains());
QVERIFY(parser.expirationDate().isValid());
// Grammar of STS header is quite permissive, let's check we can parse
// some weird but valid header:
- list.pop_back();
- list << Header("Strict-Transport-Security", ";;; max-age = 17; ; ; ; ;;; ;;"
+ headers.removeAt(headers.size() - 1);
+ headers.append("Strict-Transport-Security", ";;; max-age = 17; ; ; ; ;;; ;;"
";;; ; includeSubdomains ;;thisIsUnknownDirective;;;;");
- QVERIFY(parser.parse(list));
+ QVERIFY(parser.parse(headers));
QVERIFY(parser.includeSubDomains());
QVERIFY(parser.expirationDate().isValid());
- list.pop_back();
- list << Header("Strict-Transport-Security", "max-age=1000; includeSubDomains bogon");
- QVERIFY(!parser.parse(list));
+ headers.removeAt(headers.size() - 1);
+ headers.append("Strict-Transport-Security", "max-age=1000; includeSubDomains bogon");
+ QVERIFY(!parser.parse(headers));
QVERIFY(!parser.includeSubDomains());
QVERIFY(!parser.expirationDate().isValid());
}
diff --git a/tests/auto/network/access/http2/BLACKLIST b/tests/auto/network/access/http2/BLACKLIST
new file mode 100644
index 0000000000..3de8d6d448
--- /dev/null
+++ b/tests/auto/network/access/http2/BLACKLIST
@@ -0,0 +1,2 @@
+[duplicateRequestsWithAborts]
+qnx ci # QTBUG-119616
diff --git a/tests/auto/network/access/http2/CMakeLists.txt b/tests/auto/network/access/http2/CMakeLists.txt
index 5adee76cbb..7ea559940b 100644
--- a/tests/auto/network/access/http2/CMakeLists.txt
+++ b/tests/auto/network/access/http2/CMakeLists.txt
@@ -1,16 +1,24 @@
-# Generated from http2.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_http2 Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_http2 LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_http2
SOURCES
http2srv.cpp http2srv.h
tst_http2.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
Qt::NetworkPrivate
Qt::TestPrivate
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
diff --git a/tests/auto/network/access/http2/http2srv.cpp b/tests/auto/network/access/http2/http2srv.cpp
index 8a4917049e..b52ea5527b 100644
--- a/tests/auto/network/access/http2/http2srv.cpp
+++ b/tests/auto/network/access/http2/http2srv.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 <QTest>
@@ -109,6 +84,12 @@ Http2Server::~Http2Server()
{
}
+void Http2Server::setInformationalStatusCode(int code)
+{
+ if (code == 100 || (102 <= code && code <= 199))
+ informationalStatusCode = code;
+}
+
void Http2Server::enablePushPromise(bool pushEnabled, const QByteArray &path)
{
pushPromiseEnabled = pushEnabled;
@@ -130,6 +111,23 @@ void Http2Server::setAuthenticationHeader(const QByteArray &authentication)
authenticationHeader = authentication;
}
+void Http2Server::setAuthenticationRequired(bool enable)
+{
+ Q_ASSERT(!enable || authenticationHeader.isEmpty());
+ authenticationRequired = enable;
+}
+
+void Http2Server::setRedirect(const QByteArray &url, int count)
+{
+ redirectUrl = url;
+ redirectCount = count;
+}
+
+void Http2Server::setSendTrailingHEADERS(bool enable)
+{
+ sendTrailingHEADERS = enable;
+}
+
void Http2Server::emulateGOAWAY(int timeout)
{
Q_ASSERT(timeout >= 0);
@@ -267,9 +265,20 @@ void Http2Server::sendDATA(quint32 streamID, quint32 windowSize)
return;
if (last) {
- writer.start(FrameType::DATA, FrameFlag::END_STREAM, streamID);
- writer.setPayloadSize(0);
- writer.write(*socket);
+ if (sendTrailingHEADERS) {
+ writer.start(FrameType::HEADERS,
+ FrameFlag::PRIORITY | FrameFlag::END_HEADERS | FrameFlag::END_STREAM, streamID);
+ const quint32 maxFrameSize(clientSetting(Settings::MAX_FRAME_SIZE_ID,
+ Http2::maxPayloadSize));
+ // 5 bytes for PRIORITY data:
+ writer.append(quint32(0)); // streamID 0 (32-bit)
+ writer.append(quint8(0)); // + weight 0 (8-bit)
+ writer.writeHEADERS(*socket, maxFrameSize);
+ } else {
+ writer.start(FrameType::DATA, FrameFlag::END_STREAM, streamID);
+ writer.setPayloadSize(0);
+ writer.write(*socket);
+ }
suspendedStreams.erase(it);
activeRequests.erase(streamID);
@@ -319,7 +328,8 @@ void Http2Server::incomingConnection(qintptr socketDescriptor)
connect(sslSocket, SIGNAL(sslErrors(QList<QSslError>)),
this, SLOT(ignoreErrorSlot()));
QFile file(QT_TESTCASE_SOURCEDIR "/certs/fluke.key");
- file.open(QIODevice::ReadOnly);
+ if (!file.open(QIODevice::ReadOnly))
+ qFatal("Cannot open certificate file %s", qPrintable(file.fileName()));
QSslKey key(file.readAll(), QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
sslSocket->setPrivateKey(key);
auto localCert = QSslCertificate::fromPath(QT_TESTCASE_SOURCEDIR "/certs/fluke.cert");
@@ -380,16 +390,12 @@ bool Http2Server::verifyProtocolUpgradeRequest()
bool settingsOk = false;
QHttpNetworkReplyPrivate *firstRequestReader = protocolUpgradeHandler->d_func();
+ const auto headers = firstRequestReader->headers();
// That's how we append them, that's what I expect to find:
- for (const auto &header : firstRequestReader->headers()) {
- if (header.first == "Connection")
- connectionOk = header.second.contains("Upgrade, HTTP2-Settings");
- else if (header.first == "Upgrade")
- upgradeOk = header.second.contains("h2c");
- else if (header.first == "HTTP2-Settings")
- settingsOk = true;
- }
+ connectionOk = headers.combinedValue(QHttpHeaders::WellKnownHeader::Connection).contains("Upgrade, HTTP2-Settings");
+ upgradeOk = headers.combinedValue(QHttpHeaders::WellKnownHeader::Upgrade).contains("h2c");
+ settingsOk = headers.contains("HTTP2-Settings");
return connectionOk && upgradeOk && settingsOk;
}
@@ -838,6 +844,25 @@ void Http2Server::sendResponse(quint32 streamID, bool emptyBody)
// Now we'll continue with _normal_ response.
}
+ // Create a header with an informational status code and some random header
+ // fields. The setter ensures that the value is 100 or is between 102 and 199
+ // (inclusive) if set - otherwise it is 0
+
+ if (informationalStatusCode > 0) {
+ writer.start(FrameType::HEADERS, FrameFlag::END_HEADERS, streamID);
+
+ HttpHeader informationalHeader;
+ informationalHeader.push_back({":status", QByteArray::number(informationalStatusCode)});
+ informationalHeader.push_back(HeaderField("a_random_header_field", "it_will_be_dropped"));
+ informationalHeader.push_back(HeaderField("another_random_header_field", "drop_this_too"));
+
+ HPack::BitOStream ostream(writer.outboundFrame().buffer);
+ const bool result = encoder.encodeResponse(ostream, informationalHeader);
+ Q_ASSERT(result);
+
+ writer.writeHEADERS(*socket, maxFrameSize);
+ }
+
writer.start(FrameType::HEADERS, FrameFlag::END_HEADERS, streamID);
if (emptyBody)
writer.addFlag(FrameFlag::END_STREAM);
@@ -860,11 +885,15 @@ void Http2Server::sendResponse(quint32 streamID, bool emptyBody)
const QString url("%1://localhost:%2/");
header.push_back({"location", url.arg(isClearText() ? QStringLiteral("http") : QStringLiteral("https"),
QString::number(targetPort)).toLatin1()});
-
+ } else if (redirectCount > 0) { // Not redirecting while reading, unlike above
+ --redirectCount;
+ header.push_back({":status", "308"});
+ header.push_back({"location", redirectUrl});
} else if (!authenticationHeader.isEmpty() && !hasAuth) {
header.push_back({ ":status", "401" });
header.push_back(HPack::HeaderField("www-authenticate", authenticationHeader));
- authenticationHeader.clear();
+ } else if (authenticationRequired) {
+ header.push_back({ ":status", "401" });
} else {
header.push_back({":status", "200"});
}
diff --git a/tests/auto/network/access/http2/http2srv.h b/tests/auto/network/access/http2/http2srv.h
index 671cacbd54..dc94318527 100644
--- a/tests/auto/network/access/http2/http2srv.h
+++ b/tests/auto/network/access/http2/http2srv.h
@@ -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
#ifndef HTTP2SRV_H
#define HTTP2SRV_H
@@ -83,6 +58,8 @@ public:
~Http2Server();
+ // To send responses with status code 1xx
+ void setInformationalStatusCode(int code);
// To be called before server started:
void enablePushPromise(bool enabled, const QByteArray &path = QByteArray());
void setResponseBody(const QByteArray &body);
@@ -90,6 +67,13 @@ public:
void setContentEncoding(const QByteArray &contentEncoding);
// No authentication data is generated for the method, the full header value must be set
void setAuthenticationHeader(const QByteArray &authentication);
+ // Authentication always required, no challenge provided
+ void setAuthenticationRequired(bool enable);
+ // Set the redirect URL and count. The server will return a redirect response with the url
+ // 'count' amount of times
+ void setRedirect(const QByteArray &redirectUrl, int count);
+ // Send a trailing HEADERS frame with PRIORITY and END_STREAM flag
+ void setSendTrailingHEADERS(bool enable);
void emulateGOAWAY(int timeout);
void redirectOpenStream(quint16 targetPort);
@@ -222,6 +206,13 @@ private:
QByteArray contentEncoding;
QByteArray authenticationHeader;
+ bool authenticationRequired = false;
+
+ QByteArray redirectUrl;
+ int redirectCount = 0;
+
+ bool sendTrailingHEADERS = false;
+ int informationalStatusCode = 0;
protected slots:
void ignoreErrorSlot();
};
diff --git a/tests/auto/network/access/http2/tst_http2.cpp b/tests/auto/network/access/http2/tst_http2.cpp
index 34b7e8fa37..b624f6e436 100644
--- a/tests/auto/network/access/http2/tst_http2.cpp
+++ b/tests/auto/network/access/http2/tst_http2.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 <QtNetwork/qtnetworkglobal.h>
@@ -62,6 +37,8 @@ Q_DECLARE_METATYPE(QNetworkRequest::Attribute)
QT_BEGIN_NAMESPACE
+using namespace Qt::StringLiterals;
+
QHttp2Configuration qt_defaultH2Configuration()
{
QHttp2Configuration config;
@@ -92,8 +69,11 @@ public slots:
void init();
private slots:
// Tests:
+ void defaultQnamHttp2Configuration();
void singleRequest_data();
void singleRequest();
+ void informationalRequest_data();
+ void informationalRequest();
void multipleRequests();
void flowControlClientSide();
void flowControlServerSide();
@@ -118,6 +98,13 @@ private slots:
void h2cAllowedAttribute_data();
void h2cAllowedAttribute();
+ void redirect_data();
+ void redirect();
+
+ void trailingHEADERS();
+
+ void duplicateRequestsWithAborts();
+
protected slots:
// Slots to listen to our in-process server:
void serverStarted(quint16 port);
@@ -228,6 +215,12 @@ void tst_Http2::init()
manager.reset(new QNetworkAccessManager);
}
+void tst_Http2::defaultQnamHttp2Configuration()
+{
+ // The configuration we also implicitly use in QNAM.
+ QCOMPARE(qt_defaultH2Configuration(), QNetworkRequest().http2Configuration());
+}
+
void tst_Http2::singleRequest_data()
{
QTest::addColumn<QNetworkRequest::Attribute>("h2Attribute");
@@ -258,7 +251,7 @@ void tst_Http2::singleRequest()
// we have to use TLS sockets (== private key) and thus suppress a
// keychain UI asking for permission to use a private key.
// Our CI has this, but somebody testing locally - will have a problem.
- qputenv("QT_SSL_USE_TEMPORARY_KEYCHAIN", QByteArray("1"));
+ qputenv("QT_SSL_USE_TEMPORARY_KEYCHAIN", "1");
auto envRollback = qScopeGuard([](){
qunsetenv("QT_SSL_USE_TEMPORARY_KEYCHAIN");
});
@@ -296,7 +289,7 @@ void tst_Http2::singleRequest()
runEventLoop();
STOP_ON_FAILURE
- QVERIFY(nRequests == 0);
+ QCOMPARE(nRequests, 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
@@ -305,10 +298,74 @@ void tst_Http2::singleRequest()
#if QT_CONFIG(ssl)
if (connectionType == H2Type::h2Alpn || connectionType == H2Type::h2Direct)
- QCOMPARE(encSpy.count(), 1);
+ QCOMPARE(encSpy.size(), 1);
#endif // QT_CONFIG(ssl)
}
+void tst_Http2::informationalRequest_data()
+{
+ QTest::addColumn<int>("statusCode");
+
+ // 'Clear text' that should always work, either via the protocol upgrade
+ // or as direct.
+ QTest::addRow("statusCode-100") << 100;
+ QTest::addRow("statusCode-125") << 125;
+ QTest::addRow("statusCode-150") << 150;
+ QTest::addRow("statusCode-175") << 175;
+}
+
+void tst_Http2::informationalRequest()
+{
+ clearHTTP2State();
+
+ serverPort = 0;
+ nRequests = 1;
+
+ ServerPtr srv(newServer(defaultServerSettings, defaultConnectionType()));
+
+ QFETCH(const int, statusCode);
+ srv->setInformationalStatusCode(statusCode);
+
+ QMetaObject::invokeMethod(srv.data(), "startServer", Qt::QueuedConnection);
+ runEventLoop();
+
+ QVERIFY(serverPort != 0);
+
+ auto url = requestUrl(defaultConnectionType());
+ url.setPath("/index.html");
+
+ QNetworkRequest request(url);
+ request.setAttribute(QNetworkRequest::Http2CleartextAllowedAttribute, true);
+
+ auto reply = manager->get(request);
+
+ connect(reply, &QNetworkReply::finished, this, &tst_Http2::replyFinished);
+ // Since we're using self-signed certificates,
+ // ignore SSL errors:
+ reply->ignoreSslErrors();
+
+ runEventLoop();
+ STOP_ON_FAILURE
+
+ QCOMPARE(nRequests, 0);
+ QVERIFY(prefaceOK);
+ QVERIFY(serverGotSettingsACK);
+
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QVERIFY(reply->isFinished());
+
+ const QVariant code(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute));
+
+ // We are discarding informational headers if the status code is in the range of
+ // 102-199 or if it is 100. As these header fields were part of the informational
+ // header used for this test case, we should not see them at this point and the
+ // status code should be 200.
+
+ QCOMPARE(code.value<int>(), 200);
+ QVERIFY(!reply->hasRawHeader("a_random_header_field"));
+ QVERIFY(!reply->hasRawHeader("another_random_header_field"));
+}
+
void tst_Http2::multipleRequests()
{
clearHTTP2State();
@@ -337,7 +394,7 @@ void tst_Http2::multipleRequests()
runEventLoop();
STOP_ON_FAILURE
- QVERIFY(nRequests == 0);
+ QCOMPARE(nRequests, 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
}
@@ -382,7 +439,7 @@ void tst_Http2::flowControlClientSide()
runEventLoop(120000);
STOP_ON_FAILURE
- QVERIFY(nRequests == 0);
+ QCOMPARE(nRequests, 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
QVERIFY(windowUpdates > 0);
@@ -423,7 +480,7 @@ void tst_Http2::flowControlServerSide()
runEventLoop(120000);
STOP_ON_FAILURE
- QVERIFY(nRequests == 0);
+ QCOMPARE(nRequests, 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
}
@@ -467,7 +524,7 @@ void tst_Http2::pushPromise()
runEventLoop();
STOP_ON_FAILURE
- QVERIFY(nRequests == 0);
+ QCOMPARE(nRequests, 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
@@ -593,7 +650,7 @@ void tst_Http2::earlyResponse()
runEventLoop();
STOP_ON_FAILURE
- QVERIFY(nRequests == 0);
+ QCOMPARE(nRequests, 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
}
@@ -650,7 +707,7 @@ void tst_Http2::connectToHost()
// we have to use TLS sockets (== private key) and thus suppress a
// keychain UI asking for permission to use a private key.
// Our CI has this, but somebody testing locally - will have a problem.
- qputenv("QT_SSL_USE_TEMPORARY_KEYCHAIN", QByteArray("1"));
+ qputenv("QT_SSL_USE_TEMPORARY_KEYCHAIN", "1");
auto envRollback = qScopeGuard([](){
qunsetenv("QT_SSL_USE_TEMPORARY_KEYCHAIN");
});
@@ -724,7 +781,7 @@ void tst_Http2::connectToHost()
runEventLoop();
STOP_ON_FAILURE
- QVERIFY(nRequests == 0);
+ QCOMPARE(nRequests, 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
@@ -748,7 +805,7 @@ void tst_Http2::maxFrameSize()
// we have to use TLS sockets (== private key) and thus suppress a
// keychain UI asking for permission to use a private key.
// Our CI has this, but somebody testing locally - will have a problem.
- qputenv("QT_SSL_USE_TEMPORARY_KEYCHAIN", QByteArray("1"));
+ qputenv("QT_SSL_USE_TEMPORARY_KEYCHAIN", "1");
auto envRollback = qScopeGuard([](){
qunsetenv("QT_SSL_USE_TEMPORARY_KEYCHAIN");
});
@@ -793,9 +850,9 @@ void tst_Http2::maxFrameSize()
// Normally, with a 16kb limit, our server would split such
// a response into 3 'DATA' frames (16kb + 16kb + 0|END_STREAM).
- QCOMPARE(frameCounter.count(), 1);
+ QCOMPARE(frameCounter.size(), 1);
- QVERIFY(nRequests == 0);
+ QCOMPARE(nRequests, 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
}
@@ -913,7 +970,7 @@ void tst_Http2::moreActivitySignals()
// we have to use TLS sockets (== private key) and thus suppress a
// keychain UI asking for permission to use a private key.
// Our CI has this, but somebody testing locally - will have a problem.
- qputenv("QT_SSL_USE_TEMPORARY_KEYCHAIN", QByteArray("1"));
+ qputenv("QT_SSL_USE_TEMPORARY_KEYCHAIN", "1");
auto envRollback = qScopeGuard([]() { qunsetenv("QT_SSL_USE_TEMPORARY_KEYCHAIN"); });
#endif
@@ -933,7 +990,7 @@ void tst_Http2::moreActivitySignals()
QSharedPointer<QNetworkReply> reply(manager->get(request));
nRequests = 1;
connect(reply.data(), &QNetworkReply::finished, this, &tst_Http2::replyFinished);
- QSignalSpy spy1(reply.data(), SIGNAL(socketConnecting()));
+ QSignalSpy spy1(reply.data(), SIGNAL(socketStartedConnecting()));
QSignalSpy spy2(reply.data(), SIGNAL(requestSent()));
QSignalSpy spy3(reply.data(), SIGNAL(metaDataChanged()));
// Since we're using self-signed certificates,
@@ -947,7 +1004,7 @@ void tst_Http2::moreActivitySignals()
runEventLoop();
STOP_ON_FAILURE
- QVERIFY(nRequests == 0);
+ QCOMPARE(nRequests, 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
@@ -1024,7 +1081,7 @@ void tst_Http2::contentEncoding()
// we have to use TLS sockets (== private key) and thus suppress a
// keychain UI asking for permission to use a private key.
// Our CI has this, but somebody testing locally - will have a problem.
- qputenv("QT_SSL_USE_TEMPORARY_KEYCHAIN", QByteArray("1"));
+ qputenv("QT_SSL_USE_TEMPORARY_KEYCHAIN", "1");
auto envRollback = qScopeGuard([]() { qunsetenv("QT_SSL_USE_TEMPORARY_KEYCHAIN"); });
#endif
@@ -1060,7 +1117,7 @@ void tst_Http2::contentEncoding()
runEventLoop();
STOP_ON_FAILURE
- QVERIFY(nRequests == 0);
+ QCOMPARE(nRequests, 0);
QVERIFY(prefaceOK);
QVERIFY(serverGotSettingsACK);
@@ -1073,13 +1130,18 @@ void tst_Http2::authenticationRequired_data()
{
QTest::addColumn<bool>("success");
QTest::addColumn<bool>("responseHEADOnly");
+ QTest::addColumn<bool>("withChallenge");
- QTest::addRow("failed-auth") << false << true;
- QTest::addRow("successful-auth") << true << true;
+ QTest::addRow("failed-auth") << false << true << true;
+ QTest::addRow("successful-auth") << true << true << true;
// Include a DATA frame in the response from the remote server. An example would be receiving a
// JSON response on a request along with the 401 error.
- QTest::addRow("failed-auth-with-response") << false << false;
- QTest::addRow("successful-auth-with-response") << true << false;
+ QTest::addRow("failed-auth-with-response") << false << false << true;
+ QTest::addRow("successful-auth-with-response") << true << false << true;
+
+ // Don't provide a challenge header. This is valid if you are actually just
+ // denied access for whatever reason.
+ QTest::addRow("no-challenge") << false << false << false;
}
void tst_Http2::authenticationRequired()
@@ -1090,10 +1152,15 @@ void tst_Http2::authenticationRequired()
POSTResponseHEADOnly = responseHEADOnly;
QFETCH(const bool, success);
+ QFETCH(const bool, withChallenge);
ServerPtr targetServer(newServer(defaultServerSettings, defaultConnectionType()));
- targetServer->setResponseBody("Hello");
- targetServer->setAuthenticationHeader("Basic realm=\"Shadow\"");
+ QByteArray responseBody = "Hello"_ba;
+ targetServer->setResponseBody(responseBody);
+ if (withChallenge)
+ targetServer->setAuthenticationHeader("Basic realm=\"Shadow\"");
+ else
+ targetServer->setAuthenticationRequired(true);
QMetaObject::invokeMethod(targetServer.data(), "startServer", Qt::QueuedConnection);
runEventLoop();
@@ -1129,24 +1196,30 @@ void tst_Http2::authenticationRequired()
receivedBody += body;
});
- if (success)
+ if (success) {
connect(reply.get(), &QNetworkReply::finished, this, &tst_Http2::replyFinished);
- else
- connect(reply.get(), &QNetworkReply::errorOccurred, this, &tst_Http2::replyFinishedWithError);
+ } else {
+ // Use queued connection so that the finished signal can be emitted and the isFinished
+ // property can be set.
+ connect(reply.get(), &QNetworkReply::errorOccurred, this,
+ &tst_Http2::replyFinishedWithError, Qt::QueuedConnection);
+ }
// Since we're using self-signed certificates,
// ignore SSL errors:
reply->ignoreSslErrors();
runEventLoop();
STOP_ON_FAILURE
+ QVERIFY2(reply->isFinished(),
+ "The reply should error out if authentication fails, or finish if it succeeds");
if (!success)
QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError);
// else: no error (is checked in tst_Http2::replyFinished)
- QVERIFY(authenticationRequested);
+ QVERIFY(authenticationRequested || !withChallenge);
- const auto isAuthenticated = [](QByteArray bv) {
+ const auto isAuthenticated = [](const QByteArray &bv) {
return bv == "Basic YWRtaW46YWRtaW4="; // admin:admin
};
// Get the "authorization" header out from the server and make sure it's as expected:
@@ -1154,6 +1227,16 @@ void tst_Http2::authenticationRequired()
QCOMPARE(isAuthenticated(reqAuthHeader), success);
if (success)
QCOMPARE(receivedBody, expectedBody);
+ if (responseHEADOnly) {
+ const QVariant contentLenHeader = reply->header(QNetworkRequest::ContentLengthHeader);
+ QVERIFY2(!contentLenHeader.isValid(), "We expect no DATA frames to be received");
+ QCOMPARE(reply->readAll(), QByteArray());
+ } else {
+ const qint32 contentLen = reply->header(QNetworkRequest::ContentLengthHeader).toInt();
+ QCOMPARE(contentLen, responseBody.length());
+ QCOMPARE(reply->bytesAvailable(), responseBody.length());
+ QCOMPARE(reply->readAll(), QByteArray("Hello"));
+ }
// In the `!success` case we need to wait for the server to emit this or it might cause issues
// in the next test running after this. In the `success` case we anyway expect it to have been
// received.
@@ -1226,6 +1309,156 @@ void tst_Http2::h2cAllowedAttribute()
}
}
+void tst_Http2::redirect_data()
+{
+ QTest::addColumn<int>("maxRedirects");
+ QTest::addColumn<int>("redirectCount");
+ QTest::addColumn<bool>("success");
+
+ QTest::addRow("1-redirects-none-allowed-failure") << 0 << 1 << false;
+ QTest::addRow("1-redirects-success") << 1 << 1 << true;
+ QTest::addRow("2-redirects-1-allowed-failure") << 1 << 2 << false;
+}
+
+void tst_Http2::redirect()
+{
+ QFETCH(const int, maxRedirects);
+ QFETCH(const int, redirectCount);
+ QFETCH(const bool, success);
+ const QByteArray redirectUrl = "/b.html"_ba;
+
+ clearHTTP2State();
+ serverPort = 0;
+
+ ServerPtr targetServer(newServer(defaultServerSettings, defaultConnectionType()));
+ targetServer->setRedirect(redirectUrl, redirectCount);
+
+ QMetaObject::invokeMethod(targetServer.data(), "startServer", Qt::QueuedConnection);
+ runEventLoop();
+
+ QVERIFY(serverPort != 0);
+
+ nRequests = 1;
+
+ auto originalUrl = requestUrl(defaultConnectionType());
+ auto url = originalUrl;
+ url.setPath("/index.html");
+ QNetworkRequest request(url);
+ request.setMaximumRedirectsAllowed(maxRedirects);
+ // H2C might be used on macOS where SecureTransport doesn't support server-side ALPN
+ qputenv("QT_NETWORK_H2C_ALLOWED", "1");
+ auto envCleanup = qScopeGuard([]() { qunsetenv("QT_NETWORK_H2C_ALLOWED"); });
+
+ QScopedPointer<QNetworkReply> reply;
+ reply.reset(manager->get(request));
+
+ if (success) {
+ connect(reply.get(), &QNetworkReply::finished, this, &tst_Http2::replyFinished);
+ } else {
+ connect(reply.get(), &QNetworkReply::errorOccurred, this,
+ &tst_Http2::replyFinishedWithError);
+ }
+
+ // Since we're using self-signed certificates,
+ // ignore SSL errors:
+ reply->ignoreSslErrors();
+
+ runEventLoop();
+ STOP_ON_FAILURE
+
+ QCOMPARE(nRequests, 0);
+ if (success) {
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->url().toString(),
+ originalUrl.resolved(QString::fromLatin1(redirectUrl)).toString());
+ } else if (maxRedirects < redirectCount) {
+ QCOMPARE(reply->error(), QNetworkReply::TooManyRedirectsError);
+ }
+ QTRY_VERIFY(serverGotSettingsACK);
+}
+
+void tst_Http2::trailingHEADERS()
+{
+ clearHTTP2State();
+ serverPort = 0;
+
+ ServerPtr targetServer(newServer(defaultServerSettings, defaultConnectionType()));
+ targetServer->setSendTrailingHEADERS(true);
+
+ QMetaObject::invokeMethod(targetServer.data(), "startServer", Qt::QueuedConnection);
+ runEventLoop();
+
+ QVERIFY(serverPort != 0);
+
+ nRequests = 1;
+
+ const auto url = requestUrl(defaultConnectionType());
+ QNetworkRequest request(url);
+ // H2C might be used on macOS where SecureTransport doesn't support server-side ALPN
+ request.setAttribute(QNetworkRequest::Http2CleartextAllowedAttribute, true);
+
+ std::unique_ptr<QNetworkReply> reply{ manager->get(request) };
+ connect(reply.get(), &QNetworkReply::finished, this, &tst_Http2::replyFinished);
+
+ // Since we're using self-signed certificates, ignore SSL errors:
+ reply->ignoreSslErrors();
+
+ runEventLoop();
+ STOP_ON_FAILURE
+
+ QCOMPARE(nRequests, 0);
+
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QTRY_VERIFY(serverGotSettingsACK);
+}
+
+void tst_Http2::duplicateRequestsWithAborts()
+{
+ clearHTTP2State();
+ serverPort = 0;
+
+ ServerPtr targetServer(newServer(defaultServerSettings, defaultConnectionType()));
+
+ QMetaObject::invokeMethod(targetServer.data(), "startServer", Qt::QueuedConnection);
+ runEventLoop();
+
+ QVERIFY(serverPort != 0);
+
+ constexpr int ExpectedSuccessfulRequests = 1;
+ nRequests = ExpectedSuccessfulRequests;
+
+ const auto url = requestUrl(defaultConnectionType());
+ QNetworkRequest request(url);
+ // H2C might be used on macOS where SecureTransport doesn't support server-side ALPN
+ request.setAttribute(QNetworkRequest::Http2CleartextAllowedAttribute, true);
+
+ qint32 finishedCount = 0;
+ auto connectToSlots = [this, &finishedCount](QNetworkReply *reply){
+ const auto onFinished = [&finishedCount, reply, this]() {
+ ++finishedCount;
+ if (reply->error() == QNetworkReply::NoError)
+ replyFinished();
+ };
+ connect(reply, &QNetworkReply::finished, reply, onFinished);
+ };
+
+ std::vector<QNetworkReply *> replies;
+ for (qint32 i = 0; i < 3; ++i) {
+ auto &reply = replies.emplace_back(manager->get(request));
+ connectToSlots(reply);
+ if (i < 2) // Delete and abort all-but-one:
+ reply->deleteLater();
+ // Since we're using self-signed certificates, ignore SSL errors:
+ reply->ignoreSslErrors();
+ }
+
+ runEventLoop();
+ STOP_ON_FAILURE
+
+ QCOMPARE(nRequests, 0);
+ QCOMPARE(finishedCount, ExpectedSuccessfulRequests);
+}
+
void tst_Http2::serverStarted(quint16 port)
{
serverPort = port;
diff --git a/tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt b/tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt
index 3958916232..37c3dbda8a 100644
--- a/tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt
+++ b/tests/auto/network/access/qabstractnetworkcache/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qabstractnetworkcache.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractnetworkcache Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractnetworkcache LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -13,11 +20,10 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qabstractnetworkcache
SOURCES
tst_qabstractnetworkcache.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
TESTDATA ${test_data}
- QT_TEST_SERVER_LIST "apache2" # special case
+ QT_TEST_SERVER_LIST "apache2"
)
-#### Keys ignored in scope 1:.:.:qabstractnetworkcache.pro:<TRUE>:
# QT_TEST_SERVER_LIST = "apache2"
diff --git a/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp b/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp
index fc21569b0b..9bdef9bbe1 100644
--- a/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.cpp
+++ b/tests/auto/network/access/qabstractnetworkcache/tst_qabstractnetworkcache.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 <QTemporaryDir>
#include <QTest>
@@ -290,7 +265,7 @@ void tst_QAbstractNetworkCache::runTest()
// prime the cache
QNetworkReply *reply = manager.get(request);
QSignalSpy downloaded1(reply, SIGNAL(finished()));
- QTRY_COMPARE(downloaded1.count(), 1);
+ QTRY_COMPARE(downloaded1.size(), 1);
QCOMPARE(diskCache->gotData, false);
QByteArray goodData = reply->readAll();
@@ -299,7 +274,7 @@ void tst_QAbstractNetworkCache::runTest()
// should be in the cache now
QNetworkReply *reply2 = manager.get(request);
QSignalSpy downloaded2(reply2, SIGNAL(finished()));
- QTRY_COMPARE(downloaded2.count(), 1);
+ QTRY_COMPARE(downloaded2.size(), 1);
QByteArray secondData = reply2->readAll();
if (!fetchFromCache && cacheLoadControl == QNetworkRequest::AlwaysCache) {
@@ -388,7 +363,7 @@ void tst_QAbstractNetworkCache::deleteCache()
QNetworkReply *reply = manager.get(request);
QSignalSpy downloaded1(reply, SIGNAL(finished()));
manager.setCache(0);
- QTRY_COMPARE(downloaded1.count(), 1);
+ QTRY_COMPARE(downloaded1.size(), 1);
}
diff --git a/tests/auto/network/access/qdecompresshelper/CMakeLists.txt b/tests/auto/network/access/qdecompresshelper/CMakeLists.txt
index 49fd91db0a..09317ca3eb 100644
--- a/tests/auto/network/access/qdecompresshelper/CMakeLists.txt
+++ b/tests/auto/network/access/qdecompresshelper/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qdecompresshelper.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdecompresshelper Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdecompresshelper LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdecompresshelper
SOURCES
gzip.rcc.cpp
@@ -11,10 +18,7 @@ qt_internal_add_test(tst_qdecompresshelper
tst_qdecompresshelper.cpp
zstandard.rcc.cpp
DEFINES
- SRC_DIR=${CMAKE_CURRENT_SOURCE_DIR} # special case
- PUBLIC_LIBRARIES
+ SRC_DIR=${CMAKE_CURRENT_SOURCE_DIR}
+ LIBRARIES
Qt::NetworkPrivate
)
-
-#### Keys ignored in scope 1:.:.:qdecompresshelper.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/auto/network/access/qdecompresshelper/tst_qdecompresshelper.cpp b/tests/auto/network/access/qdecompresshelper/tst_qdecompresshelper.cpp
index 321d373a78..cd5a52c209 100644
--- a/tests/auto/network/access/qdecompresshelper/tst_qdecompresshelper.cpp
+++ b/tests/auto/network/access/qdecompresshelper/tst_qdecompresshelper.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
@@ -344,6 +319,9 @@ void tst_QDecompressHelper::countAheadPartialRead()
void tst_QDecompressHelper::decompressBigData_data()
{
+#if defined(QT_ASAN_ENABLED)
+ QSKIP("Tests are too slow with asan enabled");
+#endif
QTest::addColumn<QByteArray>("encoding");
QTest::addColumn<QString>("path");
QTest::addColumn<qint64>("size");
@@ -432,17 +410,25 @@ void tst_QDecompressHelper::archiveBomb()
QVERIFY(bytesRead <= output.size());
QVERIFY(helper.isValid());
- if (shouldFail)
+ if (shouldFail) {
QCOMPARE(bytesRead, -1);
- else
+ QVERIFY(!helper.errorString().isEmpty());
+ } else {
QVERIFY(bytesRead > 0);
+ QVERIFY(helper.errorString().isEmpty());
+ }
}
void tst_QDecompressHelper::bigZlib()
{
#if QT_POINTER_SIZE < 8
QSKIP("This cannot be tested on 32-bit systems");
+#elif defined(QT_ASAN_ENABLED)
+ QSKIP("Test is too slow with asan enabled");
#else
+# ifndef QT_NO_EXCEPTIONS
+ try {
+# endif
// ZLib uses unsigned integers as their size type internally which creates some special
// cases in the internal code that should be tested!
QFile file(":/5GiB.txt.inflate");
@@ -462,6 +448,11 @@ void tst_QDecompressHelper::bigZlib()
QByteArray output(expected + 42, Qt::Uninitialized);
const qsizetype size = helper.read(output.data(), output.size());
QCOMPARE(size, expected);
+# ifndef QT_NO_EXCEPTIONS
+ } catch (const std::bad_alloc &) {
+ QSKIP("Encountered most likely OOM.");
+ }
+# endif
#endif
}
diff --git a/tests/auto/network/access/qhttp2connection/CMakeLists.txt b/tests/auto/network/access/qhttp2connection/CMakeLists.txt
new file mode 100644
index 0000000000..9a6e7a064e
--- /dev/null
+++ b/tests/auto/network/access/qhttp2connection/CMakeLists.txt
@@ -0,0 +1,16 @@
+# Copyright (C) 2023 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_qhttp2connection LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qhttp2connection
+ SOURCES
+ tst_qhttp2connection.cpp
+ LIBRARIES
+ Qt::NetworkPrivate
+ Qt::Test
+)
diff --git a/tests/auto/network/access/qhttp2connection/tst_qhttp2connection.cpp b/tests/auto/network/access/qhttp2connection/tst_qhttp2connection.cpp
new file mode 100644
index 0000000000..b9d5219ae9
--- /dev/null
+++ b/tests/auto/network/access/qhttp2connection/tst_qhttp2connection.cpp
@@ -0,0 +1,397 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtTest/QTest>
+#include <QtTest/QSignalSpy>
+
+#include <QtNetwork/private/qhttp2connection_p.h>
+#include <QtNetwork/private/hpack_p.h>
+#include <QtNetwork/private/bitstreams_p.h>
+
+#include <limits>
+
+using namespace Qt::StringLiterals;
+
+class tst_QHttp2Connection : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void construct();
+ void constructStream();
+ void testSETTINGSFrame();
+ void testPING();
+ void connectToServer();
+ void WINDOW_UPDATE();
+
+private:
+ enum PeerType { Client, Server };
+ [[nodiscard]] auto makeFakeConnectedSockets();
+ [[nodiscard]] auto getRequiredHeaders();
+ [[nodiscard]] QHttp2Connection *makeHttp2Connection(QIODevice *socket,
+ QHttp2Configuration config, PeerType type);
+ [[nodiscard]] bool waitForSettingsExchange(QHttp2Connection *client, QHttp2Connection *server);
+};
+
+class IOBuffer : public QIODevice
+{
+ Q_OBJECT
+public:
+ IOBuffer(QObject *parent, std::shared_ptr<QBuffer> _in, std::shared_ptr<QBuffer> _out)
+ : QIODevice(parent), in(std::move(_in)), out(std::move(_out))
+ {
+ connect(in.get(), &QIODevice::readyRead, this, &IOBuffer::readyRead);
+ connect(out.get(), &QIODevice::bytesWritten, this, &IOBuffer::bytesWritten);
+ connect(out.get(), &QIODevice::aboutToClose, this, &IOBuffer::readChannelFinished);
+ connect(out.get(), &QIODevice::aboutToClose, this, &IOBuffer::aboutToClose);
+ }
+
+ bool open(OpenMode mode) override
+ {
+ QIODevice::open(mode);
+ Q_ASSERT(in->isOpen());
+ Q_ASSERT(out->isOpen());
+ return false;
+ }
+
+ bool isSequential() const override { return true; }
+
+ qint64 bytesAvailable() const override { return in->pos() - readHead; }
+ qint64 bytesToWrite() const override { return 0; }
+
+ qint64 readData(char *data, qint64 maxlen) override
+ {
+ qint64 temp = in->pos();
+ in->seek(readHead);
+ qint64 res = in->read(data, std::min(maxlen, temp - readHead));
+ readHead += res;
+ if (readHead == temp) {
+ // Reached end of buffer, reset
+ in->seek(0);
+ in->buffer().resize(0);
+ readHead = 0;
+ } else {
+ in->seek(temp);
+ }
+ return res;
+ }
+
+ qint64 writeData(const char *data, qint64 len) override
+ {
+ return out->write(data, len);
+ }
+
+ std::shared_ptr<QBuffer> in;
+ std::shared_ptr<QBuffer> out;
+
+ qint64 readHead = 0;
+};
+
+auto tst_QHttp2Connection::makeFakeConnectedSockets()
+{
+ auto clientIn = std::make_shared<QBuffer>();
+ auto serverIn = std::make_shared<QBuffer>();
+ clientIn->open(QIODevice::ReadWrite);
+ serverIn->open(QIODevice::ReadWrite);
+
+ auto client = std::make_unique<IOBuffer>(this, clientIn, serverIn);
+ auto server = std::make_unique<IOBuffer>(this, std::move(serverIn), std::move(clientIn));
+
+ client->open(QIODevice::ReadWrite);
+ server->open(QIODevice::ReadWrite);
+
+ return std::pair{ std::move(client), std::move(server) };
+}
+
+auto tst_QHttp2Connection::getRequiredHeaders()
+{
+ return HPack::HttpHeader{
+ { ":authority", "example.com" },
+ { ":method", "GET" },
+ { ":path", "/" },
+ { ":scheme", "https" },
+ };
+}
+
+QHttp2Connection *tst_QHttp2Connection::makeHttp2Connection(QIODevice *socket,
+ QHttp2Configuration config,
+ PeerType type)
+{
+ QHttp2Connection *connection = nullptr;
+ if (type == PeerType::Server)
+ connection = QHttp2Connection::createDirectServerConnection(socket, config);
+ else
+ connection = QHttp2Connection::createDirectConnection(socket, config);
+ connect(socket, &QIODevice::readyRead, connection, &QHttp2Connection::handleReadyRead);
+ return connection;
+}
+
+bool tst_QHttp2Connection::waitForSettingsExchange(QHttp2Connection *client,
+ QHttp2Connection *server)
+{
+ bool settingsFrameReceived = false;
+ bool serverSettingsFrameReceived = false;
+
+ QMetaObject::Connection c = connect(client, &QHttp2Connection::settingsFrameReceived, client,
+ [&settingsFrameReceived]() {
+ settingsFrameReceived = true;
+ });
+ QMetaObject::Connection s = connect(server, &QHttp2Connection::settingsFrameReceived, server,
+ [&serverSettingsFrameReceived]() {
+ serverSettingsFrameReceived = true;
+ });
+
+ client->handleReadyRead(); // handle incoming frames, send response
+
+ bool success = QTest::qWaitFor([&]() {
+ return settingsFrameReceived && serverSettingsFrameReceived;
+ });
+
+ disconnect(c);
+ disconnect(s);
+
+ return success;
+}
+
+void tst_QHttp2Connection::construct()
+{
+ QBuffer buffer;
+ buffer.open(QIODevice::ReadWrite);
+ auto *connection = QHttp2Connection::createDirectConnection(&buffer, {});
+ QVERIFY(!connection->isGoingAway());
+ QCOMPARE(connection->maxConcurrentStreams(), 100u);
+ QCOMPARE(connection->maxHeaderListSize(), std::numeric_limits<quint32>::max());
+ QVERIFY(!connection->isUpgradedConnection());
+ QVERIFY(!connection->getStream(1)); // No stream has been created yet
+
+ auto *upgradedConnection = QHttp2Connection::createUpgradedConnection(&buffer, {});
+ QVERIFY(upgradedConnection->isUpgradedConnection());
+ // Stream 1 is created by default for an upgraded connection
+ QVERIFY(upgradedConnection->getStream(1));
+}
+
+void tst_QHttp2Connection::constructStream()
+{
+ QBuffer buffer;
+ buffer.open(QIODevice::ReadWrite);
+ auto connection = QHttp2Connection::createDirectConnection(&buffer, {});
+ QHttp2Stream *stream = connection->createStream().unwrap();
+ QVERIFY(stream);
+ QCOMPARE(stream->isPromisedStream(), false);
+ QCOMPARE(stream->isActive(), false);
+ QCOMPARE(stream->RST_STREAM_code(), 0u);
+ QCOMPARE(stream->streamID(), 1u);
+ QCOMPARE(stream->receivedHeaders(), {});
+ QCOMPARE(stream->state(), QHttp2Stream::State::Idle);
+ QCOMPARE(stream->isUploadBlocked(), false);
+ QCOMPARE(stream->isUploadingDATA(), false);
+}
+
+void tst_QHttp2Connection::testSETTINGSFrame()
+{
+ constexpr qint32 PrefaceLength = 24;
+ QBuffer buffer;
+ buffer.open(QIODevice::ReadWrite);
+ QHttp2Configuration config;
+ constexpr quint32 MaxFrameSize = 16394;
+ constexpr bool ServerPushEnabled = false;
+ constexpr quint32 StreamReceiveWindowSize = 50000;
+ constexpr quint32 SessionReceiveWindowSize = 50001;
+ config.setMaxFrameSize(MaxFrameSize);
+ config.setServerPushEnabled(ServerPushEnabled);
+ config.setStreamReceiveWindowSize(StreamReceiveWindowSize);
+ config.setSessionReceiveWindowSize(SessionReceiveWindowSize);
+ auto connection = QHttp2Connection::createDirectConnection(&buffer, config);
+ Q_UNUSED(connection);
+ QCOMPARE_GE(buffer.size(), PrefaceLength);
+
+ // Preface
+ QByteArray preface = buffer.data().first(PrefaceLength);
+ QCOMPARE(preface, "PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n");
+
+ // SETTINGS
+ buffer.seek(PrefaceLength);
+ const quint32 maxSize = buffer.size() - PrefaceLength;
+ Http2::FrameReader reader;
+ Http2::FrameStatus status = reader.read(buffer);
+ QCOMPARE(status, Http2::FrameStatus::goodFrame);
+ Http2::Frame f = reader.inboundFrame();
+ QCOMPARE(f.type(), Http2::FrameType::SETTINGS);
+ QCOMPARE_LT(f.payloadSize(), maxSize);
+
+ const qint32 settingsReceived = f.dataSize() / 6;
+ QCOMPARE_GT(settingsReceived, 0);
+ QCOMPARE_LE(settingsReceived, 6);
+
+ struct ExpectedSetting
+ {
+ Http2::Settings identifier;
+ quint32 value;
+ };
+ // Commented-out settings are not sent since they are defaults
+ ExpectedSetting expectedSettings[]{
+ // { Http2::Settings::HEADER_TABLE_SIZE_ID, HPack::FieldLookupTable::DefaultSize },
+ { Http2::Settings::ENABLE_PUSH_ID, ServerPushEnabled ? 1 : 0 },
+ // { Http2::Settings::MAX_CONCURRENT_STREAMS_ID, Http2::maxConcurrentStreams },
+ { Http2::Settings::INITIAL_WINDOW_SIZE_ID, StreamReceiveWindowSize },
+ { Http2::Settings::MAX_FRAME_SIZE_ID, MaxFrameSize },
+ // { Http2::Settings::MAX_HEADER_LIST_SIZE_ID, ??? },
+ };
+
+ QCOMPARE(quint32(settingsReceived), std::size(expectedSettings));
+ for (qint32 i = 0; i < settingsReceived; ++i) {
+ const uchar *it = f.dataBegin() + i * 6;
+ const quint16 ident = qFromBigEndian<quint16>(it);
+ const quint32 intVal = qFromBigEndian<quint32>(it + 2);
+
+ ExpectedSetting expectedSetting = expectedSettings[i];
+ QVERIFY2(ident == quint16(expectedSetting.identifier),
+ qPrintable("ident: %1, expected: %2, index: %3"_L1
+ .arg(QString::number(ident),
+ QString::number(quint16(expectedSetting.identifier)),
+ QString::number(i))));
+ QVERIFY2(intVal == expectedSetting.value,
+ qPrintable("intVal: %1, expected: %2, index: %3"_L1
+ .arg(QString::number(intVal),
+ QString::number(expectedSetting.value),
+ QString::number(i))));
+ }
+}
+
+void tst_QHttp2Connection::testPING()
+{
+ auto [client, server] = makeFakeConnectedSockets();
+ auto connection = makeHttp2Connection(client.get(), {}, Client);
+ auto serverConnection = makeHttp2Connection(server.get(), {}, Server);
+
+ QVERIFY(waitForSettingsExchange(connection, serverConnection));
+
+ QSignalSpy serverPingSpy{ serverConnection, &QHttp2Connection::pingFrameRecived };
+ QSignalSpy clientPingSpy{ connection, &QHttp2Connection::pingFrameRecived };
+
+ QByteArray data{"pingpong"};
+ connection->sendPing(data);
+
+ QVERIFY(serverPingSpy.wait());
+ QVERIFY(clientPingSpy.wait());
+
+ QCOMPARE(serverPingSpy.last().at(0).toInt(), int(QHttp2Connection::PingState::Ping));
+ QCOMPARE(clientPingSpy.last().at(0).toInt(), int(QHttp2Connection::PingState::PongSignatureIdentical));
+
+ serverConnection->sendPing();
+
+ QVERIFY(clientPingSpy.wait());
+ QVERIFY(serverPingSpy.wait());
+
+ QCOMPARE(clientPingSpy.last().at(0).toInt(), int(QHttp2Connection::PingState::Ping));
+ QCOMPARE(serverPingSpy.last().at(0).toInt(), int(QHttp2Connection::PingState::PongSignatureIdentical));
+}
+
+void tst_QHttp2Connection::connectToServer()
+{
+ auto [client, server] = makeFakeConnectedSockets();
+ auto connection = makeHttp2Connection(client.get(), {}, Client);
+ auto serverConnection = makeHttp2Connection(server.get(), {}, Server);
+
+ QVERIFY(waitForSettingsExchange(connection, serverConnection));
+
+ QSignalSpy newIncomingStreamSpy{ serverConnection, &QHttp2Connection::newIncomingStream };
+ QSignalSpy clientIncomingStreamSpy{ connection, &QHttp2Connection::newIncomingStream };
+
+ QHttp2Stream *clientStream = connection->createStream().unwrap();
+ QSignalSpy clientHeaderReceivedSpy{ clientStream, &QHttp2Stream::headersReceived };
+ QVERIFY(clientStream);
+ HPack::HttpHeader headers = getRequiredHeaders();
+ clientStream->sendHEADERS(headers, false);
+
+ QVERIFY(newIncomingStreamSpy.wait());
+ auto *serverStream = newIncomingStreamSpy.front().front().value<QHttp2Stream *>();
+ QVERIFY(serverStream);
+ const HPack::HttpHeader ExpectedResponseHeaders{ { ":status", "200" } };
+ serverStream->sendHEADERS(ExpectedResponseHeaders, true);
+
+ QVERIFY(clientHeaderReceivedSpy.wait());
+ const HPack::HttpHeader
+ headersReceived = clientHeaderReceivedSpy.front().front().value<HPack::HttpHeader>();
+ QCOMPARE(headersReceived, ExpectedResponseHeaders);
+
+ QCOMPARE(clientIncomingStreamSpy.count(), 0);
+}
+
+void tst_QHttp2Connection::WINDOW_UPDATE()
+{
+ auto [client, server] = makeFakeConnectedSockets();
+ auto connection = makeHttp2Connection(client.get(), {}, Client);
+
+ QHttp2Configuration config;
+ config.setStreamReceiveWindowSize(1024); // Small window on server to provoke WINDOW_UPDATE
+ auto serverConnection = makeHttp2Connection(server.get(), config, Server);
+
+ QVERIFY(waitForSettingsExchange(connection, serverConnection));
+
+ QSignalSpy newIncomingStreamSpy{ serverConnection, &QHttp2Connection::newIncomingStream };
+
+ QHttp2Stream *clientStream = connection->createStream().unwrap();
+ QSignalSpy clientHeaderReceivedSpy{ clientStream, &QHttp2Stream::headersReceived };
+ QSignalSpy clientDataReceivedSpy{ clientStream, &QHttp2Stream::dataReceived };
+ QVERIFY(clientStream);
+ HPack::HttpHeader expectedRequestHeaders = HPack::HttpHeader{
+ { ":authority", "example.com" },
+ { ":method", "POST" },
+ { ":path", "/" },
+ { ":scheme", "https" },
+ };
+ clientStream->sendHEADERS(expectedRequestHeaders, false);
+
+ QVERIFY(newIncomingStreamSpy.wait());
+ auto *serverStream = newIncomingStreamSpy.front().front().value<QHttp2Stream *>();
+ QVERIFY(serverStream);
+ QSignalSpy serverDataReceivedSpy{ serverStream, &QHttp2Stream::dataReceived };
+
+ // Since a stream is only opened on the remote side when the header is received,
+ // we can check the headers now immediately
+ QCOMPARE(serverStream->receivedHeaders(), expectedRequestHeaders);
+
+ QBuffer *buffer = new QBuffer(clientStream);
+ QByteArray uploadedData = "Hello World"_ba.repeated(1000);
+ buffer->setData(uploadedData);
+ buffer->open(QIODevice::ReadWrite);
+ clientStream->sendDATA(buffer, true);
+
+ bool streamEnd = false;
+ QByteArray serverReceivedData;
+ while (!streamEnd) { // The window is too small to receive all data at once, so loop
+ QVERIFY(serverDataReceivedSpy.wait());
+ auto latestEmission = serverDataReceivedSpy.back();
+ serverReceivedData += latestEmission.front().value<QByteArray>();
+ streamEnd = latestEmission.back().value<bool>();
+ }
+ QCOMPARE(serverReceivedData.size(), uploadedData.size());
+ QCOMPARE(serverReceivedData, uploadedData);
+
+ QCOMPARE(clientStream->state(), QHttp2Stream::State::HalfClosedLocal);
+ QCOMPARE(serverStream->state(), QHttp2Stream::State::HalfClosedRemote);
+
+ const HPack::HttpHeader ExpectedResponseHeaders{ { ":status", "200" } };
+ serverStream->sendHEADERS(ExpectedResponseHeaders, false);
+ QBuffer *serverBuffer = new QBuffer(serverStream);
+ serverBuffer->setData(uploadedData);
+ serverBuffer->open(QIODevice::ReadWrite);
+ serverStream->sendDATA(serverBuffer, true);
+
+ QVERIFY(clientHeaderReceivedSpy.wait());
+ const HPack::HttpHeader
+ headersReceived = clientHeaderReceivedSpy.front().front().value<HPack::HttpHeader>();
+ QCOMPARE(headersReceived, ExpectedResponseHeaders);
+
+ QTRY_COMPARE_GT(clientDataReceivedSpy.count(), 0);
+ QCOMPARE(clientDataReceivedSpy.count(), 1); // Only one DATA frame since our window is larger
+ QCOMPARE(clientDataReceivedSpy.front().front().value<QByteArray>(), uploadedData);
+
+ QCOMPARE(clientStream->state(), QHttp2Stream::State::Closed);
+ QCOMPARE(serverStream->state(), QHttp2Stream::State::Closed);
+}
+
+QTEST_MAIN(tst_QHttp2Connection)
+
+#include "tst_qhttp2connection.moc"
diff --git a/tests/auto/network/access/qhttpheaderparser/CMakeLists.txt b/tests/auto/network/access/qhttpheaderparser/CMakeLists.txt
new file mode 100644
index 0000000000..50deeb3e56
--- /dev/null
+++ b/tests/auto/network/access/qhttpheaderparser/CMakeLists.txt
@@ -0,0 +1,19 @@
+# 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_qhttpheaderparser LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+if(NOT QT_FEATURE_private_tests)
+ return()
+endif()
+
+qt_internal_add_test(tst_qhttpheaderparser
+ SOURCES
+ tst_qhttpheaderparser.cpp
+ LIBRARIES
+ Qt::NetworkPrivate
+)
diff --git a/tests/auto/network/access/qhttpheaderparser/tst_qhttpheaderparser.cpp b/tests/auto/network/access/qhttpheaderparser/tst_qhttpheaderparser.cpp
new file mode 100644
index 0000000000..9ba889fdb3
--- /dev/null
+++ b/tests/auto/network/access/qhttpheaderparser/tst_qhttpheaderparser.cpp
@@ -0,0 +1,94 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtTest/qtest.h>
+#include <QObject>
+#include <QtNetwork/private/qhttpheaderparser_p.h>
+
+class tst_QHttpHeaderParser : public QObject
+{
+ Q_OBJECT
+private Q_SLOTS:
+ void constructor();
+ void limitsSetters();
+
+ void adjustableLimits_data();
+ void adjustableLimits();
+
+ // general parsing tests can be found in tst_QHttpNetworkReply
+};
+
+void tst_QHttpHeaderParser::constructor()
+{
+ QHttpHeaderParser parser;
+ QCOMPARE(parser.getStatusCode(), 100);
+ QCOMPARE(parser.getMajorVersion(), 0);
+ QCOMPARE(parser.getMinorVersion(), 0);
+ QCOMPARE(parser.getReasonPhrase(), QByteArray());
+ QCOMPARE(parser.combinedHeaderValue("Location"), QByteArray());
+ QCOMPARE(parser.maxHeaderFields(), HeaderConstants::MAX_HEADER_FIELDS);
+ QCOMPARE(parser.maxHeaderFieldSize(), HeaderConstants::MAX_HEADER_FIELD_SIZE);
+ QCOMPARE(parser.maxTotalHeaderSize(), HeaderConstants::MAX_TOTAL_HEADER_SIZE);
+}
+
+void tst_QHttpHeaderParser::limitsSetters()
+{
+ QHttpHeaderParser parser;
+ parser.setMaxHeaderFields(10);
+ QCOMPARE(parser.maxHeaderFields(), 10);
+ parser.setMaxHeaderFieldSize(10);
+ QCOMPARE(parser.maxHeaderFieldSize(), 10);
+ parser.setMaxTotalHeaderSize(10);
+ QCOMPARE(parser.maxTotalHeaderSize(), 10);
+}
+
+void tst_QHttpHeaderParser::adjustableLimits_data()
+{
+ QTest::addColumn<qsizetype>("maxFieldCount");
+ QTest::addColumn<qsizetype>("maxFieldSize");
+ QTest::addColumn<qsizetype>("maxTotalSize");
+ QTest::addColumn<QByteArray>("headers");
+ QTest::addColumn<bool>("success");
+
+ // We pretend -1 means to not set a new limit.
+
+ QTest::newRow("maxFieldCount-pass") << qsizetype(10) << qsizetype(-1) << qsizetype(-1)
+ << QByteArray("Location: hi\r\n\r\n") << true;
+ QTest::newRow("maxFieldCount-fail") << qsizetype(1) << qsizetype(-1) << qsizetype(-1)
+ << QByteArray("Location: hi\r\nCookie: a\r\n\r\n") << false;
+
+ QTest::newRow("maxFieldSize-pass") << qsizetype(-1) << qsizetype(50) << qsizetype(-1)
+ << QByteArray("Location: hi\r\n\r\n") << true;
+ constexpr char cookieHeader[] = "Cookie: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ static_assert(sizeof(cookieHeader) - 1 == 51);
+ QByteArray fullHeader = QByteArray("Location: hi\r\n") + cookieHeader;
+ QTest::newRow("maxFieldSize-fail") << qsizetype(-1) << qsizetype(50) << qsizetype(-1)
+ << (fullHeader + "\r\n\r\n") << false;
+
+ QTest::newRow("maxTotalSize-pass") << qsizetype(-1) << qsizetype(-1) << qsizetype(50)
+ << QByteArray("Location: hi\r\n\r\n") << true;
+ QTest::newRow("maxTotalSize-fail") << qsizetype(-1) << qsizetype(-1) << qsizetype(10)
+ << QByteArray("Location: hi\r\n\r\n") << false;
+}
+
+void tst_QHttpHeaderParser::adjustableLimits()
+{
+ QFETCH(qsizetype, maxFieldCount);
+ QFETCH(qsizetype, maxFieldSize);
+ QFETCH(qsizetype, maxTotalSize);
+ QFETCH(QByteArray, headers);
+ QFETCH(bool, success);
+
+ QHttpHeaderParser parser;
+ if (maxFieldCount != qsizetype(-1))
+ parser.setMaxHeaderFields(maxFieldCount);
+ if (maxFieldSize != qsizetype(-1))
+ parser.setMaxHeaderFieldSize(maxFieldSize);
+ if (maxTotalSize != qsizetype(-1))
+ parser.setMaxTotalHeaderSize(maxTotalSize);
+
+ QCOMPARE(parser.parseHeaders(headers), success);
+}
+
+QTEST_MAIN(tst_QHttpHeaderParser)
+#include "tst_qhttpheaderparser.moc"
diff --git a/tests/auto/network/access/qhttpheaders/CMakeLists.txt b/tests/auto/network/access/qhttpheaders/CMakeLists.txt
new file mode 100644
index 0000000000..0de1f96c67
--- /dev/null
+++ b/tests/auto/network/access/qhttpheaders/CMakeLists.txt
@@ -0,0 +1,16 @@
+# Copyright (C) 2023 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_qhttpheaders LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qhttpheaders
+ SOURCES
+ tst_qhttpheaders.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::Network
+)
diff --git a/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp b/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp
new file mode 100644
index 0000000000..457d30feeb
--- /dev/null
+++ b/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp
@@ -0,0 +1,552 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtNetwork/qhttpheaders.h>
+
+#include <QtTest/qtest.h>
+
+#include <QtCore/qmap.h>
+#include <QtCore/qset.h>
+
+using namespace Qt::StringLiterals;
+
+class tst_QHttpHeaders : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void constructors();
+ void accessors();
+ void wellKnownHeader();
+ void headerNameField();
+ void headerValueField();
+ void valueEncoding();
+ void replaceOrAppend();
+
+private:
+ static constexpr QAnyStringView n1{"name1"};
+ static constexpr QAnyStringView n2{"name2"};
+ static constexpr QAnyStringView n3{"name3"};
+ static constexpr QAnyStringView v1{"value1"};
+ static constexpr QAnyStringView v2{"value2"};
+ static constexpr QAnyStringView v3{"value3"};
+ static constexpr QAnyStringView N1{"NAME1"};
+ static constexpr QAnyStringView N2{"NAME2"};
+ static constexpr QAnyStringView N3{"NAME3"};
+ static constexpr QAnyStringView V1{"VALUE1"};
+ static constexpr QAnyStringView V2{"VALUE2"};
+ static constexpr QAnyStringView V3{"VALUE3"};
+};
+
+void tst_QHttpHeaders::constructors()
+{
+ // Default ctor
+ QHttpHeaders h1;
+ QVERIFY(h1.isEmpty());
+
+ // Copy ctor
+ QHttpHeaders h2(h1);
+ QCOMPARE(h2.toListOfPairs(), h1.toListOfPairs());
+
+ // Copy assignment
+ QHttpHeaders h3;
+ h3 = h1;
+ QCOMPARE(h3.toListOfPairs(), h1.toListOfPairs());
+
+ // Move assignment
+ QHttpHeaders h4;
+ h4 = std::move(h2);
+ QCOMPARE(h4.toListOfPairs(), h1.toListOfPairs());
+
+ // Move ctor
+ QHttpHeaders h5(std::move(h4));
+ QCOMPARE(h5.toListOfPairs(), h1.toListOfPairs());
+
+ // Constructors that are counterparts to 'toXXX()' conversion getters
+ const QByteArray nb1{"name1"};
+ const QByteArray nb2{"name2"};
+ const QByteArray nv1{"value1"};
+ const QByteArray nv2{"value2"};
+ // Initialize three QHttpHeaders with similar content, and verify that they have
+ // similar header entries
+#define CONTAINS_HEADER(NAME, VALUE) \
+ QVERIFY(hlist.contains(NAME) && hmap.contains(NAME) && hhash.contains(NAME)); \
+ QCOMPARE(hlist.combinedValue(NAME), VALUE); \
+ QCOMPARE(hmap.combinedValue(NAME), VALUE); \
+ QCOMPARE(hhash.combinedValue(NAME), VALUE); \
+
+ QList<std::pair<QByteArray, QByteArray>> list{{nb1, nv1}, {nb2, nv2}, {nb2, nv2}};
+ QMultiMap<QByteArray, QByteArray> map{{nb1, nv1}, {nb2, nv2}, {nb2, nv2}};
+ QMultiHash<QByteArray, QByteArray> hash{{nb1, nv1}, {nb2, nv2}, {nb2, nv2}};
+ QHttpHeaders hlist = QHttpHeaders::fromListOfPairs(list);
+ QHttpHeaders hmap = QHttpHeaders::fromMultiMap(map);
+ QHttpHeaders hhash = QHttpHeaders::fromMultiHash(hash);
+ CONTAINS_HEADER(nb1, v1);
+ CONTAINS_HEADER(nb2, nv2 + ", " + nv2)
+#undef CONTAINS_HEADER
+}
+
+void tst_QHttpHeaders::accessors()
+{
+ QHttpHeaders h1;
+
+ // isEmpty(), clear(), size()
+ h1.append(n1,v1);
+ QVERIFY(!h1.isEmpty());
+ QCOMPARE(h1.size(), 1);
+ QVERIFY(h1.append(n1, v1));
+ QCOMPARE(h1.size(), 2);
+ h1.insert(0, n1, v1);
+ QCOMPARE(h1.size(), 3);
+ h1.clear();
+ QVERIFY(h1.isEmpty());
+
+ // contains()
+ h1.append(n1, v1);
+ QVERIFY(h1.contains(n1));
+ QVERIFY(h1.contains(N1));
+ QVERIFY(!h1.contains(n2));
+ QVERIFY(!h1.contains(QHttpHeaders::WellKnownHeader::Allow));
+ h1.append(QHttpHeaders::WellKnownHeader::Accept, "nothing");
+ QVERIFY(h1.contains(QHttpHeaders::WellKnownHeader::Accept));
+ QVERIFY(h1.contains("accept"));
+
+ // values()/value()
+#define EXISTS_NOT(H, N) do { \
+ QVERIFY(!H.contains(N)); \
+ QCOMPARE(H.value(N, "ENOENT"), "ENOENT"); \
+ const auto values = H.values(N); \
+ QVERIFY(values.isEmpty()); \
+ QVERIFY(H.combinedValue(N).isNull()); \
+ } while (false)
+
+#define EXISTS_N_TIMES(X, H, N, ...) do { \
+ const std::array expected = { __VA_ARGS__ }; \
+ static_assert(std::tuple_size_v<decltype(expected)> == X); \
+ QVERIFY(H.contains(N)); \
+ QCOMPARE(H.value(N, "ENOENT"), expected.front()); \
+ const auto values = H.values(N); \
+ QCOMPARE(values.size(), X); \
+ QCOMPARE(values.front(), expected.front()); \
+ /* ignore in-between */ \
+ QCOMPARE(values.back(), expected.back()); \
+ QCOMPARE(H.combinedValue(N), values.join(", ")); \
+ } while (false)
+
+#define EXISTS_ONCE(H, N, V) EXISTS_N_TIMES(1, H, N, V)
+
+ EXISTS_ONCE(h1, n1, v1);
+ EXISTS_ONCE(h1, N1, v1);
+ EXISTS_ONCE(h1, QHttpHeaders::WellKnownHeader::Accept, "nothing");
+ EXISTS_ONCE(h1, "Accept", "nothing");
+
+ EXISTS_NOT(h1, N2);
+ EXISTS_NOT(h1, QHttpHeaders::WellKnownHeader::Allow);
+
+ h1.clear();
+
+ EXISTS_NOT(h1, n1);
+
+ h1.append(n1, v1);
+ h1.append(n1, v2);
+ h1.append(n1, v3);
+ h1.append(n2, v2);
+ h1.append(n3, ""); // empty value
+
+ EXISTS_N_TIMES(3, h1, n1, v1, v2, v3);
+ EXISTS_N_TIMES(3, h1, N1, v1, v2, v3);
+ EXISTS_ONCE(h1, n3, ""); // empty value
+
+ h1.append(QHttpHeaders::WellKnownHeader::Accept, "nothing");
+ h1.append(QHttpHeaders::WellKnownHeader::Accept, "ever");
+
+ EXISTS_N_TIMES(2, h1, QHttpHeaders::WellKnownHeader::Accept, "nothing", "ever");
+ EXISTS_NOT(h1, "nonexistent");
+
+#undef EXISTS_ONCE
+#undef EXISTS_N_TIMES
+#undef EXISTS_NOT
+
+ // valueAt()
+ h1.clear();
+ h1.append(n1, v1);
+ h1.append(n2, v2);
+ h1.append(n3, v3);
+ QCOMPARE(h1.valueAt(0), v1);
+ QCOMPARE(h1.valueAt(1), v2);
+ QCOMPARE(h1.valueAt(2), v3);
+
+ // nameAt()
+ h1.clear();
+ h1.append(n1, v1);
+ h1.append(n2, v2);
+ h1.append(n3, v3);
+ QCOMPARE(h1.nameAt(0), n1);
+ QCOMPARE(h1.nameAt(1), n2);
+ QCOMPARE(h1.nameAt(2), n3);
+
+ // removeAll()
+ h1.clear();
+ QVERIFY(h1.append(n1, v1));
+ QVERIFY(h1.append(QHttpHeaders::WellKnownHeader::Accept, "nothing"));
+ QVERIFY(h1.append(n1, v1));
+ QCOMPARE(h1.size(), 3);
+ h1.removeAll(n1);
+ QVERIFY(!h1.contains(n1));
+ QCOMPARE(h1.size(), 1);
+ QVERIFY(h1.contains("accept"));
+ h1.removeAll(QHttpHeaders::WellKnownHeader::Accept);
+ QVERIFY(!h1.contains(QHttpHeaders::WellKnownHeader::Accept));
+
+ // removeAt()
+ h1.clear();
+ h1.append(n1, v1);
+ h1.append(n2, v2);
+ h1.append(n3, v3);
+
+ // Valid removals
+ QVERIFY(h1.contains(n3));
+ h1.removeAt(2);
+ QVERIFY(!h1.contains(n3));
+ QVERIFY(h1.contains(n1));
+ h1.removeAt(0);
+ QVERIFY(!h1.contains(n1));
+ QVERIFY(h1.contains(n2));
+ h1.removeAt(0);
+ QVERIFY(!h1.contains(n2));
+ QVERIFY(h1.isEmpty());
+
+ // toListOfPairs()
+ h1.clear();
+ h1.append(n1, v1);
+ h1.append(n2, v2);
+ h1.append(N3, V3); // uppercase of n3
+ auto list = h1.toListOfPairs();
+ QCOMPARE(list.size(), h1.size());
+ QCOMPARE(list.at(0).first, n1);
+ QCOMPARE(list.at(0).second, v1);
+ QCOMPARE(list.at(1).first, n2);
+ QCOMPARE(list.at(1).second, v2);
+ QCOMPARE(list.at(2).first, n3); // N3 has been lower-cased
+ QCOMPARE(list.at(2).second, V3);
+
+ // toMultiMap()
+ auto map = h1.toMultiMap();
+ QCOMPARE(map.size(), h1.size());
+ QCOMPARE(map.value(n1.toString().toLatin1()), v1);
+ QCOMPARE(map.value(n2.toString().toLatin1()), v2);
+ QCOMPARE(map.value(n3.toString().toLatin1()), V3);
+
+ // toMultiHash()
+ auto hash = h1.toMultiHash();
+ QCOMPARE(hash.size(), h1.size());
+ QCOMPARE(hash.value(n1.toString().toLatin1()), v1);
+ QCOMPARE(hash.value(n2.toString().toLatin1()), v2);
+ QCOMPARE(hash.value(n3.toString().toLatin1()), V3);
+
+ // insert()
+ h1.clear();
+ h1.append(n3, v3);
+ QVERIFY(h1.insert(0, n1, v1));
+ list = h1.toListOfPairs();
+ QCOMPARE(list.size(), 2);
+ QCOMPARE(list.at(0).first, n1);
+ QCOMPARE(list.at(0).second, v1);
+ QCOMPARE(list.at(1).first, n3);
+ QCOMPARE(list.at(1).second, v3);
+ QVERIFY(h1.insert(1, n2, v2));
+ list = h1.toListOfPairs();
+ QCOMPARE(list.size(), 3);
+ QCOMPARE(list.at(0).first, n1);
+ QCOMPARE(list.at(0).second, v1);
+ QCOMPARE(list.at(1).first, n2);
+ QCOMPARE(list.at(1).second, v2);
+ QCOMPARE(list.at(2).first, n3);
+ QCOMPARE(list.at(2).second, v3);
+ QVERIFY(h1.insert(1, QHttpHeaders::WellKnownHeader::Accept, "nothing"));
+ QCOMPARE(h1.size(), 4);
+ list = h1.toListOfPairs();
+ QCOMPARE(list.at(1).first, "accept");
+ QCOMPARE(list.at(1).second, "nothing");
+ QVERIFY(h1.insert(list.size(), "LastName", "lastValue"));
+ QCOMPARE(h1.size(), 5);
+ list = h1.toListOfPairs();
+ QCOMPARE(list.last().first, "lastname");
+ QCOMPARE(list.last().second, "lastValue");
+ // Failed insert
+ QRegularExpression re("HTTP header name contained*");
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, re);
+ QVERIFY(!h1.insert(0, "a€", "b"));
+
+ // replace
+ h1.clear();
+ h1.append(n1, v1);
+ h1.append(n2, v2);
+ QCOMPARE(h1.size(), 2);
+ QVERIFY(h1.replace(0, n3, v3));
+ QVERIFY(h1.replace(1, QHttpHeaders::WellKnownHeader::Accept, "nothing"));
+ QCOMPARE(h1.size(), 2);
+ list = h1.toListOfPairs();
+ QCOMPARE(list.at(0).first, n3);
+ QCOMPARE(list.at(0).second, v3);
+ QCOMPARE(list.at(1).first, "accept");
+ QCOMPARE(list.at(1).second, "nothing");
+ QVERIFY(h1.replace(1, "ACCEPT", "NOTHING"));
+ QCOMPARE(h1.size(), 2);
+ list = h1.toListOfPairs();
+ QCOMPARE(list.at(0).first, n3);
+ QCOMPARE(list.at(0).second, v3);
+ QCOMPARE(list.at(1).first, "accept");
+ QCOMPARE(list.at(1).second, "NOTHING");
+ // Failed replace
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, re);
+ QVERIFY(!h1.replace(0, "a€", "b"));
+
+}
+
+void tst_QHttpHeaders::wellKnownHeader()
+{
+ QByteArrayView view = QHttpHeaders::wellKnownHeaderName(QHttpHeaders::WellKnownHeader::AIM);
+ QCOMPARE(view, "a-im");
+}
+
+#define TEST_ILLEGAL_HEADER_NAME_CHARACTER(NAME) \
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, re); \
+ QVERIFY(!h1.append(NAME, v1)); \
+ QVERIFY(h1.isEmpty()); \
+
+void tst_QHttpHeaders::headerNameField()
+{
+ QHttpHeaders h1;
+
+ // All allowed characters in different encodings and types
+ // const char[]
+ h1.append("abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-.^_`|~", v1);
+ QCOMPARE(h1.size(), 1);
+ // UTF-8
+ h1.append(u8"abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-.^_`|~",
+ v1);
+ QCOMPARE(h1.size(), 2);
+ // UTF-16
+ h1.append(u"abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-.^_`|~", v1);
+ QCOMPARE(h1.size(), 3);
+ // QString (UTF-16)
+ h1.append(u"abcdefghijklmnopqrstuvwyxzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-.^_`|~"_s,
+ v1);
+ QCOMPARE(h1.size(), 4);
+ QCOMPARE(h1.nameAt(0), h1.nameAt(1));
+ QCOMPARE(h1.nameAt(1), h1.nameAt(2));
+ QCOMPARE(h1.nameAt(2), h1.nameAt(3));
+ h1.clear();
+
+ // Error cases
+ // Header name must contain at least 1 character
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, "HTTP header name cannot be empty");
+ h1.append("", v1);
+ QVERIFY(h1.isEmpty());
+ // Disallowed ASCII/extended ASCII characters (not exhaustive list)
+ QRegularExpression re("HTTP header name contained illegal character*");
+ TEST_ILLEGAL_HEADER_NAME_CHARACTER("foo\x08" "bar"); // BS
+ TEST_ILLEGAL_HEADER_NAME_CHARACTER("foo\x7F" "bar"); // DEL
+ TEST_ILLEGAL_HEADER_NAME_CHARACTER("foo()" "bar"); // parantheses
+ TEST_ILLEGAL_HEADER_NAME_CHARACTER("foobar" "¿"); // extended ASCII
+ TEST_ILLEGAL_HEADER_NAME_CHARACTER("©" "foobar"); // extended ASCII
+ TEST_ILLEGAL_HEADER_NAME_CHARACTER("foo,bar"); // comma
+ // Disallowed UTF-8 characters
+ TEST_ILLEGAL_HEADER_NAME_CHARACTER(u8"€");
+ TEST_ILLEGAL_HEADER_NAME_CHARACTER(u8"ð’œð’´ðŸ˜ðŸ¡ðŽ€ðŽœð’€ð’ð“ð“©ð”¸ð”¹ð•€ð•ð•Œð•ð“‚€ð“‚𓃀ð“ƒð“‡‹ð“‡Œð“‰ð“‰‘𓋴𓋵𓎡𓎢𓎣ð“");
+ // Disallowed UTF-16 characters
+ TEST_ILLEGAL_HEADER_NAME_CHARACTER(u"€");
+ TEST_ILLEGAL_HEADER_NAME_CHARACTER(u"ð’œð’´ðŸ˜ðŸ¡ðŽ€ðŽœð’€ð’ð“ð“©ð”¸ð”¹ð•€ð•ð•Œð•ð“‚€ð“‚𓃀ð“ƒð“‡‹ð“‡Œð“‰ð“‰‘𓋴𓋵𓎡𓎢𓎣ð“");
+
+ // Non-null-terminated name. The 'x' below is to make sure the strings don't
+ // null-terminate by happenstance
+ h1.clear();
+ constexpr char L1Array[] = {'a','b','c','x'};
+ const QLatin1StringView nonNullLatin1{L1Array, sizeof(L1Array) - 1}; // abc
+
+ constexpr char UTF8Array[] = {0x64, 0x65, 0x66, 0x78};
+ const QUtf8StringView nonNullUTF8(UTF8Array, sizeof(UTF8Array) - 1); // def
+
+ constexpr QChar UTF16Array[] = {'g', 'h', 'i', 'x'};
+ QStringView nonNullUTF16(UTF16Array, sizeof(UTF16Array) / sizeof(QChar) - 1); // ghi
+
+ h1.append(nonNullLatin1, v1);
+ QCOMPARE(h1.size(), 1);
+ QVERIFY(h1.contains(nonNullLatin1));
+ QCOMPARE(h1.combinedValue(nonNullLatin1), v1);
+
+ h1.append(nonNullUTF8, v2);
+ QCOMPARE(h1.size(), 2);
+ QVERIFY(h1.contains(nonNullUTF8));
+ QCOMPARE(h1.combinedValue(nonNullUTF8), v2);
+
+ h1.append(nonNullUTF16, v3);
+ QCOMPARE(h1.size(), 3);
+ QVERIFY(h1.contains(nonNullUTF16));
+ QCOMPARE(h1.combinedValue(nonNullUTF16), v3);
+}
+
+#define TEST_ILLEGAL_HEADER_VALUE_CHARACTER(VALUE) \
+QTest::ignoreMessage(QtMsgType::QtWarningMsg, re); \
+ QVERIFY(!h1.append(n1, VALUE)); \
+ QVERIFY(h1.isEmpty()); \
+
+void tst_QHttpHeaders::headerValueField()
+{
+ QHttpHeaders h1;
+
+ // Visible ASCII characters and space and horizontal tab
+ // const char[]
+ h1.append(n1, "!\"#$%&'()*+,-./0123456789:; \t<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
+ "`abcdefghijklmnopqrstuvwxyz{|}~");
+ QCOMPARE(h1.size(), 1);
+ // UTF-8
+ h1.append(n1, u8"!\"#$%&'()*+,-./0123456789:; \t<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
+ "`abcdefghijklmnopqrstuvwxyz{|}~");
+ QCOMPARE(h1.size(), 2);
+ // UTF-16
+ h1.append(n1, u"!\"#$%&'()*+,-./0123456789:; \t<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
+ "`abcdefghijklmnopqrstuvwxyz{|}~");
+ QCOMPARE(h1.size(), 3);
+ // QString / UTF-16
+ h1.append(n1, u"!\"#$%&'()*+,-./0123456789:; \t<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"
+ "`abcdefghijklmnopqrstuvwxyz{|}~"_s);
+ QCOMPARE(h1.size(), 4);
+ const auto values = h1.values(n1);
+ QVERIFY(!values.isEmpty() && values.size() == 4);
+ QVERIFY(values[0] == values[1]
+ && values[1] == values[2]
+ && values[2] == values[3]);
+ // Extended ASCII (explicit on Latin-1 to avoid UTF-8 interpretation)
+ h1.append(n1, "\x80\x09\xB2\xFF"_L1);
+ QCOMPARE(h1.size(), 5);
+ // Empty value
+ h1.append(n1, "");
+ QCOMPARE(h1.size(), 6);
+ // Leading and trailing space
+ h1.clear();
+ h1.append(n1, " foo ");
+ QCOMPARE(h1.combinedValue(n1), "foo");
+ h1.append(n1, "\tbar\t");
+ QCOMPARE(h1.combinedValue(n1), "foo, bar");
+ QCOMPARE(h1.size(), 2);
+
+ h1.clear();
+ QRegularExpression re("HTTP header value contained illegal character*");
+ TEST_ILLEGAL_HEADER_VALUE_CHARACTER("foo\x08" "bar"); // BS
+ TEST_ILLEGAL_HEADER_VALUE_CHARACTER("foo\x1B" "bar"); // ESC
+ // Disallowed UTF-8 characters
+ TEST_ILLEGAL_HEADER_VALUE_CHARACTER(u8"€");
+ TEST_ILLEGAL_HEADER_VALUE_CHARACTER(u8"ð’œð’´ðŸ˜ðŸ¡ðŽ€ðŽœð’€ð’ð“ð“©ð”¸ð”¹ð•€ð•ð•Œð•ð“‚€ð“‚𓃀ð“ƒð“‡‹ð“‡Œð“‰ð“‰‘𓋴𓋵𓎡𓎢𓎣ð“");
+ // Disallowed UTF-16 characters
+ TEST_ILLEGAL_HEADER_VALUE_CHARACTER(u"€");
+ TEST_ILLEGAL_HEADER_VALUE_CHARACTER(u"ð’œð’´ðŸ˜ðŸ¡ðŽ€ðŽœð’€ð’ð“ð“©ð”¸ð”¹ð•€ð•ð•Œð•ð“‚€ð“‚𓃀ð“ƒð“‡‹ð“‡Œð“‰ð“‰‘𓋴𓋵𓎡𓎢𓎣ð“");
+
+ // Non-null-terminated value. The 'x' below is to make sure the strings don't
+ // null-terminate by happenstance
+ h1.clear();
+ constexpr char L1Array[] = {'a','b','c','x'};
+ const QLatin1StringView nonNullLatin1{L1Array, sizeof(L1Array) - 1}; // abc
+
+ constexpr char UTF8Array[] = {0x64, 0x65, 0x66, 0x78};
+ const QUtf8StringView nonNullUTF8(UTF8Array, sizeof(UTF8Array) - 1); // def
+
+ constexpr QChar UTF16Array[] = {'g', 'h', 'i', 'x'};
+ QStringView nonNullUTF16(UTF16Array, sizeof(UTF16Array) / sizeof(QChar) - 1); // ghi
+
+ h1.append(n1, nonNullLatin1);
+ QCOMPARE(h1.size(), 1);
+ QVERIFY(h1.contains(n1));
+ QCOMPARE(h1.combinedValue(n1), "abc");
+
+ h1.append(n2, nonNullUTF8);
+ QCOMPARE(h1.size(), 2);
+ QVERIFY(h1.contains(n2));
+ QCOMPARE(h1.combinedValue(n2), "def");
+
+ h1.append(n3, nonNullUTF16);
+ QCOMPARE(h1.size(), 3);
+ QVERIFY(h1.contains(n3));
+ QCOMPARE(h1.combinedValue(n3), "ghi");
+}
+
+void tst_QHttpHeaders::valueEncoding()
+{
+ // Test that common encodings are possible to set and not blocked by
+ // header value character filter (ie. don't contain disallowed characters as per RFC 9110)
+ QHttpHeaders h1;
+ // Within visible ASCII range
+ QVERIFY(h1.append(n1, "foo"_ba.toBase64()));
+ QCOMPARE(h1.values(n1).at(0), "Zm9v");
+ h1.replace(0, n1, "foo"_ba.toPercentEncoding());
+ QCOMPARE(h1.values(n1).at(0), "foo");
+
+ // Outside of ASCII/Latin-1 range (€)
+ h1.replace(0, n1, "foo€"_ba.toBase64());
+ QCOMPARE(h1.values(n1).at(0), "Zm9v4oKs");
+ h1.replace(0, n1, "foo€"_ba.toPercentEncoding());
+ QCOMPARE(h1.values(n1).at(0), "foo%E2%82%AC");
+}
+
+void tst_QHttpHeaders::replaceOrAppend()
+{
+ QHttpHeaders h1;
+
+#define REPLACE_OR_APPEND(NAME, VALUE, INDEX, TOTALSIZE) \
+ do { \
+ QVERIFY(h1.replaceOrAppend(NAME, VALUE)); \
+ QCOMPARE(h1.size(), TOTALSIZE); \
+ QCOMPARE(h1.nameAt(INDEX), NAME); \
+ QCOMPARE(h1.valueAt(INDEX), VALUE); \
+ } while (false)
+
+ // Append to empty container and replace it
+ REPLACE_OR_APPEND(n1, v1, 0, 1); // Appends
+ REPLACE_OR_APPEND(n1, v2, 0, 1); // Replaces
+
+ // Replace at beginning, middle, and end
+ h1.clear();
+ REPLACE_OR_APPEND(n1, v1, 0, 1); // Appends
+ REPLACE_OR_APPEND(n2, v2, 1, 2); // Appends
+ REPLACE_OR_APPEND(n3, v3, 2, 3); // Appends
+ REPLACE_OR_APPEND(n1, V1, 0, 3); // Replaces at beginning
+ REPLACE_OR_APPEND(n2, V2, 1, 3); // Replaces at middle
+ REPLACE_OR_APPEND(n3, V3, 2, 3); // Replaces at end
+
+ // Pre-existing multiple values (n2) are removed
+ h1.clear();
+ h1.append(n1, v1);
+ h1.append(n2, v2); // First n2 is at index 1
+ h1.append(n2, v2);
+ h1.append(n3, v3);
+ h1.append(n2, v2);
+ QCOMPARE(h1.size(), 5);
+ QCOMPARE(h1.combinedValue(n2), "value2, value2, value2");
+ REPLACE_OR_APPEND(n2, V2, 1, 3); // Replaces value at index 1, and removes the rest
+ QCOMPARE(h1.combinedValue(n2), "VALUE2");
+#undef REPLACE_OR_APPEND
+
+ // Implicit sharing / detaching
+ h1.clear();
+ h1.append(n1, v1);
+ QHttpHeaders h2 = h1;
+ QCOMPARE(h1.size(), h2.size());
+ QCOMPARE(h1.valueAt(0), h2.valueAt(0)); // Iniially values are equal
+ h1.replaceOrAppend(n1, v2); // Change value in h1 => detaches h1
+ QCOMPARE_NE(h1.valueAt(0), h2.valueAt(0)); // Values are no more equal
+ QCOMPARE(h1.valueAt(0), v2); // Value in h1 changed
+ QCOMPARE(h2.valueAt(0), v1); // Value in h2 remained
+
+ // Failed attempts
+ h1.clear();
+ h1.append(n1, v1);
+ QRegularExpression re("HTTP header*");
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, re);
+ QVERIFY(!h1.replaceOrAppend("", V1));
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, re);
+ QVERIFY(!h1.replaceOrAppend(v1, "foo\x08"));
+}
+
+QTEST_MAIN(tst_QHttpHeaders)
+#include "tst_qhttpheaders.moc"
diff --git a/tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt b/tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt
index 29b345b0db..679990062f 100644
--- a/tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt
+++ b/tests/auto/network/access/qhttpnetworkconnection/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qhttpnetworkconnection.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_qhttpnetworkconnection LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -11,12 +18,8 @@ endif()
qt_internal_add_test(tst_qhttpnetworkconnection
SOURCES
tst_qhttpnetworkconnection.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
- QT_TEST_SERVER_LIST "apache2" # special case
+ QT_TEST_SERVER_LIST "apache2"
)
-
-#### Keys ignored in scope 1:.:.:qhttpnetworkconnection.pro:<TRUE>:
-# QT_TEST_SERVER_LIST = "apache2"
-# _REQUIREMENTS = "qtConfig(private_tests)"
diff --git a/tests/auto/network/access/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp b/tests/auto/network/access/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp
index 945111bfb8..decd442164 100644
--- a/tests/auto/network/access/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp
+++ b/tests/auto/network/access/qhttpnetworkconnection/tst_qhttpnetworkconnection.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 <QTest>
@@ -150,7 +125,7 @@ void tst_QHttpNetworkConnection::head()
QFETCH(QString, statusString);
QFETCH(int, contentLength);
- QHttpNetworkConnection connection(host, port, encrypt);
+ QHttpNetworkConnection connection(QHttpNetworkConnectionPrivate::defaultHttpChannelCount, host, port, encrypt);
QCOMPARE(connection.port(), port);
QCOMPARE(connection.hostName(), host);
QCOMPARE(connection.isSsl(), encrypt);
@@ -200,7 +175,7 @@ void tst_QHttpNetworkConnection::get()
QFETCH(int, contentLength);
QFETCH(int, downloadSize);
- QHttpNetworkConnection connection(host, port, encrypt);
+ QHttpNetworkConnection connection(QHttpNetworkConnectionPrivate::defaultHttpChannelCount, host, port, encrypt);
QCOMPARE(connection.port(), port);
QCOMPARE(connection.hostName(), host);
QCOMPARE(connection.isSsl(), encrypt);
@@ -266,7 +241,7 @@ void tst_QHttpNetworkConnection::put()
QFETCH(QString, data);
QFETCH(bool, succeed);
- QHttpNetworkConnection connection(host, port, encrypt);
+ QHttpNetworkConnection connection(QHttpNetworkConnectionPrivate::defaultHttpChannelCount, host, port, encrypt);
QCOMPARE(connection.port(), port);
QCOMPARE(connection.hostName(), host);
QCOMPARE(connection.isSsl(), encrypt);
@@ -348,7 +323,7 @@ void tst_QHttpNetworkConnection::post()
QFETCH(int, contentLength);
QFETCH(int, downloadSize);
- QHttpNetworkConnection connection(host, port, encrypt);
+ QHttpNetworkConnection connection(QHttpNetworkConnectionPrivate::defaultHttpChannelCount, host, port, encrypt);
QCOMPARE(connection.port(), port);
QCOMPARE(connection.hostName(), host);
QCOMPARE(connection.isSsl(), encrypt);
@@ -475,7 +450,7 @@ void tst_QHttpNetworkConnection::get401()
QFETCH(QString, password);
QFETCH(int, statusCode);
- QHttpNetworkConnection connection(host, port, encrypt);
+ QHttpNetworkConnection connection(QHttpNetworkConnectionPrivate::defaultHttpChannelCount, host, port, encrypt);
QCOMPARE(connection.port(), port);
QCOMPARE(connection.hostName(), host);
QCOMPARE(connection.isSsl(), encrypt);
@@ -535,7 +510,7 @@ void tst_QHttpNetworkConnection::compression()
QFETCH(bool, autoCompress);
QFETCH(QString, contentCoding);
- QHttpNetworkConnection connection(host, port, encrypt);
+ QHttpNetworkConnection connection(QHttpNetworkConnectionPrivate::defaultHttpChannelCount, host, port, encrypt);
QCOMPARE(connection.port(), port);
QCOMPARE(connection.hostName(), host);
QCOMPARE(connection.isSsl(), encrypt);
@@ -609,7 +584,7 @@ void tst_QHttpNetworkConnection::ignoresslerror()
QFETCH(bool, ignoreFromSignal);
QFETCH(int, statusCode);
- QHttpNetworkConnection connection(host, port, encrypt);
+ QHttpNetworkConnection connection(QHttpNetworkConnectionPrivate::defaultHttpChannelCount, host, port, encrypt);
QCOMPARE(connection.port(), port);
QCOMPARE(connection.hostName(), host);
if (ignoreInit)
@@ -654,7 +629,7 @@ void tst_QHttpNetworkConnection::nossl()
QFETCH(bool, encrypt);
QFETCH(QNetworkReply::NetworkError, networkError);
- QHttpNetworkConnection connection(host, port, encrypt);
+ QHttpNetworkConnection connection(QHttpNetworkConnectionPrivate::defaultHttpChannelCount, host, port, encrypt);
QCOMPARE(connection.port(), port);
QCOMPARE(connection.hostName(), host);
@@ -691,7 +666,7 @@ void tst_QHttpNetworkConnection::getMultiple_data()
static bool allRepliesFinished(const QList<QHttpNetworkReply*> *_replies)
{
const QList<QHttpNetworkReply*> &replies = *_replies;
- for (int i = 0; i < replies.length(); i++)
+ for (int i = 0; i < replies.size(); i++)
if (!replies.at(i)->isFinished())
return false;
return true;
@@ -760,7 +735,7 @@ void tst_QHttpNetworkConnection::getMultipleWithPipeliningAndMultiplePriorities(
QTRY_VERIFY_WITH_TIMEOUT(allRepliesFinished(&replies), 60000);
int pipelinedCount = 0;
- for (int i = 0; i < replies.length(); i++) {
+ for (int i = 0; i < replies.size(); i++) {
QVERIFY (!(replies.at(i)->request().isPipeliningAllowed() == false
&& replies.at(i)->isPipeliningUsed()));
@@ -944,7 +919,7 @@ void tst_QHttpNetworkConnection::getAndThenDeleteObject_data()
void tst_QHttpNetworkConnection::getAndThenDeleteObject()
{
// yes, this will leak if the testcase fails. I don't care. It must not fail then :P
- QHttpNetworkConnection *connection = new QHttpNetworkConnection(httpServerName());
+ QHttpNetworkConnection *connection = new QHttpNetworkConnection(QHttpNetworkConnectionPrivate::defaultHttpChannelCount, httpServerName());
QHttpNetworkRequest request("http://" + httpServerName() + "/qtest/bigfile");
QHttpNetworkReply *reply = connection->sendRequest(request);
reply->setDownstreamLimited(true);
diff --git a/tests/auto/network/access/qhttpnetworkreply/CMakeLists.txt b/tests/auto/network/access/qhttpnetworkreply/CMakeLists.txt
index 4d35cc8a2b..b4e4a822ee 100644
--- a/tests/auto/network/access/qhttpnetworkreply/CMakeLists.txt
+++ b/tests/auto/network/access/qhttpnetworkreply/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qhttpnetworkreply.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_qhttpnetworkreply LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -11,10 +18,7 @@ endif()
qt_internal_add_test(tst_qhttpnetworkreply
SOURCES
tst_qhttpnetworkreply.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
)
-
-#### Keys ignored in scope 1:.:.:qhttpnetworkreply.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
diff --git a/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp b/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp
index eca81ba4ea..e83d15fdc3 100644
--- a/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp
+++ b/tests/auto/network/access/qhttpnetworkreply/tst_qhttpnetworkreply.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/QBuffer>
#include <QtCore/QByteArray>
+#include <QtCore/QStringBuilder>
#include "private/qhttpnetworkconnection_p.h"
@@ -101,19 +77,13 @@ void tst_QHttpNetworkReply::parseHeader()
QHttpNetworkReply reply;
reply.parseHeader(headers);
- for (int i = 0; i < fields.count(); ++i) {
+ for (int i = 0; i < fields.size(); ++i) {
//qDebug() << "field" << fields.at(i) << "value" << reply.headerField(fields.at(i)) << "expected" << values.at(i);
QString field = reply.headerField(fields.at(i).toLatin1());
QCOMPARE(field, values.at(i));
}
}
-// both constants are taken from the default settings of Apache
-// see: http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestfieldsize and
-// http://httpd.apache.org/docs/2.2/mod/core.html#limitrequestfields
-const int MAX_HEADER_FIELD_SIZE = 8 * 1024;
-const int MAX_HEADER_FIELDS = 100;
-
void tst_QHttpNetworkReply::parseHeaderVerification_data()
{
QTest::addColumn<QByteArray>("headers");
@@ -131,36 +101,62 @@ void tst_QHttpNetworkReply::parseHeaderVerification_data()
QTest::newRow("missing-colon-3")
<< QByteArray("Content-Encoding: gzip\r\nContent-Length\r\n") << false;
QTest::newRow("header-field-too-long")
- << (QByteArray("Content-Type: ") + QByteArray(MAX_HEADER_FIELD_SIZE, 'a')
- + QByteArray("\r\n"))
+ << (QByteArray("Content-Type: ")
+ + QByteArray(HeaderConstants::MAX_HEADER_FIELD_SIZE, 'a') + QByteArray("\r\n"))
<< false;
QByteArray name = "Content-Type: ";
QTest::newRow("max-header-field-size")
- << (name + QByteArray(MAX_HEADER_FIELD_SIZE - name.size(), 'a') + QByteArray("\r\n"))
+ << (name + QByteArray(HeaderConstants::MAX_HEADER_FIELD_SIZE - name.size(), 'a')
+ + QByteArray("\r\n"))
<< true;
QByteArray tooManyHeaders = QByteArray("Content-Type: text/html; charset=utf-8\r\n")
- .repeated(MAX_HEADER_FIELDS + 1);
+ .repeated(HeaderConstants::MAX_HEADER_FIELDS + 1);
QTest::newRow("too-many-headers") << tooManyHeaders << false;
- QByteArray maxHeaders =
- QByteArray("Content-Type: text/html; charset=utf-8\r\n").repeated(MAX_HEADER_FIELDS);
+ QByteArray maxHeaders = QByteArray("Content-Type: text/html; charset=utf-8\r\n")
+ .repeated(HeaderConstants::MAX_HEADER_FIELDS);
QTest::newRow("max-headers") << maxHeaders << true;
- QByteArray firstValue(MAX_HEADER_FIELD_SIZE / 2, 'a');
+ QByteArray firstValue(HeaderConstants::MAX_HEADER_FIELD_SIZE / 2, 'a');
constexpr int obsFold = 1;
QTest::newRow("max-continuation-size")
<< (name + firstValue + QByteArray("\r\n ")
- + QByteArray(MAX_HEADER_FIELD_SIZE - name.size() - firstValue.size() - obsFold, 'b')
+ + QByteArray(HeaderConstants::MAX_HEADER_FIELD_SIZE - name.size()
+ - firstValue.size() - obsFold,
+ 'b')
+ QByteArray("\r\n"))
<< true;
QTest::newRow("too-long-continuation-size")
<< (name + firstValue + QByteArray("\r\n ")
- + QByteArray(MAX_HEADER_FIELD_SIZE - name.size() - firstValue.size() - obsFold + 1,
+ + QByteArray(HeaderConstants::MAX_HEADER_FIELD_SIZE - name.size()
+ - firstValue.size() - obsFold + 1,
'b')
+ QByteArray("\r\n"))
<< false;
+
+ auto appendLongHeaderElement = [](QByteArray &result, QByteArrayView name) {
+ const qsizetype size = result.size();
+ result += name;
+ result += ": ";
+ result.resize(size + HeaderConstants::MAX_HEADER_FIELD_SIZE, 'a');
+ };
+ QByteArray longHeader;
+ constexpr qsizetype TrailerLength = sizeof("\r\n\r\n") - 1; // we ignore the trailing newlines
+ longHeader.reserve(HeaderConstants::MAX_TOTAL_HEADER_SIZE + TrailerLength + 1);
+ appendLongHeaderElement(longHeader, "Location");
+ longHeader += "\r\n";
+ appendLongHeaderElement(longHeader, "WWW-Authenticate");
+ longHeader += "\r\nProxy-Authenticate: ";
+ longHeader.resize(HeaderConstants::MAX_TOTAL_HEADER_SIZE, 'a');
+ longHeader += "\r\n\r\n";
+
+ // Test with headers which are just large enough to fit our MAX_TOTAL_HEADER_SIZE limit:
+ QTest::newRow("total-header-close-to-max-size") << longHeader << true;
+ // Now add another character to make the total header size exceed the limit:
+ longHeader.insert(HeaderConstants::MAX_TOTAL_HEADER_SIZE - TrailerLength, 'a');
+ QTest::newRow("total-header-too-large") << longHeader << false;
}
void tst_QHttpNetworkReply::parseHeaderVerification()
diff --git a/tests/auto/network/access/qnetworkaccessmanager/CMakeLists.txt b/tests/auto/network/access/qnetworkaccessmanager/CMakeLists.txt
index 1d819c3784..b0fe6eda46 100644
--- a/tests/auto/network/access/qnetworkaccessmanager/CMakeLists.txt
+++ b/tests/auto/network/access/qnetworkaccessmanager/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qnetworkaccessmanager.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkaccessmanager Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkaccessmanager LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkaccessmanager
SOURCES
tst_qnetworkaccessmanager.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp b/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp
index fcafea0125..43db6d5841 100644
--- a/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.cpp
+++ b/tests/auto/network/access/qnetworkaccessmanager/tst_qnetworkaccessmanager.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 <QTest>
diff --git a/tests/auto/network/access/qnetworkcachemetadata/CMakeLists.txt b/tests/auto/network/access/qnetworkcachemetadata/CMakeLists.txt
index 3a8bef0aa2..2aa918c49c 100644
--- a/tests/auto/network/access/qnetworkcachemetadata/CMakeLists.txt
+++ b/tests/auto/network/access/qnetworkcachemetadata/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qnetworkcachemetadata.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkcachemetadata Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkcachemetadata LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkcachemetadata
SOURCES
tst_qnetworkcachemetadata.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/access/qnetworkcachemetadata/tst_qnetworkcachemetadata.cpp b/tests/auto/network/access/qnetworkcachemetadata/tst_qnetworkcachemetadata.cpp
index e35ce84898..f811943dea 100644
--- a/tests/auto/network/access/qnetworkcachemetadata/tst_qnetworkcachemetadata.cpp
+++ b/tests/auto/network/access/qnetworkcachemetadata/tst_qnetworkcachemetadata.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 <QTest>
diff --git a/tests/auto/network/access/qnetworkcookie/CMakeLists.txt b/tests/auto/network/access/qnetworkcookie/CMakeLists.txt
index 0460ff3235..91773a83fd 100644
--- a/tests/auto/network/access/qnetworkcookie/CMakeLists.txt
+++ b/tests/auto/network/access/qnetworkcookie/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qnetworkcookie.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkcookie Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkcookie LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkcookie
SOURCES
tst_qnetworkcookie.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/access/qnetworkcookie/tst_qnetworkcookie.cpp b/tests/auto/network/access/qnetworkcookie/tst_qnetworkcookie.cpp
index 7f1b8e6369..438c5e6983 100644
--- a/tests/auto/network/access/qnetworkcookie/tst_qnetworkcookie.cpp
+++ b/tests/auto/network/access/qnetworkcookie/tst_qnetworkcookie.cpp
@@ -1,36 +1,13 @@
-/****************************************************************************
-**
-** 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 <QTest>
-#include <QtCore/QUrl>
#include <QtNetwork/QNetworkCookie>
+#include <QtCore/QDateTime>
+#include <QtCore/QTimeZone>
+#include <QtCore/QUrl>
class tst_QNetworkCookie: public QObject
{
@@ -110,6 +87,12 @@ void tst_QNetworkCookie::parseSingleCookie_data()
{
QTest::addColumn<QString>("cookieString");
QTest::addColumn<QNetworkCookie>("expectedCookie");
+ const auto utc = [](int year, int month, int day,
+ int hour = 0, int minute = 0, int second = 0, int millis = 0) {
+ return QDateTime(QDate(year, month, day),
+ QTime(hour, minute, second, millis),
+ QTimeZone::UTC);
+ };
QNetworkCookie cookie;
cookie.setName("a");
@@ -254,140 +237,140 @@ void tst_QNetworkCookie::parseSingleCookie_data()
cookie = QNetworkCookie();
cookie.setName("a");
cookie.setValue("b");
- cookie.setExpirationDate(QDateTime(QDate(2012, 1, 29), QTime(23, 59, 59), Qt::UTC));
+ cookie.setExpirationDate(utc(2012, 1, 29, 23, 59, 59));
QTest::newRow("broken-expiration1") << "a=b; expires=Sun, 29-Jan-2012 23:59:59;" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1999, 11, 9), QTime(23, 12, 40), Qt::UTC));
+ cookie.setExpirationDate(utc(1999, 11, 9, 23, 12, 40));
QTest::newRow("expiration1") << "a=b;expires=Wednesday, 09-Nov-1999 23:12:40 GMT" << cookie;
QTest::newRow("expiration2") << "a=b;expires=Wed, 09-Nov-1999 23:12:40 GMT" << cookie;
QTest::newRow("expiration3") << "a=b; expires=Wednesday, 09-Nov-1999 23:12:40 GMT " << cookie;
QTest::newRow("expiration-utc") << "a=b;expires=Wednesday, 09-Nov-1999 23:12:40 UTC" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 4, 14, 3, 20));
QTest::newRow("time-0") << "a=b;expires=14 Apr 89 03:20" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 12, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 4, 14, 3, 20, 12));
QTest::newRow("time-1") << "a=b;expires=14 Apr 89 03:20:12" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 12, 88), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 4, 14, 3, 20, 12, 88));
QTest::newRow("time-2") << "a=b;expires=14 Apr 89 03:20:12.88" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 12, 88), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 4, 14, 3, 20, 12, 88));
QTest::newRow("time-3") << "a=b;expires=14 Apr 89 03:20:12.88am" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(15, 20, 12, 88), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 4, 14, 15, 20, 12, 88));
QTest::newRow("time-4") << "a=b;expires=14 Apr 89 03:20:12.88pm" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 12, 88), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 4, 14, 3, 20, 12, 88));
QTest::newRow("time-5") << "a=b;expires=14 Apr 89 03:20:12.88 Am" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(15, 20, 12, 88), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 4, 14, 15, 20, 12, 88));
QTest::newRow("time-6") << "a=b;expires=14 Apr 89 03:20:12.88 PM" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(15, 20, 12, 88), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 4, 14, 15, 20, 12, 88));
QTest::newRow("time-7") << "a=b;expires=14 Apr 89 3:20:12.88 PM" << cookie;
// normal months
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1, 1, 1));
QTest::newRow("months-1") << "a=b;expires=Jan 1 89 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 2, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 2, 1, 1, 1));
QTest::newRow("months-2") << "a=b;expires=Feb 1 89 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 3, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 3, 1, 1, 1));
QTest::newRow("months-3") << "a=b;expires=mar 1 89 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 4, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 4, 1, 1, 1));
QTest::newRow("months-4") << "a=b;expires=Apr 1 89 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 5, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 5, 1, 1, 1));
QTest::newRow("months-5") << "a=b;expires=May 1 89 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 6, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 6, 1, 1, 1));
QTest::newRow("months-6") << "a=b;expires=Jun 1 89 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 7, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 7, 1, 1, 1));
QTest::newRow("months-7") << "a=b;expires=Jul 1 89 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 8, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 8, 1, 1, 1));
QTest::newRow("months-8") << "a=b;expires=Aug 1 89 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 9, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 9, 1, 1, 1));
QTest::newRow("months-9") << "a=b;expires=Sep 1 89 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 10, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 10, 1, 1, 1));
QTest::newRow("months-10") << "a=b;expires=Oct 1 89 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 11, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 11, 1, 1, 1));
QTest::newRow("months-11") << "a=b;expires=Nov 1 89 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 12, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 12, 1, 1, 1));
QTest::newRow("months-12") << "a=b;expires=Dec 1 89 1:1" << cookie;
// extra months
- cookie.setExpirationDate(QDateTime(QDate(1989, 12, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 12, 1, 1, 1));
QTest::newRow("months-13") << "a=b;expires=December 1 89 1:1" << cookie;
QTest::newRow("months-14") << "a=b;expires=1 89 1:1 Dec" << cookie;
//cookie.setExpirationDate(QDateTime());
//QTest::newRow("months-15") << "a=b;expires=1 89 1:1 De" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2024, 2, 29), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(2024, 2, 29, 1, 1));
QTest::newRow("months-16") << "a=b;expires=2024 29 Feb 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2024, 2, 29), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(2024, 2, 29, 1, 1));
QTest::newRow("months-17") << "a=b;expires=Fri, 29-Feb-2024 01:01:00 GMT" << cookie;
QTest::newRow("months-18") << "a=b;expires=2024 29 Feb 1:1 GMT" << cookie;
// normal offsets
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-0") << "a=b;expires=Jan 1 89 8:0 PST" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-1") << "a=b;expires=Jan 1 89 8:0 PDT" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-2") << "a=b;expires=Jan 1 89 7:0 MST" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-3") << "a=b;expires=Jan 1 89 7:0 MDT" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-4") << "a=b;expires=Jan 1 89 6:0 CST" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-5") << "a=b;expires=Jan 1 89 6:0 CDT" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-6") << "a=b;expires=Jan 1 89 5:0 EST" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-7") << "a=b;expires=Jan 1 89 5:0 EDT" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-8") << "a=b;expires=Jan 1 89 4:0 AST" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-9") << "a=b;expires=Jan 1 89 3:0 NST" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-10") << "a=b;expires=Jan 1 89 0:0 GMT" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-11") << "a=b;expires=Jan 1 89 0:0 BST" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 2), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 2));
QTest::newRow("zoneoffset-12") << "a=b;expires=Jan 1 89 23:0 MET" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 2), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 2));
QTest::newRow("zoneoffset-13") << "a=b;expires=Jan 1 89 22:0 EET" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 2), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 2));
QTest::newRow("zoneoffset-14") << "a=b;expires=Jan 1 89 15:0 JST" << cookie;
// extra offsets
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 2), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 2));
QTest::newRow("zoneoffset-15") << "a=b;expires=Jan 1 89 15:0 JST+1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1, 1));
QTest::newRow("zoneoffset-16") << "a=b;expires=Jan 1 89 0:0 GMT+1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-17") << "a=b;expires=Jan 1 89 1:0 GMT-1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1, 1));
QTest::newRow("zoneoffset-18") << "a=b;expires=Jan 1 89 0:0 GMT+01" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 5), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1, 1, 5));
QTest::newRow("zoneoffset-19") << "a=b;expires=Jan 1 89 0:0 GMT+0105" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-20") << "a=b;expires=Jan 1 89 0:0 GMT+015" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-21") << "a=b;expires=Jan 1 89 0:0 GM" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-22") << "a=b;expires=Jan 1 89 0:0 GMT" << cookie;
// offsets from gmt
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1, 1));
QTest::newRow("zoneoffset-23") << "a=b;expires=Jan 1 89 0:0 +1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1, 1));
QTest::newRow("zoneoffset-24") << "a=b;expires=Jan 1 89 0:0 +01" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(1, 1), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1, 1, 1));
QTest::newRow("zoneoffset-25") << "a=b;expires=Jan 1 89 0:0 +0101" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 1));
QTest::newRow("zoneoffset-26") << "a=b;expires=Jan 1 89 1:0 -1" << cookie;
// Y2k
- cookie.setExpirationDate(QDateTime(QDate(2000, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2000, 1, 1));
QTest::newRow("year-0") << "a=b;expires=Jan 1 00 0:0" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1970, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1970, 1, 1));
QTest::newRow("year-1") << "a=b;expires=Jan 1 70 0:0" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1971, 1, 1), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1971, 1, 1));
QTest::newRow("year-2") << "a=b;expires=Jan 1 71 0:0" << cookie;
// Day, month, year
- cookie.setExpirationDate(QDateTime(QDate(2013, 1, 2), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2013, 1, 2));
QTest::newRow("date-0") << "a=b;expires=Jan 2 13 0:0" << cookie;
QTest::newRow("date-1") << "a=b;expires=1-2-13 0:0" << cookie;
QTest::newRow("date-2") << "a=b;expires=1/2/13 0:0" << cookie;
@@ -397,141 +380,141 @@ void tst_QNetworkCookie::parseSingleCookie_data()
QTest::newRow("date-6") << "a=b;expires=1/2/13 0:0" << cookie;
// Known Year, determine month and day
- cookie.setExpirationDate(QDateTime(QDate(1995, 1, 13), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1995, 1, 13));
QTest::newRow("knownyear-0") << "a=b;expires=13/1/95 0:0" << cookie;
QTest::newRow("knownyear-1") << "a=b;expires=95/13/1 0:0" << cookie;
QTest::newRow("knownyear-2") << "a=b;expires=1995/1/13 0:0" << cookie;
QTest::newRow("knownyear-3") << "a=b;expires=1995/13/1 0:0" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1995, 1, 2), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1995, 1, 2));
QTest::newRow("knownyear-4") << "a=b;expires=1/2/95 0:0" << cookie;
QTest::newRow("knownyear-5") << "a=b;expires=95/1/2 0:0" << cookie;
// Known Year, Known day, determining month
- cookie.setExpirationDate(QDateTime(QDate(1995, 1, 13), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1995, 1, 13));
QTest::newRow("knownYD-0") << "a=b;expires=13/1/95 0:0" << cookie;
QTest::newRow("knownYD-1") << "a=b;expires=1/13/95 0:0" << cookie;
QTest::newRow("knownYD-2") << "a=b;expires=95/13/1 0:0" << cookie;
QTest::newRow("knownYD-3") << "a=b;expires=95/1/13 0:0" << cookie;
// Month comes before Year
- cookie.setExpirationDate(QDateTime(QDate(2021, 03, 26), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2021, 03, 26));
QTest::newRow("month-0") << "a=b;expires=26/03/21 0:0" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2015, 12, 30), QTime(16, 25, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2015, 12, 30, 16, 25));
QTest::newRow("month-1") << "a=b;expires=wed 16:25pm December 2015 30" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2031, 11, 11), QTime(16, 25, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2031, 11, 11, 16, 25));
QTest::newRow("month-2") << "a=b;expires=16:25 11 31 11" << cookie;
// The very ambiguous cases
// Matching Firefox's behavior of guessing month, day, year in those cases
- cookie.setExpirationDate(QDateTime(QDate(2013, 10, 2), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2013, 10, 2));
QTest::newRow("ambiguousd-0") << "a=b;expires=10/2/13 0:0" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2013, 2, 10), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2013, 2, 10));
QTest::newRow("ambiguousd-1") << "a=b;expires=2/10/13 0:0" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2010, 2, 3), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2010, 2, 3));
QTest::newRow("ambiguousd-2") << "a=b;expires=2/3/10 0:0" << cookie;
// FYI If you try these in Firefox it won't set a cookie for the following two string
// because 03 is turned into the year at which point it is expired
- cookie.setExpirationDate(QDateTime(QDate(2003, 2, 10), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2003, 2, 10));
QTest::newRow("ambiguousd-3") << "a=b;expires=2/10/3 0:0" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2003, 10, 2), QTime(0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2003, 10, 2));
QTest::newRow("ambiguousd-4") << "a=b;expires=10/2/3 0:0" << cookie;
// These are the cookies that firefox's source says it can parse
- cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 4, 14, 3, 20));
QTest::newRow("firefox-0") << "a=b;expires=14 Apr 89 03:20" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 4, 14), QTime(3, 20, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 4, 14, 3, 20));
QTest::newRow("firefox-1") << "a=b;expires=14 Apr 89 03:20 GMT" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 3, 17), QTime(4, 1, 33, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 3, 17, 4, 1, 33));
QTest::newRow("firefox-2") << "a=b;expires=Fri, 17 Mar 89 4:01:33" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 3, 17), QTime(4, 1, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 3, 17, 4, 1));
QTest::newRow("firefox-3") << "a=b;expires=Fri, 17 Mar 89 4:01 GMT" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 16), QTime(16-8, 12, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 16, 16-8, 12));
QTest::newRow("firefox-4") << "a=b;expires=Mon Jan 16 16:12 PDT 1989" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1989, 1, 16), QTime(17, 42, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1989, 1, 16, 17, 42));
QTest::newRow("firefox-5") << "a=b;expires=Mon Jan 16 16:12 +0130 1989" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1992, 5, 6), QTime(16-9, 41, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1992, 5, 6, 16-9, 41));
QTest::newRow("firefox-6") << "a=b;expires=6 May 1992 16:41-JST (Wednesday)" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1993, 8, 22), QTime(10, 59, 12, 82), Qt::UTC));
+ cookie.setExpirationDate(utc(1993, 8, 22, 10, 59, 12, 82));
QTest::newRow("firefox-7") << "a=b;expires=22-AUG-1993 10:59:12.82" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1993, 8, 22), QTime(22, 59, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1993, 8, 22, 22, 59));
QTest::newRow("firefox-8") << "a=b;expires=22-AUG-1993 10:59pm" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1993, 8, 22), QTime(12, 59, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1993, 8, 22, 12, 59));
QTest::newRow("firefox-9") << "a=b;expires=22-AUG-1993 12:59am" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1993, 8, 22), QTime(12, 59, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1993, 8, 22, 12, 59));
QTest::newRow("firefox-10") << "a=b;expires=22-AUG-1993 12:59 PM" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1995, 8, 4), QTime(15, 54, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1995, 8, 4, 15, 54));
QTest::newRow("firefox-11") << "a=b;expires=Friday, August 04, 1995 3:54 PM" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1995, 6, 21), QTime(16, 24, 34, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1995, 6, 21, 16, 24, 34));
QTest::newRow("firefox-12") << "a=b;expires=06/21/95 04:24:34 PM" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1995, 6, 20), QTime(21, 7, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1995, 6, 20, 21, 7));
QTest::newRow("firefox-13") << "a=b;expires=20/06/95 21:07" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1995, 6, 8), QTime(19-5, 32, 48, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(1995, 6, 8, 19-5, 32, 48));
QTest::newRow("firefox-14") << "a=b;expires=95-06-08 19:32:48 EDT" << cookie;
// Edge cases caught by fuzzing
// These are about the default cause creates dates that don't exits
- cookie.setExpirationDate(QDateTime(QDate(2030, 2, 25), QTime(1, 1, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2030, 2, 25, 1, 1));
QTest::newRow("fuzz-0") << "a=b; expires=30 -000002 1:1 25;" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2031, 11, 20), QTime(1, 1, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2031, 11, 20, 1, 1));
QTest::newRow("fuzz-1") << "a=b; expires=31 11 20 1:1;" << cookie;
// April only has 30 days
- cookie.setExpirationDate(QDateTime(QDate(2031, 4, 30), QTime(1, 1, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2031, 4, 30, 1, 1));
QTest::newRow("fuzz-2") << "a=b; expires=31 30 4 1:1" << cookie;
// 9 must be the month so 31 can't be the day
- cookie.setExpirationDate(QDateTime(QDate(2031, 9, 21), QTime(1, 1, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2031, 9, 21, 1, 1));
QTest::newRow("fuzz-3") << "a=b; expires=31 21 9 1:1" << cookie;
// Year is known, then fallback to defaults of filling in month and day
- cookie.setExpirationDate(QDateTime(QDate(2031, 11, 1), QTime(1, 1, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2031, 11, 1, 1, 1));
QTest::newRow("fuzz-4") << "a=b; expires=31 11 01 1:1" << cookie;
// 2 must be the month so 30 can't be the day
- cookie.setExpirationDate(QDateTime(QDate(2030, 2, 20), QTime(1, 1, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2030, 2, 20, 1, 1));
QTest::newRow("fuzz-5") << "a=b; expires=30 02 20 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2021, 12, 22), QTime(1, 1, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2021, 12, 22, 1, 1));
QTest::newRow("fuzz-6") << "a=b; expires=2021 12 22 1:1" << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2029, 2, 23), QTime(1, 1, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2029, 2, 23, 1, 1));
QTest::newRow("fuzz-7") << "a=b; expires=29 23 Feb 1:1" << cookie;
// 11 and 6 don't have 31 days
- cookie.setExpirationDate(QDateTime(QDate(2031, 11, 06), QTime(1, 1, 0, 0), Qt::UTC));
+ cookie.setExpirationDate(utc(2031, 11, 06, 1, 1));
QTest::newRow("fuzz-8") << "a=b; expires=31 11 06 1:1" << cookie;
// two-digit years:
// from 70 until 99, we assume 20th century
- cookie.setExpirationDate(QDateTime(QDate(1999, 11, 9), QTime(23, 12, 40), Qt::UTC));
+ cookie.setExpirationDate(utc(1999, 11, 9, 23, 12, 40));
QTest::newRow("expiration-2digit1") << "a=b; expires=Wednesday, 09-Nov-99 23:12:40 GMT " << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1970, 1, 1), QTime(23, 12, 40), Qt::UTC));
+ cookie.setExpirationDate(utc(1970, 1, 1, 23, 12, 40));
QTest::newRow("expiration-2digit2") << "a=b; expires=Thursday, 01-Jan-70 23:12:40 GMT " << cookie;
// from 00 until 69, we assume 21st century
- cookie.setExpirationDate(QDateTime(QDate(2000, 1, 1), QTime(23, 12, 40), Qt::UTC));
+ cookie.setExpirationDate(utc(2000, 1, 1, 23, 12, 40));
QTest::newRow("expiration-2digit3") << "a=b; expires=Saturday, 01-Jan-00 23:12:40 GMT " << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2020, 1, 1), QTime(23, 12, 40), Qt::UTC));
+ cookie.setExpirationDate(utc(2020, 1, 1, 23, 12, 40));
QTest::newRow("expiration-2digit4") << "a=b; expires=Wednesday, 01-Jan-20 23:12:40 GMT " << cookie;
- cookie.setExpirationDate(QDateTime(QDate(2069, 1, 1), QTime(23, 12, 40), Qt::UTC));
+ cookie.setExpirationDate(utc(2069, 1, 1, 23, 12, 40));
QTest::newRow("expiration-2digit5") << "a=b; expires=Wednesday, 01-Jan-69 23:12:40 GMT " << cookie;
- cookie.setExpirationDate(QDateTime(QDate(1999, 11, 9), QTime(23, 12, 40), Qt::UTC));
+ cookie.setExpirationDate(utc(1999, 11, 9, 23, 12, 40));
cookie.setPath("/");
QTest::newRow("expires+path") << "a=b; expires=Wed, 09-Nov-1999 23:12:40 GMT; path=/" << cookie;
@@ -544,7 +527,7 @@ void tst_QNetworkCookie::parseSingleCookie_data()
// cookies obtained from the network:
cookie = QNetworkCookie("__siteid", "1");
cookie.setPath("/");
- cookie.setExpirationDate(QDateTime(QDate(9999, 12, 31), QTime(23, 59, 59), Qt::UTC));
+ cookie.setExpirationDate(utc(9999, 12, 31, 23, 59, 59));
QTest::newRow("network2") << "__siteid=1; expires=Fri, 31-Dec-9999 23:59:59 GMT; path=/" << cookie;
cookie = QNetworkCookie("YM.LC", "v=2&m=9993_262838_159_1558_1063_0_5649_4012_3776161073,9426_260205_549_1295_1336_0_5141_4738_3922731647,6733_258196_952_1364_643_0_3560_-1_0,3677_237633_1294_1294_19267_0_3244_29483_4102206176,1315_235149_1693_1541_941_0_3224_1691_1861378060,1858_214311_2100_1298_19538_0_2873_30900_716411652,6258_212007_2506_1285_1017_0_2868_3606_4288540264,3743_207884_2895_1362_2759_0_2545_7114_3388520216,2654_205253_3257_1297_1332_0_2504_4682_3048534803,1891_184881_3660_1291_19079_0_978_29178_2592538685&f=1&n=20&s=date&o=down&e=1196548712&b=Inbox&u=removed");
@@ -554,13 +537,13 @@ void tst_QNetworkCookie::parseSingleCookie_data()
cookie = QNetworkCookie("__ac", "\"c2hhdXNtYW46U2FTYW80Wm8%3D\"");
cookie.setPath("/");
- cookie.setExpirationDate(QDateTime(QDate(2008, 8, 30), QTime(20, 21, 49), Qt::UTC));
+ cookie.setExpirationDate(utc(2008, 8, 30, 20, 21, 49));
QTest::newRow("network4") << "__ac=\"c2hhdXNtYW46U2FTYW80Wm8%3D\"; Path=/; Expires=Sat, 30 Aug 2008 20:21:49 +0000" << cookie;
// linkedin.com sends cookies in quotes and expects the cookie in quotes
cookie = QNetworkCookie("leo_auth_token", "\"GST:UroVXaxYA3sVSkoVjMNH9bj4dZxVzK2yekgrAUxMfUsyLTNyPjoP60:1298974875:b675566ae32ab36d7a708c0efbf446a5c22b9fca\"");
cookie.setPath("/");
- cookie.setExpirationDate(QDateTime(QDate(2011, 3, 1), QTime(10, 51, 14), Qt::UTC));
+ cookie.setExpirationDate(utc(2011, 3, 1, 10, 51, 14));
QTest::newRow("network5") << "leo_auth_token=\"GST:UroVXaxYA3sVSkoVjMNH9bj4dZxVzK2yekgrAUxMfUsyLTNyPjoP60:1298974875:b675566ae32ab36d7a708c0efbf446a5c22b9fca\"; Version=1; Max-Age=1799; Expires=Tue, 01-Mar-2011 10:51:14 GMT; Path=/" << cookie;
// cookie containing JSON data (illegal for server, client should accept) - QTBUG-26002
@@ -578,11 +561,11 @@ void tst_QNetworkCookie::parseSingleCookie()
QList<QNetworkCookie> result = QNetworkCookie::parseCookies(cookieString.toUtf8());
//QEXPECT_FAIL("network2", "QDateTime parsing problem: the date is beyond year 8000", Abort);
- QCOMPARE(result.count(), 1);
+ QCOMPARE(result.size(), 1);
QCOMPARE(result.at(0), expectedCookie);
result = QNetworkCookie::parseCookies(result.at(0).toRawForm());
- QCOMPARE(result.count(), 1);
+ QCOMPARE(result.size(), 1);
// Drop any millisecond information, if there's any
QDateTime dt = expectedCookie.expirationDate();
@@ -636,7 +619,7 @@ void tst_QNetworkCookie::parseMultipleCookies_data()
cookie = QNetworkCookie("id", "51706646077999719");
cookie.setDomain(".bluestreak.com");
cookie.setPath("/");
- cookie.setExpirationDate(QDateTime(QDate(2017, 12, 05), QTime(9, 11, 7), Qt::UTC));
+ cookie.setExpirationDate(QDateTime(QDate(2017, 12, 05), QTime(9, 11, 7), QTimeZone::UTC));
list << cookie;
cookie.setName("bb");
cookie.setValue("\\\"K14144t\\\"_AAQ\\\"ototrK_A_ttot44AQ4KwoRQtoto|");
@@ -655,8 +638,8 @@ void tst_QNetworkCookie::parseMultipleCookies_data()
cookieB.setValue("d");
// NewLine
- cookieA.setExpirationDate(QDateTime(QDate(2009, 3, 10), QTime(7, 0, 0, 0), Qt::UTC));
- cookieB.setExpirationDate(QDateTime(QDate(2009, 3, 20), QTime(7, 0, 0, 0), Qt::UTC));
+ cookieA.setExpirationDate(QDateTime(QDate(2009, 3, 10), QTime(7, 0), QTimeZone::UTC));
+ cookieB.setExpirationDate(QDateTime(QDate(2009, 3, 20), QTime(7, 0), QTimeZone::UTC));
list = QList<QNetworkCookie>() << cookieA << cookieB;
QTest::newRow("real-0") << "a=b; expires=Tue Mar 10 07:00:00 2009 GMT\nc=d; expires=Fri Mar 20 07:00:00 2009 GMT" << list;
QTest::newRow("real-1") << "a=b; expires=Tue Mar 10 07:00:00 2009 GMT\n\nc=d; expires=Fri Mar 20 07:00:00 2009 GMT" << list;
diff --git a/tests/auto/network/access/qnetworkcookiejar/CMakeLists.txt b/tests/auto/network/access/qnetworkcookiejar/CMakeLists.txt
index 55f30633ee..0d74a1d84d 100644
--- a/tests/auto/network/access/qnetworkcookiejar/CMakeLists.txt
+++ b/tests/auto/network/access/qnetworkcookiejar/CMakeLists.txt
@@ -1,16 +1,23 @@
-# Generated from qnetworkcookiejar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkcookiejar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkcookiejar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
-list(APPEND test_data "parser.json")
+list(APPEND test_data "parser.json" "testdata/publicsuffix/public_suffix_list.dafsa")
qt_internal_add_test(tst_qnetworkcookiejar
SOURCES
tst_qnetworkcookiejar.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
Qt::NetworkPrivate
diff --git a/tests/auto/network/access/qnetworkcookiejar/testdata/publicsuffix/public_suffix_list.dafsa b/tests/auto/network/access/qnetworkcookiejar/testdata/publicsuffix/public_suffix_list.dafsa
new file mode 100644
index 0000000000..2bd4ca05f3
--- /dev/null
+++ b/tests/auto/network/access/qnetworkcookiejar/testdata/publicsuffix/public_suffix_list.dafsa
Binary files differ
diff --git a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
index d4e9698ca3..9460060dbf 100644
--- a/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
+++ b/tests/auto/network/access/qnetworkcookiejar/tst_qnetworkcookiejar.cpp
@@ -1,31 +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 <QTest>
#include <QtCore/QJsonArray>
@@ -37,14 +11,17 @@
#include <QtNetwork/QNetworkRequest>
#if QT_CONFIG(topleveldomain)
#include "private/qtldurl_p.h"
-#include "private/qurltlds_p.h"
#endif
+#include <memory>
+
class tst_QNetworkCookieJar: public QObject
{
Q_OBJECT
private slots:
+ void initTestCase();
+
void getterSetter();
void setCookiesFromUrl_data();
void setCookiesFromUrl();
@@ -56,6 +33,8 @@ private slots:
#endif
void rfc6265_data();
void rfc6265();
+private:
+ QSharedPointer<QTemporaryDir> m_dataDir;
};
class MyCookieJar: public QNetworkCookieJar
@@ -83,6 +62,22 @@ void tst_QNetworkCookieJar::getterSetter()
QCOMPARE(jar.allCookies(), list);
}
+void tst_QNetworkCookieJar::initTestCase()
+{
+#if QT_CONFIG(topleveldomain) && QT_CONFIG(publicsuffix_system)
+ QString testDataDir;
+#ifdef BUILTIN_TESTDATA
+ m_dataDir = QEXTRACTTESTDATA("/testdata");
+ QVERIFY(m_dataDir);
+ testDataDir = m_dataDir->path() + "/testdata";
+#else
+ testDataDir = QFINDTESTDATA("testdata");
+#endif
+ qDebug() << "Test data dir:" << testDataDir;
+ qputenv("XDG_DATA_DIRS", QFile::encodeName(testDataDir));
+#endif
+}
+
void tst_QNetworkCookieJar::setCookiesFromUrl_data()
{
QTest::addColumn<QList<QNetworkCookie> >("preset");
@@ -241,7 +236,7 @@ void tst_QNetworkCookieJar::setCookiesFromUrl()
QFETCH(QList<QNetworkCookie>, preset);
QFETCH(QNetworkCookie, newCookie);
QFETCH(QString, referenceUrl);
- QFETCH(QList<QNetworkCookie>, expectedResult);
+ QFETCH(const QList<QNetworkCookie>, expectedResult);
QFETCH(bool, setCookies);
QList<QNetworkCookie> cookieList;
@@ -251,11 +246,11 @@ void tst_QNetworkCookieJar::setCookiesFromUrl()
QCOMPARE(jar.setCookiesFromUrl(cookieList, referenceUrl), setCookies);
QList<QNetworkCookie> result = jar.allCookies();
- foreach (QNetworkCookie cookie, expectedResult) {
+ for (const QNetworkCookie &cookie : expectedResult) {
QVERIFY2(result.contains(cookie), cookie.toRawForm());
result.removeAll(cookie);
}
- QVERIFY2(result.isEmpty(), QTest::toString(result));
+ QVERIFY2(result.isEmpty(), std::unique_ptr<char[]>(QTest::toString(result)).get());
}
void tst_QNetworkCookieJar::cookiesForUrl_data()
@@ -414,13 +409,11 @@ void tst_QNetworkCookieJar::effectiveTLDs_data()
QTest::newRow("yes1") << "com" << true;
QTest::newRow("yes2") << "de" << true;
- QTest::newRow("yes3") << "ulm.museum" << true;
QTest::newRow("yes4") << "krodsherad.no" << true;
QTest::newRow("yes5") << "1.bg" << true;
QTest::newRow("yes6") << "com.cn" << true;
QTest::newRow("yes7") << "org.ws" << true;
QTest::newRow("yes8") << "co.uk" << true;
- QTest::newRow("yes9") << "wallonie.museum" << true;
QTest::newRow("yes10") << "hk.com" << true;
QTest::newRow("yes11") << "hk.org" << true;
@@ -437,33 +430,23 @@ void tst_QNetworkCookieJar::effectiveTLDs_data()
QTest::newRow("no11") << "mosreg.ru" << false;
const char16_t s1[] = {0x74, 0x72, 0x61, 0x6e, 0xf8, 0x79, 0x2e, 0x6e, 0x6f, 0x00}; // xn--trany-yua.no
- const char16_t s2[] = {0x5d9, 0x5e8, 0x5d5, 0x5e9, 0x5dc, 0x5d9, 0x5dd, 0x2e, 0x6d, 0x75, 0x73, 0x65, 0x75, 0x6d, 0x00}; // xn--9dbhblg6di.museum
const char16_t s3[] = {0x7ec4, 0x7e54, 0x2e, 0x68, 0x6b, 0x00}; // xn--mk0axi.hk
const char16_t s4[] = {0x7f51, 0x7edc, 0x2e, 0x63, 0x6e, 0x00}; // xn--io0a7i.cn
const char16_t s5[] = {0x72, 0xe1, 0x68, 0x6b, 0x6b, 0x65, 0x72, 0xe1, 0x76, 0x6a, 0x75, 0x2e, 0x6e, 0x6f, 0x00}; // xn--rhkkervju-01af.no
const char16_t s6[] = {0xb9a, 0xbbf, 0xb99, 0xbcd, 0xb95, 0xbaa, 0xbcd, 0xbaa, 0xbc2, 0xbb0, 0xbcd, 0x00}; // xn--clchc0ea0b2g2a9gcd
const char16_t s7[] = {0x627, 0x644, 0x627, 0x631, 0x62f, 0x646, 0x00}; // xn--mgbayh7gpa
- const char16_t s8[] = {0x63, 0x6f, 0x72, 0x72, 0x65, 0x69, 0x6f, 0x73, 0x2d, 0x65, 0x2d, 0x74, 0x65, 0x6c, 0x65,
- 0x63, 0x6f, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61, 0xe7, 0xf5, 0x65, 0x73, 0x2e, 0x6d, 0x75,
- 0x73, 0x65, 0x75, 0x6d, 0x00}; // xn--correios-e-telecomunicaes-ghc29a.museum
QTest::newRow("yes-specialchars1") << QString::fromUtf16(s1) << true;
- QTest::newRow("yes-specialchars2") << QString::fromUtf16(s2) << true;
QTest::newRow("yes-specialchars3") << QString::fromUtf16(s3) << true;
QTest::newRow("yes-specialchars4") << QString::fromUtf16(s4) << true;
QTest::newRow("yes-specialchars5") << QString::fromUtf16(s5) << true;
QTest::newRow("yes-specialchars6") << QString::fromUtf16(s6) << true;
QTest::newRow("yes-specialchars7") << QString::fromUtf16(s7) << true;
- QTest::newRow("yes-specialchars8") << QString::fromUtf16(s8) << true;
QTest::newRow("no-specialchars1") << QString::fromUtf16(s1).prepend("something") << false;
- QTest::newRow("no-specialchars2") << QString::fromUtf16(s2).prepend(QString::fromUtf16(s2)) << false;
- QTest::newRow("no-specialchars2.5") << QString::fromUtf16(s2).prepend("whatever") << false;
QTest::newRow("no-specialchars3") << QString::fromUtf16(s3).prepend("foo") << false;
QTest::newRow("no-specialchars4") << QString::fromUtf16(s4).prepend("bar") << false;
- QTest::newRow("no-specialchars5") << QString::fromUtf16(s5).prepend(QString::fromUtf16(s2)) << false;
QTest::newRow("no-specialchars6") << QString::fromUtf16(s6).prepend(QLatin1Char('.') + QString::fromUtf16(s6)) << false;
QTest::newRow("no-specialchars7") << QString::fromUtf16(s7).prepend("bla") << false;
- QTest::newRow("no-specialchars8") << QString::fromUtf16(s8).append("foo") << false;
QTest::newRow("exception1") << "pref.iwate.jp" << false;
QTest::newRow("exception2") << "omanpost.om" << false;
@@ -479,28 +462,6 @@ void tst_QNetworkCookieJar::effectiveTLDs_data()
QTest::newRow("yes-wildcard5") << "foo.sch.uk" << true;
QTest::newRow("yes-platform.sh") << "eu.platform.sh" << true;
QTest::newRow("no-platform.sh") << "something.platform.sh" << false;
-
- int inFirst = 0; // First group is guaranteed to be in first chunk.
- while (tldIndices[inFirst] < tldChunks[0])
- ++inFirst;
- Q_ASSERT(inFirst < tldCount);
- const char *lastGroupFromFirstChunk = &tldData[0][tldIndices[inFirst - 1]];
- const char *cut = &tldData[0][tldChunks[0]];
- for (const char *entry = lastGroupFromFirstChunk; entry < cut; entry += strlen(entry) + 1)
- QTest::addRow("lastGroupFromFirstChunk: %s", entry) << entry << true;
-
- Q_ASSERT(tldChunkCount > 1); // There are enough TLDs to fill 64K bytes
- // The tldCount + 1 entries in tldIndices are indexed by hash value and some
- // hash cells may be empty: we need to find the last non-empty hash cell.
- int tail = tldCount;
- while (tldIndices[tail - 1] == tldIndices[tail])
- --tail;
- Q_ASSERT(tldIndices[tail] == tldChunks[tldChunkCount - 1]);
- const char *lastGroupFromLastChunk =
- &tldData[tldChunkCount-1][tldIndices[tail - 1] - tldChunks[tldChunkCount - 2]];
- const char *end = &tldData[tldChunkCount-1][tldIndices[tail] - tldChunks[tldChunkCount - 2]];
- for (const char *entry = lastGroupFromLastChunk; entry < end; entry += strlen(entry) + 1)
- QTest::addRow("lastGroupFromLastChunk: %s", entry) << entry << true;
}
void tst_QNetworkCookieJar::effectiveTLDs()
@@ -556,7 +517,7 @@ void tst_QNetworkCookieJar::rfc6265_data()
void tst_QNetworkCookieJar::rfc6265()
{
- QFETCH(QStringList, received);
+ QFETCH(const QStringList, received);
QFETCH(QList<QNetworkCookie>, sent);
QFETCH(QString, sentTo);
@@ -567,16 +528,16 @@ void tst_QNetworkCookieJar::rfc6265()
QNetworkCookieJar jar;
QList<QNetworkCookie> receivedCookies;
- foreach (const QString &cookieLine, received)
+ for (const QString &cookieLine : received)
receivedCookies.append(QNetworkCookie::parseCookies(cookieLine.toUtf8()));
jar.setCookiesFromUrl(receivedCookies, receivedUrl);
QList<QNetworkCookie> cookiesToSend = jar.cookiesForUrl(sentUrl);
//compare cookies only using name/value, as the metadata isn't sent over the network
- QCOMPARE(cookiesToSend.count(), sent.count());
+ QCOMPARE(cookiesToSend.size(), sent.size());
bool ok = true;
- for (int i = 0; i < cookiesToSend.count(); i++) {
+ for (int i = 0; i < cookiesToSend.size(); i++) {
if (cookiesToSend.at(i).name() != sent.at(i).name()) {
ok = false;
break;
diff --git a/tests/auto/network/access/qnetworkdiskcache/CMakeLists.txt b/tests/auto/network/access/qnetworkdiskcache/CMakeLists.txt
index af58132fb3..023868f57e 100644
--- a/tests/auto/network/access/qnetworkdiskcache/CMakeLists.txt
+++ b/tests/auto/network/access/qnetworkdiskcache/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qnetworkdiskcache.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkdiskcache Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkdiskcache LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkdiskcache
SOURCES
tst_qnetworkdiskcache.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp b/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp
index 5dc2936d25..ec32c780cd 100644
--- a/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp
+++ b/tests/auto/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.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 <QtNetwork/QtNetwork>
#include <QTest>
@@ -37,7 +12,7 @@
#define EXAMPLE_URL "http://user:pass@localhost:4/#foo"
#define EXAMPLE_URL2 "http://user:pass@localhost:4/bar"
//cached objects are organized into these many subdirs
-#define NUM_SUBDIRECTORIES 16
+#define NUM_SUBDIRECTORIES 15
class tst_QNetworkDiskCache : public QObject
{
@@ -303,17 +278,17 @@ void tst_QNetworkDiskCache::clear()
QVERIFY(cache.cacheSize() > qint64(0));
QString cacheDirectory = cache.cacheDirectory();
- QCOMPARE(countFiles(cacheDirectory).count(), NUM_SUBDIRECTORIES + 3);
+ QCOMPARE(countFiles(cacheDirectory).size(), NUM_SUBDIRECTORIES + 3);
cache.clear();
- QCOMPARE(countFiles(cacheDirectory).count(), NUM_SUBDIRECTORIES + 2);
+ QCOMPARE(countFiles(cacheDirectory).size(), NUM_SUBDIRECTORIES + 2);
// don't delete files that it didn't create
QTemporaryFile file(cacheDirectory + "/XXXXXX");
if (file.open()) {
file.fileName(); // make sure it exists with a name
- QCOMPARE(countFiles(cacheDirectory).count(), NUM_SUBDIRECTORIES + 3);
+ QCOMPARE(countFiles(cacheDirectory).size(), NUM_SUBDIRECTORIES + 3);
cache.clear();
- QCOMPARE(countFiles(cacheDirectory).count(), NUM_SUBDIRECTORIES + 3);
+ QCOMPARE(countFiles(cacheDirectory).size(), NUM_SUBDIRECTORIES + 3);
}
}
@@ -380,9 +355,9 @@ void tst_QNetworkDiskCache::remove()
QUrl url(EXAMPLE_URL);
cache.setupWithOne(tempDir.path(), url);
QString cacheDirectory = cache.cacheDirectory();
- QCOMPARE(countFiles(cacheDirectory).count(), NUM_SUBDIRECTORIES + 3);
+ QCOMPARE(countFiles(cacheDirectory).size(), NUM_SUBDIRECTORIES + 3);
cache.remove(url);
- QCOMPARE(countFiles(cacheDirectory).count(), NUM_SUBDIRECTORIES + 2);
+ QCOMPARE(countFiles(cacheDirectory).size(), NUM_SUBDIRECTORIES + 2);
}
void tst_QNetworkDiskCache::accessAfterRemove() // QTBUG-17400
@@ -501,9 +476,9 @@ void tst_QNetworkDiskCache::fileMetaData()
url.setFragment(QString());
QString cacheDirectory = cache.cacheDirectory();
- QStringList list = countFiles(cacheDirectory);
- QCOMPARE(list.count(), NUM_SUBDIRECTORIES + 3);
- foreach(QString fileName, list) {
+ const QStringList list = countFiles(cacheDirectory);
+ QCOMPARE(list.size(), NUM_SUBDIRECTORIES + 3);
+ for (const QString &fileName : list) {
QFileInfo info(fileName);
if (info.isFile()) {
QNetworkCacheMetaData metaData = cache.call_fileMetaData(fileName);
@@ -546,9 +521,9 @@ void tst_QNetworkDiskCache::expire()
}
QString cacheDirectory = cache.cacheDirectory();
- QStringList list = countFiles(cacheDirectory);
+ const QStringList list = countFiles(cacheDirectory);
QStringList cacheList;
- foreach(QString fileName, list) {
+ for (const QString &fileName : list) {
QFileInfo info(fileName);
if (info.isFile()) {
QNetworkCacheMetaData metaData = cache.call_fileMetaData(fileName);
@@ -556,7 +531,7 @@ void tst_QNetworkDiskCache::expire()
}
}
std::sort(cacheList.begin(), cacheList.end());
- for (int i = 0; i < cacheList.count(); ++i) {
+ for (int i = 0; i < cacheList.size(); ++i) {
QString fileName = cacheList[i];
QCOMPARE(fileName, QLatin1String("http://localhost:4/") + QString::number(i + 6));
}
@@ -594,11 +569,11 @@ void tst_QNetworkDiskCache::oldCacheVersionFile()
QVERIFY(!metaData.isValid());
QVERIFY(!QFile::exists(name));
} else {
- QStringList files = countFiles(cache.cacheDirectory());
- QCOMPARE(files.count(), NUM_SUBDIRECTORIES + 3);
+ const QStringList files = countFiles(cache.cacheDirectory());
+ QCOMPARE(files.size(), NUM_SUBDIRECTORIES + 3);
// find the file
QString cacheFile;
- foreach (QString file, files) {
+ for (const QString &file : files) {
QFileInfo info(file);
if (info.isFile())
cacheFile = file;
@@ -635,8 +610,8 @@ void tst_QNetworkDiskCache::streamVersion()
QString cacheFile;
// find the file
- QStringList files = countFiles(cache.cacheDirectory());
- foreach (const QString &file, files) {
+ const QStringList files = countFiles(cache.cacheDirectory());
+ for (const QString &file : files) {
QFileInfo info(file);
if (info.isFile()) {
cacheFile = file;
@@ -682,6 +657,7 @@ void tst_QNetworkDiskCache::streamVersion()
QIODevice *dataDevice = cache.data(url);
QVERIFY(dataDevice != 0);
QByteArray cachedData = dataDevice->readAll();
+ delete dataDevice;
QCOMPARE(cachedData, data);
}
}
@@ -718,8 +694,6 @@ public:
QNetworkDiskCache cache;
cache.setCacheDirectory(cachePath);
- int read = 0;
-
int i = 0;
for (; i < 5000; ++i) {
if (other && other->isFinished())
@@ -761,7 +735,7 @@ public:
if (d) {
QByteArray x = d->readAll();
if (x != longString && x != longString2) {
- qDebug() << x.length() << QString(x);
+ qDebug() << x.size() << QString(x);
gotMetaData = cache.metaData(url);
qDebug() << (gotMetaData.url().toString())
<< gotMetaData.lastModified()
@@ -770,7 +744,6 @@ public:
}
if (gotMetaData.isValid())
QVERIFY(x == longString || x == longString2);
- read++;
delete d;
}
}
@@ -778,9 +751,8 @@ public:
cache.remove(url);
if (QRandomGenerator::global()->bounded(5) == 1)
cache.clear();
- sleep(0);
+ sleep(std::chrono::seconds{0});
}
- //qDebug() << "read!" << read << i;
}
QDateTime dt;
diff --git a/tests/auto/network/access/qnetworkreply/BLACKLIST b/tests/auto/network/access/qnetworkreply/BLACKLIST
index 977d8be7f5..a4c7c1ee30 100644
--- a/tests/auto/network/access/qnetworkreply/BLACKLIST
+++ b/tests/auto/network/access/qnetworkreply/BLACKLIST
@@ -1,8 +1,6 @@
# See qtbase/src/testlib/qtestblacklist.cpp for format
[getErrors:ftp-host]
linux
-[getFromHttpIntoBuffer]
-osx
[ioPostToHttpFromSocket]
osx
[ioHttpRedirectMultipartPost]
@@ -17,12 +15,8 @@ windows-10
windows-10
[backgroundRequest]
macos
-[connectToIPv6Address]
-macos
[deleteFromHttp]
macos
-[downloadProgress]
-macos
[httpCanReadLine]
macos
[httpRecursiveCreation]
@@ -31,8 +25,6 @@ osx
macos
[ioGetFromBuiltinHttp]
osx
-[ioGetFromHttp]
-macos
[ioPostToHttpFromFile]
macos
[ioPostToHttpFromSocketSynchronous]
@@ -43,35 +35,18 @@ osx
macos
[lastModifiedHeaderForHttp]
macos
-[multipartSkipIndices]
-macos
-[nestedEventLoops]
-osx
-[postToHttp]
-macos
-[postToHttpMultipart]
-macos
[postToHttpSynchronous]
macos
-[putGetDeleteGetFromHttp]
-macos
[putToHttpSynchronous]
macos
[putToHttpsSynchronous]
osx
-[putWithRateLimiting]
-macos
-[qtbug13431replyThrottling]
-macos
-[receiveCookiesFromHttp]
-osx
[receiveCookiesFromHttpSynchronous]
osx
-[sendCookies]
-osx
[sendCookiesSynchronous]
osx
-[sendCustomRequestToHttp]
-macos
[backgroundRequestConnectInBackground]
osx
+#QTBUG-103055
+[ioGetFromHttpWithProxyAuth]
+qnx
diff --git a/tests/auto/network/access/qnetworkreply/CMakeLists.txt b/tests/auto/network/access/qnetworkreply/CMakeLists.txt
index 3b138b3918..9bfd90cd56 100644
--- a/tests/auto/network/access/qnetworkreply/CMakeLists.txt
+++ b/tests/auto/network/access/qnetworkreply/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qnetworkreply.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_qnetworkreply LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(echo)
add_subdirectory(test)
diff --git a/tests/auto/network/access/qnetworkreply/certs/qt-test-server-cacert.pem b/tests/auto/network/access/qnetworkreply/certs/qt-test-server-cacert.pem
index c5aea0d7c9..29fd755de7 100644
--- a/tests/auto/network/access/qnetworkreply/certs/qt-test-server-cacert.pem
+++ b/tests/auto/network/access/qnetworkreply/certs/qt-test-server-cacert.pem
@@ -1,17 +1,17 @@
-----BEGIN CERTIFICATE-----
-MIICpzCCAhACCQCzAF1hyRVzAjANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UEBhMC
-Tk8xDTALBgNVBAgTBE9zbG8xDTALBgNVBAcTBE9zbG8xDjAMBgNVBAoTBU5va2lh
-MTUwMwYDVQQLFCxRdCBTb2Z0d2FyZS9lbWFpbEFkZHJlc3M9bm9ib2R5QG5vZG9t
-YWluLm9yZzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQwHhcN
-MTkwNjI0MTI0OTIxWhcNMjIwNjIzMTI0OTIxWjCBlzELMAkGA1UEBhMCTk8xDTAL
-BgNVBAgTBE9zbG8xDTALBgNVBAcTBE9zbG8xDjAMBgNVBAoTBU5va2lhMTUwMwYD
-VQQLFCxRdCBTb2Z0d2FyZS9lbWFpbEFkZHJlc3M9bm9ib2R5QG5vZG9tYWluLm9y
-ZzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQwgZ8wDQYJKoZI
-hvcNAQEBBQADgY0AMIGJAoGBAM2q22/WNMmn8cC+5EEYGeICySLmp9W6Ay6eKHr0
-Xxp3X3epETuPfvAuxp7rOtkS18EMUegkUj8jw0IMEcbyHKFC/rTCaYOt93CxGBXM
-IChiMPAsFeYzGa/D6xzAkfcRaJRQ+Ek3CDLXPnXfo7xpABXezYcPXAJrgsgBfWrw
-HdxzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEASCKbqEX5ysC549mq90ydk4jyDW3m
-PUyet01fKpcRqVs+OJxdExFBTra3gho6WzzpTSPsuX2ZKOLF5k6KkCvdCGvhC1Kv
-HHPIExurfzvdlSRzj6HbKyPuSfxyOloH0bBp7/Gg5RIuBPKlbmfbnTLtwEjhhbMU
-SoYI8HZd3HfY87c=
+MIICyjCCAjMCFHPGDqJR+klHni4XbETMk6GLn/UEMA0GCSqGSIb3DQEBDQUAMIGj
+MRcwFQYDVQQKEw5UaGUgUXQgQ29tcGFueTEUMBIGA1UECxMLUXQgU29mdHdhcmUx
+IjAgBgkqhkiG9w0BCQEWE25vYm9keUBub2RvbWFpbi5vcmcxDTALBgNVBAcTBE9z
+bG8xDTALBgNVBAgTBE9zbG8xCzAJBgNVBAYTAk5PMSMwIQYDVQQDExpxdC10ZXN0
+LXNlcnZlci5xdC10ZXN0LW5ldDAeFw0yMjA2MjQxMTU4NDlaFw0zMjA2MjExMTU4
+NDlaMIGjMRcwFQYDVQQKEw5UaGUgUXQgQ29tcGFueTEUMBIGA1UECxMLUXQgU29m
+dHdhcmUxIjAgBgkqhkiG9w0BCQEWE25vYm9keUBub2RvbWFpbi5vcmcxDTALBgNV
+BAcTBE9zbG8xDTALBgNVBAgTBE9zbG8xCzAJBgNVBAYTAk5PMSMwIQYDVQQDExpx
+dC10ZXN0LXNlcnZlci5xdC10ZXN0LW5ldDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAzarbb9Y0yafxwL7kQRgZ4gLJIuan1boDLp4oevRfGndfd6kRO49+8C7G
+nus62RLXwQxR6CRSPyPDQgwRxvIcoUL+tMJpg633cLEYFcwgKGIw8CwV5jMZr8Pr
+HMCR9xFolFD4STcIMtc+dd+jvGkAFd7Nhw9cAmuCyAF9avAd3HMCAwEAATANBgkq
+hkiG9w0BAQ0FAAOBgQCZyRe25WqOjrNS6BKPs7ep7eyCON3NKdWnfABZrSjGJQ87
+PoFKl6+9YBSlSpl8qk7c29ic+wA4qFQzPJkrbYIXjwVMAr+cC1kVrlUVqcwmvnKo
+5vj57/v8S0Uc4/GesIsxZR7QM+3diPDyk7Bsc3IkpINb31Dl0mlg25nztg8NxA==
-----END CERTIFICATE-----
diff --git a/tests/auto/network/access/qnetworkreply/certs/server.key b/tests/auto/network/access/qnetworkreply/certs/server.key
index 9d1664d609..b8d0d0449b 100644
--- a/tests/auto/network/access/qnetworkreply/certs/server.key
+++ b/tests/auto/network/access/qnetworkreply/certs/server.key
@@ -1,15 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQCnyKBKxBkFG2a6MuLS8RxvF4LkOS4BUZDbBDQyESHCDW9Z2FOQ
-VD+Dj6nTs9XuGpuArsMlyV6lr0tgBaqg0ZEBH8oEg+NYHJkyRYRwclgDmEpji0H1
-CEnSkQJga+Rk/t2gqnQI6TRMkV8SPTdNVCytf1uYYDYCjDv2RfMnapuUnQIDAQAB
-AoGANFzLkanTeSGNFM0uttBipFT9F4a00dqHz6JnO7zXAT26I5r8sU1pqQBb6uLz
-/+Qz5Zwk8RUAQcsMRgJetuPQUb0JZjF6Duv24hNazqXBCu7AZzUenjafwmKC/8ri
-KpX3fTwqzfzi//FKGgbXQ80yykSSliDL3kn/drATxsLCgQECQQDXhEFWLJ0vVZ1s
-1Ekf+3NITE+DR16X+LQ4W6vyEHAjTbaNWtcTKdAWLA2l6N4WAAPYSi6awm+zMxx4
-VomVTsjdAkEAx0z+e7natLeFcrrq8pbU+wa6SAP1VfhQWKitxL1e7u/QO90NCpxE
-oQYKzMkmmpOOFjQwEMAy1dvFMbm4LHlewQJAC/ksDBaUcQHHqjktCtrUb8rVjAyW
-A8lscckeB2fEYyG5J6dJVaY4ClNOOs5yMDS2Afk1F6H/xKvtQ/5CzInA/QJATDub
-K+BPU8jO9q+gpuIi3VIZdupssVGmCgObVCHLakG4uO04y9IyPhV9lA9tALtoIf4c
-VIvv5fWGXBrZ48kZAQJBAJmVCdzQxd9LZI5vxijUCj5EI4e+x5DRqVUvyP8KCZrC
-AiNyoDP85T+hBZaSXK3aYGpVwelyj3bvo1GrTNwNWLw=
+MIIEowIBAAKCAQEAyinVk3QBbjS+UczWP+jnugFn5YZuOnCPlPK0SmeUiZW0x4PA
+kXoks7LSra+XT2hg07rPBhEyQUE13qYw+RVBSexvhw2RDg76oV17jt7jVjb04hhK
+bSBKisW4UHF0rvyzoWzJzVxaqxfcFcYT7uE+t0cnCHi/MGX+9gUI8Dz46IopCA5k
+fKmA+XnF//Ov8wokIN4Wk0lqkAyWDCg/O5Av6H/zbr/U3CCI5eI5cRRIwSMDxbPX
+v9b+dgvxhMJGMku6UMMhSfk9ac6FCSNghYB7w3C9zIGiA/tOHysujwGzpzRKDzT5
+P/qNqLkLOxvspUh32BD/jgopAhoNi9pDm60iLQIDAQABAoIBAA/E45v02Ie4JYBL
+8gpaKHkh0vDcY4y7ave7VsTW/4cb3lYRuNugI2zA7h4OLEdNZQAe+jcG8FyWsZUE
+cZ18QvN5Ndna/Q2TrYkYuaKTUDhRYRihvGx2sFnSwmXD884SeBCHY9ZY9dmSquAn
+6zYe671wF2NZx9AGpLSb/+59Uw0QVkCDf23tb7ey5vHXJnNq5NINOnv1sNH/zbYR
+hJnUEVgRLkpda0r2LqIHbrCpcgjWQeoKscTzxTI016LAozBSqAvoLt4QYuvY8kI7
+boK8KF49HEwTydjgDI/W3Xa0YEzbXVLEReuWoMKFeayNp+GSFy0SwkzjY4zpUP1N
+xX6/2CECgYEA83fifDH8e4g1y8MuI8LzDRsMPOsvl3ZnB31JAcvUlLheVF1H3Slt
+NEGSKYtx4zb0o+5VKy6k6dqF8VXDcPDyyvItyZYZtv7YLIhu/HBJypr9NfdICNnK
+aPQWRZ/piAEi73vxx1qwIZapz1cJWg95mRv/QYVf8Xb7PgKcu5UL+ysCgYEA1JGv
+t1gNsKc4BtHmYmTnzdxz4GhkgJY1y/XfGzc2CfRPxo16Fob1WqQCTf1DtsCm0zTi
+sJdUBq/acMeeyTA6eA4LyfgEVVRVY4+kurW7JNGkR6xbWtWQX11jkVGOZ65MIvtY
+ZMg3xo3w+hYvMhK0ZC9aSXgnl0crvGAJtd8ZzAcCgYAwnTmODvUZPYNwYlKuNVkO
+vt3ctCFWnv/HkQ6o2yhhYccEFXQqBwGVM5qZzQw6kFic+xPqgW/Qeh/Qpo1V2ebA
++0aFQAF2dsB3c+6lXU5+tB/nTK8HhWVTO5nO4TViQMfXBeqrIcKVkl3p1rk5UGm5
+VsvLK3SS5G0aXq8pDYPM7QKBgQChsQvjP8RyGlCAx4siTzUQH1+5VE8WjKvxMF58
+OjwNyFwiYR18Iz5gqx7hqgOm8NY1FCZXQ1T0HTHg1cdPrDLdfXm0MMdDDPpC2FHq
+gDARarI2nsGCz66ZC9WgBVR4Q1nAxkXPq4jZrMCfyt4tjZLQHkDkX9RluwpmqPrZ
+8BGUYwKBgB1u8mPXIxyGSHYitqf40eIr5yzlrCgDWoqRQf4jFSUNyB/+YT2VqIXu
+WfixkX9WW0sx/c79c9791Sf+vp9+DPPtMYDGc6y0xrbxyC+yT7Uo4Azbs/g3Kftl
+WhYt/L1CB5oOcilYGR+YodN0l2tV1WrCNSNdtbPyoDHrM9S22Rjm
-----END RSA PRIVATE KEY-----
diff --git a/tests/auto/network/access/qnetworkreply/certs/server.pem b/tests/auto/network/access/qnetworkreply/certs/server.pem
index 67eb495319..47c22d9f29 100644
--- a/tests/auto/network/access/qnetworkreply/certs/server.pem
+++ b/tests/auto/network/access/qnetworkreply/certs/server.pem
@@ -1,24 +1,22 @@
-----BEGIN CERTIFICATE-----
-MIIEEzCCAvugAwIBAgIBADANBgkqhkiG9w0BAQUFADCBnDELMAkGA1UEBhMCTk8x
-DTALBgNVBAgTBE9zbG8xEDAOBgNVBAcTB055ZGFsZW4xFjAUBgNVBAoTDVRyb2xs
-dGVjaCBBU0ExFDASBgNVBAsTC0RldmVsb3BtZW50MRcwFQYDVQQDEw5mbHVrZS50
-cm9sbC5ubzElMCMGCSqGSIb3DQEJARYWYWhhbnNzZW5AdHJvbGx0ZWNoLmNvbTAe
-Fw0wNzEyMDQwMTEwMzJaFw0zNTA0MjEwMTEwMzJaMGMxCzAJBgNVBAYTAk5PMQ0w
-CwYDVQQIEwRPc2xvMRYwFAYDVQQKEw1Ucm9sbHRlY2ggQVNBMRQwEgYDVQQLEwtE
-ZXZlbG9wbWVudDEXMBUGA1UEAxMOZmx1a2UudHJvbGwubm8wgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAKfIoErEGQUbZroy4tLxHG8XguQ5LgFRkNsENDIRIcIN
-b1nYU5BUP4OPqdOz1e4am4CuwyXJXqWvS2AFqqDRkQEfygSD41gcmTJFhHByWAOY
-SmOLQfUISdKRAmBr5GT+3aCqdAjpNEyRXxI9N01ULK1/W5hgNgKMO/ZF8ydqm5Sd
-AgMBAAGjggEaMIIBFjAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NM
-IEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUIYUEPSMBZuX3nxqEJIqv
-Cnn05awwgbsGA1UdIwSBszCBsKGBoqSBnzCBnDELMAkGA1UEBhMCTk8xDTALBgNV
-BAgTBE9zbG8xEDAOBgNVBAcTB055ZGFsZW4xFjAUBgNVBAoTDVRyb2xsdGVjaCBB
-U0ExFDASBgNVBAsTC0RldmVsb3BtZW50MRcwFQYDVQQDEw5mbHVrZS50cm9sbC5u
-bzElMCMGCSqGSIb3DQEJARYWYWhhbnNzZW5AdHJvbGx0ZWNoLmNvbYIJAI6otOiR
-t1QuMA0GCSqGSIb3DQEBBQUAA4IBAQBtV1/RBUPwYgXsKnGl3BkI8sSmvbsl2cqJ
-AQ7kzx/BjMgkGDVTWXvAQ7Qy5piypu8VBQtIX+GgDJepoXfYNRgwvKmP07dUx/Gp
-nl3mGb/2PFsr2OQ+YhiIi9Mk4UCbDOYpFmKr6gUkcDaqVZPvAoEbIxCiBOtWlXX8
-+JSxXULFPzZEhV06LpBGiqK5b4euDBVAGTGQ/Dslu67xZhMNhZDZSTSP8l35ettN
-XSf2dp01jAamTKOxsrZvHdejAP1y657qRKGvITR9x0LiSZEZi8CtuoKAqHFw9DUx
-kWOEIJXpYK9ki8z/PYp2dD3IVW3kjsMrHOhCGK6f5mucNAbsavLD
+MIIDrzCCApcCFGtyyXYbHuuIIseKAiLxL5nMKEnwMA0GCSqGSIb3DQEBCwUAMIGT
+MQswCQYDVQQGEwJOTzENMAsGA1UECAwET3NsbzEQMA4GA1UEBwwHTnlkYWxlbjEN
+MAsGA1UECgwEVFF0QzEUMBIGA1UECwwLRGV2ZWxvcG1lbnQxFzAVBgNVBAMMDmZs
+dWtlLnRyb2xsLm5vMSUwIwYJKoZIhvcNAQkBFhZhaGFuc3NlbkB0cm9sbHRlY2gu
+Y29tMB4XDTIyMDcwODA2Mjc1OVoXDTMyMDcwNTA2Mjc1OVowgZMxCzAJBgNVBAYT
+Ak5PMQ0wCwYDVQQIDARPc2xvMRAwDgYDVQQHDAdOeWRhbGVuMQ0wCwYDVQQKDARU
+UXRDMRQwEgYDVQQLDAtEZXZlbG9wbWVudDEXMBUGA1UEAwwOZmx1a2UudHJvbGwu
+bm8xJTAjBgkqhkiG9w0BCQEWFmFoYW5zc2VuQHRyb2xsdGVjaC5jb20wggEiMA0G
+CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDKKdWTdAFuNL5RzNY/6Oe6AWflhm46
+cI+U8rRKZ5SJlbTHg8CReiSzstKtr5dPaGDTus8GETJBQTXepjD5FUFJ7G+HDZEO
+DvqhXXuO3uNWNvTiGEptIEqKxbhQcXSu/LOhbMnNXFqrF9wVxhPu4T63RycIeL8w
+Zf72BQjwPPjoiikIDmR8qYD5ecX/86/zCiQg3haTSWqQDJYMKD87kC/of/Nuv9Tc
+IIjl4jlxFEjBIwPFs9e/1v52C/GEwkYyS7pQwyFJ+T1pzoUJI2CFgHvDcL3MgaID
++04fKy6PAbOnNEoPNPk/+o2ouQs7G+ylSHfYEP+OCikCGg2L2kObrSItAgMBAAEw
+DQYJKoZIhvcNAQELBQADggEBALHdGWQ4YqucGJSP1n1ANrLILy+sXqEP7hMdG5HH
+GDZ/ygUhjTZ/k5Cj0+auC4Aw490l8Tj8gmzt68KJmgSH+z1erY67+fhWtAewDzU5
+zIMqKHja1hSb5JIdWaD7ZFBQzor2beBO0u+VzegWqe20kw2mkFAcdQTsV28hvr1v
+rcgpVkegQcmHpr6FBpYFmtnizpPnX5Zm+JJAlvSGvoYMI5i9Vc7/gdx790NeaXmy
+yD1ueFMfsPtAcZq8cSbGSCS5/pcuhIx+5O9+V8iwN9lKdYksTCLAn4SREHzlgi68
+SGY0OUMlXeD82K0+mDv+hzSmq4sk7CDGbSxVV5TwzFXDgNc=
-----END CERTIFICATE-----
diff --git a/tests/auto/network/access/qnetworkreply/echo/CMakeLists.txt b/tests/auto/network/access/qnetworkreply/echo/CMakeLists.txt
index 664b2f2fab..137b29110d 100644
--- a/tests/auto/network/access/qnetworkreply/echo/CMakeLists.txt
+++ b/tests/auto/network/access/qnetworkreply/echo/CMakeLists.txt
@@ -1,11 +1,12 @@
-# Generated from echo.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## echo Binary:
#####################################################################
qt_internal_add_executable(echo
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
main.cpp
)
diff --git a/tests/auto/network/access/qnetworkreply/echo/main.cpp b/tests/auto/network/access/qnetworkreply/echo/main.cpp
index 9085de7898..b10eaa745c 100644
--- a/tests/auto/network/access/qnetworkreply/echo/main.cpp
+++ b/tests/auto/network/access/qnetworkreply/echo/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 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/QFile>
@@ -37,11 +12,13 @@ int main(int argc, char **)
}
QFile file;
- file.open(stdin, QFile::ReadWrite);
+ if (!file.open(stdin, QFile::ReadWrite))
+ return 1;
QByteArray data = file.readAll();
file.close();
- file.open(stdout, QFile::WriteOnly);
+ if (!file.open(stdout, QFile::WriteOnly))
+ return 1;
file.write(data);
file.close();
return 0;
diff --git a/tests/auto/network/access/qnetworkreply/test/CMakeLists.txt b/tests/auto/network/access/qnetworkreply/test/CMakeLists.txt
index d54fb40c56..fa353b2769 100644
--- a/tests/auto/network/access/qnetworkreply/test/CMakeLists.txt
+++ b/tests/auto/network/access/qnetworkreply/test/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkreply Test:
@@ -18,17 +19,19 @@ list(APPEND test_data "../index.html")
list(APPEND test_data "../smb-file.txt")
qt_internal_add_test(tst_qnetworkreply
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../tst_qnetworkreply.cpp
../data/gzip.rcc.cpp
../data/zstandard.rcc.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
TESTDATA ${test_data}
- QT_TEST_SERVER_LIST "vsftpd" "apache2" "ftp-proxy" "danted" "squid" # special case
+ QT_TEST_SERVER_LIST "vsftpd" "apache2" "ftp-proxy" "danted" "squid"
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
+add_dependencies(tst_qnetworkreply echo)
# Resources:
set(qnetworkreply_resource_files
@@ -43,15 +46,3 @@ qt_internal_add_resource(tst_qnetworkreply "qnetworkreply"
FILES
${qnetworkreply_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:test.pro:<TRUE>:
-# QT_FOR_CONFIG = "gui-private"
-# QT_TEST_SERVER_LIST = "vsftpd" "apache2" "ftp-proxy" "danted" "squid"
-# testcase.timeout = "600"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:test.pro:NOT ANDROID:
-# TEST_HELPER_INSTALLS = "../echo/echo"
diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
index 2ebeff8689..a4a05b18f5 100644
--- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtNetwork/qtnetworkglobal.h>
@@ -39,19 +14,25 @@
#include <QWaitCondition>
#include <QScopeGuard>
#include <QBuffer>
+#include <QMap>
#include <QtCore/QCryptographicHash>
#include <QtCore/QDataStream>
-#include <QtCore/QUrl>
+#include <QtCore/QDateTime>
#include <QtCore/QEventLoop>
#include <QtCore/QElapsedTimer>
#include <QtCore/QFile>
+#include <QtCore/QList>
#include <QtCore/QRandomGenerator>
#include <QtCore/QRegularExpression>
#include <QtCore/QRegularExpressionMatch>
+#include <QtCore/QSet>
#include <QtCore/QSharedPointer>
#include <QtCore/QScopedPointer>
#include <QtCore/QTemporaryFile>
+#include <QtCore/QTimeZone>
+#include <QtCore/QUrl>
+
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
#include <QtNetwork/QLocalSocket>
@@ -66,6 +47,7 @@
#include <QtNetwork/qnetworkdiskcache.h>
#include <QtNetwork/qnetworkrequest.h>
#include <QtNetwork/qnetworkreply.h>
+#include <QtNetwork/QHttp1Configuration>
#include <QtNetwork/qnetworkcookie.h>
#include <QtNetwork/QNetworkCookieJar>
#include <QtNetwork/QHttpPart>
@@ -86,6 +68,9 @@
Q_DECLARE_METATYPE(QSharedPointer<char>)
#endif
+#include <memory>
+#include <optional>
+
#ifdef Q_OS_UNIX
# include <sys/types.h>
# include <unistd.h> // for getuid()
@@ -105,6 +90,9 @@ Q_DECLARE_METATYPE(QNetworkProxyQuery)
typedef QSharedPointer<QNetworkReply> QNetworkReplyPtr;
+using namespace Qt::StringLiterals;
+using namespace std::chrono_literals;
+
#if QT_CONFIG(ssl)
QT_BEGIN_NAMESPACE
// Technically, a workaround, and only needed for OpenSSL:
@@ -146,6 +134,29 @@ class tst_QNetworkReply: public QObject
"\r\n";
return s;
}
+ static QString movedReplyStr() {
+ QString s = "HTTP/1.1 301 Moved Permanently\r\n"
+ "Content-Type: text/plain\r\n"
+ "location: %1\r\n"
+ "\r\n";
+ return s;
+ }
+
+ static QString foundReplyStr() {
+ QString s = "HTTP/1.1 302 Found\r\n"
+ "Content-Type: text/plain\r\n"
+ "location: %1\r\n"
+ "\r\n";
+ return s;
+ }
+
+ static QString permRedirectReplyStr() {
+ QString s = "HTTP/1.1 308 Permanent Redirect\r\n"
+ "Content-Type: text/plain\r\n"
+ "location: %1\r\n"
+ "\r\n";
+ return s;
+ }
static const QByteArray httpEmpty200Response;
static const QString filePermissionFileName;
@@ -229,6 +240,12 @@ private Q_SLOTS:
void getFromFtpAfterError(); // QTBUG-40797
void getFromHttp_data();
void getFromHttp();
+ void getWithBodyFromHttp_data();
+ void getWithBodyFromHttp();
+ void getWithAndWithoutBodyFromHttp_data();
+ void getWithAndWithoutBodyFromHttp();
+ void getWithBodyRedirected_data();
+ void getWithBodyRedirected();
void getErrors_data();
void getErrors();
#if QT_CONFIG(networkproxy)
@@ -246,6 +263,8 @@ private Q_SLOTS:
void putToHttpSynchronous();
void putToHttpMultipart_data();
void putToHttpMultipart();
+ void putWithoutBody();
+ void putWithoutBody_data();
void postToHttp_data();
void postToHttp();
void postToHttpSynchronous_data();
@@ -253,6 +272,8 @@ private Q_SLOTS:
void postToHttpMultipart_data();
void postToHttpMultipart();
void multipartSkipIndices(); // QTBUG-32534
+ void postWithoutBody_data();
+ void postWithoutBody();
#if QT_CONFIG(ssl)
void putToHttps_data();
void putToHttps();
@@ -280,6 +301,7 @@ private Q_SLOTS:
void ioGetFromFileSpecial();
void ioGetFromFile_data();
void ioGetFromFile();
+ void ioGetFromFileUrl();
void ioGetFromFtp_data();
void ioGetFromFtp();
void ioGetFromFtpWithReuse();
@@ -304,8 +326,8 @@ private Q_SLOTS:
#endif
void ioGetFromHttpBrokenServer_data();
void ioGetFromHttpBrokenServer();
- void ioGetFromHttpStatus100_data();
- void ioGetFromHttpStatus100();
+ void ioGetFromHttpStatusInformational_data();
+ void ioGetFromHttpStatusInformational();
void ioGetFromHttpNoHeaders_data();
void ioGetFromHttpNoHeaders();
void ioGetFromHttpWithCache_data();
@@ -462,6 +484,9 @@ private Q_SLOTS:
void varyingCacheExpiry_data();
void varyingCacheExpiry();
+ void amountOfHttp1ConnectionsQtbug25280_data();
+ void amountOfHttp1ConnectionsQtbug25280();
+
void dontInsertPartialContentIntoTheCache();
void httpUserAgent();
@@ -496,6 +521,7 @@ private Q_SLOTS:
void ioHttpCookiesDuringRedirect();
void ioHttpRedirect_data();
void ioHttpRedirect();
+ void ioHttpRedirectWithCache();
void ioHttpRedirectFromLocalToRemote();
void ioHttpRedirectPostPut_data();
void ioHttpRedirectPostPut();
@@ -514,8 +540,8 @@ private Q_SLOTS:
void autoDeleteReplies_data();
void autoDeleteReplies();
- void getWithTimeout();
- void postWithTimeout();
+ void requestWithTimeout_data();
+ void requestWithTimeout();
void moreActivitySignals_data();
void moreActivitySignals();
@@ -528,6 +554,16 @@ private Q_SLOTS:
void cacheWithContentEncoding();
void downloadProgressWithContentEncoding_data();
void downloadProgressWithContentEncoding();
+ void contentEncodingError_data();
+ void contentEncodingError();
+ void compressedReadyRead();
+ void notFoundWithCompression_data();
+ void notFoundWithCompression();
+
+ void qtbug68821proxyError_data();
+ void qtbug68821proxyError();
+
+ void abortAndError();
// NOTE: This test must be last!
void parentingRepliesToTheApp();
@@ -613,7 +649,8 @@ public:
int totalConnections;
bool stopTransfer = false;
- bool hasContent = false;
+ bool checkedContentLength = false;
+ bool foundContentLength = false;
int contentRead = 0;
int contentLength = 0;
@@ -645,6 +682,7 @@ public:
{
contentLength = 0;
receivedData.clear();
+ foundContentLength = false;
}
protected:
@@ -701,8 +739,13 @@ private:
void parseContentLength()
{
- int index = receivedData.indexOf("Content-Length:");
- index += sizeof("Content-Length:") - 1;
+ int index = receivedData.indexOf("content-length:");
+ if (index == -1)
+ return;
+
+ foundContentLength = true;
+
+ index += sizeof("content-length:") - 1;
const auto end = std::find(receivedData.cbegin() + index, receivedData.cend(), '\r');
auto num = receivedData.mid(index, std::distance(receivedData.cbegin() + index, end));
bool ok;
@@ -742,12 +785,14 @@ public slots:
if (doubleEndlPos != -1) {
const int endOfHeader = doubleEndlPos + 4;
- hasContent = receivedData.startsWith("POST") || receivedData.startsWith("PUT")
- || receivedData.startsWith("CUSTOM_WITH_PAYLOAD");
- if (hasContent && contentLength == 0)
+ contentRead = receivedData.size() - endOfHeader;
+
+ if (!checkedContentLength) {
parseContentLength();
- contentRead = receivedData.length() - endOfHeader;
- if (hasContent && contentRead < contentLength)
+ checkedContentLength = true;
+ }
+
+ if (contentRead < contentLength)
return;
// multiple requests incoming. remove the bytes of the current one
@@ -848,7 +893,7 @@ public:
qint64 cacheSize() const override
{
qint64 total = 0;
- foreach (const CachedContent &entry, cache)
+ for (const auto &[_, entry] : cache.asKeyValueRange())
total += entry.second.size();
return total;
}
@@ -1473,11 +1518,11 @@ QString tst_QNetworkReply::runSimpleRequest(QNetworkAccessManager::Operation op,
while (!reply->isFinished()) {
QTimer::singleShot(20000, loop, SLOT(quit()));
code = loop->exec();
- if (count == spy.count() && !reply->isFinished()) {
+ if (count == spy.size() && !reply->isFinished()) {
code = Timeout;
break;
}
- count = spy.count();
+ count = spy.size();
}
delete loop;
loop = 0;
@@ -1543,11 +1588,11 @@ int tst_QNetworkReply::waitForFinish(QNetworkReplyPtr &reply)
QSignalSpy spy(reply.data(), SIGNAL(downloadProgress(qint64,qint64)));
while (!reply->isFinished()) {
QTimer::singleShot(5000, loop, SLOT(quit()));
- if (loop->exec() == Timeout && count == spy.count() && !reply->isFinished()) {
+ if (loop->exec() == Timeout && count == spy.size() && !reply->isFinished()) {
returnCode = Timeout;
break;
}
- count = spy.count();
+ count = spy.size();
}
delete loop;
loop = 0;
@@ -1575,8 +1620,10 @@ void tst_QNetworkReply::initTestCase()
testDataDir = QCoreApplication::applicationDirPath();
#if defined(QT_TEST_SERVER)
- QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::ftpServerName(), 21));
- QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::ftpProxyServerName(), 2121));
+ if (ftpSupported) {
+ QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::ftpServerName(), 21));
+ QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::ftpProxyServerName(), 2121));
+ }
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::httpServerName(), 80));
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::httpServerName(), 443));
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::httpProxyServerName(), 3128));
@@ -1989,6 +2036,253 @@ void tst_QNetworkReply::getFromHttp()
QCOMPARE(reply->readAll(), reference.readAll());
}
+void tst_QNetworkReply::getWithBodyFromHttp_data()
+{
+ QTest::addColumn<QByteArray>("dataFromClientToServer");
+ QTest::addColumn<bool>("useDevice");
+ QTest::newRow("with-bytearray") << QByteArray("Body 1") << false;
+ QTest::newRow("with-bytearray2") << QByteArray("Body 2") << false;
+ QTest::newRow("with-bytearray3") << QByteArray("Body 3") << false;
+ QTest::newRow("with-device") << QByteArray("Body 1") << true;
+ QTest::newRow("with-device2") << QByteArray("Body 2") << true;
+ QTest::newRow("with-device3") << QByteArray("Body 3") << true;
+}
+
+void tst_QNetworkReply::getWithBodyFromHttp()
+{
+ QFETCH(QByteArray, dataFromClientToServer);
+ QFETCH(bool, useDevice);
+
+ QBuffer buff;
+ buff.setData(dataFromClientToServer);
+ buff.open(QIODevice::ReadOnly);
+
+ QByteArray dataFromServerToClient = QByteArray("Long first line\r\nLong second line");
+ QByteArray httpResponse = QByteArray("HTTP/1.0 200 OK\r\nContent-Length: ");
+ httpResponse += QByteArray::number(dataFromServerToClient.size());
+ httpResponse += "\r\n\r\n";
+ httpResponse += dataFromServerToClient;
+
+ MiniHttpServer server(httpResponse);
+ server.doClose = true;
+
+ QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+ QNetworkReplyPtr reply;
+
+ if (useDevice)
+ reply.reset(manager.get(request, &buff));
+ else
+ reply.reset(manager.get(request, dataFromClientToServer));
+
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
+ QCOMPARE(server.contentLength, dataFromClientToServer.size());
+ QCOMPARE(server.receivedData.right(dataFromClientToServer.size()), dataFromClientToServer);
+ QByteArray content = reply->readAll();
+ QCOMPARE(content, dataFromServerToClient);
+}
+
+void tst_QNetworkReply::getWithAndWithoutBodyFromHttp_data()
+{
+ QTest::addColumn<QByteArray>("dataFromClientToServer");
+ QTest::addColumn<bool>("alwaysCache");
+ QTest::addColumn<tst_QNetworkReply::RunSimpleRequestReturn>("requestReturn");
+ QTest::addColumn<bool>("useDevice");
+ QTest::newRow("with-bytearray") << QByteArray("Body 1") << false << Success << false;
+ QTest::newRow("with-bytearray2") << QByteArray("Body 2") << false << Success << false;
+ QTest::newRow("with-bytearray3") << QByteArray("Body 3") << false << Success << false;
+ QTest::newRow("with-bytearray-cache") << QByteArray("Body 1") << true << Failure << false;
+ QTest::newRow("with-bytearray-cache2") << QByteArray("Body 2") << true << Failure << false;
+ QTest::newRow("with-bytearray-cache3") << QByteArray("Body 3") << true << Failure << false;
+ QTest::newRow("with-device") << QByteArray("Body 1") << false << Success << true;
+ QTest::newRow("with-device2") << QByteArray("Body 2") << false << Success << true;
+ QTest::newRow("with-device3") << QByteArray("Body 3") << false << Success << true;
+ QTest::newRow("with-device-cache") << QByteArray("Body 1") << true << Failure << true;
+ QTest::newRow("with-device-cache2") << QByteArray("Body 2") << true << Failure << true;
+ QTest::newRow("with-device-cache3") << QByteArray("Body 3") << true << Failure << true;
+}
+
+void tst_QNetworkReply::getWithAndWithoutBodyFromHttp()
+{
+ QFETCH(QByteArray, dataFromClientToServer);
+ QFETCH(bool, alwaysCache);
+ QFETCH(tst_QNetworkReply::RunSimpleRequestReturn, requestReturn);
+ QFETCH(bool, useDevice);
+
+ QBuffer buff;
+ buff.setData(dataFromClientToServer);
+ buff.open(QIODevice::ReadOnly);
+
+ QNetworkAccessManager qnam;
+ MyMemoryCache *memoryCache = new MyMemoryCache(&qnam);
+ qnam.setCache(memoryCache);
+
+ const int sizeOfDataFromServerToClient =3;
+ QByteArray dataFromServerToClient1 = QByteArray("aaa");
+ QByteArray dataFromServerToClient2 = QByteArray("bbb");
+ QByteArray dataFromServerToClient3 = QByteArray("ccc");
+
+ QByteArray baseHttpResponse = QByteArray("HTTP/1.0 200 OK\r\nContent-Length: ");
+ baseHttpResponse += QByteArray::number(sizeOfDataFromServerToClient);
+ baseHttpResponse += "\r\n\r\n";
+
+ MiniHttpServer server(baseHttpResponse + dataFromServerToClient1);
+ server.doClose = true;
+
+ QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+
+ // Send request without body
+ QNetworkReplyPtr reply(manager.get(request));
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
+ QByteArray content = reply->readAll();
+ QCOMPARE(content, dataFromServerToClient1);
+
+ if (alwaysCache) {
+ request.setAttribute(QNetworkRequest::CacheLoadControlAttribute,
+ QNetworkRequest::AlwaysCache);
+ }
+
+ server.dataToTransmit = baseHttpResponse + dataFromServerToClient2;
+
+ // Send request with body
+ QNetworkReplyPtr reply2;
+ if (useDevice)
+ reply2.reset(manager.get(request, &buff));
+ else
+ reply2.reset(manager.get(request, dataFromClientToServer));
+
+ QVERIFY2(waitForFinish(reply2) == requestReturn, msgWaitForFinished(reply2));
+ content = reply2->readAll();
+
+ if (alwaysCache)
+ QVERIFY(content.isEmpty());
+ else
+ QCOMPARE(content, dataFromServerToClient2);
+
+ QCOMPARE(reply2->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+
+ if (alwaysCache) {
+ request.setAttribute(QNetworkRequest::CacheLoadControlAttribute,
+ QNetworkRequest::PreferNetwork);
+ }
+
+ server.dataToTransmit = baseHttpResponse + dataFromServerToClient3;
+
+ // Send another request without a body
+ QNetworkReplyPtr reply3(manager.get(request));
+ QVERIFY2(waitForFinish(reply3) == Success, msgWaitForFinished(reply3));
+ content = reply3->readAll();
+ QCOMPARE(content, dataFromServerToClient3);
+ QCOMPARE(reply3->attribute(QNetworkRequest::SourceIsFromCacheAttribute).toBool(), false);
+}
+
+void tst_QNetworkReply::getWithBodyRedirected_data()
+{
+ QTest::addColumn<QByteArray>("dataFromClientToServer");
+ QTest::addColumn<bool>("useDevice");
+ QTest::addColumn<int>("status");
+ QTest::newRow("with-bytearray - 301") << QByteArray("Body 1") << false << 301;
+ QTest::newRow("with-bytearray2 - 301") << QByteArray("Body 2") << false << 301;
+ QTest::newRow("with-bytearray3 - 301") << QByteArray("Body 3") << false << 301;
+ QTest::newRow("with-device - 301") << QByteArray("Body 1") << true << 301;
+ QTest::newRow("with-device2 - 301") << QByteArray("Body 2") << true << 301;
+ QTest::newRow("with-device3 - 301") << QByteArray("Body 3") << true << 301;
+ QTest::newRow("with-bytearray - 302") << QByteArray("Body 1") << false << 302;
+ QTest::newRow("with-bytearray2 - 302") << QByteArray("Body 2") << false << 302;
+ QTest::newRow("with-bytearray3 - 302") << QByteArray("Body 3") << false << 302;
+ QTest::newRow("with-device - 302") << QByteArray("Body 1") << true << 302;
+ QTest::newRow("with-device2 - 302") << QByteArray("Body 2") << true << 302;
+ QTest::newRow("with-device3 - 302") << QByteArray("Body 3") << true << 302;
+ QTest::newRow("with-bytearray - 307") << QByteArray("Body 1") << false << 307;
+ QTest::newRow("with-bytearray2 - 307") << QByteArray("Body 2") << false << 307;
+ QTest::newRow("with-bytearray3 - 307") << QByteArray("Body 3") << false << 307;
+ QTest::newRow("with-device - 307") << QByteArray("Body 1") << true << 307;
+ QTest::newRow("with-device2 - 307") << QByteArray("Body 2") << true << 307;
+ QTest::newRow("with-device3 - 307") << QByteArray("Body 3") << true << 307;
+ QTest::newRow("with-bytearray - 308") << QByteArray("Body 1") << false << 308;
+ QTest::newRow("with-bytearray2 - 308") << QByteArray("Body 2") << false << 308;
+ QTest::newRow("with-bytearray3 - 308") << QByteArray("Body 3") << false << 308;
+ QTest::newRow("with-device - 308") << QByteArray("Body 1") << true << 308;
+ QTest::newRow("with-device2 - 308") << QByteArray("Body 2") << true << 308;
+ QTest::newRow("with-device3 - 308") << QByteArray("Body 3") << true << 308;
+}
+
+void tst_QNetworkReply::getWithBodyRedirected()
+{
+ QFETCH(QByteArray, dataFromClientToServer);
+ QFETCH(bool, useDevice);
+ QFETCH(int, status);
+
+ QBuffer buff;
+ buff.setData(dataFromClientToServer);
+ buff.open(QIODevice::ReadOnly);
+
+ QUrl localhost = QUrl("http://localhost");
+
+ // Setup server to which the second server will redirect to
+ MiniHttpServer server2(httpEmpty200Response);
+
+ QUrl redirectUrl = QUrl(localhost);
+ redirectUrl.setPort(server2.serverPort());
+
+ QByteArray redirectReply;
+ switch (status) {
+ case 301: redirectReply =
+ foundReplyStr().arg(QString(redirectUrl.toEncoded())).toLatin1(); break;
+ case 302: redirectReply =
+ movedReplyStr().arg(QString(redirectUrl.toEncoded())).toLatin1(); break;
+ case 307: redirectReply =
+ tempRedirectReplyStr().arg(QString(redirectUrl.toEncoded())).toLatin1(); break;
+ case 308: redirectReply =
+ permRedirectReplyStr().arg(QString(redirectUrl.toEncoded())).toLatin1(); break;
+ default: QFAIL("Unexpected status code"); break;
+ }
+
+ // Setup redirect server
+ MiniHttpServer server(redirectReply);
+
+ localhost.setPort(server.serverPort());
+ QNetworkRequest request(localhost);
+ request.setAttribute(QNetworkRequest::RedirectPolicyAttribute,
+ QNetworkRequest::NoLessSafeRedirectPolicy);
+
+ QNetworkReplyPtr reply;
+ if (useDevice)
+ reply.reset(manager.get(request, &buff));
+ else
+ reply.reset(manager.get(request, dataFromClientToServer));
+
+ QSignalSpy redSpy(reply.data(), SIGNAL(redirected(QUrl)));
+ QSignalSpy finSpy(reply.data(), SIGNAL(finished()));
+
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
+
+ // Redirected and finished should be emitted exactly once
+ QCOMPARE(redSpy.size(), 1);
+ QCOMPARE(finSpy.size(), 1);
+
+ // Original URL should not be changed after redirect
+ QCOMPARE(request.url(), localhost);
+
+ // Verify Redirect url
+ QList<QVariant> args = redSpy.takeFirst();
+ QCOMPARE(args.at(0).toUrl(), redirectUrl);
+
+ // Reply url is set to the redirect url
+ QCOMPARE(reply->url(), redirectUrl);
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QVERIFY(validateRedirectedResponseHeaders(reply));
+
+ // Verify that the message body has arrived to the server
+ if (status > 302) {
+ QVERIFY(server2.contentLength != 0);
+ QCOMPARE(server2.contentLength, dataFromClientToServer.size());
+ QCOMPARE(server2.receivedData.right(dataFromClientToServer.size()), dataFromClientToServer);
+ } else {
+ // In these cases the message body should not reach the server
+ QVERIFY(server2.contentLength == 0);
+ }
+}
+
#if QT_CONFIG(networkproxy)
void tst_QNetworkReply::headFromHttp_data()
{
@@ -2008,7 +2302,7 @@ void tst_QNetworkReply::headFromHttp_data()
QString httpServer = QtNetworkSettings::httpServerName();
//testing proxies, mainly for the 407 response from http proxy
- for (int i = 0; i < proxies.count(); ++i) {
+ for (int i = 0; i < proxies.size(); ++i) {
QTest::newRow("rfc" + proxies.at(i).tag)
<< rfcsize
<< QUrl("http://" + httpServer + "/qtest/rfc3252.txt")
@@ -2290,9 +2584,9 @@ void tst_QNetworkReply::putToFtp()
QSignalSpy spy(r, SIGNAL(downloadProgress(qint64,qint64)));
while (!r->isFinished()) {
QTestEventLoop::instance().enterLoop(10);
- if (count == spy.count() && !r->isFinished())
+ if (count == spy.size() && !r->isFinished())
break;
- count = spy.count();
+ count = spy.size();
}
QObject::disconnect(r, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()));
@@ -2407,6 +2701,48 @@ void tst_QNetworkReply::putToHttpSynchronous()
QCOMPARE(uploadedData, data);
}
+void tst_QNetworkReply::putWithoutBody_data()
+{
+ QTest::addColumn<bool>("client_data");
+
+ QTest::newRow("client_has_data") << true;
+ QTest::newRow("client_does_not_have_data") << false;
+}
+
+void tst_QNetworkReply::putWithoutBody()
+{
+ QFETCH(bool, client_data);
+
+ QBuffer buff;
+
+ if (client_data) {
+ buff.setData("Dummy data from client to server");
+ buff.open(QIODevice::ReadOnly);
+ }
+
+ QByteArray dataFromServerToClient = QByteArray("Some ridiculous dummy data");
+ QByteArray httpResponse = QByteArray("HTTP/1.0 200 OK\r\nContent-Length: ");
+ httpResponse += QByteArray::number(dataFromServerToClient.size());
+ httpResponse += "\r\n\r\n";
+ httpResponse += dataFromServerToClient;
+
+ MiniHttpServer server(httpResponse);
+ server.doClose = true;
+
+ QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+ request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
+
+ QNetworkReplyPtr reply;
+ if (client_data)
+ reply.reset(manager.put(request, &buff));
+ else
+ reply.reset(manager.put(request, nullptr));
+
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
+ QCOMPARE(server.foundContentLength, client_data);
+}
+
+
void tst_QNetworkReply::postToHttp_data()
{
putToFile_data();
@@ -2724,8 +3060,8 @@ void tst_QNetworkReply::postToHttpMultipart()
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
- QVERIFY(multiPart->boundary().count() > 20); // check that there is randomness after the "boundary_.oOo._" string
- QVERIFY(multiPart->boundary().count() < 70);
+ QVERIFY(multiPart->boundary().size() > 20); // check that there is randomness after the "boundary_.oOo._" string
+ QVERIFY(multiPart->boundary().size() < 70);
QByteArray replyData = reply->readAll();
expectedReplyData.prepend("content type: multipart/" + contentType + "; boundary=\"" + multiPart->boundary() + "\"\n");
@@ -2776,6 +3112,47 @@ void tst_QNetworkReply::multipartSkipIndices() // QTBUG-32534
multiPart->deleteLater();
}
+void tst_QNetworkReply::postWithoutBody_data()
+{
+ QTest::addColumn<bool>("client_data");
+
+ QTest::newRow("client_has_data") << true;
+ QTest::newRow("client_does_not_have_data") << false;
+}
+
+void tst_QNetworkReply::postWithoutBody()
+{
+ QFETCH(bool, client_data);
+
+ QBuffer buff;
+
+ if (client_data) {
+ buff.setData("Dummy data from client to server");
+ buff.open(QIODevice::ReadOnly);
+ }
+
+ QByteArray dataFromServerToClient = QByteArray("Some ridiculous dummy data");
+ QByteArray httpResponse = QByteArray("HTTP/1.0 200 OK\r\nContent-Length: ");
+ httpResponse += QByteArray::number(dataFromServerToClient.size());
+ httpResponse += "\r\n\r\n";
+ httpResponse += dataFromServerToClient;
+
+ MiniHttpServer server(httpResponse);
+ server.doClose = true;
+
+ QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+ request.setHeader(QNetworkRequest::ContentTypeHeader, QVariant("text/plain"));
+
+ QNetworkReplyPtr reply;
+ if (client_data)
+ reply.reset(manager.post(request, &buff));
+ else
+ reply.reset(manager.post(request, nullptr));
+
+ QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
+ QCOMPARE(server.foundContentLength, client_data);
+}
+
void tst_QNetworkReply::putToHttpMultipart_data()
{
postToHttpMultipart_data();
@@ -2812,8 +3189,8 @@ void tst_QNetworkReply::putToHttpMultipart()
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
- QVERIFY(multiPart->boundary().count() > 20); // check that there is randomness after the "boundary_.oOo._" string
- QVERIFY(multiPart->boundary().count() < 70);
+ QVERIFY(multiPart->boundary().size() > 20); // check that there is randomness after the "boundary_.oOo._" string
+ QVERIFY(multiPart->boundary().size() < 70);
QByteArray replyData = reply->readAll();
expectedReplyData.prepend("content type: multipart/" + contentType + "; boundary=\"" + multiPart->boundary() + "\"\n");
@@ -3030,8 +3407,8 @@ void tst_QNetworkReply::postToHttpsMultipart()
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 Ok
- QVERIFY(multiPart->boundary().count() > 20); // check that there is randomness after the "boundary_.oOo._" string
- QVERIFY(multiPart->boundary().count() < 70);
+ QVERIFY(multiPart->boundary().size() > 20); // check that there is randomness after the "boundary_.oOo._" string
+ QVERIFY(multiPart->boundary().size() < 70);
QByteArray replyData = reply->readAll();
expectedReplyData.prepend("content type: multipart/" + contentType + "; boundary=\"" + multiPart->boundary() + "\"\n");
@@ -3167,7 +3544,7 @@ void tst_QNetworkReply::connectToIPv6Address()
if (!QtNetworkSettings::hasIPv6())
QSKIP("system doesn't support ipv6!");
- QByteArray httpResponse = QByteArray("HTTP/1.0 200 OK\r\nContent-Length: ");
+ QByteArray httpResponse = QByteArray("HTTP/1.0 200 OK\r\ncontent-length: ");
httpResponse += QByteArray::number(dataToSend.size());
httpResponse += "\r\n\r\n";
httpResponse += dataToSend;
@@ -3182,7 +3559,7 @@ void tst_QNetworkReply::connectToIPv6Address()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
QByteArray content = reply->readAll();
//qDebug() << server.receivedData;
- QByteArray hostinfo = "\r\nHost: " + hostfield + ':' + QByteArray::number(server.serverPort()) + "\r\n";
+ QByteArray hostinfo = "\r\nhost: " + hostfield + ':' + QByteArray::number(server.serverPort()) + "\r\n";
QVERIFY(server.receivedData.contains(hostinfo));
QCOMPARE(content, dataToSend);
QCOMPARE(reply->url(), request.url());
@@ -3344,6 +3721,18 @@ void tst_QNetworkReply::ioGetFromFile()
QCOMPARE(reader.data, data);
}
+void tst_QNetworkReply::ioGetFromFileUrl()
+{
+ // This immediately fails on non-windows platforms:
+ QNetworkRequest request(QUrl("file://unc-server/some/path"));
+ QNetworkReplyPtr reply(manager.get(request));
+ QSignalSpy finishedSpy(reply.get(), &QNetworkReply::finished);
+ // QTBUG-105618: This would, on non-Windows platforms, never happen because the signal
+ // was emitted before the constructor finished, leaving no chance at all to connect to the
+ // signal
+ QVERIFY(finishedSpy.wait());
+}
+
void tst_QNetworkReply::ioGetFromFtp_data()
{
if (!ftpSupported)
@@ -3361,7 +3750,9 @@ void tst_QNetworkReply::ioGetFromFtp()
{
QFETCH(QString, fileName);
QFile reference(fileName);
- reference.open(QIODevice::ReadOnly); // will fail for bigfile
+ const bool ok = reference.open(QIODevice::ReadOnly); // will fail for bigfile
+ if (fileName != "bigfile")
+ QVERIFY(ok);
QNetworkRequest request("ftp://" + QtNetworkSettings::ftpServerName() + "/qtest/" + fileName);
QNetworkReplyPtr reply(manager.get(request));
@@ -3386,7 +3777,7 @@ void tst_QNetworkReply::ioGetFromFtpWithReuse()
QSKIP("FTP is not supported");
QString fileName = testDataDir + "/rfc3252.txt";
QFile reference(fileName);
- reference.open(QIODevice::ReadOnly);
+ QVERIFY(reference.open(QIODevice::ReadOnly));
QNetworkRequest request(QUrl("ftp://" + QtNetworkSettings::ftpServerName() + "/qtest/rfc3252.txt"));
@@ -3516,7 +3907,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuth_data()
QTest::addColumn<int>("expectedAuth");
QFile reference(testDataDir + "/rfc3252.txt");
- reference.open(QIODevice::ReadOnly);
+ QVERIFY(reference.open(QIODevice::ReadOnly));
QByteArray referenceData = reference.readAll();
QString httpServer = QtNetworkSettings::httpServerName();
QTest::newRow("basic")
@@ -3590,7 +3981,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuth()
QCOMPARE(reader1.data, expectedData);
QCOMPARE(reader2.data, expectedData);
- QCOMPARE(authspy.count(), (expectedAuth ? 1 : 0));
+ QCOMPARE(authspy.size(), (expectedAuth ? 1 : 0));
expectedAuth = qMax(0, expectedAuth - 1);
}
@@ -3611,7 +4002,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuth()
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reader.data, expectedData);
- QCOMPARE(authspy.count(), (expectedAuth ? 1 : 0));
+ QCOMPARE(authspy.size(), (expectedAuth ? 1 : 0));
expectedAuth = qMax(0, expectedAuth - 1);
}
@@ -3628,7 +4019,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuth()
// bad credentials in a synchronous request should just fail
QCOMPARE(replySync->error(), QNetworkReply::AuthenticationRequiredError);
} else {
- QCOMPARE(authspy.count(), 0);
+ QCOMPARE(authspy.size(), 0);
// we cannot use a data reader here, since that connects to the readyRead signal,
// just use readAll()
@@ -3654,7 +4045,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuth()
// bad credentials in a synchronous request should just fail
QCOMPARE(replySync->error(), QNetworkReply::AuthenticationRequiredError);
} else {
- QCOMPARE(authspy.count(), 0);
+ QCOMPARE(authspy.size(), 0);
// we cannot use a data reader here, since that connects to the readyRead signal,
// just use readAll()
@@ -3680,7 +4071,7 @@ void tst_QNetworkReply::ioGetFromHttpWithAuthSynchronous()
QNetworkReplyPtr replySync(manager.get(request));
QVERIFY(replySync->isFinished()); // synchronous
QCOMPARE(replySync->error(), QNetworkReply::AuthenticationRequiredError);
- QCOMPARE(authspy.count(), 0);
+ QCOMPARE(authspy.size(), 0);
QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 401);
}
@@ -3721,7 +4112,7 @@ void tst_QNetworkReply::ioGetFromHttpWithProxyAuth()
QCOMPARE(reader1.data, referenceData);
QCOMPARE(reader2.data, referenceData);
- QCOMPARE(authspy.count(), 1);
+ QCOMPARE(authspy.size(), 1);
}
reference.seek(0);
@@ -3744,7 +4135,7 @@ void tst_QNetworkReply::ioGetFromHttpWithProxyAuth()
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reader.data, reference.readAll());
- QCOMPARE(authspy.count(), 0);
+ QCOMPARE(authspy.size(), 0);
}
// now check with synchronous calls:
@@ -3757,7 +4148,7 @@ void tst_QNetworkReply::ioGetFromHttpWithProxyAuth()
QSignalSpy authspy(&manager, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
QNetworkReplyPtr replySync(manager.get(request));
QVERIFY(replySync->isFinished()); // synchronous
- QCOMPARE(authspy.count(), 0);
+ QCOMPARE(authspy.size(), 0);
// we cannot use a data reader here, since that connects to the readyRead signal,
// just use readAll()
@@ -3785,7 +4176,7 @@ void tst_QNetworkReply::ioGetFromHttpWithProxyAuthSynchronous()
manager.setProxy(QNetworkProxy()); // reset
QVERIFY(replySync->isFinished()); // synchronous
QCOMPARE(replySync->error(), QNetworkReply::ProxyAuthenticationRequiredError);
- QCOMPARE(authspy.count(), 0);
+ QCOMPARE(authspy.size(), 0);
QCOMPARE(replySync->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 407);
}
@@ -3817,7 +4208,7 @@ void tst_QNetworkReply::ioGetFromHttpWithSocksProxy()
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reader.data, reference.readAll());
- QCOMPARE(authspy.count(), 0);
+ QCOMPARE(authspy.size(), 0);
}
// set an invalid proxy just to make sure that we can't load
@@ -3841,10 +4232,9 @@ void tst_QNetworkReply::ioGetFromHttpWithSocksProxy()
QVERIFY(reader.data.isEmpty());
QVERIFY(int(reply->error()) > 0);
- QEXPECT_FAIL("", "QTcpSocket doesn't return enough information yet", Continue);
QCOMPARE(int(reply->error()), int(QNetworkReply::ProxyConnectionRefusedError));
- QCOMPARE(authspy.count(), 0);
+ QCOMPARE(authspy.size(), 0);
}
}
#endif // QT_CONFIG(networkproxy)
@@ -3872,7 +4262,7 @@ void tst_QNetworkReply::ioGetFromHttpsWithSslErrors()
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reader.data, reference.readAll());
- QCOMPARE(sslspy.count(), 1);
+ QCOMPARE(sslspy.size(), 1);
QVERIFY(!storedSslConfiguration.isNull());
QVERIFY(!reply->sslConfiguration().isNull());
@@ -3900,7 +4290,7 @@ void tst_QNetworkReply::ioGetFromHttpsWithIgnoreSslErrors()
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QCOMPARE(reader.data, reference.readAll());
- QCOMPARE(sslspy.count(), 1);
+ QCOMPARE(sslspy.size(), 1);
QVERIFY(!storedSslConfiguration.isNull());
QVERIFY(!reply->sslConfiguration().isNull());
@@ -3923,7 +4313,7 @@ void tst_QNetworkReply::ioGetFromHttpsWithSslHandshakeError()
QCOMPARE(waitForFinish(reply), int(Failure));
QCOMPARE(reply->error(), QNetworkReply::SslHandshakeFailedError);
- QCOMPARE(sslspy.count(), 0);
+ QCOMPARE(sslspy.size(), 0);
}
#endif
@@ -3981,11 +4371,11 @@ void tst_QNetworkReply::ioGetFromHttpBrokenServer()
QCOMPARE(waitForFinish(reply), int(Failure));
QCOMPARE(reply->url(), request.url());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(reply->error() != QNetworkReply::NoError);
}
-void tst_QNetworkReply::ioGetFromHttpStatus100_data()
+void tst_QNetworkReply::ioGetFromHttpStatusInformational_data()
{
QTest::addColumn<QByteArray>("dataToSend");
QTest::addColumn<int>("statusCode");
@@ -3996,9 +4386,25 @@ void tst_QNetworkReply::ioGetFromHttpStatus100_data()
QTest::newRow("minimal+404") << QByteArray("HTTP/1.1 100 Continue\n\nHTTP/1.0 204 No Content\r\n\r\n") << 204;
QTest::newRow("with_headers") << QByteArray("HTTP/1.1 100 Continue\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
QTest::newRow("with_headers2") << QByteArray("HTTP/1.1 100 Continue\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
+
+ QTest::newRow("normal-custom") << QByteArray("HTTP/1.1 133 Custom\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
+ QTest::newRow("minimal-custom") << QByteArray("HTTP/1.1 133 Custom\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
+ QTest::newRow("minimal2-custom") << QByteArray("HTTP/1.1 133 Custom\n\nHTTP/1.0 200 OK\r\n\r\n") << 200;
+ QTest::newRow("minimal3-custom") << QByteArray("HTTP/1.1 133 Custom\n\nHTTP/1.0 200 OK\n\n") << 200;
+ QTest::newRow("minimal+404-custom") << QByteArray("HTTP/1.1 133 Custom\n\nHTTP/1.0 204 No Content\r\n\r\n") << 204;
+ QTest::newRow("with_headers-custom") << QByteArray("HTTP/1.1 133 Custom\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
+ QTest::newRow("with_headers2-custom") << QByteArray("HTTP/1.1 133 Custom\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
+
+ QTest::newRow("normal-custom2") << QByteArray("HTTP/1.1 179 Custom2\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
+ QTest::newRow("minimal-custom2") << QByteArray("HTTP/1.1 179 Custom2\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
+ QTest::newRow("minimal2-custom2") << QByteArray("HTTP/1.1 179 Custom2\n\nHTTP/1.0 200 OK\r\n\r\n") << 200;
+ QTest::newRow("minimal3-custom2") << QByteArray("HTTP/1.1 179 Custom2\n\nHTTP/1.0 200 OK\n\n") << 200;
+ QTest::newRow("minimal+404-custom2") << QByteArray("HTTP/1.1 179 Custom2\n\nHTTP/1.0 204 No Content\r\n\r\n") << 204;
+ QTest::newRow("with_headers-custom2") << QByteArray("HTTP/1.1 179 Custom2\r\nBla: x\r\n\r\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
+ QTest::newRow("with_headers2-custom2") << QByteArray("HTTP/1.1 179 Custom2\nBla: x\n\nHTTP/1.1 200 OK\r\nContent-Length: 0\r\n\r\n") << 200;
}
-void tst_QNetworkReply::ioGetFromHttpStatus100()
+void tst_QNetworkReply::ioGetFromHttpStatusInformational()
{
QFETCH(QByteArray, dataToSend);
QFETCH(int, statusCode);
@@ -4317,15 +4723,15 @@ void tst_QNetworkReply::ioGetWithManyProxies_data()
// Tests that fail:
- // HTTP request with FTP caching proxy
- proxyList.clear();
- proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121);
- QTest::newRow("http-on-ftp")
- << proxyList << QNetworkProxy()
- << "http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
- << QNetworkReply::ProxyNotFoundError;
-
if (ftpSupported) {
+ // HTTP request with FTP caching proxy
+ proxyList.clear();
+ proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121);
+ QTest::newRow("http-on-ftp")
+ << proxyList << QNetworkProxy()
+ << "http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
+ << QNetworkReply::ProxyNotFoundError;
+
// FTP request with HTTP caching proxy
proxyList.clear();
proxyList << QNetworkProxy(QNetworkProxy::HttpCachingProxy,
@@ -4356,13 +4762,15 @@ void tst_QNetworkReply::ioGetWithManyProxies_data()
<< "https://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
<< QNetworkReply::ProxyNotFoundError;
- // HTTPS with FTP caching proxy
- proxyList.clear();
- proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121);
- QTest::newRow("https-on-ftp")
- << proxyList << QNetworkProxy()
- << "https://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
- << QNetworkReply::ProxyNotFoundError;
+ if (ftpSupported) {
+ // HTTPS with FTP caching proxy
+ proxyList.clear();
+ proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121);
+ QTest::newRow("https-on-ftp")
+ << proxyList << QNetworkProxy()
+ << "https://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
+ << QNetworkReply::ProxyNotFoundError;
+ }
#endif
// Complex requests:
@@ -4385,15 +4793,17 @@ void tst_QNetworkReply::ioGetWithManyProxies_data()
<< "http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
<< QNetworkReply::NoError;
- // HTTP request with FTP + HTTP + SOCKS
- proxyList.clear();
- proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121)
- << QNetworkProxy(QNetworkProxy::HttpCachingProxy, QtNetworkSettings::httpProxyServerName(), 3129)
- << QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::socksProxyServerName(), 1081);
- QTest::newRow("http-on-ftp+http+socks")
- << proxyList << proxyList.at(1) // second proxy should be used
- << "http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
- << QNetworkReply::NoError;
+ if (ftpSupported) {
+ // HTTP request with FTP + HTTP + SOCKS
+ proxyList.clear();
+ proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121)
+ << QNetworkProxy(QNetworkProxy::HttpCachingProxy, QtNetworkSettings::httpProxyServerName(), 3129)
+ << QNetworkProxy(QNetworkProxy::Socks5Proxy, QtNetworkSettings::socksProxyServerName(), 1081);
+ QTest::newRow("http-on-ftp+http+socks")
+ << proxyList << proxyList.at(1) // second proxy should be used
+ << "http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
+ << QNetworkReply::NoError;
+ }
// HTTP request with NoProxy + HTTP
proxyList.clear();
@@ -4405,15 +4815,15 @@ void tst_QNetworkReply::ioGetWithManyProxies_data()
<< QNetworkReply::NoError;
// HTTP request with FTP + NoProxy
- proxyList.clear();
- proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121)
- << QNetworkProxy(QNetworkProxy::NoProxy);
- QTest::newRow("http-on-ftp+noproxy")
- << proxyList << proxyList.at(1) // second proxy should be used
- << "http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
- << QNetworkReply::NoError;
-
if (ftpSupported) {
+ proxyList.clear();
+ proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121)
+ << QNetworkProxy(QNetworkProxy::NoProxy);
+ QTest::newRow("http-on-ftp+noproxy")
+ << proxyList << proxyList.at(1) // second proxy should be used
+ << "http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
+ << QNetworkReply::NoError;
+
// FTP request with HTTP Caching + FTP
proxyList.clear();
proxyList << QNetworkProxy(QNetworkProxy::HttpCachingProxy,
@@ -4436,15 +4846,17 @@ void tst_QNetworkReply::ioGetWithManyProxies_data()
<< "https://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
<< QNetworkReply::NoError;
- // HTTPS request with FTP + HTTP C + HTTP T
- proxyList.clear();
- proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121)
- << QNetworkProxy(QNetworkProxy::HttpCachingProxy, QtNetworkSettings::httpProxyServerName(), 3129)
- << QNetworkProxy(QNetworkProxy::HttpProxy, QtNetworkSettings::httpProxyServerName(), 3129);
- QTest::newRow("https-on-ftp+httpcaching+http")
- << proxyList << proxyList.at(2) // skip the first two
- << "https://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
- << QNetworkReply::NoError;
+ if (ftpSupported) {
+ // HTTPS request with FTP + HTTP C + HTTP T
+ proxyList.clear();
+ proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121)
+ << QNetworkProxy(QNetworkProxy::HttpCachingProxy, QtNetworkSettings::httpProxyServerName(), 3129)
+ << QNetworkProxy(QNetworkProxy::HttpProxy, QtNetworkSettings::httpProxyServerName(), 3129);
+ QTest::newRow("https-on-ftp+httpcaching+http")
+ << proxyList << proxyList.at(2) // skip the first two
+ << "https://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt"
+ << QNetworkReply::NoError;
+ }
#endif
}
@@ -4499,16 +4911,16 @@ void tst_QNetworkReply::ioGetWithManyProxies()
// now verify that the proxies worked:
QFETCH(QNetworkProxy, proxyUsed);
if (proxyUsed.type() == QNetworkProxy::NoProxy) {
- QCOMPARE(authspy.count(), 0);
+ QCOMPARE(authspy.size(), 0);
} else {
if (QByteArray(QTest::currentDataTag()).startsWith("ftp-"))
return; // No authentication with current FTP or with FTP proxies
- QCOMPARE(authspy.count(), 1);
+ QCOMPARE(authspy.size(), 1);
QCOMPARE(qvariant_cast<QNetworkProxy>(authspy.at(0).at(0)), proxyUsed);
}
} else {
// request failed
- QCOMPARE(authspy.count(), 0);
+ QCOMPARE(authspy.size(), 0);
}
}
#endif // QT_CONFIG(networkproxy)
@@ -4676,6 +5088,10 @@ void tst_QNetworkReply::ioPutToFileFromProcess()
QByteArray contents = file.readAll();
QCOMPARE(contents, data);
+ if (process.state() == QProcess::Running)
+ QVERIFY(process.waitForFinished());
+ QCOMPARE(process.exitCode(), 0);
+
#endif // QT_CONFIG(process)
}
@@ -4814,7 +5230,7 @@ void tst_QNetworkReply::ioPostToHttpFromSocket_data()
QTest::addColumn<int>("authenticationRequiredCount");
QTest::addColumn<int>("proxyAuthenticationRequiredCount");
- for (int i = 0; i < proxies.count(); ++i)
+ for (int i = 0; i < proxies.size(); ++i)
for (int auth = 0; auth < 2; ++auth) {
QUrl url;
if (auth)
@@ -4892,8 +5308,8 @@ void tst_QNetworkReply::ioPostToHttpFromSocket()
QCOMPARE(reply->readAll().trimmed(), md5sum(data).toHex());
- QTEST(int(authenticationRequiredSpy.count()), "authenticationRequiredCount");
- QTEST(int(proxyAuthenticationRequiredSpy.count()), "proxyAuthenticationRequiredCount");
+ QTEST(int(authenticationRequiredSpy.size()), "authenticationRequiredCount");
+ QTEST(int(proxyAuthenticationRequiredSpy.size()), "proxyAuthenticationRequiredCount");
}
void tst_QNetworkReply::ioPostToHttpFromSocketSynchronous_data()
@@ -5365,13 +5781,9 @@ void tst_QNetworkReply::emitAllUploadProgressSignals()
QNetworkRequest catchAllSignalsRequest(normalRequest);
catchAllSignalsRequest.setAttribute(QNetworkRequest::EmitAllUploadProgressSignalsAttribute, true);
- QList<QNetworkRequest> requests;
- requests << normalRequest << catchAllSignalsRequest;
-
QList<int> signalCount;
- foreach (const QNetworkRequest &request, requests) {
-
+ for (const QNetworkRequest &request : {normalRequest, catchAllSignalsRequest}) {
sourceFile.seek(0);
QNetworkReplyPtr reply(manager.post(request, &sourceFile));
QSignalSpy spy(reply.data(), SIGNAL(uploadProgress(qint64,qint64)));
@@ -5392,7 +5804,7 @@ void tst_QNetworkReply::emitAllUploadProgressSignals()
QVERIFY(!QTestEventLoop::instance().timeout());
incomingSocket->close();
- signalCount.append(spy.count());
+ signalCount.append(spy.size());
reply->deleteLater();
}
server.close();
@@ -5438,7 +5850,7 @@ void tst_QNetworkReply::ioPostToHttpEmptyUploadProgress()
QVERIFY(!QTestEventLoop::instance().timeout());
// final check: only 1 uploadProgress has been emitted
- QCOMPARE(spy.length(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> args = spy.last();
QVERIFY(!args.isEmpty());
QCOMPARE(args.at(0).toLongLong(), buffer.size());
@@ -5476,7 +5888,7 @@ void tst_QNetworkReply::lastModifiedHeaderForHttp()
QDateTime header = reply->header(QNetworkRequest::LastModifiedHeader).toDateTime();
QDateTime realDate = QDateTime::fromString("2007-05-22T12:04:57", Qt::ISODate);
- realDate.setTimeSpec(Qt::UTC);
+ realDate.setTimeZone(QTimeZone::UTC);
QCOMPARE(header, realDate);
}
@@ -5609,7 +6021,7 @@ void tst_QNetworkReply::downloadProgress()
QVERIFY(!QTestEventLoop::instance().timeout());
QVERIFY(reply->isFinished());
- QVERIFY(spy.count() > 0);
+ QVERIFY(spy.size() > 0);
//final progress should have equal current & total
QList<QVariant> args = spy.takeLast();
@@ -5655,14 +6067,14 @@ void tst_QNetworkReply::uploadProgress()
QVERIFY(server.hasPendingConnections());
QTcpSocket *receiver = server.nextPendingConnection();
- if (finished.count() == 0) {
+ if (finished.size() == 0) {
// it's not finished yet, so wait for it to be
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
}
delete receiver;
- QVERIFY(finished.count() > 0);
- QVERIFY(spy.count() > 0);
+ QVERIFY(finished.size() > 0);
+ QVERIFY(spy.size() > 0);
QList<QVariant> args = spy.last();
QCOMPARE(args.at(0).toInt(), data.size());
@@ -5944,8 +6356,8 @@ void tst_QNetworkReply::nestedEventLoops()
QTestEventLoop::instance().enterLoop(20);
QVERIFY2(!QTestEventLoop::instance().timeout(), "Network timeout");
- QCOMPARE(finishedspy.count(), 1);
- QCOMPARE(errorspy.count(), 0);
+ QCOMPARE(finishedspy.size(), 1);
+ QCOMPARE(errorspy.size(), 0);
}
#if QT_CONFIG(networkproxy)
@@ -5978,7 +6390,7 @@ void tst_QNetworkReply::httpProxyCommands()
manager.setProxy(proxy);
QNetworkRequest request(url);
- request.setRawHeader("User-Agent", "QNetworkReplyAutoTest/1.0");
+ request.setRawHeader("user-agent", "QNetworkReplyAutoTest/1.0");
QNetworkReplyPtr reply(manager.get(request));
// wait for the finished signal
@@ -5991,14 +6403,15 @@ void tst_QNetworkReply::httpProxyCommands()
// especially since it won't succeed in the HTTPS case
// so just check that the command was correct
- QString receivedHeader = proxyServer.receivedData.left(expectedCommand.length());
+ QString receivedHeader = proxyServer.receivedData.left(expectedCommand.size());
QCOMPARE(receivedHeader, expectedCommand);
//QTBUG-17223 - make sure the user agent from the request is sent to proxy server even for CONNECT
- int uapos = proxyServer.receivedData.indexOf("User-Agent");
+ const QByteArray cUserAgent = "user-agent: ";
+ int uapos = proxyServer.receivedData.toLower().indexOf(cUserAgent) + cUserAgent.size();
int uaend = proxyServer.receivedData.indexOf("\r\n", uapos);
QByteArray uaheader = proxyServer.receivedData.mid(uapos, uaend - uapos);
- QCOMPARE(uaheader, QByteArray("User-Agent: QNetworkReplyAutoTest/1.0"));
+ QCOMPARE(uaheader, QByteArray("QNetworkReplyAutoTest/1.0"));
}
class ProxyChangeHelper : public QObject
@@ -6035,14 +6448,6 @@ struct QThreadCleanup
}
};
-struct QDeleteLaterCleanup
-{
- static inline void cleanup(QObject *o)
- {
- o->deleteLater();
- }
-};
-
#if QT_CONFIG(networkproxy)
void tst_QNetworkReply::httpProxyCommandsSynchronous()
{
@@ -6054,7 +6459,7 @@ void tst_QNetworkReply::httpProxyCommandsSynchronous()
// the server thread, because the client is never returning to the
// event loop
QScopedPointer<QThread, QThreadCleanup> serverThread(new QThread);
- QScopedPointer<MiniHttpServer, QDeleteLaterCleanup> proxyServer(new MiniHttpServer(responseToSend, false, serverThread.data()));
+ QScopedPointer<MiniHttpServer, QScopedPointerDeleteLater> proxyServer(new MiniHttpServer(responseToSend, false, serverThread.data()));
QNetworkProxy proxy(QNetworkProxy::HttpProxy, "127.0.0.1", proxyServer->serverPort());
manager.setProxy(proxy);
@@ -6075,7 +6480,7 @@ void tst_QNetworkReply::httpProxyCommandsSynchronous()
// especially since it won't succeed in the HTTPS case
// so just check that the command was correct
- QString receivedHeader = proxyServer->receivedData.left(expectedCommand.length());
+ QString receivedHeader = proxyServer->receivedData.left(expectedCommand.size());
QCOMPARE(receivedHeader, expectedCommand);
}
@@ -6172,9 +6577,9 @@ void tst_QNetworkReply::authorizationError()
QCOMPARE(waitForFinish(reply), int(Failure));
QFETCH(int, errorSignalCount);
- QCOMPARE(errorSpy.count(), errorSignalCount);
+ QCOMPARE(errorSpy.size(), errorSignalCount);
QFETCH(int, finishedSignalCount);
- QCOMPARE(finishedSpy.count(), finishedSignalCount);
+ QCOMPARE(finishedSpy.size(), finishedSignalCount);
QFETCH(int, error);
QCOMPARE(reply->error(), QNetworkReply::NetworkError(error));
@@ -6212,7 +6617,6 @@ void tst_QNetworkReply::httpConnectionCount()
}
QVERIFY(server->listen());
- QCoreApplication::instance()->processEvents();
QUrl url("http://127.0.0.1:" + QString::number(server->serverPort()) + QLatin1Char('/'));
if (encrypted)
@@ -6223,7 +6627,7 @@ void tst_QNetworkReply::httpConnectionCount()
QUrl urlCopy = url;
urlCopy.setPath(u'/' + QString::number(i)); // Differentiate the requests a bit
QNetworkRequest request(urlCopy);
- request.setAttribute(QNetworkRequest::Http2AllowedAttribute, http2Enabled);
+ request.setAttribute(QNetworkRequest::Http2CleartextAllowedAttribute, http2Enabled);
QNetworkReply* reply = manager.get(request);
reply->setParent(server.data());
if (encrypted)
@@ -6231,26 +6635,40 @@ void tst_QNetworkReply::httpConnectionCount()
}
int pendingConnectionCount = 0;
- QElapsedTimer timer;
- timer.start();
- while(pendingConnectionCount <= 20) {
- QTestEventLoop::instance().enterLoop(1);
+ using namespace std::chrono_literals;
+ const auto newPendingConnection = [&server]() { return server->hasPendingConnections(); };
+ // If we have http2 enabled then the second connection will take a little
+ // longer to be established because we will wait for the first one to finish
+ // to see if we should upgrade:
+ const int rampDown = http2Enabled ? 2 : 1;
+ while (pendingConnectionCount <= 6) {
+ if (!QTest::qWaitFor(newPendingConnection, pendingConnectionCount >= rampDown ? 3s : 7s))
+ break;
QTcpSocket *socket = server->nextPendingConnection();
- while (socket != 0) {
- if (pendingConnectionCount == 0) {
- // respond to the first connection so we know to transition to HTTP/1.1 when using
- // HTTP/2
- socket->write(httpEmpty200Response);
+ while (socket) {
+ if (pendingConnectionCount == 0 && http2Enabled) {
+ // Respond to the first connection so we know to transition to HTTP/1.1 when using
+ // HTTP/2.
+ // Because of some internal state machinery we need to wait until the request has
+ // actually been written to the server before we can reply.
+ auto connection = std::make_shared<QMetaObject::Connection>();
+ auto replyOnRequest = [=, buffer = QByteArray()]() mutable {
+ buffer += socket->readAll();
+ if (!buffer.contains("\r\n\r\n"))
+ return;
+ socket->write(httpEmpty200Response);
+ QObject::disconnect(*connection);
+ };
+ *connection = QObject::connect(socket, &QTcpSocket::readyRead, socket,
+ std::move(replyOnRequest));
+ if (socket->bytesAvailable()) // If we already have data, check it now
+ emit socket->readyRead();
}
pendingConnectionCount++;
socket->setParent(server.data());
socket = server->nextPendingConnection();
}
-
- // at max. wait 10 sec
- if (timer.elapsed() > 10000)
- break;
}
QCOMPARE(pendingConnectionCount, 6);
@@ -6533,7 +6951,7 @@ void tst_QNetworkReply::encrypted()
QTestEventLoop::instance().enterLoop(20);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
reply->deleteLater();
}
@@ -6562,7 +6980,7 @@ void tst_QNetworkReply::abortOnEncrypted()
});
QSignalSpy spyEncrypted(reply, &QNetworkReply::encrypted);
- QTRY_COMPARE(spyEncrypted.count(), 1);
+ QTRY_COMPARE(spyEncrypted.size(), 1);
// Wait for the socket to be closed again in order to be sure QTcpSocket::readyRead would have been emitted.
QTRY_VERIFY(server.socket != nullptr);
@@ -6756,7 +7174,20 @@ void tst_QNetworkReply::getAndThenDeleteObject()
// see https://bugs.webkit.org/show_bug.cgi?id=38935
void tst_QNetworkReply::symbianOpenCDataUrlCrash()
{
- QString requestUrl("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAWCAYAAAA1vze2AAAAB3RJTUUH2AUSEgolrgBvVQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAARnQU1BAACxjwv8YQUAAAHlSURBVHja5VbNShxBEK6ZaXtnHTebQPA1gngNmfaeq+QNPIlIXkC9iQdJxJNvEHLN3VkxhxxE8gTmEhAVddXZ6Z3f9Ndriz89/sHmkBQUVVT1fB9d9c3uOERUKTunIdn3HzstxGpYBDS4wZk7TAJj/wlJ90J+jnuygqs8svSj+/rGHBos3rE18XBvfU3no7NzlJfUaY/5whAwl8Lr/WDUv4ODxTMb+P5xLExe5LmO559WqTX/MQR4WZYEAtSePS4pE0qSnuhnRUcBU5Gm2k9XljU4Z26I3NRxBrd80rj2fh+KNE0FY4xevRgTjREvPFpasAK8Xli6MUbbuKw3afAGgSBXozo5u4hkmncAlkl5wx8iMGbdyQjnCFEiEwGiosj1UQA/x2rVddiVoi+l4IxE0PTDnx+mrQBvvnx9cFz3krhVvuhzFn579/aq/n5rW8fbtTqiWhIQZEo17YBvbkxOXNVndnYpTvod7AtiuN2re0+siwcB9oH8VxxrNwQQAhzyRs30n7wTI2HIN2g2QtQwjjhJIQatOq7E8bIVCLwzpl83Lvtvl+NohWWlE8UZTWEMAGCcR77fHKhPnZF5tYie6dfdxCphACmLPM+j8bYfmTryg64kV9Vh3mV8jP0b/4wO/YUPiT/8i0MLf55lSQAAAABJRU5ErkJggg==");
+ QString requestUrl("data:image/"
+ "png;base64,"
+ "iVBORw0KGgoAAAANSUhEUgAAABkAAAAWCAYAAAA1vze2AAAAB3RJTUUH2AUSEgolrgBvVQAAAAl"
+ "wSFlzAAALEwAACxMBAJqcGAAAAARnQU1BAACxjwv8YQUAAAHlSURBVHja5VbNShxBEK6ZaXtnHT"
+ "ebQPA1gngNmfaeq+QNPIlIXkC9iQdJxJNvEHLN3VkxhxxE8gTmEhAVddXZ6Z3f9Ndriz89/"
+ "sHmkBQUVVT1fB9d9c3uOERUKTunIdn3HzstxGpYBDS4wZk7TAJj/wlJ90J+jnuygqs8svSj+/"
+ "rGHBos3rE18XBvfU3no7NzlJfUaY/5whAwl8Lr/WDUv4ODxTMb+P5xLExe5LmO559WqTX/"
+ "MQR4WZYEAtSePS4pE0qSnuhnRUcBU5Gm2k9XljU4Z26I3NRxBrd80rj2fh+"
+ "KNE0FY4xevRgTjREvPFpasAK8Xli6MUbbuKw3afAGgSBXozo5u4hkmncAlkl5wx8iMGbdyQjnCF"
+ "EiEwGiosj1UQA/x2rVddiVoi+l4IxE0PTDnx+mrQBvvnx9cFz3krhVvuhzFn579/aq/"
+ "n5rW8fbtTqiWhIQZEo17YBvbkxOXNVndnYpTvod7AtiuN2re0+"
+ "siwcB9oH8VxxrNwQQAhzyRs30n7wTI2HIN2g2QtQwjjhJIQatOq7E8bIVCLwzpl83Lvtvl+"
+ "NohWWlE8UZTWEMAGCcR77fHKhPnZF5tYie6dfdxCphACmLPM+j8bYfmTryg64kV9Vh3mV8jP0b/"
+ "4wO/YUPiT/8i0MLf55lSQAAAABJRU5ErkJggg==");
QUrl url = QUrl::fromEncoded(requestUrl.toLatin1());
QNetworkRequest req(url);
QNetworkReplyPtr reply;
@@ -7101,7 +7532,7 @@ void tst_QNetworkReply::compressedHttpReplyBrokenGzip()
QCOMPARE(waitForFinish(reply), int(Failure));
- QCOMPARE(reply->error(), QNetworkReply::ProtocolFailure);
+ QCOMPARE(reply->error(), QNetworkReply::UnknownContentError);
}
// TODO add similar test for FTP
@@ -7145,9 +7576,9 @@ void tst_QNetworkReply::qtbug4121unknownAuthentication()
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(authSpy.count(), 0);
- QCOMPARE(finishedSpy.count(), 1);
- QCOMPARE(errorSpy.count(), 1);
+ QCOMPARE(authSpy.size(), 0);
+ QCOMPARE(finishedSpy.size(), 1);
+ QCOMPARE(errorSpy.size(), 1);
QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError);
}
@@ -7158,7 +7589,7 @@ void tst_QNetworkReply::authenticationCacheAfterCancel_data()
QTest::addColumn<QNetworkProxy>("proxy");
QTest::addColumn<bool>("proxyAuth");
QTest::addColumn<QUrl>("url");
- for (int i = 0; i < proxies.count(); ++i) {
+ for (int i = 0; i < proxies.size(); ++i) {
QTest::newRow("http" + proxies.at(i).tag)
<< proxies.at(i).proxy
<< proxies.at(i).requiresAuthentication
@@ -7241,8 +7672,8 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
QVERIFY(!QTestEventLoop::instance().timeout());
QCOMPARE(reply->error(), QNetworkReply::ProxyAuthenticationRequiredError);
- QCOMPARE(authSpy.count(), 0);
- QCOMPARE(proxyAuthSpy.count(), 1);
+ QCOMPARE(authSpy.size(), 0);
+ QCOMPARE(proxyAuthSpy.size(), 1);
proxyAuthSpy.clear();
//should fail due to bad credentials
@@ -7256,8 +7687,8 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
// Work round known quirk in the old test server (danted -v < v1.1.19):
if (reply->error() != QNetworkReply::HostNotFoundError)
QCOMPARE(reply->error(), QNetworkReply::ProxyAuthenticationRequiredError);
- QCOMPARE(authSpy.count(), 0);
- QVERIFY(proxyAuthSpy.count() > 0);
+ QCOMPARE(authSpy.size(), 0);
+ QVERIFY(proxyAuthSpy.size() > 0);
proxyAuthSpy.clear();
// QTBUG-23136 workaround (needed even with danted v1.1.19):
@@ -7282,10 +7713,10 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
QVERIFY(!QTestEventLoop::instance().timeout());
QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError);
- QVERIFY(authSpy.count() > 0);
+ QVERIFY(authSpy.size() > 0);
authSpy.clear();
if (proxyAuth) {
- QVERIFY(proxyAuthSpy.count() > 0);
+ QVERIFY(proxyAuthSpy.size() > 0);
proxyAuthSpy.clear();
}
@@ -7298,11 +7729,11 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
QVERIFY(!QTestEventLoop::instance().timeout());
QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError);
- QVERIFY(authSpy.count() > 0);
+ QVERIFY(authSpy.size() > 0);
authSpy.clear();
if (proxyAuth) {
//should be supplied from cache
- QCOMPARE(proxyAuthSpy.count(), 0);
+ QCOMPARE(proxyAuthSpy.size(), 0);
proxyAuthSpy.clear();
}
@@ -7316,11 +7747,11 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
QVERIFY(!QTestEventLoop::instance().timeout());
QCOMPARE(reply->error(), QNetworkReply::NoError);
- QVERIFY(authSpy.count() > 0);
+ QVERIFY(authSpy.size() > 0);
authSpy.clear();
if (proxyAuth) {
//should be supplied from cache
- QCOMPARE(proxyAuthSpy.count(), 0);
+ QCOMPARE(proxyAuthSpy.size(), 0);
proxyAuthSpy.clear();
}
@@ -7332,11 +7763,11 @@ void tst_QNetworkReply::authenticationCacheAfterCancel()
QCOMPARE(reply->error(), QNetworkReply::NoError);
//should be supplied from cache
- QCOMPARE(authSpy.count(), 0);
+ QCOMPARE(authSpy.size(), 0);
authSpy.clear();
if (proxyAuth) {
//should be supplied from cache
- QCOMPARE(proxyAuthSpy.count(), 0);
+ QCOMPARE(proxyAuthSpy.size(), 0);
proxyAuthSpy.clear();
}
@@ -7438,8 +7869,8 @@ void tst_QNetworkReply::httpWithNoCredentialUsage()
QNetworkReplyPtr reply(manager.get(request));
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
// credentials in URL, so don't expect authentication signal
- QCOMPARE(authSpy.count(), 0);
- QCOMPARE(finishedSpy.count(), 1);
+ QCOMPARE(authSpy.size(), 0);
+ QCOMPARE(finishedSpy.size(), 1);
finishedSpy.clear();
}
@@ -7449,8 +7880,8 @@ void tst_QNetworkReply::httpWithNoCredentialUsage()
QNetworkReplyPtr reply(manager.get(request));
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
// credentials in cache, so don't expect authentication signal
- QCOMPARE(authSpy.count(), 0);
- QCOMPARE(finishedSpy.count(), 1);
+ QCOMPARE(authSpy.size(), 0);
+ QCOMPARE(finishedSpy.size(), 1);
finishedSpy.clear();
}
@@ -7467,9 +7898,9 @@ void tst_QNetworkReply::httpWithNoCredentialUsage()
QVERIFY(!QTestEventLoop::instance().timeout());
// We check if authenticationRequired was emitted, however we do not anything in it so it should be 401
- QCOMPARE(authSpy.count(), 1);
- QCOMPARE(finishedSpy.count(), 1);
- QCOMPARE(errorSpy.count(), 1);
+ QCOMPARE(authSpy.size(), 1);
+ QCOMPARE(finishedSpy.size(), 1);
+ QCOMPARE(errorSpy.size(), 1);
QCOMPARE(reply->error(), QNetworkReply::AuthenticationRequiredError);
}
@@ -7754,8 +8185,8 @@ void tst_QNetworkReply::qtbug45581WrongReplyStatusCode()
QCOMPARE(reply->readAll(), expectedContent);
- QCOMPARE(finishedSpy.count(), 0);
- QCOMPARE(sslErrorsSpy.count(), 0);
+ QCOMPARE(finishedSpy.size(), 0);
+ QCOMPARE(sslErrorsSpy.size(), 0);
QCOMPARE(reply->header(QNetworkRequest::ContentLengthHeader).toLongLong(), expectedContent.size());
@@ -7844,8 +8275,8 @@ void tst_QNetworkReply::synchronousRequest()
QSignalSpy sslErrorsSpy(&manager, SIGNAL(sslErrors(QNetworkReply*,QList<QSslError>)));
RUN_REQUEST(runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply, 0));
QVERIFY(reply->isFinished());
- QCOMPARE(finishedSpy.count(), 0);
- QCOMPARE(sslErrorsSpy.count(), 0);
+ QCOMPARE(finishedSpy.size(), 0);
+ QCOMPARE(sslErrorsSpy.size(), 0);
QCOMPARE(reply->header(QNetworkRequest::ContentTypeHeader).toString(), mimeType);
@@ -7854,7 +8285,7 @@ void tst_QNetworkReply::synchronousRequest()
if (expected.startsWith("file:")) {
QString path = expected.mid(5);
QFile file(path);
- file.open(QIODevice::ReadOnly);
+ QVERIFY(file.open(QIODevice::ReadOnly));
expectedContent = file.readAll();
} else if (expected.startsWith("data:")) {
expectedContent = expected.mid(5).toUtf8();
@@ -7884,7 +8315,7 @@ void tst_QNetworkReply::synchronousRequestSslFailure()
runSimpleRequest(QNetworkAccessManager::GetOperation, request, reply, 0);
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::SslHandshakeFailedError);
- QCOMPARE(sslErrorsSpy.count(), 0);
+ QCOMPARE(sslErrorsSpy.size(), 0);
}
#endif
@@ -8048,10 +8479,10 @@ void tst_QNetworkReply::varyingCacheExpiry()
server.doClose = false;
QUrl urls[4] = {
- u"http://localhost"_qs,
- u"http://localhost"_qs,
- u"http://localhost"_qs,
- u"http://localhost"_qs,
+ u"http://localhost"_s,
+ u"http://localhost"_s,
+ u"http://localhost"_s,
+ u"http://localhost"_s,
};
for (size_t i = 0; i < std::size(urls); ++i)
urls[i].setPort(servers[i].serverPort());
@@ -8103,6 +8534,61 @@ void tst_QNetworkReply::varyingCacheExpiry()
QVERIFY(success);
}
+class Qtbug25280Server : public MiniHttpServer
+{
+public:
+ Qtbug25280Server(QByteArray qba) : MiniHttpServer(qba, false) {}
+ QSet<QTcpSocket*> receivedSockets;
+ void reply() override
+ {
+ // Save sockets in a list
+ receivedSockets.insert((QTcpSocket*)sender());
+ qobject_cast<QTcpSocket*>(sender())->write(dataToTransmit);
+ //qDebug() << "count=" << receivedSockets.count();
+ }
+};
+
+void tst_QNetworkReply::amountOfHttp1ConnectionsQtbug25280_data()
+{
+ QTest::addColumn<int>("amount");
+ QTest::addRow("default") << 6;
+ QTest::addRow("minimize") << 1;
+ QTest::addRow("increase") << 12;
+}
+
+// Also kind of QTBUG-8468
+void tst_QNetworkReply::amountOfHttp1ConnectionsQtbug25280()
+{
+ QFETCH(const int, amount);
+ QNetworkAccessManager manager; // function local instance
+ Qtbug25280Server server(tst_QNetworkReply::httpEmpty200Response);
+ server.doClose = false;
+ server.multiple = true;
+ QUrl url(QLatin1String("http://127.0.0.1")); // not "localhost" to prevent "Happy Eyeballs"
+ // from skewing the counting
+ url.setPort(server.serverPort());
+ std::optional<QHttp1Configuration> http1Configuration;
+ if (amount != 6) // don't set if it's the default
+ http1Configuration.emplace().setNumberOfConnectionsPerHost(amount);
+ constexpr int NumRequests = 200; // send a lot more than we have sockets
+ int finished = 0;
+ std::array<std::unique_ptr<QNetworkReply>, NumRequests> replies;
+ for (auto &reply : replies) {
+ QNetworkRequest request(url);
+ if (http1Configuration)
+ request.setHttp1Configuration(*http1Configuration);
+ reply.reset(manager.get(request));
+ QObject::connect(reply.get(), &QNetworkReply::finished,
+ [&finished] { ++finished; });
+ }
+ QTRY_COMPARE_WITH_TIMEOUT(finished, NumRequests, 60'000);
+ for (const auto &reply : replies) {
+ QCOMPARE(reply->error(), QNetworkReply::NoError);
+ QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
+ }
+ QCOMPARE(server.receivedSockets.size(), amount);
+}
+
void tst_QNetworkReply::dontInsertPartialContentIntoTheCache()
{
QByteArray reply206 =
@@ -8131,7 +8617,7 @@ void tst_QNetworkReply::dontInsertPartialContentIntoTheCache()
QVERIFY(server.totalConnections > 0);
QCOMPARE(reply->readAll().constData(), "load");
- QCOMPARE(memoryCache->m_insertedUrls.count(), 0);
+ QCOMPARE(memoryCache->m_insertedUrls.size(), 0);
}
void tst_QNetworkReply::httpUserAgent()
@@ -8148,7 +8634,7 @@ void tst_QNetworkReply::httpUserAgent()
QVERIFY(reply->isFinished());
QCOMPARE(reply->error(), QNetworkReply::NoError);
- QVERIFY(server.receivedData.contains("\r\nUser-Agent: abcDEFghi\r\n"));
+ QVERIFY(server.receivedData.contains("\r\nuser-agent: abcDEFghi\r\n"));
}
void tst_QNetworkReply::synchronousAuthenticationCache()
@@ -8168,7 +8654,7 @@ void tst_QNetworkReply::synchronousAuthenticationCache()
"Content-Type: text/plain\r\n"
"\r\n"
"auth";
- QRegularExpression rx("Authorization: Basic ([^\r\n]*)\r\n");
+ QRegularExpression rx("authorization: Basic ([^\r\n]*)\r\n");
QRegularExpressionMatch match = rx.match(receivedData);
if (match.hasMatch()) {
if (QByteArray::fromBase64(match.captured(1).toLatin1()) == "login:password") {
@@ -8189,7 +8675,7 @@ void tst_QNetworkReply::synchronousAuthenticationCache()
// the server thread, because the client is never returning to the
// event loop
QScopedPointer<QThread, QThreadCleanup> serverThread(new QThread);
- QScopedPointer<MiniHttpServer, QDeleteLaterCleanup> server(new MiniAuthServer(serverThread.data()));
+ QScopedPointer<MiniHttpServer, QScopedPointerDeleteLater> server(new MiniAuthServer(serverThread.data()));
server->doClose = true;
//1) URL without credentials, we are not authenticated
@@ -8328,31 +8814,33 @@ void tst_QNetworkReply::ftpAuthentication()
void tst_QNetworkReply::emitErrorForAllReplies() // QTBUG-36890
{
// port 100 is not well-known and should be closed
- QList<QUrl> urls = QList<QUrl>() << QUrl("http://localhost:100/request1")
- << QUrl("http://localhost:100/request2")
- << QUrl("http://localhost:100/request3");
- QList<QNetworkReply *> replies;
- QList<QSignalSpy *> errorSpies;
- QList<QSignalSpy *> finishedSpies;
- for (int a = 0; a < urls.count(); ++a) {
- QNetworkRequest request(urls.at(a));
+ const QUrl urls[] = {
+ QUrl("http://localhost:100/request1"),
+ QUrl("http://localhost:100/request2"),
+ QUrl("http://localhost:100/request3"),
+ };
+ constexpr auto NUrls = std::size(urls);
+
+ std::unique_ptr<QNetworkReply, QScopedPointerDeleteLater> replies[NUrls];
+ std::optional<QSignalSpy> errorSpies[NUrls];
+ std::optional<QSignalSpy> finishedSpies[NUrls];
+
+ for (size_t i = 0; i < NUrls; ++i) {
+ QNetworkRequest request(urls[i]);
QNetworkReply *reply = manager.get(request);
- replies.append(reply);
- QSignalSpy *errorSpy = new QSignalSpy(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
- errorSpies.append(errorSpy);
- QSignalSpy *finishedSpy = new QSignalSpy(reply, SIGNAL(finished()));
- finishedSpies.append(finishedSpy);
+ replies[i].reset(reply);
+ errorSpies[i].emplace(reply, SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
+ finishedSpies[i].emplace(reply, SIGNAL(finished()));
QObject::connect(reply, SIGNAL(finished()), SLOT(emitErrorForAllRepliesSlot()));
}
+
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout());
- for (int a = 0; a < urls.count(); ++a) {
- QVERIFY(replies.at(a)->isFinished());
- QCOMPARE(errorSpies.at(a)->count(), 1);
- errorSpies.at(a)->deleteLater();
- QCOMPARE(finishedSpies.at(a)->count(), 1);
- finishedSpies.at(a)->deleteLater();
- replies.at(a)->deleteLater();
+
+ for (size_t i = 0; i < NUrls; ++i) {
+ QVERIFY(replies[i]->isFinished());
+ QCOMPARE(errorSpies[i]->size(), 1);
+ QCOMPARE(finishedSpies[i]->size(), 1);
}
}
@@ -8400,7 +8888,7 @@ public:
return ret;
}
virtual bool atEnd() const override { return buffer.atEnd(); }
- virtual qint64 size() const override { return data.length(); }
+ virtual qint64 size() const override { return data.size(); }
qint64 bytesAvailable() const override
{
return buffer.bytesAvailable() + QIODevice::bytesAvailable();
@@ -8421,9 +8909,9 @@ protected slots:
void tst_QNetworkReply::putWithRateLimiting()
{
QFile reference(testDataDir + "/rfc3252.txt");
- reference.open(QIODevice::ReadOnly);
+ QVERIFY(reference.open(QIODevice::ReadOnly));
QByteArray data = reference.readAll();
- QVERIFY(data.length() > 0);
+ QVERIFY(data.size() > 0);
QUrl url = QUrl::fromUserInput("http://" + QtNetworkSettings::httpServerName()+ "/qtest/cgi-bin/echo.cgi?");
@@ -8438,7 +8926,7 @@ void tst_QNetworkReply::putWithRateLimiting()
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
QByteArray uploadedData = reply->readAll();
- QCOMPARE(uploadedData.length(), data.length());
+ QCOMPARE(uploadedData.size(), data.size());
QCOMPARE(uploadedData, data);
}
@@ -8470,8 +8958,8 @@ void tst_QNetworkReply::ioHttpSingleRedirect()
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
// Redirected and finished should be emitted exactly once
- QCOMPARE(redSpy.count(), 1);
- QCOMPARE(finSpy.count(), 1);
+ QCOMPARE(redSpy.size(), 1);
+ QCOMPARE(finSpy.size(), 1);
// Original URL should not be changed after redirect
QCOMPARE(request.url(), localhost);
@@ -8517,8 +9005,8 @@ void tst_QNetworkReply::ioHttpChangeMaxRedirects()
QCOMPARE(waitForFinish(reply), int(Failure));
- QCOMPARE(redSpy.count(), request.maximumRedirectsAllowed());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(redSpy.size(), request.maximumRedirectsAllowed());
+ QCOMPARE(spy.size(), 1);
QCOMPARE(reply->error(), QNetworkReply::TooManyRedirectsError);
// Increase max redirects to allow successful completion
@@ -8529,7 +9017,7 @@ void tst_QNetworkReply::ioHttpChangeMaxRedirects()
QVERIFY2(waitForFinish(reply2) == Success, msgWaitForFinished(reply2));
- QCOMPARE(redSpy2.count(), 2);
+ QCOMPARE(redSpy2.size(), 2);
QCOMPARE(reply2->url(), server3Url);
QCOMPARE(reply2->error(), QNetworkReply::NoError);
QVERIFY(validateRedirectedResponseHeaders(reply2));
@@ -8662,8 +9150,8 @@ void tst_QNetworkReply::ioHttpRedirectPolicy()
QSignalSpy redirectSpy(reply.data(), SIGNAL(redirected(QUrl)));
QSignalSpy finishedSpy(reply.data(), SIGNAL(finished()));
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
- QCOMPARE(finishedSpy.count(), 1);
- QCOMPARE(redirectSpy.count(), redirectCount);
+ QCOMPARE(finishedSpy.size(), 1);
+ QCOMPARE(redirectSpy.size(), redirectCount);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), statusCode);
QVERIFY(validateRedirectedResponseHeaders(reply) || statusCode != 200);
}
@@ -8746,7 +9234,7 @@ void tst_QNetworkReply::ioHttpRedirectPolicyErrors()
QSignalSpy spy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
QCOMPARE(waitForFinish(reply), int(Failure));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(reply->error(), expectedError);
}
@@ -8796,7 +9284,7 @@ void tst_QNetworkReply::ioHttpUserVerifiedRedirect()
QSignalSpy finishedSpy(reply.data(), SIGNAL(finished()));
waitForFinish(reply);
- QCOMPARE(finishedSpy.count(), 1);
+ QCOMPARE(finishedSpy.size(), 1);
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), statusCode);
QVERIFY(validateRedirectedResponseHeaders(reply) || statusCode != 200);
}
@@ -8808,7 +9296,7 @@ void tst_QNetworkReply::ioHttpCookiesDuringRedirect()
const QString cookieHeader = QStringLiteral("Set-Cookie: hello=world; Path=/;\r\n");
QString redirect = tempRedirectReplyStr();
// Insert 'cookieHeader' before the final \r\n
- redirect.insert(redirect.length() - 2, cookieHeader);
+ redirect.insert(redirect.size() - 2, cookieHeader);
QUrl url("http://localhost/");
url.setPort(target.serverPort());
@@ -8825,7 +9313,7 @@ void tst_QNetworkReply::ioHttpCookiesDuringRedirect()
manager.setRedirectPolicy(oldRedirectPolicy);
QVERIFY(waitForFinish(reply) == Success);
- QVERIFY(target.receivedData.contains("\r\nCookie: hello=world\r\n"));
+ QVERIFY(target.receivedData.contains("\r\ncookie: hello=world\r\n"));
QVERIFY(validateRedirectedResponseHeaders(reply));
}
@@ -8868,6 +9356,64 @@ void tst_QNetworkReply::ioHttpRedirect()
QVERIFY(validateRedirectedResponseHeaders(reply));
}
+/*
+ Test that, if we load a redirect from cache, we don't treat the request to
+ the destination of the redirect as a redirect.
+
+ If it was treated as a redirect the finished() signal was never emitted!
+*/
+void tst_QNetworkReply::ioHttpRedirectWithCache()
+{
+ // Disallow caching the result so that the second request must also send the request
+ QByteArray http200ResponseNoCache = "HTTP/1.1 200 OK\r\n"
+ "Content-Type: text/plain\r\n"
+ "Cache-Control: no-cache\r\n"
+ "\r\nHello";
+
+ MiniHttpServer target(http200ResponseNoCache, false);
+ QUrl targetUrl("http://localhost/");
+ targetUrl.setPort(target.serverPort());
+
+ // A cache-able redirect reply
+ QString redirectReply = QStringLiteral("HTTP/1.1 308\r\n"
+ "Content-Type: text/plain\r\n"
+ "location: %1\r\n"
+ "Cache-Control: max-age=3600\r\n"
+ "\r\nYou're being redirected").arg(targetUrl.toString());
+ MiniHttpServer redirectServer(redirectReply.toLatin1(), false);
+ QUrl url("http://localhost/");
+ url.setPort(redirectServer.serverPort());
+
+ QTemporaryDir tempDir(QDir::tempPath() + "/tmp_cache_28035");
+ QVERIFY2(tempDir.isValid(), qPrintable(tempDir.errorString()));
+ tempDir.setAutoRemove(true);
+
+ QNetworkDiskCache *diskCache = new QNetworkDiskCache();
+ diskCache->setCacheDirectory(tempDir.path());
+ // Manager takes ownership of the cache:
+ manager.setCache(diskCache);
+ QCOMPARE(diskCache->cacheSize(), 0);
+
+ // Send the first request, we end up caching the redirect reply
+ QNetworkRequest request(url);
+ QNetworkReplyPtr reply(manager.get(request));
+
+ QCOMPARE(waitForFinish(reply), int(Success));
+ QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
+ QVERIFY(validateRedirectedResponseHeaders(reply));
+
+ QVERIFY(diskCache->cacheSize() != 0);
+
+ // Now for the second request, we will use the cache, and we test that the finished()
+ // signal is still emitted.
+ request.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
+ reply.reset(manager.get(request));
+
+ QCOMPARE(waitForFinish(reply), int(Success));
+ QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200);
+ QVERIFY(validateRedirectedResponseHeaders(reply));
+}
+
void tst_QNetworkReply::ioHttpRedirectFromLocalToRemote()
{
QUrl targetUrl("http://" + QtNetworkSettings::httpServerName() + "/qtest/rfc3252.txt");
@@ -9013,8 +9559,8 @@ void tst_QNetworkReply::ioHttpRedirectMultipartPost()
QCOMPARE(reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(), 200); // 200 OK
- QVERIFY(multiPart->boundary().count() > 20); // check that there is randomness after the "boundary_.oOo._" string
- QVERIFY(multiPart->boundary().count() < 70);
+ QVERIFY(multiPart->boundary().size() > 20); // check that there is randomness after the "boundary_.oOo._" string
+ QVERIFY(multiPart->boundary().size() < 70);
QByteArray replyData = reply->readAll();
expectedReplyData.prepend("content type: multipart/" + contentType + "; boundary=\"" + multiPart->boundary() + "\"\n");
@@ -9177,9 +9723,9 @@ public slots:
//qDebug() << m_receivedData.left(m_receivedData.indexOf("\r\n\r\n"));
m_receivedData = m_receivedData.mid(m_receivedData.indexOf("\r\n\r\n")+4); // check only actual data
}
- if (m_receivedData.length() > 0 && !m_expectedData.startsWith(m_receivedData)) {
+ if (m_receivedData.size() > 0 && !m_expectedData.startsWith(m_receivedData)) {
// We had received some data but it is corrupt!
- qDebug() << "CORRUPT" << m_receivedData.count();
+ qDebug() << "CORRUPT" << m_receivedData.size();
#if 0 // Use this to track down the pattern of the corruption and conclude the source
QFile a("/tmp/corrupt");
@@ -9301,8 +9847,12 @@ void tst_QNetworkReply::autoDeleteRepliesAttribute_data()
{
QTest::addColumn<QUrl>("destination");
- QTest::newRow("http") << QUrl("http://QInvalidDomain.qt/test");
- QTest::newRow("https") << QUrl("https://QInvalidDomain.qt/test");
+ QUrl webServerUrl = QtNetworkSettings::httpServerIp().toString();
+ webServerUrl.setPath("/notfound");
+ webServerUrl.setScheme("http");
+ QTest::newRow("http") << webServerUrl;
+ webServerUrl.setScheme("https");
+ QTest::newRow("https") << webServerUrl;
if (ftpSupported)
QTest::newRow("ftp") << QUrl("ftp://QInvalidDomain.qt/test");
QTest::newRow("file") << QUrl("file:///thisfolderdoesn'texist/probably.txt");
@@ -9325,7 +9875,7 @@ void tst_QNetworkReply::autoDeleteRepliesAttribute()
QSignalSpy finishedSpy(reply, &QNetworkReply::finished);
QSignalSpy destroyedSpy(reply, &QObject::destroyed);
QVERIFY(finishedSpy.wait());
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
QVERIFY(destroyedSpy.wait());
}
{
@@ -9336,7 +9886,7 @@ void tst_QNetworkReply::autoDeleteRepliesAttribute()
QSignalSpy finishedSpy(reply, &QNetworkReply::finished);
QSignalSpy destroyedSpy(reply, &QObject::destroyed);
QVERIFY(finishedSpy.wait());
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
QVERIFY(destroyedSpy.wait());
}
// Now repeated, but without the attribute to make sure it does not get deleted automatically.
@@ -9350,10 +9900,10 @@ void tst_QNetworkReply::autoDeleteRepliesAttribute()
QSignalSpy finishedSpy(reply.data(), &QNetworkReply::finished);
QSignalSpy destroyedSpy(reply.data(), &QObject::destroyed);
QVERIFY(finishedSpy.wait());
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
QCoreApplication::processEvents();
QCoreApplication::processEvents();
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
}
{
// Post
@@ -9362,10 +9912,10 @@ void tst_QNetworkReply::autoDeleteRepliesAttribute()
QSignalSpy finishedSpy(reply.data(), &QNetworkReply::finished);
QSignalSpy destroyedSpy(reply.data(), &QObject::destroyed);
QVERIFY(finishedSpy.wait());
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
QCoreApplication::processEvents();
QCoreApplication::processEvents();
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
}
}
@@ -9386,7 +9936,7 @@ void tst_QNetworkReply::autoDeleteReplies()
QSignalSpy finishedSpy(reply, &QNetworkReply::finished);
QSignalSpy destroyedSpy(reply, &QObject::destroyed);
QVERIFY(finishedSpy.wait());
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
QVERIFY(destroyedSpy.wait());
}
{
@@ -9396,7 +9946,7 @@ void tst_QNetworkReply::autoDeleteReplies()
QSignalSpy finishedSpy(reply, &QNetworkReply::finished);
QSignalSpy destroyedSpy(reply, &QObject::destroyed);
QVERIFY(finishedSpy.wait());
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
QVERIFY(destroyedSpy.wait());
}
// Here we repeat the test, but override the auto-deletion in the QNetworkRequest
@@ -9411,10 +9961,10 @@ void tst_QNetworkReply::autoDeleteReplies()
QSignalSpy finishedSpy(reply.data(), &QNetworkReply::finished);
QSignalSpy destroyedSpy(reply.data(), &QObject::destroyed);
QVERIFY(finishedSpy.wait());
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
QCoreApplication::processEvents();
QCoreApplication::processEvents();
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
}
{
// Post
@@ -9424,10 +9974,10 @@ void tst_QNetworkReply::autoDeleteReplies()
QSignalSpy finishedSpy(reply.data(), &QNetworkReply::finished);
QSignalSpy destroyedSpy(reply.data(), &QObject::destroyed);
QVERIFY(finishedSpy.wait());
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
QCoreApplication::processEvents();
QCoreApplication::processEvents();
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
}
// Now we repeat the test with autoDeleteReplies set to false
cleanup.dismiss();
@@ -9439,10 +9989,10 @@ void tst_QNetworkReply::autoDeleteReplies()
QSignalSpy finishedSpy(reply.data(), &QNetworkReply::finished);
QSignalSpy destroyedSpy(reply.data(), &QObject::destroyed);
QVERIFY(finishedSpy.wait());
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
QCoreApplication::processEvents();
QCoreApplication::processEvents();
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
}
{
// Post
@@ -9451,140 +10001,137 @@ void tst_QNetworkReply::autoDeleteReplies()
QSignalSpy finishedSpy(reply.data(), &QNetworkReply::finished);
QSignalSpy destroyedSpy(reply.data(), &QObject::destroyed);
QVERIFY(finishedSpy.wait());
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
QCoreApplication::processEvents();
QCoreApplication::processEvents();
- QCOMPARE(destroyedSpy.count(), 0);
+ QCOMPARE(destroyedSpy.size(), 0);
}
}
-void tst_QNetworkReply::getWithTimeout()
+void tst_QNetworkReply::requestWithTimeout_data()
{
- MiniHttpServer server(tst_QNetworkReply::httpEmpty200Response, false);
-
- QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
- QNetworkReplyPtr reply(manager.get(request));
- QSignalSpy spy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
-
- QCOMPARE(waitForFinish(reply), int(Success));
-
- QCOMPARE(spy.count(), 0);
- QVERIFY(reply->error() == QNetworkReply::NoError);
-
- request.setTransferTimeout(1000);
- server.stopTransfer = true;
+ using Operation = QNetworkAccessManager::Operation;
+ QTest::addColumn<Operation>("method");
+ QTest::addColumn<int>("reqInt");
+ QTest::addColumn<std::chrono::milliseconds>("reqChrono");
+ QTest::addColumn<int>("mgrInt");
+ QTest::addColumn<std::chrono::milliseconds>("mgrChrono");
- QNetworkReplyPtr reply2(manager.get(request));
- QSignalSpy spy2(reply2.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
-
- QCOMPARE(waitForFinish(reply2), int(Failure));
-
- QCOMPARE(spy2.count(), 1);
- QVERIFY(reply2->error() == QNetworkReply::OperationCanceledError);
-
- request.setTransferTimeout(0);
- manager.setTransferTimeout(1000);
+ QTest::addRow("get_req_int") << Operation::GetOperation << 500 << 0ms << 0 << 0ms;
+ QTest::addRow("get_req_chrono") << Operation::GetOperation << 0 << 500ms << 0 << 0ms;
+ QTest::addRow("get_mgr_int") << Operation::GetOperation << 0 << 0ms << 500 << 0ms;
+ QTest::addRow("get_mgr_chrono") << Operation::GetOperation << 0 << 0ms << 0 << 500ms;
- QNetworkReplyPtr reply3(manager.get(request));
- QSignalSpy spy3(reply3.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
-
- QCOMPARE(waitForFinish(reply3), int(Failure));
-
- QCOMPARE(spy3.count(), 1);
- QVERIFY(reply3->error() == QNetworkReply::OperationCanceledError);
-
- manager.setTransferTimeout(0);
+ QTest::addRow("post_req_int") << Operation::PostOperation << 500 << 0ms << 0 << 0ms;
+ QTest::addRow("post_req_chrono") << Operation::PostOperation << 0 << 500ms << 0 << 0ms;
+ QTest::addRow("post_mgr_int") << Operation::PostOperation << 0 << 0ms << 500 << 0ms;
+ QTest::addRow("post_mgr_chrono") << Operation::PostOperation << 0 << 0ms << 0 << 500ms;
}
-void tst_QNetworkReply::postWithTimeout()
+void tst_QNetworkReply::requestWithTimeout()
{
+ QFETCH(QNetworkAccessManager::Operation, method);
+ QFETCH(int, reqInt);
+ QFETCH(int, mgrInt);
+ QFETCH(std::chrono::milliseconds, reqChrono);
+ QFETCH(std::chrono::milliseconds, mgrChrono);
+ const auto data = "some data"_ba;
+ // Manager instance remains between case runs => always reset it's transferTimeout to
+ // ensure setting its transferTimeout in this case has effect
+ manager.setTransferTimeout(0ms);
+ auto cleanup = qScopeGuard([this] { manager.setTransferTimeout(0ms); });
+
MiniHttpServer server(tst_QNetworkReply::httpEmpty200Response, false);
+ server.stopTransfer = true;
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
request.setRawHeader("Content-Type", "application/octet-stream");
- QByteArray postData("Just some nonsense");
- QNetworkReplyPtr reply(manager.post(request, postData));
- QSignalSpy spy(reply.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
-
- QCOMPARE(waitForFinish(reply), int(Success));
-
- QCOMPARE(spy.count(), 0);
- QVERIFY(reply->error() == QNetworkReply::NoError);
-
- request.setTransferTimeout(1000);
- server.stopTransfer = true;
-
- QNetworkReplyPtr reply2(manager.post(request, postData));
- QSignalSpy spy2(reply2.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
-
- QCOMPARE(waitForFinish(reply2), int(Failure));
+ if (reqInt > 0)
+ request.setTransferTimeout(reqInt);
+ if (reqChrono > 0ms)
+ request.setTransferTimeout(reqChrono);
+ if (mgrInt > 0)
+ manager.setTransferTimeout(mgrInt);
+ if (mgrChrono > 0ms)
+ manager.setTransferTimeout(mgrChrono);
- QCOMPARE(spy2.count(), 1);
- QVERIFY(reply2->error() == QNetworkReply::OperationCanceledError);
-
- request.setTransferTimeout(0);
- manager.setTransferTimeout(1000);
-
- QNetworkReplyPtr reply3(manager.post(request, postData));
- QSignalSpy spy3(reply3.data(), SIGNAL(errorOccurred(QNetworkReply::NetworkError)));
-
- QCOMPARE(waitForFinish(reply3), int(Failure));
-
- QCOMPARE(spy3.count(), 1);
- QVERIFY(reply3->error() == QNetworkReply::OperationCanceledError);
+ QNetworkReplyPtr reply;
+ if (method == QNetworkAccessManager::GetOperation)
+ reply.reset(manager.get(request));
+ else if (method == QNetworkAccessManager::PostOperation)
+ reply.reset(manager.post(request, data));
+ QVERIFY(reply);
- manager.setTransferTimeout(0);
+ QSignalSpy spy(reply.data(), &QNetworkReply::errorOccurred);
+ QCOMPARE(waitForFinish(reply), int(Failure));
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(reply->error(), QNetworkReply::OperationCanceledError);
}
void tst_QNetworkReply::moreActivitySignals_data()
{
QTest::addColumn<QUrl>("url");
QTest::addColumn<bool>("useipv6");
- QTest::addRow("local4") << QUrl("http://127.0.0.1") << false;
- QTest::addRow("local6") << QUrl("http://[::1]") << true;
+ QTest::addColumn<bool>("postWithData");
+ QTest::addRow("local4") << QUrl("http://127.0.0.1") << false << false;
+ QTest::addRow("local6") << QUrl("http://[::1]") << true << false;
if (qEnvironmentVariable("QTEST_ENVIRONMENT").split(' ').contains("ci")) {
// On CI server
- QTest::addRow("localDns") << QUrl("http://localhost") << false; // will find v6
+ QTest::addRow("localDns") << QUrl("http://localhost") << false << false; // will find v6
} else {
// For manual testing
- QTest::addRow("localDns4") << QUrl("http://localhost") << true; // will find both v4 and v6
- QTest::addRow("localDns6") << QUrl("http://localhost") << false; // will find both v4 and v6
+ QTest::addRow("localDns4") << QUrl("http://localhost") << true << false; // will find both v4 and v6
+ QTest::addRow("localDns6") << QUrl("http://localhost") << false << false; // will find both v4 and v6
}
+ QTest::addRow("post-with-data") << QUrl("http://[::1]") << true << true;
}
void tst_QNetworkReply::moreActivitySignals()
{
QFETCH(QUrl, url);
QFETCH(bool, useipv6);
+ QFETCH(bool, postWithData);
MiniHttpServer server(tst_QNetworkReply::httpEmpty200Response, false, nullptr/*thread*/, useipv6);
server.doClose = false;
url.setPort(server.serverPort());
QNetworkRequest request(url);
- QNetworkReplyPtr reply(manager.get(request));
- QSignalSpy spy1(reply.data(), SIGNAL(socketConnecting()));
+ QNetworkReplyPtr reply;
+ if (postWithData) {
+ request.setRawHeader("Content-Type", "text/plain");
+ reply.reset(manager.post(request, "Hello, world!"));
+ } else {
+ reply.reset(manager.get(request));
+ }
+ QSignalSpy spy1(reply.data(), SIGNAL(socketStartedConnecting()));
QSignalSpy spy2(reply.data(), SIGNAL(requestSent()));
QSignalSpy spy3(reply.data(), SIGNAL(metaDataChanged()));
QSignalSpy spy4(reply.data(), SIGNAL(finished()));
spy1.wait();
- QCOMPARE(spy1.count(), 1);
+ QCOMPARE(spy1.size(), 1);
spy2.wait();
- QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy2.size(), 1);
spy3.wait();
- QCOMPARE(spy3.count(), 1);
+ QCOMPARE(spy3.size(), 1);
spy4.wait();
- QCOMPARE(spy4.count(), 1);
+ QCOMPARE(spy4.size(), 1);
QVERIFY(reply->error() == QNetworkReply::NoError);
- // Second request will not send socketConnecting because of keep-alive, so don't check it.
- QNetworkReplyPtr secondreply(manager.get(request));
+ // Second request will not send socketStartedConnecting because of keep-alive, so don't check it.
+ QNetworkReplyPtr secondreply;
+ if (postWithData) {
+ request.setRawHeader("Content-Type", "text/plain");
+ secondreply.reset(manager.post(request, "Hello, world!"));
+ } else {
+ secondreply.reset(manager.get(request));
+ }
QSignalSpy secondspy2(secondreply.data(), SIGNAL(requestSent()));
QSignalSpy secondspy3(secondreply.data(), SIGNAL(metaDataChanged()));
QSignalSpy secondspy4(secondreply.data(), SIGNAL(finished()));
secondspy2.wait();
- QCOMPARE(secondspy2.count(), 1);
+ QCOMPARE(secondspy2.size(), 1);
secondspy3.wait();
- QCOMPARE(secondspy3.count(), 1);
+ QCOMPARE(secondspy3.size(), 1);
secondspy4.wait();
- QCOMPARE(secondspy4.count(), 1);
+ QCOMPARE(secondspy4.size(), 1);
QVERIFY(secondreply->error() == QNetworkReply::NoError);
}
@@ -9593,25 +10140,53 @@ void tst_QNetworkReply::contentEncoding_data()
QTest::addColumn<QByteArray>("encoding");
QTest::addColumn<QByteArray>("body");
QTest::addColumn<QByteArray>("expected");
+ QTest::addColumn<bool>("decompress");
+ const QByteArray helloWorld = "hello world";
+
+ const QByteArray gzipBody = QByteArray::fromBase64("H4sIAAAAAAAAA8tIzcnJVyjPL8pJAQCFEUoNCwAAAA==");
QTest::newRow("gzip-hello-world")
<< QByteArray("gzip")
- << QByteArray::fromBase64("H4sIAAAAAAAAA8tIzcnJVyjPL8pJAQCFEUoNCwAAAA==")
- << QByteArray("hello world");
+ << gzipBody
+ << helloWorld
+ << true;
+ QTest::newRow("gzip-hello-world-no-decompress")
+ << QByteArray("gzip")
+ << gzipBody
+ << helloWorld
+ << false;
+ const QByteArray deflateBody = QByteArray::fromBase64("eJzLSM3JyVcozy/KSQEAGgsEXQ==");
QTest::newRow("deflate-hello-world")
- << QByteArray("deflate") << QByteArray::fromBase64("eJzLSM3JyVcozy/KSQEAGgsEXQ==")
- << QByteArray("hello world");
+ << QByteArray("deflate") << deflateBody
+ << helloWorld
+ << true;
+ QTest::newRow("deflate-hello-world-no-decompress")
+ << QByteArray("deflate") << deflateBody
+ << helloWorld
+ << false;
#if QT_CONFIG(brotli)
+ const QByteArray brotliBody = QByteArray::fromBase64("DwWAaGVsbG8gd29ybGQD");
QTest::newRow("brotli-hello-world")
- << QByteArray("br") << QByteArray::fromBase64("DwWAaGVsbG8gd29ybGQD")
- << QByteArray("hello world");
+ << QByteArray("br") << brotliBody
+ << helloWorld
+ << true;
+ QTest::newRow("brotli-hello-world-no-decompress")
+ << QByteArray("br") << brotliBody
+ << helloWorld
+ << false;
#endif
#if defined(QT_BUILD_INTERNAL) && QT_CONFIG(zstd)
+ const QByteArray zstdBody = QByteArray::fromBase64("KLUv/QRYWQAAaGVsbG8gd29ybGRoaR6y");
QTest::newRow("zstandard-hello-world")
- << QByteArray("zstd") << QByteArray::fromBase64("KLUv/QRYWQAAaGVsbG8gd29ybGRoaR6y")
- << QByteArray("hello world");
+ << QByteArray("zstd") << zstdBody
+ << helloWorld
+ << true;
+ QTest::newRow("zstandard-hello-world-no-decompress")
+ << QByteArray("zstd") << zstdBody
+ << helloWorld
+ << false;
#else
qDebug("Note: ZStandard testdata is only available for developer builds.");
#endif
@@ -9621,12 +10196,19 @@ void tst_QNetworkReply::contentEncoding()
{
QFETCH(QByteArray, encoding);
QFETCH(QByteArray, body);
+ QFETCH(bool, decompress);
QString header("HTTP/1.0 200 OK\r\nContent-Encoding: %1\r\nContent-Length: %2\r\n\r\n");
header = header.arg(encoding, QString::number(body.size()));
MiniHttpServer server(header.toLatin1() + body);
QNetworkRequest request(QUrl("http://localhost:" + QString::number(server.serverPort())));
+ if (!decompress) {
+ // This disables decompression of the received content:
+ request.setRawHeader("accept-encoding", QLatin1String("%1").arg(encoding).toLatin1());
+ // This disables the zerocopy optimization
+ request.setAttribute(QNetworkRequest::MaximumDownloadBufferSizeAttribute, 0);
+ }
QNetworkReplyPtr reply(manager.get(request));
QVERIFY2(waitForFinish(reply) == Success, msgWaitForFinished(reply));
@@ -9635,7 +10217,7 @@ void tst_QNetworkReply::contentEncoding()
{
// Check that we included the content encoding method in our Accept-Encoding header
const QByteArray &receivedData = server.receivedData;
- int start = receivedData.indexOf("Accept-Encoding");
+ int start = receivedData.indexOf("accept-encoding");
QVERIFY(start != -1);
int end = receivedData.indexOf("\r\n", start);
QVERIFY(end != -1);
@@ -9647,10 +10229,14 @@ void tst_QNetworkReply::contentEncoding()
QVERIFY2(list.contains(encoding), acceptedEncoding.data());
}
- QFETCH(QByteArray, expected);
-
- QCOMPARE(reply->bytesAvailable(), expected.size());
- QCOMPARE(reply->readAll(), expected);
+ if (decompress) {
+ QFETCH(QByteArray, expected);
+ QCOMPARE(reply->bytesAvailable(), expected.size());
+ QCOMPARE(reply->readAll(), expected);
+ } else {
+ QCOMPARE(reply->bytesAvailable(), body.size());
+ QCOMPARE(reply->readAll(), body);
+ }
}
void tst_QNetworkReply::contentEncodingBigPayload_data()
@@ -9664,7 +10250,7 @@ void tst_QNetworkReply::contentEncodingBigPayload_data()
QTest::addRow("gzip-4GB") << QByteArray("gzip") << (":/4G.gz") << fourGiB;
#if QT_CONFIG(brotli)
- QTest::addRow("brotli-4GB") << QByteArray("br") << (testDataDir + "./4G.br") << fourGiB;
+ QTest::addRow("brotli-4GB") << QByteArray("br") << (testDataDir + "/4G.br") << fourGiB;
#endif
#if defined(QT_BUILD_INTERNAL) && QT_CONFIG(zstd)
QTest::addRow("zstd-4GB") << QByteArray("zstd") << (":/4G.zst") << fourGiB;
@@ -9789,6 +10375,192 @@ void tst_QNetworkReply::downloadProgressWithContentEncoding()
QCOMPARE(bytesReceived, expected.size());
}
+void tst_QNetworkReply::contentEncodingError_data()
+{
+ QTest::addColumn<QByteArray>("encoding");
+ QTest::addColumn<QString>("path");
+ QTest::addColumn<QNetworkReply::NetworkError>("expectedError");
+
+ QTest::addRow("archive-bomb") << QByteArray("gzip") << (":/4G.gz")
+ << QNetworkReply::UnknownContentError;
+}
+
+void tst_QNetworkReply::contentEncodingError()
+{
+ QFETCH(QString, path);
+ QFile compressedFile(path);
+ QVERIFY(compressedFile.open(QIODevice::ReadOnly));
+ QByteArray body = compressedFile.readAll();
+
+ QFETCH(QByteArray, encoding);
+ QString header("HTTP/1.0 200 OK\r\nContent-Encoding: %1\r\nContent-Length: %2\r\n\r\n");
+ header = header.arg(encoding, QString::number(body.size()));
+
+ MiniHttpServer server(header.toLatin1() + body);
+
+ QNetworkRequest request(
+ QUrl(QLatin1String("http://localhost:%1").arg(QString::number(server.serverPort()))));
+ QNetworkReplyPtr reply(manager.get(request));
+
+ QTRY_VERIFY2_WITH_TIMEOUT(reply->isFinished(), qPrintable(reply->errorString()), 15000);
+ QTEST(reply->error(), "expectedError");
+}
+
+// When this test is failing it will appear flaky because it relies on the
+// timing of delivery from one socket to another in the OS.
+// + we have to send all the data at once, so the readyRead emissions are
+// compressed into a single emission, so we cannot artificially time it with
+// waits and sleeps.
+void tst_QNetworkReply::compressedReadyRead()
+{
+ // There were historically an issue where a mix of signal compression and
+ // data decompression made it so we accidentally didn't emit the final
+ // readyRead signal before emitting finished(). Test this here to make sure
+ // it happens:
+ const QByteArray gzipPayload =
+ QByteArray::fromBase64("H4sIAAAAAAAAA8tIzcnJVyjPL8pJAQCFEUoNCwAAAA==");
+ const QByteArray expected = "hello world";
+
+ QString header("HTTP/1.0 200 OK\r\nContent-Encoding: gzip\r\nContent-Length: %1\r\n\r\n");
+ header = header.arg(gzipPayload.size());
+ MiniHttpServer server(header.toLatin1()); // only send header automatically
+ server.doClose = false; // don't close and delete client socket right away
+
+ QNetworkRequest request(
+ QUrl(QLatin1String("http://localhost:%1").arg(QString::number(server.serverPort()))));
+ QNetworkReplyPtr reply(manager.get(request));
+
+ QObject::connect(reply.get(), &QNetworkReply::metaDataChanged, reply.get(),
+ [&server, &gzipPayload]() {
+ // Client received headers, now send data:
+ // We do this awkward write,flush,write dance to try to
+ // make sure the data does not all arrive at the same
+ // time. By design we send the final "=" byte by itself
+ qsizetype boundary = gzipPayload.size() - 1;
+ server.client->write(gzipPayload.sliced(0, boundary));
+ server.client->flush();
+ // Let the server take care of deleting the client once
+ // the rest of the data is written:
+ server.doClose = true;
+ server.client->write(gzipPayload.sliced(boundary));
+ });
+
+ QByteArray received;
+ QObject::connect(reply.get(), &QNetworkReply::readyRead, reply.get(),
+ [reply = reply.get(), &received]() {
+ received += reply->readAll();
+ });
+ QTRY_VERIFY(reply->isFinished());
+ QCOMPARE(received, expected);
+}
+
+void tst_QNetworkReply::notFoundWithCompression_data()
+{
+ contentEncoding_data();
+}
+
+void tst_QNetworkReply::notFoundWithCompression()
+{
+ QFETCH(QByteArray, encoding);
+ QFETCH(QByteArray, body);
+ QString header("HTTP/1.0 404 OK\r\nContent-Encoding: %1\r\nContent-Length: %2\r\n\r\n");
+ header = header.arg(encoding, QString::number(body.size()));
+
+ MiniHttpServer server(header.toLatin1() + body);
+
+ QNetworkRequest request(
+ QUrl(QLatin1String("http://localhost:%1").arg(QString::number(server.serverPort()))));
+ QNetworkReplyPtr reply(manager.get(request));
+
+ QTRY_VERIFY2_WITH_TIMEOUT(reply->isFinished(), qPrintable(reply->errorString()), 15000);
+ QCOMPARE(reply->error(), QNetworkReply::ContentNotFoundError);
+
+ QFETCH(QByteArray, expected);
+ QCOMPARE(reply->readAll(), expected);
+}
+
+void tst_QNetworkReply::qtbug68821proxyError_data()
+{
+ QTest::addColumn<QString>("proxyHost");
+ QTest::addColumn<QString>("scheme");
+ QTest::addColumn<QNetworkReply::NetworkError>("error");
+
+ QTest::newRow("invalidhost+http") << "this-host-will-never-exist.qt-project.org"
+ << "http" << QNetworkReply::ProxyNotFoundError;
+ QTest::newRow("localhost+http") << "localhost"
+ << "http" << QNetworkReply::ProxyConnectionRefusedError;
+#ifndef QT_NO_SSL
+ QTest::newRow("invalidhost+https") << "this-host-will-never-exist.qt-project.org"
+ << "https" << QNetworkReply::ProxyNotFoundError;
+ QTest::newRow("localhost+https") << "localhost"
+ << "https" << QNetworkReply::ProxyConnectionRefusedError;
+#endif
+}
+
+void tst_QNetworkReply::qtbug68821proxyError()
+{
+ auto getUnusedPort = []() -> std::optional<quint16> {
+ QTcpServer probeServer;
+ if (!probeServer.listen())
+ return std::nullopt;
+ // If we can listen on it, it was unused, and hopefully is also
+ // still unused after we stop listening.
+ return probeServer.serverPort();
+ };
+
+ auto proxyPort = getUnusedPort();
+ QVERIFY(proxyPort);
+
+ QFETCH(QString, proxyHost);
+ QNetworkProxy proxy(QNetworkProxy::HttpProxy, proxyHost, proxyPort.value());
+
+ manager.setProxy(proxy);
+
+ QFETCH(QString, scheme);
+ QNetworkReply *reply = manager.get(QNetworkRequest(QUrl(scheme + "://example.com")));
+ QSignalSpy spy(reply, &QNetworkReply::errorOccurred);
+ QVERIFY(spy.isValid());
+
+ QVERIFY(spy.wait(15000));
+
+ QFETCH(QNetworkReply::NetworkError, error);
+ QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.at(0).at(0), error);
+}
+
+void tst_QNetworkReply::abortAndError()
+{
+ const QByteArray response =
+ R"(HTTP/1.0 500 Internal Server Error
+Content-Length: 12
+Content-Type: text/plain
+
+Hello World!)"_ba;
+
+ MiniHttpServer server(response);
+
+ QNetworkAccessManager manager;
+ QNetworkRequest req(QUrl("http://127.0.0.1:" + QString::number(server.serverPort())));
+ std::unique_ptr<QNetworkReply> reply(manager.post(req, "my data goes here"_ba));
+ QSignalSpy errorSignal(reply.get(), &QNetworkReply::errorOccurred);
+ QSignalSpy finishedSignal(reply.get(), &QNetworkReply::finished);
+
+ reply->abort();
+
+ // We don't want to print this warning in this case because it is impossible
+ // for users to avoid it.
+ QTest::failOnWarning("QNetworkReplyImplPrivate::error: Internal problem, this method must only "
+ "be called once.");
+ // Process any signals from the http thread:
+ QTest::qWait(1s);
+ if (QTest::currentTestFailed())
+ return;
+
+ QCOMPARE(finishedSignal.count(), 1);
+ QCOMPARE(errorSignal.count(), 1);
+ QCOMPARE(reply->error(), QNetworkReply::OperationCanceledError);
+}
+
// NOTE: This test must be last testcase in tst_qnetworkreply!
void tst_QNetworkReply::parentingRepliesToTheApp()
{
diff --git a/tests/auto/network/access/qnetworkrequest/CMakeLists.txt b/tests/auto/network/access/qnetworkrequest/CMakeLists.txt
index 1a98449549..2c4a7dd7ca 100644
--- a/tests/auto/network/access/qnetworkrequest/CMakeLists.txt
+++ b/tests/auto/network/access/qnetworkrequest/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qnetworkrequest.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkrequest Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkrequest LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkrequest
SOURCES
tst_qnetworkrequest.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp b/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp
index 8cd37a21c7..bdef1115dd 100644
--- a/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp
+++ b/tests/auto/network/access/qnetworkrequest/tst_qnetworkrequest.cpp
@@ -1,39 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2022 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
-#include <QtCore/QUrl>
-#if QT_CONFIG(timezone)
-# include <QtCore/QTimeZone>
-#endif
+
#include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkCookie>
+#include <QtCore/QDateTime>
+#include <QtCore/QTimeZone>
+#include <QtCore/QUrl>
+
Q_DECLARE_METATYPE(QNetworkRequest::KnownHeaders)
class tst_QNetworkRequest: public QObject
@@ -190,11 +166,11 @@ void tst_QNetworkRequest::rawHeaderList_data()
void tst_QNetworkRequest::rawHeaderList()
{
- QFETCH(QList<QByteArray>, set);
+ QFETCH(const QList<QByteArray>, set);
QFETCH(QList<QByteArray>, expected);
QNetworkRequest request;
- foreach (QByteArray header, set)
+ for (const QByteArray &header : set)
request.setRawHeader(header, "a value");
QList<QByteArray> got = request.rawHeaderList();
@@ -240,23 +216,25 @@ void tst_QNetworkRequest::setHeader_data()
<< "Thu, 01 Nov 2007 00:00:00 GMT";
QTest::newRow("Last-Modified-DateTime-UTC")
<< QNetworkRequest::LastModifiedHeader
- << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30), Qt::UTC))
+ << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30), QTimeZone::UTC))
<< true << "Last-Modified" << "Thu, 01 Nov 2007 18:08:30 GMT";
// QTBUG-80666: format dates correctly (as GMT) even if the date passed in isn't in UTC:
QTest::newRow("Last-Modified-DateTime-Local")
<< QNetworkRequest::LastModifiedHeader
- << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30), Qt::UTC).toLocalTime())
+ << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30), QTimeZone::UTC).toLocalTime())
<< true << "Last-Modified" << "Thu, 01 Nov 2007 18:08:30 GMT";
QTest::newRow("Last-Modified-DateTime-Offset")
<< QNetworkRequest::LastModifiedHeader
- << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30), Qt::UTC).toOffsetFromUtc(3600))
+ << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30),
+ QTimeZone::UTC).toOffsetFromUtc(3600))
<< true << "Last-Modified" << "Thu, 01 Nov 2007 18:08:30 GMT";
#if QT_CONFIG(timezone)
QTimeZone cet("Europe/Oslo");
if (cet.isValid()) {
QTest::newRow("Last-Modified-DateTime-CET")
<< QNetworkRequest::LastModifiedHeader
- << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30), Qt::UTC).toTimeZone(cet))
+ << QVariant(QDateTime(QDate(2007, 11, 1), QTime(18, 8, 30),
+ QTimeZone::UTC).toTimeZone(cet))
<< true << "Last-Modified" << "Thu, 01 Nov 2007 18:08:30 GMT";
}
#endif
@@ -268,7 +246,7 @@ void tst_QNetworkRequest::setHeader_data()
QTest::newRow("If-Modified-Since-DateTime") << QNetworkRequest::IfModifiedSinceHeader
<< QVariant(QDateTime(QDate(2017, 7, 01),
QTime(3, 14, 15),
- Qt::UTC))
+ QTimeZone::UTC))
<< true << "If-Modified-Since"
<< "Sat, 01 Jul 2017 03:14:15 GMT";
@@ -376,38 +354,38 @@ void tst_QNetworkRequest::rawHeaderParsing_data()
QTest::newRow("Last-Modified-RFC1123") << QNetworkRequest::LastModifiedHeader
<< QVariant(QDateTime(QDate(1994, 11, 06),
QTime(8, 49, 37),
- Qt::UTC))
+ QTimeZone::UTC))
<< true << "Last-Modified"
<< "Sun, 06 Nov 1994 08:49:37 GMT";
QTest::newRow("Last-Modified-RFC850") << QNetworkRequest::LastModifiedHeader
<< QVariant(QDateTime(QDate(1994, 11, 06),
QTime(8, 49, 37),
- Qt::UTC))
+ QTimeZone::UTC))
<< true << "Last-Modified"
<< "Sunday, 06-Nov-94 08:49:37 GMT";
QTest::newRow("Last-Modified-asctime") << QNetworkRequest::LastModifiedHeader
<< QVariant(QDateTime(QDate(1994, 11, 06),
QTime(8, 49, 37),
- Qt::UTC))
+ QTimeZone::UTC))
<< true << "Last-Modified"
<< "Sun Nov 6 08:49:37 1994";
QTest::newRow("If-Modified-Since-RFC1123") << QNetworkRequest::IfModifiedSinceHeader
<< QVariant(QDateTime(QDate(1994, 8, 06),
QTime(8, 49, 37),
- Qt::UTC))
+ QTimeZone::UTC))
<< true << "If-Modified-Since"
<< "Sun, 06 Aug 1994 08:49:37 GMT";
QTest::newRow("If-Modified-Since-RFC850") << QNetworkRequest::IfModifiedSinceHeader
<< QVariant(QDateTime(QDate(1994, 8, 06),
QTime(8, 49, 37),
- Qt::UTC))
+ QTimeZone::UTC))
<< true << "If-Modified-Since"
<< "Sunday, 06-Aug-94 08:49:37 GMT";
QTest::newRow("If-Modified-Since-asctime") << QNetworkRequest::IfModifiedSinceHeader
<< QVariant(QDateTime(QDate(1994, 8, 06),
QTime(8, 49, 37),
- Qt::UTC))
+ QTimeZone::UTC))
<< true << "If-Modified-Since"
<< "Sun Aug 6 08:49:37 1994";
diff --git a/tests/auto/network/access/qnetworkrequestfactory/CMakeLists.txt b/tests/auto/network/access/qnetworkrequestfactory/CMakeLists.txt
new file mode 100644
index 0000000000..d2112de58f
--- /dev/null
+++ b/tests/auto/network/access/qnetworkrequestfactory/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Copyright (C) 2023 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_qnetworkrequestfactory LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qnetworkrequestfactory
+ SOURCES
+ tst_qnetworkrequestfactory.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::Test
+ Qt::Network
+)
diff --git a/tests/auto/network/access/qnetworkrequestfactory/tst_qnetworkrequestfactory.cpp b/tests/auto/network/access/qnetworkrequestfactory/tst_qnetworkrequestfactory.cpp
new file mode 100644
index 0000000000..d04a7ff3ec
--- /dev/null
+++ b/tests/auto/network/access/qnetworkrequestfactory/tst_qnetworkrequestfactory.cpp
@@ -0,0 +1,423 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtTest/qtest.h>
+#include <QtNetwork/qnetworkrequestfactory.h>
+#ifndef QT_NO_SSL
+#include <QtNetwork/qsslconfiguration.h>
+#endif
+#include <QtCore/qurlquery.h>
+#include <QtCore/qurl.h>
+
+using namespace Qt::StringLiterals;
+using namespace std::chrono_literals;
+
+class tst_QNetworkRequestFactory : public QObject
+{
+ Q_OBJECT
+
+private Q_SLOTS:
+ void urlAndPath_data();
+ void urlAndPath();
+ void queryParameters();
+ void sslConfiguration();
+ void headers();
+ void bearerToken();
+ void operators();
+ void timeout();
+ void userInfo();
+ void priority();
+ void attributes();
+
+private:
+ const QUrl url1{u"http://foo.io"_s};
+ const QUrl url2{u"http://bar.io"_s};
+ const QByteArray bearerToken1{"bearertoken1"};
+ const QByteArray bearerToken2{"bearertoken2"};
+};
+
+void tst_QNetworkRequestFactory::urlAndPath_data()
+{
+ QTest::addColumn<QUrl>("baseUrl");
+ QTest::addColumn<QString>("requestPath");
+ QTest::addColumn<QUrl>("expectedRequestUrl");
+
+ QUrl base{"http://xyz.io"};
+ QUrl result{"http://xyz.io/path/to"};
+ QTest::newRow("baseUrl_nopath_noslash_1") << base << u""_s << base;
+ QTest::newRow("baseUrl_nopath_noslash_2") << base << u"/path/to"_s << result;
+ QTest::newRow("baseUrl_nopath_noslash_3") << base << u"path/to"_s << result;
+
+ base.setUrl("http://xyz.io/");
+ result.setUrl("http://xyz.io/path/to");
+ QTest::newRow("baseUrl_nopath_withslash_1") << base << u""_s << base;
+ QTest::newRow("baseUrl_nopath_withslash_2") << base << u"/path/to"_s << result;
+ QTest::newRow("baseUrl_nopath_withslash_3") << base << u"path/to"_s << result;
+
+ base.setUrl("http://xyz.io/v1");
+ result.setUrl("http://xyz.io/v1/path/to");
+ QTest::newRow("baseUrl_withpath_noslash_1") << base << u""_s << base;
+ QTest::newRow("baseUrl_withpath_noslash_2") << base << u"/path/to"_s << result;
+ QTest::newRow("baseUrl_withpath_noslash_3") << base << u"path/to"_s << result;
+
+ base.setUrl("http://xyz.io/v1/");
+ QTest::newRow("baseUrl_withpath_withslash_1") << base << u""_s << base;
+ QTest::newRow("baseUrl_withpath_withslash_2") << base << u"/path/to"_s << result;
+ QTest::newRow("baseUrl_withpath_withslash_3") << base << u"path/to"_s << result;
+
+ // Currently we keep any double '//', but not sure if there is a use case for it, or could
+ // it be corrected to a single '/'
+ base.setUrl("http://xyz.io/v1//");
+ result.setUrl("http://xyz.io/v1//path/to");
+ QTest::newRow("baseUrl_withpath_doubleslash_1") << base << u""_s << base;
+ QTest::newRow("baseUrl_withpath_doubleslash_2") << base << u"/path/to"_s << result;
+ QTest::newRow("baseUrl_withpath_doubleslash_3") << base << u"path/to"_s << result;
+}
+
+void tst_QNetworkRequestFactory::urlAndPath()
+{
+ QFETCH(QUrl, baseUrl);
+ QFETCH(QString, requestPath);
+ QFETCH(QUrl, expectedRequestUrl);
+
+ // Set with constructor
+ QNetworkRequestFactory factory1{baseUrl};
+ QCOMPARE(factory1.baseUrl(), baseUrl);
+
+ // Set with setter calls
+ QNetworkRequestFactory factory2{};
+ factory2.setBaseUrl(baseUrl);
+ QCOMPARE(factory2.baseUrl(), baseUrl);
+
+ // Request path
+ QNetworkRequest request = factory1.createRequest();
+ QCOMPARE(request.url(), baseUrl); // No path was provided for createRequest(), expect baseUrl
+ request = factory1.createRequest(requestPath);
+ QCOMPARE(request.url(), expectedRequestUrl);
+
+ // Check the request path didn't change base url
+ QCOMPARE(factory1.baseUrl(), baseUrl);
+}
+
+void tst_QNetworkRequestFactory::queryParameters()
+{
+ QNetworkRequestFactory factory({"http://example.com"});
+ const QUrlQuery query1{{"q1k", "q1v"}};
+ const QUrlQuery query2{{"q2k", "q2v"}};
+
+ // Set query parameters in createRequest() call
+ QCOMPARE(factory.createRequest(query1).url(), QUrl{"http://example.com?q1k=q1v"});
+ QCOMPARE(factory.createRequest(query2).url(), QUrl{"http://example.com?q2k=q2v"});
+
+ // Set query parameters into the factory
+ factory.setQueryParameters(query1);
+ QUrlQuery resultQuery = factory.queryParameters();
+ for (const auto &item: query1.queryItems()) {
+ QVERIFY(resultQuery.hasQueryItem(item.first));
+ QCOMPARE(resultQuery.queryItemValue(item.first), item.second);
+ }
+ QCOMPARE(factory.createRequest().url(), QUrl{"http://example.com?q1k=q1v"});
+
+ // Set query parameters into both createRequest() and factory
+ QCOMPARE(factory.createRequest(query2).url(), QUrl{"http://example.com?q2k=q2v&q1k=q1v"});
+
+ // Clear query parameters
+ factory.clearQueryParameters();
+ QVERIFY(factory.queryParameters().isEmpty());
+ QCOMPARE(factory.createRequest().url(), QUrl{"http://example.com"});
+
+ const QString pathWithQuery{"content?raw=1"};
+ // Set query parameters in per-request path
+ QCOMPARE(factory.createRequest(pathWithQuery).url(),
+ QUrl{"http://example.com/content?raw=1"});
+ // Set query parameters in per-request path and the query parameter
+ QCOMPARE(factory.createRequest(pathWithQuery, query1).url(),
+ QUrl{"http://example.com/content?q1k=q1v&raw=1"});
+ // Set query parameter in per-request path and into the factory
+ factory.setQueryParameters(query2);
+ QCOMPARE(factory.createRequest(pathWithQuery).url(),
+ QUrl{"http://example.com/content?raw=1&q2k=q2v"});
+ // Set query parameters in per-request, as additional parameters, and into the factory
+ QCOMPARE(factory.createRequest(pathWithQuery, query1).url(),
+ QUrl{"http://example.com/content?q1k=q1v&raw=1&q2k=q2v"});
+
+ // Test that other than path and query items as part of path are ignored
+ factory.setQueryParameters(query1);
+ QRegularExpression re("The provided path*");
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, re);
+ QCOMPARE(factory.createRequest("https://example2.com").url(), QUrl{"http://example.com?q1k=q1v"});
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, re);
+ QCOMPARE(factory.createRequest("https://example2.com?q3k=q3v").url(),
+ QUrl{"http://example.com?q3k=q3v&q1k=q1v"});
+}
+
+void tst_QNetworkRequestFactory::sslConfiguration()
+{
+#ifdef QT_NO_SSL
+ QSKIP("Skipping SSL tests, not supported by build");
+#else
+ // Two initially equal factories
+ QNetworkRequestFactory factory1{url1};
+ QNetworkRequestFactory factory2{url1};
+
+ // Make two differing SSL configurations (for this test it's irrelevant how they differ)
+ QSslConfiguration config1;
+ config1.setProtocol(QSsl::TlsV1_2);
+ QSslConfiguration config2;
+ config2.setProtocol(QSsl::DtlsV1_2);
+
+ // Set configuration and verify that the same config is returned
+ factory1.setSslConfiguration(config1);
+ QCOMPARE(factory1.sslConfiguration(), config1);
+ factory2.setSslConfiguration(config2);
+ QCOMPARE(factory2.sslConfiguration(), config2);
+
+ // Verify requests are set with appropriate SSL configs
+ QNetworkRequest request1 = factory1.createRequest();
+ QCOMPARE(request1.sslConfiguration(), config1);
+ QNetworkRequest request2 = factory2.createRequest();
+ QCOMPARE(request2.sslConfiguration(), config2);
+#endif
+}
+
+void tst_QNetworkRequestFactory::headers()
+{
+ const QByteArray name1{"headername1"};
+ const QByteArray name2{"headername2"};
+ const QByteArray value1{"headervalue1"};
+ const QByteArray value2{"headervalue2"};
+ const QByteArray value3{"headervalue3"};
+
+ QNetworkRequestFactory factory{url1};
+ // Initial state when no headers are set
+ QVERIFY(factory.commonHeaders().isEmpty());
+ QVERIFY(factory.commonHeaders().values(name1).isEmpty());
+ QVERIFY(!factory.commonHeaders().contains(name1));
+
+ // Set headers
+ QHttpHeaders h1;
+ h1.append(name1, value1);
+ factory.setCommonHeaders(h1);
+ QVERIFY(factory.commonHeaders().contains(name1));
+ QCOMPARE(factory.commonHeaders().combinedValue(name1), value1);
+ QCOMPARE(factory.commonHeaders().size(), 1);
+ QVERIFY(factory.commonHeaders().values("nonexistent").isEmpty());
+ QNetworkRequest request = factory.createRequest();
+ QVERIFY(request.hasRawHeader(name1));
+ QCOMPARE(request.rawHeader(name1), value1);
+
+ // Check that empty header does not match
+ QVERIFY(!factory.commonHeaders().contains(""_ba));
+ QVERIFY(factory.commonHeaders().values(""_ba).isEmpty());
+
+ // Clear headers
+ factory.clearCommonHeaders();
+ QVERIFY(factory.commonHeaders().isEmpty());
+ request = factory.createRequest();
+ QVERIFY(!request.hasRawHeader(name1));
+
+ // Set headers with more entries
+ h1.clear();
+ h1.append(name1, value1);
+ h1.append(name2, value2);
+ factory.setCommonHeaders(h1);
+ QVERIFY(factory.commonHeaders().contains(name1));
+ QVERIFY(factory.commonHeaders().contains(name2));
+ QCOMPARE(factory.commonHeaders().combinedValue(name1), value1);
+ QCOMPARE(factory.commonHeaders().combinedValue(name2), value2);
+ QCOMPARE(factory.commonHeaders().size(), 2);
+ request = factory.createRequest();
+ QVERIFY(request.hasRawHeader(name1));
+ QVERIFY(request.hasRawHeader(name2));
+ QCOMPARE(request.rawHeader(name1), value1);
+ QCOMPARE(request.rawHeader(name2), value2);
+ // Append more values to pre-existing header name2
+ h1.clear();
+ h1.append(name1, value1);
+ h1.append(name1, value2);
+ h1.append(name1, value3);
+ factory.setCommonHeaders(h1);
+ QVERIFY(factory.commonHeaders().contains(name1));
+ QCOMPARE(factory.commonHeaders().combinedValue(name1), value1 + ", " + value2 + ", " + value3);
+ request = factory.createRequest();
+ QVERIFY(request.hasRawHeader(name1));
+ QCOMPARE(request.rawHeader(name1), value1 + ", " + value2 + ", " + value3);
+}
+
+void tst_QNetworkRequestFactory::bearerToken()
+{
+ const auto authHeader = "Authorization"_ba;
+ QNetworkRequestFactory factory{url1};
+ QVERIFY(factory.bearerToken().isEmpty());
+
+ factory.setBearerToken(bearerToken1);
+ QCOMPARE(factory.bearerToken(), bearerToken1);
+ QNetworkRequest request = factory.createRequest();
+ QVERIFY(request.hasRawHeader(authHeader));
+ QCOMPARE(request.rawHeader(authHeader), "Bearer "_ba + bearerToken1);
+
+ // Verify that bearerToken is not in debug output
+ QString debugOutput;
+ QDebug debug(&debugOutput);
+ debug << factory;
+ QVERIFY(debugOutput.contains("bearerToken = (is set)"));
+ QVERIFY(!debugOutput.contains(bearerToken1));
+
+ factory.setBearerToken(bearerToken2);
+ QCOMPARE(factory.bearerToken(), bearerToken2);
+ request = factory.createRequest();
+ QVERIFY(request.hasRawHeader(authHeader));
+ QCOMPARE(request.rawHeader(authHeader), "Bearer "_ba + bearerToken2);
+
+ // Set authorization header manually
+ const auto value = "headervalue"_ba;
+ QHttpHeaders h1;
+ h1.append(authHeader, value);
+ factory.setCommonHeaders(h1);
+ request = factory.createRequest();
+ QVERIFY(request.hasRawHeader(authHeader));
+ // bearerToken has precedence over manually set header
+ QCOMPARE(request.rawHeader(authHeader), "Bearer "_ba + bearerToken2);
+ // clear bearer token, the manually set header is now used
+ factory.clearBearerToken();
+ request = factory.createRequest();
+ QVERIFY(request.hasRawHeader(authHeader));
+ QCOMPARE(request.rawHeader(authHeader), value);
+}
+
+void tst_QNetworkRequestFactory::operators()
+{
+ QNetworkRequestFactory factory1(url1);
+
+ // Copy ctor
+ QNetworkRequestFactory factory2(factory1);
+ QCOMPARE(factory2.baseUrl(), factory1.baseUrl());
+
+ // Copy assignment
+ QNetworkRequestFactory factory3;
+ factory3 = factory2;
+ QCOMPARE(factory3.baseUrl(), factory2.baseUrl());
+
+ // Move assignment
+ QNetworkRequestFactory factory4;
+ factory4 = std::move(factory3);
+ QCOMPARE(factory4.baseUrl(), factory2.baseUrl());
+
+ // Verify implicit sharing
+ factory1.setBaseUrl(url2);
+ QCOMPARE(factory1.baseUrl(), url2); // changed
+ QCOMPARE(factory2.baseUrl(), url1); // remains
+
+ // Move ctor
+ QNetworkRequestFactory factory5{std::move(factory4)};
+ QCOMPARE(factory5.baseUrl(), factory2.baseUrl()); // the moved factory4 originates from factory2
+ QCOMPARE(factory5.baseUrl(), url1);
+}
+
+void tst_QNetworkRequestFactory::timeout()
+{
+ constexpr auto defaultTimeout = 0ms;
+ constexpr auto timeout = 150ms;
+
+ QNetworkRequestFactory factory;
+ QNetworkRequest request = factory.createRequest();
+ QCOMPARE(factory.transferTimeout(), defaultTimeout);
+ QCOMPARE(request.transferTimeoutAsDuration(), defaultTimeout);
+
+ factory.setTransferTimeout(timeout);
+ request = factory.createRequest();
+ QCOMPARE(factory.transferTimeout(), timeout);
+ QCOMPARE(request.transferTimeoutAsDuration(), timeout);
+}
+
+void tst_QNetworkRequestFactory::userInfo()
+{
+ QNetworkRequestFactory factory;
+ QVERIFY(factory.userName().isEmpty());
+ QVERIFY(factory.password().isEmpty());
+
+ const auto uname = u"a_username"_s;
+ const auto password = u"a_password"_s;
+ factory.setUserName(uname);
+ QCOMPARE(factory.userName(), uname);
+ factory.setPassword(password);
+ QCOMPARE(factory.password(), password);
+
+ // Verify that debug output does not contain password
+ QString debugOutput;
+ QDebug debug(&debugOutput);
+ debug << factory;
+ QVERIFY(debugOutput.contains("password = (is set)"));
+ QVERIFY(!debugOutput.contains(password));
+
+ factory.clearUserName();
+ factory.clearPassword();
+ QVERIFY(factory.userName().isEmpty());
+ QVERIFY(factory.password().isEmpty());
+}
+
+void tst_QNetworkRequestFactory::priority()
+{
+ QNetworkRequestFactory factory(u"http://example.com"_s);
+ QCOMPARE(factory.priority(), QNetworkRequest::NormalPriority);
+ auto request = factory.createRequest("/index.html");
+ QCOMPARE(request.priority(), QNetworkRequest::NormalPriority);
+
+ factory.setPriority(QNetworkRequest::HighPriority);
+ QCOMPARE(factory.priority(), QNetworkRequest::HighPriority);
+ request = factory.createRequest("/index.html");
+ QCOMPARE(request.priority(), QNetworkRequest::HighPriority);
+}
+
+void tst_QNetworkRequestFactory::attributes()
+{
+ const auto attribute1 = QNetworkRequest::Attribute::BackgroundRequestAttribute;
+ const auto attribute2 = QNetworkRequest::User;
+ QNetworkRequestFactory factory;
+ QNetworkRequest request;
+
+ // Empty factory
+ QVERIFY(!factory.attribute(attribute1).isValid());
+ request = factory.createRequest();
+ QVERIFY(!request.attribute(attribute1).isValid());
+
+ // (Re-)set and clear individual attribute
+ factory.setAttribute(attribute1, true);
+ QVERIFY(factory.attribute(attribute1).isValid());
+ QCOMPARE(factory.attribute(attribute1).toBool(), true);
+ request = factory.createRequest();
+ QVERIFY(request.attribute(attribute1).isValid());
+ QCOMPARE(request.attribute(attribute1).toBool(), true);
+ // Replace previous value
+ factory.setAttribute(attribute1, false);
+ QVERIFY(factory.attribute(attribute1).isValid());
+ QCOMPARE(factory.attribute(attribute1).toBool(), false);
+ request = factory.createRequest();
+ QVERIFY(request.attribute(attribute1).isValid());
+ QCOMPARE(request.attribute(attribute1).toBool(), false);
+ // Clear individual attribute
+ factory.clearAttribute(attribute1);
+ QVERIFY(!factory.attribute(attribute1).isValid());
+
+ // Getter default value
+ QCOMPARE(factory.attribute(attribute2, 111).toInt(), 111); // default value returned
+ factory.setAttribute(attribute2, 222);
+ QCOMPARE(factory.attribute(attribute2, 111).toInt(), 222); // actual value returned
+ factory.clearAttribute(attribute2);
+ QCOMPARE(factory.attribute(attribute2, 111).toInt(), 111); // default value returned
+
+ // Clear attributes
+ factory.setAttribute(attribute1, true);
+ factory.setAttribute(attribute2, 333);
+ QVERIFY(factory.attribute(attribute1).isValid());
+ QVERIFY(factory.attribute(attribute2).isValid());
+ factory.clearAttributes();
+ QVERIFY(!factory.attribute(attribute1).isValid());
+ QVERIFY(!factory.attribute(attribute2).isValid());
+ request = factory.createRequest();
+ QVERIFY(!request.attribute(attribute1).isValid());
+ QVERIFY(!request.attribute(attribute2).isValid());
+}
+
+QTEST_MAIN(tst_QNetworkRequestFactory)
+#include "tst_qnetworkrequestfactory.moc"
diff --git a/tests/auto/network/access/qrestaccessmanager/CMakeLists.txt b/tests/auto/network/access/qrestaccessmanager/CMakeLists.txt
new file mode 100644
index 0000000000..614248be28
--- /dev/null
+++ b/tests/auto/network/access/qrestaccessmanager/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Copyright (C) 2023 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_qrestaccessmanager LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qrestaccessmanager
+ SOURCES
+ tst_qrestaccessmanager.cpp
+ httptestserver.cpp httptestserver_p.h
+ LIBRARIES
+ Qt::Network
+ Qt::CorePrivate
+)
diff --git a/tests/auto/network/access/qrestaccessmanager/httptestserver.cpp b/tests/auto/network/access/qrestaccessmanager/httptestserver.cpp
new file mode 100644
index 0000000000..25869eb46b
--- /dev/null
+++ b/tests/auto/network/access/qrestaccessmanager/httptestserver.cpp
@@ -0,0 +1,268 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "httptestserver_p.h"
+
+#include <QtNetwork/qtcpsocket.h>
+
+#include <QtCore/qcoreapplication.h>
+
+#include <private/qlocale_p.h>
+
+using namespace Qt::StringLiterals;
+
+static constexpr char CRLF[] = "\r\n";
+
+HttpTestServer::HttpTestServer(QObject *parent) : QTcpServer(parent)
+{
+ QObject::connect(this, &QTcpServer::newConnection, this, &HttpTestServer::handleConnected);
+ const auto ok = listen(QHostAddress::LocalHost);
+ Q_ASSERT(ok);
+};
+
+HttpTestServer::~HttpTestServer()
+{
+ if (isListening())
+ close();
+}
+
+QUrl HttpTestServer::url()
+{
+ return QUrl(u"http://127.0.0.1:%1"_s.arg(serverPort()));
+}
+
+void HttpTestServer::handleConnected()
+{
+ Q_ASSERT(!m_socket); // No socket must exist previously, this is a single-connection server
+ m_socket = nextPendingConnection();
+ Q_ASSERT(m_socket);
+ QObject::connect(m_socket, &QTcpSocket::readyRead,
+ this, &HttpTestServer::handleDataAvailable);
+}
+
+void HttpTestServer::handleDataAvailable()
+{
+ Q_ASSERT(m_socket);
+ bool ok = true;
+
+ // Parse the incoming request data into the HttpData object
+ while (m_socket->bytesAvailable()) {
+ if (state == State::ReadingMethod && !(ok = readMethod(m_socket)))
+ qWarning("Invalid Method");
+ if (ok && state == State::ReadingUrl && !(ok = readUrl(m_socket)))
+ qWarning("Invalid URL");
+ if (ok && state == State::ReadingStatus && !(ok = readStatus(m_socket)))
+ qWarning("Invalid Status");
+ if (ok && state == State::ReadingHeader && !(ok = readHeaders(m_socket)))
+ qWarning("Invalid Header");
+ if (ok && state == State::ReadingBody && !(ok = readBody(m_socket)))
+ qWarning("Invalid Body");
+ } // while bytes available
+
+ Q_ASSERT(ok);
+ Q_ASSERT(m_handler);
+ Q_ASSERT(state == State::AllDone);
+
+ if (auto values = m_request.headers.values(
+ QHttpHeaders::WellKnownHeader::Host); !values.empty()) {
+ const auto parts = values.first().split(':');
+ m_request.url.setHost(parts.at(0));
+ if (parts.size() == 2)
+ m_request.url.setPort(parts.at(1).toUInt());
+ }
+ HttpData response;
+ ResponseControl control;
+ // Inform the testcase about request and ask for response data
+ m_handler(m_request, response, control);
+
+ QByteArray responseMessage;
+ responseMessage += "HTTP/1.1 ";
+ responseMessage += QByteArray::number(response.status);
+ responseMessage += CRLF;
+ // Insert headers if any
+ for (const auto &[name,value] : response.headers.toListOfPairs()) {
+ responseMessage += name;
+ responseMessage += ": ";
+ responseMessage += value;
+ responseMessage += CRLF;
+ }
+ responseMessage += CRLF;
+ /*
+ qDebug() << "HTTPTestServer received request"
+ << "\nMethod:" << m_request.method
+ << "\nHeaders:" << m_request.headers
+ << "\nBody:" << m_request.body;
+ */
+ if (control.respond) {
+ if (control.responseChunkSize <= 0) {
+ responseMessage += response.body;
+ // qDebug() << "HTTPTestServer response:" << responseMessage;
+ m_socket->write(responseMessage);
+ } else {
+ // Respond in chunks, first write the headers
+ // qDebug() << "HTTPTestServer response:" << responseMessage;
+ m_socket->write(responseMessage);
+ // Then write bodydata in chunks, while allowing the testcase to process as well
+ QByteArray chunk;
+ while (!response.body.isEmpty()) {
+ chunk = response.body.left(control.responseChunkSize);
+ response.body.remove(0, control.responseChunkSize);
+ // qDebug() << "SERVER writing chunk" << chunk;
+ m_socket->write(chunk);
+ m_socket->flush();
+ m_socket->waitForBytesWritten();
+ // Process events until testcase indicates it's ready for next chunk.
+ // This way we can control the bytes the testcase gets in each chunk
+ control.readyForNextChunk = false;
+ while (!control.readyForNextChunk)
+ QCoreApplication::processEvents();
+ }
+ }
+ }
+ m_socket->disconnectFromHost();
+ m_request = {};
+ m_socket = nullptr; // deleted by QTcpServer during destruction
+ state = State::ReadingMethod;
+ fragment.clear();
+}
+
+bool HttpTestServer::readMethod(QTcpSocket *socket)
+{
+ bool finished = false;
+ while (socket->bytesAvailable() && !finished) {
+ const auto c = socket->read(1).at(0);
+ if (ascii_isspace(c))
+ finished = true;
+ else if (std::isupper(c) && fragment.size() < 8)
+ fragment += c;
+ else
+ return false;
+ }
+ if (finished) {
+ if (fragment == "HEAD")
+ method = Method::Head;
+ else if (fragment == "GET")
+ method = Method::Get;
+ else if (fragment == "PUT")
+ method = Method::Put;
+ else if (fragment == "PATCH")
+ method = Method::Patch;
+ else if (fragment == "POST")
+ method = Method::Post;
+ else if (fragment == "DELETE")
+ method = Method::Delete;
+ else if (fragment == "FOOBAR") // used by custom verb/method tests
+ method = Method::Custom;
+ else
+ qWarning("Invalid operation %s", fragment.data());
+
+ state = State::ReadingUrl;
+ m_request.method = fragment;
+ fragment.clear();
+
+ return method != Method::Unknown;
+ }
+ return true;
+}
+
+bool HttpTestServer::readUrl(QTcpSocket *socket)
+{
+ bool finished = false;
+ while (socket->bytesAvailable() && !finished) {
+ const auto c = socket->read(1).at(0);
+ if (std::isspace(c))
+ finished = true;
+ else
+ fragment += c;
+ }
+ if (finished) {
+ if (!fragment.startsWith('/')) {
+ qWarning("Invalid URL path %s", fragment.constData());
+ return false;
+ }
+ m_request.url = QStringLiteral("http://127.0.0.1:") + QString::number(m_request.port) +
+ QString::fromUtf8(fragment);
+ state = State::ReadingStatus;
+ if (!m_request.url.isValid()) {
+ qWarning("Invalid URL %s", fragment.constData());
+ return false;
+ }
+ fragment.clear();
+ }
+ return true;
+}
+
+bool HttpTestServer::readStatus(QTcpSocket *socket)
+{
+ bool finished = false;
+ while (socket->bytesAvailable() && !finished) {
+ fragment += socket->read(1);
+ if (fragment.endsWith(CRLF)) {
+ finished = true;
+ fragment.resize(fragment.size() - 2);
+ }
+ }
+ if (finished) {
+ if (!std::isdigit(fragment.at(fragment.size() - 3)) ||
+ fragment.at(fragment.size() - 2) != '.' ||
+ !std::isdigit(fragment.at(fragment.size() - 1))) {
+ qWarning("Invalid version");
+ return false;
+ }
+ m_request.version = std::pair(fragment.at(fragment.size() - 3) - '0',
+ fragment.at(fragment.size() - 1) - '0');
+ state = State::ReadingHeader;
+ fragment.clear();
+ }
+ return true;
+}
+
+bool HttpTestServer::readHeaders(QTcpSocket *socket)
+{
+ while (socket->bytesAvailable()) {
+ fragment += socket->read(1);
+ if (fragment.endsWith(CRLF)) {
+ if (fragment == CRLF) {
+ state = State::ReadingBody;
+ fragment.clear();
+ return true;
+ } else {
+ fragment.chop(2);
+ const int index = fragment.indexOf(':');
+ if (index == -1)
+ return false;
+
+ QByteArray key = fragment.sliced(0, index).trimmed();
+ QByteArray value = fragment.sliced(index + 1).trimmed();
+ m_request.headers.append(key, value);
+ fragment.clear();
+ }
+ }
+ }
+ return true;
+}
+
+bool HttpTestServer::readBody(QTcpSocket *socket)
+{
+ qint64 bytesLeft = 0;
+ if (auto values = m_request.headers.values(
+ QHttpHeaders::WellKnownHeader::ContentLength); !values.empty()) {
+ bool conversionResult;
+ bytesLeft = values.first().toInt(&conversionResult);
+ if (!conversionResult)
+ return false;
+ fragment.resize(bytesLeft);
+ }
+ while (bytesLeft) {
+ qint64 got = socket->read(&fragment.data()[fragment.size() - bytesLeft], bytesLeft);
+ if (got < 0)
+ return false; // error
+ bytesLeft -= got;
+ if (bytesLeft)
+ qApp->processEvents();
+ }
+ fragment.swap(m_request.body);
+ state = State::AllDone;
+ return true;
+}
+
diff --git a/tests/auto/network/access/qrestaccessmanager/httptestserver_p.h b/tests/auto/network/access/qrestaccessmanager/httptestserver_p.h
new file mode 100644
index 0000000000..0a94b2c8a6
--- /dev/null
+++ b/tests/auto/network/access/qrestaccessmanager/httptestserver_p.h
@@ -0,0 +1,90 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef QRESTACCESSSMANAGER_HTTPTESTSERVER_P_H
+#define QRESTACCESSSMANAGER_HTTPTESTSERVER_P_H
+
+#include <QtNetwork/qtcpserver.h>
+#include <QtNetwork/qhttpheaders.h>
+
+#include <QtCore/qmap.h>
+#include <QtCore/qurl.h>
+
+#include <functional>
+
+// This struct is used for parsing the incoming network request data into, as well
+// as getting the response data from the testcase
+struct HttpData {
+ QUrl url;
+ int status = 0;
+ QByteArray body;
+ QByteArray method;
+ quint16 port = 0;
+ QPair<quint8, quint8> version;
+ QHttpHeaders headers;
+};
+
+struct ResponseControl
+{
+ bool respond = true;
+ qsizetype responseChunkSize = -1;
+ bool readyForNextChunk = true;
+};
+
+// Simple HTTP server. Currently supports only one concurrent connection
+class HttpTestServer : public QTcpServer
+{
+ Q_OBJECT
+
+public:
+ explicit HttpTestServer(QObject *parent = nullptr);
+ ~HttpTestServer() override;
+
+ // Returns this server's URL for the testcase to send requests to
+ QUrl url();
+
+ enum class State {
+ ReadingMethod,
+ ReadingUrl,
+ ReadingStatus,
+ ReadingHeader,
+ ReadingBody,
+ AllDone
+ } state = State::ReadingMethod;
+
+ enum class Method {
+ Unknown,
+ Head,
+ Get,
+ Put,
+ Patch,
+ Post,
+ Delete,
+ Custom,
+ } method = Method::Unknown;
+
+ // Parsing helpers for incoming data => HttpData
+ bool readMethod(QTcpSocket *socket);
+ bool readUrl(QTcpSocket *socket);
+ bool readStatus(QTcpSocket *socket);
+ bool readHeaders(QTcpSocket *socket);
+ bool readBody(QTcpSocket *socket);
+ // Parsing-time buffer in case data is received a small chunk at a time (readyRead())
+ QByteArray fragment;
+
+ // Settable callback for testcase. Gives the received request data, and takes in response data
+ using Handler = std::function<void(const HttpData &request, HttpData &response,
+ ResponseControl &control)>;
+ void setHandler(Handler handler) { m_handler = std::move(handler); }
+
+private slots:
+ void handleConnected();
+ void handleDataAvailable();
+
+private:
+ QTcpSocket *m_socket = nullptr;
+ HttpData m_request;
+ Handler m_handler = nullptr;
+};
+
+#endif // QRESTACCESSSMANAGER_HTTPTESTSERVER_P_H
diff --git a/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp b/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp
new file mode 100644
index 0000000000..602bffd9c1
--- /dev/null
+++ b/tests/auto/network/access/qrestaccessmanager/tst_qrestaccessmanager.cpp
@@ -0,0 +1,844 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "httptestserver_p.h"
+
+#include <QtNetwork/qhttpmultipart.h>
+#include <QtNetwork/qrestaccessmanager.h>
+#include <QtNetwork/qauthenticator.h>
+#include <QtNetwork/qnetworkreply.h>
+#include <QtNetwork/qnetworkrequestfactory.h>
+#include <QtNetwork/qrestreply.h>
+
+#include <QTest>
+#include <QtTest/qsignalspy.h>
+
+#include <QtCore/qbuffer.h>
+#include <QtCore/qjsonobject.h>
+#include <QtCore/qjsondocument.h>
+#include <QtCore/qjsonarray.h>
+#include <QtCore/qstringconverter.h>
+
+using namespace Qt::StringLiterals;
+using namespace std::chrono_literals;
+
+using Header = QHttpHeaders::WellKnownHeader;
+
+class tst_QRestAccessManager : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initialization();
+ void destruction();
+ void callbacks();
+ void requests();
+ void reply();
+ void errors();
+ void body();
+ void json();
+ void text();
+ void textStreaming();
+
+private:
+ void memberHandler(QRestReply &reply);
+
+ friend class Transient;
+ QList<QNetworkReply*> m_expectedReplies;
+ QList<QNetworkReply*> m_actualReplies;
+};
+
+void tst_QRestAccessManager::initialization()
+{
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, "QRestAccessManager: QNetworkAccesManager is nullptr");
+ QRestAccessManager manager1(nullptr);
+ QVERIFY(!manager1.networkAccessManager());
+
+ QNetworkAccessManager qnam;
+ QRestAccessManager manager2(&qnam);
+ QVERIFY(manager2.networkAccessManager());
+}
+
+void tst_QRestAccessManager::reply()
+{
+ QNetworkAccessManager qnam;
+
+ QNetworkReply *nr = qnam.get(QNetworkRequest(QUrl{"someurl"}));
+ QRestReply rr1(nr);
+ QCOMPARE(rr1.networkReply(), nr);
+
+ // Move-construct
+ QRestReply rr2(std::move(rr1));
+ QCOMPARE(rr2.networkReply(), nr);
+
+ // Move-assign
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, "QRestReply: QNetworkReply is nullptr");
+ QRestReply rr3(nullptr);
+ rr3 = std::move(rr2);
+ QCOMPARE(rr3.networkReply(), nr);
+}
+
+#define VERIFY_REPLY_OK(METHOD) \
+{ \
+ QTRY_VERIFY(networkReply); \
+ QRestReply restReply(networkReply); \
+ QCOMPARE(serverSideRequest.method, METHOD); \
+ QVERIFY(restReply.isSuccess()); \
+ QVERIFY(!restReply.hasError()); \
+ networkReply->deleteLater(); \
+ networkReply = nullptr; \
+}
+
+void tst_QRestAccessManager::requests()
+{
+ // A basic test for each HTTP method against the local testserver.
+ QNetworkAccessManager qnam;
+ QRestAccessManager manager(&qnam);
+ HttpTestServer server;
+ QTRY_VERIFY(server.isListening());
+ QNetworkRequest request(server.url());
+ request.setRawHeader("Content-Type"_ba, "text/plain"); // To silence missing content-type warn
+ QNetworkReply *networkReply = nullptr;
+ std::unique_ptr<QHttpMultiPart> multiPart;
+ QHttpPart part;
+ part.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\"text\""));
+ part.setBody("multipart_text");
+ QByteArray ioDeviceData{"io_device_data"_ba};
+ QBuffer bufferIoDevice(&ioDeviceData);
+
+ HttpData serverSideRequest; // The request data the server received
+ HttpData serverSideResponse; // The response data the server responds with
+ serverSideResponse.status = 200;
+ server.setHandler([&](const HttpData &request, HttpData &response, ResponseControl&) {
+ serverSideRequest = request;
+ response = serverSideResponse;
+
+ });
+ auto callback = [&](QRestReply &reply) { networkReply = reply.networkReply(); };
+ const QByteArray byteArrayData{"some_data"_ba};
+ const QJsonObject jsonObjectData{{"key1", "value1"}, {"key2", "value2"}};
+ const QJsonArray jsonArrayData{{"arrvalue1", "arrvalue2", QJsonObject{{"key1", "value1"}}}};
+ const QVariantMap variantMapData{{"key1", "value1"}, {"key2", "value2"}};
+ const QByteArray methodDELETE{"DELETE"_ba};
+ const QByteArray methodHEAD{"HEAD"_ba};
+ const QByteArray methodPOST{"POST"_ba};
+ const QByteArray methodGET{"GET"_ba};
+ const QByteArray methodPUT{"PUT"_ba};
+ const QByteArray methodPATCH{"PATCH"_ba};
+ const QByteArray methodCUSTOM{"FOOBAR"_ba};
+
+ // DELETE
+ manager.deleteResource(request, this, callback);
+ VERIFY_REPLY_OK(methodDELETE);
+ QCOMPARE(serverSideRequest.body, ""_ba);
+
+ // HEAD
+ manager.head(request, this, callback);
+ VERIFY_REPLY_OK(methodHEAD);
+ QCOMPARE(serverSideRequest.body, ""_ba);
+
+ // GET
+ manager.get(request, this, callback);
+ VERIFY_REPLY_OK(methodGET);
+ QCOMPARE(serverSideRequest.body, ""_ba);
+
+ manager.get(request, byteArrayData, this, callback);
+ VERIFY_REPLY_OK(methodGET);
+ QCOMPARE(serverSideRequest.body, byteArrayData);
+
+ manager.get(request, QJsonDocument{jsonObjectData}, this, callback);
+ VERIFY_REPLY_OK(methodGET);
+ QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).object(), jsonObjectData);
+
+ manager.get(request, &bufferIoDevice, this, callback);
+ VERIFY_REPLY_OK(methodGET);
+ QCOMPARE(serverSideRequest.body, ioDeviceData);
+
+ // CUSTOM
+ manager.sendCustomRequest(request, methodCUSTOM, byteArrayData, this, callback);
+ VERIFY_REPLY_OK(methodCUSTOM);
+ QCOMPARE(serverSideRequest.body, byteArrayData);
+
+ manager.sendCustomRequest(request, methodCUSTOM, &bufferIoDevice, this, callback);
+ VERIFY_REPLY_OK(methodCUSTOM);
+ QCOMPARE(serverSideRequest.body, ioDeviceData);
+
+ multiPart.reset(new QHttpMultiPart(QHttpMultiPart::FormDataType));
+ multiPart->append(part);
+ manager.sendCustomRequest(request, methodCUSTOM, multiPart.get(), this, callback);
+ VERIFY_REPLY_OK(methodCUSTOM);
+ QVERIFY(serverSideRequest.body.contains("--boundary"_ba));
+ QVERIFY(serverSideRequest.body.contains("multipart_text"_ba));
+
+ // POST
+ manager.post(request, byteArrayData, this, callback);
+ VERIFY_REPLY_OK(methodPOST);
+ QCOMPARE(serverSideRequest.body, byteArrayData);
+
+ manager.post(request, QJsonDocument{jsonObjectData}, this, callback);
+ VERIFY_REPLY_OK(methodPOST);
+ QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).object(), jsonObjectData);
+
+ manager.post(request, QJsonDocument{jsonArrayData}, this, callback);
+ VERIFY_REPLY_OK(methodPOST);
+ QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).array(), jsonArrayData);
+
+ manager.post(request, variantMapData, this, callback);
+ VERIFY_REPLY_OK(methodPOST);
+ QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).object(), jsonObjectData);
+
+ multiPart = std::make_unique<QHttpMultiPart>(QHttpMultiPart::FormDataType);
+ multiPart->append(part);
+ manager.post(request, multiPart.get(), this, callback);
+ VERIFY_REPLY_OK(methodPOST);
+ QVERIFY(serverSideRequest.body.contains("--boundary"_ba));
+ QVERIFY(serverSideRequest.body.contains("multipart_text"_ba));
+
+ manager.post(request, &bufferIoDevice, this, callback);
+ VERIFY_REPLY_OK(methodPOST);
+ QCOMPARE(serverSideRequest.body, ioDeviceData);
+
+ // PUT
+ manager.put(request, byteArrayData, this, callback);
+ VERIFY_REPLY_OK(methodPUT);
+ QCOMPARE(serverSideRequest.body, byteArrayData);
+
+ manager.put(request, QJsonDocument{jsonObjectData}, this, callback);
+ VERIFY_REPLY_OK(methodPUT);
+ QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).object(), jsonObjectData);
+
+ manager.put(request, QJsonDocument{jsonArrayData}, this, callback);
+ VERIFY_REPLY_OK(methodPUT);
+ QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).array(), jsonArrayData);
+
+ manager.put(request, variantMapData, this, callback);
+ VERIFY_REPLY_OK(methodPUT);
+ QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).object(), jsonObjectData);
+
+ multiPart = std::make_unique<QHttpMultiPart>(QHttpMultiPart::FormDataType);
+ multiPart->append(part);
+ manager.put(request, multiPart.get(), this, callback);
+ VERIFY_REPLY_OK(methodPUT);
+ QVERIFY(serverSideRequest.body.contains("--boundary"_ba));
+ QVERIFY(serverSideRequest.body.contains("multipart_text"_ba));
+
+ manager.put(request, &bufferIoDevice, this, callback);
+ VERIFY_REPLY_OK(methodPUT);
+ QCOMPARE(serverSideRequest.body, ioDeviceData);
+
+ // PATCH
+ manager.patch(request, byteArrayData, this, callback);
+ VERIFY_REPLY_OK(methodPATCH);
+ QCOMPARE(serverSideRequest.body, byteArrayData);
+
+ manager.patch(request, QJsonDocument{jsonObjectData}, this, callback);
+ VERIFY_REPLY_OK(methodPATCH);
+ QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).object(), jsonObjectData);
+
+ manager.patch(request, QJsonDocument{jsonArrayData}, this, callback);
+ VERIFY_REPLY_OK(methodPATCH);
+ QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).array(), jsonArrayData);
+
+ manager.patch(request, variantMapData, this, callback);
+ VERIFY_REPLY_OK(methodPATCH);
+ QCOMPARE(QJsonDocument::fromJson(serverSideRequest.body).object(), jsonObjectData);
+
+ manager.patch(request, &bufferIoDevice, this, callback);
+ VERIFY_REPLY_OK(methodPATCH);
+ QCOMPARE(serverSideRequest.body, ioDeviceData);
+
+ //These must NOT compile
+ //manager.get(request, [](){}); // callback without context object
+ //manager.get(request, ""_ba, [](){}); // callback without context object
+ //manager.get(request, QString()); // wrong datatype
+ //manager.get(request, 123); // wrong datatype
+ //manager.post(request, QString()); // wrong datatype
+ //manager.put(request, 123); // wrong datatype
+ //manager.post(request); // data is required
+ //manager.put(request, QString()); // wrong datatype
+ //manager.put(request); // data is required
+ //manager.patch(request, 123); // wrong datatype
+ //manager.patch(request, QString()); // wrong datatype
+ //manager.patch(request); // data is required
+ //manager.deleteResource(request, "f"_ba); // data not allowed
+ //manager.head(request, "f"_ba); // data not allowed
+ //manager.post(request, ""_ba, this, [](int param){}); // Wrong callback signature
+ //manager.get(request, this, [](int param){}); // Wrong callback signature
+ //manager.sendCustomRequest(request, this, [](){}); // No verb && no data
+ //manager.sendCustomRequest(request, "FOOBAR", this, [](){}); // No verb || no data
+}
+
+void tst_QRestAccessManager::memberHandler(QRestReply &reply)
+{
+ m_actualReplies.append(reply.networkReply());
+}
+
+// Class that is destroyed during an active request.
+// Used to test that the callbacks won't be called in these cases
+class Transient : public QObject
+{
+ Q_OBJECT
+public:
+ explicit Transient(tst_QRestAccessManager *test) : QObject(test), m_test(test) {}
+
+ void memberHandler(QRestReply &reply)
+ {
+ m_test->m_actualReplies.append(reply.networkReply());
+ }
+
+private:
+ tst_QRestAccessManager *m_test = nullptr;
+};
+
+template <typename Functor, std::enable_if_t<
+ QtPrivate::AreFunctionsCompatible<void(*)(QRestReply&), Functor>::value, bool> = true>
+inline constexpr bool isCompatibleCallback(Functor &&) { return true; }
+
+template <typename Functor, std::enable_if_t<
+ !QtPrivate::AreFunctionsCompatible<void(*)(QRestReply&), Functor>::value, bool> = true,
+ typename = void>
+inline constexpr bool isCompatibleCallback(Functor &&) { return false; }
+
+void tst_QRestAccessManager::callbacks()
+{
+ QNetworkAccessManager qnam;
+ QRestAccessManager manager(&qnam);
+
+ QNetworkRequest request{u"i_dont_exist"_s}; // Will result in ProtocolUnknown error
+
+ auto lambdaHandler = [this](QRestReply &reply) { m_actualReplies.append(reply.networkReply()); };
+ Transient *transient = nullptr;
+ QByteArray data{"some_data"};
+
+ // Compile-time tests for callback signatures
+ static_assert(isCompatibleCallback([](QRestReply&){})); // Correct signature
+ static_assert(isCompatibleCallback(lambdaHandler));
+ static_assert(isCompatibleCallback(&Transient::memberHandler));
+ static_assert(isCompatibleCallback([](){})); // Less parameters are allowed
+
+ static_assert(!isCompatibleCallback([](QString){})); // Wrong parameter type
+ static_assert(!isCompatibleCallback([](QRestReply*){})); // Wrong parameter type
+ static_assert(!isCompatibleCallback([](const QString &){})); // Wrong parameter type
+ static_assert(!isCompatibleCallback([](QRestReply&, QString){})); // Too many parameters
+
+ // -- Test without data
+ // Without callback using signals and slot
+ QNetworkReply* reply = manager.get(request);
+ m_expectedReplies.append(reply);
+ QObject::connect(reply, &QNetworkReply::finished, this,
+ [this, reply](){m_actualReplies.append(reply);});
+
+ // With lambda callback, without context object
+ m_expectedReplies.append(manager.get(request, nullptr, lambdaHandler));
+ m_expectedReplies.append(manager.get(request, nullptr,
+ [this](QRestReply &reply){m_actualReplies.append(reply.networkReply());}));
+ // With lambda callback and context object
+ m_expectedReplies.append(manager.get(request, this, lambdaHandler));
+ m_expectedReplies.append(manager.get(request, this,
+ [this](QRestReply &reply){m_actualReplies.append(reply.networkReply());}));
+ // With member callback and context object
+ m_expectedReplies.append(manager.get(request, this, &tst_QRestAccessManager::memberHandler));
+ // With context object that is destroyed, there should be no callback or eg. crash.
+ transient = new Transient(this);
+ manager.get(request, transient, &Transient::memberHandler); // Reply not added to expecteds
+ delete transient;
+
+ // Let requests finish
+ QTRY_COMPARE(m_actualReplies.size(), m_expectedReplies.size());
+ for (auto reply: m_actualReplies) {
+ QRestReply restReply(reply);
+ QVERIFY(!restReply.isSuccess());
+ QVERIFY(restReply.hasError());
+ QCOMPARE(restReply.error(), QNetworkReply::ProtocolUnknownError);
+ QCOMPARE(restReply.networkReply()->isFinished(), true);
+ restReply.networkReply()->deleteLater();
+ }
+ m_actualReplies.clear();
+ m_expectedReplies.clear();
+
+ // -- Test with data
+ // With lambda callback, without context object
+ m_expectedReplies.append(manager.post(request, data, nullptr, lambdaHandler));
+ m_expectedReplies.append(manager.post(request, data, nullptr,
+ [this](QRestReply &reply){m_actualReplies.append(reply.networkReply());}));
+ // With lambda callback and context object
+ m_expectedReplies.append(manager.post(request, data, this, lambdaHandler));
+ m_expectedReplies.append(manager.post(request, data, this,
+ [this](QRestReply &reply){m_actualReplies.append(reply.networkReply());}));
+ // With member callback and context object
+ m_expectedReplies.append(manager.post(request, data,
+ this, &tst_QRestAccessManager::memberHandler));
+ // With context object that is destroyed, there should be no callback or eg. crash
+ transient = new Transient(this);
+ manager.post(request, data, transient, &Transient::memberHandler); // Note: reply not expected
+ delete transient;
+
+ // Let requests finish
+ QTRY_COMPARE(m_actualReplies.size(), m_expectedReplies.size());
+ for (auto reply: m_actualReplies) {
+ QRestReply restReply(reply);
+ QVERIFY(!restReply.isSuccess());
+ QVERIFY(restReply.hasError());
+ QCOMPARE(restReply.error(), QNetworkReply::ProtocolUnknownError);
+ QCOMPARE(restReply.networkReply()->isFinished(), true);
+ reply->deleteLater();
+ }
+ m_actualReplies.clear();
+ m_expectedReplies.clear();
+
+ // -- Test GET with data separately, as GET provides methods that are usable with and
+ // without data, and fairly easy to get the qrestaccessmanager.h template SFINAE subtly wrong.
+ // With lambda callback, without context object
+ m_expectedReplies.append(manager.get(request, data, nullptr, lambdaHandler));
+ m_expectedReplies.append(manager.get(request, data, nullptr,
+ [this](QRestReply &reply){m_actualReplies.append(reply.networkReply());}));
+ // With lambda callback and context object
+ m_expectedReplies.append(manager.get(request, data, this, lambdaHandler));
+ m_expectedReplies.append(manager.get(request, data, this,
+ [this](QRestReply &reply){m_actualReplies.append(reply.networkReply());}));
+ // With member callback and context object
+ m_expectedReplies.append(manager.get(request, data,
+ this, &tst_QRestAccessManager::memberHandler));
+ // With context object that is destroyed, there should be no callback or eg. crash
+ transient = new Transient(this);
+ manager.get(request, data, transient, &Transient::memberHandler); // Reply not added
+ delete transient;
+
+ // Let requests finish
+ QTRY_COMPARE(m_actualReplies.size(), m_expectedReplies.size());
+ for (auto reply: m_actualReplies) {
+ QRestReply restReply(reply);
+ QVERIFY(!restReply.isSuccess());
+ QVERIFY(restReply.hasError());
+ QCOMPARE(restReply.error(), QNetworkReply::ProtocolUnknownError);
+ QCOMPARE(restReply.networkReply()->isFinished(), true);
+ restReply.networkReply()->deleteLater();
+ }
+ m_actualReplies.clear();
+ m_expectedReplies.clear();
+}
+
+void tst_QRestAccessManager::destruction()
+{
+ std::unique_ptr<QNetworkAccessManager> qnam = std::make_unique<QNetworkAccessManager>();
+ std::unique_ptr<QRestAccessManager> manager = std::make_unique<QRestAccessManager>(qnam.get());
+ QNetworkRequest request{u"i_dont_exist"_s}; // Will result in ProtocolUnknown error
+ m_expectedReplies.clear();
+ m_actualReplies.clear();
+ auto handler = [this](QRestReply &reply) { m_actualReplies.append(reply.networkReply()); };
+
+ // Delete reply immediately, make sure nothing bad happens and that there is no callback
+ QNetworkReply *networkReply = manager->get(request, this, handler);
+ delete networkReply;
+ QTest::qWait(20); // allow some time for the callback to arrive (it shouldn't)
+ QCOMPARE(m_actualReplies.size(), m_expectedReplies.size()); // Both should be 0
+
+ // Delete access manager immediately after request, make sure nothing bad happens
+ manager->get(request, this, handler);
+ manager->post(request, "data"_ba, this, handler);
+ QTest::ignoreMessage(QtWarningMsg, "Access manager destroyed while 2 requests were still"
+ " in progress");
+ manager.reset();
+ QTest::qWait(20);
+ QCOMPARE(m_actualReplies.size(), m_expectedReplies.size()); // Both should be 0
+
+ // Destroy the underlying QNAM while requests in progress
+ manager = std::make_unique<QRestAccessManager>(qnam.get());
+ manager->get(request, this, handler);
+ manager->post(request, "data"_ba, this, handler);
+ qnam.reset();
+ QTest::qWait(20);
+ QCOMPARE(m_actualReplies.size(), m_expectedReplies.size()); // Both should be 0
+}
+
+#define VERIFY_HTTP_ERROR_STATUS(STATUS) \
+{ \
+ serverSideResponse.status = STATUS; \
+ QRestReply restReply(manager.get(request)); \
+ QTRY_VERIFY(restReply.networkReply()->isFinished()); \
+ QVERIFY(!restReply.hasError()); \
+ QCOMPARE(restReply.httpStatus(), serverSideResponse.status); \
+ QCOMPARE(restReply.error(), QNetworkReply::NetworkError::NoError); \
+ QVERIFY(!restReply.isSuccess()); \
+ restReply.networkReply()->deleteLater(); \
+} \
+
+void tst_QRestAccessManager::errors()
+{
+ // Tests the distinction between HTTP and other (network/protocol) errors
+ QNetworkAccessManager qnam;
+ QRestAccessManager manager(&qnam);
+ HttpTestServer server;
+ QTRY_VERIFY(server.isListening());
+ QNetworkRequest request(server.url());
+
+ HttpData serverSideResponse; // The response data the server responds with
+ server.setHandler([&](const HttpData &, HttpData &response, ResponseControl &) {
+ response = serverSideResponse;
+ });
+
+ // Test few HTTP statuses in different categories
+ VERIFY_HTTP_ERROR_STATUS(301) // QNetworkReply::ProtocolUnknownError
+ VERIFY_HTTP_ERROR_STATUS(302) // QNetworkReply::ProtocolUnknownError
+ VERIFY_HTTP_ERROR_STATUS(400) // QNetworkReply::ProtocolInvalidOperationError
+ VERIFY_HTTP_ERROR_STATUS(401) // QNetworkReply::AuthenticationRequiredEror
+ VERIFY_HTTP_ERROR_STATUS(402) // QNetworkReply::UnknownContentError
+ VERIFY_HTTP_ERROR_STATUS(403) // QNetworkReply::ContentAccessDenied
+ VERIFY_HTTP_ERROR_STATUS(404) // QNetworkReply::ContentNotFoundError
+ VERIFY_HTTP_ERROR_STATUS(405) // QNetworkReply::ContentOperationNotPermittedError
+ VERIFY_HTTP_ERROR_STATUS(406) // QNetworkReply::UnknownContentError
+ VERIFY_HTTP_ERROR_STATUS(407) // QNetworkReply::ProxyAuthenticationRequiredError
+ VERIFY_HTTP_ERROR_STATUS(408) // QNetworkReply::UnknownContentError
+ VERIFY_HTTP_ERROR_STATUS(409) // QNetworkReply::ContentConflictError
+ VERIFY_HTTP_ERROR_STATUS(410) // QNetworkReply::ContentGoneError
+ VERIFY_HTTP_ERROR_STATUS(500) // QNetworkReply::InternalServerError
+ VERIFY_HTTP_ERROR_STATUS(501) // QNetworkReply::OperationNotImplementedError
+ VERIFY_HTTP_ERROR_STATUS(502) // QNetworkReply::UnknownServerError
+ VERIFY_HTTP_ERROR_STATUS(503) // QNetworkReply::ServiceUnavailableError
+ VERIFY_HTTP_ERROR_STATUS(504) // QNetworkReply::UnknownServerError
+ VERIFY_HTTP_ERROR_STATUS(505) // QNetworkReply::UnknownServerError
+
+ {
+ // Test that actual network/protocol errors come through
+ QRestReply restReply(manager.get({})); // Empty url
+ QTRY_VERIFY(restReply.networkReply()->isFinished());
+ QVERIFY(restReply.hasError());
+ QVERIFY(!restReply.isSuccess());
+ QCOMPARE(restReply.error(), QNetworkReply::ProtocolUnknownError);
+ restReply.networkReply()->deleteLater();
+ }
+
+ {
+ QRestReply restReply(manager.get(QNetworkRequest{{"http://non-existent.foo.bar.test"}}));
+ QTRY_VERIFY(restReply.networkReply()->isFinished());
+ QVERIFY(restReply.hasError());
+ QVERIFY(!restReply.isSuccess());
+ QCOMPARE(restReply.error(), QNetworkReply::HostNotFoundError);
+ restReply.networkReply()->deleteLater();
+ }
+
+ {
+ QRestReply restReply(manager.get(request));
+ restReply.networkReply()->abort();
+ QTRY_VERIFY(restReply.networkReply()->isFinished());
+ QVERIFY(restReply.hasError());
+ QVERIFY(!restReply.isSuccess());
+ QCOMPARE(restReply.error(), QNetworkReply::OperationCanceledError);
+ restReply.networkReply()->deleteLater();
+ }
+}
+
+void tst_QRestAccessManager::body()
+{
+ // Test using QRestReply::body() data accessor
+ QNetworkAccessManager qnam;
+ QRestAccessManager manager(&qnam);
+ HttpTestServer server;
+ QTRY_VERIFY(server.isListening());
+ QNetworkRequest request(server.url());
+ QNetworkReply *networkReply = nullptr;
+
+ HttpData serverSideRequest; // The request data the server received
+ HttpData serverSideResponse; // The response data the server responds with
+ server.setHandler([&](const HttpData &request, HttpData &response, ResponseControl&) {
+ serverSideRequest = request;
+ response = serverSideResponse;
+ });
+
+ {
+ serverSideResponse.status = 200;
+ serverSideResponse.body = "some_data"_ba;
+ manager.get(request, this, [&](QRestReply &reply) { networkReply = reply.networkReply(); });
+ QTRY_VERIFY(networkReply);
+ QRestReply restReply(networkReply);
+ QCOMPARE(restReply.readBody(), serverSideResponse.body);
+ QCOMPARE(restReply.httpStatus(), serverSideResponse.status);
+ QVERIFY(!restReply.hasError());
+ QVERIFY(restReply.isSuccess());
+ networkReply->deleteLater();
+ networkReply = nullptr;
+ }
+
+ {
+ serverSideResponse.status = 200;
+ serverSideResponse.body = ""_ba; // Empty
+ manager.get(request, this, [&](QRestReply &reply) { networkReply = reply.networkReply(); });
+ QTRY_VERIFY(networkReply);
+ QRestReply restReply(networkReply);
+ QCOMPARE(restReply.readBody(), serverSideResponse.body);
+ networkReply->deleteLater();
+ networkReply = nullptr;
+ }
+
+ {
+ serverSideResponse.status = 500;
+ serverSideResponse.body = "some_other_data"_ba;
+ manager.get(request, this, [&](QRestReply &reply) { networkReply = reply.networkReply(); });
+ QTRY_VERIFY(networkReply);
+ QRestReply restReply(networkReply);
+ QCOMPARE(restReply.readBody(), serverSideResponse.body);
+ QCOMPARE(restReply.httpStatus(), serverSideResponse.status);
+ QVERIFY(!restReply.hasError());
+ QVERIFY(!restReply.isSuccess());
+ networkReply->deleteLater();
+ networkReply = nullptr;
+ }
+}
+
+void tst_QRestAccessManager::json()
+{
+ // Tests using QRestReply::readJson()
+ QNetworkAccessManager qnam;
+ QRestAccessManager manager(&qnam);
+ HttpTestServer server;
+ QTRY_VERIFY(server.isListening());
+ QNetworkRequest request(server.url());
+ QNetworkReply *networkReply = nullptr;
+ QJsonDocument responseJsonDocument;
+ std::optional<QJsonDocument> json;
+ QJsonParseError parseError;
+
+ HttpData serverSideRequest; // The request data the server received
+ HttpData serverSideResponse; // The response data the server responds with
+ serverSideResponse.status = 200;
+ server.setHandler([&](const HttpData &request, HttpData &response, ResponseControl&) {
+ serverSideRequest = request;
+ response = serverSideResponse;
+ });
+
+ {
+ // Test receiving valid json object
+ serverSideResponse.body = "{\"key1\":\"value1\",""\"key2\":\"value2\"}\n"_ba;
+ networkReply = manager.get(request);
+ // Read unfinished reply
+ QVERIFY(!networkReply->isFinished());
+ QTest::ignoreMessage(QtWarningMsg, "readJson() called on an unfinished reply, ignoring");
+ parseError.error = QJsonParseError::ParseError::DocumentTooLarge; // Reset to impossible value
+ QRestReply restReply(networkReply);
+ QVERIFY(!restReply.readJson(&parseError));
+ QCOMPARE(parseError.error, QJsonParseError::ParseError::NoError);
+ // Read finished reply
+ QTRY_VERIFY(networkReply->isFinished());
+ parseError.error = QJsonParseError::ParseError::DocumentTooLarge;
+ json = restReply.readJson(&parseError);
+ QVERIFY(json);
+ QCOMPARE(parseError.error, QJsonParseError::ParseError::NoError);
+ responseJsonDocument = *json;
+ QVERIFY(responseJsonDocument.isObject());
+ QCOMPARE(responseJsonDocument["key1"], "value1");
+ QCOMPARE(responseJsonDocument["key2"], "value2");
+ networkReply->deleteLater();
+ networkReply = nullptr;
+ }
+
+ {
+ // Test receiving an invalid json object
+ serverSideResponse.body = "foobar"_ba;
+ manager.get(request, this, [&](QRestReply &reply) { networkReply = reply.networkReply(); });
+ QTRY_VERIFY(networkReply);
+ QRestReply restReply(networkReply);
+ parseError.error = QJsonParseError::ParseError::DocumentTooLarge;
+ const auto json = restReply.readJson(&parseError);
+ networkReply->deleteLater();
+ networkReply = nullptr;
+ QCOMPARE_EQ(json, std::nullopt);
+ QCOMPARE_NE(parseError.error, QJsonParseError::ParseError::NoError);
+ QCOMPARE_NE(parseError.error, QJsonParseError::ParseError::DocumentTooLarge);
+ QCOMPARE_GT(parseError.offset, 0);
+ }
+
+ {
+ // Test receiving valid json array
+ serverSideResponse.body = "[\"foo\", \"bar\"]\n"_ba;
+ manager.get(request, this, [&](QRestReply &reply) { networkReply = reply.networkReply(); });
+ QTRY_VERIFY(networkReply);
+ QRestReply restReply(networkReply);
+ parseError.error = QJsonParseError::ParseError::DocumentTooLarge;
+ json = restReply.readJson(&parseError);
+ networkReply->deleteLater();
+ networkReply = nullptr;
+ QCOMPARE(parseError.error, QJsonParseError::ParseError::NoError);
+ QVERIFY(json);
+ responseJsonDocument = *json;
+ QVERIFY(responseJsonDocument.isArray());
+ QCOMPARE(responseJsonDocument.array().size(), 2);
+ QCOMPARE(responseJsonDocument[0].toString(), "foo"_L1);
+ QCOMPARE(responseJsonDocument[1].toString(), "bar"_L1);
+ }
+}
+
+#define VERIFY_TEXT_REPLY_OK \
+{ \
+ manager.get(request, this, [&](QRestReply &reply) { networkReply = reply.networkReply(); }); \
+ QTRY_VERIFY(networkReply); \
+ QRestReply restReply(networkReply); \
+ responseString = restReply.readText(); \
+ networkReply->deleteLater(); \
+ networkReply = nullptr; \
+ QCOMPARE(responseString, sourceString); \
+}
+
+#define VERIFY_TEXT_REPLY_ERROR(WARNING_MESSAGE) \
+{ \
+ manager.get(request, this, [&](QRestReply &reply) { networkReply = reply.networkReply(); }); \
+ QTRY_VERIFY(networkReply); \
+ QTest::ignoreMessage(QtWarningMsg, WARNING_MESSAGE); \
+ QRestReply restReply(networkReply); \
+ responseString = restReply.readText(); \
+ networkReply->deleteLater(); \
+ networkReply = nullptr; \
+ QVERIFY(responseString.isEmpty()); \
+}
+
+void tst_QRestAccessManager::text()
+{
+ // Test using QRestReply::text() data accessor with various text encodings
+ QNetworkAccessManager qnam;
+ QRestAccessManager manager(&qnam);
+ HttpTestServer server;
+ QTRY_VERIFY(server.isListening());
+ QNetworkRequest request(server.url());
+ QNetworkReply *networkReply = nullptr;
+ QJsonObject responseJsonObject;
+
+ QStringEncoder encUTF8("UTF-8");
+ QStringEncoder encUTF16("UTF-16");
+ QStringEncoder encUTF32("UTF-32");
+ QString responseString;
+
+ HttpData serverSideRequest; // The request data the server received
+ HttpData serverSideResponse; // The response data the server responds with
+ serverSideResponse.status = 200;
+ server.setHandler([&](const HttpData &request, HttpData &response, ResponseControl&) {
+ serverSideRequest = request;
+ response = serverSideResponse;
+ });
+
+ const QString sourceString("this is a string"_L1);
+
+ // Charset parameter of Content-Type header may specify non-UTF-8 character encoding.
+ //
+ // QString is UTF-16, and in the tests below we encode the response data to various
+ // charset encodings (into byte arrays). When we get the response data, the text()
+ // should consider the indicated charset and convert it to an UTF-16 QString => the returned
+ // QString from text() should match with the original (UTF-16) QString.
+
+ // Successful UTF-8
+ serverSideResponse.headers.append(Header::ContentType, "text/plain; charset=UTF-8"_ba);
+ serverSideResponse.body = encUTF8(sourceString);
+ VERIFY_TEXT_REPLY_OK;
+
+ // Successful UTF-16
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType, "text/plain; charset=UTF-16"_ba);
+ serverSideResponse.body = encUTF16(sourceString);
+ VERIFY_TEXT_REPLY_OK;
+
+ // Successful UTF-16, parameter case insensitivity
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType, "text/plain; chARset=uTf-16"_ba);
+ serverSideResponse.body = encUTF16(sourceString);
+ VERIFY_TEXT_REPLY_OK;
+
+ // Successful UTF-32
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType, "text/plain; charset=UTF-32"_ba);
+ serverSideResponse.body = encUTF32(sourceString);
+ VERIFY_TEXT_REPLY_OK;
+
+ // Successful UTF-32 with spec-wise allowed extra content in the Content-Type header value
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType,
+ "text/plain; charset = \"UTF-32\";extraparameter=bar"_ba);
+ serverSideResponse.body = encUTF32(sourceString);
+ VERIFY_TEXT_REPLY_OK;
+
+ {
+ // Unsuccessful UTF-32, wrong encoding indicated (indicated UTF-32 but data is UTF-8)
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType, "text/plain; charset=UTF-32"_ba);
+ serverSideResponse.body = encUTF8(sourceString);
+ manager.get(request, this, [&](QRestReply &reply) { networkReply = reply.networkReply(); });
+ QTRY_VERIFY(networkReply);
+ QRestReply restReply(networkReply);
+ responseString = restReply.readText();
+ QCOMPARE_NE(responseString, sourceString);
+ networkReply->deleteLater();
+ networkReply = nullptr;
+ }
+
+ // Unsupported encoding
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType, "text/plain; charset=foo"_ba);
+ serverSideResponse.body = encUTF8(sourceString);
+ VERIFY_TEXT_REPLY_ERROR("readText(): Charset \"foo\" is not supported")
+
+ // Broken UTF-8
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType, "text/plain; charset=UTF-8"_ba);
+ serverSideResponse.body = "\xF0\x28\x8C\x28\xA0\xB0\xC0\xD0"; // invalid characters
+ VERIFY_TEXT_REPLY_ERROR("readText(): Decoding error occurred");
+}
+
+void tst_QRestAccessManager::textStreaming()
+{
+ // Tests textual data received in chunks
+ QNetworkAccessManager qnam;
+ QRestAccessManager manager(&qnam);
+ HttpTestServer server;
+ QTRY_VERIFY(server.isListening());
+ QNetworkRequest request(server.url());
+
+ // Create long text data
+ const QString expectedData = u"사랑abcd€fghiklmnΩpqrstuvwx愛사랑A사랑BCD€FGHIJKLMNΩPQRsTUVWXYZ愛"_s;
+ QString cumulativeReceivedText;
+ QStringEncoder encUTF8("UTF-8");
+ ResponseControl *responseControl = nullptr;
+
+ HttpData serverSideResponse; // The response data the server responds with
+ serverSideResponse.headers.removeAll(Header::ContentType);
+ serverSideResponse.headers.append(Header::ContentType, "text/plain; charset=UTF-8"_ba);
+ serverSideResponse.body = encUTF8(expectedData);
+ serverSideResponse.status = 200;
+
+ server.setHandler([&](const HttpData &, HttpData &response, ResponseControl &control) {
+ response = serverSideResponse;
+ responseControl = &control; // store for later
+ control.responseChunkSize = 5; // tell testserver to send data in chunks of this size
+ });
+
+ {
+ QRestReply restReply(manager.get(request));
+ QObject::connect(restReply.networkReply(), &QNetworkReply::readyRead, this, [&]() {
+ cumulativeReceivedText += restReply.readText();
+ // Tell testserver that test is ready for next chunk
+ responseControl->readyForNextChunk = true;
+ });
+ QTRY_VERIFY(restReply.networkReply()->isFinished());
+ QCOMPARE(cumulativeReceivedText, expectedData);
+ restReply.networkReply()->deleteLater();
+ }
+
+ {
+ cumulativeReceivedText.clear();
+ // Broken UTF-8 characters after first five ok characters
+ serverSideResponse.body =
+ "12345"_ba + "\xF0\x28\x8C\x28\xA0\xB0\xC0\xD0" + "abcde"_ba;
+ QRestReply restReply(manager.get(request));
+ QObject::connect(restReply.networkReply(), &QNetworkReply::readyRead, this, [&]() {
+ static bool firstTime = true;
+ if (!firstTime) // First text part is without warnings
+ QTest::ignoreMessage(QtWarningMsg, "readText(): Decoding error occurred");
+ firstTime = false;
+ cumulativeReceivedText += restReply.readText();
+ // Tell testserver that test is ready for next chunk
+ responseControl->readyForNextChunk = true;
+ });
+ QTRY_VERIFY(restReply.networkReply()->isFinished());
+ QCOMPARE(cumulativeReceivedText, "12345"_ba);
+ restReply.networkReply()->deleteLater();
+ }
+}
+
+QTEST_MAIN(tst_QRestAccessManager)
+#include "tst_qrestaccessmanager.moc"
diff --git a/tests/auto/network/kernel/CMakeLists.txt b/tests/auto/network/kernel/CMakeLists.txt
index c7b0d0dfeb..b42a9724b3 100644
--- a/tests/auto/network/kernel/CMakeLists.txt
+++ b/tests/auto/network/kernel/CMakeLists.txt
@@ -1,11 +1,15 @@
-# Generated from kernel.pro.
-if(NOT INTEGRITY)
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(QT_FEATURE_dnslookup AND (QT_FEATURE_libresolv OR WIN32))
add_subdirectory(qdnslookup)
add_subdirectory(qdnslookup_appless)
endif()
-add_subdirectory(qnetworkproxyfactory)
+if(QT_FEATURE_networkinterface)
+ add_subdirectory(qnetworkproxyfactory)
+ add_subdirectory(qnetworkinterface)
+endif()
add_subdirectory(qnetworkproxy)
-add_subdirectory(qnetworkinterface)
add_subdirectory(qnetworkdatagram)
add_subdirectory(qnetworkaddressentry)
add_subdirectory(qhostaddress)
diff --git a/tests/auto/network/kernel/qauthenticator/CMakeLists.txt b/tests/auto/network/kernel/qauthenticator/CMakeLists.txt
index d772fe0e28..552e9065ed 100644
--- a/tests/auto/network/kernel/qauthenticator/CMakeLists.txt
+++ b/tests/auto/network/kernel/qauthenticator/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qauthenticator.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_qauthenticator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -11,9 +18,6 @@ endif()
qt_internal_add_test(tst_qauthenticator
SOURCES
tst_qauthenticator.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::NetworkPrivate
)
-
-#### Keys ignored in scope 1:.:.:qauthenticator.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
diff --git a/tests/auto/network/kernel/qauthenticator/tst_qauthenticator.cpp b/tests/auto/network/kernel/qauthenticator/tst_qauthenticator.cpp
index 28a28ca78b..1cd1b6a63b 100644
--- a/tests/auto/network/kernel/qauthenticator/tst_qauthenticator.cpp
+++ b/tests/auto/network/kernel/qauthenticator/tst_qauthenticator.cpp
@@ -1,36 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the FOO 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 <QtCore/QString>
#include <QTest>
#include <QtCore/QCoreApplication>
#include <QtNetwork/QAuthenticator>
+#include <QtNetwork/QHttpHeaders>
#include <private/qauthenticator_p.h>
@@ -85,8 +61,8 @@ void tst_QAuthenticator::basicAuth()
QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(auth);
QCOMPARE(priv->phase, QAuthenticatorPrivate::Start);
- QList<QPair<QByteArray, QByteArray> > headers;
- headers << qMakePair(QByteArray("WWW-Authenticate"), "Basic " + data.toUtf8());
+ QHttpHeaders headers;
+ headers.append(QByteArray("WWW-Authenticate"), "Basic " + data.toUtf8());
priv->parseHttpResponse(headers, /*isProxy = */ false, {});
QCOMPARE(auth.realm(), realm);
@@ -128,13 +104,13 @@ void tst_QAuthenticator::ntlmAuth()
QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(auth);
QCOMPARE(priv->phase, QAuthenticatorPrivate::Start);
- QList<QPair<QByteArray, QByteArray> > headers;
+ QHttpHeaders headers;
// NTLM phase 1: negotiate
// This phase of NTLM contains no information, other than what we're willing to negotiate
// Current implementation uses flags:
// NTLMSSP_NEGOTIATE_UNICODE | NTLMSSP_NEGOTIATE_NTLM | NTLMSSP_REQUEST_TARGET
- headers << qMakePair(QByteArrayLiteral("WWW-Authenticate"), QByteArrayLiteral("NTLM"));
+ headers.append(QByteArrayLiteral("WWW-Authenticate"), QByteArrayLiteral("NTLM"));
priv->parseHttpResponse(headers, /*isProxy = */ false, {});
if (sso)
QVERIFY(priv->calculateResponse("GET", "/", u"").startsWith("NTLM "));
@@ -143,7 +119,7 @@ void tst_QAuthenticator::ntlmAuth()
// NTLM phase 2: challenge
headers.clear();
- headers << qMakePair(QByteArray("WWW-Authenticate"), "NTLM " + data.toUtf8());
+ headers.append(QByteArray("WWW-Authenticate"), "NTLM " + data.toUtf8());
priv->parseHttpResponse(headers, /*isProxy = */ false, {});
QEXPECT_FAIL("with-realm", "NTLM authentication code doesn't extract the realm", Continue);
@@ -168,10 +144,10 @@ void tst_QAuthenticator::sha256AndMd5Digest()
QVERIFY(priv->isMethodSupported("digest")); // sanity check
QCOMPARE(priv->phase, QAuthenticatorPrivate::Start);
- QList<QPair<QByteArray, QByteArray>> headers;
+ QHttpHeaders headers;
// Put sha256 first, so that its parsed first...
- headers.emplace_back("WWW-Authenticate", sha256);
- headers.emplace_back("WWW-Authenticate", md5);
+ headers.append("WWW-Authenticate", sha256);
+ headers.append("WWW-Authenticate", md5);
priv->parseHttpResponse(headers, false, QString());
QByteArray response = priv->calculateResponse("GET", "/index", {});
diff --git a/tests/auto/network/kernel/qdnslookup/BLACKLIST b/tests/auto/network/kernel/qdnslookup/BLACKLIST
deleted file mode 100644
index f07a8ce9a3..0000000000
--- a/tests/auto/network/kernel/qdnslookup/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[lookup]
-*
diff --git a/tests/auto/network/kernel/qdnslookup/CMakeLists.txt b/tests/auto/network/kernel/qdnslookup/CMakeLists.txt
index b039b4e91b..ea539ecbe0 100644
--- a/tests/auto/network/kernel/qdnslookup/CMakeLists.txt
+++ b/tests/auto/network/kernel/qdnslookup/CMakeLists.txt
@@ -1,12 +1,25 @@
-# Generated from qdnslookup.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdnslookup Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdnslookup LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdnslookup
SOURCES
tst_qdnslookup.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
+ Qt::TestPrivate
+)
+
+qt_internal_extend_target(tst_qdnslookup CONDITION WIN32
+ LIBRARIES
+ iphlpapi
)
diff --git a/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp b/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp
index f462330fdf..20ecf8a6ab 100644
--- a/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp
+++ b/tests/auto/network/kernel/qdnslookup/tst_qdnslookup.cpp
@@ -1,45 +1,37 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Jeremy Lainé <jeremy.laine@m4x.org>
-** Copyright (C) 2016 Intel Corporation.
-** 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) 2012 Jeremy Lainé <jeremy.laine@m4x.org>
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSignalSpy>
+#include <QtTest/private/qpropertytesthelper_p.h>
#include <QtNetwork/QDnsLookup>
+
+#include <QtCore/QRandomGenerator>
#include <QtNetwork/QHostAddress>
+#include <QtNetwork/QNetworkDatagram>
+#include <QtNetwork/QUdpSocket>
+
+#ifdef Q_OS_UNIX
+# include <QtCore/QFile>
+#else
+# include <winsock2.h>
+# include <iphlpapi.h>
+#endif
+using namespace Qt::StringLiterals;
static const int Timeout = 15000; // 15s
class tst_QDnsLookup: public QObject
{
Q_OBJECT
+ const QString normalDomain = u".test.qt-project.org"_s;
+ const QString idnDomain = u".alqualondë.test.qt-project.org"_s;
+ bool usingIdnDomain = false;
+ bool dnsServersMustWork = false;
+
QString domainName(const QString &input);
QString domainNameList(const QString &input);
QStringList domainNameListAlternatives(const QString &input);
@@ -47,18 +39,138 @@ public slots:
void initTestCase();
private slots:
+ void lookupLocalhost();
+ void lookupRoot();
void lookup_data();
void lookup();
+ void lookupIdn_data() { lookup_data(); }
+ void lookupIdn();
+
void lookupReuse();
void lookupAbortRetry();
+ void setNameserverLoopback();
+ void setNameserver_data();
+ void setNameserver();
void bindingsAndProperties();
+ void automatedBindings();
};
+static constexpr qsizetype HeaderSize = 6 * sizeof(quint16);
+static const char preparedDnsQuery[] =
+ // header
+ "\x00\x00" // transaction ID, we'll replace
+ "\x01\x20" // flags
+ "\x00\x01" // qdcount
+ "\x00\x00" // ancount
+ "\x00\x00" // nscount
+ "\x00\x00" // arcount
+ // query:
+ "\x00\x00\x06\x00\x01" // <root domain> IN SOA
+ ;
+
+static QList<QHostAddress> systemNameservers()
+{
+ QList<QHostAddress> result;
+
+#ifdef Q_OS_WIN
+ ULONG infosize = 0;
+ DWORD r = GetNetworkParams(nullptr, &infosize);
+ auto buffer = std::make_unique<uchar[]>(infosize);
+ auto info = new (buffer.get()) FIXED_INFO;
+ r = GetNetworkParams(info, &infosize);
+ if (r == NO_ERROR) {
+ for (PIP_ADDR_STRING ptr = &info->DnsServerList; ptr; ptr = ptr->Next) {
+ QLatin1StringView addr(ptr->IpAddress.String);
+ result.emplaceBack(addr);
+ }
+ }
+#else
+ QFile f("/etc/resolv.conf");
+ if (!f.open(QIODevice::ReadOnly))
+ return result;
+
+ while (!f.atEnd()) {
+ static const char command[] = "nameserver";
+ QByteArray line = f.readLine().simplified();
+ if (!line.startsWith(command))
+ continue;
+
+ QString addr = QLatin1StringView(line).mid(sizeof(command));
+ result.emplaceBack(addr);
+ }
+#endif
+
+ return result;
+}
+
+static QList<QHostAddress> globalPublicNameservers()
+{
+ const char *const candidates[] = {
+ // Google's dns.google
+ "8.8.8.8", "2001:4860:4860::8888",
+ //"8.8.4.4", "2001:4860:4860::8844",
+
+ // CloudFare's one.one.one.one
+ "1.1.1.1", "2606:4700:4700::1111",
+ //"1.0.0.1", "2606:4700:4700::1001",
+
+ // Quad9's dns9
+ //"9.9.9.9", "2620:fe::9",
+ };
+
+ QList<QHostAddress> result;
+ QRandomGenerator &rng = *QRandomGenerator::system();
+ for (auto name : candidates) {
+ // check the candidates for reachability
+ QHostAddress addr{QLatin1StringView(name)};
+ quint16 id = quint16(rng());
+ QByteArray data(preparedDnsQuery, sizeof(preparedDnsQuery));
+ char *ptr = data.data();
+ qToBigEndian(id, ptr);
+
+ QUdpSocket socket;
+ socket.connectToHost(addr, 53);
+ if (socket.waitForConnected(1))
+ socket.write(data);
+
+ if (!socket.waitForReadyRead(1000)) {
+ qDebug() << addr << "discarded:" << socket.errorString();
+ continue;
+ }
+
+ QNetworkDatagram dgram = socket.receiveDatagram();
+ if (!dgram.isValid()) {
+ qDebug() << addr << "discarded:" << socket.errorString();
+ continue;
+ }
+
+ data = dgram.data();
+ ptr = data.data();
+ if (data.size() < HeaderSize) {
+ qDebug() << addr << "discarded: reply too small";
+ continue;
+ }
+
+ bool ok = qFromBigEndian<quint16>(ptr) == id
+ && (ptr[2] & 0x80) // is a reply
+ && (ptr[3] & 0xf) == 0 // rcode NOERROR
+ && qFromBigEndian<quint16>(ptr + 4) == 1 // qdcount
+ && qFromBigEndian<quint16>(ptr + 6) >= 1; // ancount
+ if (!ok) {
+ qDebug() << addr << "discarded: invalid reply";
+ continue;
+ }
+
+ result.emplaceBack(std::move(addr));
+ }
+
+ return result;
+}
+
void tst_QDnsLookup::initTestCase()
{
- QTest::addColumn<QString>("tld");
- QTest::newRow("normal") << ".test.qt-project.org";
- QTest::newRow("idn") << ".alqualond\xc3\xab.test.qt-project.org";
+ if (qgetenv("QTEST_ENVIRONMENT") == "ci")
+ dnsServersMustWork = true;
}
QString tst_QDnsLookup::domainName(const QString &input)
@@ -72,15 +184,16 @@ QString tst_QDnsLookup::domainName(const QString &input)
return nodot;
}
- QFETCH_GLOBAL(QString, tld);
- return input + tld;
+ if (usingIdnDomain)
+ return input + idnDomain;
+ return input + normalDomain;
}
QString tst_QDnsLookup::domainNameList(const QString &input)
{
- QStringList list = input.split(QLatin1Char(';'));
+ const QStringList list = input.split(QLatin1Char(';'));
QString result;
- foreach (const QString &s, list) {
+ for (const QString &s : list) {
if (!result.isEmpty())
result += ';';
result += domainName(s);
@@ -91,11 +204,44 @@ QString tst_QDnsLookup::domainNameList(const QString &input)
QStringList tst_QDnsLookup::domainNameListAlternatives(const QString &input)
{
QStringList alternatives = input.split('|');
- for (int i = 0; i < alternatives.length(); ++i)
+ for (int i = 0; i < alternatives.size(); ++i)
alternatives[i] = domainNameList(alternatives[i]);
return alternatives;
}
+void tst_QDnsLookup::lookupLocalhost()
+{
+ QDnsLookup lookup(QDnsLookup::Type::A, u"localhost"_s);
+ lookup.lookup();
+ QTRY_VERIFY_WITH_TIMEOUT(lookup.isFinished(), Timeout);
+ QCOMPARE(lookup.error(), QDnsLookup::NoError);
+
+ QList<QDnsHostAddressRecord> hosts = lookup.hostAddressRecords();
+ QCOMPARE(hosts.size(), 1);
+ QCOMPARE(hosts.at(0).value(), QHostAddress::LocalHost);
+ QVERIFY2(hosts.at(0).name().startsWith(lookup.name()),
+ qPrintable(hosts.at(0).name()));
+}
+
+void tst_QDnsLookup::lookupRoot()
+{
+#ifdef Q_OS_WIN
+ QSKIP("This test fails on Windows as it seems to treat the lookup as a local one.");
+#else
+ QDnsLookup lookup(QDnsLookup::Type::NS, u""_s);
+ lookup.lookup();
+ QTRY_VERIFY_WITH_TIMEOUT(lookup.isFinished(), Timeout);
+ QCOMPARE(lookup.error(), QDnsLookup::NoError);
+
+ const QList<QDnsDomainNameRecord> servers = lookup.nameServerRecords();
+ QVERIFY(!servers.isEmpty());
+ for (const QDnsDomainNameRecord &ns : servers) {
+ QCOMPARE(ns.name(), QString());
+ QVERIFY(ns.value().endsWith(".root-servers.net"));
+ }
+#endif
+}
+
void tst_QDnsLookup::lookup_data()
{
QTest::addColumn<int>("type");
@@ -109,22 +255,18 @@ void tst_QDnsLookup::lookup_data()
QTest::addColumn<QString>("srv");
QTest::addColumn<QString>("txt");
- QTest::newRow("a-empty") << int(QDnsLookup::A) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << ""<< "" << "";
QTest::newRow("a-notfound") << int(QDnsLookup::A) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("a-single") << int(QDnsLookup::A) << "a-single" << int(QDnsLookup::NoError) << "" << "192.0.2.1" << "" << "" << "" << "" << "";
QTest::newRow("a-multi") << int(QDnsLookup::A) << "a-multi" << int(QDnsLookup::NoError) << "" << "192.0.2.1;192.0.2.2;192.0.2.3" << "" << "" << "" << "" << "";
- QTest::newRow("aaaa-empty") << int(QDnsLookup::AAAA) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("aaaa-notfound") << int(QDnsLookup::AAAA) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("aaaa-single") << int(QDnsLookup::AAAA) << "aaaa-single" << int(QDnsLookup::NoError) << "" << "2001:db8::1" << "" << "" << "" << "" << "";
QTest::newRow("aaaa-multi") << int(QDnsLookup::AAAA) << "aaaa-multi" << int(QDnsLookup::NoError) << "" << "2001:db8::1;2001:db8::2;2001:db8::3" << "" << "" << "" << "" << "";
- QTest::newRow("any-empty") << int(QDnsLookup::ANY) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("any-notfound") << int(QDnsLookup::ANY) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("any-a-single") << int(QDnsLookup::ANY) << "a-single" << int(QDnsLookup::NoError) << "" << "192.0.2.1" << "" << "" << "" << "" << "";
QTest::newRow("any-a-plus-aaaa") << int(QDnsLookup::ANY) << "a-plus-aaaa" << int(QDnsLookup::NoError) << "" << "198.51.100.1;2001:db8::1:1" << "" << "" << "" << "" << "";
QTest::newRow("any-multi") << int(QDnsLookup::ANY) << "multi" << int(QDnsLookup::NoError) << "" << "198.51.100.1;198.51.100.2;198.51.100.3;2001:db8::1:1;2001:db8::1:2" << "" << "" << "" << "" << "";
- QTest::newRow("mx-empty") << int(QDnsLookup::MX) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("mx-notfound") << int(QDnsLookup::MX) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("mx-single") << int(QDnsLookup::MX) << "mx-single" << int(QDnsLookup::NoError) << "" << "" << "10 multi" << "" << "" << "" << "";
QTest::newRow("mx-single-cname") << int(QDnsLookup::MX) << "mx-single-cname" << int(QDnsLookup::NoError) << "" << "" << "10 cname" << "" << "" << "" << "";
@@ -133,12 +275,10 @@ void tst_QDnsLookup::lookup_data()
<< "10 multi;10 a-single|"
"10 a-single;10 multi" << "" << "" << "" << "";
- QTest::newRow("ns-empty") << int(QDnsLookup::NS) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("ns-notfound") << int(QDnsLookup::NS) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("ns-single") << int(QDnsLookup::NS) << "ns-single" << int(QDnsLookup::NoError) << "" << "" << "" << "ns11.cloudns.net." << "" << "" << "";
QTest::newRow("ns-multi") << int(QDnsLookup::NS) << "ns-multi" << int(QDnsLookup::NoError) << "" << "" << "" << "ns11.cloudns.net.;ns12.cloudns.net." << "" << "" << "";
- QTest::newRow("ptr-empty") << int(QDnsLookup::PTR) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("ptr-notfound") << int(QDnsLookup::PTR) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
#if 0
// temporarily disabled since the new hosting provider can't insert
@@ -146,7 +286,6 @@ void tst_QDnsLookup::lookup_data()
QTest::newRow("ptr-single") << int(QDnsLookup::PTR) << "ptr-single" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "a-single" << "" << "";
#endif
- QTest::newRow("srv-empty") << int(QDnsLookup::SRV) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("srv-notfound") << int(QDnsLookup::SRV) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("srv-single") << int(QDnsLookup::SRV) << "_echo._tcp.srv-single" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "5 0 7 multi" << "";
QTest::newRow("srv-prio") << int(QDnsLookup::SRV) << "_echo._tcp.srv-prio" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "1 0 7 multi;2 0 7 a-plus-aaaa" << "";
@@ -157,7 +296,6 @@ void tst_QDnsLookup::lookup_data()
<< "1 50 7 multi;2 50 7 a-single;2 50 7 aaaa-single;3 50 7 a-multi|"
"1 50 7 multi;2 50 7 aaaa-single;2 50 7 a-single;3 50 7 a-multi" << "";
- QTest::newRow("txt-empty") << int(QDnsLookup::TXT) << "" << int(QDnsLookup::InvalidRequestError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("txt-notfound") << int(QDnsLookup::TXT) << "invalid.invalid" << int(QDnsLookup::NotFoundError) << "" << "" << "" << "" << "" << "" << "";
QTest::newRow("txt-single") << int(QDnsLookup::TXT) << "txt-single" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "" << "Hello";
QTest::newRow("txt-multi-onerr") << int(QDnsLookup::TXT) << "txt-multi-onerr" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << ""
@@ -165,38 +303,6 @@ void tst_QDnsLookup::lookup_data()
QTest::newRow("txt-multi-multirr") << int(QDnsLookup::TXT) << "txt-multi-multirr" << int(QDnsLookup::NoError) << "" << "" << "" << "" << "" << "" << "Hello;World";
}
-static QByteArray msgDnsLookup(QDnsLookup::Error actualError,
- int expectedError,
- const QString &domain,
- const QString &cname,
- const QString &host,
- const QString &srv,
- const QString &mx,
- const QString &ns,
- const QString &ptr,
- const QString &errorString)
-{
- QString result;
- QTextStream str(&result);
- str << "Actual error: " << actualError;
- if (!errorString.isEmpty())
- str << " (" << errorString << ')';
- str << ", expected: " << expectedError;
- str << ", domain: " << domain;
- if (!cname.isEmpty())
- str << ", cname: " << cname;
- str << ", host: " << host;
- if (!srv.isEmpty())
- str << " server: " << srv;
- if (!mx.isEmpty())
- str << " mx: " << mx;
- if (!ns.isEmpty())
- str << " ns: " << ns;
- if (!ptr.isEmpty())
- str << " ptr: " << ptr;
- return result.toLocal8Bit();
-}
-
void tst_QDnsLookup::lookup()
{
QFETCH(int, type);
@@ -227,13 +333,38 @@ void tst_QDnsLookup::lookup()
lookup.lookup();
QTRY_VERIFY_WITH_TIMEOUT(lookup.isFinished(), Timeout);
-#if defined(Q_OS_ANDROID)
- if (lookup.errorString() == QStringLiteral("Not yet supported on Android"))
- QEXPECT_FAIL("", "Not yet supported on Android", Abort);
-#endif
+ auto extraErrorMsg = [&] () {
+ QString result;
+ QTextStream str(&result);
+ str << "Actual error: " << lookup.error();
+ if (QString errorString = lookup.errorString(); !errorString.isEmpty())
+ str << " (" << errorString << ')';
+ str << ", expected: " << error;
+ str << ", domain: " << domain;
+ if (!cname.isEmpty())
+ str << ", cname: " << cname;
+ str << ", host: " << host;
+ if (!srv.isEmpty())
+ str << " server: " << srv;
+ if (!mx.isEmpty())
+ str << " mx: " << mx;
+ if (!ns.isEmpty())
+ str << " ns: " << ns;
+ if (!ptr.isEmpty())
+ str << " ptr: " << ptr;
+ return result.toLocal8Bit();
+ };
+
+ if (!dnsServersMustWork && (lookup.error() == QDnsLookup::ServerFailureError
+ || lookup.error() == QDnsLookup::ServerRefusedError
+ || lookup.error() == QDnsLookup::TimeoutError)) {
+ // It's not a QDnsLookup problem if the server refuses to answer the query.
+ // This happens for queries of type ANY through Dnsmasq, for example.
+ qWarning("Server refused or was unable to answer query; %s", extraErrorMsg().constData());
+ return;
+ }
- QVERIFY2(int(lookup.error()) == error,
- msgDnsLookup(lookup.error(), error, domain, cname, host, srv, mx, ns, ptr, lookup.errorString()));
+ QVERIFY2(int(lookup.error()) == error, extraErrorMsg());
if (error == QDnsLookup::NoError)
QVERIFY(lookup.errorString().isEmpty());
QCOMPARE(int(lookup.type()), type);
@@ -252,7 +383,8 @@ void tst_QDnsLookup::lookup()
// host addresses
const QString hostName = cname.isEmpty() ? domain : cname;
QStringList addresses;
- foreach (const QDnsHostAddressRecord &record, lookup.hostAddressRecords()) {
+ const auto records = lookup.hostAddressRecords();
+ for (const QDnsHostAddressRecord &record : records) {
//reply may include A & AAAA records for nameservers, ignore them and only look at records matching the query
if (record.name() == hostName)
addresses << record.value().toString().toLower();
@@ -262,7 +394,8 @@ void tst_QDnsLookup::lookup()
// mail exchanges
QStringList mailExchanges;
- foreach (const QDnsMailExchangeRecord &record, lookup.mailExchangeRecords()) {
+ const auto mailRecords = lookup.mailExchangeRecords();
+ for (const QDnsMailExchangeRecord &record : mailRecords) {
QCOMPARE(record.name(), domain);
mailExchanges << QString::number(record.preference()) + QLatin1Char(' ') + record.exchange();
}
@@ -271,7 +404,8 @@ void tst_QDnsLookup::lookup()
// name servers
QStringList nameServers;
- foreach (const QDnsDomainNameRecord &record, lookup.nameServerRecords()) {
+ const auto nameServerRecords = lookup.nameServerRecords();
+ for (const QDnsDomainNameRecord &record : nameServerRecords) {
//reply may include NS records for authoritative nameservers, ignore them and only look at records matching the query
if (record.name() == domain)
nameServers << record.value();
@@ -291,7 +425,8 @@ void tst_QDnsLookup::lookup()
// services
QStringList services;
- foreach (const QDnsServiceRecord &record, lookup.serviceRecords()) {
+ const auto serviceRecords = lookup.serviceRecords();
+ for (const QDnsServiceRecord &record : serviceRecords) {
QCOMPARE(record.name(), domain);
services << (QString::number(record.priority()) + QLatin1Char(' ')
+ QString::number(record.weight()) + QLatin1Char(' ')
@@ -302,10 +437,12 @@ void tst_QDnsLookup::lookup()
// text
QStringList texts;
- foreach (const QDnsTextRecord &record, lookup.textRecords()) {
+ const auto textRecords = lookup.textRecords();
+ for (const QDnsTextRecord &record : textRecords) {
QCOMPARE(record.name(), domain);
QString text;
- foreach (const QByteArray &ba, record.values()) {
+ const auto values = record.values();
+ for (const QByteArray &ba : values) {
if (!text.isEmpty())
text += '\0';
text += QString::fromLatin1(ba);
@@ -316,6 +453,13 @@ void tst_QDnsLookup::lookup()
QCOMPARE(texts.join(';'), txt);
}
+void tst_QDnsLookup::lookupIdn()
+{
+ usingIdnDomain = true;
+ lookup();
+ usingIdnDomain = false;
+}
+
void tst_QDnsLookup::lookupReuse()
{
QDnsLookup lookup;
@@ -326,11 +470,6 @@ void tst_QDnsLookup::lookupReuse()
lookup.lookup();
QTRY_VERIFY_WITH_TIMEOUT(lookup.isFinished(), Timeout);
-#if defined(Q_OS_ANDROID)
- if (lookup.errorString() == QStringLiteral("Not yet supported on Android"))
- QEXPECT_FAIL("", "Not yet supported on Android", Abort);
-#endif
-
QCOMPARE(int(lookup.error()), int(QDnsLookup::NoError));
QVERIFY(!lookup.hostAddressRecords().isEmpty());
QCOMPARE(lookup.hostAddressRecords().first().name(), domainName("a-single"));
@@ -367,23 +506,100 @@ void tst_QDnsLookup::lookupAbortRetry()
lookup.lookup();
QTRY_VERIFY_WITH_TIMEOUT(lookup.isFinished(), Timeout);
-#if defined(Q_OS_ANDROID)
- if (lookup.errorString() == QStringLiteral("Not yet supported on Android"))
- QEXPECT_FAIL("", "Not yet supported on Android", Abort);
-#endif
-
QCOMPARE(int(lookup.error()), int(QDnsLookup::NoError));
QVERIFY(!lookup.hostAddressRecords().isEmpty());
QCOMPARE(lookup.hostAddressRecords().first().name(), domainName("aaaa-single"));
QCOMPARE(lookup.hostAddressRecords().first().value(), QHostAddress("2001:db8::1"));
}
-void tst_QDnsLookup::bindingsAndProperties()
+void tst_QDnsLookup::setNameserverLoopback()
{
- QFETCH_GLOBAL(const QString, tld);
- if (tld == QStringLiteral("idn"))
- return;
+#ifdef Q_OS_WIN
+ // Windows doesn't like sending DNS requests to ports other than 53, so
+ // let's try it first.
+ constexpr quint16 DesiredPort = 53;
+#else
+ // Trying to bind to port 53 will fail on Unix systems unless this test is
+ // run as root, so we try mDNS's port (to help decoding in a packet capture).
+ constexpr quint16 DesiredPort = 5353; // mDNS
+#endif
+ // random loopback address so multiple copies of this test can run
+ QHostAddress desiredAddress(0x7f000000 | QRandomGenerator::system()->bounded(0xffffff));
+
+ QUdpSocket server;
+ if (!server.bind(desiredAddress, DesiredPort)) {
+ // port in use, try a random one
+ server.bind(QHostAddress::LocalHost, 0);
+ }
+ QCOMPARE(server.state(), QUdpSocket::BoundState);
+
+ QDnsLookup lookup(QDnsLookup::Type::A, u"somelabel.somedomain"_s);
+ QSignalSpy spy(&lookup, SIGNAL(finished()));
+ lookup.setNameserver(server.localAddress(), server.localPort());
+
+ // QDnsLookup is threaded, so we can answer on the main thread
+ QObject::connect(&server, &QUdpSocket::readyRead,
+ &QTestEventLoop::instance(), &QTestEventLoop::exitLoop);
+ QObject::connect(&lookup, &QDnsLookup::finished,
+ &QTestEventLoop::instance(), &QTestEventLoop::exitLoop);
+ lookup.lookup();
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QVERIFY2(spy.isEmpty(), qPrintable(lookup.errorString()));
+
+ QNetworkDatagram dgram = server.receiveDatagram();
+ QByteArray data = dgram.data();
+ QCOMPARE_GT(data.size(), HeaderSize);
+
+ quint8 opcode = (quint8(data.at(2)) >> 3) & 0xF;
+ QCOMPARE(opcode, 0); // standard query
+
+ // send an NXDOMAIN reply to release the lookup thread
+ QByteArray reply = data;
+ reply[2] = 0x80; // header->qr = true;
+ reply[3] = 3; // header->rcode = NXDOMAIN;
+ server.writeDatagram(dgram.makeReply(reply));
+ server.close();
+
+ // now check that the QDnsLookup finished
+ QTestEventLoop::instance().enterLoop(5);
+ QVERIFY(!QTestEventLoop::instance().timeout());
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(lookup.error(), QDnsLookup::NotFoundError);
+}
+void tst_QDnsLookup::setNameserver_data()
+{
+ static QList<QHostAddress> servers = systemNameservers() + globalPublicNameservers();
+ QTest::addColumn<QHostAddress>("server");
+
+ if (servers.isEmpty()) {
+ QSKIP("No reachable DNS servers were found");
+ } else {
+ for (const QHostAddress &h : std::as_const(servers))
+ QTest::addRow("%s", qUtf8Printable(h.toString())) << h;
+ }
+}
+
+void tst_QDnsLookup::setNameserver()
+{
+ QFETCH(QHostAddress, server);
+ QDnsLookup lookup;
+ lookup.setNameserver(server);
+
+ lookup.setType(QDnsLookup::Type::A);
+ lookup.setName(domainName("a-single"));
+ lookup.lookup();
+
+ QTRY_VERIFY_WITH_TIMEOUT(lookup.isFinished(), Timeout);
+ QCOMPARE(int(lookup.error()), int(QDnsLookup::NoError));
+ QVERIFY(!lookup.hostAddressRecords().isEmpty());
+ QCOMPARE(lookup.hostAddressRecords().first().name(), domainName("a-single"));
+ QCOMPARE(lookup.hostAddressRecords().first().value(), QHostAddress("192.0.2.1"));
+}
+
+void tst_QDnsLookup::bindingsAndProperties()
+{
QDnsLookup lookup;
lookup.setType(QDnsLookup::A);
@@ -392,7 +608,7 @@ void tst_QDnsLookup::bindingsAndProperties()
const QSignalSpy typeChangeSpy(&lookup, &QDnsLookup::typeChanged);
dnsTypeProp = QDnsLookup::AAAA;
- QCOMPARE(typeChangeSpy.count(), 1);
+ QCOMPARE(typeChangeSpy.size(), 1);
QCOMPARE(lookup.type(), QDnsLookup::AAAA);
dnsTypeProp.setBinding(lookup.bindableType().makeBinding());
@@ -404,7 +620,7 @@ void tst_QDnsLookup::bindingsAndProperties()
const QSignalSpy nameChangeSpy(&lookup, &QDnsLookup::nameChanged);
nameProp = QStringLiteral("a-plus-aaaa");
- QCOMPARE(nameChangeSpy.count(), 1);
+ QCOMPARE(nameChangeSpy.size(), 1);
QCOMPARE(lookup.name(), QStringLiteral("a-plus-aaaa"));
nameProp.setBinding(lookup.bindableName().makeBinding());
@@ -414,14 +630,55 @@ void tst_QDnsLookup::bindingsAndProperties()
QProperty<QHostAddress> nameserverProp;
lookup.bindableNameserver().setBinding(Qt::makePropertyBinding(nameserverProp));
const QSignalSpy nameserverChangeSpy(&lookup, &QDnsLookup::nameserverChanged);
+ const QSignalSpy nameserverPortChangeSpy(&lookup, &QDnsLookup::nameserverPortChanged);
nameserverProp = QHostAddress::LocalHost;
- QCOMPARE(nameserverChangeSpy.count(), 1);
+ QCOMPARE(nameserverChangeSpy.size(), 1);
+ QCOMPARE(nameserverPortChangeSpy.size(), 0);
QCOMPARE(lookup.nameserver(), QHostAddress::LocalHost);
nameserverProp.setBinding(lookup.bindableNameserver().makeBinding());
lookup.setNameserver(QHostAddress::Any);
QCOMPARE(nameserverProp.value(), QHostAddress::Any);
+ QCOMPARE(nameserverChangeSpy.size(), 2);
+ QCOMPARE(nameserverPortChangeSpy.size(), 0);
+
+ lookup.setNameserver(QHostAddress::LocalHostIPv6, 10053);
+ QCOMPARE(nameserverProp.value(), QHostAddress::LocalHostIPv6);
+ QCOMPARE(nameserverChangeSpy.size(), 3);
+ QCOMPARE(nameserverPortChangeSpy.size(), 1);
+}
+
+void tst_QDnsLookup::automatedBindings()
+{
+ QDnsLookup lookup;
+
+ QTestPrivate::testReadWritePropertyBasics(lookup, u"aaaa"_s, u"txt"_s, "name");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QDnsLookup::name");
+ return;
+ }
+
+ QTestPrivate::testReadWritePropertyBasics(lookup, QDnsLookup::AAAA, QDnsLookup::TXT, "type");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QDnsLookup::type");
+ return;
+ }
+
+ QTestPrivate::testReadWritePropertyBasics(lookup, QHostAddress{QHostAddress::Any},
+ QHostAddress{QHostAddress::LocalHost},
+ "nameserver");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QDnsLookup::nameserver");
+ return;
+ }
+
+ QTestPrivate::testReadWritePropertyBasics(lookup, quint16(123), quint16(456),
+ "nameserverPort");
+ if (QTest::currentTestFailed()) {
+ qDebug("Failed property test for QDnsLookup::nameserverPort");
+ return;
+ }
}
QTEST_MAIN(tst_QDnsLookup)
diff --git a/tests/auto/network/kernel/qdnslookup_appless/CMakeLists.txt b/tests/auto/network/kernel/qdnslookup_appless/CMakeLists.txt
index 1505228176..41cf19753f 100644
--- a/tests/auto/network/kernel/qdnslookup_appless/CMakeLists.txt
+++ b/tests/auto/network/kernel/qdnslookup_appless/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qdnslookup_appless.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdnslookup_appless Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdnslookup_appless LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdnslookup_appless
SOURCES
tst_qdnslookup_appless.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/kernel/qdnslookup_appless/tst_qdnslookup_appless.cpp b/tests/auto/network/kernel/qdnslookup_appless/tst_qdnslookup_appless.cpp
index 9346a82dbb..21393ee628 100644
--- a/tests/auto/network/kernel/qdnslookup_appless/tst_qdnslookup_appless.cpp
+++ b/tests/auto/network/kernel/qdnslookup_appless/tst_qdnslookup_appless.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Jeremy Lainé <jeremy.laine@m4x.org>
-** 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) 2012 Jeremy Lainé <jeremy.laine@m4x.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
#include <QtNetwork/QDnsLookup>
diff --git a/tests/auto/network/kernel/qhostaddress/CMakeLists.txt b/tests/auto/network/kernel/qhostaddress/CMakeLists.txt
index a33ae6d709..e11a600b60 100644
--- a/tests/auto/network/kernel/qhostaddress/CMakeLists.txt
+++ b/tests/auto/network/kernel/qhostaddress/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qhostaddress.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qhostaddress Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qhostaddress LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qhostaddress
SOURCES
tst_qhostaddress.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::NetworkPrivate
)
@@ -15,6 +22,6 @@ qt_internal_add_test(tst_qhostaddress
#####################################################################
qt_internal_extend_target(tst_qhostaddress CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
ws2_32
)
diff --git a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp
index 78f072fb54..18d1c04a85 100644
--- a/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp
+++ b/tests/auto/network/kernel/qhostaddress/tst_qhostaddress.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qhostaddress.h>
#include <private/qhostaddress_p.h>
@@ -40,7 +15,7 @@
# include <qt_windows.h>
#endif
-#ifdef Q_OS_ANDROID
+#if defined(Q_OS_ANDROID) || defined(Q_OS_WASM) || defined(Q_OS_VXWORKS)
# include <netinet/in.h>
#endif
@@ -351,6 +326,12 @@ void tst_QHostAddress::isEqual_data()
QTest::newRow("anyv6-anyv4-local") << QHostAddress(QHostAddress::AnyIPv6) << QHostAddress(QHostAddress::AnyIPv4) << (int)QHostAddress::ConvertLocalHost << false;
QTest::newRow("any-anyv4-local") << QHostAddress(QHostAddress::Any) << QHostAddress(QHostAddress::AnyIPv4) << (int)QHostAddress::ConvertLocalHost << false;
QTest::newRow("any-anyv6-local") << QHostAddress(QHostAddress::Any) << QHostAddress(QHostAddress::AnyIPv6) << (int)QHostAddress::ConvertLocalHost << false;
+ QTest::newRow("localhostv6-any-tolerant") << QHostAddress(QHostAddress::LocalHostIPv6) << QHostAddress(QHostAddress::Any) << (int)QHostAddress::TolerantConversion << false;
+ QTest::newRow("localhostv4-any-tolerant") << QHostAddress(QHostAddress::LocalHost) << QHostAddress(QHostAddress::Any) << (int)QHostAddress::TolerantConversion << false;
+ QTest::newRow("localhostv6-anyv6-tolerant") << QHostAddress(QHostAddress::LocalHostIPv6) << QHostAddress(QHostAddress::AnyIPv6) << (int)QHostAddress::TolerantConversion << false;
+ QTest::newRow("localhostv4-anyv6-tolerant") << QHostAddress(QHostAddress::LocalHost) << QHostAddress(QHostAddress::AnyIPv6) << (int)QHostAddress::TolerantConversion << false;
+ QTest::newRow("localhostv6-anyv4-tolerant") << QHostAddress(QHostAddress::LocalHostIPv6) << QHostAddress(QHostAddress::AnyIPv4) << (int)QHostAddress::TolerantConversion << false;
+ QTest::newRow("localhostv4-anyv4-tolerant") << QHostAddress(QHostAddress::LocalHost) << QHostAddress(QHostAddress::AnyIPv4) << (int)QHostAddress::TolerantConversion << false;
}
void tst_QHostAddress::isEqual()
@@ -722,6 +703,7 @@ void tst_QHostAddress::classification()
bool isUniqueLocalAddress = (result == UniqueLocalAddress);
bool isMulticast = (result == MulticastAddress);
bool isBroadcast = (result == BroadcastAddress);
+ bool isPrivateUse = (result == PrivateNetworkAddress || result == UniqueLocalAddress);
QCOMPARE(address.isLoopback(), isLoopback);
QCOMPARE(address.isGlobal(), isGlobal);
@@ -730,6 +712,7 @@ void tst_QHostAddress::classification()
QCOMPARE(address.isUniqueLocalUnicast(), isUniqueLocalAddress);
QCOMPARE(address.isMulticast(), isMulticast);
QCOMPARE(address.isBroadcast(), isBroadcast);
+ QCOMPARE(address.isPrivateUse(), isPrivateUse);
}
void tst_QHostAddress::convertv4v6_data()
diff --git a/tests/auto/network/kernel/qhostinfo/CMakeLists.txt b/tests/auto/network/kernel/qhostinfo/CMakeLists.txt
index 40e0456d5f..dc7ab3b221 100644
--- a/tests/auto/network/kernel/qhostinfo/CMakeLists.txt
+++ b/tests/auto/network/kernel/qhostinfo/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qhostinfo.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_qhostinfo LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -11,18 +18,15 @@ endif()
qt_internal_add_test(tst_qhostinfo
SOURCES
tst_qhostinfo.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
)
-#### Keys ignored in scope 1:.:.:qhostinfo.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qhostinfo CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
ws2_32
)
diff --git a/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp b/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp
index 98644933fd..bd4bb7ef81 100644
--- a/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp
+++ b/tests/auto/network/kernel/qhostinfo/tst_qhostinfo.cpp
@@ -1,76 +1,52 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// When using WinSock2 on Windows, it's the first thing that can be included
// (except qglobal.h), or else you'll get tons of compile errors
#include <qglobal.h>
-// To prevent windows system header files from re-defining min/max
-#define NOMINMAX 1
-
#if defined(Q_OS_WIN)
# include <winsock2.h>
# include <ws2tcpip.h>
#endif
-#include <QTest>
-#include <QTestEventLoop>
-#include <QProcess>
+#include <qhostinfo.h>
+#include "private/qhostinfo_p.h"
+#include "private/qnativesocketengine_p.h"
+
#include <QCoreApplication>
#include <QDebug>
-#include <QTcpSocket>
#include <QTcpServer>
+#include <QTcpSocket>
+#include <QTest>
+#include <QTestEventLoop>
#include <private/qthread_p.h>
-#include <time.h>
+#include <sys/types.h>
+
#if defined(Q_OS_WIN)
-#include <qt_windows.h>
+# include <qt_windows.h>
+# ifdef gai_strerror
+# undef gai_strerror
+# define gai_strerror gai_strerrorA
+# endif
#else
-#include <unistd.h>
-#include <signal.h>
-#endif
-
-#include <qhostinfo.h>
-#include "private/qhostinfo_p.h"
-
-#include <sys/types.h>
-#if defined(Q_OS_UNIX)
-# include <sys/socket.h>
# include <netdb.h>
+# include <sys/socket.h>
+# include <unistd.h>
+#endif
+#ifndef NI_MAXHOST
+# define NI_MAXHOST 1025
#endif
#include "../../../network-settings.h"
#define TEST_DOMAIN ".test.qt-project.org"
+using namespace std::chrono_literals;
class tst_QHostInfo : public QObject
{
@@ -109,15 +85,55 @@ private slots:
void cache();
void abortHostLookup();
-protected slots:
- void resultsReady(const QHostInfo &);
private:
bool ipv6LookupsAvailable;
bool ipv6Available;
- bool lookupDone;
- int lookupsDoneCounter;
+};
+
+class tst_QHostInfo_Helper : public QObject
+{
+ Q_OBJECT
+protected slots:
+ void resultsReady(const QHostInfo &);
+public:
+ tst_QHostInfo_Helper(const QString &hostname)
+ : hostname(hostname)
+ {}
+
+ QString hostname;
+ bool lookupDone = false;
+ int lookupsDoneCounter = 0;
QHostInfo lookupResults;
+
+ void blockingLookup()
+ {
+ lookupResults = QHostInfo::fromName(hostname);
+ lookupDone = true;
+ ++lookupsDoneCounter;
+ }
+ void lookupHostOldStyle()
+ {
+ QHostInfo::lookupHost(hostname, this, SLOT(resultsReady(QHostInfo)));
+ }
+ void lookupHostNewStyle()
+ {
+ QHostInfo::lookupHost(hostname, this, &tst_QHostInfo_Helper::resultsReady);
+ }
+ void lookupHostLambda()
+ {
+ QHostInfo::lookupHost(hostname, this, [this](const QHostInfo &hostInfo) {
+ resultsReady(hostInfo);
+ });
+ }
+
+ bool waitForResults(std::chrono::milliseconds timeout = 15s)
+ {
+ QTestEventLoop::instance().enterLoop(timeout);
+ return !QTestEventLoop::instance().timeout() && lookupDone;
+ }
+
+ void checkResults(QHostInfo::HostInfoError err, const QString &addresses);
};
void tst_QHostInfo::swapFunction()
@@ -233,26 +249,15 @@ void tst_QHostInfo::lookupIPv4_data()
QTest::newRow("idn-unicode") << QString::fromLatin1("a-single.alqualond\353" TEST_DOMAIN) << "192.0.2.1" << int(QHostInfo::NoError);
}
-void tst_QHostInfo::lookupIPv4()
+void tst_QHostInfo_Helper::checkResults(QHostInfo::HostInfoError err, const QString &addresses)
{
- QFETCH(QString, hostname);
- QFETCH(int, err);
- QFETCH(QString, addresses);
-
- lookupDone = false;
- QHostInfo::lookupHost(hostname, this, SLOT(resultsReady(QHostInfo)));
-
- QTestEventLoop::instance().enterLoop(10);
- QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(lookupDone);
-
if ((int)lookupResults.error() != (int)err) {
qWarning() << hostname << "=>" << lookupResults.errorString();
}
- QCOMPARE((int)lookupResults.error(), (int)err);
+ QCOMPARE(lookupResults.error(), err);
QStringList tmp;
- for (int i = 0; i < lookupResults.addresses().count(); ++i)
+ for (int i = 0; i < lookupResults.addresses().size(); ++i)
tmp.append(lookupResults.addresses().at(i).toString());
tmp.sort();
@@ -262,6 +267,18 @@ void tst_QHostInfo::lookupIPv4()
QCOMPARE(tmp.join(' '), expected.join(' '));
}
+void tst_QHostInfo::lookupIPv4()
+{
+ QFETCH(QString, hostname);
+ QFETCH(int, err);
+ QFETCH(QString, addresses);
+
+ tst_QHostInfo_Helper helper(hostname);
+ helper.lookupHostOldStyle();
+ QVERIFY(helper.waitForResults());
+ helper.checkResults(QHostInfo::HostInfoError(err), addresses);
+}
+
void tst_QHostInfo::lookupIPv6_data()
{
QTest::addColumn<QString>("hostname");
@@ -287,24 +304,10 @@ void tst_QHostInfo::lookupIPv6()
if (!ipv6LookupsAvailable)
QSKIP("This platform does not support IPv6 lookups");
- lookupDone = false;
- QHostInfo::lookupHost(hostname, this, SLOT(resultsReady(QHostInfo)));
-
- QTestEventLoop::instance().enterLoop(10);
- QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(lookupDone);
-
- QCOMPARE((int)lookupResults.error(), (int)err);
-
- QStringList tmp;
- for (int i = 0; i < lookupResults.addresses().count(); ++i)
- tmp.append(lookupResults.addresses().at(i).toString());
- tmp.sort();
-
- QStringList expected = addresses.split(' ');
- expected.sort();
-
- QCOMPARE(tmp.join(' ').toLower(), expected.join(' ').toLower());
+ tst_QHostInfo_Helper helper(hostname);
+ helper.lookupHostOldStyle();
+ QVERIFY(helper.waitForResults());
+ helper.checkResults(QHostInfo::HostInfoError(err), addresses);
}
void tst_QHostInfo::lookupConnectToFunctionPointer_data()
@@ -318,26 +321,10 @@ void tst_QHostInfo::lookupConnectToFunctionPointer()
QFETCH(int, err);
QFETCH(QString, addresses);
- lookupDone = false;
- QHostInfo::lookupHost(hostname, this, &tst_QHostInfo::resultsReady);
-
- QTestEventLoop::instance().enterLoop(10);
- QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(lookupDone);
-
- if (int(lookupResults.error()) != int(err))
- qWarning() << hostname << "=>" << lookupResults.errorString();
- QCOMPARE(int(lookupResults.error()), int(err));
-
- QStringList tmp;
- for (const auto &result : lookupResults.addresses())
- tmp.append(result.toString());
- tmp.sort();
-
- QStringList expected = addresses.split(' ');
- expected.sort();
-
- QCOMPARE(tmp.join(' '), expected.join(' '));
+ tst_QHostInfo_Helper helper(hostname);
+ helper.lookupHostNewStyle();
+ QVERIFY(helper.waitForResults());
+ helper.checkResults(QHostInfo::HostInfoError(err), addresses);
}
void tst_QHostInfo::lookupConnectToFunctionPointerDeleted()
@@ -362,89 +349,38 @@ void tst_QHostInfo::lookupConnectToLambda()
QFETCH(int, err);
QFETCH(QString, addresses);
- lookupDone = false;
- QHostInfo::lookupHost(hostname, [this](const QHostInfo &hostInfo) {
- resultsReady(hostInfo);
- });
-
- QTestEventLoop::instance().enterLoop(10);
- QVERIFY(!QTestEventLoop::instance().timeout());
- QVERIFY(lookupDone);
-
- if (int(lookupResults.error()) != int(err))
- qWarning() << hostname << "=>" << lookupResults.errorString();
- QCOMPARE(int(lookupResults.error()), int(err));
-
- QStringList tmp;
- for (int i = 0; i < lookupResults.addresses().count(); ++i)
- tmp.append(lookupResults.addresses().at(i).toString());
- tmp.sort();
-
- QStringList expected = addresses.split(' ');
- expected.sort();
-
- QCOMPARE(tmp.join(' '), expected.join(' '));
+ tst_QHostInfo_Helper helper(hostname);
+ helper.lookupHostLambda();
+ QVERIFY(helper.waitForResults());
+ helper.checkResults(QHostInfo::HostInfoError(err), addresses);
}
static QStringList reverseLookupHelper(const QString &ip)
{
QStringList results;
-
- const QString pythonCode =
- "import socket;"
- "import sys;"
- "print (socket.getnameinfo((sys.argv[1], 0), 0)[0]);";
-
- QList<QByteArray> lines;
- QProcess python;
- python.setProcessChannelMode(QProcess::ForwardedErrorChannel);
- python.start("python", QStringList() << QString("-c") << pythonCode << ip);
- if (python.waitForFinished()) {
- if (python.exitStatus() == QProcess::NormalExit && python.exitCode() == 0)
- lines = python.readAllStandardOutput().split('\n');
- for (QByteArray line : lines) {
- if (!line.isEmpty())
- results << line.trimmed();
- }
- if (!results.isEmpty())
- return results;
- }
-
- qDebug() << "Python failed, falling back to nslookup";
- QProcess lookup;
- lookup.setProcessChannelMode(QProcess::ForwardedErrorChannel);
- lookup.start("nslookup", QStringList(ip));
- if (!lookup.waitForFinished()) {
- results << "nslookup failure";
- qDebug() << "nslookup failure";
+ union qt_sockaddr {
+ sockaddr a;
+ sockaddr_in a4;
+ sockaddr_in6 a6;
+ } sa = {};
+
+ QHostAddress addr(ip);
+ if (addr.isNull()) {
+ qWarning("Could not parse IP address: %ls", qUtf16Printable(ip));
return results;
}
- lines = lookup.readAllStandardOutput().split('\n');
-
- QByteArray name;
-
- const QByteArray nameMarkerNix("name =");
- const QByteArray nameMarkerWin("Name:");
- const QByteArray addressMarkerWin("Address:");
-
- for (QByteArray line : lines) {
- int index = -1;
- if ((index = line.indexOf(nameMarkerNix)) != -1) { // Linux and macOS
- name = line.mid(index + nameMarkerNix.length()).chopped(1).trimmed();
- results << name;
- } else if (line.startsWith(nameMarkerWin)) { // Windows formatting
- name = line.mid(line.lastIndexOf(" ")).trimmed();
- } else if (line.startsWith(addressMarkerWin)) {
- QByteArray address = line.mid(addressMarkerWin.length()).trimmed();
- if (address == ip.toUtf8()) {
- results << name;
- }
- }
- }
- if (results.isEmpty()) {
- qDebug() << "Failure to parse nslookup output: " << lines;
+ // from qnativesocketengine_p.h:
+ QT_SOCKLEN_T len = setSockaddr(&sa.a, addr, /*port = */ 0);
+
+ QByteArray name(NI_MAXHOST, Qt::Uninitialized);
+ int ni_flags = NI_NAMEREQD | NI_NUMERICSERV;
+ if (int r = getnameinfo(&sa.a, len, name.data(), name.size(), nullptr, 0, ni_flags)) {
+ qWarning("Failed to reverse look up '%ls': %s", qUtf16Printable(ip), gai_strerror(r));
+ } else {
+ results << QString::fromLatin1(name, qstrnlen(name, name.size()));
}
+
return results;
}
@@ -457,8 +393,10 @@ void tst_QHostInfo::reverseLookup_data()
QTest::newRow("dns.google") << QString("8.8.8.8") << reverseLookupHelper("8.8.8.8") << 0 << false;
QTest::newRow("one.one.one.one") << QString("1.1.1.1") << reverseLookupHelper("1.1.1.1") << 0 << false;
- QTest::newRow("dns.google IPv6") << QString("2001:4860:4860::8888") << reverseLookupHelper("2001:4860:4860::8888") << 0 << true;
- QTest::newRow("cloudflare IPv6") << QString("2606:4700:4700::1111") << reverseLookupHelper("2606:4700:4700::1111") << 0 << true;
+ if (QStringList hostNames = reverseLookupHelper("2001:4860:4860::8888"); !hostNames.isEmpty())
+ QTest::newRow("dns.google IPv6") << QString("2001:4860:4860::8888") << std::move(hostNames) << 0 << true;
+ if (QStringList hostNames = reverseLookupHelper("2606:4700:4700::1111"); !hostNames.isEmpty())
+ QTest::newRow("cloudflare IPv6") << QString("2606:4700:4700::1111") << std::move(hostNames) << 0 << true;
QTest::newRow("bogus-name IPv6") << QString("1::2::3::4") << QStringList() << 1 << true;
}
@@ -467,11 +405,6 @@ void tst_QHostInfo::reverseLookup()
QFETCH(QString, address);
QFETCH(QStringList, hostNames);
QFETCH(int, err);
- QFETCH(bool, ipv6);
-
- if (ipv6 && !ipv6LookupsAvailable) {
- QSKIP("IPv6 reverse lookups are not supported on this platform");
- }
QHostInfo info = QHostInfo::fromName(address);
@@ -479,7 +412,7 @@ void tst_QHostInfo::reverseLookup()
if (!hostNames.contains(info.hostName()))
qDebug() << "Failure: expecting" << hostNames << ",got " << info.hostName();
QVERIFY(hostNames.contains(info.hostName()));
- QCOMPARE(info.addresses().first(), QHostAddress(address));
+ QCOMPARE(info.addresses().constFirst(), QHostAddress(address));
} else {
QCOMPARE(info.hostName(), address);
QCOMPARE(info.error(), QHostInfo::HostNotFound);
@@ -500,21 +433,9 @@ void tst_QHostInfo::blockingLookup()
QFETCH(int, err);
QFETCH(QString, addresses);
- QHostInfo hostInfo = QHostInfo::fromName(hostname);
- QStringList tmp;
- for (int i = 0; i < hostInfo.addresses().count(); ++i)
- tmp.append(hostInfo.addresses().at(i).toString());
- tmp.sort();
-
- if ((int)hostInfo.error() != (int)err) {
- qWarning() << hostname << "=>" << lookupResults.errorString();
- }
- QCOMPARE((int)hostInfo.error(), (int)err);
-
- QStringList expected = addresses.split(' ');
- expected.sort();
-
- QCOMPARE(tmp.join(' ').toUpper(), expected.join(' ').toUpper());
+ tst_QHostInfo_Helper helper(hostname);
+ helper.blockingLookup();
+ helper.checkResults(QHostInfo::HostInfoError(err), addresses);
}
void tst_QHostInfo::raceCondition()
@@ -531,8 +452,9 @@ protected:
inline void run() override
{
QHostInfo info = QHostInfo::fromName("a-single" TEST_DOMAIN);
+ QCOMPARE(info.errorString(), "Unknown error"); // no error
QCOMPARE(info.error(), QHostInfo::NoError);
- QVERIFY(info.addresses().count() > 0);
+ QVERIFY(info.addresses().size() > 0);
QCOMPARE(info.addresses().at(0).toString(), QString("192.0.2.1"));
}
};
@@ -579,24 +501,22 @@ void tst_QHostInfo::threadSafetyAsynchronousAPI()
{
const int nattempts = 10;
const int lookupsperthread = 10;
- QList<QThread*> threads;
- QList<LookupReceiver*> receivers;
+ QThread threads[nattempts];
+ LookupReceiver receivers[nattempts];
for (int i = 0; i < nattempts; ++i) {
- QThread* thread = new QThread;
- LookupReceiver* receiver = new LookupReceiver;
+ QThread *thread = &threads[i];
+ LookupReceiver *receiver = &receivers[i];
receiver->numrequests = lookupsperthread;
- receivers.append(receiver);
receiver->moveToThread(thread);
connect(thread, SIGNAL(started()), receiver, SLOT(start()));
thread->start();
- threads.append(thread);
}
- for (int k = threads.count() - 1; k >= 0; --k)
- QVERIFY(threads.at(k)->wait(60000));
- foreach (LookupReceiver* receiver, receivers) {
- QCOMPARE(receiver->result.error(), QHostInfo::NoError);
- QCOMPARE(receiver->result.addresses().at(0).toString(), QString("192.0.2.1"));
- QCOMPARE(receiver->numrequests, 0);
+ for (int k = nattempts - 1; k >= 0; --k)
+ QVERIFY(threads[k].wait(60000));
+ for (LookupReceiver &receiver : receivers) {
+ QCOMPARE(receiver.result.error(), QHostInfo::NoError);
+ QCOMPARE(receiver.result.addresses().at(0).toString(), QString("192.0.2.1"));
+ QCOMPARE(receiver.numrequests, 0);
}
}
@@ -605,17 +525,11 @@ void tst_QHostInfo::threadSafetyAsynchronousAPI()
void tst_QHostInfo::multipleSameLookups()
{
const int COUNT = 10;
- lookupsDoneCounter = 0;
-
+ tst_QHostInfo_Helper helper("localhost");
for (int i = 0; i < COUNT; i++)
- QHostInfo::lookupHost("localhost", this, SLOT(resultsReady(QHostInfo)));
+ helper.lookupHostOldStyle();
- QElapsedTimer timer;
- timer.start();
- while (timer.elapsed() < 10000 && lookupsDoneCounter < COUNT) {
- QTestEventLoop::instance().enterLoop(2);
- }
- QCOMPARE(lookupsDoneCounter, COUNT);
+ QTRY_COMPARE_WITH_TIMEOUT(helper.lookupsDoneCounter, COUNT, 10s);
}
// this test is for the multi-threaded QHostInfo rewrite. It is about getting results at all,
@@ -644,19 +558,15 @@ void tst_QHostInfo::multipleDifferentLookups()
QFETCH(int, repeats);
const int COUNT = hostnameList.size();
- lookupsDoneCounter = 0;
+ tst_QHostInfo_Helper helper(QString{});
for (int i = 0; i < hostnameList.size(); i++)
- for (int j = 0; j < repeats; ++j)
- QHostInfo::lookupHost(hostnameList.at(i), this, SLOT(resultsReady(QHostInfo)));
-
- QElapsedTimer timer;
- timer.start();
- while (timer.elapsed() < 60000 && lookupsDoneCounter < repeats*COUNT) {
- QTestEventLoop::instance().enterLoop(2);
- //qDebug() << "t:" << timer.elapsed();
- }
- QCOMPARE(lookupsDoneCounter, repeats*COUNT);
+ for (int j = 0; j < repeats; ++j) {
+ helper.hostname = hostnameList.at(i);
+ helper.lookupHostOldStyle();
+ }
+
+ QTRY_COMPARE_WITH_TIMEOUT(helper.lookupsDoneCounter, repeats*COUNT, 60s);
}
void tst_QHostInfo::cache()
@@ -665,13 +575,12 @@ void tst_QHostInfo::cache()
if (!cache)
return; // test makes only sense when cache enabled
- // reset slot counter
- lookupsDoneCounter = 0;
+ tst_QHostInfo_Helper helper("localhost");
// lookup once, wait in event loop, result should not come directly.
bool valid = true;
int id = -1;
- QHostInfo result = qt_qhostinfo_lookup("localhost", this, SLOT(resultsReady(QHostInfo)), &valid, &id);
+ QHostInfo result = qt_qhostinfo_lookup(helper.hostname, &helper, SLOT(resultsReady(QHostInfo)), &valid, &id);
QTestEventLoop::instance().enterLoop(5);
QVERIFY(!QTestEventLoop::instance().timeout());
QVERIFY(!valid);
@@ -679,7 +588,7 @@ void tst_QHostInfo::cache()
// loopkup second time, result should come directly
valid = false;
- result = qt_qhostinfo_lookup("localhost", this, SLOT(resultsReady(QHostInfo)), &valid, &id);
+ result = qt_qhostinfo_lookup(helper.hostname, &helper, SLOT(resultsReady(QHostInfo)), &valid, &id);
QVERIFY(valid);
QVERIFY(!result.addresses().isEmpty());
@@ -688,17 +597,17 @@ void tst_QHostInfo::cache()
// lookup third time, result should not come directly.
valid = true;
- result = qt_qhostinfo_lookup("localhost", this, SLOT(resultsReady(QHostInfo)), &valid, &id);
+ result = qt_qhostinfo_lookup(helper.hostname, &helper, SLOT(resultsReady(QHostInfo)), &valid, &id);
QTestEventLoop::instance().enterLoop(5);
QVERIFY(!QTestEventLoop::instance().timeout());
QVERIFY(!valid);
QVERIFY(result.addresses().isEmpty());
// the slot should have been called 2 times.
- QCOMPARE(lookupsDoneCounter, 2);
+ QCOMPARE(helper.lookupsDoneCounter, 2);
}
-void tst_QHostInfo::resultsReady(const QHostInfo &hi)
+void tst_QHostInfo_Helper::resultsReady(const QHostInfo &hi)
{
QVERIFY(QThread::currentThread() == thread());
lookupDone = true;
@@ -709,16 +618,15 @@ void tst_QHostInfo::resultsReady(const QHostInfo &hi)
void tst_QHostInfo::abortHostLookup()
{
- //reset counter
- lookupsDoneCounter = 0;
+ tst_QHostInfo_Helper helper("a-single" TEST_DOMAIN);
bool valid = false;
int id = -1;
- QHostInfo result = qt_qhostinfo_lookup("a-single" TEST_DOMAIN, this, SLOT(resultsReady(QHostInfo)), &valid, &id);
+ QHostInfo result = qt_qhostinfo_lookup(helper.hostname, &helper, SLOT(resultsReady(QHostInfo)), &valid, &id);
QVERIFY(!valid);
//it is assumed that the DNS request/response in the backend is slower than it takes to call abort
QHostInfo::abortHostLookup(id);
QTestEventLoop::instance().enterLoop(5);
- QCOMPARE(lookupsDoneCounter, 0);
+ QCOMPARE(helper.lookupsDoneCounter, 0);
}
class LookupAborter : public QObject
diff --git a/tests/auto/network/kernel/qnetworkaddressentry/CMakeLists.txt b/tests/auto/network/kernel/qnetworkaddressentry/CMakeLists.txt
index bc9463aa13..02bf37880a 100644
--- a/tests/auto/network/kernel/qnetworkaddressentry/CMakeLists.txt
+++ b/tests/auto/network/kernel/qnetworkaddressentry/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qnetworkaddressentry.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkaddressentry Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkaddressentry LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkaddressentry
SOURCES
tst_qnetworkaddressentry.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/kernel/qnetworkaddressentry/tst_qnetworkaddressentry.cpp b/tests/auto/network/kernel/qnetworkaddressentry/tst_qnetworkaddressentry.cpp
index 097d53caf5..801eb58931 100644
--- a/tests/auto/network/kernel/qnetworkaddressentry/tst_qnetworkaddressentry.cpp
+++ b/tests/auto/network/kernel/qnetworkaddressentry/tst_qnetworkaddressentry.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 <QTest>
diff --git a/tests/auto/network/kernel/qnetworkdatagram/CMakeLists.txt b/tests/auto/network/kernel/qnetworkdatagram/CMakeLists.txt
index 13dcbcb2e3..5bfc2edc6a 100644
--- a/tests/auto/network/kernel/qnetworkdatagram/CMakeLists.txt
+++ b/tests/auto/network/kernel/qnetworkdatagram/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qnetworkdatagram.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkdatagram Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkdatagram LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkdatagram
SOURCES
tst_qnetworkdatagram.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/kernel/qnetworkdatagram/tst_qnetworkdatagram.cpp b/tests/auto/network/kernel/qnetworkdatagram/tst_qnetworkdatagram.cpp
index a15272caa6..df473133a6 100644
--- a/tests/auto/network/kernel/qnetworkdatagram/tst_qnetworkdatagram.cpp
+++ b/tests/auto/network/kernel/qnetworkdatagram/tst_qnetworkdatagram.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QNetworkDatagram>
#include <QTest>
diff --git a/tests/auto/network/kernel/qnetworkinformation/CMakeLists.txt b/tests/auto/network/kernel/qnetworkinformation/CMakeLists.txt
index f0c37913a8..354cefc993 100644
--- a/tests/auto/network/kernel/qnetworkinformation/CMakeLists.txt
+++ b/tests/auto/network/kernel/qnetworkinformation/CMakeLists.txt
@@ -1,6 +1,15 @@
+# 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_qnetworkinformation LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkinformation
SOURCES
tst_qnetworkinformation.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::NetworkPrivate
)
diff --git a/tests/auto/network/kernel/qnetworkinformation/tst_qnetworkinformation.cpp b/tests/auto/network/kernel/qnetworkinformation/tst_qnetworkinformation.cpp
index e37db514e3..daf81823e8 100644
--- a/tests/auto/network/kernel/qnetworkinformation/tst_qnetworkinformation.cpp
+++ b/tests/auto/network/kernel/qnetworkinformation/tst_qnetworkinformation.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtNetwork/private/qnetworkinformation_p.h>
#include <QtNetwork/qnetworkinformation.h>
@@ -135,10 +110,10 @@ void tst_QNetworkInformation::initTestCase()
auto backends = QNetworkInformation::availableBackends();
QVERIFY(backends.size() > prevBackends.size());
QVERIFY(backends.contains(u"mock"));
- QVERIFY(QNetworkInformation::load(u"mock"));
- QVERIFY(QNetworkInformation::load(u"mock"));
- QVERIFY(QNetworkInformation::load(u"mOcK"));
- QVERIFY(!QNetworkInformation::load(u"mocks"));
+ QVERIFY(QNetworkInformation::loadBackendByName(u"mock"));
+ QVERIFY(QNetworkInformation::loadBackendByName(u"mock"));
+ QVERIFY(QNetworkInformation::loadBackendByName(u"mOcK"));
+ QVERIFY(!QNetworkInformation::loadBackendByName(u"mocks"));
}
void tst_QNetworkInformation::cleanupTestCase()
@@ -266,14 +241,14 @@ void tst_QNetworkInformation::isMetered()
QSignalSpy spy(info, &QNetworkInformation::isMeteredChanged);
QVERIFY(!info->isMetered());
MockBackend::setNewMetered(true);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(info->isMetered());
QVERIFY(spy[0][0].toBool());
spy.clear();
// Set the same value again, signal should not be emitted again
MockBackend::setNewMetered(true);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
QTEST_MAIN(tst_QNetworkInformation);
diff --git a/tests/auto/network/kernel/qnetworkinformation_appless/CMakeLists.txt b/tests/auto/network/kernel/qnetworkinformation_appless/CMakeLists.txt
index 76cbf594c3..d4a2e486bd 100644
--- a/tests/auto/network/kernel/qnetworkinformation_appless/CMakeLists.txt
+++ b/tests/auto/network/kernel/qnetworkinformation_appless/CMakeLists.txt
@@ -1,6 +1,15 @@
+# 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_qnetworkinformation_appless LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkinformation_appless
SOURCES
tst_qnetworkinformation_appless.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/kernel/qnetworkinformation_appless/tst_qnetworkinformation_appless.cpp b/tests/auto/network/kernel/qnetworkinformation_appless/tst_qnetworkinformation_appless.cpp
index ff058e8a9b..b08843314a 100644
--- a/tests/auto/network/kernel/qnetworkinformation_appless/tst_qnetworkinformation_appless.cpp
+++ b/tests/auto/network/kernel/qnetworkinformation_appless/tst_qnetworkinformation_appless.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/qcoreapplication.h>
#include <QtNetwork/qnetworkinformation.h>
@@ -48,7 +23,7 @@ void tst_QNetworkInformation_appless::reinit()
if (QNetworkInformation::availableBackends().isEmpty())
QSKIP("No backends available!");
- QVERIFY(QNetworkInformation::load(QNetworkInformation::Feature::Reachability));
+ QVERIFY(QNetworkInformation::loadDefaultBackend());
auto info = QNetworkInformation::instance();
QVERIFY(info);
}
@@ -57,7 +32,7 @@ void tst_QNetworkInformation_appless::reinit()
{
QCoreApplication app(argc, argv);
- QVERIFY(QNetworkInformation::load(QNetworkInformation::Feature::Reachability));
+ QVERIFY(QNetworkInformation::loadDefaultBackend());
auto info = QNetworkInformation::instance();
QVERIFY(info);
}
diff --git a/tests/auto/network/kernel/qnetworkinterface/CMakeLists.txt b/tests/auto/network/kernel/qnetworkinterface/CMakeLists.txt
index 0c667781e9..3e5dab63e0 100644
--- a/tests/auto/network/kernel/qnetworkinterface/CMakeLists.txt
+++ b/tests/auto/network/kernel/qnetworkinterface/CMakeLists.txt
@@ -1,12 +1,20 @@
-# Generated from qnetworkinterface.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkinterface Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkinterface LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkinterface
SOURCES
tst_qnetworkinterface.cpp
- PUBLIC_LIBRARIES
- Qt::Network
+ LIBRARIES
+ Qt::NetworkPrivate
+ QT_TEST_SERVER_LIST "apache2"
)
diff --git a/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp b/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp
index e18c50afbd..141ca25021 100644
--- a/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp
+++ b/tests/auto/network/kernel/qnetworkinterface/tst_qnetworkinterface.cpp
@@ -1,41 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtEndian>
+#include <QSet>
#include <qcoreapplication.h>
#include <qnetworkinterface.h>
#include <qudpsocket.h>
#include "../../../network-settings.h"
+#include <private/qtnetwork-config_p.h>
+
Q_DECLARE_METATYPE(QHostAddress)
class tst_QNetworkInterface : public QObject
@@ -59,6 +36,8 @@ private slots:
void interfaceFromXXX_data();
void interfaceFromXXX();
void copyInvalidInterface();
+private:
+ bool hasNetworkServer = false;
};
tst_QNetworkInterface::tst_QNetworkInterface()
@@ -71,22 +50,29 @@ tst_QNetworkInterface::~tst_QNetworkInterface()
bool tst_QNetworkInterface::isIPv6Working()
{
- QUdpSocket socket;
- socket.connectToHost(QHostAddress::LocalHostIPv6, 1234);
- return socket.state() == QAbstractSocket::ConnectedState || socket.waitForConnected(100);
+ // QNetworkInterface may be unable to detect IPv6 addresses even if they
+ // are there, due to limitations of the implementation.
+ if (QOperatingSystemVersion::currentType() == QOperatingSystemVersion::Windows ||
+ QT_CONFIG(linux_netlink) || (QT_CONFIG(getifaddrs) && QT_CONFIG(ipv6ifname))) {
+ return QtNetworkSettings::hasIPv6();
+ }
+ return false;
}
void tst_QNetworkInterface::initTestCase()
{
- if (!QtNetworkSettings::verifyTestNetworkSettings())
- QSKIP("No network test server available");
+#ifdef QT_TEST_SERVER
+ hasNetworkServer = QtNetworkSettings::verifyConnection(QtNetworkSettings::httpServerName(), 80);
+#else
+ hasNetworkServer = QtNetworkSettings::verifyTestNetworkSettings();
+#endif
}
void tst_QNetworkInterface::dump()
{
// This is for manual testing:
- QList<QNetworkInterface> allInterfaces = QNetworkInterface::allInterfaces();
- foreach (const QNetworkInterface &i, allInterfaces) {
+ const QList<QNetworkInterface> allInterfaces = QNetworkInterface::allInterfaces();
+ for (const QNetworkInterface &i : allInterfaces) {
QString flags;
if (i.flags() & QNetworkInterface::IsUp) flags += "Up,";
if (i.flags() & QNetworkInterface::IsRunning) flags += "Running,";
@@ -113,7 +99,8 @@ void tst_QNetworkInterface::dump()
qDebug() << " MTU: " << i.maximumTransmissionUnit();
int count = 0;
- foreach (const QNetworkAddressEntry &e, i.addressEntries()) {
+ const auto entries = i.addressEntries();
+ for (const QNetworkAddressEntry &e : entries) {
QDebug s = qDebug();
s.nospace() << " address "
<< qSetFieldWidth(2) << count++ << qSetFieldWidth(0);
@@ -139,11 +126,11 @@ void tst_QNetworkInterface::dump()
void tst_QNetworkInterface::consistencyCheck()
{
- QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces();
+ const QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces();
QSet<QString> interfaceNames;
QList<int> interfaceIndexes;
- foreach (const QNetworkInterface &iface, ifaces) {
+ for (const QNetworkInterface &iface : ifaces) {
QVERIFY(iface.isValid());
QVERIFY2(!interfaceNames.contains(iface.name()),
"duplicate name = " + iface.name().toLocal8Bit());
@@ -189,7 +176,8 @@ void tst_QNetworkInterface::localAddress_data()
if (ipv6)
QTest::newRow("localhost-ipv6") << QHostAddress(QHostAddress::LocalHostIPv6);
- QTest::newRow("test-server") << QtNetworkSettings::serverIP();
+ if (hasNetworkServer)
+ QTest::newRow("test-server") << QtNetworkSettings::httpServerIp();
QSet<QHostAddress> added;
const QList<QNetworkInterface> ifaces = QNetworkInterface::allInterfaces();
@@ -263,10 +251,10 @@ void tst_QNetworkInterface::interfaceFromXXX_data()
{
QTest::addColumn<QNetworkInterface>("iface");
- QList<QNetworkInterface> allInterfaces = QNetworkInterface::allInterfaces();
- if (allInterfaces.count() == 0)
+ const QList<QNetworkInterface> allInterfaces = QNetworkInterface::allInterfaces();
+ if (allInterfaces.size() == 0)
QSKIP("No interfaces to test!");
- foreach (QNetworkInterface iface, allInterfaces)
+ for (const QNetworkInterface &iface : allInterfaces)
QTest::newRow(iface.name().toLocal8Bit()) << iface;
}
@@ -280,7 +268,8 @@ void tst_QNetworkInterface::interfaceFromXXX()
QCOMPARE(QNetworkInterface::interfaceNameFromIndex(idx), iface.name());
QCOMPARE(QNetworkInterface::interfaceIndexFromName(iface.name()), idx);
}
- foreach (QNetworkAddressEntry entry, iface.addressEntries()) {
+ const auto entries = iface.addressEntries();
+ for (const QNetworkAddressEntry &entry : entries) {
QVERIFY(!entry.ip().isNull());
if (!entry.netmask().isNull()) {
diff --git a/tests/auto/network/kernel/qnetworkproxy/CMakeLists.txt b/tests/auto/network/kernel/qnetworkproxy/CMakeLists.txt
index 40650726a7..629bfb0a8a 100644
--- a/tests/auto/network/kernel/qnetworkproxy/CMakeLists.txt
+++ b/tests/auto/network/kernel/qnetworkproxy/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qnetworkproxy.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkproxy Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkproxy LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkproxy
SOURCES
tst_qnetworkproxy.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/kernel/qnetworkproxy/tst_qnetworkproxy.cpp b/tests/auto/network/kernel/qnetworkproxy/tst_qnetworkproxy.cpp
index 5ec60fb5b2..1f00f8d054 100644
--- a/tests/auto/network/kernel/qnetworkproxy/tst_qnetworkproxy.cpp
+++ b/tests/auto/network/kernel/qnetworkproxy/tst_qnetworkproxy.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 <QTest>
diff --git a/tests/auto/network/kernel/qnetworkproxyfactory/BLACKLIST b/tests/auto/network/kernel/qnetworkproxyfactory/BLACKLIST
deleted file mode 100644
index 6e9d9ffdec..0000000000
--- a/tests/auto/network/kernel/qnetworkproxyfactory/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-# QTBUG-87385
-[genericSystemProxy]
-android
diff --git a/tests/auto/network/kernel/qnetworkproxyfactory/CMakeLists.txt b/tests/auto/network/kernel/qnetworkproxyfactory/CMakeLists.txt
index e9e2d8ae0b..41dae6a02a 100644
--- a/tests/auto/network/kernel/qnetworkproxyfactory/CMakeLists.txt
+++ b/tests/auto/network/kernel/qnetworkproxyfactory/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qnetworkproxyfactory.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkproxyfactory Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkproxyfactory LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkproxyfactory
SOURCES
tst_qnetworkproxyfactory.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::NetworkPrivate
)
diff --git a/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp b/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp
index 8b64788a73..c38a480766 100644
--- a/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp
+++ b/tests/auto/network/kernel/qnetworkproxyfactory/tst_qnetworkproxyfactory.cpp
@@ -1,31 +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/QTest>
#include <QtTest/QTestEventLoop>
@@ -119,7 +93,8 @@ void tst_QNetworkProxyFactory::systemProxyForQuery_data()
QTest::newRow("autobind-server") << (int)QNetworkProxyQuery::TcpServer << QUrl() << QString() << QString() << 0 << (int)QNetworkProxy::ListeningCapability;
QTest::newRow("web-server") << (int)QNetworkProxyQuery::TcpServer << QUrl() << QString() << QString() << 80 << (int)QNetworkProxy::ListeningCapability;
//windows: these should be bypassed if "bypass proxy server for local addresses" is ticked
- foreach (QHostAddress address, QNetworkInterface::allAddresses()) {
+ const auto addresses = QNetworkInterface::allAddresses();
+ for (const QHostAddress &address : addresses) {
QTest::newRow(qPrintable(address.toString())) << (int)QNetworkProxyQuery::TcpSocket << QUrl() << QString() << address.toString() << 0 << 0;
}
@@ -172,16 +147,15 @@ void tst_QNetworkProxyFactory::systemProxyForQuery() const
QElapsedTimer sw;
sw.start();
- QList<QNetworkProxy> systemProxyList = QNetworkProxyFactory::systemProxyForQuery(query);
+ const QList<QNetworkProxy> systemProxyList = QNetworkProxyFactory::systemProxyForQuery(query);
qDebug() << sw.elapsed() << "ms";
QVERIFY(!systemProxyList.isEmpty());
// for manual comparison with system
qDebug() << systemProxyList;
- foreach (const QNetworkProxy &proxy, systemProxyList) {
+ for (const QNetworkProxy &proxy : systemProxyList)
QVERIFY((requiredCapabilities == 0) || (proxy.capabilities() & requiredCapabilities));
- }
}
void tst_QNetworkProxyFactory::systemProxyForQuery_local()
@@ -256,8 +230,6 @@ void tst_QNetworkProxyFactory::genericSystemProxy()
QFETCH(QString, hostName);
QFETCH(int, port);
-// We can only use the generic system proxy where available:
-#if !defined(Q_OS_WIN) && !defined(Q_OS_MACOS) && !QT_CONFIG(libproxy)
qputenv(envVar, url);
const QList<QNetworkProxy> systemProxy = QNetworkProxyFactory::systemProxyForQuery();
QCOMPARE(systemProxy.size(), 1);
@@ -265,18 +237,14 @@ void tst_QNetworkProxyFactory::genericSystemProxy()
QCOMPARE(systemProxy.first().hostName(), hostName);
QCOMPARE(systemProxy.first().port(), static_cast<quint16>(port));
qunsetenv(envVar);
-#else
- Q_UNUSED(envVar);
- Q_UNUSED(url);
- Q_UNUSED(proxyType);
- Q_UNUSED(hostName);
- Q_UNUSED(port);
- QSKIP("Generic system proxy not available on this platform.");
-#endif
}
void tst_QNetworkProxyFactory::genericSystemProxy_data()
{
+ // We can only use the generic system proxy where available:
+#if defined(Q_OS_WIN) || defined(Q_OS_MACOS) || defined(Q_OS_ANDROID) || QT_CONFIG(libproxy)
+ QSKIP("Generic system proxy not available on this platform.");
+#else
QTest::addColumn<QByteArray>("envVar");
QTest::addColumn<QByteArray>("url");
QTest::addColumn<QNetworkProxy::ProxyType>("proxyType");
@@ -289,6 +257,7 @@ void tst_QNetworkProxyFactory::genericSystemProxy_data()
<< QNetworkProxy::Socks5Proxy << QString("127.0.0.1") << 4242;
QTest::newRow("http") << QByteArray("http_proxy") << QByteArray("http://example.com:666")
<< QNetworkProxy::HttpProxy << QString("example.com") << 666;
+#endif
}
class QSPFQThread : public QThread
diff --git a/tests/auto/network/selftest/tst_networkselftest.cpp b/tests/auto/network/selftest/tst_networkselftest.cpp
index 501a86c78d..4288a65a37 100644
--- a/tests/auto/network/selftest/tst_networkselftest.cpp
+++ b/tests/auto/network/selftest/tst_networkselftest.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
diff --git a/tests/auto/network/socket/CMakeLists.txt b/tests/auto/network/socket/CMakeLists.txt
index 6e4421aad8..c3f8e8f87f 100644
--- a/tests/auto/network/socket/CMakeLists.txt
+++ b/tests/auto/network/socket/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from socket.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(QT_FEATURE_private_tests)
add_subdirectory(qhttpsocketengine)
@@ -9,9 +10,9 @@ endif()
add_subdirectory(qudpsocket)
add_subdirectory(qabstractsocket)
if(NOT ANDROID)
- # QTBUG-87387 # special case
+ # QTBUG-87387
add_subdirectory(qlocalsocket)
- # QTBUG-87388 # special case
+ # QTBUG-87388
add_subdirectory(qtcpserver)
endif()
if(QT_FEATURE_sctp)
diff --git a/tests/auto/network/socket/platformsocketengine/BLACKLIST b/tests/auto/network/socket/platformsocketengine/BLACKLIST
index f1f88d26d1..796f81a02a 100644
--- a/tests/auto/network/socket/platformsocketengine/BLACKLIST
+++ b/tests/auto/network/socket/platformsocketengine/BLACKLIST
@@ -1,11 +1,2 @@
[tcpLoopbackPerformance]
-windows-10 msvc-2015
-windows-7sp1
-[receiveUrgentData]
-windows-10 msvc-2015
-windows-7sp1
-[serverTest]
-windows-10 msvc-2015
-windows-7sp1
-[tcpLoopbackPerformance]
windows
diff --git a/tests/auto/network/socket/platformsocketengine/CMakeLists.txt b/tests/auto/network/socket/platformsocketengine/CMakeLists.txt
index cfd8a118ca..891041df04 100644
--- a/tests/auto/network/socket/platformsocketengine/CMakeLists.txt
+++ b/tests/auto/network/socket/platformsocketengine/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from platformsocketengine.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_platformsocketengine LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -11,19 +18,16 @@ endif()
qt_internal_add_test(tst_platformsocketengine
SOURCES
tst_platformsocketengine.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
+ QT_TEST_SERVER_LIST "cyrus"
)
-#### Keys ignored in scope 1:.:.:platformsocketengine.pro:<TRUE>:
-# MOC_DIR = "tmp"
-# _REQUIREMENTS = "qtConfig(private_tests)"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_platformsocketengine CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
ws2_32
)
diff --git a/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp b/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp
index 23566a3d70..1f6ecf9200 100644
--- a/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp
+++ b/tests/auto/network/socket/platformsocketengine/tst_platformsocketengine.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QTest>
@@ -48,7 +23,7 @@
#define PLATFORMSOCKETENGINE QNativeSocketEngine
#define PLATFORMSOCKETENGINESTRING "QNativeSocketEngine"
-#include <private/qnativesocketengine_p.h>
+#include <private/qnativesocketengine_p_p.h>
#include <qstringlist.h>
@@ -81,8 +56,12 @@ private slots:
void tst_PlatformSocketEngine::initTestCase()
{
+#ifdef QT_TEST_SERVER
+ QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::imapServerName(), 143));
+#else
if (!QtNetworkSettings::verifyTestNetworkSettings())
QSKIP("No network test server available");
+#endif
}
//---------------------------------------------------------------------------
@@ -122,14 +101,14 @@ void tst_PlatformSocketEngine::simpleConnectToIMAP()
QVERIFY(socketDevice.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol));
QCOMPARE(socketDevice.state(), QAbstractSocket::UnconnectedState);
- const bool isConnected = socketDevice.connectToHost(QtNetworkSettings::serverIP(), 143);
+ const bool isConnected = socketDevice.connectToHost(QtNetworkSettings::imapServerIp(), 143);
if (!isConnected) {
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectingState);
QVERIFY(socketDevice.waitForWrite());
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectedState);
}
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectedState);
- QCOMPARE(socketDevice.peerAddress(), QtNetworkSettings::serverIP());
+ QCOMPARE(socketDevice.peerAddress(), QtNetworkSettings::imapServerIp());
// Wait for the greeting
QVERIFY(socketDevice.waitForRead());
@@ -276,7 +255,7 @@ void tst_PlatformSocketEngine::broadcastTest()
PLATFORMSOCKETENGINE broadcastSocket;
// Initialize a regular Udp socket
- QVERIFY(broadcastSocket.initialize(QAbstractSocket::UdpSocket, QAbstractSocket::AnyIPProtocol));
+ QVERIFY(broadcastSocket.initialize(QAbstractSocket::UdpSocket, QAbstractSocket::IPv4Protocol));
// Bind to any port on all interfaces
QVERIFY(broadcastSocket.bind(QHostAddress::Any, 0));
@@ -567,7 +546,7 @@ void tst_PlatformSocketEngine::networkError()
QVERIFY(client.initialize(QAbstractSocket::TcpSocket, QAbstractSocket::IPv4Protocol));
- const bool isConnected = client.connectToHost(QtNetworkSettings::serverIP(), 143);
+ const bool isConnected = client.connectToHost(QtNetworkSettings::imapServerIp(), 143);
if (!isConnected) {
QCOMPARE(client.state(), QAbstractSocket::ConnectingState);
QVERIFY(client.waitForWrite());
diff --git a/tests/auto/network/socket/qabstractsocket/CMakeLists.txt b/tests/auto/network/socket/qabstractsocket/CMakeLists.txt
index ee83261ab0..3ca18aceef 100644
--- a/tests/auto/network/socket/qabstractsocket/CMakeLists.txt
+++ b/tests/auto/network/socket/qabstractsocket/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qabstractsocket.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractsocket Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractsocket LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractsocket
SOURCES
tst_qabstractsocket.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/socket/qabstractsocket/tst_qabstractsocket.cpp b/tests/auto/network/socket/qabstractsocket/tst_qabstractsocket.cpp
index bb5e8090f8..6b038acdfa 100644
--- a/tests/auto/network/socket/qabstractsocket/tst_qabstractsocket.cpp
+++ b/tests/auto/network/socket/qabstractsocket/tst_qabstractsocket.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 <QTest>
diff --git a/tests/auto/network/socket/qhttpsocketengine/BLACKLIST b/tests/auto/network/socket/qhttpsocketengine/BLACKLIST
index ceb3b7862e..e0cd701636 100644
--- a/tests/auto/network/socket/qhttpsocketengine/BLACKLIST
+++ b/tests/auto/network/socket/qhttpsocketengine/BLACKLIST
@@ -1,5 +1,2 @@
-[downloadBigFile]
-windows-10 msvc-2015
-windows-7sp1
[ensureEofTriggersNotification]
windows
diff --git a/tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt b/tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt
index fcad653783..6b4f904725 100644
--- a/tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt
+++ b/tests/auto/network/socket/qhttpsocketengine/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qhttpsocketengine.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_qhttpsocketengine LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -11,23 +18,18 @@ endif()
qt_internal_add_test(tst_qhttpsocketengine
SOURCES
tst_qhttpsocketengine.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
- QT_TEST_SERVER_LIST "squid" "danted" "cyrus" "apache2" # special case
+ QT_TEST_SERVER_LIST "squid" "danted" "cyrus" "apache2"
)
-#### Keys ignored in scope 1:.:.:qhttpsocketengine.pro:<TRUE>:
-# MOC_DIR = "tmp"
-# _REQUIREMENTS = "qtConfig(private_tests)"
-
## Scopes:
#####################################################################
-#### Keys ignored in scope 2:.:.:qhttpsocketengine.pro:LINUX:
# QT_TEST_SERVER_LIST = "squid" "danted" "cyrus" "apache2"
qt_internal_extend_target(tst_qhttpsocketengine CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
ws2_32
)
diff --git a/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp b/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp
index 2d0d9f5ffc..a52099b5b4 100644
--- a/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.cpp
+++ b/tests/auto/network/socket/qhttpsocketengine/tst_qhttpsocketengine.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/QTest>
@@ -43,6 +18,8 @@
#include "../../../network-settings.h"
+using namespace std::chrono_literals;
+
class tst_QHttpSocketEngine : public QObject
{
Q_OBJECT
@@ -108,9 +85,9 @@ public slots:
int idx = client->property("dataTransmitionIdx").toInt();
if (receivedData.contains("\r\n\r\n") ||
receivedData.contains("\n\n")) {
- if (idx < dataToTransmit.length())
+ if (idx < dataToTransmit.size())
client->write(dataToTransmit.at(idx++));
- if (idx == dataToTransmit.length()) {
+ if (idx == dataToTransmit.size()) {
client->disconnectFromHost();
disconnect(client, 0, this, 0);
client = 0;
@@ -348,7 +325,7 @@ void tst_QHttpSocketEngine::simpleErrorsAndStates()
QCOMPARE(socketDevice.state(), QAbstractSocket::UnconnectedState);
QVERIFY(!socketDevice.connectToHost(QHostAddress(QtNetworkSettings::socksProxyServerName()), 8088));
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectingState);
- if (socketDevice.waitForWrite(30000)) {
+ if (socketDevice.waitForWrite(30s)) {
QVERIFY(socketDevice.state() == QAbstractSocket::ConnectedState ||
socketDevice.state() == QAbstractSocket::UnconnectedState);
} else {
diff --git a/tests/auto/network/socket/qlocalsocket/BLACKLIST b/tests/auto/network/socket/qlocalsocket/BLACKLIST
index cec50425c5..730b7e6d2f 100644
--- a/tests/auto/network/socket/qlocalsocket/BLACKLIST
+++ b/tests/auto/network/socket/qlocalsocket/BLACKLIST
@@ -3,5 +3,8 @@
android
[processConnection]
android
+windows
[verifySocketOptions]
android
+[threadedConnection]
+windows
diff --git a/tests/auto/network/socket/qlocalsocket/CMakeLists.txt b/tests/auto/network/socket/qlocalsocket/CMakeLists.txt
index b0eca25191..4b886a02ee 100644
--- a/tests/auto/network/socket/qlocalsocket/CMakeLists.txt
+++ b/tests/auto/network/socket/qlocalsocket/CMakeLists.txt
@@ -1,14 +1,22 @@
-# Generated from qlocalsocket.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_qlocalsocket LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
-# add_subdirectory(test) # special case remove
add_subdirectory(socketprocess)
+
qt_internal_add_test(tst_qlocalsocket
SOURCES
tst_qlocalsocket.cpp
DEFINES
QLOCALSERVER_DEBUG
QLOCALSOCKET_DEBUG
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
+ Qt::TestPrivate
)
-# special case end
+add_dependencies(tst_qlocalsocket socketprocess)
diff --git a/tests/auto/network/socket/qlocalsocket/socketprocess/CMakeLists.txt b/tests/auto/network/socket/qlocalsocket/socketprocess/CMakeLists.txt
index adf1752ac0..3e0476d2b6 100644
--- a/tests/auto/network/socket/qlocalsocket/socketprocess/CMakeLists.txt
+++ b/tests/auto/network/socket/qlocalsocket/socketprocess/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from socketprocess.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## socketprocess Binary:
@@ -8,7 +9,7 @@ qt_internal_add_executable(socketprocess
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
diff --git a/tests/auto/network/socket/qlocalsocket/socketprocess/main.cpp b/tests/auto/network/socket/qlocalsocket/socketprocess/main.cpp
index 272e837ac5..d254253aca 100644
--- a/tests/auto/network/socket/qlocalsocket/socketprocess/main.cpp
+++ b/tests/auto/network/socket/qlocalsocket/socketprocess/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 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 <qcoreapplication.h>
diff --git a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
index ba699242fd..1ecd871ceb 100644
--- a/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/auto/network/socket/qlocalsocket/tst_qlocalsocket.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSignalSpy>
+#include <QtTest/private/qpropertytesthelper_p.h>
#if QT_CONFIG(process)
#include <QProcess>
#endif
@@ -148,6 +124,7 @@ private slots:
void verifyListenWithDescriptor_data();
void serverBindingsAndProperties();
+ void socketBindings();
protected slots:
void socketClosedSlot();
@@ -162,14 +139,13 @@ tst_QLocalSocket::tst_QLocalSocket()
qRegisterMetaType<QFile::Permissions>("QFile::Permissions");
}
-class LocalServer : public QLocalServer
+class CrashSafeLocalServer : public QLocalServer
{
Q_OBJECT
public:
- LocalServer() : QLocalServer()
+ CrashSafeLocalServer() : QLocalServer()
{
- connect(this, SIGNAL(newConnection()), this, SLOT(slotNewConnection()));
}
bool listen(const QString &name)
@@ -178,6 +154,19 @@ public:
return QLocalServer::listen(name);
}
+ bool listen(qintptr socketDescriptor) { return QLocalServer::listen(socketDescriptor); }
+};
+
+class LocalServer : public CrashSafeLocalServer
+{
+ Q_OBJECT
+
+public:
+ LocalServer() : CrashSafeLocalServer()
+ {
+ connect(this, SIGNAL(newConnection()), this, SLOT(slotNewConnection()));
+ }
+
QList<int> hits;
protected:
@@ -258,8 +247,8 @@ void tst_QLocalSocket::server_basic()
QVERIFY(!timedOut);
QCOMPARE(server.listen(QString()), false);
- QCOMPARE(server.hits.count(), 0);
- QCOMPARE(spyNewConnection.count(), 0);
+ QCOMPARE(server.hits.size(), 0);
+ QCOMPARE(spyNewConnection.size(), 0);
}
void tst_QLocalSocket::server_connectionsCount()
@@ -300,11 +289,11 @@ void tst_QLocalSocket::socket_basic()
QCOMPARE(socket.waitForDisconnected(0), false);
QCOMPARE(socket.waitForReadyRead(0), false);
- QCOMPARE(spyConnected.count(), 0);
- QCOMPARE(spyDisconnected.count(), 0);
- QCOMPARE(spyError.count(), 0);
- QCOMPARE(spyStateChanged.count(), 0);
- QCOMPARE(spyReadyRead.count(), 0);
+ QCOMPARE(spyConnected.size(), 0);
+ QCOMPARE(spyDisconnected.size(), 0);
+ QCOMPARE(spyError.size(), 0);
+ QCOMPARE(spyStateChanged.size(), 0);
+ QCOMPARE(spyReadyRead.size(), 0);
}
void tst_QLocalSocket::listen_data()
@@ -313,8 +302,8 @@ void tst_QLocalSocket::listen_data()
QTest::addColumn<bool>("canListen");
QTest::addColumn<bool>("close");
QTest::newRow("null") << QString() << false << false;
- QTest::newRow("tst_localsocket") << "tst_localsocket" << true << true;
- QTest::newRow("tst_localsocket") << "tst_localsocket" << true << false;
+ QTest::newRow("tst_localsocket,close") << "tst_localsocket" << true << true;
+ QTest::newRow("tst_localsocket,no-close") << "tst_localsocket" << true << false;
}
// start a server that listens, but don't connect a socket, make sure everything is in order
@@ -326,7 +315,7 @@ void tst_QLocalSocket::listen()
QFETCH(QString, name);
QFETCH(bool, canListen);
QFETCH(bool, close);
- QVERIFY2((server.listen(name) == canListen), server.errorString().toLatin1().constData());
+ QVERIFY2((server.listen(name) == canListen), qUtf8Printable(server.errorString()));
// test listening
QCOMPARE(server.serverName(), name);
@@ -334,8 +323,8 @@ void tst_QLocalSocket::listen()
QCOMPARE(server.isListening(), canListen);
QCOMPARE(server.hasPendingConnections(), false);
QCOMPARE(server.nextPendingConnection(), (QLocalSocket*)0);
- QCOMPARE(server.hits.count(), 0);
- QCOMPARE(spyNewConnection.count(), 0);
+ QCOMPARE(server.hits.size(), 0);
+ QCOMPARE(spyNewConnection.size(), 0);
if (canListen) {
QVERIFY(server.errorString().isEmpty());
QCOMPARE(server.serverError(), QAbstractSocket::UnknownSocketError);
@@ -409,7 +398,7 @@ void tst_QLocalSocket::listenAndConnect()
QCOMPARE(socket->error(), QLocalSocket::UnknownSocketError);
QCOMPARE(socket->state(), QLocalSocket::ConnectedState);
//QVERIFY(socket->socketDescriptor() != -1);
- QCOMPARE(spyError.count(), 0);
+ QCOMPARE(spyError.size(), 0);
} else {
QVERIFY(!socket->errorString().isEmpty());
QVERIFY(socket->error() != QLocalSocket::UnknownSocketError);
@@ -428,13 +417,13 @@ void tst_QLocalSocket::listenAndConnect()
QCOMPARE(socket->waitForConnected(0), canListen);
QCOMPARE(socket->waitForReadyRead(0), false);
- QTRY_COMPARE(spyConnected.count(), canListen ? 1 : 0);
- QCOMPARE(spyDisconnected.count(), 0);
+ QTRY_COMPARE(spyConnected.size(), canListen ? 1 : 0);
+ QCOMPARE(spyDisconnected.size(), 0);
// error signals
- QVERIFY(spyError.count() >= 0);
+ QVERIFY(spyError.size() >= 0);
if (canListen) {
- if (spyError.count() > 0)
+ if (spyError.size() > 0)
QCOMPARE(qvariant_cast<QLocalSocket::LocalSocketError>(spyError.first()[0]),
QLocalSocket::SocketTimeoutError);
} else {
@@ -449,8 +438,8 @@ void tst_QLocalSocket::listenAndConnect()
if (canListen)
QCOMPARE(qvariant_cast<QLocalSocket::LocalSocketState>(spyStateChanged.last()[0]),
QLocalSocket::ConnectedState);
- QCOMPARE(spyStateChanged.count(), 2);
- QCOMPARE(spyReadyRead.count(), 0);
+ QCOMPARE(spyStateChanged.size(), 2);
+ QCOMPARE(spyReadyRead.size(), 0);
bool timedOut = true;
QCOMPARE(server.waitForNewConnection(3000, &timedOut), canListen);
@@ -464,16 +453,16 @@ void tst_QLocalSocket::listenAndConnect()
QCOMPARE(server.serverName(), name);
QVERIFY(server.fullServerName().contains(name));
QVERIFY(server.nextPendingConnection() != (QLocalSocket*)0);
- QTRY_COMPARE(server.hits.count(), i + 1);
- QCOMPARE(spyNewConnection.count(), i + 1);
+ QTRY_COMPARE(server.hits.size(), i + 1);
+ QCOMPARE(spyNewConnection.size(), i + 1);
QVERIFY(server.errorString().isEmpty());
QCOMPARE(server.serverError(), QAbstractSocket::UnknownSocketError);
} else {
QVERIFY(server.serverName().isEmpty());
QVERIFY(server.fullServerName().isEmpty());
QCOMPARE(server.nextPendingConnection(), (QLocalSocket*)0);
- QCOMPARE(spyNewConnection.count(), 0);
- QCOMPARE(server.hits.count(), 0);
+ QCOMPARE(spyNewConnection.size(), 0);
+ QCOMPARE(server.hits.size(), 0);
QVERIFY(!server.errorString().isEmpty());
QCOMPARE(server.serverError(), QAbstractSocket::HostNotFoundError);
}
@@ -482,14 +471,14 @@ void tst_QLocalSocket::listenAndConnect()
server.close();
- QCOMPARE(server.hits.count(), (canListen ? connections : 0));
- QCOMPARE(spyNewConnection.count(), (canListen ? connections : 0));
+ QCOMPARE(server.hits.size(), (canListen ? connections : 0));
+ QCOMPARE(spyNewConnection.size(), (canListen ? connections : 0));
}
void tst_QLocalSocket::connectWithOpen()
{
LocalServer server;
- QVERIFY(server.listen("tst_qlocalsocket"));
+ QVERIFY2(server.listen("tst_qlocalsocket"), qUtf8Printable(server.errorString()));
LocalSocket socket;
QSignalSpy spyAboutToClose(&socket, SIGNAL(aboutToClose()));
@@ -507,7 +496,7 @@ void tst_QLocalSocket::connectWithOpen()
socket.close();
server.close();
- QCOMPARE(spyAboutToClose.count(), 1);
+ QCOMPARE(spyAboutToClose.size(), 1);
}
void tst_QLocalSocket::listenAndConnectAbstractNamespaceTrailingZeros_data()
@@ -541,7 +530,7 @@ void tst_QLocalSocket::listenAndConnectAbstractNamespaceTrailingZeros()
client_path.append(QChar('\0'));
LocalServer server;
server.setSocketOptions(QLocalServer::AbstractNamespaceOption);
- QVERIFY(server.listen(server_path));
+ QVERIFY2(server.listen(server_path), qUtf8Printable(server.errorString()));
QCOMPARE(server.fullServerName(), server_path);
LocalSocket socket;
@@ -590,7 +579,7 @@ void tst_QLocalSocket::listenAndConnectAbstractNamespace()
LocalServer server;
server.setSocketOptions(serverOption);
- QVERIFY(server.listen("tst_qlocalsocket"));
+ QVERIFY2(server.listen("tst_qlocalsocket"), qUtf8Printable(server.errorString()));
LocalSocket socket;
socket.setSocketOptions(socketOption);
@@ -673,7 +662,7 @@ void tst_QLocalSocket::sendData()
QTest::qWait(250);
#endif
QVERIFY(!timedOut);
- QCOMPARE(spyConnected.count(), canListen ? 1 : 0);
+ QCOMPARE(spyConnected.size(), canListen ? 1 : 0);
QCOMPARE(socket.state(), canListen ? QLocalSocket::ConnectedState : QLocalSocket::UnconnectedState);
// test sending/receiving data
@@ -699,7 +688,7 @@ void tst_QLocalSocket::sendData()
QCOMPARE(socket.flush(), false);
QCOMPARE(socket.isValid(), canListen);
QCOMPARE(socket.readBufferSize(), (qint64)0);
- QCOMPARE(spyReadyRead.count(), expectedReadyReadSignals);
+ QCOMPARE(spyReadyRead.size(), expectedReadyReadSignals);
QVERIFY(testLine.startsWith(in.readLine()));
@@ -710,16 +699,16 @@ void tst_QLocalSocket::sendData()
}
socket.disconnectFromServer();
- QCOMPARE(spyConnected.count(), canListen ? 1 : 0);
- QCOMPARE(spyDisconnected.count(), canListen ? 1 : 0);
- QCOMPARE(spyError.count(), canListen ? 0 : 1);
- QCOMPARE(spyStateChanged.count(), canListen ? 4 : 2);
- QCOMPARE(spyReadyRead.count(), canListen ? expectedReadyReadSignals : 0);
+ QCOMPARE(spyConnected.size(), canListen ? 1 : 0);
+ QCOMPARE(spyDisconnected.size(), canListen ? 1 : 0);
+ QCOMPARE(spyError.size(), canListen ? 0 : 1);
+ QCOMPARE(spyStateChanged.size(), canListen ? 4 : 2);
+ QCOMPARE(spyReadyRead.size(), canListen ? expectedReadyReadSignals : 0);
server.close();
- QCOMPARE(server.hits.count(), (canListen ? 1 : 0));
- QCOMPARE(spy.count(), (canListen ? 1 : 0));
+ QCOMPARE(server.hits.size(), (canListen ? 1 : 0));
+ QCOMPARE(spy.size(), (canListen ? 1 : 0));
}
void tst_QLocalSocket::readLine_data()
@@ -771,7 +760,7 @@ void tst_QLocalSocket::readLine()
const QString serverName = QLatin1String("tst_localsocket");
LocalServer server;
- QVERIFY(server.listen(serverName));
+ QVERIFY2(server.listen(serverName), qUtf8Printable(server.errorString()));
LocalSocket client;
client.connectToServer(serverName);
@@ -847,7 +836,7 @@ void tst_QLocalSocket::skip()
const QString serverName = QLatin1String("tst_localsocket");
LocalServer server;
- QVERIFY(server.listen(serverName));
+ QVERIFY2(server.listen(serverName), qUtf8Printable(server.errorString()));
LocalSocket client;
client.connectToServer(serverName);
@@ -946,7 +935,7 @@ static QVariant readCommand(QIODevice *ioDevice, int *readCommandCounter, bool r
void tst_QLocalSocket::simpleCommandProtocol1()
{
- QLocalServer server;
+ CrashSafeLocalServer server;
server.listen(QStringLiteral("simpleProtocol"));
QLocalSocket localSocketWrite;
@@ -972,7 +961,7 @@ void tst_QLocalSocket::simpleCommandProtocol1()
void tst_QLocalSocket::simpleCommandProtocol2()
{
- QLocalServer server;
+ CrashSafeLocalServer server;
server.listen(QStringLiteral("simpleProtocol"));
QLocalSocket localSocketWrite;
@@ -1019,7 +1008,7 @@ void tst_QLocalSocket::simpleCommandProtocol2()
localSocketWrite.abort();
QCOMPARE(localSocketWrite.state(), QLocalSocket::UnconnectedState);
- QCOMPARE(spyDisconnected.count(), 1);
+ QCOMPARE(spyDisconnected.size(), 1);
QCOMPARE(localSocketWrite.bytesToWrite(), 0);
QVERIFY(!localSocketWrite.isOpen());
@@ -1029,7 +1018,7 @@ void tst_QLocalSocket::simpleCommandProtocol2()
// QLocalSocket/Server can take a name or path, check that it works as expected
void tst_QLocalSocket::fullPath()
{
- QLocalServer server;
+ CrashSafeLocalServer server;
QString name = "qlocalsocket_pathtest";
#if defined(QT_LOCALSOCKET_TCP)
QString path = "QLocalServer";
@@ -1039,7 +1028,7 @@ void tst_QLocalSocket::fullPath()
QString path = "/tmp";
#endif
QString serverName = path + '/' + name;
- QVERIFY2(server.listen(serverName), server.errorString().toLatin1().constData());
+ QVERIFY2(server.listen(serverName), qUtf8Printable(server.errorString()));
QCOMPARE(server.serverName(), serverName);
QCOMPARE(server.fullServerName(), serverName);
@@ -1070,7 +1059,7 @@ void tst_QLocalSocket::hitMaximumConnections()
LocalServer server;
QString name = "tst_localsocket";
server.setMaxPendingConnections(max);
- QVERIFY2(server.listen(name), server.errorString().toLatin1().constData());
+ QVERIFY2(server.listen(name), qUtf8Printable(server.errorString()));
int connections = server.maxPendingConnections() + 1;
QList<QLocalSocket*> sockets;
for (int i = 0; i < connections; ++i) {
@@ -1081,7 +1070,7 @@ void tst_QLocalSocket::hitMaximumConnections()
bool timedOut = true;
QVERIFY(server.waitForNewConnection(3000, &timedOut));
QVERIFY(!timedOut);
- QVERIFY(server.hits.count() > 0);
+ QVERIFY(server.hits.size() > 0);
qDeleteAll(sockets.begin(), sockets.end());
}
@@ -1109,9 +1098,9 @@ public:
QVERIFY(socket.waitForConnected(1000));
// We should *not* have this signal yet!
- QCOMPARE(spyReadyRead.count(), 0);
+ QCOMPARE(spyReadyRead.size(), 0);
socket.waitForReadyRead();
- QCOMPARE(spyReadyRead.count(), 1);
+ QCOMPARE(spyReadyRead.size(), 1);
QTextStream in(&socket);
QCOMPARE(in.readLine(), testLine);
socket.close();
@@ -1131,7 +1120,7 @@ public:
LocalServer server;
server.setMaxPendingConnections(10);
QVERIFY2(server.listen("qlocalsocket_threadtest"),
- server.errorString().toLatin1().constData());
+ qUtf8Printable(server.errorString()));
mutex.lock();
wc.wakeAll();
mutex.unlock();
@@ -1153,7 +1142,7 @@ public:
--done;
delete serverSocket;
}
- QCOMPARE(server.hits.count(), clients);
+ QCOMPARE(server.hits.size(), clients);
}
};
@@ -1292,7 +1281,7 @@ void tst_QLocalSocket::waitForDisconnect()
{
QString name = "tst_localsocket";
LocalServer server;
- QVERIFY(server.listen(name));
+ QVERIFY2(server.listen(name), qUtf8Printable(server.errorString()));
LocalSocket socket;
socket.connectToServer(name);
QVERIFY(socket.waitForConnected(3000));
@@ -1310,7 +1299,7 @@ void tst_QLocalSocket::waitForDisconnectByServer()
{
QString name = "tst_localsocket";
LocalServer server;
- QVERIFY(server.listen(name));
+ QVERIFY2(server.listen(name), qUtf8Printable(server.errorString()));
LocalSocket socket;
QSignalSpy spy(&socket, SIGNAL(disconnected()));
QVERIFY(spy.isValid());
@@ -1322,14 +1311,14 @@ void tst_QLocalSocket::waitForDisconnectByServer()
serverSocket->close();
QCOMPARE(serverSocket->state(), QLocalSocket::UnconnectedState);
QVERIFY(socket.waitForDisconnected(3000));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QLocalSocket::waitForReadyReadOnDisconnected()
{
QString name = "tst_localsocket";
LocalServer server;
- QVERIFY(server.listen(name));
+ QVERIFY2(server.listen(name), qUtf8Printable(server.errorString()));
LocalSocket socket;
connect(&socket, &QLocalSocket::readyRead, [&socket]() {
QVERIFY(socket.getChar(nullptr));
@@ -1363,7 +1352,7 @@ void tst_QLocalSocket::delayedDisconnect()
{
QString name = "tst_localsocket";
LocalServer server;
- QVERIFY(server.listen(name));
+ QVERIFY2(server.listen(name), qUtf8Printable(server.errorString()));
LocalSocket socket;
socket.connectToServer(name);
QVERIFY(socket.waitForConnected(3000));
@@ -1392,9 +1381,11 @@ void tst_QLocalSocket::delayedDisconnect()
void tst_QLocalSocket::removeServer()
{
// this is a hostile takeover, but recovering from a crash results in the same
+ // Note: Explicitly not a CrashSafeLocalServer
QLocalServer server, server2;
+
QVERIFY(QLocalServer::removeServer("cleanuptest"));
- QVERIFY(server.listen("cleanuptest"));
+ QVERIFY2(server.listen("cleanuptest"), qUtf8Printable(server.errorString()));
#ifndef Q_OS_WIN
// on Windows, there can be several sockets listening on the same pipe
// on Unix, there can only be one socket instance
@@ -1406,10 +1397,10 @@ void tst_QLocalSocket::removeServer()
void tst_QLocalSocket::recycleServer()
{
- QLocalServer server;
+ CrashSafeLocalServer server;
QLocalSocket client;
- QVERIFY(server.listen("recycletest1"));
+ QVERIFY2(server.listen("recycletest1"), qUtf8Printable(server.errorString()));
client.connectToServer("recycletest1");
QVERIFY(client.waitForConnected(201));
QVERIFY(server.waitForNewConnection(201));
@@ -1419,7 +1410,7 @@ void tst_QLocalSocket::recycleServer()
client.disconnectFromServer();
qApp->processEvents();
- QVERIFY(server.listen("recycletest2"));
+ QVERIFY2(server.listen("recycletest2"), qUtf8Printable(server.errorString()));
client.connectToServer("recycletest2");
QVERIFY(client.waitForConnected(202));
QVERIFY(server.waitForNewConnection(202));
@@ -1431,13 +1422,13 @@ void tst_QLocalSocket::recycleClientSocket()
const QByteArrayList lines = QByteArrayList() << "Have you heard of that new band"
<< "\"1023 Megabytes\"?"
<< "They haven't made it to a gig yet.";
- QLocalServer server;
+ CrashSafeLocalServer server;
const QString serverName = QStringLiteral("recycleClientSocket");
- QVERIFY(server.listen(serverName));
+ QVERIFY2(server.listen(serverName), qUtf8Printable(server.errorString()));
QLocalSocket client;
QSignalSpy clientReadyReadSpy(&client, SIGNAL(readyRead()));
QSignalSpy clientErrorSpy(&client, SIGNAL(errorOccurred(QLocalSocket::LocalSocketError)));
- for (int i = 0; i < lines.count(); ++i) {
+ for (int i = 0; i < lines.size(); ++i) {
client.abort();
clientReadyReadSpy.clear();
client.connectToServer(serverName);
@@ -1456,12 +1447,12 @@ void tst_QLocalSocket::recycleClientSocket()
void tst_QLocalSocket::multiConnect()
{
- QLocalServer server;
+ CrashSafeLocalServer server;
QLocalSocket client1;
QLocalSocket client2;
QLocalSocket client3;
- QVERIFY(server.listen("multiconnect"));
+ QVERIFY2(server.listen("multiconnect"), qUtf8Printable(server.errorString()));
client1.connectToServer("multiconnect");
client2.connectToServer("multiconnect");
@@ -1481,8 +1472,8 @@ void tst_QLocalSocket::multiConnect()
void tst_QLocalSocket::writeOnlySocket()
{
- QLocalServer server;
- QVERIFY(server.listen("writeOnlySocket"));
+ CrashSafeLocalServer server;
+ QVERIFY2(server.listen("writeOnlySocket"), qUtf8Printable(server.errorString()));
QLocalSocket client;
client.connectToServer("writeOnlySocket", QIODevice::WriteOnly);
@@ -1512,11 +1503,11 @@ void tst_QLocalSocket::writeToClientAndDisconnect_data()
void tst_QLocalSocket::writeToClientAndDisconnect()
{
QFETCH(int, chunks);
- QLocalServer server;
+ CrashSafeLocalServer server;
QLocalSocket client;
QSignalSpy readChannelFinishedSpy(&client, SIGNAL(readChannelFinished()));
- QVERIFY(server.listen("writeAndDisconnectServer"));
+ QVERIFY2(server.listen("writeAndDisconnectServer"), qUtf8Printable(server.errorString()));
client.connectToServer("writeAndDisconnectServer");
QVERIFY(client.waitForConnected(200));
QVERIFY(server.waitForNewConnection(200));
@@ -1532,7 +1523,7 @@ void tst_QLocalSocket::writeToClientAndDisconnect()
QVERIFY(clientSocket->waitForDisconnected());
QVERIFY(client.waitForDisconnected());
- QCOMPARE(readChannelFinishedSpy.count(), 1);
+ QCOMPARE(readChannelFinishedSpy.size(), 1);
const QByteArray received = client.readAll();
QCOMPARE(received.size(), qint64(sizeof(buffer) * chunks));
QCOMPARE(client.state(), QLocalSocket::UnconnectedState);
@@ -1540,8 +1531,8 @@ void tst_QLocalSocket::writeToClientAndDisconnect()
void tst_QLocalSocket::writeToDisconnected()
{
- QLocalServer server;
- QVERIFY(server.listen("writeToDisconnected"));
+ CrashSafeLocalServer server;
+ QVERIFY2(server.listen("writeToDisconnected"), qUtf8Printable(server.errorString()));
QLocalSocket client;
QSignalSpy spyError(&client, SIGNAL(errorOccurred(QLocalSocket::LocalSocketError)));
@@ -1562,7 +1553,7 @@ void tst_QLocalSocket::writeToDisconnected()
QCOMPARE(client.bytesToWrite(), qint64(1));
QVERIFY(!client.waitForBytesWritten());
- QCOMPARE(spyError.count(), 1);
+ QCOMPARE(spyError.size(), 1);
QCOMPARE(client.state(), QLocalSocket::UnconnectedState);
}
@@ -1611,8 +1602,8 @@ public slots:
*/
void tst_QLocalSocket::bytesWrittenSignal()
{
- QLocalServer server;
- QVERIFY(server.listen("qlocalsocket_readyread"));
+ CrashSafeLocalServer server;
+ QVERIFY2(server.listen("qlocalsocket_readyread"), qUtf8Printable(server.errorString()));
WriteThread writeThread;
QSignalSpy receivedSpy(&writeThread, &WriteThread::bytesWrittenReceived);
writeThread.start();
@@ -1632,8 +1623,8 @@ void tst_QLocalSocket::socketClosedSlot()
void tst_QLocalSocket::syncDisconnectNotify()
{
- QLocalServer server;
- QVERIFY(server.listen("syncDisconnectNotify"));
+ CrashSafeLocalServer server;
+ QVERIFY2(server.listen("syncDisconnectNotify"), qUtf8Printable(server.errorString()));
QLocalSocket client;
connect(&client, &QLocalSocket::disconnected,
this, &tst_QLocalSocket::socketClosedSlot);
@@ -1651,8 +1642,8 @@ void tst_QLocalSocket::syncDisconnectNotify()
void tst_QLocalSocket::asyncDisconnectNotify()
{
- QLocalServer server;
- QVERIFY(server.listen("asyncDisconnectNotify"));
+ CrashSafeLocalServer server;
+ QVERIFY2(server.listen("asyncDisconnectNotify"), qUtf8Printable(server.errorString()));
QLocalSocket client;
QSignalSpy disconnectedSpy(&client, SIGNAL(disconnected()));
QSignalSpy readChannelFinishedSpy(&client, SIGNAL(readChannelFinished()));
@@ -1667,7 +1658,7 @@ void tst_QLocalSocket::asyncDisconnectNotify()
QVERIFY(serverSocket);
delete serverSocket;
QTRY_VERIFY(!disconnectedSpy.isEmpty());
- QCOMPARE(readChannelFinishedSpy.count(), 1);
+ QCOMPARE(readChannelFinishedSpy.size(), 1);
}
void tst_QLocalSocket::verifySocketOptions_data()
@@ -1703,11 +1694,9 @@ void tst_QLocalSocket::verifySocketOptions()
QFETCH(QLocalServer::SocketOption, opts);
QFETCH(QFile::Permissions, perms);
-
- QLocalServer::removeServer(service);
- QLocalServer server;
+ CrashSafeLocalServer server;
server.setSocketOptions(opts);
- QVERIFY2(server.listen(service), "service failed to start listening");
+ QVERIFY2(server.listen(service), qUtf8Printable(server.errorString()));
// find the socket
QString fullServerPath = QDir::cleanPath(QDir::tempPath());
@@ -1720,7 +1709,7 @@ void tst_QLocalSocket::verifySocketOptions()
void tst_QLocalSocket::verifyListenWithDescriptor()
{
-#ifdef Q_OS_UNIX
+#if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS)
QFETCH(QString, path);
QFETCH(bool, abstract);
QFETCH(bool, bound);
@@ -1762,10 +1751,10 @@ void tst_QLocalSocket::verifyListenWithDescriptor()
close(fds[1]);
}
- QLocalServer server;
- QVERIFY2(server.listen(listenSocket), "failed to start create QLocalServer with local socket");
+ CrashSafeLocalServer server;
+ QVERIFY2(server.listen(listenSocket), qUtf8Printable(server.errorString()));
-#ifdef Q_OS_LINUX
+#if defined(Q_OS_LINUX) || defined(Q_OS_QNX)
if (!bound) {
QCOMPARE(server.serverName().isEmpty(), true);
QCOMPARE(server.fullServerName().isEmpty(), true);
@@ -1806,7 +1795,7 @@ void tst_QLocalSocket::verifyListenWithDescriptor_data()
QTest::addColumn<bool>("bound");
QTest::newRow("normal") << QDir::tempPath() + QLatin1String("/testsocket") << false << true;
-#ifdef Q_OS_LINUX
+#if defined(Q_OS_LINUX) || defined(Q_OS_QNX)
QTest::newRow("abstract") << QString::fromLatin1("abstractsocketname") << true << true;
QTest::newRow("abstractwithslash") << QString::fromLatin1("abstractsocketwitha/inthename") << true << true;
#endif
@@ -1818,16 +1807,20 @@ void tst_QLocalSocket::verifyListenWithDescriptor_data()
void tst_QLocalSocket::serverBindingsAndProperties()
{
- QLocalServer server;
+ CrashSafeLocalServer server;
+
+ QTestPrivate::testReadWritePropertyBasics(
+ server, QLocalServer::SocketOptions{QLocalServer::GroupAccessOption},
+ QLocalServer::SocketOptions{QLocalServer::OtherAccessOption}, "socketOptions");
+}
- QProperty<QLocalServer::SocketOptions> sockOpts;
- server.bindableSocketOptions().setBinding(Qt::makePropertyBinding(sockOpts));
- sockOpts = QLocalServer::GroupAccessOption | QLocalServer::UserAccessOption;
- QCOMPARE(server.socketOptions(), sockOpts.value());
+void tst_QLocalSocket::socketBindings()
+{
+ QLocalSocket socket;
- sockOpts.setBinding(server.bindableSocketOptions().makeBinding());
- server.setSocketOptions(QLocalServer::OtherAccessOption);
- QCOMPARE(sockOpts.value(), QLocalServer::OtherAccessOption);
+ QTestPrivate::testReadWritePropertyBasics(
+ socket, QLocalSocket::SocketOptions{QLocalSocket::AbstractNamespaceOption},
+ QLocalSocket::SocketOptions{QLocalSocket::NoOptions}, "socketOptions");
}
QTEST_MAIN(tst_QLocalSocket)
diff --git a/tests/auto/network/socket/qsctpsocket/CMakeLists.txt b/tests/auto/network/socket/qsctpsocket/CMakeLists.txt
index af3f809113..4bf5438841 100644
--- a/tests/auto/network/socket/qsctpsocket/CMakeLists.txt
+++ b/tests/auto/network/socket/qsctpsocket/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qsctpsocket.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsctpsocket Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsctpsocket LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsctpsocket
SOURCES
tst_qsctpsocket.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/socket/qsctpsocket/tst_qsctpsocket.cpp b/tests/auto/network/socket/qsctpsocket/tst_qsctpsocket.cpp
index c2e29c0ce2..2893053158 100644
--- a/tests/auto/network/socket/qsctpsocket/tst_qsctpsocket.cpp
+++ b/tests/auto/network/socket/qsctpsocket/tst_qsctpsocket.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Alex Trotsenko <alex1973tr@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 Alex Trotsenko <alex1973tr@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QDebug>
@@ -152,12 +127,13 @@ void tst_QSctpSocket::bind_data()
// these ranges are guaranteed to be reserved for 'documentation purposes',
// and thus, should be unused in the real world. Not that I'm assuming the
// world is full of competent administrators, or anything.
- QStringList knownBad;
- knownBad << "198.51.100.1";
- knownBad << "2001:0DB8::1";
- foreach (const QString &badAddress, knownBad) {
+ const QString knownBad[] = {
+ "198.51.100.1",
+ "2001:0DB8::1",
+ };
+
+ for (const QString &badAddress : knownBad)
QTest::newRow(badAddress.toLatin1().constData()) << badAddress << false << QString();
- }
}
// Testing bind function
diff --git a/tests/auto/network/socket/qsocks5socketengine/BLACKLIST b/tests/auto/network/socket/qsocks5socketengine/BLACKLIST
index 405d03f990..6b3a39ab5e 100644
--- a/tests/auto/network/socket/qsocks5socketengine/BLACKLIST
+++ b/tests/auto/network/socket/qsocks5socketengine/BLACKLIST
@@ -1,12 +1,10 @@
[udpTest]
*
[passwordAuth]
-ubuntu-18.04
-ubuntu-20.04
+ubuntu
+# QTBUG-101274
+qnx ci
# QTBUG-74162
[passwordAuth2]
ubuntu
-[downloadBigFile]
-windows-10 msvc-2015
-windows-7sp1
diff --git a/tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt b/tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt
index 64f3aa7a9e..dc0b87cd94 100644
--- a/tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt
+++ b/tests/auto/network/socket/qsocks5socketengine/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qsocks5socketengine.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_qsocks5socketengine LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -11,23 +18,18 @@ endif()
qt_internal_add_test(tst_qsocks5socketengine
SOURCES
tst_qsocks5socketengine.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
- QT_TEST_SERVER_LIST "danted" "apache2" "cyrus" # special case
+ QT_TEST_SERVER_LIST "danted" "apache2" "cyrus"
)
-#### Keys ignored in scope 1:.:.:qsocks5socketengine.pro:<TRUE>:
-# MOC_DIR = "tmp"
-# _REQUIREMENTS = "qtConfig(private_tests)"
-
## Scopes:
#####################################################################
-#### Keys ignored in scope 2:.:.:qsocks5socketengine.pro:LINUX:
# QT_TEST_SERVER_LIST = "danted" "apache2" "cyrus"
qt_internal_extend_target(tst_qsocks5socketengine CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
ws2_32
)
diff --git a/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp b/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp
index 11e17cb319..cc77ba2da3 100644
--- a/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.cpp
+++ b/tests/auto/network/socket/qsocks5socketengine/tst_qsocks5socketengine.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/QTest>
@@ -48,6 +23,8 @@
#include "../../../network-settings.h"
+using namespace std::chrono_literals;
+
class tst_QSocks5SocketEngine : public QObject, public QAbstractSocketEngineReceiver
{
Q_OBJECT
@@ -366,7 +343,7 @@ void tst_QSocks5SocketEngine::simpleErrorsAndStates()
QCOMPARE(socketDevice.state(), QAbstractSocket::UnconnectedState);
QVERIFY(!socketDevice.connectToHost(QHostInfo::fromName(QtNetworkSettings::socksProxyServerName()).addresses().first(), 8088));
QCOMPARE(socketDevice.state(), QAbstractSocket::ConnectingState);
- if (socketDevice.waitForWrite(15000)) {
+ if (socketDevice.waitForWrite(15s)) {
QVERIFY(socketDevice.state() == QAbstractSocket::UnconnectedState ||
socketDevice.state() == QAbstractSocket::ConnectedState);
} else {
@@ -940,13 +917,13 @@ void tst_QSocks5SocketEngine::fragmentation_data()
responses << authMethodBasic << authSuccess.left(1) << authSuccess.mid(1) << connectResponseIPv4;
QTest::newRow("auth-response") << responses;
- for (int i = 1; i < connectResponseIPv4.length() - 1; i++) {
+ for (int i = 1; i < connectResponseIPv4.size() - 1; i++) {
responses.clear();
responses << authMethodNone << connectResponseIPv4.left(i) << connectResponseIPv4.mid(i);
QTest::newRow(qPrintable(QString("connect-response-ipv4-") + QString::number(i))) << responses;
}
- for (int i = 1; i < connectResponseIPv6.length() - 1; i++) {
+ for (int i = 1; i < connectResponseIPv6.size() - 1; i++) {
responses.clear();
responses << authMethodNone << connectResponseIPv6.left(i) << connectResponseIPv6.mid(i);
QTest::newRow(qPrintable(QString("connect-response-ipv6-") + QString::number(i))) << responses;
@@ -989,13 +966,13 @@ void tst_QSocks5SocketEngine::incomplete_data()
responses << authMethodBasic << authSuccess.left(1);
QTest::newRow("auth-response") << responses;
- for (int i = 1; i < connectResponseIPv4.length() - 1; i++) {
+ for (int i = 1; i < connectResponseIPv4.size() - 1; i++) {
responses.clear();
responses << authMethodNone << connectResponseIPv4.left(i);
QTest::newRow(qPrintable(QString("connect-response-ipv4-") + QString::number(i))) << responses;
}
- for (int i = 1; i < connectResponseIPv6.length() - 1; i++) {
+ for (int i = 1; i < connectResponseIPv6.size() - 1; i++) {
responses.clear();
responses << authMethodNone << connectResponseIPv6.left(i);
QTest::newRow(qPrintable(QString("connect-response-ipv6-") + QString::number(i))) << responses;
diff --git a/tests/auto/network/socket/qtcpserver/BLACKLIST b/tests/auto/network/socket/qtcpserver/BLACKLIST
index c6d4d49908..a8b5f5d137 100644
--- a/tests/auto/network/socket/qtcpserver/BLACKLIST
+++ b/tests/auto/network/socket/qtcpserver/BLACKLIST
@@ -1,19 +1,13 @@
[listenWhileListening:WithSocks5Proxy]
linux
windows
-[ipv6Server]
-windows-7sp1
-windows-10 msvc-2017
[ipv6Server:WithoutProxy]
windows
osx
-[eagainBlockingAccept]
-windows-7sp1
-windows-10
[serverAddress]
-windows-7sp1
+# QTBUG-103056
+qnx
windows-10
[linkLocal]
macos arm
-
diff --git a/tests/auto/network/socket/qtcpserver/CMakeLists.txt b/tests/auto/network/socket/qtcpserver/CMakeLists.txt
index 01f6c8b672..b01a164302 100644
--- a/tests/auto/network/socket/qtcpserver/CMakeLists.txt
+++ b/tests/auto/network/socket/qtcpserver/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qtcpserver.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_qtcpserver LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
-add_subdirectory(test)
add_subdirectory(crashingServer)
+add_subdirectory(test)
diff --git a/tests/auto/network/socket/qtcpserver/crashingServer/CMakeLists.txt b/tests/auto/network/socket/qtcpserver/crashingServer/CMakeLists.txt
index dd309ba605..bb1feb0237 100644
--- a/tests/auto/network/socket/qtcpserver/crashingServer/CMakeLists.txt
+++ b/tests/auto/network/socket/qtcpserver/crashingServer/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from crashingServer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## crashingServer Binary:
@@ -8,7 +9,7 @@ qt_internal_add_executable(crashingServer
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/socket/qtcpserver/crashingServer/main.cpp b/tests/auto/network/socket/qtcpserver/crashingServer/main.cpp
index 7cb65cd1a3..1c41552eb5 100644
--- a/tests/auto/network/socket/qtcpserver/crashingServer/main.cpp
+++ b/tests/auto/network/socket/qtcpserver/crashingServer/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 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>
@@ -32,18 +7,45 @@
#if defined(Q_OS_WIN) && defined(Q_CC_MSVC)
# include <crtdbg.h>
#endif
+#ifdef Q_OS_UNIX
+# include <sys/resource.h>
+# include <unistd.h>
+#endif
int main(int argc, char *argv[])
{
- // Windows: Suppress crash notification dialog.
#if defined(Q_OS_WIN) && defined(Q_CC_MSVC)
+ // Windows: Suppress crash notification dialog.
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_DEBUG);
+#elif defined(RLIMIT_CORE)
+ // Unix: set our core dump limit to zero to request no dialogs.
+ if (struct rlimit rlim; getrlimit(RLIMIT_CORE, &rlim) == 0) {
+ rlim.rlim_cur = 0;
+ setrlimit(RLIMIT_CORE, &rlim);
+ }
#endif
+
QCoreApplication app(argc, argv);
+ if (argc < 1) {
+ fprintf(stderr, "Need a port number\n");
+ return 1;
+ }
+ int port = QByteArrayView(argv[1]).toInt();
QTcpServer server;
- if (!server.listen(QHostAddress::LocalHost, 49199)) {
- qDebug("Failed to listen: %s", server.errorString().toLatin1().constData());
+ if (!server.listen(QHostAddress::LocalHost, port)) {
+ fprintf(stderr, "Failed to listen: %s\n", server.errorString().toLatin1().constData());
+ if (server.serverError() == QTcpSocket::AddressInUseError) {
+ // let's see if we can find the process that would be holding this
+ // still open
+#ifdef Q_OS_LINUX
+ static const char *ss_args[] = {
+ "ss", "-nap", "sport", "=", argv[1], nullptr
+ };
+ dup2(STDERR_FILENO, STDOUT_FILENO);
+ execvp(ss_args[0], const_cast<char **>(ss_args));
+#endif
+ }
return 1;
}
diff --git a/tests/auto/network/socket/qtcpserver/test/CMakeLists.txt b/tests/auto/network/socket/qtcpserver/test/CMakeLists.txt
index 74aed77c95..55615bbae1 100644
--- a/tests/auto/network/socket/qtcpserver/test/CMakeLists.txt
+++ b/tests/auto/network/socket/qtcpserver/test/CMakeLists.txt
@@ -1,28 +1,27 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtcpserver Test:
#####################################################################
qt_internal_add_test(tst_qtcpserver
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../tst_qtcpserver.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
- QT_TEST_SERVER_LIST "danted" "cyrus" "squid" "ftp-proxy" # special case
+ QT_TEST_SERVER_LIST "danted" "cyrus" "squid" "ftp-proxy"
)
-#### Keys ignored in scope 1:.:.:test.pro:<TRUE>:
-# MOC_DIR = "tmp"
+add_dependencies(tst_qtcpserver
+ crashingServer
+)
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qtcpserver CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
ws2_32
)
-
-#### Keys ignored in scope 6:.:.:test.pro:LINUX:
-# QT_TEST_SERVER_LIST = "danted" "cyrus" "squid" "ftp-proxy"
diff --git a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
index 4759ac292a..c03076d98e 100644
--- a/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
+++ b/tests/auto/network/socket/qtcpserver/tst_qtcpserver.cpp
@@ -1,34 +1,7 @@
-/****************************************************************************
-**
-** 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 <qglobal.h>
-// To prevent windows system header files from re-defining min/max
-#define NOMINMAX 1
#if defined(_WIN32)
#include <winsock2.h>
#else
@@ -60,6 +33,8 @@
#include <qnetworkinterface.h>
#include <QNetworkProxy>
+#include <QSet>
+#include <QList>
#include "../../../network-settings.h"
@@ -117,6 +92,9 @@ private slots:
void pauseAccepting();
+ void pendingConnectionAvailable_data();
+ void pendingConnectionAvailable();
+
private:
bool shouldSkipIpv6TestsForBrokenGetsockopt();
#ifdef SHOULD_CHECK_SYSCALL_SUPPORT
@@ -160,7 +138,8 @@ void tst_QTcpServer::initTestCase()
#ifdef QT_TEST_SERVER
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::socksProxyServerName(), 1080));
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::httpProxyServerName(), 3128));
- QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::ftpProxyServerName(), 2121));
+ // FTP currently not supported:
+ // QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::ftpProxyServerName(), 2121));
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::imapServerName(), 143));
#else
if (!QtNetworkSettings::verifyTestNetworkSettings())
@@ -268,7 +247,7 @@ void tst_QTcpServer::clientServerLoop()
QVERIFY(server.waitForNewConnection(5000));
QVERIFY(server.hasPendingConnections());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QTcpSocket *serverSocket = server.nextPendingConnection();
QVERIFY(serverSocket != 0);
@@ -429,9 +408,9 @@ void tst_QTcpServer::maxPendingConnections()
// two connections have been made. The second compare makes sure no
// more are accepted. Creating connections happens multithreaded so
// qWait must be used for that.
- QTRY_COMPARE(spy.count(), 2);
+ QTRY_COMPARE(spy.size(), 2);
QTest::qWait(100);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QVERIFY(server.hasPendingConnections());
QVERIFY(server.nextPendingConnection());
@@ -480,7 +459,7 @@ public:
protected:
void run() override
{
- sleep(2);
+ sleep(std::chrono::seconds{2});
QTcpSocket socket;
socket.connectToHost(host, port);
@@ -598,9 +577,6 @@ void tst_QTcpServer::addressReusable()
#if !QT_CONFIG(process)
QSKIP("No qprocess support", SkipAll);
#else
-#ifdef Q_OS_LINUX
- QSKIP("The addressReusable test is unstable on Linux. See QTBUG-39985.");
-#endif
QFETCH_GLOBAL(bool, setProxy);
if (setProxy) {
#ifndef QT_NO_NETWORKPROXY
@@ -611,16 +587,25 @@ void tst_QTcpServer::addressReusable()
QSKIP("No proxy support");
#endif // QT_NO_NETWORKPROXY
}
+
+ QTcpServer server;
+ QVERIFY(server.listen(QHostAddress::LocalHost, 0));
+ quint16 serverPort = server.serverPort();
+ qDebug() << "Got port" << serverPort;
+ server.close(); // cleanly close
+
+ QTest::qSleep(10);
+
// The crashingServer process will crash once it gets a connection.
QProcess process;
QString processExe = crashingServerDir + "/crashingServer";
- process.start(processExe);
+ process.start(processExe, { QString::number(serverPort) });
QVERIFY2(process.waitForStarted(), qPrintable(
QString::fromLatin1("Could not start %1: %2").arg(processExe, process.errorString())));
- QVERIFY(process.waitForReadyRead(5000));
+ QVERIFY2(process.waitForReadyRead(5000), qPrintable(process.readAllStandardError()));
QTcpSocket socket;
- socket.connectToHost(QHostAddress::LocalHost, 49199);
+ socket.connectToHost(QHostAddress::LocalHost, serverPort);
QVERIFY(socket.waitForConnected(5000));
QVERIFY(process.waitForFinished(30000));
@@ -628,8 +613,9 @@ void tst_QTcpServer::addressReusable()
// Give the system some time.
QTest::qSleep(10);
- QTcpServer server;
- QVERIFY(server.listen(QHostAddress::LocalHost, 49199));
+ // listen again
+ QVERIFY2(server.listen(QHostAddress::LocalHost, serverPort),
+ qPrintable(server.errorString()));
#endif
}
@@ -748,6 +734,7 @@ void tst_QTcpServer::proxyFactory_data()
<< proxyList << proxyList.at(1)
<< false << int(QAbstractSocket::UnknownSocketError);
+#if 0 // ftp not currently supported
proxyList.clear();
proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121)
<< QNetworkProxy(QNetworkProxy::HttpCachingProxy, QtNetworkSettings::httpProxyServerName(), 3128)
@@ -755,6 +742,7 @@ void tst_QTcpServer::proxyFactory_data()
QTest::newRow("ftp+cachinghttp+socks5")
<< proxyList << proxyList.at(2)
<< false << int(QAbstractSocket::UnknownSocketError);
+#endif
// tests that fail to listen
proxyList.clear();
@@ -769,6 +757,7 @@ void tst_QTcpServer::proxyFactory_data()
<< proxyList << QNetworkProxy()
<< true << int(QAbstractSocket::UnsupportedSocketOperationError);
+#if 0 // ftp not currently supported
proxyList.clear();
proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121);
QTest::newRow("ftp")
@@ -781,6 +770,7 @@ void tst_QTcpServer::proxyFactory_data()
QTest::newRow("ftp+cachinghttp")
<< proxyList << QNetworkProxy()
<< true << int(QAbstractSocket::UnsupportedSocketOperationError);
+#endif
}
void tst_QTcpServer::proxyFactory()
@@ -875,10 +865,12 @@ void tst_QTcpServer::serverAddress_data()
QTest::newRow("AnyIPv4") << QHostAddress(QHostAddress::AnyIPv4) << QHostAddress(QHostAddress::AnyIPv4);
if (QtNetworkSettings::hasIPv6())
QTest::newRow("AnyIPv6") << QHostAddress(QHostAddress::AnyIPv6) << QHostAddress(QHostAddress::AnyIPv6);
- foreach (const QNetworkInterface &iface, QNetworkInterface::allInterfaces()) {
+ const auto ifaces = QNetworkInterface::allInterfaces();
+ for (const QNetworkInterface &iface : ifaces) {
if ((iface.flags() & QNetworkInterface::IsUp) == 0)
continue;
- foreach (const QNetworkAddressEntry &entry, iface.addressEntries()) {
+ const auto entries = iface.addressEntries();
+ for (const QNetworkAddressEntry &entry : entries) {
QTest::newRow(qPrintable(entry.ip().toString())) << entry.ip() << entry.ip();
}
}
@@ -932,7 +924,8 @@ void tst_QTcpServer::linkLocal()
QSet <QString> scopes;
QHostAddress localMaskv4("169.254.0.0");
QHostAddress localMaskv6("fe80::");
- foreach (const QNetworkInterface& iface, QNetworkInterface::allInterfaces()) {
+ const auto ifaces = QNetworkInterface::allInterfaces();
+ for (const QNetworkInterface &iface : ifaces) {
//Windows preallocates link local addresses to interfaces that are down.
//These may or may not work depending on network driver (they do not work for the Bluetooth PAN driver)
if (iface.flags() & QNetworkInterface::IsUp) {
@@ -945,8 +938,15 @@ void tst_QTcpServer::linkLocal()
// (we don't know why)
if (iface.name().startsWith("utun"))
continue;
+ // Do not use the iBridge interfae
+ if (iface.hardwareAddress() == "AC:DE:48:00:11:22")
+ continue;
+ // Do no use the Apple Wireless Direct Link interfaces
+ if (iface.name().startsWith("awdl"))
+ continue;
#endif
- foreach (QNetworkAddressEntry addressEntry, iface.addressEntries()) {
+ const auto entries = iface.addressEntries();
+ for (const QNetworkAddressEntry &addressEntry : entries) {
QHostAddress addr = addressEntry.ip();
if (addr.isInSubnet(localMaskv4, 16)) {
addresses << addr;
@@ -965,7 +965,7 @@ void tst_QTcpServer::linkLocal()
QList<QTcpServer*> servers;
quint16 port = 0;
- foreach (const QHostAddress& addr, addresses) {
+ for (const QHostAddress &addr : std::as_const(addresses)) {
QTcpServer *server = new QTcpServer;
QVERIFY(server->listen(addr, port));
port = server->serverPort(); //listen to same port on different interfaces
@@ -973,7 +973,7 @@ void tst_QTcpServer::linkLocal()
}
QList<QTcpSocket*> clients;
- foreach (const QHostAddress& addr, addresses) {
+ for (const QHostAddress &addr : std::as_const(addresses)) {
//unbound socket
QTcpSocket *socket = new QTcpSocket;
socket->connectToHost(addr, port);
@@ -988,7 +988,7 @@ void tst_QTcpServer::linkLocal()
}
//each server should have two connections
- foreach (QTcpServer* server, servers) {
+ for (QTcpServer *server : std::as_const(servers)) {
//qDebug() << "checking for connections" << server->serverAddress() << ":" << server->serverPort();
QVERIFY(server->waitForNewConnection(5000));
QTcpSocket* remote = server->nextPendingConnection();
@@ -1023,12 +1023,12 @@ void tst_QTcpServer::eagainBlockingAccept()
QTcpSocket s;
s.connectToHost(QHostAddress::LocalHost, 7896);
QSignalSpy spy(&server, SIGNAL(newConnection()));
- QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 500);
+ QTRY_COMPARE_WITH_TIMEOUT(spy.size(), 1, 500);
s.close();
// To test try again, should connect just fine.
s.connectToHost(QHostAddress::LocalHost, 7896);
- QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 2, 500);
+ QTRY_COMPARE_WITH_TIMEOUT(spy.size(), 2, 500);
s.close();
server.close();
}
@@ -1064,13 +1064,13 @@ void tst_QTcpServer::pauseAccepting()
QTcpSocket sockets[NumSockets];
sockets[0].connectToHost(address, server.serverPort());
QVERIFY(spy.wait());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
server.pauseAccepting();
for (int i = 1; i < NumSockets; ++i)
sockets[i].connectToHost(address, server.serverPort());
QVERIFY(!spy.wait(400));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
server.resumeAccepting();
if (setProxy) {
@@ -1078,7 +1078,75 @@ void tst_QTcpServer::pauseAccepting()
Abort);
}
QVERIFY(spy.wait());
- QCOMPARE(spy.count(), 6);
+ QCOMPARE(spy.size(), 6);
+}
+
+
+// Only adds the socket to the pending connections list after emitNextSocket is
+// called. It's very artificial, but it allows us to test the behavior of
+// the pendingConnectionAvailable signal when a server doesn't add the socket
+// during the incomingConnection virtual function.
+class DerivedServer : public QTcpServer
+{
+public:
+ explicit DerivedServer(QObject *parent = nullptr)
+ : QTcpServer(parent)
+ {
+ }
+
+ void emitNextSocket()
+ {
+ if (m_socketDescriptors.isEmpty())
+ return;
+ auto *socket = new QTcpSocket(this);
+ socket->setSocketDescriptor(m_socketDescriptors.back());
+ m_socketDescriptors.pop_back();
+ addPendingConnection(socket);
+ }
+protected:
+ void incomingConnection(qintptr socketDescriptor) override
+ {
+ m_socketDescriptors.push_back(socketDescriptor);
+ }
+private:
+ QList<qintptr> m_socketDescriptors;
+};
+
+void tst_QTcpServer::pendingConnectionAvailable_data()
+{
+ QTest::addColumn<bool>("useDerivedServer");
+ QTest::newRow("QTcpServer") << false;
+ QTest::newRow("DerivedServer") << true;
+}
+
+void tst_QTcpServer::pendingConnectionAvailable()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ QSKIP("This feature does not differentiate with or without proxy");
+ QFETCH(bool, useDerivedServer);
+
+ QTcpServer *server = useDerivedServer ? new DerivedServer : new QTcpServer;
+ if (!server->listen(QHostAddress::LocalHost, 0)) {
+ qWarning() << "Server failed to listen:" << server->errorString();
+ QSKIP("Server failed to listen");
+ }
+ QSignalSpy newConnectionSpy(server, &QTcpServer::newConnection);
+ QSignalSpy pendingConnectionSpy(server, &QTcpServer::pendingConnectionAvailable);
+
+ QTcpSocket socket;
+ socket.connectToHost(QHostAddress::LocalHost, server->serverPort());
+
+ QVERIFY(newConnectionSpy.wait());
+ QVERIFY(socket.waitForConnected());
+ QCOMPARE(socket.state(), QTcpSocket::ConnectedState);
+
+ int expectedPendingConnections = useDerivedServer ? 0 : 1;
+ QCOMPARE(pendingConnectionSpy.size(), expectedPendingConnections);
+
+ if (useDerivedServer)
+ static_cast<DerivedServer *>(server)->emitNextSocket();
+ QCOMPARE(pendingConnectionSpy.size(), 1);
}
QTEST_MAIN(tst_QTcpServer)
diff --git a/tests/auto/network/socket/qtcpsocket/BLACKLIST b/tests/auto/network/socket/qtcpsocket/BLACKLIST
index d42457d743..6261c85a09 100644
--- a/tests/auto/network/socket/qtcpsocket/BLACKLIST
+++ b/tests/auto/network/socket/qtcpsocket/BLACKLIST
@@ -1,7 +1,24 @@
[timeoutConnect:ip]
windows
-[connectToHostError]
-windows-10 gcc developer-build
+# QTBUG-101274
+[timeoutConnect:WithSocks5Proxy:ip]
+qnx ci
+[timeoutConnect:WithSocks5ProxyAuth:ip]
+qnx ci
+[timeoutConnect:WithHttpProxy:ip]
+qnx ci
+[timeoutConnect:WithHttpProxyBasicAuth:ip]
+qnx ci
+[timeoutConnect:WithSocks5Proxy SSL:ip]
+qnx ci
+[timeoutConnect:WithSocks5AuthProxy SSL:ip]
+qnx ci
+[timeoutConnect:WithHttpProxy SSL:ip]
+qnx ci
+[timeoutConnect:WithHttpProxyBasicAuth SSL:ip]
+qnx ci
+[suddenRemoteDisconnect:WithoutProxy:Qt4 Client <-> Qt4 Server]
+qnx ci
# QTBUG-66247
[delayedClose:WithSocks5Proxy]
windows-10 gcc developer-build
@@ -53,3 +70,8 @@ windows-10 gcc developer-build
windows-10 gcc developer-build
[bind]
macos arm
+# QTBUG-101274
+[bindThenResolveHost:WithoutProxy:first-fail]
+qnx ci
+[bindThenResolveHost:WithoutProxy SSL:first-fail]
+qnx ci
diff --git a/tests/auto/network/socket/qtcpsocket/CMakeLists.txt b/tests/auto/network/socket/qtcpsocket/CMakeLists.txt
index 645c65671a..7b6bb4d881 100644
--- a/tests/auto/network/socket/qtcpsocket/CMakeLists.txt
+++ b/tests/auto/network/socket/qtcpsocket/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qtcpsocket.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_qtcpsocket LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
diff --git a/tests/auto/network/socket/qtcpsocket/stressTest/CMakeLists.txt b/tests/auto/network/socket/qtcpsocket/stressTest/CMakeLists.txt
index 950c4356e2..3ea6c55895 100644
--- a/tests/auto/network/socket/qtcpsocket/stressTest/CMakeLists.txt
+++ b/tests/auto/network/socket/qtcpsocket/stressTest/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from stressTest.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## stressTest Binary:
@@ -9,11 +10,7 @@ qt_internal_add_executable(stressTest
SOURCES
Test.cpp Test.h
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:stressTest.pro:<TRUE>:
-# MOC_DIR = ".moc/"
-# TMP_DIR = ".tmp/"
diff --git a/tests/auto/network/socket/qtcpsocket/stressTest/Test.cpp b/tests/auto/network/socket/qtcpsocket/stressTest/Test.cpp
index ed61db1a13..8d6e470220 100644
--- a/tests/auto/network/socket/qtcpsocket/stressTest/Test.cpp
+++ b/tests/auto/network/socket/qtcpsocket/stressTest/Test.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
// Qt
#include <QByteArray>
#include <QCoreApplication>
diff --git a/tests/auto/network/socket/qtcpsocket/stressTest/Test.h b/tests/auto/network/socket/qtcpsocket/stressTest/Test.h
index 5e6b2b9467..495b90d733 100644
--- a/tests/auto/network/socket/qtcpsocket/stressTest/Test.h
+++ b/tests/auto/network/socket/qtcpsocket/stressTest/Test.h
@@ -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
#ifndef TEST_H
#define TEST_H
diff --git a/tests/auto/network/socket/qtcpsocket/stressTest/main.cpp b/tests/auto/network/socket/qtcpsocket/stressTest/main.cpp
index 1948389e37..f989a4de34 100644
--- a/tests/auto/network/socket/qtcpsocket/stressTest/main.cpp
+++ b/tests/auto/network/socket/qtcpsocket/stressTest/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 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 "Test.h"
#include <QCoreApplication>
diff --git a/tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt b/tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt
index 759f655417..c3258f8a95 100644
--- a/tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt
+++ b/tests/auto/network/socket/qtcpsocket/test/CMakeLists.txt
@@ -1,35 +1,24 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtcpsocket Test:
#####################################################################
qt_internal_add_test(tst_qtcpsocket
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../tst_qtcpsocket.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
- QT_TEST_SERVER_LIST "danted" "squid" "apache2" "ftp-proxy" "vsftpd" "iptables" "cyrus" # special case
+ QT_TEST_SERVER_LIST "danted" "squid" "apache2" "ftp-proxy" "vsftpd" "iptables" "cyrus"
)
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qtcpsocket CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
ws2_32
)
-
-#### Keys ignored in scope 4:.:.:test.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# DESTDIR = "../debug"
-
-#### Keys ignored in scope 5:.:.:test.pro:else:
-# DESTDIR = "../release"
-
-#### Keys ignored in scope 6:.:.:test.pro:else:
-# DESTDIR = "../"
-
-#### Keys ignored in scope 7:.:.:test.pro:LINUX:
-# QT_TEST_SERVER_LIST = "danted" "squid" "apache2" "ftp-proxy" "vsftpd" "iptables" "cyrus"
diff --git a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
index 4d903a710a..4ec01a9d94 100644
--- a/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
+++ b/tests/auto/network/socket/qtcpsocket/tst_qtcpsocket.cpp
@@ -1,36 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2017 Intel Corporation.
-** 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.
+// Copyright (C) 2017 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qglobal.h>
-// To prevent windows system header files from re-defining min/max
-#define NOMINMAX 1
#if defined(_WIN32)
#include <winsock2.h>
#else
@@ -83,14 +56,12 @@
#include <memory>
-#ifdef Q_OS_LINUX
-#include "private/qnativesocketengine_p.h"
-#endif // Q_OS_LINUX
-
#include "private/qhostinfo_p.h"
#include "../../../network-settings.h"
+using namespace Qt::StringLiterals;
+
QT_FORWARD_DECLARE_CLASS(QTcpSocket)
class SocketPair;
@@ -312,7 +283,7 @@ tst_QTcpSocket::tst_QTcpSocket()
tmpSocket = 0;
//This code relates to the socketsConstructedBeforeEventLoop test case
- earlyConstructedSockets = new SocketPair;
+ earlyConstructedSockets = new SocketPair(this);
QVERIFY(earlyConstructedSockets->create());
earlyBytesWrittenCount = 0;
earlyReadyReadCount = 0;
@@ -361,7 +332,8 @@ void tst_QTcpSocket::initTestCase()
//QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::firewallServerName(), 1357));
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::socksProxyServerName(), 1080));
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::ftpServerName(), 21));
- QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::ftpProxyServerName(), 2121));
+ // FTP currently not supported:
+ // QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::ftpProxyServerName(), 2121));
#else
if (!QtNetworkSettings::verifyTestNetworkSettings())
QSKIP("No network test server available");
@@ -376,8 +348,8 @@ void tst_QTcpSocket::init()
QFETCH_GLOBAL(int, proxyType);
QList<QHostAddress> socks5Addresses = QHostInfo::fromName(QtNetworkSettings::socksProxyServerName()).addresses();
QList<QHostAddress> httpProxyAddresses = QHostInfo::fromName(QtNetworkSettings::httpProxyServerName()).addresses();
- QVERIFY2(socks5Addresses.count() > 0, "failed to get ip address for SOCKS5 proxy server");
- QVERIFY2(httpProxyAddresses.count() > 0, "failed to get ip address for HTTP proxy server");
+ QVERIFY2(socks5Addresses.size() > 0, "failed to get ip address for SOCKS5 proxy server");
+ QVERIFY2(httpProxyAddresses.size() > 0, "failed to get ip address for HTTP proxy server");
QString socks5Address = socks5Addresses.first().toString();
QString httpProxyAddress = httpProxyAddresses.first().toString();
QNetworkProxy proxy;
@@ -517,12 +489,13 @@ void tst_QTcpSocket::bind_data()
bool testIpv6 = false;
// iterate all interfaces, add all addresses on them as test data
- QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
- foreach (const QNetworkInterface &netinterface, interfaces) {
+ const QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
+ for (const QNetworkInterface &netinterface : interfaces) {
if (!netinterface.isValid())
continue;
- foreach (const QNetworkAddressEntry &entry, netinterface.addressEntries()) {
+ const auto entries = netinterface.addressEntries();
+ for (const QNetworkAddressEntry &entry : entries) {
if (entry.ip().isInSubnet(QHostAddress::parseSubnet("fe80::/10"))
|| entry.ip().isInSubnet(QHostAddress::parseSubnet("169.254/16")))
continue; // link-local bind will fail, at least on Linux, so skip it.
@@ -552,12 +525,12 @@ void tst_QTcpSocket::bind_data()
// these ranges are guaranteed to be reserved for 'documentation purposes',
// and thus, should be unused in the real world. Not that I'm assuming the
// world is full of competent administrators, or anything.
- QStringList knownBad;
- knownBad << "198.51.100.1";
- knownBad << "2001:0DB8::1";
- foreach (const QString &badAddress, knownBad) {
+ const QString knownBad[] = {
+ u"198.51.100.1"_s,
+ u"2001:0DB8::1"_s
+ };
+ for (const QString &badAddress : knownBad)
QTest::addRow("%s:0", badAddress.toLatin1().constData()) << badAddress << 0 << false << QString();
- }
// try to bind to a privileged ports
// we should fail if we're not root (unless the ports are in use!)
@@ -592,7 +565,7 @@ void tst_QTcpSocket::bind()
std::unique_ptr<QTcpSocket> socket(newSocket());
quint16 boundPort;
- qintptr fd;
+ qintptr fd = 0;
if (successExpected) {
bool randomPort = port == -1;
@@ -1810,7 +1783,7 @@ void tst_QTcpSocket::recursiveReadyRead()
QVERIFY2(!timeout(),
"Timed out when waiting for the readyRead() signal.");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
delete testSocket;
}
@@ -1852,7 +1825,7 @@ void tst_QTcpSocket::atEnd()
QVERIFY2(greeting.startsWith("220 (vsFTPd 3."), qPrintable(greeting));
#else
// Test server must use some vsFTPd 2.x.x version
- QVERIFY2(greeting.length() == sizeof("220 (vsFTPd 2.x.x)")-1, qPrintable(greeting));
+ QVERIFY2(greeting.size() == sizeof("220 (vsFTPd 2.x.x)")-1, qPrintable(greeting));
QVERIFY2(greeting.startsWith("220 (vsFTPd 2."), qPrintable(greeting));
#endif
QVERIFY2(greeting.endsWith(QLatin1Char(')')), qPrintable(greeting));
@@ -2035,8 +2008,8 @@ void tst_QTcpSocket::remoteCloseError()
enterLoop(30);
QVERIFY(!timeout());
- QCOMPARE(disconnectedSpy.count(), 1);
- QCOMPARE(errorSpy.count(), 1);
+ QCOMPARE(disconnectedSpy.size(), 1);
+ QCOMPARE(errorSpy.size(), 1);
QCOMPARE(clientSocket->error(), QAbstractSocket::RemoteHostClosedError);
delete serverSocket;
@@ -2167,7 +2140,7 @@ void tst_QTcpSocket::waitForConnectedInHostLookupSlot()
if (tmpSocket->state() != QAbstractSocket::ConnectedState)
loop.exec();
- QCOMPARE(timerSpy.count(), 0);
+ QCOMPARE(timerSpy.size(), 0);
delete tmpSocket;
}
@@ -2221,7 +2194,7 @@ public slots:
#if defined(Q_OS_MAC)
pthread_yield_np();
#elif defined Q_OS_LINUX && !defined Q_OS_ANDROID
- pthread_yield();
+ sched_yield();
#endif
if (!sock->waitForConnected()) {
networkTimeout = true;
@@ -2272,7 +2245,7 @@ void tst_QTcpSocket::readyReadSignalsAfterWaitForReadyRead()
// Wait for the read
QVERIFY(socket->waitForReadyRead(10000));
- QCOMPARE(readyReadSpy.count(), 1);
+ QCOMPARE(readyReadSpy.size(), 1);
QString s = socket->readLine();
QVERIFY2(QtNetworkSettings::compareReplyIMAP(s.toLatin1()), s.toLatin1().constData());
@@ -2280,7 +2253,7 @@ void tst_QTcpSocket::readyReadSignalsAfterWaitForReadyRead()
QCoreApplication::instance()->processEvents();
QCOMPARE(socket->bytesAvailable(), qint64(0));
- QCOMPARE(readyReadSpy.count(), 1);
+ QCOMPARE(readyReadSpy.size(), 1);
delete socket;
}
@@ -2354,8 +2327,8 @@ void tst_QTcpSocket::abortiveClose()
enterLoop(5);
- QCOMPARE(readyReadSpy.count(), 0);
- QCOMPARE(errorSpy.count(), 1);
+ QCOMPARE(readyReadSpy.size(), 0);
+ QCOMPARE(errorSpy.size(), 1);
QCOMPARE(*static_cast<const int *>(errorSpy.at(0).at(0).constData()),
int(QAbstractSocket::RemoteHostClosedError));
@@ -2474,11 +2447,11 @@ void tst_QTcpSocket::connectionRefused()
QCOMPARE(socket->state(), QAbstractSocket::UnconnectedState);
QCOMPARE(socket->error(), QAbstractSocket::ConnectionRefusedError);
- QCOMPARE(stateSpy.count(), 3);
+ QCOMPARE(stateSpy.size(), 3);
QCOMPARE(qvariant_cast<QAbstractSocket::SocketState>(stateSpy.at(0).at(0)), QAbstractSocket::HostLookupState);
QCOMPARE(qvariant_cast<QAbstractSocket::SocketState>(stateSpy.at(1).at(0)), QAbstractSocket::ConnectingState);
QCOMPARE(qvariant_cast<QAbstractSocket::SocketState>(stateSpy.at(2).at(0)), QAbstractSocket::UnconnectedState);
- QCOMPARE(errorSpy.count(), 1);
+ QCOMPARE(errorSpy.size(), 1);
delete socket;
}
@@ -2610,7 +2583,7 @@ void tst_QTcpSocket::moveToThread0()
{
// Case 1: Moved after connecting, before waiting for connection.
- QTcpSocket *socket = newSocket();;
+ QTcpSocket *socket = newSocket();
socket->connectToHost(QtNetworkSettings::imapServerName(), 143);
socket->moveToThread(0);
QVERIFY(socket->waitForConnected(5000));
@@ -2941,6 +2914,7 @@ void tst_QTcpSocket::proxyFactory_data()
<< proxyList << proxyList.at(1)
<< false << int(QAbstractSocket::UnknownSocketError);
+#if 0 // FTP not currently supported
proxyList.clear();
proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121)
<< QNetworkProxy(QNetworkProxy::HttpCachingProxy, QtNetworkSettings::httpProxyServerName(), 3129)
@@ -2948,6 +2922,7 @@ void tst_QTcpSocket::proxyFactory_data()
QTest::newRow("ftp+cachinghttp+socks5")
<< proxyList << proxyList.at(2)
<< false << int(QAbstractSocket::UnknownSocketError);
+#endif
// tests that fail to connect
proxyList.clear();
@@ -2956,6 +2931,7 @@ void tst_QTcpSocket::proxyFactory_data()
<< proxyList << QNetworkProxy()
<< true << int(QAbstractSocket::UnsupportedSocketOperationError);
+#if 0 // FTP not currently supported
proxyList.clear();
proxyList << QNetworkProxy(QNetworkProxy::FtpCachingProxy, QtNetworkSettings::ftpProxyServerName(), 2121);
QTest::newRow("ftp")
@@ -2968,6 +2944,7 @@ void tst_QTcpSocket::proxyFactory_data()
QTest::newRow("ftp+cachinghttp")
<< proxyList << QNetworkProxy()
<< true << int(QAbstractSocket::UnsupportedSocketOperationError);
+#endif
}
void tst_QTcpSocket::proxyFactory()
@@ -3147,8 +3124,8 @@ void tst_QTcpSocket::serverDisconnectWithBuffered()
QCOMPARE(socket->state(), QAbstractSocket::UnconnectedState);
}
// Test signal emitting
- QCOMPARE(spyDisconnected.count(), 1);
- QVERIFY(spyStateChanged.count() > 0);
+ QCOMPARE(spyDisconnected.size(), 1);
+ QVERIFY(spyStateChanged.size() > 0);
QVERIFY(qvariant_cast<QAbstractSocket::SocketState>(spyStateChanged.last().first())
== QAbstractSocket::UnconnectedState);
@@ -3237,7 +3214,7 @@ void tst_QTcpSocket::readNotificationsAfterBind()
QTestEventLoop::instance().enterLoop(10);
QVERIFY2(!QTestEventLoop::instance().timeout(), "Connection to closed port timed out instead of refusing, something is wrong");
QVERIFY2(socket.state() == QAbstractSocket::UnconnectedState, "Socket connected unexpectedly!");
- QCOMPARE(spyReadyRead.count(), 0);
+ QCOMPARE(spyReadyRead.size(), 0);
}
QTEST_MAIN(tst_QTcpSocket)
diff --git a/tests/auto/network/socket/qudpsocket/BLACKLIST b/tests/auto/network/socket/qudpsocket/BLACKLIST
index 9d4396deb6..f5f6a8e156 100644
--- a/tests/auto/network/socket/qudpsocket/BLACKLIST
+++ b/tests/auto/network/socket/qudpsocket/BLACKLIST
@@ -1,13 +1,7 @@
[writeDatagramToNonExistingPeer]
windows
-# QTBUG-85364
-windows-10 gcc cmake
[readyReadForEmptyDatagram]
opensuse-leap
-[echo]
-opensuse-42.3
-[readyReadForEmptyDatagram]
-linux
[multicast]
centos
macos arm
diff --git a/tests/auto/network/socket/qudpsocket/CMakeLists.txt b/tests/auto/network/socket/qudpsocket/CMakeLists.txt
index b9d0646e58..a7a2659340 100644
--- a/tests/auto/network/socket/qudpsocket/CMakeLists.txt
+++ b/tests/auto/network/socket/qudpsocket/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qudpsocket.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_qudpsocket LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
-add_subdirectory(test)
add_subdirectory(clientserver)
+add_subdirectory(test)
diff --git a/tests/auto/network/socket/qudpsocket/clientserver/CMakeLists.txt b/tests/auto/network/socket/qudpsocket/clientserver/CMakeLists.txt
index 7c8b924ca9..4644d0d96f 100644
--- a/tests/auto/network/socket/qudpsocket/clientserver/CMakeLists.txt
+++ b/tests/auto/network/socket/qudpsocket/clientserver/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from clientserver.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## clientserver Binary:
@@ -8,6 +9,6 @@ qt_internal_add_executable(clientserver
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/socket/qudpsocket/clientserver/main.cpp b/tests/auto/network/socket/qudpsocket/clientserver/main.cpp
index 705abf87e3..76bdf3aada 100644
--- a/tests/auto/network/socket/qudpsocket/clientserver/main.cpp
+++ b/tests/auto/network/socket/qudpsocket/clientserver/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 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 <QtNetwork>
class ClientServer : public QUdpSocket
diff --git a/tests/auto/network/socket/qudpsocket/test/CMakeLists.txt b/tests/auto/network/socket/qudpsocket/test/CMakeLists.txt
index 6a781aadc4..69b62c2f9f 100644
--- a/tests/auto/network/socket/qudpsocket/test/CMakeLists.txt
+++ b/tests/auto/network/socket/qudpsocket/test/CMakeLists.txt
@@ -1,34 +1,20 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qudpsocket Test:
#####################################################################
qt_internal_add_test(tst_qudpsocket
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../tst_qudpsocket.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::TestPrivate
- QT_TEST_SERVER_LIST "danted" "echo" # special case
+ QT_TEST_SERVER_LIST "danted" "echo"
)
-#### Keys ignored in scope 1:.:.:test.pro:<TRUE>:
-# MOC_DIR = "tmp"
-# testcase.timeout = "800"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 3:.:.:test.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# DESTDIR = "../debug"
-
-#### Keys ignored in scope 4:.:.:test.pro:else:
-# DESTDIR = "../release"
-
-#### Keys ignored in scope 5:.:.:test.pro:else:
-# DESTDIR = "../"
-
-#### Keys ignored in scope 6:.:.:test.pro:LINUX:
-# QT_TEST_SERVER_LIST = "danted" "echo"
+if(QT_FEATURE_process)
+ add_dependencies(tst_qudpsocket clientserver)
+endif()
diff --git a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp
index 31fd1a3b30..689ff452f9 100644
--- a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp
+++ b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp
@@ -1,32 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2017 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2017 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSignalSpy>
@@ -36,6 +10,7 @@
#endif
#include <QScopeGuard>
#include <QVersionNumber>
+#include <QSemaphore>
#include <qcoreapplication.h>
#include <qfileinfo.h>
@@ -53,6 +28,7 @@
#include <QNetworkInterface>
#include <qstringlist.h>
+#include <QSet>
#include "../../../network-settings.h"
#include <QtTest/private/qemulationdetector_p.h>
@@ -70,6 +46,8 @@
# define RELIABLE_BYTES_AVAILABLE
#endif
+using namespace Qt::StringLiterals;
+
Q_DECLARE_METATYPE(QHostAddress)
QT_FORWARD_DECLARE_CLASS(QUdpSocket)
@@ -127,6 +105,8 @@ private slots:
void asyncReadDatagram();
void writeInHostLookupState();
+ void readyReadConnectionThrottling();
+
protected slots:
void empty_readyReadSlot();
void empty_connectedSlot();
@@ -145,6 +125,7 @@ private:
QList<QHostAddress> allAddresses;
QHostAddress multicastGroup4, multicastGroup6;
QList<QHostAddress> linklocalMulticastGroups;
+ QNetworkInterface ifaceWithIPv6;
QUdpSocket *m_asyncSender;
QUdpSocket *m_asyncReceiver;
};
@@ -195,26 +176,7 @@ QNetworkInterface tst_QUdpSocket::interfaceForGroup(const QHostAddress &multicas
if (!scope.isEmpty())
return QNetworkInterface::interfaceFromName(scope);
- static QNetworkInterface ipv6if = [&]() {
- // find any link local address in the allAddress list
- for (const QHostAddress &addr: qAsConst(allAddresses)) {
- if (addr.isLoopback())
- continue;
-
- QString scope = addr.scopeId();
- if (!scope.isEmpty()) {
- QNetworkInterface iface = QNetworkInterface::interfaceFromName(scope);
- qDebug() << "Will bind IPv6 sockets to" << iface;
- return iface;
- }
- }
-
- qWarning("interfaceForGroup(%s) could not find any link-local IPv6 address! "
- "Make sure this test is behind a check of QtNetworkSettings::hasIPv6().",
- qUtf8Printable(multicastGroup.toString()));
- return QNetworkInterface();
- }();
- return ipv6if;
+ return ifaceWithIPv6;
}
bool tst_QUdpSocket::shouldWorkaroundLinuxKernelBug()
@@ -293,15 +255,22 @@ void tst_QUdpSocket::initTestCase()
// ff12:: is temporary, not prefix-based, link-local
r[0] = qToBigEndian(Q_UINT64_C(0xff12) << 48);
QHostAddress llbase(*reinterpret_cast<Q_IPV6ADDR *>(&r));
- for (const QHostAddress &a : qAsConst(allAddresses)) {
+ for (const QHostAddress &a : std::as_const(allAddresses)) {
QString scope = a.scopeId();
if (scope.isEmpty())
continue;
llbase.setScopeId(scope);
linklocalMulticastGroups << llbase;
+ if (!ifaceWithIPv6.isValid()) {
+ // Remember the first interface we've found that has IPv6 so we can
+ // bind non-link-local sockets to it (the first is least likely to
+ // be some weird virtual interface).
+ ifaceWithIPv6 = QNetworkInterface::interfaceFromName(scope);
+ }
}
qDebug() << "Will use multicast groups" << multicastGroup4 << multicastGroup6 << linklocalMulticastGroups;
+ qDebug() << "Will bind IPv6 sockets to" << ifaceWithIPv6;
m_workaroundLinuxKernelBug = shouldWorkaroundLinuxKernelBug();
if (QTestPrivate::isRunningArmOnX86())
@@ -358,7 +327,7 @@ void tst_QUdpSocket::unconnectedServerAndClientTest()
QSignalSpy stateChangedSpy(&serverSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)));
QVERIFY2(serverSocket.bind(), serverSocket.errorString().toLatin1().constData());
- QCOMPARE(stateChangedSpy.count(), 1);
+ QCOMPARE(stateChangedSpy.size(), 1);
const char *message[] = {"Yo mista", "Yo", "Wassap"};
@@ -407,10 +376,11 @@ void tst_QUdpSocket::broadcasting()
const char *message[] = {"Yo mista", "", "Yo", "Wassap"};
QList<QHostAddress> broadcastAddresses;
- foreach (QNetworkInterface iface, QNetworkInterface::allInterfaces()) {
+ const auto ifaces = QNetworkInterface::allInterfaces();
+ for (const QNetworkInterface &iface : ifaces) {
if ((iface.flags() & QNetworkInterface::CanBroadcast)
&& iface.flags() & QNetworkInterface::IsUp) {
- for (int i=0;i<iface.addressEntries().count();i++) {
+ for (int i=0;i<iface.addressEntries().size();i++) {
QHostAddress broadcast = iface.addressEntries().at(i).broadcast();
if (broadcast.protocol() == QAbstractSocket::IPv4Protocol)
broadcastAddresses.append(broadcast);
@@ -435,7 +405,7 @@ void tst_QUdpSocket::broadcasting()
for (int k = 0; k < 4; k++) {
broadcastSocket.writeDatagram(message[i], strlen(message[i]),
QHostAddress::Broadcast, serverPort);
- foreach (QHostAddress addr, broadcastAddresses)
+ for (const QHostAddress &addr : std::as_const(broadcastAddresses))
broadcastSocket.writeDatagram(message[i], strlen(message[i]), addr, serverPort);
}
QTestEventLoop::instance().enterLoop(15);
@@ -455,7 +425,7 @@ void tst_QUdpSocket::broadcasting()
QVERIFY(dgram.isValid());
QByteArray arr = dgram.data();
- QCOMPARE(arr.length(), messageLength);
+ QCOMPARE(arr.size(), messageLength);
arr.resize(messageLength);
QCOMPARE(arr, QByteArray(message[i]));
@@ -515,27 +485,27 @@ void tst_QUdpSocket::loop()
QHostAddress peterAddress = makeNonAny(peter.localAddress());
QHostAddress paulAddress = makeNonAny(paul.localAddress());
- QCOMPARE(peter.writeDatagram(peterMessage.data(), peterMessage.length(),
- paulAddress, paul.localPort()), qint64(peterMessage.length()));
- QCOMPARE(paul.writeDatagram(paulMessage.data(), paulMessage.length(),
- peterAddress, peter.localPort()), qint64(paulMessage.length()));
+ QCOMPARE(peter.writeDatagram(peterMessage.data(), peterMessage.size(),
+ paulAddress, paul.localPort()), qint64(peterMessage.size()));
+ QCOMPARE(paul.writeDatagram(paulMessage.data(), paulMessage.size(),
+ peterAddress, peter.localPort()), qint64(paulMessage.size()));
QVERIFY2(peter.waitForReadyRead(9000), QtNetworkSettings::msgSocketError(peter).constData());
QVERIFY2(paul.waitForReadyRead(9000), QtNetworkSettings::msgSocketError(paul).constData());
- QNetworkDatagram peterDatagram = peter.receiveDatagram(paulMessage.length() * 2);
- QNetworkDatagram paulDatagram = paul.receiveDatagram(peterMessage.length() * 2);
+ QNetworkDatagram peterDatagram = peter.receiveDatagram(paulMessage.size() * 2);
+ QNetworkDatagram paulDatagram = paul.receiveDatagram(peterMessage.size() * 2);
if (success) {
- QCOMPARE(peterDatagram.data().length(), qint64(paulMessage.length()));
- QCOMPARE(paulDatagram.data().length(), qint64(peterMessage.length()));
+ QCOMPARE(peterDatagram.data().size(), qint64(paulMessage.size()));
+ QCOMPARE(paulDatagram.data().size(), qint64(peterMessage.size()));
} else {
// this code path seems to never be executed
- QVERIFY(peterDatagram.data().length() != paulMessage.length());
- QVERIFY(paulDatagram.data().length() != peterMessage.length());
+ QVERIFY(peterDatagram.data().size() != paulMessage.size());
+ QVERIFY(paulDatagram.data().size() != peterMessage.size());
}
- QCOMPARE(peterDatagram.data().left(paulMessage.length()), paulMessage);
- QCOMPARE(paulDatagram.data().left(peterMessage.length()), peterMessage);
+ QCOMPARE(peterDatagram.data().left(paulMessage.size()), paulMessage);
+ QCOMPARE(paulDatagram.data().left(peterMessage.size()), peterMessage);
QCOMPARE(peterDatagram.senderAddress(), paulAddress);
QCOMPARE(paulDatagram.senderAddress(), peterAddress);
@@ -592,27 +562,27 @@ void tst_QUdpSocket::ipv6Loop()
peterPort = peter.localPort();
paulPort = paul.localPort();
- QCOMPARE(peter.writeDatagram(peterMessage.data(), peterMessage.length(), QHostAddress("::1"),
- paulPort), qint64(peterMessage.length()));
- QCOMPARE(paul.writeDatagram(paulMessage.data(), paulMessage.length(),
- QHostAddress("::1"), peterPort), qint64(paulMessage.length()));
+ QCOMPARE(peter.writeDatagram(peterMessage.data(), peterMessage.size(), QHostAddress("::1"),
+ paulPort), qint64(peterMessage.size()));
+ QCOMPARE(paul.writeDatagram(paulMessage.data(), paulMessage.size(),
+ QHostAddress("::1"), peterPort), qint64(paulMessage.size()));
QVERIFY(peter.waitForReadyRead(5000));
QVERIFY(paul.waitForReadyRead(5000));
- QNetworkDatagram peterDatagram = peter.receiveDatagram(paulMessage.length() * 2);
- QNetworkDatagram paulDatagram = paul.receiveDatagram(peterMessage.length() * 2);
+ QNetworkDatagram peterDatagram = peter.receiveDatagram(paulMessage.size() * 2);
+ QNetworkDatagram paulDatagram = paul.receiveDatagram(peterMessage.size() * 2);
if (success) {
- QCOMPARE(peterDatagram.data().length(), qint64(paulMessage.length()));
- QCOMPARE(paulDatagram.data().length(), qint64(peterMessage.length()));
+ QCOMPARE(peterDatagram.data().size(), qint64(paulMessage.size()));
+ QCOMPARE(paulDatagram.data().size(), qint64(peterMessage.size()));
} else {
// this code path seems to never be executed
- QVERIFY(peterDatagram.data().length() != paulMessage.length());
- QVERIFY(paulDatagram.data().length() != peterMessage.length());
+ QVERIFY(peterDatagram.data().size() != paulMessage.size());
+ QVERIFY(paulDatagram.data().size() != peterMessage.size());
}
- QCOMPARE(peterDatagram.data().left(paulMessage.length()), paulMessage);
- QCOMPARE(paulDatagram.data().left(peterMessage.length()), peterMessage);
+ QCOMPARE(peterDatagram.data().left(paulMessage.size()), paulMessage);
+ QCOMPARE(paulDatagram.data().left(peterMessage.size()), peterMessage);
QCOMPARE(peterDatagram.senderAddress(), paulAddress);
QCOMPARE(paulDatagram.senderAddress(), peterAddress);
@@ -640,7 +610,7 @@ void tst_QUdpSocket::dualStack()
QVERIFY(v4Sock.bind(QHostAddress(QHostAddress::AnyIPv4), 0));
//test v4 -> dual
- QCOMPARE((int)v4Sock.writeDatagram(v4Data.constData(), v4Data.length(), QHostAddress(QHostAddress::LocalHost), dualSock.localPort()), v4Data.length());
+ QCOMPARE((int)v4Sock.writeDatagram(v4Data.constData(), v4Data.size(), QHostAddress(QHostAddress::LocalHost), dualSock.localPort()), v4Data.size());
QVERIFY2(dualSock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(dualSock).constData());
QNetworkDatagram dgram = dualSock.receiveDatagram(100);
QVERIFY(dgram.isValid());
@@ -652,7 +622,7 @@ void tst_QUdpSocket::dualStack()
QCOMPARE(dgram.senderAddress(), makeNonAny(v4Sock.localAddress(), QHostAddress::Null));
if (dgram.destinationPort() != -1) {
QCOMPARE(dgram.destinationPort(), int(dualSock.localPort()));
- QVERIFY(dgram.destinationAddress().isEqual(dualSock.localAddress()));
+ QVERIFY(dgram.destinationAddress().isEqual(makeNonAny(dualSock.localAddress(), QHostAddress::LocalHost)));
} else {
qInfo("Getting IPv4 destination address failed.");
}
@@ -663,7 +633,7 @@ void tst_QUdpSocket::dualStack()
QVERIFY(v6Sock.bind(QHostAddress(QHostAddress::AnyIPv6), 0));
//test v6 -> dual
- QCOMPARE((int)v6Sock.writeDatagram(v6Data.constData(), v6Data.length(), QHostAddress(QHostAddress::LocalHostIPv6), dualSock.localPort()), v6Data.length());
+ QCOMPARE((int)v6Sock.writeDatagram(v6Data.constData(), v6Data.size(), QHostAddress(QHostAddress::LocalHostIPv6), dualSock.localPort()), v6Data.size());
QVERIFY2(dualSock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(dualSock).constData());
dgram = dualSock.receiveDatagram(100);
QVERIFY(dgram.isValid());
@@ -674,7 +644,7 @@ void tst_QUdpSocket::dualStack()
QCOMPARE(dgram.destinationAddress(), makeNonAny(dualSock.localAddress(), QHostAddress::LocalHostIPv6));
//test dual -> v6
- QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHostIPv6), v6Sock.localPort()), dualData.length());
+ QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.size(), QHostAddress(QHostAddress::LocalHostIPv6), v6Sock.localPort()), dualData.size());
QVERIFY2(v6Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v6Sock).constData());
dgram = v6Sock.receiveDatagram(100);
QVERIFY(dgram.isValid());
@@ -686,7 +656,7 @@ void tst_QUdpSocket::dualStack()
}
//test dual -> v4
- QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHost), v4Sock.localPort()), dualData.length());
+ QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.size(), QHostAddress(QHostAddress::LocalHost), v4Sock.localPort()), dualData.size());
QVERIFY2(v4Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v4Sock).constData());
dgram = v4Sock.receiveDatagram(100);
QVERIFY(dgram.isValid());
@@ -725,19 +695,19 @@ void tst_QUdpSocket::dualStackAutoBinding()
//test an autobound socket can send to both v4 and v6 addresses (v4 first)
QUdpSocket dualSock;
- QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHost), v4Sock.localPort()), dualData.length());
+ QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.size(), QHostAddress(QHostAddress::LocalHost), v4Sock.localPort()), dualData.size());
QVERIFY2(v4Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v4Sock).constData());
buffer.reserve(100);
size = v4Sock.readDatagram(buffer.data(), 100, &from, &port);
- QCOMPARE((int)size, dualData.length());
+ QCOMPARE((int)size, dualData.size());
buffer.resize(size);
QCOMPARE(buffer, dualData);
- QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHostIPv6), v6Sock.localPort()), dualData.length());
+ QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.size(), QHostAddress(QHostAddress::LocalHostIPv6), v6Sock.localPort()), dualData.size());
QVERIFY2(v6Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v6Sock).constData());
buffer.reserve(100);
size = v6Sock.readDatagram(buffer.data(), 100, &from, &port);
- QCOMPARE((int)size, dualData.length());
+ QCOMPARE((int)size, dualData.size());
buffer.resize(size);
QCOMPARE(buffer, dualData);
}
@@ -746,19 +716,19 @@ void tst_QUdpSocket::dualStackAutoBinding()
//test an autobound socket can send to both v4 and v6 addresses (v6 first)
QUdpSocket dualSock;
- QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHostIPv6), v6Sock.localPort()), dualData.length());
+ QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.size(), QHostAddress(QHostAddress::LocalHostIPv6), v6Sock.localPort()), dualData.size());
QVERIFY2(v6Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v6Sock).constData());
buffer.reserve(100);
size = v6Sock.readDatagram(buffer.data(), 100, &from, &port);
- QCOMPARE((int)size, dualData.length());
+ QCOMPARE((int)size, dualData.size());
buffer.resize(size);
QCOMPARE(buffer, dualData);
- QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.length(), QHostAddress(QHostAddress::LocalHost), v4Sock.localPort()), dualData.length());
+ QCOMPARE((int)dualSock.writeDatagram(dualData.constData(), dualData.size(), QHostAddress(QHostAddress::LocalHost), v4Sock.localPort()), dualData.size());
QVERIFY2(v4Sock.waitForReadyRead(5000), QtNetworkSettings::msgSocketError(v4Sock).constData());
buffer.reserve(100);
size = v4Sock.readDatagram(buffer.data(), 100, &from, &port);
- QCOMPARE((int)size, dualData.length());
+ QCOMPARE((int)size, dualData.size());
buffer.resize(size);
QCOMPARE(buffer, dualData);
}
@@ -779,7 +749,7 @@ void tst_QUdpSocket::dualStackNoIPv4onV6only()
QVERIFY(v6Sock.bind(QHostAddress(QHostAddress::AnyIPv6), 0));
//test v4 -> v6 (should not be received as this is a v6 only socket)
- QCOMPARE((int)v4Sock.writeDatagram(v4Data.constData(), v4Data.length(), QHostAddress(QHostAddress::LocalHost), v6Sock.localPort()), v4Data.length());
+ QCOMPARE((int)v4Sock.writeDatagram(v4Data.constData(), v4Data.size(), QHostAddress(QHostAddress::LocalHost), v6Sock.localPort()), v4Data.size());
QVERIFY(!v6Sock.waitForReadyRead(1000));
}
@@ -899,17 +869,17 @@ void tst_QUdpSocket::writeDatagram()
#if defined (Q_OS_HPUX)
QSKIP("HP-UX 11.11 on hai (PA-RISC 64) truncates too long datagrams.");
#endif
- QCOMPARE(bytesspy.count(), 0);
- QCOMPARE(errorspy.count(), 1);
+ QCOMPARE(bytesspy.size(), 0);
+ QCOMPARE(errorspy.size(), 1);
QCOMPARE(*static_cast<const int *>(errorspy.at(0).at(0).constData()),
int(QUdpSocket::DatagramTooLargeError));
QCOMPARE(client.error(), QUdpSocket::DatagramTooLargeError);
break;
}
- QCOMPARE(bytesspy.count(), 1);
+ QCOMPARE(bytesspy.size(), 1);
QCOMPARE(*static_cast<const qint64 *>(bytesspy.at(0).at(0).constData()),
qint64(i * 1024));
- QCOMPARE(errorspy.count(), 0);
+ QCOMPARE(errorspy.size(), 0);
if (!server.waitForReadyRead(5000))
QSKIP(QString("UDP packet lost at size %1, unable to complete the test.").arg(i * 1024).toLatin1().data());
QCOMPARE(server.pendingDatagramSize(), qint64(i * 1024));
@@ -1022,7 +992,7 @@ void tst_QUdpSocket::writeDatagramToNonExistingPeer()
QVERIFY(sUdp.bind());
QCOMPARE(sUdp.writeDatagram("", 1, peerAddress, peerPort), qint64(1));
QTestEventLoop::instance().enterLoop(1);
- QCOMPARE(sReadyReadSpy.count(), 0);
+ QCOMPARE(sReadyReadSpy.size(), 0);
}
void tst_QUdpSocket::writeToNonExistingPeer_data()
@@ -1065,8 +1035,8 @@ void tst_QUdpSocket::writeToNonExistingPeer()
// the third one will succeed...
QCOMPARE(sConnected.write("", 1), qint64(1));
QTestEventLoop::instance().enterLoop(1);
- QCOMPARE(sConnectedReadyReadSpy.count(), 0);
- QCOMPARE(sConnectedErrorSpy.count(), 1);
+ QCOMPARE(sConnectedReadyReadSpy.size(), 0);
+ QCOMPARE(sConnectedErrorSpy.size(), 1);
QCOMPARE(int(sConnected.error()), int(QUdpSocket::ConnectionRefusedError));
// we should now get a read error
@@ -1265,11 +1235,12 @@ void tst_QUdpSocket::multicastTtlOption_data()
QTest::addColumn<int>("ttl");
QTest::addColumn<int>("expected");
- QList<QHostAddress> addresses;
- addresses += QHostAddress(QHostAddress::AnyIPv4);
- addresses += QHostAddress(QHostAddress::AnyIPv6);
+ const QHostAddress addresses[] = {
+ QHostAddress(QHostAddress::AnyIPv4),
+ QHostAddress(QHostAddress::AnyIPv6),
+ };
- foreach (const QHostAddress &address, addresses) {
+ for (const QHostAddress &address : addresses) {
const QByteArray addressB = address.toString().toLatin1();
QTest::newRow((addressB + " 0").constData()) << address << 0 << 0;
QTest::newRow((addressB + " 1").constData()) << address << 1 << 1;
@@ -1311,11 +1282,12 @@ void tst_QUdpSocket::multicastLoopbackOption_data()
QTest::addColumn<int>("loopback");
QTest::addColumn<int>("expected");
- QList<QHostAddress> addresses;
- addresses += QHostAddress(QHostAddress::AnyIPv4);
- addresses += QHostAddress(QHostAddress::AnyIPv6);
+ const QHostAddress addresses[] = {
+ QHostAddress(QHostAddress::AnyIPv4),
+ QHostAddress(QHostAddress::AnyIPv6),
+ };
- foreach (const QHostAddress &address, addresses) {
+ for (const QHostAddress &address : addresses) {
const QByteArray addressB = address.toString().toLatin1();
QTest::newRow((addressB + " 0").constData()) << address << 0 << 0;
QTest::newRow((addressB + " 1").constData()) << address << 1 << 1;
@@ -1358,7 +1330,7 @@ void tst_QUdpSocket::multicastJoinBeforeBind_data()
QTest::newRow("valid ipv4 group address") << multicastGroup4;
QTest::newRow("invalid ipv4 group address") << QHostAddress(QHostAddress::Broadcast);
QTest::newRow("valid ipv6 group address") << multicastGroup6;
- for (const QHostAddress &a : qAsConst(linklocalMulticastGroups))
+ for (const QHostAddress &a : std::as_const(linklocalMulticastGroups))
QTest::addRow("valid ipv6 %s-link group address", a.scopeId().toLatin1().constData()) << a;
QTest::newRow("invalid ipv6 group address") << QHostAddress(QHostAddress::AnyIPv6);
}
@@ -1378,7 +1350,7 @@ void tst_QUdpSocket::multicastLeaveAfterClose_data()
QTest::addColumn<QHostAddress>("groupAddress");
QTest::newRow("ipv4") << multicastGroup4;
QTest::newRow("ipv6") << multicastGroup6;
- for (const QHostAddress &a : qAsConst(linklocalMulticastGroups))
+ for (const QHostAddress &a : std::as_const(linklocalMulticastGroups))
QTest::addRow("ipv6-link-%s", a.scopeId().toLatin1().constData()) << a;
}
@@ -1415,11 +1387,12 @@ void tst_QUdpSocket::setMulticastInterface_data()
{
QTest::addColumn<QNetworkInterface>("iface");
QTest::addColumn<QHostAddress>("address");
- QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
- foreach (const QNetworkInterface &iface, interfaces) {
+ const QList<QNetworkInterface> interfaces = QNetworkInterface::allInterfaces();
+ for (const QNetworkInterface &iface : interfaces) {
if ((iface.flags() & QNetworkInterface::IsUp) == 0)
continue;
- foreach (const QNetworkAddressEntry &entry, iface.addressEntries()) {
+ const auto entries = iface.addressEntries();
+ for (const QNetworkAddressEntry &entry : entries) {
const QByteArray testName = iface.name().toLatin1() + ':' + entry.ip().toString().toLatin1();
QTest::newRow(testName.constData()) << iface << entry.ip();
}
@@ -1472,13 +1445,13 @@ void tst_QUdpSocket::multicast_data()
QTest::newRow("valid bind, group ipv4 address") << anyAddress << true << groupAddress << true;
QTest::newRow("valid bind, invalid group ipv4 address") << anyAddress << true << anyAddress << false;
QTest::newRow("valid bind, group ipv6 address") << any6Address << true << group6Address << true;
- for (const QHostAddress &a : qAsConst(linklocalMulticastGroups))
+ for (const QHostAddress &a : std::as_const(linklocalMulticastGroups))
QTest::addRow("valid bind, %s-link group ipv6 address", a.scopeId().toLatin1().constData())
<< any6Address << true << a << true;
QTest::newRow("valid bind, invalid group ipv6 address") << any6Address << true << any6Address << false;
QTest::newRow("dual bind, group ipv4 address") << dualAddress << true << groupAddress << false;
QTest::newRow("dual bind, group ipv6 address") << dualAddress << true << group6Address << true;
- for (const QHostAddress &a : qAsConst(linklocalMulticastGroups))
+ for (const QHostAddress &a : std::as_const(linklocalMulticastGroups))
QTest::addRow("dual bind, %s-link group ipv6 address", a.scopeId().toLatin1().constData())
<< dualAddress << true << a << true;
}
@@ -1523,15 +1496,16 @@ void tst_QUdpSocket::multicast()
if (!joinResult)
return;
- QList<QByteArray> datagrams = QList<QByteArray>()
- << QByteArray("0123")
- << QByteArray("4567")
- << QByteArray("89ab")
- << QByteArray("cdef");
+ const QByteArray datagrams[] = {
+ "0123"_ba,
+ "4567"_ba,
+ "89ab"_ba,
+ "cdef"_ba,
+ };
QUdpSocket sender;
sender.bind();
- foreach (const QByteArray &datagram, datagrams) {
+ for (const QByteArray &datagram : datagrams) {
QNetworkDatagram dgram(datagram, groupAddress, receiver.localPort());
dgram.setInterfaceIndex(interfaceForGroup(groupAddress).index());
QCOMPARE(int(sender.writeDatagram(dgram)),
@@ -1574,7 +1548,7 @@ void tst_QUdpSocket::echo()
{
QFETCH(bool, connect);
QHostInfo info = QHostInfo::fromName(QtNetworkSettings::echoServerName());
- QVERIFY(info.addresses().count());
+ QVERIFY(info.addresses().size());
QHostAddress remote = info.addresses().first();
QUdpSocket sock;
@@ -1601,7 +1575,7 @@ void tst_QUdpSocket::echo()
in = sock.read(sock.pendingDatagramSize());
} else {
in.resize(sock.pendingDatagramSize());
- sock.readDatagram(in.data(), in.length(), &from, &port);
+ sock.readDatagram(in.data(), in.size(), &from, &port);
}
if (in==out)
successes++;
@@ -1624,7 +1598,8 @@ void tst_QUdpSocket::linkLocalIPv6()
QList <QHostAddress> addresses;
QSet <QString> scopes;
QHostAddress localMask("fe80::");
- foreach (const QNetworkInterface& iface, QNetworkInterface::allInterfaces()) {
+ const auto ifaces = QNetworkInterface::allInterfaces();
+ for (const QNetworkInterface &iface : ifaces) {
//Windows preallocates link local addresses to interfaces that are down.
//These may or may not work depending on network driver
if (iface.flags() & QNetworkInterface::IsUp) {
@@ -1639,7 +1614,8 @@ void tst_QUdpSocket::linkLocalIPv6()
continue;
#endif
- foreach (QNetworkAddressEntry addressEntry, iface.addressEntries()) {
+ const auto entries = iface.addressEntries();
+ for (const QNetworkAddressEntry &addressEntry : entries) {
QHostAddress addr(addressEntry.ip());
if (!addr.scopeId().isEmpty() && addr.isInSubnet(localMask, 64)) {
scopes << addr.scopeId();
@@ -1654,7 +1630,7 @@ void tst_QUdpSocket::linkLocalIPv6()
QList <QUdpSocket*> sockets;
quint16 port = 0;
- foreach (const QHostAddress& addr, addresses) {
+ for (const QHostAddress &addr : std::as_const(addresses)) {
QUdpSocket *s = new QUdpSocket;
QVERIFY2(s->bind(addr, port), addr.toString().toLatin1()
+ '/' + QByteArray::number(port) + ": " + qPrintable(s->errorString()));
@@ -1663,7 +1639,7 @@ void tst_QUdpSocket::linkLocalIPv6()
}
QByteArray testData("hello");
- foreach (QUdpSocket *s, sockets) {
+ for (QUdpSocket *s : std::as_const(sockets)) {
QUdpSocket neutral;
QVERIFY(neutral.bind(QHostAddress(QHostAddress::AnyIPv6)));
QSignalSpy neutralReadSpy(&neutral, SIGNAL(readyRead()));
@@ -1671,27 +1647,26 @@ void tst_QUdpSocket::linkLocalIPv6()
QSignalSpy spy(s, SIGNAL(readyRead()));
QVERIFY(s->writeDatagram(testData, s->localAddress(), neutral.localPort()));
- QTRY_VERIFY(neutralReadSpy.count() > 0); //note may need to accept a firewall prompt
+ QTRY_VERIFY(neutralReadSpy.size() > 0); //note may need to accept a firewall prompt
- QNetworkDatagram dgram = neutral.receiveDatagram(testData.length() * 2);
+ QNetworkDatagram dgram = neutral.receiveDatagram(testData.size() * 2);
QVERIFY(dgram.isValid());
QCOMPARE(dgram.senderAddress(), s->localAddress());
QCOMPARE(dgram.senderPort(), int(s->localPort()));
QCOMPARE(dgram.destinationAddress(), s->localAddress());
QCOMPARE(dgram.destinationPort(), int(neutral.localPort()));
- QCOMPARE(dgram.data().length(), testData.length());
+ QCOMPARE(dgram.data().size(), testData.size());
QCOMPARE(dgram.data(), testData);
QVERIFY(neutral.writeDatagram(dgram.makeReply(testData)));
- QTRY_VERIFY(spy.count() > 0); //note may need to accept a firewall prompt
+ QTRY_VERIFY(spy.size() > 0); //note may need to accept a firewall prompt
- dgram = s->receiveDatagram(testData.length() * 2);
+ dgram = s->receiveDatagram(testData.size() * 2);
QCOMPARE(dgram.data(), testData);
//sockets bound to other interfaces shouldn't have received anything
- foreach (QUdpSocket *s2, sockets) {
+ for (QUdpSocket *s2 : std::as_const(sockets))
QCOMPARE((int)s2->bytesAvailable(), 0);
- }
//Sending to the same address with different scope should normally fail
//However it will pass if there is a route between two interfaces,
@@ -1710,7 +1685,8 @@ void tst_QUdpSocket::linkLocalIPv4()
QList <QHostAddress> addresses;
QHostAddress localMask("169.254.0.0");
- foreach (const QNetworkInterface& iface, QNetworkInterface::allInterfaces()) {
+ const auto ifaces = QNetworkInterface::allInterfaces();
+ for (const QNetworkInterface &iface : ifaces) {
//Windows preallocates link local addresses to interfaces that are down.
//These may or may not work depending on network driver (they do not work for the Bluetooth PAN driver)
if (iface.flags() & QNetworkInterface::IsUp) {
@@ -1724,7 +1700,8 @@ void tst_QUdpSocket::linkLocalIPv4()
if (iface.name().startsWith("utun"))
continue;
#endif
- foreach (QNetworkAddressEntry addr, iface.addressEntries()) {
+ const auto entries = iface.addressEntries();
+ for (const QNetworkAddressEntry &addr : entries) {
if (addr.ip().isInSubnet(localMask, 16)) {
addresses << addr.ip();
qDebug() << "Found IPv4 link local address" << addr.ip();
@@ -1737,7 +1714,7 @@ void tst_QUdpSocket::linkLocalIPv4()
QList <QUdpSocket*> sockets;
quint16 port = 0;
- foreach (const QHostAddress& addr, addresses) {
+ for (const QHostAddress &addr : std::as_const(addresses)) {
QUdpSocket *s = new QUdpSocket;
QVERIFY2(s->bind(addr, port), qPrintable(s->errorString()));
port = s->localPort(); //bind same port, different networks
@@ -1748,15 +1725,15 @@ void tst_QUdpSocket::linkLocalIPv4()
QVERIFY(neutral.bind(QHostAddress(QHostAddress::AnyIPv4)));
QByteArray testData("hello");
- foreach (QUdpSocket *s, sockets) {
+ for (QUdpSocket *s : std::as_const(sockets)) {
QVERIFY(s->writeDatagram(testData, s->localAddress(), neutral.localPort()));
QVERIFY2(neutral.waitForReadyRead(10000), QtNetworkSettings::msgSocketError(neutral).constData());
- QNetworkDatagram dgram = neutral.receiveDatagram(testData.length() * 2);
+ QNetworkDatagram dgram = neutral.receiveDatagram(testData.size() * 2);
QVERIFY(dgram.isValid());
QCOMPARE(dgram.senderAddress(), s->localAddress());
QCOMPARE(dgram.senderPort(), int(s->localPort()));
- QCOMPARE(dgram.data().length(), testData.length());
+ QCOMPARE(dgram.data().size(), testData.size());
QCOMPARE(dgram.data(), testData);
// Unlike for IPv6 with IPV6_PKTINFO, IPv4 has no standardized way of
@@ -1775,14 +1752,13 @@ void tst_QUdpSocket::linkLocalIPv4()
QVERIFY(neutral.writeDatagram(dgram.makeReply(testData)));
QVERIFY2(s->waitForReadyRead(10000), QtNetworkSettings::msgSocketError(*s).constData());
- dgram = s->receiveDatagram(testData.length() * 2);
+ dgram = s->receiveDatagram(testData.size() * 2);
QVERIFY(dgram.isValid());
QCOMPARE(dgram.data(), testData);
//sockets bound to other interfaces shouldn't have received anything
- foreach (QUdpSocket *s2, sockets) {
+ for (QUdpSocket *s2 : std::as_const(sockets))
QCOMPARE((int)s2->bytesAvailable(), 0);
- }
}
qDeleteAll(sockets);
}
@@ -1810,7 +1786,7 @@ void tst_QUdpSocket::readyRead()
QTest::qWait(100);
// make sure only one signal was emitted
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(receiver.hasPendingDatagrams());
#ifdef RELIABLE_BYTES_AVAILABLE
QCOMPARE(receiver.bytesAvailable(), qint64(2));
@@ -1822,7 +1798,7 @@ void tst_QUdpSocket::readyRead()
// no new signal should be emitted because we haven't read the first datagram yet
QTest::qWait(100);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(receiver.hasPendingDatagrams());
QVERIFY(receiver.bytesAvailable() >= 1); // most likely is 1, but it could be 1 + 2 in the future
QCOMPARE(receiver.pendingDatagramSize(), qint64(2));
@@ -1834,7 +1810,7 @@ void tst_QUdpSocket::readyRead()
// write a new datagram and ensure the signal is emitted now
sender.writeDatagram("abc", makeNonAny(receiver.localAddress()), port);
QTest::qWait(100);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QVERIFY(receiver.hasPendingDatagrams());
#ifdef RELIABLE_BYTES_AVAILABLE
QCOMPARE(receiver.bytesAvailable(), qint64(3));
@@ -1914,7 +1890,7 @@ void tst_QUdpSocket::asyncReadDatagram()
QTestEventLoop::instance().enterLoop(1);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
delete m_asyncSender;
delete m_asyncReceiver;
@@ -1932,5 +1908,78 @@ void tst_QUdpSocket::writeInHostLookupState()
QVERIFY(!socket.putChar('0'));
}
+void tst_QUdpSocket::readyReadConnectionThrottling()
+{
+ QFETCH_GLOBAL(bool, setProxy);
+ if (setProxy)
+ return;
+ using namespace std::chrono_literals;
+
+ // QTBUG-105871:
+ // We have some signal/slot connection throttling in QAbstractSocket, but it
+ // was caring about the bytes, not about the datagrams.
+ // Test that we don't disable read notifications until we have at least one
+ // datagram available. Otherwise our good users who use the datagram APIs
+ // can get into scenarios where they no longer get the readyRead signal
+ // unless they call a read function once in a while.
+
+ QUdpSocket receiver;
+ QVERIFY(receiver.bind(QHostAddress(QHostAddress::LocalHost), 0));
+
+ QSemaphore semaphore;
+
+ // Repro-ing deterministically eludes me, so we are bruteforcing it:
+ // The thread acts as a remote sender, flooding the receiver with datagrams,
+ // and at some point the receiver would get into the broken state mentioned
+ // earlier.
+ std::unique_ptr<QThread> thread(QThread::create([&semaphore, port = receiver.localPort()]() {
+ QUdpSocket sender;
+ sender.connectToHost(QHostAddress(QHostAddress::LocalHost), port);
+ QCOMPARE(sender.state(), QUdpSocket::ConnectedState);
+
+ constexpr qsizetype PayloadSize = 242;
+ const QByteArray payload(PayloadSize, 'a');
+
+ semaphore.acquire(); // Wait for main thread to be ready
+ while (true) {
+ // We send 100 datagrams at a time, then sleep.
+ // This is mostly to let the main thread catch up between bursts so
+ // it doesn't get stuck in the loop.
+ for (int i = 0; i < 100; ++i) {
+ [[maybe_unused]]
+ qsizetype sent = sender.write(payload);
+ Q_ASSERT(sent > 0);
+ }
+ if (QThread::currentThread()->isInterruptionRequested())
+ break;
+ QThread::sleep(20ms);
+ }
+ }));
+ thread->start();
+ auto threadStopAndWaitGuard = qScopeGuard([&thread] {
+ thread->requestInterruption();
+ thread->quit();
+ thread->wait();
+ });
+
+ qsizetype count = 0;
+ QObject::connect(&receiver, &QUdpSocket::readyRead, &receiver,
+ [&] {
+ while (receiver.hasPendingDatagrams()) {
+ receiver.readDatagram(nullptr, 0);
+ ++count;
+ }
+ // If this prints `false, xxxx` we were pretty much guaranteed
+ // that we would not get called again:
+ // qDebug() << receiver.hasPendingDatagrams() << receiver.bytesAvailable();
+ },
+ Qt::QueuedConnection);
+
+ semaphore.release();
+ constexpr qsizetype MaxCount = 500;
+ QVERIFY2(QTest::qWaitFor([&] { return count >= MaxCount; }, 10s),
+ QByteArray::number(count).constData());
+}
+
QTEST_MAIN(tst_QUdpSocket)
#include "tst_qudpsocket.moc"
diff --git a/tests/auto/network/socket/qudpsocket/udpServer/CMakeLists.txt b/tests/auto/network/socket/qudpsocket/udpServer/CMakeLists.txt
index 4afeb529a7..7dd7f2ba5d 100644
--- a/tests/auto/network/socket/qudpsocket/udpServer/CMakeLists.txt
+++ b/tests/auto/network/socket/qudpsocket/udpServer/CMakeLists.txt
@@ -1,13 +1,14 @@
-# Generated from udpServer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## udpServer Binary:
#####################################################################
qt_internal_add_executable(udpServer
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/./" # special case
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/./"
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/auto/network/socket/qudpsocket/udpServer/main.cpp b/tests/auto/network/socket/qudpsocket/udpServer/main.cpp
index a5986c29c7..ba5bb3c0d0 100644
--- a/tests/auto/network/socket/qudpsocket/udpServer/main.cpp
+++ b/tests/auto/network/socket/qudpsocket/udpServer/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 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 <QtNetwork>
class Server : public QObject
diff --git a/tests/auto/network/ssl/CMakeLists.txt b/tests/auto/network/ssl/CMakeLists.txt
index 9c44e5c375..b11b15b6ba 100644
--- a/tests/auto/network/ssl/CMakeLists.txt
+++ b/tests/auto/network/ssl/CMakeLists.txt
@@ -1,10 +1,11 @@
-# Generated from ssl.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qpassworddigestor)
-add_subdirectory(qsslcertificate)
-add_subdirectory(qsslcipher)
-add_subdirectory(qsslellipticcurve)
if(QT_FEATURE_ssl)
+ add_subdirectory(qsslcertificate)
+ add_subdirectory(qsslcipher)
+ add_subdirectory(qsslellipticcurve)
add_subdirectory(qsslkey)
add_subdirectory(qsslerror)
endif()
@@ -12,8 +13,9 @@ if(QT_FEATURE_private_tests AND QT_FEATURE_ssl)
add_subdirectory(qsslsocket)
add_subdirectory(qsslsocket_onDemandCertificates_member)
add_subdirectory(qsslsocket_onDemandCertificates_static)
-# add_subdirectory(qasn1element)
+ add_subdirectory(qasn1element)
add_subdirectory(qssldiffiehellmanparameters)
+ add_subdirectory(qsslserver)
endif()
if(QT_FEATURE_dtls AND QT_FEATURE_private_tests AND QT_FEATURE_ssl)
add_subdirectory(qdtlscookie)
diff --git a/tests/auto/network/ssl/qasn1element/CMakeLists.txt b/tests/auto/network/ssl/qasn1element/CMakeLists.txt
index 4fab2f3e3e..7b01a0b22d 100644
--- a/tests/auto/network/ssl/qasn1element/CMakeLists.txt
+++ b/tests/auto/network/ssl/qasn1element/CMakeLists.txt
@@ -1,13 +1,26 @@
-# Generated from qasn1element.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qasn1element Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qasn1element LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qasn1element
SOURCES
tst_qasn1element.cpp
- PUBLIC_LIBRARIES
+ ../../../../../src/plugins/tls/shared/qasn1element_p.h
+ ../../../../../src/plugins/tls/shared/qasn1element.cpp
+ INCLUDE_DIRECTORIES
+ ../../../../../src/plugins/tls/shared
+ LIBRARIES
+ Qt::Core
Qt::Network
Qt::NetworkPrivate
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
diff --git a/tests/auto/network/ssl/qasn1element/tst_qasn1element.cpp b/tests/auto/network/ssl/qasn1element/tst_qasn1element.cpp
index 9a4d23f650..a54f0bd9d8 100644
--- a/tests/auto/network/ssl/qasn1element/tst_qasn1element.cpp
+++ b/tests/auto/network/ssl/qasn1element/tst_qasn1element.cpp
@@ -1,34 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Jeremy Lainé <jeremy.laine@m4x.org>
-** 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) 2014 Jeremy Lainé <jeremy.laine@m4x.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include "qasn1element_p.h"
#include <QTest>
-#include "private/qasn1element_p.h"
+
+#include <QtCore/QDateTime>
+#include <QtCore/QTimeZone>
class tst_QAsn1Element : public QObject
{
@@ -127,7 +105,7 @@ void tst_QAsn1Element::dateTime_data()
<< QDateTime();
QTest::newRow("UTCTime - 070417074026Z")
<< QByteArray::fromHex("170d3037303431373037343032365a")
- << QDateTime(QDate(2007, 4, 17), QTime(7, 40, 26), Qt::UTC);
+ << QDateTime(QDate(2007, 4, 17), QTime(7, 40, 26), QTimeZone::UTC);
QTest::newRow("UTCTime - bad length")
<< QByteArray::fromHex("170c30373034313730373430325a")
<< QDateTime();
@@ -136,16 +114,19 @@ void tst_QAsn1Element::dateTime_data()
<< QDateTime();
QTest::newRow("UTCTime - year 1950")
<< QByteArray::fromHex("170d3530313232343035353530305a")
- << QDateTime(QDate(1950, 12, 24), QTime(5, 55), Qt::UTC);
+ << QDateTime(QDate(1950, 12, 24), QTime(5, 55), QTimeZone::UTC);
QTest::newRow("UTCTime - year 1999")
<< QByteArray::fromHex("170d3939313232343035353530305a")
- << QDateTime(QDate(1999, 12, 24), QTime(5, 55), Qt::UTC);
+ << QDateTime(QDate(1999, 12, 24), QTime(5, 55), QTimeZone::UTC);
QTest::newRow("UTCTime - year 2000")
<< QByteArray::fromHex("170d3030313232343035353530305a")
- << QDateTime(QDate(2000, 12, 24), QTime(5, 55), Qt::UTC);
+ << QDateTime(QDate(2000, 12, 24), QTime(5, 55), QTimeZone::UTC);
+ QTest::newRow("UTCTime - leap day year 2000")
+ << QByteArray::fromHex("170d3030303232393035353530305a")
+ << QDateTime(QDate(2000, 2, 29), QTime(5, 55), QTimeZone::UTC);
QTest::newRow("UTCTime - year 2049")
<< QByteArray::fromHex("170d3439313232343035353530305a")
- << QDateTime(QDate(2049, 12, 24), QTime(5, 55), Qt::UTC);
+ << QDateTime(QDate(2049, 12, 24), QTime(5, 55), QTimeZone::UTC);
QTest::newRow("UTCTime - invalid year ('-9')")
<< QByteArray::fromHex("170d2d39313232343035353530305a")
<< QDateTime();
@@ -163,7 +144,7 @@ void tst_QAsn1Element::dateTime_data()
<< QDateTime();
QTest::newRow("GeneralizedTime - 20510829095341Z")
<< QByteArray::fromHex("180f32303531303832393039353334315a")
- << QDateTime(QDate(2051, 8, 29), QTime(9, 53, 41), Qt::UTC);
+ << QDateTime(QDate(2051, 8, 29), QTime(9, 53, 41), QTimeZone::UTC);
QTest::newRow("GeneralizedTime - bad length")
<< QByteArray::fromHex("180e323035313038323930393533345a")
<< QDateTime();
diff --git a/tests/auto/network/ssl/qdtls/CMakeLists.txt b/tests/auto/network/ssl/qdtls/CMakeLists.txt
index 310629370c..1d5eef094c 100644
--- a/tests/auto/network/ssl/qdtls/CMakeLists.txt
+++ b/tests/auto/network/ssl/qdtls/CMakeLists.txt
@@ -1,25 +1,24 @@
-# Generated from qdtls.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdtls Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdtls LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "certs")
qt_internal_add_test(tst_qdtls
SOURCES
tst_qdtls.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::NetworkPrivate
TESTDATA ${test_data}
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 3:.:.:qdtls.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# DESTDIR = "debug"
-
-#### Keys ignored in scope 4:.:.:qdtls.pro:else:
-# DESTDIR = "release"
diff --git a/tests/auto/network/ssl/qdtls/certs/fluke.cert b/tests/auto/network/ssl/qdtls/certs/fluke.cert
index ace4e4f0eb..4cc4d9a5ea 100644
--- a/tests/auto/network/ssl/qdtls/certs/fluke.cert
+++ b/tests/auto/network/ssl/qdtls/certs/fluke.cert
@@ -1,75 +1,34 @@
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 0 (0x0)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=NO, ST=Oslo, L=Nydalen, O=Nokia Corporation and/or its subsidiary(-ies), OU=Development, CN=fluke.troll.no/emailAddress=ahanssen@trolltech.com
- Validity
- Not Before: Dec 4 01:10:32 2007 GMT
- Not After : Apr 21 01:10:32 2035 GMT
- Subject: C=NO, ST=Oslo, O=Nokia Corporation and/or its subsidiary(-ies), OU=Development, CN=fluke.troll.no
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:a7:c8:a0:4a:c4:19:05:1b:66:ba:32:e2:d2:f1:
- 1c:6f:17:82:e4:39:2e:01:51:90:db:04:34:32:11:
- 21:c2:0d:6f:59:d8:53:90:54:3f:83:8f:a9:d3:b3:
- d5:ee:1a:9b:80:ae:c3:25:c9:5e:a5:af:4b:60:05:
- aa:a0:d1:91:01:1f:ca:04:83:e3:58:1c:99:32:45:
- 84:70:72:58:03:98:4a:63:8b:41:f5:08:49:d2:91:
- 02:60:6b:e4:64:fe:dd:a0:aa:74:08:e9:34:4c:91:
- 5f:12:3d:37:4d:54:2c:ad:7f:5b:98:60:36:02:8c:
- 3b:f6:45:f3:27:6a:9b:94:9d
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints:
- CA:FALSE
- Netscape Comment:
- OpenSSL Generated Certificate
- X509v3 Subject Key Identifier:
- 21:85:04:3D:23:01:66:E5:F7:9F:1A:84:24:8A:AF:0A:79:F4:E5:AC
- X509v3 Authority Key Identifier:
- DirName:/C=NO/ST=Oslo/L=Nydalen/O=Nokia Corporation and/or its subsidiary(-ies)/OU=Development/CN=fluke.troll.no/emailAddress=ahanssen@trolltech.com
- serial:8E:A8:B4:E8:91:B7:54:2E
-
- Signature Algorithm: sha1WithRSAEncryption
- 6d:57:5f:d1:05:43:f0:62:05:ec:2a:71:a5:dc:19:08:f2:c4:
- a6:bd:bb:25:d9:ca:89:01:0e:e4:cf:1f:c1:8c:c8:24:18:35:
- 53:59:7b:c0:43:b4:32:e6:98:b2:a6:ef:15:05:0b:48:5f:e1:
- a0:0c:97:a9:a1:77:d8:35:18:30:bc:a9:8f:d3:b7:54:c7:f1:
- a9:9e:5d:e6:19:bf:f6:3c:5b:2b:d8:e4:3e:62:18:88:8b:d3:
- 24:e1:40:9b:0c:e6:29:16:62:ab:ea:05:24:70:36:aa:55:93:
- ef:02:81:1b:23:10:a2:04:eb:56:95:75:fc:f8:94:b1:5d:42:
- c5:3f:36:44:85:5d:3a:2e:90:46:8a:a2:b9:6f:87:ae:0c:15:
- 40:19:31:90:fc:3b:25:bb:ae:f1:66:13:0d:85:90:d9:49:34:
- 8f:f2:5d:f9:7a:db:4d:5d:27:f6:76:9d:35:8c:06:a6:4c:a3:
- b1:b2:b6:6f:1d:d7:a3:00:fd:72:eb:9e:ea:44:a1:af:21:34:
- 7d:c7:42:e2:49:91:19:8b:c0:ad:ba:82:80:a8:71:70:f4:35:
- 31:91:63:84:20:95:e9:60:af:64:8b:cc:ff:3d:8a:76:74:3d:
- c8:55:6d:e4:8e:c3:2b:1c:e8:42:18:ae:9f:e6:6b:9c:34:06:
- ec:6a:f2:c3
-----BEGIN CERTIFICATE-----
-MIIEEzCCAvugAwIBAgIBADANBgkqhkiG9w0BAQUFADCBnDELMAkGA1UEBhMCTk8x
-DTALBgNVBAgTBE9zbG8xEDAOBgNVBAcTB055ZGFsZW4xFjAUBgNVBAoTDVRyb2xs
-dGVjaCBBU0ExFDASBgNVBAsTC0RldmVsb3BtZW50MRcwFQYDVQQDEw5mbHVrZS50
-cm9sbC5ubzElMCMGCSqGSIb3DQEJARYWYWhhbnNzZW5AdHJvbGx0ZWNoLmNvbTAe
-Fw0wNzEyMDQwMTEwMzJaFw0zNTA0MjEwMTEwMzJaMGMxCzAJBgNVBAYTAk5PMQ0w
-CwYDVQQIEwRPc2xvMRYwFAYDVQQKEw1Ucm9sbHRlY2ggQVNBMRQwEgYDVQQLEwtE
-ZXZlbG9wbWVudDEXMBUGA1UEAxMOZmx1a2UudHJvbGwubm8wgZ8wDQYJKoZIhvcN
-AQEBBQADgY0AMIGJAoGBAKfIoErEGQUbZroy4tLxHG8XguQ5LgFRkNsENDIRIcIN
-b1nYU5BUP4OPqdOz1e4am4CuwyXJXqWvS2AFqqDRkQEfygSD41gcmTJFhHByWAOY
-SmOLQfUISdKRAmBr5GT+3aCqdAjpNEyRXxI9N01ULK1/W5hgNgKMO/ZF8ydqm5Sd
-AgMBAAGjggEaMIIBFjAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NM
-IEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUIYUEPSMBZuX3nxqEJIqv
-Cnn05awwgbsGA1UdIwSBszCBsKGBoqSBnzCBnDELMAkGA1UEBhMCTk8xDTALBgNV
-BAgTBE9zbG8xEDAOBgNVBAcTB055ZGFsZW4xFjAUBgNVBAoTDVRyb2xsdGVjaCBB
-U0ExFDASBgNVBAsTC0RldmVsb3BtZW50MRcwFQYDVQQDEw5mbHVrZS50cm9sbC5u
-bzElMCMGCSqGSIb3DQEJARYWYWhhbnNzZW5AdHJvbGx0ZWNoLmNvbYIJAI6otOiR
-t1QuMA0GCSqGSIb3DQEBBQUAA4IBAQBtV1/RBUPwYgXsKnGl3BkI8sSmvbsl2cqJ
-AQ7kzx/BjMgkGDVTWXvAQ7Qy5piypu8VBQtIX+GgDJepoXfYNRgwvKmP07dUx/Gp
-nl3mGb/2PFsr2OQ+YhiIi9Mk4UCbDOYpFmKr6gUkcDaqVZPvAoEbIxCiBOtWlXX8
-+JSxXULFPzZEhV06LpBGiqK5b4euDBVAGTGQ/Dslu67xZhMNhZDZSTSP8l35ettN
-XSf2dp01jAamTKOxsrZvHdejAP1y657qRKGvITR9x0LiSZEZi8CtuoKAqHFw9DUx
-kWOEIJXpYK9ki8z/PYp2dD3IVW3kjsMrHOhCGK6f5mucNAbsavLD
+MIIF6zCCA9OgAwIBAgIUfo9amJtJGWqWE6f+SkAO85zkGr4wDQYJKoZIhvcNAQEL
+BQAwgYMxCzAJBgNVBAYTAk5PMQ0wCwYDVQQIDARPc2xvMQ0wCwYDVQQHDARPc2xv
+MRcwFQYDVQQKDA5UaGUgUXQgQ29tcGFueTEMMAoGA1UECwwDUiZEMRIwEAYDVQQD
+DAlIMiBUZXN0ZXIxGzAZBgkqhkiG9w0BCQEWDG1pbmltaUBxdC5pbzAgFw0yMDEw
+MjYxMjAxMzFaGA8yMTIwMTAwMjEyMDEzMVowgYMxCzAJBgNVBAYTAk5PMQ0wCwYD
+VQQIDARPc2xvMQ0wCwYDVQQHDARPc2xvMRcwFQYDVQQKDA5UaGUgUXQgQ29tcGFu
+eTEMMAoGA1UECwwDUiZEMRIwEAYDVQQDDAlIMiBUZXN0ZXIxGzAZBgkqhkiG9w0B
+CQEWDG1pbmltaUBxdC5pbzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
+AOiUp5+E4blouKH7q+rVNR8NoYX2XkBW+q+rpy1zu5ssRSzbqxAjDx9dkht7Qlnf
+VlDT00JvpOWdeuPon5915edQRsY4Unl6mKH29ra3OtUa1/yCJXsGVJTKCj7k4Bxb
+5mZzb/fTlZntMLdTIBMfUbw62FKir1WjKIcJ9fCoG8JaGeKVO4Rh5p0ezd4UUUId
+r1BXl5Nqdqy2vTMsEDnjOsD3egkv8I2SKN4O6n/C3wWYpMOWYZkGoZiKz7rJs/i/
+ez7bsV7JlwdzTlhpJzkcOSVFBP6JlEOxTNNxZ1wtKy7PtZGmsSSATq2e6+bw38Ae
+Op0XnzzqcGjtDDofBmT7OFzZWjS9VZS6+DOOe2QHWle1nCHcHyH4ku6IRlsr9xkR
+NAIlOfnvHHxqJUenoeaZ4oQDjCBKS1KXygJO/tL7BLTQVn/xK1EmPvKNnjzWk4tR
+PnibUhhs5635qpOU/YPqFBh1JjVruZbsWcDAhRcew0uxONXOa9E+4lttQ9ySYa1A
+LvWqJuAX7gu2BsBMLyqfm811YnA7CIFMyO+HlqmkLFfv5L/xIRAXR7l26YGO0VwX
+CGjMfz4NVPMMke4nB7qa9NkpXQBQKMms3Qzd5JW0Hy9Ruj5O8GPcFZmV0twjd1uJ
+PD/cAjkWLaXjdNsJ16QWc2nghQRS6HYqKRX6j+CXOxupAgMBAAGjUzBRMB0GA1Ud
+DgQWBBRSCOU58j9NJZkMamt623qyCrhN3TAfBgNVHSMEGDAWgBRSCOU58j9NJZkM
+amt623qyCrhN3TAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCq
+q4jxsWeNDv5Nq14hJtF9HB+ZL64zcZtRjJP1YgNs0QppKICmjPOL2nIMGmI/jKrs
+0eGAL/9XXNVHPxm1OPOncvimMMmU6emZfpMdEtTfKP43+Pg9HgKRjLoQp406vGeQ
+8ki/mbBhrItVPgEm3tu2AFA02XTYi+YxCI9kRZLGkM3FbgtOuTLPl0Z9y+kiPc9F
+uCSC03anBEqv+vDSI8+wODymQ/IJ3Jyz1lxIRDfp4qAekmy0jU2c91VOHHEmOmqq
+kqygGFRdwbe99m9yP63r6q0b5K3X2UnJ6bns0hmTwThYwpVPXLU8jdaTddbMukN2
+/Ef96Tsw8nWOEOPMySHOTIPgwyZRp26b0kA9EmhLwOP401SxXVQCmSRmtwNagmtg
+jJKmZoYBN+//D45ibK8z6Q0oOm9P+Whf/uUXehcRxBxyV3xz7k0wKGQbHj/ddwcy
+IUoIN4lrAlib+lK170kTKN352PDmrpo2gmIzPEsfurKAIMSelDl6H+kih16BtZ8y
+Nz6fh9Soqrg3OSAware8pxV7k51crBMoPLN78KoRV8MFCK4K7Fddq4rRISq6hiXq
+r1nsjoEPuKM9huprmZVZe9t5YcDa2I+wb3IiE3uwpZbAdaLDyQ5n6F/qpsiIkZXn
+gtcF7oqpG5oYrwCcZ53y/ezUgUg7PlSz2XwAGvQtgg==
-----END CERTIFICATE-----
diff --git a/tests/auto/network/ssl/qdtls/certs/fluke.key b/tests/auto/network/ssl/qdtls/certs/fluke.key
index 9d1664d609..337ce541a6 100644
--- a/tests/auto/network/ssl/qdtls/certs/fluke.key
+++ b/tests/auto/network/ssl/qdtls/certs/fluke.key
@@ -1,15 +1,52 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXAIBAAKBgQCnyKBKxBkFG2a6MuLS8RxvF4LkOS4BUZDbBDQyESHCDW9Z2FOQ
-VD+Dj6nTs9XuGpuArsMlyV6lr0tgBaqg0ZEBH8oEg+NYHJkyRYRwclgDmEpji0H1
-CEnSkQJga+Rk/t2gqnQI6TRMkV8SPTdNVCytf1uYYDYCjDv2RfMnapuUnQIDAQAB
-AoGANFzLkanTeSGNFM0uttBipFT9F4a00dqHz6JnO7zXAT26I5r8sU1pqQBb6uLz
-/+Qz5Zwk8RUAQcsMRgJetuPQUb0JZjF6Duv24hNazqXBCu7AZzUenjafwmKC/8ri
-KpX3fTwqzfzi//FKGgbXQ80yykSSliDL3kn/drATxsLCgQECQQDXhEFWLJ0vVZ1s
-1Ekf+3NITE+DR16X+LQ4W6vyEHAjTbaNWtcTKdAWLA2l6N4WAAPYSi6awm+zMxx4
-VomVTsjdAkEAx0z+e7natLeFcrrq8pbU+wa6SAP1VfhQWKitxL1e7u/QO90NCpxE
-oQYKzMkmmpOOFjQwEMAy1dvFMbm4LHlewQJAC/ksDBaUcQHHqjktCtrUb8rVjAyW
-A8lscckeB2fEYyG5J6dJVaY4ClNOOs5yMDS2Afk1F6H/xKvtQ/5CzInA/QJATDub
-K+BPU8jO9q+gpuIi3VIZdupssVGmCgObVCHLakG4uO04y9IyPhV9lA9tALtoIf4c
-VIvv5fWGXBrZ48kZAQJBAJmVCdzQxd9LZI5vxijUCj5EI4e+x5DRqVUvyP8KCZrC
-AiNyoDP85T+hBZaSXK3aYGpVwelyj3bvo1GrTNwNWLw=
------END RSA PRIVATE KEY-----
+-----BEGIN PRIVATE KEY-----
+MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDolKefhOG5aLih
++6vq1TUfDaGF9l5AVvqvq6ctc7ubLEUs26sQIw8fXZIbe0JZ31ZQ09NCb6TlnXrj
+6J+fdeXnUEbGOFJ5epih9va2tzrVGtf8giV7BlSUygo+5OAcW+Zmc2/305WZ7TC3
+UyATH1G8OthSoq9VoyiHCfXwqBvCWhnilTuEYeadHs3eFFFCHa9QV5eTanastr0z
+LBA54zrA93oJL/CNkijeDup/wt8FmKTDlmGZBqGYis+6ybP4v3s+27FeyZcHc05Y
+aSc5HDklRQT+iZRDsUzTcWdcLSsuz7WRprEkgE6tnuvm8N/AHjqdF5886nBo7Qw6
+HwZk+zhc2Vo0vVWUuvgzjntkB1pXtZwh3B8h+JLuiEZbK/cZETQCJTn57xx8aiVH
+p6HmmeKEA4wgSktSl8oCTv7S+wS00FZ/8StRJj7yjZ481pOLUT54m1IYbOet+aqT
+lP2D6hQYdSY1a7mW7FnAwIUXHsNLsTjVzmvRPuJbbUPckmGtQC71qibgF+4LtgbA
+TC8qn5vNdWJwOwiBTMjvh5appCxX7+S/8SEQF0e5dumBjtFcFwhozH8+DVTzDJHu
+Jwe6mvTZKV0AUCjJrN0M3eSVtB8vUbo+TvBj3BWZldLcI3dbiTw/3AI5Fi2l43Tb
+CdekFnNp4IUEUuh2KikV+o/glzsbqQIDAQABAoICAFw1q6tr5I48vY7DF+rXsuLn
+5ZUWE1IQ6fzB4lr72nJv/9EEGnMgYzt9PpMUsD6vdCpBgS2C0+6RHArFzJtNA+RM
+iHLIG7K7702veyr/xBx/MwiSlMeMv/XpkFxVI6E6skMGG2s3AMXxKvJTy5CpRx+I
+eQFyLG+Ya1X2lgJes/q+/CpAHkOjCOpcLySQC5NZ74q734V7nSdmn+Zs3tYEh+O/
+eiuwTP/j5b38Te5vVTqDxTciJPmljmXLCwa0N100lWlbcpvw8qbqiTI2Jm3XCbUE
+AzHjW9vmrF3cRS1fXxKFGShw3SRqlkbxjfeWoi8qDPUBS4m8LOr8qG9Wo5Nfon0z
+zLP4bci3zHDvVcaaZrrsUBs/yZbg+Dgka1DmX7ekmeccr2yTdKDFgPupYUyxVbTl
+a9ZLJysjFD7rgBv1ZclHonLp6Vbm+ZoTqvteo4ikAy6L9RtBWJ23XEK34PkP/+c5
+2vWZaOrnjSeBHbFce8cdJSxqWpP+eSCI5I9XbDrYFIsQ/gqKgtzDKy2ihJ2Y8STL
+yO4hyFPFjxc+Gg4/P2PpmT5CY2ty44M0BWs+JGW96CJPrrplf2lmQUQJj5LZY66X
+Z/4C9L7ZYtKZ+bs5SvU46yWugAvQZX22Xm9xLXWyVXRdx3bj+3M3fDnF9di/zdbh
+CgLx7oWPNrXc7FCajnn9AoIBAQD5FMYwRpw9NWT9WDxQwx+cSI4Icbd88ByTW63S
+LzeRwZA0J9/SfwO+aBRupzc9GkGXCiZcGMw3AGsCtig8yFlw8E5KnzN7KlftDMnM
+9NUxxzlR8VwKyLnZfG7sDTl057ZlUujnqhmt/F8F7dIy7FVO1dE/8nngA+FYTCOG
+UZdGjwyBDlDM0JJdUWGY3xslutcpCDN5mzSTKjy9drMvImAshRawxRF6WBpn7vr2
+nC6vciqfx1Mzx1vyk0Jm0ilaydDdLMADjt/iL4Nkr0BEs4k+UzQiKDwp8gu7abQ1
+eBfxd9Iar4htQa2I1Ewl6P01G/q+ZYwgHhJ9RVn4AxQXefILAoIBAQDvCouORdQX
+C8wsyp7MwXlF/3NQeNN5/+B2mhbxrBOf7PmMCXLnkRWcjwJtzypWFqJ0sqai/2+0
+bqbMcjX5maT8stT2shl3zXe/Ejt2e3TBYpc1tyuses8Kb5BMU8hu6tTd3G2CMXpD
+dT6DVemJZCTtwj9aBNIxSizvlgMolJnCpzhPnlfHSI6E+g3m/LTTo3HwbjMSw/Uq
+irgjOpI2wSBB6LZPSgjvfcYPRyWUk16L4A5uSX0cADnovDFLa5/h0wJvN/OoCSQg
+rLCXG5E18EyL5Wc58BCY1ZvxmjG3lQtgPxYu2Jwc36R/y/JKlxW5suER5ZNpbbD4
+uOyTt2VxMQ2bAoIBAQC5+MzRFqdo/AjfL5Y5JrbfVTzXCTDa09xCGd16ZU60QTWN
++4ed/r+o1sUKqUcRFB2MzEM/2DQBjQpZB/CbEWvWa1XJWXxypXbowveZU+QqOnmN
+uQvj8WLyA3o+PNF9e9QvauwCrHpn8VpxbtPWuaYoKnUFreFZZQxHhPGxRBIS2JOZ
+eDrT8ZaWnkCkh1AZp5smQ71LOprSlmKrg4jd1GjCVMxQR5N5KXbtyv0OTCZ/UFqK
+2aRBsMPyJgkaBChkZPLRcKwc+/wlQRx1fHQb14DNTApMxoXFO7eOwqmOkpAt9iyl
+SBIwoS0UUI5ab88+bBmXNvKcuFdNuQ4nowTJUn9pAoIBADMNkILBXSvS5DeIyuO2
+Sp1tkoZUV+5NfPY3sMDK3KIibaW/+t+EOBZo4L7tKQCb8vRzl21mmsfxfgRaPDbj
+3r3tv9g0b4YLxxBy52pFscj/soXRai17SS7UZwA2QK+XzgDYbDcLNC6mIsTQG4Gx
+dsWk3/zs3KuUSQaehmwrWK+fIUK38c1pLK8v7LoxrLkqxlHwZ04RthHw8KTthH7X
+Pnl1J0LF8CSeOyfWLSuPUfkT0GEzptnNHpEbaHfQM6R6eaGhVJPF6AZme4y6YYgg
+m2ihhSt1n0XVEWpHYWjxFy3mK2mz75unFC4LM+NEY2p2zuUQoCw7NjnY3QYrfCnx
+rRMCggEAXeXsMSLFjjyuoL7iKbAxo52HD/P0fBoy58LyRcwfNVr0lvYan4pYEx+o
+KijIh9K16PqXZXKMA9v003B+ulmF8bJ7SddCZ5NGvnFhUTDe4DdTKgp2RuwQ3Bsc
+3skPIDbhVETyOLCtys34USHrq8U/0DlGY3eLRfxw9GnbKxSBGa/KEu/qQLPNUo50
+7xHZDg7GKeC3kqNJeqKM9rkp0VzIGkEnaD9127LeNDmERDfftxJzFoC/THvUBLfU
+6Sus2ZYwRE8VFvKC30Q45t/c54X3IuhYvAuiCuTmyfE4ruyzyOwKzhUkeeLq1APX
+g0veFbyfzlJ0q8qzD/iffqqIa2ZSmQ==
+-----END PRIVATE KEY-----
diff --git a/tests/auto/network/ssl/qdtls/tst_qdtls.cpp b/tests/auto/network/ssl/qdtls/tst_qdtls.cpp
index 75d949d957..372ee3a181 100644
--- a/tests/auto/network/ssl/qdtls/tst_qdtls.cpp
+++ b/tests/auto/network/ssl/qdtls/tst_qdtls.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QTestEventLoop>
@@ -51,6 +26,8 @@
#include <algorithm>
+using namespace std::chrono_literals;
+
QT_BEGIN_NAMESPACE
namespace
@@ -152,8 +129,8 @@ private:
DtlsPtr clientCrypto;
QTestEventLoop testLoop;
- const int handshakeTimeoutMS = 5000;
- const int dataExchangeTimeoutMS = 1000;
+ static constexpr auto HandshakeTimeout = 5s;
+ static constexpr auto DataExchangeTimeout = 1s;
const QByteArray presharedKey = "DEADBEEFDEADBEEF";
QString certDirPath;
@@ -295,7 +272,7 @@ void tst_QDtls::configuration()
QFETCH(const QSslSocket::SslMode, mode);
QDtls dtls(mode);
QCOMPARE(dtls.dtlsConfiguration(), config);
- config.setProtocol(QSsl::DtlsV1_0OrLater);
+ config.setProtocol(QSsl::DtlsV1_2);
config.setDtlsCookieVerificationEnabled(false);
QCOMPARE(config.dtlsCookieVerificationEnabled(), false);
@@ -438,7 +415,7 @@ void tst_QDtls::handshake()
QDTLS_VERIFY_NO_ERROR(clientCrypto);
QCOMPARE(clientCrypto->handshakeState(), QDtls::HandshakeInProgress);
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
QVERIFY(!testLoop.timeout());
@@ -498,7 +475,7 @@ void tst_QDtls::handshakeWithRetransmission()
// client will re-transmit in 1s., the first part of 'ServerHello' to be
// dropped, the client then will re-transmit after another 2 s. Thus it's ~3.
// We err on safe side and double our (already quite generous) 5s.
- testLoop.enterLoopMSecs(handshakeTimeoutMS * 2);
+ testLoop.enterLoop(HandshakeTimeout * 2);
QVERIFY(!testLoop.timeout());
QDTLS_VERIFY_HANDSHAKE_SUCCESS(serverCrypto);
@@ -521,7 +498,7 @@ void tst_QDtls::sessionCipher()
QVERIFY(clientCrypto->setPeer(serverAddress, serverPort, hostName));
QVERIFY(clientCrypto->doHandshake(&clientSocket));
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
QVERIFY(!testLoop.timeout());
QDTLS_VERIFY_HANDSHAKE_SUCCESS(clientCrypto);
@@ -584,7 +561,7 @@ void tst_QDtls::cipherPreferences()
QVERIFY(clientCrypto->doHandshake(&clientSocket));
QDTLS_VERIFY_NO_ERROR(clientCrypto);
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
QVERIFY(!testLoop.timeout());
QDTLS_VERIFY_HANDSHAKE_SUCCESS(clientCrypto);
QDTLS_VERIFY_HANDSHAKE_SUCCESS(serverCrypto);
@@ -604,20 +581,36 @@ void tst_QDtls::protocolVersionMatching_data()
QTest::addColumn<QSsl::SslProtocol>("clientProtocol");
QTest::addColumn<bool>("works");
- QTest::addRow("DtlsV1_0 <-> DtlsV1_0") << QSsl::DtlsV1_0 << QSsl::DtlsV1_0 << true;
- QTest::addRow("DtlsV1_0OrLater <-> DtlsV1_0") << QSsl::DtlsV1_0OrLater << QSsl::DtlsV1_0 << true;
- QTest::addRow("DtlsV1_0 <-> DtlsV1_0OrLater") << QSsl::DtlsV1_0 << QSsl::DtlsV1_0OrLater << true;
- QTest::addRow("DtlsV1_0OrLater <-> DtlsV1_0OrLater") << QSsl::DtlsV1_0OrLater << QSsl::DtlsV1_0OrLater << true;
+ //OPENSSL_VERSION_NUMBER :
+ //(OPENSSL_VERSION_MAJOR<<28) | (OPENSSL_VERSION_MINOR<<20) | (OPENSSL_VERSION_PATCH<<4)
+ const long ossl311 = 0x30100010;
+
+ if (QSslSocket::sslLibraryVersionNumber() < ossl311) {
+#if QT_DEPRECATED_SINCE(6, 3)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ QTest::addRow("DtlsV1_0 <-> DtlsV1_0") << QSsl::DtlsV1_0 << QSsl::DtlsV1_0 << true;
+ QTest::addRow("DtlsV1_0OrLater <-> DtlsV1_0") << QSsl::DtlsV1_0OrLater << QSsl::DtlsV1_0 << true;
+ QTest::addRow("DtlsV1_0 <-> DtlsV1_0OrLater") << QSsl::DtlsV1_0 << QSsl::DtlsV1_0OrLater << true;
+ QTest::addRow("DtlsV1_0OrLater <-> DtlsV1_0OrLater") << QSsl::DtlsV1_0OrLater << QSsl::DtlsV1_0OrLater << true;
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 3)
+ }
QTest::addRow("DtlsV1_2 <-> DtlsV1_2") << QSsl::DtlsV1_2 << QSsl::DtlsV1_2 << true;
QTest::addRow("DtlsV1_2OrLater <-> DtlsV1_2") << QSsl::DtlsV1_2OrLater << QSsl::DtlsV1_2 << true;
QTest::addRow("DtlsV1_2 <-> DtlsV1_2OrLater") << QSsl::DtlsV1_2 << QSsl::DtlsV1_2OrLater << true;
QTest::addRow("DtlsV1_2OrLater <-> DtlsV1_2OrLater") << QSsl::DtlsV1_2OrLater << QSsl::DtlsV1_2OrLater << true;
- QTest::addRow("DtlsV1_0 <-> DtlsV1_2") << QSsl::DtlsV1_0 << QSsl::DtlsV1_2 << false;
- QTest::addRow("DtlsV1_0 <-> DtlsV1_2OrLater") << QSsl::DtlsV1_0 << QSsl::DtlsV1_2OrLater << false;
- QTest::addRow("DtlsV1_2 <-> DtlsV1_0") << QSsl::DtlsV1_2 << QSsl::DtlsV1_0 << false;
- QTest::addRow("DtlsV1_2OrLater <-> DtlsV1_0") << QSsl::DtlsV1_2OrLater << QSsl::DtlsV1_0 << false;
+ if (QSslSocket::sslLibraryVersionNumber() < ossl311) {
+#if QT_DEPRECATED_SINCE(6, 3)
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
+ QTest::addRow("DtlsV1_0 <-> DtlsV1_2") << QSsl::DtlsV1_0 << QSsl::DtlsV1_2 << false;
+ QTest::addRow("DtlsV1_0 <-> DtlsV1_2OrLater") << QSsl::DtlsV1_0 << QSsl::DtlsV1_2OrLater << false;
+ QTest::addRow("DtlsV1_2 <-> DtlsV1_0") << QSsl::DtlsV1_2 << QSsl::DtlsV1_0 << false;
+ QTest::addRow("DtlsV1_2OrLater <-> DtlsV1_0") << QSsl::DtlsV1_2OrLater << QSsl::DtlsV1_0 << false;
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 3
+ }
}
void tst_QDtls::protocolVersionMatching()
@@ -643,7 +636,7 @@ void tst_QDtls::protocolVersionMatching()
QVERIFY(clientCrypto->setPeer(serverAddress, serverPort));
QVERIFY(clientCrypto->doHandshake(&clientSocket));
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
if (works) {
QDTLS_VERIFY_HANDSHAKE_SUCCESS(serverCrypto);
@@ -678,7 +671,7 @@ void tst_QDtls::verificationErrors()
// Now we are ready for handshake:
QVERIFY(clientCrypto->doHandshake(&clientSocket));
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
QVERIFY(!testLoop.timeout());
QDTLS_VERIFY_NO_ERROR(serverCrypto);
@@ -748,7 +741,7 @@ void tst_QDtls::presetExpectedErrors()
QVERIFY(clientCrypto->setPeer(serverAddress, serverPort));
QVERIFY(clientCrypto->doHandshake(&clientSocket));
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
QVERIFY(!testLoop.timeout());
@@ -835,7 +828,7 @@ void tst_QDtls::verifyServerCertificate()
QVERIFY(clientCrypto->doHandshake(&clientSocket));
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
QVERIFY(!testLoop.timeout());
if (serverKey.isNull() && !serverCerts.isEmpty()) {
@@ -965,7 +958,7 @@ void tst_QDtls::verifyClientCertificate()
QVERIFY(clientCrypto->doHandshake(&clientSocket));
QDTLS_VERIFY_NO_ERROR(clientCrypto);
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
serverConfig = serverCrypto->dtlsConfiguration();
@@ -1012,7 +1005,7 @@ void tst_QDtls::blacklistedCerificate()
QVERIFY(clientCrypto->setPeer(serverAddress, serverPort, name));
QVERIFY(clientCrypto->doHandshake(&clientSocket));
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
QVERIFY(!testLoop.timeout());
QCOMPARE(clientCrypto->handshakeState(), QDtls::PeerVerificationFailed);
QCOMPARE(clientCrypto->dtlsError(), QDtlsError::PeerVerificationError);
@@ -1064,7 +1057,7 @@ void tst_QDtls::readWriteEncrypted()
QCOMPARE(clientCrypto->dtlsError(), QDtlsError::InvalidOperation);
// 1.2 Finish the handshake:
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
QVERIFY(!testLoop.timeout());
QDTLS_VERIFY_HANDSHAKE_SUCCESS(clientCrypto);
@@ -1082,7 +1075,7 @@ void tst_QDtls::readWriteEncrypted()
QVERIFY(clientBytesWritten > 0);
// 5. Exchange client/server messages:
- testLoop.enterLoopMSecs(dataExchangeTimeoutMS);
+ testLoop.enterLoop(DataExchangeTimeout);
QVERIFY(!testLoop.timeout());
QCOMPARE(serverExpectedPlainText, serverReceivedPlainText);
@@ -1100,7 +1093,7 @@ void tst_QDtls::readWriteEncrypted()
QCOMPARE(crypto->handshakeState(), QDtls::HandshakeNotStarted);
QVERIFY(!crypto->isConnectionEncrypted());
// 8. Receive this read notification and handle it:
- testLoop.enterLoopMSecs(dataExchangeTimeoutMS);
+ testLoop.enterLoop(DataExchangeTimeout);
QVERIFY(!testLoop.timeout());
DtlsPtr &peerCrypto = serverSideShutdown ? clientCrypto : serverCrypto;
@@ -1125,7 +1118,7 @@ void tst_QDtls::datagramFragmentation()
QVERIFY(clientCrypto->doHandshake(&clientSocket));
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
QVERIFY(!testLoop.timeout());
QDTLS_VERIFY_HANDSHAKE_SUCCESS(clientCrypto);
diff --git a/tests/auto/network/ssl/qdtlscookie/CMakeLists.txt b/tests/auto/network/ssl/qdtlscookie/CMakeLists.txt
index 28b1418173..d965c7efb6 100644
--- a/tests/auto/network/ssl/qdtlscookie/CMakeLists.txt
+++ b/tests/auto/network/ssl/qdtlscookie/CMakeLists.txt
@@ -1,21 +1,20 @@
-# Generated from qdtlscookie.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdtlscookie Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdtlscookie LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdtlscookie
SOURCES
tst_qdtlscookie.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::NetworkPrivate
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 3:.:.:qdtlscookie.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# DESTDIR = "debug"
-
-#### Keys ignored in scope 4:.:.:qdtlscookie.pro:else:
-# DESTDIR = "release"
diff --git a/tests/auto/network/ssl/qdtlscookie/tst_qdtlscookie.cpp b/tests/auto/network/ssl/qdtlscookie/tst_qdtlscookie.cpp
index 42b51ad413..167a196104 100644
--- a/tests/auto/network/ssl/qdtlscookie/tst_qdtlscookie.cpp
+++ b/tests/auto/network/ssl/qdtlscookie/tst_qdtlscookie.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QTestEventLoop>
@@ -47,6 +22,8 @@
#include <utility>
#include <vector>
+using namespace std::chrono_literals;
+
QT_BEGIN_NAMESPACE
#define STOP_ON_FAILURE \
@@ -101,7 +78,7 @@ private:
quint16 serverPort = 0;
QTestEventLoop testLoop;
- int handshakeTimeoutMS = 500;
+ static constexpr auto HandshakeTimeout = 500ms;
QDtlsClientVerifier listener;
using HandshakePtr = QSharedPointer<QDtls>;
@@ -352,7 +329,7 @@ void tst_QDtlsCookie::verifyMultipleClients()
clientsToAdd = clientsToWait = 100;
- testLoop.enterLoopMSecs(handshakeTimeoutMS * clientsToWait);
+ testLoop.enterLoop(HandshakeTimeout * clientsToWait);
QVERIFY(!testLoop.timeout());
QVERIFY(clientsToWait == 0);
}
@@ -376,7 +353,7 @@ void tst_QDtlsCookie::receiveMessage(QUdpSocket *socket, QByteArray *message,
Q_ASSERT(socket && message);
if (socket->pendingDatagramSize() <= 0)
- testLoop.enterLoopMSecs(handshakeTimeoutMS);
+ testLoop.enterLoop(HandshakeTimeout);
QVERIFY(!testLoop.timeout());
QVERIFY(socket->pendingDatagramSize());
diff --git a/tests/auto/network/ssl/qocsp/CMakeLists.txt b/tests/auto/network/ssl/qocsp/CMakeLists.txt
index 827c81e9d8..98d38ec1c0 100644
--- a/tests/auto/network/ssl/qocsp/CMakeLists.txt
+++ b/tests/auto/network/ssl/qocsp/CMakeLists.txt
@@ -1,22 +1,26 @@
-# Generated from qocsp.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qocsp Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qocsp LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qocsp
SOURCES
tst_qocsp.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::NetworkPrivate
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 3:.:.:qocsp.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# DESTDIR = "debug"
-
-#### Keys ignored in scope 4:.:.:qocsp.pro:else:
-# DESTDIR = "release"
+qt_internal_extend_target(tst_qocsp CONDITION QT_FEATURE_openssl_linked
+ LIBRARIES
+ WrapOpenSSL::WrapOpenSSL
+)
diff --git a/tests/auto/network/ssl/qocsp/tst_qocsp.cpp b/tests/auto/network/ssl/qocsp/tst_qocsp.cpp
index 1b48b59534..81ce030be0 100644
--- a/tests/auto/network/ssl/qocsp/tst_qocsp.cpp
+++ b/tests/auto/network/ssl/qocsp/tst_qocsp.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
- **
- ** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QTestEventLoop>
@@ -53,6 +28,8 @@
#include <algorithm>
#include <utility>
+using namespace std::chrono_literals;
+
// NOTE: the word 'subject' in the code below means the subject of a status request,
// so in general it's our peer's certificate we are asking about.
@@ -411,7 +388,7 @@ private:
void (QSslSocket::*tlsErrorsSignal)(const QList<QSslError> &) = &QSslSocket::sslErrors;
void (QTestEventLoop::*exitLoopSlot)() = &QTestEventLoop::exitLoop;
- const int handshakeTimeoutMS = 500;
+ static constexpr auto HandshakeTimeout = 500ms;
QTestEventLoop loop;
std::vector<QSslError::SslError> ocspErrorCodes = {QSslError::OcspNoResponseFound,
@@ -487,7 +464,7 @@ void tst_QOcsp::connectSelfSigned()
auto roots = clientConfig.caCertificates();
setupOcspClient(clientSocket, issuerToChain(subjectChain), server.peerVerifyName());
clientSocket.connectToHostEncrypted(server.hostName(), server.serverPort());
- loop.enterLoopMSecs(handshakeTimeoutMS);
+ loop.enterLoop(HandshakeTimeout);
QVERIFY(!clientSocket.isEncrypted());
QCOMPARE_SINGLE_ERROR(clientSocket, expectedError);
@@ -503,7 +480,7 @@ void tst_QOcsp::connectSelfSigned()
QSslSocket clientSocket;
setupOcspClient(clientSocket, issuerToChain(subjectChain), server.peerVerifyName());
clientSocket.connectToHostEncrypted(server.hostName(), server.serverPort());
- loop.enterLoopMSecs(handshakeTimeoutMS);
+ loop.enterLoop(HandshakeTimeout);
QVERIFY_HANDSHAKE_WITHOUT_ERRORS(clientSocket);
@@ -568,7 +545,7 @@ void tst_QOcsp::badStatus()
QSslSocket clientSocket;
setupOcspClient(clientSocket, issuerToChain(subjectChain), server.peerVerifyName());
clientSocket.connectToHostEncrypted(server.hostName(), server.serverPort());
- loop.enterLoopMSecs(handshakeTimeoutMS);
+ loop.enterLoop(HandshakeTimeout);
QVERIFY(!clientSocket.isEncrypted());
QCOMPARE_SINGLE_ERROR(clientSocket, expectedError.error());
@@ -599,7 +576,7 @@ void tst_QOcsp::multipleSingleResponses()
QSslSocket clientSocket;
setupOcspClient(clientSocket, issuerToChain(responderChain), server.peerVerifyName());
clientSocket.connectToHostEncrypted(server.hostName(), server.serverPort());
- loop.enterLoopMSecs(handshakeTimeoutMS);
+ loop.enterLoop(HandshakeTimeout);
QVERIFY(!clientSocket.isEncrypted());
QCOMPARE_SINGLE_ERROR(clientSocket, expectedError);
@@ -619,7 +596,7 @@ void tst_QOcsp::malformedResponse()
QSslSocket clientSocket;
setupOcspClient(clientSocket, issuerToChain(serverChain), server.peerVerifyName());
clientSocket.connectToHostEncrypted(server.hostName(), server.serverPort());
- loop.enterLoopMSecs(handshakeTimeoutMS);
+ loop.enterLoop(HandshakeTimeout);
QVERIFY(!clientSocket.isEncrypted());
QCOMPARE(clientSocket.error(), QAbstractSocket::SslHandshakeFailedError);
@@ -658,7 +635,7 @@ void tst_QOcsp::expiredResponse()
QSslSocket clientSocket;
setupOcspClient(clientSocket, issuerToChain(subjectChain), server.peerVerifyName());
clientSocket.connectToHostEncrypted(server.hostName(), server.serverPort());
- loop.enterLoopMSecs(handshakeTimeoutMS);
+ loop.enterLoop(HandshakeTimeout);
QVERIFY(!clientSocket.isEncrypted());
QCOMPARE_SINGLE_ERROR(clientSocket, expectedError);
@@ -689,7 +666,7 @@ void tst_QOcsp::noNextUpdate()
QSslSocket clientSocket;
setupOcspClient(clientSocket, issuerToChain(subjectChain), server.peerVerifyName());
clientSocket.connectToHostEncrypted(server.hostName(), server.serverPort());
- loop.enterLoopMSecs(handshakeTimeoutMS);
+ loop.enterLoop(HandshakeTimeout);
QVERIFY_HANDSHAKE_WITHOUT_ERRORS(clientSocket);
}
@@ -735,7 +712,7 @@ void tst_QOcsp::wrongCertificateInResponse()
QSslSocket clientSocket;
setupOcspClient(clientSocket, issuerToChain(subjectChain), server.peerVerifyName());
clientSocket.connectToHostEncrypted(server.hostName(), server.serverPort());
- loop.enterLoopMSecs(handshakeTimeoutMS);
+ loop.enterLoop(HandshakeTimeout);
QVERIFY(!clientSocket.isEncrypted());
QVERIFY(containsError(clientSocket.sslHandshakeErrors(), expectedError));
@@ -760,7 +737,7 @@ void tst_QOcsp::untrustedResponder()
QSslSocket clientSocket;
setupOcspClient(clientSocket, {}, server.peerVerifyName());
clientSocket.connectToHostEncrypted(server.hostName(), server.serverPort());
- loop.enterLoopMSecs(handshakeTimeoutMS);
+ loop.enterLoop(HandshakeTimeout);
QVERIFY(!clientSocket.isEncrypted());
QVERIFY(containsError(clientSocket.sslHandshakeErrors(), expectedError));
diff --git a/tests/auto/network/ssl/qpassworddigestor/CMakeLists.txt b/tests/auto/network/ssl/qpassworddigestor/CMakeLists.txt
index 29eb26e377..96491eada9 100644
--- a/tests/auto/network/ssl/qpassworddigestor/CMakeLists.txt
+++ b/tests/auto/network/ssl/qpassworddigestor/CMakeLists.txt
@@ -1,12 +1,20 @@
-# Generated from qpassworddigestor.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpassworddigestor Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpassworddigestor LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpassworddigestor
SOURCES
tst_qpassworddigestor.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
diff --git a/tests/auto/network/ssl/qpassworddigestor/tst_qpassworddigestor.cpp b/tests/auto/network/ssl/qpassworddigestor/tst_qpassworddigestor.cpp
index 27201d23d0..1876c955af 100644
--- a/tests/auto/network/ssl/qpassworddigestor/tst_qpassworddigestor.cpp
+++ b/tests/auto/network/ssl/qpassworddigestor/tst_qpassworddigestor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtNetwork/qpassworddigestor.h>
diff --git a/tests/auto/network/ssl/qsslcertificate/CMakeLists.txt b/tests/auto/network/ssl/qsslcertificate/CMakeLists.txt
index caeac8d68a..6f81a5e030 100644
--- a/tests/auto/network/ssl/qsslcertificate/CMakeLists.txt
+++ b/tests/auto/network/ssl/qsslcertificate/CMakeLists.txt
@@ -1,15 +1,20 @@
-# Generated from qsslcertificate.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsslcertificate Test:
#####################################################################
-# special case begin
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsslcertificate LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# This test requires private tests to properly build
if (NOT QT_FEATURE_private_tests)
return()
endif()
-# special case end
# Collect test data
file(GLOB_RECURSE test_data_glob
@@ -32,7 +37,8 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qsslcertificate
SOURCES
tst_qsslcertificate.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
TESTDATA ${test_data}
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/gencertificates.sh b/tests/auto/network/ssl/qsslcertificate/certificates/gencertificates.sh
index 4d68549396..cdc1019dcb 100755
--- a/tests/auto/network/ssl/qsslcertificate/certificates/gencertificates.sh
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/gencertificates.sh
@@ -1,31 +1,6 @@
#!/bin/sh
-#############################################################################
-##
-## Copyright (C) 2016 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is the build configuration utility of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:GPL-EXCEPT$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 as published by the Free Software
-## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
+# Copyright (C) 2016 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
# This script generates digital certificates of different types.
diff --git a/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.0.9.8 b/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.0.9.8
deleted file mode 100644
index 20500b221f..0000000000
--- a/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.0.9.8
+++ /dev/null
@@ -1,42 +0,0 @@
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- ce:db:31:28:45:c4:05:40
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
- Validity
- Not Before: Aug 4 09:53:41 2010 GMT
- Not After : Aug 29 09:53:41 2051 GMT
- Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:cd:aa:db:6f:d6:34:c9:a7:f1:c0:be:e4:41:18:
- 19:e2:02:c9:22:e6:a7:d5:ba:03:2e:9e:28:7a:f4:
- 5f:1a:77:5f:77:a9:11:3b:8f:7e:f0:2e:c6:9e:eb:
- 3a:d9:12:d7:c1:0c:51:e8:24:52:3f:23:c3:42:0c:
- 11:c6:f2:1c:a1:42:fe:b4:c2:69:83:ad:f7:70:b1:
- 18:15:cc:20:28:62:30:f0:2c:15:e6:33:19:af:c3:
- eb:1c:c0:91:f7:11:68:94:50:f8:49:37:08:32:d7:
- 3e:75:df:a3:bc:69:00:15:de:cd:87:0f:5c:02:6b:
- 82:c8:01:7d:6a:f0:1d:dc:73
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 8A:6E:19:E7:97:9B:8F:D9:7F:B3:BB:01:4F:E8:6A:2F:52:95:0D:D9
- X509v3 Authority Key Identifier:
- keyid:8A:6E:19:E7:97:9B:8F:D9:7F:B3:BB:01:4F:E8:6A:2F:52:95:0D:D9
-
- X509v3 Basic Constraints:
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- a1:74:8e:5d:36:96:2c:05:7e:ea:66:cc:2e:68:c7:3d:93:dc:
- 8c:a3:11:ad:b5:7e:6e:d0:04:c4:09:bd:0a:f9:39:3b:97:d7:
- f0:bb:0c:09:7b:83:fe:bf:87:b0:47:e8:94:b7:aa:9c:79:ad:
- 71:9e:b7:c4:99:98:6f:1d:38:32:f8:a3:75:38:c4:e5:e7:37:
- 37:21:ec:7b:50:8b:15:b0:97:1e:17:9c:50:17:3c:c1:df:94:
- 55:fb:60:2e:50:40:d1:ea:23:c6:3c:21:6f:97:8c:06:16:a5:
- 82:72:c1:63:14:64:86:eb:d7:ff:72:f6:09:f5:6d:e6:04:13:
- 7a:6a
diff --git a/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.1.0.1 b/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.1.0.1
deleted file mode 100644
index 1a7d945b76..0000000000
--- a/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.1.0.1
+++ /dev/null
@@ -1,42 +0,0 @@
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- ce:db:31:28:45:c4:05:40
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
- Validity
- Not Before: Aug 4 09:53:41 2010 GMT
- Not After : Aug 29 09:53:41 2051 GMT
- Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- Public-Key: (1024 bit)
- Modulus:
- 00:cd:aa:db:6f:d6:34:c9:a7:f1:c0:be:e4:41:18:
- 19:e2:02:c9:22:e6:a7:d5:ba:03:2e:9e:28:7a:f4:
- 5f:1a:77:5f:77:a9:11:3b:8f:7e:f0:2e:c6:9e:eb:
- 3a:d9:12:d7:c1:0c:51:e8:24:52:3f:23:c3:42:0c:
- 11:c6:f2:1c:a1:42:fe:b4:c2:69:83:ad:f7:70:b1:
- 18:15:cc:20:28:62:30:f0:2c:15:e6:33:19:af:c3:
- eb:1c:c0:91:f7:11:68:94:50:f8:49:37:08:32:d7:
- 3e:75:df:a3:bc:69:00:15:de:cd:87:0f:5c:02:6b:
- 82:c8:01:7d:6a:f0:1d:dc:73
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 8A:6E:19:E7:97:9B:8F:D9:7F:B3:BB:01:4F:E8:6A:2F:52:95:0D:D9
- X509v3 Authority Key Identifier:
- keyid:8A:6E:19:E7:97:9B:8F:D9:7F:B3:BB:01:4F:E8:6A:2F:52:95:0D:D9
-
- X509v3 Basic Constraints:
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- a1:74:8e:5d:36:96:2c:05:7e:ea:66:cc:2e:68:c7:3d:93:dc:
- 8c:a3:11:ad:b5:7e:6e:d0:04:c4:09:bd:0a:f9:39:3b:97:d7:
- f0:bb:0c:09:7b:83:fe:bf:87:b0:47:e8:94:b7:aa:9c:79:ad:
- 71:9e:b7:c4:99:98:6f:1d:38:32:f8:a3:75:38:c4:e5:e7:37:
- 37:21:ec:7b:50:8b:15:b0:97:1e:17:9c:50:17:3c:c1:df:94:
- 55:fb:60:2e:50:40:d1:ea:23:c6:3c:21:6f:97:8c:06:16:a5:
- 82:72:c1:63:14:64:86:eb:d7:ff:72:f6:09:f5:6d:e6:04:13:
- 7a:6a
diff --git a/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.1.0.1c b/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.1.0.1c
deleted file mode 100644
index a45ed864f4..0000000000
--- a/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.1.0.1c
+++ /dev/null
@@ -1,41 +0,0 @@
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number: 14905561440751715648 (0xcedb312845c40540)
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
- Validity
- Not Before: Aug 4 09:53:41 2010 GMT
- Not After : Aug 29 09:53:41 2051 GMT
- Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- Public-Key: (1024 bit)
- Modulus:
- 00:cd:aa:db:6f:d6:34:c9:a7:f1:c0:be:e4:41:18:
- 19:e2:02:c9:22:e6:a7:d5:ba:03:2e:9e:28:7a:f4:
- 5f:1a:77:5f:77:a9:11:3b:8f:7e:f0:2e:c6:9e:eb:
- 3a:d9:12:d7:c1:0c:51:e8:24:52:3f:23:c3:42:0c:
- 11:c6:f2:1c:a1:42:fe:b4:c2:69:83:ad:f7:70:b1:
- 18:15:cc:20:28:62:30:f0:2c:15:e6:33:19:af:c3:
- eb:1c:c0:91:f7:11:68:94:50:f8:49:37:08:32:d7:
- 3e:75:df:a3:bc:69:00:15:de:cd:87:0f:5c:02:6b:
- 82:c8:01:7d:6a:f0:1d:dc:73
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 8A:6E:19:E7:97:9B:8F:D9:7F:B3:BB:01:4F:E8:6A:2F:52:95:0D:D9
- X509v3 Authority Key Identifier:
- keyid:8A:6E:19:E7:97:9B:8F:D9:7F:B3:BB:01:4F:E8:6A:2F:52:95:0D:D9
-
- X509v3 Basic Constraints:
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- a1:74:8e:5d:36:96:2c:05:7e:ea:66:cc:2e:68:c7:3d:93:dc:
- 8c:a3:11:ad:b5:7e:6e:d0:04:c4:09:bd:0a:f9:39:3b:97:d7:
- f0:bb:0c:09:7b:83:fe:bf:87:b0:47:e8:94:b7:aa:9c:79:ad:
- 71:9e:b7:c4:99:98:6f:1d:38:32:f8:a3:75:38:c4:e5:e7:37:
- 37:21:ec:7b:50:8b:15:b0:97:1e:17:9c:50:17:3c:c1:df:94:
- 55:fb:60:2e:50:40:d1:ea:23:c6:3c:21:6f:97:8c:06:16:a5:
- 82:72:c1:63:14:64:86:eb:d7:ff:72:f6:09:f5:6d:e6:04:13:
- 7a:6a
diff --git a/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.1.0.0 b/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.3.0.5
index b2ccb2751e..a2cf759c10 100644
--- a/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.1.0.0
+++ b/tests/auto/network/ssl/qsslcertificate/more-certificates/cert-large-expiration-date.txt.3.0.5
@@ -27,11 +27,11 @@ Certificate:
X509v3 Subject Key Identifier:
8A:6E:19:E7:97:9B:8F:D9:7F:B3:BB:01:4F:E8:6A:2F:52:95:0D:D9
X509v3 Authority Key Identifier:
- keyid:8A:6E:19:E7:97:9B:8F:D9:7F:B3:BB:01:4F:E8:6A:2F:52:95:0D:D9
-
+ 8A:6E:19:E7:97:9B:8F:D9:7F:B3:BB:01:4F:E8:6A:2F:52:95:0D:D9
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: sha1WithRSAEncryption
+ Signature Value:
a1:74:8e:5d:36:96:2c:05:7e:ea:66:cc:2e:68:c7:3d:93:dc:
8c:a3:11:ad:b5:7e:6e:d0:04:c4:09:bd:0a:f9:39:3b:97:d7:
f0:bb:0c:09:7b:83:fe:bf:87:b0:47:e8:94:b7:aa:9c:79:ad:
diff --git a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
index d9e58c39c1..b51053effd 100644
--- a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
+++ b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
@@ -1,43 +1,22 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QtNetwork/qtnetworkglobal.h>
+#include <QtCore/qdatetime.h>
+#include <QtCore/qtimezone.h>
+#include <QtCore/qscopeguard.h>
+#include <QtCore/qset.h>
+
#include <qsslcertificate.h>
#include <qsslkey.h>
#include <qsslsocket.h>
#include <qsslcertificateextension.h>
-#include <qscopeguard.h>
#ifndef QT_NO_OPENSSL
+#include <openssl/opensslv.h>
#include <openssl/obj_mac.h>
#endif
@@ -123,7 +102,31 @@ private slots:
#endif // QT_CONFIG(ssl)
private:
QString testDataDir;
- bool isNonOpenSslTls = false;
+
+ enum class TLSBackend {
+ OpenSSL,
+ Schannel,
+ SecureTransport,
+ CertOnly,
+ Unknown,
+ };
+ static TLSBackend currentBackend()
+ {
+ static TLSBackend activeBackend = []() {
+ using namespace Qt::StringLiterals;
+ const QString active = QSslSocket::activeBackend();
+ if (active == "openssl"_L1)
+ return TLSBackend::OpenSSL;
+ if (active == "schannel")
+ return TLSBackend::Schannel;
+ if (active == "securetransport")
+ return TLSBackend::SecureTransport;
+ if (active == "cert-only")
+ return TLSBackend::CertOnly;
+ return TLSBackend::Unknown;
+ }();
+ return activeBackend;
+ }
};
void tst_QSslCertificate::initTestCase()
@@ -133,22 +136,15 @@ void tst_QSslCertificate::initTestCase()
testDataDir = QCoreApplication::applicationDirPath();
if (!testDataDir.endsWith(QLatin1String("/")))
testDataDir += QLatin1String("/");
-#if QT_CONFIG(opensslv11)
- // In the presence of 'openssl' backend, QSslSocket will
- // select 'openssl' as the default one.
- isNonOpenSslTls = QSslSocket::activeBackend() != QStringLiteral("openssl");
-#else
- isNonOpenSslTls = true;
-#endif // QT_CONFIG(ssl)
QDir dir(testDataDir + "certificates");
- QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::Readable);
+ const QFileInfoList fileInfoList = dir.entryInfoList(QDir::Files | QDir::Readable);
QRegularExpression rxCert(QLatin1String("^.+\\.(pem|der)$"));
QRegularExpression rxSan(QLatin1String("^(.+\\.(?:pem|der))\\.san$"));
QRegularExpression rxPubKey(QLatin1String("^(.+\\.(?:pem|der))\\.pubkey$"));
QRegularExpression rxDigest(QLatin1String("^(.+\\.(?:pem|der))\\.digest-(md5|sha1)$"));
QRegularExpressionMatch match;
- foreach (QFileInfo fileInfo, fileInfoList) {
+ for (const QFileInfo &fileInfo : fileInfoList) {
if ((match = rxCert.match(fileInfo.fileName())).hasMatch())
certInfoList <<
CertInfo(fileInfo,
@@ -211,7 +207,7 @@ void tst_QSslCertificate::createTestRows()
{
QTest::addColumn<QString>("absFilePath");
QTest::addColumn<QSsl::EncodingFormat>("format");
- foreach (CertInfo certInfo, certInfoList) {
+ for (const CertInfo &certInfo : std::as_const(certInfoList)) {
QTest::newRow(certInfo.fileInfo.fileName().toLatin1())
<< certInfo.fileInfo.absoluteFilePath() << certInfo.format;
}
@@ -342,7 +338,7 @@ void tst_QSslCertificate::digest_data()
QTest::addColumn<QSsl::EncodingFormat>("format");
QTest::addColumn<QString>("absFilePath_digest_md5");
QTest::addColumn<QString>("absFilePath_digest_sha1");
- foreach (CertInfo certInfo, certInfoList) {
+ for (const CertInfo &certInfo : std::as_const(certInfoList)) {
QString certName = certInfo.fileInfo.fileName();
QTest::newRow(certName.toLatin1())
<< certInfo.fileInfo.absoluteFilePath()
@@ -395,7 +391,7 @@ void tst_QSslCertificate::subjectAlternativeNames_data()
QTest::addColumn<QSsl::EncodingFormat>("format");
QTest::addColumn<QString>("subjAltNameFilePath");
- foreach (CertInfo certInfo, certInfoList) {
+ for (const CertInfo &certInfo : std::as_const(certInfoList)) {
QString certName = certInfo.fileInfo.fileName();
if (subjAltNameMap.contains(certName))
QTest::newRow(certName.toLatin1())
@@ -477,7 +473,7 @@ void tst_QSslCertificate::subjectInfoToString()
QVERIFY(testInfo(QSslCertificate::DistinguishedNameQualifier, QString()));
QVERIFY(testInfo(QSslCertificate::SerialNumber, QString()));
// TODO: check why generic code does not handle this!
- if (!isNonOpenSslTls)
+ if (currentBackend() == TLSBackend::OpenSSL)
QVERIFY(testInfo(QSslCertificate::EmailAddress, QStringLiteral("ababic@trolltech.com")));
}
@@ -489,9 +485,8 @@ void tst_QSslCertificate::subjectIssuerDisplayName_data()
QTest::addRow("CommonName") << QStringLiteral("more-certificates/cert-cn.pem") << QStringLiteral("YOUR name");
QTest::addRow("OrganizationName") << QStringLiteral("more-certificates/cert-on.pem") << QStringLiteral("R&D");
QTest::addRow("OrganizationUnitName") << QStringLiteral("more-certificates/cert-oun.pem") << QStringLiteral("Foundations");
-#ifndef QT_NO_OPENSSL
- QTest::addRow("NoSubjectName") << QStringLiteral("more-certificates/cert-noname.pem") << QString();
-#endif
+ if (currentBackend() == TLSBackend::OpenSSL)
+ QTest::addRow("NoSubjectName") << QStringLiteral("more-certificates/cert-noname.pem") << QString();
}
void tst_QSslCertificate::subjectIssuerDisplayName()
@@ -521,7 +516,7 @@ void tst_QSslCertificate::utf8SubjectNames()
static const char *ou = "\xe3\x88\xa7" "A" "\xe3\x89\x81\xef\xbd\xab" "BC";
// the following two tests should help find "\x"-literal encoding bugs in the test itself
- QCOMPARE(cert.subjectInfo("O")[0].length(), QString::fromUtf8(o).length());
+ QCOMPARE(cert.subjectInfo("O")[0].size(), QString::fromUtf8(o).size());
QCOMPARE (cert.subjectInfo("O")[0].toUtf8().toHex(), QByteArray(o).toHex());
QCOMPARE(cert.subjectInfo("O")[0], QString::fromUtf8(o));
@@ -534,7 +529,7 @@ void tst_QSslCertificate::publicKey_data()
QTest::addColumn<QSsl::EncodingFormat>("format");
QTest::addColumn<QString>("pubkeyFilePath");
- foreach (CertInfo certInfo, certInfoList) {
+ for (const CertInfo &certInfo : std::as_const(certInfoList)) {
QString certName = certInfo.fileInfo.fileName();
if (pubkeyMap.contains(certName))
QTest::newRow(certName.toLatin1())
@@ -836,8 +831,10 @@ void tst_QSslCertificate::certInfo()
QCOMPARE(cert.digest(QCryptographicHash::Sha1),
QByteArray::fromHex("B6:D1:51:82:E0:29:CA:59:96:38:BD:B6:F9:40:05:91:6D:49:09:60"));
- QCOMPARE(cert.effectiveDate().toUTC(), QDateTime(QDate(2007, 4, 17), QTime(7,40,26), Qt::UTC));
- QCOMPARE(cert.expiryDate().toUTC(), QDateTime(QDate(2007, 5, 17), QTime(7,40,26), Qt::UTC));
+ QCOMPARE(cert.effectiveDate().toUTC(),
+ QDateTime(QDate(2007, 4, 17), QTime(7,40,26), QTimeZone::UTC));
+ QCOMPARE(cert.expiryDate().toUTC(),
+ QDateTime(QDate(2007, 5, 17), QTime(7,40,26), QTimeZone::UTC));
QVERIFY(cert.expiryDate() < QDateTime::currentDateTime()); // cert has expired
QSslCertificate copy = cert;
@@ -899,7 +896,7 @@ void tst_QSslCertificate::task256066toPem()
void tst_QSslCertificate::nulInCN()
{
- if (isNonOpenSslTls)
+ if (currentBackend() != TLSBackend::OpenSSL)
QSKIP("Generic QSslCertificatePrivate fails this test");
QList<QSslCertificate> certList =
@@ -919,7 +916,7 @@ void tst_QSslCertificate::nulInCN()
void tst_QSslCertificate::nulInSan()
{
- if (isNonOpenSslTls)
+ if (currentBackend() != TLSBackend::OpenSSL)
QSKIP("Generic QSslCertificatePrivate fails this test");
QList<QSslCertificate> certList =
@@ -961,16 +958,18 @@ void tst_QSslCertificate::largeExpirationDate() // QTBUG-12489
const QSslCertificate &cert = certList.at(0);
QVERIFY(!cert.isNull());
- QCOMPARE(cert.effectiveDate().toUTC(), QDateTime(QDate(2010, 8, 4), QTime(9, 53, 41), Qt::UTC));
+ QCOMPARE(cert.effectiveDate().toUTC(),
+ QDateTime(QDate(2010, 8, 4), QTime(9, 53, 41), QTimeZone::UTC));
// if the date is larger than 2049, then the generalized time format is used
- QCOMPARE(cert.expiryDate().toUTC(), QDateTime(QDate(2051, 8, 29), QTime(9, 53, 41), Qt::UTC));
+ QCOMPARE(cert.expiryDate().toUTC(),
+ QDateTime(QDate(2051, 8, 29), QTime(9, 53, 41), QTimeZone::UTC));
}
void tst_QSslCertificate::blacklistedCertificates()
{
QList<QSslCertificate> blacklistedCerts = QSslCertificate::fromPath(testDataDir + "more-certificates/blacklisted*.pem", QSsl::Pem, QSslCertificate::PatternSyntax::Wildcard);
- QVERIFY(blacklistedCerts.count() > 0);
- for (int a = 0; a < blacklistedCerts.count(); a++) {
+ QVERIFY(blacklistedCerts.size() > 0);
+ for (int a = 0; a < blacklistedCerts.size(); a++) {
QVERIFY(blacklistedCerts.at(a).isBlacklisted());
}
}
@@ -984,7 +983,7 @@ void tst_QSslCertificate::selfsignedCertificates()
void tst_QSslCertificate::toText()
{
- if (isNonOpenSslTls)
+ if (currentBackend() != TLSBackend::OpenSSL)
QSKIP("QSslCertificate::toText is not implemented on platforms which do not use openssl");
QList<QSslCertificate> certList =
@@ -993,42 +992,26 @@ void tst_QSslCertificate::toText()
QCOMPARE(certList.size(), 1);
const QSslCertificate &cert = certList.at(0);
- // Openssl's cert dump method changed slightly between 0.9.8, 1.0.0 and 1.01 versions, so we want it to match any output
-
- QFile f098(testDataDir + "more-certificates/cert-large-expiration-date.txt.0.9.8");
- QVERIFY(f098.open(QIODevice::ReadOnly | QFile::Text));
- QByteArray txt098 = f098.readAll();
-
- QFile f100(testDataDir + "more-certificates/cert-large-expiration-date.txt.1.0.0");
- QVERIFY(f100.open(QIODevice::ReadOnly | QFile::Text));
- QByteArray txt100 = f100.readAll();
-
- QFile f101(testDataDir + "more-certificates/cert-large-expiration-date.txt.1.0.1");
- QVERIFY(f101.open(QIODevice::ReadOnly | QFile::Text));
- QByteArray txt101 = f101.readAll();
-
- QFile f101c(testDataDir + "more-certificates/cert-large-expiration-date.txt.1.0.1c");
- QVERIFY(f101c.open(QIODevice::ReadOnly | QFile::Text));
- QByteArray txt101c = f101c.readAll();
-
+ // Openssl's cert dump method changed slightly between 1.1.1 and 3.0.5 versions, so we want it to match any output
QFile f111(testDataDir + "more-certificates/cert-large-expiration-date.txt.1.1.1");
QVERIFY(f111.open(QIODevice::ReadOnly | QFile::Text));
QByteArray txt111 = f111.readAll();
+ QFile f305(testDataDir + "more-certificates/cert-large-expiration-date.txt.3.0.5");
+ QVERIFY(f305.open(QIODevice::ReadOnly | QFile::Text));
+ QByteArray txt305 = f305.readAll();
+
QString txtcert = cert.toText();
- QVERIFY(QString::fromLatin1(txt098) == txtcert ||
- QString::fromLatin1(txt100) == txtcert ||
- QString::fromLatin1(txt101) == txtcert ||
- QString::fromLatin1(txt101c) == txtcert ||
- QString::fromLatin1(txt111) == txtcert );
+ QVERIFY(QString::fromLatin1(txt111) == txtcert ||
+ QString::fromLatin1(txt305) == txtcert);
}
void tst_QSslCertificate::multipleCommonNames()
{
QList<QSslCertificate> certList =
QSslCertificate::fromPath(testDataDir + "more-certificates/test-cn-two-cns-cert.pem", QSsl::Pem, QSslCertificate::PatternSyntax::FixedString);
- QVERIFY(certList.count() > 0);
+ QVERIFY(certList.size() > 0);
QStringList commonNames = certList[0].subjectInfo(QSslCertificate::CommonName);
QVERIFY(commonNames.contains(QString("www.example.com")));
@@ -1039,18 +1022,18 @@ void tst_QSslCertificate::subjectAndIssuerAttributes()
{
QList<QSslCertificate> certList =
QSslCertificate::fromPath(testDataDir + "more-certificates/test-cn-with-drink-cert.pem", QSsl::Pem, QSslCertificate::PatternSyntax::FixedString);
- QVERIFY(certList.count() > 0);
+ QVERIFY(certList.size() > 0);
QList<QByteArray> attributes = certList[0].subjectInfoAttributes();
QVERIFY(attributes.contains(QByteArray("favouriteDrink")));
attributes.clear();
certList = QSslCertificate::fromPath(testDataDir + "more-certificates/natwest-banking.pem", QSsl::Pem, QSslCertificate::PatternSyntax::FixedString);
- QVERIFY(certList.count() > 0);
+ QVERIFY(certList.size() > 0);
QByteArray shortName("1.3.6.1.4.1.311.60.2.1.3");
#if !defined(QT_NO_OPENSSL) && defined(SN_jurisdictionCountryName)
- if (!isNonOpenSslTls)
+ if (currentBackend() == TLSBackend::OpenSSL)
shortName = SN_jurisdictionCountryName;
#endif
attributes = certList[0].subjectInfoAttributes();
@@ -1059,8 +1042,8 @@ void tst_QSslCertificate::subjectAndIssuerAttributes()
void tst_QSslCertificate::verify()
{
- if (isNonOpenSslTls)
- QSKIP("Not implemented in SecureTransport or Schannel");
+ if (currentBackend() != TLSBackend::OpenSSL)
+ QSKIP("Only implemented for OpenSSL");
QList<QSslError> errors;
QList<QSslCertificate> toVerify;
@@ -1073,7 +1056,7 @@ void tst_QSslCertificate::verify()
// Empty chain is unspecified error
errors = QSslCertificate::verify(toVerify);
- VERIFY_VERBOSE(errors.count() == 1);
+ VERIFY_VERBOSE(errors.size() == 1);
VERIFY_VERBOSE(errors[0] == QSslError(QSslError::UnspecifiedError));
errors.clear();
@@ -1092,14 +1075,14 @@ void tst_QSslCertificate::verify()
toVerify = QSslCertificate::fromPath(testDataDir + "verify-certs/test-ocsp-good-cert.pem", QSsl::Pem, QSslCertificate::PatternSyntax::FixedString);
errors = QSslCertificate::verify(toVerify);
- VERIFY_VERBOSE(errors.count() == 0);
+ VERIFY_VERBOSE(errors.size() == 0);
errors.clear();
// Test a blacklisted certificate
toVerify = QSslCertificate::fromPath(testDataDir + "verify-certs/test-addons-mozilla-org-cert.pem", QSsl::Pem, QSslCertificate::PatternSyntax::FixedString);
errors = QSslCertificate::verify(toVerify);
bool foundBlack = false;
- foreach (const QSslError &error, errors) {
+ for (const QSslError &error : std::as_const(errors)) {
if (error.error() == QSslError::CertificateBlacklisted) {
foundBlack = true;
break;
@@ -1127,11 +1110,11 @@ void tst_QSslCertificate::verify()
toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-intermediate-is-ca-cert.pem", QSsl::Pem, QSslCertificate::PatternSyntax::FixedString).first();
toVerify << QSslCertificate::fromPath(testDataDir + "verify-certs/test-intermediate-ca-cert.pem", QSsl::Pem, QSslCertificate::PatternSyntax::FixedString).first();
errors = QSslCertificate::verify(toVerify);
- VERIFY_VERBOSE(errors.count() == 0);
+ VERIFY_VERBOSE(errors.size() == 0);
// Recheck the above with hostname validation
errors = QSslCertificate::verify(toVerify, QLatin1String("example.com"));
- VERIFY_VERBOSE(errors.count() == 0);
+ VERIFY_VERBOSE(errors.size() == 0);
// Recheck the above with a bad hostname
errors = QSslCertificate::verify(toVerify, QLatin1String("fail.example.com"));
@@ -1145,9 +1128,8 @@ QString tst_QSslCertificate::toString(const QList<QSslError>& errors)
{
QStringList errorStrings;
- foreach (const QSslError& error, errors) {
+ for (const QSslError &error : errors)
errorStrings.append(QLatin1Char('"') + error.errorString() + QLatin1Char('"'));
- }
return QLatin1String("[ ") + errorStrings.join(QLatin1String(", ")) + QLatin1String(" ]");
}
@@ -1156,11 +1138,11 @@ void tst_QSslCertificate::extensions()
{
QList<QSslCertificate> certList =
QSslCertificate::fromPath(testDataDir + "more-certificates/natwest-banking.pem", QSsl::Pem, QSslCertificate::PatternSyntax::FixedString);
- QVERIFY(certList.count() > 0);
+ QVERIFY(certList.size() > 0);
QSslCertificate cert = certList[0];
QList<QSslCertificateExtension> extensions = cert.extensions();
- QCOMPARE(extensions.count(), 9);
+ QCOMPARE(extensions.size(), 9);
int unknown_idx = -1;
int authority_info_idx = -1;
@@ -1168,7 +1150,7 @@ void tst_QSslCertificate::extensions()
int subject_key_idx = -1;
int auth_key_idx = -1;
- for (int i=0; i < extensions.length(); ++i) {
+ for (int i=0; i < extensions.size(); ++i) {
QSslCertificateExtension ext = extensions[i];
//qDebug() << i << ":" << ext.name() << ext.oid();
@@ -1254,16 +1236,16 @@ void tst_QSslCertificate::extensionsCritical()
{
QList<QSslCertificate> certList =
QSslCertificate::fromPath(testDataDir + "verify-certs/test-addons-mozilla-org-cert.pem", QSsl::Pem, QSslCertificate::PatternSyntax::FixedString);
- QVERIFY(certList.count() > 0);
+ QVERIFY(certList.size() > 0);
QSslCertificate cert = certList[0];
QList<QSslCertificateExtension> extensions = cert.extensions();
- QCOMPARE(extensions.count(), 9);
+ QCOMPARE(extensions.size(), 9);
int basic_constraints_idx = -1;
int key_usage_idx = -1;
- for (int i=0; i < extensions.length(); ++i) {
+ for (int i=0; i < extensions.size(); ++i) {
QSslCertificateExtension ext = extensions[i];
if (ext.name() == QStringLiteral("basicConstraints"))
@@ -1401,6 +1383,9 @@ void tst_QSslCertificate::pkcs12()
return;
}
+ if (currentBackend() == TLSBackend::OpenSSL && QSslSocket::sslLibraryVersionNumber() >= 0x30000000L)
+ QSKIP("leaf.p12 is using RC2, which is disabled by default in OpenSSL v >= 3");
+
QFile f(testDataDir + QLatin1String("pkcs12/leaf.p12"));
bool ok = f.open(QIODevice::ReadOnly);
QVERIFY(ok);
@@ -1409,8 +1394,8 @@ void tst_QSslCertificate::pkcs12()
QSslCertificate cert;
QList<QSslCertificate> caCerts;
- if (isNonOpenSslTls)
- QEXPECT_FAIL("", "pkcs12 imports are only supported when openssl is used", Abort); // TODO?
+ if (currentBackend() != TLSBackend::OpenSSL)
+ QEXPECT_FAIL("", "pkcs12 imports are not available with the current TLS backend", Abort); // TODO?
ok = QSslCertificate::importPkcs12(&f, &key, &cert, &caCerts);
QVERIFY(ok);
@@ -1442,7 +1427,8 @@ void tst_QSslCertificate::pkcs12()
QFile nocert(testDataDir + QLatin1String("pkcs12/leaf-nokey.p12"));
ok = nocert.open(QIODevice::ReadOnly);
QVERIFY(ok);
- QTest::ignoreMessage(QtWarningMsg, "Unable to convert private key");
+ if (currentBackend() == TLSBackend::OpenSSL)
+ QTest::ignoreMessage(QtWarningMsg, "Unable to convert private key");
ok = QSslCertificate::importPkcs12(&nocert, &key, &cert, &caCerts);
QVERIFY(!ok);
nocert.close();
diff --git a/tests/auto/network/ssl/qsslcipher/CMakeLists.txt b/tests/auto/network/ssl/qsslcipher/CMakeLists.txt
index b8e8ba47d6..8538f56acd 100644
--- a/tests/auto/network/ssl/qsslcipher/CMakeLists.txt
+++ b/tests/auto/network/ssl/qsslcipher/CMakeLists.txt
@@ -1,21 +1,20 @@
-# Generated from qsslcipher.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsslcipher Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsslcipher LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsslcipher
SOURCES
tst_qsslcipher.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 3:.:.:qsslcipher.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# DESTDIR = "debug"
-
-#### Keys ignored in scope 4:.:.:qsslcipher.pro:else:
-# DESTDIR = "release"
diff --git a/tests/auto/network/ssl/qsslcipher/tst_qsslcipher.cpp b/tests/auto/network/ssl/qsslcipher/tst_qsslcipher.cpp
index 3d415bcd19..6810149c11 100644
--- a/tests/auto/network/ssl/qsslcipher/tst_qsslcipher.cpp
+++ b/tests/auto/network/ssl/qsslcipher/tst_qsslcipher.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 <QTest>
diff --git a/tests/auto/network/ssl/qssldiffiehellmanparameters/CMakeLists.txt b/tests/auto/network/ssl/qssldiffiehellmanparameters/CMakeLists.txt
index 0ef55a7b55..3ac34b2f6c 100644
--- a/tests/auto/network/ssl/qssldiffiehellmanparameters/CMakeLists.txt
+++ b/tests/auto/network/ssl/qssldiffiehellmanparameters/CMakeLists.txt
@@ -1,12 +1,20 @@
-# Generated from qssldiffiehellmanparameters.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qssldiffiehellmanparameters Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qssldiffiehellmanparameters LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qssldiffiehellmanparameters
SOURCES
tst_qssldiffiehellmanparameters.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
diff --git a/tests/auto/network/ssl/qssldiffiehellmanparameters/tst_qssldiffiehellmanparameters.cpp b/tests/auto/network/ssl/qssldiffiehellmanparameters/tst_qssldiffiehellmanparameters.cpp
index 3bf3c75dce..d8c6d9158a 100644
--- a/tests/auto/network/ssl/qssldiffiehellmanparameters/tst_qssldiffiehellmanparameters.cpp
+++ b/tests/auto/network/ssl/qssldiffiehellmanparameters/tst_qssldiffiehellmanparameters.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 Mikkel Krautz <mikkel@krautz.dk>
-** 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) 2015 Mikkel Krautz <mikkel@krautz.dk>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/network/ssl/qsslellipticcurve/CMakeLists.txt b/tests/auto/network/ssl/qsslellipticcurve/CMakeLists.txt
index bf4d255d19..dd031a991b 100644
--- a/tests/auto/network/ssl/qsslellipticcurve/CMakeLists.txt
+++ b/tests/auto/network/ssl/qsslellipticcurve/CMakeLists.txt
@@ -1,12 +1,20 @@
-# Generated from qsslellipticcurve.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsslellipticcurve Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsslellipticcurve LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsslellipticcurve
SOURCES
tst_qsslellipticcurve.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
diff --git a/tests/auto/network/ssl/qsslellipticcurve/tst_qsslellipticcurve.cpp b/tests/auto/network/ssl/qsslellipticcurve/tst_qsslellipticcurve.cpp
index 35b7082fad..96ef7e9828 100644
--- a/tests/auto/network/ssl/qsslellipticcurve/tst_qsslellipticcurve.cpp
+++ b/tests/auto/network/ssl/qsslellipticcurve/tst_qsslellipticcurve.cpp
@@ -1,31 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Governikus GmbH & Co. KG.
-** 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) 2014 Governikus GmbH & Co. KG.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -91,7 +65,8 @@ void tst_QSslEllipticCurve::fromShortName_data()
QTest::newRow("QString()") << QString() << QSslEllipticCurve() << false;
QTest::newRow("\"\"") << QString("") << QSslEllipticCurve() << false;
QTest::newRow("does-not-exist") << QStringLiteral("does-not-exist") << QSslEllipticCurve() << false;
- Q_FOREACH (QSslEllipticCurve ec, QSslConfiguration::supportedEllipticCurves()) {
+ const auto supported = QSslConfiguration::supportedEllipticCurves();
+ for (QSslEllipticCurve ec : supported) {
const QString sN = ec.shortName();
QTest::newRow(qPrintable("supported EC \"" + sN + '"')) << sN << ec << true;
// At least in the OpenSSL impl, the short name is case-sensitive. That feels odd.
@@ -124,7 +99,8 @@ void tst_QSslEllipticCurve::fromLongName_data()
QTest::newRow("QString()") << QString() << QSslEllipticCurve() << false;
QTest::newRow("\"\"") << QString("") << QSslEllipticCurve() << false;
QTest::newRow("does-not-exist") << QStringLiteral("does-not-exist") << QSslEllipticCurve() << false;
- Q_FOREACH (QSslEllipticCurve ec, QSslConfiguration::supportedEllipticCurves()) {
+ const auto supported = QSslConfiguration::supportedEllipticCurves();
+ for (QSslEllipticCurve ec : supported) {
const QString lN = ec.longName();
QTest::newRow(qPrintable("supported EC \"" + lN + '"')) << lN << ec << true;
}
diff --git a/tests/auto/network/ssl/qsslerror/CMakeLists.txt b/tests/auto/network/ssl/qsslerror/CMakeLists.txt
index e9dd0953ba..006bec3ef2 100644
--- a/tests/auto/network/ssl/qsslerror/CMakeLists.txt
+++ b/tests/auto/network/ssl/qsslerror/CMakeLists.txt
@@ -1,21 +1,20 @@
-# Generated from qsslerror.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsslerror Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsslerror LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsslerror
SOURCES
tst_qsslerror.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 3:.:.:qsslerror.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# DESTDIR = "debug"
-
-#### Keys ignored in scope 4:.:.:qsslerror.pro:else:
-# DESTDIR = "release"
diff --git a/tests/auto/network/ssl/qsslerror/tst_qsslerror.cpp b/tests/auto/network/ssl/qsslerror/tst_qsslerror.cpp
index cb82edd556..981fe3a0d5 100644
--- a/tests/auto/network/ssl/qsslerror/tst_qsslerror.cpp
+++ b/tests/auto/network/ssl/qsslerror/tst_qsslerror.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 <QtNetwork/qtnetworkglobal.h>
diff --git a/tests/auto/network/ssl/qsslkey/BLACKLIST b/tests/auto/network/ssl/qsslkey/BLACKLIST
deleted file mode 100644
index 5705a1982d..0000000000
--- a/tests/auto/network/ssl/qsslkey/BLACKLIST
+++ /dev/null
@@ -1,8 +0,0 @@
-[constructor]
-rhel
-[length]
-rhel
-[toEncryptedPemOrDer]
-rhel
-[toPemOrDer]
-rhel
diff --git a/tests/auto/network/ssl/qsslkey/CMakeLists.txt b/tests/auto/network/ssl/qsslkey/CMakeLists.txt
index 8bf450f8fd..aae017562a 100644
--- a/tests/auto/network/ssl/qsslkey/CMakeLists.txt
+++ b/tests/auto/network/ssl/qsslkey/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qsslkey.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsslkey Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsslkey LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -17,16 +24,22 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qsslkey
SOURCES
tst_qsslkey.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
TESTDATA ${test_data}
+ BUNDLE_ANDROID_OPENSSL_LIBS
+)
+
+qt_internal_extend_target(tst_qsslkey CONDITION QT_FEATURE_developer_build AND QT_FEATURE_openssl_linked
+ LIBRARIES
+ WrapOpenSSL::WrapOpenSSL
)
## Scopes:
#####################################################################
-qt_internal_extend_target(tst_qsslkey CONDITION QT_FEATURE_private_tests
- PUBLIC_LIBRARIES
+qt_internal_extend_target(tst_qsslkey CONDITION QT_FEATURE_developer_build
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
)
diff --git a/tests/auto/network/ssl/qsslkey/keys/genkeys.sh b/tests/auto/network/ssl/qsslkey/keys/genkeys.sh
index 0106953bff..afa4b7fe84 100755
--- a/tests/auto/network/ssl/qsslkey/keys/genkeys.sh
+++ b/tests/auto/network/ssl/qsslkey/keys/genkeys.sh
@@ -1,31 +1,6 @@
#!/bin/sh
-#############################################################################
-##
-## Copyright (C) 2016 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is the build configuration utility of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:GPL-EXCEPT$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 as published by the Free Software
-## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-## included in the packaging of this file. Please review the following
-## information to ensure the GNU General Public License requirements will
-## be met: https://www.gnu.org/licenses/gpl-3.0.html.
-##
-## $QT_END_LICENSE$
-##
-#############################################################################
+# Copyright (C) 2016 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
# This script generates cryptographic keys of different types.
diff --git a/tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp b/tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp
index e57409c665..79bae3c270 100644
--- a/tests/auto/network/ssl/qsslkey/tst_qsslkey.cpp
+++ b/tests/auto/network/ssl/qsslkey/tst_qsslkey.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 <QTest>
#include <qsslkey.h>
@@ -40,6 +15,8 @@
#include <QtCore/qdebug.h>
#include <QtCore/qlist.h>
+using namespace Qt::StringLiterals;
+
#ifdef QT_BUILD_INTERNAL
#if QT_CONFIG(ssl)
#include "private/qsslkey_p.h"
@@ -115,6 +92,7 @@ private:
QString testDataDir;
bool fileContainsUnsupportedEllipticCurve(const QString &fileName) const;
+ bool algorithmsSupported(const QString &fileName) const;
QVector<QString> unsupportedCurves;
bool isOpenSsl = false;
@@ -178,6 +156,37 @@ bool tst_QSslKey::fileContainsUnsupportedEllipticCurve(const QString &fileName)
return false;
}
+bool tst_QSslKey::algorithmsSupported(const QString &fileName) const
+{
+#if QT_CONFIG(ssl)
+ if (isSchannel && fileName.contains("RC2-64")) // Schannel treats RC2 as 128 bit
+ return false;
+
+ if (isSchannel || isSecureTransport) {
+ // No AES support in the generic back-end, PKCS#12 algorithms not supported either.
+ return !(fileName.contains(QRegularExpression("-aes\\d\\d\\d-")) || fileName.contains("pkcs8-pkcs12"));
+ }
+
+ if (!isOpenSsl || QSslSocket::sslLibraryVersionNumber() >> 28 < 3)
+ return true;
+
+ // OpenSSL v3 first introduced the notion of 'providers'. Many algorithms
+ // were moved into the 'legacy' provider. While they are still supported in theory,
+ // the 'legacy' provider is NOT loaded by default and we are not loading it either.
+ // Thus, some of the keys we are using in tst_QSslKey would fail the test. We
+ // have to filter them out.
+ const auto name = fileName.toLower();
+ if (name.contains("-des."))
+ return false;
+
+ return !name.contains("-rc2-") && !name.contains("-rc4-");
+#else
+ Q_UNUSED(fileName);
+ return false;
+#endif // QT_CONFIG(ssl)
+}
+
+
void tst_QSslKey::initTestCase()
{
testDataDir = QFileInfo(QFINDTESTDATA("rsa-without-passphrase.pem")).absolutePath();
@@ -242,21 +251,12 @@ void tst_QSslKey::createPlainTestRows(bool pemOnly)
QTest::addColumn<QSsl::KeyType>("type");
QTest::addColumn<int>("length");
QTest::addColumn<QSsl::EncodingFormat>("format");
- foreach (KeyInfo keyInfo, keyInfoList) {
+ for (const KeyInfo &keyInfo : std::as_const(keyInfoList)) {
if (pemOnly && keyInfo.format != QSsl::EncodingFormat::Pem)
continue;
- if (isSchannel) {
- if (keyInfo.fileInfo.fileName().contains("RC2-64"))
- continue; // Schannel treats RC2 as 128 bit
- }
-
- if (isSchannel || isSecureTransport) {
- if (keyInfo.fileInfo.fileName().contains(QRegularExpression("-aes\\d\\d\\d-")))
- continue; // No AES support in the generic back-end
- if (keyInfo.fileInfo.fileName().contains("pkcs8-pkcs12"))
- continue; // The generic back-end doesn't support PKCS#12 algorithms
- }
+ if (!algorithmsSupported(keyInfo.fileInfo.fileName()))
+ continue;
QTest::newRow(keyInfo.fileInfo.fileName().toLatin1())
<< keyInfo.fileInfo.absoluteFilePath() << keyInfo.algorithm << keyInfo.type
@@ -317,7 +317,7 @@ void tst_QSslKey::constructorHandle()
passphrase = "1234";
BIO* bio = q_BIO_new(q_BIO_s_mem());
- q_BIO_write(bio, pem.constData(), pem.length());
+ q_BIO_write(bio, pem.constData(), pem.size());
EVP_PKEY *origin = func(bio, nullptr, nullptr, static_cast<void *>(passphrase.data()));
Q_ASSERT(origin);
q_EVP_PKEY_up_ref(origin);
@@ -469,13 +469,18 @@ void tst_QSslKey::toEncryptedPemOrDer_data()
QTest::addColumn<QSsl::EncodingFormat>("format");
QTest::addColumn<QString>("password");
- QStringList passwords;
- passwords << " " << "foobar" << "foo bar"
- << "aAzZ`1234567890-=~!@#$%^&*()_+[]{}\\|;:'\",.<>/?"; // ### add more (?)
- foreach (KeyInfo keyInfo, keyInfoList) {
+ const QString passwords[] = {
+ u" "_s,
+ u"foobar"_s,
+ u"foo bar"_s,
+ u"aAzZ`1234567890-=~!@#$%^&*()_+[]{}\\|;:'\",.<>/?"_s,
+ // ### add more (?)
+ };
+
+ for (const KeyInfo &keyInfo : std::as_const(keyInfoList)) {
if (keyInfo.fileInfo.fileName().contains("pkcs8"))
continue; // pkcs8 keys are encrypted in a different way than the other keys
- foreach (QString password, passwords) {
+ for (const QString &password : passwords) {
const QByteArray testName = keyInfo.fileInfo.fileName().toLatin1()
+ '-' + (keyInfo.algorithm == QSsl::Rsa ? "RSA" :
(keyInfo.algorithm == QSsl::Dsa ? "DSA" : "EC"))
@@ -550,9 +555,15 @@ void tst_QSslKey::passphraseChecks_data()
const QByteArray pass("123");
const QByteArray aesPass("1234");
- QTest::newRow("DES") << QString(testDataDir + "rsa-with-passphrase-des.pem") << pass;
+ if (!isOpenSsl || QSslSocket::sslLibraryVersionNumber() >> 28 < 3) {
+ // DES and RC2 are not provided by default in OpenSSL v3.
+ // This part is for either non-OpenSSL build, or OpenSSL v < 3.x.
+ QTest::newRow("DES") << QString(testDataDir + "rsa-with-passphrase-des.pem") << pass;
+ QTest::newRow("RC2") << QString(testDataDir + "rsa-with-passphrase-rc2.pem") << pass;
+ }
+
QTest::newRow("3DES") << QString(testDataDir + "rsa-with-passphrase-3des.pem") << pass;
- QTest::newRow("RC2") << QString(testDataDir + "rsa-with-passphrase-rc2.pem") << pass;
+
#if defined(QT_NO_OPENSSL) || !defined(OPENSSL_NO_AES)
QTest::newRow("AES128") << QString(testDataDir + "rsa-with-passphrase-aes128.pem") << aesPass;
QTest::newRow("AES192") << QString(testDataDir + "rsa-with-passphrase-aes192.pem") << aesPass;
@@ -569,7 +580,7 @@ void tst_QSslKey::passphraseChecks()
QVERIFY(keyFile.exists());
{
if (!keyFile.isOpen())
- keyFile.open(QIODevice::ReadOnly);
+ QVERIFY(keyFile.open(QIODevice::ReadOnly));
else
keyFile.reset();
QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey);
@@ -577,7 +588,7 @@ void tst_QSslKey::passphraseChecks()
}
{
if (!keyFile.isOpen())
- keyFile.open(QIODevice::ReadOnly);
+ QVERIFY(keyFile.open(QIODevice::ReadOnly));
else
keyFile.reset();
QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey, "");
@@ -585,7 +596,7 @@ void tst_QSslKey::passphraseChecks()
}
{
if (!keyFile.isOpen())
- keyFile.open(QIODevice::ReadOnly);
+ QVERIFY(keyFile.open(QIODevice::ReadOnly));
else
keyFile.reset();
QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey, "WRONG!");
@@ -593,7 +604,7 @@ void tst_QSslKey::passphraseChecks()
}
{
if (!keyFile.isOpen())
- keyFile.open(QIODevice::ReadOnly);
+ QVERIFY(keyFile.open(QIODevice::ReadOnly));
else
keyFile.reset();
QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey, passphrase);
@@ -611,7 +622,7 @@ void tst_QSslKey::noPassphraseChecks()
QFile keyFile(fileName);
{
if (!keyFile.isOpen())
- keyFile.open(QIODevice::ReadOnly);
+ QVERIFY(keyFile.open(QIODevice::ReadOnly));
else
keyFile.reset();
QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey);
@@ -619,7 +630,7 @@ void tst_QSslKey::noPassphraseChecks()
}
{
if (!keyFile.isOpen())
- keyFile.open(QIODevice::ReadOnly);
+ QVERIFY(keyFile.open(QIODevice::ReadOnly));
else
keyFile.reset();
QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey, "");
@@ -627,7 +638,7 @@ void tst_QSslKey::noPassphraseChecks()
}
{
if (!keyFile.isOpen())
- keyFile.open(QIODevice::ReadOnly);
+ QVERIFY(keyFile.open(QIODevice::ReadOnly));
else
keyFile.reset();
QSslKey key(&keyFile,QSsl::Rsa,QSsl::Pem, QSsl::PrivateKey, "xxx");
@@ -649,6 +660,9 @@ void tst_QSslKey::encrypt_data()
QTest::addColumn<QByteArray>("iv");
QByteArray iv("abcdefgh");
+#if OPENSSL_VERSION_MAJOR < 3
+ // Either non-OpenSSL build, or OpenSSL v < 3
+ // (with DES and other legacy algorithms available by default)
QTest::newRow("DES-CBC, length 0")
<< Cipher::DesCbc << QByteArray("01234567")
<< QByteArray()
@@ -738,6 +752,7 @@ void tst_QSslKey::encrypt_data()
<< QByteArray(8, 'a')
<< QByteArray::fromHex("5AEC1A5B295660B02613454232F7DECE")
<< iv;
+#endif // OPENSSL_VERSION_MAJOR
#if defined(QT_NO_OPENSSL) || !defined(OPENSSL_NO_AES)
// AES needs a longer IV
diff --git a/tests/auto/network/ssl/qsslserver/CMakeLists.txt b/tests/auto/network/ssl/qsslserver/CMakeLists.txt
new file mode 100644
index 0000000000..5957b2720e
--- /dev/null
+++ b/tests/auto/network/ssl/qsslserver/CMakeLists.txt
@@ -0,0 +1,29 @@
+# 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_qsslserver LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+if(NOT QT_FEATURE_private_tests)
+ return()
+endif()
+
+#####################################################################
+## tst_qsslserver Test:
+#####################################################################
+
+# Collect test data
+list(APPEND test_data "certs")
+
+qt_internal_add_test(tst_qsslserver
+ SOURCES
+ tst_qsslserver.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::NetworkPrivate
+ TESTDATA ${test_data}
+ BUNDLE_ANDROID_OPENSSL_LIBS
+)
diff --git a/tests/auto/network/ssl/qsslserver/certs/selfsigned-client.crt b/tests/auto/network/ssl/qsslserver/certs/selfsigned-client.crt
new file mode 100644
index 0000000000..88da2db920
--- /dev/null
+++ b/tests/auto/network/ssl/qsslserver/certs/selfsigned-client.crt
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC6TCCAdECCC/r9KvmbWTKMA0GCSqGSIb3DQEBCwUAMDUxFDASBgNVBAMMC0F1
+c3dlaXNBcHAyMR0wGwYDVQQFExQxODIzNTE0MTY0NzI5NDg5NDM3MTAiGA8xOTcw
+MDEwMTAwMDAwMFoYDzk5OTkxMjMxMjM1OTU5WjA1MRQwEgYDVQQDDAtBdXN3ZWlz
+QXBwMjEdMBsGA1UEBRMUMTgyMzUxNDE2NDcyOTQ4OTQzNzEwggEiMA0GCSqGSIb3
+DQEBAQUAA4IBDwAwggEKAoIBAQCahBpcZyr+PJBCpolzQeFVvDKABwlpdRKGZ8qq
+jD4sq2L7VlBJslgJGv5vsB5oJbnX1FFEu4Uw2kYb/LhnFCEXEFtGKRpWOEZOOqWb
+4l4q2MCa82ZCoIDt8yoAt0sSShbtR6pjW+l0lwAOEpfGvMaMVo5JUyspRxhl1dSu
+sS2Wf65zliqF5VSM2r4xMfJ6LVytxDZsGfTe/HFT2OYYrF+UQZg0mNL39rYWOK4R
+xoOz8eLl3K5hKuHNfn5zPt5QtMhaIvebijBg23xJpl+BeoS37WzaK1f+NyWZKPFb
+rttvSnFxpkyRHqJJ5piNGH6pkQ1+zhd7uh7eOIwxktjYBOFzAgMBAAEwDQYJKoZI
+hvcNAQELBQADggEBADw3MYPft+X78OK/2HAltzsKjfxv/D5qVizm9hcyG1GYe5pS
+qgFn0trCyJopYdbRr+hP7CuHwMmv62CZiHSog3CBPoUh19JENUDGbHXxTEFleB0i
+Fd8I2+WvRjbQ+ehaeTJPx88v5kkJnB2tZUNZuhEws8emCwr1G0TQv1tRYCR1Lp9i
+8/I3FSFpL1zyk47WfM/THa279MPw9WtrFGA6oi36gH9mYxek7n/zQTVi54xDx9GT
+KigBYqavjFdNXryjLTCCtJpMTDePgP66NAUnxn0D/amI2vSbIN++PSTsBm+n4Ti5
+QW/ShFQDNb4bDiwjtTKCeKwvAp2/6GSHVkYy28M=
+-----END CERTIFICATE-----
diff --git a/tests/auto/network/ssl/qsslserver/certs/selfsigned-client.key b/tests/auto/network/ssl/qsslserver/certs/selfsigned-client.key
new file mode 100644
index 0000000000..9e59342963
--- /dev/null
+++ b/tests/auto/network/ssl/qsslserver/certs/selfsigned-client.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEAmoQaXGcq/jyQQqaJc0HhVbwygAcJaXUShmfKqow+LKti+1ZQ
+SbJYCRr+b7AeaCW519RRRLuFMNpGG/y4ZxQhFxBbRikaVjhGTjqlm+JeKtjAmvNm
+QqCA7fMqALdLEkoW7UeqY1vpdJcADhKXxrzGjFaOSVMrKUcYZdXUrrEtln+uc5Yq
+heVUjNq+MTHyei1crcQ2bBn03vxxU9jmGKxflEGYNJjS9/a2FjiuEcaDs/Hi5dyu
+YSrhzX5+cz7eULTIWiL3m4owYNt8SaZfgXqEt+1s2itX/jclmSjxW67bb0pxcaZM
+kR6iSeaYjRh+qZENfs4Xe7oe3jiMMZLY2AThcwIDAQABAoIBAFjgvc0C5t8AdTZx
+VsS+U2Aedang4lAPsE0xbIj3TFgjaTcLKfmKJUtvhIU39/WOJbz4+pofhvhXxVYZ
+4vQfxvzeQrIzuFt52S7sWxA0gFgC/57hfKO8cQzt/u4UgJEPnupze5XVa47NwJFX
+rof5U/erXgLdXQlMRMNm4QRvE7rp58E2MkSYNur0Xgy9L7cRcUQJ8iuMaxBpOzhS
+fbNFi5zT7RCGcQSIDcb1JFlgs5tMUs6jzLoDSVD2+vvsN4i4LAAPkJSGTGed5vY1
+xn4G8KPR4HHrnBYEb0SGu4ZTznOnQ+JSKhQrbnvEzXM4RTfjqn0YvF8x70+pWSMi
+Fb4mlBECgYEAzW82O79HAlMm8LD7J4byPfVc/1M5/JOnE9H+RR5Vt4jZQGyjCmJu
+cj4UeZyVim0xg30sSYrJ2Urd27CtHp+sMgHkvJt3/ZgcfMZJbMKNGq/OUtV8s/cA
+nkU++/LgeW8r7wpaDjT7bfnOdcf16mYoXrmk0rTJvRqGXCBvCxtt5bsCgYEAwIxu
+vZjPV4Vu/VX6sH2d31D9EFZuZKjGhqukFVtRqLbeosqT9mA+LhQ/wP5qoR2gLQbe
+EwxJLJwGFjUhyhbHNlo6oHv3fWkzmHIMPwDRRI3Ktwi/50SwNSnyERUQcLaiwqKx
+BqaxPYNnspUt0nKE0LFZsSlrfEyxajqAlUEgm6kCgYAV+uQumFScpxDvh8AXhpS8
+lFgS6XC22YVy1XEDLC+3p2i3P+hh4A45IvNF378QRIabrvTiGXtnSF9cdhbPw/3E
+i/dRRsEb3P6PSxfoDxjR1iWZL0Zcav0h8f6/LkleNMralJz2EC0moye36mEhZzTC
+jdJYyQccuI3PpZi7839aqQKBgGezOnEiO4kHdB88jyc+gCglliWWZx4PR9x/1H8s
+D26uDnneYJHwg4yNm0h1vTfInNujNzdLBp3f6edL9kbAvcmoDqsgGMqSPhd8VNwZ
+tJsXQnYRYElN1RjM3nIUxiXuNvpcZLsQS6S1gMPNVEBjLOS4n3WquRjYtTRhDZ9U
+1BsBAoGAUFrIatOLFhcgaqENHyUbMx5uSx0lIfF6Xd5KIAgi+btdmugHe+NK8Cd2
+Rc2bQLQ9K1SvKFX6nFuEsGxnXkKuyhL/j0Kgm8nZin4uAcrtFnNdFumvCL6YgYSc
+IvvM+uVfGEdbqm4pTuiLBfzOXIIy3kVlLGo402QG1pBzOtmsRMs=
+-----END RSA PRIVATE KEY-----
diff --git a/tests/auto/network/ssl/qsslserver/certs/selfsigned-server.crt b/tests/auto/network/ssl/qsslserver/certs/selfsigned-server.crt
new file mode 100644
index 0000000000..c97d27721c
--- /dev/null
+++ b/tests/auto/network/ssl/qsslserver/certs/selfsigned-server.crt
@@ -0,0 +1,18 @@
+-----BEGIN CERTIFICATE-----
+MIIC5TCCAc0CCAO22gNi0v20MA0GCSqGSIb3DQEBCwUAMDMxFDASBgNVBAMMC0F1
+c3dlaXNBcHAyMRswGQYDVQQFExIyNTIxMTE1NjY3NjM2MjExODgwIhgPMTk3MDAx
+MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowMzEUMBIGA1UEAwwLQXVzd2Vpc0Fw
+cDIxGzAZBgNVBAUTEjI1MjExMTU2Njc2MzYyMTE4ODCCASIwDQYJKoZIhvcNAQEB
+BQADggEPADCCAQoCggEBAL+Fl6v5dcU7qk7vbINclWOhvCe/uklKnXV2QU382x7g
+qpbYxJiJvz24C6tgDMmE0pwEz6PiCbh1dkc8+9cdp37eBcFLCOXYQb27gqVVyVtu
+xO0LLVXPCv48bGSwljOz0FRC3FolzWxzrZogM/i2b/lmehHJ3D4ejmINmIgtFJ9P
+JNNCH4Oh5YEbaFFlNf2m7lCoSuQkOlLZcGeLoipK2XvhZJff6c1uxValh/Mx5dNB
+5Mgd5cOZSSEhwf7mcE8C3SHVfjeNfZGIqlkwdY8lvAOjirAtj6Yl88sJOUID/Q/N
+hU9D8IZy6+Bk2cJQwI/Gzr590VYvlSTI+6lXr//oBBECAwEAATANBgkqhkiG9w0B
+AQsFAAOCAQEArSMO88AYT+9tPCl5lXtSRa0OycqKNlW58GujxIDuR8WX1eFmGSHQ
+uijo5KPYUnqydZzAewGC8NvC9WcLwFltNZ9igXikUHiAHc1JLfW7+7SgKpwOUb02
+rJkUkpPA/SmwkLSKYiR1prt5wgSulU1HPBESep05DfR8MCU5+KHkLyXDqtrbudJ4
+lQd9dSKJFn+cSjUC5JNxCPHoIISe7hfGFMLkd0/tVfSIXLVOAZG4K6zExUdjyPi8
+qEuPq6QCRyIJbYQc5HfnARgwK6GXHqkyLWlqK946Yz8VOba7Nan5uQ6xCjUMHw8Z
+z/673o/3DCaQ9N6dWahNQ09a9ZH8U1X4iA==
+-----END CERTIFICATE-----
diff --git a/tests/auto/network/ssl/qsslserver/certs/selfsigned-server.key b/tests/auto/network/ssl/qsslserver/certs/selfsigned-server.key
new file mode 100644
index 0000000000..b7be118cb9
--- /dev/null
+++ b/tests/auto/network/ssl/qsslserver/certs/selfsigned-server.key
@@ -0,0 +1,27 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIIEpAIBAAKCAQEAv4WXq/l1xTuqTu9sg1yVY6G8J7+6SUqddXZBTfzbHuCqltjE
+mIm/PbgLq2AMyYTSnATPo+IJuHV2Rzz71x2nft4FwUsI5dhBvbuCpVXJW27E7Qst
+Vc8K/jxsZLCWM7PQVELcWiXNbHOtmiAz+LZv+WZ6EcncPh6OYg2YiC0Un08k00If
+g6HlgRtoUWU1/abuUKhK5CQ6UtlwZ4uiKkrZe+Fkl9/pzW7FVqWH8zHl00HkyB3l
+w5lJISHB/uZwTwLdIdV+N419kYiqWTB1jyW8A6OKsC2PpiXzywk5QgP9D82FT0Pw
+hnLr4GTZwlDAj8bOvn3RVi+VJMj7qVev/+gEEQIDAQABAoIBADdoXsjSEtBMwqiz
+e6FFV7LLR7P4M9ygSY2B+MKnNH1qYe/iJn4626jvZfDeiNSEKKoaejffXRCQaveR
+HQrO+XYqpV+WZayZM+vAI7vRZb+d/DrX0PXSQEvtDy7SJ6Itk0fNUBKEfTmy/bZp
+Op/pp9tvWkFrNNyD2o1jgY1j/WNY8g605m0oURJ9WQsMUu/Kzu+NMoaKTIoQGb3d
+dP71F4KaTXHYxj3B0c+y0NedKbrvnBsP6XbEpgJBaXjtD9z+z/aMF6dmuvpkx7uY
+qzwPMRw05QPyJ9x+1V/v4TytY5f596NgW2niVj77BunkZasTYIEX7bjByrlTeLdx
+xvPRpAECgYEA5KkM/ORbhN1oaw9+tQxA48oG2DFqChBr+vc4NU4j5SNFn9ks5nHI
+xdJNZ9k+bjVUkBP4m88Wd07SW9zXCL8Q5lczb+p5SWl/Pp7ltqaxpH17uzamsaIv
+KIBkeJTOU5TuWdXiV5FY+ofK9ojyEaqX1tmylWnoVe4bIMRWXE5bMSkCgYEA1mvJ
+snkNzPFG0RK7ikjsNxrhzE07+7RSnoM9WeW8y2lvQ9MjdR6eOgqnnlcdk2A7OVbf
+culNgLc0qx/PxZ4BV+8yLLb1EBBGvuVG+x4a6H2mLHdFCJekByZHaQNs9ogVLvdv
+3z8D59KknBUjtj9dCw90Z41yMM4kpWMG9yfSEKkCgYEAvuCvytwF2d/JrrV8nD3i
+XUTkecymLEiRGysMbNMR+9F56XotlSEe7KQloa8kAnPaZ3uEaOxyYJ4X1D+B8fct
+cFsSwTYGkVXTtr6GG/cDC8EEbL+uX1J382Nae54croEAh1WYYGkg0eJRd4PSLxUt
+M1j/TuLd4/2j/7JmNR/j2CECgYBdB3MBHghgzKXe+/OmMbFazyz8SN4nfLsDzwkF
+QenBj0MY+DhADkK0B/9lcYKBeJT5cbmMz7AykkolnK22nbETh9ILGG4GxCkNlchQ
+F2WxTSKV1EF9Ut11xKPi6fuSksQuFmjRQTPelsOYfIt7/M3PiKsGapYKmsXHg8l3
+3i0D0QKBgQCi+HNOaYqduxwjrj8h4eUbiwjID8DCNJ+jXsuGVa6jcsfFpdpivx2c
+ytYSXuTXLRq0I3c1ChUOGQQeztJ5GtCPnXjLHHMf3f6yr7Pk56AUmUsaIlR1Q2Zo
+gqpFD8zYD5UFc2KM7Y38YTh4j82uDzDvHBBFpli7dEmSn2WpcmzFag==
+-----END RSA PRIVATE KEY-----
diff --git a/tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp b/tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp
new file mode 100644
index 0000000000..26d3a50a5b
--- /dev/null
+++ b/tests/auto/network/ssl/qsslserver/tst_qsslserver.cpp
@@ -0,0 +1,531 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QDebug>
+#include <QSignalSpy>
+#include <QTimer>
+
+#include <QtNetwork/QSslServer>
+#include <QtNetwork/QSslKey>
+#include "private/qtlsbackend_p.h"
+
+class tst_QSslServer : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase();
+ void testOneSuccessfulConnection();
+ void testSelfSignedCertificateRejectedByServer();
+ void testSelfSignedCertificateRejectedByClient();
+#if QT_CONFIG(openssl)
+ void testHandshakeInterruptedOnError();
+ void testPreSharedKeyAuthenticationRequired();
+#endif
+ void plaintextClient();
+ void quietClient();
+ void twoGoodAndManyBadClients();
+
+private:
+ QString testDataDir;
+ bool isTestingOpenSsl = false;
+ QSslConfiguration selfSignedClientQSslConfiguration();
+ QSslConfiguration selfSignedServerQSslConfiguration();
+ QSslConfiguration createQSslConfiguration(QString keyFileName, QString certificateFileName);
+};
+
+class SslServerSpy : public QObject
+{
+ Q_OBJECT
+
+public:
+ SslServerSpy(QSslConfiguration &configuration);
+
+ QSslServer server;
+ QSignalSpy sslErrorsSpy;
+ QSignalSpy peerVerifyErrorSpy;
+ QSignalSpy errorOccurredSpy;
+ QSignalSpy pendingConnectionAvailableSpy;
+ QSignalSpy preSharedKeyAuthenticationRequiredSpy;
+ QSignalSpy alertSentSpy;
+ QSignalSpy alertReceivedSpy;
+ QSignalSpy handshakeInterruptedOnErrorSpy;
+ QSignalSpy startedEncryptionHandshakeSpy;
+};
+
+SslServerSpy::SslServerSpy(QSslConfiguration &configuration)
+ : server(),
+ sslErrorsSpy(&server, &QSslServer::sslErrors),
+ peerVerifyErrorSpy(&server, &QSslServer::peerVerifyError),
+ errorOccurredSpy(&server, &QSslServer::errorOccurred),
+ pendingConnectionAvailableSpy(&server, &QSslServer::pendingConnectionAvailable),
+ preSharedKeyAuthenticationRequiredSpy(&server,
+ &QSslServer::preSharedKeyAuthenticationRequired),
+ alertSentSpy(&server, &QSslServer::alertSent),
+ alertReceivedSpy(&server, &QSslServer::alertReceived),
+ handshakeInterruptedOnErrorSpy(&server, &QSslServer::handshakeInterruptedOnError),
+ startedEncryptionHandshakeSpy(&server, &QSslServer::startedEncryptionHandshake)
+{
+ server.setSslConfiguration(configuration);
+}
+
+void tst_QSslServer::initTestCase()
+{
+ testDataDir = QFileInfo(QFINDTESTDATA("certs")).absolutePath();
+ if (testDataDir.isEmpty())
+ testDataDir = QCoreApplication::applicationDirPath();
+ if (!testDataDir.endsWith(QLatin1String("/")))
+ testDataDir += QLatin1String("/");
+
+ const QString openSslBackend = QTlsBackend::builtinBackendNames[QTlsBackend::nameIndexOpenSSL];
+ const auto &tlsBackends = QSslSocket::availableBackends();
+ if (tlsBackends.contains(openSslBackend)) {
+ isTestingOpenSsl = true;
+ }
+}
+
+QSslConfiguration tst_QSslServer::selfSignedClientQSslConfiguration()
+{
+ return createQSslConfiguration(testDataDir + "certs/selfsigned-client.key",
+ testDataDir + "certs/selfsigned-client.crt");
+}
+
+QSslConfiguration tst_QSslServer::selfSignedServerQSslConfiguration()
+{
+ return createQSslConfiguration(testDataDir + "certs/selfsigned-server.key",
+ testDataDir + "certs/selfsigned-server.crt");
+}
+
+QSslConfiguration tst_QSslServer::createQSslConfiguration(QString keyFileName,
+ QString certificateFileName)
+{
+ QSslConfiguration configuration(QSslConfiguration::defaultConfiguration());
+
+ QFile keyFile(keyFileName);
+ if (keyFile.open(QIODevice::ReadOnly)) {
+ QSslKey key(keyFile.readAll(), QSsl::Rsa, QSsl::Pem, QSsl::PrivateKey);
+ if (!key.isNull()) {
+ configuration.setPrivateKey(key);
+ } else {
+ qCritical() << "Could not parse key: " << keyFileName;
+ }
+ } else {
+ qCritical() << "Could not find key: " << keyFileName;
+ }
+
+ QList<QSslCertificate> localCert = QSslCertificate::fromPath(certificateFileName);
+ if (!localCert.isEmpty() && !localCert.first().isNull()) {
+ configuration.setLocalCertificate(localCert.first());
+ } else {
+ qCritical() << "Could not find certificate: " << certificateFileName;
+ }
+ return configuration;
+}
+
+void tst_QSslServer::testOneSuccessfulConnection()
+{
+ // Setup server
+ QSslConfiguration serverConfiguration = selfSignedServerQSslConfiguration();
+ SslServerSpy server(serverConfiguration);
+ QVERIFY(server.server.listen());
+
+ // Check that all signal spys are valid
+ QVERIFY(server.sslErrorsSpy.isValid());
+ QVERIFY(server.peerVerifyErrorSpy.isValid());
+ QVERIFY(server.errorOccurredSpy.isValid());
+ QVERIFY(server.pendingConnectionAvailableSpy.isValid());
+ QVERIFY(server.preSharedKeyAuthenticationRequiredSpy.isValid());
+ QVERIFY(server.alertSentSpy.isValid());
+ QVERIFY(server.alertReceivedSpy.isValid());
+ QVERIFY(server.handshakeInterruptedOnErrorSpy.isValid());
+ QVERIFY(server.startedEncryptionHandshakeSpy.isValid());
+
+ // Check that no connections has occurred
+ QCOMPARE(server.sslErrorsSpy.size(), 0);
+ QCOMPARE(server.peerVerifyErrorSpy.size(), 0);
+ QCOMPARE(server.errorOccurredSpy.size(), 0);
+ QCOMPARE(server.pendingConnectionAvailableSpy.size(), 0);
+ QCOMPARE(server.preSharedKeyAuthenticationRequiredSpy.size(), 0);
+ QCOMPARE(server.alertSentSpy.size(), 0);
+ QCOMPARE(server.alertReceivedSpy.size(), 0);
+ QCOMPARE(server.handshakeInterruptedOnErrorSpy.size(), 0);
+ QCOMPARE(server.startedEncryptionHandshakeSpy.size(), 0);
+
+ // Connect client
+ QSslSocket client;
+ QSslConfiguration clientConfiguration = QSslConfiguration::defaultConfiguration();
+ client.setSslConfiguration(clientConfiguration);
+ client.connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(),
+ server.server.serverPort());
+
+ // Type of certificate error to expect
+ const auto certificateError =
+ isTestingOpenSsl ? QSslError::SelfSignedCertificate : QSslError::CertificateUntrusted;
+ // Expected errors
+ connect(&client, &QSslSocket::sslErrors,
+ [&certificateError, &client](const QList<QSslError> &errors) {
+ QCOMPARE(errors.size(), 2);
+ for (auto error : errors) {
+ QVERIFY(error.error() == certificateError
+ || error.error() == QSslError::HostNameMismatch);
+ }
+ client.ignoreSslErrors();
+ });
+
+ QEventLoop loop;
+ int waitFor = 2;
+ connect(&client, &QSslSocket::encrypted, [&loop, &waitFor]() {
+ if (!--waitFor)
+ loop.quit();
+ });
+ connect(&server.server, &QTcpServer::pendingConnectionAvailable, [&loop, &waitFor]() {
+ if (!--waitFor)
+ loop.quit();
+ });
+ QTimer::singleShot(5000, &loop, SLOT(quit()));
+ loop.exec();
+
+ // Check that one encrypted connection has occurred without error
+ QCOMPARE(server.sslErrorsSpy.size(), 0);
+ QCOMPARE(server.peerVerifyErrorSpy.size(), 0);
+ QCOMPARE(server.errorOccurredSpy.size(), 0);
+ QCOMPARE(server.pendingConnectionAvailableSpy.size(), 1);
+ QCOMPARE(server.preSharedKeyAuthenticationRequiredSpy.size(), 0);
+ QCOMPARE(server.alertSentSpy.size(), 0);
+ QCOMPARE(server.alertReceivedSpy.size(), 0);
+ QCOMPARE(server.handshakeInterruptedOnErrorSpy.size(), 0);
+ QCOMPARE(server.startedEncryptionHandshakeSpy.size(), 1);
+
+ // Check client socket
+ QVERIFY(client.isEncrypted());
+ QCOMPARE(client.state(), QAbstractSocket::ConnectedState);
+}
+
+void tst_QSslServer::testSelfSignedCertificateRejectedByServer()
+{
+ // Set up server that verifies client
+ QSslConfiguration serverConfiguration = selfSignedServerQSslConfiguration();
+ serverConfiguration.setPeerVerifyMode(QSslSocket::VerifyPeer);
+ SslServerSpy server(serverConfiguration);
+ QVERIFY(server.server.listen());
+
+ // Connect client
+ QSslSocket client;
+ QSslConfiguration clientConfiguration = selfSignedClientQSslConfiguration();
+ clientConfiguration.setPeerVerifyMode(QSslSocket::VerifyNone);
+ client.setSslConfiguration(clientConfiguration);
+ client.connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(),
+ server.server.serverPort());
+
+ QEventLoop loop;
+ QObject::connect(&client, SIGNAL(disconnected()), &loop, SLOT(quit()));
+ QTimer::singleShot(5000, &loop, SLOT(quit()));
+ loop.exec();
+
+ // Check that one encrypted connection has failed
+ QCOMPARE(server.sslErrorsSpy.size(), 1);
+ QCOMPARE(server.peerVerifyErrorSpy.size(), 1);
+ QCOMPARE(server.errorOccurredSpy.size(), 1);
+ QCOMPARE(server.pendingConnectionAvailableSpy.size(), 0);
+ QCOMPARE(server.preSharedKeyAuthenticationRequiredSpy.size(), 0);
+ QCOMPARE(server.alertSentSpy.size(),
+ isTestingOpenSsl ? 1 : 0); // OpenSSL only signal
+ QCOMPARE(server.alertReceivedSpy.size(), 0);
+ QCOMPARE(server.handshakeInterruptedOnErrorSpy.size(), 0);
+ QCOMPARE(server.startedEncryptionHandshakeSpy.size(), 1);
+
+ // Type of certificate error to expect
+ const auto certificateError =
+ isTestingOpenSsl ? QSslError::SelfSignedCertificate : QSslError::CertificateUntrusted;
+
+ // Check the sslErrorsSpy
+ const auto sslErrorsSpyErrors =
+ qvariant_cast<QList<QSslError>>(std::as_const(server.sslErrorsSpy).first()[1]);
+ QCOMPARE(sslErrorsSpyErrors.size(), 1);
+ QCOMPARE(sslErrorsSpyErrors.first().error(), certificateError);
+
+ // Check the peerVerifyErrorSpy
+ const auto peerVerifyErrorSpyError =
+ qvariant_cast<QSslError>(std::as_const(server.peerVerifyErrorSpy).first()[1]);
+ QCOMPARE(peerVerifyErrorSpyError.error(), certificateError);
+
+ // Check client socket
+ QVERIFY(!client.isEncrypted());
+ QCOMPARE(client.state(), QAbstractSocket::UnconnectedState);
+}
+
+void tst_QSslServer::testSelfSignedCertificateRejectedByClient()
+{
+ // Set up server without verification of client
+ QSslConfiguration serverConfiguration = selfSignedServerQSslConfiguration();
+ SslServerSpy server(serverConfiguration);
+ QVERIFY(server.server.listen());
+
+ // Connect client that authenticates server
+ QSslSocket client;
+ QSslConfiguration clientConfiguration = selfSignedClientQSslConfiguration();
+ if (isTestingOpenSsl) {
+ clientConfiguration.setHandshakeMustInterruptOnError(true);
+ QVERIFY(clientConfiguration.handshakeMustInterruptOnError());
+ }
+ client.setSslConfiguration(clientConfiguration);
+ QSignalSpy clientConnectedSpy(&client, SIGNAL(connected()));
+ QSignalSpy clientHostFoundSpy(&client, SIGNAL(hostFound()));
+ QSignalSpy clientDisconnectedSpy(&client, SIGNAL(disconnected()));
+ QSignalSpy clientConnectionEncryptedSpy(&client, SIGNAL(encrypted()));
+ QSignalSpy clientSslErrorsSpy(&client, SIGNAL(sslErrors(QList<QSslError>)));
+ QSignalSpy clientErrorOccurredSpy(&client, SIGNAL(errorOccurred(QAbstractSocket::SocketError)));
+ client.connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(),
+ server.server.serverPort());
+ QEventLoop loop;
+ QTimer::singleShot(1000, &loop, SLOT(quit()));
+ loop.exec();
+
+ // Type of socket error to expect
+ const auto socketError = isTestingOpenSsl
+ ? QAbstractSocket::SocketError::SslHandshakeFailedError
+ : QAbstractSocket::SocketError::RemoteHostClosedError;
+
+ QTcpSocket *connection = server.server.nextPendingConnection();
+ if (connection == nullptr) {
+ // Client disconnected before connection accepted by server
+ QCOMPARE(server.sslErrorsSpy.size(), 0);
+ QCOMPARE(server.peerVerifyErrorSpy.size(), 0);
+ QCOMPARE(server.errorOccurredSpy.size(), 1); // Client rejected first
+ QCOMPARE(server.pendingConnectionAvailableSpy.size(), 0);
+ QCOMPARE(server.preSharedKeyAuthenticationRequiredSpy.size(), 0);
+ QCOMPARE(server.alertSentSpy.size(), 0);
+ QCOMPARE(server.alertReceivedSpy.size(),
+ isTestingOpenSsl ? 1 : 0); // OpenSSL only signal
+ QCOMPARE(server.handshakeInterruptedOnErrorSpy.size(), 0);
+ QCOMPARE(server.startedEncryptionHandshakeSpy.size(), 1);
+
+ const auto errrOccuredSpyError = qvariant_cast<QAbstractSocket::SocketError>(
+ std::as_const(server.errorOccurredSpy).first()[1]);
+ QCOMPARE(errrOccuredSpyError, socketError);
+ } else {
+ // Client disconnected after connection accepted by server
+ QCOMPARE(server.sslErrorsSpy.size(), 0);
+ QCOMPARE(server.peerVerifyErrorSpy.size(), 0);
+ QCOMPARE(server.errorOccurredSpy.size(), 0); // Server accepted first
+ QCOMPARE(server.pendingConnectionAvailableSpy.size(), 1);
+ QCOMPARE(server.preSharedKeyAuthenticationRequiredSpy.size(), 0);
+ QCOMPARE(server.alertSentSpy.size(), 0);
+ QCOMPARE(server.alertReceivedSpy.size(),
+ isTestingOpenSsl ? 1 : 0); // OpenSSL only signal
+ QCOMPARE(server.handshakeInterruptedOnErrorSpy.size(), 0);
+ QCOMPARE(server.startedEncryptionHandshakeSpy.size(), 1);
+
+ QCOMPARE(connection->state(), QAbstractSocket::UnconnectedState);
+ QCOMPARE(connection->error(), socketError);
+ auto sslConnection = qobject_cast<QSslSocket *>(connection);
+ QVERIFY(sslConnection);
+ QVERIFY(!sslConnection->isEncrypted());
+ }
+
+ // Check that client has rejected server
+ QCOMPARE(clientConnectedSpy.size(), 1);
+ QCOMPARE(clientHostFoundSpy.size(), 1);
+ QCOMPARE(clientDisconnectedSpy.size(), 1);
+ QCOMPARE(clientConnectionEncryptedSpy.size(), 0);
+ QCOMPARE(clientSslErrorsSpy.size(), isTestingOpenSsl ? 0 : 1);
+ QCOMPARE(clientErrorOccurredSpy.size(), 1);
+
+ // Check client socket
+ QVERIFY(!client.isEncrypted());
+ QCOMPARE(client.state(), QAbstractSocket::UnconnectedState);
+}
+
+#if QT_CONFIG(openssl)
+
+void tst_QSslServer::testHandshakeInterruptedOnError()
+{
+ if (!isTestingOpenSsl)
+ QSKIP("This test requires OpenSSL as the active TLS backend");
+
+ auto serverConfiguration = selfSignedServerQSslConfiguration();
+ serverConfiguration.setHandshakeMustInterruptOnError(true);
+ QVERIFY(serverConfiguration.handshakeMustInterruptOnError());
+ serverConfiguration.setPeerVerifyMode(QSslSocket::VerifyPeer);
+ SslServerSpy server(serverConfiguration);
+ server.server.listen();
+
+ QSslSocket client;
+ auto clientConfiguration = selfSignedClientQSslConfiguration();
+ clientConfiguration.setPeerVerifyMode(QSslSocket::VerifyNone);
+ client.setSslConfiguration(clientConfiguration);
+ client.connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(),
+ server.server.serverPort());
+
+ QEventLoop loop;
+ QObject::connect(&client, SIGNAL(disconnected()), &loop, SLOT(quit()));
+ QTimer::singleShot(5000, &loop, SLOT(quit()));
+ loop.exec();
+
+ // Check that client certificate causes handshake interrupted signal to be emitted
+ QCOMPARE(server.sslErrorsSpy.size(), 0);
+ QCOMPARE(server.peerVerifyErrorSpy.size(), 0);
+ QCOMPARE(server.errorOccurredSpy.size(), 1);
+ QCOMPARE(server.pendingConnectionAvailableSpy.size(), 0);
+ QCOMPARE(server.preSharedKeyAuthenticationRequiredSpy.size(), 0);
+ QCOMPARE(server.alertSentSpy.size(), 1);
+ QCOMPARE(server.alertReceivedSpy.size(), 0);
+ QCOMPARE(server.handshakeInterruptedOnErrorSpy.size(), 1);
+ QCOMPARE(server.startedEncryptionHandshakeSpy.size(), 1);
+}
+
+void tst_QSslServer::testPreSharedKeyAuthenticationRequired()
+{
+ if (!isTestingOpenSsl)
+ QSKIP("This test requires OpenSSL as the active TLS backend");
+
+ auto serverConfiguration = QSslConfiguration::defaultConfiguration();
+ serverConfiguration.setPeerVerifyMode(QSslSocket::VerifyPeer);
+ serverConfiguration.setProtocol(QSsl::TlsV1_2);
+ serverConfiguration.setCiphers({ QSslCipher("PSK-AES256-CBC-SHA") });
+ serverConfiguration.setPreSharedKeyIdentityHint("Server Y");
+ SslServerSpy server(serverConfiguration);
+ connect(&server.server, &QSslServer::preSharedKeyAuthenticationRequired,
+ [](QSslSocket *, QSslPreSharedKeyAuthenticator *authenticator) {
+ QCOMPARE(authenticator->identity(), QByteArray("Client X"));
+ authenticator->setPreSharedKey("123456");
+ });
+ server.server.listen();
+
+ QSslSocket client;
+ auto clientConfiguration = QSslConfiguration::defaultConfiguration();
+ clientConfiguration.setPeerVerifyMode(QSslSocket::VerifyNone);
+ clientConfiguration.setProtocol(QSsl::TlsV1_2);
+ clientConfiguration.setCiphers({ QSslCipher("PSK-AES256-CBC-SHA") });
+ client.setSslConfiguration(clientConfiguration);
+ connect(&client, &QSslSocket::preSharedKeyAuthenticationRequired,
+ [](QSslPreSharedKeyAuthenticator *authenticator) {
+ QCOMPARE(authenticator->identityHint(), QByteArray("Server Y"));
+ authenticator->setPreSharedKey("123456");
+ authenticator->setIdentity("Client X");
+ });
+ client.connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(),
+ server.server.serverPort());
+
+ connect(&server.server, &QSslServer::sslErrors,
+ [](QSslSocket *socket, const QList<QSslError> &errors) {
+ for (auto error : errors) {
+ QCOMPARE(error.error(), QSslError::NoPeerCertificate);
+ }
+ socket->ignoreSslErrors();
+ });
+
+ QEventLoop loop;
+ QObject::connect(&client, SIGNAL(encrypted()), &loop, SLOT(quit()));
+ QTimer::singleShot(5000, &loop, SLOT(quit()));
+ loop.exec();
+
+ // Check that server is connected
+ QCOMPARE(server.sslErrorsSpy.size(), 1);
+ QCOMPARE(server.peerVerifyErrorSpy.size(), 1);
+ QCOMPARE(server.errorOccurredSpy.size(), 0);
+ QCOMPARE(server.pendingConnectionAvailableSpy.size(), 1);
+ QCOMPARE(server.preSharedKeyAuthenticationRequiredSpy.size(), 1);
+ QCOMPARE(server.alertSentSpy.size(), 0);
+ QCOMPARE(server.alertReceivedSpy.size(), 0);
+ QCOMPARE(server.handshakeInterruptedOnErrorSpy.size(), 0);
+ QCOMPARE(server.startedEncryptionHandshakeSpy.size(), 1);
+
+ // Check client socket
+ QVERIFY(client.isEncrypted());
+ QCOMPARE(client.state(), QAbstractSocket::ConnectedState);
+}
+
+#endif
+
+void tst_QSslServer::plaintextClient()
+{
+ QSslConfiguration serverConfiguration = selfSignedServerQSslConfiguration();
+ SslServerSpy server(serverConfiguration);
+ QVERIFY(server.server.listen());
+
+ QTcpSocket socket;
+ QSignalSpy socketDisconnectedSpy(&socket, &QTcpSocket::disconnected);
+ socket.connectToHost(QHostAddress::LocalHost, server.server.serverPort());
+ QVERIFY(socket.waitForConnected());
+ QTest::qWait(100);
+ // No disconnect from short break...:
+ QCOMPARE(socket.state(), QAbstractSocket::SocketState::ConnectedState);
+
+ // ... but we write some plaintext data...:
+ socket.write("Hello World!");
+ socket.waitForBytesWritten();
+ // ... and quickly get disconnected:
+ QTRY_COMPARE_GT(socketDisconnectedSpy.size(), 0);
+ QCOMPARE(socket.state(), QAbstractSocket::SocketState::UnconnectedState);
+}
+
+void tst_QSslServer::quietClient()
+{
+ QSslConfiguration serverConfiguration = selfSignedServerQSslConfiguration();
+ SslServerSpy server(serverConfiguration);
+ server.server.setHandshakeTimeout(1'000);
+ QVERIFY(server.server.listen());
+
+ quint16 serverPeerPort = 0;
+ auto grabServerPeerPort = [&serverPeerPort](QSslSocket *socket) {
+ serverPeerPort = socket->peerPort();
+ };
+ QObject::connect(&server.server, &QSslServer::errorOccurred, &server.server,
+ grabServerPeerPort);
+
+ QTcpSocket socket;
+ QSignalSpy socketDisconnectedSpy(&socket, &QTcpSocket::disconnected);
+ socket.connectToHost(QHostAddress::LocalHost, server.server.serverPort());
+ quint16 clientLocalPort = socket.localPort();
+ QVERIFY(socket.waitForConnected());
+ // Disconnects after overlong break:
+ QVERIFY(socketDisconnectedSpy.wait(5'000));
+ QCOMPARE(socket.state(), QAbstractSocket::SocketState::UnconnectedState);
+
+ QCOMPARE_GT(server.errorOccurredSpy.size(), 0);
+ QCOMPARE(serverPeerPort, clientLocalPort);
+}
+
+void tst_QSslServer::twoGoodAndManyBadClients()
+{
+ QSslConfiguration serverConfiguration = selfSignedServerQSslConfiguration();
+ SslServerSpy server(serverConfiguration);
+ server.server.setHandshakeTimeout(750);
+ constexpr qsizetype ExpectedConnections = 5;
+ server.server.setMaxPendingConnections(ExpectedConnections);
+ QVERIFY(server.server.listen());
+
+ auto connectGoodClient = [&server](QSslSocket *socket) {
+ QObject::connect(socket, &QSslSocket::sslErrors, socket,
+ qOverload<const QList<QSslError> &>(&QSslSocket::ignoreSslErrors));
+ socket->connectToHostEncrypted("127.0.0.1", server.server.serverPort());
+ };
+ // Connect one socket encrypted so we have a socket in the regular queue
+ QSslSocket tlsSocket;
+ connectGoodClient(&tlsSocket);
+
+ // Then we connect a bunch of TCP sockets who will not send any data at all
+ std::array<QTcpSocket, size_t(ExpectedConnections) * 2> sockets;
+ for (QTcpSocket &socket : sockets)
+ socket.connectToHost(QHostAddress::LocalHost, server.server.serverPort());
+ QTest::qWait(500); // some leeway to let connections try to connect...
+
+ // I happen to know the sockets are all children of the server, so let's see
+ // how many are created:
+ qsizetype connectedCount = server.server.findChildren<QSslSocket *>().size();
+ QCOMPARE(connectedCount, ExpectedConnections);
+ // 1 socket is ready and pending
+ QCOMPARE(server.pendingConnectionAvailableSpy.size(), 1);
+
+ // Connect another client to make sure that the server is accepting connections again even after
+ // all the bad actors tried to connect:
+ QSslSocket goodClient;
+ connectGoodClient(&goodClient);
+ QTRY_COMPARE(server.pendingConnectionAvailableSpy.size(), 2);
+}
+
+QTEST_MAIN(tst_QSslServer)
+
+#include "tst_qsslserver.moc"
diff --git a/tests/auto/network/ssl/qsslsocket/BLACKLIST b/tests/auto/network/ssl/qsslsocket/BLACKLIST
index 749c59d968..b990516676 100644
--- a/tests/auto/network/ssl/qsslsocket/BLACKLIST
+++ b/tests/auto/network/ssl/qsslsocket/BLACKLIST
@@ -1,11 +1,6 @@
[deprecatedProtocols]
windows
-[spontaneousWrite]
-windows-7sp1
[connectToHostEncrypted]
macos
-[setSslConfiguration]
-windows-10 msvc-2015
-windows-7sp1
[connectToHostEncryptedWithVerificationPeerName]
macos
diff --git a/tests/auto/network/ssl/qsslsocket/CMakeLists.txt b/tests/auto/network/ssl/qsslsocket/CMakeLists.txt
index 0e6bf353ee..456deacb60 100644
--- a/tests/auto/network/ssl/qsslsocket/CMakeLists.txt
+++ b/tests/auto/network/ssl/qsslsocket/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qsslsocket.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_qsslsocket LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -14,24 +21,16 @@ list(APPEND test_data "certs")
qt_internal_add_test(tst_qsslsocket
SOURCES
tst_qsslsocket.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
+ Qt::TestPrivate
TESTDATA ${test_data}
- QT_TEST_SERVER_LIST "squid" "danted" "cyrus" "apache2" "echo" # special case
+ QT_TEST_SERVER_LIST "squid" "danted" "cyrus" "apache2" "echo"
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
-#### Keys ignored in scope 1:.:.:qsslsocket.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 3:.:.:qsslsocket.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# DESTDIR = "debug"
-
-#### Keys ignored in scope 4:.:.:qsslsocket.pro:else:
-# DESTDIR = "release"
-
-#### Keys ignored in scope 5:.:.:qsslsocket.pro:LINUX:
-# QT_TEST_SERVER_LIST = "squid" "danted" "cyrus" "apache2" "echo"
+qt_internal_extend_target(tst_qsslsocket CONDITION QT_FEATURE_private_tests AND QT_FEATURE_openssl_linked
+ LIBRARIES
+ WrapOpenSSL::WrapOpenSSL
+)
diff --git a/tests/auto/network/ssl/qsslsocket/certs/ca-generate.sh b/tests/auto/network/ssl/qsslsocket/certs/ca-generate.sh
new file mode 100644
index 0000000000..10aea0905e
--- /dev/null
+++ b/tests/auto/network/ssl/qsslsocket/certs/ca-generate.sh
@@ -0,0 +1,21 @@
+#!/bin/sh
+# Copyright (C) 2016 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+# generate ca.crt
+openssl genrsa -out ca.key 8192
+openssl req -x509 -new -sha512 -nodes -key ca.key -days 10000 -out ca.crt -config ca.conf
+
+# generate inter.crt
+openssl genrsa -out inter.key 8192
+openssl req -new -sha512 -nodes -key inter.key -out inter.csr -config inter.conf
+openssl x509 -req -sha512 -days 45 -in inter.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out inter.crt
+rm inter.csr
+rm ca.srl
+
+# generate leaf.crt
+openssl genrsa -out leaf.key 8192
+openssl req -new -sha512 -nodes -key leaf.key -out leaf.csr -config leaf.conf
+openssl x509 -req -sha512 -days 45 -in leaf.csr -CA inter.crt -CAkey inter.key -CAcreateserial -out leaf.crt
+rm leaf.csr
+rm inter.srl
diff --git a/tests/auto/network/ssl/qsslsocket/certs/ca.conf b/tests/auto/network/ssl/qsslsocket/certs/ca.conf
new file mode 100644
index 0000000000..1f94247a2f
--- /dev/null
+++ b/tests/auto/network/ssl/qsslsocket/certs/ca.conf
@@ -0,0 +1,10 @@
+basicConstraints = CA:TRUE
+keyUsage = cRLSign, keyCertSign
+[req]
+distinguished_name = network-tests.qt-project.org
+prompt = no
+[network-tests.qt-project.org]
+C = NO
+ST = Oslo
+L = Oslo
+CN = Fake Qt Project Certificate Authority
diff --git a/tests/auto/network/ssl/qsslsocket/certs/ca.crt b/tests/auto/network/ssl/qsslsocket/certs/ca.crt
index 5cbe8ef726..8e6c6e255c 100644
--- a/tests/auto/network/ssl/qsslsocket/certs/ca.crt
+++ b/tests/auto/network/ssl/qsslsocket/certs/ca.crt
@@ -1,22 +1,52 @@
-----BEGIN CERTIFICATE-----
-MIIDpTCCAl2gAwIBAgIQAKraD9BoqaSa75qOqcP7ZTANBgkqhkiG9w0BAQUFADA8
-MQswCQYDVQQGEwJHQjEZMBcGA1UEChMQV2VzdHBvaW50IENBIEtleTESMBAGA1UE
-ChMJV2VzdHBvaW50MB4XDTEzMDIxNjE2NTMwOFoXDTIzMDIxNjE2NTMwOFowPDEL
-MAkGA1UEBhMCR0IxGTAXBgNVBAoTEFdlc3Rwb2ludCBDQSBLZXkxEjAQBgNVBAoT
-CVdlc3Rwb2ludDCCAVIwDQYJKoZIhvcNAQEBBQADggE/ADCCAToCggExAJv0H92j
-WjDB9h1DmSQzt772IPSirpE82sN9ls5J19TJcPnw49LdUUqkELJkpS1ty2hYPdUw
-7q3n00D+nzS+rt1QIDSKwDVoqeIyFZw4h0ULbASErfy51xBjVIr6NNoiqazp59wQ
-RDvqps7of+b/NcbOh73MsiYi8T5OoI4Quv9rMBefQTAI3d2NRQ4GUzS6Hzh2INOc
-4twApTDYY+yrU8IalXttIOVdKJZTHeTCdIXD3HMfHCkzyELz8rCI1/wDEp8zyoqF
-/tpBStZ5LUSrlRRM7PegqcnM+aojXyrEiXBvPuqO7tabU3nsfix9+8+7GDweDXsP
-OUHv+ahGNTUya7hBDaQmVk3/5hbig9kQlNiOcvcdnYYyJqiXhvjPPzOBbRaFNvBT
-uG/ehHNHYsdhEBkCAwEAAaNDMEEwDwYDVR0TAQH/BAUwAwEB/zAPBgNVHQ8BAf8E
-BQMDBwYAMB0GA1UdDgQWBBSUJzi1uYQUxqb3Nr33LOLCaUUTyTANBgkqhkiG9w0B
-AQUFAAOCATEAPeGh2GiIhT3cii3DU8ihd5TmnEstuHKz2FwHDChmen0zxE8lf08/
-onL1yIeaxbDA8KwZnv71/zZHJv02sPtIMUfuXQc0wOIFjDf0ngc6xIBuU7FUpLxF
-2dK7g9OsiNeC7L/ZemRXgpJURdNF2Ujge9/H9yfpHFBXZztmaWir+TXc5g3PKIu6
-97t75Og+stPhTcSlph8ZHYep08b2uthCfcnuIRGeDW9LkfR8VugnuUf7GoIlqSTs
-SR6bNuyTnnCHQMJzbsQ472+ag3aZS5HzoR8wyGiPmpc43lQM5ZEDrWGu8bub2gKa
-/+KeqHd0wnl7Y5cxnmAptQjxvzBXX/pl4sWczesiGcYm5z5mabp4CY09Y8JtrJZT
-IJodXy9ykRmEurgtRoRVc1aSp+xfV725bQ==
+MIIJPzCCBScCFEE7H06QrHfL4z31/1+EDVDhQUAeMA0GCSqGSIb3DQEBDQUAMFsx
+CzAJBgNVBAYTAk5PMQ0wCwYDVQQIDARPc2xvMQ0wCwYDVQQHDARPc2xvMS4wLAYD
+VQQDDCVGYWtlIFF0IFByb2plY3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MCAXDTIy
+MDkwMjE1MDIyMFoYDzIwNTAwMTE4MTUwMjIwWjBbMQswCQYDVQQGEwJOTzENMAsG
+A1UECAwET3NsbzENMAsGA1UEBwwET3NsbzEuMCwGA1UEAwwlRmFrZSBRdCBQcm9q
+ZWN0IENlcnRpZmljYXRlIEF1dGhvcml0eTCCBCIwDQYJKoZIhvcNAQEBBQADggQP
+ADCCBAoCggQBAOMlzl5JB31G5CmRRKltbua0LtM0U7mh/yeK7jNaRAY5VKmmh4mg
+N/Ib7Rn4jCY5ccGaOdxtHdPE6WN4v4GZJ23dr+AofJnZHj+wiYjE+KKpoiuPDqhP
+F231zg16WGlc2HWbpX93InnxnO7KRwHumn0Xxn50BfKgyvmdDQBtAkYU868GWwqR
+cy+K4c+tB46XGS1URv/PDYy15IbcOwpDUSpXQBrHZHyje2iwZR6AKESGZRkSttyY
+oSJAmfIhDST41g+9uV9zA9u1XAVYb3kAstSU1nWEYZ7oBQEhh6LIR34YjCE/ThQy
+djWlc9afnFxA8r+q/mjAOTsH/Pml6Z/DQKW9Bfjw9ne0Oeiz+Z1J8Goj/YzGsKeI
+u2XPU8bbjxv32IkhZmH/g22a9Jl41nAYGmAzP7yfOCSRTDTn5JybInxaEdrPrgS2
+A66+NiFWIu/QKnBrKwVlINOdi0z533Aejmc3ybtyJeHPeG0deNbfJbEavfq4yb4P
+DlWpWA4yMbZCqazP/Yku9DkJoT8kAKOaGK2Swjt3NvnT4LaKIPXLCwz/HUjWcppx
+54acMDOUz2ch/yIXx/m/jnl1hMHnv2KPoxgQYeRs0iX4lwd79zaRydMmLYceY64H
+Ek4b+vSsuEnOTThx9jv358aFI7f9fL0Qbqknf9EUo5X4OTCFIkdtLEYsU5+uzmqC
+LgB6musrIaMgNLef7VbKPgtqZDEvWbm0tqdh5dk/wpyFimc8x9V9MSBNAqGE/dm4
+KCtRGBiyQ1KRB+RRqAKMHaR8dFBuHtDvSq20logNTab6eTE79zNMyo0W61GrriQt
+94a0ahTSKaySXRgTKhElAp3n5v5YDTO1DEYtMy0hI/wx1d2bkJsO8gSr+aBzVZUc
+QsWFK3qgmDfC9ZF5CsvLEPy7I5pf2TcaQjTrr4XcTPSHEyN2WI7bj9sU6+tkLi/Y
+OI3z0NsXOZM2OJPZ523TJbnhCRX9wEvh+sts5cbMgAbZVYWHImjmkdnssAChhrCh
+DPaq20KVma00ZvbbfICG/1QiSY9FVX/AVID8yDc49ZfLiLWTLoEFoYH0lqGj0817
+4LwWswNlH86EeY1KPxmNPCF0bzj39hnYN1kd5qTxg5hwPTZehw5JR6w1eQ0VamV1
+Al1u8XqBkrk48iWeOBQr0u6HiNNElCjH+j/hC8Ms4Ykmh8iaJhlpwKt6pGoROX6l
++T98AvrzFUmh+NJu+bGWATBrGmaSjW8AUYwVSbHDL2jk41uVGQdgFTCHwhh6/OV8
+VuladbVA5aA33Jky6SKUNeUh+WcVuwMa1Y/ZKX8Klo7p8ZmxCeAOmcd8fbTfQVu5
+fqu1Oz4Ai6cMQmPpOi9tMzr86ig9NlZPxA8CAwEAATANBgkqhkiG9w0BAQ0FAAOC
+BAEAsYfgbpxN2SzVk8FWs+fHnMkMVX4KUPSKHCea6YoaPJN3glH0Y8I7uYpbwmWf
+AqaXmZhY4YFGG77uao533hS7gapnkuoH+e4LZ0G1QrlCDhl69iNgL/HG/yq1eCDu
+M3Oc8ujpkFoGkDQUVqVSqFvSOGm/KKVazQDF9VhUrlmfHapMYlrSZssbibzfjoKp
+DKMQHYN5OiX6WZ7PVCvGn53ufO1dtENbBRHCD/ck7dMM/bzANXDd+Yw2rHAuXnRX
+Lyp7XoqD/coB+Nn23mKtn+HLOYp1MkaONO/JruFV+HYd9kP+yoICTOWDU6Nx/Knz
+0pnGktQwySha6cDKB8V/rLLrnyZGRLbmajtlGQNnYeeJdQFjFP8dnCjHS78KxURe
+zqKAcO79hzZNqcsGxHVfS49+j8NOvUzKfj6Rda4x1Yb7Cnm0VAs1lo+rtQbRdB2z
+KVNVed7ns4eO2jM/UYRse66RHsIY4+45fQH4OwshJNU2Rn8nDUikrCo7G2MDeTq3
+4M0y0W8tr4NbnTGNVQLnY+HX5AWoB12E++rfv7CACKDxvJ519Ai/uxZSLWcmPM05
+g/JDKi6Rn1EbAZlru+9GV19QAq60elaLMDUVGZ4EYhjunF2syewqCkeyXWC3zMDL
+pNdq8t0IM5Q9x1Vfj9XAecO5QftS54K5RAxiMTPBwYSWA3yduEPfSQSRYovVarLd
+gsOWWSNwJ16wxEibCgueo6njB+9yfbFTtYLTpQKDVAgV7IBiATW6LcR2WgF4g9zq
+vduJYu5uQFSC0g9/2uZ7wqihEVdNEecOHz/uidpK8K4vlJ5oPKUo/YS4ok5rOPFd
+BocpE8stbr6seRmkQcjrjqjLkzdi/lag2giuWglgjyL18MG6lBKFD9I/0iade3J+
+H7GaWZkLhsng2vG9ix+fQkq68yZwq8sx91nE1RJPeLaNkgX9oUtSg6e7I5ks6lS5
+UxBPouki7wH/kHY/xG+YVhm499s9KRdv7ZUGB/OhwdiBJW1DduPBIklMA8YHnWGG
+2om0dCno+K/g88JzEI29Ob3AwIbtMI5vbWI8hWAfHEH0zEyfl9rB6/TcsHY8hjqj
+cSCFT2rdno/S8gbBTuTLK8RhgmXKpZxVmLMz1rSRpMby5HAJ4Sh11bYzu4x1SuUo
+HHiypXjIjBvwnX5/so2q4mw2TNZR0QQ9dQ8bcG74h6cJxSv2pXQTwQRP5PkMpmOF
+JIgv+Pa0UOG+ejcKc94PhLAZmpxwdjlyfdCHT+RW6znqsCDHVvace/gHUY0bkUaD
+rQSwaeiNTc5l7MP8Xb1k6DwsEnuaAGTua/fX41Qk/XE3acUz0kmr2As/IlABqyJ6
+i+VYGJPNrI6E/LMy1lq/iCVQJQ==
-----END CERTIFICATE-----
diff --git a/tests/auto/network/ssl/qsslsocket/certs/ca.key b/tests/auto/network/ssl/qsslsocket/certs/ca.key
new file mode 100644
index 0000000000..eb2c48dbac
--- /dev/null
+++ b/tests/auto/network/ssl/qsslsocket/certs/ca.key
@@ -0,0 +1,99 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIISKgIBAAKCBAEA4yXOXkkHfUbkKZFEqW1u5rQu0zRTuaH/J4ruM1pEBjlUqaaH
+iaA38hvtGfiMJjlxwZo53G0d08TpY3i/gZknbd2v4Ch8mdkeP7CJiMT4oqmiK48O
+qE8XbfXODXpYaVzYdZulf3ciefGc7spHAe6afRfGfnQF8qDK+Z0NAG0CRhTzrwZb
+CpFzL4rhz60HjpcZLVRG/88NjLXkhtw7CkNRKldAGsdkfKN7aLBlHoAoRIZlGRK2
+3JihIkCZ8iENJPjWD725X3MD27VcBVhveQCy1JTWdYRhnugFASGHoshHfhiMIT9O
+FDJ2NaVz1p+cXEDyv6r+aMA5Owf8+aXpn8NApb0F+PD2d7Q56LP5nUnwaiP9jMaw
+p4i7Zc9TxtuPG/fYiSFmYf+DbZr0mXjWcBgaYDM/vJ84JJFMNOfknJsifFoR2s+u
+BLYDrr42IVYi79AqcGsrBWUg052LTPnfcB6OZzfJu3Il4c94bR141t8lsRq9+rjJ
+vg8OValYDjIxtkKprM/9iS70OQmhPyQAo5oYrZLCO3c2+dPgtoog9csLDP8dSNZy
+mnHnhpwwM5TPZyH/IhfH+b+OeXWEwee/Yo+jGBBh5GzSJfiXB3v3NpHJ0yYthx5j
+rgcSThv69Ky4Sc5NOHH2O/fnxoUjt/18vRBuqSd/0RSjlfg5MIUiR20sRixTn67O
+aoIuAHqa6yshoyA0t5/tVso+C2pkMS9ZubS2p2Hl2T/CnIWKZzzH1X0xIE0CoYT9
+2bgoK1EYGLJDUpEH5FGoAowdpHx0UG4e0O9KrbSWiA1Npvp5MTv3M0zKjRbrUauu
+JC33hrRqFNIprJJdGBMqESUCnefm/lgNM7UMRi0zLSEj/DHV3ZuQmw7yBKv5oHNV
+lRxCxYUreqCYN8L1kXkKy8sQ/Lsjml/ZNxpCNOuvhdxM9IcTI3ZYjtuP2xTr62Qu
+L9g4jfPQ2xc5kzY4k9nnbdMlueEJFf3AS+H6y2zlxsyABtlVhYciaOaR2eywAKGG
+sKEM9qrbQpWZrTRm9tt8gIb/VCJJj0VVf8BUgPzINzj1l8uItZMugQWhgfSWoaPT
+zXvgvBazA2UfzoR5jUo/GY08IXRvOPf2Gdg3WR3mpPGDmHA9Nl6HDklHrDV5DRVq
+ZXUCXW7xeoGSuTjyJZ44FCvS7oeI00SUKMf6P+ELwyzhiSaHyJomGWnAq3qkahE5
+fqX5P3wC+vMVSaH40m75sZYBMGsaZpKNbwBRjBVJscMvaOTjW5UZB2AVMIfCGHr8
+5XxW6Vp1tUDloDfcmTLpIpQ15SH5ZxW7AxrVj9kpfwqWjunxmbEJ4A6Zx3x9tN9B
+W7l+q7U7PgCLpwxCY+k6L20zOvzqKD02Vk/EDwIDAQABAoIEAQDUCUGYIAHevuNT
+rihzJBVnRIGFZI5XddJSHk13IGbpjHDsoOha33X6CnmNScfCEtOOzyH+EtnKCkF3
+OotCNi5pT4zS6dhOYS/sciYgxwX2CfW5RaSAFryfR9peGHwZdrMVLgMSdqp3PMSq
+36XjNtF9vkjrV/EJaXGwCxvM7vU1aG+FTaCEv/vPQIzEKRgp0gCNoONZ/fT/CfhW
+r5RpYyeMJ8BOfxzdgFo+ApOSIj30oaQUALU0PUIFUFqkfJfhkGt6bDdz01Chsq1A
+zCnawX0uFfYP41ChXqL1SFBt8xlRqyZ8DrUbA3P3Zgg5K+tw7qvroXo1XGLQKQfM
+H0VzfneFf2ro1D6uxU1dXUvAuPm0iv4vgHX9HhUY162zrtbrW7QFZmlFR5hvIzv7
+W6KJJubQMGbp85McB4okxOdSDTrm68lJAZ7HBQVxBFxRSC/6vs4u/Ms/EQTQpXsY
+kxQxfESgM6Kb2NVl8h7PdLiNk+aCaZ04Q3EHetR9wEPTlKV1Jstu5wUcHvmZmNSt
+tTTng3xP4vRvQDzQfymAHHbiGvSo4Ch9CroWVAe1T21raRkmg8S/FYX2LAuac8pG
+m8e7AKxVVU2cRrzw9xo8wUqm5PaKpVPQktyn4jADO/lKl0S8mNjavP8HQcZZOYV7
+RiQ/9Ovn+VhGW0bNQtZX5Z93H4E5ynrYZ+Bu4E6KBzApeG1wiSCGhyo2q8hMBLPy
+52YcPEj7LYeoBCjExgHUmE4FEKq6+zC067jjLB65D9vouoni4lPnH4SEYQudumU9
+ywUG88Wg3p4wTekaFdObadL+hEVY96PqwLHj03YxlPzVZc2hYTYbTR5HG0X+wyeQ
+pHhZ3O93bOq8i3IP1yBue6P3t7zp/iKNi4LZos043RWF2n9Q9RTMVNaRpdbaEMm4
+/JckhjjF6OgqYs7/ju5m8Oi8bEvi3+XETzHzGEaiYKfadrIaR+NpuGla61lCvKo8
+G2Uq/WwJxUICiDvAy3y5Z/FoXe0r87KF9LdC6MhRJvQ8dAEZWVCNs9HaLb+t/G1Y
+H2vLmTtUJUXkuLtNpQdQZnAN7HQ8Y/qRXslLcoGC733L81PQcm3rojAUInyoc5M9
+JJWWk0DLP3BpFCo2cOrsjYzBO4ZC/PNNeJY938JXpvSIz+y+fuXV/Vd/EWNaQylb
+6chCI7Pyz2HZhaKLI7+KPkEBprKbNBQDX4/uZuHtsccPguKF8yrLxk29u/Zy02Lp
+TAGKB3gk8xsDSOKtTalEEHW2aXKvo3tkdRUqjJ4Q5vBO/mmiOZHhmYneumT9SIH7
+jt4wJS56Kh5utHT3RXgmrZn/XX7PoNGkW29HdHive7q/L8WnNar8Yloarn01wE04
+CE+x5vL5AoICAQDzIRy/LzkKOOz8Pz7qO66yLa/dxdiNud0IIYtB705RZduQ7wdD
+oO0J8VOzrgy048EdOKf7mP2zma+xXPCfWHKMXRxIH+ewtNo5mxMxxPSkaUy25pK7
+vB6bOAIYvIZU/eMGtE5GTTMeJvyWC+uKVY4HUlzPaFmzz6KEJiTTVxwCi6SYikKB
+EpJdaZ3S03Gxky4Nlr6ILk1lPKCdWIN/9EeFdjvgN/Cx21wI+9untNfIRKRLbNAe
+dD4jC8mvx/Cb07Yzq+apkYWA7S2i30nocfWE3Wl0nk7nPTiIubetqNn15AjdOt+l
+AyG8ZuaRbcemfQ+slLZ9jkvHCSlUVpYAo+iiztYtViLIWTzGk+VeJhvjdZq7K1+7
+5iph2G9gt2WFaaK4/Ikkz3Uq+SMSlW3iAb1Zj60qzzx1+ZlNMq/MvqJNAzPBxoFY
+33ZySKnQSCOjVSr1K+PUO1m2Jisz6Fhj8lquCttZUrIudPaDVNmVXPXExxnnMu8x
+ms9oOQPozgcUYW9MLv8NVRg5bIqvEb/j/cVnQm4l7eSj8WvkDi+xGEpO5AFJSb/A
+rO9f61JamuHU2RwH2wq7ATMyG3chOu1b1jIuUFIt8cgAbUuTLbIuFQrTzXOMVch1
+dNVIPq8/vuLiNtXW3KhQFiM7AsvUQtsXbGuL8R4w4QM/DOkUK90gXXjlbQKCAgEA
+7ywcQpTjEmuj2xo+FGiZo8hV1cT7yUjbTCtyMReVOFY0+/LP+XldOpi1d73GoUE4
+keXDSXh70AjeHH4KVRzYk2qBNG7ejscX7MhLIlVV6rp6EE1MFPDX1Z2tnwHwz9lb
+kUgGs+Allg1dY6+B2Wmo7vWQ9EHwaGteLanfWsJtHpVEsRwSMSl3XUeydXf9x2nz
+eRJ23V+e07XzeLvL4kn7vPZ8v0qRF+WLy9IBngO1RlrPrI+b//Vsk/2Mf3pfkm1M
+g50Owm+fTOftcUvWkiIcUYCRVbOIBrTGEu4zLaNo3wHshuNmDWNr84lKEmVoXnoS
+fpZ1IUwlLchzTD+Iv88kIVwBE4kMXlU8qZlffVCxAQWOOSS178v7iwc/ApU6aln5
+lXr8JmxjD0Wi1PpHRK4ogtnhikkkN67++aHJKBEYELKeashdxB04kokBl32ywJRf
+oekeqCB/s5xlck7d4hFK3wfawxXqkNaN1q0q39BaaqOPRZFPaJ06umLb2Dy+raMX
+7lNVv30rtiwEUYQiXcEF0j1XNABP14Qkwvk6rDUhM6s1B9c17ZOONeUt03kHjRg8
+tZ3FDAIqHeF67ZROK8WDuVxNCNarS0zn48YZo6xN8+lAn7kNsIVmmio0ChMDJIOk
+hlvlBtO5wd7/9u0+MrcfMej21qbehRltuqi9eFRlLesCggIBAOaoMFyU0XmIPhSl
+b+vKiVcTDvjIPUVf4nlXUYVRIi0JBEBA9NRNNPSs1aruYbGvLUOqv3trTq14DX2n
+3cRepfXSVAV891LmkO372D7sSug72gLfRrACrcq2XQ7YtFynrR1sK6J4lRlzBUjY
+sDJCLod1tQU0S33Sa60RfvhdeP5VOudYq/VGCEPE8mzUGtXL+vH7ZHFP9C8qUHpW
+QhM/Tico3289wwUJRgxj3KUDZX/i1zeTWPK7d0PKaCJy/irntMDawe93Vn/VA+m0
+CqsSikntwKFZmyO4Kg1UnBSNz5J/L4Wq2Af1q6jQuseXrcSeeyNQxrzhJbUDVQll
+R9P9rLPgpMLIKCGIv6bpIr6qSuUFarFNWfqqRuUi76+C7jae3DjBpN6eTtthFswH
+pgK3gcsZCsFFcGfAT5c0kiIdbV7AvfaFe6sz/Ww40Zn/BohrQWDtraxoThkHpw8M
+y+auQydAt47LbK20WzaHZhFU6vkvprx3zwNxinmnNbVE2OSV94AASgp9A4lfF0c2
+AKWs2P24wUUMp1B9tszaRJavo7eqiincZKXHqyWF3FCHBd7nxrcRMOHvJoHQGroU
+7KCm2l6j5wMdkZAOIJfVz2f2oJoGHSwzKgV8vOdYSOyiDR9txHueRbQM/Il8gqGy
+d6aGPpW6P9lBb9H+TpXLc3LEGvEVAoICAF6cf21jQlQ2GnKA9g/StPxSMopGyyd7
+16xQ/3ImFxRbHciQ6+6PMO8OG7MLcni1uTAVyOPWcnwAFgUFYwb6Sz49gnEAbq/i
+WDeFoBsr0LnzHHg4a6FZCLhrEJR3CxDdtdhJusULJTMvhEL72YzsvDQTFk1ZjEVy
+O6Yqrb1UbiAMAklhhlzGP3657wGC/vQUmIjLYhP+UHEFaBPZjjSs+ZVtmDl/wNfI
+KT3ujE86vknfgImNobNmHZaJVTvUZ9wfuoXR6lXGHCkrEgWgb3gNYFBpYJSbWXL1
+rektKzehjcmyFCPj7qnbK4gCRjfyv4+oEIrc7+bFHWv4AIwoEet2gJ9lqtNUgn0K
+kN2yW1DSS8LQtMssF4CNm6sKqcVWzO3nO9EC/p4ggCs5a8l+XBTyI/pnQE4Y0ufo
+JNsRQebEpFVuozYwns8GlCt7YRLRWZXO2+nLsyHlAT9G3eaTBjj4iDqj+8jycYDs
+Lt2+UNiKrknC+9kUO2px0BqNItRuayt6+euAMcp3NIRy8x5f+8xEoA3j0Aw1F2B0
+2Kn8N1aKCeFLl8XLP30EwtvVFgSyuub4sINTrvAqJwj8+kjjQu0TzCDWP28ApHA8
+MvsqkVfqwEd9fN/yL1Ul4EmZ6k4V6UdXgAzaa0YBGVl04qKGhPVA9Wkj9AlDp4DV
+Z0/Qkmr4T7ITAoICAQDntedF62qFLmlgum58QBAbZiEDNiwUlSPUlk6o0Cs/bsSA
+4xIYoxGfQP3T9caKSKGS+JGfiONYgemLWW0V4U5/v+YlJMXctl/TJmi7v43m0tPD
+frjspJjfl3DGOWOb7lVAMOWL0b0MyOV9oBdL+WSBR7+ZiHo6FABqOdJBomO6wrHB
+rKe8DnxE62d9fu1YRL0XVTcJQcSPFhd0JxY8fV9OKPtDLNR6+Q19b3B8MoIrAugp
+M9DLyQwsObCa22A7MP9uLBBTJa2ubJfusW6V11Hf/48rFg6t1ahCYa3gyn6MHxji
+aKIrXH2J8l2pOcf2aAuF1SgeSqnvtnFBgI1vebK+crXVDNYW7GvLaTfEdWRHpNc/
+9/ajew5rRS2HHO907Zub7dNckNeOInpSY7mBoSh1EG/IkdUYZ4hMWlxJzNSu3WWl
+YprvHghpt2uyVMM1fsd39DLTtGv51NJJ5od9GKFWFBI/DRc6iwenKDGIpFi23jie
+c9qb2J2oBiBH9Nt+0hpkqAt61U+306GgrIIUOHbdLWwXy8LOzaZxxVQ4KyVYvDJj
+4zPT6SLaKCqHe8SWSXZyfa3zRIe8pBbAw3+L26yHI7X3aXJGHq6Yy7TbLFypDDoa
+9DNXth8P3qxQq0AckCajAx4ka1glU9vuCAmsetHkgXybSJ1Wire2/zbqQRpWtQ==
+-----END RSA PRIVATE KEY-----
diff --git a/tests/auto/network/ssl/qsslsocket/certs/inter.conf b/tests/auto/network/ssl/qsslsocket/certs/inter.conf
new file mode 100644
index 0000000000..ed350da8ea
--- /dev/null
+++ b/tests/auto/network/ssl/qsslsocket/certs/inter.conf
@@ -0,0 +1,14 @@
+[req]
+default_md = sha512
+basicConstraints = CA:TRUE
+keyUsage = cRLSign, keyCertSign
+[req]
+distinguished_name = intermediate_authority
+prompt = no
+[intermediate_authority]
+C = NO
+ST = Oslo
+L = Oslo
+O = The Qt Project
+OU = The Qt Project
+CN = Fake Qt Project Intermediate Certificate
diff --git a/tests/auto/network/ssl/qsslsocket/certs/inter.crt b/tests/auto/network/ssl/qsslsocket/certs/inter.crt
index 4e1d67c3e0..2d924f3a96 100644
--- a/tests/auto/network/ssl/qsslsocket/certs/inter.crt
+++ b/tests/auto/network/ssl/qsslsocket/certs/inter.crt
@@ -1,22 +1,53 @@
-----BEGIN CERTIFICATE-----
-MIIDvDCCAnSgAwIBAgIQO+uZxerYC10Ll11PBnVL4TANBgkqhkiG9w0BAQUFADA8
-MQswCQYDVQQGEwJHQjEZMBcGA1UEChMQV2VzdHBvaW50IENBIEtleTESMBAGA1UE
-ChMJV2VzdHBvaW50MB4XDTEzMDIxNjE2NTMwOFoXDTIzMDIxNjE2NTMwOFowMjEL
-MAkGA1UEBhMCR0IxIzAhBgNVBAoTGldlc3Rwb2ludCBJbnRlcm1lZGlhdGUgS2V5
-MIIBUjANBgkqhkiG9w0BAQEFAAOCAT8AMIIBOgKCATEAsR4tRskg2IFfQFMfGBJ1
-eqlrNejANw0oM6k5HlEB8uFA9qeyAzmflwQUPoJ55KRQ/gVHTOBdWrtgGgPMiekF
-1Q36Ry1elwbAl4a+LZ6qsc9ASipvk8HirKpt1v5L9hG+aI4yDxyvjNztFtg5R4P5
-zqsh/WwhCgsYmEVfcSDbhUjqoqxGRLaZxPKO+IMCNFrjZqi0yxc8f6Un4G5SQzHA
-4szi/ezcITnAFYWxHG2yaed4hawpxNS1WXabk2rzCi0pWeIcHuIczaCfZ7ElRcqV
-VNNXbGTtUDlfIsh6FAVI5kTUDcPV27uf6BmHuFOu/R9Tjni25+vBFvohwQh7ZwCX
-5COXnfkJLPkJQQEFVQv8nS27ht/vmyoKjERUeiuMd+hFcN5zl7bS5A2JCgi7erlP
-ZQIDAQABo2QwYjAPBgNVHRMBAf8EBTADAQH/MA8GA1UdDwEB/wQFAwMHBgAwHQYD
-VR0OBBYEFGn5shQ0SeTcc3x/cNu6TkoV0bPmMB8GA1UdIwQYMBaAFJQnOLW5hBTG
-pvc2vfcs4sJpRRPJMA0GCSqGSIb3DQEBBQUAA4IBMQAVDS0enQQ1FL0d92xOFfwx
-mjcNPz9oO7jMyEVxAs2eR2QD+xZ3Xj4gAiUEp40aGieDcLv+dg+cmuBFWF61IYSR
-UyuoakVm08VDcLAwUzU+xtSvJiSSROb0GsAnVsYZj4TYlvKDplqfapOYaiIkwF+c
-iE4n7G0hQW9fzqO+n3FGtBD8YUjghRqLggeRVJ2+8S3Bm8cfx8xPpRIO3ksA6opn
-CORRGuzetDHihbks59mkoY3GqKFgBOyrC3kG07nv5wtKjdKDtmD/kS/SAc4fIXKy
-Uruq2uXNf/1BUgF5gFGRyj22yB2D0763fJJpl5nqcLrL5RmnVObQKZGhE2VsRTV0
-untj+AmiJivhiAjjkHfw3XDf8tuL7D4pTmEkGgl5xl23fyeTIuygDCLT8fRD3ZqQ
+MIIJczCCBVsCFBFyNLwh5soEJBP4NUiEpuneliIVMA0GCSqGSIb3DQEBDQUAMFsx
+CzAJBgNVBAYTAk5PMQ0wCwYDVQQIDARPc2xvMQ0wCwYDVQQHDARPc2xvMS4wLAYD
+VQQDDCVGYWtlIFF0IFByb2plY3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTIy
+MDkwMjE1MDIyMVoXDTIyMTAxNzE1MDIyMVowgZAxCzAJBgNVBAYTAk5PMQ0wCwYD
+VQQIDARPc2xvMQ0wCwYDVQQHDARPc2xvMRcwFQYDVQQKDA5UaGUgUXQgUHJvamVj
+dDEXMBUGA1UECwwOVGhlIFF0IFByb2plY3QxMTAvBgNVBAMMKEZha2UgUXQgUHJv
+amVjdCBJbnRlcm1lZGlhdGUgQ2VydGlmaWNhdGUwggQiMA0GCSqGSIb3DQEBAQUA
+A4IEDwAwggQKAoIEAQDf31Hd+5tMLrBf966j4BiTBP7yIS7BJ7jBSUWVStd8F1Pc
+hxB/h8hKj8T8M8Fq2prmxkkjg4epxmgqYeGqYnBqPY0Gke0RXC506WGW8B4IQ+qk
+szVHJyNC2dnZ7byaqj1/vleQESmaQhXRxSvaw3Qu54/SbXuEOot8tiBZ90oVvHHt
+yn1nQYpGGDszTATKMaaqaE+D/lsNzxJGGzndbg9yjrvLRKBRbFIhT7L7ME4d2NLm
+AcXvFHHjV2bEBCvQrShXE0t11qAUrT48rDcBA0OsMW6YwxCBoFXvnpg5iuCfbQGf
+zRVgGIhb8Bo1dV2nTBTMpz9ssupTOmlS1/WJ99w4nPHUHBtYe8QBaWigHbIqyxlP
+hm6NBe4i1EoqY7fsfI6uH9eo0l8ZvB/tLCgFRE5OqHQZXPUHutnlhSoouj7gA7Lp
+VPYundGY8mauVV9YFVDECh8oiJI9/dqq4i6QhLHFXFUG6P95yqgzv9fsy2HKKr06
+2deBjOGMoQv7CRgRr9/JOAYOdk8SeQ1eWRA2O2Vx9N2davIczvuODqP2Y2IqJ9/x
+xvYVZNlnLIrtJvTCh4ROe3+ecdLeg/hFT/J2BmG6oHeNm0TJPnI1bK6TDJYb/Nqi
+EIuDDpbNs4IZn70DCU+Fg1FiV+evAziQ67utijyOg/xooUKVvXH4c5s7jUcFmYJd
+Zf/3GwwLVoTpeBpAKyuZ/ffUZkXUi4GhBS5g+3P+O5LASKiA+785qk/FtY7tYo/H
+VfH+3n1hQK4xdw8VA81LSanhZMYkwpKSh4Per0jeGz5GeYfCbBuxlfZovmUHcq2s
+1seIcxRzcI4f+uAsjdAh5dAn3OFqComcbGls9iWn+mGs41tLgNf+J357N66234DQ
+K0FXrRGyjmlYNPibS3DkCJCmEslNjSh/ObvMSTiJkpVYEXP5lo6Rq67C0iaF8yxs
+jsMfzINqQX0gQj8QYbxmy3M89dTwNoiJ/XJuDKwAGdsfJZV7clUY2cLcCue/XiXM
+xOmGvSU/Bkq6vb2ij7TPeMoV7gNVhNfVyM+h09q1CesTjAauRMp4/ZYYETPkdII0
+Hkd7J9QQP/aUHX56vl+R6kEBE+IMfEIXpsmnKjwxdfbYfiJZP0wewkM0LfdI9T00
+DVc9NI2xqZLPx8N2WxnvmDHrz2kpITBdiseddNK/L6X/sZdxFf+2YQiA3o+nvifd
+iq9/2MyVnghcGOazlmzTB366OS6vbePWObm2+9t4h1yJMOIoXr69XkMzsmNCHyR3
+q84/VmDACRfoeA0h68wpeMphKKjlJhGWD4e3k4hIvbKW5/HvtIJfaW1RBXtpiS+3
+tJwjpHdIZGKW9CKheupACkARHO2udeJRYFi29RMNAgMBAAEwDQYJKoZIhvcNAQEN
+BQADggQBAEMvISwrzGYljSkM/04Iym9m1nLZ8teOLxar0bULGIAVGZ01uBwSwapm
+C5lvsNU+IY3O4TgjhMMq/cLXM0KUyhNK/oD0oEjNKuk10uoqs2sRU6+t+iFtf/74
+xPYImmDCqEfVu2Eew0SMKclPlPOBGHXVm4oOcbCp7xFTTg2YIrRDa0cKekaDDtsy
+gQqMKNk/wGHI9SQVjVerzsqg31x4rvVaI31Ss/KosZWi0La/QjvJzhFF+UJ+AGkX
+0p0iOKzGbMgi9tSLrLTK87n+x48XayW/P1+BKdvXUGXQUskCaEdhRvUHTi5LKFyP
+mZ6xkyCxNig5fuwUnfrb/976VzQCucR5kIVh52WBusgEnCj8mvdlHQov5Vy8dwxF
+4tO51lb92R5Gu0e7XuKK3LMANQO1HNFDASPyI2AQXXCVgrxOqnNSyk9sAFsyRWDx
+9m0v4KjOezukbJ5OssBNVj/aQrvYq+L88Z8NFq9q0DoM2fVzxfbSixpRh3wbMm4c
+Ttv7zXgLFhA/jrrUCiQVzgp0KSnM2Fchi/IxaVH34+8JCC+tKX4EK6vaIif8Omzb
+iEsPUUbINcoIHgfVEYmmk6Z4KcHBKOz/iiTgaPiQJyymGlgXRLKjpkbifbRIm31M
+UxCpv+KyTmjDeDFRXX+Yl/b1/sRNg4TfGTVySsb56vzRMghRPJlnHfMxJRroBo6L
+FZfimQUcJxbNpavPdj29Vg3Y6bXGdUATx1YDHFSCynOnwXE4kgDvQGyoWHHN1zWm
+Fl6JyVor9vb6viBB5HCerZsQ5HDpmQ9UqVs0iWJqYfgyFThW6mZGbBY2inw4hjtT
+oVxVzW8gTTaeYLlrY7BqSpjtWQduSzSgaIiCGuvM3Yg2N6jiHzlN0h0pI+uHbvNW
+F5ZMfVMU8IcheMilj1a7lgmQQas4xy0emo1H1GH9Lcw6+yW7yN77grKOgWhimvMX
+UvoHaxE/T67jpK+SLyyzhfsGwOWhx91BzAFpyDqrYd5ERR8EUUUEVKLYofmDh5Ey
+FqMqQEwXOBQxB1Y/1UcSbycu+Zr6raKJ0G6eCS7O6dlCpIZwpggqqnKZYFnunskE
+lNw5ZpsSHADp8rwRVJGlLxgqM0TEvQa07+wb85sR8Hl47Y5QSq0E/Hn8a2ZcGERR
+chsW89yr7qpUNPoTQUDQ3ZGByzeXMYSvNWvsChomy6GqSmFtnuI6Ta07CNdcbqQ+
+8Pmo8Mi3UUNZueP2VNIdHXeYEabjwl7v8KjyT4bc0/SKk/4L7ADvLxV4Fe1Na73Z
+2hrMwmHCWJ+4sdVFF/3t0yDg9GQMGCTXkbd8ofJwIkM72NAUYAkMvOBx8+NaSDBW
+wvnYOPu8PDnRWerAdoRZUNlKigb6oUA=
-----END CERTIFICATE-----
diff --git a/tests/auto/network/ssl/qsslsocket/certs/inter.key b/tests/auto/network/ssl/qsslsocket/certs/inter.key
new file mode 100644
index 0000000000..8d282647e5
--- /dev/null
+++ b/tests/auto/network/ssl/qsslsocket/certs/inter.key
@@ -0,0 +1,99 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIISKQIBAAKCBAEA399R3fubTC6wX/euo+AYkwT+8iEuwSe4wUlFlUrXfBdT3IcQ
+f4fISo/E/DPBatqa5sZJI4OHqcZoKmHhqmJwaj2NBpHtEVwudOlhlvAeCEPqpLM1
+RycjQtnZ2e28mqo9f75XkBEpmkIV0cUr2sN0LueP0m17hDqLfLYgWfdKFbxx7cp9
+Z0GKRhg7M0wEyjGmqmhPg/5bDc8SRhs53W4Pco67y0SgUWxSIU+y+zBOHdjS5gHF
+7xRx41dmxAQr0K0oVxNLddagFK0+PKw3AQNDrDFumMMQgaBV756YOYrgn20Bn80V
+YBiIW/AaNXVdp0wUzKc/bLLqUzppUtf1iffcOJzx1BwbWHvEAWlooB2yKssZT4Zu
+jQXuItRKKmO37HyOrh/XqNJfGbwf7SwoBUROTqh0GVz1B7rZ5YUqKLo+4AOy6VT2
+Lp3RmPJmrlVfWBVQxAofKIiSPf3aquIukISxxVxVBuj/ecqoM7/X7Mthyiq9OtnX
+gYzhjKEL+wkYEa/fyTgGDnZPEnkNXlkQNjtlcfTdnWryHM77jg6j9mNiKiff8cb2
+FWTZZyyK7Sb0woeETnt/nnHS3oP4RU/ydgZhuqB3jZtEyT5yNWyukwyWG/zaohCL
+gw6WzbOCGZ+9AwlPhYNRYlfnrwM4kOu7rYo8joP8aKFClb1x+HObO41HBZmCXWX/
+9xsMC1aE6XgaQCsrmf331GZF1IuBoQUuYPtz/juSwEiogPu/OapPxbWO7WKPx1Xx
+/t59YUCuMXcPFQPNS0mp4WTGJMKSkoeD3q9I3hs+RnmHwmwbsZX2aL5lB3KtrNbH
+iHMUc3COH/rgLI3QIeXQJ9zhagqJnGxpbPYlp/phrONbS4DX/id+ezeutt+A0CtB
+V60Rso5pWDT4m0tw5AiQphLJTY0ofzm7zEk4iZKVWBFz+ZaOkauuwtImhfMsbI7D
+H8yDakF9IEI/EGG8ZstzPPXU8DaIif1ybgysABnbHyWVe3JVGNnC3Arnv14lzMTp
+hr0lPwZKur29oo+0z3jKFe4DVYTX1cjPodPatQnrE4wGrkTKeP2WGBEz5HSCNB5H
+eyfUED/2lB1+er5fkepBARPiDHxCF6bJpyo8MXX22H4iWT9MHsJDNC33SPU9NA1X
+PTSNsamSz8fDdlsZ75gx689pKSEwXYrHnXTSvy+l/7GXcRX/tmEIgN6Pp74n3Yqv
+f9jMlZ4IXBjms5Zs0wd+ujkur23j1jm5tvvbeIdciTDiKF6+vV5DM7JjQh8kd6vO
+P1ZgwAkX6HgNIevMKXjKYSio5SYRlg+Ht5OISL2ylufx77SCX2ltUQV7aYkvt7Sc
+I6R3SGRilvQioXrqQApAERztrnXiUWBYtvUTDQIDAQABAoIEABn2G9hSRUAgafO3
+FVmLs03ZVnddwb5EjPhdNuSJOVP6oI8CWrdvV5rN8VoN5nAtyajZdcHYjvLxP0Mq
+9rB7me24FZKdeZB50ClepyKJ1fG/boaLAbKupzgpa0oKd8S32UnnGOBsHRb2cvFQ
+nDVSVTbbQ6Jzb891updLx5SnSMAcilm5EbHXt+FJDhR0zFlmSJ2aWx5DcOu5B7V5
+ksxK5x+xzbVU0AKhPST/yRG4GFb9vfdOXVXMWSi0CgbRNQOOEQ+H/Ug9C3NaY81F
+a1uCtWZSlTDB7jgaD90p1x1VLZdPXNDbR49NSQLgZSmt4p50BDV3b7N7TBE6xNwG
+j0Lgq3klOiYO3Fz2fVRslOV8jBzKULUYMdnIxkTjuXYQ+lNCXolyx9+cBctGNa2b
+YUi7ExmsD0qhrQiocnxbZPg0IPZ5d1X3tFTTmGrUMXQmElh0oFkbk2Fv9QWbWrBW
+am/382Wfv3x9qKLHDZpytOeQ7lYzfp5EhOlRHRbh1jHWbCQg8SK0jH9A2QqbXyGB
+0o93c9wzOT/4FvugRSvEJt97xvZ8iUvQdtkkSNHeKH439kpYzM8NI0+Mg5eqVjAz
+hTqKouqxkSuqxd9Qjo4DfHsxCndUa0ZABO29018nYf72t0SS39Xr1JRC/WseRIEJ
+1UnargsY4zx+9unGfmEBhw7w4zuSyiMARmEmigdKvofTj7V4nIBWmy64Pvp9U3iQ
++lx9mtqcybdNLA5VOrzF03W8snO3xxSBC2If9Vr9uelRtBecTYa2pRVAhfwrLlVR
+fexDIzOTHrm7kwZnFAfVf5y6pz7m2b7kMZxjRvZZ+WQVGGwafwPAaCeHR3txKd1L
+ixHRUwvoseef3hqDPzA/0CtcuSfk+IPSrCGbymWMpRYtSDkHectI6o2BolUzjY95
+dpzILDlCHewAWJbP11Hugi+NZOFXluom0vCVYgs8Y61S62xFqHifzF/usHmQ4laP
+zHQkoIaZlTHA3gxKDpYpyJw5/x7WQ4UAtXW/GzS0Bec5FOEv5NtyEW4s/jYkX8J4
+DlmI/iW/q/LG+G7EL+AnOqnnoBhY045mUFjXO7OpWH2Kjt7XG6zXMSAsDKm8Wp0o
+Ily9FgfPxsHOw6i3NrOWNVmURVyCqY1Ut8F/T1vQ2e8b8O4FlaIMQN/tjgSpkaDa
+8ziPehQEZqZZKkmq6InZlY1MlqXrXivZYkDJCqzhGKxIPt0C3sfTBQxCzJwIO9ma
+STOxdgj1HfczNyaTwRYtbdtkroOKWclmB3lbQrZmT5DVKCtLvwFAG1LYGGy4w8gf
+6/IEsV3uRGLMbnY+qvl2eI2wwI0FYYaxdydiNDYHyiK/Wea8QCsbU48QlBB7W1Of
+zzNv+gECggIBAPvP57PPQaeDKZRb/lbVjw8IIPN36Vb2ZSRBoYuvSb+a+62czrYI
+ZNbadBb9VCx99VlDaxthE/9m5Xa5JhfHckf0dSYuXzX/fnzXlT+J/SKLhGVXsqG/
+HBhXu75wn6cvxV8D0WQ+C7I8xIXHeQsyC5u/HFHtOiAZjjg/BInBIenCdtDLehBL
+axBN363U7hmd/u0wDiiKKSKTDZwBcnfQUdEmdDT7VvnYdQVwsBmYXR0XNS2bROGH
+NaJWxIUUPS3Sv5KIkNSzGCgD/FDGa2w1tRfKalMXZ9ttzCzmKGcHNLtLSeC0Be5Z
+mG6Jc1dTKbhD29VLTJgidnNne6VkZjQoLXJEeWWQeRqpCqOx8AUp0b1d9Zhdf52b
+FYazIyoD2ARMyj6S16xalSS6mYYMzvXI+LXMjS3WEM6Vxxk1is9LhQdD7voszCVI
+SOIZheub+ifssPvbw2fdR9V+euT/Gx8IAnYYFPtW8BLvAAvp7Rgximbp5bs8SdkV
+9ciPCJAC7DRgBUT3CI3Img5c53ZONoWUJVjTBh3BULBdsk5QFLUxj4WXv+ckoq4T
+2qCWMXdFF6EFbh31dfz1S+97snOIkaJDlo+nNvUIPYeNuPMwFaNLcg4XebVFw2in
+24C5l7V+jAE123seJLquupQETAOGCkEYwPcQPRw+jDnyAfIsLFKc5G3VAoICAQDj
+mHXltSg9zQACyk5ky+EHyc8nwJ3i6zWGIlaaJ/6G1t2pLXv9ZsLLvYI0nuBM3Qb8
++SJajT2TKsH9kLd0BmoBMgqM/+cA5aGCCrdpmAdSSkrHQOOSaNVSEu3oqz5n0/ft
+/sh4Sj07n7w1rsorK3RbP8ZltYjrQriATiIRV9/tTayZfi9uwpl+0ByvZbfqGGbC
+wbDFHyskbwe4OZOrKDkf6sKCyzLsVI8mujmqE6BZ6pskbrXIGbUPvau9azpHbcvY
+WY8Bk8Rv29BCHt8m9Qvgfet3dxoWVaMV3W13DvVs0zEhYTfphL6WP+STNt8vuU5/
+A8C5MOwelLzzGxeIl915rC3Y7PzYZlO9V1KQv3DhBTub7Ow8Jilhzsan3Sx0CikO
+B+HdcjzW2YWxglqC/QX7jtVUIfHvssQajNzv9C+feXU//Fn0uudX3xMUxbBXsBJ3
+x17IXHP3a8PGEbBp454KhhFlmTyk1rUkGboctakepV+nkl4FZs7ClK4u9plMGuvy
+02QDuy0cVn9pLrqpKimKNUzv0Uz6UQfZXphCB31BDA7nxhCvK1LQv79BIBon0jhk
+KMBMMJ4/FsNO+vU0a2fApu99ZkbpIPPWsDnj0W5uyULVZiJWh4pHb+Azo8/EptA/
+PdcYIZm7pT2NmXyWalaNE+2Fj5iuT5riKsGr/P1UWQKCAgEAo83y470G8HkaKzBM
+myABF74p8TcnyzItSRCIjd1RFBs1bRJ8RV3gewNQUUQp5Wdqms6Idh8IazP8QObg
+KMfNR5F2Q4gW14GEPqHerJ6O1FH9pg8OXLl9BTjNIG0S7ibdNZm+NH9IDIILNRs1
+WlsLwhznx0OSdB8rrNsRkKrZ7L5bnCdBGCh3VPvTbbj9yhxFIPYJv8VgTOVsDPfE
+Bry0/GEPZwe45H4yYX+UjpHWwH3AUhKXFD5oXVokLI2l3pEhnajIzhRSunUdRU5N
+wu6NBxTdZX/sR4l9MBfoYF0HqG6peEqjMRGHXyB6r2uh0AQUlQOOp8iDVT8T59sP
+wQ4BwjtY3QDGRtl/2kx93l392jms8Zig0112+1C8pzAo7WMmjN3o/m1OZ74a8GCU
+oL5DS7/sdsyx0jEMexGhYoe12awPYR6TDg2fm7UOsN2eNSp7Vtr2mjIP8Il+WEi6
+08zaDQhNXdKICUj/tsBNQ1e2uIuerdXiFB187SJeZ4//J3Lu+pXYMqMz0/QLfaIT
+RYHBaa6cY+7FFnVc8CSX0+aRfk3gv/PM/4Baz+vj8bo4TL7DiymJvyuyYe8Nfqpw
+UiW1Y21bCrp5jBxdG5VD/h2t7AzJV2oyW3oWB/6y+ZWAbakjRUuuiOHw7Sh+aixf
+r0jy/cTKe/0UKv2K1oZ1rqfw0KECggIBAOHCKbBhsjkbUBd0da6mTeFb3ZChD/w3
+NDCJfz4Kzf8Sw209IPCLLk7K/I0Vy4hy9quYtOr9j0ab8zGCi3cbparp6G1Uqd/J
+6BsGZkjn9Ns7tlFPnG1ub6up+zQAKTb0m8oIIPKxMWwjVp4pc4C+6fxZloLtP5Od
+60XaOxDZCdZqZfsboBFOFtQju1CApZ4f9k7Zsm7WLAVH3XBwLHpqu79dLvRue2TR
+u+2+a9S5AyYuARZyev6yAVhL3D9YTcbssnc43xHBcelDMaFk3hXWnKFiRl+KVOYy
+rELUEfE3dVstYl6qALwyYJrJZgJhO6IrPiHfpxwL2yu6fnLnPMDRY299yzySV3yQ
+hCAcrlnGjEGo3ygcK3i+oe3THlsEmUPBkFfKmdD/sDmuK1+Y3g9wzK5rUFDUGxiZ
+SszLTZz3qwWVhSijONf5TeFr9ZF1Rya0EJ2ftfUpQB79VoTypvtiPTJTKo6NIgqg
+r63Plz1DNS6g+/FMztas1AtPUDhlhEppqgKEjYDl+ilR47CCGcYTfIELvfVkt+bU
+2eRUYNOeejA7tc1SOtqHLu7CRQRkw40cibNQeO8ait4pxjJh3TjSEWiYLpdFDLHT
+bgxXYhUJeXGLUjA7z3PlntSdtNeEdmOq1Ibm4KWfLs9jaVs8FMlfUds/GSyS8/B0
+Jj6SCup/WQqBAoICAEkNfMe4BOR5jm3l625O2w28b37tzl/MIpvofXX/pIw3E7Bb
+KL5Djv/rQNx5FmwEdE/1iR5fqQtY17nhxVQEoAPUrdJxaPR6rWnnDLI7tg+Vme27
+x+KDaonj0mMqVopBCs+G7+E8SDDeFnDyOgJEd32q/m4Mwujv7AuKH7uDl2cER2gc
+5xnYyJexlk42DW7X+6fdYZxyMoGFz+Qxylj4kO9UpEXk6Yb09uFZaX1yGJZhuCWs
+NgEXYYfTHV47XTF7hOrs+KlYQt33TY+zfOV+ySn0B1PFJ5fpCC1n4qoysdfjquwJ
+Q1FmNCRYfA/SS8rnzZVTY4zh5//cryvzhiVNWDEoXx4PDEkH/xgvag/KVKDZahCr
+lwXG8Ipqn8WUZWy/fq6ItOKPQOIECk/hctf9awBYU97G1Qk4LoCNOzbcnBY4BvKo
+roxcm3N3uaGPiDuapmnCfKNrvGmlQvWWtI39paXRWezARHBFQVFzp3w69/MnVDD8
+zmeNrOLCxCxmMxCrE+nARSHANUG5VXLbAK0dfPm5+3eLnvuD0GxkDhUwQS7r8kcP
+xalXLIa5oul8gBwQf1YV/FPNzTxsB9EyaTAWJzaLOYwq/ugtzr6yHvDIUvOxhnHr
+r0sXSrqOWhl6uMaMoExTTmVsEXgzCFiXBufo7CwT1DFyS10nNNvA/kxh3rDc
+-----END RSA PRIVATE KEY-----
diff --git a/tests/auto/network/ssl/qsslsocket/certs/leaf.conf b/tests/auto/network/ssl/qsslsocket/certs/leaf.conf
new file mode 100644
index 0000000000..5ecbd31b55
--- /dev/null
+++ b/tests/auto/network/ssl/qsslsocket/certs/leaf.conf
@@ -0,0 +1,14 @@
+[req]
+default_md = sha512
+basicConstraints = CA:FALSE
+keyUsage = nonRepudiation, digitalSignature, keyEncipherment
+[req]
+distinguished_name = leaf_cert
+prompt = no
+[leaf_cert]
+C = NO
+ST = Oslo
+L = Oslo
+O = The Qt Project
+OU = The Qt Project
+CN = networking-tests.qt-project.org
diff --git a/tests/auto/network/ssl/qsslsocket/certs/leaf.crt b/tests/auto/network/ssl/qsslsocket/certs/leaf.crt
index 4a7dc40540..b9af13b896 100644
--- a/tests/auto/network/ssl/qsslsocket/certs/leaf.crt
+++ b/tests/auto/network/ssl/qsslsocket/certs/leaf.crt
@@ -1,23 +1,54 @@
-----BEGIN CERTIFICATE-----
-MIID3zCCApegAwIBAgIQEKCtd1j2bq5Gk6ND+VmKnjANBgkqhkiG9w0BAQUFADAy
-MQswCQYDVQQGEwJHQjEjMCEGA1UEChMaV2VzdHBvaW50IEludGVybWVkaWF0ZSBL
-ZXkwHhcNMTMwMjE2MTY1MzA4WhcNMjMwMjE2MTY1MzA4WjA1MQswCQYDVQQGEwJH
-QjESMBAGA1UEChMJV2VzdHBvaW50MRIwEAYDVQQDEwkxMjcuMC4wLjEwggFSMA0G
-CSqGSIb3DQEBAQUAA4IBPwAwggE6AoIBMQC7EIWIzb7XCfmQQ1KFdZ5E9f49eNK/
-KvsXYfq/iV29K1cz2hUyvfdKgyU5F/+BOPQKQ5zdWn1CraZosFv/ibuO3mhRpMfB
-SfNn3rfdrE7WtA0wgT2YNIN0L4aCe+C15j2ESdmyMaFLUaUIS47JS66UtaYxp5ia
-mJFO1hSNaoI0pGHyPFTTtfOza9z/01qkBbHB4htzauqs/fX5ZrnyCDSrfpVipXke
-zkPKg4MkkytEkjRKw6tSXLpWIgF3ee2N/jBdefqlw8YPW08K0wmwF5qGuX6PZ8vB
-sOZeWeCfVr136BopkbfP3TkGWw2BrD8xSzOUez9HVc0v4SZ/7pe5w3L4V/mzYQLt
-O+1AHevCjX8+M58HYGBaWCAjxYUPGcGKcj0LLtgZgL6wY88N7RtfeOY3AgMBAAGj
-gY0wgYowFAYDVR0RBA0wC4IJMTI3LjAuMC4xMAwGA1UdEwEB/wQCMAAwEwYDVR0l
-BAwwCgYIKwYBBQUHAwEwDwYDVR0PAQH/BAUDAwcoADAdBgNVHQ4EFgQUKKuyJSrT
-Y+dnm1do7l0sVMX96SYwHwYDVR0jBBgwFoAUafmyFDRJ5NxzfH9w27pOShXRs+Yw
-DQYJKoZIhvcNAQEFBQADggExAHELijlIFdcncP3B+vxEp0SGKl0arIaCXahivb2F
-VxeM3WajN6O+oDRLFltzMeDKA9RVkao7fgITzXQgCGzeNhKv0vc9iDyvR9/67vuS
-W8xEEJrYowtw3VK5H1y0ewqZaxJhvKUjm4TBRWe8FGKD3s64lEsfbjOaI5VPidVc
-DXmdAlXsj0Hk+v4Ej8mshPQAnVSyJ3D0ZMgTjk8Di28N0qROFIYJaTObK1rCb1nQ
-GaCcmbZU6JnkYvVZ+iUe5U0GXFbb+LRNTUT8/fw1zADeHnv/G+WWVrfND+sov5Oc
-33fkNE6z+n6ayABVnGLuCYhbzD38sv0dnxeh8vbykNBPzYdzPg6nw3Czv2vlhKpJ
-8Yj/maoXuAyTXVf30K1/fAWyU45noq57MjQpU6UxIX1D7qw=
+MIIJoDCCBYgCFFjfM8GbvMVRegCGZEOUQeIm7z+JMA0GCSqGSIb3DQEBDQUAMIGQ
+MQswCQYDVQQGEwJOTzENMAsGA1UECAwET3NsbzENMAsGA1UEBwwET3NsbzEXMBUG
+A1UECgwOVGhlIFF0IFByb2plY3QxFzAVBgNVBAsMDlRoZSBRdCBQcm9qZWN0MTEw
+LwYDVQQDDChGYWtlIFF0IFByb2plY3QgSW50ZXJtZWRpYXRlIENlcnRpZmljYXRl
+MB4XDTIyMDkwMjE1MDIzMFoXDTIyMTAxNzE1MDIzMFowgYcxCzAJBgNVBAYTAk5P
+MQ0wCwYDVQQIDARPc2xvMQ0wCwYDVQQHDARPc2xvMRcwFQYDVQQKDA5UaGUgUXQg
+UHJvamVjdDEXMBUGA1UECwwOVGhlIFF0IFByb2plY3QxKDAmBgNVBAMMH25ldHdv
+cmtpbmctdGVzdHMucXQtcHJvamVjdC5vcmcwggQiMA0GCSqGSIb3DQEBAQUAA4IE
+DwAwggQKAoIEAQCjQsmsZpATuLv54ERkqSdjWZYuulm5gZwzz9fS7R/K1CoSFQza
+T+rY7Kauv1zpalfZGNs4zmEiHDsJ/hhVxCC0L6L2PqmkZjFT9psAkPHENRMIvBYl
+QsrJbSNj09UeBfAR+ux2vktreyZc3UFyq74iQbHeXFuzDnH17BZMR8nMs72wDD5J
+QMaRmvtEvOlNuiT6X7YluO7L3f4EAGbLh3s4OxDHOIqtSXkFjMlgmqU3fKBsZ89F
+YlYH/v0X6ItK7tMbwJjXea1gPomO7pIH2H7CzTQ2DNL6fGRvqCFjZeseZudgRhwN
+LYz67yDKtZ0TvjqD3ShEboh5CxjL+8kskmofBf4WcF0z8xg2GtopAwFQU6ZI+FKY
+rNbUvTWcew4Q/Q0Ya01obeTXsOKZ7IVAo5SxOFSdBa+wS4Igekl7A0C9d9QTduxA
+4fnD+Rhw0dvZqL3lBnSisIsCIo/WK6g2L/gYvgRG/3ChRibfeW81rU8q6+MJIx4P
+Ad3f1wvEWGAWiYYnHfF0qpxhd3UYUN/31w3idaA4LAuQCOSfQHKnGEhp0hVng68H
+seclzMWNHSGoJ+BpOfyYBCA75qIGWjM9RLam2J1qh6ODYVs8XWBdbnoWgWjBluCd
+MQyWSjaJB0m2loe+NGSnBdatEadsq4+axBuiKrSrz7KSiISdozEFq2Ua8HXAntII
+GLEOP4rtep10w/VLxF5y/3LV/8p1I0betPvrL226/zZJQep1bttodL9Yh2xNLk2J
+h9GdxIw1CGJYQmLWxwUYpYyq05WSZyjC8e10xE4po/f4Os89Nj9LG2IdW2VKdOsn
+kRqeTJaCGtJOpcebzBSbHQ2YWcQLhLS/CmmxEAaWLZuQUOMx85dGTonqvmdmLwgm
+KSNQMRvvEKt8lwqCuw5nPmFyHpnK/l6B9OA96FO9RbSwYOEmHK0EJM4tY8swYCsG
+aYdb13MzHW1g1bnsyZbXbOOn3DbyudIWpIvMhJxjBXapDKb3oGMacLfAtlWK2GvY
+wD3UrQhxqvwPcDngqOWKkNtGoRKrqhxbp6CnoUxMEn9Lzw9TlSCcGlXQo1m4CF1K
+0yP7CzTgkBSemAs8VIOh0zNBCI6VKV148r4+j/eMrt25WawAAFddNsPQMFxxd3kk
+wkVi+/YAISLeArR55vsg+FaspD4o/IXIsFYnU/FfNPkz02BaUR/Rz99dv7doM3m7
+dT0kTuZiyGbwXxeY5NYhHfhkEk/1wMfoHRBFSjXwDmIU7CULfWE5HKlfcE9FBS4V
+R4LL9b7b6z1Yj+rNHVeQfIlTSTeX7694rB51zn2FRBr85c6TxfpbZu6j00d5qS0n
+hr16guvSxKdWFmhghJmZmWDkkMcOakY5MG3RAgMBAAEwDQYJKoZIhvcNAQENBQAD
+ggQBAN43Kko2uq+2tejqyRQS+oUQkM4zshCTP3E4pXKZZrsx2j1gqHqA+2ltrCji
+YUIDNuLgQa/gvww1wfmLWOgRdq7cNXZJnXbyOog005aiwlShLGwD3JdEcjjc0nBD
+oGiym83piLuuoEiM/z/v/4lXzWdjOUalnmkYGLs4BonKCjCNuM6skompycMw/DOu
+Ou0QW7VVWsn2yR5VT1+BIEgjFNjk94mTkEDo2R7CqZhxMnqb+dNQ17J55YI13IsB
+DFNbSPdABi8ve5jJg3fvgC/u7+DKQP97D9Rc6RNw4zHzmpBYWvlEzygc1GQb5R5l
+rki2cDz88W0VD7d0lZEeZV2w7ZcGTNDVDAAuQYC75Gyb0/69/5aiV4LlfyayZFgB
+hQBlgKffD3CpcH/YzWeDjsspzpR656jAZhdbeRNhKX9ifdwh97Xf4fapJ1YFLdZG
+dNqz8Y3SrT09k9tORP2Tpsx9spA5hT4I+PAVEJzJP01MSOqm/wNcd15NEtGFrbhq
+eru4GKmMZFmfQIA6pnP4t1C/pTSYCESLnXvXmGYBX2Co6Os8vmAok1BQTyWBbOxE
+nCm8lChE1/i4qjBiiPIZU8w6J+PwADfRU2wRiSVRWmL5hmTqtb/4yNkytNw0HyKe
+98hnrrwd6B+ZnzvNk3NTGLJbebhHalDR4gSNrh4cgn09VWxH5gSsDsZI0US9q4i/
+yLiHJ0Ol1T7kilURO4+8qxNK411wNW8AW23tVa82uprpB5IYciQkLLyoK1XfdMRf
+aGoGT1lZQl6da/20iihQCWAENdiaoCC6/h9hZF3Jwj0tEPB83qGuriQflP9MxS+D
+2/IeTtSLfpbBOo5O5kJ2okKGOrp5X8+QWMS99Wk+jpFdmg/t2D3cS3JsrwPGlBU8
++PiW1SklS9pbt08o5O7jT2dwJd1oPk8woeJl5uft2EoPwaiF1rCYaEi7tWMQPxt4
+10SlaDQ8GyLCOz5NFyyn/ilOmwy7L1FDOhnnTu2JO+K8MSi/x1a8YXSEifCGQbvr
+niHxP0g1SQQB8yOyo6booHuJI1kl1h8J5mDotl8XZ04jtjvg4Bcdi+CsfBkS6nJq
+2FwY82yFQyVRw8j24DExDKyZO/0yDY/9olkI06W/HcOhdm/zVwDBDJRDILPrdoI1
+29KIs7acAsdVNLMf8a9Eljl847+sFlKiCQ93AmobcmNN7QcjPVF3e7IF6XMoY05H
+JmYjbHfoUIbv0N6BKIAuPF/dGO0BFLuE7QLQ1d4Gyg00QI/9QV7yKP1LCTy4yano
+WTmoSRsgChQ7BcfNNV9ucHrZlbtgXQf59A7CDY/z6tUajtjkmOrDEVpkE96he+fe
+y7Sk5pZgg67qgXybVQfxbPwEK6A=
-----END CERTIFICATE-----
diff --git a/tests/auto/network/ssl/qsslsocket/certs/leaf.key b/tests/auto/network/ssl/qsslsocket/certs/leaf.key
index 54327925d8..738d5ea8b9 100644
--- a/tests/auto/network/ssl/qsslsocket/certs/leaf.key
+++ b/tests/auto/network/ssl/qsslsocket/certs/leaf.key
@@ -1,32 +1,99 @@
-----BEGIN RSA PRIVATE KEY-----
-MIIFfAIBAAKCATEAuxCFiM2+1wn5kENShXWeRPX+PXjSvyr7F2H6v4ldvStXM9oV
-Mr33SoMlORf/gTj0CkOc3Vp9Qq2maLBb/4m7jt5oUaTHwUnzZ9633axO1rQNMIE9
-mDSDdC+GgnvgteY9hEnZsjGhS1GlCEuOyUuulLWmMaeYmpiRTtYUjWqCNKRh8jxU
-07Xzs2vc/9NapAWxweIbc2rqrP31+Wa58gg0q36VYqV5Hs5DyoODJJMrRJI0SsOr
-Uly6ViIBd3ntjf4wXXn6pcPGD1tPCtMJsBeahrl+j2fLwbDmXlngn1a9d+gaKZG3
-z905BlsNgaw/MUszlHs/R1XNL+Emf+6XucNy+Ff5s2EC7TvtQB3rwo1/PjOfB2Bg
-WlggI8WFDxnBinI9Cy7YGYC+sGPPDe0bX3jmNwIDAQABAoIBMQCczBNyAStGqjjC
-oHuKHHWmTh9mPWFBFfDTv6/jXmvxRWPZtaHxH2Qp09Wejqv/D9MWy2ev7spx2oZS
-2Ai1ICjTbz83uAwryyW4Wen6aBTJSLCJiLstWk8ZU0DHHLjVH4FO4mwUPh95t5zC
-YDr2JXbXdY8xrc5vPxUFZNJjWvR61ZK37bQYpTn5mZ7r3KfsNk2yOylRTDwa9XFo
-ZZ+B82NKdrrz0UvGOnXZa5qd1ap7V+67FIAS2Mt8AMzSCG8TW0JXRUk89ISgAd8r
-NQTPtX9XCnMZSbBzDKdznXfHS9ZlJcSrpsbQCPcvMVNrdBfCF0eNnsRJffJGdaXI
-MsN6PvbcXWD08lXNGyeLjon03RdJnTAamNM3YQEIcjFmu5Y0o0CCJkZSCJPKJGMG
-0d/1tN/5AoGZANOcOgQZ9Wiu0ej3YoQ3aSHu3y8ZBJH4B3ViX8i+2x/6UnG7KNaa
-4Ygid1upnX6hk4CW5WZcoxGFacrFRpInKh5Ng8lEIHGp0VSzOBVDR0L5sAxutFuX
-6N9C0CuH80vD101mOloNnfT5KHZMI5RXqP6sDGUFlwak2XybDL1qOAza3gZAy25H
-vS/ll1BneBavikR5j+zxoTztAoGZAOJOJ5RyOrqpNuhiWZylah5LIFT9N1lCF4Hl
-ZbFIjUZ4jcApJ7JxkMXNQ4RU/3AiKCC1xr5ib7dd/qyjKXhdMo4SnLoKhapx5R9G
-3XOsQMahiCD/Zcymv9tmk8MxxzbLxhZYhEPzIP/NFkua3CHiX+d1e6fkzFLF/EiX
-ZGQOgRcFKrlzUeBputRQRXAkKJH+kMClgAWvy28zAoGYKyaMXhG9DV+4xjzMBhIW
-iijfsgbz+6AMRU+OIK1qmZa+ARsdNMXYf54noLVxvETOg0ZB+SGizwvZitO3lE4Q
-NKWx3fTaeNMcMJ1rLkrN2UZ5M8/PT24muoAxWu8aGbURzmKuO3bTYwT7z0OvbayC
-dYw36tG8/knXX6Vub6GdVGG9LKFB2nceiQnUVT0EK/wXwebYBoUvT/ECgZgF9qdG
-Wyg/CPyAbS8NWLKOL86fTrjpqjsyWhgu7smCROT/XlZEdoepHrqbvx2oF85U5lVh
-aPimrVxrsjUCjfoqEkV9BY/2KOAvzc9CIBTo5xLOQ8yr8uz1XCOiriogwIfsyNJb
-dAm3k/D1dxQ79FowoEDs8LONrtfyFcM4e8VdFO7GSkqrDj41IBRkWx+SkVHBMdtI
-yxQiTwKBmQCWym2iDCJg1ZZq4/lVwRudMhVmHoD0yoCAwADYHjjAi8QBplM0vfdd
-CESKsnBhlcrPGB279BKVJyZHehKZG+/dfnFs+to14l6A3IqU2d6+pu3EyFNX34HS
-xo+64QxMeF0akWnSaIPfUJfk36phjCvLBr4eLXN1i4jW3RdGFwF1THXt29VSSGmU
-q/hM51H0bsQ13AIVUSdNHA==
+MIISKgIBAAKCBAEAo0LJrGaQE7i7+eBEZKknY1mWLrpZuYGcM8/X0u0fytQqEhUM
+2k/q2Oymrr9c6WpX2RjbOM5hIhw7Cf4YVcQgtC+i9j6ppGYxU/abAJDxxDUTCLwW
+JULKyW0jY9PVHgXwEfrsdr5La3smXN1Bcqu+IkGx3lxbsw5x9ewWTEfJzLO9sAw+
+SUDGkZr7RLzpTbok+l+2Jbjuy93+BABmy4d7ODsQxziKrUl5BYzJYJqlN3ygbGfP
+RWJWB/79F+iLSu7TG8CY13mtYD6Jju6SB9h+ws00NgzS+nxkb6ghY2XrHmbnYEYc
+DS2M+u8gyrWdE746g90oRG6IeQsYy/vJLJJqHwX+FnBdM/MYNhraKQMBUFOmSPhS
+mKzW1L01nHsOEP0NGGtNaG3k17DimeyFQKOUsThUnQWvsEuCIHpJewNAvXfUE3bs
+QOH5w/kYcNHb2ai95QZ0orCLAiKP1iuoNi/4GL4ERv9woUYm33lvNa1PKuvjCSMe
+DwHd39cLxFhgFomGJx3xdKqcYXd1GFDf99cN4nWgOCwLkAjkn0BypxhIadIVZ4Ov
+B7HnJczFjR0hqCfgaTn8mAQgO+aiBlozPUS2ptidaoejg2FbPF1gXW56FoFowZbg
+nTEMlko2iQdJtpaHvjRkpwXWrRGnbKuPmsQboiq0q8+ykoiEnaMxBatlGvB1wJ7S
+CBixDj+K7XqddMP1S8Recv9y1f/KdSNG3rT76y9tuv82SUHqdW7baHS/WIdsTS5N
+iYfRncSMNQhiWEJi1scFGKWMqtOVkmcowvHtdMROKaP3+DrPPTY/SxtiHVtlSnTr
+J5EankyWghrSTqXHm8wUmx0NmFnEC4S0vwppsRAGli2bkFDjMfOXRk6J6r5nZi8I
+JikjUDEb7xCrfJcKgrsOZz5hch6Zyv5egfTgPehTvUW0sGDhJhytBCTOLWPLMGAr
+BmmHW9dzMx1tYNW57MmW12zjp9w28rnSFqSLzIScYwV2qQym96BjGnC3wLZVithr
+2MA91K0Icar8D3A54KjlipDbRqESq6ocW6egp6FMTBJ/S88PU5UgnBpV0KNZuAhd
+StMj+ws04JAUnpgLPFSDodMzQQiOlSldePK+Po/3jK7duVmsAABXXTbD0DBccXd5
+JMJFYvv2ACEi3gK0eeb7IPhWrKQ+KPyFyLBWJ1PxXzT5M9NgWlEf0c/fXb+3aDN5
+u3U9JE7mYshm8F8XmOTWIR34ZBJP9cDH6B0QRUo18A5iFOwlC31hORypX3BPRQUu
+FUeCy/W+2+s9WI/qzR1XkHyJU0k3l++veKwedc59hUQa/OXOk8X6W2buo9NHeakt
+J4a9eoLr0sSnVhZoYISZmZlg5JDHDmpGOTBt0QIDAQABAoIEAG4O1A2YhoAFBROK
+EBEbxyW+evO9REc+DKMQ9hmHKOt+422VKzjwrwzVW/hpoKTpv5bmnsJIvkpUZahy
+1szajoFpq5382DevfIlxsURMce8nKFG3Gea8hCANptHhN8YpkpFMaqQR3J30QwRP
+U5OOG3rUdqfD8z1d+40hPlbl/jA06ycG2eZf+Hyn0cOg5lYzqkHuy8faR4C/gkII
+U0PZbUOW7dSfVT1EToVjR04MclxZc3wg7yWDCSQSzWOUrHIzVbVbvK1lpW9AOVNV
+mLQZSjrgQtY9Bu09diefXAK57ipsjIXmPXrUvjlbguukSuPIVYIXUNHxAac3x9ub
+PR8DBO8tBwDxdqNSuXuf1nnXQMd53JtMa8Hoolp/wuhePDlPnchcba58hsywvdGu
+FJZisBZYNxIzhyB9hpeGWIrIwpf3c8w7W0DSFaH7BnLnxiGRE5KVK4ORJ+Skj/p9
+K8R7yfBECHYkNTVDKWl1X3b8AmaY5lB+kADl7UC8o34VZZFL3Ff6Y4+WhB1gfluK
+CbH2E7IaQYwchR7wH88Ljz79q7NKoItLxm6Vi5F73aEnhkzptOq64IFKJsC61Xca
+z3f6HneTh2sNTTmAJBUpjZDurPcG/iujHoBZVHbsSJ9Pfm3MRG4Au+mske/R+t/T
+N9fJZCeKSomYVnVZ+qyaGq4LwPjLFaliBb0C45RD/Eg3z081jwdhvNQr53ChgeX0
+FxJNEVYes0P2WxcGUPm613qCNY3q9LZR+eYtdCFVu4ZRcU789zMTE22h6UJPNyN/
+d6UcxVexuAFFR/vE16+1SvKlLvDnlMzydAoBSz+zyTopdvlvvWLTp5QUWMwpgvJn
+VNDq0mpYedS23qFHfjXvX/1JWfYHQJWBkH37E56d3+dtIeDWiPv9r0/96Mx2ivxy
+dlxKaCHgMiArbh86B8vFZGtoY/QCzSgeGIZhfUYP7Uq0JD+ohdaRjr1p4SHbEBlb
+9MqzbPDl80S0ebQftssxUhcu85CY1u/c/pm5Cw/SEM/86cFjqB+nPuGet48EZv0S
+Ck9QOfXvvmOX/EcR+mjCY0cCV+DMQFsQbO9F5aBNj23JNy3wMV8NNLdp7Gbp6Pw/
+qoUNWdK9cGH8myrSLyq+ckzJlSqIlu9GKA5FqhrQ1t84KC1F3KUhKEMsBSM5S6ay
+XYZup7czit7dsIkJXjyFMyspufg3ECMJWItjCzDJ/N97itFCI6nrlrVMyrRYxxmx
+Le0X4d2ie8IbVUp2YsJAsm2f88NV7N2lVkH88W6xbZamyYNuXom8IiPLScNqQahe
+xMysKBAUF58ilB2p/3TCrLhkISF5xve9USYpTuNSKh9mvxGdAsyjEOrqPrqidQ4A
+4fpJmAECggIBAM/raykBAvw0xn5NnMMuhX+F4eXOQtFlCEjyN/wCVh0K5W10ZFh8
+Rio/DNdJKE81TxdLs7Hp4tQ8yxV9fjTa7WooHWlQWeUOBZNCFyvlCG5f0C/netp/
+NFIqUCLurZ04Hmlh1QdS/CZ+s6Sh/qZoLZc1LnCfUu5zcpGNVnarlLtgr1ha2GdG
+f8l9KRE9HTTrSYZmhxZFt5m+tgtcqd2BBh2tKcgH2cOngoqQEhynmu7ygM+CDX2I
+4xAEuQh1cu/fptr3anS9PE5eG5H2rGPy3yQjePE1sqxtRUM9k0UVAlAyGdW1Zd9J
+QKBZfrcRXGAJlDg1ZOu1XIQBZFc+p+0KESjvZbYE2vN1lLPpjtfae591RRnA2UjL
+5zvZfJEliKVAopK3sAlZteJEfWkp9AyoNR3q9bNdCqT41APIAn5631AVSPPcKLwH
+kgwBQWlJjfpM3A8dw2FPw30O4anxoNz32CRYRWJgLLfmHPXK0aCx1/D6MI2Qb89v
+bm0qH0Q3fheJEVLG1OcK0JvMeiXwXJqpiV2L7zkl9fJeP1B06voffkXf+iOCwdzf
+DR2fxCheL3K2plBb5lO3pzFsuPeftHIbtzOdUCpxwWSHXqGIldDTQOcID5ufGts6
+0pA2heeISoiAKloOXY+M8wESygRDfXYnvj9YRX9DPNiZ1D0DShlwzQOhAoICAQDJ
+A6EEy2vVBnyjgvCnFH/JHYQRAQbrBy1nLzZQOWfpfw66Ja7T/QvWF5SbQfCVaCve
+yoIvkTtI/f53Fma9p1cdQbyB15u9p0dEeI6wYFreVyHHyZrXhAeybRoDj6DGRidT
+cta5IlAVs9Nk5Wb1w1bXxt4biWgwngpo3mbwrvxNVLH26Sm/3WbDXDgY+uJYmBN4
+XoLBgc+Dt7cyYYNr+Z3k6ntOZ9iMNXatPWT/dJiLK8msymFpmOB9rfTT/3lLeCM9
+J/93WuVlcvAIq26n1BqSXH+NL10wI1FiPZk+7YOX/QunKf9fJCD6qgtYIOZ7FmRi
+B29KgxHtLrzJYpYQ6IG1WOruwhpaDOrGE6nihhInZ5EWaOIcbhGVh5qidgDhbTBm
+uWqFxq6rcB715qFhLdrUkXcsxKQBWwMmkU1+GstItIjYQenKOW6oGhwNgq6jzUej
+bwYfo/bIslO44GfktLFayBuS7vzBbkyaTUJZgdtNnecvUacO+xs5qU126nama5A8
+kRcGdZyAx3L0W2E9GiRvAA283mU8geYHw3JlYJBtJGmhD3TyNKr23jm9WY6R8CTg
+CkZ83rVpwd2zaupUOrzv4RjUZTreQCFZbzxPpEcOAicjbXAVyBDlaiXlqASt3Zlx
+J1AbZLKIh4QqmrMj97C+bW4w/m3oAviGhIskHnk8MQKCAgEAyRreqml1FraBKxcs
+wkjUDRVU+u73CAvd6JiH9/PWkP7CDI1gpYmGYERdyjnTiFF6r4CkTTh5Emm+0Ily
+MfNzYZNtZzi1ymw2jkmFmgpMjl2UQ1F1LbONys9sdW1Adeoa2DktUIk+pIk2fs3F
+PfVT64Yf5gTktQjrTsdTUzMAiACreR1dZP72iM/LkgX3owDVO+8dSDikrkudTv4Q
+utOaM8gSuoyFX8484IMbUaX3oJjkaFFVdQ+a+BppUjovsr4zaGWZDVMf6njx18us
+0HvQwuagi0YyDL8gGDqNoGsCssjS3jc3UrJKlQ4bFzzuiWGagId8ltPzqSajhBNx
+Xz+2e06apWSq1oLrEt2cMUH9Aq3t6UvznorCnMvuxYF1Wslateh/l3uzBijS2I4g
+pMFppwdlIVij/A9FGmcxql50csQzrNNMfxofdAce2pSvg+MlkmVqXkxFPEfRk4vH
+2RLMd9L9QXrepf0oE8FZ40FBKa8EmViUHSKdv27XkSbPijokjFkPAm4eeiNcHigP
+mfTTjazU9QS3j/cC7HI5+TXO8A0Ep6ZIlrcTu4yVsanv4Nezo9RPwrfHOnH7sl9B
+rIEMQRsut+8RbIfWyw0OQ06h3xSX7CEHW/bYRW7HM7xKwx6cWEC+1CMzw90Fkvwo
+dMlaJXDev4osZyDa/SyaVmMZmSECggIBAJhqJAEarNyNWpwwgIBvTqUTuDucZ751
+ZrvCVJBntp6ZNHV4dSNPz1W583f1e5INtpXrPuMKX8VssTFizuwmoisQ2PoqnXAk
+Eimcr7SUmtHTh02RU9LtzVhA2WSx1tn//3mKrb0ag1axTyxFtNfMEWDy7R48BcA3
+VPVHDQ6Z37xS582r5XgRTAX9OpvWPyGlzb2LC+Hlp47cEhAlWBza3BnioTRGES/e
+qemZj6cSpUeBIB3gJhSHUlB5QhYss6/BnBaW6WF6jk1p5Q7tza17adpoQF6w9xu0
+69RtmHDabtkjiV5qvbNKFad6n7dm2tuhkuOxd3UsBL+unH6mPdr8ML1selYm3wxA
+lxMxfbLArasrIBu50xhzbOnQNDPS/b/vpq99D4P3riFXlmIlSWACANcEpTRQtXpB
+pBXuPq/LaS/rk4dGExq+iWT0xyiHWhvhXtxRJnd/P3PVox2fKaeESqXm7OFwTD3u
+gC7PPevYRoyHme+LHfyB8Za7BH2SMfzluivyZ18CdnQ+xq75SrWlyNJRXBlFF8XV
+SLHCRE8R9PCMl3sD2Ux9GtSsk2M7MJr/VzZ5FBFCXJOf55ZPDvZmwzOvncAOMaCr
+R54kdbp9eVLp1vtJ057wX79TyQBlcYbTa7EceeULaUOUXWZgfkxbVqxNFSwY/wTY
+m9CDV20/nfVBAoICAQDMfQKuLGK/d43i5twBsk2H+6jZah19ZA4ffYRjKcWfXbd6
+TxbNjGW23mfW49VD+/lNp8OdplL+ztqG+4kz+2k4npj+c0cVMFDbPpD0daMMFs+c
+AKVTc2g03a18Q+Q+5IFEY7VvCUfbYlHeqOBBNXtVQphtgjc8ZCTAYGXuytHKkhMg
+l5hYdicrimOK+7LZCe1vuUzxKTO1YTcrBlYerwbn95/JO7Rv3bWUbYXRGbGiQs9n
++MKsPY9qCSz2KihTNDotHgx1HENWK2HvlQOn65MU91LYcB3VGLibQaKUiXXV4BEA
+WVOTr+XKEJYD24J3v6cH+Ol0JNT+gYHO1CX1dhFL9AkgGBTtwDf8KcQCKfNU5384
+cUyT05BrXg4oWTOxdYFTGTQU95G10cPcAVyltPvPmiMCE0D+njsNWl3fDaRGhlku
+j4ogCD2UcnFQRbUtYhHffkbqohSpzRYYxlh0M0XhN6aPmOwm7RgjgCxch04HFgsE
+SSoW2zQ61YdR6NXXnMq0eyxTPejH/ycZLfb3EstmXYhsMftJebwwM3Ni+L8qqfg+
+7aJMGqq6CP+tXCjN88oaweZJbkhl14SmFA3TumqHmYSO4wFDA2Hf9c06fmXMewon
+lksq5bd72R9VfzBw44UyLoy3ae8MuQZTNoVkSKzedCxFtc/RBOm980Tnu/lp4Q==
-----END RSA PRIVATE KEY-----
diff --git a/tests/auto/network/ssl/qsslsocket/certs/qt-test-server-cacert.pem b/tests/auto/network/ssl/qsslsocket/certs/qt-test-server-cacert.pem
index c5aea0d7c9..29fd755de7 100644
--- a/tests/auto/network/ssl/qsslsocket/certs/qt-test-server-cacert.pem
+++ b/tests/auto/network/ssl/qsslsocket/certs/qt-test-server-cacert.pem
@@ -1,17 +1,17 @@
-----BEGIN CERTIFICATE-----
-MIICpzCCAhACCQCzAF1hyRVzAjANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UEBhMC
-Tk8xDTALBgNVBAgTBE9zbG8xDTALBgNVBAcTBE9zbG8xDjAMBgNVBAoTBU5va2lh
-MTUwMwYDVQQLFCxRdCBTb2Z0d2FyZS9lbWFpbEFkZHJlc3M9bm9ib2R5QG5vZG9t
-YWluLm9yZzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQwHhcN
-MTkwNjI0MTI0OTIxWhcNMjIwNjIzMTI0OTIxWjCBlzELMAkGA1UEBhMCTk8xDTAL
-BgNVBAgTBE9zbG8xDTALBgNVBAcTBE9zbG8xDjAMBgNVBAoTBU5va2lhMTUwMwYD
-VQQLFCxRdCBTb2Z0d2FyZS9lbWFpbEFkZHJlc3M9bm9ib2R5QG5vZG9tYWluLm9y
-ZzEjMCEGA1UEAxMacXQtdGVzdC1zZXJ2ZXIucXQtdGVzdC1uZXQwgZ8wDQYJKoZI
-hvcNAQEBBQADgY0AMIGJAoGBAM2q22/WNMmn8cC+5EEYGeICySLmp9W6Ay6eKHr0
-Xxp3X3epETuPfvAuxp7rOtkS18EMUegkUj8jw0IMEcbyHKFC/rTCaYOt93CxGBXM
-IChiMPAsFeYzGa/D6xzAkfcRaJRQ+Ek3CDLXPnXfo7xpABXezYcPXAJrgsgBfWrw
-HdxzAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEASCKbqEX5ysC549mq90ydk4jyDW3m
-PUyet01fKpcRqVs+OJxdExFBTra3gho6WzzpTSPsuX2ZKOLF5k6KkCvdCGvhC1Kv
-HHPIExurfzvdlSRzj6HbKyPuSfxyOloH0bBp7/Gg5RIuBPKlbmfbnTLtwEjhhbMU
-SoYI8HZd3HfY87c=
+MIICyjCCAjMCFHPGDqJR+klHni4XbETMk6GLn/UEMA0GCSqGSIb3DQEBDQUAMIGj
+MRcwFQYDVQQKEw5UaGUgUXQgQ29tcGFueTEUMBIGA1UECxMLUXQgU29mdHdhcmUx
+IjAgBgkqhkiG9w0BCQEWE25vYm9keUBub2RvbWFpbi5vcmcxDTALBgNVBAcTBE9z
+bG8xDTALBgNVBAgTBE9zbG8xCzAJBgNVBAYTAk5PMSMwIQYDVQQDExpxdC10ZXN0
+LXNlcnZlci5xdC10ZXN0LW5ldDAeFw0yMjA2MjQxMTU4NDlaFw0zMjA2MjExMTU4
+NDlaMIGjMRcwFQYDVQQKEw5UaGUgUXQgQ29tcGFueTEUMBIGA1UECxMLUXQgU29m
+dHdhcmUxIjAgBgkqhkiG9w0BCQEWE25vYm9keUBub2RvbWFpbi5vcmcxDTALBgNV
+BAcTBE9zbG8xDTALBgNVBAgTBE9zbG8xCzAJBgNVBAYTAk5PMSMwIQYDVQQDExpx
+dC10ZXN0LXNlcnZlci5xdC10ZXN0LW5ldDCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
+gYkCgYEAzarbb9Y0yafxwL7kQRgZ4gLJIuan1boDLp4oevRfGndfd6kRO49+8C7G
+nus62RLXwQxR6CRSPyPDQgwRxvIcoUL+tMJpg633cLEYFcwgKGIw8CwV5jMZr8Pr
+HMCR9xFolFD4STcIMtc+dd+jvGkAFd7Nhw9cAmuCyAF9avAd3HMCAwEAATANBgkq
+hkiG9w0BAQ0FAAOBgQCZyRe25WqOjrNS6BKPs7ep7eyCON3NKdWnfABZrSjGJQ87
+PoFKl6+9YBSlSpl8qk7c29ic+wA4qFQzPJkrbYIXjwVMAr+cC1kVrlUVqcwmvnKo
+5vj57/v8S0Uc4/GesIsxZR7QM+3diPDyk7Bsc3IkpINb31Dl0mlg25nztg8NxA==
-----END CERTIFICATE-----
diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
index a2541d5425..b45d6b5d8f 100644
--- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
+++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2014 Governikus GmbH & Co. KG.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2014 Governikus GmbH & Co. KG.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtNetwork/private/qtnetworkglobal_p.h>
@@ -44,6 +19,8 @@
#include <QtNetwork/qtcpserver.h>
#include <QtNetwork/qsslpresharedkeyauthenticator.h>
+#include <QtTest/private/qemulationdetector_p.h>
+
#include <QTest>
#include <QNetworkProxy>
#include <QAuthenticator>
@@ -66,6 +43,23 @@
#include "private/qsslsocket_p.h"
#include "private/qsslconfiguration_p.h"
+using namespace std::chrono_literals;
+
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+// make these enum values available without causing deprecation warnings:
+namespace Test {
+#define COPY(tag, v) \
+ constexpr auto tag ## V ## v = QSsl:: tag ## V ## v ; \
+ constexpr auto tag ## V ## v ## OrLater = QSsl:: tag ## V ## v ## OrLater ; \
+ /* end */
+COPY(Tls, 1_0)
+COPY(Dtls, 1_0)
+COPY(Tls, 1_1)
+#undef COPY
+} // namespace Test
+QT_WARNING_POP
+
Q_DECLARE_METATYPE(QSslSocket::SslMode)
typedef QList<QSslError::SslError> SslErrorList;
Q_DECLARE_METATYPE(SslErrorList)
@@ -172,9 +166,7 @@ private slots:
void protocol();
void protocolServerSide_data();
void protocolServerSide();
-#if QT_CONFIG(openssl)
void serverCipherPreferences();
-#endif
void setCaCertificates();
void setLocalCertificate();
void localCertificateChain();
@@ -299,6 +291,7 @@ private:
QSslSocket *socket;
QList<QSslError> storedExpectedSslErrors;
bool isTestingOpenSsl = false;
+ bool isSecurityLevel0Required = false;
bool opensslResolved = false;
bool isTestingSecureTransport = false;
bool isTestingSchannel = false;
@@ -418,6 +411,9 @@ void tst_QSslSocket::initTestCase()
flukeCertificateError = QSslError::SelfSignedCertificate;
#if QT_CONFIG(openssl)
opensslResolved = qt_auto_test_resolve_OpenSSL_symbols();
+ // This is where OpenSSL moved several protocols under
+ // non-default (0) security level (the default is 1).
+ isSecurityLevel0Required = OPENSSL_VERSION_NUMBER >= 0x30100010;
#else
opensslResolved = false; // Not 'unused variable' anymore.
#endif
@@ -802,22 +798,31 @@ void tst_QSslSocket::configNoOnDemandLoad()
QCOMPARE(customConfig, socket.sslConfiguration());
}
+static void downgrade_TLS_QTQAINFRA_4499(QSslSocket &socket)
+{
+ // Set TLS 1.0 or above because the server doesn't support TLS 1.2 or above
+ // QTQAINFRA-4499
+ QSslConfiguration config = socket.sslConfiguration();
+ config.setProtocol(Test::TlsV1_0OrLater);
+ socket.setSslConfiguration(config);
+}
+
void tst_QSslSocket::simpleConnect()
{
if (!QSslSocket::supportsSsl())
return;
+ // Starting from OpenSSL v 3.1.1 deprecated protocol versions (we want to use when connecting) are not available by default.
+ if (isSecurityLevel0Required)
+ QSKIP("Testing with OpenSSL backend, but security level 0 is required for TLS v1.1 or earlier");
+
QFETCH_GLOBAL(bool, setProxy);
if (setProxy)
return;
QSslSocket socket;
- // Set TLS 1.0 or above because the server doesn't support TLS 1.2 or above
- // QTQAINFRA-4499
- QSslConfiguration config = socket.sslConfiguration();
- config.setProtocol(QSsl::TlsV1_0OrLater);
- socket.setSslConfiguration(config);
+ downgrade_TLS_QTQAINFRA_4499(socket);
QSignalSpy connectedSpy(&socket, SIGNAL(connected()));
QSignalSpy hostFoundSpy(&socket, SIGNAL(hostFound()));
@@ -839,30 +844,30 @@ void tst_QSslSocket::simpleConnect()
// Entered connecting state
QCOMPARE(socket.state(), QAbstractSocket::ConnectingState);
- QCOMPARE(connectedSpy.count(), 0);
- QCOMPARE(hostFoundSpy.count(), 1);
- QCOMPARE(disconnectedSpy.count(), 0);
+ QCOMPARE(connectedSpy.size(), 0);
+ QCOMPARE(hostFoundSpy.size(), 1);
+ QCOMPARE(disconnectedSpy.size(), 0);
enterLoop(10);
// Entered connected state
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
QCOMPARE(socket.mode(), QSslSocket::UnencryptedMode);
QVERIFY(!socket.isEncrypted());
- QCOMPARE(connectedSpy.count(), 1);
- QCOMPARE(hostFoundSpy.count(), 1);
- QCOMPARE(disconnectedSpy.count(), 0);
+ QCOMPARE(connectedSpy.size(), 1);
+ QCOMPARE(hostFoundSpy.size(), 1);
+ QCOMPARE(disconnectedSpy.size(), 0);
// Enter encrypted mode
socket.startClientEncryption();
QCOMPARE(socket.mode(), QSslSocket::SslClientMode);
QVERIFY(!socket.isEncrypted());
- QCOMPARE(connectionEncryptedSpy.count(), 0);
- QCOMPARE(sslErrorsSpy.count(), 0);
+ QCOMPARE(connectionEncryptedSpy.size(), 0);
+ QCOMPARE(sslErrorsSpy.size(), 0);
// Starting handshake
enterLoop(10);
- QCOMPARE(sslErrorsSpy.count(), 1);
- QCOMPARE(connectionEncryptedSpy.count(), 0);
+ QCOMPARE(sslErrorsSpy.size(), 1);
+ QCOMPARE(connectionEncryptedSpy.size(), 0);
QVERIFY(!socket.isEncrypted());
QCOMPARE(socket.state(), QAbstractSocket::UnconnectedState);
}
@@ -872,6 +877,10 @@ void tst_QSslSocket::simpleConnectWithIgnore()
if (!QSslSocket::supportsSsl())
return;
+ // Starting from OpenSSL v 3.1.1 deprecated protocol versions (we want to use when connecting) are not available by default.
+ if (isSecurityLevel0Required)
+ QSKIP("Testing with OpenSSL backend, but security level 0 is required for TLS v1.1 or earlier");
+
QFETCH_GLOBAL(bool, setProxy);
if (setProxy)
return;
@@ -881,11 +890,7 @@ void tst_QSslSocket::simpleConnectWithIgnore()
QSignalSpy encryptedSpy(&socket, SIGNAL(encrypted()));
QSignalSpy sslErrorsSpy(&socket, SIGNAL(sslErrors(QList<QSslError>)));
- // Set TLS 1.0 or above because the server doesn't support TLS 1.2 or above
- // QTQAINFRA-4499
- QSslConfiguration config = socket.sslConfiguration();
- config.setProtocol(QSsl::TlsV1_0OrLater);
- socket.setSslConfiguration(config);
+ downgrade_TLS_QTQAINFRA_4499(socket);
connect(&socket, SIGNAL(readyRead()), this, SLOT(exitLoop()));
connect(&socket, SIGNAL(encrypted()), this, SLOT(exitLoop()));
@@ -904,10 +909,10 @@ void tst_QSslSocket::simpleConnectWithIgnore()
enterLoop(10);
// Done; encryption should be enabled.
- QCOMPARE(sslErrorsSpy.count(), 1);
+ QCOMPARE(sslErrorsSpy.size(), 1);
QVERIFY(socket.isEncrypted());
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
- QCOMPARE(encryptedSpy.count(), 1);
+ QCOMPARE(encryptedSpy.size(), 1);
// Wait for incoming data
if (!socket.canReadLine())
@@ -920,6 +925,10 @@ void tst_QSslSocket::simpleConnectWithIgnore()
void tst_QSslSocket::sslErrors_data()
{
+ // Starting from OpenSSL v 3.1.1 deprecated protocol versions (we want to use in 'sslErrors' test) are not available by default.
+ if (isSecurityLevel0Required)
+ QSKIP("Testing with OpenSSL backend, but security level 0 is required for TLS v1.1 or earlier");
+
QTest::addColumn<QString>("host");
QTest::addColumn<int>("port");
@@ -937,11 +946,8 @@ void tst_QSslSocket::sslErrors()
QSslSocketPtr socket = newSocket();
- // Set TLS 1.0 or above because the server doesn't support TLS 1.2 or above
- // QTQAINFRA-4499
- QSslConfiguration config = socket->sslConfiguration();
- config.setProtocol(QSsl::TlsV1_0OrLater);
- socket->setSslConfiguration(config);
+ QVERIFY(socket);
+ downgrade_TLS_QTQAINFRA_4499(*socket);
QSignalSpy sslErrorsSpy(socket.data(), SIGNAL(sslErrors(QList<QSslError>)));
QSignalSpy peerVerifyErrorSpy(socket.data(), SIGNAL(peerVerifyError(QSslError)));
@@ -980,7 +986,7 @@ void tst_QSslSocket::sslErrors()
// check the same errors were emitted by sslErrors
QVERIFY(!sslErrorsSpy.isEmpty());
SslErrorList emittedErrors;
- const auto sslErrorsSpyErrors = qvariant_cast<QList<QSslError> >(qAsConst(sslErrorsSpy).first().first());
+ const auto sslErrorsSpyErrors = qvariant_cast<QList<QSslError> >(std::as_const(sslErrorsSpy).first().first());
for (const QSslError &err : sslErrorsSpyErrors)
emittedErrors << err.error();
std::sort(emittedErrors.begin(), emittedErrors.end());
@@ -1029,7 +1035,7 @@ void tst_QSslSocket::ciphers()
QString ciphersAsString;
const auto &supported = sslConfig.supportedCiphers();
for (const auto &cipher : supported) {
- if (cipher.isNull() || !cipher.name().length())
+ if (cipher.isNull() || !cipher.name().size())
continue;
if (ciphers.size() > 0)
ciphersAsString += QStringLiteral(":");
@@ -1108,8 +1114,6 @@ void tst_QSslSocket::connectToHostEncrypted()
return;
QSslSocketPtr socket = newSocket();
- if (isTestingSchannel) // old certificate not supported with TLS 1.2
- socket->setProtocol(QSsl::SslProtocol::TlsV1_1);
this->socket = socket.data();
auto config = socket->sslConfiguration();
@@ -1147,8 +1151,6 @@ void tst_QSslSocket::connectToHostEncryptedWithVerificationPeerName()
return;
QSslSocketPtr socket = newSocket();
- if (isTestingSchannel) // old certificate not supported with TLS 1.2
- socket->setProtocol(QSsl::SslProtocol::TlsV1_1);
this->socket = socket.data();
@@ -1247,7 +1249,7 @@ void tst_QSslSocket::peerCertificateChain()
QSslSocketPtr socket = newSocket();
this->socket = socket.data();
QList<QSslCertificate> caCertificates = QSslCertificate::fromPath(httpServerCertChainPath());
- QCOMPARE(caCertificates.count(), 1);
+ QCOMPARE(caCertificates.size(), 1);
auto config = socket->sslConfiguration();
config.addCaCertificates(caCertificates);
socket->setSslConfiguration(config);
@@ -1264,7 +1266,7 @@ void tst_QSslSocket::peerCertificateChain()
QSKIP("Skipping flaky test - See QTBUG-29941");
QList<QSslCertificate> certChain = socket->peerCertificateChain();
- QVERIFY(certChain.count() > 0);
+ QVERIFY(certChain.size() > 0);
QCOMPARE(certChain.first(), socket->peerCertificate());
socket->disconnectFromHost();
@@ -1308,6 +1310,7 @@ void tst_QSslSocket::privateKey()
#if QT_CONFIG(openssl)
void tst_QSslSocket::privateKeyOpaque()
{
+#ifndef OPENSSL_NO_DEPRECATED_3_0
if (!isTestingOpenSsl)
QSKIP("The active TLS backend does not support private opaque keys");
@@ -1341,6 +1344,7 @@ void tst_QSslSocket::privateKeyOpaque()
QFETCH_GLOBAL(bool, setProxy);
if (setProxy && !socket->waitForEncrypted(10000))
QSKIP("Skipping flaky test - See QTBUG-29941");
+#endif // OPENSSL_NO_DEPRECATED_3_0
}
#endif // Feature 'openssl'.
@@ -1366,38 +1370,38 @@ void tst_QSslSocket::protocol()
QFETCH_GLOBAL(bool, setProxy);
{
// qt-test-server allows TLSV1.
- socket->setProtocol(QSsl::TlsV1_0);
- QCOMPARE(socket->protocol(), QSsl::TlsV1_0);
+ socket->setProtocol(Test::TlsV1_0);
+ QCOMPARE(socket->protocol(), Test::TlsV1_0);
socket->connectToHostEncrypted(QtNetworkSettings::httpServerName(), 443);
if (setProxy && !socket->waitForEncrypted())
QSKIP("Skipping flaky test - See QTBUG-29941");
- QCOMPARE(socket->protocol(), QSsl::TlsV1_0);
+ QCOMPARE(socket->protocol(), Test::TlsV1_0);
socket->abort();
- QCOMPARE(socket->protocol(), QSsl::TlsV1_0);
+ QCOMPARE(socket->protocol(), Test::TlsV1_0);
socket->connectToHost(QtNetworkSettings::httpServerName(), 443);
QVERIFY2(socket->waitForConnected(), qPrintable(socket->errorString()));
socket->startClientEncryption();
if (setProxy && !socket->waitForEncrypted())
QSKIP("Skipping flaky test - See QTBUG-29941");
- QCOMPARE(socket->protocol(), QSsl::TlsV1_0);
+ QCOMPARE(socket->protocol(), Test::TlsV1_0);
socket->abort();
}
{
// qt-test-server probably doesn't allow TLSV1.1
- socket->setProtocol(QSsl::TlsV1_1);
- QCOMPARE(socket->protocol(), QSsl::TlsV1_1);
+ socket->setProtocol(Test::TlsV1_1);
+ QCOMPARE(socket->protocol(), Test::TlsV1_1);
socket->connectToHostEncrypted(QtNetworkSettings::httpServerName(), 443);
if (setProxy && !socket->waitForEncrypted())
QSKIP("Skipping flaky test - See QTBUG-29941");
- QCOMPARE(socket->protocol(), QSsl::TlsV1_1);
+ QCOMPARE(socket->protocol(), Test::TlsV1_1);
socket->abort();
- QCOMPARE(socket->protocol(), QSsl::TlsV1_1);
+ QCOMPARE(socket->protocol(), Test::TlsV1_1);
socket->connectToHost(QtNetworkSettings::httpServerName(), 443);
QVERIFY2(socket->waitForConnected(), qPrintable(socket->errorString()));
socket->startClientEncryption();
if (setProxy && !socket->waitForEncrypted())
QSKIP("Skipping flaky test - See QTBUG-29941");
- QCOMPARE(socket->protocol(), QSsl::TlsV1_1);
+ QCOMPARE(socket->protocol(), Test::TlsV1_1);
socket->abort();
}
{
@@ -1573,41 +1577,34 @@ void tst_QSslSocket::protocolServerSide_data()
QTest::addColumn<QSsl::SslProtocol>("clientProtocol");
QTest::addColumn<bool>("works");
- QTest::newRow("tls1.0-tls1.0") << QSsl::TlsV1_0 << QSsl::TlsV1_0 << true;
QTest::newRow("any-any") << QSsl::AnyProtocol << QSsl::AnyProtocol << true;
QTest::newRow("secure-secure") << QSsl::SecureProtocols << QSsl::SecureProtocols << true;
- QTest::newRow("tls1.0-secure") << QSsl::TlsV1_0 << QSsl::SecureProtocols << false;
- QTest::newRow("tls1.0-any") << QSsl::TlsV1_0 << QSsl::AnyProtocol << true;
-
- QTest::newRow("secure-tls1.0") << QSsl::SecureProtocols << QSsl::TlsV1_0 << false;
+ QTest::newRow("tls1.0-secure") << Test::TlsV1_0 << QSsl::SecureProtocols << false;
+ QTest::newRow("secure-tls1.0") << QSsl::SecureProtocols << Test::TlsV1_0 << false;
QTest::newRow("secure-any") << QSsl::SecureProtocols << QSsl::AnyProtocol << true;
- QTest::newRow("tls1.0orlater-tls1.0") << QSsl::TlsV1_0OrLater << QSsl::TlsV1_0 << true;
- QTest::newRow("tls1.0orlater-tls1.1") << QSsl::TlsV1_0OrLater << QSsl::TlsV1_1 << true;
- QTest::newRow("tls1.0orlater-tls1.2") << QSsl::TlsV1_0OrLater << QSsl::TlsV1_2 << true;
+ QTest::newRow("tls1.0orlater-tls1.2") << Test::TlsV1_0OrLater << QSsl::TlsV1_2 << true;
if (supportsTls13())
- QTest::newRow("tls1.0orlater-tls1.3") << QSsl::TlsV1_0OrLater << QSsl::TlsV1_3 << true;
+ QTest::newRow("tls1.0orlater-tls1.3") << Test::TlsV1_0OrLater << QSsl::TlsV1_3 << true;
- QTest::newRow("tls1.1orlater-tls1.0") << QSsl::TlsV1_1OrLater << QSsl::TlsV1_0 << false;
- QTest::newRow("tls1.1orlater-tls1.1") << QSsl::TlsV1_1OrLater << QSsl::TlsV1_1 << true;
- QTest::newRow("tls1.1orlater-tls1.2") << QSsl::TlsV1_1OrLater << QSsl::TlsV1_2 << true;
+ QTest::newRow("tls1.1orlater-tls1.0") << Test::TlsV1_1OrLater << Test::TlsV1_0 << false;
+ QTest::newRow("tls1.1orlater-tls1.2") << Test::TlsV1_1OrLater << QSsl::TlsV1_2 << true;
if (supportsTls13())
- QTest::newRow("tls1.1orlater-tls1.3") << QSsl::TlsV1_1OrLater << QSsl::TlsV1_3 << true;
+ QTest::newRow("tls1.1orlater-tls1.3") << Test::TlsV1_1OrLater << QSsl::TlsV1_3 << true;
- QTest::newRow("tls1.2orlater-tls1.0") << QSsl::TlsV1_2OrLater << QSsl::TlsV1_0 << false;
- QTest::newRow("tls1.2orlater-tls1.1") << QSsl::TlsV1_2OrLater << QSsl::TlsV1_1 << false;
+ QTest::newRow("tls1.2orlater-tls1.0") << QSsl::TlsV1_2OrLater << Test::TlsV1_0 << false;
+ QTest::newRow("tls1.2orlater-tls1.1") << QSsl::TlsV1_2OrLater << Test::TlsV1_1 << false;
QTest::newRow("tls1.2orlater-tls1.2") << QSsl::TlsV1_2OrLater << QSsl::TlsV1_2 << true;
if (supportsTls13()) {
QTest::newRow("tls1.2orlater-tls1.3") << QSsl::TlsV1_2OrLater << QSsl::TlsV1_3 << true;
- QTest::newRow("tls1.3orlater-tls1.0") << QSsl::TlsV1_3OrLater << QSsl::TlsV1_0 << false;
- QTest::newRow("tls1.3orlater-tls1.1") << QSsl::TlsV1_3OrLater << QSsl::TlsV1_1 << false;
+ QTest::newRow("tls1.3orlater-tls1.0") << QSsl::TlsV1_3OrLater << Test::TlsV1_0 << false;
+ QTest::newRow("tls1.3orlater-tls1.1") << QSsl::TlsV1_3OrLater << Test::TlsV1_1 << false;
QTest::newRow("tls1.3orlater-tls1.2") << QSsl::TlsV1_3OrLater << QSsl::TlsV1_2 << false;
QTest::newRow("tls1.3orlater-tls1.3") << QSsl::TlsV1_3OrLater << QSsl::TlsV1_3 << true;
}
- QTest::newRow("any-tls1.0") << QSsl::AnyProtocol << QSsl::TlsV1_0 << true;
QTest::newRow("any-secure") << QSsl::AnyProtocol << QSsl::SecureProtocols << true;
}
@@ -1664,8 +1661,6 @@ void tst_QSslSocket::protocolServerSide()
QCOMPARE(client.isEncrypted(), works);
}
-#if QT_CONFIG(openssl)
-
void tst_QSslSocket::serverCipherPreferences()
{
if (!isTestingOpenSsl)
@@ -1675,11 +1670,28 @@ void tst_QSslSocket::serverCipherPreferences()
if (setProxy)
return;
- // First using the default (server preference)
+ QSslCipher testedCiphers[2];
{
+ // First using the default (server preference)
+ const auto supportedCiphers = QSslConfiguration::supportedCiphers();
+ int nSet = 0;
+ for (const auto &cipher : supportedCiphers) {
+ // Ciphersuites from TLS 1.2 and 1.3 are set separately,
+ // let's select 1.3 or above explicitly.
+ if (cipher.protocol() < QSsl::TlsV1_3)
+ continue;
+
+ testedCiphers[nSet++] = cipher;
+ if (nSet == 2)
+ break;
+ }
+
+ if (nSet != 2)
+ QSKIP("Failed to find two proper ciphersuites to test, bailing out.");
+
SslServer server;
- server.protocol = QSsl::TlsV1_0;
- server.ciphers = {QSslCipher("AES128-SHA"), QSslCipher("AES256-SHA")};
+ server.protocol = QSsl::TlsV1_2OrLater;
+ server.ciphers = {testedCiphers[0], testedCiphers[1]};
QVERIFY(server.listen());
QEventLoop loop;
@@ -1689,8 +1701,8 @@ void tst_QSslSocket::serverCipherPreferences()
socket = &client;
auto sslConfig = socket->sslConfiguration();
- sslConfig.setProtocol(QSsl::TlsV1_0OrLater);
- sslConfig.setCiphers({QSslCipher("AES256-SHA"), QSslCipher("AES128-SHA")});
+ sslConfig.setProtocol(QSsl::TlsV1_2OrLater);
+ sslConfig.setCiphers({testedCiphers[1], testedCiphers[0]});
socket->setSslConfiguration(sslConfig);
// upon SSL wrong version error, errorOccurred will be triggered, not sslErrors
@@ -1703,17 +1715,19 @@ void tst_QSslSocket::serverCipherPreferences()
loop.exec();
QVERIFY(client.isEncrypted());
- QCOMPARE(client.sessionCipher().name(), QString("AES128-SHA"));
+ QCOMPARE(client.sessionCipher().name(), testedCiphers[0].name());
}
{
+ if (QTestPrivate::isRunningArmOnX86())
+ QSKIP("This test is known to crash on QEMU emulation for no good reason.");
// Now using the client preferences
SslServer server;
QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setSslOption(QSsl::SslOptionDisableServerCipherPreference, true);
server.config = config;
- server.protocol = QSsl::TlsV1_0OrLater;
- server.ciphers = {QSslCipher("AES128-SHA"), QSslCipher("AES256-SHA")};
+ server.protocol = QSsl::TlsV1_2OrLater;
+ server.ciphers = {testedCiphers[0], testedCiphers[1]};
QVERIFY(server.listen());
QEventLoop loop;
@@ -1723,8 +1737,8 @@ void tst_QSslSocket::serverCipherPreferences()
socket = &client;
auto sslConfig = socket->sslConfiguration();
- sslConfig.setProtocol(QSsl::TlsV1_0);
- sslConfig.setCiphers({QSslCipher("AES256-SHA"), QSslCipher("AES128-SHA")});
+ sslConfig.setProtocol(QSsl::TlsV1_2OrLater);
+ sslConfig.setCiphers({testedCiphers[1], testedCiphers[0]});
socket->setSslConfiguration(sslConfig);
// upon SSL wrong version error, errorOccurred will be triggered, not sslErrors
@@ -1737,12 +1751,10 @@ void tst_QSslSocket::serverCipherPreferences()
loop.exec();
QVERIFY(client.isEncrypted());
- QCOMPARE(client.sessionCipher().name(), QString("AES256-SHA"));
+ QCOMPARE(client.sessionCipher().name(), testedCiphers[1].name());
}
}
-#endif // Feature 'openssl'.
-
void tst_QSslSocket::setCaCertificates()
{
@@ -1819,8 +1831,10 @@ void tst_QSslSocket::setLocalCertificateChain()
}
QCOMPARE(chain.size(), 2);
- QCOMPARE(chain[0].serialNumber(), QByteArray("10:a0:ad:77:58:f6:6e:ae:46:93:a3:43:f9:59:8a:9e"));
- QCOMPARE(chain[1].serialNumber(), QByteArray("3b:eb:99:c5:ea:d8:0b:5d:0b:97:5d:4f:06:75:4b:e1"));
+ QCOMPARE(chain[0].serialNumber(),
+ QByteArray("58:df:33:c1:9b:bc:c5:51:7a:00:86:64:43:94:41:e2:26:ef:3f:89"));
+ QCOMPARE(chain[1].serialNumber(),
+ QByteArray("11:72:34:bc:21:e6:ca:04:24:13:f8:35:48:84:a6:e9:de:96:22:15"));
}
void tst_QSslSocket::tlsConfiguration()
@@ -1912,8 +1926,6 @@ void tst_QSslSocket::setSslConfiguration()
QSslSocketPtr socket = newSocket();
QFETCH(QSslConfiguration, configuration);
socket->setSslConfiguration(configuration);
- if (isTestingSchannel) // old certificate not supported with TLS 1.2
- socket->setProtocol(QSsl::SslProtocol::TlsV1_1);
this->socket = socket.data();
socket->connectToHostEncrypted(QtNetworkSettings::httpServerName(), 443);
@@ -1967,13 +1979,17 @@ void tst_QSslSocket::waitForConnectedEncryptedReadyRead()
if (!QSslSocket::supportsSsl())
return;
+ // Starting from OpenSSL v 3.1.1 deprecated protocol versions (we want to use here) are not available by default.
+ if (isSecurityLevel0Required)
+ QSKIP("Testing with OpenSSL backend, but security level 0 is required for TLS v1.1 or earlier");
+
QSslSocketPtr socket = newSocket();
this->socket = socket.data();
// Set TLS 1.0 or above because the server doesn't support TLS 1.2 or above
// QTQAINFRA-4499
QSslConfiguration config = socket->sslConfiguration();
- config.setProtocol(QSsl::TlsV1_0OrLater);
+ config.setProtocol(Test::TlsV1_0OrLater);
socket->setSslConfiguration(config);
connect(this->socket, SIGNAL(sslErrors(QList<QSslError>)), this, SLOT(ignoreErrorSlot()));
@@ -2641,8 +2657,6 @@ void tst_QSslSocket::verifyMode()
return;
QSslSocket socket;
- if (isTestingSchannel) // old certificate not supported with TLS 1.2
- socket.setProtocol(QSsl::SslProtocol::TlsV1_1);
QCOMPARE(socket.peerVerifyMode(), QSslSocket::AutoVerifyPeer);
socket.setPeerVerifyMode(QSslSocket::VerifyNone);
@@ -2822,10 +2836,10 @@ void tst_QSslSocket::closeWhileEmittingSocketError()
// Make sure we have some data buffered so that close will try to flush:
clientSocket.write(QByteArray(1000000, Qt::Uninitialized));
- QTestEventLoop::instance().enterLoopMSecs(1000);
+ QTestEventLoop::instance().enterLoop(1s);
QVERIFY(!QTestEventLoop::instance().timeout());
- QCOMPARE(socketErrorSpy.count(), 1);
+ QCOMPARE(socketErrorSpy.size(), 1);
}
#endif // Feature 'openssl'.
@@ -2922,7 +2936,7 @@ void tst_QSslSocket::ignoreSslErrorsList()
bool expectEncryptionSuccess = (expectedSslErrorSignalCount == 0);
if (socket.waitForEncrypted(10000) != expectEncryptionSuccess)
QSKIP("Skipping flaky test - See QTBUG-29941");
- QCOMPARE(sslErrorsSpy.count(), expectedSslErrorSignalCount);
+ QCOMPARE(sslErrorsSpy.size(), expectedSslErrorSignalCount);
}
void tst_QSslSocket::ignoreSslErrorsListWithSlot_data()
@@ -2983,8 +2997,6 @@ void tst_QSslSocket::abortOnSslErrors()
void tst_QSslSocket::readFromClosedSocket()
{
QSslSocketPtr socket = newSocket();
- if (isTestingSchannel) // old certificate not supported with TLS 1.2
- socket->setProtocol(QSsl::SslProtocol::TlsV1_1);
socket->ignoreSslErrors();
socket->connectToHostEncrypted(QtNetworkSettings::httpServerName(), 443);
@@ -3082,9 +3094,16 @@ void tst_QSslSocket::blacklistedCertificates()
connect(receiver, SIGNAL(encrypted()), SLOT(exitLoop()));
enterLoop(1);
QList<QSslError> sslErrors = receiver->sslHandshakeErrors();
- QVERIFY(sslErrors.count() > 0);
+ QVERIFY(sslErrors.size() > 0);
// there are more errors (self signed cert and hostname mismatch), but we only care about the blacklist error
- QCOMPARE(sslErrors.at(0).error(), QSslError::CertificateBlacklisted);
+ std::optional<QSslError> blacklistedError;
+ for (const QSslError &error : sslErrors) {
+ if (error.error() == QSslError::CertificateBlacklisted) {
+ blacklistedError = error;
+ break;
+ }
+ }
+ QVERIFY2(blacklistedError, "CertificateBlacklisted error not found!");
}
void tst_QSslSocket::versionAccessors()
@@ -3110,6 +3129,10 @@ void tst_QSslSocket::encryptWithoutConnecting()
void tst_QSslSocket::resume_data()
{
+ // Starting from OpenSSL v 3.1.1 deprecated protocol versions (we want to use in 'resume' test) are not available by default.
+ if (isSecurityLevel0Required)
+ QSKIP("Testing with OpenSSL backend, but security level 0 is required for TLS v1.1 or earlier");
+
QTest::addColumn<bool>("ignoreErrorsAfterPause");
QTest::addColumn<QList<QSslError> >("errorsToIgnore");
QTest::addColumn<bool>("expectSuccess");
@@ -3148,7 +3171,7 @@ void tst_QSslSocket::resume()
// Set TLS 1.0 or above because the server doesn't support TLS 1.2 or above
// QTQAINFRA-4499
QSslConfiguration config = socket.sslConfiguration();
- config.setProtocol(QSsl::TlsV1_0OrLater);
+ config.setProtocol(Test::TlsV1_0OrLater);
socket.setSslConfiguration(config);
QSignalSpy sslErrorSpy(&socket, SIGNAL(sslErrors(QList<QSslError>)));
@@ -3166,9 +3189,9 @@ void tst_QSslSocket::resume()
QFETCH_GLOBAL(bool, setProxy);
if (setProxy && QTestEventLoop::instance().timeout())
QSKIP("Skipping flaky test - See QTBUG-29941");
- QCOMPARE(sslErrorSpy.count(), 1);
- QCOMPARE(errorSpy.count(), 0);
- QCOMPARE(encryptedSpy.count(), 0);
+ QCOMPARE(sslErrorSpy.size(), 1);
+ QCOMPARE(errorSpy.size(), 0);
+ QCOMPARE(encryptedSpy.size(), 0);
QVERIFY(!socket.isEncrypted());
if (ignoreErrorsAfterPause) {
if (errorsToIgnore.empty())
@@ -3180,15 +3203,15 @@ void tst_QSslSocket::resume()
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout()); // quit by encrypted() or error() signal
if (expectSuccess) {
- QCOMPARE(encryptedSpy.count(), 1);
+ QCOMPARE(encryptedSpy.size(), 1);
QVERIFY(socket.isEncrypted());
- QCOMPARE(errorSpy.count(), 0);
+ QCOMPARE(errorSpy.size(), 0);
socket.disconnectFromHost();
QVERIFY(socket.waitForDisconnected(10000));
} else {
- QCOMPARE(encryptedSpy.count(), 0);
+ QCOMPARE(encryptedSpy.size(), 0);
QVERIFY(!socket.isEncrypted());
- QCOMPARE(errorSpy.count(), 1);
+ QCOMPARE(errorSpy.size(), 1);
QCOMPARE(socket.error(), QAbstractSocket::SslHandshakeFailedError);
}
}
@@ -3375,17 +3398,17 @@ void tst_QSslSocket::qtbug18498_peek2()
bigblock.fill('#', QIODEVICE_BUFFERSIZE + 1024);
QVERIFY(client->write(QByteArray("head")));
QVERIFY(client->write(bigblock));
- QTRY_COMPARE(server->bytesAvailable(), bigblock.length() + 4);
+ QTRY_COMPARE(server->bytesAvailable(), bigblock.size() + 4);
QCOMPARE(server->read(4), QByteArray("head"));
- QCOMPARE(server->peek(bigblock.length()), bigblock);
- b.reserve(bigblock.length());
- b.resize(server->peek(b.data(), bigblock.length()));
+ QCOMPARE(server->peek(bigblock.size()), bigblock);
+ b.reserve(bigblock.size());
+ b.resize(server->peek(b.data(), bigblock.size()));
QCOMPARE(b, bigblock);
//check oversized peek
- QCOMPARE(server->peek(bigblock.length() * 3), bigblock);
- b.reserve(bigblock.length() * 3);
- b.resize(server->peek(b.data(), bigblock.length() * 3));
+ QCOMPARE(server->peek(bigblock.size() * 3), bigblock);
+ b.reserve(bigblock.size() * 3);
+ b.resize(server->peek(b.data(), bigblock.size() * 3));
QCOMPARE(b, bigblock);
QCOMPARE(server->readAll(), bigblock);
@@ -3453,7 +3476,13 @@ void tst_QSslSocket::dhServer()
return;
SslServer server;
- server.ciphers = {QSslCipher("DHE-RSA-AES256-SHA"), QSslCipher("DHE-DSS-AES256-SHA")};
+ QSslCipher rsaCipher("DHE-RSA-AES256-SHA");
+ QSslCipher dssCipher("DHE-DSS-AES256-SHA");
+ if (rsaCipher.isNull())
+ QSKIP("The current backend doesn't support DHE-RSA-AES256-SHA");
+ if (dssCipher.isNull())
+ QSKIP("The current backend doesn't support DHE-DSS-AES256-SHA");
+ server.ciphers = { rsaCipher, dssCipher };
QVERIFY(server.listen());
QEventLoop loop;
@@ -3481,9 +3510,10 @@ void tst_QSslSocket::dhServerCustomParamsNull()
if (setProxy)
return;
+ const QSslCipher cipherWithDH("DHE-RSA-AES256-SHA256");
SslServer server;
- server.ciphers = {QSslCipher("DHE-RSA-AES256-SHA"), QSslCipher("DHE-DSS-AES256-SHA")};
- server.protocol = QSsl::TlsV1_0;
+ server.ciphers = {cipherWithDH};
+ server.protocol = QSsl::TlsV1_2;
QSslConfiguration cfg = server.config;
cfg.setDiffieHellmanParameters(QSslDiffieHellmanParameters());
@@ -3496,7 +3526,6 @@ void tst_QSslSocket::dhServerCustomParamsNull()
QSslSocket client;
QSslConfiguration config = client.sslConfiguration();
- config.setProtocol(QSsl::TlsV1_0);
client.setSslConfiguration(config);
socket = &client;
connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)), &loop, SLOT(quit()));
@@ -3507,20 +3536,25 @@ void tst_QSslSocket::dhServerCustomParamsNull()
loop.exec();
- QVERIFY(client.state() != QAbstractSocket::ConnectedState);
+ QCOMPARE(client.state(), QAbstractSocket::ConnectedState);
+ QCOMPARE(client.sessionCipher(), cipherWithDH);
}
void tst_QSslSocket::dhServerCustomParams()
{
if (!QSslSocket::supportsSsl())
QSKIP("No SSL support");
+ if (!QSslSocket::isClassImplemented(QSsl::ImplementedClass::DiffieHellman))
+ QSKIP("The current backend doesn't support diffie hellman parameters");
QFETCH_GLOBAL(bool, setProxy);
if (setProxy)
return;
SslServer server;
- server.ciphers = {QSslCipher("DHE-RSA-AES256-SHA"), QSslCipher("DHE-DSS-AES256-SHA")};
+ const QSslCipher cipherWithDH("DHE-RSA-AES256-SHA256");
+ server.ciphers = {cipherWithDH};
+ server.protocol = QSsl::TlsV1_2;
QSslConfiguration cfg = server.config;
@@ -3550,7 +3584,8 @@ void tst_QSslSocket::dhServerCustomParams()
loop.exec();
- QVERIFY(client.state() == QAbstractSocket::ConnectedState);
+ QCOMPARE(client.state(), QAbstractSocket::ConnectedState);
+ QCOMPARE(client.sessionCipher(), cipherWithDH);
}
#endif // QT_CONFIG(openssl)
@@ -3566,7 +3601,10 @@ void tst_QSslSocket::ecdhServer()
return;
SslServer server;
- server.ciphers = {QSslCipher("ECDHE-RSA-AES128-SHA")};
+ QSslCipher cipher("ECDHE-RSA-AES128-SHA");
+ if (cipher.isNull())
+ QSKIP("The current backend doesn't support ECDHE-RSA-AES128-SHA");
+ server.ciphers = {cipher};
QVERIFY(server.listen());
QEventLoop loop;
@@ -3679,7 +3717,7 @@ void tst_QSslSocket::verifyClientCertificate()
}
SslServer server;
- server.protocol = QSsl::TlsV1_0;
+ server.protocol = QSsl::TlsV1_2;
server.addCaCertificates = testDataDir + "certs/bogus-ca.crt";
server.ignoreSslErrors = false;
server.peerVerifyMode = peerVerifyMode;
@@ -3694,7 +3732,7 @@ void tst_QSslSocket::verifyClientCertificate()
client.setLocalCertificateChain(clientCerts);
client.setPrivateKey(clientKey);
QSslConfiguration config = client.sslConfiguration();
- config.setProtocol(QSsl::TlsV1_0OrLater);
+ config.setProtocol(Test::TlsV1_0OrLater);
client.setSslConfiguration(config);
socket = &client;
@@ -3721,7 +3759,7 @@ void tst_QSslSocket::verifyClientCertificate()
} else {
QCOMPARE(server.socket->peerCertificate(), clientCerts.first());
if (isTestingSchannel) {
- if (clientCerts.count() == 1 && server.socket->peerCertificateChain().count() == 2) {
+ if (clientCerts.size() == 1 && server.socket->peerCertificateChain().size() == 2) {
QEXPECT_FAIL("",
"Schannel includes the entire chain, not just the leaf and intermediates",
Continue);
@@ -4081,14 +4119,14 @@ void tst_QSslSocket::simplePskConnect()
case PskConnectWrongCredentials:
// provide totally wrong credentials
- provider.setIdentity(PSK_CLIENT_IDENTITY.left(PSK_CLIENT_IDENTITY.length() - 1));
- provider.setPreSharedKey(PSK_CLIENT_PRESHAREDKEY.left(PSK_CLIENT_PRESHAREDKEY.length() - 1));
+ provider.setIdentity(PSK_CLIENT_IDENTITY.left(PSK_CLIENT_IDENTITY.size() - 1));
+ provider.setPreSharedKey(PSK_CLIENT_PRESHAREDKEY.left(PSK_CLIENT_PRESHAREDKEY.size() - 1));
connect(&socket, SIGNAL(preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator*)), &provider, SLOT(providePsk(QSslPreSharedKeyAuthenticator*)));
break;
case PskConnectWrongIdentity:
// right PSK, wrong identity
- provider.setIdentity(PSK_CLIENT_IDENTITY.left(PSK_CLIENT_IDENTITY.length() - 1));
+ provider.setIdentity(PSK_CLIENT_IDENTITY.left(PSK_CLIENT_IDENTITY.size() - 1));
provider.setPreSharedKey(PSK_CLIENT_PRESHAREDKEY);
connect(&socket, SIGNAL(preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator*)), &provider, SLOT(providePsk(QSslPreSharedKeyAuthenticator*)));
break;
@@ -4096,7 +4134,7 @@ void tst_QSslSocket::simplePskConnect()
case PskConnectWrongPreSharedKey:
// right identity, wrong PSK
provider.setIdentity(PSK_CLIENT_IDENTITY);
- provider.setPreSharedKey(PSK_CLIENT_PRESHAREDKEY.left(PSK_CLIENT_PRESHAREDKEY.length() - 1));
+ provider.setPreSharedKey(PSK_CLIENT_PRESHAREDKEY.left(PSK_CLIENT_PRESHAREDKEY.size() - 1));
connect(&socket, SIGNAL(preSharedKeyAuthenticationRequired(QSslPreSharedKeyAuthenticator*)), &provider, SLOT(providePsk(QSslPreSharedKeyAuthenticator*)));
break;
@@ -4148,32 +4186,32 @@ void tst_QSslSocket::simplePskConnect()
// Entered connecting state
QCOMPARE(socket.state(), QAbstractSocket::ConnectingState);
- QCOMPARE(connectedSpy.count(), 0);
- QCOMPARE(hostFoundSpy.count(), 1);
- QCOMPARE(disconnectedSpy.count(), 0);
+ QCOMPARE(connectedSpy.size(), 0);
+ QCOMPARE(hostFoundSpy.size(), 1);
+ QCOMPARE(disconnectedSpy.size(), 0);
enterLoop(10);
// Entered connected state
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
QCOMPARE(socket.mode(), QSslSocket::UnencryptedMode);
QVERIFY(!socket.isEncrypted());
- QCOMPARE(connectedSpy.count(), 1);
- QCOMPARE(hostFoundSpy.count(), 1);
- QCOMPARE(disconnectedSpy.count(), 0);
+ QCOMPARE(connectedSpy.size(), 1);
+ QCOMPARE(hostFoundSpy.size(), 1);
+ QCOMPARE(disconnectedSpy.size(), 0);
// Enter encrypted mode
socket.startClientEncryption();
QCOMPARE(socket.mode(), QSslSocket::SslClientMode);
QVERIFY(!socket.isEncrypted());
- QCOMPARE(connectionEncryptedSpy.count(), 0);
- QCOMPARE(sslErrorsSpy.count(), 0);
- QCOMPARE(peerVerifyErrorSpy.count(), 0);
+ QCOMPARE(connectionEncryptedSpy.size(), 0);
+ QCOMPARE(sslErrorsSpy.size(), 0);
+ QCOMPARE(peerVerifyErrorSpy.size(), 0);
// Start handshake.
enterLoop(10);
// We must get the PSK signal in all cases
- QCOMPARE(pskAuthenticationRequiredSpy.count(), 1);
+ QCOMPARE(pskAuthenticationRequiredSpy.size(), 1);
switch (pskTestType) {
case PskConnectDoNotHandlePsk:
@@ -4182,40 +4220,40 @@ void tst_QSslSocket::simplePskConnect()
case PskConnectWrongIdentity:
case PskConnectWrongPreSharedKey:
// Handshake failure
- QCOMPARE(socketErrorsSpy.count(), 1);
+ QCOMPARE(socketErrorsSpy.size(), 1);
QCOMPARE(qvariant_cast<QAbstractSocket::SocketError>(socketErrorsSpy.at(0).at(0)), QAbstractSocket::SslHandshakeFailedError);
- QCOMPARE(sslErrorsSpy.count(), 0);
- QCOMPARE(peerVerifyErrorSpy.count(), 0);
- QCOMPARE(connectionEncryptedSpy.count(), 0);
+ QCOMPARE(sslErrorsSpy.size(), 0);
+ QCOMPARE(peerVerifyErrorSpy.size(), 0);
+ QCOMPARE(connectionEncryptedSpy.size(), 0);
QVERIFY(!socket.isEncrypted());
break;
case PskConnectRightCredentialsPeerVerifyFailure:
// Peer verification failure
- QCOMPARE(socketErrorsSpy.count(), 1);
+ QCOMPARE(socketErrorsSpy.size(), 1);
QCOMPARE(qvariant_cast<QAbstractSocket::SocketError>(socketErrorsSpy.at(0).at(0)), QAbstractSocket::SslHandshakeFailedError);
- QCOMPARE(sslErrorsSpy.count(), 1);
- QCOMPARE(peerVerifyErrorSpy.count(), 1);
- QCOMPARE(connectionEncryptedSpy.count(), 0);
+ QCOMPARE(sslErrorsSpy.size(), 1);
+ QCOMPARE(peerVerifyErrorSpy.size(), 1);
+ QCOMPARE(connectionEncryptedSpy.size(), 0);
QVERIFY(!socket.isEncrypted());
break;
case PskConnectRightCredentialsVerifyPeer:
// Peer verification failure, but ignore it and keep connecting
- QCOMPARE(socketErrorsSpy.count(), 0);
- QCOMPARE(sslErrorsSpy.count(), 1);
- QCOMPARE(peerVerifyErrorSpy.count(), 1);
- QCOMPARE(connectionEncryptedSpy.count(), 1);
+ QCOMPARE(socketErrorsSpy.size(), 0);
+ QCOMPARE(sslErrorsSpy.size(), 1);
+ QCOMPARE(peerVerifyErrorSpy.size(), 1);
+ QCOMPARE(connectionEncryptedSpy.size(), 1);
QVERIFY(socket.isEncrypted());
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
break;
case PskConnectRightCredentialsDoNotVerifyPeer:
// No peer verification => no failure
- QCOMPARE(socketErrorsSpy.count(), 0);
- QCOMPARE(sslErrorsSpy.count(), 0);
- QCOMPARE(peerVerifyErrorSpy.count(), 0);
- QCOMPARE(connectionEncryptedSpy.count(), 1);
+ QCOMPARE(socketErrorsSpy.size(), 0);
+ QCOMPARE(sslErrorsSpy.size(), 0);
+ QCOMPARE(peerVerifyErrorSpy.size(), 0);
+ QCOMPARE(connectionEncryptedSpy.size(), 1);
QVERIFY(socket.isEncrypted());
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
break;
@@ -4256,7 +4294,7 @@ void tst_QSslSocket::simplePskConnect()
}
QCOMPARE(socket.state(), QAbstractSocket::UnconnectedState);
- QCOMPARE(disconnectedSpy.count(), 1);
+ QCOMPARE(disconnectedSpy.size(), 1);
}
void tst_QSslSocket::ephemeralServerKey_data()
@@ -4289,7 +4327,7 @@ void tst_QSslSocket::ephemeralServerKey()
client->connectToHostEncrypted(QHostAddress(QHostAddress::LocalHost).toString(), server.serverPort());
spy.wait();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(server.config.ephemeralServerKey().isNull());
QCOMPARE(client->sslConfiguration().ephemeralServerKey().isNull(), emptyKey);
}
@@ -4352,22 +4390,22 @@ void tst_QSslSocket::pskServer()
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
QCOMPARE(socket.mode(), QSslSocket::UnencryptedMode);
QVERIFY(!socket.isEncrypted());
- QCOMPARE(connectedSpy.count(), 1);
- QCOMPARE(disconnectedSpy.count(), 0);
+ QCOMPARE(connectedSpy.size(), 1);
+ QCOMPARE(disconnectedSpy.size(), 0);
// Enter encrypted mode
socket.startClientEncryption();
QCOMPARE(socket.mode(), QSslSocket::SslClientMode);
QVERIFY(!socket.isEncrypted());
- QCOMPARE(connectionEncryptedSpy.count(), 0);
+ QCOMPARE(connectionEncryptedSpy.size(), 0);
// Start handshake.
enterLoop(10);
// We must get the PSK signal in all cases
- QCOMPARE(pskAuthenticationRequiredSpy.count(), 1);
+ QCOMPARE(pskAuthenticationRequiredSpy.size(), 1);
- QCOMPARE(connectionEncryptedSpy.count(), 1);
+ QCOMPARE(connectionEncryptedSpy.size(), 1);
QVERIFY(socket.isEncrypted());
QCOMPARE(socket.state(), QAbstractSocket::ConnectedState);
@@ -4380,7 +4418,7 @@ void tst_QSslSocket::pskServer()
enterLoop(10);
QCOMPARE(socket.state(), QAbstractSocket::UnconnectedState);
- QCOMPARE(disconnectedSpy.count(), 1);
+ QCOMPARE(disconnectedSpy.size(), 1);
}
void tst_QSslSocket::signatureAlgorithm_data()
@@ -4452,7 +4490,7 @@ void tst_QSslSocket::signatureAlgorithm_data()
// signature algorithms do not match, but are ignored because the tls version is not v1.2
QTest::newRow("client_ignore_TlsV1_1")
<< QByteArrayList({rsaSha256})
- << QSsl::TlsV1_1
+ << Test::TlsV1_1
<< QByteArrayList({rsaSha512})
<< QSsl::AnyProtocol
<< QAbstractSocket::ConnectedState;
@@ -4460,11 +4498,11 @@ void tst_QSslSocket::signatureAlgorithm_data()
<< QByteArrayList({rsaSha256})
<< QSsl::AnyProtocol
<< QByteArrayList({rsaSha512})
- << QSsl::TlsV1_1
+ << Test::TlsV1_1
<< QAbstractSocket::ConnectedState;
QTest::newRow("client_ignore_TlsV1_0")
<< QByteArrayList({rsaSha256})
- << QSsl::TlsV1_0
+ << Test::TlsV1_0
<< QByteArrayList({rsaSha512})
<< QSsl::AnyProtocol
<< QAbstractSocket::ConnectedState;
@@ -4472,7 +4510,7 @@ void tst_QSslSocket::signatureAlgorithm_data()
<< QByteArrayList({rsaSha256})
<< QSsl::AnyProtocol
<< QByteArrayList({rsaSha512})
- << QSsl::TlsV1_0
+ << Test::TlsV1_0
<< QAbstractSocket::ConnectedState;
}
@@ -4533,7 +4571,7 @@ void tst_QSslSocket::forwardReadChannelFinished()
&QTestEventLoop::instance(), &QTestEventLoop::exitLoop);
socket.connectToHostEncrypted(QtNetworkSettings::httpServerName(), 443);
enterLoop(10);
- QVERIFY(readChannelFinishedSpy.count());
+ QVERIFY(readChannelFinishedSpy.size());
}
#endif // QT_CONFIG(openssl)
@@ -4541,9 +4579,9 @@ void tst_QSslSocket::forwardReadChannelFinished()
void tst_QSslSocket::unsupportedProtocols_data()
{
QTest::addColumn<QSsl::SslProtocol>("unsupportedProtocol");
- QTest::newRow("DtlsV1_0") << QSsl::DtlsV1_0;
+ QTest::newRow("DtlsV1_0") << Test::DtlsV1_0;
QTest::newRow("DtlsV1_2") << QSsl::DtlsV1_2;
- QTest::newRow("DtlsV1_0OrLater") << QSsl::DtlsV1_0OrLater;
+ QTest::newRow("DtlsV1_0OrLater") << Test::DtlsV1_0OrLater;
QTest::newRow("DtlsV1_2OrLater") << QSsl::DtlsV1_2OrLater;
QTest::newRow("UnknownProtocol") << QSsl::UnknownProtocol;
}
@@ -4555,7 +4593,7 @@ void tst_QSslSocket::unsupportedProtocols()
return;
QFETCH(const QSsl::SslProtocol, unsupportedProtocol);
- const int timeoutMS = 500;
+ constexpr auto timeout = 500ms;
// Test a client socket.
{
// 0. connectToHostEncrypted: client-side, non-blocking API, error is discovered
@@ -4577,7 +4615,7 @@ void tst_QSslSocket::unsupportedProtocols()
QCOMPARE(socket.error(), QAbstractSocket::UnknownSocketError);
socket.connectToHost(QHostAddress::LocalHost, server.serverPort());
- QVERIFY(socket.waitForConnected(timeoutMS));
+ QVERIFY(socket.waitForConnected(int(timeout.count())));
socket.setProtocol(unsupportedProtocol);
socket.startClientEncryption();
@@ -4602,7 +4640,7 @@ void tst_QSslSocket::unsupportedProtocols()
QTcpSocket client;
client.connectToHost(QHostAddress::LocalHost, server.serverPort());
- loop.enterLoopMSecs(timeoutMS);
+ loop.enterLoop(timeout);
QVERIFY(!loop.timeout());
QVERIFY(server.socket);
QCOMPARE(server.socket->error(), QAbstractSocket::SslInvalidUserDataError);
@@ -4615,13 +4653,15 @@ void tst_QSslSocket::oldErrorsOnSocketReuse()
if (setProxy)
return; // not relevant
SslServer server;
- server.protocol = QSsl::TlsV1_1;
+ if (!isTestingOpenSsl)
+ server.protocol = Test::TlsV1_1;
server.m_certFile = testDataDir + "certs/fluke.cert";
server.m_keyFile = testDataDir + "certs/fluke.key";
QVERIFY(server.listen(QHostAddress::SpecialAddress::LocalHost));
QSslSocket socket;
- socket.setProtocol(QSsl::TlsV1_1);
+ if (!isTestingOpenSsl)
+ socket.setProtocol(Test::TlsV1_1);
QList<QSslError> errorList;
auto connection = connect(&socket, QOverload<const QList<QSslError> &>::of(&QSslSocket::sslErrors),
[&socket, &errorList](const QList<QSslError> &errors) {
@@ -4707,7 +4747,7 @@ void tst_QSslSocket::alertMissingCertificate()
connect(&clientSocket, &QAbstractSocket::errorOccurred, earlyQuitter);
connect(&server, &SslServer::socketError, earlyQuitter);
- runner.enterLoopMSecs(1000);
+ runner.enterLoop(1s);
if (clientSocket.isEncrypted()) {
// When using TLS 1.3 the client side thinks it is connected very
@@ -4715,11 +4755,11 @@ void tst_QSslSocket::alertMissingCertificate()
// inevitable disconnect.
QCOMPARE(clientSocket.sessionProtocol(), QSsl::TlsV1_3);
connect(&clientSocket, &QSslSocket::disconnected, &runner, &QTestEventLoop::exitLoop);
- runner.enterLoopMSecs(10000);
+ runner.enterLoop(10s);
}
- QVERIFY(serverSpy.count() > 0);
- QVERIFY(clientSpy.count() > 0);
+ QVERIFY(serverSpy.size() > 0);
+ QVERIFY(clientSpy.size() > 0);
QVERIFY(server.socket && !server.socket->isEncrypted());
QVERIFY(!clientSocket.isEncrypted());
}
@@ -4770,11 +4810,11 @@ void tst_QSslSocket::alertInvalidCertificate()
connect(&clientSocket, &QAbstractSocket::errorOccurred, earlyQuitter);
connect(&server, &SslServer::socketError, earlyQuitter);
- runner.enterLoopMSecs(1000);
+ runner.enterLoop(1s);
- QVERIFY(serverSpy.count() > 0);
- QVERIFY(clientSpy.count() > 0);
- QVERIFY(interruptedSpy.count() > 0);
+ QVERIFY(serverSpy.size() > 0);
+ QVERIFY(clientSpy.size() > 0);
+ QVERIFY(interruptedSpy.size() > 0);
QVERIFY(server.socket && !server.socket->isEncrypted());
QVERIFY(!clientSocket.isEncrypted());
}
@@ -4898,17 +4938,17 @@ void tst_QSslSocket::selfSignedCertificates()
connect(&clientSocket, &QAbstractSocket::errorOccurred, earlyQuitter);
connect(&server, &SslServer::socketError, earlyQuitter);
- runner.enterLoopMSecs(1000);
+ runner.enterLoop(1s);
if (clientKnown) {
- QCOMPARE(serverSpy.count(), 0);
- QCOMPARE(clientSpy.count(), 0);
+ QCOMPARE(serverSpy.size(), 0);
+ QCOMPARE(clientSpy.size(), 0);
QVERIFY(server.socket && server.socket->isEncrypted());
QVERIFY(clientSocket.isEncrypted());
} else {
- QVERIFY(serverSpy.count() > 0);
+ QVERIFY(serverSpy.size() > 0);
QEXPECT_FAIL("", "Failing to trigger signal, QTBUG-81661", Continue);
- QVERIFY(clientSpy.count() > 0);
+ QVERIFY(clientSpy.size() > 0);
QVERIFY(server.socket && !server.socket->isEncrypted());
QVERIFY(!clientSocket.isEncrypted());
}
@@ -5036,18 +5076,18 @@ void tst_QSslSocket::pskHandshake()
connect(&clientSocket, &QAbstractSocket::errorOccurred, earlyQuitter);
connect(&server, &SslServer::socketError, earlyQuitter);
- runner.enterLoopMSecs(1000);
+ runner.enterLoop(1s);
if (pskRight) {
- QCOMPARE(serverSpy.count(), 0);
- QCOMPARE(clientSpy.count(), 0);
+ QCOMPARE(serverSpy.size(), 0);
+ QCOMPARE(clientSpy.size(), 0);
QVERIFY(server.socket && server.socket->isEncrypted());
QVERIFY(clientSocket.isEncrypted());
} else {
- QVERIFY(serverSpy.count() > 0);
+ QVERIFY(serverSpy.size() > 0);
QCOMPARE(serverSpy.first().at(0).toInt(), static_cast<int>(QSsl::AlertLevel::Fatal));
QCOMPARE(serverSpy.first().at(1).toInt(), static_cast<int>(QSsl::AlertType::BadRecordMac));
- QVERIFY(clientSpy.count() > 0);
+ QVERIFY(clientSpy.size() > 0);
QCOMPARE(clientSpy.first().at(0).toInt(), static_cast<int>(QSsl::AlertLevel::Fatal));
QCOMPARE(clientSpy.first().at(1).toInt(), static_cast<int>(QSsl::AlertType::BadRecordMac));
QVERIFY(server.socket && !server.socket->isEncrypted());
diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/BLACKLIST b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/BLACKLIST
new file mode 100644
index 0000000000..96d94bd935
--- /dev/null
+++ b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/BLACKLIST
@@ -0,0 +1,7 @@
+# QTBUG-101274
+# [onDemandRootCertLoadingMemberMethods:WithoutProxy]
+# qnx ci
+
+# QTBUG-63481
+[onDemandRootCertLoadingMemberMethods]
+*
diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt
index 8c897caa70..34e026cb8b 100644
--- a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt
+++ b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qsslsocket_onDemandCertificates_member.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_qsslsocket_onDemandCertificates_member LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -11,24 +18,9 @@ endif()
qt_internal_add_test(tst_qsslsocket_onDemandCertificates_member
SOURCES
tst_qsslsocket_onDemandCertificates_member.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
- QT_TEST_SERVER_LIST "squid" "danted" # special case
+ QT_TEST_SERVER_LIST "squid" "danted"
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
-
-#### Keys ignored in scope 1:.:.:qsslsocket_onDemandCertificates_member.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
-# testcase.timeout = "300"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 3:.:.:qsslsocket_onDemandCertificates_member.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# DESTDIR = "debug"
-
-#### Keys ignored in scope 4:.:.:qsslsocket_onDemandCertificates_member.pro:else:
-# DESTDIR = "release"
-
-#### Keys ignored in scope 5:.:.:qsslsocket_onDemandCertificates_member.pro:LINUX:
-# QT_TEST_SERVER_LIST = "squid" "danted"
diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp
index 759fad6a02..119891c916 100644
--- a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp
+++ b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.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 <QtNetwork>
@@ -219,6 +194,7 @@ static bool waitForEncrypted(QSslSocket *socket)
void tst_QSslSocket_onDemandCertificates_member::onDemandRootCertLoadingMemberMethods()
{
+#define ERR(socket) socket->errorString().toLatin1()
const QString host("www.qt.io");
// not using any root certs -> should not work
@@ -228,13 +204,13 @@ void tst_QSslSocket_onDemandCertificates_member::onDemandRootCertLoadingMemberMe
sslConfig.setCaCertificates(QList<QSslCertificate>());
socket2->setSslConfiguration(sslConfig);
socket2->connectToHostEncrypted(host, 443);
- QVERIFY(!waitForEncrypted(socket2.data()));
+ QVERIFY2(!waitForEncrypted(socket2.data()), ERR(socket2));
// default: using on demand loading -> should work
QSslSocketPtr socket = newSocket();
this->socket = socket.data();
socket->connectToHostEncrypted(host, 443);
- QVERIFY2(waitForEncrypted(socket.data()), qPrintable(socket->errorString()));
+ QVERIFY2(waitForEncrypted(socket.data()), ERR(socket));
// not using any root certs again -> should not work
QSslSocketPtr socket3 = newSocket();
@@ -243,7 +219,7 @@ void tst_QSslSocket_onDemandCertificates_member::onDemandRootCertLoadingMemberMe
sslConfig.setCaCertificates(QList<QSslCertificate>());
socket3->setSslConfiguration(sslConfig);
socket3->connectToHostEncrypted(host, 443);
- QVERIFY(!waitForEncrypted(socket3.data()));
+ QVERIFY2(!waitForEncrypted(socket3.data()), ERR(socket3));
// setting empty SSL configuration explicitly -> depends on on-demand loading
QSslSocketPtr socket4 = newSocket();
@@ -254,16 +230,20 @@ void tst_QSslSocket_onDemandCertificates_member::onDemandRootCertLoadingMemberMe
#ifdef QT_BUILD_INTERNAL
const bool works = QSslSocketPrivate::rootCertOnDemandLoadingSupported();
#if defined(Q_OS_LINUX) || defined(Q_OS_WIN)
- QCOMPARE(works, true);
+ QVERIFY2(works, ERR(socket4));
#elif defined(Q_OS_MAC)
- QCOMPARE(works, false);
+ QVERIFY2(!works, ERR(socket4));
#endif // other platforms: undecided.
// When we *allow* on-demand loading, we enable it by default; so, on Unix,
// it will work without setting any certificates. Otherwise, the configuration
// contains an empty set of certificates, so on-demand loading shall fail.
- QCOMPARE(waitForEncrypted(socket4.data()), works);
+ const bool result = waitForEncrypted(socket4.data());
+ if (result != works)
+ qDebug() << socket4->errorString();
+ QCOMPARE(waitForEncrypted(socket4.data()), works);
#endif // QT_BUILD_INTERNAL
}
+#undef ERR
#endif // QT_NO_OPENSSL
diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/BLACKLIST b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/BLACKLIST
deleted file mode 100644
index 52bd2bc86d..0000000000
--- a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[onDemandRootCertLoadingStaticMethods:WithSocks5ProxyAuth]
-windows
diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt
index b9340c338e..696eec98ee 100644
--- a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt
+++ b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qsslsocket_onDemandCertificates_static.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_qsslsocket_onDemandCertificates_static LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -11,23 +18,9 @@ endif()
qt_internal_add_test(tst_qsslsocket_onDemandCertificates_static
SOURCES
tst_qsslsocket_onDemandCertificates_static.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
- QT_TEST_SERVER_LIST "squid" "danted" # special case
+ QT_TEST_SERVER_LIST "squid" "danted"
+ BUNDLE_ANDROID_OPENSSL_LIBS
)
-
-#### Keys ignored in scope 1:.:.:qsslsocket_onDemandCertificates_static.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 3:.:.:qsslsocket_onDemandCertificates_static.pro:(CMAKE_BUILD_TYPE STREQUAL Debug):
-# DESTDIR = "debug"
-
-#### Keys ignored in scope 4:.:.:qsslsocket_onDemandCertificates_static.pro:else:
-# DESTDIR = "release"
-
-#### Keys ignored in scope 5:.:.:qsslsocket_onDemandCertificates_static.pro:LINUX:
-# QT_TEST_SERVER_LIST = "squid" "danted"
diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp
index bbcdb5b13f..c5475da581 100644
--- a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp
+++ b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.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 <QtNetwork>
diff --git a/tests/auto/network/ssl/shared/qopenssl_symbols.h b/tests/auto/network/ssl/shared/qopenssl_symbols.h
index 4b6d1e6407..c98e90d424 100644
--- a/tests/auto/network/ssl/shared/qopenssl_symbols.h
+++ b/tests/auto/network/ssl/shared/qopenssl_symbols.h
@@ -1,42 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtNetwork module 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
/****************************************************************************
**
@@ -71,6 +35,7 @@
// reduced to the needs of our auto-tests, that have to mess with
// OpenSSL calls directly.
+#include <QtCore/qset.h>
#include <QtNetwork/private/qtnetworkglobal_p.h>
QT_REQUIRE_CONFIG(openssl);
@@ -440,7 +405,7 @@ struct LibGreaterThan
{
const auto lhsparts = lhs.split(QLatin1Char('.'));
const auto rhsparts = rhs.split(QLatin1Char('.'));
- Q_ASSERT(lhsparts.count() > 1 && rhsparts.count() > 1);
+ Q_ASSERT(lhsparts.size() > 1 && rhsparts.size() > 1);
// note: checking rhs < lhs, the same as lhs > rhs
return std::lexicographical_compare(rhsparts.begin() + 1, rhsparts.end(),
@@ -516,7 +481,7 @@ QStringList findAllLibs(QLatin1String filter)
QStringList entryList = dir.entryList(filters, QDir::Files);
std::sort(entryList.begin(), entryList.end(), LibGreaterThan());
- for (const QString &entry : qAsConst(entryList))
+ for (const QString &entry : std::as_const(entryList))
found << path + QLatin1Char('/') + entry;
}
@@ -537,6 +502,12 @@ QStringList findAllLibCrypto()
#ifdef Q_OS_WIN
+#if (OPENSSL_VERSION_NUMBER >> 28) < 3
+#define QT_OPENSSL_VERSION "1_1"
+#elif OPENSSL_VERSION_MAJOR == 3 // Starting with 3.0 this define is available
+#define QT_OPENSSL_VERSION "3"
+#endif // > 3 intentionally left undefined
+
struct LoadedOpenSsl {
std::unique_ptr<QSystemLibrary> ssl, crypto;
};
@@ -575,8 +546,9 @@ static LoadedOpenSsl loadOpenSsl()
#define QT_SSL_SUFFIX
#endif
- tryToLoadOpenSslWin32Library(QLatin1String("libssl-1_1" QT_SSL_SUFFIX),
- QLatin1String("libcrypto-1_1" QT_SSL_SUFFIX), result);
+ tryToLoadOpenSslWin32Library(QLatin1String("libssl-" QT_OPENSSL_VERSION QT_SSL_SUFFIX),
+ QLatin1String("libcrypto-" QT_OPENSSL_VERSION QT_SSL_SUFFIX),
+ result);
#undef QT_SSL_SUFFIX
return result;
diff --git a/tests/auto/network/ssl/shared/tlshelpers.h b/tests/auto/network/ssl/shared/tlshelpers.h
index cd0f785aee..de3c2ea51a 100644
--- a/tests/auto/network/ssl/shared/tlshelpers.h
+++ b/tests/auto/network/ssl/shared/tlshelpers.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtNetwork/qtnetworkglobal.h>
@@ -37,13 +12,8 @@
#include <QtCore/qstring.h>
#include <QtCore/qglobal.h>
-// TODO: these 'helpers' later to include OpenSSL resolver/sumbols
-// required by some auto-tests.
-
QT_BEGIN_NAMESPACE
-
-
namespace TlsAux {
inline bool classImplemented(QSsl::ImplementedClass cl)
diff --git a/tests/auto/opengl/CMakeLists.txt b/tests/auto/opengl/CMakeLists.txt
index 34011c9b92..8b13789179 100644
--- a/tests/auto/opengl/CMakeLists.txt
+++ b/tests/auto/opengl/CMakeLists.txt
@@ -1,2 +1 @@
-# Generated from opengl.pro.
diff --git a/tests/auto/other/CMakeLists.txt b/tests/auto/other/CMakeLists.txt
index 8255406bb5..16f96cd5f4 100644
--- a/tests/auto/other/CMakeLists.txt
+++ b/tests/auto/other/CMakeLists.txt
@@ -1,14 +1,15 @@
-# Generated from other.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(NOT CMAKE_CROSSCOMPILING)
- # add_subdirectory(atwrapper) <- does not exist # special case
+ # add_subdirectory(atwrapper) <- does not exist
endif()
if(TARGET Qt::Widgets)
add_subdirectory(gestures)
add_subdirectory(languagechange)
add_subdirectory(qfocusevent)
add_subdirectory(qsharedpointer_and_qwidget)
- # add_subdirectory(windowsmobile) <- does not exist # special case
+ # add_subdirectory(windowsmobile) <- does not exist
endif()
if(TARGET Qt::Network AND TARGET Qt::Widgets)
add_subdirectory(qnetworkaccessmanager_and_qprogressdialog)
@@ -21,8 +22,7 @@ endif()
if(TARGET Qt::Network)
add_subdirectory(networkselftest)
endif()
-# QTBUG-87674 # special case
-if(QT_FEATURE_accessibility AND TARGET Qt::Gui AND TARGET Qt::Widgets AND NOT ANDROID)
+if(QT_FEATURE_accessibility AND TARGET Qt::Gui AND TARGET Qt::Widgets)
add_subdirectory(qaccessibility)
endif()
if(TARGET Qt::Gui)
@@ -30,15 +30,15 @@ if(TARGET Qt::Gui)
endif()
add_subdirectory(qobjectrace)
add_subdirectory(toolsupport)
-# QTBUG-87670 # special case
+# QTBUG-87670
if(QT_FEATURE_process AND TARGET Qt::Gui AND NOT ANDROID)
add_subdirectory(qprocess_and_guieventloop)
endif()
if(QT_FEATURE_accessibility_atspi_bridge AND TARGET Qt::Gui AND TARGET Qt::Widgets)
- #add_subdirectory(qaccessibilitylinux) # special case # This test is broken
+ #add_subdirectory(qaccessibilitylinux) # TODO: This test is broken
endif()
if(MACOS AND TARGET Qt::Gui)
- # add_subdirectory(macnativeevents) # special case it's disabled in qmake too
+ # add_subdirectory(macnativeevents) # TODO: it's disabled in qmake too
endif()
if(embedded)
add_subdirectory(qdirectpainter)
@@ -46,3 +46,7 @@ endif()
if(QT_FEATURE_xkbcommon AND TARGET Qt::Gui)
add_subdirectory(xkbkeyboard)
endif()
+
+if(ANDROID AND QT_BUILD_STANDALONE_TESTS)
+ add_subdirectory(android_deployment_settings)
+endif()
diff --git a/tests/auto/other/android/CMakeLists.txt b/tests/auto/other/android/CMakeLists.txt
deleted file mode 100644
index c2749825ac..0000000000
--- a/tests/auto/other/android/CMakeLists.txt
+++ /dev/null
@@ -1,21 +0,0 @@
-# Generated from android.pro.
-
-#####################################################################
-## tst_android Test:
-#####################################################################
-
-qt_internal_add_test(tst_android
- SOURCES
- tst_android.cpp
-)
-
-if(ANDROID)
- set_property(TARGET tst_android APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
- ${CMAKE_CURRENT_SOURCE_DIR}/testdata
- )
- # QTBUG-88840 # special case
- qt_android_generate_deployment_settings(tst_android) # special case
-endif()
-
-#### Keys ignored in scope 1:.:.:android.pro:<TRUE>:
-# DISTFILES = "testdata/assets/test.txt"
diff --git a/tests/auto/other/android/tst_android.cpp b/tests/auto/other/android/tst_android.cpp
deleted file mode 100644
index 3a00d9414b..0000000000
--- a/tests/auto/other/android/tst_android.cpp
+++ /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 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 <jni.h>
-
-#include <QTest>
-#include <QtCore/qnativeinterface.h>
-#include <QtCore/qjniobject.h>
-
-class tst_Android : public QObject
-{
-Q_OBJECT
-private slots:
- void assetsRead();
- void assetsNotWritable();
- void testAndroidSdkVersion();
- void testAndroidActivity();
-};
-
-void tst_Android::assetsRead()
-{
- {
- QFile file(QStringLiteral("assets:/test.txt"));
- QVERIFY(file.open(QIODevice::ReadOnly));
- QCOMPARE(file.readAll(), QByteArray("FooBar"));
- }
-
- {
- QFile file(QStringLiteral("assets:/test.txt"));
- QVERIFY(file.open(QIODevice::ReadOnly | QIODevice::Text));
- QCOMPARE(file.readAll(), QByteArray("FooBar"));
- }
-}
-
-void tst_Android::assetsNotWritable()
-{
- QFile file(QStringLiteral("assets:/test.txt"));
- QVERIFY(!file.open(QIODevice::WriteOnly));
- QVERIFY(!file.open(QIODevice::ReadWrite));
- QVERIFY(!file.open(QIODevice::Append));
-}
-
-void tst_Android::testAndroidSdkVersion()
-{
- QVERIFY(QNativeInterface::QAndroidApplication::sdkVersion() > 0);
-}
-
-void tst_Android::testAndroidActivity()
-{
- QJniObject activity = QNativeInterface::QAndroidApplication::context();
- QVERIFY(activity.isValid());
- QVERIFY(activity.callMethod<jboolean>("isTaskRoot"));
-}
-
-QTEST_MAIN(tst_Android)
-#include "tst_android.moc"
-
diff --git a/tests/auto/other/android_deployment_settings/CMakeLists.txt b/tests/auto/other/android_deployment_settings/CMakeLists.txt
new file mode 100644
index 0000000000..f2ba135328
--- /dev/null
+++ b/tests/auto/other/android_deployment_settings/CMakeLists.txt
@@ -0,0 +1,85 @@
+# Copyright (C) 2023 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_android_deployment_settings LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+function(tst_generate_android_deployment_setting target)
+ # Qt build always use new property format that supports generator expressions. In this test we
+ # want to test user scenario so disable all Qt specific options to make sure that
+ # qt6_android_generate_deployment_settings behave like in user projects.
+ set(QT_BUILD_STANDALONE_TESTS FALSE)
+ set(QT_BUILDING_QT FALSE)
+ set(QT_INTERNAL_IS_STANDALONE_TEST FALSE)
+
+ qt6_android_generate_deployment_settings(${target})
+endfunction()
+
+qt6_policy(SET QTP0002 NEW)
+
+set(target tst_android_deployment_settings_new)
+qt6_add_executable(${target} MANUAL_FINALIZATION EXCLUDE_FROM_ALL noop.cpp)
+set_target_properties(${target} PROPERTIES
+ my_package_source_dir "path/to/source/dir"
+ my_libs_property "some/path/to/lib2.so;some/path/to/lib3.so"
+ my_plugins_property "some/path/to/plugin2.so;some/path/to/plugin3.so"
+
+ QT_ANDROID_SDK_BUILD_TOOLS_REVISION "23.0.2"
+ QT_ANDROID_MIN_SDK_VERSION "1"
+ QT_ANDROID_TARGET_SDK_VERSION "2"
+ QT_ANDROID_DEPLOYMENT_DEPENDENCIES "dep1.so;dep2.so;dep3.so"
+ QT_ANDROID_DEPLOYMENT_SETTINGS_FILE "attempt_to_rewrite.json"
+ QT_ANDROID_EXTRA_LIBS
+ "some/path/to/lib1.so;$<TARGET_PROPERTY:${target},my_libs_property>;some/path/to/lib4.so"
+ QT_ANDROID_EXTRA_PLUGINS
+ "some/path/to/plugin1.so;$<TARGET_PROPERTY:${target},my_plugins_property>"
+ QT_ANDROID_PACKAGE_SOURCE_DIR "$<TARGET_PROPERTY:${target},my_package_source_dir>"
+ QT_ANDROID_SYSTEM_LIBS_PREFIX "myLibPrefix"
+
+ # Make sure that this property is overwritten by
+ # qt6_android_generate_deployment_settings
+ QT_ANDROID_DEPLOYMENT_SETTINGS_FILE "custom_deployment_settings.json"
+)
+tst_generate_android_deployment_setting(${target})
+
+qt6_policy(SET QTP0002 OLD)
+
+set(target tst_android_deployment_settings_old)
+qt6_add_executable(${target} MANUAL_FINALIZATION EXCLUDE_FROM_ALL noop.cpp)
+set_target_properties(${target} PROPERTIES
+ QT_ANDROID_SDK_BUILD_TOOLS_REVISION "23.0.2"
+ QT_ANDROID_MIN_SDK_VERSION "1"
+ QT_ANDROID_TARGET_SDK_VERSION "2"
+ QT_ANDROID_DEPLOYMENT_DEPENDENCIES "dep1.so;dep2.so;dep3.so"
+ QT_ANDROID_EXTRA_LIBS
+ "some/path/to/lib1.so;some/path\\to/lib2.so;some\\path\\to\\lib3.so;some/path/to/lib4.so"
+ QT_ANDROID_EXTRA_PLUGINS
+ "some\\path\\to\\plugin1.so;some/path\\to/plugin2.so;some/path/to/plugin3.so"
+ QT_ANDROID_PACKAGE_SOURCE_DIR "path\\to/source\\dir"
+ QT_ANDROID_SYSTEM_LIBS_PREFIX "myLibPrefix"
+)
+tst_generate_android_deployment_setting(${target})
+
+get_target_property(new_settings
+ tst_android_deployment_settings_new QT_ANDROID_DEPLOYMENT_SETTINGS_FILE)
+get_target_property(old_settings
+ tst_android_deployment_settings_old QT_ANDROID_DEPLOYMENT_SETTINGS_FILE)
+set_source_files_properties("${new_settings}" PROPERTIES QT_RESOURCE_ALIAS "new_settings.json")
+set_source_files_properties("${old_settings}" PROPERTIES QT_RESOURCE_ALIAS "old_settings.json")
+qt_internal_add_test(tst_android_deployment_settings
+ SOURCES
+ tst_android_deployment_settings.cpp
+ DEFINES
+ DEFAULT_ABI="${CMAKE_ANDROID_ARCH_ABI}"
+)
+qt6_add_resources(tst_android_deployment_settings
+ "deployment_settings_res"
+ PREFIX
+ "/"
+ FILES
+ "${new_settings}"
+ "${old_settings}"
+)
diff --git a/tests/auto/other/android_deployment_settings/noop.cpp b/tests/auto/other/android_deployment_settings/noop.cpp
new file mode 100644
index 0000000000..6f2ee31826
--- /dev/null
+++ b/tests/auto/other/android_deployment_settings/noop.cpp
@@ -0,0 +1,7 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+int main(int, char *[])
+{
+ return 0;
+}
diff --git a/tests/auto/other/android_deployment_settings/tst_android_deployment_settings.cpp b/tests/auto/other/android_deployment_settings/tst_android_deployment_settings.cpp
new file mode 100644
index 0000000000..d68d08b58e
--- /dev/null
+++ b/tests/auto/other/android_deployment_settings/tst_android_deployment_settings.cpp
@@ -0,0 +1,112 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QJsonDocument>
+#include <QJsonObject>
+#include <QFile>
+#include <QTest>
+#include <QLibraryInfo>
+#include <QDir>
+
+class tst_android_deployment_settings : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase_data();
+ void init();
+
+ void DeploymentSettings_data();
+ void DeploymentSettings();
+
+ void QtPaths_data();
+ void QtPaths();
+
+private:
+ static QString makePath(QLibraryInfo::LibraryLocation loc);
+ QJsonDocument jsonDoc;
+};
+
+QString tst_android_deployment_settings::makePath(QLibraryInfo::LibraryLocation loc)
+{
+ const auto prefix = QLibraryInfo::path(QLibraryInfo::PrefixPath);
+ auto path = QLibraryInfo::path(loc);
+ path.remove(0, prefix.size() + 1);
+ if (path.isEmpty()) // Assume that if path is empty it's '.'
+ path = ".";
+ return path;
+}
+
+void tst_android_deployment_settings::initTestCase_data()
+{
+ QTest::addColumn<QString>("file");
+ QTest::newRow("old") << ":/old_settings.json";
+ QTest::newRow("new") << ":/new_settings.json";
+}
+
+void tst_android_deployment_settings::init()
+{
+ QFETCH_GLOBAL(QString, file);
+ QFile settings(file);
+ QVERIFY(settings.open(QIODeviceBase::ReadOnly));
+ jsonDoc = QJsonDocument::fromJson(settings.readAll());
+ QVERIFY(!jsonDoc.isNull());
+}
+
+void tst_android_deployment_settings::DeploymentSettings_data()
+{
+ QTest::addColumn<QString>("key");
+ QTest::addColumn<QString>("value");
+
+ QTest::newRow("sdkBuildToolsRevision") << "sdkBuildToolsRevision"
+ << "23.0.2";
+ QTest::newRow("deployment-dependencies") << "deployment-dependencies"
+ << "dep1.so,dep2.so,dep3.so";
+ QTest::newRow("android-extra-plugins")
+ << "android-extra-plugins"
+ << "some/path/to/plugin1.so,some/path/to/plugin2.so,some/path/to/plugin3.so";
+ QTest::newRow("android-extra-libs") << "android-extra-libs"
+ << "some/path/to/lib1.so,some/path/to/lib2.so,some/path/to/"
+ "lib3.so,some/path/to/lib4.so";
+ QTest::newRow("android-system-libs-prefix") << "android-system-libs-prefix"
+ << "myLibPrefix";
+ QTest::newRow("android-package-source-directory") << "android-package-source-directory"
+ << "path/to/source/dir";
+ QTest::newRow("android-min-sdk-version") << "android-min-sdk-version"
+ << "1";
+ QTest::newRow("android-target-sdk-version") << "android-target-sdk-version"
+ << "2";
+}
+
+void tst_android_deployment_settings::DeploymentSettings()
+{
+ QFETCH(QString, key);
+ QFETCH(QString, value);
+ QCOMPARE(jsonDoc[key].toString(), value);
+}
+
+void tst_android_deployment_settings::QtPaths_data()
+{
+ QTest::addColumn<QString>("key");
+ QTest::addColumn<QString>("value");
+
+ QTest::newRow("qtDataDirectory") << "qtDataDirectory" << makePath(QLibraryInfo::DataPath);
+ QTest::newRow("qtLibExecsDirectory")
+ << "qtLibExecsDirectory" << makePath(QLibraryInfo::LibraryExecutablesPath);
+ QTest::newRow("qtLibsDirectory") << "qtLibsDirectory" << makePath(QLibraryInfo::LibrariesPath);
+ QTest::newRow("qtPluginsDirectory")
+ << "qtPluginsDirectory" << makePath(QLibraryInfo::PluginsPath);
+ QTest::newRow("qtQmlDirectory") << "qtQmlDirectory" << makePath(QLibraryInfo::QmlImportsPath);
+}
+
+void tst_android_deployment_settings::QtPaths()
+{
+ QFETCH(QString, key);
+ QFETCH(QString, value);
+ QCOMPARE(QDir::cleanPath(jsonDoc[key].toObject()[DEFAULT_ABI].toString()),
+ QDir::cleanPath(value));
+}
+
+QTEST_MAIN(tst_android_deployment_settings)
+
+#include "tst_android_deployment_settings.moc"
diff --git a/tests/auto/other/gestures/BLACKLIST b/tests/auto/other/gestures/BLACKLIST
index 5b4f12b80d..8e96992e4d 100644
--- a/tests/auto/other/gestures/BLACKLIST
+++ b/tests/auto/other/gestures/BLACKLIST
@@ -1,32 +1,4 @@
-[]
-rhel
-centos
-ubuntu-18.04
-ubuntu-20.04
-[customGesture]
-opensuse-leap
-# QTBUG-67254
-opensuse-42.3
-[graphicsItemGesture]
-ubuntu-18.04
-ubuntu-20.04
-rhel
-centos
-[graphicsItemTreeGesture]
-ubuntu-18.04
-ubuntu-20.04
-[graphicsView]
-ubuntu-18.04
-ubuntu-20.04
-rhel
-centos
-[explicitGraphicsObjectTarget]
-ubuntu-18.04
-ubuntu-20.04
-rhel
-centos
-[autoCancelGestures2]
-ubuntu-18.04
-ubuntu-20.04
-rhel
-centos
+[panelPropagation]
+ubuntu-22.04 ci
+[panelStacksBehindParent]
+ubuntu-22.04 ci
diff --git a/tests/auto/other/gestures/CMakeLists.txt b/tests/auto/other/gestures/CMakeLists.txt
index e4ea953ee3..815846305a 100644
--- a/tests/auto/other/gestures/CMakeLists.txt
+++ b/tests/auto/other/gestures/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from gestures.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_gestures Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_gestures LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_gestures
SOURCES
tst_gestures.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/other/gestures/tst_gestures.cpp b/tests/auto/other/gestures/tst_gestures.cpp
index 48cd355554..a413268321 100644
--- a/tests/auto/other/gestures/tst_gestures.cpp
+++ b/tests/auto/other/gestures/tst_gestures.cpp
@@ -1,36 +1,11 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QtTest/qtesttouch.h>
#include <qevent.h>
+#include <QSet>
#include <qpointingdevice.h>
#include <qwidget.h>
#include <qlayout.h>
@@ -233,7 +208,7 @@ protected:
QGestureEvent *e = static_cast<QGestureEvent*>(event);
++gestureEventsReceived;
eventsPtr = &events;
- foreach(Qt::GestureType type, ignoredGestures)
+ for (Qt::GestureType type : std::as_const(ignoredGestures))
e->ignore(e->gesture(type));
} else if (event->type() == QEvent::GestureOverride) {
++gestureOverrideEventsReceived;
@@ -243,8 +218,8 @@ protected:
}
if (eventsPtr) {
QGestureEvent *e = static_cast<QGestureEvent*>(event);
- QList<QGesture*> gestures = e->gestures();
- foreach(QGesture *g, gestures) {
+ const QList<QGesture*> gestures = e->gestures();
+ for (QGesture *g : gestures) {
eventsPtr->all << g->gestureType();
switch(g->state()) {
case Qt::GestureStarted:
@@ -306,6 +281,10 @@ Q_OBJECT
private slots:
void initTestCase();
void cleanupTestCase();
+
+ void init();
+ void cleanup();
+
void customGesture();
void autoCancelingGestures();
void gestureOverChild();
@@ -342,35 +321,60 @@ private slots:
void testQGestureRecognizerCleanup();
void testReuseCanceledGestures();
void bug_13501_gesture_not_accepted();
+private:
+ QPoint m_availableTopLeft;
};
void tst_Gestures::initTestCase()
{
+ const QScreen *screen = QGuiApplication::primaryScreen();
+ m_availableTopLeft = screen->availableGeometry().topLeft();
+}
+
+void tst_Gestures::cleanupTestCase()
+{
+}
+
+void tst_Gestures::init()
+{
CustomGesture::GestureType = QGestureRecognizer::registerRecognizer(new CustomGestureRecognizer);
QVERIFY(CustomGesture::GestureType != Qt::GestureType(0));
QVERIFY(CustomGesture::GestureType != Qt::CustomGesture);
}
-void tst_Gestures::cleanupTestCase()
+void tst_Gestures::cleanup()
{
QGestureRecognizer::unregisterRecognizer(CustomGesture::GestureType);
}
+static QtMessageHandler originalMessageHandler = nullptr;
+static bool skipCustomGesture = false;
+static void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &text)
+{
+ if (type == QtMsgType::QtWarningMsg && text == "QGestureManager::deliverEvent: could not find the target for gesture")
+ skipCustomGesture = true;
+ originalMessageHandler(type, context, text);
+}
+
void tst_Gestures::customGesture()
{
+ originalMessageHandler = qInstallMessageHandler(messageHandler);
+ auto guard = qScopeGuard([](){ qInstallMessageHandler(originalMessageHandler); });
GestureWidget widget;
widget.grabGesture(CustomGesture::GestureType, Qt::DontStartGestureOnChildren);
widget.show();
- QVERIFY(QTest::qWaitForWindowExposed(&widget));
+ QVERIFY(QTest::qWaitForWindowActive(&widget));
CustomEvent event;
event.hotSpot = widget.mapToGlobal(QPoint(5,5));
event.hasHotSpot = true;
sendCustomGesture(&event, &widget);
+ if (skipCustomGesture)
+ QSKIP("QApplication unable to access test widget.");
static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1;
static const int TotalCustomEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialMaybeThreshold + 1;
- QCOMPARE(widget.customEventsReceived, TotalCustomEventsCount);
+ QTRY_COMPARE(widget.customEventsReceived, TotalCustomEventsCount);
QCOMPARE(widget.gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(widget.gestureOverrideEventsReceived, 0);
QCOMPARE(widget.events.all.size(), TotalGestureEventsCount);
@@ -430,7 +434,7 @@ void tst_Gestures::gestureOverChild()
static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1;
static const int TotalCustomEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialMaybeThreshold + 1;
- QCOMPARE(child->customEventsReceived, TotalCustomEventsCount);
+ QTRY_COMPARE(child->customEventsReceived, TotalCustomEventsCount);
QCOMPARE(widget.customEventsReceived, 0);
QCOMPARE(child->gestureEventsReceived, 0);
QCOMPARE(child->gestureOverrideEventsReceived, 0);
@@ -445,7 +449,7 @@ void tst_Gestures::gestureOverChild()
sendCustomGesture(&event, child);
- QCOMPARE(child->customEventsReceived, TotalCustomEventsCount);
+ QTRY_COMPARE(child->customEventsReceived, TotalCustomEventsCount);
QCOMPARE(widget.customEventsReceived, 0);
QCOMPARE(child->gestureEventsReceived, 0);
@@ -477,7 +481,7 @@ void tst_Gestures::multipleWidgetOnlyGestureInTree()
CustomEvent event;
sendCustomGesture(&event, child);
- QCOMPARE(child->customEventsReceived, TotalCustomEventsCount);
+ QTRY_COMPARE(child->customEventsReceived, TotalCustomEventsCount);
QCOMPARE(parent.customEventsReceived, 0);
QCOMPARE(child->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(child->gestureOverrideEventsReceived, 0);
@@ -490,8 +494,8 @@ void tst_Gestures::multipleWidgetOnlyGestureInTree()
// same for the parent widget
sendCustomGesture(&event, &parent);
- QCOMPARE(child->customEventsReceived, 0);
QCOMPARE(parent.customEventsReceived, TotalCustomEventsCount);
+ QCOMPARE(child->customEventsReceived, 0);
QCOMPARE(child->gestureEventsReceived, 0);
QCOMPARE(child->gestureOverrideEventsReceived, 0);
QCOMPARE(parent.gestureEventsReceived, TotalGestureEventsCount);
@@ -518,7 +522,7 @@ void tst_Gestures::conflictingGestures()
CustomEvent event;
sendCustomGesture(&event, child);
- QCOMPARE(child->gestureOverrideEventsReceived, 1);
+ QTRY_COMPARE(child->gestureOverrideEventsReceived, 1);
QCOMPARE(child->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(parent.gestureOverrideEventsReceived, 0);
QCOMPARE(parent.gestureEventsReceived, 0);
@@ -586,8 +590,8 @@ void tst_Gestures::conflictingGestures()
// sending events to the child and making sure there is no conflict
sendCustomGesture(&event, child);
+ QTRY_COMPARE(child->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(child->gestureOverrideEventsReceived, 1);
- QCOMPARE(child->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(parent.gestureOverrideEventsReceived, 1);
QCOMPARE(parent.gestureEventsReceived, TotalGestureEventsCount);
@@ -595,6 +599,9 @@ void tst_Gestures::conflictingGestures()
child->reset();
Qt::GestureType ContinuousGesture = QGestureRecognizer::registerRecognizer(new CustomContinuousGestureRecognizer);
+ auto unregisterRecognizer = qScopeGuard([ContinuousGesture]{
+ QGestureRecognizer::unregisterRecognizer(ContinuousGesture);
+ });
static const int ContinuousGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialMaybeThreshold + 1;
child->grabGesture(ContinuousGesture);
// child accepts override. And it also receives another custom gesture.
@@ -602,13 +609,11 @@ void tst_Gestures::conflictingGestures()
child->acceptGestureOverride = true;
sendCustomGesture(&event, child);
+ QTRY_VERIFY(child->gestureEventsReceived > TotalGestureEventsCount);
QCOMPARE(child->gestureOverrideEventsReceived, 1);
- QVERIFY(child->gestureEventsReceived > TotalGestureEventsCount);
- QCOMPARE(child->events.all.count(), TotalGestureEventsCount + ContinuousGestureEventsCount);
+ QCOMPARE(child->events.all.size(), TotalGestureEventsCount + ContinuousGestureEventsCount);
QCOMPARE(parent.gestureOverrideEventsReceived, 0);
QCOMPARE(parent.gestureEventsReceived, 0);
-
- QGestureRecognizer::unregisterRecognizer(ContinuousGesture);
}
void tst_Gestures::finishedWithoutStarted()
@@ -621,7 +626,7 @@ void tst_Gestures::finishedWithoutStarted()
ev.serial = CustomGesture::SerialFinishedThreshold;
QApplication::sendEvent(&widget, &ev);
- QCOMPARE(widget.customEventsReceived, 1);
+ QTRY_COMPARE(widget.customEventsReceived, 1);
QCOMPARE(widget.gestureEventsReceived, 2);
QCOMPARE(widget.gestureOverrideEventsReceived, 0);
QCOMPARE(widget.events.all.size(), 2);
@@ -643,7 +648,7 @@ void tst_Gestures::unknownGesture()
static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1;
- QCOMPARE(widget.gestureEventsReceived, TotalGestureEventsCount);
+ QTRY_COMPARE(widget.gestureEventsReceived, TotalGestureEventsCount);
}
static const QColor InstanceColors[] = {
@@ -737,9 +742,10 @@ public:
++gestureEventsReceived;
eventsPtr = &events;
QGestureEvent *e = static_cast<QGestureEvent *>(event);
- foreach(Qt::GestureType type, ignoredGestures)
+ for (Qt::GestureType type : std::as_const(ignoredGestures))
e->ignore(e->gesture(type));
- foreach(QGesture *g, e->gestures()) {
+ const auto gestures = e->gestures();
+ for (QGesture *g : gestures) {
switch (g->state()) {
case Qt::GestureStarted:
if (ignoredStartedGestures.contains(g->gestureType()))
@@ -765,8 +771,8 @@ public:
}
if (eventsPtr) {
QGestureEvent *e = static_cast<QGestureEvent*>(event);
- QList<QGesture*> gestures = e->gestures();
- foreach(QGesture *g, gestures) {
+ const QList<QGesture*> gestures = e->gestures();
+ for (QGesture *g : gestures) {
eventsPtr->all << g->gestureType();
switch(g->state()) {
case Qt::GestureStarted:
@@ -824,6 +830,7 @@ void tst_Gestures::graphicsItemGesture()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setWindowFlags(Qt::X11BypassWindowManagerHint);
+ view.move(m_availableTopLeft);
GestureItem *item = new GestureItem("item");
scene.addItem(item);
@@ -846,7 +853,7 @@ void tst_Gestures::graphicsItemGesture()
QTest::ignoreMessage(QtWarningMsg, "QGestureManager::deliverEvent: could not find the target for gesture");
sendCustomGesture(&event, item, &scene);
- QCOMPARE(item->customEventsReceived, TotalCustomEventsCount);
+ QTRY_COMPARE(item->customEventsReceived, TotalCustomEventsCount);
QCOMPARE(item->gestureEventsReceived, 0);
QCOMPARE(item->gestureOverrideEventsReceived, 0);
@@ -886,6 +893,7 @@ void tst_Gestures::graphicsView()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setWindowFlags(Qt::X11BypassWindowManagerHint);
+ view.move(m_availableTopLeft);
GestureItem *item = new GestureItem("item");
scene.addItem(item);
@@ -906,7 +914,7 @@ void tst_Gestures::graphicsView()
event.hasHotSpot = true;
sendCustomGesture(&event, item, &scene);
- QCOMPARE(item->customEventsReceived, TotalCustomEventsCount);
+ QTRY_COMPARE(item->customEventsReceived, TotalCustomEventsCount);
QCOMPARE(item->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item->gestureOverrideEventsReceived, 0);
@@ -941,8 +949,8 @@ void tst_Gestures::graphicsView()
item->grabGesture(CustomGesture::GestureType);
sendCustomGesture(&event, item, &newScene);
+ QTRY_COMPARE(item->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item->customEventsReceived, TotalCustomEventsCount);
- QCOMPARE(item->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item->gestureOverrideEventsReceived, 0);
}
@@ -951,6 +959,7 @@ void tst_Gestures::graphicsItemTreeGesture()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setWindowFlags(Qt::X11BypassWindowManagerHint);
+ view.move(m_availableTopLeft);
GestureItem *item1 = new GestureItem("item1");
item1->setPos(100, 100);
@@ -981,12 +990,12 @@ void tst_Gestures::graphicsItemTreeGesture()
item1->ignoredGestures << CustomGesture::GestureType;
sendCustomGesture(&event, item1_child1, &scene);
+ QTRY_COMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item1_child1->gestureOverrideEventsReceived, 0);
QCOMPARE(item1_child1->gestureEventsReceived, 0);
QCOMPARE(item1_child2->gestureEventsReceived, 0);
QCOMPARE(item1_child2->gestureOverrideEventsReceived, 0);
QCOMPARE(item1->gestureOverrideEventsReceived, 0);
- QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
item1->reset(); item1_child1->reset(); item1_child2->reset();
@@ -995,7 +1004,7 @@ void tst_Gestures::graphicsItemTreeGesture()
item1->ignoredGestures << CustomGesture::GestureType;
item1_child1->ignoredGestures << CustomGesture::GestureType;
sendCustomGesture(&event, item1_child1, &scene);
- QCOMPARE(item1_child1->gestureOverrideEventsReceived, 1);
+ QTRY_COMPARE(item1_child1->gestureOverrideEventsReceived, 1);
QCOMPARE(item1_child1->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item1_child2->gestureEventsReceived, 0);
QCOMPARE(item1_child2->gestureOverrideEventsReceived, 0);
@@ -1008,6 +1017,7 @@ void tst_Gestures::explicitGraphicsObjectTarget()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setWindowFlags(Qt::X11BypassWindowManagerHint);
+ view.move(m_availableTopLeft);
GestureItem *item1 = new GestureItem("item1");
scene.addItem(item1);
@@ -1041,9 +1051,9 @@ void tst_Gestures::explicitGraphicsObjectTarget()
sendCustomGesture(&event, item1, &scene);
- QCOMPARE(item1->gestureEventsReceived, 0);
+ QTRY_COMPARE(item2_child1->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item1->gestureOverrideEventsReceived, 1);
- QCOMPARE(item2_child1->gestureEventsReceived, TotalGestureEventsCount);
+ QCOMPARE(item1->gestureEventsReceived, 0);
QCOMPARE(item2_child1->gestureOverrideEventsReceived, 1);
QCOMPARE(item2_child1->events.all.size(), TotalGestureEventsCount);
for(int i = 0; i < item2_child1->events.all.size(); ++i)
@@ -1084,7 +1094,7 @@ void tst_Gestures::gestureOverChildGraphicsItem()
item2_child1->setPos(0, 0);
view.show();
- QVERIFY(QTest::qWaitForWindowExposed(&view));
+ QTRY_VERIFY(QTest::qWaitForWindowExposed(&view));
view.ensureVisible(scene.sceneRect());
item1->grabGesture(CustomGesture::GestureType);
@@ -1097,7 +1107,7 @@ void tst_Gestures::gestureOverChildGraphicsItem()
event.hasHotSpot = true;
sendCustomGesture(&event, item0, &scene);
- QCOMPARE(item0->customEventsReceived, TotalCustomEventsCount);
+ QTRY_COMPARE(item0->customEventsReceived, TotalCustomEventsCount);
QCOMPARE(item2_child1->gestureEventsReceived, 0);
QCOMPARE(item2_child1->gestureOverrideEventsReceived, 0);
QCOMPARE(item2->gestureEventsReceived, 0);
@@ -1113,11 +1123,11 @@ void tst_Gestures::gestureOverChildGraphicsItem()
event.hasHotSpot = true;
sendCustomGesture(&event, item0, &scene);
- QCOMPARE(item2_child1->gestureEventsReceived, 0);
- QCOMPARE(item2_child1->gestureOverrideEventsReceived, 0);
+ QTRY_COMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item2->gestureEventsReceived, 1);
QCOMPARE(item2->gestureOverrideEventsReceived, 1);
- QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
+ QCOMPARE(item2_child1->gestureEventsReceived, 0);
+ QCOMPARE(item2_child1->gestureOverrideEventsReceived, 0);
QCOMPARE(item1->gestureOverrideEventsReceived, 1);
item0->reset(); item1->reset(); item2->reset(); item2_child1->reset();
@@ -1129,9 +1139,9 @@ void tst_Gestures::gestureOverChildGraphicsItem()
event.hasHotSpot = true;
sendCustomGesture(&event, item0, &scene);
+ QTRY_COMPARE(item2->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item2_child1->gestureEventsReceived, 0);
QCOMPARE(item2_child1->gestureOverrideEventsReceived, 0);
- QCOMPARE(item2->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item2->gestureOverrideEventsReceived, 1);
QCOMPARE(item1->gestureEventsReceived, 1);
QCOMPARE(item1->gestureOverrideEventsReceived, 1);
@@ -1146,9 +1156,9 @@ void tst_Gestures::gestureOverChildGraphicsItem()
event.hasHotSpot = true;
sendCustomGesture(&event, item0, &scene);
+ QTRY_COMPARE(item2->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item2_child1->gestureEventsReceived, 0);
QCOMPARE(item2_child1->gestureOverrideEventsReceived, 0);
- QCOMPARE(item2->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item2->gestureOverrideEventsReceived, 1);
QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item1->gestureOverrideEventsReceived, 1);
@@ -1162,6 +1172,9 @@ void tst_Gestures::twoGesturesOnDifferentLevel()
l->addWidget(child);
Qt::GestureType SecondGesture = QGestureRecognizer::registerRecognizer(new CustomGestureRecognizer);
+ auto unregisterRecognizer = qScopeGuard([SecondGesture]{
+ QGestureRecognizer::unregisterRecognizer(SecondGesture);
+ });
parent.grabGesture(CustomGesture::GestureType);
child->grabGesture(SecondGesture);
@@ -1176,20 +1189,18 @@ void tst_Gestures::twoGesturesOnDifferentLevel()
static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1;
static const int TotalCustomEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialMaybeThreshold + 1;
- QCOMPARE(child->customEventsReceived, TotalCustomEventsCount);
+ QTRY_COMPARE(child->customEventsReceived, TotalCustomEventsCount);
QCOMPARE(child->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(child->gestureOverrideEventsReceived, 0);
QCOMPARE(child->events.all.size(), TotalGestureEventsCount);
for(int i = 0; i < child->events.all.size(); ++i)
QCOMPARE(child->events.all.at(i), SecondGesture);
+ QCOMPARE(parent.events.all.size(), TotalGestureEventsCount);
QCOMPARE(parent.gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(parent.gestureOverrideEventsReceived, 0);
- QCOMPARE(parent.events.all.size(), TotalGestureEventsCount);
for(int i = 0; i < child->events.all.size(); ++i)
QCOMPARE(parent.events.all.at(i), CustomGesture::GestureType);
-
- QGestureRecognizer::unregisterRecognizer(SecondGesture);
}
void tst_Gestures::multipleGesturesInTree()
@@ -1203,6 +1214,10 @@ void tst_Gestures::multipleGesturesInTree()
Qt::GestureType FirstGesture = CustomGesture::GestureType;
Qt::GestureType SecondGesture = QGestureRecognizer::registerRecognizer(new CustomGestureRecognizer);
Qt::GestureType ThirdGesture = QGestureRecognizer::registerRecognizer(new CustomGestureRecognizer);
+ auto unregisterRecognizer = qScopeGuard([SecondGesture, ThirdGesture]{
+ QGestureRecognizer::unregisterRecognizer(SecondGesture);
+ QGestureRecognizer::unregisterRecognizer(ThirdGesture);
+ });
Qt::GestureFlags flags = Qt::ReceivePartialGestures;
A->grabGesture(FirstGesture, flags); // A [1 3]
@@ -1227,7 +1242,7 @@ void tst_Gestures::multipleGesturesInTree()
static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1;
// gesture override events
- QCOMPARE(D->overrideEvents.all.count(FirstGesture), 1);
+ QTRY_COMPARE(D->overrideEvents.all.count(FirstGesture), 1);
QCOMPARE(D->overrideEvents.all.count(SecondGesture), 0);
QCOMPARE(D->overrideEvents.all.count(ThirdGesture), 1);
@@ -1259,9 +1274,6 @@ void tst_Gestures::multipleGesturesInTree()
QCOMPARE(A->events.all.count(FirstGesture), TotalGestureEventsCount);
QCOMPARE(A->events.all.count(SecondGesture), 0);
QCOMPARE(A->events.all.count(ThirdGesture), TotalGestureEventsCount);
-
- QGestureRecognizer::unregisterRecognizer(SecondGesture);
- QGestureRecognizer::unregisterRecognizer(ThirdGesture);
}
void tst_Gestures::multipleGesturesInComplexTree()
@@ -1279,6 +1291,14 @@ void tst_Gestures::multipleGesturesInComplexTree()
Qt::GestureType FifthGesture = QGestureRecognizer::registerRecognizer(new CustomGestureRecognizer);
Qt::GestureType SixthGesture = QGestureRecognizer::registerRecognizer(new CustomGestureRecognizer);
Qt::GestureType SeventhGesture = QGestureRecognizer::registerRecognizer(new CustomGestureRecognizer);
+ auto unregisterRecognizer = qScopeGuard([=]{
+ QGestureRecognizer::unregisterRecognizer(SecondGesture);
+ QGestureRecognizer::unregisterRecognizer(ThirdGesture);
+ QGestureRecognizer::unregisterRecognizer(FourthGesture);
+ QGestureRecognizer::unregisterRecognizer(FifthGesture);
+ QGestureRecognizer::unregisterRecognizer(SixthGesture);
+ QGestureRecognizer::unregisterRecognizer(SeventhGesture);
+ });
Qt::GestureFlags flags = Qt::ReceivePartialGestures;
A->grabGesture(FirstGesture, flags); // A [1,3,4]
@@ -1308,7 +1328,7 @@ void tst_Gestures::multipleGesturesInComplexTree()
static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1;
// gesture override events
- QCOMPARE(D->overrideEvents.all.count(FirstGesture), 1);
+ QTRY_COMPARE(D->overrideEvents.all.count(FirstGesture), 1);
QCOMPARE(D->overrideEvents.all.count(SecondGesture), 0);
QCOMPARE(D->overrideEvents.all.count(ThirdGesture), 1);
@@ -1356,13 +1376,6 @@ void tst_Gestures::multipleGesturesInComplexTree()
QCOMPARE(A->events.all.count(FifthGesture), 0);
QCOMPARE(A->events.all.count(SixthGesture), 0);
QCOMPARE(A->events.all.count(SeventhGesture), 0);
-
- QGestureRecognizer::unregisterRecognizer(SecondGesture);
- QGestureRecognizer::unregisterRecognizer(ThirdGesture);
- QGestureRecognizer::unregisterRecognizer(FourthGesture);
- QGestureRecognizer::unregisterRecognizer(FifthGesture);
- QGestureRecognizer::unregisterRecognizer(SixthGesture);
- QGestureRecognizer::unregisterRecognizer(SeventhGesture);
}
void tst_Gestures::testMapToScene()
@@ -1425,13 +1438,13 @@ void tst_Gestures::ungrabGesture() // a method on QWidget
// sending an event will cause the QGesture objects to be instantiated for the widgets
sendCustomGesture(&event, b);
- QCOMPARE(a->gestures.count(), 1);
+ QTRY_COMPARE(a->gestures.size(), 1);
QPointer<QGesture> customGestureA;
customGestureA = *(a->gestures.begin());
QVERIFY(!customGestureA.isNull());
QCOMPARE(customGestureA->gestureType(), CustomGesture::GestureType);
- QCOMPARE(b->gestures.count(), 1);
+ QCOMPARE(b->gestures.size(), 1);
QPointer<QGesture> customGestureB;
customGestureB = *(b->gestures.begin());
QVERIFY(!customGestureB.isNull());
@@ -1442,7 +1455,7 @@ void tst_Gestures::ungrabGesture() // a method on QWidget
// sending an event will cause the QGesture objects to be instantiated for the widget
sendCustomGesture(&event, a);
- QCOMPARE(a->gestures.count(), 1);
+ QTRY_COMPARE(a->gestures.size(), 1);
customGestureA = *(a->gestures.begin());
QVERIFY(!customGestureA.isNull());
QCOMPARE(customGestureA->gestureType(), CustomGesture::GestureType);
@@ -1450,7 +1463,7 @@ void tst_Gestures::ungrabGesture() // a method on QWidget
a->ungrabGesture(CustomGesture::GestureType);
//We changed the deletion of Gestures to lazy during QT-4022, so we can't ensure the QGesture is deleted until now
- QVERIFY(!customGestureB.isNull());
+ QTRY_VERIFY(!customGestureB.isNull());
a->gestures.clear();
a->reset();
@@ -1487,7 +1500,7 @@ void tst_Gestures::autoCancelGestures()
{
if (event->type() == QEvent::Gesture) {
QGestureEvent *ge = static_cast<QGestureEvent*>(event);
- if (ge->gestures().count() != 1)
+ if (ge->gestures().size() != 1)
++badGestureEvents; // event should contain exactly one gesture
ge->gestures().first()->setGestureCancelPolicy(QGesture::CancelAllInContext);
}
@@ -1498,6 +1511,9 @@ void tst_Gestures::autoCancelGestures()
};
const Qt::GestureType secondGesture = QGestureRecognizer::registerRecognizer(new CustomGestureRecognizer);
+ auto unregisterRecognizer = qScopeGuard([secondGesture]{
+ QGestureRecognizer::unregisterRecognizer(secondGesture);
+ });
MockWidget parent("parent"); // this one sets the cancel policy to CancelAllInContext
parent.resize(300, 100);
@@ -1520,15 +1536,15 @@ void tst_Gestures::autoCancelGestures()
CustomEvent event;
event.serial = CustomGesture::SerialStartedThreshold;
QApplication::sendEvent(child, &event);
- QCOMPARE(child->events.all.count(), 2);
- QCOMPARE(child->events.started.count(), 1);
- QCOMPARE(child->events.canceled.count(), 1);
- QCOMPARE(parent.events.all.count(), 1);
+ QCOMPARE(child->events.all.size(), 2);
+ QCOMPARE(child->events.started.size(), 1);
+ QCOMPARE(child->events.canceled.size(), 1);
+ QCOMPARE(parent.events.all.size(), 1);
// clean up, make the parent gesture finish
event.serial = CustomGesture::SerialFinishedThreshold;
QApplication::sendEvent(child, &event);
- QCOMPARE(parent.events.all.count(), 2);
+ QCOMPARE(parent.events.all.size(), 2);
QCOMPARE(parent.badGestureEvents, 0);
}
@@ -1542,7 +1558,7 @@ void tst_Gestures::autoCancelGestures2()
{
if (event->type() == QEvent::Gesture) {
QGestureEvent *ge = static_cast<QGestureEvent*>(event);
- if (ge->gestures().count() != 1)
+ if (ge->gestures().size() != 1)
++badGestureEvents; // event should contain exactly one gesture
ge->gestures().first()->setGestureCancelPolicy(QGesture::CancelAllInContext);
}
@@ -1553,10 +1569,14 @@ void tst_Gestures::autoCancelGestures2()
};
const Qt::GestureType secondGesture = QGestureRecognizer ::registerRecognizer(new CustomGestureRecognizer);
+ auto unregisterRecognizer = qScopeGuard([secondGesture]{
+ QGestureRecognizer::unregisterRecognizer(secondGesture);
+ });
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setWindowFlags(Qt::X11BypassWindowManagerHint);
+ view.move(m_availableTopLeft);
MockItem *parent = new MockItem("parent");
GestureItem *child = new GestureItem("child");
@@ -1576,15 +1596,15 @@ void tst_Gestures::autoCancelGestures2()
event.hasHotSpot = true;
event.hotSpot = mapToGlobal(QPointF(5, 5), child, &view);
scene.sendEvent(child, &event);
- QCOMPARE(parent->events.all.count(), 1);
- QCOMPARE(child->events.started.count(), 1);
- QCOMPARE(child->events.canceled.count(), 1);
- QCOMPARE(child->events.all.count(), 2);
+ QCOMPARE(parent->events.all.size(), 1);
+ QCOMPARE(child->events.started.size(), 1);
+ QCOMPARE(child->events.canceled.size(), 1);
+ QCOMPARE(child->events.all.size(), 2);
// clean up, make the parent gesture finish
event.serial = CustomGesture::SerialFinishedThreshold;
scene.sendEvent(child, &event);
- QCOMPARE(parent->events.all.count(), 2);
+ QCOMPARE(parent->events.all.size(), 2);
QCOMPARE(parent->badGestureEvents, 0);
}
@@ -1593,6 +1613,7 @@ void tst_Gestures::graphicsViewParentPropagation()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setWindowFlags(Qt::X11BypassWindowManagerHint);
+ view.move(m_availableTopLeft);
GestureItem *item0 = new GestureItem("item0");
scene.addItem(item0);
@@ -1638,7 +1659,7 @@ void tst_Gestures::graphicsViewParentPropagation()
event.hasHotSpot = true;
sendCustomGesture(&event, item0, &scene);
- QCOMPARE(item1_c1_c1->gestureEventsReceived, TotalGestureEventsCount);
+ QTRY_COMPARE(item1_c1_c1->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item1_c1_c1->gestureOverrideEventsReceived, 1);
QCOMPARE(item1_c1->gestureEventsReceived, TotalGestureEventsCount-1);
QCOMPARE(item1_c1->gestureOverrideEventsReceived, 1);
@@ -1653,6 +1674,7 @@ void tst_Gestures::panelPropagation()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setWindowFlags(Qt::X11BypassWindowManagerHint);
+ view.move(m_availableTopLeft);
GestureItem *item0 = new GestureItem("item0");
scene.addItem(item0);
@@ -1710,11 +1732,11 @@ void tst_Gestures::panelPropagation()
event.hasHotSpot = true;
sendCustomGesture(&event, item1, &scene);
+ QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item1_child1_child1->gestureEventsReceived, 0);
QCOMPARE(item1_child1_child1->gestureOverrideEventsReceived, 0);
QCOMPARE(item1_child1->gestureEventsReceived, 0);
QCOMPARE(item1_child1->gestureOverrideEventsReceived, 0);
- QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item1->gestureOverrideEventsReceived, 1);
QCOMPARE(item0->gestureEventsReceived, 0);
QCOMPARE(item0->gestureOverrideEventsReceived, 1);
@@ -1764,7 +1786,7 @@ void tst_Gestures::panelPropagation()
QCOMPARE(item1_child1_child1->gestureEventsReceived, 0);
QCOMPARE(item1_child1_child1->gestureOverrideEventsReceived, 0);
- QCOMPARE(item1_child1->gestureEventsReceived, TotalGestureEventsCount);
+ QTRY_COMPARE(item1_child1->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item1_child1->gestureOverrideEventsReceived, 0);
QCOMPARE(item1->gestureEventsReceived, 0);
QCOMPARE(item1->gestureOverrideEventsReceived, 0);
@@ -1777,6 +1799,7 @@ void tst_Gestures::panelStacksBehindParent()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setWindowFlags(Qt::X11BypassWindowManagerHint);
+ view.move(m_availableTopLeft);
GestureItem *item1 = new GestureItem("item1");
item1->grabGesture(CustomGesture::GestureType);
@@ -1956,7 +1979,7 @@ void tst_Gestures::viewportCoordinates()
event.hotSpot = mapToGlobal(item1->boundingRect().center(), item1, &view);
event.hasHotSpot = true;
sendCustomGesture(&event, item1, &scene);
- QVERIFY(item1->gestureEventsReceived != 0);
+ QTRY_VERIFY(item1->gestureEventsReceived != 0);
}
void tst_Gestures::partialGesturePropagation()
@@ -1964,6 +1987,7 @@ void tst_Gestures::partialGesturePropagation()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.setWindowFlags(Qt::X11BypassWindowManagerHint);
+ view.move(m_availableTopLeft);
GestureItem *item1 = new GestureItem("item1");
item1->grabGesture(CustomGesture::GestureType);
@@ -1998,13 +2022,14 @@ void tst_Gestures::partialGesturePropagation()
static const int TotalGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialStartedThreshold + 1;
+ QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
+ QCOMPARE(item2->gestureEventsReceived, TotalGestureEventsCount-2); // except for started and finished
+
QCOMPARE(item1->gestureOverrideEventsReceived, 1);
QCOMPARE(item2->gestureOverrideEventsReceived, 1);
QCOMPARE(item3->gestureOverrideEventsReceived, 1);
QCOMPARE(item4->gestureOverrideEventsReceived, 1);
- QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
- QCOMPARE(item2->gestureEventsReceived, TotalGestureEventsCount-2); // except for started and finished
QCOMPARE(item3->gestureEventsReceived, 0);
QCOMPARE(item4->gestureEventsReceived, 0);
}
@@ -2054,10 +2079,14 @@ void tst_Gestures::testQGestureRecognizerCleanup()
// Mimic QGestureManager: register both default and "platform" recognizers
// (this is done in windows when QT_NO_NATIVE_GESTURES is not defined)
PanRecognizer *def = new PanRecognizer(PanRecognizer::Default);
- QGestureRecognizer::registerRecognizer(def);
+ auto defRecognizer = QGestureRecognizer::registerRecognizer(def);
PanRecognizer *plt = new PanRecognizer(PanRecognizer::Platform);
- QGestureRecognizer::registerRecognizer(plt);
+ auto pltRecognizer = QGestureRecognizer::registerRecognizer(plt);
qDebug () << "register: default =" << def << "; platform =" << plt;
+ auto unregisterRecognizer = qScopeGuard([defRecognizer, pltRecognizer]{
+ QGestureRecognizer::unregisterRecognizer(defRecognizer);
+ QGestureRecognizer::unregisterRecognizer(pltRecognizer);
+ });
// ^-- Qt singleton QGManager initialization
@@ -2171,11 +2200,16 @@ void tst_Gestures::testReuseCanceledGestures()
new ReuseCanceledGesturesRecognizer(ReuseCanceledGesturesRecognizer::RmbAndCancelAllType));
Qt::GestureType tapGestureTypeId = QGestureRecognizer::registerRecognizer(
new ReuseCanceledGesturesRecognizer(ReuseCanceledGesturesRecognizer::LmbType));
+ auto unregisterRecognizer = qScopeGuard([=]{
+ QGestureRecognizer::unregisterRecognizer(cancellingGestureTypeId);
+ QGestureRecognizer::unregisterRecognizer(tapGestureTypeId);
+ });
QMainWindow mw;
mw.setWindowFlags(Qt::X11BypassWindowManagerHint);
QGraphicsView *gv = new QGraphicsView(&mw);
QGraphicsScene *scene = new QGraphicsScene;
+ mw.move(m_availableTopLeft);
gv->setScene(scene);
scene->setSceneRect(0,0,100,100);
@@ -2278,8 +2312,8 @@ void tst_Gestures::conflictingGesturesInGraphicsView()
event.hotSpot = mapToGlobal(item2->boundingRect().center(), item2, &view);
event.hasHotSpot = true;
sendCustomGesture(&event, item2, &scene);
+ QTRY_COMPARE(item2->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item2->gestureOverrideEventsReceived, 1);
- QCOMPARE(item2->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item1->gestureOverrideEventsReceived, 1);
QCOMPARE(item1->gestureEventsReceived, 0);
@@ -2291,8 +2325,8 @@ void tst_Gestures::conflictingGesturesInGraphicsView()
event.hotSpot = mapToGlobal(item2->boundingRect().center(), item2, &view);
event.hasHotSpot = true;
sendCustomGesture(&event, item2, &scene);
- QCOMPARE(item2->gestureOverrideEventsReceived, 1);
QCOMPARE(item2->gestureEventsReceived, TotalGestureEventsCount);
+ QCOMPARE(item2->gestureOverrideEventsReceived, 1);
QCOMPARE(item1->gestureOverrideEventsReceived, 0);
QCOMPARE(item1->gestureEventsReceived, 0);
@@ -2304,11 +2338,11 @@ void tst_Gestures::conflictingGesturesInGraphicsView()
event.hotSpot = mapToGlobal(item2->boundingRect().center(), item2, &view);
event.hasHotSpot = true;
sendCustomGesture(&event, item2, &scene);
+ QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
QCOMPARE(item2->gestureOverrideEventsReceived, 1);
QCOMPARE(item2->gestureEventsReceived, 0);
QCOMPARE(item1->gestureOverrideEventsReceived, 1);
- QCOMPARE(item1->gestureEventsReceived, TotalGestureEventsCount);
}
class NoConsumeWidgetBug13501 :public QWidget
diff --git a/tests/auto/other/languagechange/CMakeLists.txt b/tests/auto/other/languagechange/CMakeLists.txt
index 0275ea05fd..07f3547d58 100644
--- a/tests/auto/other/languagechange/CMakeLists.txt
+++ b/tests/auto/other/languagechange/CMakeLists.txt
@@ -1,21 +1,22 @@
-# Generated from languagechange.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_languagechange Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_languagechange LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_languagechange
SOURCES
tst_languagechange.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
)
-
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:languagechange.pro:WIN32:
-# testcase.timeout = "1800"
diff --git a/tests/auto/other/languagechange/tst_languagechange.cpp b/tests/auto/other/languagechange/tst_languagechange.cpp
index 0c435a0cb1..8f99730a19 100644
--- a/tests/auto/other/languagechange/tst_languagechange.cpp
+++ b/tests/auto/other/languagechange/tst_languagechange.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 <QTest>
diff --git a/tests/auto/other/macgui/BLACKLIST b/tests/auto/other/macgui/BLACKLIST
index 05e529e519..a6dc56611b 100644
--- a/tests/auto/other/macgui/BLACKLIST
+++ b/tests/auto/other/macgui/BLACKLIST
@@ -1,5 +1,2 @@
-[nonModalOrder]
-osx
-
[scrollbarPainting]
macos
diff --git a/tests/auto/other/macgui/CMakeLists.txt b/tests/auto/other/macgui/CMakeLists.txt
index 348d7f1241..afa3f0b8df 100644
--- a/tests/auto/other/macgui/CMakeLists.txt
+++ b/tests/auto/other/macgui/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from macgui.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_macgui LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT APPLE)
return()
endif()
-if(NOT TARGET Qt::Widgets) # special case
+if(NOT TARGET Qt::Widgets)
return()
endif()
@@ -15,18 +22,17 @@ qt_internal_add_test(tst_macgui
SOURCES
guitest.cpp guitest.h
tst_macgui.cpp
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ guitest.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::CorePrivate
Qt::WidgetsPrivate
)
-#### Keys ignored in scope 1:.:.:macgui.pro:<TRUE>:
-# _REQUIREMENTS = "mac" "widgets"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_macgui CONDITION MACOS
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWApplicationServices}
)
diff --git a/tests/auto/other/macgui/guitest.cpp b/tests/auto/other/macgui/guitest.cpp
index 2effce7393..fbae891065 100644
--- a/tests/auto/other/macgui/guitest.cpp
+++ b/tests/auto/other/macgui/guitest.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** 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
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "guitest.h"
#include <QDebug>
diff --git a/tests/auto/other/macgui/guitest.h b/tests/auto/other/macgui/guitest.h
index 74f4292a6b..80a2103fc9 100644
--- a/tests/auto/other/macgui/guitest.h
+++ b/tests/auto/other/macgui/guitest.h
@@ -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
#ifndef GUITEST_H
#define GUITEST_H
diff --git a/tests/auto/other/macgui/tst_macgui.cpp b/tests/auto/other/macgui/tst_macgui.cpp
index 3b4e0e33cb..efcecef9ad 100644
--- a/tests/auto/other/macgui/tst_macgui.cpp
+++ b/tests/auto/other/macgui/tst_macgui.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 <QApplication>
@@ -151,40 +126,6 @@ void tst_MacGui::splashScreenModality()
QVERIFY(!QTestEventLoop::instance().timeout());
}
-class PrimaryWindowDialog : public QDialog
-{
-Q_OBJECT
-public:
- PrimaryWindowDialog();
- QWidget *secondaryWindow;
- QWidget *frontWidget;
-public slots:
- void showSecondaryWindow();
- void test();
-};
-
-PrimaryWindowDialog::PrimaryWindowDialog() : QDialog(0)
-{
- frontWidget = 0;
- secondaryWindow = new ColorWidget(this);
- secondaryWindow->setWindowFlags(Qt::Window);
- secondaryWindow->resize(400, 400);
- secondaryWindow->move(100, 100);
- QTimer::singleShot(1000, this, SLOT(showSecondaryWindow()));
- QTimer::singleShot(2000, this, SLOT(test()));
- QTimer::singleShot(3000, this, SLOT(close()));
-}
-
-void PrimaryWindowDialog::showSecondaryWindow()
-{
- secondaryWindow->show();
-}
-
-void PrimaryWindowDialog::test()
-{
- frontWidget = QApplication::widgetAt(secondaryWindow->mapToGlobal(QPoint(100, 100)));
-}
-
/*
Test that a non-modal child window of a modal dialog is shown in front
of the dialog even if the dialog becomes modal after the child window
@@ -193,11 +134,28 @@ void PrimaryWindowDialog::test()
void tst_MacGui::nonModalOrder()
{
clearSequence();
- PrimaryWindowDialog primary;
- primary.resize(400, 400);
- primary.move(100, 100);
- primary.exec();
- QCOMPARE(primary.frontWidget, primary.secondaryWindow);
+
+ QDialog dialog;
+ dialog.resize(400, 400);
+ dialog.move(100, 100);
+
+ ColorWidget child(&dialog);
+ // The child window needs to be a dialog, as only subclasses of NSPanel
+ // are allowed to override worksWhenModal, which is needed to mark the
+ // transient child as working within the modal session of the parent.
+ child.setWindowFlags(Qt::Window | Qt::Dialog);
+ child.resize(400, 400);
+ child.move(100, 100);
+
+ QTimer::singleShot(0, [&]{
+ QVERIFY(QTest::qWaitForWindowExposed(&dialog));
+ child.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&child));
+ QCOMPARE(QApplication::widgetAt(child.mapToGlobal(QPoint(100, 100))), &child);
+ dialog.close();
+ });
+
+ dialog.exec();
}
/*
diff --git a/tests/auto/other/macnativeevents/CMakeLists.txt b/tests/auto/other/macnativeevents/CMakeLists.txt
index dd049c245a..c44cf61920 100644
--- a/tests/auto/other/macnativeevents/CMakeLists.txt
+++ b/tests/auto/other/macnativeevents/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from macnativeevents.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_macnativeevents LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT APPLE)
return()
@@ -15,13 +22,8 @@ qt_internal_add_test(tst_macnativeevents
qnativeevents.cpp qnativeevents.h
qnativeevents_mac.cpp
tst_macnativeevents.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWAppKit}
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:macnativeevents.pro:<TRUE>:
-# _REQUIREMENTS = "mac"
diff --git a/tests/auto/other/macnativeevents/expectedeventlist.cpp b/tests/auto/other/macnativeevents/expectedeventlist.cpp
index 52552342e4..a8c662ad93 100644
--- a/tests/auto/other/macnativeevents/expectedeventlist.cpp
+++ b/tests/auto/other/macnativeevents/expectedeventlist.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 "expectedeventlist.h"
#include <QDebug>
diff --git a/tests/auto/other/macnativeevents/expectedeventlist.h b/tests/auto/other/macnativeevents/expectedeventlist.h
index a48581df21..f21b56c9b2 100644
--- a/tests/auto/other/macnativeevents/expectedeventlist.h
+++ b/tests/auto/other/macnativeevents/expectedeventlist.h
@@ -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
#ifndef EVENTFILTER
#define EVENTFILTER
diff --git a/tests/auto/other/macnativeevents/nativeeventlist.cpp b/tests/auto/other/macnativeevents/nativeeventlist.cpp
index b2956fa94e..6216c9682f 100644
--- a/tests/auto/other/macnativeevents/nativeeventlist.cpp
+++ b/tests/auto/other/macnativeevents/nativeeventlist.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 "nativeeventlist.h"
diff --git a/tests/auto/other/macnativeevents/nativeeventlist.h b/tests/auto/other/macnativeevents/nativeeventlist.h
index 7425414da7..20e91a689a 100644
--- a/tests/auto/other/macnativeevents/nativeeventlist.h
+++ b/tests/auto/other/macnativeevents/nativeeventlist.h
@@ -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
#ifndef Q_NATIVE_PLAYBACK
#define Q_NATIVE_PLAYBACK
diff --git a/tests/auto/other/macnativeevents/qnativeevents.cpp b/tests/auto/other/macnativeevents/qnativeevents.cpp
index 970c41bf2e..a516fc28d6 100644
--- a/tests/auto/other/macnativeevents/qnativeevents.cpp
+++ b/tests/auto/other/macnativeevents/qnativeevents.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 "qnativeevents.h"
diff --git a/tests/auto/other/macnativeevents/qnativeevents.h b/tests/auto/other/macnativeevents/qnativeevents.h
index ca0cd47675..cab2472083 100644
--- a/tests/auto/other/macnativeevents/qnativeevents.h
+++ b/tests/auto/other/macnativeevents/qnativeevents.h
@@ -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
#ifndef Q_NATIVE_INPUT
#define Q_NATIVE_INPUT
diff --git a/tests/auto/other/macnativeevents/qnativeevents_mac.cpp b/tests/auto/other/macnativeevents/qnativeevents_mac.cpp
index 6d7fbbecc1..a2e1a66c65 100644
--- a/tests/auto/other/macnativeevents/qnativeevents_mac.cpp
+++ b/tests/auto/other/macnativeevents/qnativeevents_mac.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 "qnativeevents.h"
#include <CoreGraphics/CoreGraphics.h>
diff --git a/tests/auto/other/macnativeevents/tst_macnativeevents.cpp b/tests/auto/other/macnativeevents/tst_macnativeevents.cpp
index 79e59e2616..3cb934d7d5 100644
--- a/tests/auto/other/macnativeevents/tst_macnativeevents.cpp
+++ b/tests/auto/other/macnativeevents/tst_macnativeevents.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 <QApplication>
#include <QWidget>
diff --git a/tests/auto/other/macplist/BLACKLIST b/tests/auto/other/macplist/BLACKLIST
deleted file mode 100644
index 83ed55936e..0000000000
--- a/tests/auto/other/macplist/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[test_plist:LSUIElement-as-garbage]
-osx
diff --git a/tests/auto/other/macplist/CMakeLists.txt b/tests/auto/other/macplist/CMakeLists.txt
index 7ebb9d732c..6a98d4dc16 100644
--- a/tests/auto/other/macplist/CMakeLists.txt
+++ b/tests/auto/other/macplist/CMakeLists.txt
@@ -1,6 +1,13 @@
-# Generated from macplist.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-if(NOT TARGET Qt::Widgets) # special case
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_macplist LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+if(NOT TARGET Qt::Widgets)
return()
endif()
add_subdirectory(app)
diff --git a/tests/auto/other/macplist/app/CMakeLists.txt b/tests/auto/other/macplist/app/CMakeLists.txt
index 127d72b1e4..8af8e9f578 100644
--- a/tests/auto/other/macplist/app/CMakeLists.txt
+++ b/tests/auto/other/macplist/app/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from app.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## app Binary:
@@ -6,10 +7,10 @@
qt_internal_add_executable(app
GUI
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/other/macplist/app/main.cpp b/tests/auto/other/macplist/app/main.cpp
index 1d620eb7c6..2f07fe3c25 100644
--- a/tests/auto/other/macplist/app/main.cpp
+++ b/tests/auto/other/macplist/app/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 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 <QtWidgets/QApplication>
diff --git a/tests/auto/other/macplist/test/CMakeLists.txt b/tests/auto/other/macplist/test/CMakeLists.txt
index 157df5767f..e55dfb2591 100644
--- a/tests/auto/other/macplist/test/CMakeLists.txt
+++ b/tests/auto/other/macplist/test/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_macplist Test:
@@ -8,7 +9,7 @@ qt_internal_add_test(tst_macplist
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../tst_macplist.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/auto/other/macplist/tst_macplist.cpp b/tests/auto/other/macplist/tst_macplist.cpp
index 10303aed96..12240c45b5 100644
--- a/tests/auto/other/macplist/tst_macplist.cpp
+++ b/tests/auto/other/macplist/tst_macplist.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 <QTest>
diff --git a/tests/auto/other/networkselftest/BLACKLIST b/tests/auto/other/networkselftest/BLACKLIST
index 20f0295b48..9865f4def5 100644
--- a/tests/auto/other/networkselftest/BLACKLIST
+++ b/tests/auto/other/networkselftest/BLACKLIST
@@ -1,6 +1,5 @@
# QTBUG-27571
[ftpProxyServer]
-windows-7sp1
windows-10
[smbServer]
opensuse-leap
diff --git a/tests/auto/other/networkselftest/CMakeLists.txt b/tests/auto/other/networkselftest/CMakeLists.txt
index 547e4afd7e..6491c510f6 100644
--- a/tests/auto/other/networkselftest/CMakeLists.txt
+++ b/tests/auto/other/networkselftest/CMakeLists.txt
@@ -1,17 +1,21 @@
-# Generated from networkselftest.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_networkselftest Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_networkselftest LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_networkselftest
SOURCES
tst_networkselftest.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
- QT_TEST_SERVER_LIST "danted" "squid" "apache2" "ftp-proxy" "vsftpd" "cyrus" "echo" # special case
+ QT_TEST_SERVER_LIST "danted" "squid" "apache2" "ftp-proxy" "vsftpd" "cyrus" "echo"
)
-
-#### Keys ignored in scope 1:.:.:networkselftest.pro:<TRUE>:
-# QT_TEST_SERVER_LIST = "cyrus" "vsftpd" "apache2" "ftp-proxy" "danted" "squid" "echo"
diff --git a/tests/auto/other/networkselftest/tst_networkselftest.cpp b/tests/auto/other/networkselftest/tst_networkselftest.cpp
index f1fd869671..81d3b60248 100644
--- a/tests/auto/other/networkselftest/tst_networkselftest.cpp
+++ b/tests/auto/other/networkselftest/tst_networkselftest.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 <QTest>
#include <QtNetwork/QtNetwork>
@@ -130,8 +105,8 @@ static QString prettyByteArray(const QByteArray &array)
{
// any control chars?
QString result;
- result.reserve(array.length() + array.length() / 3);
- for (int i = 0; i < array.length(); ++i) {
+ result.reserve(array.size() + array.size() / 3);
+ for (int i = 0; i < array.size(); ++i) {
char c = array.at(i);
switch (c) {
case '\n':
@@ -233,11 +208,11 @@ static void netChat(int port, const QList<Chat> &chat)
switch (it->type) {
case Chat::Expect: {
qDebug() << i << "Expecting" << prettyByteArray(it->data);
- if (!doSocketRead(&socket, it->data.length(), 3 * defaultReadTimeoutMS))
- QFAIL(msgDoSocketReadFailed(serverName, port, i, it->data.length()));
+ if (!doSocketRead(&socket, it->data.size(), 3 * defaultReadTimeoutMS))
+ QFAIL(msgDoSocketReadFailed(serverName, port, i, it->data.size()));
// pop that many bytes off the socket
- QByteArray received = socket.read(it->data.length());
+ QByteArray received = socket.read(it->data.size());
// is it what we expected?
QVERIFY2(received == it->data,
@@ -251,8 +226,8 @@ static void netChat(int port, const QList<Chat> &chat)
qDebug() << i << "Discarding until" << prettyByteArray(it->data);
while (true) {
// scan the buffer until we have our string
- if (!doSocketRead(&socket, it->data.length()))
- QFAIL(msgDoSocketReadFailed(serverName, port, i, it->data.length()));
+ if (!doSocketRead(&socket, it->data.size()))
+ QFAIL(msgDoSocketReadFailed(serverName, port, i, it->data.size()));
QByteArray buffer;
buffer.resize(socket.bytesAvailable());
@@ -264,7 +239,7 @@ static void netChat(int port, const QList<Chat> &chat)
continue;
}
- buffer = socket.read(pos + it->data.length());
+ buffer = socket.read(pos + it->data.size());
qDebug() << i << "Discarded" << prettyByteArray(buffer);
break;
}
@@ -379,7 +354,7 @@ void tst_NetworkSelfTest::initTestCase()
if (resolved.error() == QHostInfo::NoError && !resolved.addresses().isEmpty())
ftpServerIpAddress = resolved.addresses().first();
// TODO: 'ssh', port 22.
- QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::ftpProxyServerName(), 2121));
+ // QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::ftpProxyServerName(), 2121));
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::httpServerName(), 80));
// TODO: 'smb', port 139.
QVERIFY(QtNetworkSettings::verifyConnection(QtNetworkSettings::imapServerName(), 143));
@@ -536,6 +511,7 @@ void tst_NetworkSelfTest::ftpServer()
void tst_NetworkSelfTest::ftpProxyServer()
{
+ QSKIP("FTP not currently supported.");
netChat(2121, ftpChat("@" + QtNetworkSettings::ftpServerName().toLatin1()));
}
diff --git a/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.cpp b/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.cpp
index ecc95d30b6..d670cec196 100644
--- a/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.cpp
+++ b/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 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) 2009 Stephen Kelly <steveire@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "dynamictreemodel.h"
@@ -216,7 +191,7 @@ void ModelMoveCommand::doCommand()
return;
for (int column = 0; column < m_numCols; ++column) {
- QList<qint64> l = m_model->m_childItems.value(srcParent.internalId())[column].mid(
+ const QList<qint64> l = m_model->m_childItems.value(srcParent.internalId())[column].mid(
m_startRow, m_endRow - m_startRow + 1);
for (int i = m_startRow; i <= m_endRow; i++)
@@ -231,7 +206,7 @@ void ModelMoveCommand::doCommand()
d = m_destRow;
}
- foreach (const qint64 id, l)
+ for (qint64 id : l)
m_model->m_childItems[destParent.internalId()][column].insert(d++, id);
}
@@ -308,9 +283,7 @@ void ModelChangeChildrenLayoutsCommand::doCommand()
const QPersistentModelIndex parent1 = findIndex(m_rowNumbers);
const QPersistentModelIndex parent2 = findIndex(m_secondRowNumbers);
- QList<QPersistentModelIndex> parents;
- parents << parent1;
- parents << parent2;
+ const QList<QPersistentModelIndex> parents = { parent1, parent2 };
emit m_model->layoutAboutToBeChanged(parents);
@@ -334,13 +307,13 @@ void ModelChangeChildrenLayoutsCommand::doCommand()
// changing any children of that parent. The reason is that we're keeping parent1 and parent2
// around as QPersistentModelIndex instances, and we query idx.parent() in the loop.
QModelIndexList persistent = m_model->persistentIndexList();
- foreach (const QModelIndex &parent, parents) {
+ for (const QPersistentModelIndex &parent : parents) {
int idx = persistent.indexOf(parent);
if (idx != -1)
persistent.move(idx, 0);
}
- foreach (const QModelIndex &idx, persistent) {
+ for (const QModelIndex &idx : std::as_const(persistent)) {
if (idx.parent() == parent1) {
if (idx.row() == rowSize1 - 1) {
m_model->changePersistentIndex(idx,
diff --git a/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.h b/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.h
index ba566cbbac..bc7db2ad0f 100644
--- a/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.h
+++ b/tests/auto/other/qabstractitemmodelutils/dynamictreemodel.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2009 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) 2009 Stephen Kelly <steveire@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef DYNAMICTREEMODEL_H
#define DYNAMICTREEMODEL_H
diff --git a/tests/auto/other/qaccessibility/CMakeLists.txt b/tests/auto/other/qaccessibility/CMakeLists.txt
index c516188396..9160bafe52 100644
--- a/tests/auto/other/qaccessibility/CMakeLists.txt
+++ b/tests/auto/other/qaccessibility/CMakeLists.txt
@@ -1,14 +1,15 @@
-# Generated from qaccessibility.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-if(NOT QT_FEATURE_accessibility)
- return()
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qaccessibility LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
endif()
-# special case begin
-if (WIN32 AND NOT TARGET Qt::WindowsUIAutomationSupport)
+if(NOT QT_FEATURE_accessibility)
return()
endif()
-# special case end
#####################################################################
## tst_qaccessibility Test:
@@ -18,7 +19,7 @@ qt_internal_add_test(tst_qaccessibility
SOURCES
accessiblewidgets.h
tst_qaccessibility.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -26,19 +27,16 @@ qt_internal_add_test(tst_qaccessibility
Qt::WidgetsPrivate
)
-#### Keys ignored in scope 1:.:.:qaccessibility.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(accessibility)"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qaccessibility CONDITION UNIX AND NOT APPLE AND NOT HAIKU AND NOT INTEGRITY
- PUBLIC_LIBRARIES
+ LIBRARIES
m
)
qt_internal_extend_target(tst_qaccessibility CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
ole32
oleacc
oleaut32
diff --git a/tests/auto/other/qaccessibility/accessiblewidgets.h b/tests/auto/other/qaccessibility/accessiblewidgets.h
index 13ca687dd9..76b1f1f473 100644
--- a/tests/auto/other/qaccessibility/accessiblewidgets.h
+++ b/tests/auto/other/qaccessibility/accessiblewidgets.h
@@ -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
#ifndef ACCESSIBLEWIDGETS_H
@@ -141,7 +116,7 @@ public:
int cursorPosition() const override { return textWidget()->cursorPosition; }
void setCursorPosition(int position) override { textWidget()->cursorPosition = position; }
QString text(int startOffset, int endOffset) const override { return textWidget()->text.mid(startOffset, endOffset); }
- int characterCount() const override { return textWidget()->text.length(); }
+ int characterCount() const override { return textWidget()->text.size(); }
QRect characterRect(int) const override { return QRect(); }
int offsetAtPoint(const QPoint &) const override { return 0; }
void scrollToSubstring(int, int) override {}
diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
index 615a1a1617..0c019544bd 100644
--- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
+++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp
@@ -1,50 +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 <QtCore/qglobal.h>
#ifdef Q_OS_WIN
# include <QtCore/qt_windows.h>
# include <oleacc.h>
-# include <QtGui/private/qwindowsuiawrapper_p.h>
+# include <uiautomation.h>
# include <servprov.h>
# include <winuser.h>
#endif
#include <QTest>
+#include <QSignalSpy>
#include <QtGui>
#include <QtWidgets>
#include <math.h>
#include <qpa/qplatformnativeinterface.h>
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformaccessibility.h>
+#ifdef Q_OS_WIN
+#include <QtCore/private/qfunctions_win_p.h>
+#endif
#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/private/qhighdpiscaling_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+#include <QtWidgets/private/qdialog_p.h>
+
#if defined(Q_OS_WIN) && defined(interface)
# undef interface
#endif
@@ -58,6 +39,7 @@
#include <QtTest/private/qtesthelpers_p.h>
using namespace QTestPrivate;
+using namespace Qt::StringLiterals;
static inline bool verifyChild(QWidget *child, QAccessibleInterface *interface,
int index, const QRect &domain)
@@ -185,6 +167,7 @@ public slots:
void cleanup();
private slots:
void eventTest();
+ void eventWithChildTest();
void customWidget();
void deletedWidget();
void subclassedWidget();
@@ -231,18 +214,24 @@ private slots:
void listTest();
void treeTest();
void tableTest();
+ void rootIndexView();
+ void uniqueIdTest();
void calendarWidgetTest();
void dockWidgetTest();
void comboBoxTest();
void accessibleName();
#if QT_CONFIG(shortcut)
void labelTest();
+ void relationTest();
void accelerators();
#endif
void bridgeTest();
void focusChild();
+ void messageBoxTest_data();
+ void messageBoxTest();
+
protected slots:
void onClicked();
private:
@@ -269,13 +258,21 @@ void tst_QAccessibility::onClicked()
click_count++;
}
+static bool initAccessibility()
+{
+ QPlatformIntegration *pfIntegration = QGuiApplicationPrivate::platformIntegration();
+ if (pfIntegration->accessibility()) {
+ pfIntegration->accessibility()->setActive(true);
+ return true;
+ }
+ return false;
+}
+
void tst_QAccessibility::initTestCase()
{
QTestAccessibility::initialize();
- QPlatformIntegration *pfIntegration = QGuiApplicationPrivate::platformIntegration();
- if (!pfIntegration->accessibility())
+ if (!initAccessibility())
QSKIP("This platform does not support accessibility");
- pfIntegration->accessibility()->setActive(true);
}
void tst_QAccessibility::cleanupTestCase()
@@ -286,15 +283,26 @@ void tst_QAccessibility::cleanupTestCase()
void tst_QAccessibility::init()
{
QTestAccessibility::clearEvents();
+#ifdef Q_OS_ANDROID
+ // On Android a11y state is not explicitly set by calling
+ // QPlatformAccessibility::setActive(), there is another flag that is
+ // controlled from the Java side. The state of this flag is queried
+ // during event processing, so a11y state can be reset to false while
+ // we do QTest::qWait().
+ // To overcome the issue in unit-tests, re-enable a11y before each test.
+ // A more precise fix will require re-enabling it after every qWait() or
+ // processEvents() call, but the current tests pass with such condition.
+ initAccessibility();
+#endif
}
void tst_QAccessibility::cleanup()
{
const EventList list = QTestAccessibility::events();
if (!list.isEmpty()) {
- qWarning("%zd accessibility event(s) were not handled in testfunction '%s':", size_t(list.count()),
+ qWarning("%zd accessibility event(s) were not handled in testfunction '%s':", size_t(list.size()),
QString(QTest::currentTestFunction()).toLatin1().constData());
- for (int i = 0; i < list.count(); ++i)
+ for (int i = 0; i < list.size(); ++i)
qWarning(" %d: Object: %p Event: '%s' Child: %d", i + 1, list.at(i)->object(),
qAccessibleEventString(list.at(i)->type()), list.at(i)->child());
}
@@ -304,7 +312,8 @@ void tst_QAccessibility::cleanup()
void tst_QAccessibility::eventTest()
{
- QPushButton* button = new QPushButton(0);
+ auto buttonHolder = std::make_unique<QPushButton>(nullptr);
+ auto button = buttonHolder.get();
QAccessible::queryAccessibleInterface(button);
button->setObjectName(QString("Olaf"));
setFrameless(button);
@@ -329,83 +338,109 @@ void tst_QAccessibility::eventTest()
// some platforms might send other events first, (such as state change event active=1)
QVERIFY(QTestAccessibility::containsEvent(&hideEvent));
- delete button;
+ buttonHolder.reset();
// Make sure that invalid events don't bring down the system
// these events can be in user code.
- QWidget *widget = new QWidget();
+ auto widgetHolder = std::make_unique<QWidget>();
+ auto widget = widgetHolder.get();
QAccessibleEvent ev1(widget, QAccessible::Focus);
QAccessible::updateAccessibility(&ev1);
QAccessibleEvent ev2(widget, QAccessible::Focus);
ev2.setChild(7);
QAccessible::updateAccessibility(&ev2);
- delete widget;
+ widgetHolder.reset();
- QObject *object = new QObject();
+ auto objectHolder = std::make_unique<QObject>();
+ auto object = objectHolder.get();
QAccessibleEvent ev3(object, QAccessible::Focus);
QAccessible::updateAccessibility(&ev3);
- delete object;
+ objectHolder.reset();
QTestAccessibility::clearEvents();
}
+void tst_QAccessibility::eventWithChildTest()
+{
+ // make sure that QAccessibleEvent created using either of the two QAccessibleEvent
+ // behaves the same when the same underlying QObject is used
+ QWidget widget;
+ QWidget childWidget(&widget);
+
+ // QAccessibleEvent constructor called with the QObject*
+ QAccessibleEvent event1(&widget, QAccessible::Focus);
+
+ // QAccessibleEvent constructor called with the QAccessibleInterface* for the same QObject*
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(&widget);
+ QAccessibleEvent event2(iface, QAccessible::Focus);
+
+ QVERIFY(event1.accessibleInterface() != nullptr);
+ QVERIFY(event2.accessibleInterface() != nullptr);
+ QCOMPARE(event1.accessibleInterface(), event2.accessibleInterface());
+
+ // set same child for both
+ event1.setChild(0);
+ event2.setChild(0);
+
+ QVERIFY(event1.accessibleInterface() != nullptr);
+ QVERIFY(event2.accessibleInterface() != nullptr);
+ QCOMPARE(event1.accessibleInterface(), event2.accessibleInterface());
+}
+
void tst_QAccessibility::customWidget()
{
{
- QtTestAccessibleWidget* widget = new QtTestAccessibleWidget(0, "Heinz");
- widget->show();
- QVERIFY(QTest::qWaitForWindowExposed(widget));
+ QtTestAccessibleWidget widget(nullptr, "Heinz");
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
// By default we create QAccessibleWidget
- QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(widget);
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(&widget);
QVERIFY(iface != 0);
QVERIFY(iface->isValid());
- QCOMPARE(iface->object(), (QObject*)widget);
+ QCOMPARE(iface->object(), (QObject*)&widget);
QCOMPARE(iface->object()->objectName(), QString("Heinz"));
- QCOMPARE(iface->rect().height(), widget->height());
+ QCOMPARE(iface->rect().height(), widget.height());
QCOMPARE(iface->text(QAccessible::Help), QString());
- QCOMPARE(iface->rect().height(), widget->height());
- delete widget;
+ QCOMPARE(iface->rect().width(), widget.width());
}
{
QAccessible::installFactory(QtTestAccessibleWidgetIface::ifaceFactory);
- QtTestAccessibleWidget* widget = new QtTestAccessibleWidget(0, "Heinz");
- widget->show();
- QVERIFY(QTest::qWaitForWindowExposed(widget));
- QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(widget);
+ QtTestAccessibleWidget widget(nullptr, "Heinz");
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(&widget);
QVERIFY(iface != 0);
QVERIFY(iface->isValid());
- QCOMPARE(iface->object(), (QObject*)widget);
+ QCOMPARE(iface->object(), (QObject*)&widget);
QCOMPARE(iface->object()->objectName(), QString("Heinz"));
- QCOMPARE(iface->rect().height(), widget->height());
+ QCOMPARE(iface->rect().height(), widget.height());
// The help text is only set if our factory works
QCOMPARE(iface->text(QAccessible::Help), QString("Help yourself"));
- delete widget;
}
{
// A subclass of any class should still get the right QAccessibleInterface
- QtTestAccessibleWidgetSubclass* subclassedWidget = new QtTestAccessibleWidgetSubclass(0, "Hans");
- QAccessibleInterface *subIface = QAccessible::queryAccessibleInterface(subclassedWidget);
+ QtTestAccessibleWidgetSubclass subclassedWidget(nullptr, "Hans");
+ QAccessibleInterface *subIface = QAccessible::queryAccessibleInterface(&subclassedWidget);
QVERIFY(subIface != 0);
QVERIFY(subIface->isValid());
- QCOMPARE(subIface->object(), (QObject*)subclassedWidget);
+ QCOMPARE(subIface->object(), (QObject*)&subclassedWidget);
QCOMPARE(subIface->text(QAccessible::Help), QString("Help yourself"));
- delete subclassedWidget;
}
QTestAccessibility::clearEvents();
}
void tst_QAccessibility::deletedWidget()
{
- QtTestAccessibleWidget *widget = new QtTestAccessibleWidget(0, "Ralf");
+ auto widgetHolder = std::make_unique<QtTestAccessibleWidget>(nullptr, "Ralf");
+ auto widget = widgetHolder.get();
QAccessible::installFactory(QtTestAccessibleWidgetIface::ifaceFactory);
QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(widget);
QVERIFY(iface != 0);
QVERIFY(iface->isValid());
QCOMPARE(iface->object(), (QObject*)widget);
- delete widget;
- widget = 0;
+ widgetHolder.reset();
// fixme: QVERIFY(!iface->isValid());
}
@@ -442,7 +477,8 @@ void tst_QAccessibility::statesStructTest()
void tst_QAccessibility::sliderTest()
{
{
- QSlider *slider = new QSlider(0);
+ auto sliderHolder = std::make_unique<QSlider>(nullptr);
+ auto slider = sliderHolder.get();
setFrameless(slider);
slider->setObjectName(QString("Slidy"));
slider->show();
@@ -468,8 +504,6 @@ void tst_QAccessibility::sliderTest()
QCOMPARE(77, slider->value());
slider->setSingleStep(2);
QCOMPARE(valueIface->minimumStepSize().toInt(), 2);
-
- delete slider;
}
QTestAccessibility::clearEvents();
}
@@ -477,7 +511,8 @@ void tst_QAccessibility::sliderTest()
void tst_QAccessibility::navigateHierarchy()
{
{
- QWidget *w = new QWidget(0);
+ auto widgetHolder = std::make_unique<QWidget>(nullptr);
+ auto w = widgetHolder.get();
w->setObjectName(QString("Hans"));
w->show();
QWidget *w1 = new QWidget(w);
@@ -531,8 +566,6 @@ void tst_QAccessibility::navigateHierarchy()
QVERIFY(parent != 0);
QVERIFY(parent->isValid());
QCOMPARE(parent->object(), (QObject*)w3);
-
- delete w;
}
QTestAccessibility::clearEvents();
}
@@ -588,7 +621,8 @@ static QWidget *createWidgets()
void tst_QAccessibility::accessibleName()
{
- QWidget *toplevel = createWidgets();
+ auto holder = std::unique_ptr<QWidget>(createWidgets());
+ auto toplevel = holder.get();
toplevel->show();
QVERIFY(QTest::qWaitForWindowExposed(toplevel));
@@ -607,8 +641,6 @@ void tst_QAccessibility::accessibleName()
child->setAccessibleDescription(desc);
QCOMPARE(acc->text(QAccessible::Description), desc);
}
-
- delete toplevel;
QTestAccessibility::clearEvents();
}
@@ -633,7 +665,7 @@ void tst_QAccessibility::textAttributes_data()
defaultComplexFont.setStyle(QFont::StyleItalic);
defaultComplexFont.setUnderline(true);
- static QStringList defaults = QString("font-style:normal;font-weight:normal;text-align:left;text-position:baseline;font-size:13pt").split(';');
+ static QStringList defaults = QString("font-style:normal;font-weight:normal;text-align:left;text-position:baseline;font-size:13pt;text-line-through-type:none").split(';');
static QStringList bold = defaults;
bold[1] = QString::fromLatin1("font-weight:bold");
@@ -669,7 +701,7 @@ void tst_QAccessibility::textAttributes_data()
defaultFontDifferentBoldItalic[1] = QString::fromLatin1("font-weight:bold");
static QStringList defaultFontDifferentMonospace = defaultFontDifferent;
- defaultFontDifferentMonospace[7] = (QLatin1String("font-family:\"monospace\""));
+ defaultFontDifferentMonospace[8] = (QLatin1String("font-family:\"monospace\""));
static QStringList defaultFontDifferentFont8pt = defaultFontDifferent;
defaultFontDifferentFont8pt[4] = (QLatin1String("font-size:8pt"));
@@ -756,7 +788,7 @@ void tst_QAccessibility::textAttributes()
QAccessibleInterface *interface = QAccessible::queryAccessibleInterface(&textEdit);
QAccessibleTextInterface *textInterface=interface->textInterface();
QVERIFY(textInterface);
- QCOMPARE(textInterface->characterCount(), textEdit.toPlainText().length());
+ QCOMPARE(textInterface->characterCount(), textEdit.toPlainText().size());
int startOffset = -1;
int endOffset = -1;
@@ -774,7 +806,8 @@ void tst_QAccessibility::textAttributes()
void tst_QAccessibility::hideShowTest()
{
- QWidget * const window = new QWidget();
+ auto windowHolder = std::make_unique<QWidget>();
+ QWidget * const window = windowHolder.get();
window->resize(200, 200);
QWidget * const child = new QWidget(window);
@@ -804,7 +837,7 @@ void tst_QAccessibility::hideShowTest()
QVERIFY(QTestAccessibility::containsEvent(&hideChild));
QTestAccessibility::clearEvents();
- delete window;
+ windowHolder.reset();
QTestAccessibility::clearEvents();
}
@@ -814,7 +847,8 @@ void tst_QAccessibility::actionTest()
{
QCOMPARE(QAccessibleActionInterface::pressAction(), QString(QStringLiteral("Press")));
- QWidget *widget = new QWidget;
+ auto widgetHolder = std::make_unique<QWidget>();
+ auto widget = widgetHolder.get();
widget->setFocusPolicy(Qt::NoFocus);
widget->show();
@@ -828,13 +862,12 @@ void tst_QAccessibility::actionTest()
QCOMPARE(actions->actionNames(), QStringList());
widget->setFocusPolicy(Qt::StrongFocus);
QCOMPARE(actions->actionNames(), QStringList(QAccessibleActionInterface::setFocusAction()));
-
- delete widget;
}
QTestAccessibility::clearEvents();
{
- QPushButton *button = new QPushButton;
+ auto buttonHolder = std::make_unique<QPushButton>();
+ auto button = buttonHolder.get();
setFrameless(button);
button->show();
QVERIFY(QTest::qWaitForWindowExposed(button));
@@ -856,8 +889,6 @@ void tst_QAccessibility::actionTest()
actions->doAction(QAccessibleActionInterface::pressAction());
QTest::qWait(500);
QCOMPARE(click_count, 1);
-
- delete button;
}
QTestAccessibility::clearEvents();
}
@@ -890,7 +921,7 @@ void tst_QAccessibility::applicationTest()
QWidget widget;
widget.show();
- qApp->setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
QVERIFY(QTest::qWaitForWindowActive(&widget));
QAccessibleInterface *widgetIface = QAccessible::queryAccessibleInterface(&widget);
@@ -913,10 +944,11 @@ void tst_QAccessibility::mainWindowTest()
QSKIP("Platform does not support window activation");
{
- QMainWindow *mw = new QMainWindow;
+ auto mwHolder = std::make_unique<QMainWindow>();
+ auto mw = mwHolder.get();
mw->resize(300, 200);
mw->show(); // triggers layout
- qApp->setActiveWindow(mw);
+ QApplicationPrivate::setActiveWindow(mw);
QLatin1String name = QLatin1String("I am the main window");
mw->setWindowTitle(name);
@@ -934,9 +966,6 @@ void tst_QAccessibility::mainWindowTest()
QCOMPARE(iface->text(QAccessible::Name), name);
QCOMPARE(iface->role(), QAccessible::Window);
QVERIFY(iface->state().active);
-
-
- delete mw;
}
QTestAccessibility::clearEvents();
@@ -1090,7 +1119,10 @@ void tst_QAccessibility::buttonTest()
interface = QAccessible::queryAccessibleInterface(&toggleButton);
actionInterface = interface->actionInterface();
QCOMPARE(interface->role(), QAccessible::CheckBox);
- QCOMPARE(actionInterface->actionNames(), QStringList() << QAccessibleActionInterface::toggleAction() << QAccessibleActionInterface::setFocusAction());
+ QCOMPARE(actionInterface->actionNames(),
+ QStringList() << QAccessibleActionInterface::toggleAction()
+ << QAccessibleActionInterface::pressAction()
+ << QAccessibleActionInterface::setFocusAction());
QCOMPARE(actionInterface->localizedActionDescription(QAccessibleActionInterface::toggleAction()), QString("Toggles the state"));
QVERIFY(!toggleButton.isChecked());
QVERIFY(!interface->state().checked);
@@ -1102,13 +1134,13 @@ void tst_QAccessibility::buttonTest()
{
// test menu push button
- QAction *foo = new QAction("Foo", 0);
+ QAction *foo = new QAction("Foo", nullptr);
foo->setShortcut(QKeySequence("Ctrl+F"));
- QMenu *menu = new QMenu();
+ auto menu = std::make_unique<QMenu>();
menu->addAction(foo);
QPushButton menuButton;
setFrameless(&menuButton);
- menuButton.setMenu(menu);
+ menuButton.setMenu(menu.get());
menuButton.show();
QAccessibleInterface *interface = QAccessible::queryAccessibleInterface(&menuButton);
QCOMPARE(interface->role(), QAccessible::ButtonMenu);
@@ -1117,7 +1149,6 @@ void tst_QAccessibility::buttonTest()
// showing the menu enters a new event loop...
// interface->actionInterface()->doAction(QAccessibleActionInterface::showMenuAction());
// QTest::qWait(500);
- delete menu;
}
@@ -1127,12 +1158,18 @@ void tst_QAccessibility::buttonTest()
interface = QAccessible::queryAccessibleInterface(&checkBox);
actionInterface = interface->actionInterface();
QCOMPARE(interface->role(), QAccessible::CheckBox);
- QCOMPARE(actionInterface->actionNames(), QStringList() << QAccessibleActionInterface::toggleAction() << QAccessibleActionInterface::setFocusAction());
+ QCOMPARE(actionInterface->actionNames(),
+ QStringList() << QAccessibleActionInterface::toggleAction()
+ << QAccessibleActionInterface::pressAction()
+ << QAccessibleActionInterface::setFocusAction());
QVERIFY(!interface->state().checked);
actionInterface->doAction(QAccessibleActionInterface::toggleAction());
QTest::qWait(500);
- QCOMPARE(actionInterface->actionNames(), QStringList() << QAccessibleActionInterface::toggleAction() << QAccessibleActionInterface::setFocusAction());
+ QCOMPARE(actionInterface->actionNames(),
+ QStringList() << QAccessibleActionInterface::toggleAction()
+ << QAccessibleActionInterface::pressAction()
+ << QAccessibleActionInterface::setFocusAction());
QVERIFY(interface->state().checked);
QVERIFY(checkBox.isChecked());
QAccessible::State st;
@@ -1215,8 +1252,10 @@ void tst_QAccessibility::buttonTest()
void tst_QAccessibility::scrollBarTest()
{
- QScrollBar *scrollBar = new QScrollBar(Qt::Horizontal);
- QAccessibleInterface * const scrollBarInterface = QAccessible::queryAccessibleInterface(scrollBar);
+ auto scrollBarHolder = std::make_unique<QScrollBar>(Qt::Horizontal);
+ auto scrollBar = scrollBarHolder.get();
+ QAccessibleInterface * const scrollBarInterface =
+ QAccessible::queryAccessibleInterface(scrollBar);
QVERIFY(scrollBarInterface);
QVERIFY(scrollBarInterface->state().invisible);
scrollBar->resize(200, 50);
@@ -1253,14 +1292,13 @@ void tst_QAccessibility::scrollBarTest()
const QRect scrollBarRect = scrollBarInterface->rect();
QVERIFY(scrollBarRect.isValid());
- delete scrollBar;
-
QTestAccessibility::clearEvents();
}
void tst_QAccessibility::tabTest()
{
- QTabBar *tabBar = new QTabBar();
+ auto tabBarHolder = std::make_unique<QTabBar>();
+ auto tabBar = tabBarHolder.get();
setFrameless(tabBar);
tabBar->show();
@@ -1324,13 +1362,13 @@ void tst_QAccessibility::tabTest()
tabBar->setCurrentIndex(1);
QCOMPARE(interface->text(QAccessible::Name), QLatin1String("AccBar"));
- delete tabBar;
QTestAccessibility::clearEvents();
}
void tst_QAccessibility::tabWidgetTest()
{
- QTabWidget *tabWidget = new QTabWidget();
+ auto tabWidgetHolder = std::make_unique<QTabWidget>();
+ auto tabWidget = tabWidgetHolder.get();
tabWidget->show();
// the interface for the tab is just a container for tabbar and stacked widget
@@ -1389,9 +1427,7 @@ void tst_QAccessibility::tabWidgetTest()
QAccessibleInterface* stackChild1Interface = stackWidgetInterface->child(0);
QVERIFY(stackChild1Interface);
-#ifndef Q_CC_INTEL
QCOMPARE(stackChild1Interface->childCount(), 0);
-#endif
QCOMPARE(stackChild1Interface->role(), QAccessible::StaticText);
QCOMPARE(stackChild1Interface->text(QAccessible::Name), QLatin1String("Page 1"));
QCOMPARE(label1, stackChild1Interface->object());
@@ -1399,9 +1435,7 @@ void tst_QAccessibility::tabWidgetTest()
// Navigation in stack widgets should be consistent
QAccessibleInterface* parent = stackChild1Interface->parent();
QVERIFY(parent);
-#ifndef Q_CC_INTEL
QCOMPARE(parent->childCount(), 2);
-#endif
QCOMPARE(parent->role(), QAccessible::LayeredPane);
QAccessibleInterface* stackChild2Interface = stackWidgetInterface->child(1);
@@ -1413,12 +1447,9 @@ void tst_QAccessibility::tabWidgetTest()
parent = stackChild2Interface->parent();
QVERIFY(parent);
-#ifndef Q_CC_INTEL
QCOMPARE(parent->childCount(), 2);
-#endif
QCOMPARE(parent->role(), QAccessible::LayeredPane);
- delete tabWidget;
QTestAccessibility::clearEvents();
}
@@ -1618,17 +1649,17 @@ void tst_QAccessibility::menuTest()
mw.hide();
// Do not crash if the menu don't have a parent
- QMenu *menu = new QMenu;
+ auto menu = std::make_unique<QMenu>();
menu->addAction(QLatin1String("one"));
menu->addAction(QLatin1String("two"));
menu->addAction(QLatin1String("three"));
- iface = QAccessible::queryAccessibleInterface(menu);
+ iface = QAccessible::queryAccessibleInterface(menu.get());
iface2 = iface->parent();
QVERIFY(iface2);
QCOMPARE(iface2->role(), QAccessible::Application);
// caused a *crash*
iface2->state();
- delete menu;
+ menu.reset();
}
QTestAccessibility::clearEvents();
@@ -1638,7 +1669,8 @@ void tst_QAccessibility::menuTest()
void tst_QAccessibility::spinBoxTest()
{
- QSpinBox * const spinBox = new QSpinBox();
+ auto spinBoxHolder = std::make_unique<QSpinBox>();
+ const auto spinBox = spinBoxHolder.get();
setFrameless(spinBox);
spinBox->setValue(3);
spinBox->show();
@@ -1675,13 +1707,13 @@ void tst_QAccessibility::spinBoxTest()
QAccessibleTextInterface *textIface = interface->textInterface();
QVERIFY(textIface);
- delete spinBox;
QTestAccessibility::clearEvents();
}
void tst_QAccessibility::doubleSpinBoxTest()
{
- QDoubleSpinBox *doubleSpinBox = new QDoubleSpinBox;
+ auto holder = std::make_unique<QDoubleSpinBox>();
+ auto doubleSpinBox = holder.get();
setFrameless(doubleSpinBox);
doubleSpinBox->show();
@@ -1702,7 +1734,6 @@ void tst_QAccessibility::doubleSpinBoxTest()
QVERIFY(childRect.isValid());
}
- delete doubleSpinBox;
QTestAccessibility::clearEvents();
}
@@ -1928,7 +1959,7 @@ void tst_QAccessibility::mdiAreaTest()
mdiArea.addSubWindow(new QWidget, Qt::Dialog)->show();
QList<QMdiSubWindow *> subWindows = mdiArea.subWindowList();
- QCOMPARE(subWindows.count(), subWindowCount);
+ QCOMPARE(subWindows.size(), subWindowCount);
QAccessibleInterface *interface = QAccessible::queryAccessibleInterface(&mdiArea);
QVERIFY(interface);
@@ -1943,7 +1974,7 @@ void tst_QAccessibility::mdiSubWindowTest()
{
QMdiArea mdiArea;
mdiArea.show();
- qApp->setActiveWindow(&mdiArea);
+ QApplicationPrivate::setActiveWindow(&mdiArea);
QVERIFY(QTest::qWaitForWindowActive(&mdiArea));
@@ -1966,7 +1997,7 @@ void tst_QAccessibility::mdiSubWindowTest()
}
QList<QMdiSubWindow *> subWindows = mdiArea.subWindowList();
- QCOMPARE(subWindows.count(), subWindowCount);
+ QCOMPARE(subWindows.size(), subWindowCount);
QMdiSubWindow *testWindow = subWindows.at(3);
QVERIFY(testWindow);
@@ -1985,6 +2016,10 @@ void tst_QAccessibility::mdiSubWindowTest()
mdiArea.setActiveSubWindow(testWindow);
+#ifdef Q_OS_ANDROID // on Android QMdiSubWindow is maximized by default
+ testWindow->showNormal();
+#endif
+
// state
QAccessible::State state;
state.focusable = true;
@@ -2007,7 +2042,7 @@ void tst_QAccessibility::mdiSubWindowTest()
testWindow->setEnabled(false);
QVERIFY(interface->state().disabled);
testWindow->setEnabled(true);
- qApp->setActiveWindow(&mdiArea);
+ QApplicationPrivate::setActiveWindow(&mdiArea);
mdiArea.setActiveSubWindow(testWindow);
testWindow->setFocus();
QVERIFY(testWindow->isAncestorOf(qApp->focusWidget()));
@@ -2049,10 +2084,11 @@ void tst_QAccessibility::mdiSubWindowTest()
void tst_QAccessibility::lineEditTest()
{
- QWidget *toplevel = new QWidget;
+ auto topLevelHolder = std::make_unique<QWidget>();
+ auto toplevel = topLevelHolder.get();
{
- QLineEdit *le = new QLineEdit;
- QAccessibleInterface *iface(QAccessible::queryAccessibleInterface(le));
+ auto le = std::make_unique<QLineEdit>();
+ QAccessibleInterface *iface(QAccessible::queryAccessibleInterface(le.get()));
QVERIFY(iface);
le->show();
@@ -2085,10 +2121,10 @@ void tst_QAccessibility::lineEditTest()
QCOMPARE(iface->text(QAccessible::Value), QString());
le->setEchoMode(QLineEdit::Password);
QVERIFY(iface->state().passwordEdit);
- QCOMPARE(iface->text(QAccessible::Value), QString(secret.length(), QLatin1Char('*')));
+ QCOMPARE(iface->text(QAccessible::Value), QString(secret.size(), QLatin1Char('*')));
le->setEchoMode(QLineEdit::PasswordEchoOnEdit);
QVERIFY(iface->state().passwordEdit);
- QCOMPARE(iface->text(QAccessible::Value), QString(secret.length(), QLatin1Char('*')));
+ QCOMPARE(iface->text(QAccessible::Value), QString(secret.size(), QLatin1Char('*')));
le->setEchoMode(QLineEdit::Normal);
QVERIFY(!(iface->state().passwordEdit));
QCOMPARE(iface->text(QAccessible::Value), secret);
@@ -2121,7 +2157,7 @@ void tst_QAccessibility::lineEditTest()
iface->setText(QAccessible::Value, QLatin1String("This text is not a number"));
QCOMPARE(le->text(), QLatin1String("500"));
- delete le;
+ le.reset();
delete le2;
}
@@ -2180,7 +2216,7 @@ void tst_QAccessibility::lineEditTest()
QCOMPARE(textIface->textAtOffset(5, QAccessible::ParagraphBoundary,&start,&end), cite);
QCOMPARE(start, 0);
- QCOMPARE(end, cite.length());
+ QCOMPARE(end, cite.size());
QCOMPARE(textIface->textAtOffset(5, QAccessible::LineBoundary,&start,&end), cite);
QCOMPARE(textIface->textAtOffset(5, QAccessible::NoBoundary,&start,&end), cite);
@@ -2224,8 +2260,8 @@ void tst_QAccessibility::lineEditTest()
QVERIFY_EVENT(&sel);
lineEdit->selectAll();
- sel.setSelection(0, lineEdit->text().length());
- sel.setCursorPosition(lineEdit->text().length());
+ sel.setSelection(0, lineEdit->text().size());
+ sel.setCursorPosition(lineEdit->text().size());
QVERIFY_EVENT(&sel);
lineEdit->setSelection(10, -4);
@@ -2298,7 +2334,6 @@ void tst_QAccessibility::lineEditTest()
QAccessibleTextInsertEvent insertO(lineEdit, 4, "O");
QVERIFY(QTestAccessibility::containsEvent(&insertO));
}
- delete toplevel;
QTestAccessibility::clearEvents();
}
@@ -2449,11 +2484,11 @@ void tst_QAccessibility::textInterfaceTest()
QFETCH(QString, expectedText);
QAccessible::installFactory(CustomTextWidgetIface::ifaceFactory);
- CustomTextWidget *w = new CustomTextWidget();
+ auto w = std::make_unique<CustomTextWidget>();
w->text = text;
w->cursorPosition = cursorPosition;
- QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(w);
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(w.get());
QVERIFY(iface);
QCOMPARE(iface->text(QAccessible::Value), text);
QAccessibleTextInterface *textIface = iface->textInterface();
@@ -2478,7 +2513,6 @@ void tst_QAccessibility::textInterfaceTest()
QCOMPARE(start, expectedStart);
QCOMPARE(end, expectedEnd);
- delete w;
QAccessible::removeFactory(CustomTextWidgetIface::ifaceFactory);
QTestAccessibility::clearEvents();
}
@@ -2486,7 +2520,8 @@ void tst_QAccessibility::textInterfaceTest()
void tst_QAccessibility::groupBoxTest()
{
{
- QGroupBox *groupBox = new QGroupBox();
+ auto gbHolder = std::make_unique<QGroupBox>();
+ auto groupBox = gbHolder.get();
QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(groupBox);
groupBox->setTitle(QLatin1String("Test QGroupBox"));
@@ -2511,12 +2546,11 @@ void tst_QAccessibility::groupBoxTest()
QPair<QAccessibleInterface*, QAccessible::Relation> relation = relations.first();
QCOMPARE(relation.first->object(), groupBox);
QCOMPARE(relation.second, QAccessible::Label);
-
- delete groupBox;
}
{
- QGroupBox *groupBox = new QGroupBox();
+ auto gbHolder = std::make_unique<QGroupBox>();
+ auto groupBox = gbHolder.get();
QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(groupBox);
QVERIFY(!iface->state().checkable);
groupBox->setCheckable(true);
@@ -2540,8 +2574,6 @@ void tst_QAccessibility::groupBoxTest()
QVERIFY(state.checked);
QAccessibleStateChangeEvent ev2(groupBox, st);
QVERIFY_EVENT(&ev2);
-
- delete groupBox;
}
}
@@ -2585,7 +2617,7 @@ void tst_QAccessibility::dialogButtonBoxTest()
std::sort(buttons.begin(), buttons.end(), accessibleInterfaceLeftOf);
- for (int i = 0; i < buttons.count(); ++i)
+ for (int i = 0; i < buttons.size(); ++i)
actualOrder << buttons.at(i)->text(QAccessible::Name);
QStringList expectedOrder;
@@ -2637,7 +2669,7 @@ void tst_QAccessibility::dialogButtonBoxTest()
std::sort(buttons.begin(), buttons.end(), accessibleInterfaceAbove);
- for (int i = 0; i < buttons.count(); ++i)
+ for (int i = 0; i < buttons.size(); ++i)
actualOrder << buttons.at(i)->text(QAccessible::Name);
QStringList expectedOrder;
@@ -2813,7 +2845,8 @@ void tst_QAccessibility::scrollAreaTest()
void tst_QAccessibility::listTest()
{
{
- QListWidget *listView = new QListWidget;
+ auto lvHolder = std::make_unique<QListWidget>();
+ auto listView = lvHolder.get();
listView->addItem("Oslo");
listView->addItem("Berlin");
listView->addItem("Brisbane");
@@ -2846,6 +2879,12 @@ void tst_QAccessibility::listTest()
QCOMPARE(iface->indexOfChild(child3), 2);
QCOMPARE(child3->text(QAccessible::Name), QString("Brisbane"));
}
+
+ // Check that application is accessible parent, since it's a top-level widget
+ QAccessibleInterface *parentIface = iface->parent();
+ QVERIFY(parentIface);
+ QVERIFY(parentIface->role() == QAccessible::Application);
+
QTestAccessibility::clearEvents();
// Check for events
@@ -2929,19 +2968,17 @@ void tst_QAccessibility::listTest()
// list: Oslo, Helsinki
// verify that it doesn't return an invalid item from the cache
QVERIFY(table2->cellAt(2,0) == 0);
-
- delete listView;
}
QTestAccessibility::clearEvents();
}
void tst_QAccessibility::treeTest()
{
- QTreeWidget *treeView = new QTreeWidget;
+ auto treeView = std::make_unique<QTreeWidget>();
// Empty model (do not crash, etc)
treeView->setColumnCount(0);
- QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(treeView);
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(treeView.get());
QCOMPARE(iface->child(0), static_cast<QAccessibleInterface*>(0));
treeView->setColumnCount(2);
@@ -3074,7 +3111,6 @@ void tst_QAccessibility::treeTest()
QCOMPARE(table2->columnDescription(0), QString("Artist"));
QCOMPARE(table2->columnDescription(1), QString("Work"));
- delete treeView;
QTestAccessibility::clearEvents();
}
@@ -3085,7 +3121,8 @@ void tst_QAccessibility::treeTest()
// v3 (12) | 0.2 (13) | 1.2 (14) | 2.2 (15)
void tst_QAccessibility::tableTest()
{
- QTableWidget *tableView = new QTableWidget(3, 3);
+ auto tvHolder = std::make_unique<QTableWidget>(3, 3);
+ auto tableView = tvHolder.get();
tableView->setColumnCount(3);
QStringList hHeader;
hHeader << "h1" << "h2" << "h3";
@@ -3365,11 +3402,75 @@ void tst_QAccessibility::tableTest()
tableView->horizontalHeader()->setVisible(false);
}
- delete tableView;
+ tvHolder.reset();
QVERIFY(!QAccessible::accessibleInterface(id00));
QTestAccessibility::clearEvents();
}
+void tst_QAccessibility::rootIndexView()
+{
+ QStandardItemModel model;
+ for (int i = 0; i < 2; ++i) {
+ QStandardItem *item = new QStandardItem(u"root %1"_s.arg(i));
+ for (int j = 0; j < 5 * (i + 1); ++j) {
+ switch (i) {
+ case 0:
+ item->appendRow(new QStandardItem(u"child0/%1"_s.arg(j)));
+ break;
+ case 1:
+ item->appendRow({new QStandardItem(u"column0 1/%1"_s.arg(j)),
+ new QStandardItem(u"column1 1/%1"_s.arg(j))
+ });
+ break;
+ }
+ }
+ model.appendRow(item);
+ }
+
+ QListView view;
+ view.setModel(&model);
+ QTestAccessibility::clearEvents();
+
+ QAccessibleInterface *accView = QAccessible::queryAccessibleInterface(&view);
+ QVERIFY(accView);
+ QAccessibleTableInterface *accTable = accView->tableInterface();
+ QVERIFY(accTable);
+ QCOMPARE(accTable->rowCount(), 2);
+ QCOMPARE(accTable->columnCount(), 1);
+
+ view.setRootIndex(model.index(0, 0));
+ QAccessibleTableModelChangeEvent resetEvent(&view, QAccessibleTableModelChangeEvent::ModelReset);
+ QVERIFY(QTestAccessibility::containsEvent(&resetEvent));
+
+ QCOMPARE(accTable->rowCount(), 5);
+ QCOMPARE(accTable->columnCount(), 1);
+
+ view.setRootIndex(model.index(1, 0));
+ QCOMPARE(accTable->rowCount(), 10);
+ QCOMPARE(accTable->columnCount(), 2);
+
+ QTestAccessibility::clearEvents();
+}
+
+void tst_QAccessibility::uniqueIdTest()
+{
+ // Test that an ID isn't reassigned to another interface right away when an accessible interface
+ // that has just been created is removed from the cache and deleted before the next
+ // accessible interface is registered.
+ // For example for AT-SPI, that would result in the same object path being used, and thus
+ // data from the old and new interface can get confused due to caching.
+ QWidget widget1;
+ QAccessibleInterface *iface1 = QAccessible::queryAccessibleInterface(&widget1);
+ QAccessible::Id id1 = QAccessible::uniqueId(iface1);
+ QAccessible::deleteAccessibleInterface(id1);
+
+ QWidget widget2;
+ QAccessibleInterface *iface2 = QAccessible::queryAccessibleInterface(&widget2);
+ QAccessible::Id id2 = QAccessible::uniqueId(iface2);
+
+ QVERIFY(id1 != id2);
+}
+
void tst_QAccessibility::calendarWidgetTest()
{
#if QT_CONFIG(calendarwidget)
@@ -3397,7 +3498,7 @@ void tst_QAccessibility::calendarWidgetTest()
QCOMPARE(interface->rect(), globalGeometry);
QWidget *navigationBar = 0;
- foreach (QObject *child, calendarWidget.children()) {
+ for (QObject *child : calendarWidget.children()) {
if (child->objectName() == QLatin1String("qt_calendar_navigationbar")) {
navigationBar = static_cast<QWidget *>(child);
break;
@@ -3407,7 +3508,7 @@ void tst_QAccessibility::calendarWidgetTest()
QVERIFY(verifyChild(navigationBar, interface, 0, globalGeometry));
QAbstractItemView *calendarView = 0;
- foreach (QObject *child, calendarWidget.children()) {
+ for (QObject *child : calendarWidget.children()) {
if (child->objectName() == QLatin1String("qt_calendar_calendarview")) {
calendarView = static_cast<QAbstractItemView *>(child);
break;
@@ -3455,7 +3556,8 @@ void tst_QAccessibility::dockWidgetTest()
{
#if QT_CONFIG(dockwidget)
// Set up a proper main window with two dock widgets
- QMainWindow *mw = new QMainWindow();
+ auto mwHolder = std::make_unique<QMainWindow>();
+ auto mw = mwHolder.get();
QFrame *central = new QFrame(mw);
mw->setCentralWidget(central);
QMenuBar *mb = new QMenuBar(mw);
@@ -3584,7 +3686,6 @@ void tst_QAccessibility::dockWidgetTest()
QAccessibleInterface *dock3Widget = accDock3->child(0);
QCOMPARE(dock3Widget->text(QAccessible::Name), pb3->text());
- delete mw;
QTestAccessibility::clearEvents();
#endif // QT_CONFIG(dockwidget)
}
@@ -3609,6 +3710,8 @@ void tst_QAccessibility::comboBoxTest()
QCOMPARE(iface->text(QAccessible::Name), QLatin1String("one"));
#endif
QCOMPARE(iface->text(QAccessible::Value), QLatin1String("one"));
+ QCOMPARE(combo.view()->selectionModel()->currentIndex().row(), 0);
+
combo.setCurrentIndex(2);
#ifdef Q_OS_UNIX
QCOMPARE(iface->text(QAccessible::Name), QLatin1String("three"));
@@ -3619,7 +3722,13 @@ void tst_QAccessibility::comboBoxTest()
QCOMPARE(listIface->role(), QAccessible::List);
QCOMPARE(listIface->childCount(), 3);
+ QAccessibleSelectionInterface *selectionIface = listIface->selectionInterface();
+ QVERIFY(selectionIface);
+ QCOMPARE(selectionIface->selectedItemCount(), 1);
+ QCOMPARE(listIface->indexOfChild(selectionIface->selectedItem(0)), 2);
+
QVERIFY(!combo.view()->isVisible());
+ QCOMPARE(combo.view()->selectionModel()->currentIndex().row(), 2);
QVERIFY(iface->actionInterface());
QCOMPARE(iface->actionInterface()->actionNames(), QStringList() << QAccessibleActionInterface::showMenuAction() << QAccessibleActionInterface::pressAction());
iface->actionInterface()->doAction(QAccessibleActionInterface::showMenuAction());
@@ -3649,11 +3758,75 @@ void tst_QAccessibility::comboBoxTest()
QTestAccessibility::clearEvents();
}
+void tst_QAccessibility::relationTest()
+{
+ auto windowHolder = std::make_unique<QWidget>();
+ auto window = windowHolder.get();
+ QString text = "Hello World";
+ QLabel *label = new QLabel(text, window);
+ setFrameless(label);
+ QSpinBox *spinBox = new QSpinBox(window);
+ label->setBuddy(spinBox);
+ QProgressBar *pb = new QProgressBar(window);
+ pb->setRange(0, 99);
+ connect(spinBox, SIGNAL(valueChanged(int)), pb, SLOT(setValue(int)));
+
+ window->resize(320, 200);
+ window->show();
+
+ QVERIFY(QTest::qWaitForWindowExposed(window));
+#if defined(Q_OS_UNIX)
+ QCoreApplication::processEvents();
+#endif
+ QTest::qWait(100);
+
+ QAccessibleInterface *acc_label = QAccessible::queryAccessibleInterface(label);
+ QVERIFY(acc_label);
+ QAccessibleInterface *acc_spinBox = QAccessible::queryAccessibleInterface(spinBox);
+ QVERIFY(acc_spinBox);
+ QAccessibleInterface *acc_pb = QAccessible::queryAccessibleInterface(pb);
+ QVERIFY(acc_pb);
+
+ typedef QPair<QAccessibleInterface*, QAccessible::Relation> RelationPair;
+ {
+ const QList<RelationPair> rels = acc_label->relations(QAccessible::Labelled);
+ QCOMPARE(rels.size(), 1);
+ const RelationPair relPair = rels.first();
+
+ // spinBox is Labelled by acc_label
+ QCOMPARE(relPair.first->object(), spinBox);
+ QCOMPARE(relPair.second, QAccessible::Labelled);
+ }
+
+ {
+ // Test multiple relations (spinBox have two)
+ const QList<RelationPair> rels = acc_spinBox->relations();
+ QCOMPARE(rels.size(), 2);
+ int visitCount = 0;
+ for (const auto &relPair : rels) {
+ if (relPair.second & QAccessible::Label) {
+ // label is the Label of spinBox
+ QCOMPARE(relPair.first->object(), label);
+ ++visitCount;
+ } else if (relPair.second & QAccessible::Controlled) {
+ // progressbar is Controlled by the spinBox
+ QCOMPARE(relPair.first->object(), pb);
+ ++visitCount;
+ }
+ }
+ QCOMPARE(visitCount, rels.size());
+ }
+
+ windowHolder.reset();
+ QTestAccessibility::clearEvents();
+}
+
#if QT_CONFIG(shortcut)
void tst_QAccessibility::labelTest()
{
- QWidget *window = new QWidget;
+ auto windowHolder = std::make_unique<QWidget>();
+ auto window = windowHolder.get();
QString text = "Hello World";
QLabel *label = new QLabel(text, window);
setFrameless(label);
@@ -3670,6 +3843,8 @@ void tst_QAccessibility::labelTest()
QAccessibleInterface *acc_label = QAccessible::queryAccessibleInterface(label);
QVERIFY(acc_label);
+ QAccessibleInterface *acc_lineEdit = QAccessible::queryAccessibleInterface(buddy);
+ QVERIFY(acc_lineEdit);
QCOMPARE(acc_label->text(QAccessible::Name), text);
QCOMPARE(acc_label->state().editable, false);
@@ -3679,15 +3854,25 @@ void tst_QAccessibility::labelTest()
QCOMPARE(acc_label->state().focusable, false);
QCOMPARE(acc_label->state().readOnly, true);
- QList<QPair<QAccessibleInterface *, QAccessible::Relation>> rels = acc_label->relations();
- QCOMPARE(rels.count(), 1);
- QAccessibleInterface *iface = rels.first().first;
- QAccessible::Relation rel = rels.first().second;
- QCOMPARE(rel, QAccessible::Labelled);
- QCOMPARE(iface->role(), QAccessible::EditableText);
+ typedef QPair<QAccessibleInterface*, QAccessible::Relation> RelationPair;
+ {
+ const QList<RelationPair> rels = acc_label->relations(QAccessible::Labelled);
+ QCOMPARE(rels.size(), 1);
+ const RelationPair relPair = rels.first();
+ QCOMPARE(relPair.first->object(), buddy);
+ QCOMPARE(relPair.second, QAccessible::Labelled);
+ }
- delete window;
+ {
+ const QList<RelationPair> rels = acc_lineEdit->relations(QAccessible::Label);
+ QCOMPARE(rels.size(), 1);
+ const RelationPair relPair = rels.first();
+ QCOMPARE(relPair.first->object(), label);
+ QCOMPARE(relPair.second, QAccessible::Label);
+ }
+
+ windowHolder.reset();
QTestAccessibility::clearEvents();
QPixmap testPixmap(50, 50);
@@ -3713,7 +3898,8 @@ void tst_QAccessibility::labelTest()
void tst_QAccessibility::accelerators()
{
- QWidget *window = new QWidget;
+ auto windowHolder = std::make_unique<QWidget>();
+ auto window = windowHolder.get();
QHBoxLayout *lay = new QHBoxLayout(window);
QLabel *label = new QLabel(tr("&Line edit"), window);
QLineEdit *le = new QLineEdit(window);
@@ -3747,7 +3933,7 @@ void tst_QAccessibility::accelerators()
QCoreApplication::processEvents();
#endif
QTest::qWait(100);
- delete window;
+ windowHolder.reset();
QTestAccessibility::clearEvents();
}
@@ -3780,6 +3966,7 @@ void tst_QAccessibility::bridgeTest()
// For now this is a simple test to see if the bridge is working at all.
// Ideally it should be extended to test all aspects of the bridge.
#if defined(Q_OS_WIN)
+ auto guard = qScopeGuard([]() { QTestAccessibility::clearEvents(); });
QWidget window;
QVBoxLayout *lay = new QVBoxLayout(&window);
@@ -3828,14 +4015,14 @@ void tst_QAccessibility::bridgeTest()
POINT pt{nativePos.x(), nativePos.y()};
// Initialize COM stuff.
- HRESULT hr = CoInitialize(nullptr);
- QVERIFY(SUCCEEDED(hr));
+ QComHelper comHelper;
+ QVERIFY(comHelper.isValid());
// Get UI Automation interface.
const GUID CLSID_CUIAutomation_test{0xff48dba4, 0x60ef, 0x4201,
{0xaa,0x87, 0x54,0x10,0x3e,0xef,0x59,0x4e}};
IUIAutomation *automation = nullptr;
- hr = CoCreateInstance(CLSID_CUIAutomation_test, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&automation));
+ HRESULT hr = CoCreateInstance(CLSID_CUIAutomation_test, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&automation));
QVERIFY(SUCCEEDED(hr));
// Get button element from UI Automation using point.
@@ -3853,7 +4040,12 @@ void tst_QAccessibility::bridgeTest()
RECT rect;
hr = buttonElement->get_CurrentBoundingRectangle(&rect);
QVERIFY(SUCCEEDED(hr));
- QCOMPARE(buttonRect, QRect(rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top));
+ const QRect boundingRect(rect.left, rect.top, rect.right - rect.left + 1, rect.bottom - rect.top + 1);
+ const QRectF nativeRect = QHighDpi::toNativePixels(QRectF(buttonRect), window.windowHandle());
+ const QRect truncRect(int(nativeRect.left()), int(nativeRect.top()),
+ int(nativeRect.right()) - int(nativeRect.left()) + 1,
+ int(nativeRect.bottom()) - int(nativeRect.top()) + 1);
+ QCOMPARE(truncRect, boundingRect);
buttonElement->Release();
@@ -3912,10 +4104,105 @@ void tst_QAccessibility::bridgeTest()
QCOMPARE(controlTypeId, UIA_ButtonControlTypeId);
// Edit
- hr = nodeList.at(2)->get_CurrentControlType(&controlTypeId);
+ IUIAutomationElement *uiaElement = nodeList.at(2);
+ hr = uiaElement->get_CurrentControlType(&controlTypeId);
QVERIFY(SUCCEEDED(hr));
QCOMPARE(controlTypeId, UIA_EditControlTypeId);
+ // "hello world\nhow are you today?\n"
+ IUIAutomationTextPattern *textPattern = nullptr;
+ hr = uiaElement->GetCurrentPattern(UIA_TextPattern2Id, reinterpret_cast<IUnknown**>(&textPattern));
+ QVERIFY(SUCCEEDED(hr));
+ QVERIFY(textPattern);
+
+ IUIAutomationTextRange *docRange = nullptr;
+ hr = textPattern->get_DocumentRange(&docRange);
+ QVERIFY(SUCCEEDED(hr));
+ QVERIFY(docRange);
+
+ IUIAutomationTextRange *textRange = nullptr;
+ hr = docRange->Clone(&textRange);
+ QVERIFY(SUCCEEDED(hr));
+ QVERIFY(textRange);
+ int moved;
+
+ auto rangeText = [](IUIAutomationTextRange *textRange) {
+ BSTR str;
+ QString res = "IUIAutomationTextRange::GetText() failed";
+ HRESULT hr = textRange->GetText(-1, &str);
+ if (SUCCEEDED(hr)) {
+ res = QString::fromWCharArray(str);
+ ::SysFreeString(str);
+ }
+ return res;
+ };
+
+ // Move start endpoint past "hello " to "world"
+ hr = textRange->Move(TextUnit_Character, 6, &moved);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(moved, 6);
+ // If the range was not empty, it should be collapsed to contain a single text unit
+ QCOMPARE(rangeText(textRange), QString("w"));
+
+ // Move end endpoint to end of "world"
+ hr = textRange->MoveEndpointByUnit(TextPatternRangeEndpoint_End, TextUnit_Character, 4, &moved);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(moved, 4);
+ QCOMPARE(rangeText(textRange), QString("world"));
+
+ // MSDN: "Zero has no effect". This behavior was also verified with native controls.
+ hr = textRange->Move(TextUnit_Character, 0, &moved);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(moved, 0);
+ QCOMPARE(rangeText(textRange), QString("world"));
+
+ hr = textRange->Move(TextUnit_Character, 1, &moved);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(rangeText(textRange), QString("o"));
+
+ // move as far towards the end as possible
+ hr = textRange->Move(TextUnit_Character, 999, &moved);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(rangeText(textRange), QString(""));
+
+ hr = textRange->MoveEndpointByUnit(TextPatternRangeEndpoint_Start, TextUnit_Character, -1, &moved);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(rangeText(textRange), QString("\n"));
+
+ // move one forward (last possible position again)
+ hr = textRange->Move(TextUnit_Character, 1, &moved);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(rangeText(textRange), QString(""));
+
+ hr = textRange->Move(TextUnit_Character, -7, &moved);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(moved, -7);
+ QCOMPARE(rangeText(textRange), QString(""));
+ // simulate moving cursor (empty range) towards (and past) the end
+ QString today(" today?\n");
+ for (int i = 1; i < 9; ++i) { // 9 is deliberately too much
+ // peek one character back
+ hr = textRange->MoveEndpointByUnit(TextPatternRangeEndpoint_Start, TextUnit_Character, -1, &moved);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(rangeText(textRange), today.mid(i - 1, 1));
+
+ hr = textRange->Move(TextUnit_Character, 1, &moved);
+ QVERIFY(SUCCEEDED(hr));
+ QCOMPARE(rangeText(textRange), today.mid(i, moved)); // when we cannot move further, moved will be 0
+
+ // Make the range empty again
+ hr = textRange->MoveEndpointByUnit(TextPatternRangeEndpoint_End, TextUnit_Character, -moved, &moved);
+ QVERIFY(SUCCEEDED(hr));
+
+ // advance the empty range
+ hr = textRange->Move(TextUnit_Character, 1, &moved);
+ QVERIFY(SUCCEEDED(hr));
+ }
+ docRange->Release();
+ textRange->Release();
+ textPattern->Release();
+
+
// Table
hr = nodeList.at(3)->get_CurrentControlType(&controlTypeId);
QVERIFY(SUCCEEDED(hr));
@@ -3933,9 +4220,6 @@ void tst_QAccessibility::bridgeTest()
controlWalker->Release();
windowElement->Release();
automation->Release();
- CoUninitialize();
-
- QTestAccessibility::clearEvents();
#endif
}
@@ -4026,6 +4310,9 @@ private:
void tst_QAccessibility::focusChild()
{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("Platform does not support window activation");
+
{
QMainWindow mainWindow;
QtTestAccessibleWidget *widget1 = new QtTestAccessibleWidget(0, "Widget1");
@@ -4059,9 +4346,6 @@ void tst_QAccessibility::focusChild()
QCOMPARE(iface2->focusChild(), iface2);
QCOMPARE(QAccessible::queryAccessibleInterface(&mainWindow)->focusChild(), iface2);
- delete widget1;
- delete widget2;
- delete centralWidget;
QTestAccessibility::clearEvents();
}
@@ -4078,7 +4362,6 @@ void tst_QAccessibility::focusChild()
widget->setFocus();
QCOMPARE(iface->focusChild(), QAccessible::queryAccessibleInterface(widget)->child(1));
- delete widget;
QAccessible::removeFactory(FocusChildTestAccessibleWidget::ifaceFactory);
QTestAccessibility::clearEvents();
}
@@ -4101,11 +4384,256 @@ void tst_QAccessibility::focusChild()
QCOMPARE(iface->focusChild()->text(QAccessible::Name), QStringLiteral("Second tab"));
QCOMPARE(iface->focusChild()->role(), QAccessible::PageTab);
- delete tabBar;
QTestAccessibility::clearEvents();
}
+
+ {
+ auto tableView = std::make_unique<QTableWidget>(3, 3);
+
+ QSignalSpy spy(tableView.get(), SIGNAL(currentCellChanged(int,int,int,int)));
+
+ tableView->setColumnCount(3);
+ QStringList hHeader;
+ hHeader << "h1" << "h2" << "h3";
+ tableView->setHorizontalHeaderLabels(hHeader);
+
+ QStringList vHeader;
+ vHeader << "v1" << "v2" << "v3";
+ tableView->setVerticalHeaderLabels(vHeader);
+
+ for (int i = 0; i < 9; ++i) {
+ QTableWidgetItem *item = new QTableWidgetItem;
+ item->setText(QString::number(i/3) + QString(".") + QString::number(i%3));
+ tableView->setItem(i/3, i%3, item);
+ }
+
+ tableView->resize(600, 600);
+ tableView->show();
+ QVERIFY(QTest::qWaitForWindowExposed(tableView.get()));
+
+ tableView->setFocus();
+
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(tableView.get());
+ QVERIFY(iface);
+
+ spy.clear();
+ tableView->setCurrentCell(2, 1);
+ QTRY_COMPARE(spy.size(), 1);
+
+ QAccessibleInterface *child = iface->focusChild();
+ QVERIFY(child);
+ QCOMPARE(child->text(QAccessible::Name), QStringLiteral("2.1"));
+
+ spy.clear();
+ tableView->setCurrentCell(1, 2);
+ QTRY_COMPARE(spy.size(), 1);
+
+ child = iface->focusChild();
+ QVERIFY(child);
+ QCOMPARE(child->text(QAccessible::Name), QStringLiteral("1.2"));
+ }
+
+ {
+ auto treeView = std::make_unique<QTreeWidget>();
+
+ QSignalSpy spy(treeView.get(), SIGNAL(currentItemChanged(QTreeWidgetItem*,QTreeWidgetItem*)));
+
+ treeView->setColumnCount(2);
+ QTreeWidgetItem *header = new QTreeWidgetItem;
+ header->setText(0, "Artist");
+ header->setText(1, "Work");
+ treeView->setHeaderItem(header);
+
+ QTreeWidgetItem *root1 = new QTreeWidgetItem;
+ root1->setText(0, "Spain");
+ treeView->addTopLevelItem(root1);
+
+ QTreeWidgetItem *item1 = new QTreeWidgetItem;
+ item1->setText(0, "Picasso");
+ item1->setText(1, "Guernica");
+ root1->addChild(item1);
+
+ QTreeWidgetItem *item2 = new QTreeWidgetItem;
+ item2->setText(0, "Tapies");
+ item2->setText(1, "Ambrosia");
+ root1->addChild(item2);
+
+ QTreeWidgetItem *root2 = new QTreeWidgetItem;
+ root2->setText(0, "Austria");
+ treeView->addTopLevelItem(root2);
+
+ QTreeWidgetItem *item3 = new QTreeWidgetItem;
+ item3->setText(0, "Klimt");
+ item3->setText(1, "The Kiss");
+ root2->addChild(item3);
+
+ treeView->resize(400, 400);
+ treeView->show();
+ QVERIFY(QTest::qWaitForWindowExposed(treeView.get()));
+
+ treeView->setFocus();
+
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(treeView.get());
+ QVERIFY(iface);
+
+ spy.clear();
+ treeView->setCurrentItem(item2);
+ QTRY_COMPARE(spy.size(), 1);
+
+ QAccessibleInterface *child = iface->focusChild();
+ QVERIFY(child);
+ QCOMPARE(child->text(QAccessible::Name), QStringLiteral("Tapies"));
+
+ spy.clear();
+ treeView->setCurrentItem(item3);
+ QTRY_COMPARE(spy.size(), 1);
+
+ child = iface->focusChild();
+ QVERIFY(child);
+ QCOMPARE(child->text(QAccessible::Name), QStringLiteral("Klimt"));
+ }
+ {
+ QWidget window;
+ // takes the initial focus
+ QLineEdit lineEdit;
+ QComboBox comboBox;
+ comboBox.addItems({"One", "Two", "Three"});
+ QComboBox editableComboBox;
+ editableComboBox.setEditable(true);
+ editableComboBox.addItems({"A", "B", "C"});
+ QVBoxLayout vbox;
+ vbox.addWidget(&lineEdit);
+ vbox.addWidget(&comboBox);
+ vbox.addWidget(&editableComboBox);
+ window.setLayout(&vbox);
+
+ window.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&window));
+ QTestAccessibility::clearEvents();
+ QAccessibleInterface *iface = nullptr;
+
+ comboBox.setFocus();
+ {
+ QAccessibleEvent focusEvent(&comboBox, QAccessible::Focus);
+ QVERIFY(QTestAccessibility::containsEvent(&focusEvent));
+ }
+ iface = QAccessible::queryAccessibleInterface(&comboBox);
+ QVERIFY(iface);
+ QCOMPARE(iface->focusChild(), nullptr);
+
+ editableComboBox.setFocus();
+ // Qt updates about the editable combobox, not the lineedit, as the
+ // combobox is the lineedit's focus proxy.
+ {
+ QAccessibleEvent focusEvent(&editableComboBox, QAccessible::Focus);
+ QVERIFY(QTestAccessibility::containsEvent(&focusEvent));
+ }
+ iface = QAccessible::queryAccessibleInterface(&editableComboBox);
+ QVERIFY(iface);
+ QVERIFY(iface->focusChild());
+ QCOMPARE(iface->focusChild()->role(), QAccessible::EditableText);
+ }
+}
+
+void tst_QAccessibility::messageBoxTest_data()
+{
+ QTest::addColumn<QMessageBox::Icon>("icon");
+ QTest::addColumn<QMessageBox::StandardButtons>("buttons");
+ QTest::addColumn<QString>("title");
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<QString>("infoText");
+ QTest::addColumn<QString>("details");
+ QTest::addColumn<bool>("checkbox");
+ QTest::addColumn<bool>("textInteractive");
+
+ QTest::addRow("Information") << QMessageBox::Information
+ << QMessageBox::StandardButtons(QMessageBox::Ok)
+ << "Information"
+ << "Here, have some information."
+ << QString()
+ << QString()
+ << false
+ << false;
+
+ QTest::addRow("Warning") << QMessageBox::Warning
+ << QMessageBox::StandardButtons(QMessageBox::Ok | QMessageBox::Cancel)
+ << "Warning"
+ << "This is a dangerous operation!"
+ << "Ok or Cancel?"
+ << QString()
+ << true
+ << false;
+
+ QTest::addRow("Error") << QMessageBox::Critical
+ << QMessageBox::StandardButtons(QMessageBox::Abort | QMessageBox::Retry | QMessageBox::Ignore)
+ << "Error"
+ << "Operation failed for http://example.com"
+ << "You have to decide what to do"
+ << "Detailed log output"
+ << false
+ << true;
}
+void tst_QAccessibility::messageBoxTest()
+{
+ QFETCH(QMessageBox::Icon, icon);
+ QFETCH(QMessageBox::StandardButtons, buttons);
+ QFETCH(QString, title);
+ QFETCH(QString, text);
+ QFETCH(QString, infoText);
+ QFETCH(QString, details);
+ QFETCH(bool, checkbox);
+ QFETCH(bool, textInteractive);
+
+ QMessageBox box(icon, title, text, buttons);
+
+ QAccessibleInterface *iface = QAccessible::queryAccessibleInterface(&box);
+ QVERIFY(iface);
+ QCOMPARE(iface->role(), QAccessible::AlertMessage);
+#ifndef Q_OS_DARWIN // macOS message boxes show no title
+ QCOMPARE(iface->text(QAccessible::Name), title);
+#endif
+ QCOMPARE(iface->text(QAccessible::Value), text);
+
+ int expectedChildCount = 3;
+ QCOMPARE(iface->childCount(), expectedChildCount);
+
+ if (textInteractive)
+ box.setTextInteractionFlags(Qt::TextBrowserInteraction);
+
+ if (!infoText.isEmpty()) {
+ box.setInformativeText(infoText);
+ QCOMPARE(iface->childCount(), ++expectedChildCount);
+ }
+ QCOMPARE(iface->text(QAccessible::Help), infoText);
+
+ if (!details.isEmpty()) {
+ box.setDetailedText(details);
+ QCOMPARE(iface->childCount(), ++expectedChildCount);
+ }
+ if (checkbox) {
+ box.setCheckBox(new QCheckBox("Don't show again"));
+ QCOMPARE(iface->childCount(), ++expectedChildCount);
+ }
+
+ QTestAccessibility::clearEvents();
+
+ QDialogPrivate *boxPrivate = static_cast<QDialogPrivate *>(QDialogPrivate::get(&box));
+ if (!boxPrivate->canBeNativeDialog()) {
+ // platforms that use a native message box will not emit accessibility events
+ box.show();
+
+ QAccessibleEvent showEvent(&box, QAccessible::DialogStart);
+ QVERIFY(QTestAccessibility::containsEvent(&showEvent));
+
+ box.hide();
+
+ QAccessibleEvent hideEvent(&box, QAccessible::DialogEnd);
+ QVERIFY(QTestAccessibility::containsEvent(&hideEvent));
+ }
+
+ QTestAccessibility::clearEvents();
+}
QTEST_MAIN(tst_QAccessibility)
#include "tst_qaccessibility.moc"
diff --git a/tests/auto/other/qaccessibilitylinux/CMakeLists.txt b/tests/auto/other/qaccessibilitylinux/CMakeLists.txt
index ba6443d364..5c85827a3b 100644
--- a/tests/auto/other/qaccessibilitylinux/CMakeLists.txt
+++ b/tests/auto/other/qaccessibilitylinux/CMakeLists.txt
@@ -1,10 +1,16 @@
-# Generated from qaccessibilitylinux.pro.
-# special case begin
+# 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_qaccessibilitylinux LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
if (NOT QT_FEATURE_accessibility OR NOT TARGET Qt::LinuxAccessibilitySupportPrivate
OR (QT_BUILD_STANDALONE_TESTS AND QT_WILL_INSTALL))
return()
endif()
-# special case end
#####################################################################
## tst_qaccessibilitylinux Test:
@@ -15,7 +21,7 @@ qt_internal_add_test(tst_qaccessibilitylinux
tst_qaccessibilitylinux.cpp
DBUS_INTERFACE_SOURCES
../../../../src/platformsupport/linuxaccessibility/dbusxml/Bus.xml
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
Qt::Gui
Qt::GuiPrivate
@@ -23,9 +29,7 @@ qt_internal_add_test(tst_qaccessibilitylinux
Qt::Widgets
)
-# special case begin
# require for struct_marshallers_p.h which is included dbus_interface.h
target_include_directories(tst_qaccessibilitylinux PRIVATE
../../../../src/platformsupport/linuxaccessibility
)
-# special case end
diff --git a/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp b/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp
index f776e87692..18bcdeca29 100644
--- a/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.cpp
+++ b/tests/auto/other/qaccessibilitylinux/tst_qaccessibilitylinux.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
#include <QTest>
#include <QtGui>
@@ -80,7 +55,7 @@ class tst_QAccessibilityLinux : public QObject
public:
tst_QAccessibilityLinux() : m_window(0), root(0), rootApplication(0), mainWindow(0)
{
- qputenv("QT_LINUX_ACCESSIBILITY_ALWAYS_ON", QByteArrayLiteral("1"));
+ qputenv("QT_LINUX_ACCESSIBILITY_ALWAYS_ON", "1");
dbus = new DBusConnection();
}
~tst_QAccessibilityLinux()
@@ -128,7 +103,7 @@ QStringList tst_QAccessibilityLinux::getChildren(QDBusInterface *interface)
Q_ASSERT(interface->property("ChildCount").toInt() == list.count());
QStringList children;
- Q_FOREACH (const QSpiObjectReference &ref, list)
+ for (const QSpiObjectReference &ref : std::as_const(list))
children << ref.path.path();
return children;
@@ -179,6 +154,7 @@ void tst_QAccessibilityLinux::initTestCase()
QVERIFY(!address.isEmpty());
m_window = new AccessibleTestWindow();
+ m_window->setObjectName("mainWindow"_L1);
m_window->show();
QVERIFY(QTest::qWaitForWindowExposed(m_window));
@@ -236,8 +212,11 @@ bool hasState(QDBusInterface *interface, AtspiStateType state)
void tst_QAccessibilityLinux::testLabel()
{
QLabel *l = new QLabel(m_window);
+ l->setObjectName("theObjectName"_L1);
l->setText("Hello A11y");
m_window->addWidget(l);
+ auto a11yEmpty = new QLabel(m_window);
+ m_window->addWidget(l);
// Application
QCOMPARE(getParent(mainWindow), QLatin1String(ATSPI_DBUS_PATH_ROOT));
@@ -249,6 +228,8 @@ void tst_QAccessibilityLinux::testLabel()
QCOMPARE(getChildren(labelInterface).count(), 0);
QCOMPARE(labelInterface->call(QDBus::Block, "GetRoleName").arguments().first().toString(), QLatin1String("label"));
QCOMPARE(labelInterface->call(QDBus::Block, "GetRole").arguments().first().toUInt(), 29u);
+ QCOMPARE(labelInterface->call(QDBus::Block, "GetAccessibleId").arguments().first().toString(),
+ "mainWindow.theObjectName"_L1);
QCOMPARE(getParent(labelInterface), mainWindow->path());
QVERIFY(!hasState(labelInterface, ATSPI_STATE_EDITABLE));
QVERIFY(hasState(labelInterface, ATSPI_STATE_READ_ONLY));
@@ -256,7 +237,12 @@ void tst_QAccessibilityLinux::testLabel()
l->setText("New text");
QCOMPARE(labelInterface->property("Name").toString(), l->text());
+ auto *a11yEmptyInterface = getInterface(children.at(1), "org.a11y.atspi.Accessible");
+ QCOMPARE(a11yEmptyInterface->call(QDBus::Block, "GetAccessibleId").arguments().first().toString(),
+ "mainWindow.QLabel"_L1);
+
m_window->clearChildren();
+ delete a11yEmptyInterface;
delete labelInterface;
}
diff --git a/tests/auto/other/qaccessibilitymac/CMakeLists.txt b/tests/auto/other/qaccessibilitymac/CMakeLists.txt
index 6dd30a6fa1..66896ed384 100644
--- a/tests/auto/other/qaccessibilitymac/CMakeLists.txt
+++ b/tests/auto/other/qaccessibilitymac/CMakeLists.txt
@@ -1,32 +1,22 @@
-# Generated from qaccessibilitymac.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_qaccessibilitymac LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT APPLE)
return()
endif()
-#####################################################################
-## tst_qaccessibilitymac Test:
-#####################################################################
-
qt_internal_add_test(tst_qaccessibilitymac
SOURCES
- tst_qaccessibilitymac.cpp
- tst_qaccessibilitymac_helpers.h
- PUBLIC_LIBRARIES
+ tst_qaccessibilitymac.mm
+ LIBRARIES
Qt::Gui
Qt::Widgets
-)
-
-#### Keys ignored in scope 1:.:.:qaccessibilitymac.pro:<TRUE>:
-# _REQUIREMENTS = "mac"
-
-## Scopes:
-#####################################################################
-
-qt_internal_extend_target(tst_qaccessibilitymac CONDITION APPLE
- SOURCES
- tst_qaccessibilitymac_helpers.mm
- PUBLIC_LIBRARIES
${FWAppKit}
${FWApplicationServices}
${FWSecurity}
diff --git a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.cpp b/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.cpp
deleted file mode 100644
index a766e1e374..0000000000
--- a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.cpp
+++ /dev/null
@@ -1,150 +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 <QApplication>
-#include <QtWidgets>
-#include <QTest>
-#include <QtCore/qcoreapplication.h>
-
-#include "tst_qaccessibilitymac_helpers.h"
-
-QT_USE_NAMESPACE
-
-
-class AccessibleTestWindow : public QWidget
-{
- Q_OBJECT
-public:
- AccessibleTestWindow()
- {
- new QHBoxLayout(this);
- }
-
- void addWidget(QWidget* widget)
- {
- layout()->addWidget(widget);
- widget->show();
- QVERIFY(QTest::qWaitForWindowExposed(widget));
- }
-
- void clearChildren()
- {
- qDeleteAll(children());
- new QHBoxLayout(this);
- }
-};
-
-class tst_QAccessibilityMac : public QObject
-{
-Q_OBJECT
-private slots:
- void init();
- void cleanup();
-
- void singleWidgetTest();
- void lineEditTest();
- void hierarchyTest();
- void notificationsTest();
- void checkBoxTest();
-
-private:
- AccessibleTestWindow *m_window;
-};
-
-
-void tst_QAccessibilityMac::init()
-{
- m_window = new AccessibleTestWindow();
- m_window->setWindowTitle("Test window");
- m_window->show();
- m_window->resize(400, 400);
-
- QVERIFY(QTest::qWaitForWindowExposed(m_window));
-}
-
-void tst_QAccessibilityMac::cleanup()
-{
- delete m_window;
-}
-
-void tst_QAccessibilityMac::singleWidgetTest()
-{
- delete m_window;
- m_window = 0;
-
- QVERIFY(singleWidget());
-}
-
-void tst_QAccessibilityMac::lineEditTest()
-{
- QLineEdit *lineEdit = new QLineEdit(m_window);
- lineEdit->setText("a11y test QLineEdit");
- m_window->addWidget(lineEdit);
- QVERIFY(QTest::qWaitForWindowExposed(m_window));
- QCoreApplication::processEvents();
-
- QVERIFY(testLineEdit());
-}
-
-void tst_QAccessibilityMac::hierarchyTest()
-{
- QWidget *w = new QWidget(m_window);
- m_window->addWidget(w);
-
- w->setLayout(new QVBoxLayout());
- QPushButton *b = new QPushButton(w);
- w->layout()->addWidget(b);
- b->setText("I am a button");
-
- QPushButton *b2 = new QPushButton(w);
- w->layout()->addWidget(b2);
- b2->setText("Button 2");
-
- QVERIFY(QTest::qWaitForWindowExposed(m_window));
- QCoreApplication::processEvents();
- QVERIFY(testHierarchy(w));
-}
-
-void tst_QAccessibilityMac::notificationsTest()
-{
- QVERIFY(notifications(m_window));
-}
-
-void tst_QAccessibilityMac::checkBoxTest()
-{
- QCheckBox *cb = new QCheckBox(m_window);
- cb->setText("Great option");
- m_window->addWidget(cb);
- QVERIFY(QTest::qWaitForWindowExposed(m_window));
- QCoreApplication::processEvents();
-
- QVERIFY(testCheckBox(cb));
-}
-
-QTEST_MAIN(tst_QAccessibilityMac)
-#include "tst_qaccessibilitymac.moc"
diff --git a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.mm b/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.mm
index 7e89b3a166..4bedd07e15 100644
--- a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.mm
+++ b/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac.mm
@@ -1,35 +1,14 @@
-/****************************************************************************
-**
-** 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 <QtWidgets>
+#include <QTest>
+#include <QtCore/qcoreapplication.h>
// some versions of CALayer.h use 'slots' as an identifier
#define QT_NO_KEYWORDS
-#include "tst_qaccessibilitymac_helpers.h"
#include <QtWidgets/qapplication.h>
#include <QtWidgets/qlineedit.h>
#include <QtWidgets/qpushbutton.h>
@@ -80,17 +59,10 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
return dbg;
}
-#define EXPECT(cond) \
- if (!(cond)) { \
- qWarning("Failure in %s, line: %d", __FILE__ , __LINE__); \
- return false; \
- } \
-
-#define TRY_EXPECT(cond) EXPECT(QTest::qWaitFor([&]{ return (cond); }))
-
@interface TestAXObject : NSObject
{
AXUIElementRef reference;
+ bool axError;
}
@property (readonly) NSString *role;
@property (readonly) NSString *title;
@@ -106,11 +78,13 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
if ((self = [super init])) {
reference = ref;
+ axError = false;
}
return self;
}
- (AXUIElementRef) ref { return reference; }
+- (bool)errorOccurred { return axError; }
- (void) print {
NSLog(@"Accessible Object role: '%@', title: '%@', description: '%@', value: '%@', rect: '%@'", self.role, self.title, self.description, self.value, NSStringFromRect(NSRectFromCGRect(self.rect)));
NSLog(@" Children: %ld", [[self childList] count]);
@@ -138,6 +112,28 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
return list;
}
+- (NSArray *)tableRows
+{
+ NSArray *arr;
+ AXUIElementCopyAttributeValues(
+ reference,
+ kAXRowsAttribute,
+ 0, 100, /*min, max*/
+ (CFArrayRef *) &arr);
+ return arr;
+}
+
+- (NSArray *)tableColumns
+{
+ NSArray *arr;
+ AXUIElementCopyAttributeValues(
+ reference,
+ kAXColumnsAttribute,
+ 0, 100, /*min, max*/
+ (CFArrayRef *) &arr);
+ return arr;
+}
+
- (AXUIElementRef) findDirectChildByRole: (CFStringRef) role
{
TestAXObject *result = nil;
@@ -232,8 +228,8 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
CFTypeRef value = NULL;
AXError err;
- if (kAXErrorSuccess != (err = AXUIElementCopyAttributeValue(reference, attribute, &value)))
- {
+ if (kAXErrorSuccess != (err = AXUIElementCopyAttributeValue(reference, attribute, &value))) {
+ axError = true;
qDebug() << "AXUIElementCopyAttributeValue(" << QString::fromCFString(attribute) << ") returned error = " << AXErrorTag(err);
}
return value;
@@ -279,8 +275,8 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
CFTypeRef value = NULL;
AXError err;
- if (kAXErrorSuccess != (err = AXUIElementCopyParameterizedAttributeValue(reference, attribute, parameter, &value)))
- {
+ if (kAXErrorSuccess != (err = AXUIElementCopyParameterizedAttributeValue(reference, attribute, parameter, &value))) {
+ axError = true;
CFStringRef description = CFCopyDescription(parameter);
qDebug() << "AXUIElementCopyParameterizedAttributeValue(" << QString::fromCFString(attribute) << ", parameter=" << QString::fromCFString(description) << ") returned error = " << AXErrorTag(err);
CFRelease(description);
@@ -318,8 +314,8 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
AXError err;
CFArrayRef actions;
- if (kAXErrorSuccess != (err = AXUIElementCopyActionNames(reference, &actions)))
- {
+ if (kAXErrorSuccess != (err = AXUIElementCopyActionNames(reference, &actions))) {
+ axError = true;
qDebug() << "AXUIElementCopyActionNames(...) returned error = " << AXErrorTag(err);
}
@@ -330,8 +326,8 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
{
AXError err;
- if (kAXErrorSuccess != (err = AXUIElementPerformAction(reference, action)))
- {
+ if (kAXErrorSuccess != (err = AXUIElementPerformAction(reference, action))) {
+ axError = true;
qDebug() << "AXUIElementPerformAction(" << QString::fromCFString(action) << ") returned error = " << AXErrorTag(err);
}
}
@@ -366,66 +362,140 @@ QDebug operator<<(QDebug dbg, AXErrorTag err)
@end
+QVector<int> notificationList;
+
+void observerCallback(AXObserverRef /*observer*/, AXUIElementRef /*element*/, CFStringRef notification, void *)
+{
+ if ([(NSString*)notification isEqualToString: NSAccessibilityFocusedUIElementChangedNotification])
+ notificationList.append(QAccessible::Focus);
+ else if ([(NSString*)notification isEqualToString: NSAccessibilityValueChangedNotification])
+ notificationList.append(QAccessible::ValueChanged);
+ else
+ notificationList.append(-1);
+}
-bool singleWidget()
+class AccessibleTestWindow : public QWidget
{
+ Q_OBJECT
+public:
+ AccessibleTestWindow()
+ {
+ new QHBoxLayout(this);
+ }
+
+ void addWidget(QWidget* widget)
+ {
+ layout()->addWidget(widget);
+ widget->show();
+ QVERIFY(QTest::qWaitForWindowExposed(widget));
+ }
+
+ void clearChildren()
+ {
+ qDeleteAll(children());
+ new QHBoxLayout(this);
+ }
+};
+
+class tst_QAccessibilityMac : public QObject
+{
+Q_OBJECT
+private Q_SLOTS:
+ void init();
+ void cleanup();
+
+ void singleWidgetTest();
+ void lineEditTest();
+ void hierarchyTest();
+ void notificationsTest();
+ void checkBoxTest();
+ void tableViewTest();
+ void treeViewTest();
+
+private:
+ AccessibleTestWindow *m_window;
+};
+
+
+void tst_QAccessibilityMac::init()
+{
+ m_window = new AccessibleTestWindow();
+ m_window->setWindowTitle(QString("Test window - %1").arg(QTest::currentTestFunction()));
+ m_window->show();
+ m_window->resize(400, 400);
+
+ QVERIFY(QTest::qWaitForWindowExposed(m_window));
+}
+
+void tst_QAccessibilityMac::cleanup()
+{
+ delete m_window;
+}
+
+void tst_QAccessibilityMac::singleWidgetTest()
+{
+ delete m_window;
+ m_window = 0;
+
QLineEdit *le = new QLineEdit();
le->setText("button");
le->show();
- EXPECT(QTest::qWaitForWindowExposed(le));
+ QVERIFY(QTest::qWaitForWindowExposed(le));
QCoreApplication::processEvents();
TestAXObject *appObject = [TestAXObject getApplicationAXObject];
- EXPECT(appObject);
+ QVERIFY(appObject);
- NSArray *windows = [appObject windowList];
- EXPECT([windows count] == 1);
+ QTRY_VERIFY(appObject.windowList.count == 1);
- AXUIElementRef windowRef = (AXUIElementRef) [windows objectAtIndex: 0];
- EXPECT(windowRef != nil);
+ AXUIElementRef windowRef = (AXUIElementRef) [appObject.windowList objectAtIndex: 0];
+ QVERIFY(windowRef != nil);
TestAXObject *window = [[TestAXObject alloc] initWithAXUIElementRef: windowRef];
AXUIElementRef lineEditRef = [window findDirectChildByRole: kAXTextFieldRole];
- EXPECT(lineEditRef != nil);
+ QVERIFY(lineEditRef != nil);
TestAXObject *lineEdit = [[TestAXObject alloc] initWithAXUIElementRef: lineEditRef];
- EXPECT([[lineEdit value] isEqualToString:@"button"]);
+ QVERIFY([[lineEdit value] isEqualToString:@"button"]);
// Access invalid reference, should return empty value
delete le;
QCoreApplication::processEvents();
TestAXObject *lineEditInvalid = [[TestAXObject alloc] initWithAXUIElementRef: lineEditRef];
- EXPECT([[lineEditInvalid value] length] == 0);
-
- return true;
+ QVERIFY([[lineEditInvalid value] length] == 0);
}
-bool testLineEdit()
+void tst_QAccessibilityMac::lineEditTest()
{
+ QLineEdit *lineEdit = new QLineEdit(m_window);
+ lineEdit->setText("a11y test QLineEdit");
+ m_window->addWidget(lineEdit);
+ QVERIFY(QTest::qWaitForWindowExposed(m_window));
+ QCoreApplication::processEvents();
+
TestAXObject *appObject = [TestAXObject getApplicationAXObject];
- EXPECT(appObject);
+ QVERIFY(appObject);
- NSArray *windowList = [appObject windowList];
// one window
- EXPECT([windowList count] == 1);
- AXUIElementRef windowRef = (AXUIElementRef) [windowList objectAtIndex: 0];
- EXPECT(windowRef != nil);
+ QTRY_VERIFY(appObject.windowList.count == 1);
+ AXUIElementRef windowRef = (AXUIElementRef) [appObject.windowList objectAtIndex: 0];
+ QVERIFY(windowRef != nil);
TestAXObject *window = [[TestAXObject alloc] initWithAXUIElementRef: windowRef];
- EXPECT([window rect].size.width == 400);
+ QVERIFY([window rect].size.width == 400);
// height of window includes title bar
- EXPECT([window rect].size.height >= 400);
+ QVERIFY([window rect].size.height >= 400);
- EXPECT([window.title isEqualToString:@"Test window"]);
+ QVERIFY([window.title isEqualToString:@"Test window - lineEditTest"]);
// children of window:
- AXUIElementRef lineEdit = [window findDirectChildByRole: kAXTextFieldRole];
- EXPECT(lineEdit != nil);
+ AXUIElementRef lineEditElement = [window findDirectChildByRole: kAXTextFieldRole];
+ QVERIFY(lineEditElement != nil);
- TestAXObject *le = [[TestAXObject alloc] initWithAXUIElementRef: lineEdit];
+ TestAXObject *le = [[TestAXObject alloc] initWithAXUIElementRef: lineEditElement];
NSString *value = @"a11y test QLineEdit";
- EXPECT([le.value isEqualToString:value]);
- EXPECT(value.length <= NSIntegerMax);
- EXPECT(le.numberOfCharacters == static_cast<NSInteger>(value.length));
+ QVERIFY([le.value isEqualToString:value]);
+ QVERIFY(value.length <= NSIntegerMax);
+ QVERIFY(le.numberOfCharacters == static_cast<NSInteger>(value.length));
const NSRange ranges[] = {
{ 0, 0},
{ 0, 1},
@@ -440,82 +510,81 @@ bool testLineEdit()
NSString *expectedSubstring = [value substringWithRange:range];
NSString *actualSubstring = [le stringForRange:range];
NSString *actualAttributedSubstring = [le attributedStringForRange:range].string;
- EXPECT([actualSubstring isEqualTo:expectedSubstring]);
- EXPECT([actualAttributedSubstring isEqualTo:expectedSubstring]);
+ QVERIFY([actualSubstring isEqualTo:expectedSubstring]);
+ QVERIFY([actualAttributedSubstring isEqualTo:expectedSubstring]);
}
- return true;
}
-bool testHierarchy(QWidget *w)
+void tst_QAccessibilityMac::hierarchyTest()
{
+ QWidget *w = new QWidget(m_window);
+ m_window->addWidget(w);
+
+ w->setLayout(new QVBoxLayout());
+ QPushButton *b = new QPushButton(w);
+ w->layout()->addWidget(b);
+ b->setText("I am a button");
+
+ QPushButton *b2 = new QPushButton(w);
+ w->layout()->addWidget(b2);
+ b2->setText("Button 2");
+
+ QVERIFY(QTest::qWaitForWindowExposed(m_window));
+ QCoreApplication::processEvents();
+
TestAXObject *appObject = [TestAXObject getApplicationAXObject];
- EXPECT(appObject);
+ QVERIFY(appObject);
- NSArray *windowList = [appObject windowList];
// one window
- EXPECT([windowList count] == 1);
- AXUIElementRef windowRef = (AXUIElementRef) [windowList objectAtIndex: 0];
- EXPECT(windowRef != nil);
+ QTRY_VERIFY(appObject.windowList.count == 1);
+ AXUIElementRef windowRef = (AXUIElementRef) [appObject.windowList objectAtIndex: 0];
+ QVERIFY(windowRef != nil);
TestAXObject *window = [[TestAXObject alloc] initWithAXUIElementRef: windowRef];
// Because the plain widget is filtered out of the hierarchy, we expect the button
// to be a direct child of the window
AXUIElementRef buttonRef = [window findDirectChildByRole: kAXButtonRole];
- EXPECT(buttonRef != nil);
+ QVERIFY(buttonRef != nil);
TestAXObject *buttonObject = [[TestAXObject alloc] initWithAXUIElementRef: buttonRef];
TestAXObject *parentObject = [[TestAXObject alloc] initWithAXUIElementRef: [buttonObject parent]];
// check that the parent is a window
- EXPECT([[parentObject role] isEqualToString: NSAccessibilityWindowRole]);
+ QVERIFY([[parentObject role] isEqualToString: NSAccessibilityWindowRole]);
// test the focus
// child 0 is the layout, then button1 and 2
QPushButton *button1 = qobject_cast<QPushButton*>(w->children().at(1));
- EXPECT(button1);
+ QVERIFY(button1);
QPushButton *button2 = qobject_cast<QPushButton*>(w->children().at(2));
- EXPECT(button2);
+ QVERIFY(button2);
button2->setFocus();
AXUIElementRef systemWideElement = AXUIElementCreateSystemWide();
AXUIElementRef focussedElement = NULL;
AXError error = AXUIElementCopyAttributeValue(systemWideElement,
(CFStringRef)NSAccessibilityFocusedUIElementAttribute, (CFTypeRef*)&focussedElement);
- EXPECT(!error);
- EXPECT(focussedElement);
+ QVERIFY(!error);
+ QVERIFY(focussedElement);
TestAXObject *focusButton2 = [[TestAXObject alloc] initWithAXUIElementRef: focussedElement];
- EXPECT([[focusButton2 role] isEqualToString: NSAccessibilityButtonRole]);
- EXPECT([[focusButton2 title] isEqualToString: @"Button 2"]);
+ QVERIFY([[focusButton2 role] isEqualToString: NSAccessibilityButtonRole]);
+ QVERIFY([[focusButton2 title] isEqualToString: @"Button 2"]);
button1->setFocus();
error = AXUIElementCopyAttributeValue(systemWideElement,
(CFStringRef)NSAccessibilityFocusedUIElementAttribute, (CFTypeRef*)&focussedElement);
- EXPECT(!error);
- EXPECT(focussedElement);
+ QVERIFY(!error);
+ QVERIFY(focussedElement);
TestAXObject *focusButton1 = [[TestAXObject alloc] initWithAXUIElementRef: focussedElement];
- EXPECT([[focusButton1 role] isEqualToString: NSAccessibilityButtonRole]);
- EXPECT([[focusButton1 title] isEqualToString: @"I am a button"]);
-
- return true;
+ QVERIFY([[focusButton1 role] isEqualToString: NSAccessibilityButtonRole]);
+ QVERIFY([[focusButton1 title] isEqualToString: @"I am a button"]);
}
-QVector<int> notificationList;
-
-void observerCallback(AXObserverRef /*observer*/, AXUIElementRef /*element*/, CFStringRef notification, void *)
-{
- if ([(NSString*)notification isEqualToString: NSAccessibilityFocusedUIElementChangedNotification])
- notificationList.append(QAccessible::Focus);
- else if ([(NSString*)notification isEqualToString: NSAccessibilityValueChangedNotification])
- notificationList.append(QAccessible::ValueChanged);
- else
- notificationList.append(-1);
-}
-
-
-bool notifications(QWidget *w)
+void tst_QAccessibilityMac::notificationsTest()
{
+ auto *w = m_window;
QLineEdit *le1 = new QLineEdit(w);
QLineEdit *le2 = new QLineEdit(w);
w->layout()->addWidget(le1);
@@ -525,76 +594,215 @@ bool notifications(QWidget *w)
QTest::qWait(100);
TestAXObject *appObject = [TestAXObject getApplicationAXObject];
- EXPECT(appObject);
+ QVERIFY(appObject);
- NSArray *windowList = [appObject windowList];
// one window
- EXPECT([windowList count] == 1);
- AXUIElementRef windowRef = (AXUIElementRef) [windowList objectAtIndex: 0];
- EXPECT(windowRef != nil);
+ QTRY_VERIFY(appObject.windowList.count == 1);
+ AXUIElementRef windowRef = (AXUIElementRef) [appObject.windowList objectAtIndex: 0];
+ QVERIFY(windowRef != nil);
TestAXObject *window = [[TestAXObject alloc] initWithAXUIElementRef: windowRef];
AXUIElementRef lineEdit1 = [window findDirectChildByRole: kAXTextFieldRole];
- EXPECT(lineEdit1 != nil);
+ QVERIFY(lineEdit1 != nil);
AXObserverRef observer = 0;
AXError err = AXObserverCreate(getpid(), observerCallback, &observer);
- EXPECT(!err);
+ QVERIFY(!err);
AXObserverAddNotification(observer, appObject.ref, kAXFocusedUIElementChangedNotification, 0);
AXObserverAddNotification(observer, lineEdit1, kAXValueChangedNotification, 0);
CFRunLoopAddSource( [[NSRunLoop currentRunLoop] getCFRunLoop], AXObserverGetRunLoopSource(observer), kCFRunLoopDefaultMode);
- EXPECT(notificationList.length() == 0);
+ QVERIFY(notificationList.length() == 0);
le2->setFocus();
- TRY_EXPECT(notificationList.length() == 1);
- TRY_EXPECT(notificationList.at(0) == QAccessible::Focus);
+ QTRY_VERIFY(notificationList.length() == 1);
+ QTRY_VERIFY(notificationList.at(0) == QAccessible::Focus);
le1->setFocus();
- TRY_EXPECT(notificationList.length() == 2);
- TRY_EXPECT(notificationList.at(1) == QAccessible::Focus);
+ QTRY_VERIFY(notificationList.length() == 2);
+ QTRY_VERIFY(notificationList.at(1) == QAccessible::Focus);
le1->setText("hello");
- TRY_EXPECT(notificationList.length() == 3);
- TRY_EXPECT(notificationList.at(2) == QAccessible::ValueChanged);
+ QTRY_VERIFY(notificationList.length() == 3);
+ QTRY_VERIFY(notificationList.at(2) == QAccessible::ValueChanged);
le1->setText("foo");
- TRY_EXPECT(notificationList.length() == 4);
- TRY_EXPECT(notificationList.at(3) == QAccessible::ValueChanged);
-
- return true;
+ QTRY_VERIFY(notificationList.length() == 4);
+ QTRY_VERIFY(notificationList.at(3) == QAccessible::ValueChanged);
}
-bool testCheckBox(QCheckBox *ckBox)
+void tst_QAccessibilityMac::checkBoxTest()
{
+ QCheckBox *ckBox = new QCheckBox(m_window);
+ ckBox->setText("Great option");
+ m_window->addWidget(ckBox);
+ QVERIFY(QTest::qWaitForWindowExposed(m_window));
+ QCoreApplication::processEvents();
+
TestAXObject *appObject = [TestAXObject getApplicationAXObject];
- EXPECT(appObject);
+ QVERIFY(appObject);
- NSArray *windowList = [appObject windowList];
// one window
- EXPECT([windowList count] == 1);
- AXUIElementRef windowRef = (AXUIElementRef) [windowList objectAtIndex: 0];
- EXPECT(windowRef != nil);
+ QTRY_VERIFY(appObject.windowList.count == 1);
+ AXUIElementRef windowRef = (AXUIElementRef) [appObject.windowList objectAtIndex: 0];
+ QVERIFY(windowRef != nil);
TestAXObject *window = [[TestAXObject alloc] initWithAXUIElementRef: windowRef];
// children of window:
AXUIElementRef checkBox = [window findDirectChildByRole: kAXCheckBoxRole];
- EXPECT(checkBox != nil);
+ QVERIFY(checkBox != nil);
TestAXObject *cb = [[TestAXObject alloc] initWithAXUIElementRef: checkBox];
// here start actual checkbox tests
- EXPECT([cb valueNumber] == 0);
- EXPECT([cb.title isEqualToString:@"Great option"]);
+ QVERIFY([cb valueNumber] == 0);
+ QVERIFY([cb.title isEqualToString:@"Great option"]);
// EXPECT(cb.description == nil); // currently returns "" instead of nil
- EXPECT([cb.actions containsObject:(NSString*)kAXPressAction]);
+ QVERIFY([cb.actions containsObject:(NSString*)kAXPressAction]);
[cb performAction:kAXPressAction];
- EXPECT([cb valueNumber] == 1);
+ QVERIFY([cb valueNumber] == 1);
[cb performAction:kAXPressAction];
- EXPECT([cb valueNumber] == 0);
+ QVERIFY([cb valueNumber] == 0);
ckBox->setCheckState(Qt::PartiallyChecked);
- EXPECT([cb valueNumber] == 2);
+ QVERIFY([cb valueNumber] == 2);
+}
+
+void tst_QAccessibilityMac::tableViewTest()
+{
+ QTableWidget *tw = new QTableWidget(3, 2, m_window);
+ struct Person
+ {
+ const char *name;
+ const char *address;
+ };
+ const Person contents[] = { { "Socrates", "Greece" },
+ { "Confucius", "China" },
+ { "Kant", "Preussia" }
+ };
+ for (int i = 0; i < int(sizeof(contents) / sizeof(Person)); ++i) {
+ Person p = contents[i];
+ QTableWidgetItem *name = new QTableWidgetItem(QString::fromLatin1(p.name));
+ tw->setItem(i, 0, name);
+ QTableWidgetItem *address = new QTableWidgetItem(QString::fromLatin1(p.address));
+ tw->setItem(i, 1, address);
+ }
+ m_window->addWidget(tw);
+ QVERIFY(QTest::qWaitForWindowExposed(m_window));
+ QCoreApplication::processEvents();
+
+ TestAXObject *appObject = [TestAXObject getApplicationAXObject];
+ QVERIFY(appObject);
- return true;
+ NSArray *windowList = [appObject windowList];
+ // one window
+ QVERIFY([windowList count] == 1);
+ AXUIElementRef windowRef = (AXUIElementRef)[windowList objectAtIndex:0];
+ QVERIFY(windowRef != nil);
+ TestAXObject *window = [[TestAXObject alloc] initWithAXUIElementRef:windowRef];
+
+ // children of window:
+ AXUIElementRef tableView = [window findDirectChildByRole:kAXTableRole];
+ QVERIFY(tableView != nil);
+
+ TestAXObject *tv = [[TestAXObject alloc] initWithAXUIElementRef:tableView];
+
+ // here start actual tableview tests
+ // Should have 2 columns
+ const unsigned int columnCount = 2;
+ NSArray *columnArray = [tv tableColumns];
+ QCOMPARE([columnArray count], columnCount);
+
+ // should have 3 rows
+ const unsigned int rowCount = 3;
+ NSArray *rowArray = [tv tableRows];
+ QCOMPARE([rowArray count], rowCount);
+
+ // The individual cells are children of the rows
+ TestAXObject *row = [[TestAXObject alloc] initWithAXUIElementRef:(AXUIElementRef)rowArray[0]];
+ TestAXObject *cell = [[TestAXObject alloc] initWithAXUIElementRef:(AXUIElementRef)[row childList][0]];
+ QVERIFY([cell.title isEqualToString:@"Socrates"]);
+ row = [[TestAXObject alloc] initWithAXUIElementRef:(AXUIElementRef)rowArray[2]];
+ cell = [[TestAXObject alloc] initWithAXUIElementRef:(AXUIElementRef)[row childList][1]];
+ QVERIFY([cell.title isEqualToString:@"Preussia"]);
+
+ // both rows and columns are direct children of the table
+ NSArray *childList = [tv childList];
+ QCOMPARE([childList count], columnCount + rowCount);
+ for (id child in childList) {
+ TestAXObject *childObject = [[TestAXObject alloc] initWithAXUIElementRef:(AXUIElementRef)child];
+ QVERIFY([childObject.role isEqualToString:NSAccessibilityRowRole] ||
+ [childObject.role isEqualToString:NSAccessibilityColumnRole]);
+ }
}
+
+void tst_QAccessibilityMac::treeViewTest()
+{
+ QTreeWidget *tw = new QTreeWidget;
+ tw->setColumnCount(2);
+ QTreeWidgetItem *root = new QTreeWidgetItem(tw, {"/", "0"});
+ root->setExpanded(false);
+ QTreeWidgetItem *users = new QTreeWidgetItem(root,{ "Users", "1"});
+ (void)new QTreeWidgetItem(root, {"Applications", "2"});
+ QTreeWidgetItem *lastChild = new QTreeWidgetItem(root, {"Libraries", "3"});
+
+ m_window->addWidget(tw);
+ QVERIFY(QTest::qWaitForWindowExposed(m_window));
+ QCoreApplication::processEvents();
+
+ TestAXObject *appObject = [TestAXObject getApplicationAXObject];
+ QVERIFY(appObject);
+
+ NSArray *windowList = [appObject windowList];
+ // one window
+ QVERIFY([windowList count] == 1);
+ AXUIElementRef windowRef = (AXUIElementRef)[windowList objectAtIndex:0];
+ QVERIFY(windowRef != nil);
+ TestAXObject *window = [[TestAXObject alloc] initWithAXUIElementRef:windowRef];
+
+ // children of window
+ AXUIElementRef treeView = [window findDirectChildByRole:kAXOutlineRole];
+ QVERIFY(treeView != nil);
+
+ TestAXObject *tv = [[TestAXObject alloc] initWithAXUIElementRef:treeView];
+
+ // here start actual treeview tests. NSAccessibilityOutline is a specialization
+ // of NSAccessibilityTable, and we represent trees as tables.
+ // Should have 2 columns
+ const unsigned int columnCount = 2;
+ NSArray *columnArray = [tv tableColumns];
+ QCOMPARE([columnArray count], columnCount);
+
+ // should have 1 row for now - as long as the root item is not expanded
+ NSArray *rowArray = [tv tableRows];
+ QCOMPARE(int([rowArray count]), 1);
+
+ root->setExpanded(true);
+ rowArray = [tv tableRows];
+ QCOMPARE(int([rowArray count]), root->childCount() + 1);
+
+ // this should not trigger any assert
+ tw->setCurrentItem(lastChild);
+
+ bool errorOccurred = false;
+
+ const auto cellText = [rowArray, &errorOccurred](int rowIndex, int columnIndex) -> QString {
+ TestAXObject *row = [[TestAXObject alloc] initWithAXUIElementRef:(AXUIElementRef)rowArray[rowIndex]];
+ Q_ASSERT(row);
+ TestAXObject *cell = [[TestAXObject alloc] initWithAXUIElementRef:(AXUIElementRef)[row childList][columnIndex]];
+ Q_ASSERT(cell);
+ const QString result = QString::fromNSString(cell.title);
+ errorOccurred = cell.errorOccurred;
+ return result;
+ };
+
+ QString text = cellText(0, 0);
+ if (errorOccurred)
+ QSKIP("Cocoa Accessibility API error, aborting");
+ QCOMPARE(text, root->text(0));
+ QCOMPARE(cellText(1, 0), users->text(0));
+ QCOMPARE(cellText(1, 1), users->text(1));
+}
+
+QTEST_MAIN(tst_QAccessibilityMac)
+#include "tst_qaccessibilitymac.moc"
diff --git a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.h b/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.h
deleted file mode 100644
index 58ea2d02b0..0000000000
--- a/tests/auto/other/qaccessibilitymac/tst_qaccessibilitymac_helpers.h
+++ /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 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/QString>
-#include <QtCore/QPair>
-#include <QtWidgets/QWidget>
-#include <QtWidgets/QCheckBox>
-
-#pragma once // Yeah, it's deprecated in general, but it's standard practice for Mac OS X.
-
-QT_USE_NAMESPACE
-
-bool testLineEdit();
-bool testHierarchy(QWidget *w);
-bool singleWidget();
-bool notifications(QWidget *w);
-bool testCheckBox(QCheckBox *ckBox);
diff --git a/tests/auto/other/qcomplextext/CMakeLists.txt b/tests/auto/other/qcomplextext/CMakeLists.txt
index 3a86e9096b..74996c7ad7 100644
--- a/tests/auto/other/qcomplextext/CMakeLists.txt
+++ b/tests/auto/other/qcomplextext/CMakeLists.txt
@@ -1,16 +1,23 @@
-# Generated from qcomplextext.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcomplextext Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcomplextext LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "data")
qt_internal_add_test(tst_qcomplextext
SOURCES
tst_qcomplextext.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/other/qcomplextext/bidireorderstring.h b/tests/auto/other/qcomplextext/bidireorderstring.h
index b537bf45e4..831fd34883 100644
--- a/tests/auto/other/qcomplextext/bidireorderstring.h
+++ b/tests/auto/other/qcomplextext/bidireorderstring.h
@@ -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
struct LV {
const char *name;
const char *logical;
diff --git a/tests/auto/other/qcomplextext/tst_qcomplextext.cpp b/tests/auto/other/qcomplextext/tst_qcomplextext.cpp
index 453dc23bcd..b8014126ed 100644
--- a/tests/auto/other/qcomplextext/tst_qcomplextext.cpp
+++ b/tests/auto/other/qcomplextext/tst_qcomplextext.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 <QTest>
#include <QtGui/QtGui>
@@ -109,7 +84,7 @@ void tst_QComplexText::bidiReorderString()
if (si.analysis.bidiLevel % 2) {
// reverse sub
QChar *a = sub.data();
- QChar *b = a + sub.length() - 1;
+ QChar *b = a + sub.size() - 1;
while (a < b) {
QChar tmp = *a;
*a = *b;
@@ -118,7 +93,7 @@ void tst_QComplexText::bidiReorderString()
--b;
}
a = (QChar *)sub.unicode();
- b = a + sub.length();
+ b = a + sub.size();
while (a<b) {
*a = a->mirroredChar();
++a;
@@ -340,7 +315,7 @@ static void testBidiString(const QString &data, int paragraphDirection,
if (si.analysis.bidiLevel % 2) {
// reverse sub
QChar *a = sub.data();
- QChar *b = a + sub.length() - 1;
+ QChar *b = a + sub.size() - 1;
while (a < b) {
QChar tmp = *a;
*a = *b;
@@ -349,7 +324,7 @@ static void testBidiString(const QString &data, int paragraphDirection,
--b;
}
a = (QChar *)sub.unicode();
- b = a + sub.length();
+ b = a + sub.size();
// while (a<b) {
// *a = a->mirroredChar();
// ++a;
@@ -372,9 +347,7 @@ void tst_QComplexText::bidiCharacterTest()
{
QString testFile = QFINDTESTDATA("data/BidiCharacterTest.txt");
QFile f(testFile);
- QVERIFY(f.exists());
-
- f.open(QIODevice::ReadOnly);
+ QVERIFY(f.open(QIODevice::ReadOnly));
int linenum = 0;
while (!f.atEnd()) {
@@ -466,9 +439,7 @@ void tst_QComplexText::bidiTest()
{
QString testFile = QFINDTESTDATA("data/BidiTest.txt");
QFile f(testFile);
- QVERIFY(f.exists());
-
- f.open(QIODevice::ReadOnly);
+ QVERIFY(f.open(QIODevice::ReadOnly));
int linenum = 0;
QList<int> resolvedLevels;
diff --git a/tests/auto/other/qfocusevent/CMakeLists.txt b/tests/auto/other/qfocusevent/CMakeLists.txt
index d7f8d5982a..61682af4e7 100644
--- a/tests/auto/other/qfocusevent/CMakeLists.txt
+++ b/tests/auto/other/qfocusevent/CMakeLists.txt
@@ -1,14 +1,22 @@
-# Generated from qfocusevent.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfocusevent Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfocusevent LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfocusevent
SOURCES
tst_qfocusevent.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/other/qfocusevent/tst_qfocusevent.cpp b/tests/auto/other/qfocusevent/tst_qfocusevent.cpp
index 92ab429d4a..cca5994673 100644
--- a/tests/auto/other/qfocusevent/tst_qfocusevent.cpp
+++ b/tests/auto/other/qfocusevent/tst_qfocusevent.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 <QTest>
@@ -41,6 +16,8 @@
#include <qpa/qplatformintegration.h>
#include <private/qguiapplication_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
QT_FORWARD_DECLARE_CLASS(QWidget)
class FocusLineEdit : public QLineEdit
@@ -137,7 +114,7 @@ void tst_QFocusEvent::initWidget()
{
// On X11 we have to ensure the event was processed before doing any checking, on Windows
// this is processed straight away.
- QApplication::setActiveWindow(testFocusWidget);
+ QApplicationPrivate::setActiveWindow(testFocusWidget);
childFocusWidgetOne->setFocus(); // The first lineedit should have focus
QVERIFY(QTest::qWaitForWindowActive(testFocusWidget));
QTRY_VERIFY(childFocusWidgetOne->hasFocus());
@@ -335,7 +312,7 @@ void tst_QFocusEvent::checkReason_ActiveWindow()
QVERIFY(QTest::qWaitForWindowExposed(d));
d->activateWindow(); // ### CDE
- QApplication::setActiveWindow(d);
+ QApplicationPrivate::setActiveWindow(d);
QVERIFY(QTest::qWaitForWindowActive(d));
QTRY_VERIFY(childFocusWidgetOne->focusOutEventRecieved);
@@ -357,9 +334,10 @@ void tst_QFocusEvent::checkReason_ActiveWindow()
d->hide();
if (!QGuiApplication::platformName().compare(QLatin1String("offscreen"), Qt::CaseInsensitive)
- || !QGuiApplication::platformName().compare(QLatin1String("minimal"), Qt::CaseInsensitive)) {
+ || !QGuiApplication::platformName().compare(QLatin1String("minimal"), Qt::CaseInsensitive)
+ || !QGuiApplication::platformName().compare(QLatin1String("cocoa"), Qt::CaseInsensitive)) {
// Activate window of testFocusWidget, focus in that window goes to childFocusWidgetOne
- qWarning("Platforms offscreen and minimal require explicit activateWindow()");
+ qWarning("Platforms offscreen, minimal and macOS require explicit activateWindow()");
testFocusWidget->activateWindow();
}
diff --git a/tests/auto/other/qnetworkaccessmanager_and_qprogressdialog/CMakeLists.txt b/tests/auto/other/qnetworkaccessmanager_and_qprogressdialog/CMakeLists.txt
index e4041de233..313d9464a3 100644
--- a/tests/auto/other/qnetworkaccessmanager_and_qprogressdialog/CMakeLists.txt
+++ b/tests/auto/other/qnetworkaccessmanager_and_qprogressdialog/CMakeLists.txt
@@ -1,14 +1,22 @@
-# Generated from qnetworkaccessmanager_and_qprogressdialog.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qnetworkaccessmanager_and_qprogressdialog Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qnetworkaccessmanager_and_qprogressdialog LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qnetworkaccessmanager_and_qprogressdialog
SOURCES
tst_qnetworkaccessmanager_and_qprogressdialog.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Network
Qt::Widgets
+ QT_TEST_SERVER_LIST "apache2"
)
diff --git a/tests/auto/other/qnetworkaccessmanager_and_qprogressdialog/tst_qnetworkaccessmanager_and_qprogressdialog.cpp b/tests/auto/other/qnetworkaccessmanager_and_qprogressdialog/tst_qnetworkaccessmanager_and_qprogressdialog.cpp
index a321900df2..c665068f72 100644
--- a/tests/auto/other/qnetworkaccessmanager_and_qprogressdialog/tst_qnetworkaccessmanager_and_qprogressdialog.cpp
+++ b/tests/auto/other/qnetworkaccessmanager_and_qprogressdialog/tst_qnetworkaccessmanager_and_qprogressdialog.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 <QTest>
@@ -68,13 +43,13 @@ public:
public slots:
void go()
{
- QNetworkRequest request(QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/bigfile"));
+ QNetworkRequest request(QUrl("http://" + QtNetworkSettings::httpServerName() + "/qtest/bigfile"));
if (zeroCopy)
request.setAttribute(QNetworkRequest::MaximumDownloadBufferSizeAttribute, 10*1024*1024);
QNetworkReply *reply = netmanager.get(
QNetworkRequest(
- QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/bigfile")
+ QUrl("http://" + QtNetworkSettings::httpServerName() + "/qtest/bigfile")
));
connect(reply, SIGNAL(downloadProgress(qint64,qint64)),
this, SLOT(dataReadProgress(qint64,qint64)));
@@ -117,8 +92,13 @@ tst_QNetworkAccessManager_And_QProgressDialog::tst_QNetworkAccessManager_And_QPr
void tst_QNetworkAccessManager_And_QProgressDialog::initTestCase()
{
+#ifdef QT_TEST_SERVER
+ if (!QtNetworkSettings::verifyConnection(QtNetworkSettings::httpServerName(), 80))
+ QSKIP("No network test server available");
+#else
if (!QtNetworkSettings::verifyTestNetworkSettings())
QSKIP("No network test server available");
+#endif
}
void tst_QNetworkAccessManager_And_QProgressDialog::downloadCheck_data()
diff --git a/tests/auto/other/qobjectrace/CMakeLists.txt b/tests/auto/other/qobjectrace/CMakeLists.txt
index 7a2be39d81..6516c9ee73 100644
--- a/tests/auto/other/qobjectrace/CMakeLists.txt
+++ b/tests/auto/other/qobjectrace/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qobjectrace.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qobjectrace Test:
#####################################################################
-qt_internal_add_test(qobjectrace
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qobjectrace LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qobjectrace
SOURCES
tst_qobjectrace.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::TestPrivate
)
diff --git a/tests/auto/other/qobjectrace/tst_qobjectrace.cpp b/tests/auto/other/qobjectrace/tst_qobjectrace.cpp
index 093b4d2476..af6634f253 100644
--- a/tests/auto/other/qobjectrace/tst_qobjectrace.cpp
+++ b/tests/auto/other/qobjectrace/tst_qobjectrace.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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore>
@@ -32,6 +7,8 @@
#include <QtTest/private/qemulationdetector_p.h>
+#include <optional>
+
enum { OneMinute = 60 * 1000,
TwoMinutes = OneMinute * 2 };
@@ -44,12 +21,20 @@ struct Functor
class tst_QObjectRace: public QObject
{
Q_OBJECT
+public:
+ tst_QObjectRace()
+ : ThreadCount(QThread::idealThreadCount())
+ {}
+
private slots:
void moveToThreadRace();
void destroyRace();
void blockingQueuedDestroyRace();
void disconnectRace();
void disconnectRace2();
+
+private:
+ const int ThreadCount;
};
class RaceObject : public QObject
@@ -133,8 +118,7 @@ void tst_QObjectRace::moveToThreadRace()
{
RaceObject *object = new RaceObject;
- enum { ThreadCount = 6 };
- RaceThread *threads[ThreadCount];
+ QVarLengthArray<RaceThread *, 16> threads(ThreadCount);
for (int i = 0; i < ThreadCount; ++i) {
threads[i] = new RaceThread;
threads[i]->setObject(object);
@@ -264,10 +248,10 @@ void tst_QObjectRace::destroyRace()
if (QTestPrivate::isRunningArmOnX86())
QSKIP("Test is too slow to run on emulator");
- enum { ThreadCount = 10, ObjectCountPerThread = 2777,
- ObjectCount = ThreadCount * ObjectCountPerThread };
+ constexpr int ObjectCountPerThread = 2777;
+ const int ObjectCount = ThreadCount * ObjectCountPerThread;
- MyObject *objects[ObjectCount];
+ QVarLengthArray<MyObject *, ObjectCountPerThread * 10> objects(ObjectCount);
for (int i = 0; i < ObjectCount; ++i)
objects[i] = new MyObject;
@@ -284,10 +268,10 @@ void tst_QObjectRace::destroyRace()
objects[((i+5)*79) % ObjectCount], Functor() );
}
- DestroyThread *threads[ThreadCount];
+ QVarLengthArray<DestroyThread *, 16> threads(ThreadCount);
for (int i = 0; i < ThreadCount; ++i) {
threads[i] = new DestroyThread;
- threads[i]->setObjects(objects + i*ObjectCountPerThread, ObjectCountPerThread);
+ threads[i]->setObjects(objects.data() + i*ObjectCountPerThread, ObjectCountPerThread);
}
for (int i = 0; i < ThreadCount; ++i)
@@ -325,8 +309,7 @@ public slots:
break;
}
- Q_UNREACHABLE();
- return false;
+ Q_UNREACHABLE_RETURN(false);
}
private:
@@ -335,9 +318,6 @@ private:
void tst_QObjectRace::blockingQueuedDestroyRace()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
enum { MinIterations = 100, MinTime = 3000, WaitTime = 25 };
BlockingQueuedDestroyRaceObject sender;
@@ -347,17 +327,13 @@ void tst_QObjectRace::blockingQueuedDestroyRace()
while (iteration++ < MinIterations || !timer.hasExpired()) {
// Manually allocate some storage, and create a receiver in there
- std::aligned_storage<
- sizeof(BlockingQueuedDestroyRaceObject),
- alignof(BlockingQueuedDestroyRaceObject)
- >::type storage;
+ std::optional<BlockingQueuedDestroyRaceObject> receiver;
- auto *receiver = reinterpret_cast<BlockingQueuedDestroyRaceObject *>(&storage);
- new (receiver) BlockingQueuedDestroyRaceObject(BlockingQueuedDestroyRaceObject::Behavior::Normal);
+ receiver.emplace(BlockingQueuedDestroyRaceObject::Behavior::Normal);
// Connect it to the sender via BlockingQueuedConnection
QVERIFY(connect(&sender, &BlockingQueuedDestroyRaceObject::aSignal,
- receiver, &BlockingQueuedDestroyRaceObject::aSlot,
+ &*receiver, &BlockingQueuedDestroyRaceObject::aSlot,
Qt::BlockingQueuedConnection));
const auto emitUntilDestroyed = [&sender] {
@@ -379,17 +355,14 @@ void tst_QObjectRace::blockingQueuedDestroyRace()
// - the metacall event to be posted to a destroyed object;
// - the metacall event to be posted to the wrong object.
// In both cases we hope to catch the race by crashing.
- receiver->~BlockingQueuedDestroyRaceObject();
- new (receiver) BlockingQueuedDestroyRaceObject(BlockingQueuedDestroyRaceObject::Behavior::Crash);
+ receiver.reset();
+ receiver.emplace(BlockingQueuedDestroyRaceObject::Behavior::Crash);
// Flush events
QTest::qWait(0);
thread->wait();
-
- receiver->~BlockingQueuedDestroyRaceObject();
}
-#endif
}
static QAtomicInteger<unsigned> countedStructObjectsCount;
@@ -506,7 +479,7 @@ public:
void tst_QObjectRace::disconnectRace()
{
- enum { ThreadCount = 20, TimeLimit = 3000 };
+ enum { TimeLimit = 3000 };
QCOMPARE(countedStructObjectsCount.loadRelaxed(), 0u);
@@ -516,7 +489,7 @@ void tst_QObjectRace::disconnectRace()
senderThread->start();
sender->moveToThread(senderThread.data());
- DisconnectRaceThread *threads[ThreadCount];
+ QVarLengthArray<DisconnectRaceThread *, 16> threads(ThreadCount);
for (int i = 0; i < ThreadCount; ++i) {
threads[i] = new DisconnectRaceThread(sender.data(), !(i % 10));
threads[i]->start();
@@ -542,7 +515,7 @@ void tst_QObjectRace::disconnectRace()
senderThread->start();
sender->moveToThread(senderThread.data());
- DeleteReceiverRaceReceiverThread *threads[ThreadCount];
+ QVarLengthArray<DeleteReceiverRaceReceiverThread *, 16> threads(ThreadCount);
for (int i = 0; i < ThreadCount; ++i) {
threads[i] = new DeleteReceiverRaceReceiverThread(sender.data());
threads[i]->start();
diff --git a/tests/auto/other/qprocess_and_guieventloop/CMakeLists.txt b/tests/auto/other/qprocess_and_guieventloop/CMakeLists.txt
index 126feeeb2d..3383677009 100644
--- a/tests/auto/other/qprocess_and_guieventloop/CMakeLists.txt
+++ b/tests/auto/other/qprocess_and_guieventloop/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qprocess_and_guieventloop.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qprocess_and_guieventloop Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qprocess_and_guieventloop LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qprocess_and_guieventloop
SOURCES
tst_qprocess_and_guieventloop.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
add_subdirectory(write-read-write)
+add_dependencies(tst_qprocess_and_guieventloop write-read-write)
diff --git a/tests/auto/other/qprocess_and_guieventloop/tst_qprocess_and_guieventloop.cpp b/tests/auto/other/qprocess_and_guieventloop/tst_qprocess_and_guieventloop.cpp
index a21bb9a005..b5b8c4cfc3 100644
--- a/tests/auto/other/qprocess_and_guieventloop/tst_qprocess_and_guieventloop.cpp
+++ b/tests/auto/other/qprocess_and_guieventloop/tst_qprocess_and_guieventloop.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui/QGuiApplication>
#include <QTest>
@@ -60,20 +35,20 @@ void tst_QProcess_and_GuiEventLoop::waitForAndEventLoop()
qApp->processEvents(QEventLoop::AllEvents, 100);
// we mustn't have read anything in the event loop
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// ensure the process hasn't died
QVERIFY(!process.waitForFinished(250));
// we mustn't have read anything during waitForFinished either
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// release the child for the second write
process.write("\n");
QVERIFY(process.waitForFinished(5000));
QCOMPARE(int(process.exitStatus()), int(QProcess::NormalExit));
QCOMPARE(process.exitCode(), 0);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(process.readAll().trimmed(), msg);
#endif
}
diff --git a/tests/auto/other/qprocess_and_guieventloop/write-read-write/CMakeLists.txt b/tests/auto/other/qprocess_and_guieventloop/write-read-write/CMakeLists.txt
index b395ebf1a4..2bc1ebb7b0 100644
--- a/tests/auto/other/qprocess_and_guieventloop/write-read-write/CMakeLists.txt
+++ b/tests/auto/other/qprocess_and_guieventloop/write-read-write/CMakeLists.txt
@@ -1,5 +1,12 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## write-read-write Binary:
#####################################################################
-add_executable(write-read-write main.cpp)
+qt_internal_add_executable(write-read-write
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
+ SOURCES
+ main.cpp
+)
diff --git a/tests/auto/other/qprocess_and_guieventloop/write-read-write/main.cpp b/tests/auto/other/qprocess_and_guieventloop/write-read-write/main.cpp
index 5e75f7db3c..126c85dfd7 100644
--- a/tests/auto/other/qprocess_and_guieventloop/write-read-write/main.cpp
+++ b/tests/auto/other/qprocess_and_guieventloop/write-read-write/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <stdio.h>
diff --git a/tests/auto/other/qsharedpointer_and_qwidget/CMakeLists.txt b/tests/auto/other/qsharedpointer_and_qwidget/CMakeLists.txt
index 448d0fd313..a405f54151 100644
--- a/tests/auto/other/qsharedpointer_and_qwidget/CMakeLists.txt
+++ b/tests/auto/other/qsharedpointer_and_qwidget/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsharedpointer_and_qwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsharedpointer_and_qwidget Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsharedpointer_and_qwidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsharedpointer_and_qwidget
SOURCES
tst_qsharedpointer_and_qwidget.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/other/qsharedpointer_and_qwidget/tst_qsharedpointer_and_qwidget.cpp b/tests/auto/other/qsharedpointer_and_qwidget/tst_qsharedpointer_and_qwidget.cpp
index 38fc547335..5fa9d8740a 100644
--- a/tests/auto/other/qsharedpointer_and_qwidget/tst_qsharedpointer_and_qwidget.cpp
+++ b/tests/auto/other/qsharedpointer_and_qwidget/tst_qsharedpointer_and_qwidget.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 <QtWidgets/QWidget>
#include <QtWidgets/QPushButton>
diff --git a/tests/auto/other/qvariant_common/tst_qvariant_common.h b/tests/auto/other/qvariant_common/tst_qvariant_common.h
index 70a44ad10f..553c396e47 100644
--- a/tests/auto/other/qvariant_common/tst_qvariant_common.h
+++ b/tests/auto/other/qvariant_common/tst_qvariant_common.h
@@ -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
#ifndef TST_QVARIANT_COMMON
#define TST_QVARIANT_COMMON
diff --git a/tests/auto/other/sessionmanagement_macos/tst_sessionmanagement_macos.mm b/tests/auto/other/sessionmanagement_macos/tst_sessionmanagement_macos.mm
index eac31444c7..02a3464ec7 100644
--- a/tests/auto/other/sessionmanagement_macos/tst_sessionmanagement_macos.mm
+++ b/tests/auto/other/sessionmanagement_macos/tst_sessionmanagement_macos.mm
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 Samuel Gaist <samuel.gaist@idiap.ch>
-** 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) 2019 Samuel Gaist <samuel.gaist@idiap.ch>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/other/toolsupport/BLACKLIST b/tests/auto/other/toolsupport/BLACKLIST
deleted file mode 100644
index 6a4d5aece5..0000000000
--- a/tests/auto/other/toolsupport/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-# QTBUG-87396
-[offsets]
-android
diff --git a/tests/auto/other/toolsupport/CMakeLists.txt b/tests/auto/other/toolsupport/CMakeLists.txt
index 686d702a23..5b2cc0c0e2 100644
--- a/tests/auto/other/toolsupport/CMakeLists.txt
+++ b/tests/auto/other/toolsupport/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from toolsupport.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_toolsupport Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_toolsupport LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_toolsupport
SOURCES
tst_toolsupport.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
diff --git a/tests/auto/other/toolsupport/tst_toolsupport.cpp b/tests/auto/other/toolsupport/tst_toolsupport.cpp
index 05ed44cc16..965b55977c 100644
--- a/tests/auto/other/toolsupport/tst_toolsupport.cpp
+++ b/tests/auto/other/toolsupport/tst_toolsupport.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Contact: http://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) 2015 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -63,6 +38,7 @@ template <typename T, typename K>
size_t pmm_to_offsetof(T K:: *pmm)
{
#ifdef Q_CC_MSVC
+
// Even on 64 bit MSVC uses 4 byte offsets.
quint32 ret;
#else
@@ -139,10 +115,10 @@ void tst_toolsupport::offsets_data()
QTestData &data = QTest::newRow("QFilePrivate::fileName")
<< pmm_to_offsetof(&QFilePrivate::fileName);
// Please heed the comment at the top of this file when changing one of these lines:
-#ifdef Q_PROCESSOR_X86
+#ifdef Q_PROCESSOR_X86_32
// x86 32-bit has weird alignment rules. Refer to QtPrivate::AlignOf in
// qglobal.h for more details.
- data << 264 << 424;
+ data << 264 << -1;
#else
data << 300 << 424;
#endif
diff --git a/tests/auto/other/xkbkeyboard/CMakeLists.txt b/tests/auto/other/xkbkeyboard/CMakeLists.txt
index 206f128cf8..06e471c68b 100644
--- a/tests/auto/other/xkbkeyboard/CMakeLists.txt
+++ b/tests/auto/other/xkbkeyboard/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from xkbkeyboard.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_xkbkeyboard Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_xkbkeyboard LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_xkbkeyboard
SOURCES
tst_xkbkeyboard.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::GuiPrivate
)
diff --git a/tests/auto/other/xkbkeyboard/tst_xkbkeyboard.cpp b/tests/auto/other/xkbkeyboard/tst_xkbkeyboard.cpp
index 6a3fe73829..323693bb84 100644
--- a/tests/auto/other/xkbkeyboard/tst_xkbkeyboard.cpp
+++ b/tests/auto/other/xkbkeyboard/tst_xkbkeyboard.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore>
#include <QtGui>
diff --git a/tests/auto/printsupport/CMakeLists.txt b/tests/auto/printsupport/CMakeLists.txt
index 053b66da0b..2608aa4809 100644
--- a/tests/auto/printsupport/CMakeLists.txt
+++ b/tests/auto/printsupport/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from printsupport.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(NOT QT_FEATURE_printer OR NOT QT_FEATURE_printdialog)
return()
diff --git a/tests/auto/printsupport/dialogs/CMakeLists.txt b/tests/auto/printsupport/dialogs/CMakeLists.txt
index 548ddc8577..b9baf14e39 100644
--- a/tests/auto/printsupport/dialogs/CMakeLists.txt
+++ b/tests/auto/printsupport/dialogs/CMakeLists.txt
@@ -1,3 +1,4 @@
-# Generated from dialogs.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qabstractprintdialog)
diff --git a/tests/auto/printsupport/dialogs/qabstractprintdialog/CMakeLists.txt b/tests/auto/printsupport/dialogs/qabstractprintdialog/CMakeLists.txt
index 9bc1b3f6b0..64a7792d77 100644
--- a/tests/auto/printsupport/dialogs/qabstractprintdialog/CMakeLists.txt
+++ b/tests/auto/printsupport/dialogs/qabstractprintdialog/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qabstractprintdialog.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractprintdialog Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractprintdialog LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractprintdialog
SOURCES
tst_qabstractprintdialog.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::PrintSupport
Qt::Widgets
diff --git a/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp b/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp
index a52d7fbaf3..c3785efe18 100644
--- a/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.cpp
+++ b/tests/auto/printsupport/dialogs/qabstractprintdialog/tst_qabstractprintdialog.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 <QTest>
@@ -49,6 +24,8 @@ private slots:
void getSetCheck();
void setMinMax();
void setFromTo();
+
+ void hideNativeByDestruction();
#endif
};
@@ -160,6 +137,37 @@ void tst_QAbstractPrintDialog::setFromTo()
QCOMPARE(obj1.maxPage(), 50);
}
+void tst_QAbstractPrintDialog::hideNativeByDestruction()
+{
+#ifdef Q_OS_WINDOWS
+ QSKIP("This test fails on windows, the QPrintDialog::setVisible implementation blocks");
+#endif
+
+ QWidget window;
+ QWidget *child = new QWidget(&window);
+ QPointer<QPrintDialog> dialog = new QPrintDialog(child);
+ // Make it application modal so that we don't end up with a sheet on macOS
+ dialog->setWindowModality(Qt::ApplicationModal);
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+ dialog->open();
+
+ // We test that the dialog opens and closes by watching the activation of the
+ // transient parent window. If it doesn't deactivate, then we have to skip.
+ const auto windowActive = [&window]{ return window.isActiveWindow(); };
+ const auto windowInactive = [&window]{ return !window.isActiveWindow(); };
+ if (!QTest::qWaitFor(windowInactive, 2000))
+ QSKIP("Dialog didn't activate");
+
+ // This should destroy the dialog and close the native window
+ child->deleteLater();
+ QTRY_VERIFY(!dialog);
+ // If the native window is still open, then the transient parent can't become
+ // active
+ window.activateWindow();
+ QVERIFY(QTest::qWaitFor(windowActive));
+}
+
#endif
QTEST_MAIN(tst_QAbstractPrintDialog)
diff --git a/tests/auto/printsupport/kernel/CMakeLists.txt b/tests/auto/printsupport/kernel/CMakeLists.txt
index 8154d5e868..f633590f62 100644
--- a/tests/auto/printsupport/kernel/CMakeLists.txt
+++ b/tests/auto/printsupport/kernel/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from kernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qprintdevice)
add_subdirectory(qprinter)
diff --git a/tests/auto/printsupport/kernel/qprintdevice/CMakeLists.txt b/tests/auto/printsupport/kernel/qprintdevice/CMakeLists.txt
index 8cdd82068e..3df4d6e135 100644
--- a/tests/auto/printsupport/kernel/qprintdevice/CMakeLists.txt
+++ b/tests/auto/printsupport/kernel/qprintdevice/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qprintdevice.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qprintdevice Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qprintdevice LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qprintdevice
SOURCES
tst_qprintdevice.cpp
DEFINES
QT_USE_USING_NAMESPACE
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::PrintSupportPrivate
)
diff --git a/tests/auto/printsupport/kernel/qprintdevice/tst_qprintdevice.cpp b/tests/auto/printsupport/kernel/qprintdevice/tst_qprintdevice.cpp
index e079659d3a..81b50c1084 100644
--- a/tests/auto/printsupport/kernel/qprintdevice/tst_qprintdevice.cpp
+++ b/tests/auto/printsupport/kernel/qprintdevice/tst_qprintdevice.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 John Layt <jlayt@kde.org>
-** 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) 2014 John Layt <jlayt@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QMimeType>
@@ -50,16 +25,17 @@ void tst_QPrintDevice::basics()
QSKIP("Could not load platform plugin");
QString defaultId = ps->defaultPrintDeviceId();
+ const QStringList availableIds = ps->availablePrintDeviceIds();
if (defaultId.isEmpty()) {
qDebug() << "No default printer found";
} else {
- QVERIFY(ps->availablePrintDeviceIds().contains(defaultId));
+ QVERIFY(availableIds.contains(defaultId));
}
- qDebug() << "Available Printer IDs :" << ps->availablePrintDeviceIds();
+ qDebug() << "Available Printer IDs :" << availableIds;
// Just exercise the api for now as we don't know what is installed
- foreach (const QString id, ps->availablePrintDeviceIds()) {
+ for (const QString &id : availableIds) {
QPrintDevice printDevice = ps->createPrintDevice(id);
const char quote = id == defaultId ? '*' : '"';
qDebug().noquote().nospace() << "\nCreated printer " << quote << id
diff --git a/tests/auto/printsupport/kernel/qprinter/CMakeLists.txt b/tests/auto/printsupport/kernel/qprinter/CMakeLists.txt
index 2fffa945a7..c861a122d9 100644
--- a/tests/auto/printsupport/kernel/qprinter/CMakeLists.txt
+++ b/tests/auto/printsupport/kernel/qprinter/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qprinter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qprinter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qprinter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qprinter
SOURCES
tst_qprinter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::PrintSupport
Qt::Widgets
diff --git a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp
index 3dffef3b3c..d2ccf7b990 100644
--- a/tests/auto/printsupport/kernel/qprinter/tst_qprinter.cpp
+++ b/tests/auto/printsupport/kernel/qprinter/tst_qprinter.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 <QTest>
@@ -928,7 +903,8 @@ void tst_QPrinter::duplex()
QPrinter::DuplexMode expected = printerInfo.defaultDuplexMode();
QCOMPARE(native.duplex(), expected);
// Test set/get (skipping Auto as that will return something different)
- foreach (QPrinter::DuplexMode mode, printerInfo.supportedDuplexModes()) {
+ const auto supported = printerInfo.supportedDuplexModes();
+ for (QPrinter::DuplexMode mode : supported) {
if (mode != expected && mode != QPrinter::DuplexAuto) {
expected = mode;
break;
@@ -1218,7 +1194,8 @@ void tst_QPrinter::paperSource()
QPrinter::PaperSource expected = QPrinter::Manual;
#ifdef Q_OS_WIN
expected = QPrinter::Auto;
- foreach (QPrinter::PaperSource supported, native.supportedPaperSources()) {
+ const auto sources = native.supportedPaperSources();
+ for (QPrinter::PaperSource supported : sources) {
if (supported != QPrinter::Auto) {
expected = supported;
break;
@@ -1340,7 +1317,8 @@ void tst_QPrinter::printerName()
// Test set/get
QString expected = QPrinterInfo::defaultPrinter().printerName();
- foreach (const QPrinterInfo &available, QPrinterInfo::availablePrinters()) {
+ const auto allAvailable = QPrinterInfo::availablePrinters();
+ for (const QPrinterInfo &available : allAvailable) {
if (available.printerName() != expected) {
expected = available.printerName();
break;
@@ -1433,7 +1411,7 @@ void tst_QPrinter::resolution()
#ifdef Q_OS_MAC
// QMacPrintEngine chooses the closest supported resolution.
const QList<int> all_supported = native.supportedResolutions();
- foreach (int supported, all_supported) {
+ for (int supported : all_supported) {
// Test setting a supported resolution
int requested = supported;
native.setResolution(requested);
@@ -1727,7 +1705,7 @@ void tst_QPrinter::reusePageMetrics()
QPrinter defaultP;
QPrinterInfo info(defaultP);
QString otherPrinterName;
- for (QPrinterInfo i : qAsConst(availablePrinters)) {
+ for (QPrinterInfo i : std::as_const(availablePrinters)) {
if (i.printerName() != defaultP.printerName()) {
otherPrinterName = i.printerName();
break;
@@ -1737,9 +1715,9 @@ void tst_QPrinter::reusePageMetrics()
QList<QPageSize> defaultPageSizes = info.supportedPageSizes();
QList<QPageSize> otherPageSizes = QPrinterInfo(otherP).supportedPageSizes();
QPageSize unavailableSizeToSet;
- for (QPageSize s : qAsConst(defaultPageSizes)) {
+ for (QPageSize s : std::as_const(defaultPageSizes)) {
bool found = false;
- for (QPageSize os : qAsConst(otherPageSizes)) {
+ for (QPageSize os : std::as_const(otherPageSizes)) {
if (os.isEquivalentTo(s)) {
found = true;
break;
diff --git a/tests/auto/printsupport/kernel/qprinterinfo/CMakeLists.txt b/tests/auto/printsupport/kernel/qprinterinfo/CMakeLists.txt
index 18a093c4e3..84d0de4d5e 100644
--- a/tests/auto/printsupport/kernel/qprinterinfo/CMakeLists.txt
+++ b/tests/auto/printsupport/kernel/qprinterinfo/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qprinterinfo.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qprinterinfo Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qprinterinfo LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qprinterinfo
SOURCES
tst_qprinterinfo.cpp
DEFINES
QT_USE_USING_NAMESPACE
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::PrintSupport
)
diff --git a/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp b/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp
index ebe0990164..110f2996fd 100644
--- a/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.cpp
+++ b/tests/auto/printsupport/kernel/qprinterinfo/tst_qprinterinfo.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 <QTest>
#include <QtGlobal>
@@ -33,7 +8,7 @@
#include <algorithm>
-#if defined(Q_OS_UNIX) && !defined(Q_OS_INTEGRITY)
+#if defined(Q_OS_UNIX) && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_VXWORKS)
# include <unistd.h>
# include <sys/types.h>
# include <sys/wait.h>
@@ -74,6 +49,10 @@ private:
#ifdef QT_NO_PRINTER
void tst_QPrinterInfo::initTestCase()
{
+#ifdef Q_OS_ANDROID
+ if (QNativeInterface::QAndroidApplication::sdkVersion() == 33)
+ QSKIP("Is flaky on Android 13 / RHEL 8.6 and 8.8 (QTQAINFRA-5606)");
+#endif
QSKIP("This test requires printing support");
}
@@ -119,7 +98,7 @@ QStringList tst_QPrinterInfo::getPrintersFromSystem()
QString output = getOutputFromCommand({ "lpstat", "-e" });
QStringList list = output.split(QChar::fromLatin1('\n'));
- QRegularExpression reg("^([.a-zA-Z0-9-_@]+)");
+ QRegularExpression reg("^([.a-zA-Z0-9-_@/]+)");
QRegularExpressionMatch match;
for (int c = 0; c < list.size(); ++c) {
match = reg.match(list[c]);
@@ -199,7 +178,7 @@ QString tst_QPrinterInfo::getOutputFromCommand(const QStringList &command)
{
// Forces the ouptut from the command to be in English
const QByteArray origSoftwareEnv = qgetenv("SOFTWARE");
- qputenv("SOFTWARE", QByteArray());
+ qputenv("SOFTWARE", nullptr);
QString output = getOutputFromCommandInternal(command);
qputenv("SOFTWARE", origSoftwareEnv);
return output;
@@ -361,11 +340,11 @@ void tst_QPrinterInfo::testAssignment()
void tst_QPrinterInfo::namedPrinter()
{
- QList<QPrinterInfo> printers = QPrinterInfo::availablePrinters();
+ const QList<QPrinterInfo> printers = QPrinterInfo::availablePrinters();
QStringList printerNames;
- foreach (const QPrinterInfo &pi, printers) {
+ for (const QPrinterInfo &pi : printers) {
QPrinterInfo pi2 = QPrinterInfo::printerInfo(pi.printerName());
QCOMPARE(pi2.printerName(), pi.printerName());
QCOMPARE(pi2.description(), pi.description());
diff --git a/tests/auto/shared/highdpi.h b/tests/auto/shared/highdpi.h
index f0c34bea25..8aa4c8c3d7 100644
--- a/tests/auto/shared/highdpi.h
+++ b/tests/auto/shared/highdpi.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef HIGHDPI_H
#define HIGHDPI_H
diff --git a/tests/auto/shared/platformclipboard.h b/tests/auto/shared/platformclipboard.h
index 15801f6add..1e90f01977 100644
--- a/tests/auto/shared/platformclipboard.h
+++ b/tests/auto/shared/platformclipboard.h
@@ -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
#ifndef PLATFORMCLIPBOARD_H
#define PLATFORMCLIPBOARD_H
diff --git a/tests/auto/shared/platforminputcontext.h b/tests/auto/shared/platforminputcontext.h
index be05296e2b..31fa51441d 100644
--- a/tests/auto/shared/platforminputcontext.h
+++ b/tests/auto/shared/platforminputcontext.h
@@ -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 <qpa/qplatforminputcontext.h>
@@ -42,7 +17,6 @@ public:
m_lastQueries(Qt::ImhNone),
m_action(QInputMethod::Click),
m_cursorPosition(0),
- m_lastEventType(QEvent::None),
m_setFocusObjectCallCount(0)
{}
@@ -76,10 +50,6 @@ public:
m_action = action;
m_cursorPosition = cursorPosition;
}
- virtual bool filterEvent(const QEvent *event) override
- {
- m_lastEventType = event->type(); return false;
- }
virtual void showInputPanel() override
{
m_visible = true;
@@ -119,7 +89,6 @@ public:
Qt::InputMethodQueries m_lastQueries;
QInputMethod::Action m_action;
int m_cursorPosition;
- int m_lastEventType;
QRectF m_keyboardRect;
int m_setFocusObjectCallCount;
};
diff --git a/tests/auto/shared/resources/test.ttf b/tests/auto/shared/resources/test.ttf
index b2bb6cd036..8b56c046d4 100644
--- a/tests/auto/shared/resources/test.ttf
+++ b/tests/auto/shared/resources/test.ttf
Binary files differ
diff --git a/tests/auto/shared/resources/testfont_variable.ttf b/tests/auto/shared/resources/testfont_variable.ttf
new file mode 100644
index 0000000000..b3d7be6180
--- /dev/null
+++ b/tests/auto/shared/resources/testfont_variable.ttf
Binary files differ
diff --git a/tests/auto/sql/CMakeLists.txt b/tests/auto/sql/CMakeLists.txt
index 415d7598ae..94d7644d5d 100644
--- a/tests/auto/sql/CMakeLists.txt
+++ b/tests/auto/sql/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from sql.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(kernel)
add_subdirectory(models)
diff --git a/tests/auto/sql/kernel/CMakeLists.txt b/tests/auto/sql/kernel/CMakeLists.txt
index dbd36bf012..d51cb75f31 100644
--- a/tests/auto/sql/kernel/CMakeLists.txt
+++ b/tests/auto/sql/kernel/CMakeLists.txt
@@ -1,11 +1,14 @@
-# Generated from kernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qsqlfield)
add_subdirectory(qsqldatabase)
add_subdirectory(qsqlerror)
add_subdirectory(qsqldriver)
+add_subdirectory(qsqlindex)
add_subdirectory(qsqlquery)
add_subdirectory(qsqlrecord)
add_subdirectory(qsqlthread)
add_subdirectory(qsql)
add_subdirectory(qsqlresult)
+add_subdirectory(qvfssql)
diff --git a/tests/auto/sql/kernel/qsql/CMakeLists.txt b/tests/auto/sql/kernel/qsql/CMakeLists.txt
index b42a1b110d..8e0448a786 100644
--- a/tests/auto/sql/kernel/qsql/CMakeLists.txt
+++ b/tests/auto/sql/kernel/qsql/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsql.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsql Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsql LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsql
SOURCES
tst_qsql.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::SqlPrivate
)
diff --git a/tests/auto/sql/kernel/qsql/tst_qsql.cpp b/tests/auto/sql/kernel/qsql/tst_qsql.cpp
index a8eca14f49..7b6e260ebf 100644
--- a/tests/auto/sql/kernel/qsql/tst_qsql.cpp
+++ b/tests/auto/sql/kernel/qsql/tst_qsql.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 <QTest>
@@ -44,11 +19,6 @@ class tst_QSql : public QObject
{
Q_OBJECT
-public:
- tst_QSql();
- virtual ~tst_QSql();
-
-
public slots:
void initTestCase();
void cleanupTestCase();
@@ -66,15 +36,6 @@ private slots:
};
/****************** General Qt SQL Module tests *****************/
-
-tst_QSql::tst_QSql()
-{
-}
-
-tst_QSql::~tst_QSql()
-{
-}
-
void tst_QSql::initTestCase()
{
}
@@ -105,7 +66,7 @@ void tst_QSql::basicDriverTest()
tst_Databases dbs;
QVERIFY(dbs.open());
- foreach (const QString& dbName, dbs.dbNames) {
+ for (const QString &dbName : std::as_const(dbs.dbNames)) {
QSqlDatabase db = QSqlDatabase::database(dbName);
QVERIFY_SQL(db, isValid());
@@ -150,16 +111,20 @@ void tst_QSql::open()
QVERIFY(dbs.open());
if (count == -1)
// first iteration: see how many dbs are open
- count = (int) dbs.dbNames.count();
+ count = (int) dbs.dbNames.size();
else
// next iterations: make sure all are opened again
- QCOMPARE(count, (int)dbs.dbNames.count());
+ QCOMPARE(count, (int)dbs.dbNames.size());
dbs.close();
}
}
void tst_QSql::openInvalid()
{
+ int argc = 1;
+ char *argv[] = { const_cast<char*>(QTest::currentAppName()) };
+ QCoreApplication app(argc, argv, false);
+
QSqlDatabase db;
QVERIFY(!db.open());
@@ -175,7 +140,7 @@ void tst_QSql::concurrentAccess()
tst_Databases dbs;
QVERIFY(dbs.open());
- foreach (const QString& dbName, dbs.dbNames) {
+ for (const QString &dbName : std::as_const(dbs.dbNames)) {
QSqlDatabase db = QSqlDatabase::database(dbName);
QVERIFY(db.isValid());
if (tst_Databases::isMSAccess(db))
@@ -207,7 +172,7 @@ void tst_QSql::openErrorRecovery()
QVERIFY(dbs.addDbs());
if (dbs.dbNames.isEmpty())
QSKIP("No database drivers installed");
- foreach (const QString& dbName, dbs.dbNames) {
+ for (const QString &dbName : std::as_const(dbs.dbNames)) {
QSqlDatabase db = QSqlDatabase::database(dbName, false);
CHECK_DATABASE(db);
diff --git a/tests/auto/sql/kernel/qsqldatabase/CMakeLists.txt b/tests/auto/sql/kernel/qsqldatabase/CMakeLists.txt
index aebf9013ff..97dbf94af7 100644
--- a/tests/auto/sql/kernel/qsqldatabase/CMakeLists.txt
+++ b/tests/auto/sql/kernel/qsqldatabase/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsqldatabase.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqldatabase Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqldatabase LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqldatabase
SOURCES
tst_qsqldatabase.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Sql
Qt::SqlPrivate
diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h
index 74fa06ab29..f81fe5548b 100644
--- a/tests/auto/sql/kernel/qsqldatabase/tst_databases.h
+++ b/tests/auto/sql/kernel/qsqldatabase/tst_databases.h
@@ -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
/* possible connection parameters */
#ifndef TST_DATABASES_H
@@ -34,6 +9,7 @@
#include <QSqlDriver>
#include <QSqlError>
#include <QSqlQuery>
+#include <QSqlRecord>
#include <QRegularExpression>
#include <QRegularExpressionMatch>
#include <QDir>
@@ -44,9 +20,13 @@
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonDocument>
+#include <QSysInfo>
+#include <QVersionNumber>
#include <QtSql/private/qsqldriver_p.h>
#include <QTest>
+using namespace Qt::StringLiterals;
+
#define CHECK_DATABASE( db ) \
if ( !db.isValid() ) { qFatal( "db is Invalid" ); }
@@ -56,88 +36,26 @@
#define DBMS_SPECIFIC(db, driver) \
if (!db.driverName().startsWith(driver)) { QSKIP(driver " specific test"); }
-// ### use QSystem::hostName if it is integrated in qtest/main
-static QString qGetHostName()
-{
- static QString hostname;
-
- if (hostname.isEmpty()) {
- hostname = QSysInfo::machineHostName();
- hostname.replace(QLatin1Char( '.' ), QLatin1Char( '_' ));
- hostname.replace(QLatin1Char( '-' ), QLatin1Char( '_' ));
- }
-
- return hostname;
-}
-
-inline QString fixupTableName(const QString &tableName, QSqlDatabase db)
-{
- QString tbName = tableName;
- // On Oracle we are limited to 30 character tablenames
- QSqlDriverPrivate *d = static_cast<QSqlDriverPrivate *>(QObjectPrivate::get(db.driver()));
- if (d && d->dbmsType == QSqlDriver::Oracle)
- tbName.truncate(30);
- // On Interbase we are limited to 31 character tablenames
- if (d && d->dbmsType == QSqlDriver::Interbase)
- tbName.truncate(31);
- return tbName;
-}
-
// to prevent nameclashes on our database server, each machine
// will use its own set of table names. Call this function to get
// "tablename_hostname"
inline static QString qTableName(const QString &prefix, const char *sourceFileName,
QSqlDatabase db, bool escape = true)
{
- const auto tableStr = fixupTableName(QString(QLatin1String("dbtst") + db.driverName() + "_" +
- prefix + QString::number(qHash(QLatin1String(sourceFileName) +
- "_" + qGetHostName().replace("-", "_")), 16)), db);
+ const auto hash = qHash(QLatin1String(sourceFileName) + '_' +
+ QSysInfo::machineHostName().replace('-', '_'));
+ auto tableStr = QLatin1String("dbtst") + db.driverName() + '_' + prefix +
+ QString::number(hash, 16);
+ // Oracle & Interbase/Firebird have a limit on the tablename length
+ QSqlDriver *drv = db.driver();
+ if (drv)
+ tableStr.truncate(drv->maximumIdentifierLength(QSqlDriver::TableName));
return escape ? db.driver()->escapeIdentifier(tableStr, QSqlDriver::TableName) : tableStr;
}
-inline static QString qTableName(const QString& prefix, QSqlDatabase db)
-{
- QString tableStr;
- if (db.driverName().toLower().contains("ODBC"))
- tableStr += QLatin1String("_odbc");
- return fixupTableName(QString(db.driver()->escapeIdentifier(prefix + tableStr + QLatin1Char('_') +
- qGetHostName(), QSqlDriver::TableName)),db);
-}
-
-inline static bool testWhiteSpaceNames( const QString &name )
-{
-/* return name.startsWith( "QPSQL" )
- || name.startsWith( "QODBC" )
- || name.startsWith( "QSQLITE" )
- || name.startsWith( "QMYSQL" );*/
- return name != QLatin1String("QSQLITE2");
-}
-
-inline static QString toHex( const QString& binary )
-{
- QString str;
- static char const hexchars[] = "0123456789ABCDEF";
-
- for ( int i = 0; i < binary.size(); i++ ) {
- ushort code = binary.at(i).unicode();
- str += (QChar)(hexchars[ (code >> 12) & 0x0F ]);
- str += (QChar)(hexchars[ (code >> 8) & 0x0F ]);
- str += (QChar)(hexchars[ (code >> 4) & 0x0F ]);
- str += (QChar)(hexchars[ code & 0x0F ]);
- }
-
- return str;
-}
-
-
class tst_Databases
{
-
public:
- tst_Databases(): counter( 0 )
- {
- }
-
~tst_Databases()
{
close();
@@ -145,83 +63,84 @@ public:
// returns a testtable consisting of the names of all database connections if
// driverPrefix is empty, otherwise only those that start with driverPrefix.
- int fillTestTable( const QString& driverPrefix = QString() ) const
+ int fillTestTable(const QString &driverPrefix = QString()) const
{
- QTest::addColumn<QString>( "dbName" );
+ QTest::addColumn<QString>("dbName");
int count = 0;
- for ( int i = 0; i < dbNames.count(); ++i ) {
- QSqlDatabase db = QSqlDatabase::database( dbNames.at( i ) );
-
- if ( !db.isValid() )
+ for (const auto &dbName : std::as_const(dbNames)) {
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ if (!db.isValid())
continue;
-
- if ( driverPrefix.isEmpty() || db.driverName().startsWith( driverPrefix ) ) {
- QTest::newRow( dbNames.at( i ).toLatin1() ) << dbNames.at( i );
+ if (driverPrefix.isEmpty() || db.driverName().startsWith(driverPrefix)) {
+ QTest::newRow(dbName.toLatin1()) << dbName;
++count;
}
}
-
return count;
}
- int fillTestTableWithStrategies( const QString& driverPrefix = QString() ) const
+ int fillTestTableWithStrategies(const QString &driverPrefix = QString()) const
{
- QTest::addColumn<QString>( "dbName" );
- QTest::addColumn<int>("submitpolicy_i");
+ QTest::addColumn<QString>("dbName");
+ QTest::addColumn<QSqlTableModel::EditStrategy>("submitpolicy");
int count = 0;
- for ( int i = 0; i < dbNames.count(); ++i ) {
- QSqlDatabase db = QSqlDatabase::database( dbNames.at( i ) );
-
- if ( !db.isValid() )
+ for (const auto &dbName : std::as_const(dbNames)) {
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ if (!db.isValid())
continue;
if ( driverPrefix.isEmpty() || db.driverName().startsWith( driverPrefix ) ) {
- QTest::newRow( QString("%1 [field]").arg(dbNames.at( i )).toLatin1() ) << dbNames.at( i ) << (int)QSqlTableModel::OnFieldChange;
- QTest::newRow( QString("%1 [row]").arg(dbNames.at( i )).toLatin1() ) << dbNames.at( i ) << (int)QSqlTableModel::OnRowChange;
- QTest::newRow( QString("%1 [manual]").arg(dbNames.at( i )).toLatin1() ) << dbNames.at( i ) << (int)QSqlTableModel::OnManualSubmit;
+ QTest::newRow(QString("%1 [field]").arg(dbName).toLatin1() ) << dbName << QSqlTableModel::OnFieldChange;
+ QTest::newRow(QString("%1 [row]").arg(dbName).toLatin1() ) << dbName << QSqlTableModel::OnRowChange;
+ QTest::newRow(QString("%1 [manual]").arg(dbName).toLatin1() ) << dbName << QSqlTableModel::OnManualSubmit;
++count;
}
}
-
return count;
}
- void addDb( const QString& driver, const QString& dbName,
- const QString& user = QString(), const QString& passwd = QString(),
- const QString& host = QString(), int port = -1, const QString params = QString() )
+ void addDb(const QString &driver, const QString &dbName,
+ const QString &user = QString(), const QString &passwd = QString(),
+ const QString &host = QString(), int port = -1, const QString &params = QString())
{
- QSqlDatabase db;
-
- if ( !QSqlDatabase::drivers().contains( driver ) ) {
+ if (!QSqlDatabase::drivers().contains(driver)) {
qWarning() << "Driver" << driver << "is not installed";
return;
}
// construct a stupid unique name
- QString cName = QString::number( counter++ ) + QLatin1Char('_') + driver + QLatin1Char('@');
+ QString cName = QString::number(counter++) + QLatin1Char('_') + driver + QLatin1Char('@');
cName += host.isEmpty() ? dbName : host;
- if ( port > 0 )
- cName += QLatin1Char(':') + QString::number( port );
-
- db = QSqlDatabase::addDatabase( driver, cName );
+ if (port > 0)
+ cName += QLatin1Char(':') + QString::number(port);
+
+ QString opts = params;
+ if (driver == "QSQLITE") {
+ // Since the database for sqlite is generated at runtime it's always
+ // available, but we use QTempDir so it's always in a different
+ // location. Thus, let's ignore the path completely.
+ cName = "SQLite";
+ qInfo("SQLite will use the database located at %ls", qUtf16Printable(dbName));
+ opts += QStringLiteral(";QSQLITE_ENABLE_NON_ASCII_CASE_FOLDING");
+ }
- if ( !db.isValid() ) {
+ auto db = QSqlDatabase::addDatabase(driver, cName);
+ if (!db.isValid()) {
qWarning( "Could not create database object" );
return;
}
- db.setDatabaseName( dbName );
-
- db.setUserName( user );
- db.setPassword( passwd );
- db.setHostName( host );
- db.setPort( port );
- db.setConnectOptions( params );
- dbNames.append( cName );
+ db.setDatabaseName(dbName);
+ db.setUserName(user);
+ db.setPassword(passwd);
+ db.setHostName(host);
+ db.setPort(port);
+ db.setConnectOptions(opts);
+ dbNames.append(cName);
}
bool addDbs()
@@ -256,10 +175,9 @@ public:
qWarning() << "No entries in " + f.fileName();
} else {
const QJsonArray entriesA = entriesV.toArray();
- QJsonArray::const_iterator it = entriesA.constBegin();
- while (it != entriesA.constEnd()) {
- if ((*it).isObject()) {
- const QJsonObject object = (*it).toObject();
+ for (const auto &elem : entriesA) {
+ if (elem.isObject()) {
+ const QJsonObject object = elem.toObject();
addDb(object.value(QStringLiteral("driver")).toString(),
object.value(QStringLiteral("name")).toString(),
object.value(QStringLiteral("username")).toString(),
@@ -269,13 +187,12 @@ public:
object.value(QStringLiteral("parameters")).toString());
added = true;
}
- ++it;
}
}
}
QTemporaryDir *sqLiteDir = dbDir();
if (sqLiteDir) {
- addDb(QStringLiteral("QSQLITE"), QDir::toNativeSeparators(sqLiteDir->path() + QStringLiteral("/foo.db")));
+ addDb(QStringLiteral("QSQLITE"), QDir::toNativeSeparators(sqLiteDir->path() + QStringLiteral("/sqlite.db")));
added = true;
}
return added;
@@ -287,17 +204,18 @@ public:
if (!addDbs())
return false;
- QStringList::Iterator it = dbNames.begin();
-
- while ( it != dbNames.end() ) {
- QSqlDatabase db = QSqlDatabase::database(( *it ), false );
- qDebug() << "Opening:" << (*it);
+ auto it = dbNames.begin();
+ while (it != dbNames.end()) {
+ const auto &dbName = *it;
+ QSqlDatabase db = QSqlDatabase::database(dbName, false );
+ qDebug() << "Opening:" << dbName;
- if ( db.isValid() && !db.isOpen() ) {
- if ( !db.open() ) {
- qWarning( "tst_Databases: Unable to open %s on %s:\n%s", qPrintable( db.driverName() ), qPrintable( *it ), qPrintable( db.lastError().databaseText() ) );
+ if (db.isValid() && !db.isOpen()) {
+ if (!db.open()) {
+ qWarning("tst_Databases: Unable to open %s on %s:\n%s", qPrintable(db.driverName()),
+ qPrintable(dbName), qPrintable(db.lastError().databaseText()));
// well... opening failed, so we just ignore the server, maybe it is not running
- it = dbNames.erase( it );
+ it = dbNames.erase(it);
} else {
++it;
}
@@ -308,57 +226,51 @@ public:
void close()
{
- for ( QStringList::Iterator it = dbNames.begin(); it != dbNames.end(); ++it ) {
+ for (const auto &dbName : std::as_const(dbNames)) {
{
- QSqlDatabase db = QSqlDatabase::database(( *it ), false );
-
- if ( db.isValid() && db.isOpen() )
+ QSqlDatabase db = QSqlDatabase::database(dbName, false);
+ if (db.isValid() && db.isOpen())
db.close();
}
-
- QSqlDatabase::removeDatabase(( *it ) );
+ QSqlDatabase::removeDatabase(dbName);
}
-
dbNames.clear();
}
// for debugging only: outputs the connection as string
- static QString dbToString( const QSqlDatabase db )
+ static QString dbToString(const QSqlDatabase &db)
{
QString res = db.driverName() + QLatin1Char('@');
- if ( db.driverName().startsWith( "QODBC" ) || db.driverName().startsWith( "QOCI" ) ) {
+ if (db.driverName().startsWith("QODBC") || db.driverName().startsWith("QOCI"))
res += db.databaseName();
- } else {
+ else
res += db.hostName();
- }
- if ( db.port() > 0 ) {
- res += QLatin1Char(':') + QString::number( db.port() );
- }
+ if (db.port() > 0)
+ res += QLatin1Char(':') + QString::number(db.port());
return res;
}
// drop a table only if it exists to prevent warnings
- static void safeDropTables( QSqlDatabase db, const QStringList& tableNames )
+ static void safeDropTables(const QSqlDatabase &db, const QStringList &tableNames)
{
- bool wasDropped;
- QSqlQuery q( db );
- QStringList dbtables=db.tables();
+ QSqlQuery q(db);
+ QStringList dbtables = db.tables();
QSqlDriver::DbmsType dbType = getDatabaseType(db);
- foreach(const QString &tableName, tableNames)
+ for (const QString &tableName : tableNames)
{
- wasDropped = true;
- QString table=tableName;
- if ( db.driver()->isIdentifierEscaped(table, QSqlDriver::TableName))
+ bool wasDropped = true;
+ QString table = tableName;
+ if (db.driver()->isIdentifierEscaped(table, QSqlDriver::TableName))
table = db.driver()->stripDelimiters(table, QSqlDriver::TableName);
- if ( dbtables.contains( table, Qt::CaseInsensitive ) ) {
- foreach(const QString &table2, dbtables.filter(table, Qt::CaseInsensitive)) {
- if(table2.compare(table.section('.', -1, -1), Qt::CaseInsensitive) == 0) {
- table=db.driver()->escapeIdentifier(table2, QSqlDriver::TableName);
- if (dbType == QSqlDriver::PostgreSQL)
+ if (dbtables.contains(table, Qt::CaseInsensitive)) {
+ for (const QString &table2 : dbtables.filter(table, Qt::CaseInsensitive)) {
+ if (table2.compare(table.section('.', -1, -1), Qt::CaseInsensitive) == 0) {
+ table = db.driver()->escapeIdentifier(table2, QSqlDriver::TableName);
+ if (dbType == QSqlDriver::PostgreSQL || dbType == QSqlDriver::MimerSQL)
wasDropped = q.exec( "drop table " + table + " cascade");
else
wasDropped = q.exec( "drop table " + table);
@@ -366,7 +278,7 @@ public:
}
}
}
- if ( !wasDropped ) {
+ if (!wasDropped) {
qWarning() << dbToString(db) << "unable to drop table" << tableName << ':' << q.lastError();
// qWarning() << "last query:" << q.lastQuery();
// qWarning() << "dbtables:" << dbtables;
@@ -375,38 +287,31 @@ public:
}
}
- static void safeDropTable( QSqlDatabase db, const QString& tableName )
+ static void safeDropViews(const QSqlDatabase &db, const QStringList &viewNames)
{
- safeDropTables(db, QStringList() << tableName);
- }
+ if (isMSAccess(db)) // Access is sooo stupid.
+ safeDropTables(db, viewNames);
- static void safeDropViews( QSqlDatabase db, const QStringList &viewNames )
- {
- if ( isMSAccess( db ) ) // Access is sooo stupid.
- safeDropTables( db, viewNames );
-
- bool wasDropped;
- QSqlQuery q( db );
- QStringList dbtables=db.tables(QSql::Views);
-
- foreach(QString viewName, viewNames)
+ QSqlQuery q(db);
+ QStringList dbtables = db.tables(QSql::Views);
+ for (const QString &viewName : viewNames)
{
- wasDropped = true;
- QString view=viewName;
- if ( db.driver()->isIdentifierEscaped(view, QSqlDriver::TableName))
+ bool wasDropped = true;
+ QString view = viewName;
+ if (db.driver()->isIdentifierEscaped(view, QSqlDriver::TableName))
view = db.driver()->stripDelimiters(view, QSqlDriver::TableName);
- if ( dbtables.contains( view, Qt::CaseInsensitive ) ) {
- foreach(const QString &view2, dbtables.filter(view, Qt::CaseInsensitive)) {
- if(view2.compare(view.section('.', -1, -1), Qt::CaseInsensitive) == 0) {
- view=db.driver()->escapeIdentifier(view2, QSqlDriver::TableName);
- wasDropped = q.exec( "drop view " + view);
+ if (dbtables.contains(view, Qt::CaseInsensitive)) {
+ for (const QString &view2 : dbtables.filter(view, Qt::CaseInsensitive)) {
+ if (view2.compare(view.section('.', -1, -1), Qt::CaseInsensitive) == 0) {
+ view = db.driver()->escapeIdentifier(view2, QSqlDriver::TableName);
+ wasDropped = q.exec("drop view " + view);
dbtables.removeAll(view);
}
}
}
- if ( !wasDropped )
+ if (!wasDropped)
qWarning() << dbToString(db) << "unable to drop view" << viewName << ':' << q.lastError();
// << "\nlast query:" << q.lastQuery()
// << "\ndbtables:" << dbtables
@@ -414,14 +319,9 @@ public:
}
}
- static void safeDropView( QSqlDatabase db, const QString& tableName )
- {
- safeDropViews(db, QStringList() << tableName);
- }
-
// returns the type name of the blob datatype for the database db.
// blobSize is only used if the db doesn't have a generic blob type
- static QString blobTypeName( QSqlDatabase db, int blobSize = 10000 )
+ static QString blobTypeName(const QSqlDatabase &db, int blobSize = 10000)
{
const QSqlDriver::DbmsType dbType = getDatabaseType(db);
if (dbType == QSqlDriver::MySqlServer)
@@ -450,19 +350,35 @@ public:
return "blob";
}
- static QString dateTimeTypeName(QSqlDatabase db)
+ static QString dateTimeTypeName(const QSqlDatabase &db)
{
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType == QSqlDriver::PostgreSQL)
return QLatin1String("timestamptz");
if (dbType == QSqlDriver::Oracle && getOraVersion(db) >= 9)
return QLatin1String("timestamp(0)");
- if (dbType == QSqlDriver::Interbase)
+ if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::MimerSQL)
return QLatin1String("timestamp");
return QLatin1String("datetime");
}
- static QString autoFieldName( QSqlDatabase db )
+ static QString timeTypeName(const QSqlDatabase &db)
+ {
+ const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType == QSqlDriver::Oracle && getOraVersion(db) >= 9)
+ return QLatin1String("timestamp(0)");
+ return QLatin1String("time");
+ }
+
+ static QString dateTypeName(const QSqlDatabase &db)
+ {
+ const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType == QSqlDriver::Oracle && getOraVersion(db) >= 9)
+ return QLatin1String("timestamp(0)");
+ return QLatin1String("date");
+ }
+
+ static QString autoFieldName(const QSqlDatabase &db)
{
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType == QSqlDriver::MySqlServer)
@@ -477,43 +393,35 @@ public:
return QString();
}
- static QByteArray printError( const QSqlError& err )
+ static QByteArray printError(const QSqlError &err)
{
QString result;
if (!err.nativeErrorCode().isEmpty())
- result += '(' + err.nativeErrorCode() + ") ";
- result += '\'';
- if(!err.driverText().isEmpty())
+ result += u'(' + err.nativeErrorCode() + ") ";
+ result += u'\'';
+ if (!err.driverText().isEmpty())
result += err.driverText() + "' || '";
- result += err.databaseText() + QLatin1Char('\'');
+ result += err.databaseText() + u'\'';
return result.toLocal8Bit();
}
- static QByteArray printError( const QSqlError& err, const QSqlDatabase& db )
+ static QByteArray printError(const QSqlError &err, const QSqlDatabase &db)
{
- QString result(dbToString(db) + ": ");
- if (!err.nativeErrorCode().isEmpty())
- result += '(' + err.nativeErrorCode() + ") ";
- result += '\'';
- if(!err.driverText().isEmpty())
- result += err.driverText() + "' || '";
- result += err.databaseText() + QLatin1Char('\'');
- return result.toLocal8Bit();
+ return dbToString(db).toLocal8Bit() + ": " + printError(err);
}
- static QSqlDriver::DbmsType getDatabaseType(QSqlDatabase db)
+ static QSqlDriver::DbmsType getDatabaseType(const QSqlDatabase &db)
{
- QSqlDriverPrivate *d = static_cast<QSqlDriverPrivate *>(QObjectPrivate::get(db.driver()));
- return d->dbmsType;
+ return db.driver()->dbmsType();
}
- static bool isMSAccess( QSqlDatabase db )
+ static bool isMSAccess(const QSqlDatabase &db)
{
return db.databaseName().contains( "Access Driver", Qt::CaseInsensitive );
}
// -1 on fail, else Oracle version
- static int getOraVersion( QSqlDatabase db )
+ static int getOraVersion(const QSqlDatabase &db)
{
int ver = -1;
QSqlQuery q( "SELECT banner FROM v$version", db );
@@ -532,28 +440,18 @@ public:
return ver;
}
- static QString getMySqlVersion( const QSqlDatabase &db )
+ static QVersionNumber getIbaseEngineVersion(const QSqlDatabase &db)
{
QSqlQuery q(db);
- q.exec( "select version()" );
- if(q.next())
- return q.value( 0 ).toString();
- else
- return QString();
- }
-
- static QString getPSQLVersion( const QSqlDatabase &db )
- {
- QSqlQuery q(db);
- q.exec( "select version()" );
- if(q.next())
- return q.value( 0 ).toString();
- else
- return QString();
+ q.exec("SELECT rdb$get_context('SYSTEM', 'ENGINE_VERSION') as version from rdb$database;"_L1);
+ q.next();
+ auto record = q.record();
+ auto version = QVersionNumber::fromString(record.value(0).toString());
+ return version;
}
QStringList dbNames;
- int counter;
+ int counter = 0;
private:
QTemporaryDir *dbDir()
@@ -571,5 +469,61 @@ private:
QScopedPointer<QTemporaryDir> m_dbDir;
};
+class TableScope
+{
+public:
+ TableScope(const QSqlDatabase &db, const QString &fullTableName)
+ : m_db(db)
+ , m_tableName(fullTableName)
+ {
+ tst_Databases::safeDropTables(m_db, {m_tableName});
+ }
+ TableScope(const QSqlDatabase &db, const char *tableName, const char *file, bool escape = true)
+ : TableScope(db, qTableName(tableName, file, db, escape))
+ {
+ }
+
+ ~TableScope()
+ {
+ tst_Databases::safeDropTables(m_db, {m_tableName});
+ }
+
+ QString tableName() const
+ {
+ return m_tableName;
+ }
+private:
+ QSqlDatabase m_db;
+ QString m_tableName;
+};
+
+class ProcScope
+{
+public:
+ ProcScope(const QSqlDatabase &db, const char *procName, const char *file)
+ : m_db(db),
+ m_procName(qTableName(procName, file, db))
+ {
+ cleanup();
+ }
+ ~ProcScope()
+ {
+ cleanup();
+ }
+ QString name() const
+ {
+ return m_procName;
+ }
+protected:
+ void cleanup()
+ {
+ QSqlQuery q(m_db);
+ q.exec("DROP PROCEDURE IF EXISTS " + m_procName);
+ }
+private:
+ QSqlDatabase m_db;
+ const QString m_procName;
+};
+
#endif
diff --git a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
index 0ef4caeafa..1b762abc68 100644
--- a/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.cpp
+++ b/tests/auto/sql/kernel/qsqldatabase/tst_qsqldatabase.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 <QTest>
@@ -53,8 +28,7 @@ class tst_QSqlDatabase : public QObject
Q_OBJECT
public:
- tst_QSqlDatabase();
- virtual ~tst_QSqlDatabase();
+ using QObject::QObject;
public slots:
void initTestCase();
@@ -75,8 +49,6 @@ private slots:
void eventNotification_data() { generic_data(); }
void eventNotification();
void addDatabase();
- void errorReporting_data();
- void errorReporting();
void cloneDatabase_data() { generic_data(); }
void cloneDatabase();
@@ -87,8 +59,6 @@ private slots:
void recordPSQL();
void recordOCI_data() { generic_data("QOCI"); }
void recordOCI();
- void recordTDS_data() { generic_data("QTDS"); }
- void recordTDS();
void recordDB2_data() { generic_data("QDB2"); }
void recordDB2();
void recordSQLite_data() { generic_data("QSQLITE"); }
@@ -162,8 +132,6 @@ private slots:
void ibase_numericFields(); // For task 125053
void ibase_fetchBlobs_data() { generic_data("QIBASE"); }
void ibase_fetchBlobs(); // For task 143471
- void ibase_useCustomCharset_data() { generic_data("QIBASE"); }
- void ibase_useCustomCharset(); // For task 134608
void ibase_procWithoutReturnValues_data() { generic_data("QIBASE"); } // For task 165423
void ibase_procWithoutReturnValues();
void ibase_procWithReturnValues_data() { generic_data("QIBASE"); } // For task 177530
@@ -207,13 +175,13 @@ private slots:
void sqlite_check_json1();
private:
- void createTestTables(QSqlDatabase db);
- void dropTestTables(QSqlDatabase db);
- void populateTestTables(QSqlDatabase db);
+ void createTestTables(const QSqlDatabase &db);
+ void dropTestTables(const QSqlDatabase &db);
+ void populateTestTables(const QSqlDatabase &db);
void generic_data(const QString &engine=QString());
- void testRecord(const FieldDef fieldDefs[], const QSqlRecord& inf, QSqlDatabase db);
- void commonFieldTest(const FieldDef fieldDefs[], QSqlDatabase, const int);
+ void testRecord(const FieldDef fieldDefs[], const QSqlRecord& inf, const QSqlDatabase &db);
+ void commonFieldTest(const FieldDef fieldDefs[], const QSqlDatabase &db, const int fieldCount);
tst_Databases dbs;
};
@@ -235,7 +203,7 @@ struct FieldDef {
rt.replace(QRegularExpression("\\s"), QString("_"));
int i = rt.indexOf(QLatin1Char('('));
if (i == -1)
- i = rt.length();
+ i = rt.size();
if (i > 20)
i = 20;
return "t_" + rt.left(i);
@@ -248,11 +216,11 @@ struct FieldDef {
// creates a table out of the FieldDefs and returns the number of fields
// excluding the primary key field
-static int createFieldTable(const FieldDef fieldDefs[], QSqlDatabase db)
+static int createFieldTable(const FieldDef fieldDefs[], const QSqlDatabase &db)
{
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
const QString tableName = qTableName("qtestfields", __FILE__, db);
- tst_Databases::safeDropTable(db, tableName);
+ tst_Databases::safeDropTables(db, {tableName});
QSqlQuery q(db);
// construct a create table statement consisting of all fieldtypes
QString qs = "create table " + tableName;
@@ -283,22 +251,7 @@ static int createFieldTable(const FieldDef fieldDefs[], QSqlDatabase db)
return i;
}
-bool driverQuotedCaseSensitive(QSqlDatabase db)
-{
- // On Interbase it will be case sensitive if it was created with quotes
- QSqlDriverPrivate *d = static_cast<QSqlDriverPrivate *>(QObjectPrivate::get(db.driver()));
- return (d && d->dbmsType == QSqlDriver::Interbase);
-}
-
-tst_QSqlDatabase::tst_QSqlDatabase()
-{
-}
-
-tst_QSqlDatabase::~tst_QSqlDatabase()
-{
-}
-
-void tst_QSqlDatabase::createTestTables(QSqlDatabase db)
+void tst_QSqlDatabase::createTestTables(const QSqlDatabase &db)
{
if (!db.isValid())
return;
@@ -325,16 +278,14 @@ void tst_QSqlDatabase::createTestTables(QSqlDatabase db)
" (id integer not null, t_varchar varchar(40) not null, "
"t_char char(40), t_numeric numeric(6, 3), primary key (id, t_varchar))"));
}
- if (testWhiteSpaceNames(db.driverName())) {
- QString qry = "create table " + qTableName("qtest test", __FILE__, db)
- + '('
- + db.driver()->escapeIdentifier(QLatin1String("test test"), QSqlDriver::FieldName)
- + " int not null primary key)";
- QVERIFY_SQL(q, exec(qry));
- }
+ QString qry = "create table " + qTableName("qtest test", __FILE__, db)
+ + '('
+ + db.driver()->escapeIdentifier(QLatin1String("test test"), QSqlDriver::FieldName)
+ + " int not null primary key)";
+ QVERIFY_SQL(q, exec(qry));
}
-void tst_QSqlDatabase::dropTestTables(QSqlDatabase db)
+void tst_QSqlDatabase::dropTestTables(const QSqlDatabase &db)
{
if (!db.isValid())
return;
@@ -346,31 +297,11 @@ void tst_QSqlDatabase::dropTestTables(QSqlDatabase db)
}
// drop the view first, otherwise we'll get dependency problems
- tst_Databases::safeDropViews(db, QStringList() << qTableName("qtest_view", __FILE__, db) << qTableName("qtest_view2", __FILE__, db));
- const QString qtestTable = qTableName("qtest", __FILE__, db);
- QStringList tableNames;
- tableNames << qtestTable
- << qTableName("qtest test", __FILE__, db)
- << qTableName("qtestfields", __FILE__, db)
- << qTableName("qtestalter", __FILE__, db)
- << qTableName("qtest_temp", __FILE__, db)
- << qTableName("qtest_bigint", __FILE__, db)
- << qTableName("qtest_xmltype", __FILE__, db)
- << qTableName("latin1table", __FILE__, db)
- << qTableName("qtest_sqlguid", __FILE__, db)
- << qTableName("batable", __FILE__, db)
- << qTableName("qtest_prec", __FILE__, db)
- << qTableName("uint", __FILE__, db)
- << qTableName("strings", __FILE__, db)
- << qTableName("numericfields", __FILE__, db)
- << qTableName("qtest_ibaseblobs", __FILE__, db)
- << qTableName("qtestBindBool", __FILE__, db)
- << qTableName("testqGetString", __FILE__, db)
- << qTableName("qtest_sqlguid", __FILE__, db)
- << qTableName("uint_table", __FILE__, db)
- << qTableName("uint_test", __FILE__, db)
- << qTableName("bug_249059", __FILE__, db)
- << qTableName("regexp_test", __FILE__, db);
+ tst_Databases::safeDropViews(db, {qTableName("qtest_view", __FILE__, db),
+ qTableName("qtest_view2", __FILE__, db)});
+ QStringList tableNames = {qTableName("qtest", __FILE__, db),
+ qTableName("qtest test", __FILE__, db),
+ qTableName("qtestfields", __FILE__, db)};
QSqlQuery q(0, db);
if (dbType == QSqlDriver::PostgreSQL) {
@@ -378,11 +309,8 @@ void tst_QSqlDatabase::dropTestTables(QSqlDatabase db)
q.exec("drop schema " + qTableName("qtestScHeMa", __FILE__, db) + " cascade");
}
- if (testWhiteSpaceNames(db.driverName())) {
- tableNames << db.driver()->escapeIdentifier(qTableName("qtest test", __FILE__, db),
- QSqlDriver::TableName);
- }
-
+ tableNames << db.driver()->escapeIdentifier(qTableName("qtest test", __FILE__, db),
+ QSqlDriver::TableName);
tst_Databases::safeDropTables(db, tableNames);
if (dbType == QSqlDriver::Oracle) {
@@ -393,7 +321,7 @@ void tst_QSqlDatabase::dropTestTables(QSqlDatabase db)
}
}
-void tst_QSqlDatabase::populateTestTables(QSqlDatabase db)
+void tst_QSqlDatabase::populateTestTables(const QSqlDatabase &db)
{
if (!db.isValid())
return;
@@ -465,36 +393,6 @@ void tst_QSqlDatabase::addDatabase()
QVERIFY(!QSqlDatabase::contains("INVALID_CONNECTION"));
}
-void tst_QSqlDatabase::errorReporting_data()
-{
- QTest::addColumn<QString>("driver");
-
- QTest::newRow("QTDS") << QString::fromLatin1("QTDS");
- QTest::newRow("QTDS7") << QString::fromLatin1("QTDS7");
-}
-
-void tst_QSqlDatabase::errorReporting()
-{
- QFETCH(QString, driver);
-
- if (!QSqlDatabase::drivers().contains(driver))
- QSKIP(QString::fromLatin1("Database driver %1 not available").arg(driver).toLocal8Bit().constData());
-
- const QString dbName = QLatin1String("errorReportingDb-") + driver;
- QSqlDatabase db = QSqlDatabase::addDatabase(driver, dbName);
-
- db.setHostName(QLatin1String("127.0.0.1"));
- db.setDatabaseName(QLatin1String("NonExistantDatabase"));
- db.setUserName(QLatin1String("InvalidUser"));
- db.setPassword(QLatin1String("IncorrectPassword"));
-
- QVERIFY(!db.open());
-
- db = QSqlDatabase();
-
- QSqlDatabase::removeDatabase(dbName);
-}
-
void tst_QSqlDatabase::open()
{
QFETCH(QString, dbName);
@@ -534,7 +432,7 @@ void tst_QSqlDatabase::tables()
bool tempTables = false;
QSqlQuery q(db);
- if (!q.exec("CREATE VIEW " + qtest_view + " as select * from " + qtest)) {
+ if (!q.exec("CREATE VIEW " + qtest_view + " as select * from " + db.driver()->escapeIdentifier(qtest, QSqlDriver::TableName))) {
qDebug("DBMS '%s' cannot handle VIEWs: %s",
qPrintable(tst_Databases::dbToString(db)),
qPrintable(tst_Databases::printError(q.lastError())));
@@ -587,34 +485,21 @@ void tst_QSqlDatabase::whitespaceInIdentifiers()
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
+ const auto metaTypeToCheck = dbType == QSqlDriver::Oracle
+ ? QMetaType(QMetaType::Double) : QMetaType(QMetaType::Int);
- if (testWhiteSpaceNames(db.driverName())) {
- const bool isCaseSensitive = driverQuotedCaseSensitive(db);
- const auto tableName(qTableName("qtest test", __FILE__, db, isCaseSensitive));
- if (isCaseSensitive) {
- QVERIFY(db.tables().contains(db.driver()->stripDelimiters(tableName, QSqlDriver::TableName)));
- } else {
- QVERIFY(db.tables().contains(tableName, Qt::CaseInsensitive));
- }
+ const auto tableName(qTableName("qtest test", __FILE__, db, true));
+ QVERIFY(db.tables().contains(db.driver()->stripDelimiters(tableName, QSqlDriver::TableName)));
- QSqlRecord rec = db.record(tableName);
- QCOMPARE(rec.count(), 1);
- QCOMPARE(rec.fieldName(0), QString("test test"));
- if (dbType == QSqlDriver::Oracle)
- QCOMPARE(rec.field(0).metaType(), QMetaType(QMetaType::Double));
- else
- QCOMPARE(rec.field(0).metaType(), QMetaType(QMetaType::Int));
+ QSqlRecord rec = db.record(tableName);
+ QCOMPARE(rec.count(), 1);
+ QCOMPARE(rec.fieldName(0), QString("test test"));
+ QCOMPARE(rec.field(0).metaType(), metaTypeToCheck);
- QSqlIndex idx = db.primaryIndex(tableName);
- QCOMPARE(idx.count(), 1);
- QCOMPARE(idx.fieldName(0), QString("test test"));
- if (dbType == QSqlDriver::Oracle)
- QCOMPARE(idx.field(0).metaType(), QMetaType(QMetaType::Double));
- else
- QCOMPARE(idx.field(0).metaType(), QMetaType(QMetaType::Int));
- } else {
- QSKIP("DBMS does not support whitespaces in identifiers");
- }
+ QSqlIndex idx = db.primaryIndex(tableName);
+ QCOMPARE(idx.count(), 1);
+ QCOMPARE(idx.fieldName(0), QString("test test"));
+ QCOMPARE(idx.field(0).metaType(), metaTypeToCheck);
}
void tst_QSqlDatabase::alterTable()
@@ -622,13 +507,11 @@ void tst_QSqlDatabase::alterTable()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- const QString qtestalter(qTableName("qtestalter", __FILE__, db));
- const auto noEscapeAlterTable = qTableName("qtestalter", __FILE__, db, false);
- const bool isCaseSensitive = driverQuotedCaseSensitive(db);
+ TableScope ts(db, "qtestalter", __FILE__);
QSqlQuery q(db);
- QVERIFY_SQL(q, exec("create table " + qtestalter + " (F1 char(20), F2 char(20), F3 char(20))"));
- QSqlRecord rec = db.record(isCaseSensitive ? qtestalter : noEscapeAlterTable);
+ QVERIFY_SQL(q, exec("create table " + ts.tableName() + " (F1 char(20), F2 char(20), F3 char(20))"));
+ QSqlRecord rec = db.record(ts.tableName());
QCOMPARE((int)rec.count(), 3);
int i;
@@ -636,18 +519,18 @@ void tst_QSqlDatabase::alterTable()
QCOMPARE(rec.field(i).name().toUpper(), QString("F%1").arg(i + 1));
}
- if (!q.exec("alter table " + qtestalter + " drop column F2")) {
+ if (!q.exec("alter table " + ts.tableName() + " drop column F2")) {
QSKIP("DBMS doesn't support dropping columns in ALTER TABLE statement");
}
- rec = db.record(isCaseSensitive ? qtestalter : noEscapeAlterTable);
+ rec = db.record(ts.tableName());
- QCOMPARE((int)rec.count(), 2);
+ QCOMPARE(rec.count(), 2);
QCOMPARE(rec.field(0).name().toUpper(), QString("F1"));
QCOMPARE(rec.field(1).name().toUpper(), QString("F3"));
- q.exec("select * from " + qtestalter);
+ q.exec("select * from " + ts.tableName());
}
#if 0
@@ -675,12 +558,11 @@ void tst_QSqlDatabase::record()
}
#endif
-void tst_QSqlDatabase::testRecord(const FieldDef fieldDefs[], const QSqlRecord& inf, QSqlDatabase db)
+void tst_QSqlDatabase::testRecord(const FieldDef fieldDefs[], const QSqlRecord &inf, const QSqlDatabase &db)
{
- int i = 0;
if (!tst_Databases::autoFieldName(db).isEmpty()) // Currently only MySQL is tested
- QVERIFY2(inf.field(i).isAutoValue(), qPrintable(inf.field(i).name() + " should be reporting as an autovalue"));
- for (i = 0; !fieldDefs[ i ].typeName.isNull(); ++i) {
+ QVERIFY2(inf.field(0).isAutoValue(), qPrintable(inf.field(0).name() + " should be reporting as an autovalue"));
+ for (int i = 0; !fieldDefs[ i ].typeName.isNull(); ++i) {
QCOMPARE(inf.field(i+1).name().toUpper(), fieldDefs[ i ].fieldName().toUpper());
if (inf.field(i+1).metaType().id() != fieldDefs[ i ].type) {
QFAIL(qPrintable(QString(" Expected: '%1' Received: '%2' for field %3 in testRecord").arg(
@@ -695,13 +577,12 @@ void tst_QSqlDatabase::testRecord(const FieldDef fieldDefs[], const QSqlRecord&
}
// non-dbms specific tests
-void tst_QSqlDatabase::commonFieldTest(const FieldDef fieldDefs[], QSqlDatabase db, const int fieldCount)
+void tst_QSqlDatabase::commonFieldTest(const FieldDef fieldDefs[], const QSqlDatabase &db, const int fieldCount)
{
CHECK_DATABASE(db);
- QStringList tableNames = { qTableName("qtestfields", __FILE__, db) };
- if (!driverQuotedCaseSensitive(db))
- tableNames << qTableName("qtestfields", __FILE__, db, false);
+ const QStringList tableNames = { qTableName("qtestfields", __FILE__, db),
+ qTableName("qtestfields", __FILE__, db, false) };
for (const QString &table : tableNames) {
QSqlRecord rec = db.record(table);
@@ -713,43 +594,6 @@ void tst_QSqlDatabase::commonFieldTest(const FieldDef fieldDefs[], QSqlDatabase
QVERIFY_SQL(q, exec("select * from " + tableNames.at(0)));
}
-void tst_QSqlDatabase::recordTDS()
-{
- QFETCH(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
-
- static const FieldDef fieldDefs[] = {
- FieldDef("tinyint", QMetaType::Int, 255),
- FieldDef("smallint", QMetaType::Int, 32767),
- FieldDef("int", QMetaType::Int, 2147483647),
- FieldDef("numeric(10,9)", QMetaType::Double, 1.23456789),
- FieldDef("decimal(10,9)", QMetaType::Double, 1.23456789),
- FieldDef("float(4)", QMetaType::Double, 1.23456789),
- FieldDef("double precision", QMetaType::Double, 1.23456789),
- FieldDef("real", QMetaType::Double, 1.23456789),
- FieldDef("smallmoney", QMetaType::Double, 100.42),
- FieldDef("money", QMetaType::Double, 200.42),
- // accuracy is that of a minute
- FieldDef("smalldatetime", QMetaType::QDateTime, QDateTime(QDate::currentDate(), QTime(1, 2, 0, 0))),
- // accuracy is that of a second
- FieldDef("datetime", QMetaType::QDateTime, QDateTime(QDate::currentDate(), QTime(1, 2, 3, 0))),
- FieldDef("char(20)", QMetaType::QString, "blah1"),
- FieldDef("varchar(20)", QMetaType::QString, "blah2"),
- FieldDef("nchar(20)", QMetaType::QString, "blah3"),
- FieldDef("nvarchar(20)", QMetaType::QString, "blah4"),
- FieldDef("text", QMetaType::QString, "blah5"),
- FieldDef("bit", QMetaType::Int, 1, false),
-
- FieldDef()
- };
-
- const int fieldCount = createFieldTable(fieldDefs, db);
- QVERIFY(fieldCount > 0);
-
- commonFieldTest(fieldDefs, db, fieldCount);
-}
-
void tst_QSqlDatabase::recordOCI()
{
bool hasTimeStamp = false;
@@ -896,22 +740,6 @@ void tst_QSqlDatabase::recordMySQL()
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- FieldDef bin10, varbin10;
- int major = tst_Databases::getMySqlVersion( db ).section( QChar('.'), 0, 0 ).toInt();
- int minor = tst_Databases::getMySqlVersion( db ).section( QChar('.'), 1, 1 ).toInt();
- int revision = tst_Databases::getMySqlVersion( db ).section( QChar('.'), 2, 2 ).toInt();
- int vernum = (major << 16) + (minor << 8) + revision;
-
- /* The below is broken in mysql below 5.0.15
- see http://dev.mysql.com/doc/refman/5.0/en/binary-varbinary.html
- specifically: Before MySQL 5.0.15, the pad value is space. Values are right-padded
- with space on insert, and trailing spaces are removed on select.
- */
- if( vernum >= ((5 << 16) + 15) ) {
- bin10 = FieldDef("binary(10)", QMetaType::QByteArray, QString("123abc "));
- varbin10 = FieldDef("varbinary(10)", QMetaType::QByteArray, QString("123abcv "));
- }
-
static QDateTime dt(QDate::currentDate(), QTime(1, 2, 3, 0));
static const FieldDef fieldDefs[] = {
FieldDef("tinyint", QMetaType::Char, 127),
@@ -1193,28 +1021,37 @@ void tst_QSqlDatabase::bigIntField()
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- const QString qtest_bigint(qTableName("qtest_bigint", __FILE__, db));
+ QString queryString;
+ switch (dbType) {
+ case QSqlDriver::MySqlServer:
+ queryString = "create table %1 (id int, t_s64bit bigint, t_u64bit bigint unsigned)";
+ break;
+ case QSqlDriver::DB2:
+ case QSqlDriver::Interbase:
+ case QSqlDriver::MimerSQL:
+ case QSqlDriver::MSSqlServer:
+ case QSqlDriver::PostgreSQL:
+ queryString = "create table %1 (id int, t_s64bit bigint, t_u64bit bigint)";
+ break;
+ case QSqlDriver::Oracle:
+ case QSqlDriver::SQLite:
+ queryString = "create table %1 (id int, t_s64bit int, t_u64bit int)";
+ break;
+ case QSqlDriver::Sybase:
+ case QSqlDriver::UnknownDbms:
+ break;
+ }
+ if (queryString.isEmpty())
+ QSKIP("no 64 bit integer support");
+
+ TableScope ts(db, "qtest_bigint", __FILE__);
QSqlQuery q(db);
q.setForwardOnly(true);
-
if (dbType == QSqlDriver::Oracle)
q.setNumericalPrecisionPolicy(QSql::LowPrecisionInt64);
-
- if (dbType == QSqlDriver::MySqlServer) {
- QVERIFY_SQL(q, exec("create table " + qtest_bigint + " (id int, t_s64bit bigint, t_u64bit bigint unsigned)"));
- } else if (dbType == QSqlDriver::PostgreSQL
- || dbType == QSqlDriver::DB2
- || dbType == QSqlDriver::MSSqlServer) {
- QVERIFY_SQL(q, exec("create table " + qtest_bigint + "(id int, t_s64bit bigint, t_u64bit bigint)"));
- } else if (dbType == QSqlDriver::Oracle) {
- QVERIFY_SQL(q, exec("create table " + qtest_bigint + " (id int, t_s64bit int, t_u64bit int)"));
- //} else if (dbType == QSqlDriver::Interbase) {
- // QVERIFY_SQL(q, exec("create table " + qtest_bigint + " (id int, t_s64bit int64, t_u64bit int64)"));
- } else {
- QSKIP("no 64 bit integer support");
- }
- QVERIFY(q.prepare("insert into " + qtest_bigint + " values (?, ?, ?)"));
+ QVERIFY_SQL(q, exec(queryString.arg(ts.tableName())));
+ QVERIFY(q.prepare("insert into " + ts.tableName() + " values (?, ?, ?)"));
qlonglong ll = Q_INT64_C(9223372036854775807);
qulonglong ull = Q_UINT64_C(18446744073709551615);
@@ -1238,7 +1075,7 @@ void tst_QSqlDatabase::bigIntField()
q.bindValue(2, (qlonglong) ull);
QVERIFY_SQL(q, exec());
}
- QVERIFY(q.exec("select * from " + qtest_bigint + " order by id"));
+ QVERIFY(q.exec("select * from " + ts.tableName() + " order by id"));
QVERIFY(q.next());
QCOMPARE(q.value(1).toDouble(), (double)ll);
QCOMPARE(q.value(1).toLongLong(), ll);
@@ -1267,34 +1104,44 @@ void tst_QSqlDatabase::caseSensivity()
cs = true;
}
- QSqlRecord rec = db.record(qTableName("qtest", __FILE__, db, driverQuotedCaseSensitive(db)));
- QVERIFY((int)rec.count() > 0);
+ QSqlRecord rec = db.record(qTableName("qtest", __FILE__, db));
+ QVERIFY(rec.count() > 0);
if (!cs) {
- rec = db.record(qTableName("QTEST", __FILE__, db, false).toUpper());
- QVERIFY((int)rec.count() > 0);
- rec = db.record(qTableName("qTesT", __FILE__, db, false));
- QVERIFY((int)rec.count() > 0);
+ rec = db.record(qTableName("QTEST", __FILE__, db, false).toUpper());
+ QVERIFY(rec.count() > 0);
+ rec = db.record(qTableName("qTesT", __FILE__, db, false));
+ QVERIFY(rec.count() > 0);
}
- rec = db.primaryIndex(qTableName("qtest", __FILE__, db, driverQuotedCaseSensitive(db)));
- QVERIFY((int)rec.count() > 0);
+ rec = db.primaryIndex(qTableName("qtest", __FILE__, db));
+ QVERIFY(rec.count() > 0);
if (!cs) {
- rec = db.primaryIndex(qTableName("QTEST", __FILE__, db, false).toUpper());
- QVERIFY((int)rec.count() > 0);
- rec = db.primaryIndex(qTableName("qTesT", __FILE__, db, false));
- QVERIFY((int)rec.count() > 0);
+ rec = db.primaryIndex(qTableName("QTEST", __FILE__, db, false).toUpper());
+ QVERIFY(rec.count() > 0);
+ rec = db.primaryIndex(qTableName("qTesT", __FILE__, db, false));
+ QVERIFY(rec.count() > 0);
}
// Explicit test for case sensitive table creation without quoting
+ TableScope ts(db, "NoQuotes", __FILE__, false);
QSqlQuery qry(db);
- const auto noQuotesTable = qTableName("NoQuotes", __FILE__, db, false);
- tst_Databases::safeDropTable(db, noQuotesTable);
- QVERIFY_SQL(qry, exec("CREATE TABLE " + noQuotesTable + " (id INTEGER)"));
- QVERIFY_SQL(qry, exec("INSERT INTO " + noQuotesTable + " VALUES(1)"));
- QVERIFY_SQL(qry, exec("SELECT * FROM " + noQuotesTable));
+ QVERIFY_SQL(qry, exec("CREATE TABLE " + ts.tableName() + " (id INTEGER)"));
+ QVERIFY_SQL(qry, exec("INSERT INTO " + ts.tableName() + " VALUES(1)"));
+ QVERIFY_SQL(qry, exec("SELECT * FROM " + ts.tableName()));
QVERIFY_SQL(qry, next());
QCOMPARE(qry.value(0).toInt(), 1);
- rec = db.record(cs ? noQuotesTable.toLower() : noQuotesTable);
+ // QMYSQLDriver::record() is using a mysql function instead of a query, so quoting
+ // will not help when the table names are not stored lowercase.
+ if (dbType == QSqlDriver::MySqlServer) {
+ QVERIFY_SQL(qry, exec("SHOW GLOBAL VARIABLES LIKE 'lower_case_table_names'"));
+ QVERIFY_SQL(qry, next());
+ cs = qry.value(1).toInt() != 0;
+ }
+ if (dbType == QSqlDriver::Interbase) {
+ rec = db.record(ts.tableName().toUpper());
+ } else {
+ rec = db.record(cs ? ts.tableName().toLower() : ts.tableName());
+ }
QVERIFY(rec.count() > 0);
}
@@ -1400,24 +1247,24 @@ void tst_QSqlDatabase::psql_escapeBytea()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "batable", __FILE__);
const char dta[4] = {'\x71', '\x14', '\x32', '\x81'};
QByteArray ba(dta, 4);
QSqlQuery q(db);
- const QString tableName(qTableName("batable", __FILE__, db));
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (ba bytea)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (ba bytea)").arg(ts.tableName())));
QSqlQuery iq(db);
- QVERIFY_SQL(iq, prepare(QString("INSERT INTO %1 VALUES (?)").arg(tableName)));
+ QVERIFY_SQL(iq, prepare(QString("INSERT INTO %1 VALUES (?)").arg(ts.tableName())));
iq.bindValue(0, QVariant(ba));
QVERIFY_SQL(iq, exec());
- QVERIFY_SQL(q, exec(QString("SELECT ba FROM %1").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("SELECT ba FROM %1").arg(ts.tableName())));
QVERIFY_SQL(q, next());
QByteArray res = q.value(0).toByteArray();
- int i = 0;
+ qsizetype i = 0;
for (; i < ba.size(); ++i){
if (ba[i] != res[i])
break;
@@ -1431,13 +1278,13 @@ void tst_QSqlDatabase::psql_bug249059()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "bug_249059", __FILE__);
QSqlQuery q(db);
- const QString tableName(qTableName("bug_249059", __FILE__, db));
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (dt timestamp, t time)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (dt timestamp, t time)").arg(ts.tableName())));
QSqlQuery iq(db);
- QVERIFY_SQL(iq, prepare(QString("INSERT INTO %1 VALUES (?, ?)").arg(tableName)));
+ QVERIFY_SQL(iq, prepare(QString("INSERT INTO %1 VALUES (?, ?)").arg(ts.tableName())));
iq.bindValue(0, QVariant(QString("2001-09-09 04:05:06.789 -5:00")));
iq.bindValue(1, QVariant(QString("04:05:06.789 -5:00")));
QVERIFY_SQL(iq, exec());
@@ -1445,7 +1292,7 @@ void tst_QSqlDatabase::psql_bug249059()
iq.bindValue(1, QVariant(QString("04:05:06.789 +5:00")));
QVERIFY_SQL(iq, exec());
- QVERIFY_SQL(q, exec(QString("SELECT dt, t FROM %1").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("SELECT dt, t FROM %1").arg(ts.tableName())));
QVERIFY_SQL(q, next());
QDateTime dt1=q.value(0).toDateTime();
QTime t1=q.value(1).toTime();
@@ -1458,17 +1305,15 @@ void tst_QSqlDatabase::psql_bug249059()
QCOMPARE(t1, t2);
}
-// This test should be rewritten to work with Oracle as well - or the Oracle driver
-// should be fixed to make this test pass (handle overflows)
void tst_QSqlDatabase::precisionPolicy()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
-// DBMS_SPECIFIC(db, "QPSQL");
+ TableScope ts(db, "qtest_prec", __FILE__);
+ const auto &tableName = ts.tableName();
QSqlQuery q(db);
- const QString tableName(qTableName("qtest_prec", __FILE__, db));
if(!db.driver()->hasFeature(QSqlDriver::LowPrecisionNumbers))
QSKIP("Driver or database doesn't support setting precision policy");
@@ -1561,11 +1406,10 @@ void tst_QSqlDatabase::infinityAndNan()
QSKIP("checking for infinity/nan currently only works for PostgreSQL");
QSqlQuery q(db);
- const QString tableName(qTableName("infititytest", __FILE__, db));
- tst_Databases::safeDropTables(db, {tableName});
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id smallint, val double precision)").arg(tableName)));
+ TableScope ts(db, "infititytest", __FILE__);
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id smallint, val double precision)").arg(ts.tableName())));
- QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES (?, ?)").arg(tableName)));
+ QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES (?, ?)").arg(ts.tableName())));
q.bindValue(0, 1);
q.bindValue(1, qQNaN());
@@ -1577,7 +1421,7 @@ void tst_QSqlDatabase::infinityAndNan()
q.bindValue(1, -qInf());
QVERIFY_SQL(q, exec());
- QVERIFY_SQL(q, exec(QString("SELECT val FROM %1 ORDER BY id").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("SELECT val FROM %1 ORDER BY id").arg(ts.tableName())));
QVERIFY_SQL(q, next());
QVERIFY(qIsNaN(q.value(0).toDouble()));
@@ -1600,14 +1444,14 @@ void tst_QSqlDatabase::mysqlOdbc_unsignedIntegers()
if (tst_Databases::getDatabaseType(db) != QSqlDriver::MySqlServer || !db.driverName().startsWith("QODBC"))
QSKIP("MySQL through ODBC-driver specific test");
+ TableScope ts(db, "uint", __FILE__);
QSqlQuery q(db);
- const QString tableName(qTableName("uint", __FILE__, db));
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (foo integer(10) unsigned, bar integer(10))").arg(tableName)));
- QVERIFY_SQL(q, exec(QString("INSERT INTO %1 VALUES (-4000000000, -4000000000)").arg(tableName)));
- QVERIFY_SQL(q, exec(QString("INSERT INTO %1 VALUES (4000000000, 4000000000)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (foo integer(10) unsigned, bar integer(10))").arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QString("INSERT INTO %1 VALUES (-4000000000, -4000000000)").arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QString("INSERT INTO %1 VALUES (4000000000, 4000000000)").arg(ts.tableName())));
- QVERIFY_SQL(q, exec(QString("SELECT foo, bar FROM %1").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("SELECT foo, bar FROM %1").arg(ts.tableName())));
QVERIFY(q.next());
QCOMPARE(q.value(0).toString(), QString("0"));
QCOMPARE(q.value(1).toString(), QString("-2147483648"));
@@ -1624,13 +1468,13 @@ void tst_QSqlDatabase::accessOdbc_strings()
if (!tst_Databases::isMSAccess(db))
QSKIP("MS Access specific test");
+ TableScope ts(db, "strings", __FILE__);
QSqlQuery q(db);
- const QString tableName(qTableName("strings", __FILE__, db));
QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (aStr memo, bStr memo, cStr memo, dStr memo"
- ", eStr memo, fStr memo, gStr memo, hStr memo)").arg(tableName)));
+ ", eStr memo, fStr memo, gStr memo, hStr memo)").arg(ts.tableName())));
- QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES (?, ?, ?, ?, ?, ?, ?, ?)").arg(tableName)));
+ QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES (?, ?, ?, ?, ?, ?, ?, ?)").arg(ts.tableName())));
QString aStr, bStr, cStr, dStr, eStr, fStr, gStr, hStr;
q.bindValue(0, aStr.fill('A', 32));
@@ -1644,7 +1488,7 @@ void tst_QSqlDatabase::accessOdbc_strings()
QVERIFY_SQL(q, exec());
- QVERIFY_SQL(q, exec(QString("SELECT aStr, bStr, cStr, dStr, eStr, fStr, gStr, hStr FROM %1").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("SELECT aStr, bStr, cStr, dStr, eStr, fStr, gStr, hStr FROM %1").arg(ts.tableName())));
q.next();
QCOMPARE(q.value(0).toString(), aStr);
QCOMPARE(q.value(1).toString(), bStr);
@@ -1662,9 +1506,10 @@ void tst_QSqlDatabase::ibase_numericFields()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "numericfields", __FILE__);
+ const auto &tableName = ts.tableName();
QSqlQuery q(db);
- const QString tableName(qTableName("numericfields", __FILE__, db));
QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id int not null, num1 NUMERIC(2,1), "
"num2 NUMERIC(5,2), num3 NUMERIC(10,3), "
"num4 NUMERIC(18,4))").arg(tableName)));
@@ -1735,8 +1580,9 @@ void tst_QSqlDatabase::ibase_fetchBlobs()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "qtest_ibaseblobs", __FILE__);
+ const auto &tableName = ts.tableName();
- const QString tableName(qTableName("qtest_ibaseblobs", __FILE__, db));
QSqlQuery q(db);
QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (blob1 BLOB segment size 256)").arg(tableName)));
@@ -1767,13 +1613,11 @@ void tst_QSqlDatabase::ibase_procWithoutReturnValues()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ ProcScope ps(db, "qtest_proc1", __FILE__);
QSqlQuery q(db);
- const QString procName(qTableName("qtest_proc1", __FILE__, db));
- q.exec(QString("drop procedure %1").arg(procName));
- QVERIFY_SQL(q, exec("CREATE PROCEDURE " + procName + " (str VARCHAR(10))\nAS BEGIN\nstr='test';\nEND;"));
- QVERIFY_SQL(q, exec(QString("execute procedure %1('qtest')").arg(procName)));
- q.exec(QString("drop procedure %1").arg(procName));
+ QVERIFY_SQL(q, exec("CREATE PROCEDURE " + ps.name() + " (str VARCHAR(10))\nAS BEGIN\nstr='test';\nEND;"));
+ QVERIFY_SQL(q, exec(QString("execute procedure %1('qtest')").arg(ps.name())));
}
void tst_QSqlDatabase::ibase_procWithReturnValues()
@@ -1781,12 +1625,10 @@ void tst_QSqlDatabase::ibase_procWithReturnValues()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
-
- const QString procName(qTableName("qtest_proc2", __FILE__, db));
+ ProcScope ps(db, "qtest_proc2", __FILE__);
QSqlQuery q(db);
- q.exec(QString("drop procedure %1").arg(procName));
- QVERIFY_SQL(q, exec("CREATE PROCEDURE " + procName + " ("
+ QVERIFY_SQL(q, exec("CREATE PROCEDURE " + ps.name() + " ("
"\nABC INTEGER)"
"\nRETURNS ("
"\nRESULT INTEGER)"
@@ -1797,13 +1639,13 @@ void tst_QSqlDatabase::ibase_procWithReturnValues()
"\nend"));
// Interbase procedures can be executed in two ways: EXECUTE PROCEDURE or SELECT
- QVERIFY_SQL(q, exec(QString("execute procedure %1(123)").arg(procName)));
+ QVERIFY_SQL(q, exec(QString("execute procedure %1(123)").arg(ps.name())));
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), 1230);
- QVERIFY_SQL(q, exec(QString("select result from %1(456)").arg(procName)));
+ QVERIFY_SQL(q, exec(QString("select result from %1(456)").arg(ps.name())));
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), 4560);
- QVERIFY_SQL(q, prepare(QLatin1String("execute procedure ")+procName+QLatin1String("(?)")));
+ QVERIFY_SQL(q, prepare(QLatin1String("execute procedure ") + ps.name() + QLatin1String("(?)")));
q.bindValue(0, 123);
QVERIFY_SQL(q, exec());
QVERIFY_SQL(q, next());
@@ -1812,8 +1654,6 @@ void tst_QSqlDatabase::ibase_procWithReturnValues()
QVERIFY_SQL(q, exec());
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), 4560);
-
- q.exec(QString("drop procedure %1").arg(procName));
}
void tst_QSqlDatabase::formatValueTrimStrings()
@@ -1870,13 +1710,13 @@ void tst_QSqlDatabase::odbc_bindBoolean()
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType == QSqlDriver::MySqlServer)
QSKIP("MySql has inconsistent behaviour of bit field type across versions.");
+ TableScope ts(db, "qtestBindBool", __FILE__);
QSqlQuery q(db);
- const QString tableName = qTableName("qtestBindBool", __FILE__, db);
- QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + "(id int, boolvalue bit)"));
+ QVERIFY_SQL(q, exec("CREATE TABLE " + ts.tableName() + "(id int, boolvalue bit)"));
// Bind and insert
- QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " VALUES(?, ?)"));
+ QVERIFY_SQL(q, prepare("INSERT INTO " + ts.tableName() + " VALUES(?, ?)"));
q.bindValue(0, 1);
q.bindValue(1, true);
QVERIFY_SQL(q, exec());
@@ -1885,7 +1725,7 @@ void tst_QSqlDatabase::odbc_bindBoolean()
QVERIFY_SQL(q, exec());
// Retrive
- QVERIFY_SQL(q, exec("SELECT id, boolvalue FROM " + tableName + " ORDER BY id"));
+ QVERIFY_SQL(q, exec("SELECT id, boolvalue FROM " + ts.tableName() + " ORDER BY id"));
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), 1);
QCOMPARE(q.value(1).toBool(), true);
@@ -1899,7 +1739,8 @@ void tst_QSqlDatabase::odbc_testqGetString()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- const QString testqGetString(qTableName("testqGetString", __FILE__, db));
+ TableScope ts(db, "testqGetString", __FILE__);
+ const auto &testqGetString = ts.tableName();
QSqlQuery q(db);
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
@@ -1929,13 +1770,13 @@ void tst_QSqlDatabase::odbc_testqGetString()
QVERIFY_SQL(q, exec("SELECT id, vcvalue FROM " + testqGetString + " ORDER BY id"));
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), 1);
- QCOMPARE(q.value(1).toString().length(), 65536);
+ QCOMPARE(q.value(1).toString().size(), 65536);
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), 2);
- QCOMPARE(q.value(1).toString().length(), 65537);
+ QCOMPARE(q.value(1).toString().size(), 65537);
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), 3);
- QCOMPARE(q.value(1).toString().length(), 65538);
+ QCOMPARE(q.value(1).toString().size(), 65538);
}
@@ -1954,31 +1795,6 @@ void tst_QSqlDatabase::mysql_multiselect()
QVERIFY_SQL(q, exec("SELECT * FROM " + qtest));
}
-void tst_QSqlDatabase::ibase_useCustomCharset()
-{
- QFETCH(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
- QString nonlatin1string("��");
-
- db.close();
- db.setConnectOptions("ISC_DPB_LC_CTYPE=Latin1");
- db.open();
-
- const QString tableName(qTableName("latin1table", __FILE__, db));
-
- QSqlQuery q(db);
- QEXPECT_FAIL("", "Currently fails, potentially due to invalid test - needs further "
- "investigation - QTBUG-85828", Abort);
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(text VARCHAR(6) CHARACTER SET Latin1)").arg(tableName)));
- QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES(?)").arg(tableName)));
- q.addBindValue(nonlatin1string);
- QVERIFY_SQL(q, exec());
- QVERIFY_SQL(q, exec(QString("SELECT text FROM %1").arg(tableName)));
- QVERIFY_SQL(q, next());
- QCOMPARE(toHex(q.value(0).toString()), toHex(nonlatin1string));
-}
-
void tst_QSqlDatabase::oci_serverDetach()
{
QFETCH(QString, dbName);
@@ -2004,8 +1820,9 @@ void tst_QSqlDatabase::oci_xmltypeSupport()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "qtest_xmltype", __FILE__);
+ const auto &tableName = ts.tableName();
- const QString tableName(qTableName("qtest_xmltype", __FILE__, db));
QString xml("<?xml version=\"1.0\"?>\n<TABLE_NAME>MY_TABLE</TABLE_NAME>\n");
QSqlQuery q(db);
@@ -2083,14 +1900,14 @@ void tst_QSqlDatabase::odbc_uniqueidentifier()
if (dbType != QSqlDriver::MSSqlServer)
QSKIP("SQL Server (ODBC) specific test");
- const QString tableName(qTableName("qtest_sqlguid", __FILE__, db));
+ TableScope ts(db, "qtest_sqlguid", __FILE__);
QString guid = QString("AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE");
QString invalidGuid = QString("GAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE");
QSqlQuery q(db);
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(id uniqueidentifier)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(id uniqueidentifier)").arg(ts.tableName())));
- q.prepare(QString("INSERT INTO %1 VALUES(?)").arg(tableName));;
+ q.prepare(QString("INSERT INTO %1 VALUES(?)").arg(ts.tableName()));
q.addBindValue(guid);
QVERIFY_SQL(q, exec());
@@ -2099,7 +1916,7 @@ void tst_QSqlDatabase::odbc_uniqueidentifier()
Continue);
QVERIFY_SQL(q, exec());
- QVERIFY_SQL(q, exec(QString("SELECT id FROM %1").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("SELECT id FROM %1").arg(ts.tableName())));
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toString(), guid);
}
@@ -2125,20 +1942,20 @@ void tst_QSqlDatabase::odbc_uintfield()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "uint_table", __FILE__);
- const QString tableName(qTableName("uint_table", __FILE__, db));
- unsigned int val = 4294967295U;
+ constexpr auto val = std::numeric_limits<unsigned int>::max();
QSqlQuery q(db);
if ( tst_Databases::isMSAccess( db ) )
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(num number)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(num number)").arg(ts.tableName())));
else
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(num numeric(10))").arg(tableName)));
- q.prepare(QString("INSERT INTO %1 VALUES(?)").arg(tableName));
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(num numeric(10))").arg(ts.tableName())));
+ q.prepare(QString("INSERT INTO %1 VALUES(?)").arg(ts.tableName()));
q.addBindValue(val);
QVERIFY_SQL(q, exec());
- q.exec(QString("SELECT num FROM %1").arg(tableName));
+ q.exec(QString("SELECT num FROM %1").arg(ts.tableName()));
if (q.next())
QCOMPARE(q.value(0).toUInt(), val);
}
@@ -2195,38 +2012,32 @@ void tst_QSqlDatabase::eventNotificationIBase()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
- if (db.driverName().compare(QLatin1String("QIBASE"), Qt::CaseInsensitive))
- QSKIP("QIBASE specific test");
CHECK_DATABASE(db);
- const QString procedureName(qTableName("posteventProc", __FILE__, db));
+ ProcScope ps(db, "posteventProc", __FILE__);
QSqlDriver *driver=db.driver();
- QVERIFY_SQL(*driver, subscribeToNotification(procedureName));
+ QVERIFY_SQL(*driver, subscribeToNotification(ps.name()));
QTest::qWait(300); // Interbase needs some time to call the driver callback.
db.transaction(); // InterBase events are posted from within transactions.
QSqlQuery q(db);
- q.exec(QString("DROP PROCEDURE %1").arg(procedureName));
- q.exec(QString("CREATE PROCEDURE %1\nAS BEGIN\nPOST_EVENT '%1';\nEND;").arg(procedureName));
- q.exec(QString("EXECUTE PROCEDURE %1").arg(procedureName));
- QSignalSpy spy(driver, QOverload<const QString &, QSqlDriver::NotificationSource, const QVariant &>::of(&QSqlDriver::notification));
+ q.exec(QString("CREATE PROCEDURE %1\nAS BEGIN\nPOST_EVENT '%1';\nEND;").arg(ps.name()));
+ q.exec(QString("EXECUTE PROCEDURE %1").arg(ps.name()));
+ QSignalSpy spy(driver, &QSqlDriver::notification);
db.commit(); // No notifications are posted until the transaction is committed.
// Interbase needs some time to post the notification and call the driver callback.
// This happends from another thread, and we have to process events in order for the
// event handler in the driver to be executed and emit the notification signal.
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QList<QVariant> arguments = spy.takeFirst();
- QCOMPARE(arguments.at(0).toString(), procedureName);
- QVERIFY_SQL(*driver, unsubscribeFromNotification(procedureName));
- q.exec(QString("DROP PROCEDURE %1").arg(procedureName));
+ QCOMPARE(arguments.at(0).toString(), ps.name());
+ QVERIFY_SQL(*driver, unsubscribeFromNotification(ps.name()));
}
void tst_QSqlDatabase::eventNotificationPSQL()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
- if (db.driverName().compare(QLatin1String("QPSQL"), Qt::CaseInsensitive))
- QSKIP("QPSQL specific test");
CHECK_DATABASE(db);
QSqlQuery query(db);
@@ -2234,9 +2045,9 @@ void tst_QSqlDatabase::eventNotificationPSQL()
QString payload = "payload";
QSqlDriver *driver = db.driver();
QVERIFY_SQL(*driver, subscribeToNotification(procedureName));
- QSignalSpy spy(driver, QOverload<const QString &, QSqlDriver::NotificationSource, const QVariant &>::of(&QSqlDriver::notification));
+ QSignalSpy spy(driver, &QSqlDriver::notification);
query.exec(QString("NOTIFY \"%1\", '%2'").arg(procedureName).arg(payload));
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QList<QVariant> arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toString(), procedureName);
QCOMPARE(qvariant_cast<QSqlDriver::NotificationSource>(arguments.at(1)), QSqlDriver::SelfSource);
@@ -2248,26 +2059,23 @@ void tst_QSqlDatabase::eventNotificationSQLite()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
- if (db.driverName().compare(QLatin1String("QSQLITE"), Qt::CaseInsensitive))
- QSKIP("QSQLITE specific test");
CHECK_DATABASE(db);
- const QString tableName(qTableName("sqlitnotifytest", __FILE__, db));
- const auto noEscapeTableName(qTableName("sqlitnotifytest", __FILE__, db, false));
- tst_Databases::safeDropTable(db, tableName);
+ TableScope ts(db, "sqlitnotifytest", __FILE__);
+ TableScope tsEscape(db, "sqlitnotifytest", __FILE__, false);
QSqlDriver *driver = db.driver();
- QSignalSpy spy(driver, QOverload<const QString &, QSqlDriver::NotificationSource, const QVariant &>::of(&QSqlDriver::notification));
+ QSignalSpy spy(driver, &QSqlDriver::notification);
QSqlQuery q(db);
- QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + " (id INTEGER, realVal REAL)"));
- driver->subscribeToNotification(noEscapeTableName);
- QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id, realVal) VALUES (1, 2.3)"));
- QTRY_COMPARE(spy.count(), 1);
+ QVERIFY_SQL(q, exec("CREATE TABLE " + ts.tableName() + " (id INTEGER, realVal REAL)"));
+ driver->subscribeToNotification(tsEscape.tableName());
+ QVERIFY_SQL(q, exec("INSERT INTO " + ts.tableName() + " (id, realVal) VALUES (1, 2.3)"));
+ QTRY_COMPARE(spy.size(), 1);
QList<QVariant> arguments = spy.takeFirst();
- QCOMPARE(arguments.at(0).toString(), noEscapeTableName);
- driver->unsubscribeFromNotification(noEscapeTableName);
- QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id, realVal) VALUES (1, 2.3)"));
- QTRY_COMPARE(spy.count(), 0);
+ QCOMPARE(arguments.at(0).toString(), tsEscape.tableName());
+ driver->unsubscribeFromNotification(tsEscape.tableName());
+ QVERIFY_SQL(q, exec("INSERT INTO " + ts.tableName() + " (id, realVal) VALUES (1, 2.3)"));
+ QTRY_COMPARE(spy.size(), 0);
}
void tst_QSqlDatabase::sqlite_bindAndFetchUInt()
@@ -2275,16 +2083,13 @@ void tst_QSqlDatabase::sqlite_bindAndFetchUInt()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- if (db.driverName().startsWith("QSQLITE2"))
- QSKIP("SQLite3 specific test");
-
+ TableScope ts(db, "uint_test", __FILE__);
QSqlQuery q(db);
- const QString tableName(qTableName("uint_test", __FILE__, db));
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(uint_field UNSIGNED INTEGER)").arg(tableName)));
- QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES(?)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(uint_field UNSIGNED INTEGER)").arg(ts.tableName())));
+ QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES(?)").arg(ts.tableName())));
q.addBindValue(4000000000U);
QVERIFY_SQL(q, exec());
- QVERIFY_SQL(q, exec(QString("SELECT uint_field FROM %1").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("SELECT uint_field FROM %1").arg(ts.tableName())));
QVERIFY_SQL(q, next());
// All integers in SQLite are signed, so even though we bound the value
@@ -2391,24 +2196,21 @@ void tst_QSqlDatabase::sqlite_enableRegexp()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- if (db.driverName().startsWith("QSQLITE2"))
- QSKIP("SQLite3 specific test");
-
db.close();
db.setConnectOptions("QSQLITE_ENABLE_REGEXP");
QVERIFY_SQL(db, open());
+ TableScope ts(db, "regexp_test", __FILE__);
QSqlQuery q(db);
- const QString tableName(qTableName("regexp_test", __FILE__, db));
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(text TEXT)").arg(tableName)));
- QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES(?)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(text TEXT)").arg(ts.tableName())));
+ QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES(?)").arg(ts.tableName())));
q.addBindValue("a0");
QVERIFY_SQL(q, exec());
q.addBindValue("a1");
QVERIFY_SQL(q, exec());
QVERIFY_SQL(q, exec(QString("SELECT text FROM %1 WHERE text REGEXP 'a[^0]' "
- "ORDER BY text").arg(tableName)));
+ "ORDER BY text").arg(ts.tableName())));
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toString(), QString("a1"));
QFAIL_SQL(q, next());
@@ -2441,13 +2243,12 @@ void tst_QSqlDatabase::sqlite_check_json1()
QSqlQuery q(db);
const QString json1("{\"id\":1}");
- const QString tableName(qTableName("sqlite_check_json1", __FILE__, db));
- tst_Databases::safeDropTable(db, tableName);
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(text TEXT)").arg(tableName)));
- QVERIFY_SQL(q, exec(QString("INSERT INTO %1 VALUES(json('%2'))").arg(tableName, json1)));
- QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES(?)").arg(tableName)));
+ TableScope ts(db, "sqlite_check_json1", __FILE__);
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE %1(text TEXT)").arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QString("INSERT INTO %1 VALUES(json('%2'))").arg(ts.tableName(), json1)));
+ QVERIFY_SQL(q, prepare(QString("INSERT INTO %1 VALUES(?)").arg(ts.tableName())));
q.addBindValue("json('{\"id\":2}')");
- QVERIFY_SQL(q, prepare(QString("SELECT * from %1 WHERE text = json('%2')").arg(tableName, json1)));
+ QVERIFY_SQL(q, prepare(QString("SELECT * from %1 WHERE text = json('%2')").arg(ts.tableName(), json1)));
QVERIFY_SQL(q, exec());
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toString(), json1);
@@ -2459,6 +2260,10 @@ void tst_QSqlDatabase::cloneDatabase()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ const auto wrapup = qScopeGuard([&]() {
+ QSqlDatabase::removeDatabase("clonedDatabase");
+ QSqlDatabase::removeDatabase("clonedDatabaseCopy");
+ });
{
QSqlDatabase clonedDatabase = QSqlDatabase::cloneDatabase(db, "clonedDatabase");
QCOMPARE(clonedDatabase.databaseName(), db.databaseName());
@@ -2500,6 +2305,7 @@ public slots:
QSqlDatabase invalidDb = QSqlDatabase::database("invalid");
QVERIFY(!invalidDb.isValid());
+ const auto wrapup = qScopeGuard([&]() { QSqlDatabase::removeDatabase("CloneDB"); });
{
QSqlDatabase clonedDatabase = QSqlDatabase::cloneDatabase(dbName, "CloneDB");
QVERIFY(!clonedDatabase.isOpen());
diff --git a/tests/auto/sql/kernel/qsqldriver/CMakeLists.txt b/tests/auto/sql/kernel/qsqldriver/CMakeLists.txt
index 0acfed40ee..21dd3a6417 100644
--- a/tests/auto/sql/kernel/qsqldriver/CMakeLists.txt
+++ b/tests/auto/sql/kernel/qsqldriver/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsqldriver.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqldriver Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqldriver LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqldriver
SOURCES
tst_qsqldriver.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Sql
Qt::SqlPrivate
diff --git a/tests/auto/sql/kernel/qsqldriver/tst_qsqldriver.cpp b/tests/auto/sql/kernel/qsqldriver/tst_qsqldriver.cpp
index 70e5b43845..fb8d804843 100644
--- a/tests/auto/sql/kernel/qsqldriver/tst_qsqldriver.cpp
+++ b/tests/auto/sql/kernel/qsqldriver/tst_qsqldriver.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 <QTest>
@@ -60,6 +35,7 @@ static bool driverSupportsDefaultValues(QSqlDriver::DbmsType dbType)
case QSqlDriver::SQLite:
case QSqlDriver::PostgreSQL:
case QSqlDriver::Oracle:
+ case QSqlDriver::MySqlServer:
return true;
default:
break;
@@ -77,47 +53,48 @@ void tst_QSqlDriver::initTestCase_data()
void tst_QSqlDriver::recreateTestTables(QSqlDatabase db)
{
QSqlQuery q(db);
- const QString relTEST1(qTableName("relTEST1", __FILE__, db));
+ const QString tableName(qTableName("relTEST1", __FILE__, db));
+ tst_Databases::safeDropTables(db, {tableName});
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType == QSqlDriver::PostgreSQL)
QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
- tst_Databases::safeDropTable( db, relTEST1 );
QString doubleField;
if (dbType == QSqlDriver::SQLite)
doubleField = "more_data double";
else if (dbType == QSqlDriver::Oracle)
doubleField = "more_data number(8,7)";
- else if (dbType == QSqlDriver::PostgreSQL)
+ else if (dbType == QSqlDriver::PostgreSQL || dbType == QSqlDriver::MimerSQL)
doubleField = "more_data double precision";
else if (dbType == QSqlDriver::Interbase)
doubleField = "more_data numeric(8,7)";
else
doubleField = "more_data double(8,7)";
const QString defValue(driverSupportsDefaultValues(dbType) ? QStringLiteral("DEFAULT 'defaultVal'") : QString());
- QVERIFY_SQL( q, exec("create table " + relTEST1 +
+ QVERIFY_SQL( q, exec("create table " + tableName +
" (id int not null primary key, name varchar(20) " + defValue + ", title_key int, another_title_key int, " + doubleField + QLatin1Char(')')));
- QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(1, 'harry', 1, 2, 1.234567)"));
- QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(2, 'trond', 2, 1, 8.901234)"));
- QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(3, 'vohi', 1, 2, 5.678901)"));
- QVERIFY_SQL( q, exec("insert into " + relTEST1 + " values(4, 'boris', 2, 2, 2.345678)"));
+ QVERIFY_SQL( q, exec("insert into " + tableName + " values(1, 'harry', 1, 2, 1.234567)"));
+ QVERIFY_SQL( q, exec("insert into " + tableName + " values(2, 'trond', 2, 1, 8.901234)"));
+ QVERIFY_SQL( q, exec("insert into " + tableName + " values(3, 'vohi', 1, 2, 5.678901)"));
+ QVERIFY_SQL( q, exec("insert into " + tableName + " values(4, 'boris', 2, 2, 2.345678)"));
}
void tst_QSqlDriver::initTestCase()
{
- foreach (const QString &dbname, dbs.dbNames)
+ for (const QString &dbname : std::as_const(dbs.dbNames))
recreateTestTables(QSqlDatabase::database(dbname));
}
void tst_QSqlDriver::cleanupTestCase()
{
- foreach (const QString &dbName, dbs.dbNames) {
+ for (const QString &dbName : std::as_const(dbs.dbNames)) {
QSqlDatabase db = QSqlDatabase::database(dbName);
- tst_Databases::safeDropTable(db, qTableName("relTEST1", __FILE__, db));
+ QStringList tables = {qTableName("relTEST1", __FILE__, db)};
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType == QSqlDriver::Oracle)
- tst_Databases::safeDropTable(db, qTableName("clobTable", __FILE__, db));
+ tables.push_back(qTableName("clobTable", __FILE__, db));
+ tst_Databases::safeDropTables(db, tables);
}
dbs.close();
}
@@ -136,7 +113,7 @@ void tst_QSqlDriver::record()
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- QString tablename(qTableName("relTEST1", __FILE__, db));
+ QString tablename(qTableName("relTEST1", __FILE__, db, false));
QStringList fields;
fields << "id" << "name" << "title_key" << "another_title_key" << "more_data";
@@ -150,14 +127,20 @@ void tst_QSqlDriver::record()
QCOMPARE(rec.field(1).length(), 20);
if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2)
- for(int i = 0; i < fields.count(); ++i)
+ for(int i = 0; i < fields.size(); ++i)
fields[i] = fields[i].toUpper();
- for (int i = 0; i < fields.count(); ++i)
+ for (int i = 0; i < fields.size(); ++i)
QCOMPARE(rec.fieldName(i), fields[i]);
- if (driverSupportsDefaultValues(dbType))
- QCOMPARE(rec.field(QStringLiteral("name")).defaultValue().toString(), QStringLiteral("defaultVal"));
+ if (driverSupportsDefaultValues(dbType)) {
+ auto defVal = rec.field(QStringLiteral("name")).defaultValue().toString();
+ if (dbType == QSqlDriver::MySqlServer && defVal.startsWith('\'') && defVal.endsWith('\'')) {
+ qDebug() << "MariaDB 10.6 default string value is escaped:" << defVal;
+ defVal = defVal.mid(1, defVal.size() - 2);
+ }
+ QCOMPARE(defVal, QStringLiteral("defaultVal"));
+ }
if (dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2)
tablename = tablename.toUpper();
@@ -170,7 +153,7 @@ void tst_QSqlDriver::record()
QCOMPARE(rec.count(), 5);
}
- for (int i = 0; i < fields.count(); ++i)
+ for (int i = 0; i < fields.size(); ++i)
QCOMPARE(rec.fieldName(i), fields[i]);
if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2)
@@ -180,8 +163,9 @@ void tst_QSqlDriver::record()
//check that we can't get records using incorrect tablename casing that's been quoted
rec = db.driver()->record(db.driver()->escapeIdentifier(tablename,QSqlDriver::TableName));
- if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::SQLite || dbType == QSqlDriver::Sybase
- || dbType == QSqlDriver::MSSqlServer || tst_Databases::isMSAccess(db))
+ if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::SQLite
+ || dbType == QSqlDriver::Sybase || dbType == QSqlDriver::MSSqlServer
+ || tst_Databases::isMSAccess(db) || dbType == QSqlDriver::MimerSQL)
QCOMPARE(rec.count(), 5); //mysql, sqlite and tds will match
else
QCOMPARE(rec.count(), 0);
@@ -194,7 +178,7 @@ void tst_QSqlDriver::primaryIndex()
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- QString tablename(qTableName("relTEST1", __FILE__, db));
+ QString tablename(qTableName("relTEST1", __FILE__, db, false));
//check that we can get primary index using unquoted mixed case table name
QSqlIndex index = db.driver()->primaryIndex(tablename);
QCOMPARE(index.count(), 1);
@@ -230,22 +214,23 @@ void tst_QSqlDriver::primaryIndex()
tablename = tablename.toUpper();
index = db.driver()->primaryIndex(db.driver()->escapeIdentifier(tablename, QSqlDriver::TableName));
- if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::SQLite || dbType == QSqlDriver::Sybase
- || dbType == QSqlDriver::MSSqlServer || tst_Databases::isMSAccess(db))
+ if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::SQLite
+ || dbType == QSqlDriver::Sybase || dbType == QSqlDriver::MSSqlServer
+ || tst_Databases::isMSAccess(db) || dbType == QSqlDriver::MimerSQL)
QCOMPARE(index.count(), 1); //mysql will always find the table name regardless of casing
else
QCOMPARE(index.count(), 0);
// Test getting a primary index for a table with a clob in it - QTBUG-64427
if (dbType == QSqlDriver::Oracle) {
- const QString clobTable(qTableName("clobTable", __FILE__, db));
+ TableScope ts(db, "clobTable", __FILE__);
QSqlQuery qry(db);
- QVERIFY_SQL(qry, exec("CREATE TABLE " + clobTable + " (id INTEGER, clobField CLOB)"));
- QVERIFY_SQL(qry, exec("CREATE UNIQUE INDEX " + clobTable + "IDX ON " + clobTable + " (id)"));
- QVERIFY_SQL(qry, exec("ALTER TABLE " + clobTable + " ADD CONSTRAINT " + clobTable +
+ QVERIFY_SQL(qry, exec("CREATE TABLE " + ts.tableName() + " (id INTEGER, clobField CLOB)"));
+ QVERIFY_SQL(qry, exec("CREATE UNIQUE INDEX " + ts.tableName() + "IDX ON " + ts.tableName() + " (id)"));
+ QVERIFY_SQL(qry, exec("ALTER TABLE " + ts.tableName() + " ADD CONSTRAINT " + ts.tableName() +
"PK PRIMARY KEY(id)"));
- QVERIFY_SQL(qry, exec("ALTER TABLE " + clobTable + " MODIFY (id NOT NULL ENABLE)"));
- const QSqlIndex primaryIndex = db.driver()->primaryIndex(clobTable);
+ QVERIFY_SQL(qry, exec("ALTER TABLE " + ts.tableName() + " MODIFY (id NOT NULL ENABLE)"));
+ const QSqlIndex primaryIndex = db.driver()->primaryIndex(ts.tableName());
QCOMPARE(primaryIndex.count(), 1);
QCOMPARE(primaryIndex.fieldName(0), QStringLiteral("ID"));
}
diff --git a/tests/auto/sql/kernel/qsqlerror/CMakeLists.txt b/tests/auto/sql/kernel/qsqlerror/CMakeLists.txt
index d5100c1836..b604399ef1 100644
--- a/tests/auto/sql/kernel/qsqlerror/CMakeLists.txt
+++ b/tests/auto/sql/kernel/qsqlerror/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qsqlerror.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqlerror Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqlerror LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqlerror
SOURCES
tst_qsqlerror.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Sql
)
diff --git a/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp b/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp
index ab7489a145..2be7d08cf8 100644
--- a/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.cpp
+++ b/tests/auto/sql/kernel/qsqlerror/tst_qsqlerror.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 <QTest>
@@ -133,12 +108,16 @@ void tst_QSqlError::moveOperator()
void tst_QSqlError::operators()
{
- QSqlError error1(QString(), QString(), QSqlError::NoError);
- QSqlError error2(QString(), QString(), QSqlError::NoError);
- QSqlError error3(QString(), QString(), QSqlError::UnknownError);
+ QSqlError error1(QStringLiteral("a"), QStringLiteral("b"), QSqlError::NoError, QStringLiteral("ec1"));
+ QSqlError error2(QStringLiteral("c"), QStringLiteral("d"), QSqlError::NoError, QStringLiteral("ec1"));
+ QSqlError error3(QString(), QString(), QSqlError::UnknownError, QStringLiteral("ec1"));
+ QSqlError error4(QString(), QString(), QSqlError::NoError, QStringLiteral("ec2"));
+ QSqlError error5(QString(), QString(), QSqlError::UnknownError, QStringLiteral("ec2"));
QCOMPARE(error1, error2);
QVERIFY(error1 != error3);
+ QVERIFY(error1 != error4);
+ QVERIFY(error4 != error5);
}
void tst_QSqlError::qtbug_74575()
diff --git a/tests/auto/sql/kernel/qsqlfield/CMakeLists.txt b/tests/auto/sql/kernel/qsqlfield/CMakeLists.txt
index 7f8c97f584..2fef227201 100644
--- a/tests/auto/sql/kernel/qsqlfield/CMakeLists.txt
+++ b/tests/auto/sql/kernel/qsqlfield/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qsqlfield.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqlfield Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqlfield LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqlfield
SOURCES
tst_qsqlfield.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Sql
)
diff --git a/tests/auto/sql/kernel/qsqlfield/tst_qsqlfield.cpp b/tests/auto/sql/kernel/qsqlfield/tst_qsqlfield.cpp
index 09e33cebee..5e012ba39c 100644
--- a/tests/auto/sql/kernel/qsqlfield/tst_qsqlfield.cpp
+++ b/tests/auto/sql/kernel/qsqlfield/tst_qsqlfield.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 <QTest>
@@ -64,6 +39,7 @@ private slots:
void clear();
void setTableName_data();
void setTableName();
+ void moveSemantics();
};
// Testing get/set functions
@@ -369,5 +345,24 @@ void tst_QSqlField::setTableName()
QCOMPARE(field.tableName(), tableName);
}
+void tst_QSqlField::moveSemantics()
+{
+ QSqlField field("test", QMetaType(QMetaType::QString), "testTable");
+ QSqlField empty;
+ field.setValue("string");
+ auto moved = std::move(field);
+ // `field` is now partially-formed
+
+ // moving transfers state:
+ QCOMPARE(moved.value().toString(), QLatin1String("string"));
+
+ // moved-from objects can be assigned-to:
+ field = empty;
+ QVERIFY(field.value().isNull());
+
+ // moved-from object can be destroyed:
+ moved = std::move(field);
+}
+
QTEST_MAIN(tst_QSqlField)
#include "tst_qsqlfield.moc"
diff --git a/tests/auto/sql/kernel/qsqlindex/CMakeLists.txt b/tests/auto/sql/kernel/qsqlindex/CMakeLists.txt
new file mode 100644
index 0000000000..3373948b5f
--- /dev/null
+++ b/tests/auto/sql/kernel/qsqlindex/CMakeLists.txt
@@ -0,0 +1,21 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qsqlindex Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqlindex LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qsqlindex
+ SOURCES
+ tst_qsqlindex.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Sql
+ Qt::SqlPrivate
+)
diff --git a/tests/auto/sql/kernel/qsqlindex/tst_qsqlindex.cpp b/tests/auto/sql/kernel/qsqlindex/tst_qsqlindex.cpp
new file mode 100644
index 0000000000..2f44359133
--- /dev/null
+++ b/tests/auto/sql/kernel/qsqlindex/tst_qsqlindex.cpp
@@ -0,0 +1,126 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QtSql/QtSql>
+
+#include <QtCore/QDateTime>
+#include <QtCore/QTimeZone>
+
+#include <numeric>
+
+#include "../qsqldatabase/tst_databases.h"
+
+using namespace Qt::StringLiterals;
+
+QString qtest;
+
+class tst_QSqlIndex : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QSqlIndex();
+
+private slots:
+ void construction_data();
+ void construction();
+ void assignment_data();
+ void assignment();
+ void basicFunctions();
+};
+
+tst_QSqlIndex::tst_QSqlIndex()
+{
+}
+
+void tst_QSqlIndex::construction_data()
+{
+ QTest::addColumn<QSqlIndex>("sqlIndex");
+ QTest::addColumn<QString>("cursorName");
+ QTest::addColumn<QString>("name");
+
+ const QString cursorName("cusorName"_L1);
+ const QString name("name"_L1);
+ QSqlIndex sqlIndex(cursorName, name);
+ QTest::newRow("ctor1") << QSqlIndex() << QString() << QString();
+ QTest::newRow("ctor2") << sqlIndex << cursorName << name;
+ QTest::newRow("copy ctor") << QSqlIndex(sqlIndex) << cursorName << name;
+ QTest::newRow("move ctor") << QSqlIndex(std::move(sqlIndex)) << cursorName << name;
+}
+
+void tst_QSqlIndex::construction()
+{
+ QFETCH(QSqlIndex, sqlIndex);
+ QFETCH(QString, cursorName);
+ QFETCH(QString, name);
+
+ QCOMPARE(sqlIndex.cursorName(), cursorName);
+ QCOMPARE(sqlIndex.name(), name);
+ QCOMPARE(sqlIndex.isDescending(0), false);
+ QCOMPARE(sqlIndex.count(), 0);
+}
+
+void tst_QSqlIndex::assignment_data()
+{
+ QTest::addColumn<QSqlIndex>("sqlIndex");
+ QTest::addColumn<QString>("cursorName");
+ QTest::addColumn<QString>("name");
+
+ const QString cursorName("cusorName"_L1);
+ const QString name("name"_L1);
+ QSqlIndex sqlIndex(cursorName, name);
+ QSqlIndex sqlIndex1 = sqlIndex;
+ QSqlIndex sqlIndex2 = std::move(sqlIndex);
+ sqlIndex = std::move(sqlIndex2);
+ QTest::newRow("copy assignment") << sqlIndex1 << cursorName << name;
+ QTest::newRow("move assignment") << sqlIndex << cursorName << name;
+}
+
+void tst_QSqlIndex::assignment()
+{
+ QFETCH(QSqlIndex, sqlIndex);
+ QFETCH(QString, cursorName);
+ QFETCH(QString, name);
+
+ QCOMPARE(sqlIndex.cursorName(), cursorName);
+ QCOMPARE(sqlIndex.name(), name);
+ QCOMPARE(sqlIndex.isDescending(0), false);
+ QCOMPARE(sqlIndex.count(), 0);
+}
+
+void tst_QSqlIndex::basicFunctions()
+{
+ QSqlIndex sqlIndex("cursorName"_L1, "name"_L1);
+ const QSqlField f1("field1"_L1, QMetaType(QMetaType::UInt), "table1"_L1);
+ const QSqlField f2("field2"_L1, QMetaType(QMetaType::Double), "table2"_L1);
+
+ QCOMPARE(sqlIndex.cursorName(), "cursorName"_L1);
+ sqlIndex.setCursorName("updatedCursorName"_L1);
+ QCOMPARE(sqlIndex.name(), "name"_L1);
+ sqlIndex.setName("updatedName"_L1);
+ QCOMPARE(sqlIndex.cursorName(), "updatedCursorName"_L1);
+ QCOMPARE(sqlIndex.name(), "updatedName"_L1);
+
+ sqlIndex.append(f1);
+ QCOMPARE(sqlIndex.count(), 1);
+ QCOMPARE(sqlIndex.isDescending(0), false);
+
+ sqlIndex.append(f2, true);
+ QCOMPARE(sqlIndex.count(), 2);
+ QCOMPARE(sqlIndex.isDescending(0), false);
+ QCOMPARE(sqlIndex.isDescending(1), true);
+
+ sqlIndex.setDescending(0, true);
+ sqlIndex.setDescending(1, false);
+ sqlIndex.setDescending(2, true);
+ QCOMPARE(sqlIndex.count(), 2);
+ QCOMPARE(sqlIndex.isDescending(0), true);
+ QCOMPARE(sqlIndex.isDescending(1), false);
+
+ QCOMPARE(sqlIndex.field(0), f1);
+ QCOMPARE(sqlIndex.field(1), f2);
+}
+
+QTEST_MAIN(tst_QSqlIndex)
+#include "tst_qsqlindex.moc"
diff --git a/tests/auto/sql/kernel/qsqlquery/CMakeLists.txt b/tests/auto/sql/kernel/qsqlquery/CMakeLists.txt
index f00845a7cf..e5a5b2b2f8 100644
--- a/tests/auto/sql/kernel/qsqlquery/CMakeLists.txt
+++ b/tests/auto/sql/kernel/qsqlquery/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsqlquery.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqlquery Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqlquery LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqlquery
SOURCES
tst_qsqlquery.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Sql
Qt::SqlPrivate
diff --git a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
index cbc2cc2c1b..56fb5cd05f 100644
--- a/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
+++ b/tests/auto/sql/kernel/qsqlquery/tst_qsqlquery.cpp
@@ -1,38 +1,18 @@
-/****************************************************************************
-**
-** 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtSql/QtSql>
+#include <QtCore/QDateTime>
+#include <QtCore/QTimeZone>
+
#include <numeric>
#include "../qsqldatabase/tst_databases.h"
+using namespace Qt::StringLiterals;
+
QString qtest;
class tst_QSqlQuery : public QObject
@@ -41,12 +21,10 @@ class tst_QSqlQuery : public QObject
public:
tst_QSqlQuery();
- virtual ~tst_QSqlQuery();
public slots:
void initTestCase();
void cleanupTestCase();
- void init();
void cleanup();
private slots:
@@ -80,8 +58,6 @@ private slots:
void last();
void seek_data() { generic_data(); }
void seek();
- void transaction_data() { generic_data(); }
- void transaction();
void record_data() { generic_data(); }
void record();
void record_sqlite_data() { generic_data("QSQLITE"); }
@@ -101,9 +77,10 @@ private slots:
void psql_forwardOnlyQueryResultsLost_data() { generic_data("QPSQL"); }
void psql_forwardOnlyQueryResultsLost();
- // bug specific tests
- void tds_bitField_data() { generic_data("QTDS"); }
- void tds_bitField();
+ void positionalBindingEnabled_data() { generic_data(); }
+ void positionalBindingEnabled();
+
+ // Bug-specific tests:
void oci_nullBlob_data() { generic_data("QOCI"); }
void oci_nullBlob();
void blob_data() { generic_data(); }
@@ -196,11 +173,11 @@ private slots:
void task_250026();
void crashQueryOnCloseDatabase();
- void task_233829_data() { generic_data("QPSQL"); }
- void task_233829();
+ void testNaN_data() { generic_data("QPSQL"); }
+ void testNaN();
- void QTBUG_12477_data() { generic_data("QPSQL"); }
- void QTBUG_12477();
+ void psqlNumericMetadata_data() { generic_data("QPSQL"); }
+ void psqlNumericMetadata();
void sqlServerReturn0_data() { generic_data(); }
void sqlServerReturn0();
@@ -227,9 +204,9 @@ private slots:
void QTBUG_21884_data() { generic_data("QSQLITE"); }
void QTBUG_21884();
void QTBUG_16967_data() { generic_data("QSQLITE"); }
- void QTBUG_16967(); //clean close
+ void QTBUG_16967(); // clean close
void QTBUG_23895_data() { generic_data("QSQLITE"); }
- void QTBUG_23895(); //sqlite boolean type
+ void QTBUG_23895(); // sqlite boolean type
void QTBUG_14904_data() { generic_data("QSQLITE"); }
void QTBUG_14904();
@@ -251,6 +228,9 @@ private slots:
void sqlite_real_data() { generic_data("QSQLITE"); }
void sqlite_real();
+ void prepared_query_json_row_data() { generic_data(); }
+ void prepared_query_json_row();
+
void aggregateFunctionTypes_data() { generic_data(); }
void aggregateFunctionTypes();
@@ -263,18 +243,33 @@ private slots:
void QTBUG_73286_data() { generic_data("QODBC"); }
void QTBUG_73286();
+ void insertVarChar1_data() { generic_data("QODBC"); }
+ void insertVarChar1();
+
void dateTime_data();
void dateTime();
void ibaseArray_data() { generic_data("QIBASE"); }
void ibaseArray();
+ void ibaseDateTimeWithTZ_data();
+ void ibaseDateTimeWithTZ();
+ void ibaseTimeStampTzArray_data() { generic_data("QIBASE"); }
+ void ibaseTimeStampTzArray();
+
+ void psqlJsonOperator_data() { generic_data("QPSQL"); }
+ void psqlJsonOperator();
+
+ // Double addDatabase() with same name leaves system in a state that breaks
+ // invalidQuery() if run later; so put this one last !
+ void prematureExec_data() { generic_data(); }
+ void prematureExec();
private:
// returns all database connections
void generic_data(const QString &engine=QString());
- void dropTestTables( QSqlDatabase db );
- void createTestTables( QSqlDatabase db );
- void populateTestTables( QSqlDatabase db );
+ void dropTestTables(QSqlDatabase db);
+ void createTestTables(QSqlDatabase db);
+ void populateTestTables(QSqlDatabase db);
tst_Databases dbs;
};
@@ -285,369 +280,329 @@ tst_QSqlQuery::tst_QSqlQuery()
qtest = qTableName("qtest", __FILE__, static_qtest_db);
}
-tst_QSqlQuery::~tst_QSqlQuery()
-{
-}
-
void tst_QSqlQuery::initTestCase()
{
QVERIFY(dbs.open());
- for ( QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it ) {
- QSqlDatabase db = QSqlDatabase::database(( *it ) );
- CHECK_DATABASE( db );
- dropTestTables( db ); //in case of leftovers
- createTestTables( db );
- populateTestTables( db );
+ for (const QString &name : std::as_const(dbs.dbNames)) {
+ QSqlDatabase db = QSqlDatabase::database(name);
+ CHECK_DATABASE(db);
+ dropTestTables(db); // in case of leftovers
+ createTestTables(db);
+ populateTestTables(db);
}
}
void tst_QSqlQuery::cleanupTestCase()
{
- for ( QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it ) {
- QSqlDatabase db = QSqlDatabase::database(( *it ) );
- CHECK_DATABASE( db );
- dropTestTables( db );
+ for (const QString &name : std::as_const(dbs.dbNames)) {
+ QSqlDatabase db = QSqlDatabase::database(name);
+ CHECK_DATABASE(db);
+ dropTestTables(db);
}
dbs.close();
}
-void tst_QSqlQuery::init()
-{
-}
-
void tst_QSqlQuery::cleanup()
{
if (QTest::currentTestFunction() == QLatin1String("crashQueryOnCloseDatabase"))
return;
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if ( QTest::currentTestFunction() == QLatin1String( "numRowsAffected" )
- || QTest::currentTestFunction() == QLatin1String( "transactions" )
- || QTest::currentTestFunction() == QLatin1String( "size" )
- || QTest::currentTestFunction() == QLatin1String( "isActive" )
- || QTest::currentTestFunction() == QLatin1String( "lastInsertId" ) ) {
- populateTestTables( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ if (QTest::currentTestFunction() == QLatin1String("numRowsAffected")
+ || QTest::currentTestFunction() == QLatin1String("transactions")
+ || QTest::currentTestFunction() == QLatin1String("size")
+ || QTest::currentTestFunction() == QLatin1String("isActive")
+ || QTest::currentTestFunction() == QLatin1String("lastInsertId")) {
+ populateTestTables(db);
}
- if (QTest::currentTestFailed() && (dbType == QSqlDriver::Oracle || db.driverName().startsWith("QODBC"))) {
- //since Oracle ODBC totally craps out on error, we init again
+ if (QTest::currentTestFailed() && (tst_Databases::getDatabaseType(db) == QSqlDriver::Oracle
+ || db.driverName().startsWith("QODBC"))) {
+ // Since Oracle ODBC totally craps out on error, we init again:
db.close();
db.open();
}
}
-void tst_QSqlQuery::generic_data(const QString& engine)
+void tst_QSqlQuery::generic_data(const QString &engine)
{
- if ( dbs.fillTestTable(engine) == 0 ) {
- if(engine.isEmpty())
- QSKIP( "No database drivers are available in this Qt configuration");
- else
- QSKIP( (QString("No database drivers of type %1 are available in this Qt configuration").arg(engine)).toLocal8Bit());
- }
+ if (dbs.fillTestTable(engine))
+ return;
+
+ if (engine.isEmpty())
+ QSKIP("No database drivers are available in this Qt configuration");
+
+ QSKIP(qPrintable(QLatin1String("No database drivers of type %1 "
+ "are available in this Qt configuration").arg(engine)));
}
-void tst_QSqlQuery::dropTestTables( QSqlDatabase db )
+void tst_QSqlQuery::dropTestTables(QSqlDatabase db)
{
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
QStringList tablenames;
- // drop all the table in case a testcase failed
+ // Drop all the table in case a testcase failed:
tablenames << qtest
<< qTableName("qtest_null", __FILE__, db)
- << qTableName("qtest_writenull", __FILE__, db)
- << qTableName("qtest_blob", __FILE__, db)
- << qTableName("qtest_bittest", __FILE__, db)
- << qTableName("qtest_nullblob", __FILE__, db)
- << qTableName("qtest_rawtest", __FILE__, db)
- << qTableName("qtest_precision", __FILE__, db)
- << qTableName("qtest_prepare", __FILE__, db)
- << qTableName("qtestj1", __FILE__, db)
- << qTableName("qtestj2", __FILE__, db)
- << qTableName("char1Select", __FILE__, db)
- << qTableName("char1SU", __FILE__, db)
- << qTableName("qxmltest", __FILE__, db)
- << qTableName("qtest_exerr", __FILE__, db)
- << qTableName("qtest_empty", __FILE__, db)
- << qTableName("clobby", __FILE__, db)
- << qTableName("bindtest", __FILE__, db)
- << qTableName("more_results", __FILE__, db)
- << qTableName("blobstest", __FILE__, db)
- << qTableName("oraRowId", __FILE__, db)
- << qTableName("bug43874", __FILE__, db)
- << qTableName("bug6421", __FILE__, db).toUpper()
- << qTableName("bug5765", __FILE__, db)
- << qTableName("bug6852", __FILE__, db)
- << qTableName("bug21884", __FILE__, db)
- << qTableName("bug23895", __FILE__, db)
- << qTableName("qtest_lockedtable", __FILE__, db)
- << qTableName("Planet", __FILE__, db)
- << qTableName("task_250026", __FILE__, db)
- << qTableName("task_234422", __FILE__, db)
- << qTableName("test141895", __FILE__, db)
- << qTableName("qtest_oraOCINumber", __FILE__, db)
- << qTableName("bug2192", __FILE__, db)
<< qTableName("tst_record", __FILE__, db);
- if (dbType == QSqlDriver::PostgreSQL)
- tablenames << qTableName("task_233829", __FILE__, db);
-
- if (dbType == QSqlDriver::SQLite)
- tablenames << qTableName("record_sqlite", __FILE__, db);
-
- if (dbType == QSqlDriver::MSSqlServer || dbType == QSqlDriver::Oracle)
- tablenames << qTableName("qtest_longstr", __FILE__, db);
-
- if (dbType == QSqlDriver::MSSqlServer)
- db.exec("DROP PROCEDURE " + qTableName("test141895_proc", __FILE__, db));
-
- if (dbType == QSqlDriver::MySqlServer)
- db.exec("DROP PROCEDURE IF EXISTS "+ qTableName("bug6852_proc", __FILE__, db));
-
- tst_Databases::safeDropTables( db, tablenames );
+ tst_Databases::safeDropTables(db, tablenames);
if (dbType == QSqlDriver::Oracle) {
- QSqlQuery q( db );
+ QSqlQuery q(db);
q.exec("DROP PACKAGE " + qTableName("pkg", __FILE__, db));
}
}
-void tst_QSqlQuery::createTestTables( QSqlDatabase db )
+void tst_QSqlQuery::createTestTables(QSqlDatabase db)
{
- QSqlQuery q( db );
+ QSqlQuery q(db);
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType == QSqlDriver::MySqlServer)
// ### stupid workaround until we find a way to hardcode this
// in the MySQL server startup script
- q.exec( "set table_type=innodb" );
+ q.exec("set table_type=innodb");
else if (dbType == QSqlDriver::PostgreSQL)
- QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
+ QVERIFY_SQL(q, exec("set client_min_messages='warning'"));
- if (dbType == QSqlDriver::PostgreSQL)
- QVERIFY_SQL( q, exec( "create table " + qtest + " (id serial NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id)) WITH OIDS" ) );
- else
- QVERIFY_SQL( q, exec( "create table " + qtest + " (id int "+tst_Databases::autoFieldName(db) +" NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id))" ) );
+ if (dbType == QSqlDriver::PostgreSQL) {
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create table %1 (id serial NOT NULL, t_varchar varchar(20), "
+ "t_char char(20), primary key(id))").arg(qtest)));
+ } else {
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create table %1 (id int %2 NOT NULL, t_varchar varchar(20), "
+ "t_char char(20), primary key(id))")
+ .arg(qtest, tst_Databases::autoFieldName(db))));
+ }
- if (dbType == QSqlDriver::MSSqlServer || dbType == QSqlDriver::Sybase)
- QVERIFY_SQL(q, exec("create table " + qTableName("qtest_null", __FILE__, db) + " (id int null, t_varchar varchar(20) null)"));
- else
- QVERIFY_SQL(q, exec("create table " + qTableName("qtest_null", __FILE__, db) + " (id int, t_varchar varchar(20))"));
+ QLatin1String creator(dbType == QSqlDriver::MSSqlServer || dbType == QSqlDriver::Sybase
+ ? "create table %1 (id int null, t_varchar varchar(20) null)"
+ : "create table %1 (id int, t_varchar varchar(20))");
+ QVERIFY_SQL(q, exec(creator.arg(qTableName("qtest_null", __FILE__, db))));
}
-void tst_QSqlQuery::populateTestTables( QSqlDatabase db )
+void tst_QSqlQuery::populateTestTables(QSqlDatabase db)
{
- QSqlQuery q( db );
- const QString qtest_null(qTableName( "qtest_null", __FILE__, db));
- q.exec( "delete from " + qtest );
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (1, 'VarChar1', 'Char1')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (2, 'VarChar2', 'Char2')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (3, 'VarChar3', 'Char3')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (4, 'VarChar4', 'Char4')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (5, 'VarChar5', 'Char5')" ) );
-
- q.exec( "delete from " + qtest_null );
- QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (0, NULL)" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (1, 'n')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (2, 'i')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (3, NULL)" ) );
+ QSqlQuery q(db);
+ const QString qtest_null(qTableName("qtest_null", __FILE__, db));
+ q.exec("delete from " + qtest);
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (1, 'VarChar1', 'Char1')")
+ .arg(qtest)));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (2, 'VarChar2', 'Char2')")
+ .arg(qtest)));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (3, 'VarChar3', 'Char3')")
+ .arg(qtest)));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (4, 'VarChar4', 'Char4')")
+ .arg(qtest)));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (5, 'VarChar5', 'Char5')")
+ .arg(qtest)));
+
+ q.exec("delete from " + qtest_null);
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (0, NULL)").arg(qtest_null)));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (1, 'n')").arg(qtest_null)));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (2, 'i')").arg(qtest_null)));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (3, NULL)").arg(qtest_null)));
}
// There were problems with char fields of size 1
void tst_QSqlQuery::char1Select()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
{
- QSqlQuery q( db );
- const QString tbl = qTableName("char1Select", __FILE__, db);
- q.exec( "drop table " + tbl);
- QVERIFY_SQL(q, exec("create table " + tbl + " (id char(1))"));
- QVERIFY_SQL(q, exec("insert into " + tbl + " values ('a')"));
- QVERIFY_SQL(q, exec("select * from " + tbl));
- QVERIFY( q.next() );
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType == QSqlDriver::Interbase)
- QCOMPARE( q.value( 0 ).toString().left( 1 ), QString( "a" ) );
+ TableScope ts(db, "char1Select", __FILE__);
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (id char(1))").arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values ('a')").arg(ts.tableName())));
+ QVERIFY_SQL(q, exec("select * from " + ts.tableName()));
+ QVERIFY(q.next());
+ if (tst_Databases::getDatabaseType(db) == QSqlDriver::Interbase)
+ QCOMPARE(q.value(0).toString().left(1), u"a");
else
- QCOMPARE( q.value( 0 ).toString(), QString( "a" ) );
+ QCOMPARE(q.value(0).toString(), u"a");
- QVERIFY( !q.next() );
+ QVERIFY(!q.next());
}
}
void tst_QSqlQuery::char1SelectUnicode()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType == QSqlDriver::DB2)
QSKIP("Needs someone with more Unicode knowledge than I have to fix");
- if ( db.driver()->hasFeature( QSqlDriver::Unicode ) ) {
- QString uniStr( QChar(0x0915) ); // DEVANAGARI LETTER KA
- QSqlQuery q( db );
- QString createQuery;
- const QString char1SelectUnicode(qTableName("char1SU", __FILE__, db));
-
- if (dbType == QSqlDriver::MSSqlServer)
- createQuery = "create table " + char1SelectUnicode + "(id nchar(1))";
- else if (dbType == QSqlDriver::DB2 || dbType == QSqlDriver::Oracle || dbType == QSqlDriver::PostgreSQL)
- createQuery = "create table " + char1SelectUnicode + " (id char(3))";
- else if (dbType == QSqlDriver::Interbase)
- createQuery = "create table " + char1SelectUnicode +
- " (id char(1) character set unicode_fss)";
- else if (dbType == QSqlDriver::MySqlServer)
- createQuery = "create table " + char1SelectUnicode + " (id char(1)) "
- "default character set 'utf8'";
- else
- createQuery = "create table " + char1SelectUnicode + " (id char(1))";
-
- QVERIFY_SQL( q, exec( createQuery ) );
-
- QVERIFY_SQL( q, prepare( "insert into " + char1SelectUnicode + " values(?)" ) );
-
- q.bindValue( 0, uniStr );
+ if (!db.driver()->hasFeature(QSqlDriver::Unicode))
+ QSKIP("Database not unicode capable");
- QVERIFY_SQL( q, exec() );
-
- QVERIFY_SQL( q, exec( "select * from " + char1SelectUnicode ) );
+ QString uniStr(QChar(0x0915)); // DEVANAGARI LETTER KA
+ TableScope ts(db, "char1SU", __FILE__);
+ QSqlQuery q(db);
+ QLatin1String createQuery;
+
+ switch (dbType) {
+ case QSqlDriver::MimerSQL:
+ case QSqlDriver::MSSqlServer:
+ createQuery = QLatin1String("create table %1(id nchar(1))");
+ break;
+ case QSqlDriver::DB2:
+ case QSqlDriver::Oracle:
+ case QSqlDriver::PostgreSQL:
+ createQuery = QLatin1String("create table %1 (id char(3))");
+ break;
+ case QSqlDriver::Interbase:
+ createQuery = QLatin1String("create table %1 (id char(1) character set unicode_fss)");
+ break;
+ case QSqlDriver::MySqlServer:
+ createQuery = QLatin1String("create table %1 (id char(1)) default character set 'utf8'");
+ break;
+ default:
+ createQuery = QLatin1String("create table %1 (id char(1))");
+ break;
+ }
- QVERIFY( q.next() );
+ QVERIFY_SQL(q, exec(createQuery.arg(ts.tableName())));
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 values(?)").arg(ts.tableName())));
- if ( !q.value( 0 ).toString().isEmpty() )
- QCOMPARE( q.value( 0 ).toString()[ 0 ].unicode(), uniStr[0].unicode() );
+ q.bindValue(0, uniStr);
+ QVERIFY_SQL(q, exec());
+ QVERIFY_SQL(q, exec("select * from " + ts.tableName()));
- QCOMPARE( q.value( 0 ).toString().trimmed(), uniStr );
+ QVERIFY(q.next());
+ if (!q.value(0).toString().isEmpty())
+ QCOMPARE(q.value(0).toString()[0].unicode(), uniStr[0].unicode());
- QVERIFY( !q.next() );
- }
- else
- QSKIP( "Database not unicode capable");
+ QCOMPARE(q.value(0).toString().trimmed(), uniStr);
+ QVERIFY(!q.next());
}
void tst_QSqlQuery::oraRowId()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QString oraRowId(qTableName("oraRowId", __FILE__, db));
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "oraRowId", __FILE__);
+ const auto &oraRowId = ts.tableName();
- QSqlQuery q( db );
- QVERIFY_SQL( q, exec( "select rowid from " + qtest ) );
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).metaType().id(), QMetaType::QString );
- QVERIFY( !q.value( 0 ).toString().isEmpty() );
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec("select rowid from " + qtest));
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).metaType().id(), QMetaType::QString);
+ QVERIFY(!q.value(0).toString().isEmpty());
- QVERIFY_SQL( q, exec( "create table " + oraRowId + " (id char(1))" ) );
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (id char(1))").arg(oraRowId)));
- QVERIFY_SQL( q, exec( "insert into " + oraRowId + " values('a')" ) );
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values('a')").arg(oraRowId)));
QVariant v1 = q.lastInsertId();
- QVERIFY( v1.isValid() );
+ QVERIFY(v1.isValid());
- QVERIFY_SQL( q, exec( "insert into " + oraRowId + " values('b')" ) );
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values('b')").arg(oraRowId)));
QVariant v2 = q.lastInsertId();
- QVERIFY( v2.isValid() );
-
- QVERIFY_SQL( q, prepare( "select * from " + oraRowId + " where rowid = ?" ) );
- q.addBindValue( v1 );
- QVERIFY_SQL( q, exec() );
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toString(), QString( "a" ) );
-
- q.addBindValue( v2 );
- QVERIFY_SQL( q, exec() );
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toString(), QString( "b" ) );
+ QVERIFY(v2.isValid());
+
+ QVERIFY_SQL(q, prepare(QLatin1String("select * from %1 where rowid = ?").arg(oraRowId)));
+ q.addBindValue(v1);
+ QVERIFY_SQL(q, exec());
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toString(), u"a");
+
+ q.addBindValue(v2);
+ QVERIFY_SQL(q, exec());
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toString(), u"b");
}
void tst_QSqlQuery::mysql_outValues()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QString hello(qTableName("hello", __FILE__, db)), qtestproc(qTableName("qtestproc", __FILE__, db));
-
- QSqlQuery q( db );
-
- q.exec( "drop function " + hello );
-
- QVERIFY_SQL(q, exec("create function " + hello + " (s char(20)) returns varchar(50) READS SQL DATA return concat('Hello ', s)"));
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ const QString hello(qTableName("hello", __FILE__, db));
+ ProcScope ps(db, "qtestproc", __FILE__);
- QVERIFY_SQL( q, exec( "select " + hello + "('world')" ) );
- QVERIFY_SQL( q, next() );
+ QSqlQuery q(db);
- QCOMPARE( q.value( 0 ).toString(), QString( "Hello world" ) );
+ q.exec("drop function " + hello);
- QVERIFY_SQL( q, prepare( "select " + hello + "('harald')" ) );
- QVERIFY_SQL( q, exec() );
- QVERIFY_SQL( q, next() );
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create function %1 (s char(20)) returns varchar(50) "
+ "READS SQL DATA return concat('Hello ', s)").arg(hello)));
- QCOMPARE( q.value( 0 ).toString(), QString( "Hello harald" ) );
+ QVERIFY_SQL(q, exec(QLatin1String("select %1('world')").arg(hello)));
+ QVERIFY_SQL(q, next());
- QVERIFY_SQL( q, exec( "drop function " + hello ) );
+ QCOMPARE(q.value(0).toString(), u"Hello world");
- q.exec( "drop procedure " + qtestproc );
+ QVERIFY_SQL(q, prepare(QLatin1String("select %1('harald')").arg(hello)));
+ QVERIFY_SQL(q, exec());
+ QVERIFY_SQL(q, next());
- QVERIFY_SQL( q, exec( "create procedure " + qtestproc + " () "
- "BEGIN select * from " + qtest + " order by id; END" ) );
- QVERIFY_SQL( q, exec( "call " + qtestproc + "()" ) );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 1 ).toString(), QString( "VarChar1" ) );
+ QCOMPARE(q.value(0).toString(), u"Hello harald");
- QVERIFY_SQL( q, exec( "drop procedure " + qtestproc ) );
+ QVERIFY_SQL(q, exec("drop function " + hello));
- QVERIFY_SQL( q, exec( "create procedure " + qtestproc + " (OUT param1 INT) "
- "BEGIN set param1 = 42; END" ) );
+ QVERIFY_SQL(q, exec(QLatin1String("create procedure %1 () BEGIN "
+ "select * from %2 order by id; END").arg(ps.name(), qtest)));
+ QVERIFY_SQL(q, exec(QLatin1String("call %1()").arg(ps.name())));
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(1).toString(), u"VarChar1");
- QVERIFY_SQL( q, exec( "call " + qtestproc + " (@out)" ) );
- QVERIFY_SQL( q, exec( "select @out" ) );
- QCOMPARE( q.record().fieldName( 0 ), QString( "@out" ) );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), 42 );
+ QVERIFY_SQL(q, exec("drop procedure " + ps.name()));
+ QVERIFY_SQL(q, exec(QLatin1String("create procedure %1 (OUT param1 INT) "
+ "BEGIN set param1 = 42; END").arg(ps.name())));
- QVERIFY_SQL( q, exec( "drop procedure " + qtestproc ) );
+ QVERIFY_SQL(q, exec(QLatin1String("call %1 (@out)").arg(ps.name())));
+ QVERIFY_SQL(q, exec("select @out"));
+ QCOMPARE(q.record().fieldName(0), u"@out");
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), 42);
}
void tst_QSqlQuery::bindBool()
{
- // QTBUG-27763: bool value got converted to int 127 by mysql driver because sizeof(bool) < sizeof(int).
- // The problem was the way the bool value from the application was handled. For our purposes here, it
- // doesn't matter whether the column type is BOOLEAN or INT. All DBMSs have INT, and this usually
- // works for this test. Postresql is an exception because its INT type does not accept BOOLEAN
- // values and its BOOLEAN columns do not accept INT values.
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ // QTBUG-27763: bool value got converted to int 127 by mysql driver because
+ // sizeof(bool) < sizeof(int). The problem was the way the bool value from
+ // the application was handled. For our purposes here, it doesn't matter
+ // whether the column type is BOOLEAN or INT. All DBMSs have INT, and this
+ // usually works for this test. Postresql is an exception because its INT
+ // type does not accept BOOLEAN values and its BOOLEAN columns do not accept
+ // INT values.
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
QSqlQuery q(db);
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
const QString tableName(qTableName("bindBool", __FILE__, db));
q.exec("DROP TABLE " + tableName);
const bool useBooleanType = (dbType == QSqlDriver::PostgreSQL || dbType == QSqlDriver::Interbase);
- const QString colType = useBooleanType ? QLatin1String("BOOLEAN") : QLatin1String("INT");
- QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + " (id INT, flag " + colType + " NOT NULL, PRIMARY KEY(id))"));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %2 (id INT, flag %1 NOT NULL, PRIMARY KEY(id))")
+ .arg(QLatin1String(useBooleanType ? "BOOLEAN" : "INT"), tableName)));
for (int i = 0; i < 2; ++i) {
bool flag = i;
- q.prepare("INSERT INTO " + tableName + " (id, flag) VALUES(:id, :flag)");
+ q.prepare(QLatin1String("INSERT INTO %1 (id, flag) VALUES(:id, :flag)").arg(tableName));
q.bindValue(":id", i);
q.bindValue(":flag", flag);
QVERIFY_SQL(q, exec());
}
- QVERIFY_SQL(q, exec("SELECT id, flag FROM " + tableName + " ORDER BY id"));
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT id, flag FROM %1 ORDER BY id").arg(tableName)));
for (int i = 0; i < 2; ++i) {
bool flag = i;
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), i);
QCOMPARE(q.value(1).toBool(), flag);
}
- QVERIFY_SQL(q, prepare("SELECT flag FROM " + tableName + " WHERE flag = :filter"));
+ QVERIFY_SQL(q, prepare(QLatin1String(
+ "SELECT flag FROM %1 WHERE flag = :filter").arg(tableName)));
const bool filter = true;
q.bindValue(":filter", filter);
QVERIFY_SQL(q, exec());
@@ -659,105 +614,112 @@ void tst_QSqlQuery::bindBool()
void tst_QSqlQuery::oraOutValues()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
const QString tst_outValues(qTableName("tst_outValues", __FILE__, db));
- if ( !db.driver()->hasFeature( QSqlDriver::PreparedQueries ) )
- QSKIP( "Test requires prepared query support");
+ if (!db.driver()->hasFeature(QSqlDriver::PreparedQueries))
+ QSKIP("Test requires prepared query support");
- QSqlQuery q( db );
+ QSqlQuery q(db);
- q.setForwardOnly( true );
+ q.setForwardOnly(true);
/*** outvalue int ***/
- QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x out int) is\n"
- "begin\n"
- " x := 42;\n"
- "end;\n" ) );
- QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
- q.addBindValue( 0, QSql::Out );
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValue( 0 ).toInt(), 42 );
-
- // bind a null value, make sure the OCI driver resets the null flag
- q.addBindValue( QVariant(QMetaType(QMetaType::Int)), QSql::Out );
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValue( 0 ).toInt(), 42 );
- QVERIFY( !q.boundValue( 0 ).isNull() );
+ QVERIFY_SQL(q, exec(QLatin1String("create or replace procedure %1(x out int) is\n"
+ "begin\n"
+ " x := 42;\n"
+ "end;\n").arg(tst_outValues)));
+ QVERIFY(q.prepare(QLatin1String("call %1(?)").arg(tst_outValues)));
+ q.addBindValue(0, QSql::Out);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValue(0).toInt(), 42);
+
+ // Bind a null value, make sure the OCI driver resets the null flag:
+ q.addBindValue(QVariant(QMetaType(QMetaType::Int)), QSql::Out);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValue(0).toInt(), 42);
+ QVERIFY(!q.boundValue(0).isNull());
/*** outvalue varchar ***/
- QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x out varchar) is\n"
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create or replace procedure %1(x out varchar) is\n"
"begin\n"
" x := 'blah';\n"
- "end;\n" ) );
- QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
- QString s1( "12345" );
- s1.reserve( 512 );
- q.addBindValue( s1, QSql::Out );
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValue( 0 ).toString(), QString( "blah" ) );
+ "end;\n").arg(tst_outValues)));
+ QVERIFY(q.prepare(QLatin1String("call %1(?)").arg(tst_outValues)));
+ QString s1("12345");
+ s1.reserve(512);
+ q.addBindValue(s1, QSql::Out);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValue(0).toString(), u"blah");
/*** in/outvalue numeric ***/
- QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x in out numeric) is\n"
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create or replace procedure %1(x in out numeric) is\n"
"begin\n"
" x := x + 10;\n"
- "end;\n" ) );
- QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
- q.addBindValue( 10, QSql::Out );
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValue( 0 ).toInt(), 20 );
+ "end;\n").arg(tst_outValues)));
+ QVERIFY(q.prepare(QLatin1String("call %1(?)").arg(tst_outValues)));
+ q.addBindValue(10, QSql::Out);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValue(0).toInt(), 20);
/*** in/outvalue varchar ***/
- QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x in out varchar) is\n"
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create or replace procedure %1(x in out varchar) is\n"
"begin\n"
" x := 'homer';\n"
- "end;\n" ) );
- QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
- q.addBindValue( QString( "maggy" ), QSql::Out );
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValue( 0 ).toString(), QString( "homer" ) );
+ "end;\n").arg(tst_outValues)));
+ QVERIFY(q.prepare(QLatin1String("call %1(?)").arg(tst_outValues)));
+ q.addBindValue(u"maggy"_s, QSql::Out);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValue(0).toString(), u"homer");
/*** in/outvalue varchar ***/
- QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x in out varchar) is\n"
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create or replace procedure %1(x in out varchar) is\n"
"begin\n"
" x := NULL;\n"
- "end;\n" ) );
- QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
- q.addBindValue( QString( "maggy" ), QSql::Out );
- QVERIFY_SQL( q, exec() );
- QVERIFY( q.boundValue( 0 ).isNull() );
+ "end;\n").arg(tst_outValues)));
+ QVERIFY(q.prepare(QLatin1String("call %1(?)").arg(tst_outValues)));
+ q.addBindValue(u"maggy"_s, QSql::Out);
+ QVERIFY_SQL(q, exec());
+ QVERIFY(q.boundValue(0).isNull());
/*** in/outvalue int ***/
- QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x in out int) is\n"
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create or replace procedure %1(x in out int) is\n"
"begin\n"
" x := NULL;\n"
- "end;\n" ) );
- QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
- q.addBindValue( 42, QSql::Out );
- QVERIFY_SQL( q, exec() );
- QVERIFY( q.boundValue( 0 ).isNull() );
+ "end;\n").arg(tst_outValues)));
+ QVERIFY(q.prepare(QLatin1String("call %1(?)").arg(tst_outValues)));
+ q.addBindValue(42, QSql::Out);
+ QVERIFY_SQL(q, exec());
+ QVERIFY(q.boundValue(0).isNull());
/*** in/outvalue varchar ***/
- QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x in varchar, y out varchar) is\n"
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create or replace procedure %1(x in varchar, y out varchar) is\n"
"begin\n"
" y := x||'bubulalakikikokololo';\n"
- "end;\n" ) );
- QVERIFY( q.prepare( "call " + tst_outValues + "(?, ?)" ) );
- q.addBindValue( QString( "fifi" ), QSql::In );
+ "end;\n").arg(tst_outValues)));
+ QVERIFY(q.prepare(QLatin1String("call %1(?, ?)").arg(tst_outValues)));
+ q.addBindValue(u"fifi"_s, QSql::In);
QString out;
- out.reserve( 50 );
- q.addBindValue( out, QSql::Out );
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValue( 1 ).toString(), QString( "fifibubulalakikikokololo" ) );
+ out.reserve(50);
+ q.addBindValue(out, QSql::Out);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValue(1).toString(), u"fifibubulalakikikokololo");
/*** in/outvalue date ***/
- QVERIFY_SQL(q, exec("create or replace procedure " + tst_outValues + "(x in date, y out date) is\n"
- "begin\n"
- " y := x;\n"
- "end;\n"));
- QVERIFY(q.prepare("call " + tst_outValues + "(?, ?)"));
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create or replace procedure %1(x in date, y out date) is\n"
+ "begin\n"
+ " y := x;\n"
+ "end;\n").arg(tst_outValues)));
+ QVERIFY(q.prepare(QLatin1String("call %1(?, ?)").arg(tst_outValues)));
const QDate date = QDate::currentDate();
q.addBindValue(date, QSql::In);
q.addBindValue(QVariant(QDate()), QSql::Out);
@@ -765,11 +727,12 @@ void tst_QSqlQuery::oraOutValues()
QCOMPARE(q.boundValue(1).toDate(), date);
/*** in/outvalue timestamp ***/
- QVERIFY_SQL(q, exec("create or replace procedure " + tst_outValues + "(x in timestamp, y out timestamp) is\n"
- "begin\n"
- " y := x;\n"
- "end;\n"));
- QVERIFY(q.prepare("call " + tst_outValues + "(?, ?)"));
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create or replace procedure %1(x in timestamp, y out timestamp) is\n"
+ "begin\n"
+ " y := x;\n"
+ "end;\n").arg(tst_outValues)));
+ QVERIFY(q.prepare(QLatin1String("call %1(?, ?)").arg(tst_outValues)));
const QDateTime dt = QDateTime::currentDateTime();
q.addBindValue(dt, QSql::In);
q.addBindValue(QVariant(QMetaType(QMetaType::QDateTime)), QSql::Out);
@@ -779,53 +742,57 @@ void tst_QSqlQuery::oraOutValues()
void tst_QSqlQuery::oraClob()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QString clobby(qTableName("clobby", __FILE__, db));
-
- QSqlQuery q( db );
-
- // simple short string
- QVERIFY_SQL( q, exec( "create table " + clobby + "(id int primary key, cl clob, bl blob)" ) );
- QVERIFY_SQL( q, prepare( "insert into " + clobby + " (id, cl, bl) values(?, ?, ?)" ) );
- q.addBindValue( 1 );
- q.addBindValue( "bubu" );
- q.addBindValue( QByteArray("bubu") );
- QVERIFY_SQL( q, exec() );
-
- QVERIFY_SQL( q, exec( "select bl, cl from " + clobby + " where id = 1" ) );
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toString(), QString( "bubu" ) );
- QCOMPARE( q.value( 1 ).toString(), QString( "bubu" ) );
-
- // simple short string with binding
- QVERIFY_SQL( q, prepare( "insert into " + clobby + " (id, cl, bl) values(?, ?, ?)" ) );
- q.addBindValue( 2 );
- q.addBindValue( "lala", QSql::Binary );
- q.addBindValue( QByteArray("lala"), QSql::Binary );
- QVERIFY_SQL( q, exec() );
-
- QVERIFY_SQL( q, exec( "select bl, cl from " + clobby + " where id = 2" ) );
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toString(), QString( "lala" ) );
- QCOMPARE( q.value( 1 ).toString(), QString( "lala" ) );
-
- // loooong string
- QString loong;
- loong.fill( QLatin1Char( 'A' ), 25000 );
- QVERIFY_SQL( q, prepare( "insert into " + clobby + " (id, cl, bl) values(?, ?, ?)" ) );
- q.addBindValue( 3 );
- q.addBindValue( loong, QSql::Binary );
- q.addBindValue( loong.toLatin1(), QSql::Binary );
- QVERIFY_SQL( q, exec() );
-
- QVERIFY_SQL( q, exec( "select bl, cl from " + clobby + " where id = 3" ) );
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toString().count(), loong.count() );
- QVERIFY( q.value( 0 ).toString() == loong );
- QCOMPARE( q.value( 1 ).toByteArray().count(), loong.toLatin1().count() );
- QVERIFY( q.value( 1 ).toByteArray() == loong.toLatin1() );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "clobby", __FILE__);
+ const auto &clobby = ts.tableName();
+
+ QSqlQuery q(db);
+
+ // Simple short string:
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1(id int primary key, cl clob, bl blob)")
+ .arg(clobby)));
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 (id, cl, bl) values(?, ?, ?)")
+ .arg(clobby)));
+ q.addBindValue(1);
+ q.addBindValue("bubu");
+ q.addBindValue("bubu"_ba);
+ QVERIFY_SQL(q, exec());
+
+ QVERIFY_SQL(q, exec(QLatin1String("select bl, cl from %1 where id = 1").arg(clobby)));
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toString(), u"bubu");
+ QCOMPARE(q.value(1).toString(), u"bubu");
+
+ // Simple short string with binding:
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 (id, cl, bl) values(?, ?, ?)")
+ .arg(clobby)));
+ q.addBindValue(2);
+ q.addBindValue(u"lala"_s, QSql::Binary);
+ q.addBindValue("lala"_ba, QSql::Binary);
+ QVERIFY_SQL(q, exec());
+
+ QVERIFY_SQL(q, exec(QLatin1String("select bl, cl from %1 where id = 2").arg(clobby)));
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toString(), u"lala");
+ QCOMPARE(q.value(1).toString(), u"lala");
+
+ // Loooong string:
+ const QString loong(25000, QLatin1Char('A'));
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 (id, cl, bl) values(?, ?, ?)")
+ .arg(clobby)));
+ q.addBindValue(3);
+ q.addBindValue(loong, QSql::Binary);
+ q.addBindValue(loong.toLatin1(), QSql::Binary);
+ QVERIFY_SQL(q, exec());
+
+ QVERIFY_SQL(q, exec(QLatin1String("select bl, cl from %1 where id = 3").arg(clobby)));
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toString().size(), loong.size());
+ QVERIFY(q.value(0).toString() == loong); // Deliberately not QCOMPARE() as too long
+ QCOMPARE(q.value(1).toByteArray().size(), loong.toLatin1().size());
+ QVERIFY(q.value(1).toByteArray() == loong.toLatin1()); // ditto
}
void tst_QSqlQuery::oraClobBatch()
@@ -836,268 +803,275 @@ void tst_QSqlQuery::oraClobBatch()
const QString clobBatch(qTableName("clobBatch", __FILE__, db));
tst_Databases::safeDropTables(db, { clobBatch });
QSqlQuery q(db);
- QVERIFY_SQL(q, exec("create table " + clobBatch + "(cl clob)"));
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1(cl clob)").arg(clobBatch)));
const QString longString(USHRT_MAX + 1, QLatin1Char('A'));
- QVERIFY_SQL(q, prepare("insert into " + clobBatch + " (cl) values(:cl)"));
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 (cl) values(:cl)").arg(clobBatch)));
const QVariantList vars = { longString };
q.addBindValue(vars);
QVERIFY_SQL(q, execBatch());
QVERIFY_SQL(q, exec("select cl from " + clobBatch));
QVERIFY(q.next());
- QCOMPARE(q.value(0).toString().count(), longString.size());
- QVERIFY(q.value(0).toString() == longString);
+ QCOMPARE(q.value(0).toString().size(), longString.size());
+ QVERIFY(q.value(0).toString() == longString); // As above. deliberately not QCOMPARE().
}
void tst_QSqlQuery::storedProceduresIBase()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- const auto procName = qTableName("TESTPROC", __FILE__, db);
- q.exec("drop procedure " + procName);
-
- QVERIFY_SQL(q, exec("create procedure " + procName +
- " RETURNS (x integer, y varchar(20)) "
- "AS BEGIN "
- " x = 42; "
- " y = 'Hello Anders'; "
- "END" ) );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ ProcScope ps(db, "TESTPROC", __FILE__);
- QVERIFY_SQL(q, prepare("execute procedure " + procName));
- QVERIFY_SQL( q, exec() );
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String("create procedure %1 RETURNS (x integer, y varchar(20)) "
+ "AS BEGIN "
+ " x = 42; "
+ " y = 'Hello Anders'; "
+ "END").arg(ps.name())));
+ QVERIFY_SQL(q, prepare("execute procedure " + ps.name()));
+ QVERIFY_SQL(q, exec());
- // check for a valid result set
+ // Check for a valid result set:
QSqlRecord rec = q.record();
- QCOMPARE( rec.count(), 2 );
- QCOMPARE( rec.fieldName( 0 ).toUpper(), QString( "X" ) );
- QCOMPARE( rec.fieldName( 1 ).toUpper(), QString( "Y" ) );
+ QCOMPARE(rec.count(), 2);
+ QCOMPARE(rec.fieldName(0).toUpper(), u"X");
+ QCOMPARE(rec.fieldName(1).toUpper(), u"Y");
- // the first next shall suceed
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), 42 );
- QCOMPARE( q.value( 1 ).toString(), QString( "Hello Anders" ) );
-
- // the second next shall fail
- QVERIFY( !q.next() );
+ // The first next shall suceed:
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), 42);
+ QCOMPARE(q.value(1).toString(), u"Hello Anders");
- q.exec("drop procedure " + procName);
+ // The second next shall fail:
+ QVERIFY(!q.next());
}
void tst_QSqlQuery::outValuesDB2()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- if ( !db.driver()->hasFeature( QSqlDriver::PreparedQueries ) )
- QSKIP( "Test requires prepared query support");
+ if (!db.driver()->hasFeature(QSqlDriver::PreparedQueries))
+ QSKIP("Test requires prepared query support");
- QSqlQuery q( db );
+ ProcScope ps(db, "tst_outValues", __FILE__);
- q.setForwardOnly( true );
+ QSqlQuery q(db);
+ q.setForwardOnly(true);
- q.exec("drop procedure " + qTableName("tst_outValues", __FILE__, db)); //non-fatal
- QVERIFY_SQL( q, exec( "CREATE PROCEDURE " + qTableName("tst_outValues", __FILE__, db) +
- " (OUT x int, OUT x2 double, OUT x3 char(20))\n"
- "LANGUAGE SQL\n"
- "P1: BEGIN\n"
- " SET x = 42;\n"
- " SET x2 = 4.2;\n"
- " SET x3 = 'Homer';\n"
- "END P1" ) );
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE PROCEDURE %1 "
+ "(OUT x int, OUT x2 double, OUT x3 char(20))\n"
+ "LANGUAGE SQL\n"
+ "P1: BEGIN\n"
+ " SET x = 42;\n"
+ " SET x2 = 4.2;\n"
+ " SET x3 = 'Homer';\n"
+ "END P1").arg(ps.name())));
- QVERIFY_SQL(q, prepare("call " + qTableName("tst_outValues", __FILE__, db) + "(?, ?, ?)"));
+ QVERIFY_SQL(q, prepare(QLatin1String("call %1(?, ?, ?)").arg(ps.name())));
- q.addBindValue( 0, QSql::Out );
- q.addBindValue( 0.0, QSql::Out );
- q.addBindValue( "Simpson", QSql::Out );
+ q.addBindValue(0, QSql::Out);
+ q.addBindValue(0.0, QSql::Out);
+ q.addBindValue("Simpson", QSql::Out);
- QVERIFY_SQL( q, exec() );
+ QVERIFY_SQL(q, exec());
- QCOMPARE( q.boundValue( 0 ).toInt(), 42 );
- QCOMPARE( q.boundValue( 1 ).toDouble(), 4.2 );
- QCOMPARE( q.boundValue( 2 ).toString().trimmed(), QString( "Homer" ) );
+ QCOMPARE(q.boundValue(0).toInt(), 42);
+ QCOMPARE(q.boundValue(1).toDouble(), 4.2);
+ QCOMPARE(q.boundValue(2).toString().trimmed(), u"Homer");
}
void tst_QSqlQuery::outValues()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QString tst_outValues(qTableName("tst_outValues", __FILE__, db));
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- if ( !db.driver()->hasFeature( QSqlDriver::PreparedQueries ) )
- QSKIP( "Test requires prepared query support");
+ if (!db.driver()->hasFeature(QSqlDriver::PreparedQueries))
+ QSKIP("Test requires prepared query support");
- QSqlQuery q( db );
+ ProcScope ps(db, "tst_outValues", __FILE__);
+ QSqlQuery q(db);
- q.setForwardOnly( true );
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType == QSqlDriver::Oracle) {
- QVERIFY_SQL( q, exec( "create or replace procedure " + tst_outValues + "(x out int) is\n"
+ q.setForwardOnly(true);
+ QLatin1String creator, caller;
+ switch (tst_Databases::getDatabaseType(db)) {
+ case QSqlDriver::Oracle:
+ creator = QLatin1String("create or replace procedure %1(x out int) is\n"
"begin\n"
" x := 42;\n"
- "end;\n" ) );
- QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
- } else if (dbType == QSqlDriver::DB2) {
- q.exec( "drop procedure " + tst_outValues ); //non-fatal
- QVERIFY_SQL( q, exec( "CREATE PROCEDURE " + tst_outValues + " (OUT x int)\n"
+ "end;\n");
+ caller = QLatin1String("call %1(?)");
+ break;
+ case QSqlDriver::DB2:
+ creator = QLatin1String("CREATE PROCEDURE %1 (OUT x int)\n"
"LANGUAGE SQL\n"
"P1: BEGIN\n"
" SET x = 42;\n"
- "END P1" ) );
- QVERIFY( q.prepare( "call " + tst_outValues + "(?)" ) );
- } else if (dbType == QSqlDriver::MSSqlServer) {
- q.exec( "drop procedure " + tst_outValues ); //non-fatal
- QVERIFY_SQL( q, exec( "create procedure " + tst_outValues + " (@x int out) as\n"
+ "END P1");
+ caller = QLatin1String("call %1(?)");
+ break;
+ case QSqlDriver::MSSqlServer:
+ creator = QLatin1String("create procedure %1 (@x int out) as\n"
"begin\n"
" set @x = 42\n"
- "end\n" ) );
- QVERIFY( q.prepare( "{call " + tst_outValues + "(?)}" ) );
- } else
- QSKIP( "Don't know how to create a stored procedure for this database server, please fix this test");
+ "end\n");
+ caller = QLatin1String("{call %1(?)}");
+ break;
+ default:
+ QSKIP("Don't know how to create a stored procedure for this database server, "
+ "please fix this test");
+ }
+ QVERIFY_SQL(q, exec(creator.arg(ps.name())));
+ QVERIFY(q.prepare(caller.arg(ps.name())));
- q.addBindValue( 0, QSql::Out );
+ q.addBindValue(0, QSql::Out);
- QVERIFY_SQL( q, exec() );
+ QVERIFY_SQL(q, exec());
- QCOMPARE( q.boundValue( 0 ).toInt(), 42 );
+ QCOMPARE(q.boundValue(0).toInt(), 42);
}
void tst_QSqlQuery::blob()
{
- static const int BLOBSIZE = 1024 * 10;
- static const int BLOBCOUNT = 2;
-
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ constexpr int BLOBSIZE = 1024 * 10;
+ constexpr int BLOBCOUNT = 2;
- if ( !db.driver()->hasFeature( QSqlDriver::BLOB ) )
- QSKIP( "DBMS not BLOB capable");
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- //don' make it too big otherwise sybase and mysql will complain
- QByteArray ba( BLOBSIZE, 0 );
+ if (!db.driver()->hasFeature(QSqlDriver::BLOB))
+ QSKIP("DBMS not BLOB capable");
+ // Don't make it too big otherwise sybase and mysql will complain:
+ QByteArray ba(BLOBSIZE, Qt::Uninitialized);
for (int i = 0; i < ba.size(); ++i)
ba[i] = i % 256;
- QSqlQuery q( db );
-
- q.setForwardOnly( true );
+ TableScope ts(db, "qtest_blob", __FILE__);
+ QSqlQuery q(db);
+ q.setForwardOnly(true);
- QString queryString = QString("create table " + qTableName("qtest_blob", __FILE__, db) +
- " (id int not null primary key, t_blob %1)" ).arg( tst_Databases::blobTypeName( db, BLOBSIZE ) );
- QVERIFY_SQL( q, exec( queryString ) );
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (id int not null primary key, t_blob %2)")
+ .arg(ts.tableName(), tst_Databases::blobTypeName(db, BLOBSIZE))));
- QVERIFY_SQL(q, prepare("insert into " + qTableName("qtest_blob", __FILE__, db) + " (id, t_blob) values (?, ?)"));
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 (id, t_blob) values (?, ?)")
+ .arg(ts.tableName())));
for (int i = 0; i < BLOBCOUNT; ++i) {
- q.addBindValue( i );
- q.addBindValue( ba );
- QVERIFY_SQL( q, exec() );
+ q.addBindValue(i);
+ q.addBindValue(ba);
+ QVERIFY_SQL(q, exec());
}
- QVERIFY_SQL(q, exec("select * from " + qTableName("qtest_blob", __FILE__, db)));
+ QVERIFY_SQL(q, exec("select * from " + ts.tableName()));
for (int i = 0; i < BLOBCOUNT; ++i) {
- QVERIFY( q.next() );
- QByteArray res = q.value( 1 ).toByteArray();
- QVERIFY2( res.size() >= ba.size(),
- QString( "array sizes differ, expected %1, got %2" ).arg( ba.size() ).arg( res.size() ).toLatin1() );
-
- for (int i2 = 0; i2 < ba.size(); ++i2) {
- if ( res[i2] != ba[i2] )
- QFAIL( QString( "ByteArrays differ at position %1, expected %2, got %3" ).arg(
- i2 ).arg(( int )( unsigned char )ba[i2] ).arg(( int )( unsigned char )res[i2] ).toLatin1() );
+ QVERIFY(q.next());
+ QByteArray res = q.value(1).toByteArray();
+ QVERIFY2(res.size() >= ba.size(),
+ qPrintable(QString::asprintf(
+ "array sizes differ, expected (at least) %" PRIdQSIZETYPE
+ ", got %" PRIdQSIZETYPE, ba.size(), res.size())));
+
+ for (qsizetype i2 = 0; i2 < ba.size(); ++i2) {
+ if (res[i2] != ba[i2]) {
+ QFAIL(qPrintable(QString::asprintf(
+ "ByteArrays differ at position %lld, expected %hhu, got %hhu",
+ i2, ba[i2], res[i2])));
+ }
}
}
}
void tst_QSqlQuery::value()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- QSqlQuery q( db );
- QVERIFY_SQL( q, exec( "select id, t_varchar, t_char from " + qtest + " order by id" ) );
- int i = 1;
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String("select id, t_varchar, t_char from %1 order by id")
+ .arg(qtest)));
- while ( q.next() ) {
- QCOMPARE( q.value( 0 ).toInt(), i );
- QCOMPARE( q.value( "id" ).toInt(), i );
+ for (int i = 1; q.next(); ++i) {
+ QCOMPARE(q.value(0).toInt(), i);
+ QCOMPARE(q.value("id").toInt(), i);
+ auto istring = QString::number(i);
if (dbType == QSqlDriver::Interbase)
- QVERIFY( q.value( 1 ).toString().startsWith( "VarChar" + QString::number( i ) ) );
- else if ( q.value( 1 ).toString().endsWith(QLatin1Char(' ')))
- QCOMPARE( q.value( 1 ).toString(), ( "VarChar" + QString::number( i ) + " " ) );
+ QVERIFY(q.value(1).toString().startsWith("VarChar" + istring));
+ else if (q.value(1).toString().endsWith(QLatin1Char(' ')))
+ QCOMPARE(q.value(1).toString(), QLatin1String("VarChar%1 ").arg(istring));
else
- QCOMPARE( q.value( 1 ).toString(), ( "VarChar" + QString::number( i ) ) );
+ QCOMPARE(q.value(1).toString(), "VarChar" + istring);
if (dbType == QSqlDriver::Interbase)
- QVERIFY( q.value( 2 ).toString().startsWith( "Char" + QString::number( i ) ) );
- else if (!q.value( 2 ).toString().endsWith(QLatin1Char(' ')))
- QCOMPARE( q.value( 2 ).toString(), ( "Char" + QString::number( i ) ) );
+ QVERIFY(q.value(2).toString().startsWith("Char" + istring));
+ else if (q.value(2).toString().endsWith(QLatin1Char(' ')))
+ QCOMPARE(q.value(2).toString(), QLatin1String("Char%1 ").arg(istring));
else
- QCOMPARE( q.value( 2 ).toString(), ( "Char" + QString::number( i ) + " " ) );
-
- i++;
+ QCOMPARE(q.value(2).toString(), "Char" + istring);
}
}
#define SETUP_RECORD_TABLE \
do { \
- QVERIFY_SQL(q, exec("CREATE TABLE " + tst_record + " (id integer, extra varchar(50))")); \
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (id integer, extra varchar(50))") \
+ .arg(tst_record))); \
for (int i = 0; i < 3; ++i) \
- QVERIFY_SQL(q, exec(QString("INSERT INTO " + tst_record + " VALUES(%1, 'extra%1')").arg(i))); \
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 VALUES(%2, 'extra%2')") \
+ .arg(tst_record).arg(i))); \
} while (0)
#define CHECK_RECORD \
do { \
- QVERIFY_SQL(q, exec(QString("select %1.id, %1.t_varchar, %1.t_char, %2.id, %2.extra from %1, %2 where " \
- "%1.id = %2.id order by %1.id").arg(lowerQTest).arg(tst_record))); \
- QCOMPARE(q.record().fieldName(0).toLower(), QString("id")); \
+ QVERIFY_SQL(q, exec(QLatin1String( \
+ "select %1.id, %1.t_varchar, %1.t_char, %2.id, %2.extra " \
+ "from %1, %2 where %1.id = %2.id order by %1.id") \
+ .arg(lowerQTest, tst_record))); \
+ QCOMPARE(q.record().fieldName(0).toLower(), u"id"); \
QCOMPARE(q.record().field(0).tableName().toLower(), lowerQTest); \
- QCOMPARE(q.record().fieldName(1).toLower(), QString("t_varchar")); \
+ QCOMPARE(q.record().fieldName(1).toLower(), u"t_varchar"); \
QCOMPARE(q.record().field(1).tableName().toLower(), lowerQTest); \
- QCOMPARE(q.record().fieldName(2).toLower(), QString("t_char")); \
+ QCOMPARE(q.record().fieldName(2).toLower(), u"t_char"); \
QCOMPARE(q.record().field(2).tableName().toLower(), lowerQTest); \
- QCOMPARE(q.record().fieldName(3).toLower(), QString("id")); \
+ QCOMPARE(q.record().fieldName(3).toLower(), u"id"); \
QCOMPARE(q.record().field(3).tableName().toLower(), tst_record); \
- QCOMPARE(q.record().fieldName(4).toLower(), QString("extra")); \
+ QCOMPARE(q.record().fieldName(4).toLower(), u"extra"); \
QCOMPARE(q.record().field(4).tableName().toLower(), tst_record); \
} while (0)
void tst_QSqlQuery::record()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- QVERIFY( q.record().isEmpty() );
- QVERIFY_SQL( q, exec( "select id, t_varchar, t_char from " + qtest + " order by id" ) );
- QCOMPARE( q.record().fieldName( 0 ).toLower(), QString( "id" ) );
- QCOMPARE( q.record().fieldName( 1 ).toLower(), QString( "t_varchar" ) );
- QCOMPARE( q.record().fieldName( 2 ).toLower(), QString( "t_char" ) );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlQuery q(db);
+ QVERIFY(q.record().isEmpty());
+ QVERIFY_SQL(q, exec(QLatin1String("select id, t_varchar, t_char from %1 order by id")
+ .arg(qtest)));
+ QCOMPARE(q.record().fieldName(0).toLower(), u"id");
+ QCOMPARE(q.record().fieldName(1).toLower(), u"t_varchar");
+ QCOMPARE(q.record().fieldName(2).toLower(), u"t_char");
QCOMPARE(q.record().value(0), QVariant(q.record().field(0).metaType()));
QCOMPARE(q.record().value(1), QVariant(q.record().field(1).metaType()));
QCOMPARE(q.record().value(2), QVariant(q.record().field(2).metaType()));
- QVERIFY( q.next() );
- QVERIFY( q.next() );
+ QVERIFY(q.next());
+ QVERIFY(q.next());
+ QCOMPARE(q.record().fieldName(0).toLower(), u"id");
+ QCOMPARE(q.value(0).toInt(), 2);
- QCOMPARE( q.record().fieldName( 0 ).toLower(), QString( "id" ) );
- QCOMPARE( q.value( 0 ).toInt(), 2 );
+ if (tst_Databases::getDatabaseType(db) == QSqlDriver::Oracle
+ || tst_Databases::getDatabaseType(db) == QSqlDriver::MimerSQL)
+ QSKIP("Getting the tablename is not supported in Oracle and Mimer SQL");
- const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType == QSqlDriver::Oracle)
- QSKIP("Getting the tablename is not supported in Oracle");
const auto lowerQTest = qtest.toLower();
for (int i = 0; i < 3; ++i)
QCOMPARE(q.record().field(i).tableName().toLower(), lowerQTest);
@@ -1107,7 +1081,7 @@ void tst_QSqlQuery::record()
CHECK_RECORD;
q.clear();
- // Recreate the tables, in a different order
+ // Recreate the tables, in a different order:
const QStringList tables = { qtest, tst_record, qTableName("qtest_null", __FILE__, db) };
tst_Databases::safeDropTables(db, tables);
SETUP_RECORD_TABLE;
@@ -1118,273 +1092,264 @@ void tst_QSqlQuery::record()
void tst_QSqlQuery::isValid()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- QVERIFY( !q.isValid() );
- QVERIFY_SQL( q, exec( "select * from " + qtest ) );
- QVERIFY( q.first() );
- QVERIFY( q.isValid() );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlQuery q(db);
+ QVERIFY(!q.isValid());
+ QVERIFY_SQL(q, exec("select * from " + qtest));
+ QVERIFY(q.first());
+ QVERIFY(q.isValid());
}
void tst_QSqlQuery::isActive()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- QVERIFY( !q.isActive() );
- QVERIFY_SQL( q, exec( "select * from " + qtest ) );
- QVERIFY( q.isActive() );
- QVERIFY( q.last() );
-
- if ( !tst_Databases::isMSAccess( db ) )
- // Access is stupid enough to let you scroll over boundaries
- QVERIFY( !q.next() );
-
- QVERIFY( q.isActive() );
-
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (41, 'VarChar41', 'Char41')" ) );
-
- QVERIFY( q.isActive() );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QVERIFY_SQL( q, exec( "update " + qtest + " set id = 42 where id = 41" ) );
+ QSqlQuery q(db);
+ QVERIFY(!q.isActive());
+ QVERIFY_SQL(q, exec("select * from " + qtest));
+ QVERIFY(q.isActive());
+ QVERIFY(q.last());
- QVERIFY( q.isActive() );
+ // Access is stupid enough to let you scroll over boundaries:
+ if (!tst_Databases::isMSAccess(db))
+ QVERIFY(!q.next());
+ QVERIFY(q.isActive());
- QVERIFY_SQL( q, exec( "delete from " + qtest + " where id = 42" ) );
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (41, 'VarChar41', 'Char41')")
+ .arg(qtest)));
+ QVERIFY(q.isActive());
- QVERIFY( q.isActive() );
+ QVERIFY_SQL(q, exec(QLatin1String("update %1 set id = 42 where id = 41").arg(qtest)));
+ QVERIFY(q.isActive());
- QVERIFY_SQL( q, exec( "delete from " + qtest + " where id = 42" ) );
+ QVERIFY_SQL(q, exec(QLatin1String("delete from %1 where id = 42").arg(qtest)));
+ QVERIFY(q.isActive());
- QVERIFY( q.isActive() );
+ QVERIFY_SQL(q, exec(QLatin1String("delete from %1 where id = 42").arg(qtest)));
+ QVERIFY(q.isActive());
}
void tst_QSqlQuery::numRowsAffected()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QSqlQuery q( db );
- QCOMPARE( q.numRowsAffected(), -1 );
+ QSqlQuery q(db);
+ QCOMPARE(q.numRowsAffected(), -1);
- QVERIFY_SQL( q, exec( "select * from " + qtest ) );
- int i = 0;
+ QVERIFY_SQL(q, exec("select * from " + qtest));
- while ( q.next() )
+ int i = 0;
+ while (q.next())
++i;
- if ( q.numRowsAffected() == -1 || q.numRowsAffected() == 0 )
+ if (q.numRowsAffected() == -1 || q.numRowsAffected() == 0)
QSKIP("Database doesn't support numRowsAffected");
- if ( q.numRowsAffected() != -1 && q.numRowsAffected() != 0 && q.numRowsAffected() != i ) {
- // the value is undefined for SELECT, this check is just here for curiosity
- qDebug( "Expected numRowsAffected to be -1, 0 or %d, got %d", i, q.numRowsAffected() );
- }
+ // Value is undefined for SELECT, this check is just here for curiosity:
+ if (q.numRowsAffected() != -1 && q.numRowsAffected() != 0 && q.numRowsAffected() != i)
+ qDebug("Expected numRowsAffected to be -1, 0 or %d, got %d", i, q.numRowsAffected());
- QVERIFY_SQL( q, exec( "update " + qtest + " set id = 100 where id = 1" ) );
+ QVERIFY_SQL(q, exec(QLatin1String("update %1 set id = 100 where id = 1").arg(qtest)));
- QCOMPARE( q.numRowsAffected(), 1 );
- QCOMPARE( q.numRowsAffected(), 1 ); // yes, we check twice
+ QCOMPARE(q.numRowsAffected(), 1);
+ QCOMPARE(q.numRowsAffected(), 1); // yes, we check twice
- QVERIFY_SQL( q, exec( "update " + qtest + " set id = id + 100" ) );
- QCOMPARE( q.numRowsAffected(), i );
- QCOMPARE( q.numRowsAffected(), i ); // yes, we check twice
+ QVERIFY_SQL(q, exec(QLatin1String("update %1 set id = id + 100").arg(qtest)));
+ QCOMPARE(q.numRowsAffected(), i);
+ QCOMPARE(q.numRowsAffected(), i); // yes, we check twice
- QVERIFY_SQL( q, prepare( "update " + qtest + " set id = id + :newid" ) );
+ QVERIFY_SQL(q, prepare(QLatin1String("update %1 set id = id + :newid").arg(qtest)));
q.bindValue(":newid", 100);
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.numRowsAffected(), i );
- QCOMPARE( q.numRowsAffected(), i ); // yes, we check twice
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.numRowsAffected(), i);
+ QCOMPARE(q.numRowsAffected(), i); // yes, we check twice
- QVERIFY_SQL( q, prepare( "update " + qtest + " set id = id + :newid where NOT(1 = 1)" ) );
+ QVERIFY_SQL(q, prepare(QLatin1String("update %1 set id = id + :newid where NOT(1 = 1)")
+ .arg(qtest)));
q.bindValue(":newid", 100);
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.numRowsAffected(), 0 );
- QCOMPARE( q.numRowsAffected(), 0 ); // yes, we check twice
-
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (42000, 'homer', 'marge')" ) );
- QCOMPARE( q.numRowsAffected(), 1 );
- QCOMPARE( q.numRowsAffected(), 1 ); // yes, we check twice
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.numRowsAffected(), 0);
+ QCOMPARE(q.numRowsAffected(), 0); // yes, we check twice
- QSqlQuery q2( db );
- QVERIFY_SQL( q2, exec( "insert into " + qtest + " values (42001, 'homer', 'marge')" ) );
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (42000, 'homer', 'marge')")
+ .arg(qtest)));
+ QCOMPARE(q.numRowsAffected(), 1);
+ QCOMPARE(q.numRowsAffected(), 1); // yes, we check twice
- if ( !db.driverName().startsWith( "QSQLITE2" ) ) {
- // SQLite 2.x accumulates changed rows in nested queries. See task 33794
- QCOMPARE( q2.numRowsAffected(), 1 );
- QCOMPARE( q2.numRowsAffected(), 1 ); // yes, we check twice
- }
+ QSqlQuery q2(db);
+ QVERIFY_SQL(q2, exec(QLatin1String("insert into %1 values (42001, 'homer', 'marge')")
+ .arg(qtest)));
+ QCOMPARE(q2.numRowsAffected(), 1);
+ QCOMPARE(q2.numRowsAffected(), 1); // yes, we check twice
}
void tst_QSqlQuery::size()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QSqlQuery q( db );
- QCOMPARE( q.size(), -1 );
+ QSqlQuery q(db);
+ QCOMPARE(q.size(), -1);
- QVERIFY_SQL( q, exec( "select * from " + qtest ) );
- int i = 0;
+ QVERIFY_SQL(q, exec("select * from " + qtest));
- while ( q.next() )
+ int i = 0;
+ while (q.next())
++i;
- if ( db.driver()->hasFeature( QSqlDriver::QuerySize ) ) {
- QCOMPARE( q.size(), i );
- QCOMPARE( q.size(), i ); // yes, twice
+ if (db.driver()->hasFeature(QSqlDriver::QuerySize)) {
+ QCOMPARE(q.size(), i);
+ QCOMPARE(q.size(), i); // yes, twice
} else {
- QCOMPARE( q.size(), -1 );
- QCOMPARE( q.size(), -1 ); // yes, twice
+ QCOMPARE(q.size(), -1);
+ QCOMPARE(q.size(), -1); // yes, twice
}
- QSqlQuery q2( "select * from " + qtest, db );
+ QSqlQuery q2("select * from " + qtest, db);
- if ( db.driver()->hasFeature( QSqlDriver::QuerySize ) )
- QCOMPARE( q.size(), i );
+ if (db.driver()->hasFeature(QSqlDriver::QuerySize))
+ QCOMPARE(q.size(), i);
else
- QCOMPARE( q.size(), -1 );
+ QCOMPARE(q.size(), -1);
q2.clear();
- QVERIFY_SQL( q, exec( "update " + qtest + " set id = 100 where id = 1" ) );
- QCOMPARE( q.size(), -1 );
- QCOMPARE( q.size(), -1 ); // yes, twice
+ QVERIFY_SQL(q, exec(QLatin1String("update %1 set id = 100 where id = 1").arg(qtest)));
+ QCOMPARE(q.size(), -1);
+ QCOMPARE(q.size(), -1); // yes, twice
}
void tst_QSqlQuery::isSelect()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QSqlQuery q( db );
- QVERIFY_SQL( q, exec( "select * from " + qtest ) );
- QVERIFY( q.isSelect() );
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec("select * from " + qtest));
+ QVERIFY(q.isSelect());
- QVERIFY_SQL( q, exec( "update " + qtest + " set id = 1 where id = 1" ) );
- QVERIFY( q.isSelect() == false );
+ QVERIFY_SQL(q, exec(QLatin1String("update %1 set id = 1 where id = 1").arg(qtest)));
+ QVERIFY(!q.isSelect());
}
void tst_QSqlQuery::first()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- QVERIFY( q.at() == QSql::BeforeFirstRow );
- QVERIFY_SQL( q, exec( "select * from " + qtest ) );
- QVERIFY( q.last() );
- QVERIFY_SQL( q, first() );
- QVERIFY( q.at() == 0 );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlQuery q(db);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY_SQL(q, exec("select * from " + qtest));
+ QVERIFY(q.last());
+ QVERIFY_SQL(q, first());
+ QCOMPARE(q.at(), 0);
}
void tst_QSqlQuery::next()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- QVERIFY( q.at() == QSql::BeforeFirstRow );
- QVERIFY_SQL( q, exec( "select * from " + qtest ) );
- QVERIFY( q.first() );
- QVERIFY( q.next() );
- QVERIFY( q.at() == 1 );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlQuery q(db);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY_SQL(q, exec("select * from " + qtest));
+ QVERIFY(q.first());
+ QVERIFY(q.next());
+ QCOMPARE(q.at(), 1);
}
void tst_QSqlQuery::prev()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- QVERIFY( q.at() == QSql::BeforeFirstRow );
- QVERIFY_SQL( q, exec( "select * from " + qtest ) );
- QVERIFY( q.first() );
- QVERIFY( q.next() );
- QVERIFY( q.previous() );
- QVERIFY( q.at() == 0 );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlQuery q(db);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY_SQL(q, exec("select * from " + qtest));
+ QVERIFY(q.first());
+ QVERIFY(q.next());
+ QVERIFY(q.previous());
+ QCOMPARE(q.at(), 0);
}
void tst_QSqlQuery::last()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- QCOMPARE( q.at(), int( QSql::BeforeFirstRow ) );
- QVERIFY_SQL( q, exec( "select * from " + qtest ) );
- int i = 0;
-
- while ( q.next() )
- i++;
-
- QCOMPARE( q.at(), int( QSql::AfterLastRow ) );
-
- QVERIFY( q.last() );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QSet<int> validReturns(QSet<int>() << -1 << i-1);
- QVERIFY( validReturns.contains(q.at()) );
+ QSqlQuery q(db);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY_SQL(q, exec("select * from " + qtest));
- QSqlQuery q2( "select * from " + qtest, db );
+ int i = 0;
+ while (q.next())
+ ++i;
- QVERIFY( q2.last() );
+ QCOMPARE(q.at(), QSql::AfterLastRow);
+ QVERIFY(q.last());
+ QSet<int> validReturns(QSet<int>() << -1 << i - 1);
+ QVERIFY(validReturns.contains(q.at()));
- QVERIFY( validReturns.contains(q.at()) );
+ QSqlQuery q2("select * from " + qtest, db);
+ QVERIFY(q2.last());
+ QVERIFY(validReturns.contains(q.at()));
}
void tst_QSqlQuery::seek()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- QSqlQuery q( db );
- QVERIFY( q.at() == QSql::BeforeFirstRow );
- QVERIFY_SQL( q, exec( QString( "select id from %1 order by id" ).arg( qtest ) ) );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ QSqlQuery q(db);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY_SQL(q, exec(QLatin1String("select id from %1 order by id").arg(qtest)));
// NB! The order of the calls below are important!
- QVERIFY( q.last() );
- QVERIFY( !q.seek( QSql::BeforeFirstRow ) );
- QCOMPARE( q.at(), int( QSql::BeforeFirstRow ) );
- QVERIFY( q.seek( 0 ) );
- QCOMPARE( q.at(), 0 );
- QCOMPARE( q.value( 0 ).toInt(), 1 );
-
- QVERIFY( q.seek( 1 ) );
- QCOMPARE( q.at(), 1 );
- QCOMPARE( q.value( 0 ).toInt(), 2 );
-
- QVERIFY( q.seek( 3 ) );
- QCOMPARE( q.at(), 3 );
- QCOMPARE( q.value( 0 ).toInt(), 4 );
-
- QVERIFY( q.seek( -2, true ) );
- QCOMPARE( q.at(), 1 );
- QVERIFY( q.seek( 0 ) );
- QCOMPARE( q.at(), 0 );
- QCOMPARE( q.value( 0 ).toInt(), 1 );
+ QVERIFY(q.last());
+ QVERIFY(!q.seek(QSql::BeforeFirstRow));
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.seek(0));
+ QCOMPARE(q.at(), 0);
+ QCOMPARE(q.value(0).toInt(), 1);
+
+ QVERIFY(q.seek(1));
+ QCOMPARE(q.at(), 1);
+ QCOMPARE(q.value(0).toInt(), 2);
+
+ QVERIFY(q.seek(3));
+ QCOMPARE(q.at(), 3);
+ QCOMPARE(q.value(0).toInt(), 4);
+
+ QVERIFY(q.seek(-2, true));
+ QCOMPARE(q.at(), 1);
+ QVERIFY(q.seek(0));
+ QCOMPARE(q.at(), 0);
+ QCOMPARE(q.value(0).toInt(), 1);
QVERIFY(!q.seek(QSql::BeforeFirstRow));
- QCOMPARE(q.at(), int(QSql::BeforeFirstRow));
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
QVERIFY(q.seek(1, true));
QCOMPARE(q.at(), 0);
QCOMPARE(q.value(0).toInt(), 1);
qint32 count = 1;
- while (q.next()) ++count;
+ while (q.next())
+ ++count;
- QCOMPARE(q.at(), int(QSql::AfterLastRow));
+ QCOMPARE(q.at(), QSql::AfterLastRow);
if (!q.isForwardOnly()) {
QVERIFY(q.seek(-1, true));
@@ -1392,137 +1357,120 @@ void tst_QSqlQuery::seek()
QCOMPARE(q.value(0).toInt(), count);
} else {
QVERIFY(!q.seek(-1, true));
- QCOMPARE(q.at(), int(QSql::AfterLastRow));
+ QCOMPARE(q.at(), QSql::AfterLastRow);
}
}
void tst_QSqlQuery::seekForwardOnlyQuery()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QSqlQuery q( db );
- q.setForwardOnly( false );
- QVERIFY( !q.isForwardOnly() );
+ QSqlQuery q(db);
+ q.setForwardOnly(false);
+ QVERIFY(!q.isForwardOnly());
- QVERIFY( q.at() == QSql::BeforeFirstRow );
- QVERIFY_SQL( q, exec( QString( "select id from %1 order by id" ).arg( qtest ) ) );
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY_SQL(q, exec(QLatin1String("select id from %1 order by id").arg(qtest)));
QSqlRecord rec;
// NB! The order of the calls below are important!
- QVERIFY( q.seek( 0 ) );
- QCOMPARE( q.at(), 0 );
+ QVERIFY(q.seek(0));
+ QCOMPARE(q.at(), 0);
rec = q.record();
- QCOMPARE( rec.value( 0 ).toInt(), 1 );
+ QCOMPARE(rec.value(0).toInt(), 1);
- QVERIFY( q.seek( 1 ) );
- QCOMPARE( q.at(), 1 );
+ QVERIFY(q.seek(1));
+ QCOMPARE(q.at(), 1);
rec = q.record();
- QCOMPARE( rec.value( 0 ).toInt(), 2 );
+ QCOMPARE(rec.value(0).toInt(), 2);
// Make a jump!
- QVERIFY( q.seek( 3 ) );
- QCOMPARE( q.at(), 3 );
+ QVERIFY(q.seek(3));
+ QCOMPARE(q.at(), 3);
rec = q.record();
- QCOMPARE( rec.value( 0 ).toInt(), 4 );
+ QCOMPARE(rec.value(0).toInt(), 4);
// Last record in result set
- QVERIFY( q.seek( 4 ) );
- QCOMPARE( q.at(), 4 );
+ QVERIFY(q.seek(4));
+ QCOMPARE(q.at(), 4);
rec = q.record();
- QCOMPARE( rec.value( 0 ).toInt(), 5 );
+ QCOMPARE(rec.value(0).toInt(), 5);
}
-// tests the forward only mode;
void tst_QSqlQuery::forwardOnly()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- q.setForwardOnly( true );
- QVERIFY( q.isForwardOnly() );
- QVERIFY( q.at() == QSql::BeforeFirstRow );
- QVERIFY_SQL( q, exec( "select * from " + qtest + " order by id" ) );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlQuery q(db);
+ q.setForwardOnly(true);
+ QVERIFY(q.isForwardOnly());
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY_SQL(q, exec(QLatin1String("select * from %1 order by id").arg(qtest)));
if (!q.isForwardOnly())
QSKIP("DBMS doesn't support forward-only queries");
- QVERIFY( q.at() == QSql::BeforeFirstRow );
- QVERIFY( q.first() );
- QCOMPARE( q.at(), 0 );
- QCOMPARE( q.value( 0 ).toInt(), 1 );
- QVERIFY( q.next() );
- QCOMPARE( q.at(), 1 );
- QCOMPARE( q.value( 0 ).toInt(), 2 );
- QVERIFY( q.next() );
- QCOMPARE( q.at(), 2 );
- QCOMPARE( q.value( 0 ).toInt(), 3 );
-
- // lets make some mistakes to see how robust it is
- QTest::ignoreMessage( QtWarningMsg, "QSqlQuery::seek: cannot seek backwards in a forward only query" );
- QVERIFY( q.first() == false );
- QCOMPARE( q.at(), 2 );
- QCOMPARE( q.value( 0 ).toInt(), 3 );
- QTest::ignoreMessage( QtWarningMsg, "QSqlQuery::seek: cannot seek backwards in a forward only query" );
- QVERIFY( q.previous() == false );
- QCOMPARE( q.at(), 2 );
- QCOMPARE( q.value( 0 ).toInt(), 3 );
- QVERIFY( q.next() );
- QCOMPARE( q.at(), 3 );
- QCOMPARE( q.value( 0 ).toInt(), 4 );
-
- QVERIFY_SQL( q, exec( "select * from " + qtest ) );
- int i = 0;
-
- while ( q.next() )
- i++;
-
- QVERIFY( q.at() == QSql::AfterLastRow );
-
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- QSqlQuery q2 = q;
-QT_WARNING_POP
-
- QVERIFY( q2.isForwardOnly() );
-
- QVERIFY_SQL( q, exec( "select * from " + qtest + " order by id" ) );
-
- QVERIFY( q.isForwardOnly() );
-
- QVERIFY( q2.isForwardOnly() );
-
- QCOMPARE( q.at(), int( QSql::BeforeFirstRow ) );
-
- QVERIFY_SQL( q, seek( 3 ) );
-
- QCOMPARE( q.at(), 3 );
-
- QCOMPARE( q.value( 0 ).toInt(), 4 );
-
- QTest::ignoreMessage( QtWarningMsg, "QSqlQuery::seek: cannot seek backwards in a forward only query" );
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.first());
+ QCOMPARE(q.at(), 0);
+ QCOMPARE(q.value(0).toInt(), 1);
+ QVERIFY(q.next());
+ QCOMPARE(q.at(), 1);
+ QCOMPARE(q.value(0).toInt(), 2);
+ QVERIFY(q.next());
+ QCOMPARE(q.at(), 2);
+ QCOMPARE(q.value(0).toInt(), 3);
- QVERIFY( q.seek( 0 ) == false );
+ // Let's make some mistakes to see how robust it is:
+ QTest::ignoreMessage(QtWarningMsg,
+ "QSqlQuery::seek: cannot seek backwards in a forward only query");
+ QVERIFY(!q.first());
+ QCOMPARE(q.at(), 2);
+ QCOMPARE(q.value(0).toInt(), 3);
+ QTest::ignoreMessage(QtWarningMsg,
+ "QSqlQuery::seek: cannot seek backwards in a forward only query");
+ QVERIFY(!q.previous());
+ QCOMPARE(q.at(), 2);
+ QCOMPARE(q.value(0).toInt(), 3);
+ QVERIFY(q.next());
+ QCOMPARE(q.at(), 3);
+ QCOMPARE(q.value(0).toInt(), 4);
- QCOMPARE( q.value( 0 ).toInt(), 4 );
+ QVERIFY_SQL(q, exec("select * from " + qtest));
- QCOMPARE( q.at(), 3 );
+ int i = 0;
+ while (q.next())
+ ++i;
- QVERIFY( q.last() );
+ QCOMPARE(q.at(), QSql::AfterLastRow);
- QCOMPARE( q.at(), i-1 );
+ QVERIFY_SQL(q, exec(QLatin1String("select * from %1 order by id").arg(qtest)));
+ QVERIFY(q.isForwardOnly());
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
- QTest::ignoreMessage( QtWarningMsg, "QSqlQuery::seek: cannot seek backwards in a forward only query" );
+ QVERIFY_SQL(q, seek(3));
+ QCOMPARE(q.at(), 3);
+ QCOMPARE(q.value(0).toInt(), 4);
- QVERIFY( q.first() == false );
+ QTest::ignoreMessage(QtWarningMsg,
+ "QSqlQuery::seek: cannot seek backwards in a forward only query");
+ QVERIFY(!q.seek(0));
+ QCOMPARE(q.value(0).toInt(), 4);
+ QCOMPARE(q.at(), 3);
- QCOMPARE( q.at(), i-1 );
+ QVERIFY(q.last());
+ QCOMPARE(q.at(), i - 1);
- QVERIFY( q.next() == false );
+ QTest::ignoreMessage(QtWarningMsg,
+ "QSqlQuery::seek: cannot seek backwards in a forward only query");
+ QVERIFY(!q.first());
+ QCOMPARE(q.at(), i - 1);
- QCOMPARE( q.at(), int( QSql::AfterLastRow ) );
+ QVERIFY(!q.next());
+ QCOMPARE(q.at(), QSql::AfterLastRow);
}
void tst_QSqlQuery::forwardOnlyMultipleResultSet()
@@ -1531,36 +1479,38 @@ void tst_QSqlQuery::forwardOnlyMultipleResultSet()
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
-
if (!db.driver()->hasFeature(QSqlDriver::MultipleResultSets))
QSKIP("DBMS doesn't support multiple result sets");
QSqlQuery q(db);
q.setForwardOnly(true);
- QVERIFY_SQL(q, exec("select id, t_varchar from " + qtest + " order by id;" // 1.
- "select id, t_varchar, t_char from " + qtest + " where id<4 order by id;" // 2.
- "update " + qtest + " set t_varchar='VarChar555' where id=5;" // 3.
- "select * from " + qtest + " order by id;" // 4.
- "select * from " + qtest + " where id=5 order by id;" // 5.
- "select * from " + qtest + " where id=-1 order by id;" // 6.
- "select * from " + qtest + " order by id")); // 7.
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "select id, t_varchar from %1 order by id;" // 1.
+ "select id, t_varchar, t_char from %1 where id<4 order by id;" // 2.
+ "update %1 set t_varchar='VarChar555' where id=5;" // 3.
+ "select * from %1 order by id;" // 4.
+ "select * from %1 where id=5 order by id;" // 5.
+ "select * from %1 where id=-1 order by id;" // 6.
+ "select * from %1 order by id") // 7.
+ .arg(qtest)));
if (!q.isForwardOnly())
QSKIP("DBMS doesn't support forward-only queries");
// 1. Result set with 2 columns and 5 rows
- QVERIFY(q.at() == QSql::BeforeFirstRow);
- QCOMPARE(q.isActive(), true);
- QCOMPARE(q.isSelect(), true);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.isActive());
+ QVERIFY(q.isSelect());
// Test record() of first result set
QSqlRecord record = q.record();
QCOMPARE(record.count(), 2);
QCOMPARE(record.indexOf("id"), 0);
QCOMPARE(record.indexOf("t_varchar"), 1);
- if (dbType != QSqlDriver::PostgreSQL) { // tableName() is not available in forward-only mode of QPSQL
- QCOMPARE(record.field(0).tableName(), qtest); // BUG: This fails for Microsoft SQL Server 2016 (QODBC), need fix
+ // tableName() is not available in forward-only mode of QPSQL
+ if (tst_Databases::getDatabaseType(db) != QSqlDriver::PostgreSQL) {
+ // BUG: This fails for Microsoft SQL Server 2016 (QODBC), need fix:
+ QCOMPARE(record.field(0).tableName(), qtest);
QCOMPARE(record.field(1).tableName(), qtest);
}
@@ -1577,18 +1527,21 @@ void tst_QSqlQuery::forwardOnlyMultipleResultSet()
QCOMPARE(q.at(), 3);
QCOMPARE(q.value(0).toInt(), 4);
- QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::seek: cannot seek backwards in a forward only query");
- QVERIFY(q.first() == false);
+ QTest::ignoreMessage(QtWarningMsg,
+ "QSqlQuery::seek: cannot seek backwards in a forward only query");
+ QVERIFY(!q.first());
QCOMPARE(q.at(), 3);
QCOMPARE(q.value(0).toInt(), 4);
- QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::seek: cannot seek backwards in a forward only query");
- QVERIFY(q.previous() == false);
+ QTest::ignoreMessage(QtWarningMsg,
+ "QSqlQuery::seek: cannot seek backwards in a forward only query");
+ QVERIFY(!q.previous());
QCOMPARE(q.at(), 3);
QCOMPARE(q.value(0).toInt(), 4);
- QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::seek: cannot seek backwards in a forward only query");
- QVERIFY(q.seek(1) == false);
+ QTest::ignoreMessage(QtWarningMsg,
+ "QSqlQuery::seek: cannot seek backwards in a forward only query");
+ QVERIFY(!q.seek(1));
QCOMPARE(q.at(), 3);
QCOMPARE(q.value(0).toInt(), 4);
@@ -1596,15 +1549,15 @@ void tst_QSqlQuery::forwardOnlyMultipleResultSet()
QCOMPARE(q.at(), 4);
// Try move after last row
- QVERIFY(q.next() == false);
+ QVERIFY(!q.next());
QCOMPARE(q.at(), QSql::AfterLastRow);
- QCOMPARE(q.isActive(), true);
+ QVERIFY(q.isActive());
// 2. Result set with 3 columns and 3 rows
QVERIFY(q.nextResult());
- QVERIFY(q.at() == QSql::BeforeFirstRow);
- QCOMPARE(q.isActive(), true);
- QCOMPARE(q.isSelect(), true);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.isActive());
+ QVERIFY(q.isSelect());
// Test record() of second result set
record = q.record();
@@ -1614,28 +1567,28 @@ void tst_QSqlQuery::forwardOnlyMultipleResultSet()
QCOMPARE(record.indexOf("t_char"), 2);
// Test iteration
- QVERIFY(q.at() == QSql::BeforeFirstRow);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
int index = 0;
while (q.next()) {
QCOMPARE(q.at(), index);
- QCOMPARE(q.value(0).toInt(), index+1);
- index++;
+ QCOMPARE(q.value(0).toInt(), index + 1);
+ ++index;
}
- QVERIFY(q.at() == QSql::AfterLastRow);
+ QCOMPARE(q.at(), QSql::AfterLastRow);
QCOMPARE(index, 3);
// 3. Update statement
QVERIFY(q.nextResult());
- QVERIFY(q.at() == QSql::BeforeFirstRow);
- QCOMPARE(q.isActive(), true);
- QCOMPARE(q.isSelect(), false);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.isActive());
+ QVERIFY(!q.isSelect());
QCOMPARE(q.numRowsAffected(), 1);
// 4. Result set with 5 rows
QVERIFY(q.nextResult());
- QVERIFY(q.at() == QSql::BeforeFirstRow);
- QCOMPARE(q.isActive(), true);
- QCOMPARE(q.isSelect(), true);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.isActive());
+ QVERIFY(q.isSelect());
// Test forward seek(n)
QVERIFY(q.seek(2));
@@ -1652,38 +1605,38 @@ void tst_QSqlQuery::forwardOnlyMultipleResultSet()
// 5. Result set with 1 row
QVERIFY(q.nextResult());
- QVERIFY(q.at() == QSql::BeforeFirstRow);
- QCOMPARE(q.isActive(), true);
- QCOMPARE(q.isSelect(), true);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.isActive());
+ QVERIFY(q.isSelect());
QVERIFY(q.first());
QCOMPARE(q.at(), 0);
QCOMPARE(q.value(0).toInt(), 5);
- QVERIFY(q.next() == false);
- QVERIFY(q.at() == QSql::AfterLastRow);
+ QVERIFY(!q.next());
+ QCOMPARE(q.at(), QSql::AfterLastRow);
// 6. Result set without rows
QVERIFY(q.nextResult());
- QVERIFY(q.at() == QSql::BeforeFirstRow);
- QCOMPARE(q.isActive(), true);
- QCOMPARE(q.isSelect(), true);
- QVERIFY(q.next() == false);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.isActive());
+ QVERIFY(q.isSelect());
+ QVERIFY(!q.next());
// 7. Result set with 5 rows
QVERIFY(q.nextResult());
- QVERIFY(q.at() == QSql::BeforeFirstRow);
- QCOMPARE(q.isActive(), true);
- QCOMPARE(q.isSelect(), true);
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.isActive());
+ QVERIFY(q.isSelect());
// Just skip it, so we move after last result set.
- QVERIFY(q.nextResult() == false);
- QVERIFY(q.at() == QSql::BeforeFirstRow);
- QCOMPARE(q.isActive(), false);
+ QVERIFY(!q.nextResult());
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(!q.isActive());
// See if we can execute another query
- QVERIFY_SQL(q, exec("select id from " + qtest + " where id=5"));
- QVERIFY(q.at() == QSql::BeforeFirstRow);
- QCOMPARE(q.isActive(), true);
- QCOMPARE(q.isSelect(), true);
+ QVERIFY_SQL(q, exec(QLatin1String("select id from %1 where id=5").arg(qtest)));
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.isActive());
+ QVERIFY(q.isSelect());
QVERIFY(q.first());
QCOMPARE(q.at(), 0);
QCOMPARE(q.value("id").toInt(), 5);
@@ -1699,7 +1652,7 @@ void tst_QSqlQuery::psql_forwardOnlyQueryResultsLost()
QSqlQuery q1(db);
q1.setForwardOnly(true);
- QVERIFY_SQL(q1, exec("select * from " + qtest + " where id<=3 order by id"));
+ QVERIFY_SQL(q1, exec(QLatin1String("select * from %1 where id<=3 order by id").arg(qtest)));
if (!q1.isForwardOnly())
QSKIP("DBMS doesn't support forward-only queries");
@@ -1712,7 +1665,7 @@ void tst_QSqlQuery::psql_forwardOnlyQueryResultsLost()
// will cause the query results of q1 to be lost.
QSqlQuery q2(db);
q2.setForwardOnly(true);
- QVERIFY_SQL(q2, exec("select * from " + qtest + " where id>3 order by id"));
+ QVERIFY_SQL(q2, exec(QLatin1String("select * from %1 where id>3 order by id").arg(qtest)));
QTest::ignoreMessage(QtWarningMsg, "QPSQLDriver::getResult: Query results lost - "
"probably discarded on executing another SQL query.");
@@ -1730,45 +1683,47 @@ void tst_QSqlQuery::psql_forwardOnlyQueryResultsLost()
void tst_QSqlQuery::query_exec()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- QVERIFY( !q.isValid() );
- QVERIFY( !q.isActive() );
- QVERIFY_SQL( q, exec( "select * from " + qtest ) );
- QVERIFY( q.isActive() );
- QVERIFY( q.next() );
- QVERIFY( q.isValid() );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlQuery q(db);
+ QVERIFY(!q.isValid());
+ QVERIFY(!q.isActive());
+ QVERIFY_SQL(q, exec("select * from " + qtest));
+ QVERIFY(q.isActive());
+ QVERIFY(q.next());
+ QVERIFY(q.isValid());
}
void tst_QSqlQuery::isNull()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- QVERIFY_SQL(q, exec("select id, t_varchar from " + qTableName("qtest_null", __FILE__, db) + " order by id"));
- QVERIFY( q.next() );
- QVERIFY( !q.isNull( 0 ) );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String("select id, t_varchar from %1 order by id")
+ .arg(qTableName("qtest_null", __FILE__, db))));
+ QVERIFY(q.next());
+ QVERIFY(!q.isNull(0));
QVERIFY(!q.isNull("id"));
- QVERIFY( q.isNull( 1 ) );
+ QVERIFY(q.isNull(1));
QVERIFY(q.isNull("t_varchar"));
- QCOMPARE( q.value( 0 ).toInt(), 0 );
- QCOMPARE( q.value( 1 ).toString(), QString() );
- QVERIFY( !q.value( 0 ).isNull() );
- QVERIFY( q.value( 1 ).isNull() );
+ QCOMPARE(q.value(0).toInt(), 0);
+ QCOMPARE(q.value(1).toString(), QString());
+ QVERIFY(!q.value(0).isNull());
+ QVERIFY(q.value(1).isNull());
- QVERIFY( q.next() );
- QVERIFY( !q.isNull( 0 ) );
+ QVERIFY(q.next());
+ QVERIFY(!q.isNull(0));
QVERIFY(!q.isNull("id"));
- QVERIFY( !q.isNull( 1 ) );
+ QVERIFY(!q.isNull(1));
QVERIFY(!q.isNull("t_varchar"));
// For a non existent field, it should be returning true.
QVERIFY(q.isNull(2));
+ QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::isNull: unknown field name 'unknown'");
QVERIFY(q.isNull("unknown"));
}
@@ -1779,26 +1734,25 @@ void tst_QSqlQuery::writeNull()
CHECK_DATABASE(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- QSqlQuery q(db);
- const QString tableName = qTableName("qtest_writenull", __FILE__, db);
-
- // the test data table is already used, so use a local hash to exercise the various
- // cases from the QSqlResultPrivate::isVariantNull helper. Only PostgreSQL supports
- // QUuid.
+ // The test data table is already used, so use a local hash to exercise the various
+ // cases from the QSqlResultPrivate::isVariantNull helper. Only PostgreSQL and Mimer SQL
+ // supports QUuid.
QMultiHash<QString, QVariant> nullableTypes = {
- {"varchar(20)", QString("not null")},
- {"varchar(20)", QByteArray("not null")},
- {"date", QDateTime::currentDateTime()},
- {"date", QDate::currentDate()},
- {"date", QTime::currentTime()},
+ { "varchar(20)", u"not null"_s },
+ { "varchar(20)", "not null"_ba },
+ { tst_Databases::dateTimeTypeName(db), QDateTime::currentDateTime() },
+ { tst_Databases::dateTypeName(db), QDate::currentDate() },
+ { tst_Databases::timeTypeName(db), QTime::currentTime() },
};
if (dbType == QSqlDriver::PostgreSQL)
nullableTypes["uuid"] = QUuid::createUuid();
+ if (dbType == QSqlDriver::MimerSQL)
+ nullableTypes["builtin.uuid"] = QUuid::createUuid();
// Helper to count rows with null values in the data column.
// Since QSqlDriver::QuerySize might not be supported, we have to count anyway
- const auto countRowsWithNull = [&]{
- q.exec("select id, data from " + tableName + " where data is null");
+ const auto countRowsWithNull = [&](QSqlQuery &q, const QString &tableName){
+ q.exec(QLatin1String("select id, data from %1 where data is null").arg(tableName));
int size = 0;
while (q.next())
++size;
@@ -1806,176 +1760,156 @@ void tst_QSqlQuery::writeNull()
};
for (const auto &nullableType : nullableTypes.keys()) {
- auto tableGuard = qScopeGuard([&]{
- q.exec("drop table " + tableName);
- });
+ TableScope ts(db, "qtest_writenull", __FILE__);
+ QSqlQuery q(db);
+
const QVariant nonNullValue = nullableTypes.value(nullableType);
// some useful diagnostic output in case of any test failure
auto errorHandler = qScopeGuard([&]{
qWarning() << "Test failure for data type" << nonNullValue.metaType().name();
- q.exec("select id, data from " + tableName);
+ q.exec("select id, data from " + ts.tableName());
while (q.next())
qWarning() << q.value(0) << q.value(1);
});
- QString createQuery = "create table " + tableName + " (id int, data " + nullableType;
- if (dbType == QSqlDriver::MSSqlServer || dbType == QSqlDriver::Sybase)
- createQuery += " null";
- createQuery += ")";
+ QString createQuery = QLatin1String("create table %3 (id int, data %1%2)")
+ .arg(nullableType,
+ dbType == QSqlDriver::MSSqlServer || dbType == QSqlDriver::Sybase ? " null" : "",
+ ts.tableName());
QVERIFY_SQL(q, exec(createQuery));
int expectedNullCount = 0;
- // verify that inserting a non-null value works
- QVERIFY_SQL(q, prepare("insert into " + tableName + " values(:id, :data)"));
+ // Verify that inserting a non-null value works:
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 values(:id, :data)").arg(ts.tableName())));
q.bindValue(":id", expectedNullCount);
q.bindValue(":data", nonNullValue);
QVERIFY_SQL(q, exec());
- QCOMPARE(countRowsWithNull(), expectedNullCount);
+ QCOMPARE(countRowsWithNull(q, ts.tableName()), expectedNullCount);
- // verify that inserting using a null QVariant produces a null entry in the database
- QVERIFY_SQL(q, prepare("insert into " + tableName + " values(:id, :data)"));
+ // Verify that inserting using a null QVariant produces a null entry in the database:
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 values(:id, :data)").arg(ts.tableName())));
q.bindValue(":id", ++expectedNullCount);
q.bindValue(":data", QVariant());
QVERIFY_SQL(q, exec());
- QCOMPARE(countRowsWithNull(), expectedNullCount);
+ QCOMPARE(countRowsWithNull(q, ts.tableName()), expectedNullCount);
- // verify that writing a null-value (but not a null-variant) produces a null entry in the database
+ // Verify that writing a null-value (but not a null-variant) produces a
+ // null entry in the database:
const QMetaType nullableMetaType = nullableTypes.value(nullableType).metaType();
- // creating a QVariant with meta type and nullptr does create a null-QVariant. We want
+ // Creating a QVariant with meta type and nullptr does create a null-QVariant. We want
// to explicitly create a non-null variant, so we have to pass in a default-constructed
// value as well (and make sure that the default value is also destroyed again,
// which is clumsy to do using std::unique_ptr with a custom deleter, so use another
// scope guard).
- void* defaultData = nullableMetaType.create();
+ void *defaultData = nullableMetaType.create();
const auto defaultTypeDeleter = qScopeGuard([&]{ nullableMetaType.destroy(defaultData); });
const QVariant nullValueVariant(nullableMetaType, defaultData);
QVERIFY(!nullValueVariant.isNull());
- QVERIFY_SQL(q, prepare("insert into " + tableName + " values(:id, :data)"));
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 values(:id, :data)").arg(ts.tableName())));
q.bindValue(":id", ++expectedNullCount);
q.bindValue(":data", nullValueVariant);
QVERIFY_SQL(q, exec());
- QCOMPARE(countRowsWithNull(), expectedNullCount);
+ QCOMPARE(countRowsWithNull(q, ts.tableName()), expectedNullCount);
- // all tests passed for this type if we got here, so don't print diagnostics
+ // All tests passed for this type if we got here, so don't print diagnostics:
errorHandler.dismiss();
}
}
-/*! TDS specific BIT field test */
-void tst_QSqlQuery::tds_bitField()
+// Oracle-specific NULL BLOB test:
+void tst_QSqlQuery::oci_nullBlob()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QString tableName = qTableName("qtest_bittest", __FILE__, db);
- QSqlQuery q( db );
-
- QVERIFY_SQL(q, exec("create table " + tableName + " (bitty bit)"));
-
- QVERIFY_SQL(q, exec("insert into " + tableName + " values (0)"));
-
- QVERIFY_SQL(q, exec("insert into " + tableName + " values (1)"));
-
- QVERIFY_SQL(q, exec("select bitty from " + tableName));
-
- QVERIFY( q.next() );
-
- QVERIFY( q.value( 0 ).toInt() == 0 );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "qtest_nullblob", __FILE__);
- QVERIFY( q.next() );
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (id int primary key, bb blob)")
+ .arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (0, EMPTY_BLOB())")
+ .arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (1, NULL)").arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (2, 'aabbcc00112233445566')")
+ .arg(ts.tableName())));
+ // Necessary otherwise Oracle will bombard you with internal errors:
+ q.setForwardOnly(true);
+ QVERIFY_SQL(q, exec(QLatin1String("select * from %1 order by id").arg(ts.tableName())));
- QVERIFY( q.value( 0 ).toInt() == 1 );
-}
+ QVERIFY(q.next());
+ QVERIFY(q.value(1).toByteArray().isEmpty());
+ QVERIFY(!q.isNull(1));
+ QVERIFY(q.next());
+ QVERIFY(q.value(1).toByteArray().isEmpty());
+ QVERIFY(q.isNull(1));
-/*! Oracle specific NULL BLOB test */
-void tst_QSqlQuery::oci_nullBlob()
-{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QString qtest_nullblob(qTableName("qtest_nullblob", __FILE__, db));
-
- QSqlQuery q( db );
- QVERIFY_SQL( q, exec( "create table " + qtest_nullblob + " (id int primary key, bb blob)" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest_nullblob + " values (0, EMPTY_BLOB())" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest_nullblob + " values (1, NULL)" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest_nullblob + " values (2, 'aabbcc00112233445566')" ) );
- // necessary otherwise oracle will bombard you with internal errors
- q.setForwardOnly( true );
- QVERIFY_SQL( q, exec( "select * from " + qtest_nullblob + " order by id" ) );
-
- QVERIFY( q.next() );
- QCOMPARE(( int )q.value( 1 ).toByteArray().size(), 0 );
- QVERIFY( !q.isNull( 1 ) );
-
- QVERIFY( q.next() );
- QCOMPARE(( int )q.value( 1 ).toByteArray().size(), 0 );
- QVERIFY( q.isNull( 1 ) );
-
- QVERIFY( q.next() );
- QCOMPARE(( int )q.value( 1 ).toByteArray().size(), 10 );
- QVERIFY( !q.isNull( 1 ) );
+ QVERIFY(q.next());
+ QCOMPARE(q.value(1).toByteArray().size(), qsizetype(10));
+ QVERIFY(!q.isNull(1));
}
-/* Oracle specific RAW field test */
+/* Oracle-specific RAW field test */
void tst_QSqlQuery::oci_rawField()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QString qtest_rawtest(qTableName("qtest_rawtest", __FILE__, db));
-
- QSqlQuery q( db );
- q.setForwardOnly( true );
- QVERIFY_SQL( q, exec( "create table " + qtest_rawtest +
- " (id int, col raw(20))" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest_rawtest + " values (0, NULL)" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest_rawtest + " values (1, '00aa1100ddeeff')" ) );
- QVERIFY_SQL( q, exec( "select col from " + qtest_rawtest + " order by id" ) );
- QVERIFY( q.next() );
- QVERIFY( q.isNull( 0 ) );
- QCOMPARE(( int )q.value( 0 ).toByteArray().size(), 0 );
- QVERIFY( q.next() );
- QVERIFY( !q.isNull( 0 ) );
- QCOMPARE(( int )q.value( 0 ).toByteArray().size(), 7 );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "qtest_rawtest", __FILE__);
+
+ QSqlQuery q(db);
+ q.setForwardOnly(true);
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (id int, col raw(20))").arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (0, NULL)").arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (1, '00aa1100ddeeff')")
+ .arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("select col from %1 order by id").arg(ts.tableName())));
+ QVERIFY(q.next());
+ QVERIFY(q.isNull(0));
+ QVERIFY(q.value(0).toByteArray().isEmpty());
+ QVERIFY(q.next());
+ QVERIFY(!q.isNull(0));
+ QCOMPARE(q.value(0).toByteArray().size(), qsizetype(7));
}
-// test whether we can fetch values with more than DOUBLE precision
+// Test whether we can fetch values with more than DOUBLE precision
// note that SQLite highest precision is that of a double, although
-// you can define field with higher precision
+// you can define field with higher precision:
void tst_QSqlQuery::precision()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType == QSqlDriver::Interbase)
QSKIP("DB unable to store high precision");
- const auto oldPrecision = db.driver()->numericalPrecisionPolicy();
+ const auto tidier = qScopeGuard([db, oldPrecision = db.driver()->numericalPrecisionPolicy()]() {
+ db.driver()->setNumericalPrecisionPolicy(oldPrecision);
+ });
+
db.driver()->setNumericalPrecisionPolicy(QSql::HighPrecision);
- const QString qtest_precision(qTableName("qtest_precision", __FILE__, db));
+ TableScope ts(db, "qtest_precision", __FILE__);
static const QLatin1String precStr("1.2345678901234567891");
{
// need a new scope for SQLITE
- QSqlQuery q( db );
+ QSqlQuery q(db);
- q.exec("drop table " + qtest_precision);
- if (tst_Databases::isMSAccess(db))
- QVERIFY_SQL(q, exec("CREATE TABLE " + qtest_precision + " (col1 number)"));
- else
- QVERIFY_SQL(q, exec("CREATE TABLE " + qtest_precision + " (col1 numeric(21, 20))"));
+ QVERIFY_SQL(q, exec(QLatin1String(tst_Databases::isMSAccess(db)
+ ? "CREATE TABLE %1 (col1 number)"
+ : "CREATE TABLE %1 (col1 numeric(21, 20))")
+ .arg(ts.tableName())));
- QVERIFY_SQL(q, exec("INSERT INTO " + qtest_precision + " (col1) VALUES (" + precStr + ")"));
- QVERIFY_SQL(q, exec("SELECT * FROM " + qtest_precision));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (col1) VALUES (%2)")
+ .arg(ts.tableName(), precStr)));
+ QVERIFY_SQL(q, exec("SELECT * FROM " + ts.tableName()));
QVERIFY(q.next());
const QString val = q.value(0).toString();
if (!val.startsWith(precStr)) {
int i = 0;
while (i < val.size() && precStr[i] != 0 && precStr[i] == val[i].toLatin1())
- i++;
+ ++i;
// TDS has crappy precisions by default
if (dbType == QSqlDriver::Sybase) {
@@ -1987,374 +1921,307 @@ void tst_QSqlQuery::precision()
}
}
} // SQLITE scope
- db.driver()->setNumericalPrecisionPolicy(oldPrecision);
}
void tst_QSqlQuery::nullResult()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- QVERIFY_SQL( q, exec( "select * from " + qtest + " where id > 50000" ) );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- if ( q.driver()->hasFeature( QSqlDriver::QuerySize ) )
- QCOMPARE( q.size(), 0 );
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String("select * from %1 where id > 50000").arg(qtest)));
- QVERIFY( q.next() == false );
+ if (q.driver()->hasFeature(QSqlDriver::QuerySize))
+ QCOMPARE(q.size(), 0);
- QVERIFY( q.first() == false );
- QVERIFY( q.last() == false );
- QVERIFY( q.previous() == false );
- QVERIFY( q.seek( 10 ) == false );
- QVERIFY( q.seek( 0 ) == false );
+ QVERIFY(!q.next());
+ QVERIFY(!q.first());
+ QVERIFY(!q.last());
+ QVERIFY(!q.previous());
+ QVERIFY(!q.seek(10));
+ QVERIFY(!q.seek(0));
}
-// this test is just an experiment to see whether we can do query-based transactions
-// the real transaction test is in tst_QSqlDatabase
-void tst_QSqlQuery::transaction()
+void tst_QSqlQuery::joins()
{
- // query based transaction is not really possible with Qt
- QSKIP( "only tested manually by trained staff");
-
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if ( !db.driver()->hasFeature( QSqlDriver::Transactions ) )
- QSKIP( "DBMS not transaction capable");
-
- // this is the standard SQL
- QString startTransactionStr( "start transaction" );
-
- if (dbType == QSqlDriver::MySqlServer)
- startTransactionStr = "begin work";
-
- QSqlQuery q( db );
-
- QSqlQuery q2( db );
-
- // test a working transaction
- q.exec( startTransactionStr );
-
- QVERIFY_SQL( q, exec( "insert into" + qtest + " values (40, 'VarChar40', 'Char40')" ) );
-
- QVERIFY_SQL( q, exec( "select * from" + qtest + " where id = 40" ) );
-
- QVERIFY( q.next() );
-
- QCOMPARE( q.value( 0 ).toInt(), 40 );
-
- QVERIFY_SQL( q, exec( "commit" ) );
-
- QVERIFY_SQL( q, exec( "select * from" + qtest + " where id = 40" ) );
- QVERIFY( q.next() );
-
- QCOMPARE( q.value( 0 ).toInt(), 40 );
-
- // test a rollback
- q.exec( startTransactionStr );
-
- QVERIFY_SQL( q, exec( "insert into" + qtest + " values (41, 'VarChar41', 'Char41')" ) );
-
- QVERIFY_SQL( q, exec( "select * from" + qtest + " where id = 41" ) );
-
- QVERIFY( q.next() );
-
- QCOMPARE( q.value( 0 ).toInt(), 41 );
-
- if ( !q.exec( "rollback" ) ) {
- if (dbType == QSqlDriver::MySqlServer) {
- qDebug( "MySQL: %s", qPrintable(tst_Databases::printError( q.lastError() ) ));
- QSKIP( "MySQL transaction failed "); //non-fatal
- } else
- QFAIL( "Could not rollback transaction: " + tst_Databases::printError( q.lastError() ) );
+ if (dbType == QSqlDriver::Oracle || dbType == QSqlDriver::Sybase
+ || dbType == QSqlDriver::Interbase || db.driverName().startsWith("QODBC")) {
+ // Oracle broken beyond recognition - cannot outer join on more than one table:
+ QSKIP("DBMS cannot understand standard SQL");
}
+ TableScope j1(db, "qtestj1", __FILE__);
+ TableScope j2(db, "qtestj2", __FILE__);
- QVERIFY_SQL( q, exec( "select * from" + qtest + " where id = 41" ) );
-
- QVERIFY( q.next() == false );
-
- // test concurrent access
- q.exec( startTransactionStr );
- QVERIFY_SQL( q, exec( "insert into" + qtest + " values (42, 'VarChar42', 'Char42')" ) );
- QVERIFY_SQL( q, exec( "select * from" + qtest + " where id = 42" ) );
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), 42 );
-
- QVERIFY_SQL( q2, exec( "select * from" + qtest + " where id = 42" ) );
-
- if ( q2.next() )
- qDebug("DBMS '%s' doesn't support query based transactions with concurrent access",
- qPrintable(tst_Databases::dbToString( db )));
-
- QVERIFY_SQL( q, exec( "commit" ) );
+ QSqlQuery q(db);
- QVERIFY_SQL( q2, exec( "select * from" + qtest + " where id = 42" ) );
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (id1 int, id2 int)").arg(j1.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (id int, name varchar(20))").arg(j2.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (1, 1)").arg(j1.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (1, 2)").arg(j1.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values(1, 'trenton')").arg(j2.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values(2, 'marius')").arg(j2.tableName())));
- QVERIFY( q2.next() );
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "select qtestj1.id1, qtestj1.id2, qtestj2.id, qtestj2.name, "
+ "qtestj3.id, qtestj3.name from %1 qtestj1 left outer join %2 qtestj2 "
+ "on (qtestj1.id1 = qtestj2.id) left outer join %2 as qtestj3 "
+ "on (qtestj1.id2 = qtestj3.id)").arg(j1.tableName(), j2.tableName())));
- QCOMPARE( q2.value( 0 ).toInt(), 42 );
-}
-
-void tst_QSqlQuery::joins()
-{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- const QString qtestj1(qTableName("qtestj1", __FILE__, db)), qtestj2(qTableName("qtestj2", __FILE__, db));
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), 1);
+ QCOMPARE(q.value(1).toInt(), 1);
+ QCOMPARE(q.value(2).toInt(), 1);
+ QCOMPARE(q.value(3).toString(), u"trenton");
+ QCOMPARE(q.value(4).toInt(), 1);
+ QCOMPARE(q.value(5).toString(), u"trenton");
- if (dbType == QSqlDriver::Oracle || dbType == QSqlDriver::Sybase
- || dbType == QSqlDriver::Interbase || db.driverName().startsWith("QODBC"))
- // Oracle broken beyond recognition - cannot outer join on more than
- // one table.
- QSKIP( "DBMS cannot understand standard SQL");
-
- QSqlQuery q( db );
-
- QVERIFY_SQL( q, exec( "create table " + qtestj1 + " (id1 int, id2 int)" ) );
- QVERIFY_SQL( q, exec( "create table " + qtestj2 + " (id int, name varchar(20))" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtestj1 + " values (1, 1)" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtestj1 + " values (1, 2)" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtestj2 + " values(1, 'trenton')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtestj2 + " values(2, 'marius')" ) );
-
- QVERIFY_SQL( q, exec( "select qtestj1.id1, qtestj1.id2, qtestj2.id, qtestj2.name, qtestj3.id, qtestj3.name "
- "from " + qtestj1 + " qtestj1 left outer join " + qtestj2 +
- " qtestj2 on (qtestj1.id1 = qtestj2.id) "
- "left outer join " + qtestj2 + " as qtestj3 on (qtestj1.id2 = qtestj3.id)" ) );
-
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), 1 );
- QCOMPARE( q.value( 1 ).toInt(), 1 );
- QCOMPARE( q.value( 2 ).toInt(), 1 );
- QCOMPARE( q.value( 3 ).toString(), QString( "trenton" ) );
- QCOMPARE( q.value( 4 ).toInt(), 1 );
- QCOMPARE( q.value( 5 ).toString(), QString( "trenton" ) );
-
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), 1 );
- QCOMPARE( q.value( 1 ).toInt(), 2 );
- QCOMPARE( q.value( 2 ).toInt(), 1 );
- QCOMPARE( q.value( 3 ).toString(), QString( "trenton" ) );
- QCOMPARE( q.value( 4 ).toInt(), 2 );
- QCOMPARE( q.value( 5 ).toString(), QString( "marius" ) );
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), 1);
+ QCOMPARE(q.value(1).toInt(), 2);
+ QCOMPARE(q.value(2).toInt(), 1);
+ QCOMPARE(q.value(3).toString(), u"trenton");
+ QCOMPARE(q.value(4).toInt(), 2);
+ QCOMPARE(q.value(5).toString(), u"marius");
}
void tst_QSqlQuery::synonyms()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
QSqlQuery q(db);
- QVERIFY_SQL( q, exec("select a.id, a.t_char, a.t_varchar from " + qtest + " a where a.id = 1") );
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), 1 );
- QCOMPARE( q.value( 1 ).toString().trimmed(), QString( "Char1" ) );
- QCOMPARE( q.value( 2 ).toString().trimmed(), QString( "VarChar1" ) );
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "select a.id, a.t_char, a.t_varchar from %1 a where a.id = 1")
+ .arg(qtest)));
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), 1);
+ QCOMPARE(q.value(1).toString().trimmed(), u"Char1");
+ QCOMPARE(q.value(2).toString().trimmed(), u"VarChar1");
QSqlRecord rec = q.record();
- QCOMPARE(( int )rec.count(), 3 );
- QCOMPARE( rec.field( 0 ).name().toLower(), QString( "id" ) );
- QCOMPARE( rec.field( 1 ).name().toLower(), QString( "t_char" ) );
- QCOMPARE( rec.field( 2 ).name().toLower(), QString( "t_varchar" ) );
+ QCOMPARE(rec.count(), qsizetype(3));
+ QCOMPARE(rec.field(0).name().toLower(), u"id");
+ QCOMPARE(rec.field(1).name().toLower(), u"t_char");
+ QCOMPARE(rec.field(2).name().toLower(), u"t_varchar");
}
// It doesn't make sense to split this into several tests
void tst_QSqlQuery::prepare_bind_exec()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- const QString qtest_prepare(qTableName("qtest_prepare", __FILE__, db));
+ TableScope ts(db, "qtest_prepare", __FILE__);
+ const auto &qtest_prepare = ts.tableName();
if (dbType == QSqlDriver::DB2)
QSKIP("Needs someone with more Unicode knowledge than I have to fix");
- {
- // new scope for SQLITE
- static const QString utf8str = QString::fromUtf8( "काचं शकà¥à¤¨à¥‹à¤®à¥à¤¯à¤¤à¥à¤¤à¥à¤®à¥ । नोपहिनसà¥à¤¤à¤¿ मामॠ॥" );
+ { // New scope for SQLITE:
+ static const QString utf8str = QString::fromUtf8("काचं शकà¥à¤¨à¥‹à¤®à¥à¤¯à¤¤à¥à¤¤à¥à¤®à¥ । नोपहिनसà¥à¤¤à¤¿ मामॠ॥");
- static const QString values[6] = { "Harry", "Trond", "Mark", "Ma?rk", "?", ":id" };
+ static const QString values[6] = {
+ u"Harry"_s, u"Trond"_s, u"Mark"_s, u"Ma?rk"_s, u"?"_s, u":id"_s
+ };
- bool useUnicode = db.driver()->hasFeature( QSqlDriver::Unicode );
+ bool useUnicode = db.driver()->hasFeature(QSqlDriver::Unicode);
- QSqlQuery q( db );
- QString createQuery;
+ QSqlQuery q(db);
+ QLatin1String createQuery;
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType == QSqlDriver::PostgreSQL)
- QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
-
- if (dbType == QSqlDriver::MSSqlServer || dbType == QSqlDriver::Sybase)
- createQuery = "create table " + qtest_prepare + " (id int primary key, name nvarchar(200) null, name2 nvarchar(200) null)";
- else if (dbType == QSqlDriver::MySqlServer && useUnicode)
- createQuery = "create table " + qtest_prepare + " (id int not null primary key, name varchar(200) character set utf8, name2 varchar(200) character set utf8)";
- else
- createQuery = "create table " + qtest_prepare + " (id int not null primary key, name varchar(200), name2 varchar(200))";
-
- q.exec("drop table " + qtest_prepare);
- QVERIFY_SQL( q, exec( createQuery ) );
-
- QVERIFY( q.prepare( "insert into " + qtest_prepare + " (id, name) values (:id, :name)" ) );
- int i;
+ QVERIFY_SQL(q, exec("set client_min_messages='warning'"));
+
+ switch (dbType) {
+ case QSqlDriver::MSSqlServer:
+ case QSqlDriver::Sybase:
+ case QSqlDriver::MimerSQL:
+ createQuery = QLatin1String("create table %1 (id int primary key, "
+ "name nvarchar(200) null, name2 nvarchar(200) null)");
+ break;
+ case QSqlDriver::MySqlServer:
+ if (useUnicode) {
+ createQuery = QLatin1String("create table %1 (id int not null primary key, "
+ "name varchar(200) character set utf8, "
+ "name2 varchar(200) character set utf8)");
+ break;
+ }
+ Q_FALLTHROUGH();
+ default:
+ createQuery = QLatin1String("create table %1 (id int not null primary key, "
+ "name varchar(200), name2 varchar(200))");
+ break;
+ }
- for ( i = 0; i < 6; ++i ) {
- q.bindValue( ":name", values[i] );
- q.bindValue( ":id", i );
- QVERIFY_SQL( q, exec() );
- QVariantList m = q.boundValues();
- QCOMPARE(( int ) m.count(), 2 );
+ QVERIFY_SQL(q, exec(createQuery.arg(qtest_prepare)));
+ QVERIFY(q.prepare(QLatin1String("insert into %1 (id, name) values (:id, :name)")
+ .arg(qtest_prepare)));
+ for (int i = 0; i < 6; ++i) {
+ q.bindValue(":name", values[i]);
+ q.bindValue(":id", i);
+ QVERIFY_SQL(q, exec());
+ const QVariantList m = q.boundValues();
+ QCOMPARE(m.size(), qsizetype(2));
QCOMPARE(m.at(0).toInt(), i);
QCOMPARE(m.at(1).toString(), values[i]);
+ const QStringList n = q.boundValueNames();
+ QCOMPARE(n.size(), 2);
+ QCOMPARE(n.at(0), ":id");
+ QCOMPARE(n.at(1), ":name");
+ QCOMPARE(q.boundValueName(0), ":id");
+ QCOMPARE(q.boundValueName(1), ":name");
}
- q.bindValue( ":id", 8 );
-
- QVERIFY_SQL( q, exec() );
+ q.bindValue(":id", 8);
+ QVERIFY_SQL(q, exec());
- if ( useUnicode ) {
- q.bindValue( ":id", 7 );
- q.bindValue( ":name", utf8str );
- QVERIFY_SQL( q, exec() );
+ if (useUnicode) {
+ q.bindValue(":id", 7);
+ q.bindValue(":name", utf8str);
+ QVERIFY_SQL(q, exec());
}
- QVERIFY_SQL( q, exec( "SELECT * FROM " + qtest_prepare + " order by id" ) );
-
- for ( i = 0; i < 6; ++i ) {
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), i );
- QCOMPARE( q.value( 1 ).toString().trimmed(), values[ i ] );
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT * FROM %1 order by id").arg(qtest_prepare)));
+ for (int i = 0; i < 6; ++i) {
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), i);
+ QCOMPARE(q.value(1).toString().trimmed(), values[i]);
}
- if ( useUnicode ) {
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), 7 );
- QCOMPARE( q.value( 1 ).toString(), utf8str );
+ if (useUnicode) {
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), 7);
+ QCOMPARE(q.value(1).toString(), utf8str);
}
- QVERIFY_SQL( q, next() );
-
- QCOMPARE( q.value( 0 ).toInt(), 8 );
- QCOMPARE( q.value( 1 ).toString(), values[5] );
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), 8);
+ QCOMPARE(q.value(1).toString(), values[5]);
- QVERIFY( q.prepare( "insert into " + qtest_prepare + " (id, name) values (:id, 'Bart')" ) );
- q.bindValue( ":id", 99 );
- QVERIFY_SQL( q, exec() );
- q.bindValue( ":id", 100 );
- QVERIFY_SQL( q, exec() );
- QVERIFY( q.exec( "select * from " + qtest_prepare + " where id > 98 order by id" ) );
+ QVERIFY(q.prepare(QLatin1String("insert into %1 (id, name) values (:id, 'Bart')")
+ .arg(qtest_prepare)));
+ q.bindValue(":id", 99);
+ QVERIFY_SQL(q, exec());
+ q.bindValue(":id", 100);
+ QVERIFY_SQL(q, exec());
+ QVERIFY(q.exec(QLatin1String("select * from %1 where id > 98 order by id")
+ .arg(qtest_prepare)));
- for ( i = 99; i <= 100; ++i ) {
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), i );
- QCOMPARE( q.value( 1 ).toString().trimmed(), QString( "Bart" ) );
+ for (int i = 99; i <= 100; ++i) {
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), i);
+ QCOMPARE(q.value(1).toString().trimmed(), u"Bart");
}
/*** SELECT stuff ***/
- QVERIFY( q.prepare( "select * from " + qtest_prepare + " where id = :id" ) );
-
- for ( i = 0; i < 6; ++i ) {
- q.bindValue( ":id", i );
- QVERIFY_SQL( q, exec() );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), i );
- QCOMPARE( q.value( 1 ).toString().trimmed(), values[ i ] );
+ QVERIFY(q.prepare(QLatin1String("select * from %1 where id = :id").arg(qtest_prepare)));
+
+ for (int i = 0; i < 6; ++i) {
+ q.bindValue(":id", i);
+ QVERIFY_SQL(q, exec());
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), i);
+ QCOMPARE(q.value(1).toString().trimmed(), values[i]);
QSqlRecord rInf = q.record();
- QCOMPARE(( int )rInf.count(), 3 );
- QCOMPARE( rInf.field( 0 ).name().toUpper(), QString( "ID" ) );
- QCOMPARE( rInf.field( 1 ).name().toUpper(), QString( "NAME" ) );
- QVERIFY( !q.next() );
+ QCOMPARE(rInf.count(), qsizetype(3));
+ QCOMPARE(rInf.field(0).name().toUpper(), u"ID");
+ QCOMPARE(rInf.field(1).name().toUpper(), u"NAME");
+ QVERIFY(!q.next());
}
- QVERIFY_SQL( q, exec( "DELETE FROM " + qtest_prepare ) );
-
- /*** Below we test QSqlQuery::boundValues() with position arguments.
- * Due to the fact that the name of a positional argument is not
- * specified by the Qt docs, we test that the QList contains
- * the correct values in the same order as QSqlResult::boundValueName
- * returns since it should be in insertion order (i.e. field order). ***/
- QVERIFY( q.prepare( "insert into " + qtest_prepare + " (id, name) values (?, ?)" ) );
- q.bindValue( 0, 0 );
- q.bindValue( 1, values[ 0 ] );
- QCOMPARE( q.boundValues().size(), 2 );
+ QVERIFY_SQL(q, exec("DELETE FROM " + qtest_prepare));
+
+ /* Below we test QSqlQuery::boundValues() with position arguments.
+ Due to the fact that the name of a positional argument is not
+ specified by the Qt docs, we test that the QList contains the correct
+ values in the same order as QSqlResult::boundValueName returns since
+ it should be in insertion order (i.e. field order). */
+ QVERIFY(q.prepare(QLatin1String("insert into %1 (id, name) values (?, ?)")
+ .arg(qtest_prepare)));
+ q.bindValue(0, 0);
+ q.bindValue(1, values[0]);
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 0);
QCOMPARE(q.boundValues().at(1).toString(), values[0]);
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValues().size(), 2 );
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 0);
QCOMPARE(q.boundValues().at(1).toString(), values[0]);
- q.addBindValue( 1 );
- q.addBindValue( values[ 1 ] );
- QCOMPARE( q.boundValues().size(), 2 );
+ q.addBindValue(1);
+ q.addBindValue(values[1]);
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 1);
QCOMPARE(q.boundValues().at(1).toString(), values[1]);
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValues().size(), 2 );
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 1);
QCOMPARE(q.boundValues().at(1).toString(), values[1]);
- q.addBindValue( 2 );
- q.addBindValue( values[ 2 ] );
- QCOMPARE( q.boundValues().size(), 2 );
+ q.addBindValue(2);
+ q.addBindValue(values[2]);
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 2);
QCOMPARE(q.boundValues().at(1).toString(), values[2]);
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValues().size(), 2 );
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 2);
QCOMPARE(q.boundValues().at(1).toString(), values[2]);
- q.addBindValue( 3 );
- q.addBindValue( values[ 3 ] );
- QCOMPARE( q.boundValues().size(), 2 );
+ q.addBindValue(3);
+ q.addBindValue(values[3]);
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 3);
QCOMPARE(q.boundValues().at(1).toString(), values[3]);
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValues().size(), 2 );
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 3);
QCOMPARE(q.boundValues().at(1).toString(), values[3]);
- q.addBindValue( 4 );
- q.addBindValue( values[ 4 ] );
- QCOMPARE( q.boundValues().size(), 2 );
+ q.addBindValue(4);
+ q.addBindValue(values[4]);
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 4);
QCOMPARE(q.boundValues().at(1).toString(), values[4]);
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValues().size(), 2 );
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 4);
QCOMPARE(q.boundValues().at(1).toString(), values[4]);
- q.bindValue( 1, values[ 5 ] );
- q.bindValue( 0, 5 );
- QCOMPARE( q.boundValues().size(), 2 );
+ q.bindValue(1, values[5]);
+ q.bindValue(0, 5);
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 5);
QCOMPARE(q.boundValues().at(1).toString(), values[5]);
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValues().size(), 2 );
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 5);
QCOMPARE(q.boundValues().at(1).toString(), values[5]);
- q.bindValue( 0, 6 );
- q.bindValue( 1, QString() );
- QCOMPARE( q.boundValues().size(), 2 );
+ q.bindValue(0, 6);
+ q.bindValue(1, QString());
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 6);
QCOMPARE(q.boundValues().at(1).toString(), QString());
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.boundValues().size(), 2 );
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.boundValues().size(), 2);
QCOMPARE(q.boundValues().at(0).toInt(), 6);
QCOMPARE(q.boundValues().at(1).toString(), QString());
- if ( db.driver()->hasFeature( QSqlDriver::Unicode ) ) {
- q.bindValue( 0, 7 );
- q.bindValue( 1, utf8str );
+ if (db.driver()->hasFeature(QSqlDriver::Unicode)) {
+ q.bindValue(0, 7);
+ q.bindValue(1, utf8str);
QCOMPARE(q.boundValues().at(0).toInt(), 7);
QCOMPARE(q.boundValues().at(1).toString(), utf8str);
- QVERIFY_SQL( q, exec() );
+ QVERIFY_SQL(q, exec());
QCOMPARE(q.boundValues().at(0).toInt(), 7);
QCOMPARE(q.boundValues().at(1).toString(), utf8str);
}
@@ -2369,234 +2236,227 @@ void tst_QSqlQuery::prepare_bind_exec()
QCOMPARE(q.boundValues().at(2).toInt(), 10);
QFAIL_SQL(q, exec());
- QVERIFY_SQL( q, exec( "SELECT * FROM " + qtest_prepare + " order by id" ) );
-
- for ( i = 0; i < 6; ++i ) {
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), i );
- QCOMPARE( q.value( 1 ).toString().trimmed(), values[ i ] );
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT * FROM %1 order by id").arg(qtest_prepare)));
+ for (int i = 0; i < 6; ++i) {
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), i);
+ QCOMPARE(q.value(1).toString().trimmed(), values[i]);
}
- QVERIFY( q.next() );
+ QVERIFY(q.next());
- QCOMPARE( q.value( 0 ).toInt(), 6 );
- QVERIFY( q.value( 1 ).toString().isEmpty() );
+ QCOMPARE(q.value(0).toInt(), 6);
+ QVERIFY(q.value(1).toString().isEmpty());
- if ( useUnicode ) {
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), 7 );
- QCOMPARE( q.value( 1 ).toString(), utf8str );
+ if (useUnicode) {
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), 7);
+ QCOMPARE(q.value(1).toString(), utf8str);
}
- QVERIFY( q.prepare( "insert into " + qtest_prepare + " (id, name) values (?, 'Bart')" ) );
-
- q.bindValue( 0, 99 );
- QVERIFY_SQL( q, exec() );
- q.addBindValue( 100 );
- QVERIFY_SQL( q, exec() );
- QVERIFY( q.exec( "select * from " + qtest_prepare + " where id > 98 order by id" ) );
+ QVERIFY(q.prepare(QLatin1String("insert into %1 (id, name) values (?, 'Bart')")
+ .arg(qtest_prepare)));
+ q.bindValue(0, 99);
+ QVERIFY_SQL(q, exec());
+ q.addBindValue(100);
+ QVERIFY_SQL(q, exec());
- for ( i = 99; i <= 100; ++i ) {
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), i );
- QCOMPARE( q.value( 1 ).toString().trimmed(), QString( "Bart" ) );
+ QVERIFY(q.exec(QLatin1String("select * from %1 where id > 98 order by id")
+ .arg(qtest_prepare)));
+ for (int i = 99; i <= 100; ++i) {
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), i);
+ QCOMPARE(q.value(1).toString().trimmed(), u"Bart");
}
- /* insert a duplicate id and make sure the db bails out */
- QVERIFY( q.prepare( "insert into " + qtest_prepare + " (id, name) values (?, ?)" ) );
-
+ // Insert a duplicate id and make sure the db bails out:
+ QVERIFY(q.prepare(QLatin1String("insert into %1 (id, name) values (?, ?)")
+ .arg(qtest_prepare)));
q.addBindValue( 99 );
+ q.addBindValue(u"something silly"_s);
- q.addBindValue( "something silly" );
-
- QVERIFY( !q.exec() );
-
- QVERIFY( q.lastError().isValid() );
-
- QVERIFY( !q.isActive() );
+ QVERIFY(!q.exec());
+ QVERIFY(q.lastError().isValid());
+ QVERIFY(!q.isActive());
- QVERIFY( q.prepare( "insert into " + qtest_prepare + " (id, name, name2) values (:id, :name, :name)" ) );
- for ( i = 101; i < 103; ++i ) {
- q.bindValue( ":id", i );
- q.bindValue( ":name", "name" );
- QVERIFY( q.exec() );
+ QVERIFY(q.prepare(QLatin1String(
+ "insert into %1 (id, name, name2) values (:id, :name, :name)")
+ .arg(qtest_prepare)));
+ for (int i = 101; i < 103; ++i) {
+ q.bindValue(":id", i);
+ q.bindValue(":name", "name");
+ QVERIFY(q.exec());
}
// Test for QTBUG-6420
- QVERIFY( q.exec( "select * from " + qtest_prepare + " where id > 100 order by id" ) );
- QVERIFY( q.next() );
- QCOMPARE( q.value(0).toInt(), 101 );
- QCOMPARE( q.value(1).toString(), QString("name") );
- QCOMPARE( q.value(2).toString(), QString("name") );
-
- // Test that duplicated named placeholders before the next unique one works correctly - QTBUG-65150
- QVERIFY(q.prepare("insert into " + qtest_prepare + " (id, name, name2) values (:id, :id, :name)"));
- for (i = 104; i < 106; ++i) {
+ QVERIFY(q.exec(QLatin1String("select * from %1 where id > 100 order by id")
+ .arg(qtest_prepare)));
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), 101);
+ QCOMPARE(q.value(1).toString(), u"name");
+ QCOMPARE(q.value(2).toString(), u"name");
+
+ // Test that duplicated named placeholders before the next unique one
+ // works correctly - QTBUG-65150
+ QVERIFY(q.prepare(QLatin1String("insert into %1 (id, name, name2) values (:id, :id, :name)")
+ .arg(qtest_prepare)));
+ for (int i = 104; i < 106; ++i) {
q.bindValue(":id", i);
q.bindValue(":name", "name");
QVERIFY(q.exec());
}
- QVERIFY(q.exec("select * from " + qtest_prepare + " where id > 103 order by id"));
+ QVERIFY(q.exec(QLatin1String("select * from %1 where id > 103 order by id")
+ .arg(qtest_prepare)));
QVERIFY(q.next());
QCOMPARE(q.value(0).toInt(), 104);
- QCOMPARE(q.value(1).toString(), QString("104"));
- QCOMPARE(q.value(2).toString(), QString("name"));
+ QCOMPARE(q.value(1).toString(), u"104");
+ QCOMPARE(q.value(2).toString(), u"name");
// Test that duplicated named placeholders in any order
- QVERIFY(q.prepare("insert into " + qtest_prepare + " (id, name, name2) values (:id, :name, :id)"));
- for (i = 107; i < 109; ++i) {
+ QVERIFY(q.prepare(QLatin1String("insert into %1 (id, name, name2) values (:id, :name, :id)")
+ .arg(qtest_prepare)));
+ for (int i = 107; i < 109; ++i) {
q.bindValue(":id", i);
q.bindValue(":name", "name");
QVERIFY(q.exec());
}
- QVERIFY(q.exec("select * from " + qtest_prepare + " where id > 106 order by id"));
+ QVERIFY(q.exec(QLatin1String("select * from %1 where id > 106 order by id")
+ .arg(qtest_prepare)));
QVERIFY(q.next());
QCOMPARE(q.value(0).toInt(), 107);
- QCOMPARE(q.value(1).toString(), QString("name"));
- QCOMPARE(q.value(2).toString(), QString("107"));
+ QCOMPARE(q.value(1).toString(), u"name");
+ QCOMPARE(q.value(2).toString(), u"107");
// Test just duplicated placeholders
- QVERIFY(q.prepare("insert into " + qtest_prepare + " (id, name, name2) values (110, :name, :name)"));
+ QVERIFY(q.prepare(QLatin1String(
+ "insert into %1 (id, name, name2) values (110, :name, :name)")
+ .arg(qtest_prepare)));
q.bindValue(":name", "name");
QVERIFY_SQL(q, exec());
- QVERIFY(q.exec("select * from " + qtest_prepare + " where id > 109 order by id"));
+ QVERIFY(q.exec(QLatin1String("select * from %1 where id > 109 order by id")
+ .arg(qtest_prepare)));
QVERIFY(q.next());
QCOMPARE(q.value(0).toInt(), 110);
- QCOMPARE(q.value(1).toString(), QString("name"));
- QCOMPARE(q.value(2).toString(), QString("name"));
- } // end of SQLite scope
+ QCOMPARE(q.value(1).toString(), u"name");
+ QCOMPARE(q.value(2).toString(), u"name");
+ } // End of SQLite scope.
}
void tst_QSqlQuery::prepared_select()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- QVERIFY_SQL( q, prepare( "select a.id, a.t_char, a.t_varchar from " + qtest + " a where a.id = ?" ) );
-
- q.bindValue( 0, 1 );
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.at(), ( int )QSql::BeforeFirstRow );
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), 1 );
-
- q.bindValue( 0, 2 );
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.at(), ( int )QSql::BeforeFirstRow );
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), 2 );
-
- q.bindValue( 0, 3 );
- QVERIFY_SQL( q, exec() );
- QCOMPARE( q.at(), ( int )QSql::BeforeFirstRow );
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), 3 );
-
- QVERIFY_SQL( q, prepare( "select a.id, a.t_char, a.t_varchar from " + qtest + " a where a.id = ?" ) );
- QCOMPARE( q.at(), ( int )QSql::BeforeFirstRow );
- QVERIFY( !q.first() );
-}
-
-void tst_QSqlQuery::sqlServerLongStrings()
-{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType != QSqlDriver::MSSqlServer)
- QSKIP( "SQL Server specific test");
-
- QSqlQuery q( db );
-
- QVERIFY_SQL(q, exec("CREATE TABLE " + qTableName("qtest_longstr", __FILE__, db) + " (id int primary key, longstring ntext)"));
-
- QVERIFY_SQL(q, prepare("INSERT INTO " + qTableName("qtest_longstr", __FILE__, db) + " VALUES (?, ?)"));
-
- q.addBindValue( 0 );
-
- q.addBindValue( QString::fromLatin1( "bubu" ) );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ const QString query = QLatin1String(
+ "select a.id, a.t_char, a.t_varchar from %1 a where a.id = ?").arg(qtest);
- QVERIFY_SQL( q, exec() );
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, prepare(query));
- QString testStr;
+ q.bindValue(0, 1);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), 1);
- testStr.fill( QLatin1Char( 'a' ), 85000 );
+ q.bindValue(0, 2);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), 2);
- q.addBindValue( 1 );
+ q.bindValue(0, 3);
+ QVERIFY_SQL(q, exec());
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), 3);
- q.addBindValue( testStr );
+ QVERIFY_SQL(q, prepare(query));
+ QCOMPARE(q.at(), QSql::BeforeFirstRow);
+ QVERIFY(!q.first());
+}
- QVERIFY_SQL( q, exec() );
+void tst_QSqlQuery::sqlServerLongStrings()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ if (tst_Databases::getDatabaseType(db) != QSqlDriver::MSSqlServer)
+ QSKIP("Test is specific to SQL Server");
- QVERIFY_SQL(q, exec("select * from " + qTableName( "qtest_longstr", __FILE__, db)));
+ TableScope ts(db, "qtest_longstr", __FILE__);
+ QSqlQuery q(db);
- QVERIFY_SQL( q, next() );
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (id int primary key, longstring ntext)")
+ .arg(ts.tableName())));
+ QVERIFY_SQL(q, prepare(QLatin1String("INSERT INTO %1 VALUES (?, ?)").arg(ts.tableName())));
- QCOMPARE( q.value( 0 ).toInt(), 0 );
+ q.addBindValue(0);
+ q.addBindValue(u"bubu"_s);
+ QVERIFY_SQL(q, exec());
- QCOMPARE( q.value( 1 ).toString(), QString::fromLatin1( "bubu" ) );
+ const QString testStr(85000, QLatin1Char('a'));
- QVERIFY_SQL( q, next() );
+ q.addBindValue(1);
+ q.addBindValue(testStr);
+ QVERIFY_SQL(q, exec());
+ QVERIFY_SQL(q, exec("select * from " + ts.tableName()));
- QCOMPARE( q.value( 0 ).toInt(), 1 );
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), 0);
+ QCOMPARE(q.value(1).toString(), u"bubu");
- QCOMPARE( q.value( 1 ).toString(), testStr );
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), 1);
+ QCOMPARE(q.value(1).toString(), testStr);
}
void tst_QSqlQuery::invalidQuery()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- QSqlQuery q( db );
+ QSqlQuery q(db);
- QVERIFY( !q.exec() );
+ QVERIFY(!q.exec());
- QVERIFY( !q.exec( "blahfasel" ) );
- QVERIFY( q.lastError().type() != QSqlError::NoError );
- QVERIFY( !q.next() );
- QVERIFY( !q.isActive() );
+ QVERIFY(!q.exec("blahfasel"));
+ QVERIFY(q.lastError().type() != QSqlError::NoError);
+ QVERIFY(!q.next());
+ QVERIFY(!q.isActive());
- if (dbType != QSqlDriver::Oracle && dbType != QSqlDriver::DB2 && !db.driverName().startsWith("QODBC")) {
- // oracle and db2 just prepares everything without complaining
- if ( db.driver()->hasFeature( QSqlDriver::PreparedQueries ) )
- QVERIFY( !q.prepare( "blahfasel" ) );
+ if (dbType != QSqlDriver::Oracle && dbType != QSqlDriver::DB2
+ && !db.driverName().startsWith("QODBC")) {
+ // Oracle and DB2 just prepare everything without complaining:
+ if (db.driver()->hasFeature(QSqlDriver::PreparedQueries))
+ QVERIFY(!q.prepare("blahfasel"));
}
- QVERIFY( !q.exec() );
-
- QVERIFY( !q.isActive() );
- QVERIFY( !q.next() );
+ QVERIFY(!q.exec());
+ QVERIFY(!q.isActive());
+ QVERIFY(!q.next());
}
void tst_QSqlQuery::batchExec()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- const QString tableName = qTableName("qtest_batch", __FILE__, db);
- tst_Databases::safeDropTable(db, tableName);
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ QSqlQuery q(db);
+ TableScope ts(db, "qtest_batch", __FILE__);
+ const auto &tableName = ts.tableName();
const auto dbType = tst_Databases::getDatabaseType(db);
- QString timeStampString;
- if (dbType == QSqlDriver::Interbase)
- timeStampString = QLatin1String("TIMESTAMP");
- else
- timeStampString = QLatin1String("TIMESTAMP (3)");
+ QLatin1String timeStampString(dbType == QSqlDriver::Interbase ? "TIMESTAMP" : "TIMESTAMP (3)");
- QVERIFY_SQL(q, exec(QStringLiteral("create table ") + tableName +
- QStringLiteral(" (id int, name varchar(20), dt date, num numeric(8, 4), "
- "dtstamp ") + timeStampString +
- QStringLiteral(", extraId int, extraName varchar(20))")));
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create table %2 (id int, name varchar(20), dt date, "
+ "num numeric(8, 4), dtstamp %1, extraId int, extraName varchar(20))")
+ .arg(timeStampString, tableName)));
const QVariantList intCol = { 1, 2, QVariant(QMetaType(QMetaType::Int)) };
- const QVariantList charCol = { QStringLiteral("harald"), QStringLiteral("boris"),
+ const QVariantList charCol = { u"harald"_s, u"boris"_s,
QVariant(QMetaType(QMetaType::QString)) };
const QDateTime currentDateTime = QDateTime(QDateTime::currentDateTime());
const QVariantList dateCol = { currentDateTime.date(), currentDateTime.date().addDays(-1),
@@ -2606,30 +2466,31 @@ void tst_QSqlQuery::batchExec()
QVariant(QMetaType(QMetaType::QDateTime)) };
// Test with positional placeholders
- QVERIFY_SQL(q, prepare(QStringLiteral("insert into ") + tableName +
- QStringLiteral(" (id, name, dt, num, dtstamp, extraId, extraName) values "
- "(?, ?, ?, ?, ?, ?, ?)")));
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 "
+ "(id, name, dt, num, dtstamp, extraId, extraName) "
+ "values (?, ?, ?, ?, ?, ?, ?)").arg(tableName)));
q.addBindValue(intCol);
- q.addBindValue( charCol );
- q.addBindValue( dateCol );
- q.addBindValue( numCol );
+ q.addBindValue(charCol);
+ q.addBindValue(dateCol);
+ q.addBindValue(numCol);
q.addBindValue(timeStampCol);
q.addBindValue(intCol);
q.addBindValue(charCol);
- QVERIFY_SQL( q, execBatch() );
- QVERIFY_SQL(q, exec(QStringLiteral("select id, name, dt, num, dtstamp, "
- "extraId, extraName from ") + tableName));
+ QVERIFY_SQL(q, execBatch());
+ QVERIFY_SQL(q, exec(QLatin1String("select id, name, dt, num, dtstamp, extraId, extraName from ")
+ + tableName));
for (int i = 0; i < intCol.size(); ++i) {
QVERIFY(q.next());
QCOMPARE(q.value(0).toInt(), intCol.at(i));
QCOMPARE(q.value(1).toString(), charCol.at(i));
QCOMPARE(q.value(2).toDate(), dateCol.at(i));
- QCOMPARE(q.value(3).toDouble(), numCol.at(i));
- if (tst_Databases::getDatabaseType(db) == QSqlDriver::MySqlServer && timeStampCol.at(i).isNull()) {
- QEXPECT_FAIL("", "This appears to be a bug in MySQL as it converts null datetimes to the "
- "current datetime for a timestamp field", Continue);
+ QVERIFY(qFuzzyCompare(q.value(3).toDouble(), numCol.at(i).toDouble()));
+ if (tst_Databases::getDatabaseType(db) == QSqlDriver::MySqlServer
+ && timeStampCol.at(i).isNull()) {
+ QEXPECT_FAIL("", "This appears to be a bug in MySQL as it converts null datetimes to "
+ "the current datetime for a timestamp field", Continue);
}
QCOMPARE(q.value(4).toDateTime(), timeStampCol.at(i));
QCOMPARE(q.value(5).toInt(), intCol.at(i));
@@ -2637,10 +2498,11 @@ void tst_QSqlQuery::batchExec()
}
// Empty table ready for retesting with duplicated named placeholders
- QVERIFY_SQL(q, exec(QStringLiteral("delete from ") + tableName));
- QVERIFY_SQL(q, prepare(QStringLiteral("insert into ") + tableName +
- QStringLiteral(" (id, name, dt, num, dtstamp, extraId, extraName) "
- "values (:id, :name, :dt, :num, :dtstamp, :id, :name)")));
+ QVERIFY_SQL(q, exec(QLatin1String("delete from ") + tableName));
+ QVERIFY_SQL(q, prepare(QLatin1String(
+ "insert into %1 (id, name, dt, num, dtstamp, extraId, extraName) "
+ "values (:id, :name, :dt, :num, :dtstamp, :id, :name)")
+ .arg(tableName)));
q.bindValue(":id", intCol);
q.bindValue(":name", charCol);
q.bindValue(":dt", dateCol);
@@ -2648,18 +2510,19 @@ void tst_QSqlQuery::batchExec()
q.bindValue(":dtstamp", timeStampCol);
QVERIFY_SQL(q, execBatch());
- QVERIFY_SQL(q, exec(QStringLiteral("select id, name, dt, num, dtstamp, extraId, extraName from ") +
- tableName));
+ QVERIFY_SQL(q, exec(QLatin1String("select id, name, dt, num, dtstamp, extraId, extraName from ")
+ + tableName));
for (int i = 0; i < intCol.size(); ++i) {
QVERIFY(q.next());
QCOMPARE(q.value(0).toInt(), intCol.at(i));
QCOMPARE(q.value(1).toString(), charCol.at(i));
QCOMPARE(q.value(2).toDate(), dateCol.at(i));
- QCOMPARE(q.value(3).toDouble(), numCol.at(i));
- if (tst_Databases::getDatabaseType(db) == QSqlDriver::MySqlServer && timeStampCol.at(i).isNull()) {
- QEXPECT_FAIL("", "This appears to be a bug in MySQL as it converts null datetimes to the "
- "current datetime for a timestamp field", Continue);
+ QVERIFY(qFuzzyCompare(q.value(3).toDouble(), numCol.at(i).toDouble()));
+ if (tst_Databases::getDatabaseType(db) == QSqlDriver::MySqlServer
+ && timeStampCol.at(i).isNull()) {
+ QEXPECT_FAIL("", "This appears to be a bug in MySQL as it converts null datetimes to "
+ "the current datetime for a timestamp field", Continue);
}
QCOMPARE(q.value(4).toDateTime(), timeStampCol.at(i));
QCOMPARE(q.value(5).toInt(), intCol.at(i));
@@ -2667,19 +2530,21 @@ void tst_QSqlQuery::batchExec()
}
// Only test the prepared stored procedure approach where the driver has support
- // for batch operations as this will not work without it
- if (db.driver()->hasFeature(QSqlDriver::BatchOperations)) {
+ // for batch operations as this will not work without it.
+ // Currently Mimer SQL cannot use output parameters with procedures in batch operations.
+ if (dbType != QSqlDriver::MimerSQL && db.driver()->hasFeature(QSqlDriver::BatchOperations)) {
const QString procName = qTableName("qtest_batch_proc", __FILE__, db);
- QVERIFY_SQL(q, exec("create or replace procedure " + procName +
- " (x in timestamp, y out timestamp) is\n"
- "begin\n"
- " y := x;\n"
- "end;\n"));
- QVERIFY(q.prepare("call " + procName + "(?, ?)"));
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create or replace procedure %1 (x in timestamp, y out timestamp) "
+ "is\n"
+ "begin\n"
+ " y := x;\n"
+ "end;\n").arg(procName)));
+ QVERIFY(q.prepare(QLatin1String("call %1(?, ?)").arg(procName)));
q.addBindValue(timeStampCol, QSql::In);
QVariantList emptyDateTimes;
emptyDateTimes.reserve(timeStampCol.size());
- for (int i = 0; i < timeStampCol.size(); i++)
+ for (int i = 0; i < timeStampCol.size(); ++i)
emptyDateTimes << QVariant(QDateTime());
q.addBindValue(emptyDateTimes, QSql::Out);
QVERIFY_SQL(q, execBatch());
@@ -2692,20 +2557,19 @@ void tst_QSqlQuery::QTBUG_43874()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "bug43874", __FILE__);
QSqlQuery q(db);
- const QString tableName = qTableName("bug43874", __FILE__, db);
- QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + " (id INT)"));
- QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " (id) VALUES (?)"));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (id INT)").arg(ts.tableName())));
+ QVERIFY_SQL(q, prepare(QLatin1String("INSERT INTO %1 (id) VALUES (?)").arg(ts.tableName())));
for (int i = 0; i < 2; ++i) {
- QVariantList ids;
- ids << i;
+ const QVariantList ids = { i };
q.addBindValue(ids);
QVERIFY_SQL(q, execBatch());
}
- QVERIFY_SQL(q, exec("SELECT id FROM " + tableName + " ORDER BY id"));
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT id FROM %1 ORDER BY id").arg(ts.tableName())));
QVERIFY(q.next());
QCOMPARE(q.value(0).toInt(), 0);
@@ -2716,210 +2580,230 @@ void tst_QSqlQuery::QTBUG_43874()
void tst_QSqlQuery::oraArrayBind()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- if ( !db.driver()->hasFeature( QSqlDriver::BatchOperations ) )
- QSKIP( "Database can't do BatchOperations");
-
- QSqlQuery q( db );
-
- QVERIFY_SQL( q, exec( "CREATE OR REPLACE PACKAGE ora_array_test "
- "IS "
- "TYPE names_type IS TABLE OF VARCHAR(64) NOT NULL INDEX BY BINARY_INTEGER; "
- "names_tab names_type; "
- "PROCEDURE set_name(name_in IN VARCHAR2, row_in in INTEGER); "
- "PROCEDURE get_name(row_in IN INTEGER, str_out OUT VARCHAR2); "
- "PROCEDURE get_table(tbl OUT names_type); "
- "PROCEDURE set_table(tbl IN names_type); "
- "END ora_array_test; " ) );
-
- QVERIFY_SQL( q, exec( "CREATE OR REPLACE PACKAGE BODY ora_array_test "
- "IS "
- "PROCEDURE set_name(name_in IN VARCHAR2, row_in in INTEGER) "
- "IS "
- "BEGIN "
- "names_tab(row_in) := name_in; "
- "END set_name; "
-
- "PROCEDURE get_name(row_in IN INTEGER, str_out OUT VARCHAR2) "
- "IS "
- "BEGIN "
- "str_out := names_tab(row_in); "
- "END get_name; "
-
- "PROCEDURE get_table(tbl OUT names_type) "
- "IS "
- "BEGIN "
- "tbl:=names_tab; "
- "END get_table; "
-
- "PROCEDURE set_table(tbl IN names_type) "
- "IS "
- "BEGIN "
- "names_tab := tbl; "
- "END set_table; "
- "END ora_array_test; " ) );
-
- QVariantList list;
-
- list << QString( "lorem" ) << QString( "ipsum" ) << QString( "dolor" ) << QString( "sit" ) << QString( "amet" );
-
- QVERIFY_SQL( q, prepare( "BEGIN "
- "ora_array_test.set_table(?); "
- "END;" ) );
-
- q.bindValue( 0, list, QSql::In );
-
- QVERIFY_SQL( q, execBatch( QSqlQuery::ValuesAsColumns ) );
-
- QVERIFY_SQL( q, prepare( "BEGIN "
- "ora_array_test.get_table(?); "
- "END;" ) );
-
- list.clear();
-
- list << QString( 64,' ' ) << QString( 64,' ' ) << QString( 64,' ' ) << QString( 64,' ' ) << QString( 64,' ' );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- q.bindValue( 0, list, QSql::Out );
+ if (!db.driver()->hasFeature(QSqlDriver::BatchOperations))
+ QSKIP("Database can't do BatchOperations");
- QVERIFY_SQL( q, execBatch( QSqlQuery::ValuesAsColumns ) );
+ QSqlQuery q(db);
- QVariantList out_list = q.boundValue( 0 ).toList();
+ QVERIFY_SQL(q, exec("CREATE OR REPLACE PACKAGE ora_array_test "
+ "IS TYPE names_type IS "
+ "TABLE OF VARCHAR(64) NOT NULL INDEX BY BINARY_INTEGER; "
+ "names_tab names_type; "
+ "PROCEDURE set_name(name_in IN VARCHAR2, row_in in INTEGER); "
+ "PROCEDURE get_name(row_in IN INTEGER, str_out OUT VARCHAR2); "
+ "PROCEDURE get_table(tbl OUT names_type); "
+ "PROCEDURE set_table(tbl IN names_type); "
+ "END ora_array_test; "));
+
+ QVERIFY_SQL(q, exec("CREATE OR REPLACE PACKAGE BODY ora_array_test "
+ "IS "
+ "PROCEDURE set_name(name_in IN VARCHAR2, row_in in INTEGER) "
+ "IS "
+ "BEGIN "
+ "names_tab(row_in) := name_in; "
+ "END set_name; "
+
+ "PROCEDURE get_name(row_in IN INTEGER, str_out OUT VARCHAR2) "
+ "IS "
+ "BEGIN "
+ "str_out := names_tab(row_in); "
+ "END get_name; "
+
+ "PROCEDURE get_table(tbl OUT names_type) "
+ "IS "
+ "BEGIN "
+ "tbl:=names_tab; "
+ "END get_table; "
+
+ "PROCEDURE set_table(tbl IN names_type) "
+ "IS "
+ "BEGIN "
+ "names_tab := tbl; "
+ "END set_table; "
+ "END ora_array_test; "));
+
+ QVariantList list = { u"lorem"_s, u"ipsum"_s, u"dolor"_s, u"sit"_s, u"amet"_s };
+
+ QVERIFY_SQL(q, prepare("BEGIN "
+ "ora_array_test.set_table(?); "
+ "END;"));
+ q.bindValue(0, list, QSql::In);
+ QVERIFY_SQL(q, execBatch(QSqlQuery::ValuesAsColumns));
+ QVERIFY_SQL(q, prepare("BEGIN "
+ "ora_array_test.get_table(?); "
+ "END;"));
- QCOMPARE( out_list.at( 0 ).toString(), QString( "lorem" ) );
+ list.clear();
+ list.resize(5, QString(64, ' '));
- QCOMPARE( out_list.at( 1 ).toString(), QString( "ipsum" ) );
+ q.bindValue(0, list, QSql::Out);
- QCOMPARE( out_list.at( 2 ).toString(), QString( "dolor" ) );
+ QVERIFY_SQL(q, execBatch(QSqlQuery::ValuesAsColumns));
- QCOMPARE( out_list.at( 3 ).toString(), QString( "sit" ) );
+ const QVariantList out_list = q.boundValue(0).toList();
- QCOMPARE( out_list.at( 4 ).toString(), QString( "amet" ) );
+ QCOMPARE(out_list.at(0).toString(), u"lorem");
+ QCOMPARE(out_list.at(1).toString(), u"ipsum");
+ QCOMPARE(out_list.at(2).toString(), u"dolor");
+ QCOMPARE(out_list.at(3).toString(), u"sit");
+ QCOMPARE(out_list.at(4).toString(), u"amet");
- QVERIFY_SQL( q, exec( "DROP PACKAGE ora_array_test" ) );
+ QVERIFY_SQL(q, exec("DROP PACKAGE ora_array_test"));
}
-/*
- Tests that QSqlDatabase::record and QSqlQuery::record returns the same thing
- otherwise our models get confused.
- */
+/* Tests that QSqlDatabase::record() and QSqlQuery::record() return the same
+ thing - otherwise our models get confused.
+*/
void tst_QSqlQuery::record_sqlite()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QSqlQuery q( db );
+ TableScope ts(db, "record_sqlite");
+ QSqlQuery q(db);
- QVERIFY_SQL(q, exec("create table " + qTableName("record_sqlite", __FILE__, db) + "(id integer primary key, name varchar, title int)"));
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create table %1(id integer primary key, name varchar, title int)")
+ .arg(ts.tableName())));
- QSqlRecord rec = db.record(qTableName("record_sqlite", __FILE__, db));
+ QSqlRecord rec = db.record(ts.tableName());
- QCOMPARE( rec.count(), 3 );
- QCOMPARE( rec.field( 0 ).metaType().id(), QMetaType::Int );
- QCOMPARE( rec.field( 1 ).metaType().id(), QMetaType::QString );
- QCOMPARE( rec.field( 2 ).metaType().id(), QMetaType::Int );
+ QCOMPARE(rec.count(), 3);
+ QCOMPARE(rec.field(0).metaType().id(), QMetaType::Int);
+ QCOMPARE(rec.field(1).metaType().id(), QMetaType::QString);
+ QCOMPARE(rec.field(2).metaType().id(), QMetaType::Int);
- /* important - select from an empty table */
- QVERIFY_SQL(q, exec("select id, name, title from " + qTableName("record_sqlite", __FILE__, db)));
+ // Important - select from an empty table:
+ QVERIFY_SQL(q, exec("select id, name, title from " + ts.tableName()));
rec = q.record();
- QCOMPARE( rec.count(), 3 );
- QCOMPARE( rec.field( 0 ).metaType().id(), QMetaType::Int );
- QCOMPARE( rec.field( 1 ).metaType().id(), QMetaType::QString );
- QCOMPARE( rec.field( 2 ).metaType().id(), QMetaType::Int );
+ QCOMPARE(rec.count(), 3);
+ QCOMPARE(rec.field(0).metaType().id(), QMetaType::Int);
+ QCOMPARE(rec.field(1).metaType().id(), QMetaType::QString);
+ QCOMPARE(rec.field(2).metaType().id(), QMetaType::Int);
}
void tst_QSqlQuery::oraLong()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QString aLotOfText( 127000, QLatin1Char( 'H' ) );
+ QString aLotOfText(127000, QLatin1Char('H'));
+ TableScope ts(db, "qtest_longstr", __FILE__);
- QVERIFY_SQL(q, exec("create table " + qTableName("qtest_longstr", __FILE__, db) + " (id int primary key, astr long)"));
- QVERIFY_SQL(q, prepare("insert into " + qTableName("qtest_longstr", __FILE__, db) + " (id, astr) values (?, ?)"));
- q.addBindValue( 1 );
- q.addBindValue( aLotOfText );
- QVERIFY_SQL( q, exec() );
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (id int primary key, astr long)")
+ .arg(ts.tableName())));
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 (id, astr) values (?, ?)")
+ .arg(ts.tableName())));
+ q.addBindValue(1);
+ q.addBindValue(aLotOfText);
+ QVERIFY_SQL(q, exec());
- QVERIFY_SQL(q, exec("select id,astr from " + qTableName("qtest_longstr", __FILE__, db)));
+ QVERIFY_SQL(q, exec("select id,astr from " + ts.tableName()));
- QVERIFY( q.next() );
- QCOMPARE( q.value( 0 ).toInt(), 1 );
- QCOMPARE( q.value( 1 ).toString(), aLotOfText );
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toInt(), 1);
+ QCOMPARE(q.value(1).toString(), aLotOfText);
}
void tst_QSqlQuery::execErrorRecovery()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QSqlQuery q( db );
+ TableScope ts(db, "qtest_exerr", __FILE__);
- const QString tbl = qTableName("qtest_exerr", __FILE__, db);
- q.exec("drop table " + tbl);
- QVERIFY_SQL(q, exec("create table " + tbl + " (id int not null primary key)"));
- QVERIFY_SQL(q, prepare("insert into " + tbl + " values (?)" ));
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (id int not null primary key)").arg(ts.tableName())));
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1 values (?)").arg(ts.tableName())));
- q.addBindValue( 1 );
- QVERIFY_SQL( q, exec() );
+ q.addBindValue(1);
+ QVERIFY_SQL(q, exec());
- q.addBindValue( 1 ); // binding the same pkey - should fail
- QVERIFY( !q.exec() );
+ q.addBindValue(1); // Binding the same pkey - should fail.
+ QVERIFY(!q.exec());
- q.addBindValue( 2 ); // this should work again
- QVERIFY_SQL( q, exec() );
+ q.addBindValue(2); // This should work again.
+ QVERIFY_SQL(q, exec());
+}
+
+void tst_QSqlQuery::prematureExec()
+{
+ QFETCH(QString, dbName);
+ // We only want the engine name, for addDatabase():
+ int cut = dbName.indexOf(QChar('@'));
+ if (cut < 0)
+ QSKIP("Failed to parse database type out of name");
+ dbName.truncate(cut);
+ cut = dbName.indexOf(QChar('_'));
+ if (cut >= 0)
+ dbName = dbName.sliced(cut + 1);
+
+ const auto tidier = qScopeGuard([dbName]() { QSqlDatabase::removeDatabase(dbName); });
+ // Note: destruction of db needs to happen before we call removeDatabase.
+ auto db = QSqlDatabase::addDatabase(dbName);
+ QSqlQuery q(db);
+
+ QTest::ignoreMessage(QtWarningMsg,
+ "QSqlDatabasePrivate::removeDatabase: connection "
+ "'qt_sql_default_connection' is still in use, all "
+ "queries will cease to work.");
+ QTest::ignoreMessage(QtWarningMsg,
+ "QSqlDatabasePrivate::addDatabase: duplicate connection name "
+ "'qt_sql_default_connection', old connection removed.");
+ auto otherDb = QSqlDatabase::addDatabase(dbName);
+
+ QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::exec: called before driver has been set up");
+ // QTBUG-100037: shouldn't crash !
+ QVERIFY(!q.exec("select stuff from TheVoid"));
}
void tst_QSqlQuery::lastInsertId()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- if ( !db.driver()->hasFeature( QSqlDriver::LastInsertId ) )
- QSKIP( "Database doesn't support lastInsertId");
+ if (!db.driver()->hasFeature(QSqlDriver::LastInsertId))
+ QSKIP("Database doesn't support lastInsertId");
- QSqlQuery q( db );
+ QSqlQuery q(db);
// PostgreSQL >= 8.1 relies on lastval() which does not work if a value is
// manually inserted to the serial field, so we create a table specifically
if (tst_Databases::getDatabaseType(db) == QSqlDriver::PostgreSQL) {
- const auto tst_lastInsertId = qTableName("tst_lastInsertId", __FILE__, db);
- tst_Databases::safeDropTable(db, tst_lastInsertId);
- QVERIFY_SQL(q, exec(QStringLiteral("create table ") + tst_lastInsertId +
- QStringLiteral(" (id serial not null, t_varchar "
- "varchar(20), t_char char(20), primary key(id))")));
- QVERIFY_SQL(q, exec(QStringLiteral("insert into ") + tst_lastInsertId +
- QStringLiteral(" (t_varchar, t_char) values "
- "('VarChar41', 'Char41')")));
+ TableScope ts(db, "tst_lastInsertId", __FILE__);
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (id serial not null, t_varchar "
+ "varchar(20), t_char char(20), primary key(id))")
+ .arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 (t_varchar, t_char) values "
+ "('VarChar41', 'Char41')").arg(ts.tableName())));
} else {
- QVERIFY_SQL(q, exec(QStringLiteral("insert into ") + qtest +
- QStringLiteral(" values (41, 'VarChar41', 'Char41')")));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (41, 'VarChar41', 'Char41')")
+ .arg(qtest)));
}
- QVariant v = q.lastInsertId();
-
- QVERIFY( v.isValid() );
+ QVERIFY(q.lastInsertId().isValid());
}
void tst_QSqlQuery::lastQuery()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QSqlQuery q( db );
+ QSqlQuery q(db);
QString sql = "select * from " + qtest;
- QVERIFY_SQL( q, exec( sql ) );
- QCOMPARE( q.lastQuery(), sql );
- QCOMPARE( q.executedQuery(), sql );
+ QVERIFY_SQL(q, exec(sql));
+ QCOMPARE(q.lastQuery(), sql);
+ QCOMPARE(q.executedQuery(), sql);
}
void tst_QSqlQuery::lastQueryTwoQueries()
@@ -2943,30 +2827,34 @@ void tst_QSqlQuery::lastQueryTwoQueries()
void tst_QSqlQuery::psql_bindWithDoubleColonCastOperator()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- const QString tablename(qTableName("bindtest", __FILE__, db));
-
- QSqlQuery q( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QVERIFY_SQL( q, exec( "create table " + tablename + " (id1 int, id2 int, id3 int, fld1 int, fld2 int)" ) );
- QVERIFY_SQL( q, exec( "insert into " + tablename + " values (1, 2, 3, 10, 5)" ) );
+ TableScope ts(db, "bindtest", __FILE__);
- QVERIFY_SQL( q, prepare( "select sum((fld1 - fld2)::int) from " + tablename + " where id1 = :myid1 and id2 =:myid2 and id3=:myid3" ) );
- q.bindValue( ":myid1", 1 );
- q.bindValue( ":myid2", 2 );
- q.bindValue( ":myid3", 3 );
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create table %1 (id1 int, id2 int, id3 int, fld1 int, fld2 int)")
+ .arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 values (1, 2, 3, 10, 5)").arg(ts.tableName())));
+
+ // Insert tableName last to let the other %-tokens' numbering match what they're replaced with:
+ const auto queryTemplate = QLatin1String("select sum((fld1 - fld2)::int) from %4 where "
+ "id1 = %1 and id2 =%2 and id3=%3");
+ const QString query = queryTemplate.arg(":myid1", ":myid2", ":myid3", ts.tableName());
+ QVERIFY_SQL(q, prepare(query));
+ q.bindValue(":myid1", 1);
+ q.bindValue(":myid2", 2);
+ q.bindValue(":myid3", 3);
- QVERIFY_SQL( q, exec() );
- QVERIFY_SQL( q, next() );
+ QVERIFY_SQL(q, exec());
+ QVERIFY_SQL(q, next());
- // the positional placeholders are converted to named placeholders in executedQuery()
- if (db.driver()->hasFeature(QSqlDriver::PreparedQueries))
- QCOMPARE(q.executedQuery(), QString("select sum((fld1 - fld2)::int) from " + tablename + " where id1 = :myid1 and id2 =:myid2 and id3=:myid3"));
- else
- QCOMPARE(q.executedQuery(), QString("select sum((fld1 - fld2)::int) from " + tablename + " where id1 = 1 and id2 =2 and id3=3"));
+ // The positional placeholders are converted to named placeholders in executedQuery()
+ const QString expected = db.driver()->hasFeature(QSqlDriver::PreparedQueries)
+ ? query : queryTemplate.arg("1", "2", "3", ts.tableName());
+ QCOMPARE(q.executedQuery(), expected);
}
void tst_QSqlQuery::psql_specialFloatValues()
@@ -2976,29 +2864,28 @@ void tst_QSqlQuery::psql_specialFloatValues()
if (!std::numeric_limits<float>::has_infinity)
QSKIP("Platform does not have infinity");
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE( db );
+ CHECK_DATABASE(db);
QSqlQuery query(db);
- const QString tableName = qTableName("floattest", __FILE__, db);
- QVERIFY_SQL( query, exec("create table " + tableName + " (value float)" ) );
- QVERIFY_SQL(query, prepare("insert into " + tableName + " values(:value)") );
-
- QVariantList data;
- data << QVariant(double(42.42))
- << QVariant(std::numeric_limits<double>::quiet_NaN())
- << QVariant(std::numeric_limits<double>::infinity())
- << QVariant(float(42.42))
- << QVariant(std::numeric_limits<float>::quiet_NaN())
- << QVariant(std::numeric_limits<float>::infinity());
-
- foreach (const QVariant &v, data) {
+ TableScope ts(db, "floattest", __FILE__);
+ QVERIFY_SQL(query, exec(QLatin1String("create table %1 (value float)").arg(ts.tableName())));
+ QVERIFY_SQL(query, prepare(QLatin1String("insert into %1 values(:value)").arg(ts.tableName())));
+
+ const QVariant data[] = {
+ QVariant(double(42.42)),
+ QVariant(std::numeric_limits<double>::quiet_NaN()),
+ QVariant(std::numeric_limits<double>::infinity()),
+ QVariant(float(42.42)),
+ QVariant(std::numeric_limits<float>::quiet_NaN()),
+ QVariant(std::numeric_limits<float>::infinity()),
+ };
+
+ for (const QVariant &v : data) {
query.bindValue(":value", v);
- QVERIFY_SQL( query, exec() );
+ QVERIFY_SQL(query, exec());
}
-
- QVERIFY_SQL( query, exec("drop table " + tableName) );
}
/* For task 157397: Using QSqlQuery with an invalid QSqlDatabase
@@ -3008,25 +2895,28 @@ void tst_QSqlQuery::psql_specialFloatValues()
void tst_QSqlQuery::queryOnInvalidDatabase()
{
{
- QTest::ignoreMessage( QtWarningMsg, "QSqlDatabase: INVALID driver not loaded" );
- QSqlDatabase db = QSqlDatabase::addDatabase( "INVALID", "invalidConnection" );
- QVERIFY2( db.lastError().isValid(),
- qPrintable( QString( "db.lastError().isValid() should be true!" ) ) );
-
- QTest::ignoreMessage( QtWarningMsg, "QSqlQuery::exec: database not open" );
- QSqlQuery query( "SELECT 1 AS ID", db );
- QVERIFY2( query.lastError().isValid(),
- qPrintable( QString( "query.lastError().isValid() should be true!" ) ) );
- }
+ const auto tidier = qScopeGuard([]() {
+ QSqlDatabase::removeDatabase("invalidConnection");
+ });
+ // Note: destruction of db needs to happen before we call removeDatabase.
+ QTest::ignoreMessage(QtWarningMsg, "QSqlDatabase: INVALID driver not loaded");
+#if QT_CONFIG(regularexpression)
+ QTest::ignoreMessage(QtWarningMsg,
+ QRegularExpression("QSqlDatabase: available drivers: "));
+#endif
+ QSqlDatabase db = QSqlDatabase::addDatabase("INVALID", "invalidConnection");
+ QVERIFY(db.lastError().isValid());
- QSqlDatabase::removeDatabase( "invalidConnection" );
+ QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::exec: database not open");
+ QSqlQuery query("SELECT 1 AS ID", db);
+ QVERIFY(query.lastError().isValid());
+ }
{
- QSqlDatabase db = QSqlDatabase::database( "this connection does not exist" );
- QTest::ignoreMessage( QtWarningMsg, "QSqlQuery::exec: database not open" );
- QSqlQuery query( "SELECT 1 AS ID", db );
- QVERIFY2( query.lastError().isValid(),
- qPrintable( QString( "query.lastError().isValid() should be true!" ) ) );
+ QSqlDatabase db = QSqlDatabase::database("this connection does not exist");
+ QTest::ignoreMessage(QtWarningMsg, "QSqlQuery::exec: database not open");
+ QSqlQuery query("SELECT 1 AS ID", db);
+ QVERIFY(query.lastError().isValid());
}
}
@@ -3036,299 +2926,313 @@ void tst_QSqlQuery::queryOnInvalidDatabase()
*/
void tst_QSqlQuery::createQueryOnClosedDatabase()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
// Only supported by these drivers
if (dbType != QSqlDriver::PostgreSQL && dbType != QSqlDriver::Oracle
- && dbType != QSqlDriver::MySqlServer && dbType != QSqlDriver::DB2)
- QSKIP( "Test is specific for PostgreSQL, Oracle, MySql and DB2");
+ && dbType != QSqlDriver::MySqlServer && dbType != QSqlDriver::DB2) {
+ QSKIP("Test is specific for PostgreSQL, Oracle, MySql and DB2");
+ }
db.close();
- QSqlQuery q( db );
+ QSqlQuery q(db);
db.open();
- QVERIFY_SQL( q, exec( QString( "select * from %1 where id = 1" ).arg( qtest ) ) );
+ QVERIFY_SQL(q, exec(QLatin1String("select * from %1 where id = 1").arg(qtest)));
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), 1 );
- QCOMPARE( q.value( 1 ).toString().trimmed(), QLatin1String( "VarChar1" ) );
- QCOMPARE( q.value( 2 ).toString().trimmed(), QLatin1String( "Char1" ) );
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), 1);
+ QCOMPARE(q.value(1).toString().trimmed(), u"VarChar1");
+ QCOMPARE(q.value(2).toString().trimmed(), u"Char1");
db.close();
- QVERIFY2( !q.exec( QString( "select * from %1 where id = 1" ).arg( qtest ) ),
- qPrintable( QString( "This can't happen! The query should not have been executed!" ) ) );
+ QVERIFY2(!q.exec(QLatin1String("select * from %1 where id = 1").arg(qtest)),
+ "This can't happen! The query should not have been executed!");
}
void tst_QSqlQuery::reExecutePreparedForwardOnlyQuery()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QSqlQuery q( db );
- q.setForwardOnly( true );
+ QSqlQuery q(db);
+ q.setForwardOnly(true);
- QVERIFY_SQL( q, prepare( QString( "SELECT id, t_varchar, t_char FROM %1 WHERE id = :id" ).arg( qtest ) ) );
- q.bindValue( ":id", 1 );
- QVERIFY_SQL( q, exec() );
+ QVERIFY_SQL(q, prepare(QLatin1String("SELECT id, t_varchar, t_char FROM %1 WHERE id = :id")
+ .arg(qtest)));
+ q.bindValue(":id", 1);
+ QVERIFY_SQL(q, exec());
// Do something, like iterate over the result, or skip to the end
- QVERIFY_SQL( q, last() );
+ QVERIFY_SQL(q, last());
- QVERIFY_SQL( q, exec() );
+ QVERIFY_SQL(q, exec());
/* This was broken with SQLite because the cache size was set to 0 in the 2nd execute.
When forwardOnly is set we don't cahce the entire result, but we do cache the current row
but this requires the cache size to be equal to the column count.
*/
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), 1 );
- QCOMPARE( q.value( 1 ).toString().trimmed(), QString( "VarChar1" ) );
- QCOMPARE( q.value( 2 ).toString().trimmed(), QString( "Char1" ) );
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), 1);
+ QCOMPARE(q.value(1).toString().trimmed(), u"VarChar1");
+ QCOMPARE(q.value(2).toString().trimmed(), u"Char1");
}
void tst_QSqlQuery::finish()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- QSqlQuery q( db );
- QVERIFY_SQL( q, prepare( "SELECT id FROM " + qtest + " WHERE id = ?" ) );
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, prepare(QLatin1String("SELECT id FROM %1 WHERE id = ?").arg(qtest)));
int id = 4;
- q.bindValue( 0, id );
- QVERIFY_SQL( q, exec() );
- QVERIFY( q.isActive() );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), id );
+ q.bindValue(0, id);
+ QVERIFY_SQL(q, exec());
+ QVERIFY(q.isActive());
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), id);
q.finish();
- QVERIFY( !q.isActive() ); // query is now inactive
- QCOMPARE( q.boundValue( 0 ).toInt(), id ); // bound values are retained
+ QVERIFY(!q.isActive()); // Query is now inactive, but ...
+ QCOMPARE(q.boundValue(0).toInt(), id); // bound values are retained.
- QVERIFY_SQL( q, exec() ); // no prepare necessary
- QVERIFY( q.isActive() );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), id );
+ QVERIFY_SQL(q, exec()); // No prepare needed.
+ QVERIFY(q.isActive());
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), id);
q.finish();
- QVERIFY( !q.isActive() );
+ QVERIFY(!q.isActive());
- QVERIFY_SQL( q, exec( "SELECT id FROM " + qtest + " WHERE id = 1" ) );
- QVERIFY( q.isActive() );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), 1 );
- QCOMPARE( q.record().count(), 1 );
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT id FROM %1 WHERE id = 1").arg(qtest)));
+ QVERIFY(q.isActive());
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), 1);
+ QCOMPARE(q.record().count(), 1);
}
void tst_QSqlQuery::sqlite_finish()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- if ( db.databaseName().startsWith( ':' ) )
- QSKIP( "This test requires a database on the filesystem, not in-memory");
+ if (db.databaseName().startsWith(':'))
+ QSKIP("This test requires a database on the filesystem, not in-memory");
{
- QSqlDatabase db2 = QSqlDatabase::addDatabase( "QSQLITE", "sqlite_finish_sqlite" );
- db2.setDatabaseName( db.databaseName() );
- QVERIFY_SQL( db2, open() );
+ const auto tidier = qScopeGuard([]() {
+ QSqlDatabase::removeDatabase("sqlite_finish_sqlite");
+ });
+ // Note: destruction of db2 needs to happen before we call removeDatabase.
+ QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE", "sqlite_finish_sqlite");
+ db2.setDatabaseName(db.databaseName());
+ QVERIFY_SQL(db2, open());
- const QString tableName(qTableName("qtest_lockedtable", __FILE__, db));
- QSqlQuery q( db );
+ TableScope ts(db, "qtest_lockedtable", __FILE__);
+ const auto &tableName = ts.tableName();
+ QSqlQuery q(db);
- tst_Databases::safeDropTable( db, tableName );
- q.exec( "CREATE TABLE " + tableName + " (pk_id INTEGER PRIMARY KEY, whatever TEXT)" );
- q.exec( "INSERT INTO " + tableName + " values(1, 'whatever')" );
- q.exec( "INSERT INTO " + tableName + " values(2, 'whatever more')" );
+ q.exec(QLatin1String("CREATE TABLE %1 (pk_id INTEGER PRIMARY KEY, whatever TEXT)")
+ .arg(tableName));
+ q.exec(QLatin1String("INSERT INTO %1 values(1, 'whatever')").arg(tableName));
+ q.exec(QLatin1String("INSERT INTO %1 values(2, 'whatever more')").arg(tableName));
// This creates a read-lock in the database
- QVERIFY_SQL( q, exec( "SELECT * FROM " + tableName + " WHERE pk_id = 1 or pk_id = 2" ) );
- QVERIFY_SQL( q, next() );
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT * FROM %1 WHERE pk_id = 1 or pk_id = 2")
+ .arg(tableName)));
+ QVERIFY_SQL(q, next());
// The DELETE will fail because of the read-lock
- QSqlQuery q2( db2 );
- QVERIFY( !q2.exec( "DELETE FROM " + tableName + " WHERE pk_id=2" ) );
- QCOMPARE( q2.numRowsAffected(), -1 );
+ QSqlQuery q2(db2);
+ QVERIFY(!q2.exec(QLatin1String("DELETE FROM %1 WHERE pk_id=2").arg(tableName)));
+ QCOMPARE(q2.numRowsAffected(), -1);
// The DELETE will succeed now because finish() removes the lock
q.finish();
- QVERIFY_SQL( q2, exec( "DELETE FROM " + tableName + " WHERE pk_id=2" ) );
- QCOMPARE( q2.numRowsAffected(), 1 );
-
- tst_Databases::safeDropTable( db, tableName );
+ QVERIFY_SQL(q2, exec(QLatin1String("DELETE FROM %1 WHERE pk_id=2").arg(tableName)));
+ QCOMPARE(q2.numRowsAffected(), 1);
}
-
- QSqlDatabase::removeDatabase( "sqlite_finish_sqlite" );
}
void tst_QSqlQuery::nextResult()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (!db.driver()->hasFeature(QSqlDriver::MultipleResultSets))
QSKIP("DBMS does not support multiple result sets");
- QSqlQuery q( db );
- const QString tableName(qTableName("more_results", __FILE__, db));
-
- QVERIFY_SQL( q, exec( "CREATE TABLE " + tableName + " (id integer, text varchar(20), num numeric(6, 3), empty varchar(10));" ) );
-
- QVERIFY_SQL( q, exec( "INSERT INTO " + tableName + " VALUES(1, 'one', 1.1, '');" ) );
-
- QVERIFY_SQL( q, exec( "INSERT INTO " + tableName + " VALUES(2, 'two', 2.2, '');" ) );
-
- QVERIFY_SQL( q, exec( "INSERT INTO " + tableName + " VALUES(3, 'three', 3.3, '');" ) );
+ QSqlQuery q(db);
+ TableScope ts(db, "more_results", __FILE__);
+ const auto &tableName = ts.tableName();
- QVERIFY_SQL( q, exec( "INSERT INTO " + tableName + " VALUES(4, 'four', 4.4, '');" ) );
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "CREATE TABLE %1 (id integer, text varchar(20), "
+ "num numeric(6, 3), empty varchar(10));").arg(tableName)));
- QStringList tstStrings;
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 VALUES(1, 'one', 1.1, '');").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 VALUES(2, 'two', 2.2, '');").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 VALUES(3, 'three', 3.3, '');")
+ .arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 VALUES(4, 'four', 4.4, '');")
+ .arg(tableName)));
- tstStrings << "one" << "two" << "three" << "four";
+ const QString tstStrings[] = { u"one"_s, u"two"_s, u"three"_s, u"four"_s };
// Query that returns only one result set, nothing special about this
- QVERIFY_SQL( q, exec( QString( "SELECT * FROM %1;" ).arg( tableName ) ) );
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT * FROM %1;").arg(tableName)));
- QVERIFY( q.next() ); // Move to first row of the result set
+ QVERIFY(q.next()); // Move to first row of the result set
- QVERIFY( !q.nextResult() ); // No more result sets are available
+ QVERIFY(!q.nextResult()); // No more result sets are available
- QVERIFY( !q.isActive() ); // So the query is no longer active
+ QVERIFY(!q.isActive()); // So the query is no longer active
- QVERIFY( !q.next() ); // ... and no data is available as the call
+ QVERIFY(!q.next()); // ... and no data is available as the call
- // to nextResult() discarded the result set
+ // Attempting nextResult() discarded the result set.
// Query that returns two result sets (batch sql)
// When working with multiple result sets SQL Server insists on non-scrollable cursors
if (db.driverName().startsWith("QODBC"))
- q.setForwardOnly( true );
+ q.setForwardOnly(true);
- QVERIFY_SQL( q, exec( "SELECT id FROM " + tableName + "; SELECT text, num FROM " + tableName + ';' ) );
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT id FROM %1; SELECT text, num FROM %1;")
+ .arg(tableName)));
- QCOMPARE( q.record().count(), 1 ); // Check that the meta data is as expected
-
- QCOMPARE( q.record().field( 0 ).name().toUpper(), QString( "ID" ) );
-
- QCOMPARE( q.record().field( 0 ).metaType().id(), QMetaType::Int );
-
- QVERIFY( q.nextResult() ); // Discards first result set and move to the next
-
- QCOMPARE( q.record().count(), 2 ); // New meta data should be available
+ QCOMPARE(q.record().count(), 1); // Check that the meta data is as expected
+ QCOMPARE(q.record().field(0).name().toUpper(), u"ID");
+ QCOMPARE(q.record().field(0).metaType().id(), QMetaType::Int);
- QCOMPARE( q.record().field( 0 ).name().toUpper(), QString( "TEXT" ) );
+ QVERIFY(q.nextResult()); // Discards first result set and move to the next
+ QCOMPARE(q.record().count(), 2); // New meta data should be available
- QCOMPARE( q.record().field( 0 ).metaType().id(), QMetaType::QString );
+ QCOMPARE(q.record().field(0).name().toUpper(), u"TEXT");
+ QCOMPARE(q.record().field(0).metaType().id(), QMetaType::QString);
- QCOMPARE( q.record().field( 1 ).name().toUpper(), QString( "NUM" ) );
+ QCOMPARE(q.record().field(1).name().toUpper(), u"NUM");
QCOMPARE(q.record().field(1).metaType().id(), QMetaType::Double);
- QVERIFY( q.next() ); // Move to first row of the second result set
-
+ QVERIFY(q.next()); // Move to first row of the second result set
QFAIL_SQL(q, nextResult()); // No more result sets after this
-
- QVERIFY( !q.isActive() ); // So the query is no longer active
-
- QVERIFY( !q.next() ); // ... and no data is available as the call to
+ QVERIFY(!q.isActive()); // So the query is no longer active
+ QVERIFY(!q.next()); // ... and no data is available as the call to
// nextResult() discarded the result set
// Query that returns one result set, a count of affected rows and then another result set
- QString query1 = QString( "SELECT id, text, num, empty FROM %1 WHERE id <= 3" ).arg( tableName );
-
- QString query2 = QString( "UPDATE %1 SET empty = 'Yatta!'" ).arg( tableName );
-
- QString query3 = QString( "SELECT id, empty FROM %1 WHERE id <=2" ).arg( tableName );
-
- QVERIFY_SQL( q, exec( QString( "%1; %2; %3;" ).arg( query1 ).arg( query2 ).arg( query3 ) ) );
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT id, text, num, empty FROM %1 WHERE id <= 3; "
+ "UPDATE %1 SET empty = 'Yatta!'; "
+ "SELECT id, empty FROM %1 WHERE id <=2;").arg(tableName)));
// Check result set returned by first statement
- QVERIFY( q.isSelect() ); // The first statement is a select
-
- for ( int i = 0; i < 3; i++ ) {
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), 1+i );
- QCOMPARE( q.value( 1 ).toString(), tstStrings.at( i ) );
- QCOMPARE( q.value( 2 ).toDouble(), 1.1*( i+1 ) );
- QVERIFY( q.value( 3 ).toString().isEmpty() );
+ QVERIFY(q.isSelect()); // The first statement is a select
+
+ for (int i = 0; i < 3; ++i) {
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), 1 + i);
+ QCOMPARE(q.value(1).toString(), tstStrings[i]);
+ QCOMPARE(q.value(2).toDouble(), 1.1 * (i + 1));
+ QVERIFY(q.value(3).toString().isEmpty());
}
- QVERIFY_SQL( q, nextResult() );
+ QVERIFY_SQL(q, nextResult());
- QVERIFY( !q.isSelect() ); // The second statement isn't a SELECT
- QVERIFY( !q.next() ); // ... so no result set is available
- QCOMPARE( q.numRowsAffected(), 4 ); // 4 rows was affected by the UPDATE
+ QVERIFY(!q.isSelect()); // The second statement isn't a SELECT
+ QVERIFY(!q.next()); // ... so no result set is available
+ QCOMPARE(q.numRowsAffected(), 4); // 4 rows was affected by the UPDATE
// Check result set returned by third statement
- QVERIFY_SQL( q, nextResult() );
- QVERIFY( q.isSelect() ); // The third statement is a SELECT
+ QVERIFY_SQL(q, nextResult());
+ QVERIFY(q.isSelect()); // The third statement is a SELECT
- for ( int i = 0; i < 2; i++ ) {
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), 1+i );
- QCOMPARE( q.value( 1 ).toString(), QString( "Yatta!" ) );
+ for (int i = 0; i < 2; ++i) {
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), 1 + i);
+ QCOMPARE(q.value(1).toString(), u"Yatta!");
}
// Stored procedure with multiple result sets
const QString procName(qTableName("proc_more_res", __FILE__, db));
- if (dbType == QSqlDriver::PostgreSQL)
- q.exec(QString("DROP FUNCTION %1(refcursor, refcursor);").arg(procName));
- else
- q.exec(QString("DROP PROCEDURE %1;").arg(procName));
-
- if (dbType == QSqlDriver::MySqlServer)
- QVERIFY_SQL( q, exec( QString( "CREATE PROCEDURE %1()"
- "\nBEGIN"
- "\nSELECT id, text FROM %2;"
- "\nSELECT empty, num, text, id FROM %3;"
- "\nEND" ).arg( procName ).arg( tableName ).arg( tableName ) ) );
- else if (dbType == QSqlDriver::DB2)
- QVERIFY_SQL( q, exec( QString( "CREATE PROCEDURE %1()"
- "\nRESULT SETS 2"
- "\nLANGUAGE SQL"
- "\np1:BEGIN"
- "\nDECLARE cursor1 CURSOR WITH RETURN FOR SELECT id, text FROM %2;"
- "\nDECLARE cursor2 CURSOR WITH RETURN FOR SELECT empty, num, text, id FROM %3;"
- "\nOPEN cursor1;"
- "\nOPEN cursor2;"
- "\nEND p1" ).arg( procName ).arg( tableName ).arg( tableName ) ) );
- else if (dbType == QSqlDriver::PostgreSQL)
- QVERIFY_SQL(q, exec(QString("CREATE FUNCTION %1(ref1 refcursor, ref2 refcursor)"
- "\nRETURNS SETOF refcursor AS $$"
- "\nBEGIN"
- "\nOPEN ref1 FOR SELECT id, text FROM %2;"
- "\nRETURN NEXT ref1;"
- "\nOPEN ref2 FOR SELECT empty, num, text, id FROM %2;"
- "\nRETURN NEXT ref2;"
- "\nEND;"
- "\n$$ LANGUAGE plpgsql").arg(procName).arg(tableName)));
- else
- QVERIFY_SQL( q, exec( QString( "CREATE PROCEDURE %1"
- "\nAS"
- "\nSELECT id, text FROM %2"
- "\nSELECT empty, num, text, id FROM %3" ).arg( procName ).arg( tableName ).arg( tableName ) ) );
-
- if (dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::DB2) {
- q.setForwardOnly( true );
- QVERIFY_SQL( q, exec( QString( "CALL %1()" ).arg( procName ) ) );
- } else if (dbType == QSqlDriver::PostgreSQL) {
+ auto dropProc = [&]() {
+ q.exec(QLatin1String(dbType == QSqlDriver::PostgreSQL
+ ? "DROP FUNCTION %1(refcursor, refcursor);"
+ : "DROP PROCEDURE %1;").arg(procName));
+ };
+ dropProc(); // To make sure it's not there before we start.
+
+ QLatin1String creator;
+ switch (dbType) {
+ case QSqlDriver::MySqlServer:
+ creator = QLatin1String("CREATE PROCEDURE %1()\n"
+ "BEGIN\n"
+ " SELECT id, text FROM %2;\n"
+ " SELECT empty, num, text, id FROM %2;\n"
+ "END");
+ break;
+ case QSqlDriver::DB2:
+ creator = QLatin1String("CREATE PROCEDURE %1()\n"
+ "RESULT SETS 2\n"
+ "LANGUAGE SQL\n"
+ "p1:BEGIN\n"
+ " DECLARE cursor1 CURSOR WITH RETURN FOR "
+ "SELECT id, text FROM %2;\n"
+ " DECLARE cursor2 CURSOR WITH RETURN FOR "
+ "SELECT empty, num, text, id FROM %2;\n"
+ " OPEN cursor1;\n"
+ " OPEN cursor2;\n"
+ "END p1");
+ break;
+ case QSqlDriver::PostgreSQL:
+ creator = QLatin1String("CREATE FUNCTION %1(ref1 refcursor, ref2 refcursor)\n"
+ "RETURNS SETOF refcursor AS $$\n"
+ "BEGIN\n"
+ " OPEN ref1 FOR SELECT id, text FROM %2;\n"
+ " RETURN NEXT ref1;\n"
+ " OPEN ref2 FOR SELECT empty, num, text, id FROM %2;\n"
+ " RETURN NEXT ref2;\n"
+ "END;\n"
+ "$$ LANGUAGE plpgsql");
+ break;
+ default:
+ creator = QLatin1String("CREATE PROCEDURE %1\n"
+ "AS\n"
+ "SELECT id, text FROM %2\n"
+ "SELECT empty, num, text, id FROM %2");
+ break;
+ }
+ QVERIFY_SQL(q, exec(creator.arg(procName, tableName)));
+ const auto tidier = qScopeGuard(dropProc);
+
+ QLatin1String caller;
+ switch (dbType) {
+ case QSqlDriver::MySqlServer:
+ case QSqlDriver::DB2:
+ q.setForwardOnly(true);
+ caller = QLatin1String("CALL %1()");
+ break;
+ case QSqlDriver::PostgreSQL:
// Returning multiple result sets from PostgreSQL stored procedure:
// http://sqlines.com/postgresql/how-to/return_result_set_from_stored_procedure
- QVERIFY_SQL(q, exec(QString("BEGIN;"
- "SELECT %1('cur1', 'cur2');"
- "FETCH ALL IN cur1;"
- "FETCH ALL IN cur2;"
- "COMMIT;").arg(procName)));
- } else {
- QVERIFY_SQL( q, exec( QString( "EXEC %1" ).arg( procName ) ) );
+ caller = QLatin1String("BEGIN;"
+ " SELECT %1('cur1', 'cur2');"
+ " FETCH ALL IN cur1;"
+ " FETCH ALL IN cur2;"
+ "COMMIT;");
+ break;
+ default:
+ caller = QLatin1String("EXEC %1");
+ break;
}
+ QVERIFY_SQL(q, exec(caller.arg(procName)));
if (dbType == QSqlDriver::PostgreSQL) {
// First result set - start of transaction
@@ -3344,29 +3248,29 @@ void tst_QSqlQuery::nextResult()
QVERIFY(q.nextResult());
}
- for ( int i = 0; i < 4; i++ ) {
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toInt(), i+1 );
- QCOMPARE( q.value( 1 ).toString(), tstStrings.at( i ) );
+ for (int i = 0; i < 4; ++i) {
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt(), i + 1);
+ QCOMPARE(q.value(1).toString(), tstStrings[i]);
}
- QVERIFY_SQL( q, nextResult() );
-
- QVERIFY_SQL( q, isActive() );
+ QVERIFY_SQL(q, nextResult());
+ QVERIFY_SQL(q, isActive());
- for ( int i = 0; i < 4; i++ ) {
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toString(), QString( "Yatta!" ) );
- QCOMPARE( q.value( 1 ).toDouble(), 1.1*( 1+i ) );
- QCOMPARE( q.value( 2 ).toString(), tstStrings.at( i ) );
- QCOMPARE( q.value( 3 ).toInt(), 1+i );
+ for (int i = 0; i < 4; ++i) {
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toString(), u"Yatta!");
+ QCOMPARE(q.value(1).toDouble(), 1.1 * (1 + i));
+ QCOMPARE(q.value(2).toString(), tstStrings[i]);
+ QCOMPARE(q.value(3).toInt(), 1 + i);
}
// MySQL also counts the CALL itself as a result
if (dbType == QSqlDriver::MySqlServer) {
- QVERIFY( q.nextResult() );
- QVERIFY( !q.isSelect() ); // ... but it's not a select
- QCOMPARE( q.numRowsAffected(), 0 ); // ... and no rows are affected (at least not with this procedure)
+ QVERIFY(q.nextResult());
+ QVERIFY(!q.isSelect()); // ... but it's not a select
+ // ... and no rows are affected (at least not with this procedure):
+ QCOMPARE(q.numRowsAffected(), 0);
}
if (dbType == QSqlDriver::PostgreSQL) {
// Last result set - commit transaction
@@ -3375,14 +3279,8 @@ void tst_QSqlQuery::nextResult()
QCOMPARE(q.numRowsAffected(), 0);
}
- QVERIFY( !q.nextResult() );
-
- QVERIFY( !q.isActive() );
-
- if (dbType == QSqlDriver::PostgreSQL)
- q.exec(QString("DROP FUNCTION %1(refcursor, refcursor);").arg(procName));
- else
- q.exec(QString("DROP PROCEDURE %1;").arg(procName));
+ QVERIFY(!q.nextResult());
+ QVERIFY(!q.isActive());
}
@@ -3391,76 +3289,76 @@ void tst_QSqlQuery::nextResult()
// enough to be run with all backends.
void tst_QSqlQuery::blobsPreparedQuery()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
- if ( !db.driver()->hasFeature( QSqlDriver::BLOB ) || !db.driver()->hasFeature( QSqlDriver::PreparedQueries ) )
- QSKIP( "DBMS does not support BLOBs or prepared queries");
+ if (!db.driver()->hasFeature(QSqlDriver::BLOB)
+ || !db.driver()->hasFeature(QSqlDriver::PreparedQueries)) {
+ QSKIP("DBMS does not support BLOBs or prepared queries");
+ }
- const QString tableName(qTableName("blobstest", __FILE__, db));
+ TableScope ts(db, "blobstest", __FILE__);
- QSqlQuery q( db );
- q.setForwardOnly( true ); // This is needed to make the test work with DB2.
- QString shortBLOB( "abc" );
- QString longerBLOB( "abcdefghijklmnopqrstuvxyz¿äëïöü¡ " );
+ QSqlQuery q(db);
+ q.setForwardOnly(true); // This is needed to make the test work with DB2.
+ QString shortBLOB("abc");
+ QString longerBLOB("abcdefghijklmnopqrstuvxyz¿äëïöü¡ ");
// In PostgreSQL a BLOB is not called a BLOB, but a BYTEA! :-)
// ... and in SQL Server it can be called a lot, but IMAGE will do.
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- QString typeName( "BLOB" );
- if (dbType == QSqlDriver::PostgreSQL)
- typeName = "BYTEA";
- else if (dbType == QSqlDriver::MSSqlServer)
- typeName = "IMAGE";
-
- QVERIFY_SQL( q, exec( QString( "CREATE TABLE %1(id INTEGER, data %2)" ).arg( tableName ).arg( typeName ) ) );
- q.prepare( QString( "INSERT INTO %1(id, data) VALUES(:id, :data)" ).arg( tableName ) );
- q.bindValue( ":id", 1 );
- q.bindValue( ":data", shortBLOB );
- QVERIFY_SQL( q, exec() );
+ const QLatin1String typeName(dbType == QSqlDriver::PostgreSQL ? "BYTEA"
+ : dbType == QSqlDriver::MSSqlServer ? "IMAGE" : "BLOB");
+
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1(id INTEGER, data %2)")
+ .arg(ts.tableName(), typeName)));
+ q.prepare(QLatin1String("INSERT INTO %1(id, data) VALUES(:id, :data)").arg(ts.tableName()));
+ q.bindValue(":id", 1);
+ q.bindValue(":data", shortBLOB);
+ QVERIFY_SQL(q, exec());
- q.bindValue( ":id", 2 );
- q.bindValue( ":data", longerBLOB );
- QVERIFY_SQL( q, exec() );
+ q.bindValue(":id", 2);
+ q.bindValue(":data", longerBLOB);
+ QVERIFY_SQL(q, exec());
// Two executions and result sets
- q.prepare( QString( "SELECT data FROM %1 WHERE id = ?" ).arg( tableName ) );
- q.bindValue( 0, QVariant( 1 ) );
- QVERIFY_SQL( q, exec() );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toString(), shortBLOB );
+ q.prepare(QLatin1String("SELECT data FROM %1 WHERE id = ?").arg(ts.tableName()));
+ q.bindValue(0, QVariant(1));
+ QVERIFY_SQL(q, exec());
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toString(), shortBLOB);
- q.bindValue( 0, QVariant( 2 ) );
- QVERIFY_SQL( q, exec() );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toString().toUtf8(), longerBLOB.toUtf8() );
+ q.bindValue(0, QVariant(2));
+ QVERIFY_SQL(q, exec());
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toString().toUtf8(), longerBLOB.toUtf8());
// Only one execution and result set
- q.prepare( QString( "SELECT id, data FROM %1 ORDER BY id" ).arg( tableName ) );
- QVERIFY_SQL( q, exec() );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 1 ).toString(), shortBLOB );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 1 ).toString(), longerBLOB );
+ q.prepare(QLatin1String("SELECT id, data FROM %1 ORDER BY id").arg(ts.tableName()));
+ QVERIFY_SQL(q, exec());
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(1).toString(), shortBLOB);
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(1).toString(), longerBLOB);
}
// There were problems with navigating past the end of a table returning an error on mysql
void tst_QSqlQuery::emptyTableNavigate()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
{
- QSqlQuery q( db );
- const QString tbl = qTableName("qtest_empty", __FILE__, db);
- q.exec("drop table " + tbl);
- QVERIFY_SQL(q, exec("create table " + tbl + " (id char(10))"));
- QVERIFY_SQL(q, prepare("select * from " + tbl));
- QVERIFY_SQL( q, exec() );
- QVERIFY( !q.next() );
- QCOMPARE( q.lastError().isValid(), false );
+ TableScope ts(db, "qtest_empty", __FILE__);
+ QSqlQuery q(db);
+ q.exec("drop table " + ts.tableName());
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (id char(10))").arg(ts.tableName())));
+ QVERIFY_SQL(q, prepare("select * from " + ts.tableName()));
+ QVERIFY_SQL(q, exec());
+ QVERIFY(!q.next());
+ QVERIFY(!q.lastError().isValid());
}
}
@@ -3469,133 +3367,147 @@ void tst_QSqlQuery::timeStampParsing()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- const QString tableName(qTableName("timeStampParsing", __FILE__, db));
- tst_Databases::safeDropTable(db, tableName);
+ TableScope ts(db, "timeStampParsing", __FILE__);
QSqlQuery q(db);
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType == QSqlDriver::PostgreSQL) {
- QVERIFY_SQL(q, exec(QStringLiteral("CREATE TABLE ") + tableName + QStringLiteral("("
- "id serial NOT NULL, "
- "datefield timestamp, primary key(id));")));
- } else if (dbType == QSqlDriver::MySqlServer) {
- QVERIFY_SQL(q, exec(QStringLiteral("CREATE TABLE ") + tableName + QStringLiteral("("
- "id integer NOT NULL AUTO_INCREMENT,"
- "datefield timestamp, primary key(id));")));
- } else if (dbType == QSqlDriver::Interbase) {
+ QLatin1String creator;
+ switch (tst_Databases::getDatabaseType(db)) {
+ case QSqlDriver::PostgreSQL:
+ creator = QLatin1String("CREATE TABLE %1(id serial NOT NULL, "
+ "datefield timestamp, primary key(id));");
+ break;
+ case QSqlDriver::MySqlServer:
+ creator = QLatin1String("CREATE TABLE %1(id integer NOT NULL AUTO_INCREMENT, "
+ "datefield timestamp, primary key(id));");
+ break;
+ case QSqlDriver::Interbase:
// Since there is no auto-increment feature in Interbase we allow it to be null
- QVERIFY_SQL(q, exec(QStringLiteral("CREATE TABLE ") + tableName + QStringLiteral("("
- "id integer,"
- "datefield timestamp);")));
- } else {
- QVERIFY_SQL(q, exec(QStringLiteral("CREATE TABLE ") + tableName + QStringLiteral("("
- "\"id\" integer NOT NULL PRIMARY KEY AUTOINCREMENT,"
- "\"datefield\" timestamp);")));
+ creator = QLatin1String("CREATE TABLE %1(id integer, datefield timestamp);");
+ break;
+ case QSqlDriver::MimerSQL:
+ creator = QLatin1String("CREATE UNIQUE SEQUENCE timeStampParsing_seq");
+ QVERIFY_SQL(q, exec(creator));
+ creator = QLatin1String("CREATE TABLE %1(id integer NOT NULL default next value "
+ "for timeStampParsing_seq, "
+ "datefield timestamp, primary key(id));");
+ break;
+ default:
+ creator = QLatin1String("CREATE TABLE %1("
+ "\"id\" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "
+ "\"datefield\" timestamp);");
+ break;
}
- QVERIFY_SQL(q, exec(
- QStringLiteral("INSERT INTO ") + tableName + QStringLiteral(" (datefield) VALUES (current_timestamp);"
- )));
- QVERIFY_SQL(q, exec(QStringLiteral("SELECT * FROM ") + tableName));
+ QVERIFY_SQL(q, exec(creator.arg(ts.tableName())));
+ QLatin1String currentTimestamp;
+ if (tst_Databases::getDatabaseType(db) == QSqlDriver::MimerSQL)
+ currentTimestamp = QLatin1String("localtimestamp");
+ else
+ currentTimestamp = QLatin1String("current_timestamp");
+ QVERIFY_SQL(q,
+ exec(QLatin1String("INSERT INTO %1 (datefield) VALUES (%2);")
+ .arg(ts.tableName())
+ .arg(currentTimestamp)));
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT * FROM ") + ts.tableName()));
while (q.next())
QVERIFY(q.value(1).toDateTime().isValid());
}
void tst_QSqlQuery::task_217003()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- QSqlQuery q( db );
- const QString Planet(qTableName( "Planet", __FILE__, db));
-
- q.exec("drop table " + Planet);
- QVERIFY_SQL( q, exec( "create table " + Planet + " (Name varchar(20))" ) );
- QVERIFY_SQL( q, exec( "insert into " + Planet + " VALUES ('Mercury')" ) );
- QVERIFY_SQL( q, exec( "insert into " + Planet + " VALUES ('Venus')" ) );
- QVERIFY_SQL( q, exec( "insert into " + Planet + " VALUES ('Earth')" ) );
- QVERIFY_SQL( q, exec( "insert into " + Planet + " VALUES ('Mars')" ) );
-
- QVERIFY_SQL( q, exec( "SELECT Name FROM " + Planet ) );
- QVERIFY_SQL( q, seek( 3 ) );
- QCOMPARE( q.value( 0 ).toString(), QString( "Mars" ) );
- QVERIFY_SQL( q, seek( 1 ) );
- QCOMPARE( q.value( 0 ).toString(), QString( "Venus" ) );
- QVERIFY_SQL( q, exec( "SELECT Name FROM " + Planet ) );
- QVERIFY_SQL( q, seek( 3 ) );
- QCOMPARE( q.value( 0 ).toString(), QString( "Mars" ) );
- QVERIFY_SQL( q, seek( 0 ) );
- QCOMPARE( q.value( 0 ).toString(), QString( "Mercury" ) );
- QVERIFY_SQL( q, seek( 1 ) );
- QCOMPARE( q.value( 0 ).toString(), QString( "Venus" ) );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "Planet", __FILE__);
+ const auto &planets = ts.tableName();
+
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (Name varchar(20))").arg(planets)));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 VALUES ('Mercury')").arg(planets)));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 VALUES ('Venus')").arg(planets)));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 VALUES ('Earth')").arg(planets)));
+ QVERIFY_SQL(q, exec(QLatin1String("insert into %1 VALUES ('Mars')").arg(planets)));
+
+ QVERIFY_SQL(q, exec("SELECT Name FROM " + planets));
+ QVERIFY_SQL(q, seek(3));
+ QCOMPARE(q.value(0).toString(), u"Mars");
+ QVERIFY_SQL(q, seek(1));
+ QCOMPARE(q.value(0).toString(), u"Venus");
+ QVERIFY_SQL(q, exec("SELECT Name FROM " + planets));
+ QVERIFY_SQL(q, seek(3));
+ QCOMPARE(q.value(0).toString(), u"Mars");
+ QVERIFY_SQL(q, seek(0));
+ QCOMPARE(q.value(0).toString(), u"Mercury");
+ QVERIFY_SQL(q, seek(1));
+ QCOMPARE(q.value(0).toString(), u"Venus");
}
void tst_QSqlQuery::task_250026()
{
- QString data258, data1026;
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- QSqlQuery q( db );
-
- const QString tableName(qTableName("task_250026", __FILE__, db));
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "task_250026", __FILE__);
- if ( !q.exec( "create table " + tableName + " (longfield varchar(1100))" ) ) {
+ QSqlQuery q(db);
+ if (!q.exec(QLatin1String("create table %1 (longfield varchar(1100))").arg(ts.tableName()))) {
qDebug() << "Error" << q.lastError();
- QSKIP( "Db doesn't support \"1100\" as a size for fields");
+ QSKIP("Db doesn't support \"1100\" as a size for fields");
}
- data258.fill( 'A', 258 );
- data1026.fill( 'A', 1026 );
- QVERIFY_SQL( q, prepare( "insert into " + tableName + "(longfield) VALUES (:longfield)" ) );
- q.bindValue( ":longfield", data258 );
- QVERIFY_SQL( q, exec() );
- q.bindValue( ":longfield", data1026 );
- QVERIFY_SQL( q, exec() );
- QVERIFY_SQL( q, exec( "select * from " + tableName ) );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toString().length(), data258.length() );
- QVERIFY_SQL( q, next() );
- QCOMPARE( q.value( 0 ).toString().length(), data1026.length() );
+ const QString data258(258, QLatin1Char('A'));
+ const QString data1026(1026, QLatin1Char('A'));
+ QVERIFY_SQL(q, prepare(QLatin1String("insert into %1(longfield) VALUES (:longfield)")
+ .arg(ts.tableName())));
+ q.bindValue(":longfield", data258);
+ QVERIFY_SQL(q, exec());
+ q.bindValue(":longfield", data1026);
+ QVERIFY_SQL(q, exec());
+ QVERIFY_SQL(q, exec("select * from " + ts.tableName()));
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toString().size(), data258.size());
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toString().size(), data1026.size());
}
void tst_QSqlQuery::crashQueryOnCloseDatabase()
{
- for (const auto &dbName : qAsConst(dbs.dbNames)) {
+ for (const auto &dbName : std::as_const(dbs.dbNames)) {
+ const auto tidier = qScopeGuard([]() { QSqlDatabase::removeDatabase("crashTest"); });
+ // Note: destruction of clonedDb needs to happen before we call removeDatabase.
QSqlDatabase clonedDb = QSqlDatabase::cloneDatabase(
QSqlDatabase::database(dbName), "crashTest");
qDebug() << "Testing crash in sqlquery dtor for driver" << clonedDb.driverName();
QVERIFY(clonedDb.open());
QSqlQuery q(clonedDb);
clonedDb.close();
- QSqlDatabase::removeDatabase("crashTest");
}
}
-void tst_QSqlQuery::task_233829()
+void tst_QSqlQuery::testNaN()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlQuery q( db );
- const QString tableName(qTableName("task_233829", __FILE__, db));
- QVERIFY_SQL(q,exec("CREATE TABLE " + tableName + "(dbl1 double precision,dbl2 double precision) without oids;"));
-
- QString queryString("INSERT INTO " + tableName +"(dbl1, dbl2) VALUES(?,?)");
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "testNaN", __FILE__);
- double k = 0.0;
- QVERIFY_SQL(q,prepare(queryString));
- q.bindValue(0,0.0 / k); // nan
- q.bindValue(1,0.0 / k); // nan
- QVERIFY_SQL(q,exec());
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "CREATE TABLE %1(dbl1 double precision,dbl2 double precision) "
+ "without oids;").arg(ts.tableName())));
+ const QString queryString =
+ QLatin1String("INSERT INTO %1(dbl1, dbl2) VALUES(?,?)").arg(ts.tableName());
+
+ const double nan = qQNaN();
+ QVERIFY_SQL(q, prepare(queryString));
+ q.bindValue(0, nan);
+ q.bindValue(1, nan);
+ QVERIFY_SQL(q, exec());
}
-void tst_QSqlQuery::QTBUG_12477()
+void tst_QSqlQuery::psqlNumericMetadata()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- if (!db.driverName().startsWith("QPSQL"))
- QSKIP("PostgreSQL specific test");
QSqlQuery q(db);
QVERIFY_SQL(q, exec("SELECT 1::bit, '10101010000111101101'::varbit, "
@@ -3632,75 +3544,71 @@ void tst_QSqlQuery::QTBUG_12477()
void tst_QSqlQuery::sqlServerReturn0()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType != QSqlDriver::MSSqlServer)
- QSKIP("SQL Server specific test");
-
- const QString tableName(qTableName("test141895", __FILE__, db)), procName(qTableName("test141895_proc", __FILE__, db));
- QSqlQuery q( db );
- q.exec("DROP TABLE " + tableName);
- q.exec("DROP PROCEDURE " + procName);
- QVERIFY_SQL(q, exec("CREATE TABLE "+tableName+" (id integer)"));
- QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" (id) VALUES (1)"));
- QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" (id) VALUES (2)"));
- QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" (id) VALUES (2)"));
- QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" (id) VALUES (3)"));
- QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" (id) VALUES (1)"));
- QVERIFY_SQL(q, exec("CREATE PROCEDURE "+procName+
- " AS "
- "SELECT * FROM "+tableName+" WHERE ID = 2 "
- "RETURN 0"));
-
- QVERIFY_SQL(q, exec("{CALL " + procName + QLatin1Char('}')));
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ if (tst_Databases::getDatabaseType(db) != QSqlDriver::MSSqlServer)
+ QSKIP("Test is specific to SQL Server");
+ ProcScope ps(db, "test141895_proc", __FILE__);
+ TableScope ts(db, "test141895", __FILE__);
+ const auto &tableName = ts.tableName();
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (id integer)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id) VALUES (1)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id) VALUES (2)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id) VALUES (2)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id) VALUES (3)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id) VALUES (1)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE PROCEDURE %1 AS "
+ "SELECT * FROM %2 WHERE ID = 2 "
+ "RETURN 0").arg(ps.name(), ts.tableName())));
+
+ QVERIFY_SQL(q, exec(QLatin1String("{CALL %1}").arg(ps.name())));
QVERIFY_SQL(q, next());
}
void tst_QSqlQuery::QTBUG_551()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
QSqlQuery q(db);
const QString pkgname(qTableName("pkg", __FILE__, db));
- QVERIFY_SQL(q, exec("CREATE OR REPLACE PACKAGE "+pkgname+" IS \n\
- \n\
- TYPE IntType IS TABLE OF INTEGER INDEX BY BINARY_INTEGER;\n\
- TYPE VCType IS TABLE OF VARCHAR2(60) INDEX BY BINARY_INTEGER;\n\
- PROCEDURE P (Inp IN IntType, Outp OUT VCType);\n\
- END "+ pkgname + QLatin1Char(';')));
-
- QVERIFY_SQL(q, exec("CREATE OR REPLACE PACKAGE BODY "+pkgname+" IS\n\
- PROCEDURE P (Inp IN IntType, Outp OUT VCType)\n\
- IS\n\
- BEGIN\n\
- Outp(1) := '1. Value is ' ||TO_CHAR(Inp(1));\n\
- Outp(2) := '2. Value is ' ||TO_CHAR(Inp(2));\n\
- Outp(3) := '3. Value is ' ||TO_CHAR(Inp(3));\n\
- END p;\n\
- END " + pkgname + QLatin1Char(';')));
-
- QVariantList inLst, outLst, res_outLst;
-
- q.prepare("begin "+pkgname+".p(:inp, :outp); end;");
-
- QString StVal;
- StVal.reserve(60);
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "CREATE OR REPLACE PACKAGE %1 IS \n\n"
+ "TYPE IntType IS TABLE OF INTEGER INDEX BY BINARY_INTEGER;\n"
+ "TYPE VCType IS TABLE OF VARCHAR2(60) INDEX BY BINARY_INTEGER;\n"
+ "PROCEDURE P (Inp IN IntType, Outp OUT VCType);\n"
+ "END %1;").arg(pkgname)));
+
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE OR REPLACE PACKAGE BODY %1 IS\n"
+ "PROCEDURE P (Inp IN IntType, Outp OUT VCType)\n"
+ " IS\n"
+ " BEGIN\n"
+ " Outp(1) := '1. Value is ' ||TO_CHAR(Inp(1));\n"
+ " Outp(2) := '2. Value is ' ||TO_CHAR(Inp(2));\n"
+ " Outp(3) := '3. Value is ' ||TO_CHAR(Inp(3));\n"
+ " END p;\n"
+ "END %1;").arg(pkgname)));
+
+ q.prepare(QLatin1String("begin %1.p(:inp, :outp); end;").arg(pkgname));
+
+ QString text;
+ text.reserve(60);
// loading arrays
- for (int Cnt=0; Cnt < 3; Cnt++) {
- inLst << Cnt;
- outLst << StVal;
+ QVariantList inLst, outLst;
+ for (int count = 0; count < 3; ++count) {
+ inLst << count;
+ outLst << text;
}
q.bindValue(":inp", inLst);
q.bindValue(":outp", outLst, QSql::Out);
- QVERIFY_SQL(q, execBatch(QSqlQuery::ValuesAsColumns) );
- res_outLst = qvariant_cast<QVariantList>(q.boundValues().at(1));
+ QVERIFY_SQL(q, execBatch(QSqlQuery::ValuesAsColumns));
+ const auto res_outLst = qvariant_cast<QVariantList>(q.boundValues().at(1));
QCOMPARE(res_outLst[0].toString(), QLatin1String("1. Value is 0"));
QCOMPARE(res_outLst[1].toString(), QLatin1String("2. Value is 1"));
@@ -3709,21 +3617,18 @@ void tst_QSqlQuery::QTBUG_551()
void tst_QSqlQuery::QTBUG_12186()
{
- QFETCH( QString, dbName );
+ QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
- // make sure that query.boundValues() returns the values in the right order
- // even for more than 16 placeholders
+ // Make sure that query.boundValues() returns the values in the right order
+ // even for more than 16 placeholders:
QSqlQuery query(db);
- query.prepare("INSERT INTO person (col1, col2, col3, col4, col5, col6, col7, col8, col9, col10, col11, col12, col13, col14, col15, col16, col17, col18) "
+ query.prepare("INSERT INTO person (col1, col2, col3, col4, col5, col6, col7, col8, col9, "
+ "col10, col11, col12, col13, col14, col15, col16, col17, col18) "
"VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
- QList<QVariant> values;
-
- for (int i = 0; i < 18; ++i)
- values << i;
-
- foreach (QVariant v, values)
+ const QList<QVariant> values = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17};
+ for (const QVariant &v : values)
query.bindValue(v.toInt(), v);
QCOMPARE(query.boundValues(), values);
@@ -3731,18 +3636,18 @@ void tst_QSqlQuery::QTBUG_12186()
void tst_QSqlQuery::QTBUG_14132()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
QSqlQuery q(db);
const QString procedureName(qTableName("procedure", __FILE__, db));
- QVERIFY_SQL(q, exec("CREATE OR REPLACE PROCEDURE "+ procedureName + " (outStr OUT varchar2) \n\
- is \n\
- begin \n\
- outStr := 'OUTSTRING'; \n\
- end;"));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE OR REPLACE PROCEDURE %1 (outStr OUT varchar2)\n"
+ "is\n"
+ "begin\n"
+ " outStr := 'OUTSTRING'; \n"
+ "end;").arg(procedureName)));
QString placeholder = "XXXXXXXXX";
- QVERIFY(q.prepare("CALL "+procedureName+"(?)"));
+ QVERIFY(q.prepare(QLatin1String("CALL %1(?)").arg(procedureName)));
q.addBindValue(placeholder, QSql::Out);
QVERIFY_SQL(q, exec());
QCOMPARE(q.boundValue(0).toString(), QLatin1String("OUTSTRING"));
@@ -3755,76 +3660,77 @@ void tst_QSqlQuery::QTBUG_18435()
CHECK_DATABASE(db);
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType != QSqlDriver::MSSqlServer || !db.driverName().startsWith("QODBC"))
- QSKIP("SQL Server specific test");
+ QSKIP("Test is specific to SQL Server");
+ ProcScope ps(db, "qtbug_18435_proc", __FILE__);
QSqlQuery q(db);
- QString procName(qTableName("qtbug_18435_proc", __FILE__, db));
- q.exec("DROP PROCEDURE " + procName);
- const QString stmt =
- "CREATE PROCEDURE " + procName + " @key nvarchar(50) OUTPUT AS\n"
- "BEGIN\n"
- " SET NOCOUNT ON\n"
- " SET @key = 'TEST'\n"
- "END\n";
+ const QString stmt = QLatin1String("CREATE PROCEDURE %1 @key nvarchar(50) OUTPUT AS\n"
+ "BEGIN\n"
+ " SET NOCOUNT ON\n"
+ " SET @key = 'TEST'\n"
+ "END\n").arg(ps.name());
QVERIFY_SQL(q, exec(stmt));
- QVERIFY_SQL(q, prepare("{CALL "+ procName +"(?)}"));
+ QVERIFY_SQL(q, prepare(QLatin1String("{CALL %1(?)}").arg(ps.name())));
const QString testStr = "0123";
q.bindValue(0, testStr, QSql::Out);
QVERIFY_SQL(q, exec());
QCOMPARE(q.boundValue(0).toString(), QLatin1String("TEST"));
-
- QVERIFY_SQL(q, exec("DROP PROCEDURE " + procName));
}
void tst_QSqlQuery::QTBUG_5251()
{
- // Since QSqlTableModel will escape the identifiers, we need to escape
- // them for databases that are case sensitive
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QString timetest(qTableName("timetest", __FILE__, db));
- tst_Databases::safeDropTable(db, timetest);
+ // Since QSqlTableModel will escape the identifiers, we need to escape them
+ // for databases that are case sensitive.
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "timetest", __FILE__);
QSqlQuery q(db);
- QVERIFY_SQL(q, exec(QStringLiteral("CREATE TABLE ") + timetest + QStringLiteral(" (t TIME)")));
- QVERIFY_SQL(q, exec(QStringLiteral("INSERT INTO ") + timetest +
- QStringLiteral(" VALUES ('1:2:3.666')")));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (t TIME)").arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 VALUES ('1:2:3.666')").arg(ts.tableName())));
- QSqlTableModel timetestModel(0,db);
+ QSqlTableModel timetestModel(0, db);
timetestModel.setEditStrategy(QSqlTableModel::OnManualSubmit);
- timetestModel.setTable(timetest);
+ timetestModel.setTable(ts.tableName());
QVERIFY_SQL(timetestModel, select());
- QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("01:02:03.666"));
- QVERIFY_SQL(timetestModel,setData(timetestModel.index(0, 0), QTime(0,12,34,500)));
- QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:12:34.500"));
+ QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"),
+ u"01:02:03.666");
+ QVERIFY_SQL(timetestModel, setData(timetestModel.index(0, 0), QTime(0, 12, 34, 500)));
+ QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"),
+ u"00:12:34.500");
QVERIFY_SQL(timetestModel, submitAll());
- QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:12:34.500"));
+ QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"),
+ u"00:12:34.500");
- QVERIFY_SQL(q, exec(QStringLiteral("UPDATE ") + timetest +
- QStringLiteral(" SET t = '0:11:22.33'")));
+ QVERIFY_SQL(q, exec(QLatin1String("UPDATE %1 SET t = '0:11:22.33'").arg(ts.tableName())));
QVERIFY_SQL(timetestModel, select());
- QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"), QString("00:11:22.330"));
-
+ QCOMPARE(timetestModel.record(0).field(0).value().toTime().toString("HH:mm:ss.zzz"),
+ u"00:11:22.330");
}
void tst_QSqlQuery::QTBUG_6421()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ const QString tableName(qTableName("bug6421", __FILE__, db).toUpper());
+ TableScope ts(db, tableName);
QSqlQuery q(db);
- const QString tableName(qTableName("bug6421", __FILE__, db).toUpper());
- QVERIFY_SQL(q, exec("create table "+tableName+"(COL1 char(10), COL2 char(10), COL3 char(10))"));
- QVERIFY_SQL(q, exec("create index INDEX1 on "+tableName+" (COL1 desc)"));
- QVERIFY_SQL(q, exec("create index INDEX2 on "+tableName+" (COL2 desc)"));
- QVERIFY_SQL(q, exec("create index INDEX3 on "+tableName+" (COL3 desc)"));
+ QVERIFY_SQL(q, exec(QLatin1String(
+ "create table %1(COL1 char(10), COL2 char(10), COL3 char(10))")
+ .arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("create index INDEX1 on %1 (COL1 desc)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("create index INDEX2 on %1 (COL2 desc)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("create index INDEX3 on %1 (COL3 desc)").arg(tableName)));
q.setForwardOnly(true);
- QVERIFY_SQL(q, exec("select COLUMN_EXPRESSION from ALL_IND_EXPRESSIONS where TABLE_NAME='" + tableName + QLatin1Char('\'')));
+ QVERIFY_SQL(q, exec(QLatin1String("select COLUMN_EXPRESSION from ALL_IND_EXPRESSIONS "
+ "where TABLE_NAME='%1'")
+ .arg(tableName)));
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toString(), QLatin1String("\"COL1\""));
QVERIFY_SQL(q, next());
@@ -3835,53 +3741,53 @@ void tst_QSqlQuery::QTBUG_6421()
void tst_QSqlQuery::QTBUG_6618()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType != QSqlDriver::MSSqlServer)
- QSKIP("SQL Server specific test");
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ if (tst_Databases::getDatabaseType(db) != QSqlDriver::MSSqlServer)
+ QSKIP("Test is specific to SQL Server");
+ ProcScope ps(db, "tst_raiseError", __FILE__);
QSqlQuery q(db);
- q.exec("drop procedure " + qTableName("tst_raiseError", __FILE__, db)); //non-fatal
QString errorString;
- for (int i=0;i<110;i++)
- errorString+="reallylong";
- errorString+=" error";
- QVERIFY_SQL(q, exec("create procedure " + qTableName("tst_raiseError", __FILE__, db) + " as\n"
- "begin\n"
- " raiserror('" + errorString + "', 16, 1)\n"
- "end\n" ));
- q.exec("{call " + qTableName("tst_raiseError", __FILE__, db) + QLatin1Char('}'));
+ for (int i = 0; i < 110; ++i)
+ errorString += "reallylong";
+ errorString += " error";
+ QVERIFY_SQL(q, exec(QLatin1String("create procedure %1 as\n"
+ "begin\n"
+ " raiserror('%2', 16, 1)\n"
+ "end\n").arg(ps.name(), errorString)));
+ q.exec(QLatin1String("{call %1}").arg(ps.name()));
QVERIFY(q.lastError().text().contains(errorString));
}
void tst_QSqlQuery::QTBUG_6852()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "bug6852", __FILE__);
+ const auto &tableName = ts.tableName();
+ ProcScope ps(db, "bug6852_proc", __FILE__);
+
QSqlQuery q(db);
- const QString tableName(qTableName("bug6852", __FILE__, db)), procName(qTableName("bug6852_proc", __FILE__, db));
-
- QVERIFY_SQL(q, exec("DROP PROCEDURE IF EXISTS "+procName));
- QVERIFY_SQL(q, exec("CREATE TABLE "+tableName+"(\n"
- "MainKey INT NOT NULL,\n"
- "OtherTextCol VARCHAR(45) NOT NULL,\n"
- "PRIMARY KEY(`MainKey`))"));
- QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" VALUES(0, \"Disabled\")"));
- QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" VALUES(5, \"Error Only\")"));
- QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" VALUES(10, \"Enabled\")"));
- QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" VALUES(15, \"Always\")"));
- QVERIFY_SQL(q, exec("CREATE PROCEDURE "+procName+"()\n"
- "READS SQL DATA\n"
- "BEGIN\n"
- " SET @st = 'SELECT MainKey, OtherTextCol from "+tableName+"';\n"
- " PREPARE stmt from @st;\n"
- " EXECUTE stmt;\n"
- "END;"));
-
- QVERIFY_SQL(q, exec("CALL "+procName+"()"));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1(\n"
+ "MainKey INT NOT NULL,\n"
+ "OtherTextCol VARCHAR(45) NOT NULL,\n"
+ "PRIMARY KEY(`MainKey`))").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 VALUES(0, \"Disabled\")").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 VALUES(5, \"Error Only\")").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 VALUES(10, \"Enabled\")").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 VALUES(15, \"Always\")").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE PROCEDURE %1()\n"
+ "READS SQL DATA\n"
+ "BEGIN\n"
+ " SET @st = 'SELECT MainKey, OtherTextCol from %2';\n"
+ " PREPARE stmt from @st;\n"
+ " EXECUTE stmt;\n"
+ "END;").arg(ps.name(), tableName)));
+
+ QVERIFY_SQL(q, exec(QLatin1String("CALL %1()").arg(ps.name())));
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), 0);
QCOMPARE(q.value(1).toString(), QLatin1String("Disabled"));
@@ -3889,21 +3795,22 @@ void tst_QSqlQuery::QTBUG_6852()
void tst_QSqlQuery::QTBUG_5765()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- QSqlQuery q(db);
- const QString tableName(qTableName("bug5765", __FILE__, db));
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "bug5765", __FILE__);
- QVERIFY_SQL(q, exec("CREATE TABLE "+tableName+"(testval TINYINT(1) DEFAULT 0)"));
- q.prepare("INSERT INTO "+tableName+" SET testval = :VALUE");
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1(testval TINYINT(1) DEFAULT 0)")
+ .arg(ts.tableName())));
+ q.prepare(QLatin1String("INSERT INTO %1 SET testval = :VALUE").arg(ts.tableName()));
q.bindValue(":VALUE", 1);
QVERIFY_SQL(q, exec());
q.bindValue(":VALUE", 12);
QVERIFY_SQL(q, exec());
q.bindValue(":VALUE", 123);
QVERIFY_SQL(q, exec());
- QString sql="select testval from "+tableName;
+ QString sql = "select testval from " + ts.tableName();
QVERIFY_SQL(q, exec(sql));
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), 1);
@@ -3921,57 +3828,58 @@ void tst_QSqlQuery::QTBUG_5765()
QCOMPARE(q.value(0).toInt(), 123);
}
-/**
-* This test case tests multiple statements in one execution.
-* Sqlite driver doesn't support multiple statement at one time.
-* If more than one statement is given, the exec or prepare function
-* return failure to the client.
+/* Test multiple statements in one execution.
+ SQLite driver doesn't support that. If more than one statement is given, the
+ exec or prepare function return failure to the client.
*/
void tst_QSqlQuery::QTBUG_21884()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "bug21884", __FILE__);
+ const auto &tableName = ts.tableName();
QSqlQuery q(db);
- QStringList stList;
- QString tableName(qTableName("bug21884", __FILE__, db));
- stList << "create table " + tableName + "(id integer primary key, note string)";
- stList << "select * from " + tableName + QLatin1Char(';');
- stList << "select * from " + tableName + "; \t\n\r";
- stList << "drop table " + tableName;
-
-
- foreach (const QString& st, stList) {
- QVERIFY_SQL(q, exec(st));
- }
-
- foreach (const QString& st, stList) {
- QVERIFY_SQL(q, prepare(st));
- QVERIFY_SQL(q, exec());
+ {
+ const QString good[] = {
+ QLatin1String("create table %1(id integer primary key, note string)").arg(tableName),
+ QLatin1String("select * from %1;").arg(tableName),
+ QLatin1String("select * from %1; \t\n\r").arg(tableName),
+ QLatin1String("drop table %1").arg(tableName)
+ };
+
+ for (const QString &st : good)
+ QVERIFY_SQL(q, exec(st));
+
+ for (const QString &st : good) {
+ QVERIFY_SQL(q, prepare(st));
+ QVERIFY_SQL(q, exec());
+ }
}
- stList.clear();
- stList << "create table " + tableName + "(id integer primary key); select * from " + tableName;
- stList << "create table " + tableName + "(id integer primary key); syntax error!;";
- stList << "create table " + tableName + "(id integer primary key);;";
- stList << "create table " + tableName + "(id integer primary key);\'\"\a\b\b\v";
-
- foreach (const QString&st , stList) {
- QVERIFY2(!q.prepare(st), qPrintable(QString("the statement is expected to fail! ") + st));
- QVERIFY2(!q.exec(st), qPrintable(QString("the statement is expected to fail! ") + st));
+ {
+ const QString bad[] = {
+ QLatin1String("create table %1(id integer primary key); select * from ").arg(tableName),
+ QLatin1String("create table %1(id integer primary key); syntax error!;").arg(tableName),
+ QLatin1String("create table %1(id integer primary key);;").arg(tableName),
+ QLatin1String("create table %1(id integer primary key);\'\"\a\b\b\v").arg(tableName)
+ };
+
+ QLatin1String shouldFail("the statement is expected to fail! %1");
+ for (const QString &st : bad) {
+ QVERIFY2(!q.prepare(st), qPrintable(shouldFail.arg(st)));
+ QVERIFY2(!q.exec(st), qPrintable(shouldFail.arg(st)));
+ }
}
}
-/**
- * This test case test sqlite driver close function. Sqlite driver should close cleanly
- * even if there is still outstanding prepared statement.
- */
+/* Test SQLite driver close function. SQLite driver should close cleanly even if
+ there is still outstanding prepared statement.
+*/
void tst_QSqlQuery::QTBUG_16967()
{
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
QSqlQuery q2;
QFETCH(QString, dbName);
{
@@ -3984,7 +3892,7 @@ QT_WARNING_DISABLE_DEPRECATED
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
QSqlQuery q(db);
- q2 = q;
+ q2 = QSqlQuery(q.lastQuery(), db);
q.prepare("CREATE TABLE t1 (id INTEGER PRIMARY KEY, str TEXT);");
db.close();
QCOMPARE(db.lastError().type(), QSqlError::NoError);
@@ -3993,7 +3901,7 @@ QT_WARNING_DISABLE_DEPRECATED
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
QSqlQuery q(db);
- q2 = q;
+ q2 = QSqlQuery(q.lastQuery(), db);
q2.prepare("CREATE TABLE t1 (id INTEGER PRIMARY KEY, str TEXT);");
q2.exec();
db.close();
@@ -4003,7 +3911,7 @@ QT_WARNING_DISABLE_DEPRECATED
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
QSqlQuery q(db);
- q2 = q;
+ q2 = QSqlQuery(q.lastQuery(), db);
q.exec("INSERT INTO t1 (id, str) VALUES(1, \"test1\");");
db.close();
QCOMPARE(db.lastError().type(), QSqlError::NoError);
@@ -4012,38 +3920,38 @@ QT_WARNING_DISABLE_DEPRECATED
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
QSqlQuery q(db);
- q2 = q;
+ q2 = QSqlQuery(q.lastQuery(), db);
q.exec("SELECT * FROM t1;");
db.close();
QCOMPARE(db.lastError().type(), QSqlError::NoError);
}
-QT_WARNING_POP
}
-/**
- * In SQLite when a boolean value is bound to a placeholder, it should be converted
- * into integer 0/1 rather than text "false"/"true". According to documentation,
- * SQLite does not have separate Boolean storage class. Instead, Boolean values are
- * stored as integers.
- */
+/* In SQLite, when a boolean value is bound to a placeholder, it should be
+ converted into integer 0/1 rather than text "false"/"true". According to
+ documentation, SQLite does not have a separate Boolean storage class.
+ Instead, Boolean values are stored as integers.
+*/
void tst_QSqlQuery::QTBUG_23895()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "bug23895", __FILE__);
+ const auto &tableName = ts.tableName();
QSqlQuery q(db);
- QString tableName(qTableName("bug23895", __FILE__, db));
- q.prepare("create table " + tableName + "(id integer primary key, val1 bool, val2 boolean)");
+ q.prepare(QLatin1String("create table %1(id integer primary key, val1 bool, val2 boolean)")
+ .arg(tableName));
QVERIFY_SQL(q, exec());
- q.prepare("insert into " + tableName + "(id, val1, val2) values(?, ?, ?);");
+ q.prepare(QLatin1String("insert into %1(id, val1, val2) values(?, ?, ?);").arg(tableName));
q.addBindValue(1);
q.addBindValue(true);
q.addBindValue(false);
QVERIFY_SQL(q, exec());
- QString sql="select * from " + tableName;
+ QString sql = "select * from " + tableName;
QVERIFY_SQL(q, exec(sql));
QVERIFY_SQL(q, next());
@@ -4052,24 +3960,24 @@ void tst_QSqlQuery::QTBUG_23895()
QCOMPARE(q.value(0).toInt(), 1);
QCOMPARE(q.record().field(1).metaType().id(), QMetaType::Bool);
QCOMPARE(q.value(1).metaType().id(), QMetaType::LongLong);
- QCOMPARE(q.value(1).toBool(), true);
+ QVERIFY(q.value(1).toBool());
QCOMPARE(q.record().field(2).metaType().id(), QMetaType::Bool);
QCOMPARE(q.value(2).metaType().id(), QMetaType::LongLong);
- QCOMPARE(q.value(2).toBool(), false);
+ QVERIFY(!q.value(2).toBool());
- q.prepare("insert into " + tableName + "(id, val1, val2) values(?, ?, ?);");
+ q.prepare(QLatin1String("insert into %1(id, val1, val2) values(?, ?, ?);").arg(tableName));
q.addBindValue(2);
q.addBindValue(false);
q.addBindValue(false);
QVERIFY_SQL(q, exec());
- sql="select * from " + tableName + " where val1";
+ sql = QLatin1String("select * from %1 where val1").arg(tableName);
QVERIFY_SQL(q, exec(sql));
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), 1);
QVERIFY(!q.next());
- sql="select * from " + tableName + " where not val2";
+ sql = QLatin1String("select * from %1 where not val2").arg(tableName);
QVERIFY_SQL(q, exec(sql));
QVERIFY_SQL(q, next());
QCOMPARE(q.value(0).toInt(), 1);
@@ -4078,60 +3986,54 @@ void tst_QSqlQuery::QTBUG_23895()
QVERIFY(!q.next());
}
-/**
- * Test for aliases with dots
- */
+// Test for aliases with dots:
void tst_QSqlQuery::QTBUG_14904()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "bug14904", __FILE__);
QSqlQuery q(db);
-
- QString tableName(qTableName("bug14904", __FILE__, db));
- tst_Databases::safeDropTable( db, tableName );
-
- q.prepare("create table " + tableName + "(val1 bool)");
+ q.prepare(QLatin1String("create table %1(val1 bool)").arg(ts.tableName()));
QVERIFY_SQL(q, exec());
- q.prepare("insert into " + tableName + "(val1) values(?);");
+ q.prepare(QLatin1String("insert into %1(val1) values(?);").arg(ts.tableName()));
q.addBindValue(true);
QVERIFY_SQL(q, exec());
- QString sql="select val1 AS value1 from " + tableName;
+ QString sql = "select val1 AS value1 from " + ts.tableName();
QVERIFY_SQL(q, exec(sql));
QVERIFY_SQL(q, next());
QCOMPARE(q.record().indexOf("value1"), 0);
QCOMPARE(q.record().field(0).metaType().id(), QMetaType::Bool);
- QCOMPARE(q.value(0).toBool(), true);
+ QVERIFY(q.value(0).toBool());
- sql="select val1 AS 'value.one' from " + tableName;
+ sql = "select val1 AS 'value.one' from " + ts.tableName();
QVERIFY_SQL(q, exec(sql));
QVERIFY_SQL(q, next());
- QCOMPARE(q.record().indexOf("value.one"), 0); // was -1 before bug fix
+ QCOMPARE(q.record().indexOf("value.one"), 0); // Was -1 before bug fix.
QCOMPARE(q.record().field(0).metaType().id(), QMetaType::Bool);
- QCOMPARE(q.value(0).toBool(), true);
+ QVERIFY(q.value(0).toBool());
}
void tst_QSqlQuery::QTBUG_2192()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
{
- const QString tableName(qTableName("bug2192", __FILE__, db));
- tst_Databases::safeDropTable( db, tableName );
-
+ TableScope ts(db, "bug2192", __FILE__);
QSqlQuery q(db);
- QVERIFY_SQL(q, exec(QString("CREATE TABLE " + tableName + " (dt %1)").arg(tst_Databases::dateTimeTypeName(db))));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (dt %2)")
+ .arg(ts.tableName(), tst_Databases::dateTimeTypeName(db))));
QDateTime dt = QDateTime(QDate(2012, 7, 4), QTime(23, 59, 59, 999));
- QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " (dt) VALUES (?)"));
+ QVERIFY_SQL(q, prepare(QLatin1String("INSERT INTO %1 (dt) VALUES (?)").arg(ts.tableName())));
q.bindValue(0, dt);
QVERIFY_SQL(q, exec());
- QVERIFY_SQL(q, exec("SELECT dt FROM " + tableName));
+ QVERIFY_SQL(q, exec("SELECT dt FROM " + ts.tableName()));
QVERIFY_SQL(q, next());
// Check if retrieved value preserves reported precision
@@ -4144,15 +4046,14 @@ void tst_QSqlQuery::QTBUG_2192()
void tst_QSqlQuery::QTBUG_36211()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
if (tst_Databases::getDatabaseType(db) == QSqlDriver::PostgreSQL) {
- const QString tableName(qTableName("bug36211", __FILE__, db));
- tst_Databases::safeDropTable( db, tableName );
-
+ TableScope ts(db, "bug36211", __FILE__);
QSqlQuery q(db);
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (dtwtz timestamptz, dtwotz timestamp)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (dtwtz timestamptz, dtwotz timestamp)")
+ .arg(ts.tableName())));
#if QT_CONFIG(timezone)
QTimeZone l_tzBrazil("America/Sao_Paulo");
@@ -4160,7 +4061,8 @@ void tst_QSqlQuery::QTBUG_36211()
QVERIFY(l_tzBrazil.isValid());
QVERIFY(l_tzChina.isValid());
QDateTime dt = QDateTime(QDate(2014, 10, 30), QTime(14, 12, 02, 357));
- QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " (dtwtz, dtwotz) VALUES (:dt, :dt)"));
+ QVERIFY_SQL(q, prepare(QLatin1String("INSERT INTO %1 (dtwtz, dtwotz) VALUES (:dt, :dt)")
+ .arg(ts.tableName())));
q.bindValue(":dt", dt);
QVERIFY_SQL(q, exec());
q.bindValue(":dt", dt.toTimeZone(l_tzBrazil));
@@ -4168,7 +4070,7 @@ void tst_QSqlQuery::QTBUG_36211()
q.bindValue(":dt", dt.toTimeZone(l_tzChina));
QVERIFY_SQL(q, exec());
- QVERIFY_SQL(q, exec("SELECT dtwtz, dtwotz FROM " + tableName));
+ QVERIFY_SQL(q, exec("SELECT dtwtz, dtwotz FROM " + ts.tableName()));
for (int i = 0; i < 3; ++i) {
QVERIFY_SQL(q, next());
@@ -4187,29 +4089,28 @@ void tst_QSqlQuery::QTBUG_36211()
void tst_QSqlQuery::QTBUG_53969()
{
- QFETCH( QString, dbName );
- QList<int> values = QList<int>() << 10 << 20 << 127 << 128 << 1, tableValues;
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ const QList<int> values = { 10, 20, 127, 128, 1 };
+ QList<int> tableValues;
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
tableValues.reserve(values.size());
if (tst_Databases::getDatabaseType(db) == QSqlDriver::MySqlServer) {
- const QString tableName(qTableName("bug53969", __FILE__, db));
- tst_Databases::safeDropTable( db, tableName );
-
+ TableScope ts(db, "bug53969", __FILE__);
QSqlQuery q(db);
- QVERIFY_SQL(q, exec(QString("CREATE TABLE %1 (id INT AUTO_INCREMENT PRIMARY KEY, "
- "test_number TINYINT(3) UNSIGNED)")
- .arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (id INT AUTO_INCREMENT PRIMARY KEY, "
+ "test_number TINYINT(3) UNSIGNED)")
+ .arg(ts.tableName())));
- QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " (test_number) VALUES (:value)"));
+ QVERIFY_SQL(q, prepare(QLatin1String("INSERT INTO %1 (test_number) VALUES (:value)")
+ .arg(ts.tableName())));
- QList<int>::iterator begin = values.begin(), end = values.end(), it;
- for (it = begin; it != end; ++it) {
- q.bindValue(":value", *it);
+ for (int value : values) {
+ q.bindValue(":value", value);
QVERIFY_SQL(q, exec());
}
- QVERIFY_SQL(q, prepare("SELECT test_number FROM " + tableName));
+ QVERIFY_SQL(q, prepare("SELECT test_number FROM " + ts.tableName()));
QVERIFY_SQL(q, exec());
while (q.next()) {
@@ -4217,7 +4118,7 @@ void tst_QSqlQuery::QTBUG_53969()
tableValues.push_back(q.value(0).toUInt(&ok));
QVERIFY(ok);
}
- QCOMPARE(values, tableValues);
+ QCOMPARE(tableValues, values);
}
}
@@ -4226,145 +4127,131 @@ void tst_QSqlQuery::gisPointDatatype()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "qtbug72140", __FILE__);
QSqlQuery sqlQuery(db);
- const auto tableName = qTableName("qtbug72140", __FILE__, db);
- tst_Databases::safeDropTable(db, tableName);
- QString sqlCommand = QStringLiteral("CREATE TABLE %1 (`lonlat_point` POINT NULL) ENGINE = InnoDB;").arg(tableName);
- QVERIFY(sqlQuery.exec(sqlCommand));
- sqlCommand = QStringLiteral("INSERT INTO %1(lonlat_point) VALUES(ST_GeomFromText('POINT(1 1)'));").arg(tableName);
- QVERIFY(sqlQuery.exec(sqlCommand));
- sqlCommand = QStringLiteral("SELECT * FROM %1;").arg(tableName);
- QVERIFY(sqlQuery.exec(sqlCommand));
+ QVERIFY(sqlQuery.exec(QLatin1String(
+ "CREATE TABLE %1 (`lonlat_point` POINT NULL) ENGINE = InnoDB;")
+ .arg(ts.tableName())));
+ QVERIFY(sqlQuery.exec(QLatin1String(
+ "INSERT INTO %1(lonlat_point) VALUES(ST_GeomFromText('POINT(1 1)'));")
+ .arg(ts.tableName())));
+ QVERIFY(sqlQuery.exec(QLatin1String("SELECT * FROM %1;").arg(ts.tableName())));
QCOMPARE(sqlQuery.record().field(0).metaType().id(), QMetaType::QByteArray);
QVERIFY(sqlQuery.next());
}
void tst_QSqlQuery::oraOCINumber()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QString qtest_oraOCINumber(qTableName("qtest_oraOCINumber", __FILE__, db));
-
- QSqlQuery q( db );
- q.setForwardOnly( true );
- QVERIFY_SQL( q, exec( "create table " + qtest_oraOCINumber +
- " (col1 number(20), col2 number(20))" ) );
- QVERIFY(q.prepare("insert into " + qtest_oraOCINumber + " values (?, ?)"));
- QVariantList col1Values;
- QVariantList col2Values;
- col1Values << (qulonglong)(1)
- << (qulonglong)(0)
- << (qulonglong)(INT_MAX)
- << (qulonglong)(UINT_MAX)
- << (qulonglong)(LONG_MAX)
- << (qulonglong)(ULONG_MAX)
- << (qulonglong)(LLONG_MAX)
- << (qulonglong)(ULLONG_MAX);
-
- col2Values << (qlonglong)(1)
- << (qlonglong)(0)
- << (qlonglong)(-1)
- << (qlonglong)(LONG_MAX)
- << (qlonglong)(LONG_MIN)
- << (qlonglong)(ULONG_MAX)
- << (qlonglong)(LLONG_MAX)
- << (qlonglong)(LLONG_MIN);
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "qtest_oraOCINumber", __FILE__);
+
+ QSqlQuery q(db);
+ q.setForwardOnly(true);
+ QVERIFY_SQL(q, exec(QLatin1String("create table %1 (col1 number(20), col2 number(20))")
+ .arg(ts.tableName())));
+ QVERIFY(q.prepare(QLatin1String("insert into %1 values (?, ?)").arg(ts.tableName())));
+
+ const QVariantList col1Values = {
+ qulonglong(1), qulonglong(0), qulonglong(INT_MAX), qulonglong(UINT_MAX),
+ qulonglong(LONG_MAX), qulonglong(ULONG_MAX), qulonglong(LLONG_MAX),
+ qulonglong(ULLONG_MAX)
+ };
+ const QVariantList col2Values = {
+ qlonglong(1), qlonglong(0), qlonglong(-1), qlonglong(LONG_MAX), qlonglong(LONG_MIN),
+ qlonglong(ULONG_MAX), qlonglong(LLONG_MAX), qlonglong(LLONG_MIN)
+ };
q.addBindValue(col1Values);
q.addBindValue(col2Values);
QVERIFY(q.execBatch());
- QString sqlStr = "select * from " + qtest_oraOCINumber + " where col1 = :bindValue0 AND col2 = :bindValue1";
- QVERIFY(q.prepare(sqlStr));
-
- q.bindValue(":bindValue0", (qulonglong)(1), QSql::InOut);
- q.bindValue(":bindValue1", (qlonglong)(1), QSql::InOut);
+ QVERIFY(q.prepare(QLatin1String(
+ "select * from %1 where col1 = :bindValue0 AND col2 = :bindValue1")
+ .arg(ts.tableName())));
- QVERIFY_SQL( q, exec() );
- QVERIFY( q.next() );
- QCOMPARE(q.boundValue( 0 ).toULongLong(), qulonglong(1));
- QCOMPARE(q.boundValue( 1 ).toLongLong(), (qlonglong)(1));
+ q.bindValue(":bindValue0", qulonglong(1), QSql::InOut);
+ q.bindValue(":bindValue1", qlonglong(1), QSql::InOut);
- q.bindValue(":bindValue0", (qulonglong)(0), QSql::InOut);
- q.bindValue(":bindValue1", (qlonglong)(0), QSql::InOut);
- QVERIFY_SQL( q, exec() );
+ QVERIFY_SQL(q, exec());
+ QVERIFY(q.next());
+ QCOMPARE(q.boundValue(0).toULongLong(), qulonglong(1));
+ QCOMPARE(q.boundValue(1).toLongLong(), qlonglong(1));
- QVERIFY( q.next() );
- QCOMPARE(q.boundValue( 0 ).toULongLong(), (qulonglong)(0));
- QCOMPARE(q.boundValue( 1 ).toLongLong(), (qlonglong)(0));
+ q.bindValue(":bindValue0", qulonglong(0), QSql::InOut);
+ q.bindValue(":bindValue1", qlonglong(0), QSql::InOut);
+ QVERIFY_SQL(q, exec());
- q.bindValue(":bindValue0", (qulonglong)(INT_MAX), QSql::InOut);
- q.bindValue(":bindValue1", (qlonglong)(-1), QSql::InOut);
- QVERIFY_SQL( q, exec() );
+ QVERIFY(q.next());
+ QCOMPARE(q.boundValue(0).toULongLong(), qulonglong(0));
+ QCOMPARE(q.boundValue(1).toLongLong(), qlonglong(0));
- QVERIFY( q.next() );
- QCOMPARE(q.boundValue( 0 ).toULongLong(), (qulonglong)(INT_MAX));
- QCOMPARE(q.boundValue( 1 ).toLongLong(), (qlonglong)(-1));
+ q.bindValue(":bindValue0", qulonglong(INT_MAX), QSql::InOut);
+ q.bindValue(":bindValue1", qlonglong(-1), QSql::InOut);
+ QVERIFY_SQL(q, exec());
- q.bindValue(":bindValue0", (qulonglong)(UINT_MAX), QSql::InOut);
- q.bindValue(":bindValue1", (qlonglong)(LONG_MAX), QSql::InOut);
- QVERIFY_SQL( q, exec() );
+ QVERIFY(q.next());
+ QCOMPARE(q.boundValue(0).toULongLong(), qulonglong(INT_MAX));
+ QCOMPARE(q.boundValue(1).toLongLong(), qlonglong(-1));
- QVERIFY( q.next() );
- QCOMPARE(q.boundValue( 0 ).toULongLong(), (qulonglong)(UINT_MAX));
- QCOMPARE(q.boundValue( 1 ).toLongLong(), (qlonglong)(LONG_MAX));
+ q.bindValue(":bindValue0", qulonglong(UINT_MAX), QSql::InOut);
+ q.bindValue(":bindValue1", qlonglong(LONG_MAX), QSql::InOut);
+ QVERIFY_SQL(q, exec());
- q.bindValue(":bindValue0", (qulonglong)(LONG_MAX), QSql::InOut);
- q.bindValue(":bindValue1", (qlonglong)(LONG_MIN), QSql::InOut);
- QVERIFY_SQL( q, exec() );
+ QVERIFY(q.next());
+ QCOMPARE(q.boundValue(0).toULongLong(), qulonglong(UINT_MAX));
+ QCOMPARE(q.boundValue(1).toLongLong(), qlonglong(LONG_MAX));
- QVERIFY( q.next() );
- QCOMPARE(q.boundValue( 0 ).toULongLong(), (qulonglong)(LONG_MAX));
- QCOMPARE(q.boundValue( 1 ).toLongLong(), (qlonglong)(LONG_MIN));
+ q.bindValue(":bindValue0", qulonglong(LONG_MAX), QSql::InOut);
+ q.bindValue(":bindValue1", qlonglong(LONG_MIN), QSql::InOut);
+ QVERIFY_SQL(q, exec());
- q.bindValue(":bindValue0", (qulonglong)(ULONG_MAX), QSql::InOut);
- q.bindValue(":bindValue1", (qlonglong)(ULONG_MAX), QSql::InOut);
- QVERIFY_SQL( q, exec() );
+ QVERIFY(q.next());
+ QCOMPARE(q.boundValue(0).toULongLong(), qulonglong(LONG_MAX));
+ QCOMPARE(q.boundValue(1).toLongLong(), qlonglong(LONG_MIN));
- QVERIFY( q.next() );
- QCOMPARE(q.boundValue( 0 ).toULongLong(), (qulonglong)(ULONG_MAX));
- QCOMPARE(q.boundValue( 1 ).toLongLong(), (qlonglong)(ULONG_MAX));
+ q.bindValue(":bindValue0", qulonglong(ULONG_MAX), QSql::InOut);
+ q.bindValue(":bindValue1", qlonglong(ULONG_MAX), QSql::InOut);
+ QVERIFY_SQL(q, exec());
- q.bindValue(":bindValue0", (qulonglong)(LLONG_MAX), QSql::InOut);
- q.bindValue(":bindValue1", (qlonglong)(LLONG_MAX), QSql::InOut);
- QVERIFY_SQL( q, exec() );
+ QVERIFY(q.next());
+ QCOMPARE(q.boundValue(0).toULongLong(), qulonglong(ULONG_MAX));
+ QCOMPARE(q.boundValue(1).toLongLong(), qlonglong(ULONG_MAX));
- QVERIFY( q.next() );
- QCOMPARE(q.boundValue( 0 ).toULongLong(), (qulonglong)(LLONG_MAX));
- QCOMPARE(q.boundValue( 1 ).toLongLong(), (qlonglong)(LLONG_MAX));
+ q.bindValue(":bindValue0", qulonglong(LLONG_MAX), QSql::InOut);
+ q.bindValue(":bindValue1", qlonglong(LLONG_MAX), QSql::InOut);
+ QVERIFY_SQL(q, exec());
- q.bindValue(":bindValue0", (qulonglong)(ULLONG_MAX), QSql::InOut);
- q.bindValue(":bindValue1", (qlonglong)(LLONG_MIN), QSql::InOut);
- QVERIFY_SQL( q, exec() );
+ QVERIFY(q.next());
+ QCOMPARE(q.boundValue(0).toULongLong(), qulonglong(LLONG_MAX));
+ QCOMPARE(q.boundValue(1).toLongLong(), qlonglong(LLONG_MAX));
- QVERIFY( q.next() );
- QCOMPARE(q.boundValue( 0 ).toULongLong(), (qulonglong)(ULLONG_MAX));
- QCOMPARE(q.boundValue( 1 ).toLongLong(), (qlonglong)(LLONG_MIN));
+ q.bindValue(":bindValue0", qulonglong(ULLONG_MAX), QSql::InOut);
+ q.bindValue(":bindValue1", qlonglong(LLONG_MIN), QSql::InOut);
+ QVERIFY_SQL(q, exec());
+ QVERIFY(q.next());
+ QCOMPARE(q.boundValue(0).toULongLong(), qulonglong(ULLONG_MAX));
+ QCOMPARE(q.boundValue(1).toLongLong(), qlonglong(LLONG_MIN));
}
void tst_QSqlQuery::sqlite_constraint()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
-
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType != QSqlDriver::SQLite)
- QSKIP("Sqlite3 specific test");
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
QSqlQuery q(db);
const QString trigger(qTableName("test_constraint", __FILE__, db));
- QVERIFY_SQL(q, exec("CREATE TEMP TRIGGER "+trigger+" BEFORE DELETE ON "+qtest+
- "\nFOR EACH ROW "
- "\nBEGIN"
- "\n SELECT RAISE(ABORT, 'Raised Abort successfully');"
- "\nEND;"
- ));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TEMP TRIGGER %1 BEFORE DELETE ON %2\n"
+ "FOR EACH ROW\n"
+ "BEGIN\n"
+ " SELECT RAISE(ABORT, 'Raised Abort successfully');\n"
+ "END;").arg(trigger, qtest)));
- QVERIFY(!q.exec("DELETE FROM "+qtest));
+ QVERIFY(!q.exec("DELETE FROM " + qtest));
QCOMPARE(q.lastError().databaseText(), QLatin1String("Raised Abort successfully"));
}
@@ -4373,28 +4260,64 @@ void tst_QSqlQuery::sqlite_real()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- const QString tableName(qTableName("sqliterealtype", __FILE__, db));
- tst_Databases::safeDropTable( db, tableName );
+ TableScope ts(db, "sqliterealtype", __FILE__);
QSqlQuery q(db);
- QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + " (id INTEGER, realVal REAL)"));
- QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id, realVal) VALUES (1, 2.3)"));
- QVERIFY_SQL(q, exec("SELECT realVal FROM " + tableName));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (id INTEGER, realVal REAL)")
+ .arg(ts.tableName())));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id, realVal) VALUES (1, 2.3)")
+ .arg(ts.tableName())));
+ QVERIFY_SQL(q, exec("SELECT realVal FROM " + ts.tableName()));
QVERIFY(q.next());
QCOMPARE(q.value(0).toDouble(), 2.3);
QCOMPARE(q.record().field(0).metaType().id(), QMetaType::Double);
- q.prepare("INSERT INTO " + tableName + " (id, realVal) VALUES (?, ?)");
+ q.prepare(QLatin1String("INSERT INTO %1 (id, realVal) VALUES (?, ?)").arg(ts.tableName()));
QVariant var((double)5.6);
q.addBindValue(4);
q.addBindValue(var);
QVERIFY_SQL(q, exec());
- QVERIFY_SQL(q, exec("SELECT realVal FROM " + tableName + " WHERE ID=4"));
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT realVal FROM %1 WHERE ID=4").arg(ts.tableName())));
QVERIFY(q.next());
QCOMPARE(q.value(0).toDouble(), 5.6);
}
+void tst_QSqlQuery::prepared_query_json_row()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ if (tst_Databases::getDatabaseType(db) != QSqlDriver::MySqlServer &&
+ tst_Databases::getDatabaseType(db) != QSqlDriver::PostgreSQL) {
+ QSKIP("PostgreSQL / MySQL specific test");
+ }
+
+ TableScope ts(db, "tableWithJsonRow", __FILE__);
+ QSqlQuery q(db);
+ const QLatin1String vals[] = {QLatin1String("{\"certificateNumber\": \"CERT-001\"}"),
+ QLatin1String("{\"certificateNumber\": \"CERT-002\"}")};
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (id INTEGER, value JSON)").arg(ts.tableName())));
+ for (const QLatin1String &json : vals) {
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id, value) VALUES (1, '%2')")
+ .arg(ts.tableName(), json)));
+ }
+
+ QVERIFY_SQL(q, prepare(QLatin1String("SELECT id, value FROM %1 WHERE id = ?").arg(ts.tableName())));
+ q.addBindValue(1);
+ QVERIFY_SQL(q, exec());
+
+ size_t iCount = 0;
+ while (q.next()) {
+ QVERIFY(iCount < sizeof(vals));
+ const int id = q.value(0).toInt();
+ const QByteArray json = q.value(1).toByteArray();
+ QCOMPARE(id, 1);
+ QCOMPARE(json, vals[iCount].data());
+ ++iCount;
+ }
+}
+
void tst_QSqlQuery::aggregateFunctionTypes()
{
QFETCH(QString, dbName);
@@ -4405,7 +4328,8 @@ void tst_QSqlQuery::aggregateFunctionTypes()
int countType = intType;
// QPSQL uses LongLong for manipulation of integers
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType == QSqlDriver::PostgreSQL || dbType == QSqlDriver::Interbase) {
+ if (dbType == QSqlDriver::PostgreSQL || dbType == QSqlDriver::Interbase
+ || dbType == QSqlDriver::MimerSQL) {
sumType = countType = QMetaType::LongLong;
} else if (dbType == QSqlDriver::Oracle) {
intType = sumType = countType = QMetaType::Double;
@@ -4414,11 +4338,11 @@ void tst_QSqlQuery::aggregateFunctionTypes()
countType = QMetaType::LongLong;
}
{
- const QString tableName(qTableName("numericFunctionsWithIntValues", __FILE__, db));
- tst_Databases::safeDropTable( db, tableName );
+ TableScope ts(db, "numericFunctionsWithIntValues", __FILE__);
+ const auto &tableName = ts.tableName();
QSqlQuery q(db);
- QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + " (id INTEGER)"));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (id INTEGER)").arg(tableName)));
// First test without any entries
QVERIFY_SQL(q, exec("SELECT SUM(id) FROM " + tableName));
@@ -4428,8 +4352,8 @@ void tst_QSqlQuery::aggregateFunctionTypes()
else
QCOMPARE(q.record().field(0).metaType().id(), sumType);
- QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id) VALUES (1)"));
- QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id) VALUES (2)"));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id) VALUES (1)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id) VALUES (2)").arg(tableName)));
QVERIFY_SQL(q, exec("SELECT SUM(id) FROM " + tableName));
QVERIFY(q.next());
@@ -4438,13 +4362,14 @@ void tst_QSqlQuery::aggregateFunctionTypes()
QVERIFY_SQL(q, exec("SELECT AVG(id) FROM " + tableName));
QVERIFY(q.next());
- if (dbType == QSqlDriver::SQLite || dbType == QSqlDriver::PostgreSQL || dbType == QSqlDriver::MySqlServer
- || dbType == QSqlDriver::Oracle) {
+ if (dbType == QSqlDriver::SQLite || dbType == QSqlDriver::PostgreSQL
+ || dbType == QSqlDriver::MySqlServer || dbType == QSqlDriver::Oracle) {
QCOMPARE(q.value(0).toDouble(), 1.5);
QCOMPARE(q.record().field(0).metaType().id(), QMetaType::Double);
} else {
QCOMPARE(q.value(0).toInt(), 1);
- QCOMPARE(q.record().field(0).metaType().id(), (dbType == QSqlDriver::Interbase ? QMetaType::LongLong : QMetaType::Int));
+ QCOMPARE(q.record().field(0).metaType().id(),
+ dbType == QSqlDriver::Interbase ? QMetaType::LongLong : QMetaType::Int);
}
QVERIFY_SQL(q, exec("SELECT COUNT(id) FROM " + tableName));
@@ -4463,11 +4388,11 @@ void tst_QSqlQuery::aggregateFunctionTypes()
QCOMPARE(q.record().field(0).metaType().id(), intType);
}
{
- const QString tableName(qTableName("numericFunctionsWithDoubleValues", __FILE__, db));
- tst_Databases::safeDropTable( db, tableName );
+ TableScope ts(db, "numericFunctionsWithDoubleValues", __FILE__);
+ const auto &tableName = ts.tableName();
QSqlQuery q(db);
- QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + " (id REAL)"));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (id REAL)").arg(tableName)));
// First test without any entries
QVERIFY_SQL(q, exec("SELECT SUM(id) FROM " + tableName));
@@ -4477,8 +4402,8 @@ void tst_QSqlQuery::aggregateFunctionTypes()
else
QCOMPARE(q.record().field(0).metaType().id(), QMetaType::Double);
- QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id) VALUES (1.5)"));
- QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id) VALUES (2.5)"));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id) VALUES (1.5)").arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id) VALUES (2.5)").arg(tableName)));
QVERIFY_SQL(q, exec("SELECT SUM(id) FROM " + tableName));
QVERIFY(q.next());
@@ -4508,16 +4433,17 @@ void tst_QSqlQuery::aggregateFunctionTypes()
QString field = "id";
// PSQL does not have the round() function with real type
- if (dbType == QSqlDriver::PostgreSQL) {
+ if (dbType == QSqlDriver::PostgreSQL)
field += "::NUMERIC";
- }
- QVERIFY_SQL(q, exec("SELECT ROUND(" + field + ", 1) FROM " + tableName + " WHERE id=1.5"));
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT ROUND(%1, 1) FROM %2 WHERE id=1.5")
+ .arg(field, tableName)));
QVERIFY(q.next());
QCOMPARE(q.value(0).toDouble(), 1.5);
QCOMPARE(q.record().field(0).metaType().id(), QMetaType::Double);
- QVERIFY_SQL(q, exec("SELECT ROUND(" + field + ", 0) FROM " + tableName + " WHERE id=2.5"));
+ QVERIFY_SQL(q, exec(QLatin1String("SELECT ROUND(%1, 0) FROM %2 WHERE id=2.5")
+ .arg(field, tableName)));
QVERIFY(q.next());
if (dbType == QSqlDriver::MySqlServer)
QCOMPARE(q.value(0).toDouble(), 2.0);
@@ -4526,26 +4452,42 @@ void tst_QSqlQuery::aggregateFunctionTypes()
QCOMPARE(q.record().field(0).metaType().id(), QMetaType::Double);
}
{
- const QString tableName(qTableName("stringFunctions", __FILE__, db));
- tst_Databases::safeDropTable( db, tableName );
+ TableScope ts(db, "stringFunctions", __FILE__);
+ const auto &tableName = ts.tableName();
QSqlQuery q(db);
- QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + " (id INTEGER, txt VARCHAR(50))"));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (id INTEGER, txt VARCHAR(50))")
+ .arg(tableName)));
QVERIFY_SQL(q, exec("SELECT MAX(txt) FROM " + tableName));
- QVERIFY(q.next());
+ QVERIFY_SQL(q, next());
if (dbType == QSqlDriver::SQLite)
QCOMPARE(q.record().field(0).metaType().id(), QMetaType::UnknownType);
else
QCOMPARE(q.record().field(0).metaType().id(), QMetaType::QString);
- QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id, txt) VALUES (1, 'lower')"));
- QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id, txt) VALUES (2, 'upper')"));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id, txt) VALUES (1, 'lower')")
+ .arg(tableName)));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id, txt) VALUES (2, 'upper')")
+ .arg(tableName)));
QVERIFY_SQL(q, exec("SELECT MAX(txt) FROM " + tableName));
QVERIFY(q.next());
QCOMPARE(q.value(0).toString(), QLatin1String("upper"));
QCOMPARE(q.record().field(0).metaType().id(), QMetaType::QString);
+
+ QVERIFY_SQL(q, exec(QLatin1String("DELETE FROM %1").arg(tableName)));
+ QVERIFY_SQL(q, exec(QString::fromUtf8("INSERT INTO %1 (id, txt) VALUES (1, 'löW€RÄ')")
+ .arg(tableName)));
+ QVERIFY_SQL(q, exec("SELECT LOWER(txt) FROM " + tableName));
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toString(), QString::fromUtf8("löw€rä"));
+ QCOMPARE(q.record().field(0).metaType().id(), QMetaType::QString);
+
+ QVERIFY_SQL(q, exec("SELECT UPPER(txt) FROM " + tableName));
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toString(), QString::fromUtf8("LÖW€RÄ"));
+ QCOMPARE(q.record().field(0).metaType().id(), QMetaType::QString);
}
}
@@ -4555,13 +4497,13 @@ void runIntegralTypesMysqlTest(QSqlDatabase &db, const QString &tableName, const
{
QList<QVariant> variantValues;
variantValues.reserve(values.size());
+ TableScope ts(db, tableName);
QSqlQuery q(db);
- QVERIFY_SQL(q, exec("DROP TABLE IF EXISTS " + tableName));
- QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + " (id " + type + ')'));
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %2 (id %1)").arg(type, tableName)));
if (withPreparedStatement) {
- QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " (id) VALUES (?)"));
+ QVERIFY_SQL(q, prepare(QLatin1String("INSERT INTO %1 (id) VALUES (?)").arg(tableName)));
}
for (int i = 0; i < values.size(); ++i) {
const T v = values.at(i);
@@ -4569,12 +4511,13 @@ void runIntegralTypesMysqlTest(QSqlDatabase &db, const QString &tableName, const
q.bindValue(0, v);
QVERIFY_SQL(q, exec());
} else {
- QVERIFY_SQL(q, exec("INSERT INTO " + tableName + " (id) VALUES (" + QString::number(v) + QLatin1Char(')')));
+ QVERIFY_SQL(q, exec(QLatin1String("INSERT INTO %1 (id) VALUES (%2)")
+ .arg(tableName, QString::number(v))));
}
variantValues.append(QVariant::fromValue(v));
}
- // ensure we can read them back properly
+ // Ensure we can read them back properly:
if (withPreparedStatement) {
QVERIFY_SQL(q, prepare("SELECT id FROM " + tableName));
QVERIFY_SQL(q, exec());
@@ -4602,8 +4545,8 @@ void runIntegralTypesMysqlTest(QSqlDatabase &db, const QString &tableName,
const T min = std::numeric_limits<T>::min(),
const T max = std::numeric_limits<T>::max())
{
- // insert some values
- const int steps = 20;
+ // Insert some values:
+ constexpr int steps = 20;
const T increment = (max / steps - min / steps);
QList<T> values;
values.reserve(steps);
@@ -4622,47 +4565,65 @@ void tst_QSqlQuery::integralTypesMysql()
const QList<bool> boolValues = QList<bool>() << false << true;
for (int i = 0; i < 2; ++i) {
const bool withPreparedStatement = (i == 1);
- runIntegralTypesMysqlTest<bool>(db, "tinyInt1Test", "TINYINT(1)", withPreparedStatement, boolValues);
- runIntegralTypesMysqlTest<bool>(db, "unsignedTinyInt1Test", "TINYINT(1) UNSIGNED", withPreparedStatement, boolValues);
+ runIntegralTypesMysqlTest<bool>(db, "tinyInt1Test", "TINYINT(1)",
+ withPreparedStatement, boolValues);
+ runIntegralTypesMysqlTest<bool>(db, "unsignedTinyInt1Test", "TINYINT(1) UNSIGNED",
+ withPreparedStatement, boolValues);
runIntegralTypesMysqlTest<qint8>(db, "tinyIntTest", "TINYINT", withPreparedStatement);
- runIntegralTypesMysqlTest<quint8>(db, "unsignedTinyIntTest", "TINYINT UNSIGNED", withPreparedStatement);
+ runIntegralTypesMysqlTest<quint8>(db, "unsignedTinyIntTest", "TINYINT UNSIGNED",
+ withPreparedStatement);
runIntegralTypesMysqlTest<qint16>(db, "smallIntTest", "SMALLINT", withPreparedStatement);
- runIntegralTypesMysqlTest<quint16>(db, "unsignedSmallIntTest", "SMALLINT UNSIGNED", withPreparedStatement);
- runIntegralTypesMysqlTest<qint32>(db, "mediumIntTest", "MEDIUMINT", withPreparedStatement, -(1 << 23), (1 << 23) - 1);
- runIntegralTypesMysqlTest<quint32>(db, "unsignedMediumIntTest", "MEDIUMINT UNSIGNED", withPreparedStatement, 0, (1 << 24) - 1);
+ runIntegralTypesMysqlTest<quint16>(db, "unsignedSmallIntTest", "SMALLINT UNSIGNED",
+ withPreparedStatement);
+ runIntegralTypesMysqlTest<qint32>(db, "mediumIntTest", "MEDIUMINT", withPreparedStatement,
+ -(1 << 23), (1 << 23) - 1);
+ runIntegralTypesMysqlTest<quint32>(db, "unsignedMediumIntTest", "MEDIUMINT UNSIGNED",
+ withPreparedStatement, 0, (1 << 24) - 1);
runIntegralTypesMysqlTest<qint32>(db, "intTest", "INT", withPreparedStatement);
- runIntegralTypesMysqlTest<quint32>(db, "unsignedIntTest", "INT UNSIGNED", withPreparedStatement);
+ runIntegralTypesMysqlTest<quint32>(db, "unsignedIntTest", "INT UNSIGNED",
+ withPreparedStatement);
runIntegralTypesMysqlTest<qint64>(db, "bigIntTest", "BIGINT", withPreparedStatement);
- runIntegralTypesMysqlTest<quint64>(db, "unsignedBigIntTest", "BIGINT UNSIGNED", withPreparedStatement);
+ runIntegralTypesMysqlTest<quint64>(db, "unsignedBigIntTest", "BIGINT UNSIGNED",
+ withPreparedStatement);
+ runIntegralTypesMysqlTest<quint64>(db, "bitmask_7", "BIT(7)", withPreparedStatement, 0,
+ (1LL << 7) - 1);
+ runIntegralTypesMysqlTest<quint64>(db, "bitmask_31", "BIT(31)", withPreparedStatement, 0,
+ (1LL << 31) - 1);
+ runIntegralTypesMysqlTest<quint64>(db, "bitmask_33", "BIT(33)", withPreparedStatement, 0,
+ (1LL << 33) - 1);
+ runIntegralTypesMysqlTest<quint64>(db, "bitmask_64", "BIT(64)", withPreparedStatement);
}
}
void tst_QSqlQuery::QTBUG_57138()
{
- QDateTime utc = QDateTime(QDate(2150, 1, 5), QTime(14, 0, 0, 123), Qt::UTC);
- QDateTime localtime = QDateTime(QDate(2150, 1, 5), QTime(14, 0, 0, 123), Qt::LocalTime);
- QDateTime tzoffset = QDateTime(QDate(2150, 1, 5), QTime(14, 0, 0, 123), Qt::OffsetFromUTC, 3600);
+ const QDateTime utc(QDate(2150, 1, 5), QTime(14, 0, 0, 123), QTimeZone::UTC);
+ const QDateTime localtime(QDate(2150, 1, 5), QTime(14, 0, 0, 123));
+ const QDateTime tzoffset(QDate(2150, 1, 5), QTime(14, 0, 0, 123),
+ QTimeZone::fromSecondsAheadOfUtc(3600));
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "qtbug57138", __FILE__);
QSqlQuery create(db);
- QString tableName = qTableName("qtbug57138", __FILE__, db);
- tst_Databases::safeDropTable(db, tableName);
- QVERIFY_SQL(create, exec("create table " + tableName + " (id int, dt_utc datetime, dt_lt datetime, dt_tzoffset datetime)"));
- QVERIFY_SQL(create, prepare("insert into " + tableName + " (id, dt_utc, dt_lt, dt_tzoffset) values (?, ?, ?, ?)"));
+ QVERIFY_SQL(create, exec(QLatin1String(
+ "create table %1 (id int, dt_utc datetime, dt_lt datetime, "
+ "dt_tzoffset datetime)").arg(ts.tableName())));
+ QVERIFY_SQL(create, prepare(QLatin1String("insert into %1 (id, dt_utc, dt_lt, dt_tzoffset) "
+ "values (?, ?, ?, ?)").arg(ts.tableName())));
create.addBindValue(0);
create.addBindValue(utc);
create.addBindValue(localtime);
create.addBindValue(tzoffset);
-
QVERIFY_SQL(create, exec());
QSqlQuery q(db);
- q.prepare("SELECT dt_utc, dt_lt, dt_tzoffset FROM " + tableName + " WHERE id = ?");
+ q.prepare(QLatin1String("SELECT dt_utc, dt_lt, dt_tzoffset FROM %1 WHERE id = ?")
+ .arg(ts.tableName()));
q.addBindValue(0);
QVERIFY_SQL(q, exec());
@@ -4678,13 +4639,15 @@ void tst_QSqlQuery::QTBUG_73286()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ TableScope ts(db, "qtbug73286", __FILE__);
QSqlQuery create(db);
- QString tableName = qTableName("qtbug73286", __FILE__, db);
- tst_Databases::safeDropTable(db, tableName);
-
- QVERIFY_SQL(create, exec("create table " + tableName + " (dec2 decimal(4,2), dec0 decimal(20,0), dec3 decimal(20,3))"));
- QVERIFY_SQL(create, prepare("insert into " + tableName + " (dec2, dec0, dec3) values (?, ?, ?)"));
+ QVERIFY_SQL(create, exec(QLatin1String(
+ "create table %1 (dec2 decimal(4,2), dec0 decimal(20,0), "
+ "dec3 decimal(20,3))").arg(ts.tableName())));
+ QVERIFY_SQL(create, prepare(QLatin1String(
+ "insert into %1 (dec2, dec0, dec3) values (?, ?, ?)")
+ .arg(ts.tableName())));
create.addBindValue("99.99");
create.addBindValue("12345678901234567890");
@@ -4693,7 +4656,7 @@ void tst_QSqlQuery::QTBUG_73286()
QVERIFY_SQL(create, exec());
QSqlQuery q(db);
- q.prepare("SELECT dec2, dec0, dec3 FROM " + tableName);
+ q.prepare("SELECT dec2, dec0, dec3 FROM " + ts.tableName());
q.setNumericalPrecisionPolicy(QSql::HighPrecision);
QVERIFY_SQL(q, exec());
@@ -4704,10 +4667,26 @@ void tst_QSqlQuery::QTBUG_73286()
QCOMPARE(q.value(2).toString(), "12345678901234567.890");
}
+void tst_QSqlQuery::insertVarChar1()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ QSqlQuery q(db);
+ TableScope ts(db, "testtable", __FILE__);
+ QVERIFY_SQL(q, exec(QLatin1String("CREATE TABLE %1 (smallcol VARCHAR(1))").arg(ts.tableName())));
+ QVERIFY_SQL(q, prepare(QLatin1String("INSERT INTO %1 (smallcol) VALUES (?)").arg(ts.tableName())));
+ QSqlField smallCol("smallcol");
+ smallCol.setValue(QVariant(QString(QChar('F'))));
+ q.bindValue(0, smallCol.value());
+ QVERIFY_SQL(q, exec());
+}
+
void tst_QSqlQuery::dateTime_data()
{
if (dbs.dbNames.isEmpty())
- QSKIP( "No database drivers are available in this Qt configuration");
+ QSKIP("No database drivers are available in this Qt configuration");
QTest::addColumn<QString>("dbName");
QTest::addColumn<QString>("tableName");
@@ -4716,8 +4695,8 @@ void tst_QSqlQuery::dateTime_data()
QTest::addColumn<QList<QDateTime> >("expectedDateTimes");
#if QT_CONFIG(timezone)
- // Using time zones which are highly unlikely to be the same as the testing machine's one
- // as it could pass as a result despite it.
+ // Using time zones which are highly unlikely to be the same as the testing
+ // machine's one as it could pass as a result despite it.
// +8.5 hours from UTC to North Korea
const QTimeZone afterUTCTimeZone(30600);
// -8 hours from UTC to Belize
@@ -4755,27 +4734,26 @@ void tst_QSqlQuery::dateTime_data()
#endif
};
- for (const QString &dbName : qAsConst(dbs.dbNames)) {
+ for (const QString &dbName : std::as_const(dbs.dbNames)) {
QSqlDatabase db = QSqlDatabase::database(dbName);
if (!db.isValid())
continue;
const QString tableNameTSWithTimeZone(qTableName("dateTimeTSWithTimeZone", __FILE__, db));
- const QString tableNameTSWithLocalTimeZone(qTableName("dateTimeTSWithLocalTimeZone", __FILE__, db));
const QString tableNameTS(qTableName("dateTimeTS", __FILE__, db));
const QString tableNameDate(qTableName("dateTimeDate", __FILE__, db));
QTest::newRow(QString(dbName + " timestamp with time zone").toLatin1())
<< dbName << tableNameTSWithTimeZone
- << QStringLiteral(" (dt TIMESTAMP WITH TIME ZONE)")
+ << u" (dt TIMESTAMP WITH TIME ZONE)"_s
<< dateTimes << dateTimes;
QTest::newRow(QString(dbName + " timestamp with local time zone").toLatin1())
<< dbName << tableNameTSWithTimeZone
- << QStringLiteral(" (dt TIMESTAMP WITH LOCAL TIME ZONE)")
+ << u" (dt TIMESTAMP WITH LOCAL TIME ZONE)"_s
<< dateTimes << expectedDateTimesLocalTZ;
QTest::newRow(QString(dbName + "timestamp").toLatin1())
- << dbName << tableNameTS << QStringLiteral(" (dt TIMESTAMP(3))")
+ << dbName << tableNameTS << u" (dt TIMESTAMP(3))"_s
<< dateTimes << expectedTimeStampDateTimes;
QTest::newRow(QString(dbName + "date").toLatin1())
- << dbName << tableNameDate << QStringLiteral(" (dt DATE)")
+ << dbName << tableNameDate << u" (dt DATE)"_s
<< dateTimes << expectedDateTimes;
}
}
@@ -4785,9 +4763,7 @@ void tst_QSqlQuery::dateTime()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
-
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType != QSqlDriver::Oracle)
+ if (tst_Databases::getDatabaseType(db) != QSqlDriver::Oracle)
QSKIP("Implemented only for Oracle");
QFETCH(QString, tableName);
@@ -4795,17 +4771,93 @@ void tst_QSqlQuery::dateTime()
QFETCH(QList<QDateTime>, initialDateTimes);
QFETCH(QList<QDateTime>, expectedDateTimes);
- tst_Databases::safeDropTable(db, tableName);
+ TableScope ts(db, tableName);
QSqlQuery q(db);
QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + createTableString));
- for (const QDateTime &dt : qAsConst(initialDateTimes)) {
- QVERIFY_SQL(q, prepare("INSERT INTO " + tableName + " values(:dt)"));
+ for (const QDateTime &dt : std::as_const(initialDateTimes)) {
+ QVERIFY_SQL(q, prepare(QLatin1String("INSERT INTO %1 values(:dt)").arg(tableName)));
q.bindValue(":dt", dt);
QVERIFY_SQL(q, exec());
}
QVERIFY_SQL(q, exec("SELECT * FROM " + tableName));
- for (const QDateTime &dt : qAsConst(expectedDateTimes)) {
+ for (const QDateTime &dt : std::as_const(expectedDateTimes)) {
+ QVERIFY(q.next());
+ QCOMPARE(q.value(0).toDateTime(), dt);
+ }
+}
+
+void tst_QSqlQuery::ibaseDateTimeWithTZ_data()
+{
+ if (dbs.dbNames.isEmpty())
+ QSKIP("No database drivers are available in this Qt configuration");
+
+ QTest::addColumn<QString>("dbName");
+ QTest::addColumn<QString>("tableName");
+ QTest::addColumn<QList<QDateTime> >("initialDateTimes");
+ QTest::addColumn<QList<QDateTime> >("expectedDateTimes");
+
+#if QT_CONFIG(timezone)
+ const QTimeZone afterUTCTimeZone("Asia/Hong_Kong");
+ const QTimeZone beforeUTCTimeZone("America/Los_Angeles");
+ const QDateTime dtWithAfterTZ(QDate(2015, 5, 18), QTime(4, 26, 30, 500), afterUTCTimeZone);
+ const QDateTime dtWithBeforeTZ(QDate(2015, 5, 18), QTime(4, 26, 30, 500), beforeUTCTimeZone);
+ const QTimeZone utcTimeZone("UTC");
+ const QDateTime dtWithUTCTZ(QDate(2015, 5, 18), QTime(4, 26, 30, 500), utcTimeZone);
+#endif // QT_CONFIG(timezone)
+ const QDateTime dtLocalTZ(QDateTime::currentDateTime());
+
+ const QList<QDateTime> dateTimes = {
+#if QT_CONFIG(timezone)
+ dtWithAfterTZ,
+ dtWithBeforeTZ,
+ dtWithUTCTZ,
+#endif // QT_CONFIG(timezone)
+ dtLocalTZ
+ };
+
+ for (const QString &dbName : std::as_const(dbs.dbNames)) {
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ if (!db.isValid())
+ continue;
+
+ const QString tableNameTSWithTimeZone(qTableName("dateTimeTSWithTZ", __FILE__, db));
+
+ QTest::newRow(QString(dbName + " timestamp with time zone").toLatin1())
+ << dbName
+ << tableNameTSWithTimeZone
+ << dateTimes
+ << dateTimes;
+ }
+}
+
+void tst_QSqlQuery::ibaseDateTimeWithTZ()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ if (tst_Databases::getDatabaseType(db) != QSqlDriver::Interbase)
+ QSKIP("Implemented only for Interbase");
+
+ if (tst_Databases::getIbaseEngineVersion(db).majorVersion() < 4)
+ QSKIP("Time zone support only implemented for firebird engine version 4 and greater");
+
+ QFETCH(QString, tableName);
+ TableScope ts(db, tableName);
+
+ QSqlQuery q(db);
+ QVERIFY_SQL(q, exec(QString("CREATE TABLE " + tableName + "(dt timestamp with time zone)")));
+
+ QFETCH(QList<QDateTime>, initialDateTimes);
+ QFETCH(QList<QDateTime>, expectedDateTimes);
+
+ for (const QDateTime &dt : std::as_const(initialDateTimes)) {
+ QVERIFY_SQL(q, prepare(QLatin1String("INSERT INTO %1 values(:dt)").arg(tableName)));
+ q.bindValue(":dt", dt);
+ QVERIFY_SQL(q, exec());
+ }
+ QVERIFY_SQL(q, exec("SELECT * FROM " + tableName));
+ for (const QDateTime &dt : std::as_const(expectedDateTimes)) {
QVERIFY(q.next());
QCOMPARE(q.value(0).toDateTime(), dt);
}
@@ -4820,14 +4872,17 @@ void tst_QSqlQuery::sqliteVirtualTable()
CHECK_DATABASE(db);
const auto tableName = qTableName("sqliteVirtual", __FILE__, db);
QSqlQuery qry(db);
- QVERIFY_SQL(qry, exec("create virtual table " + tableName + " using fts3(id, name)"));
+ QVERIFY_SQL(qry, exec(QLatin1String("create virtual table %1 using fts3(id, name)")
+ .arg(tableName)));
// Delibrately malform the query to try and provoke a potential crash situation
- QVERIFY_SQL(qry, prepare("select * from " + tableName + " where name match '?'"));
+ QVERIFY_SQL(qry, prepare(QLatin1String("select * from %1 where name match '?'")
+ .arg(tableName)));
qry.addBindValue("Andy");
QVERIFY(!qry.exec());
- QVERIFY_SQL(qry, prepare("insert into " + tableName + "(id, name) VALUES (?, ?)"));
+ QVERIFY_SQL(qry, prepare(QLatin1String("insert into %1(id, name) VALUES (?, ?)")
+ .arg(tableName)));
qry.addBindValue(1);
qry.addBindValue("Andy");
QVERIFY_SQL(qry, exec());
@@ -4837,12 +4892,13 @@ void tst_QSqlQuery::sqliteVirtualTable()
QCOMPARE(qry.value(0).toInt(), 1);
QCOMPARE(qry.value(1).toString(), "Andy");
- QVERIFY_SQL(qry, prepare("insert into " + tableName + "(id, name) values (:id, :name)"));
+ QVERIFY_SQL(qry, prepare(QLatin1String("insert into %1(id, name) values (:id, :name)")
+ .arg(tableName)));
qry.bindValue(":id", 2);
qry.bindValue(":name", "Peter");
QVERIFY_SQL(qry, exec());
- QVERIFY_SQL(qry, prepare("select * from " + tableName + " where name match ?"));
+ QVERIFY_SQL(qry, prepare(QLatin1String("select * from %1 where name match ?").arg(tableName)));
qry.addBindValue("Peter");
QVERIFY_SQL(qry, exec());
QVERIFY(qry.next());
@@ -4857,29 +4913,36 @@ void tst_QSqlQuery::mysql_timeType()
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- const auto tableName = qTableName("mysqlTimeType", __FILE__, db);
- tst_Databases::safeDropTables(db, { tableName });
+ TableScope ts(db, "mysqlTimeType", __FILE__);
+ const auto &tableName = ts.tableName();
QSqlQuery qry(db);
- QVERIFY_SQL(qry, exec("create table " + tableName + " (t time(6))"));
+ QVERIFY_SQL(qry, exec(QLatin1String("create table %1 (t time(6))").arg(tableName)));
// MySQL will convert days into hours and add them together so 17 days 11 hours becomes 419 hours
- const QStringList timeData = { "-838:59:59.000000", "-123:45:56.789", "000:00:00.0", "123:45:56.789",
- "838:59:59.000000", "15:50", "12", "1213", "0 1:2:3", "17 11:22:33" };
- const QStringList resultTimeData = { "-838:59:59.000000", "-123:45:56.789000", "00:00:00.000000",
- "123:45:56.789000", "838:59:59.000000", "15:50:00.000000", "00:00:12.000000", "00:12:13.000000",
- "01:02:03.000000", "419:22:33.000000" };
- for (const QString &time : timeData)
- QVERIFY_SQL(qry, exec("insert into " + tableName + " (t) VALUES ('" + time + "')"));
+ const QString timeData[] = {
+ u"-838:59:59.000000"_s, u"-123:45:56.789"_s, u"000:00:00.0"_s, u"123:45:56.789"_s,
+ u"838:59:59.000000"_s, u"15:50"_s, u"12"_s, u"1213"_s, u"0 1:2:3"_s, u"17 11:22:33"_s
+ };
+ const QString resultTimeData[] = {
+ u"-838:59:59.000000"_s, u"-123:45:56.789000"_s, u"00:00:00.000000"_s,
+ u"123:45:56.789000"_s, u"838:59:59.000000"_s, u"15:50:00.000000"_s,
+ u"00:00:12.000000"_s, u"00:12:13.000000"_s, u"01:02:03.000000"_s, u"419:22:33.000000"_s
+ };
+ for (const QString &time : timeData) {
+ QVERIFY_SQL(qry, exec(QLatin1String("insert into %2 (t) VALUES ('%1')")
+ .arg(time, tableName)));
+ }
QVERIFY_SQL(qry, exec("select * from " + tableName));
- for (const QString &time : qAsConst(resultTimeData)) {
+ for (const QString &time : resultTimeData) {
QVERIFY(qry.next());
QCOMPARE(qry.value(0).toString(), time);
}
QVERIFY_SQL(qry, exec("delete from " + tableName));
for (const QString &time : timeData) {
- QVERIFY_SQL(qry, prepare("insert into " + tableName + " (t) VALUES (:time)"));
+ QVERIFY_SQL(qry, prepare(QLatin1String("insert into %1 (t) VALUES (:time)")
+ .arg(tableName)));
qry.bindValue(0, time);
QVERIFY_SQL(qry, exec());
}
@@ -4890,9 +4953,12 @@ void tst_QSqlQuery::mysql_timeType()
}
QVERIFY_SQL(qry, exec("delete from " + tableName));
- const QList<QTime> qTimeBasedData = { QTime(), QTime(1, 2, 3, 4), QTime(0, 0, 0, 0), QTime(23,59,59,999) };
+ const QTime qTimeBasedData[] = {
+ QTime(), QTime(1, 2, 3, 4), QTime(0, 0, 0, 0), QTime(23, 59, 59, 999)
+ };
for (const QTime &time : qTimeBasedData) {
- QVERIFY_SQL(qry, prepare("insert into " + tableName + " (t) VALUES (:time)"));
+ QVERIFY_SQL(qry, prepare(QLatin1String("insert into %1 (t) VALUES (:time)")
+ .arg(tableName)));
qry.bindValue(0, time);
QVERIFY_SQL(qry, exec());
}
@@ -4909,13 +4975,13 @@ void tst_QSqlQuery::ibaseArray()
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- const auto arrayTable = qTableName("ibasearray", __FILE__, db);
- tst_Databases::safeDropTable(db, arrayTable);
+ TableScope ts(db, "ibasearray", __FILE__);
QSqlQuery qry(db);
- QVERIFY_SQL(qry, exec("create table " + arrayTable + " (intData int[0:4], longData bigint[5], "
- "charData varchar(255)[5], boolData boolean[2])"));
- QVERIFY_SQL(qry, prepare("insert into " + arrayTable + " (intData, longData, charData, boolData) "
- "values(?, ?, ?, ?)"));
+ QVERIFY_SQL(qry, exec(QLatin1String(
+ "create table %1 (intData int[0:4], longData bigint[5], "
+ "charData varchar(255)[5], boolData boolean[2])").arg(ts.tableName())));
+ QVERIFY_SQL(qry, prepare(QLatin1String("insert into %1 (intData, longData, charData, boolData)"
+ " values(?, ?, ?, ?)").arg(ts.tableName())));
const auto intArray = QVariant{QVariantList{1, 2, 3, 4711, 815}};
const auto charArray = QVariant{QVariantList{"AAA", "BBB", "CCC", "DDD", "EEE"}};
const auto boolArray = QVariant{QVariantList{true, false}};
@@ -4924,7 +4990,7 @@ void tst_QSqlQuery::ibaseArray()
qry.bindValue(2, charArray);
qry.bindValue(3, boolArray);
QVERIFY_SQL(qry, exec());
- QVERIFY_SQL(qry, exec("select * from " + arrayTable));
+ QVERIFY_SQL(qry, exec("select * from " + ts.tableName()));
QVERIFY(qry.next());
QCOMPARE(qry.value(0).toList(), intArray.toList());
QCOMPARE(qry.value(1).toList(), intArray.toList());
@@ -4932,6 +4998,42 @@ void tst_QSqlQuery::ibaseArray()
QCOMPARE(qry.value(3).toList(), boolArray.toList());
}
+void tst_QSqlQuery::ibaseTimeStampTzArray()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+
+ if (tst_Databases::getIbaseEngineVersion(db).majorVersion() < 4)
+ QSKIP("Time zone support only implemented for firebird engine version 4 and greater");
+
+ TableScope ts(db, "ibasetstzarray", __FILE__);
+ QSqlQuery qry(db);
+ QVERIFY_SQL(qry, exec(QLatin1String(
+ "create table %1 (timeStampData timestamp with time zone[0:4])").arg(ts.tableName())));
+ QVERIFY_SQL(qry, prepare(QLatin1String("insert into %1 (timeStampData)"
+ " values(?)").arg(ts.tableName())));
+#if QT_CONFIG(timezone)
+ const QDateTime dtWithAfterTZ(QDate(2015, 5, 18), QTime(4, 26, 30, 500), QTimeZone("Asia/Hong_Kong"));
+ const QDateTime dtWithBeforeTZ(QDate(2015, 5, 18), QTime(4, 26, 30, 500), QTimeZone("America/Los_Angeles"));
+ const QDateTime dtWithUTCTZ(QDate(2015, 5, 18), QTime(4, 26, 30, 500), QTimeZone("UTC"));
+ const QDateTime dtLocalTZ(QDateTime::currentDateTime());
+ const QDateTime dtWithMETTZ(QDate(2015, 5, 18), QTime(4, 26, 30, 500), QTimeZone("MET"));
+
+
+ const auto timeStampData = QVariant{QVariantList{dtWithAfterTZ,
+ dtWithBeforeTZ,
+ dtWithUTCTZ,
+ dtLocalTZ,
+ dtWithMETTZ}};
+ qry.bindValue(0, timeStampData);
+ QVERIFY_SQL(qry, exec());
+ QVERIFY_SQL(qry, exec("select * from " + ts.tableName()));
+ QVERIFY(qry.next());
+ QCOMPARE(qry.value(0).toList(), timeStampData.toList());
+#endif // QT_CONFIG(timezone)
+}
+
void tst_QSqlQuery::ibase_executeBlock()
{
QFETCH(QString, dbName);
@@ -4952,5 +5054,83 @@ void tst_QSqlQuery::ibase_executeBlock()
QCOMPARE(qry.value(0).toInt(), 4);
}
-QTEST_MAIN( tst_QSqlQuery )
+void tst_QSqlQuery::positionalBindingEnabled()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "positionalBinding", __FILE__);
+ const QString &tableName = ts.tableName();
+
+ QSqlQuery qry(db);
+ QVERIFY_SQL(qry, exec("CREATE TABLE " + tableName + " (integer_col integer)"));
+ QVERIFY_SQL(qry, exec("INSERT INTO " + tableName + "(integer_col) VALUES(42)"));
+
+ qry.setPositionalBindingEnabled(true);
+ QCOMPARE(qry.isPositionalBindingEnabled(), true);
+ QVERIFY_SQL(qry, prepare("SELECT integer_col FROM " + tableName + " WHERE integer_col = :integer_val"));
+ qry.bindValue(":integer_val", 42);
+ QVERIFY_SQL(qry, exec());
+ QVERIFY_SQL(qry, next());
+ QCOMPARE(qry.value(0).toInt(), 42);
+ QVERIFY_SQL(qry, prepare("SELECT integer_col FROM " + tableName + " WHERE integer_col = ?"));
+ qry.bindValue(0, 42);
+ QVERIFY_SQL(qry, exec());
+ QVERIFY_SQL(qry, next());
+ QCOMPARE(qry.value(0).toInt(), 42);
+
+ qry.setPositionalBindingEnabled(false);
+ QCOMPARE(qry.isPositionalBindingEnabled(), false);
+ QVERIFY_SQL(qry, prepare("SELECT integer_col FROM " + tableName + " WHERE integer_col = :integer_val"));
+ qry.bindValue(":integer_val", 42);
+ QVERIFY_SQL(qry, exec());
+ QVERIFY_SQL(qry, next());
+ QCOMPARE(qry.value(0).toInt(), 42);
+ // the next query will only work when the underlying database support question mark notation natively
+ if (dbType == QSqlDriver::PostgreSQL) {
+ QVERIFY(!qry.prepare("SELECT integer_col FROM " + tableName + " WHERE integer_col = ?"));
+ qry.bindValue(0, 42);
+ QVERIFY(!qry.exec());
+ QVERIFY(!qry.next());
+ } else {
+ QVERIFY_SQL(qry, prepare("SELECT integer_col FROM " + tableName + " WHERE integer_col = ?"));
+ qry.bindValue(0, 42);
+ QVERIFY_SQL(qry, exec());
+ QVERIFY_SQL(qry, next());
+ QCOMPARE(qry.value(0).toInt(), 42);
+ }
+}
+
+void tst_QSqlQuery::psqlJsonOperator()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ TableScope ts(db, "qTableName", __FILE__);
+ const QString &tableName = ts.tableName();
+
+ QSqlQuery qry(db);
+ qry.setPositionalBindingEnabled(false); // don't allow / handle '?' as placeholder
+ QVERIFY_SQL(qry, exec("CREATE TABLE " + tableName + " (integer_col integer, json_col jsonb)"));
+ QVERIFY_SQL(qry, exec("INSERT INTO " + tableName + "(integer_col, json_col) VALUES(42, '{\"a\": [1, 2]}')"));
+ QVERIFY_SQL(qry, exec("INSERT INTO " + tableName + "(integer_col, json_col) VALUES(43, '{\"b\": [3, 4]}')"));
+
+ QVERIFY_SQL(qry, prepare("SELECT integer_col, json_col FROM " + tableName + " WHERE json_col @? '$.a[*] ? (@ == 1)' and integer_col = :int"));
+ qry.bindValue(":int", 42);
+ QVERIFY_SQL(qry, exec());
+ QVERIFY_SQL(qry, next());
+ QCOMPARE(qry.value(0).toInt(), 42);
+ QCOMPARE(qry.value(1).toByteArray(), "{\"a\": [1, 2]}");
+
+ QVERIFY_SQL(qry, prepare("SELECT integer_col, json_col FROM " + tableName + " WHERE json_col ? 'b' and integer_col = :int"));
+ qry.bindValue(":int", 43);
+ QVERIFY_SQL(qry, exec());
+ QVERIFY_SQL(qry, next());
+ QCOMPARE(qry.value(0).toInt(), 43);
+ QCOMPARE(qry.value(1).toByteArray(), "{\"b\": [3, 4]}");
+}
+
+
+QTEST_MAIN(tst_QSqlQuery)
#include "tst_qsqlquery.moc"
diff --git a/tests/auto/sql/kernel/qsqlrecord/CMakeLists.txt b/tests/auto/sql/kernel/qsqlrecord/CMakeLists.txt
index 72eb1c0727..18d46669db 100644
--- a/tests/auto/sql/kernel/qsqlrecord/CMakeLists.txt
+++ b/tests/auto/sql/kernel/qsqlrecord/CMakeLists.txt
@@ -1,12 +1,19 @@
-# Generated from qsqlrecord.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqlrecord Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqlrecord LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqlrecord
SOURCES
tst_qsqlrecord.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Sql
)
diff --git a/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp b/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp
index ac71e0edc2..6aeae86d7d 100644
--- a/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.cpp
+++ b/tests/auto/sql/kernel/qsqlrecord/tst_qsqlrecord.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 <QTest>
@@ -39,12 +14,7 @@
class tst_QSqlRecord : public QObject
{
-Q_OBJECT
-
-public:
- tst_QSqlRecord();
- virtual ~tst_QSqlRecord();
-
+ Q_OBJECT
public slots:
void init();
@@ -70,28 +40,14 @@ private slots:
void clearValues();
void clear();
void append();
+ void moveSemantics();
private:
- QSqlRecord* rec;
- QSqlField* fields[ NUM_FIELDS ];
+ std::unique_ptr<QSqlRecord> rec;
+ std::array<std::unique_ptr<QSqlField>, NUM_FIELDS> fields;
void createTestRecord();
};
-tst_QSqlRecord::tst_QSqlRecord()
-{
- rec = 0;
- for ( int i = 0; i < NUM_FIELDS; ++i )
- fields[ i ] = 0;
-}
-
-tst_QSqlRecord::~tst_QSqlRecord()
-{
- delete rec;
- for ( int i = 0; i < NUM_FIELDS; ++i )
- delete fields[ i ];
- rec = 0;
-}
-
void tst_QSqlRecord::init()
{
cleanup();
@@ -99,31 +55,26 @@ void tst_QSqlRecord::init()
void tst_QSqlRecord::cleanup()
{
- delete rec;
- for ( int i = 0; i < NUM_FIELDS; ++i ) {
- delete fields[ i ];
- fields[ i ] = 0;
- }
- rec = 0;
+ rec = nullptr;
+ for (auto &field : fields)
+ field = nullptr;
}
void tst_QSqlRecord::createTestRecord()
{
- delete rec;
- rec = new QSqlRecord();
- fields[0] = new QSqlField(QStringLiteral("string"), QMetaType(QMetaType::QString), QStringLiteral("stringtable"));
- fields[1] = new QSqlField(QStringLiteral("int"), QMetaType(QMetaType::Int), QStringLiteral("inttable"));
- fields[2] = new QSqlField(QStringLiteral("double"), QMetaType(QMetaType::Double), QStringLiteral("doubletable"));
- fields[3] = new QSqlField(QStringLiteral("bool"), QMetaType(QMetaType::Bool));
- for ( int i = 0; i < NUM_FIELDS; ++i )
- rec->append( *(fields[ i ] ) );
+ rec = std::make_unique<QSqlRecord>();
+ fields[0] = std::make_unique<QSqlField>(QStringLiteral("string"), QMetaType(QMetaType::QString), QStringLiteral("stringtable"));
+ fields[1] = std::make_unique<QSqlField>(QStringLiteral("int"), QMetaType(QMetaType::Int), QStringLiteral("inttable"));
+ fields[2] = std::make_unique<QSqlField>(QStringLiteral("double"), QMetaType(QMetaType::Double), QStringLiteral("doubletable"));
+ fields[3] = std::make_unique<QSqlField>(QStringLiteral("bool"), QMetaType(QMetaType::Bool));
+ for (const auto &field : fields)
+ rec->append(*field);
}
void tst_QSqlRecord::append()
{
- delete rec;
- rec = new QSqlRecord();
+ rec = std::make_unique<QSqlRecord>();
rec->append(QSqlField("string", QMetaType(QMetaType::QString), QStringLiteral("stringtable")));
QCOMPARE( rec->field( 0 ).name(), (QString) "string" );
QCOMPARE(rec->field(0).tableName(), QStringLiteral("stringtable"));
@@ -182,10 +133,7 @@ void tst_QSqlRecord::clearValues()
QFETCH( double, dval );
QFETCH( int, bval );
- if(rec)
- delete rec;
-
- rec = new QSqlRecord();
+ rec = std::make_unique<QSqlRecord>();
rec->append( QSqlField( "string", QMetaType(QMetaType::QString) ) );
QCOMPARE( rec->field(0).name(), (QString) "string" );
QVERIFY( !rec->isEmpty() );
@@ -225,8 +173,8 @@ void tst_QSqlRecord::clearValues()
void tst_QSqlRecord::contains()
{
createTestRecord();
- for ( int i = 0; i < NUM_FIELDS; ++i )
- QVERIFY( rec->contains( fields[ i ]->name() ) );
+ for (const auto &field : fields)
+ QVERIFY(rec->contains(field->name()));
QVERIFY( !rec->contains( "__Harry__" ) );
}
@@ -258,8 +206,8 @@ void tst_QSqlRecord::fieldName()
{
createTestRecord();
- for ( int i = 0; i < NUM_FIELDS; ++i )
- QVERIFY( rec->field( (fields[ i ] )->name() ) == *( fields[ i ] ) );
+ for (const auto &field : fields)
+ QVERIFY(rec->field(field->name()) == *field);
QVERIFY( rec->fieldName( NUM_FIELDS ).isNull() );
}
@@ -437,8 +385,7 @@ void tst_QSqlRecord::setValue()
{
int i;
- delete rec;
- rec = new QSqlRecord();
+ rec = std::make_unique<QSqlRecord>();
rec->append( QSqlField( "string", QMetaType(QMetaType::QString) ) );
QCOMPARE( rec->field( 0 ).name(), (QString) "string" );
QVERIFY( !rec->isEmpty() );
@@ -503,5 +450,24 @@ void tst_QSqlRecord::value()
QCOMPARE(rec2.value("string").toString(), QLatin1String("Harry"));
}
+void tst_QSqlRecord::moveSemantics()
+{
+ QSqlRecord rec, empty;
+ rec.append(QSqlField("string", QMetaType(QMetaType::QString)));
+ rec.setValue("string", "Harry");
+ auto moved = std::move(rec);
+ // `rec` is not partially-formed
+
+ // moving transfers state:
+ QCOMPARE(moved.value("string").toString(), QLatin1String("Harry"));
+
+ // moved-from objects can be assigned-to:
+ rec = empty;
+ QVERIFY(rec.value("string").isNull());
+
+ // moved-from object can be destroyed:
+ moved = std::move(rec);
+}
+
QTEST_MAIN(tst_QSqlRecord)
#include "tst_qsqlrecord.moc"
diff --git a/tests/auto/sql/kernel/qsqlresult/CMakeLists.txt b/tests/auto/sql/kernel/qsqlresult/CMakeLists.txt
index 1dc3394770..1fc475b144 100644
--- a/tests/auto/sql/kernel/qsqlresult/CMakeLists.txt
+++ b/tests/auto/sql/kernel/qsqlresult/CMakeLists.txt
@@ -1,14 +1,21 @@
-# Generated from qsqlresult.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqlresult Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqlresult LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqlresult
SOURCES
testsqldriver.h
tst_qsqlresult.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Sql
Qt::SqlPrivate
diff --git a/tests/auto/sql/kernel/qsqlresult/testsqldriver.h b/tests/auto/sql/kernel/qsqlresult/testsqldriver.h
index d9c5a411ba..072e683d68 100644
--- a/tests/auto/sql/kernel/qsqlresult/testsqldriver.h
+++ b/tests/auto/sql/kernel/qsqlresult/testsqldriver.h
@@ -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
#ifndef TESTSQLDRIVER_H
#define TESTSQLDRIVER_H
diff --git a/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp b/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp
index cae8491b81..da438dcfd6 100644
--- a/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.cpp
+++ b/tests/auto/sql/kernel/qsqlresult/tst_qsqlresult.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 <QTest>
#include <QtSql/QtSql>
@@ -54,7 +29,7 @@ void tst_QSqlResult::positionalToNamedBinding()
TestSqlDriverResult result(&testDriver);
QString query("INSERT INTO MYTABLE (ID, NAME, BIRTH) VALUES(?, ?, ?)");
QVERIFY(result.savePrepare(query));
- QCOMPARE(result.boundValues().count(), 3);
+ QCOMPARE(result.boundValues().size(), 3);
}
void tst_QSqlResult::parseOfBoundValues()
@@ -62,43 +37,43 @@ void tst_QSqlResult::parseOfBoundValues()
TestSqlDriver testDriver;
TestSqlDriverResult result(&testDriver);
QVERIFY(result.savePrepare("SELECT :1 AS \":2\""));
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
QVERIFY(result.savePrepare("SELECT :1 AS ':2'"));
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
QVERIFY(result.savePrepare("SELECT :1 AS [:2]"));
if (testDriver.dbmsType() == QSqlDriver::PostgreSQL)
- QCOMPARE(result.boundValues().count(), 2);
+ QCOMPARE(result.boundValues().size(), 2);
else
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
QVERIFY(result.savePrepare("SELECT :1 AS [:2]]]"));
if (testDriver.dbmsType() == QSqlDriver::PostgreSQL)
- QCOMPARE(result.boundValues().count(), 2);
+ QCOMPARE(result.boundValues().size(), 2);
else
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
QVERIFY(result.savePrepare("SELECT :1 AS [:2]]]]]"));
if (testDriver.dbmsType() == QSqlDriver::PostgreSQL)
- QCOMPARE(result.boundValues().count(), 2);
+ QCOMPARE(result.boundValues().size(), 2);
else
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
QVERIFY(result.savePrepare("SELECT ? AS \"?\""));
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
QVERIFY(result.savePrepare("SELECT ? AS '?'"));
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
QVERIFY(result.savePrepare("SELECT ? AS [?]"));
if (testDriver.dbmsType() == QSqlDriver::PostgreSQL)
- QCOMPARE(result.boundValues().count(), 2);
+ QCOMPARE(result.boundValues().size(), 2);
else
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
QVERIFY(result.savePrepare("SELECT ? AS \"'?\""));
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
QVERIFY(result.savePrepare("SELECT ? AS '?\"'"));
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
QVERIFY(result.savePrepare("SELECT ? AS '?''?'"));
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
QVERIFY(result.savePrepare("SELECT ? AS [\"?']"));
- QCOMPARE(result.boundValues().count(), 1);
+ QCOMPARE(result.boundValues().size(), 1);
}
QTEST_MAIN( tst_QSqlResult )
diff --git a/tests/auto/sql/kernel/qsqlthread/CMakeLists.txt b/tests/auto/sql/kernel/qsqlthread/CMakeLists.txt
index 6cdeec3162..98108528e6 100644
--- a/tests/auto/sql/kernel/qsqlthread/CMakeLists.txt
+++ b/tests/auto/sql/kernel/qsqlthread/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsqlthread.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqlthread Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqlthread LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqlthread
SOURCES
tst_qsqlthread.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Sql
Qt::SqlPrivate
diff --git a/tests/auto/sql/kernel/qsqlthread/tst_qsqlthread.cpp b/tests/auto/sql/kernel/qsqlthread/tst_qsqlthread.cpp
index 163e433bd1..0bebb7edd5 100644
--- a/tests/auto/sql/kernel/qsqlthread/tst_qsqlthread.cpp
+++ b/tests/auto/sql/kernel/qsqlthread/tst_qsqlthread.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 <QTest>
@@ -283,18 +258,16 @@ void tst_QSqlThread::generic_data(const QString& engine)
void tst_QSqlThread::dropTestTables()
{
- for (int i = 0; i < dbs.dbNames.count(); ++i) {
- QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i));
- QSqlQuery q(db);
-
- tst_Databases::safeDropTables(db, QStringList() << qtest << qTableName("qtest2", __FILE__, db) << qTableName("emptytable", __FILE__, db));
+ for (const auto &dbName : dbs.dbNames) {
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ tst_Databases::safeDropTables(db, { qtest, qTableName("qtest2", __FILE__, db), qTableName("emptytable", __FILE__, db) });
}
}
void tst_QSqlThread::createTestTables()
{
- for (int i = 0; i < dbs.dbNames.count(); ++i) {
- QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i));
+ for (const auto &dbName : dbs.dbNames) {
+ QSqlDatabase db = QSqlDatabase::database(dbName);
QSqlQuery q(db);
QVERIFY_SQL(q, exec("create table " + qtest
@@ -310,8 +283,8 @@ void tst_QSqlThread::createTestTables()
void tst_QSqlThread::repopulateTestTables()
{
- for (int i = 0; i < dbs.dbNames.count(); ++i) {
- QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i));
+ for (const auto &dbName : dbs.dbNames) {
+ QSqlDatabase db = QSqlDatabase::database(dbName);
QSqlQuery q(db);
QVERIFY_SQL(q, exec("delete from " + qtest));
diff --git a/tests/auto/sql/kernel/qvfssql/CMakeLists.txt b/tests/auto/sql/kernel/qvfssql/CMakeLists.txt
new file mode 100644
index 0000000000..7c66f055a6
--- /dev/null
+++ b/tests/auto/sql/kernel/qvfssql/CMakeLists.txt
@@ -0,0 +1,30 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qsqlfield Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qvfssql LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qvfssql
+ SOURCES
+ tst_qvfssql.cpp
+ LIBRARIES
+ Qt::SqlPrivate
+)
+
+set(qvfssql_resource_files
+ "sample.db"
+)
+
+qt_internal_add_resource(tst_qvfssql "tst_qvfssql"
+ PREFIX
+ "/ro/"
+ FILES
+ ${qvfssql_resource_files}
+)
diff --git a/tests/auto/sql/kernel/qvfssql/sample.db b/tests/auto/sql/kernel/qvfssql/sample.db
new file mode 100644
index 0000000000..56e6427e3c
--- /dev/null
+++ b/tests/auto/sql/kernel/qvfssql/sample.db
Binary files differ
diff --git a/tests/auto/sql/kernel/qvfssql/tst_qvfssql.cpp b/tests/auto/sql/kernel/qvfssql/tst_qvfssql.cpp
new file mode 100644
index 0000000000..0dbdf7e60a
--- /dev/null
+++ b/tests/auto/sql/kernel/qvfssql/tst_qvfssql.cpp
@@ -0,0 +1,94 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+
+#include <qsqldatabase.h>
+#include <qstandardpaths.h>
+
+#include "../qsqldatabase/tst_databases.h"
+
+using namespace Qt::StringLiterals;
+
+class tst_QVfsSql : public QObject
+{
+ Q_OBJECT
+private slots:
+ void testRoDb();
+ void testRwDb();
+};
+
+void tst_QVfsSql::testRoDb()
+{
+ QVERIFY(QSqlDatabase::drivers().contains("QSQLITE"_L1));
+ QSqlDatabase::addDatabase("QSQLITE"_L1, "ro_db"_L1);
+ QSqlDatabase db = QSqlDatabase::database("ro_db"_L1, false);
+ QVERIFY_SQL(db, isValid());
+ db.setDatabaseName(":/ro/sample.db"_L1);
+
+ db.setConnectOptions("QSQLITE_USE_QT_VFS"_L1);
+ QVERIFY(!db.open()); // can not open as the QSQLITE_OPEN_READONLY attribute is missing
+
+ db.setConnectOptions("QSQLITE_USE_QT_VFS;QSQLITE_OPEN_READONLY"_L1);
+ QVERIFY_SQL(db, open());
+
+ QStringList tables = db.tables();
+ QSqlQuery q{db};
+ for (auto table : {"reltest1"_L1, "reltest2"_L1, "reltest3"_L1, "reltest4"_L1, "reltest5"_L1}) {
+ QVERIFY(tables.contains(table));
+ QVERIFY_SQL(q, exec("select * from " + table));
+ QVERIFY(q.next());
+ }
+ QVERIFY_SQL(q, exec("select * from reltest1 where id = 4"_L1));
+ QVERIFY_SQL(q, first());
+ QVERIFY(q.value(0).toInt() == 4);
+ QVERIFY(q.value(1).toString() == "boris"_L1);
+ QVERIFY(q.value(2).toInt() == 2);
+ QVERIFY(q.value(3).toInt() == 2);
+}
+
+void tst_QVfsSql::testRwDb()
+{
+ QSqlDatabase::addDatabase("QSQLITE"_L1, "rw_db"_L1);
+ QSqlDatabase db = QSqlDatabase::database("rw_db"_L1, false);
+ QVERIFY_SQL(db, isValid());
+ const auto dbPath = QStandardPaths::writableLocation(QStandardPaths::TempLocation) + "/test_qt_vfs.db"_L1;
+ db.setDatabaseName(dbPath);
+ QFile::remove(dbPath);
+
+ db.setConnectOptions("QSQLITE_USE_QT_VFS;QSQLITE_OPEN_READONLY"_L1);
+ QVERIFY(!db.open()); // can not open as the QSQLITE_OPEN_READONLY attribute is set and the file is missing
+
+ db.setConnectOptions("QSQLITE_USE_QT_VFS"_L1);
+ QVERIFY_SQL(db, open());
+
+ QVERIFY(db.tables().isEmpty());
+ QSqlQuery q{db};
+ QVERIFY_SQL(q, exec("CREATE TABLE test (id INTEGER PRIMARY KEY AUTOINCREMENT, val INTEGER)"_L1));
+ QVERIFY_SQL(q, exec("BEGIN"_L1));
+ for (int i = 0; i < 1000; ++i) {
+ q.prepare("INSERT INTO test (val) VALUES (:val)"_L1);
+ q.bindValue(":val"_L1, i);
+ QVERIFY_SQL(q, exec());
+ }
+ QVERIFY_SQL(q, exec("COMMIT"_L1));
+ QVERIFY_SQL(q, exec("SELECT val FROM test ORDER BY val"_L1));
+ for (int i = 0; i < 1000; ++i) {
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt() , i);
+ }
+ QVERIFY_SQL(q, exec("DELETE FROM test WHERE val < 500"_L1));
+ auto fileSize = QFileInfo{dbPath}.size();
+ QVERIFY_SQL(q, exec("VACUUM"_L1));
+ QVERIFY(QFileInfo{dbPath}.size() < fileSize); // TEST xTruncate VFS
+ QVERIFY_SQL(q, exec("SELECT val FROM test ORDER BY val"_L1));
+ for (int i = 500; i < 1000; ++i) {
+ QVERIFY_SQL(q, next());
+ QCOMPARE(q.value(0).toInt() , i);
+ }
+ db.close();
+ QFile::remove(dbPath);
+}
+
+QTEST_MAIN(tst_QVfsSql)
+#include "tst_qvfssql.moc"
diff --git a/tests/auto/sql/models/CMakeLists.txt b/tests/auto/sql/models/CMakeLists.txt
index ce44f587de..0ab804abe3 100644
--- a/tests/auto/sql/models/CMakeLists.txt
+++ b/tests/auto/sql/models/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from models.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qsqlrelationaltablemodel)
add_subdirectory(qsqltablemodel)
diff --git a/tests/auto/sql/models/qsqlquerymodel/CMakeLists.txt b/tests/auto/sql/models/qsqlquerymodel/CMakeLists.txt
index e38c51b4be..d148ce43e2 100644
--- a/tests/auto/sql/models/qsqlquerymodel/CMakeLists.txt
+++ b/tests/auto/sql/models/qsqlquerymodel/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsqlquerymodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqlquerymodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqlquerymodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqlquerymodel
SOURCES
tst_qsqlquerymodel.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::Sql
diff --git a/tests/auto/sql/models/qsqlquerymodel/tst_qsqlquerymodel.cpp b/tests/auto/sql/models/qsqlquerymodel/tst_qsqlquerymodel.cpp
index ce65dcf674..a669c72a1e 100644
--- a/tests/auto/sql/models/qsqlquerymodel/tst_qsqlquerymodel.cpp
+++ b/tests/auto/sql/models/qsqlquerymodel/tst_qsqlquerymodel.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 <QTest>
@@ -87,9 +62,9 @@ private slots:
void task_QTBUG_4963_setHeaderDataWithProxyModel();
private:
- void generic_data(const QString &engine=QString());
- void dropTestTables(QSqlDatabase db);
- void createTestTables(QSqlDatabase db);
+ void generic_data(const QString &engine = QString());
+ void dropTestTables(const QSqlDatabase &db);
+ void createTestTables(const QSqlDatabase &db);
void populateTestTables(QSqlDatabase db);
tst_Databases dbs;
};
@@ -98,8 +73,8 @@ private:
class DBTestModel: public QSqlQueryModel
{
public:
- DBTestModel(QObject *parent = nullptr): QSqlQueryModel(parent) {}
- QModelIndex indexInQuery(const QModelIndex &item) const override { return QSqlQueryModel::indexInQuery(item); }
+ using QSqlQueryModel::QSqlQueryModel;
+ using QSqlQueryModel::indexInQuery;
};
tst_QSqlQueryModel::tst_QSqlQueryModel()
@@ -113,8 +88,8 @@ tst_QSqlQueryModel::~tst_QSqlQueryModel()
void tst_QSqlQueryModel::initTestCase()
{
QVERIFY(dbs.open());
- for (QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it) {
- QSqlDatabase db = QSqlDatabase::database((*it));
+ for (const auto &dbName : std::as_const(dbs.dbNames)) {
+ QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
dropTestTables(db); //in case of leftovers
createTestTables(db);
@@ -124,15 +99,15 @@ void tst_QSqlQueryModel::initTestCase()
void tst_QSqlQueryModel::cleanupTestCase()
{
- for (QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it) {
- QSqlDatabase db = QSqlDatabase::database((*it));
+ for (const auto &dbName : std::as_const(dbs.dbNames)) {
+ QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
dropTestTables(db);
}
dbs.close();
}
-void tst_QSqlQueryModel::dropTestTables(QSqlDatabase db)
+void tst_QSqlQueryModel::dropTestTables(const QSqlDatabase &db)
{
QStringList tableNames;
tableNames << qTableName("test", __FILE__, db)
@@ -142,7 +117,7 @@ void tst_QSqlQueryModel::dropTestTables(QSqlDatabase db)
tst_Databases::safeDropTables(db, tableNames);
}
-void tst_QSqlQueryModel::createTestTables(QSqlDatabase db)
+void tst_QSqlQueryModel::createTestTables(const QSqlDatabase &db)
{
dropTestTables(db);
QSqlQuery q(db);
@@ -227,7 +202,7 @@ void tst_QSqlQueryModel::removeColumn()
QCOMPARE(model.columnCount(), 3);
QVERIFY(model.removeColumn(0));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(*(QModelIndex *)spy.at(0).at(0).constData() == QModelIndex());
QCOMPARE(spy.at(0).at(1).toInt(), 0);
QCOMPARE(spy.at(0).at(2).toInt(), 0);
@@ -257,7 +232,7 @@ void tst_QSqlQueryModel::removeColumn()
QVERIFY(model.removeColumn(2));
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QVERIFY(*(QModelIndex *)spy.at(1).at(0).constData() == QModelIndex());
QCOMPARE(spy.at(1).at(1).toInt(), 2);
QCOMPARE(spy.at(1).at(2).toInt(), 2);
@@ -270,7 +245,7 @@ void tst_QSqlQueryModel::removeColumn()
QVERIFY(model.removeColumn(1));
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
QVERIFY(*(QModelIndex *)spy.at(2).at(0).constData() == QModelIndex());
QCOMPARE(spy.at(2).at(1).toInt(), 1);
QCOMPARE(spy.at(2).at(2).toInt(), 1);
@@ -284,7 +259,7 @@ void tst_QSqlQueryModel::removeColumn()
QVERIFY(model.removeColumn(0));
- QCOMPARE(spy.count(), 4);
+ QCOMPARE(spy.size(), 4);
QVERIFY(*(QModelIndex *)spy.at(3).at(0).constData() == QModelIndex());
QCOMPARE(spy.at(3).at(1).toInt(), 0);
QCOMPARE(spy.at(3).at(2).toInt(), 0);
@@ -326,7 +301,7 @@ void tst_QSqlQueryModel::insertColumn()
QVERIFY(model.insertColumn(1));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(*(QModelIndex *)spy.at(0).at(0).constData() == QModelIndex());
QCOMPARE(spy.at(0).at(1).toInt(), 1);
QCOMPARE(spy.at(0).at(2).toInt(), 1);
@@ -355,7 +330,7 @@ void tst_QSqlQueryModel::insertColumn()
QVERIFY(model.insertColumn(0));
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QVERIFY(*(QModelIndex *)spy.at(1).at(0).constData() == QModelIndex());
QCOMPARE(spy.at(1).at(1).toInt(), 0);
QCOMPARE(spy.at(1).at(2).toInt(), 0);
@@ -370,7 +345,7 @@ void tst_QSqlQueryModel::insertColumn()
QVERIFY(!model.insertColumn(6));
QVERIFY(model.insertColumn(5));
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
QVERIFY(*(QModelIndex *)spy.at(2).at(0).constData() == QModelIndex());
QCOMPARE(spy.at(2).at(1).toInt(), 5);
QCOMPARE(spy.at(2).at(2).toInt(), 5);
@@ -449,7 +424,7 @@ void tst_QSqlQueryModel::setHeaderData()
QSignalSpy spy(&model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)));
QVERIFY(model.setHeaderData(2, Qt::Horizontal, "bar"));
QCOMPARE(model.headerData(2, Qt::Horizontal).toString(), QString("bar"));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(qvariant_cast<Qt::Orientation>(spy.value(0).value(0)), Qt::Horizontal);
QCOMPARE(spy.value(0).value(1).toInt(), 2);
QCOMPARE(spy.value(0).value(2).toInt(), 2);
@@ -477,8 +452,8 @@ void tst_QSqlQueryModel::fetchMore()
model.setQuery(QSqlQuery("select * from " + qTableName("many", __FILE__, db), db));
int rowCount = model.rowCount();
- QCOMPARE(modelAboutToBeResetSpy.count(), 1);
- QCOMPARE(modelResetSpy.count(), 1);
+ QCOMPARE(modelAboutToBeResetSpy.size(), 1);
+ QCOMPARE(modelResetSpy.size(), 1);
// If the driver doesn't return the query size fetchMore() causes the
// model to grow and new signals are emitted
@@ -524,11 +499,11 @@ void tst_QSqlQueryModel::withSortFilterProxyModel()
QCOMPARE(proxy.rowCount(), 511);
// setQuery() resets the model accompanied by begin and end signals
- QCOMPARE(modelAboutToBeResetSpy.count(), 1);
- QCOMPARE(modelResetSpy.count(), 1);
+ QCOMPARE(modelAboutToBeResetSpy.size(), 1);
+ QCOMPARE(modelResetSpy.size(), 1);
// The call to scrollToBottom() forces the model to fetch additional rows.
- QCOMPARE(modelRowsInsertedSpy.count(), 1);
+ QCOMPARE(modelRowsInsertedSpy.size(), 1);
QCOMPARE(modelRowsInsertedSpy.value(0).value(1).toInt(), 256);
QCOMPARE(modelRowsInsertedSpy.value(0).value(2).toInt(), 510);
}
@@ -548,14 +523,14 @@ void tst_QSqlQueryModel::setQuerySignalEmission()
// First select, the model was empty and no rows had to be removed, but model resets anyway.
model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test", __FILE__, db), db));
- QCOMPARE(modelAboutToBeResetSpy.count(), 1);
- QCOMPARE(modelResetSpy.count(), 1);
+ QCOMPARE(modelAboutToBeResetSpy.size(), 1);
+ QCOMPARE(modelResetSpy.size(), 1);
// Second select, the model wasn't empty and two rows had to be removed!
// setQuery() resets the model accompanied by begin and end signals
model.setQuery(QSqlQuery("SELECT * FROM " + qTableName("test", __FILE__, db), db));
- QCOMPARE(modelAboutToBeResetSpy.count(), 2);
- QCOMPARE(modelResetSpy.count(), 2);
+ QCOMPARE(modelAboutToBeResetSpy.size(), 2);
+ QCOMPARE(modelResetSpy.size(), 2);
}
// For task 170783: When the query's result set is empty no rows should be inserted,
@@ -574,8 +549,8 @@ void tst_QSqlQueryModel::setQueryWithNoRowsInResultSet()
QSqlQuery query(db);
QVERIFY_SQL(query, exec("SELECT * FROM " + qTableName("test", __FILE__, db) + " where 0 = 1"));
model.setQuery(std::move(query));
- QCOMPARE(modelRowsAboutToBeInsertedSpy.count(), 0);
- QCOMPARE(modelRowsInsertedSpy.count(), 0);
+ QCOMPARE(modelRowsAboutToBeInsertedSpy.size(), 0);
+ QCOMPARE(modelRowsInsertedSpy.size(), 0);
}
class NestedResetsTest: public QSqlQueryModel
diff --git a/tests/auto/sql/models/qsqlrelationaldelegate/CMakeLists.txt b/tests/auto/sql/models/qsqlrelationaldelegate/CMakeLists.txt
index b76a3f7b9c..ea2dc6131d 100644
--- a/tests/auto/sql/models/qsqlrelationaldelegate/CMakeLists.txt
+++ b/tests/auto/sql/models/qsqlrelationaldelegate/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsqlrelationaldelegate.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqlrelationaldelegate Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqlrelationaldelegate LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqlrelationaldelegate
SOURCES
tst_qsqlrelationaldelegate.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Sql
Qt::SqlPrivate
diff --git a/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp b/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp
index f0a8006b79..5977689ab6 100644
--- a/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp
+++ b/tests/auto/sql/models/qsqlrelationaldelegate/tst_qsqlrelationaldelegate.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -102,16 +77,17 @@ void tst_QSqlRelationalDelegate::recreateTestTables(QSqlDatabase db)
void tst_QSqlRelationalDelegate::initTestCase()
{
- foreach (const QString &dbname, dbs.dbNames) {
- QSqlDatabase db=QSqlDatabase::database(dbname);
+ for (const QString &dbName : std::as_const(dbs.dbNames)) {
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ QSqlQuery q(db);
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType == QSqlDriver::Interbase) {
- db.exec("SET DIALECT 3");
+ q.exec("SET DIALECT 3");
} else if (dbType == QSqlDriver::MSSqlServer) {
- db.exec("SET ANSI_DEFAULTS ON");
- db.exec("SET IMPLICIT_TRANSACTIONS OFF");
+ q.exec("SET ANSI_DEFAULTS ON");
+ q.exec("SET IMPLICIT_TRANSACTIONS OFF");
} else if (dbType == QSqlDriver::PostgreSQL) {
- db.exec("set client_min_messages='warning'");
+ q.exec("set client_min_messages='warning'");
}
recreateTestTables(db);
}
@@ -119,7 +95,7 @@ void tst_QSqlRelationalDelegate::initTestCase()
void tst_QSqlRelationalDelegate::cleanupTestCase()
{
- foreach (const QString &dbName, dbs.dbNames) {
+ for (const QString &dbName : std::as_const(dbs.dbNames)) {
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
dropTestTables(QSqlDatabase::database(dbName));
@@ -171,7 +147,7 @@ void tst_QSqlRelationalDelegate::comboBoxEditor()
tv.setCurrentIndex(index);
tv.edit(index);
QList<QComboBox*> comboBoxes = tv.viewport()->findChildren<QComboBox *>();
- QCOMPARE(comboBoxes.count(), 1);
+ QCOMPARE(comboBoxes.size(), 1);
QComboBox *editor = comboBoxes.at(0);
QCOMPARE(editor->currentText(), "herr");
diff --git a/tests/auto/sql/models/qsqlrelationaltablemodel/CMakeLists.txt b/tests/auto/sql/models/qsqlrelationaltablemodel/CMakeLists.txt
index 736412731e..dc85845987 100644
--- a/tests/auto/sql/models/qsqlrelationaltablemodel/CMakeLists.txt
+++ b/tests/auto/sql/models/qsqlrelationaltablemodel/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsqlrelationaltablemodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqlrelationaltablemodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqlrelationaltablemodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqlrelationaltablemodel
SOURCES
tst_qsqlrelationaltablemodel.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Sql
Qt::SqlPrivate
diff --git a/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp b/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
index 89d975422a..5e3643ec8e 100644
--- a/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.cpp
+++ b/tests/auto/sql/models/qsqlrelationaltablemodel/tst_qsqlrelationaltablemodel.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 <QTest>
@@ -32,21 +7,12 @@
#include "../../kernel/qsqldatabase/tst_databases.h"
-QString reltest1;
-QString reltest2;
-QString reltest3;
-QString reltest4;
-QString reltest5;
-
class tst_QSqlRelationalTableModel : public QObject
{
Q_OBJECT
public:
- void recreateTestTables(QSqlDatabase);
- tst_QSqlRelationalTableModel();
-
- tst_Databases dbs;
+ using QObject::QObject;
public slots:
void initTestCase_data();
@@ -81,25 +47,43 @@ private slots:
void setRelation();
private:
- void dropTestTables( QSqlDatabase db );
+ void fixupTableNamesForDb(const QSqlDatabase &db);
+ void recreateTestTables(const QSqlDatabase &db);
+ void dropTestTables(const QSqlDatabase &db);
+ static QString escapeTableName(const QSqlDatabase &db, const QString &name)
+ {
+ QString _name = name;
+ const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType == QSqlDriver::Oracle ||
+ dbType == QSqlDriver::DB2)
+ _name = name.toUpper();
+ return db.driver()->escapeIdentifier(_name, QSqlDriver::TableName);
+ }
+ static QString escapeFieldName(const QSqlDatabase &db, const QString &name)
+ {
+ QString _name = name;
+ const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
+ if (dbType == QSqlDriver::Interbase ||
+ dbType == QSqlDriver::Oracle ||
+ dbType == QSqlDriver::DB2)
+ _name = name.toUpper();
+ return db.driver()->escapeIdentifier(_name, QSqlDriver::FieldName);
+ }
+ QString reltest1;
+ QString reltest2;
+ QString reltest3;
+ QString reltest4;
+ QString reltest5;
+ tst_Databases dbs;
};
-tst_QSqlRelationalTableModel::tst_QSqlRelationalTableModel()
+void tst_QSqlRelationalTableModel::fixupTableNamesForDb(const QSqlDatabase &db)
{
- static QSqlDatabase static_qtest_db_1 = QSqlDatabase();
- reltest1 = qTableName("reltest1", __FILE__, static_qtest_db_1);
-
- static QSqlDatabase static_qtest_db_2 = QSqlDatabase();
- reltest2 = qTableName("reltest2", __FILE__, static_qtest_db_2);
-
- static QSqlDatabase static_qtest_db_3 = QSqlDatabase();
- reltest3 = qTableName("reltest3", __FILE__, static_qtest_db_3);
-
- static QSqlDatabase static_qtest_db_4 = QSqlDatabase();
- reltest4 = qTableName("reltest4", __FILE__, static_qtest_db_4);
-
- static QSqlDatabase static_qtest_db_5 = QSqlDatabase();
- reltest5 = qTableName("reltest5", __FILE__, static_qtest_db_5);
+ reltest1 = qTableName("reltest1", __FILE__, db);
+ reltest2 = qTableName("reltest2", __FILE__, db);
+ reltest3 = qTableName("reltest3", __FILE__, db);
+ reltest4 = qTableName("reltest4", __FILE__, db);
+ reltest5 = qTableName("reltest5", __FILE__, db);
}
void tst_QSqlRelationalTableModel::initTestCase_data()
@@ -109,7 +93,7 @@ void tst_QSqlRelationalTableModel::initTestCase_data()
QSKIP("No database drivers are available in this Qt configuration");
}
-void tst_QSqlRelationalTableModel::recreateTestTables(QSqlDatabase db)
+void tst_QSqlRelationalTableModel::recreateTestTables(const QSqlDatabase &db)
{
dropTestTables(db);
@@ -139,32 +123,36 @@ void tst_QSqlRelationalTableModel::recreateTestTables(QSqlDatabase db)
QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('herr', 'Hr')"));
QVERIFY_SQL( q, exec("insert into " + reltest5 + " values('mister', 'Mr')"));
- if (testWhiteSpaceNames(db.driverName())) {
- const auto reltest6 = qTableName("rel test6", __FILE__, db);
- QVERIFY_SQL( q, exec("create table " + reltest6 + " (id int not null primary key, " + db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName) +
- " int, " + db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName) + " int)"));
- QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(1, 1,9)"));
- QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(2, 2,8)"));
-
- const auto reltest7 = qTableName("rel test7", __FILE__, db);
- QVERIFY_SQL( q, exec("create table " + reltest7 + " (" + db.driver()->escapeIdentifier("city id", QSqlDriver::TableName) + " int not null primary key, " + db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName) + " varchar(20))"));
- QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(1, 'New York')"));
- QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(2, 'Washington')"));
- }
+ const auto reltest6 = qTableName("rel test6", __FILE__, db);
+ const auto cityKeyStr = db.driver()->escapeIdentifier("city key", QSqlDriver::FieldName);
+ const auto extraFieldStr = db.driver()->escapeIdentifier("extra field", QSqlDriver::FieldName);
+ QVERIFY_SQL( q, exec("create table " + reltest6 + " (id int not null primary key, " + cityKeyStr +
+ " int, " + extraFieldStr + " int)"));
+ QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(1, 1,9)"));
+ QVERIFY_SQL( q, exec("insert into " + reltest6 + " values(2, 2,8)"));
+
+ const auto reltest7 = qTableName("rel test7", __FILE__, db);
+ const auto cityIdStr = db.driver()->escapeIdentifier("city id", QSqlDriver::TableName);
+ const auto cityNameStr = db.driver()->escapeIdentifier("city name", QSqlDriver::FieldName);
+ QVERIFY_SQL( q, exec("create table " + reltest7 + " (" + cityIdStr + " int not null primary key, " +
+ cityNameStr + " varchar(20))"));
+ QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(1, 'New York')"));
+ QVERIFY_SQL( q, exec("insert into " + reltest7 + " values(2, 'Washington')"));
}
void tst_QSqlRelationalTableModel::initTestCase()
{
- foreach (const QString &dbname, dbs.dbNames) {
- QSqlDatabase db=QSqlDatabase::database(dbname);
+ for (const QString &dbName : std::as_const(dbs.dbNames)) {
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ QSqlQuery q(db);
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType == QSqlDriver::Interbase) {
- db.exec("SET DIALECT 3");
+ q.exec("SET DIALECT 3");
} else if (dbType == QSqlDriver::MSSqlServer) {
- db.exec("SET ANSI_DEFAULTS ON");
- db.exec("SET IMPLICIT_TRANSACTIONS OFF");
+ q.exec("SET ANSI_DEFAULTS ON");
+ q.exec("SET IMPLICIT_TRANSACTIONS OFF");
} else if (dbType == QSqlDriver::PostgreSQL) {
- db.exec("set client_min_messages='warning'");
+ q.exec("set client_min_messages='warning'");
}
recreateTestTables(db);
}
@@ -172,30 +160,27 @@ void tst_QSqlRelationalTableModel::initTestCase()
void tst_QSqlRelationalTableModel::cleanupTestCase()
{
- foreach (const QString &dbName, dbs.dbNames) {
+ for (const QString &dbName : std::as_const(dbs.dbNames)) {
QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE( db );
- dropTestTables( QSqlDatabase::database(dbName) );
+ CHECK_DATABASE(db);
+ dropTestTables(db);
}
dbs.close();
}
-void tst_QSqlRelationalTableModel::dropTestTables( QSqlDatabase db )
+void tst_QSqlRelationalTableModel::dropTestTables(const QSqlDatabase &db)
{
- QStringList tableNames;
- tableNames << reltest1
- << reltest2
- << reltest3
- << reltest4
- << reltest5
- << qTableName("rel test6", __FILE__, db)
- << qTableName("rel test7", __FILE__, db)
- << qTableName("CASETEST1", db)
- << qTableName("casetest1", db);
+ fixupTableNamesForDb(db);
+ QStringList tableNames{reltest1, reltest2, reltest3, reltest4, reltest5,
+ qTableName("rel test6", __FILE__, db),
+ qTableName("rel test7", __FILE__, db),
+ qTableName("CASETEST1", __FILE__, db),
+ qTableName("casetest1", __FILE__, db)};
tst_Databases::safeDropTables( db, tableNames );
- db.exec("DROP SCHEMA " + qTableName("QTBUG_5373", __FILE__, db) + " CASCADE");
- db.exec("DROP SCHEMA " + qTableName("QTBUG_5373_s2", __FILE__, db) + " CASCADE");
+ QSqlQuery q(db);
+ q.exec("DROP SCHEMA " + qTableName("QTBUG_5373", __FILE__, db) + " CASCADE");
+ q.exec("DROP SCHEMA " + qTableName("QTBUG_5373_s2", __FILE__, db) + " CASCADE");
}
void tst_QSqlRelationalTableModel::init()
@@ -211,6 +196,7 @@ void tst_QSqlRelationalTableModel::data()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
QSqlRelationalTableModel model(0, db);
@@ -252,6 +238,7 @@ void tst_QSqlRelationalTableModel::setData()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
// set the values using OnRowChange Strategy
@@ -459,6 +446,7 @@ void tst_QSqlRelationalTableModel::insertRecord()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
QSqlRelationalTableModel model(0, db);
@@ -569,6 +557,7 @@ void tst_QSqlRelationalTableModel::insertWithStrategies()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
QSqlRelationalTableModel model(0, db);
@@ -677,56 +666,33 @@ void tst_QSqlRelationalTableModel::removeColumn()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- recreateTestTables(db);
- QSqlRelationalTableModel model(0, db);
-
- model.setTable(reltest1);
- model.setRelation(2, QSqlRelation(reltest2, "id", "title"));
- QVERIFY_SQL(model, select());
-
- QVERIFY_SQL(model, removeColumn(3));
- QVERIFY_SQL(model, select());
-
- QCOMPARE(model.columnCount(), 3);
-
- QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
- QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
- QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
- QCOMPARE(model.data(model.index(0, 3)), QVariant());
-
- // try removing more than one column
- QVERIFY_SQL(model, removeColumns(1, 2));
- QCOMPARE(model.columnCount(), 1);
- QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
- QCOMPARE(model.data(model.index(0, 1)), QVariant());
-
- // try in LeftJoin mode the same tests
- CHECK_DATABASE(db);
- recreateTestTables(db);
+ for (const auto mode : {QSqlRelationalTableModel::InnerJoin, QSqlRelationalTableModel::LeftJoin}) {
+ recreateTestTables(db);
- QSqlRelationalTableModel lmodel(0, db);
+ QSqlRelationalTableModel model(0, db);
- lmodel.setTable(reltest1);
- lmodel.setRelation(2, QSqlRelation(reltest2, "id", "title"));
- lmodel.setJoinMode(QSqlRelationalTableModel::LeftJoin);
- QVERIFY_SQL(lmodel, select());
+ model.setTable(reltest1);
+ model.setRelation(2, QSqlRelation(reltest2, "id", "title"));
+ model.setJoinMode(mode);
+ QVERIFY_SQL(model, select());
- QVERIFY_SQL(lmodel, removeColumn(3));
- QVERIFY_SQL(lmodel, select());
+ QVERIFY_SQL(model, removeColumn(3));
+ QVERIFY_SQL(model, select());
- QCOMPARE(lmodel.columnCount(), 3);
+ QCOMPARE(model.columnCount(), 3);
- QCOMPARE(lmodel.data(lmodel.index(0, 0)).toInt(), 1);
- QCOMPARE(lmodel.data(lmodel.index(0, 1)).toString(), QString("harry"));
- QCOMPARE(lmodel.data(lmodel.index(0, 2)).toString(), QString("herr"));
- QCOMPARE(lmodel.data(lmodel.index(0, 3)), QVariant());
+ QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
+ QCOMPARE(model.data(model.index(0, 1)).toString(), QString("harry"));
+ QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
+ QCOMPARE(model.data(model.index(0, 3)), QVariant());
- // try removing more than one column
- QVERIFY_SQL(lmodel, removeColumns(1, 2));
- QCOMPARE(lmodel.columnCount(), 1);
- QCOMPARE(lmodel.data(lmodel.index(0, 0)).toInt(), 1);
- QCOMPARE(lmodel.data(lmodel.index(0, 1)), QVariant());
+ // try removing more than one column
+ QVERIFY_SQL(model, removeColumns(1, 2));
+ QCOMPARE(model.columnCount(), 1);
+ QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
+ QCOMPARE(model.data(model.index(0, 1)), QVariant());
+ }
}
void tst_QSqlRelationalTableModel::filter()
@@ -761,6 +727,7 @@ void tst_QSqlRelationalTableModel::sort()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
QSqlRelationalTableModel model(0, db);
@@ -806,7 +773,7 @@ void tst_QSqlRelationalTableModel::sort()
QStringList stringsInDatabaseOrder;
// PostgreSQL puts the null ones (from the table with the original value) first in descending order
// which translate to empty strings in the related table
- if (dbType == QSqlDriver::PostgreSQL)
+ if (dbType == QSqlDriver::PostgreSQL || dbType == QSqlDriver::MimerSQL)
stringsInDatabaseOrder << "" << "" << "mister" << "mister" << "herr" << "herr";
else
stringsInDatabaseOrder << "mister" << "mister" << "herr" << "herr" << "" << "";
@@ -819,7 +786,7 @@ void tst_QSqlRelationalTableModel::sort()
// PostgreSQL puts the null ones (from the table with the original value) first in descending order
// which translate to empty strings in the related table
stringsInDatabaseOrder.clear();
- if (dbType == QSqlDriver::PostgreSQL)
+ if (dbType == QSqlDriver::PostgreSQL || dbType == QSqlDriver::MimerSQL)
stringsInDatabaseOrder << "herr" << "mister" << "mister" << "mister" << "mister" << "";
else if (dbType != QSqlDriver::Sybase)
stringsInDatabaseOrder << "" << "herr" << "mister" << "mister" << "mister" << "mister";
@@ -898,6 +865,7 @@ void tst_QSqlRelationalTableModel::revert()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
QSqlRelationalTableModel model(0, db);
@@ -935,6 +903,7 @@ void tst_QSqlRelationalTableModel::clearDisplayValuesCache()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
QSqlRelationalTableModel model(0, db);
@@ -989,6 +958,7 @@ void tst_QSqlRelationalTableModel::insertRecordDuplicateFieldNames()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
QSqlRelationalTableModel model(0, db);
@@ -1000,13 +970,12 @@ void tst_QSqlRelationalTableModel::insertRecordDuplicateFieldNames()
model.setRelation(2, QSqlRelation(reltest4, "id", "name"));
QVERIFY_SQL(model, select());
- if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2) {
- QCOMPARE(model.record(1).value((reltest4+QLatin1String("_name_2")).toUpper()).toString(),
- QString("Trondheim"));
- } else {
- QCOMPARE(model.record(1).value((reltest4+QLatin1String("_name_2"))).toString(),
- QString("Trondheim"));
- }
+ QString reltest4Unescaped = qTableName("reltest4", __FILE__, db, false);
+ QString fieldName = reltest4Unescaped + QLatin1String("_name_2");
+ if (dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2)
+ fieldName = fieldName.toUpper();
+ fieldName.truncate(db.driver()->maximumIdentifierLength(QSqlDriver::TableName));
+ QCOMPARE(model.record(1).value(fieldName).toString(), QLatin1String("Trondheim"));
QSqlRecord rec = model.record();
rec.setValue(0, 3);
@@ -1022,10 +991,7 @@ void tst_QSqlRelationalTableModel::insertRecordDuplicateFieldNames()
}
// The duplicate field names is aliased because it's comes from the relation's display column.
- if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2)
- QCOMPARE(rec.fieldName(2), (reltest4+QLatin1String("_name_2")).toUpper());
- else
- QCOMPARE(rec.fieldName(2), reltest4+QLatin1String("_name_2"));
+ QCOMPARE(rec.fieldName(2), fieldName);
QVERIFY(model.insertRecord(-1, rec));
QCOMPARE(model.data(model.index(2, 2)).toString(), QString("Oslo"));
@@ -1038,6 +1004,7 @@ void tst_QSqlRelationalTableModel::invalidData()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
QSqlRelationalTableModel model(0, db);
model.setTable(reltest1);
@@ -1068,6 +1035,7 @@ void tst_QSqlRelationalTableModel::relationModel()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
QSqlRelationalTableModel model(0, db);
model.setTable(reltest1);
@@ -1111,60 +1079,64 @@ void tst_QSqlRelationalTableModel::casing()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::SQLite || dbType == QSqlDriver::MSSqlServer)
+ if (dbType == QSqlDriver::SQLite || dbType == QSqlDriver::MSSqlServer)
QSKIP("The casing test for this database is irrelevant since this database does not treat different cases as separate entities");
QSqlQuery q(db);
- QVERIFY_SQL( q, exec("create table " + qTableName("CASETEST1", db).toUpper() +
+ const QString caseTestUpper = qTableName("CASETEST1", __FILE__, db).toUpper();
+ const QString caseTestLower = qTableName("casetest1", __FILE__, db);
+ tst_Databases::safeDropTables(db, {caseTestUpper, caseTestLower});
+ QVERIFY_SQL( q, exec("create table " + caseTestUpper +
" (id int not null primary key, name varchar(20), title_key int, another_title_key int)"));
- if (!q.exec("create table " + qTableName("casetest1", db) +
+ if (!q.exec("create table " + caseTestLower +
" (ident int not null primary key, name varchar(20), title_key int)"))
QSKIP("The casing test for this database is irrelevant since this database does not treat different cases as separate entities");
- QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db).toUpper() + " values(1, 'harry', 1, 2)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db).toUpper() + " values(2, 'trond', 2, 1)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db).toUpper() + " values(3, 'vohi', 1, 2)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("CASETEST1", db).toUpper() + " values(4, 'boris', 2, 2)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("casetest1", db) + " values(1, 'jerry', 1)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("casetest1", db) + " values(2, 'george', 2)"));
- QVERIFY_SQL( q, exec("insert into " + qTableName("casetest1", db) + " values(4, 'kramer', 2)"));
+ QVERIFY_SQL( q, exec("insert into " + caseTestUpper + " values(1, 'harry', 1, 2)"));
+ QVERIFY_SQL( q, exec("insert into " + caseTestUpper + " values(2, 'trond', 2, 1)"));
+ QVERIFY_SQL( q, exec("insert into " + caseTestUpper + " values(3, 'vohi', 1, 2)"));
+ QVERIFY_SQL( q, exec("insert into " + caseTestUpper + " values(4, 'boris', 2, 2)"));
+ QVERIFY_SQL( q, exec("insert into " + caseTestLower + " values(1, 'jerry', 1)"));
+ QVERIFY_SQL( q, exec("insert into " + caseTestLower + " values(2, 'george', 2)"));
+ QVERIFY_SQL( q, exec("insert into " + caseTestLower + " values(4, 'kramer', 2)"));
if (dbType == QSqlDriver::Oracle) {
//try an owner that doesn't exist
- QSqlRecord rec = db.driver()->record("doug." + qTableName("CASETEST1", db).toUpper());
+ QSqlRecord rec = db.driver()->record("doug." + caseTestUpper);
QCOMPARE( rec.count(), 0);
//try an owner that does exist
- rec = db.driver()->record(db.userName() + QLatin1Char('.') + qTableName("CASETEST1", db).toUpper());
+ rec = db.driver()->record(db.userName() + QLatin1Char('.') + caseTestUpper);
QCOMPARE( rec.count(), 4);
}
- QSqlRecord rec = db.driver()->record(qTableName("CASETEST1", db).toUpper());
+ QSqlRecord rec = db.driver()->record(caseTestUpper);
QCOMPARE( rec.count(), 4);
- rec = db.driver()->record(qTableName("casetest1", db));
+ rec = db.driver()->record(caseTestLower);
QCOMPARE( rec.count(), 3);
QSqlTableModel upperCaseModel(0, db);
- upperCaseModel.setTable(qTableName("CASETEST1", db).toUpper());
+ upperCaseModel.setTable(caseTestUpper);
- QCOMPARE(upperCaseModel.tableName(), qTableName("CASETEST1", db).toUpper());
+ QCOMPARE(upperCaseModel.tableName(), caseTestUpper);
QVERIFY_SQL(upperCaseModel, select());
QCOMPARE(upperCaseModel.rowCount(), 4);
QSqlTableModel lowerCaseModel(0, db);
- lowerCaseModel.setTable(qTableName("casetest1", db));
- QCOMPARE(lowerCaseModel.tableName(), qTableName("casetest1", db));
+ lowerCaseModel.setTable(caseTestLower);
+ QCOMPARE(lowerCaseModel.tableName(), caseTestLower);
QVERIFY_SQL(lowerCaseModel, select());
QCOMPARE(lowerCaseModel.rowCount(), 3);
QSqlRelationalTableModel model(0, db);
- model.setTable(qTableName("CASETEST1", db).toUpper());
+ model.setTable(caseTestUpper);
model.setRelation(2, QSqlRelation(reltest2, "id", "title"));
QVERIFY_SQL(model, select());
@@ -1178,7 +1150,7 @@ void tst_QSqlRelationalTableModel::escapedRelations()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
+ fixupTableNamesForDb(db);
recreateTestTables(db);
@@ -1186,16 +1158,7 @@ void tst_QSqlRelationalTableModel::escapedRelations()
model.setTable(reltest1);
//try with relation table name quoted
- if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2) {
- model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(reltest2.toUpper(),QSqlDriver::TableName),
- "id",
- "title"));
- } else {
- model.setRelation(2, QSqlRelation(db.driver()->escapeIdentifier(reltest2,QSqlDriver::TableName),
- "id",
- "title"));
-
- }
+ model.setRelation(2, QSqlRelation(escapeTableName(db, reltest2), "id", "title"));
QVERIFY_SQL(model, select());
QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
@@ -1210,16 +1173,8 @@ void tst_QSqlRelationalTableModel::escapedRelations()
QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
//try with index column quoted
+ model.setRelation(2, QSqlRelation(reltest2, escapeFieldName(db, "id"), "title"));
model.setJoinMode(QSqlRelationalTableModel::InnerJoin);
- if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2) {
- model.setRelation(2, QSqlRelation(reltest2,
- db.driver()->escapeIdentifier("id", QSqlDriver::FieldName).toUpper(),
- "title"));
- } else {
- model.setRelation(2, QSqlRelation(reltest2,
- db.driver()->escapeIdentifier("id", QSqlDriver::FieldName),
- "title"));
- }
QVERIFY_SQL(model, select());
QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
@@ -1234,18 +1189,8 @@ void tst_QSqlRelationalTableModel::escapedRelations()
QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
//try with display column quoted
+ model.setRelation(2, QSqlRelation(reltest2, "id", escapeFieldName(db, "title")));
model.setJoinMode(QSqlRelationalTableModel::InnerJoin);
- if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2) {
-
- model.setRelation(2, QSqlRelation(reltest2,
- "id",
- db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper()));
- } else {
- model.setRelation(2, QSqlRelation(reltest2,
- "id",
- db.driver()->escapeIdentifier("title", QSqlDriver::FieldName)));
- }
-
QVERIFY_SQL(model, select());
QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
@@ -1260,16 +1205,10 @@ void tst_QSqlRelationalTableModel::escapedRelations()
QCOMPARE(model.data(model.index(0, 2)).toString(), QString("herr"));
//try with tablename and index and display columns quoted in the relation
+ model.setRelation(2, QSqlRelation(escapeTableName(db, reltest2),
+ escapeFieldName(db, "id"),
+ escapeFieldName(db, "title")));
model.setJoinMode(QSqlRelationalTableModel::InnerJoin);
- if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2) {
- model.setRelation(2, QSqlRelation(reltest2,
- "id",
- db.driver()->escapeIdentifier("title", QSqlDriver::FieldName).toUpper()));
- } else {
- model.setRelation(2, QSqlRelation(reltest2,
- "id",
- db.driver()->escapeIdentifier("title", QSqlDriver::FieldName)));
- }
QVERIFY_SQL(model, select());
QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
@@ -1289,17 +1228,13 @@ void tst_QSqlRelationalTableModel::escapedTableName()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
+ fixupTableNamesForDb(db);
// set the values using OnRowChange Strategy with an escaped tablename
{
QSqlRelationalTableModel model(0, db);
- if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2) {
- model.setTable(db.driver()->escapeIdentifier(reltest1.toUpper(), QSqlDriver::TableName));
- } else {
- model.setTable(db.driver()->escapeIdentifier(reltest1, QSqlDriver::TableName));
- }
+ model.setTable(escapeTableName(db, reltest1));
model.setSort(0, Qt::AscendingOrder);
model.setRelation(2, QSqlRelation(reltest2, "id", "title"));
QVERIFY_SQL(model, select());
@@ -1342,11 +1277,7 @@ void tst_QSqlRelationalTableModel::escapedTableName()
{
QSqlRelationalTableModel model(0, db);
- if (dbType == QSqlDriver::Interbase || dbType == QSqlDriver::Oracle || dbType == QSqlDriver::DB2) {
- model.setTable(db.driver()->escapeIdentifier(reltest1.toUpper(), QSqlDriver::TableName));
- } else {
- model.setTable(db.driver()->escapeIdentifier(reltest1, QSqlDriver::TableName));
- }
+ model.setTable(escapeTableName(db, reltest1));
model.setSort(0, Qt::AscendingOrder);
model.setRelation(2, QSqlRelation(reltest2, "id", "title"));
model.setJoinMode(QSqlRelationalTableModel::LeftJoin);
@@ -1393,9 +1324,8 @@ void tst_QSqlRelationalTableModel::whiteSpaceInIdentifiers()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
- if (!testWhiteSpaceNames(db.driverName()))
- QSKIP("White space test irrelevant for driver");
QSqlRelationalTableModel model(0, db);
model.setTable(qTableName("rel test6", __FILE__, db));
model.setSort(0, Qt::DescendingOrder);
@@ -1478,6 +1408,7 @@ void tst_QSqlRelationalTableModel::psqlSchemaTest()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
if (dbType != QSqlDriver::PostgreSQL)
@@ -1505,6 +1436,7 @@ void tst_QSqlRelationalTableModel::selectAfterUpdate()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
QSqlRelationalTableModel model(0, db);
model.setTable(reltest1);
@@ -1530,6 +1462,7 @@ void tst_QSqlRelationalTableModel::relationOnFirstColumn()
QFETCH_GLOBAL(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
+ fixupTableNamesForDb(db);
QString testTable1 = qTableName("QTBUG_20038_test1", __FILE__, db);
QString testTable2 = qTableName("QTBUG_20038_test2", __FILE__, db);
@@ -1544,7 +1477,14 @@ void tst_QSqlRelationalTableModel::relationOnFirstColumn()
QVERIFY_SQL(q, exec("INSERT INTO " + testTable1 + " (id1, val1) VALUES(3, 30);"));
//prepare test2 table
- QVERIFY_SQL(q, exec("CREATE TABLE " + testTable2 + " (id INTEGER PRIMARY KEY, name TEXT);"));
+ if (tst_Databases::getDatabaseType(db) == QSqlDriver::MimerSQL) {
+ QVERIFY_SQL(q,
+ exec("CREATE TABLE " + testTable2
+ + " (id INTEGER PRIMARY KEY, name NVARCHAR(100));"));
+ } else {
+ QVERIFY_SQL(q,
+ exec("CREATE TABLE " + testTable2 + " (id INTEGER PRIMARY KEY, name VARCHAR(100));"));
+ }
QVERIFY_SQL(q, exec("DELETE FROM " + testTable2 + QLatin1Char(';')));
QVERIFY_SQL(q, exec("INSERT INTO " + testTable2 + " (id, name) VALUES (10, 'Hervanta');"));
QVERIFY_SQL(q, exec("INSERT INTO " + testTable2 + " (id, name) VALUES (20, 'Keskusta');"));
diff --git a/tests/auto/sql/models/qsqltablemodel/CMakeLists.txt b/tests/auto/sql/models/qsqltablemodel/CMakeLists.txt
index 4cbd667ec4..15cbe24ef7 100644
--- a/tests/auto/sql/models/qsqltablemodel/CMakeLists.txt
+++ b/tests/auto/sql/models/qsqltablemodel/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsqltablemodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsqltablemodel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsqltablemodel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsqltablemodel
SOURCES
tst_qsqltablemodel.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Sql
Qt::SqlPrivate
diff --git a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
index a83cb37605..9c93fc2b18 100644
--- a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp
+++ b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.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 <QTest>
@@ -141,6 +116,8 @@ private slots:
void submitAllOnInvalidTable();
void insertRecordsInLoop_data() { generic_data(); }
void insertRecordsInLoop();
+ void sqlite_escaped_delimiters_data() { generic_data("QSQLITE"); }
+ void sqlite_escaped_delimiters();
void sqlite_attachedDatabase_data() { generic_data("QSQLITE"); }
void sqlite_attachedDatabase(); // For task 130799
void tableModifyWithBlank_data() { generic_data(); }
@@ -173,25 +150,22 @@ tst_QSqlTableModel::~tst_QSqlTableModel()
void tst_QSqlTableModel::dropTestTables()
{
- for (int i = 0; i < dbs.dbNames.count(); ++i) {
+ for (int i = 0; i < dbs.dbNames.size(); ++i) {
QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i));
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
QSqlQuery q(db);
if (dbType == QSqlDriver::PostgreSQL)
QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
- QStringList tableNames;
- tableNames << qTableName("test1", __FILE__, db)
- << qTableName("test2", __FILE__, db)
- << qTableName("test3", __FILE__, db)
- << qTableName("test4", __FILE__, db)
- << qTableName("emptytable", __FILE__, db)
- << qTableName("bigtable", __FILE__, db)
- << qTableName("foo", __FILE__, db)
- << qTableName("pktest", __FILE__, db);
- if (testWhiteSpaceNames(db.driverName()))
- tableNames << qTableName("qtestw hitespace", db);
-
+ QStringList tableNames{qTableName("test1", __FILE__, db),
+ qTableName("test2", __FILE__, db),
+ qTableName("test3", __FILE__, db),
+ qTableName("test4", __FILE__, db),
+ qTableName("emptytable", __FILE__, db),
+ qTableName("bigtable", __FILE__, db),
+ qTableName("foo", __FILE__, db),
+ qTableName("pktest", __FILE__, db),
+ qTableName("qtestw hitespace", __FILE__, db)};
tst_Databases::safeDropTables(db, tableNames);
if (db.driverName().startsWith("QPSQL")) {
@@ -202,7 +176,7 @@ void tst_QSqlTableModel::dropTestTables()
void tst_QSqlTableModel::createTestTables()
{
- for (int i = 0; i < dbs.dbNames.count(); ++i) {
+ for (int i = 0; i < dbs.dbNames.size(); ++i) {
QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i));
QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
QSqlQuery q(db);
@@ -221,10 +195,8 @@ void tst_QSqlTableModel::createTestTables()
QVERIFY_SQL(q, exec("create table " + qTableName("emptytable", __FILE__, db) + "(id int)"));
- if (testWhiteSpaceNames(db.driverName())) {
- QString qry = "create table " + qTableName("qtestw hitespace", db) + " ("+ db.driver()->escapeIdentifier("a field", QSqlDriver::FieldName) + " int)";
- QVERIFY_SQL( q, exec(qry));
- }
+ const auto fieldStr = db.driver()->escapeIdentifier("a field", QSqlDriver::FieldName);
+ QVERIFY_SQL(q, exec("create table " + qTableName("qtestw hitespace", __FILE__, db) + " ("+ fieldStr + " int)"));
QVERIFY_SQL(q, exec("create table " + qTableName("pktest", __FILE__, db) + "(id int not null primary key, a varchar(20))"));
}
@@ -232,7 +204,7 @@ void tst_QSqlTableModel::createTestTables()
void tst_QSqlTableModel::repopulateTestTables()
{
- for (int i = 0; i < dbs.dbNames.count(); ++i) {
+ for (int i = 0; i < dbs.dbNames.size(); ++i) {
QSqlDatabase db = QSqlDatabase::database(dbs.dbNames.at(i));
QSqlQuery q(db);
const auto test = qTableName("test1", __FILE__, db);
@@ -455,8 +427,7 @@ void tst_QSqlTableModel::insertColumns()
{
// Just like the select test, with extra stuff
QFETCH(QString, dbName);
- QFETCH(int, submitpolicy_i);
- QSqlTableModel::EditStrategy submitpolicy = (QSqlTableModel::EditStrategy) submitpolicy_i;
+ QFETCH(QSqlTableModel::EditStrategy, submitpolicy);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
const auto test = qTableName("test1", __FILE__, db);
@@ -606,13 +577,13 @@ void tst_QSqlTableModel::setRecord()
CHECK_DATABASE(db);
const auto test3 = qTableName("test3", __FILE__, db);
- QList<QSqlTableModel::EditStrategy> policies = QList<QSqlTableModel::EditStrategy>() << QSqlTableModel::OnFieldChange << QSqlTableModel::OnRowChange << QSqlTableModel::OnManualSubmit;
+ const auto policies = { QSqlTableModel::OnFieldChange, QSqlTableModel::OnRowChange, QSqlTableModel::OnManualSubmit };
QString Xsuffix;
- foreach( QSqlTableModel::EditStrategy submitpolicy, policies) {
+ for (QSqlTableModel::EditStrategy submitpolicy : policies) {
QSqlTableModel model(0, db);
- model.setEditStrategy((QSqlTableModel::EditStrategy)submitpolicy);
+ model.setEditStrategy(submitpolicy);
model.setTable(test3);
model.setSort(0, Qt::AscendingOrder);
QVERIFY_SQL(model, select());
@@ -626,23 +597,23 @@ void tst_QSqlTableModel::setRecord()
QVERIFY(model.setRecord(i, rec));
// dataChanged() emitted by setData() for each *changed* column
- if ((QSqlTableModel::EditStrategy)submitpolicy == QSqlTableModel::OnManualSubmit) {
- QCOMPARE(spy.count(), 2);
- QCOMPARE(spy.at(0).count(), 2);
+ if (submitpolicy == QSqlTableModel::OnManualSubmit) {
+ QCOMPARE(spy.size(), 2);
+ QCOMPARE(spy.at(0).size(), 2);
QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(0)), model.index(i, 1));
QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(1)), model.index(i, 1));
QCOMPARE(qvariant_cast<QModelIndex>(spy.at(1).at(0)), model.index(i, 2));
QCOMPARE(qvariant_cast<QModelIndex>(spy.at(1).at(1)), model.index(i, 2));
QVERIFY(model.submitAll());
- } else if ((QSqlTableModel::EditStrategy)submitpolicy == QSqlTableModel::OnRowChange && i == model.rowCount() -1)
+ } else if (submitpolicy == QSqlTableModel::OnRowChange && i == model.rowCount() -1)
model.submit();
else {
- if ((QSqlTableModel::EditStrategy)submitpolicy != QSqlTableModel::OnManualSubmit)
+ if (submitpolicy != QSqlTableModel::OnManualSubmit)
// dataChanged() also emitted by selectRow()
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
else
- QCOMPARE(spy.count(), 2);
- QCOMPARE(spy.at(0).count(), 2);
+ QCOMPARE(spy.size(), 2);
+ QCOMPARE(spy.at(0).size(), 2);
QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(0)), model.index(i, 1));
QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(1)), model.index(i, 1));
QCOMPARE(qvariant_cast<QModelIndex>(spy.at(1).at(0)), model.index(i, 2));
@@ -739,8 +710,7 @@ void tst_QSqlTableModel::recordReimpl()
void tst_QSqlTableModel::insertRow()
{
QFETCH(QString, dbName);
- QFETCH(int, submitpolicy_i);
- QSqlTableModel::EditStrategy submitpolicy = (QSqlTableModel::EditStrategy) submitpolicy_i;
+ QFETCH(QSqlTableModel::EditStrategy, submitpolicy);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
const auto test = qTableName("test1", __FILE__, db);
@@ -849,8 +819,7 @@ void tst_QSqlTableModel::insertRowFailure()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
- QFETCH(int, submitpolicy_i);
- QSqlTableModel::EditStrategy submitpolicy = (QSqlTableModel::EditStrategy) submitpolicy_i;
+ QFETCH(QSqlTableModel::EditStrategy, submitpolicy);
CHECK_DATABASE(db);
QSqlTableModel model(0, db);
@@ -999,8 +968,7 @@ void tst_QSqlTableModel::insertMultiRecords()
void tst_QSqlTableModel::insertWithAutoColumn()
{
QFETCH(QString, dbName);
- QFETCH(int, submitpolicy_i);
- QSqlTableModel::EditStrategy submitpolicy = (QSqlTableModel::EditStrategy) submitpolicy_i;
+ QFETCH(QSqlTableModel::EditStrategy, submitpolicy);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
@@ -1117,7 +1085,7 @@ void tst_QSqlTableModel::removeRow()
QSignalSpy headerDataChangedSpy(&model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)));
QVERIFY(model.removeRow(1));
- QCOMPARE(headerDataChangedSpy.count(), 1);
+ QCOMPARE(headerDataChangedSpy.size(), 1);
QCOMPARE(*static_cast<const Qt::Orientation *>(headerDataChangedSpy.at(0).value(0).constData()), Qt::Vertical);
QCOMPARE(headerDataChangedSpy.at(0).at(1).toInt(), 1);
QCOMPARE(headerDataChangedSpy.at(0).at(2).toInt(), 1);
@@ -1137,7 +1105,7 @@ void tst_QSqlTableModel::removeRow()
headerDataChangedSpy.clear();
QVERIFY(model.removeRow(1));
- QCOMPARE(headerDataChangedSpy.count(), 1);
+ QCOMPARE(headerDataChangedSpy.size(), 1);
QCOMPARE(model.rowCount(), 3);
QVERIFY_SQL(model, select());
@@ -1173,7 +1141,7 @@ void tst_QSqlTableModel::removeRows()
QVERIFY_SQL(model, removeRows(0, 1));
QVERIFY_SQL(model, removeRows(1, 1));
- QCOMPARE(beforeDeleteSpy.count(), 2);
+ QCOMPARE(beforeDeleteSpy.size(), 2);
QCOMPARE(beforeDeleteSpy.at(0).at(0).toInt(), 0);
QCOMPARE(beforeDeleteSpy.at(1).at(0).toInt(), 1);
// deleted rows shown as empty until select
@@ -1204,15 +1172,15 @@ void tst_QSqlTableModel::removeRows()
qRegisterMetaType<Qt::Orientation>("Qt::Orientation");
QSignalSpy headerDataChangedSpy(&model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)));
QVERIFY(model.removeRows(0, 2, QModelIndex()));
- QCOMPARE(headerDataChangedSpy.count(), 2);
+ QCOMPARE(headerDataChangedSpy.size(), 2);
QCOMPARE(headerDataChangedSpy.at(0).at(1).toInt(), 1);
QCOMPARE(headerDataChangedSpy.at(0).at(2).toInt(), 1);
QCOMPARE(headerDataChangedSpy.at(1).at(1).toInt(), 0);
QCOMPARE(headerDataChangedSpy.at(1).at(2).toInt(), 0);
QCOMPARE(model.rowCount(), 3);
- QCOMPARE(beforeDeleteSpy.count(), 0);
+ QCOMPARE(beforeDeleteSpy.size(), 0);
QVERIFY(model.submitAll());
- QCOMPARE(beforeDeleteSpy.count(), 2);
+ QCOMPARE(beforeDeleteSpy.size(), 2);
QCOMPARE(beforeDeleteSpy.at(0).at(0).toInt(), 0);
QCOMPARE(beforeDeleteSpy.at(1).at(0).toInt(), 1);
QCOMPARE(model.rowCount(), 1);
@@ -1222,8 +1190,7 @@ void tst_QSqlTableModel::removeRows()
void tst_QSqlTableModel::removeInsertedRow()
{
QFETCH(QString, dbName);
- QFETCH(int, submitpolicy_i);
- QSqlTableModel::EditStrategy submitpolicy = (QSqlTableModel::EditStrategy) submitpolicy_i;
+ QFETCH(QSqlTableModel::EditStrategy, submitpolicy);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
const auto test = qTableName("test1", __FILE__, db);
@@ -1407,8 +1374,7 @@ void tst_QSqlTableModel::removeInsertedRows()
void tst_QSqlTableModel::revert()
{
QFETCH(QString, dbName);
- QFETCH(int, submitpolicy_i);
- QSqlTableModel::EditStrategy submitpolicy = (QSqlTableModel::EditStrategy) submitpolicy_i;
+ QFETCH(QSqlTableModel::EditStrategy, submitpolicy);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
@@ -1484,8 +1450,7 @@ void tst_QSqlTableModel::revert()
void tst_QSqlTableModel::isDirty()
{
QFETCH(QString, dbName);
- QFETCH(int, submitpolicy_i);
- QSqlTableModel::EditStrategy submitpolicy = (QSqlTableModel::EditStrategy) submitpolicy_i;
+ QFETCH(QSqlTableModel::EditStrategy, submitpolicy);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
const auto test = qTableName("test1", __FILE__, db);
@@ -1690,11 +1655,11 @@ void tst_QSqlTableModel::emptyTable()
QCOMPARE(model.columnCount(), 1);
// QTBUG-29108: check correct horizontal header for empty query with pending insert
- QCOMPARE(model.headerData(0, Qt::Horizontal).toString(), QString("id"));
+ QCOMPARE(model.headerData(0, Qt::Horizontal).toString().toLower(), QString("id"));
model.setEditStrategy(QSqlTableModel::OnManualSubmit);
model.insertRow(0);
QCOMPARE(model.rowCount(), 1);
- QCOMPARE(model.headerData(0, Qt::Horizontal).toString(), QString("id"));
+ QCOMPARE(model.headerData(0, Qt::Horizontal).toString().toLower(), QString("id"));
model.revertAll();
}
@@ -1725,10 +1690,7 @@ void tst_QSqlTableModel::whitespaceInIdentifiers()
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- if (!testWhiteSpaceNames(db.driverName()))
- QSKIP("DBMS doesn't support whitespaces in identifiers");
-
- QString tableName = qTableName("qtestw hitespace", db);
+ QString tableName = qTableName("qtestw hitespace", __FILE__, db);
QSqlTableModel model(0, db);
model.setTable(tableName);
@@ -1809,8 +1771,8 @@ void tst_QSqlTableModel::setFilter()
model.setFilter("id = 2");
// check the signals
- QCOMPARE(modelAboutToBeResetSpy.count(), 1);
- QCOMPARE(modelResetSpy.count(), 1);
+ QCOMPARE(modelAboutToBeResetSpy.size(), 1);
+ QCOMPARE(modelResetSpy.size(), 1);
QCOMPARE(model.rowCount(), 1);
QCOMPARE(model.data(model.index(0, 0)).toInt(), 2);
@@ -1953,13 +1915,82 @@ void tst_QSqlTableModel::insertRecordsInLoop()
model.submitAll(); // submitAll() calls select() which clears and repopulates the table
// model emits reset signals
- QCOMPARE(modelAboutToBeResetSpy.count(), 1);
- QCOMPARE(modelResetSpy.count(), 1);
+ QCOMPARE(modelAboutToBeResetSpy.size(), 1);
+ QCOMPARE(modelResetSpy.size(), 1);
QCOMPARE(model.rowCount(), 13);
QCOMPARE(model.columnCount(), 3);
}
+void tst_QSqlTableModel::sqlite_escaped_delimiters()
+{
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
+ if (db.databaseName() == ":memory:")
+ QSKIP(":memory: database, skipping test");
+
+ auto attachedDb = QSqlDatabase::cloneDatabase(db, db.driverName() + QLatin1String("attached"));
+ attachedDb.setDatabaseName(db.databaseName() + QLatin1String("attached.dat"));
+ QVERIFY_SQL(attachedDb, open());
+ QSqlQuery q(attachedDb);
+ TableScope tsAttached(attachedDb, "attachedTestTable", __FILE__);
+ QVERIFY_SQL(q,
+ exec("CREATE TABLE attachedTestTable("
+ "id int, \"attachedCol [unit]\" varchar(20))"));
+ QVERIFY_SQL(q,
+ exec("INSERT INTO attachedTestTable VALUES("
+ "1, 'attachTestData')"));
+
+ QSqlQuery q2(db);
+ TableScope ts(db, "testTable", __FILE__);
+ QVERIFY_SQL(q2, exec("CREATE TABLE testTable(id int, \"col [unit]\" varchar(20))"));
+ QVERIFY_SQL(q2, exec("INSERT INTO testTable VALUES(2, 'testData')"));
+ QVERIFY_SQL(q2, exec("ATTACH DATABASE \"" + attachedDb.databaseName() + "\" AS attachedDb"));
+
+ const std::array<std::pair<QLatin1Char, QLatin1Char>, 3> escapingPairs{
+ std::make_pair(QLatin1Char{'"'}, QLatin1Char{'"'}),
+ std::make_pair(QLatin1Char{'`'}, QLatin1Char{'`'}),
+ std::make_pair(QLatin1Char{'['}, QLatin1Char{']'})
+ };
+
+ QSqlTableModel model(nullptr, db);
+ model.setTable("testTable");
+ QVERIFY_SQL(model, select());
+ for (const auto &escapingPair : escapingPairs) {
+ model.setTable(escapingPair.first + "testTable" + escapingPair.second);
+ QVERIFY_SQL(model, select());
+ }
+
+ model.setTable("attachedDb.attachedTestTable");
+ QFAIL_SQL(model, select());
+ for (const auto &escapingPair : escapingPairs) {
+ model.setTable(escapingPair.first + "attachedDb.attachedTestTable" + escapingPair.second);
+ QFAIL_SQL(model, select());
+ model.setTable(escapingPair.first + "attachedDb" + escapingPair.first + ".a"
+ + escapingPair.second + "ttachedTestTable" + escapingPair.second);
+ QFAIL_SQL(model, select());
+ }
+
+ for (std::size_t i = 0; i <= escapingPairs.size(); ++i) {
+ for (std::size_t j = 0; j <= escapingPairs.size(); ++j) {
+ if (i == escapingPairs.size() && j == escapingPairs.size())
+ continue;
+
+ QString leftName = "attachedDb";
+ if (i != escapingPairs.size())
+ leftName = escapingPairs.at(i).first + leftName + escapingPairs.at(i).second;
+ QString rightName = "attachedTestTable";
+ if (j != escapingPairs.size())
+ rightName = escapingPairs.at(j).first + rightName + escapingPairs.at(j).second;
+ model.setTable(leftName + "." + rightName);
+ QVERIFY_SQL(model, select());
+ }
+ }
+
+ attachedDb.close();
+}
+
void tst_QSqlTableModel::sqlite_attachedDatabase()
{
QFETCH(QString, dbName);
@@ -1972,21 +2003,23 @@ void tst_QSqlTableModel::sqlite_attachedDatabase()
attachedDb.setDatabaseName(db.databaseName()+QLatin1String("attached.dat"));
QVERIFY_SQL(attachedDb, open());
QSqlQuery q(attachedDb);
- tst_Databases::safeDropTables(attachedDb, QStringList() << "atest" << "atest2");
+ TableScope ts(db, "atest", __FILE__);
+ TableScope tsAttached(attachedDb, "atest", __FILE__);
+ TableScope tsAttached2(attachedDb, "atest2", __FILE__);
+
QVERIFY_SQL( q, exec("CREATE TABLE atest(id int, text varchar(20))"));
QVERIFY_SQL( q, exec("CREATE TABLE atest2(id int, text varchar(20))"));
QVERIFY_SQL( q, exec("INSERT INTO atest VALUES(1, 'attached-atest')"));
QVERIFY_SQL( q, exec("INSERT INTO atest2 VALUES(2, 'attached-atest2')"));
QSqlQuery q2(db);
- tst_Databases::safeDropTable(db, "atest");
QVERIFY_SQL(q2, exec("CREATE TABLE atest(id int, text varchar(20))"));
QVERIFY_SQL(q2, exec("INSERT INTO atest VALUES(3, 'main')"));
QVERIFY_SQL(q2, exec("ATTACH DATABASE \""+attachedDb.databaseName()+"\" as adb"));
// This should query the table in the attached database (schema supplied)
QSqlTableModel model(0, db);
- model.setTable("adb.atest");
+ model.setTable("\"adb\".\"atest\"");
QVERIFY_SQL(model, select());
QCOMPARE(model.rowCount(), 1);
QCOMPARE(model.data(model.index(0, 0), Qt::DisplayRole).toInt(), 1);
@@ -2170,29 +2203,27 @@ void tst_QSqlTableModel::sqlite_selectFromIdentifierWithDot()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
+ TableScope fieldDot(db, "fieldDot", __FILE__);
+ TableScope tableDot(db, u'[' + qTableName("table.dot", __FILE__, db) + u']');
CHECK_DATABASE(db);
{
- const auto fieldDot = qTableName("fieldDot", __FILE__, db);
- tst_Databases::safeDropTable(db, fieldDot);
QSqlQuery qry(db);
- QVERIFY_SQL(qry, exec("create table " + fieldDot + " (id int primary key, "
+ QVERIFY_SQL(qry, exec("create table " + fieldDot.tableName() + " (id int primary key, "
"\"person.firstname\" varchar(20))"));
- QVERIFY_SQL(qry, exec("insert into " + fieldDot + " values(1, 'Andy')"));
+ QVERIFY_SQL(qry, exec("insert into " + fieldDot.tableName() + " values(1, 'Andy')"));
QSqlTableModel model(0, db);
- model.setTable(fieldDot);
+ model.setTable(fieldDot.tableName());
QVERIFY_SQL(model, select());
QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
QCOMPARE(model.data(model.index(0, 1)).toString(), QString("Andy"));
}
- const auto tableDot = QLatin1Char('[') + qTableName("table.dot", __FILE__, db) + QLatin1Char(']');
{
- tst_Databases::safeDropTable(db, tableDot);
QSqlQuery qry(db);
- QVERIFY_SQL(qry, exec("create table " + tableDot + " (id int primary key, "
+ QVERIFY_SQL(qry, exec("create table " + tableDot.tableName() + " (id int primary key, "
"\"person.firstname\" varchar(20))"));
- QVERIFY_SQL(qry, exec("insert into " + tableDot + " values(1, 'Andy')"));
+ QVERIFY_SQL(qry, exec("insert into " + tableDot.tableName() + " values(1, 'Andy')"));
QSqlTableModel model(0, db);
- model.setTable(tableDot);
+ model.setTable(tableDot.tableName());
QVERIFY_SQL(model, select());
QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
QCOMPARE(model.data(model.index(0, 1)).toString(), QString("Andy"));
@@ -2204,7 +2235,7 @@ void tst_QSqlTableModel::sqlite_selectFromIdentifierWithDot()
QSqlQuery qry(attachedDb);
QVERIFY_SQL(qry, exec(QString("attach '%1' AS 'attached'").arg(db.databaseName())));
QSqlTableModel model(0, attachedDb);
- model.setTable(QString("attached.%1").arg(tableDot));
+ model.setTable(QString("attached.%1").arg(tableDot.tableName()));
QVERIFY_SQL(model, select());
QCOMPARE(model.data(model.index(0, 0)).toInt(), 1);
QCOMPARE(model.data(model.index(0, 1)).toString(), QString("Andy"));
diff --git a/tests/auto/testlib/CMakeLists.txt b/tests/auto/testlib/CMakeLists.txt
index ad895108e7..35a26a8e34 100644
--- a/tests/auto/testlib/CMakeLists.txt
+++ b/tests/auto/testlib/CMakeLists.txt
@@ -1,10 +1,11 @@
-# Generated from testlib.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# add_subdirectory(initmain) # special case missing project
-# add_subdirectory(outformat) # special case missing project
add_subdirectory(qsignalspy)
-# QTBUG-88507 # special case
-if(NOT ANDROID)
+add_subdirectory(tostring)
+
+# QTBUG-88507
+if(QT_FEATURE_process AND NOT ANDROID)
add_subdirectory(selftests)
endif()
if(TARGET Qt::Widgets)
diff --git a/tests/auto/testlib/initmain/tst_initmain.cpp b/tests/auto/testlib/initmain/tst_initmain.cpp
index 079fe1493f..75a0d9ceb4 100644
--- a/tests/auto/testlib/initmain/tst_initmain.cpp
+++ b/tests/auto/testlib/initmain/tst_initmain.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/outformat/tst_outformat.cpp b/tests/auto/testlib/outformat/tst_outformat.cpp
index bc5fe5a0b9..90eb42d843 100644
--- a/tests/auto/testlib/outformat/tst_outformat.cpp
+++ b/tests/auto/testlib/outformat/tst_outformat.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/testlib/qabstractitemmodeltester/CMakeLists.txt b/tests/auto/testlib/qabstractitemmodeltester/CMakeLists.txt
index 4719937e53..20329a95f1 100644
--- a/tests/auto/testlib/qabstractitemmodeltester/CMakeLists.txt
+++ b/tests/auto/testlib/qabstractitemmodeltester/CMakeLists.txt
@@ -1,16 +1,25 @@
-# Generated from qabstractitemmodeltester.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractitemmodeltester Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractitemmodeltester LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractitemmodeltester
SOURCES
../../other/qabstractitemmodelutils/dynamictreemodel.cpp ../../other/qabstractitemmodelutils/dynamictreemodel.h
tst_qabstractitemmodeltester.cpp
+ NO_PCH_SOURCES
+ tst_qabstractitemmodeltester.cpp # undef QT_NO_FOREACH
INCLUDE_DIRECTORIES
../../other/qabstractitemmodelutils
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp b/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp
index e8f8d0c390..c7c833fa09 100644
--- a/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp
+++ b/tests/auto/testlib/qabstractitemmodeltester/tst_qabstractitemmodeltester.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QTest>
#include <QAbstractItemModelTester>
@@ -79,6 +56,7 @@ void tst_QAbstractItemModelTester::treeWidgetModel()
new QTreeWidgetItem(root, QStringList(QString::number(i)));
QTreeWidgetItem *remove = root->child(2);
root->removeChild(remove);
+ delete remove;
QTreeWidgetItem *parent = new QTreeWidgetItem(&widget, QStringList("parent"));
new QTreeWidgetItem(parent, QStringList("child"));
parent->setHidden(true);
@@ -161,14 +139,8 @@ class AccessibleProxyModel : public QSortFilterProxyModel
{
Q_OBJECT
public:
- AccessibleProxyModel(QObject *parent = nullptr) : QSortFilterProxyModel(parent)
- {
- }
-
- QModelIndexList persistent()
- {
- return persistentIndexList();
- }
+ using QSortFilterProxyModel::QSortFilterProxyModel;
+ using QSortFilterProxyModel::persistentIndexList;
};
class ObservingObject : public QObject
@@ -181,15 +153,18 @@ public:
storePersistentFailureCount(0),
checkPersistentFailureCount(0)
{
- connect(m_proxy, SIGNAL(rowsAboutToBeMoved(QModelIndex,int,int,QModelIndex,int)),
- SLOT(storePersistent()));
- connect(m_proxy, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)),
- SLOT(checkPersistent()));
+ // moveRows signals can not come through because the proxy might sort/filter
+ // out some of the moved rows. therefore layoutChanged signals are sent from
+ // the QSFPM and we have to listen to them here to get properly notified
+ connect(m_proxy, &QAbstractProxyModel::layoutAboutToBeChanged, this,
+ &ObservingObject::storePersistent);
+ connect(m_proxy, &QAbstractProxyModel::layoutChanged, this,
+ &ObservingObject::checkPersistent);
}
public slots:
- void storePersistent(const QModelIndex &parent)
+ void storePersistentRecursive(const QModelIndex &parent)
{
for (int row = 0; row < m_proxy->rowCount(parent); ++row) {
QModelIndex proxyIndex = m_proxy->index(row, 0, parent);
@@ -205,26 +180,27 @@ public slots:
m_persistentSourceIndexes.append(sourceIndex);
m_persistentProxyIndexes.append(proxyIndex);
if (m_proxy->hasChildren(proxyIndex))
- storePersistent(proxyIndex);
+ storePersistentRecursive(proxyIndex);
}
}
- void storePersistent()
+ void storePersistent(const QList<QPersistentModelIndex> &parents = {})
{
- // This method is called from rowsAboutToBeMoved. Persistent indexes should be valid
+ // This method is called from source model rowsAboutToBeMoved. Persistent indexes should be valid
foreach (const QModelIndex &idx, m_persistentProxyIndexes)
if (!idx.isValid()) {
qWarning("%s: persistentProxyIndexes contains invalid index", Q_FUNC_INFO);
++storePersistentFailureCount;
}
-
- if (!m_proxy->persistent().isEmpty()) {
- qWarning("%s: proxy should have no persistent indexes when storePersistent called",
+ const auto validCount = std::count_if(parents.begin(), parents.end(),
+ [](const auto &idx) { return idx.isValid(); });
+ if (m_proxy->persistentIndexList().size() != validCount) {
+ qWarning("%s: proxy should have no additional persistent indexes when storePersistent called",
Q_FUNC_INFO);
++storePersistentFailureCount;
}
- storePersistent(QModelIndex());
- if (m_proxy->persistent().isEmpty()) {
+ storePersistentRecursive(QModelIndex());
+ if (m_proxy->persistentIndexList().isEmpty()) {
qWarning("%s: proxy should have persistent index after storePersistent called",
Q_FUNC_INFO);
++storePersistentFailureCount;
@@ -233,6 +209,9 @@ public slots:
void checkPersistent()
{
+ QVERIFY(!m_persistentProxyIndexes.isEmpty());
+ QVERIFY(!m_persistentSourceIndexes.isEmpty());
+
for (int row = 0; row < m_persistentProxyIndexes.size(); ++row) {
m_persistentProxyIndexes.at(row);
m_persistentSourceIndexes.at(row);
diff --git a/tests/auto/testlib/qsignalspy/CMakeLists.txt b/tests/auto/testlib/qsignalspy/CMakeLists.txt
index ebec346460..3c62050de5 100644
--- a/tests/auto/testlib/qsignalspy/CMakeLists.txt
+++ b/tests/auto/testlib/qsignalspy/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qsignalspy.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsignalspy Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsignalspy LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsignalspy
SOURCES
tst_qsignalspy.cpp
diff --git a/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp b/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp
index e618671381..66f8b00505 100644
--- a/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp
+++ b/tests/auto/testlib/qsignalspy/tst_qsignalspy.cpp
@@ -1,39 +1,16 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QSignalSpy>
#include <QTimer>
-
#include <qdatetime.h>
+using namespace std::chrono_literals;
+using namespace Qt::StringLiterals;
+
class tst_QSignalSpy : public QObject
{
Q_OBJECT
@@ -73,6 +50,8 @@ private slots:
void spyOnMetaMethod_invalid();
void spyOnMetaMethod_invalid_data();
+
+ void signalSpyDoesNotRaceOnCrossThreadSignal();
};
struct CustomType {};
@@ -104,15 +83,15 @@ void tst_QSignalSpy::spyWithoutArgs()
QtTestObject obj;
QSignalSpy spy(&obj, SIGNAL(sig0()));
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
emit obj.sig0();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
emit obj.sig0();
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QList<QVariant> args = spy.takeFirst();
- QCOMPARE(args.count(), 0);
+ QCOMPARE(args.size(), 0);
}
void tst_QSignalSpy::spyWithBasicArgs()
@@ -121,10 +100,10 @@ void tst_QSignalSpy::spyWithBasicArgs()
QSignalSpy spy(&obj, SIGNAL(sig1(int,int)));
emit obj.sig1(1, 2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> args = spy.takeFirst();
- QCOMPARE(args.count(), 2);
+ QCOMPARE(args.size(), 2);
QCOMPARE(args.at(0).toInt(), 1);
QCOMPARE(args.at(1).toInt(), 2);
@@ -132,7 +111,7 @@ void tst_QSignalSpy::spyWithBasicArgs()
emit obj.sigLong(1l, 2l);
args = spyl.takeFirst();
- QCOMPARE(args.count(), 2);
+ QCOMPARE(args.size(), 2);
QCOMPARE(qvariant_cast<long>(args.at(0)), 1l);
QCOMPARE(qvariant_cast<long>(args.at(1)), 2l);
}
@@ -149,10 +128,10 @@ void tst_QSignalSpy::spyWithPointers()
int i2 = 2;
emit obj.sig2(&i1, &i2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> args = spy.takeFirst();
- QCOMPARE(args.count(), 2);
+ QCOMPARE(args.size(), 2);
QCOMPARE(*static_cast<int * const *>(args.at(0).constData()), &i1);
QCOMPARE(*static_cast<int * const *>(args.at(1).constData()), &i2);
}
@@ -180,15 +159,15 @@ void tst_QSignalSpy::spyWithBasicQtClasses()
QSignalSpy spy(&obj, SIGNAL(sig(QString)));
emit obj.sig(QString("bubu"));
- QCOMPARE(spy.count(), 1);
- QCOMPARE(spy.at(0).count(), 1);
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(spy.at(0).size(), 1);
QCOMPARE(spy.at(0).at(0).toString(), QString("bubu"));
QSignalSpy spy2(&obj, SIGNAL(sig5(QVariant)));
QVariant val(45);
emit obj.sig5(val);
- QCOMPARE(spy2.count(), 1);
- QCOMPARE(spy2.at(0).count(), 1);
+ QCOMPARE(spy2.size(), 1);
+ QCOMPARE(spy2.at(0).size(), 1);
QCOMPARE(spy2.at(0).at(0), val);
QCOMPARE(qvariant_cast<QVariant>(spy2.at(0).at(0)), val);
}
@@ -201,8 +180,8 @@ void tst_QSignalSpy::spyWithQtClasses()
QSignalSpy spy(&obj, SIGNAL(sig2(QDateTime)));
QDateTime dt = QDateTime::currentDateTime();
emit obj.sig2(dt);
- QCOMPARE(spy.count(), 1);
- QCOMPARE(spy.at(0).count(), 1);
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(spy.at(0).size(), 1);
QCOMPARE(spy.at(0).at(0).typeName(), "QDateTime");
QCOMPARE(*static_cast<const QDateTime *>(spy.at(0).at(0).constData()), dt);
QCOMPARE(spy.at(0).at(0).toDateTime(), dt);
@@ -273,7 +252,7 @@ void tst_QSignalSpy::wait_signalEmittedTooLate()
QTimer::singleShot(500, this, SIGNAL(sigFoo()));
QSignalSpy spy(this, SIGNAL(sigFoo()));
QVERIFY(!spy.wait(200));
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
}
void tst_QSignalSpy::wait_signalEmittedMultipleTimes()
@@ -282,13 +261,13 @@ void tst_QSignalSpy::wait_signalEmittedMultipleTimes()
QTimer::singleShot(800, this, SIGNAL(sigFoo()));
QSignalSpy spy(this, SIGNAL(sigFoo()));
QVERIFY(spy.wait());
- QCOMPARE(spy.count(), 1); // we don't wait for the second signal...
+ QCOMPARE(spy.size(), 1); // we don't wait for the second signal...
QVERIFY(spy.wait());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QVERIFY(!spy.wait(1));
QTimer::singleShot(10, this, SIGNAL(sigFoo()));
QVERIFY(spy.wait());
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
}
void tst_QSignalSpy::spyFunctionPointerWithoutArgs()
@@ -296,15 +275,15 @@ void tst_QSignalSpy::spyFunctionPointerWithoutArgs()
QtTestObject obj;
QSignalSpy spy(&obj, &QtTestObject::sig0);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
emit obj.sig0();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
emit obj.sig0();
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QList<QVariant> args = spy.takeFirst();
- QCOMPARE(args.count(), 0);
+ QCOMPARE(args.size(), 0);
}
void tst_QSignalSpy::spyFunctionPointerWithBasicArgs()
@@ -313,10 +292,10 @@ void tst_QSignalSpy::spyFunctionPointerWithBasicArgs()
QSignalSpy spy(&obj, &QtTestObject::sig1);
emit obj.sig1(1, 2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> args = spy.takeFirst();
- QCOMPARE(args.count(), 2);
+ QCOMPARE(args.size(), 2);
QCOMPARE(args.at(0).toInt(), 1);
QCOMPARE(args.at(1).toInt(), 2);
@@ -324,7 +303,7 @@ void tst_QSignalSpy::spyFunctionPointerWithBasicArgs()
emit obj.sigLong(1l, 2l);
args = spyl.takeFirst();
- QCOMPARE(args.count(), 2);
+ QCOMPARE(args.size(), 2);
QCOMPARE(qvariant_cast<long>(args.at(0)), 1l);
QCOMPARE(qvariant_cast<long>(args.at(1)), 2l);
}
@@ -341,10 +320,10 @@ void tst_QSignalSpy::spyFunctionPointerWithPointers()
int i2 = 2;
emit obj.sig2(&i1, &i2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> args = spy.takeFirst();
- QCOMPARE(args.count(), 2);
+ QCOMPARE(args.size(), 2);
QCOMPARE(*static_cast<int * const *>(args.at(0).constData()), &i1);
QCOMPARE(*static_cast<int * const *>(args.at(1).constData()), &i2);
}
@@ -355,15 +334,15 @@ void tst_QSignalSpy::spyFunctionPointerWithBasicQtClasses()
QSignalSpy spy(&obj, &QtTestObject2::sig);
emit obj.sig(QString("bubu"));
- QCOMPARE(spy.count(), 1);
- QCOMPARE(spy.at(0).count(), 1);
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(spy.at(0).size(), 1);
QCOMPARE(spy.at(0).at(0).toString(), QString("bubu"));
QSignalSpy spy2(&obj, &QtTestObject2::sig5);
QVariant val(45);
emit obj.sig5(val);
- QCOMPARE(spy2.count(), 1);
- QCOMPARE(spy2.at(0).count(), 1);
+ QCOMPARE(spy2.size(), 1);
+ QCOMPARE(spy2.at(0).size(), 1);
QCOMPARE(spy2.at(0).at(0), val);
QCOMPARE(qvariant_cast<QVariant>(spy2.at(0).at(0)), val);
}
@@ -375,8 +354,8 @@ void tst_QSignalSpy::spyFunctionPointerWithQtClasses()
QSignalSpy spy(&obj, &QtTestObject2::sig2);
QDateTime dt = QDateTime::currentDateTime();
emit obj.sig2(dt);
- QCOMPARE(spy.count(), 1);
- QCOMPARE(spy.at(0).count(), 1);
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(spy.at(0).size(), 1);
QCOMPARE(spy.at(0).at(0).typeName(), "QDateTime");
QCOMPARE(*static_cast<const QDateTime *>(spy.at(0).at(0).constData()), dt);
QCOMPARE(spy.at(0).at(0).toDateTime(), dt);
@@ -398,8 +377,8 @@ void tst_QSignalSpy::spyFunctionPointerWithCustomClass()
{
QSignalSpy spy(&obj, &QtTestObject2::sig6);
emit obj.sig6({});
- QCOMPARE(spy.count(), 1);
- QCOMPARE(spy.at(0).count(), 1);
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(spy.at(0).size(), 1);
QCOMPARE(spy.at(0).at(0).typeName(), "CustomType");
}
@@ -445,7 +424,7 @@ void tst_QSignalSpy::waitFunctionPointer_signalEmittedTooLate()
QSignalSpy spy(this, &tst_QSignalSpy::sigFoo);
QVERIFY(!spy.wait(200));
QTest::qWait(400);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QSignalSpy::waitFunctionPointer_signalEmittedMultipleTimes()
@@ -454,13 +433,13 @@ void tst_QSignalSpy::waitFunctionPointer_signalEmittedMultipleTimes()
QTimer::singleShot(800, this, SIGNAL(sigFoo()));
QSignalSpy spy(this, &tst_QSignalSpy::sigFoo);
QVERIFY(spy.wait());
- QCOMPARE(spy.count(), 1); // we don't wait for the second signal...
+ QCOMPARE(spy.size(), 1); // we don't wait for the second signal...
QVERIFY(spy.wait());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QVERIFY(!spy.wait(1));
QTimer::singleShot(10, this, SIGNAL(sigFoo()));
QVERIFY(spy.wait());
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
}
void tst_QSignalSpy::spyOnMetaMethod()
@@ -479,36 +458,68 @@ void tst_QSignalSpy::spyOnMetaMethod()
QVERIFY(spy.isValid());
obj.setObjectName("A new object name");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
Q_DECLARE_METATYPE(QMetaMethod);
void tst_QSignalSpy::spyOnMetaMethod_invalid()
{
+ QFETCH(const QByteArray, message);
QFETCH(QObject*, object);
QFETCH(QMetaMethod, signal);
+ QTest::ignoreMessage(QtWarningMsg, message.data());
QSignalSpy spy(object, signal);
QVERIFY(!spy.isValid());
}
void tst_QSignalSpy::spyOnMetaMethod_invalid_data()
{
+ QTest::addColumn<QByteArray>("message");
QTest::addColumn<QObject*>("object");
QTest::addColumn<QMetaMethod>("signal");
QTest::addRow("Invalid object")
+ << "QSignalSpy: Cannot spy on a null object"_ba
<< static_cast<QObject*>(nullptr)
<< QMetaMethod();
QTest::addRow("Empty signal")
+ << "QSignalSpy: Null signal is not valid"_ba
<< new QObject(this)
<< QMetaMethod();
QTest::addRow("Method is not a signal")
+ << "QSignalSpy: Not a signal: 'deleteLater()'"_ba
<< new QObject(this)
<< QObject::staticMetaObject.method(QObject::staticMetaObject.indexOfMethod("deleteLater()"));
}
+class EmitSignal_Thread : public QThread
+{
+ Q_OBJECT
+public:
+ void run() override
+ {
+ emit valueChanged(42, u"is the answer"_s);
+ }
+
+Q_SIGNALS:
+ void valueChanged(int value, const QString &str);
+};
+
+void tst_QSignalSpy::signalSpyDoesNotRaceOnCrossThreadSignal()
+{
+ EmitSignal_Thread thread;
+ QSignalSpy valueChangedSpy(&thread, &EmitSignal_Thread::valueChanged);
+ QVERIFY(valueChangedSpy.isValid());
+
+ thread.start();
+ QVERIFY(valueChangedSpy.wait(5s));
+ QCOMPARE(valueChangedSpy[0][0].toInt(), 42);
+ QCOMPARE(valueChangedSpy[0][1].toString(), u"is the answer"_s);
+ QVERIFY(thread.wait(5s));
+}
+
QTEST_MAIN(tst_QSignalSpy)
#include "tst_qsignalspy.moc"
diff --git a/tests/auto/testlib/selftests/CMakeLists.txt b/tests/auto/testlib/selftests/CMakeLists.txt
index 2dd26211f2..9e17638a66 100644
--- a/tests/auto/testlib/selftests/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/CMakeLists.txt
@@ -1,9 +1,25 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
# The whole file is written manually.
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_selftests LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
include(../../../../src/testlib/selfcover.cmake)
# ------------- Test runner -------------
+# Resources:
+
+file(GLOB qmake_expected_files_resource_files RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "expected_*")
+foreach(file IN LISTS qmake_expected_files_resource_files)
+ set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}")
+endforeach()
+
qt_internal_add_test(tst_selftests
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
EXCEPTIONS
@@ -11,8 +27,12 @@ qt_internal_add_test(tst_selftests
SOURCES
tst_selftests.cpp
catch.cpp
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ tst_selftests.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::TestPrivate
+ TESTDATA ${qmake_expected_files_resource_files}
+ BUILTIN_TESTDATA
# These lines need to be commented out as they need to be enabled
# COMPILE_OPTIONS
# conditionally
@@ -24,25 +44,6 @@ qt_internal_add_test(tst_selftests
# "$$COVERAGE_OPTIONS"
)
-file(GLOB resource_glob_0 RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "expected_*")
-foreach(file IN LISTS resource_glob_0)
- set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}")
-endforeach()
-
-# Resources:
-set(qmake_expected_files_resource_files
- ${resource_glob_0}
-)
-
-qt_internal_add_resource(tst_selftests "qmake_expected_files"
- PREFIX
- "/"
- BASE
- "${CMAKE_CURRENT_SOURCE_DIR}"
- FILES
- ${qmake_expected_files_resource_files}
-)
-
qt_internal_apply_testlib_coverage_options(tst_selftests)
# ------------- Sub tests -------------
@@ -66,9 +67,12 @@ set(subprograms
deleteLater
deleteLater_noApp
differentexec
+ eventloop
exceptionthrow
expectfail
+ extendedcompare
failcleanup
+ failcleanuptestcase
faildatatype
failfetchtype
failinit
@@ -87,10 +91,13 @@ set(subprograms
printdatatagswithglobaltags
qexecstringlist
silent
+ silent_fatal
signaldumper
singleskip
skip
+ skipblacklisted
skipcleanup
+ skipcleanuptestcase
skipinit
skipinitdata
sleep
diff --git a/tests/auto/testlib/selftests/README b/tests/auto/testlib/selftests/README
index 821bed45df..da6637d872 100644
--- a/tests/auto/testlib/selftests/README
+++ b/tests/auto/testlib/selftests/README
@@ -50,6 +50,13 @@ You can choose a specific subtest by passing the -c option:
-c "Given: The QTestLog::Plain logger" \
-c 'And given: The "skip" subtest'
+Note that on Windows, when using cmd.exe, you cannot use single
+quotes, so the command above becomes:
+
+ ⯠./tst_selftests "Scenario: Test output of the loggers is as expected" \
+ -c "Given: The QTestLog::Plain logger" \
+ -c "And given: The ""skip"" subtest"
+
It's possible to pass only the first -c options, to e.g. run all
tests with the Plain logger, but it's unfortunately not possible
to pass only the last -c option, to run the 'skip' subtest with
diff --git a/tests/auto/testlib/selftests/assert/CMakeLists.txt b/tests/auto/testlib/selftests/assert/CMakeLists.txt
index 07f1dd6825..947c056d02 100644
--- a/tests/auto/testlib/selftests/assert/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/assert/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from assert.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## assert Binary:
#####################################################################
qt_internal_add_executable(assert
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_assert.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(assert)
-# special case end
diff --git a/tests/auto/testlib/selftests/assert/tst_assert.cpp b/tests/auto/testlib/selftests/assert/tst_assert.cpp
index 202e3eeb29..abba0f388e 100644
--- a/tests/auto/testlib/selftests/assert/tst_assert.cpp
+++ b/tests/auto/testlib/selftests/assert/tst_assert.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
// Make sure we get a real Q_ASSERT even in release builds
#ifdef QT_NO_DEBUG
diff --git a/tests/auto/testlib/selftests/badxml/CMakeLists.txt b/tests/auto/testlib/selftests/badxml/CMakeLists.txt
index 733d826f97..21544707d7 100644
--- a/tests/auto/testlib/selftests/badxml/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/badxml/CMakeLists.txt
@@ -1,15 +1,17 @@
-# Generated from badxml.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## badxml Binary:
#####################################################################
qt_internal_add_executable(badxml
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_badxml.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Test
)
@@ -17,6 +19,4 @@ qt_internal_add_executable(badxml
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(badxml)
-# special case end
diff --git a/tests/auto/testlib/selftests/badxml/tst_badxml.cpp b/tests/auto/testlib/selftests/badxml/tst_badxml.cpp
index a50688ac95..a928a24d8a 100644
--- a/tests/auto/testlib/selftests/badxml/tst_badxml.cpp
+++ b/tests/auto/testlib/selftests/badxml/tst_badxml.cpp
@@ -1,31 +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 <QtCore/QCoreApplication>
#include <QtCore/QStringList>
@@ -105,9 +79,9 @@ void tst_BadXml::badDataTag_data() const
{
QTest::addColumn<bool>("shouldFail");
- foreach (char const* str, badStrings()) {
- QTest::newRow(qPrintable(QString("fail %1").arg(str))) << true;
- QTest::newRow(qPrintable(QString("pass %1").arg(str))) << false;
+ for (const QByteArray &ba: badStrings()) {
+ QTest::addRow("fail %s", ba.constData()) << true;
+ QTest::addRow("pass %s", ba.constData()) << false;
}
}
@@ -148,9 +122,8 @@ void tst_BadXml::badMessage_data() const
QTest::addColumn<QByteArray>("message");
int i = 0;
- foreach (QByteArray const& str, badStrings()) {
+ for (const QByteArray &str : badStrings())
QTest::newRow(qPrintable(QString::fromLatin1("string %1").arg(i++))) << str;
- }
}
/*
@@ -158,13 +131,12 @@ void tst_BadXml::badMessage_data() const
*/
QList<QByteArray> const& tst_BadXml::badStrings()
{
- static QList<QByteArray> out;
- if (out.isEmpty()) {
- out << "end cdata ]]> text ]]> more text";
- out << "quotes \" text\" more text";
- out << "xml close > open < tags < text";
- out << "all > \" mixed ]]> up > \" in < the ]]> hopes < of triggering \"< ]]> bugs";
- }
+ static const QList<QByteArray> out = {
+ "end cdata ]]> text ]]> more text",
+ "quotes \" text\" more text",
+ "xml close > open < tags < text",
+ "all > \" mixed ]]> up > \" in < the ]]> hopes < of triggering \"< ]]> bugs",
+ };
return out;
}
@@ -205,16 +177,16 @@ int main(int argc, char** argv)
if (badstring == -1) {
tst_BadXml test;
- return QTest::qExec(&test, args.count(), const_cast<char**>(args.data()));
+ return QTest::qExec(&test, args.size(), const_cast<char**>(args.data()));
}
QList<QByteArray> badstrings = tst_BadXml::badStrings();
- if (badstring >= badstrings.count())
+ if (badstring >= badstrings.size())
qFatal("`-badstring %d' is out of range", badstring);
tst_BadXmlSub test;
test.className = badstrings[badstring].constData();
- return QTest::qExec(&test, args.count(), const_cast<char**>(args.data()));
+ return QTest::qExec(&test, args.size(), const_cast<char**>(args.data()));
}
#include "tst_badxml.moc"
diff --git a/tests/auto/testlib/selftests/benchlibcallgrind/CMakeLists.txt b/tests/auto/testlib/selftests/benchlibcallgrind/CMakeLists.txt
index 3dfc0d7916..033724406c 100644
--- a/tests/auto/testlib/selftests/benchlibcallgrind/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/benchlibcallgrind/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from benchlibcallgrind.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## benchlibcallgrind Binary:
#####################################################################
qt_internal_add_executable(benchlibcallgrind
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_benchlibcallgrind.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(benchlibcallgrind)
-# special case end
diff --git a/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp b/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp
index b3cf623375..fc7f0b013b 100644
--- a/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp
+++ b/tests/auto/testlib/selftests/benchlibcallgrind/tst_benchlibcallgrind.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/QCoreApplication>
@@ -47,7 +22,7 @@ private slots:
void tst_BenchlibCallgrind::failInChildProcess()
{
#ifdef HAVE_VALGRIND_H
- static double f = 1.0;
+ [[maybe_unused]] static double f = 1.0;
QBENCHMARK {
for (int i = 0; i < 1000000; ++i) {
f *= 1.1;
@@ -88,7 +63,7 @@ QTEST_MAIN_WRAPPER(tst_BenchlibCallgrind,
|| qstrcmp(arg, "-callgrind") == 0;
}) == args.end()) {
args.push_back("-callgrind");
- argc = args.size();
+ argc = int(args.size());
argv = const_cast<char**>(&args[0]);
}
QTEST_MAIN_SETUP())
diff --git a/tests/auto/testlib/selftests/benchlibcounting/CMakeLists.txt b/tests/auto/testlib/selftests/benchlibcounting/CMakeLists.txt
index efc813bb27..76a1c96a44 100644
--- a/tests/auto/testlib/selftests/benchlibcounting/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/benchlibcounting/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from benchlibcounting.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## benchlibcounting Binary:
#####################################################################
qt_internal_add_executable(benchlibcounting
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_benchlibcounting.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(tst_selftests)
-# special case end
diff --git a/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp b/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp
index 9903a1bd59..8ac99a1f4e 100644
--- a/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp
+++ b/tests/auto/testlib/selftests/benchlibcounting/tst_benchlibcounting.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
#include <QTest>
@@ -62,7 +37,7 @@ void tst_BenchlibCounting::failingBenchmark()
QTEST_MAIN_WRAPPER(tst_BenchlibCounting,
std::vector<const char*> args(argv, argv + argc);
args.push_back("-eventcounter");
- argc = args.size();
+ argc = int(args.size());
argv = const_cast<char**>(&args[0]);
QTEST_MAIN_SETUP())
diff --git a/tests/auto/testlib/selftests/benchlibeventcounter/CMakeLists.txt b/tests/auto/testlib/selftests/benchlibeventcounter/CMakeLists.txt
index 0c9c5fdc32..e91340512b 100644
--- a/tests/auto/testlib/selftests/benchlibeventcounter/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/benchlibeventcounter/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from benchlibeventcounter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## benchlibeventcounter Binary:
#####################################################################
qt_internal_add_executable(benchlibeventcounter
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_benchlibeventcounter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(benchlibeventcounter)
-# special case end
diff --git a/tests/auto/testlib/selftests/benchlibeventcounter/tst_benchlibeventcounter.cpp b/tests/auto/testlib/selftests/benchlibeventcounter/tst_benchlibeventcounter.cpp
index a2dec3a45b..53c8f50ff2 100644
--- a/tests/auto/testlib/selftests/benchlibeventcounter/tst_benchlibeventcounter.cpp
+++ b/tests/auto/testlib/selftests/benchlibeventcounter/tst_benchlibeventcounter.cpp
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** 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/QCoreApplication>
#include <QTest>
+#if defined(Q_OS_WIN32)
#include <QWinEventNotifier>
+#endif
#include <QAbstractEventDispatcher>
/* Custom event dispatcher to ensure we don't receive any spontaneous events */
@@ -96,7 +73,7 @@ int main(int argc, char** argv)
{
std::vector<const char*> args(argv, argv + argc);
args.push_back("-eventcounter");
- argc = args.size();
+ argc = int(args.size());
argv = const_cast<char**>(&args[0]);
TestEventDispatcher dispatcher;
diff --git a/tests/auto/testlib/selftests/benchliboptions/CMakeLists.txt b/tests/auto/testlib/selftests/benchliboptions/CMakeLists.txt
index 94ee9dd501..1f6bfa9374 100644
--- a/tests/auto/testlib/selftests/benchliboptions/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/benchliboptions/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from benchliboptions.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## benchliboptions Binary:
#####################################################################
qt_internal_add_executable(benchliboptions
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_benchliboptions.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(tst_selftests)
-# special case end
diff --git a/tests/auto/testlib/selftests/benchliboptions/tst_benchliboptions.cpp b/tests/auto/testlib/selftests/benchliboptions/tst_benchliboptions.cpp
index 2795dbfabf..35ba5e5309 100644
--- a/tests/auto/testlib/selftests/benchliboptions/tst_benchliboptions.cpp
+++ b/tests/auto/testlib/selftests/benchliboptions/tst_benchliboptions.cpp
@@ -1,55 +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
#include <QtCore/QCoreApplication>
#include <QTest>
+#if defined(Q_OS_WIN32)
#include <QWinEventNotifier>
+#endif
#include <QAbstractEventDispatcher>
/* Custom event dispatcher to ensure we don't receive any spontaneous events */
-class TestEventDispatcher : public QAbstractEventDispatcher
+class TestEventDispatcher : public QAbstractEventDispatcherV2
{
Q_OBJECT
public:
- TestEventDispatcher(QObject* parent =0)
- : QAbstractEventDispatcher(parent)
- {}
void interrupt() override {}
bool processEvents(QEventLoop::ProcessEventsFlags) override { return false; }
void registerSocketNotifier(QSocketNotifier*) override {}
- void registerTimer(int,qint64,Qt::TimerType,QObject*) override {}
- QList<TimerInfo> registeredTimers(QObject*) const override { return QList<TimerInfo>(); }
+ void registerTimer(Qt::TimerId,Duration,Qt::TimerType,QObject*) override {}
+ QList<TimerInfoV2> timersForObject(QObject*) const override { return {}; }
void unregisterSocketNotifier(QSocketNotifier*) override {}
- bool unregisterTimer(int) override { return false; }
+ bool unregisterTimer(Qt::TimerId) override { return false; }
bool unregisterTimers(QObject*) override { return false; }
- int remainingTime(int) override { return 0; }
+ Duration remainingTime(Qt::TimerId) const override { return {}; }
void wakeUp() override {}
#ifdef Q_OS_WIN
diff --git a/tests/auto/testlib/selftests/benchlibtickcounter/CMakeLists.txt b/tests/auto/testlib/selftests/benchlibtickcounter/CMakeLists.txt
index 463a74eaf7..639e75c8bb 100644
--- a/tests/auto/testlib/selftests/benchlibtickcounter/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/benchlibtickcounter/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from benchlibtickcounter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## benchlibtickcounter Binary:
#####################################################################
qt_internal_add_executable(benchlibtickcounter
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_benchlibtickcounter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::TestPrivate
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(benchlibtickcounter)
-# special case end
diff --git a/tests/auto/testlib/selftests/benchlibtickcounter/tst_benchlibtickcounter.cpp b/tests/auto/testlib/selftests/benchlibtickcounter/tst_benchlibtickcounter.cpp
index 97ac22bb94..204a28599e 100644
--- a/tests/auto/testlib/selftests/benchlibtickcounter/tst_benchlibtickcounter.cpp
+++ b/tests/auto/testlib/selftests/benchlibtickcounter/tst_benchlibtickcounter.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
@@ -65,7 +40,7 @@ void tst_BenchlibTickCounter::threeBillionTicks()
QTEST_MAIN_WRAPPER(tst_BenchlibTickCounter,
std::vector<const char*> args(argv, argv + argc);
args.push_back("-tickcounter");
- argc = args.size();
+ argc = int(args.size());
argv = const_cast<char**>(&args[0]);
QTEST_MAIN_SETUP())
diff --git a/tests/auto/testlib/selftests/benchlibwalltime/CMakeLists.txt b/tests/auto/testlib/selftests/benchlibwalltime/CMakeLists.txt
index 830e415440..b4119726b3 100644
--- a/tests/auto/testlib/selftests/benchlibwalltime/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/benchlibwalltime/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from benchlibwalltime.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## benchlibwalltime Binary:
#####################################################################
qt_internal_add_executable(benchlibwalltime
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_benchlibwalltime.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(benchlibwalltime)
-# special case end
diff --git a/tests/auto/testlib/selftests/benchlibwalltime/tst_benchlibwalltime.cpp b/tests/auto/testlib/selftests/benchlibwalltime/tst_benchlibwalltime.cpp
index 96e84cb37a..ebe3de4585 100644
--- a/tests/auto/testlib/selftests/benchlibwalltime/tst_benchlibwalltime.cpp
+++ b/tests/auto/testlib/selftests/benchlibwalltime/tst_benchlibwalltime.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 <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/blacklisted/CMakeLists.txt b/tests/auto/testlib/selftests/blacklisted/CMakeLists.txt
index 87caa5770c..8e84038002 100644
--- a/tests/auto/testlib/selftests/blacklisted/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/blacklisted/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from blacklisted.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## blacklisted Binary:
#####################################################################
qt_internal_add_executable(blacklisted
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_blacklisted.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::TestPrivate
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(blacklisted)
-# special case end
diff --git a/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp b/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
index 90e7876f97..d59b6244c1 100644
--- a/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
+++ b/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
@@ -1,30 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QTEST_THROW_ON_FAILURE // fails ### investigate
+#undef QTEST_THROW_ON_SKIP // fails ### investigate
#include <QtCore/QCoreApplication>
#include <QTest>
@@ -90,6 +68,7 @@ void tst_Blacklisted::fail()
void tst_Blacklisted::multiFail() // cf. ../subtest/'s similar tests
{
+ const QTest::ThrowOnFailDisabler nothrow; // tests repeated QFAILs
++blacklisted;
for (int i = 0; i < 10; ++i)
[]() { QFAIL("This failure message should be repeated ten times"); }();
@@ -98,6 +77,7 @@ void tst_Blacklisted::multiFail() // cf. ../subtest/'s similar tests
void tst_Blacklisted::multiSkip()
{
+ const QTest::ThrowOnSkipDisabler nothrow; // tests repeated QSKIPs
// Similar to multiFail()
++skipped;
for (int i = 0; i < 10; ++i)
diff --git a/tests/auto/testlib/selftests/catch.cpp b/tests/auto/testlib/selftests/catch.cpp
index 5d27d400e3..37457fcca5 100644
--- a/tests/auto/testlib/selftests/catch.cpp
+++ b/tests/auto/testlib/selftests/catch.cpp
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtTest module 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
#define CATCH_CONFIG_RUNNER
#define CATCH_CLARA_CONFIG_CONSOLE_WIDTH 1000
diff --git a/tests/auto/testlib/selftests/catch_p.h b/tests/auto/testlib/selftests/catch_p.h
index bbe8786d8d..2c217922a8 100644
--- a/tests/auto/testlib/selftests/catch_p.h
+++ b/tests/auto/testlib/selftests/catch_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 QtTest module 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
#ifndef QCATCH_P_H
#define QCATCH_P_H
diff --git a/tests/auto/testlib/selftests/catch_p_p.h b/tests/auto/testlib/selftests/catch_p_p.h
index 47a31f9079..f22183557d 100644
--- a/tests/auto/testlib/selftests/catch_p_p.h
+++ b/tests/auto/testlib/selftests/catch_p_p.h
@@ -1,9 +1,9 @@
/*
- * Catch v2.11.3
- * Generated: 2020-03-19 13:44:21.042491
+ * 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) 2020 Two Blue Cubes Ltd. All rights reserved.
+ * 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)
@@ -14,8 +14,8 @@
#define CATCH_VERSION_MAJOR 2
-#define CATCH_VERSION_MINOR 11
-#define CATCH_VERSION_PATCH 3
+#define CATCH_VERSION_MINOR 13
+#define CATCH_VERSION_PATCH 10
#ifdef __clang__
# pragma clang system_header
@@ -66,13 +66,16 @@
#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 TARGET_OS_OSX == 1
-# define CATCH_PLATFORM_MAC
-# elif TARGET_OS_IPHONE == 1
-# define CATCH_PLATFORM_IPHONE
-# endif
+# 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
@@ -132,13 +135,9 @@ namespace Catch {
#endif
-#if defined(CATCH_CPP17_OR_GREATER)
-# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
-#endif
-
-// We have to avoid both ICC and Clang, because they try to mask themselves
-// as gcc, and we want only GCC in this block
-#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC)
+// 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" )
@@ -151,7 +150,20 @@ namespace Catch {
# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic push" )
# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "clang diagnostic pop" )
-# define CATCH_INTERNAL_IGNORE_BUT_WARN(...) (void)__builtin_constant_p(__VA_ARGS__)
+// 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\"" ) \
@@ -228,22 +240,26 @@ namespace Catch {
// Visual C++
#if defined(_MSC_VER)
-# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION __pragma( warning(push) )
-# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION __pragma( warning(pop) )
-
-# if _MSC_VER >= 1900 // Visual Studio 2015 or newer
-# define CATCH_INTERNAL_CONFIG_CPP17_UNCAUGHT_EXCEPTIONS
+// 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
-# define CATCH_INTERNAL_CONFIG_WINDOWS_SEH
+# 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(__clang__) // Handle Clang masquerading for msvc
# 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
@@ -311,7 +327,10 @@ namespace Catch {
// Check if byte is available and usable
# if __has_include(<cstddef>) && defined(CATCH_CPP17_OR_GREATER)
- # define CATCH_INTERNAL_CONFIG_CPP17_BYTE
+ # 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
@@ -354,10 +373,6 @@ namespace Catch {
# define CATCH_CONFIG_CPP17_OPTIONAL
#endif
-#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
-
#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
@@ -756,7 +771,7 @@ constexpr auto operator "" _catch_sr( char const* rawChars, std::size_t size ) n
#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, _4, _5, _6)
+#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)
@@ -925,13 +940,13 @@ namespace Catch {
#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. Also *_t format is preferred over
- // typename *::type format.
- template <typename Func, typename U>
- using FunctionReturnType = std::remove_reference_t<std::remove_cv_t<std::invoke_result_t<Func, U>>>;
+ // 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
- template <typename Func, typename U>
- using FunctionReturnType = typename std::remove_reference<typename std::remove_cv<typename std::result_of<Func(U)>::type>::type>::type;
+ // 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
@@ -997,34 +1012,34 @@ struct AutoReg : NonCopyable {
#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__ )
+ 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__ ) )
+ 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__ )
+ 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__ ) )
+ 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__ )
+ 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__ ) )
+ 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__ )
+ 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__ ) )
+ 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
@@ -1037,7 +1052,7 @@ struct AutoReg : NonCopyable {
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__ )
+ 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, ... ) \
@@ -1059,7 +1074,7 @@ struct AutoReg : NonCopyable {
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__ )
+ 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, ... ) \
@@ -1086,7 +1101,7 @@ struct AutoReg : NonCopyable {
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++, 0)... };/* NOLINT */ \
+ (void)expander{(reg_test(Types{}, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), index++)... };/* NOLINT */ \
}\
};\
static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
@@ -1100,18 +1115,18 @@ struct AutoReg : NonCopyable {
#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__ )
+ 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__ ) )
+ 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__ )
+ 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__ ) )
+ 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) \
@@ -1132,7 +1147,7 @@ struct AutoReg : NonCopyable {
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++, 0)... };/* NOLINT */\
+ (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 ) = [](){ \
@@ -1149,18 +1164,18 @@ struct AutoReg : NonCopyable {
#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__)
+ 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__ ) )
+ 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__)
+ 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__ ) )
+ 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)\
@@ -1176,7 +1191,7 @@ struct AutoReg : NonCopyable {
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++, 0)... };/* NOLINT */\
+ (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 ) = [](){ \
@@ -1191,7 +1206,7 @@ struct AutoReg : NonCopyable {
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 )
+ 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 \
@@ -1210,7 +1225,7 @@ struct AutoReg : NonCopyable {
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++, 0)... };/* NOLINT */ \
+ (void)expander{(reg_test(Types{}, #ClassName, Catch::NameAndTags{ Name " - " + std::string(tmpl_types[index]), Tags } ), index++)... };/* NOLINT */ \
}\
};\
static int INTERNAL_CATCH_UNIQUE_NAME( globalRegistrar ) = [](){\
@@ -1224,18 +1239,18 @@ struct AutoReg : NonCopyable {
#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__ )
+ 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__ ) )
+ 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__ )
+ 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__ ) )
+ 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)\
@@ -1259,7 +1274,7 @@ struct AutoReg : NonCopyable {
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++, 0)... };/* NOLINT */ \
+ (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 ) = [](){\
@@ -1276,18 +1291,18 @@ struct AutoReg : NonCopyable {
#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__ )
+ 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__ ) )
+ 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__ )
+ 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__ ) )
+ 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) \
@@ -1306,7 +1321,7 @@ struct AutoReg : NonCopyable {
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++, 0)... };/* NOLINT */ \
+ (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 ) = [](){\
@@ -1321,7 +1336,7 @@ struct AutoReg : NonCopyable {
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 )
+ 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
@@ -1810,8 +1825,8 @@ namespace Catch {
#endif
namespace Detail {
- template<typename InputIterator>
- std::string rangeToString(InputIterator first, InputIterator last) {
+ template<typename InputIterator, typename Sentinel = InputIterator>
+ std::string rangeToString(InputIterator first, Sentinel last) {
ReusableStringStream rss;
rss << "{ ";
if (first != last) {
@@ -1969,20 +1984,27 @@ namespace Catch {
#endif // CATCH_CONFIG_ENABLE_VARIANT_STRINGMAKER
namespace Catch {
- struct not_this_one {}; // Tag type for detecting which begin/ end are being selected
-
- // Import begin/ end from std here so they are considered alongside the fallback (...) overloads in this namespace
+ // Import begin/ end from std here
using std::begin;
using std::end;
- not_this_one begin( ... );
- not_this_one 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 {
- static const bool value =
- !std::is_same<decltype(begin(std::declval<T>())), not_this_one>::value &&
- !std::is_same<decltype(end(std::declval<T>())), not_this_one>::value;
+ struct is_range : detail::is_range_impl<T> {
};
#if defined(_MANAGED) // Managed types are never ranges
@@ -2350,6 +2372,18 @@ namespace Catch {
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 {
@@ -2430,7 +2464,7 @@ namespace Catch {
virtual void sectionEnded( SectionEndInfo const& endInfo ) = 0;
virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) = 0;
- virtual auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& = 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;
@@ -2994,6 +3028,9 @@ namespace Catch {
{}
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());
@@ -3003,6 +3040,7 @@ namespace Catch {
catch( T& ex ) {
return m_translateFunction( ex );
}
+#endif
}
protected:
@@ -3055,7 +3093,7 @@ namespace Detail {
Approx operator-() const;
template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type>
- Approx operator()( T const& value ) {
+ Approx operator()( T const& value ) const {
Approx approx( static_cast<double>(value) );
approx.m_epsilon = m_epsilon;
approx.m_margin = m_margin;
@@ -3565,12 +3603,12 @@ namespace Catch {
namespace Matchers {
namespace Vector {
- template<typename T>
- struct ContainsElementMatcher : MatcherBase<std::vector<T>> {
+ template<typename T, typename Alloc>
+ struct ContainsElementMatcher : MatcherBase<std::vector<T, Alloc>> {
ContainsElementMatcher(T const &comparator) : m_comparator( comparator) {}
- bool match(std::vector<T> const &v) const override {
+ bool match(std::vector<T, Alloc> const &v) const override {
for (auto const& el : v) {
if (el == m_comparator) {
return true;
@@ -3586,12 +3624,12 @@ namespace Matchers {
T const& m_comparator;
};
- template<typename T>
- struct ContainsMatcher : MatcherBase<std::vector<T>> {
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct ContainsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
- ContainsMatcher(std::vector<T> const &comparator) : m_comparator( comparator ) {}
+ ContainsMatcher(std::vector<T, AllocComp> const &comparator) : m_comparator( comparator ) {}
- bool match(std::vector<T> const &v) const override {
+ bool match(std::vector<T, AllocMatch> const &v) const override {
// !TBD: see note in EqualsMatcher
if (m_comparator.size() > v.size())
return false;
@@ -3613,18 +3651,18 @@ namespace Matchers {
return "Contains: " + ::Catch::Detail::stringify( m_comparator );
}
- std::vector<T> const& m_comparator;
+ std::vector<T, AllocComp> const& m_comparator;
};
- template<typename T>
- struct EqualsMatcher : MatcherBase<std::vector<T>> {
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct EqualsMatcher : MatcherBase<std::vector<T, AllocMatch>> {
- EqualsMatcher(std::vector<T> const &comparator) : m_comparator( comparator ) {}
+ EqualsMatcher(std::vector<T, AllocComp> const &comparator) : m_comparator( comparator ) {}
- bool match(std::vector<T> const &v) const override {
+ 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> etc
+ // 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;
@@ -3636,15 +3674,15 @@ namespace Matchers {
std::string describe() const override {
return "Equals: " + ::Catch::Detail::stringify( m_comparator );
}
- std::vector<T> const& m_comparator;
+ std::vector<T, AllocComp> const& m_comparator;
};
- template<typename T>
- struct ApproxMatcher : MatcherBase<std::vector<T>> {
+ template<typename T, typename AllocComp, typename AllocMatch>
+ struct ApproxMatcher : MatcherBase<std::vector<T, AllocMatch>> {
- ApproxMatcher(std::vector<T> const& comparator) : m_comparator( comparator ) {}
+ ApproxMatcher(std::vector<T, AllocComp> const& comparator) : m_comparator( comparator ) {}
- bool match(std::vector<T> const &v) const override {
+ 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)
@@ -3671,16 +3709,14 @@ namespace Matchers {
return *this;
}
- std::vector<T> const& m_comparator;
+ std::vector<T, AllocComp> const& m_comparator;
mutable Catch::Detail::Approx approx = Catch::Detail::Approx::custom();
};
- template<typename T>
- struct UnorderedEqualsMatcher : MatcherBase<std::vector<T>> {
- UnorderedEqualsMatcher(std::vector<T> const& target) : m_target(target) {}
- bool match(std::vector<T> const& vec) const override {
- // Note: This is a reimplementation of std::is_permutation,
- // because I don't want to include <algorithm> inside the common path
+ 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;
}
@@ -3691,7 +3727,7 @@ namespace Matchers {
return "UnorderedEquals: " + ::Catch::Detail::stringify(m_target);
}
private:
- std::vector<T> const& m_target;
+ std::vector<T, AllocComp> const& m_target;
};
} // namespace Vector
@@ -3699,29 +3735,29 @@ namespace Matchers {
// The following functions create the actual matcher objects.
// This allows the types to be inferred
- template<typename T>
- Vector::ContainsMatcher<T> Contains( std::vector<T> const& comparator ) {
- return Vector::ContainsMatcher<T>( comparator );
+ 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>
- Vector::ContainsElementMatcher<T> VectorContains( T const& comparator ) {
- return Vector::ContainsElementMatcher<T>( 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>
- Vector::EqualsMatcher<T> Equals( std::vector<T> const& comparator ) {
- return Vector::EqualsMatcher<T>( 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>
- Vector::ApproxMatcher<T> Approx( std::vector<T> const& comparator ) {
- return Vector::ApproxMatcher<T>( 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>
- Vector::UnorderedEqualsMatcher<T> UnorderedEquals(std::vector<T> const& target) {
- return Vector::UnorderedEqualsMatcher<T>(target);
+ 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
@@ -4040,16 +4076,16 @@ namespace Generators {
return makeGenerators( value( T( std::forward<U>( val ) ) ), std::forward<Gs>( moreGenerators )... );
}
- auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker&;
+ 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( SourceLineInfo const& lineInfo, L const& generatorExpression ) -> decltype(std::declval<decltype(generatorExpression())>().get()) {
+ 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( lineInfo );
+ IGeneratorTracker& tracker = acquireGeneratorTracker( generatorName, lineInfo );
if (!tracker.hasGenerator()) {
tracker.setGenerator(pf::make_unique<Generators<UnderlyingType>>(generatorExpression()));
}
@@ -4062,11 +4098,17 @@ namespace Generators {
} // namespace Catch
#define GENERATE( ... ) \
- Catch::Generators::generate( CATCH_INTERNAL_LINEINFO, [ ]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+ 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( CATCH_INTERNAL_LINEINFO, [=]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+ 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( CATCH_INTERNAL_LINEINFO, [&]{ using namespace Catch::Generators; return makeGenerators( __VA_ARGS__ ); } ) //NOLINT(google-build-using-namespace)
+ 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
@@ -4123,7 +4165,7 @@ namespace Generators {
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 = next();
+ auto has_initial_value = nextImpl();
if (!has_initial_value) {
Catch::throw_exception(GeneratorException("No valid value found in filtered generator"));
}
@@ -4135,6 +4177,11 @@ namespace Generators {
}
bool next() override {
+ return nextImpl();
+ }
+
+ private:
+ bool nextImpl() {
bool success = m_generator.next();
if (!success) {
return false;
@@ -4476,6 +4523,7 @@ namespace Catch {
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;
@@ -5248,6 +5296,7 @@ namespace Catch {
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;
@@ -5298,6 +5347,7 @@ namespace Catch {
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;
@@ -5415,6 +5465,8 @@ namespace Catch {
} // namespace Catch
// end catch_outlier_classification.hpp
+
+#include <iterator>
#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
#include <string>
@@ -5675,6 +5727,9 @@ namespace Catch {
// 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>
@@ -6068,8 +6123,6 @@ namespace Catch {
static std::string getDescription();
- ReporterPreferences getPreferences() const override;
-
void noMatchingTestCases(std::string const& spec) override;
void assertionStarting(AssertionInfo const&) override;
@@ -6298,9 +6351,10 @@ namespace Catch {
void writeTestCase(TestCaseNode const& testCaseNode);
- void writeSection(std::string const& className,
- std::string const& rootName,
- SectionNode const& sectionNode);
+ 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);
@@ -6517,20 +6571,18 @@ namespace Catch {
return {};
}
};
- template <typename Sig>
- using ResultOf_t = typename std::result_of<Sig>::type;
// invoke and not return void :(
template <typename Fun, typename... Args>
- CompleteType_t<ResultOf_t<Fun(Args...)>> complete_invoke(Fun&& fun, Args&&... args) {
- return CompleteInvoker<ResultOf_t<Fun(Args...)>>::invoke(std::forward<Fun>(fun), std::forward<Args>(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<Detail::ResultOf_t<Fun()>> user_code(Fun&& fun) {
+ Detail::CompleteType_t<FunctionReturnType<Fun>> user_code(Fun&& fun) {
CATCH_TRY{
return Detail::complete_invoke(std::forward<Fun>(fun));
} CATCH_CATCH_ALL{
@@ -6775,8 +6827,8 @@ namespace Catch {
Result result;
int iterations;
};
- template <typename Clock, typename Sig>
- using TimingOf = Timing<ClockDuration<Clock>, Detail::CompleteType_t<Detail::ResultOf_t<Sig>>>;
+ template <typename Clock, typename Func, typename... Args>
+ using TimingOf = Timing<ClockDuration<Clock>, Detail::CompleteType_t<FunctionReturnType<Func, Args...>>>;
} // namespace Benchmark
} // namespace Catch
@@ -6787,7 +6839,7 @@ namespace Catch {
namespace Benchmark {
namespace Detail {
template <typename Clock, typename Fun, typename... Args>
- TimingOf<Clock, Fun(Args...)> measure(Fun&& fun, Args&&... 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();
@@ -6806,11 +6858,11 @@ namespace Catch {
namespace Benchmark {
namespace Detail {
template <typename Clock, typename Fun>
- TimingOf<Clock, Fun(int)> measure_one(Fun&& fun, int iters, std::false_type) {
+ 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) {
+ 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));
@@ -6827,7 +6879,7 @@ namespace Catch {
};
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) {
+ 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)>());
@@ -6837,7 +6889,7 @@ namespace Catch {
}
iters *= 2;
}
- throw optimized_away_error{};
+ Catch::throw_exception(optimized_away_error{});
}
} // namespace Detail
} // namespace Benchmark
@@ -6845,6 +6897,7 @@ namespace Catch {
// end catch_run_for_at_least.hpp
#include <algorithm>
+#include <iterator>
namespace Catch {
namespace Benchmark {
@@ -7015,8 +7068,8 @@ namespace Catch {
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);
+ auto lo = (std::max)(cumn(a1), 0);
+ auto hi = (std::min)(cumn(a2), n - 1);
return { point, resample[lo], resample[hi], confidence_level };
}
@@ -7085,7 +7138,9 @@ namespace Catch {
}
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_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) {
@@ -7340,8 +7395,6 @@ namespace Catch {
template <typename T, bool Destruct>
struct ObjectStorage
{
- using TStorage = typename std::aligned_storage<sizeof(T), std::alignment_of<T>::value>::type;
-
ObjectStorage() : data() {}
ObjectStorage(const ObjectStorage& other)
@@ -7384,7 +7437,7 @@ namespace Catch {
return *static_cast<T*>(static_cast<void*>(&data));
}
- TStorage data;
+ struct { alignas(T) unsigned char data[sizeof(T)]; } data;
};
}
@@ -7425,23 +7478,37 @@ namespace TestCaseTracking {
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;
+ }
};
- struct ITracker;
+ class ITracker;
using ITrackerPtr = std::shared_ptr<ITracker>;
- struct ITracker {
- virtual ~ITracker();
+ class ITracker {
+ NameAndLocation m_nameAndLocation;
+
+ public:
+ ITracker(NameAndLocation const& nameAndLoc) :
+ m_nameAndLocation(nameAndLoc)
+ {}
// static queries
- virtual NameAndLocation const& nameAndLocation() const = 0;
+ 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;
@@ -7496,7 +7563,6 @@ namespace TestCaseTracking {
};
using Children = std::vector<ITrackerPtr>;
- NameAndLocation m_nameAndLocation;
TrackerContext& m_ctx;
ITracker* m_parent;
Children m_children;
@@ -7505,11 +7571,13 @@ namespace TestCaseTracking {
public:
TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent );
- NameAndLocation const& nameAndLocation() const override;
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;
@@ -7548,6 +7616,10 @@ namespace TestCaseTracking {
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
@@ -7713,7 +7785,7 @@ namespace Catch {
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 sg = (std::min)(mg_min / 4., sb / std::sqrt(n));
double sg2 = sg * sg;
double sb2 = sb * sb;
@@ -7732,7 +7804,7 @@ namespace Catch {
return (nc / n) * (sb2 - nc * sg2);
};
- return std::min(var_out(1), var_out(std::min(c_max(0.), c_max(mg_min)))) / sb2;
+ 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) {
@@ -7872,13 +7944,11 @@ namespace Catch {
#ifdef CATCH_PLATFORM_MAC
- // taken from Catch v3.0.0-preview.3
#if defined(__i386__) || defined(__x86_64__)
#define CATCH_TRAP() __asm__("int $3\n" : : ) /* NOLINT */
#elif defined(__aarch64__)
- #define CATCH_TRAP() __asm__(".inst 0xd4200000")
+ #define CATCH_TRAP() __asm__(".inst 0xd43e0000")
#endif
- // end taken from Catch v3.0.0-preview.3
#elif defined(CATCH_PLATFORM_IPHONE)
@@ -7924,86 +7994,58 @@ namespace Catch {
// start catch_fatal_condition.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
-#if defined( CATCH_CONFIG_WINDOWS_SEH )
+#include <cassert>
namespace Catch {
- struct FatalConditionHandler {
-
- static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo);
+ // 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();
- static void reset();
~FatalConditionHandler();
- private:
- static bool isSet;
- static ULONG guaranteeSize;
- static PVOID exceptionHandlerHandle;
- };
-
-} // namespace Catch
-
-#elif defined ( CATCH_CONFIG_POSIX_SIGNALS )
-
-#include <signal.h>
-
-namespace Catch {
-
- struct FatalConditionHandler {
-
- static bool isSet;
- static struct sigaction oldSigActions[];
- static stack_t oldSigStack;
- static char altStackMem[];
-
- static void handleSignal( int sig );
+ void engage() {
+ assert(!m_started && "Handler cannot be installed twice.");
+ m_started = true;
+ engage_platform();
+ }
- FatalConditionHandler();
- ~FatalConditionHandler();
- static void reset();
+ void disengage() {
+ assert(m_started && "Handler cannot be uninstalled without being installed first");
+ m_started = false;
+ disengage_platform();
+ }
};
-} // namespace Catch
-
-#else
-
-namespace Catch {
- struct FatalConditionHandler {
- void reset();
+ //! 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();
+ }
};
-}
-#endif
+} // end namespace Catch
// end catch_fatal_condition.h
#include <string>
@@ -8063,7 +8105,7 @@ namespace Catch {
void sectionEnded( SectionEndInfo const& endInfo ) override;
void sectionEndedEarly( SectionEndInfo const& endInfo ) override;
- auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& override;
+ auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& override;
#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
void benchmarkPreparing( std::string const& name ) override;
@@ -8129,6 +8171,7 @@ namespace Catch {
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;
@@ -8368,7 +8411,6 @@ namespace Catch {
#define CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
#undef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
#endif
-
#if 0 // Disabled by Qt so that test failures are not line-broken
#define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH-1
#endif
@@ -9042,7 +9084,7 @@ namespace detail {
}
inline auto convertInto( std::string const &source, bool &target ) -> ParserResult {
std::string srcLC = source;
- std::transform( srcLC.begin(), srcLC.end(), srcLC.begin(), []( char c ) { return static_cast<char>( std::tolower(c) ); } );
+ 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")
@@ -9811,6 +9853,9 @@ namespace Catch {
| 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" )
@@ -9958,6 +10003,7 @@ namespace Catch {
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; }
@@ -10000,6 +10046,36 @@ namespace Catch {
}
// 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 {
@@ -10322,8 +10398,7 @@ namespace Catch {
#if defined(CATCH_PLATFORM_MAC) || defined(CATCH_PLATFORM_IPHONE)
-# include <assert.h>
-# include <stdbool.h>
+# include <cassert>
# include <sys/types.h>
# include <unistd.h>
# include <cstddef>
@@ -10517,7 +10592,7 @@ namespace Catch {
// 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 occurence of ":"
+ // Find last occurrence of ":"
size_t name_start = enumInstance.size();
while (name_start > 0 && enumInstance[name_start - 1] != ':') {
--name_start;
@@ -10679,25 +10754,47 @@ namespace Catch {
// end catch_exception_translator_registry.cpp
// start catch_fatal_condition.cpp
-#if defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wmissing-field-initializers"
-#endif
+#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 {
- // Report the error condition
+ //! Signals fatal error message to the run context
void reportFatal( char const * const message ) {
Catch::getCurrentContext().getResultCapture()->handleFatalErrorCondition( message );
}
-}
-#endif // signals/SEH handling
+ //! 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.
@@ -10710,7 +10807,7 @@ namespace Catch {
{ static_cast<DWORD>(EXCEPTION_INT_DIVIDE_BY_ZERO), "Divide by zero error" },
};
- LONG CALLBACK FatalConditionHandler::handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) {
+ static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) {
for (auto const& def : signalDefs) {
if (ExceptionInfo->ExceptionRecord->ExceptionCode == def.id) {
reportFatal(def.name);
@@ -10721,38 +10818,50 @@ namespace Catch {
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() {
- isSet = true;
- // 32k seems enough for Catch to handle stack overflow,
- // but the value was found experimentally, so there is no strong guarantee
- guaranteeSize = 32 * 1024;
- exceptionHandlerHandle = nullptr;
+ 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);
- // Pass in guarantee size to be filled
- SetThreadStackGuarantee(&guaranteeSize);
+ if (!exceptionHandlerHandle) {
+ CATCH_RUNTIME_ERROR("Could not register vectored exception handler");
+ }
}
- void FatalConditionHandler::reset() {
- if (isSet) {
- RemoveVectoredExceptionHandler(exceptionHandlerHandle);
- SetThreadStackGuarantee(&guaranteeSize);
- exceptionHandlerHandle = nullptr;
- isSet = false;
+ void FatalConditionHandler::disengage_platform() {
+ if (!RemoveVectoredExceptionHandler(exceptionHandlerHandle)) {
+ CATCH_RUNTIME_ERROR("Could not unregister vectored exception handler");
}
+ exceptionHandlerHandle = nullptr;
}
- FatalConditionHandler::~FatalConditionHandler() {
- reset();
- }
+} // end namespace Catch
-bool FatalConditionHandler::isSet = false;
-ULONG FatalConditionHandler::guaranteeSize = 0;
-PVOID FatalConditionHandler::exceptionHandlerHandle = nullptr;
+#endif // CATCH_CONFIG_WINDOWS_SEH
-} // namespace Catch
+#if defined( CATCH_CONFIG_POSIX_SIGNALS )
-#elif defined( CATCH_CONFIG_POSIX_SIGNALS )
+#include <signal.h>
namespace Catch {
@@ -10761,10 +10870,6 @@ namespace Catch {
const char* name;
};
- // 32kb for the alternate stack seems to be sufficient. However, this value
- // is experimentally determined, so that's not guaranteed.
- static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ;
-
static SignalDefs signalDefs[] = {
{ SIGINT, "SIGINT - Terminal interrupt signal" },
{ SIGILL, "SIGILL - Illegal instruction signal" },
@@ -10774,7 +10879,32 @@ namespace Catch {
{ SIGABRT, "SIGABRT - Abort (abnormal termination) signal" }
};
- void FatalConditionHandler::handleSignal( int sig ) {
+// 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) {
@@ -10782,16 +10912,33 @@ namespace Catch {
break;
}
}
- reset();
- reportFatal(name);
+ // 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() {
- isSet = true;
+ 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 = sigStackSize;
+ sigStack.ss_size = altStackSize;
sigStack.ss_flags = 0;
sigaltstack(&sigStack, &oldSigStack);
struct sigaction sa = { };
@@ -10803,40 +10950,17 @@ namespace Catch {
}
}
- FatalConditionHandler::~FatalConditionHandler() {
- reset();
- }
+#if defined(__GNUC__)
+# pragma GCC diagnostic pop
+#endif
- void FatalConditionHandler::reset() {
- if( isSet ) {
- // Set signals back to previous values -- hopefully nobody overwrote them in the meantime
- 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);
- isSet = false;
- }
+ void FatalConditionHandler::disengage_platform() {
+ restorePreviousSignalHandlers();
}
- bool FatalConditionHandler::isSet = false;
- struct sigaction FatalConditionHandler::oldSigActions[sizeof(signalDefs)/sizeof(SignalDefs)] = {};
- stack_t FatalConditionHandler::oldSigStack = {};
- char FatalConditionHandler::altStackMem[sigStackSize] = {};
-
-} // namespace Catch
-
-#else
-
-namespace Catch {
- void FatalConditionHandler::reset() {}
-}
-
-#endif // signals/SEH handling
+} // end namespace Catch
-#if defined(__GNUC__)
-# pragma GCC diagnostic pop
-#endif
+#endif // CATCH_CONFIG_POSIX_SIGNALS
// end catch_fatal_condition.cpp
// start catch_generators.cpp
@@ -10855,8 +10979,8 @@ namespace Generators {
GeneratorUntypedBase::~GeneratorUntypedBase() {}
- auto acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
- return getResultCapture().acquireGeneratorTracker( lineInfo );
+ auto acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
+ return getResultCapture().acquireGeneratorTracker( generatorName, lineInfo );
}
} // namespace Generators
@@ -11391,7 +11515,8 @@ namespace {
return lhs == rhs;
}
- auto ulpDiff = std::abs(lc - rc);
+ // static cast as a workaround for IBM XLC
+ auto ulpDiff = std::abs(static_cast<FP>(lc - rc));
return static_cast<uint64_t>(ulpDiff) <= maxUlpDiff;
}
@@ -11565,7 +11690,6 @@ Floating::WithinRelMatcher WithinRel(float target) {
} // namespace Matchers
} // namespace Catch
-
// end catch_matchers_floating.cpp
// start catch_matchers_generic.cpp
@@ -11743,10 +11867,10 @@ namespace Catch {
Capturer::Capturer( StringRef macroName, SourceLineInfo const& lineInfo, ResultWas::OfType resultType, StringRef names ) {
auto trimmed = [&] (size_t start, size_t end) {
- while (names[start] == ',' || isspace(names[start])) {
+ while (names[start] == ',' || isspace(static_cast<unsigned char>(names[start]))) {
++start;
}
- while (names[end] == ',' || isspace(names[end])) {
+ while (names[end] == ',' || isspace(static_cast<unsigned char>(names[end]))) {
--end;
}
return names.substr(start, end - start + 1);
@@ -11981,7 +12105,7 @@ namespace Catch {
if (tmpnam_s(m_buffer)) {
CATCH_RUNTIME_ERROR("Could not get a temp filename");
}
- if (fopen_s(&m_file, m_buffer, "w")) {
+ 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");
@@ -12276,11 +12400,13 @@ namespace Catch {
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
@@ -12363,7 +12489,11 @@ namespace Catch {
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;
@@ -12467,17 +12597,32 @@ namespace Catch {
std::shared_ptr<GeneratorTracker> tracker;
ITracker& currentTracker = ctx.currentTracker();
- if( TestCaseTracking::ITrackerPtr childTracker = currentTracker.findChild( nameAndLocation ) ) {
+ // 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 {
+ } else {
tracker = std::make_shared<GeneratorTracker>( nameAndLocation, ctx, &currentTracker );
currentTracker.addChild( tracker );
}
- if( !ctx.completedCycle() && !tracker->isComplete() ) {
+ if( !tracker->isComplete() ) {
tracker->open();
}
@@ -12491,8 +12636,68 @@ namespace Catch {
}
void close() override {
TrackerBase::close();
- // Generator interface only finds out if it has another item on atual move
- if (m_runState == CompletedSuccessfully && m_generator->next()) {
+ // 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;
}
@@ -12628,10 +12833,10 @@ namespace Catch {
return true;
}
- auto RunContext::acquireGeneratorTracker( SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
+ auto RunContext::acquireGeneratorTracker( StringRef generatorName, SourceLineInfo const& lineInfo ) -> IGeneratorTracker& {
using namespace Generators;
- GeneratorTracker& tracker = GeneratorTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( "generator", lineInfo ) );
- assert( tracker.isOpen() );
+ GeneratorTracker& tracker = GeneratorTracker::acquire(m_trackerContext,
+ TestCaseTracking::NameAndLocation( static_cast<std::string>(generatorName), lineInfo ) );
m_lastAssertionInfo.lineInfo = lineInfo;
return tracker;
}
@@ -12674,17 +12879,17 @@ namespace Catch {
#if defined(CATCH_CONFIG_ENABLE_BENCHMARKING)
void RunContext::benchmarkPreparing(std::string const& name) {
- m_reporter->benchmarkPreparing(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);
- }
+ void RunContext::benchmarkFailed(std::string const & error) {
+ m_reporter->benchmarkFailed(error);
+ }
#endif // CATCH_CONFIG_ENABLE_BENCHMARKING
void RunContext::pushScopedMessage(MessageInfo const & message) {
@@ -12818,9 +13023,8 @@ namespace Catch {
}
void RunContext::invokeActiveTestCase() {
- FatalConditionHandler fatalConditionHandler; // Handle signals
+ FatalConditionHandlerGuard _(&m_fatalConditionhandler);
m_activeTestCase->invoke();
- fatalConditionHandler.reset();
}
void RunContext::handleUnfinishedSections() {
@@ -13188,6 +13392,10 @@ namespace Catch {
filename.erase(0, lastSlash);
filename[0] = '#';
}
+ else
+ {
+ filename.insert(0, "#");
+ }
auto lastDot = filename.find_last_of('.');
if (lastDot != std::string::npos) {
@@ -13350,7 +13558,7 @@ namespace Catch {
// Handle list request
if( Option<std::size_t> listed = list( m_config ) )
- return static_cast<int>( *listed );
+ return (std::min) (MaxExitCode, static_cast<int>(*listed));
TestGroup tests { m_config };
auto const totals = tests.execute();
@@ -13405,6 +13613,7 @@ 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 {
@@ -13420,6 +13629,7 @@ void StartupExceptionRegistry::add( std::exception_ptr const& exception ) noexce
}
} // end namespace Catch
+#endif
// end catch_startup_exception_registry.cpp
// start catch_stream.cpp
@@ -13604,7 +13814,7 @@ namespace Catch {
namespace {
char toLowerCh(char c) {
- return static_cast<char>( std::tolower( c ) );
+ return static_cast<char>( std::tolower( static_cast<unsigned char>(c) ) );
}
}
@@ -13980,27 +14190,81 @@ namespace Catch {
// end catch_test_case_info.cpp
// start catch_test_case_registry_impl.cpp
+#include <algorithm>
#include <sstream>
namespace Catch {
- std::vector<TestCase> sortTests( IConfig const& config, std::vector<TestCase> const& unsortedTestCases ) {
+ 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;
+ }
- std::vector<TestCase> sorted = unsortedTestCases;
+ 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::InLexicographicalOrder:
- std::sort( sorted.begin(), sorted.end() );
- break;
- case RunTests::InRandomOrder:
- seedRng( config );
- std::shuffle( sorted.begin(), sorted.end(), rng() );
- break;
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 sorted;
+ return unsortedTestCases;
}
bool isThrowSafe( TestCase const& testCase, IConfig const& config ) {
@@ -14137,15 +14401,12 @@ namespace TestCaseTracking {
m_currentTracker = tracker;
}
- TrackerBase::TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent )
- : m_nameAndLocation( nameAndLocation ),
+ TrackerBase::TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ):
+ ITracker(nameAndLocation),
m_ctx( ctx ),
m_parent( parent )
{}
- NameAndLocation const& TrackerBase::nameAndLocation() const {
- return m_nameAndLocation;
- }
bool TrackerBase::isComplete() const {
return m_runState == CompletedSuccessfully || m_runState == Failed;
}
@@ -14261,7 +14522,8 @@ namespace TestCaseTracking {
bool SectionTracker::isComplete() const {
bool complete = true;
- if ((m_filters.empty() || m_filters[0] == "")
+ if (m_filters.empty()
+ || m_filters[0] == ""
|| std::find(m_filters.begin(), m_filters.end(), m_trimmed_name) != m_filters.end()) {
complete = TrackerBase::isComplete();
}
@@ -14306,6 +14568,14 @@ namespace TestCaseTracking {
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;
@@ -14594,6 +14864,7 @@ namespace Catch {
m_pos = m_arg.size();
m_substring.clear();
m_patternName.clear();
+ m_realPatternPos = 0;
return false;
}
endMode();
@@ -14612,6 +14883,7 @@ namespace Catch {
}
m_patternName.clear();
+ m_realPatternPos = 0;
return token;
}
@@ -15038,11 +15310,48 @@ namespace Catch {
// 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_CPP17_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();
@@ -15082,7 +15391,7 @@ namespace Catch {
}
Version const& libraryVersion() {
- static Version version( 2, 11, 3, "", 0 );
+ static Version version( 2, 13, 10, "", 0 );
return version;
}
@@ -15484,6 +15793,17 @@ namespace Catch {
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;
@@ -15750,10 +16070,6 @@ private:
return "Reports test results on a single line, suitable for IDEs";
}
- ReporterPreferences CompactReporter::getPreferences() const {
- return m_reporterPrefs;
- }
-
void CompactReporter::noMatchingTestCases( std::string const& spec ) {
stream << "No test cases matched '" << spec << '\'' << std::endl;
}
@@ -15780,8 +16096,9 @@ private:
}
void CompactReporter::sectionEnded(SectionStats const& _sectionStats) {
- if (m_config->showDurations() == ShowDurations::Always) {
- stream << getFormattedDuration(_sectionStats.durationInSeconds) << " s: " << _sectionStats.sectionInfo.name << std::endl;
+ double dur = _sectionStats.durationInSeconds;
+ if ( shouldShowDuration( *m_config, dur ) ) {
+ stream << getFormattedDuration( dur ) << " s: " << _sectionStats.sectionInfo.name << std::endl;
}
}
@@ -16145,7 +16462,7 @@ ConsoleReporter::ConsoleReporter(ReporterConfig const& config)
else
{
return{
- { "benchmark name", CATCH_CONFIG_CONSOLE_WIDTH - 32, ColumnInfo::Left },
+ { "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 }
@@ -16201,8 +16518,9 @@ void ConsoleReporter::sectionEnded(SectionStats const& _sectionStats) {
stream << "\nNo assertions in test case";
stream << " '" << _sectionStats.sectionInfo.name << "'\n" << std::endl;
}
- if (m_config->showDurations() == ShowDurations::Always) {
- stream << getFormattedDuration(_sectionStats.durationInSeconds) << " s: " << _sectionStats.sectionInfo.name << 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;
@@ -16486,6 +16804,7 @@ CATCH_REGISTER_REPORTER("console", ConsoleReporter)
#include <sstream>
#include <ctime>
#include <algorithm>
+#include <iomanip>
namespace Catch {
@@ -16513,7 +16832,7 @@ namespace Catch {
#else
std::strftime(timeStamp, timeStampSize, fmt, timeInfo);
#endif
- return std::string(timeStamp);
+ return std::string(timeStamp, timeStampSize-1);
}
std::string fileNameTag(const std::vector<std::string> &tags) {
@@ -16524,6 +16843,17 @@ namespace Catch {
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 )
@@ -16593,7 +16923,7 @@ namespace Catch {
if( m_config->showDurations() == ShowDurations::Never )
xml.writeAttribute( "time", "" );
else
- xml.writeAttribute( "time", suiteTime );
+ xml.writeAttribute( "time", formatDuration( suiteTime ) );
xml.writeAttribute( "timestamp", getCurrentTimestamp() );
// Write properties if there are any
@@ -16638,12 +16968,13 @@ namespace Catch {
if ( !m_config->name().empty() )
className = m_config->name() + "." + className;
- writeSection( className, "", rootSection );
+ writeSection( className, "", rootSection, stats.testInfo.okToFail() );
}
- void JunitReporter::writeSection( std::string const& className,
- std::string const& rootName,
- SectionNode const& sectionNode ) {
+ 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;
@@ -16660,7 +16991,17 @@ namespace Catch {
xml.writeAttribute( "classname", className );
xml.writeAttribute( "name", name );
}
- xml.writeAttribute( "time", ::Catch::Detail::stringify( sectionNode.stats.durationInSeconds ) );
+ 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 );
@@ -16671,9 +17012,9 @@ namespace Catch {
}
for( auto const& childNode : sectionNode.childSections )
if( className.empty() )
- writeSection( name, "", *childNode );
+ writeSection( name, "", *childNode, testOkToFail );
else
- writeSection( className, name, *childNode );
+ writeSection( className, name, *childNode, testOkToFail );
}
void JunitReporter::writeAssertions( SectionNode const& sectionNode ) {
@@ -17095,6 +17436,10 @@ namespace Catch {
.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();
}
@@ -17104,6 +17449,10 @@ namespace Catch {
.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();
}
@@ -17177,12 +17526,20 @@ namespace Catch {
#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 wmain (int argc, wchar_t * argv[], wchar_t * []) {
+extern "C" int CATCH_INTERNAL_CDECL wmain (int argc, wchar_t * argv[], wchar_t * []) {
#else
// Standard C/C++ main entry point
-int main (int argc, char * argv[]) {
+int CATCH_INTERNAL_CDECL main (int argc, char * argv[]) {
#endif
return Catch::Session().run( argc, argv );
@@ -17310,9 +17667,9 @@ int main (int argc, char * const argv[]) {
#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__,,))
+ 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)
+ 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
@@ -17414,9 +17771,9 @@ int main (int argc, char * const argv[]) {
#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__,,))
+ 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)
+ 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;
@@ -17463,8 +17820,8 @@ using Catch::Detail::Approx;
#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_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( ... )
@@ -17473,7 +17830,7 @@ using Catch::Detail::Approx;
#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____ ))
+#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__)
@@ -17496,8 +17853,8 @@ using Catch::Detail::Approx;
#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_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 )
@@ -17545,10 +17902,10 @@ using Catch::Detail::Approx;
#define INFO( msg ) (void)(0)
#define UNSCOPED_INFO( msg ) (void)(0)
#define WARN( msg ) (void)(0)
-#define CAPTURE( 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 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( ... )
@@ -17556,7 +17913,7 @@ using Catch::Detail::Approx;
#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____ ))
+#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__)
@@ -17586,8 +17943,8 @@ using Catch::Detail::Approx;
#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 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 )
diff --git a/tests/auto/testlib/selftests/cmptest/CMakeLists.txt b/tests/auto/testlib/selftests/cmptest/CMakeLists.txt
index b5522fe4bb..67700db36e 100644
--- a/tests/auto/testlib/selftests/cmptest/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/cmptest/CMakeLists.txt
@@ -1,15 +1,17 @@
-# Generated from cmptest.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## cmptest Binary:
#####################################################################
qt_internal_add_executable(cmptest
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_cmptest.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
@@ -17,10 +19,8 @@ qt_internal_add_executable(cmptest
#####################################################################
qt_internal_extend_target(cmptest CONDITION TARGET Qt::Gui
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
-# special case begin
qt_internal_apply_testlib_coverage_options(cmptest)
-# special case end
diff --git a/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp b/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
index 1df139c3f2..36e355c614 100644
--- a/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
+++ b/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
@@ -1,42 +1,21 @@
-/****************************************************************************
-**
-** 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/QCoreApplication>
#include <QTest>
+#include <QtCore/QCoreApplication>
+#include <QtCore/QTimer>
#ifdef QT_GUI_LIB
#include <QtGui/QColor>
#include <QtGui/QImage>
+#include <QtGui/QPalette>
#include <QtGui/QPixmap>
#include <QtGui/QVector2D>
#include <QtGui/QVector3D>
#include <QtGui/QVector4D>
#endif
+#include <QSet>
+#include <vector>
+using namespace Qt::StringLiterals;
/* XPM test data for QPixmap, QImage tests (use drag cursors as example) */
@@ -139,6 +118,8 @@ private slots:
void compare_pointerfuncs();
void compare_tostring();
void compare_tostring_data();
+ void compare_unknown();
+ void compare_textFromDebug();
void compareQObjects();
void compareQStringLists();
void compareQStringLists_data();
@@ -149,6 +130,7 @@ private slots:
void compareQListIntToInitializerList_data();
void compareQListIntToInitializerList();
void compareQListDouble();
+ void compareContainerToInitializerList();
#ifdef QT_GUI_LIB
void compareQColor_data();
void compareQColor();
@@ -161,7 +143,10 @@ private slots:
void compareQVector2D();
void compareQVector3D();
void compareQVector4D();
+ void compareQPalettes_data();
+ void compareQPalettes();
#endif
+ void tryCompare();
void verify();
void verify2();
void tryVerify();
@@ -348,6 +333,40 @@ void tst_Cmptest::compare_tostring()
QCOMPARE(actual, expected);
}
+struct UnknownType
+{
+ int value;
+ bool operator==(const UnknownType &rhs) const { return value == rhs.value; }
+};
+
+void tst_Cmptest::compare_unknown()
+{
+ UnknownType a{1};
+ UnknownType b{2};
+
+ QCOMPARE(a, b);
+}
+
+struct CustomType
+{
+ int value;
+ bool operator==(const CustomType &rhs) const { return value == rhs.value; }
+};
+
+QDebug operator<<(QDebug dbg, const CustomType &val)
+{
+ dbg << "QDebug stream: " << val.value;
+ return dbg;
+}
+
+void tst_Cmptest::compare_textFromDebug()
+{
+ CustomType a{0};
+ CustomType b{1};
+
+ QCOMPARE(a, b);
+}
+
void tst_Cmptest::compareQStringLists_data()
{
QTest::addColumn<QStringList>("opA");
@@ -493,6 +512,24 @@ void tst_Cmptest::compareQListDouble()
QCOMPARE(double1, double2);
}
+void tst_Cmptest::compareContainerToInitializerList()
+{
+ // Protect ',' in the list
+#define ARG(...) __VA_ARGS__
+ QSet<int> set{1, 2, 3};
+ QCOMPARE(set, ARG({1, 2, 3}));
+
+ std::vector<int> vec{1, 2, 3};
+ QCOMPARE(vec, ARG({1, 2, 3}));
+
+ vec.clear();
+ QCOMPARE(vec, {});
+
+ vec.push_back(42);
+ QCOMPARE(vec, {42});
+#undef ARG
+}
+
#ifdef QT_GUI_LIB
void tst_Cmptest::compareQColor_data()
{
@@ -619,6 +656,54 @@ void tst_Cmptest::compareQVector4D()
v4b.setY(3);
QCOMPARE(v4a, v4b);
}
+
+void tst_Cmptest::compareQPalettes_data()
+{
+ QTest::addColumn<QPalette>("actualPalette");
+ QTest::addColumn<QPalette>("expectedPalette");
+
+ // Initialize both to black, as the default palette values change
+ // depending on whether the test is run directly from a shell
+ // vs through generate_expected_output.py. We're not testing
+ // the defaults, we're testing that the full output is printed
+ // (QTBUG-5903 and QTBUG-87039).
+ QPalette actualPalette;
+ for (int i = 0; i < QPalette::NColorRoles; ++i) {
+ const auto role = QPalette::ColorRole(i);
+ actualPalette.setColor(QPalette::All, role, QColorConstants::Black);
+ }
+ QPalette expectedPalette;
+ for (int i = 0; i < QPalette::NColorRoles; ++i) {
+ const auto role = QPalette::ColorRole(i);
+ expectedPalette.setColor(QPalette::All, role, QColorConstants::Black);
+ }
+
+ for (int i = 0; i < QPalette::NColorRoles; ++i) {
+ const auto role = QPalette::ColorRole(i);
+ const auto color = QColor::fromRgb(i);
+ actualPalette.setColor(role, color);
+ }
+ QTest::newRow("all roles are different") << actualPalette << expectedPalette;
+
+ for (int i = 0; i < QPalette::NColorRoles - 1; ++i) {
+ const auto role = QPalette::ColorRole(i);
+ const auto color = QColor::fromRgb(i);
+ expectedPalette.setColor(role, color);
+ }
+ QTest::newRow("one role is different") << actualPalette << expectedPalette;
+
+ const auto lastRole = QPalette::ColorRole(QPalette::NColorRoles - 1);
+ expectedPalette.setColor(lastRole, QColor::fromRgb(lastRole));
+ QTest::newRow("all roles are the same") << actualPalette << expectedPalette;
+}
+
+void tst_Cmptest::compareQPalettes()
+{
+ QFETCH(QPalette, actualPalette);
+ QFETCH(QPalette, expectedPalette);
+
+ QCOMPARE(actualPalette, expectedPalette);
+}
#endif // QT_GUI_LIB
static int opaqueFunc()
@@ -635,19 +720,94 @@ void tst_Cmptest::verify()
void tst_Cmptest::verify2()
{
QVERIFY2(opaqueFunc() > 2, QByteArray::number(opaqueFunc()).constData());
- QVERIFY2(opaqueFunc() < 2, QByteArray::number(opaqueFunc()).constData());
+ QVERIFY2(opaqueFunc() < 2,
+ // Message with parenthetical part, to catch mis-parses of the
+ // resulting message:
+ u"%1 >= 2 (as expected, in fact)"_s.arg(opaqueFunc()).toUtf8().constData());
+}
+
+class DeferredFlag : public QObject // Can't be const.
+{
+ Q_OBJECT
+ bool m_flag;
+public:
+ // A boolean that either starts out true or decays to true after 50 ms.
+ // However, that decay will only happen when the event loop is run.
+ explicit DeferredFlag(bool initial = false) : m_flag(initial)
+ {
+ if (!initial)
+ QTimer::singleShot(50, this, &DeferredFlag::onTimeOut);
+ }
+ explicit operator bool() const { return m_flag; }
+ bool operator!() const { return !m_flag; }
+ friend bool operator==(const DeferredFlag &a, const DeferredFlag &b)
+ {
+ return bool(a) == bool(b);
+ }
+public slots:
+ void onTimeOut() { m_flag = true; }
+};
+
+char *toString(const DeferredFlag &val)
+{
+ return qstrdup(bool(val) ? "DeferredFlag(true)" : "DeferredFlag(false)");
+}
+
+void tst_Cmptest::tryCompare()
+{
+ /* Note that expected values given as DeferredFlag() shall be re-evaluated
+ each time the comparison is checked, hence supply a fresh false instance,
+ that'll be discarded before it has a chance to decay, hence only compare
+ equal to a false instance. Do not replace them with a local variable
+ initialized to false, as it would (of course) decay.
+ */
+ DeferredFlag trueAlready(true);
+ {
+ DeferredFlag c;
+ // QTRY should check before looping, so be equal to the fresh false immediately.
+ QTRY_COMPARE(c, DeferredFlag());
+ // Given time, it'll end up equal to a true one.
+ QTRY_COMPARE(c, trueAlready);
+ }
+ {
+ DeferredFlag c;
+ QTRY_COMPARE_WITH_TIMEOUT(c, DeferredFlag(), 300ms);
+ QVERIFY(!c); // Instantly equal, so succeeded without delay.
+ QTRY_COMPARE_WITH_TIMEOUT(c, trueAlready, 1s);
+ qInfo("Should now time out and fail");
+ QTRY_COMPARE_WITH_TIMEOUT(c, DeferredFlag(), 200);
+ }
}
void tst_Cmptest::tryVerify()
{
- QTRY_VERIFY(opaqueFunc() > 2);
- QTRY_VERIFY_WITH_TIMEOUT(opaqueFunc() < 2, 1);
+ {
+ DeferredFlag c;
+ QTRY_VERIFY(!c);
+ QTRY_VERIFY(c);
+ }
+ {
+ DeferredFlag c;
+ QTRY_VERIFY_WITH_TIMEOUT(!c, 300ms);
+ QTRY_VERIFY_WITH_TIMEOUT(c, 200);
+ qInfo("Should now time out and fail");
+ QTRY_VERIFY_WITH_TIMEOUT(!c, 200);
+ }
}
void tst_Cmptest::tryVerify2()
{
- QTRY_VERIFY2(opaqueFunc() > 2, QByteArray::number(opaqueFunc()).constData());
- QTRY_VERIFY2_WITH_TIMEOUT(opaqueFunc() < 2, QByteArray::number(opaqueFunc()).constData(), 1);
+ {
+ DeferredFlag c;
+ QTRY_VERIFY2(!c, "Failed to check before looping");
+ QTRY_VERIFY2(c, "Failed to trigger single-shot");
+ }
+ {
+ DeferredFlag c;
+ QTRY_VERIFY2_WITH_TIMEOUT(!c, "Failed to check before looping", 300ms);
+ QTRY_VERIFY2_WITH_TIMEOUT(c, "Failed to trigger single-shot", 200);
+ QTRY_VERIFY2_WITH_TIMEOUT(!c, "Should time out and fail", 200);
+ }
}
void tst_Cmptest::verifyExplicitOperatorBool()
diff --git a/tests/auto/testlib/selftests/commandlinedata/CMakeLists.txt b/tests/auto/testlib/selftests/commandlinedata/CMakeLists.txt
index ce5847db93..c563f9919a 100644
--- a/tests/auto/testlib/selftests/commandlinedata/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/commandlinedata/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from commandlinedata.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## commandlinedata Binary:
#####################################################################
qt_internal_add_executable(commandlinedata
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_commandlinedata.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(commandlinedata)
-# special case end
diff --git a/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp b/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp
index 9759436ef9..c895ae4ed8 100644
--- a/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp
+++ b/tests/auto/testlib/selftests/commandlinedata/tst_commandlinedata.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/counting/CMakeLists.txt b/tests/auto/testlib/selftests/counting/CMakeLists.txt
index bbcd3543d1..58fa751477 100644
--- a/tests/auto/testlib/selftests/counting/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/counting/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from counting.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## counting Binary:
#####################################################################
qt_internal_add_executable(counting
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_counting.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(counting)
-# special case end
diff --git a/tests/auto/testlib/selftests/counting/tst_counting.cpp b/tests/auto/testlib/selftests/counting/tst_counting.cpp
index 69cfc91b40..d521ea0238 100644
--- a/tests/auto/testlib/selftests/counting/tst_counting.cpp
+++ b/tests/auto/testlib/selftests/counting/tst_counting.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
#include <QTest>
diff --git a/tests/auto/testlib/selftests/crashes/CMakeLists.txt b/tests/auto/testlib/selftests/crashes/CMakeLists.txt
index c09049a933..c11bab90d0 100644
--- a/tests/auto/testlib/selftests/crashes/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/crashes/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from crashes.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## crashes Binary:
#####################################################################
qt_internal_add_executable(crashes
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_crashes.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(crashes)
-# special case end
diff --git a/tests/auto/testlib/selftests/crashes/tst_crashes.cpp b/tests/auto/testlib/selftests/crashes/tst_crashes.cpp
index 99f7ad4137..4ba8a426e6 100644
--- a/tests/auto/testlib/selftests/crashes/tst_crashes.cpp
+++ b/tests/auto/testlib/selftests/crashes/tst_crashes.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 <QtCore/QCoreApplication>
@@ -32,6 +7,8 @@
#ifdef Q_OS_WIN
#include <qt_windows.h>
+#else
+#include <sys/resource.h>
#endif
class tst_Crashes: public QObject
@@ -47,6 +24,12 @@ void tst_Crashes::crash()
#if defined(Q_OS_WIN)
//we avoid the error dialogbox to appear on windows
SetErrorMode( SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
+#elif defined(RLIMIT_CORE)
+ // Unix: set our core dump limit to zero to request no dialogs.
+ if (struct rlimit rlim; getrlimit(RLIMIT_CORE, &rlim) == 0) {
+ rlim.rlim_cur = 0;
+ setrlimit(RLIMIT_CORE, &rlim);
+ }
#endif
/*
We deliberately dereference an invalid but non-zero address;
@@ -55,7 +38,11 @@ void tst_Crashes::crash()
rather than SIGSEGV).
*/
int *i = 0;
+
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_GCC("-Warray-bounds")
i[1] = 1;
+QT_WARNING_POP
}
QTEST_MAIN(tst_Crashes)
diff --git a/tests/auto/testlib/selftests/datatable/CMakeLists.txt b/tests/auto/testlib/selftests/datatable/CMakeLists.txt
index 66bfa4a208..7bac0d2a63 100644
--- a/tests/auto/testlib/selftests/datatable/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/datatable/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from datatable.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## datatable Binary:
#####################################################################
qt_internal_add_executable(datatable
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_datatable.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(datatable)
-# special case end
diff --git a/tests/auto/testlib/selftests/datatable/tst_datatable.cpp b/tests/auto/testlib/selftests/datatable/tst_datatable.cpp
index b0626bc421..598908ac0e 100644
--- a/tests/auto/testlib/selftests/datatable/tst_datatable.cpp
+++ b/tests/auto/testlib/selftests/datatable/tst_datatable.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 <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/datetime/CMakeLists.txt b/tests/auto/testlib/selftests/datetime/CMakeLists.txt
index 5a3df8085d..e644d7200a 100644
--- a/tests/auto/testlib/selftests/datetime/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/datetime/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from datetime.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## datetime Binary:
#####################################################################
qt_internal_add_executable(datetime
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_datetime.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(datetime)
-# special case end
diff --git a/tests/auto/testlib/selftests/datetime/tst_datetime.cpp b/tests/auto/testlib/selftests/datetime/tst_datetime.cpp
index e2066a4002..68e47d0868 100644
--- a/tests/auto/testlib/selftests/datetime/tst_datetime.cpp
+++ b/tests/auto/testlib/selftests/datetime/tst_datetime.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** 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/QCoreApplication>
#include <QtCore/QDateTime>
+#include <QtCore/QTimeZone>
#include <QTest>
/*!
@@ -46,8 +22,10 @@ private slots:
void tst_DateTime::dateTime() const
{
- const QDateTime utc(QDate(2000, 5, 3), QTime(4, 3, 4), Qt::UTC);
- const QDateTime local(QDate(2000, 5, 3), QTime(4, 3, 4), Qt::OffsetFromUTC, 120 /* 2 minutes */);
+ const auto twoMinutes = std::chrono::minutes{2};
+ const QDateTime utc(QDate(2000, 5, 3), QTime(4, 3, 4), QTimeZone::UTC);
+ const QDateTime local(QDate(2000, 5, 3), QTime(4, 3, 4),
+ QTimeZone::fromDurationAheadOfUtc(twoMinutes));
QCOMPARE(local, utc);
}
diff --git a/tests/auto/testlib/selftests/deleteLater/CMakeLists.txt b/tests/auto/testlib/selftests/deleteLater/CMakeLists.txt
index ca42199665..ededc5bf7d 100644
--- a/tests/auto/testlib/selftests/deleteLater/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/deleteLater/CMakeLists.txt
@@ -1,18 +1,18 @@
-# Generated from deleteLater.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## deleteLater Binary:
#####################################################################
qt_internal_add_executable(deleteLater
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_deleteLater.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
-# special case begin
qt_internal_apply_testlib_coverage_options(deleteLater)
-# special case end
diff --git a/tests/auto/testlib/selftests/deleteLater/tst_deleteLater.cpp b/tests/auto/testlib/selftests/deleteLater/tst_deleteLater.cpp
index dbaaa72496..871a46afc3 100644
--- a/tests/auto/testlib/selftests/deleteLater/tst_deleteLater.cpp
+++ b/tests/auto/testlib/selftests/deleteLater/tst_deleteLater.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@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) 2017 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/deleteLater_noApp/CMakeLists.txt b/tests/auto/testlib/selftests/deleteLater_noApp/CMakeLists.txt
index 0ebdc89cb8..feebd9f00e 100644
--- a/tests/auto/testlib/selftests/deleteLater_noApp/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/deleteLater_noApp/CMakeLists.txt
@@ -1,18 +1,18 @@
-# Generated from deleteLater_noApp.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## deleteLater_noApp Binary:
#####################################################################
qt_internal_add_executable(deleteLater_noApp
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_deleteLater_noApp.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
-# special case begin
qt_internal_apply_testlib_coverage_options(deleteLater_noApp)
-# special case end
diff --git a/tests/auto/testlib/selftests/deleteLater_noApp/tst_deleteLater_noApp.cpp b/tests/auto/testlib/selftests/deleteLater_noApp/tst_deleteLater_noApp.cpp
index 2ad2556f8f..eecc67dd36 100644
--- a/tests/auto/testlib/selftests/deleteLater_noApp/tst_deleteLater_noApp.cpp
+++ b/tests/auto/testlib/selftests/deleteLater_noApp/tst_deleteLater_noApp.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@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) 2017 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/differentexec/CMakeLists.txt b/tests/auto/testlib/selftests/differentexec/CMakeLists.txt
index e13817f1e1..b92814742e 100644
--- a/tests/auto/testlib/selftests/differentexec/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/differentexec/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from differentexec.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## differentexec Binary:
#####################################################################
qt_internal_add_executable(differentexec
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_differentexec.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(differentexec)
-# special case end
diff --git a/tests/auto/testlib/selftests/differentexec/tst_differentexec.cpp b/tests/auto/testlib/selftests/differentexec/tst_differentexec.cpp
index 7ddc1e8311..92233a0147 100644
--- a/tests/auto/testlib/selftests/differentexec/tst_differentexec.cpp
+++ b/tests/auto/testlib/selftests/differentexec/tst_differentexec.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 <QTest>
diff --git a/tests/auto/testlib/selftests/eventloop/CMakeLists.txt b/tests/auto/testlib/selftests/eventloop/CMakeLists.txt
new file mode 100644
index 0000000000..46b794f895
--- /dev/null
+++ b/tests/auto/testlib/selftests/eventloop/CMakeLists.txt
@@ -0,0 +1,17 @@
+#####################################################################
+## eventloop Binary:
+#####################################################################
+
+qt_internal_add_executable(eventloop
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ SOURCES
+ tst_eventloop.cpp
+ LIBRARIES
+ Qt::Test
+)
+
+## Scopes:
+#####################################################################
+qt_internal_apply_testlib_coverage_options(eventloop)
diff --git a/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp b/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp
new file mode 100644
index 0000000000..3f3a7e303e
--- /dev/null
+++ b/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp
@@ -0,0 +1,106 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QTestEventLoop>
+#include <QtCore/QTimer>
+
+using namespace std::chrono_literals;
+
+// Tests for QTestEventLoop (and some QTRY_* details)
+class tst_EventLoop: public QObject
+{
+Q_OBJECT
+
+ bool m_inTestFunction = false;
+private slots:
+ void cleanup();
+ void fail();
+ void skip();
+ void pass();
+};
+
+class DeferredFlag : public QObject // Can't be const.
+{
+ Q_OBJECT
+ bool m_flag;
+public:
+ // A boolean that either starts out true or decays to true after 50 ms.
+ // However, that decay will only happen when the event loop is run.
+ explicit DeferredFlag(bool initial = false) : m_flag(initial)
+ {
+ if (!initial)
+ QTimer::singleShot(50, this, &DeferredFlag::onTimeOut);
+ }
+ explicit operator bool() const { return m_flag; }
+ bool operator!() const { return !m_flag; }
+ friend bool operator==(const DeferredFlag &a, const DeferredFlag &b)
+ {
+ return bool(a) == bool(b);
+ }
+public slots:
+ void onTimeOut() { m_flag = true; }
+};
+
+char *toString(const DeferredFlag &val)
+{
+ return qstrdup(bool(val) ? "DeferredFlag(true)" : "DeferredFlag(false)");
+}
+
+void tst_EventLoop::cleanup()
+{
+ // QTBUG-104441: looping didn't happen in cleanup() if test failed or skipped.
+ {
+ DeferredFlag flag;
+ auto &loop = QTestEventLoop::instance();
+ loop.enterLoop(100ms);
+ QVERIFY2(loop.timeout(), "QTestEventLoop exited prematurely in cleanup()");
+ QVERIFY(flag);
+ }
+ {
+ DeferredFlag flag;
+ QTRY_VERIFY2(flag, "QTRY_* loop exited prematurely in cleanup()");
+ }
+
+ m_inTestFunction = false;
+}
+
+void tst_EventLoop::fail()
+{
+ QVERIFY2(!std::exchange(m_inTestFunction, true), "Earlier test failed to clean up");
+ QFAIL("Failing test should still clean up");
+}
+
+void tst_EventLoop::skip()
+{
+ QVERIFY2(!std::exchange(m_inTestFunction, true), "Earlier test failed to clean up");
+ QSKIP("Skipping test should still clean up");
+}
+
+void tst_EventLoop::pass()
+{
+ QVERIFY2(!std::exchange(m_inTestFunction, true), "Earlier test failed to clean up");
+ {
+ DeferredFlag flag;
+ auto &loop = QTestEventLoop::instance();
+ loop.enterLoop(100ms);
+ QVERIFY(loop.timeout());
+ QVERIFY(flag);
+ }
+ {
+ DeferredFlag flag;
+ QTRY_VERIFY(flag);
+ }
+ DeferredFlag flag;
+ QTestEventLoop loop(this);
+ QVERIFY(!flag);
+ loop.enterLoop(1ms);
+ QVERIFY(loop.timeout());
+ QVERIFY(!flag);
+ loop.enterLoop(100ms);
+ QVERIFY(loop.timeout());
+ QVERIFY(flag);
+}
+
+QTEST_MAIN(tst_EventLoop)
+#include "tst_eventloop.moc"
diff --git a/tests/auto/testlib/selftests/exceptionthrow/CMakeLists.txt b/tests/auto/testlib/selftests/exceptionthrow/CMakeLists.txt
index ba793db66c..0facbeace3 100644
--- a/tests/auto/testlib/selftests/exceptionthrow/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/exceptionthrow/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from exceptionthrow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## exceptionthrow Binary:
@@ -6,17 +7,15 @@
qt_internal_add_executable(exceptionthrow
EXCEPTIONS
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_exceptionthrow.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(exceptionthrow)
-# special case end
diff --git a/tests/auto/testlib/selftests/exceptionthrow/tst_exceptionthrow.cpp b/tests/auto/testlib/selftests/exceptionthrow/tst_exceptionthrow.cpp
index 0af3358261..ea5c6afc13 100644
--- a/tests/auto/testlib/selftests/exceptionthrow/tst_exceptionthrow.cpp
+++ b/tests/auto/testlib/selftests/exceptionthrow/tst_exceptionthrow.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 <QTest>
diff --git a/tests/auto/testlib/selftests/expected_assert.tap b/tests/auto/testlib/selftests/expected_assert.tap
index 0e8b73fab4..7def1706b3 100644
--- a/tests/auto/testlib/selftests/expected_assert.tap
+++ b/tests/auto/testlib/selftests/expected_assert.tap
@@ -2,13 +2,16 @@ TAP version 13
# tst_Assert
ok 1 - initTestCase()
ok 2 - testNumber1()
-# ASSERT: "false" in file qtbase/tests/auto/testlib/selftests/assert/tst_assert.cpp, line 0
not ok 3 - testNumber2()
---
# Received a fatal error.
at: tst_Assert::testNumber2() (qtbase/tests/auto/testlib/selftests/assert/tst_assert.cpp:0)
file: qtbase/tests/auto/testlib/selftests/assert/tst_assert.cpp
line: 0
+ extensions:
+ messages:
+ - severity: fatal
+ message: ASSERT: "false" in file qtbase/tests/auto/testlib/selftests/assert/tst_assert.cpp, line 0
...
1..3
# tests 3
diff --git a/tests/auto/testlib/selftests/expected_blacklisted.tap b/tests/auto/testlib/selftests/expected_blacklisted.tap
index 63a0e90e21..83def09e34 100644
--- a/tests/auto/testlib/selftests/expected_blacklisted.tap
+++ b/tests/auto/testlib/selftests/expected_blacklisted.tap
@@ -1,8 +1,13 @@
TAP version 13
# tst_Blacklisted
ok 1 - initTestCase()
-# This test should BPASS
ok 2 - pass() # TODO
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: This test should BPASS
+ ...
ok 3 - skip() # SKIP This test should SKIP
not ok 4 - fail() # TODO 'false' returned FALSE. (This test should BFAIL)
---
@@ -18,10 +23,13 @@ not ok 4 - fail() # TODO 'false' returned FALSE. (This test should BFAIL)
...
not ok 5 - xfail() # TODO This test should BXFAIL then BPASS
---
- # This test should BXFAIL then BPASS
- at: tst_Blacklisted::xfail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: This test should BXFAIL then BPASS
+ at: tst_Blacklisted::xfail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
+ line: 0
...
ok 6 - multiSkip() # SKIP This skip should be repeated ten times
ok 6 - multiSkip() # SKIP This skip should be repeated ten times
@@ -36,102 +44,95 @@ ok 6 - multiSkip() # SKIP This skip should be repeated ten times
ok 6 - multiSkip() # SKIP But this test should only contribute one to the skip count
not ok 7 - multiFail() # TODO This failure message should be repeated ten times
---
- # This failure message should be repeated ten times
at: tst_Blacklisted::multiFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
not ok 7 - multiFail() # TODO This failure message should be repeated ten times
---
- # This failure message should be repeated ten times
at: tst_Blacklisted::multiFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
not ok 7 - multiFail() # TODO This failure message should be repeated ten times
---
- # This failure message should be repeated ten times
at: tst_Blacklisted::multiFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
not ok 7 - multiFail() # TODO This failure message should be repeated ten times
---
- # This failure message should be repeated ten times
at: tst_Blacklisted::multiFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
not ok 7 - multiFail() # TODO This failure message should be repeated ten times
---
- # This failure message should be repeated ten times
at: tst_Blacklisted::multiFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
not ok 7 - multiFail() # TODO This failure message should be repeated ten times
---
- # This failure message should be repeated ten times
at: tst_Blacklisted::multiFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
not ok 7 - multiFail() # TODO This failure message should be repeated ten times
---
- # This failure message should be repeated ten times
at: tst_Blacklisted::multiFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
not ok 7 - multiFail() # TODO This failure message should be repeated ten times
---
- # This failure message should be repeated ten times
at: tst_Blacklisted::multiFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
not ok 7 - multiFail() # TODO This failure message should be repeated ten times
---
- # This failure message should be repeated ten times
at: tst_Blacklisted::multiFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
not ok 7 - multiFail() # TODO This failure message should be repeated ten times
---
- # This failure message should be repeated ten times
at: tst_Blacklisted::multiFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
not ok 7 - multiFail() # TODO But this test should only contribute one to the blacklisted count
---
- # But this test should only contribute one to the blacklisted count
at: tst_Blacklisted::multiFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
-not ok 8 - xfailContinueSkip() # TODO This test should BXFAIL then SKIP
+not ok 8 - xfailContinueSkip() # SKIP This skip should be seen and counted
---
- # This test should BXFAIL then SKIP
at: tst_Blacklisted::xfailContinueSkip() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
- ...
-ok 8 - xfailContinueSkip() # SKIP This skip should be seen and counted
-not ok 9 - xfailContinueFail() # TODO This test should BXFAIL then BFAIL
- ---
- # This test should BXFAIL then BFAIL
- at: tst_Blacklisted::xfailContinueFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: This test should BXFAIL then SKIP
+ at: tst_Blacklisted::xfailContinueSkip() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
+ line: 0
...
not ok 9 - xfailContinueFail() # TODO This fail should be seen and counted as blacklisted
---
- # This fail should be seen and counted as blacklisted
at: tst_Blacklisted::xfailContinueFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: This test should BXFAIL then BFAIL
+ at: tst_Blacklisted::xfailContinueFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
+ line: 0
...
ok 10 - xpass() # TODO 'true' returned TRUE unexpectedly. (This test should BXPASS)
ok 11 - xpassContinueSkip() # TODO 'true' returned TRUE unexpectedly. (This test should BXPASS then SKIP)
@@ -139,13 +140,17 @@ ok 11 - xpassContinueSkip() # SKIP This skip should be seen but not counted
ok 12 - xpassContinueFail() # TODO 'true' returned TRUE unexpectedly. (This test should BXPASS then BFAIL)
not ok 12 - xpassContinueFail() # TODO This fail should be seen and not counted (due to prior XPASS)
---
- # This fail should be seen and not counted (due to prior XPASS)
at: tst_Blacklisted::xpassContinueFail() (qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp:0)
file: qtbase/tests/auto/testlib/selftests/blacklisted/tst_blacklisted.cpp
line: 0
...
-# Totals should add up to 13: 2 passed, 0 failed, 3 skipped, 8 blacklisted
ok 13 - cleanupTestCase()
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: Totals should add up to 13: 2 passed, 0 failed, 3 skipped, 8 blacklisted
+ ...
1..13
# tests 13
# pass 2
diff --git a/tests/auto/testlib/selftests/expected_cmptest.junitxml b/tests/auto/testlib/selftests/expected_cmptest.junitxml
index 9509c067e2..134a188753 100644
--- a/tests/auto/testlib/selftests/expected_cmptest.junitxml
+++ b/tests/auto/testlib/selftests/expected_cmptest.junitxml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<testsuite name="tst_Cmptest" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="67" failures="46" errors="0" skipped="0" time="@TEST_DURATION@">
+<testsuite name="tst_Cmptest" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="74" failures="51" errors="0" skipped="0" time="@TEST_DURATION@">
<properties>
<property name="QTestVersion" value="@INSERT_QT_VERSION_HERE@"/>
<property name="QtVersion" value="@INSERT_QT_VERSION_HERE@"/>
@@ -78,6 +78,18 @@
Expected (expected): QVariant(PhonyClass,<value not representable as string>)]]>
</failure>
</testcase>
+ <testcase name="compare_unknown" classname="tst_Cmptest" time="@TEST_DURATION@">
+ <failure type="fail" message="Compared values are not the same">
+ <![CDATA[ Actual : a
+ Expected : b]]>
+ </failure>
+ </testcase>
+ <testcase name="compare_textFromDebug" classname="tst_Cmptest" time="@TEST_DURATION@">
+ <failure type="fail" message="Compared values are not the same">
+ <![CDATA[ Actual (a): QDebug stream: 0
+ Expected (b): QDebug stream: 1]]>
+ </failure>
+ </testcase>
<testcase name="compareQObjects" classname="tst_Cmptest" time="@TEST_DURATION@">
<failure type="fail" message="Compared QObject pointers are not the same">
<![CDATA[ Actual (&object1): QObject/"object1"
@@ -161,6 +173,7 @@
Expected (double2): 1]]>
</failure>
</testcase>
+ <testcase name="compareContainerToInitializerList" classname="tst_Cmptest" time="@TEST_DURATION@"/>
<testcase name="compareQColor(Qt::yellow vs &quot;yellow&quot;)" classname="tst_Cmptest" time="@TEST_DURATION@"/>
<testcase name="compareQColor(Qt::yellow vs Qt::green)" classname="tst_Cmptest" time="@TEST_DURATION@">
<failure type="fail" message="Compared values are not the same">
@@ -270,17 +283,42 @@
Expected (v4b): QVector4D(1, 3, 3, 4)]]>
</failure>
</testcase>
+ <testcase name="compareQPalettes(all roles are different)" classname="tst_Cmptest" time="@TEST_DURATION@">
+ <failure type="fail" message="Compared values are not the same">
+ <![CDATA[ Actual (actualPalette) : QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]")
+ Expected (expectedPalette): QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Light:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Midlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Dark:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Mid:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Text:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],BrightText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ButtonText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Base:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Window:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Shadow:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Highlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],HighlightedText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Link:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],LinkVisited:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],AlternateBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],PlaceholderText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]")]]>
+ </failure>
+ </testcase>
+ <testcase name="compareQPalettes(one role is different)" classname="tst_Cmptest" time="@TEST_DURATION@">
+ <failure type="fail" message="Compared values are not the same">
+ <![CDATA[ Actual (actualPalette) : QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]")
+ Expected (expectedPalette): QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]")]]>
+ </failure>
+ </testcase>
+ <testcase name="compareQPalettes(all roles are the same)" classname="tst_Cmptest" time="@TEST_DURATION@"/>
+ <testcase name="tryCompare" classname="tst_Cmptest" time="@TEST_DURATION@">
+ <failure type="fail" message="Compared values are not the same">
+ <![CDATA[ Actual (c) : DeferredFlag(true)
+ Expected (DeferredFlag()): DeferredFlag(false)]]>
+ </failure>
+ <system-out>
+ <![CDATA[Should now time out and fail]]>
+ </system-out>
+ </testcase>
<testcase name="verify" classname="tst_Cmptest" time="@TEST_DURATION@">
<failure type="fail" message="&apos;opaqueFunc() &lt; 2&apos; returned FALSE. ()"/>
</testcase>
<testcase name="verify2" classname="tst_Cmptest" time="@TEST_DURATION@">
- <failure type="fail" message="&apos;opaqueFunc() &lt; 2&apos; returned FALSE. (42)"/>
+ <failure type="fail" message="&apos;opaqueFunc() &lt; 2&apos; returned FALSE. (42 &gt;= 2 (as expected, in fact))"/>
</testcase>
<testcase name="tryVerify" classname="tst_Cmptest" time="@TEST_DURATION@">
- <failure type="fail" message="&apos;opaqueFunc() &lt; 2&apos; returned FALSE. ()"/>
+ <failure type="fail" message="&apos;!c&apos; returned FALSE. ()"/>
+ <system-out>
+ <![CDATA[Should now time out and fail]]>
+ </system-out>
</testcase>
<testcase name="tryVerify2" classname="tst_Cmptest" time="@TEST_DURATION@">
- <failure type="fail" message="&apos;opaqueFunc() &lt; 2&apos; returned FALSE. (42)"/>
+ <failure type="fail" message="&apos;!c&apos; returned FALSE. (Should time out and fail)"/>
</testcase>
<testcase name="verifyExplicitOperatorBool" classname="tst_Cmptest" time="@TEST_DURATION@"/>
<testcase name="cleanupTestCase" classname="tst_Cmptest" time="@TEST_DURATION@"/>
diff --git a/tests/auto/testlib/selftests/expected_cmptest.lightxml b/tests/auto/testlib/selftests/expected_cmptest.lightxml
index df00b1a884..9c54d20650 100644
--- a/tests/auto/testlib/selftests/expected_cmptest.lightxml
+++ b/tests/auto/testlib/selftests/expected_cmptest.lightxml
@@ -109,6 +109,22 @@
</Incident>
<Duration msecs="0"/>
</TestFunction>
+ <TestFunction name="compare_unknown">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
+ <Description><![CDATA[Compared values are not the same
+ Actual : a
+ Expected : b]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compare_textFromDebug">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
+ <Description><![CDATA[Compared values are not the same
+ Actual (a): QDebug stream: 0
+ Expected (b): QDebug stream: 1]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
<TestFunction name="compareQObjects">
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
<Description><![CDATA[Compared QObject pointers are not the same
@@ -218,6 +234,10 @@
</Incident>
<Duration msecs="0"/>
</TestFunction>
+ <TestFunction name="compareContainerToInitializerList">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
<TestFunction name="compareQColor">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Qt::yellow vs "yellow"]]></DataTag>
@@ -361,6 +381,35 @@
</Incident>
<Duration msecs="0"/>
</TestFunction>
+ <TestFunction name="compareQPalettes">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
+ <DataTag><![CDATA[all roles are different]]></DataTag>
+ <Description><![CDATA[Compared values are not the same
+ Actual (actualPalette) : QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]")
+ Expected (expectedPalette): QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Light:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Midlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Dark:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Mid:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Text:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],BrightText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ButtonText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Base:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Window:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Shadow:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Highlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],HighlightedText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Link:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],LinkVisited:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],AlternateBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],PlaceholderText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]")]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
+ <DataTag><![CDATA[one role is different]]></DataTag>
+ <Description><![CDATA[Compared values are not the same
+ Actual (actualPalette) : QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]")
+ Expected (expectedPalette): QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]")]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[all roles are the same]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="tryCompare">
+ <Message type="qinfo" file="" line="0">
+ <Description><![CDATA[Should now time out and fail]]></Description>
+ </Message>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
+ <Description><![CDATA[Compared values are not the same
+ Actual (c) : DeferredFlag(true)
+ Expected (DeferredFlag()): DeferredFlag(false)]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
<TestFunction name="verify">
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
<Description><![CDATA['opaqueFunc() < 2' returned FALSE. ()]]></Description>
@@ -369,19 +418,22 @@
</TestFunction>
<TestFunction name="verify2">
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
- <Description><![CDATA['opaqueFunc() < 2' returned FALSE. (42)]]></Description>
+ <Description><![CDATA['opaqueFunc() < 2' returned FALSE. (42 >= 2 (as expected, in fact))]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="tryVerify">
+ <Message type="qinfo" file="" line="0">
+ <Description><![CDATA[Should now time out and fail]]></Description>
+ </Message>
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
- <Description><![CDATA['opaqueFunc() < 2' returned FALSE. ()]]></Description>
+ <Description><![CDATA['!c' returned FALSE. ()]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="tryVerify2">
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
- <Description><![CDATA['opaqueFunc() < 2' returned FALSE. (42)]]></Description>
+ <Description><![CDATA['!c' returned FALSE. (Should time out and fail)]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
diff --git a/tests/auto/testlib/selftests/expected_cmptest.tap b/tests/auto/testlib/selftests/expected_cmptest.tap
index a282fb1f4e..a5f5c3c8a2 100644
--- a/tests/auto/testlib/selftests/expected_cmptest.tap
+++ b/tests/auto/testlib/selftests/expected_cmptest.tap
@@ -139,7 +139,28 @@ not ok 18 - compare_tostring(both non-null user type)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 19 - compareQObjects()
+not ok 19 - compare_unknown()
+ ---
+ # Compared values are not the same
+ Actual : a
+ Expected : b
+ at: tst_Cmptest::compare_unknown() (qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
+ line: 0
+ ...
+not ok 20 - compare_textFromDebug()
+ ---
+ type: QCOMPARE
+ message: Compared values are not the same
+ wanted: QDebug stream: 1 (b)
+ found: QDebug stream: 0 (a)
+ expected: QDebug stream: 1 (b)
+ actual: QDebug stream: 0 (a)
+ at: tst_Cmptest::compare_textFromDebug() (qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
+ line: 0
+ ...
+not ok 21 - compareQObjects()
---
type: QCOMPARE
message: Compared QObject pointers are not the same
@@ -151,9 +172,9 @@ not ok 19 - compareQObjects()
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 20 - compareQStringLists(empty lists)
-ok 21 - compareQStringLists(equal lists)
-not ok 22 - compareQStringLists(last item different)
+ok 22 - compareQStringLists(empty lists)
+ok 23 - compareQStringLists(equal lists)
+not ok 24 - compareQStringLists(last item different)
---
type: QCOMPARE
message: Compared lists differ at index 2.
@@ -165,7 +186,7 @@ not ok 22 - compareQStringLists(last item different)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 23 - compareQStringLists(second-last item different)
+not ok 25 - compareQStringLists(second-last item different)
---
type: QCOMPARE
message: Compared lists differ at index 2.
@@ -177,7 +198,7 @@ not ok 23 - compareQStringLists(second-last item different)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 24 - compareQStringLists(prefix)
+not ok 26 - compareQStringLists(prefix)
---
# Compared lists have different sizes.
Actual (opA) size: 2
@@ -186,7 +207,7 @@ not ok 24 - compareQStringLists(prefix)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 25 - compareQStringLists(short list second)
+not ok 27 - compareQStringLists(short list second)
---
# Compared lists have different sizes.
Actual (opA) size: 12
@@ -195,7 +216,7 @@ not ok 25 - compareQStringLists(short list second)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 26 - compareQStringLists(short list first)
+not ok 28 - compareQStringLists(short list first)
---
# Compared lists have different sizes.
Actual (opA) size: 1
@@ -204,8 +225,8 @@ not ok 26 - compareQStringLists(short list first)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 27 - compareQListInt(match)
-not ok 28 - compareQListInt(size mismatch)
+ok 29 - compareQListInt(match)
+not ok 30 - compareQListInt(size mismatch)
---
# Compared lists have different sizes.
Actual (actual) size: 2
@@ -214,7 +235,7 @@ not ok 28 - compareQListInt(size mismatch)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 29 - compareQListInt(value mismatch)
+not ok 31 - compareQListInt(value mismatch)
---
type: QCOMPARE
message: Compared lists differ at index 2.
@@ -226,8 +247,8 @@ not ok 29 - compareQListInt(value mismatch)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 30 - compareQListIntToArray(match)
-not ok 31 - compareQListIntToArray(size mismatch)
+ok 32 - compareQListIntToArray(match)
+not ok 33 - compareQListIntToArray(size mismatch)
---
# Compared lists have different sizes.
Actual (actual) size: 2
@@ -236,7 +257,7 @@ not ok 31 - compareQListIntToArray(size mismatch)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 32 - compareQListIntToArray(value mismatch)
+not ok 34 - compareQListIntToArray(value mismatch)
---
type: QCOMPARE
message: Compared lists differ at index 2.
@@ -248,8 +269,8 @@ not ok 32 - compareQListIntToArray(value mismatch)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 33 - compareQListIntToInitializerList(match)
-not ok 34 - compareQListIntToInitializerList(size mismatch)
+ok 35 - compareQListIntToInitializerList(match)
+not ok 36 - compareQListIntToInitializerList(size mismatch)
---
# Compared lists have different sizes.
Actual (actual) size: 2
@@ -258,7 +279,7 @@ not ok 34 - compareQListIntToInitializerList(size mismatch)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 35 - compareQListIntToInitializerList(value mismatch)
+not ok 37 - compareQListIntToInitializerList(value mismatch)
---
type: QCOMPARE
message: Compared lists differ at index 2.
@@ -270,7 +291,7 @@ not ok 35 - compareQListIntToInitializerList(value mismatch)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 36 - compareQListDouble()
+not ok 38 - compareQListDouble()
---
type: QCOMPARE
message: Compared lists differ at index 0.
@@ -282,8 +303,9 @@ not ok 36 - compareQListDouble()
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 37 - compareQColor(Qt::yellow vs "yellow")
-not ok 38 - compareQColor(Qt::yellow vs Qt::green)
+ok 39 - compareContainerToInitializerList()
+ok 40 - compareQColor(Qt::yellow vs "yellow")
+not ok 41 - compareQColor(Qt::yellow vs Qt::green)
---
type: QCOMPARE
message: Compared values are not the same
@@ -295,7 +317,7 @@ not ok 38 - compareQColor(Qt::yellow vs Qt::green)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 39 - compareQColor(0x88ff0000 vs 0xffff0000)
+not ok 42 - compareQColor(0x88ff0000 vs 0xffff0000)
---
type: QCOMPARE
message: Compared values are not the same
@@ -307,8 +329,8 @@ not ok 39 - compareQColor(0x88ff0000 vs 0xffff0000)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 40 - compareQPixmaps(both null)
-not ok 41 - compareQPixmaps(one null)
+ok 43 - compareQPixmaps(both null)
+not ok 44 - compareQPixmaps(one null)
---
type: QCOMPARE
message: Compared QPixmaps differ.
@@ -320,7 +342,7 @@ not ok 41 - compareQPixmaps(one null)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 42 - compareQPixmaps(other null)
+not ok 45 - compareQPixmaps(other null)
---
type: QCOMPARE
message: Compared QPixmaps differ.
@@ -332,8 +354,8 @@ not ok 42 - compareQPixmaps(other null)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 43 - compareQPixmaps(equal)
-not ok 44 - compareQPixmaps(different size)
+ok 46 - compareQPixmaps(equal)
+not ok 47 - compareQPixmaps(different size)
---
type: QCOMPARE
message: Compared QPixmaps differ in size.
@@ -345,14 +367,14 @@ not ok 44 - compareQPixmaps(different size)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 45 - compareQPixmaps(different pixels)
+not ok 48 - compareQPixmaps(different pixels)
---
# Compared values are not the same
at: tst_Cmptest::compareQPixmaps() (qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp:0)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 46 - compareQPixmaps(different dpr)
+not ok 49 - compareQPixmaps(different dpr)
---
type: QCOMPARE
message: Compared QPixmaps differ in device pixel ratio.
@@ -364,8 +386,8 @@ not ok 46 - compareQPixmaps(different dpr)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 47 - compareQImages(both null)
-not ok 48 - compareQImages(one null)
+ok 50 - compareQImages(both null)
+not ok 51 - compareQImages(one null)
---
type: QCOMPARE
message: Compared QImages differ.
@@ -377,7 +399,7 @@ not ok 48 - compareQImages(one null)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 49 - compareQImages(other null)
+not ok 52 - compareQImages(other null)
---
type: QCOMPARE
message: Compared QImages differ.
@@ -389,8 +411,8 @@ not ok 49 - compareQImages(other null)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 50 - compareQImages(equal)
-not ok 51 - compareQImages(different size)
+ok 53 - compareQImages(equal)
+not ok 54 - compareQImages(different size)
---
type: QCOMPARE
message: Compared QImages differ in size.
@@ -402,7 +424,7 @@ not ok 51 - compareQImages(different size)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 52 - compareQImages(different format)
+not ok 55 - compareQImages(different format)
---
type: QCOMPARE
message: Compared QImages differ in format.
@@ -414,14 +436,14 @@ not ok 52 - compareQImages(different format)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 53 - compareQImages(different pixels)
+not ok 56 - compareQImages(different pixels)
---
# Compared values are not the same
at: tst_Cmptest::compareQImages() (qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp:0)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 54 - compareQImages(different dpr)
+not ok 57 - compareQImages(different dpr)
---
type: QCOMPARE
message: Compared QImages differ in device pixel ratio.
@@ -433,8 +455,8 @@ not ok 54 - compareQImages(different dpr)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 55 - compareQRegion(equal-empty)
-not ok 56 - compareQRegion(1-empty)
+ok 58 - compareQRegion(equal-empty)
+not ok 59 - compareQRegion(1-empty)
---
type: QCOMPARE
message: Compared values are not the same
@@ -446,8 +468,8 @@ not ok 56 - compareQRegion(1-empty)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 57 - compareQRegion(equal)
-not ok 58 - compareQRegion(different lists)
+ok 60 - compareQRegion(equal)
+not ok 61 - compareQRegion(different lists)
---
type: QCOMPARE
message: Compared values are not the same
@@ -459,7 +481,7 @@ not ok 58 - compareQRegion(different lists)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 59 - compareQVector2D()
+not ok 62 - compareQVector2D()
---
type: QCOMPARE
message: Compared values are not the same
@@ -471,7 +493,7 @@ not ok 59 - compareQVector2D()
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 60 - compareQVector3D()
+not ok 63 - compareQVector3D()
---
type: QCOMPARE
message: Compared values are not the same
@@ -483,7 +505,7 @@ not ok 60 - compareQVector3D()
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 61 - compareQVector4D()
+not ok 64 - compareQVector4D()
---
type: QCOMPARE
message: Compared values are not the same
@@ -495,7 +517,48 @@ not ok 61 - compareQVector4D()
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 62 - verify()
+not ok 65 - compareQPalettes(all roles are different)
+ ---
+ type: QCOMPARE
+ message: Compared values are not the same
+ wanted: QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Light:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Midlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Dark:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Mid:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Text:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],BrightText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ButtonText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Base:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Window:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Shadow:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Highlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],HighlightedText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Link:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],LinkVisited:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],AlternateBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],PlaceholderText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]") (expectedPalette)
+ found: QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]") (actualPalette)
+ expected: QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Light:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Midlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Dark:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Mid:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Text:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],BrightText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ButtonText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Base:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Window:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Shadow:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Highlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],HighlightedText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Link:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],LinkVisited:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],AlternateBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],PlaceholderText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]") (expectedPalette)
+ actual: QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]") (actualPalette)
+ at: tst_Cmptest::compareQPalettes() (qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
+ line: 0
+ ...
+not ok 66 - compareQPalettes(one role is different)
+ ---
+ type: QCOMPARE
+ message: Compared values are not the same
+ wanted: QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]") (expectedPalette)
+ found: QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]") (actualPalette)
+ expected: QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]") (expectedPalette)
+ actual: QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]") (actualPalette)
+ at: tst_Cmptest::compareQPalettes() (qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
+ line: 0
+ ...
+ok 67 - compareQPalettes(all roles are the same)
+not ok 68 - tryCompare()
+ ---
+ type: QCOMPARE
+ message: Compared values are not the same
+ wanted: DeferredFlag(false) (DeferredFlag())
+ found: DeferredFlag(true) (c)
+ expected: DeferredFlag(false) (DeferredFlag())
+ actual: DeferredFlag(true) (c)
+ at: tst_Cmptest::tryCompare() (qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
+ line: 0
+ extensions:
+ messages:
+ - severity: info
+ message: Should now time out and fail
+ ...
+not ok 69 - verify()
---
type: QVERIFY
message: Verification failed
@@ -507,10 +570,10 @@ not ok 62 - verify()
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 63 - verify2()
+not ok 70 - verify2()
---
type: QVERIFY
- message: 42
+ message: 42 >= 2 (as expected, in fact)
wanted: true (opaqueFunc() < 2)
found: false (opaqueFunc() < 2)
expected: true (opaqueFunc() < 2)
@@ -519,33 +582,37 @@ not ok 63 - verify2()
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-not ok 64 - tryVerify()
+not ok 71 - tryVerify()
---
type: QVERIFY
message: Verification failed
- wanted: true (opaqueFunc() < 2)
- found: false (opaqueFunc() < 2)
- expected: true (opaqueFunc() < 2)
- actual: false (opaqueFunc() < 2)
+ wanted: true (!c)
+ found: false (!c)
+ expected: true (!c)
+ actual: false (!c)
at: tst_Cmptest::tryVerify() (qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp:0)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
+ extensions:
+ messages:
+ - severity: info
+ message: Should now time out and fail
...
-not ok 65 - tryVerify2()
+not ok 72 - tryVerify2()
---
type: QVERIFY
- message: 42
- wanted: true (opaqueFunc() < 2)
- found: false (opaqueFunc() < 2)
- expected: true (opaqueFunc() < 2)
- actual: false (opaqueFunc() < 2)
+ message: Should time out and fail
+ wanted: true (!c)
+ found: false (!c)
+ expected: true (!c)
+ actual: false (!c)
at: tst_Cmptest::tryVerify2() (qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp:0)
file: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp
line: 0
...
-ok 66 - verifyExplicitOperatorBool()
-ok 67 - cleanupTestCase()
-1..67
-# tests 67
-# pass 21
-# fail 46
+ok 73 - verifyExplicitOperatorBool()
+ok 74 - cleanupTestCase()
+1..74
+# tests 74
+# pass 23
+# fail 51
diff --git a/tests/auto/testlib/selftests/expected_cmptest.teamcity b/tests/auto/testlib/selftests/expected_cmptest.teamcity
index 6bddfef86f..b5ff675465 100644
--- a/tests/auto/testlib/selftests/expected_cmptest.teamcity
+++ b/tests/auto/testlib/selftests/expected_cmptest.teamcity
@@ -46,6 +46,12 @@
##teamcity[testStarted name='compare_tostring(both non-null user type)' flowId='tst_Cmptest']
##teamcity[testFailed name='compare_tostring(both non-null user type)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='Compared values are not the same|n Actual (actual) : QVariant(PhonyClass,<value not representable as string>)|n Expected (expected): QVariant(PhonyClass,<value not representable as string>)' flowId='tst_Cmptest']
##teamcity[testFinished name='compare_tostring(both non-null user type)' flowId='tst_Cmptest']
+##teamcity[testStarted name='compare_unknown()' flowId='tst_Cmptest']
+##teamcity[testFailed name='compare_unknown()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='Compared values are not the same|n Actual : a|n Expected : b' flowId='tst_Cmptest']
+##teamcity[testFinished name='compare_unknown()' flowId='tst_Cmptest']
+##teamcity[testStarted name='compare_textFromDebug()' flowId='tst_Cmptest']
+##teamcity[testFailed name='compare_textFromDebug()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='Compared values are not the same|n Actual (a): QDebug stream: 0|n Expected (b): QDebug stream: 1' flowId='tst_Cmptest']
+##teamcity[testFinished name='compare_textFromDebug()' flowId='tst_Cmptest']
##teamcity[testStarted name='compareQObjects()' flowId='tst_Cmptest']
##teamcity[testFailed name='compareQObjects()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='Compared QObject pointers are not the same|n Actual (&object1): QObject/"object1"|n Expected (&object2): QObject/"object2"' flowId='tst_Cmptest']
##teamcity[testFinished name='compareQObjects()' flowId='tst_Cmptest']
@@ -95,6 +101,8 @@
##teamcity[testStarted name='compareQListDouble()' flowId='tst_Cmptest']
##teamcity[testFailed name='compareQListDouble()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='Compared lists differ at index 0.|n Actual (double1): 1.5|n Expected (double2): 1' flowId='tst_Cmptest']
##teamcity[testFinished name='compareQListDouble()' flowId='tst_Cmptest']
+##teamcity[testStarted name='compareContainerToInitializerList()' flowId='tst_Cmptest']
+##teamcity[testFinished name='compareContainerToInitializerList()' flowId='tst_Cmptest']
##teamcity[testStarted name='compareQColor(Qt::yellow vs "yellow")' flowId='tst_Cmptest']
##teamcity[testFinished name='compareQColor(Qt::yellow vs "yellow")' flowId='tst_Cmptest']
##teamcity[testStarted name='compareQColor(Qt::yellow vs Qt::green)' flowId='tst_Cmptest']
@@ -163,17 +171,30 @@
##teamcity[testStarted name='compareQVector4D()' flowId='tst_Cmptest']
##teamcity[testFailed name='compareQVector4D()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='Compared values are not the same|n Actual (v4a): QVector4D(1, 2, 3, 4)|n Expected (v4b): QVector4D(1, 3, 3, 4)' flowId='tst_Cmptest']
##teamcity[testFinished name='compareQVector4D()' flowId='tst_Cmptest']
+##teamcity[testStarted name='compareQPalettes(all roles are different)' flowId='tst_Cmptest']
+##teamcity[testFailed name='compareQPalettes(all roles are different)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='Compared values are not the same|n Actual (actualPalette) : QPalette(resolve=0x7fffffffffffffff,"WindowText:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Button:|[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001|],Light:|[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002|],Midlight:|[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003|],Dark:|[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004|],Mid:|[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005|],Text:|[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006|],BrightText:|[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007|],ButtonText:|[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008|],Base:|[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009|],Window:|[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a|],Shadow:|[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b|],Highlight:|[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c|],HighlightedText:|[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d|],Link:|[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e|],LinkVisited:|[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f|],AlternateBase:|[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010|],ToolTipBase:|[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012|],ToolTipText:|[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013|],PlaceholderText:|[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014|],Accent:|[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015|]")|n Expected (expectedPalette): QPalette(resolve=0x7fffffffffffffff,"WindowText:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Button:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Light:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Midlight:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Dark:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Mid:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Text:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],BrightText:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],ButtonText:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Base:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Window:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Shadow:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Highlight:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],HighlightedText:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Link:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],LinkVisited:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],AlternateBase:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],ToolTipBase:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],ToolTipText:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],PlaceholderText:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Accent:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|]")' flowId='tst_Cmptest']
+##teamcity[testFinished name='compareQPalettes(all roles are different)' flowId='tst_Cmptest']
+##teamcity[testStarted name='compareQPalettes(one role is different)' flowId='tst_Cmptest']
+##teamcity[testFailed name='compareQPalettes(one role is different)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='Compared values are not the same|n Actual (actualPalette) : QPalette(resolve=0x7fffffffffffffff,"WindowText:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Button:|[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001|],Light:|[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002|],Midlight:|[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003|],Dark:|[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004|],Mid:|[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005|],Text:|[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006|],BrightText:|[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007|],ButtonText:|[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008|],Base:|[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009|],Window:|[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a|],Shadow:|[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b|],Highlight:|[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c|],HighlightedText:|[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d|],Link:|[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e|],LinkVisited:|[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f|],AlternateBase:|[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010|],ToolTipBase:|[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012|],ToolTipText:|[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013|],PlaceholderText:|[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014|],Accent:|[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015|]")|n Expected (expectedPalette): QPalette(resolve=0x7fffffffffffffff,"WindowText:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|],Button:|[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001|],Light:|[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002|],Midlight:|[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003|],Dark:|[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004|],Mid:|[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005|],Text:|[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006|],BrightText:|[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007|],ButtonText:|[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008|],Base:|[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009|],Window:|[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a|],Shadow:|[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b|],Highlight:|[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c|],HighlightedText:|[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d|],Link:|[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e|],LinkVisited:|[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f|],AlternateBase:|[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010|],ToolTipBase:|[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012|],ToolTipText:|[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013|],PlaceholderText:|[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014|],Accent:|[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000|]")' flowId='tst_Cmptest']
+##teamcity[testFinished name='compareQPalettes(one role is different)' flowId='tst_Cmptest']
+##teamcity[testStarted name='compareQPalettes(all roles are the same)' flowId='tst_Cmptest']
+##teamcity[testFinished name='compareQPalettes(all roles are the same)' flowId='tst_Cmptest']
+##teamcity[testStarted name='tryCompare()' flowId='tst_Cmptest']
+##teamcity[testFailed name='tryCompare()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='Compared values are not the same|n Actual (c) : DeferredFlag(true)|n Expected (DeferredFlag()): DeferredFlag(false)' flowId='tst_Cmptest']
+##teamcity[testStdOut name='tryCompare()' out='QINFO: Should now time out and fail' flowId='tst_Cmptest']
+##teamcity[testFinished name='tryCompare()' flowId='tst_Cmptest']
##teamcity[testStarted name='verify()' flowId='tst_Cmptest']
##teamcity[testFailed name='verify()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='|'opaqueFunc() < 2|' returned FALSE. ()' flowId='tst_Cmptest']
##teamcity[testFinished name='verify()' flowId='tst_Cmptest']
##teamcity[testStarted name='verify2()' flowId='tst_Cmptest']
-##teamcity[testFailed name='verify2()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='|'opaqueFunc() < 2|' returned FALSE. (42)' flowId='tst_Cmptest']
+##teamcity[testFailed name='verify2()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='|'opaqueFunc() < 2|' returned FALSE. (42 >= 2 (as expected, in fact))' flowId='tst_Cmptest']
##teamcity[testFinished name='verify2()' flowId='tst_Cmptest']
##teamcity[testStarted name='tryVerify()' flowId='tst_Cmptest']
-##teamcity[testFailed name='tryVerify()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='|'opaqueFunc() < 2|' returned FALSE. ()' flowId='tst_Cmptest']
+##teamcity[testFailed name='tryVerify()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='|'!c|' returned FALSE. ()' flowId='tst_Cmptest']
+##teamcity[testStdOut name='tryVerify()' out='QINFO: Should now time out and fail' flowId='tst_Cmptest']
##teamcity[testFinished name='tryVerify()' flowId='tst_Cmptest']
##teamcity[testStarted name='tryVerify2()' flowId='tst_Cmptest']
-##teamcity[testFailed name='tryVerify2()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='|'opaqueFunc() < 2|' returned FALSE. (42)' flowId='tst_Cmptest']
+##teamcity[testFailed name='tryVerify2()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)|]' details='|'!c|' returned FALSE. (Should time out and fail)' flowId='tst_Cmptest']
##teamcity[testFinished name='tryVerify2()' flowId='tst_Cmptest']
##teamcity[testStarted name='verifyExplicitOperatorBool()' flowId='tst_Cmptest']
##teamcity[testFinished name='verifyExplicitOperatorBool()' flowId='tst_Cmptest']
diff --git a/tests/auto/testlib/selftests/expected_cmptest.txt b/tests/auto/testlib/selftests/expected_cmptest.txt
index 0fe70cdef6..ff81a46397 100644
--- a/tests/auto/testlib/selftests/expected_cmptest.txt
+++ b/tests/auto/testlib/selftests/expected_cmptest.txt
@@ -51,6 +51,14 @@ FAIL! : tst_Cmptest::compare_tostring(both non-null user type) Compared values
Actual (actual) : QVariant(PhonyClass,<value not representable as string>)
Expected (expected): QVariant(PhonyClass,<value not representable as string>)
Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
+FAIL! : tst_Cmptest::compare_unknown() Compared values are not the same
+ Actual : a
+ Expected : b
+ Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
+FAIL! : tst_Cmptest::compare_textFromDebug() Compared values are not the same
+ Actual (a): QDebug stream: 0
+ Expected (b): QDebug stream: 1
+ Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
FAIL! : tst_Cmptest::compareQObjects() Compared QObject pointers are not the same
Actual (&object1): QObject/"object1"
Expected (&object2): QObject/"object2"
@@ -108,6 +116,7 @@ FAIL! : tst_Cmptest::compareQListDouble() Compared lists differ at index 0.
Actual (double1): 1.5
Expected (double2): 1
Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
+PASS : tst_Cmptest::compareContainerToInitializerList()
PASS : tst_Cmptest::compareQColor(Qt::yellow vs "yellow")
FAIL! : tst_Cmptest::compareQColor(Qt::yellow vs Qt::green) Compared values are not the same
Actual (colorA): #ffffff00
@@ -183,15 +192,30 @@ FAIL! : tst_Cmptest::compareQVector4D() Compared values are not the same
Actual (v4a): QVector4D(1, 2, 3, 4)
Expected (v4b): QVector4D(1, 3, 3, 4)
Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
+FAIL! : tst_Cmptest::compareQPalettes(all roles are different) Compared values are not the same
+ Actual (actualPalette) : QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]")
+ Expected (expectedPalette): QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Light:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Midlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Dark:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Mid:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Text:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],BrightText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ButtonText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Base:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Window:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Shadow:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Highlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],HighlightedText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Link:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],LinkVisited:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],AlternateBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],PlaceholderText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]")
+ Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
+FAIL! : tst_Cmptest::compareQPalettes(one role is different) Compared values are not the same
+ Actual (actualPalette) : QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]")
+ Expected (expectedPalette): QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]")
+ Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
+PASS : tst_Cmptest::compareQPalettes(all roles are the same)
+QINFO : tst_Cmptest::tryCompare() Should now time out and fail
+FAIL! : tst_Cmptest::tryCompare() Compared values are not the same
+ Actual (c) : DeferredFlag(true)
+ Expected (DeferredFlag()): DeferredFlag(false)
+ Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
FAIL! : tst_Cmptest::verify() 'opaqueFunc() < 2' returned FALSE. ()
Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
-FAIL! : tst_Cmptest::verify2() 'opaqueFunc() < 2' returned FALSE. (42)
+FAIL! : tst_Cmptest::verify2() 'opaqueFunc() < 2' returned FALSE. (42 >= 2 (as expected, in fact))
Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
-FAIL! : tst_Cmptest::tryVerify() 'opaqueFunc() < 2' returned FALSE. ()
+QINFO : tst_Cmptest::tryVerify() Should now time out and fail
+FAIL! : tst_Cmptest::tryVerify() '!c' returned FALSE. ()
Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
-FAIL! : tst_Cmptest::tryVerify2() 'opaqueFunc() < 2' returned FALSE. (42)
+FAIL! : tst_Cmptest::tryVerify2() '!c' returned FALSE. (Should time out and fail)
Loc: [qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp(0)]
PASS : tst_Cmptest::verifyExplicitOperatorBool()
PASS : tst_Cmptest::cleanupTestCase()
-Totals: 21 passed, 46 failed, 0 skipped, 0 blacklisted, 0ms
+Totals: 23 passed, 51 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Cmptest *********
diff --git a/tests/auto/testlib/selftests/expected_cmptest.xml b/tests/auto/testlib/selftests/expected_cmptest.xml
index 509dca88b7..df4d8b28be 100644
--- a/tests/auto/testlib/selftests/expected_cmptest.xml
+++ b/tests/auto/testlib/selftests/expected_cmptest.xml
@@ -111,6 +111,22 @@
</Incident>
<Duration msecs="0"/>
</TestFunction>
+ <TestFunction name="compare_unknown">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
+ <Description><![CDATA[Compared values are not the same
+ Actual : a
+ Expected : b]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compare_textFromDebug">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
+ <Description><![CDATA[Compared values are not the same
+ Actual (a): QDebug stream: 0
+ Expected (b): QDebug stream: 1]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
<TestFunction name="compareQObjects">
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
<Description><![CDATA[Compared QObject pointers are not the same
@@ -220,6 +236,10 @@
</Incident>
<Duration msecs="0"/>
</TestFunction>
+ <TestFunction name="compareContainerToInitializerList">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
<TestFunction name="compareQColor">
<Incident type="pass" file="" line="0">
<DataTag><![CDATA[Qt::yellow vs "yellow"]]></DataTag>
@@ -363,6 +383,35 @@
</Incident>
<Duration msecs="0"/>
</TestFunction>
+ <TestFunction name="compareQPalettes">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
+ <DataTag><![CDATA[all roles are different]]></DataTag>
+ <Description><![CDATA[Compared values are not the same
+ Actual (actualPalette) : QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]")
+ Expected (expectedPalette): QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Light:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Midlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Dark:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Mid:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Text:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],BrightText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ButtonText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Base:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Window:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Shadow:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Highlight:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],HighlightedText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Link:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],LinkVisited:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],AlternateBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipBase:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],ToolTipText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],PlaceholderText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]")]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
+ <DataTag><![CDATA[one role is different]]></DataTag>
+ <Description><![CDATA[Compared values are not the same
+ Actual (actualPalette) : QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000015,Disabled:#ff000015,Inactive:#ff000015]")
+ Expected (expectedPalette): QPalette(resolve=0x7fffffffffffffff,"WindowText:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000],Button:[Active:#ff000001,Disabled:#ff000001,Inactive:#ff000001],Light:[Active:#ff000002,Disabled:#ff000002,Inactive:#ff000002],Midlight:[Active:#ff000003,Disabled:#ff000003,Inactive:#ff000003],Dark:[Active:#ff000004,Disabled:#ff000004,Inactive:#ff000004],Mid:[Active:#ff000005,Disabled:#ff000005,Inactive:#ff000005],Text:[Active:#ff000006,Disabled:#ff000006,Inactive:#ff000006],BrightText:[Active:#ff000007,Disabled:#ff000007,Inactive:#ff000007],ButtonText:[Active:#ff000008,Disabled:#ff000008,Inactive:#ff000008],Base:[Active:#ff000009,Disabled:#ff000009,Inactive:#ff000009],Window:[Active:#ff00000a,Disabled:#ff00000a,Inactive:#ff00000a],Shadow:[Active:#ff00000b,Disabled:#ff00000b,Inactive:#ff00000b],Highlight:[Active:#ff00000c,Disabled:#ff00000c,Inactive:#ff00000c],HighlightedText:[Active:#ff00000d,Disabled:#ff00000d,Inactive:#ff00000d],Link:[Active:#ff00000e,Disabled:#ff00000e,Inactive:#ff00000e],LinkVisited:[Active:#ff00000f,Disabled:#ff00000f,Inactive:#ff00000f],AlternateBase:[Active:#ff000010,Disabled:#ff000010,Inactive:#ff000010],ToolTipBase:[Active:#ff000012,Disabled:#ff000012,Inactive:#ff000012],ToolTipText:[Active:#ff000013,Disabled:#ff000013,Inactive:#ff000013],PlaceholderText:[Active:#ff000014,Disabled:#ff000014,Inactive:#ff000014],Accent:[Active:#ff000000,Disabled:#ff000000,Inactive:#ff000000]")]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[all roles are the same]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="tryCompare">
+ <Message type="qinfo" file="" line="0">
+ <Description><![CDATA[Should now time out and fail]]></Description>
+ </Message>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
+ <Description><![CDATA[Compared values are not the same
+ Actual (c) : DeferredFlag(true)
+ Expected (DeferredFlag()): DeferredFlag(false)]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
<TestFunction name="verify">
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
<Description><![CDATA['opaqueFunc() < 2' returned FALSE. ()]]></Description>
@@ -371,19 +420,22 @@
</TestFunction>
<TestFunction name="verify2">
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
- <Description><![CDATA['opaqueFunc() < 2' returned FALSE. (42)]]></Description>
+ <Description><![CDATA['opaqueFunc() < 2' returned FALSE. (42 >= 2 (as expected, in fact))]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="tryVerify">
+ <Message type="qinfo" file="" line="0">
+ <Description><![CDATA[Should now time out and fail]]></Description>
+ </Message>
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
- <Description><![CDATA['opaqueFunc() < 2' returned FALSE. ()]]></Description>
+ <Description><![CDATA['!c' returned FALSE. ()]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="tryVerify2">
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/cmptest/tst_cmptest.cpp" line="0">
- <Description><![CDATA['opaqueFunc() < 2' returned FALSE. (42)]]></Description>
+ <Description><![CDATA['!c' returned FALSE. (Should time out and fail)]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
diff --git a/tests/auto/testlib/selftests/expected_commandlinedata.tap b/tests/auto/testlib/selftests/expected_commandlinedata.tap
index 1e1abfba50..d623e73f40 100644
--- a/tests/auto/testlib/selftests/expected_commandlinedata.tap
+++ b/tests/auto/testlib/selftests/expected_commandlinedata.tap
@@ -1,18 +1,18 @@
TAP version 13
# tst_DataTable
ok 1 - initTestCase()
-# QVERIFY(test)
ok 2 - fiveTablePasses(fiveTablePasses_data1)
-# QVERIFY(test)
+ # inform: QVERIFY(test)
ok 3 - fiveTablePasses(fiveTablePasses_data2)
-# QVERIFY(test)
+ # inform: QVERIFY(test)
ok 4 - fiveTablePasses(fiveTablePasses_data3)
-# QVERIFY(test)
+ # inform: QVERIFY(test)
ok 5 - fiveTablePasses(fiveTablePasses_data4)
-# QVERIFY(test)
+ # inform: QVERIFY(test)
ok 6 - fiveTablePasses(fiveTablePasses_data5)
-# QVERIFY(test)
+ # inform: QVERIFY(test)
ok 7 - fiveTablePasses(fiveTablePasses_data1)
+ # inform: QVERIFY(test)
ok 8 - cleanupTestCase()
1..8
# tests 8
diff --git a/tests/auto/testlib/selftests/expected_counting.tap b/tests/auto/testlib/selftests/expected_counting.tap
index a5ef13a973..63f1c83fb1 100644
--- a/tests/auto/testlib/selftests/expected_counting.tap
+++ b/tests/auto/testlib/selftests/expected_counting.tap
@@ -95,21 +95,32 @@ not ok 21 - testFailInInit(fail)
...
ok 22 - testFailInInit(after)
ok 23 - testFailInCleanup(before)
-# This test function should execute and then QFAIL in cleanup()
not ok 24 - testFailInCleanup(fail)
---
# Fail in cleanup()
at: tst_Counting::testFailInCleanup() (qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp:0)
file: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp
line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: This test function should execute and then QFAIL in cleanup()
...
ok 25 - testFailInCleanup(after)
ok 26 - testSkipInInit(before)
ok 27 - testSkipInInit(skip) # SKIP Skip in init()
ok 28 - testSkipInInit(after)
ok 29 - testSkipInCleanup(before)
-# This test function should execute and then QSKIP in cleanup()
ok 30 - testSkipInCleanup(skip) # SKIP Skip in cleanup()
+ ---
+ at: tst_Counting::testSkipInCleanup() (qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp
+ line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: This test function should execute and then QSKIP in cleanup()
+ ...
ok 31 - testSkipInCleanup(after)
ok 32 - cleanupTestCase()
1..32
diff --git a/tests/auto/testlib/selftests/expected_crashes_3.txt b/tests/auto/testlib/selftests/expected_crashes_3.txt
deleted file mode 100644
index c32ea53675..0000000000
--- a/tests/auto/testlib/selftests/expected_crashes_3.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-********* Start testing of tst_Crashes *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
-PASS : tst_Crashes::initTestCase()
-QFATAL : tst_Crashes::crash() Received signal 11
- Function time: ms Total time: ms
-FAIL! : tst_Crashes::crash() Received a fatal error.
-Totals: 1 passed, 1 failed, 0 skipped, 0 blacklisted
-********* Finished testing of tst_Crashes *********
diff --git a/tests/auto/testlib/selftests/expected_crashes_4.txt b/tests/auto/testlib/selftests/expected_crashes_4.txt
deleted file mode 100644
index 90ae91b8ba..0000000000
--- a/tests/auto/testlib/selftests/expected_crashes_4.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-********* Start testing of tst_Crashes *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
-PASS : tst_Crashes::initTestCase()
-QFATAL : tst_Crashes::crash() Received signal 11
- Function time: ms Total time: ms
-FAIL! : tst_Crashes::crash() Received a fatal error.
diff --git a/tests/auto/testlib/selftests/expected_crashes_5.txt b/tests/auto/testlib/selftests/expected_crashes_5.txt
deleted file mode 100644
index 088b9c5324..0000000000
--- a/tests/auto/testlib/selftests/expected_crashes_5.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-********* Start testing of tst_Crashes *********
-Config: Using QtTest library @INSERT_QT_VERSION_HERE@, Qt @INSERT_QT_VERSION_HERE@
-PASS : tst_Crashes::initTestCase()
-QFATAL : tst_Crashes::crash() Received signal 11
- Function time: ms Total time: ms
diff --git a/tests/auto/testlib/selftests/expected_eventloop.junitxml b/tests/auto/testlib/selftests/expected_eventloop.junitxml
new file mode 100644
index 0000000000..566bc1605e
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_eventloop.junitxml
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite name="tst_EventLoop" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="5" failures="1" errors="0" skipped="1" time="@TEST_DURATION@">
+ <properties>
+ <property name="QTestVersion" value="@INSERT_QT_VERSION_HERE@"/>
+ <property name="QtVersion" value="@INSERT_QT_VERSION_HERE@"/>
+ <property name="QtBuild" value=""/>
+ </properties>
+ <testcase name="initTestCase" classname="tst_EventLoop" time="@TEST_DURATION@"/>
+ <testcase name="fail" classname="tst_EventLoop" time="@TEST_DURATION@">
+ <failure type="fail" message="Failing test should still clean up"/>
+ </testcase>
+ <testcase name="skip" classname="tst_EventLoop" time="@TEST_DURATION@">
+ <skipped message="Skipping test should still clean up"/>
+ </testcase>
+ <testcase name="pass" classname="tst_EventLoop" time="@TEST_DURATION@"/>
+ <testcase name="cleanupTestCase" classname="tst_EventLoop" time="@TEST_DURATION@"/>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_eventloop.lightxml b/tests/auto/testlib/selftests/expected_eventloop.lightxml
new file mode 100644
index 0000000000..40880fde01
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_eventloop.lightxml
@@ -0,0 +1,30 @@
+ <Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+ </Environment>
+ <TestFunction name="initTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="fail">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp" line="0">
+ <Description><![CDATA[Failing test should still clean up]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="skip">
+ <Incident type="skip" file="qtbase/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp" line="0">
+ <Description><![CDATA[Skipping test should still clean up]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="pass">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="cleanupTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_eventloop.tap b/tests/auto/testlib/selftests/expected_eventloop.tap
new file mode 100644
index 0000000000..496a6e636a
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_eventloop.tap
@@ -0,0 +1,17 @@
+TAP version 13
+# tst_EventLoop
+ok 1 - initTestCase()
+not ok 2 - fail()
+ ---
+ # Failing test should still clean up
+ at: tst_EventLoop::fail() (qtbase/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp
+ line: 0
+ ...
+ok 3 - skip() # SKIP Skipping test should still clean up
+ok 4 - pass()
+ok 5 - cleanupTestCase()
+1..5
+# tests 5
+# pass 3
+# fail 1
diff --git a/tests/auto/testlib/selftests/expected_eventloop.teamcity b/tests/auto/testlib/selftests/expected_eventloop.teamcity
new file mode 100644
index 0000000000..a293a20135
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_eventloop.teamcity
@@ -0,0 +1,14 @@
+##teamcity[testSuiteStarted name='tst_EventLoop' flowId='tst_EventLoop']
+##teamcity[testStarted name='initTestCase()' flowId='tst_EventLoop']
+##teamcity[testFinished name='initTestCase()' flowId='tst_EventLoop']
+##teamcity[testStarted name='fail()' flowId='tst_EventLoop']
+##teamcity[testFailed name='fail()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp(0)|]' details='Failing test should still clean up' flowId='tst_EventLoop']
+##teamcity[testFinished name='fail()' flowId='tst_EventLoop']
+##teamcity[testStarted name='skip()' flowId='tst_EventLoop']
+##teamcity[testIgnored name='skip()' message='Skipping test should still clean up |[Loc: qtbase/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp(0)|]' flowId='tst_EventLoop']
+##teamcity[testFinished name='skip()' flowId='tst_EventLoop']
+##teamcity[testStarted name='pass()' flowId='tst_EventLoop']
+##teamcity[testFinished name='pass()' flowId='tst_EventLoop']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_EventLoop']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_EventLoop']
+##teamcity[testSuiteFinished name='tst_EventLoop' flowId='tst_EventLoop']
diff --git a/tests/auto/testlib/selftests/expected_eventloop.txt b/tests/auto/testlib/selftests/expected_eventloop.txt
new file mode 100644
index 0000000000..548ef393f6
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_eventloop.txt
@@ -0,0 +1,11 @@
+********* Start testing of tst_EventLoop *********
+Config: Using QtTest library
+PASS : tst_EventLoop::initTestCase()
+FAIL! : tst_EventLoop::fail() Failing test should still clean up
+ Loc: [qtbase/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp(0)]
+SKIP : tst_EventLoop::skip() Skipping test should still clean up
+ Loc: [qtbase/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp(0)]
+PASS : tst_EventLoop::pass()
+PASS : tst_EventLoop::cleanupTestCase()
+Totals: 3 passed, 1 failed, 1 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_EventLoop *********
diff --git a/tests/auto/testlib/selftests/expected_eventloop.xml b/tests/auto/testlib/selftests/expected_eventloop.xml
new file mode 100644
index 0000000000..f9d9475666
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_eventloop.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_EventLoop">
+ <Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+ </Environment>
+ <TestFunction name="initTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="fail">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp" line="0">
+ <Description><![CDATA[Failing test should still clean up]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="skip">
+ <Incident type="skip" file="qtbase/tests/auto/testlib/selftests/eventloop/tst_eventloop.cpp" line="0">
+ <Description><![CDATA[Skipping test should still clean up]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="pass">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="cleanupTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_expectfail.tap b/tests/auto/testlib/selftests/expected_expectfail.tap
index 8527acdaf1..8ad34c5f0a 100644
--- a/tests/auto/testlib/selftests/expected_expectfail.tap
+++ b/tests/auto/testlib/selftests/expected_expectfail.tap
@@ -1,33 +1,54 @@
TAP version 13
# tst_ExpectFail
ok 1 - initTestCase()
-# begin
not ok 2 - xfailAndContinue() # TODO This should xfail
---
- at: tst_ExpectFail::xfailAndContinue() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: begin
+ - severity: xfail
+ message: This should xfail
+ at: tst_ExpectFail::xfailAndContinue() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
+ - severity: debug
+ message: after
...
-# after
-# begin
not ok 3 - xfailAndAbort() # TODO This should xfail
---
- at: tst_ExpectFail::xfailAndAbort() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: begin
+ - severity: xfail
+ message: This should xfail
+ at: tst_ExpectFail::xfailAndAbort() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
-not ok 4 - xfailContinueSkip() # TODO This should xfail then skip
+not ok 4 - xfailContinueSkip() # SKIP This skip should be reported and counted
---
at: tst_ExpectFail::xfailContinueSkip() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: This should xfail then skip
+ at: tst_ExpectFail::xfailContinueSkip() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
-ok 4 - xfailContinueSkip() # SKIP This skip should be reported and counted
not ok 5 - xfailAbortSkip() # TODO This should xfail
---
- at: tst_ExpectFail::xfailAbortSkip() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: This should xfail
+ at: tst_ExpectFail::xfailAbortSkip() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
not ok 6 - xfailTwice()
---
@@ -66,107 +87,181 @@ not ok 10 - xfailDataDrivenTwice(Fail Continue)
...
not ok 11 - xfailWithQString() # TODO A string
---
- at: tst_ExpectFail::xfailWithQString() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: A string
+ at: tst_ExpectFail::xfailWithQString() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
+ - severity: xfail
+ message: Bug 5 (The message)
+ at: tst_ExpectFail::xfailWithQString() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
ok 12 - xfailDataDrivenWithQString(Pass Abort) # SKIP Each Continue or Pass reports this and increments skip-count
ok 13 - xfailDataDrivenWithQString(Pass Continue) # SKIP Each Continue or Pass reports this and increments skip-count
not ok 14 - xfailDataDrivenWithQString(Fail Abort) # TODO A string
---
- at: tst_ExpectFail::xfailDataDrivenWithQString() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: A string
+ at: tst_ExpectFail::xfailDataDrivenWithQString() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
-not ok 15 - xfailDataDrivenWithQString(Fail Continue) # TODO A string
+not ok 15 - xfailDataDrivenWithQString(Fail Continue) # SKIP Each Continue or Pass reports this and increments skip-count
---
at: tst_ExpectFail::xfailDataDrivenWithQString() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: A string
+ at: tst_ExpectFail::xfailDataDrivenWithQString() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
+ - severity: xfail
+ message: Bug 5 (The message)
+ at: tst_ExpectFail::xfailDataDrivenWithQString() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
-ok 15 - xfailDataDrivenWithQString(Fail Continue) # SKIP Each Continue or Pass reports this and increments skip-count
ok 16 - xfailDataDrivenWithQVerify(Pass Abort)
ok 17 - xfailDataDrivenWithQVerify(Pass Continue)
not ok 18 - xfailDataDrivenWithQVerify(Fail Abort) # TODO This test should xfail
---
- at: tst_ExpectFail::xfailDataDrivenWithQVerify() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: This test should xfail
+ at: tst_ExpectFail::xfailDataDrivenWithQVerify() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
not ok 19 - xfailDataDrivenWithQVerify(Fail Continue) # TODO This test should xfail
---
- at: tst_ExpectFail::xfailDataDrivenWithQVerify() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: This test should xfail
+ at: tst_ExpectFail::xfailDataDrivenWithQVerify() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
ok 20 - xfailDataDrivenWithQCompare(Pass Abort)
ok 21 - xfailDataDrivenWithQCompare(Pass Continue)
not ok 22 - xfailDataDrivenWithQCompare(Fail Abort) # TODO This test should xfail
---
- at: tst_ExpectFail::xfailDataDrivenWithQCompare() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: This test should xfail
+ at: tst_ExpectFail::xfailDataDrivenWithQCompare() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
not ok 23 - xfailDataDrivenWithQCompare(Fail Continue) # TODO This test should xfail
---
- at: tst_ExpectFail::xfailDataDrivenWithQCompare() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: This test should xfail
+ at: tst_ExpectFail::xfailDataDrivenWithQCompare() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
-# Should pass (*not* xpass), despite test-case name
ok 24 - xfailOnWrongRow(Fail Abort)
-# Should pass (*not* xpass), despite test-case name
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: Should pass (*not* xpass), despite test-case name
+ ...
ok 25 - xfailOnWrongRow(Fail Continue)
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: Should pass (*not* xpass), despite test-case name
+ ...
not ok 26 - xfailOnAnyRow(Fail Abort) # TODO This test should xfail
---
- at: tst_ExpectFail::xfailOnAnyRow() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: This test should xfail
+ at: tst_ExpectFail::xfailOnAnyRow() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
not ok 27 - xfailOnAnyRow(Fail Continue) # TODO This test should xfail
---
- at: tst_ExpectFail::xfailOnAnyRow() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: This test should xfail
+ at: tst_ExpectFail::xfailOnAnyRow() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+ line: 0
...
-# Should fail (*not* xfail), despite test-case name
not ok 28 - xfailWithoutCheck(Fail Abort)
---
# QEXPECT_FAIL was called without any subsequent verification statements
+ extensions:
+ messages:
+ - severity: debug
+ message: Should fail (*not* xfail), despite test-case name
...
-# Should fail (*not* xfail), despite test-case name
not ok 29 - xfailWithoutCheck(Fail Continue)
---
# QEXPECT_FAIL was called without any subsequent verification statements
+ extensions:
+ messages:
+ - severity: debug
+ message: Should fail (*not* xfail), despite test-case name
...
ok 30 - xpassAbort() # TODO 'true' returned TRUE unexpectedly. ()
ok 31 - xpassAbortSkip() # TODO 'true' returned TRUE unexpectedly. ()
ok 32 - xpassAbortXfailContinue() # TODO 'true' returned TRUE unexpectedly. ()
ok 33 - xpassContinue() # TODO 'true' returned TRUE unexpectedly. ()
-# This should be reached
+# debug: This should be reached
ok 34 - xpassContinueSkip() # TODO 'true' returned TRUE unexpectedly. ()
ok 34 - xpassContinueSkip() # SKIP This should be reached but not increment skip-count
ok 35 - xpassContinueXfailAbort() # TODO 'true' returned TRUE unexpectedly. ()
-not ok 36 - xpassContinueXfailAbort() # TODO This test should xfail but not add to totals
- ---
- at: tst_ExpectFail::xpassContinueXfailAbort() (qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
- line: 0
- ...
+ # xfail: This test should xfail but not add to totals
ok 36 - xpassAbortDataDrivenWithQVerify(XPass) # TODO 'true' returned TRUE unexpectedly. ()
ok 37 - xpassAbortDataDrivenWithQVerify(Pass)
ok 38 - xpassContinueDataDrivenWithQVerify(XPass) # TODO 'true' returned TRUE unexpectedly. ()
-# Test should Continue past XPASS
-# Test should simply PASS
+# debug: Test should Continue past XPASS
ok 39 - xpassContinueDataDrivenWithQVerify(Pass)
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: Test should simply PASS
+ ...
ok 40 - xpassAbortDataDrivenWithQCompare(XPass) # TODO QCOMPARE(1, 1) returned TRUE unexpectedly.
ok 41 - xpassAbortDataDrivenWithQCompare(Pass)
ok 42 - xpassContinueDataDrivenWithQCompare(XPass) # TODO QCOMPARE(1, 1) returned TRUE unexpectedly.
-# Test should Continue past XPASS
-# Test should simply PASS
+# debug: Test should Continue past XPASS
ok 43 - xpassContinueDataDrivenWithQCompare(Pass)
-# Totals should add up to 44: 23 passed, 17 failed, 4 skipped
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: Test should simply PASS
+ ...
ok 44 - cleanupTestCase()
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: Totals should add up to 44: 23 passed, 17 failed, 4 skipped
+ ...
1..44
# tests 44
# pass 23
diff --git a/tests/auto/testlib/selftests/expected_extendedcompare.junitxml b/tests/auto/testlib/selftests/expected_extendedcompare.junitxml
new file mode 100644
index 0000000000..b840773852
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_extendedcompare.junitxml
@@ -0,0 +1,526 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite name="tst_ExtendedCompare" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="148" failures="74" errors="0" skipped="0" time="@TEST_DURATION@">
+ <properties>
+ <property name="QTestVersion" value="@INSERT_QT_VERSION_HERE@"/>
+ <property name="QtVersion" value="@INSERT_QT_VERSION_HERE@"/>
+ <property name="QtBuild" value=""/>
+ </properties>
+ <testcase name="initTestCase" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareInts(EQ:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareInts(EQ:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 2]]>
+ </failure>
+ </testcase>
+ <testcase name="compareInts(EQ:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 2
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareInts(NE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be different from the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareInts(NE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareInts(NE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareInts(LT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareInts(LT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareInts(LT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 2
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareInts(LE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareInts(LE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareInts(LE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 2
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareInts(GT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareInts(GT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 2]]>
+ </failure>
+ </testcase>
+ <testcase name="compareInts(GT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareInts(GE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareInts(GE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 2]]>
+ </failure>
+ </testcase>
+ <testcase name="compareInts(GE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareFloats(EQ:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareFloats(EQ:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1.1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareFloats(EQ:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1.1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareFloats(NE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be different from the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareFloats(NE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareFloats(NE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareFloats(LT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareFloats(LT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareFloats(LT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1.1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareFloats(LE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareFloats(LE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareFloats(LE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1.1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareFloats(GT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareFloats(GT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1.1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareFloats(GT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareFloats(GE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareFloats(GE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1.1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareFloats(GE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareDoubles(EQ:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareDoubles(EQ:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 0.1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareDoubles(EQ:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0.1
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareDoubles(NE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be different from the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareDoubles(NE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareDoubles(NE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareDoubles(LT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareDoubles(LT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareDoubles(LT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0.1
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareDoubles(LE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareDoubles(LE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareDoubles(LE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0.1
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareDoubles(GT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareDoubles(GT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 0.1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareDoubles(GT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareDoubles(GE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareDoubles(GE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 0.1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareDoubles(GE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="comparePointers(EQ:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="comparePointers(EQ:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 2]]>
+ </failure>
+ </testcase>
+ <testcase name="comparePointers(EQ:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 2
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="comparePointers(NE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be different from the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="comparePointers(NE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="comparePointers(NE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="comparePointers(LT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="comparePointers(LT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="comparePointers(LT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 2
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="comparePointers(LE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="comparePointers(LE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="comparePointers(LE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 2
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="comparePointers(GT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="comparePointers(GT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 2]]>
+ </failure>
+ </testcase>
+ <testcase name="comparePointers(GT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="comparePointers(GE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="comparePointers(GE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 2]]>
+ </failure>
+ </testcase>
+ <testcase name="comparePointers(GE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareToNullptr(EQ:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareToNullptr(EQ:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): "nullptr"
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareToNullptr(EQ:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): "nullptr"]]>
+ </failure>
+ </testcase>
+ <testcase name="compareToNullptr(NE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be different from the baseline, but is not">
+ <![CDATA[ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"]]>
+ </failure>
+ </testcase>
+ <testcase name="compareToNullptr(NE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareToNullptr(NE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareToNullptr(LT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"]]>
+ </failure>
+ </testcase>
+ <testcase name="compareToNullptr(LT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareToNullptr(LT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): "nullptr"]]>
+ </failure>
+ </testcase>
+ <testcase name="compareToNullptr(LE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareToNullptr(LE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareToNullptr(LE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): "nullptr"]]>
+ </failure>
+ </testcase>
+ <testcase name="compareToNullptr(GT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"]]>
+ </failure>
+ </testcase>
+ <testcase name="compareToNullptr(GT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): "nullptr"
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareToNullptr(GT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareToNullptr(GE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareToNullptr(GE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): "nullptr"
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareToNullptr(GE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareUnregistereEnum(EQ:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareUnregistereEnum(EQ:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareUnregistereEnum(EQ:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareUnregistereEnum(NE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be different from the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareUnregistereEnum(NE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareUnregistereEnum(NE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareUnregistereEnum(LT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareUnregistereEnum(LT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareUnregistereEnum(LT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareUnregistereEnum(LE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareUnregistereEnum(LE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareUnregistereEnum(LE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 1
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareUnregistereEnum(GT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 0]]>
+ </failure>
+ </testcase>
+ <testcase name="compareUnregistereEnum(GT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareUnregistereEnum(GT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareUnregistereEnum(GE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareUnregistereEnum(GE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): 0
+ Baseline (rhs): 1]]>
+ </failure>
+ </testcase>
+ <testcase name="compareUnregistereEnum(GE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareRegistereEnum(EQ:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareRegistereEnum(EQ:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): Monday
+ Baseline (rhs): Sunday]]>
+ </failure>
+ </testcase>
+ <testcase name="compareRegistereEnum(EQ:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): Sunday
+ Baseline (rhs): Monday]]>
+ </failure>
+ </testcase>
+ <testcase name="compareRegistereEnum(NE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be different from the baseline, but is not">
+ <![CDATA[ Computed (lhs): Monday
+ Baseline (rhs): Monday]]>
+ </failure>
+ </testcase>
+ <testcase name="compareRegistereEnum(NE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareRegistereEnum(NE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareRegistereEnum(LT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): Monday
+ Baseline (rhs): Monday]]>
+ </failure>
+ </testcase>
+ <testcase name="compareRegistereEnum(LT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareRegistereEnum(LT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): Sunday
+ Baseline (rhs): Monday]]>
+ </failure>
+ </testcase>
+ <testcase name="compareRegistereEnum(LE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareRegistereEnum(LE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareRegistereEnum(LE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): Sunday
+ Baseline (rhs): Monday]]>
+ </failure>
+ </testcase>
+ <testcase name="compareRegistereEnum(GT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): Monday
+ Baseline (rhs): Monday]]>
+ </failure>
+ </testcase>
+ <testcase name="compareRegistereEnum(GT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): Monday
+ Baseline (rhs): Sunday]]>
+ </failure>
+ </testcase>
+ <testcase name="compareRegistereEnum(GT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareRegistereEnum(GE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareRegistereEnum(GE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): Monday
+ Baseline (rhs): Sunday]]>
+ </failure>
+ </testcase>
+ <testcase name="compareRegistereEnum(GE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareCustomTypes(EQ:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareCustomTypes(EQ:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)]]>
+ </failure>
+ </testcase>
+ <testcase name="compareCustomTypes(EQ:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)]]>
+ </failure>
+ </testcase>
+ <testcase name="compareCustomTypes(NE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be different from the baseline, but is not">
+ <![CDATA[ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)]]>
+ </failure>
+ </testcase>
+ <testcase name="compareCustomTypes(NE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareCustomTypes(NE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareCustomTypes(LT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)]]>
+ </failure>
+ </testcase>
+ <testcase name="compareCustomTypes(LT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareCustomTypes(LT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)]]>
+ </failure>
+ </testcase>
+ <testcase name="compareCustomTypes(LE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareCustomTypes(LE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareCustomTypes(LE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)]]>
+ </failure>
+ </testcase>
+ <testcase name="compareCustomTypes(GT:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)]]>
+ </failure>
+ </testcase>
+ <testcase name="compareCustomTypes(GT:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than the baseline, but is not">
+ <![CDATA[ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)]]>
+ </failure>
+ </testcase>
+ <testcase name="compareCustomTypes(GT:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareCustomTypes(GE:left == right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="compareCustomTypes(GE:left &lt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be greater than or equal to the baseline, but is not">
+ <![CDATA[ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)]]>
+ </failure>
+ </testcase>
+ <testcase name="compareCustomTypes(GE:left &gt; right)" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+ <testcase name="checkComparisonForTemporaryObjects" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be equal to the baseline, but is not">
+ <![CDATA[ Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0
+ Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1]]>
+ </failure>
+ </testcase>
+ <testcase name="checkComparisonWithTimeout" classname="tst_ExtendedCompare" time="@TEST_DURATION@">
+ <failure type="fail" message="The computed value is expected to be less than the baseline, but is not">
+ <![CDATA[ Computed (c) : ClassWithDeferredSetter(1)
+ Baseline (ClassWithDeferredSetter(0)): ClassWithDeferredSetter(0)]]>
+ </failure>
+ </testcase>
+ <testcase name="cleanupTestCase" classname="tst_ExtendedCompare" time="@TEST_DURATION@"/>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_extendedcompare.lightxml b/tests/auto/testlib/selftests/expected_extendedcompare.lightxml
new file mode 100644
index 0000000000..fd6e486939
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_extendedcompare.lightxml
@@ -0,0 +1,746 @@
+ <Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+ </Environment>
+ <TestFunction name="initTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareInts">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareFloats">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1.1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1.1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1.1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 1.1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1.1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1.1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareDoubles">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0.1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 0.1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 0.1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 0.1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0.1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0.1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="comparePointers">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareToNullptr">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareUnregistereEnum">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareRegistereEnum">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Sunday]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): Sunday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): Sunday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): Sunday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Sunday]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Sunday]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareCustomTypes">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="checkComparisonForTemporaryObjects">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0
+ Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0
+ Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0
+ Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="checkComparisonWithTimeout">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (c) : ClassWithDeferredSetter(1)
+ Baseline (ClassWithDeferredSetter(0)): ClassWithDeferredSetter(0)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (c) : ClassWithDeferredSetter(1)
+ Baseline (ClassWithDeferredSetter(-1)): ClassWithDeferredSetter(-1)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (c) : ClassWithDeferredSetter(1)
+ Baseline (ClassWithDeferredSetter(1)): ClassWithDeferredSetter(1)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="cleanupTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_extendedcompare.tap b/tests/auto/testlib/selftests/expected_extendedcompare.tap
new file mode 100644
index 0000000000..25d30c3e08
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_extendedcompare.tap
@@ -0,0 +1,1022 @@
+TAP version 13
+# tst_ExtendedCompare
+ok 1 - initTestCase()
+ok 2 - compareInts(EQ:left == right)
+not ok 3 - compareInts(EQ:left < right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == 2 (rhs)
+ found: 1 (lhs)
+ expected: == 2 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareInts() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 4 - compareInts(EQ:left > right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == 1 (rhs)
+ found: 2 (lhs)
+ expected: == 1 (rhs)
+ actual: 2 (lhs)
+ at: tst_ExtendedCompare::compareInts() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 5 - compareInts(NE:left == right)
+ ---
+ type: QCOMPARE_NE
+ message: The computed value is expected to be different from the baseline, but is not
+ wanted: != 1 (rhs)
+ found: 1 (lhs)
+ expected: != 1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareInts() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 6 - compareInts(NE:left < right)
+ok 7 - compareInts(NE:left > right)
+not ok 8 - compareInts(LT:left == right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < 1 (rhs)
+ found: 1 (lhs)
+ expected: < 1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareInts() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 9 - compareInts(LT:left < right)
+not ok 10 - compareInts(LT:left > right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < 1 (rhs)
+ found: 2 (lhs)
+ expected: < 1 (rhs)
+ actual: 2 (lhs)
+ at: tst_ExtendedCompare::compareInts() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 11 - compareInts(LE:left == right)
+ok 12 - compareInts(LE:left < right)
+not ok 13 - compareInts(LE:left > right)
+ ---
+ type: QCOMPARE_LE
+ message: The computed value is expected to be less than or equal to the baseline, but is not
+ wanted: <= 1 (rhs)
+ found: 2 (lhs)
+ expected: <= 1 (rhs)
+ actual: 2 (lhs)
+ at: tst_ExtendedCompare::compareInts() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 14 - compareInts(GT:left == right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > 1 (rhs)
+ found: 1 (lhs)
+ expected: > 1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareInts() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 15 - compareInts(GT:left < right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > 2 (rhs)
+ found: 1 (lhs)
+ expected: > 2 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareInts() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 16 - compareInts(GT:left > right)
+ok 17 - compareInts(GE:left == right)
+not ok 18 - compareInts(GE:left < right)
+ ---
+ type: QCOMPARE_GE
+ message: The computed value is expected to be greater than or equal to the baseline, but is not
+ wanted: >= 2 (rhs)
+ found: 1 (lhs)
+ expected: >= 2 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareInts() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 19 - compareInts(GE:left > right)
+ok 20 - compareFloats(EQ:left == right)
+not ok 21 - compareFloats(EQ:left < right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == 1.1 (rhs)
+ found: 1 (lhs)
+ expected: == 1.1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareFloats() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 22 - compareFloats(EQ:left > right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == 1 (rhs)
+ found: 1.1 (lhs)
+ expected: == 1 (rhs)
+ actual: 1.1 (lhs)
+ at: tst_ExtendedCompare::compareFloats() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 23 - compareFloats(NE:left == right)
+ ---
+ type: QCOMPARE_NE
+ message: The computed value is expected to be different from the baseline, but is not
+ wanted: != 1 (rhs)
+ found: 1 (lhs)
+ expected: != 1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareFloats() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 24 - compareFloats(NE:left < right)
+ok 25 - compareFloats(NE:left > right)
+not ok 26 - compareFloats(LT:left == right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < 1 (rhs)
+ found: 1 (lhs)
+ expected: < 1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareFloats() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 27 - compareFloats(LT:left < right)
+not ok 28 - compareFloats(LT:left > right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < 1 (rhs)
+ found: 1.1 (lhs)
+ expected: < 1 (rhs)
+ actual: 1.1 (lhs)
+ at: tst_ExtendedCompare::compareFloats() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 29 - compareFloats(LE:left == right)
+ok 30 - compareFloats(LE:left < right)
+not ok 31 - compareFloats(LE:left > right)
+ ---
+ type: QCOMPARE_LE
+ message: The computed value is expected to be less than or equal to the baseline, but is not
+ wanted: <= 1 (rhs)
+ found: 1.1 (lhs)
+ expected: <= 1 (rhs)
+ actual: 1.1 (lhs)
+ at: tst_ExtendedCompare::compareFloats() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 32 - compareFloats(GT:left == right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > 1 (rhs)
+ found: 1 (lhs)
+ expected: > 1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareFloats() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 33 - compareFloats(GT:left < right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > 1.1 (rhs)
+ found: 1 (lhs)
+ expected: > 1.1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareFloats() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 34 - compareFloats(GT:left > right)
+ok 35 - compareFloats(GE:left == right)
+not ok 36 - compareFloats(GE:left < right)
+ ---
+ type: QCOMPARE_GE
+ message: The computed value is expected to be greater than or equal to the baseline, but is not
+ wanted: >= 1.1 (rhs)
+ found: 1 (lhs)
+ expected: >= 1.1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareFloats() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 37 - compareFloats(GE:left > right)
+ok 38 - compareDoubles(EQ:left == right)
+not ok 39 - compareDoubles(EQ:left < right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == 0.1 (rhs)
+ found: 0 (lhs)
+ expected: == 0.1 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareDoubles() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 40 - compareDoubles(EQ:left > right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == 0 (rhs)
+ found: 0.1 (lhs)
+ expected: == 0 (rhs)
+ actual: 0.1 (lhs)
+ at: tst_ExtendedCompare::compareDoubles() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 41 - compareDoubles(NE:left == right)
+ ---
+ type: QCOMPARE_NE
+ message: The computed value is expected to be different from the baseline, but is not
+ wanted: != 0 (rhs)
+ found: 0 (lhs)
+ expected: != 0 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareDoubles() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 42 - compareDoubles(NE:left < right)
+ok 43 - compareDoubles(NE:left > right)
+not ok 44 - compareDoubles(LT:left == right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < 0 (rhs)
+ found: 0 (lhs)
+ expected: < 0 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareDoubles() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 45 - compareDoubles(LT:left < right)
+not ok 46 - compareDoubles(LT:left > right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < 0 (rhs)
+ found: 0.1 (lhs)
+ expected: < 0 (rhs)
+ actual: 0.1 (lhs)
+ at: tst_ExtendedCompare::compareDoubles() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 47 - compareDoubles(LE:left == right)
+ok 48 - compareDoubles(LE:left < right)
+not ok 49 - compareDoubles(LE:left > right)
+ ---
+ type: QCOMPARE_LE
+ message: The computed value is expected to be less than or equal to the baseline, but is not
+ wanted: <= 0 (rhs)
+ found: 0.1 (lhs)
+ expected: <= 0 (rhs)
+ actual: 0.1 (lhs)
+ at: tst_ExtendedCompare::compareDoubles() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 50 - compareDoubles(GT:left == right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > 0 (rhs)
+ found: 0 (lhs)
+ expected: > 0 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareDoubles() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 51 - compareDoubles(GT:left < right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > 0.1 (rhs)
+ found: 0 (lhs)
+ expected: > 0.1 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareDoubles() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 52 - compareDoubles(GT:left > right)
+ok 53 - compareDoubles(GE:left == right)
+not ok 54 - compareDoubles(GE:left < right)
+ ---
+ type: QCOMPARE_GE
+ message: The computed value is expected to be greater than or equal to the baseline, but is not
+ wanted: >= 0.1 (rhs)
+ found: 0 (lhs)
+ expected: >= 0.1 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareDoubles() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 55 - compareDoubles(GE:left > right)
+ok 56 - comparePointers(EQ:left == right)
+not ok 57 - comparePointers(EQ:left < right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == 2 (rhs)
+ found: 1 (lhs)
+ expected: == 2 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::comparePointers() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 58 - comparePointers(EQ:left > right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == 1 (rhs)
+ found: 2 (lhs)
+ expected: == 1 (rhs)
+ actual: 2 (lhs)
+ at: tst_ExtendedCompare::comparePointers() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 59 - comparePointers(NE:left == right)
+ ---
+ type: QCOMPARE_NE
+ message: The computed value is expected to be different from the baseline, but is not
+ wanted: != 1 (rhs)
+ found: 1 (lhs)
+ expected: != 1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::comparePointers() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 60 - comparePointers(NE:left < right)
+ok 61 - comparePointers(NE:left > right)
+not ok 62 - comparePointers(LT:left == right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < 1 (rhs)
+ found: 1 (lhs)
+ expected: < 1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::comparePointers() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 63 - comparePointers(LT:left < right)
+not ok 64 - comparePointers(LT:left > right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < 1 (rhs)
+ found: 2 (lhs)
+ expected: < 1 (rhs)
+ actual: 2 (lhs)
+ at: tst_ExtendedCompare::comparePointers() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 65 - comparePointers(LE:left == right)
+ok 66 - comparePointers(LE:left < right)
+not ok 67 - comparePointers(LE:left > right)
+ ---
+ type: QCOMPARE_LE
+ message: The computed value is expected to be less than or equal to the baseline, but is not
+ wanted: <= 1 (rhs)
+ found: 2 (lhs)
+ expected: <= 1 (rhs)
+ actual: 2 (lhs)
+ at: tst_ExtendedCompare::comparePointers() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 68 - comparePointers(GT:left == right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > 1 (rhs)
+ found: 1 (lhs)
+ expected: > 1 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::comparePointers() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 69 - comparePointers(GT:left < right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > 2 (rhs)
+ found: 1 (lhs)
+ expected: > 2 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::comparePointers() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 70 - comparePointers(GT:left > right)
+ok 71 - comparePointers(GE:left == right)
+not ok 72 - comparePointers(GE:left < right)
+ ---
+ type: QCOMPARE_GE
+ message: The computed value is expected to be greater than or equal to the baseline, but is not
+ wanted: >= 2 (rhs)
+ found: 1 (lhs)
+ expected: >= 2 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::comparePointers() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 73 - comparePointers(GE:left > right)
+ok 74 - compareToNullptr(EQ:left == right)
+not ok 75 - compareToNullptr(EQ:left < right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == 1 (rhs)
+ found: "nullptr" (lhs)
+ expected: == 1 (rhs)
+ actual: "nullptr" (lhs)
+ at: tst_ExtendedCompare::compareToNullptr() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 76 - compareToNullptr(EQ:left > right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == "nullptr" (rhs)
+ found: 1 (lhs)
+ expected: == "nullptr" (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareToNullptr() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 77 - compareToNullptr(NE:left == right)
+ ---
+ type: QCOMPARE_NE
+ message: The computed value is expected to be different from the baseline, but is not
+ wanted: != "nullptr" (rhs)
+ found: "nullptr" (lhs)
+ expected: != "nullptr" (rhs)
+ actual: "nullptr" (lhs)
+ at: tst_ExtendedCompare::compareToNullptr() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 78 - compareToNullptr(NE:left < right)
+ok 79 - compareToNullptr(NE:left > right)
+not ok 80 - compareToNullptr(LT:left == right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < "nullptr" (rhs)
+ found: "nullptr" (lhs)
+ expected: < "nullptr" (rhs)
+ actual: "nullptr" (lhs)
+ at: tst_ExtendedCompare::compareToNullptr() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 81 - compareToNullptr(LT:left < right)
+not ok 82 - compareToNullptr(LT:left > right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < "nullptr" (rhs)
+ found: 1 (lhs)
+ expected: < "nullptr" (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareToNullptr() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 83 - compareToNullptr(LE:left == right)
+ok 84 - compareToNullptr(LE:left < right)
+not ok 85 - compareToNullptr(LE:left > right)
+ ---
+ type: QCOMPARE_LE
+ message: The computed value is expected to be less than or equal to the baseline, but is not
+ wanted: <= "nullptr" (rhs)
+ found: 1 (lhs)
+ expected: <= "nullptr" (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareToNullptr() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 86 - compareToNullptr(GT:left == right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > "nullptr" (rhs)
+ found: "nullptr" (lhs)
+ expected: > "nullptr" (rhs)
+ actual: "nullptr" (lhs)
+ at: tst_ExtendedCompare::compareToNullptr() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 87 - compareToNullptr(GT:left < right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > 1 (rhs)
+ found: "nullptr" (lhs)
+ expected: > 1 (rhs)
+ actual: "nullptr" (lhs)
+ at: tst_ExtendedCompare::compareToNullptr() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 88 - compareToNullptr(GT:left > right)
+ok 89 - compareToNullptr(GE:left == right)
+not ok 90 - compareToNullptr(GE:left < right)
+ ---
+ type: QCOMPARE_GE
+ message: The computed value is expected to be greater than or equal to the baseline, but is not
+ wanted: >= 1 (rhs)
+ found: "nullptr" (lhs)
+ expected: >= 1 (rhs)
+ actual: "nullptr" (lhs)
+ at: tst_ExtendedCompare::compareToNullptr() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 91 - compareToNullptr(GE:left > right)
+ok 92 - compareUnregistereEnum(EQ:left == right)
+not ok 93 - compareUnregistereEnum(EQ:left < right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == 1 (rhs)
+ found: 0 (lhs)
+ expected: == 1 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareUnregistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 94 - compareUnregistereEnum(EQ:left > right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == 0 (rhs)
+ found: 1 (lhs)
+ expected: == 0 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareUnregistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 95 - compareUnregistereEnum(NE:left == right)
+ ---
+ type: QCOMPARE_NE
+ message: The computed value is expected to be different from the baseline, but is not
+ wanted: != 0 (rhs)
+ found: 0 (lhs)
+ expected: != 0 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareUnregistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 96 - compareUnregistereEnum(NE:left < right)
+ok 97 - compareUnregistereEnum(NE:left > right)
+not ok 98 - compareUnregistereEnum(LT:left == right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < 0 (rhs)
+ found: 0 (lhs)
+ expected: < 0 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareUnregistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 99 - compareUnregistereEnum(LT:left < right)
+not ok 100 - compareUnregistereEnum(LT:left > right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < 0 (rhs)
+ found: 1 (lhs)
+ expected: < 0 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareUnregistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 101 - compareUnregistereEnum(LE:left == right)
+ok 102 - compareUnregistereEnum(LE:left < right)
+not ok 103 - compareUnregistereEnum(LE:left > right)
+ ---
+ type: QCOMPARE_LE
+ message: The computed value is expected to be less than or equal to the baseline, but is not
+ wanted: <= 0 (rhs)
+ found: 1 (lhs)
+ expected: <= 0 (rhs)
+ actual: 1 (lhs)
+ at: tst_ExtendedCompare::compareUnregistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 104 - compareUnregistereEnum(GT:left == right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > 0 (rhs)
+ found: 0 (lhs)
+ expected: > 0 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareUnregistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 105 - compareUnregistereEnum(GT:left < right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > 1 (rhs)
+ found: 0 (lhs)
+ expected: > 1 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareUnregistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 106 - compareUnregistereEnum(GT:left > right)
+ok 107 - compareUnregistereEnum(GE:left == right)
+not ok 108 - compareUnregistereEnum(GE:left < right)
+ ---
+ type: QCOMPARE_GE
+ message: The computed value is expected to be greater than or equal to the baseline, but is not
+ wanted: >= 1 (rhs)
+ found: 0 (lhs)
+ expected: >= 1 (rhs)
+ actual: 0 (lhs)
+ at: tst_ExtendedCompare::compareUnregistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 109 - compareUnregistereEnum(GE:left > right)
+ok 110 - compareRegistereEnum(EQ:left == right)
+not ok 111 - compareRegistereEnum(EQ:left < right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == Sunday (rhs)
+ found: Monday (lhs)
+ expected: == Sunday (rhs)
+ actual: Monday (lhs)
+ at: tst_ExtendedCompare::compareRegistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 112 - compareRegistereEnum(EQ:left > right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == Monday (rhs)
+ found: Sunday (lhs)
+ expected: == Monday (rhs)
+ actual: Sunday (lhs)
+ at: tst_ExtendedCompare::compareRegistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 113 - compareRegistereEnum(NE:left == right)
+ ---
+ type: QCOMPARE_NE
+ message: The computed value is expected to be different from the baseline, but is not
+ wanted: != Monday (rhs)
+ found: Monday (lhs)
+ expected: != Monday (rhs)
+ actual: Monday (lhs)
+ at: tst_ExtendedCompare::compareRegistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 114 - compareRegistereEnum(NE:left < right)
+ok 115 - compareRegistereEnum(NE:left > right)
+not ok 116 - compareRegistereEnum(LT:left == right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < Monday (rhs)
+ found: Monday (lhs)
+ expected: < Monday (rhs)
+ actual: Monday (lhs)
+ at: tst_ExtendedCompare::compareRegistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 117 - compareRegistereEnum(LT:left < right)
+not ok 118 - compareRegistereEnum(LT:left > right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < Monday (rhs)
+ found: Sunday (lhs)
+ expected: < Monday (rhs)
+ actual: Sunday (lhs)
+ at: tst_ExtendedCompare::compareRegistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 119 - compareRegistereEnum(LE:left == right)
+ok 120 - compareRegistereEnum(LE:left < right)
+not ok 121 - compareRegistereEnum(LE:left > right)
+ ---
+ type: QCOMPARE_LE
+ message: The computed value is expected to be less than or equal to the baseline, but is not
+ wanted: <= Monday (rhs)
+ found: Sunday (lhs)
+ expected: <= Monday (rhs)
+ actual: Sunday (lhs)
+ at: tst_ExtendedCompare::compareRegistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 122 - compareRegistereEnum(GT:left == right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > Monday (rhs)
+ found: Monday (lhs)
+ expected: > Monday (rhs)
+ actual: Monday (lhs)
+ at: tst_ExtendedCompare::compareRegistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 123 - compareRegistereEnum(GT:left < right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > Sunday (rhs)
+ found: Monday (lhs)
+ expected: > Sunday (rhs)
+ actual: Monday (lhs)
+ at: tst_ExtendedCompare::compareRegistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 124 - compareRegistereEnum(GT:left > right)
+ok 125 - compareRegistereEnum(GE:left == right)
+not ok 126 - compareRegistereEnum(GE:left < right)
+ ---
+ type: QCOMPARE_GE
+ message: The computed value is expected to be greater than or equal to the baseline, but is not
+ wanted: >= Sunday (rhs)
+ found: Monday (lhs)
+ expected: >= Sunday (rhs)
+ actual: Monday (lhs)
+ at: tst_ExtendedCompare::compareRegistereEnum() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 127 - compareRegistereEnum(GE:left > right)
+ok 128 - compareCustomTypes(EQ:left == right)
+not ok 129 - compareCustomTypes(EQ:left < right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == MyClass(2) (rhs)
+ found: MyClass(1) (lhs)
+ expected: == MyClass(2) (rhs)
+ actual: MyClass(1) (lhs)
+ at: tst_ExtendedCompare::compareCustomTypes() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 130 - compareCustomTypes(EQ:left > right)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == MyClass(1) (rhs)
+ found: MyClass(2) (lhs)
+ expected: == MyClass(1) (rhs)
+ actual: MyClass(2) (lhs)
+ at: tst_ExtendedCompare::compareCustomTypes() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 131 - compareCustomTypes(NE:left == right)
+ ---
+ type: QCOMPARE_NE
+ message: The computed value is expected to be different from the baseline, but is not
+ wanted: != MyClass(1) (rhs)
+ found: MyClass(1) (lhs)
+ expected: != MyClass(1) (rhs)
+ actual: MyClass(1) (lhs)
+ at: tst_ExtendedCompare::compareCustomTypes() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 132 - compareCustomTypes(NE:left < right)
+ok 133 - compareCustomTypes(NE:left > right)
+not ok 134 - compareCustomTypes(LT:left == right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < MyClass(1) (rhs)
+ found: MyClass(1) (lhs)
+ expected: < MyClass(1) (rhs)
+ actual: MyClass(1) (lhs)
+ at: tst_ExtendedCompare::compareCustomTypes() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 135 - compareCustomTypes(LT:left < right)
+not ok 136 - compareCustomTypes(LT:left > right)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < MyClass(1) (rhs)
+ found: MyClass(2) (lhs)
+ expected: < MyClass(1) (rhs)
+ actual: MyClass(2) (lhs)
+ at: tst_ExtendedCompare::compareCustomTypes() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 137 - compareCustomTypes(LE:left == right)
+ok 138 - compareCustomTypes(LE:left < right)
+not ok 139 - compareCustomTypes(LE:left > right)
+ ---
+ type: QCOMPARE_LE
+ message: The computed value is expected to be less than or equal to the baseline, but is not
+ wanted: <= MyClass(1) (rhs)
+ found: MyClass(2) (lhs)
+ expected: <= MyClass(1) (rhs)
+ actual: MyClass(2) (lhs)
+ at: tst_ExtendedCompare::compareCustomTypes() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 140 - compareCustomTypes(GT:left == right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > MyClass(1) (rhs)
+ found: MyClass(1) (lhs)
+ expected: > MyClass(1) (rhs)
+ actual: MyClass(1) (lhs)
+ at: tst_ExtendedCompare::compareCustomTypes() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 141 - compareCustomTypes(GT:left < right)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > MyClass(2) (rhs)
+ found: MyClass(1) (lhs)
+ expected: > MyClass(2) (rhs)
+ actual: MyClass(1) (lhs)
+ at: tst_ExtendedCompare::compareCustomTypes() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 142 - compareCustomTypes(GT:left > right)
+ok 143 - compareCustomTypes(GE:left == right)
+not ok 144 - compareCustomTypes(GE:left < right)
+ ---
+ type: QCOMPARE_GE
+ message: The computed value is expected to be greater than or equal to the baseline, but is not
+ wanted: >= MyClass(2) (rhs)
+ found: MyClass(1) (lhs)
+ expected: >= MyClass(2) (rhs)
+ actual: MyClass(1) (lhs)
+ at: tst_ExtendedCompare::compareCustomTypes() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 145 - compareCustomTypes(GE:left > right)
+not ok 146 - checkComparisonForTemporaryObjects(EQ)
+ ---
+ type: QCOMPARE_EQ
+ message: The computed value is expected to be equal to the baseline, but is not
+ wanted: == MyClass(1) on memory address with index 1 (getClassForValue(1).getValuePointer())
+ found: MyClass(2) on memory address with index 0 (getClassForValue(0).getValuePointer())
+ expected: == MyClass(1) on memory address with index 1 (getClassForValue(1).getValuePointer())
+ actual: MyClass(2) on memory address with index 0 (getClassForValue(0).getValuePointer())
+ at: tst_ExtendedCompare::checkComparisonForTemporaryObjects() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 147 - checkComparisonForTemporaryObjects(NE)
+ok 148 - checkComparisonForTemporaryObjects(LT)
+ok 149 - checkComparisonForTemporaryObjects(LE)
+not ok 150 - checkComparisonForTemporaryObjects(GT)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > MyClass(1) on memory address with index 1 (getClassForValue(1).getValuePointer())
+ found: MyClass(2) on memory address with index 0 (getClassForValue(0).getValuePointer())
+ expected: > MyClass(1) on memory address with index 1 (getClassForValue(1).getValuePointer())
+ actual: MyClass(2) on memory address with index 0 (getClassForValue(0).getValuePointer())
+ at: tst_ExtendedCompare::checkComparisonForTemporaryObjects() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 151 - checkComparisonForTemporaryObjects(GE)
+ ---
+ type: QCOMPARE_GE
+ message: The computed value is expected to be greater than or equal to the baseline, but is not
+ wanted: >= MyClass(1) on memory address with index 1 (getClassForValue(1).getValuePointer())
+ found: MyClass(2) on memory address with index 0 (getClassForValue(0).getValuePointer())
+ expected: >= MyClass(1) on memory address with index 1 (getClassForValue(1).getValuePointer())
+ actual: MyClass(2) on memory address with index 0 (getClassForValue(0).getValuePointer())
+ at: tst_ExtendedCompare::checkComparisonForTemporaryObjects() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 152 - checkComparisonWithTimeout(EQ)
+ok 153 - checkComparisonWithTimeout(NE)
+not ok 154 - checkComparisonWithTimeout(LT)
+ ---
+ type: QCOMPARE_LT
+ message: The computed value is expected to be less than the baseline, but is not
+ wanted: < ClassWithDeferredSetter(0) (ClassWithDeferredSetter(0))
+ found: ClassWithDeferredSetter(1) (c)
+ expected: < ClassWithDeferredSetter(0) (ClassWithDeferredSetter(0))
+ actual: ClassWithDeferredSetter(1) (c)
+ at: tst_ExtendedCompare::checkComparisonWithTimeout() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 155 - checkComparisonWithTimeout(LE)
+ ---
+ type: QCOMPARE_LE
+ message: The computed value is expected to be less than or equal to the baseline, but is not
+ wanted: <= ClassWithDeferredSetter(-1) (ClassWithDeferredSetter(-1))
+ found: ClassWithDeferredSetter(1) (c)
+ expected: <= ClassWithDeferredSetter(-1) (ClassWithDeferredSetter(-1))
+ actual: ClassWithDeferredSetter(1) (c)
+ at: tst_ExtendedCompare::checkComparisonWithTimeout() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+not ok 156 - checkComparisonWithTimeout(GT)
+ ---
+ type: QCOMPARE_GT
+ message: The computed value is expected to be greater than the baseline, but is not
+ wanted: > ClassWithDeferredSetter(1) (ClassWithDeferredSetter(1))
+ found: ClassWithDeferredSetter(1) (c)
+ expected: > ClassWithDeferredSetter(1) (ClassWithDeferredSetter(1))
+ actual: ClassWithDeferredSetter(1) (c)
+ at: tst_ExtendedCompare::checkComparisonWithTimeout() (qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
+ line: 0
+ ...
+ok 157 - checkComparisonWithTimeout(GE)
+ok 158 - cleanupTestCase()
+1..158
+# tests 158
+# pass 80
+# fail 78
diff --git a/tests/auto/testlib/selftests/expected_extendedcompare.teamcity b/tests/auto/testlib/selftests/expected_extendedcompare.teamcity
new file mode 100644
index 0000000000..4c76556138
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_extendedcompare.teamcity
@@ -0,0 +1,396 @@
+##teamcity[testSuiteStarted name='tst_ExtendedCompare' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='initTestCase()' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='initTestCase()' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareInts(EQ:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 2' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareInts(EQ:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): 2|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareInts(NE:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be different from the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareInts(LT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareInts(LT:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): 2|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareInts(LE:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than or equal to the baseline, but is not|n Computed (lhs): 2|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareInts(GT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareInts(GT:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 2' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareInts(GE:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than or equal to the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 2' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareInts(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareInts(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareFloats(EQ:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1.1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareFloats(EQ:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): 1.1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareFloats(NE:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be different from the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareFloats(LT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareFloats(LT:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): 1.1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareFloats(LE:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than or equal to the baseline, but is not|n Computed (lhs): 1.1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareFloats(GT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareFloats(GT:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1.1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareFloats(GE:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than or equal to the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1.1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareFloats(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareFloats(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareDoubles(EQ:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 0.1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareDoubles(EQ:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): 0.1|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareDoubles(NE:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be different from the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareDoubles(LT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareDoubles(LT:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): 0.1|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareDoubles(LE:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than or equal to the baseline, but is not|n Computed (lhs): 0.1|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareDoubles(GT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareDoubles(GT:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 0.1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareDoubles(GE:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than or equal to the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 0.1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareDoubles(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareDoubles(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='comparePointers(EQ:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 2' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='comparePointers(EQ:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): 2|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='comparePointers(NE:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be different from the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='comparePointers(LT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='comparePointers(LT:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): 2|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='comparePointers(LE:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than or equal to the baseline, but is not|n Computed (lhs): 2|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='comparePointers(GT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='comparePointers(GT:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 2' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='comparePointers(GE:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than or equal to the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 2' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='comparePointers(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='comparePointers(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareToNullptr(EQ:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): "nullptr"|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareToNullptr(EQ:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): "nullptr"' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareToNullptr(NE:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be different from the baseline, but is not|n Computed (lhs): "nullptr"|n Baseline (rhs): "nullptr"' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareToNullptr(LT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): "nullptr"|n Baseline (rhs): "nullptr"' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareToNullptr(LT:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): "nullptr"' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareToNullptr(LE:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than or equal to the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): "nullptr"' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareToNullptr(GT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): "nullptr"|n Baseline (rhs): "nullptr"' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareToNullptr(GT:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): "nullptr"|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareToNullptr(GE:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than or equal to the baseline, but is not|n Computed (lhs): "nullptr"|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareToNullptr(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareToNullptr(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareUnregistereEnum(EQ:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareUnregistereEnum(EQ:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareUnregistereEnum(NE:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be different from the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareUnregistereEnum(LT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareUnregistereEnum(LT:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareUnregistereEnum(LE:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than or equal to the baseline, but is not|n Computed (lhs): 1|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareUnregistereEnum(GT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 0' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareUnregistereEnum(GT:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareUnregistereEnum(GE:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than or equal to the baseline, but is not|n Computed (lhs): 0|n Baseline (rhs): 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareUnregistereEnum(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareUnregistereEnum(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareRegistereEnum(EQ:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): Monday|n Baseline (rhs): Sunday' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareRegistereEnum(EQ:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): Sunday|n Baseline (rhs): Monday' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareRegistereEnum(NE:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be different from the baseline, but is not|n Computed (lhs): Monday|n Baseline (rhs): Monday' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareRegistereEnum(LT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): Monday|n Baseline (rhs): Monday' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareRegistereEnum(LT:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): Sunday|n Baseline (rhs): Monday' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareRegistereEnum(LE:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than or equal to the baseline, but is not|n Computed (lhs): Sunday|n Baseline (rhs): Monday' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareRegistereEnum(GT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): Monday|n Baseline (rhs): Monday' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareRegistereEnum(GT:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): Monday|n Baseline (rhs): Sunday' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareRegistereEnum(GE:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than or equal to the baseline, but is not|n Computed (lhs): Monday|n Baseline (rhs): Sunday' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareRegistereEnum(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareRegistereEnum(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(EQ:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareCustomTypes(EQ:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): MyClass(1)|n Baseline (rhs): MyClass(2)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(EQ:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareCustomTypes(EQ:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (lhs): MyClass(2)|n Baseline (rhs): MyClass(1)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(EQ:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareCustomTypes(NE:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be different from the baseline, but is not|n Computed (lhs): MyClass(1)|n Baseline (rhs): MyClass(1)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(NE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(NE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(NE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareCustomTypes(LT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): MyClass(1)|n Baseline (rhs): MyClass(1)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(LT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(LT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareCustomTypes(LT:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (lhs): MyClass(2)|n Baseline (rhs): MyClass(1)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(LT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(LE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(LE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareCustomTypes(LE:left > right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than or equal to the baseline, but is not|n Computed (lhs): MyClass(2)|n Baseline (rhs): MyClass(1)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(LE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareCustomTypes(GT:left == right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): MyClass(1)|n Baseline (rhs): MyClass(1)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(GT:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareCustomTypes(GT:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (lhs): MyClass(1)|n Baseline (rhs): MyClass(2)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(GT:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(GT:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(GE:left == right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='compareCustomTypes(GE:left < right)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than or equal to the baseline, but is not|n Computed (lhs): MyClass(1)|n Baseline (rhs): MyClass(2)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(GE:left < right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='compareCustomTypes(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='compareCustomTypes(GE:left > right)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonForTemporaryObjects(EQ)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='checkComparisonForTemporaryObjects(EQ)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be equal to the baseline, but is not|n Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0|n Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonForTemporaryObjects(EQ)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonForTemporaryObjects(NE)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonForTemporaryObjects(NE)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonForTemporaryObjects(LT)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonForTemporaryObjects(LT)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonForTemporaryObjects(LE)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonForTemporaryObjects(LE)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonForTemporaryObjects(GT)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='checkComparisonForTemporaryObjects(GT)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0|n Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonForTemporaryObjects(GT)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonForTemporaryObjects(GE)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='checkComparisonForTemporaryObjects(GE)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than or equal to the baseline, but is not|n Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0|n Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonForTemporaryObjects(GE)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonWithTimeout(EQ)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonWithTimeout(EQ)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonWithTimeout(NE)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonWithTimeout(NE)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonWithTimeout(LT)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='checkComparisonWithTimeout(LT)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than the baseline, but is not|n Computed (c) : ClassWithDeferredSetter(1)|n Baseline (ClassWithDeferredSetter(0)): ClassWithDeferredSetter(0)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonWithTimeout(LT)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonWithTimeout(LE)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='checkComparisonWithTimeout(LE)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be less than or equal to the baseline, but is not|n Computed (c) : ClassWithDeferredSetter(1)|n Baseline (ClassWithDeferredSetter(-1)): ClassWithDeferredSetter(-1)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonWithTimeout(LE)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonWithTimeout(GT)' flowId='tst_ExtendedCompare']
+##teamcity[testFailed name='checkComparisonWithTimeout(GT)' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)|]' details='The computed value is expected to be greater than the baseline, but is not|n Computed (c) : ClassWithDeferredSetter(1)|n Baseline (ClassWithDeferredSetter(1)): ClassWithDeferredSetter(1)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonWithTimeout(GT)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='checkComparisonWithTimeout(GE)' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='checkComparisonWithTimeout(GE)' flowId='tst_ExtendedCompare']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_ExtendedCompare']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_ExtendedCompare']
+##teamcity[testSuiteFinished name='tst_ExtendedCompare' flowId='tst_ExtendedCompare']
diff --git a/tests/auto/testlib/selftests/expected_extendedcompare.txt b/tests/auto/testlib/selftests/expected_extendedcompare.txt
new file mode 100644
index 0000000000..08b6b6deb4
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_extendedcompare.txt
@@ -0,0 +1,396 @@
+********* Start testing of tst_ExtendedCompare *********
+Config: Using QtTest library
+PASS : tst_ExtendedCompare::initTestCase()
+PASS : tst_ExtendedCompare::compareInts(EQ:left == right)
+FAIL! : tst_ExtendedCompare::compareInts(EQ:left < right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareInts(EQ:left > right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareInts(NE:left == right) The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareInts(NE:left < right)
+PASS : tst_ExtendedCompare::compareInts(NE:left > right)
+FAIL! : tst_ExtendedCompare::compareInts(LT:left == right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareInts(LT:left < right)
+FAIL! : tst_ExtendedCompare::compareInts(LT:left > right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareInts(LE:left == right)
+PASS : tst_ExtendedCompare::compareInts(LE:left < right)
+FAIL! : tst_ExtendedCompare::compareInts(LE:left > right) The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareInts(GT:left == right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareInts(GT:left < right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareInts(GT:left > right)
+PASS : tst_ExtendedCompare::compareInts(GE:left == right)
+FAIL! : tst_ExtendedCompare::compareInts(GE:left < right) The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareInts(GE:left > right)
+PASS : tst_ExtendedCompare::compareFloats(EQ:left == right)
+FAIL! : tst_ExtendedCompare::compareFloats(EQ:left < right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1.1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareFloats(EQ:left > right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1.1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareFloats(NE:left == right) The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareFloats(NE:left < right)
+PASS : tst_ExtendedCompare::compareFloats(NE:left > right)
+FAIL! : tst_ExtendedCompare::compareFloats(LT:left == right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareFloats(LT:left < right)
+FAIL! : tst_ExtendedCompare::compareFloats(LT:left > right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1.1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareFloats(LE:left == right)
+PASS : tst_ExtendedCompare::compareFloats(LE:left < right)
+FAIL! : tst_ExtendedCompare::compareFloats(LE:left > right) The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 1.1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareFloats(GT:left == right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareFloats(GT:left < right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1.1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareFloats(GT:left > right)
+PASS : tst_ExtendedCompare::compareFloats(GE:left == right)
+FAIL! : tst_ExtendedCompare::compareFloats(GE:left < right) The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1.1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareFloats(GE:left > right)
+PASS : tst_ExtendedCompare::compareDoubles(EQ:left == right)
+FAIL! : tst_ExtendedCompare::compareDoubles(EQ:left < right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0.1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareDoubles(EQ:left > right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 0.1
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareDoubles(NE:left == right) The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareDoubles(NE:left < right)
+PASS : tst_ExtendedCompare::compareDoubles(NE:left > right)
+FAIL! : tst_ExtendedCompare::compareDoubles(LT:left == right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareDoubles(LT:left < right)
+FAIL! : tst_ExtendedCompare::compareDoubles(LT:left > right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 0.1
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareDoubles(LE:left == right)
+PASS : tst_ExtendedCompare::compareDoubles(LE:left < right)
+FAIL! : tst_ExtendedCompare::compareDoubles(LE:left > right) The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 0.1
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareDoubles(GT:left == right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareDoubles(GT:left < right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0.1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareDoubles(GT:left > right)
+PASS : tst_ExtendedCompare::compareDoubles(GE:left == right)
+FAIL! : tst_ExtendedCompare::compareDoubles(GE:left < right) The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0.1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareDoubles(GE:left > right)
+PASS : tst_ExtendedCompare::comparePointers(EQ:left == right)
+FAIL! : tst_ExtendedCompare::comparePointers(EQ:left < right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::comparePointers(EQ:left > right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::comparePointers(NE:left == right) The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::comparePointers(NE:left < right)
+PASS : tst_ExtendedCompare::comparePointers(NE:left > right)
+FAIL! : tst_ExtendedCompare::comparePointers(LT:left == right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::comparePointers(LT:left < right)
+FAIL! : tst_ExtendedCompare::comparePointers(LT:left > right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::comparePointers(LE:left == right)
+PASS : tst_ExtendedCompare::comparePointers(LE:left < right)
+FAIL! : tst_ExtendedCompare::comparePointers(LE:left > right) The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::comparePointers(GT:left == right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::comparePointers(GT:left < right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::comparePointers(GT:left > right)
+PASS : tst_ExtendedCompare::comparePointers(GE:left == right)
+FAIL! : tst_ExtendedCompare::comparePointers(GE:left < right) The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::comparePointers(GE:left > right)
+PASS : tst_ExtendedCompare::compareToNullptr(EQ:left == right)
+FAIL! : tst_ExtendedCompare::compareToNullptr(EQ:left < right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareToNullptr(EQ:left > right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): "nullptr"
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareToNullptr(NE:left == right) The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareToNullptr(NE:left < right)
+PASS : tst_ExtendedCompare::compareToNullptr(NE:left > right)
+FAIL! : tst_ExtendedCompare::compareToNullptr(LT:left == right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareToNullptr(LT:left < right)
+FAIL! : tst_ExtendedCompare::compareToNullptr(LT:left > right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): "nullptr"
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareToNullptr(LE:left == right)
+PASS : tst_ExtendedCompare::compareToNullptr(LE:left < right)
+FAIL! : tst_ExtendedCompare::compareToNullptr(LE:left > right) The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): "nullptr"
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareToNullptr(GT:left == right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareToNullptr(GT:left < right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareToNullptr(GT:left > right)
+PASS : tst_ExtendedCompare::compareToNullptr(GE:left == right)
+FAIL! : tst_ExtendedCompare::compareToNullptr(GE:left < right) The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareToNullptr(GE:left > right)
+PASS : tst_ExtendedCompare::compareUnregistereEnum(EQ:left == right)
+FAIL! : tst_ExtendedCompare::compareUnregistereEnum(EQ:left < right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareUnregistereEnum(EQ:left > right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareUnregistereEnum(NE:left == right) The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareUnregistereEnum(NE:left < right)
+PASS : tst_ExtendedCompare::compareUnregistereEnum(NE:left > right)
+FAIL! : tst_ExtendedCompare::compareUnregistereEnum(LT:left == right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareUnregistereEnum(LT:left < right)
+FAIL! : tst_ExtendedCompare::compareUnregistereEnum(LT:left > right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareUnregistereEnum(LE:left == right)
+PASS : tst_ExtendedCompare::compareUnregistereEnum(LE:left < right)
+FAIL! : tst_ExtendedCompare::compareUnregistereEnum(LE:left > right) The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareUnregistereEnum(GT:left == right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareUnregistereEnum(GT:left < right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareUnregistereEnum(GT:left > right)
+PASS : tst_ExtendedCompare::compareUnregistereEnum(GE:left == right)
+FAIL! : tst_ExtendedCompare::compareUnregistereEnum(GE:left < right) The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareUnregistereEnum(GE:left > right)
+PASS : tst_ExtendedCompare::compareRegistereEnum(EQ:left == right)
+FAIL! : tst_ExtendedCompare::compareRegistereEnum(EQ:left < right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Sunday
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareRegistereEnum(EQ:left > right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): Sunday
+ Baseline (rhs): Monday
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareRegistereEnum(NE:left == right) The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Monday
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareRegistereEnum(NE:left < right)
+PASS : tst_ExtendedCompare::compareRegistereEnum(NE:left > right)
+FAIL! : tst_ExtendedCompare::compareRegistereEnum(LT:left == right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Monday
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareRegistereEnum(LT:left < right)
+FAIL! : tst_ExtendedCompare::compareRegistereEnum(LT:left > right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): Sunday
+ Baseline (rhs): Monday
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareRegistereEnum(LE:left == right)
+PASS : tst_ExtendedCompare::compareRegistereEnum(LE:left < right)
+FAIL! : tst_ExtendedCompare::compareRegistereEnum(LE:left > right) The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): Sunday
+ Baseline (rhs): Monday
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareRegistereEnum(GT:left == right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Monday
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareRegistereEnum(GT:left < right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Sunday
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareRegistereEnum(GT:left > right)
+PASS : tst_ExtendedCompare::compareRegistereEnum(GE:left == right)
+FAIL! : tst_ExtendedCompare::compareRegistereEnum(GE:left < right) The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Sunday
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareRegistereEnum(GE:left > right)
+PASS : tst_ExtendedCompare::compareCustomTypes(EQ:left == right)
+FAIL! : tst_ExtendedCompare::compareCustomTypes(EQ:left < right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareCustomTypes(EQ:left > right) The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareCustomTypes(NE:left == right) The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareCustomTypes(NE:left < right)
+PASS : tst_ExtendedCompare::compareCustomTypes(NE:left > right)
+FAIL! : tst_ExtendedCompare::compareCustomTypes(LT:left == right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareCustomTypes(LT:left < right)
+FAIL! : tst_ExtendedCompare::compareCustomTypes(LT:left > right) The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareCustomTypes(LE:left == right)
+PASS : tst_ExtendedCompare::compareCustomTypes(LE:left < right)
+FAIL! : tst_ExtendedCompare::compareCustomTypes(LE:left > right) The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareCustomTypes(GT:left == right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::compareCustomTypes(GT:left < right) The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareCustomTypes(GT:left > right)
+PASS : tst_ExtendedCompare::compareCustomTypes(GE:left == right)
+FAIL! : tst_ExtendedCompare::compareCustomTypes(GE:left < right) The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::compareCustomTypes(GE:left > right)
+FAIL! : tst_ExtendedCompare::checkComparisonForTemporaryObjects(EQ) The computed value is expected to be equal to the baseline, but is not
+ Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0
+ Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::checkComparisonForTemporaryObjects(NE)
+PASS : tst_ExtendedCompare::checkComparisonForTemporaryObjects(LT)
+PASS : tst_ExtendedCompare::checkComparisonForTemporaryObjects(LE)
+FAIL! : tst_ExtendedCompare::checkComparisonForTemporaryObjects(GT) The computed value is expected to be greater than the baseline, but is not
+ Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0
+ Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::checkComparisonForTemporaryObjects(GE) The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0
+ Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::checkComparisonWithTimeout(EQ)
+PASS : tst_ExtendedCompare::checkComparisonWithTimeout(NE)
+FAIL! : tst_ExtendedCompare::checkComparisonWithTimeout(LT) The computed value is expected to be less than the baseline, but is not
+ Computed (c) : ClassWithDeferredSetter(1)
+ Baseline (ClassWithDeferredSetter(0)): ClassWithDeferredSetter(0)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::checkComparisonWithTimeout(LE) The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (c) : ClassWithDeferredSetter(1)
+ Baseline (ClassWithDeferredSetter(-1)): ClassWithDeferredSetter(-1)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+FAIL! : tst_ExtendedCompare::checkComparisonWithTimeout(GT) The computed value is expected to be greater than the baseline, but is not
+ Computed (c) : ClassWithDeferredSetter(1)
+ Baseline (ClassWithDeferredSetter(1)): ClassWithDeferredSetter(1)
+ Loc: [qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp(0)]
+PASS : tst_ExtendedCompare::checkComparisonWithTimeout(GE)
+PASS : tst_ExtendedCompare::cleanupTestCase()
+Totals: 80 passed, 78 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_ExtendedCompare *********
diff --git a/tests/auto/testlib/selftests/expected_extendedcompare.xml b/tests/auto/testlib/selftests/expected_extendedcompare.xml
new file mode 100644
index 0000000000..ab55eebf89
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_extendedcompare.xml
@@ -0,0 +1,749 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_ExtendedCompare">
+ <Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+ </Environment>
+ <TestFunction name="initTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareInts">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareFloats">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1.1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1.1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1.1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 1.1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1.1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1.1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareDoubles">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0.1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 0.1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 0.1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 0.1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0.1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0.1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="comparePointers">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 2
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 2]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareToNullptr">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): "nullptr"]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): "nullptr"
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareUnregistereEnum">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): 1
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 0]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): 0
+ Baseline (rhs): 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareRegistereEnum">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Sunday]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): Sunday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): Sunday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): Sunday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Monday]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Sunday]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): Monday
+ Baseline (rhs): Sunday]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="compareCustomTypes">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[NE:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be different from the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE:left > right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE:left < right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE:left > right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (lhs): MyClass(2)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left == right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(1)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GT:left > right]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left == right]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE:left < right]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (lhs): MyClass(1)
+ Baseline (rhs): MyClass(2)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE:left > right]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="checkComparisonForTemporaryObjects">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[EQ]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be equal to the baseline, but is not
+ Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0
+ Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LT]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[LE]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0
+ Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GE]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than or equal to the baseline, but is not
+ Computed (getClassForValue(0).getValuePointer()): MyClass(2) on memory address with index 0
+ Baseline (getClassForValue(1).getValuePointer()): MyClass(1) on memory address with index 1]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="checkComparisonWithTimeout">
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[EQ]]></DataTag>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[NE]]></DataTag>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LT]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than the baseline, but is not
+ Computed (c) : ClassWithDeferredSetter(1)
+ Baseline (ClassWithDeferredSetter(0)): ClassWithDeferredSetter(0)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[LE]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be less than or equal to the baseline, but is not
+ Computed (c) : ClassWithDeferredSetter(1)
+ Baseline (ClassWithDeferredSetter(-1)): ClassWithDeferredSetter(-1)]]></Description>
+ </Incident>
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp" line="0">
+ <DataTag><![CDATA[GT]]></DataTag>
+ <Description><![CDATA[The computed value is expected to be greater than the baseline, but is not
+ Computed (c) : ClassWithDeferredSetter(1)
+ Baseline (ClassWithDeferredSetter(1)): ClassWithDeferredSetter(1)]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[GE]]></DataTag>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="cleanupTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_failcleanup.junitxml b/tests/auto/testlib/selftests/expected_failcleanup.junitxml
index a40c724a46..8ea5799363 100644
--- a/tests/auto/testlib/selftests/expected_failcleanup.junitxml
+++ b/tests/auto/testlib/selftests/expected_failcleanup.junitxml
@@ -6,8 +6,8 @@
<property name="QtBuild" value=""/>
</properties>
<testcase name="initTestCase" classname="tst_FailCleanup" time="@TEST_DURATION@"/>
- <testcase name="aTestFunction" classname="tst_FailCleanup" time="@TEST_DURATION@"/>
- <testcase name="cleanupTestCase" classname="tst_FailCleanup" time="@TEST_DURATION@">
- <failure type="fail" message="&apos;false&apos; returned FALSE. (Fail inside cleanupTestCase)"/>
+ <testcase name="aTestFunction" classname="tst_FailCleanup" time="@TEST_DURATION@">
+ <failure type="fail" message="&apos;false&apos; returned FALSE. (Fail inside cleanup)"/>
</testcase>
+ <testcase name="cleanupTestCase" classname="tst_FailCleanup" time="@TEST_DURATION@"/>
</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_failcleanup.lightxml b/tests/auto/testlib/selftests/expected_failcleanup.lightxml
index ce9da0d2a8..a9d7a1361f 100644
--- a/tests/auto/testlib/selftests/expected_failcleanup.lightxml
+++ b/tests/auto/testlib/selftests/expected_failcleanup.lightxml
@@ -8,13 +8,13 @@
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="aTestFunction">
- <Incident type="pass" file="" line="0" />
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp" line="0">
+ <Description><![CDATA['false' returned FALSE. (Fail inside cleanup)]]></Description>
+ </Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
- <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp" line="0">
- <Description><![CDATA['false' returned FALSE. (Fail inside cleanupTestCase)]]></Description>
- </Incident>
+ <Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_failcleanup.tap b/tests/auto/testlib/selftests/expected_failcleanup.tap
index 8ec0aca6d4..64556b32b2 100644
--- a/tests/auto/testlib/selftests/expected_failcleanup.tap
+++ b/tests/auto/testlib/selftests/expected_failcleanup.tap
@@ -1,19 +1,19 @@
TAP version 13
# tst_FailCleanup
ok 1 - initTestCase()
-ok 2 - aTestFunction()
-not ok 3 - cleanupTestCase()
+not ok 2 - aTestFunction()
---
type: QVERIFY
- message: Fail inside cleanupTestCase
+ message: Fail inside cleanup
wanted: true (false)
found: false (false)
expected: true (false)
actual: false (false)
- at: tst_FailCleanup::cleanupTestCase() (qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp:0)
+ at: tst_FailCleanup::aTestFunction() (qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp:0)
file: qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp
line: 0
...
+ok 3 - cleanupTestCase()
1..3
# tests 3
# pass 2
diff --git a/tests/auto/testlib/selftests/expected_failcleanup.teamcity b/tests/auto/testlib/selftests/expected_failcleanup.teamcity
index 1f8d353581..12d7b2f154 100644
--- a/tests/auto/testlib/selftests/expected_failcleanup.teamcity
+++ b/tests/auto/testlib/selftests/expected_failcleanup.teamcity
@@ -2,8 +2,8 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_FailCleanup']
##teamcity[testFinished name='initTestCase()' flowId='tst_FailCleanup']
##teamcity[testStarted name='aTestFunction()' flowId='tst_FailCleanup']
+##teamcity[testFailed name='aTestFunction()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp(0)|]' details='|'false|' returned FALSE. (Fail inside cleanup)' flowId='tst_FailCleanup']
##teamcity[testFinished name='aTestFunction()' flowId='tst_FailCleanup']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_FailCleanup']
-##teamcity[testFailed name='cleanupTestCase()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp(0)|]' details='|'false|' returned FALSE. (Fail inside cleanupTestCase)' flowId='tst_FailCleanup']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_FailCleanup']
##teamcity[testSuiteFinished name='tst_FailCleanup' flowId='tst_FailCleanup']
diff --git a/tests/auto/testlib/selftests/expected_failcleanup.txt b/tests/auto/testlib/selftests/expected_failcleanup.txt
index a5776e59bf..4fac7940fd 100644
--- a/tests/auto/testlib/selftests/expected_failcleanup.txt
+++ b/tests/auto/testlib/selftests/expected_failcleanup.txt
@@ -1,8 +1,8 @@
********* Start testing of tst_FailCleanup *********
Config: Using QtTest library
PASS : tst_FailCleanup::initTestCase()
-PASS : tst_FailCleanup::aTestFunction()
-FAIL! : tst_FailCleanup::cleanupTestCase() 'false' returned FALSE. (Fail inside cleanupTestCase)
+FAIL! : tst_FailCleanup::aTestFunction() 'false' returned FALSE. (Fail inside cleanup)
Loc: [qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp(0)]
+PASS : tst_FailCleanup::cleanupTestCase()
Totals: 2 passed, 1 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_FailCleanup *********
diff --git a/tests/auto/testlib/selftests/expected_failcleanup.xml b/tests/auto/testlib/selftests/expected_failcleanup.xml
index 3521802ca0..f4f041e704 100644
--- a/tests/auto/testlib/selftests/expected_failcleanup.xml
+++ b/tests/auto/testlib/selftests/expected_failcleanup.xml
@@ -10,13 +10,13 @@
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="aTestFunction">
- <Incident type="pass" file="" line="0" />
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp" line="0">
+ <Description><![CDATA['false' returned FALSE. (Fail inside cleanup)]]></Description>
+ </Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
- <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp" line="0">
- <Description><![CDATA['false' returned FALSE. (Fail inside cleanupTestCase)]]></Description>
- </Incident>
+ <Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_failcleanuptestcase.junitxml b/tests/auto/testlib/selftests/expected_failcleanuptestcase.junitxml
new file mode 100644
index 0000000000..8e694a4dfe
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_failcleanuptestcase.junitxml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite name="tst_FailCleanupTestCase" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="3" failures="1" errors="0" skipped="0" time="@TEST_DURATION@">
+ <properties>
+ <property name="QTestVersion" value="@INSERT_QT_VERSION_HERE@"/>
+ <property name="QtVersion" value="@INSERT_QT_VERSION_HERE@"/>
+ <property name="QtBuild" value=""/>
+ </properties>
+ <testcase name="initTestCase" classname="tst_FailCleanupTestCase" time="@TEST_DURATION@"/>
+ <testcase name="aTestFunction" classname="tst_FailCleanupTestCase" time="@TEST_DURATION@"/>
+ <testcase name="cleanupTestCase" classname="tst_FailCleanupTestCase" time="@TEST_DURATION@">
+ <failure type="fail" message="&apos;false&apos; returned FALSE. (Fail inside cleanupTestCase)"/>
+ </testcase>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_failcleanuptestcase.lightxml b/tests/auto/testlib/selftests/expected_failcleanuptestcase.lightxml
new file mode 100644
index 0000000000..ed92e1e6b0
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_failcleanuptestcase.lightxml
@@ -0,0 +1,20 @@
+ <Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+ </Environment>
+ <TestFunction name="initTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="aTestFunction">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="cleanupTestCase">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failcleanuptestcase/tst_failcleanuptestcase.cpp" line="0">
+ <Description><![CDATA['false' returned FALSE. (Fail inside cleanupTestCase)]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_failcleanuptestcase.tap b/tests/auto/testlib/selftests/expected_failcleanuptestcase.tap
new file mode 100644
index 0000000000..1bad92ce1f
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_failcleanuptestcase.tap
@@ -0,0 +1,20 @@
+TAP version 13
+# tst_FailCleanupTestCase
+ok 1 - initTestCase()
+ok 2 - aTestFunction()
+not ok 3 - cleanupTestCase()
+ ---
+ type: QVERIFY
+ message: Fail inside cleanupTestCase
+ wanted: true (false)
+ found: false (false)
+ expected: true (false)
+ actual: false (false)
+ at: tst_FailCleanupTestCase::cleanupTestCase() (qtbase/tests/auto/testlib/selftests/failcleanuptestcase/tst_failcleanuptestcase.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/failcleanuptestcase/tst_failcleanuptestcase.cpp
+ line: 0
+ ...
+1..3
+# tests 3
+# pass 2
+# fail 1
diff --git a/tests/auto/testlib/selftests/expected_failcleanuptestcase.teamcity b/tests/auto/testlib/selftests/expected_failcleanuptestcase.teamcity
new file mode 100644
index 0000000000..b76c7e3f45
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_failcleanuptestcase.teamcity
@@ -0,0 +1,9 @@
+##teamcity[testSuiteStarted name='tst_FailCleanupTestCase' flowId='tst_FailCleanupTestCase']
+##teamcity[testStarted name='initTestCase()' flowId='tst_FailCleanupTestCase']
+##teamcity[testFinished name='initTestCase()' flowId='tst_FailCleanupTestCase']
+##teamcity[testStarted name='aTestFunction()' flowId='tst_FailCleanupTestCase']
+##teamcity[testFinished name='aTestFunction()' flowId='tst_FailCleanupTestCase']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_FailCleanupTestCase']
+##teamcity[testFailed name='cleanupTestCase()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/failcleanuptestcase/tst_failcleanuptestcase.cpp(0)|]' details='|'false|' returned FALSE. (Fail inside cleanupTestCase)' flowId='tst_FailCleanupTestCase']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_FailCleanupTestCase']
+##teamcity[testSuiteFinished name='tst_FailCleanupTestCase' flowId='tst_FailCleanupTestCase']
diff --git a/tests/auto/testlib/selftests/expected_failcleanuptestcase.txt b/tests/auto/testlib/selftests/expected_failcleanuptestcase.txt
new file mode 100644
index 0000000000..2e4619394b
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_failcleanuptestcase.txt
@@ -0,0 +1,8 @@
+********* Start testing of tst_FailCleanupTestCase *********
+Config: Using QtTest library
+PASS : tst_FailCleanupTestCase::initTestCase()
+PASS : tst_FailCleanupTestCase::aTestFunction()
+FAIL! : tst_FailCleanupTestCase::cleanupTestCase() 'false' returned FALSE. (Fail inside cleanupTestCase)
+ Loc: [qtbase/tests/auto/testlib/selftests/failcleanuptestcase/tst_failcleanuptestcase.cpp(0)]
+Totals: 2 passed, 1 failed, 0 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_FailCleanupTestCase *********
diff --git a/tests/auto/testlib/selftests/expected_failcleanuptestcase.xml b/tests/auto/testlib/selftests/expected_failcleanuptestcase.xml
new file mode 100644
index 0000000000..1537440317
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_failcleanuptestcase.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_FailCleanupTestCase">
+ <Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+ </Environment>
+ <TestFunction name="initTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="aTestFunction">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="cleanupTestCase">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/failcleanuptestcase/tst_failcleanuptestcase.cpp" line="0">
+ <Description><![CDATA['false' returned FALSE. (Fail inside cleanupTestCase)]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_faildatatype.tap b/tests/auto/testlib/selftests/expected_faildatatype.tap
index 4db7f717b5..05dcf90bca 100644
--- a/tests/auto/testlib/selftests/expected_faildatatype.tap
+++ b/tests/auto/testlib/selftests/expected_faildatatype.tap
@@ -1,14 +1,18 @@
TAP version 13
# tst_FailDataType
ok 1 - initTestCase()
-# expected data of type 'QString', got 'bool' for element 0 of data with tag 'bool-as-string'
-# ASSERT: "false" in file qtbase/src/testlib/qtestdata.cpp, line 0
not ok 2 - value()
---
# Received a fatal error.
at: tst_FailDataType::value() (qtbase/src/testlib/qtestdata.cpp:0)
file: qtbase/src/testlib/qtestdata.cpp
line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: expected data of type 'QString', got 'bool' for element 0 of data with tag 'bool-as-string'
+ - severity: fatal
+ message: ASSERT: "false" in file qtbase/src/testlib/qtestdata.cpp, line 0
...
1..2
# tests 2
diff --git a/tests/auto/testlib/selftests/expected_failfetchtype.tap b/tests/auto/testlib/selftests/expected_failfetchtype.tap
index 3e23f3a54f..465894d6bf 100644
--- a/tests/auto/testlib/selftests/expected_failfetchtype.tap
+++ b/tests/auto/testlib/selftests/expected_failfetchtype.tap
@@ -1,10 +1,13 @@
TAP version 13
# tst_FailFetchType
ok 1 - initTestCase()
-# Requested type 'QString' does not match available type 'bool'.
not ok 2 - fetch(bool)
---
# Received a fatal error.
+ extensions:
+ messages:
+ - severity: fatal
+ message: Requested type 'QString' does not match available type 'bool'.
...
1..2
# tests 2
diff --git a/tests/auto/testlib/selftests/expected_fetchbogus.tap b/tests/auto/testlib/selftests/expected_fetchbogus.tap
index 895e247423..2cefff9b3b 100644
--- a/tests/auto/testlib/selftests/expected_fetchbogus.tap
+++ b/tests/auto/testlib/selftests/expected_fetchbogus.tap
@@ -1,10 +1,13 @@
TAP version 13
# tst_FetchBogus
ok 1 - initTestCase()
-# QFETCH: Requested testdata 'bubu' not available, check your _data function.
not ok 2 - fetchBogus(foo)
---
# Received a fatal error.
+ extensions:
+ messages:
+ - severity: fatal
+ message: QFETCH: Requested testdata 'bubu' not available, check your _data function.
...
1..2
# tests 2
diff --git a/tests/auto/testlib/selftests/expected_findtestdata.tap b/tests/auto/testlib/selftests/expected_findtestdata.tap
index 0fb38d2822..1f8174cce2 100644
--- a/tests/auto/testlib/selftests/expected_findtestdata.tap
+++ b/tests/auto/testlib/selftests/expected_findtestdata.tap
@@ -1,8 +1,8 @@
TAP version 13
# FindTestData
ok 1 - initTestCase()
-# testdata testfile could not be located!
ok 2 - paths()
+ # warn: testdata testfile could not be located!
ok 3 - cleanupTestCase()
1..3
# tests 3
diff --git a/tests/auto/testlib/selftests/expected_globaldata.tap b/tests/auto/testlib/selftests/expected_globaldata.tap
index 4d61b7437b..0616682cab 100644
--- a/tests/auto/testlib/selftests/expected_globaldata.tap
+++ b/tests/auto/testlib/selftests/expected_globaldata.tap
@@ -1,56 +1,160 @@
TAP version 13
# tst_globaldata
-# initTestCase initTestCase (null)
ok 1 - initTestCase()
-# init testGlobal local=false
-# global: false
-# local: false
-# cleanup testGlobal local=false
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: initTestCase initTestCase (null)
+ ...
ok 2 - testGlobal(global=false:local=false)
-# init testGlobal local=true
-# global: false
-# local: true
-# cleanup testGlobal local=true
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: init testGlobal local=false
+ - severity: debug
+ message: global: false
+ - severity: debug
+ message: local: false
+ - severity: debug
+ message: cleanup testGlobal local=false
+ ...
ok 3 - testGlobal(global=false:local=true)
-# init testGlobal local=false
-# global: true
-# local: false
-# cleanup testGlobal local=false
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: init testGlobal local=true
+ - severity: debug
+ message: global: false
+ - severity: debug
+ message: local: true
+ - severity: debug
+ message: cleanup testGlobal local=true
+ ...
ok 4 - testGlobal(global=true:local=false)
-# init testGlobal local=true
-# global: true
-# local: true
-# cleanup testGlobal local=true
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: init testGlobal local=false
+ - severity: debug
+ message: global: true
+ - severity: debug
+ message: local: false
+ - severity: debug
+ message: cleanup testGlobal local=false
+ ...
ok 5 - testGlobal(global=true:local=true)
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: init testGlobal local=true
+ - severity: debug
+ message: global: true
+ - severity: debug
+ message: local: true
+ - severity: debug
+ message: cleanup testGlobal local=true
+ ...
ok 6 - skip(global=false) # SKIP skipping
-# init skipLocal local=false
ok 7 - skipLocal(global=false:local=false) # SKIP skipping
-# cleanup skipLocal local=false
-# init skipLocal local=true
+ ---
+ at: tst_globaldata::skipLocal() (qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp
+ line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: init skipLocal local=false
+ ...
+# debug: cleanup skipLocal local=false
ok 8 - skipLocal(global=false:local=true) # SKIP skipping
-# cleanup skipLocal local=true
-# init skipLocal local=false
+ ---
+ at: tst_globaldata::skipLocal() (qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp
+ line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: init skipLocal local=true
+ ...
+# debug: cleanup skipLocal local=true
ok 9 - skipLocal(global=true:local=false) # SKIP skipping
-# cleanup skipLocal local=false
-# init skipLocal local=true
+ ---
+ at: tst_globaldata::skipLocal() (qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp
+ line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: init skipLocal local=false
+ ...
+# debug: cleanup skipLocal local=false
ok 10 - skipLocal(global=true:local=true) # SKIP skipping
-# cleanup skipLocal local=true
-# init skipSingle local=false
-# global: false local: false
-# cleanup skipSingle local=false
+ ---
+ at: tst_globaldata::skipLocal() (qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp
+ line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: init skipLocal local=true
+ ...
+# debug: cleanup skipLocal local=true
ok 11 - skipSingle(global=false:local=false)
-# init skipSingle local=true
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: init skipSingle local=false
+ - severity: debug
+ message: global: false local: false
+ - severity: debug
+ message: cleanup skipSingle local=false
+ ...
ok 12 - skipSingle(global=false:local=true) # SKIP Skipping
-# cleanup skipSingle local=true
-# init skipSingle local=false
+ ---
+ at: tst_globaldata::skipSingle() (qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp
+ line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: init skipSingle local=true
+ ...
+# debug: cleanup skipSingle local=true
ok 13 - skipSingle(global=true:local=false) # SKIP Skipping
-# cleanup skipSingle local=false
-# init skipSingle local=true
-# global: true local: true
-# cleanup skipSingle local=true
+ ---
+ at: tst_globaldata::skipSingle() (qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp
+ line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: init skipSingle local=false
+ ...
+# debug: cleanup skipSingle local=false
ok 14 - skipSingle(global=true:local=true)
-# cleanupTestCase cleanupTestCase (null)
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: init skipSingle local=true
+ - severity: debug
+ message: global: true local: true
+ - severity: debug
+ message: cleanup skipSingle local=true
+ ...
ok 15 - cleanupTestCase()
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: cleanupTestCase cleanupTestCase (null)
+ ...
1..15
# tests 15
# pass 8
diff --git a/tests/auto/testlib/selftests/expected_globaldata.teamcity b/tests/auto/testlib/selftests/expected_globaldata.teamcity
index 7c1c33e1de..2b15e06731 100644
--- a/tests/auto/testlib/selftests/expected_globaldata.teamcity
+++ b/tests/auto/testlib/selftests/expected_globaldata.teamcity
@@ -2,51 +2,51 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_globaldata']
##teamcity[testStdOut name='initTestCase()' out='QDEBUG: initTestCase initTestCase (null)' flowId='tst_globaldata']
##teamcity[testFinished name='initTestCase()' flowId='tst_globaldata']
-##teamcity[testStarted name='testGlobal(local=false)' flowId='tst_globaldata']
-##teamcity[testStdOut name='testGlobal(local=false)' out='QDEBUG: init testGlobal local=false|nQDEBUG: global: false|nQDEBUG: local: false|nQDEBUG: cleanup testGlobal local=false' flowId='tst_globaldata']
-##teamcity[testFinished name='testGlobal(local=false)' flowId='tst_globaldata']
-##teamcity[testStarted name='testGlobal(local=true)' flowId='tst_globaldata']
-##teamcity[testStdOut name='testGlobal(local=true)' out='QDEBUG: init testGlobal local=true|nQDEBUG: global: false|nQDEBUG: local: true|nQDEBUG: cleanup testGlobal local=true' flowId='tst_globaldata']
-##teamcity[testFinished name='testGlobal(local=true)' flowId='tst_globaldata']
-##teamcity[testStarted name='testGlobal(local=false)' flowId='tst_globaldata']
-##teamcity[testStdOut name='testGlobal(local=false)' out='QDEBUG: init testGlobal local=false|nQDEBUG: global: true|nQDEBUG: local: false|nQDEBUG: cleanup testGlobal local=false' flowId='tst_globaldata']
-##teamcity[testFinished name='testGlobal(local=false)' flowId='tst_globaldata']
-##teamcity[testStarted name='testGlobal(local=true)' flowId='tst_globaldata']
-##teamcity[testStdOut name='testGlobal(local=true)' out='QDEBUG: init testGlobal local=true|nQDEBUG: global: true|nQDEBUG: local: true|nQDEBUG: cleanup testGlobal local=true' flowId='tst_globaldata']
-##teamcity[testFinished name='testGlobal(local=true)' flowId='tst_globaldata']
-##teamcity[testStarted name='skip()' flowId='tst_globaldata']
-##teamcity[testIgnored name='skip()' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
-##teamcity[testFinished name='skip()' flowId='tst_globaldata']
-##teamcity[testStarted name='skipLocal(local=false)' flowId='tst_globaldata']
-##teamcity[testIgnored name='skipLocal(local=false)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
-##teamcity[testStdOut name='skipLocal(local=false)' out='QDEBUG: init skipLocal local=false' flowId='tst_globaldata']
-##teamcity[testFinished name='skipLocal(local=false)' flowId='tst_globaldata']
-##teamcity[testStarted name='skipLocal(local=true)' flowId='tst_globaldata']
-##teamcity[testIgnored name='skipLocal(local=true)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
-##teamcity[testStdOut name='skipLocal(local=true)' out='QDEBUG: cleanup skipLocal local=false|nQDEBUG: init skipLocal local=true' flowId='tst_globaldata']
-##teamcity[testFinished name='skipLocal(local=true)' flowId='tst_globaldata']
-##teamcity[testStarted name='skipLocal(local=false)' flowId='tst_globaldata']
-##teamcity[testIgnored name='skipLocal(local=false)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
-##teamcity[testStdOut name='skipLocal(local=false)' out='QDEBUG: cleanup skipLocal local=true|nQDEBUG: init skipLocal local=false' flowId='tst_globaldata']
-##teamcity[testFinished name='skipLocal(local=false)' flowId='tst_globaldata']
-##teamcity[testStarted name='skipLocal(local=true)' flowId='tst_globaldata']
-##teamcity[testIgnored name='skipLocal(local=true)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
-##teamcity[testStdOut name='skipLocal(local=true)' out='QDEBUG: cleanup skipLocal local=false|nQDEBUG: init skipLocal local=true' flowId='tst_globaldata']
-##teamcity[testFinished name='skipLocal(local=true)' flowId='tst_globaldata']
-##teamcity[testStarted name='skipSingle(local=false)' flowId='tst_globaldata']
-##teamcity[testStdOut name='skipSingle(local=false)' out='QDEBUG: cleanup skipLocal local=true|nQDEBUG: init skipSingle local=false|nQDEBUG: global: false local: false|nQDEBUG: cleanup skipSingle local=false' flowId='tst_globaldata']
-##teamcity[testFinished name='skipSingle(local=false)' flowId='tst_globaldata']
-##teamcity[testStarted name='skipSingle(local=true)' flowId='tst_globaldata']
-##teamcity[testIgnored name='skipSingle(local=true)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
-##teamcity[testStdOut name='skipSingle(local=true)' out='QDEBUG: init skipSingle local=true' flowId='tst_globaldata']
-##teamcity[testFinished name='skipSingle(local=true)' flowId='tst_globaldata']
-##teamcity[testStarted name='skipSingle(local=false)' flowId='tst_globaldata']
-##teamcity[testIgnored name='skipSingle(local=false)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
-##teamcity[testStdOut name='skipSingle(local=false)' out='QDEBUG: cleanup skipSingle local=true|nQDEBUG: init skipSingle local=false' flowId='tst_globaldata']
-##teamcity[testFinished name='skipSingle(local=false)' flowId='tst_globaldata']
-##teamcity[testStarted name='skipSingle(local=true)' flowId='tst_globaldata']
-##teamcity[testStdOut name='skipSingle(local=true)' out='QDEBUG: cleanup skipSingle local=false|nQDEBUG: init skipSingle local=true|nQDEBUG: global: true local: true|nQDEBUG: cleanup skipSingle local=true' flowId='tst_globaldata']
-##teamcity[testFinished name='skipSingle(local=true)' flowId='tst_globaldata']
+##teamcity[testStarted name='testGlobal(global=false:local=false)' flowId='tst_globaldata']
+##teamcity[testStdOut name='testGlobal(global=false:local=false)' out='QDEBUG: init testGlobal local=false|nQDEBUG: global: false|nQDEBUG: local: false|nQDEBUG: cleanup testGlobal local=false' flowId='tst_globaldata']
+##teamcity[testFinished name='testGlobal(global=false:local=false)' flowId='tst_globaldata']
+##teamcity[testStarted name='testGlobal(global=false:local=true)' flowId='tst_globaldata']
+##teamcity[testStdOut name='testGlobal(global=false:local=true)' out='QDEBUG: init testGlobal local=true|nQDEBUG: global: false|nQDEBUG: local: true|nQDEBUG: cleanup testGlobal local=true' flowId='tst_globaldata']
+##teamcity[testFinished name='testGlobal(global=false:local=true)' flowId='tst_globaldata']
+##teamcity[testStarted name='testGlobal(global=true:local=false)' flowId='tst_globaldata']
+##teamcity[testStdOut name='testGlobal(global=true:local=false)' out='QDEBUG: init testGlobal local=false|nQDEBUG: global: true|nQDEBUG: local: false|nQDEBUG: cleanup testGlobal local=false' flowId='tst_globaldata']
+##teamcity[testFinished name='testGlobal(global=true:local=false)' flowId='tst_globaldata']
+##teamcity[testStarted name='testGlobal(global=true:local=true)' flowId='tst_globaldata']
+##teamcity[testStdOut name='testGlobal(global=true:local=true)' out='QDEBUG: init testGlobal local=true|nQDEBUG: global: true|nQDEBUG: local: true|nQDEBUG: cleanup testGlobal local=true' flowId='tst_globaldata']
+##teamcity[testFinished name='testGlobal(global=true:local=true)' flowId='tst_globaldata']
+##teamcity[testStarted name='skip(global=false)' flowId='tst_globaldata']
+##teamcity[testIgnored name='skip(global=false)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
+##teamcity[testFinished name='skip(global=false)' flowId='tst_globaldata']
+##teamcity[testStarted name='skipLocal(global=false:local=false)' flowId='tst_globaldata']
+##teamcity[testIgnored name='skipLocal(global=false:local=false)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
+##teamcity[testStdOut name='skipLocal(global=false:local=false)' out='QDEBUG: init skipLocal local=false' flowId='tst_globaldata']
+##teamcity[testFinished name='skipLocal(global=false:local=false)' flowId='tst_globaldata']
+##teamcity[testStarted name='skipLocal(global=false:local=true)' flowId='tst_globaldata']
+##teamcity[testIgnored name='skipLocal(global=false:local=true)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
+##teamcity[testStdOut name='skipLocal(global=false:local=true)' out='QDEBUG: cleanup skipLocal local=false|nQDEBUG: init skipLocal local=true' flowId='tst_globaldata']
+##teamcity[testFinished name='skipLocal(global=false:local=true)' flowId='tst_globaldata']
+##teamcity[testStarted name='skipLocal(global=true:local=false)' flowId='tst_globaldata']
+##teamcity[testIgnored name='skipLocal(global=true:local=false)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
+##teamcity[testStdOut name='skipLocal(global=true:local=false)' out='QDEBUG: cleanup skipLocal local=true|nQDEBUG: init skipLocal local=false' flowId='tst_globaldata']
+##teamcity[testFinished name='skipLocal(global=true:local=false)' flowId='tst_globaldata']
+##teamcity[testStarted name='skipLocal(global=true:local=true)' flowId='tst_globaldata']
+##teamcity[testIgnored name='skipLocal(global=true:local=true)' message='skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
+##teamcity[testStdOut name='skipLocal(global=true:local=true)' out='QDEBUG: cleanup skipLocal local=false|nQDEBUG: init skipLocal local=true' flowId='tst_globaldata']
+##teamcity[testFinished name='skipLocal(global=true:local=true)' flowId='tst_globaldata']
+##teamcity[testStarted name='skipSingle(global=false:local=false)' flowId='tst_globaldata']
+##teamcity[testStdOut name='skipSingle(global=false:local=false)' out='QDEBUG: cleanup skipLocal local=true|nQDEBUG: init skipSingle local=false|nQDEBUG: global: false local: false|nQDEBUG: cleanup skipSingle local=false' flowId='tst_globaldata']
+##teamcity[testFinished name='skipSingle(global=false:local=false)' flowId='tst_globaldata']
+##teamcity[testStarted name='skipSingle(global=false:local=true)' flowId='tst_globaldata']
+##teamcity[testIgnored name='skipSingle(global=false:local=true)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
+##teamcity[testStdOut name='skipSingle(global=false:local=true)' out='QDEBUG: init skipSingle local=true' flowId='tst_globaldata']
+##teamcity[testFinished name='skipSingle(global=false:local=true)' flowId='tst_globaldata']
+##teamcity[testStarted name='skipSingle(global=true:local=false)' flowId='tst_globaldata']
+##teamcity[testIgnored name='skipSingle(global=true:local=false)' message='Skipping |[Loc: qtbase/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp(0)|]' flowId='tst_globaldata']
+##teamcity[testStdOut name='skipSingle(global=true:local=false)' out='QDEBUG: cleanup skipSingle local=true|nQDEBUG: init skipSingle local=false' flowId='tst_globaldata']
+##teamcity[testFinished name='skipSingle(global=true:local=false)' flowId='tst_globaldata']
+##teamcity[testStarted name='skipSingle(global=true:local=true)' flowId='tst_globaldata']
+##teamcity[testStdOut name='skipSingle(global=true:local=true)' out='QDEBUG: cleanup skipSingle local=false|nQDEBUG: init skipSingle local=true|nQDEBUG: global: true local: true|nQDEBUG: cleanup skipSingle local=true' flowId='tst_globaldata']
+##teamcity[testFinished name='skipSingle(global=true:local=true)' flowId='tst_globaldata']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_globaldata']
##teamcity[testStdOut name='cleanupTestCase()' out='QDEBUG: cleanupTestCase cleanupTestCase (null)' flowId='tst_globaldata']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_globaldata']
diff --git a/tests/auto/testlib/selftests/expected_maxwarnings.tap b/tests/auto/testlib/selftests/expected_maxwarnings.tap
index 57bfbd8f8d..8c05622a89 100644
--- a/tests/auto/testlib/selftests/expected_maxwarnings.tap
+++ b/tests/auto/testlib/selftests/expected_maxwarnings.tap
@@ -1,2009 +1,4014 @@
TAP version 13
# MaxWarnings
ok 1 - initTestCase()
-# 0
-# 1
-# 2
-# 3
-# 4
-# 5
-# 6
-# 7
-# 8
-# 9
-# 10
-# 11
-# 12
-# 13
-# 14
-# 15
-# 16
-# 17
-# 18
-# 19
-# 20
-# 21
-# 22
-# 23
-# 24
-# 25
-# 26
-# 27
-# 28
-# 29
-# 30
-# 31
-# 32
-# 33
-# 34
-# 35
-# 36
-# 37
-# 38
-# 39
-# 40
-# 41
-# 42
-# 43
-# 44
-# 45
-# 46
-# 47
-# 48
-# 49
-# 50
-# 51
-# 52
-# 53
-# 54
-# 55
-# 56
-# 57
-# 58
-# 59
-# 60
-# 61
-# 62
-# 63
-# 64
-# 65
-# 66
-# 67
-# 68
-# 69
-# 70
-# 71
-# 72
-# 73
-# 74
-# 75
-# 76
-# 77
-# 78
-# 79
-# 80
-# 81
-# 82
-# 83
-# 84
-# 85
-# 86
-# 87
-# 88
-# 89
-# 90
-# 91
-# 92
-# 93
-# 94
-# 95
-# 96
-# 97
-# 98
-# 99
-# 100
-# 101
-# 102
-# 103
-# 104
-# 105
-# 106
-# 107
-# 108
-# 109
-# 110
-# 111
-# 112
-# 113
-# 114
-# 115
-# 116
-# 117
-# 118
-# 119
-# 120
-# 121
-# 122
-# 123
-# 124
-# 125
-# 126
-# 127
-# 128
-# 129
-# 130
-# 131
-# 132
-# 133
-# 134
-# 135
-# 136
-# 137
-# 138
-# 139
-# 140
-# 141
-# 142
-# 143
-# 144
-# 145
-# 146
-# 147
-# 148
-# 149
-# 150
-# 151
-# 152
-# 153
-# 154
-# 155
-# 156
-# 157
-# 158
-# 159
-# 160
-# 161
-# 162
-# 163
-# 164
-# 165
-# 166
-# 167
-# 168
-# 169
-# 170
-# 171
-# 172
-# 173
-# 174
-# 175
-# 176
-# 177
-# 178
-# 179
-# 180
-# 181
-# 182
-# 183
-# 184
-# 185
-# 186
-# 187
-# 188
-# 189
-# 190
-# 191
-# 192
-# 193
-# 194
-# 195
-# 196
-# 197
-# 198
-# 199
-# 200
-# 201
-# 202
-# 203
-# 204
-# 205
-# 206
-# 207
-# 208
-# 209
-# 210
-# 211
-# 212
-# 213
-# 214
-# 215
-# 216
-# 217
-# 218
-# 219
-# 220
-# 221
-# 222
-# 223
-# 224
-# 225
-# 226
-# 227
-# 228
-# 229
-# 230
-# 231
-# 232
-# 233
-# 234
-# 235
-# 236
-# 237
-# 238
-# 239
-# 240
-# 241
-# 242
-# 243
-# 244
-# 245
-# 246
-# 247
-# 248
-# 249
-# 250
-# 251
-# 252
-# 253
-# 254
-# 255
-# 256
-# 257
-# 258
-# 259
-# 260
-# 261
-# 262
-# 263
-# 264
-# 265
-# 266
-# 267
-# 268
-# 269
-# 270
-# 271
-# 272
-# 273
-# 274
-# 275
-# 276
-# 277
-# 278
-# 279
-# 280
-# 281
-# 282
-# 283
-# 284
-# 285
-# 286
-# 287
-# 288
-# 289
-# 290
-# 291
-# 292
-# 293
-# 294
-# 295
-# 296
-# 297
-# 298
-# 299
-# 300
-# 301
-# 302
-# 303
-# 304
-# 305
-# 306
-# 307
-# 308
-# 309
-# 310
-# 311
-# 312
-# 313
-# 314
-# 315
-# 316
-# 317
-# 318
-# 319
-# 320
-# 321
-# 322
-# 323
-# 324
-# 325
-# 326
-# 327
-# 328
-# 329
-# 330
-# 331
-# 332
-# 333
-# 334
-# 335
-# 336
-# 337
-# 338
-# 339
-# 340
-# 341
-# 342
-# 343
-# 344
-# 345
-# 346
-# 347
-# 348
-# 349
-# 350
-# 351
-# 352
-# 353
-# 354
-# 355
-# 356
-# 357
-# 358
-# 359
-# 360
-# 361
-# 362
-# 363
-# 364
-# 365
-# 366
-# 367
-# 368
-# 369
-# 370
-# 371
-# 372
-# 373
-# 374
-# 375
-# 376
-# 377
-# 378
-# 379
-# 380
-# 381
-# 382
-# 383
-# 384
-# 385
-# 386
-# 387
-# 388
-# 389
-# 390
-# 391
-# 392
-# 393
-# 394
-# 395
-# 396
-# 397
-# 398
-# 399
-# 400
-# 401
-# 402
-# 403
-# 404
-# 405
-# 406
-# 407
-# 408
-# 409
-# 410
-# 411
-# 412
-# 413
-# 414
-# 415
-# 416
-# 417
-# 418
-# 419
-# 420
-# 421
-# 422
-# 423
-# 424
-# 425
-# 426
-# 427
-# 428
-# 429
-# 430
-# 431
-# 432
-# 433
-# 434
-# 435
-# 436
-# 437
-# 438
-# 439
-# 440
-# 441
-# 442
-# 443
-# 444
-# 445
-# 446
-# 447
-# 448
-# 449
-# 450
-# 451
-# 452
-# 453
-# 454
-# 455
-# 456
-# 457
-# 458
-# 459
-# 460
-# 461
-# 462
-# 463
-# 464
-# 465
-# 466
-# 467
-# 468
-# 469
-# 470
-# 471
-# 472
-# 473
-# 474
-# 475
-# 476
-# 477
-# 478
-# 479
-# 480
-# 481
-# 482
-# 483
-# 484
-# 485
-# 486
-# 487
-# 488
-# 489
-# 490
-# 491
-# 492
-# 493
-# 494
-# 495
-# 496
-# 497
-# 498
-# 499
-# 500
-# 501
-# 502
-# 503
-# 504
-# 505
-# 506
-# 507
-# 508
-# 509
-# 510
-# 511
-# 512
-# 513
-# 514
-# 515
-# 516
-# 517
-# 518
-# 519
-# 520
-# 521
-# 522
-# 523
-# 524
-# 525
-# 526
-# 527
-# 528
-# 529
-# 530
-# 531
-# 532
-# 533
-# 534
-# 535
-# 536
-# 537
-# 538
-# 539
-# 540
-# 541
-# 542
-# 543
-# 544
-# 545
-# 546
-# 547
-# 548
-# 549
-# 550
-# 551
-# 552
-# 553
-# 554
-# 555
-# 556
-# 557
-# 558
-# 559
-# 560
-# 561
-# 562
-# 563
-# 564
-# 565
-# 566
-# 567
-# 568
-# 569
-# 570
-# 571
-# 572
-# 573
-# 574
-# 575
-# 576
-# 577
-# 578
-# 579
-# 580
-# 581
-# 582
-# 583
-# 584
-# 585
-# 586
-# 587
-# 588
-# 589
-# 590
-# 591
-# 592
-# 593
-# 594
-# 595
-# 596
-# 597
-# 598
-# 599
-# 600
-# 601
-# 602
-# 603
-# 604
-# 605
-# 606
-# 607
-# 608
-# 609
-# 610
-# 611
-# 612
-# 613
-# 614
-# 615
-# 616
-# 617
-# 618
-# 619
-# 620
-# 621
-# 622
-# 623
-# 624
-# 625
-# 626
-# 627
-# 628
-# 629
-# 630
-# 631
-# 632
-# 633
-# 634
-# 635
-# 636
-# 637
-# 638
-# 639
-# 640
-# 641
-# 642
-# 643
-# 644
-# 645
-# 646
-# 647
-# 648
-# 649
-# 650
-# 651
-# 652
-# 653
-# 654
-# 655
-# 656
-# 657
-# 658
-# 659
-# 660
-# 661
-# 662
-# 663
-# 664
-# 665
-# 666
-# 667
-# 668
-# 669
-# 670
-# 671
-# 672
-# 673
-# 674
-# 675
-# 676
-# 677
-# 678
-# 679
-# 680
-# 681
-# 682
-# 683
-# 684
-# 685
-# 686
-# 687
-# 688
-# 689
-# 690
-# 691
-# 692
-# 693
-# 694
-# 695
-# 696
-# 697
-# 698
-# 699
-# 700
-# 701
-# 702
-# 703
-# 704
-# 705
-# 706
-# 707
-# 708
-# 709
-# 710
-# 711
-# 712
-# 713
-# 714
-# 715
-# 716
-# 717
-# 718
-# 719
-# 720
-# 721
-# 722
-# 723
-# 724
-# 725
-# 726
-# 727
-# 728
-# 729
-# 730
-# 731
-# 732
-# 733
-# 734
-# 735
-# 736
-# 737
-# 738
-# 739
-# 740
-# 741
-# 742
-# 743
-# 744
-# 745
-# 746
-# 747
-# 748
-# 749
-# 750
-# 751
-# 752
-# 753
-# 754
-# 755
-# 756
-# 757
-# 758
-# 759
-# 760
-# 761
-# 762
-# 763
-# 764
-# 765
-# 766
-# 767
-# 768
-# 769
-# 770
-# 771
-# 772
-# 773
-# 774
-# 775
-# 776
-# 777
-# 778
-# 779
-# 780
-# 781
-# 782
-# 783
-# 784
-# 785
-# 786
-# 787
-# 788
-# 789
-# 790
-# 791
-# 792
-# 793
-# 794
-# 795
-# 796
-# 797
-# 798
-# 799
-# 800
-# 801
-# 802
-# 803
-# 804
-# 805
-# 806
-# 807
-# 808
-# 809
-# 810
-# 811
-# 812
-# 813
-# 814
-# 815
-# 816
-# 817
-# 818
-# 819
-# 820
-# 821
-# 822
-# 823
-# 824
-# 825
-# 826
-# 827
-# 828
-# 829
-# 830
-# 831
-# 832
-# 833
-# 834
-# 835
-# 836
-# 837
-# 838
-# 839
-# 840
-# 841
-# 842
-# 843
-# 844
-# 845
-# 846
-# 847
-# 848
-# 849
-# 850
-# 851
-# 852
-# 853
-# 854
-# 855
-# 856
-# 857
-# 858
-# 859
-# 860
-# 861
-# 862
-# 863
-# 864
-# 865
-# 866
-# 867
-# 868
-# 869
-# 870
-# 871
-# 872
-# 873
-# 874
-# 875
-# 876
-# 877
-# 878
-# 879
-# 880
-# 881
-# 882
-# 883
-# 884
-# 885
-# 886
-# 887
-# 888
-# 889
-# 890
-# 891
-# 892
-# 893
-# 894
-# 895
-# 896
-# 897
-# 898
-# 899
-# 900
-# 901
-# 902
-# 903
-# 904
-# 905
-# 906
-# 907
-# 908
-# 909
-# 910
-# 911
-# 912
-# 913
-# 914
-# 915
-# 916
-# 917
-# 918
-# 919
-# 920
-# 921
-# 922
-# 923
-# 924
-# 925
-# 926
-# 927
-# 928
-# 929
-# 930
-# 931
-# 932
-# 933
-# 934
-# 935
-# 936
-# 937
-# 938
-# 939
-# 940
-# 941
-# 942
-# 943
-# 944
-# 945
-# 946
-# 947
-# 948
-# 949
-# 950
-# 951
-# 952
-# 953
-# 954
-# 955
-# 956
-# 957
-# 958
-# 959
-# 960
-# 961
-# 962
-# 963
-# 964
-# 965
-# 966
-# 967
-# 968
-# 969
-# 970
-# 971
-# 972
-# 973
-# 974
-# 975
-# 976
-# 977
-# 978
-# 979
-# 980
-# 981
-# 982
-# 983
-# 984
-# 985
-# 986
-# 987
-# 988
-# 989
-# 990
-# 991
-# 992
-# 993
-# 994
-# 995
-# 996
-# 997
-# 998
-# 999
-# 1000
-# 1001
-# 1002
-# 1003
-# 1004
-# 1005
-# 1006
-# 1007
-# 1008
-# 1009
-# 1010
-# 1011
-# 1012
-# 1013
-# 1014
-# 1015
-# 1016
-# 1017
-# 1018
-# 1019
-# 1020
-# 1021
-# 1022
-# 1023
-# 1024
-# 1025
-# 1026
-# 1027
-# 1028
-# 1029
-# 1030
-# 1031
-# 1032
-# 1033
-# 1034
-# 1035
-# 1036
-# 1037
-# 1038
-# 1039
-# 1040
-# 1041
-# 1042
-# 1043
-# 1044
-# 1045
-# 1046
-# 1047
-# 1048
-# 1049
-# 1050
-# 1051
-# 1052
-# 1053
-# 1054
-# 1055
-# 1056
-# 1057
-# 1058
-# 1059
-# 1060
-# 1061
-# 1062
-# 1063
-# 1064
-# 1065
-# 1066
-# 1067
-# 1068
-# 1069
-# 1070
-# 1071
-# 1072
-# 1073
-# 1074
-# 1075
-# 1076
-# 1077
-# 1078
-# 1079
-# 1080
-# 1081
-# 1082
-# 1083
-# 1084
-# 1085
-# 1086
-# 1087
-# 1088
-# 1089
-# 1090
-# 1091
-# 1092
-# 1093
-# 1094
-# 1095
-# 1096
-# 1097
-# 1098
-# 1099
-# 1100
-# 1101
-# 1102
-# 1103
-# 1104
-# 1105
-# 1106
-# 1107
-# 1108
-# 1109
-# 1110
-# 1111
-# 1112
-# 1113
-# 1114
-# 1115
-# 1116
-# 1117
-# 1118
-# 1119
-# 1120
-# 1121
-# 1122
-# 1123
-# 1124
-# 1125
-# 1126
-# 1127
-# 1128
-# 1129
-# 1130
-# 1131
-# 1132
-# 1133
-# 1134
-# 1135
-# 1136
-# 1137
-# 1138
-# 1139
-# 1140
-# 1141
-# 1142
-# 1143
-# 1144
-# 1145
-# 1146
-# 1147
-# 1148
-# 1149
-# 1150
-# 1151
-# 1152
-# 1153
-# 1154
-# 1155
-# 1156
-# 1157
-# 1158
-# 1159
-# 1160
-# 1161
-# 1162
-# 1163
-# 1164
-# 1165
-# 1166
-# 1167
-# 1168
-# 1169
-# 1170
-# 1171
-# 1172
-# 1173
-# 1174
-# 1175
-# 1176
-# 1177
-# 1178
-# 1179
-# 1180
-# 1181
-# 1182
-# 1183
-# 1184
-# 1185
-# 1186
-# 1187
-# 1188
-# 1189
-# 1190
-# 1191
-# 1192
-# 1193
-# 1194
-# 1195
-# 1196
-# 1197
-# 1198
-# 1199
-# 1200
-# 1201
-# 1202
-# 1203
-# 1204
-# 1205
-# 1206
-# 1207
-# 1208
-# 1209
-# 1210
-# 1211
-# 1212
-# 1213
-# 1214
-# 1215
-# 1216
-# 1217
-# 1218
-# 1219
-# 1220
-# 1221
-# 1222
-# 1223
-# 1224
-# 1225
-# 1226
-# 1227
-# 1228
-# 1229
-# 1230
-# 1231
-# 1232
-# 1233
-# 1234
-# 1235
-# 1236
-# 1237
-# 1238
-# 1239
-# 1240
-# 1241
-# 1242
-# 1243
-# 1244
-# 1245
-# 1246
-# 1247
-# 1248
-# 1249
-# 1250
-# 1251
-# 1252
-# 1253
-# 1254
-# 1255
-# 1256
-# 1257
-# 1258
-# 1259
-# 1260
-# 1261
-# 1262
-# 1263
-# 1264
-# 1265
-# 1266
-# 1267
-# 1268
-# 1269
-# 1270
-# 1271
-# 1272
-# 1273
-# 1274
-# 1275
-# 1276
-# 1277
-# 1278
-# 1279
-# 1280
-# 1281
-# 1282
-# 1283
-# 1284
-# 1285
-# 1286
-# 1287
-# 1288
-# 1289
-# 1290
-# 1291
-# 1292
-# 1293
-# 1294
-# 1295
-# 1296
-# 1297
-# 1298
-# 1299
-# 1300
-# 1301
-# 1302
-# 1303
-# 1304
-# 1305
-# 1306
-# 1307
-# 1308
-# 1309
-# 1310
-# 1311
-# 1312
-# 1313
-# 1314
-# 1315
-# 1316
-# 1317
-# 1318
-# 1319
-# 1320
-# 1321
-# 1322
-# 1323
-# 1324
-# 1325
-# 1326
-# 1327
-# 1328
-# 1329
-# 1330
-# 1331
-# 1332
-# 1333
-# 1334
-# 1335
-# 1336
-# 1337
-# 1338
-# 1339
-# 1340
-# 1341
-# 1342
-# 1343
-# 1344
-# 1345
-# 1346
-# 1347
-# 1348
-# 1349
-# 1350
-# 1351
-# 1352
-# 1353
-# 1354
-# 1355
-# 1356
-# 1357
-# 1358
-# 1359
-# 1360
-# 1361
-# 1362
-# 1363
-# 1364
-# 1365
-# 1366
-# 1367
-# 1368
-# 1369
-# 1370
-# 1371
-# 1372
-# 1373
-# 1374
-# 1375
-# 1376
-# 1377
-# 1378
-# 1379
-# 1380
-# 1381
-# 1382
-# 1383
-# 1384
-# 1385
-# 1386
-# 1387
-# 1388
-# 1389
-# 1390
-# 1391
-# 1392
-# 1393
-# 1394
-# 1395
-# 1396
-# 1397
-# 1398
-# 1399
-# 1400
-# 1401
-# 1402
-# 1403
-# 1404
-# 1405
-# 1406
-# 1407
-# 1408
-# 1409
-# 1410
-# 1411
-# 1412
-# 1413
-# 1414
-# 1415
-# 1416
-# 1417
-# 1418
-# 1419
-# 1420
-# 1421
-# 1422
-# 1423
-# 1424
-# 1425
-# 1426
-# 1427
-# 1428
-# 1429
-# 1430
-# 1431
-# 1432
-# 1433
-# 1434
-# 1435
-# 1436
-# 1437
-# 1438
-# 1439
-# 1440
-# 1441
-# 1442
-# 1443
-# 1444
-# 1445
-# 1446
-# 1447
-# 1448
-# 1449
-# 1450
-# 1451
-# 1452
-# 1453
-# 1454
-# 1455
-# 1456
-# 1457
-# 1458
-# 1459
-# 1460
-# 1461
-# 1462
-# 1463
-# 1464
-# 1465
-# 1466
-# 1467
-# 1468
-# 1469
-# 1470
-# 1471
-# 1472
-# 1473
-# 1474
-# 1475
-# 1476
-# 1477
-# 1478
-# 1479
-# 1480
-# 1481
-# 1482
-# 1483
-# 1484
-# 1485
-# 1486
-# 1487
-# 1488
-# 1489
-# 1490
-# 1491
-# 1492
-# 1493
-# 1494
-# 1495
-# 1496
-# 1497
-# 1498
-# 1499
-# 1500
-# 1501
-# 1502
-# 1503
-# 1504
-# 1505
-# 1506
-# 1507
-# 1508
-# 1509
-# 1510
-# 1511
-# 1512
-# 1513
-# 1514
-# 1515
-# 1516
-# 1517
-# 1518
-# 1519
-# 1520
-# 1521
-# 1522
-# 1523
-# 1524
-# 1525
-# 1526
-# 1527
-# 1528
-# 1529
-# 1530
-# 1531
-# 1532
-# 1533
-# 1534
-# 1535
-# 1536
-# 1537
-# 1538
-# 1539
-# 1540
-# 1541
-# 1542
-# 1543
-# 1544
-# 1545
-# 1546
-# 1547
-# 1548
-# 1549
-# 1550
-# 1551
-# 1552
-# 1553
-# 1554
-# 1555
-# 1556
-# 1557
-# 1558
-# 1559
-# 1560
-# 1561
-# 1562
-# 1563
-# 1564
-# 1565
-# 1566
-# 1567
-# 1568
-# 1569
-# 1570
-# 1571
-# 1572
-# 1573
-# 1574
-# 1575
-# 1576
-# 1577
-# 1578
-# 1579
-# 1580
-# 1581
-# 1582
-# 1583
-# 1584
-# 1585
-# 1586
-# 1587
-# 1588
-# 1589
-# 1590
-# 1591
-# 1592
-# 1593
-# 1594
-# 1595
-# 1596
-# 1597
-# 1598
-# 1599
-# 1600
-# 1601
-# 1602
-# 1603
-# 1604
-# 1605
-# 1606
-# 1607
-# 1608
-# 1609
-# 1610
-# 1611
-# 1612
-# 1613
-# 1614
-# 1615
-# 1616
-# 1617
-# 1618
-# 1619
-# 1620
-# 1621
-# 1622
-# 1623
-# 1624
-# 1625
-# 1626
-# 1627
-# 1628
-# 1629
-# 1630
-# 1631
-# 1632
-# 1633
-# 1634
-# 1635
-# 1636
-# 1637
-# 1638
-# 1639
-# 1640
-# 1641
-# 1642
-# 1643
-# 1644
-# 1645
-# 1646
-# 1647
-# 1648
-# 1649
-# 1650
-# 1651
-# 1652
-# 1653
-# 1654
-# 1655
-# 1656
-# 1657
-# 1658
-# 1659
-# 1660
-# 1661
-# 1662
-# 1663
-# 1664
-# 1665
-# 1666
-# 1667
-# 1668
-# 1669
-# 1670
-# 1671
-# 1672
-# 1673
-# 1674
-# 1675
-# 1676
-# 1677
-# 1678
-# 1679
-# 1680
-# 1681
-# 1682
-# 1683
-# 1684
-# 1685
-# 1686
-# 1687
-# 1688
-# 1689
-# 1690
-# 1691
-# 1692
-# 1693
-# 1694
-# 1695
-# 1696
-# 1697
-# 1698
-# 1699
-# 1700
-# 1701
-# 1702
-# 1703
-# 1704
-# 1705
-# 1706
-# 1707
-# 1708
-# 1709
-# 1710
-# 1711
-# 1712
-# 1713
-# 1714
-# 1715
-# 1716
-# 1717
-# 1718
-# 1719
-# 1720
-# 1721
-# 1722
-# 1723
-# 1724
-# 1725
-# 1726
-# 1727
-# 1728
-# 1729
-# 1730
-# 1731
-# 1732
-# 1733
-# 1734
-# 1735
-# 1736
-# 1737
-# 1738
-# 1739
-# 1740
-# 1741
-# 1742
-# 1743
-# 1744
-# 1745
-# 1746
-# 1747
-# 1748
-# 1749
-# 1750
-# 1751
-# 1752
-# 1753
-# 1754
-# 1755
-# 1756
-# 1757
-# 1758
-# 1759
-# 1760
-# 1761
-# 1762
-# 1763
-# 1764
-# 1765
-# 1766
-# 1767
-# 1768
-# 1769
-# 1770
-# 1771
-# 1772
-# 1773
-# 1774
-# 1775
-# 1776
-# 1777
-# 1778
-# 1779
-# 1780
-# 1781
-# 1782
-# 1783
-# 1784
-# 1785
-# 1786
-# 1787
-# 1788
-# 1789
-# 1790
-# 1791
-# 1792
-# 1793
-# 1794
-# 1795
-# 1796
-# 1797
-# 1798
-# 1799
-# 1800
-# 1801
-# 1802
-# 1803
-# 1804
-# 1805
-# 1806
-# 1807
-# 1808
-# 1809
-# 1810
-# 1811
-# 1812
-# 1813
-# 1814
-# 1815
-# 1816
-# 1817
-# 1818
-# 1819
-# 1820
-# 1821
-# 1822
-# 1823
-# 1824
-# 1825
-# 1826
-# 1827
-# 1828
-# 1829
-# 1830
-# 1831
-# 1832
-# 1833
-# 1834
-# 1835
-# 1836
-# 1837
-# 1838
-# 1839
-# 1840
-# 1841
-# 1842
-# 1843
-# 1844
-# 1845
-# 1846
-# 1847
-# 1848
-# 1849
-# 1850
-# 1851
-# 1852
-# 1853
-# 1854
-# 1855
-# 1856
-# 1857
-# 1858
-# 1859
-# 1860
-# 1861
-# 1862
-# 1863
-# 1864
-# 1865
-# 1866
-# 1867
-# 1868
-# 1869
-# 1870
-# 1871
-# 1872
-# 1873
-# 1874
-# 1875
-# 1876
-# 1877
-# 1878
-# 1879
-# 1880
-# 1881
-# 1882
-# 1883
-# 1884
-# 1885
-# 1886
-# 1887
-# 1888
-# 1889
-# 1890
-# 1891
-# 1892
-# 1893
-# 1894
-# 1895
-# 1896
-# 1897
-# 1898
-# 1899
-# 1900
-# 1901
-# 1902
-# 1903
-# 1904
-# 1905
-# 1906
-# 1907
-# 1908
-# 1909
-# 1910
-# 1911
-# 1912
-# 1913
-# 1914
-# 1915
-# 1916
-# 1917
-# 1918
-# 1919
-# 1920
-# 1921
-# 1922
-# 1923
-# 1924
-# 1925
-# 1926
-# 1927
-# 1928
-# 1929
-# 1930
-# 1931
-# 1932
-# 1933
-# 1934
-# 1935
-# 1936
-# 1937
-# 1938
-# 1939
-# 1940
-# 1941
-# 1942
-# 1943
-# 1944
-# 1945
-# 1946
-# 1947
-# 1948
-# 1949
-# 1950
-# 1951
-# 1952
-# 1953
-# 1954
-# 1955
-# 1956
-# 1957
-# 1958
-# 1959
-# 1960
-# 1961
-# 1962
-# 1963
-# 1964
-# 1965
-# 1966
-# 1967
-# 1968
-# 1969
-# 1970
-# 1971
-# 1972
-# 1973
-# 1974
-# 1975
-# 1976
-# 1977
-# 1978
-# 1979
-# 1980
-# 1981
-# 1982
-# 1983
-# 1984
-# 1985
-# 1986
-# 1987
-# 1988
-# 1989
-# 1990
-# 1991
-# 1992
-# 1993
-# 1994
-# 1995
-# 1996
-# 1997
-# 1998
-# 1999
-# 2000
-# Maximum amount of warnings exceeded. Use -maxwarnings to override.
ok 2 - warn()
+ # warn: Maximum amount of warnings exceeded. Use -maxwarnings to override.
+ ---
+ extensions:
+ messages:
+ - severity: warning
+ message: 0
+ - severity: warning
+ message: 1
+ - severity: warning
+ message: 2
+ - severity: warning
+ message: 3
+ - severity: warning
+ message: 4
+ - severity: warning
+ message: 5
+ - severity: warning
+ message: 6
+ - severity: warning
+ message: 7
+ - severity: warning
+ message: 8
+ - severity: warning
+ message: 9
+ - severity: warning
+ message: 10
+ - severity: warning
+ message: 11
+ - severity: warning
+ message: 12
+ - severity: warning
+ message: 13
+ - severity: warning
+ message: 14
+ - severity: warning
+ message: 15
+ - severity: warning
+ message: 16
+ - severity: warning
+ message: 17
+ - severity: warning
+ message: 18
+ - severity: warning
+ message: 19
+ - severity: warning
+ message: 20
+ - severity: warning
+ message: 21
+ - severity: warning
+ message: 22
+ - severity: warning
+ message: 23
+ - severity: warning
+ message: 24
+ - severity: warning
+ message: 25
+ - severity: warning
+ message: 26
+ - severity: warning
+ message: 27
+ - severity: warning
+ message: 28
+ - severity: warning
+ message: 29
+ - severity: warning
+ message: 30
+ - severity: warning
+ message: 31
+ - severity: warning
+ message: 32
+ - severity: warning
+ message: 33
+ - severity: warning
+ message: 34
+ - severity: warning
+ message: 35
+ - severity: warning
+ message: 36
+ - severity: warning
+ message: 37
+ - severity: warning
+ message: 38
+ - severity: warning
+ message: 39
+ - severity: warning
+ message: 40
+ - severity: warning
+ message: 41
+ - severity: warning
+ message: 42
+ - severity: warning
+ message: 43
+ - severity: warning
+ message: 44
+ - severity: warning
+ message: 45
+ - severity: warning
+ message: 46
+ - severity: warning
+ message: 47
+ - severity: warning
+ message: 48
+ - severity: warning
+ message: 49
+ - severity: warning
+ message: 50
+ - severity: warning
+ message: 51
+ - severity: warning
+ message: 52
+ - severity: warning
+ message: 53
+ - severity: warning
+ message: 54
+ - severity: warning
+ message: 55
+ - severity: warning
+ message: 56
+ - severity: warning
+ message: 57
+ - severity: warning
+ message: 58
+ - severity: warning
+ message: 59
+ - severity: warning
+ message: 60
+ - severity: warning
+ message: 61
+ - severity: warning
+ message: 62
+ - severity: warning
+ message: 63
+ - severity: warning
+ message: 64
+ - severity: warning
+ message: 65
+ - severity: warning
+ message: 66
+ - severity: warning
+ message: 67
+ - severity: warning
+ message: 68
+ - severity: warning
+ message: 69
+ - severity: warning
+ message: 70
+ - severity: warning
+ message: 71
+ - severity: warning
+ message: 72
+ - severity: warning
+ message: 73
+ - severity: warning
+ message: 74
+ - severity: warning
+ message: 75
+ - severity: warning
+ message: 76
+ - severity: warning
+ message: 77
+ - severity: warning
+ message: 78
+ - severity: warning
+ message: 79
+ - severity: warning
+ message: 80
+ - severity: warning
+ message: 81
+ - severity: warning
+ message: 82
+ - severity: warning
+ message: 83
+ - severity: warning
+ message: 84
+ - severity: warning
+ message: 85
+ - severity: warning
+ message: 86
+ - severity: warning
+ message: 87
+ - severity: warning
+ message: 88
+ - severity: warning
+ message: 89
+ - severity: warning
+ message: 90
+ - severity: warning
+ message: 91
+ - severity: warning
+ message: 92
+ - severity: warning
+ message: 93
+ - severity: warning
+ message: 94
+ - severity: warning
+ message: 95
+ - severity: warning
+ message: 96
+ - severity: warning
+ message: 97
+ - severity: warning
+ message: 98
+ - severity: warning
+ message: 99
+ - severity: warning
+ message: 100
+ - severity: warning
+ message: 101
+ - severity: warning
+ message: 102
+ - severity: warning
+ message: 103
+ - severity: warning
+ message: 104
+ - severity: warning
+ message: 105
+ - severity: warning
+ message: 106
+ - severity: warning
+ message: 107
+ - severity: warning
+ message: 108
+ - severity: warning
+ message: 109
+ - severity: warning
+ message: 110
+ - severity: warning
+ message: 111
+ - severity: warning
+ message: 112
+ - severity: warning
+ message: 113
+ - severity: warning
+ message: 114
+ - severity: warning
+ message: 115
+ - severity: warning
+ message: 116
+ - severity: warning
+ message: 117
+ - severity: warning
+ message: 118
+ - severity: warning
+ message: 119
+ - severity: warning
+ message: 120
+ - severity: warning
+ message: 121
+ - severity: warning
+ message: 122
+ - severity: warning
+ message: 123
+ - severity: warning
+ message: 124
+ - severity: warning
+ message: 125
+ - severity: warning
+ message: 126
+ - severity: warning
+ message: 127
+ - severity: warning
+ message: 128
+ - severity: warning
+ message: 129
+ - severity: warning
+ message: 130
+ - severity: warning
+ message: 131
+ - severity: warning
+ message: 132
+ - severity: warning
+ message: 133
+ - severity: warning
+ message: 134
+ - severity: warning
+ message: 135
+ - severity: warning
+ message: 136
+ - severity: warning
+ message: 137
+ - severity: warning
+ message: 138
+ - severity: warning
+ message: 139
+ - severity: warning
+ message: 140
+ - severity: warning
+ message: 141
+ - severity: warning
+ message: 142
+ - severity: warning
+ message: 143
+ - severity: warning
+ message: 144
+ - severity: warning
+ message: 145
+ - severity: warning
+ message: 146
+ - severity: warning
+ message: 147
+ - severity: warning
+ message: 148
+ - severity: warning
+ message: 149
+ - severity: warning
+ message: 150
+ - severity: warning
+ message: 151
+ - severity: warning
+ message: 152
+ - severity: warning
+ message: 153
+ - severity: warning
+ message: 154
+ - severity: warning
+ message: 155
+ - severity: warning
+ message: 156
+ - severity: warning
+ message: 157
+ - severity: warning
+ message: 158
+ - severity: warning
+ message: 159
+ - severity: warning
+ message: 160
+ - severity: warning
+ message: 161
+ - severity: warning
+ message: 162
+ - severity: warning
+ message: 163
+ - severity: warning
+ message: 164
+ - severity: warning
+ message: 165
+ - severity: warning
+ message: 166
+ - severity: warning
+ message: 167
+ - severity: warning
+ message: 168
+ - severity: warning
+ message: 169
+ - severity: warning
+ message: 170
+ - severity: warning
+ message: 171
+ - severity: warning
+ message: 172
+ - severity: warning
+ message: 173
+ - severity: warning
+ message: 174
+ - severity: warning
+ message: 175
+ - severity: warning
+ message: 176
+ - severity: warning
+ message: 177
+ - severity: warning
+ message: 178
+ - severity: warning
+ message: 179
+ - severity: warning
+ message: 180
+ - severity: warning
+ message: 181
+ - severity: warning
+ message: 182
+ - severity: warning
+ message: 183
+ - severity: warning
+ message: 184
+ - severity: warning
+ message: 185
+ - severity: warning
+ message: 186
+ - severity: warning
+ message: 187
+ - severity: warning
+ message: 188
+ - severity: warning
+ message: 189
+ - severity: warning
+ message: 190
+ - severity: warning
+ message: 191
+ - severity: warning
+ message: 192
+ - severity: warning
+ message: 193
+ - severity: warning
+ message: 194
+ - severity: warning
+ message: 195
+ - severity: warning
+ message: 196
+ - severity: warning
+ message: 197
+ - severity: warning
+ message: 198
+ - severity: warning
+ message: 199
+ - severity: warning
+ message: 200
+ - severity: warning
+ message: 201
+ - severity: warning
+ message: 202
+ - severity: warning
+ message: 203
+ - severity: warning
+ message: 204
+ - severity: warning
+ message: 205
+ - severity: warning
+ message: 206
+ - severity: warning
+ message: 207
+ - severity: warning
+ message: 208
+ - severity: warning
+ message: 209
+ - severity: warning
+ message: 210
+ - severity: warning
+ message: 211
+ - severity: warning
+ message: 212
+ - severity: warning
+ message: 213
+ - severity: warning
+ message: 214
+ - severity: warning
+ message: 215
+ - severity: warning
+ message: 216
+ - severity: warning
+ message: 217
+ - severity: warning
+ message: 218
+ - severity: warning
+ message: 219
+ - severity: warning
+ message: 220
+ - severity: warning
+ message: 221
+ - severity: warning
+ message: 222
+ - severity: warning
+ message: 223
+ - severity: warning
+ message: 224
+ - severity: warning
+ message: 225
+ - severity: warning
+ message: 226
+ - severity: warning
+ message: 227
+ - severity: warning
+ message: 228
+ - severity: warning
+ message: 229
+ - severity: warning
+ message: 230
+ - severity: warning
+ message: 231
+ - severity: warning
+ message: 232
+ - severity: warning
+ message: 233
+ - severity: warning
+ message: 234
+ - severity: warning
+ message: 235
+ - severity: warning
+ message: 236
+ - severity: warning
+ message: 237
+ - severity: warning
+ message: 238
+ - severity: warning
+ message: 239
+ - severity: warning
+ message: 240
+ - severity: warning
+ message: 241
+ - severity: warning
+ message: 242
+ - severity: warning
+ message: 243
+ - severity: warning
+ message: 244
+ - severity: warning
+ message: 245
+ - severity: warning
+ message: 246
+ - severity: warning
+ message: 247
+ - severity: warning
+ message: 248
+ - severity: warning
+ message: 249
+ - severity: warning
+ message: 250
+ - severity: warning
+ message: 251
+ - severity: warning
+ message: 252
+ - severity: warning
+ message: 253
+ - severity: warning
+ message: 254
+ - severity: warning
+ message: 255
+ - severity: warning
+ message: 256
+ - severity: warning
+ message: 257
+ - severity: warning
+ message: 258
+ - severity: warning
+ message: 259
+ - severity: warning
+ message: 260
+ - severity: warning
+ message: 261
+ - severity: warning
+ message: 262
+ - severity: warning
+ message: 263
+ - severity: warning
+ message: 264
+ - severity: warning
+ message: 265
+ - severity: warning
+ message: 266
+ - severity: warning
+ message: 267
+ - severity: warning
+ message: 268
+ - severity: warning
+ message: 269
+ - severity: warning
+ message: 270
+ - severity: warning
+ message: 271
+ - severity: warning
+ message: 272
+ - severity: warning
+ message: 273
+ - severity: warning
+ message: 274
+ - severity: warning
+ message: 275
+ - severity: warning
+ message: 276
+ - severity: warning
+ message: 277
+ - severity: warning
+ message: 278
+ - severity: warning
+ message: 279
+ - severity: warning
+ message: 280
+ - severity: warning
+ message: 281
+ - severity: warning
+ message: 282
+ - severity: warning
+ message: 283
+ - severity: warning
+ message: 284
+ - severity: warning
+ message: 285
+ - severity: warning
+ message: 286
+ - severity: warning
+ message: 287
+ - severity: warning
+ message: 288
+ - severity: warning
+ message: 289
+ - severity: warning
+ message: 290
+ - severity: warning
+ message: 291
+ - severity: warning
+ message: 292
+ - severity: warning
+ message: 293
+ - severity: warning
+ message: 294
+ - severity: warning
+ message: 295
+ - severity: warning
+ message: 296
+ - severity: warning
+ message: 297
+ - severity: warning
+ message: 298
+ - severity: warning
+ message: 299
+ - severity: warning
+ message: 300
+ - severity: warning
+ message: 301
+ - severity: warning
+ message: 302
+ - severity: warning
+ message: 303
+ - severity: warning
+ message: 304
+ - severity: warning
+ message: 305
+ - severity: warning
+ message: 306
+ - severity: warning
+ message: 307
+ - severity: warning
+ message: 308
+ - severity: warning
+ message: 309
+ - severity: warning
+ message: 310
+ - severity: warning
+ message: 311
+ - severity: warning
+ message: 312
+ - severity: warning
+ message: 313
+ - severity: warning
+ message: 314
+ - severity: warning
+ message: 315
+ - severity: warning
+ message: 316
+ - severity: warning
+ message: 317
+ - severity: warning
+ message: 318
+ - severity: warning
+ message: 319
+ - severity: warning
+ message: 320
+ - severity: warning
+ message: 321
+ - severity: warning
+ message: 322
+ - severity: warning
+ message: 323
+ - severity: warning
+ message: 324
+ - severity: warning
+ message: 325
+ - severity: warning
+ message: 326
+ - severity: warning
+ message: 327
+ - severity: warning
+ message: 328
+ - severity: warning
+ message: 329
+ - severity: warning
+ message: 330
+ - severity: warning
+ message: 331
+ - severity: warning
+ message: 332
+ - severity: warning
+ message: 333
+ - severity: warning
+ message: 334
+ - severity: warning
+ message: 335
+ - severity: warning
+ message: 336
+ - severity: warning
+ message: 337
+ - severity: warning
+ message: 338
+ - severity: warning
+ message: 339
+ - severity: warning
+ message: 340
+ - severity: warning
+ message: 341
+ - severity: warning
+ message: 342
+ - severity: warning
+ message: 343
+ - severity: warning
+ message: 344
+ - severity: warning
+ message: 345
+ - severity: warning
+ message: 346
+ - severity: warning
+ message: 347
+ - severity: warning
+ message: 348
+ - severity: warning
+ message: 349
+ - severity: warning
+ message: 350
+ - severity: warning
+ message: 351
+ - severity: warning
+ message: 352
+ - severity: warning
+ message: 353
+ - severity: warning
+ message: 354
+ - severity: warning
+ message: 355
+ - severity: warning
+ message: 356
+ - severity: warning
+ message: 357
+ - severity: warning
+ message: 358
+ - severity: warning
+ message: 359
+ - severity: warning
+ message: 360
+ - severity: warning
+ message: 361
+ - severity: warning
+ message: 362
+ - severity: warning
+ message: 363
+ - severity: warning
+ message: 364
+ - severity: warning
+ message: 365
+ - severity: warning
+ message: 366
+ - severity: warning
+ message: 367
+ - severity: warning
+ message: 368
+ - severity: warning
+ message: 369
+ - severity: warning
+ message: 370
+ - severity: warning
+ message: 371
+ - severity: warning
+ message: 372
+ - severity: warning
+ message: 373
+ - severity: warning
+ message: 374
+ - severity: warning
+ message: 375
+ - severity: warning
+ message: 376
+ - severity: warning
+ message: 377
+ - severity: warning
+ message: 378
+ - severity: warning
+ message: 379
+ - severity: warning
+ message: 380
+ - severity: warning
+ message: 381
+ - severity: warning
+ message: 382
+ - severity: warning
+ message: 383
+ - severity: warning
+ message: 384
+ - severity: warning
+ message: 385
+ - severity: warning
+ message: 386
+ - severity: warning
+ message: 387
+ - severity: warning
+ message: 388
+ - severity: warning
+ message: 389
+ - severity: warning
+ message: 390
+ - severity: warning
+ message: 391
+ - severity: warning
+ message: 392
+ - severity: warning
+ message: 393
+ - severity: warning
+ message: 394
+ - severity: warning
+ message: 395
+ - severity: warning
+ message: 396
+ - severity: warning
+ message: 397
+ - severity: warning
+ message: 398
+ - severity: warning
+ message: 399
+ - severity: warning
+ message: 400
+ - severity: warning
+ message: 401
+ - severity: warning
+ message: 402
+ - severity: warning
+ message: 403
+ - severity: warning
+ message: 404
+ - severity: warning
+ message: 405
+ - severity: warning
+ message: 406
+ - severity: warning
+ message: 407
+ - severity: warning
+ message: 408
+ - severity: warning
+ message: 409
+ - severity: warning
+ message: 410
+ - severity: warning
+ message: 411
+ - severity: warning
+ message: 412
+ - severity: warning
+ message: 413
+ - severity: warning
+ message: 414
+ - severity: warning
+ message: 415
+ - severity: warning
+ message: 416
+ - severity: warning
+ message: 417
+ - severity: warning
+ message: 418
+ - severity: warning
+ message: 419
+ - severity: warning
+ message: 420
+ - severity: warning
+ message: 421
+ - severity: warning
+ message: 422
+ - severity: warning
+ message: 423
+ - severity: warning
+ message: 424
+ - severity: warning
+ message: 425
+ - severity: warning
+ message: 426
+ - severity: warning
+ message: 427
+ - severity: warning
+ message: 428
+ - severity: warning
+ message: 429
+ - severity: warning
+ message: 430
+ - severity: warning
+ message: 431
+ - severity: warning
+ message: 432
+ - severity: warning
+ message: 433
+ - severity: warning
+ message: 434
+ - severity: warning
+ message: 435
+ - severity: warning
+ message: 436
+ - severity: warning
+ message: 437
+ - severity: warning
+ message: 438
+ - severity: warning
+ message: 439
+ - severity: warning
+ message: 440
+ - severity: warning
+ message: 441
+ - severity: warning
+ message: 442
+ - severity: warning
+ message: 443
+ - severity: warning
+ message: 444
+ - severity: warning
+ message: 445
+ - severity: warning
+ message: 446
+ - severity: warning
+ message: 447
+ - severity: warning
+ message: 448
+ - severity: warning
+ message: 449
+ - severity: warning
+ message: 450
+ - severity: warning
+ message: 451
+ - severity: warning
+ message: 452
+ - severity: warning
+ message: 453
+ - severity: warning
+ message: 454
+ - severity: warning
+ message: 455
+ - severity: warning
+ message: 456
+ - severity: warning
+ message: 457
+ - severity: warning
+ message: 458
+ - severity: warning
+ message: 459
+ - severity: warning
+ message: 460
+ - severity: warning
+ message: 461
+ - severity: warning
+ message: 462
+ - severity: warning
+ message: 463
+ - severity: warning
+ message: 464
+ - severity: warning
+ message: 465
+ - severity: warning
+ message: 466
+ - severity: warning
+ message: 467
+ - severity: warning
+ message: 468
+ - severity: warning
+ message: 469
+ - severity: warning
+ message: 470
+ - severity: warning
+ message: 471
+ - severity: warning
+ message: 472
+ - severity: warning
+ message: 473
+ - severity: warning
+ message: 474
+ - severity: warning
+ message: 475
+ - severity: warning
+ message: 476
+ - severity: warning
+ message: 477
+ - severity: warning
+ message: 478
+ - severity: warning
+ message: 479
+ - severity: warning
+ message: 480
+ - severity: warning
+ message: 481
+ - severity: warning
+ message: 482
+ - severity: warning
+ message: 483
+ - severity: warning
+ message: 484
+ - severity: warning
+ message: 485
+ - severity: warning
+ message: 486
+ - severity: warning
+ message: 487
+ - severity: warning
+ message: 488
+ - severity: warning
+ message: 489
+ - severity: warning
+ message: 490
+ - severity: warning
+ message: 491
+ - severity: warning
+ message: 492
+ - severity: warning
+ message: 493
+ - severity: warning
+ message: 494
+ - severity: warning
+ message: 495
+ - severity: warning
+ message: 496
+ - severity: warning
+ message: 497
+ - severity: warning
+ message: 498
+ - severity: warning
+ message: 499
+ - severity: warning
+ message: 500
+ - severity: warning
+ message: 501
+ - severity: warning
+ message: 502
+ - severity: warning
+ message: 503
+ - severity: warning
+ message: 504
+ - severity: warning
+ message: 505
+ - severity: warning
+ message: 506
+ - severity: warning
+ message: 507
+ - severity: warning
+ message: 508
+ - severity: warning
+ message: 509
+ - severity: warning
+ message: 510
+ - severity: warning
+ message: 511
+ - severity: warning
+ message: 512
+ - severity: warning
+ message: 513
+ - severity: warning
+ message: 514
+ - severity: warning
+ message: 515
+ - severity: warning
+ message: 516
+ - severity: warning
+ message: 517
+ - severity: warning
+ message: 518
+ - severity: warning
+ message: 519
+ - severity: warning
+ message: 520
+ - severity: warning
+ message: 521
+ - severity: warning
+ message: 522
+ - severity: warning
+ message: 523
+ - severity: warning
+ message: 524
+ - severity: warning
+ message: 525
+ - severity: warning
+ message: 526
+ - severity: warning
+ message: 527
+ - severity: warning
+ message: 528
+ - severity: warning
+ message: 529
+ - severity: warning
+ message: 530
+ - severity: warning
+ message: 531
+ - severity: warning
+ message: 532
+ - severity: warning
+ message: 533
+ - severity: warning
+ message: 534
+ - severity: warning
+ message: 535
+ - severity: warning
+ message: 536
+ - severity: warning
+ message: 537
+ - severity: warning
+ message: 538
+ - severity: warning
+ message: 539
+ - severity: warning
+ message: 540
+ - severity: warning
+ message: 541
+ - severity: warning
+ message: 542
+ - severity: warning
+ message: 543
+ - severity: warning
+ message: 544
+ - severity: warning
+ message: 545
+ - severity: warning
+ message: 546
+ - severity: warning
+ message: 547
+ - severity: warning
+ message: 548
+ - severity: warning
+ message: 549
+ - severity: warning
+ message: 550
+ - severity: warning
+ message: 551
+ - severity: warning
+ message: 552
+ - severity: warning
+ message: 553
+ - severity: warning
+ message: 554
+ - severity: warning
+ message: 555
+ - severity: warning
+ message: 556
+ - severity: warning
+ message: 557
+ - severity: warning
+ message: 558
+ - severity: warning
+ message: 559
+ - severity: warning
+ message: 560
+ - severity: warning
+ message: 561
+ - severity: warning
+ message: 562
+ - severity: warning
+ message: 563
+ - severity: warning
+ message: 564
+ - severity: warning
+ message: 565
+ - severity: warning
+ message: 566
+ - severity: warning
+ message: 567
+ - severity: warning
+ message: 568
+ - severity: warning
+ message: 569
+ - severity: warning
+ message: 570
+ - severity: warning
+ message: 571
+ - severity: warning
+ message: 572
+ - severity: warning
+ message: 573
+ - severity: warning
+ message: 574
+ - severity: warning
+ message: 575
+ - severity: warning
+ message: 576
+ - severity: warning
+ message: 577
+ - severity: warning
+ message: 578
+ - severity: warning
+ message: 579
+ - severity: warning
+ message: 580
+ - severity: warning
+ message: 581
+ - severity: warning
+ message: 582
+ - severity: warning
+ message: 583
+ - severity: warning
+ message: 584
+ - severity: warning
+ message: 585
+ - severity: warning
+ message: 586
+ - severity: warning
+ message: 587
+ - severity: warning
+ message: 588
+ - severity: warning
+ message: 589
+ - severity: warning
+ message: 590
+ - severity: warning
+ message: 591
+ - severity: warning
+ message: 592
+ - severity: warning
+ message: 593
+ - severity: warning
+ message: 594
+ - severity: warning
+ message: 595
+ - severity: warning
+ message: 596
+ - severity: warning
+ message: 597
+ - severity: warning
+ message: 598
+ - severity: warning
+ message: 599
+ - severity: warning
+ message: 600
+ - severity: warning
+ message: 601
+ - severity: warning
+ message: 602
+ - severity: warning
+ message: 603
+ - severity: warning
+ message: 604
+ - severity: warning
+ message: 605
+ - severity: warning
+ message: 606
+ - severity: warning
+ message: 607
+ - severity: warning
+ message: 608
+ - severity: warning
+ message: 609
+ - severity: warning
+ message: 610
+ - severity: warning
+ message: 611
+ - severity: warning
+ message: 612
+ - severity: warning
+ message: 613
+ - severity: warning
+ message: 614
+ - severity: warning
+ message: 615
+ - severity: warning
+ message: 616
+ - severity: warning
+ message: 617
+ - severity: warning
+ message: 618
+ - severity: warning
+ message: 619
+ - severity: warning
+ message: 620
+ - severity: warning
+ message: 621
+ - severity: warning
+ message: 622
+ - severity: warning
+ message: 623
+ - severity: warning
+ message: 624
+ - severity: warning
+ message: 625
+ - severity: warning
+ message: 626
+ - severity: warning
+ message: 627
+ - severity: warning
+ message: 628
+ - severity: warning
+ message: 629
+ - severity: warning
+ message: 630
+ - severity: warning
+ message: 631
+ - severity: warning
+ message: 632
+ - severity: warning
+ message: 633
+ - severity: warning
+ message: 634
+ - severity: warning
+ message: 635
+ - severity: warning
+ message: 636
+ - severity: warning
+ message: 637
+ - severity: warning
+ message: 638
+ - severity: warning
+ message: 639
+ - severity: warning
+ message: 640
+ - severity: warning
+ message: 641
+ - severity: warning
+ message: 642
+ - severity: warning
+ message: 643
+ - severity: warning
+ message: 644
+ - severity: warning
+ message: 645
+ - severity: warning
+ message: 646
+ - severity: warning
+ message: 647
+ - severity: warning
+ message: 648
+ - severity: warning
+ message: 649
+ - severity: warning
+ message: 650
+ - severity: warning
+ message: 651
+ - severity: warning
+ message: 652
+ - severity: warning
+ message: 653
+ - severity: warning
+ message: 654
+ - severity: warning
+ message: 655
+ - severity: warning
+ message: 656
+ - severity: warning
+ message: 657
+ - severity: warning
+ message: 658
+ - severity: warning
+ message: 659
+ - severity: warning
+ message: 660
+ - severity: warning
+ message: 661
+ - severity: warning
+ message: 662
+ - severity: warning
+ message: 663
+ - severity: warning
+ message: 664
+ - severity: warning
+ message: 665
+ - severity: warning
+ message: 666
+ - severity: warning
+ message: 667
+ - severity: warning
+ message: 668
+ - severity: warning
+ message: 669
+ - severity: warning
+ message: 670
+ - severity: warning
+ message: 671
+ - severity: warning
+ message: 672
+ - severity: warning
+ message: 673
+ - severity: warning
+ message: 674
+ - severity: warning
+ message: 675
+ - severity: warning
+ message: 676
+ - severity: warning
+ message: 677
+ - severity: warning
+ message: 678
+ - severity: warning
+ message: 679
+ - severity: warning
+ message: 680
+ - severity: warning
+ message: 681
+ - severity: warning
+ message: 682
+ - severity: warning
+ message: 683
+ - severity: warning
+ message: 684
+ - severity: warning
+ message: 685
+ - severity: warning
+ message: 686
+ - severity: warning
+ message: 687
+ - severity: warning
+ message: 688
+ - severity: warning
+ message: 689
+ - severity: warning
+ message: 690
+ - severity: warning
+ message: 691
+ - severity: warning
+ message: 692
+ - severity: warning
+ message: 693
+ - severity: warning
+ message: 694
+ - severity: warning
+ message: 695
+ - severity: warning
+ message: 696
+ - severity: warning
+ message: 697
+ - severity: warning
+ message: 698
+ - severity: warning
+ message: 699
+ - severity: warning
+ message: 700
+ - severity: warning
+ message: 701
+ - severity: warning
+ message: 702
+ - severity: warning
+ message: 703
+ - severity: warning
+ message: 704
+ - severity: warning
+ message: 705
+ - severity: warning
+ message: 706
+ - severity: warning
+ message: 707
+ - severity: warning
+ message: 708
+ - severity: warning
+ message: 709
+ - severity: warning
+ message: 710
+ - severity: warning
+ message: 711
+ - severity: warning
+ message: 712
+ - severity: warning
+ message: 713
+ - severity: warning
+ message: 714
+ - severity: warning
+ message: 715
+ - severity: warning
+ message: 716
+ - severity: warning
+ message: 717
+ - severity: warning
+ message: 718
+ - severity: warning
+ message: 719
+ - severity: warning
+ message: 720
+ - severity: warning
+ message: 721
+ - severity: warning
+ message: 722
+ - severity: warning
+ message: 723
+ - severity: warning
+ message: 724
+ - severity: warning
+ message: 725
+ - severity: warning
+ message: 726
+ - severity: warning
+ message: 727
+ - severity: warning
+ message: 728
+ - severity: warning
+ message: 729
+ - severity: warning
+ message: 730
+ - severity: warning
+ message: 731
+ - severity: warning
+ message: 732
+ - severity: warning
+ message: 733
+ - severity: warning
+ message: 734
+ - severity: warning
+ message: 735
+ - severity: warning
+ message: 736
+ - severity: warning
+ message: 737
+ - severity: warning
+ message: 738
+ - severity: warning
+ message: 739
+ - severity: warning
+ message: 740
+ - severity: warning
+ message: 741
+ - severity: warning
+ message: 742
+ - severity: warning
+ message: 743
+ - severity: warning
+ message: 744
+ - severity: warning
+ message: 745
+ - severity: warning
+ message: 746
+ - severity: warning
+ message: 747
+ - severity: warning
+ message: 748
+ - severity: warning
+ message: 749
+ - severity: warning
+ message: 750
+ - severity: warning
+ message: 751
+ - severity: warning
+ message: 752
+ - severity: warning
+ message: 753
+ - severity: warning
+ message: 754
+ - severity: warning
+ message: 755
+ - severity: warning
+ message: 756
+ - severity: warning
+ message: 757
+ - severity: warning
+ message: 758
+ - severity: warning
+ message: 759
+ - severity: warning
+ message: 760
+ - severity: warning
+ message: 761
+ - severity: warning
+ message: 762
+ - severity: warning
+ message: 763
+ - severity: warning
+ message: 764
+ - severity: warning
+ message: 765
+ - severity: warning
+ message: 766
+ - severity: warning
+ message: 767
+ - severity: warning
+ message: 768
+ - severity: warning
+ message: 769
+ - severity: warning
+ message: 770
+ - severity: warning
+ message: 771
+ - severity: warning
+ message: 772
+ - severity: warning
+ message: 773
+ - severity: warning
+ message: 774
+ - severity: warning
+ message: 775
+ - severity: warning
+ message: 776
+ - severity: warning
+ message: 777
+ - severity: warning
+ message: 778
+ - severity: warning
+ message: 779
+ - severity: warning
+ message: 780
+ - severity: warning
+ message: 781
+ - severity: warning
+ message: 782
+ - severity: warning
+ message: 783
+ - severity: warning
+ message: 784
+ - severity: warning
+ message: 785
+ - severity: warning
+ message: 786
+ - severity: warning
+ message: 787
+ - severity: warning
+ message: 788
+ - severity: warning
+ message: 789
+ - severity: warning
+ message: 790
+ - severity: warning
+ message: 791
+ - severity: warning
+ message: 792
+ - severity: warning
+ message: 793
+ - severity: warning
+ message: 794
+ - severity: warning
+ message: 795
+ - severity: warning
+ message: 796
+ - severity: warning
+ message: 797
+ - severity: warning
+ message: 798
+ - severity: warning
+ message: 799
+ - severity: warning
+ message: 800
+ - severity: warning
+ message: 801
+ - severity: warning
+ message: 802
+ - severity: warning
+ message: 803
+ - severity: warning
+ message: 804
+ - severity: warning
+ message: 805
+ - severity: warning
+ message: 806
+ - severity: warning
+ message: 807
+ - severity: warning
+ message: 808
+ - severity: warning
+ message: 809
+ - severity: warning
+ message: 810
+ - severity: warning
+ message: 811
+ - severity: warning
+ message: 812
+ - severity: warning
+ message: 813
+ - severity: warning
+ message: 814
+ - severity: warning
+ message: 815
+ - severity: warning
+ message: 816
+ - severity: warning
+ message: 817
+ - severity: warning
+ message: 818
+ - severity: warning
+ message: 819
+ - severity: warning
+ message: 820
+ - severity: warning
+ message: 821
+ - severity: warning
+ message: 822
+ - severity: warning
+ message: 823
+ - severity: warning
+ message: 824
+ - severity: warning
+ message: 825
+ - severity: warning
+ message: 826
+ - severity: warning
+ message: 827
+ - severity: warning
+ message: 828
+ - severity: warning
+ message: 829
+ - severity: warning
+ message: 830
+ - severity: warning
+ message: 831
+ - severity: warning
+ message: 832
+ - severity: warning
+ message: 833
+ - severity: warning
+ message: 834
+ - severity: warning
+ message: 835
+ - severity: warning
+ message: 836
+ - severity: warning
+ message: 837
+ - severity: warning
+ message: 838
+ - severity: warning
+ message: 839
+ - severity: warning
+ message: 840
+ - severity: warning
+ message: 841
+ - severity: warning
+ message: 842
+ - severity: warning
+ message: 843
+ - severity: warning
+ message: 844
+ - severity: warning
+ message: 845
+ - severity: warning
+ message: 846
+ - severity: warning
+ message: 847
+ - severity: warning
+ message: 848
+ - severity: warning
+ message: 849
+ - severity: warning
+ message: 850
+ - severity: warning
+ message: 851
+ - severity: warning
+ message: 852
+ - severity: warning
+ message: 853
+ - severity: warning
+ message: 854
+ - severity: warning
+ message: 855
+ - severity: warning
+ message: 856
+ - severity: warning
+ message: 857
+ - severity: warning
+ message: 858
+ - severity: warning
+ message: 859
+ - severity: warning
+ message: 860
+ - severity: warning
+ message: 861
+ - severity: warning
+ message: 862
+ - severity: warning
+ message: 863
+ - severity: warning
+ message: 864
+ - severity: warning
+ message: 865
+ - severity: warning
+ message: 866
+ - severity: warning
+ message: 867
+ - severity: warning
+ message: 868
+ - severity: warning
+ message: 869
+ - severity: warning
+ message: 870
+ - severity: warning
+ message: 871
+ - severity: warning
+ message: 872
+ - severity: warning
+ message: 873
+ - severity: warning
+ message: 874
+ - severity: warning
+ message: 875
+ - severity: warning
+ message: 876
+ - severity: warning
+ message: 877
+ - severity: warning
+ message: 878
+ - severity: warning
+ message: 879
+ - severity: warning
+ message: 880
+ - severity: warning
+ message: 881
+ - severity: warning
+ message: 882
+ - severity: warning
+ message: 883
+ - severity: warning
+ message: 884
+ - severity: warning
+ message: 885
+ - severity: warning
+ message: 886
+ - severity: warning
+ message: 887
+ - severity: warning
+ message: 888
+ - severity: warning
+ message: 889
+ - severity: warning
+ message: 890
+ - severity: warning
+ message: 891
+ - severity: warning
+ message: 892
+ - severity: warning
+ message: 893
+ - severity: warning
+ message: 894
+ - severity: warning
+ message: 895
+ - severity: warning
+ message: 896
+ - severity: warning
+ message: 897
+ - severity: warning
+ message: 898
+ - severity: warning
+ message: 899
+ - severity: warning
+ message: 900
+ - severity: warning
+ message: 901
+ - severity: warning
+ message: 902
+ - severity: warning
+ message: 903
+ - severity: warning
+ message: 904
+ - severity: warning
+ message: 905
+ - severity: warning
+ message: 906
+ - severity: warning
+ message: 907
+ - severity: warning
+ message: 908
+ - severity: warning
+ message: 909
+ - severity: warning
+ message: 910
+ - severity: warning
+ message: 911
+ - severity: warning
+ message: 912
+ - severity: warning
+ message: 913
+ - severity: warning
+ message: 914
+ - severity: warning
+ message: 915
+ - severity: warning
+ message: 916
+ - severity: warning
+ message: 917
+ - severity: warning
+ message: 918
+ - severity: warning
+ message: 919
+ - severity: warning
+ message: 920
+ - severity: warning
+ message: 921
+ - severity: warning
+ message: 922
+ - severity: warning
+ message: 923
+ - severity: warning
+ message: 924
+ - severity: warning
+ message: 925
+ - severity: warning
+ message: 926
+ - severity: warning
+ message: 927
+ - severity: warning
+ message: 928
+ - severity: warning
+ message: 929
+ - severity: warning
+ message: 930
+ - severity: warning
+ message: 931
+ - severity: warning
+ message: 932
+ - severity: warning
+ message: 933
+ - severity: warning
+ message: 934
+ - severity: warning
+ message: 935
+ - severity: warning
+ message: 936
+ - severity: warning
+ message: 937
+ - severity: warning
+ message: 938
+ - severity: warning
+ message: 939
+ - severity: warning
+ message: 940
+ - severity: warning
+ message: 941
+ - severity: warning
+ message: 942
+ - severity: warning
+ message: 943
+ - severity: warning
+ message: 944
+ - severity: warning
+ message: 945
+ - severity: warning
+ message: 946
+ - severity: warning
+ message: 947
+ - severity: warning
+ message: 948
+ - severity: warning
+ message: 949
+ - severity: warning
+ message: 950
+ - severity: warning
+ message: 951
+ - severity: warning
+ message: 952
+ - severity: warning
+ message: 953
+ - severity: warning
+ message: 954
+ - severity: warning
+ message: 955
+ - severity: warning
+ message: 956
+ - severity: warning
+ message: 957
+ - severity: warning
+ message: 958
+ - severity: warning
+ message: 959
+ - severity: warning
+ message: 960
+ - severity: warning
+ message: 961
+ - severity: warning
+ message: 962
+ - severity: warning
+ message: 963
+ - severity: warning
+ message: 964
+ - severity: warning
+ message: 965
+ - severity: warning
+ message: 966
+ - severity: warning
+ message: 967
+ - severity: warning
+ message: 968
+ - severity: warning
+ message: 969
+ - severity: warning
+ message: 970
+ - severity: warning
+ message: 971
+ - severity: warning
+ message: 972
+ - severity: warning
+ message: 973
+ - severity: warning
+ message: 974
+ - severity: warning
+ message: 975
+ - severity: warning
+ message: 976
+ - severity: warning
+ message: 977
+ - severity: warning
+ message: 978
+ - severity: warning
+ message: 979
+ - severity: warning
+ message: 980
+ - severity: warning
+ message: 981
+ - severity: warning
+ message: 982
+ - severity: warning
+ message: 983
+ - severity: warning
+ message: 984
+ - severity: warning
+ message: 985
+ - severity: warning
+ message: 986
+ - severity: warning
+ message: 987
+ - severity: warning
+ message: 988
+ - severity: warning
+ message: 989
+ - severity: warning
+ message: 990
+ - severity: warning
+ message: 991
+ - severity: warning
+ message: 992
+ - severity: warning
+ message: 993
+ - severity: warning
+ message: 994
+ - severity: warning
+ message: 995
+ - severity: warning
+ message: 996
+ - severity: warning
+ message: 997
+ - severity: warning
+ message: 998
+ - severity: warning
+ message: 999
+ - severity: warning
+ message: 1000
+ - severity: warning
+ message: 1001
+ - severity: warning
+ message: 1002
+ - severity: warning
+ message: 1003
+ - severity: warning
+ message: 1004
+ - severity: warning
+ message: 1005
+ - severity: warning
+ message: 1006
+ - severity: warning
+ message: 1007
+ - severity: warning
+ message: 1008
+ - severity: warning
+ message: 1009
+ - severity: warning
+ message: 1010
+ - severity: warning
+ message: 1011
+ - severity: warning
+ message: 1012
+ - severity: warning
+ message: 1013
+ - severity: warning
+ message: 1014
+ - severity: warning
+ message: 1015
+ - severity: warning
+ message: 1016
+ - severity: warning
+ message: 1017
+ - severity: warning
+ message: 1018
+ - severity: warning
+ message: 1019
+ - severity: warning
+ message: 1020
+ - severity: warning
+ message: 1021
+ - severity: warning
+ message: 1022
+ - severity: warning
+ message: 1023
+ - severity: warning
+ message: 1024
+ - severity: warning
+ message: 1025
+ - severity: warning
+ message: 1026
+ - severity: warning
+ message: 1027
+ - severity: warning
+ message: 1028
+ - severity: warning
+ message: 1029
+ - severity: warning
+ message: 1030
+ - severity: warning
+ message: 1031
+ - severity: warning
+ message: 1032
+ - severity: warning
+ message: 1033
+ - severity: warning
+ message: 1034
+ - severity: warning
+ message: 1035
+ - severity: warning
+ message: 1036
+ - severity: warning
+ message: 1037
+ - severity: warning
+ message: 1038
+ - severity: warning
+ message: 1039
+ - severity: warning
+ message: 1040
+ - severity: warning
+ message: 1041
+ - severity: warning
+ message: 1042
+ - severity: warning
+ message: 1043
+ - severity: warning
+ message: 1044
+ - severity: warning
+ message: 1045
+ - severity: warning
+ message: 1046
+ - severity: warning
+ message: 1047
+ - severity: warning
+ message: 1048
+ - severity: warning
+ message: 1049
+ - severity: warning
+ message: 1050
+ - severity: warning
+ message: 1051
+ - severity: warning
+ message: 1052
+ - severity: warning
+ message: 1053
+ - severity: warning
+ message: 1054
+ - severity: warning
+ message: 1055
+ - severity: warning
+ message: 1056
+ - severity: warning
+ message: 1057
+ - severity: warning
+ message: 1058
+ - severity: warning
+ message: 1059
+ - severity: warning
+ message: 1060
+ - severity: warning
+ message: 1061
+ - severity: warning
+ message: 1062
+ - severity: warning
+ message: 1063
+ - severity: warning
+ message: 1064
+ - severity: warning
+ message: 1065
+ - severity: warning
+ message: 1066
+ - severity: warning
+ message: 1067
+ - severity: warning
+ message: 1068
+ - severity: warning
+ message: 1069
+ - severity: warning
+ message: 1070
+ - severity: warning
+ message: 1071
+ - severity: warning
+ message: 1072
+ - severity: warning
+ message: 1073
+ - severity: warning
+ message: 1074
+ - severity: warning
+ message: 1075
+ - severity: warning
+ message: 1076
+ - severity: warning
+ message: 1077
+ - severity: warning
+ message: 1078
+ - severity: warning
+ message: 1079
+ - severity: warning
+ message: 1080
+ - severity: warning
+ message: 1081
+ - severity: warning
+ message: 1082
+ - severity: warning
+ message: 1083
+ - severity: warning
+ message: 1084
+ - severity: warning
+ message: 1085
+ - severity: warning
+ message: 1086
+ - severity: warning
+ message: 1087
+ - severity: warning
+ message: 1088
+ - severity: warning
+ message: 1089
+ - severity: warning
+ message: 1090
+ - severity: warning
+ message: 1091
+ - severity: warning
+ message: 1092
+ - severity: warning
+ message: 1093
+ - severity: warning
+ message: 1094
+ - severity: warning
+ message: 1095
+ - severity: warning
+ message: 1096
+ - severity: warning
+ message: 1097
+ - severity: warning
+ message: 1098
+ - severity: warning
+ message: 1099
+ - severity: warning
+ message: 1100
+ - severity: warning
+ message: 1101
+ - severity: warning
+ message: 1102
+ - severity: warning
+ message: 1103
+ - severity: warning
+ message: 1104
+ - severity: warning
+ message: 1105
+ - severity: warning
+ message: 1106
+ - severity: warning
+ message: 1107
+ - severity: warning
+ message: 1108
+ - severity: warning
+ message: 1109
+ - severity: warning
+ message: 1110
+ - severity: warning
+ message: 1111
+ - severity: warning
+ message: 1112
+ - severity: warning
+ message: 1113
+ - severity: warning
+ message: 1114
+ - severity: warning
+ message: 1115
+ - severity: warning
+ message: 1116
+ - severity: warning
+ message: 1117
+ - severity: warning
+ message: 1118
+ - severity: warning
+ message: 1119
+ - severity: warning
+ message: 1120
+ - severity: warning
+ message: 1121
+ - severity: warning
+ message: 1122
+ - severity: warning
+ message: 1123
+ - severity: warning
+ message: 1124
+ - severity: warning
+ message: 1125
+ - severity: warning
+ message: 1126
+ - severity: warning
+ message: 1127
+ - severity: warning
+ message: 1128
+ - severity: warning
+ message: 1129
+ - severity: warning
+ message: 1130
+ - severity: warning
+ message: 1131
+ - severity: warning
+ message: 1132
+ - severity: warning
+ message: 1133
+ - severity: warning
+ message: 1134
+ - severity: warning
+ message: 1135
+ - severity: warning
+ message: 1136
+ - severity: warning
+ message: 1137
+ - severity: warning
+ message: 1138
+ - severity: warning
+ message: 1139
+ - severity: warning
+ message: 1140
+ - severity: warning
+ message: 1141
+ - severity: warning
+ message: 1142
+ - severity: warning
+ message: 1143
+ - severity: warning
+ message: 1144
+ - severity: warning
+ message: 1145
+ - severity: warning
+ message: 1146
+ - severity: warning
+ message: 1147
+ - severity: warning
+ message: 1148
+ - severity: warning
+ message: 1149
+ - severity: warning
+ message: 1150
+ - severity: warning
+ message: 1151
+ - severity: warning
+ message: 1152
+ - severity: warning
+ message: 1153
+ - severity: warning
+ message: 1154
+ - severity: warning
+ message: 1155
+ - severity: warning
+ message: 1156
+ - severity: warning
+ message: 1157
+ - severity: warning
+ message: 1158
+ - severity: warning
+ message: 1159
+ - severity: warning
+ message: 1160
+ - severity: warning
+ message: 1161
+ - severity: warning
+ message: 1162
+ - severity: warning
+ message: 1163
+ - severity: warning
+ message: 1164
+ - severity: warning
+ message: 1165
+ - severity: warning
+ message: 1166
+ - severity: warning
+ message: 1167
+ - severity: warning
+ message: 1168
+ - severity: warning
+ message: 1169
+ - severity: warning
+ message: 1170
+ - severity: warning
+ message: 1171
+ - severity: warning
+ message: 1172
+ - severity: warning
+ message: 1173
+ - severity: warning
+ message: 1174
+ - severity: warning
+ message: 1175
+ - severity: warning
+ message: 1176
+ - severity: warning
+ message: 1177
+ - severity: warning
+ message: 1178
+ - severity: warning
+ message: 1179
+ - severity: warning
+ message: 1180
+ - severity: warning
+ message: 1181
+ - severity: warning
+ message: 1182
+ - severity: warning
+ message: 1183
+ - severity: warning
+ message: 1184
+ - severity: warning
+ message: 1185
+ - severity: warning
+ message: 1186
+ - severity: warning
+ message: 1187
+ - severity: warning
+ message: 1188
+ - severity: warning
+ message: 1189
+ - severity: warning
+ message: 1190
+ - severity: warning
+ message: 1191
+ - severity: warning
+ message: 1192
+ - severity: warning
+ message: 1193
+ - severity: warning
+ message: 1194
+ - severity: warning
+ message: 1195
+ - severity: warning
+ message: 1196
+ - severity: warning
+ message: 1197
+ - severity: warning
+ message: 1198
+ - severity: warning
+ message: 1199
+ - severity: warning
+ message: 1200
+ - severity: warning
+ message: 1201
+ - severity: warning
+ message: 1202
+ - severity: warning
+ message: 1203
+ - severity: warning
+ message: 1204
+ - severity: warning
+ message: 1205
+ - severity: warning
+ message: 1206
+ - severity: warning
+ message: 1207
+ - severity: warning
+ message: 1208
+ - severity: warning
+ message: 1209
+ - severity: warning
+ message: 1210
+ - severity: warning
+ message: 1211
+ - severity: warning
+ message: 1212
+ - severity: warning
+ message: 1213
+ - severity: warning
+ message: 1214
+ - severity: warning
+ message: 1215
+ - severity: warning
+ message: 1216
+ - severity: warning
+ message: 1217
+ - severity: warning
+ message: 1218
+ - severity: warning
+ message: 1219
+ - severity: warning
+ message: 1220
+ - severity: warning
+ message: 1221
+ - severity: warning
+ message: 1222
+ - severity: warning
+ message: 1223
+ - severity: warning
+ message: 1224
+ - severity: warning
+ message: 1225
+ - severity: warning
+ message: 1226
+ - severity: warning
+ message: 1227
+ - severity: warning
+ message: 1228
+ - severity: warning
+ message: 1229
+ - severity: warning
+ message: 1230
+ - severity: warning
+ message: 1231
+ - severity: warning
+ message: 1232
+ - severity: warning
+ message: 1233
+ - severity: warning
+ message: 1234
+ - severity: warning
+ message: 1235
+ - severity: warning
+ message: 1236
+ - severity: warning
+ message: 1237
+ - severity: warning
+ message: 1238
+ - severity: warning
+ message: 1239
+ - severity: warning
+ message: 1240
+ - severity: warning
+ message: 1241
+ - severity: warning
+ message: 1242
+ - severity: warning
+ message: 1243
+ - severity: warning
+ message: 1244
+ - severity: warning
+ message: 1245
+ - severity: warning
+ message: 1246
+ - severity: warning
+ message: 1247
+ - severity: warning
+ message: 1248
+ - severity: warning
+ message: 1249
+ - severity: warning
+ message: 1250
+ - severity: warning
+ message: 1251
+ - severity: warning
+ message: 1252
+ - severity: warning
+ message: 1253
+ - severity: warning
+ message: 1254
+ - severity: warning
+ message: 1255
+ - severity: warning
+ message: 1256
+ - severity: warning
+ message: 1257
+ - severity: warning
+ message: 1258
+ - severity: warning
+ message: 1259
+ - severity: warning
+ message: 1260
+ - severity: warning
+ message: 1261
+ - severity: warning
+ message: 1262
+ - severity: warning
+ message: 1263
+ - severity: warning
+ message: 1264
+ - severity: warning
+ message: 1265
+ - severity: warning
+ message: 1266
+ - severity: warning
+ message: 1267
+ - severity: warning
+ message: 1268
+ - severity: warning
+ message: 1269
+ - severity: warning
+ message: 1270
+ - severity: warning
+ message: 1271
+ - severity: warning
+ message: 1272
+ - severity: warning
+ message: 1273
+ - severity: warning
+ message: 1274
+ - severity: warning
+ message: 1275
+ - severity: warning
+ message: 1276
+ - severity: warning
+ message: 1277
+ - severity: warning
+ message: 1278
+ - severity: warning
+ message: 1279
+ - severity: warning
+ message: 1280
+ - severity: warning
+ message: 1281
+ - severity: warning
+ message: 1282
+ - severity: warning
+ message: 1283
+ - severity: warning
+ message: 1284
+ - severity: warning
+ message: 1285
+ - severity: warning
+ message: 1286
+ - severity: warning
+ message: 1287
+ - severity: warning
+ message: 1288
+ - severity: warning
+ message: 1289
+ - severity: warning
+ message: 1290
+ - severity: warning
+ message: 1291
+ - severity: warning
+ message: 1292
+ - severity: warning
+ message: 1293
+ - severity: warning
+ message: 1294
+ - severity: warning
+ message: 1295
+ - severity: warning
+ message: 1296
+ - severity: warning
+ message: 1297
+ - severity: warning
+ message: 1298
+ - severity: warning
+ message: 1299
+ - severity: warning
+ message: 1300
+ - severity: warning
+ message: 1301
+ - severity: warning
+ message: 1302
+ - severity: warning
+ message: 1303
+ - severity: warning
+ message: 1304
+ - severity: warning
+ message: 1305
+ - severity: warning
+ message: 1306
+ - severity: warning
+ message: 1307
+ - severity: warning
+ message: 1308
+ - severity: warning
+ message: 1309
+ - severity: warning
+ message: 1310
+ - severity: warning
+ message: 1311
+ - severity: warning
+ message: 1312
+ - severity: warning
+ message: 1313
+ - severity: warning
+ message: 1314
+ - severity: warning
+ message: 1315
+ - severity: warning
+ message: 1316
+ - severity: warning
+ message: 1317
+ - severity: warning
+ message: 1318
+ - severity: warning
+ message: 1319
+ - severity: warning
+ message: 1320
+ - severity: warning
+ message: 1321
+ - severity: warning
+ message: 1322
+ - severity: warning
+ message: 1323
+ - severity: warning
+ message: 1324
+ - severity: warning
+ message: 1325
+ - severity: warning
+ message: 1326
+ - severity: warning
+ message: 1327
+ - severity: warning
+ message: 1328
+ - severity: warning
+ message: 1329
+ - severity: warning
+ message: 1330
+ - severity: warning
+ message: 1331
+ - severity: warning
+ message: 1332
+ - severity: warning
+ message: 1333
+ - severity: warning
+ message: 1334
+ - severity: warning
+ message: 1335
+ - severity: warning
+ message: 1336
+ - severity: warning
+ message: 1337
+ - severity: warning
+ message: 1338
+ - severity: warning
+ message: 1339
+ - severity: warning
+ message: 1340
+ - severity: warning
+ message: 1341
+ - severity: warning
+ message: 1342
+ - severity: warning
+ message: 1343
+ - severity: warning
+ message: 1344
+ - severity: warning
+ message: 1345
+ - severity: warning
+ message: 1346
+ - severity: warning
+ message: 1347
+ - severity: warning
+ message: 1348
+ - severity: warning
+ message: 1349
+ - severity: warning
+ message: 1350
+ - severity: warning
+ message: 1351
+ - severity: warning
+ message: 1352
+ - severity: warning
+ message: 1353
+ - severity: warning
+ message: 1354
+ - severity: warning
+ message: 1355
+ - severity: warning
+ message: 1356
+ - severity: warning
+ message: 1357
+ - severity: warning
+ message: 1358
+ - severity: warning
+ message: 1359
+ - severity: warning
+ message: 1360
+ - severity: warning
+ message: 1361
+ - severity: warning
+ message: 1362
+ - severity: warning
+ message: 1363
+ - severity: warning
+ message: 1364
+ - severity: warning
+ message: 1365
+ - severity: warning
+ message: 1366
+ - severity: warning
+ message: 1367
+ - severity: warning
+ message: 1368
+ - severity: warning
+ message: 1369
+ - severity: warning
+ message: 1370
+ - severity: warning
+ message: 1371
+ - severity: warning
+ message: 1372
+ - severity: warning
+ message: 1373
+ - severity: warning
+ message: 1374
+ - severity: warning
+ message: 1375
+ - severity: warning
+ message: 1376
+ - severity: warning
+ message: 1377
+ - severity: warning
+ message: 1378
+ - severity: warning
+ message: 1379
+ - severity: warning
+ message: 1380
+ - severity: warning
+ message: 1381
+ - severity: warning
+ message: 1382
+ - severity: warning
+ message: 1383
+ - severity: warning
+ message: 1384
+ - severity: warning
+ message: 1385
+ - severity: warning
+ message: 1386
+ - severity: warning
+ message: 1387
+ - severity: warning
+ message: 1388
+ - severity: warning
+ message: 1389
+ - severity: warning
+ message: 1390
+ - severity: warning
+ message: 1391
+ - severity: warning
+ message: 1392
+ - severity: warning
+ message: 1393
+ - severity: warning
+ message: 1394
+ - severity: warning
+ message: 1395
+ - severity: warning
+ message: 1396
+ - severity: warning
+ message: 1397
+ - severity: warning
+ message: 1398
+ - severity: warning
+ message: 1399
+ - severity: warning
+ message: 1400
+ - severity: warning
+ message: 1401
+ - severity: warning
+ message: 1402
+ - severity: warning
+ message: 1403
+ - severity: warning
+ message: 1404
+ - severity: warning
+ message: 1405
+ - severity: warning
+ message: 1406
+ - severity: warning
+ message: 1407
+ - severity: warning
+ message: 1408
+ - severity: warning
+ message: 1409
+ - severity: warning
+ message: 1410
+ - severity: warning
+ message: 1411
+ - severity: warning
+ message: 1412
+ - severity: warning
+ message: 1413
+ - severity: warning
+ message: 1414
+ - severity: warning
+ message: 1415
+ - severity: warning
+ message: 1416
+ - severity: warning
+ message: 1417
+ - severity: warning
+ message: 1418
+ - severity: warning
+ message: 1419
+ - severity: warning
+ message: 1420
+ - severity: warning
+ message: 1421
+ - severity: warning
+ message: 1422
+ - severity: warning
+ message: 1423
+ - severity: warning
+ message: 1424
+ - severity: warning
+ message: 1425
+ - severity: warning
+ message: 1426
+ - severity: warning
+ message: 1427
+ - severity: warning
+ message: 1428
+ - severity: warning
+ message: 1429
+ - severity: warning
+ message: 1430
+ - severity: warning
+ message: 1431
+ - severity: warning
+ message: 1432
+ - severity: warning
+ message: 1433
+ - severity: warning
+ message: 1434
+ - severity: warning
+ message: 1435
+ - severity: warning
+ message: 1436
+ - severity: warning
+ message: 1437
+ - severity: warning
+ message: 1438
+ - severity: warning
+ message: 1439
+ - severity: warning
+ message: 1440
+ - severity: warning
+ message: 1441
+ - severity: warning
+ message: 1442
+ - severity: warning
+ message: 1443
+ - severity: warning
+ message: 1444
+ - severity: warning
+ message: 1445
+ - severity: warning
+ message: 1446
+ - severity: warning
+ message: 1447
+ - severity: warning
+ message: 1448
+ - severity: warning
+ message: 1449
+ - severity: warning
+ message: 1450
+ - severity: warning
+ message: 1451
+ - severity: warning
+ message: 1452
+ - severity: warning
+ message: 1453
+ - severity: warning
+ message: 1454
+ - severity: warning
+ message: 1455
+ - severity: warning
+ message: 1456
+ - severity: warning
+ message: 1457
+ - severity: warning
+ message: 1458
+ - severity: warning
+ message: 1459
+ - severity: warning
+ message: 1460
+ - severity: warning
+ message: 1461
+ - severity: warning
+ message: 1462
+ - severity: warning
+ message: 1463
+ - severity: warning
+ message: 1464
+ - severity: warning
+ message: 1465
+ - severity: warning
+ message: 1466
+ - severity: warning
+ message: 1467
+ - severity: warning
+ message: 1468
+ - severity: warning
+ message: 1469
+ - severity: warning
+ message: 1470
+ - severity: warning
+ message: 1471
+ - severity: warning
+ message: 1472
+ - severity: warning
+ message: 1473
+ - severity: warning
+ message: 1474
+ - severity: warning
+ message: 1475
+ - severity: warning
+ message: 1476
+ - severity: warning
+ message: 1477
+ - severity: warning
+ message: 1478
+ - severity: warning
+ message: 1479
+ - severity: warning
+ message: 1480
+ - severity: warning
+ message: 1481
+ - severity: warning
+ message: 1482
+ - severity: warning
+ message: 1483
+ - severity: warning
+ message: 1484
+ - severity: warning
+ message: 1485
+ - severity: warning
+ message: 1486
+ - severity: warning
+ message: 1487
+ - severity: warning
+ message: 1488
+ - severity: warning
+ message: 1489
+ - severity: warning
+ message: 1490
+ - severity: warning
+ message: 1491
+ - severity: warning
+ message: 1492
+ - severity: warning
+ message: 1493
+ - severity: warning
+ message: 1494
+ - severity: warning
+ message: 1495
+ - severity: warning
+ message: 1496
+ - severity: warning
+ message: 1497
+ - severity: warning
+ message: 1498
+ - severity: warning
+ message: 1499
+ - severity: warning
+ message: 1500
+ - severity: warning
+ message: 1501
+ - severity: warning
+ message: 1502
+ - severity: warning
+ message: 1503
+ - severity: warning
+ message: 1504
+ - severity: warning
+ message: 1505
+ - severity: warning
+ message: 1506
+ - severity: warning
+ message: 1507
+ - severity: warning
+ message: 1508
+ - severity: warning
+ message: 1509
+ - severity: warning
+ message: 1510
+ - severity: warning
+ message: 1511
+ - severity: warning
+ message: 1512
+ - severity: warning
+ message: 1513
+ - severity: warning
+ message: 1514
+ - severity: warning
+ message: 1515
+ - severity: warning
+ message: 1516
+ - severity: warning
+ message: 1517
+ - severity: warning
+ message: 1518
+ - severity: warning
+ message: 1519
+ - severity: warning
+ message: 1520
+ - severity: warning
+ message: 1521
+ - severity: warning
+ message: 1522
+ - severity: warning
+ message: 1523
+ - severity: warning
+ message: 1524
+ - severity: warning
+ message: 1525
+ - severity: warning
+ message: 1526
+ - severity: warning
+ message: 1527
+ - severity: warning
+ message: 1528
+ - severity: warning
+ message: 1529
+ - severity: warning
+ message: 1530
+ - severity: warning
+ message: 1531
+ - severity: warning
+ message: 1532
+ - severity: warning
+ message: 1533
+ - severity: warning
+ message: 1534
+ - severity: warning
+ message: 1535
+ - severity: warning
+ message: 1536
+ - severity: warning
+ message: 1537
+ - severity: warning
+ message: 1538
+ - severity: warning
+ message: 1539
+ - severity: warning
+ message: 1540
+ - severity: warning
+ message: 1541
+ - severity: warning
+ message: 1542
+ - severity: warning
+ message: 1543
+ - severity: warning
+ message: 1544
+ - severity: warning
+ message: 1545
+ - severity: warning
+ message: 1546
+ - severity: warning
+ message: 1547
+ - severity: warning
+ message: 1548
+ - severity: warning
+ message: 1549
+ - severity: warning
+ message: 1550
+ - severity: warning
+ message: 1551
+ - severity: warning
+ message: 1552
+ - severity: warning
+ message: 1553
+ - severity: warning
+ message: 1554
+ - severity: warning
+ message: 1555
+ - severity: warning
+ message: 1556
+ - severity: warning
+ message: 1557
+ - severity: warning
+ message: 1558
+ - severity: warning
+ message: 1559
+ - severity: warning
+ message: 1560
+ - severity: warning
+ message: 1561
+ - severity: warning
+ message: 1562
+ - severity: warning
+ message: 1563
+ - severity: warning
+ message: 1564
+ - severity: warning
+ message: 1565
+ - severity: warning
+ message: 1566
+ - severity: warning
+ message: 1567
+ - severity: warning
+ message: 1568
+ - severity: warning
+ message: 1569
+ - severity: warning
+ message: 1570
+ - severity: warning
+ message: 1571
+ - severity: warning
+ message: 1572
+ - severity: warning
+ message: 1573
+ - severity: warning
+ message: 1574
+ - severity: warning
+ message: 1575
+ - severity: warning
+ message: 1576
+ - severity: warning
+ message: 1577
+ - severity: warning
+ message: 1578
+ - severity: warning
+ message: 1579
+ - severity: warning
+ message: 1580
+ - severity: warning
+ message: 1581
+ - severity: warning
+ message: 1582
+ - severity: warning
+ message: 1583
+ - severity: warning
+ message: 1584
+ - severity: warning
+ message: 1585
+ - severity: warning
+ message: 1586
+ - severity: warning
+ message: 1587
+ - severity: warning
+ message: 1588
+ - severity: warning
+ message: 1589
+ - severity: warning
+ message: 1590
+ - severity: warning
+ message: 1591
+ - severity: warning
+ message: 1592
+ - severity: warning
+ message: 1593
+ - severity: warning
+ message: 1594
+ - severity: warning
+ message: 1595
+ - severity: warning
+ message: 1596
+ - severity: warning
+ message: 1597
+ - severity: warning
+ message: 1598
+ - severity: warning
+ message: 1599
+ - severity: warning
+ message: 1600
+ - severity: warning
+ message: 1601
+ - severity: warning
+ message: 1602
+ - severity: warning
+ message: 1603
+ - severity: warning
+ message: 1604
+ - severity: warning
+ message: 1605
+ - severity: warning
+ message: 1606
+ - severity: warning
+ message: 1607
+ - severity: warning
+ message: 1608
+ - severity: warning
+ message: 1609
+ - severity: warning
+ message: 1610
+ - severity: warning
+ message: 1611
+ - severity: warning
+ message: 1612
+ - severity: warning
+ message: 1613
+ - severity: warning
+ message: 1614
+ - severity: warning
+ message: 1615
+ - severity: warning
+ message: 1616
+ - severity: warning
+ message: 1617
+ - severity: warning
+ message: 1618
+ - severity: warning
+ message: 1619
+ - severity: warning
+ message: 1620
+ - severity: warning
+ message: 1621
+ - severity: warning
+ message: 1622
+ - severity: warning
+ message: 1623
+ - severity: warning
+ message: 1624
+ - severity: warning
+ message: 1625
+ - severity: warning
+ message: 1626
+ - severity: warning
+ message: 1627
+ - severity: warning
+ message: 1628
+ - severity: warning
+ message: 1629
+ - severity: warning
+ message: 1630
+ - severity: warning
+ message: 1631
+ - severity: warning
+ message: 1632
+ - severity: warning
+ message: 1633
+ - severity: warning
+ message: 1634
+ - severity: warning
+ message: 1635
+ - severity: warning
+ message: 1636
+ - severity: warning
+ message: 1637
+ - severity: warning
+ message: 1638
+ - severity: warning
+ message: 1639
+ - severity: warning
+ message: 1640
+ - severity: warning
+ message: 1641
+ - severity: warning
+ message: 1642
+ - severity: warning
+ message: 1643
+ - severity: warning
+ message: 1644
+ - severity: warning
+ message: 1645
+ - severity: warning
+ message: 1646
+ - severity: warning
+ message: 1647
+ - severity: warning
+ message: 1648
+ - severity: warning
+ message: 1649
+ - severity: warning
+ message: 1650
+ - severity: warning
+ message: 1651
+ - severity: warning
+ message: 1652
+ - severity: warning
+ message: 1653
+ - severity: warning
+ message: 1654
+ - severity: warning
+ message: 1655
+ - severity: warning
+ message: 1656
+ - severity: warning
+ message: 1657
+ - severity: warning
+ message: 1658
+ - severity: warning
+ message: 1659
+ - severity: warning
+ message: 1660
+ - severity: warning
+ message: 1661
+ - severity: warning
+ message: 1662
+ - severity: warning
+ message: 1663
+ - severity: warning
+ message: 1664
+ - severity: warning
+ message: 1665
+ - severity: warning
+ message: 1666
+ - severity: warning
+ message: 1667
+ - severity: warning
+ message: 1668
+ - severity: warning
+ message: 1669
+ - severity: warning
+ message: 1670
+ - severity: warning
+ message: 1671
+ - severity: warning
+ message: 1672
+ - severity: warning
+ message: 1673
+ - severity: warning
+ message: 1674
+ - severity: warning
+ message: 1675
+ - severity: warning
+ message: 1676
+ - severity: warning
+ message: 1677
+ - severity: warning
+ message: 1678
+ - severity: warning
+ message: 1679
+ - severity: warning
+ message: 1680
+ - severity: warning
+ message: 1681
+ - severity: warning
+ message: 1682
+ - severity: warning
+ message: 1683
+ - severity: warning
+ message: 1684
+ - severity: warning
+ message: 1685
+ - severity: warning
+ message: 1686
+ - severity: warning
+ message: 1687
+ - severity: warning
+ message: 1688
+ - severity: warning
+ message: 1689
+ - severity: warning
+ message: 1690
+ - severity: warning
+ message: 1691
+ - severity: warning
+ message: 1692
+ - severity: warning
+ message: 1693
+ - severity: warning
+ message: 1694
+ - severity: warning
+ message: 1695
+ - severity: warning
+ message: 1696
+ - severity: warning
+ message: 1697
+ - severity: warning
+ message: 1698
+ - severity: warning
+ message: 1699
+ - severity: warning
+ message: 1700
+ - severity: warning
+ message: 1701
+ - severity: warning
+ message: 1702
+ - severity: warning
+ message: 1703
+ - severity: warning
+ message: 1704
+ - severity: warning
+ message: 1705
+ - severity: warning
+ message: 1706
+ - severity: warning
+ message: 1707
+ - severity: warning
+ message: 1708
+ - severity: warning
+ message: 1709
+ - severity: warning
+ message: 1710
+ - severity: warning
+ message: 1711
+ - severity: warning
+ message: 1712
+ - severity: warning
+ message: 1713
+ - severity: warning
+ message: 1714
+ - severity: warning
+ message: 1715
+ - severity: warning
+ message: 1716
+ - severity: warning
+ message: 1717
+ - severity: warning
+ message: 1718
+ - severity: warning
+ message: 1719
+ - severity: warning
+ message: 1720
+ - severity: warning
+ message: 1721
+ - severity: warning
+ message: 1722
+ - severity: warning
+ message: 1723
+ - severity: warning
+ message: 1724
+ - severity: warning
+ message: 1725
+ - severity: warning
+ message: 1726
+ - severity: warning
+ message: 1727
+ - severity: warning
+ message: 1728
+ - severity: warning
+ message: 1729
+ - severity: warning
+ message: 1730
+ - severity: warning
+ message: 1731
+ - severity: warning
+ message: 1732
+ - severity: warning
+ message: 1733
+ - severity: warning
+ message: 1734
+ - severity: warning
+ message: 1735
+ - severity: warning
+ message: 1736
+ - severity: warning
+ message: 1737
+ - severity: warning
+ message: 1738
+ - severity: warning
+ message: 1739
+ - severity: warning
+ message: 1740
+ - severity: warning
+ message: 1741
+ - severity: warning
+ message: 1742
+ - severity: warning
+ message: 1743
+ - severity: warning
+ message: 1744
+ - severity: warning
+ message: 1745
+ - severity: warning
+ message: 1746
+ - severity: warning
+ message: 1747
+ - severity: warning
+ message: 1748
+ - severity: warning
+ message: 1749
+ - severity: warning
+ message: 1750
+ - severity: warning
+ message: 1751
+ - severity: warning
+ message: 1752
+ - severity: warning
+ message: 1753
+ - severity: warning
+ message: 1754
+ - severity: warning
+ message: 1755
+ - severity: warning
+ message: 1756
+ - severity: warning
+ message: 1757
+ - severity: warning
+ message: 1758
+ - severity: warning
+ message: 1759
+ - severity: warning
+ message: 1760
+ - severity: warning
+ message: 1761
+ - severity: warning
+ message: 1762
+ - severity: warning
+ message: 1763
+ - severity: warning
+ message: 1764
+ - severity: warning
+ message: 1765
+ - severity: warning
+ message: 1766
+ - severity: warning
+ message: 1767
+ - severity: warning
+ message: 1768
+ - severity: warning
+ message: 1769
+ - severity: warning
+ message: 1770
+ - severity: warning
+ message: 1771
+ - severity: warning
+ message: 1772
+ - severity: warning
+ message: 1773
+ - severity: warning
+ message: 1774
+ - severity: warning
+ message: 1775
+ - severity: warning
+ message: 1776
+ - severity: warning
+ message: 1777
+ - severity: warning
+ message: 1778
+ - severity: warning
+ message: 1779
+ - severity: warning
+ message: 1780
+ - severity: warning
+ message: 1781
+ - severity: warning
+ message: 1782
+ - severity: warning
+ message: 1783
+ - severity: warning
+ message: 1784
+ - severity: warning
+ message: 1785
+ - severity: warning
+ message: 1786
+ - severity: warning
+ message: 1787
+ - severity: warning
+ message: 1788
+ - severity: warning
+ message: 1789
+ - severity: warning
+ message: 1790
+ - severity: warning
+ message: 1791
+ - severity: warning
+ message: 1792
+ - severity: warning
+ message: 1793
+ - severity: warning
+ message: 1794
+ - severity: warning
+ message: 1795
+ - severity: warning
+ message: 1796
+ - severity: warning
+ message: 1797
+ - severity: warning
+ message: 1798
+ - severity: warning
+ message: 1799
+ - severity: warning
+ message: 1800
+ - severity: warning
+ message: 1801
+ - severity: warning
+ message: 1802
+ - severity: warning
+ message: 1803
+ - severity: warning
+ message: 1804
+ - severity: warning
+ message: 1805
+ - severity: warning
+ message: 1806
+ - severity: warning
+ message: 1807
+ - severity: warning
+ message: 1808
+ - severity: warning
+ message: 1809
+ - severity: warning
+ message: 1810
+ - severity: warning
+ message: 1811
+ - severity: warning
+ message: 1812
+ - severity: warning
+ message: 1813
+ - severity: warning
+ message: 1814
+ - severity: warning
+ message: 1815
+ - severity: warning
+ message: 1816
+ - severity: warning
+ message: 1817
+ - severity: warning
+ message: 1818
+ - severity: warning
+ message: 1819
+ - severity: warning
+ message: 1820
+ - severity: warning
+ message: 1821
+ - severity: warning
+ message: 1822
+ - severity: warning
+ message: 1823
+ - severity: warning
+ message: 1824
+ - severity: warning
+ message: 1825
+ - severity: warning
+ message: 1826
+ - severity: warning
+ message: 1827
+ - severity: warning
+ message: 1828
+ - severity: warning
+ message: 1829
+ - severity: warning
+ message: 1830
+ - severity: warning
+ message: 1831
+ - severity: warning
+ message: 1832
+ - severity: warning
+ message: 1833
+ - severity: warning
+ message: 1834
+ - severity: warning
+ message: 1835
+ - severity: warning
+ message: 1836
+ - severity: warning
+ message: 1837
+ - severity: warning
+ message: 1838
+ - severity: warning
+ message: 1839
+ - severity: warning
+ message: 1840
+ - severity: warning
+ message: 1841
+ - severity: warning
+ message: 1842
+ - severity: warning
+ message: 1843
+ - severity: warning
+ message: 1844
+ - severity: warning
+ message: 1845
+ - severity: warning
+ message: 1846
+ - severity: warning
+ message: 1847
+ - severity: warning
+ message: 1848
+ - severity: warning
+ message: 1849
+ - severity: warning
+ message: 1850
+ - severity: warning
+ message: 1851
+ - severity: warning
+ message: 1852
+ - severity: warning
+ message: 1853
+ - severity: warning
+ message: 1854
+ - severity: warning
+ message: 1855
+ - severity: warning
+ message: 1856
+ - severity: warning
+ message: 1857
+ - severity: warning
+ message: 1858
+ - severity: warning
+ message: 1859
+ - severity: warning
+ message: 1860
+ - severity: warning
+ message: 1861
+ - severity: warning
+ message: 1862
+ - severity: warning
+ message: 1863
+ - severity: warning
+ message: 1864
+ - severity: warning
+ message: 1865
+ - severity: warning
+ message: 1866
+ - severity: warning
+ message: 1867
+ - severity: warning
+ message: 1868
+ - severity: warning
+ message: 1869
+ - severity: warning
+ message: 1870
+ - severity: warning
+ message: 1871
+ - severity: warning
+ message: 1872
+ - severity: warning
+ message: 1873
+ - severity: warning
+ message: 1874
+ - severity: warning
+ message: 1875
+ - severity: warning
+ message: 1876
+ - severity: warning
+ message: 1877
+ - severity: warning
+ message: 1878
+ - severity: warning
+ message: 1879
+ - severity: warning
+ message: 1880
+ - severity: warning
+ message: 1881
+ - severity: warning
+ message: 1882
+ - severity: warning
+ message: 1883
+ - severity: warning
+ message: 1884
+ - severity: warning
+ message: 1885
+ - severity: warning
+ message: 1886
+ - severity: warning
+ message: 1887
+ - severity: warning
+ message: 1888
+ - severity: warning
+ message: 1889
+ - severity: warning
+ message: 1890
+ - severity: warning
+ message: 1891
+ - severity: warning
+ message: 1892
+ - severity: warning
+ message: 1893
+ - severity: warning
+ message: 1894
+ - severity: warning
+ message: 1895
+ - severity: warning
+ message: 1896
+ - severity: warning
+ message: 1897
+ - severity: warning
+ message: 1898
+ - severity: warning
+ message: 1899
+ - severity: warning
+ message: 1900
+ - severity: warning
+ message: 1901
+ - severity: warning
+ message: 1902
+ - severity: warning
+ message: 1903
+ - severity: warning
+ message: 1904
+ - severity: warning
+ message: 1905
+ - severity: warning
+ message: 1906
+ - severity: warning
+ message: 1907
+ - severity: warning
+ message: 1908
+ - severity: warning
+ message: 1909
+ - severity: warning
+ message: 1910
+ - severity: warning
+ message: 1911
+ - severity: warning
+ message: 1912
+ - severity: warning
+ message: 1913
+ - severity: warning
+ message: 1914
+ - severity: warning
+ message: 1915
+ - severity: warning
+ message: 1916
+ - severity: warning
+ message: 1917
+ - severity: warning
+ message: 1918
+ - severity: warning
+ message: 1919
+ - severity: warning
+ message: 1920
+ - severity: warning
+ message: 1921
+ - severity: warning
+ message: 1922
+ - severity: warning
+ message: 1923
+ - severity: warning
+ message: 1924
+ - severity: warning
+ message: 1925
+ - severity: warning
+ message: 1926
+ - severity: warning
+ message: 1927
+ - severity: warning
+ message: 1928
+ - severity: warning
+ message: 1929
+ - severity: warning
+ message: 1930
+ - severity: warning
+ message: 1931
+ - severity: warning
+ message: 1932
+ - severity: warning
+ message: 1933
+ - severity: warning
+ message: 1934
+ - severity: warning
+ message: 1935
+ - severity: warning
+ message: 1936
+ - severity: warning
+ message: 1937
+ - severity: warning
+ message: 1938
+ - severity: warning
+ message: 1939
+ - severity: warning
+ message: 1940
+ - severity: warning
+ message: 1941
+ - severity: warning
+ message: 1942
+ - severity: warning
+ message: 1943
+ - severity: warning
+ message: 1944
+ - severity: warning
+ message: 1945
+ - severity: warning
+ message: 1946
+ - severity: warning
+ message: 1947
+ - severity: warning
+ message: 1948
+ - severity: warning
+ message: 1949
+ - severity: warning
+ message: 1950
+ - severity: warning
+ message: 1951
+ - severity: warning
+ message: 1952
+ - severity: warning
+ message: 1953
+ - severity: warning
+ message: 1954
+ - severity: warning
+ message: 1955
+ - severity: warning
+ message: 1956
+ - severity: warning
+ message: 1957
+ - severity: warning
+ message: 1958
+ - severity: warning
+ message: 1959
+ - severity: warning
+ message: 1960
+ - severity: warning
+ message: 1961
+ - severity: warning
+ message: 1962
+ - severity: warning
+ message: 1963
+ - severity: warning
+ message: 1964
+ - severity: warning
+ message: 1965
+ - severity: warning
+ message: 1966
+ - severity: warning
+ message: 1967
+ - severity: warning
+ message: 1968
+ - severity: warning
+ message: 1969
+ - severity: warning
+ message: 1970
+ - severity: warning
+ message: 1971
+ - severity: warning
+ message: 1972
+ - severity: warning
+ message: 1973
+ - severity: warning
+ message: 1974
+ - severity: warning
+ message: 1975
+ - severity: warning
+ message: 1976
+ - severity: warning
+ message: 1977
+ - severity: warning
+ message: 1978
+ - severity: warning
+ message: 1979
+ - severity: warning
+ message: 1980
+ - severity: warning
+ message: 1981
+ - severity: warning
+ message: 1982
+ - severity: warning
+ message: 1983
+ - severity: warning
+ message: 1984
+ - severity: warning
+ message: 1985
+ - severity: warning
+ message: 1986
+ - severity: warning
+ message: 1987
+ - severity: warning
+ message: 1988
+ - severity: warning
+ message: 1989
+ - severity: warning
+ message: 1990
+ - severity: warning
+ message: 1991
+ - severity: warning
+ message: 1992
+ - severity: warning
+ message: 1993
+ - severity: warning
+ message: 1994
+ - severity: warning
+ message: 1995
+ - severity: warning
+ message: 1996
+ - severity: warning
+ message: 1997
+ - severity: warning
+ message: 1998
+ - severity: warning
+ message: 1999
+ - severity: warning
+ message: 2000
+ ...
ok 3 - cleanupTestCase()
1..3
# tests 3
diff --git a/tests/auto/testlib/selftests/expected_mouse.junitxml b/tests/auto/testlib/selftests/expected_mouse.junitxml
index 0664ab3a34..8b0b7b2da5 100644
--- a/tests/auto/testlib/selftests/expected_mouse.junitxml
+++ b/tests/auto/testlib/selftests/expected_mouse.junitxml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<testsuite name="tst_Mouse" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="13" failures="0" errors="0" skipped="3" time="@TEST_DURATION@">
+<testsuite name="tst_Mouse" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="14" failures="0" errors="0" skipped="3" time="@TEST_DURATION@">
<properties>
<property name="QTestVersion" value="@INSERT_QT_VERSION_HERE@"/>
<property name="QtVersion" value="@INSERT_QT_VERSION_HERE@"/>
@@ -23,5 +23,6 @@
<testcase name="deterministicEvents(first&#x002D;run&#x002D;false)" classname="tst_Mouse" time="@TEST_DURATION@">
<skipped message="Not implemented!"/>
</testcase>
+ <testcase name="doubleClick" classname="tst_Mouse" time="@TEST_DURATION@"/>
<testcase name="cleanupTestCase" classname="tst_Mouse" time="@TEST_DURATION@"/>
</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_mouse.lightxml b/tests/auto/testlib/selftests/expected_mouse.lightxml
index ed125d9b68..fd6b9a8218 100644
--- a/tests/auto/testlib/selftests/expected_mouse.lightxml
+++ b/tests/auto/testlib/selftests/expected_mouse.lightxml
@@ -54,6 +54,10 @@
</Incident>
<Duration msecs="0"/>
</TestFunction>
+ <TestFunction name="doubleClick">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_mouse.tap b/tests/auto/testlib/selftests/expected_mouse.tap
index a91b5b4da2..a2ba671bf4 100644
--- a/tests/auto/testlib/selftests/expected_mouse.tap
+++ b/tests/auto/testlib/selftests/expected_mouse.tap
@@ -12,8 +12,9 @@ ok 9 - stateHandlingPart1(dummy-2)
ok 10 - stateHandlingPart2() # SKIP Not implemented beyond this point!
ok 11 - deterministicEvents(first-run-true) # SKIP Not implemented!
ok 12 - deterministicEvents(first-run-false) # SKIP Not implemented!
-ok 13 - cleanupTestCase()
-1..13
-# tests 13
-# pass 10
+ok 13 - doubleClick()
+ok 14 - cleanupTestCase()
+1..14
+# tests 14
+# pass 11
# fail 0
diff --git a/tests/auto/testlib/selftests/expected_mouse.teamcity b/tests/auto/testlib/selftests/expected_mouse.teamcity
index 371bd49626..44c03ce6d7 100644
--- a/tests/auto/testlib/selftests/expected_mouse.teamcity
+++ b/tests/auto/testlib/selftests/expected_mouse.teamcity
@@ -26,6 +26,8 @@
##teamcity[testStarted name='deterministicEvents(first-run-false)' flowId='tst_Mouse']
##teamcity[testIgnored name='deterministicEvents(first-run-false)' message='Not implemented! |[Loc: qtbase/tests/auto/testlib/selftests/mouse/tst_mouse.cpp(0)|]' flowId='tst_Mouse']
##teamcity[testFinished name='deterministicEvents(first-run-false)' flowId='tst_Mouse']
+##teamcity[testStarted name='doubleClick()' flowId='tst_Mouse']
+##teamcity[testFinished name='doubleClick()' flowId='tst_Mouse']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_Mouse']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_Mouse']
##teamcity[testSuiteFinished name='tst_Mouse' flowId='tst_Mouse']
diff --git a/tests/auto/testlib/selftests/expected_mouse.txt b/tests/auto/testlib/selftests/expected_mouse.txt
index 660b4f47a4..9fe927062d 100644
--- a/tests/auto/testlib/selftests/expected_mouse.txt
+++ b/tests/auto/testlib/selftests/expected_mouse.txt
@@ -15,6 +15,7 @@ SKIP : tst_Mouse::deterministicEvents(first-run-true) Not implemented!
Loc: [qtbase/tests/auto/testlib/selftests/mouse/tst_mouse.cpp(0)]
SKIP : tst_Mouse::deterministicEvents(first-run-false) Not implemented!
Loc: [qtbase/tests/auto/testlib/selftests/mouse/tst_mouse.cpp(0)]
+PASS : tst_Mouse::doubleClick()
PASS : tst_Mouse::cleanupTestCase()
-Totals: 10 passed, 0 failed, 3 skipped, 0 blacklisted, 0ms
+Totals: 11 passed, 0 failed, 3 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Mouse *********
diff --git a/tests/auto/testlib/selftests/expected_mouse.xml b/tests/auto/testlib/selftests/expected_mouse.xml
index 26bde614ce..b532534049 100644
--- a/tests/auto/testlib/selftests/expected_mouse.xml
+++ b/tests/auto/testlib/selftests/expected_mouse.xml
@@ -56,6 +56,10 @@
</Incident>
<Duration msecs="0"/>
</TestFunction>
+ <TestFunction name="doubleClick">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_signaldumper.tap b/tests/auto/testlib/selftests/expected_signaldumper.tap
index 4e0ae0bf4f..45de4ce20e 100644
--- a/tests/auto/testlib/selftests/expected_signaldumper.tap
+++ b/tests/auto/testlib/selftests/expected_signaldumper.tap
@@ -1,149 +1,149 @@
TAP version 13
# tst_Signaldumper
ok 1 - initTestCase()
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
ok 2 - noConnections()
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
ok 3 - oneSlot(direct)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 4 - oneSlot(queued)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Slot: SignalSlotClass(_POINTER_) slotWithParameters(int,char)
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 5 - oneSlotOldSyntax(direct)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Slot: SignalSlotClass(_POINTER_) slotWithParameters(int,char)
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 6 - oneSlotOldSyntax(queued)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 7 - twoSlots(direct)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 8 - twoSlots(queued)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
-# Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Slot: SignalSlotClass(_POINTER_) slotWithParameters(int,char)
-# Slot: SignalSlotClass(_POINTER_) slotWithParameters(int,char)
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
-# Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 9 - twoSlotsOldSyntax(direct)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
+ # inform: Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Slot: SignalSlotClass(_POINTER_) slotWithParameters(int,char)
+ # inform: Slot: SignalSlotClass(_POINTER_) slotWithParameters(int,char)
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
+ # inform: Slot: SignalSlotClass(_POINTER_) slotWithoutParameters()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 10 - twoSlotsOldSyntax(queued)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: SignalSlotClass(_POINTER_) nestedSignalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 11 - signalForwarding(direct)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) nestedSignalWithParameters (int(242), char(m))
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 12 - signalForwarding(queued)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Slot: SignalSlotClass(_POINTER_) nestedSignal()
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Slot: SignalSlotClass(_POINTER_) nestedSignalWithParameters(int,char)
-# Signal: SignalSlotClass(_POINTER_) nestedSignalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Slot: SignalSlotClass(_POINTER_) nestedSignal()
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignalWithParameters (int(242), char(m))
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
ok 13 - signalForwardingOldSyntax(direct)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) nestedSignalWithParameters (int(242), char(m))
-# Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Slot: SignalSlotClass(_POINTER_) nestedSignal()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Slot: SignalSlotClass(_POINTER_) nestedSignalWithParameters(int,char)
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Slot: SignalSlotClass(_POINTER_) nestedSignal()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 14 - signalForwardingOldSyntax(queued)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignalWithParameters (int(242), char(m))
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithParameters (int(242), char(m))
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
ok 15 - slotEmittingSignal(direct)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 16 - slotEmittingSignal(queued)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Slot: SignalSlotClass(_POINTER_) emitSecondSignal()
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
ok 17 - slotEmittingSignalOldSyntax(direct)
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
-# Signal: QEventDispatcherPlatform(_POINTER_) awake ()
-# Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Slot: SignalSlotClass(_POINTER_) emitSecondSignal()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
ok 18 - slotEmittingSignalOldSyntax(queued)
-# Signal: SignalSlotClass(_POINTER_) qStringSignal (QString(Test string))
-# Signal: SignalSlotClass(_POINTER_) qStringRefSignal ((QString&)@_POINTER_)
-# Signal: SignalSlotClass(_POINTER_) qStringConstRefSignal (QString(Test string))
-# Signal: SignalSlotClass(_POINTER_) qByteArraySignal (QByteArray(Test bytearray))
-# Signal: SignalSlotClass(_POINTER_) qListSignal (QList<int>())
-# Signal: SignalSlotClass(_POINTER_) qVectorSignal (QList<int>())
-# Signal: SignalSlotClass(_POINTER_) qVectorRefSignal ((QList<int>&)@_POINTER_)
-# Signal: SignalSlotClass(_POINTER_) qVectorConstRefSignal (QList<int>())
-# Signal: SignalSlotClass(_POINTER_) qVectorConstPointerSignal ((const QList<int>*)_POINTER_)
-# Signal: SignalSlotClass(_POINTER_) qVectorPointerConstSignal ((QList<int>*)_POINTER_)
-# Signal: SignalSlotClass(_POINTER_) qVariantSignal (QVariant())
-# Signal: SignalSlotClass(_POINTER_) qVariantSignal (QVariant())
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: QEventDispatcherPlatform(_POINTER_) awake ()
+ # inform: Signal: SignalSlotClass(_POINTER_) nestedSignal ()
ok 19 - variousTypes()
-# Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
+ # inform: Signal: SignalSlotClass(_POINTER_) qStringSignal (QString(Test string))
+ # inform: Signal: SignalSlotClass(_POINTER_) qStringRefSignal ((QString&)@_POINTER_)
+ # inform: Signal: SignalSlotClass(_POINTER_) qStringConstRefSignal (QString(Test string))
+ # inform: Signal: SignalSlotClass(_POINTER_) qByteArraySignal (QByteArray(Test bytearray))
+ # inform: Signal: SignalSlotClass(_POINTER_) qListSignal (QList<int>())
+ # inform: Signal: SignalSlotClass(_POINTER_) qVectorSignal (QList<int>())
+ # inform: Signal: SignalSlotClass(_POINTER_) qVectorRefSignal ((QList<int>&)@_POINTER_)
+ # inform: Signal: SignalSlotClass(_POINTER_) qVectorConstRefSignal (QList<int>())
+ # inform: Signal: SignalSlotClass(_POINTER_) qVectorConstPointerSignal ((const QList<int>*)_POINTER_)
+ # inform: Signal: SignalSlotClass(_POINTER_) qVectorPointerConstSignal ((QList<int>*)_POINTER_)
+ # inform: Signal: SignalSlotClass(_POINTER_) qVariantSignal (QVariant())
+ # inform: Signal: SignalSlotClass(_POINTER_) qVariantSignal (QVariant())
ok 20 - deletingSender()
+ # inform: Signal: SignalSlotClass(_POINTER_) signalWithoutParameters ()
ok 21 - cleanupTestCase()
1..21
# tests 21
diff --git a/tests/auto/testlib/selftests/expected_silent.txt b/tests/auto/testlib/selftests/expected_silent.txt
index 127e39a6c1..6c9b71a835 100644
--- a/tests/auto/testlib/selftests/expected_silent.txt
+++ b/tests/auto/testlib/selftests/expected_silent.txt
@@ -5,7 +5,4 @@ FAIL! : tst_Silent::fail() 'false' returned FALSE. (This test should fail)
Loc: [qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp(0)]
XPASS : tst_Silent::xpass() 'true' returned TRUE unexpectedly. (This test should XPASS)
Loc: [qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp(0)]
-QFATAL : tst_Silent::messages() This is a fatal error message that should still appear in silent test output
-FAIL! : tst_Silent::messages() Received a fatal error.
- Loc: [qtbase/tests/auto/testlib/selftests/silent/tst_silent.cpp(0)]
-Totals: 3 passed, 3 failed, 1 skipped, 0 blacklisted, 0ms
+Totals: 5 passed, 2 failed, 1 skipped, 0 blacklisted, 0ms
diff --git a/tests/auto/testlib/selftests/expected_silent_fatal.txt b/tests/auto/testlib/selftests/expected_silent_fatal.txt
new file mode 100644
index 0000000000..fb00066c13
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_silent_fatal.txt
@@ -0,0 +1,5 @@
+Testing tst_SilentFatal
+QFATAL : tst_SilentFatal::fatalmessages() This is a fatal error message that should still appear in silent test output
+FAIL! : tst_SilentFatal::fatalmessages() Received a fatal error.
+ Loc: [qtbase/tests/auto/testlib/selftests/silent_fatal/tst_silent_fatal.cpp(0)]
+Totals: 1 passed, 1 failed, 0 skipped, 0 blacklisted, 0ms
diff --git a/tests/auto/testlib/selftests/expected_skip.tap b/tests/auto/testlib/selftests/expected_skip.tap
index adf9f692a9..9595e0eb05 100644
--- a/tests/auto/testlib/selftests/expected_skip.tap
+++ b/tests/auto/testlib/selftests/expected_skip.tap
@@ -4,8 +4,13 @@ ok 1 - initTestCase()
ok 2 - test() # SKIP skipping all
ok 3 - emptytest() # SKIP skipping all
ok 4 - singleSkip(local 1) # SKIP skipping one
-# this line should only be reached once (true)
ok 5 - singleSkip(local 2)
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: this line should only be reached once (true)
+ ...
ok 6 - cleanupTestCase()
1..6
# tests 6
diff --git a/tests/auto/testlib/selftests/expected_skipblacklisted.junitxml b/tests/auto/testlib/selftests/expected_skipblacklisted.junitxml
new file mode 100644
index 0000000000..308a4ea999
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipblacklisted.junitxml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite name="tst_SkipBlacklisted" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="5" failures="0" errors="0" skipped="3" time="@TEST_DURATION@">
+ <properties>
+ <property name="QTestVersion" value="@INSERT_QT_VERSION_HERE@"/>
+ <property name="QtVersion" value="@INSERT_QT_VERSION_HERE@"/>
+ <property name="QtBuild" value=""/>
+ </properties>
+ <testcase name="initTestCase" classname="tst_SkipBlacklisted" time="@TEST_DURATION@"/>
+ <testcase name="pass" classname="tst_SkipBlacklisted" time="@TEST_DURATION@"/>
+ <testcase name="blacklisted" classname="tst_SkipBlacklisted" time="@TEST_DURATION@">
+ <skipped message="Skipping blacklisted test since &#x002D;skipblacklisted option is set."/>
+ </testcase>
+ <testcase name="blacklistedData(should pass)" classname="tst_SkipBlacklisted" time="@TEST_DURATION@">
+ <skipped message="Skipping blacklisted test since &#x002D;skipblacklisted option is set."/>
+ <skipped message="Skipping blacklisted test since &#x002D;skipblacklisted option is set."/>
+ </testcase>
+ <testcase name="cleanupTestCase" classname="tst_SkipBlacklisted" time="@TEST_DURATION@"/>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_skipblacklisted.lightxml b/tests/auto/testlib/selftests/expected_skipblacklisted.lightxml
new file mode 100644
index 0000000000..45d3476d6a
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipblacklisted.lightxml
@@ -0,0 +1,36 @@
+ <Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+ </Environment>
+ <TestFunction name="initTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="pass">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="blacklisted">
+ <Incident type="skip" file="" line="0">
+ <Description><![CDATA[Skipping blacklisted test since -skipblacklisted option is set.]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="blacklistedData">
+ <Incident type="skip" file="" line="0">
+ <Description><![CDATA[Skipping blacklisted test since -skipblacklisted option is set.]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[should pass]]></DataTag>
+ </Incident>
+ <Incident type="skip" file="" line="0">
+ <Description><![CDATA[Skipping blacklisted test since -skipblacklisted option is set.]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="cleanupTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_skipblacklisted.tap b/tests/auto/testlib/selftests/expected_skipblacklisted.tap
new file mode 100644
index 0000000000..f71524d85f
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipblacklisted.tap
@@ -0,0 +1,13 @@
+TAP version 13
+# tst_SkipBlacklisted
+ok 1 - initTestCase()
+ok 2 - pass()
+ok 3 - blacklisted() # SKIP Skipping blacklisted test since -skipblacklisted option is set.
+ok 4 - blacklistedData() # SKIP Skipping blacklisted test since -skipblacklisted option is set.
+ok 5 - blacklistedData(should pass)
+ok 6 - blacklistedData() # SKIP Skipping blacklisted test since -skipblacklisted option is set.
+ok 7 - cleanupTestCase()
+1..7
+# tests 7
+# pass 4
+# fail 0
diff --git a/tests/auto/testlib/selftests/expected_skipblacklisted.teamcity b/tests/auto/testlib/selftests/expected_skipblacklisted.teamcity
new file mode 100644
index 0000000000..67a788901a
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipblacklisted.teamcity
@@ -0,0 +1,19 @@
+##teamcity[testSuiteStarted name='tst_SkipBlacklisted' flowId='tst_SkipBlacklisted']
+##teamcity[testStarted name='initTestCase()' flowId='tst_SkipBlacklisted']
+##teamcity[testFinished name='initTestCase()' flowId='tst_SkipBlacklisted']
+##teamcity[testStarted name='pass()' flowId='tst_SkipBlacklisted']
+##teamcity[testFinished name='pass()' flowId='tst_SkipBlacklisted']
+##teamcity[testStarted name='blacklisted()' flowId='tst_SkipBlacklisted']
+##teamcity[testIgnored name='blacklisted()' message='Skipping blacklisted test since -skipblacklisted option is set.' flowId='tst_SkipBlacklisted']
+##teamcity[testFinished name='blacklisted()' flowId='tst_SkipBlacklisted']
+##teamcity[testStarted name='blacklistedData()' flowId='tst_SkipBlacklisted']
+##teamcity[testIgnored name='blacklistedData()' message='Skipping blacklisted test since -skipblacklisted option is set.' flowId='tst_SkipBlacklisted']
+##teamcity[testFinished name='blacklistedData()' flowId='tst_SkipBlacklisted']
+##teamcity[testStarted name='blacklistedData(should pass)' flowId='tst_SkipBlacklisted']
+##teamcity[testFinished name='blacklistedData(should pass)' flowId='tst_SkipBlacklisted']
+##teamcity[testStarted name='blacklistedData()' flowId='tst_SkipBlacklisted']
+##teamcity[testIgnored name='blacklistedData()' message='Skipping blacklisted test since -skipblacklisted option is set.' flowId='tst_SkipBlacklisted']
+##teamcity[testFinished name='blacklistedData()' flowId='tst_SkipBlacklisted']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_SkipBlacklisted']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_SkipBlacklisted']
+##teamcity[testSuiteFinished name='tst_SkipBlacklisted' flowId='tst_SkipBlacklisted']
diff --git a/tests/auto/testlib/selftests/expected_skipblacklisted.txt b/tests/auto/testlib/selftests/expected_skipblacklisted.txt
new file mode 100644
index 0000000000..0e3dfa04e8
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipblacklisted.txt
@@ -0,0 +1,11 @@
+********* Start testing of tst_SkipBlacklisted *********
+Config: Using QtTest library
+PASS : tst_SkipBlacklisted::initTestCase()
+PASS : tst_SkipBlacklisted::pass()
+SKIP : tst_SkipBlacklisted::blacklisted() Skipping blacklisted test since -skipblacklisted option is set.
+SKIP : tst_SkipBlacklisted::blacklistedData() Skipping blacklisted test since -skipblacklisted option is set.
+PASS : tst_SkipBlacklisted::blacklistedData(should pass)
+SKIP : tst_SkipBlacklisted::blacklistedData() Skipping blacklisted test since -skipblacklisted option is set.
+PASS : tst_SkipBlacklisted::cleanupTestCase()
+Totals: 4 passed, 0 failed, 3 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_SkipBlacklisted *********
diff --git a/tests/auto/testlib/selftests/expected_skipblacklisted.xml b/tests/auto/testlib/selftests/expected_skipblacklisted.xml
new file mode 100644
index 0000000000..100fededb3
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipblacklisted.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_SkipBlacklisted">
+ <Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+ </Environment>
+ <TestFunction name="initTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="pass">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="blacklisted">
+ <Incident type="skip" file="" line="0">
+ <Description><![CDATA[Skipping blacklisted test since -skipblacklisted option is set.]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="blacklistedData">
+ <Incident type="skip" file="" line="0">
+ <Description><![CDATA[Skipping blacklisted test since -skipblacklisted option is set.]]></Description>
+ </Incident>
+ <Incident type="pass" file="" line="0">
+ <DataTag><![CDATA[should pass]]></DataTag>
+ </Incident>
+ <Incident type="skip" file="" line="0">
+ <Description><![CDATA[Skipping blacklisted test since -skipblacklisted option is set.]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="cleanupTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.junitxml b/tests/auto/testlib/selftests/expected_skipcleanup.junitxml
index 88a5c250ff..5ef20a0b2e 100644
--- a/tests/auto/testlib/selftests/expected_skipcleanup.junitxml
+++ b/tests/auto/testlib/selftests/expected_skipcleanup.junitxml
@@ -6,8 +6,8 @@
<property name="QtBuild" value=""/>
</properties>
<testcase name="initTestCase" classname="tst_SkipCleanup" time="@TEST_DURATION@"/>
- <testcase name="aTestFunction" classname="tst_SkipCleanup" time="@TEST_DURATION@"/>
- <testcase name="cleanupTestCase" classname="tst_SkipCleanup" time="@TEST_DURATION@">
- <skipped message="Skip inside cleanupTestCase."/>
+ <testcase name="aTestFunction" classname="tst_SkipCleanup" time="@TEST_DURATION@">
+ <skipped message="Skip inside cleanup."/>
</testcase>
+ <testcase name="cleanupTestCase" classname="tst_SkipCleanup" time="@TEST_DURATION@"/>
</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.lightxml b/tests/auto/testlib/selftests/expected_skipcleanup.lightxml
index f2f8330bbc..c97f125227 100644
--- a/tests/auto/testlib/selftests/expected_skipcleanup.lightxml
+++ b/tests/auto/testlib/selftests/expected_skipcleanup.lightxml
@@ -8,13 +8,13 @@
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="aTestFunction">
- <Incident type="pass" file="" line="0" />
+ <Incident type="skip" file="qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp" line="0">
+ <Description><![CDATA[Skip inside cleanup.]]></Description>
+ </Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
- <Incident type="skip" file="qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp" line="0">
- <Description><![CDATA[Skip inside cleanupTestCase.]]></Description>
- </Incident>
+ <Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.tap b/tests/auto/testlib/selftests/expected_skipcleanup.tap
index 4a3f8f852c..36d979a84a 100644
--- a/tests/auto/testlib/selftests/expected_skipcleanup.tap
+++ b/tests/auto/testlib/selftests/expected_skipcleanup.tap
@@ -1,8 +1,8 @@
TAP version 13
# tst_SkipCleanup
ok 1 - initTestCase()
-ok 2 - aTestFunction()
-ok 3 - cleanupTestCase() # SKIP Skip inside cleanupTestCase.
+ok 2 - aTestFunction() # SKIP Skip inside cleanup.
+ok 3 - cleanupTestCase()
1..3
# tests 3
# pass 2
diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.teamcity b/tests/auto/testlib/selftests/expected_skipcleanup.teamcity
index bdc3c0f70a..b5c3709193 100644
--- a/tests/auto/testlib/selftests/expected_skipcleanup.teamcity
+++ b/tests/auto/testlib/selftests/expected_skipcleanup.teamcity
@@ -2,8 +2,8 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_SkipCleanup']
##teamcity[testFinished name='initTestCase()' flowId='tst_SkipCleanup']
##teamcity[testStarted name='aTestFunction()' flowId='tst_SkipCleanup']
+##teamcity[testIgnored name='aTestFunction()' message='Skip inside cleanup. |[Loc: qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp(0)|]' flowId='tst_SkipCleanup']
##teamcity[testFinished name='aTestFunction()' flowId='tst_SkipCleanup']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_SkipCleanup']
-##teamcity[testIgnored name='cleanupTestCase()' message='Skip inside cleanupTestCase. |[Loc: qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp(0)|]' flowId='tst_SkipCleanup']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_SkipCleanup']
##teamcity[testSuiteFinished name='tst_SkipCleanup' flowId='tst_SkipCleanup']
diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.txt b/tests/auto/testlib/selftests/expected_skipcleanup.txt
index 987e2b9a14..c1bd95e5a9 100644
--- a/tests/auto/testlib/selftests/expected_skipcleanup.txt
+++ b/tests/auto/testlib/selftests/expected_skipcleanup.txt
@@ -1,8 +1,8 @@
********* Start testing of tst_SkipCleanup *********
Config: Using QtTest library
PASS : tst_SkipCleanup::initTestCase()
-PASS : tst_SkipCleanup::aTestFunction()
-SKIP : tst_SkipCleanup::cleanupTestCase() Skip inside cleanupTestCase.
+SKIP : tst_SkipCleanup::aTestFunction() Skip inside cleanup.
Loc: [qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp(0)]
+PASS : tst_SkipCleanup::cleanupTestCase()
Totals: 2 passed, 0 failed, 1 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_SkipCleanup *********
diff --git a/tests/auto/testlib/selftests/expected_skipcleanup.xml b/tests/auto/testlib/selftests/expected_skipcleanup.xml
index 77bf028b12..d839a69d8f 100644
--- a/tests/auto/testlib/selftests/expected_skipcleanup.xml
+++ b/tests/auto/testlib/selftests/expected_skipcleanup.xml
@@ -10,13 +10,13 @@
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="aTestFunction">
- <Incident type="pass" file="" line="0" />
+ <Incident type="skip" file="qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp" line="0">
+ <Description><![CDATA[Skip inside cleanup.]]></Description>
+ </Incident>
<Duration msecs="0"/>
</TestFunction>
<TestFunction name="cleanupTestCase">
- <Incident type="skip" file="qtbase/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp" line="0">
- <Description><![CDATA[Skip inside cleanupTestCase.]]></Description>
- </Incident>
+ <Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
</TestFunction>
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_skipcleanuptestcase.junitxml b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.junitxml
new file mode 100644
index 0000000000..6e1e10b2b2
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.junitxml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<testsuite name="tst_SkipCleanupTestCase" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="3" failures="0" errors="0" skipped="1" time="@TEST_DURATION@">
+ <properties>
+ <property name="QTestVersion" value="@INSERT_QT_VERSION_HERE@"/>
+ <property name="QtVersion" value="@INSERT_QT_VERSION_HERE@"/>
+ <property name="QtBuild" value=""/>
+ </properties>
+ <testcase name="initTestCase" classname="tst_SkipCleanupTestCase" time="@TEST_DURATION@"/>
+ <testcase name="aTestFunction" classname="tst_SkipCleanupTestCase" time="@TEST_DURATION@"/>
+ <testcase name="cleanupTestCase" classname="tst_SkipCleanupTestCase" time="@TEST_DURATION@">
+ <skipped message="Skip inside cleanupTestCase."/>
+ </testcase>
+</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_skipcleanuptestcase.lightxml b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.lightxml
new file mode 100644
index 0000000000..29fa9ff602
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.lightxml
@@ -0,0 +1,20 @@
+ <Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+ </Environment>
+ <TestFunction name="initTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="aTestFunction">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="cleanupTestCase">
+ <Incident type="skip" file="qtbase/tests/auto/testlib/selftests/skipcleanuptestcase/tst_skipcleanuptestcase.cpp" line="0">
+ <Description><![CDATA[Skip inside cleanupTestCase.]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_skipcleanuptestcase.tap b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.tap
new file mode 100644
index 0000000000..ee3d720d22
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.tap
@@ -0,0 +1,9 @@
+TAP version 13
+# tst_SkipCleanupTestCase
+ok 1 - initTestCase()
+ok 2 - aTestFunction()
+ok 3 - cleanupTestCase() # SKIP Skip inside cleanupTestCase.
+1..3
+# tests 3
+# pass 2
+# fail 0
diff --git a/tests/auto/testlib/selftests/expected_skipcleanuptestcase.teamcity b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.teamcity
new file mode 100644
index 0000000000..6a7e6bc379
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.teamcity
@@ -0,0 +1,9 @@
+##teamcity[testSuiteStarted name='tst_SkipCleanupTestCase' flowId='tst_SkipCleanupTestCase']
+##teamcity[testStarted name='initTestCase()' flowId='tst_SkipCleanupTestCase']
+##teamcity[testFinished name='initTestCase()' flowId='tst_SkipCleanupTestCase']
+##teamcity[testStarted name='aTestFunction()' flowId='tst_SkipCleanupTestCase']
+##teamcity[testFinished name='aTestFunction()' flowId='tst_SkipCleanupTestCase']
+##teamcity[testStarted name='cleanupTestCase()' flowId='tst_SkipCleanupTestCase']
+##teamcity[testIgnored name='cleanupTestCase()' message='Skip inside cleanupTestCase. |[Loc: qtbase/tests/auto/testlib/selftests/skipcleanuptestcase/tst_skipcleanuptestcase.cpp(0)|]' flowId='tst_SkipCleanupTestCase']
+##teamcity[testFinished name='cleanupTestCase()' flowId='tst_SkipCleanupTestCase']
+##teamcity[testSuiteFinished name='tst_SkipCleanupTestCase' flowId='tst_SkipCleanupTestCase']
diff --git a/tests/auto/testlib/selftests/expected_skipcleanuptestcase.txt b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.txt
new file mode 100644
index 0000000000..4dc50dca7f
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.txt
@@ -0,0 +1,8 @@
+********* Start testing of tst_SkipCleanupTestCase *********
+Config: Using QtTest library
+PASS : tst_SkipCleanupTestCase::initTestCase()
+PASS : tst_SkipCleanupTestCase::aTestFunction()
+SKIP : tst_SkipCleanupTestCase::cleanupTestCase() Skip inside cleanupTestCase.
+ Loc: [qtbase/tests/auto/testlib/selftests/skipcleanuptestcase/tst_skipcleanuptestcase.cpp(0)]
+Totals: 2 passed, 0 failed, 1 skipped, 0 blacklisted, 0ms
+********* Finished testing of tst_SkipCleanupTestCase *********
diff --git a/tests/auto/testlib/selftests/expected_skipcleanuptestcase.xml b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.xml
new file mode 100644
index 0000000000..442d1a69b7
--- /dev/null
+++ b/tests/auto/testlib/selftests/expected_skipcleanuptestcase.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<TestCase name="tst_SkipCleanupTestCase">
+ <Environment>
+ <QtVersion>@INSERT_QT_VERSION_HERE@</QtVersion>
+ <QtBuild/>
+ <QTestVersion>@INSERT_QT_VERSION_HERE@</QTestVersion>
+ </Environment>
+ <TestFunction name="initTestCase">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="aTestFunction">
+ <Incident type="pass" file="" line="0" />
+ <Duration msecs="0"/>
+ </TestFunction>
+ <TestFunction name="cleanupTestCase">
+ <Incident type="skip" file="qtbase/tests/auto/testlib/selftests/skipcleanuptestcase/tst_skipcleanuptestcase.cpp" line="0">
+ <Description><![CDATA[Skip inside cleanupTestCase.]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
+ <Duration msecs="0"/>
+</TestCase>
diff --git a/tests/auto/testlib/selftests/expected_strcmp.tap b/tests/auto/testlib/selftests/expected_strcmp.tap
index 0ff00d9b67..8f58ec8d24 100644
--- a/tests/auto/testlib/selftests/expected_strcmp.tap
+++ b/tests/auto/testlib/selftests/expected_strcmp.tap
@@ -2,12 +2,6 @@ TAP version 13
# tst_StrCmp
ok 1 - initTestCase()
ok 2 - compareCharStars()
-not ok 3 - compareByteArray() # TODO Next test should fail
- ---
- at: tst_StrCmp::compareByteArray() (qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp:0)
- file: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp
- line: 0
- ...
not ok 3 - compareByteArray()
---
type: QCOMPARE
@@ -19,6 +13,23 @@ not ok 3 - compareByteArray()
at: tst_StrCmp::compareByteArray() (qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp:0)
file: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp
line: 0
+ extensions:
+ messages:
+ - severity: xfail
+ message: Next test should fail
+ at: tst_StrCmp::compareByteArray() (qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp
+ line: 0
+ - severity: xfail
+ message: Next test should fail
+ at: tst_StrCmp::compareByteArray() (qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp
+ line: 0
+ - severity: xfail
+ message: Next test should fail
+ at: tst_StrCmp::compareByteArray() (qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp
+ line: 0
...
not ok 4 - failByteArray()
---
diff --git a/tests/auto/testlib/selftests/expected_subtest.tap b/tests/auto/testlib/selftests/expected_subtest.tap
index ee69487233..3430e2eebc 100644
--- a/tests/auto/testlib/selftests/expected_subtest.tap
+++ b/tests/auto/testlib/selftests/expected_subtest.tap
@@ -1,37 +1,93 @@
TAP version 13
# tst_Subtest
-# initTestCase initTestCase (null)
ok 1 - initTestCase()
-# init test1 (null)
-# test1 test1 (null)
-# cleanup test1 (null)
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: initTestCase initTestCase (null)
+ ...
ok 2 - test1()
-# test2_data test2 (null)
-# test2_data end
-# init test2 data0
-# test2 test2 data0
-# test2 end
-# cleanup test2 data0
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: init test1 (null)
+ - severity: debug
+ message: test1 test1 (null)
+ - severity: debug
+ message: cleanup test1 (null)
+ ...
+ok 2 - test2() # Data prepared
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: test2_data test2 (null)
+ - severity: debug
+ message: test2_data end
+ ...
ok 3 - test2(data0)
-# init test2 data1
-# test2 test2 data1
-# test2 end
-# cleanup test2 data1
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: init test2 data0
+ - severity: debug
+ message: test2 test2 data0
+ - severity: debug
+ message: test2 end
+ - severity: debug
+ message: cleanup test2 data0
+ ...
ok 4 - test2(data1)
-# init test2 data2
-# test2 test2 data2
-# test2 end
-# cleanup test2 data2
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: init test2 data1
+ - severity: debug
+ message: test2 test2 data1
+ - severity: debug
+ message: test2 end
+ - severity: debug
+ message: cleanup test2 data1
+ ...
ok 5 - test2(data2)
-# test3_data test3 (null)
-# test3_data end
-# init test3 data0
-# test3 test3 data0
-# test3 end
-# cleanup test3 data0
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: init test2 data2
+ - severity: debug
+ message: test2 test2 data2
+ - severity: debug
+ message: test2 end
+ - severity: debug
+ message: cleanup test2 data2
+ ...
+ok 5 - test3() # Data prepared
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: test3_data test3 (null)
+ - severity: debug
+ message: test3_data end
+ ...
ok 6 - test3(data0)
-# init test3 data1
-# test3 test3 data1
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: init test3 data0
+ - severity: debug
+ message: test3 test3 data0
+ - severity: debug
+ message: test3 end
+ - severity: debug
+ message: cleanup test3 data0
+ ...
not ok 7 - test3(data1)
---
type: QCOMPARE
@@ -43,10 +99,14 @@ not ok 7 - test3(data1)
at: tst_Subtest::test3() (qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp:0)
file: qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp
line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: init test3 data1
+ - severity: debug
+ message: test3 test3 data1
...
-# cleanup test3 data1
-# init test3 data2
-# test3 test3 data2
+# debug: cleanup test3 data1
not ok 8 - test3(data2)
---
type: QCOMPARE
@@ -58,15 +118,24 @@ not ok 8 - test3(data2)
at: tst_Subtest::test3() (qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp:0)
file: qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp
line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: init test3 data2
+ - severity: debug
+ message: test3 test3 data2
...
-# cleanup test3 data2
-# init multiFail (null)
+# debug: cleanup test3 data2
not ok 9 - multiFail()
---
# This failure message should be repeated ten times
at: tst_Subtest::multiFail() (qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp:0)
file: qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp
line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: init multiFail (null)
...
not ok 9 - multiFail()
---
@@ -138,9 +207,17 @@ not ok 9 - multiFail()
file: qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp
line: 0
...
-# cleanup multiFail (null)
-# init multiSkip (null)
+# debug: cleanup multiFail (null)
ok 10 - multiSkip() # SKIP This skip should be repeated ten times
+ ---
+ at: tst_Subtest::multiSkip() (qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/subtest/tst_subtest.cpp
+ line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: init multiSkip (null)
+ ...
ok 10 - multiSkip() # SKIP This skip should be repeated ten times
ok 10 - multiSkip() # SKIP This skip should be repeated ten times
ok 10 - multiSkip() # SKIP This skip should be repeated ten times
@@ -151,9 +228,14 @@ ok 10 - multiSkip() # SKIP This skip should be repeated ten times
ok 10 - multiSkip() # SKIP This skip should be repeated ten times
ok 10 - multiSkip() # SKIP This skip should be repeated ten times
ok 10 - multiSkip() # SKIP But this test should only contribute one to the skip count
-# cleanup multiSkip (null)
-# cleanupTestCase cleanupTestCase (null)
+# debug: cleanup multiSkip (null)
ok 11 - cleanupTestCase()
+ ---
+ extensions:
+ messages:
+ - severity: debug
+ message: cleanupTestCase cleanupTestCase (null)
+ ...
1..11
# tests 11
# pass 7
diff --git a/tests/auto/testlib/selftests/expected_testlib.junitxml b/tests/auto/testlib/selftests/expected_testlib.junitxml
index 8e5bd0e37e..f5d3a94126 100644
--- a/tests/auto/testlib/selftests/expected_testlib.junitxml
+++ b/tests/auto/testlib/selftests/expected_testlib.junitxml
@@ -7,7 +7,10 @@
</properties>
<testcase name="initTestCase" classname="tst_TestLib" time="@TEST_DURATION@"/>
<testcase name="basics" classname="tst_TestLib" time="@TEST_DURATION@">
- <failure type="fail" message="Compared QObject pointers are not the same"/>
+ <failure type="fail" message="Compared QObject pointers are not the same">
+ <![CDATA[ Actual (QTest::testObject()): tst_TestLib/"TestObject"
+ Expected (nullptr) : (nullptr)]]>
+ </failure>
</testcase>
<testcase name="delays" classname="tst_TestLib" time="@TEST_DURATION@"/>
<testcase name="reals(zero)" classname="tst_TestLib" time="@TEST_DURATION@"/>
diff --git a/tests/auto/testlib/selftests/expected_testlib.lightxml b/tests/auto/testlib/selftests/expected_testlib.lightxml
index c4b7924e38..cd0f96d6d4 100644
--- a/tests/auto/testlib/selftests/expected_testlib.lightxml
+++ b/tests/auto/testlib/selftests/expected_testlib.lightxml
@@ -9,7 +9,9 @@
</TestFunction>
<TestFunction name="basics">
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/testlib/tst_testlib.cpp" line="0">
- <Description><![CDATA[Compared QObject pointers are not the same]]></Description>
+ <Description><![CDATA[Compared QObject pointers are not the same
+ Actual (QTest::testObject()): tst_TestLib/"TestObject"
+ Expected (nullptr) : (nullptr)]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
diff --git a/tests/auto/testlib/selftests/expected_testlib.tap b/tests/auto/testlib/selftests/expected_testlib.tap
index 020006904f..4a6056bc77 100644
--- a/tests/auto/testlib/selftests/expected_testlib.tap
+++ b/tests/auto/testlib/selftests/expected_testlib.tap
@@ -3,7 +3,12 @@ TAP version 13
ok 1 - initTestCase()
not ok 2 - basics()
---
- # Compared QObject pointers are not the same
+ type: QCOMPARE
+ message: Compared QObject pointers are not the same
+ wanted: (nullptr) (nullptr)
+ found: tst_TestLib/"TestObject" (QTest::testObject())
+ expected: (nullptr) (nullptr)
+ actual: tst_TestLib/"TestObject" (QTest::testObject())
at: tst_TestLib::basics() (qtbase/tests/auto/testlib/selftests/testlib/tst_testlib.cpp:0)
file: qtbase/tests/auto/testlib/selftests/testlib/tst_testlib.cpp
line: 0
diff --git a/tests/auto/testlib/selftests/expected_testlib.teamcity b/tests/auto/testlib/selftests/expected_testlib.teamcity
index b72dfde420..279ef03f3f 100644
--- a/tests/auto/testlib/selftests/expected_testlib.teamcity
+++ b/tests/auto/testlib/selftests/expected_testlib.teamcity
@@ -2,7 +2,7 @@
##teamcity[testStarted name='initTestCase()' flowId='tst_TestLib']
##teamcity[testFinished name='initTestCase()' flowId='tst_TestLib']
##teamcity[testStarted name='basics()' flowId='tst_TestLib']
-##teamcity[testFailed name='basics()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/testlib/tst_testlib.cpp(0)|]' details='Compared QObject pointers are not the same' flowId='tst_TestLib']
+##teamcity[testFailed name='basics()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/testlib/tst_testlib.cpp(0)|]' details='Compared QObject pointers are not the same|n Actual (QTest::testObject()): tst_TestLib/"TestObject"|n Expected (nullptr) : (nullptr)' flowId='tst_TestLib']
##teamcity[testFinished name='basics()' flowId='tst_TestLib']
##teamcity[testStarted name='delays()' flowId='tst_TestLib']
##teamcity[testFinished name='delays()' flowId='tst_TestLib']
diff --git a/tests/auto/testlib/selftests/expected_testlib.txt b/tests/auto/testlib/selftests/expected_testlib.txt
index b8437fa8b4..a0b8a275d0 100644
--- a/tests/auto/testlib/selftests/expected_testlib.txt
+++ b/tests/auto/testlib/selftests/expected_testlib.txt
@@ -2,6 +2,8 @@
Config: Using QtTest library
PASS : tst_TestLib::initTestCase()
FAIL! : tst_TestLib::basics() Compared QObject pointers are not the same
+ Actual (QTest::testObject()): tst_TestLib/"TestObject"
+ Expected (nullptr) : (nullptr)
Loc: [qtbase/tests/auto/testlib/selftests/testlib/tst_testlib.cpp(0)]
PASS : tst_TestLib::delays()
PASS : tst_TestLib::reals(zero)
diff --git a/tests/auto/testlib/selftests/expected_testlib.xml b/tests/auto/testlib/selftests/expected_testlib.xml
index b5e1c078f1..241fd3f8d1 100644
--- a/tests/auto/testlib/selftests/expected_testlib.xml
+++ b/tests/auto/testlib/selftests/expected_testlib.xml
@@ -11,7 +11,9 @@
</TestFunction>
<TestFunction name="basics">
<Incident type="fail" file="qtbase/tests/auto/testlib/selftests/testlib/tst_testlib.cpp" line="0">
- <Description><![CDATA[Compared QObject pointers are not the same]]></Description>
+ <Description><![CDATA[Compared QObject pointers are not the same
+ Actual (QTest::testObject()): tst_TestLib/"TestObject"
+ Expected (nullptr) : (nullptr)]]></Description>
</Incident>
<Duration msecs="0"/>
</TestFunction>
diff --git a/tests/auto/testlib/selftests/expected_verbose1.tap b/tests/auto/testlib/selftests/expected_verbose1.tap
index a5ef13a973..63f1c83fb1 100644
--- a/tests/auto/testlib/selftests/expected_verbose1.tap
+++ b/tests/auto/testlib/selftests/expected_verbose1.tap
@@ -95,21 +95,32 @@ not ok 21 - testFailInInit(fail)
...
ok 22 - testFailInInit(after)
ok 23 - testFailInCleanup(before)
-# This test function should execute and then QFAIL in cleanup()
not ok 24 - testFailInCleanup(fail)
---
# Fail in cleanup()
at: tst_Counting::testFailInCleanup() (qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp:0)
file: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp
line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: This test function should execute and then QFAIL in cleanup()
...
ok 25 - testFailInCleanup(after)
ok 26 - testSkipInInit(before)
ok 27 - testSkipInInit(skip) # SKIP Skip in init()
ok 28 - testSkipInInit(after)
ok 29 - testSkipInCleanup(before)
-# This test function should execute and then QSKIP in cleanup()
ok 30 - testSkipInCleanup(skip) # SKIP Skip in cleanup()
+ ---
+ at: tst_Counting::testSkipInCleanup() (qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp
+ line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: This test function should execute and then QSKIP in cleanup()
+ ...
ok 31 - testSkipInCleanup(after)
ok 32 - cleanupTestCase()
1..32
diff --git a/tests/auto/testlib/selftests/expected_verbose2.tap b/tests/auto/testlib/selftests/expected_verbose2.tap
index 828e02b13e..8f7d4fac69 100644
--- a/tests/auto/testlib/selftests/expected_verbose2.tap
+++ b/tests/auto/testlib/selftests/expected_verbose2.tap
@@ -1,21 +1,21 @@
TAP version 13
# tst_Counting
ok 1 - initTestCase()
-# QVERIFY(true)
-# QCOMPARE(2 + 1, 3)
ok 2 - testPassPass(row 1)
-# QVERIFY(true)
-# QCOMPARE(2 + 1, 3)
+ # inform: QVERIFY(true)
+ # inform: QCOMPARE(2 + 1, 3)
ok 3 - testPassPass(row 2)
-# QVERIFY(true)
-# QCOMPARE(2 + 1, 3)
+ # inform: QVERIFY(true)
+ # inform: QCOMPARE(2 + 1, 3)
ok 4 - testPassSkip(row 1)
+ # inform: QVERIFY(true)
+ # inform: QCOMPARE(2 + 1, 3)
ok 5 - testPassSkip(row 2) # SKIP Skipping
-# QVERIFY(true)
-# QCOMPARE(2 + 1, 3)
ok 6 - testPassFail(row 1)
-# QVERIFY(false)
+ # inform: QVERIFY(true)
+ # inform: QCOMPARE(2 + 1, 3)
not ok 7 - testPassFail(row 2)
+ # inform: QVERIFY(false)
---
type: QVERIFY
message: Verification failed
@@ -28,14 +28,14 @@ not ok 7 - testPassFail(row 2)
line: 0
...
ok 8 - testSkipPass(row 1) # SKIP Skipping
-# QVERIFY(true)
-# QCOMPARE(2 + 1, 3)
ok 9 - testSkipPass(row 2)
+ # inform: QVERIFY(true)
+ # inform: QCOMPARE(2 + 1, 3)
ok 10 - testSkipSkip(row 1) # SKIP Skipping
ok 11 - testSkipSkip(row 2) # SKIP Skipping
ok 12 - testSkipFail(row 1) # SKIP Skipping
-# QVERIFY(false)
not ok 13 - testSkipFail(row 2)
+ # inform: QVERIFY(false)
---
type: QVERIFY
message: Verification failed
@@ -47,8 +47,8 @@ not ok 13 - testSkipFail(row 2)
file: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp
line: 0
...
-# QVERIFY(false)
not ok 14 - testFailPass(row 1)
+ # inform: QVERIFY(false)
---
type: QVERIFY
message: Verification failed
@@ -60,11 +60,11 @@ not ok 14 - testFailPass(row 1)
file: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp
line: 0
...
-# QVERIFY(true)
-# QCOMPARE(2 + 1, 3)
ok 15 - testFailPass(row 2)
-# QVERIFY(false)
+ # inform: QVERIFY(true)
+ # inform: QCOMPARE(2 + 1, 3)
not ok 16 - testFailSkip(row 1)
+ # inform: QVERIFY(false)
---
type: QVERIFY
message: Verification failed
@@ -77,8 +77,8 @@ not ok 16 - testFailSkip(row 1)
line: 0
...
ok 17 - testFailSkip(row 2) # SKIP Skipping
-# QVERIFY(false)
not ok 18 - testFailFail(row 1)
+ # inform: QVERIFY(false)
---
type: QVERIFY
message: Verification failed
@@ -90,8 +90,8 @@ not ok 18 - testFailFail(row 1)
file: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp
line: 0
...
-# QVERIFY(false)
not ok 19 - testFailFail(row 2)
+ # inform: QVERIFY(false)
---
type: QVERIFY
message: Verification failed
@@ -113,21 +113,32 @@ not ok 21 - testFailInInit(fail)
...
ok 22 - testFailInInit(after)
ok 23 - testFailInCleanup(before)
-# This test function should execute and then QFAIL in cleanup()
not ok 24 - testFailInCleanup(fail)
---
# Fail in cleanup()
at: tst_Counting::testFailInCleanup() (qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp:0)
file: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp
line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: This test function should execute and then QFAIL in cleanup()
...
ok 25 - testFailInCleanup(after)
ok 26 - testSkipInInit(before)
ok 27 - testSkipInInit(skip) # SKIP Skip in init()
ok 28 - testSkipInInit(after)
ok 29 - testSkipInCleanup(before)
-# This test function should execute and then QSKIP in cleanup()
ok 30 - testSkipInCleanup(skip) # SKIP Skip in cleanup()
+ ---
+ at: tst_Counting::testSkipInCleanup() (qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/counting/tst_counting.cpp
+ line: 0
+ extensions:
+ messages:
+ - severity: debug
+ message: This test function should execute and then QSKIP in cleanup()
+ ...
ok 31 - testSkipInCleanup(after)
ok 32 - cleanupTestCase()
1..32
diff --git a/tests/auto/testlib/selftests/expected_warnings.junitxml b/tests/auto/testlib/selftests/expected_warnings.junitxml
index 1799be8279..4fa8c88622 100644
--- a/tests/auto/testlib/selftests/expected_warnings.junitxml
+++ b/tests/auto/testlib/selftests/expected_warnings.junitxml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
-<testsuite name="tst_Warnings" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="15" failures="10" errors="0" skipped="0" time="@TEST_DURATION@">
+<testsuite name="tst_Warnings" timestamp="@TEST_START_TIME@" hostname="@HOSTNAME@" tests="16" failures="11" errors="0" skipped="0" time="@TEST_DURATION@">
<properties>
<property name="QTestVersion" value="@INSERT_QT_VERSION_HERE@"/>
<property name="QtVersion" value="@INSERT_QT_VERSION_HERE@"/>
@@ -107,5 +107,10 @@
<skipped message="My cabbage! :("/>
</testcase>
<testcase name="testFailOnWarningsAndIgnoreWarnings" classname="tst_Warnings" time="@TEST_DURATION@"/>
+ <testcase name="testFailOnTemporaryObjectDestruction" classname="tst_Warnings" time="@TEST_DURATION@">
+ <failure type="fail" message="Received a warning that resulted in a failure:">
+ <![CDATA[Running low on toothpaste!]]>
+ </failure>
+ </testcase>
<testcase name="cleanupTestCase" classname="tst_Warnings" time="@TEST_DURATION@"/>
</testsuite>
diff --git a/tests/auto/testlib/selftests/expected_warnings.lightxml b/tests/auto/testlib/selftests/expected_warnings.lightxml
index 37070cad00..50b6c4bdb6 100644
--- a/tests/auto/testlib/selftests/expected_warnings.lightxml
+++ b/tests/auto/testlib/selftests/expected_warnings.lightxml
@@ -201,6 +201,13 @@ Ran out of cabbage!]]></Description>
<Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
</TestFunction>
+ <TestFunction name="testFailOnTemporaryObjectDestruction">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp" line="0">
+ <Description><![CDATA[Received a warning that resulted in a failure:
+Running low on toothpaste!]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_warnings.tap b/tests/auto/testlib/selftests/expected_warnings.tap
index 161aa6db2b..2667574064 100644
--- a/tests/auto/testlib/selftests/expected_warnings.tap
+++ b/tests/auto/testlib/selftests/expected_warnings.tap
@@ -1,41 +1,54 @@
TAP version 13
# tst_Warnings
ok 1 - initTestCase()
-# Warning
-# Warning
-# Debug
-# Debug
-# Info
-# Info
-# Baba
-# Baba
-# Bubublabla
-# Babablabla
ok 2 - testWarnings()
-# Did not receive message: "Warning0"
-# Did not receive message: "Warning1"
+ ---
+ extensions:
+ messages:
+ - severity: warning
+ message: Warning
+ - severity: warning
+ message: Warning
+ - severity: debug
+ message: Debug
+ - severity: debug
+ message: Debug
+ - severity: info
+ message: Info
+ - severity: info
+ message: Info
+ - severity: debug
+ message: Baba
+ - severity: debug
+ message: Baba
+ - severity: debug
+ message: Bubublabla
+ - severity: warning
+ message: Babablabla
+ ...
not ok 3 - testMissingWarnings()
+ # inform: Did not receive message: "Warning0"
+ # inform: Did not receive message: "Warning1"
---
# Not all expected messages were received
...
-# Did not receive any message matching: "Warning\s\d"
not ok 4 - testMissingWarningsRegularExpression()
+ # inform: Did not receive any message matching: "Warning\s\d"
---
# Not all expected messages were received
...
-# Did not receive message: "Warning0"
-# Did not receive message: "Warning1"
not ok 5 - testMissingWarningsWithData(first row)
+ # inform: Did not receive message: "Warning0"
+ # inform: Did not receive message: "Warning1"
---
# Not all expected messages were received
...
-# Did not receive message: "Warning0"
-# Did not receive message: "Warning1"
not ok 6 - testMissingWarningsWithData(second row)
+ # inform: Did not receive message: "Warning0"
+ # inform: Did not receive message: "Warning1"
---
# Not all expected messages were received
...
-# Ran out of space!
not ok 7 - testFailOnWarnings()
---
# Received a warning that resulted in a failure:
@@ -43,10 +56,14 @@ Ran out of cabbage!
at: tst_Warnings::testFailOnWarnings() (qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp:0)
file: qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp
line: 0
+ extensions:
+ messages:
+ - severity: warning
+ message: Ran out of space!
...
-# Ran out of tortillas!
-# Ran out of oil!
-# nope
+# debug: Ran out of tortillas!
+# info: Ran out of oil!
+# warning: nope
not ok 7 - testFailOnWarnings()
---
# Received a warning that resulted in a failure:
@@ -63,11 +80,16 @@ Running low on toothpaste!
file: qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp
line: 0
...
-# Running low on flour!
-# Running low on toothpaste!
-# Running low on toothpaste!
-# Ran out of muffins!
+# warning: Running low on flour!
+# debug: Running low on toothpaste!
+# info: Running low on toothpaste!
ok 8 - testFailOnWarningsCleared()
+ ---
+ extensions:
+ messages:
+ - severity: warning
+ message: Ran out of muffins!
+ ...
not ok 9 - testFailOnWarningsWithData(warning1)
---
# Received a warning that resulted in a failure:
@@ -76,9 +98,8 @@ warning1
file: qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp
line: 0
...
-# warning2
-# warning3
-# warning1
+# warning: warning2
+# warning: warning3
not ok 10 - testFailOnWarningsWithData(warning2)
---
# Received a warning that resulted in a failure:
@@ -86,10 +107,12 @@ warning2
at: tst_Warnings::testFailOnWarningsWithData() (qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp:0)
file: qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp
line: 0
+ extensions:
+ messages:
+ - severity: warning
+ message: warning1
...
-# warning3
-# warning1
-# warning2
+# warning: warning3
not ok 11 - testFailOnWarningsWithData(warning3)
---
# Received a warning that resulted in a failure:
@@ -97,6 +120,12 @@ warning3
at: tst_Warnings::testFailOnWarningsWithData() (qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp:0)
file: qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp
line: 0
+ extensions:
+ messages:
+ - severity: warning
+ message: warning1
+ - severity: warning
+ message: warning2
...
not ok 12 - testFailOnWarningsFailInHelper()
---
@@ -130,8 +159,16 @@ Ran out of cabbage!
...
ok 13 - testFailOnWarningsThenSkip() # SKIP My cabbage! :(
ok 14 - testFailOnWarningsAndIgnoreWarnings()
-ok 15 - cleanupTestCase()
-1..15
-# tests 15
+not ok 15 - testFailOnTemporaryObjectDestruction()
+ ---
+ # Received a warning that resulted in a failure:
+Running low on toothpaste!
+ at: tst_Warnings::testFailOnTemporaryObjectDestruction() (qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp:0)
+ file: qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp
+ line: 0
+ ...
+ok 16 - cleanupTestCase()
+1..16
+# tests 16
# pass 5
-# fail 10
+# fail 11
diff --git a/tests/auto/testlib/selftests/expected_warnings.teamcity b/tests/auto/testlib/selftests/expected_warnings.teamcity
index 67dd039ebf..a4bd7139a6 100644
--- a/tests/auto/testlib/selftests/expected_warnings.teamcity
+++ b/tests/auto/testlib/selftests/expected_warnings.teamcity
@@ -57,6 +57,9 @@
##teamcity[testFinished name='testFailOnWarningsThenSkip()' flowId='tst_Warnings']
##teamcity[testStarted name='testFailOnWarningsAndIgnoreWarnings()' flowId='tst_Warnings']
##teamcity[testFinished name='testFailOnWarningsAndIgnoreWarnings()' flowId='tst_Warnings']
+##teamcity[testStarted name='testFailOnTemporaryObjectDestruction()' flowId='tst_Warnings']
+##teamcity[testFailed name='testFailOnTemporaryObjectDestruction()' message='Failure! |[Loc: qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp(0)|]' details='Received a warning that resulted in a failure:|nRunning low on toothpaste!' flowId='tst_Warnings']
+##teamcity[testFinished name='testFailOnTemporaryObjectDestruction()' flowId='tst_Warnings']
##teamcity[testStarted name='cleanupTestCase()' flowId='tst_Warnings']
##teamcity[testFinished name='cleanupTestCase()' flowId='tst_Warnings']
##teamcity[testSuiteFinished name='tst_Warnings' flowId='tst_Warnings']
diff --git a/tests/auto/testlib/selftests/expected_warnings.txt b/tests/auto/testlib/selftests/expected_warnings.txt
index 5037eb87df..72e2201f38 100644
--- a/tests/auto/testlib/selftests/expected_warnings.txt
+++ b/tests/auto/testlib/selftests/expected_warnings.txt
@@ -69,6 +69,9 @@ Ran out of cabbage!
SKIP : tst_Warnings::testFailOnWarningsThenSkip() My cabbage! :(
Loc: [qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp(0)]
PASS : tst_Warnings::testFailOnWarningsAndIgnoreWarnings()
+FAIL! : tst_Warnings::testFailOnTemporaryObjectDestruction() Received a warning that resulted in a failure:
+Running low on toothpaste!
+ Loc: [qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp(0)]
PASS : tst_Warnings::cleanupTestCase()
-Totals: 5 passed, 10 failed, 0 skipped, 0 blacklisted, 0ms
+Totals: 5 passed, 11 failed, 0 skipped, 0 blacklisted, 0ms
********* Finished testing of tst_Warnings *********
diff --git a/tests/auto/testlib/selftests/expected_warnings.xml b/tests/auto/testlib/selftests/expected_warnings.xml
index 8da8404a16..808f59768c 100644
--- a/tests/auto/testlib/selftests/expected_warnings.xml
+++ b/tests/auto/testlib/selftests/expected_warnings.xml
@@ -203,6 +203,13 @@ Ran out of cabbage!]]></Description>
<Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
</TestFunction>
+ <TestFunction name="testFailOnTemporaryObjectDestruction">
+ <Incident type="fail" file="qtbase/tests/auto/testlib/selftests/warnings/tst_warnings.cpp" line="0">
+ <Description><![CDATA[Received a warning that resulted in a failure:
+Running low on toothpaste!]]></Description>
+ </Incident>
+ <Duration msecs="0"/>
+ </TestFunction>
<TestFunction name="cleanupTestCase">
<Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_watchdog.tap b/tests/auto/testlib/selftests/expected_watchdog.tap
index 9021c65bf4..b92777dfe5 100644
--- a/tests/auto/testlib/selftests/expected_watchdog.tap
+++ b/tests/auto/testlib/selftests/expected_watchdog.tap
@@ -1,10 +1,13 @@
TAP version 13
# tst_Watchdog
ok 1 - initTestCase()
-# Test function timed out
not ok 2 - delay()
---
# Received a fatal error.
+ extensions:
+ messages:
+ - severity: fatal
+ message: Test function timed out
...
1..2
# tests 2
diff --git a/tests/auto/testlib/selftests/expectfail/CMakeLists.txt b/tests/auto/testlib/selftests/expectfail/CMakeLists.txt
index 84aa93d1ca..d89e03ebef 100644
--- a/tests/auto/testlib/selftests/expectfail/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/expectfail/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from expectfail.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## expectfail Binary:
#####################################################################
qt_internal_add_executable(expectfail
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_expectfail.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(expectfail)
-# special case end
diff --git a/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp b/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
index e978867bbf..2e67012cc8 100644
--- a/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
+++ b/tests/auto/testlib/selftests/expectfail/tst_expectfail.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/extendedcompare/CMakeLists.txt b/tests/auto/testlib/selftests/extendedcompare/CMakeLists.txt
new file mode 100644
index 0000000000..3b2fbb84ec
--- /dev/null
+++ b/tests/auto/testlib/selftests/extendedcompare/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_executable(extendedcompare
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ SOURCES
+ tst_extendedcompare.cpp
+ LIBRARIES
+ Qt::Test
+)
+
+qt_internal_apply_testlib_coverage_options(extendedcompare)
diff --git a/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp b/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
new file mode 100644
index 0000000000..cc75e7f7fb
--- /dev/null
+++ b/tests/auto/testlib/selftests/extendedcompare/tst_extendedcompare.cpp
@@ -0,0 +1,340 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QtCore/qtimer.h>
+
+QT_BEGIN_NAMESPACE
+
+#define COMPARE_WITH_TYPE(Type, arg1, arg2) \
+switch (Type) { \
+ case QTest::ComparisonOperation::CustomCompare: QCOMPARE(arg1, arg2); break; \
+ case QTest::ComparisonOperation::Equal: QCOMPARE_EQ(arg1, arg2); break; \
+ case QTest::ComparisonOperation::NotEqual: QCOMPARE_NE(arg1, arg2); break; \
+ case QTest::ComparisonOperation::LessThan: QCOMPARE_LT(arg1, arg2); break; \
+ case QTest::ComparisonOperation::LessThanOrEqual: QCOMPARE_LE(arg1, arg2); break; \
+ case QTest::ComparisonOperation::GreaterThan: QCOMPARE_GT(arg1, arg2); break; \
+ case QTest::ComparisonOperation::GreaterThanOrEqual: QCOMPARE_GE(arg1, arg2); break; \
+}
+
+class MyClass
+{
+public:
+ MyClass(int v) : m_value(v) {}
+ int value() const { return m_value; }
+ void setValue(int v) { m_value = v; }
+
+ friend bool operator==(const MyClass &lhs, const MyClass &rhs)
+ {
+ return lhs.m_value == rhs.m_value;
+ }
+ friend bool operator!=(const MyClass &lhs, const MyClass &rhs)
+ {
+ return lhs.m_value != rhs.m_value;
+ }
+ friend bool operator<(const MyClass &lhs, const MyClass &rhs)
+ {
+ return lhs.m_value < rhs.m_value;
+ }
+ friend bool operator<=(const MyClass &lhs, const MyClass &rhs)
+ {
+ return lhs.m_value <= rhs.m_value;
+ }
+ friend bool operator>(const MyClass &lhs, const MyClass &rhs)
+ {
+ return lhs.m_value > rhs.m_value;
+ }
+ friend bool operator>=(const MyClass &lhs, const MyClass &rhs)
+ {
+ return lhs.m_value >= rhs.m_value;
+ }
+
+private:
+ int m_value;
+};
+
+// ClassWithPointerGetter returns a pointer, so pointers will be used during
+// comparison. To get consistent results, we need to make sure that the pointer
+// returned by first object is always smaller than the one returned by the
+// second object.
+// We will make sure that the objects are not destroyed until the comparison
+// is finished by checking that the output does not contain 'MyClass(-1)'.
+static MyClass valuesForClassWithPointerGetter[] = { MyClass(-1), MyClass(-1) };
+
+class ClassWithPointerGetter
+{
+ Q_DISABLE_COPY_MOVE(ClassWithPointerGetter)
+public:
+ explicit ClassWithPointerGetter(int index) : m_index(index)
+ {
+ Q_ASSERT(m_index >= 0 && m_index < 2);
+ valuesForClassWithPointerGetter[m_index].setValue(indexToValue(m_index));
+ }
+ ~ClassWithPointerGetter()
+ {
+ valuesForClassWithPointerGetter[m_index].setValue(-1);
+ }
+
+ const MyClass *getValuePointer() const { return &valuesForClassWithPointerGetter[m_index]; }
+
+ static int indexToValue(int index) { return 2 - index; }
+ static int valueToIndex(int value) { return 2 - value; }
+
+private:
+ int m_index;
+};
+
+// An auxiliary function to get a temporary object
+static ClassWithPointerGetter getClassForValue(int val)
+{
+ return ClassWithPointerGetter(val);
+}
+
+// various toString() overloads
+namespace QTest {
+
+char *toString(const int *val)
+{
+ return val ? toString(*val) : toString(nullptr);
+}
+
+char *toString(const MyClass &val)
+{
+ char *msg = new char[128];
+ qsnprintf(msg, 128, "MyClass(%d)", val.value());
+ return msg;
+}
+
+char *toString(const MyClass *val)
+{
+ if (val) {
+ char *msg = new char[128];
+ const auto value = val->value();
+ qsnprintf(msg, 128, "MyClass(%d) on memory address with index %d", value,
+ ClassWithPointerGetter::valueToIndex(value));
+ return msg;
+ }
+ return toString(nullptr);
+}
+
+} // namespace QTest
+
+enum MyUnregisteredEnum { MyUnregisteredEnumValue1, MyUnregisteredEnumValue2 };
+
+class tst_ExtendedCompare : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase_data();
+ void compareInts_data();
+ void compareInts();
+ void compareFloats_data();
+ void compareFloats();
+ void compareDoubles_data();
+ void compareDoubles();
+ void comparePointers_data();
+ void comparePointers();
+ void compareToNullptr_data();
+ void compareToNullptr();
+ void compareUnregistereEnum_data();
+ void compareUnregistereEnum();
+ void compareRegistereEnum_data();
+ void compareRegistereEnum();
+ void compareCustomTypes_data();
+ void compareCustomTypes();
+ void checkComparisonForTemporaryObjects();
+ void checkComparisonWithTimeout();
+};
+
+void tst_ExtendedCompare::initTestCase_data()
+{
+ qRegisterMetaType<QTest::ComparisonOperation>();
+ QTest::addColumn<QTest::ComparisonOperation>("operation");
+ // Do not test plain old QCOMPARE() intentionally, as it's tested in other
+ // places.
+ QTest::newRow("EQ") << QTest::ComparisonOperation::Equal;
+ QTest::newRow("NE") << QTest::ComparisonOperation::NotEqual;
+ QTest::newRow("LT") << QTest::ComparisonOperation::LessThan;
+ QTest::newRow("LE") << QTest::ComparisonOperation::LessThanOrEqual;
+ QTest::newRow("GT") << QTest::ComparisonOperation::GreaterThan;
+ QTest::newRow("GE") << QTest::ComparisonOperation::GreaterThanOrEqual;
+}
+
+template <typename T> static void generateData(T val1, T val2)
+{
+ Q_ASSERT(val1 < val2);
+ QTest::addColumn<T>("lhs");
+ QTest::addColumn<T>("rhs");
+ QTest::newRow("left == right") << val1 << val1;
+ QTest::newRow("left < right") << val1 << val2;
+ QTest::newRow("left > right") << val2 << val1;
+}
+
+template <typename T> static void executeComparison()
+{
+ QFETCH_GLOBAL(QTest::ComparisonOperation, operation);
+ QFETCH(T, lhs);
+ QFETCH(T, rhs);
+ switch (operation) {
+ case QTest::ComparisonOperation::CustomCompare: QCOMPARE(lhs, rhs); break;
+ case QTest::ComparisonOperation::Equal: QCOMPARE_EQ(lhs, rhs); break;
+ case QTest::ComparisonOperation::NotEqual: QCOMPARE_NE(lhs, rhs); break;
+ case QTest::ComparisonOperation::LessThan: QCOMPARE_LT(lhs, rhs); break;
+ case QTest::ComparisonOperation::LessThanOrEqual: QCOMPARE_LE(lhs, rhs); break;
+ case QTest::ComparisonOperation::GreaterThan: QCOMPARE_GT(lhs, rhs); break;
+ case QTest::ComparisonOperation::GreaterThanOrEqual: QCOMPARE_GE(lhs, rhs); break;
+ }
+}
+
+void tst_ExtendedCompare::compareInts_data()
+{
+ generateData(1, 2);
+}
+
+void tst_ExtendedCompare::compareInts()
+{
+ executeComparison<int>();
+}
+
+void tst_ExtendedCompare::compareFloats_data()
+{
+ generateData(1.0f, 1.1f);
+}
+
+void tst_ExtendedCompare::compareFloats()
+{
+ executeComparison<float>();
+}
+
+void tst_ExtendedCompare::compareDoubles_data()
+{
+ generateData(0.0, 0.1);
+}
+
+void tst_ExtendedCompare::compareDoubles()
+{
+ executeComparison<double>();
+}
+
+void tst_ExtendedCompare::comparePointers_data()
+{
+ static constexpr int values[] = { 1, 2 };
+ generateData(&values[0], &values[1]);
+}
+
+void tst_ExtendedCompare::comparePointers()
+{
+ executeComparison<const int *>();
+}
+
+void tst_ExtendedCompare::compareToNullptr_data()
+{
+ static const int *ptr = nullptr;
+ static const int value = 1;
+ generateData(ptr, &value);
+}
+
+void tst_ExtendedCompare::compareToNullptr()
+{
+ executeComparison<const int *>();
+}
+
+void tst_ExtendedCompare::compareUnregistereEnum_data()
+{
+ generateData(MyUnregisteredEnumValue1, MyUnregisteredEnumValue2);
+}
+
+void tst_ExtendedCompare::compareUnregistereEnum()
+{
+ executeComparison<MyUnregisteredEnum>();
+}
+
+void tst_ExtendedCompare::compareRegistereEnum_data()
+{
+ generateData(Qt::Monday, Qt::Sunday);
+}
+
+void tst_ExtendedCompare::compareRegistereEnum()
+{
+ executeComparison<Qt::DayOfWeek>();
+}
+
+void tst_ExtendedCompare::compareCustomTypes_data()
+{
+ static const MyClass val1(1);
+ static const MyClass val2(2);
+ generateData(val1, val2);
+}
+
+void tst_ExtendedCompare::compareCustomTypes()
+{
+ executeComparison<MyClass>();
+}
+
+void tst_ExtendedCompare::checkComparisonForTemporaryObjects()
+{
+ // This test checks that temporary objects live until the end of
+ // comparison.
+
+ QFETCH_GLOBAL(QTest::ComparisonOperation, operation);
+ COMPARE_WITH_TYPE(operation, getClassForValue(0).getValuePointer(),
+ getClassForValue(1).getValuePointer());
+}
+
+class ClassWithDeferredSetter : public MyClass
+{
+public:
+ ClassWithDeferredSetter(int value) : MyClass(value) {}
+
+ void setValueDeferred(int value)
+ {
+ QTimer::singleShot(100, [this, value] { setValue(value); });
+ }
+};
+
+namespace QTest {
+
+char *toString(const ClassWithDeferredSetter &val)
+{
+ char *msg = new char[128];
+ qsnprintf(msg, 128, "ClassWithDeferredSetter(%d)", val.value());
+ return msg;
+}
+
+} // namespace QTest
+
+void tst_ExtendedCompare::checkComparisonWithTimeout()
+{
+ QFETCH_GLOBAL(QTest::ComparisonOperation, operation);
+ ClassWithDeferredSetter c(0);
+ c.setValueDeferred(1);
+ switch (operation) {
+ case QTest::ComparisonOperation::Equal:
+ QTRY_COMPARE_EQ_WITH_TIMEOUT(c, ClassWithDeferredSetter(1), 300);
+ break;
+ case QTest::ComparisonOperation::NotEqual:
+ QTRY_COMPARE_NE_WITH_TIMEOUT(c, ClassWithDeferredSetter(0), 300);
+ break;
+ case QTest::ComparisonOperation::LessThan:
+ QTRY_COMPARE_LT_WITH_TIMEOUT(c, ClassWithDeferredSetter(0), 300);
+ break;
+ case QTest::ComparisonOperation::LessThanOrEqual:
+ QTRY_COMPARE_LE_WITH_TIMEOUT(c, ClassWithDeferredSetter(-1), 300);
+ break;
+ case QTest::ComparisonOperation::GreaterThan:
+ QTRY_COMPARE_GT_WITH_TIMEOUT(c, ClassWithDeferredSetter(1), 300);
+ break;
+ case QTest::ComparisonOperation::GreaterThanOrEqual:
+ QTRY_COMPARE_GE_WITH_TIMEOUT(c, ClassWithDeferredSetter(1), 300);
+ break;
+ case QTest::ComparisonOperation::CustomCompare:
+ QFAIL("Unexpected comparison operation");
+ break;
+ }
+}
+
+QT_END_NAMESPACE
+
+QTEST_MAIN(tst_ExtendedCompare)
+#include "tst_extendedcompare.moc"
diff --git a/tests/auto/testlib/selftests/failcleanup/CMakeLists.txt b/tests/auto/testlib/selftests/failcleanup/CMakeLists.txt
index e45d1b528b..0b582ffdc3 100644
--- a/tests/auto/testlib/selftests/failcleanup/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/failcleanup/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from failcleanup.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## failcleanup Binary:
#####################################################################
qt_internal_add_executable(failcleanup
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_failcleanup.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(failcleanup)
-# special case end
diff --git a/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp b/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp
index 1be5665783..2e519e0f91 100644
--- a/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.cpp
+++ b/tests/auto/testlib/selftests/failcleanup/tst_failcleanup.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 <QTest>
@@ -33,7 +8,7 @@ class tst_FailCleanup: public QObject
Q_OBJECT
private slots:
void aTestFunction() const;
- void cleanupTestCase() const;
+ void cleanup() const;
};
void tst_FailCleanup::aTestFunction() const
@@ -41,9 +16,9 @@ void tst_FailCleanup::aTestFunction() const
QVERIFY(true);
}
-void tst_FailCleanup::cleanupTestCase() const
+void tst_FailCleanup::cleanup() const
{
- QVERIFY2(false, "Fail inside cleanupTestCase");
+ QVERIFY2(false, "Fail inside cleanup");
}
QTEST_APPLESS_MAIN(tst_FailCleanup)
diff --git a/tests/auto/testlib/selftests/failcleanuptestcase/CMakeLists.txt b/tests/auto/testlib/selftests/failcleanuptestcase/CMakeLists.txt
new file mode 100644
index 0000000000..1a1417f76c
--- /dev/null
+++ b/tests/auto/testlib/selftests/failcleanuptestcase/CMakeLists.txt
@@ -0,0 +1,18 @@
+#####################################################################
+## failcleanuptestcase Binary:
+#####################################################################
+
+qt_internal_add_executable(failcleanuptestcase
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ SOURCES
+ tst_failcleanuptestcase.cpp
+ LIBRARIES
+ Qt::Test
+)
+
+## Scopes:
+#####################################################################
+
+qt_internal_apply_testlib_coverage_options(failcleanuptestcase)
diff --git a/tests/auto/testlib/selftests/failcleanuptestcase/tst_failcleanuptestcase.cpp b/tests/auto/testlib/selftests/failcleanuptestcase/tst_failcleanuptestcase.cpp
new file mode 100644
index 0000000000..e90f6759db
--- /dev/null
+++ b/tests/auto/testlib/selftests/failcleanuptestcase/tst_failcleanuptestcase.cpp
@@ -0,0 +1,25 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+
+class tst_FailCleanupTestCase: public QObject
+{
+Q_OBJECT
+private slots:
+ void aTestFunction() const;
+ void cleanupTestCase() const;
+};
+
+void tst_FailCleanupTestCase::aTestFunction() const
+{
+ QVERIFY(true);
+}
+
+void tst_FailCleanupTestCase::cleanupTestCase() const
+{
+ QVERIFY2(false, "Fail inside cleanupTestCase");
+}
+
+QTEST_APPLESS_MAIN(tst_FailCleanupTestCase)
+#include "tst_failcleanuptestcase.moc"
diff --git a/tests/auto/testlib/selftests/faildatatype/CMakeLists.txt b/tests/auto/testlib/selftests/faildatatype/CMakeLists.txt
index 0abba3e021..a0af051f74 100644
--- a/tests/auto/testlib/selftests/faildatatype/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/faildatatype/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from faildatatype.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## faildatatype Binary:
#####################################################################
qt_internal_add_executable(faildatatype
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_faildatatype.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(faildatatype)
-# special case end
diff --git a/tests/auto/testlib/selftests/faildatatype/tst_faildatatype.cpp b/tests/auto/testlib/selftests/faildatatype/tst_faildatatype.cpp
index 13000e5038..4605933636 100644
--- a/tests/auto/testlib/selftests/faildatatype/tst_faildatatype.cpp
+++ b/tests/auto/testlib/selftests/faildatatype/tst_faildatatype.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/testlib/selftests/failfetchtype/CMakeLists.txt b/tests/auto/testlib/selftests/failfetchtype/CMakeLists.txt
index 0ce60f591e..503d2b33db 100644
--- a/tests/auto/testlib/selftests/failfetchtype/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/failfetchtype/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from failfetchtype.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## failfetchtype Binary:
#####################################################################
qt_internal_add_executable(failfetchtype
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_failfetchtype.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(failfetchtype)
-# special case end
diff --git a/tests/auto/testlib/selftests/failfetchtype/tst_failfetchtype.cpp b/tests/auto/testlib/selftests/failfetchtype/tst_failfetchtype.cpp
index d5844c3ff5..4516b76461 100644
--- a/tests/auto/testlib/selftests/failfetchtype/tst_failfetchtype.cpp
+++ b/tests/auto/testlib/selftests/failfetchtype/tst_failfetchtype.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/testlib/selftests/failinit/CMakeLists.txt b/tests/auto/testlib/selftests/failinit/CMakeLists.txt
index b6995e591d..9d13c2baf6 100644
--- a/tests/auto/testlib/selftests/failinit/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/failinit/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from failinit.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## failinit Binary:
#####################################################################
qt_internal_add_executable(failinit
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_failinit.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(failinit)
-# special case end
diff --git a/tests/auto/testlib/selftests/failinit/tst_failinit.cpp b/tests/auto/testlib/selftests/failinit/tst_failinit.cpp
index deeb43e027..dbf91101eb 100644
--- a/tests/auto/testlib/selftests/failinit/tst_failinit.cpp
+++ b/tests/auto/testlib/selftests/failinit/tst_failinit.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 <QTest>
diff --git a/tests/auto/testlib/selftests/failinitdata/CMakeLists.txt b/tests/auto/testlib/selftests/failinitdata/CMakeLists.txt
index dcc2bdafde..0bb210fbc3 100644
--- a/tests/auto/testlib/selftests/failinitdata/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/failinitdata/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from failinitdata.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## failinitdata Binary:
#####################################################################
qt_internal_add_executable(failinitdata
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_failinitdata.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(failinitdata)
-# special case end
diff --git a/tests/auto/testlib/selftests/failinitdata/tst_failinitdata.cpp b/tests/auto/testlib/selftests/failinitdata/tst_failinitdata.cpp
index dd9c0ac200..df7b4de981 100644
--- a/tests/auto/testlib/selftests/failinitdata/tst_failinitdata.cpp
+++ b/tests/auto/testlib/selftests/failinitdata/tst_failinitdata.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 <QTest>
diff --git a/tests/auto/testlib/selftests/fetchbogus/CMakeLists.txt b/tests/auto/testlib/selftests/fetchbogus/CMakeLists.txt
index 1f5f5cedf0..a47a1fbf19 100644
--- a/tests/auto/testlib/selftests/fetchbogus/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/fetchbogus/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from fetchbogus.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## fetchbogus Binary:
#####################################################################
qt_internal_add_executable(fetchbogus
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_fetchbogus.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(fetchbogus)
-# special case end
diff --git a/tests/auto/testlib/selftests/fetchbogus/tst_fetchbogus.cpp b/tests/auto/testlib/selftests/fetchbogus/tst_fetchbogus.cpp
index 8a135ba121..72eacadb3d 100644
--- a/tests/auto/testlib/selftests/fetchbogus/tst_fetchbogus.cpp
+++ b/tests/auto/testlib/selftests/fetchbogus/tst_fetchbogus.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 <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/findtestdata/CMakeLists.txt b/tests/auto/testlib/selftests/findtestdata/CMakeLists.txt
index 9c06a09c18..9422861e22 100644
--- a/tests/auto/testlib/selftests/findtestdata/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/findtestdata/CMakeLists.txt
@@ -1,15 +1,17 @@
-# Generated from findtestdata.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## findtestdata Binary:
#####################################################################
qt_internal_add_executable(findtestdata
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
findtestdata.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
@@ -29,6 +31,4 @@ qt_internal_add_resource(findtestdata "findtestdata"
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(findtestdata)
-# special case end
diff --git a/tests/auto/testlib/selftests/findtestdata/findtestdata.cpp b/tests/auto/testlib/selftests/findtestdata/findtestdata.cpp
index de57f57f53..9b74ffd3a6 100644
--- a/tests/auto/testlib/selftests/findtestdata/findtestdata.cpp
+++ b/tests/auto/testlib/selftests/findtestdata/findtestdata.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 <QtCore/QCoreApplication>
@@ -51,7 +26,7 @@ void FindTestData::initTestCase()
// verify that our qt.conf is working as expected.
QString app_path = QCoreApplication::applicationDirPath();
QString install_path = app_path
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
+ "/Contents"
#endif
+ "/tests";
@@ -100,7 +75,7 @@ void FindTestData::paths()
// 2. at the test install path (faked via qt.conf)
QString testfile_path2 = app_path
-#ifdef Q_OS_MAC
+#ifdef Q_OS_DARWIN
+ "/Contents"
#endif
+ "/tests/findtestdata/" TESTFILE;
diff --git a/tests/auto/testlib/selftests/float/CMakeLists.txt b/tests/auto/testlib/selftests/float/CMakeLists.txt
index 02c61acff3..448c3e962e 100644
--- a/tests/auto/testlib/selftests/float/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/float/CMakeLists.txt
@@ -1,15 +1,17 @@
-# Generated from float.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## float Binary:
#####################################################################
qt_internal_add_executable(float
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_float.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
Qt::TestPrivate
)
@@ -17,6 +19,4 @@ qt_internal_add_executable(float
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(float)
-# special case end
diff --git a/tests/auto/testlib/selftests/float/tst_float.cpp b/tests/auto/testlib/selftests/float/tst_float.cpp
index ad03176302..9af14f1e89 100644
--- a/tests/auto/testlib/selftests/float/tst_float.cpp
+++ b/tests/auto/testlib/selftests/float/tst_float.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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>
#include <QtCore/qfloat16.h>
diff --git a/tests/auto/testlib/selftests/generate_expected_output.py b/tests/auto/testlib/selftests/generate_expected_output.py
index 0dc6748f08..350d20fa27 100755
--- a/tests/auto/testlib/selftests/generate_expected_output.py
+++ b/tests/auto/testlib/selftests/generate_expected_output.py
@@ -1,31 +1,6 @@
#!/usr/bin/env python3
-#############################################################################
-##
-## Copyright (C) 2020 The Qt Company Ltd.
-## Contact: https://www.qt.io/licensing/
-##
-## This file is part of the release tools of the Qt Toolkit.
-##
-## $QT_BEGIN_LICENSE:GPL-EXCEPT$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 as published by the Free Software
-## Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-## included in the packaging of this file. Please review the following
-## information to 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
from argparse import ArgumentParser, RawTextHelpFormatter
import os
@@ -56,15 +31,17 @@ TESTS = ['assert', 'badxml', 'benchlibcallgrind', 'benchlibcounting',
'benchlibeventcounter', 'benchliboptions', 'benchlibtickcounter',
'benchlibwalltime', 'blacklisted', 'cmptest', 'commandlinedata',
'counting', 'crashes', 'datatable', 'datetime', 'deleteLater',
- 'deleteLater_noApp', 'differentexec', 'exceptionthrow', 'expectfail',
- 'failcleanup', 'faildatatype', 'failfetchtype', 'failinit',
- 'failinitdata', 'fetchbogus', 'findtestdata', 'float', 'globaldata',
- 'longstring', 'maxwarnings', 'mouse', 'multiexec', 'pairdiagnostics', 'pass',
+ 'deleteLater_noApp', 'differentexec', 'eventloop', 'exceptionthrow',
+ 'expectfail', "extendedcompare", 'failcleanup', 'failcleanuptestcase',
+ 'faildatatype', 'failfetchtype', 'failinit', 'failinitdata',
+ 'fetchbogus', 'findtestdata', 'float', 'globaldata', 'longstring',
+ 'maxwarnings', 'mouse', 'multiexec', 'pairdiagnostics', 'pass',
'printdatatags', 'printdatatagswithglobaltags', 'qexecstringlist',
- 'signaldumper', 'silent', 'singleskip', 'skip', 'skipcleanup',
- 'skipinit', 'skipinitdata', 'sleep', 'strcmp', 'subtest', 'testlib',
- 'tuplediagnostics', 'verbose1', 'verbose2', 'verifyexceptionthrown',
- 'warnings', 'watchdog', 'junit', 'keyboard']
+ 'signaldumper', 'silent', 'silent_fatal', 'singleskip', 'skip',
+ 'skipblacklisted', 'skipcleanup', 'skipcleanuptestcase', 'skipinit',
+ 'skipinitdata', 'sleep', 'strcmp', 'subtest', 'testlib', 'tuplediagnostics',
+ 'verbose1', 'verbose2', 'verifyexceptionthrown', 'warnings', 'watchdog',
+ 'junit', 'keyboard']
class Fail (Exception): pass
@@ -99,8 +76,12 @@ class Cleaner (object):
def _read_qt_version(qtbase_dir):
cmake_conf_file = os.path.join(qtbase_dir, '.cmake.conf')
with open(cmake_conf_file) as f:
- qtver = f.readline().strip()
- return qtver.split('"')[1] # set(QT_REPO_MODULE_VERSION "6.1.0")
+ for line in f:
+ # set(QT_REPO_MODULE_VERSION "6.1.0")
+ if 'set(QT_REPO_MODULE_VERSION' in line:
+ return line.strip().split('"')[1]
+
+ raise RuntimeError("Someone broke .cmake.conf formatting again")
@staticmethod
def __getPatterns(patterns = (
@@ -221,9 +202,9 @@ class Scanner (object):
del re
-# Keep in sync with tst_selftests.cpp's processEnvironment():
+# Keep in sync with tst_selftests.cpp's testEnvironment():
def baseEnv(platname=None,
- keep=('PATH', 'QT_QPA_PLATFORM'),
+ keep=('PATH', 'QT_QPA_PLATFORM', 'QTEST_THROW_ON_FAIL', 'QTEST_THROW_ON_SKIP', 'ASAN_OPTIONS'),
posix=('HOME', 'USER', 'QEMU_SET_ENV', 'QEMU_LD_PREFIX'),
nonapple=('DISPLAY', 'XAUTHORITY', 'XAUTHLOCALHOSTNAME'), # and XDG_*
# Don't actually know how to test for QNX, so this is ignored:
@@ -272,9 +253,9 @@ def testEnv(testname,
"watchdog": { "QTEST_FUNCTION_TIMEOUT": "100" },
},
# Must match tst_Selftests::runSubTest_data():
- crashers = ("assert", "blacklisted", "crashes", "crashedterminate",
+ crashers = ("assert", "crashes", "crashedterminate",
"exceptionthrow", "faildatatype", "failfetchtype",
- "fetchbogus", "silent", "watchdog")):
+ "fetchbogus", "silent_fatal", "watchdog")):
"""Determine the environment in which to run a test."""
data = baseEnv()
if testname in crashers:
@@ -301,6 +282,7 @@ def shouldIgnoreTest(testname, format):
"printdatatags",
"printdatatagswithglobaltags",
"silent",
+ "silent_fatal",
"crashes",
"benchlibcallgrind",
"float",
diff --git a/tests/auto/testlib/selftests/globaldata/CMakeLists.txt b/tests/auto/testlib/selftests/globaldata/CMakeLists.txt
index 0793b6c4e3..2bb7d94e51 100644
--- a/tests/auto/testlib/selftests/globaldata/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/globaldata/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from globaldata.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## globaldata Binary:
#####################################################################
qt_internal_add_executable(globaldata
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_globaldata.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(globaldata)
-# special case end
diff --git a/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp b/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp
index a1ddf1fe4c..3b589a9962 100644
--- a/tests/auto/testlib/selftests/globaldata/tst_globaldata.cpp
+++ b/tests/auto/testlib/selftests/globaldata/tst_globaldata.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 <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/junit/CMakeLists.txt b/tests/auto/testlib/selftests/junit/CMakeLists.txt
index 94138b6577..a736d2a15c 100644
--- a/tests/auto/testlib/selftests/junit/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/junit/CMakeLists.txt
@@ -1,10 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
qt_internal_add_executable(junit
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_junit.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/auto/testlib/selftests/junit/tst_junit.cpp b/tests/auto/testlib/selftests/junit/tst_junit.cpp
index c434704d83..dfc55cc40d 100644
--- a/tests/auto/testlib/selftests/junit/tst_junit.cpp
+++ b/tests/auto/testlib/selftests/junit/tst_junit.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/testlib/selftests/keyboard/CMakeLists.txt b/tests/auto/testlib/selftests/keyboard/CMakeLists.txt
index 998de7f0ed..a1c1482e04 100644
--- a/tests/auto/testlib/selftests/keyboard/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/keyboard/CMakeLists.txt
@@ -1,15 +1,17 @@
-# Generated from keyboard.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## keyboard Binary:
#####################################################################
qt_internal_add_executable(keyboard
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_keyboard.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Test
@@ -19,6 +21,4 @@ qt_internal_add_executable(keyboard
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(keyboard)
-# special case end
diff --git a/tests/auto/testlib/selftests/keyboard/tst_keyboard.cpp b/tests/auto/testlib/selftests/keyboard/tst_keyboard.cpp
index 069306121c..1d6b8bb962 100644
--- a/tests/auto/testlib/selftests/keyboard/tst_keyboard.cpp
+++ b/tests/auto/testlib/selftests/keyboard/tst_keyboard.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/qtest.h>
#include <QtGui/qwindow.h>
diff --git a/tests/auto/testlib/selftests/longstring/CMakeLists.txt b/tests/auto/testlib/selftests/longstring/CMakeLists.txt
index 1b123b1e0c..0528ef0255 100644
--- a/tests/auto/testlib/selftests/longstring/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/longstring/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from longstring.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## longstring Binary:
#####################################################################
qt_internal_add_executable(longstring
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_longstring.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(longstring)
-# special case end
diff --git a/tests/auto/testlib/selftests/longstring/tst_longstring.cpp b/tests/auto/testlib/selftests/longstring/tst_longstring.cpp
index 0c84d68b47..ce9d428831 100644
--- a/tests/auto/testlib/selftests/longstring/tst_longstring.cpp
+++ b/tests/auto/testlib/selftests/longstring/tst_longstring.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 <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/maxwarnings/CMakeLists.txt b/tests/auto/testlib/selftests/maxwarnings/CMakeLists.txt
index 6c2eca0935..e5f0070b79 100644
--- a/tests/auto/testlib/selftests/maxwarnings/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/maxwarnings/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from maxwarnings.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## maxwarnings Binary:
#####################################################################
qt_internal_add_executable(maxwarnings
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
maxwarnings.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(maxwarnings)
-# special case end
diff --git a/tests/auto/testlib/selftests/maxwarnings/maxwarnings.cpp b/tests/auto/testlib/selftests/maxwarnings/maxwarnings.cpp
index 518e1a75af..5d47b058a7 100644
--- a/tests/auto/testlib/selftests/maxwarnings/maxwarnings.cpp
+++ b/tests/auto/testlib/selftests/maxwarnings/maxwarnings.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 <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/mouse/CMakeLists.txt b/tests/auto/testlib/selftests/mouse/CMakeLists.txt
index aab32b06ba..9eb4aec2ce 100644
--- a/tests/auto/testlib/selftests/mouse/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/mouse/CMakeLists.txt
@@ -1,15 +1,17 @@
-# Generated from mouse.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## mouse Binary:
#####################################################################
qt_internal_add_executable(mouse
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_mouse.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Test
@@ -19,6 +21,4 @@ qt_internal_add_executable(mouse
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(mouse)
-# special case end
diff --git a/tests/auto/testlib/selftests/mouse/tst_mouse.cpp b/tests/auto/testlib/selftests/mouse/tst_mouse.cpp
index b43d5f7615..dd79add5f3 100644
--- a/tests/auto/testlib/selftests/mouse/tst_mouse.cpp
+++ b/tests/auto/testlib/selftests/mouse/tst_mouse.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtGui/QWindow>
@@ -49,6 +24,7 @@ private slots:
void stateHandlingPart2();
void deterministicEvents_data();
void deterministicEvents();
+ void doubleClick();
};
class MouseWindow : public QWindow
@@ -276,5 +252,53 @@ void tst_Mouse::deterministicEvents()
QCOMPARE(w.moveCount, 1);
}
+void tst_Mouse::doubleClick()
+{
+ MouseWindow w;
+ w.show();
+ w.setGeometry(100, 100, 200, 200);
+ QVERIFY(QTest::qWaitForWindowActive(&w));
+
+ // click
+ QPoint point(10, 10);
+ QCOMPARE(w.pressCount, 0);
+ QTest::mousePress(&w, Qt::LeftButton, { }, point);
+ QCOMPARE(w.pressCount, 1);
+ // give a delay of 10ms
+ auto ts = w.lastTimeStamp;
+ QTest::mouseRelease(&w, Qt::LeftButton, { }, point, 10);
+ QCOMPARE(w.lastTimeStamp, ts + 10);
+ QCOMPARE(w.doubleClickCount, 0);
+
+ // click again within a short time to generate double-click
+ QTest::mousePress(&w, Qt::LeftButton, { }, point, 10);
+ QCOMPARE(w.pressCount, 2);
+ QCOMPARE(w.lastTimeStamp, ts + 20);
+ // this time, let some virtual time elapse, because we're going to test double-click again afterwards
+ QTest::mouseRelease(&w, Qt::LeftButton, { }, point);
+ QCOMPARE_GT(w.lastTimeStamp, ts + 20);
+ QCOMPARE(w.doubleClickCount, 1);
+
+ // use the mouseClick function to generate another double-click
+ ts = w.lastTimeStamp;
+ QTest::mouseClick(&w, Qt::LeftButton, {}, point, 10);
+ QCOMPARE_GE(w.lastTimeStamp, ts + 500); // because the last release had a default delay
+ QTest::mouseClick(&w, Qt::LeftButton, {}, point);
+ QCOMPARE(w.doubleClickCount, 2);
+
+ // use the mouseDClick function to generate another double-click
+ ts = w.lastTimeStamp;
+ QTest::mouseDClick(&w, Qt::LeftButton, {}, point);
+ QCOMPARE_GE(w.lastTimeStamp, ts + 500); // because the last release had a default delay
+ QCOMPARE(w.doubleClickCount, 3);
+
+ // use the mouseClick function with default delay to avoid double-click
+ ts = w.lastTimeStamp;
+ QTest::mouseClick(&w, Qt::LeftButton, {}, point);
+ QCOMPARE_GE(w.lastTimeStamp, ts + 500); // because the last release had a default delay
+ QTest::mouseClick(&w, Qt::LeftButton, {}, point);
+ QCOMPARE(w.doubleClickCount, 3);
+}
+
QTEST_MAIN(tst_Mouse)
#include "tst_mouse.moc"
diff --git a/tests/auto/testlib/selftests/multiexec/CMakeLists.txt b/tests/auto/testlib/selftests/multiexec/CMakeLists.txt
index 314765b803..ece9279856 100644
--- a/tests/auto/testlib/selftests/multiexec/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/multiexec/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from multiexec.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## multiexec Binary:
#####################################################################
qt_internal_add_executable(multiexec
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_multiexec.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(multiexec)
-# special case end
diff --git a/tests/auto/testlib/selftests/multiexec/tst_multiexec.cpp b/tests/auto/testlib/selftests/multiexec/tst_multiexec.cpp
index dd403e97c4..be7c151d34 100644
--- a/tests/auto/testlib/selftests/multiexec/tst_multiexec.cpp
+++ b/tests/auto/testlib/selftests/multiexec/tst_multiexec.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 <QTest>
diff --git a/tests/auto/testlib/selftests/pairdiagnostics/CMakeLists.txt b/tests/auto/testlib/selftests/pairdiagnostics/CMakeLists.txt
index f752131325..d0c9e6309a 100644
--- a/tests/auto/testlib/selftests/pairdiagnostics/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/pairdiagnostics/CMakeLists.txt
@@ -1,18 +1,18 @@
-# Generated from pairdiagnostics.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## pairdiagnostics Binary:
#####################################################################
qt_internal_add_executable(pairdiagnostics
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_pairdiagnostics.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
-# special case begin
qt_internal_apply_testlib_coverage_options(pairdiagnostics)
-# special case end
diff --git a/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp b/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp
index b057e78b99..72cc4ab1f2 100644
--- a/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.cpp
+++ b/tests/auto/testlib/selftests/pairdiagnostics/tst_pairdiagnostics.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
// Make sure we get a real Q_ASSERT even in release builds
#ifdef QT_NO_DEBUG
diff --git a/tests/auto/testlib/selftests/pass/CMakeLists.txt b/tests/auto/testlib/selftests/pass/CMakeLists.txt
index 1f54a009ec..de3bfbc32a 100644
--- a/tests/auto/testlib/selftests/pass/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/pass/CMakeLists.txt
@@ -1,22 +1,22 @@
-# Generated from pass.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## pass Binary:
#####################################################################
qt_internal_add_executable(pass
- NO_INSTALL # special case
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}" # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
SOURCES
tst_pass.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(pass)
-# special case end
diff --git a/tests/auto/testlib/selftests/pass/tst_pass.cpp b/tests/auto/testlib/selftests/pass/tst_pass.cpp
index b03e050242..760c5a236d 100644
--- a/tests/auto/testlib/selftests/pass/tst_pass.cpp
+++ b/tests/auto/testlib/selftests/pass/tst_pass.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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>
#include <QTest>
diff --git a/tests/auto/testlib/selftests/patches/0001-Catch2-Fix-console-width-for-Qt-tests.patch b/tests/auto/testlib/selftests/patches/0001-Catch2-Fix-console-width-for-Qt-tests.patch
new file mode 100644
index 0000000000..6365cb774f
--- /dev/null
+++ b/tests/auto/testlib/selftests/patches/0001-Catch2-Fix-console-width-for-Qt-tests.patch
@@ -0,0 +1,24 @@
+From 426c2d7e32bc2f252e9d3323f633ac73222a7afc Mon Sep 17 00:00:00 2001
+From: Samuli Piippo <samuli.piippo@qt.io>
+Date: Thu, 20 Jan 2022 09:04:54 +0200
+Subject: [PATCH] Catch2: Fix console width for Qt tests
+
+Disabled by Qt so that test failures are not line-broken
+---
+ tests/auto/testlib/selftests/catch_p_p.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/tests/auto/testlib/selftests/catch_p_p.h b/tests/auto/testlib/selftests/catch_p_p.h
+index db1fed3b98..26bb41f4f0 100644
+--- a/tests/auto/testlib/selftests/catch_p_p.h
++++ b/tests/auto/testlib/selftests/catch_p_p.h
+@@ -8413,7 +8413,9 @@ namespace Catch {
+ #define CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+ #undef CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH
+ #endif
++#if 0 // Disabled by Qt so that test failures are not line-broken
+ #define CATCH_CLARA_TEXTFLOW_CONFIG_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH-1
++#endif
+
+ #ifdef __clang__
+ #pragma clang diagnostic push
diff --git a/tests/auto/testlib/selftests/printdatatags/CMakeLists.txt b/tests/auto/testlib/selftests/printdatatags/CMakeLists.txt
index a323b1f73d..4e2d58c35a 100644
--- a/tests/auto/testlib/selftests/printdatatags/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/printdatatags/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from printdatatags.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## printdatatags Binary:
#####################################################################
qt_internal_add_executable(printdatatags
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_printdatatags.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(printdatatags)
-# special case end
diff --git a/tests/auto/testlib/selftests/printdatatags/tst_printdatatags.cpp b/tests/auto/testlib/selftests/printdatatags/tst_printdatatags.cpp
index a2f91896f4..31cf97347e 100644
--- a/tests/auto/testlib/selftests/printdatatags/tst_printdatatags.cpp
+++ b/tests/auto/testlib/selftests/printdatatags/tst_printdatatags.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/testlib/selftests/printdatatagswithglobaltags/CMakeLists.txt b/tests/auto/testlib/selftests/printdatatagswithglobaltags/CMakeLists.txt
index 323d3d65ed..80d08a9d2d 100644
--- a/tests/auto/testlib/selftests/printdatatagswithglobaltags/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/printdatatagswithglobaltags/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from printdatatagswithglobaltags.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## printdatatagswithglobaltags Binary:
#####################################################################
qt_internal_add_executable(printdatatagswithglobaltags
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_printdatatagswithglobaltags.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(printdatatagswithglobaltags)
-# special case end
diff --git a/tests/auto/testlib/selftests/printdatatagswithglobaltags/tst_printdatatagswithglobaltags.cpp b/tests/auto/testlib/selftests/printdatatagswithglobaltags/tst_printdatatagswithglobaltags.cpp
index 417df9aedb..21e057cbb1 100644
--- a/tests/auto/testlib/selftests/printdatatagswithglobaltags/tst_printdatatagswithglobaltags.cpp
+++ b/tests/auto/testlib/selftests/printdatatagswithglobaltags/tst_printdatatagswithglobaltags.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/testlib/selftests/qexecstringlist/CMakeLists.txt b/tests/auto/testlib/selftests/qexecstringlist/CMakeLists.txt
index 2aec291154..91244ca25a 100644
--- a/tests/auto/testlib/selftests/qexecstringlist/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/qexecstringlist/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from qexecstringlist.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qexecstringlist Binary:
#####################################################################
qt_internal_add_executable(qexecstringlist
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_qexecstringlist.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(qexecstringlist)
-# special case end
diff --git a/tests/auto/testlib/selftests/qexecstringlist/tst_qexecstringlist.cpp b/tests/auto/testlib/selftests/qexecstringlist/tst_qexecstringlist.cpp
index cd454ae3b4..fefb643041 100644
--- a/tests/auto/testlib/selftests/qexecstringlist/tst_qexecstringlist.cpp
+++ b/tests/auto/testlib/selftests/qexecstringlist/tst_qexecstringlist.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 <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/qt_attribution.json b/tests/auto/testlib/selftests/qt_attribution.json
index af1b594e93..3a126f59ed 100644
--- a/tests/auto/testlib/selftests/qt_attribution.json
+++ b/tests/auto/testlib/selftests/qt_attribution.json
@@ -8,10 +8,10 @@
"Description": "Catch2 is a multi-paradigm test framework for C++.",
"Homepage": "https://github.com/catchorg/Catch2",
- "Version": "2.11.1",
+ "Version": "2.13.10",
"License": "Boost Software License 1.0",
"LicenseId": "BSL-1.0",
"LicenseFile": "CATCH_LICENSE.txt",
- "Copyright": "Copyright (c) 2019 Two Blue Cubes Ltd. All rights reserved."
+ "Copyright": "Copyright (c) 2022 Two Blue Cubes Ltd. All rights reserved."
}
]
diff --git a/tests/auto/testlib/selftests/signaldumper/CMakeLists.txt b/tests/auto/testlib/selftests/signaldumper/CMakeLists.txt
index a8c667d721..79ab8f8f86 100644
--- a/tests/auto/testlib/selftests/signaldumper/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/signaldumper/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from signaldumper.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## signaldumper Binary:
#####################################################################
qt_internal_add_executable(signaldumper
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_signaldumper.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::TestPrivate
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(signaldumper)
-# special case end
diff --git a/tests/auto/testlib/selftests/signaldumper/tst_signaldumper.cpp b/tests/auto/testlib/selftests/signaldumper/tst_signaldumper.cpp
index 6dee51b544..8b233abc1e 100644
--- a/tests/auto/testlib/selftests/signaldumper/tst_signaldumper.cpp
+++ b/tests/auto/testlib/selftests/signaldumper/tst_signaldumper.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
#include <QTest>
diff --git a/tests/auto/testlib/selftests/silent/CMakeLists.txt b/tests/auto/testlib/selftests/silent/CMakeLists.txt
index d029aa8021..76bb0d0110 100644
--- a/tests/auto/testlib/selftests/silent/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/silent/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from silent.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## silent Binary:
#####################################################################
qt_internal_add_executable(silent
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_silent.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::TestPrivate
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(silent)
-# special case end
diff --git a/tests/auto/testlib/selftests/silent/tst_silent.cpp b/tests/auto/testlib/selftests/silent/tst_silent.cpp
index 87c610f269..a1e7f7af57 100644
--- a/tests/auto/testlib/selftests/silent/tst_silent.cpp
+++ b/tests/auto/testlib/selftests/silent/tst_silent.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
#include <QTest>
@@ -40,8 +15,6 @@ private slots:
void fail();
void xfail();
void xpass();
-
- // This test function must be last, as it calls qFatal().
void messages();
};
@@ -72,17 +45,6 @@ void tst_Silent::xpass()
QVERIFY2(true, "This test should XPASS");
}
-#ifndef Q_OS_WIN
-#include <signal.h>
-#include <setjmp.h>
-
-static jmp_buf state;
-static void abort_handler(int)
-{
- longjmp(state, 1);
-}
-#endif
-
void tst_Silent::messages()
{
qWarning("This is a warning that should not appear in silent test output");
@@ -91,15 +53,6 @@ void tst_Silent::messages()
qCritical("This is a critical message that should not appear in silent test output");
qInfo("This is an info message that should not appear in silent test output");
QTestLog::info("This is an internal testlib info message that should not appear in silent test output", __FILE__, __LINE__);
-
-#ifndef Q_OS_WIN
- // We're testing qFatal, but we don't want to actually std::abort() !
- auto prior = signal(SIGABRT, abort_handler);
- if (setjmp(state))
- signal(SIGABRT, prior);
- else
-#endif
- qFatal("This is a fatal error message that should still appear in silent test output");
}
QTEST_MAIN_WRAPPER(tst_Silent,
diff --git a/tests/auto/testlib/selftests/silent_fatal/CMakeLists.txt b/tests/auto/testlib/selftests/silent_fatal/CMakeLists.txt
new file mode 100644
index 0000000000..e4b59e399f
--- /dev/null
+++ b/tests/auto/testlib/selftests/silent_fatal/CMakeLists.txt
@@ -0,0 +1,15 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_executable(silent_fatal
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ SOURCES
+ tst_silent_fatal.cpp
+ LIBRARIES
+ Qt::TestPrivate
+)
+
+# No coverage because this crashes, making data collection difficult, if not
+# impossible.
diff --git a/tests/auto/testlib/selftests/silent_fatal/tst_silent_fatal.cpp b/tests/auto/testlib/selftests/silent_fatal/tst_silent_fatal.cpp
new file mode 100644
index 0000000000..57aa1f702c
--- /dev/null
+++ b/tests/auto/testlib/selftests/silent_fatal/tst_silent_fatal.cpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QCoreApplication>
+#include <QTest>
+#include <private/qtestlog_p.h>
+
+class tst_SilentFatal : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void fatalmessages();
+};
+void tst_SilentFatal::fatalmessages()
+{
+ qFatal("This is a fatal error message that should still appear in silent test output");
+}
+
+QTEST_MAIN_WRAPPER(tst_SilentFatal,
+ std::vector<const char*> args(argv, argv + argc);
+ args.push_back("-silent");
+ args.push_back("-nocrashhandler");
+ argc = int(args.size());
+ argv = const_cast<char**>(&args[0]);
+ QTEST_MAIN_SETUP())
+
+#include "tst_silent_fatal.moc"
diff --git a/tests/auto/testlib/selftests/singleskip/CMakeLists.txt b/tests/auto/testlib/selftests/singleskip/CMakeLists.txt
index fa8132a3c1..b37cc5fcc0 100644
--- a/tests/auto/testlib/selftests/singleskip/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/singleskip/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from singleskip.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## singleskip Binary:
#####################################################################
qt_internal_add_executable(singleskip
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_singleskip.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(singleskip)
-# special case end
diff --git a/tests/auto/testlib/selftests/singleskip/tst_singleskip.cpp b/tests/auto/testlib/selftests/singleskip/tst_singleskip.cpp
index d4febf1f5f..c5307fed70 100644
--- a/tests/auto/testlib/selftests/singleskip/tst_singleskip.cpp
+++ b/tests/auto/testlib/selftests/singleskip/tst_singleskip.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 <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/skip/CMakeLists.txt b/tests/auto/testlib/selftests/skip/CMakeLists.txt
index 2841dcbd9a..6fb38cc976 100644
--- a/tests/auto/testlib/selftests/skip/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/skip/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from skip.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## skip Binary:
#####################################################################
qt_internal_add_executable(skip
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_skip.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(skip)
-# special case end
diff --git a/tests/auto/testlib/selftests/skip/tst_skip.cpp b/tests/auto/testlib/selftests/skip/tst_skip.cpp
index 43ef8155e0..709080049a 100644
--- a/tests/auto/testlib/selftests/skip/tst_skip.cpp
+++ b/tests/auto/testlib/selftests/skip/tst_skip.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/skipblacklisted/BLACKLIST b/tests/auto/testlib/selftests/skipblacklisted/BLACKLIST
new file mode 100644
index 0000000000..77c13250cd
--- /dev/null
+++ b/tests/auto/testlib/selftests/skipblacklisted/BLACKLIST
@@ -0,0 +1,6 @@
+[blacklisted]
+*
+[blacklistedData:blacklisted 1]
+*
+[blacklistedData:blacklisted 2]
+*
diff --git a/tests/auto/testlib/selftests/skipblacklisted/CMakeLists.txt b/tests/auto/testlib/selftests/skipblacklisted/CMakeLists.txt
new file mode 100644
index 0000000000..cc1a2ff469
--- /dev/null
+++ b/tests/auto/testlib/selftests/skipblacklisted/CMakeLists.txt
@@ -0,0 +1,18 @@
+#####################################################################
+## skipblacklisted Binary:
+#####################################################################
+
+qt_internal_add_executable(skipblacklisted
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ SOURCES
+ tst_skipblacklisted.cpp
+ LIBRARIES
+ Qt::Test
+)
+
+## Scopes:
+#####################################################################
+
+qt_internal_apply_testlib_coverage_options(skipblacklisted)
diff --git a/tests/auto/testlib/selftests/skipblacklisted/tst_skipblacklisted.cpp b/tests/auto/testlib/selftests/skipblacklisted/tst_skipblacklisted.cpp
new file mode 100644
index 0000000000..4ebff3ee4b
--- /dev/null
+++ b/tests/auto/testlib/selftests/skipblacklisted/tst_skipblacklisted.cpp
@@ -0,0 +1,51 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+
+class tst_SkipBlacklisted : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void pass();
+ void blacklisted();
+ void blacklistedData();
+ void blacklistedData_data();
+};
+
+void tst_SkipBlacklisted::pass()
+{
+ QVERIFY(true);
+}
+
+// This test have been blacklisted in skipblacklisted/BLACKLIST
+void tst_SkipBlacklisted::blacklisted()
+{
+ QFAIL("this line should never be reached, since we skip all blacklisted test functions");
+}
+
+// blacklisted 1 and blacklisted 2 have been blacklisted in skipblacklisted/BLACKLIST
+void tst_SkipBlacklisted::blacklistedData()
+{
+ QFETCH(int, testdata);
+ QCOMPARE(testdata, 2);
+}
+
+void tst_SkipBlacklisted::blacklistedData_data()
+{
+ QTest::addColumn<int>("testdata");
+
+ QTest::newRow("blacklisted 1") << 1;
+ QTest::newRow("should pass") << 2;
+ QTest::newRow("blacklisted 2") << 3;
+}
+
+QTEST_MAIN_WRAPPER(tst_SkipBlacklisted,
+ std::vector<const char*> args(argv, argv + argc);
+ args.push_back("-skipblacklisted");
+ argc = int(args.size());
+ argv = const_cast<char**>(&args[0]);
+ QTEST_MAIN_SETUP())
+
+#include "tst_skipblacklisted.moc"
diff --git a/tests/auto/testlib/selftests/skipcleanup/CMakeLists.txt b/tests/auto/testlib/selftests/skipcleanup/CMakeLists.txt
index 5af361e25a..36a643bf4d 100644
--- a/tests/auto/testlib/selftests/skipcleanup/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/skipcleanup/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from skipcleanup.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## skipcleanup Binary:
#####################################################################
qt_internal_add_executable(skipcleanup
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_skipcleanup.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(skipcleanup)
-# special case end
diff --git a/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp b/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp
index df26e09648..68053e4431 100644
--- a/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.cpp
+++ b/tests/auto/testlib/selftests/skipcleanup/tst_skipcleanup.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 <QTest>
@@ -33,7 +8,7 @@ class tst_SkipCleanup: public QObject
Q_OBJECT
private slots:
void aTestFunction() const;
- void cleanupTestCase() const;
+ void cleanup() const;
};
void tst_SkipCleanup::aTestFunction() const
@@ -41,9 +16,9 @@ void tst_SkipCleanup::aTestFunction() const
QVERIFY(true);
}
-void tst_SkipCleanup::cleanupTestCase() const
+void tst_SkipCleanup::cleanup() const
{
- QSKIP("Skip inside cleanupTestCase.");
+ QSKIP("Skip inside cleanup.");
}
QTEST_APPLESS_MAIN(tst_SkipCleanup)
diff --git a/tests/auto/testlib/selftests/skipcleanuptestcase/CMakeLists.txt b/tests/auto/testlib/selftests/skipcleanuptestcase/CMakeLists.txt
new file mode 100644
index 0000000000..88aae42acd
--- /dev/null
+++ b/tests/auto/testlib/selftests/skipcleanuptestcase/CMakeLists.txt
@@ -0,0 +1,18 @@
+#####################################################################
+## skipcleanuptestcase Binary:
+#####################################################################
+
+qt_internal_add_executable(skipcleanuptestcase
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+ SOURCES
+ tst_skipcleanuptestcase.cpp
+ LIBRARIES
+ Qt::Test
+)
+
+## Scopes:
+#####################################################################
+
+qt_internal_apply_testlib_coverage_options(skipcleanuptestcase)
diff --git a/tests/auto/testlib/selftests/skipcleanuptestcase/tst_skipcleanuptestcase.cpp b/tests/auto/testlib/selftests/skipcleanuptestcase/tst_skipcleanuptestcase.cpp
new file mode 100644
index 0000000000..72ff91590d
--- /dev/null
+++ b/tests/auto/testlib/selftests/skipcleanuptestcase/tst_skipcleanuptestcase.cpp
@@ -0,0 +1,25 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+
+class tst_SkipCleanupTestCase: public QObject
+{
+Q_OBJECT
+private slots:
+ void aTestFunction() const;
+ void cleanupTestCase() const;
+};
+
+void tst_SkipCleanupTestCase::aTestFunction() const
+{
+ QVERIFY(true);
+}
+
+void tst_SkipCleanupTestCase::cleanupTestCase() const
+{
+ QSKIP("Skip inside cleanupTestCase.");
+}
+
+QTEST_APPLESS_MAIN(tst_SkipCleanupTestCase)
+#include "tst_skipcleanuptestcase.moc"
diff --git a/tests/auto/testlib/selftests/skipinit/CMakeLists.txt b/tests/auto/testlib/selftests/skipinit/CMakeLists.txt
index 6cf2e97688..69fa7e3d42 100644
--- a/tests/auto/testlib/selftests/skipinit/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/skipinit/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from skipinit.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## skipinit Binary:
#####################################################################
qt_internal_add_executable(skipinit
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_skipinit.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(skipinit)
-# special case end
diff --git a/tests/auto/testlib/selftests/skipinit/tst_skipinit.cpp b/tests/auto/testlib/selftests/skipinit/tst_skipinit.cpp
index 832792800c..4975f1f029 100644
--- a/tests/auto/testlib/selftests/skipinit/tst_skipinit.cpp
+++ b/tests/auto/testlib/selftests/skipinit/tst_skipinit.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
diff --git a/tests/auto/testlib/selftests/skipinitdata/CMakeLists.txt b/tests/auto/testlib/selftests/skipinitdata/CMakeLists.txt
index cacc40af66..482564c51f 100644
--- a/tests/auto/testlib/selftests/skipinitdata/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/skipinitdata/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from skipinitdata.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## skipinitdata Binary:
#####################################################################
qt_internal_add_executable(skipinitdata
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_skipinitdata.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(skipinitdata)
-# special case end
diff --git a/tests/auto/testlib/selftests/skipinitdata/tst_skipinitdata.cpp b/tests/auto/testlib/selftests/skipinitdata/tst_skipinitdata.cpp
index f0f6055710..26725814db 100644
--- a/tests/auto/testlib/selftests/skipinitdata/tst_skipinitdata.cpp
+++ b/tests/auto/testlib/selftests/skipinitdata/tst_skipinitdata.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 <QTest>
diff --git a/tests/auto/testlib/selftests/sleep/CMakeLists.txt b/tests/auto/testlib/selftests/sleep/CMakeLists.txt
index 418c61bab9..2e789b59d7 100644
--- a/tests/auto/testlib/selftests/sleep/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/sleep/CMakeLists.txt
@@ -1,21 +1,22 @@
-# Generated from sleep.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## sleep Binary:
#####################################################################
qt_internal_add_executable(sleep
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_sleep.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
+ Qt::CorePrivate
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(sleep)
-# special case end
diff --git a/tests/auto/testlib/selftests/sleep/tst_sleep.cpp b/tests/auto/testlib/selftests/sleep/tst_sleep.cpp
index 20e80950c2..d9cd6959e5 100644
--- a/tests/auto/testlib/selftests/sleep/tst_sleep.cpp
+++ b/tests/auto/testlib/selftests/sleep/tst_sleep.cpp
@@ -1,36 +1,20 @@
-/****************************************************************************
-**
-** 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/QCoreApplication>
#include <QtCore/QElapsedTimer>
#include <QTest>
+#ifdef Q_OS_UNIX
+#include <QtCore/private/qcore_unix_p.h>
+#include <QtCore/qsystemdetection.h>
+
+#include <time.h>
+#endif
+
+using namespace std::chrono_literals;
+
class tst_Sleep: public QObject
{
Q_OBJECT
@@ -42,17 +26,21 @@ private slots:
void tst_Sleep::sleep()
{
+ // Subtracting 10ms as a margin for error
+ static constexpr auto MarginForError = 10ms;
+
QElapsedTimer t;
t.start();
+ // Test qSleep(int) overload, too
QTest::qSleep(100);
- QVERIFY(t.elapsed() > 90);
+ QCOMPARE_GT(t.durationElapsed(), 100ms - MarginForError);
- QTest::qSleep(1000);
- QVERIFY(t.elapsed() > 1000);
+ QTest::qSleep(1s);
+ QCOMPARE_GT(t.durationElapsed(), 1s - MarginForError);
- QTest::qSleep(1000 * 10); // 10 seconds
- QVERIFY(t.elapsed() > 1000 * 10);
+ QTest::qSleep(10s);
+ QCOMPARE_GT(t.durationElapsed(), 10s - MarginForError);
}
void tst_Sleep::wait()
@@ -61,16 +49,16 @@ void tst_Sleep::wait()
t.start();
QTest::qWait(1);
- QVERIFY(t.elapsed() >= 1);
+ QCOMPARE_GE(t.durationElapsed(), 1ms);
QTest::qWait(10);
- QVERIFY(t.elapsed() >= 11);
+ QCOMPARE_GE(t.durationElapsed(), 11ms);
QTest::qWait(100);
- QVERIFY(t.elapsed() >= 111);
+ QCOMPARE_GE(t.durationElapsed(), 111ms);
QTest::qWait(1000);
- QVERIFY(t.elapsed() >= 1111);
+ QCOMPARE_GE(t.durationElapsed(), 1111ms);
}
QTEST_MAIN(tst_Sleep)
diff --git a/tests/auto/testlib/selftests/strcmp/CMakeLists.txt b/tests/auto/testlib/selftests/strcmp/CMakeLists.txt
index 23919e5c32..8baaf92fa9 100644
--- a/tests/auto/testlib/selftests/strcmp/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/strcmp/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from strcmp.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## strcmp Binary:
#####################################################################
qt_internal_add_executable(strcmp
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_strcmp.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(strcmp)
-# special case end
diff --git a/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp b/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp
index 262299aebf..aefd9e08b9 100644
--- a/tests/auto/testlib/selftests/strcmp/tst_strcmp.cpp
+++ b/tests/auto/testlib/selftests/strcmp/tst_strcmp.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 <QtCore/QCoreApplication>
diff --git a/tests/auto/testlib/selftests/subtest/CMakeLists.txt b/tests/auto/testlib/selftests/subtest/CMakeLists.txt
index fc459b96e2..3dad026cf3 100644
--- a/tests/auto/testlib/selftests/subtest/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/subtest/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from subtest.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## subtest Binary:
#####################################################################
qt_internal_add_executable(subtest
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_subtest.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(subtest)
-# special case end
diff --git a/tests/auto/testlib/selftests/subtest/tst_subtest.cpp b/tests/auto/testlib/selftests/subtest/tst_subtest.cpp
index c5f5cd6c04..023c43e2af 100644
--- a/tests/auto/testlib/selftests/subtest/tst_subtest.cpp
+++ b/tests/auto/testlib/selftests/subtest/tst_subtest.cpp
@@ -1,31 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#undef QTEST_THROW_ON_FAILURE // code expects old behavior
+#undef QTEST_THROW_ON_SKIP // code expects old behavior
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
@@ -136,6 +113,7 @@ void tst_Subtest::test3()
void tst_Subtest::multiFail()
{
+ const QTest::ThrowOnFailDisabler nothrow; // tests repeated QFAILs
// Simulates tests which call a shared function that does common checks, or
// that do checks in code run asynchronously from a message loop.
for (int i = 0; i < 10; ++i)
@@ -145,6 +123,7 @@ void tst_Subtest::multiFail()
void tst_Subtest::multiSkip()
{
+ const QTest::ThrowOnSkipDisabler nothrow; // tests repeated QSKIPs
// Similar to multiFail()
for (int i = 0; i < 10; ++i)
[]() { QSKIP("This skip should be repeated ten times"); }();
diff --git a/tests/auto/testlib/selftests/testlib/CMakeLists.txt b/tests/auto/testlib/selftests/testlib/CMakeLists.txt
index 776f503bf2..f60ddb8865 100644
--- a/tests/auto/testlib/selftests/testlib/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/testlib/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from testlib.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## testlib Binary:
#####################################################################
qt_internal_add_executable(testlib
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_testlib.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(testlib)
-# special case end
diff --git a/tests/auto/testlib/selftests/testlib/tst_testlib.cpp b/tests/auto/testlib/selftests/testlib/tst_testlib.cpp
index e1df8d89b9..58e3e7ad33 100644
--- a/tests/auto/testlib/selftests/testlib/tst_testlib.cpp
+++ b/tests/auto/testlib/selftests/testlib/tst_testlib.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/QtMath>
@@ -39,7 +14,11 @@
class tst_TestLib : public QObject
{
-Q_OBJECT
+ Q_OBJECT
+
+public:
+ tst_TestLib();
+
private slots:
void basics() const;
void delays() const;
@@ -47,6 +26,14 @@ private slots:
void reals() const;
};
+tst_TestLib::tst_TestLib()
+{
+ // Set object name, so that it's printed out when some comparison fails.
+ // Othewise object address will be printed, which will not allow
+ // tst_sefltest to compare the output with expected.
+ setObjectName("TestObject");
+}
+
void tst_TestLib::basics() const
{
QVERIFY(QByteArray(QTest::currentAppName()).contains("testlib"));
diff --git a/tests/auto/testlib/selftests/tst_selftests.cpp b/tests/auto/testlib/selftests/tst_selftests.cpp
index 8aad22dec8..04185e95cd 100644
--- a/tests/auto/testlib/selftests/tst_selftests.cpp
+++ b/tests/auto/testlib/selftests/tst_selftests.cpp
@@ -1,35 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
-#if QT_CONFIG(process)
+QT_REQUIRE_CONFIG(process);
#if QT_CONFIG(temporaryfile)
# define USE_DIFF
@@ -50,6 +25,8 @@
#include <QtTest/private/qemulationdetector_p.h>
+using namespace Qt::StringLiterals;
+
struct BenchmarkResult
{
qint64 total;
@@ -220,6 +197,8 @@ bool compareOutput(const QString &logger, const QString &subdir,
continue;
if (actualLineBA.endsWith(" : failure location"))
continue;
+ if (actualLineBA.endsWith(" : message location"))
+ continue;
if (actualLineBA.startsWith("Config: Using QtTest library") // Text build string
|| actualLineBA.startsWith(" <QtBuild") // XML, Light XML build string
@@ -453,8 +432,8 @@ BenchmarkResult BenchmarkResult::parse(QString const& line, QString* error)
// format:
// "function","[globaltag:]tag","metric",value_per_iteration,total,iterations
QStringList split = line.split(',');
- if (split.count() != 6) {
- if (error) *error = QString("Wrong number of columns (%1)").arg(split.count());
+ if (split.size() != 6) {
+ if (error) *error = QString("Wrong number of columns (%1)").arg(split.size());
return out;
}
@@ -480,11 +459,13 @@ BenchmarkResult BenchmarkResult::parse(QString const& line, QString* error)
// This code avoids using a QRegExp because QRegExp might be broken.
// Sample format: 4,000 msec per iteration (total: 4,000, iterations: 1)
- QString sFirstNumber;
- while (!remaining.isEmpty() && !remaining.at(0).isSpace()) {
- sFirstNumber += remaining.at(0);
- remaining.remove(0,1);
- }
+ const auto begin = remaining.cbegin();
+ auto it = std::find_if(begin, remaining.cend(), [](const auto ch) {
+ return ch.isSpace();
+ });
+ QString sFirstNumber{std::distance(begin, it), Qt::Uninitialized};
+ std::move(begin, it, sFirstNumber.begin());
+ remaining.erase(begin, it);
remaining = remaining.trimmed();
// 4,000 -> 4000
@@ -657,6 +638,11 @@ bool TestLogger::shouldIgnoreTest(const QString &test) const
return true;
#endif
+ if (!qEnvironmentVariableIsEmpty("WAYLAND_DISPLAY")) {
+ qDebug() << "TestLogger::shouldIgnoreTest() ignore" << test << "on wayland/xwayland!";
+ return true;
+ }
+
// These tests are affected by timing and whether the CPU tick counter
// is monotonically increasing. They won't work on some machines so
// leave them off by default. Feel free to enable them for your own
@@ -674,7 +660,7 @@ bool TestLogger::shouldIgnoreTest(const QString &test) const
return true;
#endif
-#if defined(QT_NO_EXCEPTIONS) || defined(Q_CC_INTEL) || defined(Q_OS_WIN)
+#if defined(QT_NO_EXCEPTIONS) || defined(Q_OS_WIN)
// Disable this test on Windows or for Intel compiler, as the run-times
// will popup dialogs with warnings that uncaught exceptions were thrown
if (test == "exceptionthrow")
@@ -691,7 +677,7 @@ bool TestLogger::shouldIgnoreTest(const QString &test) const
#if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) && defined(Q_OS_LINUX)
// Check that it's actually available
QProcess checkProcess;
- QStringList args{u"--version"_qs};
+ QStringList args{u"--version"_s};
checkProcess.start("valgrind", args);
if (!checkProcess.waitForFinished(-1)) {
WARN("Valgrind broken or not available. Not running benchlibcallgrind test!");
@@ -713,7 +699,8 @@ bool TestLogger::shouldIgnoreTest(const QString &test) const
|| test == "benchliboptions"
|| test == "printdatatags"
|| test == "printdatatagswithglobaltags"
- || test == "silent")
+ || test == "silent"
+ || test == "silent_fatal")
return true;
// These tests produce variable output (callgrind because of #if-ery,
@@ -778,29 +765,30 @@ void checkErrorOutput(const QString &test, const QByteArray &errorOutput)
|| test == "benchlibcallgrind")
return;
-#ifdef Q_CC_MINGW
- if (test == "blacklisted" // calls qFatal()
- || test == "silent") // calls qFatal()
-#endif
- return;
-
#ifdef Q_OS_WIN
if (test == "crashes")
return; // Complains about uncaught exception
#endif
-#ifdef Q_OS_LINUX
- // QEMU outputs to stderr about uncaught signals
- if (QTestPrivate::isRunningArmOnX86() &&
- (test == "assert"
- || test == "blacklisted"
- || test == "crashes"
- || test == "faildatatype"
- || test == "failfetchtype"
- || test == "silent"
- ))
+#ifdef Q_OS_UNIX
+ if (test == "assert"
+ || test == "crashes"
+ || test == "failfetchtype"
+ || test == "faildatatype")
+ return; // Outputs "Received signal 6 (SIGABRT)"
+#endif
+
+ if (test == "silent_fatal") {
+#if defined(__SANITIZE_ADDRESS__) || __has_feature(address_sanitizer)
+ // Under ASan, this test is not silent
+ return;
+#elif defined(Q_CC_MINGW)
+ // Originally QTBUG-29014 (I can't reproduce this -Thiago)
return;
#endif
+ if (QTestPrivate::isRunningArmOnX86())
+ return; // QEMU outputs to stderr about uncaught signals
+ }
INFO(errorOutput.toStdString());
REQUIRE(errorOutput.isEmpty());
@@ -940,8 +928,11 @@ static QProcessEnvironment testEnvironment()
if (environment.isEmpty()) {
const QProcessEnvironment systemEnvironment = QProcessEnvironment::systemEnvironment();
const bool preserveLibPath = qEnvironmentVariableIsSet("QT_PRESERVE_TESTLIB_PATH");
- foreach (const QString &key, systemEnvironment.keys()) {
+ const auto envKeys = systemEnvironment.keys();
+ for (const QString &key : envKeys) {
const bool useVariable = key == "PATH" || key == "QT_QPA_PLATFORM"
+ || key == "QTEST_THROW_ON_FAIL"_L1 || key == "QTEST_THROW_ON_SKIP"_L1
+ || key == "ASAN_OPTIONS"
#if defined(Q_OS_QNX)
|| key == "GRAPHICS_ROOT" || key == "TZ"
#elif defined(Q_OS_UNIX)
@@ -986,8 +977,7 @@ TestProcessResult runTestProcess(const QString &test, const QStringList &argumen
const bool expectedCrash = test == "assert" || test == "exceptionthrow"
|| test == "fetchbogus" || test == "crashedterminate"
|| test == "faildatatype" || test == "failfetchtype"
- || test == "crashes" || test == "silent"
- || test == "blacklisted" || test == "watchdog";
+ || test == "crashes" || test == "silent_fatal" || test == "watchdog";
if (expectedCrash) {
environment.insert("QTEST_DISABLE_CORE_DUMP", "1");
@@ -1024,10 +1014,12 @@ TestProcessResult runTestProcess(const QString &test, const QStringList &argumen
return { process.exitCode(), standardOutput, standardError };
}
+enum class Throw { OnFail = 1 };
+
/*
Runs a single test and verifies the output against the expected results.
*/
-void runTest(const QString &test, const TestLoggers &requestedLoggers)
+void runTest(const QString &test, const TestLoggers &requestedLoggers, Throw throwing = {})
{
TestLoggers loggers;
for (auto logger : requestedLoggers) {
@@ -1041,6 +1033,10 @@ void runTest(const QString &test, const TestLoggers &requestedLoggers)
QStringList arguments;
for (auto logger : loggers)
arguments += logger.arguments(test);
+ if (throwing == Throw::OnFail) // don't distinguish between throwonfail/throwonskip
+ arguments += {"-throwonfail", "-throwonskip"};
+ else
+ arguments += {"-nothrowonfail", "-nothrowonskip"};
CAPTURE(test);
CAPTURE(arguments);
@@ -1067,9 +1063,9 @@ void runTest(const QString &test, const TestLoggers &requestedLoggers)
/*
Runs a single test and verifies the output against the expected result.
*/
-void runTest(const QString &test, const TestLogger &logger)
+void runTest(const QString &test, const TestLogger &logger, Throw t = {})
{
- runTest(test, TestLoggers{logger});
+ runTest(test, TestLoggers{logger}, t);
}
// ----------------------- Catch helpers -----------------------
@@ -1204,27 +1200,91 @@ TEST_CASE("All loggers can be enabled at the same time")
SCENARIO("Test output of the loggers is as expected")
{
static QStringList tests = QString(QT_STRINGIFY(SUBPROGRAMS)).split(' ');
+ if (QString override = qEnvironmentVariable("TST_SELFTEST_SUBPROGRAMS"); !override.isEmpty())
+ tests = override.split(' ', Qt::SkipEmptyParts);
auto logger = GENERATE(filter(isGenericCommandLineLogger, enums<QTestLog::LogMode>()));
GIVEN("The " << logger << " logger") {
for (QString test : tests) {
AND_GIVEN("The " << test << " subtest") {
- runTest(test, TestLogger(logger, StdoutOutput));
+ WHEN("Throwing on failure or skip") {
+ runTest(test, TestLogger(logger, StdoutOutput), Throw::OnFail);
+ }
+ WHEN("Returning on failure or skip") {
+ runTest(test, TestLogger(logger, StdoutOutput));
+ }
}
}
}
}
-#endif // QT_CONFIG(process)
+struct TestCase {
+ int expectedExitCode;
+ const char *cmdline;
+};
+
+SCENARIO("Exit code is as expected")
+{
+ // Listing of test command lines and expected exit codes
+ // NOTE: Use at least 2 spaces to separate arguments because some contain a space themselves.
+ const struct TestCase testCases[] = {
+ // 'pass' is a test with no data tags at all
+ { 0, "pass testNumber1" },
+ { 1, "pass unknownFunction" },
+ { 1, "pass testNumber1:blah" },
+ { 1, "pass testNumber1:blah:blue" },
+ // 'counting' is a test that has only local data tags
+ { 0, "counting testPassPass" },
+ { 0, "counting testPassPass:row 1" },
+ { 1, "counting testPassPass:blah" },
+ { 1, "counting testPassPass:blah:row 1" },
+ { 1, "counting testPassPass:blah:blue" },
+ // 'globaldata' is a test with global and local data tags
+ { 0, "globaldata testGlobal" },
+ { 0, "globaldata testGlobal:global=true" },
+ { 0, "globaldata testGlobal:local=true" },
+ { 0, "globaldata testGlobal:global=true:local=true" },
+ { 0, "globaldata testGlobal -repeat 2" },
+ { 1, "globaldata testGlobal:local=true:global=true" },
+ { 1, "globaldata testGlobal:global=true:blah" },
+ { 1, "globaldata testGlobal:blah:local=true" },
+ { 1, "globaldata testGlobal:blah:global=true" },
+ { 1, "globaldata testGlobal:blah" },
+ { 1, "globaldata testGlobal:blah:blue" },
+ // Passing multiple testcase:data on the command line
+ { 0, "globaldata testGlobal:global=true skipSingle:global=true:local=true" },
+ { 1, "globaldata testGlobal:blah skipSingle:global=true:local=true" },
+ { 1, "globaldata testGlobal:global=true skipSingle:blah" },
+ { 2, "globaldata testGlobal:blah skipSingle:blue" },
+ // Passing -repeat argument
+ { 1, "pass testNumber1 -repeat" },
+ { 0, "pass testNumber1 -repeat 1" },
+ { 0, "pass testNumber1 -repeat 1 -o out.xml,xml" },
+ { 0, "pass testNumber1 -repeat 2" },
+ { 0, "pass testNumber1 -repeat 2 -o -,txt" },
+ { 0, "pass testNumber1 -repeat 2 -o -,txt -o log.txt,txt" },
+ { 1, "pass testNumber1 -repeat 2 -o log.xml,xml" },
+ { 1, "pass testNumber1 -repeat 2 -o -,txt -o -,xml" },
+ };
+
+ size_t n_testCases = sizeof(testCases) / sizeof(*testCases);
+ for (size_t i = 0; i < n_testCases; i++) {
+ GIVEN("The command line: " << testCases[i].cmdline) {
+ const QStringList cmdSplit = QString(testCases[i].cmdline)
+ .split(QRegularExpression(" +")); // at least 2 spaces
+ const QString test = cmdSplit[0];
+ const QStringList args = cmdSplit.sliced(1);
+ auto runResult = runTestProcess(test, args);
+ REQUIRE(runResult.exitCode == testCases[i].expectedExitCode);
+ }
+ }
+}
// ----------------------- Entrypoint -----------------------
int main(int argc, char **argv)
{
-#if !QT_CONFIG(process)
- return 0;
-#else
std::vector<const char*> args(argv, argv + argc);
static auto kRebaseArgument = "--rebase";
@@ -1272,6 +1332,5 @@ int main(int argc, char **argv)
}
return result;
-#endif
}
diff --git a/tests/auto/testlib/selftests/tuplediagnostics/CMakeLists.txt b/tests/auto/testlib/selftests/tuplediagnostics/CMakeLists.txt
index bf72eeae0b..b79e2407b8 100644
--- a/tests/auto/testlib/selftests/tuplediagnostics/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/tuplediagnostics/CMakeLists.txt
@@ -1,18 +1,18 @@
-# Generated from tuplediagnostics.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tuplediagnostics Binary:
#####################################################################
qt_internal_add_executable(tuplediagnostics
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_tuplediagnostics.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
-# special case begin
qt_internal_apply_testlib_coverage_options(tuplediagnostics)
-# special case end
diff --git a/tests/auto/testlib/selftests/tuplediagnostics/tst_tuplediagnostics.cpp b/tests/auto/testlib/selftests/tuplediagnostics/tst_tuplediagnostics.cpp
index 37786f3986..065fe6c603 100644
--- a/tests/auto/testlib/selftests/tuplediagnostics/tst_tuplediagnostics.cpp
+++ b/tests/auto/testlib/selftests/tuplediagnostics/tst_tuplediagnostics.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Samuel Gaist <samuel.gaist@edeltech.ch>
-** 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 Samuel Gaist <samuel.gaist@edeltech.ch>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Make sure we get a real Q_ASSERT even in release builds
#ifdef QT_NO_DEBUG
diff --git a/tests/auto/testlib/selftests/verbose1/CMakeLists.txt b/tests/auto/testlib/selftests/verbose1/CMakeLists.txt
index 7f60820111..2c644dff92 100644
--- a/tests/auto/testlib/selftests/verbose1/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/verbose1/CMakeLists.txt
@@ -1,23 +1,23 @@
-# Generated from verbose1.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## verbose1 Binary:
#####################################################################
qt_internal_add_executable(verbose1
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
../counting/tst_counting.cpp
DEFINES
- TESTLIB_VERBOSITY_ARG=-v1 # special case remove quotes
- PUBLIC_LIBRARIES
+ TESTLIB_VERBOSITY_ARG=-v1
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(verbose1)
-# special case end
diff --git a/tests/auto/testlib/selftests/verbose2/CMakeLists.txt b/tests/auto/testlib/selftests/verbose2/CMakeLists.txt
index 63eae28728..b78c5a42d0 100644
--- a/tests/auto/testlib/selftests/verbose2/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/verbose2/CMakeLists.txt
@@ -1,23 +1,23 @@
-# Generated from verbose2.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## verbose2 Binary:
#####################################################################
qt_internal_add_executable(verbose2
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
../counting/tst_counting.cpp
DEFINES
- TESTLIB_VERBOSITY_ARG=-v2 # special case remove quotes
- PUBLIC_LIBRARIES
+ TESTLIB_VERBOSITY_ARG=-v2
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(verbose2)
-# special case end
diff --git a/tests/auto/testlib/selftests/verifyexceptionthrown/CMakeLists.txt b/tests/auto/testlib/selftests/verifyexceptionthrown/CMakeLists.txt
index b6177bc8c3..c4312959ad 100644
--- a/tests/auto/testlib/selftests/verifyexceptionthrown/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/verifyexceptionthrown/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from verifyexceptionthrown.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## verifyexceptionthrown Binary:
@@ -6,17 +7,15 @@
qt_internal_add_executable(verifyexceptionthrown
EXCEPTIONS
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_verifyexceptionthrown.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(verifyexceptionthrown)
-# special case end
diff --git a/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp b/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp
index 8276ad76b8..a7b45f30f9 100644
--- a/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.cpp
+++ b/tests/auto/testlib/selftests/verifyexceptionthrown/tst_verifyexceptionthrown.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 <QTest>
diff --git a/tests/auto/testlib/selftests/warnings/CMakeLists.txt b/tests/auto/testlib/selftests/warnings/CMakeLists.txt
index 178a807726..553a023a90 100644
--- a/tests/auto/testlib/selftests/warnings/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/warnings/CMakeLists.txt
@@ -1,21 +1,21 @@
-# Generated from warnings.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## warnings Binary:
#####################################################################
qt_internal_add_executable(warnings
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_warnings.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(warnings)
-# special case end
diff --git a/tests/auto/testlib/selftests/warnings/tst_warnings.cpp b/tests/auto/testlib/selftests/warnings/tst_warnings.cpp
index 40ebb17561..5add39ac88 100644
--- a/tests/auto/testlib/selftests/warnings/tst_warnings.cpp
+++ b/tests/auto/testlib/selftests/warnings/tst_warnings.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** 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
+#undef QTEST_THROW_ON_FAILURE // fails ### investigate
#include <QtCore/QCoreApplication>
#include <QtCore/QRegularExpression>
@@ -52,6 +28,7 @@ private slots:
void testFailOnWarningsThenSkip();
#endif
void testFailOnWarningsAndIgnoreWarnings();
+ void testFailOnTemporaryObjectDestruction();
};
void tst_Warnings::testWarnings()
@@ -140,7 +117,7 @@ void tst_Warnings::testMissingWarningsWithData()
void tst_Warnings::testFailOnWarnings()
{
- // failOnWarnings() wasn't called yet; shouldn't fail;
+ // failOnWarning() wasn't called yet; shouldn't fail;
qWarning("Ran out of space!");
#if QT_CONFIG(regularexpression)
@@ -207,6 +184,7 @@ void tst_Warnings::testFailOnWarningsWithData()
void tst_Warnings::testFailOnWarningsFailInHelper()
{
+ const QTest::ThrowOnFailDisabler nothrow; // tests repeated QFAILs
[](){ QFAIL("This failure message should be printed but not cause the test to abort"); }();
// So we've already failed, but we get more messages - that don't increment counters.
const auto warnRegex = QRegularExpression("Ran out of .*!");
@@ -233,6 +211,27 @@ void tst_Warnings::testFailOnWarningsAndIgnoreWarnings()
qWarning(warningStr);
}
+void tst_Warnings::testFailOnTemporaryObjectDestruction()
+{
+ QTest::failOnWarning("Running low on toothpaste!");
+ QTest::ignoreMessage(QtWarningMsg, "Ran out of cabbage!");
+
+ class TestObject : public QObject
+ {
+ public:
+ ~TestObject()
+ {
+ // Shouldn't fail - ignored
+ qWarning("Ran out of cabbage!");
+ // Should fail
+ qWarning("Running low on toothpaste!");
+ }
+ };
+
+ QScopedPointer<TestObject, QScopedPointerDeleteLater> testObject(new TestObject);
+ QVERIFY(testObject);
+}
+
QTEST_MAIN(tst_Warnings)
#include "tst_warnings.moc"
diff --git a/tests/auto/testlib/selftests/watchdog/CMakeLists.txt b/tests/auto/testlib/selftests/watchdog/CMakeLists.txt
index 1515e50619..21beab6454 100644
--- a/tests/auto/testlib/selftests/watchdog/CMakeLists.txt
+++ b/tests/auto/testlib/selftests/watchdog/CMakeLists.txt
@@ -1,26 +1,21 @@
-# Generated from watchdog.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## watchdog Binary:
#####################################################################
qt_internal_add_executable(watchdog
- NO_INSTALL # special case
- OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} # special case
+ NO_INSTALL
+ EXCEPTIONS
+ OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
SOURCES
tst_watchdog.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
-#### Keys ignored in scope 1:.:.:watchdog.pro:<TRUE>:
-# QT_TOOL_ENV = "checkenv"
-# checkenv.name = "QTEST_FUNCTION_TIMEOUT"
-# checkenv.value = "100"
-
## Scopes:
#####################################################################
-# special case begin
qt_internal_apply_testlib_coverage_options(watchdog)
-# special case end
diff --git a/tests/auto/testlib/selftests/watchdog/tst_watchdog.cpp b/tests/auto/testlib/selftests/watchdog/tst_watchdog.cpp
index 28252f6aca..2bc8853e00 100644
--- a/tests/auto/testlib/selftests/watchdog/tst_watchdog.cpp
+++ b/tests/auto/testlib/selftests/watchdog/tst_watchdog.cpp
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
+using namespace std::chrono_literals;
+
class tst_Watchdog : public QObject
{
Q_OBJECT
@@ -38,10 +15,9 @@ private slots:
void tst_Watchdog::delay() const
{
bool ok = false;
- const int fiveMinutes = 5 * 60 * 1000;
// Use the same env.var as the watch-dog and add a little to it:
const int timeout = qEnvironmentVariableIntValue("QTEST_FUNCTION_TIMEOUT", &ok);
- QTest::qSleep(5000 + (ok && timeout > 0 ? timeout : fiveMinutes));
+ QTest::qSleep(5s + (ok && timeout > 0 ? timeout * 1ms : 5min));
// The watchdog timer should have interrupted us by now.
QFAIL("ERROR: this function should be interrupted.");
}
diff --git a/tests/auto/testlib/tostring/CMakeLists.txt b/tests/auto/testlib/tostring/CMakeLists.txt
new file mode 100644
index 0000000000..cb0bdff847
--- /dev/null
+++ b/tests/auto/testlib/tostring/CMakeLists.txt
@@ -0,0 +1,13 @@
+# Copyright (C) 2023 Intel Corporation.
+# 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_tostring LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_tostring
+ SOURCES
+ tst_tostring.cpp
+)
diff --git a/tests/auto/testlib/tostring/tst_tostring.cpp b/tests/auto/testlib/tostring/tst_tostring.cpp
new file mode 100644
index 0000000000..8d3c59f257
--- /dev/null
+++ b/tests/auto/testlib/tostring/tst_tostring.cpp
@@ -0,0 +1,215 @@
+// Copyright (C) 2023 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+
+#include <QtCore/qtypes.h>
+
+#include <memory>
+
+#include <q20chrono.h>
+
+using ToStringFunction = std::function<char *()>;
+class tst_toString : public QObject
+{
+ Q_OBJECT
+private:
+ void addColumns();
+ void testRows();
+private slots:
+ void int128();
+
+ void chrono_duration_data();
+ void chrono_duration() { testRows(); }
+};
+
+void tst_toString::addColumns()
+{
+ QTest::addColumn<ToStringFunction>("fn");
+ QTest::addColumn<QByteArray>("expected");
+ QTest::addColumn<QByteArrayView>("expr");
+ QTest::addColumn<QByteArrayView>("file");
+ QTest::addColumn<int>("line");
+}
+
+void tst_toString::testRows()
+{
+ QFETCH(ToStringFunction, fn);
+ QFETCH(const QByteArray, expected);
+ QFETCH(QByteArrayView, expr);
+ QFETCH(QByteArrayView, file);
+ QFETCH(int, line);
+
+ std::unique_ptr<char []> ptr{fn()};
+ const auto len = qstrlen(ptr.get());
+ QTest::qCompare(ptr.get(), expected, expr.data(), expected.data(), file.data(), line);
+ if (QTest::currentTestFailed()) {
+ qDebug("tail diff:\n"
+ " actual:%s\n"
+ " expected:%s",
+ ptr.get() + len - std::min(size_t{40}, len),
+ expected.data() + expected.size() - std::min(qsizetype{40}, expected.size()));
+ }
+}
+
+template <typename T> void addRow(QByteArrayView name, T &&value, QByteArrayView expression,
+ const QByteArray &expected, QByteArrayView file, int line)
+{
+ ToStringFunction fn = [v = std::move(value)]() { return QTest::toString(v); };
+ QTest::newRow(name.data()) << fn << expected << expression << file << line;
+}
+
+#define ADD_ROW(name, expr, expected) \
+ ::addRow(name, expr, #expr, expected, __FILE__, __LINE__)
+
+void tst_toString::int128()
+{
+#ifndef QT_SUPPORTS_INT128
+ QSKIP("This test requires int128 support enabled in the compiler.");
+#else
+ // ### port to data-driven once QVariant has support for qint128/quint128
+ std::unique_ptr<char[]> s;
+
+ {
+ // build Q_INT128_MIN without using Q_INT128_ macros,
+ // because we use Q_INT128_MIN in the impl
+ qint128 accu = 1701411834604692317LL;
+ accu *= 1000000000000000000LL;
+ accu += 316873037158841057LL;
+ accu *= -100;
+ accu -= 28;
+ QCOMPARE_EQ(accu, Q_INT128_MIN);
+ s.reset(QTest::toString(accu));
+ QCOMPARE(s.get(), "-170141183460469231731687303715884105728");
+ }
+
+ // now test with the macro, too:
+ s.reset(QTest::toString(Q_INT128_MIN));
+ QCOMPARE(s.get(), "-170141183460469231731687303715884105728");
+
+ s.reset(QTest::toString(Q_INT128_MIN + 1));
+ QCOMPARE(s.get(), "-170141183460469231731687303715884105727");
+
+ s.reset(QTest::toString(Q_INT128_MAX));
+ QCOMPARE(s.get(), "170141183460469231731687303715884105727");
+
+ s.reset(QTest::toString(Q_INT128_MAX - 1));
+ QCOMPARE(s.get(), "170141183460469231731687303715884105726");
+
+ s.reset(QTest::toString(Q_UINT128_MAX));
+ QCOMPARE(s.get(), "340282366920938463463374607431768211455");
+
+ s.reset(QTest::toString(Q_UINT128_MAX - 1));
+ QCOMPARE(s.get(), "340282366920938463463374607431768211454");
+
+ s.reset(QTest::toString(quint128{0}));
+ QCOMPARE(s.get(), "0");
+
+ s.reset(QTest::toString(qint128{0}));
+ QCOMPARE(s.get(), "0");
+
+ s.reset(QTest::toString(qint128{-1}));
+ QCOMPARE(s.get(), "-1");
+#endif // QT_SUPPORTS_INT128
+}
+
+void tst_toString::chrono_duration_data()
+{
+ addColumns();
+
+ using namespace std::chrono;
+ using namespace q20::chrono;
+
+ using attoseconds = duration<int64_t, std::atto>;
+ using femtoseconds = duration<int64_t, std::femto>;
+ using picoseconds = duration<int64_t, std::pico>;
+ using centiseconds = duration<int64_t, std::centi>;
+ using deciseconds = duration<int64_t, std::deci>;
+ using kiloseconds = duration<int64_t, std::kilo>;
+ using decades = duration<int, std::ratio_multiply<years::period, std::deca>>; // decayears
+ using centuries = duration<int16_t, std::ratio_multiply<years::period, std::hecto>>; // hectoyears
+ using millennia = duration<int16_t, std::ratio_multiply<years::period, std::kilo>>; // kiloyears
+ using gigayears [[maybe_unused]] = duration<int8_t, std::ratio_multiply<years::period, std::giga>>;
+ using fortnights = duration<int, std::ratio_multiply<days::period, std::ratio<14>>>;
+ using microfortnights = duration<int64_t, std::ratio_multiply<fortnights::period, std::micro>>;
+ using meter_per_light = duration<int64_t, std::ratio<1, 299'792'458>>;
+ using kilometer_per_light = duration<int64_t, std::ratio<1000, 299'792'458>>;
+ using AU_per_light = duration<int64_t, std::ratio<149'597'871'800, 299'792'458>>;
+ using pstn_rate = duration<int64_t, std::ratio<1, 8000>>; // PSTN sampling rate (8 kHz)
+ using hyperfine = duration<int64_t, std::ratio<1, 9'192'631'770>>; // definition of second
+
+ ADD_ROW("1as", attoseconds{1}, "1as (1e-18s)"); // from Norwegian "atten" (18)
+ ADD_ROW("1fs", femtoseconds{1}, "1fs (1e-15s)"); // from Norwegian "femten" (15)
+ ADD_ROW("1ps", picoseconds{1}, "1ps (1e-12s)"); // from Italian piccolo?
+ ADD_ROW("0ns", 0ns, "0ns (0s)");
+ ADD_ROW("1000ns", 1000ns, "1000ns (1e-06s)");
+ ADD_ROW("1us", 1us, "1us (1e-06s)");
+ ADD_ROW("125us", 125us, "125us (0.000125s)");
+ ADD_ROW("0ms", 0ms, "0ms (0s)");
+ ADD_ROW("-1s", -1s, "-1s");
+ ADD_ROW("0s", 0s, "0s");
+ ADD_ROW("1cs", centiseconds{1}, "1cs (0.01s)");
+ ADD_ROW("2ds", deciseconds{2}, "2ds (0.2s)");
+ ADD_ROW("1s", 1s, "1s");
+ ADD_ROW("60s", 60s, "60s");
+ ADD_ROW("1min", 1min, "1min (60s)");
+ ADD_ROW("1h", 1h, "1h (3600s)");
+ ADD_ROW("1days", days{1}, "1d (86400s)");
+ ADD_ROW("7days", days{7}, "7d (604800s)");
+ ADD_ROW("1weeks", weeks{1}, "1wk (604800s)");
+ ADD_ROW("365days", days{365}, "365d (31536000s)");
+ ADD_ROW("1years", years{1}, "1yr (31556952s)"); // 365.2425 days
+
+ ADD_ROW("2ks", kiloseconds{2}, "2[1000]s (2000s)");
+ ADD_ROW("1fortnights", fortnights{1}, "1[2]wk (1209600s)");
+ ADD_ROW("1decades", decades{1}, "1[10]yr (315569520s)");
+ ADD_ROW("1centuries", centuries{1}, "1[100]yr (3.1556952e+09s)");
+ ADD_ROW("1millennia", millennia{1}, "1[1000]yr (3.1556952e+10s)");
+#if defined(Q_OS_LINUX) || defined(Q_OS_DARWIN)
+ // some OSes print the exponent differently
+ ADD_ROW("13gigayears", gigayears{13}, "13[1e+09]yr (4.10240376e+17s)");
+#endif
+
+ // months are one twelfth of a Gregorian year, not 30 days
+ ADD_ROW("1months", months{1}, "1[2629746]s (2629746s)");
+ ADD_ROW("12months", months{12}, "12[2629746]s (31556952s)");
+
+ // weird units
+ ADD_ROW("2microfortnights", microfortnights{2}, "2[756/625]s (2.4192s)");
+ ADD_ROW("1pstn_rate", pstn_rate{1}, "1[1/8000]s (0.000125s)"); // 125µs
+ ADD_ROW("10m/c", meter_per_light{10}, "10[1/299792458]s (3.33564095e-08s)");
+ ADD_ROW("10km/c", kilometer_per_light{10}, "10[500/149896229]s (3.33564095e-05s)");
+ ADD_ROW("1AU/c", AU_per_light{1}, "1[74798935900/149896229]s (499.004788s)");
+ ADD_ROW("Cs133-hyperfine", hyperfine{1}, "1[1/9192631770]s (1.08782776e-10s)");
+ ADD_ROW("1sec-definition", hyperfine{9'192'631'770}, "9192631770[1/9192631770]s (1s)");
+ ADD_ROW("8000pstn_rate", pstn_rate{8000}, "8000[1/8000]s (1s)");
+
+ // real floting point
+ // current (2023) best estimate is 13.813 ± 0.038 billion years (Plank Collaboration)
+ using universe [[maybe_unused]] = duration<double, std::ratio_multiply<std::ratio<13'813'000'000>, years::period>>;
+ using fpksec = duration<double, std::kilo>;
+ using fpsec = duration<double>;
+ using fpmsec = duration<double, std::milli>;
+ using fpnsec = duration<double, std::nano>;
+ using fpGyr [[maybe_unused]] = duration<double, std::ratio_multiply<years::period, std::giga>>;
+
+ ADD_ROW("1.0s", fpsec{1}, "1s");
+ ADD_ROW("1.5s", fpsec{1.5}, "1.5s");
+ ADD_ROW("-1.0ms", fpmsec{-1}, "-1ms (-0.001s)");
+ ADD_ROW("1.5ms", fpmsec{1.5}, "1.5ms (0.0015s)");
+ ADD_ROW("1.0ns", fpnsec{1}, "1ns (1e-09s)");
+ ADD_ROW("-1.5ns", fpnsec{-1.5}, "-1.5ns (-1.5e-09s)");
+ ADD_ROW("1.0ks", fpksec{1}, "1[1000]s (1000s)");
+ ADD_ROW("-1.5ks", fpksec{-1.5}, "-1.5[1000]s (-1500s)");
+ ADD_ROW("1.0zs", fpsec{1e-21}, "1e-21s"); // zeptosecond
+ ADD_ROW("1.0ys", fpsec{1e-24}, "1e-24s"); // yoctosecond
+ ADD_ROW("planck-time", fpsec(5.39124760e-44), "5.3912476e-44s");
+#if defined(Q_OS_LINUX) || defined(Q_OS_DARWIN)
+ // some OSes print the exponent differently
+ ADD_ROW("13.813Gyr", fpGyr(13.813), "13.813[1e+09]yr (4.35896178e+17s)");
+ ADD_ROW("1universe", universe{1}, "1[1.3813e+10]yr (4.35896178e+17s)");
+#endif
+}
+
+QTEST_APPLESS_MAIN(tst_toString)
+#include "tst_tostring.moc"
diff --git a/tests/auto/tools/CMakeLists.txt b/tests/auto/tools/CMakeLists.txt
index 8a827d11e4..ffeb228cf3 100644
--- a/tests/auto/tools/CMakeLists.txt
+++ b/tests/auto/tools/CMakeLists.txt
@@ -1,21 +1,26 @@
-# Generated from tools.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# QTBUG-88538 # special case
+# QTBUG-88538
if(NOT ANDROID AND NOT IOS)
add_subdirectory(qmakelib)
- add_subdirectory(qmake)
+ if(QT_FEATURE_qmake)
+ add_subdirectory(qmake)
+ endif()
add_subdirectory(moc)
add_subdirectory(rcc)
+ add_subdirectory(qt_cmake_create)
endif()
-# QTBUG-88538 # special case
+# QTBUG-88538
if(TARGET Qt::Widgets AND NOT ANDROID AND NOT IOS)
add_subdirectory(uic)
endif()
-if(TARGET Qt::DBus)
+if(run_dbus_tests)
add_subdirectory(qdbuscpp2xml)
add_subdirectory(qdbusxml2cpp)
endif()
-if(QT_FEATURE_process AND NOT CMAKE_CROSSCOMPILING)
+if(TARGET Qt::Gui AND QT_FEATURE_process AND NOT CMAKE_CROSSCOMPILING)
+ # testapp (windeployqt) and source_basicapp (macdeployqt) require QtGui.
if(QT_FEATURE_macdeployqt)
add_subdirectory(macdeployqt)
endif()
diff --git a/tests/auto/tools/macdeployqt/CMakeLists.txt b/tests/auto/tools/macdeployqt/CMakeLists.txt
index 073c2a9e70..5120b474ae 100644
--- a/tests/auto/tools/macdeployqt/CMakeLists.txt
+++ b/tests/auto/tools/macdeployqt/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from macdeployqt.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_macdeployqt Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_macdeployqt LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_macdeployqt
SOURCES
tst_macdeployqt.cpp
diff --git a/tests/auto/tools/macdeployqt/source_basicapp/main.cpp b/tests/auto/tools/macdeployqt/source_basicapp/main.cpp
index 093a882f32..1e2bb1a3a6 100644
--- a/tests/auto/tools/macdeployqt/source_basicapp/main.cpp
+++ b/tests/auto/tools/macdeployqt/source_basicapp/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QGuiApplication>
#include <QRasterWindow>
diff --git a/tests/auto/tools/macdeployqt/source_plugin_sqlite/main.cpp b/tests/auto/tools/macdeployqt/source_plugin_sqlite/main.cpp
index 31e2e8117c..12343141f8 100644
--- a/tests/auto/tools/macdeployqt/source_plugin_sqlite/main.cpp
+++ b/tests/auto/tools/macdeployqt/source_plugin_sqlite/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtSql>
diff --git a/tests/auto/tools/macdeployqt/source_plugin_tls/main.cpp b/tests/auto/tools/macdeployqt/source_plugin_tls/main.cpp
index 7d1070b2c5..61b5edd614 100644
--- a/tests/auto/tools/macdeployqt/source_plugin_tls/main.cpp
+++ b/tests/auto/tools/macdeployqt/source_plugin_tls/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtNetwork>
diff --git a/tests/auto/tools/macdeployqt/tst_macdeployqt.cpp b/tests/auto/tools/macdeployqt/tst_macdeployqt.cpp
index 8922025570..3c17acda56 100644
--- a/tests/auto/tools/macdeployqt/tst_macdeployqt.cpp
+++ b/tests/auto/tools/macdeployqt/tst_macdeployqt.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** 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>
#include <QtTest>
-bool g_testDirectoryBuild = false; // toggle to keep build output for debugging.
+Q_LOGGING_CATEGORY(lcTests, "qt.tools.tests")
+
QTemporaryDir *g_temporaryDirectory;
QString g_macdeployqtBinary;
QString g_qmakeBinary;
@@ -59,6 +35,24 @@ static bool runProcess(const QString &binary,
process.setProcessEnvironment(env);
if (!workingDir.isEmpty())
process.setWorkingDirectory(workingDir);
+
+ const auto outputReader = qScopeGuard([&] {
+ QByteArray standardOutput = process.readAllStandardOutput();
+ if (!standardOutput.trimmed().isEmpty())
+ qCDebug(lcTests).nospace() << "Standard output:\n" << qUtf8Printable(standardOutput.trimmed());
+ if (stdOut)
+ *stdOut = standardOutput;
+ QByteArray standardError = process.readAllStandardError();
+ if (!standardError.trimmed().isEmpty())
+ qCDebug(lcTests).nospace() << "Standard error:\n" << qUtf8Printable(standardError.trimmed());
+ if (stdErr)
+ *stdErr = standardError;
+ });
+
+ qCDebug(lcTests).noquote() << "Running" << binary
+ << "with arguments" << arguments
+ << "in" << workingDir;
+
process.start(binary, arguments, QIODevice::ReadOnly);
if (!process.waitForStarted()) {
*errorMessage = msgProcessError(process, "Failed to start");
@@ -71,10 +65,7 @@ static bool runProcess(const QString &binary,
process.kill();
return false;
}
- if (stdOut)
- *stdOut = process.readAllStandardOutput();
- if (stdErr)
- *stdErr= process.readAllStandardError();
+
if (process.exitStatus() != QProcess::NormalExit) {
*errorMessage = msgProcessError(process, "Crashed");
return false;
@@ -116,8 +107,6 @@ QString sourcePath(const QString &name)
QString buildPath(const QString &name)
{
- if (g_testDirectoryBuild)
- return "build_" + name;
return g_temporaryDirectory->path() + "/build_" + name;
}
@@ -173,26 +162,14 @@ bool deploy(const QString &name, const QStringList &options, QString *errorMessa
QString bundle = name + ".app";
QString path = buildPath(name);
QStringList args = QStringList() << bundle << options;
+#if defined(QT_DEBUG)
+ args << "-use-debug-libs";
+#endif
+ if (lcTests().isDebugEnabled())
+ args << "-verbose=3";
return runProcess(g_macdeployqtBinary, args, errorMessage, path);
}
-bool debugDeploy(const QString &name, const QStringList &options, QString *errorMessage)
-{
- QString bundle = name + ".app";
- QString path = buildPath(name);
- QStringList args = QStringList() << bundle << options << "-verbose=3";
- QByteArray stdOut;
- QByteArray stdErr;
- bool exitOK = runProcess(g_macdeployqtBinary, args, errorMessage, path, QProcessEnvironment(),
- 10000, &stdOut, &stdErr);
-
- qDebug() << "macdeployqt exit OK" << exitOK;
- qDebug() << qPrintable(stdOut);
- qDebug() << qPrintable(stdErr);
-
- return exitOK;
-}
-
bool run(const QString &name, QString *errorMessage)
{
QString path = buildPath(name);
@@ -222,11 +199,11 @@ void runVerifyDeployment(const QString &name)
const QList<QString> parts = QString::fromLocal8Bit(libraries).split("dyld: loaded:");
const QString qtPath = QLibraryInfo::path(QLibraryInfo::PrefixPath);
// Let assume Qt is not installed in system
- foreach (QString part, parts) {
- part = part.trimmed();
- if (part.isEmpty())
+ for (const QString &part : parts) {
+ const auto trimmed = part.trimmed();
+ if (trimmed.isEmpty())
continue;
- QVERIFY(!parts.startsWith(qtPath));
+ QVERIFY(!trimmed.startsWith(qtPath));
}
}
@@ -249,6 +226,7 @@ void tst_macdeployqt::initTestCase()
// Set up test-global unique temporary directory
g_temporaryDirectory = new QTemporaryDir();
+ g_temporaryDirectory->setAutoRemove(!lcTests().isDebugEnabled());
QVERIFY(g_temporaryDirectory->isValid());
// Locate build and deployment tools
diff --git a/tests/auto/tools/moc/CMakeLists.txt b/tests/auto/tools/moc/CMakeLists.txt
index 44c9ee3fa9..1377c48306 100644
--- a/tests/auto/tools/moc/CMakeLists.txt
+++ b/tests/auto/tools/moc/CMakeLists.txt
@@ -1,10 +1,15 @@
-# special case skip regeneration
-# Generated from moc.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_moc Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_moc LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
set(JSON_HEADERS
backslash-newlines.h
@@ -25,6 +30,7 @@ set(JSON_HEADERS
moc_include.h
namespace.h
namespaced-flags.h
+ namespaced-base-class.h
no-keywords.h
non-gadget-parent-class.h
oldstyle-casts.h
@@ -38,6 +44,7 @@ set(JSON_HEADERS
related-metaobjects-in-gadget.h
related-metaobjects-in-namespaces.h
related-metaobjects-name-conflict.h
+ signal-with-default-arg.h
single-quote-digit-separator-n3781.h
single_function_keyword.h
slots-with-void-template.h
@@ -78,7 +85,7 @@ qt_internal_add_test(tst_moc
EXCEPTIONS
)
-qt_internal_extend_target(tst_moc PUBLIC_LIBRARIES Qt::CorePrivate)
+qt_internal_extend_target(tst_moc LIBRARIES Qt::CorePrivate)
qt_internal_extend_target(tst_moc CONDITION CMAKE_CROSSCOMPILING
DEFINES
@@ -102,22 +109,22 @@ qt_internal_extend_target(tst_moc CONDITION CLANG OR GCC
)
qt_internal_extend_target(tst_moc CONDITION TARGET Qt::DBus
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
qt_internal_extend_target(tst_moc CONDITION TARGET Qt::Concurrent
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Concurrent
)
qt_internal_extend_target(tst_moc CONDITION TARGET Qt::Network
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
qt_internal_extend_target(tst_moc CONDITION TARGET Qt::Sql
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Sql
)
@@ -142,4 +149,11 @@ add_custom_command(TARGET tst_moc
-o "allmocs.json"
--collect-json "@${moc_json_out}"
COMMENT "Running moc with --collect-json"
+ VERBATIM
+)
+
+# Add dependencies that are implicitly used inside the test
+add_dependencies(tst_moc
+ Qt::qtpaths
+ Qt::moc
)
diff --git a/tests/auto/tools/moc/Test.framework/Headers/testinterface.h b/tests/auto/tools/moc/Test.framework/Headers/testinterface.h
index 491e42772b..486648e312 100644
--- a/tests/auto/tools/moc/Test.framework/Headers/testinterface.h
+++ b/tests/auto/tools/moc/Test.framework/Headers/testinterface.h
@@ -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
#ifndef TESTINTERFACE_H
#define TESTINTERFACE_H
diff --git a/tests/auto/tools/moc/allmocs_baseline_in.json b/tests/auto/tools/moc/allmocs_baseline_in.json
index d362f94c7b..5cbcb99e68 100644
--- a/tests/auto/tools/moc/allmocs_baseline_in.json
+++ b/tests/auto/tools/moc/allmocs_baseline_in.json
@@ -91,6 +91,7 @@
"isClass": false,
"isFlag": false,
"name": "TypedEnum",
+ "type": "char",
"values": [
"B0",
"B1",
@@ -102,6 +103,7 @@
"isClass": true,
"isFlag": false,
"name": "TypedEnumClass",
+ "type": "char",
"values": [
"C0",
"C1",
@@ -147,6 +149,7 @@
"isClass": true,
"isFlag": false,
"name": "TypedEnumStruct",
+ "type": "char",
"values": [
"H0",
"H1",
@@ -188,6 +191,7 @@
"isClass": false,
"isFlag": false,
"name": "TypedEnum",
+ "type": "char",
"values": [
"B0",
"B1",
@@ -199,6 +203,7 @@
"isClass": true,
"isFlag": false,
"name": "TypedEnumClass",
+ "type": "char",
"values": [
"C0",
"C1",
@@ -232,6 +237,65 @@
],
"gadget": true,
"qualifiedClassName": "CXX11Enums2"
+ },
+ {
+ "className": "CXX11Enums3",
+ "enums": [
+ {
+ "isClass": true,
+ "isFlag": false,
+ "name": "EnumClass",
+ "values": [
+ "A0",
+ "A1",
+ "A2",
+ "A3"
+ ]
+ },
+ {
+ "isClass": false,
+ "isFlag": false,
+ "name": "TypedEnum",
+ "type": "char",
+ "values": [
+ "B0",
+ "B1",
+ "B2",
+ "B3"
+ ]
+ },
+ {
+ "isClass": true,
+ "isFlag": false,
+ "name": "TypedEnumClass",
+ "type": "char",
+ "values": [
+ "C0",
+ "C1",
+ "C2",
+ "C3"
+ ]
+ },
+ {
+ "isClass": false,
+ "isFlag": false,
+ "name": "NormalEnum",
+ "values": [
+ "D2",
+ "D3",
+ "D0",
+ "D1"
+ ]
+ }
+ ],
+ "object": true,
+ "qualifiedClassName": "CXX11Enums3",
+ "superClasses": [
+ {
+ "access": "public",
+ "name": "QObject"
+ }
+ ]
}
],
"inputFile": "cxx11-enums.h",
@@ -1258,6 +1322,35 @@
{
"classes": [
{
+ "className": "Base",
+ "object": true,
+ "qualifiedClassName": "QTBUG_101141::Base",
+ "superClasses": [
+ {
+ "access": "public",
+ "name": "QObject"
+ }
+ ]
+ },
+ {
+ "className": "Derived",
+ "object": true,
+ "qualifiedClassName": "QTBUG_101141::Derived",
+ "superClasses": [
+ {
+ "access": "public",
+ "fullyQualifiedName": "QTBUG_101141::Base",
+ "name": "Base"
+ }
+ ]
+ }
+ ],
+ "inputFile": "namespaced-base-class.h",
+ "outputRevision": 68
+ },
+ {
+ "classes": [
+ {
"className": "Bar",
"enums": [
{
@@ -1671,6 +1764,78 @@
"className": "TestPointeeCanBeIncomplete",
"object": true,
"qualifiedClassName": "TestPointeeCanBeIncomplete",
+ "slots": [
+ {
+ "access": "public",
+ "arguments": [
+ {
+ "type": "QPointer<FwdClass>"
+ }
+ ],
+ "name": "setProp1",
+ "returnType": "void"
+ },
+ {
+ "access": "public",
+ "arguments": [
+ {
+ "type": "QSharedPointer<FwdClass>"
+ }
+ ],
+ "name": "setProp2",
+ "returnType": "void"
+ },
+ {
+ "access": "public",
+ "arguments": [
+ {
+ "type": "QWeakPointer<FwdClass>"
+ }
+ ],
+ "name": "setProp3",
+ "returnType": "void"
+ },
+ {
+ "access": "public",
+ "arguments": [
+ {
+ "type": "FwdClass*"
+ }
+ ],
+ "name": "setProp4",
+ "returnType": "void"
+ },
+ {
+ "access": "public",
+ "arguments": [
+ {
+ "type": "const FwdClass*"
+ }
+ ],
+ "name": "setProp5",
+ "returnType": "void"
+ },
+ {
+ "access": "public",
+ "arguments": [
+ {
+ "type": "void*"
+ }
+ ],
+ "name": "setProp6",
+ "returnType": "void"
+ },
+ {
+ "access": "public",
+ "arguments": [
+ {
+ "type": "const void*"
+ }
+ ],
+ "name": "setProp7",
+ "returnType": "void"
+ }
+ ],
"superClasses": [
{
"access": "public",
@@ -2378,6 +2543,42 @@
{
"classes": [
{
+ "className": "SignalWithDefaultArg",
+ "object": true,
+ "qualifiedClassName": "SignalWithDefaultArg",
+ "signals": [
+ {
+ "access": "public",
+ "arguments": [
+ {
+ "name": "i",
+ "type": "int"
+ }
+ ],
+ "name": "signalWithDefaultArg",
+ "returnType": "void"
+ },
+ {
+ "access": "public",
+ "isCloned": true,
+ "name": "signalWithDefaultArg",
+ "returnType": "void"
+ }
+ ],
+ "superClasses": [
+ {
+ "access": "public",
+ "name": "QObject"
+ }
+ ]
+ }
+ ],
+ "inputFile": "signal-with-default-arg.h",
+ "outputRevision": 68
+ },
+ {
+ "classes": [
+ {
"className": "KDAB",
"enums": [
{
diff --git a/tests/auto/tools/moc/assign-namespace.h b/tests/auto/tools/moc/assign-namespace.h
index e6de8461c8..6e375d676c 100644
--- a/tests/auto/tools/moc/assign-namespace.h
+++ b/tests/auto/tools/moc/assign-namespace.h
@@ -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
#ifndef ASSIGN_NAMESPACE_H
#define ASSIGN_NAMESPACE_H
diff --git a/tests/auto/tools/moc/backslash-newlines.h b/tests/auto/tools/moc/backslash-newlines.h
index cb2a7f6558..d4c1492a21 100644
--- a/tests/auto/tools/moc/backslash-newlines.h
+++ b/tests/auto/tools/moc/backslash-newlines.h
@@ -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
#ifndef BACKSLASH_NEWLINES_H
#define BACKSLASH_NEWLINES_H
@@ -55,6 +30,7 @@ public slots:
QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wcomment")
+QT_WARNING_DISABLE_GCC("-Wcomment")
// ends with \\\r should not make moc crash (QTBUG-53441) (no new lines on purpose!!) \
diff --git a/tests/auto/tools/moc/c-comments.h b/tests/auto/tools/moc/c-comments.h
index 0c4d60bef9..b83549715d 100644
--- a/tests/auto/tools/moc/c-comments.h
+++ b/tests/auto/tools/moc/c-comments.h
@@ -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
#ifndef C_COMMENTS_H
#define C_COMMENTS_H
diff --git a/tests/auto/tools/moc/cstyle-enums.h b/tests/auto/tools/moc/cstyle-enums.h
index ef065c636d..a173913e06 100644
--- a/tests/auto/tools/moc/cstyle-enums.h
+++ b/tests/auto/tools/moc/cstyle-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 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
#ifndef CSTYLE_ENUMS_H
#define CSTYLE_ENUMS_H
diff --git a/tests/auto/tools/moc/cxx-attributes.h b/tests/auto/tools/moc/cxx-attributes.h
index c4f27eb8c4..54649b93fa 100644
--- a/tests/auto/tools/moc/cxx-attributes.h
+++ b/tests/auto/tools/moc/cxx-attributes.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef CXXATTRIBUTE_H
#define CXXATTRIBUTE_H
@@ -35,7 +10,7 @@ QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wunknown-attributes")
QT_WARNING_DISABLE_GCC("-Wattributes")
-class CppAttribute : public QObject
+class [[deprecated]] CppAttribute : public QObject
{
Q_OBJECT
signals:
diff --git a/tests/auto/tools/moc/cxx11-enums.h b/tests/auto/tools/moc/cxx11-enums.h
index d5bd228f12..7547ed81c1 100644
--- a/tests/auto/tools/moc/cxx11-enums.h
+++ b/tests/auto/tools/moc/cxx11-enums.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Olivier Goffart.
-** 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) 2011 Olivier Goffart.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef CXX11_ENUMS_H
#define CXX11_ENUMS_H
@@ -72,4 +47,20 @@ public:
Q_FLAGS(ClassFlags)
};
+class CXX11Enums3 : public QObject
+{
+ Q_OBJECT
+public:
+ enum class EnumClass { A0, A1, A2, A3 };
+ enum TypedEnum : char { B0, B1 , B2, B3 };
+ enum class TypedEnumClass : char { C0, C1, C2, C3 };
+ enum NormalEnum { D2 = 2, D3, D0 =0 , D1 };
+ enum class ClassFlag { F0 = 1, F1 = 2, F2 = 4, F3 = 8 };
+
+ Q_ENUM(EnumClass)
+ Q_ENUM(TypedEnum)
+ Q_ENUM(TypedEnumClass)
+ Q_ENUM(NormalEnum)
+};
+
#endif // CXX11_ENUMS_H
diff --git a/tests/auto/tools/moc/cxx11-explicit-override-control.h b/tests/auto/tools/moc/cxx11-explicit-override-control.h
index 2fcf0fdb2d..c741558419 100644
--- a/tests/auto/tools/moc/cxx11-explicit-override-control.h
+++ b/tests/auto/tools/moc/cxx11-explicit-override-control.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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 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) 2012 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
#ifndef TESTS_AUTO_CORELIB_TOOLS_MOC_CXX11_EXPLICIT_OVERRIDE_CONTROL_H
#define TESTS_AUTO_CORELIB_TOOLS_MOC_CXX11_EXPLICIT_OVERRIDE_CONTROL_H
diff --git a/tests/auto/tools/moc/cxx11-final-classes.h b/tests/auto/tools/moc/cxx11-final-classes.h
index 4bb5181eae..9d1a21bf96 100644
--- a/tests/auto/tools/moc/cxx11-final-classes.h
+++ b/tests/auto/tools/moc/cxx11-final-classes.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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 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) 2012 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
#ifndef TESTS_AUTO_CORELIB_TOOLS_MOC_CXX11_FINAL_CLASSES_H
#define TESTS_AUTO_CORELIB_TOOLS_MOC_CXX11_FINAL_CLASSES_H
diff --git a/tests/auto/tools/moc/cxx11-trailing-return.h b/tests/auto/tools/moc/cxx11-trailing-return.h
index 50f341e1c3..f8ee031dae 100644
--- a/tests/auto/tools/moc/cxx11-trailing-return.h
+++ b/tests/auto/tools/moc/cxx11-trailing-return.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef CXX11_TRAILING_RETURN_H
#define CXX11_TRAILING_RETURN_H
diff --git a/tests/auto/tools/moc/cxx17-namespaces.h b/tests/auto/tools/moc/cxx17-namespaces.h
index 97f534c697..9c346c7993 100644
--- a/tests/auto/tools/moc/cxx17-namespaces.h
+++ b/tests/auto/tools/moc/cxx17-namespaces.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Olivier Goffart.
-** 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) 2011 Olivier Goffart.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef CXX17_NAMESPACES_H
#define CXX17_NAMESPACES_H
diff --git a/tests/auto/tools/moc/dir-in-include-path.h b/tests/auto/tools/moc/dir-in-include-path.h
index ae889f02a1..94f420ea6c 100644
--- a/tests/auto/tools/moc/dir-in-include-path.h
+++ b/tests/auto/tools/moc/dir-in-include-path.h
@@ -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
#ifndef DIR_IN_INCLUDE_PATH_H
#define DIR_IN_INCLUDE_PATH_H
diff --git a/tests/auto/tools/moc/dollars.h b/tests/auto/tools/moc/dollars.h
index e7eeef3ef7..36cc864fc6 100644
--- a/tests/auto/tools/moc/dollars.h
+++ b/tests/auto/tools/moc/dollars.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Olivier Goffart <ogoffart@woboq.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) 2013 Olivier Goffart <ogoffart@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef DOLLARS_H
#define DOLLARS_H
diff --git a/tests/auto/tools/moc/enum_with_include.h b/tests/auto/tools/moc/enum_with_include.h
index cd53ba6a28..7cf6bf512c 100644
--- a/tests/auto/tools/moc/enum_with_include.h
+++ b/tests/auto/tools/moc/enum_with_include.h
@@ -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
#ifndef ENUM_WITH_INCLUDE_H
#define ENUM_WITH_INCLUDE_H
diff --git a/tests/auto/tools/moc/error-on-wrong-notify.h b/tests/auto/tools/moc/error-on-wrong-notify.h
index 9e6b27bff3..90d1eded31 100644
--- a/tests/auto/tools/moc/error-on-wrong-notify.h
+++ b/tests/auto/tools/moc/error-on-wrong-notify.h
@@ -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
#ifndef ERROR_ON_WRONG_NOTIFY_H
#define ERROR_ON_WRONG_NOTIFY_H
diff --git a/tests/auto/tools/moc/escapes-in-string-literals.h b/tests/auto/tools/moc/escapes-in-string-literals.h
index ddeccd897f..5514bc1000 100644
--- a/tests/auto/tools/moc/escapes-in-string-literals.h
+++ b/tests/auto/tools/moc/escapes-in-string-literals.h
@@ -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
#ifndef ESCAPES_IN_STRING_LITERALS_H
#define ESCAPES_IN_STRING_LITERALS_H
diff --git a/tests/auto/tools/moc/extraqualification.h b/tests/auto/tools/moc/extraqualification.h
index 4c150415b4..33cc48158f 100644
--- a/tests/auto/tools/moc/extraqualification.h
+++ b/tests/auto/tools/moc/extraqualification.h
@@ -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
#ifndef EXTRAQUALIFICATION_H
#define EXTRAQUALIFICATION_H
diff --git a/tests/auto/tools/moc/forgotten-qinterface.h b/tests/auto/tools/moc/forgotten-qinterface.h
index fcf7fdd4ff..663ab162f8 100644
--- a/tests/auto/tools/moc/forgotten-qinterface.h
+++ b/tests/auto/tools/moc/forgotten-qinterface.h
@@ -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
#ifndef FORGOTTEN_QINTERFACE_H
#define FORGOTTEN_QINTERFACE_H
diff --git a/tests/auto/tools/moc/forward-declared-param.h b/tests/auto/tools/moc/forward-declared-param.h
index 8438ca9128..e494b18ba5 100644
--- a/tests/auto/tools/moc/forward-declared-param.h
+++ b/tests/auto/tools/moc/forward-declared-param.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef FORWARD_DECLARED_PARAM_H
#define FORWARD_DECLARED_PARAM_H
diff --git a/tests/auto/tools/moc/function-with-attributes.h b/tests/auto/tools/moc/function-with-attributes.h
index 12c231371f..be7c8d9aaa 100644
--- a/tests/auto/tools/moc/function-with-attributes.h
+++ b/tests/auto/tools/moc/function-with-attributes.h
@@ -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
#ifndef FUNCTION_WITH_ATTRIBUTES_H
#define FUNCTION_WITH_ATTRIBUTES_H
diff --git a/tests/auto/tools/moc/fwdclass1.h b/tests/auto/tools/moc/fwdclass1.h
index a8457cca77..eaaa7c380f 100644
--- a/tests/auto/tools/moc/fwdclass1.h
+++ b/tests/auto/tools/moc/fwdclass1.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Olivier Goffart <ogoffart@woboq.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) 2020 Olivier Goffart <ogoffart@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifdef FWDCLASS1_H
#error "This file can only be included once"
diff --git a/tests/auto/tools/moc/fwdclass2.h b/tests/auto/tools/moc/fwdclass2.h
index 650da18116..588f5b4de3 100644
--- a/tests/auto/tools/moc/fwdclass2.h
+++ b/tests/auto/tools/moc/fwdclass2.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Olivier Goffart <ogoffart@woboq.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) 2020 Olivier Goffart <ogoffart@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifdef FWDCLASS2_H
#error "This file can only be included once"
diff --git a/tests/auto/tools/moc/fwdclass3.h b/tests/auto/tools/moc/fwdclass3.h
index 080ac0340d..5ecdb2ce6e 100644
--- a/tests/auto/tools/moc/fwdclass3.h
+++ b/tests/auto/tools/moc/fwdclass3.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Olivier Goffart <ogoffart@woboq.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) 2020 Olivier Goffart <ogoffart@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifdef FWDCLASS3_H
#error "This file can only be included once"
diff --git a/tests/auto/tools/moc/gadgetwithnoenums.h b/tests/auto/tools/moc/gadgetwithnoenums.h
index 3b182ab875..5ef8bced8c 100644
--- a/tests/auto/tools/moc/gadgetwithnoenums.h
+++ b/tests/auto/tools/moc/gadgetwithnoenums.h
@@ -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
#ifndef TASK175491
#define TASK175491
diff --git a/tests/auto/tools/moc/grand-parent-gadget-class.h b/tests/auto/tools/moc/grand-parent-gadget-class.h
index c7720a1ab9..d5adfb9974 100644
--- a/tests/auto/tools/moc/grand-parent-gadget-class.h
+++ b/tests/auto/tools/moc/grand-parent-gadget-class.h
@@ -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
#ifndef GRANDPARENTGADGETCLASS_H
#define GRANDPARENTGADGETCLASS_H
diff --git a/tests/auto/tools/moc/interface-from-framework.h b/tests/auto/tools/moc/interface-from-framework.h
index f0fc5df7af..f8f80cbafb 100644
--- a/tests/auto/tools/moc/interface-from-framework.h
+++ b/tests/auto/tools/moc/interface-from-framework.h
@@ -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
#ifndef INTERFACE_FROM_FRAMEWORK_H
#define INTERFACE_FROM_FRAMEWORK_H
diff --git a/tests/auto/tools/moc/interface-from-include.h b/tests/auto/tools/moc/interface-from-include.h
index 2b3929582b..6e92d30142 100644
--- a/tests/auto/tools/moc/interface-from-include.h
+++ b/tests/auto/tools/moc/interface-from-include.h
@@ -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
#ifndef INTERFACE_FROM_INCLUDE_H
#define INTERFACE_FROM_INCLUDE_H
diff --git a/tests/auto/tools/moc/macro-on-cmdline.h b/tests/auto/tools/moc/macro-on-cmdline.h
index 32a2b72cf4..d7530cdcb1 100644
--- a/tests/auto/tools/moc/macro-on-cmdline.h
+++ b/tests/auto/tools/moc/macro-on-cmdline.h
@@ -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
#ifndef MACRO_ON_CMDLINE_H
#define MACRO_ON_CMDLINE_H
diff --git a/tests/auto/tools/moc/moc_include.h b/tests/auto/tools/moc/moc_include.h
index 49b484a0c9..398459766e 100644
--- a/tests/auto/tools/moc/moc_include.h
+++ b/tests/auto/tools/moc/moc_include.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 Olivier Goffart <ogoffart@woboq.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) 2020 Olivier Goffart <ogoffart@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef MOC_INCLUDE_H
#define MOC_INCLUDE_H
diff --git a/tests/auto/tools/moc/namespace.h b/tests/auto/tools/moc/namespace.h
index 7f1e46cd62..22fe0b91f5 100644
--- a/tests/auto/tools/moc/namespace.h
+++ b/tests/auto/tools/moc/namespace.h
@@ -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
#ifndef NAMESPACE_H
#define NAMESPACE_H
diff --git a/tests/auto/tools/moc/namespace_no_merge.h b/tests/auto/tools/moc/namespace_no_merge.h
index 8d1639ad4c..e2f277fde5 100644
--- a/tests/auto/tools/moc/namespace_no_merge.h
+++ b/tests/auto/tools/moc/namespace_no_merge.h
@@ -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
#ifndef NAMESPACE_NO_MERGE_H
#define NAMESPACE_NO_MERGE_H
diff --git a/tests/auto/tools/moc/namespaced-base-class.h b/tests/auto/tools/moc/namespaced-base-class.h
new file mode 100644
index 0000000000..46bd2bae29
--- /dev/null
+++ b/tests/auto/tools/moc/namespaced-base-class.h
@@ -0,0 +1,20 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef TST_MOC_NAMESPACED_BASE_CLASS_H
+#define TST_MOC_NAMESPACED_BASE_CLASS_H
+
+#include <QObject>
+
+namespace QTBUG_101141 {
+ class Base : public QObject {
+ Q_OBJECT
+ };
+
+ class Derived : public Base
+ {
+ Q_OBJECT
+ };
+}
+
+#endif // TST_MOC_NAMESPACED_BASE_CLASS_H
diff --git a/tests/auto/tools/moc/namespaced-flags.h b/tests/auto/tools/moc/namespaced-flags.h
index d49ac9829d..39ff5c1f9a 100644
--- a/tests/auto/tools/moc/namespaced-flags.h
+++ b/tests/auto/tools/moc/namespaced-flags.h
@@ -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
#ifndef NAMESPACED_FLAGS_H
#define NAMESPACED_FLAGS_H
diff --git a/tests/auto/tools/moc/no-keywords.h b/tests/auto/tools/moc/no-keywords.h
index cb0bca7a19..bf9beb4663 100644
--- a/tests/auto/tools/moc/no-keywords.h
+++ b/tests/auto/tools/moc/no-keywords.h
@@ -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
#ifndef NO_KEYWORDS_H
#define NO_KEYWORDS_H
diff --git a/tests/auto/tools/moc/non-gadget-parent-class.h b/tests/auto/tools/moc/non-gadget-parent-class.h
index 517fc616f5..c64075b572 100644
--- a/tests/auto/tools/moc/non-gadget-parent-class.h
+++ b/tests/auto/tools/moc/non-gadget-parent-class.h
@@ -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
#ifndef NONGADGETPARENTCLASS_H
#define NONGADGETPARENTCLASS_H
diff --git a/tests/auto/tools/moc/oldstyle-casts.h b/tests/auto/tools/moc/oldstyle-casts.h
index d812a1b184..017f195b7b 100644
--- a/tests/auto/tools/moc/oldstyle-casts.h
+++ b/tests/auto/tools/moc/oldstyle-casts.h
@@ -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
#ifndef OLDSTYLE_CASTS_H
#define OLDSTYLE_CASTS_H
diff --git a/tests/auto/tools/moc/os9-newlines.h b/tests/auto/tools/moc/os9-newlines.h
index 41b3cb883d..82bddd117d 100644
--- a/tests/auto/tools/moc/os9-newlines.h
+++ b/tests/auto/tools/moc/os9-newlines.h
@@ -1 +1 @@
-/**************************************************************************** ** ** 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 <QObject> class Os9Newlines : public QObject { Q_OBJECT public Q_SLOTS: inline void testSlot() {} }; \ No newline at end of file
+// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #include <QObject> class Os9Newlines : public QObject { Q_OBJECT public Q_SLOTS: inline void testSlot() {} }; \ No newline at end of file
diff --git a/tests/auto/tools/moc/parse-boost.h b/tests/auto/tools/moc/parse-boost.h
index c9c492ed69..8f327a131d 100644
--- a/tests/auto/tools/moc/parse-boost.h
+++ b/tests/auto/tools/moc/parse-boost.h
@@ -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
#ifndef PARSE_BOOST_H
#define PARSE_BOOST_H
diff --git a/tests/auto/tools/moc/parse-defines.h b/tests/auto/tools/moc/parse-defines.h
index b88fe63e4a..238d33246f 100644
--- a/tests/auto/tools/moc/parse-defines.h
+++ b/tests/auto/tools/moc/parse-defines.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
#ifndef PARSE_DEFINES_H
#define PARSE_DEFINES_H
diff --git a/tests/auto/tools/moc/plugin_metadata.h b/tests/auto/tools/moc/plugin_metadata.h
index 927addd9e4..5f2a1885f6 100644
--- a/tests/auto/tools/moc/plugin_metadata.h
+++ b/tests/auto/tools/moc/plugin_metadata.h
@@ -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
#ifndef TESTPLUGINMETADATA
#define TESTPLUGINMETADATA
diff --git a/tests/auto/tools/moc/pointery_to_incomplete.h b/tests/auto/tools/moc/pointery_to_incomplete.h
index 63591bc0f7..5d0ac859d6 100644
--- a/tests/auto/tools/moc/pointery_to_incomplete.h
+++ b/tests/auto/tools/moc/pointery_to_incomplete.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef POINTERY_TO_INCOMPLETE_H
#define POINTERY_TO_INCOMPLETE_H
@@ -39,10 +14,14 @@ class FwdClass;
class TestPointeeCanBeIncomplete : public QObject
{
Q_OBJECT
-public:
+public slots:
void setProp1(QPointer<FwdClass>) {}
void setProp2(QSharedPointer<FwdClass>) {}
void setProp3(const QWeakPointer<FwdClass> &) {}
+ void setProp4(FwdClass *) {}
+ void setProp5(const FwdClass *) {}
+ void setProp6(void *) {}
+ void setProp7(const void *) {}
};
#endif // POINTERY_TO_INCOMPLETE_H
diff --git a/tests/auto/tools/moc/pp-dollar-signs.h b/tests/auto/tools/moc/pp-dollar-signs.h
index 4235d5fe18..6ba39cb903 100644
--- a/tests/auto/tools/moc/pp-dollar-signs.h
+++ b/tests/auto/tools/moc/pp-dollar-signs.h
@@ -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
#ifndef PP_DOLLAR_SIGNS_H
#define PP_DOLLAR_SIGNS_H
diff --git a/tests/auto/tools/moc/pure-virtual-signals.h b/tests/auto/tools/moc/pure-virtual-signals.h
index f8b3a80f91..3c996a8628 100644
--- a/tests/auto/tools/moc/pure-virtual-signals.h
+++ b/tests/auto/tools/moc/pure-virtual-signals.h
@@ -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
#ifndef PURE_VIRTUAL_SIGNALS_H
#define PURE_VIRTUAL_SIGNALS_H
diff --git a/tests/auto/tools/moc/qinvokable.h b/tests/auto/tools/moc/qinvokable.h
index 856d795b45..e2181d909d 100644
--- a/tests/auto/tools/moc/qinvokable.h
+++ b/tests/auto/tools/moc/qinvokable.h
@@ -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
#ifndef QINVOKABLE_H
#define QINVOKABLE_H
diff --git a/tests/auto/tools/moc/qmlmacro.h b/tests/auto/tools/moc/qmlmacro.h
new file mode 100644
index 0000000000..e44138a3b6
--- /dev/null
+++ b/tests/auto/tools/moc/qmlmacro.h
@@ -0,0 +1,19 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+
+#ifndef QMlMACRO_H
+#define QMlMACRO_H
+
+#include <QObject>
+#include <QByteArray>
+
+struct QmlMacro : QObject
+{
+ Q_OBJECT
+ Q_CLASSINFO("QML.Element", "auto")
+
+ signals:
+ void f(QByteArray &b);
+};
+#endif
diff --git a/tests/auto/tools/moc/qprivateslots.h b/tests/auto/tools/moc/qprivateslots.h
index 1e4cb21921..d4b158bbc4 100644
--- a/tests/auto/tools/moc/qprivateslots.h
+++ b/tests/auto/tools/moc/qprivateslots.h
@@ -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
#ifndef QPRIVATESLOTS_H
#define QPRIVATESLOTS_H
diff --git a/tests/auto/tools/moc/qtbug-35657-gadget.h b/tests/auto/tools/moc/qtbug-35657-gadget.h
index 5008c26865..d97e1f7f45 100644
--- a/tests/auto/tools/moc/qtbug-35657-gadget.h
+++ b/tests/auto/tools/moc/qtbug-35657-gadget.h
@@ -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
#ifndef QTBUG_35657_GADGET_H
#define QTBUG_35657_GADGET_H
diff --git a/tests/auto/tools/moc/related-metaobjects-in-gadget.h b/tests/auto/tools/moc/related-metaobjects-in-gadget.h
index ac00b642c3..0ea6c09a73 100644
--- a/tests/auto/tools/moc/related-metaobjects-in-gadget.h
+++ b/tests/auto/tools/moc/related-metaobjects-in-gadget.h
@@ -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
#ifndef RELATED_METAOBJECTS_IN_GADGET_H
#define RELATED_METAOBJECTS_IN_GADGET_H
diff --git a/tests/auto/tools/moc/related-metaobjects-in-namespaces.h b/tests/auto/tools/moc/related-metaobjects-in-namespaces.h
index f6c0a64c9b..efd8210767 100644
--- a/tests/auto/tools/moc/related-metaobjects-in-namespaces.h
+++ b/tests/auto/tools/moc/related-metaobjects-in-namespaces.h
@@ -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
#ifndef RELATED_METAOBJECTS_IN_NAMESPACES_H
#define RELATED_METAOBJECTS_IN_NAMESPACES_H
diff --git a/tests/auto/tools/moc/related-metaobjects-name-conflict.h b/tests/auto/tools/moc/related-metaobjects-name-conflict.h
index 14307a4c1b..cccd97e4e7 100644
--- a/tests/auto/tools/moc/related-metaobjects-name-conflict.h
+++ b/tests/auto/tools/moc/related-metaobjects-name-conflict.h
@@ -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
#ifndef RELATED_METAOBJECTS_NAME_CONFLICT_H
#define RELATED_METAOBJECTS_NAME_CONFLICT_H
diff --git a/tests/auto/tools/moc/signal-with-default-arg.h b/tests/auto/tools/moc/signal-with-default-arg.h
new file mode 100644
index 0000000000..3fd98712eb
--- /dev/null
+++ b/tests/auto/tools/moc/signal-with-default-arg.h
@@ -0,0 +1,16 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef SIGNAL_WITH_DEFAULT_ARG_H
+#define SIGNAL_WITH_DEFAULT_ARG_H
+
+#include <QtCore/qobject.h>
+
+class SignalWithDefaultArg : public QObject
+{
+ Q_OBJECT
+signals:
+ void signalWithDefaultArg(int i = 12);
+};
+
+#endif // SIGNAL_WITH_DEFAULT_ARG_H
diff --git a/tests/auto/tools/moc/single-quote-digit-separator-n3781.h b/tests/auto/tools/moc/single-quote-digit-separator-n3781.h
index 1b4aeab890..f272ecbddf 100644
--- a/tests/auto/tools/moc/single-quote-digit-separator-n3781.h
+++ b/tests/auto/tools/moc/single-quote-digit-separator-n3781.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 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 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) 2013 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 SINGLE_QUOTE_DIGIT_SEPARATOR_N3781_H
#define SINGLE_QUOTE_DIGIT_SEPARATOR_N3781_H
diff --git a/tests/auto/tools/moc/single_function_keyword.h b/tests/auto/tools/moc/single_function_keyword.h
index 6abcc42a04..0c907db9ef 100644
--- a/tests/auto/tools/moc/single_function_keyword.h
+++ b/tests/auto/tools/moc/single_function_keyword.h
@@ -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
#ifndef SINGLE_FUNCTION_KEYWORD_H
#define SINGLE_FUNCTION_KEYWORD_H
diff --git a/tests/auto/tools/moc/slots-with-void-template.h b/tests/auto/tools/moc/slots-with-void-template.h
index 4bdb587372..5b51041155 100644
--- a/tests/auto/tools/moc/slots-with-void-template.h
+++ b/tests/auto/tools/moc/slots-with-void-template.h
@@ -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
#ifndef SLOTS_WITH_VOID_TEMPLATE_H
#define SLOTS_WITH_VOID_TEMPLATE_H
diff --git a/tests/auto/tools/moc/task192552.h b/tests/auto/tools/moc/task192552.h
index 302ead0e20..aad545292f 100644
--- a/tests/auto/tools/moc/task192552.h
+++ b/tests/auto/tools/moc/task192552.h
@@ -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
#ifndef TASK192552_H
#define TASK192552_H
diff --git a/tests/auto/tools/moc/task234909.h b/tests/auto/tools/moc/task234909.h
index 661df19fa9..4be1383f4a 100644
--- a/tests/auto/tools/moc/task234909.h
+++ b/tests/auto/tools/moc/task234909.h
@@ -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
#ifndef TASK234909_H
#define TASK234909_H
diff --git a/tests/auto/tools/moc/task240368.h b/tests/auto/tools/moc/task240368.h
index 0913517c16..1e728d373f 100644
--- a/tests/auto/tools/moc/task240368.h
+++ b/tests/auto/tools/moc/task240368.h
@@ -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
// moc parsing issue with "unsigned" subphrase
#ifndef TASK240368_H
diff --git a/tests/auto/tools/moc/task87883.h b/tests/auto/tools/moc/task87883.h
index be0b505c95..60ca529d53 100644
--- a/tests/auto/tools/moc/task87883.h
+++ b/tests/auto/tools/moc/task87883.h
@@ -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
#ifndef TASK87883_H
#define TASK87883_H
diff --git a/tests/auto/tools/moc/tech-preview.h b/tests/auto/tools/moc/tech-preview.h
new file mode 100644
index 0000000000..8f285048e4
--- /dev/null
+++ b/tests/auto/tools/moc/tech-preview.h
@@ -0,0 +1,43 @@
+// Copyright (C) 2024 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
+
+#ifndef TECH_PREVIEW_H
+#define TECH_PREVIEW_H
+
+#include <QObject>
+
+class QT_TECH_PREVIEW_API MyTechPreviewObject : public QObject
+{
+ QT_TECH_PREVIEW_API
+ Q_OBJECT
+
+ QT_TECH_PREVIEW_API
+ Q_PROPERTY(int status MEMBER m_status)
+
+ int m_status = 0;
+
+public:
+ void myMethod() {}
+ QT_TECH_PREVIEW_API void myTPMethod() {}
+
+ Q_INVOKABLE QT_TECH_PREVIEW_API void myTPInvokable1() {}
+ QT_TECH_PREVIEW_API Q_INVOKABLE void myTPInvokable2() {}
+
+ enum class QT_TECH_PREVIEW_API MyTechPreviewEnum
+ {
+ A, B, C,
+ TP QT_TECH_PREVIEW_API,
+ X, Y, Z
+ };
+
+signals:
+ void mySignal();
+ QT_TECH_PREVIEW_API void myTPSignal();
+
+public Q_SLOTS:
+ void mySlot() {}
+ QT_TECH_PREVIEW_API void myTPSlot() {}
+};
+
+
+#endif // TECH_PREVIEW_H
diff --git a/tests/auto/tools/moc/template-gtgt.h b/tests/auto/tools/moc/template-gtgt.h
index 3f504c053b..ed2da17405 100644
--- a/tests/auto/tools/moc/template-gtgt.h
+++ b/tests/auto/tools/moc/template-gtgt.h
@@ -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
#ifndef TEMPLATE_GTGT_H
#define TEMPLATE_GTGT_H
diff --git a/tests/auto/tools/moc/testproject/Plugin/Plugin.h b/tests/auto/tools/moc/testproject/Plugin/Plugin.h
index 63534f6176..a947bf968a 100644
--- a/tests/auto/tools/moc/testproject/Plugin/Plugin.h
+++ b/tests/auto/tools/moc/testproject/Plugin/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 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 <QObject>
struct MyInterface
diff --git a/tests/auto/tools/moc/trigraphs.h b/tests/auto/tools/moc/trigraphs.h
index 43b9d26d85..6d0ce2cf69 100644
--- a/tests/auto/tools/moc/trigraphs.h
+++ b/tests/auto/tools/moc/trigraphs.h
@@ -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
#ifndef TRIGRAPHS_H
#define TRIGRAPHS_H
diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp
index 1fb153ac09..d24dfa11f7 100644
--- a/tests/auto/tools/moc/tst_moc.cpp
+++ b/tests/auto/tools/moc/tst_moc.cpp
@@ -1,40 +1,18 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2020 Olivier Goffart <ogoffart@woboq.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) 2020 The Qt Company Ltd.
+// Copyright (C) 2020 Olivier Goffart <ogoffart@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSignalSpy>
#include <stdio.h>
+#include <optional>
#include <qobject.h>
#include <qmetaobject.h>
#include <qjsondocument.h>
-#include <qversionnumber.h>
#include <qregularexpression.h>
+#include <qtyperevision.h>
+
+#include <private/qobject_p.h>
#include "using-namespaces.h"
#include "assign-namespace.h"
@@ -81,16 +59,69 @@
#include "fwdclass2.h"
#include "fwdclass3.h"
+#include "signal-with-default-arg.h"
+
+#include "qmlmacro.h"
+
+#include "tech-preview.h"
+
+using namespace Qt::StringLiterals;
+
#ifdef Q_MOC_RUN
// check that moc can parse these constructs, they are being used in Windows winsock2.h header
#define STRING_HASH_HASH(x) ("foo" ## x ## "bar")
const char *string_hash_hash = STRING_HASH_HASH("baz");
#endif
+#if defined(Q_MOC_RUN) || __cplusplus > 202002L
+/* Check that nested inline namespaces are at least not causing moc to break.
+ Check it even outside of C++20 mode as moc gets passed the wrong __cplusplus version
+ and also to increase coverage, given how few C++20 configurations exist in the CI at the time
+ of writing this comment.
+*/
+namespace A::inline B {}
+namespace A {
+ namespace B::inline C {}
+}
+#endif
+
+
+namespace TokenStartingWithNumber
+{
+Q_NAMESPACE
+
+#define FOR_EACH_ITEM( CALL ) \
+ CALL( EXAMPLE ) \
+ CALL( 123_EXAMPLE ) \
+ CALL( OTHER_EXAMPLE )
+
+enum FooItems
+{
+
+#define ENUM_ITEM(NAME, ...) FOO ## NAME,
+ FOR_EACH_ITEM( ENUM_ITEM )
+};
+
+Q_ENUM_NS(FooItems)
+}
+
Q_DECLARE_METATYPE(const QMetaObject*);
#define TESTEXPORTMACRO Q_DECL_EXPORT
+#if !defined(Q_MOC_RUN) && !defined(Q_NOREPLY)
+# define Q_NOREPLY
+#endif
+
+struct TagTest : QObject {
+ Q_OBJECT
+
+ Q_INVOKABLE Q_NOREPLY inline int test() {return 0;}
+public slots:
+ Q_NOREPLY virtual inline void pamOpen(int){}
+};
+
+
namespace TestNonQNamespace {
struct TestGadget {
@@ -108,6 +139,12 @@ public:
Key2
};
Q_ENUM(TestGEnum2)
+
+ enum TestGEnum3: quint8 {
+ Key1 = 23,
+ Key2
+ };
+ Q_ENUM(TestGEnum3)
};
}
@@ -126,6 +163,12 @@ namespace TestQNamespace {
};
Q_ENUM_NS(TestEnum2)
+ enum TestEnum3: qint8 {
+ Key1 = 23,
+ Key2
+ };
+ Q_ENUM_NS(TestEnum3)
+
// try to dizzy moc by adding a struct in between
struct TestGadget {
Q_GADGET
@@ -138,8 +181,13 @@ namespace TestQNamespace {
Key1 = 23,
Key2
};
+ enum TestGEnum3: qint16 {
+ Key1 = 33,
+ Key2
+ };
Q_ENUM(TestGEnum1)
Q_ENUM(TestGEnum2)
+ Q_ENUM(TestGEnum3)
};
struct TestGadgetExport {
@@ -156,6 +204,12 @@ namespace TestQNamespace {
Key2
};
Q_ENUM(TestGeEnum2)
+ enum TestGeEnum3: quint16 {
+ Key1 = 26,
+ Key2
+ };
+ Q_ENUM(TestGeEnum3)
+
};
enum class TestFlag1 {
@@ -175,6 +229,27 @@ namespace TestQNamespace {
Q_FLAG_NS(TestFlag2)
}
+namespace TestSameEnumNamespace {
+ Q_NAMESPACE
+
+ enum class TestSameEnumNamespace {
+ Key1 = 1,
+ Key2 = 2,
+ };
+ Q_ENUM_NS(TestSameEnumNamespace)
+}
+
+namespace TestNestedSameEnumNamespace {
+namespace a {
+ Q_NAMESPACE
+ // enum class with the same name as the enclosing nested namespace
+ enum class a {
+ Key11 = 11,
+ Key12 = 12,
+ };
+ Q_ENUM_NS(a)
+}
+}
namespace TestExportNamespace {
Q_NAMESPACE_EXPORT(TESTEXPORTMACRO)
@@ -205,6 +280,24 @@ public:
CreatableGadget creatableGadget; // Force the compiler to use the constructor
+struct ParentWithSignalWithArgument : QObject {
+ Q_OBJECT
+ Q_PROPERTY(int i READ i WRITE setI NOTIFY iChanged)
+
+public:
+ int i() const {return 0;}
+ void setI(int) {}
+
+signals:
+ void iChanged(int);
+};
+
+struct SignalWithArgumentInParent : ParentWithSignalWithArgument
+{
+ Q_OBJECT
+ Q_PROPERTY(int otherI READ i WRITE setI NOTIFY iChanged)
+};
+
struct MyStruct {};
struct MyStruct2 {};
@@ -324,6 +417,7 @@ class TestClassinfoWithEscapes: public QObject
Q_CLASSINFO("cpp c*/omment", "f/*oo")
Q_CLASSINFO("endswith\\", "Or?\?/")
Q_CLASSINFO("newline\n inside\n", "Or \r")
+ Q_CLASSINFO("\xffz", "\0012")
public slots:
void slotWithAReallyLongName(int)
{ }
@@ -362,6 +456,8 @@ QT_WARNING_PUSH
QT_WARNING_DISABLE_CLANG("-Wignored-qualifiers")
QT_WARNING_DISABLE_GCC("-Wignored-qualifiers")
+using ObjectCRef = const QObject &;
+
class TestClass : public MyNamespace::TestSuperClass, public DONT_CONFUSE_MOC(MyStruct),
public DONT_CONFUSE_MOC_EVEN_MORE(MyStruct2, dummy, ignored)
{
@@ -557,6 +653,7 @@ signals:
//
public slots:
void const slotWithSillyConst() {}
+ void slotTakingCRefViaTypedef(ObjectCRef o) { this->setObjectName(o.objectName()); }
public:
Q_INVOKABLE void const slotWithSillyConst2() {}
@@ -585,6 +682,10 @@ private slots:
QT_WARNING_POP
+// quick test to verify that moc handles the L suffix
+// correctly in the preprocessor
+#if 2000L < 1
+#else
class PropertyTestClass : public QObject
{
Q_OBJECT
@@ -594,6 +695,7 @@ public:
Q_ENUM(TestEnum)
};
+#endif
class PropertyUseClass : public QObject
{
@@ -686,6 +788,7 @@ private slots:
void preprocessorConditionals();
void blackslashNewlines();
void slotWithSillyConst();
+ void slotTakingCRefViaTypedef();
void testExtraData();
void testExtraDataForEnum();
void namespaceTypeProperty();
@@ -711,6 +814,7 @@ private slots:
void templateGtGt();
void qprivateslots();
void qprivateproperties();
+ void anonymousProperties();
void warnOnPropertyWithoutREAD();
void constructors();
void typenameWithUnsigned();
@@ -755,6 +859,7 @@ private slots:
void optionsFileError_data();
void optionsFileError();
void testQNamespace();
+ void testNestedQNamespace();
void cxx17Namespaces();
void cxxAttributes();
void mocJsonOutput();
@@ -764,6 +869,10 @@ private slots:
void observerMetaCall();
void setQPRopertyBinding();
void privateQPropertyShim();
+ void readWriteThroughBindable();
+ void invokableCtors();
+ void virtualInlineTaggedSlot();
+ void tokenStartingWithNumber();
signals:
void sigWithUnsignedArg(unsigned foo);
@@ -775,6 +884,7 @@ signals:
void constSignal2(int arg) const;
void member4Changed();
void member5Changed(const QString &newVal);
+ void sigWithDefaultArg(int i = 12);
private:
bool user1() { return true; };
@@ -800,6 +910,14 @@ private:
};
+#define VERIFY_NO_ERRORS(proc) do { \
+ auto &&p = proc; \
+ const QByteArray stderr = p.readAllStandardError(); \
+ QVERIFY2(stderr.isEmpty(), stderr.data()); \
+ QCOMPARE(p.exitCode(), 0); \
+ } while (false)
+
+
void tst_Moc::initTestCase()
{
QString binpath = QLibraryInfo::path(QLibraryInfo::BinariesPath);
@@ -814,10 +932,9 @@ void tst_Moc::initTestCase()
QProcess proc;
proc.start(qtpaths, QStringList() << "-query" << "QT_INSTALL_HEADERS");
QVERIFY(proc.waitForFinished());
- QCOMPARE(proc.exitCode(), 0);
+ VERIFY_NO_ERRORS(proc);
QByteArray output = proc.readAllStandardOutput();
QVERIFY(!output.isEmpty());
- QCOMPARE(proc.readAllStandardError(), QByteArray());
qtIncludePath = QString::fromLocal8Bit(output).trimmed();
QFileInfo fi(qtIncludePath);
QVERIFY(fi.exists());
@@ -852,10 +969,9 @@ void tst_Moc::oldStyleCasts()
QProcess proc;
proc.start(m_moc, QStringList(m_sourceDirectory + QStringLiteral("/oldstyle-casts.h")));
QVERIFY(proc.waitForFinished());
- QCOMPARE(proc.exitCode(), 0);
+ VERIFY_NO_ERRORS(proc);
QByteArray mocOut = proc.readAllStandardOutput();
QVERIFY(!mocOut.isEmpty());
- QCOMPARE(proc.readAllStandardError(), QByteArray());
QStringList args;
args << "-c" << "-x" << "c++" << "-Wold-style-cast" << "-I" << "."
@@ -866,8 +982,7 @@ void tst_Moc::oldStyleCasts()
proc.closeWriteChannel();
QVERIFY(proc.waitForFinished());
- QCOMPARE(QString::fromLocal8Bit(proc.readAllStandardError()), QString());
- QCOMPARE(proc.exitCode(), 0);
+ VERIFY_NO_ERRORS(proc);
#else
QSKIP("Only tested on linux/gcc");
#endif
@@ -888,8 +1003,8 @@ void tst_Moc::warnOnExtraSignalSlotQualifiaction()
QVERIFY(!mocOut.isEmpty());
QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError());
QCOMPARE(mocWarning, header +
- QString(":43:1: warning: Function declaration Test::badFunctionDeclaration contains extra qualification. Ignoring as signal or slot.\n") +
- header + QString(":46:1: warning: parsemaybe: Function declaration Test::anotherOne contains extra qualification. Ignoring as signal or slot.\n"));
+ QString(":18:1: warning: Function declaration Test::badFunctionDeclaration contains extra qualification. Ignoring as signal or slot.\n") +
+ header + QString(":21:1: warning: parsemaybe: Function declaration Test::anotherOne contains extra qualification. Ignoring as signal or slot.\n"));
#else
QSKIP("Only tested on unix/gcc");
#endif
@@ -924,10 +1039,9 @@ void tst_Moc::inputFileNameWithDotsButNoExtension()
proc.setWorkingDirectory(m_sourceDirectory + QStringLiteral("/task71021"));
proc.start(m_moc, QStringList("../Header"));
QVERIFY(proc.waitForFinished());
- QCOMPARE(proc.exitCode(), 0);
+ VERIFY_NO_ERRORS(proc);
QByteArray mocOut = proc.readAllStandardOutput();
QVERIFY(!mocOut.isEmpty());
- QCOMPARE(proc.readAllStandardError(), QByteArray());
QStringList args;
args << "-c" << "-x" << "c++" << "-I" << ".."
@@ -938,8 +1052,7 @@ void tst_Moc::inputFileNameWithDotsButNoExtension()
proc.closeWriteChannel();
QVERIFY(proc.waitForFinished());
- QCOMPARE(QString::fromLocal8Bit(proc.readAllStandardError()), QString());
- QCOMPARE(proc.exitCode(), 0);
+ VERIFY_NO_ERRORS(proc);
#else
QSKIP("Only tested on linux/gcc");
#endif
@@ -962,12 +1075,12 @@ void tst_Moc::supportConstSignals()
QSignalSpy spy1(this, SIGNAL(constSignal1()));
QVERIFY(spy1.isEmpty());
emit constSignal1();
- QCOMPARE(spy1.count(), 1);
+ QCOMPARE(spy1.size(), 1);
QSignalSpy spy2(this, SIGNAL(constSignal2(int)));
QVERIFY(spy2.isEmpty());
emit constSignal2(42);
- QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy2.size(), 1);
QCOMPARE(spy2.at(0).at(0).toInt(), 42);
}
@@ -990,13 +1103,15 @@ void tst_Moc::classinfoWithEscapes()
const QMetaObject *mobj = &TestClassinfoWithEscapes::staticMetaObject;
QCOMPARE(mobj->methodCount() - mobj->methodOffset(), 1);
- QCOMPARE(mobj->classInfoCount(), 5);
+ QCOMPARE(mobj->classInfoCount(), 6);
QCOMPARE(mobj->classInfo(2).name(), "cpp c*/omment");
QCOMPARE(mobj->classInfo(2).value(), "f/*oo");
QCOMPARE(mobj->classInfo(3).name(), "endswith\\");
QCOMPARE(mobj->classInfo(3).value(), "Or?\?/");
QCOMPARE(mobj->classInfo(4).name(), "newline\n inside\n");
QCOMPARE(mobj->classInfo(4).value(), "Or \r");
+ QCOMPARE(mobj->classInfo(5).name(), "\xff" "z");
+ QCOMPARE(mobj->classInfo(5).value(), "\001" "2");
QMetaMethod mm = mobj->method(mobj->methodOffset());
QCOMPARE(mm.methodSignature(), QByteArray("slotWithAReallyLongName(int)"));
@@ -1074,6 +1189,15 @@ void tst_Moc::slotWithSillyConst()
QVERIFY(mobj->indexOfSlot("slotWithVoidStar(void*)") != -1);
}
+void tst_Moc::slotTakingCRefViaTypedef()
+{
+ TestClass tst;
+ QObject obj;
+ obj.setObjectName("works");
+ QMetaObject::invokeMethod(&tst, "slotTakingCRefViaTypedef", Q_ARG(ObjectCRef, obj));
+ QCOMPARE(obj.objectName(), "works");
+}
+
void tst_Moc::testExtraData()
{
const QMetaObject *mobj = &PropertyTestClass::staticMetaObject;
@@ -1182,7 +1306,7 @@ void tst_Moc::warnOnMultipleInheritance()
QVERIFY(!mocOut.isEmpty());
QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError());
QCOMPARE(mocWarning, header +
- QString(":43:1: warning: Class Bar inherits from two QObject subclasses QWindow and Foo. This is not supported!\n"));
+ QString(":18:1: warning: Class Bar inherits from two QObject subclasses QWindow and Foo. This is not supported!\n"));
#else
QSKIP("Only tested on linux/gcc");
#endif
@@ -1205,11 +1329,7 @@ void tst_Moc::ignoreOptionClashes()
if (!finished)
qWarning("waitForFinished failed. QProcess error: %d", (int)proc.error());
QVERIFY(finished);
- if (proc.exitCode() != 0) {
- qDebug() << proc.readAllStandardError();
- }
- QCOMPARE(proc.exitCode(), 0);
- QCOMPARE(proc.readAllStandardError(), QByteArray());
+ VERIFY_NO_ERRORS(proc);
QByteArray mocOut = proc.readAllStandardOutput();
// If -pthread wasn't ignored, it was parsed as a prefix of "thread/", which breaks compilation.
@@ -1223,7 +1343,7 @@ void tst_Moc::ignoreOptionClashes()
proc.closeWriteChannel();
QVERIFY(proc.waitForFinished());
- QCOMPARE(QString::fromLocal8Bit(proc.readAllStandardError()), QString());
+ VERIFY_NO_ERRORS(proc);
#else
QSKIP("Only tested on linux/gcc");
#endif
@@ -1246,7 +1366,7 @@ void tst_Moc::forgottenQInterface()
QVERIFY(!mocOut.isEmpty());
QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError());
QCOMPARE(mocWarning, header +
- QString(":45:1: warning: Class Test implements the interface MyInterface but does not list it in Q_INTERFACES. qobject_cast to MyInterface will not work!\n"));
+ QString(":20:1: warning: Class Test implements the interface MyInterface but does not list it in Q_INTERFACES. qobject_cast to MyInterface will not work!\n"));
#else
QSKIP("Only tested on linux/gcc");
#endif
@@ -1275,9 +1395,9 @@ void tst_Moc::winNewline()
QVERIFY(f.open(QIODevice::ReadOnly)); // no QIODevice::Text!
QByteArray data = f.readAll();
f.close();
- for (int i = 0; i < data.count(); ++i) {
+ for (int i = 0; i < data.size(); ++i) {
if (data.at(i) == QLatin1Char('\r')) {
- QVERIFY(i < data.count() - 1);
+ QVERIFY(i < data.size() - 1);
++i;
QCOMPARE(data.at(i), '\n');
} else {
@@ -1328,11 +1448,7 @@ void tst_Moc::frameworkSearchPath()
if (!finished)
qWarning("waitForFinished failed. QProcess error: %d", (int)proc.error());
QVERIFY(finished);
- if (proc.exitCode() != 0) {
- qDebug() << proc.readAllStandardError();
- }
- QCOMPARE(proc.exitCode(), 0);
- QCOMPARE(proc.readAllStandardError(), QByteArray());
+ VERIFY_NO_ERRORS(proc);
#else
QSKIP("Only tested/relevant on unixy platforms");
#endif
@@ -1364,11 +1480,9 @@ void tst_Moc::templateGtGt()
QProcess proc;
proc.start(m_moc, QStringList(m_sourceDirectory + QStringLiteral("/template-gtgt.h")));
QVERIFY(proc.waitForFinished());
- QCOMPARE(proc.exitCode(), 0);
+ VERIFY_NO_ERRORS(proc);
QByteArray mocOut = proc.readAllStandardOutput();
QVERIFY(!mocOut.isEmpty());
- QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError());
- QVERIFY(mocWarning.isEmpty());
#else
QSKIP("Only tested on unix/gcc");
#endif
@@ -1385,8 +1499,7 @@ void tst_Moc::defineMacroViaCmdline()
proc.start(m_moc, args);
QVERIFY(proc.waitForFinished());
- QCOMPARE(proc.exitCode(), 0);
- QCOMPARE(proc.readAllStandardError(), QByteArray());
+ VERIFY_NO_ERRORS(proc);
QByteArray mocOut = proc.readAllStandardOutput();
QVERIFY(!mocOut.isEmpty());
#else
@@ -1405,8 +1518,7 @@ void tst_Moc::defineMacroViaForcedInclude()
proc.start(m_moc, args);
QVERIFY(proc.waitForFinished());
- QCOMPARE(proc.exitCode(), 0);
- QCOMPARE(proc.readAllStandardError(), QByteArray());
+ VERIFY_NO_ERRORS(proc);
QByteArray mocOut = proc.readAllStandardOutput();
QVERIFY(!mocOut.isEmpty());
#else
@@ -1425,8 +1537,7 @@ void tst_Moc::defineMacroViaForcedIncludeRelative()
proc.start(m_moc, args);
QVERIFY(proc.waitForFinished());
- QCOMPARE(proc.exitCode(), 0);
- QCOMPARE(proc.readAllStandardError(), QByteArray());
+ VERIFY_NO_ERRORS(proc);
QByteArray mocOut = proc.readAllStandardOutput();
QVERIFY(!mocOut.isEmpty());
#else
@@ -1471,8 +1582,7 @@ void tst_Moc::environmentIncludePaths()
proc.setProcessEnvironment(env);
proc.start(m_moc, args);
QVERIFY(proc.waitForFinished());
- QCOMPARE(proc.exitCode(), 0);
- QCOMPARE(proc.readAllStandardError(), QByteArray());
+ VERIFY_NO_ERRORS(proc);
QByteArray mocOut = proc.readAllStandardOutput();
QVERIFY(!mocOut.isEmpty());
#else
@@ -1482,9 +1592,9 @@ void tst_Moc::environmentIncludePaths()
// tst_Moc::specifyMetaTagsFromCmdline()
// plugin_metadata.h contains a plugin which we register here. Since we're not building this
-// application as a plugin, we need top copy some of the initializer code found in qplugin.h:
-extern "C" QObject *qt_plugin_instance();
-extern "C" QPluginMetaData qt_plugin_query_metadata_v2();
+// application as a plugin, we need to copy some of the initializer code found in qplugin.h:
+extern "C" Q_DECL_EXPORT QObject *qt_plugin_instance();
+extern "C" Q_DECL_EXPORT QPluginMetaData qt_plugin_query_metadata_v2();
class StaticPluginInstance{
public:
StaticPluginInstance() {
@@ -1495,7 +1605,8 @@ public:
static StaticPluginInstance staticInstance;
void tst_Moc::specifyMetaTagsFromCmdline() {
- foreach (const QStaticPlugin &plugin, QPluginLoader::staticPlugins()) {
+ const auto staticPlugins = QPluginLoader::staticPlugins();
+ for (const QStaticPlugin &plugin : staticPlugins) {
const QString iid = plugin.metaData().value(QLatin1String("IID")).toString();
if (iid == QLatin1String("test.meta.tags")) {
const QJsonArray metaTagsUriList = plugin.metaData().value("uri").toArray();
@@ -1513,41 +1624,43 @@ void tst_Moc::specifyMetaTagsFromCmdline() {
void tst_Moc::invokable()
{
+ const int fooIndex = 4;
{
const QMetaObject &mobj = InvokableBeforeReturnType::staticMetaObject;
- QCOMPARE(mobj.methodCount(), 6);
- QCOMPARE(mobj.method(5).methodSignature(), QByteArray("foo()"));
+ QCOMPARE(mobj.methodCount(), 5);
+ QCOMPARE(mobj.method(fooIndex).methodSignature(), QByteArray("foo()"));
}
{
const QMetaObject &mobj = InvokableBeforeInline::staticMetaObject;
- QCOMPARE(mobj.methodCount(), 7);
- QCOMPARE(mobj.method(5).methodSignature(), QByteArray("foo()"));
- QCOMPARE(mobj.method(6).methodSignature(), QByteArray("bar()"));
+ QCOMPARE(mobj.methodCount(), 6);
+ QCOMPARE(mobj.method(fooIndex).methodSignature(), QByteArray("foo()"));
+ QCOMPARE(mobj.method(fooIndex + 1).methodSignature(), QByteArray("bar()"));
}
}
void tst_Moc::singleFunctionKeywordSignalAndSlot()
{
+ const int mySignalIndex = 4;
{
const QMetaObject &mobj = SingleFunctionKeywordBeforeReturnType::staticMetaObject;
- QCOMPARE(mobj.methodCount(), 7);
- QCOMPARE(mobj.method(5).methodSignature(), QByteArray("mySignal()"));
- QCOMPARE(mobj.method(6).methodSignature(), QByteArray("mySlot()"));
+ QCOMPARE(mobj.methodCount(), 6);
+ QCOMPARE(mobj.method(mySignalIndex).methodSignature(), QByteArray("mySignal()"));
+ QCOMPARE(mobj.method(mySignalIndex + 1).methodSignature(), QByteArray("mySlot()"));
}
{
const QMetaObject &mobj = SingleFunctionKeywordBeforeInline::staticMetaObject;
- QCOMPARE(mobj.methodCount(), 7);
- QCOMPARE(mobj.method(5).methodSignature(), QByteArray("mySignal()"));
- QCOMPARE(mobj.method(6).methodSignature(), QByteArray("mySlot()"));
+ QCOMPARE(mobj.methodCount(), 6);
+ QCOMPARE(mobj.method(mySignalIndex).methodSignature(), QByteArray("mySignal()"));
+ QCOMPARE(mobj.method(mySignalIndex + 1).methodSignature(), QByteArray("mySlot()"));
}
{
const QMetaObject &mobj = SingleFunctionKeywordAfterInline::staticMetaObject;
- QCOMPARE(mobj.methodCount(), 7);
- QCOMPARE(mobj.method(5).methodSignature(), QByteArray("mySignal()"));
- QCOMPARE(mobj.method(6).methodSignature(), QByteArray("mySlot()"));
+ QCOMPARE(mobj.methodCount(), 6);
+ QCOMPARE(mobj.method(mySignalIndex).methodSignature(), QByteArray("mySignal()"));
+ QCOMPARE(mobj.method(mySignalIndex + 1).methodSignature(), QByteArray("mySlot()"));
}
}
@@ -1635,6 +1748,54 @@ void tst_Moc::qprivateproperties()
QVERIFY(zapBindable.isBindable());
}
+
+class AnonymousPropertyTest1 : public QObject
+{
+ Q_OBJECT
+ QT_ANONYMOUS_PROPERTY(int READ foo WRITE setFoo)
+public:
+ int foo() { return mFoo ; }
+ void setFoo(int value) { mFoo = value; }
+
+private:
+ int mFoo = 0;
+};
+
+class AnonymousPropertyTest2 : public QObject
+{
+ Q_OBJECT
+ QT_ANONYMOUS_PRIVATE_PROPERTY(d, int READ bar WRITE setBar)
+
+ class MyDPointer {
+ public:
+ int bar() { return mBar ; }
+ void setBar(int value) { mBar = value; }
+ private:
+ int mBar = 0;
+ };
+
+public:
+ AnonymousPropertyTest2(QObject *parent = nullptr) : QObject(parent), d (new MyDPointer) {}
+ MyDPointer *d_func() {return d.data();}
+ const MyDPointer *d_func() const {return d.data();}
+
+private:
+ QScopedPointer<MyDPointer> d;
+};
+
+void tst_Moc::anonymousProperties()
+{
+ AnonymousPropertyTest1 test1;
+
+ test1.setProperty("", 17);
+ QCOMPARE(test1.property(""), QVariant::fromValue(17));
+
+ AnonymousPropertyTest2 test2;
+
+ test2.setProperty("", 27);
+ QCOMPARE(test2.property(""), QVariant::fromValue(27));
+}
+
void tst_Moc::warnOnPropertyWithoutREAD()
{
#ifdef MOC_CROSS_COMPILED
@@ -1650,7 +1811,7 @@ void tst_Moc::warnOnPropertyWithoutREAD()
QVERIFY(!mocOut.isEmpty());
QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError());
QCOMPARE(mocWarning, header +
- QString(":36:1: warning: Property declaration foo has neither an associated QProperty<> member, nor a READ accessor function nor an associated MEMBER variable. The property will be invalid.\n"));
+ QString(":11:1: warning: Property declaration foo has neither an associated QProperty<> member, nor a READ accessor function nor an associated MEMBER variable. The property will be invalid.\n"));
#else
QSKIP("Only tested on unix/gcc");
#endif
@@ -1760,8 +1921,8 @@ void tst_Moc::warnOnVirtualSignal()
QByteArray mocOut = proc.readAllStandardOutput();
QVERIFY(!mocOut.isEmpty());
QString mocWarning = QString::fromLocal8Bit(proc.readAllStandardError());
- QCOMPARE(mocWarning, header + QString(":38:1: warning: Signals cannot be declared virtual\n") +
- header + QString(":40:1: warning: Signals cannot be declared virtual\n"));
+ QCOMPARE(mocWarning, header + QString(":13:1: warning: Signals cannot be declared virtual\n") +
+ header + QString(":15:1: warning: Signals cannot be declared virtual\n"));
#else
QSKIP("Only tested on unix/gcc");
#endif
@@ -1879,11 +2040,10 @@ void tst_Moc::notifyError()
const QString header = m_sourceDirectory + QStringLiteral("/error-on-wrong-notify.h");
proc.start(m_moc, QStringList(header));
QVERIFY(proc.waitForFinished());
- QCOMPARE(proc.exitCode(), 0);
+ VERIFY_NO_ERRORS(proc);
QCOMPARE(proc.exitStatus(), QProcess::NormalExit);
QByteArray mocOut = proc.readAllStandardOutput();
QVERIFY(!mocOut.isEmpty());
- QCOMPARE(proc.readAllStandardError(), QByteArray());
QStringList args;
args << "-c" << "-x" << "c++" << "-I" << "."
@@ -2101,7 +2261,7 @@ void tst_Moc::warnings_data()
<< QStringList()
<< 0
<< QString()
- << QString("standard input:0:1: note: No relevant classes found. No output generated.");
+ << QString("standard input: note: No relevant classes found. No output generated.");
// passing "-nn" should suppress "no relevant classes" note
QTest::newRow("-nn")
@@ -2243,7 +2403,7 @@ void tst_Moc::warnings_data()
<< QStringList()
<< 1
<< QString("IGNORE_ALL_STDOUT")
- << QString(":-1:1: error: Unexpected character in macro argument list.");
+ << QString(": error: Unexpected character in macro argument list.");
QTest::newRow("Missing header warning")
<< QByteArray("class X : public QObject { Q_OBJECT };")
@@ -2290,6 +2450,13 @@ void tst_Moc::warnings_data()
<< QString()
<< QString("standard input:3:1: error: Parse error at \"decltype\"");
+ QTest::newRow("QTBUG-36367: report correct error location")
+ << "class X { \n Q_PROPERTY(Foo* foo NONSENSE foo) \n };"_ba
+ << QStringList()
+ << 1
+ << QString()
+ << u"standard input:2:1: error: Parse error at \"NONSENSE\""_s;
+
#ifdef Q_OS_UNIX // Limit to Unix because the error message is platform-dependent
QTest::newRow("Q_PLUGIN_METADATA: unreadable file")
<< QByteArray("class X { \n Q_PLUGIN_METADATA(FILE \".\") \n };")
@@ -2370,23 +2537,29 @@ void tst_Moc::cxx11Enums_data()
QTest::addColumn<QByteArray>("enumName");
QTest::addColumn<char>("prefix");
QTest::addColumn<bool>("isScoped");
+ QTest::addColumn<bool>("isTyped");
const QMetaObject *meta1 = &CXX11Enums::staticMetaObject;
const QMetaObject *meta2 = &CXX11Enums2::staticMetaObject;
-
- QTest::newRow("EnumClass") << meta1 << QByteArray("EnumClass") << QByteArray("EnumClass") << 'A' << true;
- QTest::newRow("EnumClass 2") << meta2 << QByteArray("EnumClass") << QByteArray("EnumClass") << 'A' << true;
- QTest::newRow("TypedEnum") << meta1 << QByteArray("TypedEnum") << QByteArray("TypedEnum") << 'B' << false;
- QTest::newRow("TypedEnum 2") << meta2 << QByteArray("TypedEnum") << QByteArray("TypedEnum") << 'B' << false;
- QTest::newRow("TypedEnumClass") << meta1 << QByteArray("TypedEnumClass") << QByteArray("TypedEnumClass") << 'C' << true;
- QTest::newRow("TypedEnumClass 2") << meta2 << QByteArray("TypedEnumClass") << QByteArray("TypedEnumClass") << 'C' << true;
- QTest::newRow("NormalEnum") << meta1 << QByteArray("NormalEnum") << QByteArray("NormalEnum") << 'D' << false;
- QTest::newRow("NormalEnum 2") << meta2 << QByteArray("NormalEnum") << QByteArray("NormalEnum") << 'D' << false;
- QTest::newRow("ClassFlags") << meta1 << QByteArray("ClassFlags") << QByteArray("ClassFlag") << 'F' << true;
- QTest::newRow("ClassFlags 2") << meta2 << QByteArray("ClassFlags") << QByteArray("ClassFlag") << 'F' << true;
- QTest::newRow("EnumStruct") << meta1 << QByteArray("EnumStruct") << QByteArray("EnumStruct") << 'G' << true;
- QTest::newRow("TypedEnumStruct") << meta1 << QByteArray("TypedEnumStruct") << QByteArray("TypedEnumStruct") << 'H' << true;
- QTest::newRow("StructFlags") << meta1 << QByteArray("StructFlags") << QByteArray("StructFlag") << 'I' << true;
+ const QMetaObject *meta3 = &CXX11Enums3::staticMetaObject;
+
+ QTest::newRow("EnumClass") << meta1 << QByteArray("EnumClass") << QByteArray("EnumClass") << 'A' << true << false;
+ QTest::newRow("EnumClass 2") << meta2 << QByteArray("EnumClass") << QByteArray("EnumClass") << 'A' << true << false;
+ QTest::newRow("EnumClass 3") << meta3 << QByteArray("EnumClass") << QByteArray("EnumClass") << 'A' << true << false;
+ QTest::newRow("TypedEnum") << meta1 << QByteArray("TypedEnum") << QByteArray("TypedEnum") << 'B' << false << true;
+ QTest::newRow("TypedEnum 2") << meta2 << QByteArray("TypedEnum") << QByteArray("TypedEnum") << 'B' << false << true;
+ QTest::newRow("TypedEnum 3") << meta3 << QByteArray("TypedEnum") << QByteArray("TypedEnum") << 'B' << false << true;
+ QTest::newRow("TypedEnumClass") << meta1 << QByteArray("TypedEnumClass") << QByteArray("TypedEnumClass") << 'C' << true << true;
+ QTest::newRow("TypedEnumClass 2") << meta2 << QByteArray("TypedEnumClass") << QByteArray("TypedEnumClass") << 'C' << true << true;
+ QTest::newRow("TypedEnumClass 3") << meta3 << QByteArray("TypedEnumClass") << QByteArray("TypedEnumClass") << 'C' << true << true;
+ QTest::newRow("NormalEnum") << meta1 << QByteArray("NormalEnum") << QByteArray("NormalEnum") << 'D' << false << false;
+ QTest::newRow("NormalEnum 2") << meta2 << QByteArray("NormalEnum") << QByteArray("NormalEnum") << 'D' << false << false;
+ QTest::newRow("NormalEnum 3") << meta3 << QByteArray("NormalEnum") << QByteArray("NormalEnum") << 'D' << false << false;
+ QTest::newRow("ClassFlags") << meta1 << QByteArray("ClassFlags") << QByteArray("ClassFlag") << 'F' << true << false;
+ QTest::newRow("ClassFlags 2") << meta2 << QByteArray("ClassFlags") << QByteArray("ClassFlag") << 'F' << true << false;
+ QTest::newRow("EnumStruct") << meta1 << QByteArray("EnumStruct") << QByteArray("EnumStruct") << 'G' << true << false;
+ QTest::newRow("TypedEnumStruct") << meta1 << QByteArray("TypedEnumStruct") << QByteArray("TypedEnumStruct") << 'H' << true << true;
+ QTest::newRow("StructFlags") << meta1 << QByteArray("StructFlags") << QByteArray("StructFlag") << 'I' << true << false;
}
void tst_Moc::cxx11Enums()
@@ -2398,24 +2571,39 @@ void tst_Moc::cxx11Enums()
QFETCH(QByteArray, enumName);
QFETCH(char, prefix);
QFETCH(bool, isScoped);
+ QFETCH(bool, isTyped);
int idx = meta->indexOfEnumerator(typeName);
QVERIFY(idx != -1);
QCOMPARE(meta->indexOfEnumerator(enumName), idx);
- QCOMPARE(meta->enumerator(idx).enclosingMetaObject(), meta);
- QCOMPARE(meta->enumerator(idx).isValid(), true);
- QCOMPARE(meta->enumerator(idx).keyCount(), 4);
- QCOMPARE(meta->enumerator(idx).name(), typeName.constData());
- QCOMPARE(meta->enumerator(idx).enumName(), enumName.constData());
- bool isFlag = meta->enumerator(idx).isFlag();
+ const QMetaEnum metaEnum = meta->enumerator(idx);
+ QCOMPARE(metaEnum.enclosingMetaObject(), meta);
+ QCOMPARE(metaEnum.isValid(), true);
+ QCOMPARE(metaEnum.keyCount(), 4);
+ QCOMPARE(metaEnum.name(), typeName.constData());
+ QCOMPARE(metaEnum.enumName(), enumName.constData());
+
+ const QMetaType metaType = metaEnum.metaType();
+ const bool isUnsigned = metaType.flags() & QMetaType::IsUnsignedEnumeration;
+ if (isTyped) {
+ QCOMPARE(size_t(metaType.sizeOf()), sizeof(char));
+ QCOMPARE(isUnsigned, !std::is_signed_v<char>);
+ } else if (isScoped) {
+ QCOMPARE(size_t(metaType.sizeOf()), sizeof(int));
+ QCOMPARE(isUnsigned, !std::is_signed_v<int>);
+ } else {
+ // underlying type is implementation defined
+ }
+
+ bool isFlag = metaEnum.isFlag();
for (int i = 0; i < 4; i++) {
QByteArray v = prefix + QByteArray::number(i);
const int value = isFlag ? (1 << i) : i;
- QCOMPARE(meta->enumerator(idx).keyToValue(v), value);
- QCOMPARE(meta->enumerator(idx).valueToKey(value), v.constData());
+ QCOMPARE(metaEnum.keyToValue(v), value);
+ QCOMPARE(metaEnum.valueToKey(value), v.constData());
}
- QCOMPARE(meta->enumerator(idx).isScoped(), isScoped);
+ QCOMPARE(metaEnum.isScoped(), isScoped);
}
void tst_Moc::cxx11TrailingReturn()
@@ -2510,7 +2698,7 @@ void tst_Moc::memberProperties()
if (!signal.isEmpty())
{
- QCOMPARE(notifySpy.count(), 1);
+ QCOMPARE(notifySpy.size(), 1);
if (prop.notifySignal().parameterNames().size() > 0) {
QList<QVariant> arguments = notifySpy.takeFirst();
QCOMPARE(arguments.size(), 1);
@@ -2520,7 +2708,7 @@ void tst_Moc::memberProperties()
notifySpy.clear();
// a second write with the same value should not cause the signal to be emitted again
QCOMPARE(prop.write(pObj, writeValue), expectedWriteResult);
- QCOMPARE(notifySpy.count(), 0);
+ QCOMPARE(notifySpy.size(), 0);
}
}
@@ -3600,10 +3788,9 @@ void tst_Moc::preprocessorOnly()
QProcess proc;
proc.start(m_moc, QStringList() << "-E" << m_sourceDirectory + QStringLiteral("/pp-dollar-signs.h"));
QVERIFY(proc.waitForFinished());
- QCOMPARE(proc.exitCode(), 0);
+ VERIFY_NO_ERRORS(proc);
QByteArray mocOut = proc.readAllStandardOutput();
QVERIFY(!mocOut.isEmpty());
- QCOMPARE(proc.readAllStandardError(), QByteArray());
QVERIFY(mocOut.contains("$$ = parser->createFoo()"));
#else
@@ -3754,7 +3941,7 @@ void tst_Moc::relatedMetaObjectsNameConflict()
{
typedef QList<const QMetaObject *> QMetaObjects;
QFETCH(const QMetaObject*, dependingObject);
- QFETCH(QMetaObjects, relatedMetaObjects);
+ QFETCH(const QMetaObjects, relatedMetaObjects);
// load all specified metaobjects int a set
QSet<const QMetaObject*> dependency;
@@ -3765,7 +3952,7 @@ void tst_Moc::relatedMetaObjectsNameConflict()
}
// check if all required metaobjects are specified
- foreach (const QMetaObject *mo, relatedMetaObjects)
+ for (const QMetaObject *mo : relatedMetaObjects)
QVERIFY(dependency.contains(mo));
// check if no additional metaobjects ara specified
@@ -3832,6 +4019,7 @@ class VeryLongStringData : public QObject
#define repeat32768(V) repeat16384(V) repeat16384(V)
#define repeat65534(V) repeat32768(V) repeat16384(V) repeat8192(V) repeat4096(V) repeat2048(V) repeat1024(V) repeat512(V) repeat256(V) repeat128(V) repeat64(V) repeat32(V) repeat16(V) repeat8(V) repeat4(V) repeat2(V)
+ Q_CLASSINFO("\1" "23\xff", "String with CRLF.\r\n")
Q_CLASSINFO(repeat65534("n"), repeat65534("i"))
Q_CLASSINFO(repeat65534("e"), repeat65534("r"))
Q_CLASSINFO(repeat32768("o"), repeat32768("b"))
@@ -3880,25 +4068,26 @@ void tst_Moc::unnamedNamespaceObjectsAndGadgets()
void tst_Moc::veryLongStringData()
{
const QMetaObject *mobj = &VeryLongStringData::staticMetaObject;
- QCOMPARE(mobj->classInfoCount(), 4);
-
- QCOMPARE(mobj->classInfo(0).name()[0], 'n');
- QCOMPARE(mobj->classInfo(0).value()[0], 'i');
- QCOMPARE(mobj->classInfo(1).name()[0], 'e');
- QCOMPARE(mobj->classInfo(1).value()[0], 'r');
- QCOMPARE(mobj->classInfo(2).name()[0], 'o');
- QCOMPARE(mobj->classInfo(2).value()[0], 'b');
- QCOMPARE(mobj->classInfo(3).name()[0], ':');
- QCOMPARE(mobj->classInfo(3).value()[0], ')');
-
- QCOMPARE(strlen(mobj->classInfo(0).name()), static_cast<size_t>(65534));
- QCOMPARE(strlen(mobj->classInfo(0).value()), static_cast<size_t>(65534));
- QCOMPARE(strlen(mobj->classInfo(1).name()), static_cast<size_t>(65534));
- QCOMPARE(strlen(mobj->classInfo(1).value()), static_cast<size_t>(65534));
- QCOMPARE(strlen(mobj->classInfo(2).name()), static_cast<size_t>(32768));
- QCOMPARE(strlen(mobj->classInfo(2).value()), static_cast<size_t>(32768));
- QCOMPARE(strlen(mobj->classInfo(3).name()), static_cast<size_t>(1));
- QCOMPARE(strlen(mobj->classInfo(3).value()), static_cast<size_t>(1));
+ int startAt = 1; // some other classinfo added to the beginning
+ QCOMPARE(mobj->classInfoCount(), startAt + 4);
+
+ QCOMPARE(mobj->classInfo(startAt + 0).name()[0], 'n');
+ QCOMPARE(mobj->classInfo(startAt + 0).value()[0], 'i');
+ QCOMPARE(mobj->classInfo(startAt + 1).name()[0], 'e');
+ QCOMPARE(mobj->classInfo(startAt + 1).value()[0], 'r');
+ QCOMPARE(mobj->classInfo(startAt + 2).name()[0], 'o');
+ QCOMPARE(mobj->classInfo(startAt + 2).value()[0], 'b');
+ QCOMPARE(mobj->classInfo(startAt + 3).name()[0], ':');
+ QCOMPARE(mobj->classInfo(startAt + 3).value()[0], ')');
+
+ QCOMPARE(strlen(mobj->classInfo(startAt + 0).name()), static_cast<size_t>(65534));
+ QCOMPARE(strlen(mobj->classInfo(startAt + 0).value()), static_cast<size_t>(65534));
+ QCOMPARE(strlen(mobj->classInfo(startAt + 1).name()), static_cast<size_t>(65534));
+ QCOMPARE(strlen(mobj->classInfo(startAt + 1).value()), static_cast<size_t>(65534));
+ QCOMPARE(strlen(mobj->classInfo(startAt + 2).name()), static_cast<size_t>(32768));
+ QCOMPARE(strlen(mobj->classInfo(startAt + 2).value()), static_cast<size_t>(32768));
+ QCOMPARE(strlen(mobj->classInfo(startAt + 3).name()), static_cast<size_t>(1));
+ QCOMPARE(strlen(mobj->classInfo(startAt + 3).value()), static_cast<size_t>(1));
}
void tst_Moc::gadgetHierarchy()
@@ -3934,10 +4123,12 @@ void tst_Moc::optionsFileError()
}
static void checkEnum(const QMetaEnum &enumerator, const QByteArray &name,
- const QList<QPair<QByteArray, int>> &keys)
+ const QList<QPair<QByteArray, int>> &keys,
+ const QMetaType underlyingType = QMetaType::fromType<int>())
{
QCOMPARE(name, QByteArray{enumerator.name()});
QCOMPARE(keys.size(), enumerator.keyCount());
+ QCOMPARE(underlyingType, enumerator.metaType().underlyingType());
for (int i = 0; i < enumerator.keyCount(); ++i) {
QCOMPARE(keys[i].first, QByteArray{enumerator.key(i)});
QCOMPARE(keys[i].second, enumerator.value(i));
@@ -3952,29 +4143,57 @@ public:
FooNamespace::Enum1 prop() { return FooNamespace::Enum1::Key2; }
};
+void tst_Moc::testNestedQNamespace()
+{
+ QCOMPARE(TestSameEnumNamespace::staticMetaObject.enumeratorCount(), 1);
+ checkEnum(TestSameEnumNamespace::staticMetaObject.enumerator(0), "TestSameEnumNamespace",
+ {{"Key1", 1}, {"Key2", 2}});
+ QMetaEnum meta1 = QMetaEnum::fromType<TestSameEnumNamespace::TestSameEnumNamespace>();
+ QVERIFY(meta1.isValid());
+ QCOMPARE(meta1.name(), "TestSameEnumNamespace");
+ QCOMPARE(meta1.enclosingMetaObject(), &TestSameEnumNamespace::staticMetaObject);
+ QCOMPARE(meta1.keyCount(), 2);
+
+ // QTBUG-112996
+ QCOMPARE(TestNestedSameEnumNamespace::a::staticMetaObject.enumeratorCount(), 1);
+ checkEnum(TestNestedSameEnumNamespace::a::staticMetaObject.enumerator(0), "a",
+ {{"Key11", 11}, {"Key12", 12}});
+ QMetaEnum meta2 = QMetaEnum::fromType<TestNestedSameEnumNamespace::a::a>();
+ QVERIFY(meta2.isValid());
+ QCOMPARE(meta2.name(), "a");
+ QCOMPARE(meta2.enclosingMetaObject(), &TestNestedSameEnumNamespace::a::staticMetaObject);
+ QCOMPARE(meta2.keyCount(), 2);
+}
+
void tst_Moc::testQNamespace()
{
- QCOMPARE(TestQNamespace::staticMetaObject.enumeratorCount(), 4);
+ QCOMPARE(TestQNamespace::staticMetaObject.enumeratorCount(), 5);
checkEnum(TestQNamespace::staticMetaObject.enumerator(0), "TestEnum1",
{{"Key1", 11}, {"Key2", 12}});
checkEnum(TestQNamespace::staticMetaObject.enumerator(1), "TestEnum2",
{{"Key1", 17}, {"Key2", 18}});
- checkEnum(TestQNamespace::staticMetaObject.enumerator(2), "TestFlag1",
+ checkEnum(TestQNamespace::staticMetaObject.enumerator(2), "TestEnum3",
+ {{"Key1", 23}, {"Key2", 24}}, QMetaType::fromType<qint8>());
+ checkEnum(TestQNamespace::staticMetaObject.enumerator(3), "TestFlag1",
{{"None", 0}, {"Flag1", 1}, {"Flag2", 2}, {"Any", 1 | 2}});
- checkEnum(TestQNamespace::staticMetaObject.enumerator(3), "TestFlag2",
+ checkEnum(TestQNamespace::staticMetaObject.enumerator(4), "TestFlag2",
{{"None", 0}, {"Flag1", 4}, {"Flag2", 8}, {"Any", 4 | 8}});
- QCOMPARE(TestQNamespace::TestGadget::staticMetaObject.enumeratorCount(), 2);
+ QCOMPARE(TestQNamespace::TestGadget::staticMetaObject.enumeratorCount(), 3);
checkEnum(TestQNamespace::TestGadget::staticMetaObject.enumerator(0), "TestGEnum1",
{{"Key1", 13}, {"Key2", 14}});
checkEnum(TestQNamespace::TestGadget::staticMetaObject.enumerator(1), "TestGEnum2",
{{"Key1", 23}, {"Key2", 24}});
+ checkEnum(TestQNamespace::TestGadget::staticMetaObject.enumerator(2), "TestGEnum3",
+ {{"Key1", 33}, {"Key2", 34}}, QMetaType::fromType<qint16>());
- QCOMPARE(TestQNamespace::TestGadgetExport::staticMetaObject.enumeratorCount(), 2);
+ QCOMPARE(TestQNamespace::TestGadgetExport::staticMetaObject.enumeratorCount(), 3);
checkEnum(TestQNamespace::TestGadgetExport::staticMetaObject.enumerator(0), "TestGeEnum1",
{{"Key1", 20}, {"Key2", 21}});
checkEnum(TestQNamespace::TestGadgetExport::staticMetaObject.enumerator(1), "TestGeEnum2",
{{"Key1", 23}, {"Key2", 24}});
+ checkEnum(TestQNamespace::TestGadgetExport::staticMetaObject.enumerator(2), "TestGeEnum3",
+ {{"Key1", 26}, {"Key2", 27}}, QMetaType::fromType<quint16>());
QMetaEnum meta = QMetaEnum::fromType<TestQNamespace::TestEnum1>();
QVERIFY(meta.isValid());
@@ -4017,7 +4236,9 @@ void tst_Moc::cxx17Namespaces()
void tst_Moc::cxxAttributes()
{
+QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
auto so = CppAttribute::staticMetaObject;
+QT_WARNING_POP
QCOMPARE(so.className(), "CppAttribute");
QCOMPARE(so.enumeratorCount(), 0);
QVERIFY(so.indexOfSignal("deprecatedSignal") != 1);
@@ -4052,9 +4273,12 @@ void tst_Moc::cxxAttributes()
void tst_Moc::mocJsonOutput()
{
- const auto readFile = [](const QString &fileName) {
+ const auto readFile = [](const QString &fileName) -> std::optional<QJsonDocument> {
QFile f(fileName);
- f.open(QIODevice::ReadOnly);
+ if (!f.open(QIODevice::ReadOnly)) {
+ qWarning() << "Could not open file" << fileName << f.errorString();
+ return std::nullopt;
+ }
return QJsonDocument::fromJson(f.readAll());
};
@@ -4070,8 +4294,10 @@ void tst_Moc::mocJsonOutput()
QVERIFY2(QFile::exists(actualFile), qPrintable(actualFile));
QVERIFY2(QFile::exists(expectedFile), qPrintable(expectedFile));
- QJsonDocument actualOutput = readFile(actualFile);
- QJsonDocument expectedOutput = readFile(expectedFile);
+ std::optional<QJsonDocument> actualOutput = readFile(actualFile);
+ QVERIFY(actualOutput);
+ std::optional<QJsonDocument> expectedOutput = readFile(expectedFile);
+ QVERIFY(expectedOutput);
const auto showPotentialDiff = [](const QJsonDocument &actual, const QJsonDocument &expected) -> QByteArray {
#if defined(Q_OS_UNIX)
@@ -4100,11 +4326,13 @@ void tst_Moc::mocJsonOutput()
return "Error waiting for diff process to finish.";
return diffProc.readAllStandardOutput();
#else
+ Q_UNUSED(actual);
+ Q_UNUSED(expected);
return "Cannot launch diff. Please check allmocs.json and allmocs_baseline.json on disk.";
#endif
};
- QVERIFY2(actualOutput == expectedOutput, showPotentialDiff(actualOutput, expectedOutput).constData());
+ QVERIFY2(*actualOutput == *expectedOutput, showPotentialDiff(*actualOutput, *expectedOutput).constData());
}
void TestFwdProperties::setProp1(const FwdClass1 &v)
@@ -4200,7 +4428,7 @@ void tst_Moc::qpropertyMembers()
instance.publicProperty.setValue(100);
QCOMPARE(prop.read(&instance).toInt(), 100);
- QCOMPARE(publicPropertySpy.count(), 1);
+ QCOMPARE(publicPropertySpy.size(), 1);
QCOMPARE(prop.metaType(), QMetaType(QMetaType::Int));
@@ -4341,6 +4569,140 @@ void tst_Moc::privateQPropertyShim()
QCOMPARE(testObject.priv.testProperty2.value(), 42);
}
+
+class BindableOnly : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int score BINDABLE scoreBindable READ default WRITE default)
+public:
+ BindableOnly(QObject *parent = nullptr)
+ : QObject(parent)
+ , m_score(4)
+ {}
+ QBindable<int> scoreBindable() { return QBindable<int>(&m_score); }
+private:
+ QProperty<int> m_score;
+};
+
+class BindableAndNotifyable : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(int score BINDABLE scoreBindable NOTIFY scoreChanged READ default WRITE default)
+public:
+ BindableAndNotifyable(QObject *parent = nullptr)
+ : QObject(parent)
+ , m_score(4)
+ {}
+ QBindable<int> scoreBindable() { return QBindable<int>(&m_score); }
+signals:
+ void scoreChanged();
+private:
+ QProperty<int> m_score;
+};
+
+void tst_Moc::readWriteThroughBindable()
+{
+ {
+ BindableOnly o;
+ QCOMPARE(o.scoreBindable().value(), 4);
+ QCOMPARE(o.property("score").toInt(), 4);
+ o.scoreBindable().setValue(5);
+ QCOMPARE(o.scoreBindable().value(), 5);
+ QCOMPARE(o.property("score").toInt(), 5);
+ const QMetaObject *mo = o.metaObject();
+ const int i = mo->indexOfProperty("score");
+ QVERIFY(i > 0);
+ QMetaProperty p = mo->property(i);
+ QCOMPARE(p.name(), "score");
+ QVERIFY(p.isValid());
+ QVERIFY(p.isWritable());
+ QCOMPARE(p.read(&o), 5);
+ QVERIFY(o.setProperty("score", 6));
+ QCOMPARE(o.property("score").toInt(), 6);
+ QVERIFY(p.write(&o, 7));
+ QCOMPARE(p.read(&o), 7);
+ }
+ {
+ BindableAndNotifyable o;
+ QCOMPARE(o.scoreBindable().value(), 4);
+ QCOMPARE(o.property("score").toInt(), 4);
+ o.scoreBindable().setValue(5);
+ QCOMPARE(o.scoreBindable().value(), 5);
+ QCOMPARE(o.property("score").toInt(), 5);
+ const QMetaObject *mo = o.metaObject();
+ const int i = mo->indexOfProperty("score");
+ QVERIFY(i > 0);
+ QMetaProperty p = mo->property(i);
+ QCOMPARE(p.name(), "score");
+ QVERIFY(p.isValid());
+ QVERIFY(p.isWritable());
+ QCOMPARE(p.read(&o), 5);
+ QVERIFY(o.setProperty("score", 6));
+ QCOMPARE(o.property("score").toInt(), 6);
+ QVERIFY(p.write(&o, 7));
+ QCOMPARE(p.read(&o), 7);
+ }
+}
+
+struct WithInvokableCtor
+{
+ Q_GADGET
+ Q_PROPERTY(int thing MEMBER m_thing CONSTANT FINAL)
+public:
+ WithInvokableCtor() = default;
+ Q_INVOKABLE WithInvokableCtor(int theThing) : m_thing(theThing) {}
+
+ int m_thing = 10;
+};
+
+void tst_Moc::invokableCtors()
+{
+ const QMetaType metaType = QMetaType::fromType<WithInvokableCtor>();
+ Q_ASSERT(metaType.sizeOf() > 0);
+ const QMetaObject *metaObject = metaType.metaObject();
+ QVERIFY(metaObject);
+
+ QCOMPARE(metaObject->constructorCount(), 1);
+ WithInvokableCtor *result = nullptr;
+ const auto guard = qScopeGuard([&]() { delete result; });
+ int argument = 17;
+ void *a[] = { &result, &argument };
+ metaObject->static_metacall(QMetaObject::CreateInstance, 0, a);
+ QVERIFY(result);
+ QCOMPARE(result->m_thing, 17);
+
+ // Call dtor so that we're left with "uninitialized" memory.
+ WithInvokableCtor result2;
+ result2.~WithInvokableCtor();
+
+ void *b[] = { &result2, &argument };
+ metaObject->static_metacall(QMetaObject::ConstructInPlace, 0, b);
+ QCOMPARE(result2.m_thing, 17);
+}
+
+void tst_Moc::virtualInlineTaggedSlot()
+{
+ auto mo = TagTest::staticMetaObject;
+ auto idx = mo.indexOfMethod("pamOpen(int)");
+ auto method = mo.method(idx);
+ QVERIFY(method.isValid()); // fails!
+ QCOMPARE(method.tag(), "Q_NOREPLY");
+ idx = mo.indexOfMethod("test()");
+ method = mo.method(idx);
+ QVERIFY(method.isValid());
+ QCOMPARE(method.tag(), "Q_NOREPLY");
+ QCOMPARE(method.returnMetaType(), QMetaType::fromType<int>());
+}
+
+void tst_Moc::tokenStartingWithNumber()
+{
+ auto *mo = &TokenStartingWithNumber::staticMetaObject;
+ int index = mo->indexOfEnumerator("FooItems");
+ QMetaEnum metaEnum = mo->enumerator(index);
+ QVERIFY(metaEnum.isValid());
+ QCOMPARE(metaEnum.keyCount(), 3);
+}
+
QTEST_MAIN(tst_Moc)
// the generated code must compile with QT_NO_KEYWORDS
diff --git a/tests/auto/tools/moc/unterminated-function-macro.h b/tests/auto/tools/moc/unterminated-function-macro.h
index da8e4c9e93..2cb0579449 100644
--- a/tests/auto/tools/moc/unterminated-function-macro.h
+++ b/tests/auto/tools/moc/unterminated-function-macro.h
@@ -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
#ifndef UNTERMINATED_FUNCTION_MACRO_H
#define UNTERMINATED_FUNCTION_MACRO_H
diff --git a/tests/auto/tools/moc/using-namespaces.h b/tests/auto/tools/moc/using-namespaces.h
index 5bd42012ce..eaba403dff 100644
--- a/tests/auto/tools/moc/using-namespaces.h
+++ b/tests/auto/tools/moc/using-namespaces.h
@@ -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
#ifndef USING_NAMESPACES_H
#define USING_NAMESPACES_H
diff --git a/tests/auto/tools/moc/warn-on-multiple-qobject-subclasses.h b/tests/auto/tools/moc/warn-on-multiple-qobject-subclasses.h
index 5f9bab5e2f..0e45036768 100644
--- a/tests/auto/tools/moc/warn-on-multiple-qobject-subclasses.h
+++ b/tests/auto/tools/moc/warn-on-multiple-qobject-subclasses.h
@@ -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
#ifndef WARN_ON_MULTIPLE_QOBJECT_SUBCLASSES_H
#define WARN_ON_MULTIPLE_QOBJECT_SUBCLASSES_H
diff --git a/tests/auto/tools/moc/warn-on-property-without-read.h b/tests/auto/tools/moc/warn-on-property-without-read.h
index 0fd12e624b..19a3a305bd 100644
--- a/tests/auto/tools/moc/warn-on-property-without-read.h
+++ b/tests/auto/tools/moc/warn-on-property-without-read.h
@@ -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
#ifndef WARN_ON_PROPERTY_WITHOUT_READ_H
#define WARN_ON_PROPERTY_WITHOUT_READ_H
diff --git a/tests/auto/tools/moc/win-newlines.h b/tests/auto/tools/moc/win-newlines.h
index 2e41f2f83e..353c21dbbb 100644
--- a/tests/auto/tools/moc/win-newlines.h
+++ b/tests/auto/tools/moc/win-newlines.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qdbuscpp2xml/CMakeLists.txt b/tests/auto/tools/qdbuscpp2xml/CMakeLists.txt
index ad2d289eb4..9dea3f3c4d 100644
--- a/tests/auto/tools/qdbuscpp2xml/CMakeLists.txt
+++ b/tests/auto/tools/qdbuscpp2xml/CMakeLists.txt
@@ -1,20 +1,29 @@
-# Generated from qdbuscpp2xml.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbuscpp2xml Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbuscpp2xml LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbuscpp2xml
SOURCES
test1.h
+ test2.h
tst_qdbuscpp2xml.cpp
- PUBLIC_LIBRARIES
- Qt::DBus
+ LIBRARIES
+ Qt::DBusPrivate
)
# Resources:
set(qdbuscpp2xml_resource_files
"test1.h"
+ "test2.h"
)
qt_internal_add_resource(tst_qdbuscpp2xml "qdbuscpp2xml"
diff --git a/tests/auto/tools/qdbuscpp2xml/test1.h b/tests/auto/tools/qdbuscpp2xml/test1.h
index 69f3a2cadc..24cd939657 100644
--- a/tests/auto/tools/qdbuscpp2xml/test1.h
+++ b/tests/auto/tools/qdbuscpp2xml/test1.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 QDBUSCPP2XML_TEST1_H
#define QDBUSCPP2XML_TEST1_H
@@ -42,6 +17,7 @@ class Test1 : public QObject
Q_CLASSINFO("D-Bus Interface", "org.qtProject.qdbuscpp2xmlTests.Test1")
Q_PROPERTY(int numProperty1 READ numProperty1 CONSTANT)
Q_PROPERTY(int numProperty2 READ numProperty2 WRITE setNumProperty2)
+ Q_PROPERTY(int numProperty3 MEMBER m_numProperty3)
Q_ENUMS(Salaries)
public:
// C++1y allows use of single quote as a digit separator, useful for large
@@ -122,6 +98,9 @@ protected:
private:
Q_SCRIPTABLE void neverExported11() {}
Q_SCRIPTABLE int neverExported12() { return 42; }
+
+private:
+ int m_numProperty3;
};
#endif
diff --git a/tests/auto/tools/qdbuscpp2xml/test2.h b/tests/auto/tools/qdbuscpp2xml/test2.h
new file mode 100644
index 0000000000..b90820ad38
--- /dev/null
+++ b/tests/auto/tools/qdbuscpp2xml/test2.h
@@ -0,0 +1,24 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#ifndef TEST2_H
+#define TEST2_H
+
+#include <QObject>
+#include <QtDBus/QtDBus>
+
+// Regression test for QTBUG-34550
+class Test2 : public QObject
+{
+ Q_OBJECT
+ Q_CLASSINFO("D-Bus Interface", "net.company.object")
+ Q_PROPERTY(QDBusObjectPath objectProperty READ objectProperty)
+ Q_PROPERTY(QList<QDBusObjectPath> objectPropertyList READ objectPropertyList)
+public:
+ Test2(QObject *parent = nullptr) : QObject(parent) { }
+
+ QDBusObjectPath objectProperty() { return {}; }
+
+ QList<QDBusObjectPath> objectPropertyList() { return {}; }
+};
+
+#endif // TEST2_H
diff --git a/tests/auto/tools/qdbuscpp2xml/tst_qdbuscpp2xml.cpp b/tests/auto/tools/qdbuscpp2xml/tst_qdbuscpp2xml.cpp
index 90d91b9848..535aa6c5a8 100644
--- a/tests/auto/tools/qdbuscpp2xml/tst_qdbuscpp2xml.cpp
+++ b/tests/auto/tools/qdbuscpp2xml/tst_qdbuscpp2xml.cpp
@@ -1,38 +1,15 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 <QTest>
#include <QLibraryInfo>
#include <QProcess>
-#include "test1.h"
-
#include <QtDBus/QDBusConnection>
+#include <QtDBus/private/dbus_minimal_p.h>
+
+#include "test1.h"
+#include "test2.h"
// in qdbusxmlgenerator.cpp
QT_BEGIN_NAMESPACE
@@ -57,6 +34,8 @@ class tst_qdbuscpp2xml : public QObject
private slots:
void qdbuscpp2xml_data();
void qdbuscpp2xml();
+ void qtdbusTypes_data();
+ void qtdbusTypes();
void initTestCase();
void cleanupTestCase();
@@ -68,6 +47,7 @@ private:
void tst_qdbuscpp2xml::initTestCase()
{
m_tests.insert("test1", new Test1);
+ m_tests.insert("test2", new Test2);
}
void tst_qdbuscpp2xml::cleanupTestCase()
@@ -82,14 +62,16 @@ void tst_qdbuscpp2xml::qdbuscpp2xml_data()
QBitArray doneFlags(int(QDBusConnection::ExportAllContents) + 1);
for (int flag = 0x10; flag < QDBusConnection::ExportScriptableContents; flag += 0x10) {
- QTest::newRow("xmlgenerator-" + QByteArray::number(flag)) << "test1" << flag;
- doneFlags.setBit(flag);
- for (int mask = QDBusConnection::ExportAllSlots; mask <= QDBusConnection::ExportAllContents; mask += 0x110) {
- int flags = flag | mask;
- if (doneFlags.testBit(flags))
- continue;
- QTest::newRow("xmlgenerator-" + QByteArray::number(flags)) << "test1" << flags;
- doneFlags.setBit(flags);
+ for (const auto &testFile : m_tests.keys()) {
+ QTest::newRow("xmlgenerator-" + QByteArray::number(flag) + "-" + qUtf8Printable(testFile)) << testFile << flag;
+ doneFlags.setBit(flag);
+ for (int mask = QDBusConnection::ExportAllSlots; mask <= QDBusConnection::ExportAllContents; mask += 0x110) {
+ int flags = flag | mask;
+ if (doneFlags.testBit(flags))
+ continue;
+ QTest::newRow("xmlgenerator-" + QByteArray::number(flags) + "-" + qUtf8Printable(testFile)) << testFile << flags;
+ doneFlags.setBit(flags);
+ }
}
}
}
@@ -150,9 +132,6 @@ void tst_qdbuscpp2xml::qdbuscpp2xml()
QFAIL("UNEXPECTED STDERR CONTENTS");
}
- const QChar nl = QLatin1Char('\n');
- const QStringList actualLines = out.split(nl);
-
QObject *testObject = m_tests.value(inputfile);
if (flags == 0)
@@ -166,6 +145,77 @@ void tst_qdbuscpp2xml::qdbuscpp2xml()
QCOMPARE(out, expected);
}
+void tst_qdbuscpp2xml::qtdbusTypes_data()
+{
+ QTest::addColumn<QByteArray>("type");
+ QTest::addColumn<QByteArray>("expectedSignature");
+ auto addRow = [](QByteArray type, QByteArray signature) {
+ QTest::addRow("%s", type.constData()) << type << signature;
+
+ // lists and vectors
+ QTest::addRow("QList-%s", type.constData())
+ << "QList<" + type + '>' << DBUS_TYPE_ARRAY + signature;
+ QTest::addRow("QVector-%s", type.constData())
+ << "QVector<" + type + '>' << DBUS_TYPE_ARRAY + signature;
+ };
+ addRow("QDBusVariant", DBUS_TYPE_VARIANT_AS_STRING);
+ addRow("QDBusObjectPath", DBUS_TYPE_OBJECT_PATH_AS_STRING);
+ addRow("QDBusSignature", DBUS_TYPE_SIGNATURE_AS_STRING);
+ addRow("QDBusUnixFileDescriptor", DBUS_TYPE_UNIX_FD_AS_STRING);
+
+ // QDBusMessage is not a type, but must be recognized
+ QTest::newRow("QDBusMessage") << QByteArray("QDBusMessage") << QByteArray();
+}
+
+void tst_qdbuscpp2xml::qtdbusTypes()
+{
+ static const char cppSkeleton[] = R"(
+class QDBusVariantBugRepro : public QDBusAbstractAdaptor
+{
+ Q_OBJECT
+ Q_CLASSINFO("D-Bus Interface", "org.qtproject.test")
+public Q_SLOTS:
+ void method(const @TYPE@ &);
+};)";
+ static const char methodXml[] = R"(<method name="method")";
+ static const char expectedSkeleton[] = R"(<arg type="@S@" direction="in"/>)";
+
+ QFETCH(QByteArray, type);
+ QFETCH(QByteArray, expectedSignature);
+
+ const QString binpath = QLibraryInfo::path(QLibraryInfo::BinariesPath);
+ const QString command = binpath + QLatin1String("/qdbuscpp2xml");
+ QProcess process;
+ process.start(command);
+
+ process.write(QByteArray(cppSkeleton).replace("@TYPE@", type));
+ process.closeWriteChannel();
+
+ if (!process.waitForStarted()) {
+ const QString path = QString::fromLocal8Bit(qgetenv("PATH"));
+ QString message = QString::fromLatin1("'%1' could not be found when run from '%2'. Path: '%3' ").
+ arg(command, QDir::currentPath(), path);
+ QFAIL(qPrintable(message));
+ }
+ QVERIFY2(process.waitForFinished(), qPrintable(process.errorString()));
+
+ // verify nothing was printed on stderr
+ QCOMPARE(process.readAllStandardError(), QString());
+
+ // we don't do a full XML parsing here...
+ QByteArray output = process.readAll().simplified();
+ QVERIFY2(output.contains("<node>") && output.contains("</node>"), "Output was: " + output);
+ output = output.mid(output.indexOf("<node>") + strlen("<node>"));
+ output = output.left(output.indexOf("</node>"));
+
+ QVERIFY2(output.contains(methodXml), "Output was: " + output);
+
+ if (!expectedSignature.isEmpty()) {
+ QByteArray expected = QByteArray(expectedSkeleton).replace("@S@", expectedSignature);
+ QVERIFY2(output.contains(expected), "Expected: '" + expected + "'; got: '" + output + '\'');
+ }
+}
+
QTEST_APPLESS_MAIN(tst_qdbuscpp2xml)
#include "tst_qdbuscpp2xml.moc"
diff --git a/tests/auto/tools/qdbusxml2cpp/CMakeLists.txt b/tests/auto/tools/qdbusxml2cpp/CMakeLists.txt
index 9932f9f32b..29278377b6 100644
--- a/tests/auto/tools/qdbusxml2cpp/CMakeLists.txt
+++ b/tests/auto/tools/qdbusxml2cpp/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qdbusxml2cpp.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusxml2cpp Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdbusxml2cpp LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdbusxml2cpp
SOURCES
tst_qdbusxml2cpp.cpp
diff --git a/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp b/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp
index 12c2a9295f..c51a0909f8 100644
--- a/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp
+++ b/tests/auto/tools/qdbusxml2cpp/tst_qdbusxml2cpp.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QLibraryInfo>
@@ -44,6 +19,12 @@ private slots:
void initTestCase_data();
void process_data();
void process();
+ void includeStyle_data();
+ void includeStyle();
+ void missingAnnotation_data();
+ void missingAnnotation();
+ void includeMoc_data();
+ void includeMoc();
};
struct BasicTypeList {
@@ -80,6 +61,72 @@ static QString stripHeader(QString output)
return output.remove(header);
}
+static void runTool(QProcess &process, const QByteArray &data,
+ const QStringList &flags)
+{
+ // test both interface and adaptor generation
+ QFETCH_GLOBAL(QString, commandLineArg);
+
+ // Run the tool
+ const QString binpath = QLibraryInfo::path(QLibraryInfo::BinariesPath);
+ QStringList arguments = { commandLineArg };
+ arguments += flags;
+ process.setArguments(arguments);
+ process.setProgram(binpath + QLatin1String("/qdbusxml2cpp"));
+ process.start(QIODevice::Text | QIODevice::ReadWrite);
+ QVERIFY2(process.waitForStarted(), qPrintable(process.errorString()));
+
+ static const char xmlHeader[] =
+ "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
+ DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE // \n is included
+ "<node>\n"
+ " <interface name=\"local.name.is.not.important\">\n"
+ " <!-- begin data -->\n";
+ static const char xmlFooter[] = "\n"
+ " <!-- end data -->\n"
+ " </interface>\n"
+ "</node>\n";
+
+ process.write(xmlHeader, sizeof(xmlHeader) - 1);
+ process.write(data);
+ process.write(xmlFooter, sizeof(xmlFooter) - 1);
+
+ while (process.bytesToWrite())
+ QVERIFY2(process.waitForBytesWritten(), qPrintable(process.errorString()));
+ // fprintf(stderr, "%s%s%s", xmlHeader, xmlSnippet.toLatin1().constData(), xmlFooter);
+
+ process.closeWriteChannel();
+ QVERIFY2(process.waitForFinished(), qPrintable(process.errorString()));
+ QCOMPARE(process.exitStatus(), QProcess::NormalExit);
+}
+
+static void checkOneFile(const QString &fileName, const QByteArray &expected)
+{
+ QFile file(fileName);
+ QVERIFY(file.exists());
+ const auto guard = QScopeGuard([&](){ QFile::remove(fileName); });
+
+ QVERIFY(file.open(QFile::Text | QFile::ReadOnly));
+ QByteArray text = file.readAll();
+ QVERIFY(text.contains(expected));
+}
+
+static void checkTwoFiles(const QString &headerName, const QString &sourceName, const QByteArray &expected)
+{
+ QFile headerFile(headerName);
+ QFile sourceFile(sourceName);
+
+ QVERIFY(headerFile.exists());
+ const auto headerGuard = QScopeGuard([&](){ QFile::remove(headerName); });
+
+ QVERIFY(sourceFile.exists());
+ const auto sourceGuard = QScopeGuard([&](){ QFile::remove(sourceName); });
+
+ QVERIFY(sourceFile.open(QFile::Text | QFile::ReadOnly));
+ QByteArray text = sourceFile.readAll();
+ QVERIFY(text.contains(expected));
+}
+
void tst_qdbusxml2cpp::initTestCase_data()
{
QTest::addColumn<int>("outputMode");
@@ -187,11 +234,52 @@ void tst_qdbusxml2cpp::process_data()
"<arg type=\"s\" direction=\"out\"/>"
"<arg type=\"s\" direction=\"out\"/>"
"</method>"
- << QRegularExpression("Q_SLOTS:.*QDBusPendingReply<QString, QString> Method\\(const QString &\\w*, const QString &",
+ << QRegularExpression("Q_SLOTS:.*QDBusPendingReply<QString, QString> Method\\(const QString &\\w*, const QString &\\w*\\)"
+ ".*inline QDBusReply<QString> Method\\(const QString &\\w*, const QString &\\w*, QString &\\w*\\)",
QRegularExpression::DotMatchesEverythingOption)
<< QRegularExpression("Q_SLOTS:.*QString Method\\(const QString &\\w*, const QString &\\w*, QString &",
QRegularExpression::DotMatchesEverythingOption);
+ QTest::newRow("method-deprecated-0out")
+ << "<method name=\"Method\">"
+ "<annotation name=\"org.freedesktop.DBus.Deprecated\" value=\"true\"/>"
+ "</method>"
+ << QRegularExpression("Q_SLOTS:.*Q_DECL_DEPRECATED inline QDBusPendingReply<> Method\\(\\)",
+ QRegularExpression::DotMatchesEverythingOption)
+ << QRegularExpression("Q_SLOTS:.*\n\\s*void Method\\(\\)", // no Q_DECL_DEPRECATED
+ QRegularExpression::DotMatchesEverythingOption);
+
+ QTest::newRow("method-deprecated-2out")
+ << "<method name=\"Method\">"
+ "<annotation name=\"org.freedesktop.DBus.Deprecated\" value=\"true\"/>"
+ "<arg type=\"s\" direction=\"out\"/>"
+ "<arg type=\"s\" direction=\"out\"/>"
+ "</method>"
+ << QRegularExpression("Q_SLOTS:.*Q_DECL_DEPRECATED inline QDBusPendingReply<QString, QString> Method\\(\\)"
+ ".*Q_DECL_DEPRECATED inline QDBusReply<QString> Method\\(QString &\\w*\\)",
+ QRegularExpression::DotMatchesEverythingOption)
+ << QRegularExpression("Q_SLOTS:.*\n\\s*QString Method\\(QString &", // no Q_DECL_DEPRECATED
+ QRegularExpression::DotMatchesEverythingOption);
+
+ QTest::newRow("method-noreply")
+ << "<method name=\"Method\">"
+ "<annotation name=\"org.freedesktop.DBus.Method.NoReply\" value=\"true\"/>"
+ "</method>"
+ << QRegularExpression("Q_SLOTS:.*Q_NOREPLY inline void Method\\(\\).*\\bQDBus::NoBlock\\b",
+ QRegularExpression::DotMatchesEverythingOption)
+ << QRegularExpression("Q_SLOTS:.*Q_NOREPLY void Method\\(",
+ QRegularExpression::DotMatchesEverythingOption);
+
+ QTest::newRow("method-deprecated-noreply")
+ << "<method name=\"Method\">"
+ "<annotation name=\"org.freedesktop.DBus.Method.NoReply\" value=\"true\"/>"
+ "<annotation name=\"org.freedesktop.DBus.Deprecated\" value=\"true\"/>"
+ "</method>"
+ << QRegularExpression("Q_SLOTS:.*Q_DECL_DEPRECATED Q_NOREPLY inline void Method\\(\\).*\\bQDBus::NoBlock\\b",
+ QRegularExpression::DotMatchesEverythingOption)
+ << QRegularExpression("Q_SLOTS:.*Q_NOREPLY void Method\\(",
+ QRegularExpression::DotMatchesEverythingOption);
+
// -- signals --
for (int i = 0; i < basicTypeCount; ++i) {
QRegularExpression rx(QString("Q_SIGNALS:.*\\bvoid Signal\\((const )?%1\\b")
@@ -204,6 +292,24 @@ void tst_qdbusxml2cpp::process_data()
.arg(basicTypeList[i].dbusType)
<< rx << rx;
}
+
+ QRegularExpression rx(R"(Q_SIGNALS:.*\b\Qvoid Signal(const QVariantMap &map);\E)",
+ QRegularExpression::DotMatchesEverythingOption);
+ QTest::newRow("signal-complex")
+ << R"(<signal name="Signal">
+ <arg type="a{sv}" name="map"/>
+ <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="QVariantMap"/>"
+ </signal>)"
+ << rx << rx;
+
+ QTest::newRow("signal-deprecated")
+ << R"(<signal name="Signal">
+ <annotation name="org.freedesktop.DBus.Deprecated" value="true"/>
+ </signal>)"
+ << QRegularExpression(R"(Q_SIGNALS:.*\bQ_DECL_DEPRECATED void Signal\(\))",
+ QRegularExpression::DotMatchesEverythingOption)
+ << QRegularExpression(R"(Q_SIGNALS:.*\n\s*void Signal\(\))", // no Q_DECL_DEPRECATED
+ QRegularExpression::DotMatchesEverythingOption);
}
void tst_qdbusxml2cpp::process()
@@ -214,38 +320,11 @@ void tst_qdbusxml2cpp::process()
QVERIFY2(interfaceSearch.isValid(), qPrintable(interfaceSearch.errorString()));
QVERIFY2(adaptorSearch.isValid(), qPrintable(adaptorSearch.errorString()));
- // test both interface and adaptor generation
QFETCH_GLOBAL(int, outputMode);
- QFETCH_GLOBAL(QString, commandLineArg);
-
- // Run the tool
- const QString binpath = QLibraryInfo::path(QLibraryInfo::BinariesPath);
- const QString command = binpath + QLatin1String("/qdbusxml2cpp");
QProcess process;
- process.start(command, QStringList() << commandLineArg << "-" << "-N");
- QVERIFY2(process.waitForStarted(), qPrintable(process.errorString()));
-
- // feed it our XML data
- static const char xmlHeader[] =
- "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"
- DBUS_INTROSPECT_1_0_XML_DOCTYPE_DECL_NODE // \n is included
- "<node>\n"
- " <interface name=\"local.name.is.not.important\">\n"
- " <!-- begin data -->\n";
- static const char xmlFooter[] = "\n"
- " <!-- end data -->\n"
- " </interface>\n"
- "</node>\n";
-
- process.write(xmlHeader, int(sizeof xmlHeader) - 1);
- process.write(xmlSnippet.toLatin1());
- process.write(xmlFooter, int(sizeof xmlFooter) - 1);
- while (process.bytesToWrite())
- QVERIFY2(process.waitForBytesWritten(), qPrintable(process.errorString()));
- // fprintf(stderr, "%s%s%s", xmlHeader, xmlSnippet.toLatin1().constData(), xmlFooter);
-
- process.closeWriteChannel();
- QVERIFY2(process.waitForFinished(), qPrintable(process.errorString()));
+ QStringList flags = {"-", "-N"};
+ runTool(process, xmlSnippet.toLatin1(), flags);
+ if (QTest::currentTestFailed()) return;
QByteArray errOutput = process.readAllStandardError();
QVERIFY2(errOutput.isEmpty(), errOutput);
@@ -260,6 +339,149 @@ void tst_qdbusxml2cpp::process()
QVERIFY2(output.count(adaptorSearch) == 1, qPrintable(adaptorSearch.pattern() + "\nin\n" + output));
}
+void tst_qdbusxml2cpp::includeStyle_data()
+{
+ QTest::addColumn<bool>("isGlobal");
+ QTest::addColumn<QByteArray>("expected");
+
+ QTest::newRow("localInclude") << false << QByteArray("#include \"test.hpp\"");
+ QTest::newRow("globalInclude") << true << QByteArray("#include <test.hpp>");
+}
+
+void tst_qdbusxml2cpp::includeStyle()
+{
+ QFETCH(bool, isGlobal);
+ QFETCH(QByteArray, expected);
+
+ QProcess process;
+ QStringList flags = {"-", "-N", (isGlobal ? "-I" : "-i"), "test.hpp"};
+
+ runTool(process,QByteArray{},flags);
+ QCOMPARE(process.exitCode(), 0);
+
+ QByteArray errOutput = process.readAllStandardError();
+ QVERIFY2(errOutput.isEmpty(), errOutput);
+
+ QByteArray fullOutput = process.readAll();
+ QVERIFY(!fullOutput.isEmpty());
+ QVERIFY(fullOutput.contains(expected));
+}
+
+void tst_qdbusxml2cpp::missingAnnotation_data()
+{
+ QTest::addColumn<QString>("xmlSnippet");
+ QTest::addColumn<QString>("annotationName");
+ QTest::addColumn<QString>("location");
+
+ QTest::newRow("property")
+ << R"(<property type="%1" name="name" access="readwrite"/>)"
+ << "org.qtproject.QtDBus.QtTypeName"
+ << "7:2";
+ QTest::newRow("method-in")
+ << R"(<method name="Method">
+ <arg type="%1" name="name" direction="in"/>
+ </method>)"
+ << "org.qtproject.QtDBus.QtTypeName.In0"
+ << "8:22";
+ QTest::newRow("method-out")
+ << R"(<method name="Method">
+ <arg type="%1" name="name" direction="out"/>
+ </method>)"
+ << "org.qtproject.QtDBus.QtTypeName.Out0"
+ << "8:22";
+ QTest::newRow("signal")
+ << R"(<signal name="Signal">
+ <arg type="%1" name="name"/>
+ </signal>)"
+ << "org.qtproject.QtDBus.QtTypeName.Out0"
+ << "8:22";
+ QTest::newRow("signal-out")
+ << R"(<signal name="Signal">
+ <arg type="%1" name="name" direction="out"/>
+ </signal>)"
+ << "org.qtproject.QtDBus.QtTypeName.Out0"
+ << "8:22";
+}
+
+void tst_qdbusxml2cpp::missingAnnotation()
+{
+ QFETCH(QString, xmlSnippet);
+ QFETCH(QString, annotationName);
+ QFETCH(QString, location);
+
+ QString type = "(ii)";
+ QProcess process;
+ QStringList flags = {"-", "-N"};
+ runTool(process, xmlSnippet.arg(type).toLatin1(),flags);
+ if (QTest::currentTestFailed()) return;
+
+ // it must have failed
+ QString errOutput = QString::fromLatin1(process.readAllStandardError().trimmed());
+ QCOMPARE(process.exitCode(), 1);
+ QCOMPARE(process.readAllStandardOutput(), QByteArray());
+ QVERIFY(!errOutput.isEmpty());
+
+ // check it did suggest the right annotation
+ QString expected = R"(<standard input>:%3: error: unknown type `%1'
+<standard input>:%3: note: you should add <annotation name="%2" value="<type>"/>)";
+ expected = expected.arg(type, annotationName, location);
+ QCOMPARE(errOutput, expected);
+}
+
+void tst_qdbusxml2cpp::includeMoc_data()
+{
+ QTest::addColumn<QString>("filenames");
+ QTest::addColumn<QByteArray>("expected");
+ QTest::addColumn<QByteArray>("warning");
+
+ QTest::newRow("combined-h") << "foo.h" << QByteArray("#include \"foo.moc\"") << QByteArray("");
+ QTest::newRow("combined-cpp") << "foo.cpp" << QByteArray("#include \"foo.moc\"") << QByteArray("");
+ QTest::newRow("combined-cc") << "foo.cc" << QByteArray("#include \"foo.moc\"") << QByteArray("");
+ QTest::newRow("without extension") << "foo" << QByteArray("#include \"moc_foo.cpp\"") << QByteArray("");
+ QTest::newRow("cpp-only") << ":foo.cpp" << QByteArray("#include \"moc_foo.cpp\"")
+ << QByteArray("warning: no header name is provided, assuming it to be \"foo.h\"");
+ QTest::newRow("header-and-cpp") << "foo_h.h:foo.cpp" << QByteArray("#include \"moc_foo_h.cpp\"") << QByteArray("");
+
+ QTest::newRow("combined-cpp with dots") << "foo.bar.cpp" << QByteArray("#include \"foo.bar.moc\"") << QByteArray("");
+ QTest::newRow("without extension with dots") << "foo.bar" << QByteArray("#include \"moc_foo.bar.cpp\"") << QByteArray("");
+ QTest::newRow("header-and-cpp with dots") << "foo.bar_h.h:foo.bar.cpp" << QByteArray("#include \"moc_foo.bar_h.cpp\"") << QByteArray("");
+}
+
+void tst_qdbusxml2cpp::includeMoc()
+{
+ QFETCH(QString, filenames);
+ QFETCH(QByteArray, expected);
+ QFETCH(QByteArray, warning);
+
+ QProcess process;
+ QStringList flags = {filenames, "--moc"};
+ runTool(process,QByteArray{},flags);
+ QByteArray errOutput = process.readAllStandardError();
+ QVERIFY(errOutput.startsWith(warning));
+ QCOMPARE(process.exitCode(), 0);
+
+ QStringList parts = filenames.split(u':');
+ QFileInfo first{parts.first()};
+
+ const bool firstHasSuffix = QStringList({"h", "cpp", "cc"}).contains(first.suffix());
+
+ if ((parts.size() == 1) && firstHasSuffix) {
+ checkOneFile(parts.first(), expected);
+ } else if ((parts.size() == 1) && (!firstHasSuffix)) {
+ QString headerName{parts.first()};
+ headerName += ".h";
+ QString sourceName{parts.first()};
+ sourceName += ".cpp";
+
+ checkTwoFiles(headerName, sourceName, expected);
+ } else if ((parts.size() == 2) && (parts.first().isEmpty())) {
+ checkOneFile(parts.last(), expected);
+ }
+ else if ((parts.size() == 2) && !parts.first().isEmpty() && !parts.last().isEmpty()) {
+ checkTwoFiles(parts.first(), parts.last(), expected);
+ }
+}
+
QTEST_MAIN(tst_qdbusxml2cpp)
#include "tst_qdbusxml2cpp.moc"
diff --git a/tests/auto/tools/qmake/CMakeLists.txt b/tests/auto/tools/qmake/CMakeLists.txt
index a6aec5df5f..8fe0566baa 100644
--- a/tests/auto/tools/qmake/CMakeLists.txt
+++ b/tests/auto/tools/qmake/CMakeLists.txt
@@ -1,8 +1,11 @@
-# Generated from qmake.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-#####################################################################
-## tst_qmake Test:
-#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmake LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Collect test data
file(GLOB_RECURSE test_data_glob
@@ -17,8 +20,21 @@ qt_internal_add_test(tst_qmake
TESTDATA ${test_data}
)
-## Scopes:
-#####################################################################
-
-#### Keys ignored in scope 2:.:.:qmake.pro:WIN32:
-# testcase.timeout = "900"
+set(dependencies
+ Qt::moc
+ Qt::qmake
+)
+if(TARGET Qt::Gui)
+ list(APPEND dependencies Qt::Gui)
+endif()
+if(TARGET Qt::Widgets)
+ list(APPEND dependencies Qt::Widgets)
+endif()
+if(TARGET Qt::rcc)
+ list(APPEND dependencies Qt::rcc)
+endif()
+if(TARGET Qt::uic)
+ list(APPEND dependencies Qt::uic)
+endif()
+# Add dependencies that are implicitly used inside the test
+add_dependencies(tst_qmake ${dependencies})
diff --git a/tests/auto/tools/qmake/testcompiler.cpp b/tests/auto/tools/qmake/testcompiler.cpp
index 8ab8d5d721..23d9b76187 100644
--- a/tests/auto/tools/qmake/testcompiler.cpp
+++ b/tests/auto/tools/qmake/testcompiler.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 "testcompiler.h"
@@ -129,7 +104,8 @@ static inline QStringList systemEnvironment()
#ifdef Q_OS_WIN
static QStringList result;
if (result.isEmpty()) {
- foreach (const QString &variable, QProcess::systemEnvironment()) {
+ const auto env = QProcess::systemEnvironment();
+ for (const QString &variable : env) {
if (variable.startsWith(QStringLiteral("MAKEFLAGS="), Qt::CaseInsensitive)) {
qWarning("Removing environment setting '%s'", qPrintable(variable));
} else {
@@ -148,7 +124,7 @@ bool TestCompiler::runCommand(const QString &cmd, const QStringList &args, bool
QString dbg = cmd;
if (dbg.contains(' '))
dbg.prepend('"').append('"');
- foreach (QString arg, args) {
+ for (QString arg : args) {
if (arg.contains(' '))
arg.prepend('"').append('"');
dbg.append(' ').append(arg);
diff --git a/tests/auto/tools/qmake/testcompiler.h b/tests/auto/tools/qmake/testcompiler.h
index d80cd8d53a..900f05b87a 100644
--- a/tests/auto/tools/qmake/testcompiler.h
+++ b/tests/auto/tools/qmake/testcompiler.h
@@ -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
#ifndef TESTCOMPILER_H
#define TESTCOMPILER_H
diff --git a/tests/auto/tools/qmake/testdata/findDeps/main.cpp b/tests/auto/tools/qmake/testdata/findDeps/main.cpp
index aef383b93b..29c7b2b5f5 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/main.cpp
+++ b/tests/auto/tools/qmake/testdata/findDeps/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 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 spurious \
/ #include "needed.cpp"
diff --git a/tests/auto/tools/qmake/testdata/findDeps/object1.h b/tests/auto/tools/qmake/testdata/findDeps/object1.h
index 804b43be60..02f01d9704 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/object1.h
+++ b/tests/auto/tools/qmake/testdata/findDeps/object1.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findDeps/object2.h b/tests/auto/tools/qmake/testdata/findDeps/object2.h
index 213be8fa9c..ba976af8e5 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/object2.h
+++ b/tests/auto/tools/qmake/testdata/findDeps/object2.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findDeps/object3.h b/tests/auto/tools/qmake/testdata/findDeps/object3.h
index db940adb58..55c6c36dc0 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/object3.h
+++ b/tests/auto/tools/qmake/testdata/findDeps/object3.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findDeps/object4.h b/tests/auto/tools/qmake/testdata/findDeps/object4.h
index c46da036d5..59f4dcbc63 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/object4.h
+++ b/tests/auto/tools/qmake/testdata/findDeps/object4.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findDeps/object5.h b/tests/auto/tools/qmake/testdata/findDeps/object5.h
index 29405a7010..47531a42fa 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/object5.h
+++ b/tests/auto/tools/qmake/testdata/findDeps/object5.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findDeps/object6.h b/tests/auto/tools/qmake/testdata/findDeps/object6.h
index 11ae0564f4..85b9e95834 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/object6.h
+++ b/tests/auto/tools/qmake/testdata/findDeps/object6.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findDeps/object7.h b/tests/auto/tools/qmake/testdata/findDeps/object7.h
index 4c6190d38c..555262bc8e 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/object7.h
+++ b/tests/auto/tools/qmake/testdata/findDeps/object7.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findDeps/object8.h b/tests/auto/tools/qmake/testdata/findDeps/object8.h
index 6d3f82ee44..f04182e80c 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/object8.h
+++ b/tests/auto/tools/qmake/testdata/findDeps/object8.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findDeps/object9.h b/tests/auto/tools/qmake/testdata/findDeps/object9.h
index 3fab5b9078..36722add4e 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/object9.h
+++ b/tests/auto/tools/qmake/testdata/findDeps/object9.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findDeps/objecta.h b/tests/auto/tools/qmake/testdata/findDeps/objecta.h
index 1e5d984748..f563e27e29 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/objecta.h
+++ b/tests/auto/tools/qmake/testdata/findDeps/objecta.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findDeps/objectf.h b/tests/auto/tools/qmake/testdata/findDeps/objectf.h
index 5f5f26b341..601c22aad6 100644
--- a/tests/auto/tools/qmake/testdata/findDeps/objectf.h
+++ b/tests/auto/tools/qmake/testdata/findDeps/objectf.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findMocs/digitseparated.h b/tests/auto/tools/qmake/testdata/findMocs/digitseparated.h
new file mode 100644
index 0000000000..ddedac26e3
--- /dev/null
+++ b/tests/auto/tools/qmake/testdata/findMocs/digitseparated.h
@@ -0,0 +1,8 @@
+#include <QObject>
+
+class AfterDigitSeparator : public QObject
+{
+ Q_OBJECT
+public:
+ AfterDigitSeparator() : QObject(nullptr) {}
+};
diff --git a/tests/auto/tools/qmake/testdata/findMocs/findMocs.pro b/tests/auto/tools/qmake/testdata/findMocs/findMocs.pro
index af672c2621..de2fdff3d2 100644
--- a/tests/auto/tools/qmake/testdata/findMocs/findMocs.pro
+++ b/tests/auto/tools/qmake/testdata/findMocs/findMocs.pro
@@ -1,5 +1,6 @@
DESTDIR = ./
HEADERS += object1.h object2.h object3.h object4.h \
- object5.h object6.h object7.h object8.h object9.h
+ object5.h object6.h object7.h object8.h object9.h \
+ digitseparated.h
SOURCES += main.cpp
diff --git a/tests/auto/tools/qmake/testdata/findMocs/main.cpp b/tests/auto/tools/qmake/testdata/findMocs/main.cpp
index f5d3587fb5..6ee2d2f5e2 100644
--- a/tests/auto/tools/qmake/testdata/findMocs/main.cpp
+++ b/tests/auto/tools/qmake/testdata/findMocs/main.cpp
@@ -1,31 +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 <moc_object1.cpp>
#include <moc_object2.cpp>
@@ -37,4 +11,9 @@
#include "object8.h"
#include <moc_object9.cpp>
-int main() { return 0; }
+int main() { return 0'000; }
+/* Included *after* the use of a numeric literal with an *odd* number of digit
+ separator tick marks in it (and no subsequent apostrophe to end the
+ "single-quoted character literal" that the old parser though it was thus left
+ in). */
+#include <moc_digitseparated.cpp>
diff --git a/tests/auto/tools/qmake/testdata/findMocs/object1.h b/tests/auto/tools/qmake/testdata/findMocs/object1.h
index cac0ebf2fd..4d3900e642 100644
--- a/tests/auto/tools/qmake/testdata/findMocs/object1.h
+++ b/tests/auto/tools/qmake/testdata/findMocs/object1.h
@@ -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
/**//*'*/
diff --git a/tests/auto/tools/qmake/testdata/findMocs/object2.h b/tests/auto/tools/qmake/testdata/findMocs/object2.h
index 5cbcabd4b5..b76cd54c87 100644
--- a/tests/auto/tools/qmake/testdata/findMocs/object2.h
+++ b/tests/auto/tools/qmake/testdata/findMocs/object2.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findMocs/object3.h b/tests/auto/tools/qmake/testdata/findMocs/object3.h
index cc84ed8c43..c8df2143b8 100644
--- a/tests/auto/tools/qmake/testdata/findMocs/object3.h
+++ b/tests/auto/tools/qmake/testdata/findMocs/object3.h
@@ -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
/*
*/
diff --git a/tests/auto/tools/qmake/testdata/findMocs/object4.h b/tests/auto/tools/qmake/testdata/findMocs/object4.h
index 8377869759..17c732ca65 100644
--- a/tests/auto/tools/qmake/testdata/findMocs/object4.h
+++ b/tests/auto/tools/qmake/testdata/findMocs/object4.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findMocs/object5.h b/tests/auto/tools/qmake/testdata/findMocs/object5.h
index 6cadc77b57..673a87be3a 100644
--- a/tests/auto/tools/qmake/testdata/findMocs/object5.h
+++ b/tests/auto/tools/qmake/testdata/findMocs/object5.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findMocs/object6.h b/tests/auto/tools/qmake/testdata/findMocs/object6.h
index 4de8a48c5b..ecfaed7d46 100644
--- a/tests/auto/tools/qmake/testdata/findMocs/object6.h
+++ b/tests/auto/tools/qmake/testdata/findMocs/object6.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findMocs/object7.h b/tests/auto/tools/qmake/testdata/findMocs/object7.h
index 9784ae265d..e3dbb04706 100644
--- a/tests/auto/tools/qmake/testdata/findMocs/object7.h
+++ b/tests/auto/tools/qmake/testdata/findMocs/object7.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findMocs/object8.h b/tests/auto/tools/qmake/testdata/findMocs/object8.h
index 3fd9debba6..95a868ce4f 100644
--- a/tests/auto/tools/qmake/testdata/findMocs/object8.h
+++ b/tests/auto/tools/qmake/testdata/findMocs/object8.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/findMocs/object9.h b/tests/auto/tools/qmake/testdata/findMocs/object9.h
index b7f38ea5e0..8d02ec33a4 100644
--- a/tests/auto/tools/qmake/testdata/findMocs/object9.h
+++ b/tests/auto/tools/qmake/testdata/findMocs/object9.h
@@ -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 <QObject>
diff --git a/tests/auto/tools/qmake/testdata/include_dir/main.cpp b/tests/auto/tools/qmake/testdata/include_dir/main.cpp
index 0335d0f301..097515cbce 100644
--- a/tests/auto/tools/qmake/testdata/include_dir/main.cpp
+++ b/tests/auto/tools/qmake/testdata/include_dir/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 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 "test_file.h"
diff --git a/tests/auto/tools/qmake/testdata/include_dir/test_file.cpp b/tests/auto/tools/qmake/testdata/include_dir/test_file.cpp
index fd81ed9219..ca5590caf6 100644
--- a/tests/auto/tools/qmake/testdata/include_dir/test_file.cpp
+++ b/tests/auto/tools/qmake/testdata/include_dir/test_file.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 "test_file.h"
diff --git a/tests/auto/tools/qmake/testdata/include_dir/test_file.h b/tests/auto/tools/qmake/testdata/include_dir/test_file.h
index 7c29ef6896..8c9e6a47ac 100644
--- a/tests/auto/tools/qmake/testdata/include_dir/test_file.h
+++ b/tests/auto/tools/qmake/testdata/include_dir/test_file.h
@@ -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 <qwidget.h>
#include "ui_untitled.h"
diff --git a/tests/auto/tools/qmake/testdata/install_depends/main.cpp b/tests/auto/tools/qmake/testdata/install_depends/main.cpp
index c764f8a438..cc3fa6b840 100644
--- a/tests/auto/tools/qmake/testdata/install_depends/main.cpp
+++ b/tests/auto/tools/qmake/testdata/install_depends/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 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 "test_file.h"
diff --git a/tests/auto/tools/qmake/testdata/install_depends/test_file.cpp b/tests/auto/tools/qmake/testdata/install_depends/test_file.cpp
index 8b5ab8f0ca..2a582f81fb 100644
--- a/tests/auto/tools/qmake/testdata/install_depends/test_file.cpp
+++ b/tests/auto/tools/qmake/testdata/install_depends/test_file.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 "test_file.h"
diff --git a/tests/auto/tools/qmake/testdata/install_depends/test_file.h b/tests/auto/tools/qmake/testdata/install_depends/test_file.h
index 82cb861345..e9a1ad4e01 100644
--- a/tests/auto/tools/qmake/testdata/install_depends/test_file.h
+++ b/tests/auto/tools/qmake/testdata/install_depends/test_file.h
@@ -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 <qobject.h>
class SomeObject : public QObject
diff --git a/tests/auto/tools/qmake/testdata/one_space/main.cpp b/tests/auto/tools/qmake/testdata/one_space/main.cpp
index 236f348e94..1066d2d927 100644
--- a/tests/auto/tools/qmake/testdata/one_space/main.cpp
+++ b/tests/auto/tools/qmake/testdata/one_space/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 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
diff --git a/tests/auto/tools/qmake/testdata/project/main.cpp b/tests/auto/tools/qmake/testdata/project/main.cpp
index 38f74f50f1..1e7c54bd4e 100644
--- a/tests/auto/tools/qmake/testdata/project/main.cpp
+++ b/tests/auto/tools/qmake/testdata/project/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 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 "test_file.h"
#include <qguiapplication.h>
diff --git a/tests/auto/tools/qmake/testdata/project/test_file.cpp b/tests/auto/tools/qmake/testdata/project/test_file.cpp
index f4787c63e6..44f74d5e61 100644
--- a/tests/auto/tools/qmake/testdata/project/test_file.cpp
+++ b/tests/auto/tools/qmake/testdata/project/test_file.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 "test_file.h"
diff --git a/tests/auto/tools/qmake/testdata/project/test_file.h b/tests/auto/tools/qmake/testdata/project/test_file.h
index c10ecf3493..3a3d6b4e80 100644
--- a/tests/auto/tools/qmake/testdata/project/test_file.h
+++ b/tests/auto/tools/qmake/testdata/project/test_file.h
@@ -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 <qobject.h>
diff --git a/tests/auto/tools/qmake/testdata/quotedfilenames/main.cpp b/tests/auto/tools/qmake/testdata/quotedfilenames/main.cpp
index 8730943e63..9604c17b9e 100644
--- a/tests/auto/tools/qmake/testdata/quotedfilenames/main.cpp
+++ b/tests/auto/tools/qmake/testdata/quotedfilenames/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 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 <header.h>
diff --git a/tests/auto/tools/qmake/testdata/rawString/main.cpp b/tests/auto/tools/qmake/testdata/rawString/main.cpp
index bc557f39f8..f43be64c83 100644
--- a/tests/auto/tools/qmake/testdata/rawString/main.cpp
+++ b/tests/auto/tools/qmake/testdata/rawString/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 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
// macro names that *aren't* string-literal-prefixes:
#define Ru8 "rue-it"
diff --git a/tests/auto/tools/qmake/testdata/rawString/object1.h b/tests/auto/tools/qmake/testdata/rawString/object1.h
index f7829bfdc4..77be17601b 100644
--- a/tests/auto/tools/qmake/testdata/rawString/object1.h
+++ b/tests/auto/tools/qmake/testdata/rawString/object1.h
@@ -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
#define rawstring R"blah(lorem " ipsum /*)blah";
#include <QObject>
diff --git a/tests/auto/tools/qmake/testdata/rawString/object2.h b/tests/auto/tools/qmake/testdata/rawString/object2.h
index d29f0c72ec..643f7035b2 100644
--- a/tests/auto/tools/qmake/testdata/rawString/object2.h
+++ b/tests/auto/tools/qmake/testdata/rawString/object2.h
@@ -1,41 +1,5 @@
-/****************************************************************************
-**
-** 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: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) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef TEST_QMAKE_RAWSTRING_OBJECT2_H
#define TEST_QMAKE_RAWSTRING_OBJECT2_H
diff --git a/tests/auto/tools/qmake/testdata/resources/main.cpp b/tests/auto/tools/qmake/testdata/resources/main.cpp
index 236f348e94..1066d2d927 100644
--- a/tests/auto/tools/qmake/testdata/resources/main.cpp
+++ b/tests/auto/tools/qmake/testdata/resources/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 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
diff --git a/tests/auto/tools/qmake/testdata/shadow_files/main.cpp b/tests/auto/tools/qmake/testdata/shadow_files/main.cpp
index c764f8a438..cc3fa6b840 100644
--- a/tests/auto/tools/qmake/testdata/shadow_files/main.cpp
+++ b/tests/auto/tools/qmake/testdata/shadow_files/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 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 "test_file.h"
diff --git a/tests/auto/tools/qmake/testdata/shadow_files/test_file.cpp b/tests/auto/tools/qmake/testdata/shadow_files/test_file.cpp
index 8b5ab8f0ca..2a582f81fb 100644
--- a/tests/auto/tools/qmake/testdata/shadow_files/test_file.cpp
+++ b/tests/auto/tools/qmake/testdata/shadow_files/test_file.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 "test_file.h"
diff --git a/tests/auto/tools/qmake/testdata/shadow_files/test_file.h b/tests/auto/tools/qmake/testdata/shadow_files/test_file.h
index 82cb861345..e9a1ad4e01 100644
--- a/tests/auto/tools/qmake/testdata/shadow_files/test_file.h
+++ b/tests/auto/tools/qmake/testdata/shadow_files/test_file.h
@@ -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 <qobject.h>
class SomeObject : public QObject
diff --git a/tests/auto/tools/qmake/testdata/simple_app/main.cpp b/tests/auto/tools/qmake/testdata/simple_app/main.cpp
index adf5d7e58e..95af1cc2a6 100644
--- a/tests/auto/tools/qmake/testdata/simple_app/main.cpp
+++ b/tests/auto/tools/qmake/testdata/simple_app/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 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
diff --git a/tests/auto/tools/qmake/testdata/simple_app/test_file.cpp b/tests/auto/tools/qmake/testdata/simple_app/test_file.cpp
index 8b5ab8f0ca..2a582f81fb 100644
--- a/tests/auto/tools/qmake/testdata/simple_app/test_file.cpp
+++ b/tests/auto/tools/qmake/testdata/simple_app/test_file.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 "test_file.h"
diff --git a/tests/auto/tools/qmake/testdata/simple_app/test_file.h b/tests/auto/tools/qmake/testdata/simple_app/test_file.h
index 82cb861345..e9a1ad4e01 100644
--- a/tests/auto/tools/qmake/testdata/simple_app/test_file.h
+++ b/tests/auto/tools/qmake/testdata/simple_app/test_file.h
@@ -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 <qobject.h>
class SomeObject : public QObject
diff --git a/tests/auto/tools/qmake/testdata/simple_dll/simple.cpp b/tests/auto/tools/qmake/testdata/simple_dll/simple.cpp
index e0a4d1cfe9..4fb8aa6553 100644
--- a/tests/auto/tools/qmake/testdata/simple_dll/simple.cpp
+++ b/tests/auto/tools/qmake/testdata/simple_dll/simple.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 "simple.h"
diff --git a/tests/auto/tools/qmake/testdata/simple_dll/simple.h b/tests/auto/tools/qmake/testdata/simple_dll/simple.h
index 632bdcea3f..5c328a239b 100644
--- a/tests/auto/tools/qmake/testdata/simple_dll/simple.h
+++ b/tests/auto/tools/qmake/testdata/simple_dll/simple.h
@@ -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
#ifndef SIMPLE_H
#define SIMPLE_H
diff --git a/tests/auto/tools/qmake/testdata/simple_lib/simple.cpp b/tests/auto/tools/qmake/testdata/simple_lib/simple.cpp
index e0a4d1cfe9..4fb8aa6553 100644
--- a/tests/auto/tools/qmake/testdata/simple_lib/simple.cpp
+++ b/tests/auto/tools/qmake/testdata/simple_lib/simple.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 "simple.h"
diff --git a/tests/auto/tools/qmake/testdata/simple_lib/simple.h b/tests/auto/tools/qmake/testdata/simple_lib/simple.h
index 99a07614ee..11ddec6b5d 100644
--- a/tests/auto/tools/qmake/testdata/simple_lib/simple.h
+++ b/tests/auto/tools/qmake/testdata/simple_lib/simple.h
@@ -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
#ifndef SIMPLE_H
#define SIMPLE_H
diff --git a/tests/auto/tools/qmake/testdata/subdir_via_pro_file_extra_target/simple/main.cpp b/tests/auto/tools/qmake/testdata/subdir_via_pro_file_extra_target/simple/main.cpp
index 9f75c9f4d9..a6381d9792 100644
--- a/tests/auto/tools/qmake/testdata/subdir_via_pro_file_extra_target/simple/main.cpp
+++ b/tests/auto/tools/qmake/testdata/subdir_via_pro_file_extra_target/simple/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 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,char**)
diff --git a/tests/auto/tools/qmake/testdata/subdirs/simple_app/main.cpp b/tests/auto/tools/qmake/testdata/subdirs/simple_app/main.cpp
index e2b6514f9f..29b5e4b059 100644
--- a/tests/auto/tools/qmake/testdata/subdirs/simple_app/main.cpp
+++ b/tests/auto/tools/qmake/testdata/subdirs/simple_app/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 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 <simple.h>
diff --git a/tests/auto/tools/qmake/testdata/subdirs/simple_app/test_file.cpp b/tests/auto/tools/qmake/testdata/subdirs/simple_app/test_file.cpp
index 8b5ab8f0ca..2a582f81fb 100644
--- a/tests/auto/tools/qmake/testdata/subdirs/simple_app/test_file.cpp
+++ b/tests/auto/tools/qmake/testdata/subdirs/simple_app/test_file.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 "test_file.h"
diff --git a/tests/auto/tools/qmake/testdata/subdirs/simple_app/test_file.h b/tests/auto/tools/qmake/testdata/subdirs/simple_app/test_file.h
index 82cb861345..e9a1ad4e01 100644
--- a/tests/auto/tools/qmake/testdata/subdirs/simple_app/test_file.h
+++ b/tests/auto/tools/qmake/testdata/subdirs/simple_app/test_file.h
@@ -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 <qobject.h>
class SomeObject : public QObject
diff --git a/tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple.cpp b/tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple.cpp
index e0a4d1cfe9..4fb8aa6553 100644
--- a/tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple.cpp
+++ b/tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple.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 "simple.h"
diff --git a/tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple.h b/tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple.h
index f1bd405897..04033b6b85 100644
--- a/tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple.h
+++ b/tests/auto/tools/qmake/testdata/subdirs/simple_dll/simple.h
@@ -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
#ifndef SIMPLE_H
#define SIMPLE_H
diff --git a/tests/auto/tools/qmake/tst_qmake.cpp b/tests/auto/tools/qmake/tst_qmake.cpp
index 9ace0e1f3a..a32b4ab228 100644
--- a/tests/auto/tools/qmake/tst_qmake.cpp
+++ b/tests/auto/tools/qmake/tst_qmake.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 <QTest>
@@ -149,7 +124,7 @@ void tst_qmake::initTestCase()
QString testDataPath = QFINDTESTDATA(subProgram);
if (!testDataPath.endsWith(subProgram))
QFAIL("Cannot find test data directory.");
- testDataPath.chop(subProgram.length() - testDataSubDir.length());
+ testDataPath.chop(subProgram.size() - testDataSubDir.size());
QString userWorkDir = qgetenv("TST_QMAKE_BUILD_DIR");
if (userWorkDir.isEmpty()) {
diff --git a/tests/auto/tools/qmakelib/CMakeLists.txt b/tests/auto/tools/qmakelib/CMakeLists.txt
index 55023c0242..4c6a1e2a72 100644
--- a/tests/auto/tools/qmakelib/CMakeLists.txt
+++ b/tests/auto/tools/qmakelib/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qmakelib.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmakelib Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmakelib LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmakelib
SOURCES
../../../../qmake/library/ioutils.cpp
@@ -24,7 +31,7 @@ qt_internal_add_test(tst_qmakelib
QT_USE_QSTRINGBUILDER
INCLUDE_DIRECTORIES
../../../../qmake/library
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
)
@@ -32,6 +39,6 @@ qt_internal_add_test(tst_qmakelib
#####################################################################
qt_internal_extend_target(tst_qmakelib CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
advapi32
)
diff --git a/tests/auto/tools/qmakelib/evaltest.cpp b/tests/auto/tools/qmakelib/evaltest.cpp
index 70aef094b8..d36265eb92 100644
--- a/tests/auto/tools/qmakelib/evaltest.cpp
+++ b/tests/auto/tools/qmakelib/evaltest.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 "tst_qmakelib.h"
@@ -2771,7 +2746,7 @@ static QString formatValue(const ProStringList &vals)
{
QString ret;
- foreach (const ProString &str, vals) {
+ for (const ProString &str : vals) {
ret += QLatin1Char(' ');
ret += QMakeEvaluator::quoteValue(str);
}
@@ -2825,7 +2800,7 @@ static bool compareState(QMakeEvaluator *eval, ProFile *out)
}
ProValueMap::Iterator it;
ProValueMap *vmap = eval->findValues(var, &it);
- if (value.length() == 1 && value.at(0) == "UNDEF") {
+ if (value.size() == 1 && value.at(0) == "UNDEF") {
if (vmap) {
qWarning("Value of %s is incorrect.\n Actual:%s\nExpected: <UNDEFINED>",
qPrintable(var.toQString()),
@@ -2889,9 +2864,9 @@ void tst_qmakelib::proEval()
qWarning("Got unexpected message(s)");
verified = false;
}
- QStringList missingMsgs = handler.expectedMessages();
+ const QStringList missingMsgs = handler.expectedMessages();
if (!missingMsgs.isEmpty()) {
- foreach (const QString &msg, missingMsgs)
+ for (const QString &msg : missingMsgs)
qWarning("Missing message: %s", qPrintable(msg));
verified = false;
}
diff --git a/tests/auto/tools/qmakelib/parsertest.cpp b/tests/auto/tools/qmakelib/parsertest.cpp
index 0f13728b25..a603f04b73 100644
--- a/tests/auto/tools/qmakelib/parsertest.cpp
+++ b/tests/auto/tools/qmakelib/parsertest.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 "tst_qmakelib.h"
@@ -2036,9 +2011,9 @@ void tst_qmakelib::proParser()
qWarning("Got unexpected message(s)");
verified = false;
}
- QStringList missingMsgs = handler.expectedMessages();
+ const QStringList missingMsgs = handler.expectedMessages();
if (!missingMsgs.isEmpty()) {
- foreach (const QString &msg, missingMsgs)
+ for (const QString &msg : missingMsgs)
qWarning("Missing message: %s", qPrintable(msg));
verified = false;
}
diff --git a/tests/auto/tools/qmakelib/tst_qmakelib.cpp b/tests/auto/tools/qmakelib/tst_qmakelib.cpp
index d1830e2c17..2fdec205c2 100644
--- a/tests/auto/tools/qmakelib/tst_qmakelib.cpp
+++ b/tests/auto/tools/qmakelib/tst_qmakelib.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 "tst_qmakelib.h"
diff --git a/tests/auto/tools/qmakelib/tst_qmakelib.h b/tests/auto/tools/qmakelib/tst_qmakelib.h
index 7c82a08cbd..2573dd27f4 100644
--- a/tests/auto/tools/qmakelib/tst_qmakelib.h
+++ b/tests/auto/tools/qmakelib/tst_qmakelib.h
@@ -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 <qmakeevaluator.h>
diff --git a/tests/auto/tools/qt_cmake_create/CMakeLists.txt b/tests/auto/tools/qt_cmake_create/CMakeLists.txt
new file mode 100644
index 0000000000..7d6c49d141
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/CMakeLists.txt
@@ -0,0 +1,20 @@
+# Copyright (C) 2023 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_qt_cmake_create LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+# Collect test data
+file(GLOB_RECURSE test_data_glob
+ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
+ testdata/*)
+list(APPEND test_data ${test_data_glob})
+
+qt_internal_add_test(tst_qt_cmake_create
+ SOURCES
+ tst_qt_cmake_create.cpp
+ TESTDATA ${test_data}
+)
diff --git a/tests/auto/tools/qt_cmake_create/testdata/cpp_project/CMakeLists.txt.expected b/tests/auto/tools/qt_cmake_create/testdata/cpp_project/CMakeLists.txt.expected
new file mode 100644
index 0000000000..7e646b722d
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/cpp_project/CMakeLists.txt.expected
@@ -0,0 +1,14 @@
+cmake_minimum_required(VERSION 3.16)
+project(cpp_project LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core)
+qt_standard_project_setup()
+
+qt_add_executable(cpp_project
+ main.cpp
+)
+
+target_link_libraries(cpp_project
+ PRIVATE
+ Qt::Core
+)
diff --git a/tests/auto/tools/qt_cmake_create/testdata/cpp_project/main.cpp b/tests/auto/tools/qt_cmake_create/testdata/cpp_project/main.cpp
new file mode 100644
index 0000000000..ae659d5ed4
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/cpp_project/main.cpp
@@ -0,0 +1,7 @@
+#include <iostream>
+
+int main(int, char *[])
+{
+ std::cout << "Now I have CMakeLists.txt. Thanks!" << std::endl;
+ return 0;
+}
diff --git a/tests/auto/tools/qt_cmake_create/testdata/proto_project/CMakeLists.txt.expected b/tests/auto/tools/qt_cmake_create/testdata/proto_project/CMakeLists.txt.expected
new file mode 100644
index 0000000000..1b9ae912b2
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/proto_project/CMakeLists.txt.expected
@@ -0,0 +1,17 @@
+cmake_minimum_required(VERSION 3.16)
+project(proto_project LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Protobuf Grpc)
+qt_standard_project_setup()
+
+qt_add_protobuf(proto_project
+ GENERATE_PACKAGE_SUBFOLDERS
+ PROTO_FILES
+ test.proto
+)
+
+target_link_libraries(proto_project
+ PRIVATE
+ Qt::Protobuf
+ Qt::Grpc
+)
diff --git a/tests/auto/tools/qt_cmake_create/testdata/proto_project/test.proto b/tests/auto/tools/qt_cmake_create/testdata/proto_project/test.proto
new file mode 100644
index 0000000000..e03a5c0832
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/proto_project/test.proto
@@ -0,0 +1,5 @@
+syntax = "proto3";
+
+package test;
+message Noop {
+}
diff --git a/tests/auto/tools/qt_cmake_create/testdata/qml_project/CMakeLists.txt.expected b/tests/auto/tools/qt_cmake_create/testdata/qml_project/CMakeLists.txt.expected
new file mode 100644
index 0000000000..1187b0e54a
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/qml_project/CMakeLists.txt.expected
@@ -0,0 +1,27 @@
+cmake_minimum_required(VERSION 3.16)
+project(qml_project LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Gui Qml Quick Core)
+qt_standard_project_setup()
+
+qt_add_executable(qml_project
+ main.cpp
+)
+
+qt_add_qml_module(qml_project
+ URI qml_project
+ OUTPUT_DIRECTORY qml
+ VERSION 1.0
+ RESOURCE_PREFIX /qt/qml
+ QML_FILES
+ TestComponent.qml
+ main.qml
+)
+
+target_link_libraries(qml_project
+ PRIVATE
+ Qt::Gui
+ Qt::Qml
+ Qt::Quick
+ Qt::Core
+)
diff --git a/tests/auto/tools/qt_cmake_create/testdata/qml_project/TestComponent.qml b/tests/auto/tools/qt_cmake_create/testdata/qml_project/TestComponent.qml
new file mode 100644
index 0000000000..f97cbcf115
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/qml_project/TestComponent.qml
@@ -0,0 +1,4 @@
+import QtQuick
+
+Item {
+}
diff --git a/tests/auto/tools/qt_cmake_create/testdata/qml_project/main.cpp b/tests/auto/tools/qt_cmake_create/testdata/qml_project/main.cpp
new file mode 100644
index 0000000000..13c7014d8c
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/qml_project/main.cpp
@@ -0,0 +1,18 @@
+#include <QGuiApplication>
+#include <QQmlApplicationEngine>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QQmlApplicationEngine engine;
+ const QUrl url(QStringLiteral("qrc:/qt/qml/qml_project/main.qml"));
+ QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
+ &app, [url](QObject *obj, const QUrl &objUrl) {
+ if (!obj && url == objUrl)
+ QCoreApplication::exit(-1);
+ }, Qt::QueuedConnection);
+ engine.load(url);
+
+ return app.exec();
+}
diff --git a/tests/auto/tools/qt_cmake_create/testdata/qml_project/main.qml b/tests/auto/tools/qt_cmake_create/testdata/qml_project/main.qml
new file mode 100644
index 0000000000..b42c9e7897
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/qml_project/main.qml
@@ -0,0 +1,16 @@
+import QtQuick
+import QtQuick.Window
+
+Window {
+ width: 640
+ height: 480
+ visible: true
+ title: "Hello World"
+ Text {
+ anchors.centerIn: parent
+ font.pointSize: 16
+ text: "Now I have CMakeLists.txt. Thanks!"
+ }
+ TestComponent {
+ }
+}
diff --git a/tests/auto/tools/qt_cmake_create/testdata/qrc_project/CMakeLists.txt.expected b/tests/auto/tools/qt_cmake_create/testdata/qrc_project/CMakeLists.txt.expected
new file mode 100644
index 0000000000..8a595ac3c2
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/qrc_project/CMakeLists.txt.expected
@@ -0,0 +1,20 @@
+cmake_minimum_required(VERSION 3.16)
+project(qrc_project LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core)
+qt_standard_project_setup()
+
+qt_add_executable(qrc_project
+ main.cpp
+)
+
+qt_add_resources(qrc_project_resources test.qrc)
+target_sources(qrc_project
+ PRIVATE
+ ${qrc_project_resources}
+)
+
+target_link_libraries(qrc_project
+ PRIVATE
+ Qt::Core
+)
diff --git a/tests/auto/tools/qt_cmake_create/testdata/qrc_project/main.cpp b/tests/auto/tools/qt_cmake_create/testdata/qrc_project/main.cpp
new file mode 100644
index 0000000000..cd8ed8f57b
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/qrc_project/main.cpp
@@ -0,0 +1,13 @@
+#include <QFile>
+#include <QDebug>
+
+int main(int, char **)
+{
+ QFile file(":/test.txt");
+ if (!file.open(QFile::ReadOnly))
+ return 1;
+
+ QString data = QString::fromUtf8(file.readAll());
+ qDebug() << data;
+ return 0;
+}
diff --git a/tests/auto/tools/qt_cmake_create/testdata/qrc_project/test.qrc b/tests/auto/tools/qt_cmake_create/testdata/qrc_project/test.qrc
new file mode 100644
index 0000000000..adfe37b52e
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/qrc_project/test.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/">
+ <file>test.txt</file>
+ </qresource>
+</RCC>
diff --git a/tests/auto/tools/qt_cmake_create/testdata/qrc_project/test.txt b/tests/auto/tools/qt_cmake_create/testdata/qrc_project/test.txt
new file mode 100644
index 0000000000..6c5b215ebe
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/qrc_project/test.txt
@@ -0,0 +1 @@
+Now I have CMakeLists.txt. Thanks!
diff --git a/tests/auto/tools/qt_cmake_create/testdata/ui_only_project/widget.ui b/tests/auto/tools/qt_cmake_create/testdata/ui_only_project/widget.ui
new file mode 100644
index 0000000000..d2c4f620b1
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/ui_only_project/widget.ui
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Widget</class>
+ <widget class="QWidget" name="Widget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Widget</string>
+ </property>
+ <widget class="QLabel" name="label">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>6</y>
+ <width>781</width>
+ <height>581</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Now I have CMakeLists.txt. Thanks!</string>
+ </property>
+ </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/auto/tools/qt_cmake_create/testdata/ui_project/CMakeLists.txt.expected b/tests/auto/tools/qt_cmake_create/testdata/ui_project/CMakeLists.txt.expected
new file mode 100644
index 0000000000..6252b71389
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/ui_project/CMakeLists.txt.expected
@@ -0,0 +1,23 @@
+cmake_minimum_required(VERSION 3.16)
+project(ui_project LANGUAGES CXX)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+qt_standard_project_setup()
+
+qt_add_executable(ui_project
+ main.cpp
+ widget.cpp
+ widget.h
+)
+
+target_sources(ui_project
+ PRIVATE
+ widget.ui
+)
+
+target_link_libraries(ui_project
+ PRIVATE
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
diff --git a/tests/auto/tools/qt_cmake_create/testdata/ui_project/main.cpp b/tests/auto/tools/qt_cmake_create/testdata/ui_project/main.cpp
new file mode 100644
index 0000000000..b0a4ec2647
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/ui_project/main.cpp
@@ -0,0 +1,11 @@
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ Widget w;
+ w.show();
+ return a.exec();
+}
diff --git a/tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.cpp b/tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.cpp
new file mode 100644
index 0000000000..815d5f8c4b
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.cpp
@@ -0,0 +1,15 @@
+#include "widget.h"
+#include "ui_widget.h"
+
+Widget::Widget(QWidget *parent)
+ : QWidget(parent)
+ , ui(new Ui::Widget)
+{
+ ui->setupUi(this);
+}
+
+Widget::~Widget()
+{
+ delete ui;
+}
+
diff --git a/tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.h b/tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.h
new file mode 100644
index 0000000000..1fe2322b13
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.h
@@ -0,0 +1,21 @@
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+namespace Ui { class Widget; }
+QT_END_NAMESPACE
+
+class Widget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ Widget(QWidget *parent = nullptr);
+ ~Widget();
+
+private:
+ Ui::Widget *ui;
+};
+#endif // WIDGET_H
diff --git a/tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.ui b/tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.ui
new file mode 100644
index 0000000000..d2c4f620b1
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/testdata/ui_project/widget.ui
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Widget</class>
+ <widget class="QWidget" name="Widget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Widget</string>
+ </property>
+ <widget class="QLabel" name="label">
+ <property name="geometry">
+ <rect>
+ <x>10</x>
+ <y>6</y>
+ <width>781</width>
+ <height>581</height>
+ </rect>
+ </property>
+ <property name="text">
+ <string>Now I have CMakeLists.txt. Thanks!</string>
+ </property>
+ </widget>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/auto/tools/qt_cmake_create/tst_qt_cmake_create.cpp b/tests/auto/tools/qt_cmake_create/tst_qt_cmake_create.cpp
new file mode 100644
index 0000000000..6bbc58ef32
--- /dev/null
+++ b/tests/auto/tools/qt_cmake_create/tst_qt_cmake_create.cpp
@@ -0,0 +1,157 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QtTest>
+
+#include <QLibraryInfo>
+#include <QLatin1StringView>
+#include <QDir>
+#include <QFileInfo>
+#include <QProcess>
+#include <QCryptographicHash>
+
+#include <array>
+
+using namespace Qt::Literals::StringLiterals;
+
+class tst_qt_cmake_create : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_qt_cmake_create();
+
+private slots:
+ void init();
+ void initTestCase();
+ void generatingCMakeLists_data();
+ void generatingCMakeLists();
+
+private:
+ QString m_testWorkDir;
+ QString m_shell;
+ QString m_cmd;
+};
+
+tst_qt_cmake_create::tst_qt_cmake_create() : m_testWorkDir(qApp->applicationDirPath()) { }
+
+void tst_qt_cmake_create::initTestCase()
+{
+ QString binpath = QLibraryInfo::path(QLibraryInfo::BinariesPath);
+#ifdef Q_OS_WINDOWS
+ m_shell = QString("cmd.exe");
+ m_cmd = QString("%1/qt-cmake-create.bat").arg(binpath);
+#else
+ m_shell = QString("/bin/sh");
+ m_cmd = QString("%1/qt-cmake-create").arg(binpath);
+ QVERIFY(QFile::exists(m_shell));
+#endif
+
+ QVERIFY(QFile::exists(m_cmd));
+}
+
+void tst_qt_cmake_create::init()
+{
+ QFETCH(QString, projectDirPath);
+ QDir workDir(m_testWorkDir);
+ QString fullProjectPath = m_testWorkDir + '/' + projectDirPath;
+ if (workDir.exists(fullProjectPath)) {
+ QDir projectDir(projectDirPath);
+ projectDir.removeRecursively();
+ }
+ workDir.mkdir(projectDirPath);
+ auto testDataPath = QFINDTESTDATA("testdata"_L1 + '/' + projectDirPath);
+ QVERIFY(QFile::exists(testDataPath));
+
+ for (const auto &fileInfo : QDir(testDataPath).entryInfoList(QDir::Files)) {
+ QVERIFY(QFile::copy(fileInfo.absoluteFilePath(),
+ fullProjectPath + '/' + fileInfo.fileName()));
+ }
+}
+
+void tst_qt_cmake_create::generatingCMakeLists_data()
+{
+ QTest::addColumn<QString>("projectDirPath");
+ QTest::addColumn<bool>("expectPass");
+ QTest::addColumn<QString>("workDir");
+
+ const std::array<QLatin1StringView, 5> expectPass = {
+ "cpp"_L1, "proto"_L1, "qml"_L1, "qrc"_L1, "ui"_L1,
+ };
+
+ const std::array<QString, 5> workDirs = {
+ m_testWorkDir, ""_L1, m_testWorkDir, ""_L1, m_testWorkDir,
+ };
+
+ static_assert(expectPass.size() == workDirs.size());
+
+ const QLatin1StringView expectFail[] = {
+ "ui_only"_L1,
+ };
+
+ for (size_t i = 0; i < expectPass.size(); ++i) {
+ const auto type = expectPass.at(i);
+ QTest::addRow("tst_qt_cmake_create_%s", type.data())
+ << QString("%1_project").arg(type) << true << workDirs.at(i);
+ }
+
+ for (const auto type : expectFail) {
+ QTest::addRow("tst_qt_cmake_create_%s", type.data())
+ << QString("%1_project").arg(type) << false << QString();
+ }
+}
+
+void tst_qt_cmake_create::generatingCMakeLists()
+{
+ QFETCH(QString, projectDirPath);
+ QFETCH(bool, expectPass);
+ QFETCH(QString, workDir);
+
+ QString fullProjectPath = m_testWorkDir + '/' + projectDirPath;
+ QProcess command;
+ QStringList arguments = {
+#ifdef Q_OS_WINDOWS
+ "/C"_L1,
+#endif
+ m_cmd
+ };
+
+ QString workingDirectory = fullProjectPath;
+ if (!workDir.isEmpty()) {
+ workingDirectory = workDir;
+ arguments.append(fullProjectPath);
+ }
+ command.setProgram(m_shell);
+ command.setArguments(arguments);
+ command.setWorkingDirectory(workingDirectory);
+
+ command.start();
+ QVERIFY(command.waitForFinished());
+ QCOMPARE(command.exitCode() == 0, expectPass);
+
+ QFile actualFile = QFile(fullProjectPath + '/' + "CMakeLists.txt"_L1);
+
+ // Skip the rest if we expect that qt-cmake-create should exit with error
+ if (!expectPass) {
+ QVERIFY(!actualFile.exists());
+ return;
+ }
+
+ QFile expectedFile = QFile(fullProjectPath + '/' + "CMakeLists.txt.expected"_L1);
+ QVERIFY(actualFile.open(QFile::ReadOnly));
+ QVERIFY(expectedFile.open(QFile::ReadOnly));
+
+ auto actualData = actualFile.readAll();
+ actualData.replace(QByteArrayView("\r\n"), QByteArrayView("\n"));
+ auto expectedData = expectedFile.readAll();
+ expectedData.replace(QByteArrayView("\r\n"), QByteArrayView("\n"));
+
+ static auto hash = [](const QByteArray &data) {
+ return QCryptographicHash::hash(data, QCryptographicHash::Sha1).toHex();
+ };
+ QCOMPARE_EQ(hash(actualData), hash(expectedData));
+}
+
+QTEST_MAIN(tst_qt_cmake_create)
+#include "tst_qt_cmake_create.moc"
diff --git a/tests/auto/tools/rcc/BLACKLIST b/tests/auto/tools/rcc/BLACKLIST
deleted file mode 100644
index 367fc3b94c..0000000000
--- a/tests/auto/tools/rcc/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-# QTBUG-85364
-b2qt cmake
diff --git a/tests/auto/tools/rcc/CMakeLists.txt b/tests/auto/tools/rcc/CMakeLists.txt
index abcf3a1f60..96863c49bd 100644
--- a/tests/auto/tools/rcc/CMakeLists.txt
+++ b/tests/auto/tools/rcc/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from rcc.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_rcc Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_rcc LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_rcc
SOURCES
tst_rcc.cpp
@@ -63,3 +70,8 @@ qt_internal_add_resource(tst_rcc "size-1"
FILES
${size-1_resource_files}
)
+
+# Add dependencies that are implicitly used inside the test
+add_dependencies(tst_rcc
+ Qt::rcc
+)
diff --git a/tests/auto/tools/rcc/data/images/images.expected b/tests/auto/tools/rcc/data/images/images.expected
index 3ff8c82cfc..b30c6ce623 100644
--- a/tests/auto/tools/rcc/data/images/images.expected
+++ b/tests/auto/tools/rcc/data/images/images.expected
@@ -6,6 +6,11 @@ IGNORE:** Created by: The Resource Compiler for Qt version 6.3.0
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
+#ifdef _MSC_VER
+// disable informational message "function ... selected for automatic inline expansion"
+#pragma warning (disable: 4711)
+#endif
+
static const unsigned char qt_resource_data[] = {
IGNORE: // D:/projects/qt/dev/src/qtbase/tests/auto/tools/rcc/data/images/images/square.png
0x0,0x0,0x0,0x5e,
@@ -110,7 +115,9 @@ TIMESTAMP:images/subdir/triangle.png
# define QT_RCC_MANGLE_NAMESPACE(name) name
#endif
-#ifdef QT_NAMESPACE
+#if defined(QT_INLINE_NAMESPACE)
+inline namespace QT_NAMESPACE {
+#elif defined(QT_NAMESPACE)
namespace QT_NAMESPACE {
#endif
@@ -139,9 +146,18 @@ int QT_RCC_MANGLE_NAMESPACE(qCleanupResources)()
return 1;
}
+#ifdef __clang__
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+#endif
+
namespace {
struct initializer {
initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources)(); }
~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources)(); }
} dummy;
}
+
+#ifdef __clang__
+# pragma clang diagnostic pop
+#endif
diff --git a/tests/auto/tools/rcc/data/images/images.expected32 b/tests/auto/tools/rcc/data/images/images.expected32
index c9e2e0852f..7e98fdd4fc 100644
--- a/tests/auto/tools/rcc/data/images/images.expected32
+++ b/tests/auto/tools/rcc/data/images/images.expected32
@@ -6,6 +6,11 @@ IGNORE:** Created by: The Resource Compiler for Qt version 6.3.0
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
+#ifdef _MSC_VER
+// disable informational message "function ... selected for automatic inline expansion"
+#pragma warning (disable: 4711)
+#endif
+
static const unsigned char qt_resource_data[] = {
IGNORE: // D:/projects/qt/dev/src/qtbase/tests/auto/tools/rcc/data/images/images/square.png
0x0,0x0,0x0,0x5e,
@@ -110,7 +115,9 @@ TIMESTAMP:images/subdir/triangle.png
# define QT_RCC_MANGLE_NAMESPACE(name) name
#endif
-#ifdef QT_NAMESPACE
+#if defined(QT_INLINE_NAMESPACE)
+inline namespace QT_NAMESPACE {
+#elif defined(QT_NAMESPACE)
namespace QT_NAMESPACE {
#endif
diff --git a/tests/auto/tools/rcc/data/sizes/size-0.expected b/tests/auto/tools/rcc/data/sizes/size-0.expected
index 2f70a607ab..79defe7868 100644
--- a/tests/auto/tools/rcc/data/sizes/size-0.expected
+++ b/tests/auto/tools/rcc/data/sizes/size-0.expected
@@ -6,6 +6,11 @@ IGNORE: ** Created by: The Resource Compiler for Qt version 5.11.2
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
+#ifdef _MSC_VER
+// disable informational message "function ... selected for automatic inline expansion"
+#pragma warning (disable: 4711)
+#endif
+
static const unsigned char qt_resource_data[] = {
IGNORE: // /data/dev/qt-5/qtbase/tests/auto/tools/rcc/data/sizes/data/data-0.txt
0x0,0x0,0x0,0x0,
@@ -52,7 +57,9 @@ TIMESTAMP:data/data-0.txt
# define QT_RCC_MANGLE_NAMESPACE(name) name
#endif
-#ifdef QT_NAMESPACE
+#if defined(QT_INLINE_NAMESPACE)
+inline namespace QT_NAMESPACE {
+#elif defined(QT_NAMESPACE)
namespace QT_NAMESPACE {
#endif
@@ -81,9 +88,18 @@ int QT_RCC_MANGLE_NAMESPACE(qCleanupResources)()
return 1;
}
+#ifdef __clang__
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+#endif
+
namespace {
struct initializer {
initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources)(); }
~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources)(); }
} dummy;
}
+
+#ifdef __clang__
+# pragma clang diagnostic pop
+#endif
diff --git a/tests/auto/tools/rcc/data/sizes/size-1.expected b/tests/auto/tools/rcc/data/sizes/size-1.expected
index d1717a9255..925de99c32 100644
--- a/tests/auto/tools/rcc/data/sizes/size-1.expected
+++ b/tests/auto/tools/rcc/data/sizes/size-1.expected
@@ -6,6 +6,11 @@ IGNORE:** Created by: The Resource Compiler for Qt version 5.11.2
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
+#ifdef _MSC_VER
+// disable informational message "function ... selected for automatic inline expansion"
+#pragma warning (disable: 4711)
+#endif
+
static const unsigned char qt_resource_data[] = {
IGNORE: // /data/dev/qt-5/qtbase/tests/auto/tools/rcc/data/sizes/data/data-1.txt
0x0,0x0,0x0,0x1,
@@ -53,7 +58,9 @@ TIMESTAMP:data/data-1.txt
# define QT_RCC_MANGLE_NAMESPACE(name) name
#endif
-#ifdef QT_NAMESPACE
+#if defined(QT_INLINE_NAMESPACE)
+inline namespace QT_NAMESPACE {
+#elif defined(QT_NAMESPACE)
namespace QT_NAMESPACE {
#endif
@@ -82,9 +89,18 @@ int QT_RCC_MANGLE_NAMESPACE(qCleanupResources)()
return 1;
}
+#ifdef __clang__
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+#endif
+
namespace {
struct initializer {
initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources)(); }
~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources)(); }
} dummy;
}
+
+#ifdef __clang__
+# pragma clang diagnostic pop
+#endif
diff --git a/tests/auto/tools/rcc/data/sizes/size-2-0-35-1.expected b/tests/auto/tools/rcc/data/sizes/size-2-0-35-1.expected
index 5e1b1348e3..d858e15dba 100644
--- a/tests/auto/tools/rcc/data/sizes/size-2-0-35-1.expected
+++ b/tests/auto/tools/rcc/data/sizes/size-2-0-35-1.expected
@@ -1,11 +1,16 @@
/****************************************************************************
** Resource object code
**
-** Created by: The Resource Compiler for Qt version 6.3.0
+IGNORE:** Created by: The Resource Compiler for Qt version 6.3.0
**
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
+#ifdef _MSC_VER
+// disable informational message "function ... selected for automatic inline expansion"
+#pragma warning (disable: 4711)
+#endif
+
static const unsigned char qt_resource_data[] = {
IGNORE: // D:/projects/qt/dev/src/qtbase/tests/auto/tools/rcc/data/sizes/data/data-2.txt
0x0,0x0,0x0,0x2,
@@ -90,7 +95,9 @@ TIMESTAMP:data/data-1.txt
# define QT_RCC_MANGLE_NAMESPACE(name) name
#endif
-#ifdef QT_NAMESPACE
+#if defined(QT_INLINE_NAMESPACE)
+inline namespace QT_NAMESPACE {
+#elif defined(QT_NAMESPACE)
namespace QT_NAMESPACE {
#endif
@@ -119,9 +126,18 @@ int QT_RCC_MANGLE_NAMESPACE(qCleanupResources)()
return 1;
}
+#ifdef __clang__
+# pragma clang diagnostic push
+# pragma clang diagnostic ignored "-Wexit-time-destructors"
+#endif
+
namespace {
struct initializer {
initializer() { QT_RCC_MANGLE_NAMESPACE(qInitResources)(); }
~initializer() { QT_RCC_MANGLE_NAMESPACE(qCleanupResources)(); }
} dummy;
}
+
+#ifdef __clang__
+# pragma clang diagnostic pop
+#endif
diff --git a/tests/auto/tools/rcc/data/sizes/size-2-0-35-1.expected32 b/tests/auto/tools/rcc/data/sizes/size-2-0-35-1.expected32
index aea21ecc09..a67e0ffc6e 100644
--- a/tests/auto/tools/rcc/data/sizes/size-2-0-35-1.expected32
+++ b/tests/auto/tools/rcc/data/sizes/size-2-0-35-1.expected32
@@ -6,6 +6,11 @@ IGNORE:** Created by: The Resource Compiler for Qt version 6.3.0
** WARNING! All changes made in this file will be lost!
*****************************************************************************/
+#ifdef _MSC_VER
+// disable informational message "function ... selected for automatic inline expansion"
+#pragma warning (disable: 4711)
+#endif
+
static const unsigned char qt_resource_data[] = {
IGNORE: // D:/projects/qt/dev/src/qtbase/tests/auto/tools/rcc/data/sizes/data/data-1.txt
0x0,0x0,0x0,0x1,
@@ -90,7 +95,9 @@ TIMESTAMP:data/data-1.txt
# define QT_RCC_MANGLE_NAMESPACE(name) name
#endif
-#ifdef QT_NAMESPACE
+#if defined(QT_INLINE_NAMESPACE)
+inline namespace QT_NAMESPACE {
+#elif defined(QT_NAMESPACE)
namespace QT_NAMESPACE {
#endif
diff --git a/tests/auto/tools/rcc/tst_rcc.cpp b/tests/auto/tools/rcc/tst_rcc.cpp
index 9f4960fc7c..88a6e17e2f 100644
--- a/tests/auto/tools/rcc/tst_rcc.cpp
+++ b/tests/auto/tools/rcc/tst_rcc.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Giuseppe D'Angelo <dangelog@gmail.com>
-** 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) 2012 Giuseppe D'Angelo <dangelog@gmail.com>
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QLibraryInfo>
@@ -139,7 +114,7 @@ static QString doCompare(const QStringList &actual, const QStringList &expected,
ba.append("File " + fi.absoluteFilePath().toUtf8() + " does not exist!");
break;
}
- const quint64 timeStamp = quint64(fi.lastModified().toMSecsSinceEpoch());
+ const quint64 timeStamp = quint64(fi.lastModified(QTimeZone::UTC).toMSecsSinceEpoch());
expectedLine.clear();
for (int shift = 56; shift >= 0; shift -= 8) {
expectedLine.append(QLatin1String("0x"));
@@ -236,8 +211,8 @@ static QStringMap readExpectedFiles(const QString &fileName)
{
QStringMap expectedFiles;
- QStringList lines = readLinesFromFile(fileName, Qt::SkipEmptyParts);
- foreach (const QString &line, lines) {
+ const QStringList lines = readLinesFromFile(fileName, Qt::SkipEmptyParts);
+ for (const QString &line : lines) {
QString resourceFileName = line.section(QLatin1Char(' '), 0, 0, QString::SectionSkipEmpty);
QString actualFileName = line.section(QLatin1Char(' '), 1, 1, QString::SectionSkipEmpty);
expectedFiles[resourceFileName] = actualFileName;
@@ -301,8 +276,8 @@ void tst_rcc::binary_data()
QString localeFileName = absoluteBaseName + QLatin1String(".locale");
QFile localeFile(localeFileName);
if (localeFile.exists()) {
- QStringList locales = readLinesFromFile(localeFileName, Qt::SkipEmptyParts);
- foreach (const QString &locale, locales) {
+ const QStringList locales = readLinesFromFile(localeFileName, Qt::SkipEmptyParts);
+ for (const QString &locale : locales) {
QString expectedFileName = QString::fromLatin1("%1.%2.%3").arg(absoluteBaseName, locale, QLatin1String("expected"));
QStringMap expectedFiles = readExpectedFiles(expectedFileName);
QTest::newRow(qPrintable(qrcFileInfo.baseName() + QLatin1Char('_') + locale)) << rccFileName
@@ -498,7 +473,7 @@ void tst_rcc::cleanupTestCase()
QFileInfoList entries = dataDir.entryInfoList(QStringList() << QLatin1String("*.rcc"));
QDir dataDepDir(m_dataPath + QLatin1String("/depfile"));
entries += dataDepDir.entryInfoList({QLatin1String("*.d"), QLatin1String("*.qrc.cpp")});
- foreach (const QFileInfo &entry, entries)
+ for (const QFileInfo &entry : std::as_const(entries))
QFile::remove(entry.absoluteFilePath());
}
diff --git a/tests/auto/tools/uic/CMakeLists.txt b/tests/auto/tools/uic/CMakeLists.txt
index 03af78a9c2..2a1d4b5164 100644
--- a/tests/auto/tools/uic/CMakeLists.txt
+++ b/tests/auto/tools/uic/CMakeLists.txt
@@ -1,10 +1,22 @@
-# Generated from uic.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_uic Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_uic LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_uic
SOURCES
tst_uic.cpp
)
+
+# Add dependencies that are implicitly used inside the test
+add_dependencies(tst_uic
+ Qt::uic
+)
diff --git a/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Bottom.ui.h b/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Bottom.ui.h
index 0b1e349a23..acf202fe8a 100644
--- a/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Bottom.ui.h
+++ b/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Bottom.ui.h
@@ -25,10 +25,10 @@ public:
void setupUi(QDialog *Dialog)
{
if (Dialog->objectName().isEmpty())
- Dialog->setObjectName(QString::fromUtf8("Dialog"));
+ Dialog->setObjectName("Dialog");
Dialog->resize(400, 300);
buttonBox = new QDialogButtonBox(Dialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setGeometry(QRect(30, 240, 341, 32));
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Right.ui.h b/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Right.ui.h
index ead6f3c533..d8dc7ffd70 100644
--- a/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Right.ui.h
+++ b/tests/auto/tools/uic/baseline/Dialog_with_Buttons_Right.ui.h
@@ -25,10 +25,10 @@ public:
void setupUi(QDialog *Dialog)
{
if (Dialog->objectName().isEmpty())
- Dialog->setObjectName(QString::fromUtf8("Dialog"));
+ Dialog->setObjectName("Dialog");
Dialog->resize(400, 300);
buttonBox = new QDialogButtonBox(Dialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setGeometry(QRect(290, 20, 81, 241));
buttonBox->setOrientation(Qt::Vertical);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/Dialog_without_Buttons.ui.h b/tests/auto/tools/uic/baseline/Dialog_without_Buttons.ui.h
index 43b1ef14d3..747b0fd280 100644
--- a/tests/auto/tools/uic/baseline/Dialog_without_Buttons.ui.h
+++ b/tests/auto/tools/uic/baseline/Dialog_without_Buttons.ui.h
@@ -22,7 +22,7 @@ public:
void setupUi(QDialog *Dialog)
{
if (Dialog->objectName().isEmpty())
- Dialog->setObjectName(QString::fromUtf8("Dialog"));
+ Dialog->setObjectName("Dialog");
Dialog->resize(400, 300);
retranslateUi(Dialog);
diff --git a/tests/auto/tools/uic/baseline/Main_Window.ui.h b/tests/auto/tools/uic/baseline/Main_Window.ui.h
index b0559befea..1bc02fb97d 100644
--- a/tests/auto/tools/uic/baseline/Main_Window.ui.h
+++ b/tests/auto/tools/uic/baseline/Main_Window.ui.h
@@ -28,16 +28,16 @@ public:
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
- MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
+ MainWindow->setObjectName("MainWindow");
MainWindow->resize(800, 600);
menubar = new QMenuBar(MainWindow);
- menubar->setObjectName(QString::fromUtf8("menubar"));
+ menubar->setObjectName("menubar");
MainWindow->setMenuBar(menubar);
centralwidget = new QWidget(MainWindow);
- centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
+ centralwidget->setObjectName("centralwidget");
MainWindow->setCentralWidget(centralwidget);
statusbar = new QStatusBar(MainWindow);
- statusbar->setObjectName(QString::fromUtf8("statusbar"));
+ statusbar->setObjectName("statusbar");
MainWindow->setStatusBar(statusbar);
retranslateUi(MainWindow);
diff --git a/tests/auto/tools/uic/baseline/Widget.ui.h b/tests/auto/tools/uic/baseline/Widget.ui.h
index b4ba4d17ab..4d4846e6c5 100644
--- a/tests/auto/tools/uic/baseline/Widget.ui.h
+++ b/tests/auto/tools/uic/baseline/Widget.ui.h
@@ -30,22 +30,22 @@ public:
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
- Form->setObjectName(QString::fromUtf8("Form"));
+ Form->setObjectName("Form");
Form->resize(400, 300);
vboxLayout = new QVBoxLayout(Form);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
Alabel = new QLabel(Form);
- Alabel->setObjectName(QString::fromUtf8("Alabel"));
+ Alabel->setObjectName("Alabel");
vboxLayout->addWidget(Alabel);
groupBox = new QGroupBox(Form);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
vboxLayout->addWidget(groupBox);
pushButton = new QPushButton(Form);
- pushButton->setObjectName(QString::fromUtf8("pushButton"));
+ pushButton->setObjectName("pushButton");
vboxLayout->addWidget(pushButton);
diff --git a/tests/auto/tools/uic/baseline/addlinkdialog.ui.h b/tests/auto/tools/uic/baseline/addlinkdialog.ui.h
index 290a021cda..70c1fc36b7 100644
--- a/tests/auto/tools/uic/baseline/addlinkdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/addlinkdialog.ui.h
@@ -39,50 +39,50 @@ public:
void setupUi(QDialog *AddLinkDialog)
{
if (AddLinkDialog->objectName().isEmpty())
- AddLinkDialog->setObjectName(QString::fromUtf8("AddLinkDialog"));
+ AddLinkDialog->setObjectName("AddLinkDialog");
AddLinkDialog->setSizeGripEnabled(false);
AddLinkDialog->setModal(true);
verticalLayout = new QVBoxLayout(AddLinkDialog);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
formLayout = new QFormLayout();
- formLayout->setObjectName(QString::fromUtf8("formLayout"));
+ formLayout->setObjectName("formLayout");
label = new QLabel(AddLinkDialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
formLayout->setWidget(0, QFormLayout::LabelRole, label);
titleInput = new QLineEdit(AddLinkDialog);
- titleInput->setObjectName(QString::fromUtf8("titleInput"));
+ titleInput->setObjectName("titleInput");
titleInput->setMinimumSize(QSize(337, 0));
formLayout->setWidget(0, QFormLayout::FieldRole, titleInput);
label_2 = new QLabel(AddLinkDialog);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
formLayout->setWidget(1, QFormLayout::LabelRole, label_2);
urlInput = new QLineEdit(AddLinkDialog);
- urlInput->setObjectName(QString::fromUtf8("urlInput"));
+ urlInput->setObjectName("urlInput");
formLayout->setWidget(1, QFormLayout::FieldRole, urlInput);
verticalLayout->addLayout(formLayout);
- verticalSpacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ verticalSpacer = new QSpacerItem(0, 0, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
verticalLayout->addItem(verticalSpacer);
line = new QFrame(AddLinkDialog);
- line->setObjectName(QString::fromUtf8("line"));
- line->setFrameShape(QFrame::HLine);
- line->setFrameShadow(QFrame::Sunken);
+ line->setObjectName("line");
+ line->setFrameShape(QFrame::Shape::HLine);
+ line->setFrameShadow(QFrame::Shadow::Sunken);
verticalLayout->addWidget(line);
buttonBox = new QDialogButtonBox(AddLinkDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/addtorrentform.ui.h b/tests/auto/tools/uic/baseline/addtorrentform.ui.h
index 13ed4b8e62..93b1272633 100644
--- a/tests/auto/tools/uic/baseline/addtorrentform.ui.h
+++ b/tests/auto/tools/uic/baseline/addtorrentform.ui.h
@@ -56,7 +56,7 @@ public:
void setupUi(QDialog *AddTorrentFile)
{
if (AddTorrentFile->objectName().isEmpty())
- AddTorrentFile->setObjectName(QString::fromUtf8("AddTorrentFile"));
+ AddTorrentFile->setObjectName("AddTorrentFile");
AddTorrentFile->resize(464, 385);
AddTorrentFile->setSizeGripEnabled(false);
AddTorrentFile->setModal(true);
@@ -65,56 +65,56 @@ public:
vboxLayout->setSpacing(6);
#endif
vboxLayout->setContentsMargins(8, 8, 8, 8);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
groupBox = new QGroupBox(AddTorrentFile);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
widget = new QWidget(groupBox);
- widget->setObjectName(QString::fromUtf8("widget"));
+ widget->setObjectName("widget");
widget->setGeometry(QRect(10, 40, 364, 33));
gridLayout = new QGridLayout(groupBox);
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
#endif
gridLayout->setContentsMargins(8, 8, 8, 8);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label_4 = new QLabel(groupBox);
- label_4->setObjectName(QString::fromUtf8("label_4"));
+ label_4->setObjectName("label_4");
gridLayout->addWidget(label_4, 6, 0, 1, 1);
torrentFile = new QLineEdit(groupBox);
- torrentFile->setObjectName(QString::fromUtf8("torrentFile"));
+ torrentFile->setObjectName("torrentFile");
gridLayout->addWidget(torrentFile, 0, 1, 1, 2);
label_2 = new QLabel(groupBox);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout->addWidget(label_2, 1, 0, 1, 1);
browseTorrents = new QPushButton(groupBox);
- browseTorrents->setObjectName(QString::fromUtf8("browseTorrents"));
+ browseTorrents->setObjectName("browseTorrents");
gridLayout->addWidget(browseTorrents, 0, 3, 1, 1);
label_5 = new QLabel(groupBox);
- label_5->setObjectName(QString::fromUtf8("label_5"));
+ label_5->setObjectName("label_5");
label_5->setAlignment(Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop);
gridLayout->addWidget(label_5, 5, 0, 1, 1);
label_3 = new QLabel(groupBox);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
gridLayout->addWidget(label_3, 4, 0, 1, 1);
label_6 = new QLabel(groupBox);
- label_6->setObjectName(QString::fromUtf8("label_6"));
+ label_6->setObjectName("label_6");
gridLayout->addWidget(label_6, 2, 0, 1, 1);
torrentContents = new QTextEdit(groupBox);
- torrentContents->setObjectName(QString::fromUtf8("torrentContents"));
+ torrentContents->setObjectName("torrentContents");
torrentContents->setFocusPolicy(Qt::NoFocus);
torrentContents->setTabChangesFocus(true);
torrentContents->setLineWrapMode(QTextEdit::NoWrap);
@@ -123,43 +123,43 @@ public:
gridLayout->addWidget(torrentContents, 5, 1, 1, 3);
destinationFolder = new QLineEdit(groupBox);
- destinationFolder->setObjectName(QString::fromUtf8("destinationFolder"));
+ destinationFolder->setObjectName("destinationFolder");
destinationFolder->setFocusPolicy(Qt::StrongFocus);
gridLayout->addWidget(destinationFolder, 6, 1, 1, 2);
announceUrl = new QLabel(groupBox);
- announceUrl->setObjectName(QString::fromUtf8("announceUrl"));
+ announceUrl->setObjectName("announceUrl");
gridLayout->addWidget(announceUrl, 1, 1, 1, 3);
label = new QLabel(groupBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 1);
browseDestination = new QPushButton(groupBox);
- browseDestination->setObjectName(QString::fromUtf8("browseDestination"));
+ browseDestination->setObjectName("browseDestination");
gridLayout->addWidget(browseDestination, 6, 3, 1, 1);
label_7 = new QLabel(groupBox);
- label_7->setObjectName(QString::fromUtf8("label_7"));
+ label_7->setObjectName("label_7");
gridLayout->addWidget(label_7, 3, 0, 1, 1);
commentLabel = new QLabel(groupBox);
- commentLabel->setObjectName(QString::fromUtf8("commentLabel"));
+ commentLabel->setObjectName("commentLabel");
gridLayout->addWidget(commentLabel, 3, 1, 1, 3);
creatorLabel = new QLabel(groupBox);
- creatorLabel->setObjectName(QString::fromUtf8("creatorLabel"));
+ creatorLabel->setObjectName("creatorLabel");
gridLayout->addWidget(creatorLabel, 2, 1, 1, 3);
sizeLabel = new QLabel(groupBox);
- sizeLabel->setObjectName(QString::fromUtf8("sizeLabel"));
+ sizeLabel->setObjectName("sizeLabel");
gridLayout->addWidget(sizeLabel, 4, 1, 1, 3);
@@ -171,19 +171,19 @@ public:
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(0, 0, 0, 0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
- spacerItem = new QSpacerItem(131, 31, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ hboxLayout->setObjectName("hboxLayout");
+ spacerItem = new QSpacerItem(131, 31, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
okButton = new QPushButton(AddTorrentFile);
- okButton->setObjectName(QString::fromUtf8("okButton"));
+ okButton->setObjectName("okButton");
okButton->setEnabled(false);
hboxLayout->addWidget(okButton);
cancelButton = new QPushButton(AddTorrentFile);
- cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
+ cancelButton->setObjectName("cancelButton");
hboxLayout->addWidget(cancelButton);
diff --git a/tests/auto/tools/uic/baseline/authenticationdialog.ui.h b/tests/auto/tools/uic/baseline/authenticationdialog.ui.h
index 13cdbce063..a3e75b7a50 100644
--- a/tests/auto/tools/uic/baseline/authenticationdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/authenticationdialog.ui.h
@@ -38,50 +38,50 @@ public:
void setupUi(QDialog *Dialog)
{
if (Dialog->objectName().isEmpty())
- Dialog->setObjectName(QString::fromUtf8("Dialog"));
+ Dialog->setObjectName("Dialog");
Dialog->resize(389, 243);
gridLayout = new QGridLayout(Dialog);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(Dialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
label->setWordWrap(false);
gridLayout->addWidget(label, 0, 0, 1, 2);
label_2 = new QLabel(Dialog);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout->addWidget(label_2, 2, 0, 1, 1);
userEdit = new QLineEdit(Dialog);
- userEdit->setObjectName(QString::fromUtf8("userEdit"));
+ userEdit->setObjectName("userEdit");
gridLayout->addWidget(userEdit, 2, 1, 1, 1);
label_3 = new QLabel(Dialog);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
gridLayout->addWidget(label_3, 3, 0, 1, 1);
passwordEdit = new QLineEdit(Dialog);
- passwordEdit->setObjectName(QString::fromUtf8("passwordEdit"));
+ passwordEdit->setObjectName("passwordEdit");
gridLayout->addWidget(passwordEdit, 3, 1, 1, 1);
buttonBox = new QDialogButtonBox(Dialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
gridLayout->addWidget(buttonBox, 5, 0, 1, 2);
label_4 = new QLabel(Dialog);
- label_4->setObjectName(QString::fromUtf8("label_4"));
+ label_4->setObjectName("label_4");
gridLayout->addWidget(label_4, 1, 0, 1, 1);
siteDescription = new QLabel(Dialog);
- siteDescription->setObjectName(QString::fromUtf8("siteDescription"));
+ siteDescription->setObjectName("siteDescription");
QFont font;
font.setBold(true);
siteDescription->setFont(font);
@@ -89,7 +89,7 @@ public:
gridLayout->addWidget(siteDescription, 1, 1, 1, 1);
- spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem, 4, 0, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/backside.ui.h b/tests/auto/tools/uic/baseline/backside.ui.h
index 1e21e21fe9..f4e29dad98 100644
--- a/tests/auto/tools/uic/baseline/backside.ui.h
+++ b/tests/auto/tools/uic/baseline/backside.ui.h
@@ -47,47 +47,47 @@ public:
void setupUi(QWidget *BackSide)
{
if (BackSide->objectName().isEmpty())
- BackSide->setObjectName(QString::fromUtf8("BackSide"));
+ BackSide->setObjectName("BackSide");
BackSide->resize(378, 385);
verticalLayout_2 = new QVBoxLayout(BackSide);
- verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
+ verticalLayout_2->setObjectName("verticalLayout_2");
groupBox = new QGroupBox(BackSide);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
groupBox->setFlat(true);
groupBox->setCheckable(true);
gridLayout = new QGridLayout(groupBox);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(groupBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 1);
hostName = new QLineEdit(groupBox);
- hostName->setObjectName(QString::fromUtf8("hostName"));
+ hostName->setObjectName("hostName");
gridLayout->addWidget(hostName, 0, 1, 1, 1);
label_2 = new QLabel(groupBox);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout->addWidget(label_2, 1, 0, 1, 1);
label_3 = new QLabel(groupBox);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
gridLayout->addWidget(label_3, 2, 0, 1, 1);
horizontalLayout = new QHBoxLayout();
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
horizontalSlider = new QSlider(groupBox);
- horizontalSlider->setObjectName(QString::fromUtf8("horizontalSlider"));
+ horizontalSlider->setObjectName("horizontalSlider");
horizontalSlider->setValue(42);
horizontalSlider->setOrientation(Qt::Horizontal);
horizontalLayout->addWidget(horizontalSlider);
spinBox = new QSpinBox(groupBox);
- spinBox->setObjectName(QString::fromUtf8("spinBox"));
+ spinBox->setObjectName("spinBox");
spinBox->setValue(42);
horizontalLayout->addWidget(spinBox);
@@ -96,7 +96,7 @@ public:
gridLayout->addLayout(horizontalLayout, 2, 1, 1, 1);
dateTimeEdit = new QDateTimeEdit(groupBox);
- dateTimeEdit->setObjectName(QString::fromUtf8("dateTimeEdit"));
+ dateTimeEdit->setObjectName("dateTimeEdit");
gridLayout->addWidget(dateTimeEdit, 1, 1, 1, 1);
@@ -104,11 +104,11 @@ public:
verticalLayout_2->addWidget(groupBox);
groupBox_2 = new QGroupBox(BackSide);
- groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
+ groupBox_2->setObjectName("groupBox_2");
groupBox_2->setFlat(true);
groupBox_2->setCheckable(true);
horizontalLayout_2 = new QHBoxLayout(groupBox_2);
- horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
+ horizontalLayout_2->setObjectName("horizontalLayout_2");
treeWidget = new QTreeWidget(groupBox_2);
QTreeWidgetItem *__qtreewidgetitem = new QTreeWidgetItem(treeWidget);
QTreeWidgetItem *__qtreewidgetitem1 = new QTreeWidgetItem(__qtreewidgetitem);
@@ -121,7 +121,7 @@ public:
QTreeWidgetItem *__qtreewidgetitem4 = new QTreeWidgetItem(treeWidget);
QTreeWidgetItem *__qtreewidgetitem5 = new QTreeWidgetItem(__qtreewidgetitem4);
new QTreeWidgetItem(__qtreewidgetitem5);
- treeWidget->setObjectName(QString::fromUtf8("treeWidget"));
+ treeWidget->setObjectName("treeWidget");
horizontalLayout_2->addWidget(treeWidget);
diff --git a/tests/auto/tools/uic/baseline/batchtranslation.ui b/tests/auto/tools/uic/baseline/batchtranslation.ui
index 3e757242d9..49a483061d 100644
--- a/tests/auto/tools/uic/baseline/batchtranslation.ui
+++ b/tests/auto/tools/uic/baseline/batchtranslation.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<exportmacro></exportmacro>
<class>databaseTranslationDialog</class>
<widget class="QDialog" name="databaseTranslationDialog" >
diff --git a/tests/auto/tools/uic/baseline/batchtranslation.ui.h b/tests/auto/tools/uic/baseline/batchtranslation.ui.h
index efe514f7a1..43bca0f950 100644
--- a/tests/auto/tools/uic/baseline/batchtranslation.ui.h
+++ b/tests/auto/tools/uic/baseline/batchtranslation.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -78,7 +55,7 @@ public:
void setupUi(QDialog *databaseTranslationDialog)
{
if (databaseTranslationDialog->objectName().isEmpty())
- databaseTranslationDialog->setObjectName(QString::fromUtf8("databaseTranslationDialog"));
+ databaseTranslationDialog->setObjectName("databaseTranslationDialog");
databaseTranslationDialog->resize(425, 370);
vboxLayout = new QVBoxLayout(databaseTranslationDialog);
#ifndef Q_OS_MAC
@@ -87,10 +64,10 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
groupBox = new QGroupBox(databaseTranslationDialog);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
+ groupBox->setObjectName("groupBox");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Maximum);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(groupBox->sizePolicy().hasHeightForWidth());
@@ -102,15 +79,15 @@ public:
#ifndef Q_OS_MAC
vboxLayout1->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
ckOnlyUntranslated = new QCheckBox(groupBox);
- ckOnlyUntranslated->setObjectName(QString::fromUtf8("ckOnlyUntranslated"));
+ ckOnlyUntranslated->setObjectName("ckOnlyUntranslated");
ckOnlyUntranslated->setChecked(true);
vboxLayout1->addWidget(ckOnlyUntranslated);
ckMarkFinished = new QCheckBox(groupBox);
- ckMarkFinished->setObjectName(QString::fromUtf8("ckMarkFinished"));
+ ckMarkFinished->setObjectName("ckMarkFinished");
ckMarkFinished->setChecked(true);
vboxLayout1->addWidget(ckMarkFinished);
@@ -119,8 +96,8 @@ public:
vboxLayout->addWidget(groupBox);
groupBox_2 = new QGroupBox(databaseTranslationDialog);
- groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
- QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Minimum);
+ groupBox_2->setObjectName("groupBox_2");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Minimum);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(groupBox_2->sizePolicy().hasHeightForWidth());
@@ -132,7 +109,7 @@ public:
#ifndef Q_OS_MAC
vboxLayout2->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
hboxLayout = new QHBoxLayout();
#ifndef Q_OS_MAC
hboxLayout->setSpacing(6);
@@ -140,9 +117,9 @@ public:
#ifndef Q_OS_MAC
hboxLayout->setContentsMargins(0, 0, 0, 0);
#endif
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
phrasebookList = new QListView(groupBox_2);
- phrasebookList->setObjectName(QString::fromUtf8("phrasebookList"));
+ phrasebookList->setObjectName("phrasebookList");
phrasebookList->setUniformItemSizes(true);
hboxLayout->addWidget(phrasebookList);
@@ -152,18 +129,18 @@ public:
vboxLayout3->setSpacing(6);
#endif
vboxLayout3->setContentsMargins(0, 0, 0, 0);
- vboxLayout3->setObjectName(QString::fromUtf8("vboxLayout3"));
+ vboxLayout3->setObjectName("vboxLayout3");
moveUpButton = new QPushButton(groupBox_2);
- moveUpButton->setObjectName(QString::fromUtf8("moveUpButton"));
+ moveUpButton->setObjectName("moveUpButton");
vboxLayout3->addWidget(moveUpButton);
moveDownButton = new QPushButton(groupBox_2);
- moveDownButton->setObjectName(QString::fromUtf8("moveDownButton"));
+ moveDownButton->setObjectName("moveDownButton");
vboxLayout3->addWidget(moveDownButton);
- spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout3->addItem(spacerItem);
@@ -174,7 +151,7 @@ public:
vboxLayout2->addLayout(hboxLayout);
label = new QLabel(groupBox_2);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
label->setWordWrap(true);
vboxLayout2->addWidget(label);
@@ -187,18 +164,18 @@ public:
hboxLayout1->setSpacing(6);
#endif
hboxLayout1->setContentsMargins(0, 0, 0, 0);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
- spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ hboxLayout1->setObjectName("hboxLayout1");
+ spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout1->addItem(spacerItem1);
runButton = new QPushButton(databaseTranslationDialog);
- runButton->setObjectName(QString::fromUtf8("runButton"));
+ runButton->setObjectName("runButton");
hboxLayout1->addWidget(runButton);
cancelButton = new QPushButton(databaseTranslationDialog);
- cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
+ cancelButton->setObjectName("cancelButton");
hboxLayout1->addWidget(cancelButton);
diff --git a/tests/auto/tools/uic/baseline/bookmarkdialog.ui.h b/tests/auto/tools/uic/baseline/bookmarkdialog.ui.h
index 7a583ce3cb..45cc3957d0 100644
--- a/tests/auto/tools/uic/baseline/bookmarkdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/bookmarkdialog.ui.h
@@ -49,26 +49,26 @@ public:
void setupUi(QDialog *BookmarkDialog)
{
if (BookmarkDialog->objectName().isEmpty())
- BookmarkDialog->setObjectName(QString::fromUtf8("BookmarkDialog"));
+ BookmarkDialog->setObjectName("BookmarkDialog");
BookmarkDialog->resize(450, 135);
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(BookmarkDialog->sizePolicy().hasHeightForWidth());
BookmarkDialog->setSizePolicy(sizePolicy);
verticalLayout_3 = new QVBoxLayout(BookmarkDialog);
- verticalLayout_3->setObjectName(QString::fromUtf8("verticalLayout_3"));
+ verticalLayout_3->setObjectName("verticalLayout_3");
horizontalLayout = new QHBoxLayout();
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
verticalLayout_2 = new QVBoxLayout();
- verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
+ verticalLayout_2->setObjectName("verticalLayout_2");
label = new QLabel(BookmarkDialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
verticalLayout_2->addWidget(label);
label_2 = new QLabel(BookmarkDialog);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
verticalLayout_2->addWidget(label_2);
@@ -76,14 +76,14 @@ public:
horizontalLayout->addLayout(verticalLayout_2);
verticalLayout = new QVBoxLayout();
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
bookmarkEdit = new QLineEdit(BookmarkDialog);
- bookmarkEdit->setObjectName(QString::fromUtf8("bookmarkEdit"));
+ bookmarkEdit->setObjectName("bookmarkEdit");
verticalLayout->addWidget(bookmarkEdit);
bookmarkFolders = new QComboBox(BookmarkDialog);
- bookmarkFolders->setObjectName(QString::fromUtf8("bookmarkFolders"));
+ bookmarkFolders->setObjectName("bookmarkFolders");
verticalLayout->addWidget(bookmarkFolders);
@@ -94,17 +94,17 @@ public:
verticalLayout_3->addLayout(horizontalLayout);
horizontalLayout_3 = new QHBoxLayout();
- horizontalLayout_3->setObjectName(QString::fromUtf8("horizontalLayout_3"));
+ horizontalLayout_3->setObjectName("horizontalLayout_3");
toolButton = new QToolButton(BookmarkDialog);
- toolButton->setObjectName(QString::fromUtf8("toolButton"));
+ toolButton->setObjectName("toolButton");
toolButton->setMinimumSize(QSize(25, 20));
horizontalLayout_3->addWidget(toolButton);
line = new QFrame(BookmarkDialog);
- line->setObjectName(QString::fromUtf8("line"));
- line->setFrameShape(QFrame::HLine);
- line->setFrameShadow(QFrame::Sunken);
+ line->setObjectName("line");
+ line->setFrameShape(QFrame::Shape::HLine);
+ line->setFrameShadow(QFrame::Shadow::Sunken);
horizontalLayout_3->addWidget(line);
@@ -112,9 +112,9 @@ public:
verticalLayout_3->addLayout(horizontalLayout_3);
bookmarkWidget = new BookmarkWidget(BookmarkDialog);
- bookmarkWidget->setObjectName(QString::fromUtf8("bookmarkWidget"));
+ bookmarkWidget->setObjectName("bookmarkWidget");
bookmarkWidget->setEnabled(true);
- QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Ignored);
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Ignored);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(bookmarkWidget->sizePolicy().hasHeightForWidth());
@@ -123,14 +123,14 @@ public:
verticalLayout_3->addWidget(bookmarkWidget);
horizontalLayout_4 = new QHBoxLayout();
- horizontalLayout_4->setObjectName(QString::fromUtf8("horizontalLayout_4"));
+ horizontalLayout_4->setObjectName("horizontalLayout_4");
newFolderButton = new QPushButton(BookmarkDialog);
- newFolderButton->setObjectName(QString::fromUtf8("newFolderButton"));
+ newFolderButton->setObjectName("newFolderButton");
horizontalLayout_4->addWidget(newFolderButton);
buttonBox = new QDialogButtonBox(BookmarkDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/bookwindow.ui.h b/tests/auto/tools/uic/baseline/bookwindow.ui.h
index 30c19de383..c484a051b8 100644
--- a/tests/auto/tools/uic/baseline/bookwindow.ui.h
+++ b/tests/auto/tools/uic/baseline/bookwindow.ui.h
@@ -49,10 +49,10 @@ public:
void setupUi(QMainWindow *BookWindow)
{
if (BookWindow->objectName().isEmpty())
- BookWindow->setObjectName(QString::fromUtf8("BookWindow"));
+ BookWindow->setObjectName("BookWindow");
BookWindow->resize(601, 420);
centralWidget = new QWidget(BookWindow);
- centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
+ centralWidget->setObjectName("centralWidget");
vboxLayout = new QVBoxLayout(centralWidget);
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
@@ -60,9 +60,9 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
groupBox = new QGroupBox(centralWidget);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
vboxLayout1 = new QVBoxLayout(groupBox);
#ifndef Q_OS_MAC
vboxLayout1->setSpacing(6);
@@ -70,57 +70,57 @@ public:
#ifndef Q_OS_MAC
vboxLayout1->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
bookTable = new QTableView(groupBox);
- bookTable->setObjectName(QString::fromUtf8("bookTable"));
+ bookTable->setObjectName("bookTable");
bookTable->setSelectionBehavior(QAbstractItemView::SelectRows);
vboxLayout1->addWidget(bookTable);
groupBox_2 = new QGroupBox(groupBox);
- groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
+ groupBox_2->setObjectName("groupBox_2");
formLayout = new QFormLayout(groupBox_2);
- formLayout->setObjectName(QString::fromUtf8("formLayout"));
+ formLayout->setObjectName("formLayout");
label_5 = new QLabel(groupBox_2);
- label_5->setObjectName(QString::fromUtf8("label_5"));
+ label_5->setObjectName("label_5");
formLayout->setWidget(0, QFormLayout::LabelRole, label_5);
titleEdit = new QLineEdit(groupBox_2);
- titleEdit->setObjectName(QString::fromUtf8("titleEdit"));
+ titleEdit->setObjectName("titleEdit");
titleEdit->setEnabled(true);
formLayout->setWidget(0, QFormLayout::FieldRole, titleEdit);
label_2_2_2_2 = new QLabel(groupBox_2);
- label_2_2_2_2->setObjectName(QString::fromUtf8("label_2_2_2_2"));
+ label_2_2_2_2->setObjectName("label_2_2_2_2");
formLayout->setWidget(1, QFormLayout::LabelRole, label_2_2_2_2);
authorEdit = new QComboBox(groupBox_2);
- authorEdit->setObjectName(QString::fromUtf8("authorEdit"));
+ authorEdit->setObjectName("authorEdit");
authorEdit->setEnabled(true);
formLayout->setWidget(1, QFormLayout::FieldRole, authorEdit);
label_3 = new QLabel(groupBox_2);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
formLayout->setWidget(2, QFormLayout::LabelRole, label_3);
genreEdit = new QComboBox(groupBox_2);
- genreEdit->setObjectName(QString::fromUtf8("genreEdit"));
+ genreEdit->setObjectName("genreEdit");
genreEdit->setEnabled(true);
formLayout->setWidget(2, QFormLayout::FieldRole, genreEdit);
label_4 = new QLabel(groupBox_2);
- label_4->setObjectName(QString::fromUtf8("label_4"));
+ label_4->setObjectName("label_4");
formLayout->setWidget(3, QFormLayout::LabelRole, label_4);
yearEdit = new QSpinBox(groupBox_2);
- yearEdit->setObjectName(QString::fromUtf8("yearEdit"));
+ yearEdit->setObjectName("yearEdit");
yearEdit->setEnabled(true);
yearEdit->setMaximum(2100);
yearEdit->setMinimum(-1000);
@@ -128,12 +128,12 @@ public:
formLayout->setWidget(3, QFormLayout::FieldRole, yearEdit);
label = new QLabel(groupBox_2);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
formLayout->setWidget(4, QFormLayout::LabelRole, label);
ratingEdit = new QSpinBox(groupBox_2);
- ratingEdit->setObjectName(QString::fromUtf8("ratingEdit"));
+ ratingEdit->setObjectName("ratingEdit");
ratingEdit->setMaximum(5);
formLayout->setWidget(4, QFormLayout::FieldRole, ratingEdit);
diff --git a/tests/auto/tools/uic/baseline/browserwidget.ui.h b/tests/auto/tools/uic/baseline/browserwidget.ui.h
index 4171c6c2d2..1fa42647a5 100644
--- a/tests/auto/tools/uic/baseline/browserwidget.ui.h
+++ b/tests/auto/tools/uic/baseline/browserwidget.ui.h
@@ -46,39 +46,39 @@ public:
void setupUi(QWidget *Browser)
{
if (Browser->objectName().isEmpty())
- Browser->setObjectName(QString::fromUtf8("Browser"));
+ Browser->setObjectName("Browser");
Browser->resize(765, 515);
insertRowAction = new QAction(Browser);
- insertRowAction->setObjectName(QString::fromUtf8("insertRowAction"));
+ insertRowAction->setObjectName("insertRowAction");
insertRowAction->setEnabled(false);
deleteRowAction = new QAction(Browser);
- deleteRowAction->setObjectName(QString::fromUtf8("deleteRowAction"));
+ deleteRowAction->setObjectName("deleteRowAction");
deleteRowAction->setEnabled(false);
vboxLayout = new QVBoxLayout(Browser);
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
#endif
vboxLayout->setContentsMargins(8, 8, 8, 8);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
splitter_2 = new QSplitter(Browser);
- splitter_2->setObjectName(QString::fromUtf8("splitter_2"));
- QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ splitter_2->setObjectName("splitter_2");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(splitter_2->sizePolicy().hasHeightForWidth());
splitter_2->setSizePolicy(sizePolicy);
splitter_2->setOrientation(Qt::Horizontal);
connectionWidget = new ConnectionWidget(splitter_2);
- connectionWidget->setObjectName(QString::fromUtf8("connectionWidget"));
- QSizePolicy sizePolicy1(QSizePolicy::Ignored, QSizePolicy::Expanding);
+ connectionWidget->setObjectName("connectionWidget");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Ignored, QSizePolicy::Policy::Expanding);
sizePolicy1.setHorizontalStretch(1);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(connectionWidget->sizePolicy().hasHeightForWidth());
connectionWidget->setSizePolicy(sizePolicy1);
splitter_2->addWidget(connectionWidget);
table = new QTableView(splitter_2);
- table->setObjectName(QString::fromUtf8("table"));
- QSizePolicy sizePolicy2(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ table->setObjectName("table");
+ QSizePolicy sizePolicy2(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
sizePolicy2.setHorizontalStretch(2);
sizePolicy2.setVerticalStretch(0);
sizePolicy2.setHeightForWidth(table->sizePolicy().hasHeightForWidth());
@@ -90,8 +90,8 @@ public:
vboxLayout->addWidget(splitter_2);
groupBox = new QGroupBox(Browser);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
- QSizePolicy sizePolicy3(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
+ groupBox->setObjectName("groupBox");
+ QSizePolicy sizePolicy3(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::MinimumExpanding);
sizePolicy3.setHorizontalStretch(0);
sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(groupBox->sizePolicy().hasHeightForWidth());
@@ -104,10 +104,10 @@ public:
#ifndef Q_OS_MAC
vboxLayout1->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
sqlEdit = new QTextEdit(groupBox);
- sqlEdit->setObjectName(QString::fromUtf8("sqlEdit"));
- QSizePolicy sizePolicy4(QSizePolicy::Expanding, QSizePolicy::MinimumExpanding);
+ sqlEdit->setObjectName("sqlEdit");
+ QSizePolicy sizePolicy4(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::MinimumExpanding);
sizePolicy4.setHorizontalStretch(0);
sizePolicy4.setVerticalStretch(0);
sizePolicy4.setHeightForWidth(sqlEdit->sizePolicy().hasHeightForWidth());
@@ -122,18 +122,18 @@ public:
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(1, 1, 1, 1);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ hboxLayout->setObjectName("hboxLayout");
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
clearButton = new QPushButton(groupBox);
- clearButton->setObjectName(QString::fromUtf8("clearButton"));
+ clearButton->setObjectName("clearButton");
hboxLayout->addWidget(clearButton);
submitButton = new QPushButton(groupBox);
- submitButton->setObjectName(QString::fromUtf8("submitButton"));
+ submitButton->setObjectName("submitButton");
hboxLayout->addWidget(submitButton);
diff --git a/tests/auto/tools/uic/baseline/bug18156QTreeWidget.ui.h b/tests/auto/tools/uic/baseline/bug18156QTreeWidget.ui.h
index fcbeeeb9e5..33fbc15cca 100644
--- a/tests/auto/tools/uic/baseline/bug18156QTreeWidget.ui.h
+++ b/tests/auto/tools/uic/baseline/bug18156QTreeWidget.ui.h
@@ -30,19 +30,19 @@ public:
void setupUi(QDialog *Dialog)
{
if (Dialog->objectName().isEmpty())
- Dialog->setObjectName(QString::fromUtf8("Dialog"));
+ Dialog->setObjectName("Dialog");
Dialog->resize(400, 300);
gridLayout = new QGridLayout(Dialog);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
treeWidget = new QTreeWidget(Dialog);
treeWidget->headerItem()->setText(0, QString());
treeWidget->headerItem()->setText(2, QString());
- treeWidget->setObjectName(QString::fromUtf8("treeWidget"));
+ treeWidget->setObjectName("treeWidget");
gridLayout->addWidget(treeWidget, 0, 0, 1, 1);
buttonBox = new QDialogButtonBox(Dialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/buttongroup.ui.h b/tests/auto/tools/uic/baseline/buttongroup.ui.h
index f1b1345497..b6804de552 100644
--- a/tests/auto/tools/uic/baseline/buttongroup.ui.h
+++ b/tests/auto/tools/uic/baseline/buttongroup.ui.h
@@ -51,13 +51,13 @@ public:
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
- Form->setObjectName(QString::fromUtf8("Form"));
+ Form->setObjectName("Form");
Form->resize(545, 471);
gridLayout = new QGridLayout(Form);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
easingCurvePicker = new QListWidget(Form);
- easingCurvePicker->setObjectName(QString::fromUtf8("easingCurvePicker"));
- QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ easingCurvePicker->setObjectName("easingCurvePicker");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(easingCurvePicker->sizePolicy().hasHeightForWidth());
@@ -72,17 +72,17 @@ public:
gridLayout->addWidget(easingCurvePicker, 0, 0, 1, 2);
verticalLayout = new QVBoxLayout();
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
groupBox_2 = new QGroupBox(Form);
- groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
+ groupBox_2->setObjectName("groupBox_2");
groupBox_2->setMaximumSize(QSize(16777215, 16777215));
gridLayout_2 = new QGridLayout(groupBox_2);
- gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
+ gridLayout_2->setObjectName("gridLayout_2");
lineRadio = new QRadioButton(groupBox_2);
buttonGroup = new QButtonGroup(Form);
- buttonGroup->setObjectName(QString::fromUtf8("buttonGroup"));
+ buttonGroup->setObjectName("buttonGroup");
buttonGroup->addButton(lineRadio);
- lineRadio->setObjectName(QString::fromUtf8("lineRadio"));
+ lineRadio->setObjectName("lineRadio");
lineRadio->setMaximumSize(QSize(16777215, 40));
lineRadio->setLayoutDirection(Qt::LeftToRight);
lineRadio->setChecked(true);
@@ -91,7 +91,7 @@ public:
circleRadio = new QRadioButton(groupBox_2);
buttonGroup->addButton(circleRadio);
- circleRadio->setObjectName(QString::fromUtf8("circleRadio"));
+ circleRadio->setObjectName("circleRadio");
circleRadio->setMaximumSize(QSize(16777215, 40));
gridLayout_2->addWidget(circleRadio, 1, 0, 1, 1);
@@ -100,18 +100,18 @@ public:
verticalLayout->addWidget(groupBox_2);
groupBox = new QGroupBox(Form);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
- QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Preferred);
+ groupBox->setObjectName("groupBox");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Preferred);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(groupBox->sizePolicy().hasHeightForWidth());
groupBox->setSizePolicy(sizePolicy1);
formLayout = new QFormLayout(groupBox);
- formLayout->setObjectName(QString::fromUtf8("formLayout"));
+ formLayout->setObjectName("formLayout");
formLayout->setFieldGrowthPolicy(QFormLayout::AllNonFixedFieldsGrow);
label = new QLabel(groupBox);
- label->setObjectName(QString::fromUtf8("label"));
- QSizePolicy sizePolicy2(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ label->setObjectName("label");
+ QSizePolicy sizePolicy2(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Preferred);
sizePolicy2.setHorizontalStretch(0);
sizePolicy2.setVerticalStretch(0);
sizePolicy2.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
@@ -121,9 +121,9 @@ public:
formLayout->setWidget(0, QFormLayout::LabelRole, label);
periodSpinBox = new QDoubleSpinBox(groupBox);
- periodSpinBox->setObjectName(QString::fromUtf8("periodSpinBox"));
+ periodSpinBox->setObjectName("periodSpinBox");
periodSpinBox->setEnabled(false);
- QSizePolicy sizePolicy3(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ QSizePolicy sizePolicy3(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
sizePolicy3.setHorizontalStretch(0);
sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(periodSpinBox->sizePolicy().hasHeightForWidth());
@@ -136,7 +136,7 @@ public:
formLayout->setWidget(0, QFormLayout::FieldRole, periodSpinBox);
amplitudeSpinBox = new QDoubleSpinBox(groupBox);
- amplitudeSpinBox->setObjectName(QString::fromUtf8("amplitudeSpinBox"));
+ amplitudeSpinBox->setObjectName("amplitudeSpinBox");
amplitudeSpinBox->setEnabled(false);
amplitudeSpinBox->setMinimumSize(QSize(0, 30));
amplitudeSpinBox->setMinimum(-1.000000000000000);
@@ -146,13 +146,13 @@ public:
formLayout->setWidget(2, QFormLayout::FieldRole, amplitudeSpinBox);
label_3 = new QLabel(groupBox);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
label_3->setMinimumSize(QSize(0, 30));
formLayout->setWidget(4, QFormLayout::LabelRole, label_3);
overshootSpinBox = new QDoubleSpinBox(groupBox);
- overshootSpinBox->setObjectName(QString::fromUtf8("overshootSpinBox"));
+ overshootSpinBox->setObjectName("overshootSpinBox");
overshootSpinBox->setEnabled(false);
overshootSpinBox->setMinimumSize(QSize(0, 30));
overshootSpinBox->setMinimum(-1.000000000000000);
@@ -162,7 +162,7 @@ public:
formLayout->setWidget(4, QFormLayout::FieldRole, overshootSpinBox);
label_2 = new QLabel(groupBox);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
label_2->setMinimumSize(QSize(0, 30));
formLayout->setWidget(2, QFormLayout::LabelRole, label_2);
@@ -170,7 +170,7 @@ public:
verticalLayout->addWidget(groupBox);
- verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
verticalLayout->addItem(verticalSpacer);
@@ -178,8 +178,8 @@ public:
gridLayout->addLayout(verticalLayout, 1, 0, 1, 1);
graphicsView = new QGraphicsView(Form);
- graphicsView->setObjectName(QString::fromUtf8("graphicsView"));
- QSizePolicy sizePolicy4(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ graphicsView->setObjectName("graphicsView");
+ QSizePolicy sizePolicy4(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
sizePolicy4.setHorizontalStretch(0);
sizePolicy4.setVerticalStretch(0);
sizePolicy4.setHeightForWidth(graphicsView->sizePolicy().hasHeightForWidth());
diff --git a/tests/auto/tools/uic/baseline/calculator.ui.h b/tests/auto/tools/uic/baseline/calculator.ui.h
index 9bf899d575..5f52aff2d2 100644
--- a/tests/auto/tools/uic/baseline/calculator.ui.h
+++ b/tests/auto/tools/uic/baseline/calculator.ui.h
@@ -52,9 +52,9 @@ public:
void setupUi(QWidget *Calculator)
{
if (Calculator->objectName().isEmpty())
- Calculator->setObjectName(QString::fromUtf8("Calculator"));
+ Calculator->setObjectName("Calculator");
Calculator->resize(314, 301);
- QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(Calculator->sizePolicy().hasHeightForWidth());
@@ -62,88 +62,88 @@ public:
Calculator->setMinimumSize(QSize(314, 301));
Calculator->setMaximumSize(QSize(314, 301));
backspaceButton = new QToolButton(Calculator);
- backspaceButton->setObjectName(QString::fromUtf8("backspaceButton"));
+ backspaceButton->setObjectName("backspaceButton");
backspaceButton->setGeometry(QRect(10, 50, 91, 41));
clearButton = new QToolButton(Calculator);
- clearButton->setObjectName(QString::fromUtf8("clearButton"));
+ clearButton->setObjectName("clearButton");
clearButton->setGeometry(QRect(110, 50, 91, 41));
clearAllButton = new QToolButton(Calculator);
- clearAllButton->setObjectName(QString::fromUtf8("clearAllButton"));
+ clearAllButton->setObjectName("clearAllButton");
clearAllButton->setGeometry(QRect(210, 50, 91, 41));
clearMemoryButton = new QToolButton(Calculator);
- clearMemoryButton->setObjectName(QString::fromUtf8("clearMemoryButton"));
+ clearMemoryButton->setObjectName("clearMemoryButton");
clearMemoryButton->setGeometry(QRect(10, 100, 41, 41));
readMemoryButton = new QToolButton(Calculator);
- readMemoryButton->setObjectName(QString::fromUtf8("readMemoryButton"));
+ readMemoryButton->setObjectName("readMemoryButton");
readMemoryButton->setGeometry(QRect(10, 150, 41, 41));
setMemoryButton = new QToolButton(Calculator);
- setMemoryButton->setObjectName(QString::fromUtf8("setMemoryButton"));
+ setMemoryButton->setObjectName("setMemoryButton");
setMemoryButton->setGeometry(QRect(10, 200, 41, 41));
addToMemoryButton = new QToolButton(Calculator);
- addToMemoryButton->setObjectName(QString::fromUtf8("addToMemoryButton"));
+ addToMemoryButton->setObjectName("addToMemoryButton");
addToMemoryButton->setGeometry(QRect(10, 250, 41, 41));
sevenButton = new QToolButton(Calculator);
- sevenButton->setObjectName(QString::fromUtf8("sevenButton"));
+ sevenButton->setObjectName("sevenButton");
sevenButton->setGeometry(QRect(60, 100, 41, 41));
eightButton = new QToolButton(Calculator);
- eightButton->setObjectName(QString::fromUtf8("eightButton"));
+ eightButton->setObjectName("eightButton");
eightButton->setGeometry(QRect(110, 100, 41, 41));
nineButton = new QToolButton(Calculator);
- nineButton->setObjectName(QString::fromUtf8("nineButton"));
+ nineButton->setObjectName("nineButton");
nineButton->setGeometry(QRect(160, 100, 41, 41));
fourButton = new QToolButton(Calculator);
- fourButton->setObjectName(QString::fromUtf8("fourButton"));
+ fourButton->setObjectName("fourButton");
fourButton->setGeometry(QRect(60, 150, 41, 41));
fiveButton = new QToolButton(Calculator);
- fiveButton->setObjectName(QString::fromUtf8("fiveButton"));
+ fiveButton->setObjectName("fiveButton");
fiveButton->setGeometry(QRect(110, 150, 41, 41));
sixButton = new QToolButton(Calculator);
- sixButton->setObjectName(QString::fromUtf8("sixButton"));
+ sixButton->setObjectName("sixButton");
sixButton->setGeometry(QRect(160, 150, 41, 41));
oneButton = new QToolButton(Calculator);
- oneButton->setObjectName(QString::fromUtf8("oneButton"));
+ oneButton->setObjectName("oneButton");
oneButton->setGeometry(QRect(60, 200, 41, 41));
twoButton = new QToolButton(Calculator);
- twoButton->setObjectName(QString::fromUtf8("twoButton"));
+ twoButton->setObjectName("twoButton");
twoButton->setGeometry(QRect(110, 200, 41, 41));
threeButton = new QToolButton(Calculator);
- threeButton->setObjectName(QString::fromUtf8("threeButton"));
+ threeButton->setObjectName("threeButton");
threeButton->setGeometry(QRect(160, 200, 41, 41));
zeroButton = new QToolButton(Calculator);
- zeroButton->setObjectName(QString::fromUtf8("zeroButton"));
+ zeroButton->setObjectName("zeroButton");
zeroButton->setGeometry(QRect(60, 250, 41, 41));
pointButton = new QToolButton(Calculator);
- pointButton->setObjectName(QString::fromUtf8("pointButton"));
+ pointButton->setObjectName("pointButton");
pointButton->setGeometry(QRect(110, 250, 41, 41));
changeSignButton = new QToolButton(Calculator);
- changeSignButton->setObjectName(QString::fromUtf8("changeSignButton"));
+ changeSignButton->setObjectName("changeSignButton");
changeSignButton->setGeometry(QRect(160, 250, 41, 41));
plusButton = new QToolButton(Calculator);
- plusButton->setObjectName(QString::fromUtf8("plusButton"));
+ plusButton->setObjectName("plusButton");
plusButton->setGeometry(QRect(210, 250, 41, 41));
divisionButton = new QToolButton(Calculator);
- divisionButton->setObjectName(QString::fromUtf8("divisionButton"));
+ divisionButton->setObjectName("divisionButton");
divisionButton->setGeometry(QRect(210, 100, 41, 41));
timesButton = new QToolButton(Calculator);
- timesButton->setObjectName(QString::fromUtf8("timesButton"));
+ timesButton->setObjectName("timesButton");
timesButton->setGeometry(QRect(210, 150, 41, 41));
minusButton = new QToolButton(Calculator);
- minusButton->setObjectName(QString::fromUtf8("minusButton"));
+ minusButton->setObjectName("minusButton");
minusButton->setGeometry(QRect(210, 200, 41, 41));
squareRootButton = new QToolButton(Calculator);
- squareRootButton->setObjectName(QString::fromUtf8("squareRootButton"));
+ squareRootButton->setObjectName("squareRootButton");
squareRootButton->setGeometry(QRect(260, 100, 41, 41));
powerButton = new QToolButton(Calculator);
- powerButton->setObjectName(QString::fromUtf8("powerButton"));
+ powerButton->setObjectName("powerButton");
powerButton->setGeometry(QRect(260, 150, 41, 41));
reciprocalButton = new QToolButton(Calculator);
- reciprocalButton->setObjectName(QString::fromUtf8("reciprocalButton"));
+ reciprocalButton->setObjectName("reciprocalButton");
reciprocalButton->setGeometry(QRect(260, 200, 41, 41));
equalButton = new QToolButton(Calculator);
- equalButton->setObjectName(QString::fromUtf8("equalButton"));
+ equalButton->setObjectName("equalButton");
equalButton->setGeometry(QRect(260, 250, 41, 41));
display = new QLineEdit(Calculator);
- display->setObjectName(QString::fromUtf8("display"));
+ display->setObjectName("display");
display->setGeometry(QRect(10, 10, 291, 31));
display->setMaxLength(15);
display->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
diff --git a/tests/auto/tools/uic/baseline/calculatorform.ui.h b/tests/auto/tools/uic/baseline/calculatorform.ui.h
index 18d8d701d6..d905d7fbb2 100644
--- a/tests/auto/tools/uic/baseline/calculatorform.ui.h
+++ b/tests/auto/tools/uic/baseline/calculatorform.ui.h
@@ -43,9 +43,9 @@ public:
void setupUi(QWidget *CalculatorForm)
{
if (CalculatorForm->objectName().isEmpty())
- CalculatorForm->setObjectName(QString::fromUtf8("CalculatorForm"));
+ CalculatorForm->setObjectName("CalculatorForm");
CalculatorForm->resize(276, 98);
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(CalculatorForm->sizePolicy().hasHeightForWidth());
@@ -57,30 +57,30 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(9, 9, 9, 9);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
gridLayout->setObjectName(QString::fromUtf8(""));
hboxLayout = new QHBoxLayout();
#ifndef Q_OS_MAC
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(1, 1, 1, 1);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
hboxLayout->setObjectName(QString::fromUtf8(""));
vboxLayout = new QVBoxLayout();
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
#endif
vboxLayout->setContentsMargins(1, 1, 1, 1);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
vboxLayout->setObjectName(QString::fromUtf8(""));
label = new QLabel(CalculatorForm);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
label->setGeometry(QRect(1, 1, 45, 19));
vboxLayout->addWidget(label);
inputSpinBox1 = new QSpinBox(CalculatorForm);
- inputSpinBox1->setObjectName(QString::fromUtf8("inputSpinBox1"));
+ inputSpinBox1->setObjectName("inputSpinBox1");
inputSpinBox1->setGeometry(QRect(1, 26, 45, 25));
inputSpinBox1->setMouseTracking(true);
@@ -90,7 +90,7 @@ public:
hboxLayout->addLayout(vboxLayout);
label_3 = new QLabel(CalculatorForm);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
label_3->setGeometry(QRect(54, 1, 7, 52));
label_3->setAlignment(Qt::AlignCenter);
@@ -101,16 +101,16 @@ public:
vboxLayout1->setSpacing(6);
#endif
vboxLayout1->setContentsMargins(1, 1, 1, 1);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
vboxLayout1->setObjectName(QString::fromUtf8(""));
label_2 = new QLabel(CalculatorForm);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
label_2->setGeometry(QRect(1, 1, 45, 19));
vboxLayout1->addWidget(label_2);
inputSpinBox2 = new QSpinBox(CalculatorForm);
- inputSpinBox2->setObjectName(QString::fromUtf8("inputSpinBox2"));
+ inputSpinBox2->setObjectName("inputSpinBox2");
inputSpinBox2->setGeometry(QRect(1, 26, 45, 25));
inputSpinBox2->setMouseTracking(true);
@@ -120,7 +120,7 @@ public:
hboxLayout->addLayout(vboxLayout1);
label_3_2 = new QLabel(CalculatorForm);
- label_3_2->setObjectName(QString::fromUtf8("label_3_2"));
+ label_3_2->setObjectName("label_3_2");
label_3_2->setGeometry(QRect(120, 1, 7, 52));
label_3_2->setAlignment(Qt::AlignCenter);
@@ -131,16 +131,16 @@ public:
vboxLayout2->setSpacing(6);
#endif
vboxLayout2->setContentsMargins(1, 1, 1, 1);
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
vboxLayout2->setObjectName(QString::fromUtf8(""));
label_2_2_2 = new QLabel(CalculatorForm);
- label_2_2_2->setObjectName(QString::fromUtf8("label_2_2_2"));
+ label_2_2_2->setObjectName("label_2_2_2");
label_2_2_2->setGeometry(QRect(1, 1, 37, 17));
vboxLayout2->addWidget(label_2_2_2);
outputWidget = new QLabel(CalculatorForm);
- outputWidget->setObjectName(QString::fromUtf8("outputWidget"));
+ outputWidget->setObjectName("outputWidget");
outputWidget->setGeometry(QRect(1, 24, 37, 27));
outputWidget->setFrameShape(QFrame::Box);
outputWidget->setFrameShadow(QFrame::Sunken);
@@ -154,11 +154,11 @@ public:
gridLayout->addLayout(hboxLayout, 0, 0, 1, 1);
- spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem, 1, 0, 1, 1);
- spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem1, 0, 1, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/certificateinfo.ui.h b/tests/auto/tools/uic/baseline/certificateinfo.ui.h
index aa0254a0bc..fb34b675cf 100644
--- a/tests/auto/tools/uic/baseline/certificateinfo.ui.h
+++ b/tests/auto/tools/uic/baseline/certificateinfo.ui.h
@@ -39,16 +39,16 @@ public:
void setupUi(QDialog *CertificateInfo)
{
if (CertificateInfo->objectName().isEmpty())
- CertificateInfo->setObjectName(QString::fromUtf8("CertificateInfo"));
+ CertificateInfo->setObjectName("CertificateInfo");
CertificateInfo->resize(400, 397);
vboxLayout = new QVBoxLayout(CertificateInfo);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
groupBox = new QGroupBox(CertificateInfo);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
hboxLayout = new QHBoxLayout(groupBox);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
certificationPathView = new QListWidget(groupBox);
- certificationPathView->setObjectName(QString::fromUtf8("certificationPathView"));
+ certificationPathView->setObjectName("certificationPathView");
hboxLayout->addWidget(certificationPathView);
@@ -56,11 +56,11 @@ public:
vboxLayout->addWidget(groupBox);
groupBox_2 = new QGroupBox(CertificateInfo);
- groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
+ groupBox_2->setObjectName("groupBox_2");
hboxLayout1 = new QHBoxLayout(groupBox_2);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
certificateInfoView = new QListWidget(groupBox_2);
- certificateInfoView->setObjectName(QString::fromUtf8("certificateInfoView"));
+ certificateInfoView->setObjectName("certificateInfoView");
hboxLayout1->addWidget(certificateInfoView);
@@ -68,13 +68,13 @@ public:
vboxLayout->addWidget(groupBox_2);
hboxLayout2 = new QHBoxLayout();
- hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ hboxLayout2->setObjectName("hboxLayout2");
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout2->addItem(spacerItem);
buttonBox = new QDialogButtonBox(CertificateInfo);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setStandardButtons(QDialogButtonBox::Close);
hboxLayout2->addWidget(buttonBox);
diff --git a/tests/auto/tools/uic/baseline/chatdialog.ui.h b/tests/auto/tools/uic/baseline/chatdialog.ui.h
index e6bb0f4ccd..f3351a9895 100644
--- a/tests/auto/tools/uic/baseline/chatdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/chatdialog.ui.h
@@ -35,7 +35,7 @@ public:
void setupUi(QDialog *ChatDialog)
{
if (ChatDialog->objectName().isEmpty())
- ChatDialog->setObjectName(QString::fromUtf8("ChatDialog"));
+ ChatDialog->setObjectName("ChatDialog");
ChatDialog->resize(513, 349);
vboxLayout = new QVBoxLayout(ChatDialog);
#ifndef Q_OS_MAC
@@ -44,7 +44,7 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
hboxLayout = new QHBoxLayout();
#ifndef Q_OS_MAC
hboxLayout->setSpacing(6);
@@ -52,16 +52,16 @@ public:
#ifndef Q_OS_MAC
hboxLayout->setContentsMargins(0, 0, 0, 0);
#endif
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
textEdit = new QTextEdit(ChatDialog);
- textEdit->setObjectName(QString::fromUtf8("textEdit"));
+ textEdit->setObjectName("textEdit");
textEdit->setFocusPolicy(Qt::NoFocus);
textEdit->setReadOnly(true);
hboxLayout->addWidget(textEdit);
listWidget = new QListWidget(ChatDialog);
- listWidget->setObjectName(QString::fromUtf8("listWidget"));
+ listWidget->setObjectName("listWidget");
listWidget->setMaximumSize(QSize(180, 16777215));
listWidget->setFocusPolicy(Qt::NoFocus);
@@ -75,14 +75,14 @@ public:
hboxLayout1->setSpacing(6);
#endif
hboxLayout1->setContentsMargins(0, 0, 0, 0);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
label = new QLabel(ChatDialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
hboxLayout1->addWidget(label);
lineEdit = new QLineEdit(ChatDialog);
- lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
+ lineEdit->setObjectName("lineEdit");
hboxLayout1->addWidget(lineEdit);
diff --git a/tests/auto/tools/uic/baseline/chatmainwindow.ui.h b/tests/auto/tools/uic/baseline/chatmainwindow.ui.h
index 24c22a8076..b1ae1fc318 100644
--- a/tests/auto/tools/uic/baseline/chatmainwindow.ui.h
+++ b/tests/auto/tools/uic/baseline/chatmainwindow.ui.h
@@ -48,16 +48,16 @@ public:
void setupUi(QMainWindow *ChatMainWindow)
{
if (ChatMainWindow->objectName().isEmpty())
- ChatMainWindow->setObjectName(QString::fromUtf8("ChatMainWindow"));
+ ChatMainWindow->setObjectName("ChatMainWindow");
ChatMainWindow->resize(800, 600);
actionQuit = new QAction(ChatMainWindow);
- actionQuit->setObjectName(QString::fromUtf8("actionQuit"));
+ actionQuit->setObjectName("actionQuit");
actionAboutQt = new QAction(ChatMainWindow);
- actionAboutQt->setObjectName(QString::fromUtf8("actionAboutQt"));
+ actionAboutQt->setObjectName("actionAboutQt");
actionChangeNickname = new QAction(ChatMainWindow);
- actionChangeNickname->setObjectName(QString::fromUtf8("actionChangeNickname"));
+ actionChangeNickname->setObjectName("actionChangeNickname");
centralwidget = new QWidget(ChatMainWindow);
- centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
+ centralwidget->setObjectName("centralwidget");
hboxLayout = new QHBoxLayout(centralwidget);
#ifndef Q_OS_MAC
hboxLayout->setSpacing(6);
@@ -65,7 +65,7 @@ public:
#ifndef Q_OS_MAC
hboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
vboxLayout = new QVBoxLayout();
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
@@ -73,9 +73,9 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(0, 0, 0, 0);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
chatHistory = new QTextBrowser(centralwidget);
- chatHistory->setObjectName(QString::fromUtf8("chatHistory"));
+ chatHistory->setObjectName("chatHistory");
chatHistory->setAcceptDrops(false);
chatHistory->setAcceptRichText(true);
@@ -86,20 +86,20 @@ public:
hboxLayout1->setSpacing(6);
#endif
hboxLayout1->setContentsMargins(0, 0, 0, 0);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
label = new QLabel(centralwidget);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
hboxLayout1->addWidget(label);
messageLineEdit = new QLineEdit(centralwidget);
- messageLineEdit->setObjectName(QString::fromUtf8("messageLineEdit"));
+ messageLineEdit->setObjectName("messageLineEdit");
hboxLayout1->addWidget(messageLineEdit);
sendButton = new QPushButton(centralwidget);
- sendButton->setObjectName(QString::fromUtf8("sendButton"));
- QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ sendButton->setObjectName("sendButton");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(sendButton->sizePolicy().hasHeightForWidth());
@@ -115,15 +115,15 @@ public:
ChatMainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(ChatMainWindow);
- menubar->setObjectName(QString::fromUtf8("menubar"));
+ menubar->setObjectName("menubar");
menubar->setGeometry(QRect(0, 0, 800, 31));
menuQuit = new QMenu(menubar);
- menuQuit->setObjectName(QString::fromUtf8("menuQuit"));
+ menuQuit->setObjectName("menuQuit");
menuFile = new QMenu(menubar);
- menuFile->setObjectName(QString::fromUtf8("menuFile"));
+ menuFile->setObjectName("menuFile");
ChatMainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(ChatMainWindow);
- statusbar->setObjectName(QString::fromUtf8("statusbar"));
+ statusbar->setObjectName("statusbar");
ChatMainWindow->setStatusBar(statusbar);
#if QT_CONFIG(shortcut)
label->setBuddy(messageLineEdit);
diff --git a/tests/auto/tools/uic/baseline/chatsetnickname.ui.h b/tests/auto/tools/uic/baseline/chatsetnickname.ui.h
index fa94bc7522..e8674e0960 100644
--- a/tests/auto/tools/uic/baseline/chatsetnickname.ui.h
+++ b/tests/auto/tools/uic/baseline/chatsetnickname.ui.h
@@ -37,9 +37,9 @@ public:
void setupUi(QDialog *NicknameDialog)
{
if (NicknameDialog->objectName().isEmpty())
- NicknameDialog->setObjectName(QString::fromUtf8("NicknameDialog"));
+ NicknameDialog->setObjectName("NicknameDialog");
NicknameDialog->resize(396, 105);
- QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Minimum);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(NicknameDialog->sizePolicy().hasHeightForWidth());
@@ -51,7 +51,7 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
vboxLayout1 = new QVBoxLayout();
#ifndef Q_OS_MAC
vboxLayout1->setSpacing(6);
@@ -59,16 +59,16 @@ public:
#ifndef Q_OS_MAC
vboxLayout1->setContentsMargins(0, 0, 0, 0);
#endif
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
label = new QLabel(NicknameDialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
sizePolicy.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
label->setSizePolicy(sizePolicy);
vboxLayout1->addWidget(label);
nickname = new QLineEdit(NicknameDialog);
- nickname->setObjectName(QString::fromUtf8("nickname"));
+ nickname->setObjectName("nickname");
vboxLayout1->addWidget(nickname);
@@ -80,22 +80,22 @@ public:
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(0, 0, 0, 0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
- spacerItem = new QSpacerItem(131, 31, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ hboxLayout->setObjectName("hboxLayout");
+ spacerItem = new QSpacerItem(131, 31, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
okButton = new QPushButton(NicknameDialog);
- okButton->setObjectName(QString::fromUtf8("okButton"));
+ okButton->setObjectName("okButton");
hboxLayout->addWidget(okButton);
cancelButton = new QPushButton(NicknameDialog);
- cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
+ cancelButton->setObjectName("cancelButton");
hboxLayout->addWidget(cancelButton);
- spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem1);
diff --git a/tests/auto/tools/uic/baseline/config.ui b/tests/auto/tools/uic/baseline/config.ui
index ff8251e017..cf0d88006f 100644
--- a/tests/auto/tools/uic/baseline/config.ui
+++ b/tests/auto/tools/uic/baseline/config.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>Config</class>
<widget class="QDialog" name="Config" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/config.ui.h b/tests/auto/tools/uic/baseline/config.ui.h
index 30106b3420..3fc86035c8 100644
--- a/tests/auto/tools/uic/baseline/config.ui.h
+++ b/tests/auto/tools/uic/baseline/config.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -118,21 +95,21 @@ public:
void setupUi(QDialog *Config)
{
if (Config->objectName().isEmpty())
- Config->setObjectName(QString::fromUtf8("Config"));
+ Config->setObjectName("Config");
Config->resize(600, 650);
Config->setSizeGripEnabled(true);
vboxLayout = new QVBoxLayout(Config);
vboxLayout->setSpacing(6);
vboxLayout->setContentsMargins(11, 11, 11, 11);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
vboxLayout->setContentsMargins(8, 8, 8, 8);
hboxLayout = new QHBoxLayout();
hboxLayout->setSpacing(6);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
hboxLayout->setContentsMargins(0, 0, 0, 0);
ButtonGroup1 = new QGroupBox(Config);
- ButtonGroup1->setObjectName(QString::fromUtf8("ButtonGroup1"));
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ ButtonGroup1->setObjectName("ButtonGroup1");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(ButtonGroup1->sizePolicy().hasHeightForWidth());
@@ -140,45 +117,45 @@ public:
vboxLayout1 = new QVBoxLayout(ButtonGroup1);
vboxLayout1->setSpacing(6);
vboxLayout1->setContentsMargins(11, 11, 11, 11);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
vboxLayout1->setContentsMargins(11, 11, 11, 11);
size_176_220 = new QRadioButton(ButtonGroup1);
- size_176_220->setObjectName(QString::fromUtf8("size_176_220"));
+ size_176_220->setObjectName("size_176_220");
vboxLayout1->addWidget(size_176_220);
size_240_320 = new QRadioButton(ButtonGroup1);
- size_240_320->setObjectName(QString::fromUtf8("size_240_320"));
+ size_240_320->setObjectName("size_240_320");
vboxLayout1->addWidget(size_240_320);
size_320_240 = new QRadioButton(ButtonGroup1);
- size_320_240->setObjectName(QString::fromUtf8("size_320_240"));
+ size_320_240->setObjectName("size_320_240");
vboxLayout1->addWidget(size_320_240);
size_640_480 = new QRadioButton(ButtonGroup1);
- size_640_480->setObjectName(QString::fromUtf8("size_640_480"));
+ size_640_480->setObjectName("size_640_480");
vboxLayout1->addWidget(size_640_480);
size_800_600 = new QRadioButton(ButtonGroup1);
- size_800_600->setObjectName(QString::fromUtf8("size_800_600"));
+ size_800_600->setObjectName("size_800_600");
vboxLayout1->addWidget(size_800_600);
size_1024_768 = new QRadioButton(ButtonGroup1);
- size_1024_768->setObjectName(QString::fromUtf8("size_1024_768"));
+ size_1024_768->setObjectName("size_1024_768");
vboxLayout1->addWidget(size_1024_768);
hboxLayout1 = new QHBoxLayout();
hboxLayout1->setSpacing(6);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
hboxLayout1->setContentsMargins(0, 0, 0, 0);
size_custom = new QRadioButton(ButtonGroup1);
- size_custom->setObjectName(QString::fromUtf8("size_custom"));
- QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ size_custom->setObjectName("size_custom");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Fixed);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(size_custom->sizePolicy().hasHeightForWidth());
@@ -187,7 +164,7 @@ public:
hboxLayout1->addWidget(size_custom);
size_width = new QSpinBox(ButtonGroup1);
- size_width->setObjectName(QString::fromUtf8("size_width"));
+ size_width->setObjectName("size_width");
size_width->setMinimum(1);
size_width->setMaximum(1280);
size_width->setSingleStep(16);
@@ -196,7 +173,7 @@ public:
hboxLayout1->addWidget(size_width);
size_height = new QSpinBox(ButtonGroup1);
- size_height->setObjectName(QString::fromUtf8("size_height"));
+ size_height->setObjectName("size_height");
size_height->setMinimum(1);
size_height->setMaximum(1024);
size_height->setSingleStep(16);
@@ -211,59 +188,59 @@ public:
hboxLayout->addWidget(ButtonGroup1);
ButtonGroup2 = new QGroupBox(Config);
- ButtonGroup2->setObjectName(QString::fromUtf8("ButtonGroup2"));
+ ButtonGroup2->setObjectName("ButtonGroup2");
vboxLayout2 = new QVBoxLayout(ButtonGroup2);
vboxLayout2->setSpacing(6);
vboxLayout2->setContentsMargins(11, 11, 11, 11);
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
vboxLayout2->setContentsMargins(11, 11, 11, 11);
depth_1 = new QRadioButton(ButtonGroup2);
- depth_1->setObjectName(QString::fromUtf8("depth_1"));
+ depth_1->setObjectName("depth_1");
vboxLayout2->addWidget(depth_1);
depth_4gray = new QRadioButton(ButtonGroup2);
- depth_4gray->setObjectName(QString::fromUtf8("depth_4gray"));
+ depth_4gray->setObjectName("depth_4gray");
vboxLayout2->addWidget(depth_4gray);
depth_8 = new QRadioButton(ButtonGroup2);
- depth_8->setObjectName(QString::fromUtf8("depth_8"));
+ depth_8->setObjectName("depth_8");
vboxLayout2->addWidget(depth_8);
depth_12 = new QRadioButton(ButtonGroup2);
- depth_12->setObjectName(QString::fromUtf8("depth_12"));
+ depth_12->setObjectName("depth_12");
vboxLayout2->addWidget(depth_12);
depth_15 = new QRadioButton(ButtonGroup2);
- depth_15->setObjectName(QString::fromUtf8("depth_15"));
+ depth_15->setObjectName("depth_15");
vboxLayout2->addWidget(depth_15);
depth_16 = new QRadioButton(ButtonGroup2);
- depth_16->setObjectName(QString::fromUtf8("depth_16"));
+ depth_16->setObjectName("depth_16");
vboxLayout2->addWidget(depth_16);
depth_18 = new QRadioButton(ButtonGroup2);
- depth_18->setObjectName(QString::fromUtf8("depth_18"));
+ depth_18->setObjectName("depth_18");
vboxLayout2->addWidget(depth_18);
depth_24 = new QRadioButton(ButtonGroup2);
- depth_24->setObjectName(QString::fromUtf8("depth_24"));
+ depth_24->setObjectName("depth_24");
vboxLayout2->addWidget(depth_24);
depth_32 = new QRadioButton(ButtonGroup2);
- depth_32->setObjectName(QString::fromUtf8("depth_32"));
+ depth_32->setObjectName("depth_32");
vboxLayout2->addWidget(depth_32);
depth_32_argb = new QRadioButton(ButtonGroup2);
- depth_32_argb->setObjectName(QString::fromUtf8("depth_32_argb"));
+ depth_32_argb->setObjectName("depth_32_argb");
vboxLayout2->addWidget(depth_32_argb);
@@ -275,17 +252,17 @@ public:
hboxLayout2 = new QHBoxLayout();
hboxLayout2->setSpacing(6);
- hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
+ hboxLayout2->setObjectName("hboxLayout2");
hboxLayout2->setContentsMargins(0, 0, 0, 0);
TextLabel1_3 = new QLabel(Config);
- TextLabel1_3->setObjectName(QString::fromUtf8("TextLabel1_3"));
+ TextLabel1_3->setObjectName("TextLabel1_3");
hboxLayout2->addWidget(TextLabel1_3);
skin = new QComboBox(Config);
skin->addItem(QString());
- skin->setObjectName(QString::fromUtf8("skin"));
- QSizePolicy sizePolicy2(QSizePolicy::Expanding, QSizePolicy::Fixed);
+ skin->setObjectName("skin");
+ QSizePolicy sizePolicy2(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Fixed);
sizePolicy2.setHorizontalStretch(0);
sizePolicy2.setVerticalStretch(0);
sizePolicy2.setHeightForWidth(skin->sizePolicy().hasHeightForWidth());
@@ -297,21 +274,21 @@ public:
vboxLayout->addLayout(hboxLayout2);
touchScreen = new QCheckBox(Config);
- touchScreen->setObjectName(QString::fromUtf8("touchScreen"));
+ touchScreen->setObjectName("touchScreen");
vboxLayout->addWidget(touchScreen);
lcdScreen = new QCheckBox(Config);
- lcdScreen->setObjectName(QString::fromUtf8("lcdScreen"));
+ lcdScreen->setObjectName("lcdScreen");
vboxLayout->addWidget(lcdScreen);
- spacerItem = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 10, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout->addItem(spacerItem);
TextLabel1 = new QLabel(Config);
- TextLabel1->setObjectName(QString::fromUtf8("TextLabel1"));
+ TextLabel1->setObjectName("TextLabel1");
sizePolicy.setHeightForWidth(TextLabel1->sizePolicy().hasHeightForWidth());
TextLabel1->setSizePolicy(sizePolicy);
TextLabel1->setWordWrap(true);
@@ -319,21 +296,21 @@ public:
vboxLayout->addWidget(TextLabel1);
GroupBox1 = new QGroupBox(Config);
- GroupBox1->setObjectName(QString::fromUtf8("GroupBox1"));
+ GroupBox1->setObjectName("GroupBox1");
gridLayout = new QGridLayout(GroupBox1);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(11, 11, 11, 11);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
gridLayout->setHorizontalSpacing(6);
gridLayout->setVerticalSpacing(6);
gridLayout->setContentsMargins(11, 11, 11, 11);
TextLabel3 = new QLabel(GroupBox1);
- TextLabel3->setObjectName(QString::fromUtf8("TextLabel3"));
+ TextLabel3->setObjectName("TextLabel3");
gridLayout->addWidget(TextLabel3, 6, 0, 1, 1);
bslider = new QSlider(GroupBox1);
- bslider->setObjectName(QString::fromUtf8("bslider"));
+ bslider->setObjectName("bslider");
QPalette palette;
QBrush brush(QColor(128, 128, 128, 255));
brush.setStyle(Qt::SolidPattern);
@@ -416,17 +393,17 @@ public:
gridLayout->addWidget(bslider, 6, 1, 1, 1);
blabel = new QLabel(GroupBox1);
- blabel->setObjectName(QString::fromUtf8("blabel"));
+ blabel->setObjectName("blabel");
gridLayout->addWidget(blabel, 6, 2, 1, 1);
TextLabel2 = new QLabel(GroupBox1);
- TextLabel2->setObjectName(QString::fromUtf8("TextLabel2"));
+ TextLabel2->setObjectName("TextLabel2");
gridLayout->addWidget(TextLabel2, 4, 0, 1, 1);
gslider = new QSlider(GroupBox1);
- gslider->setObjectName(QString::fromUtf8("gslider"));
+ gslider->setObjectName("gslider");
QPalette palette1;
palette1.setBrush(QPalette::Active, QPalette::WindowText, brush);
QBrush brush11(QColor(0, 255, 0, 255));
@@ -497,22 +474,22 @@ public:
gridLayout->addWidget(gslider, 4, 1, 1, 1);
glabel = new QLabel(GroupBox1);
- glabel->setObjectName(QString::fromUtf8("glabel"));
+ glabel->setObjectName("glabel");
gridLayout->addWidget(glabel, 4, 2, 1, 1);
TextLabel7 = new QLabel(GroupBox1);
- TextLabel7->setObjectName(QString::fromUtf8("TextLabel7"));
+ TextLabel7->setObjectName("TextLabel7");
gridLayout->addWidget(TextLabel7, 0, 0, 1, 1);
TextLabel8 = new QLabel(GroupBox1);
- TextLabel8->setObjectName(QString::fromUtf8("TextLabel8"));
+ TextLabel8->setObjectName("TextLabel8");
gridLayout->addWidget(TextLabel8, 0, 2, 1, 1);
gammaslider = new QSlider(GroupBox1);
- gammaslider->setObjectName(QString::fromUtf8("gammaslider"));
+ gammaslider->setObjectName("gammaslider");
QPalette palette2;
palette2.setBrush(QPalette::Active, QPalette::WindowText, brush);
palette2.setBrush(QPalette::Active, QPalette::Button, brush7);
@@ -577,17 +554,17 @@ public:
gridLayout->addWidget(gammaslider, 0, 1, 1, 1);
TextLabel1_2 = new QLabel(GroupBox1);
- TextLabel1_2->setObjectName(QString::fromUtf8("TextLabel1_2"));
+ TextLabel1_2->setObjectName("TextLabel1_2");
gridLayout->addWidget(TextLabel1_2, 2, 0, 1, 1);
rlabel = new QLabel(GroupBox1);
- rlabel->setObjectName(QString::fromUtf8("rlabel"));
+ rlabel->setObjectName("rlabel");
gridLayout->addWidget(rlabel, 2, 2, 1, 1);
rslider = new QSlider(GroupBox1);
- rslider->setObjectName(QString::fromUtf8("rslider"));
+ rslider->setObjectName("rslider");
QPalette palette3;
palette3.setBrush(QPalette::Active, QPalette::WindowText, brush);
QBrush brush18(QColor(255, 0, 0, 255));
@@ -658,12 +635,12 @@ public:
gridLayout->addWidget(rslider, 2, 1, 1, 1);
PushButton3 = new QPushButton(GroupBox1);
- PushButton3->setObjectName(QString::fromUtf8("PushButton3"));
+ PushButton3->setObjectName("PushButton3");
gridLayout->addWidget(PushButton3, 8, 0, 1, 3);
MyCustomWidget1 = new GammaView(GroupBox1);
- MyCustomWidget1->setObjectName(QString::fromUtf8("MyCustomWidget1"));
+ MyCustomWidget1->setObjectName("MyCustomWidget1");
gridLayout->addWidget(MyCustomWidget1, 0, 3, 9, 1);
@@ -672,20 +649,20 @@ public:
hboxLayout3 = new QHBoxLayout();
hboxLayout3->setSpacing(6);
- hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3"));
+ hboxLayout3->setObjectName("hboxLayout3");
hboxLayout3->setContentsMargins(0, 0, 0, 0);
- spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout3->addItem(spacerItem1);
buttonOk = new QPushButton(Config);
- buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
+ buttonOk->setObjectName("buttonOk");
buttonOk->setAutoDefault(true);
hboxLayout3->addWidget(buttonOk);
buttonCancel = new QPushButton(Config);
- buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
+ buttonCancel->setObjectName("buttonCancel");
buttonCancel->setAutoDefault(true);
hboxLayout3->addWidget(buttonCancel);
diff --git a/tests/auto/tools/uic/baseline/config.ui.py b/tests/auto/tools/uic/baseline/config.ui.py
index 90cb3bbdbc..e591058a49 100644
--- a/tests/auto/tools/uic/baseline/config.ui.py
+++ b/tests/auto/tools/uic/baseline/config.ui.py
@@ -1,32 +1,9 @@
# -*- coding: utf-8 -*-
-#####################################################################
-##
-## 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$
-##
-#####################################################################
+#
+# Copyright (C) 2016 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#
################################################################################
## Form generated from reading UI file 'config.ui'
@@ -67,7 +44,7 @@ class Ui_Config(object):
self.hboxLayout.setContentsMargins(0, 0, 0, 0)
self.ButtonGroup1 = QGroupBox(Config)
self.ButtonGroup1.setObjectName(u"ButtonGroup1")
- sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred)
+ sizePolicy = QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.ButtonGroup1.sizePolicy().hasHeightForWidth())
@@ -113,7 +90,7 @@ class Ui_Config(object):
self.hboxLayout1.setContentsMargins(0, 0, 0, 0)
self.size_custom = QRadioButton(self.ButtonGroup1)
self.size_custom.setObjectName(u"size_custom")
- sizePolicy1 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
+ sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Fixed)
sizePolicy1.setHorizontalStretch(0)
sizePolicy1.setVerticalStretch(0)
sizePolicy1.setHeightForWidth(self.size_custom.sizePolicy().hasHeightForWidth())
@@ -220,7 +197,7 @@ class Ui_Config(object):
self.skin = QComboBox(Config)
self.skin.addItem("")
self.skin.setObjectName(u"skin")
- sizePolicy2 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
+ sizePolicy2 = QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Fixed)
sizePolicy2.setHorizontalStretch(0)
sizePolicy2.setVerticalStretch(0)
sizePolicy2.setHeightForWidth(self.skin.sizePolicy().hasHeightForWidth())
@@ -241,7 +218,7 @@ class Ui_Config(object):
self.vboxLayout.addWidget(self.lcdScreen)
- self.spacerItem = QSpacerItem(20, 10, QSizePolicy.Minimum, QSizePolicy.Expanding)
+ self.spacerItem = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.vboxLayout.addItem(self.spacerItem)
@@ -609,7 +586,7 @@ class Ui_Config(object):
self.hboxLayout3.setSpacing(6)
self.hboxLayout3.setObjectName(u"hboxLayout3")
self.hboxLayout3.setContentsMargins(0, 0, 0, 0)
- self.spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
+ self.spacerItem1 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.hboxLayout3.addItem(self.spacerItem1)
diff --git a/tests/auto/tools/uic/baseline/connectdialog.ui.h b/tests/auto/tools/uic/baseline/connectdialog.ui.h
index a982365478..e3616cae2c 100644
--- a/tests/auto/tools/uic/baseline/connectdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/connectdialog.ui.h
@@ -47,28 +47,28 @@ public:
void setupUi(QDialog *ConnectDialog)
{
if (ConnectDialog->objectName().isEmpty())
- ConnectDialog->setObjectName(QString::fromUtf8("ConnectDialog"));
+ ConnectDialog->setObjectName("ConnectDialog");
ConnectDialog->resize(585, 361);
gridLayout = new QGridLayout(ConnectDialog);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
signalGroupBox = new QGroupBox(ConnectDialog);
- signalGroupBox->setObjectName(QString::fromUtf8("signalGroupBox"));
+ signalGroupBox->setObjectName("signalGroupBox");
vboxLayout = new QVBoxLayout(signalGroupBox);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
signalList = new QListWidget(signalGroupBox);
- signalList->setObjectName(QString::fromUtf8("signalList"));
+ signalList->setObjectName("signalList");
signalList->setTextElideMode(Qt::ElideMiddle);
vboxLayout->addWidget(signalList);
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
editSignalsButton = new QToolButton(signalGroupBox);
- editSignalsButton->setObjectName(QString::fromUtf8("editSignalsButton"));
+ editSignalsButton->setObjectName("editSignalsButton");
hboxLayout->addWidget(editSignalsButton);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
@@ -79,23 +79,23 @@ public:
gridLayout->addWidget(signalGroupBox, 0, 0, 1, 2);
slotGroupBox = new QGroupBox(ConnectDialog);
- slotGroupBox->setObjectName(QString::fromUtf8("slotGroupBox"));
+ slotGroupBox->setObjectName("slotGroupBox");
vboxLayout1 = new QVBoxLayout(slotGroupBox);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
slotList = new QListWidget(slotGroupBox);
- slotList->setObjectName(QString::fromUtf8("slotList"));
+ slotList->setObjectName("slotList");
slotList->setTextElideMode(Qt::ElideMiddle);
vboxLayout1->addWidget(slotList);
hboxLayout1 = new QHBoxLayout();
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
editSlotsButton = new QToolButton(slotGroupBox);
- editSlotsButton->setObjectName(QString::fromUtf8("editSlotsButton"));
+ editSlotsButton->setObjectName("editSlotsButton");
hboxLayout1->addWidget(editSlotsButton);
- spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout1->addItem(spacerItem1);
@@ -106,12 +106,12 @@ public:
gridLayout->addWidget(slotGroupBox, 0, 2, 1, 1);
showAllCheckBox = new QCheckBox(ConnectDialog);
- showAllCheckBox->setObjectName(QString::fromUtf8("showAllCheckBox"));
+ showAllCheckBox->setObjectName("showAllCheckBox");
gridLayout->addWidget(showAllCheckBox, 1, 0, 1, 1);
buttonBox = new QDialogButtonBox(ConnectDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/controller.ui.h b/tests/auto/tools/uic/baseline/controller.ui.h
index 0d0e47ef6a..6cc19409b3 100644
--- a/tests/auto/tools/uic/baseline/controller.ui.h
+++ b/tests/auto/tools/uic/baseline/controller.ui.h
@@ -31,7 +31,7 @@ public:
void setupUi(QWidget *Controller)
{
if (Controller->objectName().isEmpty())
- Controller->setObjectName(QString::fromUtf8("Controller"));
+ Controller->setObjectName("Controller");
Controller->resize(255, 111);
gridLayout = new QGridLayout(Controller);
#ifndef Q_OS_MAC
@@ -40,30 +40,30 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(9, 9, 9, 9);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(Controller);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
label->setAlignment(Qt::AlignCenter);
gridLayout->addWidget(label, 1, 1, 1, 1);
decelerate = new QPushButton(Controller);
- decelerate->setObjectName(QString::fromUtf8("decelerate"));
+ decelerate->setObjectName("decelerate");
gridLayout->addWidget(decelerate, 2, 1, 1, 1);
accelerate = new QPushButton(Controller);
- accelerate->setObjectName(QString::fromUtf8("accelerate"));
+ accelerate->setObjectName("accelerate");
gridLayout->addWidget(accelerate, 0, 1, 1, 1);
right = new QPushButton(Controller);
- right->setObjectName(QString::fromUtf8("right"));
+ right->setObjectName("right");
gridLayout->addWidget(right, 1, 2, 1, 1);
left = new QPushButton(Controller);
- left->setObjectName(QString::fromUtf8("left"));
+ left->setObjectName("left");
gridLayout->addWidget(left, 1, 0, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/cookies.ui.h b/tests/auto/tools/uic/baseline/cookies.ui.h
index e92992c124..b43b4d5425 100644
--- a/tests/auto/tools/uic/baseline/cookies.ui.h
+++ b/tests/auto/tools/uic/baseline/cookies.ui.h
@@ -40,42 +40,42 @@ public:
void setupUi(QDialog *CookiesDialog)
{
if (CookiesDialog->objectName().isEmpty())
- CookiesDialog->setObjectName(QString::fromUtf8("CookiesDialog"));
+ CookiesDialog->setObjectName("CookiesDialog");
CookiesDialog->resize(550, 370);
gridLayout = new QGridLayout(CookiesDialog);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
- spacerItem = new QSpacerItem(252, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ gridLayout->setObjectName("gridLayout");
+ spacerItem = new QSpacerItem(252, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem, 0, 0, 1, 1);
search = new SearchLineEdit(CookiesDialog);
- search->setObjectName(QString::fromUtf8("search"));
+ search->setObjectName("search");
gridLayout->addWidget(search, 0, 1, 1, 1);
cookiesTable = new EditTableView(CookiesDialog);
- cookiesTable->setObjectName(QString::fromUtf8("cookiesTable"));
+ cookiesTable->setObjectName("cookiesTable");
gridLayout->addWidget(cookiesTable, 1, 0, 1, 2);
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
removeButton = new QPushButton(CookiesDialog);
- removeButton->setObjectName(QString::fromUtf8("removeButton"));
+ removeButton->setObjectName("removeButton");
hboxLayout->addWidget(removeButton);
removeAllButton = new QPushButton(CookiesDialog);
- removeAllButton->setObjectName(QString::fromUtf8("removeAllButton"));
+ removeAllButton->setObjectName("removeAllButton");
hboxLayout->addWidget(removeAllButton);
- spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem1);
buttonBox = new QDialogButtonBox(CookiesDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setStandardButtons(QDialogButtonBox::Ok);
hboxLayout->addWidget(buttonBox);
diff --git a/tests/auto/tools/uic/baseline/cookiesexceptions.ui.h b/tests/auto/tools/uic/baseline/cookiesexceptions.ui.h
index 39650fc192..913bd7075d 100644
--- a/tests/auto/tools/uic/baseline/cookiesexceptions.ui.h
+++ b/tests/auto/tools/uic/baseline/cookiesexceptions.ui.h
@@ -55,23 +55,23 @@ public:
void setupUi(QDialog *CookiesExceptionsDialog)
{
if (CookiesExceptionsDialog->objectName().isEmpty())
- CookiesExceptionsDialog->setObjectName(QString::fromUtf8("CookiesExceptionsDialog"));
+ CookiesExceptionsDialog->setObjectName("CookiesExceptionsDialog");
CookiesExceptionsDialog->resize(466, 446);
vboxLayout = new QVBoxLayout(CookiesExceptionsDialog);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
newExceptionGroupBox = new QGroupBox(CookiesExceptionsDialog);
- newExceptionGroupBox->setObjectName(QString::fromUtf8("newExceptionGroupBox"));
+ newExceptionGroupBox->setObjectName("newExceptionGroupBox");
gridLayout = new QGridLayout(newExceptionGroupBox);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
label = new QLabel(newExceptionGroupBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
hboxLayout->addWidget(label);
domainLineEdit = new QLineEdit(newExceptionGroupBox);
- domainLineEdit->setObjectName(QString::fromUtf8("domainLineEdit"));
+ domainLineEdit->setObjectName("domainLineEdit");
hboxLayout->addWidget(domainLineEdit);
@@ -79,25 +79,25 @@ public:
gridLayout->addLayout(hboxLayout, 0, 0, 1, 1);
hboxLayout1 = new QHBoxLayout();
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
- spacerItem = new QSpacerItem(81, 25, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ hboxLayout1->setObjectName("hboxLayout1");
+ spacerItem = new QSpacerItem(81, 25, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout1->addItem(spacerItem);
blockButton = new QPushButton(newExceptionGroupBox);
- blockButton->setObjectName(QString::fromUtf8("blockButton"));
+ blockButton->setObjectName("blockButton");
blockButton->setEnabled(false);
hboxLayout1->addWidget(blockButton);
allowForSessionButton = new QPushButton(newExceptionGroupBox);
- allowForSessionButton->setObjectName(QString::fromUtf8("allowForSessionButton"));
+ allowForSessionButton->setObjectName("allowForSessionButton");
allowForSessionButton->setEnabled(false);
hboxLayout1->addWidget(allowForSessionButton);
allowButton = new QPushButton(newExceptionGroupBox);
- allowButton->setObjectName(QString::fromUtf8("allowButton"));
+ allowButton->setObjectName("allowButton");
allowButton->setEnabled(false);
hboxLayout1->addWidget(allowButton);
@@ -109,34 +109,34 @@ public:
vboxLayout->addWidget(newExceptionGroupBox);
ExceptionsGroupBox = new QGroupBox(CookiesExceptionsDialog);
- ExceptionsGroupBox->setObjectName(QString::fromUtf8("ExceptionsGroupBox"));
+ ExceptionsGroupBox->setObjectName("ExceptionsGroupBox");
gridLayout1 = new QGridLayout(ExceptionsGroupBox);
- gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
- spacerItem1 = new QSpacerItem(252, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ gridLayout1->setObjectName("gridLayout1");
+ spacerItem1 = new QSpacerItem(252, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout1->addItem(spacerItem1, 0, 0, 1, 3);
search = new SearchLineEdit(ExceptionsGroupBox);
- search->setObjectName(QString::fromUtf8("search"));
+ search->setObjectName("search");
gridLayout1->addWidget(search, 0, 3, 1, 1);
exceptionTable = new EditTableView(ExceptionsGroupBox);
- exceptionTable->setObjectName(QString::fromUtf8("exceptionTable"));
+ exceptionTable->setObjectName("exceptionTable");
gridLayout1->addWidget(exceptionTable, 1, 0, 1, 4);
removeButton = new QPushButton(ExceptionsGroupBox);
- removeButton->setObjectName(QString::fromUtf8("removeButton"));
+ removeButton->setObjectName("removeButton");
gridLayout1->addWidget(removeButton, 2, 0, 1, 1);
removeAllButton = new QPushButton(ExceptionsGroupBox);
- removeAllButton->setObjectName(QString::fromUtf8("removeAllButton"));
+ removeAllButton->setObjectName("removeAllButton");
gridLayout1->addWidget(removeAllButton, 2, 1, 1, 1);
- spacerItem2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem2 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout1->addItem(spacerItem2, 2, 2, 1, 2);
@@ -144,7 +144,7 @@ public:
vboxLayout->addWidget(ExceptionsGroupBox);
buttonBox = new QDialogButtonBox(CookiesExceptionsDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/default.ui.h b/tests/auto/tools/uic/baseline/default.ui.h
index 12374eed55..821273039c 100644
--- a/tests/auto/tools/uic/baseline/default.ui.h
+++ b/tests/auto/tools/uic/baseline/default.ui.h
@@ -64,18 +64,18 @@ public:
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
- MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
+ MainWindow->setObjectName("MainWindow");
MainWindow->resize(388, 413);
exitAction = new QAction(MainWindow);
- exitAction->setObjectName(QString::fromUtf8("exitAction"));
+ exitAction->setObjectName("exitAction");
aboutQtAction = new QAction(MainWindow);
- aboutQtAction->setObjectName(QString::fromUtf8("aboutQtAction"));
+ aboutQtAction->setObjectName("aboutQtAction");
editStyleAction = new QAction(MainWindow);
- editStyleAction->setObjectName(QString::fromUtf8("editStyleAction"));
+ editStyleAction->setObjectName("editStyleAction");
aboutAction = new QAction(MainWindow);
- aboutAction->setObjectName(QString::fromUtf8("aboutAction"));
+ aboutAction->setObjectName("aboutAction");
centralwidget = new QWidget(MainWindow);
- centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
+ centralwidget->setObjectName("centralwidget");
gridLayout = new QGridLayout(centralwidget);
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
@@ -83,9 +83,9 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(9, 9, 9, 9);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
nameLabel = new QLabel(centralwidget);
- nameLabel->setObjectName(QString::fromUtf8("nameLabel"));
+ nameLabel->setObjectName("nameLabel");
gridLayout->addWidget(nameLabel, 0, 0, 1, 1);
@@ -94,72 +94,72 @@ public:
nameCombo->addItem(QString());
nameCombo->addItem(QString());
nameCombo->addItem(QString());
- nameCombo->setObjectName(QString::fromUtf8("nameCombo"));
+ nameCombo->setObjectName("nameCombo");
nameCombo->setEditable(true);
gridLayout->addWidget(nameCombo, 0, 1, 1, 3);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem, 1, 3, 1, 1);
femaleRadioButton = new QRadioButton(centralwidget);
- femaleRadioButton->setObjectName(QString::fromUtf8("femaleRadioButton"));
+ femaleRadioButton->setObjectName("femaleRadioButton");
gridLayout->addWidget(femaleRadioButton, 1, 2, 1, 1);
agreeCheckBox = new QCheckBox(centralwidget);
- agreeCheckBox->setObjectName(QString::fromUtf8("agreeCheckBox"));
+ agreeCheckBox->setObjectName("agreeCheckBox");
gridLayout->addWidget(agreeCheckBox, 6, 0, 1, 4);
maleRadioButton = new QRadioButton(centralwidget);
- maleRadioButton->setObjectName(QString::fromUtf8("maleRadioButton"));
+ maleRadioButton->setObjectName("maleRadioButton");
gridLayout->addWidget(maleRadioButton, 1, 1, 1, 1);
genderLabel = new QLabel(centralwidget);
- genderLabel->setObjectName(QString::fromUtf8("genderLabel"));
+ genderLabel->setObjectName("genderLabel");
gridLayout->addWidget(genderLabel, 1, 0, 1, 1);
ageSpinBox = new QSpinBox(centralwidget);
- ageSpinBox->setObjectName(QString::fromUtf8("ageSpinBox"));
+ ageSpinBox->setObjectName("ageSpinBox");
ageSpinBox->setMinimum(12);
ageSpinBox->setValue(22);
gridLayout->addWidget(ageSpinBox, 2, 1, 1, 3);
buttonBox = new QDialogButtonBox(centralwidget);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
gridLayout->addWidget(buttonBox, 7, 2, 1, 2);
ageLabel = new QLabel(centralwidget);
- ageLabel->setObjectName(QString::fromUtf8("ageLabel"));
+ ageLabel->setObjectName("ageLabel");
gridLayout->addWidget(ageLabel, 2, 0, 1, 1);
passwordLabel = new QLabel(centralwidget);
- passwordLabel->setObjectName(QString::fromUtf8("passwordLabel"));
+ passwordLabel->setObjectName("passwordLabel");
gridLayout->addWidget(passwordLabel, 3, 0, 1, 1);
passwordEdit = new QLineEdit(centralwidget);
- passwordEdit->setObjectName(QString::fromUtf8("passwordEdit"));
+ passwordEdit->setObjectName("passwordEdit");
passwordEdit->setEchoMode(QLineEdit::Password);
gridLayout->addWidget(passwordEdit, 3, 1, 1, 3);
label = new QLabel(centralwidget);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 5, 0, 1, 1);
countryLabel = new QLabel(centralwidget);
- countryLabel->setObjectName(QString::fromUtf8("countryLabel"));
+ countryLabel->setObjectName("countryLabel");
gridLayout->addWidget(countryLabel, 4, 0, 1, 1);
@@ -167,7 +167,7 @@ public:
new QListWidgetItem(professionList);
new QListWidgetItem(professionList);
new QListWidgetItem(professionList);
- professionList->setObjectName(QString::fromUtf8("professionList"));
+ professionList->setObjectName("professionList");
gridLayout->addWidget(professionList, 5, 1, 1, 3);
@@ -177,21 +177,21 @@ public:
countryCombo->addItem(QString());
countryCombo->addItem(QString());
countryCombo->addItem(QString());
- countryCombo->setObjectName(QString::fromUtf8("countryCombo"));
+ countryCombo->setObjectName("countryCombo");
gridLayout->addWidget(countryCombo, 4, 1, 1, 3);
MainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(MainWindow);
- menubar->setObjectName(QString::fromUtf8("menubar"));
+ menubar->setObjectName("menubar");
menubar->setGeometry(QRect(0, 0, 388, 21));
menu_File = new QMenu(menubar);
- menu_File->setObjectName(QString::fromUtf8("menu_File"));
+ menu_File->setObjectName("menu_File");
menu_Help = new QMenu(menubar);
- menu_Help->setObjectName(QString::fromUtf8("menu_Help"));
+ menu_Help->setObjectName("menu_Help");
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
- statusbar->setObjectName(QString::fromUtf8("statusbar"));
+ statusbar->setObjectName("statusbar");
MainWindow->setStatusBar(statusbar);
#if QT_CONFIG(shortcut)
nameLabel->setBuddy(nameCombo);
diff --git a/tests/auto/tools/uic/baseline/dialog.ui.h b/tests/auto/tools/uic/baseline/dialog.ui.h
index bdc0f159da..1e886e40d9 100644
--- a/tests/auto/tools/uic/baseline/dialog.ui.h
+++ b/tests/auto/tools/uic/baseline/dialog.ui.h
@@ -29,24 +29,24 @@ public:
void setupUi(QDialog *Dialog)
{
if (Dialog->objectName().isEmpty())
- Dialog->setObjectName(QString::fromUtf8("Dialog"));
+ Dialog->setObjectName("Dialog");
Dialog->resize(451, 322);
gridLayout = new QGridLayout(Dialog);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
loadFromFileButton = new QPushButton(Dialog);
- loadFromFileButton->setObjectName(QString::fromUtf8("loadFromFileButton"));
+ loadFromFileButton->setObjectName("loadFromFileButton");
gridLayout->addWidget(loadFromFileButton, 0, 0, 1, 1);
label = new QLabel(Dialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
label->setAlignment(Qt::AlignCenter);
label->setWordWrap(true);
gridLayout->addWidget(label, 1, 0, 1, 1);
loadFromSharedMemoryButton = new QPushButton(Dialog);
- loadFromSharedMemoryButton->setObjectName(QString::fromUtf8("loadFromSharedMemoryButton"));
+ loadFromSharedMemoryButton->setObjectName("loadFromSharedMemoryButton");
gridLayout->addWidget(loadFromSharedMemoryButton, 2, 0, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/downloaditem.ui.h b/tests/auto/tools/uic/baseline/downloaditem.ui.h
index 66dc01cfa6..6698813fb6 100644
--- a/tests/auto/tools/uic/baseline/downloaditem.ui.h
+++ b/tests/auto/tools/uic/baseline/downloaditem.ui.h
@@ -41,14 +41,14 @@ public:
void setupUi(QWidget *DownloadItem)
{
if (DownloadItem->objectName().isEmpty())
- DownloadItem->setObjectName(QString::fromUtf8("DownloadItem"));
+ DownloadItem->setObjectName("DownloadItem");
DownloadItem->resize(423, 110);
horizontalLayout = new QHBoxLayout(DownloadItem);
horizontalLayout->setContentsMargins(0, 0, 0, 0);
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
fileIcon = new QLabel(DownloadItem);
- fileIcon->setObjectName(QString::fromUtf8("fileIcon"));
- QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ fileIcon->setObjectName("fileIcon");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Minimum);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(fileIcon->sizePolicy().hasHeightForWidth());
@@ -57,10 +57,10 @@ public:
horizontalLayout->addWidget(fileIcon);
verticalLayout_2 = new QVBoxLayout();
- verticalLayout_2->setObjectName(QString::fromUtf8("verticalLayout_2"));
+ verticalLayout_2->setObjectName("verticalLayout_2");
fileNameLabel = new SqueezeLabel(DownloadItem);
- fileNameLabel->setObjectName(QString::fromUtf8("fileNameLabel"));
- QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ fileNameLabel->setObjectName("fileNameLabel");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Preferred);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(fileNameLabel->sizePolicy().hasHeightForWidth());
@@ -69,14 +69,14 @@ public:
verticalLayout_2->addWidget(fileNameLabel);
progressBar = new QProgressBar(DownloadItem);
- progressBar->setObjectName(QString::fromUtf8("progressBar"));
+ progressBar->setObjectName("progressBar");
progressBar->setValue(0);
verticalLayout_2->addWidget(progressBar);
downloadInfoLabel = new SqueezeLabel(DownloadItem);
- downloadInfoLabel->setObjectName(QString::fromUtf8("downloadInfoLabel"));
- QSizePolicy sizePolicy2(QSizePolicy::Minimum, QSizePolicy::Preferred);
+ downloadInfoLabel->setObjectName("downloadInfoLabel");
+ QSizePolicy sizePolicy2(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Preferred);
sizePolicy2.setHorizontalStretch(0);
sizePolicy2.setVerticalStretch(0);
sizePolicy2.setHeightForWidth(downloadInfoLabel->sizePolicy().hasHeightForWidth());
@@ -88,28 +88,28 @@ public:
horizontalLayout->addLayout(verticalLayout_2);
verticalLayout = new QVBoxLayout();
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
- verticalSpacer = new QSpacerItem(17, 1, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ verticalLayout->setObjectName("verticalLayout");
+ verticalSpacer = new QSpacerItem(17, 1, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
verticalLayout->addItem(verticalSpacer);
tryAgainButton = new QPushButton(DownloadItem);
- tryAgainButton->setObjectName(QString::fromUtf8("tryAgainButton"));
+ tryAgainButton->setObjectName("tryAgainButton");
tryAgainButton->setEnabled(false);
verticalLayout->addWidget(tryAgainButton);
stopButton = new QPushButton(DownloadItem);
- stopButton->setObjectName(QString::fromUtf8("stopButton"));
+ stopButton->setObjectName("stopButton");
verticalLayout->addWidget(stopButton);
openButton = new QPushButton(DownloadItem);
- openButton->setObjectName(QString::fromUtf8("openButton"));
+ openButton->setObjectName("openButton");
verticalLayout->addWidget(openButton);
- verticalSpacer_2 = new QSpacerItem(17, 5, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ verticalSpacer_2 = new QSpacerItem(17, 5, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
verticalLayout->addItem(verticalSpacer_2);
diff --git a/tests/auto/tools/uic/baseline/downloads.ui.h b/tests/auto/tools/uic/baseline/downloads.ui.h
index 94654ffc2e..0d6fc5a263 100644
--- a/tests/auto/tools/uic/baseline/downloads.ui.h
+++ b/tests/auto/tools/uic/baseline/downloads.ui.h
@@ -36,26 +36,26 @@ public:
void setupUi(QDialog *DownloadDialog)
{
if (DownloadDialog->objectName().isEmpty())
- DownloadDialog->setObjectName(QString::fromUtf8("DownloadDialog"));
+ DownloadDialog->setObjectName("DownloadDialog");
DownloadDialog->resize(332, 252);
gridLayout = new QGridLayout(DownloadDialog);
gridLayout->setSpacing(0);
gridLayout->setContentsMargins(0, 0, 0, 0);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
downloadsView = new EditTableView(DownloadDialog);
- downloadsView->setObjectName(QString::fromUtf8("downloadsView"));
+ downloadsView->setObjectName("downloadsView");
gridLayout->addWidget(downloadsView, 0, 0, 1, 3);
horizontalLayout = new QHBoxLayout();
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
cleanupButton = new QPushButton(DownloadDialog);
- cleanupButton->setObjectName(QString::fromUtf8("cleanupButton"));
+ cleanupButton->setObjectName("cleanupButton");
cleanupButton->setEnabled(false);
horizontalLayout->addWidget(cleanupButton);
- spacerItem = new QSpacerItem(58, 24, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(58, 24, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout->addItem(spacerItem);
@@ -63,11 +63,11 @@ public:
gridLayout->addLayout(horizontalLayout, 1, 0, 1, 1);
itemCount = new QLabel(DownloadDialog);
- itemCount->setObjectName(QString::fromUtf8("itemCount"));
+ itemCount->setObjectName("itemCount");
gridLayout->addWidget(itemCount, 1, 1, 1, 1);
- horizontalSpacer = new QSpacerItem(148, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer = new QSpacerItem(148, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(horizontalSpacer, 1, 2, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/embeddeddialog.ui.h b/tests/auto/tools/uic/baseline/embeddeddialog.ui.h
index 787063ff0e..2188d8ebf1 100644
--- a/tests/auto/tools/uic/baseline/embeddeddialog.ui.h
+++ b/tests/auto/tools/uic/baseline/embeddeddialog.ui.h
@@ -36,49 +36,49 @@ public:
void setupUi(QDialog *embeddedDialog)
{
if (embeddedDialog->objectName().isEmpty())
- embeddedDialog->setObjectName(QString::fromUtf8("embeddedDialog"));
+ embeddedDialog->setObjectName("embeddedDialog");
embeddedDialog->resize(407, 134);
formLayout = new QFormLayout(embeddedDialog);
- formLayout->setObjectName(QString::fromUtf8("formLayout"));
+ formLayout->setObjectName("formLayout");
label = new QLabel(embeddedDialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
formLayout->setWidget(0, QFormLayout::LabelRole, label);
layoutDirection = new QComboBox(embeddedDialog);
layoutDirection->addItem(QString());
layoutDirection->addItem(QString());
- layoutDirection->setObjectName(QString::fromUtf8("layoutDirection"));
+ layoutDirection->setObjectName("layoutDirection");
formLayout->setWidget(0, QFormLayout::FieldRole, layoutDirection);
label_2 = new QLabel(embeddedDialog);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
formLayout->setWidget(1, QFormLayout::LabelRole, label_2);
fontComboBox = new QFontComboBox(embeddedDialog);
- fontComboBox->setObjectName(QString::fromUtf8("fontComboBox"));
+ fontComboBox->setObjectName("fontComboBox");
formLayout->setWidget(1, QFormLayout::FieldRole, fontComboBox);
label_3 = new QLabel(embeddedDialog);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
formLayout->setWidget(2, QFormLayout::LabelRole, label_3);
style = new QComboBox(embeddedDialog);
- style->setObjectName(QString::fromUtf8("style"));
+ style->setObjectName("style");
formLayout->setWidget(2, QFormLayout::FieldRole, style);
label_4 = new QLabel(embeddedDialog);
- label_4->setObjectName(QString::fromUtf8("label_4"));
+ label_4->setObjectName("label_4");
formLayout->setWidget(3, QFormLayout::LabelRole, label_4);
spacing = new QSlider(embeddedDialog);
- spacing->setObjectName(QString::fromUtf8("spacing"));
+ spacing->setObjectName("spacing");
spacing->setOrientation(Qt::Horizontal);
formLayout->setWidget(3, QFormLayout::FieldRole, spacing);
diff --git a/tests/auto/tools/uic/baseline/enumnostdset.ui.h b/tests/auto/tools/uic/baseline/enumnostdset.ui.h
index 54ec7c4161..f0e65299cd 100644
--- a/tests/auto/tools/uic/baseline/enumnostdset.ui.h
+++ b/tests/auto/tools/uic/baseline/enumnostdset.ui.h
@@ -24,10 +24,10 @@ public:
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
- Form->setObjectName(QString::fromUtf8("Form"));
+ Form->setObjectName("Form");
Form->resize(400, 300);
worldTimeClock = new WorldTimeClock(Form);
- worldTimeClock->setObjectName(QString::fromUtf8("worldTimeClock"));
+ worldTimeClock->setObjectName("worldTimeClock");
worldTimeClock->setGeometry(QRect(100, 100, 100, 100));
worldTimeClock->setProperty("penStyle", QVariant::fromValue(Qt::DashDotLine));
diff --git a/tests/auto/tools/uic/baseline/filespage.ui.h b/tests/auto/tools/uic/baseline/filespage.ui.h
index fb2402cd74..d567e4d150 100644
--- a/tests/auto/tools/uic/baseline/filespage.ui.h
+++ b/tests/auto/tools/uic/baseline/filespage.ui.h
@@ -34,24 +34,24 @@ public:
void setupUi(QWidget *FilesPage)
{
if (FilesPage->objectName().isEmpty())
- FilesPage->setObjectName(QString::fromUtf8("FilesPage"));
+ FilesPage->setObjectName("FilesPage");
FilesPage->resize(417, 242);
gridLayout = new QGridLayout(FilesPage);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
fileLabel = new QLabel(FilesPage);
- fileLabel->setObjectName(QString::fromUtf8("fileLabel"));
+ fileLabel->setObjectName("fileLabel");
fileLabel->setWordWrap(true);
gridLayout->addWidget(fileLabel, 0, 0, 1, 2);
fileListWidget = new QListWidget(FilesPage);
- fileListWidget->setObjectName(QString::fromUtf8("fileListWidget"));
+ fileListWidget->setObjectName("fileListWidget");
gridLayout->addWidget(fileListWidget, 1, 0, 3, 1);
removeButton = new QPushButton(FilesPage);
- removeButton->setObjectName(QString::fromUtf8("removeButton"));
- QSizePolicy sizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed);
+ removeButton->setObjectName("removeButton");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Maximum, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(removeButton->sizePolicy().hasHeightForWidth());
@@ -60,15 +60,15 @@ public:
gridLayout->addWidget(removeButton, 1, 1, 1, 1);
removeAllButton = new QPushButton(FilesPage);
- removeAllButton->setObjectName(QString::fromUtf8("removeAllButton"));
+ removeAllButton->setObjectName("removeAllButton");
gridLayout->addWidget(removeAllButton, 2, 1, 1, 1);
- spacerItem = new QSpacerItem(75, 16, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(75, 16, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem, 3, 1, 1, 1);
- spacerItem1 = new QSpacerItem(20, 31, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem1 = new QSpacerItem(20, 31, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem1, 4, 0, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/filternamedialog.ui.h b/tests/auto/tools/uic/baseline/filternamedialog.ui.h
index 7a6cec820f..e8a73e9607 100644
--- a/tests/auto/tools/uic/baseline/filternamedialog.ui.h
+++ b/tests/auto/tools/uic/baseline/filternamedialog.ui.h
@@ -35,35 +35,35 @@ public:
void setupUi(QDialog *FilterNameDialogClass)
{
if (FilterNameDialogClass->objectName().isEmpty())
- FilterNameDialogClass->setObjectName(QString::fromUtf8("FilterNameDialogClass"));
+ FilterNameDialogClass->setObjectName("FilterNameDialogClass");
FilterNameDialogClass->resize(312, 95);
gridLayout = new QGridLayout(FilterNameDialogClass);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(9, 9, 9, 9);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(FilterNameDialogClass);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 1);
lineEdit = new QLineEdit(FilterNameDialogClass);
- lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
+ lineEdit->setObjectName("lineEdit");
gridLayout->addWidget(lineEdit, 0, 1, 1, 2);
line = new QFrame(FilterNameDialogClass);
- line->setObjectName(QString::fromUtf8("line"));
- line->setFrameShape(QFrame::HLine);
- line->setFrameShadow(QFrame::Sunken);
+ line->setObjectName("line");
+ line->setFrameShape(QFrame::Shape::HLine);
+ line->setFrameShadow(QFrame::Shadow::Sunken);
gridLayout->addWidget(line, 1, 0, 1, 3);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem, 2, 0, 1, 2);
buttonBox = new QDialogButtonBox(FilterNameDialogClass);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/filterpage.ui b/tests/auto/tools/uic/baseline/filterpage.ui
index 7cda3d9bed..4c3ea810b6 100644
--- a/tests/auto/tools/uic/baseline/filterpage.ui
+++ b/tests/auto/tools/uic/baseline/filterpage.ui
@@ -108,7 +108,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/filterpage.ui.h b/tests/auto/tools/uic/baseline/filterpage.ui.h
index d3edb7e7bb..ae7cdc073d 100644
--- a/tests/auto/tools/uic/baseline/filterpage.ui.h
+++ b/tests/auto/tools/uic/baseline/filterpage.ui.h
@@ -42,56 +42,56 @@ public:
void setupUi(QWidget *FilterPage)
{
if (FilterPage->objectName().isEmpty())
- FilterPage->setObjectName(QString::fromUtf8("FilterPage"));
+ FilterPage->setObjectName("FilterPage");
FilterPage->resize(419, 243);
gridLayout = new QGridLayout(FilterPage);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(FilterPage);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 1, 0, 1, 1);
filterLineEdit = new QLineEdit(FilterPage);
- filterLineEdit->setObjectName(QString::fromUtf8("filterLineEdit"));
+ filterLineEdit->setObjectName("filterLineEdit");
gridLayout->addWidget(filterLineEdit, 2, 0, 1, 1);
groupBox = new QGroupBox(FilterPage);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
gridLayout1 = new QGridLayout(groupBox);
- gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+ gridLayout1->setObjectName("gridLayout1");
customFilterWidget = new QTreeWidget(groupBox);
- customFilterWidget->setObjectName(QString::fromUtf8("customFilterWidget"));
+ customFilterWidget->setObjectName("customFilterWidget");
customFilterWidget->setColumnCount(2);
gridLayout1->addWidget(customFilterWidget, 0, 0, 3, 1);
addButton = new QPushButton(groupBox);
- addButton->setObjectName(QString::fromUtf8("addButton"));
+ addButton->setObjectName("addButton");
gridLayout1->addWidget(addButton, 0, 1, 1, 1);
removeButton = new QPushButton(groupBox);
- removeButton->setObjectName(QString::fromUtf8("removeButton"));
+ removeButton->setObjectName("removeButton");
gridLayout1->addWidget(removeButton, 1, 1, 1, 1);
- spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout1->addItem(spacerItem, 2, 1, 1, 1);
gridLayout->addWidget(groupBox, 4, 0, 1, 1);
- spacerItem1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem1 = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem1, 0, 0, 1, 1);
- spacerItem2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem2 = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem2, 5, 0, 1, 1);
- spacerItem3 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ spacerItem3 = new QSpacerItem(20, 10, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem3, 3, 0, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/finddialog.ui b/tests/auto/tools/uic/baseline/finddialog.ui
index 9951e80f17..5faa39b354 100644
--- a/tests/auto/tools/uic/baseline/finddialog.ui
+++ b/tests/auto/tools/uic/baseline/finddialog.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>FindDialog</class>
<widget class="QDialog" name="FindDialog" >
<property name="geometry" >
@@ -206,7 +183,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
+ <enum>QSizePolicy::Policy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
diff --git a/tests/auto/tools/uic/baseline/finddialog.ui.h b/tests/auto/tools/uic/baseline/finddialog.ui.h
index 96c22b7db7..179bf09f86 100644
--- a/tests/auto/tools/uic/baseline/finddialog.ui.h
+++ b/tests/auto/tools/uic/baseline/finddialog.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -77,9 +54,9 @@ public:
void setupUi(QDialog *FindDialog)
{
if (FindDialog->objectName().isEmpty())
- FindDialog->setObjectName(QString::fromUtf8("FindDialog"));
+ FindDialog->setObjectName("FindDialog");
FindDialog->resize(414, 170);
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Maximum);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(FindDialog->sizePolicy().hasHeightForWidth());
@@ -87,22 +64,22 @@ public:
hboxLayout = new QHBoxLayout(FindDialog);
hboxLayout->setSpacing(6);
hboxLayout->setContentsMargins(11, 11, 11, 11);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
vboxLayout = new QVBoxLayout();
vboxLayout->setSpacing(6);
vboxLayout->setContentsMargins(0, 0, 0, 0);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
hboxLayout1 = new QHBoxLayout();
hboxLayout1->setSpacing(6);
hboxLayout1->setContentsMargins(0, 0, 0, 0);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
findWhat = new QLabel(FindDialog);
- findWhat->setObjectName(QString::fromUtf8("findWhat"));
+ findWhat->setObjectName("findWhat");
hboxLayout1->addWidget(findWhat);
led = new QLineEdit(FindDialog);
- led->setObjectName(QString::fromUtf8("led"));
+ led->setObjectName("led");
hboxLayout1->addWidget(led);
@@ -110,36 +87,36 @@ public:
vboxLayout->addLayout(hboxLayout1);
groupBox = new QGroupBox(FindDialog);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
gridLayout = new QGridLayout(groupBox);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(9, 9, 9, 9);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
sourceText = new QCheckBox(groupBox);
- sourceText->setObjectName(QString::fromUtf8("sourceText"));
+ sourceText->setObjectName("sourceText");
sourceText->setChecked(true);
gridLayout->addWidget(sourceText, 1, 0, 1, 1);
translations = new QCheckBox(groupBox);
- translations->setObjectName(QString::fromUtf8("translations"));
+ translations->setObjectName("translations");
translations->setChecked(true);
gridLayout->addWidget(translations, 2, 0, 1, 1);
matchCase = new QCheckBox(groupBox);
- matchCase->setObjectName(QString::fromUtf8("matchCase"));
+ matchCase->setObjectName("matchCase");
gridLayout->addWidget(matchCase, 0, 1, 1, 1);
comments = new QCheckBox(groupBox);
- comments->setObjectName(QString::fromUtf8("comments"));
+ comments->setObjectName("comments");
comments->setChecked(true);
gridLayout->addWidget(comments, 0, 0, 1, 1);
ignoreAccelerators = new QCheckBox(groupBox);
- ignoreAccelerators->setObjectName(QString::fromUtf8("ignoreAccelerators"));
+ ignoreAccelerators->setObjectName("ignoreAccelerators");
ignoreAccelerators->setChecked(true);
gridLayout->addWidget(ignoreAccelerators, 1, 1, 1, 1);
@@ -153,19 +130,19 @@ public:
vboxLayout1 = new QVBoxLayout();
vboxLayout1->setSpacing(6);
vboxLayout1->setContentsMargins(0, 0, 0, 0);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
findNxt = new QPushButton(FindDialog);
- findNxt->setObjectName(QString::fromUtf8("findNxt"));
+ findNxt->setObjectName("findNxt");
findNxt->setFlat(false);
vboxLayout1->addWidget(findNxt);
cancel = new QPushButton(FindDialog);
- cancel->setObjectName(QString::fromUtf8("cancel"));
+ cancel->setObjectName("cancel");
vboxLayout1->addWidget(cancel);
- spacerItem = new QSpacerItem(20, 51, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 51, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout1->addItem(spacerItem);
diff --git a/tests/auto/tools/uic/baseline/form.ui.h b/tests/auto/tools/uic/baseline/form.ui.h
index d39f8c87e3..18e6cbba6f 100644
--- a/tests/auto/tools/uic/baseline/form.ui.h
+++ b/tests/auto/tools/uic/baseline/form.ui.h
@@ -40,7 +40,7 @@ public:
void setupUi(QWidget *WorldTimeForm)
{
if (WorldTimeForm->objectName().isEmpty())
- WorldTimeForm->setObjectName(QString::fromUtf8("WorldTimeForm"));
+ WorldTimeForm->setObjectName("WorldTimeForm");
WorldTimeForm->resize(400, 300);
hboxLayout = new QHBoxLayout(WorldTimeForm);
#ifndef Q_OS_MAC
@@ -49,9 +49,9 @@ public:
#ifndef Q_OS_MAC
hboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
worldTimeClock = new WorldTimeClock(WorldTimeForm);
- worldTimeClock->setObjectName(QString::fromUtf8("worldTimeClock"));
+ worldTimeClock->setObjectName("worldTimeClock");
hboxLayout->addWidget(worldTimeClock);
@@ -60,8 +60,8 @@ public:
vboxLayout->setSpacing(6);
#endif
vboxLayout->setContentsMargins(1, 1, 1, 1);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
- spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ vboxLayout->setObjectName("vboxLayout");
+ spacerItem = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout->addItem(spacerItem);
@@ -70,14 +70,14 @@ public:
hboxLayout1->setSpacing(6);
#endif
hboxLayout1->setContentsMargins(1, 1, 1, 1);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
label = new QLabel(WorldTimeForm);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
hboxLayout1->addWidget(label);
timeEdit = new QTimeEdit(WorldTimeForm);
- timeEdit->setObjectName(QString::fromUtf8("timeEdit"));
+ timeEdit->setObjectName("timeEdit");
timeEdit->setReadOnly(true);
hboxLayout1->addWidget(timeEdit);
@@ -90,14 +90,14 @@ public:
hboxLayout2->setSpacing(6);
#endif
hboxLayout2->setContentsMargins(1, 1, 1, 1);
- hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
+ hboxLayout2->setObjectName("hboxLayout2");
label_2 = new QLabel(WorldTimeForm);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
hboxLayout2->addWidget(label_2);
spinBox = new QSpinBox(WorldTimeForm);
- spinBox->setObjectName(QString::fromUtf8("spinBox"));
+ spinBox->setObjectName("spinBox");
spinBox->setMaximum(12);
spinBox->setMinimum(-12);
@@ -106,7 +106,7 @@ public:
vboxLayout->addLayout(hboxLayout2);
- spacerItem1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem1 = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout->addItem(spacerItem1);
diff --git a/tests/auto/tools/uic/baseline/formwindowsettings.ui b/tests/auto/tools/uic/baseline/formwindowsettings.ui
index cb71e3a84d..a24f5ccbb1 100644
--- a/tests/auto/tools/uic/baseline/formwindowsettings.ui
+++ b/tests/auto/tools/uic/baseline/formwindowsettings.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>FormWindowSettings</class>
<widget class="QDialog" name="FormWindowSettings" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/formwindowsettings.ui.h b/tests/auto/tools/uic/baseline/formwindowsettings.ui.h
index 0998bc6593..c0b778de7b 100644
--- a/tests/auto/tools/uic/baseline/formwindowsettings.ui.h
+++ b/tests/auto/tools/uic/baseline/formwindowsettings.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -93,21 +70,21 @@ public:
void setupUi(QDialog *FormWindowSettings)
{
if (FormWindowSettings->objectName().isEmpty())
- FormWindowSettings->setObjectName(QString::fromUtf8("FormWindowSettings"));
+ FormWindowSettings->setObjectName("FormWindowSettings");
FormWindowSettings->resize(433, 465);
gridLayout = new QGridLayout(FormWindowSettings);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
buttonBox = new QDialogButtonBox(FormWindowSettings);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
gridLayout->addWidget(buttonBox, 6, 0, 1, 2);
line = new QFrame(FormWindowSettings);
- line->setObjectName(QString::fromUtf8("line"));
- line->setFrameShape(QFrame::HLine);
- line->setFrameShadow(QFrame::Sunken);
+ line->setObjectName("line");
+ line->setFrameShape(QFrame::Shape::HLine);
+ line->setFrameShadow(QFrame::Shadow::Sunken);
gridLayout->addWidget(line, 5, 0, 1, 2);
@@ -116,33 +93,33 @@ public:
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(0, 0, 0, 0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
layoutDefaultGroupBox = new QGroupBox(FormWindowSettings);
- layoutDefaultGroupBox->setObjectName(QString::fromUtf8("layoutDefaultGroupBox"));
+ layoutDefaultGroupBox->setObjectName("layoutDefaultGroupBox");
layoutDefaultGroupBox->setCheckable(true);
gridLayout1 = new QGridLayout(layoutDefaultGroupBox);
#ifndef Q_OS_MAC
gridLayout1->setSpacing(6);
#endif
gridLayout1->setContentsMargins(8, 8, 8, 8);
- gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+ gridLayout1->setObjectName("gridLayout1");
label_2 = new QLabel(layoutDefaultGroupBox);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout1->addWidget(label_2, 1, 0, 1, 1);
label = new QLabel(layoutDefaultGroupBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout1->addWidget(label, 0, 0, 1, 1);
defaultSpacingSpinBox = new QSpinBox(layoutDefaultGroupBox);
- defaultSpacingSpinBox->setObjectName(QString::fromUtf8("defaultSpacingSpinBox"));
+ defaultSpacingSpinBox->setObjectName("defaultSpacingSpinBox");
gridLayout1->addWidget(defaultSpacingSpinBox, 1, 1, 1, 1);
defaultMarginSpinBox = new QSpinBox(layoutDefaultGroupBox);
- defaultMarginSpinBox->setObjectName(QString::fromUtf8("defaultMarginSpinBox"));
+ defaultMarginSpinBox->setObjectName("defaultMarginSpinBox");
gridLayout1->addWidget(defaultMarginSpinBox, 0, 1, 1, 1);
@@ -150,31 +127,31 @@ public:
hboxLayout->addWidget(layoutDefaultGroupBox);
layoutFunctionGroupBox = new QGroupBox(FormWindowSettings);
- layoutFunctionGroupBox->setObjectName(QString::fromUtf8("layoutFunctionGroupBox"));
+ layoutFunctionGroupBox->setObjectName("layoutFunctionGroupBox");
layoutFunctionGroupBox->setCheckable(true);
gridLayout2 = new QGridLayout(layoutFunctionGroupBox);
#ifndef Q_OS_MAC
gridLayout2->setSpacing(6);
#endif
gridLayout2->setContentsMargins(8, 8, 8, 8);
- gridLayout2->setObjectName(QString::fromUtf8("gridLayout2"));
+ gridLayout2->setObjectName("gridLayout2");
spacingFunctionLineEdit = new QLineEdit(layoutFunctionGroupBox);
- spacingFunctionLineEdit->setObjectName(QString::fromUtf8("spacingFunctionLineEdit"));
+ spacingFunctionLineEdit->setObjectName("spacingFunctionLineEdit");
gridLayout2->addWidget(spacingFunctionLineEdit, 1, 1, 1, 1);
marginFunctionLineEdit = new QLineEdit(layoutFunctionGroupBox);
- marginFunctionLineEdit->setObjectName(QString::fromUtf8("marginFunctionLineEdit"));
+ marginFunctionLineEdit->setObjectName("marginFunctionLineEdit");
gridLayout2->addWidget(marginFunctionLineEdit, 0, 1, 1, 1);
label_3 = new QLabel(layoutFunctionGroupBox);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
gridLayout2->addWidget(label_3, 0, 0, 1, 1);
label_3_2 = new QLabel(layoutFunctionGroupBox);
- label_3_2->setObjectName(QString::fromUtf8("label_3_2"));
+ label_3_2->setObjectName("label_3_2");
gridLayout2->addWidget(label_3_2, 1, 0, 1, 1);
@@ -185,15 +162,15 @@ public:
gridLayout->addLayout(hboxLayout, 2, 0, 1, 2);
pixmapFunctionGroupBox_2 = new QGroupBox(FormWindowSettings);
- pixmapFunctionGroupBox_2->setObjectName(QString::fromUtf8("pixmapFunctionGroupBox_2"));
+ pixmapFunctionGroupBox_2->setObjectName("pixmapFunctionGroupBox_2");
vboxLayout = new QVBoxLayout(pixmapFunctionGroupBox_2);
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
#endif
vboxLayout->setContentsMargins(8, 8, 8, 8);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
authorLineEdit = new QLineEdit(pixmapFunctionGroupBox_2);
- authorLineEdit->setObjectName(QString::fromUtf8("authorLineEdit"));
+ authorLineEdit->setObjectName("authorLineEdit");
vboxLayout->addWidget(authorLineEdit);
@@ -201,15 +178,15 @@ public:
gridLayout->addWidget(pixmapFunctionGroupBox_2, 0, 0, 1, 2);
includeHintsGroupBox = new QGroupBox(FormWindowSettings);
- includeHintsGroupBox->setObjectName(QString::fromUtf8("includeHintsGroupBox"));
+ includeHintsGroupBox->setObjectName("includeHintsGroupBox");
vboxLayout1 = new QVBoxLayout(includeHintsGroupBox);
#ifndef Q_OS_MAC
vboxLayout1->setSpacing(6);
#endif
vboxLayout1->setContentsMargins(8, 8, 8, 8);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
includeHintsTextEdit = new QTextEdit(includeHintsGroupBox);
- includeHintsTextEdit->setObjectName(QString::fromUtf8("includeHintsTextEdit"));
+ includeHintsTextEdit->setObjectName("includeHintsTextEdit");
vboxLayout1->addWidget(includeHintsTextEdit);
@@ -221,18 +198,18 @@ public:
hboxLayout1->setSpacing(6);
#endif
hboxLayout1->setContentsMargins(0, 0, 0, 0);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
pixmapFunctionGroupBox = new QGroupBox(FormWindowSettings);
- pixmapFunctionGroupBox->setObjectName(QString::fromUtf8("pixmapFunctionGroupBox"));
+ pixmapFunctionGroupBox->setObjectName("pixmapFunctionGroupBox");
pixmapFunctionGroupBox->setCheckable(true);
vboxLayout2 = new QVBoxLayout(pixmapFunctionGroupBox);
#ifndef Q_OS_MAC
vboxLayout2->setSpacing(6);
#endif
vboxLayout2->setContentsMargins(8, 8, 8, 8);
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
pixmapFunctionLineEdit = new QLineEdit(pixmapFunctionGroupBox);
- pixmapFunctionLineEdit->setObjectName(QString::fromUtf8("pixmapFunctionLineEdit"));
+ pixmapFunctionLineEdit->setObjectName("pixmapFunctionLineEdit");
vboxLayout2->addWidget(pixmapFunctionLineEdit);
@@ -242,12 +219,12 @@ public:
gridLayout->addLayout(hboxLayout1, 3, 1, 1, 1);
- spacerItem = new QSpacerItem(111, 115, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(111, 115, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem, 4, 1, 1, 1);
gridPanel = new qdesigner_internal::GridPanel(FormWindowSettings);
- gridPanel->setObjectName(QString::fromUtf8("gridPanel"));
+ gridPanel->setObjectName("gridPanel");
gridLayout->addWidget(gridPanel, 1, 0, 1, 2);
diff --git a/tests/auto/tools/uic/baseline/generalpage.ui b/tests/auto/tools/uic/baseline/generalpage.ui
index 9c2babb0ae..0e6268ed70 100644
--- a/tests/auto/tools/uic/baseline/generalpage.ui
+++ b/tests/auto/tools/uic/baseline/generalpage.ui
@@ -39,7 +39,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/generalpage.ui.h b/tests/auto/tools/uic/baseline/generalpage.ui.h
index c393fa5e31..799463796c 100644
--- a/tests/auto/tools/uic/baseline/generalpage.ui.h
+++ b/tests/auto/tools/uic/baseline/generalpage.ui.h
@@ -33,35 +33,35 @@ public:
void setupUi(QWidget *GeneralPage)
{
if (GeneralPage->objectName().isEmpty())
- GeneralPage->setObjectName(QString::fromUtf8("GeneralPage"));
+ GeneralPage->setObjectName("GeneralPage");
GeneralPage->resize(417, 243);
gridLayout = new QGridLayout(GeneralPage);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(GeneralPage);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 1, 0, 1, 1);
namespaceLineEdit = new QLineEdit(GeneralPage);
- namespaceLineEdit->setObjectName(QString::fromUtf8("namespaceLineEdit"));
+ namespaceLineEdit->setObjectName("namespaceLineEdit");
gridLayout->addWidget(namespaceLineEdit, 1, 1, 1, 1);
label_2 = new QLabel(GeneralPage);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout->addWidget(label_2, 2, 0, 1, 1);
folderLineEdit = new QLineEdit(GeneralPage);
- folderLineEdit->setObjectName(QString::fromUtf8("folderLineEdit"));
+ folderLineEdit->setObjectName("folderLineEdit");
gridLayout->addWidget(folderLineEdit, 2, 1, 1, 1);
- spacerItem = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ spacerItem = new QSpacerItem(20, 20, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem, 0, 1, 1, 1);
- spacerItem1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem1 = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem1, 3, 1, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/gridalignment.ui.h b/tests/auto/tools/uic/baseline/gridalignment.ui.h
index f0edaac534..4f9260fbeb 100644
--- a/tests/auto/tools/uic/baseline/gridalignment.ui.h
+++ b/tests/auto/tools/uic/baseline/gridalignment.ui.h
@@ -29,27 +29,27 @@ public:
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
- Form->setObjectName(QString::fromUtf8("Form"));
+ Form->setObjectName("Form");
Form->resize(279, 163);
gridLayout = new QGridLayout(Form);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
pushButton = new QPushButton(Form);
- pushButton->setObjectName(QString::fromUtf8("pushButton"));
+ pushButton->setObjectName("pushButton");
gridLayout->addWidget(pushButton, 0, 0, 1, 1, Qt::AlignLeft);
pushButton_3 = new QPushButton(Form);
- pushButton_3->setObjectName(QString::fromUtf8("pushButton_3"));
+ pushButton_3->setObjectName("pushButton_3");
gridLayout->addWidget(pushButton_3, 0, 1, 1, 1, Qt::AlignTop);
pushButton_2 = new QPushButton(Form);
- pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
+ pushButton_2->setObjectName("pushButton_2");
gridLayout->addWidget(pushButton_2, 1, 0, 1, 1, Qt::AlignRight);
pushButton_4 = new QPushButton(Form);
- pushButton_4->setObjectName(QString::fromUtf8("pushButton_4"));
+ pushButton_4->setObjectName("pushButton_4");
gridLayout->addWidget(pushButton_4, 1, 1, 1, 1, Qt::AlignBottom);
diff --git a/tests/auto/tools/uic/baseline/gridpanel.ui.h b/tests/auto/tools/uic/baseline/gridpanel.ui.h
index 70df3b2a24..8e061a4a9a 100644
--- a/tests/auto/tools/uic/baseline/gridpanel.ui.h
+++ b/tests/auto/tools/uic/baseline/gridpanel.ui.h
@@ -46,18 +46,18 @@ public:
void setupUi(QWidget *qdesigner_internal__GridPanel)
{
if (qdesigner_internal__GridPanel->objectName().isEmpty())
- qdesigner_internal__GridPanel->setObjectName(QString::fromUtf8("qdesigner_internal__GridPanel"));
+ qdesigner_internal__GridPanel->setObjectName("qdesigner_internal__GridPanel");
qdesigner_internal__GridPanel->resize(393, 110);
vboxLayout = new QVBoxLayout(qdesigner_internal__GridPanel);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
vboxLayout->setContentsMargins(0, 0, 0, 0);
m_gridGroupBox = new QGroupBox(qdesigner_internal__GridPanel);
- m_gridGroupBox->setObjectName(QString::fromUtf8("m_gridGroupBox"));
+ m_gridGroupBox->setObjectName("m_gridGroupBox");
gridLayout = new QGridLayout(m_gridGroupBox);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
m_visibleCheckBox = new QCheckBox(m_gridGroupBox);
- m_visibleCheckBox->setObjectName(QString::fromUtf8("m_visibleCheckBox"));
- QSizePolicy sizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed);
+ m_visibleCheckBox->setObjectName("m_visibleCheckBox");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::MinimumExpanding, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(m_visibleCheckBox->sizePolicy().hasHeightForWidth());
@@ -66,32 +66,32 @@ public:
gridLayout->addWidget(m_visibleCheckBox, 0, 0, 1, 1);
label = new QLabel(m_gridGroupBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 1, 1, 1);
m_deltaXSpinBox = new QSpinBox(m_gridGroupBox);
- m_deltaXSpinBox->setObjectName(QString::fromUtf8("m_deltaXSpinBox"));
+ m_deltaXSpinBox->setObjectName("m_deltaXSpinBox");
m_deltaXSpinBox->setMinimum(2);
m_deltaXSpinBox->setMaximum(100);
gridLayout->addWidget(m_deltaXSpinBox, 0, 2, 1, 1);
m_snapXCheckBox = new QCheckBox(m_gridGroupBox);
- m_snapXCheckBox->setObjectName(QString::fromUtf8("m_snapXCheckBox"));
+ m_snapXCheckBox->setObjectName("m_snapXCheckBox");
sizePolicy.setHeightForWidth(m_snapXCheckBox->sizePolicy().hasHeightForWidth());
m_snapXCheckBox->setSizePolicy(sizePolicy);
gridLayout->addWidget(m_snapXCheckBox, 0, 3, 1, 1);
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
m_resetButton = new QPushButton(m_gridGroupBox);
- m_resetButton->setObjectName(QString::fromUtf8("m_resetButton"));
+ m_resetButton->setObjectName("m_resetButton");
hboxLayout->addWidget(m_resetButton);
- spacerItem = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(20, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
@@ -99,19 +99,19 @@ public:
gridLayout->addLayout(hboxLayout, 1, 0, 1, 1);
label_2 = new QLabel(m_gridGroupBox);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout->addWidget(label_2, 1, 1, 1, 1);
m_deltaYSpinBox = new QSpinBox(m_gridGroupBox);
- m_deltaYSpinBox->setObjectName(QString::fromUtf8("m_deltaYSpinBox"));
+ m_deltaYSpinBox->setObjectName("m_deltaYSpinBox");
m_deltaYSpinBox->setMinimum(2);
m_deltaYSpinBox->setMaximum(100);
gridLayout->addWidget(m_deltaYSpinBox, 1, 2, 1, 1);
m_snapYCheckBox = new QCheckBox(m_gridGroupBox);
- m_snapYCheckBox->setObjectName(QString::fromUtf8("m_snapYCheckBox"));
+ m_snapYCheckBox->setObjectName("m_snapYCheckBox");
sizePolicy.setHeightForWidth(m_snapYCheckBox->sizePolicy().hasHeightForWidth());
m_snapYCheckBox->setSizePolicy(sizePolicy);
diff --git a/tests/auto/tools/uic/baseline/helpdialog.ui b/tests/auto/tools/uic/baseline/helpdialog.ui
index 91b81c75d5..8f384657f3 100644
--- a/tests/auto/tools/uic/baseline/helpdialog.ui
+++ b/tests/auto/tools/uic/baseline/helpdialog.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<exportmacro></exportmacro>
<class>HelpDialog</class>
<widget class="QWidget" name="HelpDialog" >
@@ -179,7 +155,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
+ <enum>QSizePolicy::Policy::Expanding</enum>
</property>
<property name="sizeHint" >
<size>
@@ -236,7 +212,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
@@ -313,7 +289,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
+ <enum>QSizePolicy::Policy::Expanding</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/helpdialog.ui.h b/tests/auto/tools/uic/baseline/helpdialog.ui.h
index 22134f661f..6190d6bcba 100644
--- a/tests/auto/tools/uic/baseline/helpdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/helpdialog.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -98,26 +75,26 @@ public:
void setupUi(QWidget *HelpDialog)
{
if (HelpDialog->objectName().isEmpty())
- HelpDialog->setObjectName(QString::fromUtf8("HelpDialog"));
+ HelpDialog->setObjectName("HelpDialog");
HelpDialog->resize(274, 417);
vboxLayout = new QVBoxLayout(HelpDialog);
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
#endif
vboxLayout->setContentsMargins(0, 0, 0, 0);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
tabWidget = new QTabWidget(HelpDialog);
- tabWidget->setObjectName(QString::fromUtf8("tabWidget"));
+ tabWidget->setObjectName("tabWidget");
contentPage = new QWidget();
- contentPage->setObjectName(QString::fromUtf8("contentPage"));
+ contentPage->setObjectName("contentPage");
vboxLayout1 = new QVBoxLayout(contentPage);
#ifndef Q_OS_MAC
vboxLayout1->setSpacing(6);
#endif
vboxLayout1->setContentsMargins(5, 5, 5, 5);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
listContents = new QTreeWidget(contentPage);
- listContents->setObjectName(QString::fromUtf8("listContents"));
+ listContents->setObjectName("listContents");
listContents->setContextMenuPolicy(Qt::CustomContextMenu);
listContents->setRootIsDecorated(true);
listContents->setUniformRowHeights(true);
@@ -127,40 +104,40 @@ public:
QIcon icon(QIcon::fromTheme(QString::fromUtf8("edit-copy")));
tabWidget->addTab(contentPage, icon, QString());
indexPage = new QWidget();
- indexPage->setObjectName(QString::fromUtf8("indexPage"));
+ indexPage->setObjectName("indexPage");
vboxLayout2 = new QVBoxLayout(indexPage);
#ifndef Q_OS_MAC
vboxLayout2->setSpacing(6);
#endif
vboxLayout2->setContentsMargins(5, 5, 5, 5);
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
TextLabel1 = new QLabel(indexPage);
- TextLabel1->setObjectName(QString::fromUtf8("TextLabel1"));
+ TextLabel1->setObjectName("TextLabel1");
vboxLayout2->addWidget(TextLabel1);
editIndex = new QLineEdit(indexPage);
- editIndex->setObjectName(QString::fromUtf8("editIndex"));
+ editIndex->setObjectName("editIndex");
vboxLayout2->addWidget(editIndex);
listIndex = new QListView(indexPage);
- listIndex->setObjectName(QString::fromUtf8("listIndex"));
+ listIndex->setObjectName("listIndex");
listIndex->setContextMenuPolicy(Qt::CustomContextMenu);
vboxLayout2->addWidget(listIndex);
tabWidget->addTab(indexPage, QString());
bookmarkPage = new QWidget();
- bookmarkPage->setObjectName(QString::fromUtf8("bookmarkPage"));
+ bookmarkPage->setObjectName("bookmarkPage");
vboxLayout3 = new QVBoxLayout(bookmarkPage);
#ifndef Q_OS_MAC
vboxLayout3->setSpacing(6);
#endif
vboxLayout3->setContentsMargins(5, 5, 5, 5);
- vboxLayout3->setObjectName(QString::fromUtf8("vboxLayout3"));
+ vboxLayout3->setObjectName("vboxLayout3");
listBookmarks = new QTreeWidget(bookmarkPage);
- listBookmarks->setObjectName(QString::fromUtf8("listBookmarks"));
+ listBookmarks->setObjectName("listBookmarks");
listBookmarks->setContextMenuPolicy(Qt::CustomContextMenu);
listBookmarks->setUniformRowHeights(true);
@@ -171,18 +148,18 @@ public:
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(0, 0, 0, 0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
- spacerItem = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ hboxLayout->setObjectName("hboxLayout");
+ spacerItem = new QSpacerItem(20, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
buttonAdd = new QPushButton(bookmarkPage);
- buttonAdd->setObjectName(QString::fromUtf8("buttonAdd"));
+ buttonAdd->setObjectName("buttonAdd");
hboxLayout->addWidget(buttonAdd);
buttonRemove = new QPushButton(bookmarkPage);
- buttonRemove->setObjectName(QString::fromUtf8("buttonRemove"));
+ buttonRemove->setObjectName("buttonRemove");
hboxLayout->addWidget(buttonRemove);
@@ -191,35 +168,35 @@ public:
tabWidget->addTab(bookmarkPage, QString());
searchPage = new QWidget();
- searchPage->setObjectName(QString::fromUtf8("searchPage"));
+ searchPage->setObjectName("searchPage");
gridLayout = new QGridLayout(searchPage);
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
#endif
gridLayout->setContentsMargins(5, 5, 5, 5);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
- spacerItem1 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ gridLayout->setObjectName("gridLayout");
+ spacerItem1 = new QSpacerItem(20, 20, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem1, 3, 0, 1, 1);
TextLabel1_2 = new QLabel(searchPage);
- TextLabel1_2->setObjectName(QString::fromUtf8("TextLabel1_2"));
+ TextLabel1_2->setObjectName("TextLabel1_2");
gridLayout->addWidget(TextLabel1_2, 0, 0, 1, 1);
termsEdit = new QLineEdit(searchPage);
- termsEdit->setObjectName(QString::fromUtf8("termsEdit"));
+ termsEdit->setObjectName("termsEdit");
gridLayout->addWidget(termsEdit, 1, 0, 1, 1);
resultBox = new QListWidget(searchPage);
- resultBox->setObjectName(QString::fromUtf8("resultBox"));
+ resultBox->setObjectName("resultBox");
resultBox->setContextMenuPolicy(Qt::CustomContextMenu);
gridLayout->addWidget(resultBox, 5, 0, 1, 1);
TextLabel2 = new QLabel(searchPage);
- TextLabel2->setObjectName(QString::fromUtf8("TextLabel2"));
+ TextLabel2->setObjectName("TextLabel2");
gridLayout->addWidget(TextLabel2, 4, 0, 1, 1);
@@ -228,18 +205,18 @@ public:
hboxLayout1->setSpacing(6);
#endif
hboxLayout1->setContentsMargins(1, 1, 1, 1);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
helpButton = new QPushButton(searchPage);
- helpButton->setObjectName(QString::fromUtf8("helpButton"));
+ helpButton->setObjectName("helpButton");
hboxLayout1->addWidget(helpButton);
- spacerItem2 = new QSpacerItem(61, 21, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem2 = new QSpacerItem(61, 21, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout1->addItem(spacerItem2);
searchButton = new QPushButton(searchPage);
- searchButton->setObjectName(QString::fromUtf8("searchButton"));
+ searchButton->setObjectName("searchButton");
searchButton->setEnabled(false);
hboxLayout1->addWidget(searchButton);
@@ -252,7 +229,7 @@ public:
vboxLayout->addWidget(tabWidget);
framePrepare = new QFrame(HelpDialog);
- framePrepare->setObjectName(QString::fromUtf8("framePrepare"));
+ framePrepare->setObjectName("framePrepare");
framePrepare->setFrameShape(QFrame::StyledPanel);
framePrepare->setFrameShadow(QFrame::Raised);
hboxLayout2 = new QHBoxLayout(framePrepare);
@@ -260,14 +237,14 @@ public:
hboxLayout2->setSpacing(6);
#endif
hboxLayout2->setContentsMargins(3, 3, 3, 3);
- hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
+ hboxLayout2->setObjectName("hboxLayout2");
labelPrepare = new QLabel(framePrepare);
- labelPrepare->setObjectName(QString::fromUtf8("labelPrepare"));
+ labelPrepare->setObjectName("labelPrepare");
hboxLayout2->addWidget(labelPrepare);
progressPrepare = new QProgressBar(framePrepare);
- progressPrepare->setObjectName(QString::fromUtf8("progressPrepare"));
+ progressPrepare->setObjectName("progressPrepare");
hboxLayout2->addWidget(progressPrepare);
diff --git a/tests/auto/tools/uic/baseline/history.ui.h b/tests/auto/tools/uic/baseline/history.ui.h
index e74e37d7b3..381c7591dc 100644
--- a/tests/auto/tools/uic/baseline/history.ui.h
+++ b/tests/auto/tools/uic/baseline/history.ui.h
@@ -40,42 +40,42 @@ public:
void setupUi(QDialog *HistoryDialog)
{
if (HistoryDialog->objectName().isEmpty())
- HistoryDialog->setObjectName(QString::fromUtf8("HistoryDialog"));
+ HistoryDialog->setObjectName("HistoryDialog");
HistoryDialog->resize(758, 450);
gridLayout = new QGridLayout(HistoryDialog);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
- spacerItem = new QSpacerItem(252, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ gridLayout->setObjectName("gridLayout");
+ spacerItem = new QSpacerItem(252, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem, 0, 0, 1, 1);
search = new SearchLineEdit(HistoryDialog);
- search->setObjectName(QString::fromUtf8("search"));
+ search->setObjectName("search");
gridLayout->addWidget(search, 0, 1, 1, 1);
tree = new EditTreeView(HistoryDialog);
- tree->setObjectName(QString::fromUtf8("tree"));
+ tree->setObjectName("tree");
gridLayout->addWidget(tree, 1, 0, 1, 2);
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
removeButton = new QPushButton(HistoryDialog);
- removeButton->setObjectName(QString::fromUtf8("removeButton"));
+ removeButton->setObjectName("removeButton");
hboxLayout->addWidget(removeButton);
removeAllButton = new QPushButton(HistoryDialog);
- removeAllButton->setObjectName(QString::fromUtf8("removeAllButton"));
+ removeAllButton->setObjectName("removeAllButton");
hboxLayout->addWidget(removeAllButton);
- spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem1);
buttonBox = new QDialogButtonBox(HistoryDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setStandardButtons(QDialogButtonBox::Ok);
hboxLayout->addWidget(buttonBox);
diff --git a/tests/auto/tools/uic/baseline/icontheme.ui b/tests/auto/tools/uic/baseline/icontheme.ui
index a21463561b..328e86602b 100644
--- a/tests/auto/tools/uic/baseline/icontheme.ui
+++ b/tests/auto/tools/uic/baseline/icontheme.ui
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
- <width>122</width>
- <height>117</height>
+ <width>343</width>
+ <height>478</height>
</rect>
</property>
<property name="windowTitle">
@@ -42,9 +42,28 @@
<string>PushButton</string>
</property>
<property name="icon">
- <iconset theme="edit-copy">
- <normaloff/>
- </iconset>
+ <iconset theme="edit-copy"/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="themeenum">
+ <property name="text">
+ <string>PushButton</string>
+ </property>
+ <property name="icon">
+ <iconset theme="QIcon::ThemeIcon::EditCopy"/>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="fileandthemeenum">
+ <property name="text">
+ <string>PushButton</string>
+ </property>
+ <property name="icon">
+ <iconset theme="QIcon::ThemeIcon::EditCopy">
+ <normaloff>image7.png</normaloff>image7.png</iconset>
</property>
</widget>
</item>
diff --git a/tests/auto/tools/uic/baseline/icontheme.ui.h b/tests/auto/tools/uic/baseline/icontheme.ui.h
index 30a4dbc72e..633ba81d37 100644
--- a/tests/auto/tools/uic/baseline/icontheme.ui.h
+++ b/tests/auto/tools/uic/baseline/icontheme.ui.h
@@ -25,16 +25,18 @@ public:
QPushButton *fileicon;
QPushButton *fileandthemeicon;
QPushButton *themeicon;
+ QPushButton *themeenum;
+ QPushButton *fileandthemeenum;
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
- Form->setObjectName(QString::fromUtf8("Form"));
- Form->resize(122, 117);
+ Form->setObjectName("Form");
+ Form->resize(343, 478);
verticalLayout = new QVBoxLayout(Form);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
fileicon = new QPushButton(Form);
- fileicon->setObjectName(QString::fromUtf8("fileicon"));
+ fileicon->setObjectName("fileicon");
QIcon icon;
icon.addFile(QString::fromUtf8("image1.png"), QSize(), QIcon::Normal, QIcon::Off);
fileicon->setIcon(icon);
@@ -42,7 +44,7 @@ public:
verticalLayout->addWidget(fileicon);
fileandthemeicon = new QPushButton(Form);
- fileandthemeicon->setObjectName(QString::fromUtf8("fileandthemeicon"));
+ fileandthemeicon->setObjectName("fileandthemeicon");
QIcon icon1;
QString iconThemeName = QString::fromUtf8("edit-copy");
if (QIcon::hasThemeIcon(iconThemeName)) {
@@ -55,18 +57,31 @@ public:
verticalLayout->addWidget(fileandthemeicon);
themeicon = new QPushButton(Form);
- themeicon->setObjectName(QString::fromUtf8("themeicon"));
- QIcon icon2;
- iconThemeName = QString::fromUtf8("edit-copy");
- if (QIcon::hasThemeIcon(iconThemeName)) {
- icon2 = QIcon::fromTheme(iconThemeName);
- } else {
- icon2.addFile(QString::fromUtf8(""), QSize(), QIcon::Normal, QIcon::Off);
- }
+ themeicon->setObjectName("themeicon");
+ QIcon icon2(QIcon::fromTheme(QString::fromUtf8("edit-copy")));
themeicon->setIcon(icon2);
verticalLayout->addWidget(themeicon);
+ themeenum = new QPushButton(Form);
+ themeenum->setObjectName("themeenum");
+ QIcon icon3(QIcon::fromTheme(QIcon::ThemeIcon::EditCopy));
+ themeenum->setIcon(icon3);
+
+ verticalLayout->addWidget(themeenum);
+
+ fileandthemeenum = new QPushButton(Form);
+ fileandthemeenum->setObjectName("fileandthemeenum");
+ QIcon icon4;
+ if (QIcon::hasThemeIcon(QIcon::ThemeIcon::EditCopy)) {
+ icon4 = QIcon::fromTheme(QIcon::ThemeIcon::EditCopy);
+ } else {
+ icon4.addFile(QString::fromUtf8("image7.png"), QSize(), QIcon::Normal, QIcon::Off);
+ }
+ fileandthemeenum->setIcon(icon4);
+
+ verticalLayout->addWidget(fileandthemeenum);
+
retranslateUi(Form);
@@ -79,6 +94,8 @@ public:
fileicon->setText(QCoreApplication::translate("Form", "fileicon", nullptr));
fileandthemeicon->setText(QCoreApplication::translate("Form", "PushButton", nullptr));
themeicon->setText(QCoreApplication::translate("Form", "PushButton", nullptr));
+ themeenum->setText(QCoreApplication::translate("Form", "PushButton", nullptr));
+ fileandthemeenum->setText(QCoreApplication::translate("Form", "PushButton", nullptr));
} // retranslateUi
};
diff --git a/tests/auto/tools/uic/baseline/idbased.ui.h b/tests/auto/tools/uic/baseline/idbased.ui.h
index 18ce5e8936..f1138b8c77 100644
--- a/tests/auto/tools/uic/baseline/idbased.ui.h
+++ b/tests/auto/tools/uic/baseline/idbased.ui.h
@@ -26,12 +26,12 @@ public:
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
- Form->setObjectName(QString::fromUtf8("Form"));
+ Form->setObjectName("Form");
Form->resize(400, 300);
verticalLayout = new QVBoxLayout(Form);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
pushButton = new QPushButton(Form);
- pushButton->setObjectName(QString::fromUtf8("pushButton"));
+ pushButton->setObjectName("pushButton");
verticalLayout->addWidget(pushButton);
diff --git a/tests/auto/tools/uic/baseline/identifierpage.ui b/tests/auto/tools/uic/baseline/identifierpage.ui
index cd0df75638..702769540a 100644
--- a/tests/auto/tools/uic/baseline/identifierpage.ui
+++ b/tests/auto/tools/uic/baseline/identifierpage.ui
@@ -19,7 +19,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
@@ -55,7 +55,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/identifierpage.ui.h b/tests/auto/tools/uic/baseline/identifierpage.ui.h
index af40184e71..4cd3f8e7c3 100644
--- a/tests/auto/tools/uic/baseline/identifierpage.ui.h
+++ b/tests/auto/tools/uic/baseline/identifierpage.ui.h
@@ -36,47 +36,47 @@ public:
void setupUi(QWidget *IdentifierPage)
{
if (IdentifierPage->objectName().isEmpty())
- IdentifierPage->setObjectName(QString::fromUtf8("IdentifierPage"));
+ IdentifierPage->setObjectName("IdentifierPage");
IdentifierPage->resize(417, 242);
gridLayout = new QGridLayout(IdentifierPage);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
- spacerItem = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ gridLayout->setObjectName("gridLayout");
+ spacerItem = new QSpacerItem(20, 20, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem, 0, 1, 1, 1);
identifierCheckBox = new QCheckBox(IdentifierPage);
- identifierCheckBox->setObjectName(QString::fromUtf8("identifierCheckBox"));
+ identifierCheckBox->setObjectName("identifierCheckBox");
gridLayout->addWidget(identifierCheckBox, 1, 0, 1, 3);
- spacerItem1 = new QSpacerItem(161, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(161, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem1, 1, 3, 1, 1);
- spacerItem2 = new QSpacerItem(30, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);
+ spacerItem2 = new QSpacerItem(30, 20, QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem2, 2, 0, 1, 1);
globalButton = new QRadioButton(IdentifierPage);
- globalButton->setObjectName(QString::fromUtf8("globalButton"));
+ globalButton->setObjectName("globalButton");
globalButton->setEnabled(false);
globalButton->setChecked(true);
gridLayout->addWidget(globalButton, 2, 1, 1, 1);
prefixLineEdit = new QLineEdit(IdentifierPage);
- prefixLineEdit->setObjectName(QString::fromUtf8("prefixLineEdit"));
+ prefixLineEdit->setObjectName("prefixLineEdit");
prefixLineEdit->setEnabled(false);
gridLayout->addWidget(prefixLineEdit, 2, 2, 1, 1);
fileNameButton = new QRadioButton(IdentifierPage);
- fileNameButton->setObjectName(QString::fromUtf8("fileNameButton"));
+ fileNameButton->setObjectName("fileNameButton");
fileNameButton->setEnabled(false);
gridLayout->addWidget(fileNameButton, 3, 1, 1, 2);
- spacerItem3 = new QSpacerItem(20, 31, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem3 = new QSpacerItem(20, 31, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem3, 4, 1, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/imagedialog.ui.h b/tests/auto/tools/uic/baseline/imagedialog.ui.h
index 783ef01976..a0b16acb7e 100644
--- a/tests/auto/tools/uic/baseline/imagedialog.ui.h
+++ b/tests/auto/tools/uic/baseline/imagedialog.ui.h
@@ -46,7 +46,7 @@ public:
void setupUi(QDialog *dialog)
{
if (dialog->objectName().isEmpty())
- dialog->setObjectName(QString::fromUtf8("dialog"));
+ dialog->setObjectName("dialog");
dialog->setObjectName(QString::fromUtf8("ImageDialog"));
dialog->resize(320, 180);
vboxLayout = new QVBoxLayout(dialog);
@@ -56,17 +56,17 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
vboxLayout->setObjectName(QString::fromUtf8(""));
gridLayout = new QGridLayout();
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
#endif
gridLayout->setContentsMargins(1, 1, 1, 1);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
gridLayout->setObjectName(QString::fromUtf8(""));
widthLabel = new QLabel(dialog);
- widthLabel->setObjectName(QString::fromUtf8("widthLabel"));
+ widthLabel->setObjectName("widthLabel");
widthLabel->setGeometry(QRect(1, 27, 67, 22));
widthLabel->setFrameShape(QFrame::NoFrame);
widthLabel->setFrameShadow(QFrame::Plain);
@@ -75,7 +75,7 @@ public:
gridLayout->addWidget(widthLabel, 1, 0, 1, 1);
heightLabel = new QLabel(dialog);
- heightLabel->setObjectName(QString::fromUtf8("heightLabel"));
+ heightLabel->setObjectName("heightLabel");
heightLabel->setGeometry(QRect(1, 55, 67, 22));
heightLabel->setFrameShape(QFrame::NoFrame);
heightLabel->setFrameShadow(QFrame::Plain);
@@ -84,9 +84,9 @@ public:
gridLayout->addWidget(heightLabel, 2, 0, 1, 1);
colorDepthCombo = new QComboBox(dialog);
- colorDepthCombo->setObjectName(QString::fromUtf8("colorDepthCombo"));
+ colorDepthCombo->setObjectName("colorDepthCombo");
colorDepthCombo->setGeometry(QRect(74, 83, 227, 22));
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(colorDepthCombo->sizePolicy().hasHeightForWidth());
@@ -96,9 +96,9 @@ public:
gridLayout->addWidget(colorDepthCombo, 3, 1, 1, 1);
nameLineEdit = new QLineEdit(dialog);
- nameLineEdit->setObjectName(QString::fromUtf8("nameLineEdit"));
+ nameLineEdit->setObjectName("nameLineEdit");
nameLineEdit->setGeometry(QRect(74, 83, 227, 22));
- QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Fixed);
sizePolicy1.setHorizontalStretch(1);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(nameLineEdit->sizePolicy().hasHeightForWidth());
@@ -108,7 +108,7 @@ public:
gridLayout->addWidget(nameLineEdit, 0, 1, 1, 1);
spinBox = new QSpinBox(dialog);
- spinBox->setObjectName(QString::fromUtf8("spinBox"));
+ spinBox->setObjectName("spinBox");
spinBox->setGeometry(QRect(74, 1, 227, 20));
sizePolicy.setHeightForWidth(spinBox->sizePolicy().hasHeightForWidth());
spinBox->setSizePolicy(sizePolicy);
@@ -120,7 +120,7 @@ public:
gridLayout->addWidget(spinBox, 1, 1, 1, 1);
spinBox_2 = new QSpinBox(dialog);
- spinBox_2->setObjectName(QString::fromUtf8("spinBox_2"));
+ spinBox_2->setObjectName("spinBox_2");
spinBox_2->setGeometry(QRect(74, 27, 227, 22));
sizePolicy.setHeightForWidth(spinBox_2->sizePolicy().hasHeightForWidth());
spinBox_2->setSizePolicy(sizePolicy);
@@ -132,7 +132,7 @@ public:
gridLayout->addWidget(spinBox_2, 2, 1, 1, 1);
nameLabel = new QLabel(dialog);
- nameLabel->setObjectName(QString::fromUtf8("nameLabel"));
+ nameLabel->setObjectName("nameLabel");
nameLabel->setGeometry(QRect(1, 1, 67, 20));
nameLabel->setFrameShape(QFrame::NoFrame);
nameLabel->setFrameShadow(QFrame::Plain);
@@ -141,7 +141,7 @@ public:
gridLayout->addWidget(nameLabel, 0, 0, 1, 1);
colorDepthLabel = new QLabel(dialog);
- colorDepthLabel->setObjectName(QString::fromUtf8("colorDepthLabel"));
+ colorDepthLabel->setObjectName("colorDepthLabel");
colorDepthLabel->setGeometry(QRect(1, 83, 67, 22));
colorDepthLabel->setFrameShape(QFrame::NoFrame);
colorDepthLabel->setFrameShadow(QFrame::Plain);
@@ -152,7 +152,7 @@ public:
vboxLayout->addLayout(gridLayout);
- spacerItem = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(0, 0, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout->addItem(spacerItem);
@@ -161,20 +161,20 @@ public:
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(1, 1, 1, 1);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
hboxLayout->setObjectName(QString::fromUtf8(""));
- spacerItem1 = new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(0, 0, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem1);
okButton = new QPushButton(dialog);
- okButton->setObjectName(QString::fromUtf8("okButton"));
+ okButton->setObjectName("okButton");
okButton->setGeometry(QRect(135, 1, 80, 24));
hboxLayout->addWidget(okButton);
cancelButton = new QPushButton(dialog);
- cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
+ cancelButton->setObjectName("cancelButton");
cancelButton->setGeometry(QRect(221, 1, 80, 24));
hboxLayout->addWidget(cancelButton);
diff --git a/tests/auto/tools/uic/baseline/inputpage.ui b/tests/auto/tools/uic/baseline/inputpage.ui
index e7cd3a0fad..6c115e1c59 100644
--- a/tests/auto/tools/uic/baseline/inputpage.ui
+++ b/tests/auto/tools/uic/baseline/inputpage.ui
@@ -19,7 +19,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/inputpage.ui.h b/tests/auto/tools/uic/baseline/inputpage.ui.h
index 1c3fbcbcc6..1223360f31 100644
--- a/tests/auto/tools/uic/baseline/inputpage.ui.h
+++ b/tests/auto/tools/uic/baseline/inputpage.ui.h
@@ -35,17 +35,17 @@ public:
void setupUi(QWidget *InputPage)
{
if (InputPage->objectName().isEmpty())
- InputPage->setObjectName(QString::fromUtf8("InputPage"));
+ InputPage->setObjectName("InputPage");
InputPage->resize(417, 242);
gridLayout = new QGridLayout(InputPage);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
- spacerItem = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ gridLayout->setObjectName("gridLayout");
+ spacerItem = new QSpacerItem(20, 20, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem, 0, 2, 1, 1);
label = new QLabel(InputPage);
- label->setObjectName(QString::fromUtf8("label"));
- QSizePolicy sizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
+ label->setObjectName("label");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Maximum, QSizePolicy::Policy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
@@ -55,21 +55,21 @@ public:
hboxLayout = new QHBoxLayout();
hboxLayout->setSpacing(0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
fileLineEdit = new QLineEdit(InputPage);
- fileLineEdit->setObjectName(QString::fromUtf8("fileLineEdit"));
+ fileLineEdit->setObjectName("fileLineEdit");
hboxLayout->addWidget(fileLineEdit);
browseButton = new QToolButton(InputPage);
- browseButton->setObjectName(QString::fromUtf8("browseButton"));
+ browseButton->setObjectName("browseButton");
hboxLayout->addWidget(browseButton);
gridLayout->addLayout(hboxLayout, 1, 1, 1, 2);
- spacerItem1 = new QSpacerItem(20, 31, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem1 = new QSpacerItem(20, 31, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem1, 2, 1, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/installdialog.ui.h b/tests/auto/tools/uic/baseline/installdialog.ui.h
index 7f82393f4b..edb640f956 100644
--- a/tests/auto/tools/uic/baseline/installdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/installdialog.ui.h
@@ -44,68 +44,68 @@ public:
void setupUi(QDialog *InstallDialog)
{
if (InstallDialog->objectName().isEmpty())
- InstallDialog->setObjectName(QString::fromUtf8("InstallDialog"));
+ InstallDialog->setObjectName("InstallDialog");
InstallDialog->resize(436, 245);
gridLayout = new QGridLayout(InstallDialog);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(InstallDialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 4);
listWidget = new QListWidget(InstallDialog);
- listWidget->setObjectName(QString::fromUtf8("listWidget"));
+ listWidget->setObjectName("listWidget");
gridLayout->addWidget(listWidget, 1, 0, 4, 4);
installButton = new QPushButton(InstallDialog);
- installButton->setObjectName(QString::fromUtf8("installButton"));
+ installButton->setObjectName("installButton");
gridLayout->addWidget(installButton, 1, 4, 1, 1);
cancelButton = new QPushButton(InstallDialog);
- cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
+ cancelButton->setObjectName("cancelButton");
gridLayout->addWidget(cancelButton, 2, 4, 1, 1);
closeButton = new QPushButton(InstallDialog);
- closeButton->setObjectName(QString::fromUtf8("closeButton"));
+ closeButton->setObjectName("closeButton");
gridLayout->addWidget(closeButton, 3, 4, 1, 1);
- spacerItem = new QSpacerItem(20, 56, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 56, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem, 4, 4, 1, 1);
label_4 = new QLabel(InstallDialog);
- label_4->setObjectName(QString::fromUtf8("label_4"));
+ label_4->setObjectName("label_4");
gridLayout->addWidget(label_4, 5, 0, 1, 1);
pathLineEdit = new QLineEdit(InstallDialog);
- pathLineEdit->setObjectName(QString::fromUtf8("pathLineEdit"));
+ pathLineEdit->setObjectName("pathLineEdit");
gridLayout->addWidget(pathLineEdit, 5, 1, 1, 2);
browseButton = new QToolButton(InstallDialog);
- browseButton->setObjectName(QString::fromUtf8("browseButton"));
+ browseButton->setObjectName("browseButton");
gridLayout->addWidget(browseButton, 5, 3, 1, 1);
line = new QFrame(InstallDialog);
- line->setObjectName(QString::fromUtf8("line"));
- line->setFrameShape(QFrame::HLine);
- line->setFrameShadow(QFrame::Sunken);
+ line->setObjectName("line");
+ line->setFrameShape(QFrame::Shape::HLine);
+ line->setFrameShadow(QFrame::Shadow::Sunken);
gridLayout->addWidget(line, 6, 0, 1, 5);
statusLabel = new QLabel(InstallDialog);
- statusLabel->setObjectName(QString::fromUtf8("statusLabel"));
+ statusLabel->setObjectName("statusLabel");
gridLayout->addWidget(statusLabel, 7, 0, 1, 2);
progressBar = new QProgressBar(InstallDialog);
- progressBar->setObjectName(QString::fromUtf8("progressBar"));
+ progressBar->setObjectName("progressBar");
progressBar->setValue(0);
progressBar->setOrientation(Qt::Horizontal);
diff --git a/tests/auto/tools/uic/baseline/languagesdialog.ui.h b/tests/auto/tools/uic/baseline/languagesdialog.ui.h
index 0c5d311c9f..cd2e1b0cd5 100644
--- a/tests/auto/tools/uic/baseline/languagesdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/languagesdialog.ui.h
@@ -39,20 +39,20 @@ public:
void setupUi(QDialog *LanguagesDialog)
{
if (LanguagesDialog->objectName().isEmpty())
- LanguagesDialog->setObjectName(QString::fromUtf8("LanguagesDialog"));
+ LanguagesDialog->setObjectName("LanguagesDialog");
LanguagesDialog->resize(400, 300);
verticalLayout = new QVBoxLayout(LanguagesDialog);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
languagesList = new QTreeWidget(LanguagesDialog);
- languagesList->setObjectName(QString::fromUtf8("languagesList"));
+ languagesList->setObjectName("languagesList");
languagesList->setIndentation(0);
verticalLayout->addWidget(languagesList);
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
upButton = new QToolButton(LanguagesDialog);
- upButton->setObjectName(QString::fromUtf8("upButton"));
+ upButton->setObjectName("upButton");
upButton->setEnabled(false);
QIcon icon;
icon.addFile(QString::fromUtf8(":/images/up.png"), QSize(), QIcon::Normal, QIcon::Off);
@@ -61,7 +61,7 @@ public:
hboxLayout->addWidget(upButton);
downButton = new QToolButton(LanguagesDialog);
- downButton->setObjectName(QString::fromUtf8("downButton"));
+ downButton->setObjectName("downButton");
downButton->setEnabled(false);
QIcon icon1;
icon1.addFile(QString::fromUtf8(":/images/down.png"), QSize(), QIcon::Normal, QIcon::Off);
@@ -70,7 +70,7 @@ public:
hboxLayout->addWidget(downButton);
removeButton = new QToolButton(LanguagesDialog);
- removeButton->setObjectName(QString::fromUtf8("removeButton"));
+ removeButton->setObjectName("removeButton");
removeButton->setEnabled(false);
QIcon icon2;
icon2.addFile(QString::fromUtf8(":/images/editdelete.png"), QSize(), QIcon::Normal, QIcon::Off);
@@ -79,7 +79,7 @@ public:
hboxLayout->addWidget(removeButton);
openFileButton = new QToolButton(LanguagesDialog);
- openFileButton->setObjectName(QString::fromUtf8("openFileButton"));
+ openFileButton->setObjectName("openFileButton");
openFileButton->setEnabled(true);
QIcon icon3;
icon3.addFile(QString::fromUtf8(":/images/mac/fileopen.png"), QSize(), QIcon::Normal, QIcon::Off);
@@ -87,12 +87,12 @@ public:
hboxLayout->addWidget(openFileButton);
- spacerItem = new QSpacerItem(121, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(121, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
okButton = new QPushButton(LanguagesDialog);
- okButton->setObjectName(QString::fromUtf8("okButton"));
+ okButton->setObjectName("okButton");
hboxLayout->addWidget(okButton);
diff --git a/tests/auto/tools/uic/baseline/listwidgeteditor.ui b/tests/auto/tools/uic/baseline/listwidgeteditor.ui
index 239923d528..e9bc8b2c94 100644
--- a/tests/auto/tools/uic/baseline/listwidgeteditor.ui
+++ b/tests/auto/tools/uic/baseline/listwidgeteditor.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>qdesigner_internal::ListWidgetEditor</class>
<widget class="QDialog" name="qdesigner_internal::ListWidgetEditor" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/listwidgeteditor.ui.h b/tests/auto/tools/uic/baseline/listwidgeteditor.ui.h
index 64336204ee..8a3247e1eb 100644
--- a/tests/auto/tools/uic/baseline/listwidgeteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/listwidgeteditor.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -80,7 +57,7 @@ public:
void setupUi(QDialog *qdesigner_internal__ListWidgetEditor)
{
if (qdesigner_internal__ListWidgetEditor->objectName().isEmpty())
- qdesigner_internal__ListWidgetEditor->setObjectName(QString::fromUtf8("qdesigner_internal__ListWidgetEditor"));
+ qdesigner_internal__ListWidgetEditor->setObjectName("qdesigner_internal__ListWidgetEditor");
qdesigner_internal__ListWidgetEditor->resize(223, 245);
vboxLayout = new QVBoxLayout(qdesigner_internal__ListWidgetEditor);
#ifndef Q_OS_MAC
@@ -89,39 +66,39 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
groupBox = new QGroupBox(qdesigner_internal__ListWidgetEditor);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
gridLayout = new QGridLayout(groupBox);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
listWidget = new QListWidget(groupBox);
- listWidget->setObjectName(QString::fromUtf8("listWidget"));
+ listWidget->setObjectName("listWidget");
gridLayout->addWidget(listWidget, 0, 0, 1, 1);
horizontalLayout_2 = new QHBoxLayout();
- horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
+ horizontalLayout_2->setObjectName("horizontalLayout_2");
newItemButton = new QToolButton(groupBox);
- newItemButton->setObjectName(QString::fromUtf8("newItemButton"));
+ newItemButton->setObjectName("newItemButton");
horizontalLayout_2->addWidget(newItemButton);
deleteItemButton = new QToolButton(groupBox);
- deleteItemButton->setObjectName(QString::fromUtf8("deleteItemButton"));
+ deleteItemButton->setObjectName("deleteItemButton");
horizontalLayout_2->addWidget(deleteItemButton);
- spacerItem = new QSpacerItem(16, 10, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(16, 10, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout_2->addItem(spacerItem);
moveItemUpButton = new QToolButton(groupBox);
- moveItemUpButton->setObjectName(QString::fromUtf8("moveItemUpButton"));
+ moveItemUpButton->setObjectName("moveItemUpButton");
horizontalLayout_2->addWidget(moveItemUpButton);
moveItemDownButton = new QToolButton(groupBox);
- moveItemDownButton->setObjectName(QString::fromUtf8("moveItemDownButton"));
+ moveItemDownButton->setObjectName("moveItemDownButton");
horizontalLayout_2->addWidget(moveItemDownButton);
@@ -129,18 +106,18 @@ public:
gridLayout->addLayout(horizontalLayout_2, 1, 0, 1, 1);
horizontalLayout = new QHBoxLayout();
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
label = new QLabel(groupBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
horizontalLayout->addWidget(label);
itemIconSelector = new qdesigner_internal::IconSelector(groupBox);
- itemIconSelector->setObjectName(QString::fromUtf8("itemIconSelector"));
+ itemIconSelector->setObjectName("itemIconSelector");
horizontalLayout->addWidget(itemIconSelector);
- horizontalSpacer = new QSpacerItem(108, 21, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer = new QSpacerItem(108, 21, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout->addItem(horizontalSpacer);
@@ -151,7 +128,7 @@ public:
vboxLayout->addWidget(groupBox);
buttonBox = new QDialogButtonBox(qdesigner_internal__ListWidgetEditor);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/mainwindow.ui.h b/tests/auto/tools/uic/baseline/mainwindow.ui.h
index c7590e3ce6..13cba301bd 100644
--- a/tests/auto/tools/uic/baseline/mainwindow.ui.h
+++ b/tests/auto/tools/uic/baseline/mainwindow.ui.h
@@ -86,14 +86,14 @@ public:
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
- MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
+ MainWindow->setObjectName("MainWindow");
MainWindow->resize(829, 813);
actionAdd_Custom_Font = new QAction(MainWindow);
- actionAdd_Custom_Font->setObjectName(QString::fromUtf8("actionAdd_Custom_Font"));
+ actionAdd_Custom_Font->setObjectName("actionAdd_Custom_Font");
action_Exit = new QAction(MainWindow);
- action_Exit->setObjectName(QString::fromUtf8("action_Exit"));
+ action_Exit->setObjectName("action_Exit");
centralwidget = new QWidget(MainWindow);
- centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
+ centralwidget->setObjectName("centralwidget");
vboxLayout = new QVBoxLayout(centralwidget);
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
@@ -101,9 +101,9 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
groupBox = new QGroupBox(centralwidget);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
hboxLayout = new QHBoxLayout(groupBox);
#ifndef Q_OS_MAC
hboxLayout->setSpacing(6);
@@ -111,44 +111,44 @@ public:
#ifndef Q_OS_MAC
hboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
label = new QLabel(groupBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
hboxLayout->addWidget(label);
fontComboBox = new QFontComboBox(groupBox);
- fontComboBox->setObjectName(QString::fromUtf8("fontComboBox"));
+ fontComboBox->setObjectName("fontComboBox");
hboxLayout->addWidget(fontComboBox);
label_2 = new QLabel(groupBox);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
hboxLayout->addWidget(label_2);
pixelSize = new QSpinBox(groupBox);
- pixelSize->setObjectName(QString::fromUtf8("pixelSize"));
+ pixelSize->setObjectName("pixelSize");
pixelSize->setMinimum(1);
hboxLayout->addWidget(pixelSize);
label_7 = new QLabel(groupBox);
- label_7->setObjectName(QString::fromUtf8("label_7"));
+ label_7->setObjectName("label_7");
hboxLayout->addWidget(label_7);
weightCombo = new QComboBox(groupBox);
- weightCombo->setObjectName(QString::fromUtf8("weightCombo"));
+ weightCombo->setObjectName("weightCombo");
hboxLayout->addWidget(weightCombo);
italic = new QCheckBox(groupBox);
- italic->setObjectName(QString::fromUtf8("italic"));
+ italic->setObjectName("italic");
hboxLayout->addWidget(italic);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
@@ -156,7 +156,7 @@ public:
vboxLayout->addWidget(groupBox);
groupBox_2 = new QGroupBox(centralwidget);
- groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
+ groupBox_2->setObjectName("groupBox_2");
vboxLayout1 = new QVBoxLayout(groupBox_2);
#ifndef Q_OS_MAC
vboxLayout1->setSpacing(6);
@@ -164,9 +164,9 @@ public:
#ifndef Q_OS_MAC
vboxLayout1->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
chooseFromCodePoints = new QRadioButton(groupBox_2);
- chooseFromCodePoints->setObjectName(QString::fromUtf8("chooseFromCodePoints"));
+ chooseFromCodePoints->setObjectName("chooseFromCodePoints");
chooseFromCodePoints->setChecked(true);
vboxLayout1->addWidget(chooseFromCodePoints);
@@ -176,9 +176,9 @@ public:
vboxLayout2->setSpacing(6);
#endif
vboxLayout2->setContentsMargins(0, 0, 0, 0);
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
characterRangeView = new QListWidget(groupBox_2);
- characterRangeView->setObjectName(QString::fromUtf8("characterRangeView"));
+ characterRangeView->setObjectName("characterRangeView");
vboxLayout2->addWidget(characterRangeView);
@@ -187,23 +187,23 @@ public:
hboxLayout1->setSpacing(6);
#endif
hboxLayout1->setContentsMargins(0, 0, 0, 0);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
selectAll = new QPushButton(groupBox_2);
- selectAll->setObjectName(QString::fromUtf8("selectAll"));
+ selectAll->setObjectName("selectAll");
hboxLayout1->addWidget(selectAll);
deselectAll = new QPushButton(groupBox_2);
- deselectAll->setObjectName(QString::fromUtf8("deselectAll"));
+ deselectAll->setObjectName("deselectAll");
hboxLayout1->addWidget(deselectAll);
invertSelection = new QPushButton(groupBox_2);
- invertSelection->setObjectName(QString::fromUtf8("invertSelection"));
+ invertSelection->setObjectName("invertSelection");
hboxLayout1->addWidget(invertSelection);
- spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout1->addItem(spacerItem1);
@@ -214,7 +214,7 @@ public:
vboxLayout1->addLayout(vboxLayout2);
chooseFromSampleFile = new QRadioButton(groupBox_2);
- chooseFromSampleFile->setObjectName(QString::fromUtf8("chooseFromSampleFile"));
+ chooseFromSampleFile->setObjectName("chooseFromSampleFile");
vboxLayout1->addWidget(chooseFromSampleFile);
@@ -223,27 +223,27 @@ public:
hboxLayout2->setSpacing(6);
#endif
hboxLayout2->setContentsMargins(0, 0, 0, 0);
- hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
+ hboxLayout2->setObjectName("hboxLayout2");
label_5 = new QLabel(groupBox_2);
- label_5->setObjectName(QString::fromUtf8("label_5"));
+ label_5->setObjectName("label_5");
label_5->setEnabled(false);
hboxLayout2->addWidget(label_5);
sampleFile = new QLineEdit(groupBox_2);
- sampleFile->setObjectName(QString::fromUtf8("sampleFile"));
+ sampleFile->setObjectName("sampleFile");
sampleFile->setEnabled(false);
hboxLayout2->addWidget(sampleFile);
browseSampleFile = new QPushButton(groupBox_2);
- browseSampleFile->setObjectName(QString::fromUtf8("browseSampleFile"));
+ browseSampleFile->setObjectName("browseSampleFile");
browseSampleFile->setEnabled(false);
hboxLayout2->addWidget(browseSampleFile);
charCount = new QLabel(groupBox_2);
- charCount->setObjectName(QString::fromUtf8("charCount"));
+ charCount->setObjectName("charCount");
charCount->setEnabled(false);
hboxLayout2->addWidget(charCount);
@@ -255,7 +255,7 @@ public:
vboxLayout->addWidget(groupBox_2);
groupBox_3 = new QGroupBox(centralwidget);
- groupBox_3->setObjectName(QString::fromUtf8("groupBox_3"));
+ groupBox_3->setObjectName("groupBox_3");
hboxLayout3 = new QHBoxLayout(groupBox_3);
#ifndef Q_OS_MAC
hboxLayout3->setSpacing(6);
@@ -263,9 +263,9 @@ public:
#ifndef Q_OS_MAC
hboxLayout3->setContentsMargins(9, 9, 9, 9);
#endif
- hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3"));
+ hboxLayout3->setObjectName("hboxLayout3");
preview = new QLineEdit(groupBox_3);
- preview->setObjectName(QString::fromUtf8("preview"));
+ preview->setObjectName("preview");
hboxLayout3->addWidget(preview);
@@ -273,7 +273,7 @@ public:
vboxLayout->addWidget(groupBox_3);
groupBox_4 = new QGroupBox(centralwidget);
- groupBox_4->setObjectName(QString::fromUtf8("groupBox_4"));
+ groupBox_4->setObjectName("groupBox_4");
hboxLayout4 = new QHBoxLayout(groupBox_4);
#ifndef Q_OS_MAC
hboxLayout4->setSpacing(6);
@@ -281,29 +281,29 @@ public:
#ifndef Q_OS_MAC
hboxLayout4->setContentsMargins(9, 9, 9, 9);
#endif
- hboxLayout4->setObjectName(QString::fromUtf8("hboxLayout4"));
+ hboxLayout4->setObjectName("hboxLayout4");
label_3 = new QLabel(groupBox_4);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
hboxLayout4->addWidget(label_3);
path = new QLineEdit(groupBox_4);
- path->setObjectName(QString::fromUtf8("path"));
+ path->setObjectName("path");
hboxLayout4->addWidget(path);
browsePath = new QPushButton(groupBox_4);
- browsePath->setObjectName(QString::fromUtf8("browsePath"));
+ browsePath->setObjectName("browsePath");
hboxLayout4->addWidget(browsePath);
label_4 = new QLabel(groupBox_4);
- label_4->setObjectName(QString::fromUtf8("label_4"));
+ label_4->setObjectName("label_4");
hboxLayout4->addWidget(label_4);
fileName = new QLineEdit(groupBox_4);
- fileName->setObjectName(QString::fromUtf8("fileName"));
+ fileName->setObjectName("fileName");
fileName->setEnabled(false);
hboxLayout4->addWidget(fileName);
@@ -316,13 +316,13 @@ public:
hboxLayout5->setSpacing(6);
#endif
hboxLayout5->setContentsMargins(0, 0, 0, 0);
- hboxLayout5->setObjectName(QString::fromUtf8("hboxLayout5"));
+ hboxLayout5->setObjectName("hboxLayout5");
generate = new QPushButton(centralwidget);
- generate->setObjectName(QString::fromUtf8("generate"));
+ generate->setObjectName("generate");
hboxLayout5->addWidget(generate);
- spacerItem2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem2 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout5->addItem(spacerItem2);
@@ -331,13 +331,13 @@ public:
MainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(MainWindow);
- menubar->setObjectName(QString::fromUtf8("menubar"));
+ menubar->setObjectName("menubar");
menubar->setGeometry(QRect(0, 0, 829, 29));
menuFile = new QMenu(menubar);
- menuFile->setObjectName(QString::fromUtf8("menuFile"));
+ menuFile->setObjectName("menuFile");
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
- statusbar->setObjectName(QString::fromUtf8("statusbar"));
+ statusbar->setObjectName("statusbar");
MainWindow->setStatusBar(statusbar);
menubar->addAction(menuFile->menuAction());
diff --git a/tests/auto/tools/uic/baseline/mydialog.ui.h b/tests/auto/tools/uic/baseline/mydialog.ui.h
index 4ea9fd9e85..0d8b088246 100644
--- a/tests/auto/tools/uic/baseline/mydialog.ui.h
+++ b/tests/auto/tools/uic/baseline/mydialog.ui.h
@@ -28,7 +28,7 @@ public:
void setupUi(QDialog *MyDialog)
{
if (MyDialog->objectName().isEmpty())
- MyDialog->setObjectName(QString::fromUtf8("MyDialog"));
+ MyDialog->setObjectName("MyDialog");
MyDialog->resize(401, 70);
vboxLayout = new QVBoxLayout(MyDialog);
#ifndef Q_OS_MAC
@@ -37,14 +37,14 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
aLabel = new QLabel(MyDialog);
- aLabel->setObjectName(QString::fromUtf8("aLabel"));
+ aLabel->setObjectName("aLabel");
vboxLayout->addWidget(aLabel);
aButton = new QPushButton(MyDialog);
- aButton->setObjectName(QString::fromUtf8("aButton"));
+ aButton->setObjectName("aButton");
vboxLayout->addWidget(aButton);
diff --git a/tests/auto/tools/uic/baseline/myform.ui.h b/tests/auto/tools/uic/baseline/myform.ui.h
index 9a8f643023..a643fcc16a 100644
--- a/tests/auto/tools/uic/baseline/myform.ui.h
+++ b/tests/auto/tools/uic/baseline/myform.ui.h
@@ -41,70 +41,70 @@ public:
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
- Form->setObjectName(QString::fromUtf8("Form"));
+ Form->setObjectName("Form");
Form->resize(258, 224);
vboxLayout = new QVBoxLayout(Form);
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
#endif
vboxLayout->setContentsMargins(8, 8, 8, 8);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
groupBox = new QGroupBox(Form);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
gridLayout = new QGridLayout(groupBox);
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
#endif
gridLayout->setContentsMargins(8, 8, 8, 8);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
radioButton_2 = new QRadioButton(groupBox);
- radioButton_2->setObjectName(QString::fromUtf8("radioButton_2"));
+ radioButton_2->setObjectName("radioButton_2");
gridLayout->addWidget(radioButton_2, 1, 0, 1, 1);
radioButton = new QRadioButton(groupBox);
- radioButton->setObjectName(QString::fromUtf8("radioButton"));
+ radioButton->setObjectName("radioButton");
radioButton->setChecked(true);
gridLayout->addWidget(radioButton, 0, 0, 1, 1);
checkBox_2 = new QCheckBox(groupBox);
- checkBox_2->setObjectName(QString::fromUtf8("checkBox_2"));
+ checkBox_2->setObjectName("checkBox_2");
checkBox_2->setChecked(true);
gridLayout->addWidget(checkBox_2, 1, 1, 1, 1);
- spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem, 5, 0, 1, 1);
checkBox = new QCheckBox(groupBox);
- checkBox->setObjectName(QString::fromUtf8("checkBox"));
+ checkBox->setObjectName("checkBox");
gridLayout->addWidget(checkBox, 0, 1, 1, 1);
radioButton_2_2 = new QRadioButton(groupBox);
- radioButton_2_2->setObjectName(QString::fromUtf8("radioButton_2_2"));
+ radioButton_2_2->setObjectName("radioButton_2_2");
gridLayout->addWidget(radioButton_2_2, 2, 0, 1, 1);
radioButton_3 = new QRadioButton(groupBox);
- radioButton_3->setObjectName(QString::fromUtf8("radioButton_3"));
+ radioButton_3->setObjectName("radioButton_3");
gridLayout->addWidget(radioButton_3, 3, 0, 1, 1);
radioButton_4 = new QRadioButton(groupBox);
- radioButton_4->setObjectName(QString::fromUtf8("radioButton_4"));
+ radioButton_4->setObjectName("radioButton_4");
gridLayout->addWidget(radioButton_4, 4, 0, 1, 1);
checkBox_3 = new QCheckBox(groupBox);
- checkBox_3->setObjectName(QString::fromUtf8("checkBox_3"));
+ checkBox_3->setObjectName("checkBox_3");
gridLayout->addWidget(checkBox_3, 2, 1, 1, 1);
checkBox_4 = new QCheckBox(groupBox);
- checkBox_4->setObjectName(QString::fromUtf8("checkBox_4"));
+ checkBox_4->setObjectName("checkBox_4");
checkBox_4->setChecked(true);
gridLayout->addWidget(checkBox_4, 3, 1, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/newactiondialog.ui b/tests/auto/tools/uic/baseline/newactiondialog.ui
index 802a5cbc01..8e452685a6 100644
--- a/tests/auto/tools/uic/baseline/newactiondialog.ui
+++ b/tests/auto/tools/uic/baseline/newactiondialog.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>qdesigner_internal::NewActionDialog</class>
<widget class="QDialog" name="qdesigner_internal::NewActionDialog" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/newactiondialog.ui.h b/tests/auto/tools/uic/baseline/newactiondialog.ui.h
index 2bb0daa4ef..3f1fe13998 100644
--- a/tests/auto/tools/uic/baseline/newactiondialog.ui.h
+++ b/tests/auto/tools/uic/baseline/newactiondialog.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -77,46 +54,46 @@ public:
void setupUi(QDialog *qdesigner_internal__NewActionDialog)
{
if (qdesigner_internal__NewActionDialog->objectName().isEmpty())
- qdesigner_internal__NewActionDialog->setObjectName(QString::fromUtf8("qdesigner_internal__NewActionDialog"));
+ qdesigner_internal__NewActionDialog->setObjectName("qdesigner_internal__NewActionDialog");
qdesigner_internal__NewActionDialog->resize(363, 156);
verticalLayout = new QVBoxLayout(qdesigner_internal__NewActionDialog);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
formLayout = new QFormLayout();
- formLayout->setObjectName(QString::fromUtf8("formLayout"));
+ formLayout->setObjectName("formLayout");
label = new QLabel(qdesigner_internal__NewActionDialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
formLayout->setWidget(0, QFormLayout::LabelRole, label);
editActionText = new QLineEdit(qdesigner_internal__NewActionDialog);
- editActionText->setObjectName(QString::fromUtf8("editActionText"));
+ editActionText->setObjectName("editActionText");
editActionText->setMinimumSize(QSize(255, 0));
formLayout->setWidget(0, QFormLayout::FieldRole, editActionText);
label_3 = new QLabel(qdesigner_internal__NewActionDialog);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
formLayout->setWidget(1, QFormLayout::LabelRole, label_3);
editObjectName = new QLineEdit(qdesigner_internal__NewActionDialog);
- editObjectName->setObjectName(QString::fromUtf8("editObjectName"));
+ editObjectName->setObjectName("editObjectName");
formLayout->setWidget(1, QFormLayout::FieldRole, editObjectName);
label_2 = new QLabel(qdesigner_internal__NewActionDialog);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
formLayout->setWidget(2, QFormLayout::LabelRole, label_2);
horizontalLayout = new QHBoxLayout();
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
iconSelector = new qdesigner_internal::IconSelector(qdesigner_internal__NewActionDialog);
- iconSelector->setObjectName(QString::fromUtf8("iconSelector"));
+ iconSelector->setObjectName("iconSelector");
horizontalLayout->addWidget(iconSelector);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout->addItem(spacerItem);
@@ -126,19 +103,19 @@ public:
verticalLayout->addLayout(formLayout);
- verticalSpacer = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ verticalSpacer = new QSpacerItem(0, 0, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
verticalLayout->addItem(verticalSpacer);
line = new QFrame(qdesigner_internal__NewActionDialog);
- line->setObjectName(QString::fromUtf8("line"));
- line->setFrameShape(QFrame::HLine);
- line->setFrameShadow(QFrame::Sunken);
+ line->setObjectName("line");
+ line->setFrameShape(QFrame::Shape::HLine);
+ line->setFrameShadow(QFrame::Shadow::Sunken);
verticalLayout->addWidget(line);
buttonBox = new QDialogButtonBox(qdesigner_internal__NewActionDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/newdynamicpropertydialog.ui.h b/tests/auto/tools/uic/baseline/newdynamicpropertydialog.ui.h
index c377320702..e81adac644 100644
--- a/tests/auto/tools/uic/baseline/newdynamicpropertydialog.ui.h
+++ b/tests/auto/tools/uic/baseline/newdynamicpropertydialog.ui.h
@@ -43,21 +43,21 @@ public:
void setupUi(QDialog *qdesigner_internal__NewDynamicPropertyDialog)
{
if (qdesigner_internal__NewDynamicPropertyDialog->objectName().isEmpty())
- qdesigner_internal__NewDynamicPropertyDialog->setObjectName(QString::fromUtf8("qdesigner_internal__NewDynamicPropertyDialog"));
+ qdesigner_internal__NewDynamicPropertyDialog->setObjectName("qdesigner_internal__NewDynamicPropertyDialog");
qdesigner_internal__NewDynamicPropertyDialog->resize(340, 118);
verticalLayout = new QVBoxLayout(qdesigner_internal__NewDynamicPropertyDialog);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
formLayout = new QFormLayout();
- formLayout->setObjectName(QString::fromUtf8("formLayout"));
+ formLayout->setObjectName("formLayout");
m_lineEdit = new QLineEdit(qdesigner_internal__NewDynamicPropertyDialog);
- m_lineEdit->setObjectName(QString::fromUtf8("m_lineEdit"));
+ m_lineEdit->setObjectName("m_lineEdit");
m_lineEdit->setMinimumSize(QSize(220, 0));
formLayout->setWidget(0, QFormLayout::FieldRole, m_lineEdit);
label = new QLabel(qdesigner_internal__NewDynamicPropertyDialog);
- label->setObjectName(QString::fromUtf8("label"));
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ label->setObjectName("label");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
@@ -66,13 +66,13 @@ public:
formLayout->setWidget(0, QFormLayout::LabelRole, label);
horizontalLayout = new QHBoxLayout();
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
m_comboBox = new QComboBox(qdesigner_internal__NewDynamicPropertyDialog);
- m_comboBox->setObjectName(QString::fromUtf8("m_comboBox"));
+ m_comboBox->setObjectName("m_comboBox");
horizontalLayout->addWidget(m_comboBox);
- horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout->addItem(horizontalSpacer);
@@ -80,7 +80,7 @@ public:
formLayout->setLayout(1, QFormLayout::FieldRole, horizontalLayout);
label_2 = new QLabel(qdesigner_internal__NewDynamicPropertyDialog);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
sizePolicy.setHeightForWidth(label_2->sizePolicy().hasHeightForWidth());
label_2->setSizePolicy(sizePolicy);
@@ -89,12 +89,12 @@ public:
verticalLayout->addLayout(formLayout);
- spacerItem = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(0, 0, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
verticalLayout->addItem(spacerItem);
m_buttonBox = new QDialogButtonBox(qdesigner_internal__NewDynamicPropertyDialog);
- m_buttonBox->setObjectName(QString::fromUtf8("m_buttonBox"));
+ m_buttonBox->setObjectName("m_buttonBox");
m_buttonBox->setOrientation(Qt::Horizontal);
m_buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
m_buttonBox->setCenterButtons(false);
diff --git a/tests/auto/tools/uic/baseline/newform.ui b/tests/auto/tools/uic/baseline/newform.ui
index 210c3a4fd4..adcf8693b4 100644
--- a/tests/auto/tools/uic/baseline/newform.ui
+++ b/tests/auto/tools/uic/baseline/newform.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<exportmacro></exportmacro>
<class>NewForm</class>
<widget class="QDialog" name="NewForm" >
diff --git a/tests/auto/tools/uic/baseline/newform.ui.h b/tests/auto/tools/uic/baseline/newform.ui.h
index 261b96a017..95b7279763 100644
--- a/tests/auto/tools/uic/baseline/newform.ui.h
+++ b/tests/auto/tools/uic/baseline/newform.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -68,7 +45,7 @@ public:
void setupUi(QDialog *NewForm)
{
if (NewForm->objectName().isEmpty())
- NewForm->setObjectName(QString::fromUtf8("NewForm"));
+ NewForm->setObjectName("NewForm");
NewForm->resize(495, 319);
vboxLayout = new QVBoxLayout(NewForm);
#ifndef Q_OS_MAC
@@ -77,15 +54,15 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
hboxLayout = new QHBoxLayout();
#ifndef Q_OS_MAC
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(1, 1, 1, 1);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
treeWidget = new QTreeWidget(NewForm);
- treeWidget->setObjectName(QString::fromUtf8("treeWidget"));
+ treeWidget->setObjectName("treeWidget");
treeWidget->setIconSize(QSize(128, 128));
treeWidget->setRootIsDecorated(false);
treeWidget->setColumnCount(1);
@@ -93,8 +70,8 @@ public:
hboxLayout->addWidget(treeWidget);
lblPreview = new QLabel(NewForm);
- lblPreview->setObjectName(QString::fromUtf8("lblPreview"));
- QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ lblPreview->setObjectName("lblPreview");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(lblPreview->sizePolicy().hasHeightForWidth());
@@ -109,19 +86,19 @@ public:
vboxLayout->addLayout(hboxLayout);
horizontalLine = new QFrame(NewForm);
- horizontalLine->setObjectName(QString::fromUtf8("horizontalLine"));
+ horizontalLine->setObjectName("horizontalLine");
horizontalLine->setFrameShape(QFrame::HLine);
horizontalLine->setFrameShadow(QFrame::Sunken);
vboxLayout->addWidget(horizontalLine);
chkShowOnStartup = new QCheckBox(NewForm);
- chkShowOnStartup->setObjectName(QString::fromUtf8("chkShowOnStartup"));
+ chkShowOnStartup->setObjectName("chkShowOnStartup");
vboxLayout->addWidget(chkShowOnStartup);
buttonBox = new QDialogButtonBox(NewForm);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
vboxLayout->addWidget(buttonBox);
diff --git a/tests/auto/tools/uic/baseline/orderdialog.ui b/tests/auto/tools/uic/baseline/orderdialog.ui
index 71b6bdd7e6..3d0a40956d 100644
--- a/tests/auto/tools/uic/baseline/orderdialog.ui
+++ b/tests/auto/tools/uic/baseline/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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>qdesigner_internal::OrderDialog</class>
<widget class="QDialog" name="qdesigner_internal::OrderDialog" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/orderdialog.ui.h b/tests/auto/tools/uic/baseline/orderdialog.ui.h
index a336b1444b..14916367a6 100644
--- a/tests/auto/tools/uic/baseline/orderdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/orderdialog.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -71,18 +48,18 @@ public:
void setupUi(QDialog *qdesigner_internal__OrderDialog)
{
if (qdesigner_internal__OrderDialog->objectName().isEmpty())
- qdesigner_internal__OrderDialog->setObjectName(QString::fromUtf8("qdesigner_internal__OrderDialog"));
+ qdesigner_internal__OrderDialog->setObjectName("qdesigner_internal__OrderDialog");
qdesigner_internal__OrderDialog->resize(467, 310);
vboxLayout = new QVBoxLayout(qdesigner_internal__OrderDialog);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
groupBox = new QGroupBox(qdesigner_internal__OrderDialog);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
hboxLayout = new QHBoxLayout(groupBox);
hboxLayout->setSpacing(6);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
hboxLayout->setContentsMargins(9, 9, 9, 9);
pageList = new QListWidget(groupBox);
- pageList->setObjectName(QString::fromUtf8("pageList"));
+ pageList->setObjectName("pageList");
pageList->setMinimumSize(QSize(344, 0));
pageList->setDragDropMode(QAbstractItemView::InternalMove);
pageList->setSelectionMode(QAbstractItemView::ContiguousSelection);
@@ -92,19 +69,19 @@ public:
vboxLayout1 = new QVBoxLayout();
vboxLayout1->setSpacing(6);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
vboxLayout1->setContentsMargins(0, 0, 0, 0);
upButton = new QToolButton(groupBox);
- upButton->setObjectName(QString::fromUtf8("upButton"));
+ upButton->setObjectName("upButton");
vboxLayout1->addWidget(upButton);
downButton = new QToolButton(groupBox);
- downButton->setObjectName(QString::fromUtf8("downButton"));
+ downButton->setObjectName("downButton");
vboxLayout1->addWidget(downButton);
- spacerItem = new QSpacerItem(20, 99, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 99, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout1->addItem(spacerItem);
@@ -115,7 +92,7 @@ public:
vboxLayout->addWidget(groupBox);
buttonBox = new QDialogButtonBox(qdesigner_internal__OrderDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::Reset);
diff --git a/tests/auto/tools/uic/baseline/outputpage.ui b/tests/auto/tools/uic/baseline/outputpage.ui
index 755f818085..95129c76fe 100644
--- a/tests/auto/tools/uic/baseline/outputpage.ui
+++ b/tests/auto/tools/uic/baseline/outputpage.ui
@@ -19,7 +19,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/outputpage.ui.h b/tests/auto/tools/uic/baseline/outputpage.ui.h
index 592d5f774b..ee6d9240ae 100644
--- a/tests/auto/tools/uic/baseline/outputpage.ui.h
+++ b/tests/auto/tools/uic/baseline/outputpage.ui.h
@@ -33,17 +33,17 @@ public:
void setupUi(QWidget *OutputPage)
{
if (OutputPage->objectName().isEmpty())
- OutputPage->setObjectName(QString::fromUtf8("OutputPage"));
+ OutputPage->setObjectName("OutputPage");
OutputPage->resize(417, 242);
gridLayout = new QGridLayout(OutputPage);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
- spacerItem = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ gridLayout->setObjectName("gridLayout");
+ spacerItem = new QSpacerItem(20, 20, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem, 0, 1, 1, 1);
label = new QLabel(OutputPage);
- label->setObjectName(QString::fromUtf8("label"));
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ label->setObjectName("label");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
@@ -52,8 +52,8 @@ public:
gridLayout->addWidget(label, 1, 0, 1, 1);
projectLineEdit = new QLineEdit(OutputPage);
- projectLineEdit->setObjectName(QString::fromUtf8("projectLineEdit"));
- QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Fixed);
+ projectLineEdit->setObjectName("projectLineEdit");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Fixed);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(projectLineEdit->sizePolicy().hasHeightForWidth());
@@ -62,20 +62,20 @@ public:
gridLayout->addWidget(projectLineEdit, 1, 1, 1, 1);
label_2 = new QLabel(OutputPage);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
sizePolicy.setHeightForWidth(label_2->sizePolicy().hasHeightForWidth());
label_2->setSizePolicy(sizePolicy);
gridLayout->addWidget(label_2, 2, 0, 1, 1);
collectionLineEdit = new QLineEdit(OutputPage);
- collectionLineEdit->setObjectName(QString::fromUtf8("collectionLineEdit"));
+ collectionLineEdit->setObjectName("collectionLineEdit");
sizePolicy1.setHeightForWidth(collectionLineEdit->sizePolicy().hasHeightForWidth());
collectionLineEdit->setSizePolicy(sizePolicy1);
gridLayout->addWidget(collectionLineEdit, 2, 1, 1, 1);
- spacerItem1 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem1 = new QSpacerItem(20, 20, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem1, 3, 1, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/pagefold.ui.h b/tests/auto/tools/uic/baseline/pagefold.ui.h
index 1f4dedf6f3..00a8ace49f 100644
--- a/tests/auto/tools/uic/baseline/pagefold.ui.h
+++ b/tests/auto/tools/uic/baseline/pagefold.ui.h
@@ -68,18 +68,18 @@ public:
void setupUi(QMainWindow *MainWindow)
{
if (MainWindow->objectName().isEmpty())
- MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
+ MainWindow->setObjectName("MainWindow");
MainWindow->resize(392, 412);
exitAction = new QAction(MainWindow);
- exitAction->setObjectName(QString::fromUtf8("exitAction"));
+ exitAction->setObjectName("exitAction");
aboutQtAction = new QAction(MainWindow);
- aboutQtAction->setObjectName(QString::fromUtf8("aboutQtAction"));
+ aboutQtAction->setObjectName("aboutQtAction");
editStyleAction = new QAction(MainWindow);
- editStyleAction->setObjectName(QString::fromUtf8("editStyleAction"));
+ editStyleAction->setObjectName("editStyleAction");
aboutAction = new QAction(MainWindow);
- aboutAction->setObjectName(QString::fromUtf8("aboutAction"));
+ aboutAction->setObjectName("aboutAction");
centralwidget = new QWidget(MainWindow);
- centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
+ centralwidget->setObjectName("centralwidget");
vboxLayout = new QVBoxLayout(centralwidget);
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
@@ -87,9 +87,9 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
mainFrame = new QFrame(centralwidget);
- mainFrame->setObjectName(QString::fromUtf8("mainFrame"));
+ mainFrame->setObjectName("mainFrame");
mainFrame->setFrameShape(QFrame::StyledPanel);
mainFrame->setFrameShadow(QFrame::Raised);
gridLayout = new QGridLayout(mainFrame);
@@ -99,72 +99,72 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(9, 9, 9, 9);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
nameCombo = new QComboBox(mainFrame);
nameCombo->addItem(QString());
nameCombo->addItem(QString());
nameCombo->addItem(QString());
nameCombo->addItem(QString());
- nameCombo->setObjectName(QString::fromUtf8("nameCombo"));
+ nameCombo->setObjectName("nameCombo");
nameCombo->setEditable(true);
gridLayout->addWidget(nameCombo, 0, 1, 1, 3);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem, 1, 3, 1, 1);
femaleRadioButton = new QRadioButton(mainFrame);
- femaleRadioButton->setObjectName(QString::fromUtf8("femaleRadioButton"));
+ femaleRadioButton->setObjectName("femaleRadioButton");
gridLayout->addWidget(femaleRadioButton, 1, 2, 1, 1);
genderLabel = new QLabel(mainFrame);
- genderLabel->setObjectName(QString::fromUtf8("genderLabel"));
+ genderLabel->setObjectName("genderLabel");
gridLayout->addWidget(genderLabel, 1, 0, 1, 1);
ageLabel = new QLabel(mainFrame);
- ageLabel->setObjectName(QString::fromUtf8("ageLabel"));
+ ageLabel->setObjectName("ageLabel");
gridLayout->addWidget(ageLabel, 2, 0, 1, 1);
maleRadioButton = new QRadioButton(mainFrame);
- maleRadioButton->setObjectName(QString::fromUtf8("maleRadioButton"));
+ maleRadioButton->setObjectName("maleRadioButton");
gridLayout->addWidget(maleRadioButton, 1, 1, 1, 1);
nameLabel = new QLabel(mainFrame);
- nameLabel->setObjectName(QString::fromUtf8("nameLabel"));
+ nameLabel->setObjectName("nameLabel");
gridLayout->addWidget(nameLabel, 0, 0, 1, 1);
passwordLabel = new QLabel(mainFrame);
- passwordLabel->setObjectName(QString::fromUtf8("passwordLabel"));
+ passwordLabel->setObjectName("passwordLabel");
gridLayout->addWidget(passwordLabel, 3, 0, 1, 1);
ageSpinBox = new QSpinBox(mainFrame);
- ageSpinBox->setObjectName(QString::fromUtf8("ageSpinBox"));
+ ageSpinBox->setObjectName("ageSpinBox");
ageSpinBox->setMinimum(12);
ageSpinBox->setValue(22);
gridLayout->addWidget(ageSpinBox, 2, 1, 1, 3);
buttonBox = new QDialogButtonBox(mainFrame);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
gridLayout->addWidget(buttonBox, 7, 2, 1, 2);
agreeCheckBox = new QCheckBox(mainFrame);
- agreeCheckBox->setObjectName(QString::fromUtf8("agreeCheckBox"));
+ agreeCheckBox->setObjectName("agreeCheckBox");
gridLayout->addWidget(agreeCheckBox, 6, 0, 1, 4);
passwordEdit = new QLineEdit(mainFrame);
- passwordEdit->setObjectName(QString::fromUtf8("passwordEdit"));
+ passwordEdit->setObjectName("passwordEdit");
passwordEdit->setEchoMode(QLineEdit::Password);
gridLayout->addWidget(passwordEdit, 3, 1, 1, 3);
@@ -173,12 +173,12 @@ public:
new QListWidgetItem(professionList);
new QListWidgetItem(professionList);
new QListWidgetItem(professionList);
- professionList->setObjectName(QString::fromUtf8("professionList"));
+ professionList->setObjectName("professionList");
gridLayout->addWidget(professionList, 5, 1, 1, 3);
label = new QLabel(mainFrame);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 5, 0, 1, 1);
@@ -190,12 +190,12 @@ public:
countryCombo->addItem(QString());
countryCombo->addItem(QString());
countryCombo->addItem(QString());
- countryCombo->setObjectName(QString::fromUtf8("countryCombo"));
+ countryCombo->setObjectName("countryCombo");
gridLayout->addWidget(countryCombo, 4, 1, 1, 3);
countryLabel = new QLabel(mainFrame);
- countryLabel->setObjectName(QString::fromUtf8("countryLabel"));
+ countryLabel->setObjectName("countryLabel");
gridLayout->addWidget(countryLabel, 4, 0, 1, 1);
@@ -204,15 +204,15 @@ public:
MainWindow->setCentralWidget(centralwidget);
menubar = new QMenuBar(MainWindow);
- menubar->setObjectName(QString::fromUtf8("menubar"));
+ menubar->setObjectName("menubar");
menubar->setGeometry(QRect(0, 0, 392, 25));
menu_File = new QMenu(menubar);
- menu_File->setObjectName(QString::fromUtf8("menu_File"));
+ menu_File->setObjectName("menu_File");
menu_Help = new QMenu(menubar);
- menu_Help->setObjectName(QString::fromUtf8("menu_Help"));
+ menu_Help->setObjectName("menu_Help");
MainWindow->setMenuBar(menubar);
statusbar = new QStatusBar(MainWindow);
- statusbar->setObjectName(QString::fromUtf8("statusbar"));
+ statusbar->setObjectName("statusbar");
MainWindow->setStatusBar(statusbar);
#if QT_CONFIG(shortcut)
ageLabel->setBuddy(ageSpinBox);
diff --git a/tests/auto/tools/uic/baseline/paletteeditor.ui b/tests/auto/tools/uic/baseline/paletteeditor.ui
index a4226caa27..62eaaa03ff 100644
--- a/tests/auto/tools/uic/baseline/paletteeditor.ui
+++ b/tests/auto/tools/uic/baseline/paletteeditor.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>qdesigner_internal::PaletteEditor</class>
<widget class="QDialog" name="qdesigner_internal::PaletteEditor" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/paletteeditor.ui.h b/tests/auto/tools/uic/baseline/paletteeditor.ui.h
index a49d238c15..b0de3d1552 100644
--- a/tests/auto/tools/uic/baseline/paletteeditor.ui.h
+++ b/tests/auto/tools/uic/baseline/paletteeditor.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -80,9 +57,9 @@ public:
void setupUi(QDialog *qdesigner_internal__PaletteEditor)
{
if (qdesigner_internal__PaletteEditor->objectName().isEmpty())
- qdesigner_internal__PaletteEditor->setObjectName(QString::fromUtf8("qdesigner_internal__PaletteEditor"));
+ qdesigner_internal__PaletteEditor->setObjectName("qdesigner_internal__PaletteEditor");
qdesigner_internal__PaletteEditor->resize(365, 409);
- QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(qdesigner_internal__PaletteEditor->sizePolicy().hasHeightForWidth());
@@ -94,9 +71,9 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
advancedBox = new QGroupBox(qdesigner_internal__PaletteEditor);
- advancedBox->setObjectName(QString::fromUtf8("advancedBox"));
+ advancedBox->setObjectName("advancedBox");
advancedBox->setMinimumSize(QSize(0, 0));
advancedBox->setMaximumSize(QSize(16777215, 16777215));
gridLayout = new QGridLayout(advancedBox);
@@ -106,10 +83,10 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(9, 9, 9, 9);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
buildButton = new QtColorButton(advancedBox);
- buildButton->setObjectName(QString::fromUtf8("buildButton"));
- QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Ignored);
+ buildButton->setObjectName("buildButton");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Ignored);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(buildButton->sizePolicy().hasHeightForWidth());
@@ -118,24 +95,24 @@ public:
gridLayout->addWidget(buildButton, 0, 1, 1, 1);
paletteView = new QTreeView(advancedBox);
- paletteView->setObjectName(QString::fromUtf8("paletteView"));
+ paletteView->setObjectName("paletteView");
paletteView->setMinimumSize(QSize(0, 200));
gridLayout->addWidget(paletteView, 1, 0, 1, 4);
detailsRadio = new QRadioButton(advancedBox);
- detailsRadio->setObjectName(QString::fromUtf8("detailsRadio"));
+ detailsRadio->setObjectName("detailsRadio");
gridLayout->addWidget(detailsRadio, 0, 3, 1, 1);
computeRadio = new QRadioButton(advancedBox);
- computeRadio->setObjectName(QString::fromUtf8("computeRadio"));
+ computeRadio->setObjectName("computeRadio");
computeRadio->setChecked(true);
gridLayout->addWidget(computeRadio, 0, 2, 1, 1);
label = new QLabel(advancedBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 1);
@@ -143,8 +120,8 @@ public:
vboxLayout->addWidget(advancedBox);
GroupBox126 = new QGroupBox(qdesigner_internal__PaletteEditor);
- GroupBox126->setObjectName(QString::fromUtf8("GroupBox126"));
- QSizePolicy sizePolicy2(QSizePolicy::Preferred, QSizePolicy::Expanding);
+ GroupBox126->setObjectName("GroupBox126");
+ QSizePolicy sizePolicy2(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Expanding);
sizePolicy2.setHorizontalStretch(0);
sizePolicy2.setVerticalStretch(0);
sizePolicy2.setHeightForWidth(GroupBox126->sizePolicy().hasHeightForWidth());
@@ -154,25 +131,25 @@ public:
gridLayout1->setSpacing(6);
#endif
gridLayout1->setContentsMargins(8, 8, 8, 8);
- gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+ gridLayout1->setObjectName("gridLayout1");
disabledRadio = new QRadioButton(GroupBox126);
- disabledRadio->setObjectName(QString::fromUtf8("disabledRadio"));
+ disabledRadio->setObjectName("disabledRadio");
gridLayout1->addWidget(disabledRadio, 0, 2, 1, 1);
inactiveRadio = new QRadioButton(GroupBox126);
- inactiveRadio->setObjectName(QString::fromUtf8("inactiveRadio"));
+ inactiveRadio->setObjectName("inactiveRadio");
gridLayout1->addWidget(inactiveRadio, 0, 1, 1, 1);
activeRadio = new QRadioButton(GroupBox126);
- activeRadio->setObjectName(QString::fromUtf8("activeRadio"));
+ activeRadio->setObjectName("activeRadio");
activeRadio->setChecked(true);
gridLayout1->addWidget(activeRadio, 0, 0, 1, 1);
previewFrame = new qdesigner_internal::PreviewFrame(GroupBox126);
- previewFrame->setObjectName(QString::fromUtf8("previewFrame"));
+ previewFrame->setObjectName("previewFrame");
sizePolicy.setHeightForWidth(previewFrame->sizePolicy().hasHeightForWidth());
previewFrame->setSizePolicy(sizePolicy);
@@ -182,7 +159,7 @@ public:
vboxLayout->addWidget(GroupBox126);
buttonBox = new QDialogButtonBox(qdesigner_internal__PaletteEditor);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/passworddialog.ui.h b/tests/auto/tools/uic/baseline/passworddialog.ui.h
index 563d2be4ce..4ff520c355 100644
--- a/tests/auto/tools/uic/baseline/passworddialog.ui.h
+++ b/tests/auto/tools/uic/baseline/passworddialog.ui.h
@@ -37,20 +37,20 @@ public:
void setupUi(QDialog *PasswordDialog)
{
if (PasswordDialog->objectName().isEmpty())
- PasswordDialog->setObjectName(QString::fromUtf8("PasswordDialog"));
+ PasswordDialog->setObjectName("PasswordDialog");
PasswordDialog->resize(399, 148);
gridLayout = new QGridLayout(PasswordDialog);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
iconLabel = new QLabel(PasswordDialog);
- iconLabel->setObjectName(QString::fromUtf8("iconLabel"));
+ iconLabel->setObjectName("iconLabel");
hboxLayout->addWidget(iconLabel);
introLabel = new QLabel(PasswordDialog);
- introLabel->setObjectName(QString::fromUtf8("introLabel"));
- QSizePolicy sizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+ introLabel->setObjectName("introLabel");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::MinimumExpanding, QSizePolicy::Policy::MinimumExpanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(introLabel->sizePolicy().hasHeightForWidth());
@@ -62,28 +62,28 @@ public:
gridLayout->addLayout(hboxLayout, 0, 0, 1, 2);
label = new QLabel(PasswordDialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 1, 0, 1, 1);
userNameLineEdit = new QLineEdit(PasswordDialog);
- userNameLineEdit->setObjectName(QString::fromUtf8("userNameLineEdit"));
+ userNameLineEdit->setObjectName("userNameLineEdit");
gridLayout->addWidget(userNameLineEdit, 1, 1, 1, 1);
lblPassword = new QLabel(PasswordDialog);
- lblPassword->setObjectName(QString::fromUtf8("lblPassword"));
+ lblPassword->setObjectName("lblPassword");
gridLayout->addWidget(lblPassword, 2, 0, 1, 1);
passwordLineEdit = new QLineEdit(PasswordDialog);
- passwordLineEdit->setObjectName(QString::fromUtf8("passwordLineEdit"));
+ passwordLineEdit->setObjectName("passwordLineEdit");
passwordLineEdit->setEchoMode(QLineEdit::Password);
gridLayout->addWidget(passwordLineEdit, 2, 1, 1, 1);
buttonBox = new QDialogButtonBox(PasswordDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/pathpage.ui b/tests/auto/tools/uic/baseline/pathpage.ui
index 89083915dd..06637e6a53 100644
--- a/tests/auto/tools/uic/baseline/pathpage.ui
+++ b/tests/auto/tools/uic/baseline/pathpage.ui
@@ -35,7 +35,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/pathpage.ui.h b/tests/auto/tools/uic/baseline/pathpage.ui.h
index d769581dbe..3e7a8b8622 100644
--- a/tests/auto/tools/uic/baseline/pathpage.ui.h
+++ b/tests/auto/tools/uic/baseline/pathpage.ui.h
@@ -38,13 +38,13 @@ public:
void setupUi(QWidget *PathPage)
{
if (PathPage->objectName().isEmpty())
- PathPage->setObjectName(QString::fromUtf8("PathPage"));
+ PathPage->setObjectName("PathPage");
PathPage->resize(417, 243);
gridLayout = new QGridLayout(PathPage);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label_2 = new QLabel(PathPage);
- label_2->setObjectName(QString::fromUtf8("label_2"));
- QSizePolicy sizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
+ label_2->setObjectName("label_2");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Maximum, QSizePolicy::Policy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(label_2->sizePolicy().hasHeightForWidth());
@@ -53,27 +53,27 @@ public:
gridLayout->addWidget(label_2, 0, 0, 1, 1);
filterLineEdit = new QLineEdit(PathPage);
- filterLineEdit->setObjectName(QString::fromUtf8("filterLineEdit"));
+ filterLineEdit->setObjectName("filterLineEdit");
gridLayout->addWidget(filterLineEdit, 0, 1, 1, 2);
- spacerItem = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ spacerItem = new QSpacerItem(20, 10, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem, 1, 1, 1, 1);
label = new QLabel(PathPage);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 2, 0, 1, 3);
pathListWidget = new QListWidget(PathPage);
- pathListWidget->setObjectName(QString::fromUtf8("pathListWidget"));
+ pathListWidget->setObjectName("pathListWidget");
gridLayout->addWidget(pathListWidget, 3, 0, 3, 3);
addButton = new QPushButton(PathPage);
- addButton->setObjectName(QString::fromUtf8("addButton"));
- QSizePolicy sizePolicy1(QSizePolicy::Maximum, QSizePolicy::Fixed);
+ addButton->setObjectName("addButton");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Maximum, QSizePolicy::Policy::Fixed);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(addButton->sizePolicy().hasHeightForWidth());
@@ -82,17 +82,17 @@ public:
gridLayout->addWidget(addButton, 3, 3, 1, 1);
removeButton = new QPushButton(PathPage);
- removeButton->setObjectName(QString::fromUtf8("removeButton"));
+ removeButton->setObjectName("removeButton");
sizePolicy1.setHeightForWidth(removeButton->sizePolicy().hasHeightForWidth());
removeButton->setSizePolicy(sizePolicy1);
gridLayout->addWidget(removeButton, 4, 3, 1, 1);
- spacerItem1 = new QSpacerItem(20, 51, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem1 = new QSpacerItem(20, 51, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem1, 5, 3, 1, 1);
- spacerItem2 = new QSpacerItem(20, 31, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem2 = new QSpacerItem(20, 31, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem2, 6, 2, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/phrasebookbox.ui b/tests/auto/tools/uic/baseline/phrasebookbox.ui
index 3377106dc3..a67b8d74a0 100644
--- a/tests/auto/tools/uic/baseline/phrasebookbox.ui
+++ b/tests/auto/tools/uic/baseline/phrasebookbox.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>PhraseBookBox</class>
<widget class="QDialog" name="PhraseBookBox" >
<property name="geometry" >
@@ -169,7 +146,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
+ <enum>QSizePolicy::Policy::Expanding</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
diff --git a/tests/auto/tools/uic/baseline/phrasebookbox.ui.h b/tests/auto/tools/uic/baseline/phrasebookbox.ui.h
index 144dc6d722..d71dfd410d 100644
--- a/tests/auto/tools/uic/baseline/phrasebookbox.ui.h
+++ b/tests/auto/tools/uic/baseline/phrasebookbox.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -77,45 +54,45 @@ public:
void setupUi(QDialog *PhraseBookBox)
{
if (PhraseBookBox->objectName().isEmpty())
- PhraseBookBox->setObjectName(QString::fromUtf8("PhraseBookBox"));
+ PhraseBookBox->setObjectName("PhraseBookBox");
PhraseBookBox->resize(596, 454);
unnamed = new QHBoxLayout(PhraseBookBox);
unnamed->setSpacing(6);
unnamed->setContentsMargins(11, 11, 11, 11);
- unnamed->setObjectName(QString::fromUtf8("unnamed"));
+ unnamed->setObjectName("unnamed");
inputsLayout = new QVBoxLayout();
inputsLayout->setSpacing(6);
- inputsLayout->setObjectName(QString::fromUtf8("inputsLayout"));
+ inputsLayout->setObjectName("inputsLayout");
gridLayout = new QGridLayout();
gridLayout->setSpacing(6);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
target = new QLabel(PhraseBookBox);
- target->setObjectName(QString::fromUtf8("target"));
+ target->setObjectName("target");
gridLayout->addWidget(target, 1, 0, 1, 1);
targetLed = new QLineEdit(PhraseBookBox);
- targetLed->setObjectName(QString::fromUtf8("targetLed"));
+ targetLed->setObjectName("targetLed");
gridLayout->addWidget(targetLed, 1, 1, 1, 1);
source = new QLabel(PhraseBookBox);
- source->setObjectName(QString::fromUtf8("source"));
+ source->setObjectName("source");
gridLayout->addWidget(source, 0, 0, 1, 1);
definitionLed = new QLineEdit(PhraseBookBox);
- definitionLed->setObjectName(QString::fromUtf8("definitionLed"));
+ definitionLed->setObjectName("definitionLed");
gridLayout->addWidget(definitionLed, 2, 1, 1, 1);
sourceLed = new QLineEdit(PhraseBookBox);
- sourceLed->setObjectName(QString::fromUtf8("sourceLed"));
+ sourceLed->setObjectName("sourceLed");
gridLayout->addWidget(sourceLed, 0, 1, 1, 1);
definition = new QLabel(PhraseBookBox);
- definition->setObjectName(QString::fromUtf8("definition"));
+ definition->setObjectName("definition");
gridLayout->addWidget(definition, 2, 0, 1, 1);
@@ -123,7 +100,7 @@ public:
inputsLayout->addLayout(gridLayout);
phraseList = new QTreeView(PhraseBookBox);
- phraseList->setObjectName(QString::fromUtf8("phraseList"));
+ phraseList->setObjectName("phraseList");
phraseList->setRootIsDecorated(false);
phraseList->setUniformRowHeights(true);
phraseList->setItemsExpandable(false);
@@ -137,28 +114,28 @@ public:
buttonLayout = new QVBoxLayout();
buttonLayout->setSpacing(6);
- buttonLayout->setObjectName(QString::fromUtf8("buttonLayout"));
+ buttonLayout->setObjectName("buttonLayout");
newBut = new QPushButton(PhraseBookBox);
- newBut->setObjectName(QString::fromUtf8("newBut"));
+ newBut->setObjectName("newBut");
buttonLayout->addWidget(newBut);
removeBut = new QPushButton(PhraseBookBox);
- removeBut->setObjectName(QString::fromUtf8("removeBut"));
+ removeBut->setObjectName("removeBut");
buttonLayout->addWidget(removeBut);
saveBut = new QPushButton(PhraseBookBox);
- saveBut->setObjectName(QString::fromUtf8("saveBut"));
+ saveBut->setObjectName("saveBut");
buttonLayout->addWidget(saveBut);
closeBut = new QPushButton(PhraseBookBox);
- closeBut->setObjectName(QString::fromUtf8("closeBut"));
+ closeBut->setObjectName("closeBut");
buttonLayout->addWidget(closeBut);
- spacer1 = new QSpacerItem(20, 51, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacer1 = new QSpacerItem(20, 51, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
buttonLayout->addItem(spacer1);
diff --git a/tests/auto/tools/uic/baseline/pixmapfunction.ui.h b/tests/auto/tools/uic/baseline/pixmapfunction.ui.h
index 39da3ed26c..541b4910e4 100644
--- a/tests/auto/tools/uic/baseline/pixmapfunction.ui.h
+++ b/tests/auto/tools/uic/baseline/pixmapfunction.ui.h
@@ -29,18 +29,18 @@ public:
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
- Form->setObjectName(QString::fromUtf8("Form"));
+ Form->setObjectName("Form");
Form->resize(149, 112);
verticalLayout = new QVBoxLayout(Form);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
label = new QLabel(Form);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
label->setPixmap(QPixmap(pixmapFunction("labelPixmap")));
verticalLayout->addWidget(label);
pushButton = new QPushButton(Form);
- pushButton->setObjectName(QString::fromUtf8("pushButton"));
+ pushButton->setObjectName("pushButton");
QIcon icon;
icon.addPixmap(QPixmap(pixmapFunction("buttonIconNormalOff")), QIcon::Normal, QIcon::Off);
icon.addPixmap(QPixmap(pixmapFunction("buttonIconNormalOn")), QIcon::Normal, QIcon::On);
diff --git a/tests/auto/tools/uic/baseline/plugindialog.ui b/tests/auto/tools/uic/baseline/plugindialog.ui
index 15bb8ade45..7c0a61aad5 100644
--- a/tests/auto/tools/uic/baseline/plugindialog.ui
+++ b/tests/auto/tools/uic/baseline/plugindialog.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>PluginDialog</class>
<widget class="QDialog" name="PluginDialog" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/plugindialog.ui.h b/tests/auto/tools/uic/baseline/plugindialog.ui.h
index 181638e133..448404e3a1 100644
--- a/tests/auto/tools/uic/baseline/plugindialog.ui.h
+++ b/tests/auto/tools/uic/baseline/plugindialog.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -65,39 +42,39 @@ public:
void setupUi(QDialog *PluginDialog)
{
if (PluginDialog->objectName().isEmpty())
- PluginDialog->setObjectName(QString::fromUtf8("PluginDialog"));
+ PluginDialog->setObjectName("PluginDialog");
PluginDialog->resize(401, 331);
vboxLayout = new QVBoxLayout(PluginDialog);
vboxLayout->setSpacing(6);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
vboxLayout->setContentsMargins(8, 8, 8, 8);
label = new QLabel(PluginDialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
label->setWordWrap(true);
vboxLayout->addWidget(label);
treeWidget = new QTreeWidget(PluginDialog);
- treeWidget->setObjectName(QString::fromUtf8("treeWidget"));
+ treeWidget->setObjectName("treeWidget");
treeWidget->setTextElideMode(Qt::ElideNone);
vboxLayout->addWidget(treeWidget);
message = new QLabel(PluginDialog);
- message->setObjectName(QString::fromUtf8("message"));
+ message->setObjectName("message");
message->setWordWrap(true);
vboxLayout->addWidget(message);
hboxLayout = new QHBoxLayout();
hboxLayout->setSpacing(6);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
hboxLayout->setContentsMargins(0, 0, 0, 0);
vboxLayout->addLayout(hboxLayout);
buttonBox = new QDialogButtonBox(PluginDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Close);
diff --git a/tests/auto/tools/uic/baseline/preferencesdialog.ui.h b/tests/auto/tools/uic/baseline/preferencesdialog.ui.h
index 868776d42b..a181b99b34 100644
--- a/tests/auto/tools/uic/baseline/preferencesdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/preferencesdialog.ui.h
@@ -54,21 +54,21 @@ public:
void setupUi(QDialog *PreferencesDialog)
{
if (PreferencesDialog->objectName().isEmpty())
- PreferencesDialog->setObjectName(QString::fromUtf8("PreferencesDialog"));
+ PreferencesDialog->setObjectName("PreferencesDialog");
PreferencesDialog->resize(455, 359);
PreferencesDialog->setModal(true);
vboxLayout = new QVBoxLayout(PreferencesDialog);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
vboxLayout1 = new QVBoxLayout();
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
m_uiModeGroupBox = new QGroupBox(PreferencesDialog);
- m_uiModeGroupBox->setObjectName(QString::fromUtf8("m_uiModeGroupBox"));
+ m_uiModeGroupBox->setObjectName("m_uiModeGroupBox");
vboxLayout2 = new QVBoxLayout(m_uiModeGroupBox);
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
m_uiModeCombo = new QComboBox(m_uiModeGroupBox);
- m_uiModeCombo->setObjectName(QString::fromUtf8("m_uiModeCombo"));
+ m_uiModeCombo->setObjectName("m_uiModeCombo");
vboxLayout2->addWidget(m_uiModeCombo);
@@ -76,12 +76,12 @@ public:
vboxLayout1->addWidget(m_uiModeGroupBox);
m_fontPanel = new FontPanel(PreferencesDialog);
- m_fontPanel->setObjectName(QString::fromUtf8("m_fontPanel"));
+ m_fontPanel->setObjectName("m_fontPanel");
vboxLayout1->addWidget(m_fontPanel);
m_previewConfigurationWidget = new qdesigner_internal::PreviewConfigurationWidget(PreferencesDialog);
- m_previewConfigurationWidget->setObjectName(QString::fromUtf8("m_previewConfigurationWidget"));
+ m_previewConfigurationWidget->setObjectName("m_previewConfigurationWidget");
vboxLayout1->addWidget(m_previewConfigurationWidget);
@@ -89,27 +89,27 @@ public:
hboxLayout->addLayout(vboxLayout1);
vboxLayout3 = new QVBoxLayout();
- vboxLayout3->setObjectName(QString::fromUtf8("vboxLayout3"));
+ vboxLayout3->setObjectName("vboxLayout3");
m_templatePathGroupBox = new QGroupBox(PreferencesDialog);
- m_templatePathGroupBox->setObjectName(QString::fromUtf8("m_templatePathGroupBox"));
+ m_templatePathGroupBox->setObjectName("m_templatePathGroupBox");
gridLayout = new QGridLayout(m_templatePathGroupBox);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
m_templatePathListWidget = new QListWidget(m_templatePathGroupBox);
- m_templatePathListWidget->setObjectName(QString::fromUtf8("m_templatePathListWidget"));
+ m_templatePathListWidget->setObjectName("m_templatePathListWidget");
gridLayout->addWidget(m_templatePathListWidget, 0, 0, 1, 3);
m_addTemplatePathButton = new QToolButton(m_templatePathGroupBox);
- m_addTemplatePathButton->setObjectName(QString::fromUtf8("m_addTemplatePathButton"));
+ m_addTemplatePathButton->setObjectName("m_addTemplatePathButton");
gridLayout->addWidget(m_addTemplatePathButton, 1, 0, 1, 1);
m_removeTemplatePathButton = new QToolButton(m_templatePathGroupBox);
- m_removeTemplatePathButton->setObjectName(QString::fromUtf8("m_removeTemplatePathButton"));
+ m_removeTemplatePathButton->setObjectName("m_removeTemplatePathButton");
gridLayout->addWidget(m_removeTemplatePathButton, 1, 1, 1, 1);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem, 1, 2, 1, 1);
@@ -117,7 +117,7 @@ public:
vboxLayout3->addWidget(m_templatePathGroupBox);
m_gridPanel = new qdesigner_internal::GridPanel(PreferencesDialog);
- m_gridPanel->setObjectName(QString::fromUtf8("m_gridPanel"));
+ m_gridPanel->setObjectName("m_gridPanel");
vboxLayout3->addWidget(m_gridPanel);
@@ -128,14 +128,14 @@ public:
vboxLayout->addLayout(hboxLayout);
line = new QFrame(PreferencesDialog);
- line->setObjectName(QString::fromUtf8("line"));
- line->setFrameShape(QFrame::HLine);
- line->setFrameShadow(QFrame::Sunken);
+ line->setObjectName("line");
+ line->setFrameShape(QFrame::Shape::HLine);
+ line->setFrameShadow(QFrame::Shadow::Sunken);
vboxLayout->addWidget(line);
m_dialogButtonBox = new QDialogButtonBox(PreferencesDialog);
- m_dialogButtonBox->setObjectName(QString::fromUtf8("m_dialogButtonBox"));
+ m_dialogButtonBox->setObjectName("m_dialogButtonBox");
m_dialogButtonBox->setOrientation(Qt::Horizontal);
m_dialogButtonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/previewconfigurationwidget.ui.h b/tests/auto/tools/uic/baseline/previewconfigurationwidget.ui.h
index 249e6fe4fb..c7e54fde1a 100644
--- a/tests/auto/tools/uic/baseline/previewconfigurationwidget.ui.h
+++ b/tests/auto/tools/uic/baseline/previewconfigurationwidget.ui.h
@@ -40,40 +40,40 @@ public:
void setupUi(QGroupBox *PreviewConfigurationWidget)
{
if (PreviewConfigurationWidget->objectName().isEmpty())
- PreviewConfigurationWidget->setObjectName(QString::fromUtf8("PreviewConfigurationWidget"));
+ PreviewConfigurationWidget->setObjectName("PreviewConfigurationWidget");
PreviewConfigurationWidget->setCheckable(true);
formLayout = new QFormLayout(PreviewConfigurationWidget);
- formLayout->setObjectName(QString::fromUtf8("formLayout"));
+ formLayout->setObjectName("formLayout");
m_styleLabel = new QLabel(PreviewConfigurationWidget);
- m_styleLabel->setObjectName(QString::fromUtf8("m_styleLabel"));
+ m_styleLabel->setObjectName("m_styleLabel");
formLayout->setWidget(0, QFormLayout::LabelRole, m_styleLabel);
m_styleCombo = new QComboBox(PreviewConfigurationWidget);
- m_styleCombo->setObjectName(QString::fromUtf8("m_styleCombo"));
+ m_styleCombo->setObjectName("m_styleCombo");
formLayout->setWidget(0, QFormLayout::FieldRole, m_styleCombo);
m_appStyleSheetLabel = new QLabel(PreviewConfigurationWidget);
- m_appStyleSheetLabel->setObjectName(QString::fromUtf8("m_appStyleSheetLabel"));
+ m_appStyleSheetLabel->setObjectName("m_appStyleSheetLabel");
formLayout->setWidget(1, QFormLayout::LabelRole, m_appStyleSheetLabel);
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
m_appStyleSheetLineEdit = new qdesigner_internal::TextPropertyEditor(PreviewConfigurationWidget);
- m_appStyleSheetLineEdit->setObjectName(QString::fromUtf8("m_appStyleSheetLineEdit"));
+ m_appStyleSheetLineEdit->setObjectName("m_appStyleSheetLineEdit");
m_appStyleSheetLineEdit->setMinimumSize(QSize(149, 0));
hboxLayout->addWidget(m_appStyleSheetLineEdit);
m_appStyleSheetChangeButton = new QToolButton(PreviewConfigurationWidget);
- m_appStyleSheetChangeButton->setObjectName(QString::fromUtf8("m_appStyleSheetChangeButton"));
+ m_appStyleSheetChangeButton->setObjectName("m_appStyleSheetChangeButton");
hboxLayout->addWidget(m_appStyleSheetChangeButton);
m_appStyleSheetClearButton = new QToolButton(PreviewConfigurationWidget);
- m_appStyleSheetClearButton->setObjectName(QString::fromUtf8("m_appStyleSheetClearButton"));
+ m_appStyleSheetClearButton->setObjectName("m_appStyleSheetClearButton");
hboxLayout->addWidget(m_appStyleSheetClearButton);
@@ -81,19 +81,19 @@ public:
formLayout->setLayout(1, QFormLayout::FieldRole, hboxLayout);
m_skinLabel = new QLabel(PreviewConfigurationWidget);
- m_skinLabel->setObjectName(QString::fromUtf8("m_skinLabel"));
+ m_skinLabel->setObjectName("m_skinLabel");
formLayout->setWidget(2, QFormLayout::LabelRole, m_skinLabel);
hboxLayout1 = new QHBoxLayout();
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
m_skinCombo = new QComboBox(PreviewConfigurationWidget);
- m_skinCombo->setObjectName(QString::fromUtf8("m_skinCombo"));
+ m_skinCombo->setObjectName("m_skinCombo");
hboxLayout1->addWidget(m_skinCombo);
m_skinRemoveButton = new QToolButton(PreviewConfigurationWidget);
- m_skinRemoveButton->setObjectName(QString::fromUtf8("m_skinRemoveButton"));
+ m_skinRemoveButton->setObjectName("m_skinRemoveButton");
hboxLayout1->addWidget(m_skinRemoveButton);
diff --git a/tests/auto/tools/uic/baseline/previewdialogbase.ui.h b/tests/auto/tools/uic/baseline/previewdialogbase.ui.h
index 0ac444d099..6c362bf421 100644
--- a/tests/auto/tools/uic/baseline/previewdialogbase.ui.h
+++ b/tests/auto/tools/uic/baseline/previewdialogbase.ui.h
@@ -46,7 +46,7 @@ public:
void setupUi(QDialog *PreviewDialogBase)
{
if (PreviewDialogBase->objectName().isEmpty())
- PreviewDialogBase->setObjectName(QString::fromUtf8("PreviewDialogBase"));
+ PreviewDialogBase->setObjectName("PreviewDialogBase");
PreviewDialogBase->resize(733, 479);
vboxLayout = new QVBoxLayout(PreviewDialogBase);
#ifndef Q_OS_MAC
@@ -55,7 +55,7 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
hboxLayout = new QHBoxLayout();
#ifndef Q_OS_MAC
hboxLayout->setSpacing(6);
@@ -63,15 +63,15 @@ public:
#ifndef Q_OS_MAC
hboxLayout->setContentsMargins(0, 0, 0, 0);
#endif
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
label = new QLabel(PreviewDialogBase);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
hboxLayout->addWidget(label);
paperSizeCombo = new QComboBox(PreviewDialogBase);
- paperSizeCombo->setObjectName(QString::fromUtf8("paperSizeCombo"));
- QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ paperSizeCombo->setObjectName("paperSizeCombo");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(paperSizeCombo->sizePolicy().hasHeightForWidth());
@@ -80,18 +80,18 @@ public:
hboxLayout->addWidget(paperSizeCombo);
label_2 = new QLabel(PreviewDialogBase);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
hboxLayout->addWidget(label_2);
paperOrientationCombo = new QComboBox(PreviewDialogBase);
- paperOrientationCombo->setObjectName(QString::fromUtf8("paperOrientationCombo"));
+ paperOrientationCombo->setObjectName("paperOrientationCombo");
sizePolicy.setHeightForWidth(paperOrientationCombo->sizePolicy().hasHeightForWidth());
paperOrientationCombo->setSizePolicy(sizePolicy);
hboxLayout->addWidget(paperOrientationCombo);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
@@ -103,9 +103,9 @@ public:
hboxLayout1->setSpacing(6);
#endif
hboxLayout1->setContentsMargins(0, 0, 0, 0);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
pageList = new QTreeWidget(PreviewDialogBase);
- pageList->setObjectName(QString::fromUtf8("pageList"));
+ pageList->setObjectName("pageList");
pageList->setIndentation(0);
pageList->setRootIsDecorated(false);
pageList->setUniformRowHeights(true);
@@ -115,8 +115,8 @@ public:
hboxLayout1->addWidget(pageList);
previewArea = new QScrollArea(PreviewDialogBase);
- previewArea->setObjectName(QString::fromUtf8("previewArea"));
- QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ previewArea->setObjectName("previewArea");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Preferred);
sizePolicy1.setHorizontalStretch(1);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(previewArea->sizePolicy().hasHeightForWidth());
@@ -132,11 +132,11 @@ public:
hboxLayout2->setSpacing(6);
#endif
hboxLayout2->setContentsMargins(0, 0, 0, 0);
- hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
+ hboxLayout2->setObjectName("hboxLayout2");
progressBar = new QProgressBar(PreviewDialogBase);
- progressBar->setObjectName(QString::fromUtf8("progressBar"));
+ progressBar->setObjectName("progressBar");
progressBar->setEnabled(false);
- QSizePolicy sizePolicy2(QSizePolicy::Expanding, QSizePolicy::Fixed);
+ QSizePolicy sizePolicy2(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Fixed);
sizePolicy2.setHorizontalStretch(1);
sizePolicy2.setVerticalStretch(0);
sizePolicy2.setHeightForWidth(progressBar->sizePolicy().hasHeightForWidth());
@@ -148,7 +148,7 @@ public:
hboxLayout2->addWidget(progressBar);
buttonBox = new QDialogButtonBox(PreviewDialogBase);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/previewwidget.ui b/tests/auto/tools/uic/baseline/previewwidget.ui
index 9ced05afc8..32af99e797 100644
--- a/tests/auto/tools/uic/baseline/previewwidget.ui
+++ b/tests/auto/tools/uic/baseline/previewwidget.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>qdesigner_internal::PreviewWidget</class>
<widget class="QWidget" name="qdesigner_internal::PreviewWidget" >
<property name="geometry" >
@@ -130,7 +107,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
+ <enum>QSizePolicy::Policy::Expanding</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/previewwidget.ui.h b/tests/auto/tools/uic/baseline/previewwidget.ui.h
index a3cffce179..79d26639ff 100644
--- a/tests/auto/tools/uic/baseline/previewwidget.ui.h
+++ b/tests/auto/tools/uic/baseline/previewwidget.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -90,9 +67,9 @@ public:
void setupUi(QWidget *qdesigner_internal__PreviewWidget)
{
if (qdesigner_internal__PreviewWidget->objectName().isEmpty())
- qdesigner_internal__PreviewWidget->setObjectName(QString::fromUtf8("qdesigner_internal__PreviewWidget"));
+ qdesigner_internal__PreviewWidget->setObjectName("qdesigner_internal__PreviewWidget");
qdesigner_internal__PreviewWidget->resize(471, 251);
- QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Minimum);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(qdesigner_internal__PreviewWidget->sizePolicy().hasHeightForWidth());
@@ -104,7 +81,7 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(9, 9, 9, 9);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
vboxLayout = new QVBoxLayout();
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
@@ -112,15 +89,15 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(0, 0, 0, 0);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
LineEdit1 = new QLineEdit(qdesigner_internal__PreviewWidget);
- LineEdit1->setObjectName(QString::fromUtf8("LineEdit1"));
+ LineEdit1->setObjectName("LineEdit1");
vboxLayout->addWidget(LineEdit1);
ComboBox1 = new QComboBox(qdesigner_internal__PreviewWidget);
ComboBox1->addItem(QString());
- ComboBox1->setObjectName(QString::fromUtf8("ComboBox1"));
+ ComboBox1->setObjectName("ComboBox1");
vboxLayout->addWidget(ComboBox1);
@@ -129,14 +106,14 @@ public:
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(0, 0, 0, 0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
SpinBox1 = new QSpinBox(qdesigner_internal__PreviewWidget);
- SpinBox1->setObjectName(QString::fromUtf8("SpinBox1"));
+ SpinBox1->setObjectName("SpinBox1");
hboxLayout->addWidget(SpinBox1);
PushButton1 = new QPushButton(qdesigner_internal__PreviewWidget);
- PushButton1->setObjectName(QString::fromUtf8("PushButton1"));
+ PushButton1->setObjectName("PushButton1");
hboxLayout->addWidget(PushButton1);
@@ -144,19 +121,19 @@ public:
vboxLayout->addLayout(hboxLayout);
ScrollBar1 = new QScrollBar(qdesigner_internal__PreviewWidget);
- ScrollBar1->setObjectName(QString::fromUtf8("ScrollBar1"));
+ ScrollBar1->setObjectName("ScrollBar1");
ScrollBar1->setOrientation(Qt::Horizontal);
vboxLayout->addWidget(ScrollBar1);
Slider1 = new QSlider(qdesigner_internal__PreviewWidget);
- Slider1->setObjectName(QString::fromUtf8("Slider1"));
+ Slider1->setObjectName("Slider1");
Slider1->setOrientation(Qt::Horizontal);
vboxLayout->addWidget(Slider1);
listWidget = new QListWidget(qdesigner_internal__PreviewWidget);
- listWidget->setObjectName(QString::fromUtf8("listWidget"));
+ listWidget->setObjectName("listWidget");
listWidget->setMaximumSize(QSize(32767, 50));
vboxLayout->addWidget(listWidget);
@@ -164,18 +141,18 @@ public:
gridLayout->addLayout(vboxLayout, 0, 1, 3, 1);
- spacerItem = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 20, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(spacerItem, 3, 0, 1, 2);
ProgressBar1 = new QProgressBar(qdesigner_internal__PreviewWidget);
- ProgressBar1->setObjectName(QString::fromUtf8("ProgressBar1"));
+ ProgressBar1->setObjectName("ProgressBar1");
ProgressBar1->setOrientation(Qt::Horizontal);
gridLayout->addWidget(ProgressBar1, 2, 0, 1, 1);
ButtonGroup2 = new QGroupBox(qdesigner_internal__PreviewWidget);
- ButtonGroup2->setObjectName(QString::fromUtf8("ButtonGroup2"));
+ ButtonGroup2->setObjectName("ButtonGroup2");
vboxLayout1 = new QVBoxLayout(ButtonGroup2);
#ifndef Q_OS_MAC
vboxLayout1->setSpacing(6);
@@ -183,15 +160,15 @@ public:
#ifndef Q_OS_MAC
vboxLayout1->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
CheckBox1 = new QCheckBox(ButtonGroup2);
- CheckBox1->setObjectName(QString::fromUtf8("CheckBox1"));
+ CheckBox1->setObjectName("CheckBox1");
CheckBox1->setChecked(true);
vboxLayout1->addWidget(CheckBox1);
CheckBox2 = new QCheckBox(ButtonGroup2);
- CheckBox2->setObjectName(QString::fromUtf8("CheckBox2"));
+ CheckBox2->setObjectName("CheckBox2");
vboxLayout1->addWidget(CheckBox2);
@@ -199,7 +176,7 @@ public:
gridLayout->addWidget(ButtonGroup2, 1, 0, 1, 1);
ButtonGroup1 = new QGroupBox(qdesigner_internal__PreviewWidget);
- ButtonGroup1->setObjectName(QString::fromUtf8("ButtonGroup1"));
+ ButtonGroup1->setObjectName("ButtonGroup1");
vboxLayout2 = new QVBoxLayout(ButtonGroup1);
#ifndef Q_OS_MAC
vboxLayout2->setSpacing(6);
@@ -207,20 +184,20 @@ public:
#ifndef Q_OS_MAC
vboxLayout2->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
RadioButton1 = new QRadioButton(ButtonGroup1);
- RadioButton1->setObjectName(QString::fromUtf8("RadioButton1"));
+ RadioButton1->setObjectName("RadioButton1");
RadioButton1->setChecked(true);
vboxLayout2->addWidget(RadioButton1);
RadioButton2 = new QRadioButton(ButtonGroup1);
- RadioButton2->setObjectName(QString::fromUtf8("RadioButton2"));
+ RadioButton2->setObjectName("RadioButton2");
vboxLayout2->addWidget(RadioButton2);
RadioButton3 = new QRadioButton(ButtonGroup1);
- RadioButton3->setObjectName(QString::fromUtf8("RadioButton3"));
+ RadioButton3->setObjectName("RadioButton3");
vboxLayout2->addWidget(RadioButton3);
diff --git a/tests/auto/tools/uic/baseline/proxy.ui.h b/tests/auto/tools/uic/baseline/proxy.ui.h
index 9949f43510..eeaefa3a28 100644
--- a/tests/auto/tools/uic/baseline/proxy.ui.h
+++ b/tests/auto/tools/uic/baseline/proxy.ui.h
@@ -35,44 +35,44 @@ public:
void setupUi(QDialog *ProxyDialog)
{
if (ProxyDialog->objectName().isEmpty())
- ProxyDialog->setObjectName(QString::fromUtf8("ProxyDialog"));
+ ProxyDialog->setObjectName("ProxyDialog");
ProxyDialog->resize(369, 144);
gridLayout = new QGridLayout(ProxyDialog);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
iconLabel = new QLabel(ProxyDialog);
- iconLabel->setObjectName(QString::fromUtf8("iconLabel"));
+ iconLabel->setObjectName("iconLabel");
gridLayout->addWidget(iconLabel, 0, 0, 1, 1);
introLabel = new QLabel(ProxyDialog);
- introLabel->setObjectName(QString::fromUtf8("introLabel"));
+ introLabel->setObjectName("introLabel");
introLabel->setWordWrap(true);
gridLayout->addWidget(introLabel, 0, 1, 1, 2);
usernameLabel = new QLabel(ProxyDialog);
- usernameLabel->setObjectName(QString::fromUtf8("usernameLabel"));
+ usernameLabel->setObjectName("usernameLabel");
gridLayout->addWidget(usernameLabel, 1, 0, 1, 2);
userNameLineEdit = new QLineEdit(ProxyDialog);
- userNameLineEdit->setObjectName(QString::fromUtf8("userNameLineEdit"));
+ userNameLineEdit->setObjectName("userNameLineEdit");
gridLayout->addWidget(userNameLineEdit, 1, 2, 1, 1);
passwordLabel = new QLabel(ProxyDialog);
- passwordLabel->setObjectName(QString::fromUtf8("passwordLabel"));
+ passwordLabel->setObjectName("passwordLabel");
gridLayout->addWidget(passwordLabel, 2, 0, 1, 2);
passwordLineEdit = new QLineEdit(ProxyDialog);
- passwordLineEdit->setObjectName(QString::fromUtf8("passwordLineEdit"));
+ passwordLineEdit->setObjectName("passwordLineEdit");
passwordLineEdit->setEchoMode(QLineEdit::Password);
gridLayout->addWidget(passwordLineEdit, 2, 2, 1, 1);
buttonBox = new QDialogButtonBox(ProxyDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/qfiledialog.ui b/tests/auto/tools/uic/baseline/qfiledialog.ui
index 83b7f1524b..56c4cf6e27 100644
--- a/tests/auto/tools/uic/baseline/qfiledialog.ui
+++ b/tests/auto/tools/uic/baseline/qfiledialog.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>QFileDialog</class>
<widget class="QDialog" name="QFileDialog" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/qfiledialog.ui.h b/tests/auto/tools/uic/baseline/qfiledialog.ui.h
index abe7dbc147..2a2afddc54 100644
--- a/tests/auto/tools/uic/baseline/qfiledialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qfiledialog.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -93,21 +70,21 @@ public:
void setupUi(QDialog *QFileDialog)
{
if (QFileDialog->objectName().isEmpty())
- QFileDialog->setObjectName(QString::fromUtf8("QFileDialog"));
+ QFileDialog->setObjectName("QFileDialog");
QFileDialog->resize(521, 316);
QFileDialog->setSizeGripEnabled(true);
gridLayout = new QGridLayout(QFileDialog);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
lookInLabel = new QLabel(QFileDialog);
- lookInLabel->setObjectName(QString::fromUtf8("lookInLabel"));
+ lookInLabel->setObjectName("lookInLabel");
gridLayout->addWidget(lookInLabel, 0, 0, 1, 1);
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
lookInCombo = new QFileDialogComboBox(QFileDialog);
- lookInCombo->setObjectName(QString::fromUtf8("lookInCombo"));
- QSizePolicy sizePolicy(QSizePolicy::Ignored, QSizePolicy::Fixed);
+ lookInCombo->setObjectName("lookInCombo");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Ignored, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(1);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(lookInCombo->sizePolicy().hasHeightForWidth());
@@ -117,32 +94,32 @@ public:
hboxLayout->addWidget(lookInCombo);
backButton = new QToolButton(QFileDialog);
- backButton->setObjectName(QString::fromUtf8("backButton"));
+ backButton->setObjectName("backButton");
hboxLayout->addWidget(backButton);
forwardButton = new QToolButton(QFileDialog);
- forwardButton->setObjectName(QString::fromUtf8("forwardButton"));
+ forwardButton->setObjectName("forwardButton");
hboxLayout->addWidget(forwardButton);
toParentButton = new QToolButton(QFileDialog);
- toParentButton->setObjectName(QString::fromUtf8("toParentButton"));
+ toParentButton->setObjectName("toParentButton");
hboxLayout->addWidget(toParentButton);
newFolderButton = new QToolButton(QFileDialog);
- newFolderButton->setObjectName(QString::fromUtf8("newFolderButton"));
+ newFolderButton->setObjectName("newFolderButton");
hboxLayout->addWidget(newFolderButton);
listModeButton = new QToolButton(QFileDialog);
- listModeButton->setObjectName(QString::fromUtf8("listModeButton"));
+ listModeButton->setObjectName("listModeButton");
hboxLayout->addWidget(listModeButton);
detailModeButton = new QToolButton(QFileDialog);
- detailModeButton->setObjectName(QString::fromUtf8("detailModeButton"));
+ detailModeButton->setObjectName("detailModeButton");
hboxLayout->addWidget(detailModeButton);
@@ -150,46 +127,46 @@ public:
gridLayout->addLayout(hboxLayout, 0, 1, 1, 2);
splitter = new QSplitter(QFileDialog);
- splitter->setObjectName(QString::fromUtf8("splitter"));
- QSizePolicy sizePolicy1(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ splitter->setObjectName("splitter");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(splitter->sizePolicy().hasHeightForWidth());
splitter->setSizePolicy(sizePolicy1);
splitter->setOrientation(Qt::Horizontal);
sidebar = new QSidebar(splitter);
- sidebar->setObjectName(QString::fromUtf8("sidebar"));
+ sidebar->setObjectName("sidebar");
splitter->addWidget(sidebar);
frame = new QFrame(splitter);
- frame->setObjectName(QString::fromUtf8("frame"));
+ frame->setObjectName("frame");
frame->setFrameShape(QFrame::NoFrame);
frame->setFrameShadow(QFrame::Raised);
vboxLayout = new QVBoxLayout(frame);
vboxLayout->setSpacing(0);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
vboxLayout->setContentsMargins(0, 0, 0, 0);
stackedWidget = new QStackedWidget(frame);
- stackedWidget->setObjectName(QString::fromUtf8("stackedWidget"));
+ stackedWidget->setObjectName("stackedWidget");
page = new QWidget();
- page->setObjectName(QString::fromUtf8("page"));
+ page->setObjectName("page");
vboxLayout1 = new QVBoxLayout(page);
vboxLayout1->setSpacing(0);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
vboxLayout1->setContentsMargins(0, 0, 0, 0);
listView = new QFileDialogListView(page);
- listView->setObjectName(QString::fromUtf8("listView"));
+ listView->setObjectName("listView");
vboxLayout1->addWidget(listView);
stackedWidget->addWidget(page);
page_2 = new QWidget();
- page_2->setObjectName(QString::fromUtf8("page_2"));
+ page_2->setObjectName("page_2");
vboxLayout2 = new QVBoxLayout(page_2);
vboxLayout2->setSpacing(0);
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
vboxLayout2->setContentsMargins(0, 0, 0, 0);
treeView = new QFileDialogTreeView(page_2);
- treeView->setObjectName(QString::fromUtf8("treeView"));
+ treeView->setObjectName("treeView");
vboxLayout2->addWidget(treeView);
@@ -202,8 +179,8 @@ public:
gridLayout->addWidget(splitter, 1, 0, 1, 3);
fileNameLabel = new QLabel(QFileDialog);
- fileNameLabel->setObjectName(QString::fromUtf8("fileNameLabel"));
- QSizePolicy sizePolicy2(QSizePolicy::Minimum, QSizePolicy::Preferred);
+ fileNameLabel->setObjectName("fileNameLabel");
+ QSizePolicy sizePolicy2(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Preferred);
sizePolicy2.setHorizontalStretch(0);
sizePolicy2.setVerticalStretch(0);
sizePolicy2.setHeightForWidth(fileNameLabel->sizePolicy().hasHeightForWidth());
@@ -213,8 +190,8 @@ public:
gridLayout->addWidget(fileNameLabel, 2, 0, 1, 1);
fileNameEdit = new QFileDialogLineEdit(QFileDialog);
- fileNameEdit->setObjectName(QString::fromUtf8("fileNameEdit"));
- QSizePolicy sizePolicy3(QSizePolicy::Expanding, QSizePolicy::Fixed);
+ fileNameEdit->setObjectName("fileNameEdit");
+ QSizePolicy sizePolicy3(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Fixed);
sizePolicy3.setHorizontalStretch(1);
sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(fileNameEdit->sizePolicy().hasHeightForWidth());
@@ -223,15 +200,15 @@ public:
gridLayout->addWidget(fileNameEdit, 2, 1, 1, 1);
buttonBox = new QDialogButtonBox(QFileDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Vertical);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
gridLayout->addWidget(buttonBox, 2, 2, 2, 1);
fileTypeLabel = new QLabel(QFileDialog);
- fileTypeLabel->setObjectName(QString::fromUtf8("fileTypeLabel"));
- QSizePolicy sizePolicy4(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ fileTypeLabel->setObjectName("fileTypeLabel");
+ QSizePolicy sizePolicy4(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Fixed);
sizePolicy4.setHorizontalStretch(0);
sizePolicy4.setVerticalStretch(0);
sizePolicy4.setHeightForWidth(fileTypeLabel->sizePolicy().hasHeightForWidth());
@@ -240,8 +217,8 @@ public:
gridLayout->addWidget(fileTypeLabel, 3, 0, 1, 1);
fileTypeCombo = new QComboBox(QFileDialog);
- fileTypeCombo->setObjectName(QString::fromUtf8("fileTypeCombo"));
- QSizePolicy sizePolicy5(QSizePolicy::Expanding, QSizePolicy::Fixed);
+ fileTypeCombo->setObjectName("fileTypeCombo");
+ QSizePolicy sizePolicy5(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Fixed);
sizePolicy5.setHorizontalStretch(0);
sizePolicy5.setVerticalStretch(0);
sizePolicy5.setHeightForWidth(fileTypeCombo->sizePolicy().hasHeightForWidth());
diff --git a/tests/auto/tools/uic/baseline/qoverload.ui b/tests/auto/tools/uic/baseline/qoverload.ui
new file mode 100644
index 0000000000..fb9e5294b7
--- /dev/null
+++ b/tests/auto/tools/uic/baseline/qoverload.ui
@@ -0,0 +1,93 @@
+<?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>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>MainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralWidget">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QSlider" name="horizontalSlider">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>TextLabel</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLCDNumber" name="lcdNumber"/>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menuBar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>29</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QToolBar" name="mainToolBar">
+ <attribute name="toolBarArea">
+ <enum>TopToolBarArea</enum>
+ </attribute>
+ <attribute name="toolBarBreak">
+ <bool>false</bool>
+ </attribute>
+ </widget>
+ <widget class="QStatusBar" name="statusBar"/>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>horizontalSlider</sender>
+ <signal>valueChanged(int)</signal>
+ <receiver>label</receiver>
+ <slot>setNum(int)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>199</x>
+ <y>67</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>199</x>
+ <y>172</y>
+ </hint>
+ </hints>
+ </connection>
+ <connection>
+ <sender>label</sender>
+ <signal>linkActivated(QString)</signal>
+ <receiver>lcdNumber</receiver>
+ <slot>display(QString)</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>199</x>
+ <y>126</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>199</x>
+ <y>218</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/tests/auto/tools/uic/baseline/qoverload.ui.h b/tests/auto/tools/uic/baseline/qoverload.ui.h
new file mode 100644
index 0000000000..4ab0e37d1f
--- /dev/null
+++ b/tests/auto/tools/uic/baseline/qoverload.ui.h
@@ -0,0 +1,98 @@
+/********************************************************************************
+** Form generated from reading UI file 'qoverload.ui'
+**
+** Created by: Qt User Interface Compiler version 6.8.0
+**
+** WARNING! All changes made in this file will be lost when recompiling UI file!
+********************************************************************************/
+
+#ifndef QOVERLOAD_H
+#define QOVERLOAD_H
+
+#include <QtCore/QVariant>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QLCDNumber>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QMainWindow>
+#include <QtWidgets/QMenuBar>
+#include <QtWidgets/QSlider>
+#include <QtWidgets/QStatusBar>
+#include <QtWidgets/QToolBar>
+#include <QtWidgets/QVBoxLayout>
+#include <QtWidgets/QWidget>
+
+QT_BEGIN_NAMESPACE
+
+class Ui_MainWindow
+{
+public:
+ QWidget *centralWidget;
+ QVBoxLayout *verticalLayout;
+ QSlider *horizontalSlider;
+ QLabel *label;
+ QLCDNumber *lcdNumber;
+ QMenuBar *menuBar;
+ QToolBar *mainToolBar;
+ QStatusBar *statusBar;
+
+ void setupUi(QMainWindow *MainWindow)
+ {
+ if (MainWindow->objectName().isEmpty())
+ MainWindow->setObjectName("MainWindow");
+ MainWindow->resize(400, 300);
+ centralWidget = new QWidget(MainWindow);
+ centralWidget->setObjectName("centralWidget");
+ verticalLayout = new QVBoxLayout(centralWidget);
+ verticalLayout->setSpacing(6);
+ verticalLayout->setContentsMargins(11, 11, 11, 11);
+ verticalLayout->setObjectName("verticalLayout");
+ horizontalSlider = new QSlider(centralWidget);
+ horizontalSlider->setObjectName("horizontalSlider");
+ horizontalSlider->setOrientation(Qt::Horizontal);
+
+ verticalLayout->addWidget(horizontalSlider);
+
+ label = new QLabel(centralWidget);
+ label->setObjectName("label");
+
+ verticalLayout->addWidget(label);
+
+ lcdNumber = new QLCDNumber(centralWidget);
+ lcdNumber->setObjectName("lcdNumber");
+
+ verticalLayout->addWidget(lcdNumber);
+
+ MainWindow->setCentralWidget(centralWidget);
+ menuBar = new QMenuBar(MainWindow);
+ menuBar->setObjectName("menuBar");
+ menuBar->setGeometry(QRect(0, 0, 400, 29));
+ MainWindow->setMenuBar(menuBar);
+ mainToolBar = new QToolBar(MainWindow);
+ mainToolBar->setObjectName("mainToolBar");
+ MainWindow->addToolBar(Qt::ToolBarArea::TopToolBarArea, mainToolBar);
+ statusBar = new QStatusBar(MainWindow);
+ statusBar->setObjectName("statusBar");
+ MainWindow->setStatusBar(statusBar);
+
+ retranslateUi(MainWindow);
+ QObject::connect(horizontalSlider, &QSlider::valueChanged, label, qOverload<int>(&QLabel::setNum));
+ QObject::connect(label, &QLabel::linkActivated, lcdNumber, qOverload<const QString&>(&QLCDNumber::display));
+
+ QMetaObject::connectSlotsByName(MainWindow);
+ } // setupUi
+
+ void retranslateUi(QMainWindow *MainWindow)
+ {
+ MainWindow->setWindowTitle(QCoreApplication::translate("MainWindow", "MainWindow", nullptr));
+ label->setText(QCoreApplication::translate("MainWindow", "TextLabel", nullptr));
+ } // retranslateUi
+
+};
+
+namespace Ui {
+ class MainWindow: public Ui_MainWindow {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+#endif // QOVERLOAD_H
diff --git a/tests/auto/tools/uic/baseline/qpagesetupwidget.ui b/tests/auto/tools/uic/baseline/qpagesetupwidget.ui
index 960a9dac17..c5e14ef063 100644
--- a/tests/auto/tools/uic/baseline/qpagesetupwidget.ui
+++ b/tests/auto/tools/uic/baseline/qpagesetupwidget.ui
@@ -239,7 +239,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::MinimumExpanding</enum>
+ <enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
@@ -286,7 +286,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType">
- <enum>QSizePolicy::MinimumExpanding</enum>
+ <enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@@ -318,10 +318,10 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::MinimumExpanding</enum>
+ <enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0">
- <enum>QSizePolicy::MinimumExpanding</enum>
+ <enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property>
<property name="sizeHint" stdset="0" >
<size>
diff --git a/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h b/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h
index 1ca4029177..4f2f4ff0fe 100644
--- a/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h
+++ b/tests/auto/tools/uic/baseline/qpagesetupwidget.ui.h
@@ -76,45 +76,45 @@ public:
void setupUi(QWidget *QPageSetupWidget)
{
if (QPageSetupWidget->objectName().isEmpty())
- QPageSetupWidget->setObjectName(QString::fromUtf8("QPageSetupWidget"));
+ QPageSetupWidget->setObjectName("QPageSetupWidget");
QPageSetupWidget->resize(416, 515);
gridLayout_3 = new QGridLayout(QPageSetupWidget);
gridLayout_3->setContentsMargins(0, 0, 0, 0);
- gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3"));
+ gridLayout_3->setObjectName("gridLayout_3");
groupBox_2 = new QGroupBox(QPageSetupWidget);
- groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
+ groupBox_2->setObjectName("groupBox_2");
gridLayout_2 = new QGridLayout(groupBox_2);
- gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
+ gridLayout_2->setObjectName("gridLayout_2");
pageSizeLabel = new QLabel(groupBox_2);
- pageSizeLabel->setObjectName(QString::fromUtf8("pageSizeLabel"));
+ pageSizeLabel->setObjectName("pageSizeLabel");
gridLayout_2->addWidget(pageSizeLabel, 0, 0, 1, 1);
pageSizeCombo = new QComboBox(groupBox_2);
- pageSizeCombo->setObjectName(QString::fromUtf8("pageSizeCombo"));
+ pageSizeCombo->setObjectName("pageSizeCombo");
gridLayout_2->addWidget(pageSizeCombo, 0, 1, 1, 1);
widthLabel = new QLabel(groupBox_2);
- widthLabel->setObjectName(QString::fromUtf8("widthLabel"));
+ widthLabel->setObjectName("widthLabel");
gridLayout_2->addWidget(widthLabel, 1, 0, 1, 1);
horizontalLayout_3 = new QHBoxLayout();
- horizontalLayout_3->setObjectName(QString::fromUtf8("horizontalLayout_3"));
+ horizontalLayout_3->setObjectName("horizontalLayout_3");
pageWidth = new QDoubleSpinBox(groupBox_2);
- pageWidth->setObjectName(QString::fromUtf8("pageWidth"));
+ pageWidth->setObjectName("pageWidth");
pageWidth->setMaximum(9999.989999999999782);
horizontalLayout_3->addWidget(pageWidth);
heightLabel = new QLabel(groupBox_2);
- heightLabel->setObjectName(QString::fromUtf8("heightLabel"));
+ heightLabel->setObjectName("heightLabel");
horizontalLayout_3->addWidget(heightLabel);
pageHeight = new QDoubleSpinBox(groupBox_2);
- pageHeight->setObjectName(QString::fromUtf8("pageHeight"));
+ pageHeight->setObjectName("pageHeight");
pageHeight->setMaximum(9999.989999999999782);
horizontalLayout_3->addWidget(pageHeight);
@@ -123,16 +123,16 @@ public:
gridLayout_2->addLayout(horizontalLayout_3, 1, 1, 1, 1);
paperSourceLabel = new QLabel(groupBox_2);
- paperSourceLabel->setObjectName(QString::fromUtf8("paperSourceLabel"));
+ paperSourceLabel->setObjectName("paperSourceLabel");
gridLayout_2->addWidget(paperSourceLabel, 2, 0, 1, 1);
paperSource = new QComboBox(groupBox_2);
- paperSource->setObjectName(QString::fromUtf8("paperSource"));
+ paperSource->setObjectName("paperSource");
gridLayout_2->addWidget(paperSource, 2, 1, 1, 1);
- horizontalSpacer_4 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer_4 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout_2->addItem(horizontalSpacer_4, 1, 2, 1, 1);
@@ -140,13 +140,13 @@ public:
gridLayout_3->addWidget(groupBox_2, 1, 0, 1, 2);
horizontalLayout_4 = new QHBoxLayout();
- horizontalLayout_4->setObjectName(QString::fromUtf8("horizontalLayout_4"));
+ horizontalLayout_4->setObjectName("horizontalLayout_4");
unitCombo = new QComboBox(QPageSetupWidget);
- unitCombo->setObjectName(QString::fromUtf8("unitCombo"));
+ unitCombo->setObjectName("unitCombo");
horizontalLayout_4->addWidget(unitCombo);
- horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout_4->addItem(horizontalSpacer_3);
@@ -154,36 +154,36 @@ public:
gridLayout_3->addLayout(horizontalLayout_4, 0, 0, 1, 2);
preview = new QWidget(QPageSetupWidget);
- preview->setObjectName(QString::fromUtf8("preview"));
+ preview->setObjectName("preview");
gridLayout_3->addWidget(preview, 2, 1, 2, 1);
groupBox_3 = new QGroupBox(QPageSetupWidget);
- groupBox_3->setObjectName(QString::fromUtf8("groupBox_3"));
+ groupBox_3->setObjectName("groupBox_3");
verticalLayout = new QVBoxLayout(groupBox_3);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
portrait = new QRadioButton(groupBox_3);
- portrait->setObjectName(QString::fromUtf8("portrait"));
+ portrait->setObjectName("portrait");
portrait->setChecked(true);
verticalLayout->addWidget(portrait);
landscape = new QRadioButton(groupBox_3);
- landscape->setObjectName(QString::fromUtf8("landscape"));
+ landscape->setObjectName("landscape");
verticalLayout->addWidget(landscape);
reverseLandscape = new QRadioButton(groupBox_3);
- reverseLandscape->setObjectName(QString::fromUtf8("reverseLandscape"));
+ reverseLandscape->setObjectName("reverseLandscape");
verticalLayout->addWidget(reverseLandscape);
reversePortrait = new QRadioButton(groupBox_3);
- reversePortrait->setObjectName(QString::fromUtf8("reversePortrait"));
+ reversePortrait->setObjectName("reversePortrait");
verticalLayout->addWidget(reversePortrait);
- verticalSpacer_5 = new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ verticalSpacer_5 = new QSpacerItem(0, 0, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
verticalLayout->addItem(verticalSpacer_5);
@@ -191,61 +191,61 @@ public:
gridLayout_3->addWidget(groupBox_3, 2, 0, 1, 1);
groupBox = new QGroupBox(QPageSetupWidget);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
horizontalLayout_2 = new QHBoxLayout(groupBox);
- horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
+ horizontalLayout_2->setObjectName("horizontalLayout_2");
gridLayout = new QGridLayout();
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
topMargin = new QDoubleSpinBox(groupBox);
- topMargin->setObjectName(QString::fromUtf8("topMargin"));
+ topMargin->setObjectName("topMargin");
topMargin->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
topMargin->setMaximum(999.990000000000009);
gridLayout->addWidget(topMargin, 0, 1, 1, 1);
horizontalLayout = new QHBoxLayout();
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
- horizontalSpacer_7 = new QSpacerItem(0, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalLayout->setObjectName("horizontalLayout");
+ horizontalSpacer_7 = new QSpacerItem(0, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout->addItem(horizontalSpacer_7);
leftMargin = new QDoubleSpinBox(groupBox);
- leftMargin->setObjectName(QString::fromUtf8("leftMargin"));
+ leftMargin->setObjectName("leftMargin");
leftMargin->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
leftMargin->setMaximum(999.990000000000009);
horizontalLayout->addWidget(leftMargin);
- horizontalSpacer = new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
+ horizontalSpacer = new QSpacerItem(0, 0, QSizePolicy::Policy::MinimumExpanding, QSizePolicy::Policy::Minimum);
horizontalLayout->addItem(horizontalSpacer);
rightMargin = new QDoubleSpinBox(groupBox);
- rightMargin->setObjectName(QString::fromUtf8("rightMargin"));
+ rightMargin->setObjectName("rightMargin");
rightMargin->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
rightMargin->setMaximum(999.990000000000009);
horizontalLayout->addWidget(rightMargin);
- horizontalSpacer_8 = new QSpacerItem(0, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer_8 = new QSpacerItem(0, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout->addItem(horizontalSpacer_8);
gridLayout->addLayout(horizontalLayout, 1, 0, 1, 3);
- horizontalSpacer_2 = new QSpacerItem(0, 20, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
+ horizontalSpacer_2 = new QSpacerItem(0, 20, QSizePolicy::Policy::MinimumExpanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(horizontalSpacer_2, 0, 2, 1, 1);
bottomMargin = new QDoubleSpinBox(groupBox);
- bottomMargin->setObjectName(QString::fromUtf8("bottomMargin"));
+ bottomMargin->setObjectName("bottomMargin");
bottomMargin->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
bottomMargin->setMaximum(999.990000000000009);
gridLayout->addWidget(bottomMargin, 2, 1, 1, 1);
- horizontalSpacer_5 = new QSpacerItem(0, 20, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
+ horizontalSpacer_5 = new QSpacerItem(0, 20, QSizePolicy::Policy::MinimumExpanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(horizontalSpacer_5, 0, 0, 1, 1);
@@ -256,37 +256,37 @@ public:
gridLayout_3->addWidget(groupBox, 3, 0, 1, 1);
pagesPerSheetButtonGroup = new QGroupBox(QPageSetupWidget);
- pagesPerSheetButtonGroup->setObjectName(QString::fromUtf8("pagesPerSheetButtonGroup"));
+ pagesPerSheetButtonGroup->setObjectName("pagesPerSheetButtonGroup");
gridLayout_4 = new QGridLayout(pagesPerSheetButtonGroup);
- gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4"));
+ gridLayout_4->setObjectName("gridLayout_4");
pagesPerSheetCombo = new QComboBox(pagesPerSheetButtonGroup);
- pagesPerSheetCombo->setObjectName(QString::fromUtf8("pagesPerSheetCombo"));
+ pagesPerSheetCombo->setObjectName("pagesPerSheetCombo");
gridLayout_4->addWidget(pagesPerSheetCombo, 0, 1, 1, 1);
- horizontalSpacer_6 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer_6 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout_4->addItem(horizontalSpacer_6, 0, 2, 1, 1);
label = new QLabel(pagesPerSheetButtonGroup);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout_4->addWidget(label, 1, 0, 1, 1);
pagesPerSheetLayoutCombo = new QComboBox(pagesPerSheetButtonGroup);
- pagesPerSheetLayoutCombo->setObjectName(QString::fromUtf8("pagesPerSheetLayoutCombo"));
+ pagesPerSheetLayoutCombo->setObjectName("pagesPerSheetLayoutCombo");
gridLayout_4->addWidget(pagesPerSheetLayoutCombo, 1, 1, 1, 1);
label_2 = new QLabel(pagesPerSheetButtonGroup);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout_4->addWidget(label_2, 0, 0, 1, 1);
gridLayout_3->addWidget(pagesPerSheetButtonGroup, 5, 0, 1, 2);
- verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ verticalSpacer = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout_3->addItem(verticalSpacer, 6, 0, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/qprintpropertieswidget.ui.h b/tests/auto/tools/uic/baseline/qprintpropertieswidget.ui.h
index 7d6c3fd254..66e4e1cec8 100644
--- a/tests/auto/tools/uic/baseline/qprintpropertieswidget.ui.h
+++ b/tests/auto/tools/uic/baseline/qprintpropertieswidget.ui.h
@@ -36,30 +36,30 @@ public:
void setupUi(QWidget *QPrintPropertiesWidget)
{
if (QPrintPropertiesWidget->objectName().isEmpty())
- QPrintPropertiesWidget->setObjectName(QString::fromUtf8("QPrintPropertiesWidget"));
+ QPrintPropertiesWidget->setObjectName("QPrintPropertiesWidget");
QPrintPropertiesWidget->resize(396, 288);
verticalLayout_4 = new QVBoxLayout(QPrintPropertiesWidget);
verticalLayout_4->setContentsMargins(0, 0, 0, 0);
- verticalLayout_4->setObjectName(QString::fromUtf8("verticalLayout_4"));
+ verticalLayout_4->setObjectName("verticalLayout_4");
tabs = new QTabWidget(QPrintPropertiesWidget);
- tabs->setObjectName(QString::fromUtf8("tabs"));
+ tabs->setObjectName("tabs");
tabPage = new QWidget();
- tabPage->setObjectName(QString::fromUtf8("tabPage"));
+ tabPage->setObjectName("tabPage");
tabPage->setGeometry(QRect(0, 0, 392, 261));
horizontalLayout = new QHBoxLayout(tabPage);
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
pageSetup = new QPageSetupWidget(tabPage);
- pageSetup->setObjectName(QString::fromUtf8("pageSetup"));
+ pageSetup->setObjectName("pageSetup");
horizontalLayout->addWidget(pageSetup);
tabs->addTab(tabPage, QString());
cupsPropertiesPage = new QWidget();
- cupsPropertiesPage->setObjectName(QString::fromUtf8("cupsPropertiesPage"));
+ cupsPropertiesPage->setObjectName("cupsPropertiesPage");
horizontalLayout_2 = new QHBoxLayout(cupsPropertiesPage);
- horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
+ horizontalLayout_2->setObjectName("horizontalLayout_2");
treeView = new QTreeView(cupsPropertiesPage);
- treeView->setObjectName(QString::fromUtf8("treeView"));
+ treeView->setObjectName("treeView");
treeView->setAlternatingRowColors(true);
horizontalLayout_2->addWidget(treeView);
diff --git a/tests/auto/tools/uic/baseline/qprintsettingsoutput.ui.h b/tests/auto/tools/uic/baseline/qprintsettingsoutput.ui.h
index 375ca53177..e331bb3a2e 100644
--- a/tests/auto/tools/uic/baseline/qprintsettingsoutput.ui.h
+++ b/tests/auto/tools/uic/baseline/qprintsettingsoutput.ui.h
@@ -70,21 +70,21 @@ public:
void setupUi(QWidget *QPrintSettingsOutput)
{
if (QPrintSettingsOutput->objectName().isEmpty())
- QPrintSettingsOutput->setObjectName(QString::fromUtf8("QPrintSettingsOutput"));
+ QPrintSettingsOutput->setObjectName("QPrintSettingsOutput");
QPrintSettingsOutput->resize(416, 166);
horizontalLayout_2 = new QHBoxLayout(QPrintSettingsOutput);
horizontalLayout_2->setContentsMargins(0, 0, 0, 0);
- horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
+ horizontalLayout_2->setObjectName("horizontalLayout_2");
tabs = new QTabWidget(QPrintSettingsOutput);
- tabs->setObjectName(QString::fromUtf8("tabs"));
+ tabs->setObjectName("tabs");
copiesTab = new QWidget();
- copiesTab->setObjectName(QString::fromUtf8("copiesTab"));
+ copiesTab->setObjectName("copiesTab");
copiesTab->setGeometry(QRect(0, 0, 412, 139));
horizontalLayout = new QHBoxLayout(copiesTab);
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
gbPrintRange = new QGroupBox(copiesTab);
- gbPrintRange->setObjectName(QString::fromUtf8("gbPrintRange"));
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum);
+ gbPrintRange->setObjectName("gbPrintRange");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Minimum);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(gbPrintRange->sizePolicy().hasHeightForWidth());
@@ -92,9 +92,9 @@ public:
_3 = new QVBoxLayout(gbPrintRange);
_3->setSpacing(4);
_3->setContentsMargins(6, 6, 6, 6);
- _3->setObjectName(QString::fromUtf8("_3"));
+ _3->setObjectName("_3");
printAll = new QRadioButton(gbPrintRange);
- printAll->setObjectName(QString::fromUtf8("printAll"));
+ printAll->setObjectName("printAll");
printAll->setChecked(true);
_3->addWidget(printAll);
@@ -104,14 +104,14 @@ public:
_4->setSpacing(6);
#endif
_4->setContentsMargins(0, 0, 0, 0);
- _4->setObjectName(QString::fromUtf8("_4"));
+ _4->setObjectName("_4");
printRange = new QRadioButton(gbPrintRange);
- printRange->setObjectName(QString::fromUtf8("printRange"));
+ printRange->setObjectName("printRange");
_4->addWidget(printRange);
from = new QSpinBox(gbPrintRange);
- from->setObjectName(QString::fromUtf8("from"));
+ from->setObjectName("from");
from->setEnabled(false);
from->setMinimum(1);
from->setMaximum(999);
@@ -119,19 +119,19 @@ public:
_4->addWidget(from);
label_3 = new QLabel(gbPrintRange);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
_4->addWidget(label_3);
to = new QSpinBox(gbPrintRange);
- to->setObjectName(QString::fromUtf8("to"));
+ to->setObjectName("to");
to->setEnabled(false);
to->setMinimum(1);
to->setMaximum(999);
_4->addWidget(to);
- spacerItem = new QSpacerItem(0, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(0, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
_4->addItem(spacerItem);
@@ -139,11 +139,11 @@ public:
_3->addLayout(_4);
printSelection = new QRadioButton(gbPrintRange);
- printSelection->setObjectName(QString::fromUtf8("printSelection"));
+ printSelection->setObjectName("printSelection");
_3->addWidget(printSelection);
- verticalSpacer = new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ verticalSpacer = new QSpacerItem(1, 1, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
_3->addItem(verticalSpacer);
@@ -151,33 +151,33 @@ public:
horizontalLayout->addWidget(gbPrintRange);
groupBox = new QGroupBox(copiesTab);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
gridLayout = new QGridLayout(groupBox);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(groupBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 1);
copies = new QSpinBox(groupBox);
- copies->setObjectName(QString::fromUtf8("copies"));
+ copies->setObjectName("copies");
copies->setMinimum(1);
copies->setMaximum(999);
gridLayout->addWidget(copies, 0, 1, 1, 2);
- horizontalSpacer = new QSpacerItem(91, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer = new QSpacerItem(91, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(horizontalSpacer, 0, 3, 1, 1);
collate = new QCheckBox(groupBox);
- collate->setObjectName(QString::fromUtf8("collate"));
+ collate->setObjectName("collate");
gridLayout->addWidget(collate, 1, 0, 1, 2);
outputIcon = new QLabel(groupBox);
- outputIcon->setObjectName(QString::fromUtf8("outputIcon"));
- QSizePolicy sizePolicy1(QSizePolicy::Ignored, QSizePolicy::Ignored);
+ outputIcon->setObjectName("outputIcon");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Ignored, QSizePolicy::Policy::Ignored);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(outputIcon->sizePolicy().hasHeightForWidth());
@@ -186,11 +186,11 @@ public:
gridLayout->addWidget(outputIcon, 1, 2, 2, 2);
reverse = new QCheckBox(groupBox);
- reverse->setObjectName(QString::fromUtf8("reverse"));
+ reverse->setObjectName("reverse");
gridLayout->addWidget(reverse, 2, 0, 1, 2);
- verticalSpacer_2 = new QSpacerItem(0, 1, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ verticalSpacer_2 = new QSpacerItem(0, 1, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout->addItem(verticalSpacer_2, 3, 0, 1, 4);
@@ -199,30 +199,30 @@ public:
tabs->addTab(copiesTab, QString());
optionsTab = new QWidget();
- optionsTab->setObjectName(QString::fromUtf8("optionsTab"));
+ optionsTab->setObjectName("optionsTab");
optionsTab->setGeometry(QRect(0, 0, 412, 139));
gridLayout_2 = new QGridLayout(optionsTab);
- gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
+ gridLayout_2->setObjectName("gridLayout_2");
colorMode = new QGroupBox(optionsTab);
- colorMode->setObjectName(QString::fromUtf8("colorMode"));
+ colorMode->setObjectName("colorMode");
gridLayout_4 = new QGridLayout(colorMode);
- gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4"));
- verticalSpacer_6 = new QSpacerItem(1, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ gridLayout_4->setObjectName("gridLayout_4");
+ verticalSpacer_6 = new QSpacerItem(1, 0, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
gridLayout_4->addItem(verticalSpacer_6, 2, 0, 1, 1);
color = new QRadioButton(colorMode);
- color->setObjectName(QString::fromUtf8("color"));
+ color->setObjectName("color");
gridLayout_4->addWidget(color, 0, 0, 1, 1);
colorIcon = new QLabel(colorMode);
- colorIcon->setObjectName(QString::fromUtf8("colorIcon"));
+ colorIcon->setObjectName("colorIcon");
gridLayout_4->addWidget(colorIcon, 0, 1, 3, 1);
grayscale = new QRadioButton(colorMode);
- grayscale->setObjectName(QString::fromUtf8("grayscale"));
+ grayscale->setObjectName("grayscale");
gridLayout_4->addWidget(grayscale, 1, 0, 1, 1);
@@ -230,26 +230,26 @@ public:
gridLayout_2->addWidget(colorMode, 0, 1, 1, 1);
duplex = new QGroupBox(optionsTab);
- duplex->setObjectName(QString::fromUtf8("duplex"));
+ duplex->setObjectName("duplex");
verticalLayout = new QVBoxLayout(duplex);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
noDuplex = new QRadioButton(duplex);
- noDuplex->setObjectName(QString::fromUtf8("noDuplex"));
+ noDuplex->setObjectName("noDuplex");
noDuplex->setChecked(true);
verticalLayout->addWidget(noDuplex);
duplexLong = new QRadioButton(duplex);
- duplexLong->setObjectName(QString::fromUtf8("duplexLong"));
+ duplexLong->setObjectName("duplexLong");
verticalLayout->addWidget(duplexLong);
duplexShort = new QRadioButton(duplex);
- duplexShort->setObjectName(QString::fromUtf8("duplexShort"));
+ duplexShort->setObjectName("duplexShort");
verticalLayout->addWidget(duplexShort);
- verticalSpacer1 = new QSpacerItem(1, 0, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ verticalSpacer1 = new QSpacerItem(1, 0, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
verticalLayout->addItem(verticalSpacer1);
diff --git a/tests/auto/tools/uic/baseline/qprintwidget.ui.h b/tests/auto/tools/uic/baseline/qprintwidget.ui.h
index f3df481d83..7991273172 100644
--- a/tests/auto/tools/uic/baseline/qprintwidget.ui.h
+++ b/tests/auto/tools/uic/baseline/qprintwidget.ui.h
@@ -46,23 +46,23 @@ public:
void setupUi(QWidget *QPrintWidget)
{
if (QPrintWidget->objectName().isEmpty())
- QPrintWidget->setObjectName(QString::fromUtf8("QPrintWidget"));
+ QPrintWidget->setObjectName("QPrintWidget");
QPrintWidget->resize(443, 175);
horizontalLayout_2 = new QHBoxLayout(QPrintWidget);
horizontalLayout_2->setContentsMargins(0, 0, 0, 0);
- horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
+ horizontalLayout_2->setObjectName("horizontalLayout_2");
printerGroup = new QGroupBox(QPrintWidget);
- printerGroup->setObjectName(QString::fromUtf8("printerGroup"));
+ printerGroup->setObjectName("printerGroup");
gridLayout = new QGridLayout(printerGroup);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(printerGroup);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 1);
printers = new QComboBox(printerGroup);
- printers->setObjectName(QString::fromUtf8("printers"));
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ printers->setObjectName("printers");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(3);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(printers->sizePolicy().hasHeightForWidth());
@@ -71,8 +71,8 @@ public:
gridLayout->addWidget(printers, 0, 1, 1, 1);
properties = new QPushButton(printerGroup);
- properties->setObjectName(QString::fromUtf8("properties"));
- QSizePolicy sizePolicy1(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ properties->setObjectName("properties");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
sizePolicy1.setHorizontalStretch(1);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(properties->sizePolicy().hasHeightForWidth());
@@ -81,44 +81,44 @@ public:
gridLayout->addWidget(properties, 0, 2, 1, 1);
label_2 = new QLabel(printerGroup);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout->addWidget(label_2, 1, 0, 1, 1);
location = new QLabel(printerGroup);
- location->setObjectName(QString::fromUtf8("location"));
+ location->setObjectName("location");
gridLayout->addWidget(location, 1, 1, 1, 1);
preview = new QCheckBox(printerGroup);
- preview->setObjectName(QString::fromUtf8("preview"));
+ preview->setObjectName("preview");
gridLayout->addWidget(preview, 1, 2, 1, 1);
label_3 = new QLabel(printerGroup);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
gridLayout->addWidget(label_3, 2, 0, 1, 1);
type = new QLabel(printerGroup);
- type->setObjectName(QString::fromUtf8("type"));
+ type->setObjectName("type");
gridLayout->addWidget(type, 2, 1, 1, 1);
lOutput = new QLabel(printerGroup);
- lOutput->setObjectName(QString::fromUtf8("lOutput"));
+ lOutput->setObjectName("lOutput");
gridLayout->addWidget(lOutput, 3, 0, 1, 1);
horizontalLayout = new QHBoxLayout();
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
filename = new QLineEdit(printerGroup);
- filename->setObjectName(QString::fromUtf8("filename"));
+ filename->setObjectName("filename");
horizontalLayout->addWidget(filename);
fileBrowser = new QToolButton(printerGroup);
- fileBrowser->setObjectName(QString::fromUtf8("fileBrowser"));
+ fileBrowser->setObjectName("fileBrowser");
horizontalLayout->addWidget(fileBrowser);
diff --git a/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui b/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui
index 91a8700579..ebf3c821db 100644
--- a/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui
+++ b/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui
@@ -176,7 +176,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
+ <enum>QSizePolicy::Policy::Expanding</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui.h b/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui.h
index bd4b77816b..0160a5c8bc 100644
--- a/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qsqlconnectiondialog.ui.h
@@ -55,44 +55,44 @@ public:
void setupUi(QDialog *QSqlConnectionDialogUi)
{
if (QSqlConnectionDialogUi->objectName().isEmpty())
- QSqlConnectionDialogUi->setObjectName(QString::fromUtf8("QSqlConnectionDialogUi"));
+ QSqlConnectionDialogUi->setObjectName("QSqlConnectionDialogUi");
QSqlConnectionDialogUi->resize(315, 302);
vboxLayout = new QVBoxLayout(QSqlConnectionDialogUi);
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
#endif
vboxLayout->setContentsMargins(8, 8, 8, 8);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
connGroupBox = new QGroupBox(QSqlConnectionDialogUi);
- connGroupBox->setObjectName(QString::fromUtf8("connGroupBox"));
+ connGroupBox->setObjectName("connGroupBox");
gridLayout = new QGridLayout(connGroupBox);
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
#endif
gridLayout->setContentsMargins(8, 8, 8, 8);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
comboDriver = new QComboBox(connGroupBox);
- comboDriver->setObjectName(QString::fromUtf8("comboDriver"));
+ comboDriver->setObjectName("comboDriver");
gridLayout->addWidget(comboDriver, 0, 1, 1, 1);
textLabel4 = new QLabel(connGroupBox);
- textLabel4->setObjectName(QString::fromUtf8("textLabel4"));
+ textLabel4->setObjectName("textLabel4");
gridLayout->addWidget(textLabel4, 2, 0, 1, 1);
textLabel2 = new QLabel(connGroupBox);
- textLabel2->setObjectName(QString::fromUtf8("textLabel2"));
+ textLabel2->setObjectName("textLabel2");
gridLayout->addWidget(textLabel2, 0, 0, 1, 1);
editDatabase = new QLineEdit(connGroupBox);
- editDatabase->setObjectName(QString::fromUtf8("editDatabase"));
+ editDatabase->setObjectName("editDatabase");
gridLayout->addWidget(editDatabase, 1, 1, 1, 1);
portSpinBox = new QSpinBox(connGroupBox);
- portSpinBox->setObjectName(QString::fromUtf8("portSpinBox"));
+ portSpinBox->setObjectName("portSpinBox");
portSpinBox->setMaximum(65535);
portSpinBox->setMinimum(-1);
portSpinBox->setValue(-1);
@@ -100,38 +100,38 @@ public:
gridLayout->addWidget(portSpinBox, 5, 1, 1, 1);
textLabel3 = new QLabel(connGroupBox);
- textLabel3->setObjectName(QString::fromUtf8("textLabel3"));
+ textLabel3->setObjectName("textLabel3");
gridLayout->addWidget(textLabel3, 1, 0, 1, 1);
editPassword = new QLineEdit(connGroupBox);
- editPassword->setObjectName(QString::fromUtf8("editPassword"));
+ editPassword->setObjectName("editPassword");
editPassword->setEchoMode(QLineEdit::Password);
gridLayout->addWidget(editPassword, 3, 1, 1, 1);
editUsername = new QLineEdit(connGroupBox);
- editUsername->setObjectName(QString::fromUtf8("editUsername"));
+ editUsername->setObjectName("editUsername");
gridLayout->addWidget(editUsername, 2, 1, 1, 1);
editHostname = new QLineEdit(connGroupBox);
- editHostname->setObjectName(QString::fromUtf8("editHostname"));
+ editHostname->setObjectName("editHostname");
gridLayout->addWidget(editHostname, 4, 1, 1, 1);
textLabel5 = new QLabel(connGroupBox);
- textLabel5->setObjectName(QString::fromUtf8("textLabel5"));
+ textLabel5->setObjectName("textLabel5");
gridLayout->addWidget(textLabel5, 4, 0, 1, 1);
textLabel5_2 = new QLabel(connGroupBox);
- textLabel5_2->setObjectName(QString::fromUtf8("textLabel5_2"));
+ textLabel5_2->setObjectName("textLabel5_2");
gridLayout->addWidget(textLabel5_2, 5, 0, 1, 1);
textLabel4_2 = new QLabel(connGroupBox);
- textLabel4_2->setObjectName(QString::fromUtf8("textLabel4_2"));
+ textLabel4_2->setObjectName("textLabel4_2");
gridLayout->addWidget(textLabel4_2, 3, 0, 1, 1);
@@ -143,13 +143,13 @@ public:
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(0, 0, 0, 0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ hboxLayout->setObjectName("hboxLayout");
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
dbCheckBox = new QCheckBox(QSqlConnectionDialogUi);
- dbCheckBox->setObjectName(QString::fromUtf8("dbCheckBox"));
+ dbCheckBox->setObjectName("dbCheckBox");
hboxLayout->addWidget(dbCheckBox);
@@ -161,18 +161,18 @@ public:
hboxLayout1->setSpacing(6);
#endif
hboxLayout1->setContentsMargins(0, 0, 0, 0);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
- spacerItem1 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ hboxLayout1->setObjectName("hboxLayout1");
+ spacerItem1 = new QSpacerItem(20, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout1->addItem(spacerItem1);
okButton = new QPushButton(QSqlConnectionDialogUi);
- okButton->setObjectName(QString::fromUtf8("okButton"));
+ okButton->setObjectName("okButton");
hboxLayout1->addWidget(okButton);
cancelButton = new QPushButton(QSqlConnectionDialogUi);
- cancelButton->setObjectName(QString::fromUtf8("cancelButton"));
+ cancelButton->setObjectName("cancelButton");
hboxLayout1->addWidget(cancelButton);
diff --git a/tests/auto/tools/uic/baseline/qtgradientdialog.ui b/tests/auto/tools/uic/baseline/qtgradientdialog.ui
index 7ecd3a1a66..bb13c43b57 100644
--- a/tests/auto/tools/uic/baseline/qtgradientdialog.ui
+++ b/tests/auto/tools/uic/baseline/qtgradientdialog.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>QtGradientDialog</class>
<widget class="QDialog" name="QtGradientDialog" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/qtgradientdialog.ui.h b/tests/auto/tools/uic/baseline/qtgradientdialog.ui.h
index 647321fb5e..d458a49a79 100644
--- a/tests/auto/tools/uic/baseline/qtgradientdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qtgradientdialog.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -59,13 +36,13 @@ public:
void setupUi(QDialog *QtGradientDialog)
{
if (QtGradientDialog->objectName().isEmpty())
- QtGradientDialog->setObjectName(QString::fromUtf8("QtGradientDialog"));
+ QtGradientDialog->setObjectName("QtGradientDialog");
QtGradientDialog->resize(178, 81);
vboxLayout = new QVBoxLayout(QtGradientDialog);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
gradientEditor = new QtGradientEditor(QtGradientDialog);
- gradientEditor->setObjectName(QString::fromUtf8("gradientEditor"));
- QSizePolicy sizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+ gradientEditor->setObjectName("gradientEditor");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::MinimumExpanding, QSizePolicy::Policy::MinimumExpanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(gradientEditor->sizePolicy().hasHeightForWidth());
@@ -74,7 +51,7 @@ public:
vboxLayout->addWidget(gradientEditor);
buttonBox = new QDialogButtonBox(QtGradientDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/qtgradienteditor.ui b/tests/auto/tools/uic/baseline/qtgradienteditor.ui
index 6ab75f33fa..a8622ec233 100644
--- a/tests/auto/tools/uic/baseline/qtgradienteditor.ui
+++ b/tests/auto/tools/uic/baseline/qtgradienteditor.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 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>
<class>QtGradientEditor</class>
<widget class="QWidget" name="QtGradientEditor" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/qtgradienteditor.ui.h b/tests/auto/tools/uic/baseline/qtgradienteditor.ui.h
index 07081a9a78..e6ef198c6d 100644
--- a/tests/auto/tools/uic/baseline/qtgradienteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/qtgradienteditor.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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
+
*/
/********************************************************************************
@@ -145,12 +122,12 @@ public:
void setupUi(QWidget *QtGradientEditor)
{
if (QtGradientEditor->objectName().isEmpty())
- QtGradientEditor->setObjectName(QString::fromUtf8("QtGradientEditor"));
+ QtGradientEditor->setObjectName("QtGradientEditor");
QtGradientEditor->resize(364, 518);
frame = new QFrame(QtGradientEditor);
- frame->setObjectName(QString::fromUtf8("frame"));
+ frame->setObjectName("frame");
frame->setGeometry(QRect(10, 69, 193, 150));
- QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Expanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(frame->sizePolicy().hasHeightForWidth());
@@ -159,91 +136,91 @@ public:
frame->setFrameShadow(QFrame::Raised);
vboxLayout = new QVBoxLayout(frame);
vboxLayout->setSpacing(6);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
vboxLayout->setContentsMargins(0, 0, 0, 0);
gradientWidget = new QtGradientWidget(frame);
- gradientWidget->setObjectName(QString::fromUtf8("gradientWidget"));
+ gradientWidget->setObjectName("gradientWidget");
sizePolicy.setHeightForWidth(gradientWidget->sizePolicy().hasHeightForWidth());
gradientWidget->setSizePolicy(sizePolicy);
vboxLayout->addWidget(gradientWidget);
label1 = new QLabel(QtGradientEditor);
- label1->setObjectName(QString::fromUtf8("label1"));
+ label1->setObjectName("label1");
label1->setGeometry(QRect(209, 69, 64, 23));
spinBox1 = new QDoubleSpinBox(QtGradientEditor);
- spinBox1->setObjectName(QString::fromUtf8("spinBox1"));
+ spinBox1->setObjectName("spinBox1");
spinBox1->setGeometry(QRect(279, 69, 73, 23));
spinBox1->setKeyboardTracking(false);
spinBox1->setDecimals(3);
spinBox1->setMaximum(1.000000000000000);
spinBox1->setSingleStep(0.010000000000000);
label2 = new QLabel(QtGradientEditor);
- label2->setObjectName(QString::fromUtf8("label2"));
+ label2->setObjectName("label2");
label2->setGeometry(QRect(209, 99, 64, 23));
spinBox2 = new QDoubleSpinBox(QtGradientEditor);
- spinBox2->setObjectName(QString::fromUtf8("spinBox2"));
+ spinBox2->setObjectName("spinBox2");
spinBox2->setGeometry(QRect(279, 99, 73, 23));
spinBox2->setKeyboardTracking(false);
spinBox2->setDecimals(3);
spinBox2->setMaximum(1.000000000000000);
spinBox2->setSingleStep(0.010000000000000);
label3 = new QLabel(QtGradientEditor);
- label3->setObjectName(QString::fromUtf8("label3"));
+ label3->setObjectName("label3");
label3->setGeometry(QRect(209, 129, 64, 23));
spinBox3 = new QDoubleSpinBox(QtGradientEditor);
- spinBox3->setObjectName(QString::fromUtf8("spinBox3"));
+ spinBox3->setObjectName("spinBox3");
spinBox3->setGeometry(QRect(279, 129, 73, 23));
spinBox3->setKeyboardTracking(false);
spinBox3->setDecimals(3);
spinBox3->setMaximum(1.000000000000000);
spinBox3->setSingleStep(0.010000000000000);
label4 = new QLabel(QtGradientEditor);
- label4->setObjectName(QString::fromUtf8("label4"));
+ label4->setObjectName("label4");
label4->setGeometry(QRect(209, 159, 64, 23));
spinBox4 = new QDoubleSpinBox(QtGradientEditor);
- spinBox4->setObjectName(QString::fromUtf8("spinBox4"));
+ spinBox4->setObjectName("spinBox4");
spinBox4->setGeometry(QRect(279, 159, 73, 23));
spinBox4->setKeyboardTracking(false);
spinBox4->setDecimals(3);
spinBox4->setMaximum(1.000000000000000);
spinBox4->setSingleStep(0.010000000000000);
label5 = new QLabel(QtGradientEditor);
- label5->setObjectName(QString::fromUtf8("label5"));
+ label5->setObjectName("label5");
label5->setGeometry(QRect(209, 189, 64, 23));
spinBox5 = new QDoubleSpinBox(QtGradientEditor);
- spinBox5->setObjectName(QString::fromUtf8("spinBox5"));
+ spinBox5->setObjectName("spinBox5");
spinBox5->setGeometry(QRect(279, 189, 73, 23));
spinBox5->setKeyboardTracking(false);
spinBox5->setDecimals(3);
spinBox5->setMaximum(1.000000000000000);
spinBox5->setSingleStep(0.010000000000000);
gradientStopsWidget = new QtGradientStopsWidget(QtGradientEditor);
- gradientStopsWidget->setObjectName(QString::fromUtf8("gradientStopsWidget"));
+ gradientStopsWidget->setObjectName("gradientStopsWidget");
gradientStopsWidget->setGeometry(QRect(10, 225, 193, 67));
zoomLabel = new QLabel(QtGradientEditor);
- zoomLabel->setObjectName(QString::fromUtf8("zoomLabel"));
+ zoomLabel->setObjectName("zoomLabel");
zoomLabel->setGeometry(QRect(209, 231, 64, 23));
zoomAllButton = new QToolButton(QtGradientEditor);
- zoomAllButton->setObjectName(QString::fromUtf8("zoomAllButton"));
+ zoomAllButton->setObjectName("zoomAllButton");
zoomAllButton->setGeometry(QRect(279, 260, 72, 26));
- QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Fixed);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(zoomAllButton->sizePolicy().hasHeightForWidth());
zoomAllButton->setSizePolicy(sizePolicy1);
positionLabel = new QLabel(QtGradientEditor);
- positionLabel->setObjectName(QString::fromUtf8("positionLabel"));
+ positionLabel->setObjectName("positionLabel");
positionLabel->setGeometry(QRect(209, 304, 64, 23));
hLabel = new QLabel(QtGradientEditor);
- hLabel->setObjectName(QString::fromUtf8("hLabel"));
+ hLabel->setObjectName("hLabel");
hLabel->setGeometry(QRect(10, 335, 32, 18));
sizePolicy1.setHeightForWidth(hLabel->sizePolicy().hasHeightForWidth());
hLabel->setSizePolicy(sizePolicy1);
frame_2 = new QFrame(QtGradientEditor);
- frame_2->setObjectName(QString::fromUtf8("frame_2"));
+ frame_2->setObjectName("frame_2");
frame_2->setGeometry(QRect(48, 333, 155, 23));
- QSizePolicy sizePolicy2(QSizePolicy::Ignored, QSizePolicy::Preferred);
+ QSizePolicy sizePolicy2(QSizePolicy::Policy::Ignored, QSizePolicy::Policy::Preferred);
sizePolicy2.setHorizontalStretch(0);
sizePolicy2.setVerticalStretch(0);
sizePolicy2.setHeightForWidth(frame_2->sizePolicy().hasHeightForWidth());
@@ -251,11 +228,11 @@ public:
frame_2->setFrameShape(QFrame::StyledPanel);
frame_2->setFrameShadow(QFrame::Raised);
hboxLayout = new QHBoxLayout(frame_2);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
hboxLayout->setContentsMargins(0, 0, 0, 0);
hueColorLine = new QtColorLine(frame_2);
- hueColorLine->setObjectName(QString::fromUtf8("hueColorLine"));
- QSizePolicy sizePolicy3(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ hueColorLine->setObjectName("hueColorLine");
+ QSizePolicy sizePolicy3(QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Preferred);
sizePolicy3.setHorizontalStretch(0);
sizePolicy3.setVerticalStretch(0);
sizePolicy3.setHeightForWidth(hueColorLine->sizePolicy().hasHeightForWidth());
@@ -264,130 +241,130 @@ public:
hboxLayout->addWidget(hueColorLine);
hueLabel = new QLabel(QtGradientEditor);
- hueLabel->setObjectName(QString::fromUtf8("hueLabel"));
+ hueLabel->setObjectName("hueLabel");
hueLabel->setGeometry(QRect(209, 335, 64, 18));
sizePolicy1.setHeightForWidth(hueLabel->sizePolicy().hasHeightForWidth());
hueLabel->setSizePolicy(sizePolicy1);
sLabel = new QLabel(QtGradientEditor);
- sLabel->setObjectName(QString::fromUtf8("sLabel"));
+ sLabel->setObjectName("sLabel");
sLabel->setGeometry(QRect(10, 364, 32, 18));
sizePolicy1.setHeightForWidth(sLabel->sizePolicy().hasHeightForWidth());
sLabel->setSizePolicy(sizePolicy1);
frame_5 = new QFrame(QtGradientEditor);
- frame_5->setObjectName(QString::fromUtf8("frame_5"));
+ frame_5->setObjectName("frame_5");
frame_5->setGeometry(QRect(48, 362, 155, 23));
sizePolicy2.setHeightForWidth(frame_5->sizePolicy().hasHeightForWidth());
frame_5->setSizePolicy(sizePolicy2);
frame_5->setFrameShape(QFrame::StyledPanel);
frame_5->setFrameShadow(QFrame::Raised);
hboxLayout1 = new QHBoxLayout(frame_5);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
hboxLayout1->setContentsMargins(0, 0, 0, 0);
saturationColorLine = new QtColorLine(frame_5);
- saturationColorLine->setObjectName(QString::fromUtf8("saturationColorLine"));
+ saturationColorLine->setObjectName("saturationColorLine");
sizePolicy3.setHeightForWidth(saturationColorLine->sizePolicy().hasHeightForWidth());
saturationColorLine->setSizePolicy(sizePolicy3);
hboxLayout1->addWidget(saturationColorLine);
saturationLabel = new QLabel(QtGradientEditor);
- saturationLabel->setObjectName(QString::fromUtf8("saturationLabel"));
+ saturationLabel->setObjectName("saturationLabel");
saturationLabel->setGeometry(QRect(209, 364, 64, 18));
sizePolicy1.setHeightForWidth(saturationLabel->sizePolicy().hasHeightForWidth());
saturationLabel->setSizePolicy(sizePolicy1);
vLabel = new QLabel(QtGradientEditor);
- vLabel->setObjectName(QString::fromUtf8("vLabel"));
+ vLabel->setObjectName("vLabel");
vLabel->setGeometry(QRect(10, 393, 32, 18));
sizePolicy1.setHeightForWidth(vLabel->sizePolicy().hasHeightForWidth());
vLabel->setSizePolicy(sizePolicy1);
frame_3 = new QFrame(QtGradientEditor);
- frame_3->setObjectName(QString::fromUtf8("frame_3"));
+ frame_3->setObjectName("frame_3");
frame_3->setGeometry(QRect(48, 391, 155, 23));
sizePolicy2.setHeightForWidth(frame_3->sizePolicy().hasHeightForWidth());
frame_3->setSizePolicy(sizePolicy2);
frame_3->setFrameShape(QFrame::StyledPanel);
frame_3->setFrameShadow(QFrame::Raised);
hboxLayout2 = new QHBoxLayout(frame_3);
- hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
+ hboxLayout2->setObjectName("hboxLayout2");
hboxLayout2->setContentsMargins(0, 0, 0, 0);
valueColorLine = new QtColorLine(frame_3);
- valueColorLine->setObjectName(QString::fromUtf8("valueColorLine"));
+ valueColorLine->setObjectName("valueColorLine");
sizePolicy3.setHeightForWidth(valueColorLine->sizePolicy().hasHeightForWidth());
valueColorLine->setSizePolicy(sizePolicy3);
hboxLayout2->addWidget(valueColorLine);
valueLabel = new QLabel(QtGradientEditor);
- valueLabel->setObjectName(QString::fromUtf8("valueLabel"));
+ valueLabel->setObjectName("valueLabel");
valueLabel->setGeometry(QRect(209, 393, 64, 18));
sizePolicy1.setHeightForWidth(valueLabel->sizePolicy().hasHeightForWidth());
valueLabel->setSizePolicy(sizePolicy1);
aLabel = new QLabel(QtGradientEditor);
- aLabel->setObjectName(QString::fromUtf8("aLabel"));
+ aLabel->setObjectName("aLabel");
aLabel->setGeometry(QRect(10, 422, 32, 18));
sizePolicy1.setHeightForWidth(aLabel->sizePolicy().hasHeightForWidth());
aLabel->setSizePolicy(sizePolicy1);
frame_4 = new QFrame(QtGradientEditor);
- frame_4->setObjectName(QString::fromUtf8("frame_4"));
+ frame_4->setObjectName("frame_4");
frame_4->setGeometry(QRect(48, 420, 155, 23));
sizePolicy2.setHeightForWidth(frame_4->sizePolicy().hasHeightForWidth());
frame_4->setSizePolicy(sizePolicy2);
frame_4->setFrameShape(QFrame::StyledPanel);
frame_4->setFrameShadow(QFrame::Raised);
hboxLayout3 = new QHBoxLayout(frame_4);
- hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3"));
+ hboxLayout3->setObjectName("hboxLayout3");
hboxLayout3->setContentsMargins(0, 0, 0, 0);
alphaColorLine = new QtColorLine(frame_4);
- alphaColorLine->setObjectName(QString::fromUtf8("alphaColorLine"));
+ alphaColorLine->setObjectName("alphaColorLine");
sizePolicy3.setHeightForWidth(alphaColorLine->sizePolicy().hasHeightForWidth());
alphaColorLine->setSizePolicy(sizePolicy3);
hboxLayout3->addWidget(alphaColorLine);
alphaLabel = new QLabel(QtGradientEditor);
- alphaLabel->setObjectName(QString::fromUtf8("alphaLabel"));
+ alphaLabel->setObjectName("alphaLabel");
alphaLabel->setGeometry(QRect(209, 422, 64, 18));
sizePolicy1.setHeightForWidth(alphaLabel->sizePolicy().hasHeightForWidth());
alphaLabel->setSizePolicy(sizePolicy1);
typeComboBox = new QComboBox(QtGradientEditor);
- typeComboBox->setObjectName(QString::fromUtf8("typeComboBox"));
+ typeComboBox->setObjectName("typeComboBox");
typeComboBox->setGeometry(QRect(10, 40, 79, 22));
spreadComboBox = new QComboBox(QtGradientEditor);
- spreadComboBox->setObjectName(QString::fromUtf8("spreadComboBox"));
+ spreadComboBox->setObjectName("spreadComboBox");
spreadComboBox->setGeometry(QRect(96, 40, 72, 22));
colorLabel = new QLabel(QtGradientEditor);
- colorLabel->setObjectName(QString::fromUtf8("colorLabel"));
+ colorLabel->setObjectName("colorLabel");
colorLabel->setGeometry(QRect(10, 298, 32, 29));
- QSizePolicy sizePolicy4(QSizePolicy::Fixed, QSizePolicy::Preferred);
+ QSizePolicy sizePolicy4(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Preferred);
sizePolicy4.setHorizontalStretch(0);
sizePolicy4.setVerticalStretch(0);
sizePolicy4.setHeightForWidth(colorLabel->sizePolicy().hasHeightForWidth());
colorLabel->setSizePolicy(sizePolicy4);
colorButton = new QtColorButton(QtGradientEditor);
- colorButton->setObjectName(QString::fromUtf8("colorButton"));
+ colorButton->setObjectName("colorButton");
colorButton->setGeometry(QRect(48, 300, 26, 25));
hsvRadioButton = new QRadioButton(QtGradientEditor);
- hsvRadioButton->setObjectName(QString::fromUtf8("hsvRadioButton"));
+ hsvRadioButton->setObjectName("hsvRadioButton");
hsvRadioButton->setGeometry(QRect(80, 301, 49, 23));
- QSizePolicy sizePolicy5(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ QSizePolicy sizePolicy5(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Fixed);
sizePolicy5.setHorizontalStretch(0);
sizePolicy5.setVerticalStretch(0);
sizePolicy5.setHeightForWidth(hsvRadioButton->sizePolicy().hasHeightForWidth());
hsvRadioButton->setSizePolicy(sizePolicy5);
hsvRadioButton->setChecked(true);
rgbRadioButton = new QRadioButton(QtGradientEditor);
- rgbRadioButton->setObjectName(QString::fromUtf8("rgbRadioButton"));
+ rgbRadioButton->setObjectName("rgbRadioButton");
rgbRadioButton->setGeometry(QRect(135, 301, 49, 23));
sizePolicy5.setHeightForWidth(rgbRadioButton->sizePolicy().hasHeightForWidth());
rgbRadioButton->setSizePolicy(sizePolicy5);
positionWidget = new QWidget(QtGradientEditor);
- positionWidget->setObjectName(QString::fromUtf8("positionWidget"));
+ positionWidget->setObjectName("positionWidget");
positionWidget->setGeometry(QRect(279, 304, 73, 23));
vboxLayout1 = new QVBoxLayout(positionWidget);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
vboxLayout1->setContentsMargins(0, 0, 0, 0);
positionSpinBox = new QDoubleSpinBox(positionWidget);
- positionSpinBox->setObjectName(QString::fromUtf8("positionSpinBox"));
+ positionSpinBox->setObjectName("positionSpinBox");
positionSpinBox->setKeyboardTracking(false);
positionSpinBox->setDecimals(3);
positionSpinBox->setMinimum(0.000000000000000);
@@ -398,65 +375,65 @@ public:
vboxLayout1->addWidget(positionSpinBox);
hueWidget = new QWidget(QtGradientEditor);
- hueWidget->setObjectName(QString::fromUtf8("hueWidget"));
+ hueWidget->setObjectName("hueWidget");
hueWidget->setGeometry(QRect(279, 333, 73, 23));
vboxLayout2 = new QVBoxLayout(hueWidget);
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
vboxLayout2->setContentsMargins(0, 0, 0, 0);
hueSpinBox = new QSpinBox(hueWidget);
- hueSpinBox->setObjectName(QString::fromUtf8("hueSpinBox"));
+ hueSpinBox->setObjectName("hueSpinBox");
hueSpinBox->setKeyboardTracking(false);
hueSpinBox->setMaximum(359);
vboxLayout2->addWidget(hueSpinBox);
saturationWidget = new QWidget(QtGradientEditor);
- saturationWidget->setObjectName(QString::fromUtf8("saturationWidget"));
+ saturationWidget->setObjectName("saturationWidget");
saturationWidget->setGeometry(QRect(279, 362, 73, 23));
vboxLayout3 = new QVBoxLayout(saturationWidget);
- vboxLayout3->setObjectName(QString::fromUtf8("vboxLayout3"));
+ vboxLayout3->setObjectName("vboxLayout3");
vboxLayout3->setContentsMargins(0, 0, 0, 0);
saturationSpinBox = new QSpinBox(saturationWidget);
- saturationSpinBox->setObjectName(QString::fromUtf8("saturationSpinBox"));
+ saturationSpinBox->setObjectName("saturationSpinBox");
saturationSpinBox->setKeyboardTracking(false);
saturationSpinBox->setMaximum(255);
vboxLayout3->addWidget(saturationSpinBox);
valueWidget = new QWidget(QtGradientEditor);
- valueWidget->setObjectName(QString::fromUtf8("valueWidget"));
+ valueWidget->setObjectName("valueWidget");
valueWidget->setGeometry(QRect(279, 391, 73, 23));
vboxLayout4 = new QVBoxLayout(valueWidget);
- vboxLayout4->setObjectName(QString::fromUtf8("vboxLayout4"));
+ vboxLayout4->setObjectName("vboxLayout4");
vboxLayout4->setContentsMargins(0, 0, 0, 0);
valueSpinBox = new QSpinBox(valueWidget);
- valueSpinBox->setObjectName(QString::fromUtf8("valueSpinBox"));
+ valueSpinBox->setObjectName("valueSpinBox");
valueSpinBox->setKeyboardTracking(false);
valueSpinBox->setMaximum(255);
vboxLayout4->addWidget(valueSpinBox);
alphaWidget = new QWidget(QtGradientEditor);
- alphaWidget->setObjectName(QString::fromUtf8("alphaWidget"));
+ alphaWidget->setObjectName("alphaWidget");
alphaWidget->setGeometry(QRect(279, 420, 73, 23));
vboxLayout5 = new QVBoxLayout(alphaWidget);
- vboxLayout5->setObjectName(QString::fromUtf8("vboxLayout5"));
+ vboxLayout5->setObjectName("vboxLayout5");
vboxLayout5->setContentsMargins(0, 0, 0, 0);
alphaSpinBox = new QSpinBox(alphaWidget);
- alphaSpinBox->setObjectName(QString::fromUtf8("alphaSpinBox"));
+ alphaSpinBox->setObjectName("alphaSpinBox");
alphaSpinBox->setKeyboardTracking(false);
alphaSpinBox->setMaximum(255);
vboxLayout5->addWidget(alphaSpinBox);
zoomWidget = new QWidget(QtGradientEditor);
- zoomWidget->setObjectName(QString::fromUtf8("zoomWidget"));
+ zoomWidget->setObjectName("zoomWidget");
zoomWidget->setGeometry(QRect(279, 231, 73, 23));
vboxLayout6 = new QVBoxLayout(zoomWidget);
- vboxLayout6->setObjectName(QString::fromUtf8("vboxLayout6"));
+ vboxLayout6->setObjectName("vboxLayout6");
vboxLayout6->setContentsMargins(0, 0, 0, 0);
zoomSpinBox = new QSpinBox(zoomWidget);
- zoomSpinBox->setObjectName(QString::fromUtf8("zoomSpinBox"));
+ zoomSpinBox->setObjectName("zoomSpinBox");
zoomSpinBox->setKeyboardTracking(false);
zoomSpinBox->setMinimum(100);
zoomSpinBox->setMaximum(10000);
@@ -466,60 +443,60 @@ public:
vboxLayout6->addWidget(zoomSpinBox);
line1Widget = new QWidget(QtGradientEditor);
- line1Widget->setObjectName(QString::fromUtf8("line1Widget"));
+ line1Widget->setObjectName("line1Widget");
line1Widget->setGeometry(QRect(209, 219, 143, 16));
vboxLayout7 = new QVBoxLayout(line1Widget);
- vboxLayout7->setObjectName(QString::fromUtf8("vboxLayout7"));
+ vboxLayout7->setObjectName("vboxLayout7");
vboxLayout7->setContentsMargins(0, 0, 0, 0);
line1 = new QFrame(line1Widget);
- line1->setObjectName(QString::fromUtf8("line1"));
- line1->setFrameShape(QFrame::HLine);
- line1->setFrameShadow(QFrame::Sunken);
+ line1->setObjectName("line1");
+ line1->setFrameShape(QFrame::Shape::HLine);
+ line1->setFrameShadow(QFrame::Shadow::Sunken);
vboxLayout7->addWidget(line1);
line2Widget = new QWidget(QtGradientEditor);
- line2Widget->setObjectName(QString::fromUtf8("line2Widget"));
+ line2Widget->setObjectName("line2Widget");
line2Widget->setGeometry(QRect(209, 292, 143, 16));
vboxLayout8 = new QVBoxLayout(line2Widget);
- vboxLayout8->setObjectName(QString::fromUtf8("vboxLayout8"));
+ vboxLayout8->setObjectName("vboxLayout8");
vboxLayout8->setContentsMargins(0, 0, 0, 0);
line2 = new QFrame(line2Widget);
- line2->setObjectName(QString::fromUtf8("line2"));
- line2->setFrameShape(QFrame::HLine);
- line2->setFrameShadow(QFrame::Sunken);
+ line2->setObjectName("line2");
+ line2->setFrameShape(QFrame::Shape::HLine);
+ line2->setFrameShadow(QFrame::Shadow::Sunken);
vboxLayout8->addWidget(line2);
zoomButtonsWidget = new QWidget(QtGradientEditor);
- zoomButtonsWidget->setObjectName(QString::fromUtf8("zoomButtonsWidget"));
+ zoomButtonsWidget->setObjectName("zoomButtonsWidget");
zoomButtonsWidget->setGeometry(QRect(209, 260, 64, 26));
- QSizePolicy sizePolicy6(QSizePolicy::Maximum, QSizePolicy::Preferred);
+ QSizePolicy sizePolicy6(QSizePolicy::Policy::Maximum, QSizePolicy::Policy::Preferred);
sizePolicy6.setHorizontalStretch(0);
sizePolicy6.setVerticalStretch(0);
sizePolicy6.setHeightForWidth(zoomButtonsWidget->sizePolicy().hasHeightForWidth());
zoomButtonsWidget->setSizePolicy(sizePolicy6);
hboxLayout4 = new QHBoxLayout(zoomButtonsWidget);
- hboxLayout4->setObjectName(QString::fromUtf8("hboxLayout4"));
+ hboxLayout4->setObjectName("hboxLayout4");
hboxLayout4->setContentsMargins(0, 0, 0, 0);
zoomInButton = new QToolButton(zoomButtonsWidget);
- zoomInButton->setObjectName(QString::fromUtf8("zoomInButton"));
+ zoomInButton->setObjectName("zoomInButton");
hboxLayout4->addWidget(zoomInButton);
zoomOutButton = new QToolButton(zoomButtonsWidget);
- zoomOutButton->setObjectName(QString::fromUtf8("zoomOutButton"));
+ zoomOutButton->setObjectName("zoomOutButton");
hboxLayout4->addWidget(zoomOutButton);
- spacerItem = new QSpacerItem(0, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(0, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout4->addItem(spacerItem);
detailsButton = new QToolButton(QtGradientEditor);
- detailsButton->setObjectName(QString::fromUtf8("detailsButton"));
+ detailsButton->setObjectName("detailsButton");
detailsButton->setGeometry(QRect(176, 40, 25, 22));
- QSizePolicy sizePolicy7(QSizePolicy::Fixed, QSizePolicy::Ignored);
+ QSizePolicy sizePolicy7(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Ignored);
sizePolicy7.setHorizontalStretch(0);
sizePolicy7.setVerticalStretch(0);
sizePolicy7.setHeightForWidth(detailsButton->sizePolicy().hasHeightForWidth());
@@ -527,32 +504,32 @@ public:
detailsButton->setCheckable(true);
detailsButton->setAutoRaise(true);
linearButton = new QToolButton(QtGradientEditor);
- linearButton->setObjectName(QString::fromUtf8("linearButton"));
+ linearButton->setObjectName("linearButton");
linearButton->setGeometry(QRect(10, 10, 30, 26));
linearButton->setCheckable(true);
linearButton->setAutoRaise(true);
radialButton = new QToolButton(QtGradientEditor);
- radialButton->setObjectName(QString::fromUtf8("radialButton"));
+ radialButton->setObjectName("radialButton");
radialButton->setGeometry(QRect(40, 10, 30, 26));
radialButton->setCheckable(true);
radialButton->setAutoRaise(true);
conicalButton = new QToolButton(QtGradientEditor);
- conicalButton->setObjectName(QString::fromUtf8("conicalButton"));
+ conicalButton->setObjectName("conicalButton");
conicalButton->setGeometry(QRect(70, 10, 30, 26));
conicalButton->setCheckable(true);
conicalButton->setAutoRaise(true);
padButton = new QToolButton(QtGradientEditor);
- padButton->setObjectName(QString::fromUtf8("padButton"));
+ padButton->setObjectName("padButton");
padButton->setGeometry(QRect(110, 10, 30, 26));
padButton->setCheckable(true);
padButton->setAutoRaise(true);
repeatButton = new QToolButton(QtGradientEditor);
- repeatButton->setObjectName(QString::fromUtf8("repeatButton"));
+ repeatButton->setObjectName("repeatButton");
repeatButton->setGeometry(QRect(140, 10, 30, 26));
repeatButton->setCheckable(true);
repeatButton->setAutoRaise(true);
reflectButton = new QToolButton(QtGradientEditor);
- reflectButton->setObjectName(QString::fromUtf8("reflectButton"));
+ reflectButton->setObjectName("reflectButton");
reflectButton->setGeometry(QRect(170, 10, 30, 26));
reflectButton->setCheckable(true);
reflectButton->setAutoRaise(true);
diff --git a/tests/auto/tools/uic/baseline/qtgradientview.ui.h b/tests/auto/tools/uic/baseline/qtgradientview.ui.h
index fc04fd30e6..f4860d7dcf 100644
--- a/tests/auto/tools/uic/baseline/qtgradientview.ui.h
+++ b/tests/auto/tools/uic/baseline/qtgradientview.ui.h
@@ -35,16 +35,16 @@ public:
void setupUi(QWidget *QtGradientView)
{
if (QtGradientView->objectName().isEmpty())
- QtGradientView->setObjectName(QString::fromUtf8("QtGradientView"));
+ QtGradientView->setObjectName("QtGradientView");
QtGradientView->resize(484, 228);
vboxLayout = new QVBoxLayout(QtGradientView);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
vboxLayout->setContentsMargins(0, 0, 0, 0);
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
newButton = new QToolButton(QtGradientView);
- newButton->setObjectName(QString::fromUtf8("newButton"));
- QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ newButton->setObjectName("newButton");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Minimum);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(newButton->sizePolicy().hasHeightForWidth());
@@ -55,7 +55,7 @@ public:
hboxLayout->addWidget(newButton);
editButton = new QToolButton(QtGradientView);
- editButton->setObjectName(QString::fromUtf8("editButton"));
+ editButton->setObjectName("editButton");
sizePolicy.setHeightForWidth(editButton->sizePolicy().hasHeightForWidth());
editButton->setSizePolicy(sizePolicy);
editButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
@@ -64,7 +64,7 @@ public:
hboxLayout->addWidget(editButton);
renameButton = new QToolButton(QtGradientView);
- renameButton->setObjectName(QString::fromUtf8("renameButton"));
+ renameButton->setObjectName("renameButton");
sizePolicy.setHeightForWidth(renameButton->sizePolicy().hasHeightForWidth());
renameButton->setSizePolicy(sizePolicy);
renameButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
@@ -73,7 +73,7 @@ public:
hboxLayout->addWidget(renameButton);
removeButton = new QToolButton(QtGradientView);
- removeButton->setObjectName(QString::fromUtf8("removeButton"));
+ removeButton->setObjectName("removeButton");
sizePolicy.setHeightForWidth(removeButton->sizePolicy().hasHeightForWidth());
removeButton->setSizePolicy(sizePolicy);
removeButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
@@ -81,7 +81,7 @@ public:
hboxLayout->addWidget(removeButton);
- spacerItem = new QSpacerItem(71, 26, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(71, 26, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
@@ -89,7 +89,7 @@ public:
vboxLayout->addLayout(hboxLayout);
listWidget = new QListWidget(QtGradientView);
- listWidget->setObjectName(QString::fromUtf8("listWidget"));
+ listWidget->setObjectName("listWidget");
vboxLayout->addWidget(listWidget);
diff --git a/tests/auto/tools/uic/baseline/qtgradientviewdialog.ui b/tests/auto/tools/uic/baseline/qtgradientviewdialog.ui
index 95fb05f1ee..5d5ceb50b6 100644
--- a/tests/auto/tools/uic/baseline/qtgradientviewdialog.ui
+++ b/tests/auto/tools/uic/baseline/qtgradientviewdialog.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>QtGradientViewDialog</class>
<widget class="QDialog" name="QtGradientViewDialog" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/qtgradientviewdialog.ui.h b/tests/auto/tools/uic/baseline/qtgradientviewdialog.ui.h
index 5b55f8fd4b..07c27f2752 100644
--- a/tests/auto/tools/uic/baseline/qtgradientviewdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qtgradientviewdialog.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -59,13 +36,13 @@ public:
void setupUi(QDialog *QtGradientViewDialog)
{
if (QtGradientViewDialog->objectName().isEmpty())
- QtGradientViewDialog->setObjectName(QString::fromUtf8("QtGradientViewDialog"));
+ QtGradientViewDialog->setObjectName("QtGradientViewDialog");
QtGradientViewDialog->resize(178, 72);
vboxLayout = new QVBoxLayout(QtGradientViewDialog);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
gradientView = new QtGradientView(QtGradientViewDialog);
- gradientView->setObjectName(QString::fromUtf8("gradientView"));
- QSizePolicy sizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
+ gradientView->setObjectName("gradientView");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::MinimumExpanding, QSizePolicy::Policy::MinimumExpanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(gradientView->sizePolicy().hasHeightForWidth());
@@ -74,7 +51,7 @@ public:
vboxLayout->addWidget(gradientView);
buttonBox = new QDialogButtonBox(QtGradientViewDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui b/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui
index 2205da4d50..80c8b0a3b2 100644
--- a/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui
+++ b/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui
@@ -59,7 +59,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Ignored</enum>
+ <enum>QSizePolicy::Policy::Ignored</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui.h b/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui.h
index bee434042d..86aab34880 100644
--- a/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qtresourceeditordialog.ui.h
@@ -50,21 +50,21 @@ public:
void setupUi(QDialog *QtResourceEditorDialog)
{
if (QtResourceEditorDialog->objectName().isEmpty())
- QtResourceEditorDialog->setObjectName(QString::fromUtf8("QtResourceEditorDialog"));
+ QtResourceEditorDialog->setObjectName("QtResourceEditorDialog");
QtResourceEditorDialog->resize(469, 317);
verticalLayout = new QVBoxLayout(QtResourceEditorDialog);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
splitter = new QSplitter(QtResourceEditorDialog);
- splitter->setObjectName(QString::fromUtf8("splitter"));
+ splitter->setObjectName("splitter");
splitter->setOrientation(Qt::Horizontal);
layoutWidget = new QWidget(splitter);
- layoutWidget->setObjectName(QString::fromUtf8("layoutWidget"));
+ layoutWidget->setObjectName("layoutWidget");
gridLayout = new QGridLayout(layoutWidget);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
gridLayout->setContentsMargins(0, 0, 0, 0);
qrcFileList = new QListWidget(layoutWidget);
- qrcFileList->setObjectName(QString::fromUtf8("qrcFileList"));
- QSizePolicy sizePolicy(QSizePolicy::Ignored, QSizePolicy::Expanding);
+ qrcFileList->setObjectName("qrcFileList");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Ignored, QSizePolicy::Policy::Expanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(qrcFileList->sizePolicy().hasHeightForWidth());
@@ -73,51 +73,51 @@ public:
gridLayout->addWidget(qrcFileList, 0, 0, 1, 4);
newQrcButton = new QToolButton(layoutWidget);
- newQrcButton->setObjectName(QString::fromUtf8("newQrcButton"));
+ newQrcButton->setObjectName("newQrcButton");
gridLayout->addWidget(newQrcButton, 1, 0, 1, 1);
removeQrcButton = new QToolButton(layoutWidget);
- removeQrcButton->setObjectName(QString::fromUtf8("removeQrcButton"));
+ removeQrcButton->setObjectName("removeQrcButton");
gridLayout->addWidget(removeQrcButton, 1, 2, 1, 1);
- spacerItem = new QSpacerItem(21, 20, QSizePolicy::Ignored, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(21, 20, QSizePolicy::Policy::Ignored, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem, 1, 3, 1, 1);
importQrcButton = new QToolButton(layoutWidget);
- importQrcButton->setObjectName(QString::fromUtf8("importQrcButton"));
+ importQrcButton->setObjectName("importQrcButton");
gridLayout->addWidget(importQrcButton, 1, 1, 1, 1);
splitter->addWidget(layoutWidget);
widget = new QWidget(splitter);
- widget->setObjectName(QString::fromUtf8("widget"));
+ widget->setObjectName("widget");
gridLayout1 = new QGridLayout(widget);
- gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+ gridLayout1->setObjectName("gridLayout1");
gridLayout1->setContentsMargins(0, 0, 0, 0);
resourceTreeView = new QTreeView(widget);
- resourceTreeView->setObjectName(QString::fromUtf8("resourceTreeView"));
+ resourceTreeView->setObjectName("resourceTreeView");
gridLayout1->addWidget(resourceTreeView, 0, 0, 1, 4);
newResourceButton = new QToolButton(widget);
- newResourceButton->setObjectName(QString::fromUtf8("newResourceButton"));
+ newResourceButton->setObjectName("newResourceButton");
gridLayout1->addWidget(newResourceButton, 1, 0, 1, 1);
addResourceButton = new QToolButton(widget);
- addResourceButton->setObjectName(QString::fromUtf8("addResourceButton"));
+ addResourceButton->setObjectName("addResourceButton");
gridLayout1->addWidget(addResourceButton, 1, 1, 1, 1);
removeResourceButton = new QToolButton(widget);
- removeResourceButton->setObjectName(QString::fromUtf8("removeResourceButton"));
+ removeResourceButton->setObjectName("removeResourceButton");
gridLayout1->addWidget(removeResourceButton, 1, 2, 1, 1);
- horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout1->addItem(horizontalSpacer, 1, 3, 1, 1);
@@ -126,7 +126,7 @@ public:
verticalLayout->addWidget(splitter);
buttonBox = new QDialogButtonBox(QtResourceEditorDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/qttoolbardialog.ui.h b/tests/auto/tools/uic/baseline/qttoolbardialog.ui.h
index c9e0c9e778..75f85c497c 100644
--- a/tests/auto/tools/uic/baseline/qttoolbardialog.ui.h
+++ b/tests/auto/tools/uic/baseline/qttoolbardialog.ui.h
@@ -51,21 +51,21 @@ public:
void setupUi(QDialog *QtToolBarDialog)
{
if (QtToolBarDialog->objectName().isEmpty())
- QtToolBarDialog->setObjectName(QString::fromUtf8("QtToolBarDialog"));
+ QtToolBarDialog->setObjectName("QtToolBarDialog");
QtToolBarDialog->resize(583, 508);
gridLayout = new QGridLayout(QtToolBarDialog);
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
#endif
gridLayout->setContentsMargins(8, 8, 8, 8);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
actionTree = new QTreeWidget(QtToolBarDialog);
- actionTree->setObjectName(QString::fromUtf8("actionTree"));
+ actionTree->setObjectName("actionTree");
gridLayout->addWidget(actionTree, 1, 0, 3, 1);
label = new QLabel(QtToolBarDialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 1);
@@ -74,24 +74,24 @@ public:
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(0, 0, 0, 0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
label_2 = new QLabel(QtToolBarDialog);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
hboxLayout->addWidget(label_2);
newButton = new QToolButton(QtToolBarDialog);
- newButton->setObjectName(QString::fromUtf8("newButton"));
+ newButton->setObjectName("newButton");
hboxLayout->addWidget(newButton);
removeButton = new QToolButton(QtToolBarDialog);
- removeButton->setObjectName(QString::fromUtf8("removeButton"));
+ removeButton->setObjectName("removeButton");
hboxLayout->addWidget(removeButton);
renameButton = new QToolButton(QtToolBarDialog);
- renameButton->setObjectName(QString::fromUtf8("renameButton"));
+ renameButton->setObjectName("renameButton");
hboxLayout->addWidget(renameButton);
@@ -103,10 +103,10 @@ public:
vboxLayout->setSpacing(6);
#endif
vboxLayout->setContentsMargins(0, 0, 0, 0);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
upButton = new QToolButton(QtToolBarDialog);
- upButton->setObjectName(QString::fromUtf8("upButton"));
- QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ upButton->setObjectName("upButton");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(upButton->sizePolicy().hasHeightForWidth());
@@ -115,27 +115,27 @@ public:
vboxLayout->addWidget(upButton);
leftButton = new QToolButton(QtToolBarDialog);
- leftButton->setObjectName(QString::fromUtf8("leftButton"));
+ leftButton->setObjectName("leftButton");
sizePolicy.setHeightForWidth(leftButton->sizePolicy().hasHeightForWidth());
leftButton->setSizePolicy(sizePolicy);
vboxLayout->addWidget(leftButton);
rightButton = new QToolButton(QtToolBarDialog);
- rightButton->setObjectName(QString::fromUtf8("rightButton"));
+ rightButton->setObjectName("rightButton");
sizePolicy.setHeightForWidth(rightButton->sizePolicy().hasHeightForWidth());
rightButton->setSizePolicy(sizePolicy);
vboxLayout->addWidget(rightButton);
downButton = new QToolButton(QtToolBarDialog);
- downButton->setObjectName(QString::fromUtf8("downButton"));
+ downButton->setObjectName("downButton");
sizePolicy.setHeightForWidth(downButton->sizePolicy().hasHeightForWidth());
downButton->setSizePolicy(sizePolicy);
vboxLayout->addWidget(downButton);
- spacerItem = new QSpacerItem(29, 16, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(29, 16, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout->addItem(spacerItem);
@@ -143,22 +143,22 @@ public:
gridLayout->addLayout(vboxLayout, 3, 1, 1, 1);
currentToolBarList = new QListWidget(QtToolBarDialog);
- currentToolBarList->setObjectName(QString::fromUtf8("currentToolBarList"));
+ currentToolBarList->setObjectName("currentToolBarList");
gridLayout->addWidget(currentToolBarList, 3, 2, 1, 1);
label_3 = new QLabel(QtToolBarDialog);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
gridLayout->addWidget(label_3, 2, 1, 1, 2);
toolBarList = new QListWidget(QtToolBarDialog);
- toolBarList->setObjectName(QString::fromUtf8("toolBarList"));
+ toolBarList->setObjectName("toolBarList");
gridLayout->addWidget(toolBarList, 1, 1, 1, 2);
buttonBox = new QDialogButtonBox(QtToolBarDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setStandardButtons(QDialogButtonBox::Apply|QDialogButtonBox::Cancel|QDialogButtonBox::Ok|QDialogButtonBox::RestoreDefaults);
gridLayout->addWidget(buttonBox, 5, 0, 1, 3);
diff --git a/tests/auto/tools/uic/baseline/qttrid.ui b/tests/auto/tools/uic/baseline/qttrid.ui
index 1cfc7f5400..44ba1a3c58 100644
--- a/tests/auto/tools/uic/baseline/qttrid.ui
+++ b/tests/auto/tools/uic/baseline/qttrid.ui
@@ -50,7 +50,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/qttrid.ui.h b/tests/auto/tools/uic/baseline/qttrid.ui.h
index cb5a4cb2e8..ba8219685f 100644
--- a/tests/auto/tools/uic/baseline/qttrid.ui.h
+++ b/tests/auto/tools/uic/baseline/qttrid.ui.h
@@ -67,61 +67,61 @@ public:
void setupUi(QMainWindow *RemoteControlClass)
{
if (RemoteControlClass->objectName().isEmpty())
- RemoteControlClass->setObjectName(QString::fromUtf8("RemoteControlClass"));
+ RemoteControlClass->setObjectName("RemoteControlClass");
RemoteControlClass->resize(344, 364);
actionQuit = new QAction(RemoteControlClass);
- actionQuit->setObjectName(QString::fromUtf8("actionQuit"));
+ actionQuit->setObjectName("actionQuit");
centralWidget = new QWidget(RemoteControlClass);
- centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
+ centralWidget->setObjectName("centralWidget");
gridLayout = new QGridLayout(centralWidget);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(11, 11, 11, 11);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(centralWidget);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 1);
startUrlLineEdit = new QLineEdit(centralWidget);
- startUrlLineEdit->setObjectName(QString::fromUtf8("startUrlLineEdit"));
+ startUrlLineEdit->setObjectName("startUrlLineEdit");
gridLayout->addWidget(startUrlLineEdit, 0, 1, 1, 2);
launchButton = new QPushButton(centralWidget);
- launchButton->setObjectName(QString::fromUtf8("launchButton"));
+ launchButton->setObjectName("launchButton");
gridLayout->addWidget(launchButton, 1, 1, 1, 1);
- spacerItem = new QSpacerItem(101, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(101, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem, 1, 2, 1, 1);
- spacerItem1 = new QSpacerItem(113, 16, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ spacerItem1 = new QSpacerItem(113, 16, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem1, 2, 1, 1, 1);
actionGroupBox = new QGroupBox(centralWidget);
- actionGroupBox->setObjectName(QString::fromUtf8("actionGroupBox"));
+ actionGroupBox->setObjectName("actionGroupBox");
actionGroupBox->setEnabled(false);
gridLayout1 = new QGridLayout(actionGroupBox);
gridLayout1->setSpacing(6);
gridLayout1->setContentsMargins(11, 11, 11, 11);
- gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+ gridLayout1->setObjectName("gridLayout1");
label_2 = new QLabel(actionGroupBox);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout1->addWidget(label_2, 0, 0, 1, 1);
hboxLayout = new QHBoxLayout();
hboxLayout->setSpacing(0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
indexLineEdit = new QLineEdit(actionGroupBox);
- indexLineEdit->setObjectName(QString::fromUtf8("indexLineEdit"));
+ indexLineEdit->setObjectName("indexLineEdit");
hboxLayout->addWidget(indexLineEdit);
indexButton = new QToolButton(actionGroupBox);
- indexButton->setObjectName(QString::fromUtf8("indexButton"));
+ indexButton->setObjectName("indexButton");
const QIcon icon = QIcon(QString::fromUtf8(":/remotecontrol/enter.png"));
indexButton->setIcon(icon);
@@ -131,20 +131,20 @@ public:
gridLayout1->addLayout(hboxLayout, 0, 1, 1, 2);
label_4 = new QLabel(actionGroupBox);
- label_4->setObjectName(QString::fromUtf8("label_4"));
+ label_4->setObjectName("label_4");
gridLayout1->addWidget(label_4, 1, 0, 1, 1);
hboxLayout1 = new QHBoxLayout();
hboxLayout1->setSpacing(0);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
identifierLineEdit = new QLineEdit(actionGroupBox);
- identifierLineEdit->setObjectName(QString::fromUtf8("identifierLineEdit"));
+ identifierLineEdit->setObjectName("identifierLineEdit");
hboxLayout1->addWidget(identifierLineEdit);
identifierButton = new QToolButton(actionGroupBox);
- identifierButton->setObjectName(QString::fromUtf8("identifierButton"));
+ identifierButton->setObjectName("identifierButton");
identifierButton->setIcon(icon);
hboxLayout1->addWidget(identifierButton);
@@ -153,20 +153,20 @@ public:
gridLayout1->addLayout(hboxLayout1, 1, 1, 1, 2);
label_3 = new QLabel(actionGroupBox);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
gridLayout1->addWidget(label_3, 2, 0, 1, 1);
hboxLayout2 = new QHBoxLayout();
hboxLayout2->setSpacing(0);
- hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
+ hboxLayout2->setObjectName("hboxLayout2");
urlLineEdit = new QLineEdit(actionGroupBox);
- urlLineEdit->setObjectName(QString::fromUtf8("urlLineEdit"));
+ urlLineEdit->setObjectName("urlLineEdit");
hboxLayout2->addWidget(urlLineEdit);
urlButton = new QToolButton(actionGroupBox);
- urlButton->setObjectName(QString::fromUtf8("urlButton"));
+ urlButton->setObjectName("urlButton");
urlButton->setIcon(icon);
hboxLayout2->addWidget(urlButton);
@@ -175,26 +175,26 @@ public:
gridLayout1->addLayout(hboxLayout2, 2, 1, 1, 2);
syncContentsButton = new QPushButton(actionGroupBox);
- syncContentsButton->setObjectName(QString::fromUtf8("syncContentsButton"));
+ syncContentsButton->setObjectName("syncContentsButton");
gridLayout1->addWidget(syncContentsButton, 3, 1, 1, 1);
- spacerItem2 = new QSpacerItem(81, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem2 = new QSpacerItem(81, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout1->addItem(spacerItem2, 3, 2, 1, 1);
contentsCheckBox = new QCheckBox(actionGroupBox);
- contentsCheckBox->setObjectName(QString::fromUtf8("contentsCheckBox"));
+ contentsCheckBox->setObjectName("contentsCheckBox");
gridLayout1->addWidget(contentsCheckBox, 4, 0, 1, 3);
indexCheckBox = new QCheckBox(actionGroupBox);
- indexCheckBox->setObjectName(QString::fromUtf8("indexCheckBox"));
+ indexCheckBox->setObjectName("indexCheckBox");
gridLayout1->addWidget(indexCheckBox, 5, 0, 1, 1);
bookmarksCheckBox = new QCheckBox(actionGroupBox);
- bookmarksCheckBox->setObjectName(QString::fromUtf8("bookmarksCheckBox"));
+ bookmarksCheckBox->setObjectName("bookmarksCheckBox");
gridLayout1->addWidget(bookmarksCheckBox, 6, 0, 1, 3);
@@ -203,13 +203,13 @@ public:
RemoteControlClass->setCentralWidget(centralWidget);
menuBar = new QMenuBar(RemoteControlClass);
- menuBar->setObjectName(QString::fromUtf8("menuBar"));
+ menuBar->setObjectName("menuBar");
menuBar->setGeometry(QRect(0, 0, 344, 21));
menuFile = new QMenu(menuBar);
- menuFile->setObjectName(QString::fromUtf8("menuFile"));
+ menuFile->setObjectName("menuFile");
RemoteControlClass->setMenuBar(menuBar);
statusBar = new QStatusBar(RemoteControlClass);
- statusBar->setObjectName(QString::fromUtf8("statusBar"));
+ statusBar->setObjectName("statusBar");
RemoteControlClass->setStatusBar(statusBar);
menuBar->addAction(menuFile->menuAction());
diff --git a/tests/auto/tools/uic/baseline/querywidget.ui.h b/tests/auto/tools/uic/baseline/querywidget.ui.h
index c855004804..83ac4e1da9 100644
--- a/tests/auto/tools/uic/baseline/querywidget.ui.h
+++ b/tests/auto/tools/uic/baseline/querywidget.ui.h
@@ -46,13 +46,13 @@ public:
void setupUi(QMainWindow *QueryWidget)
{
if (QueryWidget->objectName().isEmpty())
- QueryWidget->setObjectName(QString::fromUtf8("QueryWidget"));
+ QueryWidget->setObjectName("QueryWidget");
QueryWidget->resize(545, 531);
centralwidget = new QWidget(QueryWidget);
- centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
+ centralwidget->setObjectName("centralwidget");
centralwidget->setGeometry(QRect(0, 29, 545, 480));
verticalLayout = new QVBoxLayout(centralwidget);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
vboxLayout = new QVBoxLayout();
#ifndef Q_OS_MAC
vboxLayout->setSpacing(6);
@@ -60,12 +60,12 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(0, 0, 0, 0);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
inputGroupBox = new QGroupBox(centralwidget);
- inputGroupBox->setObjectName(QString::fromUtf8("inputGroupBox"));
+ inputGroupBox->setObjectName("inputGroupBox");
inputGroupBox->setMinimumSize(QSize(550, 120));
verticalLayout_4 = new QVBoxLayout(inputGroupBox);
- verticalLayout_4->setObjectName(QString::fromUtf8("verticalLayout_4"));
+ verticalLayout_4->setObjectName("verticalLayout_4");
_2 = new QVBoxLayout();
#ifndef Q_OS_MAC
_2->setSpacing(6);
@@ -73,9 +73,9 @@ public:
#ifndef Q_OS_MAC
_2->setContentsMargins(0, 0, 0, 0);
#endif
- _2->setObjectName(QString::fromUtf8("_2"));
+ _2->setObjectName("_2");
inputTextEdit = new QTextEdit(inputGroupBox);
- inputTextEdit->setObjectName(QString::fromUtf8("inputTextEdit"));
+ inputTextEdit->setObjectName("inputTextEdit");
_2->addWidget(inputTextEdit);
@@ -86,17 +86,17 @@ public:
vboxLayout->addWidget(inputGroupBox);
queryGroupBox = new QGroupBox(centralwidget);
- queryGroupBox->setObjectName(QString::fromUtf8("queryGroupBox"));
+ queryGroupBox->setObjectName("queryGroupBox");
queryGroupBox->setMinimumSize(QSize(550, 120));
verticalLayout_5 = new QVBoxLayout(queryGroupBox);
- verticalLayout_5->setObjectName(QString::fromUtf8("verticalLayout_5"));
+ verticalLayout_5->setObjectName("verticalLayout_5");
defaultQueries = new QComboBox(queryGroupBox);
- defaultQueries->setObjectName(QString::fromUtf8("defaultQueries"));
+ defaultQueries->setObjectName("defaultQueries");
verticalLayout_5->addWidget(defaultQueries);
queryTextEdit = new QTextEdit(queryGroupBox);
- queryTextEdit->setObjectName(QString::fromUtf8("queryTextEdit"));
+ queryTextEdit->setObjectName("queryTextEdit");
queryTextEdit->setMinimumSize(QSize(400, 60));
queryTextEdit->setReadOnly(true);
queryTextEdit->setAcceptRichText(false);
@@ -107,10 +107,10 @@ public:
vboxLayout->addWidget(queryGroupBox);
outputGroupBox = new QGroupBox(centralwidget);
- outputGroupBox->setObjectName(QString::fromUtf8("outputGroupBox"));
+ outputGroupBox->setObjectName("outputGroupBox");
outputGroupBox->setMinimumSize(QSize(550, 120));
verticalLayout_6 = new QVBoxLayout(outputGroupBox);
- verticalLayout_6->setObjectName(QString::fromUtf8("verticalLayout_6"));
+ verticalLayout_6->setObjectName("verticalLayout_6");
_3 = new QVBoxLayout();
#ifndef Q_OS_MAC
_3->setSpacing(6);
@@ -118,9 +118,9 @@ public:
#ifndef Q_OS_MAC
_3->setContentsMargins(0, 0, 0, 0);
#endif
- _3->setObjectName(QString::fromUtf8("_3"));
+ _3->setObjectName("_3");
outputTextEdit = new QTextEdit(outputGroupBox);
- outputTextEdit->setObjectName(QString::fromUtf8("outputTextEdit"));
+ outputTextEdit->setObjectName("outputTextEdit");
outputTextEdit->setMinimumSize(QSize(500, 80));
outputTextEdit->setReadOnly(true);
outputTextEdit->setAcceptRichText(false);
@@ -138,11 +138,11 @@ public:
QueryWidget->setCentralWidget(centralwidget);
menubar = new QMenuBar(QueryWidget);
- menubar->setObjectName(QString::fromUtf8("menubar"));
+ menubar->setObjectName("menubar");
menubar->setGeometry(QRect(0, 0, 545, 29));
QueryWidget->setMenuBar(menubar);
statusbar = new QStatusBar(QueryWidget);
- statusbar->setObjectName(QString::fromUtf8("statusbar"));
+ statusbar->setObjectName("statusbar");
statusbar->setGeometry(QRect(0, 509, 545, 22));
QueryWidget->setStatusBar(statusbar);
diff --git a/tests/auto/tools/uic/baseline/remotecontrol.ui b/tests/auto/tools/uic/baseline/remotecontrol.ui
index 1cfc7f5400..44ba1a3c58 100644
--- a/tests/auto/tools/uic/baseline/remotecontrol.ui
+++ b/tests/auto/tools/uic/baseline/remotecontrol.ui
@@ -50,7 +50,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/remotecontrol.ui.h b/tests/auto/tools/uic/baseline/remotecontrol.ui.h
index 4a5a77f961..0dcf1832dd 100644
--- a/tests/auto/tools/uic/baseline/remotecontrol.ui.h
+++ b/tests/auto/tools/uic/baseline/remotecontrol.ui.h
@@ -67,61 +67,61 @@ public:
void setupUi(QMainWindow *RemoteControlClass)
{
if (RemoteControlClass->objectName().isEmpty())
- RemoteControlClass->setObjectName(QString::fromUtf8("RemoteControlClass"));
+ RemoteControlClass->setObjectName("RemoteControlClass");
RemoteControlClass->resize(344, 364);
actionQuit = new QAction(RemoteControlClass);
- actionQuit->setObjectName(QString::fromUtf8("actionQuit"));
+ actionQuit->setObjectName("actionQuit");
centralWidget = new QWidget(RemoteControlClass);
- centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
+ centralWidget->setObjectName("centralWidget");
gridLayout = new QGridLayout(centralWidget);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(11, 11, 11, 11);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(centralWidget);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 1);
startUrlLineEdit = new QLineEdit(centralWidget);
- startUrlLineEdit->setObjectName(QString::fromUtf8("startUrlLineEdit"));
+ startUrlLineEdit->setObjectName("startUrlLineEdit");
gridLayout->addWidget(startUrlLineEdit, 0, 1, 1, 2);
launchButton = new QPushButton(centralWidget);
- launchButton->setObjectName(QString::fromUtf8("launchButton"));
+ launchButton->setObjectName("launchButton");
gridLayout->addWidget(launchButton, 1, 1, 1, 1);
- spacerItem = new QSpacerItem(101, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(101, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem, 1, 2, 1, 1);
- spacerItem1 = new QSpacerItem(113, 16, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ spacerItem1 = new QSpacerItem(113, 16, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem1, 2, 1, 1, 1);
actionGroupBox = new QGroupBox(centralWidget);
- actionGroupBox->setObjectName(QString::fromUtf8("actionGroupBox"));
+ actionGroupBox->setObjectName("actionGroupBox");
actionGroupBox->setEnabled(false);
gridLayout1 = new QGridLayout(actionGroupBox);
gridLayout1->setSpacing(6);
gridLayout1->setContentsMargins(11, 11, 11, 11);
- gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+ gridLayout1->setObjectName("gridLayout1");
label_2 = new QLabel(actionGroupBox);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout1->addWidget(label_2, 0, 0, 1, 1);
hboxLayout = new QHBoxLayout();
hboxLayout->setSpacing(0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
indexLineEdit = new QLineEdit(actionGroupBox);
- indexLineEdit->setObjectName(QString::fromUtf8("indexLineEdit"));
+ indexLineEdit->setObjectName("indexLineEdit");
hboxLayout->addWidget(indexLineEdit);
indexButton = new QToolButton(actionGroupBox);
- indexButton->setObjectName(QString::fromUtf8("indexButton"));
+ indexButton->setObjectName("indexButton");
const QIcon icon = QIcon(QString::fromUtf8(":/remotecontrol/enter.png"));
indexButton->setIcon(icon);
@@ -131,20 +131,20 @@ public:
gridLayout1->addLayout(hboxLayout, 0, 1, 1, 2);
label_4 = new QLabel(actionGroupBox);
- label_4->setObjectName(QString::fromUtf8("label_4"));
+ label_4->setObjectName("label_4");
gridLayout1->addWidget(label_4, 1, 0, 1, 1);
hboxLayout1 = new QHBoxLayout();
hboxLayout1->setSpacing(0);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
identifierLineEdit = new QLineEdit(actionGroupBox);
- identifierLineEdit->setObjectName(QString::fromUtf8("identifierLineEdit"));
+ identifierLineEdit->setObjectName("identifierLineEdit");
hboxLayout1->addWidget(identifierLineEdit);
identifierButton = new QToolButton(actionGroupBox);
- identifierButton->setObjectName(QString::fromUtf8("identifierButton"));
+ identifierButton->setObjectName("identifierButton");
identifierButton->setIcon(icon);
hboxLayout1->addWidget(identifierButton);
@@ -153,20 +153,20 @@ public:
gridLayout1->addLayout(hboxLayout1, 1, 1, 1, 2);
label_3 = new QLabel(actionGroupBox);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
gridLayout1->addWidget(label_3, 2, 0, 1, 1);
hboxLayout2 = new QHBoxLayout();
hboxLayout2->setSpacing(0);
- hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
+ hboxLayout2->setObjectName("hboxLayout2");
urlLineEdit = new QLineEdit(actionGroupBox);
- urlLineEdit->setObjectName(QString::fromUtf8("urlLineEdit"));
+ urlLineEdit->setObjectName("urlLineEdit");
hboxLayout2->addWidget(urlLineEdit);
urlButton = new QToolButton(actionGroupBox);
- urlButton->setObjectName(QString::fromUtf8("urlButton"));
+ urlButton->setObjectName("urlButton");
urlButton->setIcon(icon);
hboxLayout2->addWidget(urlButton);
@@ -175,26 +175,26 @@ public:
gridLayout1->addLayout(hboxLayout2, 2, 1, 1, 2);
syncContentsButton = new QPushButton(actionGroupBox);
- syncContentsButton->setObjectName(QString::fromUtf8("syncContentsButton"));
+ syncContentsButton->setObjectName("syncContentsButton");
gridLayout1->addWidget(syncContentsButton, 3, 1, 1, 1);
- spacerItem2 = new QSpacerItem(81, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem2 = new QSpacerItem(81, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout1->addItem(spacerItem2, 3, 2, 1, 1);
contentsCheckBox = new QCheckBox(actionGroupBox);
- contentsCheckBox->setObjectName(QString::fromUtf8("contentsCheckBox"));
+ contentsCheckBox->setObjectName("contentsCheckBox");
gridLayout1->addWidget(contentsCheckBox, 4, 0, 1, 3);
indexCheckBox = new QCheckBox(actionGroupBox);
- indexCheckBox->setObjectName(QString::fromUtf8("indexCheckBox"));
+ indexCheckBox->setObjectName("indexCheckBox");
gridLayout1->addWidget(indexCheckBox, 5, 0, 1, 1);
bookmarksCheckBox = new QCheckBox(actionGroupBox);
- bookmarksCheckBox->setObjectName(QString::fromUtf8("bookmarksCheckBox"));
+ bookmarksCheckBox->setObjectName("bookmarksCheckBox");
gridLayout1->addWidget(bookmarksCheckBox, 6, 0, 1, 3);
@@ -203,13 +203,13 @@ public:
RemoteControlClass->setCentralWidget(centralWidget);
menuBar = new QMenuBar(RemoteControlClass);
- menuBar->setObjectName(QString::fromUtf8("menuBar"));
+ menuBar->setObjectName("menuBar");
menuBar->setGeometry(QRect(0, 0, 344, 21));
menuFile = new QMenu(menuBar);
- menuFile->setObjectName(QString::fromUtf8("menuFile"));
+ menuFile->setObjectName("menuFile");
RemoteControlClass->setMenuBar(menuBar);
statusBar = new QStatusBar(RemoteControlClass);
- statusBar->setObjectName(QString::fromUtf8("statusBar"));
+ statusBar->setObjectName("statusBar");
RemoteControlClass->setStatusBar(statusBar);
menuBar->addAction(menuFile->menuAction());
diff --git a/tests/auto/tools/uic/baseline/repaintslot.ui.h b/tests/auto/tools/uic/baseline/repaintslot.ui.h
index f871bc8554..15ffd5aba6 100644
--- a/tests/auto/tools/uic/baseline/repaintslot.ui.h
+++ b/tests/auto/tools/uic/baseline/repaintslot.ui.h
@@ -26,12 +26,12 @@ public:
void setupUi(QWidget *Widget)
{
if (Widget->objectName().isEmpty())
- Widget->setObjectName(QString::fromUtf8("Widget"));
+ Widget->setObjectName("Widget");
Widget->resize(800, 600);
verticalLayout = new QVBoxLayout(Widget);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
verticalSlider = new QSlider(Widget);
- verticalSlider->setObjectName(QString::fromUtf8("verticalSlider"));
+ verticalSlider->setObjectName("verticalSlider");
verticalSlider->setOrientation(Qt::Vertical);
verticalLayout->addWidget(verticalSlider);
diff --git a/tests/auto/tools/uic/baseline/saveformastemplate.ui b/tests/auto/tools/uic/baseline/saveformastemplate.ui
index c9df65fcd2..917302796b 100644
--- a/tests/auto/tools/uic/baseline/saveformastemplate.ui
+++ b/tests/auto/tools/uic/baseline/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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>SaveFormAsTemplate</class>
<widget class="QDialog" name="SaveFormAsTemplate" >
<property name="windowTitle" >
diff --git a/tests/auto/tools/uic/baseline/saveformastemplate.ui.h b/tests/auto/tools/uic/baseline/saveformastemplate.ui.h
index d18926504b..7f2c46aa47 100644
--- a/tests/auto/tools/uic/baseline/saveformastemplate.ui.h
+++ b/tests/auto/tools/uic/baseline/saveformastemplate.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -68,13 +45,13 @@ public:
void setupUi(QDialog *SaveFormAsTemplate)
{
if (SaveFormAsTemplate->objectName().isEmpty())
- SaveFormAsTemplate->setObjectName(QString::fromUtf8("SaveFormAsTemplate"));
+ SaveFormAsTemplate->setObjectName("SaveFormAsTemplate");
vboxLayout = new QVBoxLayout(SaveFormAsTemplate);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
formLayout = new QFormLayout();
- formLayout->setObjectName(QString::fromUtf8("formLayout"));
+ formLayout->setObjectName("formLayout");
label = new QLabel(SaveFormAsTemplate);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
label->setFrameShape(QFrame::NoFrame);
label->setFrameShadow(QFrame::Plain);
label->setTextFormat(Qt::AutoText);
@@ -82,14 +59,14 @@ public:
formLayout->setWidget(0, QFormLayout::LabelRole, label);
templateNameEdit = new QLineEdit(SaveFormAsTemplate);
- templateNameEdit->setObjectName(QString::fromUtf8("templateNameEdit"));
+ templateNameEdit->setObjectName("templateNameEdit");
templateNameEdit->setMinimumSize(QSize(222, 0));
templateNameEdit->setEchoMode(QLineEdit::Normal);
formLayout->setWidget(0, QFormLayout::FieldRole, templateNameEdit);
label_2 = new QLabel(SaveFormAsTemplate);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
label_2->setFrameShape(QFrame::NoFrame);
label_2->setFrameShadow(QFrame::Plain);
label_2->setTextFormat(Qt::AutoText);
@@ -97,7 +74,7 @@ public:
formLayout->setWidget(1, QFormLayout::LabelRole, label_2);
categoryCombo = new QComboBox(SaveFormAsTemplate);
- categoryCombo->setObjectName(QString::fromUtf8("categoryCombo"));
+ categoryCombo->setObjectName("categoryCombo");
formLayout->setWidget(1, QFormLayout::FieldRole, categoryCombo);
@@ -105,14 +82,14 @@ public:
vboxLayout->addLayout(formLayout);
horizontalLine = new QFrame(SaveFormAsTemplate);
- horizontalLine->setObjectName(QString::fromUtf8("horizontalLine"));
+ horizontalLine->setObjectName("horizontalLine");
horizontalLine->setFrameShape(QFrame::HLine);
horizontalLine->setFrameShadow(QFrame::Sunken);
vboxLayout->addWidget(horizontalLine);
buttonBox = new QDialogButtonBox(SaveFormAsTemplate);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/settings.ui.h b/tests/auto/tools/uic/baseline/settings.ui.h
index 5b5400a049..e929770b52 100644
--- a/tests/auto/tools/uic/baseline/settings.ui.h
+++ b/tests/auto/tools/uic/baseline/settings.ui.h
@@ -48,15 +48,15 @@ public:
void setupUi(QDialog *Dialog)
{
if (Dialog->objectName().isEmpty())
- Dialog->setObjectName(QString::fromUtf8("Dialog"));
+ Dialog->setObjectName("Dialog");
Dialog->resize(392, 176);
verticalLayout = new QVBoxLayout(Dialog);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
label = new QLabel(Dialog);
- label->setObjectName(QString::fromUtf8("label"));
- QSizePolicy sizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred);
+ label->setObjectName("label");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Maximum, QSizePolicy::Policy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
@@ -67,8 +67,8 @@ public:
hboxLayout->addWidget(label);
deviceCombo = new QComboBox(Dialog);
- deviceCombo->setObjectName(QString::fromUtf8("deviceCombo"));
- QSizePolicy sizePolicy1(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ deviceCombo->setObjectName("deviceCombo");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(deviceCombo->sizePolicy().hasHeightForWidth());
@@ -80,9 +80,9 @@ public:
verticalLayout->addLayout(hboxLayout);
hboxLayout1 = new QHBoxLayout();
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
label_6 = new QLabel(Dialog);
- label_6->setObjectName(QString::fromUtf8("label_6"));
+ label_6->setObjectName("label_6");
sizePolicy.setHeightForWidth(label_6->sizePolicy().hasHeightForWidth());
label_6->setSizePolicy(sizePolicy);
label_6->setMinimumSize(QSize(90, 0));
@@ -91,7 +91,7 @@ public:
hboxLayout1->addWidget(label_6);
audioEffectsCombo = new QComboBox(Dialog);
- audioEffectsCombo->setObjectName(QString::fromUtf8("audioEffectsCombo"));
+ audioEffectsCombo->setObjectName("audioEffectsCombo");
sizePolicy1.setHeightForWidth(audioEffectsCombo->sizePolicy().hasHeightForWidth());
audioEffectsCombo->setSizePolicy(sizePolicy1);
@@ -101,9 +101,9 @@ public:
verticalLayout->addLayout(hboxLayout1);
hboxLayout2 = new QHBoxLayout();
- hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
+ hboxLayout2->setObjectName("hboxLayout2");
crossFadeLabel = new QLabel(Dialog);
- crossFadeLabel->setObjectName(QString::fromUtf8("crossFadeLabel"));
+ crossFadeLabel->setObjectName("crossFadeLabel");
sizePolicy.setHeightForWidth(crossFadeLabel->sizePolicy().hasHeightForWidth());
crossFadeLabel->setSizePolicy(sizePolicy);
crossFadeLabel->setMinimumSize(QSize(90, 0));
@@ -112,9 +112,9 @@ public:
hboxLayout2->addWidget(crossFadeLabel);
vboxLayout = new QVBoxLayout();
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
crossFadeSlider = new QSlider(Dialog);
- crossFadeSlider->setObjectName(QString::fromUtf8("crossFadeSlider"));
+ crossFadeSlider->setObjectName("crossFadeSlider");
sizePolicy1.setHeightForWidth(crossFadeSlider->sizePolicy().hasHeightForWidth());
crossFadeSlider->setSizePolicy(sizePolicy1);
crossFadeSlider->setMinimum(-20);
@@ -128,31 +128,31 @@ public:
vboxLayout->addWidget(crossFadeSlider);
hboxLayout3 = new QHBoxLayout();
- hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3"));
+ hboxLayout3->setObjectName("hboxLayout3");
label_3 = new QLabel(Dialog);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
QFont font;
font.setPointSize(9);
label_3->setFont(font);
hboxLayout3->addWidget(label_3);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout3->addItem(spacerItem);
label_5 = new QLabel(Dialog);
- label_5->setObjectName(QString::fromUtf8("label_5"));
+ label_5->setObjectName("label_5");
label_5->setFont(font);
hboxLayout3->addWidget(label_5);
- spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout3->addItem(spacerItem1);
label_4 = new QLabel(Dialog);
- label_4->setObjectName(QString::fromUtf8("label_4"));
+ label_4->setObjectName("label_4");
label_4->setFont(font);
hboxLayout3->addWidget(label_4);
@@ -167,7 +167,7 @@ public:
verticalLayout->addLayout(hboxLayout2);
buttonBox = new QDialogButtonBox(Dialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/signalslotdialog.ui.h b/tests/auto/tools/uic/baseline/signalslotdialog.ui.h
index eea8141815..1fff9dd064 100644
--- a/tests/auto/tools/uic/baseline/signalslotdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/signalslotdialog.ui.h
@@ -46,37 +46,37 @@ public:
void setupUi(QDialog *SignalSlotDialogClass)
{
if (SignalSlotDialogClass->objectName().isEmpty())
- SignalSlotDialogClass->setObjectName(QString::fromUtf8("SignalSlotDialogClass"));
+ SignalSlotDialogClass->setObjectName("SignalSlotDialogClass");
SignalSlotDialogClass->resize(617, 535);
vboxLayout = new QVBoxLayout(SignalSlotDialogClass);
vboxLayout->setSpacing(6);
vboxLayout->setContentsMargins(11, 11, 11, 11);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
slotGroupBox = new QGroupBox(SignalSlotDialogClass);
- slotGroupBox->setObjectName(QString::fromUtf8("slotGroupBox"));
+ slotGroupBox->setObjectName("slotGroupBox");
vboxLayout1 = new QVBoxLayout(slotGroupBox);
vboxLayout1->setSpacing(6);
vboxLayout1->setContentsMargins(11, 11, 11, 11);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
slotListView = new QListView(slotGroupBox);
- slotListView->setObjectName(QString::fromUtf8("slotListView"));
+ slotListView->setObjectName("slotListView");
vboxLayout1->addWidget(slotListView);
hboxLayout = new QHBoxLayout();
hboxLayout->setSpacing(6);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
addSlotButton = new QToolButton(slotGroupBox);
- addSlotButton->setObjectName(QString::fromUtf8("addSlotButton"));
+ addSlotButton->setObjectName("addSlotButton");
hboxLayout->addWidget(addSlotButton);
removeSlotButton = new QToolButton(slotGroupBox);
- removeSlotButton->setObjectName(QString::fromUtf8("removeSlotButton"));
+ removeSlotButton->setObjectName("removeSlotButton");
hboxLayout->addWidget(removeSlotButton);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
@@ -87,30 +87,30 @@ public:
vboxLayout->addWidget(slotGroupBox);
signalGroupBox = new QGroupBox(SignalSlotDialogClass);
- signalGroupBox->setObjectName(QString::fromUtf8("signalGroupBox"));
+ signalGroupBox->setObjectName("signalGroupBox");
vboxLayout2 = new QVBoxLayout(signalGroupBox);
vboxLayout2->setSpacing(6);
vboxLayout2->setContentsMargins(11, 11, 11, 11);
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
signalListView = new QListView(signalGroupBox);
- signalListView->setObjectName(QString::fromUtf8("signalListView"));
+ signalListView->setObjectName("signalListView");
vboxLayout2->addWidget(signalListView);
hboxLayout1 = new QHBoxLayout();
hboxLayout1->setSpacing(6);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
addSignalButton = new QToolButton(signalGroupBox);
- addSignalButton->setObjectName(QString::fromUtf8("addSignalButton"));
+ addSignalButton->setObjectName("addSignalButton");
hboxLayout1->addWidget(addSignalButton);
removeSignalButton = new QToolButton(signalGroupBox);
- removeSignalButton->setObjectName(QString::fromUtf8("removeSignalButton"));
+ removeSignalButton->setObjectName("removeSignalButton");
hboxLayout1->addWidget(removeSignalButton);
- spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout1->addItem(spacerItem1);
@@ -121,7 +121,7 @@ public:
vboxLayout->addWidget(signalGroupBox);
buttonBox = new QDialogButtonBox(SignalSlotDialogClass);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
vboxLayout->addWidget(buttonBox);
diff --git a/tests/auto/tools/uic/baseline/sslclient.ui.h b/tests/auto/tools/uic/baseline/sslclient.ui.h
index d395db1082..9cd5c2a55f 100644
--- a/tests/auto/tools/uic/baseline/sslclient.ui.h
+++ b/tests/auto/tools/uic/baseline/sslclient.ui.h
@@ -48,29 +48,29 @@ public:
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
- Form->setObjectName(QString::fromUtf8("Form"));
+ Form->setObjectName("Form");
Form->resize(343, 320);
vboxLayout = new QVBoxLayout(Form);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
gridLayout = new QGridLayout();
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
hostNameLabel = new QLabel(Form);
- hostNameLabel->setObjectName(QString::fromUtf8("hostNameLabel"));
+ hostNameLabel->setObjectName("hostNameLabel");
gridLayout->addWidget(hostNameLabel, 0, 0, 1, 1);
hostNameEdit = new QLineEdit(Form);
- hostNameEdit->setObjectName(QString::fromUtf8("hostNameEdit"));
+ hostNameEdit->setObjectName("hostNameEdit");
gridLayout->addWidget(hostNameEdit, 0, 1, 1, 1);
portLabel = new QLabel(Form);
- portLabel->setObjectName(QString::fromUtf8("portLabel"));
+ portLabel->setObjectName("portLabel");
gridLayout->addWidget(portLabel, 1, 0, 1, 1);
portBox = new QSpinBox(Form);
- portBox->setObjectName(QString::fromUtf8("portBox"));
+ portBox->setObjectName("portBox");
portBox->setMinimum(1);
portBox->setMaximum(65535);
portBox->setValue(993);
@@ -81,25 +81,25 @@ public:
vboxLayout->addLayout(gridLayout);
connectButton = new QPushButton(Form);
- connectButton->setObjectName(QString::fromUtf8("connectButton"));
+ connectButton->setObjectName("connectButton");
connectButton->setEnabled(true);
vboxLayout->addWidget(connectButton);
sessionBox = new QGroupBox(Form);
- sessionBox->setObjectName(QString::fromUtf8("sessionBox"));
+ sessionBox->setObjectName("sessionBox");
sessionBox->setEnabled(false);
vboxLayout1 = new QVBoxLayout(sessionBox);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
cipherText = new QLabel(sessionBox);
- cipherText->setObjectName(QString::fromUtf8("cipherText"));
+ cipherText->setObjectName("cipherText");
hboxLayout->addWidget(cipherText);
cipherLabel = new QLabel(sessionBox);
- cipherLabel->setObjectName(QString::fromUtf8("cipherLabel"));
+ cipherLabel->setObjectName("cipherLabel");
cipherLabel->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
hboxLayout->addWidget(cipherLabel);
@@ -108,7 +108,7 @@ public:
vboxLayout1->addLayout(hboxLayout);
sessionOutput = new QTextEdit(sessionBox);
- sessionOutput->setObjectName(QString::fromUtf8("sessionOutput"));
+ sessionOutput->setObjectName("sessionOutput");
sessionOutput->setEnabled(false);
sessionOutput->setFocusPolicy(Qt::NoFocus);
sessionOutput->setReadOnly(true);
@@ -116,20 +116,20 @@ public:
vboxLayout1->addWidget(sessionOutput);
hboxLayout1 = new QHBoxLayout();
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
sessionInputLabel = new QLabel(sessionBox);
- sessionInputLabel->setObjectName(QString::fromUtf8("sessionInputLabel"));
+ sessionInputLabel->setObjectName("sessionInputLabel");
hboxLayout1->addWidget(sessionInputLabel);
sessionInput = new QLineEdit(sessionBox);
- sessionInput->setObjectName(QString::fromUtf8("sessionInput"));
+ sessionInput->setObjectName("sessionInput");
sessionInput->setEnabled(false);
hboxLayout1->addWidget(sessionInput);
sendButton = new QPushButton(sessionBox);
- sendButton->setObjectName(QString::fromUtf8("sendButton"));
+ sendButton->setObjectName("sendButton");
sendButton->setEnabled(false);
sendButton->setFocusPolicy(Qt::TabFocus);
diff --git a/tests/auto/tools/uic/baseline/sslerrors.ui.h b/tests/auto/tools/uic/baseline/sslerrors.ui.h
index 3737c7a2fe..bc6071d962 100644
--- a/tests/auto/tools/uic/baseline/sslerrors.ui.h
+++ b/tests/auto/tools/uic/baseline/sslerrors.ui.h
@@ -36,40 +36,40 @@ public:
void setupUi(QDialog *SslErrors)
{
if (SslErrors->objectName().isEmpty())
- SslErrors->setObjectName(QString::fromUtf8("SslErrors"));
+ SslErrors->setObjectName("SslErrors");
SslErrors->resize(371, 216);
vboxLayout = new QVBoxLayout(SslErrors);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
label = new QLabel(SslErrors);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
label->setWordWrap(true);
vboxLayout->addWidget(label);
sslErrorList = new QListWidget(SslErrors);
- sslErrorList->setObjectName(QString::fromUtf8("sslErrorList"));
+ sslErrorList->setObjectName("sslErrorList");
vboxLayout->addWidget(sslErrorList);
hboxLayout = new QHBoxLayout();
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
certificateChainButton = new QPushButton(SslErrors);
- certificateChainButton->setObjectName(QString::fromUtf8("certificateChainButton"));
+ certificateChainButton->setObjectName("certificateChainButton");
certificateChainButton->setAutoDefault(false);
hboxLayout->addWidget(certificateChainButton);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
pushButton = new QPushButton(SslErrors);
- pushButton->setObjectName(QString::fromUtf8("pushButton"));
+ pushButton->setObjectName("pushButton");
hboxLayout->addWidget(pushButton);
pushButton_2 = new QPushButton(SslErrors);
- pushButton_2->setObjectName(QString::fromUtf8("pushButton_2"));
+ pushButton_2->setObjectName("pushButton_2");
hboxLayout->addWidget(pushButton_2);
diff --git a/tests/auto/tools/uic/baseline/statistics.ui b/tests/auto/tools/uic/baseline/statistics.ui
index 7ab68ef373..18755bd1cf 100644
--- a/tests/auto/tools/uic/baseline/statistics.ui
+++ b/tests/auto/tools/uic/baseline/statistics.ui
@@ -1,32 +1,9 @@
<ui version="4.0" stdsetdef="1" >
- <class>Statistics</class>
- <comment>*********************************************************************
-**
-** 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$
-**
-*********************************************************************</comment>
+<class>Statistics</class>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<widget class="QDialog" name="Statistics" >
<property name="objectName" >
<string notr="true" >linguist_stats</string>
diff --git a/tests/auto/tools/uic/baseline/statistics.ui.h b/tests/auto/tools/uic/baseline/statistics.ui.h
index 46f8afbf0e..a37782b4d6 100644
--- a/tests/auto/tools/uic/baseline/statistics.ui.h
+++ b/tests/auto/tools/uic/baseline/statistics.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -76,28 +53,28 @@ public:
void setupUi(QDialog *Statistics)
{
if (Statistics->objectName().isEmpty())
- Statistics->setObjectName(QString::fromUtf8("Statistics"));
+ Statistics->setObjectName("Statistics");
Statistics->setObjectName(QString::fromUtf8("linguist_stats"));
Statistics->resize(336, 164);
gridLayout = new QGridLayout(Statistics);
gridLayout->setSpacing(6);
gridLayout->setContentsMargins(11, 11, 11, 11);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
gridLayout->setObjectName(QString::fromUtf8("unnamed"));
hboxLayout = new QHBoxLayout();
hboxLayout->setSpacing(6);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
hboxLayout->setObjectName(QString::fromUtf8("unnamed"));
- spacer4_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacer4_2 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacer4_2);
closeBtn = new QPushButton(Statistics);
- closeBtn->setObjectName(QString::fromUtf8("closeBtn"));
+ closeBtn->setObjectName("closeBtn");
hboxLayout->addWidget(closeBtn);
- spacer4 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacer4 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacer4);
@@ -105,66 +82,66 @@ public:
gridLayout->addLayout(hboxLayout, 1, 0, 1, 1);
frame4 = new QFrame(Statistics);
- frame4->setObjectName(QString::fromUtf8("frame4"));
+ frame4->setObjectName("frame4");
frame4->setFrameShape(QFrame::StyledPanel);
frame4->setFrameShadow(QFrame::Raised);
gridLayout1 = new QGridLayout(frame4);
gridLayout1->setSpacing(6);
gridLayout1->setContentsMargins(11, 11, 11, 11);
- gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+ gridLayout1->setObjectName("gridLayout1");
gridLayout1->setObjectName(QString::fromUtf8("unnamed"));
textLabel4 = new QLabel(frame4);
- textLabel4->setObjectName(QString::fromUtf8("textLabel4"));
+ textLabel4->setObjectName("textLabel4");
gridLayout1->addWidget(textLabel4, 0, 2, 1, 1);
textLabel5 = new QLabel(frame4);
- textLabel5->setObjectName(QString::fromUtf8("textLabel5"));
+ textLabel5->setObjectName("textLabel5");
gridLayout1->addWidget(textLabel5, 0, 1, 1, 1);
untrWords = new QLabel(frame4);
- untrWords->setObjectName(QString::fromUtf8("untrWords"));
+ untrWords->setObjectName("untrWords");
gridLayout1->addWidget(untrWords, 1, 1, 1, 1);
trWords = new QLabel(frame4);
- trWords->setObjectName(QString::fromUtf8("trWords"));
+ trWords->setObjectName("trWords");
gridLayout1->addWidget(trWords, 1, 2, 1, 1);
textLabel1 = new QLabel(frame4);
- textLabel1->setObjectName(QString::fromUtf8("textLabel1"));
+ textLabel1->setObjectName("textLabel1");
gridLayout1->addWidget(textLabel1, 1, 0, 1, 1);
trChars = new QLabel(frame4);
- trChars->setObjectName(QString::fromUtf8("trChars"));
+ trChars->setObjectName("trChars");
gridLayout1->addWidget(trChars, 2, 2, 1, 1);
untrChars = new QLabel(frame4);
- untrChars->setObjectName(QString::fromUtf8("untrChars"));
+ untrChars->setObjectName("untrChars");
gridLayout1->addWidget(untrChars, 2, 1, 1, 1);
textLabel3 = new QLabel(frame4);
- textLabel3->setObjectName(QString::fromUtf8("textLabel3"));
+ textLabel3->setObjectName("textLabel3");
gridLayout1->addWidget(textLabel3, 2, 0, 1, 1);
textLabel6 = new QLabel(frame4);
- textLabel6->setObjectName(QString::fromUtf8("textLabel6"));
+ textLabel6->setObjectName("textLabel6");
gridLayout1->addWidget(textLabel6, 3, 0, 1, 1);
trCharsSpc = new QLabel(frame4);
- trCharsSpc->setObjectName(QString::fromUtf8("trCharsSpc"));
+ trCharsSpc->setObjectName("trCharsSpc");
gridLayout1->addWidget(trCharsSpc, 3, 2, 1, 1);
untrCharsSpc = new QLabel(frame4);
- untrCharsSpc->setObjectName(QString::fromUtf8("untrCharsSpc"));
+ untrCharsSpc->setObjectName("untrCharsSpc");
gridLayout1->addWidget(untrCharsSpc, 3, 1, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/stringlisteditor.ui b/tests/auto/tools/uic/baseline/stringlisteditor.ui
index 64846d0149..2e9b856351 100644
--- a/tests/auto/tools/uic/baseline/stringlisteditor.ui
+++ b/tests/auto/tools/uic/baseline/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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>qdesigner_internal::Dialog</class>
<widget class="QDialog" name="qdesigner_internal::Dialog" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/stringlisteditor.ui.h b/tests/auto/tools/uic/baseline/stringlisteditor.ui.h
index 4522f0f689..3fa713b19c 100644
--- a/tests/auto/tools/uic/baseline/stringlisteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/stringlisteditor.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -83,7 +60,7 @@ public:
void setupUi(QDialog *qdesigner_internal__Dialog)
{
if (qdesigner_internal__Dialog->objectName().isEmpty())
- qdesigner_internal__Dialog->setObjectName(QString::fromUtf8("qdesigner_internal__Dialog"));
+ qdesigner_internal__Dialog->setObjectName("qdesigner_internal__Dialog");
qdesigner_internal__Dialog->resize(400, 300);
vboxLayout = new QVBoxLayout(qdesigner_internal__Dialog);
#ifndef Q_OS_MAC
@@ -92,9 +69,9 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
groupBox = new QGroupBox(qdesigner_internal__Dialog);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
gridLayout = new QGridLayout(groupBox);
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
@@ -102,7 +79,7 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(9, 9, 9, 9);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
vboxLayout1 = new QVBoxLayout();
#ifndef Q_OS_MAC
vboxLayout1->setSpacing(6);
@@ -110,7 +87,7 @@ public:
#ifndef Q_OS_MAC
vboxLayout1->setContentsMargins(0, 0, 0, 0);
#endif
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
hboxLayout = new QHBoxLayout();
#ifndef Q_OS_MAC
hboxLayout->setSpacing(6);
@@ -118,20 +95,20 @@ public:
#ifndef Q_OS_MAC
hboxLayout->setContentsMargins(0, 0, 0, 0);
#endif
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
newButton = new QToolButton(groupBox);
- newButton->setObjectName(QString::fromUtf8("newButton"));
+ newButton->setObjectName("newButton");
newButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
hboxLayout->addWidget(newButton);
deleteButton = new QToolButton(groupBox);
- deleteButton->setObjectName(QString::fromUtf8("deleteButton"));
+ deleteButton->setObjectName("deleteButton");
deleteButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
hboxLayout->addWidget(deleteButton);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
@@ -143,14 +120,14 @@ public:
hboxLayout1->setSpacing(6);
#endif
hboxLayout1->setContentsMargins(0, 0, 0, 0);
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
label = new QLabel(groupBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
hboxLayout1->addWidget(label);
valueEdit = new QLineEdit(groupBox);
- valueEdit->setObjectName(QString::fromUtf8("valueEdit"));
+ valueEdit->setObjectName("valueEdit");
hboxLayout1->addWidget(valueEdit);
@@ -165,22 +142,22 @@ public:
vboxLayout2->setSpacing(6);
#endif
vboxLayout2->setContentsMargins(0, 0, 0, 0);
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
- spacerItem1 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ vboxLayout2->setObjectName("vboxLayout2");
+ spacerItem1 = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout2->addItem(spacerItem1);
upButton = new QToolButton(groupBox);
- upButton->setObjectName(QString::fromUtf8("upButton"));
+ upButton->setObjectName("upButton");
vboxLayout2->addWidget(upButton);
downButton = new QToolButton(groupBox);
- downButton->setObjectName(QString::fromUtf8("downButton"));
+ downButton->setObjectName("downButton");
vboxLayout2->addWidget(downButton);
- spacerItem2 = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem2 = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout2->addItem(spacerItem2);
@@ -188,7 +165,7 @@ public:
gridLayout->addLayout(vboxLayout2, 0, 1, 1, 1);
listView = new QListView(groupBox);
- listView->setObjectName(QString::fromUtf8("listView"));
+ listView->setObjectName("listView");
gridLayout->addWidget(listView, 0, 0, 1, 1);
@@ -196,7 +173,7 @@ public:
vboxLayout->addWidget(groupBox);
buttonBox = new QDialogButtonBox(qdesigner_internal__Dialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/stylesheeteditor.ui b/tests/auto/tools/uic/baseline/stylesheeteditor.ui
index 34cd7f6d04..42581ef8d3 100644
--- a/tests/auto/tools/uic/baseline/stylesheeteditor.ui
+++ b/tests/auto/tools/uic/baseline/stylesheeteditor.ui
@@ -25,7 +25,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::MinimumExpanding</enum>
+ <enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property>
<property name="sizeHint" >
<size>
@@ -41,7 +41,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::MinimumExpanding</enum>
+ <enum>QSizePolicy::Policy::MinimumExpanding</enum>
</property>
<property name="sizeHint" >
<size>
@@ -76,7 +76,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/stylesheeteditor.ui.h b/tests/auto/tools/uic/baseline/stylesheeteditor.ui.h
index 5a949c6444..3a031ed609 100644
--- a/tests/auto/tools/uic/baseline/stylesheeteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/stylesheeteditor.ui.h
@@ -41,7 +41,7 @@ public:
void setupUi(QWidget *StyleSheetEditor)
{
if (StyleSheetEditor->objectName().isEmpty())
- StyleSheetEditor->setObjectName(QString::fromUtf8("StyleSheetEditor"));
+ StyleSheetEditor->setObjectName("StyleSheetEditor");
StyleSheetEditor->resize(445, 289);
gridLayout = new QGridLayout(StyleSheetEditor);
#ifndef Q_OS_MAC
@@ -50,12 +50,12 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(9, 9, 9, 9);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
- spacerItem = new QSpacerItem(32, 20, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
+ gridLayout->setObjectName("gridLayout");
+ spacerItem = new QSpacerItem(32, 20, QSizePolicy::Policy::MinimumExpanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem, 0, 6, 1, 1);
- spacerItem1 = new QSpacerItem(32, 20, QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(32, 20, QSizePolicy::Policy::MinimumExpanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem1, 0, 0, 1, 1);
@@ -63,17 +63,17 @@ public:
styleSheetCombo->addItem(QString());
styleSheetCombo->addItem(QString());
styleSheetCombo->addItem(QString());
- styleSheetCombo->setObjectName(QString::fromUtf8("styleSheetCombo"));
+ styleSheetCombo->setObjectName("styleSheetCombo");
gridLayout->addWidget(styleSheetCombo, 0, 5, 1, 1);
- spacerItem2 = new QSpacerItem(10, 16, QSizePolicy::Fixed, QSizePolicy::Minimum);
+ spacerItem2 = new QSpacerItem(10, 16, QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem2, 0, 3, 1, 1);
styleCombo = new QComboBox(StyleSheetEditor);
- styleCombo->setObjectName(QString::fromUtf8("styleCombo"));
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ styleCombo->setObjectName("styleCombo");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(styleCombo->sizePolicy().hasHeightForWidth());
@@ -82,8 +82,8 @@ public:
gridLayout->addWidget(styleCombo, 0, 2, 1, 1);
label_7 = new QLabel(StyleSheetEditor);
- label_7->setObjectName(QString::fromUtf8("label_7"));
- QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Preferred);
+ label_7->setObjectName("label_7");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Preferred);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(label_7->sizePolicy().hasHeightForWidth());
@@ -96,13 +96,13 @@ public:
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(0, 0, 0, 0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
- spacerItem3 = new QSpacerItem(321, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ hboxLayout->setObjectName("hboxLayout");
+ spacerItem3 = new QSpacerItem(321, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem3);
applyButton = new QPushButton(StyleSheetEditor);
- applyButton->setObjectName(QString::fromUtf8("applyButton"));
+ applyButton->setObjectName("applyButton");
applyButton->setEnabled(false);
hboxLayout->addWidget(applyButton);
@@ -111,12 +111,12 @@ public:
gridLayout->addLayout(hboxLayout, 2, 0, 1, 7);
styleTextEdit = new QTextEdit(StyleSheetEditor);
- styleTextEdit->setObjectName(QString::fromUtf8("styleTextEdit"));
+ styleTextEdit->setObjectName("styleTextEdit");
gridLayout->addWidget(styleTextEdit, 1, 0, 1, 7);
label_8 = new QLabel(StyleSheetEditor);
- label_8->setObjectName(QString::fromUtf8("label_8"));
+ label_8->setObjectName("label_8");
sizePolicy1.setHeightForWidth(label_8->sizePolicy().hasHeightForWidth());
label_8->setSizePolicy(sizePolicy1);
diff --git a/tests/auto/tools/uic/baseline/tabbedbrowser.ui b/tests/auto/tools/uic/baseline/tabbedbrowser.ui
index e3682e62ef..a8b1ff7c78 100644
--- a/tests/auto/tools/uic/baseline/tabbedbrowser.ui
+++ b/tests/auto/tools/uic/baseline/tabbedbrowser.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<exportmacro></exportmacro>
<class>TabbedBrowser</class>
<widget class="QWidget" name="TabbedBrowser" >
diff --git a/tests/auto/tools/uic/baseline/tabbedbrowser.ui.h b/tests/auto/tools/uic/baseline/tabbedbrowser.ui.h
index faad2aadae..638c4d8111 100644
--- a/tests/auto/tools/uic/baseline/tabbedbrowser.ui.h
+++ b/tests/auto/tools/uic/baseline/tabbedbrowser.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -77,28 +54,28 @@ public:
void setupUi(QWidget *TabbedBrowser)
{
if (TabbedBrowser->objectName().isEmpty())
- TabbedBrowser->setObjectName(QString::fromUtf8("TabbedBrowser"));
+ TabbedBrowser->setObjectName("TabbedBrowser");
TabbedBrowser->resize(710, 664);
vboxLayout = new QVBoxLayout(TabbedBrowser);
vboxLayout->setSpacing(0);
vboxLayout->setContentsMargins(0, 0, 0, 0);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
tab = new QTabWidget(TabbedBrowser);
- tab->setObjectName(QString::fromUtf8("tab"));
+ tab->setObjectName("tab");
frontpage = new QWidget();
- frontpage->setObjectName(QString::fromUtf8("frontpage"));
+ frontpage->setObjectName("frontpage");
gridLayout = new QGridLayout(frontpage);
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
#endif
gridLayout->setContentsMargins(8, 8, 8, 8);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
tab->addTab(frontpage, QString());
vboxLayout->addWidget(tab);
frameFind = new QFrame(TabbedBrowser);
- frameFind->setObjectName(QString::fromUtf8("frameFind"));
+ frameFind->setObjectName("frameFind");
frameFind->setFrameShape(QFrame::StyledPanel);
frameFind->setFrameShadow(QFrame::Raised);
hboxLayout = new QHBoxLayout(frameFind);
@@ -106,9 +83,9 @@ public:
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(0, 0, 0, 0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
toolClose = new QToolButton(frameFind);
- toolClose->setObjectName(QString::fromUtf8("toolClose"));
+ toolClose->setObjectName("toolClose");
const QIcon icon = QIcon(QString::fromUtf8(":/qt-project.org/assistant/images/close.png"));
toolClose->setIcon(icon);
toolClose->setAutoRaise(true);
@@ -116,8 +93,8 @@ public:
hboxLayout->addWidget(toolClose);
editFind = new QLineEdit(frameFind);
- editFind->setObjectName(QString::fromUtf8("editFind"));
- QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ editFind->setObjectName("editFind");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(editFind->sizePolicy().hasHeightForWidth());
@@ -127,7 +104,7 @@ public:
hboxLayout->addWidget(editFind);
toolPrevious = new QToolButton(frameFind);
- toolPrevious->setObjectName(QString::fromUtf8("toolPrevious"));
+ toolPrevious->setObjectName("toolPrevious");
const QIcon icon1 = QIcon(QString::fromUtf8(":/qt-project.org/assistant/images/win/previous.png"));
toolPrevious->setIcon(icon1);
toolPrevious->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
@@ -136,7 +113,7 @@ public:
hboxLayout->addWidget(toolPrevious);
toolNext = new QToolButton(frameFind);
- toolNext->setObjectName(QString::fromUtf8("toolNext"));
+ toolNext->setObjectName("toolNext");
toolNext->setMinimumSize(QSize(0, 0));
const QIcon icon2 = QIcon(QString::fromUtf8(":/qt-project.org/assistant/images/win/next.png"));
toolNext->setIcon(icon2);
@@ -147,17 +124,17 @@ public:
hboxLayout->addWidget(toolNext);
checkCase = new QCheckBox(frameFind);
- checkCase->setObjectName(QString::fromUtf8("checkCase"));
+ checkCase->setObjectName("checkCase");
hboxLayout->addWidget(checkCase);
checkWholeWords = new QCheckBox(frameFind);
- checkWholeWords->setObjectName(QString::fromUtf8("checkWholeWords"));
+ checkWholeWords->setObjectName("checkWholeWords");
hboxLayout->addWidget(checkWholeWords);
labelWrapped = new QLabel(frameFind);
- labelWrapped->setObjectName(QString::fromUtf8("labelWrapped"));
+ labelWrapped->setObjectName("labelWrapped");
labelWrapped->setMinimumSize(QSize(0, 20));
labelWrapped->setMaximumSize(QSize(105, 20));
labelWrapped->setTextFormat(Qt::RichText);
@@ -166,7 +143,7 @@ public:
hboxLayout->addWidget(labelWrapped);
- spacerItem = new QSpacerItem(81, 21, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(81, 21, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
diff --git a/tests/auto/tools/uic/baseline/tablewidgeteditor.ui b/tests/auto/tools/uic/baseline/tablewidgeteditor.ui
index a49dd66a90..8e173d5085 100644
--- a/tests/auto/tools/uic/baseline/tablewidgeteditor.ui
+++ b/tests/auto/tools/uic/baseline/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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>qdesigner_internal::TableWidgetEditor</class>
<widget class="QDialog" name="qdesigner_internal::TableWidgetEditor" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/tablewidgeteditor.ui.h b/tests/auto/tools/uic/baseline/tablewidgeteditor.ui.h
index c7163724e3..fa2c627f17 100644
--- a/tests/auto/tools/uic/baseline/tablewidgeteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/tablewidgeteditor.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -105,32 +82,32 @@ public:
void setupUi(QDialog *qdesigner_internal__TableWidgetEditor)
{
if (qdesigner_internal__TableWidgetEditor->objectName().isEmpty())
- qdesigner_internal__TableWidgetEditor->setObjectName(QString::fromUtf8("qdesigner_internal__TableWidgetEditor"));
+ qdesigner_internal__TableWidgetEditor->setObjectName("qdesigner_internal__TableWidgetEditor");
qdesigner_internal__TableWidgetEditor->resize(591, 455);
gridLayout_4 = new QGridLayout(qdesigner_internal__TableWidgetEditor);
- gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4"));
+ gridLayout_4->setObjectName("gridLayout_4");
itemsBox = new QGroupBox(qdesigner_internal__TableWidgetEditor);
- itemsBox->setObjectName(QString::fromUtf8("itemsBox"));
+ itemsBox->setObjectName("itemsBox");
gridLayout = new QGridLayout(itemsBox);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
tableWidget = new QTableWidget(itemsBox);
- tableWidget->setObjectName(QString::fromUtf8("tableWidget"));
+ tableWidget->setObjectName("tableWidget");
gridLayout->addWidget(tableWidget, 0, 0, 1, 1);
horizontalLayout_5 = new QHBoxLayout();
- horizontalLayout_5->setObjectName(QString::fromUtf8("horizontalLayout_5"));
+ horizontalLayout_5->setObjectName("horizontalLayout_5");
label_3 = new QLabel(itemsBox);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
horizontalLayout_5->addWidget(label_3);
itemIconSelector = new qdesigner_internal::IconSelector(itemsBox);
- itemIconSelector->setObjectName(QString::fromUtf8("itemIconSelector"));
+ itemIconSelector->setObjectName("itemIconSelector");
horizontalLayout_5->addWidget(itemIconSelector);
- horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout_5->addItem(horizontalSpacer);
@@ -141,29 +118,29 @@ public:
gridLayout_4->addWidget(itemsBox, 0, 0, 1, 1);
buttonBox = new QDialogButtonBox(qdesigner_internal__TableWidgetEditor);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
gridLayout_4->addWidget(buttonBox, 1, 0, 1, 2);
widget = new QWidget(qdesigner_internal__TableWidgetEditor);
- widget->setObjectName(QString::fromUtf8("widget"));
- QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
+ widget->setObjectName("widget");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(widget->sizePolicy().hasHeightForWidth());
widget->setSizePolicy(sizePolicy);
verticalLayout = new QVBoxLayout(widget);
verticalLayout->setContentsMargins(0, 0, 0, 0);
- verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
+ verticalLayout->setObjectName("verticalLayout");
columnsBox = new QGroupBox(widget);
- columnsBox->setObjectName(QString::fromUtf8("columnsBox"));
+ columnsBox->setObjectName("columnsBox");
gridLayout_2 = new QGridLayout(columnsBox);
- gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
+ gridLayout_2->setObjectName("gridLayout_2");
columnsListWidget = new QListWidget(columnsBox);
- columnsListWidget->setObjectName(QString::fromUtf8("columnsListWidget"));
- QSizePolicy sizePolicy1(QSizePolicy::Ignored, QSizePolicy::Expanding);
+ columnsListWidget->setObjectName("columnsListWidget");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Ignored, QSizePolicy::Policy::Expanding);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(columnsListWidget->sizePolicy().hasHeightForWidth());
@@ -173,28 +150,28 @@ public:
gridLayout_2->addWidget(columnsListWidget, 0, 0, 1, 1);
horizontalLayout_3 = new QHBoxLayout();
- horizontalLayout_3->setObjectName(QString::fromUtf8("horizontalLayout_3"));
+ horizontalLayout_3->setObjectName("horizontalLayout_3");
newColumnButton = new QToolButton(columnsBox);
- newColumnButton->setObjectName(QString::fromUtf8("newColumnButton"));
+ newColumnButton->setObjectName("newColumnButton");
horizontalLayout_3->addWidget(newColumnButton);
deleteColumnButton = new QToolButton(columnsBox);
- deleteColumnButton->setObjectName(QString::fromUtf8("deleteColumnButton"));
+ deleteColumnButton->setObjectName("deleteColumnButton");
horizontalLayout_3->addWidget(deleteColumnButton);
- spacerItem = new QSpacerItem(0, 23, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(0, 23, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout_3->addItem(spacerItem);
moveColumnUpButton = new QToolButton(columnsBox);
- moveColumnUpButton->setObjectName(QString::fromUtf8("moveColumnUpButton"));
+ moveColumnUpButton->setObjectName("moveColumnUpButton");
horizontalLayout_3->addWidget(moveColumnUpButton);
moveColumnDownButton = new QToolButton(columnsBox);
- moveColumnDownButton->setObjectName(QString::fromUtf8("moveColumnDownButton"));
+ moveColumnDownButton->setObjectName("moveColumnDownButton");
horizontalLayout_3->addWidget(moveColumnDownButton);
@@ -202,18 +179,18 @@ public:
gridLayout_2->addLayout(horizontalLayout_3, 1, 0, 1, 1);
horizontalLayout_2 = new QHBoxLayout();
- horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
+ horizontalLayout_2->setObjectName("horizontalLayout_2");
label = new QLabel(columnsBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
horizontalLayout_2->addWidget(label);
columnIconSelector = new qdesigner_internal::IconSelector(columnsBox);
- columnIconSelector->setObjectName(QString::fromUtf8("columnIconSelector"));
+ columnIconSelector->setObjectName("columnIconSelector");
horizontalLayout_2->addWidget(columnIconSelector);
- spacerItem1 = new QSpacerItem(0, 21, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(0, 21, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout_2->addItem(spacerItem1);
@@ -224,11 +201,11 @@ public:
verticalLayout->addWidget(columnsBox);
rowsBox = new QGroupBox(widget);
- rowsBox->setObjectName(QString::fromUtf8("rowsBox"));
+ rowsBox->setObjectName("rowsBox");
gridLayout_3 = new QGridLayout(rowsBox);
- gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3"));
+ gridLayout_3->setObjectName("gridLayout_3");
rowsListWidget = new QListWidget(rowsBox);
- rowsListWidget->setObjectName(QString::fromUtf8("rowsListWidget"));
+ rowsListWidget->setObjectName("rowsListWidget");
sizePolicy1.setHeightForWidth(rowsListWidget->sizePolicy().hasHeightForWidth());
rowsListWidget->setSizePolicy(sizePolicy1);
rowsListWidget->setFocusPolicy(Qt::TabFocus);
@@ -236,28 +213,28 @@ public:
gridLayout_3->addWidget(rowsListWidget, 0, 0, 1, 1);
horizontalLayout_4 = new QHBoxLayout();
- horizontalLayout_4->setObjectName(QString::fromUtf8("horizontalLayout_4"));
+ horizontalLayout_4->setObjectName("horizontalLayout_4");
newRowButton = new QToolButton(rowsBox);
- newRowButton->setObjectName(QString::fromUtf8("newRowButton"));
+ newRowButton->setObjectName("newRowButton");
horizontalLayout_4->addWidget(newRowButton);
deleteRowButton = new QToolButton(rowsBox);
- deleteRowButton->setObjectName(QString::fromUtf8("deleteRowButton"));
+ deleteRowButton->setObjectName("deleteRowButton");
horizontalLayout_4->addWidget(deleteRowButton);
- spacerItem2 = new QSpacerItem(0, 23, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem2 = new QSpacerItem(0, 23, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout_4->addItem(spacerItem2);
moveRowUpButton = new QToolButton(rowsBox);
- moveRowUpButton->setObjectName(QString::fromUtf8("moveRowUpButton"));
+ moveRowUpButton->setObjectName("moveRowUpButton");
horizontalLayout_4->addWidget(moveRowUpButton);
moveRowDownButton = new QToolButton(rowsBox);
- moveRowDownButton->setObjectName(QString::fromUtf8("moveRowDownButton"));
+ moveRowDownButton->setObjectName("moveRowDownButton");
horizontalLayout_4->addWidget(moveRowDownButton);
@@ -265,18 +242,18 @@ public:
gridLayout_3->addLayout(horizontalLayout_4, 1, 0, 1, 1);
horizontalLayout = new QHBoxLayout();
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
label_2 = new QLabel(rowsBox);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
horizontalLayout->addWidget(label_2);
rowIconSelector = new qdesigner_internal::IconSelector(rowsBox);
- rowIconSelector->setObjectName(QString::fromUtf8("rowIconSelector"));
+ rowIconSelector->setObjectName("rowIconSelector");
horizontalLayout->addWidget(rowIconSelector);
- spacerItem3 = new QSpacerItem(0, 21, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem3 = new QSpacerItem(0, 21, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout->addItem(spacerItem3);
diff --git a/tests/auto/tools/uic/baseline/tetrixwindow.ui.h b/tests/auto/tools/uic/baseline/tetrixwindow.ui.h
index efbf14c3fa..3f5ac396b1 100644
--- a/tests/auto/tools/uic/baseline/tetrixwindow.ui.h
+++ b/tests/auto/tools/uic/baseline/tetrixwindow.ui.h
@@ -42,7 +42,7 @@ public:
void setupUi(QWidget *TetrixWindow)
{
if (TetrixWindow->objectName().isEmpty())
- TetrixWindow->setObjectName(QString::fromUtf8("TetrixWindow"));
+ TetrixWindow->setObjectName("TetrixWindow");
TetrixWindow->resize(537, 475);
vboxLayout = new QVBoxLayout(TetrixWindow);
#ifndef Q_OS_MAC
@@ -51,7 +51,7 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
gridLayout = new QGridLayout();
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
@@ -59,39 +59,39 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(0, 0, 0, 0);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
startButton = new QPushButton(TetrixWindow);
- startButton->setObjectName(QString::fromUtf8("startButton"));
+ startButton->setObjectName("startButton");
startButton->setFocusPolicy(Qt::NoFocus);
gridLayout->addWidget(startButton, 4, 0, 1, 1);
linesLcd = new QLCDNumber(TetrixWindow);
- linesLcd->setObjectName(QString::fromUtf8("linesLcd"));
+ linesLcd->setObjectName("linesLcd");
linesLcd->setSegmentStyle(QLCDNumber::Filled);
gridLayout->addWidget(linesLcd, 3, 2, 1, 1);
linesRemovedLabel = new QLabel(TetrixWindow);
- linesRemovedLabel->setObjectName(QString::fromUtf8("linesRemovedLabel"));
+ linesRemovedLabel->setObjectName("linesRemovedLabel");
linesRemovedLabel->setAlignment(Qt::AlignBottom|Qt::AlignHCenter);
gridLayout->addWidget(linesRemovedLabel, 2, 2, 1, 1);
pauseButton = new QPushButton(TetrixWindow);
- pauseButton->setObjectName(QString::fromUtf8("pauseButton"));
+ pauseButton->setObjectName("pauseButton");
pauseButton->setFocusPolicy(Qt::NoFocus);
gridLayout->addWidget(pauseButton, 5, 2, 1, 1);
scoreLcd = new QLCDNumber(TetrixWindow);
- scoreLcd->setObjectName(QString::fromUtf8("scoreLcd"));
+ scoreLcd->setObjectName("scoreLcd");
scoreLcd->setSegmentStyle(QLCDNumber::Filled);
gridLayout->addWidget(scoreLcd, 1, 2, 1, 1);
board = new TetrixBoard(TetrixWindow);
- board->setObjectName(QString::fromUtf8("board"));
+ board->setObjectName("board");
board->setFocusPolicy(Qt::StrongFocus);
board->setFrameShape(QFrame::Panel);
board->setFrameShadow(QFrame::Sunken);
@@ -99,31 +99,31 @@ public:
gridLayout->addWidget(board, 0, 1, 6, 1);
levelLabel = new QLabel(TetrixWindow);
- levelLabel->setObjectName(QString::fromUtf8("levelLabel"));
+ levelLabel->setObjectName("levelLabel");
levelLabel->setAlignment(Qt::AlignBottom|Qt::AlignHCenter);
gridLayout->addWidget(levelLabel, 2, 0, 1, 1);
nextLabel = new QLabel(TetrixWindow);
- nextLabel->setObjectName(QString::fromUtf8("nextLabel"));
+ nextLabel->setObjectName("nextLabel");
nextLabel->setAlignment(Qt::AlignBottom|Qt::AlignHCenter);
gridLayout->addWidget(nextLabel, 0, 0, 1, 1);
levelLcd = new QLCDNumber(TetrixWindow);
- levelLcd->setObjectName(QString::fromUtf8("levelLcd"));
+ levelLcd->setObjectName("levelLcd");
levelLcd->setSegmentStyle(QLCDNumber::Filled);
gridLayout->addWidget(levelLcd, 3, 0, 1, 1);
scoreLabel = new QLabel(TetrixWindow);
- scoreLabel->setObjectName(QString::fromUtf8("scoreLabel"));
+ scoreLabel->setObjectName("scoreLabel");
scoreLabel->setAlignment(Qt::AlignBottom|Qt::AlignHCenter);
gridLayout->addWidget(scoreLabel, 0, 2, 1, 1);
nextPieceLabel = new QLabel(TetrixWindow);
- nextPieceLabel->setObjectName(QString::fromUtf8("nextPieceLabel"));
+ nextPieceLabel->setObjectName("nextPieceLabel");
nextPieceLabel->setFrameShape(QFrame::Box);
nextPieceLabel->setFrameShadow(QFrame::Raised);
nextPieceLabel->setAlignment(Qt::AlignCenter);
@@ -131,7 +131,7 @@ public:
gridLayout->addWidget(nextPieceLabel, 1, 0, 1, 1);
quitButton = new QPushButton(TetrixWindow);
- quitButton->setObjectName(QString::fromUtf8("quitButton"));
+ quitButton->setObjectName("quitButton");
quitButton->setFocusPolicy(Qt::NoFocus);
gridLayout->addWidget(quitButton, 4, 2, 1, 1);
diff --git a/tests/auto/tools/uic/baseline/textfinder.ui.h b/tests/auto/tools/uic/baseline/textfinder.ui.h
index 3033670d07..61c36ae960 100644
--- a/tests/auto/tools/uic/baseline/textfinder.ui.h
+++ b/tests/auto/tools/uic/baseline/textfinder.ui.h
@@ -36,7 +36,7 @@ public:
void setupUi(QWidget *Form)
{
if (Form->objectName().isEmpty())
- Form->setObjectName(QString::fromUtf8("Form"));
+ Form->setObjectName("Form");
Form->resize(378, 158);
vboxLayout = new QVBoxLayout(Form);
#ifndef Q_OS_MAC
@@ -45,7 +45,7 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
gridLayout = new QGridLayout();
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
@@ -53,19 +53,19 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(0, 0, 0, 0);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
lineEdit = new QLineEdit(Form);
- lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
+ lineEdit->setObjectName("lineEdit");
gridLayout->addWidget(lineEdit, 0, 1, 1, 1);
searchLabel = new QLabel(Form);
- searchLabel->setObjectName(QString::fromUtf8("searchLabel"));
+ searchLabel->setObjectName("searchLabel");
gridLayout->addWidget(searchLabel, 0, 0, 1, 1);
findButton = new QPushButton(Form);
- findButton->setObjectName(QString::fromUtf8("findButton"));
+ findButton->setObjectName("findButton");
gridLayout->addWidget(findButton, 0, 2, 1, 1);
@@ -73,11 +73,11 @@ public:
vboxLayout->addLayout(gridLayout);
textEdit = new QTextEdit(Form);
- textEdit->setObjectName(QString::fromUtf8("textEdit"));
+ textEdit->setObjectName("textEdit");
vboxLayout->addWidget(textEdit);
- spacerItem = new QSpacerItem(20, 16, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 16, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout->addItem(spacerItem);
diff --git a/tests/auto/tools/uic/baseline/topicchooser.ui.h b/tests/auto/tools/uic/baseline/topicchooser.ui.h
index eab135e4a6..049de00250 100644
--- a/tests/auto/tools/uic/baseline/topicchooser.ui.h
+++ b/tests/auto/tools/uic/baseline/topicchooser.ui.h
@@ -37,7 +37,7 @@ public:
void setupUi(QDialog *TopicChooser)
{
if (TopicChooser->objectName().isEmpty())
- TopicChooser->setObjectName(QString::fromUtf8("TopicChooser"));
+ TopicChooser->setObjectName("TopicChooser");
TopicChooser->resize(391, 223);
TopicChooser->setSizeGripEnabled(true);
vboxLayout = new QVBoxLayout(TopicChooser);
@@ -45,40 +45,40 @@ public:
vboxLayout->setSpacing(6);
#endif
vboxLayout->setContentsMargins(11, 11, 11, 11);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
vboxLayout->setObjectName(QString::fromUtf8("unnamed"));
label = new QLabel(TopicChooser);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
vboxLayout->addWidget(label);
listWidget = new QListWidget(TopicChooser);
- listWidget->setObjectName(QString::fromUtf8("listWidget"));
+ listWidget->setObjectName("listWidget");
vboxLayout->addWidget(listWidget);
Layout16 = new QWidget(TopicChooser);
- Layout16->setObjectName(QString::fromUtf8("Layout16"));
+ Layout16->setObjectName("Layout16");
hboxLayout = new QHBoxLayout(Layout16);
#ifndef Q_OS_MAC
hboxLayout->setSpacing(6);
#endif
hboxLayout->setContentsMargins(0, 0, 0, 0);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
hboxLayout->setObjectName(QString::fromUtf8("unnamed"));
hboxLayout->setContentsMargins(0, 0, 0, 0);
- Horizontal_Spacing2 = new QSpacerItem(20, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ Horizontal_Spacing2 = new QSpacerItem(20, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(Horizontal_Spacing2);
buttonDisplay = new QPushButton(Layout16);
- buttonDisplay->setObjectName(QString::fromUtf8("buttonDisplay"));
+ buttonDisplay->setObjectName("buttonDisplay");
buttonDisplay->setAutoDefault(true);
hboxLayout->addWidget(buttonDisplay);
buttonCancel = new QPushButton(Layout16);
- buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
+ buttonCancel->setObjectName("buttonCancel");
buttonCancel->setAutoDefault(true);
hboxLayout->addWidget(buttonCancel);
diff --git a/tests/auto/tools/uic/baseline/translatedialog.ui b/tests/auto/tools/uic/baseline/translatedialog.ui
index 42da3591d8..197c3c4d0e 100644
--- a/tests/auto/tools/uic/baseline/translatedialog.ui
+++ b/tests/auto/tools/uic/baseline/translatedialog.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>TranslateDialog</class>
<widget class="QDialog" name="TranslateDialog" >
<property name="geometry" >
@@ -241,7 +218,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Expanding</enum>
+ <enum>QSizePolicy::Policy::Expanding</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/translatedialog.ui.h b/tests/auto/tools/uic/baseline/translatedialog.ui.h
index 958d30a5a2..cbc103ef6e 100644
--- a/tests/auto/tools/uic/baseline/translatedialog.ui.h
+++ b/tests/auto/tools/uic/baseline/translatedialog.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -79,9 +56,9 @@ public:
void setupUi(QDialog *TranslateDialog)
{
if (TranslateDialog->objectName().isEmpty())
- TranslateDialog->setObjectName(QString::fromUtf8("TranslateDialog"));
+ TranslateDialog->setObjectName("TranslateDialog");
TranslateDialog->resize(407, 145);
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Maximum);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(TranslateDialog->sizePolicy().hasHeightForWidth());
@@ -89,35 +66,35 @@ public:
hboxLayout = new QHBoxLayout(TranslateDialog);
hboxLayout->setSpacing(6);
hboxLayout->setContentsMargins(11, 11, 11, 11);
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
hboxLayout->setContentsMargins(9, 9, 9, 9);
vboxLayout = new QVBoxLayout();
vboxLayout->setSpacing(6);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
vboxLayout->setContentsMargins(0, 0, 0, 0);
gridLayout = new QGridLayout();
gridLayout->setSpacing(6);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
gridLayout->setHorizontalSpacing(6);
gridLayout->setVerticalSpacing(6);
gridLayout->setContentsMargins(0, 0, 0, 0);
ledTranslateTo = new QLineEdit(TranslateDialog);
- ledTranslateTo->setObjectName(QString::fromUtf8("ledTranslateTo"));
+ ledTranslateTo->setObjectName("ledTranslateTo");
gridLayout->addWidget(ledTranslateTo, 1, 1, 1, 1);
findWhat = new QLabel(TranslateDialog);
- findWhat->setObjectName(QString::fromUtf8("findWhat"));
+ findWhat->setObjectName("findWhat");
gridLayout->addWidget(findWhat, 0, 0, 1, 1);
translateTo = new QLabel(TranslateDialog);
- translateTo->setObjectName(QString::fromUtf8("translateTo"));
+ translateTo->setObjectName("translateTo");
gridLayout->addWidget(translateTo, 1, 0, 1, 1);
ledFindWhat = new QLineEdit(TranslateDialog);
- ledFindWhat->setObjectName(QString::fromUtf8("ledFindWhat"));
+ ledFindWhat->setObjectName("ledFindWhat");
gridLayout->addWidget(ledFindWhat, 0, 1, 1, 1);
@@ -125,22 +102,22 @@ public:
vboxLayout->addLayout(gridLayout);
groupBox = new QGroupBox(TranslateDialog);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
vboxLayout1 = new QVBoxLayout(groupBox);
vboxLayout1->setSpacing(6);
vboxLayout1->setContentsMargins(11, 11, 11, 11);
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
ckMatchCase = new QCheckBox(groupBox);
- ckMatchCase->setObjectName(QString::fromUtf8("ckMatchCase"));
+ ckMatchCase->setObjectName("ckMatchCase");
vboxLayout1->addWidget(ckMatchCase);
ckMarkFinished = new QCheckBox(groupBox);
- ckMarkFinished->setObjectName(QString::fromUtf8("ckMarkFinished"));
+ ckMarkFinished->setObjectName("ckMarkFinished");
vboxLayout1->addWidget(ckMarkFinished);
- spacerItem = new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem = new QSpacerItem(20, 40, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout1->addItem(spacerItem);
@@ -152,30 +129,30 @@ public:
vboxLayout2 = new QVBoxLayout();
vboxLayout2->setSpacing(6);
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
vboxLayout2->setContentsMargins(0, 0, 0, 0);
findNxt = new QPushButton(TranslateDialog);
- findNxt->setObjectName(QString::fromUtf8("findNxt"));
+ findNxt->setObjectName("findNxt");
findNxt->setFlat(false);
vboxLayout2->addWidget(findNxt);
translate = new QPushButton(TranslateDialog);
- translate->setObjectName(QString::fromUtf8("translate"));
+ translate->setObjectName("translate");
vboxLayout2->addWidget(translate);
translateAll = new QPushButton(TranslateDialog);
- translateAll->setObjectName(QString::fromUtf8("translateAll"));
+ translateAll->setObjectName("translateAll");
vboxLayout2->addWidget(translateAll);
cancel = new QPushButton(TranslateDialog);
- cancel->setObjectName(QString::fromUtf8("cancel"));
+ cancel->setObjectName("cancel");
vboxLayout2->addWidget(cancel);
- spacerItem1 = new QSpacerItem(20, 51, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem1 = new QSpacerItem(20, 51, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout2->addItem(spacerItem1);
diff --git a/tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h b/tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h
index eea7b7335d..de16310b07 100644
--- a/tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h
+++ b/tests/auto/tools/uic/baseline/translation/Dialog_without_Buttons_tr.h
@@ -23,7 +23,7 @@ public:
void setupUi(QDialog *Dialog)
{
if (Dialog->objectName().isEmpty())
- Dialog->setObjectName(QString::fromUtf8("Dialog"));
+ Dialog->setObjectName("Dialog");
Dialog->resize(400, 300);
retranslateUi(Dialog);
diff --git a/tests/auto/tools/uic/baseline/translationsettings.ui.h b/tests/auto/tools/uic/baseline/translationsettings.ui.h
index 12f5e36087..5111fc3944 100644
--- a/tests/auto/tools/uic/baseline/translationsettings.ui.h
+++ b/tests/auto/tools/uic/baseline/translationsettings.ui.h
@@ -37,7 +37,7 @@ public:
void setupUi(QDialog *TranslationSettings)
{
if (TranslationSettings->objectName().isEmpty())
- TranslationSettings->setObjectName(QString::fromUtf8("TranslationSettings"));
+ TranslationSettings->setObjectName("TranslationSettings");
TranslationSettings->resize(346, 125);
vboxLayout = new QVBoxLayout(TranslationSettings);
#ifndef Q_OS_MAC
@@ -46,9 +46,9 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
groupBox = new QGroupBox(TranslationSettings);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
gridLayout = new QGridLayout(groupBox);
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
@@ -56,24 +56,24 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(9, 9, 9, 9);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
cbLanguageList = new QComboBox(groupBox);
- cbLanguageList->setObjectName(QString::fromUtf8("cbLanguageList"));
+ cbLanguageList->setObjectName("cbLanguageList");
gridLayout->addWidget(cbLanguageList, 0, 1, 1, 1);
label = new QLabel(groupBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 1);
cbCountryList = new QComboBox(groupBox);
- cbCountryList->setObjectName(QString::fromUtf8("cbCountryList"));
+ cbCountryList->setObjectName("cbCountryList");
gridLayout->addWidget(cbCountryList, 1, 1, 1, 1);
lblCountry = new QLabel(groupBox);
- lblCountry->setObjectName(QString::fromUtf8("lblCountry"));
+ lblCountry->setObjectName("lblCountry");
gridLayout->addWidget(lblCountry, 1, 0, 1, 1);
@@ -81,7 +81,7 @@ public:
vboxLayout->addWidget(groupBox);
buttonBox = new QDialogButtonBox(TranslationSettings);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/treewidgeteditor.ui b/tests/auto/tools/uic/baseline/treewidgeteditor.ui
index a49c0206da..4d59f67b99 100644
--- a/tests/auto/tools/uic/baseline/treewidgeteditor.ui
+++ b/tests/auto/tools/uic/baseline/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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<class>qdesigner_internal::TreeWidgetEditor</class>
<widget class="QDialog" name="qdesigner_internal::TreeWidgetEditor" >
<property name="geometry" >
diff --git a/tests/auto/tools/uic/baseline/treewidgeteditor.ui.h b/tests/auto/tools/uic/baseline/treewidgeteditor.ui.h
index 076c7b5523..2a49223c02 100644
--- a/tests/auto/tools/uic/baseline/treewidgeteditor.ui.h
+++ b/tests/auto/tools/uic/baseline/treewidgeteditor.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -97,58 +74,58 @@ public:
void setupUi(QDialog *qdesigner_internal__TreeWidgetEditor)
{
if (qdesigner_internal__TreeWidgetEditor->objectName().isEmpty())
- qdesigner_internal__TreeWidgetEditor->setObjectName(QString::fromUtf8("qdesigner_internal__TreeWidgetEditor"));
+ qdesigner_internal__TreeWidgetEditor->setObjectName("qdesigner_internal__TreeWidgetEditor");
qdesigner_internal__TreeWidgetEditor->resize(619, 321);
gridLayout_3 = new QGridLayout(qdesigner_internal__TreeWidgetEditor);
- gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3"));
+ gridLayout_3->setObjectName("gridLayout_3");
itemsBox = new QGroupBox(qdesigner_internal__TreeWidgetEditor);
- itemsBox->setObjectName(QString::fromUtf8("itemsBox"));
+ itemsBox->setObjectName("itemsBox");
gridLayout = new QGridLayout(itemsBox);
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
treeWidget = new QTreeWidget(itemsBox);
- treeWidget->setObjectName(QString::fromUtf8("treeWidget"));
+ treeWidget->setObjectName("treeWidget");
treeWidget->setFocusPolicy(Qt::TabFocus);
gridLayout->addWidget(treeWidget, 0, 0, 1, 1);
horizontalLayout_4 = new QHBoxLayout();
- horizontalLayout_4->setObjectName(QString::fromUtf8("horizontalLayout_4"));
+ horizontalLayout_4->setObjectName("horizontalLayout_4");
newItemButton = new QToolButton(itemsBox);
- newItemButton->setObjectName(QString::fromUtf8("newItemButton"));
+ newItemButton->setObjectName("newItemButton");
horizontalLayout_4->addWidget(newItemButton);
newSubItemButton = new QToolButton(itemsBox);
- newSubItemButton->setObjectName(QString::fromUtf8("newSubItemButton"));
+ newSubItemButton->setObjectName("newSubItemButton");
horizontalLayout_4->addWidget(newSubItemButton);
deleteItemButton = new QToolButton(itemsBox);
- deleteItemButton->setObjectName(QString::fromUtf8("deleteItemButton"));
+ deleteItemButton->setObjectName("deleteItemButton");
horizontalLayout_4->addWidget(deleteItemButton);
- spacerItem = new QSpacerItem(28, 23, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(28, 23, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout_4->addItem(spacerItem);
moveItemLeftButton = new QToolButton(itemsBox);
- moveItemLeftButton->setObjectName(QString::fromUtf8("moveItemLeftButton"));
+ moveItemLeftButton->setObjectName("moveItemLeftButton");
horizontalLayout_4->addWidget(moveItemLeftButton);
moveItemRightButton = new QToolButton(itemsBox);
- moveItemRightButton->setObjectName(QString::fromUtf8("moveItemRightButton"));
+ moveItemRightButton->setObjectName("moveItemRightButton");
horizontalLayout_4->addWidget(moveItemRightButton);
moveItemUpButton = new QToolButton(itemsBox);
- moveItemUpButton->setObjectName(QString::fromUtf8("moveItemUpButton"));
+ moveItemUpButton->setObjectName("moveItemUpButton");
horizontalLayout_4->addWidget(moveItemUpButton);
moveItemDownButton = new QToolButton(itemsBox);
- moveItemDownButton->setObjectName(QString::fromUtf8("moveItemDownButton"));
+ moveItemDownButton->setObjectName("moveItemDownButton");
horizontalLayout_4->addWidget(moveItemDownButton);
@@ -156,18 +133,18 @@ public:
gridLayout->addLayout(horizontalLayout_4, 1, 0, 1, 1);
horizontalLayout_2 = new QHBoxLayout();
- horizontalLayout_2->setObjectName(QString::fromUtf8("horizontalLayout_2"));
+ horizontalLayout_2->setObjectName("horizontalLayout_2");
label_2 = new QLabel(itemsBox);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
horizontalLayout_2->addWidget(label_2);
itemIconSelector = new qdesigner_internal::IconSelector(itemsBox);
- itemIconSelector->setObjectName(QString::fromUtf8("itemIconSelector"));
+ itemIconSelector->setObjectName("itemIconSelector");
horizontalLayout_2->addWidget(itemIconSelector);
- horizontalSpacer = new QSpacerItem(288, 21, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer = new QSpacerItem(288, 21, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout_2->addItem(horizontalSpacer);
@@ -178,17 +155,17 @@ public:
gridLayout_3->addWidget(itemsBox, 0, 0, 1, 1);
columnsBox = new QGroupBox(qdesigner_internal__TreeWidgetEditor);
- columnsBox->setObjectName(QString::fromUtf8("columnsBox"));
- QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Preferred);
+ columnsBox->setObjectName("columnsBox");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Preferred);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(columnsBox->sizePolicy().hasHeightForWidth());
columnsBox->setSizePolicy(sizePolicy);
gridLayout_2 = new QGridLayout(columnsBox);
- gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
+ gridLayout_2->setObjectName("gridLayout_2");
listWidget = new QListWidget(columnsBox);
- listWidget->setObjectName(QString::fromUtf8("listWidget"));
- QSizePolicy sizePolicy1(QSizePolicy::Ignored, QSizePolicy::Expanding);
+ listWidget->setObjectName("listWidget");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Ignored, QSizePolicy::Policy::Expanding);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(listWidget->sizePolicy().hasHeightForWidth());
@@ -198,28 +175,28 @@ public:
gridLayout_2->addWidget(listWidget, 0, 0, 1, 1);
horizontalLayout_3 = new QHBoxLayout();
- horizontalLayout_3->setObjectName(QString::fromUtf8("horizontalLayout_3"));
+ horizontalLayout_3->setObjectName("horizontalLayout_3");
newColumnButton = new QToolButton(columnsBox);
- newColumnButton->setObjectName(QString::fromUtf8("newColumnButton"));
+ newColumnButton->setObjectName("newColumnButton");
horizontalLayout_3->addWidget(newColumnButton);
deleteColumnButton = new QToolButton(columnsBox);
- deleteColumnButton->setObjectName(QString::fromUtf8("deleteColumnButton"));
+ deleteColumnButton->setObjectName("deleteColumnButton");
horizontalLayout_3->addWidget(deleteColumnButton);
- spacerItem1 = new QSpacerItem(13, 23, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(13, 23, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout_3->addItem(spacerItem1);
moveColumnUpButton = new QToolButton(columnsBox);
- moveColumnUpButton->setObjectName(QString::fromUtf8("moveColumnUpButton"));
+ moveColumnUpButton->setObjectName("moveColumnUpButton");
horizontalLayout_3->addWidget(moveColumnUpButton);
moveColumnDownButton = new QToolButton(columnsBox);
- moveColumnDownButton->setObjectName(QString::fromUtf8("moveColumnDownButton"));
+ moveColumnDownButton->setObjectName("moveColumnDownButton");
horizontalLayout_3->addWidget(moveColumnDownButton);
@@ -227,18 +204,18 @@ public:
gridLayout_2->addLayout(horizontalLayout_3, 1, 0, 1, 1);
horizontalLayout = new QHBoxLayout();
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
+ horizontalLayout->setObjectName("horizontalLayout");
label = new QLabel(columnsBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
horizontalLayout->addWidget(label);
columnIconSelector = new qdesigner_internal::IconSelector(columnsBox);
- columnIconSelector->setObjectName(QString::fromUtf8("columnIconSelector"));
+ columnIconSelector->setObjectName("columnIconSelector");
horizontalLayout->addWidget(columnIconSelector);
- spacerItem2 = new QSpacerItem(0, 10, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem2 = new QSpacerItem(0, 10, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout->addItem(spacerItem2);
@@ -249,7 +226,7 @@ public:
gridLayout_3->addWidget(columnsBox, 0, 1, 1, 1);
buttonBox = new QDialogButtonBox(qdesigner_internal__TreeWidgetEditor);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/trpreviewtool.ui b/tests/auto/tools/uic/baseline/trpreviewtool.ui
index aa7c1c8048..00c414924c 100644
--- a/tests/auto/tools/uic/baseline/trpreviewtool.ui
+++ b/tests/auto/tools/uic/baseline/trpreviewtool.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 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$
-**
-*********************************************************************</comment>
+<comment>
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+</comment>
<exportmacro></exportmacro>
<class>TrPreviewToolClass</class>
<widget class="QMainWindow" name="TrPreviewToolClass" >
diff --git a/tests/auto/tools/uic/baseline/trpreviewtool.ui.h b/tests/auto/tools/uic/baseline/trpreviewtool.ui.h
index 2d472ce769..f66e8fbbb1 100644
--- a/tests/auto/tools/uic/baseline/trpreviewtool.ui.h
+++ b/tests/auto/tools/uic/baseline/trpreviewtool.ui.h
@@ -1,31 +1,8 @@
/*
-*********************************************************************
-**
-** 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$
-**
-*********************************************************************
+
+* Copyright (C) 2016 The Qt Company Ltd.
+* SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
*/
/********************************************************************************
@@ -79,58 +56,58 @@ public:
void setupUi(QMainWindow *TrPreviewToolClass)
{
if (TrPreviewToolClass->objectName().isEmpty())
- TrPreviewToolClass->setObjectName(QString::fromUtf8("TrPreviewToolClass"));
+ TrPreviewToolClass->setObjectName("TrPreviewToolClass");
TrPreviewToolClass->resize(593, 466);
actionOpenForm = new QAction(TrPreviewToolClass);
- actionOpenForm->setObjectName(QString::fromUtf8("actionOpenForm"));
+ actionOpenForm->setObjectName("actionOpenForm");
const QIcon icon = QIcon(QString::fromUtf8(":/images/open_form.png"));
actionOpenForm->setIcon(icon);
actionLoadTranslation = new QAction(TrPreviewToolClass);
- actionLoadTranslation->setObjectName(QString::fromUtf8("actionLoadTranslation"));
+ actionLoadTranslation->setObjectName("actionLoadTranslation");
const QIcon icon1 = QIcon(QString::fromUtf8(":/images/load_translation.png"));
actionLoadTranslation->setIcon(icon1);
actionReloadTranslations = new QAction(TrPreviewToolClass);
- actionReloadTranslations->setObjectName(QString::fromUtf8("actionReloadTranslations"));
+ actionReloadTranslations->setObjectName("actionReloadTranslations");
const QIcon icon2 = QIcon(QString::fromUtf8(":/images/reload_translations.png"));
actionReloadTranslations->setIcon(icon2);
actionClose = new QAction(TrPreviewToolClass);
- actionClose->setObjectName(QString::fromUtf8("actionClose"));
+ actionClose->setObjectName("actionClose");
actionAbout = new QAction(TrPreviewToolClass);
- actionAbout->setObjectName(QString::fromUtf8("actionAbout"));
+ actionAbout->setObjectName("actionAbout");
actionAbout_Qt = new QAction(TrPreviewToolClass);
- actionAbout_Qt->setObjectName(QString::fromUtf8("actionAbout_Qt"));
+ actionAbout_Qt->setObjectName("actionAbout_Qt");
centralWidget = new QWidget(TrPreviewToolClass);
- centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
+ centralWidget->setObjectName("centralWidget");
TrPreviewToolClass->setCentralWidget(centralWidget);
menuBar = new QMenuBar(TrPreviewToolClass);
- menuBar->setObjectName(QString::fromUtf8("menuBar"));
+ menuBar->setObjectName("menuBar");
menuBar->setGeometry(QRect(0, 0, 593, 21));
menuView = new QMenu(menuBar);
- menuView->setObjectName(QString::fromUtf8("menuView"));
+ menuView->setObjectName("menuView");
menuViewViews = new QMenu(menuView);
- menuViewViews->setObjectName(QString::fromUtf8("menuViewViews"));
+ menuViewViews->setObjectName("menuViewViews");
menuHelp = new QMenu(menuBar);
- menuHelp->setObjectName(QString::fromUtf8("menuHelp"));
+ menuHelp->setObjectName("menuHelp");
menuFile = new QMenu(menuBar);
- menuFile->setObjectName(QString::fromUtf8("menuFile"));
+ menuFile->setObjectName("menuFile");
TrPreviewToolClass->setMenuBar(menuBar);
mainToolBar = new QToolBar(TrPreviewToolClass);
- mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
+ mainToolBar->setObjectName("mainToolBar");
mainToolBar->setOrientation(Qt::Horizontal);
- TrPreviewToolClass->addToolBar(Qt::TopToolBarArea, mainToolBar);
+ TrPreviewToolClass->addToolBar(Qt::ToolBarArea::TopToolBarArea, mainToolBar);
statusBar = new QStatusBar(TrPreviewToolClass);
- statusBar->setObjectName(QString::fromUtf8("statusBar"));
+ statusBar->setObjectName("statusBar");
TrPreviewToolClass->setStatusBar(statusBar);
dwForms = new QDockWidget(TrPreviewToolClass);
- dwForms->setObjectName(QString::fromUtf8("dwForms"));
+ dwForms->setObjectName("dwForms");
dockWidgetContents = new QWidget();
- dockWidgetContents->setObjectName(QString::fromUtf8("dockWidgetContents"));
+ dockWidgetContents->setObjectName("dockWidgetContents");
vboxLayout = new QVBoxLayout(dockWidgetContents);
vboxLayout->setSpacing(0);
vboxLayout->setContentsMargins(0, 0, 0, 0);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
viewForms = new QListView(dockWidgetContents);
- viewForms->setObjectName(QString::fromUtf8("viewForms"));
+ viewForms->setObjectName("viewForms");
viewForms->setEditTriggers(QAbstractItemView::NoEditTriggers);
viewForms->setAlternatingRowColors(true);
viewForms->setUniformItemSizes(true);
@@ -138,7 +115,7 @@ public:
vboxLayout->addWidget(viewForms);
dwForms->setWidget(dockWidgetContents);
- TrPreviewToolClass->addDockWidget(Qt::LeftDockWidgetArea, dwForms);
+ TrPreviewToolClass->addDockWidget(Qt::DockWidgetArea::LeftDockWidgetArea, dwForms);
menuBar->addAction(menuFile->menuAction());
menuBar->addAction(menuView->menuAction());
diff --git a/tests/auto/tools/uic/baseline/validators.ui b/tests/auto/tools/uic/baseline/validators.ui
index f05b96fbe0..21c8353a48 100644
--- a/tests/auto/tools/uic/baseline/validators.ui
+++ b/tests/auto/tools/uic/baseline/validators.ui
@@ -179,7 +179,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
@@ -370,7 +370,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/validators.ui.h b/tests/auto/tools/uic/baseline/validators.ui.h
index 2b7eee8099..9ecc36ac00 100644
--- a/tests/auto/tools/uic/baseline/validators.ui.h
+++ b/tests/auto/tools/uic/baseline/validators.ui.h
@@ -76,7 +76,7 @@ public:
void setupUi(QWidget *ValidatorsForm)
{
if (ValidatorsForm->objectName().isEmpty())
- ValidatorsForm->setObjectName(QString::fromUtf8("ValidatorsForm"));
+ ValidatorsForm->setObjectName("ValidatorsForm");
ValidatorsForm->resize(526, 668);
vboxLayout = new QVBoxLayout(ValidatorsForm);
#ifndef Q_OS_MAC
@@ -85,7 +85,7 @@ public:
#ifndef Q_OS_MAC
vboxLayout->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
hboxLayout = new QHBoxLayout();
#ifndef Q_OS_MAC
hboxLayout->setSpacing(6);
@@ -93,13 +93,13 @@ public:
#ifndef Q_OS_MAC
hboxLayout->setContentsMargins(0, 0, 0, 0);
#endif
- hboxLayout->setObjectName(QString::fromUtf8("hboxLayout"));
+ hboxLayout->setObjectName("hboxLayout");
localeSelector = new LocaleSelector(ValidatorsForm);
- localeSelector->setObjectName(QString::fromUtf8("localeSelector"));
+ localeSelector->setObjectName("localeSelector");
hboxLayout->addWidget(localeSelector);
- spacerItem = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout->addItem(spacerItem);
@@ -107,7 +107,7 @@ public:
vboxLayout->addLayout(hboxLayout);
groupBox = new QGroupBox(ValidatorsForm);
- groupBox->setObjectName(QString::fromUtf8("groupBox"));
+ groupBox->setObjectName("groupBox");
vboxLayout1 = new QVBoxLayout(groupBox);
#ifndef Q_OS_MAC
vboxLayout1->setSpacing(6);
@@ -115,7 +115,7 @@ public:
#ifndef Q_OS_MAC
vboxLayout1->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout1->setObjectName(QString::fromUtf8("vboxLayout1"));
+ vboxLayout1->setObjectName("vboxLayout1");
hboxLayout1 = new QHBoxLayout();
#ifndef Q_OS_MAC
hboxLayout1->setSpacing(6);
@@ -123,7 +123,7 @@ public:
#ifndef Q_OS_MAC
hboxLayout1->setContentsMargins(0, 0, 0, 0);
#endif
- hboxLayout1->setObjectName(QString::fromUtf8("hboxLayout1"));
+ hboxLayout1->setObjectName("hboxLayout1");
gridLayout = new QGridLayout();
#ifndef Q_OS_MAC
gridLayout->setSpacing(6);
@@ -131,16 +131,16 @@ public:
#ifndef Q_OS_MAC
gridLayout->setContentsMargins(0, 0, 0, 0);
#endif
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(groupBox);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
label->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout->addWidget(label, 0, 0, 1, 1);
minVal = new QSpinBox(groupBox);
- minVal->setObjectName(QString::fromUtf8("minVal"));
- QSizePolicy sizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed);
+ minVal->setObjectName("minVal");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(1);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(minVal->sizePolicy().hasHeightForWidth());
@@ -151,13 +151,13 @@ public:
gridLayout->addWidget(minVal, 0, 1, 1, 1);
label_2 = new QLabel(groupBox);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
label_2->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout->addWidget(label_2, 1, 0, 1, 1);
maxVal = new QSpinBox(groupBox);
- maxVal->setObjectName(QString::fromUtf8("maxVal"));
+ maxVal->setObjectName("maxVal");
sizePolicy.setHeightForWidth(maxVal->sizePolicy().hasHeightForWidth());
maxVal->setSizePolicy(sizePolicy);
maxVal->setMinimum(-1000000);
@@ -170,7 +170,7 @@ public:
hboxLayout1->addLayout(gridLayout);
frame = new QFrame(groupBox);
- frame->setObjectName(QString::fromUtf8("frame"));
+ frame->setObjectName("frame");
frame->setFrameShape(QFrame::StyledPanel);
frame->setFrameShadow(QFrame::Sunken);
vboxLayout2 = new QVBoxLayout(frame);
@@ -180,10 +180,10 @@ public:
#ifndef Q_OS_MAC
vboxLayout2->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout2->setObjectName(QString::fromUtf8("vboxLayout2"));
+ vboxLayout2->setObjectName("vboxLayout2");
ledWidget = new LEDWidget(frame);
- ledWidget->setObjectName(QString::fromUtf8("ledWidget"));
- QSizePolicy sizePolicy1(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ ledWidget->setObjectName("ledWidget");
+ QSizePolicy sizePolicy1(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Fixed);
sizePolicy1.setHorizontalStretch(0);
sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(ledWidget->sizePolicy().hasHeightForWidth());
@@ -194,7 +194,7 @@ public:
vboxLayout2->addWidget(ledWidget);
label_7 = new QLabel(frame);
- label_7->setObjectName(QString::fromUtf8("label_7"));
+ label_7->setObjectName("label_7");
vboxLayout2->addWidget(label_7);
@@ -204,12 +204,12 @@ public:
vboxLayout1->addLayout(hboxLayout1);
- spacerItem1 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ spacerItem1 = new QSpacerItem(20, 20, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
vboxLayout1->addItem(spacerItem1);
editor = new QLineEdit(groupBox);
- editor->setObjectName(QString::fromUtf8("editor"));
+ editor->setObjectName("editor");
vboxLayout1->addWidget(editor);
@@ -217,7 +217,7 @@ public:
vboxLayout->addWidget(groupBox);
groupBox_2 = new QGroupBox(ValidatorsForm);
- groupBox_2->setObjectName(QString::fromUtf8("groupBox_2"));
+ groupBox_2->setObjectName("groupBox_2");
vboxLayout3 = new QVBoxLayout(groupBox_2);
#ifndef Q_OS_MAC
vboxLayout3->setSpacing(6);
@@ -225,7 +225,7 @@ public:
#ifndef Q_OS_MAC
vboxLayout3->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout3->setObjectName(QString::fromUtf8("vboxLayout3"));
+ vboxLayout3->setObjectName("vboxLayout3");
hboxLayout2 = new QHBoxLayout();
#ifndef Q_OS_MAC
hboxLayout2->setSpacing(6);
@@ -233,7 +233,7 @@ public:
#ifndef Q_OS_MAC
hboxLayout2->setContentsMargins(0, 0, 0, 0);
#endif
- hboxLayout2->setObjectName(QString::fromUtf8("hboxLayout2"));
+ hboxLayout2->setObjectName("hboxLayout2");
gridLayout1 = new QGridLayout();
#ifndef Q_OS_MAC
gridLayout1->setSpacing(6);
@@ -241,15 +241,15 @@ public:
#ifndef Q_OS_MAC
gridLayout1->setContentsMargins(0, 0, 0, 0);
#endif
- gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+ gridLayout1->setObjectName("gridLayout1");
label_3 = new QLabel(groupBox_2);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
label_3->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout1->addWidget(label_3, 0, 0, 1, 1);
doubleMinVal = new QDoubleSpinBox(groupBox_2);
- doubleMinVal->setObjectName(QString::fromUtf8("doubleMinVal"));
+ doubleMinVal->setObjectName("doubleMinVal");
sizePolicy.setHeightForWidth(doubleMinVal->sizePolicy().hasHeightForWidth());
doubleMinVal->setSizePolicy(sizePolicy);
doubleMinVal->setMinimum(-100000.000000000000000);
@@ -259,7 +259,7 @@ public:
gridLayout1->addWidget(doubleMinVal, 0, 1, 1, 1);
label_5 = new QLabel(groupBox_2);
- label_5->setObjectName(QString::fromUtf8("label_5"));
+ label_5->setObjectName("label_5");
label_5->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout1->addWidget(label_5, 0, 2, 1, 1);
@@ -267,18 +267,18 @@ public:
doubleFormat = new QComboBox(groupBox_2);
doubleFormat->addItem(QString());
doubleFormat->addItem(QString());
- doubleFormat->setObjectName(QString::fromUtf8("doubleFormat"));
+ doubleFormat->setObjectName("doubleFormat");
gridLayout1->addWidget(doubleFormat, 0, 3, 1, 1);
label_4 = new QLabel(groupBox_2);
- label_4->setObjectName(QString::fromUtf8("label_4"));
+ label_4->setObjectName("label_4");
label_4->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout1->addWidget(label_4, 1, 0, 1, 1);
doubleMaxVal = new QDoubleSpinBox(groupBox_2);
- doubleMaxVal->setObjectName(QString::fromUtf8("doubleMaxVal"));
+ doubleMaxVal->setObjectName("doubleMaxVal");
sizePolicy.setHeightForWidth(doubleMaxVal->sizePolicy().hasHeightForWidth());
doubleMaxVal->setSizePolicy(sizePolicy);
doubleMaxVal->setMinimum(-100000.000000000000000);
@@ -288,13 +288,13 @@ public:
gridLayout1->addWidget(doubleMaxVal, 1, 1, 1, 1);
label_6 = new QLabel(groupBox_2);
- label_6->setObjectName(QString::fromUtf8("label_6"));
+ label_6->setObjectName("label_6");
label_6->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
gridLayout1->addWidget(label_6, 1, 2, 1, 1);
doubleDecimals = new QSpinBox(groupBox_2);
- doubleDecimals->setObjectName(QString::fromUtf8("doubleDecimals"));
+ doubleDecimals->setObjectName("doubleDecimals");
doubleDecimals->setValue(2);
gridLayout1->addWidget(doubleDecimals, 1, 3, 1, 1);
@@ -303,7 +303,7 @@ public:
hboxLayout2->addLayout(gridLayout1);
frame_2 = new QFrame(groupBox_2);
- frame_2->setObjectName(QString::fromUtf8("frame_2"));
+ frame_2->setObjectName("frame_2");
frame_2->setFrameShape(QFrame::StyledPanel);
frame_2->setFrameShadow(QFrame::Sunken);
vboxLayout4 = new QVBoxLayout(frame_2);
@@ -313,16 +313,16 @@ public:
#ifndef Q_OS_MAC
vboxLayout4->setContentsMargins(9, 9, 9, 9);
#endif
- vboxLayout4->setObjectName(QString::fromUtf8("vboxLayout4"));
+ vboxLayout4->setObjectName("vboxLayout4");
doubleLedWidget = new LEDWidget(frame_2);
- doubleLedWidget->setObjectName(QString::fromUtf8("doubleLedWidget"));
+ doubleLedWidget->setObjectName("doubleLedWidget");
doubleLedWidget->setPixmap(QPixmap(QString::fromUtf8(":/ledoff.png")));
doubleLedWidget->setAlignment(Qt::AlignCenter);
vboxLayout4->addWidget(doubleLedWidget);
label_8 = new QLabel(frame_2);
- label_8->setObjectName(QString::fromUtf8("label_8"));
+ label_8->setObjectName("label_8");
vboxLayout4->addWidget(label_8);
@@ -332,19 +332,19 @@ public:
vboxLayout3->addLayout(hboxLayout2);
- spacerItem2 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ spacerItem2 = new QSpacerItem(20, 20, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
vboxLayout3->addItem(spacerItem2);
doubleEditor = new QLineEdit(groupBox_2);
- doubleEditor->setObjectName(QString::fromUtf8("doubleEditor"));
+ doubleEditor->setObjectName("doubleEditor");
vboxLayout3->addWidget(doubleEditor);
vboxLayout->addWidget(groupBox_2);
- spacerItem3 = new QSpacerItem(20, 111, QSizePolicy::Minimum, QSizePolicy::Expanding);
+ spacerItem3 = new QSpacerItem(20, 111, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Expanding);
vboxLayout->addItem(spacerItem3);
@@ -353,13 +353,13 @@ public:
hboxLayout3->setSpacing(6);
#endif
hboxLayout3->setContentsMargins(0, 0, 0, 0);
- hboxLayout3->setObjectName(QString::fromUtf8("hboxLayout3"));
- spacerItem4 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ hboxLayout3->setObjectName("hboxLayout3");
+ spacerItem4 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
hboxLayout3->addItem(spacerItem4);
pushButton = new QPushButton(ValidatorsForm);
- pushButton->setObjectName(QString::fromUtf8("pushButton"));
+ pushButton->setObjectName("pushButton");
hboxLayout3->addWidget(pushButton);
diff --git a/tests/auto/tools/uic/baseline/wateringconfigdialog.ui b/tests/auto/tools/uic/baseline/wateringconfigdialog.ui
index a7f5349d78..9bbe74631e 100644
--- a/tests/auto/tools/uic/baseline/wateringconfigdialog.ui
+++ b/tests/auto/tools/uic/baseline/wateringconfigdialog.ui
@@ -68,7 +68,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
@@ -98,7 +98,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
@@ -156,7 +156,7 @@
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
@@ -201,7 +201,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
@@ -298,7 +298,7 @@
<enum>Qt::Vertical</enum>
</property>
<property name="sizeType" >
- <enum>QSizePolicy::Fixed</enum>
+ <enum>QSizePolicy::Policy::Fixed</enum>
</property>
<property name="sizeHint" >
<size>
diff --git a/tests/auto/tools/uic/baseline/wateringconfigdialog.ui.h b/tests/auto/tools/uic/baseline/wateringconfigdialog.ui.h
index ead7d63ab8..ee7f7333fc 100644
--- a/tests/auto/tools/uic/baseline/wateringconfigdialog.ui.h
+++ b/tests/auto/tools/uic/baseline/wateringconfigdialog.ui.h
@@ -65,14 +65,14 @@ public:
void setupUi(QDialog *WateringConfigDialog)
{
if (WateringConfigDialog->objectName().isEmpty())
- WateringConfigDialog->setObjectName(QString::fromUtf8("WateringConfigDialog"));
+ WateringConfigDialog->setObjectName("WateringConfigDialog");
WateringConfigDialog->resize(334, 550);
vboxLayout = new QVBoxLayout(WateringConfigDialog);
- vboxLayout->setObjectName(QString::fromUtf8("vboxLayout"));
+ vboxLayout->setObjectName("vboxLayout");
gridLayout = new QGridLayout();
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label_3 = new QLabel(WateringConfigDialog);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
gridLayout->addWidget(label_3, 0, 0, 1, 1);
@@ -83,8 +83,8 @@ public:
plantComboBox->addItem(QString());
plantComboBox->addItem(QString());
plantComboBox->addItem(QString());
- plantComboBox->setObjectName(QString::fromUtf8("plantComboBox"));
- QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ plantComboBox->setObjectName("plantComboBox");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Preferred, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(plantComboBox->sizePolicy().hasHeightForWidth());
@@ -92,26 +92,26 @@ public:
gridLayout->addWidget(plantComboBox, 0, 1, 1, 3);
- spacerItem = new QSpacerItem(67, 16, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ spacerItem = new QSpacerItem(67, 16, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem, 1, 0, 1, 1);
label_2 = new QLabel(WateringConfigDialog);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout->addWidget(label_2, 2, 0, 1, 1);
temperatureCheckBox = new QCheckBox(WateringConfigDialog);
- temperatureCheckBox->setObjectName(QString::fromUtf8("temperatureCheckBox"));
+ temperatureCheckBox->setObjectName("temperatureCheckBox");
gridLayout->addWidget(temperatureCheckBox, 3, 1, 1, 3);
- spacerItem1 = new QSpacerItem(16, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);
+ spacerItem1 = new QSpacerItem(16, 20, QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem1, 4, 1, 1, 1);
temperatureSpinBox = new QSpinBox(WateringConfigDialog);
- temperatureSpinBox->setObjectName(QString::fromUtf8("temperatureSpinBox"));
+ temperatureSpinBox->setObjectName("temperatureSpinBox");
temperatureSpinBox->setEnabled(false);
temperatureSpinBox->setMinimum(10);
temperatureSpinBox->setMaximum(60);
@@ -119,51 +119,51 @@ public:
gridLayout->addWidget(temperatureSpinBox, 4, 2, 1, 1);
- spacerItem2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem2 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem2, 4, 3, 1, 1);
rainCheckBox = new QCheckBox(WateringConfigDialog);
- rainCheckBox->setObjectName(QString::fromUtf8("rainCheckBox"));
+ rainCheckBox->setObjectName("rainCheckBox");
gridLayout->addWidget(rainCheckBox, 5, 1, 1, 3);
- spacerItem3 = new QSpacerItem(16, 20, QSizePolicy::Fixed, QSizePolicy::Minimum);
+ spacerItem3 = new QSpacerItem(16, 20, QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem3, 6, 1, 1, 1);
rainSpinBox = new QSpinBox(WateringConfigDialog);
- rainSpinBox->setObjectName(QString::fromUtf8("rainSpinBox"));
+ rainSpinBox->setObjectName("rainSpinBox");
rainSpinBox->setEnabled(false);
rainSpinBox->setMinimum(1);
gridLayout->addWidget(rainSpinBox, 6, 2, 1, 1);
- spacerItem4 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem4 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem4, 6, 3, 1, 1);
- spacerItem5 = new QSpacerItem(20, 20, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ spacerItem5 = new QSpacerItem(20, 20, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem5, 7, 2, 1, 1);
label = new QLabel(WateringConfigDialog);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 8, 0, 1, 1);
startTimeEdit = new QTimeEdit(WateringConfigDialog);
- startTimeEdit->setObjectName(QString::fromUtf8("startTimeEdit"));
+ startTimeEdit->setObjectName("startTimeEdit");
gridLayout->addWidget(startTimeEdit, 8, 1, 1, 3);
label_4 = new QLabel(WateringConfigDialog);
- label_4->setObjectName(QString::fromUtf8("label_4"));
+ label_4->setObjectName("label_4");
gridLayout->addWidget(label_4, 9, 0, 1, 1);
amountSpinBox = new QSpinBox(WateringConfigDialog);
- amountSpinBox->setObjectName(QString::fromUtf8("amountSpinBox"));
+ amountSpinBox->setObjectName("amountSpinBox");
amountSpinBox->setMinimum(100);
amountSpinBox->setMaximum(10000);
amountSpinBox->setSingleStep(100);
@@ -172,7 +172,7 @@ public:
gridLayout->addWidget(amountSpinBox, 9, 1, 1, 3);
label_5 = new QLabel(WateringConfigDialog);
- label_5->setObjectName(QString::fromUtf8("label_5"));
+ label_5->setObjectName("label_5");
gridLayout->addWidget(label_5, 10, 0, 1, 1);
@@ -181,25 +181,25 @@ public:
sourceComboBox->addItem(QString());
sourceComboBox->addItem(QString());
sourceComboBox->addItem(QString());
- sourceComboBox->setObjectName(QString::fromUtf8("sourceComboBox"));
+ sourceComboBox->setObjectName("sourceComboBox");
gridLayout->addWidget(sourceComboBox, 10, 1, 1, 3);
label_6 = new QLabel(WateringConfigDialog);
- label_6->setObjectName(QString::fromUtf8("label_6"));
+ label_6->setObjectName("label_6");
gridLayout->addWidget(label_6, 11, 0, 1, 1);
filterCheckBox = new QCheckBox(WateringConfigDialog);
- filterCheckBox->setObjectName(QString::fromUtf8("filterCheckBox"));
+ filterCheckBox->setObjectName("filterCheckBox");
gridLayout->addWidget(filterCheckBox, 11, 1, 1, 2);
- spacerItem6 = new QSpacerItem(20, 10, QSizePolicy::Minimum, QSizePolicy::Fixed);
+ spacerItem6 = new QSpacerItem(20, 10, QSizePolicy::Policy::Minimum, QSizePolicy::Policy::Fixed);
gridLayout->addItem(spacerItem6, 12, 0, 1, 1);
- spacerItem7 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ spacerItem7 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout->addItem(spacerItem7, 4, 4, 1, 1);
@@ -207,18 +207,18 @@ public:
vboxLayout->addLayout(gridLayout);
gridLayout1 = new QGridLayout();
- gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
- spacerItem8 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ gridLayout1->setObjectName("gridLayout1");
+ spacerItem8 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout1->addItem(spacerItem8, 0, 1, 1, 1);
helpBrowser = new HelpBrowser(WateringConfigDialog);
- helpBrowser->setObjectName(QString::fromUtf8("helpBrowser"));
+ helpBrowser->setObjectName("helpBrowser");
gridLayout1->addWidget(helpBrowser, 1, 0, 1, 2);
helpLabel = new QLabel(WateringConfigDialog);
- helpLabel->setObjectName(QString::fromUtf8("helpLabel"));
+ helpLabel->setObjectName("helpLabel");
gridLayout1->addWidget(helpLabel, 0, 0, 1, 1);
@@ -226,14 +226,14 @@ public:
vboxLayout->addLayout(gridLayout1);
line = new QFrame(WateringConfigDialog);
- line->setObjectName(QString::fromUtf8("line"));
- line->setFrameShape(QFrame::HLine);
- line->setFrameShadow(QFrame::Sunken);
+ line->setObjectName("line");
+ line->setFrameShape(QFrame::Shape::HLine);
+ line->setFrameShadow(QFrame::Shadow::Sunken);
vboxLayout->addWidget(line);
buttonBox = new QDialogButtonBox(WateringConfigDialog);
- buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
+ buttonBox->setObjectName("buttonBox");
buttonBox->setOrientation(Qt::Horizontal);
buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);
diff --git a/tests/auto/tools/uic/baseline/window.ui.h b/tests/auto/tools/uic/baseline/window.ui.h
index 2919a408b3..1faa787e49 100644
--- a/tests/auto/tools/uic/baseline/window.ui.h
+++ b/tests/auto/tools/uic/baseline/window.ui.h
@@ -43,18 +43,18 @@ public:
void setupUi(QWidget *Window)
{
if (Window->objectName().isEmpty())
- Window->setObjectName(QString::fromUtf8("Window"));
+ Window->setObjectName("Window");
Window->resize(339, 353);
gridLayout_2 = new QGridLayout(Window);
- gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
+ gridLayout_2->setObjectName("gridLayout_2");
gridLayout_2->setSizeConstraint(QLayout::SetFixedSize);
- horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer_2 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout_2->addItem(horizontalSpacer_2, 0, 0, 1, 1);
displayWidget = new DisplayWidget(Window);
- displayWidget->setObjectName(QString::fromUtf8("displayWidget"));
- QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+ displayWidget->setObjectName("displayWidget");
+ QSizePolicy sizePolicy(QSizePolicy::Policy::Fixed, QSizePolicy::Policy::Fixed);
sizePolicy.setHorizontalStretch(200);
sizePolicy.setVerticalStretch(200);
sizePolicy.setHeightForWidth(displayWidget->sizePolicy().hasHeightForWidth());
@@ -64,36 +64,36 @@ public:
gridLayout_2->addWidget(displayWidget, 0, 1, 1, 1);
- horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalSpacer_3 = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
gridLayout_2->addItem(horizontalSpacer_3, 0, 2, 1, 1);
gridLayout = new QGridLayout();
- gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+ gridLayout->setObjectName("gridLayout");
label = new QLabel(Window);
- label->setObjectName(QString::fromUtf8("label"));
+ label->setObjectName("label");
gridLayout->addWidget(label, 0, 0, 1, 1);
shapeComboBox = new QComboBox(Window);
shapeComboBox->addItem(QString());
shapeComboBox->addItem(QString());
- shapeComboBox->setObjectName(QString::fromUtf8("shapeComboBox"));
+ shapeComboBox->setObjectName("shapeComboBox");
gridLayout->addWidget(shapeComboBox, 0, 1, 1, 1);
label_2 = new QLabel(Window);
- label_2->setObjectName(QString::fromUtf8("label_2"));
+ label_2->setObjectName("label_2");
gridLayout->addWidget(label_2, 1, 0, 1, 1);
colorButton = new QToolButton(Window);
- colorButton->setObjectName(QString::fromUtf8("colorButton"));
+ colorButton->setObjectName("colorButton");
gridLayout->addWidget(colorButton, 1, 1, 1, 1);
label_3 = new QLabel(Window);
- label_3->setObjectName(QString::fromUtf8("label_3"));
+ label_3->setObjectName("label_3");
gridLayout->addWidget(label_3, 2, 0, 1, 1);
@@ -101,7 +101,7 @@ public:
shapeComboBox_2->addItem(QString());
shapeComboBox_2->addItem(QString());
shapeComboBox_2->addItem(QString());
- shapeComboBox_2->setObjectName(QString::fromUtf8("shapeComboBox_2"));
+ shapeComboBox_2->setObjectName("shapeComboBox_2");
gridLayout->addWidget(shapeComboBox_2, 2, 1, 1, 1);
@@ -109,13 +109,13 @@ public:
gridLayout_2->addLayout(gridLayout, 1, 0, 1, 3);
horizontalLayout = new QHBoxLayout();
- horizontalLayout->setObjectName(QString::fromUtf8("horizontalLayout"));
- horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+ horizontalLayout->setObjectName("horizontalLayout");
+ horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Policy::Expanding, QSizePolicy::Policy::Minimum);
horizontalLayout->addItem(horizontalSpacer);
toolButton_2 = new QToolButton(Window);
- toolButton_2->setObjectName(QString::fromUtf8("toolButton_2"));
+ toolButton_2->setObjectName("toolButton_2");
horizontalLayout->addWidget(toolButton_2);
diff --git a/tests/auto/tools/uic/tst_uic.cpp b/tests/auto/tools/uic/tst_uic.cpp
index fb4441a02a..a15b8928a1 100644
--- a/tests/auto/tools/uic/tst_uic.cpp
+++ b/tests/auto/tools/uic/tst_uic.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 <QtCore/QDir>
diff --git a/tests/auto/tools/windeployqt/CMakeLists.txt b/tests/auto/tools/windeployqt/CMakeLists.txt
index 5eae1ca164..9ac0051053 100644
--- a/tests/auto/tools/windeployqt/CMakeLists.txt
+++ b/tests/auto/tools/windeployqt/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from windeployqt.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_windeployqt LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(testapp)
add_subdirectory(test)
diff --git a/tests/auto/tools/windeployqt/test/CMakeLists.txt b/tests/auto/tools/windeployqt/test/CMakeLists.txt
index d412249a7f..1ba62d5850 100644
--- a/tests/auto/tools/windeployqt/test/CMakeLists.txt
+++ b/tests/auto/tools/windeployqt/test/CMakeLists.txt
@@ -1,11 +1,12 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_windeployqt Test:
#####################################################################
qt_internal_add_test(tst_windeployqt
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../" # special case
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/../"
SOURCES
../tst_windeployqt.cpp
)
diff --git a/tests/auto/tools/windeployqt/testapp/CMakeLists.txt b/tests/auto/tools/windeployqt/testapp/CMakeLists.txt
index 83851dae65..ce94cd6464 100644
--- a/tests/auto/tools/windeployqt/testapp/CMakeLists.txt
+++ b/tests/auto/tools/windeployqt/testapp/CMakeLists.txt
@@ -1,21 +1,20 @@
-# Generated from testapp.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## testapp Binary:
#####################################################################
-qt_internal_add_executable(windeploy_testapp # special case
+qt_internal_add_executable(windeploy_testapp
GUI
OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
-# special case begin
set_target_properties(windeploy_testapp
PROPERTIES
OUTPUT_NAME testapp
)
-# special case end
diff --git a/tests/auto/tools/windeployqt/testapp/main.cpp b/tests/auto/tools/windeployqt/testapp/main.cpp
index 4dc03cdad4..775fe19827 100644
--- a/tests/auto/tools/windeployqt/testapp/main.cpp
+++ b/tests/auto/tools/windeployqt/testapp/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 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 <QGuiApplication>
#include <QRasterWindow>
diff --git a/tests/auto/tools/windeployqt/tst_windeployqt.cpp b/tests/auto/tools/windeployqt/tst_windeployqt.cpp
index 38403c90fc..0daf287807 100644
--- a/tests/auto/tools/windeployqt/tst_windeployqt.cpp
+++ b/tests/auto/tools/windeployqt/tst_windeployqt.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 <QtCore/QDebug>
#include <QtCore/QDir>
diff --git a/tests/auto/wasm/CMakeLists.txt b/tests/auto/wasm/CMakeLists.txt
new file mode 100644
index 0000000000..35b4d45e53
--- /dev/null
+++ b/tests/auto/wasm/CMakeLists.txt
@@ -0,0 +1,9 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(fetchapi)
+add_subdirectory(localfileapi)
+add_subdirectory(qwasmkeytranslator)
+add_subdirectory(qwasmwindowstack)
+add_subdirectory(qwasmwindowtreenode)
+add_subdirectory(selenium)
diff --git a/tests/auto/wasm/fetchapi/CMakeLists.txt b/tests/auto/wasm/fetchapi/CMakeLists.txt
new file mode 100644
index 0000000000..335eefc1da
--- /dev/null
+++ b/tests/auto/wasm/fetchapi/CMakeLists.txt
@@ -0,0 +1,22 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_localfileapi Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_fetchapi LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_fetchapi
+ SOURCES
+ tst_fetchapi.cpp
+ DEFINES
+ QT_NO_FOREACH
+ LIBRARIES
+ Qt::Core
+ Qt::Network
+)
diff --git a/tests/auto/wasm/fetchapi/tst_fetchapi.cpp b/tests/auto/wasm/fetchapi/tst_fetchapi.cpp
new file mode 100644
index 0000000000..3dcd8dd916
--- /dev/null
+++ b/tests/auto/wasm/fetchapi/tst_fetchapi.cpp
@@ -0,0 +1,86 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QEventLoop>
+#include <QNetworkReply>
+#include <QNetworkRequest>
+#include <QScopedPointer>
+
+#include <memory>
+
+namespace {
+
+const QUrl URL = QUrl("http://localhost:6931/test_batch.html");
+
+class BackgroundThread : public QThread
+{
+ Q_OBJECT
+ void run() override
+ {
+ manager = std::make_unique<QNetworkAccessManager>();
+ eventLoop = std::make_unique<QEventLoop>();
+ reply = manager->get(request);
+ QObject::connect(reply, &QNetworkReply::finished, this, &BackgroundThread::requestFinished);
+ eventLoop->exec();
+ }
+
+ void requestFinished()
+ {
+ eventLoop->quit();
+ }
+
+public:
+ QNetworkReply *reply{ nullptr };
+
+private:
+ std::unique_ptr<QNetworkAccessManager> manager;
+ std::unique_ptr<QEventLoop> eventLoop;
+ QNetworkRequest request{ URL };
+};
+
+} // namespace
+
+class tst_FetchApi : public QObject
+{
+ Q_OBJECT
+public:
+ tst_FetchApi() = default;
+
+private Q_SLOTS:
+ void sendRequestOnMainThread();
+ void sendRequestOnBackgroundThread();
+};
+
+void tst_FetchApi::sendRequestOnMainThread()
+{
+ QNetworkAccessManager manager;
+ QNetworkRequest request(URL);
+ QNetworkReply *reply = manager.get(request);
+
+ QEventLoop loop;
+ QObject::connect(reply, &QNetworkReply::finished, &loop, &QEventLoop::quit);
+ loop.exec();
+
+ QVERIFY(reply != nullptr);
+ QVERIFY(reply->error() == QNetworkReply::NoError);
+}
+
+void tst_FetchApi::sendRequestOnBackgroundThread()
+{
+ QSKIP("Skip this test until we fix fetching from background threads.");
+ QEventLoop mainEventLoop;
+ BackgroundThread *backgroundThread = new BackgroundThread();
+ connect(backgroundThread, &BackgroundThread::finished, &mainEventLoop, &QEventLoop::quit);
+ connect(backgroundThread, &BackgroundThread::finished, backgroundThread, &QObject::deleteLater);
+ backgroundThread->start();
+ mainEventLoop.exec();
+
+ QVERIFY(backgroundThread != nullptr);
+ QVERIFY(backgroundThread->reply != nullptr);
+ QVERIFY(backgroundThread->reply->error() == QNetworkReply::NoError);
+}
+
+QTEST_MAIN(tst_FetchApi);
+#include "tst_fetchapi.moc"
diff --git a/tests/auto/wasm/localfileapi/CMakeLists.txt b/tests/auto/wasm/localfileapi/CMakeLists.txt
new file mode 100644
index 0000000000..efb29ad48c
--- /dev/null
+++ b/tests/auto/wasm/localfileapi/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_localfileapi Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_localfileapi LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_localfileapi
+ SOURCES
+ tst_localfileapi.cpp
+ DEFINES
+ QT_NO_FOREACH
+ LIBRARIES
+ Qt::GuiPrivate
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
diff --git a/tests/auto/wasm/localfileapi/tst_localfileapi.cpp b/tests/auto/wasm/localfileapi/tst_localfileapi.cpp
new file mode 100644
index 0000000000..47e8c06e1e
--- /dev/null
+++ b/tests/auto/wasm/localfileapi/tst_localfileapi.cpp
@@ -0,0 +1,260 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtGui/private/qlocalfileapi_p.h>
+#include <QTest>
+#include <emscripten/val.h>
+
+class tst_LocalFileApi : public QObject
+{
+ Q_OBJECT
+
+private:
+ emscripten::val makeAccept(std::vector<emscripten::val> types)
+ {
+ auto accept = emscripten::val::object();
+ accept.set("application/octet-stream",
+ emscripten::val::array(std::move(types)));
+ return accept;
+ }
+
+ emscripten::val makeType(QString description, std::vector<emscripten::val> acceptExtensions)
+ {
+ using namespace emscripten;
+
+ auto type = val::object();
+ type.set("description", description.toStdString());
+
+ auto accept = val::object();
+ accept.set("application/octet-stream",
+ val::array(std::move(acceptExtensions)));
+ type.set("accept", makeAccept(std::move(acceptExtensions)));
+
+ return type;
+ }
+
+ emscripten::val makeOpenFileOptions(bool acceptMultiple, std::vector<emscripten::val> types) {
+ using namespace emscripten;
+
+ auto webFilter = val::object();
+ webFilter.set("types", val::array(std::move(types)));
+ if (!types.empty())
+ webFilter.set("excludeAcceptAllOption", val(true));
+ webFilter.set("multiple", val(acceptMultiple));
+
+ return webFilter;
+ }
+
+ emscripten::val makeSaveFileOptions(QString suggestedName, std::vector<emscripten::val> types) {
+ using namespace emscripten;
+
+ auto webFilter = val::object();
+ webFilter.set("suggestedName", val(suggestedName.toStdString()));
+ webFilter.set("types", val::array(std::move(types)));
+
+ return webFilter;
+ }
+
+private Q_SLOTS:
+ void fileExtensionFilterTransformation_data();
+ void fileExtensionFilterTransformation();
+ void acceptTransformation_data();
+ void acceptTransformation();
+ void typeTransformation_data();
+ void typeTransformation();
+ void openFileOptions_data();
+ void openFileOptions();
+ void saveFileOptions_data();
+ void saveFileOptions();
+ void fileInputAccept_data();
+ void fileInputAccept();
+};
+
+bool valDeepEquals(emscripten::val lhs, emscripten::val rhs)
+{
+ auto json = emscripten::val::global("JSON");
+ auto lhsAsJsonString = json.call<emscripten::val>("stringify", lhs);
+ auto rhsAsJsonString = json.call<emscripten::val>("stringify", rhs);
+
+ return lhsAsJsonString.equals(rhsAsJsonString);
+}
+
+void tst_LocalFileApi::fileExtensionFilterTransformation_data()
+{
+ QTest::addColumn<QString>("qtFileFilter");
+ QTest::addColumn<std::optional<QString>>("expectedWebExtensionFilter");
+
+ QTest::newRow("PNG extension with an asterisk")
+ << QString("*.png") << std::make_optional<QString>(".png");
+ QTest::newRow("Long extension with an asterisk")
+ << QString("*.someotherfile") << std::make_optional<QString>(".someotherfile");
+ QTest::newRow(".dat with no asterisk")
+ << QString(".dat") << std::make_optional<QString>(".dat");
+ QTest::newRow("Multiple asterisks") << QString("*ot*.abc") << std::optional<QString>();
+ QTest::newRow("Filename") << QString("abcd.abc") << std::optional<QString>();
+ QTest::newRow("match all") << QString("*.*") << std::optional<QString>();
+}
+
+void tst_LocalFileApi::fileExtensionFilterTransformation()
+{
+ QFETCH(QString, qtFileFilter);
+ QFETCH(std::optional<QString>, expectedWebExtensionFilter);
+
+ auto result = LocalFileApi::Type::Accept::MimeType::Extension::fromQt(qtFileFilter);
+ if (expectedWebExtensionFilter) {
+ QCOMPARE_EQ(expectedWebExtensionFilter, result->value());
+ } else {
+ QVERIFY(!result.has_value());
+ }
+}
+
+void tst_LocalFileApi::acceptTransformation_data()
+{
+ using namespace emscripten;
+
+ QTest::addColumn<QString>("qtFilterList");
+ QTest::addColumn<QStringList>("expectedExtensionList");
+
+ QTest::newRow("Multiple types")
+ << QString("*.png *.other *.txt") << QStringList{ ".png", ".other", ".txt" };
+
+ QTest::newRow("Single type") << QString("*.png") << QStringList{ ".png" };
+
+ QTest::newRow("No filter when accepts all") << QString("*.*") << QStringList();
+
+ QTest::newRow("No filter when one filter accepts all") << QString("*.* *.jpg") << QStringList();
+
+ QTest::newRow("Weird spaces") << QString(" *.jpg *.png *.icon ")
+ << QStringList{ ".jpg", ".png", ".icon" };
+}
+
+void tst_LocalFileApi::acceptTransformation()
+{
+ QFETCH(QString, qtFilterList);
+ QFETCH(QStringList, expectedExtensionList);
+
+ auto result = LocalFileApi::Type::Accept::fromQt(qtFilterList);
+ if (expectedExtensionList.isEmpty()) {
+ QVERIFY(!result.has_value());
+ } else {
+ QStringList transformed;
+ std::transform(result->mimeType().extensions().begin(),
+ result->mimeType().extensions().end(), std::back_inserter(transformed),
+ [](const LocalFileApi::Type::Accept::MimeType::Extension &extension) {
+ return extension.value().toString();
+ });
+ QCOMPARE_EQ(expectedExtensionList, transformed);
+ }
+}
+
+void tst_LocalFileApi::typeTransformation_data()
+{
+ using namespace emscripten;
+
+ QTest::addColumn<QString>("qtFilterList");
+ QTest::addColumn<QString>("expectedDescription");
+ QTest::addColumn<QStringList>("expectedExtensions");
+
+ QTest::newRow("With description")
+ << QString("Text files (*.txt)") << QString("Text files") << QStringList{ ".txt" };
+
+ QTest::newRow("No description") << QString("*.jpg") << QString("") << QStringList{ ".jpg" };
+}
+
+void tst_LocalFileApi::typeTransformation()
+{
+ QFETCH(QString, qtFilterList);
+ QFETCH(QString, expectedDescription);
+ QFETCH(QStringList, expectedExtensions);
+
+ auto result = LocalFileApi::Type::fromQt(qtFilterList);
+ QCOMPARE_EQ(result->description(), expectedDescription);
+
+ QStringList transformed;
+ std::transform(result->accept()->mimeType().extensions().begin(),
+ result->accept()->mimeType().extensions().end(), std::back_inserter(transformed),
+ [](const LocalFileApi::Type::Accept::MimeType::Extension &extension) {
+ return extension.value().toString();
+ });
+ QCOMPARE_EQ(expectedExtensions, transformed);
+}
+
+void tst_LocalFileApi::openFileOptions_data()
+{
+ using namespace emscripten;
+
+ QTest::addColumn<QStringList>("qtFilterList");
+ QTest::addColumn<bool>("multiple");
+ QTest::addColumn<emscripten::val>("expectedWebType");
+
+ QTest::newRow("Multiple files") << QStringList({"Text files (*.txt)", "Images (*.jpg *.png)", "*.bat"})
+ << true
+ << makeOpenFileOptions(true, { makeType("Text files", { val(".txt")}), makeType("Images", { val(".jpg"), val(".png")}), makeType("", { val(".bat")})});
+ QTest::newRow("Single file") << QStringList({"Text files (*.txt)", "Images (*.jpg *.png)", "*.bat"})
+ << false
+ << makeOpenFileOptions(false, { makeType("Text files", { val(".txt")}), makeType("Images", { val(".jpg"), val(".png")}), makeType("", { val(".bat")})});
+}
+
+void tst_LocalFileApi::openFileOptions()
+{
+ QFETCH(QStringList, qtFilterList);
+ QFETCH(bool, multiple);
+ QFETCH(emscripten::val, expectedWebType);
+
+ auto result = LocalFileApi::makeOpenFileOptions(qtFilterList, multiple);
+ QVERIFY(valDeepEquals(result, expectedWebType));
+}
+
+void tst_LocalFileApi::saveFileOptions_data()
+{
+ using namespace emscripten;
+
+ QTest::addColumn<QStringList>("qtFilterList");
+ QTest::addColumn<QString>("suggestedName");
+ QTest::addColumn<emscripten::val>("expectedWebType");
+
+ QTest::newRow("Multiple files") << QStringList({"Text files (*.txt)", "Images (*.jpg *.png)", "*.bat"})
+ << "someName1"
+ << makeSaveFileOptions("someName1", { makeType("Text files", { val(".txt")}), makeType("Images", { val(".jpg"), val(".png")}), makeType("", { val(".bat")})});
+ QTest::newRow("Single file") << QStringList({"Text files (*.txt)", "Images (*.jpg *.png)", "*.bat"})
+ << "some name 2"
+ << makeSaveFileOptions("some name 2", { makeType("Text files", { val(".txt")}), makeType("Images", { val(".jpg"), val(".png")}), makeType("", { val(".bat")})});
+}
+
+void tst_LocalFileApi::saveFileOptions()
+{
+ QFETCH(QStringList, qtFilterList);
+ QFETCH(QString, suggestedName);
+ QFETCH(emscripten::val, expectedWebType);
+
+ auto result = LocalFileApi::makeSaveFileOptions(qtFilterList, suggestedName.toStdString());
+ QVERIFY(valDeepEquals(result, expectedWebType));
+}
+
+void tst_LocalFileApi::fileInputAccept_data()
+{
+ using namespace emscripten;
+
+ QTest::addColumn<QStringList>("qtFilterList");
+ QTest::addColumn<QString>("expectedAccept");
+
+ QTest::newRow("Multiple files")
+ << QStringList{ "Text files (*.txt)", "Images (*.jpg *.png)", "*.bat" }
+ << ".txt,.jpg,.png,.bat";
+ QTest::newRow("Spaces") << QStringList{ " Documents (*.doc)", "Everything (*.*)",
+ " Stuff ( *.stf *.tng)", " *.exe" }
+ << ".doc,.stf,.tng,.exe";
+}
+
+void tst_LocalFileApi::fileInputAccept()
+{
+ QFETCH(QStringList, qtFilterList);
+ QFETCH(QString, expectedAccept);
+
+ auto result = LocalFileApi::makeFileInputAccept(qtFilterList);
+ QCOMPARE_EQ(expectedAccept, QString::fromStdString(result));
+}
+
+QTEST_APPLESS_MAIN(tst_LocalFileApi)
+#include "tst_localfileapi.moc"
diff --git a/tests/auto/wasm/qwasmkeytranslator/CMakeLists.txt b/tests/auto/wasm/qwasmkeytranslator/CMakeLists.txt
new file mode 100644
index 0000000000..b999dbe028
--- /dev/null
+++ b/tests/auto/wasm/qwasmkeytranslator/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qwasmkeytranslator Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwasmkeytranslator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qwasmkeytranslator
+ SOURCES
+ tst_qwasmkeytranslator.cpp
+ DEFINES
+ QT_NO_FOREACH
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ PUBLIC_LIBRARIES
+ Qt::Core
+)
diff --git a/tests/auto/wasm/qwasmkeytranslator/tst_qwasmkeytranslator.cpp b/tests/auto/wasm/qwasmkeytranslator/tst_qwasmkeytranslator.cpp
new file mode 100644
index 0000000000..de06c298df
--- /dev/null
+++ b/tests/auto/wasm/qwasmkeytranslator/tst_qwasmkeytranslator.cpp
@@ -0,0 +1,425 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "../../../../src/plugins/platforms/wasm/qwasmkeytranslator.h"
+
+#include "../../../../src/plugins/platforms/wasm/qwasmevent.h"
+
+#include <QTest>
+
+#include <emscripten/val.h>
+
+namespace {
+emscripten::val makeDeadKeyJsEvent(QString code, Qt::KeyboardModifiers modifiers)
+{
+ auto jsEvent = emscripten::val::object();
+ jsEvent.set("code", emscripten::val(code.toStdString()));
+ jsEvent.set("key", emscripten::val("Dead"));
+ jsEvent.set("shiftKey", emscripten::val(modifiers.testFlag(Qt::ShiftModifier)));
+ jsEvent.set("ctrlKey", emscripten::val(false));
+ jsEvent.set("altKey", emscripten::val(false));
+ jsEvent.set("metaKey", emscripten::val(false));
+
+ return jsEvent;
+}
+
+emscripten::val makeKeyJsEvent(QString code, QString key, Qt::KeyboardModifiers modifiers)
+{
+ auto jsEvent = emscripten::val::object();
+ jsEvent.set("code", emscripten::val(code.toStdString()));
+ jsEvent.set("key", emscripten::val(key.toStdString()));
+ jsEvent.set("shiftKey", emscripten::val(modifiers.testFlag(Qt::ShiftModifier)));
+ jsEvent.set("ctrlKey", emscripten::val(modifiers.testFlag(Qt::ControlModifier)));
+ jsEvent.set("altKey", emscripten::val(modifiers.testFlag(Qt::AltModifier)));
+ jsEvent.set("metaKey", emscripten::val(modifiers.testFlag(Qt::MetaModifier)));
+
+ return jsEvent;
+}
+} // unnamed namespace
+
+class tst_QWasmKeyTranslator : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QWasmKeyTranslator() = default;
+
+private slots:
+ void init();
+
+ void modifyByDeadKey_data();
+ void modifyByDeadKey();
+ void deadKeyModifiesOnlyOneKeyPressAndUp();
+ void deadKeyIgnoresKeyUpPrecedingKeyDown();
+ void onlyKeysProducingTextAreModifiedByDeadKeys();
+};
+
+void tst_QWasmKeyTranslator::init() { }
+
+void tst_QWasmKeyTranslator::modifyByDeadKey_data()
+{
+ QTest::addColumn<QString>("deadKeyCode");
+ QTest::addColumn<Qt::KeyboardModifiers>("deadKeyModifiers");
+ QTest::addColumn<QString>("targetKeyCode");
+ QTest::addColumn<QString>("targetKey");
+ QTest::addColumn<Qt::Key>("targetQtKey");
+ QTest::addColumn<Qt::KeyboardModifiers>("modifiers");
+ QTest::addColumn<QString>("expectedModifiedKey");
+
+ QTest::newRow("à (Backquote)") << "Backquote" << Qt::KeyboardModifiers() << "KeyA"
+ << "a" << Qt::Key_Agrave << Qt::KeyboardModifiers() << "à";
+ QTest::newRow("À (Backquote)")
+ << "Backquote" << Qt::KeyboardModifiers() << "KeyA"
+ << "A" << Qt::Key_Agrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "À";
+ QTest::newRow("à (IntlBackslash)") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyA"
+ << "a" << Qt::Key_Agrave << Qt::KeyboardModifiers() << "à";
+ QTest::newRow("À (IntlBackslash)")
+ << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyA"
+ << "A" << Qt::Key_Agrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "À";
+ QTest::newRow("á (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyA"
+ << "a" << Qt::Key_Aacute << Qt::KeyboardModifiers() << "á";
+ QTest::newRow("Ã (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyA"
+ << "A" << Qt::Key_Aacute << Qt::KeyboardModifiers(Qt::ShiftModifier)
+ << "Ã";
+ QTest::newRow("á") << "KeyE" << Qt::KeyboardModifiers() << "KeyA"
+ << "a" << Qt::Key_Aacute << Qt::KeyboardModifiers() << "á";
+ QTest::newRow("Ã") << "KeyE" << Qt::KeyboardModifiers() << "KeyA"
+ << "A" << Qt::Key_Aacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ã";
+ QTest::newRow("ä (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyA"
+ << "a" << Qt::Key_Adiaeresis << Qt::KeyboardModifiers() << "ä";
+ QTest::newRow("Ä (Mac Umlaut)")
+ << "KeyU" << Qt::KeyboardModifiers() << "KeyA"
+ << "A" << Qt::Key_Adiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ä";
+ QTest::newRow("ä (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyA"
+ << "a" << Qt::Key_Adiaeresis << Qt::KeyboardModifiers() << "ä";
+ QTest::newRow("Ä (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyA"
+ << "A" << Qt::Key_Adiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ä";
+ QTest::newRow("â") << "KeyI" << Qt::KeyboardModifiers() << "KeyA"
+ << "a" << Qt::Key_Acircumflex << Qt::KeyboardModifiers() << "â";
+ QTest::newRow("Â") << "KeyI" << Qt::KeyboardModifiers() << "KeyA"
+ << "A" << Qt::Key_Acircumflex << Qt::KeyboardModifiers(Qt::ShiftModifier)
+ << "Â";
+ QTest::newRow("â (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyA"
+ << "a" << Qt::Key_Acircumflex << Qt::KeyboardModifiers() << "â";
+ QTest::newRow("Â (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyA"
+ << "A" << Qt::Key_Acircumflex
+ << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Â";
+ QTest::newRow("ã") << "KeyN" << Qt::KeyboardModifiers() << "KeyA"
+ << "a" << Qt::Key_Atilde << Qt::KeyboardModifiers() << "ã";
+ QTest::newRow("Ã") << "KeyN" << Qt::KeyboardModifiers() << "KeyA"
+ << "A" << Qt::Key_Atilde << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ã";
+
+ QTest::newRow("è (Backquote)") << "Backquote" << Qt::KeyboardModifiers() << "KeyE"
+ << "e" << Qt::Key_Egrave << Qt::KeyboardModifiers() << "è";
+ QTest::newRow("È (Backquote)")
+ << "Backquote" << Qt::KeyboardModifiers() << "KeyE"
+ << "E" << Qt::Key_Egrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "È";
+ QTest::newRow("è") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyE"
+ << "e" << Qt::Key_Egrave << Qt::KeyboardModifiers() << "è";
+ QTest::newRow("È") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyE"
+ << "E" << Qt::Key_Egrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "È";
+ QTest::newRow("é") << "KeyE" << Qt::KeyboardModifiers() << "KeyE"
+ << "e" << Qt::Key_Eacute << Qt::KeyboardModifiers() << "é";
+ QTest::newRow("É") << "KeyE" << Qt::KeyboardModifiers() << "KeyE"
+ << "E" << Qt::Key_Eacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "É";
+ QTest::newRow("é (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyE"
+ << "e" << Qt::Key_Eacute << Qt::KeyboardModifiers() << "é";
+ QTest::newRow("É (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyE"
+ << "E" << Qt::Key_Eacute << Qt::KeyboardModifiers(Qt::ShiftModifier)
+ << "É";
+ QTest::newRow("ë (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyE"
+ << "e" << Qt::Key_Ediaeresis << Qt::KeyboardModifiers() << "ë";
+ QTest::newRow("Ë (Mac Umlaut)")
+ << "KeyU" << Qt::KeyboardModifiers() << "KeyE"
+ << "E" << Qt::Key_Ediaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ë";
+ QTest::newRow("ë (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyE"
+ << "e" << Qt::Key_Ediaeresis << Qt::KeyboardModifiers() << "ë";
+ QTest::newRow("Ë (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyE"
+ << "E" << Qt::Key_Ediaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ë";
+ QTest::newRow("ê") << "KeyI" << Qt::KeyboardModifiers() << "KeyE"
+ << "e" << Qt::Key_Ecircumflex << Qt::KeyboardModifiers() << "ê";
+ QTest::newRow("Ê") << "KeyI" << Qt::KeyboardModifiers() << "KeyE"
+ << "E" << Qt::Key_Ecircumflex << Qt::KeyboardModifiers(Qt::ShiftModifier)
+ << "Ê";
+ QTest::newRow("ê (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyE"
+ << "e" << Qt::Key_Ecircumflex << Qt::KeyboardModifiers() << "ê";
+ QTest::newRow("Ê (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyE"
+ << "E" << Qt::Key_Ecircumflex
+ << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ê";
+
+ QTest::newRow("ì (Backquote)") << "Backquote" << Qt::KeyboardModifiers() << "KeyI"
+ << "i" << Qt::Key_Igrave << Qt::KeyboardModifiers() << "ì";
+ QTest::newRow("Ì (Backquote)")
+ << "Backquote" << Qt::KeyboardModifiers() << "KeyI"
+ << "I" << Qt::Key_Igrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ì";
+ QTest::newRow("ì") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyI"
+ << "i" << Qt::Key_Igrave << Qt::KeyboardModifiers() << "ì";
+ QTest::newRow("Ì") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyI"
+ << "I" << Qt::Key_Igrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ì";
+ QTest::newRow("í") << "KeyE" << Qt::KeyboardModifiers() << "KeyI"
+ << "i" << Qt::Key_Iacute << Qt::KeyboardModifiers() << "í";
+ QTest::newRow("Ã") << "KeyE" << Qt::KeyboardModifiers() << "KeyI"
+ << "I" << Qt::Key_Iacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ã";
+ QTest::newRow("í (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyI"
+ << "i" << Qt::Key_Iacute << Qt::KeyboardModifiers() << "í";
+ QTest::newRow("Ã (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyI"
+ << "I" << Qt::Key_Iacute << Qt::KeyboardModifiers(Qt::ShiftModifier)
+ << "Ã";
+ QTest::newRow("ï (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyI"
+ << "i" << Qt::Key_Idiaeresis << Qt::KeyboardModifiers() << "ï";
+ QTest::newRow("Ã (Mac Umlaut)")
+ << "KeyU" << Qt::KeyboardModifiers() << "KeyI"
+ << "I" << Qt::Key_Idiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ã";
+ QTest::newRow("ï (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyI"
+ << "i" << Qt::Key_Idiaeresis << Qt::KeyboardModifiers() << "ï";
+ QTest::newRow("Ã (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyI"
+ << "I" << Qt::Key_Idiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ã";
+ QTest::newRow("î") << "KeyI" << Qt::KeyboardModifiers() << "KeyI"
+ << "i" << Qt::Key_Icircumflex << Qt::KeyboardModifiers() << "î";
+ QTest::newRow("ÃŽ") << "KeyI" << Qt::KeyboardModifiers() << "KeyI"
+ << "I" << Qt::Key_Icircumflex << Qt::KeyboardModifiers(Qt::ShiftModifier)
+ << "ÃŽ";
+ QTest::newRow("î (^ key)") << "Digit6" << Qt::KeyboardModifiers() << "KeyI"
+ << "i" << Qt::Key_Icircumflex << Qt::KeyboardModifiers() << "î";
+ QTest::newRow("ÃŽ (^ key)") << "Digit6" << Qt::KeyboardModifiers() << "KeyI"
+ << "I" << Qt::Key_Icircumflex
+ << Qt::KeyboardModifiers(Qt::ShiftModifier) << "ÃŽ";
+
+ QTest::newRow("ñ") << "KeyN" << Qt::KeyboardModifiers() << "KeyN"
+ << "n" << Qt::Key_Ntilde << Qt::KeyboardModifiers() << "ñ";
+ QTest::newRow("Ñ") << "KeyN" << Qt::KeyboardModifiers() << "KeyN"
+ << "N" << Qt::Key_Ntilde << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ñ";
+
+ QTest::newRow("ò (Backquote)") << "Backquote" << Qt::KeyboardModifiers() << "KeyO"
+ << "o" << Qt::Key_Ograve << Qt::KeyboardModifiers() << "ò";
+ QTest::newRow("Ã’ (Backquote)")
+ << "Backquote" << Qt::KeyboardModifiers() << "KeyO"
+ << "O" << Qt::Key_Ograve << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ã’";
+ QTest::newRow("ò") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyO"
+ << "o" << Qt::Key_Ograve << Qt::KeyboardModifiers() << "ò";
+ QTest::newRow("Ã’") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyO"
+ << "O" << Qt::Key_Ograve << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ã’";
+ QTest::newRow("ó") << "KeyE" << Qt::KeyboardModifiers() << "KeyO"
+ << "o" << Qt::Key_Oacute << Qt::KeyboardModifiers() << "ó";
+ QTest::newRow("Ó") << "KeyE" << Qt::KeyboardModifiers() << "KeyO"
+ << "O" << Qt::Key_Oacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ó";
+ QTest::newRow("ó (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyO"
+ << "o" << Qt::Key_Oacute << Qt::KeyboardModifiers() << "ó";
+ QTest::newRow("Ó (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyO"
+ << "O" << Qt::Key_Oacute << Qt::KeyboardModifiers(Qt::ShiftModifier)
+ << "Ó";
+ QTest::newRow("ö (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyO"
+ << "o" << Qt::Key_Odiaeresis << Qt::KeyboardModifiers() << "ö";
+ QTest::newRow("Ö (Mac Umlaut)")
+ << "KeyU" << Qt::KeyboardModifiers() << "KeyO"
+ << "O" << Qt::Key_Odiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ö";
+ QTest::newRow("ö (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyO"
+ << "o" << Qt::Key_Odiaeresis << Qt::KeyboardModifiers() << "ö";
+ QTest::newRow("Ö (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyO"
+ << "O" << Qt::Key_Odiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ö";
+ QTest::newRow("ô") << "KeyI" << Qt::KeyboardModifiers() << "KeyO"
+ << "o" << Qt::Key_Ocircumflex << Qt::KeyboardModifiers() << "ô";
+ QTest::newRow("Ô") << "KeyI" << Qt::KeyboardModifiers() << "KeyO"
+ << "O" << Qt::Key_Ocircumflex << Qt::KeyboardModifiers(Qt::ShiftModifier)
+ << "Ô";
+ QTest::newRow("ô (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyO"
+ << "o" << Qt::Key_Ocircumflex << Qt::KeyboardModifiers() << "ô";
+ QTest::newRow("Ô (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyO"
+ << "O" << Qt::Key_Ocircumflex
+ << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ô";
+ QTest::newRow("õ") << "KeyN" << Qt::KeyboardModifiers() << "KeyO"
+ << "o" << Qt::Key_Otilde << Qt::KeyboardModifiers() << "õ";
+ QTest::newRow("Õ") << "KeyN" << Qt::KeyboardModifiers() << "KeyO"
+ << "O" << Qt::Key_Otilde << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Õ";
+
+ QTest::newRow("ù (Backquote)") << "Backquote" << Qt::KeyboardModifiers() << "KeyU"
+ << "u" << Qt::Key_Ugrave << Qt::KeyboardModifiers() << "ù";
+ QTest::newRow("Ù (Backquote)")
+ << "Backquote" << Qt::KeyboardModifiers() << "KeyU"
+ << "U" << Qt::Key_Ugrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ù";
+ QTest::newRow("ù") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyU"
+ << "u" << Qt::Key_Ugrave << Qt::KeyboardModifiers() << "ù";
+ QTest::newRow("Ù") << "IntlBackslash" << Qt::KeyboardModifiers() << "KeyU"
+ << "U" << Qt::Key_Ugrave << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ù";
+ QTest::newRow("ú") << "KeyE" << Qt::KeyboardModifiers() << "KeyU"
+ << "u" << Qt::Key_Uacute << Qt::KeyboardModifiers() << "ú";
+ QTest::newRow("Ú") << "KeyE" << Qt::KeyboardModifiers() << "KeyU"
+ << "U" << Qt::Key_Uacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ú";
+ QTest::newRow("ú (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyU"
+ << "u" << Qt::Key_Uacute << Qt::KeyboardModifiers() << "ú";
+ QTest::newRow("Ú (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyU"
+ << "U" << Qt::Key_Uacute << Qt::KeyboardModifiers(Qt::ShiftModifier)
+ << "Ú";
+ QTest::newRow("ü (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyU"
+ << "u" << Qt::Key_Udiaeresis << Qt::KeyboardModifiers() << "ü";
+ QTest::newRow("Ü (Mac Umlaut)")
+ << "KeyU" << Qt::KeyboardModifiers() << "KeyU"
+ << "U" << Qt::Key_Udiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ü";
+ QTest::newRow("ü (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyU"
+ << "u" << Qt::Key_Udiaeresis << Qt::KeyboardModifiers() << "ü";
+ QTest::newRow("Ü (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyU"
+ << "U" << Qt::Key_Udiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ü";
+ QTest::newRow("û") << "KeyI" << Qt::KeyboardModifiers() << "KeyU"
+ << "û" << Qt::Key_Ucircumflex << Qt::KeyboardModifiers() << "û";
+ QTest::newRow("Û") << "KeyI" << Qt::KeyboardModifiers() << "KeyU"
+ << "U" << Qt::Key_Ucircumflex << Qt::KeyboardModifiers(Qt::ShiftModifier)
+ << "Û";
+ QTest::newRow("û (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyU"
+ << "û" << Qt::Key_Ucircumflex << Qt::KeyboardModifiers() << "û";
+ QTest::newRow("Û (^ key)") << "Digit6" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyU"
+ << "U" << Qt::Key_Ucircumflex
+ << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Û";
+
+ QTest::newRow("ý") << "KeyE" << Qt::KeyboardModifiers() << "KeyY"
+ << "y" << Qt::Key_Yacute << Qt::KeyboardModifiers() << "ý";
+ QTest::newRow("Ã") << "KeyE" << Qt::KeyboardModifiers() << "KeyY"
+ << "Y" << Qt::Key_Yacute << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ã";
+ QTest::newRow("ý (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyY"
+ << "y" << Qt::Key_Yacute << Qt::KeyboardModifiers() << "ý";
+ QTest::newRow("Ã (Quote)") << "Quote" << Qt::KeyboardModifiers() << "KeyY"
+ << "Y" << Qt::Key_Yacute << Qt::KeyboardModifiers(Qt::ShiftModifier)
+ << "Ã";
+ QTest::newRow("ÿ (Mac Umlaut)") << "KeyU" << Qt::KeyboardModifiers() << "KeyY"
+ << "y" << Qt::Key_ydiaeresis << Qt::KeyboardModifiers() << "ÿ";
+ QTest::newRow("Ÿ (Mac Umlaut)")
+ << "KeyU" << Qt::KeyboardModifiers() << "KeyY"
+ << "Y" << Qt::Key_ydiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ÿ";
+ QTest::newRow("ÿ (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyY"
+ << "y" << Qt::Key_ydiaeresis << Qt::KeyboardModifiers() << "ÿ";
+ QTest::newRow("Ÿ (Shift+Quote)")
+ << "Quote" << Qt::KeyboardModifiers(Qt::ShiftModifier) << "KeyY"
+ << "Y" << Qt::Key_ydiaeresis << Qt::KeyboardModifiers(Qt::ShiftModifier) << "Ÿ";
+}
+
+void tst_QWasmKeyTranslator::modifyByDeadKey()
+{
+ QFETCH(QString, deadKeyCode);
+ QFETCH(Qt::KeyboardModifiers, deadKeyModifiers);
+ QFETCH(QString, targetKeyCode);
+ QFETCH(QString, targetKey);
+ QFETCH(Qt::Key, targetQtKey);
+ QFETCH(Qt::KeyboardModifiers, modifiers);
+ QFETCH(QString, expectedModifiedKey);
+
+ QWasmDeadKeySupport deadKeySupport;
+
+ KeyEvent event(EventType::KeyDown, makeDeadKeyJsEvent(deadKeyCode, deadKeyModifiers));
+ QCOMPARE(event.deadKey, true);
+
+ deadKeySupport.applyDeadKeyTranslations(&event);
+
+ KeyEvent eDown(EventType::KeyDown, makeKeyJsEvent(targetKeyCode, targetKey, modifiers));
+ QCOMPARE(eDown.deadKey, false);
+ deadKeySupport.applyDeadKeyTranslations(&eDown);
+ QCOMPARE(eDown.deadKey, false);
+ QCOMPARE(eDown.text, expectedModifiedKey);
+ QCOMPARE(eDown.key, targetQtKey);
+
+ KeyEvent eUp(EventType::KeyUp, makeKeyJsEvent(targetKeyCode, targetKey, modifiers));
+ QCOMPARE(eUp.deadKey, false);
+ deadKeySupport.applyDeadKeyTranslations(&eUp);
+ QCOMPARE(eUp.text, expectedModifiedKey);
+ QCOMPARE(eUp.key, targetQtKey);
+}
+
+void tst_QWasmKeyTranslator::deadKeyModifiesOnlyOneKeyPressAndUp()
+{
+ QWasmDeadKeySupport deadKeySupport;
+ KeyEvent event(EventType::KeyDown, makeDeadKeyJsEvent("KeyU", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&event);
+
+ KeyEvent eDown(EventType::KeyDown, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&eDown);
+ QCOMPARE(eDown.text, "ü");
+ QCOMPARE(eDown.key, Qt::Key_Udiaeresis);
+
+ KeyEvent eUp(EventType::KeyUp, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&eUp);
+ QCOMPARE(eUp.text, "ü");
+ QCOMPARE(eUp.key, Qt::Key_Udiaeresis);
+
+ KeyEvent eDown2(EventType::KeyDown, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&eDown2);
+ QCOMPARE(eDown2.text, "u");
+ QCOMPARE(eDown2.key, Qt::Key_U);
+
+ KeyEvent eUp2(EventType::KeyUp, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&eUp2);
+ QCOMPARE(eUp2.text, "u");
+ QCOMPARE(eUp2.key, Qt::Key_U);
+}
+
+void tst_QWasmKeyTranslator::deadKeyIgnoresKeyUpPrecedingKeyDown()
+{
+ QWasmDeadKeySupport deadKeySupport;
+
+ KeyEvent deadKeyDownEvent(EventType::KeyDown,
+ makeDeadKeyJsEvent("KeyU", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&deadKeyDownEvent);
+
+ KeyEvent deadKeyUpEvent(EventType::KeyUp, makeDeadKeyJsEvent("KeyU", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&deadKeyUpEvent);
+
+ KeyEvent otherKeyUpEvent(EventType::KeyUp,
+ makeKeyJsEvent("AltLeft", "Alt", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&otherKeyUpEvent);
+
+ KeyEvent eDown(EventType::KeyDown, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&eDown);
+ QCOMPARE(eDown.text, "ü");
+ QCOMPARE(eDown.key, Qt::Key_Udiaeresis);
+
+ KeyEvent yetAnotherKeyUpEvent(
+ EventType::KeyUp, makeKeyJsEvent("ControlLeft", "Control", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&yetAnotherKeyUpEvent);
+
+ KeyEvent eUp(EventType::KeyUp, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&eUp);
+ QCOMPARE(eUp.text, "ü");
+ QCOMPARE(eUp.key, Qt::Key_Udiaeresis);
+}
+
+void tst_QWasmKeyTranslator::onlyKeysProducingTextAreModifiedByDeadKeys()
+{
+ QWasmDeadKeySupport deadKeySupport;
+
+ KeyEvent deadKeyDownEvent(EventType::KeyDown,
+ makeDeadKeyJsEvent("KeyU", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&deadKeyDownEvent);
+
+ KeyEvent noTextKeyDown(EventType::KeyDown,
+ makeKeyJsEvent("AltLeft", "Alt", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&noTextKeyDown);
+ QCOMPARE(noTextKeyDown.text, "");
+ QCOMPARE(noTextKeyDown.key, Qt::Key_Alt);
+
+ KeyEvent noTextKeyUp(EventType::KeyUp,
+ makeKeyJsEvent("AltLeft", "Alt", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&noTextKeyUp);
+ QCOMPARE(noTextKeyDown.text, "");
+ QCOMPARE(noTextKeyDown.key, Qt::Key_Alt);
+
+ KeyEvent eDown(EventType::KeyDown, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&eDown);
+ QCOMPARE(eDown.text, "ü");
+ QCOMPARE(eDown.key, Qt::Key_Udiaeresis);
+
+ KeyEvent eUp(EventType::KeyUp, makeKeyJsEvent("KeyU", "u", Qt::KeyboardModifiers()));
+ deadKeySupport.applyDeadKeyTranslations(&eUp);
+ QCOMPARE(eUp.text, "ü");
+ QCOMPARE(eUp.key, Qt::Key_Udiaeresis);
+}
+
+QTEST_MAIN(tst_QWasmKeyTranslator)
+#include "tst_qwasmkeytranslator.moc"
diff --git a/tests/auto/wasm/qwasmwindowstack/CMakeLists.txt b/tests/auto/wasm/qwasmwindowstack/CMakeLists.txt
new file mode 100644
index 0000000000..4b22d8a2eb
--- /dev/null
+++ b/tests/auto/wasm/qwasmwindowstack/CMakeLists.txt
@@ -0,0 +1,25 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qwasmwindowstack Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwasmwindowstack LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qwasmwindowstack
+ SOURCES
+ tst_qwasmwindowstack.cpp
+ DEFINES
+ QT_NO_FOREACH
+ LIBRARIES
+ Qt::GuiPrivate
+ PUBLIC_LIBRARIES
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
diff --git a/tests/auto/wasm/qwasmwindowstack/tst_qwasmwindowstack.cpp b/tests/auto/wasm/qwasmwindowstack/tst_qwasmwindowstack.cpp
new file mode 100644
index 0000000000..fe169b52dc
--- /dev/null
+++ b/tests/auto/wasm/qwasmwindowstack/tst_qwasmwindowstack.cpp
@@ -0,0 +1,714 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "../../../../src/plugins/platforms/wasm/qwasmwindowstack.h"
+#include <QtGui/QWindow>
+#include <QTest>
+#include <emscripten/val.h>
+
+class QWasmWindow
+{
+};
+
+namespace {
+std::vector<QWasmWindow *> getWindowsFrontToBack(const QWasmWindowStack *stack)
+{
+ return std::vector<QWasmWindow *>(stack->begin(), stack->end());
+}
+}
+
+class tst_QWasmWindowStack : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QWasmWindowStack()
+ : m_mockCallback(std::bind(&tst_QWasmWindowStack::onTopWindowChanged, this))
+ {
+ }
+
+private slots:
+ void init();
+
+ void insertion();
+ void raising();
+ void raisingWithAlwaysOnBottom();
+ void raisingWithAlwaysOnTop();
+ void lowering();
+ void loweringWithAlwaysOnBottom();
+ void loweringWithAlwaysOnTop();
+ void removing();
+ void removingWithAlwaysOnBottom();
+ void removingWithAlwaysOnTop();
+ void positionPreferenceChanges();
+ void clearing();
+
+private:
+ void onTopWindowChanged()
+ {
+ ++m_topLevelChangedCallCount;
+ if (m_onTopLevelChangedAction)
+ m_onTopLevelChangedAction();
+ }
+
+ void verifyWindowOrderChanged(int expected = 1)
+ {
+ QCOMPARE(expected, m_topLevelChangedCallCount);
+ clearCallbackCounter();
+ }
+
+ void clearCallbackCounter() { m_topLevelChangedCallCount = 0; }
+
+ QWasmWindowStack::WindowOrderChangedCallbackType m_mockCallback;
+ QWasmWindowStack::WindowOrderChangedCallbackType m_onTopLevelChangedAction;
+ int m_topLevelChangedCallCount = 0;
+
+ QWasmWindow m_root;
+ QWasmWindow m_window1;
+ QWasmWindow m_window2;
+ QWasmWindow m_window3;
+ QWasmWindow m_window4;
+ QWasmWindow m_window5;
+};
+
+void tst_QWasmWindowStack::init()
+{
+ m_onTopLevelChangedAction = QWasmWindowStack::WindowOrderChangedCallbackType();
+ clearCallbackCounter();
+}
+
+void tst_QWasmWindowStack::insertion()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_root); };
+ stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::Regular);
+ verifyWindowOrderChanged();
+
+ m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window1); };
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular);
+ verifyWindowOrderChanged();
+
+ m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window2); };
+ stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular);
+ verifyWindowOrderChanged();
+}
+
+void tst_QWasmWindowStack::raising()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window4, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular);
+
+ clearCallbackCounter();
+
+ QCOMPARE(&m_window5, stack.topWindow());
+
+ m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window1); };
+ stack.raise(&m_window1);
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window1, stack.topWindow());
+
+ stack.raise(&m_window1);
+ verifyWindowOrderChanged(0);
+ QCOMPARE(&m_window1, stack.topWindow());
+
+ m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window3); };
+ stack.raise(&m_window3);
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window3, stack.topWindow());
+}
+
+void tst_QWasmWindowStack::raisingWithAlwaysOnBottom()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ QWasmWindow alwaysOnBottomWindow1;
+ QWasmWindow alwaysOnBottomWindow2;
+ QWasmWindow alwaysOnBottomWindow3;
+
+ stack.pushWindow(&alwaysOnBottomWindow1, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&alwaysOnBottomWindow2, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&alwaysOnBottomWindow3, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular);
+ // Window order: 3 2 1 | B3 B2 B1
+
+ clearCallbackCounter();
+
+ std::vector<QWasmWindow *> expectedWindowOrder = { &m_window3,
+ &m_window2,
+ &m_window1,
+ &alwaysOnBottomWindow3,
+ &alwaysOnBottomWindow2,
+ &alwaysOnBottomWindow1 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ QCOMPARE(&m_window3, stack.topWindow());
+
+ // Window order: 1 3 2 | B3 B2 B1
+ stack.raise(&m_window1);
+
+ expectedWindowOrder = { &m_window1,
+ &m_window3,
+ &m_window2,
+ &alwaysOnBottomWindow3,
+ &alwaysOnBottomWindow2,
+ &alwaysOnBottomWindow1 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window1, stack.topWindow());
+
+ // Window order: 1 3 2 | B1 B3 B2
+ stack.raise(&alwaysOnBottomWindow1);
+
+ expectedWindowOrder = { &m_window1,
+ &m_window3,
+ &m_window2,
+ &alwaysOnBottomWindow1,
+ &alwaysOnBottomWindow3,
+ &alwaysOnBottomWindow2 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window1, stack.topWindow());
+
+ // Window order: 1 3 2 | B3 B1 B2
+ stack.raise(&alwaysOnBottomWindow3);
+
+ expectedWindowOrder = { &m_window1,
+ &m_window3,
+ &m_window2,
+ &alwaysOnBottomWindow3,
+ &alwaysOnBottomWindow1,
+ &alwaysOnBottomWindow2 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window1, stack.topWindow());
+}
+
+void tst_QWasmWindowStack::raisingWithAlwaysOnTop()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ QWasmWindow alwaysOnTopWindow1;
+ QWasmWindow alwaysOnTopWindow2;
+ QWasmWindow alwaysOnTopWindow3;
+
+ stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&alwaysOnTopWindow1, QWasmWindowStack::PositionPreference::StayOnTop);
+ stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&alwaysOnTopWindow2, QWasmWindowStack::PositionPreference::StayOnTop);
+ stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&alwaysOnTopWindow3, QWasmWindowStack::PositionPreference::StayOnTop);
+ // Window order: T3 T2 T1 | 5 3 1 | R
+
+ clearCallbackCounter();
+
+ std::vector<QWasmWindow *> expectedWindowOrder = { &alwaysOnTopWindow3,
+ &alwaysOnTopWindow2,
+ &alwaysOnTopWindow1,
+ &m_window5,
+ &m_window3,
+ &m_window1,
+ &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: T3 T2 T1 | 1 5 3 | R
+ stack.raise(&m_window1);
+
+ expectedWindowOrder = { &alwaysOnTopWindow3,
+ &alwaysOnTopWindow2,
+ &alwaysOnTopWindow1,
+ &m_window1,
+ &m_window5,
+ &m_window3,
+ &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&alwaysOnTopWindow3, stack.topWindow());
+
+ // Window order: T3 T2 T1 3 1 5 R
+ stack.raise(&m_window3);
+
+ expectedWindowOrder = { &alwaysOnTopWindow3,
+ &alwaysOnTopWindow2,
+ &alwaysOnTopWindow1,
+ &m_window3,
+ &m_window1,
+ &m_window5,
+ &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&alwaysOnTopWindow3, stack.topWindow());
+
+ // Window order: T1 T3 T2 3 1 5 R
+ stack.raise(&alwaysOnTopWindow1);
+
+ expectedWindowOrder = { &alwaysOnTopWindow1,
+ &alwaysOnTopWindow3,
+ &alwaysOnTopWindow2,
+ &m_window3,
+ &m_window1,
+ &m_window5,
+ &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&alwaysOnTopWindow1, stack.topWindow());
+}
+
+void tst_QWasmWindowStack::lowering()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window4, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular);
+ // Window order: 5 4 3 2 1 | R
+
+ clearCallbackCounter();
+
+ QCOMPARE(&m_window5, stack.topWindow());
+
+ m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window4); };
+ stack.lower(&m_window5);
+
+ // Window order: 4 3 2 1 5 R
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window4, stack.topWindow());
+
+ stack.lower(&m_window3);
+ // Window order: 4 2 1 5 3 R
+ verifyWindowOrderChanged();
+ std::vector<QWasmWindow *> expectedWindowOrder = { &m_window4, &m_window2, &m_window1,
+ &m_window5, &m_window3, &m_root };
+
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+}
+
+void tst_QWasmWindowStack::loweringWithAlwaysOnBottom()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ QWasmWindow alwaysOnBottomWindow1;
+ QWasmWindow alwaysOnBottomWindow2;
+ QWasmWindow alwaysOnBottomWindow3;
+
+ stack.pushWindow(&alwaysOnBottomWindow1, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&alwaysOnBottomWindow2, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&alwaysOnBottomWindow3, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular);
+ // Window order: 3 2 1 | B3 B2 B1
+
+ clearCallbackCounter();
+
+ std::vector<QWasmWindow *> expectedWindowOrder = { &m_window3,
+ &m_window2,
+ &m_window1,
+ &alwaysOnBottomWindow3,
+ &alwaysOnBottomWindow2,
+ &alwaysOnBottomWindow1 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ QCOMPARE(&m_window3, stack.topWindow());
+
+ // Window order: 2 1 3 | B3 B2 B1
+ stack.lower(&m_window3);
+
+ expectedWindowOrder = { &m_window2,
+ &m_window1,
+ &m_window3,
+ &alwaysOnBottomWindow3,
+ &alwaysOnBottomWindow2,
+ &alwaysOnBottomWindow1 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window2, stack.topWindow());
+
+ // Window order: 2 1 3 | B2 B1 B3
+ stack.lower(&alwaysOnBottomWindow3);
+
+ expectedWindowOrder = { &m_window2,
+ &m_window1,
+ &m_window3,
+ &alwaysOnBottomWindow2,
+ &alwaysOnBottomWindow1,
+ &alwaysOnBottomWindow3 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window2, stack.topWindow());
+
+ // Window order: 2 1 3 | B2 B3 B1
+ stack.lower(&alwaysOnBottomWindow1);
+
+ expectedWindowOrder = { &m_window2,
+ &m_window1,
+ &m_window3,
+ &alwaysOnBottomWindow2,
+ &alwaysOnBottomWindow3,
+ &alwaysOnBottomWindow1 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window2, stack.topWindow());
+}
+
+void tst_QWasmWindowStack::loweringWithAlwaysOnTop()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ QWasmWindow alwaysOnTopWindow1;
+ QWasmWindow alwaysOnTopWindow2;
+
+ stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&alwaysOnTopWindow1, QWasmWindowStack::PositionPreference::StayOnTop);
+ stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&alwaysOnTopWindow2, QWasmWindowStack::PositionPreference::StayOnTop);
+ stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular);
+ // Window order: T2 T1 5 3 1 R
+
+ clearCallbackCounter();
+
+ std::vector<QWasmWindow *> expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1,
+ &m_window5, &m_window3,
+ &m_window1, &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: T1 T2 5 3 1 R
+ stack.lower(&alwaysOnTopWindow2);
+
+ expectedWindowOrder = { &alwaysOnTopWindow1, &alwaysOnTopWindow2, &m_window5,
+ &m_window3, &m_window1, &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&alwaysOnTopWindow1, stack.topWindow());
+
+ // Window order: T2 T1 5 3 1 R
+ stack.lower(&alwaysOnTopWindow1);
+
+ expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1, &m_window5,
+ &m_window3, &m_window1, &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&alwaysOnTopWindow2, stack.topWindow());
+
+ // Window order: T2 T1 3 1 5 R
+ stack.lower(&m_window5);
+
+ expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1, &m_window3,
+ &m_window1, &m_window5, &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&alwaysOnTopWindow2, stack.topWindow());
+
+ // Window order: T2 T1 3 5 1 R
+ stack.lower(&m_window1);
+
+ expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1, &m_window3,
+ &m_window5, &m_window1, &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&alwaysOnTopWindow2, stack.topWindow());
+}
+
+void tst_QWasmWindowStack::removing()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window4, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular);
+ // Window order: 5 4 3 2 1 R
+
+ clearCallbackCounter();
+
+ QCOMPARE(&m_window5, stack.topWindow());
+
+ m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_window4); };
+ stack.removeWindow(&m_window5);
+ // Window order: 4 3 2 1 R
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window4, stack.topWindow());
+
+ stack.removeWindow(&m_window2);
+ // Window order: 4 3 1 R
+ verifyWindowOrderChanged();
+ std::vector<QWasmWindow *> expectedWindowOrder = { &m_window4, &m_window3, &m_window1,
+ &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+}
+
+void tst_QWasmWindowStack::positionPreferenceChanges()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ QWasmWindow window6;
+ QWasmWindow window7;
+ QWasmWindow window8;
+ QWasmWindow window9;
+
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window4, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&window6, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&window7, QWasmWindowStack::PositionPreference::StayOnTop);
+ stack.pushWindow(&window8, QWasmWindowStack::PositionPreference::StayOnTop);
+ stack.pushWindow(&window9, QWasmWindowStack::PositionPreference::StayOnTop);
+
+ // Window order: 9 8 7 | 6 5 4 | 3 2 1
+
+ clearCallbackCounter();
+
+ std::vector<QWasmWindow *> expectedWindowOrder = { &window9, &window8, &window7,
+ &window6, &m_window5, &m_window4,
+ &m_window3, &m_window2, &m_window1 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: 9 8 7 1 | 6 5 4 | 3 2
+ stack.windowPositionPreferenceChanged(&m_window1,
+ QWasmWindowStack::PositionPreference::StayOnTop);
+
+ expectedWindowOrder = {
+ &window9, &window8, &window7, &m_window1, &window6,
+ &m_window5, &m_window4, &m_window3, &m_window2,
+ };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: 9 8 7 1 5 | 6 4 | 3 2
+ stack.windowPositionPreferenceChanged(&m_window5,
+ QWasmWindowStack::PositionPreference::StayOnTop);
+
+ expectedWindowOrder = {
+ &window9, &window8, &window7, &m_window1, &m_window5,
+ &window6, &m_window4, &m_window3, &m_window2,
+ };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: 9 7 1 5 | 8 6 4 | 3 2
+ stack.windowPositionPreferenceChanged(&window8, QWasmWindowStack::PositionPreference::Regular);
+
+ expectedWindowOrder = {
+ &window9, &window7, &m_window1, &m_window5, &window8,
+ &window6, &m_window4, &m_window3, &m_window2,
+ };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: 9 7 1 5 | 8 6 4 2 | 3
+ stack.windowPositionPreferenceChanged(&m_window2,
+ QWasmWindowStack::PositionPreference::Regular);
+
+ expectedWindowOrder = {
+ &window9, &window7, &m_window1, &m_window5, &window8,
+ &window6, &m_window4, &m_window2, &m_window3,
+ };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: 7 1 5 | 8 6 4 2 | 9 3
+ stack.windowPositionPreferenceChanged(&window9,
+ QWasmWindowStack::PositionPreference::StayOnBottom);
+
+ expectedWindowOrder = {
+ &window7, &m_window1, &m_window5, &window8, &window6,
+ &m_window4, &m_window2, &window9, &m_window3,
+ };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: 7 1 5 | 6 4 2 | 8 9 3
+ stack.windowPositionPreferenceChanged(&window8,
+ QWasmWindowStack::PositionPreference::StayOnBottom);
+
+ expectedWindowOrder = {
+ &window7, &m_window1, &m_window5, &window6, &m_window4,
+ &m_window2, &window8, &window9, &m_window3,
+ };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+}
+
+void tst_QWasmWindowStack::removingWithAlwaysOnBottom()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ QWasmWindow alwaysOnBottomWindow1;
+ QWasmWindow alwaysOnBottomWindow2;
+ QWasmWindow alwaysOnBottomWindow3;
+
+ stack.pushWindow(&alwaysOnBottomWindow1, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&alwaysOnBottomWindow2, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&alwaysOnBottomWindow3, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window2, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular);
+ // Window order: 3 2 1 | B3 B2 B1
+
+ clearCallbackCounter();
+
+ std::vector<QWasmWindow *> expectedWindowOrder = { &m_window3,
+ &m_window2,
+ &m_window1,
+ &alwaysOnBottomWindow3,
+ &alwaysOnBottomWindow2,
+ &alwaysOnBottomWindow1 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ QCOMPARE(&m_window3, stack.topWindow());
+
+ // Window order: 3 1 | B3 B2 B1
+ stack.removeWindow(&m_window2);
+
+ expectedWindowOrder = { &m_window3, &m_window1, &alwaysOnBottomWindow3, &alwaysOnBottomWindow2,
+ &alwaysOnBottomWindow1 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window3, stack.topWindow());
+
+ // Window order: 1 3 2 | B1 B3 B2
+ stack.removeWindow(&alwaysOnBottomWindow2);
+
+ expectedWindowOrder = { &m_window3, &m_window1, &alwaysOnBottomWindow3,
+ &alwaysOnBottomWindow1 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window3, stack.topWindow());
+
+ // Window order: 1 3 2 | B3 B1 B2
+ stack.removeWindow(&alwaysOnBottomWindow1);
+
+ expectedWindowOrder = { &m_window3, &m_window1, &alwaysOnBottomWindow3 };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_window3, stack.topWindow());
+}
+
+void tst_QWasmWindowStack::removingWithAlwaysOnTop()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ QWasmWindow alwaysOnTopWindow1;
+ QWasmWindow alwaysOnTopWindow2;
+
+ stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&alwaysOnTopWindow1, QWasmWindowStack::PositionPreference::StayOnTop);
+ stack.pushWindow(&m_window3, QWasmWindowStack::PositionPreference::Regular);
+ stack.pushWindow(&alwaysOnTopWindow2, QWasmWindowStack::PositionPreference::StayOnTop);
+ stack.pushWindow(&m_window5, QWasmWindowStack::PositionPreference::Regular);
+ // Window order: T2 T1 5 3 1 R
+
+ clearCallbackCounter();
+
+ std::vector<QWasmWindow *> expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1,
+ &m_window5, &m_window3,
+ &m_window1, &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: T2 T1 5 1 R
+ stack.removeWindow(&m_window3);
+ verifyWindowOrderChanged();
+
+ expectedWindowOrder = { &alwaysOnTopWindow2, &alwaysOnTopWindow1, &m_window5, &m_window1,
+ &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: T2 5 1 R
+ stack.removeWindow(&alwaysOnTopWindow1);
+ verifyWindowOrderChanged();
+
+ expectedWindowOrder = { &alwaysOnTopWindow2, &m_window5, &m_window1, &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: T2 1 R
+ stack.removeWindow(&m_window5);
+ verifyWindowOrderChanged();
+
+ expectedWindowOrder = { &alwaysOnTopWindow2, &m_window1, &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: T2 R
+ stack.removeWindow(&m_window1);
+ verifyWindowOrderChanged();
+
+ expectedWindowOrder = { &alwaysOnTopWindow2, &m_root };
+ QVERIFY(std::equal(expectedWindowOrder.begin(), expectedWindowOrder.end(),
+ getWindowsFrontToBack(&stack).begin()));
+
+ // Window order: R
+ stack.removeWindow(&alwaysOnTopWindow2);
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_root, stack.topWindow());
+}
+
+void tst_QWasmWindowStack::clearing()
+{
+ QWasmWindowStack stack(m_mockCallback);
+
+ stack.pushWindow(&m_root, QWasmWindowStack::PositionPreference::StayOnBottom);
+ stack.pushWindow(&m_window1, QWasmWindowStack::PositionPreference::Regular);
+ // Window order: 1 R
+
+ clearCallbackCounter();
+
+ QCOMPARE(&m_window1, stack.topWindow());
+
+ m_onTopLevelChangedAction = [this, &stack]() { QVERIFY(stack.topWindow() == &m_root); };
+ stack.removeWindow(&m_window1);
+ // Window order: R
+ verifyWindowOrderChanged();
+ QCOMPARE(&m_root, stack.topWindow());
+
+ m_onTopLevelChangedAction = [&stack]() { QVERIFY(stack.topWindow() == nullptr); };
+ stack.removeWindow(&m_root);
+ // Window order: <empty>
+ verifyWindowOrderChanged();
+ QCOMPARE(nullptr, stack.topWindow());
+ QCOMPARE(0u, stack.size());
+}
+
+QTEST_MAIN(tst_QWasmWindowStack)
+#include "tst_qwasmwindowstack.moc"
diff --git a/tests/auto/wasm/qwasmwindowtreenode/CMakeLists.txt b/tests/auto/wasm/qwasmwindowtreenode/CMakeLists.txt
new file mode 100644
index 0000000000..dc292f6337
--- /dev/null
+++ b/tests/auto/wasm/qwasmwindowtreenode/CMakeLists.txt
@@ -0,0 +1,25 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_qwasmwindowtreenode Test:
+#####################################################################
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwasmwindowtreenode LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qwasmwindowtreenode
+ SOURCES
+ tst_qwasmwindowtreenode.cpp
+ DEFINES
+ QT_NO_FOREACH
+ LIBRARIES
+ Qt::GuiPrivate
+ PUBLIC_LIBRARIES
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
diff --git a/tests/auto/wasm/qwasmwindowtreenode/tst_qwasmwindowtreenode.cpp b/tests/auto/wasm/qwasmwindowtreenode/tst_qwasmwindowtreenode.cpp
new file mode 100644
index 0000000000..763dbf9a07
--- /dev/null
+++ b/tests/auto/wasm/qwasmwindowtreenode/tst_qwasmwindowtreenode.cpp
@@ -0,0 +1,257 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "../../../../src/plugins/platforms/wasm/qwasmwindowtreenode.h"
+#include <QtGui/QWindow>
+#include <QTest>
+#include <emscripten/val.h>
+
+class QWasmWindow
+{
+};
+
+using OnSubtreeChangedCallback = std::function<void(
+ QWasmWindowTreeNodeChangeType changeType, QWasmWindowTreeNode *parent, QWasmWindow *child)>;
+using SetWindowZOrderCallback = std::function<void(QWasmWindow *window, int z)>;
+
+struct OnSubtreeChangedCallData
+{
+ QWasmWindowTreeNodeChangeType changeType;
+ QWasmWindowTreeNode *parent;
+ QWasmWindow *child;
+};
+
+struct SetWindowZOrderCallData
+{
+ QWasmWindow *window;
+ int z;
+};
+
+class TestWindowTreeNode final : public QWasmWindowTreeNode, public QWasmWindow
+{
+public:
+ TestWindowTreeNode(OnSubtreeChangedCallback onSubtreeChangedCallback,
+ SetWindowZOrderCallback setWindowZOrderCallback)
+ : m_onSubtreeChangedCallback(std::move(onSubtreeChangedCallback)),
+ m_setWindowZOrderCallback(std::move(setWindowZOrderCallback))
+ {
+ }
+ ~TestWindowTreeNode() final { }
+
+ void setParent(TestWindowTreeNode *parent)
+ {
+ auto *previous = m_parent;
+ m_parent = parent;
+ onParentChanged(previous, parent, QWasmWindowStack::PositionPreference::Regular);
+ }
+
+ void setContainerElement(emscripten::val container) { m_containerElement = container; }
+
+ void bringToTop() { QWasmWindowTreeNode::bringToTop(); }
+
+ void sendToBottom() { QWasmWindowTreeNode::sendToBottom(); }
+
+ const QWasmWindowStack &childStack() { return QWasmWindowTreeNode::childStack(); }
+
+ emscripten::val containerElement() final { return m_containerElement; }
+
+ QWasmWindowTreeNode *parentNode() final { return m_parent; }
+
+ QWasmWindow *asWasmWindow() final { return this; }
+
+protected:
+ void onSubtreeChanged(QWasmWindowTreeNodeChangeType changeType, QWasmWindowTreeNode *parent,
+ QWasmWindow *child) final
+ {
+ m_onSubtreeChangedCallback(changeType, parent, child);
+ }
+
+ void setWindowZOrder(QWasmWindow *window, int z) final { m_setWindowZOrderCallback(window, z); }
+
+ TestWindowTreeNode *m_parent = nullptr;
+ emscripten::val m_containerElement = emscripten::val::undefined();
+
+ OnSubtreeChangedCallback m_onSubtreeChangedCallback;
+ SetWindowZOrderCallback m_setWindowZOrderCallback;
+};
+
+class tst_QWasmWindowTreeNode : public QObject
+{
+ Q_OBJECT
+
+public:
+ tst_QWasmWindowTreeNode() { }
+
+private slots:
+ void init();
+
+ void nestedWindowStacks();
+ void settingChildWindowZOrder();
+};
+
+void tst_QWasmWindowTreeNode::init() { }
+
+bool operator==(const OnSubtreeChangedCallData &lhs, const OnSubtreeChangedCallData &rhs)
+{
+ return lhs.changeType == rhs.changeType && lhs.parent == rhs.parent && lhs.child == rhs.child;
+}
+
+bool operator==(const SetWindowZOrderCallData &lhs, const SetWindowZOrderCallData &rhs)
+{
+ return lhs.window == rhs.window && lhs.z == rhs.z;
+}
+
+void tst_QWasmWindowTreeNode::nestedWindowStacks()
+{
+ QList<OnSubtreeChangedCallData> calls;
+ OnSubtreeChangedCallback mockOnSubtreeChanged =
+ [&calls](QWasmWindowTreeNodeChangeType changeType, QWasmWindowTreeNode *parent,
+ QWasmWindow *child) {
+ calls.push_back(OnSubtreeChangedCallData{ changeType, parent, child });
+ };
+ SetWindowZOrderCallback ignoreSetWindowZOrder = [](QWasmWindow *, int) {};
+ TestWindowTreeNode node(mockOnSubtreeChanged, ignoreSetWindowZOrder);
+ node.bringToTop();
+
+ OnSubtreeChangedCallback ignoreSubtreeChanged = [](QWasmWindowTreeNodeChangeType,
+ QWasmWindowTreeNode *, QWasmWindow *) {};
+ TestWindowTreeNode node2(ignoreSubtreeChanged, ignoreSetWindowZOrder);
+ node2.setParent(&node);
+
+ QCOMPARE(node.childStack().size(), 1u);
+ QCOMPARE(node2.childStack().size(), 0u);
+ QCOMPARE(node.childStack().topWindow(), &node2);
+ QCOMPARE(calls.size(), 1u);
+ {
+ OnSubtreeChangedCallData expected{ QWasmWindowTreeNodeChangeType::NodeInsertion, &node,
+ &node2 };
+ QCOMPARE(calls[0], expected);
+ calls.clear();
+ }
+
+ TestWindowTreeNode node3(ignoreSubtreeChanged, ignoreSetWindowZOrder);
+ node3.setParent(&node);
+
+ QCOMPARE(node.childStack().size(), 2u);
+ QCOMPARE(node2.childStack().size(), 0u);
+ QCOMPARE(node3.childStack().size(), 0u);
+ QCOMPARE(node.childStack().topWindow(), &node3);
+ {
+ OnSubtreeChangedCallData expected{ QWasmWindowTreeNodeChangeType::NodeInsertion, &node,
+ &node3 };
+ QCOMPARE(calls[0], expected);
+ calls.clear();
+ }
+
+ TestWindowTreeNode node4(ignoreSubtreeChanged, ignoreSetWindowZOrder);
+ node4.setParent(&node);
+
+ QCOMPARE(node.childStack().size(), 3u);
+ QCOMPARE(node2.childStack().size(), 0u);
+ QCOMPARE(node3.childStack().size(), 0u);
+ QCOMPARE(node4.childStack().size(), 0u);
+ QCOMPARE(node.childStack().topWindow(), &node4);
+ {
+ OnSubtreeChangedCallData expected{ QWasmWindowTreeNodeChangeType::NodeInsertion, &node,
+ &node4 };
+ QCOMPARE(calls[0], expected);
+ calls.clear();
+ }
+
+ node3.bringToTop();
+ QCOMPARE(node.childStack().topWindow(), &node3);
+
+ node4.setParent(nullptr);
+ QCOMPARE(node.childStack().size(), 2u);
+ QCOMPARE(node.childStack().topWindow(), &node3);
+ {
+ OnSubtreeChangedCallData expected{ QWasmWindowTreeNodeChangeType::NodeRemoval, &node,
+ &node4 };
+ QCOMPARE(calls[0], expected);
+ calls.clear();
+ }
+
+ node2.setParent(nullptr);
+ QCOMPARE(node.childStack().size(), 1u);
+ QCOMPARE(node.childStack().topWindow(), &node3);
+ {
+ OnSubtreeChangedCallData expected{ QWasmWindowTreeNodeChangeType::NodeRemoval, &node,
+ &node2 };
+ QCOMPARE(calls[0], expected);
+ calls.clear();
+ }
+
+ node3.setParent(nullptr);
+ QVERIFY(node.childStack().empty());
+ QCOMPARE(node.childStack().topWindow(), nullptr);
+ {
+ OnSubtreeChangedCallData expected{ QWasmWindowTreeNodeChangeType::NodeRemoval, &node,
+ &node3 };
+ QCOMPARE(calls[0], expected);
+ calls.clear();
+ }
+}
+
+void tst_QWasmWindowTreeNode::settingChildWindowZOrder()
+{
+ QList<SetWindowZOrderCallData> calls;
+ OnSubtreeChangedCallback ignoreSubtreeChanged = [](QWasmWindowTreeNodeChangeType,
+ QWasmWindowTreeNode *, QWasmWindow *) {};
+ SetWindowZOrderCallback onSetWindowZOrder = [&calls](QWasmWindow *window, int z) {
+ calls.push_back(SetWindowZOrderCallData{ window, z });
+ };
+ SetWindowZOrderCallback ignoreSetWindowZOrder = [](QWasmWindow *, int) {};
+ TestWindowTreeNode node(ignoreSubtreeChanged, onSetWindowZOrder);
+
+ TestWindowTreeNode node2(ignoreSubtreeChanged, ignoreSetWindowZOrder);
+ node2.setParent(&node);
+
+ {
+ QCOMPARE(calls.size(), 1u);
+ SetWindowZOrderCallData expected{ &node2, 3 };
+ QCOMPARE(calls[0], expected);
+ calls.clear();
+ }
+
+ TestWindowTreeNode node3(ignoreSubtreeChanged, ignoreSetWindowZOrder);
+ node3.setParent(&node);
+
+ {
+ QCOMPARE(calls.size(), 2u);
+ SetWindowZOrderCallData expected{ &node2, 3 };
+ QCOMPARE(calls[0], expected);
+ expected = SetWindowZOrderCallData{ &node3, 4 };
+ QCOMPARE(calls[1], expected);
+ calls.clear();
+ }
+
+ TestWindowTreeNode node4(ignoreSubtreeChanged, ignoreSetWindowZOrder);
+ node4.setParent(&node);
+
+ {
+ QCOMPARE(calls.size(), 3u);
+ SetWindowZOrderCallData expected{ &node2, 3 };
+ QCOMPARE(calls[0], expected);
+ expected = SetWindowZOrderCallData{ &node3, 4 };
+ QCOMPARE(calls[1], expected);
+ expected = SetWindowZOrderCallData{ &node4, 5 };
+ QCOMPARE(calls[2], expected);
+ calls.clear();
+ }
+
+ node2.bringToTop();
+
+ {
+ QCOMPARE(calls.size(), 3u);
+ SetWindowZOrderCallData expected{ &node3, 3 };
+ QCOMPARE(calls[0], expected);
+ expected = SetWindowZOrderCallData{ &node4, 4 };
+ QCOMPARE(calls[1], expected);
+ expected = SetWindowZOrderCallData{ &node2, 5 };
+ QCOMPARE(calls[2], expected);
+ calls.clear();
+ }
+}
+
+QTEST_MAIN(tst_QWasmWindowTreeNode)
+#include "tst_qwasmwindowtreenode.moc"
diff --git a/tests/auto/wasm/selenium/CMakeLists.txt b/tests/auto/wasm/selenium/CMakeLists.txt
new file mode 100644
index 0000000000..335b6d23d9
--- /dev/null
+++ b/tests/auto/wasm/selenium/CMakeLists.txt
@@ -0,0 +1,81 @@
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwasmwindow_harness LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_qwasmwindow_harness
+ MANUAL
+ NO_BATCH
+ SOURCES
+ tst_qwasmwindow_harness.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::Gui
+ Qt::OpenGL
+ Qt::Widgets
+)
+
+# Resources:
+set(shaders_resource_files
+ "fshader.glsl"
+ "vshader.glsl"
+)
+
+qt6_add_resources(tst_qwasmwindow_harness "shaders"
+ PREFIX
+ "/"
+ FILES
+ ${shaders_resource_files}
+)
+
+if(CMAKE_HOST_WIN32)
+ SET(RUNSHCMD run.bat)
+ SET(RUNSHARG "NotUsed")
+else()
+ SET(RUNSHCMD bash)
+ SET(RUNSHARG run.sh)
+endif()
+
+set_target_properties(tst_qwasmwindow_harness PROPERTIES CROSSCOMPILING_EMULATOR "") # disabling emrun
+qt_internal_create_test_script(NAME tst_qwasmwindow_harness
+ COMMAND ${RUNSHCMD}
+ ARGS ${RUNSHARG}
+ WORKING_DIRECTORY "${test_working_dir}"
+ OUTPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/tst_qwasmwindow_harnessWrapper$<CONFIG>.cmake"
+)
+
+add_custom_command(
+ TARGET tst_qwasmwindow_harness POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/tst_qwasmwindow_harness.html
+ ${CMAKE_CURRENT_BINARY_DIR}/tst_qwasmwindow_harness.html
+)
+
+add_custom_command(
+ TARGET tst_qwasmwindow_harness POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../../util/wasm/qtwasmserver/qtwasmserver.py
+ ${CMAKE_CURRENT_BINARY_DIR}/qtwasmserver.py
+)
+
+add_custom_command(
+ TARGET tst_qwasmwindow_harness POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/qwasmwindow.py
+ ${CMAKE_CURRENT_BINARY_DIR}/qwasmwindow.py
+)
+
+add_custom_command(
+ TARGET tst_qwasmwindow_harness POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/run.sh
+ ${CMAKE_CURRENT_BINARY_DIR}/run.sh
+)
+
+add_custom_command(
+ TARGET tst_qwasmwindow_harness POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/run.bat
+ ${CMAKE_CURRENT_BINARY_DIR}/run.bat
+)
diff --git a/tests/auto/wasm/selenium/fshader.glsl b/tests/auto/wasm/selenium/fshader.glsl
new file mode 100644
index 0000000000..252735f91c
--- /dev/null
+++ b/tests/auto/wasm/selenium/fshader.glsl
@@ -0,0 +1,21 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifdef GL_ES
+// Set default precision to medium
+precision mediump int;
+precision mediump float;
+#endif
+
+uniform sampler2D texture;
+
+varying vec2 v_texcoord;
+
+//! [0]
+void main()
+{
+ // Set fragment color from texture
+ gl_FragColor = texture2D(texture, v_texcoord);
+}
+//! [0]
+
diff --git a/tests/auto/wasm/selenium/qwasmwindow.py b/tests/auto/wasm/selenium/qwasmwindow.py
new file mode 100644
index 0000000000..260e9d2d24
--- /dev/null
+++ b/tests/auto/wasm/selenium/qwasmwindow.py
@@ -0,0 +1,1042 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+from selenium.webdriver import Chrome
+from selenium.webdriver.chrome.service import Service as ChromeService
+from selenium.webdriver.common.action_chains import ActionChains
+from selenium.webdriver.common.actions.action_builder import ActionBuilder
+from selenium.webdriver.common.actions.pointer_actions import PointerActions
+from selenium.webdriver.common.actions.interaction import POINTER_TOUCH
+from selenium.webdriver.common.actions.pointer_input import PointerInput
+from selenium.webdriver.common.by import By
+from selenium.webdriver.support.expected_conditions import presence_of_element_located
+from selenium.webdriver.support.ui import WebDriverWait
+from webdriver_manager.chrome import ChromeDriverManager
+
+import time
+import unittest
+from enum import Enum, auto
+
+class WidgetTestCase(unittest.TestCase):
+ def setUp(self):
+ self._driver = Chrome(service=ChromeService(ChromeDriverManager().install()))
+ self._driver.get(
+ 'http://localhost:8001/tst_qwasmwindow_harness.html')
+ self._test_sandbox_element = WebDriverWait(self._driver, 30).until(
+ presence_of_element_located((By.ID, 'test-sandbox'))
+ )
+ self.addTypeEqualityFunc(Color, assert_colors_equal)
+ self.addTypeEqualityFunc(Rect, assert_rects_equal)
+
+ def test_hasFocus_returnsFalse_whenSetNoFocusShowWasCalled(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=0, y=0, width=600, height=1200)
+
+ w0 = Widget(self._driver, "w0")
+ w0.show()
+ self.assertEqual(w0.hasFocus(), True)
+
+ w1 = Widget(self._driver, "w1")
+ w1.setNoFocusShow()
+ w1.show()
+ self.assertEqual(w0.hasFocus(), True)
+ self.assertEqual(w1.hasFocus(), False)
+
+ w2 = Widget(self._driver, "w2")
+ w2.show()
+ self.assertEqual(w0.hasFocus(), False)
+ self.assertEqual(w1.hasFocus(), False)
+ self.assertEqual(w2.hasFocus(), True)
+
+ w3 = Widget(self._driver, "w3")
+ w3.setNoFocusShow()
+ w3.show()
+ self.assertEqual(w0.hasFocus(), False)
+ self.assertEqual(w1.hasFocus(), False)
+ self.assertEqual(w2.hasFocus(), True)
+ self.assertEqual(w3.hasFocus(), False)
+ w3.activate();
+ self.assertEqual(w0.hasFocus(), False)
+ self.assertEqual(w1.hasFocus(), False)
+ self.assertEqual(w2.hasFocus(), False)
+ self.assertEqual(w3.hasFocus(), True)
+
+ clearWidgets(self._driver)
+
+ def test_window_resizing(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=0, y=0, width=600, height=600)
+
+ window = Window(parent=screen, rect=Rect(x=100, y=100, width=200, height=200))
+ self.assertEqual(window.rect, Rect(x=100, y=100, width=200, height=200))
+
+ window.drag(Handle.TOP_LEFT, direction=UP(10) + LEFT(10))
+ self.assertEqual(window.rect, Rect(x=90, y=90, width=210, height=210))
+
+ window.drag(Handle.TOP, direction=DOWN(10) + LEFT(100))
+ self.assertEqual(window.rect, Rect(x=90, y=100, width=210, height=200))
+
+ window.drag(Handle.TOP_RIGHT, direction=UP(5) + LEFT(5))
+ self.assertEqual(window.rect, Rect(x=90, y=95, width=205, height=205))
+
+ window.drag(Handle.RIGHT, direction=DOWN(100) + RIGHT(5))
+ self.assertEqual(window.rect, Rect(x=90, y=95, width=210, height=205))
+
+ window.drag(Handle.BOTTOM_RIGHT, direction=UP(5) + LEFT(10))
+ self.assertEqual(window.rect, Rect(x=90, y=95, width=200, height=200))
+
+ window.drag(Handle.BOTTOM, direction=DOWN(20) + LEFT(100))
+ self.assertEqual(window.rect, Rect(x=90, y=95, width=200, height=220))
+
+ window.drag(Handle.BOTTOM_LEFT, direction=DOWN(10) + LEFT(10))
+ self.assertEqual(window.rect, Rect(x=80, y=95, width=210, height=230))
+
+ window.drag(Handle.LEFT, direction=DOWN(343) + LEFT(5))
+ self.assertEqual(window.rect, Rect(x=75, y=95, width=215, height=230))
+
+ window.drag(Handle.BOTTOM_RIGHT, direction=UP(150) + LEFT(150))
+ self.assertEqual(window.rect, Rect(x=75, y=95, width=65, height=80))
+
+ def test_cannot_resize_over_screen_top_edge(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=200, y=200, width=300, height=300)
+ window = Window(parent=screen, rect=Rect(x=300, y=300, width=100, height=100))
+ self.assertEqual(window.rect, Rect(x=300, y=300, width=100, height=100))
+ frame_rect_before_resize = window.frame_rect
+
+ window.drag(Handle.TOP, direction=UP(200))
+ self.assertEqual(window.rect.x, 300)
+ self.assertEqual(window.frame_rect.y, screen.rect.y)
+ self.assertEqual(window.rect.width, 100)
+ self.assertEqual(window.frame_rect.y + window.frame_rect.height,
+ frame_rect_before_resize.y + frame_rect_before_resize.height)
+
+ def test_window_move(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=200, y=200, width=300, height=300)
+ window = Window(parent=screen, rect=Rect(x=300, y=300, width=100, height=100))
+ self.assertEqual(window.rect, Rect(x=300, y=300, width=100, height=100))
+
+ window.drag(Handle.TOP_WINDOW_BAR, direction=UP(30))
+ self.assertEqual(window.rect, Rect(x=300, y=270, width=100, height=100))
+
+ window.drag(Handle.TOP_WINDOW_BAR, direction=RIGHT(50))
+ self.assertEqual(window.rect, Rect(x=350, y=270, width=100, height=100))
+
+ window.drag(Handle.TOP_WINDOW_BAR, direction=DOWN(30) + LEFT(70))
+ self.assertEqual(window.rect, Rect(x=280, y=300, width=100, height=100))
+
+ def test_screen_limits_window_moves(self):
+ screen = Screen(self._driver, ScreenPosition.RELATIVE,
+ x=200, y=200, width=300, height=300)
+ window = Window(parent=screen, rect=Rect(x=300, y=300, width=100, height=100))
+ self.assertEqual(window.rect, Rect(x=300, y=300, width=100, height=100))
+
+ window.drag(Handle.TOP_WINDOW_BAR, direction=LEFT(300))
+ self.assertEqual(window.frame_rect.x, screen.rect.x - window.frame_rect.width / 2)
+
+ def test_screen_in_scroll_container_limits_window_moves(self):
+ screen = Screen(self._driver, ScreenPosition.IN_SCROLL_CONTAINER,
+ x=200, y=2000, width=300, height=300,
+ container_width=500, container_height=7000)
+ screen.scroll_to()
+ window = Window(parent=screen, rect=Rect(x=300, y=2100, width=100, height=100))
+ self.assertEqual(window.rect, Rect(x=300, y=2100, width=100, height=100))
+
+ window.drag(Handle.TOP_WINDOW_BAR, direction=LEFT(300))
+ self.assertEqual(window.frame_rect.x, screen.rect.x - window.frame_rect.width / 2)
+
+ def test_maximize(self):
+ screen = Screen(self._driver, ScreenPosition.RELATIVE,
+ x=200, y=200, width=300, height=300)
+ window = Window(parent=screen, rect=Rect(x=300, y=300, width=100, height=100), title='Maximize')
+ self.assertEqual(window.rect, Rect(x=300, y=300, width=100, height=100))
+
+ window.maximize()
+ self.assertEqual(window.frame_rect, Rect(x=200, y=200, width=300, height=300))
+
+ def test_multitouch_window_move(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=0, y=0, width=800, height=800)
+ windows = [Window(screen, rect=Rect(x=50, y=50, width=100, height=100), title='First'),
+ Window(screen, rect=Rect(x=400, y=400, width=100, height=100), title='Second'),
+ Window(screen, rect=Rect(x=50, y=400, width=100, height=100), title='Third')]
+
+ self.assertEqual(windows[0].rect, Rect(x=50, y=50, width=100, height=100))
+ self.assertEqual(windows[1].rect, Rect(x=400, y=400, width=100, height=100))
+ self.assertEqual(windows[2].rect, Rect(x=50, y=400, width=100, height=100))
+
+ actions = [TouchDragAction(origin=windows[0].at(Handle.TOP_WINDOW_BAR), direction=DOWN(20) + RIGHT(20)),
+ TouchDragAction(origin=windows[1].at(Handle.TOP_WINDOW_BAR), direction=DOWN(20) + LEFT(20)),
+ TouchDragAction(origin=windows[2].at(Handle.TOP_WINDOW_BAR), direction=UP(20) + RIGHT(20))]
+ perform_touch_drag_actions(actions)
+ self.assertEqual(windows[0].rect, Rect(x=70, y=70, width=100, height=100))
+ self.assertEqual(windows[1].rect, Rect(x=380, y=420, width=100, height=100))
+ self.assertEqual(windows[2].rect, Rect(x=70, y=380, width=100, height=100))
+
+ #TODO FIX IN CI
+ @unittest.skip('Skip temporarily')
+ def test_multitouch_window_resize(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=0, y=0, width=800, height=800)
+ windows = [Window(screen, rect=Rect(x=50, y=50, width=150, height=150), title='First'),
+ Window(screen, rect=Rect(x=400, y=400, width=150, height=150), title='Second'),
+ Window(screen, rect=Rect(x=50, y=400, width=150, height=150), title='Third')]
+
+ self.assertEqual(windows[0].rect, Rect(x=50, y=50, width=150, height=150))
+ self.assertEqual(windows[1].rect, Rect(x=400, y=400, width=150, height=150))
+ self.assertEqual(windows[2].rect, Rect(x=50, y=400, width=150, height=150))
+
+ actions = [TouchDragAction(origin=windows[0].at(Handle.TOP_LEFT), direction=DOWN(20) + RIGHT(20)),
+ TouchDragAction(origin=windows[1].at(Handle.TOP), direction=DOWN(20) + LEFT(20)),
+ TouchDragAction(origin=windows[2].at(Handle.BOTTOM_RIGHT), direction=UP(20) + RIGHT(20))]
+ perform_touch_drag_actions(actions)
+ self.assertEqual(windows[0].rect, Rect(x=70, y=70, width=130, height=130))
+ self.assertEqual(windows[1].rect, Rect(x=400, y=420, width=150, height=130))
+ self.assertEqual(windows[2].rect, Rect(x=50, y=400, width=170, height=130))
+
+ def test_newly_created_window_gets_keyboard_focus(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=0, y=0, width=800, height=800)
+ window = Window(parent=screen, rect=Rect(x=0, y=0, width=800, height=800), title='root')
+
+ ActionChains(self._driver).key_down('c').key_up('c').perform()
+
+ events = window.events
+ self.assertEqual(len(events), 2)
+ self.assertEqual(events[-2]['type'], 'keyPress')
+ self.assertEqual(events[-2]['key'], 'c')
+ self.assertEqual(events[-1]['type'], 'keyRelease')
+ self.assertEqual(events[-1]['key'], 'c')
+
+ #TODO FIX IN CI
+ @unittest.skip('Does not work in CI')
+ def test_child_window_activation(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=0, y=0, width=800, height=800)
+
+ root = Window(parent=screen, rect=Rect(x=0, y=0, width=800, height=800), title='root')
+ w1 = Window(parent=root, rect=Rect(x=100, y=100, width=600, height=600), title='w1')
+ w1_w1 = Window(parent=w1, rect=Rect(x=100, y=100, width=300, height=300), title='w1_w1')
+ w1_w1_w1 = Window(parent=w1_w1, rect=Rect(x=100, y=100, width=100, height=100), title='w1_w1_w1')
+ w1_w1_w2 = Window(parent=w1_w1, rect=Rect(x=150, y=150, width=100, height=100), title='w1_w1_w2')
+ w1_w2 = Window(parent=w1, rect=Rect(x=300, y=300, width=300, height=300), title='w1_w2')
+ w1_w2_w1 = Window(parent=w1_w2, rect=Rect(x=100, y=100, width=100, height=100), title='w1_w2_w1')
+ w2 = Window(parent=root, rect=Rect(x=300, y=300, width=450, height=450), title='w2')
+
+ self.assertEqual(screen.window_stack_at_point(*w1_w1.bounding_box.center),
+ [w2, w1_w1_w2, w1_w1_w1, w1_w1, w1, root])
+
+ self.assertEqual(screen.window_stack_at_point(*w2.bounding_box.center),
+ [w2, w1_w2_w1, w1_w2, w1, root])
+
+ for w in [w1, w1_w1, w1_w1_w1, w1_w1_w2, w1_w2, w1_w2_w1]:
+ self.assertFalse(w.active)
+ self.assertTrue(w2.active)
+
+ w1.click(0, 0)
+
+ for w in [w1, w1_w2, w1_w2_w1]:
+ self.assertTrue(w.active)
+ for w in [w1_w1, w1_w1_w1, w1_w1_w2, w2]:
+ self.assertFalse(w.active)
+
+ self.assertEqual(screen.window_stack_at_point(*w2.bounding_box.center),
+ [w1_w2_w1, w1_w2, w1, w2, root])
+
+ w1_w1_w1.click(0, 0)
+
+ for w in [w1, w1_w1, w1_w1_w1]:
+ self.assertTrue(w.active)
+ for w in [w1_w1_w2, w1_w2, w1_w2_w1, w2]:
+ self.assertFalse(w.active)
+
+ self.assertEqual(screen.window_stack_at_point(*w1_w1_w1.bounding_box.center),
+ [w1_w1_w1, w1_w1_w2, w1_w1, w1, w2, root])
+
+ w1_w1_w2.click(w1_w1_w2.bounding_box.width, w1_w1_w2.bounding_box.height)
+
+ for w in [w1, w1_w1, w1_w1_w2]:
+ self.assertTrue(w.active)
+ for w in [w1_w1_w1, w1_w2, w1_w2_w1, w2]:
+ self.assertFalse(w.active)
+
+ self.assertEqual(screen.window_stack_at_point(w1_w1_w2.bounding_box.x, w1_w1_w2.bounding_box.y),
+ [w1_w1_w2, w1_w1_w1, w1_w1, w1, w2, root])
+
+ def test_window_reparenting(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=0, y=0, width=800, height=800)
+
+ bottom = Window(parent=screen, rect=Rect(x=800, y=800, width=300, height=300), title='bottom')
+ w1 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w1')
+ w2 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w2')
+ w3 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w3')
+
+ self.assertTrue(
+ w2.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w2.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+
+ w2.set_parent(w1)
+
+ self.assertTrue(
+ w2.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w2.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+
+ w3.set_parent(w2)
+
+ self.assertTrue(
+ w2.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w2.element in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+
+ w2.set_parent(screen)
+
+ self.assertTrue(
+ w2.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w2.element in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+
+ w1.set_parent(w2)
+
+ self.assertTrue(
+ w2.element in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w2.element in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+
+ w3.set_parent(screen)
+
+ self.assertTrue(
+ w2.element in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w2.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+
+ w2.set_parent(w3)
+
+ self.assertTrue(
+ w2.element in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element in [*w1.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element not in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w3.element in [*w2.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w1.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+ self.assertTrue(
+ w2.element not in [*w3.element.find_elements(By.XPATH, "ancestor::div")])
+
+ def test_window_closing(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=0, y=0, width=800, height=800)
+
+ bottom = Window(parent=screen, rect=Rect(x=800, y=800, width=300, height=300), title='root')
+ bottom.close()
+
+ w1 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w1')
+ w2 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w2')
+ w3 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w3')
+
+ w3.close()
+
+ self.assertFalse(w3 in screen.query_windows())
+ self.assertTrue(w2 in screen.query_windows())
+ self.assertTrue(w1 in screen.query_windows())
+
+ w4 = Window(parent=screen, rect=Rect(x=50, y=50, width=300, height=300), title='w4')
+
+ self.assertTrue(w4 in screen.query_windows())
+ self.assertTrue(w2 in screen.query_windows())
+ self.assertTrue(w1 in screen.query_windows())
+
+ w2.close()
+ w1.close()
+
+ self.assertTrue(w4 in screen.query_windows())
+ self.assertFalse(w2 in screen.query_windows())
+ self.assertFalse(w1 in screen.query_windows())
+
+ w4.close()
+
+ self.assertFalse(w4 in screen.query_windows())
+
+ def test_window_painting(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=0, y=0, width=800, height=800)
+ bottom = Window(parent=screen, rect=Rect(x=0, y=0, width=400, height=400), title='root')
+ bottom.set_background_color(Color(r=255, g=0, b=0))
+ wait_for_animation_frame(self._driver)
+
+ self.assertEqual(bottom.color_at(0, 0), Color(r=255, g=0, b=0))
+
+ w1 = Window(parent=screen, rect=Rect(x=100, y=100, width=600, height=600), title='w1')
+ w1.set_background_color(Color(r=0, g=255, b=0))
+ wait_for_animation_frame(self._driver)
+
+ self.assertEqual(w1.color_at(0, 0), Color(r=0, g=255, b=0))
+
+ w1_w1 = Window(parent=screen, rect=Rect(x=100, y=100, width=400, height=400), title='w1_w1')
+ w1_w1.set_parent(w1)
+ w1_w1.set_background_color(Color(r=0, g=0, b=255))
+ wait_for_animation_frame(self._driver)
+
+ self.assertEqual(w1_w1.color_at(0, 0), Color(r=0, g=0, b=255))
+
+ w1_w1_w1 = Window(parent=screen, rect=Rect(x=100, y=100, width=200, height=200), title='w1_w1_w1')
+ w1_w1_w1.set_parent(w1_w1)
+ w1_w1_w1.set_background_color(Color(r=255, g=255, b=0))
+ wait_for_animation_frame(self._driver)
+
+ self.assertEqual(w1_w1_w1.color_at(0, 0), Color(r=255, g=255, b=0))
+
+ def test_opengl_painting(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=0, y=0, width=800, height=800)
+ bottom = Window(parent=screen, rect=Rect(x=0, y=0, width=400, height=400), title='root',opengl=1)
+ bottom.set_background_color(Color(r=255, g=0, b=0))
+ wait_for_animation_frame(self._driver)
+ time.sleep(1)
+
+ self.assertEqual(bottom.window_color_at_0_0(), Color(r=255, g=0, b=0))
+
+ w1 = Window(parent=screen, rect=Rect(x=100, y=100, width=600, height=600), title='w1', opengl=1)
+ w1.set_background_color(Color(r=0, g=255, b=0))
+ wait_for_animation_frame(self._driver)
+ time.sleep(1)
+
+ self.assertEqual(w1.window_color_at_0_0(), Color(r=0, g=255, b=0))
+
+ w1_w1 = Window(parent=screen, rect=Rect(x=100, y=100, width=400, height=400), title='w1_w1', opengl=1)
+ w1_w1.set_parent(w1)
+ w1_w1.set_background_color(Color(r=0, g=0, b=255))
+ wait_for_animation_frame(self._driver)
+ time.sleep(1)
+
+ self.assertEqual(w1_w1.window_color_at_0_0(), Color(r=0, g=0, b=255))
+
+ w1_w1_w1 = Window(parent=screen, rect=Rect(x=100, y=100, width=200, height=200), title='w1_w1_w1', opengl=1)
+ w1_w1_w1.set_parent(w1_w1)
+ w1_w1_w1.set_background_color(Color(r=255, g=255, b=0))
+ wait_for_animation_frame(self._driver)
+ time.sleep(1)
+
+ self.assertEqual(w1_w1_w1.window_color_at_0_0(), Color(r=255, g=255, b=0))
+
+#TODO FIX IN CI
+ @unittest.skip('Does not work in CI')
+ def test_keyboard_input(self):
+ screen = Screen(self._driver, ScreenPosition.FIXED,
+ x=0, y=0, width=800, height=800)
+
+ bottom = Window(parent=screen, rect=Rect(x=0, y=0, width=800, height=800), title='root')
+ w1 = Window(parent=screen, rect=Rect(x=100, y=100, width=600, height=600), title='w1')
+ w1_w1 = Window(parent=w1, rect=Rect(x=100, y=100, width=400, height=400), title='w1_w1')
+ w1_w1_w1 = Window(parent=w1_w1, rect=Rect(x=100, y=100, width=100, height=100), title='w1_w1_w1')
+ Window(parent=w1_w1, rect=Rect(x=150, y=150, width=100, height=100), title='w1_w1_w2')
+
+ w1_w1_w1.click(0, 0)
+
+ ActionChains(self._driver).key_down('c').key_up('c').perform()
+
+ events = w1_w1_w1.events
+ self.assertEqual(len(events), 2)
+ self.assertEqual(events[-2]['type'], 'keyPress')
+ self.assertEqual(events[-2]['key'], 'c')
+ self.assertEqual(events[-1]['type'], 'keyRelease')
+ self.assertEqual(events[-1]['key'], 'c')
+ self.assertEqual(len(w1_w1.events), 0)
+ self.assertEqual(len(w1.events), 0)
+
+ w1_w1.click(0, 0)
+
+ ActionChains(self._driver).key_down('b').key_up('b').perform()
+
+ events = w1_w1.events
+ self.assertEqual(len(events), 2)
+ self.assertEqual(events[-2]['type'], 'keyPress')
+ self.assertEqual(events[-2]['key'], 'b')
+ self.assertEqual(events[-1]['type'], 'keyRelease')
+ self.assertEqual(events[-1]['key'], 'b')
+ self.assertEqual(len(w1_w1_w1.events), 2)
+ self.assertEqual(len(w1.events), 0)
+
+ w1.click(0, 0)
+
+ ActionChains(self._driver).key_down('a').key_up('a').perform()
+
+ events = w1.events
+ self.assertEqual(len(events), 2)
+ self.assertEqual(events[-2]['type'], 'keyPress')
+ self.assertEqual(events[-2]['key'], 'a')
+ self.assertEqual(events[-1]['type'], 'keyRelease')
+ self.assertEqual(events[-1]['key'], 'a')
+ self.assertEqual(len(w1_w1_w1.events), 2)
+ self.assertEqual(len(w1_w1.events), 2)
+
+ def tearDown(self):
+ self._driver.quit()
+
+class ScreenPosition(Enum):
+ FIXED = auto()
+ RELATIVE = auto()
+ IN_SCROLL_CONTAINER = auto()
+
+class Screen:
+ def __init__(self, driver, positioning=None, x=None, y=None, width=None, height=None, container_width=0, container_height=0, screen_name=None):
+ self.driver = driver
+ if screen_name is not None:
+ screen_information = call_instance_function(self.driver, 'screenInformation')
+ if len(screen_information) != 1:
+ raise AssertionError('Expecting exactly one screen_information!')
+ self.screen_info = screen_information[0]
+ self.element = driver.find_element(By.CSS_SELECTOR, f'#test-screen-1')
+ return
+
+ if positioning == ScreenPosition.FIXED:
+ command = f'initializeScreenWithFixedPosition({x}, {y}, {width}, {height})'
+ elif positioning == ScreenPosition.RELATIVE:
+ command = f'initializeScreenWithRelativePosition({x}, {y}, {width}, {height})'
+ elif positioning == ScreenPosition.IN_SCROLL_CONTAINER:
+ command = f'initializeScreenInScrollContainer({container_width}, {container_height}, {x}, {y}, {width}, {height})'
+ self.element = self.driver.execute_script(
+ f'''
+ return testSupport.{command};
+ '''
+ )
+ if positioning == ScreenPosition.IN_SCROLL_CONTAINER:
+ self.element = self.element[1]
+
+ screen_information = call_instance_function(
+ self.driver, 'screenInformation')
+ if len(screen_information) != 1:
+ raise AssertionError('Expecting exactly one screen_information!')
+ self.screen_info = screen_information[0]
+
+ @property
+ def rect(self):
+ self.screen_info = call_instance_function(
+ self.driver, 'screenInformation')[0]
+ geo = self.screen_info['geometry']
+ return Rect(geo['x'], geo['y'], geo['width'], geo['height'])
+
+ @property
+ def name(self):
+ return self.screen_info['name']
+
+ def scroll_to(self):
+ ActionChains(self.driver).scroll_to_element(self.element).perform()
+
+ def hit_test_point(self, x, y):
+ return self.driver.execute_script(
+ f'''
+ return testSupport.hitTestPoint({x}, {y}, '{self.element.get_attribute("id")}');
+ '''
+ )
+
+ def window_stack_at_point(self, x, y):
+ return [
+ Window(self, element=element) for element in [
+ *filter(lambda elem: (elem.get_attribute('id') if elem.get_attribute('id') is not None else '')
+ .startswith('qt-window-'), self.hit_test_point(x, y))]]
+
+ def query_windows(self):
+ shadow_container = self.element.find_element(By.CSS_SELECTOR, f'#qt-shadow-container')
+ return [
+ Window(self, element=element) for element in shadow_container.shadow_root.find_elements(
+ By.CSS_SELECTOR, f'div#{self.name} > div.qt-window')]
+
+ def find_element(self, method, query):
+ shadow_container = self.element.find_element(By.CSS_SELECTOR, f'#qt-shadow-container')
+ return shadow_container.shadow_root.find_element(method, query)
+
+def clearWidgets(driver):
+ driver.execute_script(
+ f'''
+ instance.clearWidgets();
+ '''
+ )
+
+class Widget:
+ def __init__(self, driver, name):
+ self.name=name
+ self.driver=driver
+
+ self.driver.execute_script(
+ f'''
+ instance.createWidget('{self.name}');
+ '''
+ )
+
+ def setNoFocusShow(self):
+ self.driver.execute_script(
+ f'''
+ instance.setWidgetNoFocusShow('{self.name}');
+ '''
+ )
+
+ def show(self):
+ self.driver.execute_script(
+ f'''
+ instance.showWidget('{self.name}');
+ '''
+ )
+ def hasFocus(self):
+ focus = call_instance_function_arg(self.driver, 'hasWidgetFocus', self.name)
+ return focus
+
+ def activate(self):
+ self.driver.execute_script(
+ f'''
+ instance.activateWidget('{self.name}');
+ '''
+ )
+
+
+class Window:
+ def __init__(self, parent=None, rect=None, title=None, element=None, visible=True, opengl=0):
+ self.driver = parent.driver
+ self.opengl = opengl
+ if element is not None:
+ self.element = element
+ self.title = element.find_element(
+ By.CSS_SELECTOR, f'.title-bar > .window-name').get_property("textContent")
+ information = self.__window_information()
+ self.screen = Screen(self.driver, screen_name=information['screen']['name'])
+ pass
+ else:
+ self.title = title = title if title is not None else 'window'
+ if isinstance(parent, Window):
+ self.driver.execute_script(
+ f'''
+ instance.createWindow({rect.x}, {rect.y}, {rect.width}, {rect.height}, 'window', '{parent.title}', '{title}', {opengl});
+ '''
+ )
+ self.screen = parent.screen
+ else:
+ assert(isinstance(parent, Screen))
+ self.driver.execute_script(
+ f'''
+ instance.createWindow({rect.x}, {rect.y}, {rect.width}, {rect.height}, 'screen', '{parent.name}', '{title}', {opengl});
+ '''
+ )
+ self.screen = parent
+ self._window_id = self.__window_information()['id']
+ self.element = self.screen.find_element(
+ By.CSS_SELECTOR, f'#qt-window-{self._window_id}')
+ if visible:
+ self.set_visible(True)
+
+ def __eq__(self, other):
+ return self._window_id == other._window_id if isinstance(other, Window) else False
+
+ def __window_information(self):
+ information = call_instance_function(self.driver, 'windowInformation')
+ return next(filter(lambda e: e['title'] == self.title, information))
+
+ @property
+ def rect(self):
+ geo = self.__window_information()["geometry"]
+ return Rect(geo['x'], geo['y'], geo['width'], geo['height'])
+
+ @property
+ def frame_rect(self):
+ geo = self.__window_information()["frameGeometry"]
+ return Rect(geo['x'], geo['y'], geo['width'], geo['height'])
+
+ @property
+ def events(self):
+ events = self.driver.execute_script(
+ f'''
+ return testSupport.events();
+ '''
+ )
+ return [*filter(lambda e: e['windowTitle'] == self.title, events)]
+
+ def set_visible(self, visible):
+ info = self.__window_information()
+ self.driver.execute_script(
+ f'''instance.setWindowVisible({info['id']}, {'true' if visible else 'false'});''')
+
+ def drag(self, handle, direction):
+ ActionChains(self.driver) \
+ .move_to_element_with_offset(self.element, *self.at(handle)['offset']) \
+ .click_and_hold() \
+ .move_by_offset(*translate_direction_to_offset(direction)) \
+ .release().perform()
+
+ def maximize(self):
+ maximize_button = self.element.find_element(
+ By.CSS_SELECTOR, f'.title-bar :nth-child(6)')
+ maximize_button.click()
+
+ def at(self, handle):
+ """ Returns (window, offset) for given handle on window"""
+ width = self.frame_rect.width
+ height = self.frame_rect.height
+
+ if handle == Handle.TOP_LEFT:
+ offset = (-width/2, -height/2)
+ elif handle == Handle.TOP:
+ offset = (0, -height/2)
+ elif handle == Handle.TOP_RIGHT:
+ offset = (width/2, -height/2)
+ elif handle == Handle.LEFT:
+ offset = (-width/2, 0)
+ elif handle == Handle.RIGHT:
+ offset = (width/2, 0)
+ elif handle == Handle.BOTTOM_LEFT:
+ offset = (-width/2, height/2)
+ elif handle == Handle.BOTTOM:
+ offset = (0, height/2)
+ elif handle == Handle.BOTTOM_RIGHT:
+ offset = (width/2, height/2)
+ elif handle == Handle.TOP_WINDOW_BAR:
+ frame_top = self.frame_rect.y
+ client_area_top = self.rect.y
+ top_frame_bar_width = client_area_top - frame_top
+ offset = (0, -height/2 + top_frame_bar_width/2)
+ return {'window': self, 'offset': offset}
+
+ @property
+ def bounding_box(self):
+ raw = self.driver.execute_script("""
+ return arguments[0].getBoundingClientRect();
+ """, self.element)
+ return Rect(raw['x'], raw['y'], raw['width'], raw['height'])
+
+ @property
+ def active(self):
+ return not self.inactive
+ # self.assertFalse('inactive' in window_element.get_attribute(
+ # 'class').split(' '), window_element.get_attribute('id'))
+
+ @property
+ def inactive(self):
+ window_chain = [
+ *self.element.find_elements(By.XPATH, "ancestor::div"), self.element]
+ return next(filter(lambda elem: 'qt-window' in elem.get_attribute('class').split(' ') and
+ 'inactive' in elem.get_attribute(
+ 'class').split(' '),
+ window_chain
+ ), None) is not None
+
+ def click(self, x, y):
+ rect = self.bounding_box
+
+ SELENIUM_IMPRECISION_COMPENSATION = 2
+ ActionChains(self.driver).move_to_element(
+ self.element).move_by_offset(-rect.width / 2 + x + SELENIUM_IMPRECISION_COMPENSATION,
+ -rect.height / 2 + y + SELENIUM_IMPRECISION_COMPENSATION).click().perform()
+
+ def set_parent(self, parent):
+ if isinstance(parent, Screen):
+ # TODO won't work with screen that is not parent.screen
+ self.screen = parent
+ self.driver.execute_script(
+ f'''
+ instance.setWindowParent('{self.title}', 'none');
+ '''
+ )
+ else:
+ assert(isinstance(parent, Window))
+ self.screen = parent.screen
+ self.driver.execute_script(
+ f'''
+ instance.setWindowParent('{self.title}', '{parent.title}');
+ '''
+ )
+
+ def close(self):
+ self.driver.execute_script(
+ f'''
+ instance.closeWindow('{self.title}');
+ '''
+ )
+
+ def window_color_at_0_0(self):
+ color = call_instance_function_arg(self.driver, 'getOpenGLColorAt_0_0', self.title)
+
+ wcol = color[0]
+ r = wcol['r']
+ g = wcol['g']
+ b = wcol['b']
+
+ return Color(r,g,b)
+
+ def color_at(self, x, y):
+ raw = self.driver.execute_script(
+ f'''
+ return arguments[0].querySelector('canvas')
+ .getContext('2d').getImageData({x}, {y}, 1, 1).data;
+ ''', self.element)
+ return Color(r=raw[0], g=raw[1], b=raw[2])
+
+ def set_background_color(self, color):
+ return self.driver.execute_script(
+ f'''
+ return instance.setWindowBackgroundColor('{self.title}', {color.r}, {color.g}, {color.b});
+ '''
+ )
+
+
+class TouchDragAction:
+ def __init__(self, origin, direction):
+ self.origin = origin
+ self.direction = direction
+ self.step = 2
+
+
+def perform_touch_drag_actions(actions):
+ driver = actions[0].origin['window'].driver
+ touch_action_builder = ActionBuilder(driver)
+ pointers = [PointerActions(source=touch_action_builder.add_pointer_input(
+ POINTER_TOUCH, f'touch_input_{i}')) for i in range(len(actions))]
+
+ for action, pointer in zip(actions, pointers):
+ pointer.move_to(
+ action.origin['window'].element, *action.origin['offset'])
+ pointer.pointer_down(width=10, height=10, pressure=1)
+ moves = [translate_direction_to_offset(a.direction) for a in actions]
+
+ def movement_finished():
+ for move in moves:
+ if move != (0, 0):
+ return False
+ return True
+
+ def sign(num):
+ if num > 0:
+ return 1
+ elif num < 0:
+ return -1
+ return 0
+
+ while not movement_finished():
+ for i in range(len(actions)):
+ pointer = pointers[i]
+ move = moves[i]
+ step = actions[i].step
+
+ current_move = (
+ min(abs(move[0]), step) * sign(move[0]), min(abs(move[1]), step) * sign(move[1]))
+ moves[i] = (move[0] - current_move[0], move[1] - current_move[1])
+ pointer.move_by(current_move[0],
+ current_move[1], width=10, height=10)
+ for pointer in pointers:
+ pointer.pointer_up()
+
+ touch_action_builder.perform()
+
+
+class TouchDragAction:
+ def __init__(self, origin, direction):
+ self.origin = origin
+ self.direction = direction
+ self.step = 2
+
+
+def perform_touch_drag_actions(actions):
+ driver = actions[0].origin['window'].driver
+ touch_action_builder = ActionBuilder(driver)
+ pointers = [PointerActions(source=touch_action_builder.add_pointer_input(
+ POINTER_TOUCH, f'touch_input_{i}')) for i in range(len(actions))]
+
+ for action, pointer in zip(actions, pointers):
+ pointer.move_to(
+ action.origin['window'].element, *action.origin['offset'])
+ pointer.pointer_down(width=10, height=10, pressure=1)
+
+ moves = [translate_direction_to_offset(a.direction) for a in actions]
+
+ def movement_finished():
+ for move in moves:
+ if move != (0, 0):
+ return False
+ return True
+
+ def sign(num):
+ if num > 0:
+ return 1
+ elif num < 0:
+ return -1
+ return 0
+
+ while not movement_finished():
+ for i in range(len(actions)):
+ pointer = pointers[i]
+ move = moves[i]
+ step = actions[i].step
+
+ current_move = (
+ min(abs(move[0]), step) * sign(move[0]), min(abs(move[1]), step) * sign(move[1]))
+ moves[i] = (move[0] - current_move[0], move[1] - current_move[1])
+ pointer.move_by(current_move[0],
+ current_move[1], width=10, height=10)
+
+ for pointer in pointers:
+ pointer.pointer_up()
+
+ touch_action_builder.perform()
+
+
+def translate_direction_to_offset(direction):
+ return (direction.val[1] - direction.val[3], direction.val[2] - direction.val[0])
+
+
+def call_instance_function(driver, name):
+ return driver.execute_script(
+ f'''let result;
+ window.{name}Callback = data => result = data;
+ instance.{name}();
+ return eval(result);''')
+
+def call_instance_function_arg(driver, name, arg):
+ return driver.execute_script(
+ f'''let result;
+ window.{name}Callback = data => result = data;
+ instance.{name}('{arg}');
+ return eval(result);''')
+
+def wait_for_animation_frame(driver):
+ driver.execute_script(
+ '''
+ window.requestAnimationFrame(() => {
+ const sync = document.createElement('div');
+ sync.id = 'test-sync';
+ document.body.appendChild(sync);
+ });
+ '''
+ )
+ WebDriverWait(driver, 1).until(
+ presence_of_element_located((By.ID, 'test-sync'))
+ )
+ driver.execute_script(
+ '''
+ document.body.removeChild(document.body.querySelector('#test-sync'));
+ '''
+ )
+
+class Direction:
+ def __init__(self):
+ self.val = (0, 0, 0, 0)
+
+ def __init__(self, north, east, south, west):
+ self.val = (north, east, south, west)
+
+ def __add__(self, other):
+ return Direction(self.val[0] + other.val[0],
+ self.val[1] + other.val[1],
+ self.val[2] + other.val[2],
+ self.val[3] + other.val[3])
+
+
+class UP(Direction):
+ def __init__(self, step=1):
+ self.val = (step, 0, 0, 0)
+
+
+class RIGHT(Direction):
+ def __init__(self, step=1):
+ self.val = (0, step, 0, 0)
+
+
+class DOWN(Direction):
+ def __init__(self, step=1):
+ self.val = (0, 0, step, 0)
+
+
+class LEFT(Direction):
+ def __init__(self, step=1):
+ self.val = (0, 0, 0, step)
+
+
+class Handle(Enum):
+ TOP_LEFT = auto()
+ TOP = auto()
+ TOP_RIGHT = auto()
+ LEFT = auto()
+ RIGHT = auto()
+ BOTTOM_LEFT = auto()
+ BOTTOM = auto()
+ BOTTOM_RIGHT = auto()
+ TOP_WINDOW_BAR = auto()
+
+class Color:
+ def __init__(self, r, g, b):
+ self.r = r
+ self.g = g
+ self.b = b
+
+class Rect:
+ def __init__(self, x, y, width, height) -> None:
+ self.x = x
+ self.y = y
+ self.width = width
+ self.height = height
+
+ def __str__(self):
+ return f'(x: {self.x}, y: {self.y}, width: {self.width}, height: {self.height})'
+
+ @property
+ def center(self):
+ return self.x + self.width / 2, self.y + self.height / 2,
+
+def assert_colors_equal(color1, color2, msg=None):
+ if color1.r != color2.r or color1.g != color2.g or color1.b != color2.b:
+ raise AssertionError(f'Colors not equal: \n{color1} \nvs \n{color2}')
+
+def assert_rects_equal(geo1, geo2, msg=None):
+ if geo1.x != geo2.x or geo1.y != geo2.y or geo1.width != geo2.width or geo1.height != geo2.height:
+ raise AssertionError(f'Rectangles not equal: \n{geo1} \nvs \n{geo2}')
+
+unittest.main()
diff --git a/tests/auto/wasm/selenium/run.bat b/tests/auto/wasm/selenium/run.bat
new file mode 100644
index 0000000000..031e0b13ab
--- /dev/null
+++ b/tests/auto/wasm/selenium/run.bat
@@ -0,0 +1,7 @@
+::
+:: The highest version of python that can be used is 3.11
+:: Download from here: https://www.python.org/downloads/release/python-3118/
+::
+start "qtwasmserver.py" python qtwasmserver.py -p 8001
+python qwasmwindow.py
+taskkill /FI "WINDOWTITLE eq qtwasmserver.py"
diff --git a/tests/auto/wasm/selenium/run.sh b/tests/auto/wasm/selenium/run.sh
new file mode 100755
index 0000000000..b9a41ace8c
--- /dev/null
+++ b/tests/auto/wasm/selenium/run.sh
@@ -0,0 +1,58 @@
+#! /bin/bash
+
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+set -m
+
+function removeServer()
+{
+ [ -z "$cleanupPid" ] || kill $cleanupPid
+}
+trap removeServer EXIT
+
+function compare_python_versions() {
+ python_version=$1
+ required_version=$2
+ if [ "$(printf "%s\n" "$required_version" "$python_version" | sort -V | head -n 1)" != "$required_version" ]; then
+ return 0 # python version is too old
+ else
+ return 1 # python version is legit
+ fi
+}
+
+python_command="python3"
+# At least python 3.7 is required for Selenium 4
+if command -v python3 &> /dev/null; then
+ python_version=$(python3 --version 2>&1 | awk '{print $2}')
+
+ if compare_python_versions "$python_version" "3.7"; then # if Python is older then 3.7, look for newer versions
+ newer_python=""
+ for version in 3.7 3.8 3.9 3.10 3.11; do
+ potential_python=$(command -v "python$version")
+ if [ -n "$potential_python" ]; then
+ newer_python=$potential_python
+ newer_version=$($newer_python --version 2>&1 | awk '{print $2}')
+ break
+ fi
+ done
+
+ if [ -n "$newer_python" ]; then # if newer version is found, use it instead
+ newer_version=$($newer_python --version 2>&1 | awk '{print $2}')
+ python_command=$newer_python
+ else
+ echo "Error: At least Python3.7 is required, currently installed version: Python$python_version"
+ exit 1
+ fi
+ fi
+else
+ echo "Error: Python3 not installed"
+ exit 1
+fi
+
+script_dir=`dirname ${BASH_SOURCE[0]}`
+cd "$script_dir"
+$python_command qtwasmserver.py -p 8001 > /dev/null 2>&1 &
+cleanupPid=$!
+
+$python_command qwasmwindow.py $@
diff --git a/tests/auto/wasm/selenium/shaders.qrc b/tests/auto/wasm/selenium/shaders.qrc
new file mode 100644
index 0000000000..bfc4b25111
--- /dev/null
+++ b/tests/auto/wasm/selenium/shaders.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>vshader.glsl</file>
+ <file>fshader.glsl</file>
+ </qresource>
+</RCC>
diff --git a/tests/auto/wasm/selenium/tst_qwasmwindow_harness.cpp b/tests/auto/wasm/selenium/tst_qwasmwindow_harness.cpp
new file mode 100644
index 0000000000..365fc74a34
--- /dev/null
+++ b/tests/auto/wasm/selenium/tst_qwasmwindow_harness.cpp
@@ -0,0 +1,696 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QEvent>
+#include <QtWidgets/qwidget.h>
+
+#include <QtGui/qevent.h>
+#include <QtCore/qobject.h>
+#include <QtCore/qregularexpression.h>
+#include <QtGui/qpainter.h>
+#include <QtGui/qrasterwindow.h>
+#include <QtGui/qscreen.h>
+#include <QtGui/qwindow.h>
+#include <QtGui/qguiapplication.h>
+#include <QtWidgets/qlineedit.h>
+#include <QApplication>
+#include <QDialog>
+#include <QSysInfo>
+
+#include <QOpenGLWindow>
+#include <QOpenGLFunctions>
+#include <QOpenGLShaderProgram>
+
+#include <emscripten.h>
+#include <emscripten/bind.h>
+#include <emscripten/val.h>
+
+#include <memory>
+#include <sstream>
+#include <vector>
+
+class TestWindowBase
+{
+public:
+ virtual ~TestWindowBase() {}
+ virtual void setBackgroundColor(int r, int g, int b) = 0;
+ virtual void setVisible(bool visible) = 0;
+ virtual void setParent(QWindow *parent) = 0;
+ virtual bool close() = 0;
+ virtual QWindow *qWindow() = 0;
+ virtual void opengl_color_at_0_0(int *r, int *g, int *b) = 0;
+};
+
+class TestWidget : public QDialog
+{
+ Q_OBJECT
+};
+
+class TestWindow : public QRasterWindow, public TestWindowBase
+{
+ Q_OBJECT
+
+public:
+ virtual void setBackgroundColor(int r, int g, int b) override final
+ {
+ m_backgroundColor = QColor::fromRgb(r, g, b);
+ update();
+ }
+ virtual void setVisible(bool visible) override final
+ {
+ QRasterWindow::setVisible(visible);
+ }
+ virtual void setParent(QWindow *parent) override final
+ {
+ QRasterWindow::setParent(parent);
+ }
+ virtual bool close() override final
+ {
+ return QRasterWindow::close();
+ }
+ virtual QWindow *qWindow() override final
+ {
+ return static_cast<QRasterWindow *>(this);
+ }
+ virtual void opengl_color_at_0_0(int *r, int *g, int *b) override final
+ {
+ *r = 0;
+ *g = 0;
+ *b = 0;
+ }
+
+private:
+ void closeEvent(QCloseEvent *ev) override final
+ {
+ Q_UNUSED(ev);
+ delete this;
+ }
+
+ void keyPressEvent(QKeyEvent *event) final
+ {
+ auto data = emscripten::val::object();
+ data.set("type", emscripten::val("keyPress"));
+ data.set("windowId", emscripten::val(winId()));
+ data.set("windowTitle", emscripten::val(title().toStdString()));
+ data.set("key", emscripten::val(event->text().toStdString()));
+ emscripten::val::global("window")["testSupport"].call<void>("reportEvent", std::move(data));
+ }
+
+ void keyReleaseEvent(QKeyEvent *event) final
+ {
+ auto data = emscripten::val::object();
+ data.set("type", emscripten::val("keyRelease"));
+ data.set("windowId", emscripten::val(winId()));
+ data.set("windowTitle", emscripten::val(title().toStdString()));
+ data.set("key", emscripten::val(event->text().toStdString()));
+ emscripten::val::global("window")["testSupport"].call<void>("reportEvent", std::move(data));
+ }
+
+ void paintEvent(QPaintEvent *e) final
+ {
+ QPainter painter(this);
+ painter.fillRect(e->rect(), m_backgroundColor);
+ }
+
+ QColor m_backgroundColor = Qt::white;
+};
+
+class ContextGuard
+{
+public:
+ ContextGuard(QOpenGLContext *context, QSurface *surface) : m_context(context)
+ {
+ m_contextMutex.lock();
+ m_context->makeCurrent(surface);
+ }
+
+ ~ContextGuard()
+ {
+ m_context->doneCurrent();
+ m_contextMutex.unlock();
+ }
+
+private:
+ QOpenGLContext *m_context = nullptr;
+ static std::mutex m_contextMutex;
+};
+
+std::mutex ContextGuard::m_contextMutex;
+
+class TestOpenGLWindow : public QWindow, QOpenGLFunctions, public TestWindowBase
+{
+ Q_OBJECT
+
+public:
+ TestOpenGLWindow()
+ {
+ setSurfaceType(OpenGLSurface);
+ create();
+
+ //
+ // Create the texture in the share context
+ //
+ m_shareContext = std::make_shared<QOpenGLContext>();
+ m_shareContext->create();
+
+ {
+ ContextGuard guard(m_shareContext.get(), this);
+ initializeOpenGLFunctions();
+
+ m_shaderProgram = std::make_shared<QOpenGLShaderProgram>();
+
+ if (!m_shaderProgram->addShaderFromSourceFile(QOpenGLShader::Vertex, ":/vshader.glsl")
+ || !m_shaderProgram->addShaderFromSourceFile(QOpenGLShader::Fragment,
+ ":/fshader.glsl")
+ || !m_shaderProgram->link() || !m_shaderProgram->bind()) {
+
+ qDebug() << " Build problem";
+ qDebug() << "Log " << m_shaderProgram->log();
+
+ m_shaderProgram = nullptr;
+ } else {
+ m_shaderProgram->setUniformValue("texture", 0);
+ }
+
+ //
+ // Texture
+ //
+ glGenTextures(1, &m_TextureId);
+ glBindTexture(GL_TEXTURE_2D, m_TextureId);
+
+ uint8_t pixel[4] = { 255, 255, 255, 128 };
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixel);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+
+ const GLfloat triangleData[] = { -1.0, -1.0, 0.0, 0.5, 0.5, 1.0, -1.0, 0.0,
+ 0.5, 0.5, -1.0, 1.0, 0.0, 0.5, 0.5 };
+ const GLushort indices[] = { 0, 1, 2 };
+
+ glGenBuffers(1, &m_vertexBufferId);
+ glBindBuffer(GL_ARRAY_BUFFER, m_vertexBufferId);
+ glBufferData(GL_ARRAY_BUFFER, sizeof(float[5]) * 3, &triangleData, GL_STATIC_DRAW);
+
+ glGenBuffers(1, &m_indexBufferId);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBufferId);
+ glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(GLushort) * 3, indices, GL_STATIC_DRAW);
+
+ glBindBuffer(GL_ARRAY_BUFFER, m_vertexBufferId);
+
+ glEnableVertexAttribArray(0);
+ glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float[5]), 0);
+
+ glEnableVertexAttribArray(1);
+ glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float[5]), (void *)(12));
+ }
+
+ //
+ // We will use the texture in this context
+ //
+ m_context = std::make_shared<QOpenGLContext>();
+ m_context->setShareContext(m_shareContext.get());
+ m_context->create();
+
+ {
+ ContextGuard guard(m_context.get(), this);
+ initializeOpenGLFunctions();
+
+ glBindTexture(GL_TEXTURE_2D, m_TextureId);
+ glBindBuffer(GL_ARRAY_BUFFER, m_vertexBufferId);
+ glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBufferId);
+ m_shaderProgram->bind();
+
+ // Tell OpenGL programmable pipeline how to locate vertex position data
+ const int vertexLocation = m_shaderProgram->attributeLocation("a_position");
+ m_shaderProgram->enableAttributeArray(vertexLocation);
+ m_shaderProgram->setAttributeBuffer(vertexLocation, GL_FLOAT, 0, 3, sizeof(float[5]));
+
+ // Tell OpenGL programmable pipeline how to locate vertex texture coordinate data
+ const int texcoordLocation = m_shaderProgram->attributeLocation("a_texcoord");
+ m_shaderProgram->enableAttributeArray(texcoordLocation);
+ m_shaderProgram->setAttributeBuffer(texcoordLocation, GL_FLOAT, sizeof(float[3]), 2,
+ sizeof(float[5]));
+ }
+
+ renderLater();
+ }
+
+public:
+ virtual void setBackgroundColor(int red, int green, int blue) override final
+ {
+ {
+ ContextGuard guard(m_shareContext.get(), this);
+
+ //
+ // Update texture
+ //
+ const uint8_t pixel[4] = { (uint8_t)red, (uint8_t)green, (uint8_t)blue, 128 };
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixel);
+ }
+
+ renderLater();
+ }
+ virtual void setVisible(bool visible) override final { QWindow::setVisible(visible); }
+ virtual void setParent(QWindow *parent) override final { QWindow::setParent(parent); }
+ virtual bool close() override final { return QWindow::close(); }
+ virtual QWindow *qWindow() override final { return static_cast<QWindow *>(this); }
+ virtual void opengl_color_at_0_0(int *r, int *g, int *b) override final
+ {
+ ContextGuard guard(m_context.get(), this);
+
+ *r = m_rgba[0];
+ *g = m_rgba[1];
+ *b = m_rgba[2];
+ }
+
+private:
+ bool event(QEvent *event) override final
+ {
+ switch (event->type()) {
+ case QEvent::UpdateRequest:
+ renderNow();
+ return true;
+ default:
+ return QWindow::event(event);
+ }
+ }
+
+ void exposeEvent(QExposeEvent *event) override final
+ {
+ Q_UNUSED(event);
+
+ if (isExposed())
+ renderNow();
+ }
+
+ void closeEvent(QCloseEvent *ev) override final
+ {
+ Q_UNUSED(ev);
+ delete this;
+ }
+
+ void keyPressEvent(QKeyEvent *event) override final
+ {
+ auto data = emscripten::val::object();
+ data.set("type", emscripten::val("keyPress"));
+ data.set("windowId", emscripten::val(winId()));
+ data.set("windowTitle", emscripten::val(title().toStdString()));
+ data.set("key", emscripten::val(event->text().toStdString()));
+ emscripten::val::global("window")["testSupport"].call<void>("reportEvent", std::move(data));
+ }
+
+ void keyReleaseEvent(QKeyEvent *event) override final
+ {
+ auto data = emscripten::val::object();
+ data.set("type", emscripten::val("keyRelease"));
+ data.set("windowId", emscripten::val(winId()));
+ data.set("windowTitle", emscripten::val(title().toStdString()));
+ data.set("key", emscripten::val(event->text().toStdString()));
+ emscripten::val::global("window")["testSupport"].call<void>("reportEvent", std::move(data));
+ }
+ void renderLater() { requestUpdate(); }
+ void renderNow()
+ {
+ qDebug() << " Render now";
+ ContextGuard guard(m_context.get(), this);
+ const auto sz = size();
+ glViewport(0, 0, sz.width(), sz.height());
+
+ glClearColor(1, 1, 1, 1);
+ glClear(GL_COLOR_BUFFER_BIT);
+
+ // Draw triangle using indices from VBO
+ glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, nullptr);
+
+ glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, m_rgba);
+ m_context->swapBuffers(this);
+ }
+
+private:
+ std::shared_ptr<QOpenGLShaderProgram> m_shaderProgram;
+ GLuint m_vertexBufferId = 0;
+ GLuint m_indexBufferId = 0;
+ GLuint m_TextureId = 0;
+
+ std::shared_ptr<QOpenGLContext> m_shareContext;
+ std::shared_ptr<QOpenGLContext> m_context;
+ uint8_t m_rgba[4]; // Color at location(0, 0)
+};
+
+namespace {
+TestWindowBase *findWindowByTitle(const std::string &title)
+{
+ auto windows = qGuiApp->allWindows();
+ auto window_it = std::find_if(windows.begin(), windows.end(), [&title](QWindow *window) {
+ return window->title() == QString::fromLatin1(title);
+ });
+ return window_it == windows.end() ? nullptr : dynamic_cast<TestWindowBase *>(*window_it);
+}
+
+class WidgetStorage
+{
+private:
+ ~WidgetStorage()
+ {
+ }
+public:
+ static WidgetStorage *getInstance()
+ {
+ if (!s_instance)
+ {
+ s_instance = new WidgetStorage();
+ }
+ return s_instance;
+ }
+ static void clearInstance()
+ {
+ delete s_instance;
+ s_instance = nullptr;
+ }
+
+ TestWidget *findWidget(const std::string &name)
+ {
+ auto it = m_widgets.find(name);
+ if (it != m_widgets.end())
+ return it->second.get();
+ return nullptr;
+ }
+
+ QLineEdit *findEdit(const std::string &name)
+ {
+ auto it = m_lineEdits.find(name);
+ if (it != m_lineEdits.end())
+ return it->second;
+ return nullptr;
+ }
+
+ void make(const std::string &name)
+ {
+ auto widget = std::make_shared<TestWidget>();
+ auto *lineEdit = new QLineEdit(widget.get());
+
+ widget->setMinimumSize(200, 200);
+ widget->setMaximumSize(200, 200);
+ widget->setGeometry(0, m_widgetY, 200, 200);
+ m_widgetY += 200;
+
+ lineEdit->setText("Hello world");
+
+ m_widgets[name] = widget;
+ m_lineEdits[name] = lineEdit;
+ }
+
+private:
+ using TestWidgetPtr = std::shared_ptr<TestWidget>;
+
+ static WidgetStorage * s_instance;
+ std::map<std::string, TestWidgetPtr> m_widgets;
+ std::map<std::string, QLineEdit *> m_lineEdits;
+ int m_widgetY = 0;
+};
+
+WidgetStorage *WidgetStorage::s_instance = nullptr;
+
+} // namespace
+
+using namespace emscripten;
+
+std::string toJSArray(const std::vector<std::string> &elements)
+{
+ std::ostringstream out;
+ out << "[";
+ bool comma = false;
+ for (const auto &element : elements) {
+ out << (comma ? "," : "");
+ out << element;
+ comma = true;
+ }
+ out << "]";
+ return out.str();
+}
+
+std::string toJSString(const QString &qstring)
+{
+ Q_ASSERT_X(([qstring]() {
+ static QRegularExpression unescapedQuoteRegex(R"re((?:^|[^\\])')re");
+ return qstring.indexOf(unescapedQuoteRegex) == -1;
+ })(),
+ Q_FUNC_INFO, "Unescaped single quotes found");
+ return "'" + qstring.toStdString() + "'";
+}
+
+std::string rectToJSObject(const QRect &rect)
+{
+ std::ostringstream out;
+ out << "{"
+ << " x: " << std::to_string(rect.x()) << ","
+ << " y: " << std::to_string(rect.y()) << ","
+ << " width: " << std::to_string(rect.width()) << ","
+ << " height: " << std::to_string(rect.height()) << "}";
+ return out.str();
+}
+
+std::string screenToJSObject(const QScreen &screen)
+{
+ std::ostringstream out;
+ out << "{"
+ << " name: " << toJSString(screen.name()) << ","
+ << " geometry: " << rectToJSObject(screen.geometry()) << "}";
+ return out.str();
+}
+
+std::string windowToJSObject(const QWindow &window)
+{
+ std::ostringstream out;
+ out << "{"
+ << " id: " << std::to_string(window.winId()) << ","
+ << " geometry: " << rectToJSObject(window.geometry()) << ","
+ << " frameGeometry: " << rectToJSObject(window.frameGeometry()) << ","
+ << " screen: " << screenToJSObject(*window.screen()) << ","
+ << " title: '" << window.title().toStdString() << "' }";
+ return out.str();
+}
+
+void windowInformation()
+{
+ auto windows = qGuiApp->allWindows();
+
+ std::vector<std::string> windowsAsJsObjects;
+ windowsAsJsObjects.reserve(windows.size());
+ std::transform(windows.begin(), windows.end(), std::back_inserter(windowsAsJsObjects),
+ [](const QWindow *window) { return windowToJSObject(*window); });
+
+ emscripten::val::global("window").call<void>("windowInformationCallback",
+ emscripten::val(toJSArray(windowsAsJsObjects)));
+}
+
+void screenInformation()
+{
+ auto screens = qGuiApp->screens();
+
+ std::vector<std::string> screensAsJsObjects;
+ screensAsJsObjects.reserve(screens.size());
+ std::transform(screens.begin(), screens.end(), std::back_inserter(screensAsJsObjects),
+ [](const QScreen *screen) { return screenToJSObject(*screen); });
+ emscripten::val::global("window").call<void>("screenInformationCallback",
+ emscripten::val(toJSArray(screensAsJsObjects)));
+}
+
+void createWidget(const std::string &name)
+{
+ WidgetStorage::getInstance()->make(name);
+}
+
+void setWidgetNoFocusShow(const std::string &name)
+{
+ auto w = WidgetStorage::getInstance()->findWidget(name);
+ if (w)
+ w->setAttribute(Qt::WA_ShowWithoutActivating);
+}
+
+void showWidget(const std::string &name)
+{
+ auto w = WidgetStorage::getInstance()->findWidget(name);
+ if (w)
+ w->show();
+}
+
+void hasWidgetFocus(const std::string &name)
+{
+ bool focus = false;
+ auto le = WidgetStorage::getInstance()->findEdit(name);
+ if (le)
+ focus = le->hasFocus();
+
+ emscripten::val::global("window").call<void>("hasWidgetFocusCallback",
+ emscripten::val(focus));
+}
+
+void activateWidget(const std::string &name)
+{
+ auto w = WidgetStorage::getInstance()->findWidget(name);
+ if (w)
+ w->activateWindow();
+}
+
+void clearWidgets()
+{
+ WidgetStorage::clearInstance();
+}
+
+void createWindow(int x, int y, int w, int h, const std::string &parentType, const std::string &parentId,
+ const std::string &title, bool opengl)
+{
+ QScreen *parentScreen = nullptr;
+ QWindow *parentWindow = nullptr;
+ if (parentType == "screen") {
+ auto screens = qGuiApp->screens();
+ auto screen_it = std::find_if(screens.begin(), screens.end(), [&parentId](QScreen *screen) {
+ return screen->name() == QString::fromLatin1(parentId);
+ });
+ if (screen_it == screens.end()) {
+ qWarning() << "No such screen: " << parentId;
+ return;
+ }
+ parentScreen = *screen_it;
+ } else if (parentType == "window") {
+ auto testWindow = findWindowByTitle(parentId);
+
+ if (!testWindow) {
+ qWarning() << "No parent window: " << parentId;
+ return;
+ }
+ parentWindow = testWindow->qWindow();
+ parentScreen = parentWindow->screen();
+ } else {
+ qWarning() << "Wrong parent type " << parentType;
+ return;
+ }
+
+ if (opengl) {
+ qDebug() << "Making OpenGL window";
+ auto window = new TestOpenGLWindow;
+ window->setFlag(Qt::WindowTitleHint);
+ window->setFlag(Qt::WindowMaximizeButtonHint);
+ window->setTitle(QString::fromLatin1(title));
+ window->setGeometry(x, y, w, h);
+ window->setScreen(parentScreen);
+ window->setParent(parentWindow);
+ } else {
+ qDebug() << "Making Raster window";
+ auto window = new TestWindow;
+ window->setFlag(Qt::WindowTitleHint);
+ window->setFlag(Qt::WindowMaximizeButtonHint);
+ window->setTitle(QString::fromLatin1(title));
+ window->setGeometry(x, y, w, h);
+ window->setScreen(parentScreen);
+ window->setParent(parentWindow);
+ }
+}
+
+void setWindowBackgroundColor(const std::string &title, int r, int g, int b)
+{
+ auto *window = findWindowByTitle(title);
+ if (!window) {
+ qWarning() << "No such window: " << title;
+ return;
+ }
+ window->setBackgroundColor(r, g, b);
+}
+
+void setWindowVisible(int windowId, bool visible)
+{
+ auto windows = qGuiApp->allWindows();
+ auto window_it = std::find_if(windows.begin(), windows.end(), [windowId](QWindow *window) {
+ return window->winId() == WId(windowId);
+ });
+ if (window_it == windows.end()) {
+ qWarning() << "No such window: " << windowId;
+ return;
+ }
+
+ (*window_it)->setVisible(visible);
+}
+
+void setWindowParent(const std::string &windowTitle, const std::string &parentTitle)
+{
+ TestWindowBase *window = findWindowByTitle(windowTitle);
+ if (!window) {
+ qWarning() << "Window could not be found " << windowTitle;
+ return;
+ }
+ TestWindowBase *parent = nullptr;
+ if (parentTitle != "none") {
+ if ((parent = findWindowByTitle(parentTitle)) == nullptr) {
+ qWarning() << "Parent window could not be found " << parentTitle;
+ return;
+ }
+ }
+ window->setParent(parent ? parent->qWindow() : nullptr);
+}
+
+bool closeWindow(const std::string &title)
+{
+ TestWindowBase *window = findWindowByTitle(title);
+ return window ? window->close() : false;
+}
+
+std::string colorToJs(int r, int g, int b)
+{
+ return
+ "[{"
+ " r: " + std::to_string(r) + ","
+ " g: " + std::to_string(g) + ","
+ " b: " + std::to_string(b) + ""
+ "}]";
+}
+
+void getOpenGLColorAt_0_0(const std::string &windowTitle)
+{
+ TestWindowBase *window = findWindowByTitle(windowTitle);
+ int r = 0;
+ int g = 0;
+ int b = 0;
+
+ if (!window) {
+ qWarning() << "Window could not be found " << windowTitle;
+ } else {
+ window->opengl_color_at_0_0(&r, &g, &b);
+ }
+
+ emscripten::val::global("window").call<void>("getOpenGLColorAt_0_0Callback",
+ emscripten::val(colorToJs(r, g, b)));
+}
+
+EMSCRIPTEN_BINDINGS(qwasmwindow)
+{
+ emscripten::function("screenInformation", &screenInformation);
+ emscripten::function("windowInformation", &windowInformation);
+
+ emscripten::function("createWindow", &createWindow);
+ emscripten::function("setWindowVisible", &setWindowVisible);
+ emscripten::function("setWindowParent", &setWindowParent);
+ emscripten::function("closeWindow", &closeWindow);
+ emscripten::function("setWindowBackgroundColor", &setWindowBackgroundColor);
+
+ emscripten::function("getOpenGLColorAt_0_0", &getOpenGLColorAt_0_0);
+
+ emscripten::function("createWidget", &createWidget);
+ emscripten::function("setWidgetNoFocusShow", &setWidgetNoFocusShow);
+ emscripten::function("showWidget", &showWidget);
+ emscripten::function("activateWidget", &activateWidget);
+ emscripten::function("hasWidgetFocus", &hasWidgetFocus);
+ emscripten::function("clearWidgets", &clearWidgets);
+}
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ app.exec();
+ return 0;
+}
+
+#include "tst_qwasmwindow_harness.moc"
diff --git a/tests/auto/wasm/selenium/tst_qwasmwindow_harness.html b/tests/auto/wasm/selenium/tst_qwasmwindow_harness.html
new file mode 100644
index 0000000000..8c2457f302
--- /dev/null
+++ b/tests/auto/wasm/selenium/tst_qwasmwindow_harness.html
@@ -0,0 +1,80 @@
+<!doctype html>
+
+<head>
+ <script type="text/javascript" src="tst_qwasmwindow_harness.js"></script>
+ <script>
+ (async () => {
+ const instance = await tst_qwasmwindow_harness_entry({});
+ window.instance = instance;
+
+ const testSandbox = document.createElement('div');
+ testSandbox.id = 'test-sandbox';
+ let nextScreenId = 1;
+ document.body.appendChild(testSandbox);
+
+ const eventList = [];
+
+ const makeSizedDiv = (left, top, width, height) => {
+ const screenDiv = document.createElement('div');
+
+ screenDiv.style.left = `${left}px`;
+ screenDiv.style.top = `${top}px`;
+ screenDiv.style.width = `${width}px`;
+ screenDiv.style.height = `${height}px`;
+ screenDiv.style.backgroundColor = 'lightblue';
+ screenDiv.id = `test-screen-${nextScreenId++}`;
+
+ return screenDiv;
+ };
+
+ window.testSupport = {
+ initializeScreenWithFixedPosition: (left, top, width, height) => {
+ const screenDiv = makeSizedDiv(left, top, width, height);
+ testSandbox.appendChild(screenDiv);
+
+ screenDiv.style.position = 'fixed';
+ instance.qtAddContainerElement(screenDiv);
+
+ return screenDiv;
+ },
+ initializeScreenWithRelativePosition: (left, top, width, height) => {
+ const screenDiv = makeSizedDiv(left, top, width, height);
+ testSandbox.appendChild(screenDiv);
+
+ screenDiv.style.position = 'relative';
+ instance.qtAddContainerElement(screenDiv);
+
+ return screenDiv;
+ },
+ initializeScreenInScrollContainer:
+ (scrollWidth, scrollHeight, left, top, width, height) => {
+ const scrollContainer = document.createElement('div');
+ scrollContainer.style.height = `${scrollHeight}px`;
+ scrollContainer.style.width = `${scrollWidth}px`;
+ testSandbox.appendChild(scrollContainer);
+
+ const screenDiv = makeSizedDiv(left, top, width, height);
+ scrollContainer.appendChild(screenDiv);
+ screenDiv.style.position = 'relative';
+
+ instance.qtAddContainerElement(screenDiv);
+
+ return [scrollContainer, screenDiv];
+ },
+ reportEvent: event => {
+ eventList.push(event);
+ },
+ events: () => eventList,
+ hitTestPoint: (x, y, screenId) => {
+ return document
+ .querySelector(`#${screenId}`)
+ .querySelector('#qt-shadow-container')
+ .shadowRoot.elementsFromPoint(x, y);
+ }
+ };
+ })();
+ </script>
+</head>
+
+<body>
+</body>
diff --git a/tests/auto/wasm/selenium/vshader.glsl b/tests/auto/wasm/selenium/vshader.glsl
new file mode 100644
index 0000000000..95e2bab607
--- /dev/null
+++ b/tests/auto/wasm/selenium/vshader.glsl
@@ -0,0 +1,27 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifdef GL_ES
+// Set default precision to medium
+precision mediump int;
+precision mediump float;
+#endif
+
+uniform mat4 mvp_matrix;
+
+attribute vec4 a_position;
+attribute vec2 a_texcoord;
+
+varying vec2 v_texcoord;
+
+//! [0]
+void main()
+{
+ // Calculate vertex position in screen space
+ gl_Position = a_position;
+
+ // Pass texture coordinate to fragment shader
+ // Value will be automatically interpolated to fragments inside polygon faces
+ v_texcoord = a_texcoord;
+}
+//! [0]
diff --git a/tests/auto/widgets/CMakeLists.txt b/tests/auto/widgets/CMakeLists.txt
index 5870f28db0..5ffacc9f18 100644
--- a/tests/auto/widgets/CMakeLists.txt
+++ b/tests/auto/widgets/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from widgets.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(dialogs)
add_subdirectory(effects)
diff --git a/tests/auto/widgets/dialogs/CMakeLists.txt b/tests/auto/widgets/dialogs/CMakeLists.txt
index c21c65dbe3..f46950b6bf 100644
--- a/tests/auto/widgets/dialogs/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from dialogs.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qcolordialog)
add_subdirectory(qdialog)
@@ -8,9 +9,9 @@ add_subdirectory(qfontdialog)
add_subdirectory(qinputdialog)
add_subdirectory(qprogressdialog)
add_subdirectory(qwizard)
-# QTBUG-87671 # special case
+add_subdirectory(qfiledialog)
+# QTBUG-101217, qmessagebox hangs on Android
if(NOT ANDROID)
- add_subdirectory(qfiledialog)
add_subdirectory(qmessagebox)
endif()
if(QT_FEATURE_private_tests)
diff --git a/tests/auto/widgets/dialogs/qcolordialog/CMakeLists.txt b/tests/auto/widgets/dialogs/qcolordialog/CMakeLists.txt
index a25c02ad92..2cba18c0f0 100644
--- a/tests/auto/widgets/dialogs/qcolordialog/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/qcolordialog/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qcolordialog.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcolordialog Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcolordialog LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcolordialog
SOURCES
tst_qcolordialog.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp b/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp
index b3aeaa81f8..5ae8eaf30d 100644
--- a/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp
+++ b/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QtGui/QtGui>
#include <QtWidgets/QColorDialog>
+#include <QtWidgets/QLineEdit>
+#include <QSignalSpy>
QT_FORWARD_DECLARE_CLASS(QtTestEventThread)
@@ -50,6 +27,10 @@ private slots:
void native_activeModalWidget();
void task247349_alpha();
void QTBUG_43548_initialColor();
+ void hexColor_data();
+ void hexColor();
+
+ void hideNativeByDestruction();
};
class TestNativeDialog : public QColorDialog
@@ -102,7 +83,7 @@ void tst_QColorDialog::native_activeModalWidget()
void tst_QColorDialog::postKeyReturn() {
QWidgetList list = QApplication::topLevelWidgets();
- for (int i=0; i<list.count(); ++i) {
+ for (int i=0; i<list.size(); ++i) {
QColorDialog *dialog = qobject_cast<QColorDialog *>(list[i]);
if (dialog) {
QTest::keyClick( list[i], Qt::Key_Return, Qt::NoModifier );
@@ -151,5 +132,81 @@ void tst_QColorDialog::QTBUG_43548_initialColor()
QCOMPARE(a, dialog.currentColor());
}
+void tst_QColorDialog::hexColor_data()
+{
+ QTest::addColumn<const QString>("colorString");
+ QTest::addColumn<const QString>("expectedHexColor");
+ QTest::addColumn<const int>("expectedSignalCount");
+
+ QTest::newRow("White-#") << "#FFFFFE" << "#FFFFFE" << 1;
+ QTest::newRow("White") << "FFFFFD" << "#FFFFFD" << 1;
+ QTest::newRow("Blue-#") << "#77fffb" << "#77fffb" << 2;
+ QTest::newRow("Blue") << "77fffa" << "#77fffa" << 2;
+}
+
+void tst_QColorDialog::hexColor()
+{
+ QColorDialog dialog;
+ dialog.setOption(QColorDialog::DontUseNativeDialog);
+ dialog.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&dialog));
+
+ QLineEdit *lineEdit = dialog.findChild<QLineEdit *>("qt_colorname_lineedit",
+ Qt::FindChildrenRecursively);
+ QVERIFY2(lineEdit, "QLineEdit for color not found. Adapt this test.");
+ QVERIFY(lineEdit); // eliminate compiler warning
+
+ QFETCH(const QString, colorString);
+ QFETCH(const QString, expectedHexColor);
+ QFETCH(const int, expectedSignalCount);
+
+ QSignalSpy spy(&dialog, &QColorDialog::currentColorChanged);
+
+ // Delete existing color
+ lineEdit->activateWindow();
+ QVERIFY(QTest::qWaitForWindowActive(lineEdit));
+ for (int i = 0; i < 8; ++i)
+ QTest::keyEvent(QTest::KeyAction::Click, lineEdit, Qt::Key_Backspace);
+ QVERIFY(lineEdit->text().isEmpty());
+
+ // Enter new color
+ for (const QChar &key : colorString)
+ QTest::keyEvent(QTest::KeyAction::Click, lineEdit, key.toLatin1());
+ QCOMPARE(lineEdit->text().toLower(), expectedHexColor.toLower());
+
+ // Consume all color change signals
+ QTRY_COMPARE(spy.count(), expectedSignalCount);
+
+ const QColor color = qvariant_cast<QColor>(spy.last().at(0));
+ QCOMPARE(color.name(QColor::HexRgb), expectedHexColor.toLower());
+}
+
+void tst_QColorDialog::hideNativeByDestruction()
+{
+ QWidget window;
+ QWidget *child = new QWidget(&window);
+ QPointer<QColorDialog> dialog = new QColorDialog(child);
+ // Make it application modal so that we don't end up with a sheet on macOS
+ dialog->setWindowModality(Qt::ApplicationModal);
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+ dialog->open();
+
+ // We test that the dialog opens and closes by watching the activation of the
+ // transient parent window. If it doesn't deactivate, then we have to skip.
+ const auto windowActive = [&window]{ return window.isActiveWindow(); };
+ const auto windowInactive = [&window]{ return !window.isActiveWindow(); };
+ if (!QTest::qWaitFor(windowInactive, 2000))
+ QSKIP("Dialog didn't activate");
+
+ // This should destroy the dialog and close the native window
+ child->deleteLater();
+ QTRY_VERIFY(!dialog);
+ // If the native window is still open, then the transient parent can't become
+ // active
+ window.activateWindow();
+ QVERIFY(QTest::qWaitFor(windowActive));
+}
+
QTEST_MAIN(tst_QColorDialog)
#include "tst_qcolordialog.moc"
diff --git a/tests/auto/widgets/dialogs/qdialog/BLACKLIST b/tests/auto/widgets/dialogs/qdialog/BLACKLIST
index 02eb64cb8b..ad86386895 100644
--- a/tests/auto/widgets/dialogs/qdialog/BLACKLIST
+++ b/tests/auto/widgets/dialogs/qdialog/BLACKLIST
@@ -2,6 +2,3 @@
macos
[showFullScreen]
macos ci
-# QTBUG-87389
-[snapToDefaultButton]
-android
diff --git a/tests/auto/widgets/dialogs/qdialog/CMakeLists.txt b/tests/auto/widgets/dialogs/qdialog/CMakeLists.txt
index 08c4222535..d69310541d 100644
--- a/tests/auto/widgets/dialogs/qdialog/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/qdialog/CMakeLists.txt
@@ -1,15 +1,23 @@
-# Generated from qdialog.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdialog Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdialog LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdialog
SOURCES
tst_qdialog.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
index d4fbc548bd..13f971f5f0 100644
--- a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
+++ b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.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 "../../../shared/highdpi.h"
@@ -47,6 +22,8 @@
#include <qpa/qplatformtheme.h>
#include <qpa/qplatformtheme_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
QT_FORWARD_DECLARE_CLASS(QDialog)
// work around function being protected
@@ -158,7 +135,7 @@ void tst_QDialog::defaultButtons()
pushThree->setAutoDefault(false);
testWidget.show();
- QApplication::setActiveWindow(&testWidget);
+ QApplicationPrivate::setActiveWindow(&testWidget);
QVERIFY(QTest::qWaitForWindowExposed(&testWidget));
push->setDefault(true);
@@ -309,6 +286,10 @@ void tst_QDialog::showAsTool()
{
if (QStringList{"xcb", "offscreen"}.contains(QGuiApplication::platformName()))
QSKIP("activeWindow() is not respected by all Xcb window managers and the offscreen plugin");
+
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
DummyDialog testWidget;
testWidget.resize(200, 200);
testWidget.setWindowTitle(QTest::currentTestFunction());
@@ -503,6 +484,9 @@ void tst_QDialog::snapToDefaultButton()
#else
if (!QGuiApplication::platformName().compare(QLatin1String("wayland"), Qt::CaseInsensitive))
QSKIP("This platform does not support setting the cursor position.");
+#ifdef Q_OS_ANDROID
+ QSKIP("Android does not support cursor");
+#endif
const QRect dialogGeometry(QGuiApplication::primaryScreen()->availableGeometry().topLeft()
+ QPoint(100, 100), QSize(200, 200));
@@ -711,7 +695,7 @@ void tst_QDialog::virtualsOnClose()
// Qt doesn't deliver events to QWidgets closed during destruction
QCOMPARE(filter.closeEventCount, 0);
// QDialog doesn't emit signals when closed by destruction
- QCOMPARE(rejectedSpy.count(), 0);
+ QCOMPARE(rejectedSpy.size(), 0);
}
}
@@ -764,7 +748,7 @@ void tst_QDialog::quitOnDone()
// also quit with a timer in case the test fails
QTimer::singleShot(1000, QApplication::instance(), &QApplication::quit);
QApplication::exec();
- QCOMPARE(quitSpy.count(), 1);
+ QCOMPARE(quitSpy.size(), 1);
}
void tst_QDialog::focusWidgetAfterOpen()
diff --git a/tests/auto/widgets/dialogs/qerrormessage/CMakeLists.txt b/tests/auto/widgets/dialogs/qerrormessage/CMakeLists.txt
index 2ea2f01cdd..a26401c417 100644
--- a/tests/auto/widgets/dialogs/qerrormessage/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/qerrormessage/CMakeLists.txt
@@ -1,16 +1,21 @@
-# Generated from qerrormessage.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qerrormessage Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qerrormessage LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qerrormessage
SOURCES
tst_qerrormessage.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
+ Qt::GuiPrivate
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qerrormessage.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/auto/widgets/dialogs/qerrormessage/tst_qerrormessage.cpp b/tests/auto/widgets/dialogs/qerrormessage/tst_qerrormessage.cpp
index 711bb6fe35..53ade3cbc6 100644
--- a/tests/auto/widgets/dialogs/qerrormessage/tst_qerrormessage.cpp
+++ b/tests/auto/widgets/dialogs/qerrormessage/tst_qerrormessage.cpp
@@ -1,45 +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 <QTest>
#include <QErrorMessage>
#include <QDebug>
#include <QCheckBox>
+#include <qpa/qplatformtheme.h>
+#include <private/qguiapplication_p.h>
+
class tst_QErrorMessage : public QObject
{
Q_OBJECT
private slots:
+ void initTestCase_data();
+ void init();
+
void dontShowAgain();
void dontShowCategoryAgain();
+ void baseClassSetVisible();
};
+void tst_QErrorMessage::initTestCase_data()
+{
+ QTest::addColumn<bool>("useNativeDialog");
+ QTest::newRow("widget") << false;
+ if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) {
+ if (theme->usePlatformNativeDialog(QPlatformTheme::MessageDialog))
+ QTest::newRow("native") << true;
+ }
+}
+
+void tst_QErrorMessage::init()
+{
+ QFETCH_GLOBAL(bool, useNativeDialog);
+ qApp->setAttribute(Qt::AA_DontUseNativeDialogs, !useNativeDialog);
+}
+
void tst_QErrorMessage::dontShowAgain()
{
QString plainString = QLatin1String("foo");
@@ -72,8 +70,7 @@ void tst_QErrorMessage::dontShowAgain()
QVERIFY(errorMessageDialog.isVisible());
checkBox = errorMessageDialog.findChild<QCheckBox*>();
QVERIFY(checkBox);
- QVERIFY(!checkBox->isChecked());
- checkBox->setChecked(true);
+ QVERIFY(checkBox->isChecked());
errorMessageDialog.close();
errorMessageDialog.showMessage(htmlString);
@@ -141,5 +138,13 @@ void tst_QErrorMessage::dontShowCategoryAgain()
QVERIFY(errorMessageDialog.isVisible());
}
+void tst_QErrorMessage::baseClassSetVisible()
+{
+ QErrorMessage errorMessage;
+ errorMessage.QDialog::setVisible(true);
+ QCOMPARE(errorMessage.isVisible(), true);
+ errorMessage.close();
+}
+
QTEST_MAIN(tst_QErrorMessage)
#include "tst_qerrormessage.moc"
diff --git a/tests/auto/widgets/dialogs/qfiledialog/BLACKLIST b/tests/auto/widgets/dialogs/qfiledialog/BLACKLIST
new file mode 100644
index 0000000000..38aa416115
--- /dev/null
+++ b/tests/auto/widgets/dialogs/qfiledialog/BLACKLIST
@@ -0,0 +1,10 @@
+[filesSelectedSignal]
+android # QTBUG-101194
+[historyForward]
+android # QTBUG-101194
+[historyBack]
+android # QTBUG-101194
+[completer_data]
+android # QTBUG-108329
+[completer]
+android # QTBUG-101194
diff --git a/tests/auto/widgets/dialogs/qfiledialog/CMakeLists.txt b/tests/auto/widgets/dialogs/qfiledialog/CMakeLists.txt
index 043dd2b2a9..000d99cdcf 100644
--- a/tests/auto/widgets/dialogs/qfiledialog/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/qfiledialog/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qfiledialog.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfiledialog Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfiledialog LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfiledialog
SOURCES
tst_qfiledialog.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp
index c05c72213a..4eaa592022 100644
--- a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp
+++ b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.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 <QTest>
@@ -38,7 +13,7 @@
#include <qsharedpointer.h>
#include <qfiledialog.h>
#include <qabstractitemdelegate.h>
-#include <qitemdelegate.h>
+#include <qstyleditemdelegate.h>
#include <qlistview.h>
#include <qcombobox.h>
#include <qpushbutton.h>
@@ -63,6 +38,8 @@
#include <QFileDialog>
#include <QFileSystemModel>
+#include <QtWidgets/private/qapplication_p.h>
+
#if defined(Q_OS_UNIX)
#include <unistd.h> // for pathconf() on OS X
#ifdef QT_BUILD_INTERNAL
@@ -151,9 +128,10 @@ private slots:
void QTBUG49600_nativeIconProviderCrash();
void focusObjectDuringDestruction();
- // NOTE: Please keep widgetlessNativeDialog() as the LAST test!
+ // NOTE: Please keep widgetlessNativeDialog() and
+ // hideNativeByDestruction() as the LAST tests!
//
- // widgetlessNativeDialog() is the only test function that creates
+ // widgetlessNativeDialog() are the only test functions that create
// a native file dialog instance. GTK+ versions prior 3.15.5 have
// a nasty bug (https://bugzilla.gnome.org/show_bug.cgi?id=725164)
// in GtkFileChooserWidget, which makes it leak its folder change
@@ -164,6 +142,7 @@ private slots:
// The crash has been fixed in GTK+ 3.15.5, but the RHEL 7.2 CI has
// GTK+ 3.14.13 installed (QTBUG-55276).
void widgetlessNativeDialog();
+ void hideNativeByDestruction();
private:
void cleanupSettingsFile();
@@ -231,7 +210,7 @@ void tst_QFiledialog::currentChangedSignal()
QVERIFY(listView->model()->hasChildren(folder));
listView->setCurrentIndex(folder);
- QCOMPARE(spyCurrentChanged.count(), 1);
+ QCOMPARE(spyCurrentChanged.size(), 1);
}
// only emitted from the views, sidebar, or lookin combo
@@ -253,7 +232,7 @@ void tst_QFiledialog::directoryEnteredSignal()
QVERIFY(secondItem.isValid());
sidebar->setCurrentIndex(secondItem);
QTest::keyPress(sidebar->viewport(), Qt::Key_Return);
- QCOMPARE(spyDirectoryEntered.count(), 1);
+ QCOMPARE(spyDirectoryEntered.size(), 1);
spyDirectoryEntered.clear();
// lookInCombo
@@ -262,7 +241,7 @@ void tst_QFiledialog::directoryEnteredSignal()
QVERIFY(comboBox->view()->model()->index(1, 0).isValid());
comboBox->view()->setCurrentIndex(comboBox->view()->model()->index(1, 0));
QTest::keyPress(comboBox->view()->viewport(), Qt::Key_Return);
- QCOMPARE(spyDirectoryEntered.count(), 1);
+ QCOMPARE(spyDirectoryEntered.size(), 1);
spyDirectoryEntered.clear();
// view
@@ -339,7 +318,7 @@ void tst_QFiledialog::filesSelectedSignal()
QVERIFY(button->isEnabled());
button->animateClick();
QTRY_COMPARE(fd.isVisible(), false);
- QCOMPARE(spyFilesSelected.count(), 1);
+ QCOMPARE(spyFilesSelected.size(), 1);
}
// only emitted when the combo box is activated
@@ -364,7 +343,7 @@ void tst_QFiledialog::filterSelectedSignal()
QTest::keyPress(filters, Qt::Key_Down);
- QCOMPARE(spyFilterSelected.count(), 1);
+ QCOMPARE(spyFilterSelected.size(), 1);
}
void tst_QFiledialog::args()
@@ -405,14 +384,14 @@ void tst_QFiledialog::directory()
#ifndef Q_OS_WIN
QCOMPARE(tempPath, fd.directory().absolutePath());
#endif
- QCOMPARE(spyCurrentChanged.count(), 0);
- QCOMPARE(spyDirectoryEntered.count(), 0);
- QCOMPARE(spyFilesSelected.count(), 0);
- QCOMPARE(spyFilterSelected.count(), 0);
+ QCOMPARE(spyCurrentChanged.size(), 0);
+ QCOMPARE(spyDirectoryEntered.size(), 0);
+ QCOMPARE(spyFilesSelected.size(), 0);
+ QCOMPARE(spyFilterSelected.size(), 0);
// Check my way
QList<QListView*> list = fd.findChildren<QListView*>("listView");
- QVERIFY(list.count() > 0);
+ QVERIFY(list.size() > 0);
#ifdef Q_OS_WIN
QCOMPARE(list.at(0)->rootIndex().data().toString().toLower(), temp.dirName().toLower());
#else
@@ -443,7 +422,14 @@ void tst_QFiledialog::completer_data()
QTest::newRow("goto root") << QString() << rootPath << -1;
QTest::newRow("start at root") << rootPath << QString() << -1;
- QFileInfoList list = QDir::root().entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
+ QDir dir = QDir::root();
+#ifdef Q_OS_ANDROID
+ const auto homePaths = QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
+ QVERIFY(!homePaths.isEmpty());
+ dir = QDir(homePaths.first());
+#endif
+
+ QFileInfoList list = dir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot);
QVERIFY(!list.isEmpty());
const QString folder = list.first().absoluteFilePath();
QTest::newRow("start at one below root r") << folder << "r" << -1;
@@ -530,10 +516,9 @@ void tst_QFiledialog::completer()
}
// press 'keys' for the input
- for (int i = 0; i < input.count(); ++i)
+ for (int i = 0; i < input.size(); ++i)
QTest::keyPress(lineEdit, input[i].toLatin1());
- QStringList expectedFiles;
if (expected == -1) {
QString fullPath = startPath;
if (!fullPath.endsWith(QLatin1Char('/')))
@@ -546,11 +531,11 @@ void tst_QFiledialog::completer()
QFileInfo fi(fullPath);
QDir x(fi.absolutePath());
- expectedFiles = x.entryList(model->filter());
+ const QStringList expectedFiles = x.entryList(model->filter());
expected = 0;
if (input.startsWith(".."))
input.clear();
- foreach (const QString &expectedFile, expectedFiles) {
+ for (const QString &expectedFile : expectedFiles) {
if (expectedFile.startsWith(input, caseSensitivity))
++expected;
}
@@ -586,16 +571,16 @@ void tst_QFiledialog::completer_up()
fd.show();
QLineEdit *lineEdit = fd.findChild<QLineEdit*>("fileNameEdit");
QVERIFY(lineEdit);
- QCOMPARE(spyFilesSelected.count(), 0);
- int depth = QDir::currentPath().split('/').count();
+ QCOMPARE(spyFilesSelected.size(), 0);
+ int depth = QDir::currentPath().split('/').size();
for (int i = 0; i <= depth * 3 + 1; ++i) {
lineEdit->insert("../");
qApp->processEvents();
}
- QCOMPARE(spyCurrentChanged.count(), 0);
- QCOMPARE(spyDirectoryEntered.count(), 0);
- QCOMPARE(spyFilesSelected.count(), 0);
- QCOMPARE(spyFilterSelected.count(), 0);
+ QCOMPARE(spyCurrentChanged.size(), 0);
+ QCOMPARE(spyDirectoryEntered.size(), 0);
+ QCOMPARE(spyFilesSelected.size(), 0);
+ QCOMPARE(spyFilterSelected.size(), 0);
}
void tst_QFiledialog::acceptMode()
@@ -675,7 +660,7 @@ void tst_QFiledialog::filters()
// effects
QList<QComboBox*> views = fd.findChildren<QComboBox*>("fileTypeCombo");
- QCOMPARE(views.count(), 1);
+ QCOMPARE(views.size(), 1);
QCOMPARE(views.at(0)->isVisible(), false);
QStringList filters;
@@ -690,15 +675,15 @@ void tst_QFiledialog::filters()
QCOMPARE(fd.nameFilters(), filters);
fd.setNameFilter("Image files (*.png *.xpm *.jpg);;Text files (*.txt);;Any files (*.*)");
QCOMPARE(fd.nameFilters(), filters);
- QCOMPARE(spyCurrentChanged.count(), 0);
- QCOMPARE(spyDirectoryEntered.count(), 0);
- QCOMPARE(spyFilesSelected.count(), 0);
- QCOMPARE(spyFilterSelected.count(), 0);
+ QCOMPARE(spyCurrentChanged.size(), 0);
+ QCOMPARE(spyDirectoryEntered.size(), 0);
+ QCOMPARE(spyFilesSelected.size(), 0);
+ QCOMPARE(spyFilterSelected.size(), 0);
// setting shouldn't emit any signals
for (int i = views.at(0)->currentIndex(); i < views.at(0)->count(); ++i)
views.at(0)->setCurrentIndex(i);
- QCOMPARE(spyFilterSelected.count(), 0);
+ QCOMPARE(spyFilterSelected.size(), 0);
//Let check if filters with whitespaces
QFileDialog fd2;
@@ -737,7 +722,7 @@ void tst_QFiledialog::selectFilter()
QCOMPARE(fd.selectedNameFilter(), filters.at(2));
fd.selectNameFilter("");
QCOMPARE(fd.selectedNameFilter(), filters.at(2));
- QCOMPARE(spyFilterSelected.count(), 0);
+ QCOMPARE(spyFilterSelected.size(), 0);
}
void tst_QFiledialog::history()
@@ -776,10 +761,10 @@ void tst_QFiledialog::history()
badHistory << QDir::toNativeSeparators(QDir::current().absolutePath());
QCOMPARE(fd.history(), badHistory);
- QCOMPARE(spyCurrentChanged.count(), 0);
- QCOMPARE(spyDirectoryEntered.count(), 0);
- QCOMPARE(spyFilesSelected.count(), 0);
- QCOMPARE(spyFilterSelected.count(), 0);
+ QCOMPARE(spyCurrentChanged.size(), 0);
+ QCOMPARE(spyDirectoryEntered.size(), 0);
+ QCOMPARE(spyFilesSelected.size(), 0);
+ QCOMPARE(spyFilterSelected.size(), 0);
}
void tst_QFiledialog::iconProvider()
@@ -821,7 +806,7 @@ void tst_QFiledialog::itemDelegate()
{
QFileDialog fd;
QVERIFY(fd.itemDelegate() != 0);
- QItemDelegate *id = new QItemDelegate(&fd);
+ QStyledItemDelegate *id = new QStyledItemDelegate(&fd);
fd.setItemDelegate(id);
QCOMPARE(fd.itemDelegate(), (QAbstractItemDelegate *)id);
}
@@ -882,7 +867,7 @@ void tst_QFiledialog::selectFile()
QVERIFY(model);
fd->setDirectory(QDir::currentPath());
// default value
- QCOMPARE(fd->selectedFiles().count(), 1);
+ QCOMPARE(fd->selectedFiles().size(), 1);
QScopedPointer<QTemporaryFile> tempFile;
if (file == QLatin1String("temp")) {
@@ -892,7 +877,7 @@ void tst_QFiledialog::selectFile()
}
fd->selectFile(file);
- QCOMPARE(fd->selectedFiles().count(), count);
+ QCOMPARE(fd->selectedFiles().size(), count);
if (tempFile.isNull()) {
QCOMPARE(model->index(fd->directory().path()), model->index(QDir::currentPath()));
} else {
@@ -940,7 +925,7 @@ void tst_QFiledialog::selectFiles()
QString filesPath = fd.directory().absolutePath();
for (int i=0; i < 5; ++i) {
QFile file(filesPath + QLatin1String("/qfiledialog_auto_test_not_pres_") + QString::number(i));
- file.open(QIODevice::WriteOnly);
+ QVERIFY(file.open(QIODevice::WriteOnly));
file.resize(1024);
file.flush();
file.close();
@@ -949,29 +934,29 @@ void tst_QFiledialog::selectFiles()
// Get a list of files in the view and then get the corresponding index's
QStringList list = fd.directory().entryList(QDir::Files);
QModelIndexList toSelect;
- QVERIFY(list.count() > 1);
+ QVERIFY(list.size() > 1);
QListView* listView = fd.findChild<QListView*>("listView");
QVERIFY(listView);
- for (int i = 0; i < list.count(); ++i) {
+ for (int i = 0; i < list.size(); ++i) {
fd.selectFile(fd.directory().path() + QLatin1Char('/') + list.at(i));
QTRY_VERIFY(!listView->selectionModel()->selectedRows().isEmpty());
toSelect.append(listView->selectionModel()->selectedRows().last());
}
- QCOMPARE(spyFilesSelected.count(), 0);
+ QCOMPARE(spyFilesSelected.size(), 0);
listView->selectionModel()->clear();
- QCOMPARE(spyFilesSelected.count(), 0);
+ QCOMPARE(spyFilesSelected.size(), 0);
// select the indexes
- for (int i = 0; i < toSelect.count(); ++i) {
+ for (int i = 0; i < toSelect.size(); ++i) {
listView->selectionModel()->select(toSelect.at(i),
QItemSelectionModel::Select | QItemSelectionModel::Rows);
}
- QCOMPARE(fd.selectedFiles().count(), toSelect.count());
- QCOMPARE(spyCurrentChanged.count(), 0);
- QCOMPARE(spyDirectoryEntered.count(), 0);
- QCOMPARE(spyFilesSelected.count(), 0);
- QCOMPARE(spyFilterSelected.count(), 0);
+ QCOMPARE(fd.selectedFiles().size(), toSelect.size());
+ QCOMPARE(spyCurrentChanged.size(), 0);
+ QCOMPARE(spyDirectoryEntered.size(), 0);
+ QCOMPARE(spyFilesSelected.size(), 0);
+ QCOMPARE(spyFilterSelected.size(), 0);
}
@@ -997,13 +982,13 @@ void tst_QFiledialog::viewMode()
// find widgets
QList<QTreeView*> treeView = fd.findChildren<QTreeView*>("treeView");
- QCOMPARE(treeView.count(), 1);
+ QCOMPARE(treeView.size(), 1);
QList<QListView*> listView = fd.findChildren<QListView*>("listView");
- QCOMPARE(listView.count(), 1);
+ QCOMPARE(listView.size(), 1);
QList<QToolButton*> listButton = fd.findChildren<QToolButton*>("listModeButton");
- QCOMPARE(listButton.count(), 1);
+ QCOMPARE(listButton.size(), 1);
QList<QToolButton*> treeButton = fd.findChildren<QToolButton*>("detailModeButton");
- QCOMPARE(treeButton.count(), 1);
+ QCOMPARE(treeButton.size(), 1);
// default value
QCOMPARE(fd.viewMode(), QFileDialog::List);
@@ -1132,7 +1117,7 @@ void tst_QFiledialog::focus()
QFileDialog fd;
fd.setDirectory(QDir::currentPath());
fd.show();
- QApplication::setActiveWindow(&fd);
+ QApplicationPrivate::setActiveWindow(&fd);
QVERIFY(QTest::qWaitForWindowActive(&fd));
QCOMPARE(fd.isVisible(), true);
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget*>(&fd));
@@ -1142,7 +1127,7 @@ void tst_QFiledialog::focus()
QCursor::setPos(fd.geometry().center());
QList<QWidget*> treeView = fd.findChildren<QWidget*>("fileNameEdit");
- QCOMPARE(treeView.count(), 1);
+ QCOMPARE(treeView.size(), 1);
QVERIFY(treeView.at(0));
QTRY_COMPARE(treeView.at(0)->hasFocus(), true);
QCOMPARE(treeView.at(0)->hasFocus(), true);
@@ -1172,13 +1157,13 @@ void tst_QFiledialog::historyBack()
QCOMPARE(backButton->isEnabled(), true);
QCOMPARE(forwardButton->isEnabled(), false);
fd.setDirectory(desktop);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
backButton->click();
qApp->processEvents();
QCOMPARE(backButton->isEnabled(), true);
QCOMPARE(forwardButton->isEnabled(), true);
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
QString currentPath = qvariant_cast<QString>(spy.last().first());
QCOMPARE(model->index(currentPath), model->index(temp));
@@ -1187,11 +1172,11 @@ void tst_QFiledialog::historyBack()
QCOMPARE(currentPath, home);
QCOMPARE(backButton->isEnabled(), false);
QCOMPARE(forwardButton->isEnabled(), true);
- QCOMPARE(spy.count(), 4);
+ QCOMPARE(spy.size(), 4);
// nothing should change at this point
backButton->click();
- QCOMPARE(spy.count(), 4);
+ QCOMPARE(spy.size(), 4);
QCOMPARE(backButton->isEnabled(), false);
QCOMPARE(forwardButton->isEnabled(), true);
}
@@ -1225,7 +1210,7 @@ void tst_QFiledialog::historyForward()
QCOMPARE(model->index(qvariant_cast<QString>(spy.last().first())), model->index(desktop));
QCOMPARE(backButton->isEnabled(), true);
QCOMPARE(forwardButton->isEnabled(), false);
- QCOMPARE(spy.count(), 4);
+ QCOMPARE(spy.size(), 4);
backButton->click();
QCOMPARE(model->index(qvariant_cast<QString>(spy.last().first())), model->index(temp));
@@ -1235,13 +1220,13 @@ void tst_QFiledialog::historyForward()
QCOMPARE(model->index(qvariant_cast<QString>(spy.last().first())), model->index(home));
QCOMPARE(backButton->isEnabled(), false);
QCOMPARE(forwardButton->isEnabled(), true);
- QCOMPARE(spy.count(), 6);
+ QCOMPARE(spy.size(), 6);
forwardButton->click();
QCOMPARE(model->index(qvariant_cast<QString>(spy.last().first())), model->index(temp));
backButton->click();
QCOMPARE(model->index(qvariant_cast<QString>(spy.last().first())), model->index(home));
- QCOMPARE(spy.count(), 8);
+ QCOMPARE(spy.size(), 8);
forwardButton->click();
QCOMPARE(model->index(qvariant_cast<QString>(spy.last().first())), model->index(temp));
@@ -1452,6 +1437,10 @@ void tst_QFiledialog::widgetlessNativeDialog()
{
if (!QGuiApplicationPrivate::platformTheme()->usePlatformNativeDialog(QPlatformTheme::FileDialog))
QSKIP("This platform always uses widgets to realize its QFileDialog, instead of the native file dialog.");
+#ifdef Q_OS_ANDROID
+ // QTBUG-101194
+ QSKIP("Android: This keeps the window open. Figure out why.");
+#endif
QApplication::setAttribute(Qt::AA_DontUseNativeDialogs, false);
QFileDialog fd;
fd.setWindowModality(Qt::ApplicationModal);
@@ -1464,6 +1453,46 @@ void tst_QFiledialog::widgetlessNativeDialog()
QApplication::setAttribute(Qt::AA_DontUseNativeDialogs, true);
}
+void tst_QFiledialog::hideNativeByDestruction()
+{
+ if (!QGuiApplicationPrivate::platformTheme()->usePlatformNativeDialog(QPlatformTheme::FileDialog))
+ QSKIP("This platform always uses widgets to realize its QFileDialog, instead of the native file dialog.");
+
+#ifdef Q_OS_ANDROID
+ // QTBUG-101194
+ QSKIP("Android: This keeps the native window open. Figure out why.");
+#endif
+
+ QApplication::setAttribute(Qt::AA_DontUseNativeDialogs, false);
+ auto resetAttribute = qScopeGuard([]{
+ QApplication::setAttribute(Qt::AA_DontUseNativeDialogs, true);
+ });
+
+ QWidget window;
+ QWidget *child = new QWidget(&window);
+ QPointer<QFileDialog> dialog = new QFileDialog(child);
+ // Make it application modal so that we don't end up with a sheet on macOS
+ dialog->setWindowModality(Qt::ApplicationModal);
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+ dialog->open();
+
+ // We test that the dialog opens and closes by watching the activation of the
+ // transient parent window. If it doesn't deactivate, then we have to skip.
+ const auto windowActive = [&window]{ return window.isActiveWindow(); };
+ const auto windowInactive = [&window]{ return !window.isActiveWindow(); };
+ if (!QTest::qWaitFor(windowInactive, 2000))
+ QSKIP("Dialog didn't activate");
+
+ // This should destroy the dialog and close the native window
+ child->deleteLater();
+ QTRY_VERIFY(!dialog);
+ // If the native window is still open, then the transient parent can't become
+ // active
+ window.activateWindow();
+ QVERIFY(QTest::qWaitFor(windowActive, 2000));
+}
+
void tst_QFiledialog::selectedFilesWithoutWidgets()
{
// Test for a crash when widgets are not instantiated yet.
@@ -1568,6 +1597,10 @@ void tst_QFiledialog::rejectModalDialogs()
{
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
QSKIP("Wayland: This freezes. Figure out why.");
+#ifdef Q_OS_ANDROID
+ // QTBUG-101194
+ QSKIP("Android: This freezes. Figure out why.");
+#endif
// QTBUG-38672 , static functions should return empty Urls
DialogRejecter dr;
@@ -1599,6 +1632,12 @@ void tst_QFiledialog::QTBUG49600_nativeIconProviderCrash()
{
if (!QGuiApplicationPrivate::platformTheme()->usePlatformNativeDialog(QPlatformTheme::FileDialog))
QSKIP("This platform always uses widgets to realize its QFileDialog, instead of the native file dialog.");
+
+#ifdef Q_OS_ANDROID
+ // QTBUG-101194
+ QSKIP("Android: This hangs. Figure out why.");
+#endif
+
QFileDialog fd;
fd.iconProvider();
}
@@ -1630,6 +1669,10 @@ void tst_QFiledialog::focusObjectDuringDestruction()
{
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
QSKIP("Wayland: This freezes. Figure out why.");
+#ifdef Q_OS_ANDROID
+ // QTBUG-101194
+ QSKIP("Android: This freezes. Figure out why.");
+#endif
QTRY_VERIFY(QGuiApplication::topLevelWindows().isEmpty());
diff --git a/tests/auto/widgets/dialogs/qfiledialog2/CMakeLists.txt b/tests/auto/widgets/dialogs/qfiledialog2/CMakeLists.txt
index d5dc2af19c..7db2168a20 100644
--- a/tests/auto/widgets/dialogs/qfiledialog2/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/qfiledialog2/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qfiledialog2.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfiledialog2 Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfiledialog2 LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfiledialog2
SOURCES
tst_qfiledialog2.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp b/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp
index cecf7dbdcf..b330d4d869 100644
--- a/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp
+++ b/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.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 <QTest>
@@ -36,7 +11,6 @@
#include <qdebug.h>
#include <qfiledialog.h>
#include <qabstractitemdelegate.h>
-#include <qitemdelegate.h>
#include <qlistview.h>
#include <qcombobox.h>
#include <qpushbutton.h>
@@ -60,9 +34,9 @@
#include <qpa/qplatformdialoghelper.h>
#include <qpa/qplatformintegration.h>
-#if defined(Q_OS_WIN)
-#include "../../../network-settings.h"
-#endif
+#include "../../../../shared/filesystem.h"
+
+#include <QtWidgets/private/qapplication_p.h>
#if defined QT_BUILD_INTERNAL
QT_BEGIN_NAMESPACE
@@ -133,6 +107,10 @@ private slots:
void dontShowCompleterOnRoot();
void nameFilterParsing_data();
void nameFilterParsing();
+#if QT_CONFIG(settings)
+ void settingsCompatibility_data();
+ void settingsCompatibility();
+#endif
private:
void cleanupSettingsFile();
@@ -281,7 +259,7 @@ void tst_QFileDialog2::unc()
{
#if defined(Q_OS_WIN)
// Only test UNC on Windows./
- QString dir("\\\\" + QtNetworkSettings::winServerName() + "\\testsharewritable");
+ QString dir("\\\\" + QTest::uncServerName() + "\\testsharewritable");
#else
QString dir(QDir::currentPath());
#endif
@@ -333,7 +311,7 @@ static bool openContextMenu(QFileDialog &fd)
MenuCloser closer(&fd);
QObject::connect(&timer, &QTimer::timeout, &closer, &MenuCloser::close);
timer.start();
- QContextMenuEvent cme(QContextMenuEvent::Mouse, QPoint(10, 10));
+ QContextMenuEvent cme(QContextMenuEvent::Mouse, QPoint(10, 10), list->viewport()->mapToGlobal(QPoint(10, 10)));
qApp->sendEvent(list->viewport(), &cme); // blocks until menu is closed again.
return true;
}
@@ -473,6 +451,44 @@ void tst_QFileDialog2::task180459_lastDirectory()
delete dlg;
}
+#if QT_CONFIG(settings)
+void tst_QFileDialog2::settingsCompatibility_data()
+{
+ QTest::addColumn<QString>("qtVersion");
+ QTest::addColumn<QDataStream::Version>("dsVersion");
+ QTest::newRow("6.2.3") << "6.2.3" << QDataStream::Qt_6_0;
+ QTest::newRow("6.5") << "6.5" << QDataStream::Qt_5_0;
+ QTest::newRow("15.5.2") << "5.15.2" << QDataStream::Qt_5_15;
+ QTest::newRow("15.5.9") << "5.15.9" << QDataStream::Qt_5_15;
+}
+
+void tst_QFileDialog2::settingsCompatibility()
+{
+ static const QByteArray ba32 = QByteArrayLiteral("\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xF7\x00\x00\x00\x04\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00""d\xFF\xFF\xFF\xFF\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x01\t\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00>\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00""B\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03\xE8\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00");
+ static const QByteArray ba64 = QByteArrayLiteral("\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\xF7\x00\x00\x00\x04\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00""d\xFF\xFF\xFF\xFF\x00\x00\x00\x81\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x01\t\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00>\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00""B\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03\xE8\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00");
+ QFETCH(QString, qtVersion);
+ QFETCH(QDataStream::Version, dsVersion);
+ // Create a header view, convert template to target format and store it in settings
+ {
+ QSettings settings(QSettings::UserScope, "QtProject");
+ settings.beginGroup("FileDialog");
+ settings.setValue("sidebarWidth", 93); // random value
+ settings.setValue("shortcuts", QStringList({settings.fileName(), "/tmp"}));
+ settings.setValue("qtVersion", qtVersion);
+ settings.setValue("treeViewHeader", dsVersion < QDataStream::Qt_6_0 ? ba32 : ba64);
+ settings.endGroup();
+ }
+ // Create a file dialog, read settings write them back
+ {
+ QFileDialog fd;
+ }
+ // Read back settings and compare byte array
+ QSettings settings(QSettings::UserScope, "QtProject");
+ settings.beginGroup("FileDialog");
+ const QByteArray savedState = settings.value("treeViewHeader").toByteArray();
+ QCOMPARE(savedState, ba32);
+}
+#endif
class FilterDirModel : public QSortFilterProxyModel
@@ -665,13 +681,13 @@ void tst_QFileDialog2::completionOnLevelAfterRoot()
#if defined(Q_OS_WIN)
fd.setDirectory("C:/");
QDir current = fd.directory();
- QStringList entryList = current.entryList(QStringList(), QDir::Dirs);
+ const QStringList entryList = current.entryList(QStringList(), QDir::Dirs);
// Find a suitable test dir under c:-root:
// - At least 6 characters long
// - Ascii, letters only
// - No another dir with same start
QString testDir;
- foreach (const QString &entry, entryList) {
+ for (const QString &entry : entryList) {
if (entry.size() > 5 && QString(entry.toLatin1()).compare(entry) == 0) {
bool invalid = false;
for (int i = 0; i < 5; i++) {
@@ -681,7 +697,7 @@ void tst_QFileDialog2::completionOnLevelAfterRoot()
}
}
if (!invalid) {
- foreach (const QString &check, entryList) {
+ for (const QString &check : entryList) {
if (check.startsWith(entry.left(5), Qt::CaseInsensitive) && check != entry) {
invalid = true;
break;
@@ -696,6 +712,17 @@ void tst_QFileDialog2::completionOnLevelAfterRoot()
}
if (testDir.isEmpty())
QSKIP("This test requires to have a unique directory of at least six ascii characters under c:/");
+#elif defined(Q_OS_ANDROID)
+ // Android 11 and above doesn't allow accessing root filesystem as before,
+ // so let's opt int for the app's home.
+ const auto homePaths = QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
+ QVERIFY(!homePaths.isEmpty());
+ fd.setFilter(QDir::Hidden | QDir::AllDirs | QDir::Files | QDir::System);
+ fd.setDirectory(homePaths.first());
+ QDir(homePaths.first()).mkdir("etc");
+ auto cleanup = qScopeGuard([&]() {
+ QDir(homePaths.first()).rmdir("etc");
+ });
#else
fd.setFilter(QDir::Hidden | QDir::AllDirs | QDir::Files | QDir::System);
fd.setDirectory("/");
@@ -777,8 +804,8 @@ void tst_QFileDialog2::task235069_hideOnEscape()
child->setFocus();
QTest::keyClick(child, Qt::Key_Escape);
QCOMPARE(fd.isVisible(), false);
- QCOMPARE(spyFinished.count(), 1); // QTBUG-7690
- QCOMPARE(spyRejected.count(), 1); // reject(), don't hide()
+ QCOMPARE(spyFinished.size(), 1); // QTBUG-7690
+ QCOMPARE(spyRejected.size(), 1); // reject(), don't hide()
}
#ifdef QT_BUILD_INTERNAL
@@ -825,7 +852,7 @@ void tst_QFileDialog2::task203703_returnProperSeparator()
QVERIFY(button);
QTest::keyClick(button, Qt::Key_Return);
QString result = fd.selectedFiles().first();
- QVERIFY(result.at(result.count() - 1) != '/');
+ QVERIFY(result.at(result.size() - 1) != '/');
QVERIFY(!result.contains('\\'));
current.rmdir("aaaaaaaaaaaaaaaaaa");
}
@@ -920,9 +947,9 @@ void tst_QFileDialog2::task239706_editableFilterCombo()
d.show();
QVERIFY(QTest::qWaitForWindowExposed(&d));
- QList<QComboBox *> comboList = d.findChildren<QComboBox *>();
+ const QList<QComboBox *> comboList = d.findChildren<QComboBox *>();
QComboBox *filterCombo = nullptr;
- foreach (QComboBox *combo, comboList) {
+ for (QComboBox *combo : comboList) {
if (combo->objectName() == QString("fileTypeCombo")) {
filterCombo = combo;
break;
@@ -1000,10 +1027,10 @@ public :
void removeSelection() {
QList<QModelIndex> idxs = selectionModel()->selectedIndexes();
QList<QPersistentModelIndex> indexes;
- for (int i = 0; i < idxs.count(); i++)
+ for (int i = 0; i < idxs.size(); i++)
indexes.append(idxs.at(i));
- for (int i = 0; i < indexes.count(); ++i)
+ for (int i = 0; i < indexes.size(); ++i)
if (!indexes.at(i).data(Qt::UserRole + 1).toUrl().path().isEmpty())
model()->removeRow(indexes.at(i).row());
}
@@ -1083,7 +1110,6 @@ void tst_QFileDialog2::task254490_selectFileMultipleTimes()
QTemporaryFile *t;
t = new QTemporaryFile;
QVERIFY2(t->open(), qPrintable(t->errorString()));
- t->open();
QFileDialog fd(0, "TestFileDialog");
fd.setDirectory(tempPath);
@@ -1105,7 +1131,7 @@ void tst_QFileDialog2::task254490_selectFileMultipleTimes()
QCOMPARE(lineEdit->text(),QLatin1String("new_file.txt"));
QListView *list = fd.findChild<QListView*>("listView");
QVERIFY(list);
- QCOMPARE(list->selectionModel()->selectedRows(0).count(), 0);
+ QCOMPARE(list->selectionModel()->selectedRows(0).size(), 0);
t->deleteLater();
}
@@ -1121,7 +1147,7 @@ void tst_QFileDialog2::task257579_sideBarWithNonCleanUrls()
QFileDialog fd;
fd.setSidebarUrls(QList<QUrl>() << QUrl::fromLocalFile(url));
QSidebar *sidebar = fd.findChild<QSidebar*>("sidebar");
- QCOMPARE(sidebar->urls().count(), 1);
+ QCOMPARE(sidebar->urls().size(), 1);
QVERIFY(sidebar->urls().first().toLocalFile() != url);
QCOMPARE(sidebar->urls().first().toLocalFile(), QDir::cleanPath(url));
@@ -1226,7 +1252,7 @@ void tst_QFileDialog2::QTBUG6558_showDirsOnly()
//Create a file
QFile tempFile(dirPath + "/plop.txt");
- tempFile.open(QIODevice::WriteOnly | QIODevice::Text);
+ QVERIFY(tempFile.open(QIODevice::WriteOnly | QIODevice::Text));
QTextStream out(&tempFile);
out << "The magic number is: " << 49 << "\n";
tempFile.close();
@@ -1239,7 +1265,7 @@ void tst_QFileDialog2::QTBUG6558_showDirsOnly()
fd.setOption(QFileDialog::ShowDirsOnly, true);
fd.show();
- QApplication::setActiveWindow(&fd);
+ QApplicationPrivate::setActiveWindow(&fd);
QVERIFY(QTest::qWaitForWindowActive(&fd));
QCOMPARE(fd.isVisible(), true);
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget*>(&fd));
@@ -1283,7 +1309,7 @@ void tst_QFileDialog2::QTBUG4842_selectFilterWithHideNameFilterDetails()
fd.selectNameFilter(chosenFilterString);
fd.show();
- QApplication::setActiveWindow(&fd);
+ QApplicationPrivate::setActiveWindow(&fd);
QVERIFY(QTest::qWaitForWindowActive(&fd));
QCOMPARE(fd.isVisible(), true);
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget*>(&fd));
@@ -1299,7 +1325,7 @@ void tst_QFileDialog2::QTBUG4842_selectFilterWithHideNameFilterDetails()
fd2.selectNameFilter(chosenFilterString);
fd2.show();
- QApplication::setActiveWindow(&fd2);
+ QApplicationPrivate::setActiveWindow(&fd2);
QVERIFY(QTest::qWaitForWindowActive(&fd2));
QCOMPARE(fd2.isVisible(), true);
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget*>(&fd2));
@@ -1319,7 +1345,7 @@ void tst_QFileDialog2::dontShowCompleterOnRoot()
fd.setAcceptMode(QFileDialog::AcceptSave);
fd.show();
- QApplication::setActiveWindow(&fd);
+ QApplicationPrivate::setActiveWindow(&fd);
QVERIFY(QTest::qWaitForWindowActive(&fd));
QCOMPARE(fd.isVisible(), true);
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget*>(&fd));
diff --git a/tests/auto/widgets/dialogs/qfontdialog/CMakeLists.txt b/tests/auto/widgets/dialogs/qfontdialog/CMakeLists.txt
index 4e231cc6cc..b1bbf62cc7 100644
--- a/tests/auto/widgets/dialogs/qfontdialog/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/qfontdialog/CMakeLists.txt
@@ -1,19 +1,15 @@
-# Generated from qfontdialog.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfontdialog Test:
#####################################################################
-qt_internal_add_test(tst_qfontdialog
- SOURCES
- tst_qfontdialog.cpp
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Gui
- Qt::GuiPrivate
- Qt::Widgets
- Qt::WidgetsPrivate
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfontdialog LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Resources:
set_source_files_properties("../../../shared/resources/test.ttf"
@@ -27,13 +23,18 @@ set(testfonts_resource_files
"../../../shared/resources/testfont.ttf"
)
-qt_internal_add_resource(tst_qfontdialog "testfonts"
- PREFIX
- "/"
- FILES
- ${testfonts_resource_files}
+qt_internal_add_test(tst_qfontdialog
+ SOURCES
+ tst_qfontdialog.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
+ Qt::WidgetsPrivate
+ TESTDATA ${testfonts_resource_files}
+ BUILTIN_TESTDATA
)
-
## Scopes:
#####################################################################
diff --git a/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp b/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp
index 4b02a36f24..01f3e7ec95 100644
--- a/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.cpp
+++ b/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog.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 <QTest>
@@ -70,6 +45,7 @@ private slots:
void qtbug_41513_stylesheetStyle();
#endif
+ void hideNativeByDestruction();
private:
void runSlotWithFailsafeTimer(const char *member);
@@ -101,7 +77,7 @@ void tst_QFontDialog::cleanup()
void tst_QFontDialog::postKeyReturn() {
QWidgetList list = QApplication::topLevelWidgets();
- for (int i=0; i<list.count(); ++i) {
+ for (int i=0; i<list.size(); ++i) {
QFontDialog *dialog = qobject_cast<QFontDialog*>(list[i]);
if (dialog) {
QTest::keyClick( list[i], Qt::Key_Return, Qt::NoModifier );
@@ -240,7 +216,7 @@ void tst_QFontDialog::testNonStandardFontSize()
QList<int> standardSizesList = QFontDatabase::standardSizes();
int nonStandardFontSize;
if (!standardSizesList.isEmpty()) {
- nonStandardFontSize = standardSizesList.at(standardSizesList.count()-1); // get the maximum standard size.
+ nonStandardFontSize = standardSizesList.at(standardSizesList.size()-1); // get the maximum standard size.
nonStandardFontSize += 1; // the increment of 1 to mock a non-standard font size.
} else {
QSKIP("QFontDatabase::standardSizes() is empty.");
@@ -263,5 +239,32 @@ void tst_QFontDialog::testNonStandardFontSize()
qWarning("Fail using a non-standard font size.");
}
+void tst_QFontDialog::hideNativeByDestruction()
+{
+ QWidget window;
+ QWidget *child = new QWidget(&window);
+ QPointer<QFontDialog> dialog = new QFontDialog(child);
+ // Make it application modal so that we don't end up with a sheet on macOS
+ dialog->setWindowModality(Qt::ApplicationModal);
+ window.show();
+ QVERIFY(QTest::qWaitForWindowActive(&window));
+ dialog->open();
+
+ // We test that the dialog opens and closes by watching the activation of the
+ // transient parent window. If it doesn't deactivate, then we have to skip.
+ const auto windowActive = [&window]{ return window.isActiveWindow(); };
+ const auto windowInactive = [&window]{ return !window.isActiveWindow(); };
+ if (!QTest::qWaitFor(windowInactive, 2000))
+ QSKIP("Dialog didn't activate");
+
+ // This should destroy the dialog and close the native window
+ child->deleteLater();
+ QTRY_VERIFY(!dialog);
+ // If the native window is still open, then the transient parent can't become
+ // active
+ window.activateWindow();
+ QVERIFY(QTest::qWaitFor(windowActive));
+}
+
QTEST_MAIN(tst_QFontDialog)
#include "tst_qfontdialog.moc"
diff --git a/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog_mac_helpers.mm b/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog_mac_helpers.mm
deleted file mode 100644
index 00cc6a879f..0000000000
--- a/tests/auto/widgets/dialogs/qfontdialog/tst_qfontdialog_mac_helpers.mm
+++ /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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** 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 <AppKit/AppKit.h>
-
-void click_cocoa_button()
-{
- QMacAutoReleasePool pool;
- NSArray *windows = [NSApp windows];
- for (NSWindow *window in windows) {
- // This is NOT how one should do RTTI, but since I don't want to leak the class too much...
- if ([[window delegate] respondsToSelector:@selector(qtFont)]) {
- NSArray *subviews = [[window contentView] subviews];
- for (NSView *view in subviews) {
- if ([view isKindOfClass:[NSButton class]]
- && [[static_cast<NSButton *>(view) title] isEqualTo:@"OK"]) {
- [static_cast<NSButton *>(view) performClick:view];
- [NSApp postEvent:[NSEvent otherEventWithType:NSApplicationDefined location:NSZeroPoint
- modifierFlags:0 timestamp:0. windowNumber:0 context:0
- subtype:SHRT_MAX data1:0 data2:0] atStart:NO];
-
- break;
- }
- }
- break;
- }
- }
-}
diff --git a/tests/auto/widgets/dialogs/qinputdialog/CMakeLists.txt b/tests/auto/widgets/dialogs/qinputdialog/CMakeLists.txt
index cdb311a3c2..528493a66b 100644
--- a/tests/auto/widgets/dialogs/qinputdialog/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/qinputdialog/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qinputdialog.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qinputdialog Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qinputdialog LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qinputdialog
SOURCES
tst_qinputdialog.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp b/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp
index db44597401..136c789abd 100644
--- a/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.cpp
+++ b/tests/auto/widgets/dialogs/qinputdialog/tst_qinputdialog.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 <QTest>
diff --git a/tests/auto/widgets/dialogs/qmessagebox/BLACKLIST b/tests/auto/widgets/dialogs/qmessagebox/BLACKLIST
deleted file mode 100644
index 8d8a7c2105..0000000000
--- a/tests/auto/widgets/dialogs/qmessagebox/BLACKLIST
+++ /dev/null
@@ -1,4 +0,0 @@
-[defaultButton]
-opensuse-leap
-rhel-7.6
-ubuntu
diff --git a/tests/auto/widgets/dialogs/qmessagebox/CMakeLists.txt b/tests/auto/widgets/dialogs/qmessagebox/CMakeLists.txt
index 8b6b864cf7..53fd8a61c6 100644
--- a/tests/auto/widgets/dialogs/qmessagebox/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/qmessagebox/CMakeLists.txt
@@ -1,18 +1,22 @@
-# Generated from qmessagebox.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmessagebox Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmessagebox LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmessagebox
SOURCES
tst_qmessagebox.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qmessagebox.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp b/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp
index 1363479897..94afff6e40 100644
--- a/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp
+++ b/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp
@@ -1,36 +1,11 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QMessageBox>
#include <QDebug>
-#include <QPair>
+#include <QSet>
#include <QList>
#include <QPointer>
#include <QTimer>
@@ -47,7 +22,11 @@ class tst_QMessageBox : public QObject
Q_OBJECT
private slots:
+ void initTestCase_data();
+ void init();
+
void sanityTest();
+ void baseClassSetVisible();
void defaultButton();
void escapeButton();
void clickedButton();
@@ -58,6 +37,9 @@ private slots:
void detailsButtonText();
void expandDetailsWithoutMoving();
+ void optionsEmptyByDefault();
+ void changeNativeOption();
+
#ifndef Q_OS_MAC
void shortcut();
#endif
@@ -75,6 +57,13 @@ private slots:
void acceptedRejectedSignals();
void acceptedRejectedSignals_data();
+ void overrideDone_data();
+ void overrideDone();
+
+ void hideNativeByDestruction();
+
+ void explicitDoneAfterButtonClicked();
+
void cleanup();
};
@@ -153,6 +142,60 @@ void ExecCloseHelper::timerEvent(QTimerEvent *te)
}
}
+void tst_QMessageBox::initTestCase_data()
+{
+ QTest::addColumn<bool>("useNativeDialog");
+ QTest::newRow("widget") << false;
+ if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) {
+ if (theme->usePlatformNativeDialog(QPlatformTheme::MessageDialog))
+ QTest::newRow("native") << true;
+ }
+}
+
+void tst_QMessageBox::init()
+{
+ QFETCH_GLOBAL(bool, useNativeDialog);
+ qApp->setAttribute(Qt::AA_DontUseNativeDialogs, !useNativeDialog);
+}
+
+class OverridingMessageBox : public QMessageBox
+{
+public:
+ void done(int result) override {
+ doneResult = result;
+ QMessageBox::done(result);
+ }
+ std::optional<int> doneResult;
+};
+
+void tst_QMessageBox::overrideDone_data()
+{
+ QTest::addColumn<QMessageBox::StandardButton>("button");
+ QTest::addColumn<int>("closeAction");
+ QTest::addColumn<int>("result");
+
+ QTest::newRow("close") << QMessageBox::Help << int(ExecCloseHelper::CloseWindow) << 0;
+ QTest::newRow("yes") << QMessageBox::Yes << int(Qt::Key_Enter) << int(QMessageBox::Yes);
+ QTest::newRow("no") << QMessageBox::No << int(Qt::Key_Enter) << int(QMessageBox::No);
+}
+
+void tst_QMessageBox::overrideDone()
+{
+ QFETCH(QMessageBox::StandardButton, button);
+ QFETCH(int, closeAction);
+ QFETCH(int, result);
+
+ OverridingMessageBox messageBox;
+ messageBox.addButton(button);
+ messageBox.setDefaultButton(button);
+ ExecCloseHelper closeHelper;
+ closeHelper.start(closeAction, &messageBox);
+ messageBox.exec();
+ QVERIFY(messageBox.doneResult.has_value());
+ QCOMPARE(*messageBox.doneResult, result);
+
+}
+
void tst_QMessageBox::cleanup()
{
QTRY_VERIFY(QApplication::topLevelWidgets().isEmpty()); // OS X requires TRY
@@ -179,6 +222,15 @@ void tst_QMessageBox::sanityTest()
msgBox.exec();
}
+void tst_QMessageBox::baseClassSetVisible()
+{
+ QMessageBox msgBox;
+ msgBox.setText("Hello World");
+ msgBox.QDialog::setVisible(true);
+ QCOMPARE(msgBox.isVisible(), true);
+ msgBox.close();
+}
+
void tst_QMessageBox::button()
{
QMessageBox msgBox;
@@ -387,7 +439,7 @@ void tst_QMessageBox::shortcut()
msgBox.addButton("&Maybe", QMessageBox::YesRole);
ExecCloseHelper closeHelper;
closeHelper.start(Qt::Key_M, &msgBox);
- QCOMPARE(msgBox.exec(), 2);
+ QCOMPARE(msgBox.exec(), 4);
}
#endif
@@ -422,72 +474,61 @@ void tst_QMessageBox::staticSourceCompat()
// source compat tests for < 4.2
QT_WARNING_PUSH
QT_WARNING_DISABLE_DEPRECATED
+#define COMPARE(real, exp) do {\
+ const auto pressed = static_cast<QMessageBox::StandardButton>(real);\
+ const auto expected = static_cast<QMessageBox::StandardButton>(exp);\
+ if (!QTest::qCompare(pressed, expected, #real, #exp, __FILE__, __LINE__)) \
+ return; } while (false)
+
ExecCloseHelper closeHelper;
closeHelper.start(Qt::Key_Enter);
ret = QMessageBox::information(nullptr, "title", "text", QMessageBox::Yes, QMessageBox::No);
- int expectedButton = int(QMessageBox::Yes);
- if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) {
- const int dialogButtonBoxLayout = theme->themeHint(QPlatformTheme::DialogButtonBoxLayout).toInt();
- if (dialogButtonBoxLayout == QDialogButtonBox::MacLayout
- || dialogButtonBoxLayout == QDialogButtonBox::GnomeLayout)
- expectedButton = int(QMessageBox::No);
- }
- QCOMPARE(ret, expectedButton);
+ COMPARE(ret, QMessageBox::No);
QVERIFY(closeHelper.done());
closeHelper.start(Qt::Key_Enter);
ret = QMessageBox::information(nullptr, "title", "text", QMessageBox::Yes | QMessageBox::Default, QMessageBox::No);
- QCOMPARE(ret, int(QMessageBox::Yes));
+ COMPARE(ret, int(QMessageBox::Yes));
QVERIFY(closeHelper.done());
+#if QT_DEPRECATED_SINCE(6, 2)
+ // The overloads below are valid only before 6.2
closeHelper.start(Qt::Key_Enter);
ret = QMessageBox::information(nullptr, "title", "text", QMessageBox::Yes, QMessageBox::No | QMessageBox::Default);
- QCOMPARE(ret, int(QMessageBox::No));
+ COMPARE(ret, int(QMessageBox::No));
QVERIFY(closeHelper.done());
closeHelper.start(Qt::Key_Enter);
ret = QMessageBox::information(nullptr, "title", "text", QMessageBox::Yes | QMessageBox::Default, QMessageBox::No | QMessageBox::Escape);
- QCOMPARE(ret, int(QMessageBox::Yes));
+ COMPARE(ret, int(QMessageBox::Yes));
QVERIFY(closeHelper.done());
closeHelper.start(Qt::Key_Enter);
ret = QMessageBox::information(nullptr, "title", "text", QMessageBox::Yes | QMessageBox::Escape, QMessageBox::No | QMessageBox::Default);
- QCOMPARE(ret, int(QMessageBox::No));
+ COMPARE(ret, int(QMessageBox::No));
QVERIFY(closeHelper.done());
// the button text versions
closeHelper.start(Qt::Key_Enter);
ret = QMessageBox::information(nullptr, "title", "text", "Yes", "No", QString(), 1);
- QCOMPARE(ret, 1);
+ COMPARE(ret, 3); // Custom button opaque result
QVERIFY(closeHelper.done());
-
- if (0) { // don't run these tests since the dialog won't close!
- closeHelper.start(Qt::Key_Escape);
- ret = QMessageBox::information(nullptr, "title", "text", "Yes", "No", QString(), 1);
- QCOMPARE(ret, -1);
- QVERIFY(closeHelper.done());
-
- closeHelper.start(Qt::Key_Escape);
- ret = QMessageBox::information(nullptr, "title", "text", "Yes", "No", QString(), 0, 1);
- QCOMPARE(ret, 1);
- QVERIFY(closeHelper.done());
- }
+#endif // QT_DEPRECATED_SINCE(6, 2)
+#undef COMPARE
QT_WARNING_POP
}
void tst_QMessageBox::instanceSourceCompat()
{
-QT_WARNING_PUSH
-QT_WARNING_DISABLE_DEPRECATED
- QMessageBox mb("Application name here",
- "Saving the file will overwrite the original file on the disk.\n"
- "Do you really want to save?",
- QMessageBox::Information,
- QMessageBox::Yes | QMessageBox::Default,
- QMessageBox::No,
- QMessageBox::Cancel | QMessageBox::Escape);
- mb.setButtonText(QMessageBox::Yes, "Save");
- mb.setButtonText(QMessageBox::No, "Discard");
+ QMessageBox mb(QMessageBox::Information,
+ "Application name here",
+ "Saving the file will overwrite the original file on the disk.\n"
+ "Do you really want to save?",
+ QMessageBox::Yes | QMessageBox::No | QMessageBox::Cancel);
+ mb.setDefaultButton(QMessageBox::Yes);
+ mb.setEscapeButton(QMessageBox::Cancel);
+ mb.button(QMessageBox::Yes)->setText("Save");
+ mb.button(QMessageBox::No)->setText("Discard");
mb.addButton("&Revert", QMessageBox::RejectRole);
mb.addButton("&Zoo", QMessageBox::ActionRole);
@@ -499,15 +540,18 @@ QT_WARNING_DISABLE_DEPRECATED
#ifndef Q_OS_MAC
// mnemonics are not used on OS X
closeHelper.start(QKeyCombination(Qt::ALT | Qt::Key_R).toCombined(), &mb);
- QCOMPARE(mb.exec(), 0);
+ QCOMPARE(mb.exec(), 2);
closeHelper.start(QKeyCombination(Qt::ALT | Qt::Key_Z).toCombined(), &mb);
- QCOMPARE(mb.exec(), 1);
+ QCOMPARE(mb.exec(), 3);
#endif
-QT_WARNING_POP
}
void tst_QMessageBox::detailsText()
{
+ QFETCH_GLOBAL(bool, useNativeDialog);
+ if (useNativeDialog)
+ QSKIP("Native dialogs do not propagate expose events");
+
QMessageBox box;
QString text("This is the details text.");
box.setDetailedText(text);
@@ -521,6 +565,10 @@ void tst_QMessageBox::detailsText()
void tst_QMessageBox::detailsButtonText()
{
+ QFETCH_GLOBAL(bool, useNativeDialog);
+ if (useNativeDialog)
+ QSKIP("Native dialogs do not propagate expose events");
+
QMessageBox box;
box.setDetailedText("bla");
box.open();
@@ -542,6 +590,10 @@ void tst_QMessageBox::detailsButtonText()
void tst_QMessageBox::expandDetailsWithoutMoving() // QTBUG-32473
{
+ QFETCH_GLOBAL(bool, useNativeDialog);
+ if (useNativeDialog)
+ QSKIP("Native dialogs do not propagate expose events");
+
tst_ResizingMessageBox box;
box.setDetailedText("bla");
box.show();
@@ -567,6 +619,20 @@ void tst_QMessageBox::expandDetailsWithoutMoving() // QTBUG-32473
QCOMPARE(box.geometry().topLeft(), geom.topLeft());
}
+void tst_QMessageBox::optionsEmptyByDefault()
+{
+ QMessageBox b;
+ QCOMPARE(b.options(), QMessageBox::Options());
+ QVERIFY(!b.testOption(QMessageBox::Option::DontUseNativeDialog));
+}
+
+void tst_QMessageBox::changeNativeOption()
+{
+ QMessageBox b;
+ b.setOption(QMessageBox::Option::DontUseNativeDialog);
+ QCOMPARE(b.options(), QMessageBox::Options(QMessageBox::Option::DontUseNativeDialog));
+}
+
void tst_QMessageBox::incorrectDefaultButton()
{
ExecCloseHelper closeHelper;
@@ -581,6 +647,7 @@ void tst_QMessageBox::incorrectDefaultButton()
QMessageBox::question(nullptr, "", "I've been hit!",QFlag(QMessageBox::Ok | QMessageBox::Cancel),QMessageBox::Save);
QVERIFY(closeHelper.done());
+#if QT_DEPRECATED_SINCE(6, 2)
closeHelper.start(Qt::Key_Escape);
QTest::ignoreMessage(QtWarningMsg, "QDialogButtonBox::createButton: Invalid ButtonRole, button not added");
QTest::ignoreMessage(QtWarningMsg, "QDialogButtonBox::createButton: Invalid ButtonRole, button not added");
@@ -590,6 +657,7 @@ QT_WARNING_DISABLE_DEPRECATED
QMessageBox::question(nullptr, "", "I've been hit!",QMessageBox::Ok | QMessageBox::Cancel,QMessageBox::Save | QMessageBox::Cancel,QMessageBox::Ok);
QT_WARNING_POP
QVERIFY(closeHelper.done());
+#endif
}
void tst_QMessageBox::updateSize()
@@ -639,6 +707,10 @@ Q_DECLARE_METATYPE(RoleSet);
void tst_QMessageBox::acceptedRejectedSignals()
{
+ QFETCH_GLOBAL(bool, useNativeDialog);
+ if (useNativeDialog)
+ QSKIP("Native dialogs do not propagate expose events");
+
QMessageBox messageBox(QMessageBox::Information, "Test window", "Test text");
QFETCH(ButtonsCreator, buttonsCreator);
@@ -660,7 +732,7 @@ void tst_QMessageBox::acceptedRejectedSignals()
button->click();
if (roles.contains(messageBox.buttonRole(button)))
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
else
QVERIFY(spy.isEmpty());
}
@@ -718,5 +790,78 @@ void tst_QMessageBox::acceptedRejectedSignals_data()
addCustomButtonsData();
}
+void tst_QMessageBox::hideNativeByDestruction()
+{
+ QWidget window;
+ QWidget *child = new QWidget(&window);
+ QPointer<QMessageBox> dialog = new QMessageBox(child);
+ // Make it application modal so that we don't end up with a sheet on macOS
+ dialog->setWindowModality(Qt::ApplicationModal);
+ window.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&window));
+ dialog->open();
+
+ // We test that the dialog opens and closes by watching the activation of the
+ // transient parent window. If it doesn't deactivate, then we have to skip.
+ const auto windowActive = [&window]{ return window.isActiveWindow(); };
+ const auto windowInactive = [&window]{ return !window.isActiveWindow(); };
+ if (!QTest::qWaitFor(windowInactive, 2000))
+ QSKIP("Dialog didn't activate");
+
+ // This should destroy the dialog and close the native window
+ child->deleteLater();
+ QTRY_VERIFY(!dialog);
+ // If the native window is still open, then the transient parent can't become
+ // active
+ window.activateWindow();
+ QVERIFY(QTest::qWaitFor(windowActive));
+}
+
+void tst_QMessageBox::explicitDoneAfterButtonClicked()
+{
+ QMessageBox msgBox;
+ auto *standardButton = msgBox.addButton(QMessageBox::Ok);
+ auto *customButton = msgBox.addButton("Custom", QMessageBox::RejectRole);
+
+ QSignalSpy acceptedSpy(&msgBox, &QDialog::accepted);
+ QSignalSpy rejectedSpy(&msgBox, &QDialog::rejected);
+
+ msgBox.setDefaultButton(standardButton);
+ ExecCloseHelper closeHelper;
+ closeHelper.start(Qt::Key_Enter, &msgBox);
+ msgBox.exec();
+ QCOMPARE(msgBox.clickedButton(), standardButton);
+ QCOMPARE(msgBox.result(), QMessageBox::Ok);
+ QCOMPARE(acceptedSpy.size(), 1);
+ QCOMPARE(rejectedSpy.size(), 0);
+
+ msgBox.accept();
+ QCOMPARE(msgBox.result(), QDialog::Accepted);
+ QCOMPARE(acceptedSpy.size(), 2);
+ QCOMPARE(rejectedSpy.size(), 0);
+ msgBox.reject();
+ QCOMPARE(msgBox.result(), QDialog::Rejected);
+ QCOMPARE(acceptedSpy.size(), 2);
+ QCOMPARE(rejectedSpy.size(), 1);
+
+ msgBox.setDefaultButton(customButton);
+ closeHelper.start(Qt::Key_Enter, &msgBox);
+ msgBox.exec();
+ QCOMPARE(msgBox.clickedButton(), customButton);
+ QVERIFY(msgBox.result() != QDialog::Accepted);
+ QVERIFY(msgBox.result() != QDialog::Rejected);
+ QCOMPARE(acceptedSpy.size(), 2);
+ QCOMPARE(rejectedSpy.size(), 2);
+
+ msgBox.accept();
+ QCOMPARE(msgBox.result(), QDialog::Accepted);
+ QCOMPARE(acceptedSpy.size(), 3);
+ QCOMPARE(rejectedSpy.size(), 2);
+ msgBox.reject();
+ QCOMPARE(msgBox.result(), QDialog::Rejected);
+ QCOMPARE(acceptedSpy.size(), 3);
+ QCOMPARE(rejectedSpy.size(), 3);
+}
+
QTEST_MAIN(tst_QMessageBox)
#include "tst_qmessagebox.moc"
diff --git a/tests/auto/widgets/dialogs/qprogressdialog/CMakeLists.txt b/tests/auto/widgets/dialogs/qprogressdialog/CMakeLists.txt
index 5651cf8d26..4861f3af25 100644
--- a/tests/auto/widgets/dialogs/qprogressdialog/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/qprogressdialog/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qprogressdialog.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qprogressdialog Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qprogressdialog LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qprogressdialog
SOURCES
tst_qprogressdialog.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp b/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp
index 86963ce24a..baf727d766 100644
--- a/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.cpp
+++ b/tests/auto/widgets/dialogs/qprogressdialog/tst_qprogressdialog.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 <QTest>
@@ -109,7 +84,7 @@ void tst_QProgressDialog::autoShow()
// in order to test for the setValue() behavior instead
// See autoShowCtor() for the ctor timer check
dlg.setValue(value);
- QThread::msleep(delay);
+ QThread::sleep(std::chrono::milliseconds{delay});
dlg.setValue(min+1);
QCOMPARE(dlg.isVisible(), expectedAutoShow);
}
@@ -118,7 +93,7 @@ void tst_QProgressDialog::autoShowCtor()
{
QProgressDialog dlg;
QVERIFY(!dlg.isVisible());
- QThread::msleep(dlg.minimumDuration());
+ QThread::sleep(std::chrono::milliseconds{dlg.minimumDuration()});
QTRY_VERIFY(dlg.isVisible());
}
@@ -206,7 +181,7 @@ void tst_QProgressDialog::QTBUG_31046()
{
QProgressDialog dlg("", "", 50, 60);
dlg.setValue(0);
- QThread::msleep(200);
+ QThread::sleep(std::chrono::milliseconds{200});
dlg.setValue(50);
QCOMPARE(50, dlg.value());
}
diff --git a/tests/auto/widgets/dialogs/qsidebar/CMakeLists.txt b/tests/auto/widgets/dialogs/qsidebar/CMakeLists.txt
index 8d2fda708d..bf9513bb69 100644
--- a/tests/auto/widgets/dialogs/qsidebar/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/qsidebar/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsidebar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsidebar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsidebar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsidebar
SOURCES
tst_qsidebar.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::Widgets
diff --git a/tests/auto/widgets/dialogs/qsidebar/tst_qsidebar.cpp b/tests/auto/widgets/dialogs/qsidebar/tst_qsidebar.cpp
index 81bd77fda6..cdbf2011a4 100644
--- a/tests/auto/widgets/dialogs/qsidebar/tst_qsidebar.cpp
+++ b/tests/auto/widgets/dialogs/qsidebar/tst_qsidebar.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -63,9 +38,9 @@ void tst_QSidebar::setUrls()
QCOMPARE(model->rowCount(), 0);
qsidebar.setUrls(urls);
QCOMPARE(qsidebar.urls(), urls);
- QCOMPARE(model->rowCount(), urls.count());
+ QCOMPARE(model->rowCount(), urls.size());
qsidebar.setUrls(urls);
- QCOMPARE(model->rowCount(), urls.count());
+ QCOMPARE(model->rowCount(), urls.size());
}
void tst_QSidebar::selectUrls()
@@ -80,7 +55,7 @@ void tst_QSidebar::selectUrls()
QSignalSpy spy(&qsidebar, SIGNAL(goToUrl(QUrl)));
qsidebar.selectUrl(urls.at(0));
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QSidebar::addUrls()
@@ -196,7 +171,7 @@ void tst_QSidebar::goToUrl()
QSignalSpy spy(&qsidebar, SIGNAL(goToUrl(QUrl)));
QTest::mousePress(qsidebar.viewport(), Qt::LeftButton, {},
qsidebar.visualRect(qsidebar.model()->index(0, 0)).center());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE((spy.value(0)).at(0).toUrl(), urls.first());
}
diff --git a/tests/auto/widgets/dialogs/qwizard/CMakeLists.txt b/tests/auto/widgets/dialogs/qwizard/CMakeLists.txt
index 81dc9e85b2..d863126560 100644
--- a/tests/auto/widgets/dialogs/qwizard/CMakeLists.txt
+++ b/tests/auto/widgets/dialogs/qwizard/CMakeLists.txt
@@ -1,17 +1,15 @@
-# Generated from qwizard.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qwizard Test:
#####################################################################
-qt_internal_add_test(tst_qwizard
- SOURCES
- tst_qwizard.cpp
- tst_qwizard_2.cpp
- PUBLIC_LIBRARIES
- Qt::Gui
- Qt::Widgets
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwizard LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Resources:
set(qwizard_resource_files
@@ -21,10 +19,15 @@ set(qwizard_resource_files
"images/watermark.png"
)
-qt_internal_add_resource(tst_qwizard "qwizard"
- PREFIX
- "/"
- FILES
- ${qwizard_resource_files}
+qt_internal_add_test(tst_qwizard
+ SOURCES
+ tst_qwizard.cpp
+ tst_qwizard_2.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::Widgets
+ Qt::WidgetsPrivate
+ TESTDATA ${qwizard_resource_files}
+ BUILTIN_TESTDATA
)
diff --git a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp
index 8f655490e1..c0afed6919 100644
--- a/tests/auto/widgets/dialogs/qwizard/tst_qwizard.cpp
+++ b/tests/auto/widgets/dialogs/qwizard/tst_qwizard.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 <QFont>
@@ -42,6 +17,10 @@
#include <QSignalSpy>
#include <QOperatingSystemVersion>
+#include <QtWidgets/private/qapplication_p.h>
+
+#include <memory>
+
Q_DECLARE_METATYPE(QWizard::WizardButton);
static QImage grabWidget(QWidget *window)
@@ -89,6 +68,7 @@ private slots:
void sideWidget();
void objectNames_data();
void objectNames();
+ void changePages();
// task-specific tests below me:
void task177716_disableCommitButton();
@@ -420,7 +400,7 @@ void tst_QWizard::setPixmap()
QVERIFY(wizard.pixmap(QWizard::BannerPixmap).isNull());
QVERIFY(wizard.pixmap(QWizard::LogoPixmap).isNull());
QVERIFY(wizard.pixmap(QWizard::WatermarkPixmap).isNull());
- if (QOperatingSystemVersion::current() <= QOperatingSystemVersion::MacOSHighSierra)
+ if (QOperatingSystemVersion::currentType() == QOperatingSystemVersion::MacOS)
QVERIFY(!wizard.pixmap(QWizard::BackgroundPixmap).isNull());
else
QVERIFY(wizard.pixmap(QWizard::BackgroundPixmap).isNull());
@@ -428,7 +408,7 @@ void tst_QWizard::setPixmap()
QVERIFY(page->pixmap(QWizard::BannerPixmap).isNull());
QVERIFY(page->pixmap(QWizard::LogoPixmap).isNull());
QVERIFY(page->pixmap(QWizard::WatermarkPixmap).isNull());
- if (QOperatingSystemVersion::current() <= QOperatingSystemVersion::MacOSHighSierra)
+ if (QOperatingSystemVersion::currentType() == QOperatingSystemVersion::MacOS)
QVERIFY(!wizard.pixmap(QWizard::BackgroundPixmap).isNull());
else
QVERIFY(page->pixmap(QWizard::BackgroundPixmap).isNull());
@@ -546,7 +526,7 @@ void tst_QWizard::addPage()
QCOMPARE(wizard.addPage(pages[i]), i);
QCOMPARE(pages[i]->window(), (QWidget *)&wizard);
QCOMPARE(wizard.startId(), 0);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), i);
}
@@ -559,37 +539,37 @@ void tst_QWizard::addPage()
QVERIFY(!wizard.page(N + 1));
wizard.setPage(N + 50, new QWizardPage);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), N + 50);
wizard.setPage(-3000, new QWizardPage);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), -3000);
QWizardPage *pageX = new QWizardPage;
QCOMPARE(wizard.addPage(pageX), N + 51);
QCOMPARE(wizard.page(N + 51), pageX);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), N + 51);
QCOMPARE(wizard.addPage(new QWizardPage), N + 52);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), N + 52);
QTest::ignoreMessage(QtWarningMsg,"QWizard::setPage: Cannot insert null page");
wizard.addPage(0); // generates a warning
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
delete parent;
}
#define CHECK_VISITED(wizard, list) \
do { \
- QList<int> myList = list; \
+ const QList<int> myList = list; \
QCOMPARE((wizard).visitedIds(), myList); \
- Q_FOREACH(int id, myList) \
+ for (int id : myList) \
QVERIFY((wizard).hasVisitedPage(id)); \
} while (0)
@@ -608,7 +588,7 @@ void tst_QWizard::setPage()
page = new QWizardPage(parent);
QTest::ignoreMessage(QtWarningMsg,"QWizard::setPage: Cannot insert page with ID -1");
wizard.setPage(-1, page); // gives a warning and does nothing
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QVERIFY(!wizard.page(-2));
QVERIFY(!wizard.page(-1));
QVERIFY(!wizard.page(0));
@@ -620,7 +600,7 @@ void tst_QWizard::setPage()
page = new QWizardPage(parent);
wizard.setPage(0, page);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), 0);
QCOMPARE(page->window(), (QWidget *)&wizard);
@@ -633,7 +613,7 @@ void tst_QWizard::setPage()
page = new QWizardPage(parent);
wizard.setPage(-2, page);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), -2);
QCOMPARE(page->window(), (QWidget *)&wizard);
@@ -654,7 +634,7 @@ void tst_QWizard::setPage()
page = new QWizardPage(parent);
wizard.setPage(2, page);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), 2);
QCOMPARE(wizard.page(2), page);
@@ -673,7 +653,7 @@ void tst_QWizard::setPage()
page = new QWizardPage(parent);
wizard.setPage(-3, page);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), -3);
QCOMPARE(wizard.page(-3), page);
@@ -744,7 +724,7 @@ void tst_QWizard::setPage()
QCOMPARE(wizard.nextId(), -2);
CHECK_VISITED(wizard, QList<int>() << -3);
}
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
delete parent;
}
@@ -1002,7 +982,7 @@ void tst_QWizard::setOption_IgnoreSubTitles()
// Check that subtitles are shown when they should (i.e.,
// they're set and IgnoreSubTitles is off).
- qApp->setActiveWindow(0); // ensure no focus rectangle around cancel button
+ QApplicationPrivate::setActiveWindow(0); // ensure no focus rectangle around cancel button
QImage i11 = grabWidget(&wizard1);
QImage i21 = grabWidget(&wizard2);
QVERIFY(i11 != i21);
@@ -1603,9 +1583,9 @@ class SetPage : public Operation
QString describe() const override { return QLatin1String("set page ") + QString::number(page); }
int page;
public:
- static QSharedPointer<SetPage> create(int page)
+ static std::shared_ptr<SetPage> create(int page)
{
- QSharedPointer<SetPage> o = QSharedPointer<SetPage>::create();
+ std::shared_ptr<SetPage> o = std::make_shared<SetPage>();
o->page = page;
return o;
}
@@ -1617,9 +1597,9 @@ class SetStyle : public Operation
QString describe() const override { return QLatin1String("set style ") + QString::number(style); }
QWizard::WizardStyle style;
public:
- static QSharedPointer<SetStyle> create(QWizard::WizardStyle style)
+ static std::shared_ptr<SetStyle> create(QWizard::WizardStyle style)
{
- QSharedPointer<SetStyle> o = QSharedPointer<SetStyle>::create();
+ std::shared_ptr<SetStyle> o = std::make_shared<SetStyle>();
o->style = style;
return o;
}
@@ -1632,9 +1612,9 @@ class SetOption : public Operation
QWizard::WizardOption option;
bool on;
public:
- static QSharedPointer<SetOption> create(QWizard::WizardOption option, bool on)
+ static std::shared_ptr<SetOption> create(QWizard::WizardOption option, bool on)
{
- QSharedPointer<SetOption> o = QSharedPointer<SetOption>::create();
+ std::shared_ptr<SetOption> o = std::make_shared<SetOption>();
o->option = option;
o->on = on;
return o;
@@ -1663,8 +1643,8 @@ class OptionInfo
tags[QWizard::HaveCustomButton3] = "15/CB3";
for (int i = 0; i < 2; ++i) {
- QMap<QWizard::WizardOption, QSharedPointer<Operation> > operations_;
- foreach (QWizard::WizardOption option, tags.keys())
+ QMap<QWizard::WizardOption, std::shared_ptr<Operation> > operations_;
+ for (const auto &[option, _] : std::as_const(tags).asKeyValueRange())
operations_[option] = SetOption::create(option, i == 1);
operations << operations_;
}
@@ -1672,7 +1652,7 @@ class OptionInfo
OptionInfo(OptionInfo const&);
OptionInfo& operator=(OptionInfo const&);
QMap<QWizard::WizardOption, QString> tags;
- QList<QMap<QWizard::WizardOption, QSharedPointer<Operation> > > operations;
+ QList<QMap<QWizard::WizardOption, std::shared_ptr<Operation> > > operations;
public:
static OptionInfo &instance()
{
@@ -1681,7 +1661,7 @@ public:
}
QString tag(QWizard::WizardOption option) const { return tags.value(option); }
- QSharedPointer<Operation> operation(QWizard::WizardOption option, bool on) const
+ std::shared_ptr<Operation> operation(QWizard::WizardOption option, bool on) const
{ return operations.at(on).value(option); }
QList<QWizard::WizardOption> options() const { return tags.keys(); }
};
@@ -1692,7 +1672,7 @@ QString SetOption::describe() const
+ QLatin1Char(on ? '1' : '0');
}
-Q_DECLARE_METATYPE(QList<QSharedPointer<Operation>>)
+Q_DECLARE_METATYPE(QList<std::shared_ptr<Operation>>)
class TestGroup
{
@@ -1709,7 +1689,7 @@ public:
combinations.clear();
}
- QList<QSharedPointer<Operation>> &add()
+ QList<std::shared_ptr<Operation>> &add()
{
combinations.resize(combinations.size() + 1);
return combinations.last();
@@ -1717,7 +1697,7 @@ public:
void createTestRows()
{
- for (int i = 0; i < combinations.count(); ++i) {
+ for (int i = 0; i < combinations.size(); ++i) {
QTest::newRow((name.toLatin1() + ", row " + QByteArray::number(i)).constData())
<< (i == 0) << (type == Equality) << combinations.at(i);
++nRows_;
@@ -1730,7 +1710,7 @@ private:
QString name;
Type type;
int nRows_;
- QList<QList<QSharedPointer<Operation>>> combinations;
+ QList<QList<std::shared_ptr<Operation>>> combinations;
};
class IntroPage : public QWizardPage
@@ -1807,16 +1787,16 @@ public:
~TestWizard()
{
- foreach (int id, pageIds) {
+ for (int id : std::as_const(pageIds)) {
QWizardPage *page_to_delete = page(id);
removePage(id);
delete page_to_delete;
}
}
- void applyOperations(const QList<QSharedPointer<Operation>> &operations)
+ void applyOperations(const QList<std::shared_ptr<Operation>> &operations)
{
- foreach (const QSharedPointer<Operation> &op, operations) {
+ for (const std::shared_ptr<Operation> &op : operations) {
if (op) {
op->apply(this);
opsDescr += QLatin1Char('(') + op->describe() + QLatin1String(") ");
@@ -1836,25 +1816,31 @@ public:
class CombinationsTestData
{
TestGroup testGroup;
- QList<QSharedPointer<Operation>> pageOps;
- QList<QSharedPointer<Operation>> styleOps;
- QMap<bool, QList<QSharedPointer<Operation>>> setAllOptions;
+ const std::shared_ptr<Operation> pageOps[3] = {
+ SetPage::create(0),
+ SetPage::create(1),
+ SetPage::create(2),
+ };
+ const std::shared_ptr<Operation> styleOps[3] = {
+ SetStyle::create(QWizard::ClassicStyle),
+ SetStyle::create(QWizard::ModernStyle),
+ SetStyle::create(QWizard::MacStyle),
+ };
+ QMap<bool, QList<std::shared_ptr<Operation>>> setAllOptions;
public:
CombinationsTestData()
{
QTest::addColumn<bool>("ref");
QTest::addColumn<bool>("testEquality");
- QTest::addColumn<QList<QSharedPointer<Operation>>>("operations");
- pageOps << SetPage::create(0) << SetPage::create(1) << SetPage::create(2);
- styleOps << SetStyle::create(QWizard::ClassicStyle) << SetStyle::create(QWizard::ModernStyle)
- << SetStyle::create(QWizard::MacStyle);
-#define SETPAGE(page) pageOps.at(page)
-#define SETSTYLE(style) styleOps.at(style)
+ QTest::addColumn<QList<std::shared_ptr<Operation>>>("operations");
+#define SETPAGE(page) pageOps[page]
+#define SETSTYLE(style) styleOps[style]
#define OPT(option, on) OptionInfo::instance().operation(option, on)
#define CLROPT(option) OPT(option, false)
#define SETOPT(option) OPT(option, true)
- foreach (QWizard::WizardOption option, OptionInfo::instance().options()) {
+ const auto options = OptionInfo::instance().options();
+ for (QWizard::WizardOption option : options) {
setAllOptions[false] << CLROPT(option);
setAllOptions[true] << SETOPT(option);
}
@@ -1911,7 +1897,7 @@ public:
testGroup.createTestRows();
for (int i = 0; i < 2; ++i) {
- QList<QSharedPointer<Operation>> setOptions = setAllOptions.value(i == 1);
+ QList<std::shared_ptr<Operation>> setOptions = setAllOptions.value(i == 1);
testGroup.reset("testAll 3.1");
testGroup.add() << setOptions;
@@ -1928,21 +1914,22 @@ public:
testGroup.createTestRows();
}
- foreach (const QSharedPointer<Operation> &pageOp, pageOps) {
+ for (const std::shared_ptr<Operation> &pageOp : pageOps) {
testGroup.reset("testAll 4.1");
testGroup.add() << pageOp;
testGroup.add() << pageOp << pageOp;
testGroup.createTestRows();
for (int i = 0; i < 2; ++i) {
- QList<QSharedPointer<Operation>> optionOps = setAllOptions.value(i == 1);
+ QList<std::shared_ptr<Operation>> optionOps = setAllOptions.value(i == 1);
testGroup.reset("testAll 4.2");
testGroup.add() << optionOps << pageOp;
testGroup.add() << pageOp << optionOps;
testGroup.createTestRows();
- foreach (QWizard::WizardOption option, OptionInfo::instance().options()) {
- QSharedPointer<Operation> optionOp = OPT(option, i == 1);
+ const auto options = OptionInfo::instance().options();
+ for (QWizard::WizardOption option : options) {
+ std::shared_ptr<Operation> optionOp = OPT(option, i == 1);
testGroup.reset("testAll 4.3");
testGroup.add() << optionOp << pageOp;
testGroup.add() << pageOp << optionOp;
@@ -1951,21 +1938,22 @@ public:
}
}
- foreach (const QSharedPointer<Operation> &styleOp, styleOps) {
+ for (const std::shared_ptr<Operation> &styleOp : styleOps) {
testGroup.reset("testAll 5.1");
testGroup.add() << styleOp;
testGroup.add() << styleOp << styleOp;
testGroup.createTestRows();
for (int i = 0; i < 2; ++i) {
- QList<QSharedPointer<Operation>> optionOps = setAllOptions.value(i == 1);
+ QList<std::shared_ptr<Operation>> optionOps = setAllOptions.value(i == 1);
testGroup.reset("testAll 5.2");
testGroup.add() << optionOps << styleOp;
testGroup.add() << styleOp << optionOps;
testGroup.createTestRows();
- foreach (QWizard::WizardOption option, OptionInfo::instance().options()) {
- QSharedPointer<Operation> optionOp = OPT(option, i == 1);
+ const auto options = OptionInfo::instance().options();
+ for (QWizard::WizardOption option : options) {
+ std::shared_ptr<Operation> optionOp = OPT(option, i == 1);
testGroup.reset("testAll 5.3");
testGroup.add() << optionOp << styleOp;
testGroup.add() << styleOp << optionOp;
@@ -1974,8 +1962,8 @@ public:
}
}
- foreach (const QSharedPointer<Operation> &pageOp, pageOps) {
- foreach (const QSharedPointer<Operation> &styleOp, styleOps) {
+ for (const std::shared_ptr<Operation> &pageOp : pageOps) {
+ for (const std::shared_ptr<Operation> &styleOp : styleOps) {
testGroup.reset("testAll 6.1");
testGroup.add() << pageOp;
@@ -1993,7 +1981,7 @@ public:
testGroup.createTestRows();
for (int i = 0; i < 2; ++i) {
- QList<QSharedPointer<Operation>> optionOps = setAllOptions.value(i == 1);
+ QList<std::shared_ptr<Operation>> optionOps = setAllOptions.value(i == 1);
testGroup.reset("testAll 6.4");
testGroup.add() << optionOps << pageOp << styleOp;
testGroup.add() << pageOp << optionOps << styleOp;
@@ -2003,8 +1991,9 @@ public:
testGroup.add() << styleOp << pageOp << optionOps;
testGroup.createTestRows();
- foreach (QWizard::WizardOption option, OptionInfo::instance().options()) {
- QSharedPointer<Operation> optionOp = OPT(option, i == 1);
+ const auto options = OptionInfo::instance().options();
+ for (QWizard::WizardOption option : options) {
+ std::shared_ptr<Operation> optionOp = OPT(option, i == 1);
testGroup.reset("testAll 6.5");
testGroup.add() << optionOp << pageOp << styleOp;
testGroup.add() << pageOp << optionOp << styleOp;
@@ -2066,7 +2055,7 @@ void tst_QWizard::combinations()
{
QFETCH(bool, ref);
QFETCH(bool, testEquality);
- QFETCH(QList<QSharedPointer<Operation>>, operations);
+ QFETCH(const QList<std::shared_ptr<Operation>>, operations);
TestWizard wizard;
#if !defined(QT_NO_STYLE_WINDOWSVISTA)
@@ -2135,7 +2124,7 @@ public:
QList<WizardPage *> shown() const
{
QList<WizardPage *> result;
- foreach (WizardPage *page, pages)
+ for (WizardPage *page : pages)
if (page->shown())
result << page;
return result;
@@ -2153,19 +2142,19 @@ void tst_QWizard::showCurrentPageOnly()
wizard.show();
- QCOMPARE(pages.shown().count(), 1);
+ QCOMPARE(pages.shown().size(), 1);
QCOMPARE(pages.shown().first(), pages.all().first());
const int steps = 2;
for (int i = 0; i < steps; ++i)
wizard.next();
- QCOMPARE(pages.shown().count(), 1);
+ QCOMPARE(pages.shown().size(), 1);
QCOMPARE(pages.shown().first(), pages.all().at(steps));
wizard.restart();
- QCOMPARE(pages.shown().count(), 1);
+ QCOMPARE(pages.shown().size(), 1);
QCOMPARE(pages.shown().first(), pages.all().first());
}
@@ -2297,36 +2286,36 @@ void tst_QWizard::removePage()
wizard.restart();
QCOMPARE(wizard.pageIds().size(), 4);
QCOMPARE(wizard.visitedIds().size(), 1);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// Removing a non-existent page
wizard.removePage(4);
QCOMPARE(wizard.pageIds().size(), 4);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// Removing and then reinserting a page
QCOMPARE(wizard.pageIds().size(), 4);
QVERIFY(wizard.pageIds().contains(2));
wizard.removePage(2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), 2);
QCOMPARE(wizard.pageIds().size(), 3);
QVERIFY(!wizard.pageIds().contains(2));
wizard.setPage(2, page2);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(wizard.pageIds().size(), 4);
QVERIFY(wizard.pageIds().contains(2));
// Removing the same page twice
wizard.removePage(2); // restore
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), 2);
QCOMPARE(wizard.pageIds().size(), 3);
QVERIFY(!wizard.pageIds().contains(2));
wizard.removePage(2);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(wizard.pageIds().size(), 3);
QVERIFY(!wizard.pageIds().contains(2));
@@ -2336,9 +2325,9 @@ void tst_QWizard::removePage()
wizard.next();
QCOMPARE(wizard.visitedIds().size(), 2);
QCOMPARE(wizard.currentPage(), page1);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
wizard.removePage(2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), 2);
QCOMPARE(wizard.visitedIds().size(), 2);
@@ -2349,11 +2338,11 @@ void tst_QWizard::removePage()
wizard.setPage(2, page2); // restore
wizard.restart();
wizard.next();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(wizard.visitedIds().size(), 2);
QCOMPARE(wizard.currentPage(), page1);
wizard.removePage(0);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), 0);
QCOMPARE(wizard.visitedIds().size(), 1);
@@ -2365,11 +2354,11 @@ void tst_QWizard::removePage()
wizard.setPage(0, page0); // restore
wizard.restart();
wizard.next();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(wizard.visitedIds().size(), 2);
QCOMPARE(wizard.currentPage(), page1);
wizard.removePage(1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), 1);
QCOMPARE(wizard.visitedIds().size(), 1);
@@ -2379,7 +2368,7 @@ void tst_QWizard::removePage()
// Remove the current page which is the first (and only) one in the history
wizard.removePage(0);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), 0);
QCOMPARE(wizard.visitedIds().size(), 1);
@@ -2389,7 +2378,7 @@ void tst_QWizard::removePage()
QCOMPARE(wizard.currentPage(), page2);
//
wizard.removePage(2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), 2);
QCOMPARE(wizard.visitedIds().size(), 1);
@@ -2399,7 +2388,7 @@ void tst_QWizard::removePage()
QCOMPARE(wizard.currentPage(), page3);
//
wizard.removePage(3);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), 3);
QVERIFY(wizard.visitedIds().empty());
@@ -2587,7 +2576,8 @@ void tst_QWizard::task161658_alignments()
wizard.show();
QVERIFY(QTest::qWaitForWindowExposed(&wizard));
- foreach (QLabel *subtitleLabel, wizard.findChildren<QLabel *>()) {
+ const auto subtitleLabels = wizard.findChildren<QLabel *>();
+ for (QLabel *subtitleLabel : subtitleLabels) {
if (subtitleLabel->text().startsWith("SUBTITLE#")) {
QCOMPARE(lineEdit1.mapToGlobal(lineEdit1.contentsRect().bottomRight()).x(),
subtitleLabel->mapToGlobal(subtitleLabel->contentsRect().bottomRight()).x());
@@ -2720,6 +2710,45 @@ void tst_QWizard::taskQTBUG_46894_nextButtonShortcut()
}
}
+/* setCurrentId(int) method was added in QTBUG99488 */
+void tst_QWizard::changePages()
+{
+ QWizard wizard;
+
+ QList<QWizardPage*> pages;
+ for (int i = 0; i < 4; ++i) {
+ QWizardPage *page = new QWizardPage;
+ wizard.addPage(page);
+ pages.append(page);
+ }
+
+ wizard.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&wizard));
+
+ // Verify default page
+ QCOMPARE(wizard.currentPage(), pages.at(0));
+
+ wizard.next();
+ QVERIFY(wizard.currentId() == 1);
+ wizard.back();
+ QVERIFY(wizard.currentId() == 0);
+
+ // Test illegal page
+ QTest::ignoreMessage(QtMsgType::QtWarningMsg, "QWizard::setCurrentId: No such page: 5");
+ wizard.setCurrentId(5);
+ QCOMPARE(wizard.currentId(), 0);
+
+ for (int i = 0; i < 4; ++i) {
+ wizard.setCurrentId(i);
+ QCOMPARE(wizard.currentPage(), pages.at(i));
+ }
+
+ for (int i = 3; i >= 0; --i) {
+ wizard.setCurrentId(i);
+ QCOMPARE(wizard.currentPage(), pages.at(i));
+ }
+}
+
#endif // QT_CONFIG(shortcut)
QTEST_MAIN(tst_QWizard)
diff --git a/tests/auto/widgets/dialogs/qwizard/tst_qwizard_2.cpp b/tests/auto/widgets/dialogs/qwizard/tst_qwizard_2.cpp
index 1b8ef9ad0f..8eef99ff38 100644
--- a/tests/auto/widgets/dialogs/qwizard/tst_qwizard_2.cpp
+++ b/tests/auto/widgets/dialogs/qwizard/tst_qwizard_2.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 <QComboBox>
diff --git a/tests/auto/widgets/effects/CMakeLists.txt b/tests/auto/widgets/effects/CMakeLists.txt
index 3c0af4537a..fdc82023fb 100644
--- a/tests/auto/widgets/effects/CMakeLists.txt
+++ b/tests/auto/widgets/effects/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from effects.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qgraphicseffect)
add_subdirectory(qpixmapfilter)
diff --git a/tests/auto/widgets/effects/qgraphicseffect/BLACKLIST b/tests/auto/widgets/effects/qgraphicseffect/BLACKLIST
index 64a92d18aa..69367f06fd 100644
--- a/tests/auto/widgets/effects/qgraphicseffect/BLACKLIST
+++ b/tests/auto/widgets/effects/qgraphicseffect/BLACKLIST
@@ -1,2 +1,2 @@
-[prepareGeometryChangeInvalidateCache]
-opensuse-42.3
+[draw]
+wayland
diff --git a/tests/auto/widgets/effects/qgraphicseffect/CMakeLists.txt b/tests/auto/widgets/effects/qgraphicseffect/CMakeLists.txt
index a88859681b..e9d32b1a8d 100644
--- a/tests/auto/widgets/effects/qgraphicseffect/CMakeLists.txt
+++ b/tests/auto/widgets/effects/qgraphicseffect/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicseffect.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicseffect Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicseffect LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicseffect
SOURCES
tst_qgraphicseffect.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/effects/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/widgets/effects/qgraphicseffect/tst_qgraphicseffect.cpp
index 3ea4a100bb..3d1988e5da 100644
--- a/tests/auto/widgets/effects/qgraphicseffect/tst_qgraphicseffect.cpp
+++ b/tests/auto/widgets/effects/qgraphicseffect/tst_qgraphicseffect.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/QtTestWidgets>
@@ -379,7 +354,9 @@ void tst_QGraphicsEffect::draw()
// Effect is already enabled; nothing should happen.
effect->setEnabled(true);
- QTest::qWait(50);
+ // Send only posted events, not window system events,
+ // so that we don't get any spontaneous paint events.
+ QCoreApplication::sendPostedEvents();
QCOMPARE(effect->numRepaints, 0);
QCOMPARE(item->numRepaints, 0);
diff --git a/tests/auto/widgets/effects/qpixmapfilter/CMakeLists.txt b/tests/auto/widgets/effects/qpixmapfilter/CMakeLists.txt
index 733a45b334..c19e6c7cfd 100644
--- a/tests/auto/widgets/effects/qpixmapfilter/CMakeLists.txt
+++ b/tests/auto/widgets/effects/qpixmapfilter/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qpixmapfilter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpixmapfilter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpixmapfilter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpixmapfilter
SOURCES
tst_qpixmapfilter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
diff --git a/tests/auto/widgets/effects/qpixmapfilter/tst_qpixmapfilter.cpp b/tests/auto/widgets/effects/qpixmapfilter/tst_qpixmapfilter.cpp
index 10e6ec63e6..39087aeaaf 100644
--- a/tests/auto/widgets/effects/qpixmapfilter/tst_qpixmapfilter.cpp
+++ b/tests/auto/widgets/effects/qpixmapfilter/tst_qpixmapfilter.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 <QTest>
diff --git a/tests/auto/widgets/graphicsview/CMakeLists.txt b/tests/auto/widgets/graphicsview/CMakeLists.txt
index df3c4d4369..b0ea73b65e 100644
--- a/tests/auto/widgets/graphicsview/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from graphicsview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(QT_FEATURE_private_tests)
add_subdirectory(qgraphicsanchorlayout)
@@ -19,7 +20,4 @@ add_subdirectory(qgraphicspolygonitem)
add_subdirectory(qgraphicstransform)
add_subdirectory(qgraphicsproxywidget)
add_subdirectory(qgraphicswidget)
-# QTBUG-87671 # special case
-if(NOT ANDROID)
- add_subdirectory(qgraphicsview)
-endif()
+add_subdirectory(qgraphicsview)
diff --git a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/BLACKLIST
index ce0e42b3c7..fde971443d 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/BLACKLIST
+++ b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/BLACKLIST
@@ -1,2 +1,2 @@
[layoutDirection]
-ubuntu-20.04
+ubuntu-22.04
diff --git a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/CMakeLists.txt
index 1d1e576299..2b530d39f3 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicsanchorlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicsanchorlayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicsanchorlayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicsanchorlayout
SOURCES
tst_qgraphicsanchorlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
index 92cffa0226..cf37aa5639 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.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 <QTest>
#include <QtWidgets/qgraphicsanchorlayout.h>
diff --git a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout1/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout1/CMakeLists.txt
index 11d2767c9e..62235c8d1b 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout1/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout1/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicsanchorlayout1.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicsanchorlayout1 Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicsanchorlayout1 LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicsanchorlayout1
SOURCES
tst_qgraphicsanchorlayout1.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
index 9e0293d875..9a047b876d 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsanchorlayout1/tst_qgraphicsanchorlayout1.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 <QtGui>
#include <QTest>
@@ -1688,7 +1663,7 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
// Determine amount of widgets to add.
int widgetCount = -1;
- for (int i = 0; i < data.count(); ++i) {
+ for (int i = 0; i < data.size(); ++i) {
const BasicLayoutTestData item = data[i];
widgetCount = qMax(widgetCount, item.firstIndex);
widgetCount = qMax(widgetCount, item.secondIndex);
@@ -1703,7 +1678,7 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
// Setup anchor layout
TheAnchorLayout *layout = new TheAnchorLayout;
- for (int i = 0; i < data.count(); ++i) {
+ for (int i = 0; i < data.size(); ++i) {
const BasicLayoutTestData item = data[i];
layout->setAnchor(
getItem(item.firstIndex, widgets, layout),
@@ -1720,7 +1695,7 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
QCOMPARE(widget->size(), size);
// Validate
- for (int i = 0; i < result.count(); ++i) {
+ for (int i = 0; i < result.size(); ++i) {
const BasicLayoutTestResult item = result[i];
QRectF expected = item.rect;
QRectF actual = widgets[item.index]->geometry();
@@ -1732,7 +1707,7 @@ void tst_QGraphicsAnchorLayout1::testBasicLayout()
widget->setLayoutDirection(Qt::RightToLeft);
layout->activate();
// Validate
- for (int j = 0; j < result.count(); ++j) {
+ for (int j = 0; j < result.size(); ++j) {
const BasicLayoutTestResult item = result[j];
QRectF mirroredRect(item.rect);
// only valid cases are mirrored
@@ -2193,7 +2168,7 @@ void tst_QGraphicsAnchorLayout1::testRemoveCenterAnchor()
// Determine amount of widgets to add.
int widgetCount = -1;
- for (int i = 0; i < data.count(); ++i) {
+ for (int i = 0; i < data.size(); ++i) {
const BasicLayoutTestData item = data[i];
widgetCount = qMax(widgetCount, item.firstIndex);
widgetCount = qMax(widgetCount, item.secondIndex);
@@ -2210,7 +2185,7 @@ void tst_QGraphicsAnchorLayout1::testRemoveCenterAnchor()
// Setup anchor layout
TheAnchorLayout *layout = new TheAnchorLayout;
- for (int i = 0; i < data.count(); ++i) {
+ for (int i = 0; i < data.size(); ++i) {
const BasicLayoutTestData item = data[i];
layout->setAnchor(
getItem(item.firstIndex, widgets, layout),
@@ -2220,7 +2195,7 @@ void tst_QGraphicsAnchorLayout1::testRemoveCenterAnchor()
item.spacing );
}
- for (int i = 0; i < removeData.count(); ++i) {
+ for (int i = 0; i < removeData.size(); ++i) {
const BasicLayoutTestData item = removeData[i];
layout->removeAnchor(
getItem(item.firstIndex, widgets, layout),
@@ -2236,7 +2211,7 @@ void tst_QGraphicsAnchorLayout1::testRemoveCenterAnchor()
QCOMPARE(widget->size(), size);
// Validate
- for (int i = 0; i < result.count(); ++i) {
+ for (int i = 0; i < result.size(); ++i) {
const BasicLayoutTestResult item = result[i];
QCOMPARE(widgets[item.index]->geometry(), item.rect);
@@ -3024,7 +2999,7 @@ void tst_QGraphicsAnchorLayout1::testComplexCases()
// Determine amount of widgets to add.
int widgetCount = -1;
- for (int i = 0; i < data.count(); ++i) {
+ for (int i = 0; i < data.size(); ++i) {
const BasicLayoutTestData item = data[i];
widgetCount = qMax(widgetCount, item.firstIndex);
widgetCount = qMax(widgetCount, item.secondIndex);
@@ -3050,7 +3025,7 @@ void tst_QGraphicsAnchorLayout1::testComplexCases()
// Setup anchor layout
TheAnchorLayout *layout = new TheAnchorLayout;
- for (int i = 0; i < data.count(); ++i) {
+ for (int i = 0; i < data.size(); ++i) {
const BasicLayoutTestData item = data[i];
layout->setAnchor(
getItem(item.firstIndex, widgets, layout),
@@ -3067,7 +3042,7 @@ void tst_QGraphicsAnchorLayout1::testComplexCases()
QCOMPARE(widget->size(), size);
// Validate
- for (int i = 0; i < result.count(); ++i) {
+ for (int i = 0; i < result.size(); ++i) {
const BasicLayoutTestResult item = result[i];
QCOMPARE(widgets[item.index]->geometry(), item.rect);
}
@@ -3076,7 +3051,7 @@ void tst_QGraphicsAnchorLayout1::testComplexCases()
widget->setLayoutDirection(Qt::RightToLeft);
layout->activate();
// Validate
- for (int j = 0; j < result.count(); ++j) {
+ for (int j = 0; j < result.size(); ++j) {
const BasicLayoutTestResult item = result[j];
QRectF mirroredRect(item.rect);
// only valid cases are mirrored
diff --git a/tests/auto/widgets/graphicsview/qgraphicseffectsource/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicseffectsource/CMakeLists.txt
index 5a4fda8234..1e198d7baa 100644
--- a/tests/auto/widgets/graphicsview/qgraphicseffectsource/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicseffectsource/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicseffectsource.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicseffectsource Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicseffectsource LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicseffectsource
SOURCES
tst_qgraphicseffectsource.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/graphicsview/qgraphicseffectsource/tst_qgraphicseffectsource.cpp b/tests/auto/widgets/graphicsview/qgraphicseffectsource/tst_qgraphicseffectsource.cpp
index ba8a309674..28c439dbcd 100644
--- a/tests/auto/widgets/graphicsview/qgraphicseffectsource/tst_qgraphicseffectsource.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicseffectsource/tst_qgraphicseffectsource.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 <QTest>
#include <QtWidgets/qgraphicseffect.h>
@@ -179,11 +154,11 @@ void tst_QGraphicsEffectSource::init()
QVERIFY(effect);
QVERIFY(item);
QVERIFY(effect->source());
- effect->reset();
effect->storeDeviceDependentStuff = false;
effect->doNothingInDraw = false;
- item->reset();
QCoreApplication::processEvents(); // Process all queued paint events
+ effect->reset();
+ item->reset();
}
void tst_QGraphicsEffectSource::graphicsItem()
diff --git a/tests/auto/widgets/graphicsview/qgraphicsgridlayout/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicsgridlayout/CMakeLists.txt
index 0554d62807..c4ffe216f5 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsgridlayout/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicsgridlayout/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicsgridlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicsgridlayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicsgridlayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicsgridlayout
SOURCES
tst_qgraphicsgridlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp b/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp
index effd8a28c1..c91a0803ee 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsgridlayout/tst_qgraphicsgridlayout.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 <QTest>
@@ -1683,7 +1658,7 @@ void tst_QGraphicsGridLayout::sizeHint()
widget->setContentsMargins(0, 0, 0, 0);
int i;
- for (i = 0; i < itemDescriptions.count(); ++i) {
+ for (i = 0; i < itemDescriptions.size(); ++i) {
ItemDesc desc = itemDescriptions.at(i);
RectWidget *item = new RectWidget(widget);
desc.apply(layout, item);
@@ -2184,7 +2159,7 @@ void tst_QGraphicsGridLayout::defaultStretchFactors()
widget->setContentsMargins(0, 0, 0, 0);
int i;
- for (i = 0; i < itemDescriptions.count(); ++i) {
+ for (i = 0; i < itemDescriptions.size(); ++i) {
ItemDesc desc = itemDescriptions.at(i);
RectWidget *item = new RectWidget(widget);
desc.apply(layout, item);
@@ -2199,7 +2174,7 @@ void tst_QGraphicsGridLayout::defaultStretchFactors()
widget->resize(newSize);
QApplication::sendPostedEvents(0, 0);
- for (i = 0; i < expectedSizes.count(); ++i) {
+ for (i = 0; i < expectedSizes.size(); ++i) {
QSizeF itemSize = layout->itemAt(i)->geometry().size();
QCOMPARE(itemSize, expectedSizes.at(i));
}
@@ -2343,7 +2318,7 @@ void tst_QGraphicsGridLayout::alignment2()
widget->setContentsMargins(0, 0, 0, 0);
int i;
- for (i = 0; i < itemDescriptions.count(); ++i) {
+ for (i = 0; i < itemDescriptions.size(); ++i) {
ItemDesc desc = itemDescriptions.at(i);
RectWidget *item = new RectWidget(widget);
desc.apply(layout, item);
@@ -2358,7 +2333,7 @@ void tst_QGraphicsGridLayout::alignment2()
widget->resize(newSize);
QApplication::sendPostedEvents(0, 0);
- for (i = 0; i < expectedGeometries.count(); ++i) {
+ for (i = 0; i < expectedGeometries.size(); ++i) {
QRectF itemRect = layout->itemAt(i)->geometry();
QCOMPARE(itemRect, expectedGeometries.at(i));
}
@@ -2921,7 +2896,7 @@ void tst_QGraphicsGridLayout::geometries()
widget->setContentsMargins(0, 0, 0, 0);
int i;
- for (i = 0; i < itemDescriptions.count(); ++i) {
+ for (i = 0; i < itemDescriptions.size(); ++i) {
ItemDesc desc = itemDescriptions.at(i);
RectWidget *item = new RectWidget(widget);
desc.apply(layout, item);
@@ -2936,7 +2911,7 @@ void tst_QGraphicsGridLayout::geometries()
widget->resize(newSize);
QApplication::processEvents();
- for (i = 0; i < expectedGeometries.count(); ++i) {
+ for (i = 0; i < expectedGeometries.size(); ++i) {
QRectF itemRect = layout->itemAt(i)->geometry();
QCOMPARE(itemRect, expectedGeometries.at(i));
}
@@ -3181,7 +3156,6 @@ void tst_QGraphicsGridLayout::heightForWidthWithSpanning()
QCOMPARE(layout->effectiveSizeHint(Qt::MaximumSize, QSizeF(200, -1)), QSizeF(200, 100));
}
-Q_DECLARE_METATYPE(QSizePolicy::Policy)
void tst_QGraphicsGridLayout::spanningItem2x2_data()
{
QTest::addColumn<QSizePolicy::Policy>("sizePolicy");
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsitem/BLACKLIST
index 31dbb38a5d..c3de568a24 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/BLACKLIST
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/BLACKLIST
@@ -1,4 +1,6 @@
# QTBUG-74760
[sorting]
-opensuse-42.3
osx
+# QTBUG-115293
+[itemUsesExtendedStyleOption]
+wayland
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicsitem/CMakeLists.txt
index 02a667eb9c..3ee507cd46 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qgraphicsitem.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicsitem Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicsitem LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicsitem
SOURCES
tst_qgraphicsitem.cpp
DEFINES
QT_NO_CAST_TO_ASCII
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -22,6 +29,6 @@ qt_internal_add_test(tst_qgraphicsitem
#####################################################################
qt_internal_extend_target(tst_qgraphicsitem CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
index bc8369e284..a9fccaf4b2 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.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 <QTest>
@@ -65,6 +40,8 @@
#include <QtGui/private/qeventpoint_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
using AbstractGraphicsShapeItemPtr = QSharedPointer<QAbstractGraphicsShapeItem>;
using GraphicsItems = QList<QGraphicsItem *>;
using GraphicsItemsList = QList<QGraphicsItem *>;
@@ -1016,7 +993,7 @@ void tst_QGraphicsItem::inputMethodHints()
scene.addItem(item);
scene.addItem(item2);
QGraphicsView view(&scene);
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
@@ -1073,7 +1050,7 @@ void tst_QGraphicsItem::toolTip()
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.setFixedSize(200, 200);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
{
@@ -2231,7 +2208,7 @@ void tst_QGraphicsItem::setTransform()
scene.update(scene.sceneRect());
QCoreApplication::processEvents();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
item.setTransform(QTransform().rotate(qreal(12.34)));
QRectF rotatedRect = scene.sceneRect();
@@ -2239,14 +2216,14 @@ void tst_QGraphicsItem::setTransform()
scene.update(scene.sceneRect());
QCoreApplication::processEvents();
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
item.setTransform(QTransform());
scene.update(scene.sceneRect());
QCoreApplication::processEvents();
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
QList<QRectF> rlist = qvariant_cast<QList<QRectF> >(spy.last().at(0));
QCOMPARE(rlist.size(), 2);
@@ -3399,7 +3376,7 @@ void tst_QGraphicsItem::childrenBoundingRect()
childChild->setPos(500, 500);
child->setTransform(QTransform().rotate(90), true);
- scene.addPolygon(parent->mapToScene(parent->boundingRect() | parent->childrenBoundingRect()))->setPen(QPen(Qt::red));;
+ scene.addPolygon(parent->mapToScene(parent->boundingRect() | parent->childrenBoundingRect()))->setPen(QPen(Qt::red));
QGraphicsView view(&scene);
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
@@ -3626,7 +3603,7 @@ void tst_QGraphicsItem::group()
view.fitInView(scene.itemsBoundingRect());
- for (QGraphicsItem *item : qAsConst(newItems)) {
+ for (QGraphicsItem *item : std::as_const(newItems)) {
group->addToGroup(item);
QCOMPARE(item->group(), group);
}
@@ -4969,7 +4946,7 @@ void tst_QGraphicsItem::sceneEventFilter()
QGraphicsView view(&scene);
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
@@ -5362,8 +5339,9 @@ void tst_QGraphicsItem::deleteItemInEventHandlers()
#ifndef QT_NO_CONTEXTMENU
if (!HarakiriItem::dead) {
- QContextMenuEvent event(QContextMenuEvent::Other,
- view.mapFromScene(item->scenePos()));
+ auto viewPos = view.mapFromScene(item->scenePos());
+ QContextMenuEvent event(QContextMenuEvent::Other, viewPos,
+ view.mapToGlobal(viewPos));
QCoreApplication::sendEvent(view.viewport(), &event);
}
#endif // QT_NO_CONTEXTMENU
@@ -5589,7 +5567,7 @@ void tst_QGraphicsItem::itemClipsChildrenToShape4()
scene.addEllipse( 100, 100, 100, 50 ); // <-- this is important to trigger the right codepath*
//now the label is shown
outerWidget->setFlag(QGraphicsItem::ItemClipsChildrenToShape, false );
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.show();
QTRY_COMPARE(QApplication::activeWindow(), &view);
@@ -5705,7 +5683,7 @@ void tst_QGraphicsItem::itemClipsChildrenToShape5()
}
const QList<QGraphicsItem *> children = parent->childItems();
- const int childrenCount = children.count();
+ const int childrenCount = children.size();
for (int i = 0; i < 5; ++i) {
QString clipString;
@@ -6933,8 +6911,10 @@ void tst_QGraphicsItem::opacityZeroUpdates()
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
- if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
+ }
QCoreApplication::processEvents(); // Process all queued paint events
QTRY_VERIFY(view.repaints > 0);
@@ -7290,6 +7270,7 @@ void tst_QGraphicsItem::tabChangesFocus()
widget.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
widget.setLayout(layout);
widget.show();
+ view->window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&widget));
QTRY_VERIFY(scene.isActive());
@@ -7324,7 +7305,7 @@ void tst_QGraphicsItem::cacheMode()
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.resize(150, 150);
view.show();
- QApplication::setActiveWindow(&view);
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QCoreApplication::processEvents(); // Process all queued paint events
@@ -7508,7 +7489,7 @@ void tst_QGraphicsItem::cacheMode2()
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.resize(150, 150);
view.show();
- QApplication::setActiveWindow(&view);
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QCoreApplication::processEvents(); // Process all queued paint events
@@ -8169,9 +8150,11 @@ void tst_QGraphicsItem::moveLineItem()
MyGraphicsView view(&scene);
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.show();
- QVERIFY(QTest::qWaitForWindowExposed(&view));
- if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
+ }
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
QCoreApplication::processEvents(); // Process all queued paint events
view.reset();
@@ -8241,11 +8224,11 @@ void tst_QGraphicsItem::sorting()
view.setFrameStyle(0);
view.show();
if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
- qApp->setActiveWindow(&view);
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
}
QVERIFY(QTest::qWaitForWindowExposed(&view));
- QTRY_VERIFY(_paintedItems.count() > 0);
+ QTRY_VERIFY(_paintedItems.size() > 0);
_paintedItems.clear();
@@ -8275,7 +8258,7 @@ void tst_QGraphicsItem::itemHasNoContents()
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.show();
if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
- qApp->setActiveWindow(&view);
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
}
QVERIFY(QTest::qWaitForWindowExposed(&view));
@@ -9295,7 +9278,7 @@ void tst_QGraphicsItem::ensureDirtySceneTransform()
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.show();
if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
- QApplication::setActiveWindow(&view);
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
}
@@ -9693,7 +9676,7 @@ void tst_QGraphicsItem::QTBUG_4233_updateCachedWithSceneRect()
QGraphicsView view(&scene);
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.show();
- QApplication::setActiveWindow(&view);
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), &view);
@@ -10773,6 +10756,10 @@ void tst_QGraphicsItem::textItem_shortcuts()
item->setFlag(QGraphicsItem::ItemIsFocusable);
item->setTextInteractionFlags(Qt::TextEditorInteraction);
w.show();
+ if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
+ view.window()->activateWindow();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+ }
QVERIFY(QTest::qWaitForWindowExposed(&w));
item->setFocus();
@@ -10827,8 +10814,10 @@ void tst_QGraphicsItem::scroll()
view.setFrameStyle(0);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
- if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
+ }
QTRY_VERIFY(view.repaints > 0);
view.reset();
@@ -10942,7 +10931,7 @@ void tst_QGraphicsItem::focusHandling()
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
QVERIFY(itemWithFocus->hasFocus());
@@ -11347,7 +11336,7 @@ void tst_QGraphicsItem::QTBUG_6738_missingUpdateWithSetParent()
view.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
view.show();
if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
- qApp->setActiveWindow(&view);
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
}
QVERIFY(QTest::qWaitForWindowExposed(&view));
@@ -11401,8 +11390,10 @@ void tst_QGraphicsItem::QT_2653_fullUpdateDiscardingOpacityUpdate()
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
- if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
+ }
QCoreApplication::processEvents(); // Process all queued paint events
view.reset();
@@ -11437,8 +11428,10 @@ void tst_QGraphicsItem::QTBUG_7714_fullUpdateDiscardingOpacityUpdate2()
scene.addItem(parentGreen);
origView.show();
- if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&origView));
+ }
QVERIFY(QTest::qWaitForWindowExposed(&origView));
QCoreApplication::processEvents(); // Process all queued paint events
@@ -11454,7 +11447,7 @@ void tst_QGraphicsItem::QTBUG_7714_fullUpdateDiscardingOpacityUpdate2()
view.show();
if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
- qApp->setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
}
QVERIFY(QTest::qWaitForWindowExposed(&view));
@@ -11595,6 +11588,7 @@ void tst_QGraphicsItem::doNotMarkFullUpdateIfNotInScene()
item2->setParentItem(item);
scene.addItem(item);
view.show();
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowExposed(view.windowHandle()));
QVERIFY(QTest::qWaitForWindowActive(view.windowHandle()));
QCoreApplication::processEvents(); // Process all queued paint events
@@ -11629,7 +11623,7 @@ void tst_QGraphicsItem::itemDiesDuringDraggingOperation()
scene.addItem(item);
view.show();
if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
- QApplication::setActiveWindow(&view);
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), &view);
}
@@ -11660,7 +11654,7 @@ void tst_QGraphicsItem::QTBUG_12112_focusItem()
view.show();
if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation)) {
- QApplication::setActiveWindow(&view);
+ view.window()->activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), &view);
}
@@ -11710,7 +11704,7 @@ public:
QLatin1String wiseWords("AZ BUKI VEDI");
QString sentence(wiseWords);
QStringList words = sentence.split(QLatin1Char(' '), Qt::SkipEmptyParts);
- for (int i = 0; i < words.count(); ++i) {
+ for (int i = 0; i < words.size(); ++i) {
QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget(this);
QLabel *label = new QLabel(words.at(i));
proxy->setWidget(label);
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitemanimation/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicsitemanimation/CMakeLists.txt
index 48bb84d1bb..04bfb3f54a 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitemanimation/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicsitemanimation/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qgraphicsitemanimation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicsitemanimation Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicsitemanimation LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicsitemanimation
SOURCES
tst_qgraphicsitemanimation.cpp
DEFINES
QT_NO_CAST_TO_ASCII
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitemanimation/tst_qgraphicsitemanimation.cpp b/tests/auto/widgets/graphicsview/qgraphicsitemanimation/tst_qgraphicsitemanimation.cpp
index 46e834afdb..9cf74c23fe 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitemanimation/tst_qgraphicsitemanimation.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitemanimation/tst_qgraphicsitemanimation.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 <QTest>
diff --git a/tests/auto/widgets/graphicsview/qgraphicslayout/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicslayout/CMakeLists.txt
index 768898549e..4951558423 100644
--- a/tests/auto/widgets/graphicsview/qgraphicslayout/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicslayout/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qgraphicslayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicslayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicslayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicslayout
SOURCES
tst_qgraphicslayout.cpp
DEFINES
QT_USE_USING_NAMESPACE
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp b/tests/auto/widgets/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp
index 167f418c3d..268195d7d3 100644
--- a/tests/auto/widgets/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicslayout/tst_qgraphicslayout.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 <QTest>
@@ -695,7 +670,7 @@ public:
private slots:
void valueChanged(qreal value) {
- for (int i = 0; i < fromGeoms.count(); ++i) {
+ for (int i = 0; i < fromGeoms.size(); ++i) {
QGraphicsLayoutItem *li = itemAt(i);
QRectF from = fromGeoms.at(i);
QRectF to = toGeoms.at(i);
@@ -850,7 +825,7 @@ CustomLayout(QGraphicsLayoutItem *parent)
int count() const override
{
- return items.count();
+ return items.size();
}
QGraphicsLayoutItem* itemAt(int index) const override
@@ -866,12 +841,12 @@ void removeAt(int index) override
void addItem(QGraphicsLayoutItem *item)
{
- insertItem(items.count(), item);
+ insertItem(items.size(), item);
}
void insertItem(int index, QGraphicsLayoutItem *item)
{
- index = qBound(0, index, items.count());
+ index = qBound(0, index, items.size());
item->setParentLayoutItem(this);
@@ -879,7 +854,7 @@ void insertItem(int index, QGraphicsLayoutItem *item)
updateParentWidget(widget);
- if (index == items.count()) {
+ if (index == items.size()) {
items.append(item);
} else {
items.insert(index, item);
@@ -947,7 +922,7 @@ void tst_QGraphicsLayout::ownership()
destructedSet.clear();
window->setLayout(0);
- QCOMPARE(destructedSet.count(), 0);
+ QCOMPARE(destructedSet.size(), 0);
delete window;
}
diff --git a/tests/auto/widgets/graphicsview/qgraphicslayoutitem/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicslayoutitem/CMakeLists.txt
index d927ec59aa..7bd25cecf2 100644
--- a/tests/auto/widgets/graphicsview/qgraphicslayoutitem/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicslayoutitem/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicslayoutitem.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicslayoutitem Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicslayoutitem LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicslayoutitem
SOURCES
tst_qgraphicslayoutitem.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/graphicsview/qgraphicslayoutitem/tst_qgraphicslayoutitem.cpp b/tests/auto/widgets/graphicsview/qgraphicslayoutitem/tst_qgraphicslayoutitem.cpp
index 7e0a8b6033..87b703a286 100644
--- a/tests/auto/widgets/graphicsview/qgraphicslayoutitem/tst_qgraphicslayoutitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicslayoutitem/tst_qgraphicslayoutitem.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 <QTest>
diff --git a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/CMakeLists.txt
index 6c2e734348..b63bbb6f33 100644
--- a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicslinearlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicslinearlayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicslinearlayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicslinearlayout
SOURCES
tst_qgraphicslinearlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
index eef554ad87..65212e94cc 100644
--- a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.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 <QTest>
@@ -748,7 +723,7 @@ void tst_QGraphicsLinearLayout::orientation()
// important to resize to preferredsize when orientation is switched
widget->resize(widget->effectiveSizeHint(Qt::PreferredSize));
qApp->processEvents();
- for (i = 0; i < positions.count(); ++i) {
+ for (i = 0; i < positions.size(); ++i) {
QGraphicsWidget *item = static_cast<QGraphicsWidget*>(layout.itemAt(i));
if (initialOrientation == Qt::Horizontal)
QCOMPARE(item->pos().y(), positions.at(i));
@@ -1146,7 +1121,7 @@ void tst_QGraphicsLinearLayout::setStretchFactor()
int i;
- for (i = 0; i < stretches.count(); ++i) {
+ for (i = 0; i < stretches.size(); ++i) {
QGraphicsWidget *item = new RectWidget(widget);
item->setMinimumSize(5,5);
item->setPreferredSize(10,5);
@@ -1164,7 +1139,7 @@ void tst_QGraphicsLinearLayout::setStretchFactor()
qreal firstStretch = -1;
qreal firstExtent = -1.;
qreal sumExtent = 0;
- for (i = 0; i < stretches.count(); ++i) {
+ for (i = 0; i < stretches.size(); ++i) {
QGraphicsWidget *item = static_cast<QGraphicsWidget*>(layout.itemAt(i));
qreal extent = item->size().width();
qreal stretch = (qreal)stretches.at(i);
@@ -1322,7 +1297,7 @@ void tst_QGraphicsLinearLayout::defaultStretchFactors()
QSizeF itemSize = layout->itemAt(i)->geometry().size();
if (orientation == Qt::Vertical)
itemSize.transpose();
- if (i < expectedSizes.count())
+ if (i < expectedSizes.size())
QCOMPARE(itemSize.width(), qreal(expectedSizes.at(i)));
}
diff --git a/tests/auto/widgets/graphicsview/qgraphicsobject/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicsobject/CMakeLists.txt
index 9b7bf4c63c..0c21d9febc 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsobject/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicsobject/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicsobject.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicsobject Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicsobject LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicsobject
SOURCES
tst_qgraphicsobject.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::Widgets
diff --git a/tests/auto/widgets/graphicsview/qgraphicsobject/tst_qgraphicsobject.cpp b/tests/auto/widgets/graphicsview/qgraphicsobject/tst_qgraphicsobject.cpp
index 58c965a7d0..674a7f73d5 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsobject/tst_qgraphicsobject.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsobject/tst_qgraphicsobject.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 <QTest>
@@ -66,28 +41,28 @@ void tst_QGraphicsObject::pos()
QSignalSpy ySpy(&object, SIGNAL(yChanged()));
QVERIFY(object.pos() == QPointF(0, 0));
object.setPos(10, 10);
- QCOMPARE(xSpy.count(), 1);
- QCOMPARE(ySpy.count(), 1);
+ QCOMPARE(xSpy.size(), 1);
+ QCOMPARE(ySpy.size(), 1);
QCOMPARE(object.pos(), QPointF(10,10));
object.setPos(10, 10);
- QCOMPARE(xSpy.count(), 1);
- QCOMPARE(ySpy.count(), 1);
+ QCOMPARE(xSpy.size(), 1);
+ QCOMPARE(ySpy.size(), 1);
object.setProperty("pos", QPointF(0, 0));
- QCOMPARE(xSpy.count(), 2);
- QCOMPARE(ySpy.count(), 2);
+ QCOMPARE(xSpy.size(), 2);
+ QCOMPARE(ySpy.size(), 2);
QCOMPARE(object.property("pos").toPointF(), QPointF(0,0));
object.setProperty("pos", QPointF(10, 0));
- QCOMPARE(xSpy.count(), 3);
- QCOMPARE(ySpy.count(), 2);
+ QCOMPARE(xSpy.size(), 3);
+ QCOMPARE(ySpy.size(), 2);
QCOMPARE(object.property("pos").toPointF(), QPointF(10,0));
object.setProperty("pos", QPointF(10, 10));
- QCOMPARE(xSpy.count(), 3);
- QCOMPARE(ySpy.count(), 3);
+ QCOMPARE(xSpy.size(), 3);
+ QCOMPARE(ySpy.size(), 3);
QVERIFY(object.property("pos") == QPointF(10, 10));
}
@@ -98,19 +73,19 @@ void tst_QGraphicsObject::x()
QSignalSpy ySpy(&object, SIGNAL(yChanged()));
QVERIFY(object.pos() == QPointF(0, 0));
object.setX(10);
- QCOMPARE(xSpy.count(), 1);
- QCOMPARE(ySpy.count(), 0);
+ QCOMPARE(xSpy.size(), 1);
+ QCOMPARE(ySpy.size(), 0);
QVERIFY(object.pos() == QPointF(10, 0));
QCOMPARE(object.x(), qreal(10));
object.setX(10);
- QCOMPARE(xSpy.count(), 1);
- QCOMPARE(ySpy.count(), 0);
+ QCOMPARE(xSpy.size(), 1);
+ QCOMPARE(ySpy.size(), 0);
object.setProperty("x", 0);
- QCOMPARE(xSpy.count(), 2);
- QCOMPARE(ySpy.count(), 0);
+ QCOMPARE(xSpy.size(), 2);
+ QCOMPARE(ySpy.size(), 0);
QCOMPARE(object.property("x").toDouble(), double(0));
}
@@ -121,19 +96,19 @@ void tst_QGraphicsObject::y()
QSignalSpy ySpy(&object, SIGNAL(yChanged()));
QVERIFY(object.pos() == QPointF(0, 0));
object.setY(10);
- QCOMPARE(xSpy.count(), 0);
- QCOMPARE(ySpy.count(), 1);
+ QCOMPARE(xSpy.size(), 0);
+ QCOMPARE(ySpy.size(), 1);
QVERIFY(object.pos() == QPointF(0, 10));
QCOMPARE(object.y(), qreal(10));
object.setY(10);
- QCOMPARE(xSpy.count(), 0);
- QCOMPARE(ySpy.count(), 1);
+ QCOMPARE(xSpy.size(), 0);
+ QCOMPARE(ySpy.size(), 1);
object.setProperty("y", 0);
- QCOMPARE(xSpy.count(), 0);
- QCOMPARE(ySpy.count(), 2);
+ QCOMPARE(xSpy.size(), 0);
+ QCOMPARE(ySpy.size(), 2);
QCOMPARE(object.property("y").toDouble(), qreal(0));
}
@@ -143,15 +118,15 @@ void tst_QGraphicsObject::z()
QSignalSpy zSpy(&object, SIGNAL(zChanged()));
QCOMPARE(object.zValue(), qreal(0));
object.setZValue(10);
- QCOMPARE(zSpy.count(), 1);
+ QCOMPARE(zSpy.size(), 1);
QCOMPARE(object.zValue(), qreal(10));
object.setZValue(10);
- QCOMPARE(zSpy.count(), 1);
+ QCOMPARE(zSpy.size(), 1);
object.setProperty("z", 0);
- QCOMPARE(zSpy.count(), 2);
+ QCOMPARE(zSpy.size(), 2);
QCOMPARE(object.property("z").toDouble(), double(0));
}
@@ -161,15 +136,15 @@ void tst_QGraphicsObject::opacity()
QSignalSpy spy(&object, SIGNAL(opacityChanged()));
QCOMPARE(object.opacity(), 1.);
object.setOpacity(0);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(object.opacity(), 0.);
object.setOpacity(0);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
object.setProperty("opacity", .5);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QCOMPARE(object.property("opacity").toDouble(), .5);
}
@@ -179,15 +154,15 @@ void tst_QGraphicsObject::enabled()
QSignalSpy spy(&object, SIGNAL(enabledChanged()));
QVERIFY(object.isEnabled());
object.setEnabled(false);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(!object.isEnabled());
object.setEnabled(false);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
object.setProperty("enabled", true);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QVERIFY(object.property("enabled").toBool());
}
@@ -197,15 +172,15 @@ void tst_QGraphicsObject::visible()
QSignalSpy spy(&object, SIGNAL(visibleChanged()));
QVERIFY(object.isVisible());
object.setVisible(false);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(!object.isVisible());
object.setVisible(false);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
object.setProperty("visible", true);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QVERIFY(object.property("visible").toBool());
}
diff --git a/tests/auto/widgets/graphicsview/qgraphicspixmapitem/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicspixmapitem/CMakeLists.txt
index a848a8dd77..b60958f4f1 100644
--- a/tests/auto/widgets/graphicsview/qgraphicspixmapitem/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicspixmapitem/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicspixmapitem.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicspixmapitem Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicspixmapitem LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicspixmapitem
SOURCES
tst_qgraphicspixmapitem.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/graphicsview/qgraphicspixmapitem/tst_qgraphicspixmapitem.cpp b/tests/auto/widgets/graphicsview/qgraphicspixmapitem/tst_qgraphicspixmapitem.cpp
index 22b81773b9..fd8f8bd37d 100644
--- a/tests/auto/widgets/graphicsview/qgraphicspixmapitem/tst_qgraphicspixmapitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicspixmapitem/tst_qgraphicspixmapitem.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 <QTest>
diff --git a/tests/auto/widgets/graphicsview/qgraphicspolygonitem/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicspolygonitem/CMakeLists.txt
index 8a3c88a8a2..116378decb 100644
--- a/tests/auto/widgets/graphicsview/qgraphicspolygonitem/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicspolygonitem/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicspolygonitem.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicspolygonitem Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicspolygonitem LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicspolygonitem
SOURCES
tst_qgraphicspolygonitem.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/graphicsview/qgraphicspolygonitem/tst_qgraphicspolygonitem.cpp b/tests/auto/widgets/graphicsview/qgraphicspolygonitem/tst_qgraphicspolygonitem.cpp
index 90d69ca853..9412fab0ee 100644
--- a/tests/auto/widgets/graphicsview/qgraphicspolygonitem/tst_qgraphicspolygonitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicspolygonitem/tst_qgraphicspolygonitem.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 <QTest>
diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST
index afb6dd5e2d..731b3ae253 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST
+++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/BLACKLIST
@@ -1,7 +1,11 @@
[scrollUpdate]
android
b2qt
-[hoverEnterLeaveEvent]
-macos ci
[windowOpacity]
macos ci
+[wheelEventPropagation]
+android
+[forwardTouchEvent]
+android
+[touchEventPropagation]
+android
diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/CMakeLists.txt
index a1bf1270c2..f28ff74cfa 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qgraphicsproxywidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicsproxywidget Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicsproxywidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicsproxywidget
SOURCES
tst_qgraphicsproxywidget.cpp
DEFINES
QTEST_QPA_MOUSE_HANDLING
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
index cd4a30c9bf..c5cbecff65 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.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 <QTest>
@@ -34,6 +9,8 @@
#include <private/qgraphicsproxywidget_p.h>
#include <private/qlayoutengine_p.h> // qSmartMin functions...
+#include <QtWidgets/private/qapplication_p.h>
+
Q_LOGGING_CATEGORY(lcTests, "qt.widgets.tests")
/*
@@ -358,7 +335,7 @@ void tst_QGraphicsProxyWidget::setWidget()
widget->setStyle(style.data());
widget->setFont(QFont("Times"));
widget->setVisible(true);
- QApplication::setActiveWindow(widget);
+ QApplicationPrivate::setActiveWindow(widget);
widget->activateWindow();
widget->setEnabled(true);
widget->resize(325, 241);
@@ -732,7 +709,7 @@ void tst_QGraphicsProxyWidget::focusNextPrevChild()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
if (hasScene) {
scene.addItem(proxyGuard.release());
@@ -774,7 +751,7 @@ void tst_QGraphicsProxyWidget::focusOutEvent()
SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget;
scene.addItem(proxy);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
view.activateWindow();
view.setFocus();
QVERIFY(QTest::qWaitForWindowActive(&view));
@@ -807,6 +784,9 @@ void tst_QGraphicsProxyWidget::focusOutEvent()
void tst_QGraphicsProxyWidget::focusProxy_QTBUG_51856()
{
+#ifdef ANDROID
+ QSKIP("This test leads to failures on subsequent test cases, QTBUG-119574");
+#endif
// QSpinBox has an internal QLineEdit; this QLineEdit has the spinbox
// as its focus proxy.
struct FocusedSpinBox : QSpinBox
@@ -829,6 +809,9 @@ void tst_QGraphicsProxyWidget::focusProxy_QTBUG_51856()
}
};
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
QGraphicsScene scene;
QGraphicsView view(&scene);
SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget;
@@ -950,7 +933,7 @@ void tst_QGraphicsProxyWidget::hoverEnterLeaveEvent()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
SubQGraphicsProxyWidget *proxy = new SubQGraphicsProxyWidget;
@@ -965,7 +948,7 @@ void tst_QGraphicsProxyWidget::hoverEnterLeaveEvent()
proxy->setPos(50, 0);
QSignalSpy sceneChangedSpy(&scene, &QGraphicsScene::changed);
scene.addItem(proxy);
- QTRY_VERIFY(sceneChangedSpy.count() > 0);
+ QTRY_VERIFY(sceneChangedSpy.size() > 0);
// outside graphics item
QTest::mouseMove(&view, QPoint(10, 10));
@@ -1004,7 +987,7 @@ void tst_QGraphicsProxyWidget::keyPressEvent()
QGraphicsView view(&scene);
view.show();
view.viewport()->setFocus();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), (QWidget*)&view);
@@ -1043,7 +1026,7 @@ void tst_QGraphicsProxyWidget::keyReleaseEvent()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), (QWidget*)&view);
@@ -1063,9 +1046,9 @@ void tst_QGraphicsProxyWidget::keyReleaseEvent()
proxy->setFocus();
QTest::keyPress(view.viewport(), Qt::Key_Space);
- QTRY_COMPARE(spy.count(), 0);
+ QTRY_COMPARE(spy.size(), 0);
QTest::keyRelease(view.viewport(), Qt::Key_Space);
- QTRY_COMPARE(spy.count(), hasWidget ? 1 : 0);
+ QTRY_COMPARE(spy.size(), hasWidget ? 1 : 0);
}
// protected void mouseDoubleClickEvent(QGraphicsSceneMouseEvent* event)
@@ -1089,11 +1072,11 @@ void tst_QGraphicsProxyWidget::mouseDoubleClickEvent()
view.resize(100, 100);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), (QWidget*)&view);
// wait for scene to be updated before doing any coordinate mappings on it
- QTRY_VERIFY(sceneChangedSpy.count() > 0);
+ QTRY_VERIFY(sceneChangedSpy.size() > 0);
QPoint pointInLineEdit = view.mapFromScene(proxy->mapToScene(15, proxy->boundingRect().center().y()));
QTest::mousePress(view.viewport(), Qt::LeftButton, {}, pointInLineEdit);
@@ -1134,13 +1117,13 @@ void tst_QGraphicsProxyWidget::mousePressReleaseEvent()
proxy->setFocus();
// wait for scene to be updated before doing any coordinate mappings on it
- QTRY_VERIFY(sceneChangedSpy.count() > 0);
+ QTRY_VERIFY(sceneChangedSpy.size() > 0);
QPoint buttonCenter = view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center()));
QTest::mousePress(view.viewport(), Qt::LeftButton, {}, buttonCenter);
- QTRY_COMPARE(spy.count(), 0);
+ QTRY_COMPARE(spy.size(), 0);
QTest::mouseRelease(view.viewport(), Qt::LeftButton, {}, buttonCenter);
- QTRY_COMPARE(spy.count(), hasWidget ? 1 : 0);
+ QTRY_COMPARE(spy.size(), hasWidget ? 1 : 0);
}
void tst_QGraphicsProxyWidget::resizeEvent_data()
@@ -1175,7 +1158,7 @@ void tst_QGraphicsProxyWidget::paintEvent()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QVERIFY(view.isActiveWindow());
@@ -1191,7 +1174,7 @@ void tst_QGraphicsProxyWidget::paintEvent()
QSignalSpy sceneChangedSpy(&scene, &QGraphicsScene::changed);
scene.addItem(&proxy);
- QTRY_VERIFY(sceneChangedSpy.count() > 0); // make sure the scene is ready
+ QTRY_VERIFY(sceneChangedSpy.size() > 0); // make sure the scene is ready
proxy.paintCount = 0;
w->update();
@@ -1346,6 +1329,9 @@ static QList<QRect> rects(const QRegion &region)
void tst_QGraphicsProxyWidget::scrollUpdate()
{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
ScrollWidget *widget = new ScrollWidget;
QGraphicsScene scene;
@@ -1559,7 +1545,7 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleWidget()
window.setLayout(layout);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
window.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&window));
@@ -1643,7 +1629,7 @@ void tst_QGraphicsProxyWidget::tabFocus_simpleTwoWidgets()
window.setLayout(layout);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
window.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&window));
@@ -1776,7 +1762,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexWidget()
window.setLayout(layout);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
window.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&window));
@@ -1913,7 +1899,7 @@ void tst_QGraphicsProxyWidget::tabFocus_complexTwoWidgets()
window.setLayout(layout);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
window.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&window));
@@ -2087,7 +2073,7 @@ void tst_QGraphicsProxyWidget::setFocus_simpleWidget()
window.setLayout(layout);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
window.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&window));
QCOMPARE(QApplication::activeWindow(), &window);
@@ -2159,7 +2145,7 @@ void tst_QGraphicsProxyWidget::setFocus_simpleTwoWidgets()
window.setLayout(layout);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
window.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&window));
QCOMPARE(QApplication::activeWindow(), &window);
@@ -2238,7 +2224,7 @@ void tst_QGraphicsProxyWidget::setFocus_complexTwoWidgets()
window.setLayout(layout);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
window.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&window));
QCOMPARE(QApplication::activeWindow(), &window);
@@ -2330,7 +2316,7 @@ void tst_QGraphicsProxyWidget::popup_basic()
box->setGeometry(0, 0, 320, 40);
box->addItems(QStringList() << "monday" << "tuesday" << "wednesday"
<< "thursday" << "saturday" << "sunday");
- QCOMPARE(proxy->childItems().count(), 0);
+ QCOMPARE(proxy->childItems().size(), 0);
proxy->setWidget(boxGuard.release());
proxy->show();
scene.addItem(proxy);
@@ -2347,7 +2333,7 @@ void tst_QGraphicsProxyWidget::popup_basic()
QTRY_COMPARE(box->pos(), QPoint());
- QCOMPARE(proxy->childItems().count(), 1);
+ QCOMPARE(proxy->childItems().size(), 1);
QGraphicsProxyWidget *child = (QGraphicsProxyWidget*)(proxy->childItems())[0];
QVERIFY(child->isWidget());
QVERIFY(child->widget());
@@ -2427,7 +2413,7 @@ void tst_QGraphicsProxyWidget::changingCursor_basic()
proxy->setWidget(widget);
QSignalSpy sceneChangedSpy(&scene, &QGraphicsScene::changed);
scene.addItem(proxy);
- QTRY_VERIFY(sceneChangedSpy.count() > 0); // make sure the scene is ready
+ QTRY_VERIFY(sceneChangedSpy.size() > 0); // make sure the scene is ready
// in
QTest::mouseMove(view.viewport(), view.mapFromScene(proxy->mapToScene(proxy->boundingRect().center())));
@@ -2483,7 +2469,7 @@ void tst_QGraphicsProxyWidget::tooltip_basic()
QGraphicsView view(&scene);
view.setFixedSize(200, 200);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
{
QHelpEvent helpEvent(QEvent::ToolTip, view.viewport()->rect().topLeft(),
@@ -2493,7 +2479,8 @@ void tst_QGraphicsProxyWidget::tooltip_basic()
bool foundView = false;
bool foundTipLabel = false;
- foreach (QWidget *widget, QApplication::topLevelWidgets()) {
+ const auto widgets = QApplication::topLevelWidgets();
+ for (QWidget *widget : widgets) {
if (widget == &view)
foundView = true;
if (widget->inherits("QTipLabel"))
@@ -2620,7 +2607,7 @@ void tst_QGraphicsProxyWidget::windowOpacity()
QGraphicsProxyWidget *proxy = scene.addWidget(widget);
proxy->setCacheMode(QGraphicsItem::ItemCoordinateCache);
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
view.show();
QVERIFY(QTest::qWaitForWindowActive(&view));
QVERIFY(view.isActiveWindow());
@@ -2645,7 +2632,7 @@ void tst_QGraphicsProxyWidget::windowOpacity()
QTRY_COMPARE(eventSpy.counts[QEvent::UpdateRequest], 0);
QTRY_COMPARE(eventSpy.counts[QEvent::Paint], paints);
- QTRY_COMPARE(signalSpy.count(), 1);
+ QTRY_COMPARE(signalSpy.size(), 1);
const QList<QVariant> arguments = signalSpy.takeFirst();
const QList<QRectF> updateRects = qvariant_cast<QList<QRectF> >(arguments.at(0));
QCOMPARE(updateRects.size(), 1);
@@ -2920,10 +2907,10 @@ void tst_QGraphicsProxyWidget::createProxyForChildWidget()
QTest::mousePress(view.viewport(), Qt::LeftButton, {},
view.mapFromScene(checkboxProxy->mapToScene(QPointF(8,8))));
- QTRY_COMPARE(spy.count(), 0);
+ QTRY_COMPARE(spy.size(), 0);
QTest::mouseRelease(view.viewport(), Qt::LeftButton, {},
view.mapFromScene(checkboxProxy->mapToScene(QPointF(8,8))));
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
@@ -3018,7 +3005,7 @@ void tst_QGraphicsProxyWidget::actionsContextMenu()
view.resize(200, 200);
view.move(QGuiApplication::primaryScreen()->geometry().center() - QPoint(100, 100));
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
view.setFocus();
QTRY_VERIFY(view.hasFocus());
@@ -3088,6 +3075,9 @@ void tst_QGraphicsProxyWidget::bypassGraphicsProxyWidget_data()
void tst_QGraphicsProxyWidget::bypassGraphicsProxyWidget()
{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
QFETCH(bool, bypass);
std::unique_ptr<QWidget> widgetGuard(new QWidget);
@@ -3097,7 +3087,7 @@ void tst_QGraphicsProxyWidget::bypassGraphicsProxyWidget()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QGraphicsProxyWidget *proxy = scene.addWidget(widgetGuard.release());
@@ -3301,6 +3291,9 @@ public:
void tst_QGraphicsProxyWidget::inputMethod()
{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
QGraphicsScene scene;
// check that the proxy is initialized with the correct input method sensitivity
@@ -3360,7 +3353,7 @@ void tst_QGraphicsProxyWidget::clickFocus()
view.setFrameStyle(0);
view.resize(300, 300);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QVERIFY(!proxy->hasFocus());
@@ -3504,7 +3497,7 @@ void tst_QGraphicsProxyWidget::QTBUG_6986_sendMouseEventToAlienWidget()
QGraphicsView view(&scene);
view.resize(600, 600);
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
view.show();
QVERIFY(QTest::qWaitForWindowActive(&view));
@@ -3548,7 +3541,7 @@ void tst_QGraphicsProxyWidget::mapToGlobal() // QTBUG-41135
childWidget->resize(embeddedWidget->size() / 2);
childWidget->move(embeddedWidget->width() / 4, embeddedWidget->height() / 4); // center in embeddedWidget
scene.addWidget(embeddedWidget);
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
const QPoint embeddedCenter = embeddedWidget->rect().center();
@@ -3556,8 +3549,9 @@ void tst_QGraphicsProxyWidget::mapToGlobal() // QTBUG-41135
QCOMPARE(embeddedWidget->mapFromGlobal(embeddedCenterGlobal), embeddedCenter);
// This should be equivalent to the view center give or take rounding
// errors due to odd window margins
+ const int Tolerance = qCeil(4 * view.devicePixelRatio());
const QPoint viewCenter = view.geometry().center();
- QVERIFY2((viewCenter - embeddedCenterGlobal).manhattanLength() <= 3,
+ QVERIFY2((viewCenter - embeddedCenterGlobal).manhattanLength() <= Tolerance,
msgPointMismatch(embeddedCenterGlobal, viewCenter).constData());
// Same test with child centered on embeddedWidget. Also make sure
@@ -3567,7 +3561,7 @@ void tst_QGraphicsProxyWidget::mapToGlobal() // QTBUG-41135
const QPoint childCenter = childWidget->rect().center();
const QPoint childCenterGlobal = childWidget->mapToGlobal(childCenter);
QCOMPARE(childWidget->mapFromGlobal(childCenterGlobal), childCenter);
- QVERIFY2((viewCenter - childCenterGlobal).manhattanLength() <= 4,
+ QVERIFY2((viewCenter - childCenterGlobal).manhattanLength() <= Tolerance,
msgPointMismatch(childCenterGlobal, viewCenter).constData());
}
@@ -3712,27 +3706,27 @@ void tst_QGraphicsProxyWidget::wheelEventPropagation()
// accepted by the embedded widget
QCOMPARE(view.itemAt(wheelPosition), nullptr);
wheelUp(Qt::NoScrollPhase);
- QCOMPARE(scrollSpy.count(), ++scrollCount);
+ QCOMPARE(scrollSpy.size(), ++scrollCount);
// wheeling on the label, which ignores the event, should scroll the view
QCOMPARE(view.itemAt(wheelPosition), labelProxy);
wheelUp(Qt::NoScrollPhase);
- QCOMPARE(scrollSpy.count(), ++scrollCount);
+ QCOMPARE(scrollSpy.size(), ++scrollCount);
QCOMPARE(view.itemAt(wheelPosition), labelProxy);
wheelUp(Qt::NoScrollPhase);
- QCOMPARE(scrollSpy.count(), ++scrollCount);
+ QCOMPARE(scrollSpy.size(), ++scrollCount);
// left the widget
QCOMPARE(view.itemAt(wheelPosition), nullptr);
wheelUp(Qt::NoScrollPhase);
- QCOMPARE(scrollSpy.count(), ++scrollCount);
+ QCOMPARE(scrollSpy.size(), ++scrollCount);
// reached the nested widget, which accepts the wheel event, so no more scrolling
QCOMPARE(view.itemAt(wheelPosition), nestedProxy);
// remember this position for later
const int scrollBarValueOnNestedProxy = view.verticalScrollBar()->value();
wheelUp(Qt::NoScrollPhase);
- QCOMPARE(scrollSpy.count(), scrollCount);
+ QCOMPARE(scrollSpy.size(), scrollCount);
QCOMPARE(nestedWidget->wheelEventCount, 1);
// reset, try with kinetic events
@@ -3743,41 +3737,41 @@ void tst_QGraphicsProxyWidget::wheelEventPropagation()
// no matter if the widget accepts wheel events - the view has the grab
QCOMPARE(view.itemAt(wheelPosition), nullptr);
wheelUp(Qt::ScrollBegin);
- QCOMPARE(scrollSpy.count(), ++scrollCount);
+ QCOMPARE(scrollSpy.size(), ++scrollCount);
for (int i = 0; i < 5; ++i) {
wheelUp(Qt::ScrollUpdate);
- QCOMPARE(scrollSpy.count(), ++scrollCount);
+ QCOMPARE(scrollSpy.size(), ++scrollCount);
}
wheelUp(Qt::ScrollEnd);
- QCOMPARE(scrollSpy.count(), ++scrollCount);
+ QCOMPARE(scrollSpy.size(), ++scrollCount);
// reset
view.verticalScrollBar()->setValue(0);
- scrollCount = scrollSpy.count();
+ scrollCount = scrollSpy.size();
// starting a scroll on a widget that doesn't accept wheel events
// should also scroll the view, which still gets the grab
wheelUp(Qt::NoScrollPhase);
- scrollCount = scrollSpy.count();
+ scrollCount = scrollSpy.size();
QCOMPARE(view.itemAt(wheelPosition), labelProxy);
wheelUp(Qt::ScrollBegin);
- QCOMPARE(scrollSpy.count(), ++scrollCount);
+ QCOMPARE(scrollSpy.size(), ++scrollCount);
for (int i = 0; i < 5; ++i) {
wheelUp(Qt::ScrollUpdate);
- QCOMPARE(scrollSpy.count(), ++scrollCount);
+ QCOMPARE(scrollSpy.size(), ++scrollCount);
}
wheelUp(Qt::ScrollEnd);
- QCOMPARE(scrollSpy.count(), ++scrollCount);
+ QCOMPARE(scrollSpy.size(), ++scrollCount);
// starting a scroll on a widget that does accept wheel events
// should not scroll the view
view.verticalScrollBar()->setValue(scrollBarValueOnNestedProxy);
- scrollCount = scrollSpy.count();
+ scrollCount = scrollSpy.size();
QCOMPARE(view.itemAt(wheelPosition), nestedProxy);
wheelUp(Qt::ScrollBegin);
- QCOMPARE(scrollSpy.count(), scrollCount);
+ QCOMPARE(scrollSpy.size(), scrollCount);
}
#endif // QT_CONFIG(wheelevent)
@@ -3875,7 +3869,7 @@ void tst_QGraphicsProxyWidget::touchEventPropagation()
QHash<int, QList<TouchRecord>> records;
QWidget *mousePressReceiver = nullptr;
- int count(int id = 0) const { return records.value(id).count(); }
+ int count(int id = 0) const { return records.value(id).size(); }
TouchRecord at(int i, int id = 0) const { return records.value(id).at(i); }
void clear()
{
@@ -3979,7 +3973,7 @@ void tst_QGraphicsProxyWidget::touchEventPropagation()
QCOMPARE(record.receiver, view.windowHandle());
QCOMPARE(record.eventType, QEvent::TouchEnd);
QCOMPARE(eventSpy.mousePressReceiver, pushButton1);
- QCOMPARE(clickedSpy.count(), 1);
+ QCOMPARE(clickedSpy.size(), 1);
eventSpy.clear();
clickedSpy.clear();
@@ -4047,7 +4041,7 @@ void tst_QGraphicsProxyWidget::touchEventPropagation()
QCOMPARE(eventSpy.at(0, 3).receiver, touchWidget2);
QCOMPARE(eventSpy.at(1, 3).receiver, touchWidget2);
QCOMPARE(eventSpy.at(2, 3).receiver, touchWidget2);
- QCOMPARE(clickedSpy.count(), 0); // multi-touch event does not synthesize a mouse event
+ QCOMPARE(clickedSpy.size(), 0); // multi-touch event does not synthesize a mouse event
}
QTEST_MAIN(tst_QGraphicsProxyWidget)
diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST
deleted file mode 100644
index c3797c9d57..0000000000
--- a/tests/auto/widgets/graphicsview/qgraphicsscene/BLACKLIST
+++ /dev/null
@@ -1,5 +0,0 @@
-[isActive]
-opensuse-42.3 ci
-[tabFocus_sceneWithNestedFocusWidgets]
-opensuse-42.3
-
diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicsscene/CMakeLists.txt
index 3c870e473e..c0dd8995b8 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsscene/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicsscene/CMakeLists.txt
@@ -1,35 +1,20 @@
-# Generated from qgraphicsscene.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicsscene Test:
#####################################################################
-qt_internal_add_test(tst_qgraphicsscene
- LOWDPI # special case
- SOURCES
- tst_qgraphicsscene.cpp
- DEFINES
- QT_NO_CAST_TO_ASCII
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Gui
- Qt::GuiPrivate
- Qt::Widgets
- Qt::WidgetsPrivate
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicsscene LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Resources:
-set(images_resource_files
- "Ash_European.jpg"
-)
-qt_internal_add_resource(tst_qgraphicsscene "images"
- PREFIX
- "/"
- FILES
- ${images_resource_files}
-)
set(testdata_resource_files
+ "Ash_European.jpg"
"testData/render/all-all-45-deg-left.png"
"testData/render/all-all-45-deg-right.png"
"testData/render/all-all-scale-2x.png"
@@ -60,18 +45,26 @@ set(testdata_resource_files
"testData/render/topright-topleft-untransformed.png"
)
-qt_internal_add_resource(tst_qgraphicsscene "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
+qt_internal_add_test(tst_qgraphicsscene
+ LOWDPI
+ SOURCES
+ tst_qgraphicsscene.cpp
+ DEFINES
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
+ Qt::WidgetsPrivate
+ TESTDATA ${testdata_resource_files}
+ BUILTIN_TESTDATA
)
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qgraphicsscene CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
diff --git a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
index b8991b5a9a..3ea728abf6 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets/QApplication>
#include <QtWidgets/QDial>
@@ -56,6 +31,8 @@
#include "../../../shared/platforminputcontext.h"
#include <private/qinputmethod_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
#if defined(Q_OS_WIN)
#include <QtCore/qt_windows.h>
#define Q_CHECK_PAINTEVENTS \
@@ -278,6 +255,7 @@ private slots:
void focusItemChangedSignal();
void minimumRenderSize();
void focusOnTouch();
+ void clearSelection();
// task specific tests below me
void task139710_bspTreeCrash();
@@ -294,6 +272,8 @@ private slots:
void taskQTBUG_42915_focusNextPrevChild();
void taskQTBUG_85088_previewTextfailWhenLostFocus();
+ void deleteItemsOnChange();
+
private:
QRect m_availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
QSize m_testSize;
@@ -341,27 +321,27 @@ void tst_QGraphicsScene::sceneRect()
QGraphicsScene scene;
QSignalSpy sceneRectChanged(&scene, &QGraphicsScene::sceneRectChanged);
QCOMPARE(scene.sceneRect(), QRectF());
- QCOMPARE(sceneRectChanged.count(), 0);
+ QCOMPARE(sceneRectChanged.size(), 0);
QGraphicsRectItem *item = scene.addRect(QRectF(0, 0, 10, 10));
item->setPen(QPen(Qt::black, 0));
item->setPos(-5, -5);
- QCOMPARE(sceneRectChanged.count(), 0);
+ QCOMPARE(sceneRectChanged.size(), 0);
QCOMPARE(itemAt(scene, 0, 0), item);
QVERIFY(scene.items(QPointF(10, 10)).isEmpty());
- QCOMPARE(sceneRectChanged.count(), 0);
+ QCOMPARE(sceneRectChanged.size(), 0);
QCOMPARE(scene.sceneRect(), QRectF(-5, -5, 10, 10));
- QCOMPARE(sceneRectChanged.count(), 1);
+ QCOMPARE(sceneRectChanged.size(), 1);
QCOMPARE(sceneRectChanged.last().at(0).toRectF(), scene.sceneRect());
item->setPos(0, 0);
QCOMPARE(scene.sceneRect(), QRectF(-5, -5, 15, 15));
- QCOMPARE(sceneRectChanged.count(), 2);
+ QCOMPARE(sceneRectChanged.size(), 2);
QCOMPARE(sceneRectChanged.last().at(0).toRectF(), scene.sceneRect());
scene.setSceneRect(-100, -100, 10, 10);
- QCOMPARE(sceneRectChanged.count(), 3);
+ QCOMPARE(sceneRectChanged.size(), 3);
QCOMPARE(sceneRectChanged.last().at(0).toRectF(), scene.sceneRect());
QCOMPARE(itemAt(scene, 0, 0), item);
@@ -369,16 +349,16 @@ void tst_QGraphicsScene::sceneRect()
QCOMPARE(scene.sceneRect(), QRectF(-100, -100, 10, 10));
item->setPos(10, 10);
QCOMPARE(scene.sceneRect(), QRectF(-100, -100, 10, 10));
- QCOMPARE(sceneRectChanged.count(), 3);
+ QCOMPARE(sceneRectChanged.size(), 3);
QCOMPARE(sceneRectChanged.last().at(0).toRectF(), scene.sceneRect());
scene.setSceneRect(QRectF());
QCOMPARE(itemAt(scene, 10, 10), item);
QVERIFY(scene.items(QPointF(20, 20)).isEmpty());
- QCOMPARE(sceneRectChanged.count(), 4);
+ QCOMPARE(sceneRectChanged.size(), 4);
QCOMPARE(scene.sceneRect(), QRectF(-5, -5, 25, 25));
- QCOMPARE(sceneRectChanged.count(), 5);
+ QCOMPARE(sceneRectChanged.size(), 5);
QCOMPARE(sceneRectChanged.last().at(0).toRectF(), scene.sceneRect());
}
@@ -554,7 +534,7 @@ void tst_QGraphicsScene::itemsBoundingRect()
QGraphicsScene scene;
- for (const auto &rect : qAsConst(rects)) {
+ for (const auto &rect : std::as_const(rects)) {
QPainterPath path;
path.addRect(rect);
QGraphicsPathItem *item = scene.addPath(path);
@@ -619,7 +599,7 @@ void tst_QGraphicsScene::items_QPointF()
int n = 0;
QList<QGraphicsItem *> addedItems;
- for (const auto &rect : qAsConst(items)) {
+ for (const auto &rect : std::as_const(items)) {
QPainterPath path;
path.addRect(0, 0, rect.width(), rect.height());
@@ -966,32 +946,32 @@ void tst_QGraphicsScene::selectionChanged()
{
QGraphicsScene scene(0, 0, 1000, 1000);
QSignalSpy spy(&scene, &QGraphicsScene::selectionChanged);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QPainterPath path;
path.addRect(scene.sceneRect());
QCOMPARE(scene.selectionArea(), QPainterPath());
scene.setSelectionArea(path);
QCOMPARE(scene.selectionArea(), path);
- QCOMPARE(spy.count(), 0); // selection didn't change
+ QCOMPARE(spy.size(), 0); // selection didn't change
QVERIFY(scene.selectedItems().isEmpty());
QGraphicsItem *rect = scene.addRect(QRectF(0, 0, 100, 100));
- QCOMPARE(spy.count(), 0); // selection didn't change
+ QCOMPARE(spy.size(), 0); // selection didn't change
rect->setSelected(true);
QVERIFY(!rect->isSelected());
- QCOMPARE(spy.count(), 0); // selection didn't change, item isn't selectable
+ QCOMPARE(spy.size(), 0); // selection didn't change, item isn't selectable
rect->setFlag(QGraphicsItem::ItemIsSelectable);
rect->setSelected(true);
QVERIFY(rect->isSelected());
- QCOMPARE(spy.count(), 1); // selection changed
+ QCOMPARE(spy.size(), 1); // selection changed
QCOMPARE(scene.selectedItems(), {rect});
rect->setSelected(false);
QVERIFY(!rect->isSelected());
- QCOMPARE(spy.count(), 2); // selection changed
+ QCOMPARE(spy.size(), 2); // selection changed
QVERIFY(scene.selectedItems().isEmpty());
QGraphicsEllipseItem *parentItem = new QGraphicsEllipseItem(QRectF(0, 0, 100, 100));
@@ -1003,33 +983,33 @@ void tst_QGraphicsScene::selectionChanged()
grandChildItem->setSelected(true);
scene.addItem(parentItem);
- QCOMPARE(spy.count(), 3); // the grandchild was added, so the selection changed once
+ QCOMPARE(spy.size(), 3); // the grandchild was added, so the selection changed once
scene.removeItem(parentItem);
- QCOMPARE(spy.count(), 4); // the grandchild was removed, so the selection changed
+ QCOMPARE(spy.size(), 4); // the grandchild was removed, so the selection changed
rect->setSelected(true);
- QCOMPARE(spy.count(), 5); // the rect was reselected, so the selection changed
+ QCOMPARE(spy.size(), 5); // the rect was reselected, so the selection changed
scene.clearSelection();
- QCOMPARE(spy.count(), 6); // the scene selection was cleared
+ QCOMPARE(spy.size(), 6); // the scene selection was cleared
rect->setSelected(true);
- QCOMPARE(spy.count(), 7); // the rect was reselected, so the selection changed
+ QCOMPARE(spy.size(), 7); // the rect was reselected, so the selection changed
rect->setFlag(QGraphicsItem::ItemIsSelectable, false);
- QCOMPARE(spy.count(), 8); // the rect was unselected, so the selection changed
+ QCOMPARE(spy.size(), 8); // the rect was unselected, so the selection changed
rect->setSelected(true);
- QCOMPARE(spy.count(), 8); // the rect is not longer selectable, so the selection does not change
+ QCOMPARE(spy.size(), 8); // the rect is not longer selectable, so the selection does not change
rect->setFlag(QGraphicsItem::ItemIsSelectable, true);
rect->setSelected(true);
- QCOMPARE(spy.count(), 9); // the rect is again selectable, so the selection changed
+ QCOMPARE(spy.size(), 9); // the rect is again selectable, so the selection changed
delete rect;
- QCOMPARE(spy.count(), 10); // a selected item was deleted; selection changed
+ QCOMPARE(spy.size(), 10); // a selected item was deleted; selection changed
}
void tst_QGraphicsScene::selectionChanged2()
@@ -1042,7 +1022,7 @@ void tst_QGraphicsScene::selectionChanged2()
item1->setFlag(QGraphicsItem::ItemIsSelectable);
item2->setFlag(QGraphicsItem::ItemIsSelectable);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
{
QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
event.setScenePos(QPointF(50, 50));
@@ -1057,7 +1037,7 @@ void tst_QGraphicsScene::selectionChanged2()
}
QVERIFY(item1->isSelected());
QVERIFY(!item2->isSelected());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
{
QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
event.setScenePos(QPointF(150, 150));
@@ -1072,7 +1052,7 @@ void tst_QGraphicsScene::selectionChanged2()
}
QVERIFY(!item1->isSelected());
QVERIFY(item2->isSelected());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
{
QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress);
event.setScenePos(QPointF(50, 50));
@@ -1082,7 +1062,7 @@ void tst_QGraphicsScene::selectionChanged2()
}
QVERIFY(!item1->isSelected());
QVERIFY(item2->isSelected());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
{
QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMouseRelease);
event.setScenePos(QPointF(50, 50));
@@ -1091,7 +1071,7 @@ void tst_QGraphicsScene::selectionChanged2()
}
QVERIFY(item1->isSelected());
QVERIFY(!item2->isSelected());
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
}
void tst_QGraphicsScene::addItem()
@@ -1314,7 +1294,7 @@ void tst_QGraphicsScene::removeItem()
view.setWindowTitle(QTest::currentTestFunction());
view.setFixedSize(150, 150);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QTest::mouseMove(view.windowHandle(), view.mapFromScene(hoverItem->scenePos() + QPointF(20, 20)));
QTRY_VERIFY(!hoverItem->isHovered);
@@ -1622,7 +1602,7 @@ void tst_QGraphicsScene::hoverEvents_siblings()
view.rotate(10);
view.scale(1.7, 1.7);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
view.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
@@ -1692,7 +1672,7 @@ void tst_QGraphicsScene::hoverEvents_parentChild()
view.rotate(10);
view.scale(1.7, 1.7);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QGraphicsSceneMouseEvent mouseEvent(QEvent::GraphicsSceneMouseMove);
@@ -1754,7 +1734,7 @@ void tst_QGraphicsScene::createItemGroup()
// All items in children1 are children of parent1
QGraphicsItem *parent1 = scene.addRect(QRectF(-10, -10, 20, 20));
- for (QGraphicsItem *item : qAsConst(children1))
+ for (QGraphicsItem *item : std::as_const(children1))
item->setParentItem(parent1);
QGraphicsItemGroup *group = scene.createItemGroup(children1);
@@ -1770,7 +1750,7 @@ void tst_QGraphicsScene::createItemGroup()
// All items in children2 are children of parent2
QGraphicsItem *parent2 = scene.addRect(QRectF(-10, -10, 20, 20));
- for (QGraphicsItem *item : qAsConst(children2))
+ for (QGraphicsItem *item : std::as_const(children2))
item->setParentItem(parent2);
// Now make parent2 a child of parent1, so all children2 are also children
@@ -1794,7 +1774,7 @@ void tst_QGraphicsScene::createItemGroup()
QCOMPARE(children2.first()->parentItem(), parent1);
// Fixup the parent-child chain
- for (QGraphicsItem *item : qAsConst(children2))
+ for (QGraphicsItem *item : std::as_const(children2))
item->setParentItem(parent2);
// These share no common parent
@@ -1804,7 +1784,7 @@ void tst_QGraphicsScene::createItemGroup()
// Make children3 children of parent3
QGraphicsItem *parent3 = scene.addRect(QRectF(-10, -10, 20, 20));
- for (QGraphicsItem *item : qAsConst(children3))
+ for (QGraphicsItem *item : std::as_const(children3))
item->setParentItem(parent3);
// These should have parent3 as a parent
@@ -2700,6 +2680,9 @@ void tst_QGraphicsScene::renderItemsWithNegativeWidthOrHeight()
#ifdef Q_OS_ANDROID
QSKIP("Test only works on platforms with resizable windows");
#endif
+ if (QGuiApplication::platformName().startsWith(QLatin1String("eglfs"), Qt::CaseInsensitive))
+ QSKIP("EGLFS does not allow resizing on top window");
+
QGraphicsScene scene(0, 0, m_testSize.width(), m_testSize.height());
// Add item with negative width.
@@ -2854,7 +2837,7 @@ void tst_QGraphicsScene::update()
QCoreApplication::processEvents();
// Check that the update region is correct
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QRectF region;
const auto &rects = qvariant_cast<QList<QRectF> >(spy.at(0).at(0));
for (const auto &rectF : rects)
@@ -2871,7 +2854,7 @@ void tst_QGraphicsScene::update2()
view.resize(m_testSize);
view.setScene(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(view.repaints >= 1);
view.repaints = 0;
@@ -3061,7 +3044,7 @@ void tst_QGraphicsScene::tabFocus_emptyScene()
widget.setLayout(layout);
widget.setWindowTitle(QTest::currentTestFunction());
widget.show();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&widget));
@@ -3113,7 +3096,7 @@ void tst_QGraphicsScene::tabFocus_sceneWithFocusableItems()
widget.setWindowTitle(QTest::currentTestFunction());
widget.setLayout(layout);
widget.show();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&widget));
@@ -3167,7 +3150,7 @@ void tst_QGraphicsScene::tabFocus_sceneWithFocusableItems()
// Check that the correct item regains focus.
widget.show();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&widget));
QVERIFY(view->hasFocus());
@@ -3251,7 +3234,7 @@ void tst_QGraphicsScene::tabFocus_sceneWithFocusWidgets()
widget.setWindowTitle(QTest::currentTestFunction());
widget.setLayout(layout);
widget.show();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&widget));
@@ -3290,7 +3273,7 @@ void tst_QGraphicsScene::tabFocus_sceneWithFocusWidgets()
widget.hide();
QTest::qWait(15);
widget.show();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&widget));
QTRY_VERIFY(widget1->hasFocus());
@@ -3339,7 +3322,7 @@ void tst_QGraphicsScene::tabFocus_sceneWithNestedFocusWidgets()
widget.setWindowTitle(QTest::currentTestFunction());
widget.setLayout(layout);
widget.show();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&widget));
@@ -3424,7 +3407,7 @@ void tst_QGraphicsScene::tabFocus_sceneWithNestedFocusWidgets()
widget.hide();
QTest::qWait(12);
widget.show();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&widget));
QTRY_VERIFY(widget1->hasFocus());
@@ -3553,7 +3536,7 @@ void tst_QGraphicsScene::task160653_selectionChanged()
QVERIFY(QTest::qWaitForWindowActive(&view));
QTest::mouseClick(
view.viewport(), Qt::LeftButton, {}, view.mapFromScene(scene.items().first()->scenePos()));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QGraphicsScene::task250680_childClip()
@@ -3684,8 +3667,8 @@ void tst_QGraphicsScene::insertionOrder()
{
QList<QGraphicsItem*> itemList = scene.items();
- QCOMPARE(itemList.count(), numItems);
- for (int i = 0; i < itemList.count(); ++i) {
+ QCOMPARE(itemList.size(), numItems);
+ for (int i = 0; i < itemList.size(); ++i) {
QCOMPARE(numItems-1-i, itemList.at(i)->data(0).toInt());
}
}
@@ -3698,8 +3681,8 @@ void tst_QGraphicsScene::insertionOrder()
{
QList<QGraphicsItem*> itemList = scene.items();
- QCOMPARE(itemList.count(), numItems);
- for (int i = 0; i < itemList.count(); ++i) {
+ QCOMPARE(itemList.size(), numItems);
+ for (int i = 0; i < itemList.size(); ++i) {
QCOMPARE(numItems-1-i, itemList.at(i)->data(0).toInt());
}
}
@@ -3842,7 +3825,7 @@ void tst_QGraphicsScene::inputMethod()
view.resize(m_testSize);
view.show();
view.setWindowTitle(QTest::currentTestFunction());
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
view.setFocus();
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), &view);
@@ -4047,7 +4030,7 @@ void tst_QGraphicsScene::polishItems2()
// added 10 new children. These should be polished in the next
// event loop iteration.
const QList<QGraphicsItem *> children = item->childItems();
- QCOMPARE(children.count(), 10);
+ QCOMPARE(children.size(), 10);
for (QGraphicsItem *child : children)
QVERIFY(!static_cast<PolishItem *>(child)->polished);
@@ -4086,7 +4069,7 @@ void tst_QGraphicsScene::isActive()
view1->setVisible(false);
toplevel1.show();
- QApplication::setActiveWindow(&toplevel1);
+ QApplicationPrivate::setActiveWindow(&toplevel1);
QVERIFY(QTest::qWaitForWindowActive(&toplevel1));
QCOMPARE(QApplication::activeWindow(), &toplevel1);
@@ -4115,7 +4098,7 @@ void tst_QGraphicsScene::isActive()
QVERIFY(!scene2.hasFocus());
toplevel1.show();
- QApplication::setActiveWindow(&toplevel1);
+ QApplicationPrivate::setActiveWindow(&toplevel1);
QVERIFY(QTest::qWaitForWindowActive(&toplevel1));
QCOMPARE(QApplication::activeWindow(), &toplevel1);
@@ -4155,7 +4138,7 @@ void tst_QGraphicsScene::isActive()
toplevel2.move(m_availableGeometry.topLeft() + QPoint(50, 50));
toplevel2.show();
- QApplication::setActiveWindow(&toplevel2);
+ QApplicationPrivate::setActiveWindow(&toplevel2);
QVERIFY(QTest::qWaitForWindowActive(&toplevel2));
QCOMPARE(QApplication::activeWindow(), &toplevel2);
@@ -4205,7 +4188,7 @@ void tst_QGraphicsScene::isActive()
topLevelView.move(toplevel2.geometry().topRight() + QPoint(100, 50));
topLevelView.resize(m_testSize);
topLevelView.show();
- QApplication::setActiveWindow(&topLevelView);
+ QApplicationPrivate::setActiveWindow(&topLevelView);
topLevelView.setFocus();
QVERIFY(QTest::qWaitForWindowActive(&topLevelView));
QCOMPARE(QApplication::activeWindow(), &topLevelView);
@@ -4233,7 +4216,7 @@ void tst_QGraphicsScene::isActive()
QVERIFY(scene1.hasFocus());
QVERIFY(!scene2.hasFocus());
- QApplication::setActiveWindow(&toplevel2);
+ QApplicationPrivate::setActiveWindow(&toplevel2);
QVERIFY(QTest::qWaitForWindowActive(&toplevel2));
QVERIFY(!scene1.isActive());
@@ -4263,7 +4246,7 @@ void tst_QGraphicsScene::isActive()
toplevel3.show();
- QApplication::setActiveWindow(&toplevel3);
+ QApplicationPrivate::setActiveWindow(&toplevel3);
QVERIFY(QTest::qWaitForWindowActive(&toplevel3));
QCOMPARE(QApplication::activeWindow(), &toplevel3);
@@ -4376,7 +4359,7 @@ void tst_QGraphicsScene::removeFullyTransparentItem()
view.resize(m_testSize);
view.setScene(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QCoreApplication::processEvents(); // Process all queued paint events
@@ -4626,13 +4609,13 @@ void tst_QGraphicsScene::zeroScale()
rect1->setScale(0.00000001);
QApplication::processEvents();
- QTRY_COMPARE(cl.changes.count(), 1);
+ QTRY_COMPARE(cl.changes.size(), 1);
QGraphicsRectItem *rect2 = new QGraphicsRectItem(-0.0000001, -0.0000001, 0.0000001, 0.0000001);
rect2->setScale(0.00000001);
scene.addItem(rect2);
rect1->setPos(20,20);
QApplication::processEvents();
- QTRY_COMPARE(cl.changes.count(), 2);
+ QTRY_COMPARE(cl.changes.size(), 2);
}
void tst_QGraphicsScene::focusItemChangedSignal()
@@ -4643,17 +4626,17 @@ void tst_QGraphicsScene::focusItemChangedSignal()
QGraphicsScene scene;
QSignalSpy spy(&scene, &QGraphicsScene::focusItemChanged);
QVERIFY(spy.isValid());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
scene.setFocus();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QEvent activateEvent(QEvent::WindowActivate);
QCoreApplication::sendEvent(&scene, &activateEvent);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QGraphicsRectItem *topLevelItem1 = new QGraphicsRectItem;
topLevelItem1->setFlag(QGraphicsItem::ItemIsFocusable);
scene.addItem(topLevelItem1);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QVERIFY(!topLevelItem1->hasFocus());
QGraphicsRectItem *topLevelItem2 = new QGraphicsRectItem;
@@ -4661,7 +4644,7 @@ void tst_QGraphicsScene::focusItemChangedSignal()
topLevelItem2->setFocus();
QVERIFY(!topLevelItem2->hasFocus());
scene.addItem(topLevelItem2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> arguments = spy.takeFirst();
QCOMPARE(arguments.size(), 3);
QCOMPARE(qvariant_cast<QGraphicsItem *>(arguments.at(0)), topLevelItem2);
@@ -4670,7 +4653,7 @@ void tst_QGraphicsScene::focusItemChangedSignal()
QVERIFY(topLevelItem2->hasFocus());
scene.clearFocus();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.size(), 3);
QCOMPARE(qvariant_cast<QGraphicsItem *>(arguments.at(0)), nullptr);
@@ -4678,7 +4661,7 @@ void tst_QGraphicsScene::focusItemChangedSignal()
QCOMPARE(qvariant_cast<Qt::FocusReason>(arguments.at(2)), Qt::OtherFocusReason);
scene.setFocus(Qt::MenuBarFocusReason);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.size(), 3);
QCOMPARE(qvariant_cast<QGraphicsItem *>(arguments.at(0)), topLevelItem2);
@@ -4707,16 +4690,16 @@ void tst_QGraphicsScene::focusItemChangedSignal()
QEvent deactivateEvent(QEvent::WindowDeactivate);
QCoreApplication::sendEvent(&scene, &deactivateEvent);
QEXPECT_FAIL("", "QTBUG-28346", Continue);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCoreApplication::sendEvent(&scene, &activateEvent);
QEXPECT_FAIL("", "QTBUG-28346", Continue);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QGraphicsRectItem *panel1 = new QGraphicsRectItem;
panel1->setFlags(QGraphicsItem::ItemIsPanel | QGraphicsItem::ItemIsFocusable);
panel1->setFocus();
scene.addItem(panel1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.size(), 3);
QCOMPARE(qvariant_cast<QGraphicsItem *>(arguments.at(0)), panel1);
@@ -4726,11 +4709,11 @@ void tst_QGraphicsScene::focusItemChangedSignal()
QGraphicsRectItem *panel2 = new QGraphicsRectItem;
panel2->setFlags(QGraphicsItem::ItemIsPanel | QGraphicsItem::ItemIsFocusable);
scene.addItem(panel2);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
for (int i = 0; i < 3; ++i) {
scene.setActivePanel(panel2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.size(), 3);
QCOMPARE(qvariant_cast<QGraphicsItem *>(arguments.at(0)), panel2);
@@ -4738,7 +4721,7 @@ void tst_QGraphicsScene::focusItemChangedSignal()
QCOMPARE(qvariant_cast<Qt::FocusReason>(arguments.at(2)), Qt::ActiveWindowFocusReason);
scene.setActivePanel(panel1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.size(), 3);
QCOMPARE(qvariant_cast<QGraphicsItem *>(arguments.at(0)), panel1);
@@ -4834,7 +4817,7 @@ void tst_QGraphicsScene::focusOnTouch()
rect->setFlag(QGraphicsItem::ItemIsFocusable, true);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QVERIFY(!rect->hasFocus());
@@ -4857,6 +4840,53 @@ void tst_QGraphicsScene::focusOnTouch()
QVERIFY(rect->hasFocus());
}
+void tst_QGraphicsScene::clearSelection()
+{
+ class AlwaysSelectedItem : public QGraphicsRectItem
+ {
+ public:
+ using QGraphicsRectItem::QGraphicsRectItem;
+ protected:
+ QVariant itemChange(GraphicsItemChange change, const QVariant& value) override
+ {
+ if (change == ItemSelectedChange)
+ return true;
+ return QGraphicsRectItem::itemChange(change, value);
+ }
+ };
+ QGraphicsScene scene;
+ QSignalSpy spy(&scene, &QGraphicsScene::selectionChanged);
+
+ QGraphicsRectItem *regularRect = new QGraphicsRectItem;
+ regularRect->setFlag(QGraphicsItem::ItemIsSelectable);
+ regularRect->setRect(0, 0, 50, 50);
+ regularRect->setSelected(true);
+ AlwaysSelectedItem *selectedRect = new AlwaysSelectedItem;
+ selectedRect->setFlag(QGraphicsItem::ItemIsSelectable);
+ selectedRect->setRect(50, 50, 50, 50);
+ selectedRect->setSelected(true);
+ scene.addItem(regularRect);
+ scene.addItem(selectedRect);
+
+ QCOMPARE(spy.size(), 2);
+
+ QCOMPARE(scene.selectedItems().size(), 2);
+ scene.clearSelection();
+ QVERIFY(!regularRect->isSelected());
+ QVERIFY(selectedRect->isSelected());
+ QCOMPARE(scene.selectedItems().size(), 1);
+ QCOMPARE(spy.size(), 3);
+
+ delete regularRect;
+ QCOMPARE(spy.size(), 3);
+
+ scene.clearSelection();
+ QCOMPARE(spy.size(), 3);
+
+ delete selectedRect;
+ QCOMPARE(spy.size(), 4);
+}
+
void tst_QGraphicsScene::taskQTBUG_15977_renderWithDeviceCoordinateCache()
{
QGraphicsScene scene;
@@ -4888,7 +4918,7 @@ void tst_QGraphicsScene::taskQTBUG_16401_focusItem()
rect->setFlag(QGraphicsItem::ItemIsFocusable);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QVERIFY(!scene.focusItem());
@@ -4930,7 +4960,7 @@ void tst_QGraphicsScene::taskQTBUG_42915_focusNextPrevChild()
widget2->setFocusPolicy(Qt::NoFocus);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QTest::keyEvent(QTest::Click, &view, Qt::Key_Tab);
@@ -4960,6 +4990,7 @@ void tst_QGraphicsScene::taskQTBUG_85088_previewTextfailWhenLostFocus()
// focusItem will lose focus
QMouseEvent pressEvent(QEvent::MouseButtonPress, QPointF(0, 0),
+ view.viewport()->mapToGlobal(QPointF()),
Qt::LeftButton, Qt::NoButton, Qt::NoModifier);
QApplication::sendEvent(view.viewport(), &pressEvent);
@@ -4969,5 +5000,72 @@ void tst_QGraphicsScene::taskQTBUG_85088_previewTextfailWhenLostFocus()
QCOMPARE(simpleTextItem->toPlainText(), str + str);
}
+void tst_QGraphicsScene::deleteItemsOnChange()
+{
+ QGraphicsScene scene;
+
+ class SelectionItem : public QGraphicsRectItem {
+ public:
+ QRectF boundingRect() const override { return QRectF(); }
+ };
+
+ class ChangeItem : public QGraphicsItem
+ {
+ public:
+ ChangeItem()
+ {
+ setFlag(QGraphicsItem::ItemIsSelectable, true);
+ setFlag(QGraphicsItem::ItemIsMovable, true);
+ }
+ QRectF boundingRect() const override
+ {
+ return QRectF(0,0,100,100);
+ }
+
+ protected:
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) override
+ {
+ painter->fillRect(boundingRect().toRect(), isSelected() ? Qt::yellow : Qt::cyan);
+ }
+
+ QVariant itemChange(GraphicsItemChange change, const QVariant &value) override
+ {
+ if (change != QGraphicsItem::ItemSelectedHasChanged)
+ return QGraphicsItem::itemChange(change, value);
+ if (value.toBool()) {
+ selectionRect = new SelectionItem;
+ scene()->addItem(selectionRect);
+ } else {
+ // this recreates the selectedItems QSet inside of QGraphicsScene,
+ // invalidating iterators. See QTBUG-101651.
+ scene()->selectedItems();
+ delete selectionRect;
+ selectionRect = nullptr;
+ }
+ return QGraphicsItem::itemChange(change, value);
+ }
+ private:
+ SelectionItem *selectionRect = nullptr;
+ };
+
+ ChangeItem item1;
+ item1.setPos(0, 0);
+ ChangeItem item2;
+ item1.setPos(50, 50);
+
+ scene.addItem(&item1);
+ scene.addItem(&item2);
+
+ QGraphicsView view;
+ view.setScene(&scene);
+ view.show();
+
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ // this should not crash - see QTBUG-101651
+ QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, QPoint(120, 120));
+ QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, QPoint(25, 25));
+}
+
QTEST_MAIN(tst_QGraphicsScene)
#include "tst_qgraphicsscene.moc"
diff --git a/tests/auto/widgets/graphicsview/qgraphicssceneindex/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicssceneindex/CMakeLists.txt
index f95e618a16..867831d898 100644
--- a/tests/auto/widgets/graphicsview/qgraphicssceneindex/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicssceneindex/CMakeLists.txt
@@ -1,4 +1,11 @@
-# Generated from qgraphicssceneindex.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_qgraphicssceneindex LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
if(NOT QT_FEATURE_private_tests)
return()
@@ -11,13 +18,10 @@ endif()
qt_internal_add_test(tst_qgraphicssceneindex
SOURCES
tst_qgraphicssceneindex.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
Qt::WidgetsPrivate
)
-
-#### Keys ignored in scope 1:.:.:qgraphicssceneindex.pro:<TRUE>:
-# _REQUIREMENTS = "qtConfig(private_tests)"
diff --git a/tests/auto/widgets/graphicsview/qgraphicssceneindex/tst_qgraphicssceneindex.cpp b/tests/auto/widgets/graphicsview/qgraphicssceneindex/tst_qgraphicssceneindex.cpp
index 9645b9a7fb..b62a24eaef 100644
--- a/tests/auto/widgets/graphicsview/qgraphicssceneindex/tst_qgraphicssceneindex.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicssceneindex/tst_qgraphicssceneindex.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 <QTest>
@@ -33,6 +8,7 @@
#include <private/qgraphicsscenebsptreeindex_p.h>
#include <private/qgraphicssceneindex_p.h>
#include <private/qgraphicsscenelinearindex_p.h>
+#include <QtWidgets/private/qapplication_p.h>
class tst_QGraphicsSceneIndex : public QObject
{
@@ -99,13 +75,13 @@ void tst_QGraphicsSceneIndex::scatteredItems()
for (int i = 0; i < 10; ++i)
scene.addRect(i*50, i*50, 40, 35);
- QCOMPARE(scene.items(QPointF(5, 5)).count(), 1);
- QCOMPARE(scene.items(QPointF(55, 55)).count(), 1);
- QCOMPARE(scene.items(QPointF(-100, -100)).count(), 0);
+ QCOMPARE(scene.items(QPointF(5, 5)).size(), 1);
+ QCOMPARE(scene.items(QPointF(55, 55)).size(), 1);
+ QCOMPARE(scene.items(QPointF(-100, -100)).size(), 0);
- QCOMPARE(scene.items(QRectF(0, 0, 10, 10)).count(), 1);
- QCOMPARE(scene.items(QRectF(0, 0, 1000, 1000)).count(), 10);
- QCOMPARE(scene.items(QRectF(-100, -1000, 0, 0)).count(), 0);
+ QCOMPARE(scene.items(QRectF(0, 0, 10, 10)).size(), 1);
+ QCOMPARE(scene.items(QRectF(0, 0, 1000, 1000)).size(), 10);
+ QCOMPARE(scene.items(QRectF(-100, -1000, 0, 0)).size(), 0);
}
void tst_QGraphicsSceneIndex::overlappedItems_data()
@@ -124,17 +100,17 @@ void tst_QGraphicsSceneIndex::overlappedItems()
for (int j = 0; j < 10; ++j)
scene.addRect(i*50, j*50, 200, 200)->setPen(QPen(Qt::black, 0));
- QCOMPARE(scene.items(QPointF(5, 5)).count(), 1);
- QCOMPARE(scene.items(QPointF(55, 55)).count(), 4);
- QCOMPARE(scene.items(QPointF(105, 105)).count(), 9);
- QCOMPARE(scene.items(QPointF(-100, -100)).count(), 0);
-
- QCOMPARE(scene.items(QRectF(0, 0, 1000, 1000)).count(), 100);
- QCOMPARE(scene.items(QRectF(-100, -1000, 0, 0)).count(), 0);
- QCOMPARE(scene.items(QRectF(0, 0, 200, 200)).count(), 16);
- QCOMPARE(scene.items(QRectF(0, 0, 100, 100)).count(), 4);
- QCOMPARE(scene.items(QRectF(0, 0, 1, 100)).count(), 2);
- QCOMPARE(scene.items(QRectF(0, 0, 1, 1000)).count(), 10);
+ QCOMPARE(scene.items(QPointF(5, 5)).size(), 1);
+ QCOMPARE(scene.items(QPointF(55, 55)).size(), 4);
+ QCOMPARE(scene.items(QPointF(105, 105)).size(), 9);
+ QCOMPARE(scene.items(QPointF(-100, -100)).size(), 0);
+
+ QCOMPARE(scene.items(QRectF(0, 0, 1000, 1000)).size(), 100);
+ QCOMPARE(scene.items(QRectF(-100, -1000, 0, 0)).size(), 0);
+ QCOMPARE(scene.items(QRectF(0, 0, 200, 200)).size(), 16);
+ QCOMPARE(scene.items(QRectF(0, 0, 100, 100)).size(), 4);
+ QCOMPARE(scene.items(QRectF(0, 0, 1, 100)).size(), 2);
+ QCOMPARE(scene.items(QRectF(0, 0, 1, 1000)).size(), 10);
}
void tst_QGraphicsSceneIndex::movingItems_data()
@@ -153,20 +129,20 @@ void tst_QGraphicsSceneIndex::movingItems()
scene.addRect(i*50, i*50, 40, 35);
QGraphicsRectItem *box = scene.addRect(0, 0, 10, 10);
- QCOMPARE(scene.items(QPointF(5, 5)).count(), 2);
- QCOMPARE(scene.items(QPointF(-1, -1)).count(), 0);
- QCOMPARE(scene.items(QRectF(0, 0, 5, 5)).count(), 2);
+ QCOMPARE(scene.items(QPointF(5, 5)).size(), 2);
+ QCOMPARE(scene.items(QPointF(-1, -1)).size(), 0);
+ QCOMPARE(scene.items(QRectF(0, 0, 5, 5)).size(), 2);
box->setPos(10, 10);
- QCOMPARE(scene.items(QPointF(9, 9)).count(), 1);
- QCOMPARE(scene.items(QPointF(15, 15)).count(), 2);
- QCOMPARE(scene.items(QRectF(0, 0, 1, 1)).count(), 1);
+ QCOMPARE(scene.items(QPointF(9, 9)).size(), 1);
+ QCOMPARE(scene.items(QPointF(15, 15)).size(), 2);
+ QCOMPARE(scene.items(QRectF(0, 0, 1, 1)).size(), 1);
box->setPos(-5, -5);
- QCOMPARE(scene.items(QPointF(-1, -1)).count(), 1);
- QCOMPARE(scene.items(QRectF(0, 0, 1, 1)).count(), 2);
+ QCOMPARE(scene.items(QPointF(-1, -1)).size(), 1);
+ QCOMPARE(scene.items(QRectF(0, 0, 1, 1)).size(), 2);
- QCOMPARE(scene.items(QRectF(0, 0, 1000, 1000)).count(), 11);
+ QCOMPARE(scene.items(QRectF(0, 0, 1000, 1000)).size(), 11);
}
void tst_QGraphicsSceneIndex::connectedToSceneRectChanged()
@@ -315,7 +291,7 @@ void tst_QGraphicsSceneIndex::removeItems()
QGraphicsView view(&scene);
view.resize(600, 600);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
scene.removeItem(widgetChild1);
@@ -347,7 +323,7 @@ void tst_QGraphicsSceneIndex::clear()
QGraphicsView view(&scene);
view.show();
- qApp->setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
scene.clear();
diff --git a/tests/auto/widgets/graphicsview/qgraphicstransform/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicstransform/CMakeLists.txt
index 12ba7dd834..a11036b30f 100644
--- a/tests/auto/widgets/graphicsview/qgraphicstransform/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicstransform/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicstransform.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicstransform Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicstransform LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicstransform
SOURCES
tst_qgraphicstransform.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/graphicsview/qgraphicstransform/tst_qgraphicstransform.cpp b/tests/auto/widgets/graphicsview/qgraphicstransform/tst_qgraphicstransform.cpp
index 5d5323a3a2..3ee63d288b 100644
--- a/tests/auto/widgets/graphicsview/qgraphicstransform/tst_qgraphicstransform.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicstransform/tst_qgraphicstransform.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 <QTest>
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST
index fe3d929e9e..ae5cbf7d6a 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/BLACKLIST
@@ -1,23 +1,7 @@
-[task255529_transformationAnchorMouseAndViewportMargins]
-opensuse-leap
-[cursor]
-opensuse-leap
[cursor2]
-ubuntu-16.04
-[sendEvent]
-ubuntu-16.04
-opensuse-42.3
-[resizeAnchor]
-opensuse-leap
-rhel-7.6
-ubuntu
-[update2]
-opensuse-42.3
-[itemsInRect_cosmeticAdjust]
-# QTBUG-66815
-ubuntu-16.04
-[fitInView]
osx
+[resizeAnchor]
+rhel
# QTBUG-87397
[itemsAtPoint]
android
@@ -45,3 +29,9 @@ android
android
[update_ancestorClipsChildrenToShape2]
android
+[QTBUG_70255_scrollTo]
+android # QTBUG-87397
+[embeddedViewsWithFocus]
+android # QTBUG-87397
+[viewportUpdateMode2]
+android # QTBUG-87397
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicsview/CMakeLists.txt
index be9c4a3bc4..cf33de0b33 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/CMakeLists.txt
@@ -1,16 +1,23 @@
-# Generated from qgraphicsview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicsview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicsview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicsview
SOURCES
tst_qgraphicsview.cpp tst_qgraphicsview.h
tst_qgraphicsview_2.cpp
DEFINES
QT_NO_CAST_TO_ASCII
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -19,14 +26,11 @@ qt_internal_add_test(tst_qgraphicsview
Qt::WidgetsPrivate
)
-#### Keys ignored in scope 1:.:.:qgraphicsview.pro:<TRUE>:
-# testcase.timeout = "500"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qgraphicsview CONDITION QT_FEATURE_opengl
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::OpenGL
Qt::OpenGLWidgets
)
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
index 8e44912d37..346469a6ea 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.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 <QTest>
@@ -65,6 +40,8 @@
#include <QtTest/private/qtesthelpers_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
using namespace QTestPrivate;
Q_DECLARE_METATYPE(ExpectedValueDescription)
@@ -102,6 +79,12 @@ static void sendMouseRelease(QWidget *widget, const QPoint &point, Qt::MouseButt
QApplication::sendEvent(widget, &event);
}
+static bool isPlatformEGLFS()
+{
+ static const bool isEGLFS = !QGuiApplication::platformName().compare(QLatin1String("eglfs"), Qt::CaseInsensitive);
+ return isEGLFS;
+}
+
class EventSpy : public QObject
{
Q_OBJECT
@@ -271,6 +254,8 @@ private slots:
#ifndef QT_NO_CURSOR
void QTBUG_7438_cursor();
#endif
+ void resizeContentsOnItemDrag_data();
+ void resizeContentsOnItemDrag();
public slots:
void dummySlot() {}
@@ -669,6 +654,8 @@ void tst_QGraphicsView::openGLViewport()
{
if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::OpenGL))
QSKIP("QOpenGL is not supported on this platform.");
+ if (isPlatformEGLFS())
+ QSKIP("", "Resizing does not work on EGLFS on top level window", Continue);
QGraphicsScene scene;
scene.setBackgroundBrush(Qt::white);
@@ -690,16 +677,16 @@ void tst_QGraphicsView::openGLViewport()
view.show();
QVERIFY(QTest::qWaitForWindowExposed(&view));
- QTRY_VERIFY(spy1.count() > 0);
- QTRY_VERIFY(spy2.count() >= spy1.count());
+ QTRY_VERIFY(spy1.size() > 0);
+ QTRY_VERIFY(spy2.size() >= spy1.size());
spy1.clear();
spy2.clear();
// Now test for resize (QTBUG-52419). This is special when the viewport is
// a QOpenGLWidget since the underlying FBO must also be maintained.
view.resize(300, 300);
- QTRY_VERIFY(spy1.count() > 0);
- QTRY_VERIFY(spy2.count() >= spy1.count());
+ QTRY_VERIFY(spy1.size() > 0);
+ QTRY_VERIFY(spy2.size() >= spy1.size());
// There is no sane way to check if the framebuffer contents got updated
// (grabFramebuffer is no good for the viewport case as that does not go
// through paintGL). So skip the actual verification.
@@ -743,8 +730,9 @@ void tst_QGraphicsView::dragMode_scrollHand()
int verticalScrollBarValue = view.verticalScrollBar()->value();
{
// Press
- QMouseEvent event(QEvent::MouseButtonPress,
- view.viewport()->rect().center(),
+ auto pos = view.viewport()->rect().center();
+ QMouseEvent event(QEvent::MouseButtonPress, pos,
+ view.viewport()->mapToGlobal(pos),
Qt::LeftButton, Qt::LeftButton, {});
event.setAccepted(true);
QApplication::sendEvent(view.viewport(), &event);
@@ -760,8 +748,9 @@ void tst_QGraphicsView::dragMode_scrollHand()
#endif
{
// Move
- QMouseEvent event(QEvent::MouseMove,
- view.viewport()->rect().center() + QPoint(10, 0),
+ auto pos = view.viewport()->rect().center() + QPoint(10, 0);
+ QMouseEvent event(QEvent::MouseMove, pos,
+ view.viewport()->mapToGlobal(pos),
Qt::LeftButton, Qt::LeftButton, {});
event.setAccepted(true);
QApplication::sendEvent(view.viewport(), &event);
@@ -772,8 +761,9 @@ void tst_QGraphicsView::dragMode_scrollHand()
QCOMPARE(view.verticalScrollBar()->value(), verticalScrollBarValue);
{
// Move
- QMouseEvent event(QEvent::MouseMove,
- view.viewport()->rect().center() + QPoint(10, 10),
+ auto pos = view.viewport()->rect().center() + QPoint(10, 10);
+ QMouseEvent event(QEvent::MouseMove, pos,
+ view.viewport()->mapToGlobal(pos),
Qt::LeftButton, Qt::LeftButton, {});
event.setAccepted(true);
QApplication::sendEvent(view.viewport(), &event);
@@ -786,8 +776,9 @@ void tst_QGraphicsView::dragMode_scrollHand()
{
// Release
- QMouseEvent event(QEvent::MouseButtonRelease,
- view.viewport()->rect().center() + QPoint(10, 10),
+ auto pos = view.viewport()->rect().center() + QPoint(10, 10);
+ QMouseEvent event(QEvent::MouseButtonRelease, pos,
+ view.viewport()->mapToGlobal(pos),
Qt::LeftButton, Qt::LeftButton, {});
event.setAccepted(true);
QApplication::sendEvent(view.viewport(), &event);
@@ -808,15 +799,17 @@ void tst_QGraphicsView::dragMode_scrollHand()
// Check that a click will still unselect the item.
{
// Press
- QMouseEvent event(QEvent::MouseButtonPress,
- view.viewport()->rect().center() + QPoint(10, 10),
+ auto pos = view.viewport()->rect().center() + QPoint(10, 10);
+ QMouseEvent event(QEvent::MouseButtonPress, pos,
+ view.viewport()->mapToGlobal(pos),
Qt::LeftButton, Qt::LeftButton, {});
QApplication::sendEvent(view.viewport(), &event);
}
{
// Release
- QMouseEvent event(QEvent::MouseButtonRelease,
- view.viewport()->rect().center() + QPoint(10, 10),
+ auto pos = view.viewport()->rect().center() + QPoint(10, 10);
+ QMouseEvent event(QEvent::MouseButtonRelease, pos,
+ view.viewport()->mapToGlobal(pos),
Qt::LeftButton, Qt::LeftButton, {});
QApplication::sendEvent(view.viewport(), &event);
}
@@ -865,8 +858,9 @@ void tst_QGraphicsView::dragMode_rubberBand()
int verticalScrollBarValue = view.verticalScrollBar()->value();
{
// Press
- QMouseEvent event(QEvent::MouseButtonPress,
- view.viewport()->rect().center(),
+ auto pos = view.viewport()->rect().center();
+ QMouseEvent event(QEvent::MouseButtonPress, pos,
+ view.viewport()->mapToGlobal(pos),
Qt::LeftButton, Qt::LeftButton, {});
event.setAccepted(true);
QApplication::sendEvent(view.viewport(), &event);
@@ -880,8 +874,9 @@ void tst_QGraphicsView::dragMode_rubberBand()
{
// Move
- QMouseEvent event(QEvent::MouseMove,
- view.viewport()->rect().center() + QPoint(100, 0),
+ auto pos = view.viewport()->rect().center() + QPoint(100, 0);
+ QMouseEvent event(QEvent::MouseMove, pos,
+ view.viewport()->mapToGlobal(pos),
Qt::LeftButton, Qt::LeftButton, {});
event.setAccepted(true);
QApplication::sendEvent(view.viewport(), &event);
@@ -895,8 +890,9 @@ void tst_QGraphicsView::dragMode_rubberBand()
{
// Move
- QMouseEvent event(QEvent::MouseMove,
- view.viewport()->rect().center() + QPoint(100, 100),
+ auto pos = view.viewport()->rect().center() + QPoint(100, 100);
+ QMouseEvent event(QEvent::MouseMove, pos,
+ view.viewport()->mapToGlobal(pos),
Qt::LeftButton, Qt::LeftButton, {});
event.setAccepted(true);
QApplication::sendEvent(view.viewport(), &event);
@@ -907,8 +903,9 @@ void tst_QGraphicsView::dragMode_rubberBand()
{
// Release
- QMouseEvent event(QEvent::MouseButtonRelease,
- view.viewport()->rect().center() + QPoint(100, 100),
+ auto pos = view.viewport()->rect().center() + QPoint(100, 100);
+ QMouseEvent event(QEvent::MouseButtonRelease, pos,
+ view.viewport()->mapToGlobal(pos),
Qt::LeftButton, Qt::LeftButton, {});
event.setAccepted(true);
QApplication::sendEvent(view.viewport(), &event);
@@ -1059,10 +1056,10 @@ void tst_QGraphicsView::rotated_rubberBand()
sendMousePress(view.viewport(), QPoint(midWidth - 2, 0), Qt::LeftButton);
sendMouseMove(view.viewport(), QPoint(midWidth + 2, view.viewport()->height()),
Qt::LeftButton, Qt::LeftButton);
- QCOMPARE(scene.selectedItems().count(), dim);
- foreach (const QGraphicsItem *item, scene.items()) {
+ QCOMPARE(scene.selectedItems().size(), dim);
+ const auto items = scene.items();
+ for (const QGraphicsItem *item : items)
QCOMPARE(item->isSelected(), item->data(0).toBool());
- }
sendMouseRelease(view.viewport(), QPoint(), Qt::LeftButton);
}
@@ -1640,6 +1637,9 @@ void tst_QGraphicsView::itemsInRect_cosmeticAdjust_data()
void tst_QGraphicsView::itemsInRect_cosmeticAdjust()
{
+ if (isPlatformEGLFS())
+ QSKIP("", "Resizing does not work on EGLFS on top level window", Continue);
+
QFETCH(QRect, updateRect);
QFETCH(int, numPaints);
QFETCH(bool, adjustForAntialiasing);
@@ -1933,6 +1933,9 @@ void tst_QGraphicsView::mapToSceneRect_data()
void tst_QGraphicsView::mapToSceneRect()
{
+ if (isPlatformEGLFS())
+ QSKIP("", "Resizing does not work on EGLFS on top level window", Continue);
+
QFETCH(QRect, viewRect);
QFETCH(QPolygonF, scenePoly);
QFETCH(qreal, rotation);
@@ -2150,7 +2153,7 @@ void tst_QGraphicsView::sendEvent()
QGraphicsView view(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
@@ -2218,7 +2221,7 @@ void tst_QGraphicsView::wheelEvent()
// Assign a view.
QGraphicsView view(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
@@ -2455,7 +2458,7 @@ void tst_QGraphicsView::viewportUpdateMode()
// Show the view, and initialize our test.
view.show();
- qApp->setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(!view.lastUpdateRegions.isEmpty());
@@ -2538,7 +2541,7 @@ void tst_QGraphicsView::viewportUpdateMode2()
const QMargins margins = view.contentsMargins();
view.resize(200 + margins.left() + margins.right(), 200 + margins.top() + margins.bottom());
toplevel.show();
- qApp->setActiveWindow(&toplevel);
+ QApplicationPrivate::setActiveWindow(&toplevel);
QVERIFY(QTest::qWaitForWindowExposed(&toplevel));
QVERIFY(QTest::qWaitForWindowActive(&toplevel));
QTRY_VERIFY(view.painted);
@@ -2750,7 +2753,8 @@ void tst_QGraphicsView::optimizationFlags_dontSavePainterState2()
rectB->setTransform(QTransform::fromTranslate(200, 200));
rectB->setPen(QPen(Qt::black, 0));
- foreach (QGraphicsItem *item, scene.items())
+ const auto items = scene.items();
+ for (QGraphicsItem *item : items)
item->setOpacity(0.6);
CustomView view(&scene);
@@ -2887,6 +2891,9 @@ public:
void tst_QGraphicsView::scrollBarRanges()
{
+ if (isPlatformEGLFS())
+ QSKIP("", "Resizing does not work on EGLFS on top level window", Continue);
+
QFETCH(QByteArray, style);
QFETCH(QSize, viewportSize);
QFETCH(QRectF, sceneRect);
@@ -3182,7 +3189,7 @@ void tst_QGraphicsView::task172231_untransformableItems()
view.scale(2, 1);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
@@ -3244,7 +3251,7 @@ void tst_QGraphicsView::task187791_setSceneCausesUpdate()
QGraphicsScene scene(0, 0, 200, 200);
QGraphicsView view(&scene);
view.show();
- qApp->setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
EventSpy updateSpy(view.viewport(), QEvent::Paint);
@@ -3269,7 +3276,8 @@ protected:
{
++mouseMoves;
QGraphicsView::mouseMoveEvent(event);
- foreach (QGraphicsItem *item, scene()->items()) {
+ const auto items = scene()->items();
+ for (QGraphicsItem *item : items) {
scene()->removeItem(item);
delete item;
}
@@ -3295,7 +3303,8 @@ void tst_QGraphicsView::task186827_deleteReplayedItem()
QCOMPARE(view.mouseMoves, 0);
{
- QMouseEvent event(QEvent::MouseMove, view.mapFromScene(25, 25), Qt::NoButton, {}, {});
+ auto pos = view.mapFromScene(25, 25);
+ QMouseEvent event(QEvent::MouseMove, pos, view.viewport()->mapToGlobal(pos), Qt::NoButton, {}, {});
QApplication::sendEvent(view.viewport(), &event);
}
QCOMPARE(view.mouseMoves, 1);
@@ -3303,7 +3312,8 @@ void tst_QGraphicsView::task186827_deleteReplayedItem()
QTRY_COMPARE(view.mouseMoves, 1);
QTest::qWait(25);
{
- QMouseEvent event(QEvent::MouseMove, view.mapFromScene(25, 25), Qt::NoButton, {}, {});
+ auto pos = view.mapFromScene(25, 25);
+ QMouseEvent event(QEvent::MouseMove, pos, view.viewport()->mapToGlobal(pos), Qt::NoButton, {}, {});
QApplication::sendEvent(view.viewport(), &event);
}
QCOMPARE(view.mouseMoves, 2);
@@ -3328,7 +3338,7 @@ void tst_QGraphicsView::task207546_focusCrash()
widget.layout()->addWidget(gr2);
widget.show();
widget.activateWindow();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
QVERIFY(QTest::qWaitForWindowActive(&widget));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&widget));
widget.focusNextPrevChild(true);
@@ -3349,8 +3359,10 @@ void tst_QGraphicsView::task210599_unsetDragWhileDragging()
// Enable and do a drag
{
view.setDragMode(QGraphicsView::ScrollHandDrag);
- QMouseEvent press(QEvent::MouseButtonPress, origPos, Qt::LeftButton, {}, {});
- QMouseEvent move(QEvent::MouseMove, step1Pos, Qt::LeftButton, {}, {});
+ QMouseEvent press(QEvent::MouseButtonPress, origPos,
+ view.viewport()->mapToGlobal(origPos), Qt::LeftButton, {}, {});
+ QMouseEvent move(QEvent::MouseMove, step1Pos,
+ view.viewport()->mapToGlobal(step1Pos), Qt::LeftButton, {}, {});
QApplication::sendEvent(view.viewport(), &press);
QApplication::sendEvent(view.viewport(), &move);
}
@@ -3358,7 +3370,8 @@ void tst_QGraphicsView::task210599_unsetDragWhileDragging()
// unset drag and release mouse, inverse order
{
view.setDragMode(QGraphicsView::NoDrag);
- QMouseEvent release(QEvent::MouseButtonRelease, step1Pos, Qt::LeftButton, {}, {});
+ QMouseEvent release(QEvent::MouseButtonRelease, step1Pos,
+ view.viewport()->mapToGlobal(step1Pos), Qt::LeftButton, {}, {});
QApplication::sendEvent(view.viewport(), &release);
}
@@ -3367,7 +3380,8 @@ void tst_QGraphicsView::task210599_unsetDragWhileDragging()
// reset drag, and move mouse without holding button down.
{
view.setDragMode(QGraphicsView::ScrollHandDrag);
- QMouseEvent move(QEvent::MouseMove, step2Pos, Qt::LeftButton, {}, {});
+ QMouseEvent move(QEvent::MouseMove, step2Pos,
+ view.viewport()->mapToGlobal(step2Pos), Qt::LeftButton, {}, {});
QApplication::sendEvent(view.viewport(), &move);
}
@@ -3416,7 +3430,7 @@ void tst_QGraphicsView::task239729_noViewUpdate()
QCOMPARE(spy.count(), 0);
view->show();
- qApp->setActiveWindow(view);
+ QApplicationPrivate::setActiveWindow(view);
QVERIFY(QTest::qWaitForWindowActive(view));
QTRY_VERIFY(spy.count() >= 1);
@@ -3548,6 +3562,9 @@ void tst_QGraphicsView::embeddedViewsWithFocus()
void focusOutEvent(QFocusEvent *) override { --focusCount; }
};
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
QGraphicsScene innerScene;
FocusWidget *innerWidget = new FocusWidget;
innerScene.addWidget(innerWidget);
@@ -3649,6 +3666,9 @@ void tst_QGraphicsView::moveItemWhileScrolling_data()
void tst_QGraphicsView::moveItemWhileScrolling()
{
+ if (isPlatformEGLFS())
+ QSKIP("", "Resizing does not work on EGLFS on top level window", Continue);
+
QFETCH(bool, adjustForAntialiasing);
QFETCH(bool, changedConnected);
@@ -3871,8 +3891,9 @@ void tst_QGraphicsView::mouseTracking2()
EventSpy spy(&scene, QEvent::GraphicsSceneMouseMove);
QCOMPARE(spy.count(), 0);
- QMouseEvent event(QEvent::MouseMove,view.viewport()->rect().center(), Qt::NoButton,
- Qt::MouseButtons(Qt::NoButton), {});
+ auto pos = view.viewport()->rect().center();
+ QMouseEvent event(QEvent::MouseMove, pos, view.viewport()->mapToGlobal(pos),
+ Qt::NoButton, Qt::MouseButtons(Qt::NoButton), {});
QApplication::sendEvent(view.viewport(), &event);
QCOMPARE(spy.count(), 1);
}
@@ -4040,7 +4061,7 @@ void tst_QGraphicsView::exposeRegion()
CustomView view;
view.setScene(&scene);
view.show();
- qApp->setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
@@ -4114,7 +4135,7 @@ void tst_QGraphicsView::update()
QVERIFY(QTest::qWaitForWindowExposed(&toplevel));
- QApplication::setActiveWindow(&toplevel);
+ QApplicationPrivate::setActiveWindow(&toplevel);
QApplication::processEvents();
QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&toplevel));
@@ -4171,6 +4192,9 @@ void tst_QGraphicsView::update2_data()
void tst_QGraphicsView::update2()
{
+ if (isPlatformEGLFS())
+ QSKIP("", "Resizing does not work on EGLFS on top level window", Continue);
+
QFETCH(qreal, penWidth);
QFETCH(bool, antialiasing);
QFETCH(bool, changedConnected);
@@ -4196,7 +4220,7 @@ void tst_QGraphicsView::update2()
view.setFrameStyle(0);
view.resize(200, 200);
view.show();
- qApp->setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(rect->numPaints > 0);
@@ -4266,7 +4290,7 @@ void tst_QGraphicsView::update_ancestorClipsChildrenToShape()
CustomView view(&scene);
view.show();
- qApp->setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(view.painted);
@@ -4320,7 +4344,7 @@ void tst_QGraphicsView::update_ancestorClipsChildrenToShape2()
CustomView view(&scene);
view.show();
- qApp->setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_VERIFY(view.painted);
@@ -4381,7 +4405,7 @@ void tst_QGraphicsView::inputMethodSensitivity()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
@@ -4479,7 +4503,7 @@ void tst_QGraphicsView::inputContextReset()
QVERIFY(view.testAttribute(Qt::WA_InputMethodEnabled));
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view));
@@ -4627,7 +4651,7 @@ void tst_QGraphicsView::task255529_transformationAnchorMouseAndViewportMargins()
VpGraphicsView view(&scene);
view.setWindowFlags(Qt::X11BypassWindowManagerHint);
view.show();
- qApp->setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
const bool isActiveWindow = QTest::qWaitForWindowActive(&view);
if (!isActiveWindow)
@@ -4770,6 +4794,9 @@ void tst_QGraphicsView::QTBUG_4151_clipAndIgnore()
void tst_QGraphicsView::QTBUG_5859_exposedRect()
{
+ if (isPlatformEGLFS())
+ QSKIP("", "Resizing does not work on EGLFS on top level window", Continue);
+
class CustomScene : public QGraphicsScene
{
public:
@@ -4798,7 +4825,7 @@ void tst_QGraphicsView::QTBUG_5859_exposedRect()
QGraphicsView view(&scene);
view.scale(4.15, 4.15);
view.showNormal();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QVERIFY(QTest::qWaitForWindowActive(&view));
@@ -4870,7 +4897,7 @@ void tst_QGraphicsView::hoverLeave()
scene.addItem(item);
view.showNormal();
- qApp->setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
QWindow *viewWindow = view.window()->windowHandle();
@@ -4949,7 +4976,7 @@ void tst_QGraphicsView::QTBUG_70255_scrollTo()
view.centerOn(0, 0);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
if (!QTest::qWaitForWindowExposed(&view) || !QTest::qWaitForWindowActive(&view))
QSKIP("Failed to show and activate window");
@@ -4963,5 +4990,111 @@ void tst_QGraphicsView::QTBUG_70255_scrollTo()
QCOMPARE(point, QPoint(0, -500));
}
+void tst_QGraphicsView::resizeContentsOnItemDrag_data()
+{
+ QTest::addColumn<Qt::Alignment>("alignment");
+ QTest::addColumn<Qt::Orientation>("orientation");
+ QTest::addRow("Center right") << Qt::Alignment(Qt::AlignCenter) << Qt::Horizontal;
+ QTest::addRow("Center down") << Qt::Alignment(Qt::AlignCenter) << Qt::Vertical;
+ QTest::addRow("BottomLeft right") << (Qt::AlignBottom | Qt::AlignLeft) << Qt::Horizontal;
+ QTest::addRow("TopRight down") << (Qt::AlignTop | Qt::AlignRight) << Qt::Vertical;
+}
+
+void tst_QGraphicsView::resizeContentsOnItemDrag()
+{
+ QFETCH(Qt::Alignment, alignment);
+ QFETCH(Qt::Orientation, orientation);
+
+ QGraphicsView view;
+ QGraphicsScene scene;
+ view.setFixedSize(200, 200);
+ view.setScene(&scene);
+
+ view.setAlignment(alignment);
+
+ class MovableItem : public QGraphicsEllipseItem
+ {
+ public:
+ using QGraphicsEllipseItem::QGraphicsEllipseItem;
+
+ QList<QPointF> scenePositions;
+
+ protected:
+ void mousePressEvent(QGraphicsSceneMouseEvent *event) override
+ {
+ scenePositions << event->scenePos();
+ }
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override
+ {
+ scenePositions << event->scenePos();
+ QGraphicsEllipseItem::mouseMoveEvent(event);
+ }
+ };
+
+ MovableItem item(-10, -10, 20, 20);
+ item.setFlags(QGraphicsItem::ItemIsMovable);
+ scene.addItem(&item);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ // Position the item near the relevant edge of the view, with a few pixels
+ // to go until the scrollbars should be showing.
+ if (orientation == Qt::Horizontal)
+ item.setPos(view.width() - item.rect().width() - 5, 0);
+ else
+ item.setPos(0, view.height() - item.rect().height() - 5);
+ QApplication::processEvents(); // queued connection used to trigger recalculateContentSize
+ QPoint mousePos = view.mapFromScene(item.pos());
+
+ QTest::mousePress(view.viewport(), Qt::LeftButton, {}, mousePos);
+ QCOMPARE(item.scenePositions.count(), 1);
+ QCOMPARE(item.scenePositions.takeLast(), view.mapToScene(mousePos));
+
+ auto lastItemPos = item.pos();
+ auto lastScenePos = view.mapToScene(mousePos);
+ int overshoot = 0;
+ const QScrollBar *scrollBar = orientation == Qt::Horizontal
+ ? view.horizontalScrollBar()
+ : view.verticalScrollBar();
+ // Drag the item until the scroll bars become visible, and then for a few more pixels.
+ // Verify that the item doesn't jump when the scrollbar shows.
+ while (overshoot < 10) {
+ if (orientation == Qt::Horizontal)
+ mousePos.rx() += 1;
+ else
+ mousePos.ry() += 1;
+ QTest::mouseMove(view.viewport(), mousePos);
+ QApplication::processEvents(); // queued connection used to trigger recalculateContentSize
+ const bool scrollbarAvailable = scrollBar->maximum() > scrollBar->minimum();
+ bool allowMoreEvents = false;
+ if (scrollbarAvailable) {
+ if (!overshoot) {
+ QTRY_VERIFY(scrollBar->isVisible());
+ // scrollbar becoming visible triggers event replay, so we get more than one
+ allowMoreEvents = true;
+ }
+ ++overshoot;
+ }
+ if (allowMoreEvents)
+ QCOMPARE_GE(item.scenePositions.count(), 1);
+ else
+ QCOMPARE(item.scenePositions.count(), 1);
+ const auto scenePos = item.scenePositions.takeLast();
+ item.scenePositions.clear();
+
+ const auto same = orientation == Qt::Horizontal ? &QPointF::y : &QPointF::x;
+ const auto moved = orientation == Qt::Horizontal ? &QPointF::x : &QPointF::y;
+ QCOMPARE((item.pos().*same)(), (lastItemPos.*same)());
+ QCOMPARE_GE((item.pos().*moved)() - (lastItemPos.*moved)(), 1);
+ QCOMPARE_LE((item.pos().*moved)() - (lastItemPos.*moved)(), 2);
+ lastItemPos = item.pos();
+
+ QCOMPARE((scenePos.*same)(), (lastScenePos.*same)());
+ QCOMPARE_GE((scenePos.*moved)() - (lastScenePos.*moved)(), 1);
+ QCOMPARE_LE((scenePos.*moved)() - (lastScenePos.*moved)(), 2);
+ lastScenePos = scenePos;
+ }
+}
+
QTEST_MAIN(tst_QGraphicsView)
#include "tst_qgraphicsview.moc"
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.h b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.h
index 42e9e6e2a3..2fb5ed638c 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.h
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.h
@@ -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
#ifndef TST_QGRAPHICSVIEW_H
#define TST_QGRAPHICSVIEW_H
diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview_2.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview_2.cpp
index 72b5acc654..1380e007e7 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview_2.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview_2.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 <QTest>
#include <QtCore/QSize>
#include <QtCore/QRectF>
diff --git a/tests/auto/widgets/graphicsview/qgraphicswidget/BLACKLIST b/tests/auto/widgets/graphicsview/qgraphicswidget/BLACKLIST
index c49c0ea089..cad381b7b7 100644
--- a/tests/auto/widgets/graphicsview/qgraphicswidget/BLACKLIST
+++ b/tests/auto/widgets/graphicsview/qgraphicswidget/BLACKLIST
@@ -2,8 +2,7 @@
macos ci
android
b2qt
+# QTBUG-100930
[updateFocusChainWhenChildDie]
b2qt
-[initialShow]
-macos ci
-opensuse-leap
+qnx
diff --git a/tests/auto/widgets/graphicsview/qgraphicswidget/CMakeLists.txt b/tests/auto/widgets/graphicsview/qgraphicswidget/CMakeLists.txt
index 8cf7f92cc3..42e30e4f5d 100644
--- a/tests/auto/widgets/graphicsview/qgraphicswidget/CMakeLists.txt
+++ b/tests/auto/widgets/graphicsview/qgraphicswidget/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgraphicswidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgraphicswidget Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgraphicswidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgraphicswidget
SOURCES
tst_qgraphicswidget.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp
index 45aa0f567b..e298747284 100644
--- a/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.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 <QTest>
@@ -43,6 +18,8 @@
#include <qscreen.h>
#include <qsignalspy.h>
+#include <QtWidgets/private/qapplication_p.h>
+
typedef QList<QGraphicsItem *> QGraphicsItemList;
class EventSpy : public QObject
@@ -169,8 +146,16 @@ private slots:
void QT_BUG_6544_tabFocusFirstUnsetWhenRemovingItems();
void QT_BUG_12056_tabFocusFirstUnsetWhenRemovingItems();
void QTBUG_45867_send_itemChildAddedChange_to_parent();
+
+private:
+ static bool hasWindowActivation();
};
+bool tst_QGraphicsWidget::hasWindowActivation()
+{
+ return (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation));
+}
+
// Subclass that exposes the protected functions.
class SubQGraphicsWidget : public QGraphicsWidget {
public:
@@ -965,9 +950,9 @@ void tst_QGraphicsWidget::geometry()
widget.setPos(pos);
widget.resize(size);
if (!size.isNull() && !pos.isNull())
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
if (!size.isNull() && pos.isNull())
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(widget.geometry(), QRectF(pos, size));
}
@@ -978,10 +963,10 @@ void tst_QGraphicsWidget::geometryChanged()
QCOMPARE(w.geometry(), QRectF(0, 0, 200, 200));
QSignalSpy spy(&w, SIGNAL(geometryChanged()));
w.setGeometry(0, 0, 100, 100);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(w.geometry(), QRectF(0, 0, 100, 100));
w.setPos(10, 10);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QCOMPARE(w.geometry(), QRectF(10, 10, 100, 100));
}
@@ -993,10 +978,10 @@ void tst_QGraphicsWidget::width()
QSignalSpy spy(&w, SIGNAL(widthChanged()));
w.setProperty("width", qreal(50));
QCOMPARE(w.property("width").toReal(), qreal(50));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
//calling old school setGeometry should work too
w.setGeometry(0, 0, 200, 200);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_QGraphicsWidget::height()
@@ -1006,10 +991,10 @@ void tst_QGraphicsWidget::height()
QSignalSpy spy(&w, SIGNAL(heightChanged()));
w.setProperty("height", qreal(50));
QCOMPARE(w.property("height").toReal(), qreal(50));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
//calling old school setGeometry should work too
w.setGeometry(0, 0, 200, 200);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_QGraphicsWidget::getContentsMargins_data()
@@ -1074,7 +1059,10 @@ void tst_QGraphicsWidget::initStyleOption()
QGraphicsView view(&scene);
view.resize(300, 300);
view.show();
- QVERIFY(QTest::qWaitForWindowActive(&view));
+ if (hasWindowActivation())
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+ else
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
view.setAlignment(Qt::AlignTop | Qt::AlignLeft);
SubQGraphicsWidget *widget = new SubQGraphicsWidget;
@@ -1088,10 +1076,12 @@ void tst_QGraphicsWidget::initStyleOption()
QFETCH(bool, enabled);
widget->setEnabled(enabled);
QFETCH(bool, focus);
- if (focus) {
- widget->setFlag(QGraphicsItem::ItemIsFocusable, true);
- widget->setFocus();
- QVERIFY(widget->hasFocus());
+ if (hasWindowActivation()) {
+ if (focus) {
+ widget->setFlag(QGraphicsItem::ItemIsFocusable, true);
+ widget->setFocus();
+ QVERIFY(widget->hasFocus());
+ }
}
QFETCH(bool, underMouse);
if (underMouse) {
@@ -1110,8 +1100,10 @@ void tst_QGraphicsWidget::initStyleOption()
bool isEnabled = option.state & QStyle::State_Enabled;
QCOMPARE(isEnabled, enabled);
- bool hasFocus = option.state & QStyle::State_HasFocus;
- QCOMPARE(hasFocus, focus);
+ if (hasWindowActivation()) {
+ bool hasFocus = option.state & QStyle::State_HasFocus;
+ QCOMPARE(hasFocus, focus);
+ }
bool isUnderMouse = option.state & QStyle::State_MouseOver;
QCOMPARE(isUnderMouse, underMouse);
// if (layoutDirection != Qt::LeftToRight)
@@ -1148,12 +1140,12 @@ void tst_QGraphicsWidget::layout()
widget.setLayout(layout);
QTRY_COMPARE(widget.layout(), static_cast<QGraphicsLayout*>(layout));
- for (int i = 0; i < children.count(); ++i) {
+ for (int i = 0; i < children.size(); ++i) {
SubQGraphicsWidget *item = children[i];
QCOMPARE(item->parentWidget(), (QGraphicsWidget *)&widget);
QVERIFY(item->geometry() != QRectF(0, 0, -1, -1));
}
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
// don't crash
widget.setLayout(0);
}
@@ -1186,7 +1178,7 @@ void tst_QGraphicsWidget::layoutDirection()
QCOMPARE(widget.testAttribute(Qt::WA_SetLayoutDirection), true);
view->show();
QVERIFY(QTest::qWaitForWindowExposed(view.data()));
- for (int i = 0; i < children.count(); ++i) {
+ for (int i = 0; i < children.size(); ++i) {
QTRY_COMPARE(children[i]->layoutDirection(), layoutDirection);
QTRY_COMPARE(children[i]->testAttribute(Qt::WA_SetLayoutDirection), false);
view->update();
@@ -1396,7 +1388,7 @@ void tst_QGraphicsWidget::setTabOrder()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QGraphicsWidget *lastItem = nullptr;
@@ -1424,7 +1416,7 @@ void tst_QGraphicsWidget::setTabOrder()
QVERIFY(view.viewport()->hasFocus());
int currentItem = 0;
- while (currentItem < children.count() - 1) {
+ while (currentItem < children.size() - 1) {
QTest::keyPress(view.viewport(), Qt::Key_Tab);
++currentItem;
QVERIFY(children[currentItem % children.size()]->hasFocus());
@@ -1468,7 +1460,7 @@ void tst_QGraphicsWidget::setTabOrderAndReparent()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(QApplication::activeWindow(), (QWidget*)&view);
@@ -1573,7 +1565,7 @@ void tst_QGraphicsWidget::unsetLayoutDirection()
widget.setLayoutDirection(layoutDirection);
widget.unsetLayoutDirection();
QCOMPARE(widget.testAttribute(Qt::WA_SetLayoutDirection), false);
- for (int i = 0; i < children.count(); ++i) {
+ for (int i = 0; i < children.size(); ++i) {
QCOMPARE(children[i]->layoutDirection(), Qt::LeftToRight);
}
}
@@ -1598,7 +1590,7 @@ void tst_QGraphicsWidget::verifyFocusChain()
QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
{
@@ -1690,7 +1682,7 @@ void tst_QGraphicsWidget::verifyFocusChain()
w1_2->setFocusPolicy(Qt::StrongFocus);
scene.addItem(w1_2);
window->show();
- QApplication::setActiveWindow(window.data());
+ QApplicationPrivate::setActiveWindow(window.data());
QVERIFY(QTest::qWaitForWindowActive(window.data()));
lineEdit->setFocus();
@@ -1738,13 +1730,16 @@ void tst_QGraphicsWidget::verifyFocusChain()
void tst_QGraphicsWidget::updateFocusChainWhenChildDie()
{
+ if (!hasWindowActivation())
+ QSKIP("Window activation is not supported");
+
const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
QGraphicsScene scene;
QGraphicsView view(&scene);
view.resize(200, 150);
view.move(availableGeometry.topLeft() + QPoint(50, 50));
view.show();
- QApplication::setActiveWindow(&view);
+ view.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&view));
// delete item in focus chain with no focus and verify chain
@@ -1773,13 +1768,8 @@ void tst_QGraphicsWidget::updateFocusChainWhenChildDie()
w->setParentItem(parent);
//We don't crash perfect
QVERIFY(w);
- const QPoint center(view.viewport()->width() / 2, view.viewport()->height() / 2);
- QTest::mouseMove(view.viewport(), center);
- QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, center);
-#ifdef Q_OS_MAC
- QEXPECT_FAIL("", "QTBUG-23699", Continue);
-#endif
- QTRY_COMPARE(qApp->activeWindow(), static_cast<QWidget *>(&view));
+ view.activateWindow();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
QTRY_COMPARE(scene.focusItem(), static_cast<QGraphicsItem *>(w));
}
@@ -1865,7 +1855,7 @@ enum WhichSize {
MinimumSizeHint,
PreferredSizeHint,
MaximumSizeHint,
- Size,
+ WidgetSize,
None,
};
@@ -1880,48 +1870,48 @@ void tst_QGraphicsWidget::setSizes_data()
QTest::addColumn<QList<Inst>>("compareInstructions");
QTest::newRow("minSize1") << (QList<Inst>()
- << Inst(Size, QSize(25, 25)) << Inst(MinimumSize, QSize(10, 10)))
- << (QList<Inst>() << Inst(Size, QSize(25, 25)));
- QTest::newRow("minSize2") << (QList<Inst>() << Inst(Size, QSizeF(20, 20))
+ << Inst(WidgetSize, QSize(25, 25)) << Inst(MinimumSize, QSize(10, 10)))
+ << (QList<Inst>() << Inst(WidgetSize, QSize(25, 25)));
+ QTest::newRow("minSize2") << (QList<Inst>() << Inst(WidgetSize, QSizeF(20, 20))
<< Inst(MinimumSize, QSizeF(25, 25)))
- << (QList<Inst>() << Inst(Size, QSizeF(25, 25)));
+ << (QList<Inst>() << Inst(WidgetSize, QSizeF(25, 25)));
QTest::newRow("minWidth1") << (QList<Inst>()
- << Inst(Size, QSizeF(20, 20)) << Inst(MinimumWidth, 5.0))
- << (QList<Inst>() << Inst(Size, QSizeF(20, 20)));
+ << Inst(WidgetSize, QSizeF(20, 20)) << Inst(MinimumWidth, 5.0))
+ << (QList<Inst>() << Inst(WidgetSize, QSizeF(20, 20)));
QTest::newRow("minWidth2") << (QList<Inst>()
- << Inst(Size, QSizeF(20, 20)) << Inst(MinimumWidth, 25.0))
- << (QList<Inst>() << Inst(Size, QSizeF(25, 20)));
+ << Inst(WidgetSize, QSizeF(20, 20)) << Inst(MinimumWidth, 25.0))
+ << (QList<Inst>() << Inst(WidgetSize, QSizeF(25, 20)));
QTest::newRow("minHeight1") << (QList<Inst>()
- << Inst(Size, QSizeF(20, 20)) << Inst(MinimumHeight, 5.0))
- << (QList<Inst>() << Inst(Size, QSizeF(20, 20)));
+ << Inst(WidgetSize, QSizeF(20, 20)) << Inst(MinimumHeight, 5.0))
+ << (QList<Inst>() << Inst(WidgetSize, QSizeF(20, 20)));
QTest::newRow("minHeight2") << (QList<Inst>()
- << Inst(Size, QSizeF(20, 20)) << Inst(MinimumHeight, 25.0))
- << (QList<Inst>() << Inst(Size, QSizeF(20, 25)));
- QTest::newRow("maxSize1") << (QList<Inst>() << Inst(Size, QSizeF(40, 40))
+ << Inst(WidgetSize, QSizeF(20, 20)) << Inst(MinimumHeight, 25.0))
+ << (QList<Inst>() << Inst(WidgetSize, QSizeF(20, 25)));
+ QTest::newRow("maxSize1") << (QList<Inst>() << Inst(WidgetSize, QSizeF(40, 40))
<< Inst(MaximumSize, QSizeF(30, 30)))
- << (QList<Inst>() << Inst(Size, QSizeF(30, 30)));
- QTest::newRow("maxSize2") << (QList<Inst>() << Inst(Size, QSizeF(40, 40))
+ << (QList<Inst>() << Inst(WidgetSize, QSizeF(30, 30)));
+ QTest::newRow("maxSize2") << (QList<Inst>() << Inst(WidgetSize, QSizeF(40, 40))
<< Inst(MaximumSize, QSizeF(30, -1)))
- << (QList<Inst>() << Inst(Size, QSizeF(30, 40)));
- QTest::newRow("maxSize3") << (QList<Inst>() << Inst(Size, QSizeF(40, 40))
+ << (QList<Inst>() << Inst(WidgetSize, QSizeF(30, 40)));
+ QTest::newRow("maxSize3") << (QList<Inst>() << Inst(WidgetSize, QSizeF(40, 40))
<< Inst(MaximumSize, QSizeF(-1, 30)))
- << (QList<Inst>() << Inst(Size, QSizeF(40, 30)));
+ << (QList<Inst>() << Inst(WidgetSize, QSizeF(40, 30)));
QTest::newRow("maxWidth1") << (QList<Inst>()
- << Inst(Size, QSizeF(40, 40)) << Inst(MaximumWidth, 30))
- << (QList<Inst>() << Inst(Size, QSizeF(30, 40)));
+ << Inst(WidgetSize, QSizeF(40, 40)) << Inst(MaximumWidth, 30))
+ << (QList<Inst>() << Inst(WidgetSize, QSizeF(30, 40)));
QTest::newRow("maxHeight") << (QList<Inst>()
- << Inst(Size, QSizeF(40, 40)) << Inst(MaximumHeight, 20))
- << (QList<Inst>() << Inst(Size, QSizeF(40, 20)));
- QTest::newRow("unsetMinSize") << (QList<Inst>() << Inst(Size, QSizeF(40, 40))
+ << Inst(WidgetSize, QSizeF(40, 40)) << Inst(MaximumHeight, 20))
+ << (QList<Inst>() << Inst(WidgetSize, QSizeF(40, 20)));
+ QTest::newRow("unsetMinSize") << (QList<Inst>() << Inst(WidgetSize, QSizeF(40, 40))
<< Inst(MinimumSize, QSizeF(-1, -1)))
<< (QList<Inst>() << Inst(MinimumSize, QSizeF(5, 5)));
- QTest::newRow("unsetMaxSize") << (QList<Inst>() << Inst(Size, QSizeF(40, 40))
+ QTest::newRow("unsetMaxSize") << (QList<Inst>() << Inst(WidgetSize, QSizeF(40, 40))
<< Inst(MaximumSize, QSizeF(-1, -1)))
<< (QList<Inst>() << Inst(MaximumSize, QSizeF(500, 500)));
QTest::newRow("unsetMinSize, expand size to minimumSizeHint")
- << (QList<Inst>() << Inst(MinimumSize, QSize(0, 0)) << Inst(Size, QSize(1, 1))
+ << (QList<Inst>() << Inst(MinimumSize, QSize(0, 0)) << Inst(WidgetSize, QSize(1, 1))
<< Inst(MinimumSize, QSize(-1.0, -1.0)))
- << (QList<Inst>() << Inst(Size, QSize(5, 5)) << Inst(MinimumSize, QSize(5, 5)));
+ << (QList<Inst>() << Inst(WidgetSize, QSize(5, 5)) << Inst(MinimumSize, QSize(5, 5)));
}
void tst_QGraphicsWidget::setSizes()
@@ -1937,7 +1927,7 @@ void tst_QGraphicsWidget::setSizes()
QSizeF max = QSizeF(50, 50);
int i;
- for (i = 0; i < inputInstructions.count(); ++i) {
+ for (i = 0; i < inputInstructions.size(); ++i) {
Inst input = inputInstructions.at(i);
// defaults
@@ -1951,7 +1941,7 @@ void tst_QGraphicsWidget::setSizes()
case MaximumSize:
max = input.second.toSizeF();
break;
- case Size:
+ case WidgetSize :
widget->resize(input.second.toSizeF());
break;
case MinimumWidth:
@@ -1991,7 +1981,7 @@ void tst_QGraphicsWidget::setSizes()
widget->setPreferredSize(pref);
widget->setMaximumSize(max);
- for (i = 0; i < compareInstructions.count(); ++i) {
+ for (i = 0; i < compareInstructions.size(); ++i) {
Inst input = compareInstructions.at(i);
switch (input.first) {
case MinimumSize:
@@ -2003,7 +1993,7 @@ void tst_QGraphicsWidget::setSizes()
case MaximumSize:
QTRY_COMPARE(widget->maximumSize(), input.second.toSizeF());
break;
- case Size:
+ case WidgetSize:
QTRY_COMPARE(widget->size(), input.second.toSizeF());
break;
case MinimumWidth:
@@ -2704,7 +2694,7 @@ void tst_QGraphicsWidget::task250119_shortcutContext()
QGraphicsView view;
view.setScene(&scene);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QTRY_COMPARE(QApplication::activeWindow(), (QWidget*)&view);
@@ -2741,11 +2731,11 @@ void tst_QGraphicsWidget::task250119_shortcutContext()
w_signal.setFocus();
QTest::keyPress(&view, Qt::Key_B);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
w_signal.clearFocus();
QTest::keyPress(&view, Qt::Key_B);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
scene.removeItem(&w_signal);
}
@@ -2962,11 +2952,9 @@ void tst_QGraphicsWidget::respectHFW()
view->grabMouse();
// move both mouse cursor and set correct event in order to emulate resize
QTest::mouseMove(view->viewport(), view->mapFromScene(60, 30), 200);
- QMouseEvent e = QMouseEvent(QEvent::MouseMove,
- view->mapFromScene(60, 20),
- Qt::NoButton,
- Qt::LeftButton,
- Qt::NoModifier);
+ auto pos = view->mapFromScene(60, 20);
+ QMouseEvent e(QEvent::MouseMove, pos, view->mapToGlobal(pos),
+ Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
QApplication::sendEvent(view->viewport(), &e);
view->releaseMouse();
}
@@ -3125,8 +3113,7 @@ void tst_QGraphicsWidget::initialShow()
dummyView->setWindowFlags(Qt::X11BypassWindowManagerHint);
EventSpy paintSpy(dummyView->viewport(), QEvent::Paint);
dummyView->show();
- qApp->setActiveWindow(dummyView.data());
- QVERIFY(QTest::qWaitForWindowActive(dummyView.data()));
+ QVERIFY(QTest::qWaitForWindowExposed(dummyView.data()));
const int expectedRepaintCount = paintSpy.count();
dummyView.reset();
@@ -3139,8 +3126,7 @@ void tst_QGraphicsWidget::initialShow()
QGraphicsView view(&scene);
view.setWindowFlags(view.windowFlags()|Qt::X11BypassWindowManagerHint);
view.show();
- qApp->setActiveWindow(&view);
- QVERIFY(QTest::qWaitForWindowActive(&view));
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
QTRY_COMPARE(widget->repaints, expectedRepaintCount);
}
diff --git a/tests/auto/widgets/itemviews/CMakeLists.txt b/tests/auto/widgets/itemviews/CMakeLists.txt
index ec6e00ec7f..60e05fadb4 100644
--- a/tests/auto/widgets/itemviews/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from itemviews.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qabstractitemview)
add_subdirectory(qdatawidgetmapper)
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/BLACKLIST b/tests/auto/widgets/itemviews/qabstractitemview/BLACKLIST
index 249c91c3c4..778a25b2e4 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/BLACKLIST
+++ b/tests/auto/widgets/itemviews/qabstractitemview/BLACKLIST
@@ -1,5 +1,4 @@
-[task200665_itemEntered]
-macos # Can't move cursor (QTBUG-76312)
-# QTBUG-87400
-[task200665_itemEntered]
-android
+[focusNextOnHide]
+wayland
+[selectionAutoScrolling]
+wayland
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/CMakeLists.txt b/tests/auto/widgets/itemviews/qabstractitemview/CMakeLists.txt
index e779b1a165..ca39501a95 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qabstractitemview/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qabstractitemview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractitemview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractitemview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractitemview
SOURCES
tst_qabstractitemview.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::TestPrivate
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index 5c52439859..b221047798 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.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 <private/qguiapplication_p.h>
@@ -55,6 +30,7 @@
#include <QVBoxLayout>
#include <QtTest/private/qtesthelpers_p.h>
#include <private/qabstractitemview_p.h>
+#include <QtWidgets/private/qapplication_p.h>
Q_DECLARE_METATYPE(Qt::ItemFlags);
@@ -133,6 +109,7 @@ private slots:
void QTBUG6407_extendedSelection();
void QTBUG6753_selectOnSelection();
void testDelegateDestroyEditor();
+ void testDelegateDestroyEditorChild();
void testClickedSignal();
void testChangeEditorState();
void deselectInSingleSelection();
@@ -165,11 +142,16 @@ private slots:
void selectionCommand();
void mouseSelection_data();
void mouseSelection();
+ void keepSingleSelectionOnEmptyAreaClick();
void scrollerSmoothScroll();
void inputMethodOpensEditor_data();
void inputMethodOpensEditor();
void selectionAutoScrolling_data();
void selectionAutoScrolling();
+ void testSpinBoxAsEditor_data();
+ void testSpinBoxAsEditor();
+ void removeIndexWhileEditing();
+ void focusNextOnHide();
private:
static QAbstractItemView *viewFromString(const QByteArray &viewType, QWidget *parent = nullptr)
@@ -196,17 +178,19 @@ public:
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const override
{
openedEditor = new QWidget(parent);
+ virtualCtorCallCount++;
return openedEditor;
}
void destroyEditor(QWidget *editor, const QModelIndex &) const override
{
- calledVirtualDtor = true;
+ virtualDtorCallCount++;
editor->deleteLater();
}
void changeSize() { size = QSize(50, 50); emit sizeHintChanged(QModelIndex()); }
mutable QWidget *openedEditor = nullptr;
QSize size;
- mutable bool calledVirtualDtor = false;
+ mutable int virtualCtorCallCount = 0;
+ mutable int virtualDtorCallCount = 0;
};
class DialogItemDelegate : public QStyledItemDelegate
@@ -449,12 +433,12 @@ void tst_QAbstractItemView::basic_tests(QAbstractItemView *view)
QVERIFY(spy.isValid());
view->setIconSize(QSize(32, 32));
QCOMPARE(view->iconSize(), QSize(32, 32));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).value<QSize>(), QSize(32, 32));
// Should this happen?
view->setIconSize(QSize(-1, -1));
QCOMPARE(view->iconSize(), QSize(-1, -1));
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QCOMPARE(view->currentIndex(), QModelIndex());
QCOMPARE(view->rootIndex(), QModelIndex());
@@ -688,9 +672,9 @@ void tst_QAbstractItemView::selectAll()
GeometriesTestView view;
view.setModel(&model);
- QCOMPARE(view.selectedIndexes().count(), 0);
+ QCOMPARE(view.selectedIndexes().size(), 0);
view.selectAll();
- QCOMPARE(view.selectedIndexes().count(), 4 * 4);
+ QCOMPARE(view.selectedIndexes().size(), 4 * 4);
}
void tst_QAbstractItemView::ctrlA()
@@ -699,9 +683,9 @@ void tst_QAbstractItemView::ctrlA()
GeometriesTestView view;
view.setModel(&model);
- QCOMPARE(view.selectedIndexes().count(), 0);
+ QCOMPARE(view.selectedIndexes().size(), 0);
QTest::keyClick(&view, Qt::Key_A, Qt::ControlModifier);
- QCOMPARE(view.selectedIndexes().count(), 4 * 4);
+ QCOMPARE(view.selectedIndexes().size(), 4 * 4);
}
void tst_QAbstractItemView::persistentEditorFocus()
@@ -718,7 +702,7 @@ void tst_QAbstractItemView::persistentEditorFocus()
//these are spinboxes because we put numbers inside
const QList<QSpinBox*> list = view.viewport()->findChildren<QSpinBox*>();
- QCOMPARE(list.count(), 2); //these should be the 2 editors
+ QCOMPARE(list.size(), 2); //these should be the 2 editors
view.setCurrentIndex(model.index(0, 0));
QCOMPARE(view.currentIndex(), model.index(0, 0));
@@ -730,8 +714,8 @@ void tst_QAbstractItemView::persistentEditorFocus()
const QPoint p(5, 5);
for (QSpinBox *sb : list) {
QTRY_VERIFY(sb->isVisible());
- QMouseEvent mouseEvent(QEvent::MouseButtonPress, p, Qt::LeftButton,
- Qt::LeftButton, Qt::NoModifier);
+ QMouseEvent mouseEvent(QEvent::MouseButtonPress, p, sb->mapToGlobal(p),
+ Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QCoreApplication::sendEvent(sb, &mouseEvent);
if (!QApplication::focusWidget())
QSKIP("Some window managers don't handle focus that well");
@@ -778,22 +762,6 @@ void tst_QAbstractItemView::pressClosesReleaseDoesntOpenEditor()
QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::NoModifier, inChildOutsideEditor); // should not reopen editor
QTest::qWait(QApplication::doubleClickInterval() * 2);
QCOMPARE(view.state(), QAbstractItemView::NoState);
-
- // with multiple items selected, clicking from the currently edited item into another
- // selected item closes the current and reopens a new editor
- view.setSelectionMode(QAbstractItemView::ExtendedSelection);
- const QRect child2Rect = view.visualRect(model.indexFromItem(parent->child(1)));
- QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ControlModifier, child2Rect.center()); // select
- QVERIFY(view.selectionModel()->selectedIndexes().contains(model.indexFromItem(parent->child(0))));
- QVERIFY(view.selectionModel()->selectedIndexes().contains(model.indexFromItem(parent->child(1))));
- QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, child2Rect.center()); // edit
- QTRY_COMPARE(view.state(), QAbstractItemView::EditingState);
- QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::NoModifier, inChildOutsideEditor); // editor closes
- QCOMPARE(view.state(), QAbstractItemView::NoState);
- QTest::qWait(10); // process some events, let the internal timer time out
- QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::NoModifier, inChildOutsideEditor); // should open editor
- QTest::qWait(QApplication::doubleClickInterval() * 2);
- QCOMPARE(view.state(), QAbstractItemView::EditingState);
}
@@ -1083,7 +1051,7 @@ void tst_QAbstractItemView::setItemDelegate()
centerOnScreen(&v);
moveCursorAway(&v);
v.show();
- QApplication::setActiveWindow(&v);
+ QApplicationPrivate::setActiveWindow(&v);
QVERIFY(QTest::qWaitForWindowActive(&v));
QModelIndex index = model.index(cellToEdit.y(), cellToEdit.x());
@@ -1292,7 +1260,7 @@ void tst_QAbstractItemView::task221955_selectedEditor()
tree.show();
tree.setFocus();
tree.setCurrentIndex(tree.model()->index(1,0));
- QApplication::setActiveWindow(&tree);
+ QApplicationPrivate::setActiveWindow(&tree);
QVERIFY(QTest::qWaitForWindowActive(&tree));
QVERIFY(! tree.selectionModel()->selectedIndexes().contains(tree.model()->index(3,0)));
@@ -1358,7 +1326,13 @@ void tst_QAbstractItemView::task200665_itemEntered()
{
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
QSKIP("Wayland: This fails. Figure out why.");
-
+ {
+ // skip if we can't move mouse
+ const QPoint cursorPos = QCursor::pos() + QPoint(10, 10);
+ QCursor::setPos(cursorPos);
+ if (!QTest::qWaitFor([cursorPos] { return QCursor::pos() == cursorPos; }, 500))
+ QSKIP("Can't move mouse");
+ }
//we test that view will emit entered
//when the scrollbar move but not the mouse itself
QStandardItemModel model(1000, 1);
@@ -1373,7 +1347,7 @@ void tst_QAbstractItemView::task200665_itemEntered()
QSignalSpy spy(&view, &QAbstractItemView::entered);
view.verticalScrollBar()->setValue(view.verticalScrollBar()->maximum());
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
}
void tst_QAbstractItemView::task257481_emptyEditor()
@@ -1396,17 +1370,17 @@ void tst_QAbstractItemView::task257481_emptyEditor()
treeView.edit(model.index(0, 0));
QList<QLineEdit *> lineEditors = treeView.viewport()->findChildren<QLineEdit *>();
- QCOMPARE(lineEditors.count(), 1);
+ QCOMPARE(lineEditors.size(), 1);
QVERIFY(!lineEditors.constFirst()->size().isEmpty());
treeView.edit(model.index(1, 0));
lineEditors = treeView.viewport()->findChildren<QLineEdit *>();
- QCOMPARE(lineEditors.count(), 1);
+ QCOMPARE(lineEditors.size(), 1);
QVERIFY(!lineEditors.constFirst()->size().isEmpty());
treeView.edit(model.index(2, 0));
lineEditors = treeView.viewport()->findChildren<QLineEdit *>();
- QCOMPARE(lineEditors.count(), 1);
+ QCOMPARE(lineEditors.size(), 1);
QVERIFY(!lineEditors.constFirst()->size().isEmpty());
}
@@ -1440,7 +1414,7 @@ void tst_QAbstractItemView::shiftArrowSelectionAfterScrolling()
QCOMPARE(view.currentIndex(), index1);
QModelIndexList selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 2);
+ QCOMPARE(selected.size(), 2);
QVERIFY(selected.contains(index0));
QVERIFY(selected.contains(index1));
}
@@ -1480,7 +1454,8 @@ void tst_QAbstractItemView::shiftSelectionAfterRubberbandSelection()
// The mouse move event has to be created manually because the QTest framework does not
// contain a function for mouse moves with buttons pressed
QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::NoModifier, pressPos);
- QMouseEvent moveEvent(QEvent::MouseMove, releasePos, Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
+ QMouseEvent moveEvent(QEvent::MouseMove, releasePos, view.viewport()->mapToGlobal(releasePos),
+ Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
bool moveEventReceived = qApp->notify(view.viewport(), &moveEvent);
QVERIFY(moveEventReceived);
QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::NoModifier, releasePos);
@@ -1493,7 +1468,7 @@ void tst_QAbstractItemView::shiftSelectionAfterRubberbandSelection()
// Verify that the selection worked OK
QModelIndexList selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 2);
+ QCOMPARE(selected.size(), 2);
QVERIFY(selected.contains(index1));
QVERIFY(selected.contains(index2));
@@ -1503,7 +1478,8 @@ void tst_QAbstractItemView::shiftSelectionAfterRubberbandSelection()
// Repeat the same steps as above, but with a Shift-Arrow selection
QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::NoModifier, pressPos);
- QMouseEvent moveEvent2(QEvent::MouseMove, releasePos, Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
+ QMouseEvent moveEvent2(QEvent::MouseMove, releasePos, view.viewport()->mapToGlobal(releasePos),
+ Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
moveEventReceived = qApp->notify(view.viewport(), &moveEvent2);
QVERIFY(moveEventReceived);
QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::NoModifier, releasePos);
@@ -1515,7 +1491,7 @@ void tst_QAbstractItemView::shiftSelectionAfterRubberbandSelection()
// Verify that the selection worked OK
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 2);
+ QCOMPARE(selected.size(), 2);
QVERIFY(selected.contains(index1));
QVERIFY(selected.contains(index2));
}
@@ -1544,7 +1520,7 @@ void tst_QAbstractItemView::ctrlRubberbandSelection()
// Select item 1
view.setCurrentIndex(index1);
QModelIndexList selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 1);
+ QCOMPARE(selected.size(), 1);
QVERIFY(selected.contains(index1));
// Now press control and draw a rubberband around items 1 and 2.
@@ -1553,14 +1529,15 @@ void tst_QAbstractItemView::ctrlRubberbandSelection()
QPoint pressPos = view.visualRect(index1).topLeft() - QPoint(1, 1);
QPoint releasePos = view.visualRect(index2).bottomRight() + QPoint(1, 1);
QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::ControlModifier, pressPos);
- QMouseEvent moveEvent(QEvent::MouseMove, releasePos, Qt::NoButton, Qt::LeftButton, Qt::ControlModifier);
+ QMouseEvent moveEvent(QEvent::MouseMove, releasePos, view.viewport()->mapToGlobal(releasePos),
+ Qt::NoButton, Qt::LeftButton, Qt::ControlModifier);
bool moveEventReceived = qApp->notify(view.viewport(), &moveEvent);
QVERIFY(moveEventReceived);
QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::ControlModifier, releasePos);
// Verify that item 2 is selected now
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 1);
+ QCOMPARE(selected.size(), 1);
QVERIFY(selected.contains(index2));
}
@@ -1582,7 +1559,7 @@ void tst_QAbstractItemView::QTBUG6407_extendedSelection()
moveCursorAway(&view);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(&view, QApplication::activeWindow());
@@ -1593,21 +1570,21 @@ void tst_QAbstractItemView::QTBUG6407_extendedSelection()
QVERIFY(view.viewport()->rect().contains(p));
QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, p);
QCOMPARE(view.currentIndex(), index49);
- QCOMPARE(view.selectedItems().count(), 1);
+ QCOMPARE(view.selectedItems().size(), 1);
QModelIndex index47 = view.model()->index(47,0);
p = view.visualRect(index47).center();
QVERIFY(view.viewport()->rect().contains(p));
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ShiftModifier, p);
QCOMPARE(view.currentIndex(), index47);
- QCOMPARE(view.selectedItems().count(), 3); //49, 48, 47;
+ QCOMPARE(view.selectedItems().size(), 3); //49, 48, 47;
QModelIndex index44 = view.model()->index(44,0);
p = view.visualRect(index44).center();
QVERIFY(view.viewport()->rect().contains(p));
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ShiftModifier, p);
QCOMPARE(view.currentIndex(), index44);
- QCOMPARE(view.selectedItems().count(), 6); //49 .. 44;
+ QCOMPARE(view.selectedItems().size(), 6); //49 .. 44;
}
@@ -1632,7 +1609,7 @@ void tst_QAbstractItemView::QTBUG6753_selectOnSelection()
QTest::mouseMove(table.viewport(), itemRect.center());
QTest::mouseClick(table.viewport(), Qt::LeftButton, Qt::NoModifier, itemRect.center());
- QCOMPARE(table.selectedItems().count(), 1);
+ QCOMPARE(table.selectedItems().size(), 1);
QCOMPARE(table.selectedItems().first(), table.item(item.row(), item.column()));
}
@@ -1643,9 +1620,31 @@ void tst_QAbstractItemView::testDelegateDestroyEditor()
table.setItemDelegate(&delegate);
table.edit(table.model()->index(1, 1));
QAbstractItemView *tv = &table;
- QVERIFY(!delegate.calledVirtualDtor);
+ QCOMPARE(delegate.virtualDtorCallCount, 0);
tv->closeEditor(delegate.openedEditor, QAbstractItemDelegate::NoHint);
- QVERIFY(delegate.calledVirtualDtor);
+ QCOMPARE(delegate.virtualDtorCallCount, 1);
+}
+
+void tst_QAbstractItemView::testDelegateDestroyEditorChild()
+{
+ QTreeWidget tree;
+ MyAbstractItemDelegate delegate;
+ tree.setItemDelegate(&delegate);
+ QTreeWidgetItem *topLevel = new QTreeWidgetItem;
+ QTreeWidgetItem *levelOne1 = new QTreeWidgetItem(topLevel);
+ QTreeWidgetItem *levelTwo1 = new QTreeWidgetItem(levelOne1);
+ QTreeWidgetItem *levelOne2 = new QTreeWidgetItem(topLevel);
+ QTreeWidgetItem *levelTwo2 = new QTreeWidgetItem(levelOne2);
+ tree.insertTopLevelItem(0, topLevel);
+ tree.openPersistentEditor(levelOne1);
+ tree.openPersistentEditor(levelTwo1);
+ tree.openPersistentEditor(levelOne2);
+ tree.openPersistentEditor(levelTwo2);
+ QCOMPARE(delegate.virtualCtorCallCount, 4);
+ levelOne1->removeChild(levelTwo1);
+ QCOMPARE(delegate.virtualDtorCallCount, 1);
+ topLevel->removeChild(levelOne2);
+ QCOMPARE(delegate.virtualDtorCallCount, 3);
}
void tst_QAbstractItemView::testClickedSignal()
@@ -1658,7 +1657,7 @@ void tst_QAbstractItemView::testClickedSignal()
centerOnScreen(&view);
moveCursorAway(&view);
view.showNormal();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(&view, QApplication::activeWindow());
@@ -1669,12 +1668,12 @@ void tst_QAbstractItemView::testClickedSignal()
QSignalSpy clickedSpy(&view, &QTableWidget::clicked);
QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, p);
- QCOMPARE(clickedSpy.count(), 1);
+ QCOMPARE(clickedSpy.size(), 1);
QTest::mouseClick(view.viewport(), Qt::RightButton, {}, p);
// We expect that right-clicks do not cause the clicked() signal to
// be emitted.
- QCOMPARE(clickedSpy.count(), 1);
+ QCOMPARE(clickedSpy.size(), 1);
}
@@ -1709,7 +1708,7 @@ void tst_QAbstractItemView::testChangeEditorState()
centerOnScreen(&view);
moveCursorAway(&view);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(&view, QApplication::activeWindow());
@@ -1730,7 +1729,7 @@ void tst_QAbstractItemView::deselectInSingleSelection()
QVERIFY(QTest::qWaitForWindowExposed(&view));
view.setSelectionMode(QAbstractItemView::SingleSelection);
view.setEditTriggers(QAbstractItemView::NoEditTriggers);
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowExposed(&view));
// mouse
QModelIndex index22 = s.index(2, 2);
@@ -1738,28 +1737,28 @@ void tst_QAbstractItemView::deselectInSingleSelection()
QPoint clickpos = rect22.center();
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, clickpos);
QCOMPARE(view.currentIndex(), index22);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 1);
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ControlModifier, clickpos);
QCOMPARE(view.currentIndex(), index22);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 0);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 0);
// second click with modifier however does select
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ControlModifier, clickpos);
QCOMPARE(view.currentIndex(), index22);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 1);
// keyboard
QTest::keyClick(&view, Qt::Key_Space, Qt::NoModifier);
QCOMPARE(view.currentIndex(), index22);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 1);
QTest::keyClick(&view, Qt::Key_Space, Qt::ControlModifier);
QCOMPARE(view.currentIndex(), index22);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 0);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 0);
// second keypress with modifier however does select
QTest::keyClick(&view, Qt::Key_Space, Qt::ControlModifier);
QCOMPARE(view.currentIndex(), index22);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 1);
}
void tst_QAbstractItemView::testNoActivateOnDisabledItem()
@@ -1777,7 +1776,7 @@ void tst_QAbstractItemView::testNoActivateOnDisabledItem()
moveCursorAway(&treeView);
treeView.show();
- QApplication::setActiveWindow(&treeView);
+ QApplicationPrivate::setActiveWindow(&treeView);
QVERIFY(QTest::qWaitForWindowActive(&treeView));
QSignalSpy activatedSpy(&treeView, &QAbstractItemView::activated);
@@ -1787,7 +1786,7 @@ void tst_QAbstractItemView::testNoActivateOnDisabledItem()
QPoint clickPos = treeView.visualRect(itemIndex).center();
QTest::mouseClick(treeView.viewport(), Qt::LeftButton, {}, clickPos);
- QCOMPARE(activatedSpy.count(), 0);
+ QCOMPARE(activatedSpy.size(), 0);
}
void tst_QAbstractItemView::testFocusPolicy_data()
@@ -1824,7 +1823,7 @@ void tst_QAbstractItemView::testFocusPolicy()
moveCursorAway(&window);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
// itemview accepts focus => editor is closed => return focus to the itemview
@@ -1862,7 +1861,7 @@ void tst_QAbstractItemView::QTBUG31411_noSelection()
moveCursorAway(&window);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
qRegisterMetaType<QItemSelection>();
@@ -1881,7 +1880,7 @@ void tst_QAbstractItemView::QTBUG31411_noSelection()
QVERIFY(editor2);
QTest::keyClick(editor2, Qt::Key_Escape, Qt::NoModifier);
- QCOMPARE(selectionChangeSpy.count(), 0);
+ QCOMPARE(selectionChangeSpy.size(), 0);
}
void tst_QAbstractItemView::QTBUG39324_settingSameInstanceOfIndexWidget()
@@ -1923,7 +1922,7 @@ void tst_QAbstractItemView::shiftSelectionAfterChangingModelContents()
// Click "C"
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, view.visualRect(indexC).center());
QModelIndexList selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 1);
+ QCOMPARE(selected.size(), 1);
QVERIFY(selected.contains(indexC));
// Insert new item "B1"
@@ -1933,14 +1932,14 @@ void tst_QAbstractItemView::shiftSelectionAfterChangingModelContents()
// Shift-click "D" -> we expect that "C" and "D" are selected
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ShiftModifier, view.visualRect(indexD).center());
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 2);
+ QCOMPARE(selected.size(), 2);
QVERIFY(selected.contains(indexC));
QVERIFY(selected.contains(indexD));
// Click "D"
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, view.visualRect(indexD).center());
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 1);
+ QCOMPARE(selected.size(), 1);
QVERIFY(selected.contains(indexD));
// Remove items "B" and "C"
@@ -1952,7 +1951,7 @@ void tst_QAbstractItemView::shiftSelectionAfterChangingModelContents()
// Shift-click "F" -> we expect that "D", "E", and "F" are selected
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ShiftModifier, view.visualRect(indexF).center());
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 3);
+ QCOMPARE(selected.size(), 3);
QVERIFY(selected.contains(indexD));
QVERIFY(selected.contains(indexE));
QVERIFY(selected.contains(indexF));
@@ -1961,7 +1960,7 @@ void tst_QAbstractItemView::shiftSelectionAfterChangingModelContents()
while (view.currentIndex() != indexA)
QTest::keyClick(&view, Qt::Key_Up);
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 1);
+ QCOMPARE(selected.size(), 1);
QVERIFY(selected.contains(indexA));
// Change the sort order
@@ -1970,7 +1969,7 @@ void tst_QAbstractItemView::shiftSelectionAfterChangingModelContents()
// Shift-click "F" -> All items should be selected
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::ShiftModifier, view.visualRect(indexF).center());
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), model.rowCount());
+ QCOMPARE(selected.size(), model.rowCount());
// Restore the old sort order
proxyModel.sort(0, Qt::AscendingOrder);
@@ -1978,7 +1977,7 @@ void tst_QAbstractItemView::shiftSelectionAfterChangingModelContents()
// Click "D"
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, view.visualRect(indexD).center());
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 1);
+ QCOMPARE(selected.size(), 1);
QVERIFY(selected.contains(indexD));
// Insert new item "B2"
@@ -1988,7 +1987,7 @@ void tst_QAbstractItemView::shiftSelectionAfterChangingModelContents()
// Press Shift+Down -> "D" and "E" should be selected.
QTest::keyClick(&view, Qt::Key_Down, Qt::ShiftModifier);
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 2);
+ QCOMPARE(selected.size(), 2);
QVERIFY(selected.contains(indexD));
QVERIFY(selected.contains(indexE));
@@ -1997,7 +1996,7 @@ void tst_QAbstractItemView::shiftSelectionAfterChangingModelContents()
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, view.visualRect(indexA).center());
view.setCurrentIndex(indexD);
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 1);
+ QCOMPARE(selected.size(), 1);
QVERIFY(selected.contains(indexD));
// Insert new item "B3"
@@ -2007,7 +2006,7 @@ void tst_QAbstractItemView::shiftSelectionAfterChangingModelContents()
// Press Shift+Down -> "D" and "E" should be selected.
QTest::keyClick(&view, Qt::Key_Down, Qt::ShiftModifier);
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 2);
+ QCOMPARE(selected.size(), 2);
QVERIFY(selected.contains(indexD));
QVERIFY(selected.contains(indexE));
}
@@ -2285,14 +2284,14 @@ void tst_QAbstractItemView::testClickToSelect()
// Click the center of the visualRect of item "A"
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, centerA);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.back().front().value<QRect>(), QRect(centerA, QSize(1, 1)));
// Click a point slightly away from the center
const QPoint nearCenterA = centerA + QPoint(1, 1);
QVERIFY(visualRectA.contains(nearCenterA));
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, nearCenterA);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QCOMPARE(spy.back().front().value<QRect>(), QRect(nearCenterA, QSize(1, 1)));
}
@@ -2462,15 +2461,15 @@ void tst_QAbstractItemView::inputMethodEnabled()
// Check focus by switching the activation of the window to force a focus in
view->setCurrentIndex(model->index(1, 0));
- QApplication::setActiveWindow(nullptr);
- QApplication::setActiveWindow(view.data());
+ QApplicationPrivate::setActiveWindow(nullptr);
+ QApplicationPrivate::setActiveWindow(view.data());
QVERIFY(QTest::qWaitForWindowActive(view.data()));
QCOMPARE(view->testAttribute(Qt::WA_InputMethodEnabled), result);
view->setCurrentIndex(QModelIndex());
QVERIFY(!view->testAttribute(Qt::WA_InputMethodEnabled));
- QApplication::setActiveWindow(nullptr);
- QApplication::setActiveWindow(view.data());
+ QApplicationPrivate::setActiveWindow(nullptr);
+ QApplicationPrivate::setActiveWindow(view.data());
QVERIFY(QTest::qWaitForWindowActive(view.data()));
QModelIndex index = model->index(1, 0);
QPoint p = view->visualRect(index).center();
@@ -2480,8 +2479,8 @@ void tst_QAbstractItemView::inputMethodEnabled()
QCOMPARE(view->testAttribute(Qt::WA_InputMethodEnabled), result);
index = model->index(0, 0);
- QApplication::setActiveWindow(nullptr);
- QApplication::setActiveWindow(view.data());
+ QApplicationPrivate::setActiveWindow(nullptr);
+ QApplicationPrivate::setActiveWindow(view.data());
QVERIFY(QTest::qWaitForWindowActive(view.data()));
p = view->visualRect(index).center();
QTest::mouseClick(view->viewport(), Qt::LeftButton, Qt::NoModifier, p);
@@ -2491,11 +2490,11 @@ void tst_QAbstractItemView::inputMethodEnabled()
// There is a case when it goes to the first visible item so we
// make the flags of the first item match the ones we are testing
// to check the attribute correctly
- QApplication::setActiveWindow(nullptr);
+ QApplicationPrivate::setActiveWindow(nullptr);
view->setCurrentIndex(QModelIndex());
view->reset();
item->setFlags(Qt::ItemFlags(itemFlags));
- QApplication::setActiveWindow(view.data());
+ QApplicationPrivate::setActiveWindow(view.data());
QVERIFY(QTest::qWaitForWindowActive(view.data()));
QCOMPARE(view->testAttribute(Qt::WA_InputMethodEnabled), result);
}
@@ -2606,11 +2605,11 @@ void tst_QAbstractItemView::checkFocusAfterActivationChanges()
QVERIFY(QTest::qWaitForWindowExposed(delegate.openedEditor));
QVERIFY(delegate.openedEditor->hasFocus());
- QApplication::setActiveWindow(&otherTopLevel);
+ QApplicationPrivate::setActiveWindow(&otherTopLevel);
otherTopLevel.setFocus();
QTRY_VERIFY(!delegate.openedEditor);
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QVERIFY(view->hasFocus());
}
@@ -2650,7 +2649,7 @@ void tst_QAbstractItemView::dragSelectAfterNewPress()
// Verify that the selection worked OK
QModelIndexList selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 3);
+ QCOMPARE(selected.size(), 3);
for (int i = 0; i < 2; ++i)
QVERIFY(selected.contains(model.index(i, 0)));
@@ -2658,8 +2657,8 @@ void tst_QAbstractItemView::dragSelectAfterNewPress()
const QPoint releasePos = view.visualRect(index5).center();
// The mouse move event has to be created manually because the QTest framework does not
// contain a function for mouse moves with buttons pressed
- QMouseEvent moveEvent2(QEvent::MouseMove, releasePos, Qt::NoButton, Qt::LeftButton,
- Qt::ShiftModifier);
+ QMouseEvent moveEvent2(QEvent::MouseMove, releasePos, view.viewport()->mapToGlobal(releasePos),
+ Qt::NoButton, Qt::LeftButton, Qt::ShiftModifier);
const bool moveEventReceived = qApp->notify(view.viewport(), &moveEvent2);
QVERIFY(moveEventReceived);
QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::ShiftModifier, releasePos);
@@ -2667,18 +2666,19 @@ void tst_QAbstractItemView::dragSelectAfterNewPress()
// Verify that the selection worked OK
selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 6);
+ QCOMPARE(selected.size(), 6);
for (int i = 0; i < 5; ++i)
QVERIFY(selected.contains(model.index(i, 0)));
}
void tst_QAbstractItemView::dragWithSecondClick_data()
{
- QTest::addColumn<QString>("viewClass");
+ QTest::addColumn<QByteArray>("viewClass");
QTest::addColumn<bool>("doubleClick");
- for (QString viewClass : {"QListView", "QTreeView"}) {
- QTest::addRow("DoubleClick") << viewClass << true;
- QTest::addRow("Two Single Clicks") << viewClass << false;
+ const QList<QByteArray> widgets { "QListView", "QTreeView" };
+ for (const QByteArray &widget : widgets) {
+ QTest::newRow(widget + ": DoubleClick") << widget << true;
+ QTest::newRow(widget + ": Two Single Clicks") << widget << false;
}
}
@@ -2707,7 +2707,7 @@ protected:
void tst_QAbstractItemView::dragWithSecondClick()
{
- QFETCH(QString, viewClass);
+ QFETCH(QByteArray, viewClass);
QFETCH(bool, doubleClick);
QStandardItemModel model;
@@ -2755,7 +2755,7 @@ void tst_QAbstractItemView::dragWithSecondClick()
const QPoint dragTo = view->visualRect(index1).center()
+ QPoint(2 * QApplication::startDragDistance(),
2 * QApplication::startDragDistance());
- QMouseEvent mouseMoveEvent(QEvent::MouseMove, dragTo,
+ QMouseEvent mouseMoveEvent(QEvent::MouseMove, dragTo, view->viewport()->mapToGlobal(dragTo),
Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
QVERIFY(QApplication::sendEvent(view->viewport(), &mouseMoveEvent));
// twice since the view will first enter dragging state, then start the drag
@@ -2862,55 +2862,78 @@ void tst_QAbstractItemView::mouseSelection_data()
{
QTest::addColumn<QAbstractItemView::SelectionMode>("selectionMode");
QTest::addColumn<bool>("dragEnabled");
+ QTest::addColumn<QAbstractItemView::EditTrigger>("editTrigger");
QTest::addColumn<QList<SelectionEvent>>("selectionEvents");
QTest::addColumn<QList<int>>("selectedRows");
// single selection mode - always one row selected, modifiers ignored
QTest::addRow("Single:Press") << QAbstractItemView::SingleSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 1)}
<< QList{1};
QTest::addRow("Single:Click") << QAbstractItemView::SingleSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent{SelectionEvent::Click, 1}}
<< QList{1};
QTest::addRow("Single:Press+Drag") << QAbstractItemView::SingleSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 1),
SelectionEvent{SelectionEvent::Move, 2},
SelectionEvent{SelectionEvent::Release}}
<< QList{2};
QTest::addRow("Single:Shift+Click") << QAbstractItemView::SingleSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent{SelectionEvent::Click, Qt::ShiftModifier, 2}}
<< QList{2};
+ QTest::addRow("Single:Press;Ctrl+Press") << QAbstractItemView::SingleSelection << false
+ << QAbstractItemView::NoEditTriggers
+ << QList{SelectionEvent{SelectionEvent::Press, 3},
+ SelectionEvent{SelectionEvent::Press, Qt::ControlModifier, 3}}
+ << QList{3};
QTest::addRow("Single:Ctrl+Click") << QAbstractItemView::SingleSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent{SelectionEvent::Click, Qt::ControlModifier, 3}}
<< QList{3};
+ QTest::addRow("Single:Click;Ctrl+Click") << QAbstractItemView::SingleSelection << false
+ << QAbstractItemView::NoEditTriggers
+ << QList{SelectionEvent{SelectionEvent::Click, 3},
+ SelectionEvent{SelectionEvent::Click, Qt::ControlModifier, 3}}
+ << QList<int>{};
// multi selection mode - selection toggles on press, selection can be drag-extended
// modifiers ignored
QTest::addRow("Multi:Press") << QAbstractItemView::MultiSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 1)}
<< QList{1};
QTest::addRow("Multi:Press twice") << QAbstractItemView::MultiSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 1),
SelectionEvent(SelectionEvent::Press, 1)}
<< QList<int>{};
QTest::addRow("Multi:Press twice with drag enabled") << QAbstractItemView::MultiSelection << true
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Click, 1),
SelectionEvent(SelectionEvent::Press, 1)}
<< QList{1};
QTest::addRow("Multi:Press and click with drag enabled") << QAbstractItemView::MultiSelection << true
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 1),
SelectionEvent(SelectionEvent::Click, 1)}
<< QList<int>{};
QTest::addRow("Multi:Press,Press") << QAbstractItemView::MultiSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 2),
SelectionEvent(SelectionEvent::Press, 3)}
<< QList{2, 3};
QTest::addRow("Multi:Press,Drag") << QAbstractItemView::MultiSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 1),
SelectionEvent(SelectionEvent::Move, 5),
SelectionEvent(SelectionEvent::Release)}
<< QList{1, 2, 3, 4, 5};
QTest::addRow("Multi:Press,Drag,Deselect") << QAbstractItemView::MultiSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 1),
SelectionEvent(SelectionEvent::Move, 5),
SelectionEvent(SelectionEvent::Release),
@@ -2918,6 +2941,7 @@ void tst_QAbstractItemView::mouseSelection_data()
<< QList{1, 2, 4, 5};
// drag-select a few indices; then drag-select a larger area that includes the first
QTest::addRow("Multi:Press,Drag;Surround") << QAbstractItemView::MultiSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 3),
SelectionEvent(SelectionEvent::Move, 5),
SelectionEvent(SelectionEvent::Release),
@@ -2927,6 +2951,7 @@ void tst_QAbstractItemView::mouseSelection_data()
<< QList{1, 2, 3, 4, 5, 6, 7, 8};
// drag-select a few indices; then try to select more starting with the last -> not working
QTest::addRow("Multi:Press,Drag;Expand") << QAbstractItemView::MultiSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 3),
SelectionEvent(SelectionEvent::Move, 5),
SelectionEvent(SelectionEvent::Release),
@@ -2937,6 +2962,7 @@ void tst_QAbstractItemView::mouseSelection_data()
// Multi: Press-dragging a selection should not deselect #QTBUG-59888
QTest::addRow("Multi:Press-Drag selection") << QAbstractItemView::MultiSelection << true
// with drag'n'drop enabled, we cannot drag a selection
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Click, 2),
SelectionEvent(SelectionEvent::Click, 3),
SelectionEvent(SelectionEvent::Click, 4),
@@ -2949,42 +2975,51 @@ void tst_QAbstractItemView::mouseSelection_data()
// Extended selection: Press selects a single item
QTest::addRow("Extended:Press") << QAbstractItemView::ExtendedSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 3)}
<< QList{3};
QTest::addRow("Extended:Press twice") << QAbstractItemView::ExtendedSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 3),
SelectionEvent(SelectionEvent::Press, 3)}
<< QList{3};
QTest::addRow("Extended:Press,Press") << QAbstractItemView::ExtendedSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 2),
SelectionEvent(SelectionEvent::Press, 3)}
<< QList{3};
// Extended selection: press with Ctrl toggles item
QTest::addRow("Extended:Press,Toggle") << QAbstractItemView::ExtendedSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 3),
SelectionEvent(SelectionEvent::Click, Qt::ControlModifier, 3)}
<< QList<int>{};
QTest::addRow("Extended:Press,Add") << QAbstractItemView::ExtendedSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 1),
SelectionEvent(SelectionEvent::Click, Qt::ControlModifier, 3)}
<< QList{1, 3};
// Extended selection: Shift creates a range between first and last pressed
QTest::addRow("Extended:Press,Range") << QAbstractItemView::ExtendedSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 1),
SelectionEvent(SelectionEvent::Press, Qt::ShiftModifier, 5)}
<< QList{1, 2, 3, 4, 5};
QTest::addRow("Extended:Press,Range,Fix Range") << QAbstractItemView::ExtendedSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 1),
SelectionEvent(SelectionEvent::Press, Qt::ShiftModifier, 5),
SelectionEvent(SelectionEvent::Press, Qt::ShiftModifier, 3)}
<< QList{1, 2, 3};
// Extended: dragging extends the selection
QTest::addRow("Extended:Press,Drag") << QAbstractItemView::ExtendedSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 2),
SelectionEvent(SelectionEvent::Move, 5)}
<< QList{2, 3, 4, 5};
// Extended: Ctrl+Press-dragging extends the selection
QTest::addRow("Extended:Press,Drag;Ctrl-Press,Drag") << QAbstractItemView::ExtendedSelection << false
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Press, 2),
SelectionEvent(SelectionEvent::Move, 5),
SelectionEvent(SelectionEvent::Release),
@@ -2993,7 +3028,8 @@ void tst_QAbstractItemView::mouseSelection_data()
SelectionEvent(SelectionEvent::Release, Qt::ControlModifier, 8)}
<< QList{2, 3, 4, 5, 6, 7, 8};
// Extended: Ctrl+Press-dragging in a selection should not deselect #QTBUG-59888
- QTest::addRow("Extended:Ctrl-Drag selection") << QAbstractItemView::ExtendedSelection << true
+ QTest::addRow("Extended:Ctrl-Drag selection,no deselect") << QAbstractItemView::ExtendedSelection << true
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Click, 2),
SelectionEvent(SelectionEvent::Click, Qt::ShiftModifier, 5),
SelectionEvent(SelectionEvent::Press, Qt::ControlModifier, 3),
@@ -3003,6 +3039,7 @@ void tst_QAbstractItemView::mouseSelection_data()
<< QList{2, 3, 4, 5};
// Extended: Ctrl+Press-dragging with a selection extends, then drags #QTBUG-59888
QTest::addRow("Extended:Ctrl-Drag selection") << QAbstractItemView::ExtendedSelection << true
+ << QAbstractItemView::NoEditTriggers
<< QList{SelectionEvent(SelectionEvent::Click, 2),
SelectionEvent(SelectionEvent::Click, Qt::ShiftModifier, 5),
SelectionEvent(SelectionEvent::Press, Qt::ControlModifier, 6),
@@ -3010,12 +3047,37 @@ void tst_QAbstractItemView::mouseSelection_data()
// two moves needed because of distance and state logic in 7QAbstractItemView
SelectionEvent(SelectionEvent::Move, Qt::ControlModifier, 8)}
<< QList{2, 3, 4, 5, 6};
+ // Extended: when drag is enabled, click with Ctrl toggles item instead of editing # QTBUG-111131
+ QTest::addRow("Extended:Click,Toggle,editable") << QAbstractItemView::ExtendedSelection << false
+ << QAbstractItemView::SelectedClicked
+ << QList{SelectionEvent(SelectionEvent::Click, 3),
+ SelectionEvent(SelectionEvent::Click, Qt::ControlModifier, 3)}
+ << QList<int>{};
+ QTest::addRow("Extended:Click,Toggle,dragable,editable") << QAbstractItemView::ExtendedSelection << true
+ << QAbstractItemView::SelectedClicked
+ << QList{SelectionEvent(SelectionEvent::Click, 3),
+ SelectionEvent(SelectionEvent::Click, Qt::ControlModifier, 3)}
+ << QList<int>{};
+ // Extended: when drag is enabled, click on selected without Ctrl clears before editing
+ QTest::addRow("Extended:Range,Click,editable") << QAbstractItemView::ExtendedSelection << false
+ << QAbstractItemView::SelectedClicked
+ << QList{SelectionEvent(SelectionEvent::Click, 1),
+ SelectionEvent(SelectionEvent::Click, Qt::ShiftModifier, 3),
+ SelectionEvent(SelectionEvent::Click, 2)}
+ << QList<int>{2};
+ QTest::addRow("Extended:Range,Click,dragable,editable") << QAbstractItemView::ExtendedSelection << true
+ << QAbstractItemView::SelectedClicked
+ << QList{SelectionEvent(SelectionEvent::Click, 1),
+ SelectionEvent(SelectionEvent::Click, Qt::ShiftModifier, 3),
+ SelectionEvent(SelectionEvent::Click, 2)}
+ << QList<int>{2};
}
void tst_QAbstractItemView::mouseSelection()
{
QFETCH(QAbstractItemView::SelectionMode, selectionMode);
QFETCH(bool, dragEnabled);
+ QFETCH(QAbstractItemView::EditTrigger, editTrigger);
QFETCH(QList<SelectionEvent>, selectionEvents);
QFETCH(QList<int>, selectedRows);
@@ -3024,7 +3086,7 @@ void tst_QAbstractItemView::mouseSelection()
for (int i = 0; i < 10; ++i) {
QStandardItem *item = new QStandardItem(QString("item %0").arg(i));
item->setDragEnabled(dragEnabled);
- item->setEditable(false);
+ item->setEditable(editTrigger != QAbstractItemView::NoEditTriggers);
parentItem->appendRow(item);
}
@@ -3034,13 +3096,14 @@ void tst_QAbstractItemView::mouseSelection()
view->setModel(&model);
view->setDragEnabled(dragEnabled);
view->setSelectionMode(selectionMode);
+ view->setEditTriggers(editTrigger);
view->show();
QVERIFY(QTest::qWaitForWindowActive(view));
Qt::MouseButton buttonDown = Qt::NoButton;
int targetRow = -1;
QModelIndex pressedIndex;
- for (const auto &event : qAsConst(selectionEvents)) {
+ for (const auto &event : std::as_const(selectionEvents)) {
if (event.row != -1)
targetRow = event.row;
const QModelIndex targetIndex = model.index(targetRow, 0);
@@ -3066,7 +3129,8 @@ void tst_QAbstractItemView::mouseSelection()
break;
case SelectionEvent::Move: {
QMouseEvent mouseMoveEvent(QEvent::MouseMove, targetPoint,
- Qt::NoButton, buttonDown, event.keyboardModifiers);
+ view->viewport()->mapToGlobal(targetPoint),
+ Qt::NoButton, buttonDown, event.keyboardModifiers);
QApplication::sendEvent(view->viewport(), &mouseMoveEvent);
}
break;
@@ -3084,6 +3148,37 @@ void tst_QAbstractItemView::mouseSelection()
}
/*!
+ Make sure that when clicking on empty space in the view, we don't
+ unselect the current row.
+ QTBUG-105870
+*/
+void tst_QAbstractItemView::keepSingleSelectionOnEmptyAreaClick()
+{
+ QListWidget view;
+ view.setSelectionMode(QAbstractItemView::SingleSelection);
+ QListWidgetItem *lastItem;
+ for (int i = 0; i < 5; i++)
+ lastItem = new QListWidgetItem("item " + QString::number(i), &view);
+
+ // Make widget large enough so that there is empty area below the last item
+ view.setFixedSize(300, 500);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowActive(&view));
+
+ // Select third row
+ view.setCurrentRow(2);
+
+ // Click below the last row
+ QPoint targetPoint = view.visualItemRect(lastItem).bottomLeft();
+ targetPoint += QPoint(10, 10);
+
+ QTest::mouseClick(view.viewport(), Qt::MouseButton::LeftButton, Qt::NoModifier, targetPoint);
+
+ QCOMPARE(view.currentRow(), 2);
+ QVERIFY(view.currentItem()->isSelected());
+}
+
+/*!
Verify that scrolling an autoScroll enabled itemview with a QScroller
produces a continuous, smooth scroll without any jumping around due to
the currentItem negotiation between QAbstractItemView and QScroller.
@@ -3091,6 +3186,9 @@ void tst_QAbstractItemView::mouseSelection()
*/
void tst_QAbstractItemView::scrollerSmoothScroll()
{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
QListWidget view;
view.setAutoScroll(true);
view.setVerticalScrollMode(QListView::ScrollPerPixel);
@@ -3160,6 +3258,9 @@ void tst_QAbstractItemView::inputMethodOpensEditor_data()
void tst_QAbstractItemView::inputMethodOpensEditor()
{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
QTableWidget tableWidget(50, 50);
tableWidget.setEditTriggers(QAbstractItemView::AnyKeyPressed);
for (int r = 0; r < 50; ++r) {
@@ -3315,7 +3416,8 @@ void tst_QAbstractItemView::selectionAutoScrolling()
}
QTest::mousePress(listview.viewport(), Qt::LeftButton, Qt::NoModifier, pressPoint);
- QMouseEvent mmEvent(QEvent::MouseMove, dragPoint, Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
+ QMouseEvent mmEvent(QEvent::MouseMove, dragPoint, listview.viewport()->mapToGlobal(dragPoint),
+ Qt::NoButton, Qt::LeftButton, Qt::NoModifier);
QApplication::sendEvent(listview.viewport(), &mmEvent); // QTest::mouseMove is useless
// check that we scrolled to the end
@@ -3327,10 +3429,152 @@ void tst_QAbstractItemView::selectionAutoScrolling()
QTRY_COMPARE(scrollBar->value(), 0);
else
QTRY_COMPARE(scrollBar->value(), scrollBar->maximum());
- QVERIFY(listview.selectionModel()->selectedIndexes().count() > 0);
+ QVERIFY(listview.selectionModel()->selectedIndexes().size() > 0);
QTest::mouseRelease(listview.viewport(), Qt::LeftButton, Qt::NoModifier, dragPoint);
}
+class SpinBoxDelegate : public QStyledItemDelegate
+{
+public:
+ using QStyledItemDelegate::QStyledItemDelegate;
+ QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &) const override
+ {
+ QSpinBox *spinboxEditor = new QSpinBox(parent);
+ return spinboxEditor;
+ }
+
+ void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const override
+ {
+ if (QSpinBox *spin = qobject_cast<QSpinBox *>(editor)) {
+ model->setData(index, spin->value());
+ }
+ }
+};
+
+void tst_QAbstractItemView::testSpinBoxAsEditor_data()
+{
+ QTest::addColumn<bool>("keyboardTracking");
+ QTest::newRow("true") << true;
+ QTest::newRow("false")<< false;
+}
+
+void tst_QAbstractItemView::testSpinBoxAsEditor()
+{
+ QFETCH(bool, keyboardTracking);
+
+ QStandardItemModel model(2, 2);
+ SpinBoxDelegate delegate;
+
+ QTableView view;
+ view.setModel(&model);
+ view.setItemDelegate(&delegate);
+
+ view.setCurrentIndex(model.index(0, 1));
+ view.openPersistentEditor(model.index(0, 1));
+ const QList<QSpinBox *> list = view.viewport()->findChildren<QSpinBox *>();
+ QCOMPARE(list.size(), 1);
+ QSpinBox *sb = list.first();
+ QVERIFY(sb);
+
+ sb->setKeyboardTracking(keyboardTracking);
+
+ centerOnScreen(&view);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+ QTRY_COMPARE(QApplication::focusWidget(), sb);
+
+ QTest::keyClick(sb, Qt::Key_1, Qt::NoModifier);
+ QPoint clickpos = view.visualRect(model.index(0, 0)).center();
+ QTest::mouseDClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, clickpos);
+
+ QCOMPARE(model.data(model.index(0, 1)).toInt(), 1);
+}
+
+void tst_QAbstractItemView::removeIndexWhileEditing()
+{
+ QTreeView view;
+ QStandardItemModel treeModel;
+ auto editableItem1 = new QStandardItem("aa");
+ auto editableItem2 = new QStandardItem("ab");
+ auto editableItem3 = new QStandardItem("ac");
+ auto item = new QStandardItem("a");
+ item->appendRow(editableItem1);
+ item->appendRow(editableItem2);
+ item->appendRow(editableItem3);
+ treeModel.setItem(0, 0, item);
+ QSortFilterProxyModel filterModel;
+ filterModel.setSourceModel(&treeModel);
+ view.setModel(&filterModel);
+ view.show();
+
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ view.setExpanded(item->index(), true);
+
+ filterModel.setFilterRegularExpression("a.*");
+
+ QTest::failOnWarning(QRegularExpression("QAbstractItemView::closeEditor called with an editor "
+ "that does not belong to this view"));
+
+ // Verify that we shut editing down cleanly if the index we are editing is
+ // filtered out after committing
+ {
+ const QModelIndex filteredIndex = filterModel.mapFromSource(editableItem1->index());
+ QVERIFY(filteredIndex.isValid());
+ view.edit(filteredIndex);
+ QCOMPARE(view.state(), QAbstractItemView::EditingState);
+ QTRY_VERIFY(QApplication::focusWidget());
+ QPointer<QLineEdit> lineEdit = qobject_cast<QLineEdit *>(QApplication::focusWidget());
+ QVERIFY(lineEdit);
+ lineEdit->setText("c");
+ QTest::keyClick(lineEdit, Qt::Key_Enter);
+ QTRY_VERIFY(!lineEdit);
+ QCOMPARE(editableItem1->data(Qt::DisplayRole), "c");
+ QCOMPARE(view.state(), QAbstractItemView::NoState);
+ }
+
+ // If we change the filter while we edit, then we should clean up state as well
+ {
+ const QModelIndex filteredIndex = filterModel.mapFromSource(editableItem2->index());
+ QVERIFY(filteredIndex.isValid());
+ view.edit(filteredIndex);
+ QCOMPARE(view.state(), QAbstractItemView::EditingState);
+ QTRY_VERIFY(QApplication::focusWidget());
+ QPointer<QLineEdit> lineEdit = qobject_cast<QLineEdit *>(QApplication::focusWidget());
+ QVERIFY(lineEdit);
+ filterModel.setFilterFixedString("c");
+ QVERIFY(!filterModel.mapFromSource(editableItem2->index()).isValid());
+ QTRY_VERIFY(!lineEdit);
+ QCOMPARE(view.state(), QAbstractItemView::NoState);
+ }
+}
+
+void tst_QAbstractItemView::focusNextOnHide()
+{
+ QWidget widget;
+ QTableWidget table(10, 10);
+ table.setTabKeyNavigation(true);
+ QLineEdit lineEdit;
+
+ QHBoxLayout layout;
+ layout.addWidget(&table);
+ layout.addWidget(&lineEdit);
+ widget.setLayout(&layout);
+
+ widget.setTabOrder({&table, &lineEdit});
+
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+
+ QVERIFY(table.hasFocus());
+ QCOMPARE(table.currentIndex(), table.model()->index(0, 0));
+ QTest::keyPress(&table, Qt::Key_Tab);
+ QCOMPARE(table.currentIndex(), table.model()->index(0, 1));
+
+ table.hide();
+ QCOMPARE(table.currentIndex(), table.model()->index(0, 1));
+ QVERIFY(lineEdit.hasFocus());
+}
QTEST_MAIN(tst_QAbstractItemView)
#include "tst_qabstractitemview.moc"
diff --git a/tests/auto/widgets/itemviews/qcolumnview/CMakeLists.txt b/tests/auto/widgets/itemviews/qcolumnview/CMakeLists.txt
index 886971004b..8cf19c703e 100644
--- a/tests/auto/widgets/itemviews/qcolumnview/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qcolumnview/CMakeLists.txt
@@ -1,14 +1,21 @@
-# Generated from qcolumnview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcolumnview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcolumnview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcolumnview
SOURCES
../../../../shared/fakedirmodel.h
tst_qcolumnview.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp
index 6dd39d5d2a..1ff9973e00 100644
--- a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp
+++ b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.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 <QColumnView>
#include <QScrollBar>
@@ -522,11 +497,11 @@ void tst_QColumnView::selectAll()
view.setModel(&m_fakeDirModel);
view.selectAll();
- QVERIFY(view.selectionModel()->selectedIndexes().count() >= 0);
+ QVERIFY(view.selectionModel()->selectedIndexes().size() >= 0);
view.setCurrentIndex(m_fakeDirHomeIndex);
view.selectAll();
- QVERIFY(view.selectionModel()->selectedIndexes().count() > 0);
+ QVERIFY(view.selectionModel()->selectedIndexes().size() > 0);
QModelIndex file;
for (int i = 0; i < m_fakeDirModel.rowCount(m_fakeDirHomeIndex); ++i) {
@@ -537,10 +512,10 @@ void tst_QColumnView::selectAll()
}
view.setCurrentIndex(file);
view.selectAll();
- QVERIFY(view.selectionModel()->selectedIndexes().count() > 0);
+ QVERIFY(view.selectionModel()->selectedIndexes().size() > 0);
view.setCurrentIndex(QModelIndex());
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 0);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 0);
}
void tst_QColumnView::clicked()
@@ -561,13 +536,13 @@ void tst_QColumnView::clicked()
QPoint localPoint = view.visualRect(m_fakeDirHomeIndex).center();
QTest::mouseClick(view.viewport(), Qt::LeftButton, {}, localPoint);
- QCOMPARE(clickedSpy.count(), 1);
+ QCOMPARE(clickedSpy.size(), 1);
QCoreApplication::processEvents();
if (sizeof(qreal) != sizeof(double))
QSKIP("Skipped due to rounding errors");
- for (int i = 0; i < view.createdColumns.count(); ++i) {
+ for (int i = 0; i < view.createdColumns.size(); ++i) {
QAbstractItemView *column = view.createdColumns.at(i);
if (column && column->selectionModel() && (column->rootIndex() == m_fakeDirHomeIndex))
QVERIFY(column->selectionModel()->selectedIndexes().isEmpty());
@@ -585,7 +560,7 @@ void tst_QColumnView::selectedColumns()
QTest::qWait(ANIMATION_DELAY);
- for (int i = 0; i < view.createdColumns.count(); ++i) {
+ for (int i = 0; i < view.createdColumns.size(); ++i) {
QAbstractItemView *column = view.createdColumns.at(i);
if (!column)
continue;
@@ -616,7 +591,7 @@ void tst_QColumnView::setSelectionModel()
view.setSelectionModel(selectionModel);
bool found = false;
- for (int i = 0; i < view.createdColumns.count(); ++i) {
+ for (int i = 0; i < view.createdColumns.size(); ++i) {
if (view.createdColumns.at(i)->selectionModel() == selectionModel) {
found = true;
break;
@@ -656,7 +631,7 @@ void tst_QColumnView::moveGrip_basic()
view.setMinimumWidth(200);
grip->moveGrip(-800);
QCOMPARE(view.width(), 200);
- QCOMPARE(spy.count(), 5);
+ QCOMPARE(spy.size(), 5);
}
void tst_QColumnView::moveGrip_data()
@@ -684,7 +659,7 @@ void tst_QColumnView::moveGrip()
topLevel.show();
QVERIFY(QTest::qWaitForWindowActive(&topLevel));
- int columnNum = view.createdColumns.count() - 2;
+ int columnNum = view.createdColumns.size() - 2;
QVERIFY(columnNum >= 0);
const QObjectList list = view.createdColumns[columnNum]->children();
QColumnViewGrip *grip = nullptr;
@@ -712,7 +687,7 @@ void tst_QColumnView::doubleClick()
QCOMPARE(view.width(), 200);
QTest::mouseDClick(grip, Qt::LeftButton);
QCOMPARE(view.width(), view.sizeHint().width());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QColumnView::gripMoved()
@@ -736,7 +711,7 @@ void tst_QColumnView::gripMoved()
QCoreApplication::processEvents();
QTest::mouseRelease(grip, Qt::LeftButton);
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QCOMPARE(view.width(), oldWidth + 65);
}
@@ -801,7 +776,7 @@ void tst_QColumnView::setPreviewWidget()
void tst_QColumnView::sizes()
{
QColumnView view;
- QCOMPARE(view.columnWidths().count(), 0);
+ QCOMPARE(view.columnWidths().size(), 0);
const QList<int> newSizes{ 10, 4, 50, 6 };
@@ -812,16 +787,16 @@ void tst_QColumnView::sizes()
view.setModel(&m_fakeDirModel);
view.setCurrentIndex(m_fakeDirHomeIndex);
- QList<int> postSizes = view.columnWidths().mid(0, newSizes.count());
- QCOMPARE(postSizes, newSizes.mid(0, postSizes.count()));
+ QList<int> postSizes = view.columnWidths().mid(0, newSizes.size());
+ QCOMPARE(postSizes, newSizes.mid(0, postSizes.size()));
- QVERIFY(view.columnWidths().count() > 1);
+ QVERIFY(view.columnWidths().size() > 1);
QList<int> smallerSizes{ 6 };
view.setColumnWidths(smallerSizes);
QList<int> expectedSizes = newSizes;
expectedSizes[0] = 6;
- postSizes = view.columnWidths().mid(0, newSizes.count());
- QCOMPARE(postSizes, expectedSizes.mid(0, postSizes.count()));
+ postSizes = view.columnWidths().mid(0, newSizes.size());
+ QCOMPARE(postSizes, expectedSizes.mid(0, postSizes.size()));
}
void tst_QColumnView::rowDelegate()
@@ -831,7 +806,7 @@ void tst_QColumnView::rowDelegate()
view.setItemDelegateForRow(3, d);
view.setModel(&m_fakeDirModel);
- for (int i = 0; i < view.createdColumns.count(); ++i) {
+ for (int i = 0; i < view.createdColumns.size(); ++i) {
QAbstractItemView *column = view.createdColumns.at(i);
QCOMPARE(column->itemDelegateForRow(3), d);
}
@@ -981,7 +956,7 @@ void tst_QColumnView::dynamicModelChanges()
model.appendRow(item);
QVERIFY(QTest::qWaitForWindowExposed(&view)); //let the time for painting to occur
- QTRY_COMPARE(delegate.paintedIndexes.count(), 1);
+ QTRY_COMPARE(delegate.paintedIndexes.size(), 1);
QCOMPARE(*delegate.paintedIndexes.begin(), model.index(0,0));
}
diff --git a/tests/auto/widgets/itemviews/qdatawidgetmapper/CMakeLists.txt b/tests/auto/widgets/itemviews/qdatawidgetmapper/CMakeLists.txt
index 325e8af9b0..e4b2c52fb2 100644
--- a/tests/auto/widgets/itemviews/qdatawidgetmapper/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qdatawidgetmapper/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qdatawidgetmapper.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdatawidgetmapper Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdatawidgetmapper LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdatawidgetmapper
SOURCES
tst_qdatawidgetmapper.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/itemviews/qdatawidgetmapper/tst_qdatawidgetmapper.cpp b/tests/auto/widgets/itemviews/qdatawidgetmapper/tst_qdatawidgetmapper.cpp
index 856672b957..82398cd6bb 100644
--- a/tests/auto/widgets/itemviews/qdatawidgetmapper/tst_qdatawidgetmapper.cpp
+++ b/tests/auto/widgets/itemviews/qdatawidgetmapper/tst_qdatawidgetmapper.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 <QComboBox>
#include <QDataWidgetMapper>
@@ -36,6 +11,8 @@
#include <QTextEdit>
#include <QVBoxLayout>
+#include <QtWidgets/private/qapplication_p.h>
+
class tst_QDataWidgetMapper: public QObject
{
Q_OBJECT
@@ -277,22 +254,22 @@ void tst_QDataWidgetMapper::currentIndexChanged()
QSignalSpy spy(&mapper, &QDataWidgetMapper::currentIndexChanged);
mapper.toFirst();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.takeFirst().at(0).toInt(), 0);
mapper.toNext();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.takeFirst().at(0).toInt(), 1);
mapper.setCurrentIndex(7);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.takeFirst().at(0).toInt(), 7);
mapper.setCurrentIndex(-1);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
mapper.setCurrentIndex(42);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QDataWidgetMapper::changingValues()
@@ -443,27 +420,27 @@ void tst_QDataWidgetMapper::textEditDoesntChangeFocusOnTab_qtbug3305()
container.show();
- QApplication::setActiveWindow(&container);
+ QApplicationPrivate::setActiveWindow(&container);
QVERIFY(QTest::qWaitForWindowActive(&container));
int closeEditorSpyCount = 0;
const QString textEditContents = textEdit->toPlainText();
- QCOMPARE(closeEditorSpy.count(), closeEditorSpyCount);
+ QCOMPARE(closeEditorSpy.size(), closeEditorSpyCount);
QVERIFY(lineEdit->hasFocus());
QVERIFY(!textEdit->hasFocus());
// this will generate a closeEditor for the tab key, and another for the focus out
QTest::keyClick(QApplication::focusWidget(), Qt::Key_Tab);
closeEditorSpyCount += 2;
- QTRY_COMPARE(closeEditorSpy.count(), closeEditorSpyCount);
+ QTRY_COMPARE(closeEditorSpy.size(), closeEditorSpyCount);
QTRY_VERIFY(textEdit->hasFocus());
QVERIFY(!lineEdit->hasFocus());
// now that the text edit is focused, a tab keypress will insert a tab, not change focus
QTest::keyClick(QApplication::focusWidget(), Qt::Key_Tab);
- QTRY_COMPARE(closeEditorSpy.count(), closeEditorSpyCount);
+ QTRY_COMPARE(closeEditorSpy.size(), closeEditorSpyCount);
QVERIFY(!lineEdit->hasFocus());
QVERIFY(textEdit->hasFocus());
@@ -474,7 +451,7 @@ void tst_QDataWidgetMapper::textEditDoesntChangeFocusOnTab_qtbug3305()
QTRY_VERIFY(lineEdit->hasFocus());
QVERIFY(!textEdit->hasFocus());
++closeEditorSpyCount;
- QCOMPARE(closeEditorSpy.count(), closeEditorSpyCount);
+ QCOMPARE(closeEditorSpy.size(), closeEditorSpyCount);
}
QTEST_MAIN(tst_QDataWidgetMapper)
diff --git a/tests/auto/widgets/itemviews/qfileiconprovider/CMakeLists.txt b/tests/auto/widgets/itemviews/qfileiconprovider/CMakeLists.txt
index 4f626e3b8c..88ded71aac 100644
--- a/tests/auto/widgets/itemviews/qfileiconprovider/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qfileiconprovider/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qfileiconprovider.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfileiconprovider Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfileiconprovider LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfileiconprovider
SOURCES
tst_qfileiconprovider.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/itemviews/qfileiconprovider/tst_qfileiconprovider.cpp b/tests/auto/widgets/itemviews/qfileiconprovider/tst_qfileiconprovider.cpp
index 39f6946b1d..3cba6dbf8b 100644
--- a/tests/auto/widgets/itemviews/qfileiconprovider/tst_qfileiconprovider.cpp
+++ b/tests/auto/widgets/itemviews/qfileiconprovider/tst_qfileiconprovider.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 <QFileIconProvider>
@@ -73,6 +48,7 @@ void tst_QFileIconProvider::iconType_data()
// public QIcon icon(QFileIconProvider::IconType const& type) const
void tst_QFileIconProvider::iconType()
{
+ QGuiApplication::setDesktopSettingsAware(false);
QFETCH(QFileIconProvider::IconType, type);
QFileIconProvider provider;
QVERIFY(!provider.icon(type).isNull());
diff --git a/tests/auto/widgets/itemviews/qheaderview/BLACKLIST b/tests/auto/widgets/itemviews/qheaderview/BLACKLIST
index b8a4435fe1..7c9152a16c 100644
--- a/tests/auto/widgets/itemviews/qheaderview/BLACKLIST
+++ b/tests/auto/widgets/itemviews/qheaderview/BLACKLIST
@@ -1,5 +1,3 @@
-[stretchAndRestoreLastSection]
-opensuse-leap
# QTBUG-87406
[stretchAndRestoreLastSection]
android
diff --git a/tests/auto/widgets/itemviews/qheaderview/CMakeLists.txt b/tests/auto/widgets/itemviews/qheaderview/CMakeLists.txt
index de83539f56..a13454085c 100644
--- a/tests/auto/widgets/itemviews/qheaderview/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qheaderview/CMakeLists.txt
@@ -1,15 +1,20 @@
-# Generated from qheaderview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qheaderview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qheaderview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qheaderview
SOURCES
tst_qheaderview.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
index 8856a8ef6a..46d97b4da1 100644
--- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
+++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]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 The Qt Company Ltd.
+// Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QHeaderView>
#include <QProxyStyle>
@@ -37,6 +12,7 @@
#include <QTest>
#include <QTreeWidget>
#include <QtWidgets/private/qheaderview_p.h>
+#include <QtWidgets/private/qapplication_p.h>
using BoolList = QList<bool>;
using IntList = QList<int>;
@@ -171,7 +147,7 @@ private slots:
void moveSectionAndReset();
void moveSectionAndRemove();
void saveRestore();
- void restoreQt4State();
+ void QTBUG99487_saveRestoreQt5Compat();
void restoreToMoreColumns();
void restoreToMoreColumnsNoMovedColumns();
void restoreBeforeSetModel();
@@ -250,6 +226,8 @@ private slots:
void testResetCachedSizeHint();
void statusTips();
void testRemovingColumnsViaLayoutChanged();
+ void testModelMovingColumns();
+ void testModelMovingRows();
protected:
void setupTestData(bool use_reset_model = false);
@@ -330,6 +308,12 @@ public:
endRemoveRows();
}
+ void moveRow(int from, int to)
+ {
+ beginMoveRows(QModelIndex(), from, from, QModelIndex(), to);
+ endMoveRows();
+ }
+
void removeOneColumn(int col)
{
beginRemoveColumns(QModelIndex(), col, col);
@@ -351,6 +335,12 @@ public:
endRemoveColumns();
}
+ void moveColumn(int from, int to)
+ {
+ beginMoveColumns(QModelIndex(), from, from, QModelIndex(), to);
+ endMoveColumns();
+ }
+
void cleanup()
{
emit layoutAboutToBeChanged();
@@ -492,7 +482,7 @@ void tst_QHeaderView::init()
QSignalSpy spy(view, &QHeaderView::sectionCountChanged);
view->setModel(model);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
view->resize(200,200);
}
@@ -813,10 +803,10 @@ void tst_QHeaderView::visualIndexAt()
for (int i : hidden)
view->setSectionHidden(i, true);
- for (int j = 0; j < from.count(); ++j)
+ for (int j = 0; j < from.size(); ++j)
view->moveSection(from.at(j), to.at(j));
- for (int k = 0; k < coordinate.count(); ++k)
+ for (int k = 0; k < coordinate.size(); ++k)
QTRY_COMPARE(view->visualIndexAt(coordinate.at(k)), visual.at(k));
}
@@ -928,14 +918,14 @@ void tst_QHeaderView::swapSections()
QCOMPARE(view->sectionsMoved(), true);
for (int i = 0; i < view->count(); ++i)
QCOMPARE(view->logicalIndex(i), logical.at(i));
- QCOMPARE(spy1.count(), 4);
+ QCOMPARE(spy1.size(), 4);
logical = { 3, 1, 2, 0 };
view->swapSections(3, 0);
QCOMPARE(view->sectionsMoved(), true);
for (int j = 0; j < view->count(); ++j)
QCOMPARE(view->logicalIndex(j), logical.at(j));
- QCOMPARE(spy1.count(), 6);
+ QCOMPARE(spy1.size(), 6);
}
void tst_QHeaderView::moveSection_data()
@@ -981,9 +971,9 @@ void tst_QHeaderView::moveSection()
QFETCH(const IntList, logical);
QFETCH(int, count);
- QCOMPARE(from.count(), to.count());
- QCOMPARE(from.count(), moved.count());
- QCOMPARE(view->count(), logical.count());
+ QCOMPARE(from.size(), to.size());
+ QCOMPARE(from.size(), moved.size());
+ QCOMPARE(view->count(), logical.size());
QSignalSpy spy1(view, &QHeaderView::sectionMoved);
QCOMPARE(view->sectionsMoved(), false);
@@ -991,7 +981,7 @@ void tst_QHeaderView::moveSection()
for (int h : hidden)
view->setSectionHidden(h, true);
- for (int i = 0; i < from.count(); ++i) {
+ for (int i = 0; i < from.size(); ++i) {
view->moveSection(from.at(i), to.at(i));
QCOMPARE(view->sectionsMoved(), moved.at(i));
}
@@ -999,7 +989,7 @@ void tst_QHeaderView::moveSection()
for (int j = 0; j < view->count(); ++j)
QCOMPARE(view->logicalIndex(j), logical.at(j));
- QCOMPARE(spy1.count(), count);
+ QCOMPARE(spy1.size(), count);
}
void tst_QHeaderView::resizeAndMoveSection_data()
@@ -1184,14 +1174,14 @@ void tst_QHeaderView::resizeWithResizeModes()
QFETCH(const IntList, expected);
view->setStretchLastSection(false);
- for (int i = 0; i < sections.count(); ++i) {
+ for (int i = 0; i < sections.size(); ++i) {
view->resizeSection(i, sections.at(i));
view->setSectionResizeMode(i, modes.at(i));
}
topLevel->show();
QVERIFY(QTest::qWaitForWindowExposed(topLevel));
view->resize(size, size);
- for (int j = 0; j < expected.count(); ++j)
+ for (int j = 0; j < expected.size(); ++j)
QCOMPARE(view->sectionSize(j), expected.at(j));
}
@@ -1218,7 +1208,7 @@ void tst_QHeaderView::moveAndInsertSection()
view->moveSection(from, to);
model->insertRow(insert);
- for (int i = 0; i < mapping.count(); ++i)
+ for (int i = 0; i < mapping.size(); ++i)
QCOMPARE(view->logicalIndex(i), mapping.at(i));
}
@@ -1289,21 +1279,21 @@ void tst_QHeaderView::resizeSection()
view->setSectionsMovable(true);
view->setStretchLastSection(false);
- for (int i = 0; i < logical.count(); ++i)
+ for (int i = 0; i < logical.size(); ++i)
if (logical.at(i) > -1 && logical.at(i) < view->count()) // for now
view->setSectionResizeMode(logical.at(i), mode.at(i));
- for (int j = 0; j < logical.count(); ++j)
+ for (int j = 0; j < logical.size(); ++j)
view->resizeSection(logical.at(j), initial);
QSignalSpy spy(view, &QHeaderView::sectionResized);
- for (int k = 0; k < logical.count(); ++k)
+ for (int k = 0; k < logical.size(); ++k)
view->resizeSection(logical.at(k), size.at(k));
- QCOMPARE(spy.count(), resized);
+ QCOMPARE(spy.size(), resized);
- for (int l = 0; l < logical.count(); ++l)
+ for (int l = 0; l < logical.size(); ++l)
QCOMPARE(view->sectionSize(logical.at(l)), expected.at(l));
}
@@ -1356,19 +1346,19 @@ void tst_QHeaderView::clearSectionSorting()
QSignalSpy sectionClickedSpy(&h, &QHeaderView::sectionClicked);
QVERIFY(sectionClickedSpy.isValid());
- QCOMPARE(sectionClickedSpy.count(), 0);
+ QCOMPARE(sectionClickedSpy.size(), 0);
QSignalSpy sortIndicatorChangedSpy(&h, &QHeaderView::sortIndicatorChanged);
QVERIFY(sortIndicatorChangedSpy.isValid());
- QCOMPARE(sortIndicatorChangedSpy.count(), 0);
+ QCOMPARE(sortIndicatorChangedSpy.size(), 0);
enum { Count = 30 };
// normal behavior: clicking multiple times will just toggle the sort indicator
for (int i = 0; i < Count; ++i) {
QTest::mouseClick(h.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(5, 5));
- QCOMPARE(sectionClickedSpy.count(), i + 1);
- QCOMPARE(sortIndicatorChangedSpy.count(), i + 1);
+ QCOMPARE(sectionClickedSpy.size(), i + 1);
+ QCOMPARE(sortIndicatorChangedSpy.size(), i + 1);
QCOMPARE(h.sortIndicatorSection(), 0);
const auto expectedOrder = (i % 2) == 0 ? Qt::AscendingOrder : Qt::DescendingOrder;
QCOMPARE(h.sortIndicatorOrder(), expectedOrder);
@@ -1385,8 +1375,8 @@ void tst_QHeaderView::clearSectionSorting()
// clearing behavior: clicking multiple times will be tristate (asc, desc, nothing)
for (int i = 0; i < Count; ++i) {
QTest::mouseClick(h.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(5, 5));
- QCOMPARE(sectionClickedSpy.count(), i + 1);
- QCOMPARE(sortIndicatorChangedSpy.count(), i + 1);
+ QCOMPARE(sectionClickedSpy.size(), i + 1);
+ QCOMPARE(sortIndicatorChangedSpy.size(), i + 1);
switch (i % 3) {
case 0:
QCOMPARE(h.sortIndicatorSection(), 0);
@@ -1511,11 +1501,11 @@ void tst_QHeaderView::testEvent()
void protected_QHeaderView::testEvent()
{
// No crashy please
- QHoverEvent enterEvent(QEvent::HoverEnter, QPoint(), QPoint());
+ QHoverEvent enterEvent(QEvent::HoverEnter, QPoint(), QPoint(), QPoint());
event(&enterEvent);
- QHoverEvent eventLeave(QEvent::HoverLeave, QPoint(), QPoint());
+ QHoverEvent eventLeave(QEvent::HoverLeave, QPoint(), QPoint(), QPoint());
event(&eventLeave);
- QHoverEvent eventMove(QEvent::HoverMove, QPoint(), QPoint());
+ QHoverEvent eventMove(QEvent::HoverMove, QPoint(), QPoint(), QPoint());
event(&eventMove);
}
@@ -1630,7 +1620,7 @@ void tst_QHeaderView::focusPolicy()
widget.show();
widget.setFocus(Qt::OtherFocusReason);
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&widget));
QVERIFY(widget.hasFocus());
@@ -1735,18 +1725,26 @@ static QByteArray savedState()
return h1.saveState();
}
-void tst_QHeaderView::saveRestore()
+// As generated by savedState()
+static const QByteArray qt5SavedSate = QByteArrayLiteral("\x00\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x02\x01\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\b\x00\x00\x00\x01\x00\x00\x00\x03\x00\x00\x00""d\x00\x00\x00\xD2\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00""d\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00""d\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\n\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00""d\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x03\xE8\x00\x00\x00\x00\x00\x00\x00\x00\x00");
+
+enum class SaveRestoreOption
+{
+ CheckGeneratedState,
+ DoNotCheckGeneratedState,
+};
+
+static void saveRestoreImpl(const QByteArray &state, SaveRestoreOption option)
{
QStandardItemModel m(4, 4);
- const QByteArray s1 = savedState();
QHeaderView h2(Qt::Vertical);
QSignalSpy spy(&h2, &QHeaderView::sortIndicatorChanged);
h2.setModel(&m);
- QVERIFY(h2.restoreState(s1));
+ QVERIFY(h2.restoreState(state));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toInt(), 2);
QCOMPARE(h2.logicalIndex(0), 2);
@@ -1759,50 +1757,28 @@ void tst_QHeaderView::saveRestore()
QVERIFY(h2.isSectionHidden(3));
QCOMPARE(h2.hiddenSectionCount(), 1);
- QByteArray s2 = h2.saveState();
- QCOMPARE(s1, s2);
+ switch (option) {
+ case SaveRestoreOption::CheckGeneratedState:
+ {
+ QByteArray s2 = h2.saveState();
+ QCOMPARE(state, s2);
+ break;
+ }
+ case SaveRestoreOption::DoNotCheckGeneratedState:
+ break;
+ };
QVERIFY(!h2.restoreState(QByteArrayLiteral("Garbage")));
}
-void tst_QHeaderView::restoreQt4State()
+void tst_QHeaderView::saveRestore()
{
-#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
- // QTBUG-40462
- // Setting from Qt4, where information about multiple sections were grouped together in one
- // sectionItem object
- QStandardItemModel m(4, 10);
- QHeaderView h2(Qt::Vertical);
- QByteArray settings_qt4 =
- QByteArray::fromHex("000000ff00000000000000010000000100000000010000000000000000000000000000"
- "0000000003e80000000a0101000100000000000000000000000064ffffffff00000081"
- "0000000000000001000003e80000000a00000000");
- QVERIFY(h2.restoreState(settings_qt4));
- int sectionItemsLengthTotal = 0;
- for (int i = 0; i < h2.count(); ++i)
- sectionItemsLengthTotal += h2.sectionSize(i);
- QCOMPARE(sectionItemsLengthTotal, h2.length());
-
- // Buggy setting where sum(sectionItems) != length. Check false is returned and this corrupted
- // state isn't restored
- QByteArray settings_buggy_length =
- QByteArray::fromHex("000000ff000000000000000100000000000000050100000000000000000000000a4000"
- "000000010000000600000258000000fb0000000a010100010000000000000000000000"
- "0064ffffffff00000081000000000000000a000000d30000000100000000000000c800"
- "000001000000000000008000000001000000000000005c00000001000000000000003c"
- "0000000100000000000002580000000100000000000000000000000100000000000002"
- "580000000100000000000002580000000100000000000003c000000001000000000000"
- "03e8");
- int old_length = h2.length();
- QByteArray old_state = h2.saveState();
- // Check setting is correctly recognized as corrupted
- QVERIFY(!h2.restoreState(settings_buggy_length));
- // Check nothing has been actually restored
- QCOMPARE(h2.length(), old_length);
- QCOMPARE(h2.saveState(), old_state);
-#else
- QSKIP("Qt4 compatibility no longer needed in Qt6");
-#endif
+ saveRestoreImpl(savedState(), SaveRestoreOption::CheckGeneratedState);
+}
+
+void tst_QHeaderView::QTBUG99487_saveRestoreQt5Compat()
+{
+ saveRestoreImpl(qt5SavedSate, SaveRestoreOption::DoNotCheckGeneratedState);
}
void tst_QHeaderView::restoreToMoreColumns()
@@ -2072,9 +2048,9 @@ void tst_QHeaderView::sectionPressedSignal()
QSignalSpy spy(&h, &QHeaderView::sectionPressed);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QTest::mousePress(h.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(5, 5));
- QCOMPARE(spy.count(), count);
+ QCOMPARE(spy.size(), count);
}
void tst_QHeaderView::sectionClickedSignal()
@@ -2094,19 +2070,19 @@ void tst_QHeaderView::sectionClickedSignal()
QSignalSpy spy(&h, &QHeaderView::sectionClicked);
QSignalSpy spy2(&h, &QHeaderView::sortIndicatorChanged);
- QCOMPARE(spy.count(), 0);
- QCOMPARE(spy2.count(), 0);
+ QCOMPARE(spy.size(), 0);
+ QCOMPARE(spy2.size(), 0);
QTest::mouseClick(h.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(5, 5));
- QCOMPARE(spy.count(), count);
- QCOMPARE(spy2.count(), count);
+ QCOMPARE(spy.size(), count);
+ QCOMPARE(spy2.size(), count);
//now let's try with the sort indicator hidden (the result should be the same
spy.clear();
spy2.clear();
h.setSortIndicatorShown(false);
QTest::mouseClick(h.viewport(), Qt::LeftButton, Qt::NoModifier, QPoint(5, 5));
- QCOMPARE(spy.count(), count);
- QCOMPARE(spy2.count(), count);
+ QCOMPARE(spy.size(), count);
+ QCOMPARE(spy2.size(), count);
}
void tst_QHeaderView::defaultSectionSize_data()
@@ -2222,6 +2198,9 @@ void tst_QHeaderView::preserveHiddenSectionWidth()
void tst_QHeaderView::invisibleStretchLastSection()
{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("eglfs"), Qt::CaseInsensitive))
+ QSKIP("EGLFS does not allow resizing on top window");
+
int count = 6;
QStandardItemModel model(1, count);
QHeaderView view(Qt::Horizontal);
@@ -2287,7 +2266,7 @@ void tst_QHeaderView::task236450_hidden()
for (int i : hide1)
view.hideSection(i);
- QCOMPARE(view.hiddenSectionCount(), hide1.count());
+ QCOMPARE(view.hiddenSectionCount(), hide1.size());
for (int i = 0; i < 6; i++)
QCOMPARE(!view.isSectionHidden(i), !hide1.contains(i));
@@ -2295,13 +2274,13 @@ void tst_QHeaderView::task236450_hidden()
view.scheduleDelayedItemsLayout();
view.executeDelayedItemsLayout(); //force to do a relayout
- QCOMPARE(view.hiddenSectionCount(), hide1.count());
+ QCOMPARE(view.hiddenSectionCount(), hide1.size());
for (int i = 0; i < 6; i++) {
QCOMPARE(!view.isSectionHidden(i), !hide1.contains(i));
view.setSectionHidden(i, hide2.contains(i));
}
- QCOMPARE(view.hiddenSectionCount(), hide2.count());
+ QCOMPARE(view.hiddenSectionCount(), hide2.size());
for (int i = 0; i < 6; i++)
QCOMPARE(!view.isSectionHidden(i), !hide2.contains(i));
}
@@ -2333,10 +2312,10 @@ void tst_QHeaderView::task248050_hideRow()
//returns 0 if everything is fine.
static int checkHeaderViewOrder(const QHeaderView *view, const IntList &expected)
{
- if (view->count() != expected.count())
+ if (view->count() != expected.size())
return 1;
- for (int i = 0; i < expected.count(); i++) {
+ for (int i = 0; i < expected.size(); i++) {
if (view->logicalIndex(i) != expected.at(i))
return i + 10;
if (view->visualIndex(expected.at(i)) != i)
@@ -2427,8 +2406,8 @@ void tst_QHeaderView::QTBUG7833_sectionClicked()
QTest::mouseClick(tv.horizontalHeader()->viewport(), Qt::LeftButton, Qt::NoModifier,
QPoint(tv.horizontalHeader()->sectionViewportPosition(11) +
tv.horizontalHeader()->sectionSize(11) / 2, 5));
- QCOMPARE(clickedSpy.count(), 1);
- QCOMPARE(pressedSpy.count(), 1);
+ QCOMPARE(clickedSpy.size(), 1);
+ QCOMPARE(pressedSpy.size(), 1);
QCOMPARE(clickedSpy.at(0).at(0).toInt(), 11);
QCOMPARE(pressedSpy.at(0).at(0).toInt(), 11);
@@ -2436,8 +2415,8 @@ void tst_QHeaderView::QTBUG7833_sectionClicked()
QPoint(tv.horizontalHeader()->sectionViewportPosition(8) +
tv.horizontalHeader()->sectionSize(0) / 2, 5));
- QCOMPARE(clickedSpy.count(), 2);
- QCOMPARE(pressedSpy.count(), 2);
+ QCOMPARE(clickedSpy.size(), 2);
+ QCOMPARE(pressedSpy.size(), 2);
QCOMPARE(clickedSpy.at(1).at(0).toInt(), 8);
QCOMPARE(pressedSpy.at(1).at(0).toInt(), 8);
@@ -2445,8 +2424,8 @@ void tst_QHeaderView::QTBUG7833_sectionClicked()
QPoint(tv.horizontalHeader()->sectionViewportPosition(0) +
tv.horizontalHeader()->sectionSize(0) / 2, 5));
- QCOMPARE(clickedSpy.count(), 3);
- QCOMPARE(pressedSpy.count(), 3);
+ QCOMPARE(clickedSpy.size(), 3);
+ QCOMPARE(pressedSpy.size(), 3);
QCOMPARE(clickedSpy.at(2).at(0).toInt(), 0);
QCOMPARE(pressedSpy.at(2).at(0).toInt(), 0);
}
@@ -2573,7 +2552,7 @@ public:
void insertRowAtBeginning()
{
Q_EMIT layoutAboutToBeChanged();
- m_displayNames.insert(0, QStringLiteral("Item %1").arg(m_displayNames.count()));
+ m_displayNames.insert(0, QStringLiteral("Item %1").arg(m_displayNames.size()));
// Rows are always inserted at the beginning, so move all others.
const auto pl = persistentIndexList();
// The vertical header view will have a persistent index stored here on the second call to insertRowAtBeginning.
@@ -2589,7 +2568,7 @@ public:
QModelIndex index(int row, int column, const QModelIndex &) const override { return createIndex(row, column); }
QModelIndex parent(const QModelIndex &) const override { return QModelIndex(); }
- int rowCount(const QModelIndex &) const override { return m_displayNames.count(); }
+ int rowCount(const QModelIndex &) const override { return m_displayNames.size(); }
int columnCount(const QModelIndex &) const override { return 1; }
private:
@@ -2873,10 +2852,6 @@ void tst_QHeaderView::calculateAndCheck(int cppline, const int precalced_compare
int sum_visual = 0;
int sum_logical = 0;
- int sum_size = 0;
- int sum_hidden_size = 0;
- int sum_lookup_visual = 0;
- int sum_lookup_logical = 0;
int chk_visual = 1;
int chk_logical = 1;
@@ -2896,7 +2871,6 @@ void tst_QHeaderView::calculateAndCheck(int cppline, const int precalced_compare
sum_visual += visual;
sum_logical += logical;
- sum_size += ssize;
if (visual >= 0) {
chk_visual %= p2;
@@ -2916,7 +2890,6 @@ void tst_QHeaderView::calculateAndCheck(int cppline, const int precalced_compare
if (view->isSectionHidden(i)) {
view->showSection(i);
int hiddensize = view->sectionSize(i);
- sum_hidden_size += hiddensize;
chk_hidden_size %= p2;
chk_hidden_size += ( (hiddensize + 1) * (i + 1) * p1);
// (hiddensize + 1) in the above to differ between hidden and size 0
@@ -2935,8 +2908,6 @@ void tst_QHeaderView::calculateAndCheck(int cppline, const int precalced_compare
for (int u = 0; u < max_lookup_count; ++u) {
int visu = view->visualIndexAt(u);
int logi = view->logicalIndexAt(u);
- sum_lookup_visual += logi;
- sum_lookup_logical += visu;
chk_lookup_visual %= p2;
chk_lookup_visual *= ( (u + 1) * p1 * (visu + 2));
chk_lookup_logical %= p2;
@@ -3412,7 +3383,7 @@ void tst_QHeaderView::stretchAndRestoreLastSection()
const int someOtherSectionSize = 40;
const int biggerSizeThanAnySection = 50;
- QVERIFY(QTest::qWaitForWindowExposed(&tv));
+ QVERIFY(QTest::qWaitForWindowActive(&tv));
QHeaderView &header = *tv.horizontalHeader();
// set minimum size before resizeSections() is called
@@ -3641,7 +3612,7 @@ void tst_QHeaderView::statusTips()
headerView.setGeometry(QRect(QPoint(QGuiApplication::primaryScreen()->geometry().center() - QPoint(250, 250)),
QSize(500, 500)));
headerView.show();
- QApplication::setActiveWindow(&headerView);
+ QApplicationPrivate::setActiveWindow(&headerView);
QVERIFY(QTest::qWaitForWindowActive(&headerView));
// Ensure it is moved away first and then moved to the relevant section
@@ -3676,5 +3647,41 @@ void tst_QHeaderView::testRemovingColumnsViaLayoutChanged()
// The main point of this test is that the section-size restoring code didn't go out of bounds.
}
+void tst_QHeaderView::testModelMovingColumns()
+{
+ QtTestModel model(10, 10);
+ QHeaderView hv(Qt::Horizontal);
+ hv.setModel(&model);
+ hv.resizeSections(QHeaderView::ResizeToContents);
+ hv.show();
+ hv.hideSection(3);
+ QVERIFY(!hv.isSectionHidden(1));
+ QVERIFY(hv.isSectionHidden(3));
+
+ QPersistentModelIndex index3 = model.index(0, 3);
+ model.moveColumn(3, 1);
+ QCOMPARE(index3.column(), 1);
+ QVERIFY(hv.isSectionHidden(1));
+ QVERIFY(!hv.isSectionHidden(3));
+}
+
+void tst_QHeaderView::testModelMovingRows()
+{
+ QtTestModel model(10, 10);
+ QHeaderView hv(Qt::Vertical);
+ hv.setModel(&model);
+ hv.resizeSections(QHeaderView::ResizeToContents);
+ hv.show();
+ hv.hideSection(3);
+ QVERIFY(!hv.isSectionHidden(1));
+ QVERIFY(hv.isSectionHidden(3));
+
+ QPersistentModelIndex index3 = model.index(3, 0);
+ model.moveRow(3, 1);
+ QCOMPARE(index3.row(), 1);
+ QVERIFY(hv.isSectionHidden(1));
+ QVERIFY(!hv.isSectionHidden(3));
+}
+
QTEST_MAIN(tst_QHeaderView)
#include "tst_qheaderview.moc"
diff --git a/tests/auto/widgets/itemviews/qitemdelegate/BLACKLIST b/tests/auto/widgets/itemviews/qitemdelegate/BLACKLIST
deleted file mode 100644
index 5eda888af6..0000000000
--- a/tests/auto/widgets/itemviews/qitemdelegate/BLACKLIST
+++ /dev/null
@@ -1,6 +0,0 @@
-[enterKey]
-opensuse-42.3 ci
-[testLineEditValidation]
-opensuse-42.3 ci
-[editorKeyPress]
-ubuntu-20.04
diff --git a/tests/auto/widgets/itemviews/qitemdelegate/CMakeLists.txt b/tests/auto/widgets/itemviews/qitemdelegate/CMakeLists.txt
index 50057bbd7c..58a00fdc9d 100644
--- a/tests/auto/widgets/itemviews/qitemdelegate/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qitemdelegate/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qitemdelegate.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qitemdelegate Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qitemdelegate LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qitemdelegate
SOURCES
tst_qitemdelegate.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
Qt::WidgetsPrivate
@@ -17,6 +24,6 @@ qt_internal_add_test(tst_qitemdelegate
#####################################################################
qt_internal_extend_target(tst_qitemdelegate CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
diff --git a/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp b/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp
index ad133b0422..e1488e4484 100644
--- a/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp
+++ b/tests/auto/widgets/itemviews/qitemdelegate/tst_qitemdelegate.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** 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 "../../../shared/highdpi.h"
#include <QTest>
#include <QTimeZone>
+#include <QDateTime>
#include <QTimer>
#include <QTestEventLoop>
#include <QSignalSpy>
@@ -59,6 +35,7 @@
#include <qscreen.h>
#include <QtWidgets/private/qabstractitemdelegate_p.h>
+#include <QtWidgets/private/qapplication_p.h>
Q_DECLARE_METATYPE(QAbstractItemDelegate::EndEditHint)
@@ -230,6 +207,8 @@ private slots:
void dateTextForRole_data();
void dateTextForRole();
+ void reuseEditor();
+
private:
#ifdef QT_BUILD_INTERNAL
struct RoleDelegate : public QItemDelegate
@@ -350,16 +329,15 @@ void tst_QItemDelegate::editorKeyPress()
view.edit(index);
QList<QLineEdit*> lineEditors = view.viewport()->findChildren<QLineEdit *>();
- QCOMPARE(lineEditors.count(), 1);
+ QCOMPARE(lineEditors.size(), 1);
QLineEdit *editor = lineEditors.at(0);
QCOMPARE(editor->selectedText(), initial);
QTest::keyClicks(editor, expected);
QTest::keyClick(editor, Qt::Key_Enter);
- QApplication::processEvents();
- QCOMPARE(index.data().toString(), expected);
+ QTRY_COMPARE(index.data().toString(), expected);
}
void tst_QItemDelegate::doubleEditorNegativeInput()
@@ -379,7 +357,7 @@ void tst_QItemDelegate::doubleEditorNegativeInput()
view.edit(index);
QList<QDoubleSpinBox*> editors = view.viewport()->findChildren<QDoubleSpinBox *>();
- QCOMPARE(editors.count(), 1);
+ QCOMPARE(editors.size(), 1);
QDoubleSpinBox *editor = editors.at(0);
QCOMPARE(editor->value(), double(10));
@@ -696,33 +674,33 @@ void tst_QItemDelegate::testEventFilter()
//For each test we send a key event and check if signals were emitted.
event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
QVERIFY(delegate.eventFilter(&widget, event));
- QCOMPARE(closeEditorSpy.count(), 1);
- QCOMPARE(commitDataSpy.count(), 1);
+ QCOMPARE(closeEditorSpy.size(), 1);
+ QCOMPARE(commitDataSpy.size(), 1);
delete event;
event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Backtab, Qt::NoModifier);
QVERIFY(delegate.eventFilter(&widget, event));
- QCOMPARE(closeEditorSpy.count(), 2);
- QCOMPARE(commitDataSpy.count(), 2);
+ QCOMPARE(closeEditorSpy.size(), 2);
+ QCOMPARE(commitDataSpy.size(), 2);
delete event;
event = new QKeyEvent(QEvent::KeyPress, Qt::Key_Escape, Qt::NoModifier);
QVERIFY(delegate.eventFilter(&widget, event));
- QCOMPARE(closeEditorSpy.count(), 3);
- QCOMPARE(commitDataSpy.count(), 2);
+ QCOMPARE(closeEditorSpy.size(), 3);
+ QCOMPARE(commitDataSpy.size(), 2);
delete event;
event = new QKeyEvent(QEvent::KeyPress, Qt::Key_A, Qt::NoModifier);
QVERIFY(!delegate.eventFilter(&widget, event));
- QCOMPARE(closeEditorSpy.count(), 3);
- QCOMPARE(commitDataSpy.count(), 2);
+ QCOMPARE(closeEditorSpy.size(), 3);
+ QCOMPARE(commitDataSpy.size(), 2);
delete event;
//Subtest focusEvent
event = new QFocusEvent(QEvent::FocusOut);
QVERIFY(!delegate.eventFilter(&widget, event));
- QCOMPARE(closeEditorSpy.count(), 4);
- QCOMPARE(commitDataSpy.count(), 3);
+ QCOMPARE(closeEditorSpy.size(), 4);
+ QCOMPARE(commitDataSpy.size(), 3);
delete event;
}
@@ -769,7 +747,7 @@ void tst_QItemDelegate::dateTimeEditor()
widget.setItem(0, 2, item3);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.editItem(item1);
@@ -785,7 +763,7 @@ void tst_QItemDelegate::dateTimeEditor()
timeEditor->setTime(time.addSecs(60));
widget.clearFocus();
- qApp->setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.setFocus();
widget.editItem(item2);
@@ -1049,7 +1027,7 @@ void tst_QItemDelegate::decoration()
TestItemDelegate delegate;
table.setItemDelegate(&delegate);
table.show();
- QApplication::setActiveWindow(&table);
+ QApplicationPrivate::setActiveWindow(&table);
QVERIFY(QTest::qWaitForWindowActive(&table));
QVariant value;
@@ -1245,7 +1223,7 @@ void tst_QItemDelegate::editorEvent()
QPoint pos = inCheck ? qApp->style()->subElementRect(QStyle::SE_ItemViewItemCheckIndicator, &option, 0).center() + QPoint(checkMargin, 0) : QPoint(200,200);
QEvent *event = new QMouseEvent((QEvent::Type)type,
- pos,
+ pos, pos,
(Qt::MouseButton)button,
(Qt::MouseButton)button,
Qt::NoModifier);
@@ -1304,7 +1282,7 @@ void tst_QItemDelegate::enterKey()
QListView view;
view.setModel(&model);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
view.setFocus();
QVERIFY(QTest::qWaitForWindowActive(&view));
@@ -1338,7 +1316,7 @@ void tst_QItemDelegate::enterKey()
view.edit(index);
QList<QWidget*> lineEditors = view.viewport()->findChildren<QWidget *>(QString::fromLatin1("TheEditor"));
- QCOMPARE(lineEditors.count(), 1);
+ QCOMPARE(lineEditors.size(), 1);
QPointer<QWidget> editor = lineEditors.at(0);
QCOMPARE(editor->hasFocus(), true);
@@ -1364,7 +1342,7 @@ void tst_QItemDelegate::task257859_finalizeEdit()
QListView view;
view.setModel(&model);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
view.setFocus();
QVERIFY(QTest::qWaitForWindowActive(&view));
@@ -1372,7 +1350,7 @@ void tst_QItemDelegate::task257859_finalizeEdit()
view.edit(index);
QList<QLineEdit *> lineEditors = view.viewport()->findChildren<QLineEdit *>();
- QCOMPARE(lineEditors.count(), 1);
+ QCOMPARE(lineEditors.size(), 1);
QPointer<QWidget> editor = lineEditors.at(0);
QCOMPARE(editor->hasFocus(), true);
@@ -1426,7 +1404,7 @@ void tst_QItemDelegate::comboBox()
widget.setItem(0, 0, item1);
widget.show();
QVERIFY(QTest::qWaitForWindowExposed(&widget));
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.editItem(item1);
@@ -1491,7 +1469,7 @@ void tst_QItemDelegate::testLineEditValidation()
view.setItemDelegate(&delegate);
view.show();
view.setFocus();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QPointer<QLineEdit> editor;
@@ -1503,7 +1481,7 @@ void tst_QItemDelegate::testLineEditValidation()
const auto findEditors = [&]() {
return view.findChildren<QLineEdit *>(QStringLiteral("TheEditor"));
};
- QCOMPARE(findEditors().count(), 1);
+ QCOMPARE(findEditors().size(), 1);
editor = findEditors().at(0);
editor->clear();
@@ -1523,7 +1501,7 @@ void tst_QItemDelegate::testLineEditValidation()
view.setCurrentIndex(index);
view.edit(index);
- QTRY_COMPARE(findEditors().count(), 1);
+ QTRY_COMPARE(findEditors().size(), 1);
editor = findEditors().at(0);
editor->clear();
@@ -1545,13 +1523,13 @@ void tst_QItemDelegate::testLineEditValidation()
// reset the view to forcibly close the editor
view.reset();
- QTRY_COMPARE(findEditors().count(), 0);
+ QTRY_COMPARE(findEditors().size(), 0);
// set a valid text again
view.setCurrentIndex(index);
view.edit(index);
- QTRY_COMPARE(findEditors().count(), 1);
+ QTRY_COMPARE(findEditors().size(), 1);
editor = findEditors().at(0);
editor->clear();
@@ -1615,12 +1593,12 @@ void tst_QItemDelegate::dateTextForRole_data()
QDate date(2013, 12, 11);
QTime time(10, 9, 8, 765);
// Ensure we exercise every time-spec variant:
- QTest::newRow("local") << QDateTime(date, time, Qt::LocalTime);
- QTest::newRow("UTC") << QDateTime(date, time, Qt::UTC);
-#if QT_CONFIG(timezone)
+ QTest::newRow("local") << QDateTime(date, time);
+ QTest::newRow("UTC") << QDateTime(date, time, QTimeZone::UTC);
+# if QT_CONFIG(timezone)
QTest::newRow("zone") << QDateTime(date, time, QTimeZone("Europe/Dublin"));
-#endif
- QTest::newRow("offset") << QDateTime(date, time, Qt::OffsetFromUTC, 36000);
+# endif
+ QTest::newRow("offset") << QDateTime(date, time, QTimeZone::fromSecondsAheadOfUtc(36000));
#endif
}
@@ -1643,6 +1621,75 @@ void tst_QItemDelegate::dateTextForRole()
#endif
}
+void tst_QItemDelegate::reuseEditor()
+{
+ class ReusingDelegate: public QItemDelegate {
+ public:
+ using QItemDelegate::QItemDelegate;
+ ~ReusingDelegate()
+ {
+ if (cached)
+ cached->deleteLater();
+ }
+
+ QWidget* createEditor(QWidget* parent,
+ const QStyleOptionViewItem&,
+ const QModelIndex&) const override
+ {
+ auto *cb = new QComboBox(parent);
+ cb->addItem("One");
+ cb->addItem("Two");
+ cb->setEditable(true);
+ return cb;
+ }
+
+ void setEditorData(QWidget* editor, const QModelIndex& index)
+ const override
+ {
+ auto *cb = qobject_cast<QComboBox*>(editor);
+ cb->setCurrentText(index.data(Qt::DisplayRole).toString());
+ }
+
+ void setModelData(QWidget* editor,
+ QAbstractItemModel* model,
+ const QModelIndex& index) const override
+ {
+ auto *cb = qobject_cast<QComboBox*>(editor);
+ model->setData(index, cb->currentText(), Qt::DisplayRole);
+ }
+
+ void destroyEditor(QWidget* editor, const QModelIndex&) const override
+ {
+ auto *cb = qobject_cast<QComboBox*>(editor);
+ cb->setParent(nullptr); // How to completely detach the editor from treeview ?
+ cb->hide();
+ cb->setEnabled(false);
+ cached = cb;
+ }
+
+ private:
+ mutable QComboBox* cached = nullptr;
+ };
+
+ QStandardItemModel model;
+ model.appendRow(new QStandardItem("One"));
+ model.appendRow(new QStandardItem("Two"));
+
+ ReusingDelegate delegate;
+
+ QTreeView tree;
+ tree.setModel(&model);
+ tree.setItemDelegate(&delegate);
+
+ tree.show();
+ QVERIFY(QTest::qWaitForWindowActive(&tree));
+
+ tree.edit(model.index(0, 0));
+ QTRY_VERIFY(qobject_cast<QComboBox *>(tree.focusWidget()));
+
+ tree.close();
+}
+
// ### _not_ covered:
// editing with a custom editor factory
diff --git a/tests/auto/widgets/itemviews/qitemeditorfactory/CMakeLists.txt b/tests/auto/widgets/itemviews/qitemeditorfactory/CMakeLists.txt
index e57ee0d01c..608c323b44 100644
--- a/tests/auto/widgets/itemviews/qitemeditorfactory/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qitemeditorfactory/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qitemeditorfactory.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qitemeditorfactory Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qitemeditorfactory LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qitemeditorfactory
SOURCES
tst_qitemeditorfactory.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/itemviews/qitemeditorfactory/tst_qitemeditorfactory.cpp b/tests/auto/widgets/itemviews/qitemeditorfactory/tst_qitemeditorfactory.cpp
index 6f176c4ba5..dcd751c696 100644
--- a/tests/auto/widgets/itemviews/qitemeditorfactory/tst_qitemeditorfactory.cpp
+++ b/tests/auto/widgets/itemviews/qitemeditorfactory/tst_qitemeditorfactory.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 <QDoubleSpinBox>
diff --git a/tests/auto/widgets/itemviews/qitemview/CMakeLists.txt b/tests/auto/widgets/itemviews/qitemview/CMakeLists.txt
index 93f10f0fbf..8ff1fd67c9 100644
--- a/tests/auto/widgets/itemviews/qitemview/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qitemview/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qitemview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qitemview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qitemview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qitemview
SOURCES
tst_qitemview.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/itemviews/qitemview/tst_qitemview.cpp b/tests/auto/widgets/itemviews/qitemview/tst_qitemview.cpp
index 244998eb1c..d5a6ddea6e 100644
--- a/tests/auto/widgets/itemviews/qitemview/tst_qitemview.cpp
+++ b/tests/auto/widgets/itemviews/qitemview/tst_qitemview.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 <QRandomGenerator>
#include <QStack>
diff --git a/tests/auto/widgets/itemviews/qitemview/viewstotest.cpp b/tests/auto/widgets/itemviews/qitemview/viewstotest.cpp
index 19f0b80cc6..0c7c17503e 100644
--- a/tests/auto/widgets/itemviews/qitemview/viewstotest.cpp
+++ b/tests/auto/widgets/itemviews/qitemview/viewstotest.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 <QHeaderView>
#include <QListView>
diff --git a/tests/auto/widgets/itemviews/qlistview/BLACKLIST b/tests/auto/widgets/itemviews/qlistview/BLACKLIST
deleted file mode 100644
index ec1c3722bd..0000000000
--- a/tests/auto/widgets/itemviews/qlistview/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-# QTBUG-94250
-[internalDragDropMove]
-opensuse-leap
diff --git a/tests/auto/widgets/itemviews/qlistview/CMakeLists.txt b/tests/auto/widgets/itemviews/qlistview/CMakeLists.txt
index bd440ff203..f6c9f154de 100644
--- a/tests/auto/widgets/itemviews/qlistview/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qlistview/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qlistview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qlistview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qlistview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qlistview
SOURCES
tst_qlistview.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -20,6 +27,6 @@ qt_internal_add_test(tst_qlistview
#####################################################################
qt_internal_extend_target(tst_qlistview CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
index 5ffcb5f80f..fa290d5f6e 100644
--- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
+++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QListWidget>
@@ -43,6 +18,7 @@
#include <QtTest/private/qtesthelpers_p.h>
#include <QtWidgets/private/qlistview_p.h>
+#include <QtWidgets/private/qapplication_p.h>
using namespace QTestPrivate;
@@ -92,8 +68,14 @@ public:
{
return QListView::visualRegionForSelection(selectionModel()->selection());
}
+ void moveEvent(QMoveEvent *e) override
+ {
+ QListView::moveEvent(e);
+ m_gotValidResizeEvent = !e->pos().isNull();
+ }
friend class tst_QListView;
+ bool m_gotValidResizeEvent = false;
};
class tst_QListView : public QObject
@@ -113,6 +95,7 @@ private slots:
void moveCursor2();
void moveCursor3();
void moveCursor4();
+ void moveCursor5();
void indexAt();
void clicked();
void singleSelectionRemoveRow();
@@ -179,6 +162,7 @@ private slots:
void spacingWithWordWrap();
void scrollOnRemove_data();
void scrollOnRemove();
+ void wordWrapNullIcon();
};
// Testing get/set functions
@@ -633,6 +617,26 @@ void tst_QListView::moveCursor4()
QTRY_COMPARE(idx, model.index(actualIndex - 2, 0));
}
+void tst_QListView::moveCursor5()
+{
+ PublicListView listView;
+ QStandardItemModel model;
+ QIcon icon(QPixmap(300,300));
+ model.appendRow(new QStandardItem(icon,"11"));
+ model.appendRow(new QStandardItem(icon,"22"));
+ model.appendRow(new QStandardItem(icon,"33"));
+ listView.setModel(&model);
+ listView.setGeometry(10,10,200,200);
+ listView.setIconSize(QSize(300,300));
+ listView.setViewMode(QListView::IconMode);
+ listView.setCurrentIndex(model.index(0, 0));
+
+ QModelIndex idx = listView.moveCursor(PublicListView::MovePageDown, Qt::NoModifier);
+ QTRY_COMPARE(idx, model.index(1, 0));
+ idx = listView.moveCursor(PublicListView::MovePageUp, Qt::NoModifier);
+ QTRY_COMPARE(idx, model.index(0, 0));
+}
+
class QListViewShowEventListener : public QListView
{
Q_OBJECT
@@ -722,7 +726,7 @@ void tst_QListView::clicked()
continue;
QSignalSpy spy(&view, &QListView::clicked);
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, p);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
}
@@ -1151,7 +1155,7 @@ void tst_QListView::selection()
v.setSelection(selectionRect, QItemSelectionModel::ClearAndSelect);
const QModelIndexList selected = v.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), expectedItems.count());
+ QCOMPARE(selected.size(), expectedItems.size());
for (const auto &idx : selected)
QVERIFY(expectedItems.contains(idx.row()));
}
@@ -1561,7 +1565,7 @@ void tst_QListView::task203585_selectAll()
QVERIFY(view.selectionModel()->selectedIndexes().isEmpty());
view.setRowHidden(0, false);
view.selectAll();
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 1);
}
void tst_QListView::task228566_infiniteRelayout()
@@ -1646,7 +1650,7 @@ void tst_QListView::task196118_visualRegionForSelection()
view.selectionModel()->select(top1.index(), QItemSelectionModel::Select);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 1);
QVERIFY(view.getVisualRegionForSelection().isEmpty());
}
@@ -1703,7 +1707,7 @@ void tst_QListView::keyboardSearch()
QListView view;
view.setModel(&model);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QTest::keyClick(&view, Qt::Key_K);
@@ -1744,7 +1748,7 @@ void tst_QListView::shiftSelectionWithNonUniformItemSizes()
QTRY_COMPARE(view.currentIndex(), model.index(1, 0));
QModelIndexList selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 3);
+ QCOMPARE(selected.size(), 3);
QVERIFY(!selected.contains(model.index(0, 0)));
}
{ // Second test: QListView::TopToBottom flow
@@ -1771,7 +1775,7 @@ void tst_QListView::shiftSelectionWithNonUniformItemSizes()
QTRY_COMPARE(view.currentIndex(), model.index(1, 0));
QModelIndexList selected = view.selectionModel()->selectedIndexes();
- QCOMPARE(selected.count(), 3);
+ QCOMPARE(selected.size(), 3);
QVERIFY(!selected.contains(model.index(0, 0)));
}
}
@@ -1805,7 +1809,7 @@ void tst_QListView::shiftSelectionWithItemAlignment()
view.resize(300, view.sizeHintForRow(0) * items.size() / 2 + view.horizontalScrollBar()->height());
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(static_cast<QWidget *>(&view), QApplication::activeWindow());
@@ -1833,7 +1837,7 @@ void tst_QListView::clickOnViewportClearsSelection()
view.selectAll();
QModelIndex index = model.index(0);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 1);
QVERIFY(view.selectionModel()->isSelected(index));
//we try to click outside of the index
@@ -1841,7 +1845,7 @@ void tst_QListView::clickOnViewportClearsSelection()
QTest::mousePress(view.viewport(), Qt::LeftButton, {}, point);
//at this point, the selection shouldn't have changed
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 1);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 1);
QVERIFY(view.selectionModel()->isSelected(index));
QTest::mouseRelease(view.viewport(), Qt::LeftButton, {}, point);
@@ -1864,7 +1868,7 @@ void tst_QListView::task262152_setModelColumnNavigate()
view.setModelColumn(1);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QCOMPARE(&view, QApplication::activeWindow());
QTest::keyClick(&view, Qt::Key_Down);
@@ -1950,7 +1954,7 @@ void tst_QListView::taskQTBUG_435_deselectOnViewportClick()
view.setModel(&model);
view.setSelectionMode(QAbstractItemView::ExtendedSelection);
view.selectAll();
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount());
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), model.rowCount());
const QRect itemRect = view.visualRect(model.index(model.rowCount() - 1));
@@ -1960,7 +1964,7 @@ void tst_QListView::taskQTBUG_435_deselectOnViewportClick()
QVERIFY(!view.selectionModel()->hasSelection());
view.selectAll();
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount());
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), model.rowCount());
//and now the right button
QTest::mouseClick(view.viewport(), Qt::RightButton, {}, p);
@@ -2566,8 +2570,9 @@ void tst_QListView::taskQTBUG_58749_adjustToContent()
// use the long text and make sure the width is adjusted.
model.setData(model.index(0, 0), longText);
QApplication::processEvents();
- QVERIFY(w.width() > longTextWidth);
- QVERIFY(view->width() >= longTextWidth);
+ const QRect itemRect = view->visualRect(model.index(0, 0));
+ QVERIFY(w.width() > itemRect.width());
+ QCOMPARE_GE(view->width(), itemRect.width());
}
void tst_QListView::taskQTBUG_51086_skippingIndexesInSelectedIndexes()
@@ -2719,9 +2724,9 @@ public:
if (idxPar.isValid()) {
TstMoveItem *parentItem = static_cast<TstMoveItem *>(idxPar.internalPointer());
Q_ASSERT(parentItem);
- cnt = parentItem->childItems.count();
+ cnt = parentItem->childItems.size();
} else {
- cnt = rootItem->childItems.count();
+ cnt = rootItem->childItems.size();
}
return cnt;
}
@@ -2738,9 +2743,9 @@ public:
if (parent.isValid()) {
TstMoveItem *parentItem = static_cast<TstMoveItem *>(parent.internalPointer());
Q_ASSERT(parentItem);
- ret = parentItem->childItems.count() > 0;
+ ret = parentItem->childItems.size() > 0;
} else {
- ret = rootItem->childItems.count() > 0;
+ ret = rootItem->childItems.size() > 0;
}
return ret;
}
@@ -2762,8 +2767,8 @@ public:
TstMoveItem *itmDestParent = itemAt(destinationParent);
if (itmSrcParent && sourceRow >= 0
- && sourceRow + count <= itmSrcParent->childItems.count()
- && itmDestParent && destinationChild <= itmDestParent->childItems.count()) {
+ && sourceRow + count <= itmSrcParent->childItems.size()
+ && itmDestParent && destinationChild <= itmDestParent->childItems.size()) {
beginMoveRows(sourceParent, sourceRow, sourceRow + count - 1,
destinationParent, destinationChild);
QList<TstMoveItem *> itemsToMove;
@@ -2771,7 +2776,7 @@ public:
TstMoveItem *itm = itmSrcParent->childItems.at(sourceRow+i);
itemsToMove.append(itm);
}
- for (int i = itemsToMove.count() -1; i >= 0; --i) {
+ for (int i = itemsToMove.size() -1; i >= 0; --i) {
TstMoveItem *itm = itemsToMove.at(i);
itm->parentItem->childItems.removeAll(itm);
itm->parentItem = itmDestParent;
@@ -2809,7 +2814,7 @@ void tst_QListView::moveLastRow()
view.setViewMode(QListView::IconMode);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QModelIndex sourceParent = model.index(0, 0);
@@ -2996,6 +3001,7 @@ void tst_QListView::internalDragDropMove()
// The test relies on the global position of mouse events; make sure
// the window is properly mapped on X11.
QVERIFY(QTest::qWaitForWindowActive(&list));
+ QVERIFY(QTest::qWaitFor([&]() { return list.m_gotValidResizeEvent; }));
// execute as soon as the eventloop is running again
// which is the case inside list.startDrag()
QTimer::singleShot(0, [&]()
@@ -3060,6 +3066,11 @@ void tst_QListView::spacingWithWordWrap()
}
};
+ QStyle *oldStyle = QApplication::style();
+ oldStyle->setParent(nullptr);
+ const auto resetStyle = qScopeGuard([oldStyle]{
+ QApplication::setStyle(oldStyle);
+ });
QApplication::setStyle(new MyStyle(scrollBarOverlap));
const int listViewResizeCount = 200;
@@ -3173,10 +3184,26 @@ void tst_QListView::scrollOnRemove()
model.removeRow(25);
// if nothing is selected now, then the view should not have scrolled
- if (!view.selectionModel()->selectedIndexes().count())
+ if (!view.selectionModel()->selectedIndexes().size())
QTRY_COMPARE(view.verticalScrollBar()->value(), item25Position);
}
+void tst_QListView::wordWrapNullIcon()
+{
+ QListView listView;
+ listView.setViewMode(QListView::IconMode);
+ listView.setWrapping(true);
+ listView.setWordWrap(true);
+ listView.setFixedSize(QSize(100, 500));
+
+ QStandardItemModel model;
+ QStandardItem *item = new QStandardItem(QIcon(), "This is a long text for word wrapping Item_");
+ model.appendRow(item);
+ listView.setModel(&model);
+
+ listView.indexAt(QPoint(0, 0));
+}
+
QTEST_MAIN(tst_QListView)
#include "tst_qlistview.moc"
diff --git a/tests/auto/widgets/itemviews/qlistwidget/CMakeLists.txt b/tests/auto/widgets/itemviews/qlistwidget/CMakeLists.txt
index 2c02f57324..fea17e1d75 100644
--- a/tests/auto/widgets/itemviews/qlistwidget/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qlistwidget/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qlistwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qlistwidget Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qlistwidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qlistwidget
SOURCES
tst_qlistwidget.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp b/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp
index b121766265..1f46f19569 100644
--- a/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.cpp
+++ b/tests/auto/widgets/itemviews/qlistwidget/tst_qlistwidget.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 <QCompleter>
#include <QHBoxLayout>
@@ -33,8 +8,11 @@
#include <QSignalSpy>
#include <QStyledItemDelegate>
#include <QTest>
+#include <QLabel>
#include <private/qlistwidget_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
using IntList = QList<int>;
class tst_QListWidget : public QObject
@@ -97,6 +75,8 @@ private slots:
void sortItems();
void sortHiddenItems();
void sortHiddenItems_data();
+ void sortCheckStability_data();
+ void sortCheckStability();
void closeEditor();
void setData_data();
void setData();
@@ -128,6 +108,7 @@ private slots:
void moveRows();
void moveRowsInvalid_data();
void moveRowsInvalid();
+ void noopDragDrop();
protected slots:
void rowsAboutToBeInserted(const QModelIndex &parent, int first, int last)
@@ -369,7 +350,7 @@ void tst_QListWidget::addItems()
QString::number(testWidget->count() + 3),
label};
testWidget->addItems(stringList);
- QCOMPARE(testWidget->count(), count + stringList.count());
+ QCOMPARE(testWidget->count(), count + stringList.size());
QCOMPARE(testWidget->item(testWidget->count()-1)->text(), label);
}
@@ -381,30 +362,30 @@ void tst_QListWidget::openPersistentEditor()
QListWidgetItem *item = new QListWidgetItem(QString::number(testWidget->count()));
testWidget->openPersistentEditor(item);
- int childCount = testWidget->viewport()->children().count();
+ int childCount = testWidget->viewport()->children().size();
testWidget->addItem(item);
testWidget->openPersistentEditor(item);
- QCOMPARE(childCount + 1, testWidget->viewport()->children().count());
+ QCOMPARE(childCount + 1, testWidget->viewport()->children().size());
}
void tst_QListWidget::closePersistentEditor()
{
// Boundary checking
- int childCount = testWidget->viewport()->children().count();
+ int childCount = testWidget->viewport()->children().size();
testWidget->closePersistentEditor(nullptr);
QListWidgetItem *item = new QListWidgetItem(QString::number(testWidget->count()));
testWidget->closePersistentEditor(item);
- QCOMPARE(childCount, testWidget->viewport()->children().count());
+ QCOMPARE(childCount, testWidget->viewport()->children().size());
// Create something
testWidget->addItem(item);
testWidget->openPersistentEditor(item);
// actual test
- childCount = testWidget->viewport()->children().count();
+ childCount = testWidget->viewport()->children().size();
testWidget->closePersistentEditor(item);
QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
- QCOMPARE(testWidget->viewport()->children().count(), childCount - 1);
+ QCOMPARE(testWidget->viewport()->children().size(), childCount - 1);
}
void tst_QListWidget::setItemHidden()
@@ -554,7 +535,7 @@ void tst_QListWidget::editItem()
item->setFlags(item->flags() | Qt::ItemIsEditable);
testWidget->addItem(item);
- int childCount = testWidget->viewport()->children().count();
+ int childCount = testWidget->viewport()->children().size();
QWidget *existsAlready = testWidget->indexWidget(testWidget->model()->index(testWidget->row(item), 0));
testWidget->editItem(item);
Qt::ItemFlags flags = item->flags();
@@ -562,7 +543,7 @@ void tst_QListWidget::editItem()
// There doesn't seem to be a way to detect if the item has already been edited...
if (!existsAlready && flags & Qt::ItemIsEditable && flags & Qt::ItemIsEnabled) {
QList<QObject *> children = testWidget->viewport()->children();
- QVERIFY(children.count() > childCount);
+ QVERIFY(children.size() > childCount);
bool found = false;
for (int i = 0; i < children.size(); ++i) {
if (children.at(i)->inherits("QExpandingLineEdit"))
@@ -570,7 +551,7 @@ void tst_QListWidget::editItem()
}
QVERIFY(found);
} else {
- QCOMPARE(testWidget->viewport()->children().count(), childCount);
+ QCOMPARE(testWidget->viewport()->children().size(), childCount);
}
}
@@ -579,12 +560,12 @@ void tst_QListWidget::findItems()
// This really just tests that the items that are returned are converted from index's to items correctly.
// Boundary checking
- QCOMPARE(testWidget->findItems("GirlsCanWearJeansAndCutTheirHairShort", Qt::MatchExactly).count(), 0);
+ QCOMPARE(testWidget->findItems("GirlsCanWearJeansAndCutTheirHairShort", Qt::MatchExactly).size(), 0);
populate();
for (int i = 0; i < testWidget->count(); ++i)
- QCOMPARE(testWidget->findItems(testWidget->item(i)->text(), Qt::MatchExactly).count(), 1);
+ QCOMPARE(testWidget->findItems(testWidget->item(i)->text(), Qt::MatchExactly).size(), 1);
}
@@ -599,8 +580,8 @@ void tst_QListWidget::insertItem_data()
QTest::newRow("Insert less then 0") << initialItems << -1 << "inserted" << 0;
QTest::newRow("Insert at 0") << initialItems << 0 << "inserted" << 0;
- QTest::newRow("Insert beyond count") << initialItems << initialItems.count()+1 << "inserted" << initialItems.count();
- QTest::newRow("Insert at count") << initialItems << initialItems.count() << "inserted" << initialItems.count();
+ QTest::newRow("Insert beyond count") << initialItems << initialItems.size()+1 << "inserted" << initialItems.size();
+ QTest::newRow("Insert at count") << initialItems << initialItems.size() << "inserted" << initialItems.size();
QTest::newRow("Insert in the middle") << initialItems << 1 << "inserted" << 1;
}
@@ -612,7 +593,7 @@ void tst_QListWidget::insertItem()
QFETCH(int, expectedIndex);
testWidget->insertItems(0, initialItems);
- QCOMPARE(testWidget->count(), initialItems.count());
+ QCOMPARE(testWidget->count(), initialItems.size());
testWidget->insertItem(insertIndex, itemLabel);
@@ -621,7 +602,7 @@ void tst_QListWidget::insertItem()
QCOMPARE(rcFirst[RowsInserted], expectedIndex);
QCOMPARE(rcLast[RowsInserted], expectedIndex);
- QCOMPARE(testWidget->count(), initialItems.count() + 1);
+ QCOMPARE(testWidget->count(), initialItems.size() + 1);
QCOMPARE(testWidget->item(expectedIndex)->text(), itemLabel);
}
@@ -694,8 +675,8 @@ void tst_QListWidget::insertItems()
for (int i = 0; i < testWidget->count(); ++i)
QCOMPARE(testWidget->item(i)->listWidget(), testWidget);
- QCOMPARE(itemChangedSpy.count(), 0);
- QCOMPARE(dataChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
+ QCOMPARE(dataChangedSpy.size(), 0);
}
void tst_QListWidget::itemAssignment()
@@ -850,7 +831,7 @@ void tst_QListWidget::selectedItems()
QListWidgetItem *item = testWidget->item(i);
item->setSelected(true);
QVERIFY(item->isSelected());
- QCOMPARE(testWidget->selectedItems().count(), 1);
+ QCOMPARE(testWidget->selectedItems().size(), 1);
}
//let's clear the selection
testWidget->clearSelection();
@@ -868,7 +849,7 @@ void tst_QListWidget::selectedItems()
// check that the correct number of items and the expected items are there
QList<QListWidgetItem *> selectedItems = testWidget->selectedItems();
- QCOMPARE(selectedItems.count(), expectedRows.count());
+ QCOMPARE(selectedItems.size(), expectedRows.size());
for (int row : expectedRows)
QVERIFY(selectedItems.contains(testWidget->item(row)));
@@ -964,20 +945,20 @@ void tst_QListWidget::moveItemsPriv()
else
QCOMPARE(testWidget->item(dstRow)->text(), QString::number(srcRow));
- QCOMPARE(beginMoveSpy.count(), 1);
+ QCOMPARE(beginMoveSpy.size(), 1);
const QList<QVariant> &beginMoveArgs = beginMoveSpy.takeFirst();
QCOMPARE(beginMoveArgs.at(1).toInt(), srcRow);
QCOMPARE(beginMoveArgs.at(2).toInt(), srcRow);
QCOMPARE(beginMoveArgs.at(4).toInt(), dstRow);
- QCOMPARE(movedSpy.count(), 1);
+ QCOMPARE(movedSpy.size(), 1);
const QList<QVariant> &movedArgs = movedSpy.takeFirst();
QCOMPARE(movedArgs.at(1).toInt(), srcRow);
QCOMPARE(movedArgs.at(2).toInt(), srcRow);
QCOMPARE(movedArgs.at(4).toInt(), dstRow);
} else {
- QCOMPARE(beginMoveSpy.count(), 0);
- QCOMPARE(movedSpy.count(), 0);
+ QCOMPARE(beginMoveSpy.size(), 0);
+ QCOMPARE(movedSpy.size(), 0);
}
}
@@ -1070,7 +1051,7 @@ void tst_QListWidget::sortItems()
testWidget->sortItems(order);
- QCOMPARE(testWidget->count(), expectedList.count());
+ QCOMPARE(testWidget->count(), expectedList.size());
for (int i = 0; i < testWidget->count(); ++i)
QCOMPARE(testWidget->item(i)->text(), expectedList.at(i).toString());
@@ -1140,7 +1121,7 @@ void tst_QListWidget::sortHiddenItems()
tw->setSortingEnabled(true);
tw->sortItems(order);
- QCOMPARE(tw->count(), expectedList.count());
+ QCOMPARE(tw->count(), expectedList.size());
for (int i = 0; i < tw->count(); ++i) {
QCOMPARE(tw->item(i)->text(), expectedList.at(i));
QCOMPARE(tw->item(i)->isHidden(), !expectedVisibility.at(i));
@@ -1152,6 +1133,64 @@ void tst_QListWidget::sortHiddenItems()
delete tw;
}
+void tst_QListWidget::sortCheckStability_data() {
+ QTest::addColumn<Qt::SortOrder>("order");
+ QTest::addColumn<QVariantList>("initialList");
+ QTest::addColumn<QVariantList>("expectedList");
+
+ QTest::newRow("ascending strings")
+ << Qt::AscendingOrder
+ << QVariantList{ QString("a"), QString("b"), QString("b"), QString("a")}
+ << QVariantList{ QString("a"), QString("a"), QString("b"), QString("b")};
+
+ QTest::newRow("descending strings")
+ << Qt::DescendingOrder
+ << QVariantList{ QString("a"), QString("b"), QString("b"), QString("a")}
+ << QVariantList{ QString("b"), QString("b"), QString("a"), QString("a")};
+
+ QTest::newRow("ascending numbers")
+ << Qt::AscendingOrder
+ << QVariantList{ 1, 2, 2, 1}
+ << QVariantList{ 1, 1, 2, 2};
+
+ QTest::newRow("descending numbers")
+ << Qt::DescendingOrder
+ << QVariantList{ 1, 2, 2, 1}
+ << QVariantList{ 2, 2, 1, 1};
+}
+
+void tst_QListWidget::sortCheckStability() {
+ QFETCH(Qt::SortOrder, order);
+ QFETCH(const QVariantList, initialList);
+ QFETCH(const QVariantList, expectedList);
+
+ for (const QVariant &data : initialList) {
+ QListWidgetItem *item = new QListWidgetItem(testWidget);
+ item->setData(Qt::DisplayRole, data);
+ }
+
+ QAbstractItemModel *model = testWidget->model();
+ QList<QPersistentModelIndex> persistent;
+ for (int j = 0; j < model->rowCount(QModelIndex()); ++j)
+ persistent << model->index(j, 0, QModelIndex());
+
+ testWidget->sortItems(order);
+
+ QCOMPARE(testWidget->count(), expectedList.size());
+ for (int i = 0; i < testWidget->count(); ++i)
+ QCOMPARE(testWidget->item(i)->text(), expectedList.at(i).toString());
+
+ QVector<QListWidgetItem*> itemOrder(testWidget->count());
+ for (int i = 0; i < testWidget->count(); ++i)
+ itemOrder[i] = testWidget->item(i);
+
+ qobject_cast<QListModel*>(testWidget->model())->ensureSorted(0, order, 1, 1);
+ testWidget->sortItems(order);
+
+ for (int i = 0; i < testWidget->count(); ++i)
+ QCOMPARE(itemOrder[i],testWidget->item(i));
+}
+
class TestListWidget : public QListWidget
{
Q_OBJECT
@@ -1237,17 +1276,17 @@ void tst_QListWidget::setData()
QFETCH(QVariantList, values);
QFETCH(int, expectedSignalCount);
- QCOMPARE(roles.count(), values.count());
+ QCOMPARE(roles.size(), values.size());
for (int manipulateModel = 0; manipulateModel < 2; ++manipulateModel) {
testWidget->clear();
testWidget->insertItems(0, initialItems);
- QCOMPARE(testWidget->count(), initialItems.count());
+ QCOMPARE(testWidget->count(), initialItems.size());
QSignalSpy itemChanged(testWidget, &QListWidget::itemChanged);
QSignalSpy dataChanged(testWidget->model(), &QAbstractItemModel::dataChanged);
- for (int i = 0; i < roles.count(); ++i) {
+ for (int i = 0; i < roles.size(); ++i) {
if (manipulateModel)
testWidget->model()->setData(
testWidget->model()->index(itemIndex, 0, testWidget->rootIndex()),
@@ -1258,12 +1297,12 @@ void tst_QListWidget::setData()
}
// make sure the data is actually set
- for (int i = 0; i < roles.count(); ++i)
+ for (int i = 0; i < roles.size(); ++i)
QCOMPARE(testWidget->item(itemIndex)->data(roles.at(i)), values.at(i));
// make sure we get the right number of emits
- QCOMPARE(itemChanged.count(), expectedSignalCount);
- QCOMPARE(dataChanged.count(), expectedSignalCount);
+ QCOMPARE(itemChanged.size(), expectedSignalCount);
+ QCOMPARE(dataChanged.size(), expectedSignalCount);
}
}
@@ -1405,11 +1444,11 @@ void tst_QListWidget::insertItemsWithSorting()
w.addItem(str);
break;
}
- QCOMPARE(w.count(), expectedItems.count());
+ QCOMPARE(w.count(), expectedItems.size());
for (int i = 0; i < w.count(); ++i)
QCOMPARE(w.item(i)->text(), expectedItems.at(i));
- for (int k = 0; k < persistent.count(); ++k)
+ for (int k = 0; k < persistent.size(); ++k)
QCOMPARE(persistent.at(k).row(), expectedRows.at(k));
}
}
@@ -1505,7 +1544,7 @@ void tst_QListWidget::itemData()
QCOMPARE(widget.currentRoles, QList<int> { Qt::UserRole + i });
}
QMap<int, QVariant> flags = widget.model()->itemData(widget.model()->index(0, 0));
- QCOMPARE(flags.count(), 6);
+ QCOMPARE(flags.size(), 6);
for (int i = 0; i < 4; ++i)
QCOMPARE(flags[Qt::UserRole + i].toString(), QString::number(i + 1));
@@ -1549,19 +1588,19 @@ void tst_QListWidget::changeDataWithSorting()
QListWidgetItem *item = w.item(itemIndex);
item->setText(newValue);
- for (int i = 0; i < expectedItems.count(); ++i) {
+ for (int i = 0; i < expectedItems.size(); ++i) {
QCOMPARE(w.item(i)->text(), expectedItems.at(i));
- for (int j = 0; j < persistent.count(); ++j) {
+ for (int j = 0; j < persistent.size(); ++j) {
if (persistent.at(j).row() == i) // the same toplevel row
QCOMPARE(persistent.at(j).internalPointer(), static_cast<void *>(w.item(i)));
}
}
- for (int k = 0; k < persistent.count(); ++k)
+ for (int k = 0; k < persistent.size(); ++k)
QCOMPARE(persistent.at(k).row(), expectedRows.at(k));
- QCOMPARE(dataChangedSpy.count(), 1);
- QCOMPARE(layoutChangedSpy.count(), reorderingExpected ? 1 : 0);
+ QCOMPARE(dataChangedSpy.size(), 1);
+ QCOMPARE(layoutChangedSpy.size(), reorderingExpected ? 1 : 0);
}
void tst_QListWidget::itemWidget()
@@ -1640,7 +1679,7 @@ void tst_QListWidget::insertUnchanged()
QListWidget w;
QSignalSpy itemChangedSpy(&w, &QListWidget::itemChanged);
QListWidgetItem item("foo", &w);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
}
void tst_QListWidget::setSortingEnabled()
@@ -1731,12 +1770,12 @@ void tst_QListWidget::QTBUG8086_currentItemChangedOnClick()
QVERIFY(QTest::qWaitForWindowExposed(&win));
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QTest::mouseClick(list.viewport(), Qt::LeftButton, {},
list.visualItemRect(list.item(2)).center());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
@@ -1771,7 +1810,7 @@ void tst_QListWidget::QTBUG14363_completerWithAnyKeyPressedEditTriggers()
new QListWidgetItem(QLatin1String("completer"), &listWidget);
listWidget.show();
listWidget.setCurrentItem(item);
- QApplication::setActiveWindow(&listWidget);
+ QApplicationPrivate::setActiveWindow(&listWidget);
QVERIFY(QTest::qWaitForWindowActive(&listWidget));
listWidget.setFocus();
QCOMPARE(QApplication::focusWidget(), &listWidget);
@@ -1835,14 +1874,14 @@ void tst_QListWidget::QTBUG50891_ensureSelectionModelSignalConnectionsAreSet()
QSignalSpy currentItemChangedSpy(&list, &QListWidget::currentItemChanged);
QSignalSpy itemSelectionChangedSpy(&list, &QListWidget::itemSelectionChanged);
- QCOMPARE(currentItemChangedSpy.count(), 0);
- QCOMPARE(itemSelectionChangedSpy.count(), 0);
+ QCOMPARE(currentItemChangedSpy.size(), 0);
+ QCOMPARE(itemSelectionChangedSpy.size(), 0);
QTest::mouseClick(list.viewport(), Qt::LeftButton, {},
list.visualItemRect(list.item(2)).center());
- QCOMPARE(currentItemChangedSpy.count(), 1);
- QCOMPARE(itemSelectionChangedSpy.count(), 1);
+ QCOMPARE(currentItemChangedSpy.size(), 1);
+ QCOMPARE(itemSelectionChangedSpy.size(), 1);
}
@@ -1912,6 +1951,58 @@ void tst_QListWidget::createPersistentOnLayoutAboutToBeChangedAutoSort() // QTBU
QCOMPARE(layoutChangedSpy.size(), 1);
}
+// Test that dropping an item on or beneath itself remains a no-op
+void tst_QListWidget::noopDragDrop() // QTBUG-100128
+{
+ QListWidget listWidget;
+ QList<QListWidgetItem *> items;
+ for (int i = 0; i < 5; ++i) {
+ const QString number = QString::number(i);
+ QListWidgetItem *item = new QListWidgetItem(&listWidget);
+ item->setData(Qt::UserRole, number);
+ QLabel *label = new QLabel(number);
+ listWidget.setItemWidget(item, label);
+ items.append(item);
+ }
+
+ listWidget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&listWidget));
+
+ const QRect &lastItemRect = listWidget.visualItemRect(items.at(4));
+ const QPoint &dragStart = lastItemRect.center();
+ const QPoint &dropPointNirvana = lastItemRect.center() + QPoint(20, 2 * lastItemRect.height());
+
+ // Implement check as a macro (not a method) to safely determine the error location.
+ // The macro checks that item data and item widget remain unchanged when drag&drop are executed.
+ // In order to verify that the assets do *not* change, we can't use QTRY*: These macros would
+ // spin the event loop only once, while 3/4 mouse events need to get processed.
+ // That's why we spin the event loop 13 times, to make sure other unexpected or pending events
+ // get processed.
+#define CHECK_ITEM {\
+ const QString number = QString::number(4);\
+ for (int i = 0; i < 13; ++i)\
+ QApplication::processEvents();\
+ QLabel *label = qobject_cast<QLabel *>(listWidget.itemWidget(items.at(4)));\
+ QVERIFY(label);\
+ QCOMPARE(label->text(), number);\
+ const QString &data = items.at(4)->data(Qt::UserRole).toString();\
+ QCOMPARE(data, number);\
+ }
+
+ // Test dropping last item beneath itself
+ QTest::mousePress(&listWidget, Qt::LeftButton, Qt::KeyboardModifiers(), dragStart);
+ QTest::mouseMove(&listWidget, dropPointNirvana);
+ QTest::mouseRelease(&listWidget, Qt::LeftButton);
+ CHECK_ITEM;
+
+ // Test dropping last item on itself
+ QTest::mousePress(&listWidget, Qt::LeftButton, Qt::KeyboardModifiers(), dragStart);
+ QTest::mouseMove(&listWidget, dropPointNirvana);
+ QTest::mouseMove(&listWidget, dragStart);
+ QTest::mouseRelease(&listWidget, Qt::LeftButton);
+ CHECK_ITEM;
+}
+
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
void tst_QListWidget::clearItemData()
{
diff --git a/tests/auto/widgets/itemviews/qtableview/BLACKLIST b/tests/auto/widgets/itemviews/qtableview/BLACKLIST
index c8fc59bc46..ff870915be 100644
--- a/tests/auto/widgets/itemviews/qtableview/BLACKLIST
+++ b/tests/auto/widgets/itemviews/qtableview/BLACKLIST
@@ -3,10 +3,3 @@ osx
[mouseWheel:scroll down per pixel]
macos
-# QTBUG-87407
-[rowViewportPosition]
-android
-[columnViewportPosition]
-android
-[task191545_dragSelectRows]
-android
diff --git a/tests/auto/widgets/itemviews/qtableview/CMakeLists.txt b/tests/auto/widgets/itemviews/qtableview/CMakeLists.txt
index 23e6a01f7d..af78c0f5d3 100644
--- a/tests/auto/widgets/itemviews/qtableview/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qtableview/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtableview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtableview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtableview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtableview
SOURCES
tst_qtableview.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp
index 6ed3b4ecdd..45a467d423 100644
--- a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp
+++ b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.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 <QIdentityProxyModel>
#include <QLabel>
@@ -77,6 +52,13 @@ public:
: QAbstractTableModel(parent), row_count(rows), column_count(columns)
{}
+ void insertRows(int rows)
+ {
+ beginInsertRows(QModelIndex(), row_count, row_count + rows - 1);
+ row_count += rows;
+ endInsertRows();
+ }
+
int rowCount(const QModelIndex& = QModelIndex()) const override
{
return row_count;
@@ -409,6 +391,7 @@ private slots:
void resizeToContents();
void resizeToContentsSpans();
+ void resizeToContentsEarly();
void tabFocus();
void bigModel();
@@ -441,6 +424,7 @@ private slots:
void selectColumnsAndCells();
void selectWithHeader_data();
void selectWithHeader();
+ void resetDefaultSectionSize();
#if QT_CONFIG(wheelevent)
void mouseWheel_data();
@@ -454,6 +438,7 @@ private slots:
void viewOptions();
void taskQTBUG_7232_AllowUserToControlSingleStep();
+ void rowsInVerticalHeader();
#if QT_CONFIG(textmarkdownwriter)
void markdownWriter();
@@ -528,7 +513,7 @@ void tst_QTableView::emptyModel()
QSignalSpy spy(&model, &QtTestTableModel::invalidIndexEncountered);
view.setModel(&model);
view.show();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QTableView::removeRows_data()
@@ -553,10 +538,10 @@ void tst_QTableView::removeRows()
view.show();
model.removeLastRow();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
model.removeAllRows();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QTableView::removeColumns_data()
@@ -581,10 +566,10 @@ void tst_QTableView::removeColumns()
view.show();
model.removeLastColumn();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
model.removeAllColumns();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QTableView::keyboardNavigation_data()
@@ -625,7 +610,7 @@ void tst_QTableView::keyboardNavigation()
view.setCurrentIndex(index);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
int row = rowCount - 1;
@@ -1622,7 +1607,7 @@ void tst_QTableView::selection()
view.setSelection(QRect(x, y, width, height), command);
- QCOMPARE(view.selectedIndexes().count(), selectedCount);
+ QCOMPARE(view.selectedIndexes().size(), selectedCount);
}
void tst_QTableView::selectRow_data()
@@ -1735,12 +1720,12 @@ void tst_QTableView::selectRow()
view.setSelectionMode(mode);
view.setSelectionBehavior(behavior);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 0);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 0);
view.selectRow(row);
//test we have 10 items selected
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), selectedItems);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), selectedItems);
//test that all 10 items are in the same row
for (int i = 0; selectedItems > 0 && i < rowCount; ++i)
QCOMPARE(view.selectionModel()->selectedIndexes().at(i).row(), row);
@@ -1856,11 +1841,11 @@ void tst_QTableView::selectColumn()
view.setSelectionMode(mode);
view.setSelectionBehavior(behavior);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), 0);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), 0);
view.selectColumn(column);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), selectedItems);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), selectedItems);
for (int i = 0; selectedItems > 0 && i < columnCount; ++i)
QCOMPARE(view.selectionModel()->selectedIndexes().at(i).column(), column);
}
@@ -2005,22 +1990,22 @@ void tst_QTableView::selectall()
// try slot first
view.clearSelection();
- QCOMPARE(view.selectedIndexes().count(), 0);
+ QCOMPARE(view.selectedIndexes().size(), 0);
view.selectAll();
- QCOMPARE(view.selectedIndexes().count(), selectedCount);
+ QCOMPARE(view.selectedIndexes().size(), selectedCount);
// try by key sequence
view.clearSelection();
- QCOMPARE(view.selectedIndexes().count(), 0);
+ QCOMPARE(view.selectedIndexes().size(), 0);
QTest__keySequence(&view, QKeySequence(QKeySequence::SelectAll));
- QCOMPARE(view.selectedIndexes().count(), selectedCount);
+ QCOMPARE(view.selectedIndexes().size(), selectedCount);
// check again with no selection mode
view.clearSelection();
view.setSelectionMode(QAbstractItemView::NoSelection);
- QCOMPARE(view.selectedIndexes().count(), 0);
+ QCOMPARE(view.selectedIndexes().size(), 0);
QTest__keySequence(&view, QKeySequence(QKeySequence::SelectAll));
- QCOMPARE(view.selectedIndexes().count(), 0);
+ QCOMPARE(view.selectedIndexes().size(), 0);
}
#endif // QT_CONFIG(shortcut)
@@ -2213,7 +2198,7 @@ void tst_QTableView::resizeRowsToContents()
QSignalSpy resizedSpy(view.verticalHeader(), &QHeaderView::sectionResized);
view.resizeRowsToContents();
- QCOMPARE(resizedSpy.count(), model.rowCount());
+ QCOMPARE(resizedSpy.size(), model.rowCount());
for (int r = 0; r < model.rowCount(); ++r)
QCOMPARE(view.rowHeight(r), rowHeight);
}
@@ -2259,7 +2244,7 @@ void tst_QTableView::resizeColumnsToContents()
QSignalSpy resizedSpy(view.horizontalHeader(), &QHeaderView::sectionResized);
view.resizeColumnsToContents();
- QCOMPARE(resizedSpy.count(), model.columnCount());
+ QCOMPARE(resizedSpy.size(), model.columnCount());
for (int c = 0; c < model.columnCount(); ++c)
QCOMPARE(view.columnWidth(c), columnWidth);
}
@@ -2274,46 +2259,46 @@ void tst_QTableView::rowViewportPosition_data()
QTest::addColumn<int>("rowViewportPosition");
QTest::newRow("row 0, scroll per item 0")
- << 10 << 40 << 0 << QAbstractItemView::ScrollPerItem << 0 << 0;
+ << 100 << 40 << 0 << QAbstractItemView::ScrollPerItem << 0 << 0;
QTest::newRow("row 1, scroll per item, 0")
- << 10 << 40 << 1 << QAbstractItemView::ScrollPerItem << 0 << 1 * 40;
+ << 100 << 40 << 1 << QAbstractItemView::ScrollPerItem << 0 << 1 * 40;
QTest::newRow("row 1, scroll per item, 1")
- << 10 << 40 << 1 << QAbstractItemView::ScrollPerItem << 1 << 0;
+ << 100 << 40 << 1 << QAbstractItemView::ScrollPerItem << 1 << 0;
QTest::newRow("row 5, scroll per item, 0")
- << 10 << 40 << 5 << QAbstractItemView::ScrollPerItem << 0 << 5 * 40;
+ << 100 << 40 << 5 << QAbstractItemView::ScrollPerItem << 0 << 5 * 40;
QTest::newRow("row 5, scroll per item, 5")
- << 10 << 40 << 5 << QAbstractItemView::ScrollPerItem << 5 << 0;
+ << 100 << 40 << 5 << QAbstractItemView::ScrollPerItem << 5 << 0;
QTest::newRow("row 9, scroll per item, 0")
- << 10 << 40 << 9 << QAbstractItemView::ScrollPerItem << 0 << 9 * 40;
+ << 100 << 40 << 9 << QAbstractItemView::ScrollPerItem << 0 << 9 * 40;
QTest::newRow("row 9, scroll per item, 5")
- << 10 << 40 << 9 << QAbstractItemView::ScrollPerItem << 5 << 4 * 40;
+ << 100 << 40 << 9 << QAbstractItemView::ScrollPerItem << 5 << 4 * 40;
QTest::newRow("row 0, scroll per pixel 0")
- << 10 << 40 << 0 << QAbstractItemView::ScrollPerPixel << 0 << 0;
+ << 100 << 40 << 0 << QAbstractItemView::ScrollPerPixel << 0 << 0;
QTest::newRow("row 1, scroll per pixel, 0")
- << 10 << 40 << 1 << QAbstractItemView::ScrollPerPixel << 0 << 1 * 40;
+ << 100 << 40 << 1 << QAbstractItemView::ScrollPerPixel << 0 << 1 * 40;
QTest::newRow("row 1, scroll per pixel, 1")
- << 10 << 40 << 1 << QAbstractItemView::ScrollPerPixel << 1 * 40 << 0;
+ << 100 << 40 << 1 << QAbstractItemView::ScrollPerPixel << 1 * 40 << 0;
QTest::newRow("row 5, scroll per pixel, 0")
- << 10 << 40 << 5 << QAbstractItemView::ScrollPerPixel << 0 << 5 * 40;
+ << 100 << 40 << 5 << QAbstractItemView::ScrollPerPixel << 0 << 5 * 40;
QTest::newRow("row 5, scroll per pixel, 5")
- << 10 << 40 << 5 << QAbstractItemView::ScrollPerPixel << 5 * 40 << 0;
+ << 100 << 40 << 5 << QAbstractItemView::ScrollPerPixel << 5 * 40 << 0;
QTest::newRow("row 9, scroll per pixel, 0")
- << 10 << 40 << 9 << QAbstractItemView::ScrollPerPixel << 0 << 9 * 40;
+ << 100 << 40 << 9 << QAbstractItemView::ScrollPerPixel << 0 << 9 * 40;
QTest::newRow("row 9, scroll per pixel, 5")
- << 10 << 40 << 9 << QAbstractItemView::ScrollPerPixel << 5 * 40 << 4 * 40;
+ << 100 << 40 << 9 << QAbstractItemView::ScrollPerPixel << 5 * 40 << 4 * 40;
}
void tst_QTableView::rowViewportPosition()
@@ -2373,7 +2358,7 @@ void tst_QTableView::rowAt()
for (int r = 0; r < rowCount; ++r)
view.setRowHeight(r, rowHeight);
- for (int i = 0; i < hiddenRows.count(); ++i)
+ for (int i = 0; i < hiddenRows.size(); ++i)
view.hideRow(hiddenRows.at(i));
QCOMPARE(view.rowAt(coordinate), row);
@@ -2437,46 +2422,46 @@ void tst_QTableView::columnViewportPosition_data()
QTest::addColumn<int>("columnViewportPosition");
QTest::newRow("column 0, scroll per item 0")
- << 10 << 40 << 0 << QAbstractItemView::ScrollPerItem << 0 << 0;
+ << 100 << 40 << 0 << QAbstractItemView::ScrollPerItem << 0 << 0;
QTest::newRow("column 1, scroll per item, 0")
- << 10 << 40 << 1 << QAbstractItemView::ScrollPerItem << 0 << 1 * 40;
+ << 100 << 40 << 1 << QAbstractItemView::ScrollPerItem << 0 << 1 * 40;
QTest::newRow("column 1, scroll per item, 1")
- << 10 << 40 << 1 << QAbstractItemView::ScrollPerItem << 1 << 0;
+ << 100 << 40 << 1 << QAbstractItemView::ScrollPerItem << 1 << 0;
QTest::newRow("column 5, scroll per item, 0")
- << 10 << 40 << 5 << QAbstractItemView::ScrollPerItem << 0 << 5 * 40;
+ << 100 << 40 << 5 << QAbstractItemView::ScrollPerItem << 0 << 5 * 40;
QTest::newRow("column 5, scroll per item, 5")
- << 10 << 40 << 5 << QAbstractItemView::ScrollPerItem << 5 << 0;
+ << 100 << 40 << 5 << QAbstractItemView::ScrollPerItem << 5 << 0;
QTest::newRow("column 9, scroll per item, 0")
- << 10 << 40 << 9 << QAbstractItemView::ScrollPerItem << 0 << 9 * 40;
+ << 100 << 40 << 9 << QAbstractItemView::ScrollPerItem << 0 << 9 * 40;
QTest::newRow("column 9, scroll per item, 5")
- << 10 << 40 << 9 << QAbstractItemView::ScrollPerItem << 5 << 4 * 40;
+ << 100 << 40 << 9 << QAbstractItemView::ScrollPerItem << 5 << 4 * 40;
QTest::newRow("column 0, scroll per pixel 0")
- << 10 << 40 << 0 << QAbstractItemView::ScrollPerPixel << 0 << 0;
+ << 100 << 40 << 0 << QAbstractItemView::ScrollPerPixel << 0 << 0;
QTest::newRow("column 1, scroll per pixel 0")
- << 10 << 40 << 1 << QAbstractItemView::ScrollPerPixel << 0 << 1 * 40;
+ << 100 << 40 << 1 << QAbstractItemView::ScrollPerPixel << 0 << 1 * 40;
QTest::newRow("column 1, scroll per pixel 1")
- << 10 << 40 << 1 << QAbstractItemView::ScrollPerPixel << 1 * 40 << 0;
+ << 100 << 40 << 1 << QAbstractItemView::ScrollPerPixel << 1 * 40 << 0;
QTest::newRow("column 5, scroll per pixel 0")
- << 10 << 40 << 5 << QAbstractItemView::ScrollPerPixel << 0 << 5 * 40;
+ << 100 << 40 << 5 << QAbstractItemView::ScrollPerPixel << 0 << 5 * 40;
QTest::newRow("column 5, scroll per pixel 5")
- << 10 << 40 << 5 << QAbstractItemView::ScrollPerPixel << 5 * 40 << 0;
+ << 100 << 40 << 5 << QAbstractItemView::ScrollPerPixel << 5 * 40 << 0;
QTest::newRow("column 9, scroll per pixel 0")
- << 10 << 40 << 9 << QAbstractItemView::ScrollPerPixel << 0 << 9 * 40;
+ << 100 << 40 << 9 << QAbstractItemView::ScrollPerPixel << 0 << 9 * 40;
QTest::newRow("column 9, scroll per pixel 5")
- << 10 << 40 << 9 << QAbstractItemView::ScrollPerPixel << 5 * 40 << 4 * 40;
+ << 100 << 40 << 9 << QAbstractItemView::ScrollPerPixel << 5 * 40 << 4 * 40;
}
void tst_QTableView::columnViewportPosition()
@@ -2536,7 +2521,7 @@ void tst_QTableView::columnAt()
for (int c = 0; c < columnCount; ++c)
view.setColumnWidth(c, columnWidth);
- for (int i = 0; i < hiddenColumns.count(); ++i)
+ for (int i = 0; i < hiddenColumns.size(); ++i)
view.hideColumn(hiddenColumns.at(i));
QCOMPARE(view.columnAt(coordinate), column);
@@ -3793,6 +3778,35 @@ void tst_QTableView::resizeToContentsSpans()
QCOMPARE(view2.columnWidth(0), view3.columnWidth(0) - view2.columnWidth(1));
}
+void tst_QTableView::resizeToContentsEarly()
+{
+ QStringListModel model;
+ QTableView view;
+
+ // connect to the model before setting it on the view
+ connect(&model, &QStringListModel::modelReset, &model, [&view]{
+ view.resizeColumnsToContents();
+ });
+ connect(&model, &QStringListModel::modelReset, &model, [&view]{
+ view.resizeRowsToContents();
+ });
+
+ // the view only connects now to the model's signals, so responds to the
+ // reset signal *after* the lambdas above
+ view.setModel(&model);
+
+ QStringList data(200, QString("Hello World"));
+ model.setStringList(data);
+
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ view.verticalScrollBar()->setValue(view.verticalScrollBar()->maximum());
+
+ data = data.sliced(data.size() / 2);
+ model.setStringList(data);
+}
+
QT_BEGIN_NAMESPACE
extern bool Q_WIDGETS_EXPORT qt_tab_all_widgets(); // qapplication.cpp
QT_END_NAMESPACE
@@ -3815,7 +3829,7 @@ void tst_QTableView::tabFocus()
QLineEdit *edit = new QLineEdit(&window);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
window.setFocus();
window.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&window));
@@ -4355,15 +4369,18 @@ void tst_QTableView::task191545_dragSelectRows()
QHeaderView *vHeader = table.verticalHeader();
QWidget *vHeaderVp = vHeader->viewport();
QPoint rowPos(cellRect.center());
- QMouseEvent rowPressEvent(QEvent::MouseButtonPress, rowPos, Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
+ QMouseEvent rowPressEvent(QEvent::MouseButtonPress, rowPos, rowPos, vHeaderVp->mapToGlobal(rowPos),
+ Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
QCoreApplication::sendEvent(vHeaderVp, &rowPressEvent);
for (int i = 0; i < 4; ++i) {
rowPos.setY(rowPos.y() + cellRect.height());
- QMouseEvent moveEvent(QEvent::MouseMove, rowPos, Qt::NoButton, Qt::LeftButton, Qt::ControlModifier);
+ QMouseEvent moveEvent(QEvent::MouseMove, rowPos, rowPos, vHeaderVp->mapToGlobal(rowPos),
+ Qt::NoButton, Qt::LeftButton, Qt::ControlModifier);
QCoreApplication::sendEvent(vHeaderVp, &moveEvent);
}
- QMouseEvent rowReleaseEvent(QEvent::MouseButtonRelease, rowPos, Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
+ QMouseEvent rowReleaseEvent(QEvent::MouseButtonRelease, rowPos, vHeaderVp->mapToGlobal(rowPos),
+ Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
QCoreApplication::sendEvent(vHeaderVp, &rowReleaseEvent);
for (int i = 0; i < 4; ++i) {
@@ -4377,15 +4394,18 @@ void tst_QTableView::task191545_dragSelectRows()
QHeaderView *hHeader = table.horizontalHeader();
QWidget *hHeaderVp = hHeader->viewport();
QPoint colPos((cellRect.left() + cellRect.right()) / 2, 5);
- QMouseEvent colPressEvent(QEvent::MouseButtonPress, colPos, Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
+ QMouseEvent colPressEvent(QEvent::MouseButtonPress, colPos, hHeaderVp->mapToGlobal(colPos),
+ Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
QCoreApplication::sendEvent(hHeaderVp, &colPressEvent);
for (int i = 0; i < 4; ++i) {
colPos.setX(colPos.x() + cellRect.width());
- QMouseEvent moveEvent(QEvent::MouseMove, colPos, Qt::NoButton, Qt::LeftButton, Qt::ControlModifier);
+ QMouseEvent moveEvent(QEvent::MouseMove, colPos, hHeaderVp->mapToGlobal(colPos),
+ Qt::NoButton, Qt::LeftButton, Qt::ControlModifier);
QCoreApplication::sendEvent(hHeaderVp, &moveEvent);
}
- QMouseEvent colReleaseEvent(QEvent::MouseButtonRelease, colPos, Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
+ QMouseEvent colReleaseEvent(QEvent::MouseButtonRelease, colPos, hHeaderVp->mapToGlobal(colPos),
+ Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
QCoreApplication::sendEvent(hHeaderVp, &colReleaseEvent);
for (int i = 0; i < 4; ++i) {
@@ -4398,16 +4418,19 @@ void tst_QTableView::task191545_dragSelectRows()
QRect cellRect = table.visualRect(model.index(2, 2));
QWidget *tableVp = table.viewport();
QPoint cellPos = cellRect.center();
- QMouseEvent cellPressEvent(QEvent::MouseButtonPress, cellPos, Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
+ QMouseEvent cellPressEvent(QEvent::MouseButtonPress, cellPos, tableVp->mapToGlobal(cellPos),
+ Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
QCoreApplication::sendEvent(tableVp, &cellPressEvent);
for (int i = 0; i < 6; ++i) {
cellPos.setX(cellPos.x() + cellRect.width());
cellPos.setY(cellPos.y() + cellRect.height());
- QMouseEvent moveEvent(QEvent::MouseMove, cellPos, Qt::NoButton, Qt::LeftButton, Qt::ControlModifier);
+ QMouseEvent moveEvent(QEvent::MouseMove, cellPos, tableVp->mapToGlobal(cellPos),
+ Qt::NoButton, Qt::LeftButton, Qt::ControlModifier);
QCoreApplication::sendEvent(tableVp, &moveEvent);
}
- QMouseEvent cellReleaseEvent(QEvent::MouseButtonRelease, cellPos, Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
+ QMouseEvent cellReleaseEvent(QEvent::MouseButtonRelease, cellPos, tableVp->mapToGlobal(cellPos),
+ Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
QCoreApplication::sendEvent(tableVp, &cellReleaseEvent);
for (int i = 0; i < 6; ++i) {
@@ -4422,16 +4445,21 @@ void tst_QTableView::task191545_dragSelectRows()
QRect cellRect = table.visualRect(model.index(3, 3));
QWidget *tableVp = table.viewport();
QPoint cellPos = cellRect.center();
- QMouseEvent cellPressEvent(QEvent::MouseButtonPress, cellPos, Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
+ QMouseEvent cellPressEvent(QEvent::MouseButtonPress, cellPos, tableVp->mapToGlobal(cellPos),
+ Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
QCoreApplication::sendEvent(tableVp, &cellPressEvent);
for (int i = 0; i < 6; ++i) {
+ // cellPos might have been updated by scrolling, so refresh
+ cellPos = table.visualRect(model.index(3+i, 3+i)).center();
cellPos.setX(cellPos.x() + cellRect.width());
cellPos.setY(cellPos.y() + cellRect.height());
- QMouseEvent moveEvent(QEvent::MouseMove, cellPos, Qt::NoButton, Qt::LeftButton, Qt::ControlModifier);
+ QMouseEvent moveEvent(QEvent::MouseMove, cellPos, tableVp->mapToGlobal(cellPos),
+ Qt::NoButton, Qt::LeftButton, Qt::ControlModifier);
QCoreApplication::sendEvent(tableVp, &moveEvent);
}
- QMouseEvent cellReleaseEvent(QEvent::MouseButtonRelease, cellPos, Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
+ QMouseEvent cellReleaseEvent(QEvent::MouseButtonRelease, cellPos, tableVp->mapToGlobal(cellPos),
+ Qt::LeftButton, Qt::NoButton, Qt::ControlModifier);
QCoreApplication::sendEvent(tableVp, &cellReleaseEvent);
QTest::qWait(200);
@@ -4795,7 +4823,8 @@ public:
{
return QTableView::selectionCommand(index, shiftPressed ? &mouseEvent : nullptr);
}
- QMouseEvent mouseEvent = QMouseEvent(QEvent::MouseButtonPress, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier);
+ QMouseEvent mouseEvent = QMouseEvent(QEvent::MouseButtonPress, QPointF(), QPointF(),
+ Qt::LeftButton, Qt::LeftButton, Qt::ShiftModifier);
bool shiftPressed = false;
};
@@ -4875,7 +4904,7 @@ void tst_QTableView::selectWithHeader()
QVERIFY(QTest::qWaitForWindowExposed(&view));
- QHeaderView *header;
+ QHeaderView *header = nullptr;
QPoint clickPos;
QModelIndex lastIndex;
@@ -4911,6 +4940,22 @@ void tst_QTableView::selectWithHeader()
QVERIFY(!isSelected());
}
+void tst_QTableView::resetDefaultSectionSize()
+{
+ // Create a table and change its default section size and then reset it.
+ // This should be a no op so clicking on row 1 should select row 1 and not row
+ // 0 as previously. QTBUG-116013
+ QTableWidget view(10, 10);
+ view.resize(300, 300);
+ view.verticalHeader()->setSectionResizeMode(QHeaderView::Fixed);
+ view.verticalHeader()->setDefaultSectionSize(120);
+ view.verticalHeader()->resetDefaultSectionSize();
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+ QEXPECT_FAIL("", "Reverted fix for QTBUG-116013 due to QTBUG-122109", Continue);
+ QCOMPARE(view.verticalHeader()->logicalIndexAt(9, 45), 1);
+}
+
// This has nothing to do with QTableView, but it's convenient to reuse the QtTestTableModel
#if QT_CONFIG(textmarkdownwriter)
@@ -4939,5 +4984,18 @@ void tst_QTableView::markdownWriter()
}
#endif
+void tst_QTableView::rowsInVerticalHeader()
+{
+ QtTestTableModel model(0, 2);
+ QTableView view;
+ view.setModel(&model);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+ auto *verticalHeader = view.verticalHeader();
+ QCOMPARE(verticalHeader->count(), 0);
+ model.insertRows(2);
+ QCOMPARE(verticalHeader->count(), 2);
+}
+
QTEST_MAIN(tst_QTableView)
#include "tst_qtableview.moc"
diff --git a/tests/auto/widgets/itemviews/qtablewidget/CMakeLists.txt b/tests/auto/widgets/itemviews/qtablewidget/CMakeLists.txt
index 5409741dd9..306ba4bdff 100644
--- a/tests/auto/widgets/itemviews/qtablewidget/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qtablewidget/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtablewidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtablewidget Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtablewidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtablewidget
SOURCES
tst_qtablewidget.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp b/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp
index aa56376c4a..34972bc3e8 100644
--- a/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp
+++ b/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** 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 <QHeaderView>
#include <QLineEdit>
#include <QMimeData>
+#include <QScrollBar>
#include <QSignalSpy>
#include <QTableWidget>
#include <QTest>
@@ -88,6 +64,7 @@ private slots:
void task219380_removeLastRow();
void task262056_sortDuplicate();
void itemWithHeaderItems();
+ void checkHeaderItemFlagsConflict();
void mimeData();
void selectedRowAfterSorting();
void search();
@@ -217,8 +194,8 @@ void tst_QTableWidget::clear()
QVERIFY(bla.isNull());
QVERIFY(!testWidget->item(0,0));
- QVERIFY(!testWidget->selectedRanges().count());
- QVERIFY(!testWidget->selectedItems().count());
+ QVERIFY(!testWidget->selectedRanges().size());
+ QVERIFY(!testWidget->selectedItems().size());
}
void tst_QTableWidget::rowCount()
@@ -385,7 +362,7 @@ void tst_QTableWidget::takeItem()
QCOMPARE(item->text(), QString::number(row * column + column));
delete item;
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
const QList<QVariant> arguments = spy.takeFirst();
QCOMPARE(arguments.size(), 2);
QCOMPARE(arguments.at(0).toInt(), row);
@@ -550,24 +527,24 @@ void tst_QTableWidget::selectedItems()
testWidget->setColumnHidden(column, true);
// make sure we don't have any previous selections hanging around
- QVERIFY(!testWidget->selectedRanges().count());
- QVERIFY(!testWidget->selectedItems().count());
+ QVERIFY(!testWidget->selectedRanges().size());
+ QVERIFY(!testWidget->selectedItems().size());
// select range and check that it is set correctly
testWidget->setRangeSelected(selectionRange, true);
if (selectionRange.topRow() >= 0) {
- QCOMPARE(testWidget->selectedRanges().count(), 1);
+ QCOMPARE(testWidget->selectedRanges().size(), 1);
QCOMPARE(testWidget->selectedRanges().at(0).topRow(), selectionRange.topRow());
QCOMPARE(testWidget->selectedRanges().at(0).bottomRow(), selectionRange.bottomRow());
QCOMPARE(testWidget->selectedRanges().at(0).leftColumn(), selectionRange.leftColumn());
QCOMPARE(testWidget->selectedRanges().at(0).rightColumn(), selectionRange.rightColumn());
} else {
- QCOMPARE(testWidget->selectedRanges().count(), 0);
+ QCOMPARE(testWidget->selectedRanges().size(), 0);
}
// check that the correct number of items and the expected items are there
const QList<QTableWidgetItem *> selectedItems = testWidget->selectedItems();
- QCOMPARE(selectedItems.count(), expectedItems.count());
+ QCOMPARE(selectedItems.size(), expectedItems.size());
for (const auto &intPair : expectedItems)
QVERIFY(selectedItems.contains(testWidget->item(intPair.first, intPair.second)));
@@ -652,7 +629,7 @@ void tst_QTableWidget::selectedSpannedCells() // QTBUG-255
testWidget.visualRect(testWidget.model()->index(selectionEndCell.y(), selectionEndCell.x())).center());
auto ranges = testWidget.selectedRanges();
- QCOMPARE(ranges.count(), expectedSelectionRangeCount);
+ QCOMPARE(ranges.size(), expectedSelectionRangeCount);
QCOMPARE(ranges.first(), expectedFirstSelectionRange);
}
@@ -1219,15 +1196,15 @@ void tst_QTableWidget::sortItems()
persistent << model->index(r, sortColumn, QModelIndex());
}
- for (int h = 0; h < initialHidden.count(); ++h)
+ for (int h = 0; h < initialHidden.size(); ++h)
testWidget->hideRow(initialHidden.at(h));
- QCOMPARE(testWidget->verticalHeader()->hiddenSectionCount(), initialHidden.count());
+ QCOMPARE(testWidget->verticalHeader()->hiddenSectionCount(), initialHidden.size());
testWidget->sortItems(sortColumn, sortOrder);
int te = 0;
- for (int i = 0; i < rows.count(); ++i) {
+ for (int i = 0; i < rows.size(); ++i) {
for (int j = 0; j < columnCount; ++j) {
QString value;
QTableWidgetItem *itm = testWidget->item(i, j);
@@ -1241,7 +1218,7 @@ void tst_QTableWidget::sortItems()
// << "expected" << rows.at(i);
}
- for (int k = 0; k < expectedHidden.count(); ++k)
+ for (int k = 0; k < expectedHidden.size(); ++k)
QVERIFY(testWidget->isRowHidden(expectedHidden.at(k)));
}
@@ -1422,18 +1399,18 @@ void tst_QTableWidget::setItemWithSorting()
}
}
- for (int k = 0; k < persistent.count(); ++k) {
+ for (int k = 0; k < persistent.size(); ++k) {
QCOMPARE(persistent.at(k).row(), expectedRows.at(k));
int i = (persistent.at(k).row() * columnCount) + sortColumn;
QCOMPARE(persistent.at(k).data().toString(), expectedValues.at(i));
}
if (i == 0)
- QCOMPARE(dataChangedSpy.count(), reorderingExpected ? 0 : 1);
+ QCOMPARE(dataChangedSpy.size(), reorderingExpected ? 0 : 1);
else
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
- QCOMPARE(layoutChangedSpy.count(), reorderingExpected ? 1 : 0);
+ QCOMPARE(layoutChangedSpy.size(), reorderingExpected ? 1 : 0);
}
}
@@ -1469,7 +1446,7 @@ void tst_QTableWidget::itemData()
QCOMPARE(widget.currentRoles, QList<int> { Qt::UserRole + i });
}
QMap<int, QVariant> flags = widget.model()->itemData(widget.model()->index(0, 0));
- QCOMPARE(flags.count(), 6);
+ QCOMPARE(flags.size(), 6);
for (int i = 0; i < 4; ++i)
QCOMPARE(flags[Qt::UserRole + i].toString(), QString::number(i + 1));
}
@@ -1482,7 +1459,7 @@ void tst_QTableWidget::setItemData()
QTableWidgetItem *item = new QTableWidgetItem;
table.setItem(0, 0, item);
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
QModelIndex idx = qvariant_cast<QModelIndex>(dataChangedSpy.takeFirst().at(0));
QMap<int, QVariant> data;
@@ -1494,7 +1471,7 @@ void tst_QTableWidget::setItemData()
QCOMPARE(table.model()->data(idx, Qt::DisplayRole).toString(), QLatin1String("Display"));
QCOMPARE(table.model()->data(idx, Qt::EditRole).toString(), QLatin1String("Display"));
QCOMPARE(table.model()->data(idx, Qt::ToolTipRole).toString(), QLatin1String("ToolTip"));
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
QCOMPARE(idx, qvariant_cast<QModelIndex>(dataChangedSpy.first().at(0)));
QCOMPARE(idx, qvariant_cast<QModelIndex>(dataChangedSpy.first().at(1)));
const auto roles = qvariant_cast<QList<int>>(dataChangedSpy.first().at(2));
@@ -1505,13 +1482,13 @@ void tst_QTableWidget::setItemData()
dataChangedSpy.clear();
table.model()->setItemData(idx, data);
- QCOMPARE(dataChangedSpy.count(), 0);
+ QCOMPARE(dataChangedSpy.size(), 0);
data.clear();
data.insert(Qt::DisplayRole, QLatin1String("dizplaye"));
table.model()->setItemData(idx, data);
QCOMPARE(table.model()->data(idx, Qt::DisplayRole).toString(), QLatin1String("dizplaye"));
- QCOMPARE(dataChangedSpy.count(), 1);
+ QCOMPARE(dataChangedSpy.size(), 1);
QCOMPARE(QList<int>({ Qt::DisplayRole, Qt::EditRole }),
qvariant_cast<QList<int>>(dataChangedSpy.first().at(2)));
@@ -1580,6 +1557,12 @@ void tst_QTableWidget::sizeHint()
QFETCH(Qt::ScrollBarPolicy, scrollBarPolicy);
QFETCH(QSize, viewSize);
+ const QString defaultStyle = QApplication::style()->name();
+ QApplication::setStyle("windows");
+ const auto resetStyle = qScopeGuard([defaultStyle]{
+ QApplication::setStyle(defaultStyle);
+ });
+
QTableWidget view(2, 2);
view.setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
view.setVerticalScrollBarPolicy(scrollBarPolicy);
@@ -1599,18 +1582,21 @@ void tst_QTableWidget::sizeHint()
QTRY_COMPARE(view.size(), viewSize);
}
+ QApplication::processEvents(); // execute delayed layouts
auto sizeHint = view.sizeHint();
view.hide();
QCOMPARE(view.sizeHint(), sizeHint);
view.horizontalHeader()->hide();
view.show();
+ QApplication::processEvents(); // execute delayed layouts
sizeHint = view.sizeHint();
view.hide();
QCOMPARE(view.sizeHint(), sizeHint);
view.verticalHeader()->hide();
view.show();
+ QApplication::processEvents(); // execute delayed layouts
sizeHint = view.sizeHint();
view.hide();
QCOMPARE(view.sizeHint(), sizeHint);
@@ -1674,7 +1660,7 @@ void tst_QTableWidget::task262056_sortDuplicate()
QSignalSpy layoutChangedSpy(testWidget->model(), &QAbstractItemModel::layoutChanged);
testWidget->item(3,0)->setBackground(Qt::red);
- QCOMPARE(layoutChangedSpy.count(),0);
+ QCOMPARE(layoutChangedSpy.size(),0);
}
@@ -1694,6 +1680,25 @@ void tst_QTableWidget::itemWithHeaderItems()
QCOMPARE(table.item(0, 1), nullptr);
}
+void tst_QTableWidget::checkHeaderItemFlagsConflict()
+{
+ // QTBUG-113209
+ // Check that setting header item doesn't set Qt::ItemNeverHasChildren
+ // Chech that header items do not emit itemChanged.
+ QTableWidget table(1, 1);
+ QSignalSpy itemChangeSpy(&table, &QTableWidget::itemChanged);
+ QVERIFY(itemChangeSpy.isValid());
+
+ QTableWidgetItem *item = new QTableWidgetItem("Initial");
+ table.setHorizontalHeaderItem(0, item);
+
+ QVERIFY(!(item->flags() & Qt::ItemNeverHasChildren));
+
+ item->setData(Qt::DisplayRole, "updated");
+
+ QCOMPARE(itemChangeSpy.size(), 0);
+}
+
class TestTableWidget : public QTableWidget
{
Q_OBJECT
@@ -1771,7 +1776,7 @@ void tst_QTableWidget::selectedRowAfterSorting()
table.setProperty("sortingEnabled",true);
table.selectRow(1);
table.item(1,1)->setText("9");
- QCOMPARE(table.selectedItems().count(),3);
+ QCOMPARE(table.selectedItems().size(),3);
const auto selectedItems = table.selectedItems();
for (QTableWidgetItem *item : selectedItems)
QCOMPARE(item->row(), 0);
diff --git a/tests/auto/widgets/itemviews/qtreeview/BLACKLIST b/tests/auto/widgets/itemviews/qtreeview/BLACKLIST
deleted file mode 100644
index 3aaf1e4e64..0000000000
--- a/tests/auto/widgets/itemviews/qtreeview/BLACKLIST
+++ /dev/null
@@ -1,5 +0,0 @@
-# QTBUG-87408
-[horizontalScrollMode]
-android
-[setSelection]
-android
diff --git a/tests/auto/widgets/itemviews/qtreeview/CMakeLists.txt b/tests/auto/widgets/itemviews/qtreeview/CMakeLists.txt
index 57267e1694..deccd71f59 100644
--- a/tests/auto/widgets/itemviews/qtreeview/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qtreeview/CMakeLists.txt
@@ -1,14 +1,21 @@
-# Generated from qtreeview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtreeview Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtreeview LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtreeview
SOURCES
../../../../shared/fakedirmodel.h
tst_qtreeview.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
index 0d6d80ad59..14169976e4 100644
--- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../../../../shared/fakedirmodel.h"
@@ -49,6 +24,8 @@
#include <private/qtreeview_p.h>
#include <private/qtesthelpers_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
using namespace QTestPrivate;
#if QT_CONFIG(draganddrop)
@@ -890,8 +867,8 @@ void tst_QTreeView::horizontalScrollMode()
QTreeView view;
setFrameless(&view);
view.setModel(&model);
- view.setFixedSize(100, 100);
- view.header()->resizeSection(0, 200);
+ view.setFixedSize(100, 1000);
+ view.header()->resizeSection(0, 2000);
view.show();
QCOMPARE(view.horizontalScrollMode(), QAbstractItemView::ScrollPerPixel);
@@ -1263,7 +1240,7 @@ void tst_QTreeView::keyboardSearchMultiColumn()
view.setModel(&model);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
view.setCurrentIndex(model.index(0, 1));
@@ -1304,7 +1281,7 @@ void tst_QTreeView::setModel()
QCOMPARE(view.header()->model(), model);
QCOMPARE(view.selectionModel() != oldSelectionModel, (i == 0));
}
- QTRY_COMPARE(modelDestroyedSpy.count(), 0);
+ QTRY_COMPARE(modelDestroyedSpy.size(), 0);
view.setModel(nullptr);
QCOMPARE(view.model(), nullptr);
@@ -1359,7 +1336,7 @@ void tst_QTreeView::setHeader()
Qt::Orientation orient = x ? Qt::Vertical : Qt::Horizontal;
QHeaderView *head = new QHeaderView(orient);
view.setHeader(head);
- QCOMPARE(destroyedSpy.count(), 1);
+ QCOMPARE(destroyedSpy.size(), 1);
QCOMPARE(head->parent(), &view);
QCOMPARE(view.header(), head);
view.setHeader(head);
@@ -1542,10 +1519,10 @@ void tst_QTreeView::limitedExpand()
QVERIFY(spy.isValid());
view.expand(model.index(0, 0));
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
view.expand(model.index(1, 0));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
{
QStringListModel model(QStringList() << "one" << "two");
@@ -1556,9 +1533,9 @@ void tst_QTreeView::limitedExpand()
QVERIFY(spy.isValid());
view.expand(model.index(0, 0));
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
view.expandAll();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
}
@@ -1597,58 +1574,58 @@ void tst_QTreeView::expandAndCollapse()
view.expand(QModelIndex());
QCOMPARE(view.isExpanded(QModelIndex()), false);
view.collapse(QModelIndex());
- QCOMPARE(expandedSpy.count(), 0);
- QCOMPARE(collapsedSpy.count(), 0);
+ QCOMPARE(expandedSpy.size(), 0);
+ QCOMPARE(collapsedSpy.size(), 0);
// expand a first level item
QVERIFY(!view.isExpanded(a));
view.expand(a);
QVERIFY(view.isExpanded(a));
- QCOMPARE(expandedSpy.count(), 1);
- QCOMPARE(collapsedSpy.count(), 0);
+ QCOMPARE(expandedSpy.size(), 1);
+ QCOMPARE(collapsedSpy.size(), 0);
args = expandedSpy.takeFirst();
QCOMPARE(qvariant_cast<QModelIndex>(args.at(0)), a);
view.expand(a);
QVERIFY(view.isExpanded(a));
- QCOMPARE(expandedSpy.count(), 0);
- QCOMPARE(collapsedSpy.count(), 0);
+ QCOMPARE(expandedSpy.size(), 0);
+ QCOMPARE(collapsedSpy.size(), 0);
// expand a second level item
QVERIFY(!view.isExpanded(b));
view.expand(b);
QVERIFY(view.isExpanded(a));
QVERIFY(view.isExpanded(b));
- QCOMPARE(expandedSpy.count(), 1);
- QCOMPARE(collapsedSpy.count(), 0);
+ QCOMPARE(expandedSpy.size(), 1);
+ QCOMPARE(collapsedSpy.size(), 0);
args = expandedSpy.takeFirst();
QCOMPARE(qvariant_cast<QModelIndex>(args.at(0)), b);
view.expand(b);
QVERIFY(view.isExpanded(b));
- QCOMPARE(expandedSpy.count(), 0);
- QCOMPARE(collapsedSpy.count(), 0);
+ QCOMPARE(expandedSpy.size(), 0);
+ QCOMPARE(collapsedSpy.size(), 0);
// collapse the first level item
view.collapse(a);
QVERIFY(!view.isExpanded(a));
QVERIFY(view.isExpanded(b));
- QCOMPARE(expandedSpy.count(), 0);
- QCOMPARE(collapsedSpy.count(), 1);
+ QCOMPARE(expandedSpy.size(), 0);
+ QCOMPARE(collapsedSpy.size(), 1);
args = collapsedSpy.takeFirst();
QCOMPARE(qvariant_cast<QModelIndex>(args.at(0)), a);
view.collapse(a);
QVERIFY(!view.isExpanded(a));
- QCOMPARE(expandedSpy.count(), 0);
- QCOMPARE(collapsedSpy.count(), 0);
+ QCOMPARE(expandedSpy.size(), 0);
+ QCOMPARE(collapsedSpy.size(), 0);
// expand the first level item again
view.expand(a);
QVERIFY(view.isExpanded(a));
QVERIFY(view.isExpanded(b));
- QCOMPARE(expandedSpy.count(), 1);
- QCOMPARE(collapsedSpy.count(), 0);
+ QCOMPARE(expandedSpy.size(), 1);
+ QCOMPARE(collapsedSpy.size(), 0);
args = expandedSpy.takeFirst();
QCOMPARE(qvariant_cast<QModelIndex>(args.at(0)), a);
@@ -1656,8 +1633,8 @@ void tst_QTreeView::expandAndCollapse()
view.collapse(b);
QVERIFY(view.isExpanded(a));
QVERIFY(!view.isExpanded(b));
- QCOMPARE(expandedSpy.count(), 0);
- QCOMPARE(collapsedSpy.count(), 1);
+ QCOMPARE(expandedSpy.size(), 0);
+ QCOMPARE(collapsedSpy.size(), 1);
args = collapsedSpy.takeFirst();
QCOMPARE(qvariant_cast<QModelIndex>(args.at(0)), b);
@@ -1665,8 +1642,8 @@ void tst_QTreeView::expandAndCollapse()
view.collapse(a);
QVERIFY(!view.isExpanded(a));
QVERIFY(!view.isExpanded(b));
- QCOMPARE(expandedSpy.count(), 0);
- QCOMPARE(collapsedSpy.count(), 1);
+ QCOMPARE(expandedSpy.size(), 0);
+ QCOMPARE(collapsedSpy.size(), 1);
args = collapsedSpy.takeFirst();
QCOMPARE(qvariant_cast<QModelIndex>(args.at(0)), a);
@@ -1678,8 +1655,8 @@ void tst_QTreeView::expandAndCollapse()
QVERIFY(view.isExpanded(a));
QVERIFY(view.isExpanded(b));
QVERIFY(!view.isExpanded(c));
- QCOMPARE(expandedSpy.count(), 2);
- QCOMPARE(collapsedSpy.count(), 0);
+ QCOMPARE(expandedSpy.size(), 2);
+ QCOMPARE(collapsedSpy.size(), 0);
args = expandedSpy.takeFirst();
QCOMPARE(qvariant_cast<QModelIndex>(args.at(0)), a);
args = expandedSpy.takeFirst();
@@ -1690,8 +1667,8 @@ void tst_QTreeView::expandAndCollapse()
QVERIFY(!view.isExpanded(a));
QVERIFY(!view.isExpanded(b));
QVERIFY(!view.isExpanded(c));
- QCOMPARE(expandedSpy.count(), 0);
- QCOMPARE(collapsedSpy.count(), 2);
+ QCOMPARE(expandedSpy.size(), 0);
+ QCOMPARE(collapsedSpy.size(), 2);
args = collapsedSpy.takeFirst();
QCOMPARE(qvariant_cast<QModelIndex>(args.at(0)), a);
args = collapsedSpy.takeFirst();
@@ -1753,22 +1730,22 @@ void tst_QTreeView::expandAndCollapseAll()
view.expandAll();
checkExpandState(model, view, QModelIndex(), true, &count);
- QCOMPARE(collapsedSpy.count(), 0);
- QCOMPARE(expandedSpy.count(), 39); // == 3 (first) + 9 (second) + 27 (third level)
+ QCOMPARE(collapsedSpy.size(), 0);
+ QCOMPARE(expandedSpy.size(), 39); // == 3 (first) + 9 (second) + 27 (third level)
QCOMPARE(count, 39);
collapsedSpy.clear();
expandedSpy.clear();
view.collapseAll();
checkExpandState(model, view, QModelIndex(), false, &count);
- QCOMPARE(collapsedSpy.count(), 39);
- QCOMPARE(expandedSpy.count(), 0);
+ QCOMPARE(collapsedSpy.size(), 39);
+ QCOMPARE(expandedSpy.size(), 0);
QCOMPARE(count, 39);
collapsedSpy.clear();
expandedSpy.clear();
view.expandRecursively(model.index(0, 0));
- QCOMPARE(expandedSpy.count(), 13); // 1 + 3 + 9
+ QCOMPARE(expandedSpy.size(), 13); // 1 + 3 + 9
checkExpandState(model, view, model.index(0, 0), true, &count);
QCOMPARE(count, 13);
@@ -1780,9 +1757,9 @@ void tst_QTreeView::expandAndCollapseAll()
expandedSpy.clear();
view.collapseAll();
view.expandRecursively(model.index(0, 0), 1);
- QCOMPARE(expandedSpy.count(), 4); // 1 + 3
+ QCOMPARE(expandedSpy.size(), 4); // 1 + 3
view.expandRecursively(model.index(0, 0), 2);
- QCOMPARE(expandedSpy.count(), 13); // (1 + 3) + 9
+ QCOMPARE(expandedSpy.size(), 13); // (1 + 3) + 9
checkExpandState(model, view, model.index(0, 0), true, &count);
QCOMPARE(count, 13);
@@ -1949,7 +1926,7 @@ void tst_QTreeView::moveCursor()
view.setColumnHidden(0, true);
QVERIFY(view.isColumnHidden(0));
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
//here the first visible index should be selected
@@ -2050,7 +2027,7 @@ void tst_QTreeView::setSelection()
QFETCH(PointList, expectedItems);
QFETCH(int, verticalOffset);
- QtTestModel model(10, 5);
+ QtTestModel model(100, 5);
model.levels = 1;
model.setDecorationsEnabled(true);
QTreeView view;
@@ -2068,7 +2045,7 @@ void tst_QTreeView::setSelection()
QVERIFY(selectionModel);
const QModelIndexList selectedIndexes = selectionModel->selectedIndexes();
- QCOMPARE(selectedIndexes.count(), expectedItems.count());
+ QCOMPARE(selectedIndexes.size(), expectedItems.size());
for (const QModelIndex &idx : selectedIndexes)
QVERIFY(expectedItems.contains(QPoint(idx.column(), idx.row())));
}
@@ -2172,7 +2149,7 @@ void tst_QTreeView::clicked()
continue;
QSignalSpy spy(&view, &QTreeView::clicked);
QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier, p);
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
}
}
@@ -2253,7 +2230,7 @@ void tst_QTreeView::rowsAboutToBeRemoved()
model.removeRows(1,1);
QCOMPARE((view.state()), 0);
// Should not be 5 (or any other number for that sake :)
- QCOMPARE(spy1.count(), 1);
+ QCOMPARE(spy1.size(), 1);
}
@@ -2565,28 +2542,28 @@ void tst_QTreeView::selectionWithHiddenItems()
//child should not be selected as it is hidden (its parent is not expanded)
view.selectAll();
- QCOMPARE(view.selectionModel()->selection().count(), 1); //one range
- QCOMPARE(view.selectionModel()->selectedRows().count(), 4);
+ QCOMPARE(view.selectionModel()->selection().size(), 1); //one range
+ QCOMPARE(view.selectionModel()->selectedRows().size(), 4);
view.expandAll();
QVERIFY(view.isExpanded(item1.index()));
- QCOMPARE(view.selectionModel()->selection().count(), 1);
- QCOMPARE(view.selectionModel()->selectedRows().count(), 4);
+ QCOMPARE(view.selectionModel()->selection().size(), 1);
+ QCOMPARE(view.selectionModel()->selectedRows().size(), 4);
QVERIFY( !view.selectionModel()->isSelected(model.indexFromItem(&child)));
view.clearSelection();
QVERIFY(view.isExpanded(item1.index()));
//child should be selected as it is visible (its parent is expanded)
view.selectAll();
- QCOMPARE(view.selectionModel()->selection().count(), 2);
- QCOMPARE(view.selectionModel()->selectedRows().count(), 5); //everything is selected
+ QCOMPARE(view.selectionModel()->selection().size(), 2);
+ QCOMPARE(view.selectionModel()->selectedRows().size(), 5); //everything is selected
view.clearSelection();
//we hide the node with a child (there should then be 3 items selected in 2 ranges)
view.setRowHidden(1, QModelIndex(), true);
QVERIFY(view.isExpanded(item1.index()));
view.selectAll();
- QCOMPARE(view.selectionModel()->selection().count(), 2);
- QCOMPARE(view.selectionModel()->selectedRows().count(), 3);
+ QCOMPARE(view.selectionModel()->selection().size(), 2);
+ QCOMPARE(view.selectionModel()->selectedRows().size(), 3);
QVERIFY(!view.selectionModel()->isSelected(model.indexFromItem(&item1)));
QVERIFY(!view.selectionModel()->isSelected(model.indexFromItem(&child)));
@@ -2599,8 +2576,8 @@ void tst_QTreeView::selectionWithHiddenItems()
QVERIFY(view.isExpanded(item1.index()));
view.selectAll();
QVERIFY(view.isExpanded(item1.index()));
- QCOMPARE(view.selectionModel()->selection().count(), 3);
- QCOMPARE(view.selectionModel()->selectedRows().count(), 4);
+ QCOMPARE(view.selectionModel()->selection().size(), 3);
+ QCOMPARE(view.selectionModel()->selectedRows().size(), 4);
QVERIFY( !view.selectionModel()->isSelected(model.indexFromItem(&item2)));
view.setRowHidden(2, QModelIndex(), false);
QVERIFY(view.isExpanded(item1.index()));
@@ -2615,21 +2592,21 @@ void tst_QTreeView::selectAll()
view2.setSelectionMode(QAbstractItemView::ExtendedSelection);
view2.selectAll(); // Should work with an empty model
//everything should be selected since we are in ExtendedSelection mode
- QCOMPARE(view2.selectedIndexes().count(), model.rowCount() * model.columnCount());
+ QCOMPARE(view2.selectedIndexes().size(), model.rowCount() * model.columnCount());
for (int i = 0; i < model.rowCount(); ++i)
model.setData(model.index(i,0), QLatin1String("row ") + QString::number(i));
QTreeView view;
view.setModel(&model);
- int selectedCount = view.selectedIndexes().count();
+ int selectedCount = view.selectedIndexes().size();
view.selectAll();
- QCOMPARE(view.selectedIndexes().count(), selectedCount);
+ QCOMPARE(view.selectedIndexes().size(), selectedCount);
QTreeView view3;
view3.setModel(&model);
view3.setSelectionMode(QAbstractItemView::NoSelection);
view3.selectAll();
- QCOMPARE(view3.selectedIndexes().count(), 0);
+ QCOMPARE(view3.selectedIndexes().size(), 0);
}
void tst_QTreeView::extendedSelection_data()
@@ -2655,7 +2632,7 @@ void tst_QTreeView::extendedSelection()
topLevel.show();
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
QTest::mousePress(view.viewport(), Qt::LeftButton, {}, mousePressPos);
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), selectedCount);
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), selectedCount);
}
void tst_QTreeView::rowSizeHint()
@@ -2895,7 +2872,7 @@ public:
}
void kill()
{
- for (int i = children.count() -1; i >= 0; --i) {
+ for (int i = children.size() -1; i >= 0; --i) {
children.at(i)->kill();
if (parent == nullptr) {
deadChildren.append(children.at(i));
@@ -2937,7 +2914,7 @@ public:
emit layoutAboutToBeChanged();
QModelIndexList oldList = persistentIndexList();
QList<QStack<int>> oldListPath;
- for (int i = 0; i < oldList.count(); ++i) {
+ for (int i = 0; i < oldList.size(); ++i) {
QModelIndex idx = oldList.at(i);
QStack<int> path;
while (idx.isValid()) {
@@ -2949,7 +2926,7 @@ public:
root->kill();
QModelIndexList newList;
- for (auto path : qAsConst(oldListPath)) {
+ for (auto path : std::as_const(oldListPath)) {
QModelIndex idx;
while (!path.isEmpty())
idx = index(path.pop(), 0, idx);
@@ -2968,7 +2945,7 @@ public:
if (parentNode->isDead)
qFatal("%s: parentNode is dead!", Q_FUNC_INFO);
}
- return parentNode->children.count();
+ return parentNode->children.size();
}
int columnCount(const QModelIndex &parent = QModelIndex()) const override
{
@@ -3559,7 +3536,7 @@ void tst_QTreeView::task174627_moveLeftToRoot()
QSignalSpy spy(&view, &task174627_TreeView::signalCurrentChanged);
QTest::keyClick(&view, Qt::Key_Left);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QTreeView::task171902_expandWith1stColHidden()
@@ -3728,7 +3705,7 @@ void tst_QTreeView::task224091_appendColumns()
treeView->setModel(model);
topLevel->show();
treeView->resize(50, 50);
- QApplication::setActiveWindow(topLevel);
+ QApplicationPrivate::setActiveWindow(topLevel);
QVERIFY(QTest::qWaitForWindowActive(topLevel));
QVERIFY(!treeView->verticalScrollBar()->isVisible());
@@ -4065,7 +4042,7 @@ void tst_QTreeView::task248022_changeSelection()
&view, &TreeView::handleSelectionChanged);
QTest::mouseClick(view.viewport(), Qt::LeftButton, {},
view.visualRect(model.index(1)).center());
- QCOMPARE(view.selectionModel()->selectedIndexes().count(), list.count());
+ QCOMPARE(view.selectionModel()->selectedIndexes().size(), list.size());
}
void tst_QTreeView::task245654_changeModelAndExpandAll()
@@ -4104,7 +4081,7 @@ void tst_QTreeView::doubleClickedWithSpans()
view.setModel(&model);
view.setFirstColumnSpanned(0, QModelIndex(), true);
view.show();
- QApplication::setActiveWindow(&view);
+ QApplicationPrivate::setActiveWindow(&view);
QVERIFY(QTest::qWaitForWindowActive(&view));
QVERIFY(view.isActiveWindow());
@@ -4114,7 +4091,7 @@ void tst_QTreeView::doubleClickedWithSpans()
QTest::mousePress(view.viewport(), Qt::LeftButton, {}, p);
QTest::mouseDClick(view.viewport(), Qt::LeftButton, {}, p);
QTest::mouseRelease(view.viewport(), Qt::LeftButton, {}, p);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
//let's click on the 2nd column
p.setX(p.x() + view.header()->sectionSize(0));
@@ -4125,7 +4102,7 @@ void tst_QTreeView::doubleClickedWithSpans()
QTest::mousePress(view.viewport(), Qt::LeftButton, {}, p);
QTest::mouseDClick(view.viewport(), Qt::LeftButton, {}, p);
QTest::mouseRelease(view.viewport(), Qt::LeftButton, {}, p);
- QTRY_COMPARE(spy.count(), 2);
+ QTRY_COMPARE(spy.size(), 2);
}
void tst_QTreeView::taskQTBUG_6450_selectAllWith1stColumnHidden()
@@ -4206,7 +4183,7 @@ void tst_QTreeView::keyboardNavigationWithDisabled()
view.resize(200, view.visualRect(model.index(0,0)).height()*10);
topLevel.show();
- QApplication::setActiveWindow(&topLevel);
+ QApplicationPrivate::setActiveWindow(&topLevel);
QVERIFY(QTest::qWaitForWindowActive(&topLevel));
QVERIFY(topLevel.isActiveWindow());
@@ -4792,7 +4769,7 @@ void tst_QTreeView::statusTip()
mw.setGeometry(QRect(QPoint(QGuiApplication::primaryScreen()->geometry().center() - QPoint(250, 250)),
QSize(500, 500)));
mw.show();
- QApplication::setActiveWindow(&mw);
+ QApplicationPrivate::setActiveWindow(&mw);
QVERIFY(QTest::qWaitForWindowActive(&mw));
// Ensure it is moved away first and then moved to the relevant section
QTest::mouseMove(mw.windowHandle(), view->mapTo(&mw, view->rect().bottomLeft() + QPoint(20, 20)));
@@ -4843,6 +4820,9 @@ void tst_QTreeView::fetchMoreOnScroll()
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
QSKIP("Wayland: This fails. Figure out why.");
+ if (QGuiApplication::platformName().startsWith(QLatin1String("eglfs"), Qt::CaseInsensitive))
+ QSKIP("EGLFS does not allow resizing on top level window");
+
QTreeView tw;
FetchMoreModel im;
tw.setModel(&im);
@@ -4920,6 +4900,9 @@ void tst_QTreeView::checkIntersectedRect_data()
void tst_QTreeView::checkIntersectedRect()
{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("eglfs"), Qt::CaseInsensitive))
+ QSKIP("EGLFS does not allow resizing on top level window");
+
QFETCH(QStandardItemModel *, model);
QFETCH(const QList<QModelIndex>, changedIndexes);
QFETCH(bool, isEmpty);
@@ -5142,7 +5125,7 @@ void tst_QTreeView::fetchUntilScreenFull()
TreeItem* parentItem = parent.isValid() ? static_cast<TreeItem*>(parent.internalPointer())
: m_root;
- return parentItem->children.count();
+ return parentItem->children.size();
}
int columnCount(const QModelIndex&) const override { return 2; }
@@ -5221,6 +5204,10 @@ void tst_QTreeView::fetchUntilScreenFull()
TreeItem* m_root;
};
+ if (QGuiApplication::platformName().startsWith(QLatin1String("eglfs"), Qt::CaseInsensitive))
+ QSKIP("EGLFS does not allow resizing on top level window");
+
+
QTreeView tv;
TreeModel model;
tv.setModel(&model);
diff --git a/tests/auto/widgets/itemviews/qtreewidget/CMakeLists.txt b/tests/auto/widgets/itemviews/qtreewidget/CMakeLists.txt
index 8a9dba604e..251dbb9b79 100644
--- a/tests/auto/widgets/itemviews/qtreewidget/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qtreewidget/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtreewidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtreewidget Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtreewidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtreewidget
SOURCES
tst_qtreewidget.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
index 8b4fcd2459..f4423831ca 100644
--- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
+++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QApplication>
#include <QHeaderView>
#include <QLineEdit>
+#include <QScopeGuard>
#include <QScrollBar>
#include <QSignalSpy>
#include <QStyledItemDelegate>
@@ -305,8 +281,8 @@ void tst_QTreeWidget::addTopLevelItem()
while (!tops.isEmpty()) {
TreeItem *ti = tops.takeFirst();
delete ti;
- QCOMPARE(tree.topLevelItemCount(), tops.count());
- for (int i = 0; i < tops.count(); ++i)
+ QCOMPARE(tree.topLevelItemCount(), tops.size());
+ for (int i = 0; i < tops.size(); ++i)
QCOMPARE(tree.topLevelItem(i), tops.at(i));
}
@@ -347,6 +323,7 @@ void tst_QTreeWidget::addTopLevelItem()
// invalid insert
{
tops.clear();
+ const auto sg = qScopeGuard([&] { qDeleteAll(std::exchange(tops, {})); });
for (int i = 0; i < 10; ++i)
tops << new TreeItem();
int count = tree.topLevelItemCount();
@@ -401,12 +378,12 @@ void tst_QTreeWidget::currentItem()
tree.setCurrentItem(item);
QCOMPARE(tree.currentItem(), item);
- QCOMPARE(currentItemChangedSpy.count(), 1);
+ QCOMPARE(currentItemChangedSpy.size(), 1);
QVariantList args = currentItemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(1)), previous);
- QCOMPARE(itemSelectionChangedSpy.count(), 1);
+ QCOMPARE(itemSelectionChangedSpy.size(), 1);
itemSelectionChangedSpy.clear();
previous = item;
@@ -419,15 +396,15 @@ void tst_QTreeWidget::currentItem()
if (!currentItemChangedSpy.isEmpty()) {
// ### we get a currentItemChanged() when what really
// changed was just currentColumn(). Should it be like this?
- QCOMPARE(currentItemChangedSpy.count(), 1);
+ QCOMPARE(currentItemChangedSpy.size(), 1);
QVariantList args = currentItemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(1)), item);
if (tree.selectionBehavior() == QAbstractItemView::SelectItems) {
- QCOMPARE(itemSelectionChangedSpy.count(), 1);
+ QCOMPARE(itemSelectionChangedSpy.size(), 1);
itemSelectionChangedSpy.clear();
} else {
- QCOMPARE(itemSelectionChangedSpy.count(), 0);
+ QCOMPARE(itemSelectionChangedSpy.size(), 0);
}
}
}
@@ -487,7 +464,7 @@ void tst_QTreeWidget::editItem()
QTest::keyClick(editor, Qt::Key_A);
QTest::keyClick(editor, Qt::Key_Enter);
QCoreApplication::processEvents();
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
QVariantList args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem *>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), col);
@@ -643,7 +620,7 @@ void tst_QTreeWidget::setItemHidden2()
{
// From Task 78587
const QStringList hl({"ID", "Desc"});
- testWidget->setColumnCount(hl.count());
+ testWidget->setColumnCount(hl.size());
testWidget->setHeaderLabels(hl);
testWidget->setSortingEnabled(true);
@@ -844,7 +821,7 @@ void tst_QTreeWidget::selectedItems()
// check selectedItems
const auto sel = testWidget->selectedItems();
- QCOMPARE(sel.count(), expectedItems.count());
+ QCOMPARE(sel.size(), expectedItems.size());
for (const auto &itemPath : expectedItems) {
QTreeWidgetItem *item = nullptr;
for (int index : itemPath) {
@@ -880,7 +857,7 @@ void tst_QTreeWidget::selectedItems()
}
item->setSelected(false);
}
- QCOMPARE(testWidget->selectedItems().count(), 0);
+ QCOMPARE(testWidget->selectedItems().size(), 0);
}
void tst_QTreeWidget::itemAssignment()
@@ -1113,9 +1090,9 @@ void tst_QTreeWidget::findItems()
QList<QTreeWidgetItem*> result = testWidget->findItems(pattern,
Qt::MatchExactly|Qt::MatchRecursive);
- QCOMPARE(result.count(), resultCount);
+ QCOMPARE(result.size(), resultCount);
- for (int k = 0; k < result.count() && k < resultText.count(); ++k)
+ for (int k = 0; k < result.size() && k < resultText.size(); ++k)
QCOMPARE(result.at(k)->text(column), resultText.at(k));
}
@@ -1133,7 +1110,7 @@ void tst_QTreeWidget::findItemsInColumn()
// Recursively search column one for 400.
QList<QTreeWidgetItem*> items = testWidget->findItems("400", Qt::MatchExactly|Qt::MatchRecursive, 1);
- QCOMPARE(items.count(), 1);
+ QCOMPARE(items.size(), 1);
}
void tst_QTreeWidget::sortItems_data()
@@ -1200,16 +1177,16 @@ void tst_QTreeWidget::sortItems()
testWidget->sortItems(column, order);
QCOMPARE(testWidget->sortColumn(), column);
- for (int k = 0; k < topLevelResult.count(); ++k) {
+ for (int k = 0; k < topLevelResult.size(); ++k) {
QTreeWidgetItem *item = testWidget->topLevelItem(k);
QCOMPARE(item->text(column), topLevelResult.at(k));
- for (int l = 0; l < childResult.count(); ++l)
+ for (int l = 0; l < childResult.size(); ++l)
QCOMPARE(item->child(l)->text(column), childResult.at(l));
}
- for (int m = 0; m < tops.count(); ++m)
+ for (int m = 0; m < tops.size(); ++m)
QCOMPARE(tops.at(m).row(), expectedTopRows.at(m));
- for (int n = 0; n < children.count(); ++n)
+ for (int n = 0; n < children.size(); ++n)
QCOMPARE(children.at(n).row(), expectedChildRows.at(n));
}
@@ -1369,17 +1346,17 @@ void tst_QTreeWidget::insertTopLevelItems_data()
const QStringList insert{ "baz" };
QTest::newRow("Insert at count") << initial << insert
- << initial.count() << initial.count()
- << initial.count() << initial.count();
+ << initial.size() << initial.size()
+ << initial.size() << initial.size();
QTest::newRow("Insert in the middle") << initial << insert
- << (initial.count() / 2) << (initial.count() / 2)
- << (initial.count() / 2) << (initial.count() / 2);
+ << (initial.size() / 2) << (initial.size() / 2)
+ << (initial.size() / 2) << (initial.size() / 2);
QTest::newRow("Insert less than 0") << initial << insert
<< -1 << -1
<< -1 << -1;
QTest::newRow("Insert beyond count") << initial << insert
- << initial.count() + 1 << -1
- << initial.count() + 1 << -1;
+ << initial.size() + 1 << -1
+ << initial.size() + 1 << -1;
}
void tst_QTreeWidget::insertTopLevelItems()
@@ -1394,26 +1371,26 @@ void tst_QTreeWidget::insertTopLevelItems()
{ // insert the initial items
QCOMPARE(testWidget->topLevelItemCount(), 0);
- for (int i = 0; i < initialText.count(); ++i) {
+ for (int i = 0; i < initialText.size(); ++i) {
QTreeWidgetItem *top = new QTreeWidgetItem(QStringList(initialText.at(i)));
testWidget->addTopLevelItem(top);
QCOMPARE(testWidget->indexOfTopLevelItem(top), i);
}
- QCOMPARE(testWidget->topLevelItemCount(), initialText.count());
+ QCOMPARE(testWidget->topLevelItemCount(), initialText.size());
}
{ // test adding children
QTreeWidgetItem *topLevel = testWidget->topLevelItem(0);
- for (int i = 0; i < initialText.count(); ++i)
+ for (int i = 0; i < initialText.size(); ++i)
topLevel->addChild(new QTreeWidgetItem(QStringList(initialText.at(i))));
- QCOMPARE(topLevel->childCount(), initialText.count());
+ QCOMPARE(topLevel->childCount(), initialText.size());
}
{ // test adding more top level items
QTreeWidgetItem *topsy = new QTreeWidgetItem(QStringList(insertText.at(0)));
testWidget->insertTopLevelItem(insertTopLevelIndex, topsy);
if (expectedTopLevelIndex == -1) {
- QCOMPARE(testWidget->topLevelItemCount(), initialText.count());
+ QCOMPARE(testWidget->topLevelItemCount(), initialText.size());
delete topsy;
} else {
QTreeWidgetItem *item = testWidget->topLevelItem(expectedTopLevelIndex);
@@ -1429,7 +1406,7 @@ void tst_QTreeWidget::insertTopLevelItems()
QTreeWidgetItem *child = new QTreeWidgetItem(QStringList(insertText.at(0)));
topLevel->insertChild(insertChildIndex, child);
if (expectedChildIndex == -1) {
- QCOMPARE(topLevel->childCount(), initialText.count());
+ QCOMPARE(topLevel->childCount(), initialText.size());
delete child;
} else {
QTreeWidgetItem *item = topLevel->child(expectedChildIndex);
@@ -1527,7 +1504,7 @@ void tst_QTreeWidget::keyboardNavigation()
if (testWidget->currentItem() != item) {
QCOMPARE(testWidget->currentItem(), item->parent());
item = testWidget->currentItem();
- row = item->parent() ? item->parent()->indexOfChild(item) : testWidget->indexOfTopLevelItem(item);;
+ row = item->parent() ? item->parent()->indexOfChild(item) : testWidget->indexOfTopLevelItem(item);
}
break;
case Qt::Key_Right:
@@ -1615,7 +1592,7 @@ void tst_QTreeWidget::scrollToItem()
void tst_QTreeWidget::setSortingEnabled()
{
const QStringList hl{ "ID" };
- testWidget->setColumnCount(hl.count());
+ testWidget->setColumnCount(hl.size());
testWidget->setHeaderLabels(hl);
QTreeWidgetItem *item1 = new QTreeWidgetItem(testWidget);
@@ -1684,7 +1661,7 @@ void tst_QTreeWidget::addChild()
QList<QTreeWidgetItem*> taken = item->takeChildren();
QCOMPARE(taken, children);
QCOMPARE(item->childCount(), 0);
- for (int i = 0; i < taken.count(); ++i) {
+ for (int i = 0; i < taken.size(); ++i) {
QCOMPARE(taken.at(i)->parent(), nullptr);
QCOMPARE(taken.at(i)->treeWidget(), nullptr);
item->addChild(taken.at(i)); // re-add
@@ -1694,8 +1671,8 @@ void tst_QTreeWidget::addChild()
while (!children.isEmpty()) {
QTreeWidgetItem *ti = children.takeFirst();
delete ti;
- QCOMPARE(item->childCount(), children.count());
- for (int i = 0; i < children.count(); ++i)
+ QCOMPARE(item->childCount(), children.size());
+ for (int i = 0; i < children.size(); ++i)
QCOMPARE(item->child(i), children.at(i));
}
@@ -1742,9 +1719,9 @@ void tst_QTreeWidget::setData()
QSignalSpy itemChangedSpy(
testWidget, &QTreeWidget::itemChanged);
headerItem->setText(0, "test");
- QCOMPARE(dataChangedSpy.count(), 0);
- QCOMPARE(headerDataChangedSpy.count(), 1);
- QCOMPARE(itemChangedSpy.count(), 0); // no itemChanged() signal for header item
+ QCOMPARE(dataChangedSpy.size(), 0);
+ QCOMPARE(headerDataChangedSpy.size(), 1);
+ QCOMPARE(itemChangedSpy.size(), 0); // no itemChanged() signal for header item
headerItem->setData(-1, -1, QVariant());
}
@@ -1762,24 +1739,24 @@ void tst_QTreeWidget::setData()
const QString text = QLatin1String("text ") + iS;
item->setText(j, text);
QCOMPARE(item->text(j), text);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setText(j, text);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
QPixmap pixmap(32, 32);
pixmap.fill((i == 1) ? Qt::red : Qt::green);
QIcon icon(pixmap);
item->setIcon(j, icon);
QCOMPARE(item->icon(j), icon);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setIcon(j, icon);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
@@ -1787,94 +1764,94 @@ void tst_QTreeWidget::setData()
const QString toolTip = QLatin1String("toolTip ") + iS;
item->setToolTip(j, toolTip);
QCOMPARE(item->toolTip(j), toolTip);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setToolTip(j, toolTip);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
const QString statusTip = QLatin1String("statusTip ") + iS;
item->setStatusTip(j, statusTip);
QCOMPARE(item->statusTip(j), statusTip);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setStatusTip(j, statusTip);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
const QString whatsThis = QLatin1String("whatsThis ") + iS;
item->setWhatsThis(j, whatsThis);
QCOMPARE(item->whatsThis(j), whatsThis);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setWhatsThis(j, whatsThis);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
QSize sizeHint(64*i, 48*i);
item->setSizeHint(j, sizeHint);
QCOMPARE(item->sizeHint(j), sizeHint);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setSizeHint(j, sizeHint);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
QFont font;
item->setFont(j, font);
QCOMPARE(item->font(j), font);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setFont(j, font);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
Qt::Alignment textAlignment((i == 1)
? Qt::AlignLeft|Qt::AlignVCenter
: Qt::AlignRight);
item->setTextAlignment(j, textAlignment);
QCOMPARE(item->textAlignment(j), int(textAlignment));
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setTextAlignment(j, textAlignment);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
QColor backgroundColor((i == 1) ? Qt::blue : Qt::yellow);
item->setBackground(j, backgroundColor);
QCOMPARE(item->background(j).color(), backgroundColor);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setBackground(j, backgroundColor);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
const QColor foregroundColor((i == 1) ? Qt::green : Qt::cyan);
item->setForeground(j, foregroundColor);
QCOMPARE(item->foreground(j), foregroundColor);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setForeground(j, foregroundColor);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
Qt::CheckState checkState((i == 1) ? Qt::PartiallyChecked : Qt::Checked);
item->setCheckState(j, checkState);
QCOMPARE(item->checkState(j), checkState);
- QCOMPARE(itemChangedSpy.count(), 1);
+ QCOMPARE(itemChangedSpy.size(), 1);
args = itemChangedSpy.takeFirst();
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setCheckState(j, checkState);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
QCOMPARE(item->text(j), text);
QCOMPARE(item->icon(j), icon);
@@ -1907,7 +1884,7 @@ void tst_QTreeWidget::setData()
QCOMPARE(qvariant_cast<QTreeWidgetItem*>(args.at(0)), item);
QCOMPARE(qvariant_cast<int>(args.at(1)), j);
item->setBackground(j, pixmap);
- QCOMPARE(itemChangedSpy.count(), 0);
+ QCOMPARE(itemChangedSpy.size(), 0);
item->setData(j, Qt::DisplayRole, QVariant());
item->setData(j, Qt::DecorationRole, QVariant());
@@ -1920,7 +1897,7 @@ void tst_QTreeWidget::setData()
item->setData(j, Qt::BackgroundRole, QVariant());
item->setData(j, Qt::ForegroundRole, QVariant());
item->setData(j, Qt::CheckStateRole, QVariant());
- QCOMPARE(itemChangedSpy.count(), 11);
+ QCOMPARE(itemChangedSpy.size(), 11);
itemChangedSpy.clear();
QCOMPARE(item->data(j, Qt::DisplayRole).toString(), QString());
@@ -1983,11 +1960,11 @@ void tst_QTreeWidget::itemData()
QCOMPARE(widget.currentRoles, QList<int> { Qt::UserRole + i });
}
QMap<int, QVariant> flags = widget.model()->itemData(widget.model()->index(0, 0));
- QCOMPARE(flags.count(), 6);
+ QCOMPARE(flags.size(), 6);
for (int i = 0; i < 4; ++i)
QCOMPARE(flags[Qt::UserRole + i].toString(), QString::number(i + 1));
flags = widget.model()->itemData(widget.model()->index(0, 1));
- QCOMPARE(flags.count(), 0);
+ QCOMPARE(flags.size(), 0);
item.setBackground(0, QBrush(Qt::red));
item.setForeground(0, QBrush(Qt::green));
@@ -2056,7 +2033,7 @@ void tst_QTreeWidget::setHeaderLabels()
{
QStringList list = QString("a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z").split(QLatin1Char(','));
testWidget->setHeaderLabels(list);
- QCOMPARE(testWidget->header()->count(), list.count());
+ QCOMPARE(testWidget->header()->count(), list.size());
}
void tst_QTreeWidget::setHeaderItem()
@@ -2286,11 +2263,11 @@ void tst_QTreeWidget::insertItemsWithSorting()
w.addTopLevelItem(new QTreeWidgetItem({ txt }));
break;
}
- QCOMPARE(w.topLevelItemCount(), expectedItems.count());
+ QCOMPARE(w.topLevelItemCount(), expectedItems.size());
for (int i = 0; i < w.topLevelItemCount(); ++i)
QCOMPARE(w.topLevelItem(i)->text(0), expectedItems.at(i));
- for (int k = 0; k < persistent.count(); ++k)
+ for (int k = 0; k < persistent.size(); ++k)
QCOMPARE(persistent.at(k).row(), expectedRows.at(k));
}
}
@@ -2331,13 +2308,13 @@ void tst_QTreeWidget::insertExpandedItemsWithSorting()
QTreeWidgetItem *child = new QTreeWidgetItem(parent, {text});
items << child;
}
- QCOMPARE(parent->childCount(), childTexts.count());
+ QCOMPARE(parent->childCount(), childTexts.size());
QVERIFY(parent->isExpanded());
}
- QCOMPARE(tree.model()->rowCount(), parentTexts.count());
+ QCOMPARE(tree.model()->rowCount(), parentTexts.size());
// verify that the items are still expanded
- for (const QTreeWidgetItem *item : qAsConst(items)) {
+ for (const QTreeWidgetItem *item : std::as_const(items)) {
if (item->childCount() > 0)
QVERIFY(item->isExpanded());
QModelIndex idx = tree.indexFromItem(item);
@@ -2355,10 +2332,10 @@ void tst_QTreeWidget::insertExpandedItemsWithSorting()
PersistentModelIndexVec children;
for (int i = 0; i < model->rowCount(parents.constFirst()); ++i)
children.push_back(model->index(i, 0, parents.constFirst()));
- for (int i = 0; i < parentResult.count(); ++i) {
+ for (int i = 0; i < parentResult.size(); ++i) {
QTreeWidgetItem *item = tree.topLevelItem(i);
QCOMPARE(item->text(0), parentResult.at(i));
- for (int j = 0; j < childResult.count(); ++j)
+ for (int j = 0; j < childResult.size(); ++j)
QCOMPARE(item->child(j)->text(0), childResult.at(j));
}
}
@@ -2450,19 +2427,19 @@ void tst_QTreeWidget::changeDataWithSorting()
QTreeWidgetItem *item = w.topLevelItem(itemIndex);
item->setText(0, newValue);
- for (int i = 0; i < expectedItems.count(); ++i) {
+ for (int i = 0; i < expectedItems.size(); ++i) {
QCOMPARE(w.topLevelItem(i)->text(0), expectedItems.at(i));
- for (const QPersistentModelIndex &p : qAsConst(persistent)) {
+ for (const QPersistentModelIndex &p : std::as_const(persistent)) {
if (p.row() == i) // the same toplevel row
QCOMPARE(p.internalPointer(), static_cast<void *>(w.topLevelItem(i)));
}
}
- for (int k = 0; k < persistent.count(); ++k)
+ for (int k = 0; k < persistent.size(); ++k)
QCOMPARE(persistent.at(k).row(), expectedRows.at(k));
- QCOMPARE(dataChangedSpy.count(), 1);
- QCOMPARE(layoutChangedSpy.count(), reorderingExpected ? 1 : 0);
+ QCOMPARE(dataChangedSpy.size(), 1);
+ QCOMPARE(layoutChangedSpy.size(), reorderingExpected ? 1 : 0);
}
void tst_QTreeWidget::changeDataWithStableSorting_data()
@@ -2619,19 +2596,19 @@ void tst_QTreeWidget::changeDataWithStableSorting()
item->setText(0, newValue);
if (forceChange)
item->emitDataChanged();
- for (int i = 0; i < expectedItems.count(); ++i) {
+ for (int i = 0; i < expectedItems.size(); ++i) {
QCOMPARE(w.topLevelItem(i)->text(0), expectedItems.at(i));
- for (const QPersistentModelIndex &p : qAsConst(persistent)) {
+ for (const QPersistentModelIndex &p : std::as_const(persistent)) {
if (p.row() == i) // the same toplevel row
QCOMPARE(p.internalPointer(), static_cast<void *>(w.topLevelItem(i)));
}
}
- for (int k = 0; k < persistent.count(); ++k)
+ for (int k = 0; k < persistent.size(); ++k)
QCOMPARE(persistent.at(k).row(), expectedRows.at(k));
- QCOMPARE(dataChangedSpy.count(), 1);
- QCOMPARE(layoutChangedSpy.count(), reorderingExpected ? 1 : 0);
+ QCOMPARE(dataChangedSpy.size(), 1);
+ QCOMPARE(layoutChangedSpy.size(), reorderingExpected ? 1 : 0);
}
void tst_QTreeWidget::sizeHint_data()
@@ -2650,6 +2627,12 @@ void tst_QTreeWidget::sizeHint()
QFETCH(Qt::ScrollBarPolicy, scrollBarPolicy);
QFETCH(QSize, viewSize);
+ const QString defaultStyle = QApplication::style()->name();
+ QApplication::setStyle("fusion");
+ const auto resetStyle = qScopeGuard([defaultStyle]{
+ QApplication::setStyle(defaultStyle);
+ });
+
QTreeWidget view;
view.setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
view.setVerticalScrollBarPolicy(scrollBarPolicy);
@@ -2667,6 +2650,7 @@ void tst_QTreeWidget::sizeHint()
QTRY_COMPARE(view.size(), viewSize);
}
+ QApplication::processEvents(); // execute delayed layouts
auto sizeHint = view.sizeHint();
view.hide();
QCOMPARE(view.sizeHint(), sizeHint);
@@ -2737,8 +2721,8 @@ void tst_QTreeWidget::sortedIndexOfChild()
tw.sortItems(0, sortOrder);
tw.expandAll();
- QCOMPARE(itms.count(), expectedIndexes.count());
- for (int j = 0; j < expectedIndexes.count(); ++j)
+ QCOMPARE(itms.size(), expectedIndexes.size());
+ for (int j = 0; j < expectedIndexes.size(); ++j)
QCOMPARE(top->indexOfChild(itms.at(j)), expectedIndexes.at(j));
}
@@ -2763,8 +2747,8 @@ void tst_QTreeWidget::expandAndCallapse()
tw.collapseItem(top);
tw.collapseItem(top);
- QCOMPARE(spy0.count(), 3);
- QCOMPARE(spy1.count(), 2);
+ QCOMPARE(spy0.size(), 3);
+ QCOMPARE(spy1.size(), 2);
}
void tst_QTreeWidget::setDisabled()
@@ -2877,13 +2861,13 @@ void tst_QTreeWidget::removeSelectedItem()
QItemSelectionModel *selModel = w->selectionModel();
QCOMPARE(selModel->hasSelection(), true);
- QCOMPARE(selModel->selectedRows().count(), 1);
+ QCOMPARE(selModel->selectedRows().size(), 1);
const QScopedPointer<QTreeWidgetItem> taken(w->takeTopLevelItem(2));
QCOMPARE(taken->text(0), QLatin1String("C"));
QCOMPARE(selModel->hasSelection(), false);
- QCOMPARE(selModel->selectedRows().count(), 0);
+ QCOMPARE(selModel->selectedRows().size(), 0);
QItemSelection sel = selModel->selection();
QCOMPARE(selModel->isSelected(w->model()->index(0,0)), false);
}
@@ -2994,7 +2978,7 @@ protected:
auto newItem = new QTreeWidgetItem({QString::number(i++)});
m_list.append(newItem);
insertTopLevelItem(0, newItem);
- while (m_list.count() > 10)
+ while (m_list.size() > 10)
delete m_list.takeFirst();
}
QTreeWidget::timerEvent(event);
@@ -3308,7 +3292,7 @@ void tst_QTreeWidget::emitDataChanged()
auto item = new PublicTreeItem;
tree.insertTopLevelItem(0, item);
item->emitDataChanged();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QTreeWidget::setCurrentItemExpandsParent()
diff --git a/tests/auto/widgets/itemviews/qtreewidgetitemiterator/CMakeLists.txt b/tests/auto/widgets/itemviews/qtreewidgetitemiterator/CMakeLists.txt
index c62b0d4c6f..d82eaadced 100644
--- a/tests/auto/widgets/itemviews/qtreewidgetitemiterator/CMakeLists.txt
+++ b/tests/auto/widgets/itemviews/qtreewidgetitemiterator/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtreewidgetitemiterator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtreewidgetitemiterator Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtreewidgetitemiterator LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtreewidgetitemiterator
SOURCES
tst_qtreewidgetitemiterator.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp b/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp
index 68d149fc6e..a650eb229e 100644
--- a/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.cpp
+++ b/tests/auto/widgets/itemviews/qtreewidgetitemiterator/tst_qtreewidgetitemiterator.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 <QTreeWidget>
@@ -891,7 +866,7 @@ void tst_QTreeWidgetItemIterator::iteratorflags()
QTreeWidgetItemIterator it(testWidget, iteratorflags);
it += start;
int iMatch = 0;
- while (*it && iMatch < matches.count()) {
+ while (*it && iMatch < matches.size()) {
QTreeWidgetItem *item = *it;
QCOMPARE(item->text(0), matches[iMatch]);
++it;
diff --git a/tests/auto/widgets/kernel/CMakeLists.txt b/tests/auto/widgets/kernel/CMakeLists.txt
index e1b27b2417..2d4880ea3c 100644
--- a/tests/auto/widgets/kernel/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from kernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qapplication)
add_subdirectory(qboxlayout)
@@ -16,10 +17,7 @@ add_subdirectory(qsizepolicy)
if(NOT APPLE)
add_subdirectory(qgesturerecognizer)
endif()
-# QTBUG-87668 # special case
-if(NOT ANDROID)
- add_subdirectory(qwidget)
-endif()
+add_subdirectory(qwidget)
if(QT_FEATURE_shortcut)
add_subdirectory(qshortcut)
endif()
diff --git a/tests/auto/widgets/kernel/qaction/CMakeLists.txt b/tests/auto/widgets/kernel/qaction/CMakeLists.txt
index dd70d5448f..9d1985da0b 100644
--- a/tests/auto/widgets/kernel/qaction/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qaction/CMakeLists.txt
@@ -1,15 +1,23 @@
-# Generated from qaction.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qaction Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qaction LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qaction
SOURCES
tst_qaction.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/kernel/qaction/tst_qaction.cpp b/tests/auto/widgets/kernel/qaction/tst_qaction.cpp
index 025cebb15f..36985c0de3 100644
--- a/tests/auto/widgets/kernel/qaction/tst_qaction.cpp
+++ b/tests/auto/widgets/kernel/qaction/tst_qaction.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 <QDialog>
#include <QMainWindow>
@@ -42,6 +17,8 @@
#include <qpa/qplatformintegration.h>
#include <private/qguiapplication_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
class tst_QAction : public QObject
{
Q_OBJECT
@@ -136,7 +113,7 @@ void tst_QAction::actionEvent()
// add action
MyWidget testWidget(this);
testWidget.show();
- QApplication::setActiveWindow(&testWidget);
+ QApplicationPrivate::setActiveWindow(&testWidget);
testWidget.addAction(&a);
qApp->processEvents();
@@ -166,7 +143,7 @@ void tst_QAction::alternateShortcuts()
MyWidget testWidget(this);
testWidget.show();
- QApplication::setActiveWindow(&testWidget);
+ QApplicationPrivate::setActiveWindow(&testWidget);
{
QAction act(&testWidget);
@@ -178,11 +155,11 @@ void tst_QAction::alternateShortcuts()
act.setAutoRepeat(true);
QTest::keyClick(&testWidget, Qt::Key_A, Qt::ControlModifier);
- QCOMPARE(spy.count(), 1); //act should have been triggered
+ QCOMPARE(spy.size(), 1); //act should have been triggered
act.setAutoRepeat(false);
QTest::keyClick(&testWidget, Qt::Key_A, Qt::ControlModifier);
- QCOMPARE(spy.count(), 2); //act should have been triggered a 2nd time
+ QCOMPARE(spy.size(), 2); //act should have been triggered a 2nd time
//end of the scope of the action, it will be destroyed and removed from wid
//This action should also unregister its shortcuts
@@ -197,7 +174,7 @@ void tst_QAction::keysequence()
{
MyWidget testWidget(this);
testWidget.show();
- QApplication::setActiveWindow(&testWidget);
+ QApplicationPrivate::setActiveWindow(&testWidget);
{
QAction act(&testWidget);
@@ -212,12 +189,12 @@ void tst_QAction::keysequence()
act.setAutoRepeat(true);
QTest::keySequence(&testWidget, ks);
QCoreApplication::processEvents();
- QCOMPARE(spy.count(), 1); // act should have been triggered
+ QCOMPARE(spy.size(), 1); // act should have been triggered
act.setAutoRepeat(false);
QTest::keySequence(&testWidget, ks);
QCoreApplication::processEvents();
- QCOMPARE(spy.count(), 2); //act should have been triggered a 2nd time
+ QCOMPARE(spy.size(), 2); //act should have been triggered a 2nd time
// end of the scope of the action, it will be destroyed and removed from widget
// This action should also unregister its shortcuts
@@ -231,7 +208,7 @@ void tst_QAction::enabledVisibleInteraction()
{
MyWidget testWidget(this);
testWidget.show();
- QApplication::setActiveWindow(&testWidget);
+ QApplicationPrivate::setActiveWindow(&testWidget);
QAction act(nullptr);
// check defaults
@@ -253,15 +230,15 @@ void tst_QAction::enabledVisibleInteraction()
act.setEnabled(true);
act.setVisible(false);
QTest::keyClick(&testWidget, Qt::Key_T, Qt::ControlModifier);
- QCOMPARE(spy.count(), 0); //act is not visible, so don't trigger
+ QCOMPARE(spy.size(), 0); //act is not visible, so don't trigger
act.setVisible(false);
act.setEnabled(true);
QTest::keyClick(&testWidget, Qt::Key_T, Qt::ControlModifier);
- QCOMPARE(spy.count(), 0); //act is not visible, so don't trigger
+ QCOMPARE(spy.size(), 0); //act is not visible, so don't trigger
act.setVisible(true);
act.setEnabled(true);
QTest::keyClick(&testWidget, Qt::Key_T, Qt::ControlModifier);
- QCOMPARE(spy.count(), 1); //act is visible and enabled, so trigger
+ QCOMPARE(spy.size(), 1); //act is visible and enabled, so trigger
}
#endif // QT_CONFIG(shortcut)
@@ -279,12 +256,12 @@ void tst_QAction::task229128TriggeredSignalWhenInActiongroup()
QSignalSpy actionSpy(checkedAction, QOverload<bool>::of(&QAction::triggered));
QSignalSpy actionGroupSpy(&ag, QOverload<QAction*>::of(&QActionGroup::triggered));
- QCOMPARE(actionGroupSpy.count(), 0);
- QCOMPARE(actionSpy.count(), 0);
+ QCOMPARE(actionGroupSpy.size(), 0);
+ QCOMPARE(actionSpy.size(), 0);
checkedAction->trigger();
// check that both the group and the action have emitted the signal
- QCOMPARE(actionGroupSpy.count(), 1);
- QCOMPARE(actionSpy.count(), 1);
+ QCOMPARE(actionGroupSpy.size(), 1);
+ QCOMPARE(actionSpy.size(), 1);
}
#if QT_CONFIG(shortcut)
@@ -296,7 +273,7 @@ void tst_QAction::repeat()
MyWidget testWidget(this);
testWidget.show();
- QApplication::setActiveWindow(&testWidget);
+ QApplicationPrivate::setActiveWindow(&testWidget);
QVERIFY(QTest::qWaitForWindowActive(&testWidget));
QAction act(&testWidget);
@@ -307,7 +284,7 @@ void tst_QAction::repeat()
act.setAutoRepeat(true);
QTest::keyPress(&testWidget, Qt::Key_F);
QTest::keyRelease(&testWidget, Qt::Key_F);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
QTest::keyPress(&testWidget, Qt::Key_F);
@@ -315,7 +292,7 @@ void tst_QAction::repeat()
QTest::simulateEvent(&testWidget, true, Qt::Key_F, Qt::NoModifier, QString("f"), true);
QTest::simulateEvent(&testWidget, true, Qt::Key_F, Qt::NoModifier, QString("f"), true);
QTest::keyRelease(&testWidget, Qt::Key_F);
- QCOMPARE(spy.count(), 3);
+ QCOMPARE(spy.size(), 3);
spy.clear();
act.setAutoRepeat(false);
@@ -323,14 +300,14 @@ void tst_QAction::repeat()
QTest::simulateEvent(&testWidget, true, Qt::Key_F, Qt::NoModifier, QString("f"), true);
QTest::simulateEvent(&testWidget, true, Qt::Key_F, Qt::NoModifier, QString("f"), true);
QTest::keyRelease(&testWidget, Qt::Key_F);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
act.setAutoRepeat(true);
QTest::keyPress(&testWidget, Qt::Key_F);
QTest::simulateEvent(&testWidget, true, Qt::Key_F, Qt::NoModifier, QString("f"), true);
QTest::keyRelease(&testWidget, Qt::Key_F);
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_QAction::disableShortcutsWithBlockedWidgets_data()
@@ -375,12 +352,12 @@ void tst_QAction::disableShortcutsWithBlockedWidgets()
dialog.show();
QVERIFY(QTest::qWaitForWindowExposed(&dialog));
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
QSignalSpy spy(&action, &QAction::triggered);
QTest::keyPress(&window, Qt::Key_1);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
class ShortcutOverrideWidget : public QWidget
@@ -418,7 +395,7 @@ void tst_QAction::shortcutFromKeyEvent()
// shortcut route for us
QKeyEvent e(QEvent::KeyPress, Qt::Key_1, Qt::NoModifier);
QApplication::sendEvent(&testWidget, &e);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(testWidget.shortcutOverrideCount, 1);
}
@@ -437,6 +414,9 @@ void tst_QAction::disableShortcutInMenuAction_data()
void tst_QAction::disableShortcutInMenuAction()
{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
QFETCH(QByteArray, property);
QMainWindow mw;
@@ -454,42 +434,42 @@ void tst_QAction::disableShortcutInMenuAction()
QKeyEvent event(QEvent::KeyPress, Qt::Key_A, Qt::ControlModifier);
QApplication::sendEvent(&mw, &event);
- QCOMPARE(spy.count(), ++expectedTriggerCount);
+ QCOMPARE(spy.size(), ++expectedTriggerCount);
testMenu->menuAction()->setProperty(property, false);
QApplication::sendEvent(&mw, &event);
- QCOMPARE(spy.count(), expectedTriggerCount);
+ QCOMPARE(spy.size(), expectedTriggerCount);
testMenu->menuAction()->setProperty(property, true);
QApplication::sendEvent(&mw, &event);
- QCOMPARE(spy.count(), ++expectedTriggerCount);
+ QCOMPARE(spy.size(), ++expectedTriggerCount);
// If the action lives somewhere else, then keep firing even
// if the menu has been hidden or disabled.
toolBar->addAction(testAction);
QApplication::sendEvent(&mw, &event);
- QCOMPARE(spy.count(), ++expectedTriggerCount);
+ QCOMPARE(spy.size(), ++expectedTriggerCount);
testMenu->menuAction()->setProperty(property, false);
QApplication::sendEvent(&mw, &event);
- QCOMPARE(spy.count(), ++expectedTriggerCount);
+ QCOMPARE(spy.size(), ++expectedTriggerCount);
// unless all other widgets in which the action lives have
// been hidden...
toolBar->hide();
QApplication::sendEvent(&mw, &event);
- QCOMPARE(spy.count(), expectedTriggerCount);
+ QCOMPARE(spy.size(), expectedTriggerCount);
// ... or disabled
toolBar->show();
toolBar->setEnabled(false);
QApplication::sendEvent(&mw, &event);
- QCOMPARE(spy.count(), expectedTriggerCount);
+ QCOMPARE(spy.size(), expectedTriggerCount);
// back to normal
toolBar->setEnabled(true);
QApplication::sendEvent(&mw, &event);
- QCOMPARE(spy.count(), ++expectedTriggerCount);
+ QCOMPARE(spy.size(), ++expectedTriggerCount);
}
#endif // QT_CONFIG(shortcut)
diff --git a/tests/auto/widgets/kernel/qactiongroup/CMakeLists.txt b/tests/auto/widgets/kernel/qactiongroup/CMakeLists.txt
index 927802103c..e26ee75bc1 100644
--- a/tests/auto/widgets/kernel/qactiongroup/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qactiongroup/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qactiongroup.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qactiongroup Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qactiongroup LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qactiongroup
SOURCES
tst_qactiongroup.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/kernel/qactiongroup/tst_qactiongroup.cpp b/tests/auto/widgets/kernel/qactiongroup/tst_qactiongroup.cpp
index 7462fd8bbf..0d42340bfb 100644
--- a/tests/auto/widgets/kernel/qactiongroup/tst_qactiongroup.cpp
+++ b/tests/auto/widgets/kernel/qactiongroup/tst_qactiongroup.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 <QTest>
diff --git a/tests/auto/widgets/kernel/qapplication/BLACKLIST b/tests/auto/widgets/kernel/qapplication/BLACKLIST
index cce10602e4..c68c7d6b14 100644
--- a/tests/auto/widgets/kernel/qapplication/BLACKLIST
+++ b/tests/auto/widgets/kernel/qapplication/BLACKLIST
@@ -1,5 +1,3 @@
-[sendEventsOnProcessEvents]
-ubuntu-20.04
[touchEventPropagation]
# QTBUG-66745
opensuse-leap
diff --git a/tests/auto/widgets/kernel/qapplication/CMakeLists.txt b/tests/auto/widgets/kernel/qapplication/CMakeLists.txt
index 3bb7e31691..524db06560 100644
--- a/tests/auto/widgets/kernel/qapplication/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qapplication/CMakeLists.txt
@@ -1,5 +1,17 @@
-# Generated from qapplication.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_qapplication LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
add_subdirectory(desktopsettingsaware)
add_subdirectory(modal)
add_subdirectory(test)
+
+add_dependencies(tst_qapplication
+ desktopsettingsaware_helper
+ modal_helper
+)
diff --git a/tests/auto/widgets/kernel/qapplication/desktopsettingsaware/CMakeLists.txt b/tests/auto/widgets/kernel/qapplication/desktopsettingsaware/CMakeLists.txt
index a391d5b13d..f094a451d2 100644
--- a/tests/auto/widgets/kernel/qapplication/desktopsettingsaware/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qapplication/desktopsettingsaware/CMakeLists.txt
@@ -1,15 +1,16 @@
-# Generated from desktopsettingsaware.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## desktopsettingsaware Binary:
#####################################################################
-qt_internal_add_executable(desktopsettingsaware_helper # special case
+qt_internal_add_executable(desktopsettingsaware_helper
SOURCES
main.cpp
- OUTPUT_DIRECTORY # special case
- ${CMAKE_CURRENT_BINARY_DIR}/.. # special case
- PUBLIC_LIBRARIES
+ OUTPUT_DIRECTORY
+ ${CMAKE_CURRENT_BINARY_DIR}/..
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/kernel/qapplication/desktopsettingsaware/main.cpp b/tests/auto/widgets/kernel/qapplication/desktopsettingsaware/main.cpp
index 5e86bcb529..1bf3eef55c 100644
--- a/tests/auto/widgets/kernel/qapplication/desktopsettingsaware/main.cpp
+++ b/tests/auto/widgets/kernel/qapplication/desktopsettingsaware/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 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/widgets/kernel/qapplication/modal/CMakeLists.txt b/tests/auto/widgets/kernel/qapplication/modal/CMakeLists.txt
index 95c429f936..79c5660650 100644
--- a/tests/auto/widgets/kernel/qapplication/modal/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qapplication/modal/CMakeLists.txt
@@ -1,16 +1,17 @@
-# Generated from modal.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## modal Binary:
#####################################################################
-qt_internal_add_executable(modal_helper # special case
+qt_internal_add_executable(modal_helper
SOURCES
base.cpp base.h
main.cpp
- OUTPUT_DIRECTORY # special case
- ${CMAKE_CURRENT_BINARY_DIR}/.. # special case
- PUBLIC_LIBRARIES
+ OUTPUT_DIRECTORY
+ ${CMAKE_CURRENT_BINARY_DIR}/..
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/kernel/qapplication/modal/base.cpp b/tests/auto/widgets/kernel/qapplication/modal/base.cpp
index 249d402f2e..49a90723dd 100644
--- a/tests/auto/widgets/kernel/qapplication/modal/base.cpp
+++ b/tests/auto/widgets/kernel/qapplication/modal/base.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 "base.h"
diff --git a/tests/auto/widgets/kernel/qapplication/modal/base.h b/tests/auto/widgets/kernel/qapplication/modal/base.h
index 153d9ca420..168da92f97 100644
--- a/tests/auto/widgets/kernel/qapplication/modal/base.h
+++ b/tests/auto/widgets/kernel/qapplication/modal/base.h
@@ -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
#ifndef BASE_H
#define BASE_H
diff --git a/tests/auto/widgets/kernel/qapplication/modal/main.cpp b/tests/auto/widgets/kernel/qapplication/modal/main.cpp
index 9dcb6732fa..3f3496834d 100644
--- a/tests/auto/widgets/kernel/qapplication/modal/main.cpp
+++ b/tests/auto/widgets/kernel/qapplication/modal/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 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 "base.h"
diff --git a/tests/auto/widgets/kernel/qapplication/test/CMakeLists.txt b/tests/auto/widgets/kernel/qapplication/test/CMakeLists.txt
index ad5209f9bf..fc80b8af7e 100644
--- a/tests/auto/widgets/kernel/qapplication/test/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qapplication/test/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## test Test:
@@ -8,35 +9,23 @@
list(APPEND test_data "../tmp/README")
list(APPEND test_data "../modal")
-qt_internal_add_test(tst_qapplication # special case
+qt_internal_add_test(tst_qapplication
SOURCES
../tst_qapplication.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
Qt::WidgetsPrivate
TESTDATA ${test_data}
- OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/.." # special case
+ OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/.."
)
## Scopes:
#####################################################################
-qt_internal_extend_target(tst_qapplication CONDITION builtin_testdata # special case
+qt_internal_extend_target(tst_qapplication CONDITION builtin_testdata
DEFINES
BUILTIN_TESTDATA
)
-
-#### Keys ignored in scope 3:.:.:test.pro:NOT ANDROID:
-# SUBPROGRAMS = "desktopsettingsaware" "modal"
-
-#### Keys ignored in scope 6:.:.:test.pro:NOT ANDROID:
-# TEST_HELPER_INSTALLS = "../debug/helper"
-
-#### Keys ignored in scope 8:.:.:test.pro:NOT ANDROID:
-# TEST_HELPER_INSTALLS = "../release/helper"
-
-#### Keys ignored in scope 10:.:.:test.pro:NOT ANDROID:
-# TEST_HELPER_INSTALLS = "../helper"
diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
index e5ac69a00b..b71a7a0a31 100644
--- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
+++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.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
#define QT_STATICPLUGIN
#include <QtWidgets/qstyleplugin.h>
@@ -119,12 +94,15 @@ private slots:
void libraryPaths_qt_plugin_path_2();
#endif
+#ifdef QT_BUILD_INTERNAL
void sendPostedEvents();
+#endif // ifdef QT_BUILD_INTERNAL
void thread();
void desktopSettingsAware();
void setActiveWindow();
+ void activateDeactivateEvent();
void focusWidget();
void focusChanged();
@@ -152,6 +130,7 @@ private slots:
void wheelEventPropagation();
void qtbug_12673();
+ void qtbug_103611();
void noQuitOnHide();
void globalStaticObjectDestruction(); // run this last
@@ -187,6 +166,21 @@ void tst_QApplication::sendEventsOnProcessEvents()
QCoreApplication::postEvent(&app, new QEvent(QEvent::Type(QEvent::User + 1)));
QCoreApplication::processEvents();
+
+#ifdef Q_OS_LINUX
+ if ((QSysInfo::productType() == "rhel" && QSysInfo::productVersion().startsWith(u'9'))
+ || (QSysInfo::productType() == "ubuntu" && QSysInfo::productVersion().startsWith(u'2')))
+ {
+ QFile f("/proc/self/maps");
+ QVERIFY(f.open(QIODevice::ReadOnly));
+
+ QByteArray libs = f.readAll();
+ if (libs.contains("libqgtk3.") || libs.contains("libqgtk3TestInfix.")) {
+ QEXPECT_FAIL("", "Fails if qgtk3 (Glib) is loaded, see QTBUG-87137", Abort);
+ }
+ }
+#endif
+
QVERIFY(spy.recordedEvents.contains(QEvent::User + 1));
}
@@ -239,10 +233,12 @@ void tst_QApplication::staticSetup()
EventWatcher()
{
qApp->installEventFilter(this);
+#if QT_DEPRECATED_SINCE(6, 0)
QT_WARNING_PUSH QT_WARNING_DISABLE_DEPRECATED
QObject::connect(qApp, &QApplication::paletteChanged, [&]{ ++palette_changed; });
QObject::connect(qApp, &QApplication::fontChanged, [&]{ ++font_changed; });
QT_WARNING_POP
+#endif
}
protected:
@@ -272,8 +268,13 @@ QT_WARNING_POP
font.setBold(!font.bold());
qApp->setFont(font);
QApplication::processEvents();
+#if QT_DEPRECATED_SINCE(6, 0)
QCOMPARE(watcher.palette_changed, 2);
QCOMPARE(watcher.font_changed, 2);
+#else
+ QCOMPARE(watcher.palette_changed, 1);
+ QCOMPARE(watcher.font_changed, 1);
+#endif
}
@@ -310,10 +311,10 @@ void tst_QApplication::alert()
QApplication::alert(&widget, -1);
QApplication::alert(&widget, 250);
widget2.activateWindow();
- QApplication::setActiveWindow(&widget2);
+ QApplicationPrivate::setActiveWindow(&widget2);
QApplication::alert(&widget, 0);
widget.activateWindow();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
QApplication::alert(&widget, 200);
}
@@ -502,7 +503,7 @@ static char **QString2cstrings(const QString &args)
static QByteArrayList cache;
const auto &list = QStringView{ args }.split(' ');
- auto argarray = new char*[list.count() + 1];
+ auto argarray = new char*[list.size() + 1];
int i = 0;
for (; i < list.size(); ++i ) {
@@ -591,7 +592,7 @@ void tst_QApplication::lastWindowClosed()
QTimer::singleShot(1000, dialog.data(), &QDialog::accept);
dialog->exec();
QVERIFY(dialog);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QPointer<CloseWidget>widget = new CloseWidget;
widget->setWindowTitle(QLatin1String(QTest::currentTestFunction()) + QLatin1String("CloseWidget"));
@@ -600,7 +601,7 @@ void tst_QApplication::lastWindowClosed()
QObject::connect(&app, &QGuiApplication::lastWindowClosed, widget.data(), &QObject::deleteLater);
QCoreApplication::exec();
QVERIFY(!widget);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
delete dialog;
@@ -618,7 +619,7 @@ void tst_QApplication::lastWindowClosed()
QTimer::singleShot(1000, &app, &QApplication::closeAllWindows);
QCoreApplication::exec();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
class QuitOnLastWindowClosedDialog : public QDialog
@@ -651,8 +652,8 @@ public slots:
other.exec();
// verify that the eventloop ran and let the timer fire
- QCOMPARE(spy.count(), 1);
- QCOMPARE(appSpy.count(), 1);
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(appSpy.size(), 1);
}
private:
@@ -677,7 +678,7 @@ public slots:
timer1.setSingleShot(true);
timer1.start(1000);
dialog.exec();
- QCOMPARE(spy1.count(), 1);
+ QCOMPARE(spy1.size(), 1);
show();
}
@@ -698,7 +699,7 @@ void tst_QApplication::quitOnLastWindowClosed()
QCoreApplication::exec();
// lastWindowClosed() signal should only be sent after the last dialog is closed
- QCOMPARE(appSpy.count(), 2);
+ QCOMPARE(appSpy.size(), 2);
}
{
int argc = 0;
@@ -713,8 +714,8 @@ void tst_QApplication::quitOnLastWindowClosed()
timer1.setSingleShot(true);
timer1.start(1000);
dialog.exec();
- QCOMPARE(spy1.count(), 1);
- QCOMPARE(appSpy.count(), 0);
+ QCOMPARE(spy1.size(), 1);
+ QCOMPARE(appSpy.size(), 0);
QTimer timer2;
connect(&timer2, &QTimer::timeout, &app, &QCoreApplication::quit);
@@ -723,8 +724,8 @@ void tst_QApplication::quitOnLastWindowClosed()
timer2.start(1000);
int returnValue = QCoreApplication::exec();
QCOMPARE(returnValue, 0);
- QCOMPARE(spy2.count(), 1);
- QCOMPARE(appSpy.count(), 0);
+ QCOMPARE(spy2.size(), 1);
+ QCOMPARE(appSpy.size(), 0);
}
{
int argc = 0;
@@ -755,8 +756,8 @@ void tst_QApplication::quitOnLastWindowClosed()
QCoreApplication::exec();
- QCOMPARE(spy.count(), 1);
- QVERIFY(spy2.count() < 15); // Should be around 10 if closing caused the quit
+ QCOMPARE(spy.size(), 1);
+ QVERIFY(spy2.size() < 15); // Should be around 10 if closing caused the quit
}
bool quitApplicationTriggered = false;
@@ -786,7 +787,7 @@ void tst_QApplication::quitOnLastWindowClosed()
QCoreApplication::exec();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(quitApplicationTriggered);
}
{
@@ -808,8 +809,8 @@ void tst_QApplication::quitOnLastWindowClosed()
QCOMPARE(returnValue, 0);
// failure here means the timer above didn't fire, and the
// quit was caused the dialog being closed (not the window)
- QCOMPARE(timerSpy.count(), 1);
- QCOMPARE(appSpy.count(), 2);
+ QCOMPARE(timerSpy.size(), 1);
+ QCOMPARE(appSpy.size(), 2);
}
{
int argc = 0;
@@ -858,7 +859,7 @@ void tst_QApplication::quitOnLastWindowClosed()
QTimer::singleShot(100, &w1, &QWidget::close);
QCoreApplication::exec();
- QVERIFY(timerSpy.count() < 10);
+ QVERIFY(timerSpy.size() < 10);
}
}
@@ -902,6 +903,7 @@ void tst_QApplication::closeAllWindows()
{
int argc = 0;
QApplication app(argc, nullptr);
+ app.setAttribute(Qt::AA_DontUseNativeDialogs, true);
// create some windows
new QWidget;
@@ -910,7 +912,7 @@ void tst_QApplication::closeAllWindows()
// show all windows
auto topLevels = QApplication::topLevelWidgets();
- for (QWidget *w : qAsConst(topLevels)) {
+ for (QWidget *w : std::as_const(topLevels)) {
w->show();
QVERIFY(QTest::qWaitForWindowExposed(w));
}
@@ -927,14 +929,14 @@ void tst_QApplication::closeAllWindows()
PromptOnCloseWidget *promptOnCloseWidget = new PromptOnCloseWidget;
// show all windows
topLevels = QApplication::topLevelWidgets();
- for (QWidget *w : qAsConst(topLevels)) {
+ for (QWidget *w : std::as_const(topLevels)) {
w->show();
QVERIFY(QTest::qWaitForWindowExposed(w));
}
// close the last window to open the prompt (eventloop recurses)
promptOnCloseWidget->close();
// all windows should not be visible, except the one that opened the prompt
- for (QWidget *w : qAsConst(topLevels)) {
+ for (QWidget *w : std::as_const(topLevels)) {
if (w == promptOnCloseWidget)
QVERIFY(w->isVisible());
else
@@ -946,8 +948,8 @@ void tst_QApplication::closeAllWindows()
bool isPathListIncluded(const QStringList &l, const QStringList &r)
{
- int size = r.count();
- if (size > l.count())
+ int size = r.size();
+ if (size > l.size())
return false;
#if defined (Q_OS_WIN)
Qt::CaseSensitivity cs = Qt::CaseInsensitive;
@@ -955,13 +957,13 @@ bool isPathListIncluded(const QStringList &l, const QStringList &r)
Qt::CaseSensitivity cs = Qt::CaseSensitive;
#endif
int i = 0, j = 0;
- for ( ; i < l.count() && j < r.count(); ++i) {
+ for ( ; i < l.size() && j < r.size(); ++i) {
if (QDir::toNativeSeparators(l[i]).compare(QDir::toNativeSeparators(r[j]), cs) == 0) {
++j;
i = -1;
}
}
- return j == r.count();
+ return j == r.size();
}
#if QT_CONFIG(library)
@@ -1021,7 +1023,7 @@ void tst_QApplication::libraryPaths()
{
qCDebug(lcTests) << "Initial library path:" << QApplication::libraryPaths();
- int count = QApplication::libraryPaths().count();
+ int count = QApplication::libraryPaths().size();
#if 0
// this test doesn't work if KDE 4 is installed
QCOMPARE(count, 1); // before creating QApplication, only the PluginsPath is in the libraryPaths()
@@ -1030,9 +1032,9 @@ void tst_QApplication::libraryPaths()
QApplication::addLibraryPath(installPathPlugins);
qCDebug(lcTests) << "installPathPlugins" << installPathPlugins;
qCDebug(lcTests) << "After adding plugins path:" << QApplication::libraryPaths();
- QCOMPARE(QApplication::libraryPaths().count(), count);
+ QCOMPARE(QApplication::libraryPaths().size(), count);
QApplication::addLibraryPath(testDir);
- QCOMPARE(QApplication::libraryPaths().count(), count + 1);
+ QCOMPARE(QApplication::libraryPaths().size(), count + 1);
// creating QApplication adds the applicationDirPath to the libraryPath
int argc = 1;
@@ -1042,19 +1044,19 @@ void tst_QApplication::libraryPaths()
// On Windows CE these are identical and might also be the case for other
// systems too
if (appDirPath != installPathPlugins)
- QCOMPARE(QApplication::libraryPaths().count(), count + 2);
+ QCOMPARE(QApplication::libraryPaths().size(), count + 2);
}
{
int argc = 1;
QApplication app(argc, &argv0);
qCDebug(lcTests) << "Initial library path:" << QCoreApplication::libraryPaths();
- int count = QCoreApplication::libraryPaths().count();
+ int count = QCoreApplication::libraryPaths().size();
QString installPathPlugins = QLibraryInfo::path(QLibraryInfo::PluginsPath);
QCoreApplication::addLibraryPath(installPathPlugins);
qCDebug(lcTests) << "installPathPlugins" << installPathPlugins;
qCDebug(lcTests) << "After adding plugins path:" << QCoreApplication::libraryPaths();
- QCOMPARE(QCoreApplication::libraryPaths().count(), count);
+ QCOMPARE(QCoreApplication::libraryPaths().size(), count);
QString appDirPath = QCoreApplication::applicationDirPath();
@@ -1062,14 +1064,14 @@ void tst_QApplication::libraryPaths()
QCoreApplication::addLibraryPath(appDirPath + "/..");
qCDebug(lcTests) << "appDirPath" << appDirPath;
qCDebug(lcTests) << "After adding appDirPath && appDirPath + /..:" << QCoreApplication::libraryPaths();
- QCOMPARE(QCoreApplication::libraryPaths().count(), count + 1);
+ QCOMPARE(QCoreApplication::libraryPaths().size(), count + 1);
#ifdef Q_OS_MACOS
QCoreApplication::addLibraryPath(appDirPath + "/../MacOS");
#else
QCoreApplication::addLibraryPath(appDirPath + "/tmp/..");
#endif
qCDebug(lcTests) << "After adding appDirPath + /tmp/..:" << QCoreApplication::libraryPaths();
- QCOMPARE(QCoreApplication::libraryPaths().count(), count + 1);
+ QCOMPARE(QCoreApplication::libraryPaths().size(), count + 1);
}
}
@@ -1136,11 +1138,12 @@ void tst_QApplication::libraryPaths_qt_plugin_path_2()
<< QCoreApplication::applicationDirPath();
QVERIFY(isPathListIncluded(QCoreApplication::libraryPaths(), expected));
- qputenv("QT_PLUGIN_PATH", QByteArray());
+ qputenv("QT_PLUGIN_PATH", nullptr);
}
}
#endif
+#ifdef QT_BUILD_INTERNAL
class SendPostedEventsTester : public QObject
{
Q_OBJECT
@@ -1162,14 +1165,14 @@ void SendPostedEventsTester::doTest()
QPointer<SendPostedEventsTester> p = this;
QApplication::postEvent(this, new QEvent(QEvent::User));
// DeferredDelete should not be delivered until returning from this function
- QApplication::postEvent(this, new QDeferredDeleteEvent());
+ deleteLater();
QEventLoop eventLoop;
QMetaObject::invokeMethod(&eventLoop, "quit", Qt::QueuedConnection);
eventLoop.exec();
QVERIFY(p != nullptr);
- QCOMPARE(eventSpy.count(), 2);
+ QCOMPARE(eventSpy.size(), 2);
QCOMPARE(eventSpy.at(0), int(QEvent::MetaCall));
QCOMPARE(eventSpy.at(1), int(QEvent::User));
eventSpy.clear();
@@ -1186,6 +1189,7 @@ void tst_QApplication::sendPostedEvents()
(void) QCoreApplication::exec();
QVERIFY(p.isNull());
}
+#endif
void tst_QApplication::thread()
{
@@ -1330,9 +1334,6 @@ void DeleteLaterWidget::checkDeleteLater()
void tst_QApplication::testDeleteLater()
{
-#ifdef Q_OS_MAC
- QSKIP("This test fails and then hangs on OS X, see QTBUG-24318");
-#endif
int argc = 0;
QApplication app(argc, nullptr);
connect(&app, &QGuiApplication::lastWindowClosed, &app, &QCoreApplication::quit);
@@ -1530,7 +1531,7 @@ void tst_QApplication::desktopSettingsAware()
environment += QLatin1String("QT_MAC_DISABLE_FOREGROUND_APPLICATION_TRANSFORM=1");
testProcess.setEnvironment(environment);
#endif
- testProcess.start("desktopsettingsaware_helper");
+ testProcess.start("./desktopsettingsaware_helper");
QVERIFY2(testProcess.waitForStarted(),
qPrintable(QString::fromLatin1("Cannot start 'desktopsettingsaware_helper': %1").arg(testProcess.errorString())));
QVERIFY(testProcess.waitForFinished(10000));
@@ -1558,11 +1559,61 @@ void tst_QApplication::setActiveWindow()
delete pb2;
w->show();
- QApplication::setActiveWindow(w); // needs this on twm (focus follows mouse)
+ QApplicationPrivate::setActiveWindow(w); // needs this on twm (focus follows mouse)
QVERIFY(pb1->hasFocus());
delete w;
}
+void tst_QApplication::activateDeactivateEvent()
+{
+ // Ensure that QWindows (other than QWidgetWindow)
+ // are activated / deactivated.
+ class Window : public QWindow
+ {
+ public:
+ using QWindow::QWindow;
+
+ int activateCount = 0;
+ int deactivateCount = 0;
+ protected:
+ bool event(QEvent *e) override
+ {
+ switch (e->type()) {
+ case QEvent::WindowActivate:
+ ++activateCount;
+ break;
+ case QEvent::WindowDeactivate:
+ ++deactivateCount;
+ break;
+ default:
+ break;
+ }
+ return QWindow::event(e);
+ }
+ };
+
+ int argc = 0;
+ QApplication app(argc, nullptr);
+
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
+ Window w1;
+ Window w2;
+
+ w1.show();
+ w1.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&w1));
+ QCOMPARE(w1.activateCount, 1);
+ QCOMPARE(w1.deactivateCount, 0);
+
+ w2.show();
+ w2.requestActivate();
+ QVERIFY(QTest::qWaitForWindowActive(&w2));
+ QCOMPARE(w1.deactivateCount, 1);
+ QCOMPARE(w2.activateCount, 1);
+}
+
void tst_QApplication::focusWidget()
{
int argc = 0;
@@ -1573,7 +1624,7 @@ void tst_QApplication::focusWidget()
QTextEdit te;
te.show();
- QApplication::setActiveWindow(&te);
+ QApplicationPrivate::setActiveWindow(&te);
QVERIFY(QTest::qWaitForWindowActive(&te));
const auto focusWidget = QApplication::focusWidget();
@@ -1589,7 +1640,7 @@ void tst_QApplication::focusWidget()
QTextEdit te(&w);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
const auto focusWidget = QApplication::focusWidget();
@@ -1622,22 +1673,22 @@ void tst_QApplication::focusChanged()
hbox1.addWidget(&le1);
hbox1.addWidget(&pb1);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
parent1.show();
- QApplication::setActiveWindow(&parent1); // needs this on twm (focus follows mouse)
- QCOMPARE(spy.count(), 1);
- QCOMPARE(spy.at(0).count(), 2);
+ QApplicationPrivate::setActiveWindow(&parent1); // needs this on twm (focus follows mouse)
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(spy.at(0).size(), 2);
old = qvariant_cast<QWidget*>(spy.at(0).at(0));
now = qvariant_cast<QWidget*>(spy.at(0).at(1));
QCOMPARE(now, &le1);
QCOMPARE(now, QApplication::focusWidget());
QVERIFY(!old);
spy.clear();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
pb1.setFocus();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
old = qvariant_cast<QWidget*>(spy.at(0).at(0));
now = qvariant_cast<QWidget*>(spy.at(0).at(1));
QCOMPARE(now, &pb1);
@@ -1646,7 +1697,7 @@ void tst_QApplication::focusChanged()
spy.clear();
lb1.setFocus();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
old = qvariant_cast<QWidget*>(spy.at(0).at(0));
now = qvariant_cast<QWidget*>(spy.at(0).at(1));
QCOMPARE(now, &lb1);
@@ -1655,7 +1706,7 @@ void tst_QApplication::focusChanged()
spy.clear();
lb1.clearFocus();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
old = qvariant_cast<QWidget*>(spy.at(0).at(0));
now = qvariant_cast<QWidget*>(spy.at(0).at(1));
QVERIFY(!now);
@@ -1674,10 +1725,10 @@ void tst_QApplication::focusChanged()
hbox2.addWidget(&pb2);
parent2.show();
- QApplication::setActiveWindow(&parent2); // needs this on twm (focus follows mouse)
- QVERIFY(spy.count() > 0); // one for deactivation, one for activation on Windows
- old = qvariant_cast<QWidget*>(spy.at(spy.count()-1).at(0));
- now = qvariant_cast<QWidget*>(spy.at(spy.count()-1).at(1));
+ QApplicationPrivate::setActiveWindow(&parent2); // needs this on twm (focus follows mouse)
+ QVERIFY(spy.size() > 0); // one for deactivation, one for activation on Windows
+ old = qvariant_cast<QWidget*>(spy.at(spy.size()-1).at(0));
+ now = qvariant_cast<QWidget*>(spy.at(spy.size()-1).at(1));
QCOMPARE(now, &le2);
QCOMPARE(now, QApplication::focusWidget());
QVERIFY(!old);
@@ -1702,10 +1753,10 @@ void tst_QApplication::focusChanged()
tab.simulate(now);
if (!tabAllControls) {
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(now, QApplication::focusWidget());
} else {
- QVERIFY(spy.count() > 0);
+ QVERIFY(spy.size() > 0);
old = qvariant_cast<QWidget*>(spy.at(0).at(0));
now = qvariant_cast<QWidget*>(spy.at(0).at(1));
QCOMPARE(now, &pb2);
@@ -1715,11 +1766,11 @@ void tst_QApplication::focusChanged()
}
if (!tabAllControls) {
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(now, QApplication::focusWidget());
} else {
tab.simulate(now);
- QVERIFY(spy.count() > 0);
+ QVERIFY(spy.size() > 0);
old = qvariant_cast<QWidget*>(spy.at(0).at(0));
now = qvariant_cast<QWidget*>(spy.at(0).at(1));
QCOMPARE(now, &le2);
@@ -1729,11 +1780,11 @@ void tst_QApplication::focusChanged()
}
if (!tabAllControls) {
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(now, QApplication::focusWidget());
} else {
backtab.simulate(now);
- QVERIFY(spy.count() > 0);
+ QVERIFY(spy.size() > 0);
old = qvariant_cast<QWidget*>(spy.at(0).at(0));
now = qvariant_cast<QWidget*>(spy.at(0).at(1));
QCOMPARE(now, &pb2);
@@ -1744,12 +1795,12 @@ void tst_QApplication::focusChanged()
if (!tabAllControls) {
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(now, QApplication::focusWidget());
old = &pb2;
} else {
backtab.simulate(now);
- QVERIFY(spy.count() > 0);
+ QVERIFY(spy.size() > 0);
old = qvariant_cast<QWidget*>(spy.at(0).at(0));
now = qvariant_cast<QWidget*>(spy.at(0).at(1));
QCOMPARE(now, &le2);
@@ -1760,10 +1811,10 @@ void tst_QApplication::focusChanged()
click.simulate(old);
if (!(pb2.focusPolicy() & Qt::ClickFocus)) {
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(now, QApplication::focusWidget());
} else {
- QVERIFY(spy.count() > 0);
+ QVERIFY(spy.size() > 0);
old = qvariant_cast<QWidget*>(spy.at(0).at(0));
now = qvariant_cast<QWidget*>(spy.at(0).at(1));
QCOMPARE(now, &pb2);
@@ -1772,7 +1823,7 @@ void tst_QApplication::focusChanged()
spy.clear();
click.simulate(old);
- QVERIFY(spy.count() > 0);
+ QVERIFY(spy.size() > 0);
old = qvariant_cast<QWidget*>(spy.at(0).at(0));
now = qvariant_cast<QWidget*>(spy.at(0).at(1));
QCOMPARE(now, &le2);
@@ -1782,16 +1833,16 @@ void tst_QApplication::focusChanged()
}
parent1.activateWindow();
- QApplication::setActiveWindow(&parent1); // needs this on twm (focus follows mouse)
- QVERIFY(spy.count() == 1 || spy.count() == 2); // one for deactivation, one for activation on Windows
+ QApplicationPrivate::setActiveWindow(&parent1); // needs this on twm (focus follows mouse)
+ QVERIFY(spy.size() == 1 || spy.size() == 2); // one for deactivation, one for activation on Windows
//on windows, the change of focus is made in 2 steps
//(the focusChanged SIGNAL is emitted twice)
- if (spy.count()==1)
- old = qvariant_cast<QWidget*>(spy.at(spy.count()-1).at(0));
+ if (spy.size()==1)
+ old = qvariant_cast<QWidget*>(spy.at(spy.size()-1).at(0));
else
- old = qvariant_cast<QWidget*>(spy.at(spy.count()-2).at(0));
- now = qvariant_cast<QWidget*>(spy.at(spy.count()-1).at(1));
+ old = qvariant_cast<QWidget*>(spy.at(spy.size()-2).at(0));
+ now = qvariant_cast<QWidget*>(spy.at(spy.size()-1).at(1));
QCOMPARE(now, &le1);
QCOMPARE(now, QApplication::focusWidget());
QCOMPARE(old, &le2);
@@ -1865,7 +1916,7 @@ void tst_QApplication::focusMouseClick()
// front most widget has Qt::TabFocus, parent widget accepts clicks as well
// now send a mouse button press event and check what happens with the focus
// it should be given to the parent widget
- QMouseEvent ev(QEvent::MouseButtonPress, QPointF(), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
+ QMouseEvent ev(QEvent::MouseButtonPress, QPointF(), w.mapToGlobal(QPointF()), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier);
QSpontaneKeyEvent::setSpontaneous(&ev);
QVERIFY(ev.spontaneous());
qApp->notify(&w2, &ev);
@@ -2026,11 +2077,11 @@ void tst_QApplication::topLevelWidgets()
#endif
QCoreApplication::processEvents();
QVERIFY(QApplication::topLevelWidgets().contains(w));
- QCOMPARE(QApplication::topLevelWidgets().count(), 1);
+ QCOMPARE(QApplication::topLevelWidgets().size(), 1);
delete w;
w = nullptr;
QCoreApplication::processEvents();
- QCOMPARE(QApplication::topLevelWidgets().count(), 0);
+ QCOMPARE(QApplication::topLevelWidgets().size(), 0);
}
@@ -2447,7 +2498,7 @@ void tst_QApplication::wheelEventPropagation()
int vcount = 0;
int hcount = 0;
- for (const auto &event : qAsConst(events)) {
+ for (const auto &event : std::as_const(events)) {
const QPoint pixelDelta = event.orientation == Qt::Vertical ? QPoint(0, -scrollStep) : QPoint(-scrollStep, 0);
const QPoint angleDelta = event.orientation == Qt::Vertical ? QPoint(0, -120) : QPoint(-120, 0);
QWindowSystemInterface::handleWheelEvent(outerArea.windowHandle(), center, global,
@@ -2458,10 +2509,10 @@ void tst_QApplication::wheelEventPropagation()
else
++hcount;
QCoreApplication::processEvents();
- QCOMPARE(innerVSpy.count(), innerScrolls ? vcount : 0);
- QCOMPARE(innerHSpy.count(), innerScrolls ? hcount : 0);
- QCOMPARE(outerVSpy.count(), innerScrolls ? 0 : vcount);
- QCOMPARE(outerHSpy.count(), innerScrolls ? 0 : hcount);
+ QCOMPARE(innerVSpy.size(), innerScrolls ? vcount : 0);
+ QCOMPARE(innerHSpy.size(), innerScrolls ? hcount : 0);
+ QCOMPARE(outerVSpy.size(), innerScrolls ? 0 : vcount);
+ QCOMPARE(outerHSpy.size(), innerScrolls ? 0 : hcount);
}
}
@@ -2470,7 +2521,7 @@ void tst_QApplication::qtbug_12673()
#if QT_CONFIG(process)
QProcess testProcess;
QStringList arguments;
- testProcess.start("modal_helper", arguments);
+ testProcess.start("./modal_helper", arguments);
QVERIFY2(testProcess.waitForStarted(),
qPrintable(QString::fromLatin1("Cannot start 'modal_helper': %1").arg(testProcess.errorString())));
QVERIFY(testProcess.waitForFinished(20000));
@@ -2480,6 +2531,20 @@ void tst_QApplication::qtbug_12673()
#endif
}
+void tst_QApplication::qtbug_103611()
+{
+ {
+ int argc = 0;
+ QApplication app(argc, nullptr);
+ auto ll = QLocale().uiLanguages();
+ }
+ {
+ int argc = 0;
+ QApplication app(argc, nullptr);
+ auto ll = QLocale().uiLanguages();
+ }
+}
+
class NoQuitOnHideWidget : public QWidget
{
Q_OBJECT
@@ -2509,8 +2574,26 @@ public:
explicit ShowCloseShowWidget(bool showAgain, QWidget *parent = nullptr)
: QWidget(parent), showAgain(showAgain)
{
+ int timeout = 500;
+#ifdef Q_OS_ANDROID
+ // On Android, CI Android emulator is not running HW accelerated graphics and can be slow,
+ // use a longer timeout to avoid flaky failures
+ timeout = 1000;
+#endif
+ QTimer::singleShot(timeout, this, [] () { QCoreApplication::exit(1); });
+ }
+
+ bool shown = false;
+
+protected:
+ void showEvent(QShowEvent *) override
+ {
QTimer::singleShot(0, this, &ShowCloseShowWidget::doClose);
- QTimer::singleShot(500, this, [] () { QCoreApplication::exit(1); });
+ shown = true;
+ }
+ void hideEvent(QHideEvent *) override
+ {
+ shown = false;
}
private slots:
@@ -2526,16 +2609,21 @@ private:
void tst_QApplication::abortQuitOnShow()
{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Wayland: This crash, see QTBUG-123172.");
+
int argc = 0;
QApplication app(argc, nullptr);
ShowCloseShowWidget window1(false);
window1.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
window1.show();
+ QVERIFY(QTest::qWaitFor([&window1](){ return window1.shown; }));
QCOMPARE(QCoreApplication::exec(), 0);
ShowCloseShowWidget window2(true);
window2.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
window2.show();
+ QVERIFY(QTest::qWaitFor([&window2](){ return window2.shown; }));
QCOMPARE(QCoreApplication::exec(), 1);
}
@@ -2550,7 +2638,7 @@ void tst_QApplication::staticFunctions()
QApplication::activeModalWidget();
QApplication::focusWidget();
QApplication::activeWindow();
- QApplication::setActiveWindow(nullptr);
+ QApplicationPrivate::setActiveWindow(nullptr);
QApplication::widgetAt(QPoint(0, 0));
QApplication::topLevelAt(QPoint(0, 0));
QTest::ignoreMessage(QtWarningMsg, "Must construct a QApplication first.");
diff --git a/tests/auto/widgets/kernel/qboxlayout/CMakeLists.txt b/tests/auto/widgets/kernel/qboxlayout/CMakeLists.txt
index 8fdc0d21a9..5b60382fba 100644
--- a/tests/auto/widgets/kernel/qboxlayout/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qboxlayout/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qboxlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qboxlayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qboxlayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qboxlayout
SOURCES
tst_qboxlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::TestPrivate
Qt::Widgets
diff --git a/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp b/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp
index a410a7bf00..4313d9891c 100644
--- a/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp
+++ b/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.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 <QTest>
@@ -141,7 +116,7 @@ void tst_QBoxLayout::insertLayout()
QCOMPARE(dummyParentLayout->count(), 1);
// add subLayout to another layout
- QTest::ignoreMessage(QtWarningMsg, "QLayout::addChildLayout: layout \"\" already has a parent");
+ QTest::ignoreMessage(QtWarningMsg, "QLayout::addChildLayout: layout QHBoxLayout \"\" already has a parent");
vbox->addLayout(subLayout);
QCOMPARE((subLayout->parent() == vbox), (vbox->count() == 1));
}
@@ -217,7 +192,7 @@ void tst_QBoxLayout::setStyleShouldChangeSpacing()
window.setWindowTitle(QTest::currentTestFunction());
QHBoxLayout *hbox = new QHBoxLayout(&window);
QPushButton *pb1 = new QPushButton(tr("The spacing between this"));
- QPushButton *pb2 = new QPushButton(tr("and this button should depend on the style of the parent widget"));;
+ QPushButton *pb2 = new QPushButton(tr("and this button should depend on the style of the parent widget"));
pb1->setAttribute(Qt::WA_LayoutUsesWidgetRect);
pb2->setAttribute(Qt::WA_LayoutUsesWidgetRect);
hbox->addWidget(pb1);
@@ -542,14 +517,14 @@ void tst_QBoxLayout::testLayoutEngine()
QHBoxLayout box;
box.setSpacing(spacing);
int i;
- for (i = 0; i < itemDescriptions.count(); ++i) {
+ for (i = 0; i < itemDescriptions.size(); ++i) {
Descr descr = itemDescriptions.at(i);
LayoutItem *li = new LayoutItem(descr);
box.addItem(li);
box.setStretch(i, descr.stretch);
}
box.setGeometry(QRect(0,0,size,100));
- for (i = 0; i < expectedSizes.count(); ++i) {
+ for (i = 0; i < expectedSizes.size(); ++i) {
int xSize = expectedSizes.at(i);
int xPos = expectedPositions.at(i);
QLayoutItem *item = box.itemAt(i);
diff --git a/tests/auto/widgets/kernel/qformlayout/BLACKLIST b/tests/auto/widgets/kernel/qformlayout/BLACKLIST
deleted file mode 100644
index 375682e788..0000000000
--- a/tests/auto/widgets/kernel/qformlayout/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-# QTBUG-87401
-[wrapping]
-android
diff --git a/tests/auto/widgets/kernel/qformlayout/CMakeLists.txt b/tests/auto/widgets/kernel/qformlayout/CMakeLists.txt
index b084fe1634..9e1da4c6a3 100644
--- a/tests/auto/widgets/kernel/qformlayout/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qformlayout/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qformlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qformlayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qformlayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qformlayout
SOURCES
tst_qformlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::TestPrivate
Qt::Widgets
diff --git a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp
index 4aa9f8ac2d..9638823538 100644
--- a/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.cpp
+++ b/tests/auto/widgets/kernel/qformlayout/tst_qformlayout.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 <QTest>
@@ -135,6 +110,9 @@ private slots:
void takeRow_QLayout();
void setWidget();
void setLayout();
+ void hideShowRow();
+ void showWithHiddenRow();
+ void hiddenRowAndStretch();
/*
QLayoutItem *itemAt(int row, ItemRole role) const;
@@ -274,7 +252,9 @@ void tst_QFormLayout::wrapping()
fl->setRowWrapPolicy(QFormLayout::WrapLongRows);
QLineEdit *le = new QLineEdit;
- QLabel *lbl = new QLabel("A long label");
+ QLabel *lbl = new QLabel("A long label which is actually long enough to trigger wrapping,"
+ " even on Android and even if it is executed on a tiling window"
+ " manager which forces the window into fullscreen mode.");
le->setMinimumWidth(200);
fl->addRow(lbl, le);
@@ -814,6 +794,7 @@ void tst_QFormLayout::removeRow_QWidget()
QCOMPARE(layout->rowCount(), 0);
QWidget *w3 = new QWidget;
+ QTest::ignoreMessage(QtWarningMsg, "QFormLayout::takeRow: Invalid widget");
layout->removeRow(w3);
delete w3;
}
@@ -854,6 +835,7 @@ void tst_QFormLayout::removeRow_QLayout()
QCOMPARE(layout->rowCount(), 0);
QHBoxLayout *l3 = new QHBoxLayout;
+ QTest::ignoreMessage(QtWarningMsg, "QFormLayout::takeRow: Invalid layout");
layout->removeRow(l3);
delete l3;
}
@@ -893,6 +875,7 @@ void tst_QFormLayout::takeRow()
QCOMPARE(layout->rowCount(), 0);
QCOMPARE(result.fieldItem->widget(), w1.data());
+ QTest::ignoreMessage(QtWarningMsg, "QFormLayout::takeRow: Invalid row 0");
result = layout->takeRow(0);
QVERIFY(!result.fieldItem);
@@ -933,6 +916,7 @@ void tst_QFormLayout::takeRow_QWidget()
QCOMPARE(layout->rowCount(), 0);
QWidget *w3 = new QWidget;
+ QTest::ignoreMessage(QtWarningMsg, "QFormLayout::takeRow: Invalid widget");
result = layout->takeRow(w3);
delete w3;
@@ -980,6 +964,7 @@ void tst_QFormLayout::takeRow_QLayout()
QCOMPARE(layout->rowCount(), 0);
QHBoxLayout *l3 = new QHBoxLayout;
+ QTest::ignoreMessage(QtWarningMsg, "QFormLayout::takeRow: Invalid layout");
result = layout->takeRow(l3);
delete l3;
@@ -1009,7 +994,9 @@ void tst_QFormLayout::setWidget()
QCOMPARE(layout.rowCount(), 6);
// should be ignored and generate warnings
+ QTest::ignoreMessage(QtWarningMsg, "QFormLayoutPrivate::setItem: Cell (3, 1) already occupied");
layout.setWidget(3, QFormLayout::FieldRole, &w4);
+ QTest::ignoreMessage(QtWarningMsg, "QFormLayoutPrivate::setItem: Invalid cell (-1, 1)");
layout.setWidget(-1, QFormLayout::FieldRole, &w4);
{
@@ -1077,7 +1064,9 @@ void tst_QFormLayout::setLayout()
QCOMPARE(layout.rowCount(), 6);
// should be ignored and generate warnings
+ QTest::ignoreMessage(QtWarningMsg, "QFormLayoutPrivate::setItem: Cell (3, 1) already occupied");
layout.setLayout(3, QFormLayout::FieldRole, &l4);
+ QTest::ignoreMessage(QtWarningMsg, "QLayout::addChildLayout: layout QHBoxLayout \"\" already has a parent");
layout.setLayout(-1, QFormLayout::FieldRole, &l4);
QCOMPARE(layout.count(), 3);
QCOMPARE(layout.rowCount(), 6);
@@ -1123,6 +1112,191 @@ void tst_QFormLayout::setLayout()
}
}
+void tst_QFormLayout::hideShowRow()
+{
+ QWidget topLevel;
+ QFormLayout layout;
+
+ const auto makeComplex = []{
+ QHBoxLayout *hboxField = new QHBoxLayout;
+ hboxField->addWidget(new QLineEdit("Left"));
+ hboxField->addWidget(new QLineEdit("Right"));
+ return hboxField;
+ };
+
+ layout.addRow("Label", new QLineEdit("one"));
+ layout.addRow("Label", new QLineEdit("two"));
+ layout.addRow("Label", new QLineEdit("three"));
+ layout.addRow("Label", makeComplex());
+ layout.addRow(new QLineEdit("five")); // spanning widget
+ layout.addRow(makeComplex()); // spanning layout
+
+ topLevel.setLayout(&layout);
+ topLevel.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+
+ // returns the top-left position of the items in a row
+ const auto rowPosition = [&layout](int row) {
+ QRect rect;
+ if (QLayoutItem *spanningItem = layout.itemAt(row, QFormLayout::SpanningRole)) {
+ rect = spanningItem->geometry();
+ } else {
+ if (QLayoutItem *labelItem = layout.itemAt(row, QFormLayout::LabelRole)) {
+ rect = labelItem->geometry();
+ }
+ if (QLayoutItem *fieldItem = layout.itemAt(row, QFormLayout::FieldRole)) {
+ rect |= fieldItem->geometry();
+ }
+ }
+ return rect.topLeft();
+ };
+
+ // returns the first widget in a row, even if that row is taken by a layout
+ const auto rowInputWidget = [&layout](int row) -> QWidget* {
+ auto fieldItem = layout.itemAt(row, QFormLayout::FieldRole);
+ if (!fieldItem)
+ return nullptr;
+ QWidget *fieldWidget = fieldItem->widget();
+ // we happen to know our layout structure
+ if (!fieldWidget)
+ fieldWidget = fieldItem->layout()->itemAt(0)->widget();
+ return fieldWidget;
+ };
+
+ // record the reference positions for all rows
+ QList<QPoint> rowPositions(layout.rowCount());
+ for (int row = 0; row < layout.rowCount(); ++row)
+ rowPositions[row] = rowPosition(row);
+
+ // hide each row in turn, the next row should take the space of the hidden row
+ for (int row = 0; row < layout.rowCount(); ++ row) {
+ layout.setRowVisible(row, false);
+ QVERIFY(!layout.isRowVisible(row));
+ if (row < layout.rowCount() - 1)
+ QTRY_COMPARE(rowPosition(row + 1), rowPositions[row]);
+ layout.setRowVisible(row, true);
+ QVERIFY(layout.isRowVisible(row));
+ }
+
+ // Hiding only the label or only the field doesn't hide the row.
+ for (int row = 0; row < layout.rowCount() - 1; ++row) {
+ const auto labelItem = layout.itemAt(0, QFormLayout::LabelRole);
+ if (labelItem) {
+ labelItem->widget()->hide();
+ QVERIFY(layout.isRowVisible(row));
+ QCOMPARE(rowPosition(row), rowPositions[row]);
+ layout.itemAt(0, QFormLayout::LabelRole)->widget()->show();
+ }
+ const auto fieldItem = layout.itemAt(0, QFormLayout::FieldRole);
+ if (fieldItem) {
+ fieldItem->widget()->hide();
+ QVERIFY(layout.isRowVisible(row));
+ QCOMPARE(rowPosition(row), rowPositions[row]);
+ layout.itemAt(0, QFormLayout::FieldRole)->widget()->show();
+ }
+ }
+
+ // If we hide both label and field, then the row should be considered hidden and the
+ // following row should move up into the space of the hidden row. We can only test
+ // this if both label and field are widgets, or if there is a spanning widget.
+ for (int row = 0; row < layout.rowCount() - 1; ++row) {
+ QWidget *labelWidget = nullptr;
+ if (auto labelItem = layout.itemAt(row, QFormLayout::LabelRole))
+ labelWidget = labelItem->widget();
+ QWidget *fieldWidget = nullptr;
+ if (auto fieldItem = layout.itemAt(row, QFormLayout::FieldRole))
+ fieldWidget = fieldItem->widget();
+
+ if (!fieldWidget)
+ continue;
+ if (labelWidget)
+ labelWidget->hide();
+ fieldWidget->hide();
+ QVERIFY(!layout.isRowVisible(row));
+ QVERIFY(!layout.isRowVisible(fieldWidget));
+ if (labelWidget)
+ QVERIFY(!layout.isRowVisible(labelWidget));
+ QTRY_COMPARE(rowPosition(row + 1), rowPositions[row]);
+ if (labelWidget)
+ labelWidget->show();
+ fieldWidget->show();
+ }
+
+ // hiding a row where a widget has focus must move focus to a widget in the next row
+ for (int row = 0; row < layout.rowCount(); ++row) {
+ QWidget *inputWidget = rowInputWidget(row);
+ QVERIFY(inputWidget);
+ inputWidget->setFocus();
+ layout.setRowVisible(row, false);
+ QVERIFY(!inputWidget->hasFocus());
+ }
+
+ // Now hide all rows, hide the toplevel widget, and show the toplevel widget again.
+ // None of the widgets inside must be visible.
+ for (int row = 0; row < layout.rowCount(); ++row)
+ layout.setRowVisible(row, false);
+ topLevel.hide();
+ topLevel.show();
+ for (int row = 0; row < layout.rowCount(); ++row)
+ QVERIFY(rowInputWidget(row)->isHidden());
+}
+
+void tst_QFormLayout::showWithHiddenRow()
+{
+ QWidget topLevel;
+ QFormLayout layout;
+
+ for (int row = 0; row < 3; ++row)
+ layout.addRow(QString("Label %1").arg(row), new QLineEdit);
+ layout.setRowVisible(1, false);
+
+ topLevel.setLayout(&layout);
+ topLevel.show();
+}
+
+/*
+ Test that hiding rows does not leave outdated layout data behind
+ in hidden items that results in out-of-bounds array access. See
+ QTBUG-109237.
+*/
+void tst_QFormLayout::hiddenRowAndStretch()
+{
+ QWidget topLevel;
+ QFormLayout layout;
+ layout.setRowWrapPolicy(QFormLayout::WrapAllRows);
+
+ // We need our own stretcher item so that QFormLayout doesn't insert
+ // it's own, as that would grow the size of the layout data array again.
+ QSpacerItem *stretch = new QSpacerItem(100, 100, QSizePolicy::Expanding, QSizePolicy::Expanding);
+ layout.setItem(0, QFormLayout::FieldRole, stretch);
+
+ QLabel *lastLabel = nullptr;
+ QLineEdit *lastField = nullptr;
+ for (int row = 1; row < 4; ++row) {
+ QLabel *label = new QLabel(QString("Label %1").arg(row));
+ label->setWordWrap(true);
+ QLineEdit *field = new QLineEdit;
+ layout.setWidget(row, QFormLayout::LabelRole, label);
+ layout.setWidget(row, QFormLayout::FieldRole, field);
+ if (row == 3) {
+ lastLabel = label;
+ lastField = field;
+ }
+ }
+
+ Q_ASSERT(lastLabel);
+ Q_ASSERT(lastField);
+
+ topLevel.setLayout(&layout);
+ topLevel.sizeHint();
+
+ lastLabel->setVisible(false);
+ lastField->setVisible(false);
+
+ // should not assert here
+ topLevel.show();
+}
+
void tst_QFormLayout::itemAt()
{
QWidget topLevel;
diff --git a/tests/auto/widgets/kernel/qgesturerecognizer/CMakeLists.txt b/tests/auto/widgets/kernel/qgesturerecognizer/CMakeLists.txt
index 9dfd6cb20c..ffa54992d3 100644
--- a/tests/auto/widgets/kernel/qgesturerecognizer/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qgesturerecognizer/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qgesturerecognizer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgesturerecognizer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgesturerecognizer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgesturerecognizer
SOURCES
tst_qgesturerecognizer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp b/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp
index 9687601158..cdab480d84 100644
--- a/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.cpp
+++ b/tests/auto/widgets/kernel/qgesturerecognizer/tst_qgesturerecognizer.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/QTest>
@@ -96,7 +71,7 @@ TestWidget::TestWidget(const GestureTypeVector &gestureTypes)
{
setAttribute(Qt::WA_AcceptTouchEvents);
- foreach (Qt::GestureType gestureType, gestureTypes) {
+ for (Qt::GestureType gestureType : gestureTypes) {
grabGesture(gestureType);
m_receivedGestures.insert(gestureType, false);
}
@@ -294,7 +269,7 @@ void tst_QGestureRecognizer::swipeGesture()
// Press point #3
points.append(points.last() + fingerDistance);
- swipeSequence.press(points.size() - 1, points.last(), &widget);
+ swipeSequence.stationary(0).stationary(1).press(points.size() - 1, points.last(), &widget);
swipeSequence.commit();
Q_ASSERT(points.size() == swipePoints);
diff --git a/tests/auto/widgets/kernel/qgridlayout/CMakeLists.txt b/tests/auto/widgets/kernel/qgridlayout/CMakeLists.txt
index c9ac563f01..bf72bc0ae6 100644
--- a/tests/auto/widgets/kernel/qgridlayout/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qgridlayout/CMakeLists.txt
@@ -1,14 +1,21 @@
-# Generated from qgridlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgridlayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgridlayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgridlayout
SOURCES
sortdialog.ui
tst_qgridlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp
index 2cf2462fd5..3c325699a7 100644
--- a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp
+++ b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.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 <QTest>
@@ -83,7 +58,8 @@ private slots:
static inline int visibleTopLevelWidgetCount()
{
int result= 0;
- foreach (const QWidget *topLevel, QApplication::topLevelWidgets()) {
+ const auto topLevels = QApplication::topLevelWidgets();
+ for (const QWidget *topLevel : topLevels) {
if (topLevel->isVisible())
++result;
}
@@ -235,6 +211,9 @@ void tst_QGridLayout::badDistributionBug()
void tst_QGridLayout::setMinAndMaxSize()
{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("This test crashes on Wayland, see also QTBUG-107184");
+
QWidget widget;
setFrameless(&widget);
QGridLayout layout(&widget);
@@ -683,7 +662,7 @@ void tst_QGridLayout::spacingsAndMargins()
QSKIP("The screen is too small to run this test case");
// We are relying on the order here...
- for (int pi = 0; pi < sizehinters.count(); ++pi) {
+ for (int pi = 0; pi < sizehinters.size(); ++pi) {
QPoint pt = sizehinters.at(pi)->mapTo(&toplevel, QPoint(0, 0));
QCOMPARE(pt, expectedpositions.at(pi));
}
@@ -853,7 +832,7 @@ void tst_QGridLayout::minMaxSize()
QList<QPointer<SizeHinterFrame> > sizehinters;
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < columns; ++j) {
- SizeInfo si = sizeinfos.at(sizehinters.count());
+ SizeInfo si = sizeinfos.at(sizehinters.size());
int numpixels = si.hfwNumPixels;
if (pass == 1 && numpixels == -1)
numpixels = -2; //### yuk, (and don't fake it if it already tests sizehint)
@@ -882,7 +861,7 @@ void tst_QGridLayout::minMaxSize()
QTRY_COMPARE(toplevel.size(), toplevel.sizeHint());
}
// We are relying on the order here...
- for (int pi = 0; pi < sizehinters.count(); ++pi) {
+ for (int pi = 0; pi < sizehinters.size(); ++pi) {
QPoint pt = sizehinters.at(pi)->mapTo(&toplevel, QPoint(0, 0));
QCOMPARE(pt, sizeinfos.at(pi).expectedPos);
}
@@ -1052,7 +1031,7 @@ void tst_QGridLayout::styleDependentSpacingsAndMargins()
widget.adjustSize();
QApplication::processEvents();
- for (int pi = 0; pi < expectedpositions.count(); ++pi) {
+ for (int pi = 0; pi < expectedpositions.size(); ++pi) {
QCOMPARE(sizehinters.at(pi)->pos(), expectedpositions.at(pi));
}
}
@@ -1442,7 +1421,7 @@ void tst_QGridLayout::layoutSpacing()
QLayout *layout = widget->layout();
QVERIFY(layout);
- for (int pi = 0; pi < expectedpositions.count(); ++pi) {
+ for (int pi = 0; pi < expectedpositions.size(); ++pi) {
QLayoutItem *item = layout->itemAt(pi);
//qDebug() << item->widget()->pos();
QCOMPARE(item->widget()->pos(), expectedpositions.at(pi));
diff --git a/tests/auto/widgets/kernel/qlayout/CMakeLists.txt b/tests/auto/widgets/kernel/qlayout/CMakeLists.txt
index 049fab0f02..6bda750c0f 100644
--- a/tests/auto/widgets/kernel/qlayout/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qlayout/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qlayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qlayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -13,27 +20,10 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qlayout
SOURCES
tst_qlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::TestPrivate
Qt::Widgets
Qt::WidgetsPrivate
TESTDATA ${test_data}
)
-
-## Scopes:
-#####################################################################
-
-if(ANDROID)
- # Resources:
- set(testdata_resource_files
- "baseline/smartmaxsize"
- )
-
- qt_internal_add_resource(tst_qlayout "testdata"
- PREFIX
- "/"
- FILES
- ${testdata_resource_files}
- )
-endif()
diff --git a/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp b/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp
index 5c5869c738..bd170ca8ab 100644
--- a/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp
+++ b/tests/auto/widgets/kernel/qlayout/tst_qlayout.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -403,10 +378,10 @@ void tst_QLayout::removeWidget()
{
QHBoxLayout layout;
QCOMPARE(layout.count(), 0);
- QWidget w;
- layout.addWidget(&w);
+ std::unique_ptr<QWidget> w(new QWidget);
+ layout.addWidget(w.get());
QCOMPARE(layout.count(), 1);
- layout.removeWidget(&w);
+ layout.removeWidget(w.get());
QCOMPARE(layout.count(), 0);
QPointer<QLayout> childLayout(new QHBoxLayout);
@@ -420,6 +395,12 @@ void tst_QLayout::removeWidget()
QCOMPARE(layout.count(), 0);
QVERIFY(!childLayout.isNull());
+
+ // Test inactive layout consumes ChildRemoved event (QTBUG-124151)
+ layout.addWidget(w.get());
+ layout.setEnabled(false);
+ w.reset();
+ layout.setEnabled(true);
}
QTEST_MAIN(tst_QLayout)
diff --git a/tests/auto/widgets/kernel/qshortcut/CMakeLists.txt b/tests/auto/widgets/kernel/qshortcut/CMakeLists.txt
index fd97a436d0..517286f324 100644
--- a/tests/auto/widgets/kernel/qshortcut/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qshortcut/CMakeLists.txt
@@ -1,16 +1,38 @@
-# Generated from qshortcut.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qshortcut Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qshortcut LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qshortcut
SOURCES
tst_qshortcut.cpp
INCLUDE_DIRECTORIES
..
- PUBLIC_LIBRARIES
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
+ Qt::WidgetsPrivate
+)
+
+qt_internal_add_test(tst_qguishortcut_with_qapplication
+ SOURCES
+ ../../../gui/kernel/qshortcut/tst_qshortcut.cpp
+ DEFINES
+ tst_QShortcut=tst_QGuiShortcutWithQApplication
+ INCLUDE_DIRECTORIES
+ ..
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp b/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp
index a9cd037b38..7468dfa9a6 100644
--- a/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp
+++ b/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.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 <QTest>
@@ -48,6 +23,8 @@
#include <QtGui/private/qguiapplication_p.h>
#include <QtGui/qpa/qplatformintegration.h>
+#include <QtWidgets/private/qapplication_p.h>
+
QT_BEGIN_NAMESPACE
class QMainWindow;
class QTextEdit;
@@ -338,11 +315,11 @@ void tst_QShortcut::number_data()
Shift + Qt::Key_Plus on Shift + Qt::Key_Pluss
Qt::Key_Plus on Shift + Qt::Key_Pluss
*/
- QTest::newRow("N002 - slot1") << SetupAccel << TriggerSlot1 << QString() << int(Qt::SHIFT | Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N002:Shift+M - [Shift+M]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("N002 - slot1") << SetupAccel << TriggerSlot1 << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_M).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N002:Shift+M - [Shift+M]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_M).toCombined() << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("N002:M - [Shift+M]") << TestAccel << NoWidget << QString() << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N002 - slot2") << SetupAccel << TriggerSlot2 << QString() << int(Qt::SHIFT | Qt::Key_Plus) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N002:Shift++ [Shift++]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
+ QTest::newRow("N002 - slot2") << SetupAccel << TriggerSlot2 << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Plus).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N002:Shift++ [Shift++]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Plus).toCombined() << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
QTest::newRow("N002:+ [Shift++]") << TestAccel << NoWidget << QString() << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("N002 - clear") << ClearAll << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all
@@ -360,8 +337,8 @@ void tst_QShortcut::number_data()
Qt::Key_F1 on Shift + Qt::Key_F1
*/
- QTest::newRow("N004 - slot1") << SetupAccel << TriggerSlot1 << QString() << int(Qt::SHIFT | Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N004:Shift+F1 - [Shift+F1]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("N004 - slot1") << SetupAccel << TriggerSlot1 << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_F1).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N004:Shift+F1 - [Shift+F1]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_F1).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("N004:F1 - [Shift+F1]") << TestAccel << NoWidget << QString() << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("N004 - clear") << ClearAll << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all
@@ -377,7 +354,7 @@ void tst_QShortcut::number_data()
//QTest::newRow("N005a:Shift+Tab - [Tab]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT + Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
// (Shift+)BackTab != Tab, but Shift+BackTab == Shift+Tab
QTest::newRow("N005a:Backtab - [Tab]") << TestAccel << NoWidget << QString() << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N005a:Shift+Backtab - [Tab]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N005a:Shift+Backtab - [Tab]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Backtab).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("N005a - clear") << ClearAll << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all
/* Testing Single Sequences
@@ -386,11 +363,11 @@ void tst_QShortcut::number_data()
Qt::Key_Backtab on Shift + Qt::Key_Tab
Shift + Qt::Key_Backtab on Shift + Qt::Key_Tab
*/
- QTest::newRow("N005b - slot1") << SetupAccel << TriggerSlot1 << QString() << int(Qt::SHIFT | Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N005b - slot1") << SetupAccel << TriggerSlot1 << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Tab).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("N005b:Tab - [Shift+Tab]") << TestAccel << NoWidget << QString() << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N005b:Shift+Tab - [Shift+Tab]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("N005b:Shift+Tab - [Shift+Tab]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Tab).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("N005b:BackTab - [Shift+Tab]") << TestAccel << NoWidget << QString() << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N005b:Shift+BackTab - [Shift+Tab]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("N005b:Shift+BackTab - [Shift+Tab]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Backtab).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("N005b - clear") << ClearAll << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all
/* Testing Single Sequences
@@ -403,10 +380,10 @@ void tst_QShortcut::number_data()
QTest::newRow("N006a:Tab - [BackTab]") << TestAccel << NoWidget << QString() << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
// This should work, since platform dependent code will transform the
// Shift+Tab into a Shift+BackTab, which should trigger the shortcut
- QTest::newRow("N006a:Shift+Tab - [BackTab]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; //XFAIL
+ QTest::newRow("N006a:Shift+Tab - [BackTab]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Tab).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; //XFAIL
QTest::newRow("N006a:BackTab - [BackTab]") << TestAccel << NoWidget << QString() << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
//commented out because the behaviour changed, those tests should be updated
- //QTest::newRow("N006a:Shift+BackTab - [BackTab]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT + Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
+ //QTest::newRow("N006a:Shift+BackTab - [BackTab]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Backtab).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("N006a - clear") << ClearAll << NoWidget<< QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all
/* Testing Single Sequences
@@ -415,11 +392,11 @@ void tst_QShortcut::number_data()
Qt::Key_Backtab on Shift + Qt::Key_Backtab
Shift + Qt::Key_Backtab on Shift + Qt::Key_Backtab
*/
- QTest::newRow("N006b - slot1") << SetupAccel << TriggerSlot1 << QString() << int(Qt::SHIFT | Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N006b - slot1") << SetupAccel << TriggerSlot1 << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Backtab).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("N006b:Tab - [Shift+BackTab]") << TestAccel << NoWidget << QString() << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N006b:Shift+Tab - [Shift+BackTab]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("N006b:Shift+Tab - [Shift+BackTab]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Tab).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("N006b:BackTab - [Shift+BackTab]") << TestAccel << NoWidget << QString() << int(Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N006b:Shift+BackTab - [Shift+BackTab]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_Backtab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; //XFAIL
+ QTest::newRow("N006b:Shift+BackTab - [Shift+BackTab]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Backtab).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered; //XFAIL
QTest::newRow("N006b - clear") << ClearAll << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all
//===========================================
@@ -432,9 +409,9 @@ void tst_QShortcut::number_data()
Shift + Qt::Key_F1
*/
QTest::newRow("N007 - slot1") << SetupAccel << TriggerSlot1 << QString() << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N007 - slot2") << SetupAccel << TriggerSlot2 << QString() << int(Qt::SHIFT | Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N007 - slot2") << SetupAccel << TriggerSlot2 << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_F1).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("N007:F1") << TestAccel << NoWidget << QString() << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
- QTest::newRow("N007:Shift + F1") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
+ QTest::newRow("N007:Shift + F1") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_F1).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
QTest::newRow("N007 - clear") << ClearAll << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all
/* Testing Single Sequences
@@ -444,13 +421,13 @@ void tst_QShortcut::number_data()
Alt + Qt::Key_M
*/
QTest::newRow("N01 - slot1") << SetupAccel << TriggerSlot1 << QString() << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N02 - slot2") << SetupAccel << TriggerSlot2 << QString() << int(Qt::SHIFT | Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N03 - slot1") << SetupAccel << TriggerSlot1 << QString() << int(Qt::CTRL | Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N04 - slot2") << SetupAccel << TriggerSlot2 << QString() << int(Qt::ALT | Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N02 - slot2") << SetupAccel << TriggerSlot2 << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_M).toCombined() << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N03 - slot1") << SetupAccel << TriggerSlot1 << QString() << QKeyCombination(Qt::CTRL, Qt::Key_M).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N04 - slot2") << SetupAccel << TriggerSlot2 << QString() << QKeyCombination(Qt::ALT, Qt::Key_M).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("N:Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
- QTest::newRow("N:Shift+Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
- QTest::newRow("N:Ctrl+Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::CTRL | Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
- QTest::newRow("N:Alt+Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::ALT | Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
+ QTest::newRow("N:Shift+Qt::Key_M") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_M).toCombined() << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
+ QTest::newRow("N:Ctrl+Qt::Key_M") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::CTRL, Qt::Key_M).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("N:Alt+Qt::Key_M") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::ALT, Qt::Key_M).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
/* Testing Single Sequence Ambiguity
Qt::Key_M on shortcut2
@@ -465,11 +442,11 @@ void tst_QShortcut::number_data()
Qt::Key_K
*/
QTest::newRow("N06 - slot1") << SetupAccel << TriggerSlot1 << QString() << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N07 - slot2") << SetupAccel << TriggerSlot2 << QString() << int(Qt::SHIFT | Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N07 - slot2") << SetupAccel << TriggerSlot2 << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Aring).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("N08 - slot2") << SetupAccel << TriggerSlot1 << QString() << int(Qt::Key_K) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("N:Qt::Key_aring") << TestAccel << NoWidget << QString() << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
- QTest::newRow("N:Qt::Key_Aring") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
+ QTest::newRow("N:Qt::Key_Aring") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Aring).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
QTest::newRow("N:Qt::Key_aring - Text Form") << TestAccel << NoWidget << QString() << 0 << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("N:Qt::Key_Aring - Text Form") << TestAccel << NoWidget << QString() << int(Qt::SHIFT) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
QTest::newRow("N:Qt::Qt::Key_K") << TestAccel << NoWidget << QString() << int(Qt::Key_K) << int('k') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
@@ -482,11 +459,11 @@ void tst_QShortcut::number_data()
*/
QTest::newRow("N10 - slot1") << SetupAccel << TriggerSlot1 << QString() << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("N11 - slot2") << SetupAccel << TriggerSlot2 << QString() << int(Qt::Key_I) << 0 << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("N12 - slot1") << SetupAccel << TriggerSlot1 << QString() << int(Qt::SHIFT | Qt::Key_I) << 0 << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << NoResult;
+ QTest::newRow("N12 - slot1") << SetupAccel << TriggerSlot1 << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_I).toCombined() << 0 << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("N:Qt::Key_M (2)") << TestAccel << NoWidget << QString() << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("N:Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::Key_I) << int('i') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot2Triggered;
- QTest::newRow("N:Shift+Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_I) << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("N:Shift+Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_I).toCombined() << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("N:end") << TestEnd << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
}
@@ -528,10 +505,10 @@ void tst_QShortcut::text_data()
Ctrl + Qt::Key_Plus on Ctrl + Qt::Key_Pluss
*/
QTest::newRow("T002 - slot1") << SetupAccel << TriggerSlot1 << QString("Shift+M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("T002:Shift+M - [Shift+M]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("T002:Shift+M - [Shift+M]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_M).toCombined() << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("T002:M - [Shift+M]") << TestAccel << NoWidget << QString() << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("T002 - slot2") << SetupAccel << TriggerSlot2 << QString("Shift++") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("T002:Shift++ [Shift++]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
+ QTest::newRow("T002:Shift++ [Shift++]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Plus).toCombined() << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
QTest::newRow("T002:+ [Shift++]") << TestAccel << NoWidget << QString() << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("T002 - clear") << ClearAll << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all
@@ -543,7 +520,7 @@ void tst_QShortcut::text_data()
QTest::newRow("T002b - slot1") << SetupAccel << TriggerSlot1 << QString("Ctrl++") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
//commented out because the behaviour changed, those tests should be updated
//QTest::newRow("T002b:Shift+Ctrl++ [Ctrl++]")<< TestAccel << NoWidget << QString() << int(Qt::SHIFT + Qt::CTRL + Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
- QTest::newRow("T002b:Ctrl++ [Ctrl++]") << TestAccel << NoWidget << QString() << int(Qt::CTRL | Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("T002b:Ctrl++ [Ctrl++]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::CTRL, Qt::Key_Plus).toCombined() << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("T002b:+ [Ctrl++]") << TestAccel << NoWidget << QString() << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("T002b - clear") << ClearAll << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all
@@ -562,7 +539,7 @@ void tst_QShortcut::text_data()
Qt::Key_F1 on Shift + Qt::Key_F1
*/
QTest::newRow("T004 - slot1") << SetupAccel << TriggerSlot1 << QString("Shift+F1") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
- QTest::newRow("T004:Shift+F1 - [Shift+F1]") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("T004:Shift+F1 - [Shift+F1]") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_F1).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("T004:F1 - [Shift+F1]") << TestAccel << NoWidget << QString() << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("T004 - clear") << ClearAll << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all
@@ -578,7 +555,7 @@ void tst_QShortcut::text_data()
QTest::newRow("T007 - slot1") << SetupAccel << TriggerSlot1 << QString("F1") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("T007 - slot2") << SetupAccel << TriggerSlot2 << QString("Shift+F1") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("T007:F1") << TestAccel << NoWidget << QString() << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
- QTest::newRow("T007:Shift + F1") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
+ QTest::newRow("T007:Shift + F1") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_F1).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
QTest::newRow("T007 - clear") << ClearAll << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult; // Clear all
/* Testing Single Sequences
@@ -593,9 +570,9 @@ void tst_QShortcut::text_data()
QTest::newRow("T04 - slot2") << SetupAccel << TriggerSlot2 << QString("Alt+M") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("T:Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
- QTest::newRow("T:Shift + Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
- QTest::newRow("T:Ctrl + Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::CTRL | Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
- QTest::newRow("T:Alt + Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::ALT | Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
+ QTest::newRow("T:Shift + Qt::Key_M") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_M).toCombined() << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
+ QTest::newRow("T:Ctrl + Qt::Key_M") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::CTRL, Qt::Key_M).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("T:Alt + Qt::Key_M") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::ALT, Qt::Key_M).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
/* Testing Single Sequence Ambiguity
Qt::Key_M on shortcut2
@@ -614,7 +591,7 @@ void tst_QShortcut::text_data()
QTest::newRow("T07 - slot2") << SetupAccel << TriggerSlot2 << QString::fromLatin1("Shift+\x0C5")<< 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("T08 - slot2") << SetupAccel << TriggerSlot1 << QString("K") << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("T:Qt::Key_aring") << TestAccel << NoWidget << QString() << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
- QTest::newRow("T:Qt::Key_Aring") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
+ QTest::newRow("T:Qt::Key_Aring") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_Aring).toCombined() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
QTest::newRow("T:Qt::Key_aring - Text Form") << TestAccel << NoWidget << QString() << 0 << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("T:Qt::Key_Aring - Text Form") << TestAccel << NoWidget << QString() << int(Qt::SHIFT) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << Slot2Triggered;
QTest::newRow("T:Qt::Key_K") << TestAccel << NoWidget << QString() << int(Qt::Key_K) << int('k') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
@@ -630,7 +607,7 @@ void tst_QShortcut::text_data()
QTest::newRow("T12 - slot1") << SetupAccel << TriggerSlot1 << QString("Shift+I, M")<< 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
QTest::newRow("T:Qt::Key_M (2)") << TestAccel << NoWidget << QString() << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("T:Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::Key_I) << int('i') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot2Triggered;
- QTest::newRow("T:Shift+Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString() << int(Qt::SHIFT | Qt::Key_I) << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot1Triggered;
+ QTest::newRow("T:Shift+Qt::Key_I, Qt::Key_M") << TestAccel << NoWidget << QString() << QKeyCombination(Qt::SHIFT, Qt::Key_I).toCombined() << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << Slot1Triggered;
QTest::newRow("T:end") << TestEnd << NoWidget << QString() << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << NoResult;
}
@@ -1087,7 +1064,7 @@ void tst_QShortcut::context()
// Focus on 'other1' edit, so Active Window context should trigger
other1->activateWindow(); // <---
- QApplication::setActiveWindow(other1);
+ QApplicationPrivate::setActiveWindow(other1);
QCOMPARE(QApplication::activeWindow(), other1->window());
QCOMPARE(QApplication::focusWidget(), static_cast<QWidget *>(other1));
@@ -1179,7 +1156,7 @@ void tst_QShortcut::duplicatedShortcutOverride()
w.resize(200, 200);
w.move(QGuiApplication::primaryScreen()->availableGeometry().center() - QPoint(100, 100));
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QTest::keyPress(w.windowHandle(), Qt::Key_A);
QCoreApplication::processEvents();
@@ -1375,10 +1352,10 @@ void tst_QShortcut::keys()
QCOMPARE(QApplication::focusWidget(), &le);
QTest::keyEvent(QTest::Press, QApplication::focusWidget(), Qt::Key_Enter);
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QTest::keyEvent(QTest::Press, QApplication::focusWidget(), Qt::Key_Return);
- QTRY_COMPARE(spy.count(), 2);
+ QTRY_COMPARE(spy.size(), 2);
}
QTEST_MAIN(tst_QShortcut)
diff --git a/tests/auto/widgets/kernel/qsizepolicy/CMakeLists.txt b/tests/auto/widgets/kernel/qsizepolicy/CMakeLists.txt
index 36450d4f80..efdd72db73 100644
--- a/tests/auto/widgets/kernel/qsizepolicy/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qsizepolicy/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsizepolicy.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsizepolicy Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsizepolicy LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsizepolicy
SOURCES
tst_qsizepolicy.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
Qt::WidgetsPrivate
diff --git a/tests/auto/widgets/kernel/qsizepolicy/tst_qsizepolicy.cpp b/tests/auto/widgets/kernel/qsizepolicy/tst_qsizepolicy.cpp
index d6a5ec218d..19d267f7e5 100644
--- a/tests/auto/widgets/kernel/qsizepolicy/tst_qsizepolicy.cpp
+++ b/tests/auto/widgets/kernel/qsizepolicy/tst_qsizepolicy.cpp
@@ -1,32 +1,6 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <qsizepolicy.h>
Q_DECLARE_METATYPE(Qt::Orientations)
@@ -34,6 +8,8 @@ Q_DECLARE_METATYPE(QSizePolicy)
Q_DECLARE_METATYPE(QSizePolicy::Policy)
Q_DECLARE_METATYPE(QSizePolicy::ControlType)
+#include <QTest>
+
class tst_QSizePolicy : public QObject
{
Q_OBJECT
@@ -109,7 +85,7 @@ void tst_QSizePolicy::constExpr()
{
/* gcc < 4.8.0 has problems with init'ing variant members in constexpr ctors */
/* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54922 */
-#if !defined(Q_CC_GNU) || defined(Q_CC_INTEL) || defined(Q_CC_CLANG) || Q_CC_GNU >= 408
+#if !defined(Q_CC_GNU) || defined(Q_CC_CLANG) || Q_CC_GNU >= 408
// check that certain ctors are constexpr (compile-only):
{ constexpr QSizePolicy sp; Q_UNUSED(sp); }
{ constexpr QSizePolicy sp = QSizePolicy(); Q_UNUSED(sp); }
@@ -119,7 +95,7 @@ void tst_QSizePolicy::constExpr()
{
// QTBUG-69983: For ControlType != QSizePolicy::DefaultType, qCountTrailingZeroBits()
// is used, which MSVC 15.8.1 does not consider constexpr due to built-ins
-# if defined(QT_HAS_CONSTEXPR_BUILTINS) && (!defined(Q_CC_MSVC) || _MSC_VER < 1915)
+# if defined(QT_HAS_CONSTEXPR_BITOPS)
constexpr auto sp = QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed, QSizePolicy::CheckBox);
# else
constexpr auto sp = QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Expanding, QSizePolicy::DefaultType);
diff --git a/tests/auto/widgets/kernel/qstackedlayout/CMakeLists.txt b/tests/auto/widgets/kernel/qstackedlayout/CMakeLists.txt
index 2c1c3da277..5701f455b5 100644
--- a/tests/auto/widgets/kernel/qstackedlayout/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qstackedlayout/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qstackedlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstackedlayout Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstackedlayout LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstackedlayout
SOURCES
tst_qstackedlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp b/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp
index 711ffeda03..ca002a1375 100644
--- a/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.cpp
+++ b/tests/auto/widgets/kernel/qstackedlayout/tst_qstackedlayout.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 <QTest>
@@ -36,6 +11,8 @@
#include <QPushButton>
#include <QSignalSpy>
+#include <QtWidgets/private/qapplication_p.h>
+
class tst_QStackedLayout : public QObject
{
Q_OBJECT
@@ -132,7 +109,7 @@ void tst_QStackedLayout::testCase()
// One widget added to layout
QWidget *w1 = new QWidget(testWidget);
testLayout->addWidget(w1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toInt(), 0);
spy.clear();
QCOMPARE(testLayout->currentIndex(), 0);
@@ -149,7 +126,7 @@ void tst_QStackedLayout::testCase()
// Change the current index
testLayout->setCurrentIndex(1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toInt(), 1);
spy.clear();
QCOMPARE(testLayout->currentIndex(), 1);
@@ -163,7 +140,7 @@ void tst_QStackedLayout::testCase()
// Second widget removed from layout; back to nothing
testLayout->removeWidget(w2);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toInt(), -1);
spy.clear();
QCOMPARE(testLayout->currentIndex(), -1);
@@ -312,7 +289,7 @@ void tst_QStackedLayout::keepFocusAfterSetCurrent()
stackLayout->setCurrentIndex(0);
testWidget->show();
- QApplication::setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
QVERIFY(QTest::qWaitForWindowActive(testWidget));
edit1->setFocus();
diff --git a/tests/auto/widgets/kernel/qtooltip/CMakeLists.txt b/tests/auto/widgets/kernel/qtooltip/CMakeLists.txt
index a07cd1aa65..af2de80e24 100644
--- a/tests/auto/widgets/kernel/qtooltip/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qtooltip/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qtooltip.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtooltip Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtooltip LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtooltip
SOURCES
tst_qtooltip.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp b/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp
index 8e4e2a0ea4..c3b53addcc 100644
--- a/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.cpp
+++ b/tests/auto/widgets/kernel/qtooltip/tst_qtooltip.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 <QTest>
@@ -36,6 +11,8 @@
#include <qwhatsthis.h>
#include <qscreen.h>
+#include <QtWidgets/private/qapplication_p.h>
+
class tst_QToolTip : public QObject
{
Q_OBJECT
@@ -49,6 +26,7 @@ private slots:
void setPalette();
void qtbug64550_stylesheet();
void dontCrashOutsideScreenGeometry();
+ void marginSetWithStyleSheet();
};
void tst_QToolTip::init()
@@ -120,7 +98,7 @@ void tst_QToolTip::keyEvent()
widget.setWindowTitle(QLatin1String(QTest::currentTestFunction())
+ QLatin1Char(' ') + QLatin1String(QTest::currentDataTag()));
widget.show();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
QVERIFY(QTest::qWaitForWindowActive(&widget));
widget.showDelayedToolTip(100);
@@ -140,7 +118,8 @@ void tst_QToolTip::keyEvent()
static QWidget *findWhatsThat()
{
- foreach (QWidget *widget, QApplication::topLevelWidgets()) {
+ const auto widgets = QApplication::topLevelWidgets();
+ for (QWidget *widget : widgets) {
if (widget->inherits("QWhatsThat"))
return widget;
}
@@ -214,7 +193,7 @@ void tst_QToolTip::qtbug64550_stylesheet()
Widget widget;
widget.setStyleSheet(QStringLiteral("* { font-size: 48pt; }\n"));
widget.show();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
QVERIFY(QTest::qWaitForWindowActive(&widget));
widget.showDelayedToolTip(100);
@@ -236,5 +215,30 @@ void tst_QToolTip::dontCrashOutsideScreenGeometry() {
QToolTip::hideText();
}
+void tst_QToolTip::marginSetWithStyleSheet()
+{
+ const char *toolTipText = "Test Tool Tip";
+
+ qApp->setStyleSheet("QToolTip {font-size: 8px; margin: 5px;}");
+ QToolTip::showText(QGuiApplication::primaryScreen()->availableGeometry().topLeft(), toolTipText);
+ QTRY_VERIFY(QToolTip::isVisible());
+ QWidget *toolTip = findToolTip();
+ QVERIFY(toolTip);
+ QTRY_VERIFY(toolTip->isVisible());
+ int toolTipHeight = toolTip->size().height();
+ qApp->setStyleSheet(QString());
+ QToolTip::hideText();
+
+ qApp->setStyleSheet("QToolTip {font-size: 8px; margin: 10px;}");
+ QToolTip::showText(QGuiApplication::primaryScreen()->availableGeometry().topLeft(), toolTipText);
+ QTRY_VERIFY(QToolTip::isVisible());
+ toolTip = findToolTip();
+ QVERIFY(toolTip);
+ QTRY_VERIFY(toolTip->isVisible());
+ QCOMPARE_LE(toolTip->size().height(), toolTipHeight + 10);
+ qApp->setStyleSheet(QString());
+ QToolTip::hideText();
+}
+
QTEST_MAIN(tst_QToolTip)
#include "tst_qtooltip.moc"
diff --git a/tests/auto/widgets/kernel/qwidget/BLACKLIST b/tests/auto/widgets/kernel/qwidget/BLACKLIST
index 880ec6f9b4..4c17af245b 100644
--- a/tests/auto/widgets/kernel/qwidget/BLACKLIST
+++ b/tests/auto/widgets/kernel/qwidget/BLACKLIST
@@ -1,65 +1,49 @@
-# OSX QTBUG-25300 QTBUG-45502
-[normalGeometry]
-ubuntu-16.04
-[restoreVersion1Geometry]
-ubuntu-16.04
-[focusProxyAndInputMethods]
-rhel-7.6
-centos
-opensuse-leap
-ubuntu
[raise]
opensuse-leap
-# QTBUG-68175
-opensuse-42.3
-[renderInvisible]
-macos
-[optimizedResizeMove]
-osx
[optimizedResize_topLevel]
osx
[render_windowOpacity]
macos arm
[render_systemClip]
osx
-[maskedUpdate]
-opensuse
-opensuse-leap
-[moveInResizeEvent]
-ubuntu-16.04
[multipleToplevelFocusCheck]
-rhel-7.6
centos
opensuse-leap
ubuntu
sles-15
-
# QTBUG-87668
-[reparent]
-android
-[windowState]
-android
[showMinimizedKeepsFocus]
android
+macos-13 ci
+macos-14 ci
[normalGeometry]
android
[saveRestoreGeometry]
android
[optimizedResizeMove]
android
-[resizeEvent]
-android
[update]
android
[scroll]
android
-[setWindowGeometry]
+[moveChild]
android
-[windowMoveResize]
+[multipleToplevelFocusCheck]
android
-[moveChild]
+[renderInvisible]
android
-[showAndMoveChild]
+[updateWhileMinimized]
android
-[multipleToplevelFocusCheck]
+[doubleRepaint]
+android
+[setMaskInResizeEvent]
+android
+[activateWindow]
+android
+[optimizedResize_topLevel]
+android
+[hoverPosition]
+macos-14 x86
+# QTBUG-124291
+[setParentChangesFocus:make dialog parentless, after]
android
diff --git a/tests/auto/widgets/kernel/qwidget/CMakeLists.txt b/tests/auto/widgets/kernel/qwidget/CMakeLists.txt
index d04db40e87..f18bc98bb3 100644
--- a/tests/auto/widgets/kernel/qwidget/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qwidget/CMakeLists.txt
@@ -1,20 +1,15 @@
-# Generated from qwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qwidget Test:
#####################################################################
-qt_internal_add_test(tst_qwidget
- SOURCES
- tst_qwidget.cpp
- PUBLIC_LIBRARIES
- Qt::CorePrivate
- Qt::Gui
- Qt::GuiPrivate
- Qt::TestPrivate
- Qt::Widgets
- Qt::WidgetsPrivate
-)
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
# Resources:
set(qwidget_resource_files
@@ -24,17 +19,20 @@ set(qwidget_resource_files
"hellotr_la.qm"
)
-qt_internal_add_resource(tst_qwidget "qwidget"
- PREFIX
- "/"
- FILES
- ${qwidget_resource_files}
+qt_internal_add_test(tst_qwidget
+ SOURCES
+ tst_qwidget.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::TestPrivate
+ Qt::Widgets
+ Qt::WidgetsPrivate
+ TESTDATA ${qwidget_resource_files}
+ BUILTIN_TESTDATA
)
-
-#### Keys ignored in scope 1:.:.:qwidget.pro:<TRUE>:
-# testcase.timeout = "600"
-
## Scopes:
#####################################################################
@@ -43,16 +41,8 @@ qt_internal_extend_target(tst_qwidget CONDITION AIX
-fpermissive
)
-qt_internal_extend_target(tst_qwidget CONDITION APPLE
- SOURCES
- tst_qwidget_mac_helpers.mm
- PUBLIC_LIBRARIES
- ${FWAppKit}
- ${FWSecurity}
-)
-
qt_internal_extend_target(tst_qwidget CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
gdi32
user32
)
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index c2d00d003f..40d8064562 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.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 "../../../shared/highdpi.h"
@@ -38,6 +13,7 @@
#include <qlineedit.h>
#include <qlistview.h>
#include <qmessagebox.h>
+#include <qmimedata.h>
#include <qpainter.h>
#include <qpoint.h>
#include <qpushbutton.h>
@@ -62,6 +38,7 @@
#include <QtGui/qbackingstore.h>
#include <QtGui/qguiapplication.h>
#include <QtGui/qpa/qplatformwindow.h>
+#include <QtGui/qpa/qplatformdrag.h>
#include <QtGui/qscreen.h>
#include <qmenubar.h>
#include <qcompleter.h>
@@ -74,15 +51,13 @@
#include <QtGui/qwindow.h>
#include <qtimer.h>
#include <QtWidgets/QDoubleSpinBox>
-
-#if defined(Q_OS_MACOS)
-#include "tst_qwidget_mac_helpers.h" // Abstract the ObjC stuff out so not everyone must run an ObjC++ compile.
-#endif
+#include <QtWidgets/QComboBox>
#include <QtTest/QTest>
#include <QtTest/private/qtesthelpers_p.h>
using namespace QTestPrivate;
+using namespace Qt::StringLiterals;
#if defined(Q_OS_WIN)
# include <QtCore/qt_windows.h>
@@ -147,6 +122,34 @@ static QByteArray msgComparisonFailed(T v1, const char *op, T v2)
return s.toLocal8Bit();
}
+template<class T> class EventSpy : public QObject
+{
+public:
+ EventSpy(T *widget, QEvent::Type event)
+ : m_widget(widget), eventToSpy(event)
+ {
+ if (m_widget)
+ m_widget->installEventFilter(this);
+ }
+
+ T *widget() const { return m_widget; }
+ int count() const { return m_count; }
+ void clear() { m_count = 0; }
+
+protected:
+ bool eventFilter(QObject *object, QEvent *event) override
+ {
+ if (event->type() == eventToSpy)
+ ++m_count;
+ return QObject::eventFilter(object, event);
+ }
+
+private:
+ T *m_widget;
+ const QEvent::Type eventToSpy;
+ int m_count = 0;
+};
+
Q_LOGGING_CATEGORY(lcTests, "qt.widgets.tests")
class tst_QWidget : public QObject
@@ -160,7 +163,9 @@ public:
public slots:
void initTestCase();
void cleanup();
+
private slots:
+ void nativeWindowAttribute();
void addActionOverloads();
void getSetCheck();
void fontPropagation();
@@ -186,11 +191,15 @@ private slots:
void mapFromAndTo();
void focusChainOnHide();
void focusChainOnReparent();
+ void focusAbstraction();
void defaultTabOrder();
void reverseTabOrder();
void tabOrderWithProxy();
void tabOrderWithProxyDisabled();
+ void tabOrderWithProxyOutOfOrder();
void tabOrderWithCompoundWidgets();
+ void tabOrderWithCompoundWidgetsInflection_data();
+ void tabOrderWithCompoundWidgetsInflection();
void tabOrderWithCompoundWidgetsNoFocusPolicy();
void tabOrderNoChange();
void tabOrderNoChange2();
@@ -198,12 +207,16 @@ private slots:
void appFocusWidgetWhenLosingFocusProxy();
void explicitTabOrderWithComplexWidget();
void explicitTabOrderWithSpinBox_QTBUG81097();
+ void tabOrderList();
+ void tabOrderComboBox_data();
+ void tabOrderComboBox();
#if defined(Q_OS_WIN)
void activation();
#endif
void reparent();
void setScreen();
void windowState();
+ void resizePropagation();
void showMaximized();
void showFullScreen();
void showMinimized();
@@ -221,6 +234,8 @@ private slots:
void saveRestoreGeometry();
void restoreVersion1Geometry_data();
void restoreVersion1Geometry();
+ void restoreGeometryAfterScreenChange_data();
+ void restoreGeometryAfterScreenChange();
void widgetAt();
#ifdef Q_OS_MACOS
@@ -241,6 +256,7 @@ private slots:
void ensureCreated();
void createAndDestroy();
+ void eventsAndAttributesOnDestroy();
void winIdChangeEvent();
void persistentWinId();
void showNativeChild();
@@ -335,6 +351,8 @@ private slots:
void resizeInPaintEvent();
void opaqueChildren();
+ void dumpObjectTree();
+
void setMaskInResizeEvent();
void moveInResizeEvent();
@@ -366,6 +384,7 @@ private slots:
void enterLeaveOnWindowShowHide_data();
void enterLeaveOnWindowShowHide();
void taskQTBUG_4055_sendSyntheticEnterLeave();
+ void hoverPosition();
void underMouse();
void taskQTBUG_27643_enterEvents();
#endif
@@ -389,7 +408,8 @@ private slots:
void openModal_taskQTBUG_5804();
void focusProxy();
- void focusProxyAndInputMethods();
+ void imEnabledNotImplemented();
+
#ifdef QT_BUILD_INTERNAL
void scrollWithoutBackingStore();
#endif
@@ -443,6 +463,19 @@ private slots:
void activateWhileModalHidden();
+#ifdef Q_OS_ANDROID
+ void showFullscreenAndroid();
+#endif
+
+ void setVisibleDuringDestruction();
+
+ void explicitShowHide();
+
+ void dragEnterLeaveSymmetry();
+
+ void reparentWindowHandles_data();
+ void reparentWindowHandles();
+
private:
const QString m_platform;
QSize m_testWidgetSize;
@@ -451,6 +484,16 @@ private:
const bool m_windowsAnimationsEnabled;
QPointingDevice *m_touchScreen;
const int m_fuzz;
+ QPalette simplePalette();
+
+private:
+ enum class ScreenPosition {
+ OffAbove,
+ OffLeft,
+ OffBelow,
+ OffRight,
+ Contained
+ };
};
// Testing get/set functions
@@ -467,8 +510,8 @@ void tst_QWidget::getSetCheck()
QVERIFY(var1.data() != obj1.style());
QVERIFY(obj1.style() != nullptr); // style can never be 0 for a widget
- const QRegularExpression negativeNotPossible(u"^.*Negative sizes \\(.*\\) are not possible$"_qs);
- const QRegularExpression largestAllowedSize(u"^.*The largest allowed size is \\(.*\\)$"_qs);
+ const QRegularExpression negativeNotPossible(u"^.*Negative sizes \\(.*\\) are not possible$"_s);
+ const QRegularExpression largestAllowedSize(u"^.*The largest allowed size is \\(.*\\)$"_s);
// int QWidget::minimumWidth()
// void QWidget::setMinimumWidth(int)
obj1.setMinimumWidth(0);
@@ -609,7 +652,7 @@ void tst_QWidget::getSetCheck()
#if defined (Q_OS_WIN)
obj1.setWindowFlags(Qt::FramelessWindowHint | Qt::WindowSystemMenuHint);
const HWND handle = reinterpret_cast<HWND>(obj1.winId()); // explicitly create window handle
- QVERIFY(GetWindowLong(handle, GWL_STYLE) & LONG(WS_POPUP));
+ QVERIFY(GetWindowLongPtr(handle, GWL_STYLE) & LONG_PTR(WS_POPUP));
#endif
}
@@ -646,6 +689,10 @@ tst_QWidget::~tst_QWidget()
void tst_QWidget::initTestCase()
{
+#ifdef Q_OS_ANDROID
+ if (QNativeInterface::QAndroidApplication::sdkVersion() == 33)
+ QSKIP("Is flaky on Android 13 / RHEL 8.6 and 8.8 (QTQAINFRA-5606)");
+#endif
// Size of reference widget, 200 for < 2000, scale up for larger screens
// to avoid Windows warnings about minimum size for decorated windows.
int width = 200;
@@ -678,6 +725,24 @@ struct ImplicitlyConvertibleTo {
void testFunction0() {}
void testFunction1(bool) {}
+void tst_QWidget::nativeWindowAttribute()
+{
+ QWidget parent;
+ QWidget child(&parent);
+
+ QCOMPARE(parent.windowHandle(), nullptr);
+ QCOMPARE(child.windowHandle(), nullptr);
+
+ // Setting WA_NativeWindow should create window handle
+ parent.setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(parent.windowHandle() != nullptr);
+ // But not its child's window handle
+ QCOMPARE(child.windowHandle(), nullptr);
+ // Until the child also gains WA_NativeWindow
+ child.setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(child.windowHandle() != nullptr);
+}
+
void tst_QWidget::addActionOverloads()
{
// almost exhaustive check of addAction() overloads:
@@ -1872,8 +1937,6 @@ void tst_QWidget::focusChainOnHide()
QWidget::setTabOrder(child, parent.data());
parent->show();
- QApplication::setActiveWindow(parent->window());
- child->activateWindow();
child->setFocus();
QTRY_VERIFY(child->hasFocus());
@@ -1914,8 +1977,11 @@ public:
setObjectName(name);
lineEdit1 = new QLineEdit;
+ lineEdit1->setObjectName(name + "/lineEdit1");
lineEdit2 = new QLineEdit;
+ lineEdit2->setObjectName(name + "/lineEdit2");
lineEdit3 = new QLineEdit;
+ lineEdit3->setObjectName(name + "/lineEdit3");
lineEdit3->setEnabled(false);
QHBoxLayout* hbox = new QHBoxLayout(this);
@@ -1930,6 +1996,111 @@ public:
QLineEdit *lineEdit3;
};
+static QList<QWidget *> getFocusChain(QWidget *start, bool bForward)
+{
+ QList<QWidget *> ret;
+ QWidget *cur = start;
+ // detect infinite loop
+ int count = 100;
+ auto loopGuard = qScopeGuard([]{
+ QFAIL("Inifinite loop detected in focus chain");
+ });
+ do {
+ ret += cur;
+ cur = bForward ? cur->nextInFocusChain() : cur->previousInFocusChain();
+ if (!--count)
+ return ret;
+ } while (cur != start);
+ loopGuard.dismiss();
+ return ret;
+}
+
+void tst_QWidget::focusAbstraction()
+{
+ QWidget *widget1 = new QWidget;
+ widget1->setObjectName("Widget 1");
+ QWidget *widget2 = new QWidget;
+ widget2->setObjectName("Widget 2");
+ QWidget *widget3 = new QWidget;
+ widget3->setObjectName("Widget 3");
+ QWidgetPrivate *priv1 = QWidgetPrivate::get(widget1);
+ QWidgetPrivate *priv2 = QWidgetPrivate::get(widget2);
+ QWidgetPrivate *priv3 = QWidgetPrivate::get(widget3);
+
+ // Verify initialization
+ QVERIFY(!priv1->isInFocusChain());
+ QVERIFY(!priv2->isInFocusChain());
+ QVERIFY(!priv3->isInFocusChain());
+
+ // Verify, that parenting builds a focus chain.
+ QWidget parent;
+ parent.setObjectName("Parent");
+ widget1->setParent(&parent);
+ widget2->setParent(&parent);
+ widget3->setParent(&parent);
+ QVERIFY(priv1->isInFocusChain());
+ QVERIFY(priv2->isInFocusChain());
+ QVERIFY(priv3->isInFocusChain());
+ QWidgetList expected{widget1, widget2, widget3, &parent};
+ QCOMPARE(getFocusChain(widget1, true), expected);
+
+ // Verify, that reparented focus children end up behind parent.
+ widget1->setParent(widget2);
+ priv2->insertIntoFocusChainAfter(widget3);
+ priv2->reparentFocusChildren(QWidgetPrivate::FocusDirection::Next);
+ expected = {widget1, &parent, widget3, widget2};
+ QCOMPARE(getFocusChain(widget1, true), expected);
+ QVERIFY(priv1->isInFocusChain());
+ QVERIFY(priv2->isInFocusChain());
+ QVERIFY(priv3->isInFocusChain());
+
+ // Check removal
+ priv3->removeFromFocusChain(QWidgetPrivate::FocusChainRemovalRule::AssertConsistency);
+ expected.removeOne(widget3);
+ QCOMPARE(getFocusChain(widget1, true), expected);
+ QVERIFY(priv1->isInFocusChain());
+ QVERIFY(priv2->isInFocusChain());
+ QVERIFY(!priv3->isInFocusChain());
+
+ // Check insert
+ priv3->insertIntoFocusChain(QWidgetPrivate::FocusDirection::Previous, widget1);
+ expected = {widget3, widget1, &parent, widget2};
+ QCOMPARE(getFocusChain(widget3, true), expected);
+
+ // Verify, that take doesn't break
+ const QWidgetList taken = QWidgetPrivate::takeFromFocusChain(widget1, widget2);
+ QVERIFY(priv1->isFocusChainConsistent());
+ expected = {widget1, &parent, widget2};
+ QCOMPARE(taken, expected);
+ QVERIFY(priv1->isInFocusChain());
+ QVERIFY(priv2->isInFocusChain());
+ QVERIFY(!priv3->isInFocusChain());
+
+ // Verify insertion of multiple widgets
+ QWidgetPrivate::insertIntoFocusChain(taken, QWidgetPrivate::FocusDirection::Next, widget3);
+ expected = {widget3, widget1, &parent, widget2};
+ QCOMPARE(getFocusChain(widget3, true), expected);
+ QVERIFY(priv1->isInFocusChain());
+ QVERIFY(priv2->isInFocusChain());
+ QVERIFY(priv2->isInFocusChain());
+
+ // Verify broken chain identification
+ // d'tor asserts chain consistency => repair before going out of scope
+ auto guard = qScopeGuard([priv2, widget3]{ priv2->focus_next = widget3; });
+
+ // Nullptr is not allowed
+ priv2->focus_next = nullptr;
+ QVERIFY(!priv1->isFocusChainConsistent());
+
+ // Chain looping back in the middle
+ priv2->focus_next = widget1;
+ QVERIFY(!priv1->isFocusChainConsistent());
+
+ // "last" element pointing to itself
+ priv2->focus_next = widget2;
+ QVERIFY(!priv1->isFocusChainConsistent());
+}
+
void tst_QWidget::defaultTabOrder()
{
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
@@ -1953,7 +2124,6 @@ void tst_QWidget::defaultTabOrder()
container.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
container.show();
container.activateWindow();
- QApplication::setActiveWindow(&container);
QVERIFY(QTest::qWaitForWindowActive(&container));
QTRY_VERIFY(firstEdit->hasFocus());
@@ -1989,23 +2159,29 @@ void tst_QWidget::defaultTabOrder()
void tst_QWidget::reverseTabOrder()
{
- if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ if (QGuiApplication::platformName().startsWith(QLatin1StringView("wayland"), Qt::CaseInsensitive))
QSKIP("Wayland: This fails. Figure out why.");
const int compositeCount = 2;
Container container;
- container.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
+ container.setObjectName(QLatin1StringView("Container"));
+ container.setWindowTitle(QLatin1StringView(QTest::currentTestFunction()));
Composite* composite[compositeCount];
QLineEdit *firstEdit = new QLineEdit();
+ firstEdit->setObjectName(QLatin1StringView("FirstEdit"));
container.box->addWidget(firstEdit);
+ static constexpr QLatin1StringView comp("Composite-%1");
for (int i = 0; i < compositeCount; i++) {
- composite[i] = new Composite();
+ const QString name = QString(comp).arg(i);
+ composite[i] = new Composite(nullptr, name);
+ composite[i]->setObjectName(name);
container.box->addWidget(composite[i]);
}
QLineEdit *lastEdit = new QLineEdit();
+ lastEdit->setObjectName(QLatin1StringView("LastEdit"));
container.box->addWidget(lastEdit);
// Reverse tab order inside each composite
@@ -2014,7 +2190,6 @@ void tst_QWidget::reverseTabOrder()
container.show();
container.activateWindow();
- QApplication::setActiveWindow(&container);
QVERIFY(QTest::qWaitForWindowActive(&container));
QTRY_VERIFY(firstEdit->hasFocus());
@@ -2049,6 +2224,139 @@ void tst_QWidget::reverseTabOrder()
QVERIFY(firstEdit->hasFocus());
}
+void tst_QWidget::tabOrderList()
+{
+ Composite c;
+ QCOMPARE(getFocusChain(&c, true),
+ QList<QWidget *>({&c, c.lineEdit1, c.lineEdit2, c.lineEdit3}));
+ QWidget::setTabOrder({c.lineEdit3, c.lineEdit2, c.lineEdit1});
+ // not starting with 3 like one would maybe expect, but still 3, 2, 1
+ QCOMPARE(getFocusChain(&c, true),
+ QList<QWidget *>({&c, c.lineEdit1, c.lineEdit3, c.lineEdit2}));
+}
+
+void tst_QWidget::tabOrderComboBox_data()
+{
+ QTest::addColumn<const bool>("editableAtBeginning");
+ QTest::addColumn<const QList<int>>("firstTabOrder");
+ QTest::addColumn<const QList<int>>("secondTabOrder");
+
+ QTest::addRow("3 not editable") << false << QList<int>{2, 1, 0} << QList<int>{0, 1, 2};
+ QTest::addRow("4 editable") << true << QList<int>{2, 1, 0, 3} << QList<int>{3, 0, 2, 1};
+}
+
+QWidgetList expectedFocusChain(const QList<QComboBox *> &boxes, const QList<int> &sequence)
+{
+ Q_ASSERT(boxes.count() == sequence.count());
+ QWidgetList widgets;
+ for (int i : sequence) {
+ Q_ASSERT(i >= 0);
+ Q_ASSERT(i < boxes.count());
+ QComboBox *box = boxes.at(i);
+ widgets.append(box);
+ if (box->lineEdit())
+ widgets.append(box->lineEdit());
+ }
+
+ return widgets;
+}
+
+QWidgetList realFocusChain(const QList<QComboBox *> &boxes, const QList<int> &sequence)
+{
+ const QWidgetList all = getFocusChain(boxes.at(sequence.at(0)), true);
+ QWidgetList chain;
+ // Filter everything with NoFocus
+ for (auto *widget : all) {
+ if (widget->focusPolicy() != Qt::NoFocus)
+ chain << widget;
+ }
+ return chain;
+}
+
+void setTabOrder(const QList<QComboBox *> &boxes, const QList<int> &sequence)
+{
+ Q_ASSERT(boxes.count() == sequence.count());
+ QWidget *previous = nullptr;
+ for (int i : sequence) {
+ Q_ASSERT(i >= 0);
+ Q_ASSERT(i < boxes.count());
+ QWidget *box = boxes.at(i);
+ if (!previous) {
+ previous = box;
+ } else {
+ QWidget::setTabOrder(previous, box);
+ previous = box;
+ }
+ }
+}
+
+void tst_QWidget::tabOrderComboBox()
+{
+ QFETCH(const bool, editableAtBeginning);
+ QFETCH(const QList<int>, firstTabOrder);
+ QFETCH(const QList<int>, secondTabOrder);
+ const int count = firstTabOrder.count();
+ Q_ASSERT(count == secondTabOrder.count());
+ Q_ASSERT(count > 1);
+
+ QWidget w;
+ w.setObjectName("MainWidget");
+ QVBoxLayout* layout = new QVBoxLayout();
+ w.setLayout(layout);
+
+ QList<QComboBox *> boxes;
+ for (int i = 0; i < count; ++i) {
+ auto box = new QComboBox;
+ box->setObjectName("ComboBox " + QString::number(i));
+ if (editableAtBeginning) {
+ box->setEditable(true);
+ box->lineEdit()->setObjectName("LineEdit " + QString::number(i));
+ }
+ boxes.append(box);
+ layout->addWidget(box);
+ }
+ layout->addStretch();
+
+#define COMPARE(seq)\
+ setTabOrder(boxes, seq);\
+ QCOMPARE(realFocusChain(boxes, seq), expectedFocusChain(boxes, seq))
+
+ COMPARE(firstTabOrder);
+
+ if (!editableAtBeginning) {
+ for (auto *box : boxes)
+ box->setEditable(box);
+ }
+
+ COMPARE(secondTabOrder);
+
+ // Remove the focus proxy of the first combobox's line edit.
+ QComboBox *box = boxes.at(0);
+ QLineEdit *lineEdit = box->lineEdit();
+ const QWidget *prev = lineEdit->previousInFocusChain();
+ const QWidget *next = lineEdit->nextInFocusChain();
+ const QWidget *proxy = lineEdit->focusProxy();
+ QCOMPARE(proxy, box);
+ lineEdit->setFocusProxy(nullptr);
+ QCOMPARE(lineEdit->focusProxy(), nullptr);
+ QCOMPARE(lineEdit->previousInFocusChain(), prev);
+ QCOMPARE(lineEdit->nextInFocusChain(), next);
+
+ // Remove first item and check chain consistency
+ boxes.removeFirst();
+ delete box;
+
+ // Create new list with 0 removed and other indexes updated
+ QList<int> thirdTabOrder(secondTabOrder);
+ thirdTabOrder.removeIf([](int i){ return i == 0; });
+ for (int &i : thirdTabOrder)
+ --i;
+
+ COMPARE(thirdTabOrder);
+
+#undef COMPARE
+}
+
void tst_QWidget::tabOrderWithProxy()
{
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
@@ -2076,7 +2384,6 @@ void tst_QWidget::tabOrderWithProxy()
container.show();
container.activateWindow();
- QApplication::setActiveWindow(&container);
QVERIFY(QTest::qWaitForWindowActive(&container));
QTRY_VERIFY(firstEdit->hasFocus());
@@ -2137,7 +2444,6 @@ void tst_QWidget::tabOrderWithProxyDisabled()
container.show();
container.activateWindow();
- QApplication::setActiveWindow(&container);
if (!QTest::qWaitForWindowActive(&container))
QSKIP("Window failed to activate, skipping test");
@@ -2161,6 +2467,24 @@ void tst_QWidget::tabOrderWithProxyDisabled()
qPrintable(QApplication::focusWidget()->objectName()));
}
+//#define DEBUG_FOCUS_CHAIN
+static void dumpFocusChain(QWidget *start, bool bForward, const char *desc = nullptr)
+{
+#ifdef DEBUG_FOCUS_CHAIN
+ qDebug() << "Dump focus chain, start:" << start << "isForward:" << bForward << desc;
+ QWidget *cur = start;
+ do {
+ qDebug() << "-" << cur;
+ auto widgetPrivate = static_cast<QWidgetPrivate *>(qt_widget_private(cur));
+ cur = bForward ? widgetPrivate->focus_next : widgetPrivate->focus_prev;
+ } while (cur != start);
+#else
+ Q_UNUSED(start);
+ Q_UNUSED(bForward);
+ Q_UNUSED(desc);
+#endif
+}
+
void tst_QWidget::tabOrderWithCompoundWidgets()
{
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
@@ -2201,7 +2525,6 @@ void tst_QWidget::tabOrderWithCompoundWidgets()
container.show();
container.activateWindow();
- QApplication::setActiveWindow(&container);
QVERIFY(QTest::qWaitForWindowActive(&container));
lastEdit->setFocus();
@@ -2252,34 +2575,180 @@ void tst_QWidget::tabOrderWithCompoundWidgets()
QVERIFY(lastEdit->hasFocus());
}
-static QList<QWidget *> getFocusChain(QWidget *start, bool bForward)
+void tst_QWidget::tabOrderWithProxyOutOfOrder()
{
- QList<QWidget *> ret;
- QWidget *cur = start;
- do {
- ret += cur;
- auto widgetPrivate = static_cast<QWidgetPrivate *>(qt_widget_private(cur));
- cur = bForward ? widgetPrivate->focus_next : widgetPrivate->focus_prev;
- } while (cur != start);
- return ret;
+ Container container;
+ container.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
+ container.setObjectName(QLatin1StringView("Container"));
+
+ // important to create the widgets with parent so that they are
+ // added to the focus chain already now, and with the buttonBox
+ // before the outsideButton.
+ QWidget buttonBox(&container);
+ buttonBox.setObjectName(QLatin1StringView("buttonBox"));
+ QPushButton outsideButton(&container);
+ outsideButton.setObjectName(QLatin1StringView("outsideButton"));
+
+ container.box->addWidget(&outsideButton);
+ container.box->addWidget(&buttonBox);
+ QCOMPARE(getFocusChain(&container, true),
+ QList<QWidget*>({&container, &buttonBox, &outsideButton}));
+
+ // this now adds okButon and cancelButton to the focus chain,
+ // after the outsideButton - so the outsideButton is in between
+ // the buttonBox and the children of the buttonBox!
+ QPushButton okButton(&buttonBox);
+ okButton.setObjectName("okButton");
+ QPushButton cancelButton(&buttonBox);
+ cancelButton.setObjectName("cancelButton");
+ QCOMPARE(getFocusChain(&container, true),
+ QList<QWidget*>({&container, &buttonBox, &outsideButton, &okButton, &cancelButton}));
+
+ // by setting the okButton as the focusProxy, the outsideButton becomes
+ // unreachable when navigating the focus chain as the buttonBox is in front
+ // of, and proxies to the okButton behind the outsideButton. setFocusProxy
+ // must fix that by moving the buttonBox in front of the first sibling of
+ // the proxy.
+ buttonBox.setFocusProxy(&okButton);
+ QCOMPARE(getFocusChain(&container, true),
+ QList<QWidget*>({&container, &outsideButton, &buttonBox, &okButton, &cancelButton}));
+
+ container.show();
+ container.activateWindow();
+ if (!QTest::qWaitForWindowActive(&container))
+ QSKIP("Window failed to activate, skipping test");
+
+ QCOMPARE(QApplication::focusWidget(), &outsideButton);
+ container.tab();
+ QCOMPARE(QApplication::focusWidget(), &okButton);
+ container.tab();
+ QCOMPARE(QApplication::focusWidget(), &cancelButton);
+ container.tab();
+ QCOMPARE(QApplication::focusWidget(), &outsideButton);
+
+ container.backTab();
+ QCOMPARE(QApplication::focusWidget(), &cancelButton);
+ container.backTab();
+ QCOMPARE(QApplication::focusWidget(), &okButton);
+ container.backTab();
+ QCOMPARE(QApplication::focusWidget(), &outsideButton);
+ container.backTab();
+ QCOMPARE(QApplication::focusWidget(), &cancelButton);
}
-//#define DEBUG_FOCUS_CHAIN
-static void dumpFocusChain(QWidget *start, bool bForward, const char *desc = nullptr)
+static bool isFocusChainConsistent(QWidget *widget)
{
-#ifdef DEBUG_FOCUS_CHAIN
- qDebug() << "Dump focus chain, start:" << start << "isForward:" << bForward << desc;
- QWidget *cur = start;
- do {
- qDebug() << cur;
- auto widgetPrivate = static_cast<QWidgetPrivate *>(qt_widget_private(cur));
- cur = bForward ? widgetPrivate->focus_next : widgetPrivate->focus_prev;
- } while (cur != start);
-#else
- Q_UNUSED(start);
- Q_UNUSED(bForward);
- Q_UNUSED(desc);
-#endif
+ auto forward = getFocusChain(widget, true);
+ auto backward = getFocusChain(widget, false);
+ auto logger = qScopeGuard([=]{
+ qCritical("Focus chain is not consistent!");
+ qWarning() << forward.size() << "forwards: " << forward;
+ qWarning() << backward.size() << "backwards:" << backward;
+ });
+ // both lists start with the same, the widget
+ if (forward.takeFirst() != backward.takeFirst())
+ return false;
+ const qsizetype chainLength = forward.size();
+ if (backward.size() != chainLength)
+ return false;
+ for (qsizetype i = 0; i < chainLength; ++i) {
+ if (forward.at(i) != backward.at(chainLength - i - 1))
+ return false;
+ }
+ logger.dismiss();
+ return true;
+}
+
+/*
+ This tests that we end up with consistent and complete chains when we set
+ the tab order from a widget (the lineEdit) inside a compound (the tabWidget)
+ to the compound, or visa versa. In that case, QWidget::setTabOrder will walk
+ the focus chain to the focus child inside the compound to replace the compound
+ itself when manipulating the tab order. If that last focus child is then
+ however also the lineEdit, then we must not create an inconsistent or
+ incomplete loop.
+
+ The tabWidget is seen as a compound because QTabWidget sets the tab bar as
+ the focus proxy, and it has more widgets inside, like pages, toolbuttons etc.
+*/
+void tst_QWidget::tabOrderWithCompoundWidgetsInflection_data()
+{
+ QTest::addColumn<QByteArrayList>("tabOrder");
+
+ QTest::addRow("forward")
+ << QByteArrayList{"dialog", "tabWidget", "lineEdit", "compound", "okButton", "cancelButton"};
+ QTest::addRow("backward")
+ << QByteArrayList{"dialog", "cancelButton", "okButton", "compound", "lineEdit", "tabWidget"};
+}
+
+void tst_QWidget::tabOrderWithCompoundWidgetsInflection()
+{
+ QFETCH(const QByteArrayList, tabOrder);
+
+ QDialog dialog;
+ dialog.setObjectName("dialog");
+ QTabWidget *tabWidget = new QTabWidget;
+ tabWidget->setObjectName("tabWidget");
+ tabWidget->setFocusPolicy(Qt::TabFocus);
+ QWidget *page = new QWidget;
+ page->setObjectName("page");
+ QLineEdit *lineEdit = new QLineEdit;
+ lineEdit->setObjectName("lineEdit");
+ QWidget *compound = new QWidget;
+ compound->setObjectName("compound");
+ compound->setFocusPolicy(Qt::TabFocus);
+ QPushButton *okButton = new QPushButton("Ok");
+ okButton->setObjectName("okButton");
+ okButton->setFocusPolicy(Qt::TabFocus);
+ QPushButton *cancelButton = new QPushButton("Cancel");
+ cancelButton->setObjectName("cancelButton");
+ cancelButton->setFocusPolicy(Qt::TabFocus);
+
+ QVBoxLayout *pageLayout = new QVBoxLayout;
+ pageLayout->addWidget(lineEdit);
+ page->setLayout(pageLayout);
+ tabWidget->addTab(page, "Tab");
+
+ QHBoxLayout *compoundLayout = new QHBoxLayout;
+ compoundLayout->addStretch();
+ compoundLayout->addWidget(cancelButton);
+ compoundLayout->addWidget(okButton);
+ compound->setFocusProxy(okButton);
+ compound->setLayout(compoundLayout);
+
+ QVBoxLayout *dialogLayout = new QVBoxLayout;
+ dialogLayout->addWidget(tabWidget);
+ dialogLayout->addWidget(compound);
+ dialog.setLayout(dialogLayout);
+
+ QVERIFY(isFocusChainConsistent(&dialog));
+
+ QList<QWidget *> expectedFocusChain;
+ for (qsizetype i = 0; i < tabOrder.size() - 1; ++i) {
+ QWidget *first = dialog.findChild<QWidget *>(tabOrder.at(i));
+ if (!first && tabOrder.at(i) == dialog.objectName())
+ first = &dialog;
+ QVERIFY(first);
+ if (i == 0)
+ expectedFocusChain.append(first);
+ QWidget *second = dialog.findChild<QWidget *>(tabOrder.at(i + 1));
+ QVERIFY(second);
+ expectedFocusChain.append(second);
+ QWidget::setTabOrder(first, second);
+ QVERIFY(isFocusChainConsistent(&dialog));
+ }
+
+ const auto forwardChain = getFocusChain(&dialog, true);
+ auto logger = qScopeGuard([=]{
+ qCritical("Order of widgets in focus chain not matching:");
+ qCritical() << " Actual :" << forwardChain;
+ qCritical() << " Expected:" << expectedFocusChain;
+ });
+ for (qsizetype i = 0; i < expectedFocusChain.size() - 2; ++i) {
+ QCOMPARE_LT(forwardChain.indexOf(expectedFocusChain.at(i)),
+ forwardChain.indexOf(expectedFocusChain.at(i + 1)));
+ }
+ logger.dismiss();
}
void tst_QWidget::tabOrderWithCompoundWidgetsNoFocusPolicy()
@@ -2303,7 +2772,6 @@ void tst_QWidget::tabOrderWithCompoundWidgetsNoFocusPolicy()
container.show();
container.activateWindow();
- QApplication::setActiveWindow(&container);
if (!QTest::qWaitForWindowActive(&container))
QSKIP("Window failed to activate, skipping test");
@@ -2409,7 +2877,6 @@ void tst_QWidget::appFocusWidgetWithFocusProxyLater()
QLineEdit *lineEdit = new QLineEdit(&window);
lineEdit->setFocus();
window.show();
- QApplication::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
QCOMPARE(QApplication::focusWidget(), lineEdit);
@@ -2437,7 +2904,6 @@ void tst_QWidget::appFocusWidgetWhenLosingFocusProxy()
lineEdit->setFocusProxy(lineEditFocusProxy);
lineEdit->setFocus();
window.show();
- QApplication::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
QCOMPARE(QApplication::focusWidget(), lineEditFocusProxy);
QVERIFY(lineEdit->hasFocus());
@@ -2464,7 +2930,6 @@ void tst_QWidget::explicitTabOrderWithComplexWidget()
QWidget::setTabOrder(lineEditOne, lineEditTwo);
lineEditOne->setFocus();
window.show();
- QApplication::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
QTRY_COMPARE(QApplication::focusWidget(), lineEditOne);
@@ -2493,7 +2958,6 @@ void tst_QWidget::explicitTabOrderWithSpinBox_QTBUG81097()
QWidget::setTabOrder(spinBoxTwo, lineEdit);
spinBoxOne->setFocus();
window.show();
- QApplication::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
QTRY_COMPARE(QApplication::focusWidget(), spinBoxOne);
@@ -2571,12 +3035,14 @@ void tst_QWidget::windowState()
QPoint pos;
QSize size = m_testWidgetSize;
- if (QGuiApplicationPrivate::platformIntegration()->defaultWindowState(Qt::Widget)
- == Qt::WindowFullScreen) {
+ const Qt::WindowState defaultWidgetState =
+ QGuiApplicationPrivate::platformIntegration()->defaultWindowState(Qt::Widget);
+ if (defaultWidgetState == Qt::WindowFullScreen)
size = QGuiApplication::primaryScreen()->size();
- } else {
+ else if (defaultWidgetState == Qt::WindowMaximized)
+ size = QGuiApplication::primaryScreen()->availableSize();
+ else
pos = QPoint(10, 10);
- }
QWidget widget1;
widget1.move(pos);
@@ -2691,6 +3157,119 @@ void tst_QWidget::windowState()
QTRY_COMPARE(widget1.size(), size);
}
+// Test propagation of size and state from platform window to QWidget
+// Windows and linux/XCB only
+void tst_QWidget::resizePropagation()
+{
+#if !defined(Q_OS_LINUX) && !defined(Q_OS_WIN)
+ QSKIP("resizePropagation test is designed for Linux/XCB and Windows only");
+#endif
+ const bool xcb = (m_platform == QStringLiteral("xcb"));
+#ifdef Q_OS_LINUX
+ if (!xcb)
+ QSKIP("resizePropagation test is designed for XCB only");
+#endif
+
+ // Windows:
+ // When a widget is maximized after it has been resized, the widget retains its original size,
+ // while the window shows maximum size.
+ // windowStateChanged signal gets fired on a no-op change from/to WindowNoState
+
+ // Initialize widget and signal spy for window handle
+ QWidget widget;
+ widget.showMaximized();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+ QWindow *window = widget.windowHandle();
+ QTRY_VERIFY(window);
+ QSignalSpy spy(window, &QWindow::windowStateChanged);
+ int count = 0;
+
+ const QSize screenSize = QGuiApplication::primaryScreen()->size();
+ const QSize size1 = QSize(screenSize.width() * 0.5, screenSize.height() * 0.5);
+ const QSize size2 = QSize(screenSize.width() * 0.625, screenSize.height() * 0.833);
+
+ enum CountIncrementCheck {Equal, Greater};
+ enum TargetSizeCheck {Fail, Warn};
+ auto verifyResize = [&](const QSize &size, Qt::WindowState windowState,
+ CountIncrementCheck checkCountIncrement,
+ TargetSizeCheck checkTargetSize)
+ {
+ // Capture count of latest async signals
+ if (checkCountIncrement == Equal)
+ count = spy.count();
+
+ // Resize if required
+ if (size.isValid())
+ widget.resize(size);
+
+ // Wait for the widget anyway
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+
+ // Check signal count and qDebug output for fail analysis
+ switch (checkCountIncrement) {
+ case Greater: {
+ auto logger = qScopeGuard([&](){
+ qDebug() << "spy count:" << spy.count() << "previous count:" << count;
+ });
+ QTRY_VERIFY(spy.count() > count);
+ logger.dismiss();
+ count = spy.count();
+ }
+ break;
+ case Equal: {
+ auto logger = qScopeGuard([&](){
+ qDebug() << spy << widget.windowState() << window->windowState();
+ });
+ QCOMPARE(spy.count(), count);
+ logger.dismiss();
+ }
+ break;
+ }
+
+ // QTRY necessary because state changes are propagated async
+ QTRY_COMPARE(widget.windowState(), windowState);
+ QTRY_COMPARE(window->windowState(), windowState);
+
+ // Check target size with fail or warning
+ switch (checkTargetSize) {
+ case Fail:
+ QCOMPARE(widget.size(), window->size());
+ break;
+ case Warn:
+ if (widget.size() != window->size()) {
+ qWarning() << m_platform << "size mismtach tolerated. Widget:"
+ << widget.size() << "Window:" << window->size();
+ }
+ break;
+ }
+ };
+
+ // test state and size consistency of maximized window
+ verifyResize(QSize(), Qt::WindowMaximized, Equal, Fail);
+ if (QTest::currentTestFailed())
+ return;
+
+ // test state transition, state and size consistency after resize
+ verifyResize(size1, Qt::WindowNoState, Greater, xcb ? Warn : Fail );
+ if (QTest::currentTestFailed())
+ return;
+
+ // test unchanged state, state and size consistency after resize
+ verifyResize(size2, Qt::WindowNoState, Equal, xcb ? Warn : Fail);
+ if (QTest::currentTestFailed())
+ return;
+
+ // test state transition, state and size consistency after maximize
+ widget.showMaximized();
+ verifyResize(QSize(), Qt::WindowMaximized, Greater, xcb ? Fail : Warn);
+ if (QTest::currentTestFailed())
+ return;
+
+#ifdef Q_OS_WIN
+ QCOMPARE(widget.size(), size2);
+#endif
+}
+
void tst_QWidget::showMaximized()
{
QWidget plain;
@@ -2880,7 +3459,7 @@ void tst_QWidget::resizeEvent()
wParent.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
wParent.resize(m_testWidgetSize);
ResizeWidget wChild(&wParent);
- wParent.show();
+ QTestPrivate::androidCompatibleShow(&wParent);
QVERIFY(QTest::qWaitForWindowExposed(&wParent));
QCOMPARE (wChild.m_resizeEventCount, 1); // initial resize event before paint
wParent.hide();
@@ -2889,7 +3468,7 @@ void tst_QWidget::resizeEvent()
safeSize.setWidth(639);
wChild.resize(safeSize);
QCOMPARE (wChild.m_resizeEventCount, 1);
- wParent.show();
+ QTestPrivate::androidCompatibleShow(&wParent);
QCOMPARE (wChild.m_resizeEventCount, 2);
}
@@ -2897,7 +3476,7 @@ void tst_QWidget::resizeEvent()
ResizeWidget wTopLevel;
wTopLevel.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
wTopLevel.resize(m_testWidgetSize);
- wTopLevel.show();
+ QTestPrivate::androidCompatibleShow(&wTopLevel);
QVERIFY(QTest::qWaitForWindowExposed(&wTopLevel));
QCOMPARE (wTopLevel.m_resizeEventCount, 1); // initial resize event before paint for toplevels
wTopLevel.hide();
@@ -2906,7 +3485,7 @@ void tst_QWidget::resizeEvent()
safeSize.setWidth(639);
wTopLevel.resize(safeSize);
QCOMPARE (wTopLevel.m_resizeEventCount, 1);
- wTopLevel.show();
+ QTestPrivate::androidCompatibleShow(&wTopLevel);
QVERIFY(QTest::qWaitForWindowExposed(&wTopLevel));
QCOMPARE (wTopLevel.m_resizeEventCount, 2);
}
@@ -2982,7 +3561,7 @@ void tst_QWidget::showMinimizedKeepsFocus()
child1.setFocusPolicy(Qt::StrongFocus);
child2.setFocusPolicy(Qt::StrongFocus);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
child2.setFocus();
@@ -3006,7 +3585,6 @@ void tst_QWidget::showMinimizedKeepsFocus()
QWidget *child = new QWidget(&window);
child->setFocusPolicy(Qt::StrongFocus);
window.show();
- QApplication::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
child->setFocus();
QTRY_COMPARE(window.focusWidget(), child);
@@ -3025,7 +3603,6 @@ void tst_QWidget::showMinimizedKeepsFocus()
QWidget *child = new QWidget(&window);
child->setFocusPolicy(Qt::StrongFocus);
window.show();
- QApplication::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
child->setFocus();
QTRY_COMPARE(window.focusWidget(), child);
@@ -3045,7 +3622,6 @@ void tst_QWidget::showMinimizedKeepsFocus()
QWidget *child = new QWidget(&window);
child->setFocusPolicy(Qt::StrongFocus);
window.show();
- QApplication::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
child->setFocus();
QTRY_COMPARE(window.focusWidget(), child);
@@ -3066,7 +3642,6 @@ void tst_QWidget::showMinimizedKeepsFocus()
QWidget *child = new QWidget(&window);
child->setFocusPolicy(Qt::StrongFocus);
window.show();
- QApplication::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
child->setFocus();
QTRY_COMPARE(window.focusWidget(), child);
@@ -3083,7 +3658,6 @@ void tst_QWidget::showMinimizedKeepsFocus()
QTRY_COMPARE(QApplication::focusWidget(), nullptr);
window.showNormal();
- QApplication::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
#ifdef Q_OS_MACOS
if (!macHasAccessToWindowsServer())
@@ -3121,8 +3695,8 @@ void tst_QWidget::reparent()
pal2.setColor(childTLW.backgroundRole(), Qt::yellow);
childTLW.setPalette(pal2);
- parent.show();
- childTLW.show();
+ QTestPrivate::androidCompatibleShow(&parent);
+ QTestPrivate::androidCompatibleShow(&childTLW);
QVERIFY(QTest::qWaitForWindowExposed(&parent));
parent.move(parentPosition);
@@ -3132,7 +3706,7 @@ void tst_QWidget::reparent()
child.setParent(nullptr, child.windowFlags() & ~Qt::WindowType_Mask);
child.setGeometry(childPos.x(), childPos.y(), child.width(), child.height());
- child.show();
+ QTestPrivate::androidCompatibleShow(&child);
#if 0 // QTBUG-26424
if (m_platform == QStringLiteral("xcb"))
@@ -3148,7 +3722,7 @@ void tst_QWidget::reparent()
void tst_QWidget::setScreen()
{
const auto screens = QApplication::screens();
- if (screens.count() < 2)
+ if (screens.size() < 2)
QSKIP("This test tests nothing on a machine with a single screen.");
QScreen *screen0 = screens.at(0);
@@ -3542,9 +4116,9 @@ void tst_QWidget::raise()
QObjectList list1{child1, child2, child3, child4};
QCOMPARE(parentPtr->children(), list1);
- QCOMPARE(allChildren.count(), list1.count());
+ QCOMPARE(allChildren.size(), list1.size());
- for (UpdateWidget *child : qAsConst(allChildren)) {
+ for (UpdateWidget *child : std::as_const(allChildren)) {
int expectedPaintEvents = child == child4 ? 1 : 0;
if (expectedPaintEvents == 0) {
QCOMPARE(child->numPaintEvents, 0);
@@ -3558,9 +4132,10 @@ void tst_QWidget::raise()
for (int i = 0; i < 5; ++i)
child2->raise();
- QTest::qWait(50);
+ QVERIFY(QTest::qWaitForWindowExposed(child2));
+ QApplication::processEvents(); // process events that could be triggered by raise();
- for (UpdateWidget *child : qAsConst(allChildren)) {
+ for (UpdateWidget *child : std::as_const(allChildren)) {
int expectedPaintEvents = child == child2 ? 1 : 0;
int expectedZOrderChangeEvents = child == child2 ? 1 : 0;
QTRY_COMPARE(child->numPaintEvents, expectedPaintEvents);
@@ -3587,15 +4162,17 @@ void tst_QWidget::raise()
onTop->show();
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
QTRY_VERIFY(onTop->numPaintEvents > 0);
+ QApplication::processEvents(); // process remaining paint events if there's more than one
onTop->reset();
// Reset all the children.
- for (UpdateWidget *child : qAsConst(allChildren))
+ for (UpdateWidget *child : std::as_const(allChildren))
child->reset();
for (int i = 0; i < 5; ++i)
child3->raise();
- QTest::qWait(50);
+ QVERIFY(QTest::qWaitForWindowExposed(child3));
+ QApplication::processEvents(); // process events that could be triggered by raise();
QCOMPARE(onTop->numPaintEvents, 0);
QCOMPARE(onTop->numZOrderChangeEvents, 0);
@@ -3603,7 +4180,7 @@ void tst_QWidget::raise()
QObjectList list3{child1, child4, child2, child3};
QCOMPARE(parent->children(), list3);
- for (UpdateWidget *child : qAsConst(allChildren)) {
+ for (UpdateWidget *child : std::as_const(allChildren)) {
int expectedPaintEvents = 0;
int expectedZOrderChangeEvents = child == child3 ? 1 : 0;
QTRY_COMPARE(child->numPaintEvents, expectedPaintEvents);
@@ -3641,9 +4218,9 @@ void tst_QWidget::lower()
QObjectList list1{child1, child2, child3, child4};
QCOMPARE(parent->children(), list1);
- QCOMPARE(allChildren.count(), list1.count());
+ QCOMPARE(allChildren.size(), list1.size());
- for (UpdateWidget *child : qAsConst(allChildren)) {
+ for (UpdateWidget *child : std::as_const(allChildren)) {
int expectedPaintEvents = child == child4 ? 1 : 0;
if (expectedPaintEvents == 0) {
QCOMPARE(child->numPaintEvents, 0);
@@ -3660,7 +4237,7 @@ void tst_QWidget::lower()
QTest::qWait(100);
- for (UpdateWidget *child : qAsConst(allChildren)) {
+ for (UpdateWidget *child : std::as_const(allChildren)) {
int expectedPaintEvents = child == child3 ? 1 : 0;
int expectedZOrderChangeEvents = child == child4 ? 1 : 0;
QTRY_COMPARE(child->numZOrderChangeEvents, expectedZOrderChangeEvents);
@@ -3706,7 +4283,7 @@ void tst_QWidget::stackUnder()
QObjectList list1{child1, child2, child3, child4};
QCOMPARE(parent->children(), list1);
- for (UpdateWidget *child : qAsConst(allChildren)) {
+ for (UpdateWidget *child : std::as_const(allChildren)) {
int expectedPaintEvents = child == child4 ? 1 : 0;
#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
if (expectedPaintEvents == 1 && child->numPaintEvents == 2)
@@ -3724,7 +4301,7 @@ void tst_QWidget::stackUnder()
QObjectList list2{child1, child4, child2, child3};
QCOMPARE(parent->children(), list2);
- for (UpdateWidget *child : qAsConst(allChildren)) {
+ for (UpdateWidget *child : std::as_const(allChildren)) {
int expectedPaintEvents = child == child3 ? 1 : 0;
int expectedZOrderChangeEvents = child == child4 ? 1 : 0;
QTRY_COMPARE(child->numPaintEvents, expectedPaintEvents);
@@ -3739,7 +4316,7 @@ void tst_QWidget::stackUnder()
QObjectList list3{child4, child2, child1, child3};
QCOMPARE(parent->children(), list3);
- for (UpdateWidget *child : qAsConst(allChildren)) {
+ for (UpdateWidget *child : std::as_const(allChildren)) {
int expectedZOrderChangeEvents = child == child1 ? 1 : 0;
if (child == child3) {
#ifndef Q_OS_MACOS
@@ -3861,6 +4438,13 @@ void tst_QWidget::saveRestoreGeometry()
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QApplication::processEvents();
+
+ /* ---------------------------------------------------------------------
+ * This test function is likely to flake when debugged with Qt Creator.
+ * (29px offset making the following QTRY_VERIFY2 fail)
+ * ---------------------------------------------------------------------
+ */
+
QTRY_VERIFY2(HighDpi::fuzzyCompare(widget.pos(), position, m_fuzz),
qPrintable(HighDpi::msgPointMismatch(widget.pos(), position)));
QCOMPARE(widget.size(), size);
@@ -4016,10 +4600,9 @@ void tst_QWidget::restoreVersion1Geometry()
const Qt::WindowStates WindowStateMask = Qt::WindowFullScreen | Qt::WindowMaximized | Qt::WindowMinimized;
QFile f(fileName);
- QVERIFY(f.exists());
- f.open(QIODevice::ReadOnly);
+ QVERIFY(f.open(QIODevice::ReadOnly));
const QByteArray savedGeometry = f.readAll();
- QCOMPARE(savedGeometry.count(), 46);
+ QCOMPARE(savedGeometry.size(), 46);
f.close();
QWidget widget;
@@ -4073,6 +4656,68 @@ void tst_QWidget::restoreVersion1Geometry()
#endif
}
+void tst_QWidget::restoreGeometryAfterScreenChange_data()
+{
+ QTest::addColumn<ScreenPosition>("screenPosition");
+ QTest::addColumn<int>("deltaWidth");
+ QTest::addColumn<int>("deltaHeight");
+ QTest::addColumn<int>("frameMargin");
+ QTest::addColumn<bool>("outside");
+
+ QTest::newRow("offAboveLarge") << ScreenPosition::OffAbove << 200 << 250 << 20 << true;
+ QTest::newRow("fitting") << ScreenPosition::Contained << 80 << 80 << 20 << false;
+ QTest::newRow("offRightWide") << ScreenPosition::OffRight << 150 << 80 << 20 << false;
+ QTest::newRow("offLeftFitting") << ScreenPosition::OffLeft << 70 << 70 << 20 << true;
+ QTest::newRow("offBelowHigh") << ScreenPosition::OffBelow << 80 << 200 << 20 << false;
+}
+
+void tst_QWidget::restoreGeometryAfterScreenChange()
+{
+ const QList<QScreen *> &screens = QApplication::screens();
+ QVERIFY2(!screens.isEmpty(), "No screens found.");
+ const QRect screenGeometry = screens.at(0)->geometry();
+
+ QFETCH(ScreenPosition, screenPosition);
+ QFETCH(int, deltaWidth);
+ QFETCH(int, deltaHeight);
+ QFETCH(int, frameMargin);
+ QFETCH(bool, outside);
+
+ QRect restoredGeometry = screenGeometry;
+ restoredGeometry.setHeight(screenGeometry.height() * deltaHeight / 100);
+ restoredGeometry.setWidth(screenGeometry.width() * deltaWidth / 100);
+ const float moveMargin = outside ? 1.2 : 0.75;
+
+ switch (screenPosition) {
+ case ScreenPosition::OffLeft:
+ restoredGeometry.setLeft(restoredGeometry.width() * (-moveMargin));
+ break;
+ case ScreenPosition::OffAbove:
+ restoredGeometry.setTop(restoredGeometry.height() * (-moveMargin));
+ break;
+ case ScreenPosition::OffRight:
+ restoredGeometry.setRight(restoredGeometry.width() * moveMargin);
+ break;
+ case ScreenPosition::OffBelow:
+ restoredGeometry.setBottom(restoredGeometry.height() * moveMargin);
+ break;
+ case ScreenPosition::Contained:
+ break;
+ }
+
+ // If restored geometry fits into screen and has not been moved,
+ // it is changed only by frame margin plus one pixel at each edge
+ const QRect originalGeometry = restoredGeometry.adjusted(1, frameMargin + 1, 1, frameMargin + 1);
+
+ QWidgetPrivate::checkRestoredGeometry(screenGeometry, &restoredGeometry, frameMargin);
+
+ if (deltaHeight < 100 && deltaWidth < 100 && screenPosition == ScreenPosition::Contained)
+ QCOMPARE(originalGeometry, restoredGeometry);
+
+ // new geometry has to fit on the screen
+ QVERIFY(screenGeometry.contains(restoredGeometry));
+}
+
void tst_QWidget::widgetAt()
{
#ifdef Q_OS_MACOS
@@ -4231,7 +4876,8 @@ void tst_QWidget::testDeletionInEventHandlers()
w = new Widget;
w->show();
w->deleteThis = true;
- QMouseEvent me(QEvent::MouseButtonRelease, QPoint(1, 1), Qt::LeftButton, Qt::LeftButton, Qt::KeyboardModifiers());
+ QMouseEvent me(QEvent::MouseButtonRelease, QPoint(1, 1), w->mapToGlobal(QPoint(1, 1)),
+ Qt::LeftButton, Qt::LeftButton, Qt::KeyboardModifiers());
qApp->notify(w, &me);
QVERIFY(w.isNull());
delete w;
@@ -4270,7 +4916,8 @@ void tst_QWidget::testDeletionInEventHandlers()
w->setMouseTracking(true);
w->show();
w->deleteThis = true;
- QMouseEvent me2 = QMouseEvent(QEvent::MouseMove, QPoint(0, 0), Qt::NoButton, Qt::NoButton, Qt::NoModifier);
+ QMouseEvent me2 = QMouseEvent(QEvent::MouseMove, QPoint(0, 0), w->mapToGlobal(QPoint(0, 0)),
+ Qt::NoButton, Qt::NoButton, Qt::NoModifier);
QApplication::sendEvent(w, &me2);
QVERIFY(w.isNull());
delete w;
@@ -4336,22 +4983,20 @@ class StaticWidget : public QWidget
Q_OBJECT
public:
bool partial = false;
- bool gotPaintEvent = false;
QRegion paintedRegion;
- explicit StaticWidget(QWidget *parent = nullptr) : QWidget(parent)
+ explicit StaticWidget(const QPalette &palette, QWidget *parent = nullptr) : QWidget(parent)
{
setAttribute(Qt::WA_StaticContents);
setAttribute(Qt::WA_OpaquePaintEvent);
- setPalette(Qt::red); // Make sure we have an opaque palette.
+ setPalette(palette);
setAutoFillBackground(true);
}
void paintEvent(QPaintEvent *e) override
{
paintedRegion += e->region();
- gotPaintEvent = true;
-// qDebug() << "paint" << e->region();
+ ++paintEvents;
// Look for a full update, set partial to false if found.
for (QRect r : e->region()) {
partial = (r != rect());
@@ -4359,107 +5004,114 @@ public:
break;
}
}
+
+ // Wait timeout ms until at least one paint event has been consumed
+ // and the counter is no longer increasing.
+ // => making sure to consume multiple paint events relating to one operation
+ // before returning true.
+ bool waitForPaintEvent(int timeout = 100)
+ {
+ QDeadlineTimer deadline(timeout);
+ int count = -1;
+ while (!deadline.hasExpired() && count != paintEvents) {
+ count = paintEvents;
+ QCoreApplication::processEvents();
+ if (count == paintEvents && count > 0) {
+ paintEvents = 0;
+ return true;
+ }
+ }
+ paintEvents = 0;
+ return false;
+ }
+private:
+ int paintEvents = 0;
};
/*
Test that widget resizes and moves can be done with minimal repaints when WA_StaticContents
- and WA_OpaquePaintEvent is set. Test is mac-only for now.
+ and WA_OpaquePaintEvent is set.
*/
void tst_QWidget::optimizedResizeMove()
{
- if (m_platform == QStringLiteral("wayland"))
- QSKIP("Wayland: This fails. Figure out why.");
+ const bool wayland = QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive);
+
QWidget parent;
- parent.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
+ parent.setPalette(simplePalette());
+ parent.setWindowTitle(QTest::currentTestFunction());
parent.resize(400, 400);
- StaticWidget staticWidget(&parent);
- staticWidget.gotPaintEvent = false;
+ StaticWidget staticWidget(simplePalette(), &parent);
staticWidget.move(150, 150);
staticWidget.resize(150, 150);
parent.show();
QVERIFY(QTest::qWaitForWindowExposed(&parent));
- QTRY_VERIFY(staticWidget.gotPaintEvent);
+ QVERIFY(staticWidget.waitForPaintEvent());
- staticWidget.gotPaintEvent = false;
staticWidget.move(staticWidget.pos() + QPoint(10, 10));
- QTest::qWait(20);
- QCOMPARE(staticWidget.gotPaintEvent, false);
+ if (!wayland) {
+ QVERIFY(!staticWidget.waitForPaintEvent());
+ } else {
+ if (staticWidget.waitForPaintEvent())
+ QSKIP("Wayland is not optimising paint events. Skipping test.");
+ }
- staticWidget.gotPaintEvent = false;
staticWidget.move(staticWidget.pos() + QPoint(-10, -10));
- QTest::qWait(20);
- QCOMPARE(staticWidget.gotPaintEvent, false);
+ QVERIFY(!staticWidget.waitForPaintEvent());
- staticWidget.gotPaintEvent = false;
staticWidget.move(staticWidget.pos() + QPoint(-10, 10));
- QTest::qWait(20);
- QCOMPARE(staticWidget.gotPaintEvent, false);
+ QVERIFY(!staticWidget.waitForPaintEvent());
- staticWidget.gotPaintEvent = false;
staticWidget.resize(staticWidget.size() + QSize(10, 10));
- QTRY_VERIFY(staticWidget.gotPaintEvent);
+ QVERIFY(staticWidget.waitForPaintEvent());
QCOMPARE(staticWidget.partial, true);
- staticWidget.gotPaintEvent = false;
staticWidget.resize(staticWidget.size() + QSize(-10, -10));
- QTest::qWait(20);
- QCOMPARE(staticWidget.gotPaintEvent, false);
+ QVERIFY(!staticWidget.waitForPaintEvent());
- staticWidget.gotPaintEvent = false;
staticWidget.resize(staticWidget.size() + QSize(10, -10));
- QTRY_VERIFY(staticWidget.gotPaintEvent);
+ QVERIFY(staticWidget.waitForPaintEvent());
QCOMPARE(staticWidget.partial, true);
- staticWidget.gotPaintEvent = false;
staticWidget.move(staticWidget.pos() + QPoint(10, 10));
staticWidget.resize(staticWidget.size() + QSize(-10, -10));
- QTest::qWait(20);
- QCOMPARE(staticWidget.gotPaintEvent, false);
+ QVERIFY(!staticWidget.waitForPaintEvent());
- staticWidget.gotPaintEvent = false;
staticWidget.move(staticWidget.pos() + QPoint(10, 10));
staticWidget.resize(staticWidget.size() + QSize(10, 10));
- QTRY_VERIFY(staticWidget.gotPaintEvent);
+ QVERIFY(staticWidget.waitForPaintEvent());
QCOMPARE(staticWidget.partial, true);
- staticWidget.gotPaintEvent = false;
staticWidget.move(staticWidget.pos() + QPoint(-10, -10));
staticWidget.resize(staticWidget.size() + QSize(-10, -10));
- QTest::qWait(20);
- QCOMPARE(staticWidget.gotPaintEvent, false);
+ QVERIFY(!staticWidget.waitForPaintEvent());
staticWidget.setAttribute(Qt::WA_StaticContents, false);
- staticWidget.gotPaintEvent = false;
staticWidget.move(staticWidget.pos() + QPoint(-10, -10));
staticWidget.resize(staticWidget.size() + QSize(-10, -10));
- QTRY_VERIFY(staticWidget.gotPaintEvent);
+ QVERIFY(staticWidget.waitForPaintEvent());
QCOMPARE(staticWidget.partial, false);
staticWidget.setAttribute(Qt::WA_StaticContents, true);
staticWidget.setAttribute(Qt::WA_StaticContents, false);
- staticWidget.gotPaintEvent = false;
staticWidget.move(staticWidget.pos() + QPoint(10, 10));
- QTest::qWait(20);
- QCOMPARE(staticWidget.gotPaintEvent, false);
+ QVERIFY(!staticWidget.waitForPaintEvent());
staticWidget.setAttribute(Qt::WA_StaticContents, true);
}
void tst_QWidget::optimizedResize_topLevel()
{
- if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
- QSKIP("Wayland: This fails. Figure out why.");
+ const bool wayland = QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive);
if (QHighDpiScaling::isActive())
QSKIP("Skip due to rounding errors in the regions.");
- StaticWidget topLevel;
+ StaticWidget topLevel(simplePalette());
+ topLevel.setPalette(simplePalette());
topLevel.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
- topLevel.gotPaintEvent = false;
topLevel.show();
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
- QTRY_VERIFY(topLevel.gotPaintEvent);
+ QVERIFY(topLevel.waitForPaintEvent());
- topLevel.gotPaintEvent = false;
topLevel.partial = false;
topLevel.paintedRegion = QRegion();
@@ -4484,10 +5136,15 @@ void tst_QWidget::optimizedResize_topLevel()
QRegion expectedUpdateRegion(topLevel.rect());
expectedUpdateRegion -= QRect(QPoint(), topLevel.size() - QSize(10, 10));
- QTRY_VERIFY(topLevel.gotPaintEvent);
+ QVERIFY(topLevel.waitForPaintEvent());
if (m_platform == QStringLiteral("xcb") || m_platform == QStringLiteral("offscreen"))
QSKIP("QTBUG-26424");
- QCOMPARE(topLevel.partial, true);
+ if (!wayland) {
+ QCOMPARE(topLevel.partial, true);
+ } else {
+ if (!topLevel.partial)
+ QSKIP("Wayland does repaint partially. Skipping test.");
+ }
QCOMPARE(topLevel.paintedRegion, expectedUpdateRegion);
}
@@ -4657,7 +5314,7 @@ protected:
}
public:
QList<WId> m_winIdList;
- int winIdChangeEventCount() const { return m_winIdList.count(); }
+ int winIdChangeEventCount() const { return m_winIdList.size(); }
};
class CreateDestroyWidget : public WinIdChangeWidget
@@ -4712,6 +5369,84 @@ void tst_QWidget::createAndDestroy()
QVERIFY(widget.internalWinId());
}
+void tst_QWidget::eventsAndAttributesOnDestroy()
+{
+ // The events and attributes when destroying a widget should
+ // include those of hiding the widget.
+
+ CreateDestroyWidget widget;
+ EventSpy<QWidget> showEventSpy(&widget, QEvent::Show);
+ EventSpy<QWidget> hideEventSpy(&widget, QEvent::Hide);
+
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Created), false);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(widget.testAttribute(Qt::WA_Mapped), false);
+
+ widget.show();
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Created), true);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Visible), true);
+ QTRY_COMPARE(widget.testAttribute(Qt::WA_Mapped), true);
+ QCOMPARE(showEventSpy.count(), 1);
+ QCOMPARE(hideEventSpy.count(), 0);
+
+ widget.hide();
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Created), true);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(widget.testAttribute(Qt::WA_Mapped), false);
+ QCOMPARE(showEventSpy.count(), 1);
+ QCOMPARE(hideEventSpy.count(), 1);
+
+ widget.show();
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Created), true);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Visible), true);
+ QTRY_COMPARE(widget.testAttribute(Qt::WA_Mapped), true);
+ QCOMPARE(showEventSpy.count(), 2);
+ QCOMPARE(hideEventSpy.count(), 1);
+
+ widget.destroy();
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Created), false);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(widget.testAttribute(Qt::WA_Mapped), false);
+ QCOMPARE(showEventSpy.count(), 2);
+ QCOMPARE(hideEventSpy.count(), 2);
+
+ const int hideEventsAfterDestroy = hideEventSpy.count();
+
+ widget.create();
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Created), true);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(widget.testAttribute(Qt::WA_Mapped), false);
+ QCOMPARE(showEventSpy.count(), 2);
+ QCOMPARE(hideEventSpy.count(), hideEventsAfterDestroy);
+
+ QWidgetPrivate::get(&widget)->setVisible(true);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Created), true);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Visible), true);
+ QTRY_COMPARE(widget.testAttribute(Qt::WA_Mapped), true);
+ QCOMPARE(showEventSpy.count(), 3);
+ QCOMPARE(hideEventSpy.count(), hideEventsAfterDestroy);
+
+ // Make sure the destroy that happens when a top level
+ // is moved to being a child does not prevent the child
+ // being shown again.
+
+ QWidget parent;
+ QWidget child;
+ parent.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&parent));
+ child.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&child));
+
+ child.setParent(&parent);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Created), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Visible), false);
+
+ child.show();
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Created), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Visible), true);
+ QVERIFY(QTest::qWaitForWindowExposed(&child));
+}
+
void tst_QWidget::winIdChangeEvent()
{
{
@@ -4879,24 +5614,29 @@ void tst_QWidget::closeAndShowWithNativeChild()
QApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
QWidget topLevel;
+ topLevel.setObjectName("TopLevel");
QWidget *nativeChild = new QWidget;
+ nativeChild->setObjectName("NativeChild");
nativeChild->setFixedSize(200, 200);
- QWidget *nativeHiddenChild = new QWidget;
- nativeHiddenChild->setFixedSize(200, 200);
QWidget *normalChild = new QWidget;
+ normalChild->setObjectName("NormalChild");
normalChild->setFixedSize(200, 200);
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(nativeChild);
- layout->addWidget(nativeHiddenChild);
layout->addWidget(normalChild);
topLevel.setLayout(layout);
- nativeHiddenChild->hide();
+ nativeChild->setAttribute(Qt::WA_NativeWindow);
+
+ QCOMPARE(normalChild->testAttribute(Qt::WA_WState_Hidden), false);
+ QCOMPARE(normalChild->testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+
+ QCOMPARE(nativeChild->testAttribute(Qt::WA_WState_Hidden), false);
+ QCOMPARE(nativeChild->testAttribute(Qt::WA_WState_ExplicitShowHide), false);
topLevel.show();
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
- nativeChild->winId();
const QSize originalSize = topLevel.size();
topLevel.close();
@@ -5064,6 +5804,7 @@ void tst_QWidget::update()
Q_CHECK_PAINTEVENTS
UpdateWidget w;
+ w.setPalette(simplePalette());
w.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
w.resize(100, 100);
centerOnScreen(&w);
@@ -5077,6 +5818,7 @@ void tst_QWidget::update()
w.reset();
UpdateWidget child(&w);
+ child.setPalette(simplePalette());
child.setGeometry(10, 10, 80, 80);
child.show();
@@ -5148,6 +5890,7 @@ void tst_QWidget::update()
// overlapping sibling
UpdateWidget sibling(&w);
+ sibling.setPalette(simplePalette());
child.setGeometry(10, 10, 20, 20);
sibling.setGeometry(15, 15, 20, 20);
sibling.show();
@@ -5227,9 +5970,11 @@ void tst_QWidget::isOpaque()
{
#ifndef Q_OS_MACOS
QWidget w;
+ w.setPalette(simplePalette());
QVERIFY(::isOpaque(&w));
QWidget child(&w);
+ child.setPalette(simplePalette());
QVERIFY(!::isOpaque(&child));
child.setAutoFillBackground(true);
@@ -5311,11 +6056,11 @@ void tst_QWidget::scroll()
const int h = qMin(500, screen->availableGeometry().height() / 2);
UpdateWidget updateWidget;
+ updateWidget.setPalette(simplePalette());
updateWidget.resize(w, h);
updateWidget.reset();
updateWidget.move(m_availableTopLeft);
updateWidget.showNormal();
- QApplication::setActiveWindow(&updateWidget);
QVERIFY(QTest::qWaitForWindowActive(&updateWidget));
QVERIFY(updateWidget.numPaintEvents > 0);
@@ -5429,7 +6174,7 @@ public:
}
QObjectCastChecker(QObjectCastChecker &&other) noexcept
- : m_target(qExchange(other.m_target, nullptr))
+ : m_target(std::exchange(other.m_target, nullptr))
{}
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QObjectCastChecker)
@@ -5503,7 +6248,7 @@ void tst_QWidget::setWindowGeometry_data()
const Qt::WindowFlags windowFlags[] = {Qt::WindowFlags(), Qt::FramelessWindowHint};
const bool skipEmptyRects = (m_platform == QStringLiteral("windows"));
- for (Rects l : qAsConst(rects)) {
+ for (Rects l : std::as_const(rects)) {
if (skipEmptyRects)
l.removeIf([] (const QRect &r) { return r.isEmpty(); });
const QRect &rect = l.constFirst();
@@ -5522,8 +6267,8 @@ void tst_QWidget::setWindowGeometry_data()
void tst_QWidget::setWindowGeometry()
{
- if (m_platform == QStringLiteral("xcb"))
- QSKIP("X11: Skip this test due to Window manager positioning issues.");
+ if (m_platform == QStringLiteral("xcb") || m_platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("X11/Wayland: Skip this test due to Window manager positioning issues.");
QFETCH(Rects, rects);
QFETCH(int, windowFlags);
@@ -5540,7 +6285,7 @@ void tst_QWidget::setWindowGeometry()
QCOMPARE(widget.geometry(), rect);
// setGeometry() without showing
- for (const QRect &r : qAsConst(rects)) {
+ for (const QRect &r : std::as_const(rects)) {
widget.setGeometry(r);
QTest::qWait(100);
QCOMPARE(widget.geometry(), r);
@@ -5566,7 +6311,7 @@ void tst_QWidget::setWindowGeometry()
QTRY_COMPARE(widget.geometry(), rect);
// setGeometry() while shown
- for (const QRect &r : qAsConst(rects)) {
+ for (const QRect &r : std::as_const(rects)) {
widget.setGeometry(r);
QTest::qWait(10);
QTRY_COMPARE(widget.geometry(), r);
@@ -5581,7 +6326,7 @@ void tst_QWidget::setWindowGeometry()
QTRY_COMPARE(widget.geometry(), rect);
// setGeometry() after hide()
- for (const QRect &r : qAsConst(rects)) {
+ for (const QRect &r : std::as_const(rects)) {
widget.setGeometry(r);
QTest::qWait(10);
QTRY_COMPARE(widget.geometry(), r);
@@ -5591,7 +6336,7 @@ void tst_QWidget::setWindowGeometry()
QTRY_COMPARE(widget.geometry(), rect);
// show() again, geometry() should still be the same
- widget.show();
+ QTestPrivate::androidCompatibleShow(&widget);
if (rect.isValid())
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QTRY_COMPARE(widget.geometry(), rect);
@@ -5617,7 +6362,7 @@ void tst_QWidget::setWindowGeometry()
QTRY_COMPARE(widget.geometry(), rect);
// setGeometry() while shown
- for (const QRect &r : qAsConst(rects)) {
+ for (const QRect &r : std::as_const(rects)) {
widget.setGeometry(r);
QTest::qWait(10);
QTRY_COMPARE(widget.geometry(), r);
@@ -5632,7 +6377,7 @@ void tst_QWidget::setWindowGeometry()
QTRY_COMPARE(widget.geometry(), rect);
// setGeometry() after hide()
- for (const QRect &r : qAsConst(rects)) {
+ for (const QRect &r : std::as_const(rects)) {
widget.setGeometry(r);
QTest::qWait(10);
QTRY_COMPARE(widget.geometry(), r);
@@ -5642,7 +6387,7 @@ void tst_QWidget::setWindowGeometry()
QTRY_COMPARE(widget.geometry(), rect);
// show() again, geometry() should still be the same
- widget.show();
+ QTestPrivate::androidCompatibleShow(&widget);
if (rect.isValid())
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QTest::qWait(10);
@@ -5711,7 +6456,7 @@ void tst_QWidget::windowMoveResize()
QTRY_COMPARE(widget.size(), rect.size());
// move() without showing
- for (const QRect &r : qAsConst(rects)) {
+ for (const QRect &r : std::as_const(rects)) {
widget.move(r.topLeft());
widget.resize(r.size());
QApplication::processEvents();
@@ -5741,7 +6486,7 @@ void tst_QWidget::windowMoveResize()
QTRY_COMPARE(widget.size(), rect.size());
// move() while shown
- for (const QRect &r : qAsConst(rects)) {
+ for (const QRect &r : std::as_const(rects)) {
// XCB: First resize after show of zero-sized gets wrong win_gravity.
const bool expectMoveFail = !windowFlags
&& ((widget.width() == 0 || widget.height() == 0) && r.width() != 0 && r.height() != 0)
@@ -5770,7 +6515,7 @@ void tst_QWidget::windowMoveResize()
QTRY_COMPARE(widget.size(), rect.size());
// move() after hide()
- for (const QRect &r : qAsConst(rects)) {
+ for (const QRect &r : std::as_const(rects)) {
widget.move(r.topLeft());
widget.resize(r.size());
QApplication::processEvents();
@@ -5790,7 +6535,7 @@ void tst_QWidget::windowMoveResize()
QTRY_COMPARE(widget.size(), rect.size());
// show() again, pos() should be the same
- widget.show();
+ QTestPrivate::androidCompatibleShow(&widget);
if (rect.isValid())
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QApplication::processEvents();
@@ -5821,7 +6566,7 @@ void tst_QWidget::windowMoveResize()
QTRY_COMPARE(widget.size(), rect.size());
// move() while shown
- for (const QRect &r : qAsConst(rects)) {
+ for (const QRect &r : std::as_const(rects)) {
widget.move(r.topLeft());
widget.resize(r.size());
QApplication::processEvents();
@@ -5841,7 +6586,7 @@ void tst_QWidget::windowMoveResize()
QTRY_COMPARE(widget.size(), rect.size());
// move() after hide()
- for (const QRect &r : qAsConst(rects)) {
+ for (const QRect &r : std::as_const(rects)) {
widget.move(r.topLeft());
widget.resize(r.size());
QApplication::processEvents();
@@ -5861,7 +6606,7 @@ void tst_QWidget::windowMoveResize()
QTRY_COMPARE(widget.size(), rect.size());
// show() again, pos() should be the same
- widget.show();
+ QTestPrivate::androidCompatibleShow(&widget);
if (rect.isValid())
QVERIFY(QTest::qWaitForWindowExposed(&widget));
QTest::qWait(10);
@@ -6048,6 +6793,9 @@ void tst_QWidget::moveChild()
void tst_QWidget::showAndMoveChild()
{
+#ifdef ANDROID
+ QSKIP("Fails on Android due to removed grabWindow(): QTBUG-118849");
+#endif
if (m_platform == QStringLiteral("wayland"))
QSKIP("Wayland: This fails. Figure out why.");
QWidget parent(nullptr, Qt::Window | Qt::WindowStaysOnTopHint);
@@ -6065,7 +6813,6 @@ void tst_QWidget::showAndMoveChild()
parent.setGeometry(desktopDimensions);
parent.setPalette(Qt::red);
parent.show();
- QApplication::setActiveWindow(&parent);
QVERIFY(QTest::qWaitForWindowActive(&parent));
QWidget child(&parent);
@@ -6184,17 +6931,17 @@ void tst_QWidget::multipleToplevelFocusCheck()
w2.show();
QVERIFY(QTest::qWaitForWindowExposed(&w2));
- QApplication::setActiveWindow(&w1);
w1.activateWindow();
+ QApplicationPrivate::setActiveWindow(&w1);
QVERIFY(QTest::qWaitForWindowActive(&w1));
- QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w1));
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w1));
QTest::mouseDClick(&w1, Qt::LeftButton);
QTRY_COMPARE(QApplication::focusWidget(), static_cast<QWidget *>(w1.edit));
w2.activateWindow();
- QApplication::setActiveWindow(&w2);
+ QApplicationPrivate::setActiveWindow(&w2);
QVERIFY(QTest::qWaitForWindowActive(&w2));
- QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w2));
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w2));
QTest::mouseClick(&w2, Qt::LeftButton);
QTRY_COMPARE(QApplication::focusWidget(), nullptr);
@@ -6202,16 +6949,16 @@ void tst_QWidget::multipleToplevelFocusCheck()
QTRY_COMPARE(QApplication::focusWidget(), static_cast<QWidget *>(w2.edit));
w1.activateWindow();
- QApplication::setActiveWindow(&w1);
+ QApplicationPrivate::setActiveWindow(&w1);
QVERIFY(QTest::qWaitForWindowActive(&w1));
- QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w1));
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w1));
QTest::mouseDClick(&w1, Qt::LeftButton);
QTRY_COMPARE(QApplication::focusWidget(), static_cast<QWidget *>(w1.edit));
w2.activateWindow();
- QApplication::setActiveWindow(&w2);
+ QApplicationPrivate::setActiveWindow(&w2);
QVERIFY(QTest::qWaitForWindowActive(&w2));
- QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w2));
+ QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&w2));
QTest::mouseClick(&w2, Qt::LeftButton);
QTRY_COMPARE(QApplication::focusWidget(), nullptr);
}
@@ -6274,7 +7021,7 @@ void tst_QWidget::setFocus()
{
// move focus to another window
testWidget->activateWindow();
- QApplication::setActiveWindow(testWidget.data());
+ QApplicationPrivate::setActiveWindow(testWidget.data());
if (testWidget->focusWidget())
testWidget->focusWidget()->clearFocus();
else
@@ -6320,7 +7067,7 @@ void tst_QWidget::setFocus()
// note: window may be active, but we don't want it to be
testWidget->activateWindow();
- QApplication::setActiveWindow(testWidget.data());
+ QApplicationPrivate::setActiveWindow(testWidget.data());
if (testWidget->focusWidget())
testWidget->focusWidget()->clearFocus();
else
@@ -6496,34 +7243,6 @@ void tst_QWidget::setFocus()
}
}
-template<class T> class EventSpy : public QObject
-{
-public:
- EventSpy(T *widget, QEvent::Type event)
- : m_widget(widget), eventToSpy(event)
- {
- if (m_widget)
- m_widget->installEventFilter(this);
- }
-
- T *widget() const { return m_widget; }
- int count() const { return m_count; }
- void clear() { m_count = 0; }
-
-protected:
- bool eventFilter(QObject *object, QEvent *event) override
- {
- if (event->type() == eventToSpy)
- ++m_count;
- return QObject::eventFilter(object, event);
- }
-
-private:
- T *m_widget;
- const QEvent::Type eventToSpy;
- int m_count = 0;
-};
-
#ifndef QT_NO_CURSOR
void tst_QWidget::setCursor()
{
@@ -6727,7 +7446,7 @@ void tst_QWidget::testWindowIconChangeEventPropagation()
QWidgetList widgets;
widgets << &topLevelWidget << &topLevelChild
<< &dialog << &dialogChild;
- QCOMPARE(widgets.count(), 4);
+ QCOMPARE(widgets.size(), 4);
topLevelWidget.show();
dialog.show();
@@ -6741,13 +7460,13 @@ void tst_QWidget::testWindowIconChangeEventPropagation()
// Create spy lists.
QList <EventSpyPtr> applicationEventSpies;
QList <EventSpyPtr> widgetEventSpies;
- for (QWidget *widget : qAsConst(widgets)) {
+ for (QWidget *widget : std::as_const(widgets)) {
applicationEventSpies.append(EventSpyPtr::create(widget, QEvent::ApplicationWindowIconChange));
widgetEventSpies.append(EventSpyPtr::create(widget, QEvent::WindowIconChange));
}
QList <WindowEventSpyPtr> appWindowEventSpies;
QList <WindowEventSpyPtr> windowEventSpies;
- for (QWindow *window : qAsConst(windows)) {
+ for (QWindow *window : std::as_const(windows)) {
appWindowEventSpies.append(WindowEventSpyPtr::create(window, QEvent::ApplicationWindowIconChange));
windowEventSpies.append(WindowEventSpyPtr::create(window, QEvent::WindowIconChange));
}
@@ -6756,7 +7475,7 @@ void tst_QWidget::testWindowIconChangeEventPropagation()
const QIcon windowIcon = qApp->style()->standardIcon(QStyle::SP_TitleBarMenuButton);
qApp->setWindowIcon(windowIcon);
- for (int i = 0; i < widgets.count(); ++i) {
+ for (int i = 0; i < widgets.size(); ++i) {
// Check QEvent::ApplicationWindowIconChange
EventSpyPtr spy = applicationEventSpies.at(i);
QWidget *widget = spy->widget();
@@ -6773,7 +7492,7 @@ void tst_QWidget::testWindowIconChangeEventPropagation()
QCOMPARE(spy->count(), 1);
spy->clear();
}
- for (int i = 0; i < windows.count(); ++i) {
+ for (int i = 0; i < windows.size(); ++i) {
// Check QEvent::ApplicationWindowIconChange (sent to QWindow)
// QWidgetWindows don't get this event, since the widget takes care of changing the icon
WindowEventSpyPtr spy = appWindowEventSpies.at(i);
@@ -6791,7 +7510,7 @@ void tst_QWidget::testWindowIconChangeEventPropagation()
// Set icon on a top-level widget.
topLevelWidget.setWindowIcon(QIcon());
- for (int i = 0; i < widgets.count(); ++i) {
+ for (int i = 0; i < widgets.size(); ++i) {
// Check QEvent::ApplicationWindowIconChange
EventSpyPtr spy = applicationEventSpies.at(i);
QCOMPARE(spy->count(), 0);
@@ -6948,7 +7667,7 @@ void tst_QWidget::clean_qt_x11_enforce_cursor()
child->setAttribute(Qt::WA_SetCursor, true);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
QTest::qWait(100);
QCursor::setPos(window.geometry().center());
@@ -7083,7 +7802,9 @@ void tst_QWidget::childEvents()
<< qMakePair(&widget, QEvent::Move)
<< qMakePair(&widget, QEvent::Resize)
<< qMakePair(&widget, QEvent::Show)
+#ifndef Q_OS_ANDROID
<< qMakePair(&widget, QEvent::CursorChange)
+#endif
<< qMakePair(&widget, QEvent::ShowToParent);
QVERIFY2(spy.eventList() == expected,
@@ -7172,7 +7893,9 @@ void tst_QWidget::childEvents()
<< qMakePair(&widget, QEvent::Move)
<< qMakePair(&widget, QEvent::Resize)
<< qMakePair(&widget, QEvent::Show)
+#ifndef Q_OS_ANDROID
<< qMakePair(&widget, QEvent::CursorChange)
+#endif
<< qMakePair(&widget, QEvent::ShowToParent);
QVERIFY2(spy.eventList() == expected,
@@ -7264,7 +7987,9 @@ void tst_QWidget::childEvents()
<< qMakePair(&widget, QEvent::Move)
<< qMakePair(&widget, QEvent::Resize)
<< qMakePair(&widget, QEvent::Show)
+#ifndef Q_OS_ANDROID
<< qMakePair(&widget, QEvent::CursorChange)
+#endif
<< qMakePair(&widget, QEvent::ShowToParent);
QVERIFY2(spy.eventList() == expected,
@@ -7319,6 +8044,9 @@ private:
void tst_QWidget::render()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("QTBUG-118984: crashes on Android.");
+#endif
QCalendarWidget source;
source.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
// disable anti-aliasing to eliminate potential differences when subpixel antialiasing
@@ -7372,7 +8100,12 @@ void tst_QWidget::renderChildFillsBackground()
QCoreApplication::processEvents();
const QPixmap childPixmap = child.grab(QRect(QPoint(0, 0), QSize(-1, -1)));
const QPixmap windowPixmap = window.grab(QRect(QPoint(0, 0), QSize(-1, -1)));
- QEXPECT_FAIL("", "This test fails on all platforms", Continue);
+#ifndef Q_OS_ANDROID
+ // On Android all widgets are shown maximized, so the pixmaps
+ // will be similar
+ if (!m_platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QEXPECT_FAIL("", "This test fails on all platforms", Continue);
+#endif
QCOMPARE(childPixmap, windowPixmap);
}
@@ -7406,15 +8139,12 @@ void tst_QWidget::renderTargetOffset()
QCOMPARE(image.pixel(120, 120), QColor(Qt::blue).rgb());
}
-// On Windows the active palette is used instead of the inactive palette even
-// though the widget is invisible. This is probably related to task 178507/168682,
-// but for the renderInvisible test it doesn't matter, we're mostly interested
-// in testing the geometry so just workaround the palette issue for now.
+// On some platforms the active palette is used instead of the inactive palette even
+// though the widget is invisible, but for the renderInvisible test it doesn't matter,
+// as we're mostly interested in testing the geometry, so just workaround the palette
+// issue for now.
static void workaroundPaletteIssue(QWidget *widget)
{
-#ifndef Q_OS_WIN
- return;
-#endif
if (!widget)
return;
@@ -7435,6 +8165,9 @@ void tst_QWidget::renderInvisible()
if (m_platform == QStringLiteral("xcb"))
QSKIP("QTBUG-26424");
+ if (m_platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Wayland: Skip this test, see also QTBUG-107157");
+
QScopedPointer<QCalendarWidget> calendar(new QCalendarWidget);
calendar->move(m_availableTopLeft + QPoint(100, 100));
calendar->setWindowTitle(QLatin1String(QTest::currentTestFunction()));
@@ -7455,7 +8188,7 @@ void tst_QWidget::renderInvisible()
// Create normal reference image.
const QSize calendarSize = calendar->size();
- QImage referenceImage(calendarSize, QImage::Format_ARGB32);
+ QImage referenceImage(calendarSize, QImage::Format_ARGB32_Premultiplied);
calendar->render(&referenceImage);
#ifdef RENDER_DEBUG
referenceImage.save("referenceImage.png");
@@ -7466,7 +8199,7 @@ void tst_QWidget::renderInvisible()
const QSize calendarSizeResized = calendar->size() + QSize(50, 50);
calendar->resize(calendarSizeResized);
QTest::qWait(30);
- QImage referenceImageResized(calendarSizeResized, QImage::Format_ARGB32);
+ QImage referenceImageResized(calendarSizeResized, QImage::Format_ARGB32_Premultiplied);
calendar->render(&referenceImageResized);
#ifdef RENDER_DEBUG
referenceImageResized.save("referenceImageResized.png");
@@ -7479,7 +8212,7 @@ void tst_QWidget::renderInvisible()
workaroundPaletteIssue(calendar.data());
{ // Make sure we get the same image when the calendar is explicitly hidden.
- QImage testImage(calendarSizeResized, QImage::Format_ARGB32);
+ QImage testImage(calendarSizeResized, QImage::Format_ARGB32_Premultiplied);
calendar->render(&testImage);
#ifdef RENDER_DEBUG
testImage.save("explicitlyHiddenCalendarResized.png");
@@ -7495,7 +8228,7 @@ void tst_QWidget::renderInvisible()
workaroundPaletteIssue(calendar.data());
{ // Never been visible, created or laid out.
- QImage testImage(calendarSize, QImage::Format_ARGB32);
+ QImage testImage(calendarSize, QImage::Format_ARGB32_Premultiplied);
calendar->render(&testImage);
#ifdef RENDER_DEBUG
testImage.save("neverBeenVisibleCreatedOrLaidOut.png");
@@ -7507,7 +8240,7 @@ void tst_QWidget::renderInvisible()
QTest::qWait(30);
{ // Calendar explicitly hidden.
- QImage testImage(calendarSize, QImage::Format_ARGB32);
+ QImage testImage(calendarSize, QImage::Format_ARGB32_Premultiplied);
calendar->render(&testImage);
#ifdef RENDER_DEBUG
testImage.save("explicitlyHiddenCalendar.png");
@@ -7521,7 +8254,7 @@ void tst_QWidget::renderInvisible()
navigationBar->hide();
{ // Check that the navigation bar isn't drawn when rendering the entire calendar.
- QImage testImage(calendarSize, QImage::Format_ARGB32);
+ QImage testImage(calendarSize, QImage::Format_ARGB32_Premultiplied);
calendar->render(&testImage);
#ifdef RENDER_DEBUG
testImage.save("calendarWithoutNavigationBar.png");
@@ -7530,7 +8263,7 @@ void tst_QWidget::renderInvisible()
}
{ // Make sure the navigation bar renders correctly even though it's hidden.
- QImage testImage(navigationBar->size(), QImage::Format_ARGB32);
+ QImage testImage(navigationBar->size(), QImage::Format_ARGB32_Premultiplied);
navigationBar->render(&testImage);
#ifdef RENDER_DEBUG
testImage.save("explicitlyHiddenNavigationBar.png");
@@ -7544,7 +8277,7 @@ void tst_QWidget::renderInvisible()
{ // Render next month button.
// Fill test image with correct background color.
- QImage testImage(nextMonthButton->size(), QImage::Format_ARGB32);
+ QImage testImage(nextMonthButton->size(), QImage::Format_ARGB32_Premultiplied);
navigationBar->render(&testImage, QPoint(), QRegion(), QWidget::RenderFlags());
#ifdef RENDER_DEBUG
testImage.save("nextMonthButtonBackground.png");
@@ -7582,7 +8315,7 @@ void tst_QWidget::renderInvisible()
QCoreApplication::processEvents();
{ // Make sure we get an image equal to the resized reference image.
- QImage testImage(calendarSizeResized, QImage::Format_ARGB32);
+ QImage testImage(calendarSizeResized, QImage::Format_ARGB32_Premultiplied);
calendar->render(&testImage);
#ifdef RENDER_DEBUG
testImage.save("calendarResized.png");
@@ -7594,7 +8327,7 @@ void tst_QWidget::renderInvisible()
QCalendarWidget calendar;
const QSize calendarSize = calendar.sizeHint();
- QImage image(2 * calendarSize, QImage::Format_ARGB32);
+ QImage image(2 * calendarSize, QImage::Format_ARGB32_Premultiplied);
image.fill(QColor(Qt::red).rgb());
calendar.render(&image);
@@ -8398,6 +9131,7 @@ void tst_QWidget::updateWhileMinimized()
QSKIP("Platform does not support showMinimized()");
#endif
UpdateWidget widget;
+ widget.setPalette(simplePalette());
widget.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
// Filter out activation change and focus events to avoid update() calls in QWidget.
widget.updateOnActivationChangeAndFocusIn = false;
@@ -8971,6 +9705,7 @@ void tst_QWidget::doubleRepaint()
QSKIP("Not having window server access causes the wrong number of repaints to be issues");
#endif
UpdateWidget widget;
+ widget.setPalette(simplePalette());
widget.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
centerOnScreen(&widget);
widget.setFocusPolicy(Qt::StrongFocus);
@@ -8987,9 +9722,6 @@ void tst_QWidget::doubleRepaint()
// Minmize: Should not trigger a repaint.
widget.showMinimized();
QTest::qWait(10);
-#if defined(Q_OS_QNX)
- QEXPECT_FAIL("", "Platform does not support showMinimized()", Continue);
-#endif
QCOMPARE(widget.numPaintEvents, 0);
widget.numPaintEvents = 0;
@@ -9005,9 +9737,10 @@ void tst_QWidget::resizeInPaintEvent()
QWidget window;
window.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
UpdateWidget widget(&window);
+ widget.setPalette(simplePalette());
window.resize(200, 200);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowExposed(&window));
QTRY_VERIFY(widget.numPaintEvents > 0);
@@ -9061,6 +9794,47 @@ void tst_QWidget::opaqueChildren()
QCOMPARE(qt_widget_private(&grandChild)->getOpaqueChildren(), QRegion());
}
+void tst_QWidget::dumpObjectTree()
+{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
+ QWidget w;
+ w.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
+ Q_SET_OBJECT_NAME(w);
+ w.move(100, 100);
+ w.resize(200, 200);
+
+ QLineEdit le(&w);
+ Q_SET_OBJECT_NAME(le);
+ le.resize(200, 200);
+
+ {
+ const char * const expected[] = {
+ "QWidget::w I",
+ " QLineEdit::le I",
+ " QWidgetLineControl:: ",
+ };
+ for (const char *line : expected)
+ QTest::ignoreMessage(QtDebugMsg, line);
+ w.dumpObjectTree();
+ }
+
+ QTestPrivate::androidCompatibleShow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
+ QVERIFY(QTest::qWaitForWindowActive(&w));
+
+ {
+ const char * const expected[] = {
+ "QWidget::w <200x200+100+100>",
+ " QLineEdit::le F<200x200+0+0>",
+ " QWidgetLineControl:: ",
+ };
+ for (const char *line : expected)
+ QTest::ignoreMessage(QtDebugMsg, line);
+ w.dumpObjectTree();
+ }
+}
class MaskSetWidget : public QWidget
{
@@ -9095,6 +9869,7 @@ public slots:
void tst_QWidget::setMaskInResizeEvent()
{
UpdateWidget w;
+ w.setPalette(simplePalette());
w.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
w.reset();
w.resize(200, 200);
@@ -9174,6 +9949,7 @@ void tst_QWidget::immediateRepaintAfterInvalidateBackingStore()
QSKIP("We don't support immediate repaint right after show on other platforms.");
QScopedPointer<UpdateWidget> widget(new UpdateWidget);
+ widget->setPalette(simplePalette());
widget->setWindowTitle(QLatin1String(QTest::currentTestFunction()));
centerOnScreen(widget.data());
widget->show();
@@ -9567,6 +10343,10 @@ void tst_QWidget::translucentWidget()
const QImage actual = widgetSnapshot.toImage().convertToFormat(QImage::Format_RGB32);
QImage expected = pm.toImage().scaled(label.devicePixelRatio() * pm.size());
expected.setDevicePixelRatio(label.devicePixelRatio());
+#ifdef Q_OS_ANDROID
+ // Android uses Format_ARGB32_Premultiplied by default
+ expected = expected.convertToFormat(QImage::Format_RGB32);
+#endif
QCOMPARE(actual.size(),expected.size());
QCOMPARE(actual,expected);
@@ -9621,11 +10401,12 @@ void tst_QWidget::setClearAndResizeMask()
QSKIP("Wayland: This fails. Figure out why.");
UpdateWidget topLevel;
+ topLevel.setPalette(simplePalette());
topLevel.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
topLevel.resize(160, 160);
centerOnScreen(&topLevel);
topLevel.show();
- QApplication::setActiveWindow(&topLevel);
+ QApplicationPrivate::setActiveWindow(&topLevel);
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
QTRY_VERIFY(topLevel.numPaintEvents > 0);
topLevel.reset();
@@ -9655,6 +10436,7 @@ void tst_QWidget::setClearAndResizeMask()
}
UpdateWidget child(&topLevel);
+ child.setPalette(simplePalette());
child.setAutoFillBackground(true); // NB! Opaque child.
child.setPalette(Qt::red);
child.resize(100, 100);
@@ -10048,6 +10830,9 @@ void tst_QWidget::enterLeaveOnWindowShowHide_data()
*/
void tst_QWidget::enterLeaveOnWindowShowHide()
{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
QFETCH(Qt::WindowType, windowType);
class Widget : public QWidget
{
@@ -10099,6 +10884,8 @@ void tst_QWidget::enterLeaveOnWindowShowHide()
secondary->show();
if (!QTest::qWaitForWindowExposed(secondary))
QEXPECT_FAIL("", "Secondary window failed to show, test will fail", Abort);
+ if (secondaryWindowType == Qt::Dialog && QGuiApplication::platformName() == "windows")
+ QTest::qWait(1000); // on Windows, we have to wait for fade-in effects
}
};
@@ -10115,25 +10902,26 @@ void tst_QWidget::enterLeaveOnWindowShowHide()
if (!QTest::qWaitFor([&]{ return widget.geometry().contains(QCursor::pos()); }))
QSKIP("We can't move the cursor");
widget.show();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
QVERIFY(QTest::qWaitForWindowActive(&widget));
++expectedEnter;
- QTRY_COMPARE_WITH_TIMEOUT(widget.numEnterEvents, expectedEnter, 250);
+ QTRY_COMPARE_WITH_TIMEOUT(widget.numEnterEvents, expectedEnter, 1000);
QCOMPARE(widget.enterPosition, widget.mapFromGlobal(cursorPos));
QVERIFY(widget.underMouse());
QTest::mouseClick(&widget, Qt::LeftButton, {}, widget.mapFromGlobal(cursorPos));
++expectedLeave;
- QTRY_COMPARE_WITH_TIMEOUT(widget.numLeaveEvents, expectedLeave, 500);
+ QTRY_COMPARE_WITH_TIMEOUT(widget.numLeaveEvents, expectedLeave, 1000);
QVERIFY(!widget.underMouse());
+ QTRY_VERIFY(QApplication::activeModalWidget() || QApplication::activePopupWidget());
if (QApplication::activeModalWidget())
QApplication::activeModalWidget()->close();
else if (QApplication::activePopupWidget())
QApplication::activePopupWidget()->close();
++expectedEnter;
// Use default timeout, the test is flaky on Windows otherwise.
- QVERIFY(QTest::qWaitFor([&]{ return widget.numEnterEvents >= expectedEnter; }));
+ QTRY_VERIFY(widget.numEnterEvents >= expectedEnter);
// When a modal dialog closes we might get more than one enter event on macOS.
// This seems to depend on timing, so we tolerate that flakiness for now.
if (widget.numEnterEvents > expectedEnter && QGuiApplication::platformName() == "cocoa")
@@ -10215,7 +11003,7 @@ void tst_QWidget::taskQTBUG_4055_sendSyntheticEnterLeave()
QTRY_COMPARE(child.numEnterEvents, 1);
QCOMPARE(child.numMouseMoveEvents, 0);
- // Sending synthetic enter/leave trough the parent's mousePressEvent handler.
+ // Sending synthetic enter/leave through the parent's mousePressEvent handler.
parent.child = &child;
child.hide();
@@ -10244,6 +11032,106 @@ void tst_QWidget::taskQTBUG_4055_sendSyntheticEnterLeave()
QTRY_COMPARE(child.numEnterEvents, 1);
QCOMPARE(child.numMouseMoveEvents, 0);
}
+
+void tst_QWidget::hoverPosition()
+{
+ if (m_platform == QStringLiteral("wayland"))
+ QSKIP("Wayland: Clients can't set cursor position on wayland.");
+
+ class HoverWidget : public QWidget
+ {
+ public:
+ HoverWidget(QWidget *parent = nullptr) : QWidget(parent) {
+ setMouseTracking(true);
+ setAttribute(Qt::WA_Hover);
+ }
+ bool event(QEvent *ev) override {
+ switch (ev->type()) {
+ case QEvent::HoverMove:
+ // The docs say that WA_Hover will cause a paint event on enter and leave, but not on move.
+ update();
+ Q_FALLTHROUGH();
+ case QEvent::HoverEnter:
+ case QEvent::HoverLeave: {
+ qCDebug(lcTests) << ev;
+ lastHoverType = ev->type();
+ ++hoverEventCount;
+ QHoverEvent *hov = static_cast<QHoverEvent *>(ev);
+ mousePos = hov->position().toPoint();
+ mouseScenePos = hov->scenePosition().toPoint();
+ if (ev->type() == QEvent::HoverEnter)
+ mouseEnterScenePos = hov->scenePosition().toPoint();
+ break;
+ }
+ default:
+ break;
+ }
+ return QWidget::event(ev);
+ }
+ void paintEvent(QPaintEvent *) override {
+ ++paintEventCount;
+ QPainter painter(this);
+ if (mousePos.x() > 0)
+ painter.setPen(Qt::red);
+ painter.drawRect(0, 0, width(), height());
+ painter.setPen(Qt::darkGreen);
+ painter.drawLine(mousePos - QPoint(crossHalfWidth, 0), mousePos + QPoint(crossHalfWidth, 0));
+ painter.drawLine(mousePos - QPoint(0, crossHalfWidth), mousePos + QPoint(0, crossHalfWidth));
+ }
+
+ QEvent::Type lastHoverType = QEvent::None;
+ int hoverEventCount = 0;
+ int paintEventCount = 0;
+ QPoint mousePos;
+ QPoint mouseScenePos;
+ QPoint mouseEnterScenePos;
+
+ private:
+ const int crossHalfWidth = 5;
+ };
+
+ QCursor::setPos(m_safeCursorPos);
+ if (!QTest::qWaitFor([this]{ return QCursor::pos() == m_safeCursorPos; }))
+ QSKIP("Can't move cursor");
+
+ QWidget root;
+ root.resize(300, 300);
+ HoverWidget h(&root);
+ h.setGeometry(100, 100, 100, 100);
+ root.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&root));
+
+ const QPoint middle(50, 50);
+ QPoint curpos = h.mapToGlobal(middle);
+ QCursor::setPos(curpos);
+ if (!QTest::qWaitFor([curpos]{ return QCursor::pos() == curpos; }))
+ QSKIP("Can't move cursor");
+ QTRY_COMPARE_GE(h.hoverEventCount, 1); // HoverEnter and then probably HoverMove, so usually 2
+ QTRY_COMPARE_GE(h.paintEventCount, 2);
+ const int enterHoverEventCount = h.hoverEventCount;
+ qCDebug(lcTests) << "hover enter events:" << enterHoverEventCount << "last was" << h.lastHoverType
+ << "; paint events:" << h.paintEventCount;
+ QCOMPARE(h.mousePos, middle);
+ QCOMPARE(h.mouseEnterScenePos, h.mapToParent(middle));
+ QCOMPARE(h.mouseScenePos, h.mapToParent(middle));
+ QCOMPARE(h.lastHoverType, enterHoverEventCount == 1 ? QEvent::HoverEnter : QEvent::HoverMove);
+
+ curpos += {10, 10};
+ QCursor::setPos(curpos);
+ if (!QTest::qWaitFor([curpos]{ return QCursor::pos() == curpos; }))
+ QSKIP("Can't move cursor");
+ QTRY_COMPARE(h.hoverEventCount, enterHoverEventCount + 1);
+ QCOMPARE(h.lastHoverType, QEvent::HoverMove);
+ QTRY_COMPARE_GE(h.paintEventCount, 3);
+
+ curpos += {50, 50}; // in the outer widget, but leaving the inner widget
+ QCursor::setPos(curpos);
+ if (!QTest::qWaitFor([curpos]{ return QCursor::pos() == curpos; }))
+ QSKIP("Can't move cursor");
+ QTRY_COMPARE(h.lastHoverType, QEvent::HoverLeave);
+ QCOMPARE_GE(h.hoverEventCount, enterHoverEventCount + 2);
+ QTRY_COMPARE_GE(h.paintEventCount, 4);
+}
#endif
void tst_QWidget::windowFlags()
@@ -10349,6 +11237,7 @@ void tst_QWidget::focusWidget_task254563()
void tst_QWidget::destroyBackingStore()
{
UpdateWidget w;
+ w.setPalette(simplePalette());
w.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
centerOnScreen(&w);
w.reset();
@@ -10669,6 +11558,9 @@ void tst_QWidget::activateWindow()
void tst_QWidget::openModal_taskQTBUG_5804()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("This test hangs on Android");
+#endif
class Widget : public QWidget
{
public:
@@ -10816,32 +11708,43 @@ void tst_QWidget::focusProxy()
QCOMPARE(container2->focusOutCount, 1);
}
-void tst_QWidget::focusProxyAndInputMethods()
+void tst_QWidget::imEnabledNotImplemented()
{
if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
- QSKIP("Window activation is not supported.");
- QScopedPointer<QWidget> toplevel(new QWidget(nullptr, Qt::X11BypassWindowManagerHint));
- toplevel->setWindowTitle(QLatin1String(QTest::currentTestFunction()));
- toplevel->resize(200, 200);
- toplevel->setAttribute(Qt::WA_InputMethodEnabled, true);
-
- QWidget *child = new QWidget(toplevel.data());
- child->setFocusProxy(toplevel.data());
- child->setAttribute(Qt::WA_InputMethodEnabled, true);
+ QSKIP("QWindow::requestActivate() is not supported.");
- toplevel->setFocusPolicy(Qt::WheelFocus);
- child->setFocusPolicy(Qt::WheelFocus);
-
- QVERIFY(!child->hasFocus());
- QVERIFY(!toplevel->hasFocus());
+ // Check that a plain widget doesn't report that it supports IM. Only
+ // widgets that implements either Qt::ImEnabled, or the Qt4 backup
+ // solution, Qt::ImSurroundingText, should do so.
+ QWidget topLevel;
+ QWidget plain(&topLevel);
+ QLineEdit edit(&topLevel);
+ topLevel.show();
- toplevel->show();
- QVERIFY(QTest::qWaitForWindowExposed(toplevel.data()));
- QApplication::setActiveWindow(toplevel.data());
- QVERIFY(QTest::qWaitForWindowActive(toplevel.data()));
- QVERIFY(toplevel->hasFocus());
- QVERIFY(child->hasFocus());
- QCOMPARE(qApp->focusObject(), toplevel.data());
+ QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+ QApplicationPrivate::setActiveWindow(&topLevel);
+ QVERIFY(QTest::qWaitForWindowActive(&topLevel));
+
+ // A plain widget should return false for ImEnabled
+ plain.setFocus(Qt::OtherFocusReason);
+ QCOMPARE(QApplication::focusWidget(), &plain);
+ QVariant imEnabled = QApplication::inputMethod()->queryFocusObject(Qt::ImEnabled, QVariant());
+ QVERIFY(imEnabled.isValid());
+ QVERIFY(!imEnabled.toBool());
+
+ // But a lineedit should return true
+ edit.setFocus(Qt::OtherFocusReason);
+ QCOMPARE(QApplication::focusWidget(), &edit);
+ imEnabled = QApplication::inputMethod()->queryFocusObject(Qt::ImEnabled, QVariant());
+ QVERIFY(imEnabled.isValid());
+ QVERIFY(imEnabled.toBool());
+
+ // ImEnabled should be false when a lineedit is read-only since
+ // ImEnabled indicates the widget accepts input method _input_.
+ edit.setReadOnly(true);
+ imEnabled = QApplication::inputMethod()->queryFocusObject(Qt::ImEnabled, QVariant());
+ QVERIFY(imEnabled.isValid());
+ QVERIFY(!imEnabled.toBool());
}
#ifdef QT_BUILD_INTERNAL
@@ -11200,7 +12103,7 @@ void tst_QWidget::grabMouse()
layout->addWidget(grabber);
centerOnScreen(&w);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QStringList expectedLog;
@@ -11237,7 +12140,7 @@ void tst_QWidget::grabKeyboard()
layout->addWidget(nonGrabber);
centerOnScreen(&w);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
nonGrabber->setFocus();
grabber->grabKeyboard();
@@ -11331,6 +12234,9 @@ public:
void tst_QWidget::touchEventSynthesizedMouseEvent()
{
+ if (m_platform.startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("This test failed on Wayland. See also QTBUG-107157.");
+
{
// Simple case, we ignore the touch events, we get mouse events instead
TouchMouseWidget widget;
@@ -12039,6 +12945,7 @@ void tst_QWidget::resizeStaticContentsChildWidget_QTBUG35282()
widget.resize(200,200);
UpdateWidget childWidget(&widget);
+ childWidget.setPalette(simplePalette());
childWidget.setAttribute(Qt::WA_StaticContents);
childWidget.setAttribute(Qt::WA_OpaquePaintEvent);
childWidget.setGeometry(250, 250, 500, 500);
@@ -12137,60 +13044,54 @@ void tst_QWidget::testForOutsideWSRangeFlag()
}
}
-class TabletWidget : public QWidget
+void tst_QWidget::tabletTracking()
{
-public:
- TabletWidget(QWidget *parent) : QWidget(parent) { }
+ class TabletWidget : public QWidget
+ {
+ public:
+ using QWidget::QWidget;
- int tabletEventCount = 0;
- int pressEventCount = 0;
- int moveEventCount = 0;
- int releaseEventCount = 0;
- int trackingChangeEventCount = 0;
- qint64 uid = -1;
+ int tabletEventCount = 0;
+ int pressEventCount = 0;
+ int moveEventCount = 0;
+ int releaseEventCount = 0;
+ int trackingChangeEventCount = 0;
+ qint64 uid = -1;
-protected:
- void tabletEvent(QTabletEvent *event) override {
- ++tabletEventCount;
- uid = event->pointingDevice()->uniqueId().numericId();
- switch (event->type()) {
- case QEvent::TabletMove:
- ++moveEventCount;
- break;
- case QEvent::TabletPress:
- ++pressEventCount;
- break;
- case QEvent::TabletRelease:
- ++releaseEventCount;
- break;
- default:
- break;
+ protected:
+ void tabletEvent(QTabletEvent *event) override {
+ ++tabletEventCount;
+ uid = event->pointingDevice()->uniqueId().numericId();
+ switch (event->type()) {
+ case QEvent::TabletMove:
+ ++moveEventCount;
+ break;
+ case QEvent::TabletPress:
+ ++pressEventCount;
+ break;
+ case QEvent::TabletRelease:
+ ++releaseEventCount;
+ break;
+ default:
+ break;
+ }
}
- }
-
- bool event(QEvent *ev) override {
- if (ev->type() == QEvent::TabletTrackingChange)
- ++trackingChangeEventCount;
- return QWidget::event(ev);
- }
-};
-void tst_QWidget::tabletTracking()
-{
- QWidget parent;
- parent.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
- parent.resize(200,200);
- // QWidgetWindow::handleTabletEvent doesn't deliver tablet events to the window's widget, only to a child.
- // So it doesn't do any good to show a TabletWidget directly: it needs a parent.
- TabletWidget widget(&parent);
+ bool event(QEvent *ev) override {
+ if (ev->type() == QEvent::TabletTrackingChange)
+ ++trackingChangeEventCount;
+ return QWidget::event(ev);
+ }
+ } widget;
+ widget.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
widget.resize(200,200);
- parent.showNormal();
- QVERIFY(QTest::qWaitForWindowExposed(&parent));
+ widget.showNormal();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
widget.setAttribute(Qt::WA_TabletTracking);
QTRY_COMPARE(widget.trackingChangeEventCount, 1);
QVERIFY(widget.hasTabletTracking());
- QWindow *window = parent.windowHandle();
+ QWindow *window = widget.windowHandle();
QPointF local(10, 10);
QPointF global = window->mapToGlobal(local.toPoint());
QPointF deviceLocal = QHighDpi::toNativeLocalPosition(local, window);
@@ -12497,6 +13398,9 @@ protected:
void tst_QWidget::deleteWindowInCloseEvent()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("This test crashes on Android");
+#endif
QSignalSpy quitSpy(qApp, &QGuiApplication::lastWindowClosed);
// Closing this widget should not cause a crash
@@ -12509,7 +13413,7 @@ void tst_QWidget::deleteWindowInCloseEvent()
QApplication::exec();
// It should still result in a single lastWindowClosed emit
- QCOMPARE(quitSpy.count(), 1);
+ QCOMPARE(quitSpy.size(), 1);
}
/*!
@@ -12530,7 +13434,7 @@ void tst_QWidget::quitOnClose()
widget->close();
});
QApplication::exec();
- QCOMPARE(quitSpy.count(), 1);
+ QCOMPARE(quitSpy.size(), 1);
widget->show();
QVERIFY(QTest::qWaitForWindowExposed(widget.get()));
@@ -12538,7 +13442,7 @@ void tst_QWidget::quitOnClose()
widget.reset();
});
QApplication::exec();
- QCOMPARE(quitSpy.count(), 2);
+ QCOMPARE(quitSpy.size(), 2);
}
void tst_QWidget::setParentChangesFocus_data()
@@ -12598,20 +13502,24 @@ void tst_QWidget::setParentChangesFocus()
QCOMPARE(secondary->focusWidget()->objectName(), focusWidget);
}
secondary->show();
- QApplication::setActiveWindow(secondary.get());
+ QApplicationPrivate::setActiveWindow(secondary.get());
QVERIFY(QTest::qWaitForWindowActive(secondary.get()));
if (!reparentBeforeShow) {
secondary->setParent(targetParent ? &window : nullptr, targetType);
secondary->show(); // reparenting hides, so show again
- QApplication::setActiveWindow(secondary.get());
+ QApplicationPrivate::setActiveWindow(secondary.get());
QVERIFY(QTest::qWaitForWindowActive(secondary.get()));
}
+ QVERIFY(QTest::qWaitFor([]{ return QApplication::focusWidget(); }));
QCOMPARE(QApplication::focusWidget()->objectName(), focusWidget);
}
void tst_QWidget::activateWhileModalHidden()
{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
QDialog dialog;
dialog.setWindowModality(Qt::ApplicationModal);
dialog.show();
@@ -12629,5 +13537,464 @@ void tst_QWidget::activateWhileModalHidden()
QCOMPARE(QApplication::activeWindow(), &window);
}
+// Create a simple palette to prevent multiple paint events
+QPalette tst_QWidget::simplePalette()
+{
+ static QPalette simplePalette = []{
+ const QColor windowText = Qt::black;
+ const QColor backGround = QColor(239, 239, 239);
+ const QColor light = backGround.lighter(150);
+ const QColor mid = (backGround.darker(130));
+ const QColor midLight = mid.lighter(110);
+ const QColor base = Qt::white;
+ const QColor dark = backGround.darker(150);
+ const QColor text = Qt::black;
+ const QColor highlight = QColor(48, 140, 198);
+ const QColor hightlightedText = Qt::white;
+ const QColor button = backGround;
+ const QColor shadow = dark.darker(135);
+
+ QPalette defaultPalette(windowText, backGround, light, dark, mid, text, base);
+ defaultPalette.setBrush(QPalette::Midlight, midLight);
+ defaultPalette.setBrush(QPalette::Button, button);
+ defaultPalette.setBrush(QPalette::Shadow, shadow);
+ defaultPalette.setBrush(QPalette::HighlightedText, hightlightedText);
+ defaultPalette.setBrush(QPalette::Active, QPalette::Highlight, highlight);
+ return defaultPalette;
+ }();
+
+ return simplePalette;
+}
+
+#ifdef Q_OS_ANDROID
+void tst_QWidget::showFullscreenAndroid()
+{
+ QWidget w;
+ w.setAutoFillBackground(true);
+ QPalette p = w.palette();
+ p.setColor(QPalette::Window, Qt::red);
+ w.setPalette(p);
+
+ // Need to toggle showFullScreen() twice, see QTBUG-101968
+ w.showFullScreen();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+ w.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+ w.showFullScreen();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+
+ // Make sure that the lower part of the screen contains the red widget, not
+ // the buttons.
+
+ const QRect fullGeometry = w.screen()->geometry();
+ // Take a rect of (20 x 20) from the bottom area
+ const QRect grabArea(10, fullGeometry.height() - 30, 20, 20);
+ const QImage img = grabFromWidget(&w, grabArea).toImage().convertedTo(QImage::Format_RGB32);
+
+ QPixmap expectedPix(20, 20);
+ expectedPix.fill(Qt::red);
+ const QImage expectedImg = expectedPix.toImage().convertedTo(QImage::Format_RGB32);
+
+ QCOMPARE(img, expectedImg);
+}
+#endif // Q_OS_ANDROID
+
+void tst_QWidget::setVisibleDuringDestruction()
+{
+ CreateDestroyWidget widget;
+ widget.create();
+ QVERIFY(widget.windowHandle());
+
+ QSignalSpy signalSpy(widget.windowHandle(), &QWindow::visibleChanged);
+ EventSpy<QWindow> showEventSpy(widget.windowHandle(), QEvent::Show);
+ widget.show();
+ QTRY_COMPARE(showEventSpy.count(), 1);
+ QTRY_COMPARE(signalSpy.count(), 1);
+
+ EventSpy<QWindow> hideEventSpy(widget.windowHandle(), QEvent::Hide);
+ widget.hide();
+ QTRY_COMPARE(hideEventSpy.count(), 1);
+ QTRY_COMPARE(signalSpy.count(), 2);
+
+ widget.show();
+ QTRY_COMPARE(showEventSpy.count(), 2);
+ QTRY_COMPARE(signalSpy.count(), 3);
+
+ widget.destroy();
+ QTRY_COMPARE(hideEventSpy.count(), 2);
+ QTRY_COMPARE(signalSpy.count(), 4);
+}
+
+void tst_QWidget::explicitShowHide()
+{
+ {
+ QWidget parent;
+ parent.setObjectName("Parent");
+ QWidget child(&parent);
+ child.setObjectName("Child");
+
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Hidden), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), false);
+
+ parent.show();
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_ExplicitShowHide), true);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Hidden), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), false);
+
+ // Fix up earlier expected failure
+ child.setAttribute(Qt::WA_WState_ExplicitShowHide, false);
+
+ parent.hide();
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_ExplicitShowHide), true);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Hidden), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), false);
+ }
+
+ {
+ // Test what happens when a child is reparented after showing it
+
+ QWidget parent;
+ parent.setObjectName("Parent");
+ QWidget child;
+ child.setObjectName("Child");
+
+ child.show();
+ QCOMPARE(child.isVisible(), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), false);
+
+ child.setParent(&parent);
+ // As documented, a widget becomes invisible as part of changing
+ // its parent, even if it was previously visible. The user must call
+ // show() to make the widget visible again.
+ QCOMPARE(child.isVisible(), false);
+
+ // However, the widget does not end up with Qt::WA_WState_Hidden,
+ // as QWidget::setParent treats it as a child, which normally will
+ // not get Qt::WA_WState_Hidden out of the box.
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), false);
+
+ // For some reason we reset WA_WState_ExplicitShowHide, and it's
+ // not clear whether this is correct or not See QWidget::setParent()
+ // for a comment with more details.
+ QEXPECT_FAIL("", "We reset WA_WState_ExplicitShowHide on widget re-parent", Continue);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), true);
+
+ // The fact that the child doesn't have Qt::WA_WState_Hidden means
+ // it's sufficient to show the parent widget. We don't need to
+ // explicitly show the child.
+ parent.show();
+ QCOMPARE(child.isVisible(), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), false);
+ }
+
+ {
+ QWidget parent;
+ parent.setObjectName("Parent");
+ QWidget child(&parent);
+ child.setObjectName("Child");
+
+ parent.show();
+
+ // If a non-native child ends up being closed, we will hide the
+ // widget, but do so via QWidget::hide(), which marks the widget
+ // as explicitly hidden.
+
+ child.setAttribute(Qt::WA_WState_ExplicitShowHide, false);
+ QCOMPARE(child.close(), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), true);
+
+ child.show();
+ child.setAttribute(Qt::WA_NativeWindow);
+ child.setAttribute(Qt::WA_WState_ExplicitShowHide, false);
+ QCOMPARE(child.close(), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), true);
+
+ child.show();
+ child.setAttribute(Qt::WA_WState_ExplicitShowHide, false);
+ QCOMPARE(child.windowHandle()->close(), false); // Can't close non-top level QWindows
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), false);
+
+ // If we end up in QWidgetPrivate::handleClose via QWidgetWindow::closeEvent,
+ // either through QWindow::close(), or via QWSI::handleCloseEvent, we'll still
+ // do the explicit hide.
+
+ child.show();
+ child.setAttribute(Qt::WA_WState_ExplicitShowHide, false);
+ QCOMPARE(QWindowSystemInterface::handleCloseEvent<QWindowSystemInterface::SynchronousDelivery>(
+ child.windowHandle()), true);
+ QEXPECT_FAIL("", "Closing a native child via QWSI is treated as an explicit hide", Continue);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), true);
+ }
+
+ {
+ QWidget widget;
+ widget.show();
+ widget.hide();
+
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_ExplicitShowHide), true);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Hidden), true);
+
+ // The widget is now explicitly hidden. Showing it again, via QWindow,
+ // should make the widget visible, and it should not stay hidden, as
+ // that's an invalid state for a widget.
+
+ widget.windowHandle()->setVisible(true);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Visible), true);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_ExplicitShowHide), true);
+ QCOMPARE(widget.testAttribute(Qt::WA_WState_Hidden), false);
+ }
+}
+
+/*!
+ Verify that we deliver DragEnter/Leave events symmetrically, even if the
+ widget entered didn't accept the DragEnter event.
+*/
+void tst_QWidget::dragEnterLeaveSymmetry()
+{
+ QWidget widget;
+ widget.setAcceptDrops(true);
+ QLineEdit lineEdit;
+ QLabel label("Hello world");
+ label.setAcceptDrops(true);
+
+ struct EventFilter : QObject
+ {
+ bool eventFilter(QObject *receiver, QEvent *event) override
+ {
+ switch (event->type()) {
+ case QEvent::DragEnter:
+ case QEvent::DragLeave:
+ receivers[event->type()] << receiver;
+ break;
+
+ default:
+ break;
+ }
+
+ return false;
+ }
+
+ QMap<QEvent::Type, QList<QObject *>> receivers;
+
+ void clear() { receivers.clear(); }
+ bool hasEntered(QWidget *widget) const
+ {
+ return receivers.value(QEvent::DragEnter).contains(widget);
+ }
+ bool hasLeft(QWidget *widget) const
+ {
+ return receivers.value(QEvent::DragLeave).contains(widget);
+ }
+ } filter;
+
+ widget.installEventFilter(&filter);
+ lineEdit.installEventFilter(&filter);
+ label.installEventFilter(&filter);
+
+ QVBoxLayout vbox;
+ vbox.setContentsMargins(10, 10, 10, 10);
+ vbox.addWidget(&lineEdit);
+ vbox.addWidget(&label);
+ widget.setLayout(&vbox);
+
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+
+ QMimeData data;
+ data.setColorData(QVariant::fromValue(Qt::red));
+ QWindowSystemInterface::handleDrag(widget.windowHandle(), &data, QPoint(1, 1),
+ Qt::ActionMask, Qt::LeftButton, {});
+ QVERIFY(filter.hasEntered(&widget));
+ QVERIFY(!filter.hasEntered(&lineEdit));
+ QVERIFY(!filter.hasEntered(&label));
+ QVERIFY(widget.underMouse());
+ QVERIFY(!lineEdit.underMouse());
+ filter.clear();
+
+ QWindowSystemInterface::handleDrag(widget.windowHandle(), &data, lineEdit.geometry().center(),
+ Qt::ActionMask, Qt::LeftButton, {});
+ // DragEnter propagates as the lineEdit doesn't want it, so the widget
+ // sees both a Leave and an Enter event
+ QVERIFY(filter.hasLeft(&widget));
+ QVERIFY(filter.hasEntered(&widget));
+ QVERIFY(filter.hasEntered(&widget));
+ // both have the UnderMouse attribute set
+ QVERIFY(lineEdit.underMouse());
+ QVERIFY(widget.underMouse());
+
+ // The lineEdit didn't accept the DragEnter, but it should still has to
+ // get the DragLeave so that UnderMouse is cleared; the widget gets both
+ // Leave and Enter through propagation.
+ QWindowSystemInterface::handleDrag(widget.windowHandle(), &data, label.geometry().center(),
+ Qt::ActionMask, Qt::LeftButton, {});
+ QVERIFY(filter.hasLeft(&lineEdit));
+ QVERIFY(filter.hasLeft(&widget));
+ QVERIFY(filter.hasEntered(&label));
+ QVERIFY(filter.hasEntered(&widget));
+
+ QVERIFY(!lineEdit.underMouse());
+ QVERIFY(label.underMouse());
+ QVERIFY(widget.underMouse());
+}
+
+void tst_QWidget::reparentWindowHandles_data()
+{
+ QTest::addColumn<int>("stage");
+ QTest::addRow("reparent child") << 1;
+ QTest::addRow("top level to child") << 2;
+ QTest::addRow("transient parent") << 3;
+ QTest::addRow("window container") << 4;
+}
+
+void tst_QWidget::reparentWindowHandles()
+{
+ const bool nativeSiblingsOriginal = qApp->testAttribute(Qt::AA_DontCreateNativeWidgetSiblings);
+ qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
+ auto nativeSiblingGuard = qScopeGuard([&]{
+ qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, nativeSiblingsOriginal);
+ });
+
+ QFETCH(int, stage);
+
+ switch (stage) {
+ case 1: {
+ // Reparent child widget
+
+ QWidget topLevel;
+ topLevel.setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(topLevel.windowHandle());
+ QPointer<QWidget> child = new QWidget(&topLevel);
+ child->setAttribute(Qt::WA_DontCreateNativeAncestors);
+ child->setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(child->windowHandle());
+
+ QWidget anotherTopLevel;
+ anotherTopLevel.setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(anotherTopLevel.windowHandle());
+ QPointer<QWidget> intermediate = new QWidget(&anotherTopLevel);
+ QPointer<QWidget> leaf = new QWidget(intermediate);
+ leaf->setAttribute(Qt::WA_DontCreateNativeAncestors);
+ leaf->setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(leaf->windowHandle());
+ QVERIFY(!intermediate->windowHandle());
+
+ // Reparenting a native widget should reparent the QWindow
+ child->setParent(leaf);
+ QCOMPARE(child->windowHandle()->parent(), leaf->windowHandle());
+ QCOMPARE(child->windowHandle()->transientParent(), nullptr);
+ QVERIFY(!intermediate->windowHandle());
+
+ // So should reparenting a non-native widget with native children
+ intermediate->setParent(&topLevel);
+ QVERIFY(!intermediate->windowHandle());
+ QCOMPARE(leaf->windowHandle()->parent(), topLevel.windowHandle());
+ QCOMPARE(leaf->windowHandle()->transientParent(), nullptr);
+ QCOMPARE(child->windowHandle()->parent(), leaf->windowHandle());
+ QCOMPARE(child->windowHandle()->transientParent(), nullptr);
+ }
+ break;
+ case 2: {
+ // Top level to child
+
+ QWidget topLevel;
+ topLevel.setAttribute(Qt::WA_NativeWindow);
+
+ // A regular top level loses its nativeness
+ QPointer<QWidget> regularToplevel = new QWidget;
+ regularToplevel->show();
+ QVERIFY(QTest::qWaitForWindowExposed(regularToplevel));
+ QVERIFY(regularToplevel->windowHandle());
+ regularToplevel->setParent(&topLevel);
+ QVERIFY(!regularToplevel->windowHandle());
+
+ // A regular top level loses its nativeness
+ QPointer<QWidget> regularToplevelWithNativeChildren = new QWidget;
+ QPointer<QWidget> nativeChild = new QWidget(regularToplevelWithNativeChildren);
+ nativeChild->setAttribute(Qt::WA_DontCreateNativeAncestors);
+ nativeChild->setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(nativeChild->windowHandle());
+ regularToplevelWithNativeChildren->show();
+ QVERIFY(QTest::qWaitForWindowExposed(regularToplevelWithNativeChildren));
+ QVERIFY(regularToplevelWithNativeChildren->windowHandle());
+ regularToplevelWithNativeChildren->setParent(&topLevel);
+ QVERIFY(!regularToplevelWithNativeChildren->windowHandle());
+ // But the native child does not
+ QVERIFY(nativeChild->windowHandle());
+ QCOMPARE(nativeChild->windowHandle()->parent(), topLevel.windowHandle());
+
+ // An explicitly native top level keeps its nativeness, and the window handle moves
+ QPointer<QWidget> nativeTopLevel = new QWidget;
+ nativeTopLevel->setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(nativeTopLevel->windowHandle());
+ nativeTopLevel->setParent(&topLevel);
+ QVERIFY(nativeTopLevel->windowHandle());
+ QCOMPARE(nativeTopLevel->windowHandle()->parent(), topLevel.windowHandle());
+ }
+ break;
+ case 3: {
+ // Transient parent
+
+ QWidget topLevel;
+ topLevel.setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(topLevel.windowHandle());
+ QPointer<QWidget> child = new QWidget(&topLevel);
+ child->setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(child->windowHandle());
+
+ QWidget anotherTopLevel;
+ anotherTopLevel.setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(anotherTopLevel.windowHandle());
+
+ // Make transient child of top level
+ anotherTopLevel.setParent(&topLevel, Qt::Window);
+ QCOMPARE(anotherTopLevel.windowHandle()->parent(), nullptr);
+ QCOMPARE(anotherTopLevel.windowHandle()->transientParent(), topLevel.windowHandle());
+
+ // Make transient child of child
+ anotherTopLevel.setParent(child, Qt::Window);
+ QCOMPARE(anotherTopLevel.windowHandle()->parent(), nullptr);
+ QCOMPARE(anotherTopLevel.windowHandle()->transientParent(), topLevel.windowHandle());
+ }
+ break;
+ case 4: {
+ // Window container
+
+ QWidget topLevel;
+ topLevel.setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(topLevel.windowHandle());
+
+ QPointer<QWidget> child = new QWidget(&topLevel);
+ QVERIFY(!child->windowHandle());
+
+ QWindow *window = new QWindow;
+ QWidget *container = QWidget::createWindowContainer(window);
+ container->setParent(child);
+ topLevel.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+ QCOMPARE(window->parent(), topLevel.windowHandle());
+
+ QWidget anotherTopLevel;
+ anotherTopLevel.setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(anotherTopLevel.windowHandle());
+
+ child->setParent(&anotherTopLevel);
+ QCOMPARE(window->parent(), anotherTopLevel.windowHandle());
+ }
+ break;
+ default:
+ Q_UNREACHABLE();
+ }
+}
+
QTEST_MAIN(tst_QWidget)
#include "tst_qwidget.moc"
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget_mac_helpers.h b/tests/auto/widgets/kernel/qwidget/tst_qwidget_mac_helpers.h
deleted file mode 100644
index 87de300da9..0000000000
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget_mac_helpers.h
+++ /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 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/QString>
-#include <QtCore/QPair>
-#include <QtWidgets/QWidget>
-
-#pragma once // Yeah, it's deprecated in general, but it's standard practice for Mac OS X.
-
-QString nativeWindowTitle(QWidget *widget, Qt::WindowState state);
-bool nativeWindowModified(QWidget *widget);
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget_mac_helpers.mm b/tests/auto/widgets/kernel/qwidget/tst_qwidget_mac_helpers.mm
deleted file mode 100644
index e2d00aa25b..0000000000
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget_mac_helpers.mm
+++ /dev/null
@@ -1,57 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-// some versions of CALayer.h use 'slots' as an identifier
-#define QT_NO_KEYWORDS
-
-#include "tst_qwidget_mac_helpers.h"
-#include <QApplication>
-#include <qpa/qplatformnativeinterface.h>
-#include <private/qcore_mac_p.h>
-
-#include <AppKit/AppKit.h>
-
-QString nativeWindowTitle(QWidget *window, Qt::WindowState state)
-{
- QWindow *qwindow = window->windowHandle();
- NSWindow *nswindow = (NSWindow *) qApp->platformNativeInterface()->nativeResourceForWindow("nswindow", qwindow);
- QCFString macTitle;
- if (state == Qt::WindowMinimized) {
- macTitle = reinterpret_cast<CFStringRef>([[nswindow miniwindowTitle] retain]);
- } else {
- macTitle = reinterpret_cast<CFStringRef>([[nswindow title] retain]);
- }
- return macTitle;
-}
-
-bool nativeWindowModified(QWidget *widget)
-{
- QWindow *qwindow = widget->windowHandle();
- NSWindow *nswindow = (NSWindow *) qApp->platformNativeInterface()->nativeResourceForWindow("nswindow", qwindow);
- return [nswindow isDocumentEdited];
-}
diff --git a/tests/auto/widgets/kernel/qwidget_window/BLACKLIST b/tests/auto/widgets/kernel/qwidget_window/BLACKLIST
index 0e1a2d58dc..77853a3e8c 100644
--- a/tests/auto/widgets/kernel/qwidget_window/BLACKLIST
+++ b/tests/auto/widgets/kernel/qwidget_window/BLACKLIST
@@ -1,7 +1,3 @@
-[tst_resize_count]
-# QTBUG-66345
-opensuse-42.3
-ubuntu-16.04
# QTBUG-87412
[tst_move_show]
android
diff --git a/tests/auto/widgets/kernel/qwidget_window/CMakeLists.txt b/tests/auto/widgets/kernel/qwidget_window/CMakeLists.txt
index 9bae267970..af60c92cbf 100644
--- a/tests/auto/widgets/kernel/qwidget_window/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qwidget_window/CMakeLists.txt
@@ -1,16 +1,24 @@
-# Generated from qwidget_window.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qwidget_window Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwidget_window LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qwidget_window
SOURCES
tst_qwidget_window.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::TestPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
index 5ae4526af2..8e8cec6d4f 100644
--- a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
+++ b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.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 <QTest>
@@ -43,6 +18,7 @@
#include <qlabel.h>
#include <qmainwindow.h>
#include <qtoolbar.h>
+#include <qsignalspy.h>
#include <private/qwindow_p.h>
#include <private/qguiapplication_p.h>
#include <qpa/qplatformintegration.h>
@@ -52,6 +28,8 @@
#include <QtTest/private/qtesthelpers_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
using namespace QTestPrivate;
// Compare a window position that may go through scaling in the platform plugin with fuzz.
@@ -75,6 +53,7 @@ public:
tst_QWidget_window();
public slots:
+ void init();
void initTestCase();
void cleanupTestCase();
void cleanup();
@@ -106,6 +85,7 @@ private slots:
void tst_dnd();
void tst_dnd_events();
void tst_dnd_propagation();
+ void tst_dnd_destroyOnDrop();
#endif
void tst_qtbug35600();
@@ -131,6 +111,13 @@ private slots:
void mouseMoveWithPopup_data();
void mouseMoveWithPopup();
+ void showHideWindowHandle_data();
+ void showHideWindowHandle();
+
+ void resetFocusObjectOnDestruction();
+
+ void cleanupOnDestruction();
+
private:
QSize m_testWidgetSize;
const int m_fuzz;
@@ -148,6 +135,11 @@ void tst_QWidget_window::initTestCase()
{
}
+void tst_QWidget_window::init()
+{
+ QTest::failOnWarning(QRegularExpression(".*No such slot.*"));
+}
+
void tst_QWidget_window::cleanupTestCase()
{
}
@@ -699,7 +691,7 @@ void tst_QWidget_window::tst_dnd()
dndTestWidget.show();
QVERIFY(QTest::qWaitForWindowExposed(&dndTestWidget));
- qApp->setActiveWindow(&dndTestWidget);
+ QApplicationPrivate::setActiveWindow(&dndTestWidget);
QVERIFY(QTest::qWaitForWindowActive(&dndTestWidget));
QMimeData mimeData;
@@ -939,6 +931,78 @@ void tst_QWidget_window::tst_dnd_propagation()
QCOMPARE(target.mDndEvents, "enter leave enter drop ");
}
+
+class ReparentSelfOnDropWidget : public QWidget
+{
+public:
+ ReparentSelfOnDropWidget(QWidget *newFutureParent)
+ : m_newFutureParent(newFutureParent)
+ {
+ setAcceptDrops(true);
+
+ const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
+ auto width = availableGeometry.width() / 6;
+ auto height = availableGeometry.height() / 4;
+
+ setGeometry(availableGeometry.x() + 200, availableGeometry.y() + 200, width, height);
+
+ QLabel *label = new QLabel(QStringLiteral("Test"), this);
+ label->setGeometry(40, 40, 60, 60);
+ label->setAcceptDrops(true);
+ }
+
+ void dragEnterEvent(QDragEnterEvent *event) override
+ {
+ event->accept();
+ }
+
+ void dragMoveEvent(QDragMoveEvent *event) override
+ {
+ event->acceptProposedAction();
+ }
+
+ void dropEvent(QDropEvent *event) override
+ {
+ event->accept();
+ // Turn 'this' from a top-level widget to a child widget.
+ // This destroys the QWidgetWindow since the widget is no longer top-level.
+ setParent(m_newFutureParent);
+ }
+
+private:
+ QWidget *m_newFutureParent;
+};
+
+void tst_QWidget_window::tst_dnd_destroyOnDrop()
+{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Wayland: This fails. Figure out why.");
+
+ QMimeData mimeData;
+ mimeData.setText(QLatin1String("testmimetext"));
+
+ QWidget newParent;
+ newParent.resize(400, 400);
+ newParent.show();
+ QVERIFY(QTest::qWaitForWindowActive(&newParent));
+
+ ReparentSelfOnDropWidget *target = new ReparentSelfOnDropWidget(&newParent);
+ target->show();
+ QVERIFY(QTest::qWaitForWindowActive(target));
+
+ Qt::DropActions supportedActions = Qt::DropAction::CopyAction;
+ QWindow *window = target->windowHandle();
+
+ auto posInsideDropTarget = QHighDpi::toNativePixels(QPoint(20, 20), window->screen());
+ auto posInsideLabel = QHighDpi::toNativePixels(QPoint(60, 60), window->screen());
+
+ QWindowSystemInterface::handleDrag(window, &mimeData, posInsideDropTarget, supportedActions, {}, {});
+ QWindowSystemInterface::handleDrag(window, &mimeData, posInsideLabel, supportedActions, {}, {});
+ QWindowSystemInterface::handleDrop(window, &mimeData, posInsideLabel, supportedActions, {}, {});
+
+ QGuiApplication::processEvents();
+}
+
#endif
void tst_QWidget_window::tst_qtbug35600()
@@ -1399,6 +1463,9 @@ void tst_QWidget_window::mouseMoveWithPopup_data()
void tst_QWidget_window::mouseMoveWithPopup()
{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Wayland: Skip this test, see also QTBUG-107154");
+
QFETCH(Qt::WindowType, windowType);
class Window : public QWidget
@@ -1574,5 +1641,214 @@ void tst_QWidget_window::mouseMoveWithPopup()
QCOMPARE(topLevel.popup->mouseReleaseCount, 1);
}
+struct ShowHideEntry {
+ QEvent::Type action;
+ Qt::WindowType target;
+ using List = QList<ShowHideEntry>;
+};
+
+void tst_QWidget_window::showHideWindowHandle_data()
+{
+ QTest::addColumn<ShowHideEntry::List>("entries");
+
+ QTest::addRow("show/hide widget") << ShowHideEntry::List{
+ { QEvent::Show, Qt::Widget }, { QEvent::Hide, Qt::Widget }
+ };
+ QTest::addRow("show/hide window") << ShowHideEntry::List{
+ { QEvent::Show, Qt::Window }, { QEvent::Hide, Qt::Window }
+ };
+ QTest::addRow("show widget, hide window") << ShowHideEntry::List{
+ { QEvent::Show, Qt::Widget }, { QEvent::Hide, Qt::Window }
+ };
+ QTest::addRow("show window, hide widget") << ShowHideEntry::List{
+ { QEvent::Show, Qt::Window }, { QEvent::Hide, Qt::Widget }
+ };
+ QTest::addRow("show/hide widget, then show window, hide widget") << ShowHideEntry::List{
+ { QEvent::Show, Qt::Widget }, { QEvent::Hide, Qt::Widget },
+ { QEvent::Show, Qt::Window }, { QEvent::Hide, Qt::Widget }
+ };
+ QTest::addRow("show widget, close widget, show widget") << ShowHideEntry::List{
+ { QEvent::Show, Qt::Widget }, { QEvent::Close, Qt::Widget }, { QEvent::Show, Qt::Widget }
+ };
+ QTest::addRow("show widget, close widget, show window") << ShowHideEntry::List{
+ { QEvent::Show, Qt::Widget }, { QEvent::Close, Qt::Widget }, { QEvent::Show, Qt::Window }
+ };
+ QTest::addRow("show widget, close window, show widget") << ShowHideEntry::List{
+ { QEvent::Show, Qt::Widget }, { QEvent::Close, Qt::Window }, { QEvent::Show, Qt::Widget }
+ };
+ QTest::addRow("show widget, close window, show window") << ShowHideEntry::List{
+ { QEvent::Show, Qt::Widget }, { QEvent::Close, Qt::Window }, { QEvent::Show, Qt::Window }
+ };
+}
+
+void tst_QWidget_window::showHideWindowHandle()
+{
+ QWidget parent;
+ parent.setObjectName("Parent");
+ QCOMPARE(parent.isVisible(), false);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Hidden), true);
+
+ QWidget child;
+ child.setObjectName("Child");
+ QCOMPARE(child.isVisible(), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), true);
+
+ child.setParent(&parent);
+ QCOMPARE(child.isVisible(), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), false);
+
+ QFETCH(QList<ShowHideEntry>, entries);
+ for (const auto entry : entries) {
+
+ if (entry.action == QEvent::Show) {
+ if (entry.target == Qt::Window && !parent.windowHandle()) {
+ parent.setAttribute(Qt::WA_NativeWindow);
+ QVERIFY(parent.windowHandle());
+
+ QCOMPARE(parent.isVisible(), false);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Hidden), true);
+ }
+
+ bool wasExplicitShowHide = parent.testAttribute(Qt::WA_WState_ExplicitShowHide);
+
+ if (entry.target == Qt::Widget)
+ parent.show();
+ else
+ parent.windowHandle()->show();
+
+ QVERIFY(QTest::qWaitForWindowActive(&parent));
+
+ QCOMPARE(parent.isVisible(), true);
+ QVERIFY(parent.windowHandle());
+ QCOMPARE(parent.windowHandle()->isVisible(), true);
+
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Visible), true);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Hidden), false);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_ExplicitShowHide),
+ entry.target == Qt::Widget || wasExplicitShowHide);
+
+ QCOMPARE(child.isVisible(), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Visible), true);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), false);
+
+ } else if (entry.action == QEvent::Hide) {
+
+ bool wasExplicitShowHide = parent.testAttribute(Qt::WA_WState_ExplicitShowHide);
+
+ if (entry.target == Qt::Widget)
+ parent.hide();
+ else
+ parent.windowHandle()->hide();
+
+ QCOMPARE(parent.isVisible(), false);
+ QVERIFY(parent.windowHandle());
+ QCOMPARE(parent.windowHandle()->isVisible(), false);
+
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Hidden), true);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_ExplicitShowHide),
+ entry.target == Qt::Widget || wasExplicitShowHide);
+
+ QCOMPARE(child.isVisible(), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), false);
+
+ } else if (entry.action == QEvent::Close) {
+
+ bool wasExplicitShowHide = parent.testAttribute(Qt::WA_WState_ExplicitShowHide);
+
+ if (entry.target == Qt::Widget)
+ parent.close();
+ else
+ parent.windowHandle()->close();
+
+ QCOMPARE(parent.isVisible(), false);
+ QVERIFY(parent.windowHandle());
+ QCOMPARE(parent.windowHandle()->isVisible(), false);
+
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_Hidden), true);
+ QCOMPARE(parent.testAttribute(Qt::WA_WState_ExplicitShowHide),
+ entry.target == Qt::Widget || wasExplicitShowHide);
+
+ QCOMPARE(child.isVisible(), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_ExplicitShowHide), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Visible), false);
+ QCOMPARE(child.testAttribute(Qt::WA_WState_Hidden), false);
+ }
+ }
+}
+
+void tst_QWidget_window::resetFocusObjectOnDestruction()
+{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
+ QSignalSpy focusObjectChangedSpy(qApp, &QGuiApplication::focusObjectChanged);
+
+ // single top level widget that has focus
+ std::unique_ptr<QWidget> widget(new QWidget);
+ widget->setObjectName("Widget 1");
+ widget->setFocus();
+ widget->show();
+ QVERIFY(QTest::qWaitForWindowActive(widget.get()));
+
+ int activeCount = focusObjectChangedSpy.size();
+ widget.reset();
+ QVERIFY(focusObjectChangedSpy.size() > activeCount);
+ QCOMPARE(focusObjectChangedSpy.last().last().value<QObject*>(), nullptr);
+ focusObjectChangedSpy.clear();
+
+ // top level widget with focused child
+ widget.reset(new QWidget);
+ widget->setObjectName("Widget 2");
+ QWidget *child = new QWidget(widget.get());
+ child->setObjectName("Child widget");
+ child->setFocus();
+ widget->show();
+ QVERIFY(QTest::qWaitForWindowActive(widget.get()));
+
+ activeCount = focusObjectChangedSpy.size();
+ widget.reset();
+ // we might get more than one signal emission
+ QVERIFY(focusObjectChangedSpy.size() > activeCount);
+ QCOMPARE(focusObjectChangedSpy.last().last().value<QObject*>(), nullptr);
+}
+
+class CreateDestroyWidget : public QWidget
+{
+public:
+ using QWidget::create;
+ using QWidget::destroy;
+};
+
+void tst_QWidget_window::cleanupOnDestruction()
+{
+ CreateDestroyWidget widget;
+ QWidget child(&widget);
+
+ QWidget grandChild(&child);
+ // Ensure there's not a 1:1 native window hierarhcy that we could
+ // recurse during QWidget::destroy(), triggering the issue that
+ // we were failing to clean up when not destroyed via QWidget.
+ grandChild.setAttribute(Qt::WA_DontCreateNativeAncestors);
+ grandChild.winId();
+
+ widget.destroy();
+ widget.create();
+
+ widget.show();
+}
+
QTEST_MAIN(tst_QWidget_window)
#include "tst_qwidget_window.moc"
diff --git a/tests/auto/widgets/kernel/qwidgetaction/CMakeLists.txt b/tests/auto/widgets/kernel/qwidgetaction/CMakeLists.txt
index 58dae2d076..fb5409464d 100644
--- a/tests/auto/widgets/kernel/qwidgetaction/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qwidgetaction/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qwidgetaction.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qwidgetaction Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwidgetaction LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qwidgetaction
SOURCES
tst_qwidgetaction.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::TestPrivate
Qt::Widgets
diff --git a/tests/auto/widgets/kernel/qwidgetaction/tst_qwidgetaction.cpp b/tests/auto/widgets/kernel/qwidgetaction/tst_qwidgetaction.cpp
index 1b43961182..a06e072b71 100644
--- a/tests/auto/widgets/kernel/qwidgetaction/tst_qwidgetaction.cpp
+++ b/tests/auto/widgets/kernel/qwidgetaction/tst_qwidgetaction.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 <QTest>
@@ -247,7 +222,7 @@ void tst_QWidgetAction::customWidget()
tb1.addAction(action);
QList<QWidget *> combos = action->createdWidgets();
- QCOMPARE(combos.count(), 1);
+ QCOMPARE(combos.size(), 1);
QPointer<QComboBox> combo1 = qobject_cast<QComboBox *>(combos.at(0));
QVERIFY(combo1);
@@ -255,7 +230,7 @@ void tst_QWidgetAction::customWidget()
tb2.addAction(action);
combos = action->createdWidgets();
- QCOMPARE(combos.count(), 2);
+ QCOMPARE(combos.size(), 2);
QCOMPARE(combos.at(0), combo1.data());
QPointer<QComboBox> combo2 = qobject_cast<QComboBox *>(combos.at(1));
diff --git a/tests/auto/widgets/kernel/qwidgetmetatype/CMakeLists.txt b/tests/auto/widgets/kernel/qwidgetmetatype/CMakeLists.txt
index 3d8c3bbf4b..431a584a60 100644
--- a/tests/auto/widgets/kernel/qwidgetmetatype/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qwidgetmetatype/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qwidgetmetatype.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qwidgetmetatype Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwidgetmetatype LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qwidgetmetatype
SOURCES
tst_qwidgetmetatype.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/kernel/qwidgetmetatype/tst_qwidgetmetatype.cpp b/tests/auto/widgets/kernel/qwidgetmetatype/tst_qwidgetmetatype.cpp
index 425380a99e..885c26a128 100644
--- a/tests/auto/widgets/kernel/qwidgetmetatype/tst_qwidgetmetatype.cpp
+++ b/tests/auto/widgets/kernel/qwidgetmetatype/tst_qwidgetmetatype.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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) 2012 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 <QTest>
diff --git a/tests/auto/widgets/kernel/qwidgetrepaintmanager/CMakeLists.txt b/tests/auto/widgets/kernel/qwidgetrepaintmanager/CMakeLists.txt
index a84c774beb..ae91af064c 100644
--- a/tests/auto/widgets/kernel/qwidgetrepaintmanager/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qwidgetrepaintmanager/CMakeLists.txt
@@ -1,7 +1,16 @@
+# 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_qwidgetrepaintmanager LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qwidgetrepaintmanager
SOURCES
tst_qwidgetrepaintmanager.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/kernel/qwidgetrepaintmanager/tst_qwidgetrepaintmanager.cpp b/tests/auto/widgets/kernel/qwidgetrepaintmanager/tst_qwidgetrepaintmanager.cpp
index 2031c68708..9059a9262e 100644
--- a/tests/auto/widgets/kernel/qwidgetrepaintmanager/tst_qwidgetrepaintmanager.cpp
+++ b/tests/auto/widgets/kernel/qwidgetrepaintmanager/tst_qwidgetrepaintmanager.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -36,7 +11,9 @@
#include <private/qhighdpiscaling_p.h>
#include <private/qwidget_p.h>
#include <private/qwidgetrepaintmanager_p.h>
+#include <qpa/qplatformintegration.h>
#include <qpa/qplatformbackingstore.h>
+#include <private/qguiapplication_p.h>
//#define MANUAL_DEBUG
@@ -58,14 +35,33 @@ public:
void initialShow()
{
show();
- if (isWindow())
+ if (isWindow()) {
QVERIFY(QTest::qWaitForWindowExposed(this));
+ QVERIFY(waitForPainted());
+ }
paintedRegions = {};
}
bool waitForPainted(int timeout = 5000)
{
- return QTest::qWaitFor([this]{ return !paintedRegions.isEmpty(); }, timeout);
+ int remaining = timeout;
+ QDeadlineTimer deadline(remaining, Qt::PreciseTimer);
+ if (!QTest::qWaitFor([this]{ return !paintedRegions.isEmpty(); }, timeout))
+ return false;
+
+ // In case of multiple paint events:
+ // Process events and wait until all have been consumed,
+ // i.e. paintedRegions no longer changes.
+ QRegion reg;
+ while (remaining > 0 && reg != paintedRegions) {
+ reg = paintedRegions;
+ QCoreApplication::processEvents(QEventLoop::AllEvents, remaining);
+ if (reg == paintedRegions)
+ return true;
+
+ remaining = int(deadline.remainingTime());
+ }
+ return false;
}
QRegion takePaintedRegions()
@@ -76,6 +72,17 @@ public:
}
QRegion paintedRegions;
+ bool event(QEvent *event) override
+ {
+ const auto type = event->type();
+ if (type == QEvent::WindowActivate || type == QEvent::WindowDeactivate)
+ return true;
+ if (type == QEvent::UpdateRequest)
+ ++updateRequests;
+ return QWidget::event(event);
+ }
+ int updateRequests = 0;
+
protected:
void paintEvent(QPaintEvent *event) override
{
@@ -96,6 +103,14 @@ public:
setAttribute(Qt::WA_OpaquePaintEvent);
}
+ bool event(QEvent *event) override
+ {
+ const auto type = event->type();
+ if (type == QEvent::WindowActivate || type == QEvent::WindowDeactivate)
+ return true;
+ return QWidget::event(event);
+ }
+
protected:
void paintEvent(QPaintEvent *e) override
{
@@ -211,6 +226,14 @@ public:
QSize sizeHint() const override { return QSize(400, 400); }
+ bool event(QEvent *event) override
+ {
+ const auto type = event->type();
+ if (type == QEvent::WindowActivate || type == QEvent::WindowDeactivate)
+ return true;
+ return QWidget::event(event);
+ }
+
protected:
void resizeEvent(QResizeEvent *) override
{
@@ -236,6 +259,8 @@ private slots:
void opaqueChildren();
void staticContents();
void scroll();
+ void paintOnScreenUpdates();
+
#if defined(QT_BUILD_INTERNAL)
void scrollWithOverlap();
void overlappedRegion();
@@ -251,13 +276,14 @@ protected:
*/
bool compareWidget(QWidget *w)
{
+ QBackingStore *backingStore = w->window()->backingStore();
+ Q_ASSERT(backingStore && backingStore->handle());
+ QPlatformBackingStore *platformBackingStore = backingStore->handle();
+
if (!waitForFlush(w)) {
qWarning() << "Widget" << w << "failed to flush";
return false;
}
- QBackingStore *backingStore = w->window()->backingStore();
- Q_ASSERT(backingStore && backingStore->handle());
- QPlatformBackingStore *platformBackingStore = backingStore->handle();
QImage backingstoreContent = platformBackingStore->toImage();
if (!w->isWindow()) {
@@ -284,7 +310,14 @@ protected:
}
bool waitForFlush(QWidget *widget) const
{
+ if (!widget)
+ return true;
+
auto *repaintManager = QWidgetPrivate::get(widget->window())->maybeRepaintManager();
+
+ if (!repaintManager)
+ return true;
+
return QTest::qWaitFor([repaintManager]{ return !repaintManager->isDirty(); } );
};
#endif // QT_BUILD_INTERNAL
@@ -307,7 +340,7 @@ void tst_QWidgetRepaintManager::initTestCase()
QVERIFY(QTest::qWaitForWindowExposed(&widget));
m_implementsScroll = widget.backingStore()->handle()->scroll(QRegion(widget.rect()), 1, 1);
- qDebug() << QGuiApplication::platformName() << "QPA backend implements scroll:" << m_implementsScroll;
+ qInfo() << QGuiApplication::platformName() << "QPA backend implements scroll:" << m_implementsScroll;
}
void tst_QWidgetRepaintManager::cleanup()
@@ -346,6 +379,7 @@ void tst_QWidgetRepaintManager::children()
TestWidget *child1 = new TestWidget(&widget);
child1->move(20, 20);
child1->show();
+ QVERIFY(QTest::qWaitForWindowExposed(child1));
QVERIFY(child1->waitForPainted());
QCOMPARE(widget.takePaintedRegions(), QRegion(child1->geometry()));
QCOMPARE(child1->takePaintedRegions(), QRegion(child1->rect()));
@@ -402,16 +436,26 @@ void tst_QWidgetRepaintManager::opaqueChildren()
*/
void tst_QWidgetRepaintManager::staticContents()
{
+ const auto *integration = QGuiApplicationPrivate::platformIntegration();
+ if (!integration->hasCapability(QPlatformIntegration::BackingStoreStaticContents))
+ QSKIP("Platform does not support static backingstore content");
+
TestWidget widget;
widget.setAttribute(Qt::WA_StaticContents);
widget.initialShow();
- const QSize oldSize = widget.size();
+ // Trigger resize via QWindow (similar to QWSI code path)
+ QVERIFY(widget.windowHandle());
+ QSize oldSize = widget.size();
+ widget.windowHandle()->resize(widget.width(), widget.height() + 10);
+ QVERIFY(widget.waitForPainted());
+ QCOMPARE(widget.takePaintedRegions(), QRegion(0, oldSize.width(), widget.width(), 10));
+ // Trigger resize via QWidget
+ oldSize = widget.size();
widget.resize(widget.width() + 10, widget.height());
-
QVERIFY(widget.waitForPainted());
- QEXPECT_FAIL("", "This should just repaint the newly exposed region", Continue);
+ QEXPECT_FAIL("", "QWidgetPrivate::setGeometry_sys wrongly triggers full update", Continue);
QCOMPARE(widget.takePaintedRegions(), QRegion(oldSize.width(), 0, 10, widget.height()));
}
@@ -452,6 +496,90 @@ void tst_QWidgetRepaintManager::scroll()
QCOMPARE(widget.takePaintedRegions(), QRegion());
}
+class PaintOnScreenWidget : public TestWidget
+{
+public:
+ using TestWidget::TestWidget;
+
+ // Explicit override to prevent noPaintOnScreen on Windows
+ QPaintEngine *paintEngine() const override
+ {
+ return nullptr;
+ }
+};
+
+void tst_QWidgetRepaintManager::paintOnScreenUpdates()
+{
+ {
+ TestWidget topLevel;
+ topLevel.setObjectName("TopLevel");
+ topLevel.resize(500, 500);
+ TestWidget renderToTextureWidget(&topLevel);
+ renderToTextureWidget.setObjectName("RenderToTexture");
+ renderToTextureWidget.setGeometry(0, 0, 200, 200);
+ QWidgetPrivate::get(&renderToTextureWidget)->setRenderToTexture();
+
+ PaintOnScreenWidget paintOnScreenWidget(&topLevel);
+ paintOnScreenWidget.setObjectName("PaintOnScreen");
+ paintOnScreenWidget.setGeometry(200, 200, 300, 300);
+
+ topLevel.initialShow();
+
+ // Updating before toggling WA_PaintOnScreen should work fine
+ paintOnScreenWidget.update();
+ paintOnScreenWidget.waitForPainted();
+ QVERIFY(paintOnScreenWidget.waitForPainted());
+
+#ifdef Q_OS_ANDROID
+ QEXPECT_FAIL("", "This test fails on Android", Abort);
+#endif
+ QCOMPARE(paintOnScreenWidget.takePaintedRegions(), paintOnScreenWidget.rect());
+
+ renderToTextureWidget.update();
+ QVERIFY(renderToTextureWidget.waitForPainted());
+ QCOMPARE(renderToTextureWidget.takePaintedRegions(), renderToTextureWidget.rect());
+
+ // Then toggle WA_PaintOnScreen
+ paintOnScreenWidget.setAttribute(Qt::WA_PaintOnScreen);
+
+ // The render-to-texture widget updates fine
+ renderToTextureWidget.update();
+ QVERIFY(renderToTextureWidget.waitForPainted());
+ QCOMPARE(renderToTextureWidget.takePaintedRegions(), renderToTextureWidget.rect());
+
+ // Updating the paint-on-screen texture widget will not result
+ // in a paint event, but should result in an update request.
+ paintOnScreenWidget.updateRequests = 0;
+ paintOnScreenWidget.update();
+ QVERIFY(QTest::qWaitFor([&]{ return paintOnScreenWidget.updateRequests > 0; }));
+
+ // And should not prevent the render-to-texture widget from receiving updates
+ renderToTextureWidget.update();
+ QVERIFY(renderToTextureWidget.waitForPainted());
+ QCOMPARE(renderToTextureWidget.takePaintedRegions(), renderToTextureWidget.rect());
+ }
+
+ {
+ TestWidget paintOnScreenTopLevel;
+ paintOnScreenTopLevel.setObjectName("PaintOnScreenTopLevel");
+ paintOnScreenTopLevel.setAttribute(Qt::WA_PaintOnScreen);
+
+ paintOnScreenTopLevel.initialShow();
+
+ paintOnScreenTopLevel.updateRequests = 0;
+ paintOnScreenTopLevel.update();
+ QVERIFY(QTest::qWaitFor([&]{ return paintOnScreenTopLevel.updateRequests > 0; }));
+
+ // Turn off paint on screen and make it a render-to-texture widget.
+ // This will lead us into a QWidgetRepaintManager::markDirty() code
+ // path that checks updateRequestSent, which is still set from the
+ // update above since paint-on-screen handling doesn't reset it.
+ paintOnScreenTopLevel.setAttribute(Qt::WA_PaintOnScreen, false);
+ QWidgetPrivate::get(&paintOnScreenTopLevel)->setRenderToTexture();
+ paintOnScreenTopLevel.update();
+ QVERIFY(QTest::qWaitFor([&]{ return paintOnScreenTopLevel.updateRequests > 1; }));
+ }
+}
#if defined(QT_BUILD_INTERNAL)
@@ -472,6 +600,8 @@ void tst_QWidgetRepaintManager::scrollWithOverlap()
: QWidget(parent, Qt::WindowStaysOnTopHint)
{
m_scrollArea = new QScrollArea(this);
+ m_scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ m_scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
QWidget *w = new QWidget;
w->setPalette(QPalette(Qt::gray));
w->setAutoFillBackground(true);
@@ -619,6 +749,7 @@ void tst_QWidgetRepaintManager::fastMove()
QCOMPARE(dirtyRegion(scene.yellowChild), QRect(0, 0, 100, 100));
}
QCOMPARE(dirtyRegion(&scene), QRect(0, 0, 25, 100));
+ QTRY_VERIFY(dirtyRegion(&scene).isEmpty());
QVERIFY(compareWidget(&scene));
}
diff --git a/tests/auto/widgets/kernel/qwidgetsvariant/CMakeLists.txt b/tests/auto/widgets/kernel/qwidgetsvariant/CMakeLists.txt
index f387be7306..bb3c1e2ad6 100644
--- a/tests/auto/widgets/kernel/qwidgetsvariant/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qwidgetsvariant/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qwidgetsvariant.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qwidgetsvariant Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwidgetsvariant LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qwidgetsvariant
SOURCES
tst_qwidgetsvariant.cpp
INCLUDE_DIRECTORIES
../../../other/qvariant_common
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/kernel/qwidgetsvariant/tst_qwidgetsvariant.cpp b/tests/auto/widgets/kernel/qwidgetsvariant/tst_qwidgetsvariant.cpp
index d33f734af0..0a03fb9e1d 100644
--- a/tests/auto/widgets/kernel/qwidgetsvariant/tst_qwidgetsvariant.cpp
+++ b/tests/auto/widgets/kernel/qwidgetsvariant/tst_qwidgetsvariant.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 <QTest>
diff --git a/tests/auto/widgets/kernel/qwindowcontainer/CMakeLists.txt b/tests/auto/widgets/kernel/qwindowcontainer/CMakeLists.txt
index 63a3f9632d..787505972f 100644
--- a/tests/auto/widgets/kernel/qwindowcontainer/CMakeLists.txt
+++ b/tests/auto/widgets/kernel/qwindowcontainer/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qwindowcontainer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qwindowcontainer Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qwindowcontainer LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qwindowcontainer
SOURCES
tst_qwindowcontainer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp b/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp
index 9dead3d3ea..e620c5e79a 100644
--- a/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.cpp
+++ b/tests/auto/widgets/kernel/qwindowcontainer/tst_qwindowcontainer.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 <QTest>
@@ -38,6 +13,7 @@
#include <qscreen.h>
#include <qscopedpointer.h>
#include <qevent.h>
+#include <qboxlayout.h>
class Window : public QWindow
@@ -71,16 +47,19 @@ public:
private slots:
void testShow();
void testPositionAndSize();
+ void testSizeHints();
void testExposeObscure();
void testOwnership();
void testBehindTheScenesDeletion();
void testUnparenting();
+ void testReparenting();
void testUnparentReparent();
void testActivation();
void testAncestorChange();
void testDockWidget();
void testNativeContainerParent();
void testPlatformSurfaceEvent();
+ void embedWidgetWindow();
void cleanup();
private:
@@ -132,7 +111,29 @@ void tst_QWindowContainer::testPositionAndSize()
QCOMPARE(window->height(), container->height());
}
+void tst_QWindowContainer::testSizeHints()
+{
+ QScopedPointer<QWidget> tlw(new QWidget);
+ QWindow *window = new QWindow();
+ window->setMinimumSize(QSize(200, 200));
+ window->setGeometry(m_availableGeometry.x() + 300, m_availableGeometry.y() + 400, 500, 600);
+
+ QScopedPointer<QWidget> container(QWidget::createWindowContainer(window));
+ container->setWindowTitle(QTest::currentTestFunction());
+
+ QVBoxLayout *vbox = new QVBoxLayout(tlw.data());
+ vbox->addWidget(container.data());
+ vbox->setContentsMargins(0, 0, 0, 0);
+ // Size hints should work regardless of visibility
+ QCOMPARE(container->minimumSizeHint(), window->minimumSize());
+ QCOMPARE(vbox->minimumSize(), window->minimumSize());
+
+ // Respect dynamic updates
+ window->setMinimumSize(QSize(210, 210));
+ QCOMPARE(container->minimumSizeHint(), window->minimumSize());
+ QCOMPARE(vbox->minimumSize(), window->minimumSize());
+}
void tst_QWindowContainer::testExposeObscure()
{
@@ -231,12 +232,12 @@ void tst_QWindowContainer::testActivation()
void tst_QWindowContainer::testUnparenting()
{
- QWindow *window = new QWindow();
+ QPointer<QWindow> window(new QWindow());
QScopedPointer<QWidget> container(QWidget::createWindowContainer(window));
container->setWindowTitle(QTest::currentTestFunction());
container->setGeometry(m_availableGeometry.x() + 100, m_availableGeometry.y() + 100, 200, 100);
- window->setParent(0);
+ window->setParent(nullptr);
container->show();
@@ -244,6 +245,26 @@ void tst_QWindowContainer::testUnparenting()
// Window should not be made visible by container..
QVERIFY(!window->isVisible());
+
+ container.reset();
+ QVERIFY(window);
+ delete window;
+}
+
+void tst_QWindowContainer::testReparenting()
+{
+ QPointer<QWindow> window1(new QWindow());
+ QScopedPointer<QWindow> window2(new QWindow());
+ QScopedPointer<QWidget> container(QWidget::createWindowContainer(window1));
+
+ window1->setParent(window2.data());
+
+ // Not deleted with container
+ container.reset();
+ QVERIFY(window1);
+ // but deleted with new parent
+ window2.reset();
+ QVERIFY(!window1);
}
void tst_QWindowContainer::testUnparentReparent()
@@ -414,6 +435,39 @@ void tst_QWindowContainer::testPlatformSurfaceEvent()
QVERIFY(ok);
}
+void tst_QWindowContainer::embedWidgetWindow()
+{
+ {
+ QWidget parent;
+ QWidget *widget = new QWidget;
+ widget->show();
+ QVERIFY(QTest::qWaitForWindowExposed(widget));
+ QVERIFY(widget->windowHandle());
+ QPointer<QWindow> widgetWindow = widget->windowHandle();
+ auto *container = QWidget::createWindowContainer(widgetWindow, &parent);
+ QCOMPARE(container, widget);
+ QCOMPARE(widget->parent(), &parent);
+ delete widget;
+ QTRY_VERIFY(widgetWindow.isNull());
+ }
+
+ QPointer<QWidget> widget = new QWidget;
+ QPointer<QWindow> widgetWindow;
+ {
+ QWidget parent;
+ widget->show();
+ QVERIFY(QTest::qWaitForWindowExposed(widget));
+ QVERIFY(widget->windowHandle());
+ widgetWindow = widget->windowHandle();
+ auto *container = QWidget::createWindowContainer(widgetWindow, &parent);
+ QCOMPARE(container, widget);
+ QCOMPARE(widget->parent(), &parent);
+ }
+ QTRY_VERIFY(widget.isNull());
+ QTRY_VERIFY(widgetWindow.isNull());
+
+}
+
QTEST_MAIN(tst_QWindowContainer)
#include "tst_qwindowcontainer.moc"
diff --git a/tests/auto/widgets/styles/CMakeLists.txt b/tests/auto/widgets/styles/CMakeLists.txt
index b1c9d1fce3..a957dfd373 100644
--- a/tests/auto/widgets/styles/CMakeLists.txt
+++ b/tests/auto/widgets/styles/CMakeLists.txt
@@ -1,9 +1,12 @@
-# Generated from styles.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(APPLE)
add_subdirectory(qmacstyle)
endif()
-add_subdirectory(qstyle)
+if(QT_FEATURE_private_tests)
+ add_subdirectory(qstyle)
+endif()
add_subdirectory(qstyleoption)
if(QT_FEATURE_private_tests AND NOT ANDROID AND NOT QNX AND NOT UIKIT)
add_subdirectory(qstylesheetstyle)
diff --git a/tests/auto/widgets/styles/qmacstyle/CMakeLists.txt b/tests/auto/widgets/styles/qmacstyle/CMakeLists.txt
index fcff4fcc21..861a327418 100644
--- a/tests/auto/widgets/styles/qmacstyle/CMakeLists.txt
+++ b/tests/auto/widgets/styles/qmacstyle/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qmacstyle.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmacstyle Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmacstyle LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmacstyle
SOURCES
tst_qmacstyle.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/styles/qmacstyle/tst_qmacstyle.cpp b/tests/auto/widgets/styles/qmacstyle/tst_qmacstyle.cpp
index fd784f9ced..9cfd50bc08 100644
--- a/tests/auto/widgets/styles/qmacstyle/tst_qmacstyle.cpp
+++ b/tests/auto/widgets/styles/qmacstyle/tst_qmacstyle.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 <QTest>
diff --git a/tests/auto/widgets/styles/qstyle/CMakeLists.txt b/tests/auto/widgets/styles/qstyle/CMakeLists.txt
index c3b7b44e28..2c617ebe49 100644
--- a/tests/auto/widgets/styles/qstyle/CMakeLists.txt
+++ b/tests/auto/widgets/styles/qstyle/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qstyle.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstyle Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstyle LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstyle
SOURCES
tst_qstyle.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::TestPrivate
Qt::Widgets
diff --git a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
index 0578d5ce70..95e24da21d 100644
--- a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
+++ b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -92,6 +67,11 @@ private slots:
void testProxyCalled();
void testStyleOptionInit();
+
+ void sliderPositionFromValue_data();
+ void sliderPositionFromValue();
+ void sliderValueFromPosition_data();
+ void sliderValueFromPosition();
private:
bool testAllFunctions(QStyle *);
bool testScrollBarSubControls(const QStyle *style);
@@ -653,7 +633,7 @@ void tst_QStyle::testStyleOptionInit()
QStringList keys = QStyleFactory::keys();
keys.prepend(QString()); // QCommonStyle marker
- for (const QString &key : qAsConst(keys)) {
+ for (const QString &key : std::as_const(keys)) {
QStyle* style = key.isEmpty() ? new QCommonStyle : QStyleFactory::create(key);
TestStyleOptionInitProxy testStyle;
testStyle.setBaseStyle(style);
@@ -662,5 +642,108 @@ void tst_QStyle::testStyleOptionInit()
}
}
+void tst_QStyle::sliderPositionFromValue_data()
+{
+ QTest::addColumn<int>("min");
+ QTest::addColumn<int>("max");
+ QTest::addColumn<int>("value");
+ QTest::addColumn<int>("span");
+ QTest::addColumn<bool>("upsideDown");
+ QTest::addColumn<int>("position");
+
+ QTest::addRow("no span") << 12 << 56 << 34 << 0 << false << 0;
+ QTest::addRow("no span inverse") << 12 << 56 << 34 << 0 << true << 0;
+
+ QTest::addRow("value too small") << 34 << 56 << 12 << 2000 << false << 0;
+ QTest::addRow("value too small inverse") << 34 << 56 << 12 << 2000 << true << 2000;
+
+ QTest::addRow("no-range") << 12 << 12 << 12 << 2000 << false << 0;
+ QTest::addRow("no-range-inverse") << 12 << 12 << 12 << 2000 << true << 0;
+
+ QTest::addRow("close-to-max") << 12 << 34 << 33 << 2000 << false << 1909;
+ QTest::addRow("at-max") << 12 << 34 << 34 << 2000 << false << 2000;
+ QTest::addRow("value too large") << 12 << 34 << 35 << 2000 << false << 2000;
+ QTest::addRow("close-to-max-inverse") << 12 << 34 << 33 << 2000 << true << 91;
+ QTest::addRow("at-max-inverse") << 12 << 34 << 34 << 2000 << true << 0;
+ QTest::addRow("value too large-inverse") << 12 << 34 << 35 << 2000 << true << 0;
+
+ QTest::addRow("big-range") << 100000 << 700000 << 250000 << 2000 << false << 500;
+ QTest::addRow("big-range-inverse") << 100000 << 700000 << 250000 << 2000 << true << 1500;
+
+ QTest::addRow("across-zero") << -1000 << 1000 << -500 << 100 << false << 25;
+ QTest::addRow("across-zero-inverse") << -1000 << 1000 << -500 << 100 << true << 75;
+
+ QTest::addRow("span>range") << 0 << 100 << 60 << 2000 << false << 1200;
+ QTest::addRow("span>range-inverse") << 0 << 100 << 60 << 2000 << true << 800;
+
+ QTest::addRow("overflow1 (QTBUG-101581)") << -1 << INT_MAX << 235 << 891 << false << 0;
+ QTest::addRow("overflow2") << INT_MIN << INT_MAX << 10 << 100 << false << 50;
+ QTest::addRow("overflow2-inverse") << INT_MIN << INT_MAX << 10 << 100 << true << 49;
+ QTest::addRow("overflow3") << INT_MIN << INT_MAX << -10 << 100 << false << 49;
+ QTest::addRow("overflow3-inverse") << INT_MIN << INT_MAX << -10 << 100 << true << 50;
+}
+
+void tst_QStyle::sliderPositionFromValue()
+{
+ QFETCH(int, min);
+ QFETCH(int, max);
+ QFETCH(int, value);
+ QFETCH(int, span);
+ QFETCH(bool, upsideDown);
+ QFETCH(int, position);
+
+ QCOMPARE(QStyle::sliderPositionFromValue(min, max, value, span, upsideDown), position);
+}
+
+void tst_QStyle::sliderValueFromPosition_data()
+{
+ QTest::addColumn<int>("min");
+ QTest::addColumn<int>("max");
+ QTest::addColumn<int>("position");
+ QTest::addColumn<int>("span");
+ QTest::addColumn<bool>("upsideDown");
+ QTest::addColumn<int>("value");
+
+ QTest::addRow("position zero") << 0 << 100 << 0 << 2000 << false << 0;
+ QTest::addRow("position zero inverse") << 0 << 100 << 0 << 2000 << true << 100;
+
+ QTest::addRow("span zero") << 0 << 100 << 1200 << 0 << false << 0;
+ QTest::addRow("span zero inverse") << 0 << 100 << 1200 << 0 << true << 100;
+
+ QTest::addRow("position > span") << -300 << -200 << 2 << 1 << false << -200;
+ QTest::addRow("position > span inverse") << -300 << -200 << 2 << 1 << true << -300;
+
+ QTest::addRow("large") << 0 << 100 << 1200 << 2000 << false << 60;
+ QTest::addRow("large-inverse") << 0 << 100 << 1200 << 2000 << true << 40;
+
+ QTest::addRow("normal") << 0 << 100 << 12 << 20 << false << 60;
+ QTest::addRow("inverse") << 0 << 100 << 12 << 20 << true << 40;
+
+ QTest::addRow("overflow1") << -1 << INT_MAX << 10 << 10 << false << INT_MAX;
+ QTest::addRow("overflow1-inverse") << -1 << INT_MAX << 10 << 10 << true << -1;
+ QTest::addRow("overflow2") << INT_MIN << INT_MAX << 5 << 10 << false << 0;
+ QTest::addRow("overflow2-inverse") << INT_MIN << INT_MAX << 5 << 10 << true << -1;
+ QTest::addRow("overflow3") << INT_MIN << 0 << 0 << 10 << false << INT_MIN;
+ QTest::addRow("overflow3-inverse") << INT_MIN << 0 << 0 << 10 << true << 0;
+
+ QTest::addRow("overflow4") << 0 << INT_MAX << INT_MAX/2-6 << INT_MAX/2-5 << false << INT_MAX-2;
+ QTest::addRow("overflow4-inverse") << 0 << INT_MAX << INT_MAX/2-6 << INT_MAX/2-5 << true << 2;
+
+ QTest::addRow("overflow5") << 0 << 4 << INT_MAX/4 << INT_MAX << false << 1;
+ QTest::addRow("overflow5-inverse") << 0 << 4 << INT_MAX/4 << INT_MAX << true << 3;
+}
+
+void tst_QStyle::sliderValueFromPosition()
+{
+ QFETCH(int, min);
+ QFETCH(int, max);
+ QFETCH(int, position);
+ QFETCH(int, span);
+ QFETCH(bool, upsideDown);
+ QFETCH(int, value);
+
+ QCOMPARE(QStyle::sliderValueFromPosition(min, max, position, span, upsideDown), value);
+}
+
QTEST_MAIN(tst_QStyle)
#include "tst_qstyle.moc"
diff --git a/tests/auto/widgets/styles/qstyleoption/CMakeLists.txt b/tests/auto/widgets/styles/qstyleoption/CMakeLists.txt
index 05853dfb62..e0a4cc38e2 100644
--- a/tests/auto/widgets/styles/qstyleoption/CMakeLists.txt
+++ b/tests/auto/widgets/styles/qstyleoption/CMakeLists.txt
@@ -1,16 +1,20 @@
-# Generated from qstyleoption.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstyleoption Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstyleoption LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstyleoption
SOURCES
tst_qstyleoption.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qstyleoption.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/auto/widgets/styles/qstyleoption/tst_qstyleoption.cpp b/tests/auto/widgets/styles/qstyleoption/tst_qstyleoption.cpp
index a08b251c35..f173c9a8df 100644
--- a/tests/auto/widgets/styles/qstyleoption/tst_qstyleoption.cpp
+++ b/tests/auto/widgets/styles/qstyleoption/tst_qstyleoption.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 <QTest>
diff --git a/tests/auto/widgets/styles/qstylesheetstyle/CMakeLists.txt b/tests/auto/widgets/styles/qstylesheetstyle/CMakeLists.txt
index bf4e52862c..6543ec9961 100644
--- a/tests/auto/widgets/styles/qstylesheetstyle/CMakeLists.txt
+++ b/tests/auto/widgets/styles/qstylesheetstyle/CMakeLists.txt
@@ -1,37 +1,33 @@
-# Generated from qstylesheetstyle.pro.
-
-if(NOT QT_FEATURE_private_tests)
- return()
-endif()
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstylesheetstyle Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstylesheetstyle LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+# Resources:
+set(resources_resource_files
+ "images/testimage.png"
+ "images/testimage@2x.png"
+)
+
qt_internal_add_test(tst_qstylesheetstyle
SOURCES
tst_qstylesheetstyle.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::TestPrivate
Qt::Widgets
Qt::WidgetsPrivate
+ TESTDATA ${resources_resource_files}
+ BUILTIN_TESTDATA
)
-# Resources:
-set(resources_resource_files
- "images/testimage.png"
- "images/testimage@2x.png"
-)
-
-qt_internal_add_resource(tst_qstylesheetstyle "resources"
- PREFIX
- "/"
- FILES
- ${resources_resource_files}
-)
-
-
-#### Keys ignored in scope 1:.:.:qstylesheetstyle.pro:<TRUE>:
# _REQUIREMENTS = "qtConfig(private_tests)"
diff --git a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
index 492b206019..aba5d906d1 100644
--- a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
+++ b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets/QApplication>
#include <QtWidgets/QCheckBox>
@@ -63,6 +38,8 @@
#include <private/qstylesheetstyle_p.h>
#include <private/qhighdpiscaling_p.h>
#include <QtTest/private/qtesthelpers_p.h>
+#include <qpa/qplatformtheme.h>
+#include <QtWidgets/private/qapplication_p.h>
using namespace QTestPrivate;
@@ -117,6 +94,7 @@ private slots:
void proxyStyle();
void dialogButtonBox();
void emptyStyleSheet();
+ void toolTip_data();
void toolTip();
void embeddedFonts();
void opaquePaintEvent_data();
@@ -129,6 +107,7 @@ private slots:
void QTBUG36933_brokenPseudoClassLookup();
void styleSheetChangeBeforePolish();
void placeholderColor();
+ void accent();
void enumPropertySelector_data();
void enumPropertySelector();
//at the end because it mess with the style.
@@ -143,6 +122,8 @@ private slots:
void iconSizes_data();
void iconSizes();
+ void inheritWidgetPalette_data();
+ void inheritWidgetPalette();
private:
static QColor COLOR(const QWidget &w)
@@ -984,7 +965,7 @@ void tst_QStyleSheetStyle::focusColors()
// ten pixels of the right color requires quite a many characters, as the
// majority of the pixels will have slightly different colors due to the
// anti-aliasing effect.
-#if !defined(Q_OS_WIN32) && !(defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(Q_CC_INTEL))
+#if !defined(Q_OS_WIN32) && !(defined(Q_OS_LINUX) && defined(Q_CC_GNU))
QSKIP("This is a fragile test which fails on many esoteric platforms because of focus problems"
" (for example, QTBUG-33959)."
"That doesn't mean that the feature doesn't work in practice.");
@@ -999,7 +980,7 @@ void tst_QStyleSheetStyle::focusColors()
centerOnScreen(&frame);
frame.show();
- QApplication::setActiveWindow(&frame);
+ QApplicationPrivate::setActiveWindow(&frame);
QVERIFY(QTest::qWaitForWindowActive(&frame));
for (QWidget *widget : frame.widgets()) {
@@ -1045,7 +1026,7 @@ void tst_QStyleSheetStyle::hoverColors()
QCursor::setPos(frame.geometry().topLeft() - QPoint(100, 0));
frame.show();
- QApplication::setActiveWindow(&frame);
+ QApplicationPrivate::setActiveWindow(&frame);
QVERIFY(QTest::qWaitForWindowActive(&frame));
QWindow *frameWindow = frame.windowHandle();
@@ -1220,20 +1201,31 @@ void tst_QStyleSheetStyle::tabAlignment()
void tst_QStyleSheetStyle::tabFont_data()
{
- QTest::addColumn<int>("pixelSize");
+ QTest::addColumn<QFont>("tabFont");
QTest::addColumn<QTabWidget::TabPosition>("tabPosition");
+ QTest::addColumn<bool>("closable");
- QTest::newRow("medium, horizontal") << 24 << QTabWidget::North;
- QTest::newRow("large, vertical") << 36 << QTabWidget::West;
-}
+ QFont medium;
+ medium.setPixelSize(24);
+ QFont large;
+ large.setPixelSize(36);
+ QFont bold;
+ bold.setBold(true);
-#include <QApplication>
+ QTest::newRow("medium, horizontal") << medium << QTabWidget::North << false;
+ QTest::newRow("large, vertical") << large << QTabWidget::West << false;
+ QTest::newRow("bold, horizontal, closable") << bold << QTabWidget::North << true;
+ QTest::newRow("bold, vertical, closable") << bold << QTabWidget::West << true;
+}
void tst_QStyleSheetStyle::tabFont()
{
- QFETCH(int, pixelSize);
+ QFETCH(QFont, tabFont);
QFETCH(QTabWidget::TabPosition, tabPosition);
+ QFETCH(bool, closable);
const bool vertical = tabPosition == QTabWidget::West || tabPosition == QTabWidget::East;
+ const QString tab0Text("Tab title");
+ const QString tab1Text("Very Long Tab title");
// macOS style centers tabs and messes up the test
QWindowsStyle windowsStyle;
@@ -1242,18 +1234,22 @@ void tst_QStyleSheetStyle::tabFont()
topLevel.setWindowTitle(QTest::currentTestFunction());
QTabWidget tabWidget;
tabWidget.setStyle(&windowsStyle);
- tabWidget.addTab(new QWidget,"Tab title");
tabWidget.setTabPosition(tabPosition);
+ tabWidget.addTab(new QWidget, tab0Text);
+ tabWidget.addTab(new QWidget, tab1Text);
QTabWidget styledWidget;
styledWidget.setStyle(&windowsStyle);
styledWidget.setTabPosition(tabPosition);
- styledWidget.addTab(new QWidget,"Tab title");
+ styledWidget.addTab(new QWidget, tab0Text);
+ styledWidget.addTab(new QWidget, tab1Text);
QTabBar *bar = tabWidget.tabBar();
QTabBar *styledBar = styledWidget.tabBar();
QVERIFY(bar && styledBar);
bar->setStyle(&windowsStyle);
+ bar->setTabsClosable(closable);
styledBar->setStyle(&windowsStyle);
+ styledBar->setTabsClosable(closable);
QBoxLayout box(vertical ? QBoxLayout::LeftToRight : QBoxLayout::TopToBottom);
box.addWidget(&tabWidget);
@@ -1265,22 +1261,36 @@ void tst_QStyleSheetStyle::tabFont()
topLevel.show();
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+ const QFont defaultFont = tabWidget.font();
+ if (QFontMetrics(defaultFont).size(Qt::TextShowMnemonic, tab0Text).width() >=
+ QFontMetrics(tabFont).size(Qt::TextShowMnemonic, tab0Text).width()) {
+ QSKIP("The used font is not larger when bold");
+ }
+
const QRect defaultRect = bar->tabRect(0);
QCOMPARE(styledBar->tabRect(0), defaultRect);
- QFont font;
- font.setPointSize(pixelSize);
- tabWidget.setFont(font);
-
+ tabWidget.setFont(tabFont);
const QRect rectWithFont = bar->tabRect(0);
if (vertical)
QVERIFY(rectWithFont.height() > defaultRect.height());
else
QVERIFY(rectWithFont.width() > defaultRect.width());
- styledWidget.setStyleSheet(QString("QTabBar { font-size: %1pt; }").arg(pixelSize));
+ QString styleSheet = "QTabBar::tab:first {";
+ if (tabFont.pixelSize() != -1)
+ styleSheet += QString(" font-size: %1px;").arg(tabFont.pixelSize());
+ if (tabFont.bold())
+ styleSheet += " font-weight: bold;";
+ styleSheet += "}";
+
+ styledWidget.setStyleSheet(styleSheet);
const QRect rectWithStyle = styledBar->tabRect(0);
- QCOMPARE(rectWithStyle.size(), rectWithFont.size());
+
+ if (vertical)
+ QCOMPARE(rectWithStyle.height(), rectWithFont.height());
+ else
+ QCOMPARE(rectWithStyle.width(), rectWithFont.width());
}
void tst_QStyleSheetStyle::attributesList()
@@ -1649,19 +1659,32 @@ private:
const QString m_oldStyleName;
};
+void tst_QStyleSheetStyle::toolTip_data()
+{
+ QTest::addColumn<QString>("style");
+
+ QTest::newRow("fusion") << QString("Fusion");
+#ifdef Q_OS_WINDOWS
+ QTest::newRow("windowsvista") << QString("WindowsVista");
+#endif
+}
+
void tst_QStyleSheetStyle::toolTip()
{
+ QFETCH(QString, style);
+
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
QSKIP("Wayland: This fails. Figure out why.");
- qApp->setStyleSheet(QString());
QWidget w;
w.resize(m_testSize);
w.setWindowTitle(QTest::currentTestFunction());
+
// Use "Fusion" to prevent the Vista style from clobbering the tooltip palette in polish().
- QStyle *fusionStyle = QStyleFactory::create(QLatin1String("Fusion"));
- QVERIFY(fusionStyle);
- ApplicationStyleSetter as(fusionStyle);
+ QStyle *appStyle = QStyleFactory::create(style);
+ QVERIFY(appStyle);
+ ApplicationStyleSetter as(appStyle);
+
QHBoxLayout layout(&w);
w.setLayout(&layout);
@@ -1689,37 +1712,66 @@ void tst_QStyleSheetStyle::toolTip()
wid4->setToolTip("this is wid4");
wid4->setObjectName("wid4");
+ QWidget *wid5 = new QPushButton("wid5", &w);
+ layout.addWidget(wid5);
+ wid5->setStyleSheet("QToolTip { background: #ff0; color: #f00 }");
+ wid5->setToolTip("this is wid5");
+ wid5->setObjectName("wid5");
+
centerOnScreen(&w);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
- const QColor normalToolTip = QToolTip::palette().color(QPalette::Inactive, QPalette::ToolTipBase);
+ QColor normalToolTipBgColor = QToolTip::palette().color(QPalette::Inactive, QPalette::ToolTipBase);
+
+#ifdef Q_OS_MACOS
+ // macOS uses tool tip text color set in label palette
+ const QPalette *labelPalette = QGuiApplicationPrivate::platformTheme()->palette(QPlatformTheme::LabelPalette);
+ QColor normalToolTipFgColor = labelPalette->color(QPalette::Inactive, QPalette::ToolTipText);
+#else
+ QColor normalToolTipFgColor = QToolTip::palette().color(QPalette::Inactive, QPalette::ToolTipText);
+#endif
+
// Tooltip on the widget without stylesheet, then to other widget,
// including one without stylesheet (the tooltip will be reused,
// but its color must change)
- const QWidgetList widgets{wid4, wid1, wid2, wid3, wid4};
- const QList<QColor> colors { normalToolTip, QColor("#ae2"), QColor("#f81"), QColor("#0b8"),
- normalToolTip };
+ const QWidgetList widgets{wid4, wid1, wid2, wid3, wid4, wid5};
+ const QList<QColor> bgcolors { normalToolTipBgColor, QColor("#ae2"), QColor("#f81"),
+ QColor("#0b8"), normalToolTipBgColor, QColor("#ff0")};
+ const QList<QColor> fgcolors { normalToolTipFgColor, normalToolTipFgColor, normalToolTipFgColor,
+ normalToolTipFgColor, normalToolTipFgColor, QColor("#f00")};
QWidgetList topLevels;
- for (int i = 0; i < widgets.count() ; ++i) {
+ for (int i = 0; i < widgets.size() ; ++i) {
QWidget *wid = widgets.at(i);
- QColor col = colors.at(i);
+ QColor bgColor = bgcolors.at(i);
+ QColor fgColor = fgcolors.at(i);
QToolTip::showText( QPoint(0,0) , "This is " + wid->objectName(), wid);
topLevels = QApplication::topLevelWidgets();
QWidget *tooltip = nullptr;
- for (QWidget *widget : qAsConst(topLevels)) {
+ for (QWidget *widget : std::as_const(topLevels)) {
if (widget->inherits("QTipLabel")) {
tooltip = widget;
break;
}
}
+
QVERIFY(tooltip);
QTRY_VERIFY(tooltip->isVisible()); // Wait until Roll-Effect is finished (Windows Vista)
- QCOMPARE(tooltip->palette().color(tooltip->backgroundRole()), col);
+
+#ifdef Q_OS_WINDOWS
+ // If tooltip palette contains empty resolve mask, validate with inherited palette
+ if (!tooltip->palette().resolveMask()) {
+ bgColor = w.palette().color(tooltip->backgroundRole());
+ fgColor = w.palette().color(tooltip->foregroundRole());
+ }
+#endif
+
+ QCOMPARE(tooltip->palette().color(tooltip->backgroundRole()), bgColor);
+ QCOMPARE(tooltip->palette().color(tooltip->foregroundRole()), fgColor);
}
QToolTip::showText( QPoint(0,0) , "This is " + wid3->objectName(), wid3);
@@ -1727,7 +1779,7 @@ void tst_QStyleSheetStyle::toolTip()
delete wid3; //should not crash;
QTest::qWait(10);
topLevels = QApplication::topLevelWidgets();
- for (QWidget *widget : qAsConst(topLevels))
+ for (QWidget *widget : std::as_const(topLevels))
widget->update(); //should not crash either
}
@@ -1837,7 +1889,7 @@ void tst_QStyleSheetStyle::complexWidgetFocus()
centerOnScreen(&frame);
frame.show();
- QApplication::setActiveWindow(&frame);
+ QApplicationPrivate::setActiveWindow(&frame);
QVERIFY(QTest::qWaitForWindowActive(&frame));
for (QWidget *widget : widgets) {
widget->setFocus();
@@ -1926,7 +1978,7 @@ void tst_QStyleSheetStyle::task232085_spinBoxLineEditBg()
centerOnScreen(&frame);
frame.show();
- QApplication::setActiveWindow(&frame);
+ QApplicationPrivate::setActiveWindow(&frame);
spinbox->setFocus();
QVERIFY(QTest::qWaitForWindowActive(&frame));
@@ -2062,7 +2114,7 @@ void tst_QStyleSheetStyle::QTBUG36933_brokenPseudoClassLookup()
QVERIFY(QTest::qWaitForWindowExposed(&widget));
widget.activateWindow();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
QVERIFY(QTest::qWaitForWindowActive(&widget));
QHeaderView *verticalHeader = widget.verticalHeader();
@@ -2335,11 +2387,32 @@ void tst_QStyleSheetStyle::placeholderColor()
QLineEdit le2;
le2.setEnabled(false);
le1.ensurePolished();
- QCOMPARE(le1.palette().placeholderText(), red);
+ QColor phColor = le1.palette().placeholderText().color();
+ QCOMPARE(phColor.rgb(), red.rgb());
+ QVERIFY(phColor.alpha() < red.alpha());
+
le2.ensurePolished();
- QCOMPARE(le2.palette().placeholderText(), red);
+ phColor = le2.palette().placeholderText().color();
+ QCOMPARE(phColor.rgb(), red.rgb());
+ QVERIFY(phColor.alpha() < red.alpha());
+
le2.setEnabled(true);
- QCOMPARE(le2.palette().placeholderText(), red);
+ phColor = le2.palette().placeholderText().color();
+ QCOMPARE(phColor.rgb(), red.rgb());
+ QVERIFY(phColor.alpha() < red.alpha());
+
+ const char *phSpec = "#aabbccdd";
+ le1.setStyleSheet(QString("QLineEdit { placeholder-text-color: %1; }").arg(phSpec));
+ QCOMPARE(le1.palette().placeholderText().color(), QColor(phSpec));
+}
+
+void tst_QStyleSheetStyle::accent()
+{
+ QLineEdit lineEdit;
+ const QColor universe(42, 42, 42);
+ lineEdit.setStyleSheet(QString("QLineEdit { accent-color: %1; }").arg(universe.name()));
+ lineEdit.ensurePolished();
+ QCOMPARE(lineEdit.palette().accent().color(), universe);
}
void tst_QStyleSheetStyle::enumPropertySelector_data()
@@ -2436,6 +2509,31 @@ void tst_QStyleSheetStyle::iconSizes()
QCOMPARE(button.iconSize(), iconSize);
}
+void tst_QStyleSheetStyle::inheritWidgetPalette_data()
+{
+ QTest::addColumn<const QString>("styleSheet");
+ QTest::addColumn<const QColor>("phColorPalette");
+
+ QTest::addRow("blueAndGreen") << "QLineEdit {color: rgb(0,0,255);}" << QColor(Qt::green);
+ QTest::addRow("emptyStyleSheet") << QString() << QColor(Qt::green);
+
+}
+
+void tst_QStyleSheetStyle::inheritWidgetPalette()
+{
+ QFETCH(const QString, styleSheet);
+ QFETCH(const QColor, phColorPalette);
+
+ QLineEdit edit;
+ QPalette palette = edit.palette();
+ palette.setBrush(QPalette::PlaceholderText, phColorPalette);
+ edit.setPalette(palette);
+ edit.setStyleSheet(styleSheet);
+ const QColor phColor = edit.palette().placeholderText().color();
+
+ QCOMPARE(phColor, phColorPalette);
+}
+
QTEST_MAIN(tst_QStyleSheetStyle)
#include "tst_qstylesheetstyle.moc"
diff --git a/tests/auto/widgets/util/CMakeLists.txt b/tests/auto/widgets/util/CMakeLists.txt
index 20accb3150..31725573c7 100644
--- a/tests/auto/widgets/util/CMakeLists.txt
+++ b/tests/auto/widgets/util/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from util.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qcompleter)
add_subdirectory(qscroller)
diff --git a/tests/auto/widgets/util/qcompleter/BLACKLIST b/tests/auto/widgets/util/qcompleter/BLACKLIST
index 367270fdf2..5487a1fe44 100644
--- a/tests/auto/widgets/util/qcompleter/BLACKLIST
+++ b/tests/auto/widgets/util/qcompleter/BLACKLIST
@@ -1,6 +1,2 @@
[QTBUG_14292_filesystem]
-ubuntu-16.04
opensuse-leap
-rhel-7.4
-rhel-6.6
-opensuse-42.3
diff --git a/tests/auto/widgets/util/qcompleter/CMakeLists.txt b/tests/auto/widgets/util/qcompleter/CMakeLists.txt
index 5d4ff347a2..a96945771f 100644
--- a/tests/auto/widgets/util/qcompleter/CMakeLists.txt
+++ b/tests/auto/widgets/util/qcompleter/CMakeLists.txt
@@ -1,17 +1,22 @@
-# Generated from qcompleter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcompleter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcompleter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcompleter
SOURCES
tst_qcompleter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::TestPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
-
-#### Keys ignored in scope 1:.:.:qcompleter.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp
index 51a75573a4..8b151ec242 100644
--- a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp
+++ b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp
@@ -1,36 +1,10 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QtGui>
#include <QtWidgets>
#include <QtDebug>
-#include <QPair>
#include <QList>
#include <QPointer>
#include <QSignalSpy>
@@ -41,6 +15,8 @@
#include <memory>
+#include <QtWidgets/private/qapplication_p.h>
+
Q_DECLARE_METATYPE(QCompleter::CompletionMode)
using namespace QTestPrivate;
@@ -82,7 +58,7 @@ QString CsvCompleter::pathFromIndex(const QModelIndex &sourceIndex) const
idx = parent.sibling(parent.row(), sourceIndex.column());
} while (idx.isValid());
- return list.count() == 1 ? list.constFirst() : list.join(QLatin1Char(','));
+ return list.size() == 1 ? list.constFirst() : list.join(QLatin1Char(','));
}
class tst_QCompleter : public QObject
@@ -145,6 +121,8 @@ private slots:
void QTBUG_14292_filesystem();
void QTBUG_52028_tabAutoCompletes();
void QTBUG_51889_activatedSentTwice();
+ void showPopupInGraphicsView();
+ void inheritedEventFilter();
private:
void filter(bool assync = false);
@@ -175,6 +153,16 @@ tst_QCompleter::~tst_QCompleter()
delete completer;
}
+#ifdef Q_OS_ANDROID
+static QString androidHomePath()
+{
+ const auto homePaths = QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
+ QDir dir = homePaths.isEmpty() ? QDir() : homePaths.first();
+ dir.cdUp();
+ return dir.path();
+}
+#endif
+
void tst_QCompleter::setSourceModel(ModelType type)
{
QTreeWidgetItem *parent, *child;
@@ -227,7 +215,13 @@ void tst_QCompleter::setSourceModel(ModelType type)
completer->setCsvCompletion(false);
{
auto m = new QFileSystemModel(completer);
+#ifdef Q_OS_ANDROID
+ // Android 11 and above doesn't allow accessing root filesystem as before,
+ // so let's opt int for the app's home.
+ m->setRootPath(androidHomePath());
+#else
m->setRootPath("/");
+#endif
completer->setModel(m);
}
completer->setCompletionColumn(0);
@@ -614,7 +608,9 @@ void tst_QCompleter::fileSystemModel_data()
// QTest::newRow("(/d)") << "/d" << "" << "Developer" << "/Developer";
#elif defined(Q_OS_ANDROID)
QTest::newRow("()") << "" << "" << "/" << "/";
- QTest::newRow("(/et)") << "/et" << "" << "etc" << "/etc";
+ const QString androidDir = androidHomePath();
+ const QString tag = QStringLiteral("%1/fil").arg(androidDir);
+ QTest::newRow(tag.toUtf8().data()) << tag << "" << "files" << androidDir + "/files";
#else
QTest::newRow("()") << "" << "" << "/" << "/";
#if !defined(Q_OS_AIX) && !defined(Q_OS_HPUX) && !defined(Q_OS_QNX)
@@ -1064,7 +1060,7 @@ void tst_QCompleter::multipleWidgets()
window.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
window.move(200, 200);
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
QFocusEvent focusIn(QEvent::FocusIn);
@@ -1076,7 +1072,7 @@ void tst_QCompleter::multipleWidgets()
comboBox->setFocus();
comboBox->show();
window.activateWindow();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
QCOMPARE(QApplication::focusWidget(), comboBox);
comboBox->lineEdit()->setText("it");
@@ -1111,7 +1107,7 @@ void tst_QCompleter::focusIn()
window.move(200, 200);
window.show();
window.activateWindow();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
auto comboBox = new QComboBox(&window);
@@ -1182,10 +1178,10 @@ void tst_QCompleter::disabledItems()
QAbstractItemView *view = lineEdit.completer()->popup();
QVERIFY(view->isVisible());
QTest::mouseClick(view->viewport(), Qt::LeftButton, {}, view->visualRect(view->model()->index(0, 0)).center());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QVERIFY(view->isVisible());
QTest::mouseClick(view->viewport(), Qt::LeftButton, {}, view->visualRect(view->model()->index(1, 0)).center());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(!view->isVisible());
}
@@ -1199,10 +1195,10 @@ void tst_QCompleter::task178797_activatedOnReturn()
auto completer = new QCompleter({"foobar1", "foobar2"}, &ledit);
ledit.setCompleter(completer);
QSignalSpy spy(completer, QOverload<const QString &>::of(&QCompleter::activated));
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
ledit.move(200, 200);
ledit.show();
- QApplication::setActiveWindow(&ledit);
+ QApplicationPrivate::setActiveWindow(&ledit);
QVERIFY(QTest::qWaitForWindowActive(&ledit));
QTest::keyClick(&ledit, Qt::Key_F);
QCoreApplication::processEvents();
@@ -1211,7 +1207,7 @@ void tst_QCompleter::task178797_activatedOnReturn()
QCoreApplication::processEvents();
QTest::keyClick(QApplication::activePopupWidget(), Qt::Key_Return);
QCoreApplication::processEvents();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
class task189564_StringListModel : public QStringListModel
@@ -1286,14 +1282,14 @@ void tst_QCompleter::task246056_setCompletionPrefix()
comboBox.addItem("a2");
comboBox.move(200, 200);
comboBox.show();
- QApplication::setActiveWindow(&comboBox);
+ QApplicationPrivate::setActiveWindow(&comboBox);
QVERIFY(QTest::qWaitForWindowActive(&comboBox));
QSignalSpy spy(comboBox.completer(), QOverload<const QModelIndex &>::of(&QCompleter::activated));
QTest::keyPress(&comboBox, 'a');
QTest::keyPress(comboBox.completer()->popup(), Qt::Key_Down);
QTest::keyPress(comboBox.completer()->popup(), Qt::Key_Down);
QTest::keyPress(comboBox.completer()->popup(), Qt::Key_Enter); // don't crash!
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
const auto index = spy.at(0).constFirst().toModelIndex();
QVERIFY(!index.isValid());
}
@@ -1352,7 +1348,7 @@ void tst_QCompleter::task250064_lostFocus()
task250064_Widget widget;
widget.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
widget.show();
- QApplication::setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
QVERIFY(QTest::qWaitForWindowActive(&widget));
QTest::keyPress(widget.textEdit(), 'a');
Qt::FocusPolicy origPolicy = widget.textEdit()->focusPolicy();
@@ -1397,7 +1393,7 @@ void tst_QCompleter::task253125_lineEditCompletion()
edit.move(200, 200);
edit.show();
edit.setFocus();
- QApplication::setActiveWindow(&edit);
+ QApplicationPrivate::setActiveWindow(&edit);
QVERIFY(QTest::qWaitForWindowActive(&edit));
QTest::keyClick(&edit, 'i');
@@ -1560,7 +1556,7 @@ void tst_QCompleter::task247560_keyboardNavigation()
edit.move(200, 200);
edit.show();
edit.setFocus();
- QApplication::setActiveWindow(&edit);
+ QApplicationPrivate::setActiveWindow(&edit);
QVERIFY(QTest::qWaitForWindowActive(&edit));
QTest::keyClick(&edit, 'r');
@@ -1660,6 +1656,7 @@ void tst_QCompleter::QTBUG_14292_filesystem()
// to pop up the completion list due to file changed signals.
FileSystem fs;
QFileSystemModel model;
+ QSignalSpy filesAddedSpy(&model, &QAbstractItemModel::rowsInserted);
model.setRootPath(fs.path());
QVERIFY(fs.createDirectory(QLatin1String(testDir1)));
@@ -1673,7 +1670,7 @@ void tst_QCompleter::QTBUG_14292_filesystem()
edit.move(200, 200);
edit.show();
- QApplication::setActiveWindow(&edit);
+ QApplicationPrivate::setActiveWindow(&edit);
QVERIFY(QTest::qWaitForWindowActive(&edit));
QCOMPARE(QApplication::activeWindow(), &edit);
edit.setFocus();
@@ -1689,6 +1686,7 @@ void tst_QCompleter::QTBUG_14292_filesystem()
QTRY_VERIFY(comp.popup()->isVisible());
QCOMPARE(comp.popup()->model()->rowCount(), 2);
QApplication::processEvents();
+ QCOMPARE(qApp->focusObject(), &edit); // for QTBUG_108522
QTest::keyClick(&edit, 'h');
QCOMPARE(comp.popup()->model()->rowCount(), 2);
QTest::keyClick(&edit, 'e');
@@ -1696,13 +1694,16 @@ void tst_QCompleter::QTBUG_14292_filesystem()
QTest::keyClick(&edit, 'r');
QTRY_VERIFY(!comp.popup()->isVisible());
QVERIFY(fs.createDirectory(QStringLiteral("hero")));
+ if (!filesAddedSpy.wait())
+ QSKIP("File system model didn't notify about new directory, skipping tests");
QTRY_VERIFY(comp.popup()->isVisible());
QCOMPARE(comp.popup()->model()->rowCount(), 1);
QTest::keyClick(comp.popup(), Qt::Key_Escape);
QTRY_VERIFY(!comp.popup()->isVisible());
QVERIFY(fs.createDirectory(QStringLiteral("nothingThere")));
//there is no reason creating a file should open a popup, it did in Qt 4.7.0
- QTest::qWait(60);
+ if (!filesAddedSpy.wait())
+ QSKIP("File system model didn't notify about new file, skipping tests");
QVERIFY(!comp.popup()->isVisible());
QTest::keyClick(&edit, Qt::Key_Backspace);
@@ -1714,13 +1715,14 @@ void tst_QCompleter::QTBUG_14292_filesystem()
QWidget w;
w.move(400, 200);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QVERIFY(!edit.hasFocus() && !comp.popup()->hasFocus());
QVERIFY(fs.createDirectory(QStringLiteral("hemo")));
//there is no reason creating a file should open a popup, it did in Qt 4.7.0
- QTest::qWait(60);
+ if (!filesAddedSpy.wait())
+ QSKIP("File system model didn't notify about new file, skipping tests");
QVERIFY(!comp.popup()->isVisible());
}
@@ -1750,7 +1752,7 @@ void tst_QCompleter::QTBUG_52028_tabAutoCompletes()
const auto pos = w.screen()->availableGeometry().topLeft() + QPoint(200,200);
w.move(pos);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QSignalSpy activatedSpy(&cbox, &QComboBox::activated);
@@ -1762,10 +1764,10 @@ void tst_QCompleter::QTBUG_52028_tabAutoCompletes()
QTRY_VERIFY(cbox.completer()->popup()->isVisible());
QTest::keyClick(cbox.completer()->popup(), Qt::Key_Tab);
QCOMPARE(cbox.completer()->currentCompletion(), QLatin1String("hux"));
- QCOMPARE(activatedSpy.count(), 0);
+ QCOMPARE(activatedSpy.size(), 0);
QEXPECT_FAIL("", "QTBUG-52028 will not be fixed today.", Abort);
QCOMPARE(cbox.currentText(), QLatin1String("hux"));
- QCOMPARE(activatedSpy.count(), 0);
+ QCOMPARE(activatedSpy.size(), 0);
QVERIFY(!le->hasFocus());
}
@@ -1794,7 +1796,7 @@ void tst_QCompleter::QTBUG_51889_activatedSentTwice()
const auto pos = w.screen()->availableGeometry().topLeft() + QPoint(200,200);
w.move(pos);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QSignalSpy activatedSpy(&cbox, &QComboBox::activated);
@@ -1806,7 +1808,7 @@ void tst_QCompleter::QTBUG_51889_activatedSentTwice()
QTRY_VERIFY(cbox.completer()->popup()->isVisible());
QTest::keyClick(cbox.completer()->popup(), Qt::Key_Down);
QTest::keyClick(cbox.completer()->popup(), Qt::Key_Return);
- QTRY_COMPARE(activatedSpy.count(), 1);
+ QTRY_COMPARE(activatedSpy.size(), 1);
// Navigate + enter activates only once (non-first item)
cbox.lineEdit()->clear();
@@ -1816,7 +1818,7 @@ void tst_QCompleter::QTBUG_51889_activatedSentTwice()
QTRY_VERIFY(cbox.completer()->popup()->isVisible());
QTest::keyClick(cbox.completer()->popup(), Qt::Key_Down);
QTest::keyClick(cbox.completer()->popup(), Qt::Key_Return);
- QTRY_COMPARE(activatedSpy.count(), 1);
+ QTRY_COMPARE(activatedSpy.size(), 1);
// Full text + enter activates only once
cbox.lineEdit()->clear();
@@ -1825,7 +1827,78 @@ void tst_QCompleter::QTBUG_51889_activatedSentTwice()
QVERIFY(cbox.completer()->popup());
QTRY_VERIFY(cbox.completer()->popup()->isVisible());
QTest::keyClick(&cbox, Qt::Key_Return);
- QTRY_COMPARE(activatedSpy.count(), 1);
+ QTRY_COMPARE(activatedSpy.size(), 1);
+}
+
+void tst_QCompleter::showPopupInGraphicsView()
+{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Wayland: Skip this test, see also QTBUG-107186");
+
+ QGraphicsView view;
+ QGraphicsScene scene;
+ view.setScene(&scene);
+
+ QLineEdit lineEdit;
+ lineEdit.setCompleter(new QCompleter({"alpha", "omega", "omicron", "zeta"}));
+ scene.addWidget(&lineEdit);
+
+ view.move(view.screen()->availableGeometry().topLeft() + QPoint(10, 10));
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ // show popup under line edit
+ QTest::keyClick(&lineEdit, Qt::Key_A);
+ QVERIFY(lineEdit.completer()->popup());
+ QVERIFY(lineEdit.completer()->popup()->isVisible());
+ QCOMPARE(lineEdit.completer()->popup()->geometry().x(), lineEdit.mapToGlobal(QPoint(0, 0)).x());
+ QVERIFY(lineEdit.completer()->popup()->geometry().top() >= (lineEdit.mapToGlobal(QPoint(0, lineEdit.height() - 1)).y() - 1));
+
+ // move widget to the bottom of screen
+ lineEdit.clear();
+ int y = view.screen()->availableGeometry().height() - lineEdit.geometry().y();
+ view.move(view.geometry().x(), y);
+
+ // show popup above line edit
+ QTest::keyClick(&lineEdit, Qt::Key_A);
+ QVERIFY(lineEdit.completer()->popup()->geometry().bottom() < lineEdit.mapToGlobal(QPoint(0, 0)).y());
+}
+
+void tst_QCompleter::inheritedEventFilter()
+{
+ class Completer : public QCompleter
+ {
+ public:
+ explicit Completer(QWidget *parent) : QCompleter(parent)
+ {
+ Q_ASSERT(parent);
+ setPopup(new QListView());
+ popup()->installEventFilter(this);
+ }
+
+ bool m_popupChildAdded = false;
+
+ protected:
+ bool eventFilter(QObject *watched, QEvent *event) override
+ {
+ if (watched == popup() && event->type() == QEvent::ChildAdded)
+ m_popupChildAdded = true;
+
+ return QCompleter::eventFilter(watched, event);
+ }
+ };
+
+ QComboBox comboBox;
+ comboBox.setEditable(true);
+ Completer *completer = new Completer(&comboBox);
+ comboBox.setCompleter(completer);
+
+ // comboBox.show() must not crash with an infinite loop in the event filter
+ comboBox.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&comboBox));
+
+ // Since event orders are platform dependent, only the the ChildAdded event is checked.
+ QVERIFY(QTest::qWaitFor([completer](){return completer->m_popupChildAdded; }));
}
QTEST_MAIN(tst_QCompleter)
diff --git a/tests/auto/widgets/util/qscroller/CMakeLists.txt b/tests/auto/widgets/util/qscroller/CMakeLists.txt
index 11e13cdd9f..2beee70109 100644
--- a/tests/auto/widgets/util/qscroller/CMakeLists.txt
+++ b/tests/auto/widgets/util/qscroller/CMakeLists.txt
@@ -1,14 +1,22 @@
-# Generated from qscroller.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qscroller Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qscroller LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qscroller
SOURCES
tst_qscroller.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/util/qscroller/tst_qscroller.cpp b/tests/auto/widgets/util/qscroller/tst_qscroller.cpp
index e3789ab645..a328b0c8d7 100644
--- a/tests/auto/widgets/util/qscroller/tst_qscroller.cpp
+++ b/tests/auto/widgets/util/qscroller/tst_qscroller.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the $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 <QtGui>
#include <QtWidgets>
@@ -33,6 +8,8 @@
#include <QtGui/private/qeventpoint_p.h>
#include <qpa/qwindowsysteminterface.h>
+#include <QtWidgets/private/qapplication_p.h>
+
// #include <QDebug>
class tst_QScrollerWidget : public QWidget
@@ -128,6 +105,7 @@ private slots:
void scroll();
void overshoot();
void multipleWindows();
+ void mouseEventTimestamp();
private:
QPointingDevice *m_touchScreen = QTest::createTouchDevice();
@@ -346,7 +324,7 @@ void tst_QScroller::scrollTo()
{
QScopedPointer<tst_QScrollerWidget> sw(new tst_QScrollerWidget);
sw->show();
- QApplication::setActiveWindow(sw.data());
+ QApplicationPrivate::setActiveWindow(sw.data());
if (!QTest::qWaitForWindowExposed(sw.data()) || !QTest::qWaitForWindowActive(sw.data()))
QSKIP("Failed to show and activate window");
@@ -378,7 +356,7 @@ void tst_QScroller::scroll()
QScroller::grabGesture(sw.data(), QScroller::TouchGesture);
sw->setGeometry(100, 100, 400, 300);
sw->show();
- QApplication::setActiveWindow(sw.data());
+ QApplicationPrivate::setActiveWindow(sw.data());
if (!QTest::qWaitForWindowExposed(sw.data()) || !QTest::qWaitForWindowActive(sw.data()))
QSKIP("Failed to show and activate window");
@@ -419,7 +397,7 @@ void tst_QScroller::overshoot()
QScroller::grabGesture(sw.data(), QScroller::TouchGesture);
sw->setGeometry(100, 100, 400, 300);
sw->show();
- QApplication::setActiveWindow(sw.data());
+ QApplicationPrivate::setActiveWindow(sw.data());
if (!QTest::qWaitForWindowExposed(sw.data()) || !QTest::qWaitForWindowActive(sw.data()))
QSKIP("Failed to show and activate window");
@@ -541,6 +519,67 @@ void tst_QScroller::multipleWindows()
#endif
}
+/*!
+ This test verifies that mouse events arrive at the target widget
+ with valid timestamp, even if there is a gesture filtering (and then
+ replaying a copy of) the event. QTBUG-102010
+
+ We cannot truly simulate the double click here, as simulated events don't
+ go through the exact same event machinery as real events, so double clicks
+ don't get generated by Qt here. But we can verify that the timestamps of
+ the eventually delivered events are maintained.
+*/
+void tst_QScroller::mouseEventTimestamp()
+{
+#if QT_CONFIG(gestures) && QT_CONFIG(scroller)
+ QScopedPointer<tst_QScrollerWidget> sw(new tst_QScrollerWidget());
+ sw->scrollArea = QRectF(0, 0, 1000, 1000);
+ QScroller::grabGesture(sw.data(), QScroller::LeftMouseButtonGesture);
+ sw->setGeometry(100, 100, 400, 300);
+ sw->show();
+ QApplicationPrivate::setActiveWindow(sw.data());
+ if (!QTest::qWaitForWindowExposed(sw.data()) || !QTest::qWaitForWindowActive(sw.data()))
+ QSKIP("Failed to show and activate window");
+
+ QScroller *s1 = QScroller::scroller(sw.data());
+
+ struct EventFilter : QObject
+ {
+ QList<int> timestamps;
+ protected:
+ bool eventFilter(QObject *o, QEvent *e) override
+ {
+ if (e->isInputEvent())
+ timestamps << static_cast<QInputEvent *>(e)->timestamp();
+ return QObject::eventFilter(o, e);
+ }
+
+ } eventFilter;
+ sw->installEventFilter(&eventFilter);
+
+ const int interval = QGuiApplication::styleHints()->mouseDoubleClickInterval() / 10;
+ const QPoint point = sw->geometry().center();
+ // Simulate double by pressing twice within the double click interval.
+ // Presses are filtered and then delayed by the scroller/gesture machinery,
+ // so we first record all events, and then make sure that the relative timestamps
+ // are maintained also for the replayed or synthesized events.
+ QTest::mousePress(sw->windowHandle(), Qt::LeftButton, {}, point);
+ QCOMPARE(s1->state(), QScroller::Pressed);
+ QTest::mouseRelease(sw->windowHandle(), Qt::LeftButton, {}, point, interval);
+ QCOMPARE(s1->state(), QScroller::Inactive);
+ QTest::mousePress(sw->windowHandle(), Qt::LeftButton, {}, point, interval);
+ QCOMPARE(s1->state(), QScroller::Pressed);
+ // also filtered and delayed by the scroller
+ QTest::mouseRelease(sw->windowHandle(), Qt::LeftButton, {}, point, interval);
+ QCOMPARE(s1->state(), QScroller::Inactive);
+ int lastTimestamp = -1;
+ for (int timestamp : std::as_const(eventFilter.timestamps)) {
+ QCOMPARE_GE(timestamp, lastTimestamp);
+ lastTimestamp = timestamp + interval;
+ }
+#endif
+}
+
QTEST_MAIN(tst_QScroller)
#include "tst_qscroller.moc"
diff --git a/tests/auto/widgets/util/qsystemtrayicon/CMakeLists.txt b/tests/auto/widgets/util/qsystemtrayicon/CMakeLists.txt
index d84f229c04..d4c517e88c 100644
--- a/tests/auto/widgets/util/qsystemtrayicon/CMakeLists.txt
+++ b/tests/auto/widgets/util/qsystemtrayicon/CMakeLists.txt
@@ -1,13 +1,26 @@
-# Generated from qsystemtrayicon.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsystemtrayicon Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsystemtrayicon LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+set(resources_resource_files
+ "icons/icon.png"
+)
+
qt_internal_add_test(tst_qsystemtrayicon
SOURCES
tst_qsystemtrayicon.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ TESTDATA ${resources_resource_files}
+ BUILTIN_TESTDATA
)
diff --git a/tests/auto/widgets/util/qsystemtrayicon/tst_qsystemtrayicon.cpp b/tests/auto/widgets/util/qsystemtrayicon/tst_qsystemtrayicon.cpp
index 952b9e5868..9a7cd2e534 100644
--- a/tests/auto/widgets/util/qsystemtrayicon/tst_qsystemtrayicon.cpp
+++ b/tests/auto/widgets/util/qsystemtrayicon/tst_qsystemtrayicon.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 <QTest>
@@ -64,9 +39,9 @@ tst_QSystemTrayIcon::~tst_QSystemTrayIcon()
void tst_QSystemTrayIcon::showHide()
{
QSystemTrayIcon icon;
- icon.setIcon(QIcon("icons/icon.png"));
+ icon.setIcon(QIcon(":/icons/icon.png"));
icon.show();
- icon.setIcon(QIcon("icons/icon.png"));
+ icon.setIcon(QIcon(":/icons/icon.png"));
icon.hide();
}
@@ -74,7 +49,7 @@ void tst_QSystemTrayIcon::showHide()
void tst_QSystemTrayIcon::showMessage()
{
QSystemTrayIcon icon;
- icon.setIcon(QIcon("icons/icon.png"));
+ icon.setIcon(QIcon(":/icons/icon.png"));
icon.showMessage("Title", "Messagecontents");
icon.showMessage("Title", "Messagecontents", QSystemTrayIcon::NoIcon);
@@ -97,7 +72,7 @@ void tst_QSystemTrayIcon::getSetCheck()
QCOMPARE(true, "testToolTip" == icon.toolTip());
QCOMPARE(true, icon.icon().isNull());
- icon.setIcon(QIcon("icons/icon.png"));
+ icon.setIcon(QIcon(":/icons/icon.png"));
QCOMPARE(false, icon.icon().isNull());
QMenu menu;
@@ -129,13 +104,13 @@ void tst_QSystemTrayIcon::lastWindowClosed()
QSignalSpy spy(qApp, &QGuiApplication::lastWindowClosed);
QWidget window;
QSystemTrayIcon icon;
- icon.setIcon(QIcon("whatever.png"));
+ icon.setIcon(QIcon(":/icons/icon.png"));
icon.show();
window.show();
QTimer::singleShot(2500, &window, SLOT(close()));
QTimer::singleShot(20000, qApp, SLOT(quit())); // in case the test fails
qApp->exec();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
QTEST_MAIN(tst_QSystemTrayIcon)
diff --git a/tests/auto/widgets/widgets/CMakeLists.txt b/tests/auto/widgets/widgets/CMakeLists.txt
index c64b86b3de..eb44f3d103 100644
--- a/tests/auto/widgets/widgets/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from widgets.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qabstractbutton)
add_subdirectory(qabstractscrollarea)
@@ -28,6 +29,7 @@ add_subdirectory(qscrollbar)
add_subdirectory(qsizegrip)
add_subdirectory(qslider)
add_subdirectory(qspinbox)
+add_subdirectory(qsplashscreen)
add_subdirectory(qsplitter)
add_subdirectory(qstackedwidget)
add_subdirectory(qstatusbar)
@@ -46,17 +48,15 @@ endif()
if(QT_FEATURE_shortcut)
add_subdirectory(qkeysequenceedit)
endif()
+add_subdirectory(qmenu)
+add_subdirectory(qlineedit)
if(NOT ANDROID)
- # QTBUG-87417 # special case
- add_subdirectory(qlineedit)
- # QTBUG-87420 # special case
+ # QTBUG-87420
add_subdirectory(qmdiarea)
- # QTBUG-87671 # special case
- add_subdirectory(qmenu)
- # QTBUG-87421 # special case
+ # QTBUG-87421
add_subdirectory(qmenubar)
endif()
-# QTBUG-87671 # special case
-if(QT_FEATURE_opengl AND NOT ANDROID)
+if(QT_FEATURE_opengl)
add_subdirectory(qopenglwidget)
endif()
+add_subdirectory(qrhiwidget)
diff --git a/tests/auto/widgets/widgets/qabstractbutton/CMakeLists.txt b/tests/auto/widgets/widgets/qabstractbutton/CMakeLists.txt
index d192549f94..883614fc04 100644
--- a/tests/auto/widgets/widgets/qabstractbutton/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qabstractbutton/CMakeLists.txt
@@ -1,14 +1,22 @@
-# Generated from qabstractbutton.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractbutton Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractbutton LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractbutton
SOURCES
tst_qabstractbutton.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp b/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp
index c13e6a5420..dc5c42513c 100644
--- a/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.cpp
+++ b/tests/auto/widgets/widgets/qabstractbutton/tst_qabstractbutton.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 <QTest>
@@ -42,6 +17,9 @@
#include <private/qguiapplication_p.h>
#include <qpa/qplatformintegration.h>
+#include <qpa/qplatformtheme.h>
+
+#include <QtWidgets/private/qapplication_p.h>
class tst_QAbstractButton : public QObject
{
@@ -81,6 +59,8 @@ private slots:
void keyNavigation();
#endif
+ void buttonPressKeys();
+
protected slots:
void onClicked();
void onToggled( bool on );
@@ -276,7 +256,13 @@ void tst_QAbstractButton::setAutoRepeat()
QCOMPARE(press_count, click_count);
QVERIFY(click_count > 1);
break;
- case 4:
+ case 4: {
+ const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+ ->themeHint(QPlatformTheme::ButtonPressKeys)
+ .value<QList<Qt::Key>>();
+ if (buttonPressKeys.contains(Qt::Key_Enter)) {
+ QSKIP("platform theme has Key_Enter in ButtonPressKeys");
+ }
// check that pressing ENTER has no effect when autorepeat is false
testWidget->setDown( false );
testWidget->setAutoRepeat( false );
@@ -293,7 +279,14 @@ void tst_QAbstractButton::setAutoRepeat()
QVERIFY( click_count == 0 );
break;
- case 5:
+ }
+ case 5: {
+ const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+ ->themeHint(QPlatformTheme::ButtonPressKeys)
+ .value<QList<Qt::Key>>();
+ if (buttonPressKeys.contains(Qt::Key_Enter)) {
+ QSKIP("platform theme has Key_Enter in ButtonPressKeys");
+ }
// check that pressing ENTER has no effect when autorepeat is true
testWidget->setDown( false );
testWidget->setAutoRepeat( true );
@@ -311,6 +304,7 @@ void tst_QAbstractButton::setAutoRepeat()
QVERIFY( click_count == 0 );
break;
+ }
case 6:
// verify autorepeat is off by default.
MyButton tmp( 0);
@@ -486,7 +480,7 @@ void tst_QAbstractButton::setShortcut()
QKeySequence seq( Qt::Key_A );
testWidget->setShortcut( seq );
- QApplication::setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
testWidget->activateWindow();
// must be active to get shortcuts
QVERIFY(QTest::qWaitForWindowActive(testWidget));
@@ -524,24 +518,24 @@ void tst_QAbstractButton::animateClick()
button.animateClick();
QVERIFY(button.isDown());
- QCOMPARE(pressedSpy.count(), 1);
- QCOMPARE(releasedSpy.count(), 0);
- QCOMPARE(clickedSpy.count(), 0);
+ QCOMPARE(pressedSpy.size(), 1);
+ QCOMPARE(releasedSpy.size(), 0);
+ QCOMPARE(clickedSpy.size(), 0);
qApp->processEvents(QEventLoop::AllEvents, 10);
// QAbstractButton starts a 100ms timer which performs the click. If it
// took more than 100ms to get here, then the button might no longer be down.
if (elapsed.elapsed() < 100) {
QVERIFY(button.isDown());
- QCOMPARE(pressedSpy.count(), 1);
- QCOMPARE(releasedSpy.count(), 0);
- QCOMPARE(clickedSpy.count(), 0);
+ QCOMPARE(pressedSpy.size(), 1);
+ QCOMPARE(releasedSpy.size(), 0);
+ QCOMPARE(clickedSpy.size(), 0);
}
QTRY_VERIFY(!button.isDown());
// but once the button has been clicked, it must have taken at least 100ms
QVERIFY(elapsed.elapsed() >= 100);
- QCOMPARE(pressedSpy.count(), 1);
- QCOMPARE(releasedSpy.count(), 1);
- QCOMPARE(clickedSpy.count(), 1);
+ QCOMPARE(pressedSpy.size(), 1);
+ QCOMPARE(releasedSpy.size(), 1);
+ QCOMPARE(clickedSpy.size(), 1);
}
#if QT_CONFIG(shortcut)
@@ -564,9 +558,9 @@ void tst_QAbstractButton::shortcutEvents()
QTest::qWait(1000); // ensure animate timer is expired
- QCOMPARE(pressedSpy.count(), 3);
- QCOMPARE(releasedSpy.count(), 3);
- QCOMPARE(clickedSpy.count(), 3);
+ QCOMPARE(pressedSpy.size(), 3);
+ QCOMPARE(releasedSpy.size(), 3);
+ QCOMPARE(clickedSpy.size(), 3);
}
#endif // QT_CONFIG(shortcut)
@@ -608,26 +602,26 @@ void tst_QAbstractButton::mouseReleased() // QTBUG-53244
QSignalSpy spyRelease(&button, &QAbstractButton::released);
QTest::mousePress(&button, Qt::LeftButton);
- QCOMPARE(spyPress.count(), 1);
+ QCOMPARE(spyPress.size(), 1);
QCOMPARE(button.isDown(), true);
- QCOMPARE(spyRelease.count(), 0);
+ QCOMPARE(spyRelease.size(), 0);
QTest::mouseClick(&button, Qt::RightButton);
- QCOMPARE(spyPress.count(), 1);
+ QCOMPARE(spyPress.size(), 1);
QCOMPARE(button.isDown(), true);
- QCOMPARE(spyRelease.count(), 0);
+ QCOMPARE(spyRelease.size(), 0);
QPointF posOutOfWidget = QPointF(30, 30);
QMouseEvent me(QEvent::MouseMove,
- posOutOfWidget, Qt::NoButton,
- Qt::MouseButtons(Qt::LeftButton),
- Qt::NoModifier); // mouse press and move
+ posOutOfWidget, button.mapToGlobal(posOutOfWidget),
+ Qt::NoButton, Qt::MouseButtons(Qt::LeftButton),
+ Qt::NoModifier); // mouse press and move
qApp->sendEvent(&button, &me);
// should emit released signal once mouse is dragging out of boundary
- QCOMPARE(spyPress.count(), 1);
+ QCOMPARE(spyPress.size(), 1);
QCOMPARE(button.isDown(), false);
- QCOMPARE(spyRelease.count(), 1);
+ QCOMPARE(spyRelease.size(), 1);
}
#ifdef QT_KEYPAD_NAVIGATION
@@ -647,7 +641,7 @@ void tst_QAbstractButton::keyNavigation()
}
widget.show();
- qApp->setActiveWindow(&widget);
+ QApplicationPrivate::setActiveWindow(&widget);
widget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&widget));
@@ -687,5 +681,16 @@ void tst_QAbstractButton::keyNavigation()
}
#endif
+void tst_QAbstractButton::buttonPressKeys()
+{
+ const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+ ->themeHint(QPlatformTheme::ButtonPressKeys)
+ .value<QList<Qt::Key>>();
+ for (uint i = 0; i < buttonPressKeys.size(); ++i) {
+ QTest::keyClick(testWidget, buttonPressKeys[i]);
+ QCOMPARE(click_count, i + 1);
+ }
+}
+
QTEST_MAIN(tst_QAbstractButton)
#include "tst_qabstractbutton.moc"
diff --git a/tests/auto/widgets/widgets/qabstractscrollarea/CMakeLists.txt b/tests/auto/widgets/widgets/qabstractscrollarea/CMakeLists.txt
index d756d28952..ac1d8ad54a 100644
--- a/tests/auto/widgets/widgets/qabstractscrollarea/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qabstractscrollarea/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qabstractscrollarea.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractscrollarea Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractscrollarea LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractscrollarea
SOURCES
tst_qabstractscrollarea.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp b/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp
index 9d7cc484cd..fa1f799855 100644
--- a/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp
+++ b/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.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 <QTest>
@@ -38,6 +13,7 @@
#include <qwidget.h>
#include <qdialog.h>
#include <qscroller.h>
+#include <qstyle.h>
class tst_QAbstractScrollArea : public QObject
{
@@ -59,6 +35,7 @@ private slots:
void margins();
void resizeWithOvershoot();
+ void sizeHint();
};
tst_QAbstractScrollArea::tst_QAbstractScrollArea()
@@ -433,5 +410,56 @@ void tst_QAbstractScrollArea::resizeWithOvershoot()
QTRY_COMPARE(scrollArea.viewport()->pos(), originAtRest);
}
+void tst_QAbstractScrollArea::sizeHint()
+{
+ class ScrollArea : public QAbstractScrollArea
+ {
+ public:
+ QSize viewportSizeHint() const override { return {200, 200}; }
+ } scrollArea;
+ // We cannot reliable test the impact of the scrollbars on the size hint
+ // if the style uses transient scrollbars, so use the class Windows style.
+ const QString defaultStyle = QApplication::style()->name();
+ QApplication::setStyle("Windows");
+ auto resetStyle = qScopeGuard([defaultStyle]{
+ QApplication::setStyle(defaultStyle);
+ });
+ scrollArea.setFrameShape(QFrame::NoFrame);
+ scrollArea.setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
+ scrollArea.show();
+
+ QSize sizeHint = scrollArea.sizeHint();
+ QCOMPARE(sizeHint, scrollArea.viewportSizeHint());
+
+ scrollArea.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+ scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
+ const QSize sizeHintWithScrollBars = scrollArea.sizeHint();
+ QTRY_COMPARE_GT(sizeHintWithScrollBars.width(), sizeHint.width());
+ QTRY_COMPARE_GT(sizeHintWithScrollBars.height(), sizeHint.height());
+
+ sizeHint = scrollArea.sizeHint();
+
+ // whether the scroll area itself is visible or not should not influence
+ // the size hint
+ scrollArea.hide();
+ QCOMPARE(scrollArea.sizeHint(), sizeHint);
+ scrollArea.show();
+ QCOMPARE(scrollArea.sizeHint(), sizeHint);
+
+ scrollArea.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+
+ QCOMPARE(scrollArea.sizeHint(), scrollArea.viewportSizeHint());
+
+ scrollArea.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+ scrollArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+
+ scrollArea.verticalScrollBar()->setRange(0, 1);
+ scrollArea.horizontalScrollBar()->setRange(0, 1);
+ scrollArea.resize(sizeHint / 2);
+ QApplication::processEvents(); // trigger lazy layout process
+ QCOMPARE(scrollArea.sizeHint(), sizeHintWithScrollBars);
+}
+
QTEST_MAIN(tst_QAbstractScrollArea)
#include "tst_qabstractscrollarea.moc"
diff --git a/tests/auto/widgets/widgets/qabstractslider/CMakeLists.txt b/tests/auto/widgets/widgets/qabstractslider/CMakeLists.txt
index 37c725c391..711c73931d 100644
--- a/tests/auto/widgets/widgets/qabstractslider/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qabstractslider/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qabstractslider.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractslider Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractslider LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractslider
SOURCES
tst_qabstractslider.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::TestPrivate
Qt::Widgets
diff --git a/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp b/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp
index 7ab609a7ca..9be41ad799 100644
--- a/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp
+++ b/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.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 <QTest>
@@ -1484,7 +1459,7 @@ void tst_QAbstractSlider::keyPressed()
slider->setOrientation(Qt::Horizontal);
slider->setInvertedAppearance(invertedAppearance);
slider->setInvertedControls(invertedControls);
- for (int i=0;i<keySequence.count();i++) {
+ for (int i=0;i<keySequence.size();i++) {
QTest::keyClick(slider, keySequence.at(i));
}
QCOMPARE(slider->sliderPosition(), expectedSliderPosition);
@@ -1691,8 +1666,8 @@ void tst_QAbstractSlider::wheelEvent()
#endif
QCOMPARE(slider->sliderPosition(),expectedSliderPosition);
int expectedSignalCount = (initialSliderPosition == expectedSliderPosition) ? 0 : 1;
- QCOMPARE(spy1.count(), expectedSignalCount);
- QCOMPARE(spy2.count(), expectedSignalCount);
+ QCOMPARE(spy1.size(), expectedSignalCount);
+ QCOMPARE(spy2.size(), expectedSignalCount);
if (expectedSignalCount)
QVERIFY(actionTriggeredTimeStamp < valueChangedTimeStamp);
}
@@ -1839,9 +1814,9 @@ void tst_QAbstractSlider::sliderPressedReleased()
QTest::mousePress(slider, Qt::LeftButton, {},
QPoint(rect.center().x() + 2, rect.center().y() + 2));
- QCOMPARE(spy1.count(), expectedCount);
+ QCOMPARE(spy1.size(), expectedCount);
QTest::mouseRelease(slider, Qt::LeftButton, {}, rect.center());
- QCOMPARE(spy2.count(), expectedCount);
+ QCOMPARE(spy2.size(), expectedCount);
delete slider;
}
@@ -1910,7 +1885,7 @@ void tst_QAbstractSlider::sliderMoved()
slider->setMaximum(maximum);
slider->setSliderDown(sliderDown);
slider->setSliderPosition(position);
- QCOMPARE(spy.count(), expectedCount);
+ QCOMPARE(spy.size(), expectedCount);
delete slider;
}
@@ -1982,7 +1957,7 @@ void tst_QAbstractSlider::rangeChanged()
slider.setRange(minimum, maximum);
QSignalSpy spy(&slider, SIGNAL(rangeChanged(int,int)));
slider.setRange(newMin, newMax);
- QCOMPARE(spy.count(), expectedCount);
+ QCOMPARE(spy.size(), expectedCount);
}
void tst_QAbstractSlider::setSliderPosition_data()
@@ -2021,8 +1996,8 @@ void tst_QAbstractSlider::setSliderPosition()
QSignalSpy spy2(slider, SIGNAL(valueChanged(int)));
slider->setSliderPosition(targetPosition);
QCOMPARE(slider->sliderPosition(), targetPosition);
- QCOMPARE(spy1.count(), down ? 1 : 0);
- QCOMPARE(spy2.count(), tracking ? 1 : 0);
+ QCOMPARE(spy1.size(), down ? 1 : 0);
+ QCOMPARE(spy2.size(), tracking ? 1 : 0);
QCOMPARE(slider->value(), tracking ? targetPosition : initialValue);
if (tracking && down)
QVERIFY(sliderMovedTimeStamp < valueChangedTimeStamp);
@@ -2046,17 +2021,21 @@ void tst_QAbstractSlider::setValue()
slider->setRange(minimum, maximum);
slider->setSliderDown(down);
slider->setValue(49); // to force a valueChanged() below
- QSignalSpy spy1(slider, SIGNAL(sliderMoved(int)));
- QSignalSpy spy2(slider, SIGNAL(valueChanged(int)));
- QSignalSpy spy3(slider, SIGNAL(actionTriggered(int)));
+ QSignalSpy spy1(slider, &QAbstractSlider::sliderMoved);
+ QSignalSpy spy2(slider, &QAbstractSlider::valueChanged);
+ QSignalSpy spy3(slider, &QAbstractSlider::actionTriggered);
slider->setValue(50);
- QCOMPARE(spy1.count(), down ? 1 : 0);
- QCOMPARE(spy2.count(), 1);
- QCOMPARE(spy3.count(), 0);
+ QCOMPARE(spy1.size(), down ? 1 : 0);
+ QCOMPARE(spy2.size(), 1);
+ QCOMPARE(spy3.size(), 0);
QCOMPARE(slider->value(), reportedValue);
QCOMPARE(slider->sliderPosition(), reportedSliderPosition);
if (down)
QVERIFY(sliderMovedTimeStamp < valueChangedTimeStamp);
+
+ slider->setValue(50);
+ QApplication::processEvents();
+ QCOMPARE(spy2.size(), 1);
}
void tst_QAbstractSlider::waitUntilTimeElapsed(const QElapsedTimer &t, int ms)
@@ -2076,37 +2055,37 @@ void tst_QAbstractSlider::setRepeatAction()
// Start repeat action with initial delay of 500 ms, and then repeating
// every 250 ms.
slider->setRepeatAction(QAbstractSlider::SliderPageStepAdd, 500, 250);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(slider->value(), 55);
QElapsedTimer t;
t.start();
QTest::qWait(300);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(slider->value(), 55);
waitUntilTimeElapsed(t, 550);
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QCOMPARE(slider->value(), 65);
QCOMPARE(spy.at(0).at(0).toUInt(), (uint)QAbstractSlider::SliderPageStepAdd);
waitUntilTimeElapsed(t, 790);
- QTRY_COMPARE(spy.count(), 2);
+ QTRY_COMPARE(spy.size(), 2);
QCOMPARE(slider->value(), 75);
QCOMPARE(spy.at(1).at(0).toUInt(), (uint)QAbstractSlider::SliderPageStepAdd);
waitUntilTimeElapsed(t, 1790);
- QTRY_COMPARE(spy.count(), 6);
+ QTRY_COMPARE(spy.size(), 6);
QCOMPARE(slider->value(), 115);
QCOMPARE(spy.at(4).at(0).toUInt(), (uint)QAbstractSlider::SliderPageStepAdd);
QCOMPARE(spy.at(5).at(0).toUInt(), (uint)QAbstractSlider::SliderPageStepAdd);
slider->setRepeatAction(QAbstractSlider::SliderNoAction);
- QCOMPARE(spy.count(), 6);
+ QCOMPARE(spy.size(), 6);
QCOMPARE(slider->value(), 115);
QTest::qWait(300);
- QCOMPARE(spy.count(), 6);
+ QCOMPARE(spy.size(), 6);
QCOMPARE(slider->value(), 115);
}
diff --git a/tests/auto/widgets/widgets/qabstractspinbox/CMakeLists.txt b/tests/auto/widgets/widgets/qabstractspinbox/CMakeLists.txt
index df077a0bbd..adaef01601 100644
--- a/tests/auto/widgets/widgets/qabstractspinbox/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qabstractspinbox/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qabstractspinbox.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qabstractspinbox Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qabstractspinbox LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qabstractspinbox
SOURCES
tst_qabstractspinbox.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/widgets/qabstractspinbox/tst_qabstractspinbox.cpp b/tests/auto/widgets/widgets/qabstractspinbox/tst_qabstractspinbox.cpp
index 6898cf18dc..00d0fdaf94 100644
--- a/tests/auto/widgets/widgets/qabstractspinbox/tst_qabstractspinbox.cpp
+++ b/tests/auto/widgets/widgets/qabstractspinbox/tst_qabstractspinbox.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 <QTest>
@@ -39,15 +14,12 @@
#include "../../../shared/platforminputcontext.h"
#include <private/qinputmethod_p.h>
+#include <memory>
class tst_QAbstractSpinBox : public QObject
{
Q_OBJECT
-public:
- tst_QAbstractSpinBox();
- virtual ~tst_QAbstractSpinBox();
-
private slots:
void initTestCase();
void cleanupTestCase();
@@ -64,32 +36,25 @@ private:
PlatformInputContext m_platformInputContext;
};
-tst_QAbstractSpinBox::tst_QAbstractSpinBox()
-{
-}
-
-tst_QAbstractSpinBox::~tst_QAbstractSpinBox()
-{
-}
-
class MyAbstractSpinBox : public QAbstractSpinBox
{
public:
- MyAbstractSpinBox() : QAbstractSpinBox() {}
- QLineEdit *lineEdit() { return QAbstractSpinBox::lineEdit(); }
- void setLineEdit(QLineEdit *le) { QAbstractSpinBox::setLineEdit(le); }
+ using QAbstractSpinBox::QAbstractSpinBox;
+
+ using QAbstractSpinBox::lineEdit;
+ using QAbstractSpinBox::setLineEdit;
};
void tst_QAbstractSpinBox::initTestCase()
{
- QInputMethodPrivate *inputMethodPrivate = QInputMethodPrivate::get(qApp->inputMethod());
+ auto *inputMethodPrivate = QInputMethodPrivate::get(QGuiApplication::inputMethod());
inputMethodPrivate->testContext = &m_platformInputContext;
}
void tst_QAbstractSpinBox::cleanupTestCase()
{
- QInputMethodPrivate *inputMethodPrivate = QInputMethodPrivate::get(qApp->inputMethod());
- inputMethodPrivate->testContext = 0;
+ auto *inputMethodPrivate = QInputMethodPrivate::get(QGuiApplication::inputMethod());
+ inputMethodPrivate->testContext = nullptr;
}
// Testing get/set functions
@@ -112,11 +77,12 @@ void tst_QAbstractSpinBox::getSetCheck()
// QLineEdit * QAbstractSpinBox::lineEdit()
// void QAbstractSpinBox::setLineEdit(QLineEdit *)
- QLineEdit *var3 = new QLineEdit(0);
+ auto *var3 = new QLineEdit(nullptr);
obj1.setLineEdit(var3);
QCOMPARE(var3, obj1.lineEdit());
-#ifndef QT_DEBUG
- obj1.setLineEdit((QLineEdit *)0); // Will assert in debug, so only test in release
+ // Will assert in debug, so only test in release
+#if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS)
+ obj1.setLineEdit(nullptr);
QCOMPARE(var3, obj1.lineEdit()); // Setting 0 should keep the current editor
#endif
// delete var3; // No delete, since QAbstractSpinBox takes ownership
@@ -124,45 +90,38 @@ void tst_QAbstractSpinBox::getSetCheck()
void tst_QAbstractSpinBox::task183108_clear()
{
- QAbstractSpinBox *sbox;
-
- sbox = new QSpinBox;
+ auto sbox = std::make_unique<QSpinBox>();
sbox->clear();
sbox->show();
- qApp->processEvents();
+ QCoreApplication::processEvents();
QVERIFY(sbox->text().isEmpty());
- delete sbox;
- sbox = new QSpinBox;
+ sbox.reset(new QSpinBox);
sbox->clear();
sbox->show();
sbox->hide();
- qApp->processEvents();
+ QCoreApplication::processEvents();
QCOMPARE(sbox->text(), QString());
- delete sbox;
- sbox = new QSpinBox;
+ sbox.reset(new QSpinBox);
sbox->show();
sbox->clear();
- qApp->processEvents();
+ QCoreApplication::processEvents();
QCOMPARE(sbox->text(), QString());
- delete sbox;
- sbox = new QSpinBox;
+ sbox.reset(new QSpinBox);
sbox->show();
sbox->clear();
sbox->hide();
- qApp->processEvents();
+ QCoreApplication::processEvents();
QCOMPARE(sbox->text(), QString());
-
- delete sbox;
}
void tst_QAbstractSpinBox::task228728_cssselector()
{
//QAbstractSpinBox does some call to stylehint into his constructor.
//so while the stylesheet want to access property, it should not crash
- qApp->setStyleSheet("[alignment=\"1\"], [text=\"foo\"] { color:black; }" );
+ qApp->setStyleSheet(R"([alignment="1"], [text="foo"] { color:black; })");
QSpinBox box;
}
@@ -173,24 +132,23 @@ void tst_QAbstractSpinBox::inputMethodUpdate()
QSpinBox box;
- QSpinBox *testWidget = &box;
- testWidget->setRange(0, 1);
+ box.setRange(0, 1);
- QTestPrivate::centerOnScreen(testWidget);
- testWidget->clear();
- testWidget->show();
- QVERIFY(QTest::qWaitForWindowExposed(testWidget));
+ QTestPrivate::centerOnScreen(&box);
+ box.clear();
+ box.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&box));
- testWidget->activateWindow();
- testWidget->setFocus();
- QTRY_VERIFY(testWidget->hasFocus());
- QTRY_COMPARE(qApp->focusObject(), testWidget);
+ box.activateWindow();
+ box.setFocus();
+ QTRY_VERIFY(box.hasFocus());
+ QTRY_COMPARE(QGuiApplication::focusObject(), &box);
m_platformInputContext.m_updateCallCount = 0;
{
QList<QInputMethodEvent::Attribute> attributes;
QInputMethodEvent event("1", attributes);
- QApplication::sendEvent(testWidget, &event);
+ QCoreApplication::sendEvent(&box, &event);
}
QVERIFY(m_platformInputContext.m_updateCallCount >= 1);
@@ -199,7 +157,7 @@ void tst_QAbstractSpinBox::inputMethodUpdate()
QList<QInputMethodEvent::Attribute> attributes;
attributes << QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, 0, 1, QVariant());
QInputMethodEvent event("1", attributes);
- QApplication::sendEvent(testWidget, &event);
+ QCoreApplication::sendEvent(&box, &event);
}
QVERIFY(m_platformInputContext.m_updateCallCount >= 1);
@@ -208,17 +166,17 @@ void tst_QAbstractSpinBox::inputMethodUpdate()
QList<QInputMethodEvent::Attribute> attributes;
QInputMethodEvent event("", attributes);
event.setCommitString("1");
- QApplication::sendEvent(testWidget, &event);
+ QCoreApplication::sendEvent(&box, &event);
}
QVERIFY(m_platformInputContext.m_updateCallCount >= 1);
- QCOMPARE(testWidget->value(), 1);
+ QCOMPARE(box.value(), 1);
m_platformInputContext.m_updateCallCount = 0;
{
QList<QInputMethodEvent::Attribute> attributes;
attributes << QInputMethodEvent::Attribute(QInputMethodEvent::Selection, 0, 0, QVariant());
QInputMethodEvent event("", attributes);
- QApplication::sendEvent(testWidget, &event);
+ QCoreApplication::sendEvent(&box, &event);
}
QVERIFY(m_platformInputContext.m_updateCallCount >= 1);
}
diff --git a/tests/auto/widgets/widgets/qbuttongroup/CMakeLists.txt b/tests/auto/widgets/widgets/qbuttongroup/CMakeLists.txt
index 1f876ec5d6..b58775d2ff 100644
--- a/tests/auto/widgets/widgets/qbuttongroup/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qbuttongroup/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qbuttongroup.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qbuttongroup Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qbuttongroup LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qbuttongroup
SOURCES
tst_qbuttongroup.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp b/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp
index 8ab2faab43..06d2435601 100644
--- a/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp
+++ b/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
@@ -44,6 +19,8 @@
#include <qsettings.h>
#endif
+#include <QtWidgets/private/qapplication_p.h>
+
class SpecialRadioButton: public QRadioButton
{
public:
@@ -145,7 +122,7 @@ void tst_QButtonGroup::arrowKeyNavigation()
layout.addWidget(&g2);
dlg.show();
- qApp->setActiveWindow(&dlg);
+ QApplicationPrivate::setActiveWindow(&dlg);
QVERIFY(QTest::qWaitForWindowActive(&dlg));
bt1.setFocus();
@@ -227,7 +204,7 @@ void tst_QButtonGroup::keyNavigationPushButtons()
buttonGroup->addButton(pb3);
dlg.show();
- qApp->setActiveWindow(&dlg);
+ QApplicationPrivate::setActiveWindow(&dlg);
if (!QTest::qWaitForWindowActive(&dlg))
QSKIP("Window activation failed, skipping test");
@@ -374,17 +351,17 @@ void tst_QButtonGroup::testSignals()
pb1.animateClick();
QTestEventLoop::instance().enterLoop(1);
- QCOMPARE(clickedSpy.count(), 1);
- QCOMPARE(clickedIdSpy.count(), 1);
+ QCOMPARE(clickedSpy.size(), 1);
+ QCOMPARE(clickedIdSpy.size(), 1);
int expectedId = -2;
QCOMPARE(clickedIdSpy.takeFirst().at(0).toInt(), expectedId);
- QCOMPARE(pressedSpy.count(), 1);
- QCOMPARE(pressedIdSpy.count(), 1);
+ QCOMPARE(pressedSpy.size(), 1);
+ QCOMPARE(pressedIdSpy.size(), 1);
QCOMPARE(pressedIdSpy.takeFirst().at(0).toInt(), expectedId);
- QCOMPARE(releasedSpy.count(), 1);
- QCOMPARE(releasedIdSpy.count(), 1);
+ QCOMPARE(releasedSpy.size(), 1);
+ QCOMPARE(releasedIdSpy.size(), 1);
QCOMPARE(releasedIdSpy.takeFirst().at(0).toInt(), expectedId);
clickedSpy.clear();
@@ -397,14 +374,14 @@ void tst_QButtonGroup::testSignals()
pb2.animateClick();
QTestEventLoop::instance().enterLoop(1);
- QCOMPARE(clickedSpy.count(), 1);
- QCOMPARE(clickedIdSpy.count(), 1);
+ QCOMPARE(clickedSpy.size(), 1);
+ QCOMPARE(clickedIdSpy.size(), 1);
QCOMPARE(clickedIdSpy.takeFirst().at(0).toInt(), 23);
- QCOMPARE(pressedSpy.count(), 1);
- QCOMPARE(pressedIdSpy.count(), 1);
+ QCOMPARE(pressedSpy.size(), 1);
+ QCOMPARE(pressedIdSpy.size(), 1);
QCOMPARE(pressedIdSpy.takeFirst().at(0).toInt(), 23);
- QCOMPARE(releasedSpy.count(), 1);
- QCOMPARE(releasedIdSpy.count(), 1);
+ QCOMPARE(releasedSpy.size(), 1);
+ QCOMPARE(releasedIdSpy.size(), 1);
QCOMPARE(releasedIdSpy.takeFirst().at(0).toInt(), 23);
@@ -414,18 +391,18 @@ void tst_QButtonGroup::testSignals()
pb1.setCheckable(true);
pb2.setCheckable(true);
pb1.toggle();
- QCOMPARE(toggledSpy.count(), 1);
- QCOMPARE(toggledIdSpy.count(), 1);
+ QCOMPARE(toggledSpy.size(), 1);
+ QCOMPARE(toggledIdSpy.size(), 1);
pb2.toggle();
- QCOMPARE(toggledSpy.count(), 3); // equals 3 since pb1 and pb2 are both toggled
- QCOMPARE(toggledIdSpy.count(), 3);
+ QCOMPARE(toggledSpy.size(), 3); // equals 3 since pb1 and pb2 are both toggled
+ QCOMPARE(toggledIdSpy.size(), 3);
pb1.setCheckable(false);
pb2.setCheckable(false);
pb1.toggle();
- QCOMPARE(toggledSpy.count(), 3);
- QCOMPARE(toggledIdSpy.count(), 3);
+ QCOMPARE(toggledSpy.size(), 3);
+ QCOMPARE(toggledIdSpy.size(), 3);
}
void tst_QButtonGroup::task106609()
@@ -458,14 +435,14 @@ void tst_QButtonGroup::task106609()
qRegisterMetaType<QAbstractButton*>("QAbstractButton*");
QSignalSpy spy1(buttons, SIGNAL(buttonClicked(QAbstractButton*)));
- QApplication::setActiveWindow(&dlg);
+ QApplicationPrivate::setActiveWindow(&dlg);
QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget*>(&dlg));
radio1->setFocus();
radio1->setChecked(true);
QTestEventLoop::instance().enterLoop(1);
- QCOMPARE(spy1.count(), 2);
+ QCOMPARE(spy1.size(), 2);
}
void tst_QButtonGroup::checkedButton()
@@ -550,7 +527,7 @@ void tst_QButtonGroup::task209485_removeFromGroupInEventHandler()
// NOTE: Reintroducing the bug of this task will cause the following line to crash:
QTest::mouseClick(button, Qt::LeftButton);
- QCOMPARE(spy1.count(), signalCount);
+ QCOMPARE(spy1.size(), signalCount);
}
void tst_QButtonGroup::autoIncrementId()
diff --git a/tests/auto/widgets/widgets/qcalendarwidget/CMakeLists.txt b/tests/auto/widgets/widgets/qcalendarwidget/CMakeLists.txt
index 853ff95a03..5140c37e94 100644
--- a/tests/auto/widgets/widgets/qcalendarwidget/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qcalendarwidget/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qcalendarwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcalendarwidget Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcalendarwidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcalendarwidget
SOURCES
tst_qcalendarwidget.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp b/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp
index 91da5dc69b..ca5cc06e99 100644
--- a/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.cpp
+++ b/tests/auto/widgets/widgets/qcalendarwidget/tst_qcalendarwidget.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 <QTest>
@@ -109,7 +84,7 @@ void tst_QCalendarWidget::getSetCheck()
QDate selectedDate(2005, 7, 3);
QSignalSpy spy(&object, SIGNAL(selectionChanged()));
object.setSelectedDate(selectedDate);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(selectedDate, object.selectedDate());
//month and year
object.setCurrentPage(2004, 1);
@@ -135,11 +110,19 @@ void tst_QCalendarWidget::getSetCheck()
object.setSelectedDate(selectedDate);
QCOMPARE(minDate, object.selectedDate());
QVERIFY(selectedDate != object.selectedDate());
+ object.clearMinimumDate();
+ object.setSelectedDate(selectedDate);
+ QCOMPARE(selectedDate, object.selectedDate());
+
//date should not go beyond the maximum.
selectedDate = maxDate.addDays(10);
object.setSelectedDate(selectedDate);
QCOMPARE(maxDate, object.selectedDate());
QVERIFY(selectedDate != object.selectedDate());
+ object.clearMaximumDate();
+ object.setSelectedDate(selectedDate);
+ QCOMPARE(selectedDate, object.selectedDate());
+
//show today
QDate today = QDate::currentDate();
object.showToday();
@@ -290,6 +273,9 @@ void tst_QCalendarWidget::showPrevNext()
QFETCH(ShowFunc, function);
QFETCH(QDate, dateOrigin);
QFETCH(QDate, expectedDate);
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes sometimes on Android emulator, figure out why (QTBUG-102258)");
+#endif
QCalendarWidget calWidget;
calWidget.show();
diff --git a/tests/auto/widgets/widgets/qcheckbox/CMakeLists.txt b/tests/auto/widgets/widgets/qcheckbox/CMakeLists.txt
index df03bea079..9e3f0e9874 100644
--- a/tests/auto/widgets/widgets/qcheckbox/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qcheckbox/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qcheckbox.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcheckbox Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcheckbox LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcheckbox
SOURCES
tst_qcheckbox.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp b/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp
index 33fb6b482a..42eb81d3c7 100644
--- a/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.cpp
+++ b/tests/auto/widgets/widgets/qcheckbox/tst_qcheckbox.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 <QTest>
@@ -41,6 +16,7 @@ private slots:
void initTestCase();
void setChecked();
+ void setCheckedSignal();
void setTriState();
void setText_data();
void setText();
@@ -50,7 +26,7 @@ private slots:
void toggle();
void pressed();
void toggled();
- void stateChanged();
+ void checkStateChanged();
void foregroundRole();
void minimumSizeHint();
};
@@ -84,6 +60,25 @@ void tst_QCheckBox::setChecked()
QVERIFY(!testWidget.isChecked());
}
+void tst_QCheckBox::setCheckedSignal()
+{
+ QCheckBox testWidget;
+ testWidget.setCheckState(Qt::Unchecked);
+ QSignalSpy checkStateChangedSpy(&testWidget, &QCheckBox::checkStateChanged);
+ testWidget.setCheckState(Qt::Checked);
+ testWidget.setCheckState(Qt::Checked);
+ QTRY_COMPARE(checkStateChangedSpy.size(), 1); // get signal only once
+ QCOMPARE(testWidget.checkState(), Qt::Checked);
+ testWidget.setCheckState(Qt::Unchecked);
+ testWidget.setCheckState(Qt::Unchecked);
+ QTRY_COMPARE(checkStateChangedSpy.size(), 2); // get signal only once
+ QCOMPARE(testWidget.checkState(), Qt::Unchecked);
+ testWidget.setCheckState(Qt::PartiallyChecked);
+ testWidget.setCheckState(Qt::PartiallyChecked);
+ QTRY_COMPARE(checkStateChangedSpy.size(), 3); // get signal only once
+ QCOMPARE(testWidget.checkState(), Qt::PartiallyChecked);
+}
+
void tst_QCheckBox::setTriState()
{
QCheckBox testWidget;
@@ -213,30 +208,49 @@ void tst_QCheckBox::toggled()
QCOMPARE(click_count, 0);
}
-void tst_QCheckBox::stateChanged()
+void tst_QCheckBox::checkStateChanged()
{
QCheckBox testWidget;
- int cur_state = -1;
+ QCOMPARE(testWidget.checkState(), Qt::Unchecked);
+
+ Qt::CheckState cur_state = Qt::Unchecked;
+ QSignalSpy checkStateChangedSpy(&testWidget, &QCheckBox::checkStateChanged);
+#if QT_DEPRECATED_SINCE(6, 9)
+ QT_IGNORE_DEPRECATIONS(
QSignalSpy stateChangedSpy(&testWidget, &QCheckBox::stateChanged);
- connect(&testWidget, &QCheckBox::stateChanged, this, [&](int state) { ++cur_state = state; });
+ )
+#endif
+ connect(&testWidget, &QCheckBox::checkStateChanged, this, [&](auto state) { cur_state = state; });
testWidget.setChecked(true);
- QCoreApplication::processEvents();
- QCOMPARE(cur_state, 2);
+ QTRY_COMPARE(checkStateChangedSpy.size(), 1);
+#if QT_DEPRECATED_SINCE(6, 9)
+ QCOMPARE(stateChangedSpy.size(), 1);
+#endif
+ QCOMPARE(cur_state, Qt::Checked);
+ QCOMPARE(testWidget.checkState(), Qt::Checked);
- cur_state = -1;
testWidget.setChecked(false);
- QCoreApplication::processEvents();
- QCOMPARE(cur_state, 0);
+ QTRY_COMPARE(checkStateChangedSpy.size(), 2);
+#if QT_DEPRECATED_SINCE(6, 9)
+ QCOMPARE(stateChangedSpy.size(), 2);
+#endif
+ QCOMPARE(cur_state, Qt::Unchecked);
+ QCOMPARE(testWidget.checkState(), Qt::Unchecked);
- cur_state = -1;
testWidget.setCheckState(Qt::PartiallyChecked);
- QCoreApplication::processEvents();
- QCOMPARE(cur_state, 1);
+ QTRY_COMPARE(checkStateChangedSpy.size(), 3);
+#if QT_DEPRECATED_SINCE(6, 9)
+ QCOMPARE(stateChangedSpy.size(), 3);
+#endif
+ QCOMPARE(cur_state, Qt::PartiallyChecked);
+ QCOMPARE(testWidget.checkState(), Qt::PartiallyChecked);
- QCOMPARE(stateChangedSpy.count(), 3);
testWidget.setCheckState(Qt::PartiallyChecked);
QCoreApplication::processEvents();
- QCOMPARE(stateChangedSpy.count(), 3);
+ QCOMPARE(checkStateChangedSpy.size(), 3);
+#if QT_DEPRECATED_SINCE(6, 9)
+ QCOMPARE(stateChangedSpy.size(), 3);
+#endif
}
void tst_QCheckBox::isToggleButton()
diff --git a/tests/auto/widgets/widgets/qcombobox/CMakeLists.txt b/tests/auto/widgets/widgets/qcombobox/CMakeLists.txt
index a1dded1384..87ac247b24 100644
--- a/tests/auto/widgets/widgets/qcombobox/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qcombobox/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qcombobox.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcombobox Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcombobox LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "qtlogo.png")
list(APPEND test_data "qtlogoinverted.png")
@@ -13,7 +20,7 @@ qt_internal_add_test(tst_qcombobox
tst_qcombobox.cpp
DEFINES
QTEST_QPA_MOUSE_HANDLING
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
index 4146a6632d..dc6ef789d7 100644
--- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
+++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QSignalSpy>
@@ -33,6 +8,7 @@
#include "qcombobox.h"
#include <private/qcombobox_p.h>
#include <private/qguiapplication_p.h>
+#include <qpa/qplatformintegration.h>
#include <qpa/qplatformtheme.h>
#include <qfontcombobox.h>
@@ -49,6 +25,7 @@
#include <qtablewidget.h>
#include <qscrollbar.h>
#include <qboxlayout.h>
+#include <qshortcut.h>
#include <qstackedwidget.h>
#include <qstandarditemmodel.h>
@@ -65,11 +42,15 @@
#include <qstandarditemmodel.h>
#include <qproxystyle.h>
#include <qfont.h>
+#include <qstylehints.h>
#include "../../../shared/platforminputcontext.h"
#include <private/qinputmethod_p.h>
#include <QtTest/private/qtesthelpers_p.h>
+#include <QtTest/private/qemulationdetector_p.h>
+
+#include <QtWidgets/private/qapplication_p.h>
using namespace QTestPrivate;
@@ -130,6 +111,7 @@ private slots:
#ifndef QT_NO_STYLE_FUSION
void task190351_layout();
void task191329_size();
+ void popupPositionAfterStyleChange();
#endif
void task166349_setEditableOnReturn();
void task190205_setModelAdjustToContents();
@@ -170,6 +152,10 @@ private slots:
void checkMenuItemPosWhenStyleSheetIsSet();
void checkEmbeddedLineEditWhenStyleSheetIsSet();
void propagateStyleChanges();
+ void buttonPressKeys();
+ void clearModel();
+ void cancelClosesPopupNotDialog();
+ void closePopupWithCheckableItems();
private:
PlatformInputContext m_platformInputContext;
@@ -472,11 +458,19 @@ void tst_QComboBox::setEditable()
void tst_QComboBox::setPalette()
{
-#ifdef Q_OS_MAC
- if (QApplication::style()->inherits("QMacStyle")) {
- QSKIP("This test doesn't make sense for pixmap-based styles");
- }
-#endif
+ // If (a) Palettes are pixmap based and/or (b) contain color groups/roles which the
+ // resolve mask prevents from being copied, the direct comparison of the inherited
+ // palette and the parent palette will fail.
+ // To prevent that, set a simple gray system palette for QComboBox and QLineEdit
+ const QPalette comboBoxPalette = qApp->palette("QComboBox");
+ const QPalette lineEditPalette = qApp->palette("QLineEdit");
+ auto guard = qScopeGuard([&]{
+ qApp->setPalette(comboBoxPalette, "QComboBox");
+ qApp->setPalette(lineEditPalette, "QLineEdit");
+ });
+ qApp->setPalette(QPalette(Qt::gray), "QComboBox");
+ qApp->setPalette(QPalette(Qt::gray), "QLineEdit");
+
TestWidget topLevel;
topLevel.show();
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
@@ -484,16 +478,15 @@ void tst_QComboBox::setPalette()
QPalette pal = testWidget->palette();
pal.setColor(QPalette::Base, Qt::red);
testWidget->setPalette(pal);
- testWidget->setEditable(!testWidget->isEditable());
+ testWidget->setEditable(true);
pal.setColor(QPalette::Base, Qt::blue);
testWidget->setPalette(pal);
- const QObjectList comboChildren = testWidget->children();
- for (int i = 0; i < comboChildren.size(); ++i) {
- QObject *o = comboChildren.at(i);
- if (o->isWidgetType()) {
- QCOMPARE(((QWidget*)o)->palette(), pal);
+ const QObjectList &comboChildren = testWidget->children();
+ for (auto *child : comboChildren) {
+ if (auto *widget = qobject_cast<QWidget *>(child)) {
+ QCOMPARE(widget->palette(), pal);
}
}
@@ -770,7 +763,7 @@ void tst_QComboBox::insertPolicy()
testWidget->setInsertPolicy(insertPolicy);
testWidget->addItems(initialEntries);
testWidget->setEditable(true);
- if (initialEntries.count() > 0)
+ if (initialEntries.size() > 0)
testWidget->setCurrentIndex(currentIndex);
// clear
@@ -782,10 +775,10 @@ void tst_QComboBox::insertPolicy()
// First check that there is the right number of entries, or
// we may unwittingly pass
- QCOMPARE((int)result.count(), testWidget->count());
+ QCOMPARE((int)result.size(), testWidget->count());
// No need to compare if there are no strings to compare
- if (result.count() > 0) {
+ if (result.size() > 0) {
for (int i=0; i<testWidget->count(); ++i) {
QCOMPARE(testWidget->itemText(i), result.at(i));
}
@@ -856,7 +849,7 @@ void tst_QComboBox::autoCompletionCaseSensitivity()
TestWidget topLevel;
topLevel.show();
QComboBox *testWidget = topLevel.comboBox();
- qApp->setActiveWindow(&topLevel);
+ QApplicationPrivate::setActiveWindow(&topLevel);
testWidget->setFocus();
QVERIFY(QTest::qWaitForWindowActive(&topLevel));
QCOMPARE(qApp->focusWidget(), (QWidget *)testWidget);
@@ -882,18 +875,18 @@ void tst_QComboBox::autoCompletionCaseSensitivity()
QTest::keyClick(testWidget->lineEdit(), Qt::Key_A);
qApp->processEvents();
QCOMPARE(testWidget->currentText(), QString("aww"));
- QCOMPARE(spyReturn.count(), 0);
+ QCOMPARE(spyReturn.size(), 0);
QTest::keyClick(testWidget->lineEdit(), Qt::Key_B);
qApp->processEvents();
// autocompletions preserve userkey-case from 4.2
QCOMPARE(testWidget->currentText(), QString("abCDEF"));
- QCOMPARE(spyReturn.count(), 0);
+ QCOMPARE(spyReturn.size(), 0);
QTest::keyClick(testWidget->lineEdit(), Qt::Key_Enter);
qApp->processEvents();
QCOMPARE(testWidget->currentText(), QString("aBCDEF")); // case restored to item's case
- QCOMPARE(spyReturn.count(), 1);
+ QCOMPARE(spyReturn.size(), 1);
testWidget->clearEditText();
QTest::keyClick(testWidget->lineEdit(), 'c');
@@ -1029,7 +1022,7 @@ void tst_QComboBox::currentIndex_data()
expectedCurrentIndex = -1;
expectedCurrentText = "";
expectedSignalCount = 2;
- QTest::newRow("check that isetting the index to -1 works")
+ QTest::newRow("check that setting the index to -1 works")
<< initialItems << setCurrentIndex << removeIndex
<< insertIndex << insertText << expectedCurrentIndex << expectedCurrentText
<< expectedSignalCount;
@@ -1172,66 +1165,71 @@ void tst_QComboBox::currentIndex()
TestWidget topLevel;
topLevel.show();
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
- QComboBox *testWidget = topLevel.comboBox();
+ QComboBox *comboBox = topLevel.comboBox();
// test both editable/non-editable combobox
for (int edit = 0; edit < 2; ++edit) {
- testWidget->clear();
- testWidget->setEditable(edit ? true : false);
+ comboBox->clear();
+ comboBox->setEditable(edit ? true : false);
if (edit)
- QVERIFY(testWidget->lineEdit());
+ QVERIFY(comboBox->lineEdit());
// verify it is empty, has no current index and no current text
- QCOMPARE(testWidget->count(), 0);
- QCOMPARE(testWidget->currentIndex(), -1);
- QVERIFY(testWidget->currentText().isEmpty());
+ QCOMPARE(comboBox->count(), 0);
+ QCOMPARE(comboBox->currentIndex(), -1);
+ QVERIFY(comboBox->currentText().isEmpty());
// spy on currentIndexChanged
- QSignalSpy indexChangedInt(testWidget, SIGNAL(currentIndexChanged(int)));
+ QSignalSpy indexChangedSpy(comboBox, &QComboBox::currentIndexChanged);
// stuff items into it
- foreach(QString text, initialItems) {
- testWidget->addItem(text);
- }
- QCOMPARE(testWidget->count(), initialItems.count());
+ for (const QString &text : initialItems)
+ comboBox->addItem(text);
+
+ QCOMPARE(comboBox->count(), initialItems.size());
// set current index, remove and/or insert
if (setCurrentIndex >= -1) {
- testWidget->setCurrentIndex(setCurrentIndex);
- QCOMPARE(testWidget->currentIndex(), setCurrentIndex);
+ comboBox->setCurrentIndex(setCurrentIndex);
+ QCOMPARE(comboBox->currentIndex(), setCurrentIndex);
}
if (removeIndex >= 0)
- testWidget->removeItem(removeIndex);
+ comboBox->removeItem(removeIndex);
if (insertIndex >= 0)
- testWidget->insertItem(insertIndex, insertText);
+ comboBox->insertItem(insertIndex, insertText);
// compare with expected index and text
- QCOMPARE(testWidget->currentIndex(), expectedCurrentIndex);
- QCOMPARE(testWidget->currentText(), expectedCurrentText);
+ QCOMPARE(comboBox->currentIndex(), expectedCurrentIndex);
+ QCOMPARE(comboBox->currentText(), expectedCurrentText);
// check that signal count is correct
- QCOMPARE(indexChangedInt.count(), expectedSignalCount);
+ QCOMPARE(indexChangedSpy.size(), expectedSignalCount);
// compare with last sent signal values
- if (indexChangedInt.count())
- QCOMPARE(indexChangedInt.at(indexChangedInt.count() - 1).at(0).toInt(),
- testWidget->currentIndex());
+ if (indexChangedSpy.size())
+ QCOMPARE(indexChangedSpy.at(indexChangedSpy.size() - 1).at(0).toInt(),
+ comboBox->currentIndex());
+
+ // Test a no-op index change
+ const int index = comboBox->currentIndex();
+ comboBox->setCurrentIndex(index);
+ QCOMPARE(indexChangedSpy.size(), expectedSignalCount);
if (edit) {
- testWidget->setCurrentIndex(-1);
- testWidget->setInsertPolicy(QComboBox::InsertAtBottom);
- QTest::keyPress(testWidget, 'a');
- QTest::keyPress(testWidget, 'b');
- QCOMPARE(testWidget->currentText(), QString("ab"));
- QCOMPARE(testWidget->currentIndex(), -1);
- int numItems = testWidget->count();
- QTest::keyPress(testWidget, Qt::Key_Return);
- QCOMPARE(testWidget->count(), numItems + 1);
- QCOMPARE(testWidget->currentIndex(), numItems);
- testWidget->setCurrentIndex(-1);
- QTest::keyPress(testWidget, 'a');
- QTest::keyPress(testWidget, 'b');
- QCOMPARE(testWidget->currentIndex(), -1);
+ comboBox->setCurrentIndex(-1);
+ comboBox->setInsertPolicy(QComboBox::InsertAtBottom);
+ QTest::keyPress(comboBox, 'a');
+ QTest::keyPress(comboBox, 'b');
+ QCOMPARE(comboBox->currentText(), QString("ab"));
+ QCOMPARE(comboBox->currentIndex(), -1);
+ int numItems = comboBox->count();
+ QTest::keyPress(comboBox, Qt::Key_Return);
+ QCOMPARE(comboBox->count(), numItems + 1);
+ QCOMPARE(comboBox->currentIndex(), numItems);
+ comboBox->setCurrentIndex(-1);
+ QTest::keyPress(comboBox, 'a');
+ QTest::keyPress(comboBox, 'b');
+ QCOMPARE(comboBox->currentIndex(), -1);
}
}
}
@@ -1251,8 +1249,8 @@ void tst_QComboBox::insertItems_data()
QTest::newRow("prepend") << initialItems << insertedItems << 0 << 0;
QTest::newRow("prepend with negative value") << initialItems << insertedItems << -1 << 0;
- QTest::newRow("append") << initialItems << insertedItems << initialItems.count() << initialItems.count();
- QTest::newRow("append with too high value") << initialItems << insertedItems << 999 << initialItems.count();
+ QTest::newRow("append") << initialItems << insertedItems << initialItems.size() << initialItems.size();
+ QTest::newRow("append with too high value") << initialItems << insertedItems << 999 << initialItems.size();
QTest::newRow("insert") << initialItems << insertedItems << 1 << 1;
}
@@ -1268,12 +1266,12 @@ void tst_QComboBox::insertItems()
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
QComboBox *testWidget = topLevel.comboBox();
testWidget->insertItems(0, initialItems);
- QCOMPARE(testWidget->count(), initialItems.count());
+ QCOMPARE(testWidget->count(), initialItems.size());
testWidget->insertItems(insertIndex, insertedItems);
- QCOMPARE(testWidget->count(), initialItems.count() + insertedItems.count());
- for (int i=0; i<insertedItems.count(); ++i)
+ QCOMPARE(testWidget->count(), initialItems.size() + insertedItems.size());
+ for (int i=0; i<insertedItems.size(); ++i)
QCOMPARE(testWidget->itemText(expectedIndex + i), insertedItems.at(i));
}
@@ -1289,11 +1287,12 @@ void tst_QComboBox::insertItem_data()
initialItems << "foo" << "bar";
for(int e = 0 ; e<2 ; e++) {
bool editable = (e==0);
- QTest::newRow("Insert less then 0") << initialItems << -1 << "inserted" << 0 << editable;
- QTest::newRow("Insert at 0") << initialItems << 0 << "inserted" << 0 << editable;
- QTest::newRow("Insert beyond count") << initialItems << 3 << "inserted" << 2 << editable;
- QTest::newRow("Insert at count") << initialItems << 2 << "inserted" << 2 << editable;
- QTest::newRow("Insert in the middle") << initialItems << 1 << "inserted" << 1 << editable;
+ const auto txt = editable ? QByteArray("editable: ") : QByteArray("non-editable: ");
+ QTest::newRow(txt + "Insert less then 0") << initialItems << -1 << "inserted" << 0 << editable;
+ QTest::newRow(txt + "Insert at 0") << initialItems << 0 << "inserted" << 0 << editable;
+ QTest::newRow(txt + "Insert beyond count") << initialItems << 3 << "inserted" << 2 << editable;
+ QTest::newRow(txt + "Insert at count") << initialItems << 2 << "inserted" << 2 << editable;
+ QTest::newRow(txt + "Insert in the middle") << initialItems << 1 << "inserted" << 1 << editable;
}
}
@@ -1310,14 +1309,14 @@ void tst_QComboBox::insertItem()
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
QComboBox *testWidget = topLevel.comboBox();
testWidget->insertItems(0, initialItems);
- QCOMPARE(testWidget->count(), initialItems.count());
+ QCOMPARE(testWidget->count(), initialItems.size());
testWidget->setEditable(true);
if (editable)
testWidget->setEditText("FOO");
testWidget->insertItem(insertIndex, itemLabel);
- QCOMPARE(testWidget->count(), initialItems.count() + 1);
+ QCOMPARE(testWidget->count(), initialItems.size() + 1);
QCOMPARE(testWidget->itemText(expectedIndex), itemLabel);
if (editable)
@@ -1385,21 +1384,21 @@ void tst_QComboBox::textpixmapdata()
QFETCH(IconList, icons);
QFETCH(VariantList, variant);
- QVERIFY(text.count() == icons.count() && text.count() == variant.count());
+ QVERIFY(text.size() == icons.size() && text.size() == variant.size());
TestWidget topLevel;
topLevel.show();
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
QComboBox *testWidget = topLevel.comboBox();
- for (int i = 0; i<text.count(); ++i) {
+ for (int i = 0; i<text.size(); ++i) {
testWidget->insertItem(i, text.at(i));
testWidget->setItemIcon(i, icons.at(i));
testWidget->setItemData(i, variant.at(i), Qt::UserRole);
}
- QCOMPARE(testWidget->count(), text.count());
+ QCOMPARE(testWidget->count(), text.size());
- for (int i = 0; i<text.count(); ++i) {
+ for (int i = 0; i<text.size(); ++i) {
QIcon icon = testWidget->itemIcon(i);
QCOMPARE(icon.cacheKey(), icons.at(i).cacheKey());
QPixmap original = icons.at(i).pixmap(1024);
@@ -1407,7 +1406,7 @@ void tst_QComboBox::textpixmapdata()
QCOMPARE(pixmap.toImage(), original.toImage());
}
- for (int i = 0; i<text.count(); ++i) {
+ for (int i = 0; i<text.size(); ++i) {
QCOMPARE(testWidget->itemText(i), text.at(i));
// ### we should test icons/pixmap as well, but I need to fix the api mismatch first
QCOMPARE(testWidget->itemData(i, Qt::UserRole), variant.at(i));
@@ -1481,14 +1480,12 @@ void tst_QComboBox::setCurrentText()
else
QCOMPARE(testWidget->currentText(), QString("foo"));
-#ifndef QT_NO_PROPERTIES
// verify WRITE for currentText property
testWidget->setCurrentIndex(0);
const QByteArray n("currentText");
QCOMPARE(testWidget->property(n).toString(), QString("foo"));
testWidget->setProperty(n, QString("bar"));
QCOMPARE(testWidget->property(n).toString(), QString("bar"));
-#endif
}
void tst_QComboBox::currentTextChanged_data()
@@ -1510,42 +1507,70 @@ void tst_QComboBox::currentTextChanged()
testWidget->addItems(QStringList() << "foo" << "bar");
QCOMPARE(testWidget->count(), 2);
- QSignalSpy spy(testWidget, SIGNAL(currentTextChanged(QString)));
+ QSignalSpy textChangedSpy(testWidget, &QComboBox::currentTextChanged);
testWidget->setEditable(editable);
// set text in list
testWidget->setCurrentIndex(0);
QCOMPARE(testWidget->currentIndex(), 0);
- spy.clear();
+ textChangedSpy.clear();
testWidget->setCurrentText(QString("bar"));
- QCOMPARE(spy.count(), 1);
- QCOMPARE(qvariant_cast<QString>(spy.at(0).at(0)), QString("bar"));
+ QCOMPARE(textChangedSpy.size(), 1);
+ QCOMPARE(qvariant_cast<QString>(textChangedSpy.at(0).at(0)), QString("bar"));
// set text not in list
testWidget->setCurrentIndex(0);
QCOMPARE(testWidget->currentIndex(), 0);
- spy.clear();
+ textChangedSpy.clear();
testWidget->setCurrentText(QString("qt"));
if (editable) {
- QCOMPARE(spy.count(), 1);
- QCOMPARE(qvariant_cast<QString>(spy.at(0).at(0)), QString("qt"));
+ QCOMPARE(textChangedSpy.size(), 1);
+ QCOMPARE(qvariant_cast<QString>(textChangedSpy.at(0).at(0)), QString("qt"));
} else {
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(textChangedSpy.size(), 0);
}
// item changed
testWidget->setCurrentIndex(0);
QCOMPARE(testWidget->currentIndex(), 0);
- spy.clear();
+ textChangedSpy.clear();
testWidget->setItemText(0, QString("ape"));
- QCOMPARE(spy.count(), 1);
- QCOMPARE(qvariant_cast<QString>(spy.at(0).at(0)), QString("ape"));
+ QCOMPARE(textChangedSpy.size(), 1);
+ QCOMPARE(qvariant_cast<QString>(textChangedSpy.at(0).at(0)), QString("ape"));
+
// change it back
- spy.clear();
+ textChangedSpy.clear();
testWidget->setItemText(0, QString("foo"));
- QCOMPARE(spy.count(), 1);
- QCOMPARE(qvariant_cast<QString>(spy.at(0).at(0)), QString("foo"));
+ QCOMPARE(textChangedSpy.size(), 1);
+ QCOMPARE(qvariant_cast<QString>(textChangedSpy.at(0).at(0)), QString("foo"));
+
+ // currentIndexChanged vs. currentTextChanged
+ testWidget->clear();
+ testWidget->addItems(QStringList() << "first" << "second" << "third" << "fourth" << "fourth");
+ testWidget->setCurrentIndex(4);
+ textChangedSpy.clear();
+ QSignalSpy indexChangedSpy(testWidget, &QComboBox::currentIndexChanged);
+
+ // Index change w/o text change
+ testWidget->removeItem(3);
+ QCOMPARE(textChangedSpy.count(), 0);
+ QCOMPARE(indexChangedSpy.count(), 1);
+
+ // Index and text change
+ testWidget->setCurrentIndex(0);
+ QCOMPARE(textChangedSpy.count(), 1);
+ QCOMPARE(indexChangedSpy.count(), 2);
+
+ // remove item above current index
+ testWidget->removeItem(2);
+ QCOMPARE(textChangedSpy.count(), 1);
+ QCOMPARE(indexChangedSpy.count(), 2);
+
+ // Text change w/o index change
+ testWidget->setItemText(0, "first class");
+ QCOMPARE(textChangedSpy.count(), 2);
+ QCOMPARE(indexChangedSpy.count(), 2);
}
void tst_QComboBox::editTextChanged()
@@ -1569,13 +1594,13 @@ void tst_QComboBox::editTextChanged()
QCOMPARE(testWidget->currentIndex(), 0);
testWidget->setCurrentIndex(0);
QCOMPARE(testWidget->currentIndex(), 0);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// no signal should be sent when changing to other index because we are not editable
QCOMPARE(testWidget->currentIndex(), 0);
testWidget->setCurrentIndex(1);
QCOMPARE(testWidget->currentIndex(), 1);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// now set to editable and reset current index
testWidget->setEditable(true);
@@ -1587,20 +1612,20 @@ void tst_QComboBox::editTextChanged()
QCOMPARE(testWidget->currentIndex(), 0);
testWidget->setCurrentIndex(0);
QCOMPARE(testWidget->currentIndex(), 0);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// signal should be sent when changing to other index
QCOMPARE(testWidget->currentIndex(), 0);
testWidget->setCurrentIndex(1);
QCOMPARE(testWidget->currentIndex(), 1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(qvariant_cast<QString>(spy.at(0).at(0)), QString("bar"));
// insert some keys and notice they are all signaled
spy.clear();
QTest::keyClicks(testWidget, "bingo");
- QCOMPARE(spy.count(), 5);
+ QCOMPARE(spy.size(), 5);
QCOMPARE(qvariant_cast<QString>(spy.at(4).at(0)), QString("barbingo"));
}
@@ -1653,6 +1678,16 @@ void tst_QComboBox::setModel()
QCOMPARE(box.rootModelIndex(), rootModelIndex);
box.setModel(box.model());
QCOMPARE(box.rootModelIndex(), rootModelIndex);
+
+ // check that setting the same model as the completer's doesn't crash
+ QCompleter *completer = new QCompleter(&box);
+ box.setEditable(true);
+ box.setCompleter(completer);
+ auto *listModel = new QStringListModel({ "one", "two" }, completer);
+ completer->setModel(listModel);
+ QCOMPARE(listModel->rowCount(), 2); // make sure it wasn't deleted
+ box.setModel(listModel);
+ QCOMPARE(listModel->rowCount(), 2); // make sure it wasn't deleted
}
void tst_QComboBox::setCustomModelAndView()
@@ -1757,7 +1792,7 @@ void tst_QComboBox::setMaxCount()
// insert 5 items at pos 2. Make sure only two get inserted
QSignalSpy spy(box.model(), SIGNAL(rowsInserted(QModelIndex,int,int)));
box.insertItems(2, items);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(1).toInt(), 2);
QCOMPARE(spy.at(0).at(2).toInt(), 3);
@@ -1987,7 +2022,7 @@ void tst_QComboBox::flaggedItems_data()
disableFlagList << 1;
keyMovementList.clear();
keyMovementList << Qt::Key_T << Qt::Key_Enter;
- QTest::newRow(testCase.toLatin1() + "disabled") << itemList << deselectFlagList << disableFlagList << keyMovementList << bool(editable) << 2;
+ QTest::newRow(testCase.toLatin1() + "disabled with key") << itemList << deselectFlagList << disableFlagList << keyMovementList << bool(editable) << 2;
QTest::newRow(testCase.toLatin1() + "broken autocompletion") << itemList << deselectFlagList << disableFlagList << keyMovementList << bool(editable) << 2;
}
}
@@ -1999,8 +2034,8 @@ void tst_QComboBox::flaggedItems()
QSKIP("Wayland: This fails. Figure out why.");
QFETCH(QStringList, itemList);
- QFETCH(IntList, deselectFlagList);
- QFETCH(IntList, disableFlagList);
+ QFETCH(const IntList, deselectFlagList);
+ QFETCH(const IntList, disableFlagList);
QFETCH(KeyList, keyMovementList);
QFETCH(bool, editable);
QFETCH(int, expectedIndex);
@@ -2011,17 +2046,17 @@ void tst_QComboBox::flaggedItems()
listWidget.addItems(itemList);
comboBox.setEditable(editable);
- foreach (int index, deselectFlagList)
+ for (int index : deselectFlagList)
listWidget.item(index)->setFlags(listWidget.item(index)->flags() & ~Qt::ItemIsSelectable);
- foreach (int index, disableFlagList)
+ for (int index : disableFlagList)
listWidget.item(index)->setFlags(listWidget.item(index)->flags() & ~Qt::ItemIsEnabled);
comboBox.setModel(listWidget.model());
comboBox.setView(&listWidget);
comboBox.move(200, 200);
comboBox.show();
- QApplication::setActiveWindow(&comboBox);
+ QApplicationPrivate::setActiveWindow(&comboBox);
comboBox.activateWindow();
comboBox.setFocus();
QVERIFY(QTest::qWaitForWindowActive(&comboBox));
@@ -2031,7 +2066,7 @@ void tst_QComboBox::flaggedItems()
if (editable)
comboBox.lineEdit()->selectAll();
- for (int i = 0; i < keyMovementList.count(); ++i) {
+ for (int i = 0; i < keyMovementList.size(); ++i) {
Qt::Key key = keyMovementList[i];
QTest::keyClick(&comboBox, key);
}
@@ -2097,7 +2132,7 @@ void tst_QComboBox::mouseWheel_data()
void tst_QComboBox::mouseWheel()
{
- QFETCH(IntList, disabledItems);
+ QFETCH(const IntList, disabledItems);
QFETCH(int, startIndex);
QFETCH(int, wheelDirection);
QFETCH(int, expectedIndex);
@@ -2112,7 +2147,7 @@ void tst_QComboBox::mouseWheel()
QListWidget listWidget;
listWidget.addItems(list);
- foreach (int index, disabledItems)
+ for (int index : disabledItems)
listWidget.item(index)->setFlags(listWidget.item(index)->flags() & ~Qt::ItemIsEnabled);
box.setModel(listWidget.model());
@@ -2246,13 +2281,13 @@ void tst_QComboBox::separatorItem_data()
void tst_QComboBox::separatorItem()
{
QFETCH(QStringList, items);
- QFETCH(IntList, separators);
+ QFETCH(const IntList, separators);
QComboBox box;
box.addItems(items);
- foreach(int index, separators)
+ for (int index : separators)
box.insertSeparator(index);
- QCOMPARE(box.count(), (items.count() + separators.count()));
+ QCOMPARE(box.count(), (items.size() + separators.size()));
for (int i = 0, s = 0; i < box.count(); ++i) {
if (i == separators.at(s)) {
QCOMPARE(box.itemText(i), QString());
@@ -2371,7 +2406,8 @@ void tst_QComboBox::task191329_size()
QFrame *container = tableCombo.findChild<QComboBoxPrivateContainer *>();
QVERIFY(container);
QCOMPARE(static_cast<QAbstractItemView *>(table), container->findChild<QAbstractItemView *>());
- foreach (QWidget *button, container->findChildren<QComboBoxPrivateScroller *>()) {
+ const auto buttons = container->findChildren<QComboBoxPrivateScroller *>();
+ for (QWidget *button : buttons) {
//the popup should be large enough to contains everithing so the top and left button are hidden
QVERIFY(!button->isVisible());
}
@@ -2450,7 +2486,7 @@ void tst_QComboBox::task247863_keyBoardSelection()
combo.addItem( QLatin1String("111"));
combo.addItem( QLatin1String("222"));
combo.show();
- QApplication::setActiveWindow(&combo);
+ QApplicationPrivate::setActiveWindow(&combo);
QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&combo));
QSignalSpy spy(&combo, &QComboBox::activated);
@@ -2460,7 +2496,7 @@ void tst_QComboBox::task247863_keyBoardSelection()
QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Down);
QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Enter);
QCOMPARE(combo.currentText(), QLatin1String("222"));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QComboBox::task220195_keyBoardSelection2()
@@ -2476,7 +2512,7 @@ void tst_QComboBox::task220195_keyBoardSelection2()
combo.addItem( QLatin1String("foo2"));
combo.addItem( QLatin1String("foo3"));
combo.show();
- QApplication::setActiveWindow(&combo);
+ QApplicationPrivate::setActiveWindow(&combo);
QVERIFY(QTest::qWaitForWindowActive(&combo));
combo.setCurrentIndex(-1);
@@ -2735,16 +2771,16 @@ void tst_QComboBox::resetModel()
QComboBox cb;
StringListModel model({"1", "2"});
QSignalSpy spy(&cb, &QComboBox::currentIndexChanged);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(cb.currentIndex(), -1); //no selection
cb.setModel(&model);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(cb.currentIndex(), 0); //first item selected
model.reset();
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
QCOMPARE(cb.currentIndex(), 0); //first item selected
}
@@ -2762,7 +2798,7 @@ void tst_QComboBox::keyBoardNavigationWithMouse()
combo.move(200, 200);
combo.showNormal();
- QApplication::setActiveWindow(&combo);
+ QApplicationPrivate::setActiveWindow(&combo);
QVERIFY(QTest::qWaitForWindowActive(&combo));
QCOMPARE(combo.currentText(), QLatin1String("0"));
@@ -2818,17 +2854,17 @@ void tst_QComboBox::task_QTBUG_1071_changingFocusEmitsActivated()
layout.addWidget(&edit);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
cb.clearEditText();
cb.setFocus();
QApplication::processEvents();
QTRY_VERIFY(cb.hasFocus());
QTest::keyClick(static_cast<QWidget *>(0), '1');
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
edit.setFocus();
QTRY_VERIFY(edit.hasFocus());
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
}
void tst_QComboBox::maxVisibleItems_data()
@@ -3170,31 +3206,55 @@ void tst_QComboBox::task_QTBUG_54191_slotOnEditTextChangedSetsComboBoxToReadOnly
QCOMPARE(cb.currentIndex(), 1);
}
+class ComboBox : public QComboBox {
+public:
+ using QComboBox::QComboBox;
+
+ void keyPressEvent(QKeyEvent *e) override
+ {
+ QComboBox::keyPressEvent(e);
+ accepted = e->isAccepted();
+ }
+ bool accepted = false;
+};
+
void tst_QComboBox::keyboardSelection()
{
- QComboBox comboBox;
+ ComboBox comboBox;
const int keyboardInterval = QApplication::keyboardInputInterval();
- QStringList list;
- list << "OA" << "OB" << "OC" << "OO" << "OP" << "PP";
+ const QStringList list = {"OA", "OB", "OC", "OO", "OP", "PP"};
comboBox.addItems(list);
// Clear any remaining keyboard input from previous tests.
QTest::qWait(keyboardInterval);
QTest::keyClicks(&comboBox, "oo", Qt::NoModifier, 50);
QCOMPARE(comboBox.currentText(), list.at(3));
+ QCOMPARE(comboBox.accepted, true);
QTest::qWait(keyboardInterval);
QTest::keyClicks(&comboBox, "op", Qt::NoModifier, 50);
QCOMPARE(comboBox.currentText(), list.at(4));
+ QCOMPARE(comboBox.accepted, true);
QTest::keyClick(&comboBox, Qt::Key_P, Qt::NoModifier, keyboardInterval);
QCOMPARE(comboBox.currentText(), list.at(5));
+ QCOMPARE(comboBox.accepted, true);
QTest::keyClick(&comboBox, Qt::Key_O, Qt::NoModifier, keyboardInterval);
QCOMPARE(comboBox.currentText(), list.at(0));
+ QCOMPARE(comboBox.accepted, true);
QTest::keyClick(&comboBox, Qt::Key_O, Qt::NoModifier, keyboardInterval);
QCOMPARE(comboBox.currentText(), list.at(1));
+ QCOMPARE(comboBox.accepted, true);
+
+ QTest::keyClick(&comboBox, Qt::Key_Tab, Qt::NoModifier, keyboardInterval);
+ QCOMPARE(comboBox.currentText(), list.at(1));
+ QCOMPARE(comboBox.accepted, false);
+
+ QTest::keyClick(&comboBox, Qt::Key_Tab, Qt::ControlModifier, keyboardInterval);
+ QCOMPARE(comboBox.currentText(), list.at(1));
+ QCOMPARE(comboBox.accepted, false);
}
void tst_QComboBox::updateDelegateOnEditableChange()
@@ -3246,11 +3306,11 @@ void tst_QComboBox::respectChangedOwnershipOfItemView()
QTableView *v2 = new QTableView(&box1);
box1.setView(v2); // Here we do not expect v1 to be deleted
QApplication::processEvents();
- QCOMPARE(spy1.count(), 0);
+ QCOMPARE(spy1.size(), 0);
QSignalSpy spy2(v2, SIGNAL(destroyed()));
box1.setView(v1);
- QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy2.size(), 1);
}
void tst_QComboBox::task_QTBUG_49831_scrollerNotActivated()
@@ -3271,14 +3331,14 @@ void tst_QComboBox::task_QTBUG_49831_scrollerNotActivated()
QVERIFY(container);
QVERIFY(QTest::qWaitForWindowExposed(container));
- QList<QComboBoxPrivateScroller *> scrollers = container->findChildren<QComboBoxPrivateScroller *>();
+ const QList<QComboBoxPrivateScroller *> scrollers = container->findChildren<QComboBoxPrivateScroller *>();
// Not all styles support scrollers. We rely only on those platforms that do to catch any regression.
if (!scrollers.isEmpty()) {
- Q_FOREACH (QComboBoxPrivateScroller *scroller, scrollers) {
+ for (QComboBoxPrivateScroller *scroller : scrollers) {
if (scroller->isVisible()) {
QSignalSpy doScrollSpy(scroller, SIGNAL(doScroll(int)));
QTest::mouseMove(scroller, QPoint(5, 5), 500);
- QTRY_VERIFY(doScrollSpy.count() > 0);
+ QTRY_VERIFY(doScrollSpy.size() > 0);
}
}
}
@@ -3356,6 +3416,65 @@ void tst_QComboBox::task_QTBUG_56693_itemFontFromModel()
box.hidePopup();
}
+#ifndef QT_NO_STYLE_FUSION
+void tst_QComboBox::popupPositionAfterStyleChange()
+{
+#ifdef Q_OS_QNX
+ QSKIP("Fails on QNX, QTBUG-123798");
+#endif
+ // Check that the popup opens up centered on top of the current
+ // index if the style has changed since the last time it was
+ // opened (QTBUG-113765).
+ QComboBox box;
+ QStyleOptionComboBox opt;
+ const bool usePopup = qApp->style()->styleHint(QStyle::SH_ComboBox_Popup, &opt, &box);
+ if (!usePopup)
+ QSKIP("This test is only relevant for styles that centers the popup on top of the combo!");
+ if (QTestPrivate::isRunningArmOnX86())
+ QSKIP("Flaky on QEMU, QTBUG-114760");
+
+ box.addItems({"first", "middle", "last"});
+ box.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&box));
+ box.showPopup();
+
+ QFrame *container = box.findChild<QComboBoxPrivateContainer *>();
+ QVERIFY(container);
+ QVERIFY(QTest::qWaitForWindowExposed(container));
+
+ // Select the last menu item, which will close the popup. This item is then expected
+ // to be centered on top of the combobox the next time the popup opens.
+ const QRect lastItemRect = box.view()->visualRect(box.view()->model()->index(2, 0));
+ QTest::mouseClick(box.view(), Qt::LeftButton, Qt::NoModifier, lastItemRect.center());
+
+ // Change style. This can make the popup smaller, which will result in up-and-down
+ // scroll widgets showing in the menu, directly underneath the mouse before the popup
+ // ends up hidden. This again will trigger the item view to scroll, which seems to be
+ // the root cause of QTBUG-113765.
+ qApp->setStyle(QStringLiteral("Fusion"));
+
+ // Click on the combobox again to reopen it. But since both QComboBox
+ // (QComboBoxPrivateScroller) is using its own internal timer to do scrolling, we
+ // need to wait a bit until the scrolling is done before we can reopen it (since
+ // the scrolling is the sore spot that we want to test).
+ // But note, we expect, but don't require, the popup to scroll. And for that
+ // reason, we don't see it as a failure if the scrolling doesn't happen.
+ (void) QTest::qWaitFor([&box]{ return box.view()->verticalScrollBar()->value() > 0; }, 1000);
+
+ // Verify that the popup is hidden before we click the button
+ QTRY_VERIFY(!container->isVisible());
+ QTest::mouseClick(&box, Qt::LeftButton);
+
+ // Click on item under mouse. But wait a bit, to avoid a double click
+ QTest::qWait(2 * QGuiApplication::styleHints()->mouseDoubleClickInterval());
+ QTest::mouseClick(&box, Qt::LeftButton);
+
+ // Ensure that the item that was centered on top of the combobox, and which
+ // we therefore clicked, was the same item we clicked on the first time.
+ QTRY_COMPARE(box.currentText(), QStringLiteral("last"));
+}
+#endif // QT_NO_STYLE_FUSION
+
void tst_QComboBox::inputMethodUpdate()
{
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
@@ -3435,10 +3554,10 @@ void tst_QComboBox::task_QTBUG_52027_mapCompleterIndex()
cbox.setCompleter(completer);
QSignalSpy spy(&cbox, SIGNAL(activated(int)));
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
cbox.move(200, 200);
cbox.show();
- QApplication::setActiveWindow(&cbox);
+ QApplicationPrivate::setActiveWindow(&cbox);
QVERIFY(QTest::qWaitForWindowActive(&cbox));
QTest::keyClicks(&cbox, "foobar2");
@@ -3464,7 +3583,7 @@ void tst_QComboBox::task_QTBUG_52027_mapCompleterIndex()
cbox.activateWindow();
}
- QApplication::setActiveWindow(&cbox);
+ QApplicationPrivate::setActiveWindow(&cbox);
QVERIFY(QTest::qWaitForWindowActive(&cbox));
QTest::keyClicks(&cbox, "foobar1");
@@ -3532,7 +3651,7 @@ void tst_QComboBox::checkEmbeddedLineEditWhenStyleSheetIsSet()
layout->addWidget(comboBox);
topLevel.show();
comboBox->setEditable(true);
- QApplication::setActiveWindow(&topLevel);
+ QApplicationPrivate::setActiveWindow(&topLevel);
QVERIFY(QTest::qWaitForWindowActive(&topLevel));
QImage grab = comboBox->grab().toImage();
@@ -3590,5 +3709,144 @@ void tst_QComboBox::propagateStyleChanges()
QVERIFY(frameStyle.inquired);
}
+void tst_QComboBox::buttonPressKeys()
+{
+ QComboBox comboBox;
+ comboBox.setEditable(false);
+ comboBox.addItem(QString::number(1));
+ comboBox.addItem(QString::number(2));
+ const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+ ->themeHint(QPlatformTheme::ButtonPressKeys)
+ .value<QList<Qt::Key>>();
+ for (int i = 0; i < buttonPressKeys.size(); ++i) {
+ QTest::keyClick(&comboBox, buttonPressKeys[i]);
+ // On some platforms, a window will not be immediately visible,
+ // but take some event-loop iterations to complete.
+ // Using QTRY_VERIFY to deal with that.
+ QTRY_VERIFY(comboBox.view()->isVisible());
+ comboBox.hidePopup();
+ }
+}
+
+void tst_QComboBox::clearModel()
+{
+ using namespace Qt::StringLiterals;
+ QStringListModel model({ "one"_L1, "two"_L1, "three"_L1 });
+
+ QComboBox combo;
+ combo.setModel(&model);
+ combo.setCurrentIndex(1);
+
+ QCOMPARE(combo.currentIndex(), 1);
+ QCOMPARE(combo.currentText(), model.index(1).data().toString());
+
+ QSignalSpy indexSpy(&combo, &QComboBox::currentIndexChanged);
+ QSignalSpy textSpy(&combo, &QComboBox::currentTextChanged);
+
+ QVERIFY(indexSpy.isEmpty());
+ QVERIFY(textSpy.isEmpty());
+
+ model.setStringList({});
+
+ QCOMPARE(indexSpy.size(), 1);
+ const int index = indexSpy.takeFirst().at(0).toInt();
+ QCOMPARE(index, -1);
+
+ QCOMPARE(textSpy.size(), 1);
+ const QString text = textSpy.takeFirst().at(0).toString();
+ QCOMPARE(text, QString());
+
+ QCOMPARE(combo.currentIndex(), -1);
+ QCOMPARE(combo.currentText(), QString());
+}
+
+void tst_QComboBox::cancelClosesPopupNotDialog()
+{
+ if (QGuiApplication::platformName() == "offscreen")
+ QSKIP("The offscreen platform plugin doesn't activate popups.");
+
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("QWindow::requestActivate() is not supported.");
+
+ QDialog dialog;
+ QComboBox combobox;
+ combobox.addItems({"A", "B", "C"});
+
+ std::unique_ptr<QShortcut> shortcut(new QShortcut(QKeySequence::Cancel, &dialog));
+ bool shortcutTriggered = false;
+ connect(shortcut.get(), &QShortcut::activated, [&shortcutTriggered]{
+ shortcutTriggered = true;
+ });
+
+ QVBoxLayout vbox;
+ vbox.addWidget(&combobox);
+ dialog.setLayout(&vbox);
+
+ dialog.show();
+ QVERIFY(QTest::qWaitForWindowActive(&dialog));
+
+ // while the combobox is closed, escape key triggers the shortcut
+ QTest::keyClick(dialog.window()->windowHandle(), Qt::Key_Escape);
+ QVERIFY(shortcutTriggered);
+ shortcutTriggered = false;
+
+ combobox.showPopup();
+ QTRY_VERIFY(combobox.view()->isVisible());
+
+ // an open combobox overrides and accepts the escape key to close
+ QTest::keyClick(dialog.window()->windowHandle(), Qt::Key_Escape);
+ QVERIFY(!shortcutTriggered);
+ shortcutTriggered = false;
+ QTRY_VERIFY(!combobox.view()->isVisible());
+ QVERIFY(dialog.isVisible());
+
+ // once closed, escape key triggers the shortcut again
+ QTest::keyClick(dialog.window()->windowHandle(), Qt::Key_Escape);
+ QVERIFY(shortcutTriggered);
+ shortcutTriggered = false;
+ QVERIFY(dialog.isVisible());
+
+ shortcut.reset();
+
+ // without shortcut, escape key propagates to the parent
+ QTest::keyClick(dialog.window()->windowHandle(), Qt::Key_Escape);
+ QVERIFY(!dialog.isVisible());
+}
+
+void tst_QComboBox::closePopupWithCheckableItems()
+{
+ QWidget widget;
+
+ QVBoxLayout *vb = new QVBoxLayout(&widget);
+
+ QLabel *dlgLabel = new QLabel("Click when combo expanded.");
+ vb->addWidget(dlgLabel);
+
+ QComboBox *combo = new QComboBox();
+ vb->addWidget(combo);
+
+ QStandardItemModel model;
+ const int rowCount = 10;
+ for (int r = 0; r < rowCount; ++r) {
+ QString str = "Item: " + QString::number(r);
+ QStandardItem *item = new QStandardItem(str);
+ const bool isChecked = (r % 2);
+
+ item->setData(isChecked ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole);
+ item->setFlags(Qt::ItemIsUserCheckable | (item->flags() & ~(Qt::ItemIsSelectable)) );
+ model.appendRow(item);
+ }
+
+ combo->setModel(&model);
+
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+
+ QTest::mouseClick(widget.windowHandle(), Qt::LeftButton, {}, combo->geometry().center());
+ QVERIFY(QTest::qWaitForWindowExposed(combo->view()));
+ QTest::mouseClick(widget.windowHandle(), Qt::LeftButton, {}, dlgLabel->geometry().center());
+ QTRY_VERIFY(!combo->view()->isVisible());
+}
+
QTEST_MAIN(tst_QComboBox)
#include "tst_qcombobox.moc"
diff --git a/tests/auto/widgets/widgets/qcommandlinkbutton/CMakeLists.txt b/tests/auto/widgets/widgets/qcommandlinkbutton/CMakeLists.txt
index dfb555673a..b89c5aa1dd 100644
--- a/tests/auto/widgets/widgets/qcommandlinkbutton/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qcommandlinkbutton/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qcommandlinkbutton.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qcommandlinkbutton Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qcommandlinkbutton LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qcommandlinkbutton
SOURCES
tst_qcommandlinkbutton.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
+ Qt::GuiPrivate
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp b/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp
index 11bef2dc0d..e0c63e5ced 100644
--- a/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.cpp
+++ b/tests/auto/widgets/widgets/qcommandlinkbutton/tst_qcommandlinkbutton.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 <QTest>
@@ -40,6 +15,9 @@
#include <QGridLayout>
#include <QPainter>
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformtheme.h>
+
class tst_QCommandLinkButton : public QObject
{
Q_OBJECT
@@ -226,6 +204,13 @@ void tst_QCommandLinkButton::setAutoRepeat()
// check that pressing ENTER has no effect
resetCounters();
testWidget->setDown( false );
+ // Skip after reset if ButtonPressKeys has Key_Enter
+ const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+ ->themeHint(QPlatformTheme::ButtonPressKeys)
+ .value<QList<Qt::Key>>();
+ if (buttonPressKeys.contains(Qt::Key_Enter)) {
+ return;
+ }
testWidget->setAutoRepeat( false );
QTest::keyPress( testWidget, Qt::Key_Enter );
@@ -258,6 +243,14 @@ void tst_QCommandLinkButton::pressed()
QCOMPARE( press_count, (uint)1 );
QCOMPARE( release_count, (uint)1 );
+ // Skip if ButtonPressKeys has Key_Enter
+ const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+ ->themeHint(QPlatformTheme::ButtonPressKeys)
+ .value<QList<Qt::Key>>();
+ if (buttonPressKeys.contains(Qt::Key_Enter)) {
+ return;
+ }
+
QTest::keyPress( testWidget,Qt::Key_Enter );
QCOMPARE( press_count, (uint)1 );
QCOMPARE( release_count, (uint)1 );
diff --git a/tests/auto/widgets/widgets/qdatetimeedit/CMakeLists.txt b/tests/auto/widgets/widgets/qdatetimeedit/CMakeLists.txt
index 8ddb0a3b0d..9c2e777380 100644
--- a/tests/auto/widgets/widgets/qdatetimeedit/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qdatetimeedit/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qdatetimeedit.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdatetimeedit Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdatetimeedit LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdatetimeedit
SOURCES
tst_qdatetimeedit.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::Widgets
diff --git a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
index cc76bff416..f5f22d05b9 100644
--- a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
+++ b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qapplication.h>
#include <qgroupbox.h>
@@ -72,6 +47,8 @@
#include <private/qdatetimeedit_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
#ifdef Q_OS_WIN
# include <qt_windows.h>
#endif
@@ -256,10 +233,12 @@ private slots:
void nextPrevSection();
void dateEditTimeEditFormats();
+#if QT_DEPRECATED_SINCE(6, 10)
void timeSpec_data();
void timeSpec();
- void timeSpecBug();
- void timeSpecInit();
+#endif
+ void timeZoneBug();
+ void timeZoneInit();
void setDateTime_data();
void setDateTime();
@@ -275,7 +254,7 @@ private slots:
void task196924();
void focusNextPrevChild();
- void taskQTBUG_12384_timeSpecShowTimeOnly();
+ void taskQTBUG_12384_timeZoneShowTimeOnly();
void deleteCalendarWidget();
@@ -429,8 +408,8 @@ void tst_QDateTimeEdit::initTestCase()
qWarning("Running under locale %s/%s -- this test may generate failures due to language differences",
qPrintable(QLocale::languageToString(system.language())),
qPrintable(QLocale::territoryToString(system.territory())));
- testWidget = new EditorDateEdit(0);
- testFocusWidget = new QWidget(0);
+ testWidget = new EditorDateEdit;
+ testFocusWidget = new QWidget(nullptr);
testFocusWidget->resize(200, 100);
testFocusWidget->show();
}
@@ -459,7 +438,7 @@ void tst_QDateTimeEdit::cleanup()
{
testWidget->clearMinimumDateTime();
testWidget->clearMaximumDateTime();
- testWidget->setTimeSpec(Qt::LocalTime);
+ testWidget->setTimeZone(QTimeZone::LocalTime);
testWidget->setSpecialValueText(QString());
testWidget->setWrapping(false);
// Restore the default.
@@ -481,121 +460,104 @@ void tst_QDateTimeEdit::constructor_qwidget()
void tst_QDateTimeEdit::constructor_qdatetime_data()
{
QTest::addColumn<QDateTime>("parameter");
- QTest::addColumn<QDateTime>("displayDateTime");
- QTest::addColumn<QDate>("minimumDate");
- QTest::addColumn<QTime>("minimumTime");
- QTest::addColumn<QDate>("maximumDate");
- QTest::addColumn<QTime>("maximumTime");
-
- QTest::newRow("normal") << QDateTime(QDate(2004, 6, 16), QTime(13, 46, 32, 764))
- << QDateTime(QDate(2004, 6, 16), QTime(13, 46, 32, 764))
- << QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
- << QDate(9999, 12, 31) << QTime(23, 59, 59, 999);
- QTest::newRow("invalid") << QDateTime(QDate(9999, 99, 99), QTime(13, 46, 32, 764))
- << QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0, 0))
- << QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
- << QDate(9999, 12, 31) << QTime(23, 59, 59, 999);
+ QTest::newRow("normal") << QDateTime(QDate(2004, 6, 16), QTime(13, 46, 32, 764));
+ QTest::newRow("invalid") << QDateTime(QDate(9999, 99, 99), QTime(13, 46, 32, 764));
}
void tst_QDateTimeEdit::constructor_qdatetime()
{
QFETCH(QDateTime, parameter);
- QFETCH(QDateTime, displayDateTime);
- QFETCH(QDate, minimumDate);
- QFETCH(QTime, minimumTime);
- QFETCH(QDate, maximumDate);
- QFETCH(QTime, maximumTime);
-
testWidget->hide();
QDateTimeEdit dte(parameter);
dte.show();
- QCOMPARE(dte.dateTime(), displayDateTime);
- QCOMPARE(dte.minimumDate(), minimumDate);
- QCOMPARE(dte.minimumTime(), minimumTime);
- QCOMPARE(dte.maximumDate(), maximumDate);
- QCOMPARE(dte.maximumTime(), maximumTime);
+ if (QByteArrayView(QTest::currentDataTag()) == "invalid")
+ QCOMPARE(dte.dateTime(), QDateTime(QDate(2000, 1, 1), QTime(0, 0)));
+ else
+ QCOMPARE(dte.dateTime(), parameter);
+ QCOMPARE(dte.minimumDate(), QDate(1752, 9, 14));
+ QCOMPARE(dte.minimumTime(), QTime(0, 0));
+ QCOMPARE(dte.maximumDate(), QDate(9999, 12, 31));
+ QCOMPARE(dte.maximumTime(), QTime(23, 59, 59, 999));
}
void tst_QDateTimeEdit::constructor_qdate_data()
{
QTest::addColumn<QDate>("parameter");
- QTest::addColumn<QDateTime>("displayDateTime");
- QTest::addColumn<QDate>("minimumDate");
- QTest::addColumn<QTime>("minimumTime");
- QTest::addColumn<QDate>("maximumDate");
- QTest::addColumn<QTime>("maximumTime");
-
- QTest::newRow("normal") << QDate(2004, 6, 16)
- << QDateTime(QDate(2004, 6, 16), QTime(0, 0, 0, 0))
- << QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
- << QDate(9999, 12, 31) << QTime(23, 59, 59, 999);
- QTest::newRow("invalid") << QDate(9999, 99, 99)
- << QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0, 0))
- << QDate(1752, 9, 14) << QTime(0, 0, 0, 0)
- << QDate(9999, 12, 31) << QTime(23, 59, 59, 999);
+ QTest::newRow("normal") << QDate(2004, 6, 16);
+ QTest::newRow("invalid") << QDate(9999, 99, 99);
}
void tst_QDateTimeEdit::constructor_qdate()
{
QFETCH(QDate, parameter);
- QFETCH(QDateTime, displayDateTime);
- QFETCH(QDate, minimumDate);
- QFETCH(QTime, minimumTime);
- QFETCH(QDate, maximumDate);
- QFETCH(QTime, maximumTime);
-
testWidget->hide();
- QDateTimeEdit dte(parameter);
- dte.show();
- QCOMPARE(dte.dateTime(), displayDateTime);
- QCOMPARE(dte.minimumDate(), minimumDate);
- QCOMPARE(dte.minimumTime(), minimumTime);
- QCOMPARE(dte.maximumDate(), maximumDate);
- QCOMPARE(dte.maximumTime(), maximumTime);
+ {
+ QDateTimeEdit dte(parameter);
+ dte.show();
+ if (QByteArrayView(QTest::currentDataTag()) == "invalid")
+ QCOMPARE(dte.dateTime(), QDateTime(QDate(2000, 1, 1), QTime(0, 0)));
+ else
+ QCOMPARE(dte.dateTime(), QDateTime(parameter, QTime(0, 0)));
+ QCOMPARE(dte.minimumDate(), QDate(1752, 9, 14));
+ QCOMPARE(dte.minimumTime(), QTime(0, 0));
+ QCOMPARE(dte.maximumDate(), QDate(9999, 12, 31));
+ QCOMPARE(dte.maximumTime(), QTime(23, 59, 59, 999));
+ }
+ {
+ QDateEdit dte(parameter);
+ dte.show();
+ if (QByteArrayView(QTest::currentDataTag()) == "invalid")
+ QCOMPARE(dte.date(), QDate(2000, 1, 1));
+ else
+ QCOMPARE(dte.date(), parameter);
+ QCOMPARE(dte.minimumDate(), QDate(1752, 9, 14));
+ QCOMPARE(dte.minimumTime(), QTime(0, 0));
+ QCOMPARE(dte.maximumDate(), QDate(9999, 12, 31));
+ QCOMPARE(dte.maximumTime(), QTime(23, 59, 59, 999));
+ }
}
void tst_QDateTimeEdit::constructor_qtime_data()
{
QTest::addColumn<QTime>("parameter");
- QTest::addColumn<QDateTime>("displayDateTime");
- QTest::addColumn<QDate>("minimumDate");
- QTest::addColumn<QTime>("minimumTime");
- QTest::addColumn<QDate>("maximumDate");
- QTest::addColumn<QTime>("maximumTime");
-
- QTest::newRow("normal") << QTime(13, 46, 32, 764)
- << QDateTime(QDate(2000, 1, 1), QTime(13, 46, 32, 764))
- << QDate(2000, 1, 1) << QTime(0, 0, 0, 0)
- << QDate(2000, 1, 1) << QTime(23, 59, 59, 999);
- QTest::newRow("invalid") << QTime(99, 99, 99, 5000)
- << QDateTime(QDate(2000, 1, 1), QTime(0, 0, 0, 0))
- << QDate(2000, 1, 1) << QTime(0, 0, 0, 0)
- << QDate(2000, 1, 1) << QTime(23, 59, 59, 999);
+ QTest::newRow("normal") << QTime(13, 46, 32, 764);
+ QTest::newRow("invalid") << QTime(99, 99, 99, 5000);
}
void tst_QDateTimeEdit::constructor_qtime()
{
QFETCH(QTime, parameter);
- QFETCH(QDateTime, displayDateTime);
- QFETCH(QDate, minimumDate);
- QFETCH(QTime, minimumTime);
- QFETCH(QDate, maximumDate);
- QFETCH(QTime, maximumTime);
-
testWidget->hide();
- QDateTimeEdit dte(parameter);
- dte.show();
- QCOMPARE(dte.dateTime(), displayDateTime);
- QCOMPARE(dte.minimumDate(), minimumDate);
- QCOMPARE(dte.minimumTime(), minimumTime);
- QCOMPARE(dte.maximumDate(), maximumDate);
- QCOMPARE(dte.maximumTime(), maximumTime);
+ {
+ QDateTimeEdit dte(parameter);
+ dte.show();
+ if (QByteArrayView(QTest::currentDataTag()) == "invalid")
+ QCOMPARE(dte.dateTime(), QDateTime(QDate(2000, 1, 1), QTime(0, 0)));
+ else
+ QCOMPARE(dte.dateTime(), QDateTime(QDate(2000, 1, 1), parameter));
+ QCOMPARE(dte.minimumDate(), QDate(2000, 1, 1));
+ QCOMPARE(dte.minimumTime(), QTime(0, 0));
+ QCOMPARE(dte.maximumDate(), QDate(2000, 1, 1));
+ QCOMPARE(dte.maximumTime(), QTime(23, 59, 59, 999));
+ }
+ {
+ QTimeEdit dte(parameter);
+ dte.show();
+ if (QByteArrayView(QTest::currentDataTag()) == "invalid")
+ QCOMPARE(dte.time(), QTime(0, 0));
+ else
+ QCOMPARE(dte.time(), parameter);
+ QCOMPARE(dte.minimumDate(), QDate(2000, 1, 1));
+ QCOMPARE(dte.minimumTime(), QTime(0, 0));
+ QCOMPARE(dte.maximumDate(), QDate(2000, 1, 1));
+ QCOMPARE(dte.maximumTime(), QTime(23, 59, 59, 999));
+ }
}
void tst_QDateTimeEdit::minimumDate_data()
@@ -865,7 +827,7 @@ void tst_QDateTimeEdit::selectAndScrollWithKeys()
return;
#endif
- qApp->setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
testWidget->setDate(QDate(2004, 05, 11));
testWidget->setDisplayFormat("dd/MM/yyyy");
testWidget->show();
@@ -967,7 +929,7 @@ void tst_QDateTimeEdit::selectAndScrollWithKeys()
void tst_QDateTimeEdit::backspaceKey()
{
- qApp->setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
testWidget->setDate(QDate(2004, 05, 11));
testWidget->setDisplayFormat("d/MM/yyyy");
testWidget->show();
@@ -1033,7 +995,7 @@ void tst_QDateTimeEdit::backspaceKey()
void tst_QDateTimeEdit::deleteKey()
{
- qApp->setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
testWidget->setDate(QDate(2004, 05, 11));
testWidget->setDisplayFormat("d/MM/yyyy");
#ifdef Q_OS_MAC
@@ -1052,7 +1014,7 @@ void tst_QDateTimeEdit::deleteKey()
void tst_QDateTimeEdit::tabKeyNavigation()
{
- qApp->setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
testWidget->setDate(QDate(2004, 05, 11));
testWidget->setDisplayFormat("dd/MM/yyyy");
testWidget->show();
@@ -1070,7 +1032,7 @@ void tst_QDateTimeEdit::tabKeyNavigation()
void tst_QDateTimeEdit::tabKeyNavigationWithPrefix()
{
- qApp->setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
testWidget->setDate(QDate(2004, 05, 11));
testWidget->setDisplayFormat("prefix dd/MM/yyyy");
@@ -1088,7 +1050,7 @@ void tst_QDateTimeEdit::tabKeyNavigationWithPrefix()
void tst_QDateTimeEdit::tabKeyNavigationWithSuffix()
{
- qApp->setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
testWidget->setDate(QDate(2004, 05, 11));
testWidget->setDisplayFormat("dd/MM/yyyy 'suffix'");
@@ -1104,7 +1066,7 @@ void tst_QDateTimeEdit::tabKeyNavigationWithSuffix()
void tst_QDateTimeEdit::enterKey()
{
- qApp->setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
testWidget->setDate(QDate(2004, 5, 11));
testWidget->setDisplayFormat("prefix d/MM/yyyy 'suffix'");
testWidget->lineEdit()->setFocus();
@@ -1162,7 +1124,7 @@ void tst_QDateTimeEdit::enterKey()
// we include this test so a change to the behaviour can't go unnoticed.
QSignalSpy enterSpy(testWidget, SIGNAL(dateChanged(QDate)));
QTest::keyClick(testWidget, Qt::Key_Enter);
- QCOMPARE(enterSpy.count(), 1);
+ QCOMPARE(enterSpy.size(), 1);
QVariantList list = enterSpy.takeFirst();
QCOMPARE(list.at(0).toDate(), QDate(2004, 5, 9));
}
@@ -1356,7 +1318,7 @@ void tst_QDateTimeEdit::editingRanged_data()
<< QDate(2010, 12, 30) << QTime()
<< QDate(2011, 1, 2) << QTime()
<< QString::fromLatin1("01012011")
- << QDateTime(QDate(2011, 1, 1), QTime(), Qt::UTC);
+ << QDateTime(QDate(2011, 1, 1), QTime(), QTimeZone::UTC);
}
void tst_QDateTimeEdit::editingRanged()
@@ -1392,7 +1354,7 @@ void tst_QDateTimeEdit::editingRanged()
});
edit->show();
- QApplication::setActiveWindow(edit.get());
+ QApplicationPrivate::setActiveWindow(edit.get());
if (!QTest::qWaitForWindowActive(edit.get()))
QSKIP("Failed to make window active, aborting");
edit->setFocus();
@@ -2237,7 +2199,7 @@ void tst_QDateTimeEdit::dateSignalChecking()
QSignalSpy timeSpy(testWidget, SIGNAL(timeChanged(QTime)));
testWidget->setDate(newDate);
- QCOMPARE(dateSpy.count(), timesEmitted);
+ QCOMPARE(dateSpy.size(), timesEmitted);
if (timesEmitted > 0) {
QList<QVariant> list = dateSpy.takeFirst();
@@ -2245,8 +2207,8 @@ void tst_QDateTimeEdit::dateSignalChecking()
d = qvariant_cast<QDate>(list.at(0));
QCOMPARE(d, newDate);
}
- QCOMPARE(dateTimeSpy.count(), timesEmitted);
- QCOMPARE(timeSpy.count(), 0);
+ QCOMPARE(dateTimeSpy.size(), timesEmitted);
+ QCOMPARE(timeSpy.size(), 0);
}
void tst_QDateTimeEdit::timeSignalChecking_data()
@@ -2273,7 +2235,7 @@ void tst_QDateTimeEdit::timeSignalChecking()
QSignalSpy timeSpy(testWidget, SIGNAL(timeChanged(QTime)));
testWidget->setTime(newTime);
- QCOMPARE(timeSpy.count(), timesEmitted);
+ QCOMPARE(timeSpy.size(), timesEmitted);
if (timesEmitted > 0) {
QList<QVariant> list = timeSpy.takeFirst();
@@ -2281,8 +2243,8 @@ void tst_QDateTimeEdit::timeSignalChecking()
t = qvariant_cast<QTime>(list.at(0));
QCOMPARE(t, newTime);
}
- QCOMPARE(dateTimeSpy.count(), timesEmitted);
- QCOMPARE(dateSpy.count(), 0);
+ QCOMPARE(dateTimeSpy.size(), timesEmitted);
+ QCOMPARE(dateSpy.size(), 0);
}
void tst_QDateTimeEdit::dateTimeSignalChecking_data()
@@ -2323,7 +2285,7 @@ void tst_QDateTimeEdit::dateTimeSignalChecking()
QSignalSpy dateTimeSpy(testWidget, SIGNAL(dateTimeChanged(QDateTime)));
testWidget->setDateTime(newDateTime);
- QCOMPARE(dateSpy.count(), timesDateEmitted);
+ QCOMPARE(dateSpy.size(), timesDateEmitted);
if (timesDateEmitted > 0) {
QCOMPARE(timesDateEmitted, 1);
QList<QVariant> list = dateSpy.takeFirst();
@@ -2331,14 +2293,14 @@ void tst_QDateTimeEdit::dateTimeSignalChecking()
d = qvariant_cast<QDate>(list.at(0));
QCOMPARE(d, newDateTime.date());
}
- QCOMPARE(timeSpy.count(), timesTimeEmitted);
+ QCOMPARE(timeSpy.size(), timesTimeEmitted);
if (timesTimeEmitted > 0) {
QList<QVariant> list = timeSpy.takeFirst();
QTime t;
t = qvariant_cast<QTime>(list.at(0));
QCOMPARE(t, newDateTime.time());
}
- QCOMPARE(dateTimeSpy.count(), timesDateTimeEmitted);
+ QCOMPARE(dateTimeSpy.size(), timesDateTimeEmitted);
if (timesDateTimeEmitted > 0) {
QList<QVariant> list = dateTimeSpy.takeFirst();
QDateTime dt;
@@ -3202,22 +3164,22 @@ void tst_QDateTimeEdit::task149097()
testWidget->setDisplayFormat("yyyy/MM/dd hh:mm:ss");
testWidget->setDateTime(QDateTime(QDate(2001, 02, 03), QTime(5, 1, 2)));
// QTest::keyClick(testWidget, Qt::Key_Enter);
- QCOMPARE(dtSpy.count(), 1);
- QCOMPARE(dSpy.count(), 1);
- QCOMPARE(tSpy.count(), 1);
+ QCOMPARE(dtSpy.size(), 1);
+ QCOMPARE(dSpy.size(), 1);
+ QCOMPARE(tSpy.size(), 1);
testWidget->setCurrentSection(QDateTimeEdit::YearSection);
testWidget->stepBy(1);
- QCOMPARE(dtSpy.count(), 2);
- QCOMPARE(dSpy.count(), 2);
- QCOMPARE(tSpy.count(), 1);
+ QCOMPARE(dtSpy.size(), 2);
+ QCOMPARE(dSpy.size(), 2);
+ QCOMPARE(tSpy.size(), 1);
testWidget->setCurrentSection(QDateTimeEdit::MinuteSection);
testWidget->stepBy(1);
- QCOMPARE(dtSpy.count(), 3);
- QCOMPARE(dSpy.count(), 2);
- QCOMPARE(tSpy.count(), 2);
+ QCOMPARE(dtSpy.size(), 3);
+ QCOMPARE(dSpy.size(), 2);
+ QCOMPARE(tSpy.size(), 2);
}
void tst_QDateTimeEdit::task148725()
@@ -3405,7 +3367,7 @@ void tst_QDateTimeEdit::wheelEvent()
QFETCH(QDate, startDate);
QFETCH(DateList, expectedDates);
- EditorDateEdit edit(0);
+ EditorDateEdit edit;
edit.setDate(startDate);
edit.setCurrentSection(section);
@@ -3531,6 +3493,7 @@ void tst_QDateTimeEdit::dateEditTimeEditFormats()
QCOMPARE(d.displayedSections(), QDateTimeEdit::YearSection);
}
+#if QT_DEPRECATED_SINCE(6, 10)
void tst_QDateTimeEdit::timeSpec_data()
{
QTest::addColumn<bool>("useSetProperty");
@@ -3538,6 +3501,8 @@ void tst_QDateTimeEdit::timeSpec_data()
QTest::newRow("setTimeSpec") << false;
}
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QDateTimeEdit::timeSpec()
{
QFETCH(bool, useSetProperty);
@@ -3563,7 +3528,7 @@ void tst_QDateTimeEdit::timeSpec()
QCOMPARE(edit.timeSpec(), Qt::LocalTime);
const QDateTime utc = dt.toUTC();
if (dt.time() != utc.time()) {
- const QDateTime min(QDate(1999, 1, 1), QTime(1, 0, 0), Qt::LocalTime);
+ const QDateTime min(QDate(1999, 1, 1), QTime(1, 0));
edit.setMinimumDateTime(min);
QCOMPARE(edit.minimumTime(), min.time());
if (useSetProperty) {
@@ -3578,10 +3543,12 @@ void tst_QDateTimeEdit::timeSpec()
QSKIP("Not tested in the GMT timezone");
}
}
+QT_WARNING_POP
+#endif // test deprecated timeSpec property
-void tst_QDateTimeEdit::timeSpecBug()
+void tst_QDateTimeEdit::timeZoneBug()
{
- testWidget->setTimeSpec(Qt::UTC);
+ testWidget->setTimeZone(QTimeZone::UTC);
testWidget->setDisplayFormat("hh:mm");
testWidget->setTime(QTime(2, 2));
const QString oldText = testWidget->text();
@@ -3591,57 +3558,33 @@ void tst_QDateTimeEdit::timeSpecBug()
QCOMPARE(oldText, testWidget->text());
}
-void tst_QDateTimeEdit::timeSpecInit()
+void tst_QDateTimeEdit::timeZoneInit()
{
- QDateTime utc(QDate(2000, 1, 1), QTime(12, 0, 0), Qt::UTC);
+ QDateTime utc(QDate(2000, 1, 1), QTime(12, 0), QTimeZone::UTC);
QDateTimeEdit widget(utc);
QCOMPARE(widget.dateTime(), utc);
}
void tst_QDateTimeEdit::setDateTime_data()
{
- QTest::addColumn<Qt::TimeSpec>("spec");
- QDateTime localNoon(QDate(2019, 12, 24), QTime(12, 0), Qt::LocalTime);
-#if 0 // Not yet supported
- QTest::addColumn<int>("offset");
- QTest::addColumn<QByteArray>("zoneName");
-
- QTest::newRow("OffsetFromUTC/LocalTime")
- << Qt::OffsetFromUTC << 7200 << ""
- << localNoon << localNoon.toOffsetFromUtc(7200);
-#if QT_CONFIG(timezone)
- QTest::newRow("TimeZone/LocalTime")
- << Qt::TimeZone << 0 << "Europe/Berlin"
- << localNoon << localNoon.toTimeZone(QTimeZone("Europe/Berlin"));
-#endif
-#endif // unsupported
+ const QDateTime localNoon(QDate(2019, 12, 24), QTime(12, 0));
+ const QTimeZone UTC(QTimeZone::UTC), local(QTimeZone::LocalTime);
+ QTest::addColumn<QTimeZone>("zone");
QTest::addColumn<QDateTime>("store");
QTest::addColumn<QDateTime>("expect");
- QTest::newRow("LocalTime/LocalTime")
- << Qt::LocalTime // << 0 << ""
- << localNoon << localNoon;
- QTest::newRow("LocalTime/UTC")
- << Qt::LocalTime // << 0 << ""
- << localNoon.toUTC() << localNoon;
- QTest::newRow("UTC/LocalTime")
- << Qt::UTC // << 0 << ""
- << localNoon << localNoon.toUTC();
- QTest::newRow("UTC/UTC")
- << Qt::UTC // << 0 << ""
- << localNoon.toUTC() << localNoon.toUTC();
+ QTest::newRow("LocalTime/LocalTime") << local << localNoon << localNoon;
+ QTest::newRow("LocalTime/UTC") << local << localNoon.toUTC() << localNoon;
+ QTest::newRow("UTC/LocalTime") << UTC << localNoon << localNoon.toUTC();
+ QTest::newRow("UTC/UTC") << UTC << localNoon.toUTC() << localNoon.toUTC();
}
void tst_QDateTimeEdit::setDateTime()
{
- QFETCH(const Qt::TimeSpec, spec);
-#if 0 // Not yet supported
- QFETCH(const int, offset);
- QFETCH(const QByteArray, zoneName);
-#endif // configuring the spec, when OffsetFromUTC or TimeZone
+ QFETCH(const QTimeZone, zone);
QFETCH(const QDateTime, store);
QFETCH(const QDateTime, expect);
QDateTimeEdit editor;
- editor.setTimeSpec(spec);
+ editor.setTimeZone(zone);
editor.setDateTime(store);
QCOMPARE(editor.dateTime(), expect);
}
@@ -3835,14 +3778,14 @@ void tst_QDateTimeEdit::focusNextPrevChild()
QCOMPARE(edit.currentSection(), QDateTimeEdit::MonthSection);
}
-void tst_QDateTimeEdit::taskQTBUG_12384_timeSpecShowTimeOnly()
+void tst_QDateTimeEdit::taskQTBUG_12384_timeZoneShowTimeOnly()
{
QDateTime time = QDateTime::fromString("20100723 04:02:40", "yyyyMMdd hh:mm:ss");
- time.setTimeSpec(Qt::UTC);
+ time.setTimeZone(QTimeZone::UTC);
EditorDateEdit edit;
edit.setDisplayFormat("hh:mm:ss");
- edit.setTimeSpec(Qt::UTC);
+ edit.setTimeZone(QTimeZone::UTC);
edit.setDateTime(time);
QCOMPARE(edit.minimumTime(), QTime(0, 0, 0, 0));
@@ -3858,7 +3801,7 @@ void tst_QDateTimeEdit::deleteCalendarWidget()
QVERIFY(!edit.calendarWidget());
edit.setCalendarPopup(true);
QVERIFY(edit.calendarWidget());
- edit.calendarWidget()->setObjectName("cw1");;
+ edit.calendarWidget()->setObjectName("cw1");
// delete
delete edit.calendarWidget();
@@ -4484,7 +4427,7 @@ void tst_QDateTimeEdit::stepModifierButtons()
testWidget->hide();
- EditorDateEdit edit(0);
+ EditorDateEdit edit;
edit.setTime(startTime);
edit.show();
QVERIFY(QTest::qWaitForWindowActive(&edit));
@@ -4570,11 +4513,15 @@ void tst_QDateTimeEdit::stepModifierPressAndHold()
QFETCH(Qt::KeyboardModifiers, modifiers);
QFETCH(int, expectedStepModifier);
- const QDate startDate(2000, 1, 1);
+ // Some west African zones (e.g. Niamey, Conakry) changed from 1 hour west
+ // of GMT to GMT at the start of 1960; and spy.size() can get as high as 4,
+ // causing the expectedDate below, when expectedStepModifier is -10, to land
+ // in a transition gap for these zones, if we use Jan 1st; so use Jan 2nd.
+ const QDate startDate(2000, 1, 2);
testWidget->hide();
- EditorDateEdit edit(0);
+ EditorDateEdit edit;
edit.setDate(startDate);
QScopedPointer<StepModifierStyle, QScopedPointerDeleteLater> stepModifierStyle(
@@ -4595,12 +4542,12 @@ void tst_QDateTimeEdit::stepModifierPressAndHold()
QStyle::CC_SpinBox, &spinBoxStyleOption, subControl, &edit);
QTest::mousePress(&edit, Qt::LeftButton, modifiers, buttonRect.center());
- QTRY_VERIFY(spy.length() >= 3);
+ QTRY_VERIFY(spy.size() >= 3);
QTest::mouseRelease(&edit, Qt::LeftButton, modifiers, buttonRect.center());
const auto value = spy.last().at(0);
QVERIFY(value.userType() == QMetaType::QDate);
- const QDate expectedDate = startDate.addYears(spy.length() *
+ const QDate expectedDate = startDate.addYears(spy.size() *
expectedStepModifier);
QCOMPARE(value.toDate(), expectedDate);
}
@@ -4624,13 +4571,20 @@ static QDateTime findSpring(int year, const QTimeZone &timeZone)
const QTimeZone::OffsetData transition =
midSummer.isDaylightTime() ? timeZone.previousTransition(midSummer)
: timeZone.nextTransition(midSummer);
- const QDateTime spring = transition.atUtc.toLocalTime();
+ const QDateTime spring = transition.atUtc.toTimeZone(timeZone);
// there might have been DST at some point, but not in the year we care about
if (spring.date().year() != year || !spring.isDaylightTime())
return QDateTime();
return spring;
};
+
+// Number of missing seconds between a day before and a day after when.
+// If when is the time of a spring-forward transition, this is the width of its gap.
+static int missingSecondsNear(const QDateTime &when)
+{
+ return 2 * 24 * 60 * 60 - when.addDays(-1).secsTo(when.addDays(1));
+}
#endif
/*!
@@ -4654,36 +4608,40 @@ void tst_QDateTimeEdit::springForward_data()
QSKIP("Failed to obtain valid spring forward datetime for 2019!");
const QDate springDate = springTransition.date();
- const int gapWidth = timeZone.daylightTimeOffset(springTransition.addDays(1));
+ const int gapWidth = missingSecondsNear(springTransition);
+ if (gapWidth <= 0)
+ QSKIP("Spring forward transition did not actually skip any time!");
+
const QTime springGap = springTransition.time().addSecs(-gapWidth);
- const QByteArray springTime = springGap.toString("hh:mm").toLocal8Bit();
- const QTime springGapMiddle = springTransition.time().addSecs(-gapWidth/2);
+ const QTime springGapMiddle = springTransition.time().addSecs(-gapWidth / 2);
+ const QByteArray startGapTime = springGap.toString("hh:mm").toLocal8Bit();
+ const QByteArray midGapTime = springGapMiddle.toString("hh:mm").toLocal8Bit();
- QTest::addRow("forward to %s, correct to previous", springTime.data())
+ QTest::addRow("forward to %s, correct to previous", startGapTime.data())
<< QDateTime(springDate, springGap.addSecs(-gapWidth))
<< QAbstractSpinBox::CorrectToPreviousValue
<< springGap
<< QDateTime(springDate, springGap.addSecs(-gapWidth));
- QTest::addRow("back to %s, correct to previous", springTime.data())
+ QTest::addRow("back to %s, correct to previous", startGapTime.data())
<< springTransition
<< QAbstractSpinBox::CorrectToPreviousValue
<< springGap
<< springTransition;
- QTest::addRow("forward to %s, correct to nearest", springTime.data())
+ QTest::addRow("forward to %s, correct to nearest", midGapTime.data())
<< QDateTime(springDate, springGap.addSecs(-gapWidth))
<< QAbstractSpinBox::CorrectToNearestValue
<< springGapMiddle
<< springTransition;
- QTest::addRow("back to %s, correct to nearest", springTime.data())
+ QTest::addRow("back to %s, correct to nearest", midGapTime.data())
<< springTransition
<< QAbstractSpinBox::CorrectToNearestValue
<< springGapMiddle
<< springTransition;
- QTest::addRow("jump to %s, correct to nearest", qPrintable(springGapMiddle.toString("hh:mm")))
+ QTest::addRow("jump to %s, correct to nearest", midGapTime.data())
<< QDateTime(QDate(1980, 5, 10), springGap)
<< QAbstractSpinBox::CorrectToNearestValue
<< springGapMiddle
@@ -4711,11 +4669,11 @@ void tst_QDateTimeEdit::springForward()
edit.setSelectedSection(QDateTimeEdit::DaySection);
const QDate date = expected.date();
- const QString day = QString::number(date.day()).rightJustified(2, QLatin1Char('0'));
- const QString month = QString::number(date.month()).rightJustified(2, QLatin1Char('0'));
+ const QString day = QString::number(date.day()).rightJustified(2, u'0');
+ const QString month = QString::number(date.month()).rightJustified(2, u'0');
const QString year = QString::number(date.year());
- const QString hour = QString::number(inputTime.hour()).rightJustified(2, QLatin1Char('0'));
- const QString minute = QString::number(inputTime.minute()).rightJustified(2, QLatin1Char('0'));
+ const QString hour = QString::number(inputTime.hour()).rightJustified(2, u'0');
+ const QString minute = QString::number(inputTime.minute()).rightJustified(2, u'0');
QTest::keyClicks(&edit, day);
QTest::keyClicks(&edit, month);
QTest::keyClicks(&edit, year);
@@ -4742,7 +4700,7 @@ void tst_QDateTimeEdit::stepIntoDSTGap_data()
QTest::addColumn<int>("steps");
QTest::addColumn<QDateTime>("end");
- const QTimeZone timeZone = QTimeZone("Europe/Oslo");
+ const QTimeZone timeZone = QTimeZone::systemTimeZone();
if (!timeZone.hasDaylightTime())
QSKIP("This test needs to run in a timezone that observes DST!");
@@ -4751,11 +4709,14 @@ void tst_QDateTimeEdit::stepIntoDSTGap_data()
QSKIP("Failed to obtain valid spring forward datetime for 2007!");
const QDate spring = springTransition.date();
- const int gapWidth = timeZone.daylightTimeOffset(springTransition.addDays(1));
+ const int gapWidth = missingSecondsNear(springTransition);
+ if (gapWidth <= 0)
+ QSKIP("Spring forward transition did not actually skip any time!");
+
const QTime springGap = springTransition.time().addSecs(-gapWidth);
const QByteArray springTime = springGap.toString("hh:mm").toLocal8Bit();
- // change hour
+ // change hour (can't change day):
if (springGap.hour() != 0) {
QTest::addRow("hour up into %s gap", springTime.data())
<< QDateTime(spring, springGap.addSecs(-3600))
@@ -4765,7 +4726,7 @@ void tst_QDateTimeEdit::stepIntoDSTGap_data()
// 3:00:10 into 2:00:10 should get us to 1:00:10
QTest::addRow("hour down into %s gap", springTime.data())
- << QDateTime(spring, springGap.addSecs(3610))
+ << QDateTime(spring, springGap.addSecs(gapWidth + 10))
<< QDateTimeEdit::HourSection
<< -1
<< QDateTime(spring, springGap.addSecs(-3590));
@@ -4790,28 +4751,31 @@ void tst_QDateTimeEdit::stepIntoDSTGap_data()
}
// change month
- QTest::addRow("month up into %s gap", springTime.data())
- << QDateTime(spring.addMonths(-1), springGap)
- << QDateTimeEdit::MonthSection
- << +1
- << springTransition;
- QTest::addRow("month down into %s gap", springTime.data())
- << QDateTime(spring.addMonths(1), springGap)
- << QDateTimeEdit::MonthSection
- << -1
- << springTransition;
+ // Previous month may well be February, so lack the day-of-month that
+ // matches spring (e.g. Asia/Jerusalem, March 30).
+ if (QDate prior = spring.addMonths(-1); prior.day() == spring.day()) {
+ QTest::addRow("month up into %s gap", springTime.data())
+ << QDateTime(prior, springGap) << QDateTimeEdit::MonthSection << +1 << springTransition;
+ }
+ // America/{Jujuy,Cordoba,Catamarca} did a 2007 Dec 30th 00:00 spring
+ // forward; and QDTE month steps won't change the year.
+ if (QDate prior = spring.addMonths(1);
+ prior.year() == spring.year() && prior.day() == spring.day()) {
+ QTest::addRow("month down into %s gap", springTime.data())
+ << QDateTime(prior, springGap) << QDateTimeEdit::MonthSection << -1 << springTransition;
+ }
// change year
- QTest::addRow("year up into %s gap", springTime.data())
- << QDateTime(spring.addYears(-1), springGap)
- << QDateTimeEdit::YearSection
- << +1
- << springTransition;
- QTest::addRow("year down into %s gap", springTime.data())
- << QDateTime(spring.addYears(1), springGap)
- << QDateTimeEdit::YearSection
- << -1
- << springTransition;
+ // Some zones (e.g. Asia/Baghdad) do transitions on a fixed date; for these,
+ // the springGap moment is invalid every year, so skip this test.
+ if (QDateTime prior = QDateTime(spring.addYears(-1), springGap); prior.isValid()) {
+ QTest::addRow("year up into %s gap", springTime.data())
+ << prior << QDateTimeEdit::YearSection << +1 << springTransition;
+ }
+ if (QDateTime later(spring.addYears(1), springGap); later.isValid()) {
+ QTest::addRow("year down into %s gap", springTime.data())
+ << later << QDateTimeEdit::YearSection << -1 << springTransition;
+ }
#else
QSKIP("Needs timezone feature enabled");
#endif
diff --git a/tests/auto/widgets/widgets/qdial/CMakeLists.txt b/tests/auto/widgets/widgets/qdial/CMakeLists.txt
index e76cc4a7db..5e300eec94 100644
--- a/tests/auto/widgets/widgets/qdial/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qdial/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qdial.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdial Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdial LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdial
SOURCES
tst_qdial.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qdial/tst_qdial.cpp b/tests/auto/widgets/widgets/qdial/tst_qdial.cpp
index 86928414c8..d0274ace2a 100644
--- a/tests/auto/widgets/widgets/qdial/tst_qdial.cpp
+++ b/tests/auto/widgets/widgets/qdial/tst_qdial.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 <QTest>
@@ -42,6 +17,7 @@ private slots:
void valueChanged();
void sliderMoved();
void wrappingCheck();
+ void minEqualMaxValueOutsideRange();
void notchSize_data();
void notchSize();
@@ -77,14 +53,14 @@ void tst_QDial::valueChanged()
dial.setMaximum(100);
QSignalSpy spy(&dial, SIGNAL(valueChanged(int)));
dial.setValue(50);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
dial.setValue(25);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
// repeat!
dial.setValue(25);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QDial::sliderMoved()
@@ -100,7 +76,7 @@ void tst_QDial::sliderMoved()
QPoint init(dial.width()/4, dial.height()/2);
- QMouseEvent pressevent(QEvent::MouseButtonPress, init,
+ QMouseEvent pressevent(QEvent::MouseButtonPress, init, dial.mapToGlobal(init),
Qt::LeftButton, Qt::LeftButton, {});
qApp->sendEvent(&dial, &pressevent);
@@ -110,27 +86,27 @@ void tst_QDial::sliderMoved()
{ //move on top of the slider
init = QPoint(dial.width()/2, dial.height()/4);
- QMouseEvent moveevent(QEvent::MouseMove, init,
+ QMouseEvent moveevent(QEvent::MouseMove, init, dial.mapToGlobal(init),
Qt::LeftButton, Qt::LeftButton, {});
qApp->sendEvent(&dial, &moveevent);
- QCOMPARE( sliderspy.count(), 1);
- QCOMPARE( valuespy.count(), 0);
+ QCOMPARE( sliderspy.size(), 1);
+ QCOMPARE( valuespy.size(), 0);
}
{ //move on the right of the slider
init = QPoint(dial.width()*3/4, dial.height()/2);
- QMouseEvent moveevent(QEvent::MouseMove, init,
+ QMouseEvent moveevent(QEvent::MouseMove, init, dial.mapToGlobal(init),
Qt::LeftButton, Qt::LeftButton, {});
qApp->sendEvent(&dial, &moveevent);
- QCOMPARE( sliderspy.count(), 2);
- QCOMPARE( valuespy.count(), 0);
+ QCOMPARE( sliderspy.size(), 2);
+ QCOMPARE( valuespy.size(), 0);
}
- QMouseEvent releaseevent(QEvent::MouseButtonRelease, init,
+ QMouseEvent releaseevent(QEvent::MouseButtonRelease, init, dial.mapToGlobal(init),
Qt::LeftButton, Qt::LeftButton, {});
qApp->sendEvent(&dial, &releaseevent);
- QCOMPARE( valuespy.count(), 1); // valuechanged signal should be called at this point
+ QCOMPARE( valuespy.size(), 1); // valuechanged signal should be called at this point
}
@@ -197,6 +173,15 @@ void tst_QDial::wrappingCheck()
}
}
+// QTBUG-104641
+void tst_QDial::minEqualMaxValueOutsideRange()
+{
+ QDial dial;
+ dial.setRange(30, 30);
+ dial.setWrapping(true);
+ dial.setValue(45);
+}
+
/*
Verify that the notchSizes calculated don't change compared
to Qt 5.15 results for dial sizes at the edge values of the
diff --git a/tests/auto/widgets/widgets/qdialogbuttonbox/CMakeLists.txt b/tests/auto/widgets/widgets/qdialogbuttonbox/CMakeLists.txt
index c42fccd87f..098b129cbc 100644
--- a/tests/auto/widgets/widgets/qdialogbuttonbox/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qdialogbuttonbox/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qdialogbuttonbox.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdialogbuttonbox Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdialogbuttonbox LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdialogbuttonbox
SOURCES
tst_qdialogbuttonbox.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp b/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp
index 2e7e248db7..3e7dc92da1 100644
--- a/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp
+++ b/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp
@@ -1,38 +1,17 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QSignalSpy>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStyle>
#include <QtWidgets/QLayout>
#include <QtWidgets/QDialog>
+#include <QtWidgets/QLineEdit>
#include <QtGui/QAction>
+#include <QtGui/QStyleHints>
#include <qdialogbuttonbox.h>
+#include <QtWidgets/private/qdialogbuttonbox_p.h>
+#include <QtWidgets/private/qabstractbutton_p.h>
#include <limits.h>
Q_DECLARE_METATYPE(QDialogButtonBox::ButtonRole)
@@ -74,6 +53,10 @@ private slots:
void clear();
void removeButton_data();
void removeButton();
+#ifdef QT_BUILD_INTERNAL
+ void hideAndShowButton();
+#endif
+ void hideAndShowStandardButton();
void buttonRole_data();
void buttonRole();
void setStandardButtons_data();
@@ -99,6 +82,9 @@ private slots:
void task191642_default();
void testDeletedStandardButton();
+ void automaticDefaultButton();
+ void initialFocus_data();
+ void initialFocus();
private:
qint64 timeStamp;
@@ -122,7 +108,7 @@ void tst_QDialogButtonBox::testConstructor1()
QDialogButtonBox buttonbox;
QCOMPARE(buttonbox.orientation(), Qt::Horizontal);
- QCOMPARE(buttonbox.buttons().count(), 0);
+ QCOMPARE(buttonbox.buttons().size(), 0);
}
void tst_QDialogButtonBox::layoutReuse()
@@ -155,7 +141,7 @@ void tst_QDialogButtonBox::testConstructor2()
QDialogButtonBox buttonBox(orient);
QCOMPARE(buttonBox.orientation(), orient);
- QCOMPARE(buttonBox.buttons().count(), 0);
+ QCOMPARE(buttonBox.buttons().size(), 0);
}
void tst_QDialogButtonBox::testConstructor3_data()
@@ -192,7 +178,7 @@ void tst_QDialogButtonBox::testConstructor3()
QDialogButtonBox buttonBox(buttons, (Qt::Orientation)orientation);
QCOMPARE(int(buttonBox.orientation()), orientation);
- QTEST(int(buttonBox.buttons().count()), "buttonCount");
+ QTEST(int(buttonBox.buttons().size()), "buttonCount");
}
void tst_QDialogButtonBox::testConstructor4_data()
@@ -227,7 +213,7 @@ void tst_QDialogButtonBox::testConstructor4()
QDialogButtonBox buttonBox(buttons);
QCOMPARE(buttonBox.orientation(), Qt::Horizontal);
- QTEST(int(buttonBox.buttons().count()), "buttonCount");
+ QTEST(int(buttonBox.buttons().size()), "buttonCount");
}
void tst_QDialogButtonBox::setOrientation_data()
@@ -290,12 +276,12 @@ void tst_QDialogButtonBox::addButton1()
{
QFETCH(QDialogButtonBox::ButtonRole, role);
QDialogButtonBox buttonBox;
- QCOMPARE(buttonBox.buttons().count(), 0);
+ QCOMPARE(buttonBox.buttons().size(), 0);
QPushButton *button = new QPushButton();
buttonBox.addButton(button, role);
- QTEST(int(buttonBox.buttons().count()), "totalCount");
+ QTEST(int(buttonBox.buttons().size()), "totalCount");
QList<QAbstractButton *> children = buttonBox.findChildren<QAbstractButton *>();
- QTEST(int(children.count()), "totalCount");
+ QTEST(int(children.size()), "totalCount");
delete button;
}
@@ -318,11 +304,11 @@ void tst_QDialogButtonBox::addButton2()
QFETCH(QString, text);
QFETCH(QDialogButtonBox::ButtonRole, role);
QDialogButtonBox buttonBox;
- QCOMPARE(buttonBox.buttons().count(), 0);
+ QCOMPARE(buttonBox.buttons().size(), 0);
buttonBox.addButton(text, role);
- QTEST(int(buttonBox.buttons().count()), "totalCount");
+ QTEST(int(buttonBox.buttons().size()), "totalCount");
QList<QAbstractButton *> children = buttonBox.findChildren<QAbstractButton *>();
- QTEST(int(children.count()), "totalCount");
+ QTEST(int(children.size()), "totalCount");
}
void tst_QDialogButtonBox::addButton3_data()
@@ -345,11 +331,11 @@ void tst_QDialogButtonBox::addButton3()
{
QFETCH(QDialogButtonBox::StandardButton, button);
QDialogButtonBox buttonBox;
- QCOMPARE(buttonBox.buttons().count(), 0);
+ QCOMPARE(buttonBox.buttons().size(), 0);
buttonBox.addButton(button);
- QTEST(int(buttonBox.buttons().count()), "totalCount");
+ QTEST(int(buttonBox.buttons().size()), "totalCount");
QList<QAbstractButton *> children = buttonBox.findChildren<QAbstractButton *>();
- QTEST(int(children.count()), "totalCount");
+ QTEST(int(children.size()), "totalCount");
}
void tst_QDialogButtonBox::clear_data()
@@ -369,9 +355,9 @@ void tst_QDialogButtonBox::clear()
for (int i = 1; i < rolesToAdd; ++i)
buttonBox.addButton("Happy", QDialogButtonBox::ButtonRole(i));
buttonBox.clear();
- QCOMPARE(buttonBox.buttons().count(), 0);
+ QCOMPARE(buttonBox.buttons().size(), 0);
QList<QAbstractButton *> children = buttonBox.findChildren<QAbstractButton *>();
- QCOMPARE(children.count(), 0);
+ QCOMPARE(children.size(), 0);
}
void tst_QDialogButtonBox::removeButton_data()
@@ -387,31 +373,95 @@ void tst_QDialogButtonBox::removeButton()
QFETCH(QDialogButtonBox::ButtonRole, roleToAdd);
QDialogButtonBox buttonBox;
- QCOMPARE(buttonBox.buttons().count(), 0);
+ QCOMPARE(buttonBox.buttons().size(), 0);
QPushButton *button = new QPushButton("RemoveButton test");
buttonBox.addButton(button, roleToAdd);
- QTEST(int(buttonBox.buttons().count()), "expectedCount");
+ QTEST(int(buttonBox.buttons().size()), "expectedCount");
buttonBox.removeButton(button);
- QCOMPARE(buttonBox.buttons().count(), 0);
+ QCOMPARE(buttonBox.buttons().size(), 0);
delete button;
}
+#ifdef QT_BUILD_INTERNAL
+void tst_QDialogButtonBox::hideAndShowButton()
+{
+ if (QGuiApplication::styleHints()->tabFocusBehavior() == Qt::NoTabFocus)
+ QSKIP("Test skipped with Qt::NoTabFocus");
+
+ QDialogButtonBox buttonBox;
+ QDialogButtonBoxPrivate *d = static_cast<QDialogButtonBoxPrivate *>(QObjectPrivate::get(&buttonBox));
+ auto *apply = buttonBox.addButton( "Apply", QDialogButtonBox::ApplyRole );
+ auto *accept = buttonBox.addButton( "Accept", QDialogButtonBox::AcceptRole );
+ buttonBox.addButton( "Reject", QDialogButtonBox::RejectRole );
+ auto *widget = new QWidget();
+ auto *layout = new QHBoxLayout(widget);
+ layout->addWidget(&buttonBox);
+
+ // apply button shows first on macOS. accept button on all other OSes.
+ QAbstractButton *hideButton;
+#ifdef Q_OS_MACOS
+ hideButton = apply;
+ Q_UNUSED(accept);
+#else
+ hideButton = accept;
+ Q_UNUSED(apply);
+#endif
+
+ hideButton->hide();
+ widget->show();
+ QVERIFY(QTest::qWaitForWindowExposed(widget));
+ QTRY_VERIFY(buttonBox.focusWidget()); // QTBUG-114377: Without fixing, focusWidget() == nullptr
+ QCOMPARE(d->visibleButtons().count(), 2);
+ QCOMPARE(d->hiddenButtons.count(), 1);
+ QVERIFY(d->hiddenButtons.contains(hideButton));
+ QCOMPARE(buttonBox.buttons().count(), 3);
+ QSignalSpy spy(qApp, &QApplication::focusChanged);
+ QTest::sendKeyEvent(QTest::KeyAction::Click, &buttonBox, Qt::Key_Tab, QString(), Qt::KeyboardModifiers());
+ QCOMPARE(spy.count(), 1); // QTBUG-114377: Without fixing, tabbing wouldn't work.
+ hideButton->show();
+ QCOMPARE_GE(spy.count(), 1);
+ QTRY_COMPARE(QApplication::focusWidget(), hideButton);
+ QCOMPARE(d->visibleButtons().count(), 3);
+ QCOMPARE(d->hiddenButtons.count(), 0);
+ QCOMPARE(buttonBox.buttons().count(), 3);
+ spy.clear();
+ QTest::sendKeyEvent(QTest::KeyAction::Click, &buttonBox, Qt::Key_Backtab, QString(), Qt::KeyboardModifiers());
+ QCOMPARE(spy.count(), 1);
+}
+#endif
+
+void tst_QDialogButtonBox::hideAndShowStandardButton()
+{
+ QDialogButtonBox buttonBox;
+ buttonBox.setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+ buttonBox.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&buttonBox));
+ auto *button = buttonBox.button(QDialogButtonBox::Cancel);
+ QVERIFY(button);
+ button->hide();
+ QVERIFY(QTest::qWaitFor([button](){ return !button->isVisible(); }));
+ QCOMPARE(button, buttonBox.button(QDialogButtonBox::Cancel));
+ button->show();
+ QVERIFY(QTest::qWaitForWindowExposed(button));
+ QCOMPARE(button, buttonBox.button(QDialogButtonBox::Cancel));
+}
+
void tst_QDialogButtonBox::testDelete()
{
QDialogButtonBox buttonBox;
- QCOMPARE(buttonBox.buttons().count(), 0);
+ QCOMPARE(buttonBox.buttons().size(), 0);
QPushButton *deleteMe = new QPushButton("Happy");
buttonBox.addButton(deleteMe, QDialogButtonBox::HelpRole);
- QCOMPARE(buttonBox.buttons().count(), 1);
+ QCOMPARE(buttonBox.buttons().size(), 1);
QList<QAbstractButton *> children = buttonBox.findChildren<QAbstractButton *>();
- QCOMPARE(children.count(), 1);
+ QCOMPARE(children.size(), 1);
delete deleteMe;
children = buttonBox.findChildren<QAbstractButton *>();
- QCOMPARE(children.count(), 0);
- QCOMPARE(buttonBox.buttons().count(), 0);
+ QCOMPARE(children.size(), 0);
+ QCOMPARE(buttonBox.buttons().size(), 0);
}
class ObjectDeleter : public QObject
@@ -433,7 +483,7 @@ void tst_QDialogButtonBox::testSignalEmissionAfterDelete_QTBUG_45835()
{
{
QDialogButtonBox buttonBox;
- QCOMPARE(buttonBox.buttons().count(), 0);
+ QCOMPARE(buttonBox.buttons().size(), 0);
QSignalSpy buttonClickedSpy(&buttonBox, &QDialogButtonBox::clicked);
QVERIFY(buttonClickedSpy.isValid());
@@ -442,21 +492,21 @@ void tst_QDialogButtonBox::testSignalEmissionAfterDelete_QTBUG_45835()
QVERIFY(buttonBoxAcceptedSpy.isValid());
QPushButton *button = buttonBox.addButton("Test", QDialogButtonBox::AcceptRole);
- QCOMPARE(buttonBox.buttons().count(), 1);
+ QCOMPARE(buttonBox.buttons().size(), 1);
ObjectDeleter objectDeleter;
connect(&buttonBox, &QDialogButtonBox::clicked, &objectDeleter, &ObjectDeleter::deleteButton);
button->click();
- QCOMPARE(buttonBox.buttons().count(), 0);
- QCOMPARE(buttonClickedSpy.count(), 1);
- QCOMPARE(buttonBoxAcceptedSpy.count(), 1);
+ QCOMPARE(buttonBox.buttons().size(), 0);
+ QCOMPARE(buttonClickedSpy.size(), 1);
+ QCOMPARE(buttonBoxAcceptedSpy.size(), 1);
}
{
QPointer<QDialogButtonBox> buttonBox(new QDialogButtonBox);
- QCOMPARE(buttonBox->buttons().count(), 0);
+ QCOMPARE(buttonBox->buttons().size(), 0);
QSignalSpy buttonClickedSpy(buttonBox.data(), &QDialogButtonBox::clicked);
QVERIFY(buttonClickedSpy.isValid());
@@ -465,7 +515,7 @@ void tst_QDialogButtonBox::testSignalEmissionAfterDelete_QTBUG_45835()
QVERIFY(buttonBoxAcceptedSpy.isValid());
QPushButton *button = buttonBox->addButton("Test", QDialogButtonBox::AcceptRole);
- QCOMPARE(buttonBox->buttons().count(), 1);
+ QCOMPARE(buttonBox->buttons().size(), 1);
ObjectDeleter objectDeleter;
connect(buttonBox.data(), &QDialogButtonBox::clicked, &objectDeleter, &ObjectDeleter::deleteSender);
@@ -473,8 +523,8 @@ void tst_QDialogButtonBox::testSignalEmissionAfterDelete_QTBUG_45835()
button->click();
QVERIFY(buttonBox.isNull());
- QCOMPARE(buttonClickedSpy.count(), 1);
- QCOMPARE(buttonBoxAcceptedSpy.count(), 0);
+ QCOMPARE(buttonClickedSpy.size(), 1);
+ QCOMPARE(buttonBoxAcceptedSpy.size(), 0);
}
}
@@ -482,24 +532,24 @@ void tst_QDialogButtonBox::testMultipleAdd()
{
// Add a button into the thing multiple times.
QDialogButtonBox buttonBox;
- QCOMPARE(buttonBox.buttons().count(), 0);
+ QCOMPARE(buttonBox.buttons().size(), 0);
QPushButton *button = new QPushButton("Foo away");
buttonBox.addButton(button, QDialogButtonBox::AcceptRole);
- QCOMPARE(buttonBox.buttons().count(), 1);
+ QCOMPARE(buttonBox.buttons().size(), 1);
QCOMPARE(buttonBox.buttonRole(button), QDialogButtonBox::AcceptRole);
buttonBox.addButton(button, QDialogButtonBox::AcceptRole);
- QCOMPARE(buttonBox.buttons().count(), 1);
+ QCOMPARE(buttonBox.buttons().size(), 1);
QCOMPARE(buttonBox.buttonRole(button), QDialogButtonBox::AcceptRole);
// Add it again with a different role
buttonBox.addButton(button, QDialogButtonBox::RejectRole);
- QCOMPARE(buttonBox.buttons().count(), 1);
+ QCOMPARE(buttonBox.buttons().size(), 1);
QCOMPARE(buttonBox.buttonRole(button), QDialogButtonBox::RejectRole);
// Add it as an "invalid" role
buttonBox.addButton(button, QDialogButtonBox::InvalidRole);
- QCOMPARE(buttonBox.buttons().count(), 1);
+ QCOMPARE(buttonBox.buttons().size(), 1);
QCOMPARE(buttonBox.buttonRole(button), QDialogButtonBox::RejectRole);
}
@@ -619,13 +669,13 @@ void tst_QDialogButtonBox::testSignals()
if (clickMe)
clickMe->click();
- QTRY_COMPARE(clicked2.count(), clicked2Count);
- if (clicked2.count() > 0)
+ QTRY_COMPARE(clicked2.size(), clicked2Count);
+ if (clicked2.size() > 0)
QCOMPARE(qvariant_cast<QAbstractButton *>(clicked2.at(0).at(0)), clickMe);
- QTEST(int(accept.count()), "acceptCount");
- QTEST(int(reject.count()), "rejectCount");
- QTEST(int(helpRequested.count()), "helpRequestedCount");
+ QTEST(int(accept.size()), "acceptCount");
+ QTEST(int(reject.size()), "rejectCount");
+ QTEST(int(helpRequested.size()), "helpRequestedCount");
}
void tst_QDialogButtonBox::testSignalOrder()
@@ -781,7 +831,7 @@ void tst_QDialogButtonBox::testRemove()
button->click();
QTest::qWait(100);
- QCOMPARE(clicked.count(), 0);
+ QCOMPARE(clicked.size(), 0);
delete button;
}
@@ -843,7 +893,7 @@ void tst_QDialogButtonBox::task191642_default()
QVERIFY(QTest::qWaitForWindowActive(&dlg));
QVERIFY(def->isDefault());
QTest::keyPress( &dlg, Qt::Key_Enter );
- QCOMPARE(clicked.count(), 1);
+ QCOMPARE(clicked.size(), 1);
}
void tst_QDialogButtonBox::testDeletedStandardButton()
@@ -863,5 +913,87 @@ void tst_QDialogButtonBox::testDeletedStandardButton()
QVERIFY(!buttonC);
}
+void tst_QDialogButtonBox::automaticDefaultButton()
+{
+ // Having a QDialogButtonBox inside a QDialog triggers Qt to
+ // enable autoDefault for QPushButtons inside the button box.
+ // Check that the logic for resolving a default button based
+ // on the Accept role is not overridden by the first button
+ // in the dialog (the focus proxy) taking focus, and hence
+ // stealing the default button state.
+
+ {
+ QDialog dialog;
+ QDialogButtonBox *bb = new QDialogButtonBox(&dialog);
+ // Force horizontal orientation, where we know the order between
+ // Reset and Accept roles are always the same for all layouts.
+ bb->setOrientation(Qt::Horizontal);
+ auto *okButton = bb->addButton(QDialogButtonBox::Ok);
+ auto *resetButton = bb->addButton(QDialogButtonBox::Reset);
+ // Double check our assumption about Reset being first
+ QCOMPARE(bb->layout()->itemAt(0)->widget(), resetButton);
+
+ dialog.show();
+ QVERIFY(QTest::qWaitForWindowActive(&dialog));
+
+ QVERIFY(okButton->isDefault());
+ QSignalSpy buttonClicked(okButton, &QPushButton::clicked);
+ QTest::keyPress(&dialog, Qt::Key_Enter);
+ QCOMPARE(buttonClicked.count(), 1);
+ }
+
+ // However, if an explicit button has been focused, we respect that.
+
+ {
+ QDialog dialog;
+ QDialogButtonBox *bb = new QDialogButtonBox(&dialog);
+ bb->setOrientation(Qt::Horizontal);
+ bb->addButton(QDialogButtonBox::Ok);
+ auto *resetButton = bb->addButton(QDialogButtonBox::Reset);
+ resetButton->setFocus();
+ dialog.show();
+ QVERIFY(QTest::qWaitForWindowActive(&dialog));
+
+ QVERIFY(resetButton->isDefault());
+ QSignalSpy buttonClicked(resetButton, &QPushButton::clicked);
+ QTest::keyPress(&dialog, Qt::Key_Enter);
+ QCOMPARE(buttonClicked.count(), 1);
+ }
+}
+
+void tst_QDialogButtonBox::initialFocus_data()
+{
+ QTest::addColumn<Qt::FocusPolicy>("focusPolicy");
+ QTest::addColumn<bool>("lineEditHasFocus");
+
+ QTest::addRow("TabFocus") << Qt::FocusPolicy::TabFocus << false;
+ QTest::addRow("StrongFocus") << Qt::FocusPolicy::StrongFocus << true;
+ QTest::addRow("NoFocus") << Qt::FocusPolicy::NoFocus << false;
+ QTest::addRow("ClickFocus") << Qt::FocusPolicy::ClickFocus << false;
+ QTest::addRow("WheelFocus") << Qt::FocusPolicy::WheelFocus << false;
+}
+
+void tst_QDialogButtonBox::initialFocus()
+{
+ QFETCH(const Qt::FocusPolicy, focusPolicy);
+ QFETCH(const bool, lineEditHasFocus);
+ QDialog dialog;
+ QVBoxLayout *layout = new QVBoxLayout(&dialog);
+ QLineEdit *lineEdit = new QLineEdit(&dialog);
+ lineEdit->setFocusPolicy(focusPolicy);
+ layout->addWidget(lineEdit);
+ QDialogButtonBox *dialogButtonBox = new QDialogButtonBox(&dialog);
+ layout->addWidget(dialogButtonBox);
+ dialogButtonBox->addButton(QDialogButtonBox::Reset);
+ const auto *firstAcceptButton = dialogButtonBox->addButton(QDialogButtonBox::Ok);
+ dialogButtonBox->addButton(QDialogButtonBox::Cancel);
+ dialog.show();
+ dialog.activateWindow();
+ if (lineEditHasFocus)
+ QTRY_VERIFY(lineEdit->hasFocus());
+ else
+ QTRY_VERIFY(firstAcceptButton->hasFocus());
+}
+
QTEST_MAIN(tst_QDialogButtonBox)
#include "tst_qdialogbuttonbox.moc"
diff --git a/tests/auto/widgets/widgets/qdockwidget/BLACKLIST b/tests/auto/widgets/widgets/qdockwidget/BLACKLIST
index 6a3b189939..8873589ff4 100644
--- a/tests/auto/widgets/widgets/qdockwidget/BLACKLIST
+++ b/tests/auto/widgets/widgets/qdockwidget/BLACKLIST
@@ -1,3 +1,36 @@
# QTBUG-87415
[task169808_setFloating]
android
+#
+# QDockWidget::isFloating() is flaky after state change on these OS
+[closeAndDelete]
+macos
+b2qt
+arm
+android
+
+# QTBUG-103091
+[floatingTabs]
+arm
+android
+qnx
+macos
+b2qt
+
+# QTBUG-103091
+[hoverWithoutDrop]
+arm
+android
+qnx
+macos
+b2qt
+
+# OSes are flaky because of unplugging and plugging requires
+# precise calculation of the title bar area for mouse emulation
+# That's not possible for floating dock widgets.
+[deleteFloatingTabWithSingleDockWidget]
+qnx
+b2qt
+arm
+android
+macos
diff --git a/tests/auto/widgets/widgets/qdockwidget/CMakeLists.txt b/tests/auto/widgets/widgets/qdockwidget/CMakeLists.txt
index adf48ddb11..21d8fb60cc 100644
--- a/tests/auto/widgets/widgets/qdockwidget/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qdockwidget/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qdockwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdockwidget Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdockwidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdockwidget
SOURCES
tst_qdockwidget.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
+ Qt::Core
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp b/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp
index d726807b7c..63a432578e 100644
--- a/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp
+++ b/tests/auto/widgets/widgets/qdockwidget/tst_qdockwidget.cpp
@@ -1,42 +1,25 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QSignalSpy>
-
#include <qaction.h>
#include <qdockwidget.h>
#include <qmainwindow.h>
+#include "private/qdockwidget_p.h"
+#include "private/qmainwindowlayout_p.h"
+#include <QAbstractButton>
#include <qlineedit.h>
+#include <QtGui/qpa/qplatformwindow.h>
#include <qtabbar.h>
#include <QScreen>
+#include <QTimer>
#include <QtGui/QPainter>
-#include "private/qdockwidget_p.h"
+#include <QLabel>
+
+Q_LOGGING_CATEGORY(lcTestDockWidget, "qt.widgets.tests.qdockwidget")
+
+#include <QtWidgets/private/qapplication_p.h>
bool hasFeature(QDockWidget *dockwidget, QDockWidget::DockWidgetFeature feature)
{ return (dockwidget->features() & feature) == feature; }
@@ -70,6 +53,7 @@ private slots:
void restoreDockWidget();
void restoreStateWhileStillFloating();
void setWindowTitle();
+
// task specific tests:
void task165177_deleteFocusWidget();
void task169808_setFloating();
@@ -78,6 +62,98 @@ private slots:
void task258459_visibilityChanged();
void taskQTBUG_1665_closableChanged();
void taskQTBUG_9758_undockedGeometry();
+
+ // Dock area permissions for DockWidgets and DockWidgetGroupWindows
+ void dockPermissions();
+
+ // test floating tabs, item_tree and window title consistency
+ void floatingTabs();
+ void hoverWithoutDrop();
+
+ // floating tab gets removed, when last child goes away
+ void deleteFloatingTabWithSingleDockWidget_data();
+ void deleteFloatingTabWithSingleDockWidget();
+
+ // test hide & show
+ void hideAndShow();
+
+ // test closing and deleting consistency
+ void closeAndDelete();
+ void closeUnclosable();
+
+ // test save and restore consistency
+ void saveAndRestore();
+
+private:
+ // helpers and consts for dockPermissions, hideAndShow, closeAndDelete
+#ifdef QT_BUILD_INTERNAL
+ void createTestWidgets(QMainWindow* &MainWindow, QPointer<QWidget> &cent,
+ QPointer<QDockWidget> &d1, QPointer<QDockWidget> &d2) const;
+
+ void unplugAndResize(QMainWindow* MainWindow, QDockWidget* dw, QPoint home, QSize size) const;
+
+ void createFloatingTabs(QMainWindow* &MainWindow, QPointer<QWidget> &cent,
+ QPointer<QDockWidget> &d1, QPointer<QDockWidget> &d2,
+ QList<int> &path1, QList<int> &path2) const;
+
+ static inline QPoint dragPoint(QDockWidget* dockWidget);
+ static inline QPoint home1(QMainWindow* MainWindow)
+ { return MainWindow->mapToGlobal(MainWindow->rect().topLeft() + QPoint(0.1 * MainWindow->width(), 0.1 * MainWindow->height())); }
+
+ static inline QPoint home2(QMainWindow* MainWindow)
+ { return MainWindow->mapToGlobal(MainWindow->rect().topLeft() + QPoint(0.6 * MainWindow->width(), 0.15 * MainWindow->height())); }
+
+ static inline QSize size1(QMainWindow* MainWindow)
+ { return QSize (0.2 * MainWindow->width(), 0.25 * MainWindow->height()); }
+
+ static inline QSize size2(QMainWindow* MainWindow)
+ { return QSize (0.1 * MainWindow->width(), 0.15 * MainWindow->height()); }
+
+ static inline QPoint dockPoint(QMainWindow* mw, Qt::DockWidgetArea area)
+ { return mw->mapToGlobal(qobject_cast<QMainWindowLayout*>(mw->layout())->dockWidgetAreaRect(area, QMainWindowLayout::Maximum).center()); }
+
+ bool checkFloatingTabs(QMainWindow* MainWindow, QPointer<QDockWidgetGroupWindow> &ftabs, const QList<QDockWidget*> &dwList = {}) const;
+
+ // move a dock widget
+ enum class MoveDockWidgetRule {
+ Drop,
+ Abort
+ };
+
+ void moveDockWidget(QDockWidget* dw, QPoint to, QPoint from, MoveDockWidgetRule rule) const;
+
+#ifdef QT_BUILD_INTERNAL
+ // Message handling for xcb error QTBUG 82059
+ static void xcbMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg);
+
+ enum class ChildRemovalReason {
+ Destroyed,
+ Closed,
+ Reparented
+ };
+
+public:
+ bool xcbError = false;
+ bool platformSupportingRaise = true;
+#endif
+private:
+
+#ifdef QT_DEBUG
+ // Grace time between mouse events. Set to 400 for debugging.
+ const int waitingTime = 400;
+
+ // Waiting time before closing widgets successful test. Set to 20000 for debugging.
+ const int waitBeforeClose = 0;
+
+ // Enable logging
+ const bool dockWidgetLog = true;
+#else
+ const int waitingTime = 15;
+ const int waitBeforeClose = 0;
+ const bool dockWidgetLog = false;
+#endif // QT_DEBUG
+#endif // QT_BUILD_INTERNAL
+
};
// Testing get/set functions
@@ -219,12 +295,12 @@ void tst_QDockWidget::features()
QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetClosable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE((int)*(static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData())),
(int)dw.features());
spy.clear();
dw.setFeatures(dw.features());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
setFeature(&dw, QDockWidget::DockWidgetClosable);
@@ -232,12 +308,12 @@ void tst_QDockWidget::features()
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()),
(int)dw.features());
spy.clear();
dw.setFeatures(dw.features());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
setFeature(&dw, QDockWidget::DockWidgetMovable, false);
@@ -245,12 +321,12 @@ void tst_QDockWidget::features()
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable));
QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetMovable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()),
(int)dw.features());
spy.clear();
dw.setFeatures(dw.features());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
setFeature(&dw, QDockWidget::DockWidgetMovable);
@@ -258,12 +334,12 @@ void tst_QDockWidget::features()
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()),
(int)dw.features());
spy.clear();
dw.setFeatures(dw.features());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
setFeature(&dw, QDockWidget::DockWidgetFloatable, false);
@@ -271,12 +347,12 @@ void tst_QDockWidget::features()
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable));
QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetFloatable));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()),
(int)dw.features());
spy.clear();
dw.setFeatures(dw.features());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
setFeature(&dw, QDockWidget::DockWidgetFloatable);
@@ -284,12 +360,12 @@ void tst_QDockWidget::features()
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()),
(int)dw.features());
spy.clear();
dw.setFeatures(dw.features());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
// set all at once
@@ -298,12 +374,12 @@ void tst_QDockWidget::features()
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable));
QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetFloatable));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()),
(int)dw.features());
spy.clear();
dw.setFeatures(dw.features());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
dw.setFeatures(QDockWidget::DockWidgetClosable);
@@ -311,12 +387,12 @@ void tst_QDockWidget::features()
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable));
QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetMovable));
QVERIFY(!hasFeature(&dw, QDockWidget::DockWidgetFloatable));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()),
(int)dw.features());
spy.clear();
dw.setFeatures(dw.features());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
dw.setFeatures(allDockWidgetFeatures);
@@ -324,12 +400,12 @@ void tst_QDockWidget::features()
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetClosable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetMovable));
QVERIFY(hasFeature(&dw, QDockWidget::DockWidgetFloatable));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE((int)*static_cast<const QDockWidget::DockWidgetFeature *>(spy.at(0).value(0).constData()),
(int)dw.features());
spy.clear();
dw.setFeatures(dw.features());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
}
@@ -356,20 +432,20 @@ void tst_QDockWidget::setFloating()
QVERIFY((dockedPosition - floatingPosition).manhattanLength() < 50);
QVERIFY(dw.isFloating());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).value(0).toBool(), dw.isFloating());
spy.clear();
dw.setFloating(dw.isFloating());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
dw.setFloating(false);
QVERIFY(!dw.isFloating());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).value(0).toBool(), dw.isFloating());
spy.clear();
dw.setFloating(dw.isFloating());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
}
@@ -393,12 +469,12 @@ void tst_QDockWidget::allowedAreas()
QVERIFY(!dw.isAreaAllowed(Qt::RightDockWidgetArea));
QVERIFY(!dw.isAreaAllowed(Qt::TopDockWidgetArea));
QVERIFY(!dw.isAreaAllowed(Qt::BottomDockWidgetArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::DockWidgetAreas *>(spy.at(0).value(0).constData()),
dw.allowedAreas());
spy.clear();
dw.setAllowedAreas(dw.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
dw.setAllowedAreas(Qt::RightDockWidgetArea);
QCOMPARE(dw.allowedAreas(), Qt::RightDockWidgetArea);
@@ -406,12 +482,12 @@ void tst_QDockWidget::allowedAreas()
QVERIFY(dw.isAreaAllowed(Qt::RightDockWidgetArea));
QVERIFY(!dw.isAreaAllowed(Qt::TopDockWidgetArea));
QVERIFY(!dw.isAreaAllowed(Qt::BottomDockWidgetArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::DockWidgetAreas *>(spy.at(0).value(0).constData()),
dw.allowedAreas());
spy.clear();
dw.setAllowedAreas(dw.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
dw.setAllowedAreas(Qt::TopDockWidgetArea);
QCOMPARE(dw.allowedAreas(), Qt::TopDockWidgetArea);
@@ -419,12 +495,12 @@ void tst_QDockWidget::allowedAreas()
QVERIFY(!dw.isAreaAllowed(Qt::RightDockWidgetArea));
QVERIFY(dw.isAreaAllowed(Qt::TopDockWidgetArea));
QVERIFY(!dw.isAreaAllowed(Qt::BottomDockWidgetArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::DockWidgetAreas *>(spy.at(0).value(0).constData()),
dw.allowedAreas());
spy.clear();
dw.setAllowedAreas(dw.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
dw.setAllowedAreas(Qt::BottomDockWidgetArea);
QCOMPARE(dw.allowedAreas(), Qt::BottomDockWidgetArea);
@@ -432,12 +508,12 @@ void tst_QDockWidget::allowedAreas()
QVERIFY(!dw.isAreaAllowed(Qt::RightDockWidgetArea));
QVERIFY(!dw.isAreaAllowed(Qt::TopDockWidgetArea));
QVERIFY(dw.isAreaAllowed(Qt::BottomDockWidgetArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::DockWidgetAreas *>(spy.at(0).value(0).constData()),
dw.allowedAreas());
spy.clear();
dw.setAllowedAreas(dw.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// multiple dock window areas
dw.setAllowedAreas(Qt::TopDockWidgetArea | Qt::BottomDockWidgetArea);
@@ -446,12 +522,13 @@ void tst_QDockWidget::allowedAreas()
QVERIFY(!dw.isAreaAllowed(Qt::RightDockWidgetArea));
QVERIFY(dw.isAreaAllowed(Qt::TopDockWidgetArea));
QVERIFY(dw.isAreaAllowed(Qt::BottomDockWidgetArea));
- QCOMPARE(spy.count(), 1);
+ //QVERIFY(!dw.isAreaAllowed(Qt::FloatingDockWidgetArea));
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::DockWidgetAreas *>(spy.at(0).value(0).constData()),
dw.allowedAreas());
spy.clear();
dw.setAllowedAreas(dw.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
dw.setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
QCOMPARE(dw.allowedAreas(), Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
@@ -459,12 +536,13 @@ void tst_QDockWidget::allowedAreas()
QVERIFY(dw.isAreaAllowed(Qt::RightDockWidgetArea));
QVERIFY(!dw.isAreaAllowed(Qt::TopDockWidgetArea));
QVERIFY(!dw.isAreaAllowed(Qt::BottomDockWidgetArea));
- QCOMPARE(spy.count(), 1);
+ //QVERIFY(!dw.isAreaAllowed(Qt::FloatingDockWidgetArea));
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::DockWidgetAreas *>(spy.at(0).value(0).constData()),
dw.allowedAreas());
spy.clear();
dw.setAllowedAreas(dw.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
dw.setAllowedAreas(Qt::TopDockWidgetArea | Qt::LeftDockWidgetArea);
QCOMPARE(dw.allowedAreas(), Qt::TopDockWidgetArea | Qt::LeftDockWidgetArea);
@@ -472,12 +550,28 @@ void tst_QDockWidget::allowedAreas()
QVERIFY(!dw.isAreaAllowed(Qt::RightDockWidgetArea));
QVERIFY(dw.isAreaAllowed(Qt::TopDockWidgetArea));
QVERIFY(!dw.isAreaAllowed(Qt::BottomDockWidgetArea));
- QCOMPARE(spy.count(), 1);
+ //QVERIFY(!dw.isAreaAllowed(Qt::FloatingDockWidgetArea));
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(*static_cast<const Qt::DockWidgetAreas *>(spy.at(0).value(0).constData()),
+ dw.allowedAreas());
+ spy.clear();
+ dw.setAllowedAreas(dw.allowedAreas());
+ QCOMPARE(spy.size(), 0);
+
+ //dw.setAllowedAreas(Qt::BottomDockWidgetArea | Qt::FloatingDockWidgetArea);
+ dw.setAllowedAreas(Qt::BottomDockWidgetArea);
+ //QCOMPARE(dw.allowedAreas(), Qt::BottomDockWidgetArea | Qt::FloatingDockWidgetArea);
+ QVERIFY(!dw.isAreaAllowed(Qt::LeftDockWidgetArea));
+ QVERIFY(!dw.isAreaAllowed(Qt::RightDockWidgetArea));
+ QVERIFY(!dw.isAreaAllowed(Qt::TopDockWidgetArea));
+ QVERIFY(dw.isAreaAllowed(Qt::BottomDockWidgetArea));
+ //QVERIFY(dw.isAreaAllowed(Qt::FloatingDockWidgetArea));
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::DockWidgetAreas *>(spy.at(0).value(0).constData()),
dw.allowedAreas());
spy.clear();
dw.setAllowedAreas(dw.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
dw.setAllowedAreas(Qt::BottomDockWidgetArea | Qt::RightDockWidgetArea);
QCOMPARE(dw.allowedAreas(), Qt::BottomDockWidgetArea | Qt::RightDockWidgetArea);
@@ -485,12 +579,13 @@ void tst_QDockWidget::allowedAreas()
QVERIFY(dw.isAreaAllowed(Qt::RightDockWidgetArea));
QVERIFY(!dw.isAreaAllowed(Qt::TopDockWidgetArea));
QVERIFY(dw.isAreaAllowed(Qt::BottomDockWidgetArea));
- QCOMPARE(spy.count(), 1);
+ //QVERIFY(!dw.isAreaAllowed(Qt::FloatingDockWidgetArea));
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::DockWidgetAreas *>(spy.at(0).value(0).constData()),
dw.allowedAreas());
spy.clear();
dw.setAllowedAreas(dw.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QDockWidget::toggleViewAction()
@@ -518,65 +613,65 @@ void tst_QDockWidget::visibilityChanged()
mw.addDockWidget(Qt::LeftDockWidgetArea, &dw);
mw.show();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), true);
spy.clear();
dw.hide();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), false);
spy.clear();
dw.hide();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
dw.show();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), true);
spy.clear();
dw.show();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QDockWidget dw2;
mw.tabifyDockWidget(&dw, &dw2);
dw2.show();
dw2.raise();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), false);
spy.clear();
dw2.hide();
qApp->processEvents();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), true);
spy.clear();
dw2.show();
dw2.raise();
qApp->processEvents();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), false);
spy.clear();
dw.raise();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), true);
spy.clear();
dw.raise();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
dw2.raise();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), false);
spy.clear();
dw2.raise();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
mw.addDockWidget(Qt::RightDockWidgetArea, &dw2);
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), true);
}
@@ -603,6 +698,9 @@ void tst_QDockWidget::updateTabBarOnVisibilityChanged()
mw.tabifyDockWidget(dw1, dw2);
mw.tabifyDockWidget(dw2, dw3);
+ const auto list1 = QList<QDockWidget *>{dw1, dw2, dw3};
+ QCOMPARE(mw.tabifiedDockWidgets(dw0), list1);
+
QTabBar *tabBar = mw.findChild<QTabBar *>();
QVERIFY(tabBar);
tabBar->setCurrentIndex(2);
@@ -616,6 +714,8 @@ void tst_QDockWidget::updateTabBarOnVisibilityChanged()
dw1->hide();
QTRY_COMPARE(tabBar->count(), 2);
QCOMPARE(tabBar->currentIndex(), 0);
+
+ QCOMPARE(mw.tabifiedDockWidgets(dw2), {dw3});
}
Q_DECLARE_METATYPE(Qt::DockWidgetArea)
@@ -630,56 +730,56 @@ void tst_QDockWidget::dockLocationChanged()
QSignalSpy spy(&dw, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)));
mw.addDockWidget(Qt::LeftDockWidgetArea, &dw);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
Qt::LeftDockWidgetArea);
spy.clear();
mw.addDockWidget(Qt::LeftDockWidgetArea, &dw);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
Qt::LeftDockWidgetArea);
spy.clear();
mw.addDockWidget(Qt::RightDockWidgetArea, &dw);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
Qt::RightDockWidgetArea);
spy.clear();
mw.removeDockWidget(&dw);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QDockWidget dw2;
dw2.setObjectName("dock2");
mw.addDockWidget(Qt::TopDockWidgetArea, &dw2);
mw.tabifyDockWidget(&dw2, &dw);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
Qt::TopDockWidgetArea);
spy.clear();
mw.splitDockWidget(&dw2, &dw, Qt::Horizontal);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
Qt::TopDockWidgetArea);
spy.clear();
dw.setFloating(true);
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
Qt::NoDockWidgetArea);
spy.clear();
dw.setFloating(false);
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
Qt::TopDockWidgetArea);
spy.clear();
QByteArray ba = mw.saveState();
mw.restoreState(ba);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(qvariant_cast<Qt::DockWidgetArea>(spy.at(0).at(0)),
Qt::TopDockWidgetArea);
}
@@ -950,9 +1050,9 @@ void tst_QDockWidget::task258459_visibilityChanged()
QSignalSpy spy2(&dock2, SIGNAL(visibilityChanged(bool)));
win.show();
QVERIFY(QTest::qWaitForWindowActive(&win));
- QCOMPARE(spy1.count(), 1);
+ QCOMPARE(spy1.size(), 1);
QCOMPARE(spy1.first().first().toBool(), false); //dock1 is invisible
- QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy2.size(), 1);
QCOMPARE(spy2.first().first().toBool(), true); //dock1 is visible
}
@@ -1002,9 +1102,10 @@ void tst_QDockWidget::setWindowTitle()
QMainWindow window;
QDockWidget dock1(&window);
QDockWidget dock2(&window);
- const QString dock1Title = QStringLiteral("&Window");
- const QString dock2Title = QStringLiteral("&Modifiable Window [*]");
+ constexpr QLatin1StringView dock1Title("&Window");
+ constexpr QLatin1StringView dock2Title("&Modifiable Window [*]");
+ // Set title on docked dock widgets, before main window is shown
dock1.setWindowTitle(dock1Title);
dock2.setWindowTitle(dock2Title);
window.addDockWidget(Qt::RightDockWidgetArea, &dock1);
@@ -1015,6 +1116,7 @@ void tst_QDockWidget::setWindowTitle()
QCOMPARE(dock1.windowTitle(), dock1Title);
QCOMPARE(dock2.windowTitle(), dock2Title);
+ // Check if title remains unchanged when docking / undocking
dock1.setFloating(true);
dock1.show();
QVERIFY(QTest::qWaitForWindowExposed(&dock1));
@@ -1024,12 +1126,16 @@ void tst_QDockWidget::setWindowTitle()
dock1.setFloating(true);
dock1.show();
QVERIFY(QTest::qWaitForWindowExposed(&dock1));
- const QString changed = QStringLiteral("Changed ");
+
+ // Change a floating dock widget's title and check remains unchanged when docking
+ constexpr QLatin1StringView changed("Changed ");
dock1.setWindowTitle(QString(changed + dock1Title));
QCOMPARE(dock1.windowTitle(), QString(changed + dock1Title));
dock1.setFloating(false);
+ QVERIFY(QTest::qWaitFor([&dock1](){ return !dock1.windowHandle(); }));
QCOMPARE(dock1.windowTitle(), QString(changed + dock1Title));
+ // Test consistency after toggling modified and floating
dock2.setWindowModified(true);
QCOMPARE(dock2.windowTitle(), dock2Title);
dock2.setFloating(true);
@@ -1044,6 +1150,846 @@ void tst_QDockWidget::setWindowTitle()
dock2.show();
QVERIFY(QTest::qWaitForWindowExposed(&dock2));
QCOMPARE(dock2.windowTitle(), dock2Title);
+
+ // Test title change of a closed dock widget
+ static constexpr QLatin1StringView closedDock2("Closed D2");
+ dock2.close();
+ dock2.setWindowTitle(closedDock2);
+ QCOMPARE(dock2.windowTitle(), closedDock2);
+}
+
+// helpers for dockPermissions, hideAndShow, closeAndDelete
+#ifdef QT_BUILD_INTERNAL
+void tst_QDockWidget::createTestWidgets(QMainWindow* &mainWindow, QPointer<QWidget> &cent, QPointer<QDockWidget> &d1, QPointer<QDockWidget> &d2) const
+{
+ // Enable logging if required
+ if (dockWidgetLog)
+ QLoggingCategory::setFilterRules("qt.widgets.dockwidgets=true");
+
+ // Derive sizes and positions from primary screen
+ const QRect screen = QApplication::primaryScreen()->availableGeometry();
+ const QPoint m_topLeft = screen.topLeft();
+ const QSize s_mwindow = QApplication::primaryScreen()->availableSize() * 0.7;
+
+ mainWindow = new QMainWindow;
+ mainWindow->setMouseTracking(true);
+ mainWindow->setFixedSize(s_mwindow);
+ cent = new QWidget;
+ mainWindow->setCentralWidget(cent);
+ cent->setLayout(new QGridLayout);
+ cent->layout()->setContentsMargins(0, 0, 0, 0);
+ cent->setMinimumSize(0, 0);
+ mainWindow->setDockOptions(QMainWindow::AllowTabbedDocks | QMainWindow::GroupedDragging);
+ mainWindow->move(m_topLeft);
+
+ const int minWidth = QApplication::style()->pixelMetric(QStyle::PM_TitleBarHeight);
+ const QSize minSize(minWidth, 2 * minWidth);
+ d1 = new QDockWidget(mainWindow);
+ d1->setMinimumSize(minSize);
+ d1->setWindowTitle("I am D1");
+ d1->setObjectName("D1");
+ d1->setFeatures(QDockWidget::DockWidgetFeatureMask);
+ d1->setAllowedAreas(Qt::DockWidgetArea::AllDockWidgetAreas);
+
+ d2 = new QDockWidget(mainWindow);
+ d2->setMinimumSize(minSize);
+ d2->setWindowTitle("I am D2");
+ d2->setObjectName("D2");
+ d2->setFeatures(QDockWidget::DockWidgetFeatureMask);
+ d2->setAllowedAreas(Qt::DockWidgetArea::RightDockWidgetArea);
+
+ mainWindow->addDockWidget(Qt::DockWidgetArea::LeftDockWidgetArea, d1);
+ mainWindow->addDockWidget(Qt::DockWidgetArea::RightDockWidgetArea, d2);
+ d1->show();
+ d2->show();
+ mainWindow->show();
+ QApplicationPrivate::setActiveWindow(mainWindow);
+
+}
+
+QPoint tst_QDockWidget::dragPoint(QDockWidget* dockWidget)
+{
+ Q_ASSERT(dockWidget);
+ QDockWidgetLayout *dwlayout = qobject_cast<QDockWidgetLayout *>(dockWidget->layout());
+ Q_ASSERT(dwlayout);
+ return dockWidget->mapToGlobal(dwlayout->titleArea().center());
+}
+
+void tst_QDockWidget::moveDockWidget(QDockWidget* dw, QPoint to, QPoint from, MoveDockWidgetRule rule) const
+{
+ Q_ASSERT(dw);
+
+ // If no from point is given, use the drag point
+ if (from.isNull())
+ from = dragPoint(dw);
+
+ // move and log
+ const QPoint source = dw->mapFromGlobal(from);
+ const QPoint target = dw->mapFromGlobal(to);
+ qCDebug(lcTestDockWidget) << "Move" << dw->objectName() << "from" << source;
+ qCDebug(lcTestDockWidget) << "Move" << dw->objectName() << "from" << from;
+ QTest::mousePress(dw, Qt::LeftButton, Qt::KeyboardModifiers(), source);
+ QTest::mouseMove(dw, target);
+ qCDebug(lcTestDockWidget) << "Move" << dw->objectName() << "to" << target;
+ qCDebug(lcTestDockWidget) << "Move" << dw->objectName() << "to" << to;
+ if (rule == MoveDockWidgetRule::Drop) {
+ QTest::mouseRelease(dw, Qt::LeftButton, Qt::KeyboardModifiers(), target);
+ QTest::qWait(waitingTime);
+
+ // Verify WindowActive only for floating dock widgets
+ if (dw->isFloating())
+ QTRY_VERIFY(QTest::qWaitForWindowActive(dw));
+ return;
+ }
+ qCDebug(lcTestDockWidget) << "Aborting move and dropping at origin";
+
+ // Give animations some time
+ QTest::qWait(waitingTime);
+ QTest::mouseMove(dw, from);
+ QTest::mouseRelease(dw, Qt::LeftButton, Qt::KeyboardModifiers(), from);
+ QTest::qWait(waitingTime);
+}
+
+void tst_QDockWidget::unplugAndResize(QMainWindow* mainWindow, QDockWidget* dw, QPoint home, QSize size) const
+{
+ Q_ASSERT(mainWindow);
+ Q_ASSERT(dw);
+
+ // Return if floating
+ if (dw->isFloating())
+ return;
+
+ QMainWindowLayout* layout = qobject_cast<QMainWindowLayout*>(mainWindow->layout());
+ Qt::DockWidgetArea area = layout->dockWidgetArea(dw);
+
+ // calculate minimum lateral move to unplug a dock widget
+ const int unplugMargin = 80;
+ int my = 0;
+ int mx = 0;
+
+ switch (area) {
+ case Qt::LeftDockWidgetArea:
+ mx = unplugMargin;
+ break;
+ case Qt::TopDockWidgetArea:
+ my = unplugMargin;
+ break;
+ case Qt::RightDockWidgetArea:
+ mx = -unplugMargin;
+ break;
+ case Qt::BottomDockWidgetArea:
+ my = -unplugMargin;
+ break;
+ default:
+ return;
+ }
+
+ // Remember size for comparison with unplugged object
+#ifdef Q_OS_LINUX
+ const int pluggedWidth = dw->width();
+ const int pluggedHeight = dw->height();
+#endif
+
+ // unplug and resize a dock Widget
+ qCDebug(lcTestDockWidget) << "*** unplug and resize" << dw->objectName();
+ QPoint pos1 = dw->mapToGlobal(dw->rect().center());
+ pos1.rx() += mx;
+ pos1.ry() += my;
+ moveDockWidget(dw, pos1, dw->mapToGlobal(dw->rect().center()), MoveDockWidgetRule::Drop);
+ QTRY_VERIFY(dw->isFloating());
+
+ // Unplugged object's size may differ max. by 2x frame size
+#ifdef Q_OS_LINUX
+ const int xMargin = 2 * dw->frameSize().width();
+ const int yMargin = 2 * dw->frameSize().height();
+ QVERIFY(dw->height() - pluggedHeight <= xMargin);
+ QVERIFY(dw->width() - pluggedWidth <= yMargin);
+#endif
+
+ qCDebug(lcTestDockWidget) << "Resizing" << dw->objectName() << "to" << size;
+ dw->setFixedSize(size);
+ QTest::qWait(waitingTime);
+ qCDebug(lcTestDockWidget) << "Move" << dw->objectName() << "to its home" << dw->mapFromGlobal(home);
+ dw->move(home);
+}
+
+bool tst_QDockWidget::checkFloatingTabs(QMainWindow* mainWindow, QPointer<QDockWidgetGroupWindow> &ftabs, const QList<QDockWidget*> &dwList) const
+{
+ Q_ASSERT(mainWindow);
+
+ // Check if mainWindow has a floatingTab child
+ ftabs = mainWindow->findChild<QDockWidgetGroupWindow*>();
+ if (ftabs.isNull()) {
+ qCDebug(lcTestDockWidget) << "MainWindow has no DockWidgetGroupWindow" << mainWindow;
+ return false;
+ }
+
+ QTabBar* tab = ftabs->findChild<QTabBar*>();
+ if (!tab) {
+ qCDebug(lcTestDockWidget) << "DockWidgetGroupWindow has no tab bar" << ftabs;
+ return false;
+ }
+
+ // both dock widgets must be direct children of the main window
+ const QList<QDockWidget*> children = ftabs->findChildren<QDockWidget*>(QString(), Qt::FindDirectChildrenOnly);
+ if (dwList.size() > 0)
+ {
+ if (dwList.size() != children.size()) {
+ qCDebug(lcTestDockWidget) << "Expected DockWidgetGroupWindow children:" << dwList.size()
+ << "Children found:" << children.size();
+
+ qCDebug(lcTestDockWidget) << "Expected:" << dwList;
+ qCDebug(lcTestDockWidget) << "Found in" << ftabs << ":" << children.size();
+ return false;
+ }
+
+ for (const QDockWidget* child : dwList) {
+ if (!children.contains(child)) {
+ qCDebug(lcTestDockWidget) << "Expected child" << child << "not found in" << children;
+ return false;
+ }
+ }
+ }
+
+ // Always select first tab position
+ qCDebug(lcTestDockWidget) << "click on first tab";
+ QTest::mouseClick(tab, Qt::LeftButton, Qt::KeyboardModifiers(), tab->tabRect(0).center());
+ return true;
+}
+
+#ifdef QT_BUILD_INTERNAL
+// Statics for xcb error, raise() suppert / msg handler
+static tst_QDockWidget *qThis = nullptr;
+static void (*oldMessageHandler)(QtMsgType, const QMessageLogContext &, const QString &);
+#define QXCBVERIFY(cond) do { if (xcbError) QSKIP("Test skipped due to XCB error"); QVERIFY(cond); } while (0)
+
+// detect xcb error and missing raise() support
+// qt.qpa.xcb: internal error: void QXcbWindow::setNetWmStateOnUnmappedWindow() called on mapped window
+void tst_QDockWidget::xcbMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
+{
+ Q_ASSERT(oldMessageHandler);
+
+ if (type == QtWarningMsg) {
+ Q_ASSERT(qThis);
+ if (QString(context.category) == "qt.qpa.xcb" && msg.contains("internal error"))
+ qThis->xcbError = true;
+ if (msg.contains("does not support raise"))
+ qThis->platformSupportingRaise = false;
+ }
+
+ return oldMessageHandler(type, context, msg);
+}
+#endif
+
+void tst_QDockWidget::createFloatingTabs(QMainWindow* &mainWindow, QPointer<QWidget> &cent,
+ QPointer<QDockWidget> &d1, QPointer<QDockWidget> &d2,
+ QList<int> &path1, QList<int> &path2) const
+{
+ createTestWidgets(mainWindow, cent, d1, d2);
+
+#ifdef QT_BUILD_INTERNAL
+ qThis = const_cast<tst_QDockWidget *>(this);
+ oldMessageHandler = qInstallMessageHandler(xcbMessageHandler);
+ auto resetMessageHandler = qScopeGuard([] { qInstallMessageHandler(oldMessageHandler); });
+#endif
+
+ // Test will fail if platform doesn't support raise.
+ mainWindow->windowHandle()->handle()->raise();
+ if (!platformSupportingRaise)
+ QSKIP("Platform not supporting raise(). Floating tab based tests will fail.");
+
+ // remember paths to d1 and d2
+ QMainWindowLayout* layout = qobject_cast<QMainWindowLayout *>(mainWindow->layout());
+ path1 = layout->layoutState.indexOf(d1);
+ path2 = layout->layoutState.indexOf(d2);
+
+ // unplug and resize both dock widgets
+ unplugAndResize(mainWindow, d1, home1(mainWindow), size1(mainWindow));
+ unplugAndResize(mainWindow, d2, home2(mainWindow), size2(mainWindow));
+
+ // docks must be parented to the main window, no group window must exist
+ QCOMPARE(d1->parentWidget(), mainWindow);
+ QCOMPARE(d2->parentWidget(), mainWindow);
+ QVERIFY(mainWindow->findChildren<QDockWidgetGroupWindow *>().isEmpty());
+
+ // Test plugging
+ qCDebug(lcTestDockWidget) << "*** move d1 dock over d2 dock ***";
+ qCDebug(lcTestDockWidget) << "**********(test plugging)*************";
+ qCDebug(lcTestDockWidget) << "Move d1 over d2";
+ moveDockWidget(d1, d2->mapToGlobal(d2->rect().center()), QPoint(), MoveDockWidgetRule::Drop);
+
+ // Now MainWindow has to have a floatingTab child
+ QPointer<QDockWidgetGroupWindow> ftabs;
+ QTRY_VERIFY(checkFloatingTabs(mainWindow, ftabs, QList<QDockWidget *>() << d1 << d2));
+}
+#endif // QT_BUILD_INTERNAL
+
+// test floating tabs and item_tree consistency
+void tst_QDockWidget::floatingTabs()
+{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Test skipped on Wayland.");
+#ifdef Q_OS_WIN
+ QSKIP("Test skipped on Windows platforms");
+#endif // Q_OS_WIN
+#ifdef QT_BUILD_INTERNAL
+ // Create a mainwindow with a central widget and two dock widgets
+ QPointer<QDockWidget> d1;
+ QPointer<QDockWidget> d2;
+ QPointer<QWidget> cent;
+ QMainWindow* mainWindow;
+ QList<int> path1;
+ QList<int> path2;
+ createFloatingTabs(mainWindow, cent, d1, d2, path1, path2);
+ std::unique_ptr<QMainWindow> up_mainWindow(mainWindow);
+
+ QCOMPARE(mainWindow->tabifiedDockWidgets(d1), {d2});
+ QCOMPARE(mainWindow->tabifiedDockWidgets(d2), {d1});
+
+ /*
+ * unplug both dockwidgets, resize them and plug them into a joint floating tab
+ * expected behavior: QDOckWidgetGroupWindow with both widgets is created
+ */
+
+ // disabled due to flakiness on macOS and Windows
+ if (d1->isFloating())
+ qWarning("OS flakiness: D1 is docked and reports being floating");
+ if (d2->isFloating())
+ qWarning("OS flakiness: D2 is docked and reports being floating");
+
+ // Now MainWindow has to have a floatingTab child
+ QPointer<QDockWidgetGroupWindow> ftabs;
+ QTRY_VERIFY(checkFloatingTabs(mainWindow, ftabs, QList<QDockWidget *>() << d1 << d2));
+
+ // Hide both dock widgets. Verify that the group window is also hidden.
+ qCDebug(lcTestDockWidget) << "*** Hide and show tabbed dock widgets ***";
+ d1->hide();
+ d2->hide();
+ QTRY_VERIFY(ftabs->isHidden());
+
+ // Show both dockwidgets again. Verify that the group window is visible.
+ d1->show();
+ d2->show();
+ QTRY_VERIFY(ftabs->isVisible());
+
+ /*
+ * replug both dock widgets into their initial position
+ * expected behavior:
+ - both docks are plugged
+ - both docks are no longer floating
+ - title changes have been propagated
+ */
+
+
+ // limitation: QTest cannot handle drag to unplug.
+ // reason: Object under mouse mutates from QTabBar::tab to QDockWidget. QTest cannot handle that.
+ // => click float button to unplug
+ qCDebug(lcTestDockWidget) << "*** test unplugging from floating dock ***";
+
+ // QDockWidget must have a QAbstractButton with object name "qt_dockwidget_floatbutton"
+ QAbstractButton* floatButton = d1->findChild<QAbstractButton*>("qt_dockwidget_floatbutton", Qt::FindDirectChildrenOnly);
+ QTRY_VERIFY(floatButton != nullptr);
+ QPoint pos1 = floatButton->rect().center();
+ qCDebug(lcTestDockWidget) << "unplug d1" << pos1;
+ QTest::mouseClick(floatButton, Qt::LeftButton, Qt::KeyboardModifiers(), pos1);
+ QTest::qWait(waitingTime);
+
+ // d1 must be floating again, while d2 is still in its GroupWindow
+ QTRY_VERIFY(d1->isFloating());
+ QTRY_VERIFY(!d2->isFloating());
+
+ // Plug back into dock areas
+ qCDebug(lcTestDockWidget) << "*** test plugging back to dock areas ***";
+ qCDebug(lcTestDockWidget) << "Move d1 to left dock";
+ moveDockWidget(d1, dockPoint(mainWindow, Qt::LeftDockWidgetArea), QPoint(), MoveDockWidgetRule::Drop);
+ qCDebug(lcTestDockWidget) << "Move d2 to right dock";
+ moveDockWidget(d2, dockPoint(mainWindow, Qt::RightDockWidgetArea), QPoint(), MoveDockWidgetRule::Drop);
+
+ qCDebug(lcTestDockWidget) << "Waiting" << waitBeforeClose << "ms before plugging back.";
+ QTest::qWait(waitBeforeClose);
+
+ // Both dock widgets must no longer be floating
+ QTRY_VERIFY(!d1->isFloating());
+ QTRY_VERIFY(!d2->isFloating());
+
+ // check if QDockWidgetGroupWindow has been removed from mainWindowLayout and properly deleted
+ QTRY_VERIFY(!mainWindow->findChild<QDockWidgetGroupWindow*>());
+ QTRY_VERIFY(ftabs.isNull());
+
+ // Check if paths are consistent
+ QMainWindowLayout* layout = qobject_cast<QMainWindowLayout *>(mainWindow->layout());
+ qCDebug(lcTestDockWidget) << "Checking path consistency" << layout->layoutState.indexOf(d1) << layout->layoutState.indexOf(d2);
+
+ // Paths must be identical
+ QTRY_COMPARE(layout->layoutState.indexOf(d1), path1);
+ QTRY_COMPARE(layout->layoutState.indexOf(d2), path2);
+
+ QCOMPARE(mainWindow->tabifiedDockWidgets(d1), {});
+ QCOMPARE(mainWindow->tabifiedDockWidgets(d2), {});
+#else
+ QSKIP("test requires -developer-build option");
+#endif // QT_BUILD_INTERNAL
+}
+
+void tst_QDockWidget::deleteFloatingTabWithSingleDockWidget_data()
+{
+#ifdef QT_BUILD_INTERNAL
+ QTest::addColumn<int>("reason");
+ QTest::addRow("Delete child") << static_cast<int>(ChildRemovalReason::Destroyed);
+ QTest::addRow("Close child") << static_cast<int>(ChildRemovalReason::Closed);
+ QTest::addRow("Reparent child") << static_cast<int>(ChildRemovalReason::Reparented);
+#endif
+}
+
+void tst_QDockWidget::deleteFloatingTabWithSingleDockWidget()
+{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Test skipped on Wayland.");
+#ifdef Q_OS_WIN
+ QSKIP("Test skipped on Windows platforms");
+#endif // Q_OS_WIN
+#ifdef QT_BUILD_INTERNAL
+
+ QFETCH(int, reason);
+ const ChildRemovalReason removalReason = static_cast<ChildRemovalReason>(reason);
+
+ QPointer<QDockWidget> d1;
+ QPointer<QDockWidget> d2;
+ QPointer<QWidget> cent;
+ QMainWindow* mainWindow;
+ QList<int> path1;
+ QList<int> path2;
+ createFloatingTabs(mainWindow, cent, d1, d2, path1, path2);
+ std::unique_ptr<QMainWindow> up_mainWindow(mainWindow);
+
+ switch (removalReason) {
+ case ChildRemovalReason::Destroyed:
+ delete d1;
+ break;
+ case ChildRemovalReason::Closed:
+ d1->close();
+ break;
+ case ChildRemovalReason::Reparented:
+ // This will create an invalid state, because setParent() doesn't fix the item_list.
+ // Testing this case anyway, because setParent() includig item_list fixup is executed,
+ // when the 2nd last dock widget is dragged out of a floating tab.
+ // => despite of the broken state, the group window has to be gone.
+ d1->setParent(mainWindow);
+ break;
+ }
+
+ QTRY_VERIFY(!qobject_cast<QDockWidgetGroupWindow *>(d2->parentWidget()));
+ QTRY_VERIFY(mainWindow->findChildren<QDockWidgetGroupWindow *>().isEmpty());
+#endif // QT_BUILD_INTERNAL
+}
+
+void tst_QDockWidget::hoverWithoutDrop()
+{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Test skipped on Wayland.");
+#ifdef QT_BUILD_INTERNAL
+
+ QPointer<QDockWidget> d1;
+ QPointer<QDockWidget> d2;
+ QPointer<QWidget> cent;
+ QMainWindow* mainWindow;
+ createTestWidgets(mainWindow, cent, d1, d2);
+ std::unique_ptr<QMainWindow> up_mainWindow(mainWindow);
+
+ // unplug and resize both dock widgets
+ unplugAndResize(mainWindow, d1, home1(mainWindow), size1(mainWindow));
+ unplugAndResize(mainWindow, d2, home2(mainWindow), size2(mainWindow));
+
+ // Test plugging
+ qCDebug(lcTestDockWidget) << "*** move d1 dock over d2 dock ***";
+ qCDebug(lcTestDockWidget) << "*******(test hovering)***********";
+ qCDebug(lcTestDockWidget) << "Move d1 over d2, wait and return to origin";
+ const QPoint source = d1->mapToGlobal(d1->rect().center());
+ const QPoint target = d2->mapToGlobal(d2->rect().center());
+ moveDockWidget(d1, target, source, MoveDockWidgetRule::Abort);
+ auto *groupWindow = mainWindow->findChild<QDockWidgetGroupWindow *>();
+ QCOMPARE(groupWindow, nullptr);
+#else
+ QSKIP("test requires -developer-build option");
+#endif // QT_BUILD_INTERNAL
+}
+
+// test hide & show
+void tst_QDockWidget::hideAndShow()
+{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Test skipped on Wayland.");
+#ifdef QT_BUILD_INTERNAL
+ // Skip test if xcb error is launched
+ qThis = this;
+ oldMessageHandler = qInstallMessageHandler(xcbMessageHandler);
+ auto resetMessageHandler = qScopeGuard([] { qInstallMessageHandler(oldMessageHandler); });
+
+ // Create a mainwindow with a central widget and two dock widgets
+ QPointer<QDockWidget> d1;
+ QPointer<QDockWidget> d2;
+ QPointer<QWidget> cent;
+ QMainWindow* mainWindow;
+ createTestWidgets(mainWindow, cent, d1, d2);
+ std::unique_ptr<QMainWindow> up_mainWindow(mainWindow);
+
+ // Check hiding of docked widgets
+ qCDebug(lcTestDockWidget) << "Hiding mainWindow with plugged dock widgets" << mainWindow;
+ mainWindow->hide();
+ QXCBVERIFY(!mainWindow->isVisible());
+ QXCBVERIFY(!d1->isVisible());
+ QXCBVERIFY(!d2->isVisible());
+
+ // Check showing everything again
+ qCDebug(lcTestDockWidget) << "Showing mainWindow with plugged dock widgets" << mainWindow;
+ mainWindow->show();
+ QXCBVERIFY(QTest::qWaitForWindowActive(mainWindow));
+ QXCBVERIFY(QTest::qWaitForWindowExposed(mainWindow));
+ QXCBVERIFY(mainWindow->isVisible());
+ QXCBVERIFY(QTest::qWaitForWindowActive(d1));
+ QXCBVERIFY(d1->isVisible());
+ QXCBVERIFY(QTest::qWaitForWindowActive(d2));
+ QXCBVERIFY(d2->isVisible());
+
+ // in case of XCB errors, unplugAndResize will block and cause the test to time out.
+ // => force skip
+ QTest::qWait(waitingTime);
+ if (xcbError)
+ QSKIP("Test skipped due to XCB error");
+
+ // unplug and resize both dock widgets
+ unplugAndResize(mainWindow, d1, home1(mainWindow), size1(mainWindow));
+ unplugAndResize(mainWindow, d2, home2(mainWindow), size2(mainWindow));
+
+ // Check hiding of undocked widgets
+ qCDebug(lcTestDockWidget) << "Hiding mainWindow with unplugged dock widgets" << mainWindow;
+ mainWindow->hide();
+ QTRY_VERIFY(!mainWindow->isVisible());
+ QTRY_VERIFY(d1->isVisible());
+ QTRY_VERIFY(d2->isVisible());
+ d1->hide();
+ d2->hide();
+ QTRY_VERIFY(!d1->isVisible());
+ QTRY_VERIFY(!d2->isVisible());
+
+
+ // Check floating, hidden dock widgets remain hidden, when their state is restored
+ qCDebug(lcTestDockWidget) << "Restoring state of unplugged, hidden dock widgets" << mainWindow;
+ const QByteArray state = mainWindow->saveState();
+ mainWindow->restoreState(state);
+ mainWindow->show();
+ QVERIFY(QTest::qWaitForWindowExposed(mainWindow));
+ QTRY_VERIFY(!d1->isVisible());
+ QTRY_VERIFY(!d2->isVisible());
+
+ qCDebug(lcTestDockWidget) << "Waiting" << waitBeforeClose << "ms before closing.";
+ QTest::qWait(waitBeforeClose);
+#else
+ QSKIP("test requires -developer-build option");
+#endif // QT_BUILD_INTERNAL
+}
+
+// test closing and deleting consistency
+void tst_QDockWidget::closeAndDelete()
+{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Test skipped on Wayland.");
+#ifdef QT_BUILD_INTERNAL
+ // Create a mainwindow with a central widget and two dock widgets
+ QPointer<QDockWidget> d1;
+ QPointer<QDockWidget> d2;
+ QPointer<QWidget> cent;
+ QMainWindow* mainWindow;
+ createTestWidgets(mainWindow, cent, d1, d2);
+ std::unique_ptr<QMainWindow> up_mainWindow(mainWindow);
+
+ // unplug and resize both dock widgets
+ unplugAndResize(mainWindow, d1, home1(mainWindow), size1(mainWindow));
+ unplugAndResize(mainWindow, d2, home2(mainWindow), size2(mainWindow));
+
+ // Create a floating tab and unplug it again
+ qCDebug(lcTestDockWidget) << "Move d1 over d2";
+ moveDockWidget(d1, d2->mapToGlobal(d2->rect().center()), QPoint(), MoveDockWidgetRule::Drop);
+
+ // Both dock widgets must no longer be floating
+ // disabled due to flakiness on macOS and Windows
+ //QTRY_VERIFY(!d1->isFloating());
+ //QTRY_VERIFY(!d2->isFloating());
+ if (d1->isFloating())
+ qWarning("OS flakiness: D1 is docked and reports being floating");
+ if (d2->isFloating())
+ qWarning("OS flakiness: D2 is docked and reports being floating");
+
+ // Close everything with a single shot. Expected behavior: Event loop stops
+ QSignalSpy closeSpy(qApp, &QApplication::lastWindowClosed);
+ QObject localContext;
+
+ QTimer::singleShot(0, &localContext, [&](){
+ mainWindow->close();
+ QTRY_VERIFY(!mainWindow->isVisible());
+ QTRY_VERIFY(d1->isVisible());
+ QTRY_VERIFY(d2->isVisible());
+ d1->close();
+ d2->close();
+ QTRY_VERIFY(!d1->isVisible());
+ QTRY_VERIFY(!d2->isVisible());
+ QTRY_COMPARE(closeSpy.count(), 1);
+ QApplication::quit();
+ });
+
+ QApplication::exec();
+
+ // Check heap cleanup
+ qCDebug(lcTestDockWidget) << "Deleting mainWindow";
+ up_mainWindow.reset();
+ QTRY_VERIFY(d1.isNull());
+ QTRY_VERIFY(d2.isNull());
+ QTRY_VERIFY(cent.isNull());
+#else
+ QSKIP("test requires -developer-build option");
+#endif // QT_BUILD_INTERNAL
+}
+
+void tst_QDockWidget::closeUnclosable()
+{
+ QDockWidget *dockWidget = new QDockWidget("dock");
+ dockWidget->setWidget(new QScrollArea);
+ dockWidget->setFeatures(QDockWidget::DockWidgetFloatable);
+
+ QMainWindow mw;
+ mw.addDockWidget(Qt::TopDockWidgetArea, dockWidget);
+ mw.show();
+
+ QVERIFY(QTest::qWaitForWindowExposed(&mw));
+ dockWidget->setFloating(true);
+
+ QCOMPARE(dockWidget->close(), false);
+ mw.close();
+ QCOMPARE(dockWidget->close(), true);
+}
+
+// Test dock area permissions
+void tst_QDockWidget::dockPermissions()
+{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Test skipped on Wayland.");
+#ifdef Q_OS_WIN
+ QSKIP("Test skipped on Windows platforms");
+#endif // Q_OS_WIN
+#ifdef QT_BUILD_INTERNAL
+ // Create a mainwindow with a central widget and two dock widgets
+ QPointer<QDockWidget> d1;
+ QPointer<QDockWidget> d2;
+ QPointer<QWidget> cent;
+ QMainWindow* mainWindow;
+ createTestWidgets(mainWindow, cent, d1, d2);
+ std::unique_ptr<QMainWindow> up_mainWindow(mainWindow);
+
+ /*
+ * Unplug both dock widgets from their dock areas and hover them over each other
+ * expected behavior:
+ * - d2 hovering over d1 does nothing as d2 can only use right dock
+ * - hovering d2 over top, left and bottom dock area will do nothing due to lacking permissions
+ * - d1 hovering over d2 will create floating tabs as d1 has permission for DockWidgetArea::FloatingDockWidgetArea
+ * - resizing and tab creation will add two gap items in the right dock (d2)
+ */
+
+ // unplug and resize both dock widgets
+ unplugAndResize(mainWindow, d1, home1(mainWindow), size1(mainWindow));
+ unplugAndResize(mainWindow, d2, home2(mainWindow), size2(mainWindow));
+
+ // both dock widgets must be direct children of the main window
+ {
+ const QList<QDockWidget*> children = mainWindow->findChildren<QDockWidget*>(QString(), Qt::FindDirectChildrenOnly);
+ QTRY_VERIFY(children.size() == 2);
+ for (const QDockWidget* child : children)
+ QTRY_VERIFY(child == d1 || child == d2);
+ }
+
+ // The main window must not contain floating tabs
+ QTRY_VERIFY(mainWindow->findChild<QDockWidgetGroupWindow*>() == nullptr);
+
+ // Test unpermitted dock areas with d2
+ qCDebug(lcTestDockWidget) << "*** move d2 to forbidden docks ***";
+
+ // Move d2 to non allowed dock areas and verify it remains floating
+ qCDebug(lcTestDockWidget) << "Move d2 to top dock";
+ moveDockWidget(d2, dockPoint(mainWindow, Qt::TopDockWidgetArea), QPoint(), MoveDockWidgetRule::Drop);
+ QTRY_VERIFY(d2->isFloating());
+
+ qCDebug(lcTestDockWidget) << "Move d2 to left dock";
+ //moveDockWidget(d2, d2->mapFrom(MainWindow, dockPoint(MainWindow, Qt::LeftDockWidgetArea)));
+ moveDockWidget(d2, dockPoint(mainWindow, Qt::LeftDockWidgetArea), QPoint(), MoveDockWidgetRule::Drop);
+ QTRY_VERIFY(d2->isFloating());
+
+ qCDebug(lcTestDockWidget) << "Move d2 to bottom dock";
+ moveDockWidget(d2, dockPoint(mainWindow, Qt::BottomDockWidgetArea), QPoint(), MoveDockWidgetRule::Drop);
+ QTRY_VERIFY(d2->isFloating());
+
+ qCDebug(lcTestDockWidget) << "Waiting" << waitBeforeClose << "ms before closing.";
+ QTest::qWait(waitBeforeClose);
+#else
+ QSKIP("test requires -developer-build option");
+#endif // QT_BUILD_INTERNAL
+}
+
+/*!
+ \internal
+
+ This test checks consistency of QMainWindow::saveState() / QMainWindow::restoreState().
+ These methods (de)serialize dock widget properties via a QDataStream into a QByteArray.
+
+ If the logic of (de)serializing Qt datatypes and classes changes, old settings can fail
+ to restore properly without triggering warnings or assertions.
+
+ The test consists of two parts:
+ \list 1
+ \li Read properties from a hard coded byte array and check if it is deserialized correctly.
+ \li Serialize properties into a \a QByteArray and check if it is serialized correctly.
+ \endlist
+*/
+void tst_QDockWidget::saveAndRestore()
+{
+ if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
+ QSKIP("Test skipped on Wayland.");
+#ifdef Q_OS_WIN
+ QSKIP("Test skipped on Windows platforms");
+#endif // Q_OS_WIN
+#ifndef QT_BUILD_INTERNAL
+ QSKIP("test requires -developer-build option");
+#else
+
+ // Hard coded byte array for test initialization
+ const QByteArray testArray = QByteArrayLiteral(
+ "\x00\x00\x00\xFF\x00\x00\x00\x00\xFD\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x05\xE8\xFC\x02\x00\x00\x00\x01\xFB\x00\x00\x00\x04\x00"
+ "D\x00"
+ "1\x03\x00\x00\x01\f\x00\x00\x00\x97\x00\x00\x02\x19\x00\x00\x01z\x00\x00\x00\x01\x00\x00\x00\x13\x00\x00\x05\xE8\xFC\x02\x00\x00\x00\x01\xFB\x00\x00\x00\x04\x00"
+ "D\x00"
+ "2\x03\x00\x00\x06L\x00\x00\x00\xFF\x00\x00\x01\f\x00\x00\x00\xE2\x00\x00\n\x80\x00\x00\x05\xE8\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\b\x00\x00\x00\b\xFC\x00\x00\x00\x00"
+ );
+
+ QByteArray referenceArray; // Copy of testArray, corrected for current screen limits
+ QPoint topLeft1; // Top left point of dock widget d1
+ QPoint topLeft2; // Top left point of dock widget d2
+ QSize widgetSize1; // Size of dock widget d1
+ QSize widgetSize2; // Size of dock widget d2
+ bool isFloating1; // Floating status of dock widget d1
+ bool isFloating2; // Floating status of dock widget d2
+
+ // Create a mainwindow with a central widget and two dock widgets.
+ // Import properties from hard coded byte array.
+ // Use a scope to delete objects from screen after test.
+ {
+ QPointer<QDockWidget> d1;
+ QPointer<QDockWidget> d2;
+ QPointer<QWidget> cent;
+ QMainWindow* mainWindow;
+ createTestWidgets(mainWindow, cent, d1, d2);
+
+ // Failure to restore properties might lead to inconsistencies and crash.
+ // To leave a clean environment when the test inexpectedly goes out of scope,
+ // => store main window pointer in a std::unique_ptr
+ std::unique_ptr<QMainWindow> up_mainWindow(mainWindow);
+
+ // Restore, wait for events to be processed
+ mainWindow->restoreState(testArray);
+ QVERIFY(QTest::qWaitForWindowExposed(d1));
+ QVERIFY(QTest::qWaitForWindowExposed(d2));
+
+ // Serialized dock widget positions and sizes might be overridden due
+ // screen size limitations => do not check them here.
+ // If the test fails between here and scope end, serialization format/sequence have changed
+ QTRY_VERIFY(d1->isFloating());
+ QTRY_VERIFY(d2->isFloating());
+
+ // Hide main window and save their floating status.
+ // Reason:
+ // - KDE window managers do not take control over dock widgets.
+ // => They always close with the main window.
+ // - Some non KDE window managers do take control over dock widgets.
+ // => They prevent them from closing with the main window (QTBUG-103474).
+ // If properties are restored correctly, closing behavior must be consistent
+ // throughout this test.
+ mainWindow->hide();
+ // FIXME: No method exists in 6.5 to wait for a window to be hidden.
+ // => wait and hope the best, replace with qWaitForWindowHidden once implemented.
+ QTest::qWait(200);
+ isFloating1 = d1->isFloating();
+ isFloating2 = d2->isFloating();
+ }
+
+ // Create a mainwindow with a central widget and two dock widgets.
+ // Assign different properties to each dock widgets.
+ // Write properties to a byte array.
+ // Remember position and size properties for comparison.
+ // Use a scope to delete objects from screen after test.
+ {
+ QPointer<QDockWidget> d1;
+ QPointer<QDockWidget> d2;
+ QPointer<QWidget> cent;
+ QMainWindow* mainWindow;
+ createTestWidgets(mainWindow, cent, d1, d2);
+ std::unique_ptr<QMainWindow> up_mainWindow(mainWindow);
+
+ // unplug, position and resize both dock widgets relative to screen size
+ unplugAndResize(mainWindow, d1, home1(mainWindow), size1(mainWindow));
+ unplugAndResize(mainWindow, d2, home2(mainWindow), size2(mainWindow));
+
+ topLeft1 = d1->pos();
+ topLeft2 = d2->pos();
+ widgetSize1 = d1->size();
+ widgetSize2 = d2->size();
+
+ // save properties, potentially corrected for screen limits
+ referenceArray = mainWindow->saveState();
+
+ // Check closing behavior consistency
+ mainWindow->hide();
+ QTRY_VERIFY(d1->isFloating());
+ QTRY_VERIFY(d2->isFloating());
+ QCOMPARE(d1->isFloating(), isFloating1);
+ QCOMPARE(d2->isFloating(), isFloating2);
+ }
+
+ // Create a new main window, central window and two dock widgets.
+ QPointer<QDockWidget> d1;
+ QPointer<QDockWidget> d2;
+ QPointer<QWidget> cent;
+ QMainWindow* mainWindow;
+ createTestWidgets(mainWindow, cent, d1, d2);
+
+ // Failure to restore properties might lead to inconsistencies and crash.
+ // To leave a clean environment when the test inexpectedly goes out of scope,
+ // - store main window pointer in a std::unique_ptr
+ std::unique_ptr<QMainWindow> up_mainWindow(mainWindow);
+
+ // Restore properties and wait for events to be processed
+ mainWindow->restoreState(referenceArray);
+ QVERIFY(QTest::qWaitForWindowExposed(d1));
+ QVERIFY(QTest::qWaitForWindowExposed(d2));
+
+ // Compare positions, sizes and floating status
+ // If the test fails in the following 12 lines,
+ // the de-serialization format/sequence have changed
+ QCOMPARE(topLeft1, d1->pos());
+ QCOMPARE(topLeft2, d2->pos());
+ QCOMPARE(widgetSize1, d1->size());
+ QCOMPARE(widgetSize2, d2->size());
+ QVERIFY(d1->isFloating());
+ QVERIFY(d2->isFloating());
+
+ // Serialize again to compare all remaining properties
+ const QByteArray comparisonArray = mainWindow->saveState();
+ QCOMPARE(comparisonArray, referenceArray);
+
+ // Check closing behavior consistency
+ mainWindow->hide();
+ QTRY_VERIFY(d1->isFloating());
+ QTRY_VERIFY(d2->isFloating());
+ QCOMPARE(d1->isFloating(), isFloating1);
+ QCOMPARE(d2->isFloating(), isFloating2);
+
+#endif // QT_BUILD_INTERNAL
}
QTEST_MAIN(tst_QDockWidget)
diff --git a/tests/auto/widgets/widgets/qdoublespinbox/CMakeLists.txt b/tests/auto/widgets/widgets/qdoublespinbox/CMakeLists.txt
index 6be779bb81..b023174dc9 100644
--- a/tests/auto/widgets/widgets/qdoublespinbox/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qdoublespinbox/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qdoublespinbox.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdoublespinbox Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdoublespinbox LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qdoublespinbox
SOURCES
tst_qdoublespinbox.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp b/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp
index dd67de2287..28752cd40d 100644
--- a/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp
+++ b/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.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 <QTest>
@@ -47,6 +22,8 @@
#include <QStyle>
#include <QProxyStyle>
+#include <QtWidgets/private/qapplication_p.h>
+
class DoubleSpinBox : public QDoubleSpinBox
{
Q_OBJECT
@@ -880,8 +857,15 @@ void tst_QDoubleSpinBox::editingFinished()
testFocusWidget.show();
testFocusWidget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&testFocusWidget));
+
+ box->show();
+ QVERIFY(QTest::qWaitForWindowExposed(box));
box->setFocus();
- QTRY_VERIFY(box->hasFocus());
+
+ // Box may fail to acquire focus due to a system popup
+ // it is fair in that case to skip the test
+ if (!QTest::qWaitForWindowActive(box))
+ QSKIP("Focus acquisition failed.");
QSignalSpy editingFinishedSpy1(box, SIGNAL(editingFinished()));
QSignalSpy editingFinishedSpy2(box2, SIGNAL(editingFinished()));
@@ -890,37 +874,37 @@ void tst_QDoubleSpinBox::editingFinished()
QTest::keyClick(box, Qt::Key_Up);
- QCOMPARE(editingFinishedSpy1.count(), 0);
- QCOMPARE(editingFinishedSpy2.count(), 0);
+ QCOMPARE(editingFinishedSpy1.size(), 0);
+ QCOMPARE(editingFinishedSpy2.size(), 0);
QTest::keyClick(box2, Qt::Key_Up);
QTest::keyClick(box2, Qt::Key_Up);
box2->setFocus();
- QCOMPARE(editingFinishedSpy1.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 1);
box->setFocus();
- QCOMPARE(editingFinishedSpy1.count(), 1);
- QCOMPARE(editingFinishedSpy2.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 1);
+ QCOMPARE(editingFinishedSpy2.size(), 1);
QTest::keyClick(box, Qt::Key_Up);
- QCOMPARE(editingFinishedSpy1.count(), 1);
- QCOMPARE(editingFinishedSpy2.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 1);
+ QCOMPARE(editingFinishedSpy2.size(), 1);
QTest::keyClick(box, Qt::Key_Enter);
- QCOMPARE(editingFinishedSpy1.count(), 2);
- QCOMPARE(editingFinishedSpy2.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 2);
+ QCOMPARE(editingFinishedSpy2.size(), 1);
QTest::keyClick(box, Qt::Key_Return);
- QCOMPARE(editingFinishedSpy1.count(), 3);
- QCOMPARE(editingFinishedSpy2.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 3);
+ QCOMPARE(editingFinishedSpy2.size(), 1);
box2->setFocus();
- QCOMPARE(editingFinishedSpy1.count(), 4);
- QCOMPARE(editingFinishedSpy2.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 4);
+ QCOMPARE(editingFinishedSpy2.size(), 1);
QTest::keyClick(box2, Qt::Key_Enter);
- QCOMPARE(editingFinishedSpy1.count(), 4);
- QCOMPARE(editingFinishedSpy2.count(), 2);
+ QCOMPARE(editingFinishedSpy1.size(), 4);
+ QCOMPARE(editingFinishedSpy2.size(), 2);
QTest::keyClick(box2, Qt::Key_Return);
- QCOMPARE(editingFinishedSpy1.count(), 4);
- QCOMPARE(editingFinishedSpy2.count(), 3);
+ QCOMPARE(editingFinishedSpy1.size(), 4);
+ QCOMPARE(editingFinishedSpy2.size(), 3);
testFocusWidget.hide();
- QCOMPARE(editingFinishedSpy1.count(), 4);
- QCOMPARE(editingFinishedSpy2.count(), 4);
+ QCOMPARE(editingFinishedSpy1.size(), 4);
+ QCOMPARE(editingFinishedSpy2.size(), 4);
}
void tst_QDoubleSpinBox::removeAll()
@@ -1170,7 +1154,7 @@ void tst_QDoubleSpinBox::taskQTBUG_5008_textFromValueAndValidate()
spinbox.show();
spinbox.activateWindow();
spinbox.setFocus();
- QApplication::setActiveWindow(&spinbox);
+ QApplicationPrivate::setActiveWindow(&spinbox);
QVERIFY(QTest::qWaitForWindowActive(&spinbox));
QCOMPARE(static_cast<QWidget *>(&spinbox), QApplication::activeWindow());
QTRY_VERIFY(spinbox.hasFocus());
@@ -1776,12 +1760,12 @@ void tst_QDoubleSpinBox::stepModifierPressAndHold()
QStyle::CC_SpinBox, &spinBoxStyleOption, subControl, &spin);
QTest::mousePress(&spin, Qt::LeftButton, modifiers, buttonRect.center());
- QTRY_VERIFY(spy.length() >= 3);
+ QTRY_VERIFY(spy.size() >= 3);
QTest::mouseRelease(&spin, Qt::LeftButton, modifiers, buttonRect.center());
const auto value = spy.last().at(0);
QVERIFY(value.userType() == QMetaType::Double);
- QCOMPARE(value.toDouble(), spy.length() * expectedStepModifier);
+ QCOMPARE(value.toDouble(), spy.size() * expectedStepModifier);
}
QTEST_MAIN(tst_QDoubleSpinBox)
diff --git a/tests/auto/widgets/widgets/qfocusframe/CMakeLists.txt b/tests/auto/widgets/widgets/qfocusframe/CMakeLists.txt
index d5e32e9337..5e2f3bd955 100644
--- a/tests/auto/widgets/widgets/qfocusframe/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qfocusframe/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qfocusframe.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfocusframe Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfocusframe LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfocusframe
SOURCES
tst_qfocusframe.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qfocusframe/tst_qfocusframe.cpp b/tests/auto/widgets/widgets/qfocusframe/tst_qfocusframe.cpp
index d273d77e35..560ba686cc 100644
--- a/tests/auto/widgets/widgets/qfocusframe/tst_qfocusframe.cpp
+++ b/tests/auto/widgets/widgets/qfocusframe/tst_qfocusframe.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 <QTest>
@@ -95,7 +70,7 @@ void tst_QFocusFrame::focusFrameInsideScrollview()
window.show();
QFocusFrame *focusFrame = nullptr;
- QTRY_VERIFY(focusFrame = window.findChild<QFocusFrame *>());
+ QTRY_VERIFY((focusFrame = window.findChild<QFocusFrame *>()));
const QPoint initialOffset = focusFrame->widget()->mapToGlobal(QPoint()) - focusFrame->mapToGlobal(QPoint());
tableView.scrollTo(itemModel->index(40, 0));
diff --git a/tests/auto/widgets/widgets/qfontcombobox/CMakeLists.txt b/tests/auto/widgets/widgets/qfontcombobox/CMakeLists.txt
index 869666cb19..15dad99b9c 100644
--- a/tests/auto/widgets/widgets/qfontcombobox/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qfontcombobox/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qfontcombobox.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qfontcombobox Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qfontcombobox LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qfontcombobox
SOURCES
tst_qfontcombobox.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qfontcombobox/tst_qfontcombobox.cpp b/tests/auto/widgets/widgets/qfontcombobox/tst_qfontcombobox.cpp
index a521b96e21..abb9262288 100644
--- a/tests/auto/widgets/widgets/qfontcombobox/tst_qfontcombobox.cpp
+++ b/tests/auto/widgets/widgets/qfontcombobox/tst_qfontcombobox.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 <QTest>
@@ -102,7 +77,7 @@ void tst_QFontComboBox::currentFont_data()
if (!QFontDatabase::isPrivateFamily(defaultFont.family()))
QTest::newRow("default2") << defaultFont;
QStringList list = QFontDatabase::families();
- for (int i = 0; i < list.count(); ++i) {
+ for (int i = 0; i < list.size(); ++i) {
QFont f = QFont(QStringList{QFontInfo(QFont(list.at(i))).family()});
if (!QFontDatabase::isPrivateFamily(f.families().first()))
QTest::newRow(qPrintable(list.at(i))) << f;
@@ -130,7 +105,7 @@ void tst_QFontComboBox::currentFont()
if (oldCurrentFont != box.currentFont()) {
//the signal may be emit twice if there is a foundry into brackets
- QCOMPARE(spy0.count(),1);
+ QCOMPARE(spy0.size(),1);
}
}
@@ -180,7 +155,7 @@ void tst_QFontComboBox::fontFilters()
if((fontFilters & spacingMask) == spacingMask)
fontFilters &= ~spacingMask;
- for (int i = 0; i < list.count(); ++i) {
+ for (int i = 0; i < list.size(); ++i) {
if (QFontDatabase::isPrivateFamily(list[i]))
continue;
if (fontFilters & QFontComboBox::ScalableFonts) {
@@ -205,7 +180,7 @@ void tst_QFontComboBox::fontFilters()
if (c == 0)
QCOMPARE(box.currentFont(), QFont());
- QCOMPARE(spy0.count(), (currentFont != box.currentFont()) ? 1 : 0);
+ QCOMPARE(spy0.size(), (currentFont != box.currentFont()) ? 1 : 0);
}
// public QSize sizeHint() const
@@ -246,17 +221,17 @@ void tst_QFontComboBox::writingSystem()
QCOMPARE(box.writingSystem(), writingSystem);
QStringList list = QFontDatabase::families(writingSystem);
- int c = list.count();
- for (int i = 0; i < list.count(); ++i) {
+ int c = list.size();
+ for (int i = 0; i < list.size(); ++i) {
if (QFontDatabase::isPrivateFamily(list[i]))
c--;
}
QCOMPARE(box.model()->rowCount(), c);
- if (list.count() == 0)
+ if (list.size() == 0)
QCOMPARE(box.currentFont(), QFont());
- QCOMPARE(spy0.count(), (currentFont != box.currentFont()) ? 1 : 0);
+ QCOMPARE(spy0.size(), (currentFont != box.currentFont()) ? 1 : 0);
}
// protected void currentFontChanged(QFont const& f)
@@ -270,11 +245,11 @@ void tst_QFontComboBox::currentFontChanged()
if (box->model()->rowCount() > 2) {
QTest::keyPress(box, Qt::Key_Down);
- QCOMPARE(spy0.count(), 1);
+ QCOMPARE(spy0.size(), 1);
QFont f( "Sans Serif" );
box->setCurrentFont(f);
- QCOMPARE(spy0.count(), 2);
+ QCOMPARE(spy0.size(), 2);
} else
qWarning("Not enough fonts installed on test system. Consider adding some");
}
diff --git a/tests/auto/widgets/widgets/qframe/BLACKLIST b/tests/auto/widgets/widgets/qframe/BLACKLIST
deleted file mode 100644
index 3a28dd1239..0000000000
--- a/tests/auto/widgets/widgets/qframe/BLACKLIST
+++ /dev/null
@@ -1,3 +0,0 @@
-# QTBUG-69064
-[testPainting]
-android
diff --git a/tests/auto/widgets/widgets/qframe/CMakeLists.txt b/tests/auto/widgets/widgets/qframe/CMakeLists.txt
index 968f9ac3f3..2213f4a7d9 100644
--- a/tests/auto/widgets/widgets/qframe/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qframe/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qframe.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qframe Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qframe LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -11,10 +18,10 @@ file(GLOB_RECURSE test_data_glob
list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qframe
- LOWDPI # special case
+ LOWDPI
SOURCES
tst_qframe.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
TESTDATA ${test_data}
diff --git a/tests/auto/widgets/widgets/qframe/tst_qframe.cpp b/tests/auto/widgets/widgets/qframe/tst_qframe.cpp
index b5272f6b1a..324c512219 100644
--- a/tests/auto/widgets/widgets/qframe/tst_qframe.cpp
+++ b/tests/auto/widgets/widgets/qframe/tst_qframe.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@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 The Qt Company Ltd.
+// Copyright (C) 2014 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Giuseppe D'Angelo <giuseppe.dangelo@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QFrame>
@@ -173,7 +148,16 @@ void tst_QFrame::testPainting()
frame.setMidLineWidth(midLineWidth);
frame.resize(16, 16);
- const QPixmap pixmap = frame.grab();
+ QPixmap pixmap = frame.grab();
+#ifdef Q_OS_ANDROID
+ // QPixmap is created with system's default format, which is
+ // ARGB32_Premultiplied for Android. For desktop systems the format is
+ // RGB32, so that's also the format of the images in resources. So on
+ // Android we need to explicitly convert the pixmap to a proper format.
+ QImage img = pixmap.toImage();
+ QVERIFY(img.reinterpretAsFormat(QImage::Format_RGB32));
+ pixmap = QPixmap::fromImage(img);
+#endif
const QString fileName = QLatin1String("images/") + basename + QLatin1Char('_')
+ QString::number(lineWidth) + QLatin1Char('_') + QString::number(midLineWidth)
diff --git a/tests/auto/widgets/widgets/qgroupbox/CMakeLists.txt b/tests/auto/widgets/widgets/qgroupbox/CMakeLists.txt
index ed08cce5f2..0414ce0cf5 100644
--- a/tests/auto/widgets/widgets/qgroupbox/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qgroupbox/CMakeLists.txt
@@ -1,13 +1,22 @@
-# Generated from qgroupbox.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qgroupbox Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qgroupbox LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qgroupbox
SOURCES
tst_qgroupbox.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
+ Qt::GuiPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp b/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp
index b9def66f7c..0d716cce97 100644
--- a/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp
+++ b/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.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 <QTest>
@@ -36,6 +11,11 @@
#include <QDialog>
#include <QSignalSpy>
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformtheme.h>
+
+#include <QtWidgets/private/qapplication_p.h>
+
#include "qgroupbox.h"
class tst_QGroupBox : public QObject
@@ -70,6 +50,7 @@ private slots:
void propagateFocus();
void task_QTBUG_19170_ignoreMouseReleaseEvent();
void task_QTBUG_15519_propagateMouseEvents();
+ void buttonPressKeys();
private:
bool checked;
@@ -392,8 +373,8 @@ void tst_QGroupBox::clicked()
else
QTest::mouseClick(&testWidget, Qt::LeftButton);
- QTEST(int(spy.count()), "clickedCount");
- if (spy.count() > 0)
+ QTEST(int(spy.size()), "clickedCount");
+ if (spy.size() > 0)
QTEST(spy.at(0).at(0).toBool(), "finalCheck");
QTEST(testWidget.isChecked(), "finalCheck");
}
@@ -407,9 +388,9 @@ void tst_QGroupBox::toggledVsClicked()
QSignalSpy clickSpy(&groupBox, SIGNAL(clicked(bool)));
groupBox.setChecked(!groupBox.isChecked());
- QCOMPARE(clickSpy.count(), 0);
- QCOMPARE(toggleSpy.count(), 1);
- if (toggleSpy.count() > 0)
+ QCOMPARE(clickSpy.size(), 0);
+ QCOMPARE(toggleSpy.size(), 1);
+ if (toggleSpy.size() > 0)
QCOMPARE(toggleSpy.at(0).at(0).toBool(), groupBox.isChecked());
connect(&groupBox, SIGNAL(clicked(bool)), this, SLOT(clickTimestampSlot()));
@@ -422,8 +403,8 @@ void tst_QGroupBox::toggledVsClicked()
QStyle::SC_GroupBoxCheckBox, &groupBox);
QTest::mouseClick(&groupBox, Qt::LeftButton, {}, rect.center());
- QCOMPARE(clickSpy.count(), 1);
- QCOMPARE(toggleSpy.count(), 2);
+ QCOMPARE(clickSpy.size(), 1);
+ QCOMPARE(toggleSpy.size(), 2);
QVERIFY(toggleTimeStamp < clickTimeStamp);
}
@@ -449,7 +430,7 @@ void tst_QGroupBox::childrenAreDisabled()
layout->addWidget(new QRadioButton);
box.setLayout(layout);
- foreach (QObject *object, box.children()) {
+ for (QObject *object : box.children()) {
if (QWidget *widget = qobject_cast<QWidget *>(object)) {
QVERIFY(!widget->isEnabled());
QVERIFY(!widget->testAttribute(Qt::WA_ForceDisabled));
@@ -457,7 +438,7 @@ void tst_QGroupBox::childrenAreDisabled()
}
box.setChecked(true);
- foreach (QObject *object, box.children()) {
+ for (QObject *object : box.children()) {
if (QWidget *widget = qobject_cast<QWidget *>(object)) {
QVERIFY(widget->isEnabled());
QVERIFY(!widget->testAttribute(Qt::WA_ForceDisabled));
@@ -465,7 +446,7 @@ void tst_QGroupBox::childrenAreDisabled()
}
box.setChecked(false);
- foreach (QObject *object, box.children()) {
+ for (QObject *object : box.children()) {
if (QWidget *widget = qobject_cast<QWidget *>(object)) {
QVERIFY(!widget->isEnabled());
QVERIFY(!widget->testAttribute(Qt::WA_ForceDisabled));
@@ -481,7 +462,7 @@ void tst_QGroupBox::propagateFocus()
QGroupBox box;
QLineEdit lineEdit(&box);
box.show();
- QApplication::setActiveWindow(&box);
+ QApplicationPrivate::setActiveWindow(&box);
QVERIFY(QTest::qWaitForWindowActive(&box));
box.setFocus();
QTRY_COMPARE(qApp->focusWidget(), static_cast<QWidget*>(&lineEdit));
@@ -611,10 +592,25 @@ void tst_QGroupBox::task_QTBUG_15519_propagateMouseEvents()
QCOMPARE(parent.mouseMoved, true);
}
+void tst_QGroupBox::buttonPressKeys()
+{
+ QGroupBox groupBox;
+ groupBox.setCheckable(true);
+ QSignalSpy clickedSpy(&groupBox, &QGroupBox::clicked);
+ const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+ ->themeHint(QPlatformTheme::ButtonPressKeys)
+ .value<QList<Qt::Key>>();
+ for (int i = 0; i < buttonPressKeys.size(); ++i) {
+ QTest::keyClick(&groupBox, buttonPressKeys[i]);
+ QCOMPARE(clickedSpy.size(), i + 1);
+ }
+}
+
void tst_QGroupBox::sendMouseMoveEvent(QWidget *widget, const QPoint &localPos)
{
// Send a MouseMove event without actually moving the pointer
- QMouseEvent event(QEvent::MouseMove, localPos, Qt::NoButton, Qt::NoButton, Qt::NoModifier);
+ QMouseEvent event(QEvent::MouseMove, localPos, widget->mapToGlobal(localPos),
+ Qt::NoButton, Qt::NoButton, Qt::NoModifier);
QApplication::sendEvent(widget, &event);
}
diff --git a/tests/auto/widgets/widgets/qkeysequenceedit/CMakeLists.txt b/tests/auto/widgets/widgets/qkeysequenceedit/CMakeLists.txt
index a016280b5d..0cf0b1bdd3 100644
--- a/tests/auto/widgets/widgets/qkeysequenceedit/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qkeysequenceedit/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qkeysequenceedit.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qkeysequenceedit Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qkeysequenceedit LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qkeysequenceedit
SOURCES
tst_qkeysequenceedit.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qkeysequenceedit/tst_qkeysequenceedit.cpp b/tests/auto/widgets/widgets/qkeysequenceedit/tst_qkeysequenceedit.cpp
index 1a0532ffa4..301be319bf 100644
--- a/tests/auto/widgets/widgets/qkeysequenceedit/tst_qkeysequenceedit.cpp
+++ b/tests/auto/widgets/widgets/qkeysequenceedit/tst_qkeysequenceedit.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 <QTest>
@@ -45,6 +20,9 @@ private slots:
void testKeys_data();
void testKeys();
void testLineEditContents();
+ void testMaximumSequenceLength();
+ void testFinishingKeyCombinations_data();
+ void testFinishingKeyCombinations();
};
void tst_QKeySequenceEdit::testSetters()
@@ -59,7 +37,7 @@ void tst_QKeySequenceEdit::testSetters()
edit.clear();
QCOMPARE(edit.keySequence(), QKeySequence());
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_QKeySequenceEdit::testKeys_data()
@@ -74,6 +52,42 @@ void tst_QKeySequenceEdit::testKeys_data()
QTest::newRow("4") << Qt::Key_N << Qt::KeyboardModifiers(Qt::ControlModifier | Qt::ShiftModifier) << QKeySequence("Ctrl+Shift+N");
}
+void tst_QKeySequenceEdit::testMaximumSequenceLength()
+{
+ //
+ // GIVEN:
+ // - A QKeySequenceEdit with maxKeyCount == 1
+ // - A QKeySequence with more than one key
+ //
+ QKeySequenceEdit edit;
+ edit.setMaximumSequenceLength(1);
+ QCOMPARE(edit.maximumSequenceLength(), 1);
+
+ QKeySequence multi("Ctrl+X, S");
+ QCOMPARE(multi.count(), 2);
+
+ //
+ // WHEN: setting the key sequence on the edit
+ //
+ QTest::ignoreMessage(QtWarningMsg,
+ "QKeySequenceEdit: setting a key sequence of length 2 when "
+ "maximumSequenceLength is 1, truncating.");
+ edit.setKeySequence(multi);
+
+ //
+ // THEN:
+ // - the maxKeyCount property doesn't change
+ // - the key sequence is truncated to maxKeyCount
+ // - and won't un-truncate by increasing maxKeyCount
+ //
+ QCOMPARE(edit.maximumSequenceLength(), 1);
+ const auto edited = edit.keySequence();
+ QCOMPARE(edited.count(), 1);
+ QCOMPARE(edited, QKeySequence("Ctrl+X"));
+ edit.setMaximumSequenceLength(2);
+ QCOMPARE(edit.keySequence(), edited);
+}
+
void tst_QKeySequenceEdit::testKeys()
{
QFETCH(Qt::Key, key);
@@ -85,9 +99,9 @@ void tst_QKeySequenceEdit::testKeys()
QTest::keyPress(&edit, key, modifiers);
QTest::keyRelease(&edit, key, modifiers);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QCOMPARE(edit.keySequence(), keySequence);
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
}
void tst_QKeySequenceEdit::testLineEditContents()
@@ -111,5 +125,43 @@ void tst_QKeySequenceEdit::testLineEditContents()
QCOMPARE(le->text(), QString());
}
+void tst_QKeySequenceEdit::testFinishingKeyCombinations_data()
+{
+ QTest::addColumn<Qt::Key>("key");
+ QTest::addColumn<Qt::KeyboardModifiers>("modifiers");
+ QTest::addColumn<QKeySequence>("keySequence");
+
+ QTest::newRow("1") << Qt::Key_Backtab << Qt::KeyboardModifiers(Qt::NoModifier) << QKeySequence("Backtab");
+ QTest::newRow("2") << Qt::Key_Tab << Qt::KeyboardModifiers(Qt::NoModifier) << QKeySequence("Tab");
+ QTest::newRow("3") << Qt::Key_Return << Qt::KeyboardModifiers(Qt::NoModifier) << QKeySequence("Return");
+ QTest::newRow("4") << Qt::Key_Enter << Qt::KeyboardModifiers(Qt::NoModifier) << QKeySequence("Enter");
+ QTest::newRow("5") << Qt::Key_Enter << Qt::KeyboardModifiers(Qt::ShiftModifier) << QKeySequence("Shift+Enter");
+}
+
+void tst_QKeySequenceEdit::testFinishingKeyCombinations()
+{
+ QFETCH(Qt::Key, key);
+ QFETCH(Qt::KeyboardModifiers, modifiers);
+ QFETCH(QKeySequence, keySequence);
+ QKeySequenceEdit edit;
+
+ QSignalSpy spy(&edit, SIGNAL(editingFinished()));
+ QCOMPARE(spy.size(), 0);
+
+ edit.setFinishingKeyCombinations({QKeyCombination(modifiers, key)});
+ QTest::keyPress(&edit, key, modifiers);
+ QTest::keyRelease(&edit, key, modifiers);
+
+ QCOMPARE(edit.keySequence(), QKeySequence());
+ QTRY_COMPARE(spy.size(), 1);
+
+ edit.setFinishingKeyCombinations({});
+ QTest::keyPress(&edit, key, modifiers);
+ QTest::keyRelease(&edit, key, modifiers);
+
+ QCOMPARE(edit.keySequence(), keySequence);
+ QTRY_COMPARE(spy.size(), 2);
+}
+
QTEST_MAIN(tst_QKeySequenceEdit)
#include "tst_qkeysequenceedit.moc"
diff --git a/tests/auto/widgets/widgets/qlabel/CMakeLists.txt b/tests/auto/widgets/widgets/qlabel/CMakeLists.txt
index bbd51a206c..e29000a6ca 100644
--- a/tests/auto/widgets/widgets/qlabel/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qlabel/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qlabel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qlabel Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qlabel LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -17,7 +24,7 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qlabel
SOURCES
tst_qlabel.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp b/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp
index 1af61e9ec6..325e188091 100644
--- a/tests/auto/widgets/widgets/qlabel/tst_qlabel.cpp
+++ b/tests/auto/widgets/widgets/qlabel/tst_qlabel.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 <QTest>
@@ -43,6 +18,8 @@
#include <qmath.h>
#include <private/qlabel_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
class Widget : public QWidget
{
Q_OBJECT
@@ -100,12 +77,16 @@ private Q_SLOTS:
#ifndef QT_NO_CONTEXTMENU
void taskQTBUG_7902_contextMenuCrash();
+ void contextMenu_data();
+ void contextMenu();
#endif
void taskQTBUG_48157_dprPixmap();
void taskQTBUG_48157_dprMovie();
void resourceProvider();
+ void mouseEventPropagation_data();
+ void mouseEventPropagation();
private:
QLabel *testWidget;
@@ -190,7 +171,7 @@ void tst_QLabel::setBuddy()
layout->addWidget(test_edit);
layout->addWidget(test_edit2);
test_box->show();
- qApp->setActiveWindow(test_box);
+ QApplicationPrivate::setActiveWindow(test_box);
QVERIFY(test_box->isActiveWindow());
test_label->setBuddy( test_edit );
@@ -575,12 +556,50 @@ void tst_QLabel::taskQTBUG_7902_contextMenuCrash()
w->connect(&ti, SIGNAL(timeout()), w, SLOT(deleteLater()));
ti.start(300);
- QContextMenuEvent *cme = new QContextMenuEvent(QContextMenuEvent::Mouse, w->rect().center());
+ QContextMenuEvent *cme = new QContextMenuEvent(QContextMenuEvent::Mouse, w->rect().center(),
+ w->mapToGlobal(w->rect().center()));
qApp->postEvent(w, cme);
QTest::qWait(350);
// No crash, it's allright.
}
+
+void tst_QLabel::contextMenu_data()
+{
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<Qt::TextInteractionFlag>("interactionFlags");
+ QTest::addColumn<bool>("showsContextMenu");
+
+ QTest::addRow("Read-only") << "Plain Text"
+ << Qt::NoTextInteraction
+ << false;
+ QTest::addRow("Selectable") << "Plain Text"
+ << Qt::TextEditorInteraction
+ << true;
+ QTest::addRow("Link") << "<a href=\"nowhere\">Rich text with link</a>"
+ << Qt::TextBrowserInteraction
+ << true;
+ QTest::addRow("Rich text") << "<b>Rich text without link</b>"
+ << Qt::TextBrowserInteraction
+ << true;
+}
+
+void tst_QLabel::contextMenu()
+{
+ QFETCH(QString, text);
+ QFETCH(Qt::TextInteractionFlag, interactionFlags);
+ QFETCH(bool, showsContextMenu);
+
+ QLabel label(text);
+ label.setTextInteractionFlags(interactionFlags);
+ label.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&label));
+
+ const QPoint menuPosition = label.rect().center();
+ QContextMenuEvent cme(QContextMenuEvent::Mouse, menuPosition, label.mapToGlobal(menuPosition));
+ QApplication::sendEvent(&label, &cme);
+ QCOMPARE(cme.isAccepted(), showsContextMenu);
+}
#endif
void tst_QLabel::taskQTBUG_48157_dprPixmap()
@@ -622,5 +641,94 @@ void tst_QLabel::resourceProvider()
QVERIFY(providerCalled > 0);
}
+// Test if mouse events are correctly propagated to the parent widget,
+// even if a label contains rich text (QTBUG-110055)
+void tst_QLabel::mouseEventPropagation_data()
+{
+ QTest::addColumn<const QString>("text");
+ QTest::addColumn<const Qt::TextInteractionFlag>("interaction");
+ QTest::addColumn<const QList<Qt::MouseButton>>("buttons");
+ QTest::addColumn<const bool>("expectPropagation");
+
+
+ QTest::newRow("RichText")
+ << QString("<b>This is a rich text propagating mouse events</b>")
+ << Qt::LinksAccessibleByMouse
+ << QList<Qt::MouseButton>{Qt::LeftButton, Qt::RightButton, Qt::MiddleButton}
+ << true;
+ QTest::newRow("PlainText")
+ << QString("This is a plain text propagating mouse events")
+ << Qt::LinksAccessibleByMouse
+ << QList<Qt::MouseButton>{Qt::LeftButton, Qt::RightButton, Qt::MiddleButton}
+ << true;
+ QTest::newRow("PlainTextConsume")
+ << QString("This is a plain text consuming mouse events")
+ << Qt::TextSelectableByMouse
+ << QList<Qt::MouseButton>{Qt::LeftButton}
+ << false;
+ QTest::newRow("RichTextConsume")
+ << QString("<b>This is a rich text consuming mouse events</b>")
+ << Qt::TextSelectableByMouse
+ << QList<Qt::MouseButton>{Qt::LeftButton}
+ << false;
+ QTest::newRow("PlainTextNoInteraction")
+ << QString("This is a text not interacting with mouse")
+ << Qt::NoTextInteraction
+ << QList<Qt::MouseButton>{Qt::LeftButton, Qt::RightButton, Qt::MiddleButton}
+ << true;
+ QTest::newRow("RichTextNoInteraction")
+ << QString("<b>This is a rich text not interacting with mouse</b>")
+ << Qt::NoTextInteraction
+ << QList<Qt::MouseButton>{Qt::LeftButton, Qt::RightButton, Qt::MiddleButton}
+ << true;
+}
+
+void tst_QLabel::mouseEventPropagation()
+{
+ class MouseEventWidget : public QWidget
+ {
+ public:
+ uint pressed() const { return m_pressed; }
+ uint released() const { return m_released; }
+
+ private:
+ uint m_pressed = 0;
+ uint m_released = 0;
+ void mousePressEvent(QMouseEvent *event) override
+ {
+ ++m_pressed;
+ return QWidget::mousePressEvent(event);
+ }
+
+ void mouseReleaseEvent(QMouseEvent *event) override
+ {
+ ++m_released;
+ return QWidget::mouseReleaseEvent(event);
+ }
+ };
+
+ QFETCH(const QString, text);
+ QFETCH(const Qt::TextInteractionFlag, interaction);
+ QFETCH(const QList<Qt::MouseButton>, buttons);
+ QFETCH(const bool, expectPropagation);
+
+ MouseEventWidget widget;
+ auto *layout = new QVBoxLayout(&widget);
+ auto *label = new QLabel(text);
+ label->setTextInteractionFlags(interaction);
+
+ layout->addWidget(label);
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+
+ const QPoint labelCenter = label->rect().center();
+ for (Qt::MouseButton mouseButton : buttons)
+ QTest::mouseClick(label, mouseButton, Qt::KeyboardModifiers(), labelCenter);
+
+ const uint count = expectPropagation ? buttons.count() : 0;
+ QTRY_COMPARE(widget.pressed(), count);
+ QTRY_COMPARE(widget.released(), count);
+}
+
QTEST_MAIN(tst_QLabel)
#include "tst_qlabel.moc"
diff --git a/tests/auto/widgets/widgets/qlcdnumber/CMakeLists.txt b/tests/auto/widgets/widgets/qlcdnumber/CMakeLists.txt
index 4d6a8ff77a..954ec095e5 100644
--- a/tests/auto/widgets/widgets/qlcdnumber/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qlcdnumber/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qlcdnumber.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qlcdnumber Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qlcdnumber LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qlcdnumber
SOURCES
tst_qlcdnumber.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp b/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp
index a97a090ebd..8fcf9c49fe 100644
--- a/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.cpp
+++ b/tests/auto/widgets/widgets/qlcdnumber/tst_qlcdnumber.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 <QTest>
diff --git a/tests/auto/widgets/widgets/qlineedit/BLACKLIST b/tests/auto/widgets/widgets/qlineedit/BLACKLIST
index 9f87a6d921..a459495d1a 100644
--- a/tests/auto/widgets/widgets/qlineedit/BLACKLIST
+++ b/tests/auto/widgets/widgets/qlineedit/BLACKLIST
@@ -3,13 +3,7 @@
android
[leftKeyOnSelectedText]
android
-[cutWithoutSelection]
-android
-[inlineCompletion]
-android
[textMargin]
android
-[task210502_caseInsensitiveInlineCompletion]
-android
[testQuickSelectionWithMouse]
android
diff --git a/tests/auto/widgets/widgets/qlineedit/CMakeLists.txt b/tests/auto/widgets/widgets/qlineedit/CMakeLists.txt
index 8cdee2a111..22ecf40aed 100644
--- a/tests/auto/widgets/widgets/qlineedit/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qlineedit/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qlineedit.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qlineedit Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qlineedit LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qlineedit
SOURCES
tst_qlineedit.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -20,6 +27,6 @@ qt_internal_add_test(tst_qlineedit
#####################################################################
qt_internal_extend_target(tst_qlineedit CONDITION MACOS
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWAppKit}
)
diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
index d6c6211e01..be185c1e7a 100644
--- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp
+++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.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 <QTest>
@@ -292,6 +267,8 @@ private slots:
void inputMethodQueryImHints_data();
void inputMethodQueryImHints();
+ void inputMethodQueryEnterKeyType();
+
void inputMethodUpdate();
void undoRedoAndEchoModes_data();
@@ -315,6 +292,13 @@ private slots:
void QTBUG_60319_setInputMaskCheckImSurroundingText();
void testQuickSelectionWithMouse();
void inputRejected();
+ void keyReleasePropagates();
+
+#if QT_CONFIG(shortcut)
+ void deleteWordByKeySequence_data();
+ void deleteWordByKeySequence();
+#endif
+
protected slots:
void editingFinished();
@@ -677,7 +661,7 @@ void tst_QLineEdit::setInputMask()
testWidget->insert(input);
} else {
psKeyClick(testWidget, Qt::Key_Home);
- for (int i=0; i<input.length(); i++)
+ for (int i=0; i<input.size(); i++)
QTest::keyClick(testWidget, input.at(i).toLatin1());
}
@@ -944,8 +928,8 @@ void tst_QLineEdit::hasAcceptableInputValidator()
qApp->sendEvent(testWidget, &lostFocus);
QVERIFY(testWidget->hasAcceptableInput());
- QCOMPARE(spyChanged.count(), 2);
- QCOMPARE(spyEdited.count(), 0);
+ QCOMPARE(spyChanged.size(), 2);
+ QCOMPARE(spyEdited.size(), 0);
}
@@ -1617,7 +1601,7 @@ void tst_QLineEdit::setText()
QSignalSpy editedSpy(testWidget, SIGNAL(textEdited(QString)));
QSignalSpy changedSpy(testWidget, SIGNAL(textChanged(QString)));
testWidget->setText("hello");
- QCOMPARE(editedSpy.count(), 0);
+ QCOMPARE(editedSpy.size(), 0);
QCOMPARE(changedSpy.value(0).value(0).toString(), QString("hello"));
}
@@ -1689,7 +1673,7 @@ void tst_QLineEdit::displayText_data()
QString input;
QString pass;
input = "Hello World";
- pass.resize(input.length());
+ pass.resize(input.size());
pass.fill(passChar);
QTest::newRow(QString(s + " text0").toLatin1()) << input << pass << m << bool(use_setText);
QTest::newRow(QString(s + " text1").toLatin1()) << QString("") <<
@@ -1697,14 +1681,14 @@ void tst_QLineEdit::displayText_data()
m << bool(use_setText);
QTest::newRow(QString(s + " text2").toLatin1()) << QString("A") << QString(passChar) << m << bool(use_setText);
input = QString("ryyryryryryryryryryryryryryryryryryryryryryryryryryryrryryryryryryryryryryryryryryryryryryryryryryryryryryryryryryryryryrryryryryryryryryryryryryry");
- pass.resize(input.length());
+ pass.resize(input.size());
pass.fill(passChar);
QTest::newRow(QString(s + " text3").toLatin1()) << input << pass << m << bool(use_setText);
input = QString("abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890`~!@#$%^&*()_-+={[}]|\\:;'?/>.<,\"");
- pass.fill(passChar, input.length());
+ pass.fill(passChar, input.size());
QTest::newRow(QString(s + " text4").toLatin1()) << input << pass << m << bool(use_setText);
input = QString("Hello") + QChar(0xa0) + "World";
- pass.resize(input.length());
+ pass.resize(input.size());
pass.fill(passChar);
QTest::newRow(QString(s + " text with nbsp").toLatin1()) << input << pass << m << bool(use_setText);
}
@@ -2317,7 +2301,7 @@ void tst_QLineEdit::deleteSelectedText()
#ifndef QT_NO_CONTEXTMENU
QMenu *menu = edit.createStandardContextMenu();
- for (int i = 0; i < menu->actions().count(); ++i) {
+ for (int i = 0; i < menu->actions().size(); ++i) {
QAction *current = menu->actions().at(i);
if (current->text() == QLineEdit::tr("Delete")) {
current->trigger(); //this will delete the whole text selected
@@ -2450,7 +2434,7 @@ class QIntFixValidator : public QIntValidator {
public:
QIntFixValidator(int min, int max, QObject *parent) : QIntValidator(min, max, parent) {}
void fixup (QString &input) const override {
- for (int i=0; i<input.length(); ++i)
+ for (int i=0; i<input.size(); ++i)
if (!input.at(i).isNumber()) {
input[(int)i] = QChar('0');
}
@@ -3016,7 +3000,7 @@ void tst_QLineEdit::setSelection_data()
QTest::newRow(selectionTestName(start, length).constData())
<< text << start << length << pos << QString("Abc ") << true;
- start = -1; length = 0; pos = text.length();
+ start = -1; length = 0; pos = text.size();
QTest::newRow(selectionTestName(start, length).constData())
<< text << start << length << pos << QString() << false;
@@ -3036,7 +3020,7 @@ void tst_QLineEdit::setSelection_data()
QTest::newRow(selectionTestName(start, length).constData())
<< text << start << length << pos << QString("A") << true;
- start = -1; length = -1; pos = text.length();
+ start = -1; length = -1; pos = text.size();
QTest::newRow(selectionTestName(start, length).constData())
<< text << start << length << pos << QString() << false;
}
@@ -3333,7 +3317,7 @@ void tst_QLineEdit::validateOnFocusOut()
QTest::keyPress(testWidget, '0');
QCOMPARE(testWidget->text(), QString("10"));
testWidget->clearFocus();
- QCOMPARE(editingFinishedSpy.count(), 0);
+ QCOMPARE(editingFinishedSpy.size(), 0);
testWidget->setFocus();
centerOnScreen(testWidget);
@@ -3346,7 +3330,7 @@ void tst_QLineEdit::validateOnFocusOut()
QTRY_COMPARE(testWidget->text(), QString("100"));
testWidget->clearFocus();
- QCOMPARE(editingFinishedSpy.count(), 1);
+ QCOMPARE(editingFinishedSpy.size(), 1);
}
void tst_QLineEdit::editInvalidText()
@@ -3430,6 +3414,9 @@ void tst_QLineEdit::leftKeyOnSelectedText()
void tst_QLineEdit::inlineCompletion()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("QCompleter does not work on Android, see QTBUG-77174");
+#endif
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
QSKIP("Wayland: This fails. Figure out why.");
@@ -3521,7 +3508,7 @@ void tst_QLineEdit::noTextEditedOnClear()
testWidget->setText("Test");
QSignalSpy textEditedSpy(testWidget, SIGNAL(textEdited(QString)));
testWidget->clear();
- QCOMPARE(textEditedSpy.count(), 0);
+ QCOMPARE(textEditedSpy.size(), 0);
}
void tst_QLineEdit::textMargin_data()
@@ -3537,11 +3524,12 @@ void tst_QLineEdit::textMargin_data()
QLineEdit testWidget;
QFontMetrics metrics(testWidget.font());
const QString s = QLatin1String("MMM MMM MMM");
+ const int windows11StyleHorizontalOffset = qApp->style()->inherits("QWindows11Style") ? 8 : 0;
// Different styles generate different offsets, so
// calculate the width rather than hardcode it.
- const int pixelWidthOfM = metrics.horizontalAdvance(s, 1);
- const int pixelWidthOfMMM_MM = metrics.horizontalAdvance(s, 6);
+ const int pixelWidthOfM = windows11StyleHorizontalOffset + metrics.horizontalAdvance(s, 1);
+ const int pixelWidthOfMMM_MM = windows11StyleHorizontalOffset + metrics.horizontalAdvance(s, 6);
QTest::newRow("default-0") << 0 << 0 << 0 << 0 << QPoint(pixelWidthOfMMM_MM, 0) << 6;
QTest::newRow("default-1") << 0 << 0 << 0 << 0 << QPoint(1, 1) << 0;
@@ -3625,7 +3613,7 @@ void tst_QLineEdit::returnKeyClearsEditedFlag()
// Focus drop with no edits shouldn't emit signal, edited flag == false
testWidget.clearFocus(); // Signal not emitted
QVERIFY(!testWidget.hasFocus());
- QCOMPARE(leSpy.count(), 0);
+ QCOMPARE(leSpy.size(), 0);
// Focus drop after edits should emit signal, edited flag == true
testWidget.setFocus();
@@ -3633,7 +3621,7 @@ void tst_QLineEdit::returnKeyClearsEditedFlag()
QTest::keyClicks(&testWidget, "edit1 "); // edited flag set
testWidget.clearFocus(); // edited flag cleared, signal emitted
QVERIFY(!testWidget.hasFocus());
- QCOMPARE(leSpy.count(), 1);
+ QCOMPARE(leSpy.size(), 1);
// Only text related keys should set edited flag
testWidget.setFocus();
@@ -3643,7 +3631,7 @@ void tst_QLineEdit::returnKeyClearsEditedFlag()
QTest::keyClick(&testWidget, Qt::Key_PageUp);
testWidget.clearFocus(); // Signal not emitted
QVERIFY(!testWidget.hasFocus());
- QCOMPARE(leSpy.count(), 1); // No change
+ QCOMPARE(leSpy.size(), 1); // No change
// Return should always emit signal
testWidget.setFocus();
@@ -3651,12 +3639,12 @@ void tst_QLineEdit::returnKeyClearsEditedFlag()
QTest::keyClick(&testWidget, Qt::Key_Return); /* Without edits,
signal emitted,
edited flag cleared */
- QCOMPARE(leSpy.count(), 2);
+ QCOMPARE(leSpy.size(), 2);
QTest::keyClicks(&testWidget, "edit2 "); // edited flag set
QTest::keyClick(&testWidget, Qt::Key_Return); /* With edits,
signal emitted,
edited flag cleared */
- QCOMPARE(leSpy.count(), 3);
+ QCOMPARE(leSpy.size(), 3);
/* After editing the line edit following a Return key press with a
focus drop should not emit signal a second time since Return now
@@ -3664,10 +3652,10 @@ void tst_QLineEdit::returnKeyClearsEditedFlag()
QTest::keyClicks(&testWidget, "edit3 "); // edited flag set
QTest::keyClick(&testWidget, Qt::Key_Return); /* signal emitted,
edited flag cleared */
- QCOMPARE(leSpy.count(), 4);
+ QCOMPARE(leSpy.size(), 4);
testWidget.clearFocus(); // Signal not emitted since edited == false
QVERIFY(!testWidget.hasFocus());
- QCOMPARE(leSpy.count(), 4); // No change
+ QCOMPARE(leSpy.size(), 4); // No change
}
#ifndef QT_NO_CURSOR
@@ -3734,7 +3722,7 @@ void tst_QLineEdit::task174640_editingFinished()
layout->addWidget(le2);
mw.show();
- QApplication::setActiveWindow(&mw);
+ QApplicationPrivate::setActiveWindow(&mw);
mw.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&mw));
QCOMPARE(&mw, QApplication::activeWindow());
@@ -3743,19 +3731,19 @@ void tst_QLineEdit::task174640_editingFinished()
le1->setFocus();
QTRY_VERIFY(le1->hasFocus());
- QCOMPARE(editingFinishedSpy.count(), 0);
+ QCOMPARE(editingFinishedSpy.size(), 0);
le2->setFocus();
QTRY_VERIFY(le2->hasFocus());
// editingFinished will not be emitted anew because no editing happened
- QCOMPARE(editingFinishedSpy.count(), 0);
+ QCOMPARE(editingFinishedSpy.size(), 0);
le1->setFocus();
QTRY_VERIFY(le1->hasFocus());
QTest::keyPress(le1, Qt::Key_Plus);
le2->setFocus();
QTRY_VERIFY(le2->hasFocus());
- QCOMPARE(editingFinishedSpy.count(), 1);
+ QCOMPARE(editingFinishedSpy.size(), 1);
editingFinishedSpy.clear();
le1->setFocus();
@@ -3770,7 +3758,7 @@ void tst_QLineEdit::task174640_editingFinished()
mw.activateWindow();
delete testMenu1;
- QCOMPARE(editingFinishedSpy.count(), 0);
+ QCOMPARE(editingFinishedSpy.size(), 0);
QTRY_VERIFY(le1->hasFocus());
// Ensure le1 has been edited
QTest::keyPress(le1, Qt::Key_Plus);
@@ -3783,7 +3771,7 @@ void tst_QLineEdit::task174640_editingFinished()
QTest::qWait(20);
mw.activateWindow();
delete testMenu2;
- QCOMPARE(editingFinishedSpy.count(), 1);
+ QCOMPARE(editingFinishedSpy.size(), 1);
}
#if QT_CONFIG(completer)
@@ -3827,6 +3815,9 @@ void tst_QLineEdit::task198789_currentCompletion()
void tst_QLineEdit::task210502_caseInsensitiveInlineCompletion()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("QCompleter does not work on Android, see QTBUG-77174");
+#endif
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
QSKIP("Wayland: This fails. Figure out why.");
@@ -3839,7 +3830,7 @@ void tst_QLineEdit::task210502_caseInsensitiveInlineCompletion()
completer.setCompletionMode(QCompleter::InlineCompletion);
lineEdit.setCompleter(&completer);
lineEdit.show();
- QApplication::setActiveWindow(&lineEdit);
+ QApplicationPrivate::setActiveWindow(&lineEdit);
QVERIFY(QTest::qWaitForWindowActive(&lineEdit));
lineEdit.setFocus();
QTRY_VERIFY(lineEdit.hasFocus());
@@ -3865,7 +3856,7 @@ void tst_QLineEdit::task229938_dontEmitChangedWhenTextIsNotChanged()
QTest::keyPress(&lineEdit, 'd');
QTest::keyPress(&lineEdit, 'e');
QTest::keyPress(&lineEdit, 'f');
- QCOMPARE(changedSpy.count(), 5);
+ QCOMPARE(changedSpy.size(), 5);
}
void tst_QLineEdit::task233101_cursorPosAfterInputMethod_data()
@@ -3940,7 +3931,7 @@ void tst_QLineEdit::task241436_passwordEchoOnEditRestoreEchoMode()
testWidget->setFocus();
centerOnScreen(testWidget);
testWidget->show();
- QApplication::setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
QVERIFY(QTest::qWaitForWindowActive(testWidget));
QVERIFY(testWidget->hasFocus());
@@ -3991,7 +3982,7 @@ void tst_QLineEdit::taskQTBUG_4401_enterKeyClearsPassword()
testWidget->selectAll();
centerOnScreen(testWidget);
testWidget->show();
- QApplication::setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
QVERIFY(QTest::qWaitForWindowActive(testWidget));
QTest::keyPress(testWidget, Qt::Key_Enter);
@@ -4047,7 +4038,8 @@ void tst_QLineEdit::taskQTBUG_7902_contextMenuCrash()
w->connect(&ti, SIGNAL(timeout()), w, SLOT(deleteLater()));
ti.start(200);
- QContextMenuEvent *cme = new QContextMenuEvent(QContextMenuEvent::Mouse, w->rect().center());
+ QContextMenuEvent *cme = new QContextMenuEvent(QContextMenuEvent::Mouse, w->rect().center(),
+ w->mapToGlobal(w->rect().center()));
qApp->postEvent(w, cme);
QTest::qWait(300);
@@ -4073,13 +4065,13 @@ void tst_QLineEdit::taskQTBUG_7395_readOnlyShortcut()
le.show();
QVERIFY(QTest::qWaitForWindowExposed(&le));
- QApplication::setActiveWindow(&le);
+ QApplicationPrivate::setActiveWindow(&le);
QVERIFY(QTest::qWaitForWindowActive(&le));
le.setFocus();
QTRY_VERIFY(le.hasFocus());
QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_P);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QLineEdit::QTBUG697_paletteCurrentColorGroup()
@@ -4095,7 +4087,7 @@ void tst_QLineEdit::QTBUG697_paletteCurrentColorGroup()
le.setPalette(p);
le.show();
- QApplication::setActiveWindow(&le);
+ QApplicationPrivate::setActiveWindow(&le);
QVERIFY(QTest::qWaitForWindowActive(&le));
le.setFocus();
QTRY_VERIFY(le.hasFocus());
@@ -4123,7 +4115,7 @@ void tst_QLineEdit::QTBUG13520_textNotVisible()
QString sometext("01-ST16-01SIL-MPL001wfgsdfgsdgsdfgsdfgsdfgsdfgsdfg");
le.setText(sometext);
le.setCursorPosition(0);
- QTest::qWait(100); //just make sure we get he lineedit correcly painted
+ QTest::qWait(100); //just make sure we get he lineedit correctly painted
auto expectedCursorCoordinate = le.width() - le.fontMetrics().horizontalAdvance(sometext);
// cursor does not leave widget to the left:
@@ -4366,14 +4358,14 @@ void tst_QLineEdit::inputMethodSelection()
testWidget->setSelection(0,0);
QSignalSpy selectionSpy(testWidget, SIGNAL(selectionChanged()));
- QCOMPARE(selectionSpy.count(), 0);
+ QCOMPARE(selectionSpy.size(), 0);
QCOMPARE(testWidget->selectionStart(), -1);
QCOMPARE(testWidget->selectionEnd(), -1);
QCOMPARE(testWidget->selectionLength(), 0);
testWidget->setSelection(0,5);
- QCOMPARE(selectionSpy.count(), 1);
+ QCOMPARE(selectionSpy.size(), 1);
QCOMPARE(testWidget->selectionStart(), 0);
QCOMPARE(testWidget->selectionEnd(), 5);
QCOMPARE(testWidget->selectionLength(), 5);
@@ -4387,7 +4379,7 @@ void tst_QLineEdit::inputMethodSelection()
QApplication::sendEvent(testWidget, &event);
}
- QCOMPARE(selectionSpy.count(), 2);
+ QCOMPARE(selectionSpy.size(), 2);
QCOMPARE(testWidget->selectionStart(), 12);
QCOMPARE(testWidget->selectionEnd(), 17);
QCOMPARE(testWidget->selectionLength(), 5);
@@ -4400,7 +4392,7 @@ void tst_QLineEdit::inputMethodSelection()
QApplication::sendEvent(testWidget, &event);
}
- QCOMPARE(selectionSpy.count(), 3);
+ QCOMPARE(selectionSpy.size(), 3);
QCOMPARE(testWidget->selectionStart(), -1);
QCOMPARE(testWidget->selectionEnd(), -1);
QCOMPARE(testWidget->selectionLength(), 0);
@@ -4427,6 +4419,33 @@ void tst_QLineEdit::inputMethodQueryImHints()
QCOMPARE(static_cast<Qt::InputMethodHints>(value.toInt()), hints);
}
+void tst_QLineEdit::inputMethodQueryEnterKeyType()
+{
+ QWidget mw;
+ QVBoxLayout layout(&mw);
+ QLineEdit le1(&mw);
+ layout.addWidget(&le1);
+ mw.show();
+ QVariant enterType = le1.inputMethodQuery(Qt::ImEnterKeyType);
+ QCOMPARE(enterType.value<Qt::EnterKeyType>(), Qt::EnterKeyDefault);
+
+ mw.hide();
+ QLineEdit le2(&mw);
+ layout.addWidget(&le2);
+ mw.show();
+
+ enterType = le1.inputMethodQuery(Qt::ImEnterKeyType);
+#ifdef Q_OS_ANDROID
+ // QTBUG-61652
+ // EnterKey is changed to EnterKeyNext if the focus can be moved to widget below
+ QCOMPARE(enterType.value<Qt::EnterKeyType>(), Qt::EnterKeyNext);
+#else
+ QCOMPARE(enterType.value<Qt::EnterKeyType>(), Qt::EnterKeyDefault);
+#endif
+ enterType = le2.inputMethodQuery(Qt::ImEnterKeyType);
+ QCOMPARE(enterType.value<Qt::EnterKeyType>(), Qt::EnterKeyDefault);
+}
+
void tst_QLineEdit::inputMethodUpdate()
{
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
@@ -4563,7 +4582,7 @@ void tst_QLineEdit::clearButton()
l->addWidget(listView);
testWidget.move(300, 300);
testWidget.show();
- qApp->setActiveWindow(&testWidget);
+ QApplicationPrivate::setActiveWindow(&testWidget);
QVERIFY(QTest::qWaitForWindowActive(&testWidget));
// Flip the clear button on,off, trying to detect crashes.
filterLineEdit->setClearButtonEnabled(true);
@@ -4588,11 +4607,11 @@ void tst_QLineEdit::clearButton()
QSignalSpy spyEdited(filterLineEdit, &QLineEdit::textEdited);
const QPoint clearButtonCenterPos = QRect(QPoint(0, 0), clearButton->size()).center();
QTest::mouseClick(clearButton, Qt::LeftButton, {}, clearButtonCenterPos);
- QCOMPARE(spyEdited.count(), 1);
+ QCOMPARE(spyEdited.size(), 1);
QTRY_COMPARE(clearButton->cursor().shape(), filterLineEdit->cursor().shape());
QTRY_COMPARE(filterModel->rowCount(), 3);
QCoreApplication::processEvents();
- QCOMPARE(spyEdited.count(), 1);
+ QCOMPARE(spyEdited.size(), 1);
filterLineEdit->setReadOnly(true); // QTBUG-34315
QVERIFY(!clearButton->isEnabled());
@@ -4674,7 +4693,8 @@ void tst_QLineEdit::sideWidgets()
testWidget.move(300, 300);
testWidget.show();
QVERIFY(QTest::qWaitForWindowExposed(&testWidget));
- foreach (QToolButton *button, lineEdit->findChildren<QToolButton *>())
+ const auto buttons = lineEdit->findChildren<QToolButton *>();
+ for (QToolButton *button : buttons)
QCOMPARE(button->cursor().shape(), Qt::ArrowCursor);
// Arbitrarily add/remove actions, trying to detect crashes. Add QTRY_VERIFY(false) to view the result.
delete label3Action;
@@ -4689,7 +4709,8 @@ void tst_QLineEdit::sideWidgets()
template <class T> T *findAssociatedWidget(const QAction *a)
{
- foreach (QWidget *w, a->associatedWidgets()) {
+ const auto associatedObjects = a->associatedObjects();
+ for (QObject *w : associatedObjects) {
if (T *result = qobject_cast<T *>(w))
return result;
}
@@ -4869,7 +4890,7 @@ void tst_QLineEdit::QTBUG1266_setInputMaskEmittingTextEdited()
QSignalSpy spy(&lineEdit, SIGNAL(textEdited(QString)));
lineEdit.setInputMask("AAAA");
lineEdit.setInputMask(QString());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
#if QT_CONFIG(shortcut)
@@ -4930,7 +4951,7 @@ void tst_QLineEdit::shortcutOverrideOnReadonlyLineEdit()
}
const int activationCount = shouldBeHandledByQLineEdit ? 0 : 1;
- QCOMPARE(spy.count(), activationCount);
+ QCOMPARE(spy.size(), activationCount);
}
#endif // QT_CONFIG(shortcut)
@@ -4963,7 +4984,7 @@ void tst_QLineEdit::QTBUG59957_clearButtonLeftmostAction()
bool tst_QLineEdit::unselectingWithLeftOrRightChangesCursorPosition()
{
-#if defined Q_OS_WIN || defined Q_OS_QNX //Windows and QNX do not jump to the beginning of the selection
+#if defined Q_OS_WIN || defined Q_OS_QNX || defined Q_OS_VXWORKS //Windows, QNX and VxWorks do not jump to the beginning of the selection
return true;
#endif
// Platforms minimal/offscreen also need left after unselecting with right
@@ -4983,10 +5004,10 @@ void tst_QLineEdit::QTBUG_60319_setInputMaskCheckImSurroundingText()
QLineEdit *testWidget = ensureTestWidget();
QString mask("+000(000)-000-00-00");
testWidget->setInputMask(mask);
- testWidget->setCursorPosition(mask.length());
+ testWidget->setCursorPosition(mask.size());
QString surroundingText = testWidget->inputMethodQuery(Qt::ImSurroundingText).toString();
int cursorPosition = testWidget->inputMethodQuery(Qt::ImCursorPosition).toInt();
- QCOMPARE(surroundingText.length(), cursorPosition);
+ QCOMPARE(surroundingText.size(), cursorPosition);
}
void tst_QLineEdit::testQuickSelectionWithMouse()
@@ -5083,18 +5104,18 @@ void tst_QLineEdit::inputRejected()
QSignalSpy spyInputRejected(testWidget, SIGNAL(inputRejected()));
QTest::keyClicks(testWidget, "abcde");
- QCOMPARE(spyInputRejected.count(), 0);
+ QCOMPARE(spyInputRejected.size(), 0);
testWidget->setText("fghij");
- QCOMPARE(spyInputRejected.count(), 0);
+ QCOMPARE(spyInputRejected.size(), 0);
testWidget->insert("k");
- QCOMPARE(spyInputRejected.count(), 0);
+ QCOMPARE(spyInputRejected.size(), 0);
testWidget->clear();
testWidget->setMaxLength(5);
QTest::keyClicks(testWidget, "abcde");
- QCOMPARE(spyInputRejected.count(), 0);
+ QCOMPARE(spyInputRejected.size(), 0);
QTest::keyClicks(testWidget, "fgh");
- QCOMPARE(spyInputRejected.count(), 3);
+ QCOMPARE(spyInputRejected.size(), 3);
#if QT_CONFIG(clipboard)
testWidget->clear();
spyInputRejected.clear();
@@ -5102,7 +5123,7 @@ void tst_QLineEdit::inputRejected()
testWidget->paste();
// The first 5 characters are accepted, but
// the last 2 are not.
- QCOMPARE(spyInputRejected.count(), 1);
+ QCOMPARE(spyInputRejected.size(), 1);
#endif
testWidget->setMaxLength(INT_MAX);
@@ -5111,15 +5132,15 @@ void tst_QLineEdit::inputRejected()
QIntValidator intValidator(1, 100);
testWidget->setValidator(&intValidator);
QTest::keyClicks(testWidget, "11");
- QCOMPARE(spyInputRejected.count(), 0);
+ QCOMPARE(spyInputRejected.size(), 0);
QTest::keyClicks(testWidget, "a#");
- QCOMPARE(spyInputRejected.count(), 2);
+ QCOMPARE(spyInputRejected.size(), 2);
#if QT_CONFIG(clipboard)
testWidget->clear();
spyInputRejected.clear();
QApplication::clipboard()->setText("a#");
testWidget->paste();
- QCOMPARE(spyInputRejected.count(), 1);
+ QCOMPARE(spyInputRejected.size(), 1);
#endif
testWidget->clear();
@@ -5127,10 +5148,154 @@ void tst_QLineEdit::inputRejected()
spyInputRejected.clear();
testWidget->setInputMask("999.999.999.999;_");
QTest::keyClicks(testWidget, "11");
- QCOMPARE(spyInputRejected.count(), 0);
+ QCOMPARE(spyInputRejected.size(), 0);
QTest::keyClicks(testWidget, "a#");
- QCOMPARE(spyInputRejected.count(), 2);
+ QCOMPARE(spyInputRejected.size(), 2);
}
+void tst_QLineEdit::keyReleasePropagates()
+{
+ struct Dialog : QWidget
+ {
+ QLineEdit *lineEdit;
+ int releasedKey = {};
+
+ Dialog()
+ {
+ lineEdit = new QLineEdit;
+ QHBoxLayout *hbox = new QHBoxLayout;
+
+ hbox->addWidget(lineEdit);
+ setLayout(hbox);
+ }
+
+ protected:
+ void keyReleaseEvent(QKeyEvent *e) override
+ {
+ releasedKey = e->key();
+ }
+ } dialog;
+
+ dialog.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&dialog));
+
+ QTest::keyPress(dialog.lineEdit, Qt::Key_A);
+ QTest::keyRelease(dialog.lineEdit, Qt::Key_A);
+
+ QCOMPARE(dialog.releasedKey, Qt::Key_A);
+
+ QTest::keyPress(dialog.lineEdit, Qt::Key_Alt);
+ QTest::keyRelease(dialog.lineEdit, Qt::Key_Alt);
+
+ QCOMPARE(dialog.releasedKey, Qt::Key_Alt);
+}
+
+#if QT_CONFIG(shortcut)
+
+void tst_QLineEdit::deleteWordByKeySequence_data()
+{
+ QTest::addColumn<QString>("startText");
+ QTest::addColumn<int>("selectionStart");
+ QTest::addColumn<int>("selectionEnd");
+ QTest::addColumn<int>("cursorPosition");
+ QTest::addColumn<QKeySequence::StandardKey>("key");
+ QTest::addColumn<QString>("expectedText");
+ QTest::addColumn<int>("expectedCursorPosition");
+
+ QTest::newRow("Delete start, no selection")
+ << QStringLiteral("Some Text") << 0 << 0 << 9 << QKeySequence::DeleteStartOfWord
+ << QStringLiteral("Some ") << 5;
+ QTest::newRow("Delete end, no selection")
+ << QStringLiteral("Some Text") << 0 << 0 << 5 << QKeySequence::DeleteEndOfWord
+ << QStringLiteral("Some ") << 5;
+ QTest::newRow("Delete start from middle, no selection")
+ << QStringLiteral("Some Text") << 0 << 0 << 7 << QKeySequence::DeleteStartOfWord
+ << QStringLiteral("Some xt") << 5;
+ QTest::newRow("Delete end from middle, no selection")
+ << QStringLiteral("Some Text") << 0 << 0 << 7 << QKeySequence::DeleteEndOfWord
+ << QStringLiteral("Some Te") << 7;
+ QTest::newRow("Delete end from first, no selection")
+ << QStringLiteral("Some Text") << 0 << 0 << 0 << QKeySequence::DeleteEndOfWord
+ << QStringLiteral("Text") << 0;
+
+ QTest::newRow("Delete start, full selection")
+ << QStringLiteral("Some Text") << 0 << 9 << 0 << QKeySequence::DeleteStartOfWord
+ << QStringLiteral("") << 0;
+ QTest::newRow("Delete end, full selection")
+ << QStringLiteral("Some Text") << 0 << 9 << 0 << QKeySequence::DeleteEndOfWord
+ << QStringLiteral("") << 0;
+ QTest::newRow("Delete start, full selection, single word")
+ << QStringLiteral("Some") << 0 << 4 << 0 << QKeySequence::DeleteStartOfWord
+ << QStringLiteral("") << 0;
+ QTest::newRow("Delete end, full selection, single word")
+ << QStringLiteral("Some") << 0 << 4 << 0 << QKeySequence::DeleteEndOfWord
+ << QStringLiteral("") << 0;
+
+ QTest::newRow("Delete start, word selection")
+ << QStringLiteral("Some Text") << 5 << 9 << 0 << QKeySequence::DeleteStartOfWord
+ << QStringLiteral("Some ") << 5;
+ QTest::newRow("Delete end, word selection")
+ << QStringLiteral("Some Text") << 5 << 9 << 0 << QKeySequence::DeleteEndOfWord
+ << QStringLiteral("Some ") << 5;
+ QTest::newRow("Delete start, partial word selection")
+ << QStringLiteral("Some Text") << 5 << 7 << 0 << QKeySequence::DeleteStartOfWord
+ << QStringLiteral("Some xt") << 5;
+ QTest::newRow("Delete end, partial word selection")
+ << QStringLiteral("Some Text") << 5 << 7 << 0 << QKeySequence::DeleteEndOfWord
+ << QStringLiteral("Some xt") << 5;
+ QTest::newRow("Delete start, partial inner word selection")
+ << QStringLiteral("Some Text") << 6 << 8 << 0 << QKeySequence::DeleteStartOfWord
+ << QStringLiteral("Some Tt") << 6;
+ QTest::newRow("Delete end, partial inner word selection")
+ << QStringLiteral("Some Text") << 6 << 8 << 0 << QKeySequence::DeleteEndOfWord
+ << QStringLiteral("Some Tt") << 6;
+ QTest::newRow("Delete start, selection with space")
+ << QStringLiteral("Some Text") << 3 << 9 << 0 << QKeySequence::DeleteStartOfWord
+ << QStringLiteral("Som") << 3;
+ QTest::newRow("Delete end, selection with space")
+ << QStringLiteral("Some Text") << 3 << 9 << 0 << QKeySequence::DeleteEndOfWord
+ << QStringLiteral("Som") << 3;
+ QTest::newRow("Delete start, partial word selection with space")
+ << QStringLiteral("Some Text") << 3 << 7 << 0 << QKeySequence::DeleteStartOfWord
+ << QStringLiteral("Somxt") << 3;
+ QTest::newRow("Delete end, partial selection with space")
+ << QStringLiteral("Some Text") << 3 << 7 << 0 << QKeySequence::DeleteEndOfWord
+ << QStringLiteral("Somxt") << 3;
+}
+
+void tst_QLineEdit::deleteWordByKeySequence()
+{
+ QFETCH(QString, startText);
+ QFETCH(int, selectionStart);
+ QFETCH(int, selectionEnd);
+ QFETCH(int, cursorPosition);
+ QFETCH(QKeySequence::StandardKey, key);
+ QFETCH(QString, expectedText);
+ QFETCH(int, expectedCursorPosition);
+
+ QWidget widget;
+
+ QLineEdit *lineEdit = new QLineEdit(startText, &widget);
+ lineEdit->setFocus();
+ lineEdit->setCursorPosition(cursorPosition);
+ if (selectionStart != selectionEnd)
+ lineEdit->setSelection(selectionStart, selectionEnd - selectionStart);
+
+ widget.show();
+
+ QVERIFY(QTest::qWaitForWindowActive(&widget));
+
+ QTestEventList keys;
+ addKeySequenceStandardKey(keys, key);
+ keys.simulate(lineEdit);
+
+ QCOMPARE(lineEdit->text(), expectedText);
+ QCOMPARE(lineEdit->selectionStart(), -1);
+ QCOMPARE(lineEdit->selectionEnd(), -1);
+ QCOMPARE(lineEdit->cursorPosition(), expectedCursorPosition);
+}
+
+#endif // QT_CONFIG(shortcut)
+
QTEST_MAIN(tst_QLineEdit)
#include "tst_qlineedit.moc"
diff --git a/tests/auto/widgets/widgets/qmainwindow/BLACKLIST b/tests/auto/widgets/widgets/qmainwindow/BLACKLIST
new file mode 100644
index 0000000000..28b08026d8
--- /dev/null
+++ b/tests/auto/widgets/widgets/qmainwindow/BLACKLIST
@@ -0,0 +1,2 @@
+[QTBUG52175_tabifiedDockWidgetActivated]
+macos arm ci
diff --git a/tests/auto/widgets/widgets/qmainwindow/CMakeLists.txt b/tests/auto/widgets/widgets/qmainwindow/CMakeLists.txt
index 85ce87f764..93f94f78c7 100644
--- a/tests/auto/widgets/widgets/qmainwindow/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qmainwindow/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qmainwindow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmainwindow Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmainwindow LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmainwindow
SOURCES
tst_qmainwindow.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
Qt::WidgetsPrivate
diff --git a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp
index f2a7981b4c..093af90d1c 100644
--- a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp
+++ b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.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 <QTest>
@@ -68,13 +43,13 @@ public:
}
void timerEvent(QTimerEvent*) override
{
- QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseButtonPress, QPoint(6, 7), Qt::LeftButton, {}, {}));
- QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(7, 8), Qt::LeftButton, Qt::LeftButton, {}));
- QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(27, 23), Qt::LeftButton, Qt::LeftButton, {}));
- QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(30, 27), Qt::LeftButton, Qt::LeftButton, {}));
- QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(162, 109), Qt::LeftButton, Qt::LeftButton, {}));
- QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(10, 4), Qt::LeftButton, Qt::LeftButton, {}));
- QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseButtonRelease, QPoint(9, 4), Qt::LeftButton, {}, {}));
+ QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseButtonPress, QPoint(6, 7), m_tb->mapToGlobal(QPoint(6, 7)), Qt::LeftButton, {}, {}));
+ QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(7, 8), m_tb->mapToGlobal(QPoint(7, 8)), Qt::LeftButton, Qt::LeftButton, {}));
+ QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(27, 23), m_tb->mapToGlobal(QPoint(27, 23)), Qt::LeftButton, Qt::LeftButton, {}));
+ QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(30, 27), m_tb->mapToGlobal(QPoint(30, 27)), Qt::LeftButton, Qt::LeftButton, {}));
+ QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(162, 109), m_tb->mapToGlobal(QPoint(162, 109)), Qt::LeftButton, Qt::LeftButton, {}));
+ QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(10, 4), m_tb->mapToGlobal(QPoint(10, 4)), Qt::LeftButton, Qt::LeftButton, {}));
+ QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseButtonRelease, QPoint(9, 4), m_tb->mapToGlobal(QPoint(6, 7)), Qt::LeftButton, {}, {}));
}
};
@@ -92,8 +67,8 @@ public:
void timerEvent(QTimerEvent*) override
{
- QCoreApplication::postEvent(m_w, new QMouseEvent(QEvent::MouseButtonPress, QPoint(230, 370), Qt::LeftButton, {}, {}));
- QCoreApplication::postEvent(m_w, new QMouseEvent(QEvent::MouseButtonRelease, QPoint(230, 370), Qt::LeftButton, {}, {}));
+ QCoreApplication::postEvent(m_w, new QMouseEvent(QEvent::MouseButtonPress, QPoint(230, 370), m_w->mapToGlobal(QPoint(230, 370)), Qt::LeftButton, {}, {}));
+ QCoreApplication::postEvent(m_w, new QMouseEvent(QEvent::MouseButtonRelease, QPoint(230, 370), m_w->mapToGlobal(QPoint(230, 370)), Qt::LeftButton, {}, {}));
}
};
@@ -129,6 +104,7 @@ private slots:
void restoreStateFromPreviousVersion();
void restoreStateSizeChanged_data();
void restoreStateSizeChanged();
+ void restoreAndModify();
void createPopupMenu();
void hideBeforeLayout();
#ifdef QT_BUILD_INTERNAL
@@ -1365,25 +1341,31 @@ void tst_QMainWindow::restoreState()
dw.setObjectName(QLatin1String("dock"));
mw.addDockWidget(Qt::LeftDockWidgetArea, &dw);
+ QWidgetPrivate *tbp = QWidgetPrivate::get(&tb);
+ QVERIFY(tbp->widgetItem);
+
QByteArray state;
state = mw.saveState();
QVERIFY(mw.restoreState(state));
+ QVERIFY(tbp->widgetItem);
state = mw.saveState(1);
QVERIFY(!mw.restoreState(state));
QVERIFY(mw.restoreState(state, 1));
+ QVERIFY(tbp->widgetItem);
}
//tests the restoration of the previous versions of window settings
void tst_QMainWindow::restoreStateFromPreviousVersion()
{
- QList<QByteArray> restoreData;
- restoreData << QByteArray((char*)restoreData41, sizeof(restoreData41))
- << QByteArray((char*)restoreData42, sizeof(restoreData42))
- << QByteArray((char*)restoreData43, sizeof(restoreData43));
+ const QByteArray restoreData[] = {
+ QByteArray((char*)restoreData41, sizeof(restoreData41)),
+ QByteArray((char*)restoreData42, sizeof(restoreData42)),
+ QByteArray((char*)restoreData43, sizeof(restoreData43)),
+ };
- foreach(QByteArray ba, restoreData) {
+ for (const QByteArray &ba : restoreData) {
QMainWindow win;
win.setCentralWidget(new QTextEdit);
@@ -1495,6 +1477,70 @@ void tst_QMainWindow::restoreStateSizeChanged()
}
}
+/*!
+ If a main window's state is restored but also modified, then we
+ might have to forget the restored state to avoid dangling pointers.
+ See comment in QMainWindowLayout::applyRestoredState() and QTBUG-120025.
+*/
+void tst_QMainWindow::restoreAndModify()
+{
+ class MainWindow : public QMainWindow
+ {
+ public:
+ MainWindow()
+ {
+ setCentralWidget(new QTextEdit);
+
+ customers = new QDockWidget(tr("Customers"), this);
+ customers->setObjectName("Customers");
+ customers->setAllowedAreas(Qt::LeftDockWidgetArea |
+ Qt::RightDockWidgetArea);
+ customers->setWidget(new QTextEdit);
+ addDockWidget(Qt::RightDockWidgetArea, customers);
+
+ paragraphs = new QDockWidget(tr("Paragraphs"), this);
+ paragraphs->setObjectName("Paragraphs");
+ paragraphs->setWidget(new QTextEdit);
+ addDockWidget(Qt::RightDockWidgetArea, paragraphs);
+ }
+
+ void restore()
+ {
+ if (!savedGeometry.isEmpty())
+ restoreGeometry(savedGeometry);
+ setWindowState(Qt::WindowMaximized);
+ if (!savedState.isEmpty())
+ restoreState(savedState);
+
+ tabifyDockWidget(customers, paragraphs);
+ }
+ protected:
+ void closeEvent(QCloseEvent *event) override
+ {
+ savedGeometry = saveGeometry();
+ savedState = saveState();
+
+ return QMainWindow::closeEvent(event);
+ }
+ private:
+ QByteArray savedGeometry;
+ QByteArray savedState;
+
+ QDockWidget *customers;
+ QDockWidget *paragraphs;
+
+ } mainWindow;
+
+ mainWindow.restore();
+ mainWindow.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&mainWindow));
+ mainWindow.close();
+
+ mainWindow.restore();
+ mainWindow.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&mainWindow));
+}
+
void tst_QMainWindow::createPopupMenu()
{
{
@@ -1691,25 +1737,25 @@ void MoveSeparator::apply(QMainWindow *mw) const
QMap<QString, QRect> dockWidgetGeometries(QMainWindow *mw)
{
QMap<QString, QRect> result;
- QList<QDockWidget*> dockWidgets = mw->findChildren<QDockWidget*>();
- foreach (QDockWidget *dw, dockWidgets)
+ const QList<QDockWidget*> dockWidgets = mw->findChildren<QDockWidget*>();
+ for (QDockWidget *dw : dockWidgets)
result.insert(dw->objectName(), dw->geometry());
return result;
}
#define COMPARE_DOCK_WIDGET_GEOS(_oldGeos, _newGeos) \
{ \
- QMap<QString, QRect> __oldGeos = _oldGeos; \
- QMap<QString, QRect> __newGeos = _newGeos; \
- QCOMPARE(__newGeos.keys(), __oldGeos.keys()); \
- QStringList __keys = __newGeos.keys(); \
- foreach (const QString &key, __keys) { \
- QRect __r1 = __oldGeos[key]; \
- QRect __r2 = __newGeos[key]; \
- if (__r1 != __r2) \
- qWarning() << key << __r1 << __r2; \
+ QMap<QString, QRect> _v_oldGeos = _oldGeos; \
+ QMap<QString, QRect> _v_newGeos = _newGeos; \
+ QCOMPARE(_v_newGeos.keys(), _v_oldGeos.keys()); \
+ const QStringList _v_keys = _v_newGeos.keys(); \
+ for (const QString &key : _v_keys) { \
+ QRect _v_r1 = _v_oldGeos[key]; \
+ QRect _v_r2 = _v_newGeos[key]; \
+ if (_v_r1 != _v_r2) \
+ qWarning() << key << _v_r1 << _v_r2; \
} \
- QCOMPARE(__newGeos, __oldGeos); \
+ QCOMPARE(_v_newGeos, _v_oldGeos); \
}
#ifdef QT_BUILD_INTERNAL
@@ -1755,8 +1801,8 @@ void tst_QMainWindow::saveRestore_data()
#ifdef QT_BUILD_INTERNAL
void tst_QMainWindow::saveRestore()
{
- QFETCH(AddList, addList);
- QFETCH(MoveList, moveList);
+ QFETCH(const AddList, addList);
+ QFETCH(const MoveList, moveList);
QByteArray stateData;
QMap<QString, QRect> dockWidgetGeos;
@@ -1768,12 +1814,12 @@ void tst_QMainWindow::saveRestore()
QTextEdit centralWidget("The rain in Spain falls mainly on the plains");
mainWindow.setCentralWidget(&centralWidget);
- foreach (const AddDockWidget &adw, addList)
+ for (const AddDockWidget &adw : addList)
adw.apply(&mainWindow);
mainWindow.show();
- foreach (const MoveSeparator &ms, moveList)
+ for (const MoveSeparator &ms : moveList)
ms.apply(&mainWindow);
dockWidgetGeos = dockWidgetGeometries(&mainWindow);
@@ -1791,7 +1837,7 @@ void tst_QMainWindow::saveRestore()
QTextEdit centralWidget("The rain in Spain falls mainly on the plains");
mainWindow.setCentralWidget(&centralWidget);
- foreach (const AddDockWidget &adw, addList)
+ for (const AddDockWidget &adw : addList)
adw.apply(&mainWindow);
mainWindow.show();
@@ -1808,7 +1854,7 @@ void tst_QMainWindow::saveRestore()
QTextEdit centralWidget("The rain in Spain falls mainly on the plains");
mainWindow.setCentralWidget(&centralWidget);
- foreach (const AddDockWidget &adw, addList)
+ for (const AddDockWidget &adw : addList)
adw.apply(&mainWindow);
mainWindow.resize(size);
mainWindow.restoreState(stateData);
@@ -1859,11 +1905,11 @@ void tst_QMainWindow::setCursor()
QVERIFY(QTest::qWaitForWindowActive(&mw));
QCOMPARE(cur.shape(), mw.cursor().shape());
- QHoverEvent enterE(QEvent::HoverEnter, QPoint(10,10), QPoint());
+ QHoverEvent enterE(QEvent::HoverEnter, QPoint(10,10), QPoint(), QPoint());
mw.event(&enterE);
QCOMPARE(cur.shape(), mw.cursor().shape());
- QHoverEvent leaveE(QEvent::HoverLeave, QPoint(), QPoint());
+ QHoverEvent leaveE(QEvent::HoverLeave, QPoint(), QPoint(), QPoint());
mw.event(&leaveE);
QCOMPARE(cur.shape(), mw.cursor().shape());
}
@@ -1884,7 +1930,7 @@ void tst_QMainWindow::addToolbarAfterShow()
void tst_QMainWindow::centralWidgetSize()
{
if (qGuiApp->styleHints()->showIsFullScreen())
- QSKIP("The platform is auto maximizing, so the test makes no sense");;
+ QSKIP("The platform is auto maximizing, so the test makes no sense");
QMainWindow mainWindow;
mainWindow.menuBar()->addMenu("menu");
@@ -2116,10 +2162,11 @@ void tst_QMainWindow::resizeDocks()
mw.setDockNestingEnabled(true);
mw.resize(1800, 600);
- foreach (const AddDockWidget &i, addList)
+ for (const AddDockWidget &i : std::as_const(addList))
i.apply(&mw);
- foreach (QDockWidget *dw, mw.findChildren<QDockWidget *>())
+ const auto dockWidgets = mw.findChildren<QDockWidget *>();
+ for (QDockWidget *dw : dockWidgets)
dw->setStyleSheet( "* { background-color: " + dw->objectName() +" }");
mw.setCentralWidget(new QTextEdit);
@@ -2128,11 +2175,11 @@ void tst_QMainWindow::resizeDocks()
QVERIFY(QTest::qWaitForWindowExposed(&mw));
QFETCH(Qt::Orientation, orientation);
- QFETCH(QStringList, docks);
+ QFETCH(const QStringList, docks);
QFETCH(QList<int>, sizes);
QList<QDockWidget *> list;
- foreach (const QString &name, docks) {
+ for (const QString &name : docks) {
QDockWidget *d = mw.findChild<QDockWidget *>(name);
QVERIFY(d);
list << d;
@@ -2144,14 +2191,14 @@ void tst_QMainWindow::resizeDocks()
int totalFromList = 0;
int actualTotal = 0;
- for (int i = 0; i < docks.count(); ++i) {
+ for (int i = 0; i < docks.size(); ++i) {
totalFromList += sizes[i];
QSize s = list[i]->size();
actualTotal += (orientation == Qt::Horizontal) ? s.width() : s.height();
// qDebug() << list[i] << list[i]->size() << sizes[i];
}
- for (int i = 0; i < docks.count(); ++i) {
+ for (int i = 0; i < docks.size(); ++i) {
QSize s = list[i]->size();
int value = (orientation == Qt::Horizontal) ? s.width() : s.height();
QCOMPARE(value, qRound(sizes[i]*actualTotal/double(totalFromList)));
diff --git a/tests/auto/widgets/widgets/qmdiarea/BLACKLIST b/tests/auto/widgets/widgets/qmdiarea/BLACKLIST
index 3091b73269..c3234bf56c 100644
--- a/tests/auto/widgets/widgets/qmdiarea/BLACKLIST
+++ b/tests/auto/widgets/widgets/qmdiarea/BLACKLIST
@@ -1,15 +1,7 @@
[tileSubWindows]
-ubuntu-16.04
-rhel-7.6
centos
opensuse-leap
macos
-ubuntu-18.04
-ubuntu-20.04
-macos
-rhel-7.4
-macos
-opensuse-42.3
[resizeTimer]
macos
diff --git a/tests/auto/widgets/widgets/qmdiarea/CMakeLists.txt b/tests/auto/widgets/widgets/qmdiarea/CMakeLists.txt
index 9586d69352..5f61dc8664 100644
--- a/tests/auto/widgets/widgets/qmdiarea/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qmdiarea/CMakeLists.txt
@@ -1,32 +1,38 @@
-# Generated from qmdiarea.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmdiarea Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmdiarea LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmdiarea
SOURCES
tst_qmdiarea.cpp
DEFINES
QT_NO_CAST_FROM_ASCII
QT_NO_CAST_TO_ASCII
- INCLUDE_DIRECTORIES
- .
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
## Scopes:
#####################################################################
qt_internal_extend_target(tst_qmdiarea CONDITION TARGET Qt::OpenGL
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::OpenGL
)
qt_internal_extend_target(tst_qmdiarea CONDITION APPLE
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWSecurity}
)
diff --git a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp
index 55ac17ac70..0f652f2900 100644
--- a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp
+++ b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.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 <QTest>
@@ -49,6 +24,8 @@
#endif
#include <QStyleHints>
+#include <QtWidgets/private/qapplication_p.h>
+
static const Qt::WindowFlags DefaultWindowFlags
= Qt::SubWindow | Qt::WindowSystemMenuHint
| Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint;
@@ -163,7 +140,7 @@ static bool verifyArrangement(QMdiArea *mdiArea, Arrangement arrangement, const
case Tiled:
{
// Calculate the number of rows and columns.
- const int n = subWindows.count();
+ const int n = subWindows.size();
const int numColumns = qMax(qCeil(qSqrt(qreal(n))), 1);
const int numRows = qMax((n % numColumns) ? (n / numColumns + 1) : (n / numColumns), 1);
@@ -199,7 +176,7 @@ static bool verifyArrangement(QMdiArea *mdiArea, Arrangement arrangement, const
// QWidget::childAt with the position of the first one and subsequently adding
// dx and dy.
QPoint subWindowPos(20, 5);
- foreach (int expectedIndex, expectedIndices) {
+ for (int expectedIndex : expectedIndices) {
QMdiSubWindow *expected = subWindows.at(expectedIndex);
expected->raise();
if (mdiArea->viewport()->childAt(subWindowPos) != expected)
@@ -210,7 +187,7 @@ static bool verifyArrangement(QMdiArea *mdiArea, Arrangement arrangement, const
}
// Restore stacking order.
- foreach (QMdiSubWindow *subWindow, activationOrderList) {
+ for (QMdiSubWindow *subWindow : activationOrderList) {
mdiArea->setActiveSubWindow(subWindow);
qApp->processEvents();
}
@@ -283,6 +260,7 @@ private slots:
void task_236750();
void qtbug92240_title_data();
void qtbug92240_title();
+ void tabbedview_singleSubWindow();
void tabbedview_activefirst();
void tabbedview_activesecond();
void tabbedview_activethird();
@@ -329,7 +307,7 @@ void tst_QMdiArea::subWindowActivated()
QSignalSpy spy(workspace, SIGNAL(subWindowActivated(QMdiSubWindow*)));
connect( workspace, SIGNAL(subWindowActivated(QMdiSubWindow*)), this, SLOT(activeChanged(QMdiSubWindow*)));
mw.show();
- qApp->setActiveWindow(&mw);
+ QApplicationPrivate::setActiveWindow(&mw);
QFETCH( int, count );
int i;
@@ -342,12 +320,12 @@ void tst_QMdiArea::subWindowActivated()
widget->show();
qApp->processEvents();
QVERIFY( activeWindow == workspace->activeSubWindow() );
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
}
QList<QMdiSubWindow *> windows = workspace->subWindowList();
- QCOMPARE( (int)windows.count(), count );
+ QCOMPARE( (int)windows.size(), count );
for ( i = 0; i < count; ++i ) {
QMdiSubWindow *window = windows.at(i);
@@ -371,13 +349,13 @@ void tst_QMdiArea::subWindowActivated()
workspace->activeSubWindow()->close();
qApp->processEvents();
QCOMPARE(activeWindow, workspace->activeSubWindow());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
}
QVERIFY(!activeWindow);
QVERIFY(!workspace->activeSubWindow());
- QCOMPARE(workspace->subWindowList().count(), 0);
+ QCOMPARE(workspace->subWindowList().size(), 0);
{
workspace->hide();
@@ -385,14 +363,14 @@ void tst_QMdiArea::subWindowActivated()
widget->setAttribute(Qt::WA_DeleteOnClose);
QMdiSubWindow *window = workspace->addSubWindow(widget);
widget->show();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
workspace->show();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
QVERIFY( activeWindow == window );
window->close();
qApp->processEvents();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
QVERIFY( activeWindow == 0 );
}
@@ -404,15 +382,15 @@ void tst_QMdiArea::subWindowActivated()
QMdiSubWindow *window = workspace->addSubWindow(widget);
widget->showMaximized();
qApp->sendPostedEvents();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
workspace->show();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
QVERIFY( activeWindow == window );
window->close();
qApp->processEvents();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
QVERIFY( activeWindow == 0 );
}
@@ -422,13 +400,13 @@ void tst_QMdiArea::subWindowActivated()
widget->setAttribute(Qt::WA_DeleteOnClose);
QMdiSubWindow *window = workspace->addSubWindow(widget);
widget->showMinimized();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
QVERIFY( activeWindow == window );
QCOMPARE(workspace->activeSubWindow(), window);
window->close();
qApp->processEvents();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
QVERIFY(!workspace->activeSubWindow());
QVERIFY(!activeWindow);
@@ -456,12 +434,12 @@ void tst_QMdiArea::subWindowActivated2()
QSignalSpy spy(&mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)));
for (int i = 0; i < 5; ++i)
mdiArea.addSubWindow(new QWidget);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
mdiArea.show();
mdiArea.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&mdiArea));
- QTRY_COMPARE(spy.count(), 5);
+ QTRY_COMPARE(spy.size(), 5);
QCOMPARE(mdiArea.activeSubWindow(), mdiArea.subWindowList().back());
spy.clear();
@@ -470,13 +448,13 @@ void tst_QMdiArea::subWindowActivated2()
QMdiSubWindow *staysOnTopWindow = mdiArea.subWindowList().at(3);
staysOnTopWindow->setWindowFlags(Qt::WindowStaysOnTopHint);
mdiArea.setActiveSubWindow(staysOnTopWindow);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(mdiArea.activeSubWindow(), staysOnTopWindow);
spy.clear();
QMdiSubWindow *activeSubWindow = mdiArea.subWindowList().at(2);
mdiArea.setActiveSubWindow(activeSubWindow);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(mdiArea.activeSubWindow(), activeSubWindow);
spy.clear();
@@ -484,7 +462,7 @@ void tst_QMdiArea::subWindowActivated2()
// is unchanged after hide/show.
mdiArea.hide();
QTest::qWait(100);
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QVERIFY(!mdiArea.activeSubWindow());
QCOMPARE(mdiArea.currentSubWindow(), activeSubWindow);
spy.clear();
@@ -512,7 +490,7 @@ void tst_QMdiArea::subWindowActivated2()
#endif
if (!QGuiApplication::platformName().compare(QLatin1String("xcb"), Qt::CaseInsensitive))
QSKIP("QTBUG-25298: Unstable on some X11 window managers");
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QVERIFY(!mdiArea.activeSubWindow());
QCOMPARE(mdiArea.currentSubWindow(), activeSubWindow);
spy.clear();
@@ -522,7 +500,7 @@ void tst_QMdiArea::subWindowActivated2()
mdiArea.showNormal();
mdiArea.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&mdiArea));
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QCOMPARE(mdiArea.activeSubWindow(), activeSubWindow);
spy.clear();
}
@@ -537,7 +515,7 @@ void tst_QMdiArea::subWindowActivatedWithMinimize()
QSignalSpy spy(workspace, SIGNAL(subWindowActivated(QMdiSubWindow*)));
connect( workspace, SIGNAL(subWindowActivated(QMdiSubWindow*)), this, SLOT(activeChanged(QMdiSubWindow*)) );
mw.show();
- qApp->setActiveWindow(&mw);
+ QApplicationPrivate::setActiveWindow(&mw);
QWidget *widget = new QWidget(workspace);
widget->setAttribute(Qt::WA_DeleteOnClose);
QMdiSubWindow *window1 = workspace->addSubWindow(widget);
@@ -559,7 +537,7 @@ void tst_QMdiArea::subWindowActivatedWithMinimize()
QVERIFY(!workspace->activeSubWindow());
QVERIFY(!activeWindow);
- QVERIFY( workspace->subWindowList().count() == 0 );
+ QVERIFY( workspace->subWindowList().size() == 0 );
}
void tst_QMdiArea::showWindows()
@@ -682,7 +660,7 @@ void tst_QMdiArea::changeWindowTitle()
#endif
mw->show();
- qApp->setActiveWindow(mw);
+ QApplicationPrivate::setActiveWindow(mw);
#ifdef USE_SHOW
mw->showFullScreen();
@@ -838,14 +816,14 @@ void tst_QMdiArea::fixedSize()
}
QList<QMdiSubWindow *> windows = ws->subWindowList();
- for (i = 0; i < (int)windows.count(); ++i) {
+ for (i = 0; i < (int)windows.size(); ++i) {
QMdiSubWindow *child = windows.at(i);
QCOMPARE(child->size(), fixed);
}
ws->cascadeSubWindows();
ws->resize(800, 800);
- for (i = 0; i < (int)windows.count(); ++i) {
+ for (i = 0; i < (int)windows.size(); ++i) {
QMdiSubWindow *child = windows.at(i);
QCOMPARE(child->size(), fixed);
}
@@ -853,13 +831,13 @@ void tst_QMdiArea::fixedSize()
ws->tileSubWindows();
ws->resize(800, 800);
- for (i = 0; i < (int)windows.count(); ++i) {
+ for (i = 0; i < (int)windows.size(); ++i) {
QMdiSubWindow *child = windows.at(i);
QCOMPARE(child->size(), fixed);
}
ws->resize(500, 500);
- for (i = 0; i < (int)windows.count(); ++i) {
+ for (i = 0; i < (int)windows.size(); ++i) {
QMdiSubWindow *child = windows.at(i);
delete child;
}
@@ -927,7 +905,7 @@ void tst_QMdiArea::setActiveSubWindow()
QSignalSpy spy(&workspace, SIGNAL(subWindowActivated(QMdiSubWindow*)));
connect(&workspace, SIGNAL(subWindowActivated(QMdiSubWindow*)), this, SLOT(activeChanged(QMdiSubWindow*)));
- qApp->setActiveWindow(&workspace);
+ QApplicationPrivate::setActiveWindow(&workspace);
// Activate hidden windows
const int windowCount = 10;
@@ -938,7 +916,7 @@ void tst_QMdiArea::setActiveSubWindow()
QVERIFY(windows[i]->isHidden());
workspace.setActiveSubWindow(windows[i]);
}
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
QVERIFY(!activeWindow);
spy.clear();
@@ -948,7 +926,7 @@ void tst_QMdiArea::setActiveSubWindow()
QVERIFY(!windows[i]->isHidden());
workspace.setActiveSubWindow(windows[i]);
qApp->processEvents();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(activeWindow, windows[i]);
spy.clear();
}
@@ -956,7 +934,7 @@ void tst_QMdiArea::setActiveSubWindow()
// Deactivate active window
QCOMPARE(workspace.activeSubWindow(), windows[windowCount - 1]);
workspace.setActiveSubWindow(0);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QVERIFY(!activeWindow);
QVERIFY(!workspace.activeSubWindow());
@@ -986,7 +964,7 @@ void tst_QMdiArea::activeSubWindow()
mainWindow.addDockWidget(Qt::LeftDockWidgetArea, dockWidget);
mainWindow.show();
- qApp->setActiveWindow(&mainWindow);
+ QApplicationPrivate::setActiveWindow(&mainWindow);
QVERIFY(QTest::qWaitForWindowActive(&mainWindow));
QCOMPARE(mdiArea->activeSubWindow(), subWindow);
QCOMPARE(qApp->focusWidget(), (QWidget *)subWindowLineEdit);
@@ -1009,15 +987,15 @@ void tst_QMdiArea::activeSubWindow()
dummyTopLevel.show();
QVERIFY(QTest::qWaitForWindowExposed(&dummyTopLevel));
- qApp->setActiveWindow(&dummyTopLevel);
+ QApplicationPrivate::setActiveWindow(&dummyTopLevel);
QCOMPARE(mdiArea->activeSubWindow(), subWindow);
- qApp->setActiveWindow(&mainWindow);
+ QApplicationPrivate::setActiveWindow(&mainWindow);
QCOMPARE(mdiArea->activeSubWindow(), subWindow);
//task 202657
dockWidgetLineEdit->setFocus();
- qApp->setActiveWindow(&mainWindow);
+ QApplicationPrivate::setActiveWindow(&mainWindow);
QVERIFY(dockWidgetLineEdit->hasFocus());
}
@@ -1030,7 +1008,7 @@ void tst_QMdiArea::currentSubWindow()
for (int i = 0; i < 5; ++i)
mdiArea.addSubWindow(new QLineEdit)->show();
- qApp->setActiveWindow(&mdiArea);
+ QApplicationPrivate::setActiveWindow(&mdiArea);
QCOMPARE(qApp->activeWindow(), (QWidget *)&mdiArea);
// Check that the last added window is the active and the current.
@@ -1045,7 +1023,7 @@ void tst_QMdiArea::currentSubWindow()
// Move focus to another top-level and check that we still
// have an active window.
- qApp->setActiveWindow(&dummyTopLevel);
+ QApplicationPrivate::setActiveWindow(&dummyTopLevel);
QCOMPARE(qApp->activeWindow(), (QWidget *)&dummyTopLevel);
QVERIFY(mdiArea.activeSubWindow());
@@ -1058,7 +1036,7 @@ void tst_QMdiArea::currentSubWindow()
QCOMPARE(mdiArea.currentSubWindow(), mdiArea.subWindowList().front());
// Activate mdi area and check that active == current.
- qApp->setActiveWindow(&mdiArea);
+ QApplicationPrivate::setActiveWindow(&mdiArea);
active = mdiArea.activeSubWindow();
QVERIFY(active);
QCOMPARE(mdiArea.activeSubWindow(), mdiArea.subWindowList().front());
@@ -1067,11 +1045,11 @@ void tst_QMdiArea::currentSubWindow()
QCOMPARE(mdiArea.activeSubWindow(), active);
QCOMPARE(mdiArea.currentSubWindow(), active);
- qApp->setActiveWindow(&dummyTopLevel);
+ QApplicationPrivate::setActiveWindow(&dummyTopLevel);
QVERIFY(mdiArea.activeSubWindow());
QCOMPARE(mdiArea.currentSubWindow(), active);
- qApp->setActiveWindow(&mdiArea);
+ QApplicationPrivate::setActiveWindow(&mdiArea);
active->show();
QCOMPARE(mdiArea.activeSubWindow(), active);
@@ -1101,11 +1079,11 @@ void tst_QMdiArea::addAndRemoveWindows()
QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
{ // addSubWindow with large widget
- QCOMPARE(workspace.subWindowList().count(), 0);
+ QCOMPARE(workspace.subWindowList().size(), 0);
QWidget *window = workspace.addSubWindow(new LargeWidget);
QVERIFY(window);
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), 1);
+ QCOMPARE(workspace.subWindowList().size(), 1);
QCOMPARE(window->windowFlags(), DefaultWindowFlags);
QCOMPARE(window->size(), workspace.viewport()->size());
}
@@ -1116,7 +1094,7 @@ void tst_QMdiArea::addAndRemoveWindows()
workspace.addSubWindow(window);
QVERIFY(window);
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), 2);
+ QCOMPARE(workspace.subWindowList().size(), 2);
QCOMPARE(window->windowFlags(), DefaultWindowFlags);
QCOMPARE(window->size(), window->minimumSize());
}
@@ -1128,7 +1106,7 @@ void tst_QMdiArea::addAndRemoveWindows()
workspace.addSubWindow(window);
QVERIFY(window);
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), 3);
+ QCOMPARE(workspace.subWindowList().size(), 3);
QCOMPARE(window->windowFlags(), DefaultWindowFlags);
QCOMPARE(window->size(), QSize(1500, 1500));
}
@@ -1137,7 +1115,7 @@ void tst_QMdiArea::addAndRemoveWindows()
QTest::ignoreMessage(QtWarningMsg, "QMdiArea::addSubWindow: null pointer to widget");
QWidget *window = workspace.addSubWindow(0);
QVERIFY(!window);
- QCOMPARE(workspace.subWindowList().count(), 3);
+ QCOMPARE(workspace.subWindowList().size(), 3);
}
{ // addChildWindow
@@ -1146,7 +1124,7 @@ void tst_QMdiArea::addAndRemoveWindows()
qApp->processEvents();
QCOMPARE(window->windowFlags(), DefaultWindowFlags);
window->setWidget(new QWidget);
- QCOMPARE(workspace.subWindowList().count(), 4);
+ QCOMPARE(workspace.subWindowList().size(), 4);
QTest::ignoreMessage(QtWarningMsg, "QMdiArea::addSubWindow: window is already added");
workspace.addSubWindow(window);
}
@@ -1154,15 +1132,16 @@ void tst_QMdiArea::addAndRemoveWindows()
{ // addChildWindow with 0 pointer
QTest::ignoreMessage(QtWarningMsg, "QMdiArea::addSubWindow: null pointer to widget");
workspace.addSubWindow(0);
- QCOMPARE(workspace.subWindowList().count(), 4);
+ QCOMPARE(workspace.subWindowList().size(), 4);
}
// removeSubWindow
- foreach (QWidget *window, workspace.subWindowList()) {
+ const auto subWindows = workspace.subWindowList();
+ for (QWidget *window : subWindows) {
workspace.removeSubWindow(window);
delete window;
}
- QCOMPARE(workspace.subWindowList().count(), 0);
+ QCOMPARE(workspace.subWindowList().size(), 0);
// removeSubWindow with 0 pointer
QTest::ignoreMessage(QtWarningMsg, "QMdiArea::removeSubWindow: null pointer to widget");
@@ -1170,7 +1149,7 @@ void tst_QMdiArea::addAndRemoveWindows()
workspace.addSubWindow(new QPushButton(QLatin1String("Dummy to make workspace non-empty")));
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), 1);
+ QCOMPARE(workspace.subWindowList().size(), 1);
// removeSubWindow with window not inside workspace
QTest::ignoreMessage(QtWarningMsg,"QMdiArea::removeSubWindow: window is not inside workspace");
@@ -1212,20 +1191,20 @@ void tst_QMdiArea::addAndRemoveWindowsWithReparenting()
// 0 because the window list contains widgets and not actual
// windows. Silly, but that's the behavior.
- QCOMPARE(workspace.subWindowList().count(), 0);
+ QCOMPARE(workspace.subWindowList().size(), 0);
window.setWidget(new QWidget);
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), 1);
+ QCOMPARE(workspace.subWindowList().size(), 1);
window.setParent(0); // Will also reset window flags
- QCOMPARE(workspace.subWindowList().count(), 0);
+ QCOMPARE(workspace.subWindowList().size(), 0);
window.setParent(&workspace);
- QCOMPARE(workspace.subWindowList().count(), 1);
+ QCOMPARE(workspace.subWindowList().size(), 1);
QCOMPARE(window.windowFlags(), DefaultWindowFlags);
QTest::ignoreMessage(QtWarningMsg, "QMdiArea::addSubWindow: window is already added");
workspace.addSubWindow(&window);
- QCOMPARE(workspace.subWindowList().count(), 1);
+ QCOMPARE(workspace.subWindowList().size(), 1);
}
class MySubWindow : public QMdiSubWindow
@@ -1276,23 +1255,23 @@ void tst_QMdiArea::closeWindows()
{
QMdiArea workspace;
workspace.show();
- qApp->setActiveWindow(&workspace);
+ QApplicationPrivate::setActiveWindow(&workspace);
// Close widget
QWidget *widget = new QWidget;
QMdiSubWindow *subWindow = workspace.addSubWindow(widget);
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), 1);
+ QCOMPARE(workspace.subWindowList().size(), 1);
subWindow->close();
- QCOMPARE(workspace.subWindowList().count(), 0);
+ QCOMPARE(workspace.subWindowList().size(), 0);
// Close window
QWidget *window = workspace.addSubWindow(new QWidget);
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), 1);
+ QCOMPARE(workspace.subWindowList().size(), 1);
window->close();
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), 0);
+ QCOMPARE(workspace.subWindowList().size(), 0);
const int windowCount = 10;
@@ -1300,7 +1279,7 @@ void tst_QMdiArea::closeWindows()
for (int i = 0; i < windowCount; ++i)
workspace.addSubWindow(new QWidget)->show();
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), windowCount);
+ QCOMPARE(workspace.subWindowList().size(), windowCount);
int activeSubWindowCount = 0;
while (workspace.activeSubWindow()) {
workspace.activeSubWindow()->close();
@@ -1308,19 +1287,19 @@ void tst_QMdiArea::closeWindows()
++activeSubWindowCount;
}
QCOMPARE(activeSubWindowCount, windowCount);
- QCOMPARE(workspace.subWindowList().count(), 0);
+ QCOMPARE(workspace.subWindowList().size(), 0);
// Close all windows
for (int i = 0; i < windowCount; ++i)
workspace.addSubWindow(new QWidget)->show();
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), windowCount);
+ QCOMPARE(workspace.subWindowList().size(), windowCount);
QSignalSpy spy(&workspace, SIGNAL(subWindowActivated(QMdiSubWindow*)));
connect(&workspace, SIGNAL(subWindowActivated(QMdiSubWindow*)), this, SLOT(activeChanged(QMdiSubWindow*)));
workspace.closeAllSubWindows();
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), 0);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(workspace.subWindowList().size(), 0);
+ QCOMPARE(spy.size(), 1);
QVERIFY(!activeWindow);
}
@@ -1328,7 +1307,7 @@ void tst_QMdiArea::activateNextAndPreviousWindow()
{
QMdiArea workspace;
workspace.show();
- qApp->setActiveWindow(&workspace);
+ QApplicationPrivate::setActiveWindow(&workspace);
const int windowCount = 10;
QMdiSubWindow *windows[windowCount];
@@ -1346,7 +1325,7 @@ void tst_QMdiArea::activateNextAndPreviousWindow()
workspace.activateNextSubWindow();
qApp->processEvents();
QCOMPARE(workspace.activeSubWindow(), windows[i]);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
}
QVERIFY(activeWindow);
@@ -1358,7 +1337,7 @@ void tst_QMdiArea::activateNextAndPreviousWindow()
workspace.activatePreviousSubWindow();
qApp->processEvents();
QCOMPARE(workspace.activeSubWindow(), windows[i]);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
if (i % 2 == 0)
windows[i]->hide(); // 10, 8, 6, 4, 2, 0
@@ -1370,7 +1349,7 @@ void tst_QMdiArea::activateNextAndPreviousWindow()
// activateNextSubWindow with every 2nd window hidden
for (int i = 0; i < windowCount / 2; ++i) {
workspace.activateNextSubWindow(); // 1, 3, 5, 7, 9
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
}
QCOMPARE(workspace.activeSubWindow(), windows[windowCount - 1]);
@@ -1378,7 +1357,7 @@ void tst_QMdiArea::activateNextAndPreviousWindow()
// activatePreviousSubWindow with every 2nd window hidden
for (int i = 0; i < windowCount / 2; ++i) {
workspace.activatePreviousSubWindow(); // 7, 5, 3, 1, 9
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
}
QCOMPARE(workspace.activeSubWindow(), windows[windowCount - 1]);
@@ -1412,7 +1391,7 @@ void tst_QMdiArea::subWindowList()
QMdiArea workspace;
workspace.show();
- qApp->setActiveWindow(&workspace);
+ QApplicationPrivate::setActiveWindow(&workspace);
QVERIFY(QTest::qWaitForWindowActive(&workspace));
QList<QMdiSubWindow *> activationOrder;
@@ -1425,8 +1404,8 @@ void tst_QMdiArea::subWindowList()
{
QList<QMdiSubWindow *> widgets = workspace.subWindowList(windowOrder);
- QCOMPARE(widgets.count(), windowCount);
- for (int i = 0; i < widgets.count(); ++i)
+ QCOMPARE(widgets.size(), windowCount);
+ for (int i = 0; i < widgets.size(); ++i)
QCOMPARE(widgets.at(i), windows[i]);
}
@@ -1445,9 +1424,9 @@ void tst_QMdiArea::subWindowList()
}
if (windowOrder == QMdiArea::StackingOrder) {
- QCOMPARE(subWindows.at(subWindows.count() - 1), windows[staysOnTop1]);
- QCOMPARE(subWindows.at(subWindows.count() - 2), windows[activeSubWindow]);
- QCOMPARE(subWindows.count(), windowCount);
+ QCOMPARE(subWindows.at(subWindows.size() - 1), windows[staysOnTop1]);
+ QCOMPARE(subWindows.at(subWindows.size() - 2), windows[activeSubWindow]);
+ QCOMPARE(subWindows.size(), windowCount);
} else { // ActivationHistoryOrder
QCOMPARE(subWindows, activationOrder);
}
@@ -1462,11 +1441,11 @@ void tst_QMdiArea::subWindowList()
activationOrder.move(activationOrder.indexOf(windows[activeSubWindow]), windowCount - 1);
QList<QMdiSubWindow *> widgets = workspace.subWindowList(windowOrder);
- QCOMPARE(widgets.count(), windowCount);
+ QCOMPARE(widgets.size(), windowCount);
if (windowOrder == QMdiArea::StackingOrder) {
- QCOMPARE(widgets.at(widgets.count() - 1), windows[staysOnTop2]);
- QCOMPARE(widgets.at(widgets.count() - 2), windows[staysOnTop1]);
- QCOMPARE(widgets.at(widgets.count() - 3), windows[activeSubWindow]);
+ QCOMPARE(widgets.at(widgets.size() - 1), windows[staysOnTop2]);
+ QCOMPARE(widgets.at(widgets.size() - 2), windows[staysOnTop1]);
+ QCOMPARE(widgets.at(widgets.size() - 3), windows[activeSubWindow]);
} else { // ActivationHistory
QCOMPARE(widgets, activationOrder);
}
@@ -1476,8 +1455,8 @@ void tst_QMdiArea::subWindowList()
widgets = workspace.subWindowList(windowOrder);
if (windowOrder == QMdiArea::StackingOrder) {
- QCOMPARE(widgets.at(widgets.count() - 1), windows[activeSubWindow]);
- QCOMPARE(widgets.at(widgets.count() - 2), windows[staysOnTop1]);
+ QCOMPARE(widgets.at(widgets.size() - 1), windows[activeSubWindow]);
+ QCOMPARE(widgets.at(widgets.size() - 2), windows[staysOnTop1]);
QCOMPARE(widgets.at(0), windows[staysOnTop2]);
} else { // ActivationHistoryOrder
QCOMPARE(widgets, activationOrder);
@@ -1488,9 +1467,9 @@ void tst_QMdiArea::subWindowList()
widgets = workspace.subWindowList(windowOrder);
if (windowOrder == QMdiArea::StackingOrder) {
- QCOMPARE(widgets.at(widgets.count() - 1), windows[staysOnTop2]);
- QCOMPARE(widgets.at(widgets.count() - 2), windows[staysOnTop1]);
- QCOMPARE(widgets.at(widgets.count() - 3), windows[activeSubWindow]);
+ QCOMPARE(widgets.at(widgets.size() - 1), windows[staysOnTop2]);
+ QCOMPARE(widgets.at(widgets.size() - 2), windows[staysOnTop1]);
+ QCOMPARE(widgets.at(widgets.size() - 3), windows[activeSubWindow]);
} else { // ActivationHistoryOrder
QCOMPARE(widgets, activationOrder);
}
@@ -1500,9 +1479,9 @@ void tst_QMdiArea::subWindowList()
widgets = workspace.subWindowList(windowOrder);
if (windowOrder == QMdiArea::StackingOrder) {
- QCOMPARE(widgets.at(widgets.count() - 1), windows[staysOnTop1]);
- QCOMPARE(widgets.at(widgets.count() - 2), windows[staysOnTop2]);
- QCOMPARE(widgets.at(widgets.count() - 3), windows[activeSubWindow]);
+ QCOMPARE(widgets.at(widgets.size() - 1), windows[staysOnTop1]);
+ QCOMPARE(widgets.at(widgets.size() - 2), windows[staysOnTop2]);
+ QCOMPARE(widgets.at(widgets.size() - 3), windows[activeSubWindow]);
} else { // ActivationHistoryOrder
QCOMPARE(widgets, activationOrder);
}
@@ -1543,14 +1522,14 @@ void tst_QMdiArea::setViewport()
qApp->processEvents();
QList<QMdiSubWindow *> windowsBeforeViewportChange = workspace.subWindowList();
- QCOMPARE(windowsBeforeViewportChange.count(), windowCount);
+ QCOMPARE(windowsBeforeViewportChange.size(), windowCount);
workspace.setViewport(new QWidget);
qApp->processEvents();
QVERIFY(workspace.viewport() != firstViewport);
QList<QMdiSubWindow *> windowsAfterViewportChange = workspace.subWindowList();
- QCOMPARE(windowsAfterViewportChange.count(), windowCount);
+ QCOMPARE(windowsAfterViewportChange.size(), windowCount);
QCOMPARE(windowsAfterViewportChange, windowsBeforeViewportChange);
// for (int i = 0; i < windowCount; ++i) {
@@ -1566,7 +1545,7 @@ void tst_QMdiArea::setViewport()
delete workspace.viewport();
qApp->processEvents();
- QCOMPARE(workspace.subWindowList().count(), 0);
+ QCOMPARE(workspace.subWindowList().size(), 0);
QVERIFY(!workspace.activeSubWindow());
}
@@ -1708,7 +1687,8 @@ void tst_QMdiArea::tileSubWindows()
QTRY_COMPARE(workspace.size(), QSize(350, 150));
const QSize minSize(600, 130);
- foreach (QMdiSubWindow *subWindow, workspace.subWindowList())
+ const auto subWindows = workspace.subWindowList();
+ for (QMdiSubWindow *subWindow : subWindows)
subWindow->setMinimumSize(minSize);
QCOMPARE(workspace.size(), QSize(350, 150));
@@ -1806,7 +1786,7 @@ void tst_QMdiArea::cascadeAndTileSubWindows()
#endif
QCOMPARE(windows.at(2)->geometry().top() - windows.at(1)->geometry().top(), dy);
- for (int i = 0; i < windows.count(); ++i) {
+ for (int i = 0; i < windows.size(); ++i) {
QMdiSubWindow *window = windows.at(i);
if (i % 3 == 0) {
QVERIFY(window->isMinimized());
@@ -1866,7 +1846,7 @@ void tst_QMdiArea::resizeMaximizedChildWindows()
int newSize = startSize + increment * windowCount;
QCOMPARE(workspaceSize, QSize(newSize, newSize));
- foreach (QWidget *window, windows)
+ for (QWidget *window : std::as_const(windows))
QCOMPARE(window->rect(), workspace.contentsRect());
}
@@ -1891,7 +1871,7 @@ void tst_QMdiArea::focusWidgetAfterAddSubWindow()
mdiArea.show();
view->show();
- qApp->setActiveWindow(&mdiArea);
+ QApplicationPrivate::setActiveWindow(&mdiArea);
QCOMPARE(qApp->focusWidget(), static_cast<QWidget *>(lineEdit2));
}
@@ -1900,7 +1880,7 @@ void tst_QMdiArea::dontMaximizeSubWindowOnActivation()
QMdiArea mdiArea;
mdiArea.show();
QVERIFY(QTest::qWaitForWindowExposed(&mdiArea));
- qApp->setActiveWindow(&mdiArea);
+ QApplicationPrivate::setActiveWindow(&mdiArea);
// Add one maximized window.
mdiArea.addSubWindow(new QWidget)->showMaximized();
@@ -1911,16 +1891,13 @@ void tst_QMdiArea::dontMaximizeSubWindowOnActivation()
for (int i = 0; i < 5; ++i) {
QMdiSubWindow *window = mdiArea.addSubWindow(new QWidget);
window->show();
-#if defined Q_OS_QNX
- QEXPECT_FAIL("", "QTBUG-38231", Abort);
-#endif
QVERIFY(window->isMaximized());
qApp->processEvents();
}
// Verify that activated windows still are maximized on activation.
- QList<QMdiSubWindow *> subWindows = mdiArea.subWindowList();
- for (int i = 0; i < subWindows.count(); ++i) {
+ const QList<QMdiSubWindow *> subWindows = mdiArea.subWindowList();
+ for (int i = 0; i < subWindows.size(); ++i) {
mdiArea.activateNextSubWindow();
QMdiSubWindow *window = subWindows.at(i);
QCOMPARE(mdiArea.activeSubWindow(), window);
@@ -1931,7 +1908,7 @@ void tst_QMdiArea::dontMaximizeSubWindowOnActivation()
// Restore active window and verify that other windows aren't
// maximized on activation.
mdiArea.activeSubWindow()->showNormal();
- for (int i = 0; i < subWindows.count(); ++i) {
+ for (int i = 0; i < subWindows.size(); ++i) {
mdiArea.activateNextSubWindow();
QMdiSubWindow *window = subWindows.at(i);
QCOMPARE(mdiArea.activeSubWindow(), window);
@@ -1945,7 +1922,7 @@ void tst_QMdiArea::dontMaximizeSubWindowOnActivation()
int indexOfMaximized = subWindows.indexOf(mdiArea.activeSubWindow());
// Verify that windows are not maximized on activation.
- for (int i = 0; i < subWindows.count(); ++i) {
+ for (int i = 0; i < subWindows.size(); ++i) {
mdiArea.activateNextSubWindow();
QMdiSubWindow *window = subWindows.at(i);
QCOMPARE(mdiArea.activeSubWindow(), window);
@@ -1956,7 +1933,7 @@ void tst_QMdiArea::dontMaximizeSubWindowOnActivation()
QVERIFY(mdiArea.activeSubWindow()->isMaximized());
// Minimize all windows.
- foreach (QMdiSubWindow *window, subWindows) {
+ for (QMdiSubWindow *window : subWindows) {
window->showMinimized();
QVERIFY(window->isMinimized());
qApp->processEvents();
@@ -1967,7 +1944,7 @@ void tst_QMdiArea::dontMaximizeSubWindowOnActivation()
mdiArea.activeSubWindow()->showMaximized();
// Verify that minimized windows are maximized on activation.
- for (int i = 0; i < subWindows.count(); ++i) {
+ for (int i = 0; i < subWindows.size(); ++i) {
mdiArea.activateNextSubWindow();
QMdiSubWindow *window = subWindows.at(i);
QCOMPARE(mdiArea.activeSubWindow(), window);
@@ -1977,7 +1954,7 @@ void tst_QMdiArea::dontMaximizeSubWindowOnActivation()
// Verify that activated windows are maximized after closing
// the active window
- for (int i = 0; i < subWindows.count(); ++i) {
+ for (int i = 0; i < subWindows.size(); ++i) {
QVERIFY(mdiArea.activeSubWindow());
QVERIFY(mdiArea.activeSubWindow()->isMaximized());
mdiArea.activeSubWindow()->close();
@@ -2229,7 +2206,7 @@ void tst_QMdiArea::setActivationOrder()
mdiArea.show();
QVERIFY(QTest::qWaitForWindowExposed(&mdiArea));
- for (int i = 0; i < subWindows.count(); ++i) {
+ for (int i = 0; i < subWindows.size(); ++i) {
mdiArea.activateNextSubWindow();
QCOMPARE(mdiArea.activeSubWindow(), subWindows.at(i));
qApp->processEvents();
@@ -2288,12 +2265,12 @@ void tst_QMdiArea::tabBetweenSubWindows()
mdiArea.show();
QVERIFY(QTest::qWaitForWindowExposed(&mdiArea));
- qApp->setActiveWindow(&mdiArea);
+ QApplicationPrivate::setActiveWindow(&mdiArea);
QWidget *focusWidget = subWindows.back()->widget();
QCOMPARE(qApp->focusWidget(), focusWidget);
QSignalSpy spy(&mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow*)));
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// Walk through the entire list of sub windows.
#ifdef Q_OS_MAC
@@ -2301,7 +2278,7 @@ void tst_QMdiArea::tabBetweenSubWindows()
#endif
QVERIFY(tabBetweenSubWindowsIn(&mdiArea));
QCOMPARE(mdiArea.activeSubWindow(), subWindows.back());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
mdiArea.setActiveSubWindow(subWindows.front());
QCOMPARE(mdiArea.activeSubWindow(), subWindows.front());
@@ -2310,12 +2287,12 @@ void tst_QMdiArea::tabBetweenSubWindows()
// Walk through the entire list of sub windows in the opposite direction (Ctrl-Shift-Tab).
QVERIFY(tabBetweenSubWindowsIn(&mdiArea, -1, true));
QCOMPARE(mdiArea.activeSubWindow(), subWindows.front());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// Ctrl-Tab-Tab-Tab
QVERIFY(tabBetweenSubWindowsIn(&mdiArea, 3));
QCOMPARE(mdiArea.activeSubWindow(), subWindows.at(3));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
mdiArea.setActiveSubWindow(subWindows.at(1));
QCOMPARE(mdiArea.activeSubWindow(), subWindows.at(1));
@@ -2324,7 +2301,7 @@ void tst_QMdiArea::tabBetweenSubWindows()
// Quick switch (Ctrl-Tab once) -> switch back to the previously active sub-window.
QVERIFY(tabBetweenSubWindowsIn(&mdiArea, 1));
QCOMPARE(mdiArea.activeSubWindow(), subWindows.at(3));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
void tst_QMdiArea::setViewMode()
@@ -2343,7 +2320,7 @@ void tst_QMdiArea::setViewMode()
QVERIFY(QTest::qWaitForWindowExposed(&mdiArea));
QMdiSubWindow *activeSubWindow = mdiArea.activeSubWindow();
- QList<QMdiSubWindow *> subWindows = mdiArea.subWindowList();
+ const QList<QMdiSubWindow *> subWindows = mdiArea.subWindowList();
// Default.
QVERIFY(!activeSubWindow->isMaximized());
@@ -2358,7 +2335,7 @@ void tst_QMdiArea::setViewMode()
QVERIFY(tabBar);
QVERIFY(tabBar->isVisible());
- QCOMPARE(tabBar->count(), subWindows.count());
+ QCOMPARE(tabBar->count(), subWindows.size());
QVERIFY(activeSubWindow->isMaximized());
QCOMPARE(tabBar->currentIndex(), subWindows.indexOf(activeSubWindow));
@@ -2412,13 +2389,12 @@ void tst_QMdiArea::setViewMode()
QVERIFY(tabBar->isTabEnabled(tabIndex));
// Remove sub-windows and make sure the tab is removed.
- foreach (QMdiSubWindow *subWindow, subWindows) {
+ for (QMdiSubWindow *subWindow : subWindows) {
if (subWindow != activeSubWindow) {
mdiArea.removeSubWindow(subWindow);
delete subWindow;
}
}
- subWindows.clear();
QCOMPARE(tabBar->count(), 1);
// Go back to default (QMdiArea::SubWindowView).
@@ -2619,8 +2595,11 @@ void tst_QMdiArea::nativeSubWindows()
// No native widgets.
QVERIFY(!mdiArea.viewport()->internalWinId());
- foreach (QMdiSubWindow *subWindow, mdiArea.subWindowList())
- QVERIFY(!subWindow->internalWinId());
+ {
+ const auto subWindows = mdiArea.subWindowList();
+ for (QMdiSubWindow *subWindow : subWindows)
+ QVERIFY(!subWindow->internalWinId());
+ }
QWidget *nativeWidget = new QWidget;
QVERIFY(nativeWidget->winId()); // enforce native window.
@@ -2629,8 +2608,11 @@ void tst_QMdiArea::nativeSubWindows()
// The viewport and all the sub-windows must be native.
QVERIFY(mdiArea.viewport()->internalWinId());
- foreach (QMdiSubWindow *subWindow, mdiArea.subWindowList())
- QVERIFY(subWindow->internalWinId());
+ {
+ const auto subWindows = mdiArea.subWindowList();
+ for (QMdiSubWindow *subWindow : subWindows)
+ QVERIFY(subWindow->internalWinId());
+ }
// Add a non-native widget. This should become native.
QMdiSubWindow *subWindow = new QMdiSubWindow;
@@ -2651,8 +2633,11 @@ void tst_QMdiArea::nativeSubWindows()
// The viewport and all the sub-windows must be native.
QVERIFY(mdiArea.viewport()->internalWinId());
- foreach (QMdiSubWindow *subWindow, mdiArea.subWindowList())
- QVERIFY(subWindow->internalWinId());
+ {
+ const auto subWindows = mdiArea.subWindowList();
+ for (QMdiSubWindow *subWindow : subWindows)
+ QVERIFY(subWindow->internalWinId());
+ }
}
{ // Make a sub-window native *after* it's added to the area.
@@ -2668,9 +2653,12 @@ void tst_QMdiArea::nativeSubWindows()
// All the sub-windows should be native at this point
QVERIFY(mdiArea.viewport()->internalWinId());
- foreach (QMdiSubWindow *subWindow, mdiArea.subWindowList())
+ {
+ const auto subWindows = mdiArea.subWindowList();
+ for (QMdiSubWindow *subWindow : subWindows)
QVERIFY(subWindow->internalWinId());
}
+ }
}
void tst_QMdiArea::task_209615()
@@ -2741,6 +2729,21 @@ void tst_QMdiArea::qtbug92240_title()
QTRY_COMPARE(w.windowTitle(), QLatin1String("QTBUG-92240 - [2]"));
}
+void tst_QMdiArea::tabbedview_singleSubWindow()
+{
+ // With only one sub-window, setViewMode() before addSubWindow(); and addSubWindow()
+ // before show(), ensure the sub-window is properly activated.
+ QMdiArea mdiArea;
+ mdiArea.setViewMode(QMdiArea::TabbedView);
+ auto *w = new QWidget(&mdiArea);
+ mdiArea.addSubWindow(w);
+ mdiArea.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&mdiArea));
+ auto *sub = mdiArea.subWindowList().at(0);
+ QCOMPARE(mdiArea.activeSubWindow(), sub);
+ QVERIFY(sub->isMaximized());
+}
+
static void setupMdiAreaWithTabbedView(QMdiArea &mdiArea)
{
mdiArea.setViewMode(QMdiArea::TabbedView);
diff --git a/tests/auto/widgets/widgets/qmdisubwindow/CMakeLists.txt b/tests/auto/widgets/widgets/qmdisubwindow/CMakeLists.txt
index 2c72f7d4e1..45b7b74ac4 100644
--- a/tests/auto/widgets/widgets/qmdisubwindow/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qmdisubwindow/CMakeLists.txt
@@ -1,18 +1,23 @@
-# Generated from qmdisubwindow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmdisubwindow Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmdisubwindow LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmdisubwindow
SOURCES
tst_qmdisubwindow.cpp
DEFINES
QT_NO_CAST_FROM_ASCII
QT_NO_CAST_TO_ASCII
- INCLUDE_DIRECTORIES
- .
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
Qt::WidgetsPrivate
diff --git a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
index a4283de59e..38808d1702 100644
--- a/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
+++ b/tests/auto/widgets/widgets/qmdisubwindow/tst_qmdisubwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qmdisubwindow.h"
#include "private/qmdisubwindow_p.h"
@@ -45,10 +20,13 @@
#include <QStyleOptionTitleBar>
#include <QPushButton>
#include <QScreen>
+#include <QScrollBar>
#include <QSizeGrip>
#include <QSignalSpy>
#include <QList>
+#include <QtWidgets/private/qapplication_p.h>
+
QT_BEGIN_NAMESPACE
extern bool qt_tab_all_widgets();
QT_END_NAMESPACE
@@ -221,6 +199,7 @@ private slots:
void styleChange();
void testFullScreenState();
void testRemoveBaseWidget();
+ void testRespectMinimumSize();
};
void tst_QMdiSubWindow::initTestCase()
@@ -405,7 +384,7 @@ void tst_QMdiSubWindow::mainWindowSupport()
mainWindow.setCentralWidget(workspace);
mainWindow.show();
mainWindow.menuBar()->setVisible(true);
- QApplication::setActiveWindow(&mainWindow);
+ QApplicationPrivate::setActiveWindow(&mainWindow);
bool nativeMenuBar = mainWindow.menuBar()->isNativeMenuBar();
// QMainWindow's window title is empty, so on a platform which does NOT have a native menubar,
@@ -494,7 +473,7 @@ void tst_QMdiSubWindow::mainWindowSupport()
workspace->activateNextSubWindow();
QCoreApplication::processEvents();
- for (QMdiSubWindow *window : qAsConst(windows)) {
+ for (QMdiSubWindow *window : std::as_const(windows)) {
QCOMPARE(workspace->activeSubWindow(), window);
QVERIFY(window->isMaximized());
QVERIFY(window->maximizedButtonsWidget());
@@ -531,7 +510,7 @@ void tst_QMdiSubWindow::emittingOfSignals()
workspace.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
workspace.show();
QCoreApplication::processEvents();
- QApplication::setActiveWindow(&workspace);
+ QApplicationPrivate::setActiveWindow(&workspace);
QMdiSubWindow *window = qobject_cast<QMdiSubWindow *>(workspace.addSubWindow(new QWidget));
QCoreApplication::processEvents();
window->show();
@@ -551,9 +530,9 @@ void tst_QMdiSubWindow::emittingOfSignals()
int count = 0;
if (signal == SIGNAL(aboutToActivate())) {
- count += spy.count();
+ count += spy.size();
} else {
- for (int i = 0; i < spy.count(); ++i) {
+ for (int i = 0; i < spy.size(); ++i) {
Qt::WindowStates oldState = qvariant_cast<Qt::WindowStates>(spy.at(i).at(0));
Qt::WindowStates newState = qvariant_cast<Qt::WindowStates>(spy.at(i).at(1));
if (watchedState != Qt::WindowNoState) {
@@ -576,7 +555,7 @@ void tst_QMdiSubWindow::emittingOfSignals()
spy.clear();
triggerSignal(window, &workspace, signal);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
delete window;
window = nullptr;
@@ -975,6 +954,8 @@ void tst_QMdiSubWindow::mouseDoubleClick()
if (!window->style()->styleHint(QStyle::SH_TitleBar_NoBorder, &options, window))
height += window->isMinimized() ? 8 : 4;
QPoint mousePosition(window->width() / 2, height - 1);
+ if (window->style()->inherits("QWindows11Style"))
+ mousePosition = QPoint(8, height - 1);
sendMouseMove(window, mousePosition, Qt::NoButton);
// Without Qt::WindowShadeButtonHint flag set
@@ -1002,8 +983,10 @@ void tst_QMdiSubWindow::mouseDoubleClick()
window->showMinimized();
QVERIFY(window->isMinimized());
+ //Process QEvent::WindowStateChange
+ QCoreApplication::processEvents();
sendMouseDoubleClick(window, mousePosition);
- QVERIFY(!window->isMinimized());
+ QTRY_VERIFY(!window->isMinimized());
QCOMPARE(window->geometry(), originalGeometry);
}
@@ -1053,7 +1036,7 @@ void tst_QMdiSubWindow::setSystemMenu()
subWindow->setSystemMenu(systemMenu);
QCOMPARE(subWindow->systemMenu(), qobject_cast<QMenu *>(systemMenu));
QCOMPARE(subWindow->systemMenu()->parentWidget(), static_cast<QWidget *>(subWindow));
- QCOMPARE(subWindow->systemMenu()->actions().count(), 1);
+ QCOMPARE(subWindow->systemMenu()->actions().size(), 1);
// Show the new system menu
QVERIFY(!QApplication::activePopupWidget());
@@ -1157,7 +1140,7 @@ void tst_QMdiSubWindow::restoreFocus()
topArea.show();
box->show();
- QApplication::setActiveWindow(&topArea);
+ QApplicationPrivate::setActiveWindow(&topArea);
QMdiSubWindow *expectedFocusWindow = nestedWorkspace->subWindowList().last();
QVERIFY(expectedFocusWindow);
QVERIFY(expectedFocusWindow->widget());
@@ -1249,7 +1232,7 @@ void tst_QMdiSubWindow::restoreFocusOverCreation()
subWidget1->m_lineEdit2->setFocus();
subWindow1->show();
mdiArea.show();
- QApplication::setActiveWindow(&mdiArea);
+ QApplicationPrivate::setActiveWindow(&mdiArea);
QVERIFY(QTest::qWaitForWindowActive(&mdiArea));
QCOMPARE(QApplication::focusWidget(), subWidget1->m_lineEdit2);
@@ -1277,9 +1260,9 @@ void tst_QMdiSubWindow::changeFocusWithTab()
mdiArea.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
mdiArea.addSubWindow(widget);
mdiArea.show();
- QCOMPARE(mdiArea.subWindowList().count(), 1);
+ QCOMPARE(mdiArea.subWindowList().size(), 1);
- QApplication::setActiveWindow(&mdiArea);
+ QApplicationPrivate::setActiveWindow(&mdiArea);
QCOMPARE(QApplication::focusWidget(), static_cast<QWidget *>(firstLineEdit));
// Next
@@ -1359,7 +1342,7 @@ void tst_QMdiSubWindow::closeEvent()
QVERIFY(window->close());
QCOMPARE(closeSpy.count(), 3);
- QCOMPARE(mdiArea.subWindowList().count(), 0);
+ QCOMPARE(mdiArea.subWindowList().size(), 0);
}
// There exists more tests in QMdiArea which covers window title support
@@ -1394,7 +1377,7 @@ void tst_QMdiSubWindow::setWindowTitle()
// other widgets which are not real top-level widgets).
QCOMPARE(window->windowTitle(), expectedWindowTitle);
- textEdit->setWindowModified(true);;
+ textEdit->setWindowModified(true);
expectedWindowTitle = QLatin1String("Override child title");
window->setWindowTitle(expectedWindowTitle);
QVERIFY(window->isWindowModified());
@@ -1567,9 +1550,6 @@ void tst_QMdiSubWindow::hideAndShow()
#if !defined (Q_OS_DARWIN)
QVERIFY(menuBar->cornerWidget(Qt::TopRightCorner));
-#if defined Q_OS_QNX
- QEXPECT_FAIL("", "QTBUG-38231", Abort);
-#endif
QVERIFY(subWindow->maximizedButtonsWidget());
QVERIFY(subWindow->maximizedSystemMenuIconWidget());
QCOMPARE(menuBar->cornerWidget(Qt::TopRightCorner), subWindow->maximizedButtonsWidget());
@@ -1800,9 +1780,6 @@ void tst_QMdiSubWindow::replaceMenuBarWhileMaximized()
QCoreApplication::processEvents();
-#if defined Q_OS_QNX
- QEXPECT_FAIL("", "QTBUG-38231", Abort);
-#endif
QVERIFY(subWindow->maximizedButtonsWidget());
QVERIFY(subWindow->maximizedSystemMenuIconWidget());
QCOMPARE(menuBar1->cornerWidget(Qt::TopLeftCorner), subWindow->maximizedSystemMenuIconWidget());
@@ -1894,7 +1871,6 @@ void tst_QMdiSubWindow::closeOnDoubleClick()
void tst_QMdiSubWindow::setFont()
{
- QSKIP("This test function is unstable in CI, please see QTBUG-22544");
QMdiArea mdiArea;
mdiArea.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
QMdiSubWindow *subWindow = mdiArea.addSubWindow(new TestPushButton(QLatin1String("test")));
@@ -1980,7 +1956,7 @@ void tst_QMdiSubWindow::task_182852()
mainWindow.setCentralWidget(workspace);
mainWindow.show();
mainWindow.menuBar()->setVisible(true);
- QApplication::setActiveWindow(&mainWindow);
+ QApplicationPrivate::setActiveWindow(&mainWindow);
if (mainWindow.menuBar()->isNativeMenuBar())
return; // The main window's title is not overwritten if we have a native menubar (macOS, Unity etc.)
@@ -2130,7 +2106,7 @@ void tst_QMdiSubWindow::styleChange()
// subWindowActivated should NOT be activated by a style change,
// even if internally QMdiSubWindow un-minimizes subwindows temporarily.
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QMdiSubWindow::testFullScreenState()
@@ -2169,6 +2145,36 @@ void tst_QMdiSubWindow::testRemoveBaseWidget()
delete widget1;
}
+void tst_QMdiSubWindow::testRespectMinimumSize() // QTBUG-100494
+{
+ QMdiArea mdiArea;
+ mdiArea.resize(400, 400);
+ mdiArea.setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+ mdiArea.setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+
+ auto vlay = new QVBoxLayout;
+ vlay->addWidget(new QPushButton(QLatin1String("btn1-1")));
+ vlay->addSpacerItem(new QSpacerItem(20, 40, QSizePolicy::Minimum, QSizePolicy::Expanding));
+ vlay->addWidget(new QPushButton(QLatin1String("btn1-2")));
+ auto w1 = new QWidget;
+ w1->setLayout(vlay);
+ w1->resize(300, 200);
+ w1->setMinimumSize(200, 150);
+ auto sw = new QMdiSubWindow;
+ sw->setWidget(w1);
+ sw->resize(w1->size());
+ mdiArea.addSubWindow(sw);
+ sw->showMaximized();
+
+ mdiArea.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&mdiArea));
+ QVERIFY(!mdiArea.horizontalScrollBar()->isVisible());
+ QVERIFY(!mdiArea.verticalScrollBar()->isVisible());
+ mdiArea.resize(150, 100);
+ QTRY_VERIFY(mdiArea.horizontalScrollBar()->isVisible());
+ QTRY_VERIFY(mdiArea.verticalScrollBar()->isVisible());
+}
+
QTEST_MAIN(tst_QMdiSubWindow)
#include "tst_qmdisubwindow.moc"
diff --git a/tests/auto/widgets/widgets/qmenu/BLACKLIST b/tests/auto/widgets/widgets/qmenu/BLACKLIST
index 230512769c..88484ddffa 100644
--- a/tests/auto/widgets/widgets/qmenu/BLACKLIST
+++ b/tests/auto/widgets/widgets/qmenu/BLACKLIST
@@ -1,10 +1,6 @@
[task258920_mouseBorder]
macos
-[layoutDirection]
-macos
# Fails when enabling synchronous expose events QTBUG-62092
-[pushButtonPopulateOnAboutToShow]
-macos
[tearOff]
macos
[submenuTearOffDontClose]
@@ -20,6 +16,7 @@ android
android
[pushButtonPopulateOnAboutToShow]
android
+wayland
[QTBUG8122_widgetActionCrashOnClose]
android
[click_while_dismissing_submenu]
@@ -29,3 +26,6 @@ android
[QTBUG_89082_actionTipsHide]
macos ci # Can't move cursor (QTBUG-76312)
windows-10 ci
+# QTBUG-87424
+[transientParent]
+android
diff --git a/tests/auto/widgets/widgets/qmenu/CMakeLists.txt b/tests/auto/widgets/widgets/qmenu/CMakeLists.txt
index 8e596a6b5b..1716ab85da 100644
--- a/tests/auto/widgets/widgets/qmenu/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qmenu/CMakeLists.txt
@@ -1,17 +1,25 @@
-# Generated from qmenu.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmenu Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmenu LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmenu
SOURCES
tst_qmenu.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::TestPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
## Scopes:
@@ -20,7 +28,7 @@ qt_internal_add_test(tst_qmenu
qt_internal_extend_target(tst_qmenu CONDITION MACOS
SOURCES
tst_qmenu_mac.mm
- PUBLIC_LIBRARIES
+ LIBRARIES
objc
)
diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
index 31ecd024c0..5602b8cd3f 100644
--- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
+++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.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 <QTest>
#include <QtTest/private/qtesthelpers_p.h>
@@ -52,6 +27,9 @@
#include <qpa/qplatformtheme.h>
#include <qpa/qplatformintegration.h>
+#include <QtWidgets/private/qapplication_p.h>
+#include <QtWidgets/private/qmenu_p.h>
+
using namespace QTestPrivate;
Q_DECLARE_METATYPE(Qt::Key);
@@ -135,6 +113,9 @@ private slots:
void tearOffMenuNotDisplayed();
void QTBUG_61039_menu_shortcuts();
void screenOrientationChangedCloseMenu();
+ void deleteWhenTriggered();
+
+ void nestedTearOffDetached();
protected slots:
void onActivated(QAction*);
@@ -282,11 +263,11 @@ void tst_QMenu::onStatusMessageChanged(const QString &s)
void tst_QMenu::addActionsAndClear()
{
- QCOMPARE(menus[0]->actions().count(), 0);
+ QCOMPARE(menus[0]->actions().size(), 0);
createActions();
- QCOMPARE(menus[0]->actions().count(), 8);
+ QCOMPARE(menus[0]->actions().size(), 8);
menus[0]->clear();
- QCOMPARE(menus[0]->actions().count(), 0);
+ QCOMPARE(menus[0]->actions().size(), 0);
}
static void testFunction0() {}
@@ -506,7 +487,7 @@ void tst_QMenu::focus()
QPushButton button("Push me", &window);
centerOnScreen(&window);
window.show();
- qApp->setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
QVERIFY(button.hasFocus());
QCOMPARE(QApplication::focusWidget(), (QWidget *)&button);
@@ -550,7 +531,7 @@ void tst_QMenu::overrideMenuAction()
m->addAction(aQuit);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
w.setFocus();
QVERIFY(QTest::qWaitForWindowActive(&w));
QVERIFY(w.hasFocus());
@@ -918,13 +899,20 @@ private:
void tst_QMenu::activeSubMenuPositionExec()
{
-
+#ifdef Q_OS_ANDROID
+ // QTBUG-87424
+ QSKIP("Android: This hangs. Figure out why.");
+#endif
SubMenuPositionExecMenu menu;
menu.exec(QGuiApplication::primaryScreen()->availableGeometry().center());
}
void tst_QMenu::task242454_sizeHint()
{
+#ifdef Q_OS_ANDROID
+ // QTBUG-87424
+ QSKIP("Android: This hangs. Figure out why.");
+#endif
QMenu menu;
QString s = QLatin1String("foo\nfoo\nfoo\nfoo");
menu.addAction(s);
@@ -1053,12 +1041,16 @@ public:
// Mouse move related signals for Windows Mobile unavailable
void tst_QMenu::task258920_mouseBorder()
{
+ const QRect screenGeometry = QGuiApplication::primaryScreen()->availableGeometry();
Menu258920 menu;
+ QCursor::setPos(screenGeometry.topLeft());
+ if (!QTest::qWaitFor([screenGeometry]{ return QCursor::pos() == screenGeometry.topLeft(); }))
+ QSKIP("Can't move cursor out of the way");
// For styles which inherit from QWindowsStyle, styleHint(QStyle::SH_Menu_MouseTracking) is true.
menu.setMouseTracking(true);
QAction *action = menu.addAction("test");
- const QPoint center = QGuiApplication::primaryScreen()->availableGeometry().center();
+ const QPoint center = screenGeometry.center();
menu.popup(center);
QVERIFY(QTest::qWaitForWindowExposed(&menu));
QRect actionRect = menu.actionGeometry(action);
@@ -1154,14 +1146,18 @@ void tst_QMenu::pushButtonPopulateOnAboutToShow()
QSKIP("Your window manager won't allow a window against the bottom of the screen");
}
- QTimer::singleShot(300, buttonMenu, SLOT(hide()));
QTest::mouseClick(&b, Qt::LeftButton, Qt::NoModifier, b.rect().center());
+ QVERIFY(QTest::qWaitForWindowExposed(buttonMenu));
+ QTest::qWait(300);
+ buttonMenu->hide();
QVERIFY2(!buttonMenu->geometry().intersects(b.geometry()), msgGeometryIntersects(buttonMenu->geometry(), b.geometry()));
// note: we're assuming that, if we previously got the desired geometry, we'll get it here too
b.move(10, screen.bottom()-buttonMenu->height()-5);
- QTimer::singleShot(300, buttonMenu, SLOT(hide()));
QTest::mouseClick(&b, Qt::LeftButton, Qt::NoModifier, b.rect().center());
+ QVERIFY(QTest::qWaitForWindowExposed(buttonMenu));
+ QTest::qWait(300);
+ buttonMenu->hide();
QVERIFY2(!buttonMenu->geometry().intersects(b.geometry()), msgGeometryIntersects(buttonMenu->geometry(), b.geometry()));
}
@@ -1276,7 +1272,7 @@ void tst_QMenu::click_while_dismissing_submenu()
//the submenu must have been hidden for the bug to be triggered
QVERIFY(!sub.isVisible());
QTest::mouseRelease(menuWindow, Qt::LeftButton, {}, menu.rect().center() - QPoint(0, 2), 300);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
#endif
@@ -1617,7 +1613,7 @@ void tst_QMenu::transientParent()
QWindow *topLevel = window.windowHandle();
QVERIFY(topLevel);
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
window.setFocus();
QVERIFY(QTest::qWaitForWindowActive(&window));
QVERIFY(window.hasFocus());
@@ -1852,12 +1848,12 @@ void tst_QMenu::menuSize_Scrolling()
private:
void showEvent(QShowEvent *e) override
{
- QVERIFY(actions().length() == m_numItems);
+ QVERIFY(actions().size() == m_numItems);
int hmargin = style()->pixelMetric(QStyle::PM_MenuHMargin, nullptr, this);
int fw = style()->pixelMetric(QStyle::PM_MenuPanelWidth, nullptr, this);
const QMargins cm = contentsMargins();
- QRect lastItem = actionGeometry(actions().at(actions().length() - 1));
+ QRect lastItem = actionGeometry(actions().at(actions().size() - 1));
QSize s = size();
if (!QGuiApplication::platformName().compare(QLatin1String("minimal"), Qt::CaseInsensitive)
|| !QGuiApplication::platformName().compare(QLatin1String("offscreen"), Qt::CaseInsensitive)) {
@@ -1923,7 +1919,7 @@ void tst_QMenu::menuSize_Scrolling()
QVERIFY(QTest::qWaitForWindowExposed(&menu));
QList<QAction *> actions = menu.actions();
- QCOMPARE(actions.length(), numItems);
+ QCOMPARE(actions.size(), numItems);
MenuMetrics mm(&menu);
QTest::keyClick(&menu, Qt::Key_Home);
@@ -2003,11 +1999,11 @@ void tst_QMenu::QTBUG_61039_menu_shortcuts()
QSignalSpy actionKamenSpy(actionKamen, &QAction::triggered);
QTest::keyClick(&widget, Qt::Key_K);
- QTRY_COMPARE(actionKamenSpy.count(), 1);
+ QTRY_COMPARE(actionKamenSpy.size(), 1);
QSignalSpy actionJoeSpy(actionJoe, &QAction::triggered);
QTest::keyClick(&widget, Qt::Key_J, Qt::ControlModifier);
- QTRY_COMPARE(actionJoeSpy.count(), 1);
+ QTRY_COMPARE(actionJoeSpy.size(), 1);
}
void tst_QMenu::screenOrientationChangedCloseMenu()
@@ -2025,5 +2021,99 @@ void tst_QMenu::screenOrientationChangedCloseMenu()
QTRY_COMPARE(menu.isVisible(),false);
}
+/*
+ Verify that deleting the menu in a slot connected to an
+ action's triggered signal doesn't crash.
+ QTBUG-106718
+*/
+void tst_QMenu::deleteWhenTriggered()
+{
+ QPointer<QMenu> menu = new QMenu;
+ QAction *action = menu->addAction("Action", [&menu]{
+ delete menu;
+ });
+ menu->popup(QGuiApplication::primaryScreen()->availableGeometry().center());
+ menu->setActiveAction(action);
+ QTest::keyClick(menu, Qt::Key_Return);
+ QTRY_VERIFY(!menu);
+}
+
+/*
+ QMenu uses the caused-stack to create the parent/child relationship
+ for tear-off menus. Since QTornOffMenu set the DeleteOnClose flag, closing a
+ tear-off in the parent chain will result in a null-pointer in the caused-stack.
+ Verify that we don't crash when traversing the chain, as reported in QTBUG-112217.
+
+ The test has to open the submenus by hovering of the menu action, otherwise
+ the caused-stack remains empty and the issue doesn't reproduce. Due to QMenu's
+ timing and "sloppiness", we need to move the mouse within the action, with some
+ waiting and event processing in between to trigger the opening of the submenu.
+ If this fails we skip, as we then can't test what we are trying to test.
+*/
+void tst_QMenu::nestedTearOffDetached()
+{
+ // Since QTornOffMenu is not declared in qmenuprivate.h we can't access the
+ // object even through QMenuPrivate. So use an event filter to watch out for
+ // a QTornOffMenu showing.
+ class TearOffWatcher : public QObject
+ {
+ public:
+ QMenu *tornOffMenu = nullptr;
+ protected:
+ bool eventFilter(QObject *receiver, QEvent *event) override
+ {
+ if (event->type() == QEvent::Show && receiver->inherits("QTornOffMenu"))
+ tornOffMenu = qobject_cast<QMenu *>(receiver);
+ return QObject::eventFilter(receiver, event);
+ }
+ } watcher;
+ qApp->installEventFilter(&watcher);
+
+ QWidget widget;
+ QMenu *menu = new QMenu("Context", &widget);
+
+ MenuMetrics mm(menu);
+ const int tearOffOffset = mm.fw + mm.vmargin + mm.tearOffHeight / 2;
+
+ QMenu *subMenu = menu->addMenu("SubMenu");
+ menu->setTearOffEnabled(true);
+ QMenu *subSubMenu = subMenu->addMenu("SubSubMenu");
+ subMenu->setTearOffEnabled(true);
+ subSubMenu->addAction("Action!");
+ subSubMenu->setTearOffEnabled(true);
+
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
+
+ // open and tear off context menu
+ menu->popup(widget.geometry().center());
+ QTest::mouseClick(menu, Qt::LeftButton, {}, QPoint(menu->width() / 2, tearOffOffset));
+
+ QMenu *menuTorn = watcher.tornOffMenu;
+ watcher.tornOffMenu = nullptr;
+ QVERIFY(menuTorn);
+ QVERIFY(QTest::qWaitForWindowExposed(menuTorn));
+
+ // open second menu and tear-off
+ QTest::mouseMove(menuTorn, menuTorn->actionGeometry(subMenu->menuAction()).topLeft());
+ QTest::qWait(100);
+ QTest::mouseMove(menuTorn, menuTorn->actionGeometry(subMenu->menuAction()).center());
+ if (!QTest::qWaitFor([subMenu]{ return subMenu->isVisible(); }))
+ QSKIP("Menu failed to show, skipping test");
+
+ QTest::mouseClick(subMenu, Qt::LeftButton, {}, QPoint(subMenu->width() / 2, tearOffOffset));
+ menuTorn = watcher.tornOffMenu;
+ QVERIFY(menuTorn);
+ QVERIFY(QTest::qWaitForWindowExposed(menuTorn));
+ // close the top level tear off
+ menu->hideTearOffMenu();
+ // open third menu and tear-off
+ QTest::mouseMove(menuTorn, menuTorn->actionGeometry(subSubMenu->menuAction()).topLeft());
+ QTest::qWait(100);
+ QTest::mouseMove(menuTorn, menuTorn->actionGeometry(subSubMenu->menuAction()).center());
+ QTRY_VERIFY(subSubMenu->isVisible());
+ QTest::mouseClick(subSubMenu, Qt::LeftButton, {}, QPoint(subSubMenu->width() / 2, tearOffOffset));
+}
+
QTEST_MAIN(tst_QMenu)
#include "tst_qmenu.moc"
diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu_mac.mm b/tests/auto/widgets/widgets/qmenu/tst_qmenu_mac.mm
index f90af47c19..ba76c28fd4 100644
--- a/tests/auto/widgets/widgets/qmenu/tst_qmenu_mac.mm
+++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu_mac.mm
@@ -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
#import <AppKit/AppKit.h>
diff --git a/tests/auto/widgets/widgets/qmenubar/BLACKLIST b/tests/auto/widgets/widgets/qmenubar/BLACKLIST
index 633bda332f..516fd39f86 100644
--- a/tests/auto/widgets/widgets/qmenubar/BLACKLIST
+++ b/tests/auto/widgets/widgets/qmenubar/BLACKLIST
@@ -1,10 +1,5 @@
[check_menuPosition]
-ubuntu-16.04
-#QTBUG-66255
-ubuntu-18.04
-ubuntu-20.04
-[activatedCount]
-opensuse-42.3
+ubuntu-22.04
# QTBUG-87421
[cornerWidgets]
android
diff --git a/tests/auto/widgets/widgets/qmenubar/CMakeLists.txt b/tests/auto/widgets/widgets/qmenubar/CMakeLists.txt
index 63f690a2ed..f2b1c1bec6 100644
--- a/tests/auto/widgets/widgets/qmenubar/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qmenubar/CMakeLists.txt
@@ -1,16 +1,24 @@
-# Generated from qmenubar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmenubar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qmenubar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qmenubar
SOURCES
tst_qmenubar.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::TestPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
## Scopes:
@@ -19,6 +27,6 @@ qt_internal_add_test(tst_qmenubar
qt_internal_extend_target(tst_qmenubar CONDITION MACOS
SOURCES
tst_qmenubar_mac.mm
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWAppKit}
)
diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
index 1b8de0b75c..8524b4212c 100644
--- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.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 <QTest>
@@ -40,10 +15,13 @@
#include <QVBoxLayout>
#include <QLabel>
#include <QPlainTextEdit>
+#include <QTranslator>
#include <qscreen.h>
#include <qobject.h>
+#include <QtWidgets/private/qapplication_p.h>
+
QT_FORWARD_DECLARE_CLASS(QMainWindow)
#include <qmenubar.h>
@@ -115,13 +93,6 @@ private slots:
#endif
void allowActiveAndDisabled();
void taskQTBUG56860_focus();
- void check_endKey();
- void check_homeKey();
-
-// void check_mouse1_data();
-// void check_mouse1();
-// void check_mouse2_data();
-// void check_mouse2();
void check_altPress();
void check_altClosePress();
@@ -144,6 +115,8 @@ private slots:
#ifdef Q_OS_MACOS
void taskQTBUG56275_reinsertMenuInParentlessQMenuBar();
void QTBUG_57404_existingMenuItemException();
+ void defaultEditMenuItems();
+
#endif
void QTBUG_25669_menubarActionDoubleTriggered();
void taskQTBUG55966_subMenuRemoved();
@@ -356,7 +329,7 @@ void tst_QMenuBar::accel()
QMainWindow w;
const TestMenu menu = initWindowWithSimpleMenuBar(w);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
// shortcuts won't work unless the window is active
QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_A, Qt::ControlModifier );
@@ -378,7 +351,7 @@ void tst_QMenuBar::activatedCount()
QFETCH( bool, forceNonNative );
initWindowWithSimpleMenuBar(w, forceNonNative);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_A, Qt::ControlModifier );
@@ -578,7 +551,7 @@ void tst_QMenuBar::check_accelKeys()
QMainWindow w;
initWindowWithComplexMenuBar(w);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
// start with a bogus key that shouldn't trigger anything
@@ -657,7 +630,7 @@ void tst_QMenuBar::check_cursorKeys1()
QMainWindow w;
initWindowWithComplexMenuBar(w);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
// start with a ALT + 1 that activates the first popupmenu
@@ -697,7 +670,7 @@ void tst_QMenuBar::check_cursorKeys2()
QMainWindow w;
initWindowWithComplexMenuBar(w);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
// select popupmenu2
@@ -736,7 +709,7 @@ void tst_QMenuBar::check_cursorKeys3()
QMainWindow w;
initWindowWithComplexMenuBar(w);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
// select Popupmenu 2
@@ -778,7 +751,7 @@ void tst_QMenuBar::taskQTBUG56860_focus()
w.setCentralWidget(e);
w.show();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QTRY_COMPARE(QApplication::focusWidget(), e);
@@ -805,85 +778,6 @@ void tst_QMenuBar::taskQTBUG56860_focus()
}
/*!
- If a popupmenu is active you can use home to go quickly to the first item in the menu.
-*/
-void tst_QMenuBar::check_homeKey()
-{
- // I'm temporarily shutting up this testcase.
- // Seems like the behaviour i'm expecting isn't ok.
- QSKIP("This test has been \"temporarily\" disabled at least since 2009 :)");
-
- QEXPECT_FAIL( "0", "Popupmenu should respond to a Home key", Abort );
-
- QMainWindow w;
- initWindowWithComplexMenuBar(w);
- w.show();
- QApplication::setActiveWindow(&w);
- QVERIFY(QTest::qWaitForWindowActive(&w));
-
- // select Popupmenu 2
- QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_2, Qt::AltModifier );
-
- // Simulate some keys
- QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Down );
- QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Down );
- QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Down );
- QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Home );
- // and press ENTER
- QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Enter );
- // Let's see if the correct slot is called...
-// QVERIFY2( m_complexActionTriggerCount[int('c')] == 1, "Popupmenu should respond to a Home key" );
- QCOMPARE(m_complexTriggerCount[int('c')], 1);
- QCOMPARE(m_complexTriggerCount[3], 0);
- QCOMPARE(m_complexTriggerCount[4], 0);
- QCOMPARE(m_complexTriggerCount[int('a')], 0);
- QCOMPARE(m_complexTriggerCount[int('b')], 0);
- QCOMPARE(m_complexTriggerCount[int('d')], 0);
- QCOMPARE(m_complexTriggerCount[int('e')], 0);
- QCOMPARE(m_complexTriggerCount[int('f')], 0);
- QCOMPARE(m_complexTriggerCount[int('g')], 0);
- QCOMPARE(m_complexTriggerCount[int('h')], 0);
-}
-
-/*!
- If a popupmenu is active you can use end to go quickly to the last item in the menu.
-*/
-void tst_QMenuBar::check_endKey()
-{
- // I'm temporarily silenting this testcase.
- // Seems like the behaviour i'm expecting isn't ok.
- QSKIP("This test has been \"temporarily\" disabled at least since 2009 :)");
-
- QEXPECT_FAIL( "0", "Popupmenu should respond to an End key", Abort );
-
- QMainWindow w;
- initWindowWithComplexMenuBar(w);
- w.show();
- QApplication::setActiveWindow(&w);
- QVERIFY(QTest::qWaitForWindowActive(&w));
-
- // select Popupmenu 2
- QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_2, Qt::AltModifier );
-
- // Simulate some keys
- QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_End );
- // and press ENTER
- QTest::keyClick(static_cast<QWidget *>(0), Qt::Key_Enter );
- // Let's see if the correct slot is called...
-// QVERIFY2( m_complexActionTriggerCount[int('h')] == 1, "Popupmenu should respond to an End key" );
- QCOMPARE(m_complexTriggerCount[int('h')], 1);//, "Popupmenu should respond to an End key");
- QCOMPARE(m_complexTriggerCount[3], 0);
- QCOMPARE(m_complexTriggerCount[4], 0);
- QCOMPARE(m_complexTriggerCount[int('a')], 0);
- QCOMPARE(m_complexTriggerCount[int('b')], 0);
- QCOMPARE(m_complexTriggerCount[int('c')], 0);
- QCOMPARE(m_complexTriggerCount[int('d')], 0);
- QCOMPARE(m_complexTriggerCount[int('e')], 0);
- QCOMPARE(m_complexTriggerCount[int('f')], 0);
- QCOMPARE(m_complexTriggerCount[int('g')], 0);
-}
-
-/*!
If a popupmenu is active you can use esc to hide the menu and then the
menubar should become active.
If Down is pressed next the popup is activated again.
@@ -900,7 +794,7 @@ void tst_QMenuBar::check_escKey()
const TestMenu menu = initWindowWithComplexMenuBar(w);
w.show();
w.setFocus();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QVERIFY( !menu.menus.at(0)->isActiveWindow() );
@@ -938,112 +832,6 @@ void tst_QMenuBar::check_escKey()
#endif
-// void tst_QMenuBar::check_mouse1_data()
-// {
-// QTest::addColumn<QString>("popup_item");
-// QTest::addColumn<int>("itemA_count");
-// QTest::addColumn<int>("itemB_count");
-
-// QTest::newRow( "A" ) << QString( "Item A Ctrl+A" ) << 1 << 0;
-// QTest::newRow( "B" ) << QString( "Item B Ctrl+B" ) << 0 << 1;
-// }
-
-// /*!
-// Check if the correct signals are emitted if we select a popupmenu.
-// */
-// void tst_QMenuBar::check_mouse1()
-// {
-// if (QSystem::curStyle() == "Motif")
-// QSKIP("This fails in Motif due to a bug in the testing framework");
-// QFETCH( QString, popup_item );
-// QFETCH( int, itemA_count );
-// QFETCH( int, itemB_count );
-
-// // initComplexMenubar();
-// QVERIFY( !pm1->isActiveWindow() );
-// QVERIFY( !pm2->isActiveWindow() );
-
-// QTest::qWait(1000);
-// QtTestMouse mouse;
-// mouse.mouseEvent( QtTestMouse::MouseClick, mb, "Menu &1", Qt::LeftButton );
-
-// QVERIFY( pm1->isActiveWindow() );
-// QVERIFY( !pm2->isActiveWindow() );
-
-// QTest::qWait(1000);
-// mouse.mouseEvent( QtTestMouse::MouseClick, pm1, popup_item, Qt::LeftButton );
-
-// QCOMPARE(m_complexActionTriggerCount[3], 0);
-// QCOMPARE(m_complexActionTriggerCount[4], 0);
-// QCOMPARE(m_complexActionTriggerCount['a'], (uint)itemA_count); // this option should have fired
-// QCOMPARE(m_complexActionTriggerCount['b'], (uint)itemB_count);
-// QCOMPARE(m_complexActionTriggerCount['c'], 0);
-// QCOMPARE(m_complexActionTriggerCount['d'], 0);
-// QCOMPARE(m_complexActionTriggerCount['e'], 0);
-// QCOMPARE(m_complexActionTriggerCount['f'], 0);
-// QCOMPARE(m_complexActionTriggerCount['g'], 0);
-// }
-
-// void tst_QMenuBar::check_mouse2_data()
-// {
-// QTest::addColumn<QString>("label");
-// QTest::addColumn<int>("itemA_count");
-// QTest::addColumn<int>("itemB_count");
-// QTest::addColumn<int>("itemC_count");
-// QTest::addColumn<int>("itemD_count");
-// QTest::addColumn<int>("itemE_count");
-// QTest::addColumn<int>("itemF_count");
-// QTest::addColumn<int>("itemG_count");
-// QTest::addColumn<int>("itemH_count");
-// QTest::addColumn<int>("menu3_count");
-
-// QTest::newRow( "A" ) << QString( "Menu &1/Item A Ctrl+A" ) << 1 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0;
-// QTest::newRow( "B" ) << QString( "Menu &1/Item B Ctrl+B" ) << 0 << 1 << 0 << 0 << 0 << 0 << 0 << 0 << 0;
-// QTest::newRow( "C" ) << QString( "Menu &2/Item C Ctrl+C" ) << 0 << 0 << 1 << 0 << 0 << 0 << 0 << 0 << 0;
-// QTest::newRow( "D" ) << QString( "Menu &2/Item D Ctrl+D" ) << 0 << 0 << 0 << 1 << 0 << 0 << 0 << 0 << 0;
-// QTest::newRow( "E" ) << QString( "Menu &2/Item E Ctrl+E" ) << 0 << 0 << 0 << 0 << 1 << 0 << 0 << 0 << 0;
-// QTest::newRow( "F" ) << QString( "Menu &2/Item F Ctrl+F" ) << 0 << 0 << 0 << 0 << 0 << 1 << 0 << 0 << 0;
-// QTest::newRow( "G" ) << QString( "Menu &2/Item G Ctrl+G" ) << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 0 << 0;
-// QTest::newRow( "H" ) << QString( "Menu &2/Item H Ctrl+H" ) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 1 << 0;
-// QTest::newRow( "menu 3" ) << QString( "M&enu 3" ) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 1;
-// }
-
-// /*!
-// Check if the correct signals are emitted if we select a popupmenu.
-// This time, we use a little bit more magic from the testframework.
-// */
-// void tst_QMenuBar::check_mouse2()
-// {
-// if (QSystem::curStyle() == "Motif")
-// QSKIP("This fails in Motif due to a bug in the testing framework");
-// QFETCH( QString, label );
-// QFETCH( int, itemA_count );
-// QFETCH( int, itemB_count );
-// QFETCH( int, itemC_count );
-// QFETCH( int, itemD_count );
-// QFETCH( int, itemE_count );
-// QFETCH( int, itemF_count );
-// QFETCH( int, itemG_count );
-// QFETCH( int, itemH_count );
-// QFETCH( int, menu3_count );
-
-// // initComplexMenubar();
-// QtTestMouse mouse;
-// mouse.click( QtTestMouse::Menu, label, Qt::LeftButton );
-
-// // check if the correct signals have fired
-// QCOMPARE(m_complexActionTriggerCount[3], (uint)menu3_count);
-// QCOMPARE(m_complexActionTriggerCount[4], 0);
-// QCOMPARE(m_complexActionTriggerCount['a'], (uint)itemA_count);
-// QCOMPARE(m_complexActionTriggerCount['b'], (uint)itemB_count);
-// QCOMPARE(m_complexActionTriggerCount['c'], (uint)itemC_count);
-// QCOMPARE(m_complexActionTriggerCount['d'], (uint)itemD_count);
-// QCOMPARE(m_complexActionTriggerCount['e'], (uint)itemE_count);
-// QCOMPARE(m_complexActionTriggerCount['f'], (uint)itemF_count);
-// QCOMPARE(m_complexActionTriggerCount['g'], (uint)itemG_count);
-// QCOMPARE(m_complexActionTriggerCount['h'], (uint)itemH_count);
-// }
-
void tst_QMenuBar::allowActiveAndDisabled()
{
QMenuBar menuBar;
@@ -1098,7 +886,7 @@ void tst_QMenuBar::check_altPress()
initWindowWithSimpleMenuBar(w);
w.show();
w.setFocus();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QTest::keyClick( &w, Qt::Key_Alt );
@@ -1128,7 +916,7 @@ void tst_QMenuBar::check_altClosePress()
w.show();
w.move(QGuiApplication::primaryScreen()->availableGeometry().center());
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QTest::keyClick(&w, Qt::Key_F, Qt::AltModifier);
@@ -1149,7 +937,7 @@ void tst_QMenuBar::check_shortcutPress()
const TestMenu menu = initWindowWithComplexMenuBar(w);
w.show();
w.setFocus();
- QApplication::setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
QCOMPARE(m_complexTriggerCount[3], 0);
@@ -1206,7 +994,7 @@ void tst_QMenuBar::check_menuPosition()
QAction *menu_action = w.menuBar()->addMenu(&menu);
centerOnScreen(&w);
w.show();
- qApp->setActiveWindow(&w);
+ QApplicationPrivate::setActiveWindow(&w);
QVERIFY(QTest::qWaitForWindowActive(&w));
//the menu should be below the menubar item
@@ -1290,9 +1078,9 @@ void tst_QMenuBar::task223138_triggered()
//let's trigger the first action
top->trigger();
- QCOMPARE(menubarSpy.count(), 1);
- QCOMPARE(menuSpy.count(), 1);
- QCOMPARE(submenuSpy.count(), 0);
+ QCOMPARE(menubarSpy.size(), 1);
+ QCOMPARE(menuSpy.size(), 1);
+ QCOMPARE(submenuSpy.size(), 0);
menubarSpy.clear();
menuSpy.clear();
@@ -1300,9 +1088,9 @@ void tst_QMenuBar::task223138_triggered()
//let's trigger the sub action
action->trigger();
- QCOMPARE(menubarSpy.count(), 1);
- QCOMPARE(menuSpy.count(), 1);
- QCOMPARE(submenuSpy.count(), 1);
+ QCOMPARE(menubarSpy.size(), 1);
+ QCOMPARE(menuSpy.size(), 1);
+ QCOMPARE(submenuSpy.size(), 1);
}
void tst_QMenuBar::task256322_highlight()
@@ -1325,7 +1113,7 @@ void tst_QMenuBar::task256322_highlight()
centerOnScreen(&win);
win.show();
- QApplication::setActiveWindow(&win);
+ QApplicationPrivate::setActiveWindow(&win);
QVERIFY(QTest::qWaitForWindowActive(&win));
const QPoint filePos = menuBarActionWindowPos(win.menuBar(), file);
@@ -1381,8 +1169,8 @@ void tst_QMenuBar::menubarSizeHint()
mb.setStyle(&style);
//this is a list of arbitrary strings so that we check the geometry
- QStringList list = QStringList() << "trer" << "ezrfgtgvqd" << "sdgzgzerzerzer" << "eerzertz" << "er";
- foreach(QString str, list)
+ const auto list = QStringList{"trer", "ezrfgtgvqd", "sdgzgzerzerzer", "eerzertz", "er"};
+ for (const QString &str : list)
mb.addAction(str);
const int panelWidth = style.pixelMetric(QStyle::PM_MenuBarPanelWidth);
@@ -1393,7 +1181,8 @@ void tst_QMenuBar::menubarSizeHint()
centerOnScreen(&mb);
mb.show();
QRect result;
- foreach(QAction *action, mb.actions()) {
+ const auto actions = mb.actions();
+ for (QAction *action : actions) {
const QRect actionRect = mb.actionGeometry(action);
if (!result.isNull()) //this is the first item
QCOMPARE(actionRect.left() - result.right() - 1, spacing);
@@ -1429,11 +1218,11 @@ void tst_QMenuBar::taskQTBUG4965_escapeEaten()
QMenu menu("menu1");
QAction *first = menubar.addMenu(&menu);
#if QT_CONFIG(shortcut)
- menu.addAction("quit", &menubar, SLOT(close()), QKeySequence("ESC"));
+ menu.addAction("quit", QKeySequence("ESC"), &menubar, SLOT(close()));
#endif
centerOnScreen(&menubar);
menubar.show();
- QApplication::setActiveWindow(&menubar);
+ QApplicationPrivate::setActiveWindow(&menubar);
QVERIFY(QTest::qWaitForWindowExposed(&menubar));
menubar.setActiveAction(first);
QTRY_VERIFY(menu.isVisible());
@@ -1464,7 +1253,7 @@ void tst_QMenuBar::taskQTBUG11823_crashwithInvisibleActions()
centerOnScreen(&menubar);
menubar.show();
- QApplication::setActiveWindow(&menubar);
+ QApplicationPrivate::setActiveWindow(&menubar);
QVERIFY(QTest::qWaitForWindowActive(&menubar));
menubar.setActiveAction(m);
QCOMPARE(menubar.activeAction(), m);
@@ -1495,7 +1284,7 @@ void tst_QMenuBar::closeOnSecondClickAndOpenOnThirdClick() // QTBUG-32807, menu
QMenu *fileMenu = menuBar->addMenu(QStringLiteral("OpenCloseOpen"));
fileMenu->addAction(QStringLiteral("Quit"));
mainWindow.show();
- QApplication::setActiveWindow(&mainWindow);
+ QApplicationPrivate::setActiveWindow(&mainWindow);
QVERIFY(QTest::qWaitForWindowActive(&mainWindow));
const QPoint center = menuBarActionWindowPos(mainWindow.menuBar(), fileMenu->menuAction());
@@ -1590,7 +1379,7 @@ void tst_QMenuBar::taskQTBUG53205_crashReparentNested()
mainWindow.resize(300, 200);
centerOnScreen(&mainWindow);
const TestMenu testMenus = initWindowWithComplexMenuBar(mainWindow);
- QApplication::setActiveWindow(&mainWindow);
+ QApplicationPrivate::setActiveWindow(&mainWindow);
// they can't be windows
QWidget hiddenParent(&mainWindow, {});
@@ -1640,12 +1429,12 @@ void tst_QMenuBar::QTBUG_65488_hiddenActionTriggered()
// resize to action's size to make Action1 hidden
win.resize(actRect.width() - 10, win.size().height());
win.show();
- QApplication::setActiveWindow(&win);
+ QApplicationPrivate::setActiveWindow(&win);
QVERIFY(QTest::qWaitForWindowExposed(&win));
// click center of the blank area on the menubar where Action1 resided
QTest::mouseClick(win.windowHandle(), Qt::LeftButton, Qt::NoModifier, win.menuBar()->geometry().center());
QCoreApplication::sendPostedEvents(); // make sure all queued events also dispatched
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
// QTBUG-56526
@@ -1712,20 +1501,20 @@ void tst_QMenuBar::QTBUG_25669_menubarActionDoubleTriggered()
QSignalSpy spy(win.menuBar(), &QMenuBar::triggered);
win.show();
- QApplication::setActiveWindow(&win);
+ QApplicationPrivate::setActiveWindow(&win);
QVERIFY(QTest::qWaitForWindowExposed(&win));
QPoint posAct1 = menuBarActionWindowPos(win.menuBar(), act1);
QPoint posAct2 = menuBarActionWindowPos(win.menuBar(), act2);
QTest::mouseClick(win.windowHandle(), Qt::LeftButton, Qt::NoModifier, posAct1);
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
QTest::mouseClick(win.windowHandle(), Qt::LeftButton, Qt::NoModifier, posAct2);
- QTRY_COMPARE(spy.count(), 2);
+ QTRY_COMPARE(spy.size(), 2);
QTest::mouseClick(win.windowHandle(), Qt::LeftButton, Qt::NoModifier, posAct2);
- QTRY_COMPARE(spy.count(), 3);
+ QTRY_COMPARE(spy.size(), 3);
}
void tst_QMenuBar::slotForTaskQTBUG53205()
@@ -1749,7 +1538,7 @@ void tst_QMenuBar::taskQTBUG46812_doNotLeaveMenubarHighlighted()
initWindowWithSimpleMenuBar(mainWindow);
mainWindow.show();
- QApplication::setActiveWindow(&mainWindow);
+ QApplicationPrivate::setActiveWindow(&mainWindow);
QVERIFY(QTest::qWaitForWindowActive(&mainWindow));
QVERIFY(!mainWindow.menuBar()->hasFocus());
@@ -1818,6 +1607,32 @@ void tst_QMenuBar::QTBUG_57404_existingMenuItemException()
QTest::qWait(100);
// No crash, all fine. Ideally, there should be only one warning.
}
+
+void tst_QMenuBar::defaultEditMenuItems()
+{
+ class TestTranslator : public QTranslator
+ {
+ public:
+ QString translate(const char *context, const char *sourceText,
+ const char *disambiguation = nullptr, int n = -1) const override
+ {
+ if (QByteArrayView(context) == "QCocoaMenu" && QByteArrayView(sourceText) == "Edit")
+ return QString("Editieren");
+ return QTranslator::translate(context, sourceText, disambiguation, n);
+ }
+ } testTranslator;
+ qApp->installTranslator(&testTranslator);
+
+ QMainWindow mw;
+ mw.show();
+ QVERIFY(QTest::qWaitForWindowActive(&mw));
+
+ mw.menuBar()->addMenu("Editieren")->addAction("Undo");
+
+ mw.hide();
+ mw.show();
+ // this should not crash with infinite recursion
+}
#endif // Q_OS_MACOS
void tst_QMenuBar::taskQTBUG55966_subMenuRemoved()
@@ -1835,7 +1650,7 @@ void tst_QMenuBar::taskQTBUG55966_subMenuRemoved()
delete subMenu;
window.show();
- QApplication::setActiveWindow(&window);
+ QApplicationPrivate::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
QTest::qWait(500);
}
diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm
index 823ca7edfa..55e983a4d1 100644
--- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm
+++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar_mac.mm
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <Cocoa/Cocoa.h>
diff --git a/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST b/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST
index ecb962d8ca..6b96499889 100644
--- a/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST
+++ b/tests/auto/widgets/widgets/qopenglwidget/BLACKLIST
@@ -1,5 +1,7 @@
-[stackWidgetOpaqueChildIsVisible]
-windows-10 msvc-2017
+# Temporary solution COIN-966
+ubuntu
+rhel
+opensuse-leap
# QTBUG-87436
[clearAndGrab]
diff --git a/tests/auto/widgets/widgets/qopenglwidget/CMakeLists.txt b/tests/auto/widgets/widgets/qopenglwidget/CMakeLists.txt
index f32b547329..78cef5300a 100644
--- a/tests/auto/widgets/widgets/qopenglwidget/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qopenglwidget/CMakeLists.txt
@@ -1,14 +1,21 @@
-# Generated from qopenglwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qopenglwidget Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qopenglwidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qopenglwidget
- LOWDPI # special case
+ LOWDPI
SOURCES
tst_qopenglwidget.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
index 3d7bb36f24..773ccd894c 100644
--- a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
+++ b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** 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 <QtOpenGLWidgets/QOpenGLWidget>
#include <QtGui/QOpenGLFunctions>
#include <QtGui/QPainter>
+#include <QtGui/QBackingStore>
#include <QtGui/QScreen>
#include <QtGui/QStaticText>
#include <QtWidgets/QGraphicsView>
@@ -37,12 +13,18 @@
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStackedWidget>
+#include <QtWidgets/QTabWidget>
+#include <QtWidgets/QLabel>
#include <QTest>
#include <QSignalSpy>
#include <private/qguiapplication_p.h>
#include <private/qstatictext_p.h>
#include <private/qopengltextureglyphcache_p.h>
#include <qpa/qplatformintegration.h>
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformbackingstore.h>
+#include <qpa/qplatformintegration.h>
+#include <rhi/qrhi.h>
class tst_QOpenGLWidget : public QObject
{
@@ -54,10 +36,14 @@ private slots:
void clearAndGrab();
void clearAndResizeAndGrab();
void createNonTopLevel();
+#if QT_CONFIG(egl)
+ void deviceLoss();
+#endif
void painter();
void reparentToAlreadyCreated();
void reparentToNotYetCreated();
void reparentHidden();
+ void reparentTopLevel();
void asViewport();
void requestUpdate();
void fboRedirect();
@@ -66,6 +52,9 @@ private slots:
void stackWidgetOpaqueChildIsVisible();
void offscreen();
void offscreenThenOnscreen();
+ void paintWhileHidden();
+ void widgetWindowColorFormat_data();
+ void widgetWindowColorFormat();
#ifdef QT_BUILD_INTERNAL
void staticTextDanglingPointer();
@@ -87,7 +76,7 @@ void tst_QOpenGLWidget::create()
QSignalSpy frameSwappedSpy(w.data(), SIGNAL(frameSwapped()));
w->show();
QVERIFY(QTest::qWaitForWindowExposed(w.data()));
- QVERIFY(frameSwappedSpy.count() > 0);
+ QVERIFY(frameSwappedSpy.size() > 0);
QVERIFY(w->isValid());
QVERIFY(w->context());
@@ -152,6 +141,9 @@ void tst_QOpenGLWidget::clearAndGrab()
void tst_QOpenGLWidget::clearAndResizeAndGrab()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes on Android, figure out why (QTBUG-102043)");
+#endif
QScopedPointer<QOpenGLWidget> w(new ClearWidget(0, 640, 480));
w->resize(640, 480);
w->show();
@@ -179,7 +171,7 @@ void tst_QOpenGLWidget::createNonTopLevel()
w.resize(400, 400);
w.show();
QVERIFY(QTest::qWaitForWindowExposed(&w));
- QVERIFY(frameSwappedSpy.count() > 0);
+ QVERIFY(frameSwappedSpy.size() > 0);
QVERIFY(glw->m_resizeCalled);
glw->m_resizeCalled = false;
@@ -203,10 +195,49 @@ void tst_QOpenGLWidget::createNonTopLevel()
QVERIFY(QOpenGLContext::currentContext() == glw->context() && glw->context());
}
+#if QT_CONFIG(egl)
+void tst_QOpenGLWidget::deviceLoss()
+{
+ QScopedPointer<QOpenGLWidget> w(new ClearWidget(0, 640, 480));
+
+ w->resize(640, 480);
+ w->show();
+
+ auto rhi = w->backingStore()->handle()->rhi();
+ QNativeInterface::QEGLContext *rhiContext = nullptr;
+ if (rhi->backend() == QRhi::OpenGLES2) {
+ auto rhiHandles = static_cast<const QRhiGles2NativeHandles *>(rhi->nativeHandles());
+ rhiContext = rhiHandles->context->nativeInterface<QNativeInterface::QEGLContext>();
+ }
+ if (!rhiContext)
+ QSKIP("deviceLoss needs EGL");
+
+ QVERIFY(QTest::qWaitForWindowExposed(w.data()));
+
+ QImage image = w->grabFramebuffer();
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.width(), w->width());
+ QCOMPARE(image.height(), w->height());
+ QVERIFY(image.pixel(30, 40) == qRgb(255, 0, 0));
+
+ rhiContext->invalidateContext();
+
+ w->resize(600, 600);
+ QSignalSpy frameSwappedSpy(w.get(), &QOpenGLWidget::resized);
+ QTRY_VERIFY(frameSwappedSpy.size() > 0);
+
+ image = w->grabFramebuffer();
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.width(), w->width());
+ QCOMPARE(image.height(), w->height());
+ QVERIFY(image.pixel(30, 40) == qRgb(255, 0, 0));
+}
+#endif
+
class PainterWidget : public QOpenGLWidget, protected QOpenGLFunctions
{
public:
- PainterWidget(QWidget *parent)
+ PainterWidget(QWidget *parent = nullptr)
: QOpenGLWidget(parent), m_clear(false) { }
void initializeGL() override {
@@ -272,6 +303,9 @@ void tst_QOpenGLWidget::reparentToAlreadyCreated()
void tst_QOpenGLWidget::reparentToNotYetCreated()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes on Android, figure out why (QTBUG-102043)");
+#endif
QWidget w1;
PainterWidget *glw = new PainterWidget(&w1);
w1.resize(640, 480);
@@ -320,6 +354,70 @@ void tst_QOpenGLWidget::reparentHidden()
QVERIFY(originalContext != newContext);
}
+void tst_QOpenGLWidget::reparentTopLevel()
+{
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes on Android, figure out why (QTBUG-102043)");
+#endif
+ // no GL content yet, just an ordinary tab widget, top-level
+ QTabWidget tabWidget;
+ tabWidget.resize(640, 480);
+ tabWidget.addTab(new QLabel("Dummy page"), "Page 1");
+ tabWidget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&tabWidget));
+
+ PainterWidget *glw1 = new PainterWidget;
+ // add child GL widget as a tab page
+ {
+ QSignalSpy frameSwappedSpy(glw1, &QOpenGLWidget::frameSwapped);
+ tabWidget.setCurrentIndex(tabWidget.addTab(glw1, "OpenGL widget 1"));
+ QTRY_VERIFY(frameSwappedSpy.size() > 0);
+ }
+
+ PainterWidget *glw2 = new PainterWidget;
+ // add child GL widget #2 as a tab page
+ {
+ QSignalSpy frameSwappedSpy(glw2, &QOpenGLWidget::frameSwapped);
+ tabWidget.setCurrentIndex(tabWidget.addTab(glw2, "OpenGL widget 2"));
+ QTRY_VERIFY(frameSwappedSpy.size() > 0);
+ }
+
+ QImage image = glw2->grabFramebuffer();
+ QVERIFY(image.pixel(20, 10) == qRgb(0, 0, 255));
+
+ // now delete GL widget #2
+ {
+ QSignalSpy frameSwappedSpy(glw1, &QOpenGLWidget::frameSwapped);
+ delete glw2;
+ QTRY_VERIFY(frameSwappedSpy.size() > 0);
+ }
+
+ image = glw1->grabFramebuffer();
+ QVERIFY(image.pixel(20, 10) == qRgb(0, 0, 255));
+
+ // make the GL widget top-level
+ {
+ QSignalSpy frameSwappedSpy(glw1, &QOpenGLWidget::frameSwapped);
+ glw1->setParent(nullptr);
+ glw1->show();
+ QVERIFY(QTest::qWaitForWindowExposed(glw1));
+ QTRY_VERIFY(frameSwappedSpy.size() > 0);
+ }
+
+ image = glw1->grabFramebuffer();
+ QVERIFY(image.pixel(20, 10) == qRgb(0, 0, 255));
+
+ // back to a child widget by readding to the tab widget
+ {
+ QSignalSpy frameSwappedSpy(glw1, &QOpenGLWidget::frameSwapped);
+ tabWidget.setCurrentIndex(tabWidget.addTab(glw1, "Re-added OpenGL widget 1"));
+ QTRY_VERIFY(frameSwappedSpy.size() > 0);
+ }
+
+ image = glw1->grabFramebuffer();
+ QVERIFY(image.pixel(20, 10) == qRgb(0, 0, 255));
+}
+
class CountingGraphicsView : public QGraphicsView
{
public:
@@ -346,6 +444,9 @@ void CountingGraphicsView::drawForeground(QPainter *, const QRectF &)
void tst_QOpenGLWidget::asViewport()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes on Android, figure out why (QTBUG-102043)");
+#endif
// Have a QGraphicsView with a QOpenGLWidget as its viewport.
QGraphicsScene scene;
scene.addItem(new QGraphicsRectItem(10, 10, 100, 100));
@@ -367,6 +468,7 @@ void tst_QOpenGLWidget::asViewport()
// repainted when going from Inactive to Active. So wait for the window to be
// active before we continue, so the activation doesn't happen at a random
// time below. And call processEvents to have the paint events delivered right away.
+ widget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&widget));
qApp->processEvents();
}
@@ -394,8 +496,9 @@ public:
void tst_QOpenGLWidget::requestUpdate()
{
- if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
- QSKIP("Wayland: This fails. Figure out why.");
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes on Android, figure out why (QTBUG-102043)");
+#endif
PaintCountWidget w;
w.resize(640, 480);
@@ -421,6 +524,9 @@ public:
void tst_QOpenGLWidget::fboRedirect()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes on Android, figure out why (QTBUG-102043)");
+#endif
FboCheckWidget w;
w.resize(640, 480);
w.show();
@@ -436,6 +542,9 @@ void tst_QOpenGLWidget::fboRedirect()
void tst_QOpenGLWidget::showHide()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes on Android, figure out why (QTBUG-102043)");
+#endif
QScopedPointer<ClearWidget> w(new ClearWidget(0, 800, 600));
w->resize(800, 600);
w->show();
@@ -460,41 +569,187 @@ void tst_QOpenGLWidget::showHide()
QVERIFY(image.pixel(30, 40) == qRgb(0, 0, 255));
}
+QtMessageHandler oldHandler = nullptr;
+
+void nativeWindowMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
+{
+ if (oldHandler)
+ oldHandler(type, context, msg);
+
+ if (type == QtWarningMsg
+ && (msg.contains("QOpenGLContext::makeCurrent() called with non-opengl surface")
+ || msg.contains("Failed to make context current")))
+ {
+ QFAIL("Unexpected warning got printed");
+ }
+}
+
void tst_QOpenGLWidget::nativeWindow()
{
- QScopedPointer<ClearWidget> w(new ClearWidget(0, 800, 600));
- w->resize(800, 600);
- w->show();
- w->winId();
- QVERIFY(QTest::qWaitForWindowExposed(w.data()));
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes on Android, figure out why (QTBUG-102043)");
+#endif
- QImage image = w->grabFramebuffer();
- QVERIFY(!image.isNull());
- QCOMPARE(image.width(), w->width());
- QCOMPARE(image.height(), w->height());
- QVERIFY(image.pixel(30, 40) == qRgb(255, 0, 0));
- QVERIFY(w->internalWinId());
-
- // Now as a native child.
- QWidget nativeParent;
- nativeParent.resize(800, 600);
- nativeParent.setAttribute(Qt::WA_NativeWindow);
- ClearWidget *child = new ClearWidget(0, 800, 600);
- child->setClearColor(0, 1, 0);
- child->setParent(&nativeParent);
- child->resize(400, 400);
- child->move(23, 34);
- nativeParent.show();
- QVERIFY(QTest::qWaitForWindowExposed(&nativeParent));
-
- QVERIFY(nativeParent.internalWinId());
- QVERIFY(!child->internalWinId());
-
- image = child->grabFramebuffer();
- QVERIFY(!image.isNull());
- QCOMPARE(image.width(), child->width());
- QCOMPARE(image.height(), child->height());
- QVERIFY(image.pixel(30, 40) == qRgb(0, 255, 0));
+ // NB these tests do not fully verify that native child widgets are fully
+ // functional since there is no guarantee that the content is composed and
+ // presented correctly as we can only do verification with
+ // grabFramebuffer() here which only exercises a part of the pipeline.
+
+ // Install a message handler that looks for some typical warnings from
+ // QRhi/QOpenGLConext that occur when the RHI-related logic in widgets goes wrong.
+ oldHandler = qInstallMessageHandler(nativeWindowMessageHandler);
+
+ {
+ QScopedPointer<ClearWidget> w(new ClearWidget(nullptr, 800, 600));
+ w->resize(800, 600);
+ w->show();
+ w->winId();
+ QVERIFY(QTest::qWaitForWindowExposed(w.data()));
+
+ QImage image = w->grabFramebuffer();
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.width(), w->width());
+ QCOMPARE(image.height(), w->height());
+ QVERIFY(image.pixel(30, 40) == qRgb(255, 0, 0));
+ QVERIFY(w->internalWinId());
+ }
+
+ // QTBUG-113557: a plain _raster_ QWidget that is a _native_ child in a toplevel
+ // combined with a RHI-based (non-native) widget (QOpenGLWidget in this case)
+ // in the same toplevel.
+ {
+ QWidget topLevel;
+ topLevel.resize(800, 600);
+
+ ClearWidget *child = new ClearWidget(&topLevel, 800, 600);
+ child->setClearColor(1, 0, 0);
+ child->resize(400, 400);
+ child->move(23, 34);
+
+ QWidget *raster = new QWidget(&topLevel);
+ raster->setGeometry(23, 240, 120, 120);
+ raster->setStyleSheet("QWidget { background-color: yellow; }");
+
+ raster->winId();
+
+ topLevel.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+
+ // Do not bother checking the output, i.e. if the yellow raster native child
+ // shows up as it should, but rather rely on the message handler catching the
+ // qWarnings if they occur.
+ }
+
+ // Now with the QOpenGLWidget being a native child
+ {
+ QWidget topLevel;
+ topLevel.resize(800, 600);
+
+ ClearWidget *child = new ClearWidget(nullptr, 800, 600);
+ child->setParent(&topLevel);
+
+ // make it a native child (native window, but not top-level -> no backingstore)
+ child->winId();
+
+ child->setClearColor(0, 1, 0);
+ child->resize(400, 400);
+ child->move(23, 34);
+
+ topLevel.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+
+ QVERIFY(topLevel.internalWinId());
+ QVERIFY(child->internalWinId());
+
+ QImage image = child->grabFramebuffer();
+ QVERIFY(!image.isNull());
+ QCOMPARE(image.width(), child->width());
+ QCOMPARE(image.height(), child->height());
+ QVERIFY(image.pixel(30, 40) == qRgb(0, 255, 0));
+ }
+
+ // Now the same with WA_NativeWindow instead
+ {
+ QWidget topLevel;
+ topLevel.resize(800, 600);
+
+ ClearWidget *child = new ClearWidget(nullptr, 800, 600);
+ child->setParent(&topLevel);
+
+ // make it a native child (native window, but not top-level -> no backingstore)
+ child->setAttribute(Qt::WA_NativeWindow);
+
+ child->setClearColor(0, 1, 0);
+ child->resize(400, 400);
+ child->move(23, 34);
+
+ topLevel.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+
+ QVERIFY(child->internalWinId());
+
+ QImage image = child->grabFramebuffer();
+ QCOMPARE(image.width(), child->width());
+ QCOMPARE(image.height(), child->height());
+ QVERIFY(image.pixel(30, 40) == qRgb(0, 255, 0));
+ }
+
+ // Now as a child of a native child
+ {
+ QWidget topLevel;
+ topLevel.resize(800, 600);
+
+ QWidget *container = new QWidget(&topLevel);
+ // make it a native child (native window, but not top-level -> no backingstore)
+ container->winId();
+
+ ClearWidget *child = new ClearWidget(nullptr, 800, 600);
+ // set the parent separately, this is important, see next test case
+ child->setParent(container);
+ child->setClearColor(0, 0, 1);
+ child->resize(400, 400);
+ child->move(23, 34);
+
+ topLevel.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+
+ QVERIFY(topLevel.internalWinId());
+ QVERIFY(container->internalWinId());
+ QVERIFY(!child->internalWinId());
+
+ QImage image = child->grabFramebuffer();
+ QCOMPARE(image.width(), child->width());
+ QCOMPARE(image.height(), child->height());
+ QVERIFY(image.pixel(30, 40) == qRgb(0, 0, 255));
+ }
+
+ // Again as a child of a native child, but this time specifying the parent
+ // upon construction, not with an explicit setParent() call afterwards.
+ {
+ QWidget topLevel;
+ topLevel.resize(800, 600);
+ QWidget *container = new QWidget(&topLevel);
+ container->winId();
+ // parent it right away
+ ClearWidget *child = new ClearWidget(container, 800, 600);
+ child->setClearColor(0, 0, 1);
+ child->resize(400, 400);
+ child->move(23, 34);
+ topLevel.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+ QVERIFY(topLevel.internalWinId());
+ QVERIFY(container->internalWinId());
+ QVERIFY(!child->internalWinId());
+ QImage image = child->grabFramebuffer();
+ QCOMPARE(image.width(), child->width());
+ QCOMPARE(image.height(), child->height());
+ QVERIFY(image.pixel(30, 40) == qRgb(0, 0, 255));
+ }
+
+ if (oldHandler) {
+ qInstallMessageHandler(oldHandler);
+ oldHandler = nullptr;
+ }
}
static inline QString msgRgbMismatch(unsigned actual, unsigned expected)
@@ -533,50 +788,59 @@ static QPixmap grabWidgetWithoutRepaint(const QWidget *widget, QRect clipArea)
bool verifyColor(const QWidget *widget, const QRect &clipArea, const QColor &color, int callerLine)
{
- for (int t = 0; t < 6; t++) {
- const QPixmap pixmap = grabWidgetWithoutRepaint(widget, clipArea);
- if (!QTest::qCompare(pixmap.size(),
- clipArea.size(),
- "pixmap.size()",
- "rect.size()",
- __FILE__,
- callerLine))
- return false;
-
-
- const QImage image = pixmap.toImage();
- QPixmap expectedPixmap(pixmap); /* ensure equal formats */
- expectedPixmap.detach();
- expectedPixmap.fill(color);
-
+ // Create a comparison target image
+ QPixmap expectedPixmap(grabWidgetWithoutRepaint(widget, clipArea)); /* ensure equal formats */
+ expectedPixmap.detach();
+ expectedPixmap.fill(color);
+ const QImage expectedImage = expectedPixmap.toImage();
+
+ // test image size
+ QPixmap pixmap;
+ auto testSize = [&](){
+ pixmap = grabWidgetWithoutRepaint(widget, clipArea);
+ return pixmap.size() == clipArea.size();
+ };
+
+ // test the first pixel's color
+ uint firstPixel;
+ auto testPixel = [&](){
+ const QImage image = grabWidgetWithoutRepaint(widget, clipArea).toImage();
uint alphaCorrection = image.format() == QImage::Format_RGB32 ? 0xff000000 : 0;
- uint firstPixel = image.pixel(0,0) | alphaCorrection;
-
- // Retry a couple of times. Some window managers have transparency animation, or are
- // just slow to render.
- if (t < 5) {
- if (firstPixel == QColor(color).rgb()
- && image == expectedPixmap.toImage())
- return true;
- else
- QTest::qWait(200);
- } else {
- if (!QTest::qVerify(firstPixel == QColor(color).rgb(),
- "firstPixel == QColor(color).rgb()",
- qPrintable(msgRgbMismatch(firstPixel, QColor(color).rgb())),
- __FILE__, callerLine)) {
- return false;
- }
- if (!QTest::qVerify(image == expectedPixmap.toImage(),
- "image == expectedPixmap.toImage()",
- "grabbed pixmap differs from expected pixmap",
- __FILE__, callerLine)) {
- return false;
- }
- }
+ firstPixel = image.pixel(0,0) | alphaCorrection;
+ return firstPixel == QColor(color).rgb();
+ };
+
+ // test the rendered image
+ QImage image;
+ auto testImage = [&](){
+ image = grabWidgetWithoutRepaint(widget, clipArea).toImage();
+ return image == expectedImage;
+ };
+
+ // Perform checks and make test case fail if unsuccessful
+ if (!QTest::qWaitFor(testSize))
+ return QTest::qCompare(pixmap.size(),
+ clipArea.size(),
+ "pixmap.size()",
+ "rect.size()",
+ __FILE__,
+ callerLine);
+
+ if (!QTest::qWaitFor(testPixel)) {
+ return QTest::qVerify(firstPixel == QColor(color).rgb(),
+ "firstPixel == QColor(color).rgb()",
+ qPrintable(msgRgbMismatch(firstPixel, QColor(color).rgb())),
+ __FILE__, callerLine);
}
- return false;
+ if (!QTest::qWaitFor(testImage)) {
+ return QTest::qVerify(image == expectedImage,
+ "image == expectedPixmap.toImage()",
+ "grabbed pixmap differs from expected pixmap",
+ __FILE__, callerLine);
+ }
+
+ return true;
}
void tst_QOpenGLWidget::stackWidgetOpaqueChildIsVisible()
@@ -585,8 +849,11 @@ void tst_QOpenGLWidget::stackWidgetOpaqueChildIsVisible()
QSKIP("QScreen::grabWindow() doesn't work properly on OSX HighDPI screen: QTBUG-46803");
return;
#endif
- if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
- QSKIP("Wayland: This fails. Figure out why.");
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes on Android, figure out why (QTBUG-102043)");
+#endif
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
+ QSKIP("Platform does not support window activation");
if (QGuiApplication::platformName().startsWith(QLatin1String("offscreen"), Qt::CaseInsensitive))
QSKIP("Offscreen: This fails.");
@@ -606,11 +873,12 @@ void tst_QOpenGLWidget::stackWidgetOpaqueChildIsVisible()
stack.resize(dimensionSize, dimensionSize);
stack.show();
QVERIFY(QTest::qWaitForWindowExposed(&stack));
+ stack.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&stack));
// Switch to the QOpenGLWidget.
stack.setCurrentIndex(1);
- QTRY_COMPARE(clearWidget->m_paintCalled, true);
+ QTRY_VERIFY(clearWidget->m_paintCalled);
// Resize the tested region to be half size in the middle, because some OSes make the widget
// have rounded corners (e.g. OSX), and the grabbed window pixmap will not coincide perfectly
@@ -671,6 +939,9 @@ void tst_QOpenGLWidget::offscreen()
void tst_QOpenGLWidget::offscreenThenOnscreen()
{
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes on Android, figure out why (QTBUG-102043)");
+#endif
QScopedPointer<ClearWidget> w(new ClearWidget(0, 800, 600));
w->resize(800, 600);
@@ -694,6 +965,57 @@ void tst_QOpenGLWidget::offscreenThenOnscreen()
QVERIFY(image.pixel(30, 40) == qRgb(0, 0, 255));
}
+void tst_QOpenGLWidget::paintWhileHidden()
+{
+#ifdef Q_OS_ANDROID
+ QSKIP("Crashes on Android, figure out why (QTBUG-102043)");
+#endif
+ QScopedPointer<QWidget> tlw(new QWidget);
+ tlw->resize(640, 480);
+
+ ClearWidget *w = new ClearWidget(0, 640, 480);
+ w->setParent(tlw.data());
+ w->setClearColor(0, 0, 1);
+
+ tlw->show();
+ QVERIFY(QTest::qWaitForWindowExposed(tlw.data()));
+
+ // QTBUG-101620: Now make visible=false and call update and see if we get to
+ // paintEvent/paintGL eventually, to ensure the updating of the texture is
+ // not optimized permanently away even though there is no composition
+ // on-screen at the point when update() is called.
+
+ w->setVisible(false);
+ w->m_paintCalled = false;
+ w->update();
+ w->setVisible(true);
+ QTRY_VERIFY(w->m_paintCalled);
+}
+
+void tst_QOpenGLWidget::widgetWindowColorFormat_data()
+{
+ QTest::addColumn<bool>("translucent");
+ QTest::newRow("Translucent background disabled") << false;
+ QTest::newRow("Translucent background enabled") << true;
+}
+
+void tst_QOpenGLWidget::widgetWindowColorFormat()
+{
+ QFETCH(bool, translucent);
+
+ QOpenGLWidget w;
+ w.setAttribute(Qt::WA_TranslucentBackground, translucent);
+ w.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
+ w.setFixedSize(16, 16);
+ w.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+
+ QOpenGLContext *ctx = QOpenGLContext::currentContext();
+ QCOMPARE(w.format().redBufferSize(), ctx->format().redBufferSize());
+ QCOMPARE(w.format().greenBufferSize(), ctx->format().greenBufferSize());
+ QCOMPARE(w.format().blueBufferSize(), ctx->format().blueBufferSize());
+}
+
class StaticTextPainterWidget : public QOpenGLWidget
{
public:
diff --git a/tests/auto/widgets/widgets/qplaintextedit/BLACKLIST b/tests/auto/widgets/widgets/qplaintextedit/BLACKLIST
deleted file mode 100644
index b71f2fcc0a..0000000000
--- a/tests/auto/widgets/widgets/qplaintextedit/BLACKLIST
+++ /dev/null
@@ -1,15 +0,0 @@
-# QTBUG-87423
-[copyAvailable]
-android
-[adjustScrollbars]
-android
-# QTBUG-89402
-[undoAvailableAfterPaste]
-android
-[copyAndSelectAllInReadonly]
-android
-[canPaste]
-android
-[updateCursorPositionAfterEdit]
-android
-
diff --git a/tests/auto/widgets/widgets/qplaintextedit/CMakeLists.txt b/tests/auto/widgets/widgets/qplaintextedit/CMakeLists.txt
index a339b158c2..b7528498cb 100644
--- a/tests/auto/widgets/widgets/qplaintextedit/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qplaintextedit/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qplaintextedit.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qplaintextedit Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qplaintextedit LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qplaintextedit
SOURCES
tst_qplaintextedit.cpp
INCLUDE_DIRECTORIES
..
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
@@ -20,6 +27,6 @@ qt_internal_add_test(tst_qplaintextedit
#####################################################################
qt_internal_extend_target(tst_qplaintextedit CONDITION MACOS
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWAppKit}
)
diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
index 297eb5ec51..ca7cc6d4b4 100644
--- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp
+++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.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 <QTest>
@@ -38,6 +13,7 @@
#include <qclipboard.h>
#include <qtextbrowser.h>
#include <private/qwidgettextcontrol_p.h>
+#include <private/qplaintextedit_p.h>
#include <qscrollbar.h>
#include <qtextobject.h>
#include <qmenu.h>
@@ -143,7 +119,7 @@ private slots:
void layoutAfterMultiLineRemove();
void undoCommandRemovesAndReinsertsBlock();
void taskQTBUG_43562_lineCountCrash();
-#ifndef QT_NO_CONTEXTMENU
+#if !defined(QT_NO_CONTEXTMENU) && !defined(QT_NO_CLIPBOARD)
void contextMenu();
#endif
void inputMethodCursorRect();
@@ -154,6 +130,10 @@ private slots:
void updateCursorPositionAfterEdit();
#endif
void appendTextWhenInvisible();
+ void placeholderVisibility_data();
+ void placeholderVisibility();
+ void scrollBarSignals();
+ void dontCrashWithCss();
private:
void createSelection();
@@ -415,7 +395,7 @@ void tst_QPlainTextEdit::cursorPositionChanged()
spy.clear();
QTest::keyClick(ed, Qt::Key_A);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QTextCursor cursor = ed->textCursor();
cursor.movePosition(QTextCursor::Start);
@@ -423,23 +403,23 @@ void tst_QPlainTextEdit::cursorPositionChanged()
cursor.movePosition(QTextCursor::End);
spy.clear();
cursor.insertText("Test");
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
cursor.movePosition(QTextCursor::End);
ed->setTextCursor(cursor);
cursor.movePosition(QTextCursor::Start);
spy.clear();
cursor.insertText("Test");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
QTest::keyClick(ed, Qt::Key_Left);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
CursorPositionChangedRecorder spy2(ed);
QVERIFY(ed->textCursor().position() > 0);
ed->setPlainText("Hello World");
- QCOMPARE(spy2.cursorPositions.count(), 1);
+ QCOMPARE(spy2.cursorPositions.size(), 1);
QCOMPARE(spy2.cursorPositions.at(0), 0);
QCOMPARE(ed->textCursor().position(), 0);
}
@@ -456,7 +436,7 @@ void tst_QPlainTextEdit::setTextCursor()
spy.clear();
ed->setTextCursor(cursor);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
#ifndef QT_NO_CLIPBOARD
@@ -473,7 +453,7 @@ void tst_QPlainTextEdit::undoAvailableAfterPaste()
const QString txt("Test");
QApplication::clipboard()->setText(txt);
ed->paste();
- QVERIFY(spy.count() >= 1);
+ QVERIFY(spy.size() >= 1);
QCOMPARE(ed->toPlainText(), txt);
}
#endif
@@ -727,16 +707,16 @@ void tst_QPlainTextEdit::noPropertiesOnDefaultTextEditCharFormat()
// on a text edit. Font properties instead should be taken from the
// widget's font (in sync with defaultFont property in document) and the
// foreground color should be taken from the palette.
- QCOMPARE(ed->textCursor().charFormat().properties().count(), 0);
+ QCOMPARE(ed->textCursor().charFormat().properties().size(), 0);
}
void tst_QPlainTextEdit::setPlainTextShouldEmitTextChangedOnce()
{
QSignalSpy spy(ed, SIGNAL(textChanged()));
ed->setPlainText("Yankee Doodle");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
ed->setPlainText("");
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_QPlainTextEdit::overwriteMode()
@@ -1016,7 +996,7 @@ void tst_QPlainTextEdit::copyAvailable_data()
//Tests the copyAvailable slot for several cases
void tst_QPlainTextEdit::copyAvailable()
{
- QFETCH(pairListType,keystrokes);
+ QFETCH(const pairListType, keystrokes);
QFETCH(QList<bool>, copyAvailable);
QFETCH(QString, function);
@@ -1029,9 +1009,8 @@ void tst_QPlainTextEdit::copyAvailable()
QSignalSpy spyCopyAvailabe(ed, SIGNAL(copyAvailable(bool)));
//Execute Keystrokes
- foreach(keyPairType keyPair, keystrokes) {
+ for (keyPairType keyPair : keystrokes)
QTest::keyClick(ed, keyPair.first, keyPair.second );
- }
//Execute ed->"function"
if (function == "cut")
@@ -1048,8 +1027,8 @@ void tst_QPlainTextEdit::copyAvailable()
//Compare spied signals
QEXPECT_FAIL("Case7 T,A,A, <- + shift, <- + shift, <- + shift, ctrl + x, undo() | signals: true, false, true",
"Wrong undo selection behaviour. Should be fixed in some future release. (See task: 132482)", Abort);
- QCOMPARE(spyCopyAvailabe.count(), copyAvailable.count());
- for (int i=0;i<spyCopyAvailabe.count(); i++) {
+ QCOMPARE(spyCopyAvailabe.size(), copyAvailable.size());
+ for (int i=0;i<spyCopyAvailabe.size(); i++) {
QVariant variantSpyCopyAvailable = spyCopyAvailabe.at(i).at(0);
QVERIFY2(variantSpyCopyAvailable.toBool() == copyAvailable.at(i), QString("Spied singnal: %1").arg(i).toLatin1());
}
@@ -1085,10 +1064,10 @@ void tst_QPlainTextEdit::moveCursor()
QCOMPARE(ed->textCursor().position(), 0);
ed->moveCursor(QTextCursor::NextCharacter);
QCOMPARE(ed->textCursor().position(), 1);
- QCOMPARE(cursorMovedSpy.count(), 1);
+ QCOMPARE(cursorMovedSpy.size(), 1);
ed->moveCursor(QTextCursor::NextCharacter, QTextCursor::KeepAnchor);
QCOMPARE(ed->textCursor().position(), 2);
- QCOMPARE(cursorMovedSpy.count(), 2);
+ QCOMPARE(cursorMovedSpy.size(), 2);
QCOMPARE(ed->textCursor().selectedText(), QString("e"));
}
@@ -1300,7 +1279,7 @@ void tst_QPlainTextEdit::ensureVisibleWithRtl()
ed->setLayoutDirection(Qt::RightToLeft);
ed->setLineWrapMode(QPlainTextEdit::NoWrap);
QString txt(500, QChar(QLatin1Char('a')));
- QCOMPARE(txt.length(), 500);
+ QCOMPARE(txt.size(), 500);
ed->setPlainText(txt);
ed->resize(100, 100);
ed->show();
@@ -1353,7 +1332,7 @@ void tst_QPlainTextEdit::extraSelections()
ed->setExtraSelections(QList<QTextEdit::ExtraSelection>() << sel);
QList<QTextEdit::ExtraSelection> selections = ed->extraSelections();
- QCOMPARE(selections.count(), 1);
+ QCOMPARE(selections.size(), 1);
QCOMPARE(selections.at(0).cursor.position(), endPos);
QCOMPARE(selections.at(0).cursor.anchor(), wordPos);
}
@@ -1368,7 +1347,9 @@ void tst_QPlainTextEdit::adjustScrollbars()
ed->setFont(ff);
ed->setMinimumSize(140, 100);
ed->setMaximumSize(140, 100);
- ed->show();
+ // We use showNormal() here, because otherwise on Android the widget will
+ // be shown fullscreen, and the scrollbar will not appear.
+ ed->showNormal();
QLatin1String txt("\nabc def ghi jkl mno pqr stu vwx");
ed->setPlainText(txt + txt + txt + txt);
@@ -1481,44 +1462,44 @@ void tst_QPlainTextEdit::selectionChanged()
QTest::keyClick(ed, Qt::Key_Right);
QCOMPARE(ed->textCursor().position(), 1);
- QCOMPARE(selectionChangedSpy.count(), 0);
+ QCOMPARE(selectionChangedSpy.size(), 0);
QTest::keyClick(ed, Qt::Key_Right, Qt::ShiftModifier);
QCOMPARE(ed->textCursor().position(), 2);
- QCOMPARE(selectionChangedSpy.count(), 1);
+ QCOMPARE(selectionChangedSpy.size(), 1);
QTest::keyClick(ed, Qt::Key_Right, Qt::ShiftModifier);
QCOMPARE(ed->textCursor().position(), 3);
- QCOMPARE(selectionChangedSpy.count(), 2);
+ QCOMPARE(selectionChangedSpy.size(), 2);
QTest::keyClick(ed, Qt::Key_Right, Qt::ShiftModifier);
QCOMPARE(ed->textCursor().position(), 4);
- QCOMPARE(selectionChangedSpy.count(), 3);
+ QCOMPARE(selectionChangedSpy.size(), 3);
QTest::keyClick(ed, Qt::Key_Right);
QCOMPARE(ed->textCursor().position(), 4);
- QCOMPARE(selectionChangedSpy.count(), 4);
+ QCOMPARE(selectionChangedSpy.size(), 4);
QTest::keyClick(ed, Qt::Key_Right);
QCOMPARE(ed->textCursor().position(), 5);
- QCOMPARE(selectionChangedSpy.count(), 4);
+ QCOMPARE(selectionChangedSpy.size(), 4);
}
void tst_QPlainTextEdit::blockCountChanged()
{
QSignalSpy blockCountCpangedSpy(ed, SIGNAL(blockCountChanged(int)));
ed->setPlainText("Hello");
- QCOMPARE(blockCountCpangedSpy.count(), 0);
+ QCOMPARE(blockCountCpangedSpy.size(), 0);
ed->setPlainText("Hello World");
- QCOMPARE(blockCountCpangedSpy.count(), 0);
+ QCOMPARE(blockCountCpangedSpy.size(), 0);
ed->setPlainText("Hello \n World \n this \n has \n more \n blocks \n than \n just \n one");
- QCOMPARE(blockCountCpangedSpy.count(), 1);
+ QCOMPARE(blockCountCpangedSpy.size(), 1);
ed->setPlainText("One");
- QCOMPARE(blockCountCpangedSpy.count(), 2);
+ QCOMPARE(blockCountCpangedSpy.size(), 2);
ed->setPlainText("One \n Two");
- QCOMPARE(blockCountCpangedSpy.count(), 3);
+ QCOMPARE(blockCountCpangedSpy.size(), 3);
ed->setPlainText("Three \n Four");
- QCOMPARE(blockCountCpangedSpy.count(), 3);
+ QCOMPARE(blockCountCpangedSpy.size(), 3);
}
@@ -1696,7 +1677,7 @@ void tst_QPlainTextEdit::taskQTBUG_43562_lineCountCrash()
disconnect(ed->document(), SIGNAL(contentsChange(int, int, int)), 0, 0);
}
-#ifndef QT_NO_CONTEXTMENU
+#if !defined(QT_NO_CONTEXTMENU) && !defined(QT_NO_CLIPBOARD)
void tst_QPlainTextEdit::contextMenu()
{
ed->appendHtml(QStringLiteral("Hello <a href='http://www.qt.io'>Qt</a>"));
@@ -1719,7 +1700,7 @@ void tst_QPlainTextEdit::contextMenu()
QVERIFY(!ed->findChild<QAction *>(QStringLiteral("link-copy")));
QTextCursor cursor = ed->textCursor();
- cursor.setPosition(ed->toPlainText().length() - 2);
+ cursor.setPosition(ed->toPlainText().size() - 2);
ed->setTextCursor(cursor);
menu = ed->createStandardContextMenu(ed->cursorRect().center());
@@ -1730,7 +1711,7 @@ void tst_QPlainTextEdit::contextMenu()
delete menu;
QVERIFY(!ed->findChild<QAction *>(QStringLiteral("link-copy")));
}
-#endif // QT_NO_CONTEXTMENU
+#endif // QT_NO_CONTEXTMENU && QT_NO_CLIPBOARD
// QTBUG-51923: Verify that the cursor rectangle returned by the input
// method query correctly reflects the viewport offset.
@@ -1802,7 +1783,7 @@ void tst_QPlainTextEdit::updateCursorPositionAfterEdit()
QTest::keyClick(&plaintextEdit, Qt::Key_Up);
// The curser should move back to the end of the copied text
- QCOMPARE(plaintextEdit.textCursor().position(), initialPosition + txt.length());
+ QCOMPARE(plaintextEdit.textCursor().position(), initialPosition + txt.size());
}
#endif
@@ -1837,5 +1818,141 @@ void tst_QPlainTextEdit::appendTextWhenInvisible()
QCOMPARE(maxAfterAppend, maxAfterSet);
}
+enum SetupCommand {
+ ClearPlaceHolder, // set empty placeholder text
+ SetPlaceHolder, // set a non-empty placeholder text
+ ClearContent, // set empty text as content
+ SetContent // set non-empty text as content
+};
+
+void tst_QPlainTextEdit::placeholderVisibility_data()
+{
+ QTest::addColumn<QList<SetupCommand>>("setupCommands");
+ QTest::addColumn<bool>("placeholderVisible");
+ QTest::addRow("no placeholder set + no text set")
+ << QList<SetupCommand>{} << false;
+ QTest::addRow("no placeholder set + text set or text set + no placeholder set")
+ << QList<SetupCommand>{ SetContent } << false;
+ QTest::addRow("no placeholder set + text set + empty text set")
+ << QList<SetupCommand>{ SetContent , ClearContent }
+ << false;
+ QTest::addRow("no placeholder set + empty text set + text set")
+ << QList<SetupCommand>{ ClearContent, SetContent }
+ << false;
+ QTest::addRow("empty placeholder set + no text set")
+ << QList<SetupCommand>{ ClearPlaceHolder } << false;
+ QTest::addRow("empty placeholder set + text set")
+ << QList<SetupCommand>{ ClearPlaceHolder, SetContent }
+ << false;
+ QTest::addRow("empty placeholder set + text set + empty text set")
+ << QList<SetupCommand>{ ClearPlaceHolder, SetContent, ClearContent }
+ << false;
+ QTest::addRow("empty placeholder set + empty text set + text set")
+ << QList<SetupCommand>{ ClearPlaceHolder, ClearContent, SetContent }
+ << false;
+ QTest::addRow("placeholder set + no text set")
+ << QList<SetupCommand>{ SetPlaceHolder, ClearContent }
+ << true;
+ QTest::addRow("placeholder set + text set")
+ << QList<SetupCommand>{ SetPlaceHolder, SetContent }
+ << false;
+ QTest::addRow("placeholder set + text set + empty text set")
+ << QList<SetupCommand>{ SetPlaceHolder, SetContent, ClearContent }
+ << true;
+ QTest::addRow("placeholder set + empty text set + text set")
+ << QList<SetupCommand>{ SetPlaceHolder, ClearContent, SetContent }
+ << false;
+ QTest::addRow("placeholder set + text set + empty placeholder set")
+ << QList<SetupCommand>{ SetPlaceHolder, SetContent, ClearPlaceHolder}
+ << false;
+ QTest::addRow("placeholder set + empty placeholder set + text set")
+ << QList<SetupCommand>{ SetPlaceHolder, ClearPlaceHolder, SetContent }
+ << false;
+ QTest::addRow("placeholder set + empty placeholder set + empty text set")
+ << QList<SetupCommand>{ SetPlaceHolder, ClearPlaceHolder, ClearContent }
+ << false;
+ QTest::addRow("placeholder set + empty text set + empty placeholder set")
+ << QList<SetupCommand>{ SetPlaceHolder, ClearContent, ClearPlaceHolder }
+ << false;
+ QTest::addRow("text set + no placeholder set + empty text set")
+ << QList<SetupCommand>{ SetContent, ClearContent }
+ << false;
+ QTest::addRow("text set + empty placeholder set")
+ << QList<SetupCommand>{ SetContent, ClearPlaceHolder }
+ << false;
+ QTest::addRow("text set + placeholder set")
+ << QList<SetupCommand>{ SetContent, SetPlaceHolder }
+ << false;
+ QTest::addRow("text set + placeholder set + empty text set")
+ << QList<SetupCommand>{ SetContent, SetPlaceHolder, ClearContent }
+ << true;
+ QTest::addRow("text set + placeholder set + empty placeholder set")
+ << QList<SetupCommand>{ SetContent, SetPlaceHolder, ClearPlaceHolder }
+ << false;
+}
+
+void tst_QPlainTextEdit::placeholderVisibility()
+{
+ QFETCH(QList<SetupCommand>, setupCommands);
+ QFETCH(bool, placeholderVisible);
+
+ QPlainTextEdit plainTextEdit;
+ for (auto command : setupCommands) {
+ switch (command) {
+ case ClearPlaceHolder:
+ plainTextEdit.setPlaceholderText("");
+ break;
+ case SetPlaceHolder:
+ plainTextEdit.setPlaceholderText("Qt is awesome !");
+ break;
+ case ClearContent:
+ plainTextEdit.setPlainText("");
+ break;
+ case SetContent:
+ plainTextEdit.setPlainText("PlainText...");
+ break;
+ }
+ }
+ auto *plainTextEdit_d = static_cast<QPlainTextEditPrivate *>(qt_widget_private(&plainTextEdit));
+
+ plainTextEdit.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&plainTextEdit));
+ QTRY_COMPARE(plainTextEdit_d->placeholderTextShown, placeholderVisible);
+}
+
+
+void tst_QPlainTextEdit::scrollBarSignals()
+{
+ QPlainTextEdit plainTextEdit;
+ QString longText;
+ for (uint i = 0; i < 500; ++i)
+ longText += "This is going to be a very long text for scroll signal testing.\n";
+ plainTextEdit.setPlainText(longText);
+ QScrollBar *vbar = plainTextEdit.verticalScrollBar();
+ plainTextEdit.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&plainTextEdit));
+ QSignalSpy spy(vbar, &QScrollBar::valueChanged);
+
+ QTest::keyClick(vbar, Qt::Key_Down);
+ QTRY_COMPARE(spy.count(), 1);
+ QTest::keyClick(vbar, Qt::Key_PageDown);
+ QTRY_COMPARE(spy.count(), 2);
+ QTest::keyClick(vbar, Qt::Key_PageDown);
+ QTRY_COMPARE(spy.count(), 3);
+ QTest::keyClick(vbar, Qt::Key_Up);
+ QTRY_COMPARE(spy.count(), 4);
+ QTest::keyClick(vbar, Qt::Key_PageUp);
+ QTRY_COMPARE(spy.count(), 5);
+}
+
+void tst_QPlainTextEdit::dontCrashWithCss()
+{
+ qApp->setStyleSheet("QWidget { font: 10pt; }");
+ QPlainTextEdit edit;
+ edit.show();
+ qApp->setStyleSheet(QString());
+}
+
+
QTEST_MAIN(tst_QPlainTextEdit)
#include "tst_qplaintextedit.moc"
diff --git a/tests/auto/widgets/widgets/qprogressbar/CMakeLists.txt b/tests/auto/widgets/widgets/qprogressbar/CMakeLists.txt
index 699ba0a2f1..61ce6c2692 100644
--- a/tests/auto/widgets/widgets/qprogressbar/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qprogressbar/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qprogressbar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qprogressbar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qprogressbar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qprogressbar
SOURCES
tst_qprogressbar.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp b/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp
index 5c08ac4e3e..4a90ed6667 100644
--- a/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.cpp
+++ b/tests/auto/widgets/widgets/qprogressbar/tst_qprogressbar.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 <QTest>
@@ -36,6 +11,8 @@
#include <qtimer.h>
#include <QStyleFactory>
+#include <QtWidgets/private/qapplication_p.h>
+
class tst_QProgressBar : public QObject
{
Q_OBJECT
@@ -248,7 +225,7 @@ void tst_QProgressBar::setMinMaxRepaint()
pbar.setFormat("%v");
pbar.move(300, 300);
pbar.show();
- qApp->setActiveWindow(&pbar);
+ QApplicationPrivate::setActiveWindow(&pbar);
QVERIFY(QTest::qWaitForWindowActive(&pbar));
// No repaint when setting minimum to the current minimum
diff --git a/tests/auto/widgets/widgets/qpushbutton/CMakeLists.txt b/tests/auto/widgets/widgets/qpushbutton/CMakeLists.txt
index 0ec5c1fe09..afd052fa17 100644
--- a/tests/auto/widgets/widgets/qpushbutton/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qpushbutton/CMakeLists.txt
@@ -1,13 +1,22 @@
-# Generated from qpushbutton.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qpushbutton Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qpushbutton LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qpushbutton
SOURCES
tst_qpushbutton.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
+ Qt::GuiPrivate
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp b/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp
index 60b5bebdaf..92ce1f5419 100644
--- a/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.cpp
+++ b/tests/auto/widgets/widgets/qpushbutton/tst_qpushbutton.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 <QTest>
@@ -40,6 +15,12 @@
#include <QGridLayout>
#include <QStyleFactory>
#include <QTabWidget>
+#include <QStyleOption>
+
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformtheme.h>
+
+#include <QtWidgets/private/qapplication_p.h>
class tst_QPushButton : public QObject
{
@@ -74,20 +55,20 @@ private slots:
void hitButton();
void iconOnlyStyleSheet();
void mousePressAndMove();
+ void reactToMenuClosed();
protected slots:
void resetCounters();
void onClicked();
- void onToggled( bool on );
+ void onToggled(bool on);
void onPressed();
void onReleased();
- void helperSlotDelete();
private:
- uint click_count;
- uint toggle_count;
- uint press_count;
- uint release_count;
+ int click_count;
+ int toggle_count;
+ int press_count;
+ int release_count;
QPushButton *testWidget;
QPointingDevice *m_touchScreen = QTest::createTouchDevice();
@@ -102,40 +83,40 @@ void tst_QPushButton::getSetCheck()
QMenu *var1 = new QMenu;
obj1.setMenu(var1);
QCOMPARE(var1, obj1.menu());
- obj1.setMenu((QMenu *)0);
- QCOMPARE((QMenu *)0, obj1.menu());
+ obj1.setMenu(nullptr);
+ QCOMPARE(obj1.menu(), nullptr);
delete var1;
}
void tst_QPushButton::initTestCase()
{
// Create the test class
- testWidget = new QPushButton( "&Start", 0 );
+ testWidget = new QPushButton("&Start", 0);
testWidget->setObjectName("testWidget");
- testWidget->resize( 200, 200 );
+ testWidget->resize(200, 200);
testWidget->show();
- connect( testWidget, SIGNAL(clicked()), this, SLOT(onClicked()) );
- connect( testWidget, SIGNAL(pressed()), this, SLOT(onPressed()) );
- connect( testWidget, SIGNAL(released()), this, SLOT(onReleased()) );
- connect( testWidget, SIGNAL(toggled(bool)), this, SLOT(onToggled(bool)) );
+ connect(testWidget, SIGNAL(clicked()), this, SLOT(onClicked()));
+ connect(testWidget, SIGNAL(pressed()), this, SLOT(onPressed()));
+ connect(testWidget, SIGNAL(released()), this, SLOT(onReleased()));
+ connect(testWidget, SIGNAL(toggled(bool)), this, SLOT(onToggled(bool)));
}
void tst_QPushButton::cleanupTestCase()
{
delete testWidget;
- testWidget = 0;
+ testWidget = nullptr;
}
void tst_QPushButton::init()
{
- testWidget->setAutoRepeat( false );
- testWidget->setDown( false );
+ testWidget->setAutoRepeat(false);
+ testWidget->setDown(false);
testWidget->setText("Test");
- testWidget->setEnabled( true );
+ testWidget->setEnabled(true);
#if QT_CONFIG(shortcut)
QKeySequence seq;
- testWidget->setShortcut( seq );
+ testWidget->setShortcut(seq);
#endif
resetCounters();
@@ -154,7 +135,7 @@ void tst_QPushButton::onClicked()
click_count++;
}
-void tst_QPushButton::onToggled( bool /*on*/ )
+void tst_QPushButton::onToggled(bool /*on*/)
{
toggle_count++;
}
@@ -172,46 +153,46 @@ void tst_QPushButton::onReleased()
void tst_QPushButton::autoRepeat()
{
// If this changes, this test must be completely revised.
- QVERIFY( !testWidget->isCheckable() );
+ QVERIFY(!testWidget->isCheckable());
// verify autorepeat is off by default.
- QPushButton tmp( 0 );
+ QPushButton tmp;
tmp.setObjectName("tmp");
- QVERIFY( !tmp.autoRepeat() );
+ QVERIFY(!tmp.autoRepeat());
// check if we can toggle the mode
- testWidget->setAutoRepeat( true );
- QVERIFY( testWidget->autoRepeat() );
+ testWidget->setAutoRepeat(true);
+ QVERIFY(testWidget->autoRepeat());
- testWidget->setAutoRepeat( false );
- QVERIFY( !testWidget->autoRepeat() );
+ testWidget->setAutoRepeat(false);
+ QVERIFY(!testWidget->autoRepeat());
resetCounters();
// check that the button is down if we press space and not in autorepeat
- testWidget->setDown( false );
- testWidget->setAutoRepeat( false );
- QTest::keyPress( testWidget, Qt::Key_Space );
+ testWidget->setDown(false);
+ testWidget->setAutoRepeat(false);
+ QTest::keyPress(testWidget, Qt::Key_Space);
- QTRY_VERIFY( testWidget->isDown() );
- QVERIFY( toggle_count == 0 );
- QVERIFY( press_count == 1 );
- QVERIFY( release_count == 0 );
- QVERIFY( click_count == 0 );
+ QTRY_VERIFY(testWidget->isDown());
+ QCOMPARE(toggle_count, 0);
+ QCOMPARE(press_count, 1);
+ QCOMPARE(release_count, 0);
+ QCOMPARE(click_count, 0);
- QTest::keyRelease( testWidget, Qt::Key_Space );
+ QTest::keyRelease(testWidget, Qt::Key_Space);
resetCounters();
// check that the button is down if we press space while in autorepeat
// we can't actually confirm how many times it is fired, more than 1 is enough.
- testWidget->setDown( false );
- testWidget->setAutoRepeat( true );
- QTest::keyPress( testWidget, Qt::Key_Space );
+ testWidget->setDown(false);
+ testWidget->setAutoRepeat(true);
+ QTest::keyPress(testWidget, Qt::Key_Space);
QTRY_VERIFY(press_count > 3);
- QVERIFY( testWidget->isDown() );
- QVERIFY( toggle_count == 0 );
- QTest::keyRelease( testWidget, Qt::Key_Space );
+ QVERIFY(testWidget->isDown());
+ QCOMPARE(toggle_count, 0);
+ QTest::keyRelease(testWidget, Qt::Key_Space);
QCOMPARE(press_count, release_count);
QCOMPARE(release_count, click_count);
@@ -219,113 +200,128 @@ void tst_QPushButton::autoRepeat()
// check that pressing ENTER has no effect
resetCounters();
- testWidget->setDown( false );
- testWidget->setAutoRepeat( false );
- QTest::keyPress( testWidget, Qt::Key_Enter );
+ testWidget->setDown(false);
+ // Skip after reset if ButtonPressKeys has Key_Enter
+ const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+ ->themeHint(QPlatformTheme::ButtonPressKeys)
+ .value<QList<Qt::Key>>();
+ if (buttonPressKeys.contains(Qt::Key_Enter)) {
+ return;
+ }
+ testWidget->setAutoRepeat(false);
+ QTest::keyPress(testWidget, Qt::Key_Enter);
- QTest::qWait( 300 );
+ QTest::qWait(300);
- QVERIFY( !testWidget->isDown() );
- QVERIFY( toggle_count == 0 );
- QVERIFY( press_count == 0 );
- QVERIFY( release_count == 0 );
- QVERIFY( click_count == 0 );
- QTest::keyRelease( testWidget, Qt::Key_Enter );
+ QVERIFY(!testWidget->isDown());
+ QCOMPARE(toggle_count, 0);
+ QCOMPARE(press_count, 0);
+ QCOMPARE(release_count, 0);
+ QCOMPARE(click_count, 0);
+ QTest::keyRelease(testWidget, Qt::Key_Enter);
// check that pressing ENTER has no effect
resetCounters();
- testWidget->setDown( false );
- testWidget->setAutoRepeat( true );
- QTest::keyClick( testWidget, Qt::Key_Enter );
- QTest::qWait( 300 );
- QVERIFY( !testWidget->isDown() );
- QVERIFY( toggle_count == 0 );
- QVERIFY( press_count == 0 );
- QVERIFY( release_count == 0 );
- QVERIFY( click_count == 0 );
+ testWidget->setDown(false);
+ testWidget->setAutoRepeat(true);
+ QTest::keyClick(testWidget, Qt::Key_Enter);
+ QTest::qWait(300);
+ QVERIFY(!testWidget->isDown());
+ QCOMPARE(toggle_count, 0);
+ QCOMPARE(press_count, 0);
+ QCOMPARE(release_count, 0);
+ QCOMPARE(click_count, 0);
}
void tst_QPushButton::pressed()
{
- QTest::keyPress( testWidget, ' ' );
- QCOMPARE( press_count, (uint)1 );
- QCOMPARE( release_count, (uint)0 );
-
- QTest::keyRelease( testWidget, ' ' );
- QCOMPARE( press_count, (uint)1 );
- QCOMPARE( release_count, (uint)1 );
+ QTest::keyPress(testWidget, ' ');
+ QCOMPARE(press_count, 1);
+ QCOMPARE(release_count, 0);
+
+ QTest::keyRelease(testWidget, ' ');
+ QCOMPARE(press_count, 1);
+ QCOMPARE(release_count, 1);
+
+ // Skip if ButtonPressKeys has Key_Enter
+ const auto buttonPressKeys = QGuiApplicationPrivate::platformTheme()
+ ->themeHint(QPlatformTheme::ButtonPressKeys)
+ .value<QList<Qt::Key>>();
+ if (buttonPressKeys.contains(Qt::Key_Enter)) {
+ return;
+ }
- QTest::keyPress( testWidget,Qt::Key_Enter );
- QCOMPARE( press_count, (uint)1 );
- QCOMPARE( release_count, (uint)1 );
+ QTest::keyPress(testWidget,Qt::Key_Enter);
+ QCOMPARE(press_count, 1);
+ QCOMPARE(release_count, 1);
testWidget->setAutoDefault(true);
- QTest::keyPress( testWidget,Qt::Key_Enter );
- QCOMPARE( press_count, (uint)2 );
- QCOMPARE( release_count, (uint)2 );
+ QTest::keyPress(testWidget,Qt::Key_Enter);
+ QCOMPARE(press_count, 2);
+ QCOMPARE(release_count, 2);
testWidget->setAutoDefault(false);
}
void tst_QPushButton::isCheckable()
{
- QVERIFY( !testWidget->isCheckable() );
+ QVERIFY(!testWidget->isCheckable());
}
void tst_QPushButton::setDown()
{
- testWidget->setDown( false );
- QVERIFY( !testWidget->isDown() );
+ testWidget->setDown(false);
+ QVERIFY(!testWidget->isDown());
- testWidget->setDown( true );
- QVERIFY( testWidget->isDown() );
+ testWidget->setDown(true);
+ QVERIFY(testWidget->isDown());
- testWidget->setDown( true );
- QTest::keyClick( testWidget, Qt::Key_Escape );
- QVERIFY( !testWidget->isDown() );
+ testWidget->setDown(true);
+ QTest::keyClick(testWidget, Qt::Key_Escape);
+ QVERIFY(!testWidget->isDown());
}
void tst_QPushButton::isChecked()
{
- testWidget->setDown( false );
- QVERIFY( !testWidget->isChecked() );
+ testWidget->setDown(false);
+ QVERIFY(!testWidget->isChecked());
- testWidget->setDown( true );
- QVERIFY( !testWidget->isChecked() );
+ testWidget->setDown(true);
+ QVERIFY(!testWidget->isChecked());
- testWidget->setDown( false );
+ testWidget->setDown(false);
testWidget->toggle();
- QVERIFY( testWidget->isChecked() == testWidget->isCheckable() );
+ QCOMPARE(testWidget->isChecked(), testWidget->isCheckable());
}
void tst_QPushButton::toggle()
{
// the pushbutton shouldn't toggle the button.
testWidget->toggle();
- QVERIFY( testWidget->isChecked() == false );
+ QCOMPARE(testWidget->isChecked(), false);
}
void tst_QPushButton::toggled()
{
// the pushbutton shouldn't send a toggled signal when we call the toggle slot.
- QVERIFY( !testWidget->isCheckable() );
+ QVERIFY(!testWidget->isCheckable());
testWidget->toggle();
- QVERIFY( toggle_count == 0 );
+ QCOMPARE(toggle_count, 0);
// do it again, just to be sure
resetCounters();
testWidget->toggle();
- QVERIFY( toggle_count == 0 );
+ QCOMPARE(toggle_count, 0);
// finally check that we can toggle using the mouse
resetCounters();
- QTest::mousePress( testWidget, Qt::LeftButton );
- QVERIFY( toggle_count == 0 );
- QVERIFY( click_count == 0 );
+ QTest::mousePress(testWidget, Qt::LeftButton);
+ QCOMPARE(toggle_count, 0);
+ QCOMPARE(click_count, 0);
- QTest::mouseRelease( testWidget, Qt::LeftButton );
- QVERIFY( click_count == 1 );
+ QTest::mouseRelease(testWidget, Qt::LeftButton);
+ QCOMPARE(click_count, 1);
}
#if QT_CONFIG(shortcut)
@@ -338,56 +334,56 @@ void tst_QPushButton::toggled()
void tst_QPushButton::setAccel()
{
testWidget->setText("&AccelTest");
- QKeySequence seq( Qt::ALT | Qt::Key_A );
- testWidget->setShortcut( seq );
+ QKeySequence seq(Qt::ALT | Qt::Key_A);
+ testWidget->setShortcut(seq);
// The shortcut will not be activated unless the button is in a active
// window and has focus
- QApplication::setActiveWindow(testWidget);
+ QApplicationPrivate::setActiveWindow(testWidget);
testWidget->setFocus();
QVERIFY(QTest::qWaitForWindowActive(testWidget));
- QTest::keyClick( testWidget, 'A', Qt::AltModifier );
- QTRY_VERIFY( click_count == 1 );
- QVERIFY( press_count == 1 );
- QVERIFY( release_count == 1 );
- QVERIFY( toggle_count == 0 );
+ QTest::keyClick(testWidget, 'A', Qt::AltModifier);
+ QTRY_VERIFY(click_count == 1);
+ QCOMPARE(press_count, 1);
+ QCOMPARE(release_count, 1);
+ QCOMPARE(toggle_count, 0);
// wait 200 ms because setAccel uses animateClick.
// if we don't wait this may screw up a next test.
QTest::qWait(200);
- QTRY_VERIFY( !testWidget->isDown() );
+ QTRY_VERIFY(!testWidget->isDown());
}
#endif // QT_CONFIG(shortcut)
void tst_QPushButton::clicked()
{
- QTest::mousePress( testWidget, Qt::LeftButton );
- QVERIFY( press_count == 1 );
- QVERIFY( release_count == 0 );
+ QTest::mousePress(testWidget, Qt::LeftButton);
+ QCOMPARE(press_count, 1);
+ QCOMPARE(release_count, 0);
- QTest::mouseRelease( testWidget, Qt::LeftButton );
- QCOMPARE( press_count, (uint)1 );
- QCOMPARE( release_count, (uint)1 );
+ QTest::mouseRelease(testWidget, Qt::LeftButton);
+ QCOMPARE(press_count, 1);
+ QCOMPARE(release_count, 1);
press_count = 0;
release_count = 0;
testWidget->setDown(false);
for (uint i=0; i<10; i++)
- QTest::mouseClick( testWidget, Qt::LeftButton );
- QCOMPARE( press_count, (uint)10 );
- QCOMPARE( release_count, (uint)10 );
+ QTest::mouseClick(testWidget, Qt::LeftButton);
+ QCOMPARE(press_count, 10);
+ QCOMPARE(release_count, 10);
}
void tst_QPushButton::touchTap()
{
QTest::touchEvent(testWidget, m_touchScreen).press(0, QPoint(10, 10));
- QVERIFY( press_count == 1 );
- QVERIFY( release_count == 0 );
+ QCOMPARE(press_count, 1);
+ QCOMPARE(release_count, 0);
QTest::touchEvent(testWidget, m_touchScreen).release(0, QPoint(10, 10));
- QCOMPARE( press_count, (uint)1 );
- QCOMPARE( release_count, (uint)1 );
- QCOMPARE( click_count, (uint)1 );
+ QCOMPARE(press_count, 1);
+ QCOMPARE(release_count, 1);
+ QCOMPARE(click_count, 1);
press_count = 0;
release_count = 0;
@@ -397,26 +393,23 @@ void tst_QPushButton::touchTap()
QTest::touchEvent(testWidget, m_touchScreen).press(0, QPoint(10, 10));
QTest::touchEvent(testWidget, m_touchScreen).release(0, QPoint(10, 10));
}
- QCOMPARE( press_count, (uint)10 );
- QCOMPARE( release_count, (uint)10 );
- QCOMPARE( click_count, (uint)10 );
-}
-
-QPushButton *pb = 0;
-void tst_QPushButton::helperSlotDelete()
-{
- delete pb;
- pb = 0;
+ QCOMPARE(press_count, 10);
+ QCOMPARE(release_count, 10);
+ QCOMPARE(click_count, 10);
}
void tst_QPushButton::popupCrash()
{
- pb = new QPushButton("foo");
+ QPushButton *pb = new QPushButton("foo");
QMenu *menu = new QMenu("bar", pb);
pb->setMenu(menu);
- QTimer::singleShot(1000, this, SLOT(helperSlotDelete()));
+ QTimer::singleShot(1000, this, [&pb]{
+ delete pb;
+ pb = nullptr;
+ });
pb->show();
pb->click();
+ QTRY_COMPARE(pb, nullptr);
}
void tst_QPushButton::defaultAndAutoDefault()
@@ -506,14 +499,14 @@ void tst_QPushButton::defaultAndAutoDefault()
// Reparenting
QVERIFY(button2.autoDefault());
- button2.setParent(0);
+ button2.setParent(nullptr);
QVERIFY(!button2.autoDefault());
button2.setAutoDefault(false);
button2.setParent(&dialog);
QVERIFY(!button2.autoDefault());
button1.setAutoDefault(true);
- button1.setParent(0);
+ button1.setParent(nullptr);
QVERIFY(button1.autoDefault());
}
}
@@ -554,7 +547,7 @@ void tst_QPushButton::sizeHint()
button->setParent(widget);
button->sizeHint();
- widget->setParent(0);
+ widget->setParent(nullptr);
delete dialog;
button->setDefault(false);
QCOMPARE(button->sizeHint(), initSizeHint);
@@ -609,7 +602,7 @@ void tst_QPushButton::taskQTBUG_20191_shortcutWithKeypadModifer()
dialog.setLayout(layout);
dialog.show();
QVERIFY(QTest::qWaitForWindowExposed(&dialog));
- QApplication::setActiveWindow(&dialog);
+ QApplicationPrivate::setActiveWindow(&dialog);
// add shortcut '5' to button1 and test with keyboard and keypad '5' keys
QSignalSpy spy1(button1, SIGNAL(clicked()));
@@ -618,7 +611,7 @@ void tst_QPushButton::taskQTBUG_20191_shortcutWithKeypadModifer()
QTest::qWait(300);
QTest::keyClick(&dialog, Qt::Key_5, Qt::KeypadModifier);
QTest::qWait(300);
- QCOMPARE(spy1.count(), 2);
+ QCOMPARE(spy1.size(), 2);
// add shortcut 'keypad 5' to button2
spy1.clear();
@@ -628,8 +621,8 @@ void tst_QPushButton::taskQTBUG_20191_shortcutWithKeypadModifer()
QTest::qWait(300);
QTest::keyClick(&dialog, Qt::Key_5, Qt::KeypadModifier);
QTest::qWait(300);
- QCOMPARE(spy1.count(), 1);
- QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy1.size(), 1);
+ QCOMPARE(spy2.size(), 1);
// remove shortcut from button1
spy1.clear();
@@ -639,8 +632,8 @@ void tst_QPushButton::taskQTBUG_20191_shortcutWithKeypadModifer()
QTest::qWait(300);
QTest::keyClick(&dialog, Qt::Key_5, Qt::KeypadModifier);
QTest::qWait(300);
- QCOMPARE(spy1.count(), 0);
- QCOMPARE(spy2.count(), 1);
+ QCOMPARE(spy1.size(), 0);
+ QCOMPARE(spy2.size(), 1);
}
#endif // QT_CONFIG(shortcut)
@@ -656,7 +649,7 @@ void tst_QPushButton::emitReleasedAfterChange()
dialog.setLayout(layout);
dialog.show();
QVERIFY(QTest::qWaitForWindowExposed(&dialog));
- QApplication::setActiveWindow(&dialog);
+ QApplicationPrivate::setActiveWindow(&dialog);
button1->setFocus();
QSignalSpy spy(button1, SIGNAL(released()));
@@ -664,16 +657,16 @@ void tst_QPushButton::emitReleasedAfterChange()
QVERIFY(button1->isDown());
QTest::keyClick(&dialog, Qt::Key_Tab);
QVERIFY(!button1->isDown());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
button1->setFocus();
QTest::mousePress(button1, Qt::LeftButton);
QVERIFY(button1->isDown());
button1->setEnabled(false);
QVERIFY(!button1->isDown());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
/*
@@ -751,22 +744,68 @@ void tst_QPushButton::mousePressAndMove()
QSignalSpy releaseSpy(&button, &QAbstractButton::released);
QTest::mousePress(&button, Qt::LeftButton);
- QCOMPARE(pressSpy.count(), 1);
- QCOMPARE(releaseSpy.count(), 0);
+ QCOMPARE(pressSpy.size(), 1);
+ QCOMPARE(releaseSpy.size(), 0);
// mouse pressed and moving out
QTest::mouseMove(&button, QPoint(100, 100));
// should emit released signal when the mouse is dragged out of boundary
- QCOMPARE(pressSpy.count(), 1);
- QCOMPARE(releaseSpy.count(), 1);
+ QCOMPARE(pressSpy.size(), 1);
+ QCOMPARE(releaseSpy.size(), 1);
// mouse pressed and moving into
QTest::mouseMove(&button, QPoint(10, 10));
// should emit pressed signal when the mouse is dragged into of boundary
- QCOMPARE(pressSpy.count(), 2);
- QCOMPARE(releaseSpy.count(), 1);
+ QCOMPARE(pressSpy.size(), 2);
+ QCOMPARE(releaseSpy.size(), 1);
+}
+
+/*
+ Test checking that a QPushButton with a QMenu has a sunken style only
+ when the menu is open
+ QTBUG-120976
+*/
+void tst_QPushButton::reactToMenuClosed()
+{
+ // create a subclass of QPushButton to expose the initStyleOption method
+ class PushButton : public QPushButton {
+ public:
+ virtual void initStyleOption(QStyleOptionButton *option) const override
+ {
+ QPushButton::initStyleOption(option);
+ }
+ };
+
+ PushButton button;
+ QStyleOptionButton opt;
+ QMenu menu;
+
+ // add a menu to the button
+ menu.addAction(tr("string"));
+ button.setMenu(&menu);
+
+ // give the button a size and show it
+ button.setGeometry(0, 0, 50, 50);
+ button.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&button));
+
+ // click the button to open the menu
+ QTest::mouseClick(&button, Qt::LeftButton);
+
+ // check the menu is visible and the button style is sunken
+ QTRY_VERIFY(menu.isVisible());
+ button.initStyleOption(&opt);
+ QVERIFY(opt.state.testFlag(QStyle::StateFlag::State_Sunken));
+
+ // close the menu
+ menu.close();
+
+ // check the menu isn't visible and the style isn't sunken
+ QTRY_VERIFY(!menu.isVisible());
+ button.initStyleOption(&opt);
+ QVERIFY(!opt.state.testFlag(QStyle::StateFlag::State_Sunken));
}
QTEST_MAIN(tst_QPushButton)
diff --git a/tests/auto/widgets/widgets/qradiobutton/CMakeLists.txt b/tests/auto/widgets/widgets/qradiobutton/CMakeLists.txt
index 8ce8aadea8..ce016975c8 100644
--- a/tests/auto/widgets/widgets/qradiobutton/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qradiobutton/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qradiobutton.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qradiobutton Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qradiobutton LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qradiobutton
SOURCES
tst_qradiobutton.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qradiobutton/tst_qradiobutton.cpp b/tests/auto/widgets/widgets/qradiobutton/tst_qradiobutton.cpp
index 8b1670ae06..144d91e9f2 100644
--- a/tests/auto/widgets/widgets/qradiobutton/tst_qradiobutton.cpp
+++ b/tests/auto/widgets/widgets/qradiobutton/tst_qradiobutton.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 <QTest>
diff --git a/tests/auto/widgets/widgets/qrhiwidget/CMakeLists.txt b/tests/auto/widgets/widgets/qrhiwidget/CMakeLists.txt
new file mode 100644
index 0000000000..f8d18bcf53
--- /dev/null
+++ b/tests/auto/widgets/widgets/qrhiwidget/CMakeLists.txt
@@ -0,0 +1,25 @@
+# Copyright (C) 2023 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_qrhiwidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+file(GLOB_RECURSE qrhiwidget_resource_files
+ RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
+ data/*
+)
+
+qt_internal_add_test(tst_qrhiwidget
+ SOURCES
+ tst_qrhiwidget.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
+ TESTDATA ${qrhiwidget_resource_files}
+ BUILTIN_TESTDATA
+)
diff --git a/tests/auto/widgets/widgets/qrhiwidget/data/simple.frag b/tests/auto/widgets/widgets/qrhiwidget/data/simple.frag
new file mode 100644
index 0000000000..2aa500e09a
--- /dev/null
+++ b/tests/auto/widgets/widgets/qrhiwidget/data/simple.frag
@@ -0,0 +1,8 @@
+#version 440
+
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+ fragColor = vec4(1.0, 0.0, 0.0, 1.0);
+}
diff --git a/tests/auto/widgets/widgets/qrhiwidget/data/simple.frag.qsb b/tests/auto/widgets/widgets/qrhiwidget/data/simple.frag.qsb
new file mode 100644
index 0000000000..40d0a296ac
--- /dev/null
+++ b/tests/auto/widgets/widgets/qrhiwidget/data/simple.frag.qsb
Binary files differ
diff --git a/tests/auto/widgets/widgets/qrhiwidget/data/simple.vert b/tests/auto/widgets/widgets/qrhiwidget/data/simple.vert
new file mode 100644
index 0000000000..6b954cdaec
--- /dev/null
+++ b/tests/auto/widgets/widgets/qrhiwidget/data/simple.vert
@@ -0,0 +1,8 @@
+#version 440
+
+layout(location = 0) in vec4 position;
+
+void main()
+{
+ gl_Position = position;
+}
diff --git a/tests/auto/widgets/widgets/qrhiwidget/data/simple.vert.qsb b/tests/auto/widgets/widgets/qrhiwidget/data/simple.vert.qsb
new file mode 100644
index 0000000000..5b7fd39668
--- /dev/null
+++ b/tests/auto/widgets/widgets/qrhiwidget/data/simple.vert.qsb
Binary files differ
diff --git a/tests/auto/widgets/widgets/qrhiwidget/tst_qrhiwidget.cpp b/tests/auto/widgets/widgets/qrhiwidget/tst_qrhiwidget.cpp
new file mode 100644
index 0000000000..7a102180e7
--- /dev/null
+++ b/tests/auto/widgets/widgets/qrhiwidget/tst_qrhiwidget.cpp
@@ -0,0 +1,834 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtWidgets/QRhiWidget>
+#include <QtGui/QPainter>
+#include <QTest>
+#include <QSignalSpy>
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformintegration.h>
+#include <rhi/qrhi.h>
+
+#include <QApplication>
+#include <QFile>
+#include <QVBoxLayout>
+#include <QScrollArea>
+
+#if QT_CONFIG(vulkan)
+#include <private/qvulkandefaultinstance_p.h>
+#endif
+
+class tst_QRhiWidget : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase();
+ void create_data();
+ void create();
+ void noCreate();
+ void simple_data();
+ void simple();
+ void msaa_data();
+ void msaa();
+ void fixedSize_data();
+ void fixedSize();
+ void autoRt_data();
+ void autoRt();
+ void reparent_data();
+ void reparent();
+ void grabFramebufferWhileStillInvisible_data();
+ void grabFramebufferWhileStillInvisible();
+ void grabViaQWidgetGrab_data();
+ void grabViaQWidgetGrab();
+ void mirror_data();
+ void mirror();
+
+private:
+ void testData();
+};
+
+void tst_QRhiWidget::initTestCase()
+{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::RhiBasedRendering))
+ QSKIP("RhiBasedRendering capability is reported as unsupported on this platform.");
+
+ qputenv("QT_RHI_LEAK_CHECK", "1");
+}
+
+void tst_QRhiWidget::testData()
+{
+ QTest::addColumn<QRhiWidget::Api>("api");
+
+#ifndef Q_OS_WEBOS
+ QTest::newRow("Null") << QRhiWidget::Api::Null;
+#endif
+
+#if QT_CONFIG(opengl)
+ if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::OpenGL))
+ QTest::newRow("OpenGL") << QRhiWidget::Api::OpenGL;
+#endif
+
+#if QT_CONFIG(vulkan)
+ // Have to probe to be sure Vulkan is actually working (the test cases
+ // themselves will assume QRhi init succeeds).
+ if (QVulkanDefaultInstance::instance()) {
+ QRhiVulkanInitParams vulkanInitParams;
+ vulkanInitParams.inst = QVulkanDefaultInstance::instance();
+ if (QRhi::probe(QRhi::Vulkan, &vulkanInitParams))
+ QTest::newRow("Vulkan") << QRhiWidget::Api::Vulkan;
+ }
+#endif
+
+#if QT_CONFIG(metal)
+ QRhiMetalInitParams metalInitParams;
+ if (QRhi::probe(QRhi::Metal, &metalInitParams))
+ QTest::newRow("Metal") << QRhiWidget::Api::Metal;
+#endif
+
+#ifdef Q_OS_WIN
+ QTest::newRow("D3D11") << QRhiWidget::Api::Direct3D11;
+ // D3D12 needs to be probed too due to being disabled if the SDK headers
+ // are too old (clang, mingw).
+ QRhiD3D12InitParams d3d12InitParams;
+ if (QRhi::probe(QRhi::D3D12, &d3d12InitParams))
+ QTest::newRow("D3D12") << QRhiWidget::Api::Direct3D12;
+#endif
+}
+
+void tst_QRhiWidget::create_data()
+{
+ testData();
+}
+
+void tst_QRhiWidget::create()
+{
+ QFETCH(QRhiWidget::Api, api);
+
+ {
+ QRhiWidget w;
+ w.setApi(api);
+ w.resize(320, 240);
+ w.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+ }
+
+ {
+ QWidget topLevel;
+ topLevel.resize(320, 240);
+ QRhiWidget *w = new QRhiWidget(&topLevel);
+ w->setApi(api);
+ w->resize(100, 100);
+ topLevel.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+ }
+}
+
+void tst_QRhiWidget::noCreate()
+{
+ // Now try something that is guaranteed to fail.
+ // E.g. try using Metal on Windows.
+ // The error signal should be emitted. The frame signal should not.
+#ifdef Q_OS_WIN
+ qDebug("Warnings will be printed below, this is as expected");
+ QRhiWidget rhiWidget;
+ rhiWidget.setApi(QRhiWidget::Api::Metal);
+ QSignalSpy frameSpy(&rhiWidget, &QRhiWidget::frameSubmitted);
+ QSignalSpy errorSpy(&rhiWidget, &QRhiWidget::renderFailed);
+ rhiWidget.resize(320, 240);
+ rhiWidget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&rhiWidget));
+ QTRY_VERIFY(errorSpy.count() > 0);
+ QCOMPARE(frameSpy.count(), 0);
+#endif
+}
+
+static QShader getShader(const QString &name)
+{
+ QFile f(name);
+ return f.open(QIODevice::ReadOnly) ? QShader::fromSerialized(f.readAll()) : QShader();
+}
+
+static bool submitResourceUpdates(QRhi *rhi, QRhiResourceUpdateBatch *batch)
+{
+ QRhiCommandBuffer *cb = nullptr;
+ QRhi::FrameOpResult result = rhi->beginOffscreenFrame(&cb);
+ if (result != QRhi::FrameOpSuccess) {
+ qWarning("beginOffscreenFrame returned %d", result);
+ return false;
+ }
+ if (!cb) {
+ qWarning("No command buffer from beginOffscreenFrame");
+ return false;
+ }
+ cb->resourceUpdate(batch);
+ rhi->endOffscreenFrame();
+ return true;
+}
+
+inline bool imageRGBAEquals(const QImage &a, const QImage &b, int maxFuzz = 1)
+{
+ if (a.size() != b.size())
+ return false;
+
+ const QImage image0 = a.convertToFormat(QImage::Format_RGBA8888_Premultiplied);
+ const QImage image1 = b.convertToFormat(QImage::Format_RGBA8888_Premultiplied);
+
+ const int width = image0.width();
+ const int height = image0.height();
+ for (int y = 0; y < height; ++y) {
+ const quint32 *p0 = reinterpret_cast<const quint32 *>(image0.constScanLine(y));
+ const quint32 *p1 = reinterpret_cast<const quint32 *>(image1.constScanLine(y));
+ int x = width - 1;
+ while (x-- >= 0) {
+ const QRgb c0(*p0++);
+ const QRgb c1(*p1++);
+ const int red = qAbs(qRed(c0) - qRed(c1));
+ const int green = qAbs(qGreen(c0) - qGreen(c1));
+ const int blue = qAbs(qBlue(c0) - qBlue(c1));
+ const int alpha = qAbs(qAlpha(c0) - qAlpha(c1));
+ if (red > maxFuzz || green > maxFuzz || blue > maxFuzz || alpha > maxFuzz)
+ return false;
+ }
+ }
+
+ return true;
+}
+
+class SimpleRhiWidget : public QRhiWidget
+{
+public:
+ SimpleRhiWidget(int sampleCount = 1, QWidget *parent = nullptr)
+ : QRhiWidget(parent),
+ m_sampleCount(sampleCount)
+ { }
+
+ ~SimpleRhiWidget()
+ {
+ delete m_rt;
+ delete m_rp;
+ }
+
+ void initialize(QRhiCommandBuffer *cb) override;
+ void render(QRhiCommandBuffer *cb) override;
+ void releaseResources() override;
+
+ int m_sampleCount;
+ QRhi *m_rhi = nullptr;
+ std::unique_ptr<QRhiBuffer> m_vbuf;
+ std::unique_ptr<QRhiBuffer> m_ubuf;
+ std::unique_ptr<QRhiShaderResourceBindings> m_srb;
+ std::unique_ptr<QRhiGraphicsPipeline> m_pipeline;
+ QRhiTextureRenderTarget *m_rt = nullptr; // used when autoRenderTarget is off
+ QRhiRenderPassDescriptor *m_rp = nullptr; // used when autoRenderTarget is off
+
+ friend class tst_QRhiWidget;
+};
+
+void SimpleRhiWidget::initialize(QRhiCommandBuffer *cb)
+{
+ if (m_rhi != rhi()) {
+ m_pipeline.reset();
+ m_rhi = rhi();
+ }
+
+ if (!m_pipeline) {
+ if (!isAutoRenderTargetEnabled()) {
+ delete m_rt;
+ delete m_rp;
+ QRhiTextureRenderTargetDescription rtDesc;
+ if (colorTexture()) {
+ rtDesc.setColorAttachments({ colorTexture() });
+ } else if (msaaColorBuffer()) {
+ QRhiColorAttachment att;
+ att.setRenderBuffer(msaaColorBuffer());
+ rtDesc.setColorAttachments({ att });
+ }
+ m_rt = m_rhi->newTextureRenderTarget(rtDesc);
+ m_rp = m_rt->newCompatibleRenderPassDescriptor();
+ m_rt->setRenderPassDescriptor(m_rp);
+ m_rt->create();
+ }
+
+ static float vertexData[] = {
+ 0, 1,
+ -1, -1,
+ 1, -1
+ };
+
+ m_vbuf.reset(m_rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(vertexData)));
+ m_vbuf->create();
+
+ m_ubuf.reset(m_rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64));
+ m_ubuf->create();
+
+ m_srb.reset(m_rhi->newShaderResourceBindings());
+ m_srb->create();
+
+ m_pipeline.reset(m_rhi->newGraphicsPipeline());
+ m_pipeline->setShaderStages({
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/data/simple.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/data/simple.frag.qsb")) }
+ });
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 2 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 }
+ });
+ m_pipeline->setSampleCount(m_sampleCount);
+ m_pipeline->setVertexInputLayout(inputLayout);
+ m_pipeline->setShaderResourceBindings(m_srb.get());
+ m_pipeline->setRenderPassDescriptor(renderTarget() ? renderTarget()->renderPassDescriptor() : m_rp);
+ m_pipeline->create();
+
+ QRhiResourceUpdateBatch *resourceUpdates = m_rhi->nextResourceUpdateBatch();
+ resourceUpdates->uploadStaticBuffer(m_vbuf.get(), vertexData);
+ cb->resourceUpdate(resourceUpdates);
+ }
+}
+
+void SimpleRhiWidget::render(QRhiCommandBuffer *cb)
+{
+ const QSize outputSize = colorTexture() ? colorTexture()->pixelSize() : msaaColorBuffer()->pixelSize();
+ if (renderTarget()) {
+ QCOMPARE(outputSize, renderTarget()->pixelSize());
+ if (rhi()->backend() != QRhi::Null && rhi()->supportedSampleCounts().contains(m_sampleCount))
+ QCOMPARE(m_sampleCount, renderTarget()->sampleCount());
+ }
+
+ const QColor clearColor = QColor::fromRgbF(0.4f, 0.7f, 0.0f, 1.0f);
+ cb->beginPass(renderTarget() ? renderTarget() : m_rt, clearColor, { 1.0f, 0 });
+ cb->setGraphicsPipeline(m_pipeline.get());
+ cb->setViewport(QRhiViewport(0, 0, outputSize.width(), outputSize.height()));
+ cb->setShaderResources();
+ const QRhiCommandBuffer::VertexInput vbufBinding(m_vbuf.get(), 0);
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(3);
+ cb->endPass();
+}
+
+void SimpleRhiWidget::releaseResources()
+{
+ m_pipeline.reset();
+ m_srb.reset();
+ m_ubuf.reset();
+ m_vbuf.reset();
+
+}
+
+void tst_QRhiWidget::simple_data()
+{
+ testData();
+}
+
+void tst_QRhiWidget::simple()
+{
+ QFETCH(QRhiWidget::Api, api);
+
+ SimpleRhiWidget *rhiWidget = new SimpleRhiWidget;
+ rhiWidget->setApi(api);
+ QSignalSpy frameSpy(rhiWidget, &QRhiWidget::frameSubmitted);
+ QSignalSpy errorSpy(rhiWidget, &QRhiWidget::renderFailed);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(rhiWidget);
+
+ QWidget w;
+ w.setLayout(layout);
+ w.resize(1280, 720);
+ w.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+
+ QCOMPARE(rhiWidget->sampleCount(), 1);
+ QCOMPARE(rhiWidget->colorBufferFormat(), QRhiWidget::TextureFormat::RGBA8);
+ QVERIFY(rhiWidget->isAutoRenderTargetEnabled());
+
+ // Pull out the QRhiTexture (we know colorTexture() and rhi() and friends
+ // are all there even outside initialize() and render(), even though this
+ // is not quite documented), and read it back.
+ QRhiTexture *backingTexture = rhiWidget->colorTexture();
+ QVERIFY(backingTexture);
+ QCOMPARE(backingTexture->format(), QRhiTexture::RGBA8);
+ QVERIFY(rhiWidget->depthStencilBuffer());
+ QVERIFY(rhiWidget->renderTarget());
+ QVERIFY(!rhiWidget->resolveTexture());
+ QRhi *rhi = rhiWidget->rhi();
+ QVERIFY(rhi);
+
+ switch (api) {
+ case QRhiWidget::Api::OpenGL:
+ QCOMPARE(rhi->backend(), QRhi::OpenGLES2);
+ break;
+ case QRhiWidget::Api::Metal:
+ QCOMPARE(rhi->backend(), QRhi::Metal);
+ break;
+ case QRhiWidget::Api::Vulkan:
+ QCOMPARE(rhi->backend(), QRhi::Vulkan);
+ break;
+ case QRhiWidget::Api::Direct3D11:
+ QCOMPARE(rhi->backend(), QRhi::D3D11);
+ break;
+ case QRhiWidget::Api::Direct3D12:
+ QCOMPARE(rhi->backend(), QRhi::D3D12);
+ break;
+ case QRhiWidget::Api::Null:
+ QCOMPARE(rhi->backend(), QRhi::Null);
+ break;
+ default:
+ break;
+ }
+
+ const int maxFuzz = 1;
+ QImage resultOne;
+ if (rhi->backend() != QRhi::Null) {
+ QRhiReadbackResult readResult;
+ bool readCompleted = false;
+ readResult.completed = [&readCompleted] { readCompleted = true; };
+ QRhiResourceUpdateBatch *rub = rhi->nextResourceUpdateBatch();
+ rub->readBackTexture(backingTexture, &readResult);
+ QVERIFY(submitResourceUpdates(rhi, rub));
+ QVERIFY(readCompleted);
+
+ QImage wrapperImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ if (rhi->isYUpInFramebuffer())
+ resultOne = wrapperImage.mirrored();
+ else
+ resultOne = wrapperImage.copy();
+
+ // result is now a red triangle upon greenish background, where the
+ // triangle's edges are (0, 1), (-1, -1), and (1, -1).
+ // It's upside down with Vulkan (Y is not corrected, clipSpaceCorrMatrix() is not used),
+ // but that won't matter for the test.
+
+ // Check that the center is a red pixel.
+ QRgb c = resultOne.pixel(resultOne.width() / 2, resultOne.height() / 2);
+ QVERIFY(qRed(c) >= 255 - maxFuzz);
+ QVERIFY(qGreen(c) <= maxFuzz);
+ QVERIFY(qBlue(c) <= maxFuzz);
+ }
+
+ // Now through grabFramebuffer().
+ QImage resultTwo;
+ if (rhi->backend() != QRhi::Null) {
+ resultTwo = rhiWidget->grabFramebuffer();
+ QCOMPARE(errorSpy.count(), 0);
+ QVERIFY(!resultTwo.isNull());
+ QRgb c = resultTwo.pixel(resultTwo.width() / 2, resultTwo.height() / 2);
+ QVERIFY(qRed(c) >= 255 - maxFuzz);
+ QVERIFY(qGreen(c) <= maxFuzz);
+ QVERIFY(qBlue(c) <= maxFuzz);
+ }
+
+ // Check we got the same result from our manual readback and when the
+ // texture was rendered to again and grabFramebuffer() was called.
+ QVERIFY(imageRGBAEquals(resultOne, resultTwo, maxFuzz));
+}
+
+void tst_QRhiWidget::msaa_data()
+{
+ testData();
+}
+
+void tst_QRhiWidget::msaa()
+{
+ QFETCH(QRhiWidget::Api, api);
+
+ const int SAMPLE_COUNT = 4;
+ SimpleRhiWidget *rhiWidget = new SimpleRhiWidget(SAMPLE_COUNT);
+ rhiWidget->setApi(api);
+ rhiWidget->setSampleCount(SAMPLE_COUNT);
+ QSignalSpy frameSpy(rhiWidget, &QRhiWidget::frameSubmitted);
+ QSignalSpy errorSpy(rhiWidget, &QRhiWidget::renderFailed);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(rhiWidget);
+
+ QWidget w;
+ w.setLayout(layout);
+ w.resize(1280, 720);
+ w.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+
+ QCOMPARE(rhiWidget->sampleCount(), 4);
+ QCOMPARE(rhiWidget->colorBufferFormat(), QRhiWidget::TextureFormat::RGBA8);
+ QVERIFY(!rhiWidget->colorTexture());
+ QVERIFY(rhiWidget->msaaColorBuffer());
+ QVERIFY(rhiWidget->depthStencilBuffer());
+ QVERIFY(rhiWidget->renderTarget());
+ QVERIFY(rhiWidget->resolveTexture());
+ QCOMPARE(rhiWidget->resolveTexture()->format(), QRhiTexture::RGBA8);
+ QRhi *rhi = rhiWidget->rhi();
+ QVERIFY(rhi);
+
+ if (rhi->backend() != QRhi::Null) {
+ QRhiReadbackResult readResult;
+ QRhiResourceUpdateBatch *rub = rhi->nextResourceUpdateBatch();
+ rub->readBackTexture(rhiWidget->resolveTexture(), &readResult);
+ QVERIFY(submitResourceUpdates(rhi, rub));
+
+ QImage wrapperImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ QImage result;
+ if (rhi->isYUpInFramebuffer())
+ result = wrapperImage.mirrored();
+ else
+ result = wrapperImage.copy();
+
+ // Check that the center is a red pixel.
+ const int maxFuzz = 1;
+ QRgb c = result.pixel(result.width() / 2, result.height() / 2);
+ QVERIFY(qRed(c) >= 255 - maxFuzz);
+ QVERIFY(qGreen(c) <= maxFuzz);
+ QVERIFY(qBlue(c) <= maxFuzz);
+ }
+
+ // See if switching back and forth works.
+ frameSpy.clear();
+ rhiWidget->m_pipeline.reset();
+ rhiWidget->m_sampleCount = 1;
+ rhiWidget->setSampleCount(1);
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+ QVERIFY(rhiWidget->colorTexture());
+ QVERIFY(!rhiWidget->msaaColorBuffer());
+
+ frameSpy.clear();
+ rhiWidget->m_pipeline.reset();
+ rhiWidget->m_sampleCount = SAMPLE_COUNT;
+ rhiWidget->setSampleCount(SAMPLE_COUNT);
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+ QVERIFY(!rhiWidget->colorTexture());
+ QVERIFY(rhiWidget->msaaColorBuffer());
+}
+
+void tst_QRhiWidget::fixedSize_data()
+{
+ testData();
+}
+
+void tst_QRhiWidget::fixedSize()
+{
+ QFETCH(QRhiWidget::Api, api);
+
+ SimpleRhiWidget *rhiWidget = new SimpleRhiWidget;
+ rhiWidget->setApi(api);
+ QSignalSpy frameSpy(rhiWidget, &QRhiWidget::frameSubmitted);
+ QSignalSpy errorSpy(rhiWidget, &QRhiWidget::renderFailed);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(rhiWidget);
+
+ rhiWidget->setFixedColorBufferSize(QSize(320, 200));
+
+ QWidget w;
+ w.setLayout(layout);
+ w.resize(1280, 720);
+ w.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+
+ QVERIFY(rhiWidget->rhi());
+ QVERIFY(rhiWidget->colorTexture());
+ QCOMPARE(rhiWidget->colorTexture()->pixelSize(), QSize(320, 200));
+ QVERIFY(rhiWidget->depthStencilBuffer());
+ QCOMPARE(rhiWidget->depthStencilBuffer()->pixelSize(), QSize(320, 200));
+ QVERIFY(rhiWidget->renderTarget());
+ QVERIFY(!rhiWidget->resolveTexture());
+
+ frameSpy.clear();
+ rhiWidget->setFixedColorBufferSize(640, 480); // should also trigger update()
+ QTRY_VERIFY(frameSpy.count() > 0);
+
+ QVERIFY(rhiWidget->colorTexture());
+ QCOMPARE(rhiWidget->colorTexture()->pixelSize(), QSize(640, 480));
+ QVERIFY(rhiWidget->depthStencilBuffer());
+ QCOMPARE(rhiWidget->depthStencilBuffer()->pixelSize(), QSize(640, 480));
+
+ frameSpy.clear();
+ rhiWidget->setFixedColorBufferSize(QSize());
+ QTRY_VERIFY(frameSpy.count() > 0);
+
+ QVERIFY(rhiWidget->colorTexture());
+ QVERIFY(rhiWidget->colorTexture()->pixelSize() != QSize(640, 480));
+ QVERIFY(rhiWidget->depthStencilBuffer());
+ QVERIFY(rhiWidget->depthStencilBuffer()->pixelSize() != QSize(640, 480));
+}
+
+void tst_QRhiWidget::autoRt_data()
+{
+ testData();
+}
+
+void tst_QRhiWidget::autoRt()
+{
+ QFETCH(QRhiWidget::Api, api);
+
+ SimpleRhiWidget *rhiWidget = new SimpleRhiWidget;
+ rhiWidget->setApi(api);
+ QVERIFY(rhiWidget->isAutoRenderTargetEnabled());
+ rhiWidget->setAutoRenderTarget(false);
+ QVERIFY(!rhiWidget->isAutoRenderTargetEnabled());
+ QSignalSpy frameSpy(rhiWidget, &QRhiWidget::frameSubmitted);
+ QSignalSpy errorSpy(rhiWidget, &QRhiWidget::renderFailed);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(rhiWidget);
+
+ QWidget w;
+ w.setLayout(layout);
+ w.resize(1280, 720);
+ w.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+
+ QVERIFY(rhiWidget->rhi());
+ QVERIFY(rhiWidget->colorTexture());
+ QVERIFY(!rhiWidget->depthStencilBuffer());
+ QVERIFY(!rhiWidget->renderTarget());
+ QVERIFY(!rhiWidget->resolveTexture());
+
+ QVERIFY(rhiWidget->m_rt);
+ QVERIFY(rhiWidget->m_rp);
+ QCOMPARE(rhiWidget->m_rt->description().cbeginColorAttachments()->texture(), rhiWidget->colorTexture());
+
+ frameSpy.clear();
+ // do something that triggers creating a new backing texture
+ rhiWidget->setFixedColorBufferSize(QSize(320, 200));
+ QTRY_VERIFY(frameSpy.count() > 0);
+
+ QVERIFY(rhiWidget->colorTexture());
+ QCOMPARE(rhiWidget->m_rt->description().cbeginColorAttachments()->texture(), rhiWidget->colorTexture());
+}
+
+void tst_QRhiWidget::reparent_data()
+{
+ testData();
+}
+
+void tst_QRhiWidget::reparent()
+{
+ if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::MultipleWindows))
+ QSKIP("MultipleWindows capability is reported as unsupported, skipping reparenting test.");
+
+ QFETCH(QRhiWidget::Api, api);
+
+ QWidget *windowOne = new QWidget;
+ windowOne->resize(1280, 720);
+
+ SimpleRhiWidget *rhiWidget = new SimpleRhiWidget(1);
+ rhiWidget->setApi(api);
+ rhiWidget->resize(800, 600);
+ QSignalSpy frameSpy(rhiWidget, &QRhiWidget::frameSubmitted);
+ QSignalSpy errorSpy(rhiWidget, &QRhiWidget::renderFailed);
+
+ rhiWidget->show();
+ QVERIFY(QTest::qWaitForWindowExposed(rhiWidget));
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+
+ frameSpy.clear();
+ rhiWidget->setParent(windowOne);
+ windowOne->show();
+ QVERIFY(QTest::qWaitForWindowExposed(windowOne));
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+
+ frameSpy.clear();
+ QWidget windowTwo;
+ windowTwo.resize(1280, 720);
+
+ rhiWidget->setParent(&windowTwo);
+
+ // There's nothing saying the old top-level parent is going to be around,
+ // which is interesting wrt to its QRhi and resources created with that;
+ // exercise this.
+ delete windowOne;
+
+ windowTwo.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&windowTwo));
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+
+ // now reparent after show() has already been called
+ frameSpy.clear();
+ QWidget windowThree;
+ windowThree.resize(1280, 720);
+ windowThree.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&windowThree));
+
+ rhiWidget->setParent(&windowThree);
+ // this case needs a show() on rhiWidget
+ rhiWidget->show();
+
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+}
+
+void tst_QRhiWidget::grabFramebufferWhileStillInvisible_data()
+{
+ testData();
+}
+
+void tst_QRhiWidget::grabFramebufferWhileStillInvisible()
+{
+ QFETCH(QRhiWidget::Api, api);
+
+ const int maxFuzz = 1;
+
+ SimpleRhiWidget w;
+ w.setApi(api);
+ w.resize(1280, 720);
+ QSignalSpy errorSpy(&w, &QRhiWidget::renderFailed);
+
+ QImage image = w.grabFramebuffer(); // creates its own QRhi just to render offscreen
+ QVERIFY(!image.isNull());
+ QVERIFY(w.rhi());
+ QVERIFY(w.colorTexture());
+ QCOMPARE(errorSpy.count(), 0);
+ if (api != QRhiWidget::Api::Null) {
+ QRgb c = image.pixel(image.width() / 2, image.height() / 2);
+ QVERIFY(qRed(c) >= 255 - maxFuzz);
+ QVERIFY(qGreen(c) <= maxFuzz);
+ QVERIFY(qBlue(c) <= maxFuzz);
+ }
+
+ // Make the window visible, this under the hood drops the QRhiWidget's
+ // own QRhi and attaches to the backingstore's.
+ QSignalSpy frameSpy(&w, &QRhiWidget::frameSubmitted);
+ w.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+ QTRY_VERIFY(frameSpy.count() > 0);
+
+ QCOMPARE(errorSpy.count(), 0);
+
+ if (api != QRhiWidget::Api::Null) {
+ QRhiReadbackResult readResult;
+ QRhiResourceUpdateBatch *rub = w.rhi()->nextResourceUpdateBatch();
+ rub->readBackTexture(w.colorTexture(), &readResult);
+ QVERIFY(submitResourceUpdates(w.rhi(), rub));
+ QImage wrapperImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ if (w.rhi()->isYUpInFramebuffer())
+ image = wrapperImage.mirrored();
+ else
+ image = wrapperImage.copy();
+ QRgb c = image.pixel(image.width() / 2, image.height() / 2);
+ QVERIFY(qRed(c) >= 255 - maxFuzz);
+ QVERIFY(qGreen(c) <= maxFuzz);
+ QVERIFY(qBlue(c) <= maxFuzz);
+ }
+}
+
+void tst_QRhiWidget::grabViaQWidgetGrab_data()
+{
+ testData();
+}
+
+void tst_QRhiWidget::grabViaQWidgetGrab()
+{
+ QFETCH(QRhiWidget::Api, api);
+
+ SimpleRhiWidget w;
+ w.setApi(api);
+ w.resize(1280, 720);
+ QSignalSpy frameSpy(&w, &QRhiWidget::frameSubmitted);
+ w.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+ QTRY_VERIFY(frameSpy.count() > 0);
+
+ QImage image = w.grab().toImage();
+
+ if (w.rhi()->backend() != QRhi::Null) {
+ // It's upside down with Vulkan (Y is not corrected, clipSpaceCorrMatrix() is not used),
+ // but that won't matter for the test.
+ QRgb c = image.pixel(image.width() / 2, image.height() / 2);
+ const int maxFuzz = 1;
+ QVERIFY(qRed(c) >= 255 - maxFuzz);
+ QVERIFY(qGreen(c) <= maxFuzz);
+ QVERIFY(qBlue(c) <= maxFuzz);
+ }
+}
+
+void tst_QRhiWidget::mirror_data()
+{
+ testData();
+}
+
+void tst_QRhiWidget::mirror()
+{
+ QFETCH(QRhiWidget::Api, api);
+
+ SimpleRhiWidget *rhiWidget = new SimpleRhiWidget;
+ rhiWidget->setApi(api);
+ QVERIFY(!rhiWidget->isMirrorVerticallyEnabled());
+
+ QSignalSpy frameSpy(rhiWidget, &QRhiWidget::frameSubmitted);
+ QSignalSpy errorSpy(rhiWidget, &QRhiWidget::renderFailed);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(rhiWidget);
+ QWidget w;
+ w.setLayout(layout);
+ w.resize(1280, 720);
+ w.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&w));
+
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+
+ frameSpy.clear();
+ rhiWidget->setMirrorVertically(true);
+ QVERIFY(rhiWidget->isMirrorVerticallyEnabled());
+ QTRY_VERIFY(frameSpy.count() > 0);
+ QCOMPARE(errorSpy.count(), 0);
+
+ if (api != QRhiWidget::Api::Null) {
+ QRhi *rhi = rhiWidget->rhi();
+ QRhiReadbackResult readResult;
+ QRhiResourceUpdateBatch *rub = rhi->nextResourceUpdateBatch();
+ rub->readBackTexture(rhiWidget->colorTexture(), &readResult);
+ QVERIFY(submitResourceUpdates(rhi, rub));
+ QImage wrapperImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ QImage image;
+ if (rhi->isYUpInFramebuffer())
+ image = wrapperImage.mirrored();
+ else
+ image = wrapperImage.copy();
+
+ const int maxFuzz = 1;
+ QRgb c = image.pixel(50, 5);
+ if (api != QRhiWidget::Api::Vulkan) {
+ // this should be the background (greenish), not the red triangle
+ QVERIFY(qGreen(c) > qRed(c));
+ } else {
+ // remember that Vulkan is upside down due to not correcting for Y down in NDC
+ // hence this is red
+ QVERIFY(qRed(c) >= 255 - maxFuzz);
+ QVERIFY(qGreen(c) <= maxFuzz);
+ }
+ QVERIFY(qBlue(c) <= maxFuzz);
+ }
+}
+
+QTEST_MAIN(tst_QRhiWidget)
+
+#include "tst_qrhiwidget.moc"
diff --git a/tests/auto/widgets/widgets/qscrollarea/CMakeLists.txt b/tests/auto/widgets/widgets/qscrollarea/CMakeLists.txt
index a10c911286..5e84614407 100644
--- a/tests/auto/widgets/widgets/qscrollarea/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qscrollarea/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qscrollarea.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qscrollarea Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qscrollarea LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qscrollarea
SOURCES
tst_qscrollarea.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qscrollarea/tst_qscrollarea.cpp b/tests/auto/widgets/widgets/qscrollarea/tst_qscrollarea.cpp
index e0fd42e95c..87a623b223 100644
--- a/tests/auto/widgets/widgets/qscrollarea/tst_qscrollarea.cpp
+++ b/tests/auto/widgets/widgets/qscrollarea/tst_qscrollarea.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 <QTest>
diff --git a/tests/auto/widgets/widgets/qscrollbar/CMakeLists.txt b/tests/auto/widgets/widgets/qscrollbar/CMakeLists.txt
index fbaba594cf..23e31327e1 100644
--- a/tests/auto/widgets/widgets/qscrollbar/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qscrollbar/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qscrollbar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qscrollbar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qscrollbar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qscrollbar
SOURCES
tst_qscrollbar.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::TestPrivate
Qt::Widgets
diff --git a/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp b/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp
index 471a9bd3e4..fc836dec4a 100644
--- a/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp
+++ b/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.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 <QTest>
@@ -115,7 +90,7 @@ void tst_QScrollBar::task_209492()
QSignalSpy spy(verticalScrollBar, SIGNAL(actionTriggered(int)));
QCOMPARE(scrollArea.scrollCount, 0);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// Simulate a mouse click on the "scroll down button".
const QPoint pressPoint(verticalScrollBar->width() / 2, verticalScrollBar->height() - 10);
@@ -134,7 +109,7 @@ void tst_QScrollBar::task_209492()
QSKIP("The result depends on system setting and is not relevant on Mac");
#endif
QCOMPARE(scrollArea.scrollCount, 1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
#if QT_CONFIG(wheelevent)
@@ -184,7 +159,7 @@ void tst_QScrollBar::QTBUG_42871()
QSignalSpy spy(&scrollBarWidget, SIGNAL(actionTriggered(int)));
QVERIFY(spy.isValid());
QCOMPARE(myHandler.updatesCount, 0);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// Simulate a mouse click on the "scroll down button".
const QPoint pressPoint(scrollBarWidget.width() / 2, scrollBarWidget.height() - 10);
@@ -192,13 +167,20 @@ void tst_QScrollBar::QTBUG_42871()
QMouseEvent mousePressEvent(QEvent::MouseButtonPress, pressPoint, globalPressPoint,
Qt::LeftButton, Qt::LeftButton, {});
QApplication::sendEvent(&scrollBarWidget, &mousePressEvent);
+ QElapsedTimer timer;
+ timer.start();
QTest::qWait(1);
QMouseEvent mouseReleaseEvent(QEvent::MouseButtonRelease, pressPoint, globalPressPoint,
Qt::LeftButton, Qt::LeftButton, {});
QApplication::sendEvent(&scrollBarWidget, &mouseReleaseEvent);
+ if (timer.elapsed() > 40) {
+ // took too long, we need to tolerate auto-repeat
+ if (myHandler.updatesCount > 1)
+ QEXPECT_FAIL("", "Took too long to process events, repeat timer fired", Continue);
+ }
// Check that the action was triggered once.
QCOMPARE(myHandler.updatesCount, 1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), myHandler.updatesCount);
}
QTEST_MAIN(tst_QScrollBar)
diff --git a/tests/auto/widgets/widgets/qsizegrip/CMakeLists.txt b/tests/auto/widgets/widgets/qsizegrip/CMakeLists.txt
index c05b601d87..2de1583233 100644
--- a/tests/auto/widgets/widgets/qsizegrip/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qsizegrip/CMakeLists.txt
@@ -1,15 +1,20 @@
-# Generated from qsizegrip.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsizegrip Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsizegrip LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsizegrip
SOURCES
tst_qsizegrip.cpp
- INCLUDE_DIRECTORIES
- .
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp b/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp
index 1c69a1c8bd..a543efe44e 100644
--- a/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.cpp
+++ b/tests/auto/widgets/widgets/qsizegrip/tst_qsizegrip.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 <QTest>
diff --git a/tests/auto/widgets/widgets/qslider/CMakeLists.txt b/tests/auto/widgets/widgets/qslider/CMakeLists.txt
index 4fe495b3c5..664e9a52af 100644
--- a/tests/auto/widgets/widgets/qslider/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qslider/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qslider.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qslider Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qslider LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qslider
SOURCES
tst_qslider.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qslider/tst_qslider.cpp b/tests/auto/widgets/widgets/qslider/tst_qslider.cpp
index 3722025782..a70c8c484e 100644
--- a/tests/auto/widgets/widgets/qslider/tst_qslider.cpp
+++ b/tests/auto/widgets/widgets/qslider/tst_qslider.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 <QTest>
diff --git a/tests/auto/widgets/widgets/qspinbox/BLACKLIST b/tests/auto/widgets/widgets/qspinbox/BLACKLIST
deleted file mode 100644
index 96a7732165..0000000000
--- a/tests/auto/widgets/widgets/qspinbox/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[stepModifierPressAndHold]
-opensuse-42.3
diff --git a/tests/auto/widgets/widgets/qspinbox/CMakeLists.txt b/tests/auto/widgets/widgets/qspinbox/CMakeLists.txt
index adc0ee093f..826ce16d64 100644
--- a/tests/auto/widgets/widgets/qspinbox/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qspinbox/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qspinbox.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qspinbox Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qspinbox LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qspinbox
SOURCES
tst_qspinbox.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp b/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp
index fc3412f387..dfb0f71139 100644
--- a/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp
+++ b/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.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 <qdebug.h>
#include <qapplication.h>
@@ -54,6 +29,8 @@
#include <QProxyStyle>
#include <QScreen>
+#include <QtWidgets/private/qapplication_p.h>
+
#if QT_CONFIG(shortcut)
# include <QKeySequence>
#endif
@@ -950,7 +927,7 @@ void tst_QSpinBox::editingFinished()
layout->addWidget(box2);
testFocusWidget.show();
- QApplication::setActiveWindow(&testFocusWidget);
+ QApplicationPrivate::setActiveWindow(&testFocusWidget);
QVERIFY(QTest::qWaitForWindowActive(&testFocusWidget));
box->activateWindow();
box->setFocus();
@@ -964,45 +941,45 @@ void tst_QSpinBox::editingFinished()
QTest::keyClick(box, Qt::Key_Up);
QTest::keyClick(box, Qt::Key_Up);
- QCOMPARE(editingFinishedSpy1.count(), 0);
- QCOMPARE(editingFinishedSpy2.count(), 0);
+ QCOMPARE(editingFinishedSpy1.size(), 0);
+ QCOMPARE(editingFinishedSpy2.size(), 0);
QTest::keyClick(box2, Qt::Key_Up);
QTest::keyClick(box2, Qt::Key_Up);
box2->setFocus();
- QCOMPARE(editingFinishedSpy1.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 1);
box->setFocus();
- QCOMPARE(editingFinishedSpy1.count(), 1);
- QCOMPARE(editingFinishedSpy2.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 1);
+ QCOMPARE(editingFinishedSpy2.size(), 1);
QTest::keyClick(box, Qt::Key_Up);
- QCOMPARE(editingFinishedSpy1.count(), 1);
- QCOMPARE(editingFinishedSpy2.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 1);
+ QCOMPARE(editingFinishedSpy2.size(), 1);
QTest::keyClick(box, Qt::Key_Enter);
- QCOMPARE(editingFinishedSpy1.count(), 2);
- QCOMPARE(editingFinishedSpy2.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 2);
+ QCOMPARE(editingFinishedSpy2.size(), 1);
QTest::keyClick(box, Qt::Key_Return);
- QCOMPARE(editingFinishedSpy1.count(), 3);
- QCOMPARE(editingFinishedSpy2.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 3);
+ QCOMPARE(editingFinishedSpy2.size(), 1);
box2->setFocus();
- QCOMPARE(editingFinishedSpy1.count(), 4);
- QCOMPARE(editingFinishedSpy2.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 4);
+ QCOMPARE(editingFinishedSpy2.size(), 1);
QTest::keyClick(box2, Qt::Key_Enter);
- QCOMPARE(editingFinishedSpy1.count(), 4);
- QCOMPARE(editingFinishedSpy2.count(), 2);
+ QCOMPARE(editingFinishedSpy1.size(), 4);
+ QCOMPARE(editingFinishedSpy2.size(), 2);
QTest::keyClick(box2, Qt::Key_Return);
- QCOMPARE(editingFinishedSpy1.count(), 4);
- QCOMPARE(editingFinishedSpy2.count(), 3);
+ QCOMPARE(editingFinishedSpy1.size(), 4);
+ QCOMPARE(editingFinishedSpy2.size(), 3);
testFocusWidget.hide();
- QCOMPARE(editingFinishedSpy1.count(), 4);
- QCOMPARE(editingFinishedSpy2.count(), 4);
+ QCOMPARE(editingFinishedSpy1.size(), 4);
+ QCOMPARE(editingFinishedSpy2.size(), 4);
//task203285
editingFinishedSpy1.clear();
testFocusWidget.show();
QVERIFY(QTest::qWaitForWindowActive(&testFocusWidget));
box->setKeyboardTracking(false);
- qApp->setActiveWindow(&testFocusWidget);
+ QApplicationPrivate::setActiveWindow(&testFocusWidget);
testFocusWidget.activateWindow();
box->setFocus();
QTRY_VERIFY(box->hasFocus());
@@ -1012,7 +989,7 @@ void tst_QSpinBox::editingFinished()
box2->setFocus();
QTRY_VERIFY(qApp->focusWidget() != box);
QCOMPARE(box->text(), QLatin1String("20"));
- QCOMPARE(editingFinishedSpy1.count(), 1);
+ QCOMPARE(editingFinishedSpy1.size(), 1);
}
void tst_QSpinBox::removeAll()
@@ -1129,7 +1106,7 @@ void tst_QSpinBox::specialValue()
spin.setValue(50);
topWidget.show();
//make sure we have the focus (even if editingFinished fails)
- qApp->setActiveWindow(&topWidget);
+ QApplicationPrivate::setActiveWindow(&topWidget);
topWidget.activateWindow();
QVERIFY(QTest::qWaitForWindowActive(&topWidget));
spin.setFocus();
@@ -1175,33 +1152,32 @@ public:
void tst_QSpinBox::sizeHint()
{
- QWidget *widget = new QWidget;
- QHBoxLayout *layout = new QHBoxLayout(widget);
+ QWidget widget;
+ QHBoxLayout *layout = new QHBoxLayout(&widget);
+
sizeHint_SpinBox *spinBox = new sizeHint_SpinBox;
layout->addWidget(spinBox);
- widget->show();
- QVERIFY(QTest::qWaitForWindowExposed(widget));
+ // Make sure all layout requests posted by the QHBoxLayout constructor and addWidget
+ // are processed before the widget is shown
+ QCoreApplication::sendPostedEvents(&widget, QEvent::LayoutRequest);
+ widget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
// Prefix
spinBox->sizeHintRequests = 0;
spinBox->setPrefix(QLatin1String("abcdefghij"));
- qApp->processEvents();
QTRY_VERIFY(spinBox->sizeHintRequests > 0);
// Suffix
spinBox->sizeHintRequests = 0;
spinBox->setSuffix(QLatin1String("abcdefghij"));
- qApp->processEvents();
QTRY_VERIFY(spinBox->sizeHintRequests > 0);
// Range
spinBox->sizeHintRequests = 0;
spinBox->setRange(0, 1234567890);
spinBox->setValue(spinBox->maximum());
- qApp->processEvents();
QTRY_VERIFY(spinBox->sizeHintRequests > 0);
-
- delete widget;
}
void tst_QSpinBox::taskQTBUG_5008_textFromValueAndValidate()
@@ -1234,7 +1210,7 @@ void tst_QSpinBox::taskQTBUG_5008_textFromValueAndValidate()
spinbox.show();
spinbox.activateWindow();
spinbox.setFocus();
- QApplication::setActiveWindow(&spinbox);
+ QApplicationPrivate::setActiveWindow(&spinbox);
QVERIFY(QTest::qWaitForWindowActive(&spinbox));
QVERIFY(spinbox.hasFocus());
QTRY_COMPARE(static_cast<QWidget *>(&spinbox), QApplication::activeWindow());
@@ -1282,7 +1258,7 @@ void tst_QSpinBox::lineEditReturnPressed()
QSignalSpy spyCurrentChanged(spinBox.lineEdit(), SIGNAL(returnPressed()));
spinBox.show();
QTest::keyClick(&spinBox, Qt::Key_Return);
- QCOMPARE(spyCurrentChanged.count(), 1);
+ QCOMPARE(spyCurrentChanged.size(), 1);
}
void tst_QSpinBox::positiveSign()
@@ -1854,10 +1830,6 @@ void tst_QSpinBox::stepModifierPressAndHold()
spin.setStyle(stepModifierStyle.data());
QSignalSpy spy(&spin, &SpinBox::valueChanged);
- // TODO: remove debug output when QTBUG-69492 is fixed
- connect(&spin, &SpinBox::valueChanged, [=]() {
- qDebug() << QTime::currentTime() << "valueChanged emitted";
- });
spin.show();
QVERIFY(QTest::qWaitForWindowActive(&spin));
@@ -1872,13 +1844,13 @@ void tst_QSpinBox::stepModifierPressAndHold()
qDebug() << "QGuiApplication::focusWindow():" << QGuiApplication::focusWindow();
qDebug() << "QGuiApplication::topLevelWindows():" << QGuiApplication::topLevelWindows();
QTest::mousePress(&spin, Qt::LeftButton, modifiers, buttonRect.center());
- QTRY_VERIFY2(spy.length() >= 3, qPrintable(QString::fromLatin1(
- "Expected valueChanged() to be emitted 3 or more times, but it was only emitted %1 times").arg(spy.length())));
+ QTRY_VERIFY2(spy.size() >= 3, qPrintable(QString::fromLatin1(
+ "Expected valueChanged() to be emitted 3 or more times, but it was only emitted %1 times").arg(spy.size())));
QTest::mouseRelease(&spin, Qt::LeftButton, modifiers, buttonRect.center());
const auto value = spy.last().at(0);
QVERIFY(value.metaType().id() == QMetaType::Int);
- QCOMPARE(value.toInt(), spy.length() * expectedStepModifier);
+ QCOMPARE(value.toInt(), spy.size() * expectedStepModifier);
}
void tst_QSpinBox::stepSelectAll_data()
diff --git a/tests/auto/widgets/widgets/qsplashscreen/CMakeLists.txt b/tests/auto/widgets/widgets/qsplashscreen/CMakeLists.txt
index 7c13db39a2..12602328c3 100644
--- a/tests/auto/widgets/widgets/qsplashscreen/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qsplashscreen/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qsplashscreen.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsplashscreen Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsplashscreen LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qsplashscreen
SOURCES
tst_qsplashscreen.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qsplashscreen/tst_qsplashscreen.cpp b/tests/auto/widgets/widgets/qsplashscreen/tst_qsplashscreen.cpp
index c038682788..f57634152a 100644
--- a/tests/auto/widgets/widgets/qsplashscreen/tst_qsplashscreen.cpp
+++ b/tests/auto/widgets/widgets/qsplashscreen/tst_qsplashscreen.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QSplashScreen>
+#include <QTimer>
class tst_QSplashScreen : public QObject
{
@@ -36,7 +12,7 @@ class tst_QSplashScreen : public QObject
private slots:
void checkCloseTime();
- void checkScreenConstructor();
+ void checkConstructorAndShow();
};
class CloseEventSplash : public QSplashScreen
@@ -45,7 +21,7 @@ public:
CloseEventSplash(const QPixmap &pix) : QSplashScreen(pix), receivedCloseEvent(false) {}
bool receivedCloseEvent;
protected:
- void closeEvent(QCloseEvent *event)
+ void closeEvent(QCloseEvent *event) override
{
receivedCloseEvent = true;
QSplashScreen::closeEvent(event);
@@ -60,23 +36,26 @@ void tst_QSplashScreen::checkCloseTime()
QVERIFY(!splash.receivedCloseEvent);
QWidget w;
splash.show();
- QTimer::singleShot(500, &w, SLOT(show()));
+ QTimer::singleShot(10, &w, &QWidget::show);
QVERIFY(!splash.receivedCloseEvent);
splash.finish(&w);
QVERIFY(splash.receivedCloseEvent);
// We check the window handle because if this is not valid, then
// it can't have been exposed
QVERIFY(w.windowHandle());
- QVERIFY(w.windowHandle()->isExposed());
+ QVERIFY(w.windowHandle()->isVisible());
}
-void tst_QSplashScreen::checkScreenConstructor()
+void tst_QSplashScreen::checkConstructorAndShow()
{
- for (const auto screen : QGuiApplication::screens()) {
- QSplashScreen splash(screen);
+ QPixmap pix(100, 100);
+ pix.fill(Qt::red);
+ for (auto *screen : QGuiApplication::screens()) {
+ QSplashScreen splash(screen, pix);
splash.show();
QCOMPARE(splash.screen(), screen);
QVERIFY(splash.windowHandle());
+ QVERIFY(splash.windowHandle()->isVisible());
QCOMPARE(splash.windowHandle()->screen(), screen);
}
}
diff --git a/tests/auto/widgets/widgets/qsplitter/CMakeLists.txt b/tests/auto/widgets/widgets/qsplitter/CMakeLists.txt
index 6cbbfd3792..16244c8834 100644
--- a/tests/auto/widgets/widgets/qsplitter/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qsplitter/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qsplitter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qsplitter Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qsplitter LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "extradata.txt")
list(APPEND test_data "setSizes3.dat")
@@ -11,7 +18,7 @@ list(APPEND test_data "setSizes3.dat")
qt_internal_add_test(tst_qsplitter
SOURCES
tst_qsplitter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
TESTDATA ${test_data}
diff --git a/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp b/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
index ce7ac0a186..071e6d4cbc 100644
--- a/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
+++ b/tests/auto/widgets/widgets/qsplitter/tst_qsplitter.cpp
@@ -1,33 +1,10 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <QSignalSpy>
+
#include <qapplication.h>
#include <qsplitter.h>
#include <qstyle.h>
@@ -81,6 +58,8 @@ private slots:
void replaceWidget();
void replaceWidgetWithSplitterChild_data();
void replaceWidgetWithSplitterChild();
+ void replaceWidgetWhileHidden_data();
+ void replaceWidgetWhileHidden();
void handleMinimumWidth();
// task-specific tests below me:
@@ -89,6 +68,7 @@ private slots:
void task169702_sizes();
void taskQTBUG_4101_ensureOneNonCollapsedWidget_data();
void taskQTBUG_4101_ensureOneNonCollapsedWidget();
+ void taskQTBUG_102249_moveNonPressed();
void setLayout();
void autoAdd();
@@ -851,6 +831,47 @@ void tst_QSplitter::replaceWidgetWithSplitterChild()
}
}
+void tst_QSplitter::replaceWidgetWhileHidden_data()
+{
+ QTest::addColumn<bool>("splitterVisible");
+ QTest::addColumn<bool>("widgetVisible");
+
+ QTest::addRow("visibleToVisible") << true << true;
+ QTest::addRow("hiddenToVisible") << true << false;
+ QTest::addRow("visibleToHidden") << false << true;
+ QTest::addRow("hiddenToHidden") << false << false;
+}
+
+void tst_QSplitter::replaceWidgetWhileHidden()
+{
+ QFETCH(bool, splitterVisible);
+ QFETCH(bool, widgetVisible);
+
+ MyFriendlySplitter splitter;
+
+ splitter.addWidget(new QLabel("One"));
+ splitter.addWidget(new QLabel("Two"));
+
+ if (splitterVisible) {
+ splitter.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&splitter));
+ }
+ QWidget *newWidget = new QLabel("Three");
+ if (!widgetVisible)
+ newWidget->hide();
+
+ const bool wasExplicitHide = !widgetVisible && newWidget->testAttribute(Qt::WA_WState_ExplicitShowHide);
+ splitter.replaceWidget(1, newWidget);
+
+ QCOMPARE(!widgetVisible && newWidget->testAttribute(Qt::WA_WState_ExplicitShowHide), wasExplicitHide);
+
+ if (!splitterVisible) {
+ splitter.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&splitter));
+ }
+ QCOMPARE(widgetVisible, newWidget->isVisible());
+}
+
void tst_QSplitter::handleMinimumWidth()
{
MyFriendlySplitter split;
@@ -887,55 +908,56 @@ void tst_QSplitter::rubberBandNotInSplitter()
void tst_QSplitter::task187373_addAbstractScrollAreas_data()
{
- QTest::addColumn<QString>("className");
+ QTest::addColumn<QByteArray>("className");
QTest::addColumn<bool>("addInConstructor");
QTest::addColumn<bool>("addOutsideConstructor");
- QStringList classNames;
- classNames << QLatin1String("QGraphicsView");
- classNames << QLatin1String("QMdiArea");
- classNames << QLatin1String("QScrollArea");
- classNames << QLatin1String("QTextEdit");
- classNames << QLatin1String("QTreeView");
-
- foreach (QString className, classNames) {
- QTest::newRow(qPrintable(className + QLatin1String(" 1"))) << className << false << true;
- QTest::newRow(qPrintable(className + QLatin1String(" 2"))) << className << true << false;
- QTest::newRow(qPrintable(className + QLatin1String(" 3"))) << className << true << true;
+ QList<QByteArray> classNames{
+ "QGraphicsView",
+ "QMdiArea",
+ "QScrollArea",
+ "QTextEdit",
+ "QTreeView"
+ };
+
+ for (const auto &className : std::as_const(classNames)) {
+ QTest::newRow(qPrintable(className + " 1")) << className << false << true;
+ QTest::newRow(qPrintable(className + " 2")) << className << true << false;
+ QTest::newRow(qPrintable(className + " 3")) << className << true << true;
}
}
static QAbstractScrollArea *task187373_createScrollArea(
- QSplitter *splitter, const QString &className, bool addInConstructor)
+ QSplitter *splitter, const QByteArray &className, bool addInConstructor)
{
- if (className == QLatin1String("QGraphicsView"))
+ if (className == "QGraphicsView")
return new QGraphicsView(addInConstructor ? splitter : 0);
- if (className == QLatin1String("QMdiArea"))
+ if (className == "QMdiArea")
return new QMdiArea(addInConstructor ? splitter : 0);
- if (className == QLatin1String("QScrollArea"))
+ if (className == "QScrollArea")
return new QScrollArea(addInConstructor ? splitter : 0);
- if (className == QLatin1String("QTextEdit"))
+ if (className == "QTextEdit")
return new QTextEdit(addInConstructor ? splitter : 0);
- if (className == QLatin1String("QTreeView"))
+ if (className == "QTreeView")
return new QTreeView(addInConstructor ? splitter : 0);
return 0;
}
void tst_QSplitter::task187373_addAbstractScrollAreas()
{
- QFETCH(QString, className);
+ QFETCH(QByteArray, className);
QFETCH(bool, addInConstructor);
QFETCH(bool, addOutsideConstructor);
QVERIFY(addInConstructor || addOutsideConstructor);
- QSplitter *splitter = new QSplitter;
- splitter->show();
- QVERIFY(splitter->isVisible());
+ QSplitter splitter;
+ splitter.show();
+ QVERIFY(splitter.isVisible());
- QAbstractScrollArea *w = task187373_createScrollArea(splitter, className, addInConstructor);
+ QAbstractScrollArea *w = task187373_createScrollArea(&splitter, className, addInConstructor);
QVERIFY(w);
if (addOutsideConstructor)
- splitter->addWidget(w);
+ splitter.addWidget(w);
QTRY_VERIFY(w->isVisible());
QVERIFY(!w->isHidden());
@@ -1010,7 +1032,7 @@ void tst_QSplitter::taskQTBUG_4101_ensureOneNonCollapsedWidget()
QFETCH(bool, testingHide);
MyFriendlySplitter s;
- QLabel *l;
+ QLabel *l = nullptr;
for (int i = 0; i < 5; ++i) {
l = new QLabel(QString("Label ") + QChar('A' + i));
l->setAlignment(Qt::AlignCenter);
@@ -1026,6 +1048,24 @@ void tst_QSplitter::taskQTBUG_4101_ensureOneNonCollapsedWidget()
QTRY_VERIFY(s.sizes().at(0) > 0);
}
+void tst_QSplitter::taskQTBUG_102249_moveNonPressed()
+{
+ QSplitter s;
+ s.setOpaqueResize(true);
+ s.addWidget(new QWidget());
+ s.addWidget(new QWidget());
+ s.show();
+
+ QSignalSpy spyMove(&s, &QSplitter::splitterMoved);
+ QPointF posOutOfWidget = QPointF(30, 30);
+ QMouseEvent me(QEvent::MouseMove,
+ posOutOfWidget, s.mapToGlobal(posOutOfWidget),
+ Qt::NoButton, Qt::MouseButtons(Qt::LeftButton),
+ Qt::NoModifier);
+ qApp->sendEvent(s.handle(0), &me);
+ QCOMPARE(spyMove.size(), 0);
+}
+
void tst_QSplitter::setLayout()
{
QSplitter splitter;
diff --git a/tests/auto/widgets/widgets/qstackedwidget/CMakeLists.txt b/tests/auto/widgets/widgets/qstackedwidget/CMakeLists.txt
index 7c99df28a4..0c79cf29f4 100644
--- a/tests/auto/widgets/widgets/qstackedwidget/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qstackedwidget/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qstackedwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstackedwidget Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstackedwidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstackedwidget
SOURCES
tst_qstackedwidget.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/widgets/qstackedwidget/tst_qstackedwidget.cpp b/tests/auto/widgets/widgets/qstackedwidget/tst_qstackedwidget.cpp
index df3b943e05..0a1b140867 100644
--- a/tests/auto/widgets/widgets/qstackedwidget/tst_qstackedwidget.cpp
+++ b/tests/auto/widgets/widgets/qstackedwidget/tst_qstackedwidget.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 <QTest>
@@ -36,6 +11,8 @@
#include <QHBoxLayout>
#include <qlineedit.h>
+#include <QtWidgets/private/qapplication_p.h>
+
class tst_QStackedWidget : public QObject
{
Q_OBJECT
@@ -182,7 +159,7 @@ void tst_QStackedWidget::dynamicPages()
le11->setFocus(); // set focus to second widget in the page
sw->resize(200, 200);
sw->show();
- qApp->setActiveWindow(sw);
+ QApplicationPrivate::setActiveWindow(sw);
QVERIFY(QTest::qWaitForWindowActive(sw));
QTRY_COMPARE(QApplication::focusWidget(), le11);
diff --git a/tests/auto/widgets/widgets/qstatusbar/CMakeLists.txt b/tests/auto/widgets/widgets/qstatusbar/CMakeLists.txt
index e4e19e230e..3bda170936 100644
--- a/tests/auto/widgets/widgets/qstatusbar/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qstatusbar/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qstatusbar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qstatusbar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qstatusbar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qstatusbar
SOURCES
tst_qstatusbar.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qstatusbar/tst_qstatusbar.cpp b/tests/auto/widgets/widgets/qstatusbar/tst_qstatusbar.cpp
index d7079197ce..b0a53ba01a 100644
--- a/tests/auto/widgets/widgets/qstatusbar/tst_qstatusbar.cpp
+++ b/tests/auto/widgets/widgets/qstatusbar/tst_qstatusbar.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 <QTest>
@@ -48,6 +23,7 @@ private slots:
void tempMessage();
void insertWidget();
void insertPermanentWidget();
+ void removeWidget();
void setSizeGripEnabled();
void task194017_hiddenWidget();
void QTBUG4334_hiddenOnMaximizedWindow();
@@ -129,6 +105,49 @@ void tst_QStatusBar::insertPermanentWidget()
QCOMPARE(sb.insertPermanentWidget(1, new QLabel("foo")), 6);
}
+void tst_QStatusBar::removeWidget()
+{
+ QStatusBar sb;
+ std::vector<std::unique_ptr<QLabel>> widgets;
+ std::vector<bool> states;
+ for (int i = 0; i < 10; ++i) {
+ const QString text = i > 5 ? QString("p_%1").arg(i) : QString::number(i);
+ widgets.push_back(std::make_unique<QLabel>(text));
+ states.push_back(true);
+ }
+
+ for (auto &&widget : widgets) {
+ if (widget->text().startsWith("p_"))
+ sb.addPermanentWidget(widget.get());
+ else
+ sb.addWidget(widget.get());
+ }
+ sb.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&sb));
+
+ auto checkStates = [&]{
+ for (size_t index = 0; index < std::size(widgets); ++index) {
+ if (widgets.at(index)->isVisible() != states.at(index)) {
+ qCritical("Mismatch for widget at index %zu\n"
+ "\tActual : %s\n"
+ "\tExpected: %s",
+ index, widgets.at(index)->isVisible() ? "true" : "false",
+ states.at(index) ? "true" : "false");
+ return false;
+ }
+ }
+ return true;
+ };
+
+ QVERIFY(checkStates());
+ // remove every widget except the first to trigger unstable reference
+ for (size_t i = 2; i < std::size(widgets); ++i) {
+ sb.removeWidget(widgets[i].get());
+ states[i] = false;
+ QVERIFY2(checkStates(), qPrintable(QString("Failure at index %1").arg(i)));
+ }
+}
+
void tst_QStatusBar::setSizeGripEnabled()
{
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
@@ -297,18 +316,18 @@ void tst_QStatusBar::messageChangedSignal()
testWidget->showMessage("Ready", 0);
QCOMPARE(testWidget->currentMessage(), QString("Ready"));
QCOMPARE(testWidget->currentMessage(), currentMessage);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.takeFirst().at(0).toString(), currentMessage);
testWidget->clearMessage();
QCOMPARE(testWidget->currentMessage(), QString());
QCOMPARE(testWidget->currentMessage(), currentMessage);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.takeFirst().at(0).toString(), currentMessage);
testWidget->showMessage("Ready", 0);
testWidget->showMessage("Ready", 0);
QCOMPARE(testWidget->currentMessage(), QString("Ready"));
QCOMPARE(testWidget->currentMessage(), currentMessage);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.takeFirst().at(0).toString(), currentMessage);
}
diff --git a/tests/auto/widgets/widgets/qtabbar/BLACKLIST b/tests/auto/widgets/widgets/qtabbar/BLACKLIST
deleted file mode 100644
index 735b044d8b..0000000000
--- a/tests/auto/widgets/widgets/qtabbar/BLACKLIST
+++ /dev/null
@@ -1,2 +0,0 @@
-[sizeHints]
-redhatenterpriselinuxworkstation-6.6
diff --git a/tests/auto/widgets/widgets/qtabbar/CMakeLists.txt b/tests/auto/widgets/widgets/qtabbar/CMakeLists.txt
index edc90d3138..b79e763819 100644
--- a/tests/auto/widgets/widgets/qtabbar/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qtabbar/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qtabbar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtabbar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtabbar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtabbar
SOURCES
tst_qtabbar.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp
index f51f0a23d5..03131cebe4 100644
--- a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp
+++ b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSignalSpy>
@@ -36,6 +11,12 @@
#include <QStyleOptionTab>
#include <QProxyStyle>
#include <QTimer>
+#include <QScreen>
+#include <QWindow>
+
+#include <QtWidgets/private/qtabbar_p.h>
+
+using namespace Qt::StringLiterals;
class TabBar;
@@ -69,6 +50,7 @@ private slots:
void hideTab_data();
void hideTab();
void hideAllTabs();
+ void checkHiddenTab();
void setElideMode_data();
void setElideMode();
@@ -78,6 +60,7 @@ private slots:
void setUsesScrollButtons();
void removeLastTab();
+ void removeLastVisibleTab();
void closeButton();
@@ -114,6 +97,13 @@ private slots:
void hoverTab_data();
void hoverTab();
+ void resizeKeepsScroll_data();
+ void resizeKeepsScroll();
+ void changeTabTextKeepsScroll();
+ void settingCurrentTabBeforeShowDoesntScroll();
+ void checkPositionsAfterShapeChange();
+ void checkScrollOffsetAfterTabRemoval();
+
private:
void checkPositions(const TabBar &tabbar, const QList<int> &positions);
};
@@ -229,7 +219,7 @@ void tst_QTabBar::testCurrentChanged()
QCOMPARE(tabBar.currentIndex(), 0);
tabBar.setCurrentIndex(tabToSet);
QCOMPARE(tabBar.currentIndex(), tabToSet);
- QCOMPARE(spy.count(), expectedCount);
+ QCOMPARE(spy.size(), expectedCount);
}
class TabBar : public QTabBar
@@ -303,7 +293,7 @@ void tst_QTabBar::removeTab()
tabbar.setCurrentIndex(currentIndex);
QSignalSpy spy(&tabbar, SIGNAL(currentChanged(int)));
tabbar.removeTab(deleteIndex);
- QTEST(int(spy.count()), "spyCount");
+ QTEST(int(spy.size()), "spyCount");
QTEST(tabbar.currentIndex(), "finalIndex");
}
@@ -334,7 +324,7 @@ void tst_QTabBar::hideTab()
tabbar.setCurrentIndex(currentIndex);
QSignalSpy spy(&tabbar, &QTabBar::currentChanged);
tabbar.setTabVisible(hideIndex, false);
- QTEST(int(spy.count()), "spyCount");
+ QTEST(int(spy.size()), "spyCount");
QTEST(tabbar.currentIndex(), "finalIndex");
}
@@ -380,6 +370,25 @@ void tst_QTabBar::hideAllTabs()
QVERIFY(sizeHint.width() < prevSizeHint.width());
}
+void tst_QTabBar::checkHiddenTab()
+{
+ QTabBar tabbar;
+
+ tabbar.addTab("foo");
+ tabbar.addTab("bar");
+ tabbar.addTab("baz");
+ tabbar.setCurrentIndex(0);
+ tabbar.setTabVisible(1, false);
+
+ QKeyEvent keyRight(QKeyEvent::KeyPress, Qt::Key_Right, Qt::NoModifier);
+ QVERIFY(QApplication::sendEvent(&tabbar, &keyRight));
+ QCOMPARE(tabbar.currentIndex(), 2);
+
+ QKeyEvent keyLeft(QKeyEvent::KeyPress, Qt::Key_Left, Qt::NoModifier);
+ QVERIFY(QApplication::sendEvent(&tabbar, &keyLeft));
+ QCOMPARE(tabbar.currentIndex(), 0);
+}
+
void tst_QTabBar::setElideMode_data()
{
QTest::addColumn<int>("tabElideMode");
@@ -478,16 +487,49 @@ void tst_QTabBar::removeLastTab()
QTabBar tabbar;
QSignalSpy spy(&tabbar, SIGNAL(currentChanged(int)));
int index = tabbar.addTab("foo");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toInt(), index);
spy.clear();
tabbar.removeTab(index);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toInt(), -1);
spy.clear();
}
+void tst_QTabBar::removeLastVisibleTab()
+{
+ QTabBar tabbar;
+ tabbar.setSelectionBehaviorOnRemove(QTabBar::SelectionBehavior::SelectRightTab);
+
+ int invisible = tabbar.addTab("invisible");
+ int visible = tabbar.addTab("visible");
+ tabbar.setCurrentIndex(visible);
+ tabbar.adjustSize();
+
+ tabbar.setTabVisible(invisible, false);
+ {
+ QSignalSpy spy(&tabbar, SIGNAL(currentChanged(int)));
+ tabbar.removeTab(visible);
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(spy.at(0).at(0).toInt(), -1);
+ QCOMPARE(tabbar.currentIndex(), -1);
+ }
+
+ tabbar.setSelectionBehaviorOnRemove(QTabBar::SelectionBehavior::SelectLeftTab);
+ visible = tabbar.insertTab(0, "visible");
+ ++invisible;
+ QVERIFY(!tabbar.isTabVisible(invisible));
+ tabbar.setCurrentIndex(visible);
+ {
+ QSignalSpy spy(&tabbar, SIGNAL(currentChanged(int)));
+ tabbar.removeTab(visible);
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(spy.at(0).at(0).toInt(), -1);
+ QCOMPARE(tabbar.currentIndex(), -1);
+ }
+}
+
void tst_QTabBar::closeButton()
{
QTabBar tabbar;
@@ -506,7 +548,7 @@ void tst_QTabBar::closeButton()
QSignalSpy spy(&tabbar, SIGNAL(tabCloseRequested(int)));
button->click();
QCOMPARE(tabbar.count(), 1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
Q_DECLARE_METATYPE(QTabBar::ButtonPosition)
@@ -778,36 +820,36 @@ void tst_QTabBar::tabBarClicked()
QSignalSpy clickSpy(&tabBar, SIGNAL(tabBarClicked(int)));
QSignalSpy doubleClickSpy(&tabBar, SIGNAL(tabBarDoubleClicked(int)));
- QCOMPARE(clickSpy.count(), 0);
- QCOMPARE(doubleClickSpy.count(), 0);
+ QCOMPARE(clickSpy.size(), 0);
+ QCOMPARE(doubleClickSpy.size(), 0);
Qt::MouseButton button = Qt::LeftButton;
while (button <= Qt::MaxMouseButton) {
const QPoint tabPos = tabBar.tabRect(0).center();
QTest::mouseClick(&tabBar, button, {}, tabPos);
- QCOMPARE(clickSpy.count(), 1);
+ QCOMPARE(clickSpy.size(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), 0);
- QCOMPARE(doubleClickSpy.count(), 0);
+ QCOMPARE(doubleClickSpy.size(), 0);
QTest::mouseDClick(&tabBar, button, {}, tabPos);
- QCOMPARE(clickSpy.count(), 1);
+ QCOMPARE(clickSpy.size(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), 0);
- QCOMPARE(doubleClickSpy.count(), 1);
+ QCOMPARE(doubleClickSpy.size(), 1);
QCOMPARE(doubleClickSpy.takeFirst().takeFirst().toInt(), 0);
QTest::mouseRelease(&tabBar, button, {}, tabPos);
const QPoint barPos(tabBar.tabRect(0).right() + 5, tabBar.tabRect(0).center().y());
QTest::mouseClick(&tabBar, button, {}, barPos);
- QCOMPARE(clickSpy.count(), 1);
+ QCOMPARE(clickSpy.size(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), -1);
- QCOMPARE(doubleClickSpy.count(), 0);
+ QCOMPARE(doubleClickSpy.size(), 0);
QTest::mouseDClick(&tabBar, button, {}, barPos);
- QCOMPARE(clickSpy.count(), 1);
+ QCOMPARE(clickSpy.size(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), -1);
- QCOMPARE(doubleClickSpy.count(), 1);
+ QCOMPARE(doubleClickSpy.size(), 1);
QCOMPARE(doubleClickSpy.takeFirst().takeFirst().toInt(), -1);
QTest::mouseRelease(&tabBar, button, {}, barPos);
@@ -1011,8 +1053,8 @@ void tst_QTabBar::kineticWheel()
window.show();
QVERIFY(QTest::qWaitForWindowExposed(&window));
- const auto *leftButton = tabbar.findChild<QAbstractButton*>(u"ScrollLeftButton"_qs);
- const auto *rightButton = tabbar.findChild<QAbstractButton*>(u"ScrollRightButton"_qs);
+ const auto *leftButton = tabbar.findChild<QAbstractButton*>(u"ScrollLeftButton"_s);
+ const auto *rightButton = tabbar.findChild<QAbstractButton*>(u"ScrollRightButton"_s);
QVERIFY(leftButton && rightButton);
QVERIFY(leftButton->isEnabled() && rightButton->isEnabled());
@@ -1190,8 +1232,8 @@ void tst_QTabBar::scrollButtons()
window.show();
QVERIFY(QTest::qWaitForWindowActive(&window));
- auto *leftB = tabWidget.tabBar()->findChild<QAbstractButton*>(u"ScrollLeftButton"_qs);
- auto *rightB = tabWidget.tabBar()->findChild<QAbstractButton*>(u"ScrollRightButton"_qs);
+ auto *leftB = tabWidget.tabBar()->findChild<QAbstractButton*>(u"ScrollLeftButton"_s);
+ auto *rightB = tabWidget.tabBar()->findChild<QAbstractButton*>(u"ScrollRightButton"_s);
QVERIFY(leftB->isVisible());
QVERIFY(!leftB->isEnabled());
@@ -1246,9 +1288,10 @@ void tst_QTabBar::currentTabLargeFont()
void tst_QTabBar::hoverTab_data()
{
- // Since we still rely on moving the mouse via QCursor::setPos in QTest::mouseMove,
+ // Move the cursor away from the widget as not to interfere.
// skip this test if we can't
- const QPoint cursorPos = QCursor::pos() + QPoint(10, 10);
+ const QPoint topLeft = QGuiApplication::primaryScreen()->availableGeometry().topLeft();
+ const QPoint cursorPos = topLeft + QPoint(10, 10);
QCursor::setPos(cursorPos);
if (!QTest::qWaitFor([cursorPos]{ return QCursor::pos() == cursorPos; }, 500))
QSKIP("Can't move mouse");
@@ -1261,7 +1304,7 @@ void tst_QTabBar::hoverTab_data()
void tst_QTabBar::hoverTab()
{
QFETCH(bool, documentMode);
- QWidget window;
+ QWidget topLevel;
class TabBar : public QTabBar
{
public:
@@ -1272,7 +1315,7 @@ void tst_QTabBar::hoverTab()
styleOptions[tabIndex] = *option;
}
mutable QHash<int, QStyleOptionTab> styleOptions;
- } tabbar(&window);
+ } tabbar(&topLevel);
tabbar.setDocumentMode(documentMode);
tabbar.addTab("A");
@@ -1281,7 +1324,10 @@ void tst_QTabBar::hoverTab()
tabbar.addTab("D");
tabbar.move(0,0);
- window.setMinimumSize(tabbar.sizeHint());
+ const QSize size = tabbar.sizeHint();
+ const auto center = topLevel.screen()->availableGeometry().center();
+ topLevel.move(center - QPoint{size.width(), size.height()} / 2);
+ topLevel.setMinimumSize(size);
tabbar.ensurePolished();
// some styles set those flags, some don't. If not, use a style sheet
@@ -1293,21 +1339,25 @@ void tst_QTabBar::hoverTab()
)");
}
- window.show();
- QVERIFY(QTest::qWaitForWindowExposed(&window));
+ topLevel.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&topLevel));
+ auto *window = topLevel.windowHandle();
- QTest::mouseMove(&tabbar, tabbar.tabRect(0).center());
+ auto pos = tabbar.mapToParent(tabbar.tabRect(0).center());
+ QTest::mouseMove(window, pos);
QTRY_VERIFY(tabbar.styleOptions[0].state & QStyle::State_Selected);
QTRY_COMPARE(tabbar.styleOptions[1].state & QStyle::State_MouseOver, QStyle::State_None);
QTRY_COMPARE(tabbar.styleOptions[2].state & QStyle::State_MouseOver, QStyle::State_None);
QTRY_COMPARE(tabbar.styleOptions[3].state & QStyle::State_MouseOver, QStyle::State_None);
- QTest::mouseMove(&tabbar, tabbar.tabRect(1).center());
+ pos = tabbar.mapToParent(tabbar.tabRect(1).center());
+ QTest::mouseMove(window, pos);
QTRY_COMPARE(tabbar.styleOptions[1].state & QStyle::State_MouseOver, QStyle::State_MouseOver);
QCOMPARE(tabbar.styleOptions[2].state & QStyle::State_MouseOver, QStyle::State_None);
QCOMPARE(tabbar.styleOptions[3].state & QStyle::State_MouseOver, QStyle::State_None);
- QTest::mouseMove(&tabbar, tabbar.tabRect(2).center());
+ pos = tabbar.mapToParent(tabbar.tabRect(2).center());
+ QTest::mouseMove(window, pos);
QTRY_COMPARE(tabbar.styleOptions[2].state & QStyle::State_MouseOver, QStyle::State_MouseOver);
QCOMPARE(tabbar.styleOptions[1].state & QStyle::State_MouseOver, QStyle::State_None);
QCOMPARE(tabbar.styleOptions[3].state & QStyle::State_MouseOver, QStyle::State_None);
@@ -1325,5 +1375,226 @@ void tst_QTabBar::hoverTab()
QCOMPARE(tabbar.styleOptions[1].state & QStyle::State_MouseOver, QStyle::State_None);
}
+
+void tst_QTabBar::resizeKeepsScroll_data()
+{
+ QTest::addColumn<QTabBar::Shape>("tabShape");
+ QTest::addColumn<bool>("expanding");
+
+ QTest::addRow("North, expanding") << QTabBar::RoundedNorth << true;
+ QTest::addRow("East, expanding") << QTabBar::RoundedEast << true;
+ QTest::addRow("South, expanding") << QTabBar::RoundedSouth << true;
+ QTest::addRow("West, expanding") << QTabBar::RoundedWest << true;
+
+ QTest::addRow("North, not expanding") << QTabBar::RoundedNorth << false;
+ QTest::addRow("South, not expanding") << QTabBar::RoundedSouth << false;
+}
+
+void tst_QTabBar::resizeKeepsScroll()
+{
+ QFETCH(QTabBar::Shape, tabShape);
+ QFETCH(const bool, expanding);
+
+ QTabBar tabBar;
+ TabBarScrollingProxyStyle proxyStyle;
+ tabBar.setStyle(&proxyStyle);
+
+ for (int i = 0; i < 10; ++i)
+ tabBar.addTab(u"Tab Number %1"_s.arg(i));
+
+ tabBar.setShape(tabShape);
+ tabBar.setUsesScrollButtons(true);
+ tabBar.setExpanding(expanding);
+
+ // resize to half
+ const QSize fullSize = tabBar.sizeHint();
+ const bool horizontal = fullSize.width() > fullSize.height();
+ if (horizontal)
+ tabBar.resize(fullSize.width() / 2, fullSize.height());
+ else
+ tabBar.resize(fullSize.width(), fullSize.height() / 2);
+
+ tabBar.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&tabBar));
+
+ const auto getScrollOffset = [&]() -> int {
+ return static_cast<QTabBarPrivate *>(QObjectPrivate::get(&tabBar))->scrollOffset;
+ };
+
+ // select a tab outside, this will scroll
+ tabBar.setCurrentIndex(6);
+ // the first tab is now scrolled out
+ const int scrollOffset = getScrollOffset();
+ QCOMPARE_GT(scrollOffset, 0);
+ // the current index is now fully visible, with margin on both sides
+ tabBar.setCurrentIndex(5);
+
+ // make the tab bar a bit larger, by the width of a tab
+ if (horizontal)
+ tabBar.resize(tabBar.width() + tabBar.tabRect(5).width(), tabBar.height());
+ else
+ tabBar.resize(tabBar.width(), tabBar.height() + tabBar.tabRect(5).height());
+
+ // this should not change the scroll
+ QCOMPARE(getScrollOffset(), scrollOffset);
+
+ // make the tab bar large enough to fit everything with extra space
+ tabBar.resize(fullSize + QSize(50, 50));
+
+ // there should be no scroll
+ QCOMPARE(getScrollOffset(), 0);
+
+ for (int i = 0; i < tabBar.count(); ++i) {
+ tabBar.setCurrentIndex(i);
+ QCOMPARE(getScrollOffset(), 0);
+ }
+}
+
+void tst_QTabBar::changeTabTextKeepsScroll()
+{
+ QTabBar tabBar;
+ TabBarScrollingProxyStyle proxyStyle;
+ tabBar.setStyle(&proxyStyle);
+
+ for (int i = 0; i < 6; ++i)
+ tabBar.addTab(u"Tab Number %1"_s.arg(i));
+
+ const QSize fullSize = tabBar.sizeHint();
+ tabBar.resize(fullSize.width() / 2, fullSize.height());
+
+ tabBar.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&tabBar));
+
+ const auto getScrollOffset = [&]() -> int {
+ return static_cast<QTabBarPrivate *>(QObjectPrivate::get(&tabBar))->scrollOffset;
+ };
+
+ tabBar.setCurrentIndex(3);
+ const int scrollOffset = getScrollOffset();
+ tabBar.setTabText(3, "New title");
+ QCOMPARE(getScrollOffset(), scrollOffset);
+}
+
+void tst_QTabBar::settingCurrentTabBeforeShowDoesntScroll()
+{
+ QTabBar tabBar;
+ TabBarScrollingProxyStyle proxyStyle;
+ tabBar.setStyle(&proxyStyle);
+
+ for (int i = 0; i < 6; ++i)
+ tabBar.addTab(u"Tab Number %1"_s.arg(i));
+
+ const auto getScrollOffset = [&]() -> int {
+ return static_cast<QTabBarPrivate *>(QObjectPrivate::get(&tabBar))->scrollOffset;
+ };
+
+ tabBar.setCurrentIndex(5);
+
+ // changing the current index while the tab bar isn't visible shouldn't scroll yet
+ QCOMPARE(getScrollOffset(), 0);
+
+ // now show the tab bar with a size that's too small to fit the current index
+ const QSize fullSize = tabBar.sizeHint();
+ tabBar.resize(fullSize.width() / 2, fullSize.height());
+
+ tabBar.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&tabBar));
+
+ // this should scroll
+ QCOMPARE_GT(getScrollOffset(), 0);
+}
+
+void tst_QTabBar::checkPositionsAfterShapeChange()
+{
+ class TabWidget : public QTabWidget
+ {
+ public:
+ using QTabWidget::QTabWidget;
+ using QTabWidget::setTabBar;
+ };
+
+ class TabBar : public QTabBar
+ {
+ public:
+ using QTabBar::initStyleOption;
+ void resizeEvent(QResizeEvent *e) override
+ {
+ QTabBar::resizeEvent(e);
+ resized = true;
+ }
+ bool resized = false;
+ };
+
+ TabWidget tabWidget;
+ auto *tabBar = new TabBar;
+ tabWidget.setTabBar(tabBar);
+ for (int i = 0; i < 3; ++i)
+ tabWidget.addTab(new QWidget, u"Tab %1"_s.arg(i));
+ tabWidget.setTabPosition(QTabWidget::North);
+ tabWidget.setCurrentIndex(2);
+ tabWidget.resize(300, 300);
+ tabWidget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&tabWidget));
+
+ tabBar->resized = false;
+ tabWidget.setTabPosition(QTabWidget::East);
+ QVERIFY(QTest::qWaitFor([&]() { return tabBar->resized; }));
+ QStyleOptionTab opt;
+ tabBar->initStyleOption(&opt, 2);
+ QVERIFY(opt.rect.top() > 0);
+}
+
+void tst_QTabBar::checkScrollOffsetAfterTabRemoval()
+{
+ QTabWidget tabWidget;
+ QTabBar *tabBar = tabWidget.tabBar();
+ for (int i = 0; i < 10; ++i)
+ tabWidget.addTab(new QWidget, u"Tab %1"_s.arg(i));
+ tabWidget.setTabPosition(QTabWidget::North);
+ tabWidget.resize(300, 300);
+ tabWidget.setCurrentIndex(0);
+ tabWidget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&tabWidget));
+
+ auto *rightButton = tabBar->findChild<QAbstractButton *>(u"ScrollRightButton"_s);
+ auto *leftButton = tabBar->findChild<QAbstractButton *>(u"ScrollLeftButton"_s);
+ QVERIFY(leftButton);
+ QVERIFY(rightButton);
+ QVERIFY(rightButton->isEnabled());
+ QVERIFY(!leftButton->isEnabled());
+ // scroll to the right
+ tabBar->setCurrentIndex(9);
+ QVERIFY(!rightButton->isEnabled());
+ QVERIFY(leftButton->isEnabled());
+ // scroll to the center
+ tabBar->setCurrentIndex(2);
+ QVERIFY(rightButton->isEnabled());
+ QVERIFY(leftButton->isEnabled());
+
+ const auto getScrollOffset = [&]() -> int {
+ return static_cast<QTabBarPrivate *>(QObjectPrivate::get(tabBar))->scrollOffset;
+ };
+ // the scroll offset should not change when a tab right outside
+ // the scroll rect is removed
+ auto oldOffset = getScrollOffset();
+ tabWidget.removeTab(9);
+ QCOMPARE(getScrollOffset(), oldOffset);
+ // the scroll offset must change when a tab left outside
+ // the scroll rect is removed
+ oldOffset = getScrollOffset();
+ tabWidget.removeTab(0);
+ QVERIFY(getScrollOffset() < oldOffset);
+
+ // the scroll offset must change when there is empty
+ // place in the right after tab removal
+ oldOffset = getScrollOffset();
+ QVERIFY(oldOffset > 0);
+ for (int i : { 7, 6, 5, 4, 3 })
+ tabWidget.removeTab(i);
+ QCOMPARE(getScrollOffset(), 0);
+ QVERIFY(!rightButton->isVisible());
+ QVERIFY(!leftButton->isVisible());
+}
+
QTEST_MAIN(tst_QTabBar)
#include "tst_qtabbar.moc"
diff --git a/tests/auto/widgets/widgets/qtabwidget/CMakeLists.txt b/tests/auto/widgets/widgets/qtabwidget/CMakeLists.txt
index d0689d0b66..a8b48e925c 100644
--- a/tests/auto/widgets/widgets/qtabwidget/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qtabwidget/CMakeLists.txt
@@ -1,15 +1,22 @@
-# Generated from qtabwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtabwidget Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtabwidget LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtabwidget
SOURCES
tst_qtabwidget.cpp
INCLUDE_DIRECTORIES
..
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
Qt::WidgetsPrivate
@@ -19,6 +26,6 @@ qt_internal_add_test(tst_qtabwidget
#####################################################################
qt_internal_extend_target(tst_qtabwidget CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
diff --git a/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp b/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp
index 0e7012482d..d7bfdfaad2 100644
--- a/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp
+++ b/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.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 <QTest>
@@ -85,6 +60,7 @@ private slots:
void tabPosition();
void tabEnabled();
void tabHidden();
+ void checkHiddenTab();
void tabText();
void tabShape();
void tabTooltip();
@@ -104,6 +80,9 @@ private slots:
void moveCurrentTab();
void autoHide();
+ void setCurrentBeforeShow_data();
+ void setCurrentBeforeShow();
+
private:
int addPage();
void removePage(int index);
@@ -274,6 +253,32 @@ void tst_QTabWidget::tabHidden()
}
}
+void tst_QTabWidget::checkHiddenTab()
+{
+ tw->addTab(new QWidget(), "foo");
+ tw->addTab(new QWidget(), "bar");
+ tw->addTab(new QWidget(), "baz");
+ QCOMPARE(tw->count(), 3);
+ tw->setCurrentIndex(0);
+ tw->setTabVisible(1, false);
+
+ QKeyEvent keyTab(QKeyEvent::KeyPress, Qt::Key_Tab, Qt::ControlModifier);
+ QVERIFY(QApplication::sendEvent(tw, &keyTab));
+ QCOMPARE(tw->currentIndex(), 2);
+ QVERIFY(QApplication::sendEvent(tw, &keyTab));
+ QCOMPARE(tw->currentIndex(), 0);
+ QVERIFY(QApplication::sendEvent(tw, &keyTab));
+ QCOMPARE(tw->currentIndex(), 2);
+
+ QKeyEvent keyBacktab(QKeyEvent::KeyPress, Qt::Key_Backtab, Qt::ControlModifier);
+ QVERIFY(QApplication::sendEvent(tw, &keyBacktab));
+ QCOMPARE(tw->currentIndex(), 0);
+ QVERIFY(QApplication::sendEvent(tw, &keyBacktab));
+ QCOMPARE(tw->currentIndex(), 2);
+ QVERIFY(QApplication::sendEvent(tw, &keyBacktab));
+ QCOMPARE(tw->currentIndex(), 0);
+}
+
void tst_QTabWidget::tabText()
{
// Test bad arguments
@@ -383,12 +388,12 @@ void tst_QTabWidget::currentIndex()
QCOMPARE(tw->currentIndex(), -1);
tw->setCurrentIndex(-1);
QCOMPARE(tw->currentIndex(), -1);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
int firstIndex = addPage();
tw->setCurrentIndex(firstIndex);
QCOMPARE(tw->currentIndex(), firstIndex);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QList<QVariant> arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), firstIndex);
@@ -396,19 +401,19 @@ void tst_QTabWidget::currentIndex()
QCOMPARE(tw->currentIndex(), firstIndex);
tw->setCurrentIndex(index);
QCOMPARE(tw->currentIndex(), index);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), index);
removePage(index);
QCOMPARE(tw->currentIndex(), firstIndex);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), firstIndex);
removePage(firstIndex);
QCOMPARE(tw->currentIndex(), -1);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
arguments = spy.takeFirst();
QCOMPARE(arguments.at(0).toInt(), -1);
}
@@ -689,8 +694,8 @@ void tst_QTabWidget::tabBarClicked()
QSignalSpy clickSpy(&tabWidget, SIGNAL(tabBarClicked(int)));
QSignalSpy doubleClickSpy(&tabWidget, SIGNAL(tabBarDoubleClicked(int)));
- QCOMPARE(clickSpy.count(), 0);
- QCOMPARE(doubleClickSpy.count(), 0);
+ QCOMPARE(clickSpy.size(), 0);
+ QCOMPARE(doubleClickSpy.size(), 0);
QTabBar &tabBar = *tabWidget.tabBar();
Qt::MouseButton button = Qt::LeftButton;
@@ -698,27 +703,27 @@ void tst_QTabWidget::tabBarClicked()
const QPoint tabPos = tabBar.tabRect(0).center();
QTest::mouseClick(&tabBar, button, {}, tabPos);
- QCOMPARE(clickSpy.count(), 1);
+ QCOMPARE(clickSpy.size(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), 0);
- QCOMPARE(doubleClickSpy.count(), 0);
+ QCOMPARE(doubleClickSpy.size(), 0);
QTest::mouseDClick(&tabBar, button, {}, tabPos);
- QCOMPARE(clickSpy.count(), 1);
+ QCOMPARE(clickSpy.size(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), 0);
- QCOMPARE(doubleClickSpy.count(), 1);
+ QCOMPARE(doubleClickSpy.size(), 1);
QCOMPARE(doubleClickSpy.takeFirst().takeFirst().toInt(), 0);
const QPoint barPos(tabBar.tabRect(0).right() + 5, tabBar.tabRect(0).center().y());
QTest::mouseClick(&tabBar, button, {}, barPos);
- QCOMPARE(clickSpy.count(), 1);
+ QCOMPARE(clickSpy.size(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), -1);
- QCOMPARE(doubleClickSpy.count(), 0);
+ QCOMPARE(doubleClickSpy.size(), 0);
QTest::mouseDClick(&tabBar, button, {}, barPos);
- QCOMPARE(clickSpy.count(), 1);
+ QCOMPARE(clickSpy.size(), 1);
QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), -1);
- QCOMPARE(doubleClickSpy.count(), 1);
+ QCOMPARE(doubleClickSpy.size(), 1);
QCOMPARE(doubleClickSpy.takeFirst().takeFirst().toInt(), -1);
button = Qt::MouseButton(button << 1);
@@ -775,5 +780,39 @@ void tst_QTabWidget::autoHide()
QVERIFY(heightForWidth1 > tabWidget.heightForWidth(20));
}
+void tst_QTabWidget::setCurrentBeforeShow_data()
+{
+ QTest::addColumn<QTabWidget::TabPosition>("tabPosition");
+ QTest::newRow("West") << QTabWidget::West;
+ QTest::newRow("North") << QTabWidget::North;
+ QTest::newRow("East") << QTabWidget::East;
+ QTest::newRow("South") << QTabWidget::South;
+}
+
+void tst_QTabWidget::setCurrentBeforeShow()
+{
+ QFETCH(QTabWidget::TabPosition, tabPosition);
+
+ QTabWidget tabWidget;
+ tabWidget.setTabPosition(tabPosition);
+
+ QPixmap pm(50, 50);
+ pm.fill(Qt::red);
+ const QIcon icon(pm);
+ for (int i = 0; i < 4; ++i)
+ tabWidget.addTab(new QWidget, icon, QString("Tab %1").arg(i));
+
+ // the tab widget has space for the entire tab bar
+ tabWidget.resize(tabWidget.tabBar()->sizeHint() + QSize(50, 50));
+ tabWidget.setCurrentIndex(2);
+ tabWidget.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&tabWidget));
+
+ QCOMPARE_GE(tabWidget.tabBar()->tabRect(0).x(), 0);
+ QCOMPARE_GE(tabWidget.tabBar()->tabRect(0).y(), 0);
+
+ QTest::qWait(2000);
+}
+
QTEST_MAIN(tst_QTabWidget)
#include "tst_qtabwidget.moc"
diff --git a/tests/auto/widgets/widgets/qtextbrowser/CMakeLists.txt b/tests/auto/widgets/widgets/qtextbrowser/CMakeLists.txt
index 170ac1e139..4a80068d75 100644
--- a/tests/auto/widgets/widgets/qtextbrowser/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qtextbrowser/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qtextbrowser.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextbrowser Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextbrowser LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -22,9 +29,10 @@ list(APPEND test_data ${test_data_glob})
qt_internal_add_test(tst_qtextbrowser
SOURCES
tst_qtextbrowser.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/widgets/widgets/qtextbrowser/tst_qtextbrowser.cpp b/tests/auto/widgets/widgets/qtextbrowser/tst_qtextbrowser.cpp
index ec187a55b0..5d66f5922a 100644
--- a/tests/auto/widgets/widgets/qtextbrowser/tst_qtextbrowser.cpp
+++ b/tests/auto/widgets/widgets/qtextbrowser/tst_qtextbrowser.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -37,12 +12,14 @@
#include <qtextbrowser.h>
#include <qtextobject.h>
+#include <QtWidgets/private/qapplication_p.h>
+
class TestBrowser : public QTextBrowser
{
public:
inline TestBrowser() {
show();
- QApplication::setActiveWindow(this);
+ QApplicationPrivate::setActiveWindow(this);
activateWindow();
setFocus();
QVERIFY(QTest::qWaitForWindowActive(this));
@@ -245,29 +222,29 @@ void tst_QTextBrowser::relativeLinks()
QSignalSpy sourceChangedSpy(browser, SIGNAL(sourceChanged(QUrl)));
browser->setSource(QUrl("subdir/../qtextbrowser.html"));
QVERIFY(!browser->document()->isEmpty());
- QCOMPARE(sourceChangedSpy.count(), 1);
+ QCOMPARE(sourceChangedSpy.size(), 1);
QCOMPARE(sourceChangedSpy.takeFirst()[0].toUrl(), QUrl("subdir/../qtextbrowser.html"));
browser->setSource(QUrl("subdir/index.html"));
QVERIFY(!browser->document()->isEmpty());
- QCOMPARE(sourceChangedSpy.count(), 1);
+ QCOMPARE(sourceChangedSpy.size(), 1);
QCOMPARE(sourceChangedSpy.takeFirst()[0].toUrl(), QUrl("subdir/index.html"));
browser->setSource(QUrl("anchor.html"));
QVERIFY(!browser->document()->isEmpty());
- QCOMPARE(sourceChangedSpy.count(), 1);
+ QCOMPARE(sourceChangedSpy.size(), 1);
QCOMPARE(sourceChangedSpy.takeFirst()[0].toUrl(), QUrl("anchor.html"));
browser->setSource(QUrl("subdir/index.html"));
QVERIFY(!browser->document()->isEmpty());
- QCOMPARE(sourceChangedSpy.count(), 1);
+ QCOMPARE(sourceChangedSpy.size(), 1);
QCOMPARE(sourceChangedSpy.takeFirst()[0].toUrl(), QUrl("subdir/index.html"));
// using QUrl::fromLocalFile()
browser->setSource(QUrl::fromLocalFile("anchor.html"));
QVERIFY(!browser->document()->isEmpty());
- QCOMPARE(sourceChangedSpy.count(), 1);
+ QCOMPARE(sourceChangedSpy.size(), 1);
QCOMPARE(sourceChangedSpy.takeFirst()[0].toUrl(), QUrl("file:anchor.html"));
browser->setSource(QUrl("subdir/../qtextbrowser.html"));
QVERIFY(!browser->document()->isEmpty());
- QCOMPARE(sourceChangedSpy.count(), 1);
+ QCOMPARE(sourceChangedSpy.size(), 1);
QCOMPARE(sourceChangedSpy.takeFirst()[0].toUrl(), QUrl("subdir/../qtextbrowser.html"));
}
@@ -299,9 +276,9 @@ void tst_QTextBrowser::forwardBackwardAvailable()
browser->setSource(QUrl::fromLocalFile("anchor.html"));
QVERIFY(!browser->isBackwardAvailable());
QVERIFY(!browser->isForwardAvailable());
- QCOMPARE(backwardSpy.count(), 1);
+ QCOMPARE(backwardSpy.size(), 1);
QVERIFY(!backwardSpy.at(0).at(0).toBool());
- QCOMPARE(forwardSpy.count(), 1);
+ QCOMPARE(forwardSpy.size(), 1);
QVERIFY(!forwardSpy.at(0).at(0).toBool());
backwardSpy.clear();
@@ -310,9 +287,9 @@ void tst_QTextBrowser::forwardBackwardAvailable()
browser->setSource(QUrl::fromLocalFile("bigpage.html"));
QVERIFY(browser->isBackwardAvailable());
QVERIFY(!browser->isForwardAvailable());
- QCOMPARE(backwardSpy.count(), 1);
+ QCOMPARE(backwardSpy.size(), 1);
QVERIFY(backwardSpy.at(0).at(0).toBool());
- QCOMPARE(forwardSpy.count(), 1);
+ QCOMPARE(forwardSpy.size(), 1);
QVERIFY(!forwardSpy.at(0).at(0).toBool());
backwardSpy.clear();
@@ -321,9 +298,9 @@ void tst_QTextBrowser::forwardBackwardAvailable()
browser->setSource(QUrl::fromLocalFile("pagewithbg.html"));
QVERIFY(browser->isBackwardAvailable());
QVERIFY(!browser->isForwardAvailable());
- QCOMPARE(backwardSpy.count(), 1);
+ QCOMPARE(backwardSpy.size(), 1);
QVERIFY(backwardSpy.at(0).at(0).toBool());
- QCOMPARE(forwardSpy.count(), 1);
+ QCOMPARE(forwardSpy.size(), 1);
QVERIFY(!forwardSpy.at(0).at(0).toBool());
backwardSpy.clear();
@@ -332,9 +309,9 @@ void tst_QTextBrowser::forwardBackwardAvailable()
browser->backward();
QVERIFY(browser->isBackwardAvailable());
QVERIFY(browser->isForwardAvailable());
- QCOMPARE(backwardSpy.count(), 1);
+ QCOMPARE(backwardSpy.size(), 1);
QVERIFY(backwardSpy.at(0).at(0).toBool());
- QCOMPARE(forwardSpy.count(), 1);
+ QCOMPARE(forwardSpy.size(), 1);
QVERIFY(forwardSpy.at(0).at(0).toBool());
backwardSpy.clear();
@@ -343,9 +320,9 @@ void tst_QTextBrowser::forwardBackwardAvailable()
browser->backward();
QVERIFY(!browser->isBackwardAvailable());
QVERIFY(browser->isForwardAvailable());
- QCOMPARE(backwardSpy.count(), 1);
+ QCOMPARE(backwardSpy.size(), 1);
QVERIFY(!backwardSpy.at(0).at(0).toBool());
- QCOMPARE(forwardSpy.count(), 1);
+ QCOMPARE(forwardSpy.size(), 1);
QVERIFY(forwardSpy.at(0).at(0).toBool());
backwardSpy.clear();
@@ -354,9 +331,9 @@ void tst_QTextBrowser::forwardBackwardAvailable()
browser->forward();
QVERIFY(browser->isBackwardAvailable());
QVERIFY(browser->isForwardAvailable());
- QCOMPARE(backwardSpy.count(), 1);
+ QCOMPARE(backwardSpy.size(), 1);
QVERIFY(backwardSpy.at(0).at(0).toBool());
- QCOMPARE(forwardSpy.count(), 1);
+ QCOMPARE(forwardSpy.size(), 1);
QVERIFY(forwardSpy.at(0).at(0).toBool());
backwardSpy.clear();
@@ -365,9 +342,9 @@ void tst_QTextBrowser::forwardBackwardAvailable()
browser->forward();
QVERIFY(browser->isBackwardAvailable());
QVERIFY(!browser->isForwardAvailable());
- QCOMPARE(backwardSpy.count(), 1);
+ QCOMPARE(backwardSpy.size(), 1);
QVERIFY(backwardSpy.at(0).at(0).toBool());
- QCOMPARE(forwardSpy.count(), 1);
+ QCOMPARE(forwardSpy.size(), 1);
QVERIFY(!forwardSpy.at(0).at(0).toBool());
backwardSpy.clear();
@@ -385,9 +362,9 @@ void tst_QTextBrowser::clearHistory()
browser->clearHistory();
QVERIFY(!browser->isBackwardAvailable());
QVERIFY(!browser->isForwardAvailable());
- QCOMPARE(backwardSpy.count(), 1);
+ QCOMPARE(backwardSpy.size(), 1);
QVERIFY(!backwardSpy.at(0).at(0).toBool());
- QCOMPARE(forwardSpy.count(), 1);
+ QCOMPARE(forwardSpy.size(), 1);
QVERIFY(!forwardSpy.at(0).at(0).toBool());
QVERIFY(browser->historyTitle(-1).isEmpty());
QVERIFY(browser->historyTitle(0).isEmpty());
@@ -399,9 +376,9 @@ void tst_QTextBrowser::clearHistory()
browser->setSource(QUrl::fromLocalFile("anchor.html"));
QVERIFY(!browser->isBackwardAvailable());
QVERIFY(!browser->isForwardAvailable());
- QCOMPARE(backwardSpy.count(), 1);
+ QCOMPARE(backwardSpy.size(), 1);
QVERIFY(!backwardSpy.at(0).at(0).toBool());
- QCOMPARE(forwardSpy.count(), 1);
+ QCOMPARE(forwardSpy.size(), 1);
QVERIFY(!forwardSpy.at(0).at(0).toBool());
backwardSpy.clear();
@@ -410,9 +387,9 @@ void tst_QTextBrowser::clearHistory()
browser->setSource(QUrl::fromLocalFile("bigpage.html"));
QVERIFY(browser->isBackwardAvailable());
QVERIFY(!browser->isForwardAvailable());
- QCOMPARE(backwardSpy.count(), 1);
+ QCOMPARE(backwardSpy.size(), 1);
QVERIFY(backwardSpy.at(0).at(0).toBool());
- QCOMPARE(forwardSpy.count(), 1);
+ QCOMPARE(forwardSpy.size(), 1);
QVERIFY(!forwardSpy.at(0).at(0).toBool());
backwardSpy.clear();
@@ -421,9 +398,9 @@ void tst_QTextBrowser::clearHistory()
browser->clearHistory();
QVERIFY(!browser->isBackwardAvailable());
QVERIFY(!browser->isForwardAvailable());
- QCOMPARE(backwardSpy.count(), 1);
+ QCOMPARE(backwardSpy.size(), 1);
QVERIFY(!backwardSpy.at(0).at(0).toBool());
- QCOMPARE(forwardSpy.count(), 1);
+ QCOMPARE(forwardSpy.size(), 1);
QVERIFY(!forwardSpy.at(0).at(0).toBool());
QVERIFY(browser->historyTitle(-1).isEmpty());
QVERIFY(browser->historyTitle(1).isEmpty());
@@ -696,7 +673,7 @@ void tst_QTextBrowser::urlEncoding()
browser->setEditFocus(true);
#endif
QTest::keyClick(browser, Qt::Key_Enter);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QUrl url = spy.at(0).at(0).toUrl();
QCOMPARE(url.toEncoded(), QByteArray("http://www.google.com/q=%22"));
diff --git a/tests/auto/widgets/widgets/qtextedit/CMakeLists.txt b/tests/auto/widgets/widgets/qtextedit/CMakeLists.txt
index e90b59ccb8..e406e088ca 100644
--- a/tests/auto/widgets/widgets/qtextedit/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qtextedit/CMakeLists.txt
@@ -1,16 +1,23 @@
-# Generated from qtextedit.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtextedit Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtextedit LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
list(APPEND test_data "fullWidthSelection")
qt_internal_add_test(tst_qtextedit
SOURCES
tst_qtextedit.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -23,6 +30,6 @@ qt_internal_add_test(tst_qtextedit
#####################################################################
qt_internal_extend_target(tst_qtextedit CONDITION MACOS
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWAppKit}
)
diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
index 9126b87472..0136e5b5de 100644
--- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
+++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.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 <QTest>
@@ -58,6 +33,8 @@
#include "../../../shared/platforminputcontext.h"
#include <private/qinputmethod_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
Q_LOGGING_CATEGORY(lcTests, "qt.widgets.tests")
//Used in copyAvailable
@@ -139,7 +116,13 @@ private slots:
void moveCursor();
#ifndef QT_NO_CLIPBOARD
void mimeDataReimplementations();
+#ifndef QT_NO_TEXTHTMLPARSER
+ void mimeTypesAvailableFromRichText();
+#endif
+#if QT_CONFIG(textmarkdownreader)
+ void mimeTypesAvailableFromMarkdown();
#endif
+#endif // QT_NO_CLIPBOARD
void ctrlEnterShouldInsertLineSeparator_NOT();
void shiftEnterShouldInsertLineSeparator();
void selectWordsFromStringsContainingSeparators_data();
@@ -175,6 +158,7 @@ private slots:
void setDocumentPreservesPalette();
#endif
void pasteFromQt3RichText();
+ void pasteFromMarkdown();
void noWrapBackgrounds();
void preserveCharFormatAfterUnchangingSetPosition();
void twoSameInputMethodEvents();
@@ -214,10 +198,13 @@ private slots:
void nextFormatAfterEnterPressed_data();
void nextFormatAfterEnterPressed();
+ void dontCrashWithCss();
+
private:
void createSelection();
int blockCount() const;
void compareWidgetAndImage(QTextEdit &widget, const QString &imageFileName);
+ bool isMainFontFixed();
QTextEdit *ed;
qreal rootFrameMargin;
@@ -534,9 +521,9 @@ void tst_QTextEdit::clearShouldClearExtraSelections()
sel.cursor = ed->textCursor();
sel.format.setProperty(QTextFormat::FullWidthSelection, true);
ed->setExtraSelections(QList<QTextEdit::ExtraSelection>() << sel);
- QCOMPARE(ed->extraSelections().count(), 1);
+ QCOMPARE(ed->extraSelections().size(), 1);
ed->clear();
- QCOMPARE(ed->extraSelections().count(), 0);
+ QCOMPARE(ed->extraSelections().size(), 0);
}
void tst_QTextEdit::paragSeparatorOnPlaintextAppend()
@@ -736,7 +723,7 @@ void tst_QTextEdit::cursorPositionChanged()
spy.clear();
QTest::keyClick(ed, Qt::Key_A);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QTextCursor cursor = ed->textCursor();
cursor.movePosition(QTextCursor::Start);
@@ -744,18 +731,18 @@ void tst_QTextEdit::cursorPositionChanged()
cursor.movePosition(QTextCursor::End);
spy.clear();
cursor.insertText("Test");
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
cursor.movePosition(QTextCursor::End);
ed->setTextCursor(cursor);
cursor.movePosition(QTextCursor::Start);
spy.clear();
cursor.insertText("Test");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
QTest::keyClick(ed, Qt::Key_Left);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
cursor.movePosition(QTextCursor::Start);
ed->setTextCursor(cursor);
@@ -764,14 +751,19 @@ void tst_QTextEdit::cursorPositionChanged()
QTest::mouseDClick(ed->viewport(), Qt::LeftButton, {}, ed->cursorRect().center());
QVERIFY(ed->textCursor().hasSelection());
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
CursorPositionChangedRecorder spy2(ed);
QVERIFY(ed->textCursor().position() > 0);
ed->setPlainText("Hello World");
- QCOMPARE(spy2.cursorPositions.count(), 1);
+ QCOMPARE(spy2.cursorPositions.size(), 1);
QCOMPARE(spy2.cursorPositions.at(0), 0);
QCOMPARE(ed->textCursor().position(), 0);
+
+ ed->selectAll();
+ QCOMPARE(spy2.cursorPositions.size(), 2);
+ QCOMPARE(spy2.cursorPositions.at(1), 11);
+ QCOMPARE(ed->textCursor().position(), 11);
}
void tst_QTextEdit::setTextCursor()
@@ -786,7 +778,7 @@ void tst_QTextEdit::setTextCursor()
spy.clear();
ed->setTextCursor(cursor);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
#ifndef QT_NO_CLIPBOARD
@@ -803,7 +795,7 @@ void tst_QTextEdit::undoAvailableAfterPaste()
const QString txt("Test");
QApplication::clipboard()->setText(txt);
ed->paste();
- QVERIFY(spy.count() >= 1);
+ QVERIFY(spy.size() >= 1);
QCOMPARE(ed->toPlainText(), txt);
}
#endif
@@ -1056,7 +1048,7 @@ void tst_QTextEdit::noPropertiesOnDefaultTextEditCharFormat()
// on a text edit. Font properties instead should be taken from the
// widget's font (in sync with defaultFont property in document) and the
// foreground color should be taken from the palette.
- QCOMPARE(ed->currentCharFormat().properties().count(), 0);
+ QCOMPARE(ed->currentCharFormat().properties().size(), 0);
}
void tst_QTextEdit::setPlainTextShouldUseCurrentCharFormat()
@@ -1078,9 +1070,9 @@ void tst_QTextEdit::setPlainTextShouldEmitTextChangedOnce()
{
QSignalSpy spy(ed, SIGNAL(textChanged()));
ed->setPlainText("Yankee Doodle");
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
ed->setPlainText("");
- QCOMPARE(spy.count(), 2);
+ QCOMPARE(spy.size(), 2);
}
void tst_QTextEdit::overwriteMode()
@@ -1362,7 +1354,7 @@ void tst_QTextEdit::copyAvailable_data()
//Tests the copyAvailable slot for several cases
void tst_QTextEdit::copyAvailable()
{
- QFETCH(pairListType,keystrokes);
+ QFETCH(const pairListType, keystrokes);
QFETCH(QList<bool>, copyAvailable);
QFETCH(QString, function);
@@ -1375,9 +1367,8 @@ void tst_QTextEdit::copyAvailable()
QSignalSpy spyCopyAvailabe(ed, SIGNAL(copyAvailable(bool)));
//Execute Keystrokes
- foreach(keyPairType keyPair, keystrokes) {
+ for (keyPairType keyPair : keystrokes)
QTest::keyClick(ed, keyPair.first, keyPair.second );
- }
//Execute ed->"function"
if (function == "cut")
@@ -1394,8 +1385,8 @@ void tst_QTextEdit::copyAvailable()
//Compare spied signals
QEXPECT_FAIL("Case7 T,A,A, <- + shift, <- + shift, <- + shift, ctrl + x, undo() | signals: true, false, true",
"Wrong undo selection behaviour. Should be fixed in some future release. (See task: 132482)", Abort);
- QCOMPARE(spyCopyAvailabe.count(), copyAvailable.count());
- for (int i=0;i<spyCopyAvailabe.count(); i++) {
+ QCOMPARE(spyCopyAvailabe.size(), copyAvailable.size());
+ for (int i=0;i<spyCopyAvailabe.size(); i++) {
QVariant variantSpyCopyAvailable = spyCopyAvailabe.at(i).at(0);
QVERIFY2(variantSpyCopyAvailable.toBool() == copyAvailable.at(i), QString("Spied singnal: %1").arg(i).toLatin1());
}
@@ -1431,10 +1422,10 @@ void tst_QTextEdit::moveCursor()
QCOMPARE(ed->textCursor().position(), 0);
ed->moveCursor(QTextCursor::NextCharacter);
QCOMPARE(ed->textCursor().position(), 1);
- QCOMPARE(cursorMovedSpy.count(), 1);
+ QCOMPARE(cursorMovedSpy.size(), 1);
ed->moveCursor(QTextCursor::NextCharacter, QTextCursor::KeepAnchor);
QCOMPARE(ed->textCursor().position(), 2);
- QCOMPARE(cursorMovedSpy.count(), 2);
+ QCOMPARE(cursorMovedSpy.size(), 2);
QCOMPARE(ed->textCursor().selectedText(), QString("e"));
}
@@ -1505,7 +1496,63 @@ void tst_QTextEdit::mimeDataReimplementations()
QCOMPARE(ed.insertCallCount, 1);
#endif
}
+
+#ifndef QT_NO_TEXTHTMLPARSER
+void tst_QTextEdit::mimeTypesAvailableFromRichText()
+{
+ MyTextEdit ed;
+ ed.setHtml("<i>Hello <b>World</b></i>");
+ ed.selectAll();
+ ed.copy();
+ const auto *mimeData = QApplication::clipboard()->mimeData();
+ qCDebug(lcTests) << "available mime types" << mimeData->formats();
+ QVERIFY(mimeData->formats().contains("text/plain"));
+#if QT_CONFIG(textmarkdownwriter)
+ QVERIFY(mimeData->formats().contains("text/markdown"));
+ const QByteArray expectedMarkdown = "*Hello **World***\n\n";
+ if (mimeData->data("text/markdown") != expectedMarkdown && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(mimeData->data("text/markdown"), expectedMarkdown);
+#endif
+#ifndef QT_NO_TEXTHTMLPARSER
+ QVERIFY(mimeData->formats().contains("text/html"));
+ QVERIFY(mimeData->hasHtml());
+#endif
+#ifndef QT_NO_TEXTODFWRITER
+ QVERIFY(mimeData->formats().contains("application/vnd.oasis.opendocument.text"));
+#endif
+}
+#endif // QT_NO_TEXTHTMLPARSER
+
+#if QT_CONFIG(textmarkdownreader)
+void tst_QTextEdit::mimeTypesAvailableFromMarkdown()
+{
+ MyTextEdit ed;
+ const QString md("# TODO\n\n- [x] Fix bugs\n- [ ] Have a beer\n");
+ ed.setMarkdown(md);
+ ed.selectAll();
+ ed.copy();
+ const auto *mimeData = QApplication::clipboard()->mimeData();
+ qCDebug(lcTests) << "available mime types" << mimeData->formats();
+ QVERIFY(mimeData->formats().contains("text/plain"));
+#if QT_CONFIG(textmarkdownwriter)
+ QVERIFY(mimeData->formats().contains("text/markdown"));
+ if (mimeData->data("text/markdown") != md && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(mimeData->data("text/markdown"), md);
+#endif
+#ifndef QT_NO_TEXTHTMLPARSER
+ QVERIFY(mimeData->formats().contains("text/html"));
+ QVERIFY(mimeData->hasHtml());
+ QVERIFY(mimeData->html().contains("checked")); // <li class=\"checked\" ...
#endif
+#ifndef QT_NO_TEXTODFWRITER
+ QVERIFY(mimeData->formats().contains("application/vnd.oasis.opendocument.text"));
+#endif
+}
+#endif // textmarkdownreader
+
+#endif // QT_NO_CLIPBOARD
void tst_QTextEdit::ctrlEnterShouldInsertLineSeparator_NOT()
{
@@ -1653,7 +1700,7 @@ void tst_QTextEdit::ensureVisibleWithRtl()
ed->setLayoutDirection(Qt::RightToLeft);
ed->setLineWrapMode(QTextEdit::NoWrap);
QString txt(500, QChar(QLatin1Char('a')));
- QCOMPARE(txt.length(), 500);
+ QCOMPARE(txt.size(), 500);
ed->setPlainText(txt);
ed->resize(100, 100);
ed->show();
@@ -1704,7 +1751,7 @@ void tst_QTextEdit::extraSelections()
ed->setExtraSelections(QList<QTextEdit::ExtraSelection>() << sel);
QList<QTextEdit::ExtraSelection> selections = ed->extraSelections();
- QCOMPARE(selections.count(), 1);
+ QCOMPARE(selections.size(), 1);
QCOMPARE(selections.at(0).cursor.position(), endPos);
QCOMPARE(selections.at(0).cursor.anchor(), wordPos);
}
@@ -1846,27 +1893,27 @@ void tst_QTextEdit::selectionChanged()
QTest::keyClick(ed, Qt::Key_Right);
QCOMPARE(ed->textCursor().position(), 1);
- QCOMPARE(selectionChangedSpy.count(), 0);
+ QCOMPARE(selectionChangedSpy.size(), 0);
QTest::keyClick(ed, Qt::Key_Right, Qt::ShiftModifier);
QCOMPARE(ed->textCursor().position(), 2);
- QCOMPARE(selectionChangedSpy.count(), 1);
+ QCOMPARE(selectionChangedSpy.size(), 1);
QTest::keyClick(ed, Qt::Key_Right, Qt::ShiftModifier);
QCOMPARE(ed->textCursor().position(), 3);
- QCOMPARE(selectionChangedSpy.count(), 2);
+ QCOMPARE(selectionChangedSpy.size(), 2);
QTest::keyClick(ed, Qt::Key_Right, Qt::ShiftModifier);
QCOMPARE(ed->textCursor().position(), 4);
- QCOMPARE(selectionChangedSpy.count(), 3);
+ QCOMPARE(selectionChangedSpy.size(), 3);
QTest::keyClick(ed, Qt::Key_Right);
QCOMPARE(ed->textCursor().position(), 4);
- QCOMPARE(selectionChangedSpy.count(), 4);
+ QCOMPARE(selectionChangedSpy.size(), 4);
QTest::keyClick(ed, Qt::Key_Right);
QCOMPARE(ed->textCursor().position(), 5);
- QCOMPARE(selectionChangedSpy.count(), 4);
+ QCOMPARE(selectionChangedSpy.size(), 4);
}
#ifndef QT_NO_CLIPBOARD
@@ -2158,6 +2205,18 @@ void tst_QTextEdit::compareWidgetAndImage(QTextEdit &widget, const QString &imag
}
}
+bool tst_QTextEdit::isMainFontFixed()
+{
+ bool ret = QFontInfo(QGuiApplication::font()).fixedPitch();
+ if (ret) {
+ qCWarning(lcTests) << "QFontDatabase::GeneralFont is monospaced: markdown writing is likely to use too many backticks";
+ qCWarning(lcTests) << "system fonts: fixed" << QFontDatabase::systemFont(QFontDatabase::FixedFont)
+ << "fixed?" << QFontInfo(QFontDatabase::systemFont(QFontDatabase::FixedFont)).fixedPitch()
+ << "general" << QFontDatabase::systemFont(QFontDatabase::GeneralFont);
+ }
+ return ret;
+}
+
void tst_QTextEdit::cursorRect()
{
ed->show();
@@ -2178,9 +2237,8 @@ void tst_QTextEdit::setDocumentPreservesPalette()
QWidgetTextControl *control = ed->findChild<QWidgetTextControl *>();
QVERIFY(control);
- QPalette defaultPal = ed->palette();
QPalette whitePal = ed->palette();
- whitePal.setColor(QPalette::Active, QPalette::Text, "white");
+ whitePal.setColor(QPalette::Active, QPalette::Text, Qt::white);
QVERIFY(whitePal != ed->palette());
@@ -2225,6 +2283,24 @@ void tst_QTextEdit::pasteFromQt3RichText()
QCOMPARE(ed->toPlainText(), QString::fromLatin1(" QTextEdit is an "));
}
+void tst_QTextEdit::pasteFromMarkdown()
+{
+ QByteArray richtext("*This* text is **rich**");
+
+ QMimeData mimeData;
+ mimeData.setData("text/markdown", richtext);
+
+ static_cast<PublicTextEdit *>(ed)->publicInsertFromMimeData(&mimeData);
+
+ QCOMPARE(ed->toPlainText(), "This text is rich");
+#if QT_CONFIG(textmarkdownwriter)
+ const auto expectedMarkdown = QString::fromLatin1(richtext + "\n\n");
+ if (ed->toMarkdown() != expectedMarkdown && isMainFontFixed())
+ QEXPECT_FAIL("", "fixed-pitch main font (QTBUG-103484)", Continue);
+ QCOMPARE(ed->toMarkdown(), expectedMarkdown);
+#endif
+}
+
void tst_QTextEdit::noWrapBackgrounds()
{
QWidget topLevel;
@@ -2297,7 +2373,8 @@ void tst_QTextEdit::taskQTBUG_7902_contextMenuCrash()
w->connect(&ti, SIGNAL(timeout()), w, SLOT(deleteLater()));
ti.start(200);
- QContextMenuEvent *cme = new QContextMenuEvent(QContextMenuEvent::Mouse, w->rect().center());
+ QContextMenuEvent *cme = new QContextMenuEvent(QContextMenuEvent::Mouse, w->rect().center(),
+ w->viewport()->mapToGlobal(w->rect().center()));
qApp->postEvent(w->viewport(), cme);
QTest::qWait(300);
@@ -2463,12 +2540,12 @@ void tst_QTextEdit::inputMethodEvent()
QInputMethodEvent event;
event.setCommitString("text");
QApplication::sendEvent(ed, &event);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(ed->toPlainText(), QString("text"));
// test that input method gets chance to commit preedit when removing focus
ed->setText("");
- QApplication::setActiveWindow(ed);
+ QApplicationPrivate::setActiveWindow(ed);
QTRY_VERIFY(QApplication::focusWindow());
QCOMPARE(qApp->focusObject(), ed);
@@ -2493,7 +2570,7 @@ void tst_QTextEdit::inputMethodSelection()
cursor.setPosition(5, QTextCursor::KeepAnchor);
ed->setTextCursor(cursor);
- QCOMPARE(selectionSpy.count(), 1);
+ QCOMPARE(selectionSpy.size(), 1);
QCOMPARE(ed->textCursor().selectionStart(), 0);
QCOMPARE(ed->textCursor().selectionEnd(), 5);
@@ -2502,7 +2579,7 @@ void tst_QTextEdit::inputMethodSelection()
QInputMethodEvent event("", attributes);
QApplication::sendEvent(ed, &event);
- QCOMPARE(selectionSpy.count(), 2);
+ QCOMPARE(selectionSpy.size(), 2);
QCOMPARE(ed->textCursor().selectionStart(), 12);
QCOMPARE(ed->textCursor().selectionEnd(), 17);
}
@@ -2517,7 +2594,7 @@ void tst_QTextEdit::inputMethodQuery()
QGuiApplication::sendEvent(ed, &event);
int anchor = event.value(Qt::ImAnchorPosition).toInt();
int position = event.value(Qt::ImCursorPosition).toInt();
- QCOMPARE(qAbs(position - anchor), text.length());
+ QCOMPARE(qAbs(position - anchor), text.size());
QCOMPARE(event.value(Qt::ImEnabled).toBool(), true);
ed->setEnabled(false);
@@ -2602,7 +2679,7 @@ void tst_QTextEdit::countTextChangedOnRemove()
QKeyEvent event(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier);
QCoreApplication::instance()->notify(&edit, &event);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
#if QT_CONFIG(regularexpression)
@@ -2989,5 +3066,14 @@ void tst_QTextEdit::nextFormatAfterEnterPressed()
QCOMPARE(prevBlockCursor.charFormat().property(it.key()), it.value());
}
+void tst_QTextEdit::dontCrashWithCss()
+{
+ qApp->setStyleSheet("QWidget { font: 10pt; }");
+ QTextEdit edit;
+ edit.show();
+ qApp->setStyleSheet(QString());
+}
+
+
QTEST_MAIN(tst_QTextEdit)
#include "tst_qtextedit.moc"
diff --git a/tests/auto/widgets/widgets/qtoolbar/CMakeLists.txt b/tests/auto/widgets/widgets/qtoolbar/CMakeLists.txt
index 79b4816d53..e9fb01c3e8 100644
--- a/tests/auto/widgets/widgets/qtoolbar/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qtoolbar/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtoolbar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtoolbar Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtoolbar LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtoolbar
SOURCES
tst_qtoolbar.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
diff --git a/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp b/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp
index 8fea0dcd67..6336b792ed 100644
--- a/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp
+++ b/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.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 <QTest>
@@ -47,6 +22,8 @@
#include <qlabel.h>
#include <private/qtoolbarextension_p.h>
+#include <QtWidgets/private/qapplication_p.h>
+
QT_FORWARD_DECLARE_CLASS(QAction)
class tst_QToolBar : public QObject
@@ -162,12 +139,12 @@ void tst_QToolBar::allowedAreas()
QVERIFY(!tb.isAreaAllowed(Qt::RightToolBarArea));
QVERIFY(!tb.isAreaAllowed(Qt::TopToolBarArea));
QVERIFY(!tb.isAreaAllowed(Qt::BottomToolBarArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::ToolBarAreas *>(spy.at(0).value(0).constData()),
tb.allowedAreas());
spy.clear();
tb.setAllowedAreas(tb.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setAllowedAreas(Qt::RightToolBarArea);
QCOMPARE((int)tb.allowedAreas(), (int)Qt::RightToolBarArea);
@@ -175,12 +152,12 @@ void tst_QToolBar::allowedAreas()
QVERIFY(tb.isAreaAllowed(Qt::RightToolBarArea));
QVERIFY(!tb.isAreaAllowed(Qt::TopToolBarArea));
QVERIFY(!tb.isAreaAllowed(Qt::BottomToolBarArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::ToolBarAreas *>(spy.at(0).value(0).constData()),
tb.allowedAreas());
spy.clear();
tb.setAllowedAreas(tb.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setAllowedAreas(Qt::TopToolBarArea);
QCOMPARE((int)tb.allowedAreas(), (int)Qt::TopToolBarArea);
@@ -188,12 +165,12 @@ void tst_QToolBar::allowedAreas()
QVERIFY(!tb.isAreaAllowed(Qt::RightToolBarArea));
QVERIFY(tb.isAreaAllowed(Qt::TopToolBarArea));
QVERIFY(!tb.isAreaAllowed(Qt::BottomToolBarArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::ToolBarAreas *>(spy.at(0).value(0).constData()),
tb.allowedAreas());
spy.clear();
tb.setAllowedAreas(tb.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setAllowedAreas(Qt::BottomToolBarArea);
QCOMPARE((int)tb.allowedAreas(), (int)Qt::BottomToolBarArea);
@@ -201,12 +178,12 @@ void tst_QToolBar::allowedAreas()
QVERIFY(!tb.isAreaAllowed(Qt::RightToolBarArea));
QVERIFY(!tb.isAreaAllowed(Qt::TopToolBarArea));
QVERIFY(tb.isAreaAllowed(Qt::BottomToolBarArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::ToolBarAreas *>(spy.at(0).value(0).constData()),
tb.allowedAreas());
spy.clear();
tb.setAllowedAreas(tb.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// multiple dock window areas
tb.setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
@@ -215,12 +192,12 @@ void tst_QToolBar::allowedAreas()
QVERIFY(!tb.isAreaAllowed(Qt::RightToolBarArea));
QVERIFY(tb.isAreaAllowed(Qt::TopToolBarArea));
QVERIFY(tb.isAreaAllowed(Qt::BottomToolBarArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::ToolBarAreas *>(spy.at(0).value(0).constData()),
tb.allowedAreas());
spy.clear();
tb.setAllowedAreas(tb.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setAllowedAreas(Qt::LeftToolBarArea | Qt::RightToolBarArea);
QCOMPARE(tb.allowedAreas(), Qt::LeftToolBarArea | Qt::RightToolBarArea);
@@ -228,12 +205,12 @@ void tst_QToolBar::allowedAreas()
QVERIFY(tb.isAreaAllowed(Qt::RightToolBarArea));
QVERIFY(!tb.isAreaAllowed(Qt::TopToolBarArea));
QVERIFY(!tb.isAreaAllowed(Qt::BottomToolBarArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::ToolBarAreas *>(spy.at(0).value(0).constData()),
tb.allowedAreas());
spy.clear();
tb.setAllowedAreas(tb.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setAllowedAreas(Qt::TopToolBarArea | Qt::LeftToolBarArea);
QCOMPARE(tb.allowedAreas(), Qt::TopToolBarArea | Qt::LeftToolBarArea);
@@ -241,12 +218,12 @@ void tst_QToolBar::allowedAreas()
QVERIFY(!tb.isAreaAllowed(Qt::RightToolBarArea));
QVERIFY(tb.isAreaAllowed(Qt::TopToolBarArea));
QVERIFY(!tb.isAreaAllowed(Qt::BottomToolBarArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::ToolBarAreas *>(spy.at(0).value(0).constData()),
tb.allowedAreas());
spy.clear();
tb.setAllowedAreas(tb.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setAllowedAreas(Qt::BottomToolBarArea | Qt::RightToolBarArea);
QCOMPARE(tb.allowedAreas(), Qt::BottomToolBarArea | Qt::RightToolBarArea);
@@ -254,12 +231,12 @@ void tst_QToolBar::allowedAreas()
QVERIFY(tb.isAreaAllowed(Qt::RightToolBarArea));
QVERIFY(!tb.isAreaAllowed(Qt::TopToolBarArea));
QVERIFY(tb.isAreaAllowed(Qt::BottomToolBarArea));
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::ToolBarAreas *>(spy.at(0).value(0).constData()),
tb.allowedAreas());
spy.clear();
tb.setAllowedAreas(tb.allowedAreas());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QToolBar::orientation()
@@ -271,48 +248,48 @@ void tst_QToolBar::orientation()
tb.setOrientation(Qt::Vertical);
QCOMPARE(tb.orientation(), Qt::Vertical);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::Orientation *>(spy.at(0).value(0).constData()),
tb.orientation());
spy.clear();
tb.setOrientation(tb.orientation());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setOrientation(Qt::Horizontal);
QCOMPARE(tb.orientation(), Qt::Horizontal);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::Orientation *>(spy.at(0).value(0).constData()),
tb.orientation());
spy.clear();
tb.setOrientation(tb.orientation());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setOrientation(Qt::Vertical);
QCOMPARE(tb.orientation(), Qt::Vertical);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::Orientation *>(spy.at(0).value(0).constData()),
tb.orientation());
spy.clear();
tb.setOrientation(tb.orientation());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setOrientation(Qt::Horizontal);
QCOMPARE(tb.orientation(), Qt::Horizontal);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::Orientation *>(spy.at(0).value(0).constData()),
tb.orientation());
spy.clear();
tb.setOrientation(tb.orientation());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setOrientation(Qt::Vertical);
QCOMPARE(tb.orientation(), Qt::Vertical);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(*static_cast<const Qt::Orientation *>(spy.at(0).value(0).constData()),
tb.orientation());
spy.clear();
tb.setOrientation(tb.orientation());
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QToolBar::addAction()
@@ -322,13 +299,13 @@ void tst_QToolBar::addAction()
{
QAction action(0);
- QCOMPARE(tb.actions().count(), 0);
+ QCOMPARE(tb.actions().size(), 0);
tb.addAction(&action);
- QCOMPARE(tb.actions().count(), 1);
+ QCOMPARE(tb.actions().size(), 1);
QCOMPARE(tb.actions()[0], &action);
tb.clear();
- QCOMPARE(tb.actions().count(), 0);
+ QCOMPARE(tb.actions().size(), 0);
}
{
@@ -351,14 +328,14 @@ void tst_QToolBar::addAction()
QCOMPARE(icon, action4->icon());
QCOMPARE(text, action4->text());
- QCOMPARE(tb.actions().count(), 4);
+ QCOMPARE(tb.actions().size(), 4);
QCOMPARE(tb.actions()[0], action1);
QCOMPARE(tb.actions()[1], action2);
QCOMPARE(tb.actions()[2], action3);
QCOMPARE(tb.actions()[3], action4);
tb.clear();
- QCOMPARE(tb.actions().count(), 0);
+ QCOMPARE(tb.actions().size(), 0);
}
}
@@ -387,19 +364,19 @@ void tst_QToolBar::insertAction()
QAction action3(0);
QAction action4(0);
- QCOMPARE(tb.actions().count(), 0);
+ QCOMPARE(tb.actions().size(), 0);
tb.insertAction(0, &action1);
tb.insertAction(&action1, &action2);
tb.insertAction(&action2, &action3);
tb.insertAction(&action3, &action4);
- QCOMPARE(tb.actions().count(), 4);
+ QCOMPARE(tb.actions().size(), 4);
QCOMPARE(tb.actions()[0], &action4);
QCOMPARE(tb.actions()[1], &action3);
QCOMPARE(tb.actions()[2], &action2);
QCOMPARE(tb.actions()[3], &action1);
tb.clear();
- QCOMPARE(tb.actions().count(), 0);
+ QCOMPARE(tb.actions().size(), 0);
}
void tst_QToolBar::addSeparator()
@@ -413,13 +390,13 @@ void tst_QToolBar::addSeparator()
QAction *sep = tb.addSeparator();
tb.addAction(&action2);
- QCOMPARE(tb.actions().count(), 3);
+ QCOMPARE(tb.actions().size(), 3);
QCOMPARE(tb.actions()[0], &action1);
QCOMPARE(tb.actions()[1], sep);
QCOMPARE(tb.actions()[2], &action2);
tb.clear();
- QCOMPARE(tb.actions().count(), 0);
+ QCOMPARE(tb.actions().size(), 0);
}
void tst_QToolBar::insertSeparator()
@@ -433,13 +410,13 @@ void tst_QToolBar::insertSeparator()
tb.addAction(&action2);
QAction *sep = tb.insertSeparator(&action2);
- QCOMPARE(tb.actions().count(), 3);
+ QCOMPARE(tb.actions().size(), 3);
QCOMPARE(tb.actions()[0], &action1);
QCOMPARE(tb.actions()[1], sep);
QCOMPARE(tb.actions()[2], &action2);
tb.clear();
- QCOMPARE(tb.actions().count(), 0);
+ QCOMPARE(tb.actions().size(), 0);
}
void tst_QToolBar::addWidget()
@@ -454,7 +431,7 @@ void tst_QToolBar::addWidget()
QAction *widget = tb.addWidget(&w);
tb.addAction(&action2);
- QCOMPARE(tb.actions().count(), 3);
+ QCOMPARE(tb.actions().size(), 3);
QCOMPARE(tb.actions()[0], &action1);
QCOMPARE(tb.actions()[1], widget);
QCOMPARE(tb.actions()[2], &action2);
@@ -462,18 +439,18 @@ void tst_QToolBar::addWidget()
// it should be possible to reuse the action returned by
// addWidget() to place the widget somewhere else in the toolbar
tb.removeAction(widget);
- QCOMPARE(tb.actions().count(), 2);
+ QCOMPARE(tb.actions().size(), 2);
QCOMPARE(tb.actions()[0], &action1);
QCOMPARE(tb.actions()[1], &action2);
tb.addAction(widget);
- QCOMPARE(tb.actions().count(), 3);
+ QCOMPARE(tb.actions().size(), 3);
QCOMPARE(tb.actions()[0], &action1);
QCOMPARE(tb.actions()[1], &action2);
QCOMPARE(tb.actions()[2], widget);
tb.clear();
- QCOMPARE(tb.actions().count(), 0);
+ QCOMPARE(tb.actions().size(), 0);
}
void tst_QToolBar::insertWidget()
@@ -488,7 +465,7 @@ void tst_QToolBar::insertWidget()
tb.addAction(&action2);
QAction *widget = tb.insertWidget(&action2, &w);
- QCOMPARE(tb.actions().count(), 3);
+ QCOMPARE(tb.actions().size(), 3);
QCOMPARE(tb.actions()[0], &action1);
QCOMPARE(tb.actions()[1], widget);
QCOMPARE(tb.actions()[2], &action2);
@@ -496,18 +473,18 @@ void tst_QToolBar::insertWidget()
// it should be possible to reuse the action returned by
// addWidget() to place the widget somewhere else in the toolbar
tb.removeAction(widget);
- QCOMPARE(tb.actions().count(), 2);
+ QCOMPARE(tb.actions().size(), 2);
QCOMPARE(tb.actions()[0], &action1);
QCOMPARE(tb.actions()[1], &action2);
tb.insertAction(&action1, widget);
- QCOMPARE(tb.actions().count(), 3);
+ QCOMPARE(tb.actions().size(), 3);
QCOMPARE(tb.actions()[0], widget);
QCOMPARE(tb.actions()[1], &action1);
QCOMPARE(tb.actions()[2], &action2);
tb.clear();
- QCOMPARE(tb.actions().count(), 0);
+ QCOMPARE(tb.actions().size(), 0);
{
QToolBar tb;
@@ -649,43 +626,43 @@ void tst_QToolBar::iconSize()
QCOMPARE(tb.iconSize(), defaultIconSize);
tb.setIconSize(defaultIconSize);
QCOMPARE(tb.iconSize(), defaultIconSize);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
tb.setIconSize(largeIconSize);
QCOMPARE(tb.iconSize(), largeIconSize);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.first().first().toSize(), largeIconSize);
// no-op
spy.clear();
tb.setIconSize(largeIconSize);
QCOMPARE(tb.iconSize(), largeIconSize);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
tb.setIconSize(defaultIconSize);
QCOMPARE(tb.iconSize(), defaultIconSize);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.first().first().toSize(), defaultIconSize);
// no-op
spy.clear();
tb.setIconSize(defaultIconSize);
QCOMPARE(tb.iconSize(), defaultIconSize);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
spy.clear();
tb.setIconSize(smallIconSize);
QCOMPARE(tb.iconSize(), smallIconSize);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.first().first().toSize(), smallIconSize);
// no-op
spy.clear();
tb.setIconSize(smallIconSize);
QCOMPARE(tb.iconSize(), smallIconSize);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
// setting the icon size to an invalid QSize will reset the
// iconSize property to the default
@@ -713,28 +690,28 @@ void tst_QToolBar::iconSize()
// explicitly set it to the default
tb.setIconSize(defaultIconSize);
QCOMPARE(tb.iconSize(), defaultIconSize);
- QCOMPARE(tbSpy.count(), 0);
+ QCOMPARE(tbSpy.size(), 0);
mw.addToolBar(&tb);
// tb icon size should not change since it has been explicitly set
QCOMPARE(tb.iconSize(), defaultIconSize);
- QCOMPARE(tbSpy.count(), 0);
+ QCOMPARE(tbSpy.size(), 0);
mw.setIconSize(largeIconSize);
QCOMPARE(tb.iconSize(), defaultIconSize);
- QCOMPARE(tbSpy.count(), 0);
+ QCOMPARE(tbSpy.size(), 0);
mw.setIconSize(defaultIconSize);
QCOMPARE(tb.iconSize(), defaultIconSize);
- QCOMPARE(tbSpy.count(), 0);
+ QCOMPARE(tbSpy.size(), 0);
mw.setIconSize(smallIconSize);
QCOMPARE(tb.iconSize(), defaultIconSize);
- QCOMPARE(tbSpy.count(), 0);
+ QCOMPARE(tbSpy.size(), 0);
// resetting to the default should cause the toolbar to take
// on the mainwindow's icon size
@@ -757,51 +734,51 @@ void tst_QToolBar::toolButtonStyle()
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonIconOnly);
tb.setToolButtonStyle(Qt::ToolButtonIconOnly);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonIconOnly);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setToolButtonStyle(Qt::ToolButtonTextOnly);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonTextOnly);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
// no-op
tb.setToolButtonStyle(Qt::ToolButtonTextOnly);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonTextOnly);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setToolButtonStyle(Qt::ToolButtonIconOnly);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonIconOnly);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
// no-op
tb.setToolButtonStyle(Qt::ToolButtonIconOnly);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonIconOnly);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonTextBesideIcon);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
// no-op
tb.setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonTextBesideIcon);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonTextUnderIcon);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
spy.clear();
// no-op
tb.setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonTextUnderIcon);
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.setToolButtonStyle(Qt::ToolButtonFollowStyle);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonFollowStyle);
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
}
{
@@ -815,28 +792,28 @@ void tst_QToolBar::toolButtonStyle()
// explicitly set the tb to the default
tb.setToolButtonStyle(Qt::ToolButtonIconOnly);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonIconOnly);
- QCOMPARE(tbSpy.count(), 0);
+ QCOMPARE(tbSpy.size(), 0);
mw.addToolBar(&tb);
// tb icon size should not change since it has been explicitly set
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonIconOnly);
- QCOMPARE(tbSpy.count(), 0);
+ QCOMPARE(tbSpy.size(), 0);
mw.setToolButtonStyle(Qt::ToolButtonIconOnly);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonIconOnly);
- QCOMPARE(tbSpy.count(), 0);
+ QCOMPARE(tbSpy.size(), 0);
mw.setToolButtonStyle(Qt::ToolButtonTextOnly);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonIconOnly);
- QCOMPARE(tbSpy.count(), 0);
+ QCOMPARE(tbSpy.size(), 0);
mw.setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
QCOMPARE(tb.toolButtonStyle(), Qt::ToolButtonIconOnly);
- QCOMPARE(tbSpy.count(), 0);
+ QCOMPARE(tbSpy.size(), 0);
// note: there is no way to clear the explicitly set tool
// button style... once you explicitly set it, the toolbar
@@ -950,25 +927,25 @@ void tst_QToolBar::visibilityChanged()
mw.addToolBar(&tb);
mw.show();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), true);
spy.clear();
tb.hide();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), false);
spy.clear();
tb.hide();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
tb.show();
- QCOMPARE(spy.count(), 1);
+ QCOMPARE(spy.size(), 1);
QCOMPARE(spy.at(0).at(0).toBool(), true);
spy.clear();
tb.show();
- QCOMPARE(spy.count(), 0);
+ QCOMPARE(spy.size(), 0);
}
void tst_QToolBar::actionOwnership()
@@ -1045,12 +1022,12 @@ void tst_QToolBar::accel()
QSignalSpy spy(action, SIGNAL(triggered(bool)));
mw.show();
- QApplication::setActiveWindow(&mw);
+ QApplicationPrivate::setActiveWindow(&mw);
QVERIFY(QTest::qWaitForWindowActive(&mw));
QTest::keyClick(&mw, Qt::Key_T, Qt::AltModifier);
- QTRY_COMPARE(spy.count(), 1);
+ QTRY_COMPARE(spy.size(), 1);
#ifdef Q_OS_MAC
qt_set_sequence_auto_mnemonic(false);
#endif
diff --git a/tests/auto/widgets/widgets/qtoolbox/CMakeLists.txt b/tests/auto/widgets/widgets/qtoolbox/CMakeLists.txt
index bb50233c6e..362fba25a4 100644
--- a/tests/auto/widgets/widgets/qtoolbox/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qtoolbox/CMakeLists.txt
@@ -1,13 +1,20 @@
-# Generated from qtoolbox.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtoolbox Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtoolbox LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtoolbox
SOURCES
tst_qtoolbox.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/auto/widgets/widgets/qtoolbox/tst_qtoolbox.cpp b/tests/auto/widgets/widgets/qtoolbox/tst_qtoolbox.cpp
index fc7eade9f4..fb14ceb79c 100644
--- a/tests/auto/widgets/widgets/qtoolbox/tst_qtoolbox.cpp
+++ b/tests/auto/widgets/widgets/qtoolbox/tst_qtoolbox.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 <QTest>
diff --git a/tests/auto/widgets/widgets/qtoolbutton/CMakeLists.txt b/tests/auto/widgets/widgets/qtoolbutton/CMakeLists.txt
index b27d88f503..7c8b41b5e6 100644
--- a/tests/auto/widgets/widgets/qtoolbutton/CMakeLists.txt
+++ b/tests/auto/widgets/widgets/qtoolbutton/CMakeLists.txt
@@ -1,13 +1,21 @@
-# Generated from qtoolbutton.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qtoolbutton Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qtoolbutton LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
qt_internal_add_test(tst_qtoolbutton
SOURCES
tst_qtoolbutton.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
)
diff --git a/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp b/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp
index 12a9ec3de0..20472861d9 100644
--- a/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp
+++ b/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.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 <QTest>
@@ -40,6 +15,8 @@
#include <qscreen.h>
#include <qlabel.h>
+#include <QtWidgets/private/qapplication_p.h>
+
class tst_QToolButton : public QObject
{
Q_OBJECT
@@ -57,6 +34,7 @@ private slots:
void qtbug_26956_popupTimerDone();
void qtbug_34759_sizeHintResetWhenSettingMenu();
void defaultActionSynced();
+ void deleteInHandler();
protected slots:
void sendMouseClick();
@@ -143,11 +121,11 @@ void tst_QToolButton::triggered()
toolButton->setDefaultAction(defaultAction);
mainWidget.show();
- QApplication::setActiveWindow(&mainWidget);
+ QApplicationPrivate::setActiveWindow(&mainWidget);
QVERIFY(QTest::qWaitForWindowActive(&mainWidget));
defaultAction->trigger();
- QCOMPARE(spy.count(),1);
+ QCOMPARE(spy.size(),1);
QCOMPARE(qvariant_cast<QAction *>(spy.at(0).at(0)), defaultAction);
m_menu = menu.data();
@@ -158,7 +136,7 @@ void tst_QToolButton::triggered()
timer->start();
QTimer::singleShot(10000, &mainWidget, SLOT(close())); // Emergency bail-out
toolButton->showMenu();
- QTRY_COMPARE(spy.count(),2);
+ QTRY_COMPARE(spy.size(),2);
QCOMPARE(qvariant_cast<QAction *>(spy.at(1).at(0)), one);
}
@@ -204,14 +182,14 @@ void tst_QToolButton::task176137_autoRepeatOfAction()
label->move(0, 50);
mainWidget.show();
- QApplication::setActiveWindow(&mainWidget);
+ QApplicationPrivate::setActiveWindow(&mainWidget);
QVERIFY(QTest::qWaitForWindowActive(&mainWidget));
QSignalSpy spy(&action,SIGNAL(triggered()));
QTest::mousePress (toolButton, Qt::LeftButton);
QTest::qWait(2000);
QTest::mouseRelease (toolButton, Qt::LeftButton, {}, {});
- QCOMPARE(spy.count(),1);
+ QCOMPARE(spy.size(),1);
// try again with auto repeat
toolButton->setAutoRepeat (true);
@@ -221,11 +199,11 @@ void tst_QToolButton::task176137_autoRepeatOfAction()
QTest::mouseRelease (toolButton, Qt::LeftButton, {}, {});
const qreal expected = (3000 - toolButton->autoRepeatDelay()) / toolButton->autoRepeatInterval() + 1;
//we check that the difference is small (on some systems timers are not super accurate)
- qreal diff = (expected - repeatSpy.count()) / expected;
+ qreal diff = (expected - repeatSpy.size()) / expected;
QVERIFY2(qAbs(diff) < 0.2, qPrintable(
QString("expected: %1, actual: %2, diff (fraction): %3")
.arg(expected)
- .arg(repeatSpy.count())
+ .arg(repeatSpy.size())
.arg(diff)));
}
@@ -298,21 +276,21 @@ void tst_QToolButton::defaultActionSynced()
tb.setChecked(true);
QVERIFY(a.isChecked());
- QCOMPARE(tbSpy.count(), ++tbToggledCount);
- QCOMPARE(aSpy.count(), ++aToggledCount);
+ QCOMPARE(tbSpy.size(), ++tbToggledCount);
+ QCOMPARE(aSpy.size(), ++aToggledCount);
tb.setChecked(false);
QVERIFY(!a.isChecked());
- QCOMPARE(tbSpy.count(), ++tbToggledCount);
- QCOMPARE(aSpy.count(), ++aToggledCount);
+ QCOMPARE(tbSpy.size(), ++tbToggledCount);
+ QCOMPARE(aSpy.size(), ++aToggledCount);
a.setChecked(true);
QVERIFY(tb.isChecked());
- QCOMPARE(tbSpy.count(), ++tbToggledCount);
- QCOMPARE(aSpy.count(), ++aToggledCount);
+ QCOMPARE(tbSpy.size(), ++tbToggledCount);
+ QCOMPARE(aSpy.size(), ++aToggledCount);
a.setChecked(false);
QVERIFY(!tb.isChecked());
- QCOMPARE(tbSpy.count(), ++tbToggledCount);
- QCOMPARE(aSpy.count(), ++aToggledCount);
+ QCOMPARE(tbSpy.size(), ++tbToggledCount);
+ QCOMPARE(aSpy.size(), ++aToggledCount);
QAction b;
QSignalSpy bSpy(&b, SIGNAL(toggled(bool)));
@@ -326,17 +304,34 @@ void tst_QToolButton::defaultActionSynced()
QVERIFY(!a.isChecked());
QVERIFY(b.isChecked());
- QCOMPARE(tbSpy.count(), ++tbToggledCount);
- QCOMPARE(aSpy.count(), aToggledCount);
- QCOMPARE(bSpy.count(), ++bToggledCount);
+ QCOMPARE(tbSpy.size(), ++tbToggledCount);
+ QCOMPARE(aSpy.size(), aToggledCount);
+ QCOMPARE(bSpy.size(), ++bToggledCount);
tb.click();
QVERIFY(!a.isChecked());
QVERIFY(!tb.isChecked());
QVERIFY(!b.isChecked());
- QCOMPARE(tbSpy.count(), ++tbToggledCount);
- QCOMPARE(aSpy.count(), aToggledCount);
- QCOMPARE(bSpy.count(), ++bToggledCount);
+ QCOMPARE(tbSpy.size(), ++tbToggledCount);
+ QCOMPARE(aSpy.size(), aToggledCount);
+ QCOMPARE(bSpy.size(), ++bToggledCount);
+}
+
+void tst_QToolButton::deleteInHandler()
+{
+ // Tests that if something deletes the button
+ // while its event handler is still on the callstack, we don't crash
+
+ QPointer<QToolButton> tb = new QToolButton();
+ tb->show();
+ QVERIFY(QTest::qWaitForWindowActive(tb));
+
+ connect(tb, &QToolButton::clicked, this, [tb] {
+ delete tb;
+ });
+
+ QTest::mouseClick(tb, Qt::LeftButton);
+ QVERIFY(!tb);
}
QTEST_MAIN(tst_QToolButton)
diff --git a/tests/auto/xml/CMakeLists.txt b/tests/auto/xml/CMakeLists.txt
index f3365a03ec..4b8cc88d78 100644
--- a/tests/auto/xml/CMakeLists.txt
+++ b/tests/auto/xml/CMakeLists.txt
@@ -1,6 +1 @@
-# Generated from xml.pro.
-
-# QTBUG-87671 # special case
-if(NOT ANDROID)
- add_subdirectory(dom)
-endif()
+add_subdirectory(dom)
diff --git a/tests/auto/xml/dom/CMakeLists.txt b/tests/auto/xml/dom/CMakeLists.txt
index 08a7621e88..daa837c2cf 100644
--- a/tests/auto/xml/dom/CMakeLists.txt
+++ b/tests/auto/xml/dom/CMakeLists.txt
@@ -1,3 +1,4 @@
-# Generated from dom.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qdom)
diff --git a/tests/auto/xml/dom/qdom/CMakeLists.txt b/tests/auto/xml/dom/qdom/CMakeLists.txt
index d72ef57332..4eea988cc3 100644
--- a/tests/auto/xml/dom/qdom/CMakeLists.txt
+++ b/tests/auto/xml/dom/qdom/CMakeLists.txt
@@ -1,9 +1,16 @@
-# Generated from qdom.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdom Test:
#####################################################################
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(tst_qdom LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
# Collect test data
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
@@ -15,7 +22,8 @@ list(APPEND test_data "umlaut.xml")
qt_internal_add_test(tst_qdom
SOURCES
tst_qdom.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Xml
+ Qt::XmlPrivate
TESTDATA ${test_data}
)
diff --git a/tests/auto/xml/dom/qdom/tst_qdom.cpp b/tests/auto/xml/dom/qdom/tst_qdom.cpp
index b1c9b2e9c9..b73dbc49e2 100644
--- a/tests/auto/xml/dom/qdom/tst_qdom.cpp
+++ b/tests/auto/xml/dom/qdom/tst_qdom.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 <QBuffer>
@@ -34,15 +9,19 @@
#include <QFile>
#include <QList>
#include <QRegularExpression>
+#include <QScopeGuard>
#include <QTextStream>
#include <QTest>
#include <QtXml>
#include <QVariant>
#include <cmath>
+#include <QtXml/private/qdom_p.h>
QT_FORWARD_DECLARE_CLASS(QDomDocument)
QT_FORWARD_DECLARE_CLASS(QDomNode)
+using namespace Qt::StringLiterals;
+
class tst_QDom : public QObject
{
Q_OBJECT
@@ -52,6 +31,11 @@ private slots:
void namespacedAttributes() const;
void setContent_data();
void setContent();
+ void setContentOverloads();
+ void parseOptions();
+ void spacingOnlyNodes_data() const;
+ void spacingOnlyNodes() const;
+ void parseResult();
void toString_01_data();
void toString_01();
void toString_02_data();
@@ -85,8 +69,10 @@ private slots:
void invalidQualifiedName();
void invalidCharData_data();
void invalidCharData();
+ void nonBMPCharacters();
void roundTripAttributes() const;
+ void roundTripCDATA() const;
void normalizeEndOfLine() const;
void normalizeAttributes() const;
void serializeWeirdEOL() const;
@@ -117,7 +103,11 @@ private slots:
void cloneDTD_QTBUG8398() const;
void DTDNotationDecl();
void DTDEntityDecl();
+ void DTDInternalSubset() const;
+ void DTDInternalSubset_data() const;
void QTBUG49113_dontCrashWithNegativeIndex() const;
+ void standalone();
+ void splitTextLeakMemory() const;
void cleanupTestCase() const;
@@ -191,7 +181,11 @@ void tst_QDom::setContent()
QDomDocument domDoc;
QXmlStreamReader reader(doc);
- QVERIFY(domDoc.setContent(&reader, true));
+#if QT_DEPRECATED_SINCE(6, 8)
+ QT_IGNORE_DEPRECATIONS(domDoc.setContent(&reader, true);)
+#else
+ QVERIFY(domDoc.setContent(&reader, QDomDocument::ParseOption::UseNamespaceProcessing));
+#endif // QT_DEPRECATED_SINCE(6, 8)
QString eRes;
QTextStream ts( &eRes, QIODevice::WriteOnly );
@@ -205,6 +199,190 @@ void tst_QDom::setContent()
QVERIFY( domDoc1.setContent( doc ) );
QVERIFY( domDoc2.setContent( eRes ) );
QVERIFY( compareDocuments( domDoc1, domDoc2 ) );
+
+ // Test overload taking a QAnyStringView
+ QDomDocument domFromStringView;
+ QStringView stringView(doc);
+ QVERIFY(domFromStringView.setContent(stringView));
+ QVERIFY(compareDocuments(domFromStringView, domDoc));
+
+ // Test overload taking a QByteArray
+ QDomDocument domFromByteArary;
+ QByteArray byteArray = doc.toUtf8();
+ QVERIFY(domFromByteArary.setContent(byteArray));
+ QVERIFY(compareDocuments(domFromByteArary, domDoc));
+
+ // Test overload taking a QIODevice
+ QDomDocument domFromIODevice;
+ QBuffer buffer(&byteArray);
+ QVERIFY(buffer.open(QIODevice::ReadOnly));
+ QVERIFY(domFromIODevice.setContent(&buffer));
+ QVERIFY(compareDocuments(domFromIODevice, domDoc));
+}
+
+void tst_QDom::setContentOverloads()
+{
+ QDomDocument doc;
+ QString errorMessage;
+
+ QByteArray data("<a>test</a>");
+ QString text = QString::fromLatin1(data);
+ QXmlStreamReader reader(data);
+
+ QBuffer buffer(&data);
+ QVERIFY(buffer.open(QIODevice::ReadOnly));
+
+ QVERIFY(doc.setContent(data));
+ QVERIFY(doc.setContent(data.data()));
+ QVERIFY(doc.setContent(text));
+ QVERIFY(doc.setContent(&reader));
+ QVERIFY(doc.setContent(&buffer));
+ buffer.reset();
+
+ // With parse options
+ QVERIFY(doc.setContent(data, QDomDocument::ParseOption::Default));
+ QVERIFY(doc.setContent(data.data(), QDomDocument::ParseOption::Default));
+ QVERIFY(doc.setContent(text, QDomDocument::ParseOption::Default));
+ QVERIFY(doc.setContent(&reader, QDomDocument::ParseOption::Default));
+ QVERIFY(doc.setContent(&buffer, QDomDocument::ParseOption::Default));
+ buffer.reset();
+
+#if QT_DEPRECATED_SINCE(6, 8)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
+ // With output param
+ QVERIFY(doc.setContent(data, &errorMessage));
+ QVERIFY(doc.setContent(text, &errorMessage));
+ QVERIFY(doc.setContent(&buffer, &errorMessage));
+ buffer.reset();
+ // There's no setContent(QXmlStreamReader *, QString *, int *, int *) overload
+ // QVERIFY(doc.setContent(&reader, &errorMessage));
+
+ // With namespace processing param
+ QVERIFY(doc.setContent(data, false));
+ QVERIFY(doc.setContent(text, false));
+ QVERIFY(doc.setContent(&reader, false));
+ QVERIFY(doc.setContent(&buffer, false));
+ buffer.reset();
+
+ // With namespace processing and output params
+ QVERIFY(doc.setContent(data, false, &errorMessage));
+ QVERIFY(doc.setContent(text, false, &errorMessage));
+ QVERIFY(doc.setContent(&reader, false, &errorMessage));
+ QVERIFY(doc.setContent(&buffer, false, &errorMessage));
+ buffer.reset();
+QT_WARNING_POP
+#endif // QT_DEPRECATED_SINCE(6, 8)
+}
+
+void tst_QDom::parseOptions()
+{
+ QString input = u"<doc xmlns:ns='http://example.com/'>"
+ "<ns:nested/>"
+ "</doc>"_s;
+ {
+ QDomDocument document;
+ QVERIFY(document.setContent(input, QDomDocument::ParseOption::Default));
+ const QDomElement docElement = document.firstChildElement("doc");
+ QVERIFY(!docElement.isNull());
+ const QDomElement nestedElement = docElement.firstChildElement();
+ QCOMPARE(nestedElement.nodeName(), "ns:nested");
+ QVERIFY(!nestedElement.isNull());
+ QVERIFY(nestedElement.localName().isEmpty());
+ QVERIFY(nestedElement.prefix().isEmpty());
+ QVERIFY(nestedElement.namespaceURI().isEmpty());
+ }
+ {
+ QDomDocument document;
+ QVERIFY(document.setContent(input, QDomDocument::ParseOption::UseNamespaceProcessing));
+ const QDomElement docElement = document.firstChildElement("doc");
+ QVERIFY(!docElement.isNull());
+ const QDomElement nestedElement = docElement.firstChildElement("nested");
+ QVERIFY(!nestedElement.isNull());
+ QCOMPARE(nestedElement.nodeName(), "ns:nested");
+ QCOMPARE(nestedElement.localName(), "nested");
+ QCOMPARE(nestedElement.prefix(), "ns");
+ QCOMPARE(nestedElement.namespaceURI(), "http://example.com/");
+ }
+}
+
+void tst_QDom::spacingOnlyNodes_data() const
+{
+ QTest::addColumn<QString>("input");
+ QTest::addColumn<QString>("expected");
+ QTest::addColumn<QDomDocument::ParseOption>("options");
+
+ QTest::newRow("spacing-only-remove")
+ << u"<a> \t \n \r</a>"_s
+ << u"<a/>"_s
+ << QDomDocument::ParseOption::Default;
+ // \r is translated to \n, see https://www.w3.org/TR/xml11/#sec-line-ends
+ QTest::newRow("spacing-only-preserve")
+ << u"<a> \t \n \r</a>"_s
+ << u"<a> \t \n \n</a>"_s
+ << QDomDocument::ParseOption::PreserveSpacingOnlyNodes;
+ QTest::newRow("mixed-text-remove")
+ << u"<a> abc \t \n \r</a>"_s
+ << u"<a> abc \t \n \n</a>"_s
+ << QDomDocument::ParseOption::Default;
+ QTest::newRow("mixed-text-preserve")
+ << u"<a> abc \t \n \r</a>"_s
+ << u"<a> abc \t \n \n</a>"_s
+ << QDomDocument::ParseOption::PreserveSpacingOnlyNodes;
+
+ // QDomDocument treats all chacarcters below as spaces (see QTBUG-105348)
+ static constexpr char16_t spaces[] = {
+ QChar::Space, QChar::Tabulation, QChar::LineFeed,
+ QChar::CarriageReturn, QChar::Nbsp,
+ 0x2002, // EN SPACE
+ 0x2003, // EM SPACE
+ 0x2009 // THIN SPACE
+ };
+
+ for (char16_t space : spaces) {
+ QTest::addRow("spacing-remove-u%04x", space)
+ << u"<a>"_s + space + u"</a>"_s
+ << u"<a/>"_s
+ << QDomDocument::ParseOption::Default;
+
+ // \r is translated to \n, see https://www.w3.org/TR/xml11/#sec-line-ends
+ char16_t expected = (space == QChar::CarriageReturn) ? char16_t(QChar::LineFeed) : space;
+ QTest::addRow("spacing-preserve-u%04x", space)
+ << u"<a>"_s + space + u"</a>"_s
+ << u"<a>"_s + expected + u"</a>"_s
+ << QDomDocument::ParseOption::PreserveSpacingOnlyNodes;
+ }
+}
+
+void tst_QDom::spacingOnlyNodes() const
+{
+ QFETCH(QString, input);
+ QFETCH(QString, expected);
+ QFETCH(QDomDocument::ParseOption, options);
+
+ QDomDocument doc;
+ QVERIFY(doc.setContent(input, options));
+ QCOMPARE(doc.toString(-1), expected);
+}
+
+void tst_QDom::parseResult()
+{
+ QString input = u"<doc xmlns:b='http://example.com/'>"
+ "<b:element/>"_s;
+
+ QDomDocument document;
+ QDomDocument::ParseResult result = document.setContent(input);
+ QVERIFY(!result);
+ QVERIFY(!result.errorMessage.isEmpty());
+ QVERIFY(result.errorLine);
+ QVERIFY(result.errorColumn);
+
+ input.append("</doc>");
+ result = document.setContent(input);
+ QVERIFY(result);
+ QVERIFY(result.errorMessage.isEmpty());
+ QVERIFY(!result.errorLine);
+ QVERIFY(!result.errorColumn);
}
void tst_QDom::toString_01_data()
@@ -243,13 +421,11 @@ void tst_QDom::toString_01()
QVERIFY2(f.open(QIODevice::ReadOnly), qPrintable(QString::fromLatin1("Failed to open file %1, file error: %2").arg(fileName).arg(f.error())));
QDomDocument doc;
- QString errorMsg;
- int errorLine;
- int errorCol;
-
- QVERIFY(doc.setContent( &f, &errorMsg, &errorLine, &errorCol )); /*,
- QString("QDomDocument::setContent() failed: %1 in line %2, column %3")
- .arg( errorMsg ).arg( errorLine ).arg( errorCol )); */
+ QDomDocument::ParseResult result = doc.setContent(&f, QDomDocument::ParseOption::Default);
+ QVERIFY2(result,
+ qPrintable(u"QDomDocument::setContent() failed (%1:%2): %3"_s.arg(result.errorLine)
+ .arg(result.errorColumn)
+ .arg(result.errorMessage)));
// test toString()'s invariant with different indenting depths
for ( int i=0; i<5; i++ ) {
QString toStr = doc.toString( i );
@@ -509,17 +685,14 @@ void tst_QDom::saveWithSerialization() const
QVERIFY(readDevice.open(QIODevice::ReadOnly));
QDomDocument result;
+ QDomDocument::ParseResult parseResult =
+ result.setContent(&readDevice, QDomDocument::ParseOption::Default);
- QString msg;
- int line = 0;
- int column = 0;
-
- QVERIFY2(result.setContent(&readDevice, &msg, &line, &column),
+ QVERIFY2(parseResult,
qPrintable(QString::fromLatin1("Failed: line %2, column %3: %4, content: %5")
- .arg(QString::number(line),
- QString::number(column),
- msg,
- QString::fromUtf8(storage))));
+ .arg(QString::number(parseResult.errorLine),
+ QString::number(parseResult.errorColumn),
+ parseResult.errorMessage, QString::fromUtf8(storage))));
if (!compareDocuments(doc, result))
{
QCOMPARE(doc.toString(), result.toString());
@@ -1364,6 +1537,10 @@ void tst_QDom::invalidCharData_data()
QTest::newRow( "f<o&o" ) << QString("f<o&o") << true << true << true << QString("f<o&o");
QTest::newRow( "empty" ) << QString() << true << true << true << QString();
QTest::newRow("f\\x07o\\x02")<< QString("f\x07o\x02")<< true << true << false << QString("fo");
+
+ const QChar pair[2] = { QChar(0xdc00), QChar(0xe000) };
+ QString invalid(pair, 2);
+ QTest::newRow("\\xdc00\\xe000") << invalid << true << true << false << invalid.last(1);
}
void tst_QDom::invalidCharData()
@@ -1407,6 +1584,20 @@ void tst_QDom::invalidCharData()
}
}
+void tst_QDom::nonBMPCharacters()
+{
+ const auto invalidDataPolicy = QDomImplementation::invalidDataPolicy();
+ auto resetInvalidDataPolicy = qScopeGuard(
+ [invalidDataPolicy] { QDomImplementation::setInvalidDataPolicy(invalidDataPolicy); });
+ QDomImplementation::setInvalidDataPolicy(QDomImplementation::DropInvalidChars);
+
+ const QString input = u"<text>Supplementary Plane: ð„ž ðŸ˜‚ 🀄 🀶 🃪 🃋</text>"_s;
+
+ QDomDocument doc;
+ QVERIFY(doc.setContent(input, QDomDocument::ParseOption::Default));
+ QCOMPARE(doc.toString(-1), input);
+}
+
void tst_QDom::roundTripAttributes() const
{
/* Create an attribute via the QDom API with weird whitespace content. */
@@ -1441,6 +1632,15 @@ void tst_QDom::roundTripAttributes() const
QCOMPARE(QString::fromLatin1(serialized.constData()), QString::fromLatin1(expected.constData()));
}
+void tst_QDom::roundTripCDATA() const
+{
+ const QString input = u"<?xml version='1.0' encoding='UTF-8'?>\n"
+ "<content><![CDATA[]]></content>\n"_s;
+ QDomDocument doc;
+ QVERIFY(doc.setContent(input, QDomDocument::ParseOption::Default));
+ QCOMPARE(doc.toString(), input);
+}
+
void tst_QDom::normalizeEndOfLine() const
{
QByteArray input("<a>\r\nc\rc\ra\na</a>");
@@ -1449,7 +1649,7 @@ void tst_QDom::normalizeEndOfLine() const
QVERIFY(buffer.open(QIODevice::ReadOnly));
QDomDocument doc;
- QVERIFY(doc.setContent(&buffer, true));
+ QVERIFY(doc.setContent(&buffer, QDomDocument::ParseOption::UseNamespaceProcessing));
const QString expected(QLatin1String("<a>\nc\nc\na\na</a>"));
@@ -1466,7 +1666,7 @@ void tst_QDom::normalizeAttributes() const
QVERIFY(buffer.open(QIODevice::ReadOnly));
QDomDocument doc;
- QVERIFY(doc.setContent(&buffer, true));
+ QVERIFY(doc.setContent(&buffer, QDomDocument::ParseOption::UseNamespaceProcessing));
QCOMPARE(doc.documentElement().attribute(QLatin1String("attribute")), QString::fromLatin1("a a"));
}
@@ -1510,17 +1710,18 @@ void tst_QDom::serializeNamespaces() const
QDomDocument doc;
QByteArray ba(input);
QXmlStreamReader streamReader(input);
- QVERIFY(doc.setContent(&streamReader, true));
+ QVERIFY(doc.setContent(&streamReader, QDomDocument::ParseOption::UseNamespaceProcessing));
const QByteArray serialized(doc.toByteArray());
QDomDocument doc2;
- QVERIFY(doc2.setContent(doc.toString(), true));
+ QVERIFY(doc2.setContent(doc.toString(), QDomDocument::ParseOption::UseNamespaceProcessing));
/* Here we test that it roundtrips. */
QVERIFY(isDeepEqual(doc2, doc));
QDomDocument doc3;
- QVERIFY(doc3.setContent(QString::fromLatin1(serialized.constData()), true));
+ QVERIFY(doc3.setContent(QString::fromLatin1(serialized.constData()),
+ QDomDocument::ParseOption::UseNamespaceProcessing));
QVERIFY(isDeepEqual(doc3, doc));
}
@@ -1546,7 +1747,7 @@ void tst_QDom::flagUndeclaredNamespace() const
QDomDocument doc;
QByteArray ba(input);
QXmlStreamReader streamReader(ba);
- QVERIFY(!doc.setContent(&streamReader, true));
+ QVERIFY(!doc.setContent(&streamReader, QDomDocument::ParseOption::UseNamespaceProcessing));
}
void tst_QDom::indentComments() const
@@ -1611,7 +1812,7 @@ void tst_QDom::checkLiveness() const
void tst_QDom::reportDuplicateAttributes() const
{
QDomDocument dd;
- bool isSuccess = dd.setContent(QLatin1String("<test x=\"1\" x=\"2\"/>"));
+ bool isSuccess = bool(dd.setContent(QLatin1String("<test x=\"1\" x=\"2\"/>")));
QVERIFY2(!isSuccess, "Duplicate attributes are well-formedness errors, and should be reported as such.");
}
@@ -1628,12 +1829,12 @@ void tst_QDom::namespacedAttributes() const
"</xan:td>\n";
QDomDocument one("document");
- QString error;
- bool docParsed = one.setContent(QByteArray(xml), true, &error);
- QVERIFY2(docParsed, qPrintable(error));
+ QDomDocument::ParseResult result =
+ one.setContent(QByteArray(xml), QDomDocument::ParseOption::UseNamespaceProcessing);
+ QVERIFY2(result, qPrintable(result.errorMessage));
QDomDocument two("document2");
- docParsed = two.setContent(one.toByteArray(2), true, &error);
- QVERIFY2(docParsed, qPrintable(error));
+ result = two.setContent(one.toByteArray(2), QDomDocument::ParseOption::UseNamespaceProcessing);
+ QVERIFY2(result, qPrintable(result.errorMessage));
QVERIFY(isDeepEqual(one, two));
}
@@ -1751,7 +1952,7 @@ void tst_QDom::germanUmlautToFile() const
QString name(QLatin1String("german"));
name += QChar(0xFC);
name += QLatin1String("umlaut");
- QCOMPARE(name.length(), 13);
+ QCOMPARE(name.size(), 13);
QDomDocument d("test");
d.appendChild(d.createElement(name));
@@ -1770,7 +1971,7 @@ void tst_QDom::germanUmlautToFile() const
const QByteArray in(inFile.readAll());
/* Check that it was wwritten out correctly. */
- QCOMPARE(in.length(), 34);
+ QCOMPARE(in.size(), 34);
QCOMPARE(in, baseline.toUtf8());
inFile.close();
@@ -1795,7 +1996,8 @@ void tst_QDom::crashInSetContent() const
QDomImplementation::setInvalidDataPolicy(QDomImplementation::ReturnNullNode);
QDomDocument docImport;
- QCOMPARE(docImport.setContent(QLatin1String("<a:>text</a:>"), true), false);
+ QVERIFY(!docImport.setContent(QLatin1String("<a:>text</a:>"),
+ QDomDocument::ParseOption::UseNamespaceProcessing));
QVERIFY(docImport.setContent(QLatin1String("<?xml version=\"1.0\"?><e/>")));
}
@@ -1810,24 +2012,17 @@ void tst_QDom::doubleNamespaceDeclarations() const
QVERIFY(file.open(QIODevice::ReadOnly));
QXmlStreamReader streamReader(&file);
- QVERIFY(doc.setContent(&streamReader, true));
+ QVERIFY(doc.setContent(&streamReader, QDomDocument::ParseOption::UseNamespaceProcessing));
- // tst_QDom relies on a specific QHash ordering, see QTBUG-25071
QString docAsString = doc.toString(0);
- QVERIFY(docAsString == QString::fromLatin1("<a>\n<b p:c=\"\" xmlns:p=\"NS\" p:d=\"\"/>\n</a>\n") ||
- docAsString == QString::fromLatin1("<a>\n<b p:c=\"\" p:d=\"\" xmlns:p=\"NS\"/>\n</a>\n") ||
- docAsString == QString::fromLatin1("<a>\n<b p:d=\"\" p:c=\"\" xmlns:p=\"NS\"/>\n</a>\n") ||
- docAsString == QString::fromLatin1("<a>\n<b p:d=\"\" xmlns:p=\"NS\" p:c=\"\"/>\n</a>\n") ||
- docAsString == QString::fromLatin1("<a>\n<b xmlns:p=\"NS\" p:c=\"\" p:d=\"\"/>\n</a>\n") ||
- docAsString == QString::fromLatin1("<a>\n<b xmlns:p=\"NS\" p:d=\"\" p:c=\"\"/>\n</a>\n")
- );
+ QCOMPARE(docAsString, "<a>\n<b p:c=\"\" p:d=\"\" xmlns:p=\"NS\"/>\n</a>\n");
}
void tst_QDom::setContentQXmlReaderOverload() const
{
QDomDocument doc;
QXmlStreamReader streamReader(QByteArray("<e/>"));
- doc.setContent(&streamReader, true);
+ doc.setContent(&streamReader, QDomDocument::ParseOption::UseNamespaceProcessing);
QCOMPARE(doc.documentElement().nodeName(), QString::fromLatin1("e"));
}
@@ -1879,7 +2074,7 @@ void tst_QDom::setContentWhitespace() const
QDomDocument domDoc;
- QCOMPARE(domDoc.setContent(doc), expectedValidity);
+ QCOMPARE(bool(domDoc.setContent(doc)), expectedValidity);
if(expectedValidity)
QCOMPARE(domDoc.documentElement().nodeName(), QString::fromLatin1("e"));
@@ -1929,11 +2124,11 @@ void tst_QDom::setContentUnopenedQIODevice() const
QTest::ignoreMessage(QtWarningMsg,
"QDomDocument called with unopened QIODevice. "
- "This will not be supported in future Qt versions");
+ "This will not be supported in future Qt versions.");
// Note: the check below is expected to fail in Qt 7.
// Fix the test and remove the obsolete code from setContent().
- QVERIFY(doc.setContent(&buffer, true));
+ QVERIFY(doc.setContent(&buffer, QDomDocument::ParseOption::UseNamespaceProcessing));
QCOMPARE(doc.toString().trimmed(), data);
}
@@ -2033,5 +2228,108 @@ void tst_QDom::QTBUG49113_dontCrashWithNegativeIndex() const
QVERIFY(node.isNull());
}
+void tst_QDom::standalone()
+{
+ {
+ QDomDocument doc;
+ const QString dtd("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
+ "<Test/>\n");
+ doc.setContent(dtd);
+ QVERIFY(doc.toString().contains("standalone=\'no\'"));
+ }
+ {
+ QDomDocument doc;
+ const QString dtd("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ "<Test/>\n");
+ doc.setContent(dtd);
+ QVERIFY(!doc.toString().contains("standalone"));
+ }
+ {
+ QDomDocument doc;
+ const QString dtd("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"
+ "<Test/>\n");
+ doc.setContent(dtd);
+ QVERIFY(doc.toString().contains("standalone=\'yes\'"));
+ }
+}
+
+void tst_QDom::DTDInternalSubset() const
+{
+ QFETCH( QString, doc );
+ QFETCH( QString, internalSubset );
+ QXmlStreamReader reader(doc);
+ QDomDocument document;
+ QVERIFY(document.setContent(&reader, QDomDocument::ParseOption::UseNamespaceProcessing));
+
+ QCOMPARE(document.doctype().internalSubset(), internalSubset);
+}
+
+void tst_QDom::DTDInternalSubset_data() const
+{
+ QTest::addColumn<QString>("doc");
+ QTest::addColumn<QString>("internalSubset");
+
+ QTest::newRow("data1") << "<?xml version='1.0'?>\n"
+ "<!DOCTYPE note SYSTEM '/[abcd].dtd'>\n"
+ "<note/>\n"
+ << "" ;
+
+ QTest::newRow("data2") << "<?xml version='1.0'?>\n"
+ "<!DOCTYPE note PUBLIC '-/freedesktop' 'https://[abcd].dtd'>\n"
+ "<note/>\n"
+ << "" ;
+
+ const QString internalSubset0(
+ "<!-- open brackets comment [ -->\n"
+ "<!-- colse brackets comment ] -->\n"
+ );
+ QTest::newRow("data3") << "<?xml version='1.0'?>\n"
+ "<!DOCTYPE note ["
+ + internalSubset0 +
+ "]>\n"
+ "<note/>\n"
+ << internalSubset0;
+
+ const QString internalSubset1(
+ "<!ENTITY obra '['>\n"
+ "<!ENTITY cbra ']'>\n"
+ );
+ QTest::newRow("data4") << "<?xml version='1.0'?>\n"
+ "<!DOCTYPE note ["
+ + internalSubset1 +
+ "]>\n"
+ "<note/>\n"
+ << internalSubset1;
+
+ QTest::newRow("data5") << "<?xml version='1.0'?>\n"
+ "<!DOCTYPE note PUBLIC '-/freedesktop' 'https://[abcd].dtd' ["
+ + internalSubset0
+ + "]>\n"
+ "<note/>\n"
+ << internalSubset0;
+
+ QTest::newRow("data6") << "<?xml version='1.0'?>\n"
+ "<!DOCTYPE note PUBLIC '-/freedesktop' "
+ "'2001:db8:130F:0000:0000:09C0:876A:130B://[abcd].dtd' ["
+ + internalSubset0
+ + "]>\n"
+ "<note/>\n"
+ << internalSubset0;
+}
+
+void tst_QDom::splitTextLeakMemory() const
+{
+ QDomDocument doc;
+ QDomElement top = doc.createElement("top");
+ QDomText text = doc.createTextNode("abcdefgh");
+ top.appendChild(text);
+ QDomText end = text.splitText(2);
+ QCOMPARE(text.data(), "ab"_L1);
+ QCOMPARE(end.data(), "cdefgh"_L1);
+ // only the parent node and the document have a reference on the nodes
+ QCOMPARE(text.impl->ref.loadRelaxed(), 2);
+ QCOMPARE(end.impl->ref.loadRelaxed(), 2);
+}
+
QTEST_MAIN(tst_QDom)
#include "tst_qdom.moc"
diff --git a/tests/baseline/CMakeLists.txt b/tests/baseline/CMakeLists.txt
index df5d35863b..037ffd9e0e 100644
--- a/tests/baseline/CMakeLists.txt
+++ b/tests/baseline/CMakeLists.txt
@@ -1,4 +1,7 @@
-if(TARGET Qt::Network)
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+if(TARGET Qt::Gui AND TARGET Qt::Network AND QT_FEATURE_pdf)
add_subdirectory(painting)
endif()
if(TARGET Qt::Network AND TARGET Qt::Widgets)
diff --git a/tests/baseline/painting/CMakeLists.txt b/tests/baseline/painting/CMakeLists.txt
index b32d8f1324..72e737d227 100644
--- a/tests/baseline/painting/CMakeLists.txt
+++ b/tests/baseline/painting/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_baseline_painting Test:
#####################################################################
@@ -14,9 +17,11 @@ qt_internal_add_test(tst_baseline_painting
../shared/qbaselinetest.cpp ../shared/qbaselinetest.h
../shared/paintcommands.cpp ../shared/paintcommands.h
tst_baseline_painting.cpp
+ NO_PCH_SOURCES
+ tst_baseline_painting.cpp # undef QT_NO_FOREACH
INCLUDE_DIRECTORIES
../shared
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Network
@@ -68,6 +73,6 @@ qt_internal_add_resource(tst_baseline_painting "images"
#####################################################################
qt_internal_extend_target(tst_baseline_painting CONDITION QT_FEATURE_opengl
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::OpenGL
)
diff --git a/tests/baseline/painting/scripts/aliasing.qps b/tests/baseline/painting/scripts/aliasing.qps
index 59878f9c4d..1fb0113396 100644
--- a/tests/baseline/painting/scripts/aliasing.qps
+++ b/tests/baseline/painting/scripts/aliasing.qps
@@ -19,6 +19,17 @@ begin_block drawing
setPen black
drawText 0 68 "QwErTy@"
+ setPen green 1 SolidLine
+ drawLine 0 75 10 75
+ setPen 800000ff 1
+ drawPoint 0 75
+ drawPoint 10 75
+
+ setPen green 2 SolidLine
+ drawLine 20 75 30 75
+ setPen 800000ff 2
+ drawPoint 20 75
+ drawPoint 30 75
setPen black 1
setBrush 7f7fff
@@ -153,4 +164,4 @@ drawText 15 185 "1.0"
resetMatrix
drawText 430 95 "Aliased"
-drawText 430 275 "Anti-Aliased" \ No newline at end of file
+drawText 430 275 "Anti-Aliased"
diff --git a/tests/baseline/painting/scripts/cliprects.qps b/tests/baseline/painting/scripts/cliprects.qps
index aa0367eccf..cbc2a90055 100644
--- a/tests/baseline/painting/scripts/cliprects.qps
+++ b/tests/baseline/painting/scripts/cliprects.qps
@@ -1,7 +1,7 @@
# Version: 1
# CheckVsReference: 5%
-
+save
translate 10 10
setPen NoPen
@@ -56,4 +56,297 @@ setRenderHint Antialiasing
setRenderHint SmoothPixmapTransform
repeat_block clipping
+restore
+
+# Excercise combining different clips
+
+translate 0 250
+scale 0.9 0.9
+setFont "times" 10 bold
+region_addRect dummyRegion 1000 1000 10 10
+region_addRect realRegion 20 10 60 30
+path_addRect dummyPath 1000 1000 10 10
+path_addRect realPath 20 10 60 30
+begin_block paintstuff
+fillRect 0 0 100 50 orange
+drawText 0 5 "Should be clipped"
+drawText 0 15 "Should be clipped"
+drawText 0 25 "Should be clipped"
+drawText 0 35 "Should be clipped"
+drawText 0 45 "Should be clipped"
+drawText 0 55 "Should be clipped"
+end_block
+
+translate 0 100
+
+# rect replaced by x
+save
+setClipRect 1000 1000 10 10 ReplaceClip
+setClipRect 20 10 60 30 ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRect 1000 1000 10 10 ReplaceClip
+setClipRectF 20 10 60 30 ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRect 1000 1000 10 10 ReplaceClip
+setClipRegion realRegion ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRect 1000 1000 10 10 ReplaceClip
+setClipPath realPath ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+# rectF replaced by x
+save
+setClipRectF 1000 1000 10 10 ReplaceClip
+setClipRect 20 10 60 30 ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRectF 1000 1000 10 10 ReplaceClip
+setClipRectF 20 10 60 30 ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRectF 1000 1000 10 10 ReplaceClip
+setClipRegion realRegion ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRectF 1000 1000 10 10 ReplaceClip
+setClipPath realPath ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+translate -800 100
+
+# region replaced by x
+save
+setClipRegion dummyRegion ReplaceClip
+setClipRect 20 10 60 30 ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRegion dummyRegion ReplaceClip
+setClipRectF 20 10 60 30 ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRegion dummyRegion ReplaceClip
+setClipRegion realRegion ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRegion dummyRegion ReplaceClip
+setClipPath realPath ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+# path replaced by x
+save
+setClipPath dummyPath ReplaceClip
+setClipRect 20 10 60 30 ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipPath dummyPath ReplaceClip
+setClipRectF 20 10 60 30 ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipPath dummyPath ReplaceClip
+setClipRegion realRegion ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+save
+setClipPath dummyPath ReplaceClip
+setClipPath realPath ReplaceClip
+repeat_block paintstuff
+restore
+translate 100 0
+
+region_addRect intregion 0 10 60 30
+path_addRect intpath 0 10 60 30
+
+translate -800 100
+# rect & x
+save
+setClipRect 0 10 60 30 ReplaceClip
+translate 40 0
+setClipRect 0 10 60 30 IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRect 0 10 60 30 ReplaceClip
+translate 40 0
+setClipRectF 0 10 60 30 IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRect 0 10 60 30 ReplaceClip
+translate 40 0
+setClipRegion intregion IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRect 0 10 60 30 ReplaceClip
+translate 40 0
+setClipPath intpath IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+# rectF & x
+save
+setClipRectF 0 10 60 30 ReplaceClip
+translate 40 0
+setClipRect 0 10 60 30 IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRectF 0 10 60 30 ReplaceClip
+translate 40 0
+setClipRectF 0 10 60 30 IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRectF 0 10 60 30 ReplaceClip
+translate 40 0
+setClipRegion intregion IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRectF 0 10 60 30 ReplaceClip
+translate 40 0
+setClipPath intpath IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+translate -800 100
+
+# region & x
+save
+setClipRegion intregion ReplaceClip
+translate 40 0
+setClipRect 0 10 60 30 IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRegion intregion ReplaceClip
+translate 40 0
+setClipRectF 0 10 60 30 IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRegion intregion ReplaceClip
+translate 40 0
+setClipRegion intregion IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipRegion intregion ReplaceClip
+translate 40 0
+setClipPath intpath IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+# path & x
+save
+setClipPath intpath ReplaceClip
+translate 40 0
+setClipRect 0 10 60 30 IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipPath intpath ReplaceClip
+translate 40 0
+setClipRectF 0 10 60 30 IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipPath intpath ReplaceClip
+translate 40 0
+setClipRegion intregion IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
+
+save
+setClipPath intpath ReplaceClip
+translate 40 0
+setClipPath intpath IntersectClip
+translate -40 0
+repeat_block paintstuff
+restore
+translate 100 0
diff --git a/tests/baseline/painting/scripts/pattern_xform.qps b/tests/baseline/painting/scripts/pattern_xform.qps
new file mode 100644
index 0000000000..224969f1c7
--- /dev/null
+++ b/tests/baseline/painting/scripts/pattern_xform.qps
@@ -0,0 +1,79 @@
+# Version: 1
+# CheckVsReference: 5%
+
+#define basic block off screen
+save
+translate -1000 -1000
+begin_block drawrects
+setBrush green Dense4Pattern
+drawRect 0 0 40 40
+setBrush green DiagCrossPattern
+drawRect 40 0 40 40
+setBrush green HorPattern
+brushRotate 30
+drawRect 80 0 40 40
+fillRect 120 0 40 40
+save
+setPen brush 40 SolidLine FlatCap
+setBrush NoBrush
+drawLine 160 20 200 20
+restore
+end_block
+restore
+
+begin_block hintsuite
+save
+setRenderHint NonCosmeticBrushPatterns false
+setRenderHint SmoothPixmapTransform false
+translate 10 10
+repeat_block drawrects
+
+setRenderHint NonCosmeticBrushPatterns false
+setRenderHint SmoothPixmapTransform true
+translate 0 50
+repeat_block drawrects
+
+setRenderHint NonCosmeticBrushPatterns true
+setRenderHint SmoothPixmapTransform false
+translate 0 50
+repeat_block drawrects
+
+setRenderHint NonCosmeticBrushPatterns true
+setRenderHint SmoothPixmapTransform true
+translate 0 50
+repeat_block drawrects
+restore
+end_block
+
+save
+translate 0 200
+scale 2 2
+repeat_block hintsuite
+restore
+
+save
+translate 500 0
+scale 1.5 2.5
+rotate_y 60
+repeat_block hintsuite
+restore
+
+
+translate 0 650
+setBrush blue CrossPattern
+setPen red
+setRenderHint NonCosmeticBrushPatterns false
+
+begin_block dots
+save
+drawRect 0 0 50 50
+setBrushOrigin 12 0
+drawRect 50 0 50 50
+scale 2 1
+drawRect 50 0 50 50
+restore
+end_block dots
+
+setRenderHint NonCosmeticBrushPatterns true
+translate 0 60
+repeat_block dots
diff --git a/tests/baseline/painting/scripts/pattern_xform2.qps b/tests/baseline/painting/scripts/pattern_xform2.qps
new file mode 100644
index 0000000000..4f9314272d
--- /dev/null
+++ b/tests/baseline/painting/scripts/pattern_xform2.qps
@@ -0,0 +1,81 @@
+# Version: 1
+# CheckVsReference: 5%
+
+# 1: Check brush origin vs (non)cosmetic brush patterns
+
+setBrush blue CrossPattern
+begin_block blockName
+save
+setBrushOrigin 0 0
+fillRect 0 0 32 32
+translate 0 32
+setBrushOrigin 1 0
+fillRect 0 0 32 32
+translate 0 32
+setBrushOrigin 2 0
+fillRect 0 0 32 32
+translate 0 32
+setBrushOrigin 3 0
+fillRect 0 0 32 32
+translate 0 32
+setBrushOrigin 4 0
+fillRect 0 0 32 32
+translate 0 32
+setBrushOrigin 5 0
+fillRect 0 0 32 32
+translate 0 32
+setBrushOrigin 6 0
+fillRect 0 0 32 32
+translate 0 32
+setBrushOrigin 7 0
+fillRect 0 0 32 32
+translate 0 32
+setBrushOrigin 8 0
+fillRect 0 0 32 32
+restore
+end_block blockName
+
+save
+setBrush red CrossPattern
+scale 2 1
+repeat_block blockName
+restore
+
+save
+translate 0 300
+setRenderHint NonCosmeticBrushPatterns true
+setBrush blue CrossPattern
+repeat_block blockName
+setBrush red CrossPattern
+scale 2 1
+repeat_block blockName
+restore
+
+# 2: Check brush update after only xform or hint change
+translate 100 0
+
+save
+setPen NoPen
+setBrush blue DiagCrossPattern
+setRenderHint NonCosmeticBrushPatterns true
+drawRect 10 10 200 100
+scale 10 10
+drawRect 22 1 20 10
+drawRect 22 12 20 10
+setRenderHint NonCosmeticBrushPatterns false
+drawRect 1 12 20 10
+restore
+
+setBrush green DiagCrossPattern
+setPen brush 100 SolidLine FlatCap
+pen_setCosmetic true
+setBrush NoBrush
+translate 0 250
+setRenderHint NonCosmeticBrushPatterns true
+drawLine 10 60 210 60
+scale 10 10
+drawLine 22 6 42 6
+drawLine 22 17 42 17
+setRenderHint NonCosmeticBrushPatterns false
+drawLine 1 17 21 17
+
diff --git a/tests/baseline/painting/scripts/pixmapfragments.qps b/tests/baseline/painting/scripts/pixmapfragments.qps
new file mode 100644
index 0000000000..4c837b760f
--- /dev/null
+++ b/tests/baseline/painting/scripts/pixmapfragments.qps
@@ -0,0 +1,65 @@
+# Version: 1
+# CheckVsReference: 1% (0 0 690 580)
+
+
+setRenderHint Antialiasing
+
+setPen #00ff00
+
+pixmap_load dome_argb32.png the_pixmap
+begin_block draw_stuff
+save
+ drawPixmapFragments the_pixmap 1 50 50 25 25 60 60 1 1 0 1
+ drawPixmapFragments the_pixmap 1 150 50 25 25 60 60 1 1 0 0.5
+ drawPixmapFragments the_pixmap 1 250 50 25 25 60 60 1 1 30 1
+ drawPixmapFragments the_pixmap 1 350 50 25 25 60 60 1.5 1 0 1
+ drawPixmapFragments the_pixmap 1 450 50 25 25 60 60 1 1.5 0 1
+ drawPixmapFragments the_pixmap 2 550 50 25 25 40 40 0.5 0.5 -45 1 600 50 25 25 40 40 0.7 0.7 45 1
+restore
+end_block
+
+
+translate 0 120
+pixmap_load dome_rgb32.png the_pixmap
+repeat_block draw_stuff
+
+translate 0 120
+pixmap_load dome_indexed.png the_pixmap
+repeat_block draw_stuff
+
+translate 0 120
+pixmap_load dome_indexed_mask.png the_pixmap
+repeat_block draw_stuff
+
+translate 0 120
+pixmap_load dome_mono.png the_pixmap
+repeat_block draw_stuff
+
+
+resetMatrix
+translate 700 60
+setPen black
+drawText 0 0 "32 bit w/alpha"
+translate 0 120
+drawText 0 0 "32 bit w/o alpha"
+translate 0 120
+drawText 0 0 "8 bit indexed"
+translate 0 120
+drawText 0 0 "8 bit indexed w/mask"
+translate 0 120
+drawText 0 0 "1 bit"
+
+resetMatrix
+translate 25 600
+drawText 0 0 "simple"
+translate 100 0
+drawText 0 0 "opacity"
+translate 100 0
+drawText 0 0 "rotation"
+translate 100 0
+drawText 0 0 "scale x"
+translate 100 0
+drawText 0 0 "scale y"
+translate 100 0
+drawText 0 0 "two fragments"
+translate 100 0
diff --git a/tests/baseline/painting/scripts/text.qps b/tests/baseline/painting/scripts/text.qps
index 4d81b3084c..6bacdfd5e6 100644
--- a/tests/baseline/painting/scripts/text.qps
+++ b/tests/baseline/painting/scripts/text.qps
@@ -165,7 +165,7 @@ translate 0 75
save
setPen black
setFont "sansserif" 16 normal
- drawText 0 40 "e😃m😇oðŸ˜j😜i😸!"
+ drawText 0 40 "e😃m😇oðŸ˜j😜i😸!✈ï¸"
restore
translate 0 75
diff --git a/tests/baseline/painting/tst_baseline_painting.cpp b/tests/baseline/painting/tst_baseline_painting.cpp
index a5d787f6ce..f486b33430 100644
--- a/tests/baseline/painting/tst_baseline_painting.cpp
+++ b/tests/baseline/painting/tst_baseline_painting.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "paintcommands.h"
#include <qbaselinetest.h>
@@ -66,7 +43,8 @@ private:
};
void setupTestSuite(const QStringList& blacklist = QStringList());
- void runTestSuite(GraphicsEngine engine, QImage::Format format, const QSurfaceFormat &contextFormat = QSurfaceFormat());
+ void runTestSuite(GraphicsEngine engine, QImage::Format format,
+ const QSurfaceFormat &contextFormat = QSurfaceFormat::defaultFormat());
void paint(QPaintDevice *device, GraphicsEngine engine, QImage::Format format, const QStringList &script, const QString &filePath);
QStringList qpsFiles;
@@ -76,7 +54,7 @@ private:
private slots:
void initTestCase();
- void cleanupTestCase() {}
+ void init();
void testRasterARGB32PM_data();
void testRasterARGB32PM();
@@ -112,6 +90,7 @@ private slots:
void testCoreOpenGL_data();
void testCoreOpenGL();
private:
+ void initOpenGL();
bool checkSystemGLSupport();
bool checkSystemCoreGLSupport();
#endif
@@ -143,13 +122,22 @@ void tst_Lancelot::initTestCase()
std::sort(qpsFiles.begin(), qpsFiles.end());
foreach (const QString& fileName, qpsFiles) {
QFile file(scriptsDir + fileName);
- file.open(QFile::ReadOnly);
+ QVERIFY(file.open(QFile::ReadOnly));
QByteArray cont = file.readAll();
scripts.insert(fileName, QString::fromUtf8(cont).split(QLatin1Char('\n'), Qt::SkipEmptyParts));
scriptChecksums.insert(fileName, qChecksum(cont));
}
+
+#ifndef QT_NO_OPENGL
+ initOpenGL();
+#endif
}
+void tst_Lancelot::init()
+{
+ // This gets called for every row. QSKIP if current item is blacklisted on the baseline server:
+ QBASELINE_SKIP_IF_BLACKLISTED;
+}
void tst_Lancelot::testRasterARGB32PM_data()
{
@@ -292,6 +280,14 @@ void tst_Lancelot::testPdf()
#ifndef QT_NO_OPENGL
+void tst_Lancelot::initOpenGL()
+{
+ // Stencil buffer is needed for clipping
+ QSurfaceFormat glFormat;
+ glFormat.setStencilBufferSize(8);
+ QSurfaceFormat::setDefaultFormat(glFormat);
+}
+
bool tst_Lancelot::checkSystemGLSupport()
{
QWindow win;
@@ -315,7 +311,7 @@ bool tst_Lancelot::checkSystemCoreGLSupport()
if (QOpenGLContext::openGLModuleType() != QOpenGLContext::LibGL)
return false;
- QSurfaceFormat coreFormat;
+ QSurfaceFormat coreFormat(QSurfaceFormat::defaultFormat());
coreFormat.setVersion(3, 2);
coreFormat.setProfile(QSurfaceFormat::CoreProfile);
QWindow win;
@@ -370,7 +366,7 @@ void tst_Lancelot::testCoreOpenGL_data()
void tst_Lancelot::testCoreOpenGL()
{
- QSurfaceFormat coreFormat;
+ QSurfaceFormat coreFormat(QSurfaceFormat::defaultFormat());
coreFormat.setVersion(3, 2);
coreFormat.setProfile(QSurfaceFormat::CoreProfile);
runTestSuite(OpenGL, QImage::Format_RGB32, coreFormat);
@@ -427,19 +423,22 @@ void tst_Lancelot::runTestSuite(GraphicsEngine engine, QImage::Format format, co
QString tempStem(QDir::tempPath() + QLatin1String("/lancelot_XXXXXX_") + qpsFile.chopped(4));
QTemporaryFile pdfFile(tempStem + QLatin1String(".pdf"));
- pdfFile.open();
+ QVERIFY(pdfFile.open());
QPdfWriter writer(&pdfFile);
writer.setPdfVersion(QPdfWriter::PdfVersion_1_6);
- writer.setResolution(150);
+ QPageSize pageSize(QSize(800, 800), QStringLiteral("LancePage"), QPageSize::ExactMatch);
+ writer.setPageSize(pageSize);
+ writer.setPageMargins(QMarginsF());
+ writer.setResolution(72);
paint(&writer, engine, format, script, QFileInfo(filePath).absoluteFilePath());
pdfFile.close();
// Convert pdf to something we can read into a QImage, using macOS' sips utility
QTemporaryFile pngFile(tempStem + QLatin1String(".png"));
- pngFile.open(); // Just create the file name
+ QVERIFY(pngFile.open()); // Just create the file name
pngFile.close();
QProcess proc;
- const char *rawArgs = "-s format png --cropOffset 20 20 -c 800 800 -o";
+ const char *rawArgs = "-s format png -o";
QStringList argList = QString::fromLatin1(rawArgs).split(QLatin1Char(' '));
proc.start(QLatin1String("sips"), argList << pngFile.fileName() << pdfFile.fileName());
proc.waitForFinished(2 * 60 * 1000); // May need some time
@@ -480,7 +479,8 @@ QTEST_MAIN(tst_Lancelot)
int main(int argc, char *argv[])
{
- qSetGlobalQHashSeed(0); // Avoid rendering variations caused by QHash randomization
+ // Avoid rendering variations caused by QHash randomization
+ QHashSeed::setDeterministicGlobalSeed();
QBaselineTest::handleCmdLineArgs(&argc, &argv);
return _realmain(argc, argv);
diff --git a/tests/baseline/shared/baselineprotocol.cpp b/tests/baseline/shared/baselineprotocol.cpp
index ab6ced204a..6a38e71831 100644
--- a/tests/baseline/shared/baselineprotocol.cpp
+++ b/tests/baseline/shared/baselineprotocol.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "baselineprotocol.h"
#include <QLibraryInfo>
#include <QImage>
@@ -70,24 +45,26 @@ PlatformInfo PlatformInfo::localHostInfo()
#endif
pi.insert(PI_OSVersion, QSysInfo::kernelVersion());
+ QString gc = qEnvironmentVariable("BASELINE_GIT_COMMIT");
#if QT_CONFIG(process)
- QProcess git;
- QString cmd;
- QStringList args;
-#if defined(Q_OS_WIN)
- cmd = QLS("cmd.exe");
- args << QLS("/c") << QLS("git");
-#else
- cmd = QLS("git");
-#endif
- args << QLS("log") << QLS("--max-count=1") << QLS("--pretty=%H [%an] [%ad] %s");
- git.start(cmd, args);
- git.waitForFinished(3000);
- if (!git.exitCode())
- pi.insert(PI_GitCommit, QString::fromLocal8Bit(git.readAllStandardOutput().constData()).simplified());
- else
- pi.insert(PI_GitCommit, QLS("Unknown"));
+ if (gc.isEmpty()) {
+ QProcess git;
+ QString cmd;
+ QStringList args;
+ #if defined(Q_OS_WIN)
+ cmd = QLS("cmd.exe");
+ args << QLS("/c") << QLS("git");
+ #else
+ cmd = QLS("git");
+ #endif
+ args << QLS("log") << QLS("--max-count=1") << QLS("--pretty=%H [%an] [%ad] %s");
+ git.start(cmd, args);
+ git.waitForFinished(3000);
+ if (!git.exitCode())
+ gc = QString::fromLocal8Bit(git.readAllStandardOutput().constData()).simplified();
+ }
#endif // QT_CONFIG(process)
+ pi.insert(PI_GitCommit, gc.isEmpty() ? QLS("Unknown") : gc);
if (qEnvironmentVariableIsSet("JENKINS_HOME"))
pi.setAdHocRun(false);
@@ -293,7 +270,7 @@ bool BaselineProtocol::connect(const QString &testCase, bool *dryrun, const Plat
socket.connectToHost(serverName, ServerPort);
if (!socket.waitForConnected(Timeout)) {
- QThread::msleep(3000); // Wait a bit and try again, the server might just be restarting
+ QThread::sleep(std::chrono::seconds{3}); // Wait a bit and try again, the server might just be restarting
if (!socket.waitForConnected(Timeout)) {
errMsg += QLS("TCP connectToHost failed. Host:") + QLS(serverName) + QLS(" port:") + QString::number(ServerPort);
return false;
diff --git a/tests/baseline/shared/baselineprotocol.h b/tests/baseline/shared/baselineprotocol.h
index a5cc6ba661..598a0cd3af 100644
--- a/tests/baseline/shared/baselineprotocol.h
+++ b/tests/baseline/shared/baselineprotocol.h
@@ -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
#ifndef BASELINEPROTOCOL_H
#define BASELINEPROTOCOL_H
diff --git a/tests/baseline/shared/lookup3.cpp b/tests/baseline/shared/lookup3.cpp
index 1fbe6b499e..7964a184ae 100644
--- a/tests/baseline/shared/lookup3.cpp
+++ b/tests/baseline/shared/lookup3.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
/*
@@ -328,7 +303,7 @@ quint32 hashlittle( const void *key, size_t length, quint32 initval)
* rest of the string. Every machine with memory protection I've seen
* does it on word boundaries, so is OK with this. But VALGRIND will
* still catch it and complain. The masking trick does make the hash
- * noticably faster for short strings (like English words).
+ * noticeably faster for short strings (like English words).
*/
#ifndef VALGRIND
@@ -536,7 +511,7 @@ void hashlittle2(
* rest of the string. Every machine with memory protection I've seen
* does it on word boundaries, so is OK with this. But VALGRIND will
* still catch it and complain. The masking trick does make the hash
- * noticably faster for short strings (like English words).
+ * noticeably faster for short strings (like English words).
*/
#ifndef VALGRIND
@@ -736,7 +711,7 @@ quint32 hashbig( const void *key, size_t length, quint32 initval)
* rest of the string. Every machine with memory protection I've seen
* does it on word boundaries, so is OK with this. But VALGRIND will
* still catch it and complain. The masking trick does make the hash
- * noticably faster for short strings (like English words).
+ * noticeably faster for short strings (like English words).
*/
#ifndef VALGRIND
diff --git a/tests/baseline/shared/paintcommands.cpp b/tests/baseline/shared/paintcommands.cpp
index d2e48688f9..20201b66b0 100644
--- a/tests/baseline/shared/paintcommands.cpp
+++ b/tests/baseline/shared/paintcommands.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 "paintcommands.h"
#include <qdir.h>
@@ -198,6 +173,13 @@ const char *PaintCommands::imageFormatTable[] = {
"RGBx32FPx4",
"RGBA32FPx4",
"RGBA32FPx4_Premultiplied",
+ "CMYK32",
+};
+
+const char *PaintCommands::renderHintTable[] = {
+ "Antialiasing",
+ "SmoothPixmapTransform",
+ "NonCosmeticBrushPatterns"
};
int PaintCommands::translateEnum(const char *table[], const QString &pattern, int limit)
@@ -338,7 +320,7 @@ void PaintCommands::staticInit()
"pen_setCosmetic true");
DECL_PAINTCOMMAND("setRenderHint", command_setRenderHint,
"^setRenderHint\\s+([\\w_0-9]*)\\s*(\\w*)$",
- "setRenderHint <Antialiasing|SmoothPixmapTransform> <true|false>",
+ "setRenderHint <hint> <true|false>",
"setRenderHint Antialiasing true");
DECL_PAINTCOMMAND("clearRenderHint", command_clearRenderHint,
"^clearRenderHint$",
@@ -488,6 +470,20 @@ void PaintCommands::staticInit()
"^fillRectF\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s*(\\w*)?$",
"fillRectF <x> <y> <w> <h> [color]\n - Uses current brush if no color given",
"fillRectF 10.5 10.5 20.2 20.2 blue");
+ DECL_PAINTCOMMAND("drawPixmapFragments", command_drawPixmapFragments,
+ "^drawPixmapFragments\\s+([\\w.:\\/]*)"
+ "\\s+(-?\\w*)"
+ "\\s+(-?[.\\w]*)\\s*(-?[.\\w]*)"
+ "\\s+(-?[.\\w]*)\\s*(-?[.\\w]*)\\s*(-?[.\\w]*)\\s*(-?[.\\w]*)"
+ "\\s+(-?[.\\w]*)\\s*(-?[.\\w]*)\\s*(-?[.\\w]*)\\s*(-?[.\\w]*)"
+ "\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)?"
+ "\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)?"
+ "\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)\\s*(-?[.\\w]*)?\\s*(-?[.\\w]*)?$",
+ "drawPixmapFragments <image filename> <count>"
+ " <centerx0> <centery0> <x0> <y0> <w0> <h0> <sx0> <sy0> <r0> <o0>"
+ " <centerx1> <centery1> <x1> <y1> <w1> ..."
+ "\n - where count is 1 or 2, and followed by centerPos, sourceRect, scaleX, scaleY, rotation, opacity <count> times",
+ "drawPixmapFragments :/images/sign.png 1 50 50 10 10 60 60 10 10 30 1");
DECL_PAINTCOMMANDSECTION("painterPaths");
DECL_PAINTCOMMAND("path_moveTo", command_path_moveTo,
@@ -564,8 +560,12 @@ void PaintCommands::staticInit()
"setClipPath mypath ReplaceClip");
DECL_PAINTCOMMAND("setClipRect", command_setClipRect,
"^setClipRect\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s+(-?\\w*)\\s*(\\w*)$",
- "setClipRect <x1> <y1> <x2> <y2> <clip operation enum>",
- "setClipRect 0.0 0.0 10.0 10.0 ReplaceClip");
+ "setClipRect <x> <y> <w> <h> <clip operation enum>",
+ "setClipRect 0 0 10 10 ReplaceClip");
+ DECL_PAINTCOMMAND("setClipRectF", command_setClipRectF,
+ "^setClipRectF\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s+(-?[.\\w]*)\\s*(\\w.*)$",
+ "setClipRectF <x> <y> <w> <h> <clip operation enum>",
+ "setClipRectF 0.1 0.2 10.3 10.4 ReplaceClip");
DECL_PAINTCOMMAND("setClipping", command_setClipping,
"^setClipping\\s+(\\w*)$",
"setClipping <true|false>",
@@ -686,6 +686,7 @@ void PaintCommands::staticInit()
ADD_ENUMLIST("image formats", imageFormatTable);
ADD_ENUMLIST("coordinate modes", coordinateMethodTable);
ADD_ENUMLIST("size modes", sizeModeTable);
+ ADD_ENUMLIST("render hints", renderHintTable);
}
#undef DECL_PAINTCOMMAND
@@ -745,8 +746,8 @@ void PaintCommands::runCommand(const QString &scriptLine)
return;
}
QString firstWord = scriptLine.section(separators, 0, 0);
- QList<int> indices = s_commandHash.values(firstWord);
- foreach(int idx, indices) {
+ const QList<int> indices = s_commandHash.values(firstWord);
+ for (int idx : indices) {
PaintCommandInfos command = s_commandInfoTable.at(idx);
Q_ASSERT(command.regExp.isValid());
QRegularExpressionMatch match = command.regExp.match(scriptLine);
@@ -921,7 +922,7 @@ void PaintCommands::command_import(QRegularExpressionMatch re)
if (m_verboseMode) {
printf(" -(lance) Command buffer now looks like:\n");
- for (int i = 0; i < m_commands.count(); ++i)
+ for (int i = 0; i < m_commands.size(); ++i)
printf(" ---> {%s}\n", qPrintable(m_commands.at(i)));
}
delete file;
@@ -939,7 +940,7 @@ void PaintCommands::command_begin_block(QRegularExpressionMatch re)
m_commands[m_currentCommandIndex] = QLatin1String("# begin block (") + blockName + QLatin1Char(')');
QStringList newBlock;
int i = m_currentCommandIndex + 1;
- for (; i < m_commands.count(); ++i) {
+ for (; i < m_commands.size(); ++i) {
const QString &nextCmd = m_commands.at(i);
if (nextCmd.startsWith("end_block")) {
m_commands[i] = QLatin1String("# end block (") + blockName + QLatin1Char(')');
@@ -949,10 +950,10 @@ void PaintCommands::command_begin_block(QRegularExpressionMatch re)
}
if (m_verboseMode)
- for (int j = 0; j < newBlock.count(); ++j)
+ for (int j = 0; j < newBlock.size(); ++j)
printf(" %d: %s\n", j, qPrintable(newBlock.at(j)));
- if (i >= m_commands.count())
+ if (i >= m_commands.size())
printf(" - Warning! Block doesn't have an 'end_block' marker!\n");
m_blockMap.insert(blockName, newBlock);
@@ -1466,6 +1467,93 @@ void PaintCommands::command_fillRectF(QRegularExpressionMatch re)
}
}
+void PaintCommands::command_drawPixmapFragments(QRegularExpressionMatch re)
+{
+ QPixmap pm;
+ pm = m_pixmapMap[re.captured(1)]; // try cache first
+ if (pm.isNull())
+ pm = image_load<QPixmap>(re.captured(1));
+ if (pm.isNull()) {
+ QFileInfo fi(m_filepath);
+ QDir dir = fi.absoluteDir();
+ dir.cdUp();
+ dir.cd("images");
+ QString fileName = dir.absolutePath() + QLatin1Char('/') + re.captured(1);
+ pm = QPixmap(fileName);
+ if (pm.isNull() && !fileName.endsWith(".png")) {
+ fileName.append(".png");
+ pm = QPixmap(fileName);
+ }
+ }
+ if (pm.isNull()) {
+ fprintf(stderr, "ERROR(drawPixmapFragments): failed to load pixmap: '%s'\n",
+ qPrintable(re.captured(1)));
+ return;
+ }
+
+ int count = convertToInt(re.captured(2));
+
+ struct Fragment {
+ double posx;
+ double posy;
+ double srcx;
+ double srcy;
+ double srcw;
+ double srch;
+ double sx;
+ double sy;
+ double rotation;
+ double opacity;
+ };
+
+ QList<Fragment> fragments;
+ for (int i = 0; i < count; ++i) {
+ int captureIndexStart = 3 + i * 10;
+ if (re.hasCaptured(captureIndexStart)) {
+ Fragment f;
+ f.posx = convertToDouble(re.captured(captureIndexStart));
+ f.posy = convertToDouble(re.captured(captureIndexStart + 1));
+ f.srcx = convertToDouble(re.captured(captureIndexStart + 2));
+ f.srcy = convertToDouble(re.captured(captureIndexStart + 3));
+ f.srcw = convertToDouble(re.captured(captureIndexStart + 4));
+ f.srch = convertToDouble(re.captured(captureIndexStart + 5));
+ f.sx = convertToDouble(re.captured(captureIndexStart + 6));
+ f.sy = convertToDouble(re.captured(captureIndexStart + 7));
+ f.rotation = convertToDouble(re.captured(captureIndexStart + 8));
+ f.opacity = convertToDouble(re.captured(captureIndexStart + 9));
+ fragments.append(f);
+ } else {
+ break;
+ }
+ }
+
+ if (m_verboseMode) {
+ printf(" -(lance) drawPixmapFragments('%s' count=%d ",
+ qPrintable(re.captured(1)), int(fragments.count()));
+ for (int i = 0; i < fragments.count(); ++i) {
+ printf("pos=(%.2f, %.2f) srcrect=(%.2f %.2f %.2f %.2f) scale=(%.2f %.2f) rotation=%.2f opacity=%.2f ",
+ fragments[i].posx, fragments[i].posy,
+ fragments[i].srcx, fragments[i].srcy, fragments[i].srcw, fragments[i].srch,
+ fragments[i].sx, fragments[i].sy,
+ fragments[i].rotation,
+ fragments[i].opacity);
+ }
+ printf("\n");
+ }
+
+ QList<QPainter::PixmapFragment> pixmapFragments;
+ for (int i = 0; i < fragments.count(); ++i) {
+ pixmapFragments.append(
+ QPainter::PixmapFragment::create(QPointF(fragments[i].posx, fragments[i].posy),
+ QRectF(fragments[i].srcx, fragments[i].srcy, fragments[i].srcw, fragments[i].srch),
+ fragments[i].sx, fragments[i].sy,
+ fragments[i].rotation,
+ fragments[i].opacity));
+ }
+
+ m_painter->drawPixmapFragments(pixmapFragments.constData(), pixmapFragments.count(), pm);
+}
+
/***************************************************************************************************/
void PaintCommands::command_noop(QRegularExpressionMatch)
{
@@ -2082,6 +2170,25 @@ void PaintCommands::command_setClipRect(QRegularExpressionMatch re)
}
/***************************************************************************************************/
+void PaintCommands::command_setClipRectF(QRegularExpressionMatch re)
+{
+ QStringList caps = re.capturedTexts();
+ double x = convertToDouble(caps.at(1));
+ double y = convertToDouble(caps.at(2));
+ double w = convertToDouble(caps.at(3));
+ double h = convertToDouble(caps.at(4));
+
+ int combine = translateEnum(clipOperationTable, caps.at(5), Qt::IntersectClip + 1);
+ if (combine == -1)
+ combine = Qt::ReplaceClip;
+
+ if (m_verboseMode)
+ printf(" -(lance) setClipRectF(%f, %f, %f, %f), %s\n", x, y, w, h, clipOperationTable[combine]);
+
+ m_painter->setClipRect(QRectF(x, y, w, h), Qt::ClipOperation(combine));
+}
+
+/***************************************************************************************************/
void PaintCommands::command_setClipPath(QRegularExpressionMatch re)
{
int combine = translateEnum(clipOperationTable, re.captured(2), Qt::IntersectClip + 1);
@@ -2121,19 +2228,27 @@ void PaintCommands::command_setFont(QRegularExpressionMatch re)
{
QStringList caps = re.capturedTexts();
QString family = caps.at(1);
- int size = convertToInt(caps.at(2));
-
- int weight = translateEnum(fontWeightTable, re.captured(3).toLower(), 5);
- if (weight != -1) {
- switch (weight) {
- case 0: weight = QFont::Light; break;
- case 1: weight = QFont::Normal; break;
- case 2: weight = QFont::DemiBold; break;
- case 3: weight = QFont::Bold; break;
- case 4: weight = QFont::Black; break;
- }
- } else {
- weight = convertToInt(re.captured(3));
+
+ int size = -1; // Default
+ QString sizeArg = caps.at(2);
+ if (!sizeArg.isEmpty())
+ size = convertToInt(caps.at(2));
+
+ int weight = -1; // Default
+ QString weightArg = caps.at(3);
+ if (!weightArg.isEmpty()) {
+ weight = translateEnum(fontWeightTable, weightArg.toLower(), 5);
+ if (weight != -1) {
+ switch (weight) {
+ case 0: weight = QFont::Light; break;
+ case 1: weight = QFont::Normal; break;
+ case 2: weight = QFont::DemiBold; break;
+ case 3: weight = QFont::Bold; break;
+ case 4: weight = QFont::Black; break;
+ }
+ } else {
+ weight = convertToInt(weightArg);
+ }
}
bool italic = caps.at(4).toLower() == "true" || caps.at(4).toLower() == "italic";
@@ -2234,18 +2349,27 @@ void PaintCommands::command_setPen2(QRegularExpressionMatch re)
void PaintCommands::command_setRenderHint(QRegularExpressionMatch re)
{
QString hintString = re.captured(1).toLower();
- bool on = re.captured(2).isEmpty() || re.captured(2).toLower() == "true";
- if (hintString.contains("antialiasing")) {
- if (m_verboseMode)
- printf(" -(lance) setRenderHint Antialiasing\n");
+ QString setting = re.captured(2).toLower();
- m_painter->setRenderHint(QPainter::Antialiasing, on);
+ bool on = setting.isEmpty() || setting == "true" || setting == "on";
+ QPainter::RenderHint hint;
+ int hintIdx = -1;
+ if (hintString.contains("antialiasing")) {
+ hintIdx = 0;
+ hint = QPainter::Antialiasing;
} else if (hintString.contains("smoothpixmaptransform")) {
+ hintIdx = 1;
+ hint = QPainter::SmoothPixmapTransform;
+ } else if (hintString.contains("noncosmeticbrushpatterns")) {
+ hintIdx = 2;
+ hint = QPainter::NonCosmeticBrushPatterns;
+ }
+ if (hintIdx >= 0) {
if (m_verboseMode)
- printf(" -(lance) setRenderHint SmoothPixmapTransform\n");
- m_painter->setRenderHint(QPainter::SmoothPixmapTransform, on);
+ printf(" -(lance) setRenderHint %s %s\n", renderHintTable[hintIdx], on ? "true" : "false");
+ m_painter->setRenderHint(hint, on);
} else {
- fprintf(stderr, "ERROR(setRenderHint): unknown hint '%s'\n", qPrintable(hintString));
+ fprintf(stderr, "ERROR(setRenderHint): unknown hint '%s'\n", qPrintable(re.captured(1)));
}
}
@@ -2254,6 +2378,7 @@ void PaintCommands::command_clearRenderHint(QRegularExpressionMatch /*re*/)
{
m_painter->setRenderHint(QPainter::Antialiasing, false);
m_painter->setRenderHint(QPainter::SmoothPixmapTransform, false);
+ m_painter->setRenderHint(QPainter::NonCosmeticBrushPatterns, false);
if (m_verboseMode)
printf(" -(lance) clearRenderHint\n");
}
diff --git a/tests/baseline/shared/paintcommands.h b/tests/baseline/shared/paintcommands.h
index 15c6d3fa58..45f78f9af6 100644
--- a/tests/baseline/shared/paintcommands.h
+++ b/tests/baseline/shared/paintcommands.h
@@ -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
#ifndef PAINTCOMMANDS_H
#define PAINTCOMMANDS_H
@@ -68,15 +43,13 @@ class PaintCommands
{
public:
// construction / initialization
- PaintCommands(const QStringList &cmds, int w, int h, QImage::Format format)
+ PaintCommands(const QStringList &cmds, int /*w*/, int /*h*/, QImage::Format format)
: m_painter(0)
, m_surface_painter(0)
, m_format(format)
, m_commands(cmds)
, m_gradientSpread(QGradient::PadSpread)
, m_gradientCoordinate(QGradient::LogicalMode)
- , m_width(w)
- , m_height(h)
, m_verboseMode(false)
, m_type(WidgetType)
, m_checkers_background(true)
@@ -87,7 +60,9 @@ public:
, m_surface_glbuffer(0)
, m_surface_glpaintdevice(0)
#endif
- { staticInit(); }
+ {
+ staticInit();
+ }
public:
void setCheckersBackground(bool b) { staticInit(); m_checkers_background = b; }
@@ -162,7 +137,7 @@ private:
void command_brushShear(QRegularExpressionMatch re);
void command_setClipPath(QRegularExpressionMatch re);
void command_setClipRect(QRegularExpressionMatch re);
- void command_setClipRectangle(QRegularExpressionMatch re);
+ void command_setClipRectF(QRegularExpressionMatch re);
void command_setClipRegion(QRegularExpressionMatch re);
void command_setClipping(QRegularExpressionMatch re);
void command_setCompositionMode(QRegularExpressionMatch re);
@@ -208,6 +183,7 @@ private:
void command_drawTiledPixmap(QRegularExpressionMatch re);
void command_fillRect(QRegularExpressionMatch re);
void command_fillRectF(QRegularExpressionMatch re);
+ void command_drawPixmapFragments(QRegularExpressionMatch re);
// paths
void command_path_addEllipse(QRegularExpressionMatch re);
@@ -276,8 +252,6 @@ private:
QGradient::Spread m_gradientSpread;
QGradient::CoordinateMode m_gradientCoordinate;
bool m_abort;
- int m_width;
- int m_height;
bool m_verboseMode;
DeviceType m_type;
@@ -305,6 +279,7 @@ private:
static const char *compositionModeTable[];
static const char *imageFormatTable[];
static const char *sizeModeTable[];
+ static const char *renderHintTable[];
static int translateEnum(const char *table[], const QString &pattern, int limit);
// utility
diff --git a/tests/baseline/shared/qbaselinetest.cpp b/tests/baseline/shared/qbaselinetest.cpp
index 493be4bd7a..e41b8d5321 100644
--- a/tests/baseline/shared/qbaselinetest.cpp
+++ b/tests/baseline/shared/qbaselinetest.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 "qbaselinetest.h"
#include "baselineprotocol.h"
@@ -51,9 +26,6 @@ static QByteArray curFunction;
static ImageItemList itemList;
static bool gotBaselines;
-static QString definedTestProject;
-static QString definedTestCase;
-
void handleCmdLineArgs(int *argcp, char ***argvp)
{
@@ -167,7 +139,7 @@ void fetchCustomClientProperties()
key = line.left(colonPos).simplified().replace(' ', '_');
val = line.mid(colonPos+1).trimmed();
}
- if (!key.isEmpty() && key.length() < 64 && val.length() < 256) // ###TBD: maximum 256 chars in value?
+ if (!key.isEmpty() && key.size() < 64 && val.size() < 256) // ###TBD: maximum 256 chars in value?
addClientProperty(key, val);
else
qDebug() << "Unparseable script output ignored:" << line;
@@ -200,10 +172,7 @@ bool connect(QByteArray *msg, bool *error)
if (!customAutoModeSet)
clientInfo.setAdHocRun(defaultInfo.isAdHocRun());
- if (!definedTestProject.isEmpty())
- clientInfo.insert(PI_Project, definedTestProject);
-
- QString testCase = definedTestCase;
+ QString testCase = clientInfo.value(PI_TestCase);
if (testCase.isEmpty() && QTest::testObject() && QTest::testObject()->metaObject()) {
//qDebug() << "Trying to Read TestCaseName from Testlib!";
testCase = QTest::testObject()->metaObject()->className();
@@ -233,16 +202,10 @@ bool disconnectFromBaselineServer()
return false;
}
-bool connectToBaselineServer(QByteArray *msg, const QString &testProject, const QString &testCase)
+bool connectToBaselineServer(QByteArray *msg)
{
bool dummy;
QByteArray dummyMsg;
-
- if (!testProject.isEmpty())
- definedTestProject = testProject;
- if (!testCase.isEmpty())
- definedTestCase = testCase;
-
return connect(msg ? msg : &dummyMsg, &dummy);
}
@@ -259,7 +222,7 @@ void setSimFail(bool fail)
void setProject(const QString &projectName)
{
- definedTestProject = projectName;
+ addClientProperty(PI_Project, projectName);
}
void setProjectImageKeys(const QStringList &keys)
@@ -286,6 +249,7 @@ void modifyImage(QImage *img)
bool compareItem(const ImageItem &baseline, const QImage &img, QByteArray *msg, bool *error)
{
+ *error = false;
ImageItem item = baseline;
if (simfail) {
// Simulate test failure by forcing image mismatch; for testing purposes
@@ -296,6 +260,7 @@ bool compareItem(const ImageItem &baseline, const QImage &img, QByteArray *msg,
} else {
item.image = img;
}
+ bool isNewItem = false;
item.imageChecksums.clear();
item.imageChecksums.prepend(ImageItem::computeChecksum(item.image));
QByteArray srvMsg;
@@ -307,9 +272,11 @@ bool compareItem(const ImageItem &baseline, const QImage &img, QByteArray *msg,
return true;
break;
case ImageItem::BaselineNotFound:
- if (!customInfo.overrides().isEmpty() || baselinePolicy == UploadNone) {
- qWarning() << "Cannot compare to baseline: No such baseline found on server.";
+ if (!customInfo.overrides().isEmpty())
return true;
+ if (baselinePolicy == UploadNone) {
+ isNewItem = true;
+ break;
}
if (proto.submitNewBaseline(item, &srvMsg))
qDebug() << msg->constData() << "Baseline not found on server. New baseline uploaded.";
@@ -322,7 +289,6 @@ bool compareItem(const ImageItem &baseline, const QImage &img, QByteArray *msg,
return true;
break;
}
- *error = false;
// The actual comparison of the given image with the baseline:
if (baseline.imageChecksums.contains(item.imageChecksums.at(0))) {
if (!proto.submitMatch(item, &srvMsg))
@@ -343,7 +309,11 @@ bool compareItem(const ImageItem &baseline, const QImage &img, QByteArray *msg,
qInfo() << "Baseline server reports:" << srvMsg;
return true; // The server decides: a fuzzy match means no mismatch
}
- *msg += "Mismatch. See report:\n " + srvMsg;
+ if (isNewItem)
+ *msg += "No baseline on server, so cannot compare.";
+ else
+ *msg += "Mismatch.";
+ *msg += " See report:\n " + srvMsg;
if (dryRunMode) {
qDebug() << "Dryrun, so ignoring" << *msg;
return true;
@@ -409,22 +379,21 @@ QTestData &newRow(const char *dataTag, quint16 checksum)
return QTest::newRow(dataTag);
}
-
-bool testImage(const QImage& img, QByteArray *msg, bool *error)
+const ImageItem *findCurrentItem(QByteArray *msg, bool *error)
{
if (!connected && !connect(msg, error))
- return true;
+ return nullptr;
if (QTest::currentTestFunction() != curFunction || itemList.isEmpty()) {
- qWarning() << "Usage error: QBASELINE_TEST used without corresponding QBaselineTest::newRow()";
- return true;
+ qWarning() << "Usage error: QBASELINE_ macro used without corresponding QBaselineTest::newRow()";
+ return nullptr;
}
if (!gotBaselines) {
if (!proto.requestBaselineChecksums(QString::fromLatin1(QTest::currentTestFunction()), &itemList) || itemList.isEmpty()) {
*msg = "Communication with baseline server failed: " + proto.errorMessage().toLatin1();
*error = true;
- return true;
+ return nullptr;
}
gotBaselines = true;
}
@@ -434,10 +403,24 @@ bool testImage(const QImage& img, QByteArray *msg, bool *error)
while (it != itemList.constEnd() && it->itemName != curTag)
++it;
if (it == itemList.constEnd()) {
- qWarning() << "Usage error: QBASELINE_TEST used without corresponding QBaselineTest::newRow() for row" << curTag;
- return true;
+ qWarning() << "Usage error: QBASELINE_ macro used without corresponding QBaselineTest::newRow() for row" << curTag;
+ return nullptr;
}
- return compareItem(*it, img, msg, error);
+ return &(*it);
+}
+
+bool testImage(const QImage &img, QByteArray *msg, bool *error)
+{
+ const ImageItem *item = findCurrentItem(msg, error);
+ return item ? compareItem(*item, img, msg, error) : true;
+}
+
+bool isCurrentItemBlacklisted()
+{
+ QByteArray msg;
+ bool error = false;
+ const ImageItem *item = findCurrentItem(&msg, &error);
+ return item ? (item->status == ImageItem::IgnoreItem) : false;
}
}
diff --git a/tests/baseline/shared/qbaselinetest.h b/tests/baseline/shared/qbaselinetest.h
index 68f2efe461..f120e2bcd8 100644
--- a/tests/baseline/shared/qbaselinetest.h
+++ b/tests/baseline/shared/qbaselinetest.h
@@ -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
#ifndef BASELINETEST_H
#define BASELINETEST_H
@@ -39,10 +14,11 @@ void handleCmdLineArgs(int *argcp, char ***argvp);
void setProject(const QString &projectName); // Selects server config settings and top level dir
void setProjectImageKeys(const QStringList &keys); // Overrides the ItemPathKeys config setting
void addClientProperty(const QString& key, const QString& value);
-bool connectToBaselineServer(QByteArray *msg = nullptr, const QString &testProject = QString(), const QString &testCase = QString());
+bool connectToBaselineServer(QByteArray *msg = nullptr);
bool checkImage(const QImage& img, const char *name, quint16 checksum, QByteArray *msg, bool *error, int manualdatatag = 0);
bool testImage(const QImage& img, QByteArray *msg, bool *error);
QTestData &newRow(const char *dataTag, quint16 checksum = 0);
+bool isCurrentItemBlacklisted();
bool disconnectFromBaselineServer();
bool shouldAbortIfUnstable();
}
@@ -84,4 +60,10 @@ do {\
}\
} while (0)
+#define QBASELINE_SKIP_IF_BLACKLISTED \
+do {\
+ if (QBaselineTest::isCurrentItemBlacklisted())\
+ QSKIP("Blacklisted on baseline server.");\
+} while (0)
+
#endif // BASELINETEST_H
diff --git a/tests/baseline/shared/qwidgetbaselinetest.cpp b/tests/baseline/shared/qwidgetbaselinetest.cpp
index e4b36ddb69..72a074e268 100644
--- a/tests/baseline/shared/qwidgetbaselinetest.cpp
+++ b/tests/baseline/shared/qwidgetbaselinetest.cpp
@@ -1,38 +1,16 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qwidgetbaselinetest.h"
#include <qbaselinetest.h>
#include <QApplication>
#include <QStyle>
+#include <QStyleHints>
#include <QScreen>
+#include <QtWidgets/private/qapplication_p.h>
+
QT_BEGIN_NAMESPACE
QWidgetBaselineTest::QWidgetBaselineTest()
@@ -47,18 +25,25 @@ QWidgetBaselineTest::QWidgetBaselineTest()
// Encode a number of parameters that impact the UI
QPalette palette;
QFont font;
- QByteArray appearanceBytes;
- {
- QDataStream appearanceStream(&appearanceBytes, QIODevice::WriteOnly);
- appearanceStream << palette << font <<
+ const QString styleName =
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
QApplication::style()->metaObject()->className();
#else
QApplication::style()->name();
#endif
+ // turn off animations and make the cursor flash time really long to avoid blinking
+ QApplication::style()->setProperty("_qt_animation_time", QTime());
+ QGuiApplication::styleHints()->setCursorFlashTime(50000);
+
+ QByteArray appearanceBytes;
+ {
+ QDataStream appearanceStream(&appearanceBytes, QIODevice::WriteOnly);
+ appearanceStream << palette << font;
const qreal screenDpr = QApplication::primaryScreen()->devicePixelRatio();
- if (screenDpr != 1.0)
- qWarning() << "DPR is" << screenDpr << "- images will be scaled";
+ if (screenDpr != 1.0) {
+ qWarning() << "DPR is" << screenDpr << "- images will not be compared to 1.0 baseline!";
+ appearanceStream << screenDpr;
+ }
}
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
const quint16 appearanceId = qChecksum(appearanceBytes, appearanceBytes.size());
@@ -72,8 +57,8 @@ QWidgetBaselineTest::QWidgetBaselineTest()
const QColor windowColor = palette.window().color();
const QColor textColor = palette.text().color();
const QString appearanceIdString = (windowColor.value() > textColor.value()
- ? QString("light-%1") : QString("dark-%1"))
- .arg(appearanceId, 0, 16);
+ ? QString("light-%1-%2") : QString("dark-%1-%2"))
+ .arg(styleName).arg(appearanceId, 0, 16);
QBaselineTest::addClientProperty("AppearanceID", appearanceIdString);
// let users know where they can find the results
@@ -92,11 +77,15 @@ void QWidgetBaselineTest::initTestCase()
void QWidgetBaselineTest::init()
{
QVERIFY(!window);
- window = new QWidget;
+ background = new QWidget(nullptr, Qt::FramelessWindowHint);
+ window = new QWidget(background, Qt::Window);
window->setWindowTitle(QTest::currentDataTag());
+ window->setFocusPolicy(Qt::StrongFocus);
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
+ background->setScreen(QGuiApplication::primaryScreen());
window->setScreen(QGuiApplication::primaryScreen());
#endif
+ background->move(QGuiApplication::primaryScreen()->availableGeometry().topLeft());
window->move(QGuiApplication::primaryScreen()->availableGeometry().topLeft());
doInit();
@@ -106,33 +95,46 @@ void QWidgetBaselineTest::cleanup()
{
doCleanup();
- delete window;
+ delete background;
+ background = nullptr;
window = nullptr;
}
void QWidgetBaselineTest::makeVisible()
{
Q_ASSERT(window);
+ background->showMaximized();
window->show();
- QApplication::setActiveWindow(window);
+ QApplicationPrivate::setActiveWindow(window);
QVERIFY(QTest::qWaitForWindowActive(window));
- // explicitly unset focus, the test needs to control when focus is shown
- if (window->focusWidget())
- window->focusWidget()->clearFocus();
+ // explicitly set focus on the window so that the test widget doesn't have it
+ window->setFocus(Qt::OtherFocusReason);
+ QTRY_COMPARE(window->focusWidget(), window);
}
/*
- Always return images scaled to a DPR of 1.0.
-
- This might produce some fuzzy differences, but lets us
- compare those.
+ Grabs the test window and returns the resulting QImage, without
+ compensating for DPR differences.
*/
QImage QWidgetBaselineTest::takeSnapshot()
{
- QGuiApplication::processEvents();
- QPixmap pm = window->grab();
- QTransform scaleTransform = QTransform::fromScale(1.0 / pm.devicePixelRatioF(), 1.0 / pm.devicePixelRatioF());
- return pm.toImage().transformed(scaleTransform, Qt::SmoothTransformation);
+ // make sure all effects are done
+ QTest::qWait(250);
+ return window->grab().toImage();
+}
+
+/*
+ Grabs the test window screen and returns the resulting QImage, without
+ compensating for DPR differences.
+ This can be used for popup windows.
+*/
+QImage QWidgetBaselineTest::takeScreenSnapshot(const QRect& windowRect)
+{
+ // make sure all effects are done - wait longer here because entire
+ // windows might be fading in and out.
+ QTest::qWait(750);
+ return window->screen()->grabWindow(0, windowRect.x(), windowRect.y(),
+ windowRect.width(), windowRect.height()).toImage();
}
/*!
@@ -145,23 +147,25 @@ QImage QWidgetBaselineTest::takeSnapshot()
void QWidgetBaselineTest::takeStandardSnapshots()
{
makeVisible();
- struct PublicWidget : QWidget {
- bool focusNextPrevChild(bool next) override { return QWidget::focusNextPrevChild(next); }
- };
+ QWidget *oldFocusWidget = testWindow()->focusWidget();
+ QCOMPARE(oldFocusWidget, testWindow());
QBASELINE_CHECK_DEFERRED(takeSnapshot(), "default");
// try hard to set focus
- static_cast<PublicWidget*>(window)->focusNextPrevChild(true);
- if (!window->focusWidget()) {
- QWidget *firstChild = window->findChild<QWidget*>();
- if (firstChild)
- firstChild->setFocus();
- }
-
- if (testWindow()->focusWidget()) {
+ QWidget *testWidget = window->nextInFocusChain();
+ if (!testWidget)
+ testWidget = window->findChild<QWidget*>();
+ QVERIFY(testWidget);
+ // use TabFocusReason, some widgets handle that specifically to e.g. select
+ testWidget->setFocus(Qt::TabFocusReason);
+
+ if (testWindow()->focusWidget() != oldFocusWidget) {
QBASELINE_CHECK_DEFERRED(takeSnapshot(), "focused");
- testWindow()->focusWidget()->clearFocus();
+ // set focus back
+ oldFocusWidget->setFocus(Qt::OtherFocusReason);
+ } else {
+ qWarning() << "Couldn't set focus on tested widget" << testWidget;
}
// this disables all children
diff --git a/tests/baseline/shared/qwidgetbaselinetest.h b/tests/baseline/shared/qwidgetbaselinetest.h
index db73dd0540..2142217c09 100644
--- a/tests/baseline/shared/qwidgetbaselinetest.h
+++ b/tests/baseline/shared/qwidgetbaselinetest.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#pragma once
@@ -57,8 +32,10 @@ private slots:
protected:
void makeVisible();
QImage takeSnapshot();
+ QImage takeScreenSnapshot(const QRect& rect = QRect());
private:
+ QWidget *background = nullptr;
QWidget *window = nullptr;
};
diff --git a/tests/baseline/stylesheet/CMakeLists.txt b/tests/baseline/stylesheet/CMakeLists.txt
index 11f6e52179..3fdaa739fe 100644
--- a/tests/baseline/stylesheet/CMakeLists.txt
+++ b/tests/baseline/stylesheet/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
file(GLOB_RECURSE test_data_glob
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
qss/*)
@@ -11,9 +14,10 @@ qt_internal_add_test(tst_baseline_stylesheet
tst_baseline_stylesheet.cpp
INCLUDE_DIRECTORIES
../shared
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
Qt::Network
TESTDATA ${test_data}
)
diff --git a/tests/baseline/stylesheet/qss/dummy.qss b/tests/baseline/stylesheet/qss/dummy.qss
new file mode 100644
index 0000000000..7f09309153
--- /dev/null
+++ b/tests/baseline/stylesheet/qss/dummy.qss
@@ -0,0 +1,31 @@
+/* dummy stylesheet to reproduce QTBUG-100433 for QToolButton
+QDummyView {
+ alternate-background-color: yellow;
+}
+
+QDummyView {
+ show-decoration-selected: 1;
+}
+
+QDummyView::item {
+ border: 1px solid #d9d9d9;
+ border-top-color: transparent;
+ border-bottom-color: transparent;
+}
+
+QDummyView::item:hover {
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #e7effd, stop: 1 #cbdaf1);
+ border: 1px solid #bfcde4;
+}
+
+QDummyView::item:selected {
+ border: 1px solid #567dbc;
+}
+
+QDummyView::item:selected:active{
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6ea1f1, stop: 1 #567dbc);
+}
+
+QDummyView::item:selected:!active {
+ background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #6b9be8, stop: 1 #577fbf);
+}
diff --git a/tests/baseline/stylesheet/qss/qheaderview/selectedFontWeight.qss b/tests/baseline/stylesheet/qss/qheaderview/selectedFontWeight.qss
new file mode 100644
index 0000000000..1c45a99767
--- /dev/null
+++ b/tests/baseline/stylesheet/qss/qheaderview/selectedFontWeight.qss
@@ -0,0 +1,16 @@
+QHeaderView::section {
+ background-color: red;
+ font-size: 10px;
+}
+
+QHeaderView::section:checked {
+ background-color: green;
+ font-size: 20px;
+ font-weight: bold;
+}
+
+QHeaderView::section:first {
+ background-color: yellow;
+ font-size: 20px;
+ font-weight: normal;
+}
diff --git a/tests/baseline/stylesheet/qss/qtoolbutton/menuButton_no_border.qss b/tests/baseline/stylesheet/qss/qtoolbutton/menuButton_no_border.qss
new file mode 100644
index 0000000000..e9e098eb5c
--- /dev/null
+++ b/tests/baseline/stylesheet/qss/qtoolbutton/menuButton_no_border.qss
@@ -0,0 +1 @@
+QToolButton::menu-button { border: none }
diff --git a/tests/baseline/stylesheet/qss/qtoolbutton/menuButton_subcontrol_padding.qss b/tests/baseline/stylesheet/qss/qtoolbutton/menuButton_subcontrol_padding.qss
new file mode 100644
index 0000000000..44e67671f0
--- /dev/null
+++ b/tests/baseline/stylesheet/qss/qtoolbutton/menuButton_subcontrol_padding.qss
@@ -0,0 +1,12 @@
+QToolButton {
+ border: 5px solid #9e9e9e;
+ background: #ffffff;
+ padding-top: 8px;
+ padding-bottom: 8px;
+}
+QToolButton[popupMode=InstantPopup] {
+ padding-right: 75px;
+}
+QToolButton::menu-indicator {
+ subcontrol-position: right;
+};
diff --git a/tests/baseline/stylesheet/qss/qtoolbutton/menuButton_subcontrol_position.qss b/tests/baseline/stylesheet/qss/qtoolbutton/menuButton_subcontrol_position.qss
new file mode 100644
index 0000000000..4a1a5f0c23
--- /dev/null
+++ b/tests/baseline/stylesheet/qss/qtoolbutton/menuButton_subcontrol_position.qss
@@ -0,0 +1,4 @@
+QToolButton::menu-indicator {
+ subcontrol-position: right center;
+ subcontrol-origin: padding;
+}
diff --git a/tests/baseline/stylesheet/qss/qtreeview/showDecorationSelected.qss b/tests/baseline/stylesheet/qss/qtreeview/showDecorationSelected.qss
new file mode 100644
index 0000000000..b279b587bd
--- /dev/null
+++ b/tests/baseline/stylesheet/qss/qtreeview/showDecorationSelected.qss
@@ -0,0 +1,3 @@
+QTreeView {
+ show-decoration-selected: 1
+}
diff --git a/tests/baseline/stylesheet/qss/qtreeview/styledIndicators.qss b/tests/baseline/stylesheet/qss/qtreeview/styledIndicators.qss
new file mode 100644
index 0000000000..02263ad644
--- /dev/null
+++ b/tests/baseline/stylesheet/qss/qtreeview/styledIndicators.qss
@@ -0,0 +1,18 @@
+QTreeWidget::indicator:indeterminate {
+ background: red
+}
+QTreeWidget::indicator:indeterminate:disabled {
+ background: pink
+}
+QTreeWidget::indicator:checked {
+ background: green
+}
+QTreeWidget::indicator:checked:disabled {
+ background: lightgreen
+}
+QTreeWidget::indicator:unchecked {
+ background: blue
+}
+QTreeWidget::indicator:unchecked:disabled {
+ background: lightblue
+};
diff --git a/tests/baseline/stylesheet/qss/qtreeview/styledItem.qss b/tests/baseline/stylesheet/qss/qtreeview/styledItem.qss
new file mode 100644
index 0000000000..1da627881c
--- /dev/null
+++ b/tests/baseline/stylesheet/qss/qtreeview/styledItem.qss
@@ -0,0 +1,7 @@
+QAbstractItemView::item
+{
+ background: grey;
+}
+QTreeWidget::indicator:checked {
+ background: green
+}
diff --git a/tests/baseline/stylesheet/qss/qtreeview/styledSelection.qss b/tests/baseline/stylesheet/qss/qtreeview/styledSelection.qss
new file mode 100644
index 0000000000..7d54a74fe5
--- /dev/null
+++ b/tests/baseline/stylesheet/qss/qtreeview/styledSelection.qss
@@ -0,0 +1,10 @@
+QTreeView {
+ alternate-background-color: yellow;
+ show-decoration-selected: 1;
+}
+QTreeView::item:selected:active {
+ background: qlineargradient(x1:0, y1:0 x2: 0, y2: 1, stop: 0 #fea1f1 stop: 1 #567dbc)
+}
+QTreeView::branch {
+ border: 2px
+}
diff --git a/tests/baseline/stylesheet/tst_baseline_stylesheet.cpp b/tests/baseline/stylesheet/tst_baseline_stylesheet.cpp
index 99b21b4bb5..67a618988b 100644
--- a/tests/baseline/stylesheet/tst_baseline_stylesheet.cpp
+++ b/tests/baseline/stylesheet/tst_baseline_stylesheet.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qbaselinetest.h>
#include <qwidgetbaselinetest.h>
@@ -49,6 +24,12 @@ private slots:
void tst_QScrollArea_data();
void tst_QScrollArea();
+ void tst_QTreeView_data();
+ void tst_QTreeView();
+
+ void tst_QHeaderView_data();
+ void tst_QHeaderView();
+
private:
QDir styleSheetDir;
};
@@ -85,7 +66,7 @@ void tst_Stylesheet::loadTestFiles()
for (const auto &qssFile : qssFiles) {
QFileInfo fileInfo(qssFile);
QFile file(qssFile);
- file.open(QFile::ReadOnly);
+ QVERIFY(file.open(QFile::ReadOnly));
QString styleSheet = QString::fromUtf8(file.readAll());
QBaselineTest::newRow(fileInfo.baseName().toUtf8()) << styleSheet;
}
@@ -98,7 +79,7 @@ void tst_Stylesheet::tst_QToolButton_data()
void tst_Stylesheet::tst_QToolButton()
{
- const QIcon fileIcon = QApplication::style()->standardIcon(QStyle::SP_FileIcon);
+ const QIcon trashIcon = QApplication::style()->standardIcon(QStyle::SP_TrashIcon);
QVBoxLayout *vbox = new QVBoxLayout;
@@ -107,8 +88,8 @@ void tst_Stylesheet::tst_QToolButton()
Qt::ToolButtonTextUnderIcon, Qt::ToolButtonTextBesideIcon}) {
QToolButton *normal = new QToolButton;
normal->setToolButtonStyle(buttonStyle);
- normal->setText("Text");
- normal->setIcon(fileIcon);
+ normal->setText("Norm");
+ normal->setIcon(trashIcon);
normalButtons->addWidget(normal);
}
vbox->addLayout(normalButtons);
@@ -116,7 +97,7 @@ void tst_Stylesheet::tst_QToolButton()
QHBoxLayout *arrowButtons = new QHBoxLayout;
for (const auto &arrowType : {Qt::LeftArrow, Qt::RightArrow, Qt::UpArrow, Qt::DownArrow}) {
QToolButton *arrow = new QToolButton;
- arrow->setText("Text");
+ arrow->setText("Arrs");
arrow->setArrowType(arrowType);
arrowButtons->addWidget(arrow);
}
@@ -126,7 +107,7 @@ void tst_Stylesheet::tst_QToolButton()
for (const auto &buttonStyle : {Qt::ToolButtonTextOnly,
Qt::ToolButtonTextUnderIcon, Qt::ToolButtonTextBesideIcon}) {
QToolButton *arrow = new QToolButton;
- arrow->setText("Text");
+ arrow->setText("ArrTxt");
arrow->setArrowType(Qt::UpArrow);
arrow->setToolButtonStyle(buttonStyle);
arrowWithTextButtons->addWidget(arrow);
@@ -137,8 +118,8 @@ void tst_Stylesheet::tst_QToolButton()
for (const auto &popupMode : {QToolButton::InstantPopup, QToolButton::MenuButtonPopup,
QToolButton::DelayedPopup}) {
QToolButton *menuButton = new QToolButton;
- menuButton->setText("Text");
- menuButton->setIcon(fileIcon);
+ menuButton->setText("PppMd");
+ menuButton->setIcon(trashIcon);
QMenu *menuButtonMenu = new QMenu;
menuButtonMenu->addAction(QIcon(":/icons/align-left.png"), "Left");
menuButtonMenu->addAction(QIcon(":/icons/align-right.png"), "Right");
@@ -170,13 +151,87 @@ void tst_Stylesheet::tst_QScrollArea()
QBASELINE_TEST(takeSnapshot());
}
+void tst_Stylesheet::tst_QTreeView_data()
+{
+ loadTestFiles();
+}
+
+void tst_Stylesheet::tst_QTreeView()
+{
+ QHBoxLayout *layout = new QHBoxLayout;
+ QTreeWidget *tw = new QTreeWidget();
+ tw->header()->hide();
+ layout->addWidget(tw);
+
+ enum {
+ Unchecked = 0,
+ Checked = 1,
+ Children = 2,
+ Disabled = 3,
+ CheckedDisabled = 4,
+ ChildrenDisabled = 5,
+ NConfigs
+ };
+
+ for (int i = 0; i < NConfigs; ++i) {
+ QTreeWidgetItem *topLevelItem = new QTreeWidgetItem(tw, QStringList{QString("top %1").arg(i)});
+ switch (i) {
+ case Unchecked:
+ case Disabled:
+ topLevelItem->setCheckState(0, Qt::Unchecked);
+ break;
+ case Checked:
+ case CheckedDisabled:
+ topLevelItem->setCheckState(0, Qt::Checked);
+ break;
+ case Children:
+ case ChildrenDisabled:
+ topLevelItem->setCheckState(0, Qt::PartiallyChecked);
+ topLevelItem->setExpanded(true);
+ for (int j = 0; j < 2; ++j) {
+ QTreeWidgetItem *childItem = new QTreeWidgetItem(topLevelItem, QStringList{QString("child %1").arg(j)});
+ childItem->setCheckState(0, j % 2 ? Qt::Unchecked : Qt::Checked);
+ }
+ break;
+ }
+ topLevelItem->setDisabled(i >= Disabled);
+ }
+ testWindow()->setLayout(layout);
+ tw->setRootIsDecorated(true);
+ makeVisible();
+
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "rootDecorated");
+ tw->setRootIsDecorated(false);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "rootNotDecorated");
+
+ tw->topLevelItem(Children)->child(0)->setSelected(true);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "itemSelected");
+}
+
+void tst_Stylesheet::tst_QHeaderView_data()
+{
+ loadTestFiles();
+}
+
+void tst_Stylesheet::tst_QHeaderView()
+{
+ QHBoxLayout *layout = new QHBoxLayout;
+ QTableWidget *tw = new QTableWidget(10, 10);
+ tw->setCurrentCell(1, 1);
+ layout->addWidget(tw);
+ testWindow()->setLayout(layout);
+ makeVisible();
+ QBASELINE_TEST(takeSnapshot());
+}
+
#define main _realmain
QTEST_MAIN(tst_Stylesheet)
#undef main
int main(int argc, char *argv[])
{
- qSetGlobalQHashSeed(0); // Avoid rendering variations caused by QHash randomization
+ // Avoid rendering variations caused by QHash randomization
+ QHashSeed::setDeterministicGlobalSeed();
QBaselineTest::handleCmdLineArgs(&argc, &argv);
return _realmain(argc, argv);
diff --git a/tests/baseline/text/CMakeLists.txt b/tests/baseline/text/CMakeLists.txt
index 707b3794b5..74d01337cb 100644
--- a/tests/baseline/text/CMakeLists.txt
+++ b/tests/baseline/text/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
list(APPEND test_data "./data")
qt_internal_add_test(tst_baseline_text
@@ -8,9 +11,10 @@ qt_internal_add_test(tst_baseline_text
tst_baseline_text.cpp
INCLUDE_DIRECTORIES
../shared
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
Qt::Network
TESTDATA ${test_data}
)
diff --git a/tests/baseline/text/data/colored_list.html b/tests/baseline/text/data/colored_list.html
new file mode 100644
index 0000000000..d1cca94460
--- /dev/null
+++ b/tests/baseline/text/data/colored_list.html
@@ -0,0 +1,68 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html>
+<head>
+<style type="text/css">
+p, li { white-space: pre-wrap; }
+hr { height: 1px; border-width: 0; }
+li.unchecked::marker { content: "\2610"; }
+li.checked::marker { content: "\2612"; }
+body { background-color: #111155; color: #ffffff; }
+</style>
+</head>
+<body>
+
+<ul>
+<li>disc</li>
+<li style=" color:#a58d47;">bronze</li>
+<li style=" color:red;"><span style=" color:#ffcdb9;">red bullet, pink text</span></li>
+<li style=" color:#dddddd;" class="checked">checked</li>
+<li style=" color:#dddddd;" class="unchecked">unchecked</li>
+</ul>
+
+<ul type="circle">
+<li>circle</li>
+<li style=" color:#dddddd;">silver</li>
+<li style=" color:lightgrey;"><span style=" color:#ffcdb9;">grey bullet, pink text</span></li>
+<li style=" color:#dddddd;" class="checked">checked</li>
+<li style=" color:#dddddd;" class="unchecked">unchecked</li>
+</ul>
+
+<ul type="square">
+<li style=" color:#ffffff;">square</li>
+<li style=" color:#fceebb;">gold</li>
+<li style=" color:yellow;"><span style=" color:#ffcdb9;">yellow bullet, pink text</span></li>
+<li style=" color:#dddddd;" class="checked">checked</li>
+<li style=" color:#dddddd;" class="unchecked">unchecked</li>
+</ul>
+
+<ol>
+<li>decimal</li>
+<li style=" color:#a58d47;">bronze decimal</li>
+<li style=" color:red;"><span style=" color:#ffcdb9;">red number, pink text</span></li>
+</ol>
+
+<ol type="A">
+<li>uppercase</li>
+<li style=" color:#a58d47;">bronze uppercase</li>
+<li style=" color:red;"><span style=" color:#ffcdb9;">red letter, pink text</span></li>
+</ol>
+
+<ol type="a">
+<li>lowercase</li>
+<li style=" color:#a58d47;">bronze lowercase</li>
+<li style=" color:red;"><span style=" color:#ffcdb9;">red letter, pink text</span></li>
+</ol>
+
+<ol type="i">
+<li>lower roman</li>
+<li style=" color:#a58d47;">bronze roman</li>
+<li style=" color:red;"><span style=" color:#ffcdb9;">red number, pink text</span></li>
+</ol>
+
+<ol type="I">
+<li>upper roman</li>
+<li style=" color:#a58d47;">bronze roman</li>
+<li style=" color:red;"><span style=" color:#ffcdb9;">red number, pink text</span></li>
+</ol>
+</body>
+</html>
diff --git a/tests/baseline/text/tst_baseline_text.cpp b/tests/baseline/text/tst_baseline_text.cpp
index 363a2ef6cd..59a5f478a5 100644
--- a/tests/baseline/text/tst_baseline_text.cpp
+++ b/tests/baseline/text/tst_baseline_text.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qbaselinetest.h>
#include <qwidgetbaselinetest.h>
@@ -42,6 +17,7 @@ public:
private slots:
void tst_render_data();
void tst_render();
+ void tst_differentScriptsBackgrounds();
private:
QDir htmlDir;
@@ -73,7 +49,7 @@ void tst_Text::loadTestFiles()
for (const auto &htmlFile : htmlFiles) {
QFileInfo fileInfo(htmlFile);
QFile file(htmlFile);
- file.open(QFile::ReadOnly);
+ QVERIFY(file.open(QFile::ReadOnly));
QString html = QString::fromUtf8(file.readAll());
QBaselineTest::newRow(fileInfo.baseName().toUtf8()) << html;
}
@@ -106,6 +82,26 @@ void tst_Text::tst_render()
QBASELINE_TEST(image);
}
+void tst_Text::tst_differentScriptsBackgrounds()
+{
+ QTextDocument textDocument;
+ textDocument.setPageSize(QSizeF(800, 600));
+ textDocument.setHtml(QString::fromUtf8("<i><font style=\"font-size:72px\"><font style=\"background:#FFFF00\">イ雨エ</font></font></i>"));
+
+ QImage image(800, 600, QImage::Format_ARGB32);
+ image.fill(Qt::white);
+
+ {
+ QPainter painter(&image);
+
+ QAbstractTextDocumentLayout::PaintContext context;
+ context.palette.setColor(QPalette::Text, Qt::black);
+ textDocument.documentLayout()->draw(&painter, context);
+ }
+
+ QBASELINE_CHECK(image, "tst_differentScriptsBackgrounds");
+}
+
#define main _realmain
QTEST_MAIN(tst_Text)
@@ -113,7 +109,8 @@ QTEST_MAIN(tst_Text)
int main(int argc, char *argv[])
{
- qSetGlobalQHashSeed(0); // Avoid rendering variations caused by QHash randomization
+ // Avoid rendering variations caused by QHash randomization
+ QHashSeed::setDeterministicGlobalSeed();
QBaselineTest::handleCmdLineArgs(&argc, &argv);
return _realmain(argc, argv);
diff --git a/tests/baseline/widgets/CMakeLists.txt b/tests/baseline/widgets/CMakeLists.txt
index 124e67785f..07938f69b4 100644
--- a/tests/baseline/widgets/CMakeLists.txt
+++ b/tests/baseline/widgets/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_test(tst_baseline_widgets
SOURCES
../shared/baselineprotocol.cpp ../shared/baselineprotocol.h ../shared/lookup3.cpp
@@ -6,8 +9,9 @@ qt_internal_add_test(tst_baseline_widgets
tst_baseline_widgets.cpp
INCLUDE_DIRECTORIES
../shared
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::WidgetsPrivate
Qt::Network
)
diff --git a/tests/baseline/widgets/tst_baseline_widgets.cpp b/tests/baseline/widgets/tst_baseline_widgets.cpp
index 7495e76a57..8a763eb8fa 100644
--- a/tests/baseline/widgets/tst_baseline_widgets.cpp
+++ b/tests/baseline/widgets/tst_baseline_widgets.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qbaselinetest.h>
#include <qwidgetbaselinetest.h>
#include <QtWidgets>
+#include <QStyleOptionSlider>
class tst_Widgets : public QWidgetBaselineTest
{
@@ -44,12 +20,26 @@ private slots:
void tst_QPushButton_data();
void tst_QPushButton();
+ void tst_QPushButtonSquare();
+
void tst_QProgressBar_data();
void tst_QProgressBar();
void tst_QSpinBox_data();
void tst_QSpinBox();
+ void tst_QDoubleSpinBox_data();
+ void tst_QDoubleSpinBox();
+
+ void tst_QDateTimeEdit_data();
+ void tst_QDateTimeEdit();
+
+ void tst_QTimeEdit_data();
+ void tst_QTimeEdit();
+
+ void tst_QDateEdit_data();
+ void tst_QDateEdit();
+
void tst_QDial_data();
void tst_QDial();
@@ -58,6 +48,52 @@ private slots:
void tst_QRadioButton_data();
void tst_QRadioButton();
+
+ void tst_QScrollBar_data();
+ void tst_QScrollBar();
+
+ void tst_QTabBar_data();
+ void tst_QTabBar();
+
+ void tst_QTabWidget_data();
+ void tst_QTabWidget();
+
+ void tst_QListView_data();
+ void tst_QListView();
+
+ void tst_QTableView_data();
+ void tst_QTableView();
+
+ void tst_QTreeView_data();
+ void tst_QTreeView();
+
+ void tst_QLineEdit_data();
+ void tst_QLineEdit();
+
+ void tst_QMenu_data();
+ void tst_QMenu();
+
+ void tst_QCombobox_data();
+ void tst_QCombobox();
+
+ void tst_QCommandLinkButton_data();
+ void tst_QCommandLinkButton();
+
+ void tst_QLCDNumber_data();
+ void tst_QLCDNumber();
+
+private:
+
+ // Abstract SpinBox test for QSpinBox, QDoubleSpinBox, QDateTimeEdit, QDateEdit, QTimeEdit
+ void tst_SpinBox_data();
+ void tst_SpinBox(QAbstractSpinBox* spinBox);
+
+ // 78 standard icons from 6.3
+ const int numberStandardIcons = 78;
+
+ // recursive methods for QTreeView population
+ void tst_QTreeView_populateTree(QStandardItem* node, int height, int itemsPerNode, bool hasIcon);
+ QStandardItem* tst_QTreeView_populateItem(int height, int number, bool hasIcon);
};
void tst_Widgets::tst_QSlider_data()
@@ -151,6 +187,29 @@ void tst_Widgets::tst_QPushButton()
testButton->setDown(false);
}
+void tst_Widgets::tst_QPushButtonSquare()
+{
+ QVBoxLayout layout;
+
+ QPushButton button(testWindow());
+ button.setText(QLatin1String("Square"));
+ const auto sizeHint = button.sizeHint().width();
+ // Depending on the current QStyle, this may result in
+ // a different button look - on macOS it will look as
+ // a toolbutton:
+ button.setFixedSize(sizeHint, sizeHint);
+
+ layout.addWidget(&button);
+ testWindow()->setLayout(&layout);
+
+ takeStandardSnapshots();
+
+ button.setCheckable(true);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "square_unchecked");
+ button.setChecked(true);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "square_checked");
+}
+
void tst_Widgets::tst_QProgressBar_data()
{
QTest::addColumn<Qt::Orientation>("orientation");
@@ -188,38 +247,126 @@ void tst_Widgets::tst_QProgressBar()
takeStandardSnapshots();
}
-void tst_Widgets::tst_QSpinBox_data()
+void tst_Widgets::tst_SpinBox_data()
{
QTest::addColumn<QAbstractSpinBox::ButtonSymbols>("buttons");
- QTest::addRow("NoButtons") << QSpinBox::NoButtons;
- QTest::addRow("UpDownArrows") << QSpinBox::UpDownArrows;
- QTest::addRow("PlusMinus") << QSpinBox::PlusMinus;
+ QTest::addRow("NoButtons") << QAbstractSpinBox::NoButtons;
+ QTest::addRow("UpDownArrows") << QAbstractSpinBox::UpDownArrows;
+ QTest::addRow("PlusMinus") << QAbstractSpinBox::PlusMinus;
}
-void tst_Widgets::tst_QSpinBox()
+void tst_Widgets::tst_SpinBox(QAbstractSpinBox *spinBox)
{
- QFETCH(const QSpinBox::ButtonSymbols, buttons);
+ QFETCH(const QAbstractSpinBox::ButtonSymbols, buttons);
- QSpinBox *spinBox = new QSpinBox;
spinBox->setButtonSymbols(buttons);
spinBox->setMinimumWidth(200);
- QVBoxLayout *layout = new QVBoxLayout;
- layout->addWidget(spinBox);
-
- testWindow()->setLayout(layout);
+ QVBoxLayout layout;
+ layout.addWidget(spinBox);
+ testWindow()->setLayout(&layout);
takeStandardSnapshots();
- // Left is default alignment:
- QBASELINE_CHECK(takeSnapshot(), "align_left");
-
spinBox->setAlignment(Qt::AlignHCenter);
- QBASELINE_CHECK(takeSnapshot(), "align_center");
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "alignCenter");
spinBox->setAlignment(Qt::AlignRight);
- QBASELINE_CHECK(takeSnapshot(), "align_right");
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "alignRight");
+
+ // Press / release up button
+ QStyleOptionSpinBox styleOption;
+ styleOption.initFrom(spinBox);
+ QPoint clickTarget = spinBox->style()->subControlRect(QStyle::CC_SpinBox,&styleOption,
+ QStyle::SC_SpinBoxUp,spinBox).center();
+
+ QTest::mousePress(spinBox, Qt::LeftButton, Qt::KeyboardModifiers(), clickTarget);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "upPressed");
+ QTest::mouseRelease(spinBox, Qt::LeftButton, Qt::KeyboardModifiers(), clickTarget);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "upReleased");
+
+ // Press / release down button
+ clickTarget = spinBox->style()->subControlRect(QStyle::CC_SpinBox,&styleOption,
+ QStyle::SC_SpinBoxDown,spinBox).center();
+
+ QTest::mousePress(spinBox, Qt::LeftButton, Qt::KeyboardModifiers(), clickTarget);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "downPressed");
+ QTest::mouseRelease(spinBox, Qt::LeftButton, Qt::KeyboardModifiers(), clickTarget);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "downReleased");
+}
+
+void tst_Widgets::tst_QSpinBox_data()
+{
+ tst_SpinBox_data();
+}
+
+void tst_Widgets::tst_QSpinBox()
+{
+ QSpinBox spinBox;
+ tst_SpinBox(&spinBox);
+}
+
+void tst_Widgets::tst_QDoubleSpinBox_data()
+{
+ tst_SpinBox_data();
+}
+
+void tst_Widgets::tst_QDoubleSpinBox()
+{
+ QDoubleSpinBox spinBox;
+ tst_SpinBox(&spinBox);
+}
+
+void tst_Widgets::tst_QDateTimeEdit_data()
+{
+ tst_SpinBox_data();
+}
+
+void tst_Widgets::tst_QDateTimeEdit()
+{
+ QDateTimeEdit edit;
+ tst_SpinBox(&edit);
+
+ // show calendar popup
+ QStyleOptionSpinBox styleOption;
+ styleOption.initFrom(&edit);
+ const QRect buttonUp = edit.style()->subControlRect(QStyle::CC_SpinBox,&styleOption,
+ QStyle::SC_SpinBoxUp,&edit);
+
+ // no rect for popup button => use bottom center of up-button
+ QPoint clickTarget = buttonUp.center();
+ clickTarget.setY(buttonUp.bottomLeft().y());
+ edit.setCalendarPopup(true);
+ QTest::mouseClick(&edit, Qt::LeftButton, Qt::KeyboardModifiers(), clickTarget);
+ QCalendarWidget* calendar = edit.calendarWidget();
+ QVERIFY(calendar);
+ QVBoxLayout layout;
+ layout.addWidget(calendar);
+ testWindow()->setLayout(&layout);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "showCalendar");
+}
+
+void tst_Widgets::tst_QTimeEdit_data()
+{
+ tst_SpinBox_data();
+}
+
+void tst_Widgets::tst_QTimeEdit()
+{
+ QTimeEdit edit;
+ tst_SpinBox(&edit);
+}
+
+void tst_Widgets::tst_QDateEdit_data()
+{
+ tst_SpinBox_data();
+}
+
+void tst_Widgets::tst_QDateEdit()
+{
+ QDateEdit edit;
+ tst_SpinBox(&edit);
}
void tst_Widgets::tst_QDial_data()
@@ -280,8 +427,14 @@ void tst_Widgets::tst_QCheckbox()
QFETCH(bool, hasIcon);
QFETCH(bool, isTriState);
+ class CheckBox : public QCheckBox
+ {
+ public:
+ using QCheckBox::initStyleOption;
+ };
+
QBoxLayout layout(QBoxLayout::TopToBottom);
- QCheckBox box;
+ CheckBox box;
box.setTristate(isTriState);
if (!text.isEmpty())
@@ -294,10 +447,11 @@ void tst_Widgets::tst_QCheckbox()
testWindow()->setLayout(&layout);
takeStandardSnapshots();
- do
- {
+ do {
const Qt::CheckState checkState = box.checkState();
- const QPoint clickTarget = box.rect().center();
+ QStyleOptionButton styleOption;
+ box.initStyleOption(&styleOption);
+ const QPoint clickTarget = box.style()->subElementRect(QStyle::SE_CheckBoxClickRect, &styleOption, &box).center();
const std::array titles = {"unChecked", "partiallyChecked", "checked"};
const QString snapShotTitle = titles[checkState];
@@ -330,7 +484,14 @@ void tst_Widgets::tst_QRadioButton()
QFETCH(QString,text);
QFETCH(bool,hasIcon);
- QRadioButton button1(testWindow());
+ class RadioButton : public QRadioButton
+ {
+ public:
+ using QRadioButton::QRadioButton;
+ using QRadioButton::initStyleOption;
+ };
+
+ RadioButton button1(testWindow());
if (!text.isEmpty())
button1.setText(text);
@@ -340,7 +501,7 @@ void tst_Widgets::tst_QRadioButton()
button1.setChecked(false);
- QRadioButton button2(testWindow());
+ RadioButton button2(testWindow());
if (!text.isEmpty())
button2.setText(text);
@@ -354,9 +515,13 @@ void tst_Widgets::tst_QRadioButton()
QBoxLayout box(QBoxLayout::TopToBottom);
box.addWidget(&button1);
box.addWidget(&button2);
+ testWindow()->setLayout(&box);
takeStandardSnapshots();
- const QPoint clickTarget = button1.rect().center();
+ QStyleOptionButton styleOption;
+ button1.initStyleOption(&styleOption);
+ const QPoint clickTarget = button1.style()->subElementRect(QStyle::SE_RadioButtonClickRect, &styleOption, &button1).center();
+
QTest::mousePress(&button1,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
QVERIFY(button1.isDown());
QBASELINE_CHECK_DEFERRED(takeSnapshot(), "pressUnchecked");
@@ -381,13 +546,743 @@ void tst_Widgets::tst_QRadioButton()
QBASELINE_CHECK_DEFERRED(takeSnapshot(), "releaseChecked");
}
+void tst_Widgets::tst_QScrollBar_data()
+{
+ QTest::addColumn<Qt::Orientation>("orientation");
+
+ QTest::newRow("Horizontal") << Qt::Horizontal;
+ QTest::newRow("Vertical") << Qt::Vertical;
+}
+
+void tst_Widgets::tst_QScrollBar()
+{
+ QFETCH(Qt::Orientation, orientation);
+
+ QBoxLayout box((orientation == Qt::Vertical) ? QBoxLayout::LeftToRight
+ : QBoxLayout::TopToBottom);
+ QList<QScrollBar*> bars;
+ for (int i = 0; i < 4; ++i) {
+
+ QScrollBar *bar = new QScrollBar(testWindow());
+ (orientation == Qt::Vertical) ? bar->setFixedHeight(100)
+ : bar->setFixedWidth(100);
+
+ bar->setOrientation(orientation);
+ bar->setValue(i * 33);
+ box.addWidget(bar);
+ bars.append(bar);
+ }
+
+ testWindow()->setLayout(&box);
+ takeStandardSnapshots();
+
+ // press left/up of first bar
+ QScrollBar *bar = bars.at(0);
+ QStyleOptionSlider styleOption = qt_qscrollbarStyleOption(bar);
+ QPoint clickTarget = bar->style()->subControlRect(QStyle::CC_ScrollBar, &styleOption,
+ QStyle::SC_ScrollBarSubLine, bar).center();
+ QTest::mousePress(bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "pressLeftUp");
+ QTest::mouseRelease(bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+
+ // press slider of first bar
+ styleOption = qt_qscrollbarStyleOption(bar);
+ clickTarget = bar->style()->subControlRect(QStyle::CC_ScrollBar, &styleOption,
+ QStyle::SC_ScrollBarSlider, bar).center();
+ QTest::mousePress(bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+ QVERIFY(bar->isSliderDown());
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "pressSlider");
+ QTest::mouseRelease(bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+
+ // Press AddPage up on first bar
+ clickTarget = bar->style()->subControlRect(QStyle::CC_ScrollBar, &styleOption,
+ QStyle::SC_ScrollBarAddPage, bar).center();
+ QTest::mousePress(bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "pressAddPage");
+ QTest::mouseRelease(bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+
+ // press SubPage of last bar
+ bar = bars.at(3);
+ styleOption = qt_qscrollbarStyleOption(bar);
+ clickTarget = bar->style()->subControlRect(QStyle::CC_ScrollBar, &styleOption,
+ QStyle::SC_ScrollBarAddLine, bar).center();
+ QTest::mousePress(bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "pressRightDown");
+ QTest::mouseRelease(bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+}
+
+void tst_Widgets::tst_QTabBar_data()
+{
+ QTest::addColumn<QTabBar::Shape>("shape");
+ QTest::addColumn<int>("numberTabs");
+ QTest::addColumn<int>("fixedWidth");
+ QTest::addColumn<bool>("isClosable");
+
+ // fixedWidth <0 will be interpreted as variable width
+ QTest::newRow("RoundedNorth_3_variableWidth") << QTabBar::RoundedNorth << 3 << -1 << false;
+ QTest::newRow("RoundedEast_3_variableWidth") << QTabBar::RoundedEast << 3 << -1 << false;
+ QTest::newRow("RoundedWest_3_variableWidth") << QTabBar::RoundedWest << 3 << -1 << false;
+ QTest::newRow("RoundedSouth_3_variableWidth") << QTabBar::RoundedSouth << 3 << -1 << false;
+ QTest::newRow("RoundedNorth_20_fixedWidth") << QTabBar::RoundedNorth << 20 << 250 << true;
+}
+
+void tst_Widgets::tst_QTabBar()
+{
+ QFETCH(QTabBar::Shape, shape);
+ QFETCH(int, numberTabs);
+ QFETCH(int, fixedWidth);
+ QFETCH(bool, isClosable);
+
+ QTabBar bar (testWindow());
+ bar.setShape(shape);
+ bar.setTabsClosable(isClosable);
+ if (fixedWidth > 0)
+ bar.setFixedWidth(fixedWidth);
+
+ for (int i = 0; i < numberTabs; ++i) {
+ bar.insertTab(i,"Tab_" + QString::number(i));
+ }
+
+ QBoxLayout box(QBoxLayout::LeftToRight, testWindow());
+ box.addWidget(&bar);
+ testWindow()->setLayout(&box);
+
+ takeStandardSnapshots();
+
+ // press/release first tab
+ bar.setCurrentIndex(0);
+ QPoint clickTarget = bar.tabRect(0).center();
+ QTest::mousePress(&bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "pressFirstTab");
+ QTest::mouseRelease(&bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+ QVERIFY(bar.currentIndex() == 0);
+
+ // press/release second tab if it exists
+ if (bar.count() > 1) {
+ clickTarget = bar.tabRect(1).center();
+ QTest::mousePress(&bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "pressSecondTab");
+ QTest::mouseRelease(&bar,Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+ QVERIFY(bar.currentIndex() == 1);
+ }
+
+ // test press/release on close button
+ if (isClosable) {
+
+ // CloseButton is either left or right
+ QWidget *leftButton = bar.tabButton(bar.currentIndex(),QTabBar::ButtonPosition::LeftSide);
+ QWidget *rightButton = bar.tabButton(bar.currentIndex(),QTabBar::ButtonPosition::RightSide);
+ QAbstractButton *button = qobject_cast<QAbstractButton*>(leftButton);
+ if (button == nullptr)
+ button = qobject_cast<QAbstractButton*>(rightButton);
+
+ if (button != nullptr) {
+ clickTarget = button->rect().center();
+ QTest::mousePress(button,Qt::MouseButton::LeftButton,
+ Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "pressCloseFirstTab");
+ QTest::mouseRelease(button,Qt::MouseButton::LeftButton,
+ Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "releaseCloseFirstTab");
+ }
+ }
+}
+
+void tst_Widgets::tst_QTabWidget_data()
+{
+ QTest::addColumn<QTabWidget::TabPosition>("tabPosition");
+ QTest::addColumn<int>("numberTabs");
+ QTest::addColumn<QString>("tabText");
+ QTest::addColumn<int>("fixedWidth");
+ QTest::addColumn<bool>("isClosable");
+ QTest::addColumn<bool>("isDocumentMode");
+
+ // fixedWidth <0 will be interpreted as variable width
+ QTest::newRow("North_3_variableWidthDocMode") << QTabWidget::North << 3 << "This is a tab text" << -1 << false << true;
+ QTest::newRow("East_3_variableWidth") << QTabWidget::East << 3 << "This is a tab text" << -1 << false << false;
+ QTest::newRow("West_3_variableWidthDocMode") << QTabWidget::West << 3 << "This is a tab text" << -1 << false << true;
+ QTest::newRow("South_3_variableWidth") << QTabWidget::South << 3 << "This is a tab text" << -1 << true << false;
+ QTest::newRow("North_20_fixedWidthDocMode") << QTabWidget::North << 20
+ << "This is a very long text to actually force wrapping!" << 100 << true << true;
+ QTest::newRow("South_20_variableWidth") << QTabWidget::South << 20
+ << "This is a very long text to actually force wrapping!" << -1 << false << false;
+}
+
+void tst_Widgets::tst_QTabWidget()
+{
+ QFETCH(QTabWidget::TabPosition, tabPosition);
+ QFETCH(int, numberTabs);
+ QFETCH(QString, tabText);
+ QFETCH(int, fixedWidth);
+ QFETCH(bool, isClosable);
+ QFETCH(bool, isDocumentMode);
+
+ QTabWidget tabWidget (testWindow());
+ if (fixedWidth > 0)
+ tabWidget.setFixedWidth(fixedWidth);
+ tabWidget.setTabPosition(tabPosition);
+ tabWidget.setTabsClosable(isClosable);
+ tabWidget.setDocumentMode(isDocumentMode);
+
+ for (int i = 0; i < numberTabs; ++i) {
+ QLabel *tabLabel = new QLabel("Tab number " + QString::number(i) + "\n" + tabText, &tabWidget);
+ QBoxLayout *tabBox = new QBoxLayout(QBoxLayout::TopToBottom,&tabWidget);
+ tabBox->addWidget(tabLabel);
+ tabWidget.insertTab(i,tabLabel,"Tab_" + QString::number(i));
+ tabWidget.setCurrentIndex(i);
+ tabWidget.currentWidget()->setLayout(tabBox);
+ }
+
+ tabWidget.setCurrentIndex(0);
+ QBoxLayout box(QBoxLayout::LeftToRight, testWindow());
+ box.addWidget(&tabWidget);
+ testWindow()->setLayout(&box);
+ takeStandardSnapshots();
+
+ // press/release on second tab if it exists
+ if (numberTabs > 1) {
+ const QPoint clickTarget = tabWidget.tabBar()->tabRect(1).center();
+ QTest::mousePress(tabWidget.tabBar(),Qt::MouseButton::LeftButton,Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "pressSecondTab");
+ QTest::mouseRelease(tabWidget.tabBar(),Qt::MouseButton::LeftButton, Qt::KeyboardModifiers(), clickTarget,0);
+ QVERIFY(tabWidget.currentIndex() == 1);
+ }
+
+ // test press/release on close button
+ if (isClosable) {
+
+ // CloseButton is either left or right
+ QWidget *leftButton = tabWidget.tabBar()->tabButton(tabWidget.currentIndex(),QTabBar::ButtonPosition::LeftSide);
+ QWidget *rightButton = tabWidget.tabBar()->tabButton(tabWidget.currentIndex(),QTabBar::ButtonPosition::RightSide);
+ QAbstractButton *button = qobject_cast<QAbstractButton*>(leftButton);
+ if (button == nullptr)
+ button = qobject_cast<QAbstractButton*>(rightButton);
+
+ if (button != nullptr) {
+ const QPoint clickTarget = button->rect().center();
+ QTest::mousePress(button,Qt::MouseButton::LeftButton,
+ Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "pressCloseTab");
+ QTest::mouseRelease(button,Qt::MouseButton::LeftButton,
+ Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "releaseCloseTab");
+ }
+ }
+}
+
+void tst_Widgets::tst_QListView_data()
+{
+ QTest::addColumn<QListView::ViewMode>("viewMode");
+ QTest::addColumn<bool>("isWrapping");
+ QTest::addColumn<bool>("hasWordWrap");
+ QTest::addColumn<int>("numberItems");
+ QTest::addColumn<QSize>("fixedSize");
+
+
+ // QSize() will be interpreted as variable size
+ QTest::newRow("ListModeWrappingNoWordWrapFixed_10") <<
+ QListView::ListMode << true << false << 10 << QSize(100, 500);
+ QTest::newRow("ListModeNoWrappingNoWordWrapVariable_20") <<
+ QListView::ListMode << false << true << 20 << QSize();
+ QTest::newRow("ListModeNoWrappingWordWrapVariable_30") <<
+ QListView::ListMode << false << true << 30 << QSize();
+ QTest::newRow("IconModeNoWrappingNoWordWrapFixed_10") <<
+ QListView::IconMode << false << false << 10 << QSize(100, 500);
+ QTest::newRow("IconModeWrappingNoWordWrapVariable_20") <<
+ QListView::IconMode << true << false << 20 << QSize();
+ QTest::newRow("IconModeWrappingWordWrapVariable_30") <<
+ QListView::IconMode << true << true << 30 << QSize(100, 500);
+}
+void tst_Widgets::tst_QListView()
+{
+ QFETCH(QListView::ViewMode,viewMode);
+ QFETCH(bool,isWrapping);
+ QFETCH(bool,hasWordWrap);
+ QFETCH(int,numberItems);
+ QFETCH(QSize,fixedSize);
+
+ QListView listView;
+ listView.setViewMode(viewMode);
+ listView.setWrapping(isWrapping);
+ listView.setWordWrap(hasWordWrap);
+ if (fixedSize.isValid())
+ listView.setFixedSize(fixedSize);
+
+ QStandardItemModel model(0,1,testWindow());
+
+ // Populate model, add standard icons if required
+ const QString itemText = hasWordWrap ? "This is a long text for word wrapping Item_"
+ : "ListItem_";
+ int icon = 0;
+ for (int i = 0; i < numberItems; ++i) {
+ QStandardItem *item;
+ if (viewMode == QListView::IconMode) {
+ item = new QStandardItem(QApplication::style()->standardIcon
+ (static_cast<QStyle::StandardPixmap>(icon)), itemText + QString::number(i));
+ icon = (icon + 1) % numberStandardIcons;
+ } else {
+ item = new QStandardItem(itemText + QString::number(i));
+ }
+ model.appendRow(item);
+ }
+
+ listView.setModel(&model);
+ QBoxLayout layout(QBoxLayout::LeftToRight, testWindow());
+ layout.addWidget(&listView);
+ testWindow()->setLayout(&layout);
+ takeStandardSnapshots();
+
+ // click on first item
+ QPoint clickTarget = listView.visualRect(model.index(0,0)).center();
+ QTest::mouseClick(listView.viewport(),Qt::MouseButton::LeftButton,
+ Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "clickFirstItem");
+
+ // click on scond item
+ if (numberItems > 1) {
+ clickTarget = listView.visualRect(model.index(1,0)).center();
+ QTest::mouseClick(listView.viewport(),Qt::MouseButton::LeftButton,
+ Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "clickSecondItem");
+ }
+
+ // Hide first row
+ listView.setRowHidden(0,true);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "hideFirstItem");
+}
+
+void tst_Widgets::tst_QTableView_data()
+{
+ QTest::addColumn<bool>("hasHeader");
+ QTest::addColumn<bool>("hasRowNumbers");
+ QTest::addColumn<bool>("hasWordWrap");
+ QTest::addColumn<int>("numberRows");
+ QTest::addColumn<int>("numberColumns");
+ QTest::addColumn<int>("iconColumn");
+ QTest::addColumn<QSize>("fixedSize");
+
+ // QSize() => variable size; iconColumn -1 => no icon
+ QTest::newRow("HeaderRowNumWordWrapFixed_10") << true << true << true << 10 << 3 << -1 << QSize(500, 100);
+ QTest::newRow("HeaderVariable_20") << true << false << false << 20 << 4 << 1 << QSize();
+ QTest::newRow("HeaderFixed_20") << true << false << false << 20 << 4 << 1 << QSize(500, 700);
+}
+
+void tst_Widgets::tst_QTableView()
+{
+ QFETCH(bool, hasHeader);
+ QFETCH(bool, hasRowNumbers);
+ QFETCH(bool, hasWordWrap);
+ QFETCH(int, numberRows);
+ QFETCH(int, numberColumns);
+ QFETCH(int, iconColumn);
+ QFETCH(QSize, fixedSize);
+
+ // Populate model
+ int icon = 0;
+ QStandardItemModel model(numberRows, numberColumns, testWindow());
+
+ if (hasHeader) {
+ for (int i = 0; i < numberColumns; ++i)
+ model.setHorizontalHeaderItem(i, new QStandardItem("Header_" + QString::number(i)));
+ }
+
+ const QString wrap = hasWordWrap ? "\n long text to wrap words" : "" ;
+ for (int row = 0; row < numberRows; ++row) {
+ for (int column = 0; column < numberColumns; ++column) {
+ QStandardItem *item;
+ const QString itemText = QString::number(row) + "/" + QString::number(column) + wrap;
+ if (iconColumn == column) {
+ item = new QStandardItem(QApplication::style()->standardIcon
+ (static_cast<QStyle::StandardPixmap>(icon)),itemText);
+
+ icon = (icon + 1) % numberStandardIcons;
+ } else {
+ item = new QStandardItem(itemText);
+ }
+ model.setItem(row,column,item);
+ }
+ if (hasRowNumbers)
+ model.setVerticalHeaderItem(row, new QStandardItem(QString::number(row)));
+ }
+
+ QTableView tableView(testWindow());
+ tableView.setWordWrap(hasWordWrap);
+ if (fixedSize.isValid())
+ tableView.setFixedSize(fixedSize);
+
+ QBoxLayout layout(QBoxLayout::LeftToRight, testWindow());
+ tableView.setModel(&model);
+ layout.addWidget(&tableView);
+
+ takeStandardSnapshots();
+
+ // Hide grid
+ tableView.setShowGrid(false);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "hideGrid");
+ tableView.setShowGrid(true);
+
+ // click item 0,0
+ QPoint clickTarget = tableView.visualRect(model.index(0,0)).center();
+ QTest::mouseClick(tableView.viewport(),Qt::MouseButton::LeftButton,
+ Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "clickFirstItem");
+
+ // click item 0,1 if it exists
+ if (numberColumns > 1) {
+ clickTarget = tableView.visualRect(model.index(0,1)).center();
+ QTest::mouseClick(tableView.viewport(),Qt::MouseButton::LeftButton,
+ Qt::KeyboardModifiers(), clickTarget,0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "clickSecondItem");
+ }
+
+ tableView.clearSelection();
+
+ // Hide first row and column
+ tableView.setRowHidden(0, true);
+ tableView.setColumnHidden(0, true);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "hideFirstRowColumn");
+ tableView.setRowHidden(0, false);
+ tableView.setColumnHidden(0, false);
+
+ // Select first row
+ tableView.selectRow(0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "selectFirstRow");
+
+ // Select first column
+ tableView.selectColumn(0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "selectFirstColumn");
+}
+
+void tst_Widgets::tst_QTreeView_data()
+{
+ QTest::addColumn<bool>("showHeader");
+ QTest::addColumn<bool>("hasIcons");
+ QTest::addColumn<bool>("alternatingRowColors");
+ QTest::addColumn<QSize>("fixedSize");
+ QTest::addColumn<int>("treeHeight");
+ QTest::addColumn<int>("itemsPerNode");
+
+ // QSize() => variable size
+ QTest::newRow("HeaderIcons_4_3") << true << true << false << QSize() << 3 << 2;
+ QTest::newRow("NoHeaderNoIcons_4_4") << false << false << false << QSize(100, 350) << 3 << 2;
+ QTest::newRow("AlternatingRows") << true << true << true << QSize() << 3 << 2;
+}
+
+void tst_Widgets::tst_QTreeView()
+{
+ QFETCH(bool, showHeader);
+ QFETCH(bool, hasIcons);
+ QFETCH(bool, alternatingRowColors);
+ QFETCH(QSize, fixedSize);
+ QFETCH(int, treeHeight);
+ QFETCH(int, itemsPerNode);
+ QVERIFY(treeHeight > 0 && itemsPerNode > 0);
+
+ QTreeView treeView(testWindow());
+ fixedSize.isValid() ? treeView.setFixedSize(fixedSize)
+ : treeView.setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents);
+
+ QStandardItemModel model(&treeView);
+ showHeader ? model.setHorizontalHeaderItem(0, new QStandardItem("TreeHeader"))
+ : treeView.setHeaderHidden(true);
+
+ treeView.setAlternatingRowColors(alternatingRowColors);
+
+ // Populate tree model
+ for (int i = 0; i < itemsPerNode; ++i) {
+ QStandardItem* root = tst_QTreeView_populateItem(treeHeight, i, hasIcons);
+ tst_QTreeView_populateTree(root,treeHeight - 1,itemsPerNode, hasIcons);
+ model.appendRow(root);
+ }
+
+ treeView.setModel(&model);
+ QBoxLayout layout(QBoxLayout::LeftToRight, testWindow());
+ layout.addWidget(&treeView);
+ testWindow()->setLayout(&layout);
+
+ treeView.expandAll();
+ treeView.resizeColumnToContents(0);
+ takeStandardSnapshots();
+
+ // Partly expand if possible
+ if (treeHeight > 1) {
+ treeView.expandToDepth(1);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "partlyExpanded");
+ }
+
+ // Click on first node
+ QPoint clickTarget = treeView.visualRect(model.index(0, 0)).center();
+ QTest::mouseClick(treeView.viewport(),Qt::MouseButton::LeftButton,
+ Qt::KeyboardModifiers(), clickTarget, 0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "clickFirstNode");
+
+ // Hide first row
+ treeView.setRowHidden(0, model.index(0, 0), true);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "hideFirstRow");
+ treeView.setRowHidden(0, model.index(0, 0), false);
+
+ // Click on second row if it exists
+ if (itemsPerNode > 1) {
+ clickTarget = treeView.visualRect(model.index(1, 0)).center();
+ QTest::mouseClick(treeView.viewport(), Qt::MouseButton::LeftButton,
+ Qt::KeyboardModifiers(), clickTarget, 0);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "clickSecondNode");
+ }
+}
+
+void tst_Widgets::tst_QTreeView_populateTree(QStandardItem* node, int height, int itemsPerNode, bool hasIcon)
+{
+ QList<QStandardItem*> items;
+ for (int i = 0; i < itemsPerNode; ++i) {
+ if (height == 0) {
+ items.append(tst_QTreeView_populateItem(height, i, hasIcon));
+ } else {
+ QStandardItem* item = tst_QTreeView_populateItem(height, i, hasIcon);
+ tst_QTreeView_populateTree(item, height - 1, itemsPerNode, hasIcon);
+ items.append(item);
+ }
+ }
+ return node->appendColumn(items);
+}
+
+QStandardItem* tst_Widgets::tst_QTreeView_populateItem(int height, int number, bool hasIcon)
+{
+ static int icon = 0;
+ static int itemCount = 0;
+
+ QStandardItem* item;
+ const QString itemText = QString("%1/%2/%3").arg(height).arg(number).arg(itemCount);
+ ++itemCount;
+
+ if (hasIcon) {
+ item = new QStandardItem(QApplication::style()->standardIcon
+ (static_cast<QStyle::StandardPixmap>(icon)), itemText);
+
+ icon = (icon + 1) % numberStandardIcons;
+ } else {
+ item = new QStandardItem(itemText);
+ }
+ return item;
+}
+
+void tst_Widgets::tst_QLineEdit_data()
+{
+ QTest::addColumn<bool>("hasFrame");
+ QTest::addColumn<QLineEdit::EchoMode>("echoMode");
+ QTest::addColumn<QString>("placeHolderText");
+ QTest::addColumn<QString>("text");
+
+ QTest::newRow("framePassword") << true << QLineEdit::Password << "password" << "secret";
+ QTest::newRow("noFrameCleartext") << false << QLineEdit::Normal << "text" << "this is a text";
+}
+
+void tst_Widgets::tst_QLineEdit()
+{
+ QFETCH(const bool, hasFrame);
+ QFETCH(const QLineEdit::EchoMode, echoMode);
+ QFETCH(const QString, placeHolderText);
+ QFETCH(const QString, text);
+
+ QLineEdit lineEdit(testWindow());
+ lineEdit.setFrame(hasFrame);
+ lineEdit.setEchoMode(echoMode);
+ lineEdit.setPlaceholderText(placeHolderText);
+
+ QHBoxLayout layout;
+ layout.addWidget(&lineEdit);
+ testWindow()->setLayout(&layout);
+ takeStandardSnapshots();
+
+ lineEdit.setText(text);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "setText");
+
+ lineEdit.setAlignment(Qt::AlignRight);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "alignedRight");
+
+ lineEdit.setAlignment(Qt::AlignCenter);
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "alignedCenter");
+
+ lineEdit.setSelection(0,text.size());
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "textSelected");
+}
+
+void tst_Widgets::tst_QMenu_data()
+{
+ QTest::addColumn<QStringList>("actions");
+
+ const QStringList menu1 = {"Text", "", "TextAndIcon", "", "SubMenu", "", "Checked"};
+ QTest::newRow("showMenuPopup") << menu1;
+}
+
+void tst_Widgets::tst_QMenu()
+{
+ QFETCH(const QStringList, actions);
+
+ testWindow()->resize(300, 200);
+
+ QBoxLayout layout(QBoxLayout::TopToBottom);
+ QMenu menu1;
+
+ for (const auto& menuItem : actions) {
+ if (!menuItem.isEmpty()) {
+ if (menuItem == "Text") {
+ menu1.addAction(QString("MenuItem"));
+ menu1.addAction(QString(""));
+ } else if (menuItem == "TextAndIcon") {
+ // Using pixmap icon
+ QPixmap pix(10, 10);
+ pix.fill(Qt::green);
+ menu1.addAction(QIcon(pix), QString("MenuWithIcon"));
+ menu1.addAction(QIcon(), QString("MenuNoIcon"));
+ } else if (menuItem == "SubMenu") {
+ QMenu* submenu = menu1.addMenu(QString("&Submenu1"));
+ submenu->addAction("SubMenuA");
+ submenu->addAction("SubMenuB");
+ } else if (menuItem == "Checked") {
+ auto checked = menu1.addAction(QString("MenuChecked"));
+ checked->setCheckable(true);
+ checked->setChecked(true);
+ auto notChecked = menu1.addAction(QString("MenuNotChecked"));
+ notChecked->setCheckable(true);
+ notChecked->setChecked(false);
+ }
+ } else {
+ menu1.addSeparator();
+ }
+ }
+
+ layout.addWidget(&menu1);
+ testWindow()->setLayout(&layout);
+
+ testWindow()->show();
+ QVERIFY(QTest::qWaitForWindowExposed(testWindow()));
+ QRect testWindowRect(testWindow()->geometry());
+ // There can be rounded corners in the window and this leads to test
+ // case to be fuzzy. Adjust window rectangle that need to be captured
+ int adjustPixel = menu1.geometry().left();
+ testWindowRect.adjust(adjustPixel, adjustPixel, -adjustPixel, -adjustPixel);
+ QBASELINE_CHECK_DEFERRED(takeScreenSnapshot(testWindowRect), "showitems");
+
+ // Normal menu item with text
+ QTest::keyClick(&menu1, Qt::Key_Down);
+ QBASELINE_CHECK_DEFERRED(takeScreenSnapshot(testWindowRect), "selectmenutext");
+ QTest::keyClick(&menu1, Qt::Key_Down);
+ QBASELINE_CHECK_DEFERRED(takeScreenSnapshot(testWindowRect), "selectmenunotext");
+
+ // Menu with icon and text
+ QTest::keyClick(&menu1, Qt::Key_Down);
+ QBASELINE_CHECK_DEFERRED(takeScreenSnapshot(testWindowRect), "selectmenuwithicon");
+ QTest::keyClick(&menu1, Qt::Key_Down);
+ QBASELINE_CHECK_DEFERRED(takeScreenSnapshot(testWindowRect), "selectmenuwithnullicon");
+
+ // Sub-menu items
+ QTest::keyClick(&menu1, Qt::Key_Down);
+ QTest::keyClick(&menu1, Qt::Key_Right);
+ QBASELINE_CHECK_DEFERRED(takeScreenSnapshot(testWindowRect), "selectsubmenu");
+ QTest::keyClick(&menu1, Qt::Key_Left);
+
+ // Checked menu
+ QTest::keyClick(&menu1, Qt::Key_Down);
+ QBASELINE_CHECK_DEFERRED(takeScreenSnapshot(testWindowRect), "selectmenuchecked");
+ QTest::keyClick(&menu1, Qt::Key_Down);
+ QBASELINE_CHECK_DEFERRED(takeScreenSnapshot(testWindowRect), "selectmenunotchecked");
+}
+
+void tst_Widgets::tst_QCombobox_data()
+{
+ QTest::addColumn<bool>("hasFrame");
+ QTest::addColumn<bool>("isEditable");
+
+ QTest::addRow("frameNonEditable") << true << false;
+ QTest::addRow("frameEditable") << true << true;
+ QTest::addRow("noFrameNonEditable") << false << false;
+ QTest::addRow("noFrameEditable") << false << true;
+}
+
+void tst_Widgets::tst_QCombobox()
+{
+ QFETCH(const bool, hasFrame);
+ QFETCH(const bool, isEditable);
+
+ testWindow()->resize(300, 300);
+
+ QScopedPointer<QComboBox> combobox(new QComboBox(testWindow()));
+ QStringList items;
+ items << tr("Item1") << tr("Item2") << tr("Item3");
+ QStringListModel* itemModel = new QStringListModel(items, this);
+ combobox->setModel(itemModel);
+ combobox->setFrame(hasFrame);
+ combobox->setEditable(isEditable);
+
+ QHBoxLayout layout;
+ layout.addWidget(combobox.get());
+ testWindow()->setLayout(&layout);
+ takeStandardSnapshots();
+
+ QTest::keyClick(combobox.get(), Qt::Key_Down, Qt::AltModifier);
+ QBASELINE_CHECK_DEFERRED(takeScreenSnapshot(testWindow()->geometry()), "combobox");
+}
+
+void tst_Widgets::tst_QCommandLinkButton_data()
+{
+ QTest::addColumn<bool>("flat");
+ QTest::addColumn<QString>("description");
+
+ QTest::addRow("flatDescription") << true << QString("Command button very specific to windows vista");
+ QTest::addRow("flatNoDescription") << true << QString("");
+ QTest::addRow("noFlatNoDescription") << false << QString("");
+}
+
+void tst_Widgets::tst_QCommandLinkButton()
+{
+ QFETCH(const bool, flat);
+ QFETCH(const QString, description);
+
+ QScopedPointer<QCommandLinkButton> commandLink(new QCommandLinkButton(QString("CommandLink"), description, testWindow()));
+ commandLink->setFlat(flat);
+ commandLink->setDescription(description);
+
+ QHBoxLayout layout;
+ layout.addWidget(commandLink.get());
+ testWindow()->setLayout(&layout);
+ takeStandardSnapshots();
+}
+
+void tst_Widgets::tst_QLCDNumber_data()
+{
+ QTest::addColumn<int>("segmentstyle");
+
+ QTest::addRow("outline") << 0;
+ QTest::addRow("filled") << 1;
+ QTest::addRow("flat") << 2;
+}
+
+void tst_Widgets::tst_QLCDNumber()
+{
+ QFETCH(const int, segmentstyle);
+
+ testWindow()->resize(100, 100);
+
+ QScopedPointer<QLCDNumber> lcdNumber(new QLCDNumber(99, testWindow()));
+ lcdNumber->setHexMode();
+ lcdNumber->setSegmentStyle(static_cast<QLCDNumber::SegmentStyle>(segmentstyle));
+
+
+ QHBoxLayout layout;
+ layout.addWidget(lcdNumber.get());
+ testWindow()->setLayout(&layout);
+
+ QBASELINE_CHECK_DEFERRED(takeSnapshot(), "lcdnumber");
+}
+
#define main _realmain
QTEST_MAIN(tst_Widgets)
#undef main
int main(int argc, char *argv[])
{
- qSetGlobalQHashSeed(0); // Avoid rendering variations caused by QHash randomization
+ // Avoid rendering variations caused by QHash randomization
+ QHashSeed::setDeterministicGlobalSeed();
QBaselineTest::handleCmdLineArgs(&argc, &argv);
return _realmain(argc, argv);
diff --git a/tests/benchmarks/CMakeLists.txt b/tests/benchmarks/CMakeLists.txt
index a59ba35e50..f967392ecb 100644
--- a/tests/benchmarks/CMakeLists.txt
+++ b/tests/benchmarks/CMakeLists.txt
@@ -1,7 +1,7 @@
-# Generated from benchmarks.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(corelib)
-add_subdirectory(sql)
if(TARGET Qt::DBus)
add_subdirectory(dbus)
endif()
@@ -11,6 +11,9 @@ endif()
if(TARGET Qt::Network)
add_subdirectory(network)
endif()
+if(TARGET Qt::Sql)
+ add_subdirectory(sql)
+endif()
if(TARGET Qt::Test)
add_subdirectory(testlib)
endif()
diff --git a/tests/benchmarks/corelib/CMakeLists.txt b/tests/benchmarks/corelib/CMakeLists.txt
index ff30862180..855e7ee2fa 100644
--- a/tests/benchmarks/corelib/CMakeLists.txt
+++ b/tests/benchmarks/corelib/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from corelib.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(io)
add_subdirectory(itemmodels)
@@ -10,3 +11,4 @@ add_subdirectory(thread)
add_subdirectory(time)
add_subdirectory(tools)
add_subdirectory(plugin)
+add_subdirectory(serialization)
diff --git a/tests/benchmarks/corelib/io/CMakeLists.txt b/tests/benchmarks/corelib/io/CMakeLists.txt
index 8d4b556abc..e9bf2292c0 100644
--- a/tests/benchmarks/corelib/io/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
add_subdirectory(qdir)
add_subdirectory(qdiriterator)
add_subdirectory(qfile)
diff --git a/tests/benchmarks/corelib/io/qdir/10000/CMakeLists.txt b/tests/benchmarks/corelib/io/qdir/10000/CMakeLists.txt
index d1feaa5f18..142c13aceb 100644
--- a/tests/benchmarks/corelib/io/qdir/10000/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qdir/10000/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qdir_10000 Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qdir_10000
SOURCES
tst_bench_qdir_10000.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/io/qdir/10000/tst_bench_qdir_10000.cpp b/tests/benchmarks/corelib/io/qdir/10000/tst_bench_qdir_10000.cpp
index b22c15b07f..a53742b536 100644
--- a/tests/benchmarks/corelib/io/qdir/10000/tst_bench_qdir_10000.cpp
+++ b/tests/benchmarks/corelib/io/qdir/10000/tst_bench_qdir_10000.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QTest>
#include <QDirIterator>
@@ -57,24 +34,14 @@ public slots:
}
void cleanupTestCase()
{
- {
- QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
- testdir.setSorting(QDir::Unsorted);
- testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden);
- foreach (const QString &filename, testdir.entryList()) {
- testdir.remove(filename);
- }
- }
- const QDir temp = QDir(QDir::tempPath());
- temp.rmdir(QLatin1String("test_speed"));
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
+ QVERIFY(testdir.removeRecursively());
}
private slots:
- void baseline() {}
-
void sizeSpeed()
{
- QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QBENCHMARK {
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QFileInfoList fileInfoList = testdir.entryInfoList(QDir::Files, QDir::Unsorted);
foreach (const QFileInfo &fileInfo, fileInfoList) {
fileInfo.isDir();
@@ -84,8 +51,8 @@ private slots:
}
void sizeSpeedIterator()
{
- QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QBENCHMARK {
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QDirIterator dit(testdir.path(), QDir::Files);
while (dit.hasNext()) {
const auto fi = dit.nextFileInfo();
@@ -97,8 +64,8 @@ private slots:
void sizeSpeedWithoutFilter()
{
- QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QBENCHMARK {
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QFileInfoList fileInfoList = testdir.entryInfoList(QDir::NoFilter, QDir::Unsorted);
foreach (const QFileInfo &fileInfo, fileInfoList) {
fileInfo.size();
@@ -107,8 +74,8 @@ private slots:
}
void sizeSpeedWithoutFilterIterator()
{
- QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QBENCHMARK {
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
QDirIterator dit(testdir.path());
while (dit.hasNext()) {
const auto fi = dit.nextFileInfo();
@@ -120,9 +87,9 @@ private slots:
void sizeSpeedWithoutFileInfoList()
{
- QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
- testdir.setSorting(QDir::Unsorted);
QBENCHMARK {
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
+ testdir.setSorting(QDir::Unsorted);
QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Unsorted);
foreach (const QString &filename, fileList) {
QFileInfo fileInfo(filename);
@@ -133,10 +100,10 @@ private slots:
void iDontWantAnyStat()
{
- QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
- testdir.setSorting(QDir::Unsorted);
- testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden);
QBENCHMARK {
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
+ testdir.setSorting(QDir::Unsorted);
+ testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden);
QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Unsorted);
foreach (const QString &filename, fileList) {
Q_UNUSED(filename);
@@ -155,10 +122,10 @@ private slots:
void sorted_byTime()
{
- QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
- testdir.setSorting(QDir::Time);
- testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden);
QBENCHMARK {
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
+ testdir.setSorting(QDir::Time);
+ testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden);
QStringList fileList = testdir.entryList(QDir::NoFilter, QDir::Time);
foreach (const QString &filename, fileList) {
Q_UNUSED(filename);
@@ -166,6 +133,15 @@ private slots:
}
}
+ void sorted_byName()
+ {
+ QBENCHMARK {
+ QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
+ testdir.setFilter(QDir::AllEntries | QDir::System | QDir::Hidden);
+ [[maybe_unused]] auto r = testdir.entryInfoList(QDir::NoFilter, QDir::Name);
+ }
+ }
+
void sizeSpeedWithoutFilterLowLevel()
{
QDir testdir(QDir::tempPath() + QLatin1String("/test_speed"));
@@ -175,22 +151,22 @@ private slots:
wcscpy(appendedPath, dirpath);
wcscat(appendedPath, L"\\*");
- WIN32_FIND_DATA fd;
- HANDLE hSearch = FindFirstFileW(appendedPath, &fd);
- QVERIFY(hSearch != INVALID_HANDLE_VALUE);
-
QBENCHMARK {
+ WIN32_FIND_DATA fd;
+ HANDLE hSearch = FindFirstFileW(appendedPath, &fd);
+ QVERIFY(hSearch != INVALID_HANDLE_VALUE);
+
do {
} while (FindNextFile(hSearch, &fd));
+ FindClose(hSearch);
}
- FindClose(hSearch);
#else
- DIR *dir = opendir(qPrintable(testdir.absolutePath()));
- QVERIFY(dir);
-
QVERIFY(!chdir(qPrintable(testdir.absolutePath())));
QBENCHMARK {
+ DIR *dir = opendir(qPrintable(testdir.absolutePath()));
+ QVERIFY(dir);
+
struct dirent *item = readdir(dir);
while (item) {
char *fileName = item->d_name;
@@ -200,8 +176,8 @@ private slots:
item = readdir(dir);
}
+ closedir(dir);
}
- closedir(dir);
#endif
}
};
diff --git a/tests/benchmarks/corelib/io/qdir/tree/4.6.0-list.txt b/tests/benchmarks/corelib/io/qdir/tree/4.6.0-list.txt
index ee5f7eabc1..6f1a208fe0 100644
--- a/tests/benchmarks/corelib/io/qdir/tree/4.6.0-list.txt
+++ b/tests/benchmarks/corelib/io/qdir/tree/4.6.0-list.txt
@@ -7983,8 +7983,6 @@
qeventloop.cpp
qeventloop.h
qfunctions_p.h
- qfunctions_vxworks.cpp
- qfunctions_vxworks.h
qfunctions_wince.cpp
qfunctions_wince.h
qguard_p.h
diff --git a/tests/benchmarks/corelib/io/qdir/tree/CMakeLists.txt b/tests/benchmarks/corelib/io/qdir/tree/CMakeLists.txt
index 32dea04edc..f60c108480 100644
--- a/tests/benchmarks/corelib/io/qdir/tree/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qdir/tree/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qdir_tree Binary:
#####################################################################
@@ -5,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qdir_tree
SOURCES
tst_bench_qdir_tree.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/io/qdir/tree/tst_bench_qdir_tree.cpp b/tests/benchmarks/corelib/io/qdir/tree/tst_bench_qdir_tree.cpp
index d960cb41e2..4f122c876c 100644
--- a/tests/benchmarks/corelib/io/qdir/tree/tst_bench_qdir_tree.cpp
+++ b/tests/benchmarks/corelib/io/qdir/tree/tst_bench_qdir_tree.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QTest>
@@ -94,7 +69,7 @@ private slots:
stack.push(line);
line = prefix;
- for (const QByteArray &pathElement : qAsConst(stack))
+ for (const QByteArray &pathElement : std::as_const(stack))
line += pathElement;
if (line.endsWith('/'))
diff --git a/tests/benchmarks/corelib/io/qdiriterator/CMakeLists.txt b/tests/benchmarks/corelib/io/qdiriterator/CMakeLists.txt
index f250a9627a..6a4579d35d 100644
--- a/tests/benchmarks/corelib/io/qdiriterator/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qdiriterator/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qdiriterator Binary:
#####################################################################
@@ -6,7 +9,7 @@ qt_internal_add_benchmark(tst_bench_qdiriterator
SOURCES
tst_bench_qdiriterator.cpp
qfilesystemiterator.cpp qfilesystemiterator.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.cpp b/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.cpp
index fe68d9164d..16b64cf362 100644
--- a/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.cpp
+++ b/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.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
/*!
\since 4.5
diff --git a/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.h b/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.h
index 26bd2f59d9..479ce7b392 100644
--- a/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.h
+++ b/tests/benchmarks/corelib/io/qdiriterator/qfilesystemiterator.h
@@ -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
#ifndef QFILESYSTEMITERATOR_H
#define QFILESYSTEMITERATOR_H
diff --git a/tests/benchmarks/corelib/io/qdiriterator/tst_bench_qdiriterator.cpp b/tests/benchmarks/corelib/io/qdiriterator/tst_bench_qdiriterator.cpp
index e22f235914..66448bf838 100644
--- a/tests/benchmarks/corelib/io/qdiriterator/tst_bench_qdiriterator.cpp
+++ b/tests/benchmarks/corelib/io/qdiriterator/tst_bench_qdiriterator.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QDirIterator>
+#include <QDirListing>
#include <QString>
#include <qplatformdefs.h>
@@ -48,16 +24,30 @@
#include <filesystem>
#endif
+using namespace Qt::StringLiterals;
+
+constexpr bool forceStat = false;
+
class tst_QDirIterator : public QObject
{
Q_OBJECT
void data();
+
+ const QDir::Filters dirFilters =
+ // QDir::AllEntries | QDir::Hidden | QDir::NoDotAndDotDot
+ QDir::AllEntries | QDir::Hidden
+ //QDir::Files | QDir::NoDotAndDotDot,
+ // QDir::Files,
+ ;
+
private slots:
void posix();
void posix_data() { data(); }
void diriterator();
void diriterator_data() { data(); }
+ void dirlisting();
+ void dirlisting_data() { data(); }
void fsiterator();
void fsiterator_data() { data(); }
void stdRecursiveDirectoryIterator();
@@ -143,9 +133,20 @@ static int posix_helper(const char *dirpath)
QByteArray ba = dirpath;
ba += '/';
ba += entry->d_name;
+ bool isDir = false;
+#if defined(_DIRENT_HAVE_D_TYPE) || defined(Q_OS_BSD4)
+ isDir = entry->d_type == DT_DIR;
+ if (forceStat) {
+ QT_STATBUF st;
+ QT_LSTAT(ba.constData(), &st);
+ }
+#else // d_type not available >>> must stat() to see if it's a dir
QT_STATBUF st;
QT_LSTAT(ba.constData(), &st);
- if (S_ISDIR(st.st_mode))
+ isDir = S_ISDIR(st.st_mode);
+#endif
+
+ if (isDir)
count += posix_helper(ba.constData());
}
@@ -182,14 +183,12 @@ void tst_QDirIterator::diriterator()
QBENCHMARK {
int c = 0;
- QDirIterator dir(dirpath,
- //QDir::AllEntries | QDir::Hidden | QDir::NoDotAndDotDot,
- //QDir::AllEntries | QDir::Hidden,
- QDir::Files,
- QDirIterator::Subdirectories);
+ QDirIterator dir(dirpath, dirFilters, QDirIterator::Subdirectories);
while (dir.hasNext()) {
const auto fi = dir.nextFileInfo();
+ if (forceStat)
+ fi.size();
//printf("%s\n", qPrintable(dir.fileName()));
0 && printf("%d %s\n",
fi.isDir(),
@@ -203,6 +202,28 @@ void tst_QDirIterator::diriterator()
qDebug() << count;
}
+void tst_QDirIterator::dirlisting()
+{
+ QFETCH(QByteArray, dirpath);
+
+ int count = 0;
+
+ QBENCHMARK {
+ int c = 0;
+
+ QDirListing dir(dirpath, dirFilters, QDirListing::IteratorFlag::Recursive);
+
+ for (const auto &dirEntry : dir) {
+ const auto path = dirEntry.filePath();
+ if (forceStat)
+ dirEntry.size();
+ ++c;
+ }
+ count = c;
+ }
+ qDebug() << count;
+}
+
void tst_QDirIterator::fsiterator()
{
QFETCH(QByteArray, dirpath);
@@ -214,14 +235,12 @@ void tst_QDirIterator::fsiterator()
int c = 0;
dump && printf("\n\n\n\n");
- QDirIteratorTest::QFileSystemIterator dir(dirpath,
- //QDir::AllEntries | QDir::Hidden | QDir::NoDotAndDotDot,
- //QDir::AllEntries | QDir::Hidden,
- //QDir::Files | QDir::NoDotAndDotDot,
- QDir::Files,
- QDirIteratorTest::QFileSystemIterator::Subdirectories);
+ QDirIteratorTest::QFileSystemIterator dir(
+ dirpath, dirFilters, QDirIteratorTest::QFileSystemIterator::Subdirectories);
for (; !dir.atEnd(); dir.next()) {
+ if (forceStat)
+ dir.fileInfo().size();
dump && printf("%d %s\n",
dir.fileInfo().isDir(),
//qPrintable(dir.fileInfo().absoluteFilePath()),
@@ -242,10 +261,16 @@ void tst_QDirIterator::stdRecursiveDirectoryIterator()
int count = 0;
+ namespace fs = std::filesystem;
+ std::error_code ec;
+
+ // Note that fs::recursive_directory_iterator may be calling stat() internally,
+ // that depends on the implementation. So the benchmark times might "seem" higher
+ // than the other methods in this source file.
QBENCHMARK {
int c = 0;
- for (auto obj : std::filesystem::recursive_directory_iterator(dirpath.data())) {
- if (obj.is_directory())
+ for (const auto &dirEntry : fs::recursive_directory_iterator(dirpath.data(), ec)) {
+ if (dirEntry.is_directory())
continue;
c++;
}
diff --git a/tests/benchmarks/corelib/io/qfile/CMakeLists.txt b/tests/benchmarks/corelib/io/qfile/CMakeLists.txt
index ed14a31780..0cd6b5fb16 100644
--- a/tests/benchmarks/corelib/io/qfile/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qfile/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qfile.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qfile Binary:
@@ -7,14 +8,11 @@
qt_internal_add_benchmark(tst_bench_qfile
SOURCES
tst_bench_qfile.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Test
)
-#### Keys ignored in scope 1:.:.:qfile.pro:<TRUE>:
-# TEMPLATE = "app"
-
## Scopes:
#####################################################################
diff --git a/tests/benchmarks/corelib/io/qfile/tst_bench_qfile.cpp b/tests/benchmarks/corelib/io/qfile/tst_bench_qfile.cpp
index 015c49ed04..b805726f5f 100644
--- a/tests/benchmarks/corelib/io/qfile/tst_bench_qfile.cpp
+++ b/tests/benchmarks/corelib/io/qfile/tst_bench_qfile.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QTemporaryFile>
@@ -533,13 +508,13 @@ void tst_qfile::readSmallFiles()
}
QBENCHMARK {
- for (QFile *const file : qAsConst(fileList)) {
+ for (QFile *const file : std::as_const(fileList)) {
while (!file->atEnd())
file->read(buffer, blockSize);
}
}
- for (QFile *const file : qAsConst(fileList)) {
+ for (QFile *const file : std::as_const(fileList)) {
file->close();
delete file;
}
@@ -555,11 +530,11 @@ void tst_qfile::readSmallFiles()
}
QBENCHMARK {
- for (QFSFileEngine *const fse : qAsConst(fileList))
+ for (QFSFileEngine *const fse : std::as_const(fileList))
while (fse->read(buffer, blockSize)) {}
}
- for (QFSFileEngine *const fse : qAsConst(fileList)) {
+ for (QFSFileEngine *const fse : std::as_const(fileList)) {
fse->close();
delete fse;
}
@@ -572,14 +547,14 @@ void tst_qfile::readSmallFiles()
fileList.append(::fopen(QFile::encodeName(tempDir.filePath(file)).constData(), "rb"));
QBENCHMARK {
- for (FILE *const cfile : qAsConst(fileList)) {
+ for (FILE *const cfile : std::as_const(fileList)) {
while (!feof(cfile))
[[maybe_unused]] auto f = ::fread(buffer, blockSize, 1, cfile);
::fseek(cfile, 0, SEEK_SET);
}
}
- for (FILE *const cfile : qAsConst(fileList))
+ for (FILE *const cfile : std::as_const(fileList))
::fclose(cfile);
}
break;
diff --git a/tests/benchmarks/corelib/io/qfileinfo/CMakeLists.txt b/tests/benchmarks/corelib/io/qfileinfo/CMakeLists.txt
index 8933b30cf3..84a667ca7d 100644
--- a/tests/benchmarks/corelib/io/qfileinfo/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qfileinfo/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qfileinfo Binary:
#####################################################################
@@ -5,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qfileinfo
SOURCES
tst_bench_qfileinfo.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Test
)
diff --git a/tests/benchmarks/corelib/io/qfileinfo/tst_bench_qfileinfo.cpp b/tests/benchmarks/corelib/io/qfileinfo/tst_bench_qfileinfo.cpp
index 21dbf47ba2..2c626dde70 100644
--- a/tests/benchmarks/corelib/io/qfileinfo/tst_bench_qfileinfo.cpp
+++ b/tests/benchmarks/corelib/io/qfileinfo/tst_bench_qfileinfo.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 <QDebug>
#include <qtest.h>
#include <QTest>
diff --git a/tests/benchmarks/corelib/io/qiodevice/CMakeLists.txt b/tests/benchmarks/corelib/io/qiodevice/CMakeLists.txt
index ab8abc8788..133a9a1ac3 100644
--- a/tests/benchmarks/corelib/io/qiodevice/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qiodevice/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qiodevice Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qiodevice
SOURCES
tst_bench_qiodevice.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/io/qiodevice/tst_bench_qiodevice.cpp b/tests/benchmarks/corelib/io/qiodevice/tst_bench_qiodevice.cpp
index 47e616b409..cae90631ee 100644
--- a/tests/benchmarks/corelib/io/qiodevice/tst_bench_qiodevice.cpp
+++ b/tests/benchmarks/corelib/io/qiodevice/tst_bench_qiodevice.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 <QDebug>
#include <QIODevice>
#include <QFile>
diff --git a/tests/benchmarks/corelib/io/qprocess/CMakeLists.txt b/tests/benchmarks/corelib/io/qprocess/CMakeLists.txt
index d599539142..3f3ffd3d70 100644
--- a/tests/benchmarks/corelib/io/qprocess/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qprocess/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qprocess.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(testProcessLoopback)
add_subdirectory(test)
diff --git a/tests/benchmarks/corelib/io/qprocess/test/CMakeLists.txt b/tests/benchmarks/corelib/io/qprocess/test/CMakeLists.txt
index b08034e71d..c8837d3d65 100644
--- a/tests/benchmarks/corelib/io/qprocess/test/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qprocess/test/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qprocess Binary:
#####################################################################
@@ -5,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qprocess
SOURCES
../tst_bench_qprocess.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Test
)
diff --git a/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/CMakeLists.txt b/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/CMakeLists.txt
index a55a1e113a..cd486bd9cc 100644
--- a/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## testProcessLoopback Binary:
#####################################################################
diff --git a/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/loopback.cpp b/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/loopback.cpp
index 1773ba7496..1f47f6b0f1 100644
--- a/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/loopback.cpp
+++ b/tests/benchmarks/corelib/io/qprocess/testProcessLoopback/loopback.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 <stdio.h>
diff --git a/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp b/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp
index 0bc0332c6f..9cf87a6653 100644
--- a/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp
+++ b/tests/benchmarks/corelib/io/qprocess/tst_bench_qprocess.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QSignalSpy>
@@ -68,9 +43,9 @@ void tst_QProcess::echoTest_performance()
while (stopWatch.elapsed() < 2000) {
process.write(array);
while (process.bytesToWrite() > 0) {
- int readCount = readyReadSpy.count();
+ int readCount = readyReadSpy.size();
QVERIFY(process.waitForBytesWritten(5000));
- if (readyReadSpy.count() == readCount)
+ if (readyReadSpy.size() == readCount)
QVERIFY(process.waitForReadyRead(5000));
}
diff --git a/tests/benchmarks/corelib/io/qtemporaryfile/CMakeLists.txt b/tests/benchmarks/corelib/io/qtemporaryfile/CMakeLists.txt
index 5342cf8912..a2a33a0dce 100644
--- a/tests/benchmarks/corelib/io/qtemporaryfile/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qtemporaryfile/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qtemporaryfile Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qtemporaryfile
SOURCES
tst_bench_qtemporaryfile.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/io/qtemporaryfile/tst_bench_qtemporaryfile.cpp b/tests/benchmarks/corelib/io/qtemporaryfile/tst_bench_qtemporaryfile.cpp
index fb855f1eda..c72b525827 100644
--- a/tests/benchmarks/corelib/io/qtemporaryfile/tst_bench_qtemporaryfile.cpp
+++ b/tests/benchmarks/corelib/io/qtemporaryfile/tst_bench_qtemporaryfile.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 <QDebug>
#include <QIODevice>
#include <QFile>
diff --git a/tests/benchmarks/corelib/io/qtextstream/CMakeLists.txt b/tests/benchmarks/corelib/io/qtextstream/CMakeLists.txt
index b54610ad74..5e39b2fd90 100644
--- a/tests/benchmarks/corelib/io/qtextstream/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qtextstream/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qtextstream Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qtextstream
SOURCES
tst_bench_qtextstream.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/io/qtextstream/tst_bench_qtextstream.cpp b/tests/benchmarks/corelib/io/qtextstream/tst_bench_qtextstream.cpp
index 1da0d90c79..74552b85cf 100644
--- a/tests/benchmarks/corelib/io/qtextstream/tst_bench_qtextstream.cpp
+++ b/tests/benchmarks/corelib/io/qtextstream/tst_bench_qtextstream.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 David Faure <david.faure@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) 2014 David Faure <david.faure@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QIODevice>
diff --git a/tests/benchmarks/corelib/io/qurl/CMakeLists.txt b/tests/benchmarks/corelib/io/qurl/CMakeLists.txt
index e9c155ad3f..fc8d48450d 100644
--- a/tests/benchmarks/corelib/io/qurl/CMakeLists.txt
+++ b/tests/benchmarks/corelib/io/qurl/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_qurl Binary:
#####################################################################
@@ -5,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qurl
SOURCES
tst_bench_qurl.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/io/qurl/tst_bench_qurl.cpp b/tests/benchmarks/corelib/io/qurl/tst_bench_qurl.cpp
index 8165f8d059..87c4f51816 100644
--- a/tests/benchmarks/corelib/io/qurl/tst_bench_qurl.cpp
+++ b/tests/benchmarks/corelib/io/qurl/tst_bench_qurl.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 <qurl.h>
#include <qtest.h>
@@ -188,7 +163,7 @@ void tst_QUrl::equality()
QUrl url("pics/avatar.png");
QUrl url2("pics/avatar2.png");
QBENCHMARK {
- url == url2;
+ [[maybe_unused]] auto r = url == url2;
}
}
}
diff --git a/tests/benchmarks/corelib/itemmodels/qsortfilterproxymodel/CMakeLists.txt b/tests/benchmarks/corelib/itemmodels/qsortfilterproxymodel/CMakeLists.txt
index 4ae255bbb4..f6f45fa1f4 100644
--- a/tests/benchmarks/corelib/itemmodels/qsortfilterproxymodel/CMakeLists.txt
+++ b/tests/benchmarks/corelib/itemmodels/qsortfilterproxymodel/CMakeLists.txt
@@ -1,6 +1,9 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_benchmark(tst_bench_qsortfilterproxymodel
SOURCES
tst_bench_qsortfilterproxymodel.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/itemmodels/qsortfilterproxymodel/tst_bench_qsortfilterproxymodel.cpp b/tests/benchmarks/corelib/itemmodels/qsortfilterproxymodel/tst_bench_qsortfilterproxymodel.cpp
index 7c641a42ae..0411972ce3 100644
--- a/tests/benchmarks/corelib/itemmodels/qsortfilterproxymodel/tst_bench_qsortfilterproxymodel.cpp
+++ b/tests/benchmarks/corelib/itemmodels/qsortfilterproxymodel/tst_bench_qsortfilterproxymodel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 Igor Kushnir <igorkuo@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) 2021 Igor Kushnir <igorkuo@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QSortFilterProxyModel>
#include <QString>
@@ -56,6 +31,7 @@ class tst_QSortFilterProxyModel : public QObject
private slots:
void clearFilter_data();
void clearFilter();
+ void setSourceModel();
private:
QStringList m_numberList; ///< Cache the strings for efficiency.
@@ -97,7 +73,7 @@ void tst_QSortFilterProxyModel::clearFilter()
{
QFETCH(const int, itemCount);
resizeNumberList(m_numberList, itemCount);
- QStringListModel model(qAsConst(m_numberList));
+ QStringListModel model(std::as_const(m_numberList));
QCOMPARE(model.rowCount(), itemCount);
QSortFilterProxyModel proxy;
@@ -118,6 +94,19 @@ void tst_QSortFilterProxyModel::clearFilter()
QCOMPARE(proxy.rowCount(), itemCount);
}
+void tst_QSortFilterProxyModel::setSourceModel()
+{
+ QStringListModel model1;
+ QStringListModel model2;
+
+ QSortFilterProxyModel proxy;
+
+ QBENCHMARK {
+ proxy.setSourceModel(&model1);
+ proxy.setSourceModel(&model2);
+ }
+}
+
QTEST_MAIN(tst_QSortFilterProxyModel)
#include "tst_bench_qsortfilterproxymodel.moc"
diff --git a/tests/benchmarks/corelib/json/CMakeLists.txt b/tests/benchmarks/corelib/json/CMakeLists.txt
index 657a268741..f4feb1ebdb 100644
--- a/tests/benchmarks/corelib/json/CMakeLists.txt
+++ b/tests/benchmarks/corelib/json/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from json.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qtjson Binary:
@@ -7,9 +8,6 @@
qt_internal_add_benchmark(tst_bench_qtjson
SOURCES
tst_bench_qtjson.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:json.pro:<TRUE>:
-# TESTDATA = "numbers.json" "test.json"
diff --git a/tests/benchmarks/corelib/json/tst_bench_qtjson.cpp b/tests/benchmarks/corelib/json/tst_bench_qtjson.cpp
index 1dc7fb322c..2202b9a576 100644
--- a/tests/benchmarks/corelib/json/tst_bench_qtjson.cpp
+++ b/tests/benchmarks/corelib/json/tst_bench_qtjson.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <QVariantMap>
#include <qjsondocument.h>
#include <qjsonobject.h>
diff --git a/tests/benchmarks/corelib/kernel/CMakeLists.txt b/tests/benchmarks/corelib/kernel/CMakeLists.txt
index 07f6ac557e..137ef37298 100644
--- a/tests/benchmarks/corelib/kernel/CMakeLists.txt
+++ b/tests/benchmarks/corelib/kernel/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from kernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(events)
add_subdirectory(qmetatype)
diff --git a/tests/benchmarks/corelib/kernel/events/CMakeLists.txt b/tests/benchmarks/corelib/kernel/events/CMakeLists.txt
index b5440891ee..ba175fd3a0 100644
--- a/tests/benchmarks/corelib/kernel/events/CMakeLists.txt
+++ b/tests/benchmarks/corelib/kernel/events/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_events Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_events
SOURCES
tst_bench_events.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/kernel/events/tst_bench_events.cpp b/tests/benchmarks/corelib/kernel/events/tst_bench_events.cpp
index cfe5b1bcd1..17eb838af2 100644
--- a/tests/benchmarks/corelib/kernel/events/tst_bench_events.cpp
+++ b/tests/benchmarks/corelib/kernel/events/tst_bench_events.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 <QtCore>
#include <qtest.h>
@@ -113,6 +88,7 @@ void EventsBench::noEvent()
QBENCHMARK {
val += tst.foo(1);
}
+ QVERIFY(val > 0);
}
void EventsBench::sendEvent_data()
diff --git a/tests/benchmarks/corelib/kernel/qcoreapplication/CMakeLists.txt b/tests/benchmarks/corelib/kernel/qcoreapplication/CMakeLists.txt
index 0872bccf60..1a553199d3 100644
--- a/tests/benchmarks/corelib/kernel/qcoreapplication/CMakeLists.txt
+++ b/tests/benchmarks/corelib/kernel/qcoreapplication/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qcoreapplication Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qcoreapplication
SOURCES
tst_bench_qcoreapplication.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/kernel/qcoreapplication/tst_bench_qcoreapplication.cpp b/tests/benchmarks/corelib/kernel/qcoreapplication/tst_bench_qcoreapplication.cpp
index 86047a0b07..d2ff489784 100644
--- a/tests/benchmarks/corelib/kernel/qcoreapplication/tst_bench_qcoreapplication.cpp
+++ b/tests/benchmarks/corelib/kernel/qcoreapplication/tst_bench_qcoreapplication.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2011 Robin Burchell <robin+qt@viroteck.net>
-** 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) 2011 Robin Burchell <robin+qt@viroteck.net>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore>
#include <qtest.h>
#include <qcoreapplication.h>
@@ -35,6 +10,9 @@ Q_OBJECT
private slots:
void event_posting_benchmark_data();
void event_posting_benchmark();
+
+ void event_posting_multiple_objects_benchmark_data();
+ void event_posting_multiple_objects_benchmark();
};
void tst_QCoreApplication::event_posting_benchmark_data()
@@ -64,6 +42,29 @@ void tst_QCoreApplication::event_posting_benchmark()
}
}
+void tst_QCoreApplication::event_posting_multiple_objects_benchmark_data()
+{
+ event_posting_benchmark_data();
+}
+
+void tst_QCoreApplication::event_posting_multiple_objects_benchmark()
+{
+ QFETCH(int, size);
+
+ QObject objects[15]; // The size of the array has not been chosen through any meaningful means
+
+ QRandomGenerator gen;
+
+ // benchmark posting & sending events
+ QBENCHMARK {
+ for (int i = 0; i < size; ++i) {
+ QCoreApplication::postEvent(&objects[gen.bounded(0, int(std::size(objects)))],
+ new QTimerEvent(i % 10));
+ }
+ QCoreApplication::sendPostedEvents();
+ }
+}
+
QTEST_MAIN(tst_QCoreApplication)
#include "tst_bench_qcoreapplication.moc"
diff --git a/tests/benchmarks/corelib/kernel/qmetaenum/CMakeLists.txt b/tests/benchmarks/corelib/kernel/qmetaenum/CMakeLists.txt
index 5d7de3704e..78bc30ea73 100644
--- a/tests/benchmarks/corelib/kernel/qmetaenum/CMakeLists.txt
+++ b/tests/benchmarks/corelib/kernel/qmetaenum/CMakeLists.txt
@@ -1,7 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_benchmark(tst_bench_qmetaenum
SOURCES
tst_bench_qmetaenum.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Test
)
diff --git a/tests/benchmarks/corelib/kernel/qmetaenum/tst_bench_qmetaenum.cpp b/tests/benchmarks/corelib/kernel/qmetaenum/tst_bench_qmetaenum.cpp
index ad777a2419..1a88c49993 100644
--- a/tests/benchmarks/corelib/kernel/qmetaenum/tst_bench_qmetaenum.cpp
+++ b/tests/benchmarks/corelib/kernel/qmetaenum/tst_bench_qmetaenum.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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 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) 2021 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
#include <QMetaEnum>
#include <QTest>
diff --git a/tests/benchmarks/corelib/kernel/qmetaobject/CMakeLists.txt b/tests/benchmarks/corelib/kernel/qmetaobject/CMakeLists.txt
index 2afd390439..9e17608c57 100644
--- a/tests/benchmarks/corelib/kernel/qmetaobject/CMakeLists.txt
+++ b/tests/benchmarks/corelib/kernel/qmetaobject/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qmetaobject Binary:
#####################################################################
@@ -5,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qmetaobject
SOURCES
tst_bench_qmetaobject.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
diff --git a/tests/benchmarks/corelib/kernel/qmetaobject/tst_bench_qmetaobject.cpp b/tests/benchmarks/corelib/kernel/qmetaobject/tst_bench_qmetaobject.cpp
index 7da721042b..6b02fb4ba4 100644
--- a/tests/benchmarks/corelib/kernel/qmetaobject/tst_bench_qmetaobject.cpp
+++ b/tests/benchmarks/corelib/kernel/qmetaobject/tst_bench_qmetaobject.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 <QtCore>
#include <QtWidgets/QTreeView>
#include <qtest.h>
diff --git a/tests/benchmarks/corelib/kernel/qmetatype/CMakeLists.txt b/tests/benchmarks/corelib/kernel/qmetatype/CMakeLists.txt
index 8fd20ee111..f24a29d144 100644
--- a/tests/benchmarks/corelib/kernel/qmetatype/CMakeLists.txt
+++ b/tests/benchmarks/corelib/kernel/qmetatype/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qmetatype Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qmetatype
SOURCES
tst_bench_qmetatype.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/kernel/qmetatype/tst_bench_qmetatype.cpp b/tests/benchmarks/corelib/kernel/qmetatype/tst_bench_qmetatype.cpp
index c273cd32a4..94adfa4a8c 100644
--- a/tests/benchmarks/corelib/kernel/qmetatype/tst_bench_qmetatype.cpp
+++ b/tests/benchmarks/corelib/kernel/qmetatype/tst_bench_qmetatype.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 <qtest.h>
#include <QtCore/qmetatype.h>
diff --git a/tests/benchmarks/corelib/kernel/qobject/CMakeLists.txt b/tests/benchmarks/corelib/kernel/qobject/CMakeLists.txt
index fb13e8a59e..15b71f0d60 100644
--- a/tests/benchmarks/corelib/kernel/qobject/CMakeLists.txt
+++ b/tests/benchmarks/corelib/kernel/qobject/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qobject Binary:
#####################################################################
@@ -6,7 +9,7 @@ qt_internal_add_benchmark(tst_bench_qobject
SOURCES
tst_bench_qobject.cpp
object.cpp object.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
diff --git a/tests/benchmarks/corelib/kernel/qobject/object.cpp b/tests/benchmarks/corelib/kernel/qobject/object.cpp
index 11da3f09c1..9e0fba2e98 100644
--- a/tests/benchmarks/corelib/kernel/qobject/object.cpp
+++ b/tests/benchmarks/corelib/kernel/qobject/object.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 "object.h"
void Object::emitSignal0()
diff --git a/tests/benchmarks/corelib/kernel/qobject/object.h b/tests/benchmarks/corelib/kernel/qobject/object.h
index 271c4b9ac6..72705f7f34 100644
--- a/tests/benchmarks/corelib/kernel/qobject/object.h
+++ b/tests/benchmarks/corelib/kernel/qobject/object.h
@@ -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
#ifndef OBJECT_H
#define OBJECT_H
diff --git a/tests/benchmarks/corelib/kernel/qobject/tst_bench_qobject.cpp b/tests/benchmarks/corelib/kernel/qobject/tst_bench_qobject.cpp
index 0f57f2997a..99c15f6317 100644
--- a/tests/benchmarks/corelib/kernel/qobject/tst_bench_qobject.cpp
+++ b/tests/benchmarks/corelib/kernel/qobject/tst_bench_qobject.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 <QtCore>
#include <QtWidgets/QTreeView>
#include <qtest.h>
diff --git a/tests/benchmarks/corelib/kernel/qproperty/CMakeLists.txt b/tests/benchmarks/corelib/kernel/qproperty/CMakeLists.txt
index 42345e6492..1a26f28f05 100644
--- a/tests/benchmarks/corelib/kernel/qproperty/CMakeLists.txt
+++ b/tests/benchmarks/corelib/kernel/qproperty/CMakeLists.txt
@@ -1,8 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_benchmark(tst_bench_qproperty
SOURCES
tst_bench_qproperty.cpp
propertytester.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Test
)
diff --git a/tests/benchmarks/corelib/kernel/qproperty/propertytester.h b/tests/benchmarks/corelib/kernel/qproperty/propertytester.h
index daf55f8396..a89d51c286 100644
--- a/tests/benchmarks/corelib/kernel/qproperty/propertytester.h
+++ b/tests/benchmarks/corelib/kernel/qproperty/propertytester.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef PROPERTYTESTER_H
#define PROPERTYTESTER_H
diff --git a/tests/benchmarks/corelib/kernel/qproperty/tst_bench_qproperty.cpp b/tests/benchmarks/corelib/kernel/qproperty/tst_bench_qproperty.cpp
index ad62ad8075..c91ca1ea11 100644
--- a/tests/benchmarks/corelib/kernel/qproperty/tst_bench_qproperty.cpp
+++ b/tests/benchmarks/corelib/kernel/qproperty/tst_bench_qproperty.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QScopedPointer>
#include <QProperty>
diff --git a/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/CMakeLists.txt b/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/CMakeLists.txt
index 5ba14e43a2..22e04d98a2 100644
--- a/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/CMakeLists.txt
+++ b/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtimer_vs_qmetaobject.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtimer_vs_qmetaobject Binary:
@@ -9,9 +10,6 @@ qt_internal_add_benchmark(qtimer_vs_qmetaobject
tst_qtimer_vs_qmetaobject.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qtimer_vs_qmetaobject.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/tst_qtimer_vs_qmetaobject.cpp b/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/tst_qtimer_vs_qmetaobject.cpp
index 52a726b292..d0b3e21772 100644
--- a/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/tst_qtimer_vs_qmetaobject.cpp
+++ b/tests/benchmarks/corelib/kernel/qtimer_vs_qmetaobject/tst_qtimer_vs_qmetaobject.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 <QtCore>
#include <QTest>
@@ -126,13 +101,9 @@ void qtimer_vs_qmetaobject::bench_data()
void qtimer_vs_qmetaobject::benchBackgroundThread()
{
-#if !QT_CONFIG(cxx11_future)
- QSKIP("This test requires QThread::create");
-#else
QScopedPointer<QThread> thread(QThread::create([this]() { bench(); }));
thread->start();
QVERIFY(thread->wait());
-#endif
}
QTEST_MAIN(qtimer_vs_qmetaobject)
diff --git a/tests/benchmarks/corelib/kernel/qvariant/CMakeLists.txt b/tests/benchmarks/corelib/kernel/qvariant/CMakeLists.txt
index 83e7269ff0..07978956b1 100644
--- a/tests/benchmarks/corelib/kernel/qvariant/CMakeLists.txt
+++ b/tests/benchmarks/corelib/kernel/qvariant/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qvariant Binary:
#####################################################################
@@ -5,15 +8,14 @@
qt_internal_add_benchmark(tst_bench_qvariant
SOURCES
tst_bench_qvariant.cpp
- PUBLIC_LIBRARIES
- Qt::Gui
+ LIBRARIES
Qt::Test
)
## Scopes:
#####################################################################
-qt_internal_extend_target(tst_bench_qvariant CONDITION NOT TARGET Qt::Gui
- PUBLIC_LIBRARIES
- # Remove: gui
+qt_internal_extend_target(tst_bench_qvariant CONDITION TARGET Qt::Gui
+ LIBRARIES
+ Qt::Gui
)
diff --git a/tests/benchmarks/corelib/kernel/qvariant/tst_bench_qvariant.cpp b/tests/benchmarks/corelib/kernel/qvariant/tst_bench_qvariant.cpp
index 1e35cf85f9..8b2e10c125 100644
--- a/tests/benchmarks/corelib/kernel/qvariant/tst_bench_qvariant.cpp
+++ b/tests/benchmarks/corelib/kernel/qvariant/tst_bench_qvariant.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 <QtCore>
#ifdef QT_GUI_LIB
diff --git a/tests/benchmarks/corelib/kernel/qwineventnotifier/CMakeLists.txt b/tests/benchmarks/corelib/kernel/qwineventnotifier/CMakeLists.txt
index 046564ba8e..e78d3250bc 100644
--- a/tests/benchmarks/corelib/kernel/qwineventnotifier/CMakeLists.txt
+++ b/tests/benchmarks/corelib/kernel/qwineventnotifier/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qwineventnotifier Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qwineventnotifier
SOURCES
tst_bench_qwineventnotifier.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/kernel/qwineventnotifier/tst_bench_qwineventnotifier.cpp b/tests/benchmarks/corelib/kernel/qwineventnotifier/tst_bench_qwineventnotifier.cpp
index 33f82731ca..b1f87eabed 100644
--- a/tests/benchmarks/corelib/kernel/qwineventnotifier/tst_bench_qwineventnotifier.cpp
+++ b/tests/benchmarks/corelib/kernel/qwineventnotifier/tst_bench_qwineventnotifier.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QtCore/qglobal.h>
diff --git a/tests/benchmarks/corelib/mimetypes/CMakeLists.txt b/tests/benchmarks/corelib/mimetypes/CMakeLists.txt
index c825780e69..f66834de23 100644
--- a/tests/benchmarks/corelib/mimetypes/CMakeLists.txt
+++ b/tests/benchmarks/corelib/mimetypes/CMakeLists.txt
@@ -1,3 +1,4 @@
-# Generated from mimetypes.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qmimedatabase)
diff --git a/tests/benchmarks/corelib/mimetypes/qmimedatabase/CMakeLists.txt b/tests/benchmarks/corelib/mimetypes/qmimedatabase/CMakeLists.txt
index 9bddaf57bc..3d4eb7b46f 100644
--- a/tests/benchmarks/corelib/mimetypes/qmimedatabase/CMakeLists.txt
+++ b/tests/benchmarks/corelib/mimetypes/qmimedatabase/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qmimedatabase Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qmimedatabase
SOURCES
tst_bench_qmimedatabase.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/mimetypes/qmimedatabase/tst_bench_qmimedatabase.cpp b/tests/benchmarks/corelib/mimetypes/qmimedatabase/tst_bench_qmimedatabase.cpp
index 959330f256..ffc65e7949 100644
--- a/tests/benchmarks/corelib/mimetypes/qmimedatabase/tst_bench_qmimedatabase.cpp
+++ b/tests/benchmarks/corelib/mimetypes/qmimedatabase/tst_bench_qmimedatabase.cpp
@@ -1,35 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2021 Igor Kushnir <igorkuo@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 The Qt Company Ltd.
+// Copyright (C) 2021 Igor Kushnir <igorkuo@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QMimeDatabase>
+using namespace Qt::StringLiterals;
+
namespace {
struct MatchModeInfo
{
@@ -76,26 +53,31 @@ void tst_QMimeDatabase::inheritsPerformance()
{
// Check performance of inherits().
// This benchmark (which started in 2009 in kmimetypetest.cpp) uses 40 mimetypes.
- QStringList mimeTypes;
- mimeTypes << QLatin1String("image/jpeg") << QLatin1String("image/png") << QLatin1String("image/tiff") << QLatin1String("text/plain") << QLatin1String("text/html");
- mimeTypes += mimeTypes;
- mimeTypes += mimeTypes;
- mimeTypes += mimeTypes;
- QCOMPARE(mimeTypes.count(), 40);
+ // (eight groups of five unique ones)
+ const QString uniqueMimeTypes[] = {
+ u"image/jpeg"_s,
+ u"image/png"_s,
+ u"image/tiff"_s,
+ u"text/plain"_s,
+ u"text/html"_s,
+ };
+ constexpr size_t NumOuterLoops = 40 / std::size(uniqueMimeTypes);
QMimeDatabase db;
- QMimeType mime = db.mimeTypeForName(QString::fromLatin1("text/x-chdr"));
+ const QMimeType mime = db.mimeTypeForName(u"text/x-chdr"_s);
QVERIFY(mime.isValid());
+ QString match;
QBENCHMARK {
- QString match;
- foreach (const QString &mt, mimeTypes) {
- if (mime.inherits(mt)) {
- match = mt;
- // of course there would normally be a "break" here, but we're testing worse-case
- // performance here
+ for (size_t i = 0; i < NumOuterLoops; ++i) {
+ for (const QString &mt : uniqueMimeTypes) {
+ if (mime.inherits(mt)) {
+ match = mt;
+ // of course there would normally be a "break" here, but
+ // we're testing worse-case performance here
+ }
}
}
- QCOMPARE(match, QString::fromLatin1("text/plain"));
}
+ QCOMPARE(match, u"text/plain"_s);
// Numbers from 2011, in release mode:
// KDE 4.7 numbers: 0.21 msec / 494,000 ticks / 568,345 instr. loads per iteration
// QMimeBinaryProvider (with Qt 5): 0.16 msec / NA / 416,049 instr. reads per iteration
diff --git a/tests/benchmarks/corelib/plugin/CMakeLists.txt b/tests/benchmarks/corelib/plugin/CMakeLists.txt
index 3ae12b23f5..fdfc6d8b8c 100644
--- a/tests/benchmarks/corelib/plugin/CMakeLists.txt
+++ b/tests/benchmarks/corelib/plugin/CMakeLists.txt
@@ -1,3 +1,4 @@
-# Generated from plugin.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(quuid)
diff --git a/tests/benchmarks/corelib/plugin/quuid/CMakeLists.txt b/tests/benchmarks/corelib/plugin/quuid/CMakeLists.txt
index 66ec60effc..2c394b2bb2 100644
--- a/tests/benchmarks/corelib/plugin/quuid/CMakeLists.txt
+++ b/tests/benchmarks/corelib/plugin/quuid/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_quuid Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_quuid
SOURCES
tst_bench_quuid.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/plugin/quuid/tst_bench_quuid.cpp b/tests/benchmarks/corelib/plugin/quuid/tst_bench_quuid.cpp
index 2db1563568..7a6da7f84c 100644
--- a/tests/benchmarks/corelib/plugin/quuid/tst_bench_quuid.cpp
+++ b/tests/benchmarks/corelib/plugin/quuid/tst_bench_quuid.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 <QtCore/QCoreApplication>
#include <QtCore/QUuid>
@@ -55,7 +30,7 @@ private slots:
void tst_QUuid::createUuid()
{
QBENCHMARK {
- QUuid::createUuid();
+ [[maybe_unused]] auto r = QUuid::createUuid();
}
}
@@ -70,7 +45,7 @@ void tst_QUuid::toString()
{
QUuid uuid = QUuid::createUuid();
QBENCHMARK {
- uuid.toString();
+ [[maybe_unused]] auto r = uuid.toString();
}
}
@@ -86,7 +61,7 @@ void tst_QUuid::toByteArray()
{
QUuid uuid = QUuid::createUuid();
QBENCHMARK {
- uuid.toByteArray();
+ [[maybe_unused]] auto r = uuid.toByteArray();
}
}
@@ -102,7 +77,7 @@ void tst_QUuid::toRfc4122()
{
QUuid uuid = QUuid::createUuid();
QBENCHMARK {
- uuid.toRfc4122();
+ [[maybe_unused]] auto r = uuid.toRfc4122();
}
}
@@ -168,7 +143,7 @@ void tst_QUuid::isNull()
{
QUuid uuid = QUuid();
QBENCHMARK {
- uuid.isNull();
+ [[maybe_unused]] auto r = uuid.isNull();
}
}
@@ -178,7 +153,7 @@ void tst_QUuid::operatorLess()
uuid1 = QUuid::createUuid();
uuid2 = QUuid::createUuid();
QBENCHMARK {
- uuid1 < uuid2;
+ [[maybe_unused]] auto r = uuid1 < uuid2;
}
}
@@ -188,7 +163,7 @@ void tst_QUuid::operatorMore()
uuid1 = QUuid::createUuid();
uuid2 = QUuid::createUuid();
QBENCHMARK {
- uuid1 > uuid2;
+ [[maybe_unused]] auto r = uuid1 > uuid2;
}
}
diff --git a/tests/benchmarks/corelib/serialization/CMakeLists.txt b/tests/benchmarks/corelib/serialization/CMakeLists.txt
new file mode 100644
index 0000000000..98343d7688
--- /dev/null
+++ b/tests/benchmarks/corelib/serialization/CMakeLists.txt
@@ -0,0 +1,4 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(qcborvalue)
diff --git a/tests/benchmarks/corelib/serialization/qcborvalue/CMakeLists.txt b/tests/benchmarks/corelib/serialization/qcborvalue/CMakeLists.txt
new file mode 100644
index 0000000000..6ada5b983d
--- /dev/null
+++ b/tests/benchmarks/corelib/serialization/qcborvalue/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_benchmark(tst_bench_qcborvalue
+ SOURCES
+ tst_bench_qcborvalue.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::Test
+)
diff --git a/tests/benchmarks/corelib/serialization/qcborvalue/tst_bench_qcborvalue.cpp b/tests/benchmarks/corelib/serialization/qcborvalue/tst_bench_qcborvalue.cpp
new file mode 100644
index 0000000000..b9978fa25c
--- /dev/null
+++ b/tests/benchmarks/corelib/serialization/qcborvalue/tst_bench_qcborvalue.cpp
@@ -0,0 +1,95 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCborMap>
+#include <QCborValue>
+
+#include <QTest>
+
+template <typename Char>
+struct SampleStrings
+{
+ static constexpr char key[] = "hello";
+};
+
+template <>
+struct SampleStrings<char16_t>
+{
+ static constexpr char16_t key[] = u"hello";
+};
+
+template <>
+struct SampleStrings<QChar>
+{
+ static const QChar *const key;
+};
+const QChar *const SampleStrings<QChar>::key =
+ reinterpret_cast<const QChar *>(SampleStrings<char16_t>::key);
+
+template <typename T, typename = void>
+constexpr bool hasValueType = false;
+
+template <typename T>
+constexpr bool hasValueType<T, std::void_t<typename T::value_type>> = true;
+
+class tst_QCborValue : public QObject
+{
+ Q_OBJECT
+private:
+ template <typename Type>
+ void doKeyLookup();
+
+ template <typename Type>
+ void doConstruct();
+
+private slots:
+ void keyLookupLatin1() { doKeyLookup<QLatin1StringView>(); }
+ void keyLookupString() { doKeyLookup<QString>(); }
+ void keyLookupConstCharPtr() { doKeyLookup<char>(); };
+
+ void constructLatin1() { doConstruct<QLatin1StringView>(); }
+ void constructString() { doConstruct<QString>(); }
+ void constructStringView() { doConstruct<QStringView>(); }
+ void constructConstCharPtr() { doConstruct<char>(); }
+};
+
+template <typename Type>
+void tst_QCborValue::doKeyLookup()
+{
+ const QCborMap m{{"hello", "world"}, {1, 2}};
+ const QCborValue v = m;
+
+ if constexpr (hasValueType<Type>) {
+ using Char = std::remove_cv_t<typename Type::value_type>;
+ using Strings = SampleStrings<Char>;
+ const Type s(Strings::key);
+ QBENCHMARK {
+ [[maybe_unused]] const QCborValue r = v[s];
+ }
+ } else {
+ QBENCHMARK {
+ [[maybe_unused]] const QCborValue r = v[SampleStrings<Type>::key];
+ }
+ }
+}
+
+template<typename Type>
+void tst_QCborValue::doConstruct()
+{
+ if constexpr (hasValueType<Type>) {
+ using Char = std::remove_cv_t<typename Type::value_type>;
+ using Strings = SampleStrings<Char>;
+ const Type s(Strings::key);
+ QBENCHMARK {
+ [[maybe_unused]] const auto v = QCborValue{s};
+ }
+ } else {
+ QBENCHMARK {
+ [[maybe_unused]] const auto v = QCborValue{SampleStrings<Type>::key};
+ }
+ }
+}
+
+QTEST_MAIN(tst_QCborValue)
+
+#include "tst_bench_qcborvalue.moc"
diff --git a/tests/benchmarks/corelib/text/CMakeLists.txt b/tests/benchmarks/corelib/text/CMakeLists.txt
index d0a2373822..303aa51def 100644
--- a/tests/benchmarks/corelib/text/CMakeLists.txt
+++ b/tests/benchmarks/corelib/text/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from text.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qbytearray)
add_subdirectory(qchar)
@@ -8,3 +9,4 @@ add_subdirectory(qstringlist)
add_subdirectory(qstringtokenizer)
add_subdirectory(qregularexpression)
add_subdirectory(qstring)
+add_subdirectory(qutf8stringview)
diff --git a/tests/benchmarks/corelib/text/qbytearray/CMakeLists.txt b/tests/benchmarks/corelib/text/qbytearray/CMakeLists.txt
index 18b811501b..1ea3660680 100644
--- a/tests/benchmarks/corelib/text/qbytearray/CMakeLists.txt
+++ b/tests/benchmarks/corelib/text/qbytearray/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qbytearray Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qbytearray
SOURCES
tst_bench_qbytearray.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/text/qbytearray/tst_bench_qbytearray.cpp b/tests/benchmarks/corelib/text/qbytearray/tst_bench_qbytearray.cpp
index 01ee46c53e..a97cba7c50 100644
--- a/tests/benchmarks/corelib/text/qbytearray/tst_bench_qbytearray.cpp
+++ b/tests/benchmarks/corelib/text/qbytearray/tst_bench_qbytearray.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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) 2021 The Qt Company Ltd.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QIODevice>
#include <QFile>
@@ -56,6 +31,9 @@ private slots:
void toPercentEncoding_data();
void toPercentEncoding();
+
+ void operator_assign_char();
+ void operator_assign_char_data();
};
void tst_QByteArray::initTestCase()
@@ -91,7 +69,7 @@ void tst_QByteArray::append()
}
}
-static QByteArray decNext(QByteArray &&big)
+static QByteArray decNext(QByteArray big)
{
// Increments a decimal digit-string (ignoring sign, so decrements if
// negative); only intended for taking a boundary value just out of range,
@@ -378,6 +356,38 @@ void tst_QByteArray::toPercentEncoding()
QTEST(encoded, "expected");
}
+void tst_QByteArray::operator_assign_char()
+{
+ QFETCH(QByteArray, data);
+ QString str(data.size(), Qt::Uninitialized);
+
+ const char *tdata = data.constData();
+ QBENCHMARK {
+ str.operator=(tdata);
+ }
+}
+
+void tst_QByteArray::operator_assign_char_data()
+{
+ QTest::addColumn<QByteArray>("data");
+
+ QByteArray data;
+ data.fill('a', 5);
+ QTest::newRow("length: 5") << data;
+ data.fill('b', 10);
+ QTest::newRow("length: 10") << data;
+ data.fill('c', 20);
+ QTest::newRow("length: 20") << data;
+ data.fill('d', 50);
+ QTest::newRow("length: 50") << data;
+ data.fill('e', 100);
+ QTest::newRow("length: 100") << data;
+ data.fill('f', 500);
+ QTest::newRow("length: 500") << data;
+ data.fill('g', 1'000);
+ QTest::newRow("length: 1'000") << data;
+}
+
QTEST_MAIN(tst_QByteArray)
#include "tst_bench_qbytearray.moc"
diff --git a/tests/benchmarks/corelib/text/qchar/CMakeLists.txt b/tests/benchmarks/corelib/text/qchar/CMakeLists.txt
index ef7f553f2e..136d3ef6fa 100644
--- a/tests/benchmarks/corelib/text/qchar/CMakeLists.txt
+++ b/tests/benchmarks/corelib/text/qchar/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qchar Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qchar
SOURCES
tst_bench_qchar.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/text/qchar/tst_bench_qchar.cpp b/tests/benchmarks/corelib/text/qchar/tst_bench_qchar.cpp
index b1adfdca4e..194dd27d36 100644
--- a/tests/benchmarks/corelib/text/qchar/tst_bench_qchar.cpp
+++ b/tests/benchmarks/corelib/text/qchar/tst_bench_qchar.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 <QTest>
#include <QChar>
diff --git a/tests/benchmarks/corelib/text/qlocale/CMakeLists.txt b/tests/benchmarks/corelib/text/qlocale/CMakeLists.txt
index f319c0b5bd..04c2f69b9f 100644
--- a/tests/benchmarks/corelib/text/qlocale/CMakeLists.txt
+++ b/tests/benchmarks/corelib/text/qlocale/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qlocale Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qlocale
SOURCES
tst_bench_qlocale.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/text/qlocale/tst_bench_qlocale.cpp b/tests/benchmarks/corelib/text/qlocale/tst_bench_qlocale.cpp
index 23a64526eb..3d13174c9c 100644
--- a/tests/benchmarks/corelib/text/qlocale/tst_bench_qlocale.cpp
+++ b/tests/benchmarks/corelib/text/qlocale/tst_bench_qlocale.cpp
@@ -1,34 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QLocale>
#include <QTest>
+using namespace Qt::StringLiterals;
+
class tst_QLocale : public QObject
{
Q_OBJECT
@@ -54,6 +31,12 @@ private Q_SLOTS:
void toUpper_QLocale_2();
void toUpper_QString();
void number_QString();
+ void toLongLong_data();
+ void toLongLong();
+ void toULongLong_data();
+ void toULongLong();
+ void toDouble_data();
+ void toDouble();
};
static QString data()
@@ -392,6 +375,219 @@ void tst_QLocale::number_QString()
}
}
+template <typename Integer>
+void toWholeCommon_data()
+{
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<QString>("locale");
+ QTest::addColumn<bool>("good");
+ QTest::addColumn<Integer>("expected");
+
+ QTest::newRow("C: empty") << u""_s << u"C"_s << false << Integer(0ull);
+ QTest::newRow("C: 0") << u"0"_s << u"C"_s << true << Integer(0ull);
+ QTest::newRow("C: 1234") << u"1234"_s << u"C"_s << true << Integer(1234ull);
+ // C locale omits grouping, but doesn't reject it.
+ QTest::newRow("C: 1,234") << u"1,234"_s << u"C"_s << true << Integer(1234ull);
+ QTest::newRow("C: 123456789")
+ << u"123456789"_s << u"C"_s << true << Integer(123456789ull);
+ QTest::newRow("C: 123,456,789")
+ << u"123,456,789"_s << u"C"_s << true << Integer(123456789ull);
+
+ QTest::newRow("en: empty") << u""_s << u"en"_s << false << Integer(0ull);
+ QTest::newRow("en: 0") << u"0"_s << u"en"_s << true << Integer(0ull);
+ QTest::newRow("en: 1234") << u"1234"_s << u"en"_s << true << Integer(1234ull);
+ QTest::newRow("en: 1,234") << u"1,234"_s << u"en"_s << true << Integer(1234ull);
+ QTest::newRow("en: 123,456,789")
+ << u"123,456,789"_s << u"en"_s << true << Integer(123456789ull);
+ QTest::newRow("en: 123456789")
+ << u"123456789"_s << u"en"_s << true << Integer(123456789ull);
+
+ QTest::newRow("de: empty") << u""_s << u"de"_s << false << Integer(0ull);
+ QTest::newRow("de: 0") << u"0"_s << u"de"_s << true << Integer(0ull);
+ QTest::newRow("de: 1234") << u"1234"_s << u"de"_s << true << Integer(1234ull);
+ QTest::newRow("de: 1.234") << u"1.234"_s << u"de"_s << true << Integer(1234ull);
+ QTest::newRow("de: 123.456.789")
+ << u"123.456.789"_s << u"de"_s << true << Integer(123456789ull);
+ QTest::newRow("de: 123456789")
+ << u"123456789"_s << u"de"_s << true << Integer(123456789ull);
+
+ // Locales with non-single-character signs:
+ QTest::newRow("ar_EG: +403") // Arabic, Egypt
+ << u"\u061c+\u0664\u0660\u0663"_s << u"ar_EG"_s << true << Integer(403ull);
+ QTest::newRow("ar_EG: !403") // Only first character of the sign
+ << u"\u061c\u0664\u0660\u0663"_s << u"ar_EG"_s << false << Integer(0ull);
+ QTest::newRow("fa_IR: +403") // Farsi, Iran
+ << u"\u200e+\u06f4\u06f0\u06f3"_s << u"fa_IR"_s << true << Integer(403ull);
+ QTest::newRow("fa_IR: !403") // Only first character of sign
+ << u"\u200e\u06f4\u06f0\u06f3"_s << u"fa_IR"_s << false << Integer(0ull);
+}
+
+void tst_QLocale::toLongLong_data()
+{
+ toWholeCommon_data<qlonglong>();
+
+ QTest::newRow("C: -1234") << u"-1234"_s << u"C"_s << true << -1234ll;
+ QTest::newRow("C: -123456789") << u"-123456789"_s << u"C"_s << true << -123456789ll;
+ QTest::newRow("C: qlonglong-max")
+ << u"9223372036854775807"_s << u"C"_s << true
+ << std::numeric_limits<qlonglong>::max();
+ QTest::newRow("C: qlonglong-min")
+ << u"-9223372036854775808"_s << u"C"_s << true
+ << std::numeric_limits<qlonglong>::min();
+
+ // Locales with multi-character signs:
+ QTest::newRow("ar_EG: -403") // Arabic, Egypt
+ << u"\u061c-\u0664\u0660\u0663"_s << u"ar_EG"_s << true << -403ll;
+ QTest::newRow("fa_IR: -403") // Farsi, Iran
+ << u"\u200e\u2212\u06f4\u06f0\u06f3"_s << u"fa_IR"_s << true << -403ll;
+}
+
+void tst_QLocale::toLongLong()
+{
+ QFETCH(QString, text);
+ QFETCH(QString, locale);
+ QFETCH(bool, good);
+ QFETCH(qlonglong, expected);
+
+ const QLocale loc(locale);
+ qlonglong actual = expected;
+ bool ok = false;
+ QBENCHMARK {
+ actual = loc.toLongLong(text, &ok);
+ }
+ QCOMPARE(ok, good);
+ QCOMPARE(actual, expected);
+}
+
+void tst_QLocale::toULongLong_data()
+{
+ toWholeCommon_data<qulonglong>();
+
+ QTest::newRow("C: qlonglong-max + 1")
+ << u"9223372036854775808"_s << u"C"_s << true
+ << (qulonglong(std::numeric_limits<qlonglong>::max()) + 1);
+ QTest::newRow("C: qulonglong-max")
+ << u"18446744073709551615"_s << u"C"_s << true
+ << std::numeric_limits<qulonglong>::max();
+}
+
+void tst_QLocale::toULongLong()
+{
+ QFETCH(QString, text);
+ QFETCH(QString, locale);
+ QFETCH(bool, good);
+ QFETCH(qulonglong, expected);
+
+ const QLocale loc(locale);
+ qulonglong actual = expected;
+ bool ok = false;
+ QBENCHMARK {
+ actual = loc.toULongLong(text, &ok);
+ }
+ QCOMPARE(ok, good);
+ QCOMPARE(actual, expected);
+}
+
+
+void tst_QLocale::toDouble_data()
+{
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<QString>("locale");
+ QTest::addColumn<bool>("good");
+ QTest::addColumn<double>("expected");
+
+ QTest::newRow("C: empty") << u""_s << u"C"_s << false << 0.0;
+ QTest::newRow("C: 0") << u"0"_s << u"C"_s << true << 0.0;
+ QTest::newRow("C: 0.12340") << u"0.12340"_s << u"C"_s << true << 0.12340;
+ QTest::newRow("C: -0.12340") << u"-0.12340"_s << u"C"_s << true << -0.12340;
+ QTest::newRow("C: &minus;0.12340") << u"\u2212" "0.12340"_s << u"C"_s << true << -0.12340;
+ QTest::newRow("C: 1.0e-4") << u"1.0e-4"_s << u"C"_s << true << 1.0e-4;
+ QTest::newRow("C: 1.0e&minus;4") << u"1.0e\u2212" "4"_s << u"C"_s << true << 1.0e-4;
+ QTest::newRow("C: 1.0e+4") << u"1.0e+4"_s << u"C"_s << true << 1.0e+4;
+ QTest::newRow("C: 10.e+3") << u"10.e+3"_s << u"C"_s << true << 1.0e+4;
+ QTest::newRow("C: 10e+3.") << u"10e+3."_s << u"C"_s << false << 0.0; // exp...dot
+ QTest::newRow("C: 1e4") << u"1e4"_s << u"C"_s << true << 1.0e+4;
+
+ // NaN and infinity:
+ QTest::newRow("C: nan") << u"nan"_s << u"C"_s << true << qQNaN();
+ QTest::newRow("C: NaN") << u"NaN"_s << u"C"_s << true << qQNaN();
+ QTest::newRow("C: -nan") << u"-nan"_s << u"C"_s << false << 0.0;
+ QTest::newRow("C: +nan") << u"+nan"_s << u"C"_s << false << 0.0;
+ QTest::newRow("C: inf") << u"inf"_s << u"C"_s << true << qInf();
+ QTest::newRow("C: Inf") << u"Inf"_s << u"C"_s << true << qInf();
+ QTest::newRow("C: +inf") << u"+inf"_s << u"C"_s << true << qInf();
+ QTest::newRow("C: -inf") << u"-inf"_s << u"C"_s << true << -qInf();
+
+ // Wantonly long-form representations, with trailing and leading zeros:
+ QTest::newRow("C: 1e-64 long-form")
+ << (u"0."_s + QString(63, u'0') + u'1' + QString(962, u'0')) << u"C"_s << true << 1e-64;
+ QTest::newRow("C: 1e+64 long-form")
+ << (QString(961, u'0') + u'1' + QString(64, u'0') + u".0"_s) << u"C"_s << true << 1e+64;
+ QTest::newRow("C: long-form 1 via e+64")
+ << (u"0."_s + QString(63, u'0') + u'1' + QString(962, u'0') + u"e+64"_s)
+ << u"C"_s << true << 1.0;
+ QTest::newRow("C: long-form 1 via e-64")
+ << (QString(961, u'0') + u'1' + QString(64, u'0') + u".0e-64"_s)
+ << u"C"_s << true << 1.0;
+ QTest::newRow("C: 12345678.9") << u"12345678.9"_s << u"C"_s << true << 12345678.9;
+
+ // With and without grouping, en vs de for flipped separators:
+ QTest::newRow("en: 12345678.9") << u"12345678.9"_s << u"en"_s << true << 12345678.9;
+ QTest::newRow("en: 12,345,678.9") << u"12,345,678.9"_s << u"en"_s << true << 12'345'678.9;
+ QTest::newRow("de: 12345678,9") << u"12345678,9"_s << u"de"_s << true << 12345678.9;
+ QTest::newRow("de: 12.345.678,9") << u"12.345.678,9"_s << u"de"_s << true << 12'345'678.9;
+
+ // NaN and infinity are locale-independent (for now - QTBUG-95460)
+ QTest::newRow("cy: nan") << u"nan"_s << u"cy"_s << true << qQNaN();
+ QTest::newRow("cy: NaN") << u"NaN"_s << u"cy"_s << true << qQNaN();
+ QTest::newRow("cy: -nan") << u"-nan"_s << u"cy"_s << false << 0.0;
+ QTest::newRow("cy: +nan") << u"+nan"_s << u"cy"_s << false << 0.0;
+ QTest::newRow("cy: inf") << u"inf"_s << u"cy"_s << true << qInf();
+ QTest::newRow("cy: Inf") << u"Inf"_s << u"cy"_s << true << qInf();
+ QTest::newRow("cy: +inf") << u"+inf"_s << u"cy"_s << true << qInf();
+ QTest::newRow("cy: -inf") << u"-inf"_s << u"cy"_s << true << -qInf();
+ // Samples ready for QTBUG-95460:
+ QTest::newRow("en: &infin;") << u"\u221e"_s << u"en"_s << true << qInf();
+ QTest::newRow("ga: Nuimh") << u"Nuimh"_s << u"ga"_s << true << qQNaN();
+
+ // Locales with multi-character exponents:
+ QTest::newRow("sv_SE: 4e-3") // Swedish, Sweden
+ << u"4\u00d7" "10^\u2212" "03"_s << u"sv_SE"_s << true << 4e-3;
+ QTest::newRow("sv_SE: 4x-3") // Only first character of exponent
+ << u"4\u00d7\u2212" "03"_s << u"sv_SE"_s << false << 0.0;
+ QTest::newRow("se_NO: 4e-3") // Northern Sami, Norway
+ << u"4\u00b7" "10^\u2212" "03"_s << u"se_NO"_s << true << 4e-3;
+ QTest::newRow("se_NO: 4x-3") // Only first character of exponent
+ << u"4\u00b7\u2212" "03"_s << u"se_NO"_s << false << 0.0;
+ QTest::newRow("ar_EG: 4e-3") // Arabic, Egypt
+ << u"\u0664\u0627\u0633\u061c-\u0660\u0663"_s << u"ar_EG"_s << true << 4e-3;
+ QTest::newRow("ar_EG: 4x-3") // Only first character of exponent
+ << u"\u0664\u0627\u061c-\u0660\u0663"_s << u"ar_EG"_s << false << 0.0;
+ QTest::newRow("ar_EG: 4e!3") // Only first character of sign
+ << u"\u0664\u0627\u0633\u061c\u0660\u0663"_s << u"ar_EG"_s << false << 0.0;
+ QTest::newRow("ar_EG: 4x!3") // Only first character of sign and exponent
+ << u"\u0664\u0627\u061c\u0660\u0663"_s << u"ar_EG"_s << false << 0.0;
+}
+
+void tst_QLocale::toDouble()
+{
+ QFETCH(QString, text);
+ QFETCH(QString, locale);
+ QFETCH(bool, good);
+ QFETCH(double, expected);
+
+ const QLocale loc(locale);
+ double actual = expected;
+ bool ok = false;
+ QBENCHMARK {
+ actual = loc.toDouble(text, &ok);
+ }
+ QEXPECT_FAIL("en: &infin;", "Localized infinity support missing: QTBUG-95460", Abort);
+ QEXPECT_FAIL("ga: Nuimh", "Localized NaN support missing: QTBUG-95460", Abort);
+ QCOMPARE(ok, good);
+ QCOMPARE(actual, expected);
+}
+
QTEST_MAIN(tst_QLocale)
#include "tst_bench_qlocale.moc"
diff --git a/tests/benchmarks/corelib/text/qregularexpression/CMakeLists.txt b/tests/benchmarks/corelib/text/qregularexpression/CMakeLists.txt
index 1e1f40a2e4..5d029439d0 100644
--- a/tests/benchmarks/corelib/text/qregularexpression/CMakeLists.txt
+++ b/tests/benchmarks/corelib/text/qregularexpression/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qregularexpression.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qregularexpression Binary:
@@ -7,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qregularexpression
SOURCES
tst_bench_qregularexpression.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/text/qregularexpression/tst_bench_qregularexpression.cpp b/tests/benchmarks/corelib/text/qregularexpression/tst_bench_qregularexpression.cpp
index 6c9c2ddaf5..83c87be0b1 100644
--- a/tests/benchmarks/corelib/text/qregularexpression/tst_bench_qregularexpression.cpp
+++ b/tests/benchmarks/corelib/text/qregularexpression/tst_bench_qregularexpression.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QRegularExpression>
#include <QTest>
diff --git a/tests/benchmarks/corelib/text/qstring/CMakeLists.txt b/tests/benchmarks/corelib/text/qstring/CMakeLists.txt
index c2ce102780..f17088d2be 100644
--- a/tests/benchmarks/corelib/text/qstring/CMakeLists.txt
+++ b/tests/benchmarks/corelib/text/qstring/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qstring.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qstring Binary:
@@ -7,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qstring
SOURCES
tst_bench_qstring.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/text/qstring/tst_bench_qstring.cpp b/tests/benchmarks/corelib/text/qstring/tst_bench_qstring.cpp
index ada0e25d71..da5c0ff359 100644
--- a/tests/benchmarks/corelib/text/qstring/tst_bench_qstring.cpp
+++ b/tests/benchmarks/corelib/text/qstring/tst_bench_qstring.cpp
@@ -1,35 +1,14 @@
-/****************************************************************************
-**
-** 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 <QStringList>
+#include <QByteArray>
+#include <QLatin1StringView>
#include <QFile>
#include <QTest>
#include <limits>
+using namespace Qt::StringLiterals;
+
class tst_QString: public QObject
{
Q_OBJECT
@@ -49,6 +28,7 @@ private slots:
void toCaseFolded_data();
void toCaseFolded();
+ // Serializing:
void number_qlonglong_data();
void number_qlonglong() { number_impl<qlonglong>(); }
void number_qulonglong_data();
@@ -57,10 +37,30 @@ private slots:
void number_double_data();
void number_double();
+ // Parsing:
+ void toLongLong_data();
+ void toLongLong();
+ void toULongLong_data();
+ void toULongLong();
+ void toDouble_data();
+ void toDouble();
+
+ // operator=(~)
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
+ void operator_assign_BA() { operator_assign<QByteArray>(); }
+ void operator_assign_BA_data() { operator_assign_data(); }
+ void operator_assign_char() { operator_assign<const char*>(); };
+ void operator_assign_char_data() { operator_assign_data();}
+#endif
+ void operator_assign_L1SV() { operator_assign<QLatin1StringView>(); }
+ void operator_assign_L1SV_data() { operator_assign_data(); }
+
private:
void section_data_impl(bool includeRegExOnly = true);
template <typename RX> void section_impl();
template <typename Integer> void number_impl();
+ template <typename T> void operator_assign();
+ void operator_assign_data();
};
tst_QString::tst_QString()
@@ -214,6 +214,10 @@ void tst_QString::number_impl()
template <typename Integer>
void number_integer_common()
{
+ QTest::addColumn<Integer>("number");
+ QTest::addColumn<int>("base");
+ QTest::addColumn<QString>("expected");
+
QTest::newRow("0") << Integer(0ull) << 10 << QStringLiteral("0");
QTest::newRow("1234") << Integer(1234ull) << 10 << QStringLiteral("1234");
QTest::newRow("123456789") << Integer(123456789ull) << 10 << QStringLiteral("123456789");
@@ -225,10 +229,6 @@ void number_integer_common()
void tst_QString::number_qlonglong_data()
{
- QTest::addColumn<qlonglong>("number");
- QTest::addColumn<int>("base");
- QTest::addColumn<QString>("expected");
-
number_integer_common<qlonglong>();
QTest::newRow("-1234") << -1234ll << 10 << QStringLiteral("-1234");
@@ -255,10 +255,6 @@ void tst_QString::number_qlonglong_data()
void tst_QString::number_qulonglong_data()
{
- QTest::addColumn<qulonglong>("number");
- QTest::addColumn<int>("base");
- QTest::addColumn<QString>("expected");
-
number_integer_common<qulonglong>();
QTest::newRow("qlonglong-max + 1")
@@ -319,6 +315,196 @@ void tst_QString::number_double()
QCOMPARE(actual, expected);
}
+template <typename Integer>
+void toWholeCommon_data()
+{
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<int>("base");
+ QTest::addColumn<bool>("good");
+ QTest::addColumn<Integer>("expected");
+
+ QTest::newRow("empty") << u""_s << 10 << false << Integer(0ull);
+ QTest::newRow("0") << u"0"_s << 10 << true << Integer(0ull);
+ QTest::newRow("1234") << u"1234"_s << 10 << true << Integer(1234ull);
+ QTest::newRow("1,234") << u"1,234"_s << 10 << false << Integer(0ull);
+ QTest::newRow("123456789")
+ << u"123456789"_s << 10 << true << Integer(123456789ull);
+ QTest::newRow("bad1dea, base 16")
+ << u"bad1dea"_s << 16 << true << Integer(0xBAD1DEAull);
+ QTest::newRow("bad1dea, base 10") << u"bad1dea"_s << 10 << false << Integer(0ull);
+ QTest::newRow("42, base 13") << u"42"_s << 13 << true << Integer(6ull * 9ull);
+ QTest::newRow("242, base 8") << u"242"_s << 8 << true << Integer(0242ull);
+ QTest::newRow("495, base 8") << u"495"_s << 8 << false << Integer(0ull);
+ QTest::newRow("101101, base 2")
+ << u"101101"_s << 2 << true << Integer(0b101101ull);
+ QTest::newRow("ad, base 30") << u"ad"_s << 30 << true << Integer(313ull);
+}
+
+void tst_QString::toLongLong_data()
+{
+ toWholeCommon_data<qlonglong>();
+
+ QTest::newRow("-1234") << u"-1234"_s << 10 << true << -1234ll;
+ QTest::newRow("-123456789") << u"-123456789"_s << 10 << true << -123456789ll;
+ QTest::newRow("-bad1dea, base 16") << u"-bad1dea"_s << 16 << true << -0xBAD1DEAll;
+ QTest::newRow("-242, base 8") << u"-242"_s << 8 << true << -0242ll;
+ QTest::newRow("-101101, base 2") << u"-101101"_s << 2 << true << -0b101101ll;
+ QTest::newRow("-ad, base 30") << u"-ad"_s << 30 << true << -313ll;
+
+ QTest::newRow("qlonglong-max")
+ << u"9223372036854775807"_s << 10 << true
+ << std::numeric_limits<qlonglong>::max();
+ QTest::newRow("qlonglong-min")
+ << u"-9223372036854775808"_s << 10 << true
+ << std::numeric_limits<qlonglong>::min();
+ QTest::newRow("qlonglong-max, base 2")
+ << QString(63, u'1') << 2 << true << std::numeric_limits<qlonglong>::max();
+ QTest::newRow("qlonglong-min, base 2")
+ << (u"-1"_s + QString(63, u'0')) << 2 << true
+ << std::numeric_limits<qlonglong>::min();
+ QTest::newRow("qlonglong-max, base 16")
+ << (QChar(u'7') + QString(15, u'f')) << 16 << true
+ << std::numeric_limits<qlonglong>::max();
+ QTest::newRow("qlonglong-min, base 16")
+ << (u"-8"_s + QString(15, u'0')) << 16 << true
+ << std::numeric_limits<qlonglong>::min();
+}
+
+void tst_QString::toLongLong()
+{
+ QFETCH(QString, text);
+ QFETCH(int, base);
+ QFETCH(bool, good);
+ QFETCH(qlonglong, expected);
+
+ qlonglong actual = expected;
+ bool ok = false;
+ QBENCHMARK {
+ actual = text.toLongLong(&ok, base);
+ }
+ QCOMPARE(ok, good);
+ QCOMPARE(actual, expected);
+}
+
+void tst_QString::toULongLong_data()
+{
+ toWholeCommon_data<qulonglong>();
+
+ QTest::newRow("qlonglong-max + 1")
+ << u"9223372036854775808"_s << 10 << true
+ << (qulonglong(std::numeric_limits<qlonglong>::max()) + 1);
+ QTest::newRow("qulonglong-max")
+ << u"18446744073709551615"_s << 10 << true
+ << std::numeric_limits<qulonglong>::max();
+ QTest::newRow("qulonglong-max, base 2")
+ << QString(64, u'1') << 2 << true << std::numeric_limits<qulonglong>::max();
+ QTest::newRow("qulonglong-max, base 16")
+ << QString(16, u'f') << 16 << true << std::numeric_limits<qulonglong>::max();
+}
+
+void tst_QString::toULongLong()
+{
+ QFETCH(QString, text);
+ QFETCH(int, base);
+ QFETCH(bool, good);
+ QFETCH(qulonglong, expected);
+
+ qulonglong actual = expected;
+ bool ok = false;
+ QBENCHMARK {
+ actual = text.toULongLong(&ok, base);
+ }
+ QCOMPARE(ok, good);
+ QCOMPARE(actual, expected);
+}
+
+void tst_QString::toDouble_data()
+{
+ QTest::addColumn<QString>("text");
+ QTest::addColumn<bool>("good");
+ QTest::addColumn<double>("expected");
+
+ QTest::newRow("empty") << u""_s << false << 0.0;
+ QTest::newRow("0") << u"0"_s << true << 0.0;
+ QTest::newRow("0.12340") << u"0.12340"_s << true << 0.12340;
+ QTest::newRow("-0.12340") << u"-0.12340"_s << true << -0.12340;
+ QTest::newRow("epsilon")
+ << u"2.220446049e-16"_s << true << std::numeric_limits<double>::epsilon();
+ QTest::newRow("1.0e-4") << u"1.0e-4"_s << true << 1.0e-4;
+ QTest::newRow("1.0e+4") << u"1.0e+4"_s << true << 1.0e+4;
+ QTest::newRow("10.e+3") << u"10.e+3"_s << true << 1.0e+4;
+ QTest::newRow("10e+3.") << u"10e+3."_s << false << 0.0;
+ QTest::newRow("1e4") << u"1e4"_s << true << 1.0e+4;
+ QTest::newRow("1.0e-8") << u"1.0e-8"_s << true << 1.0e-8;
+ QTest::newRow("1.0e+8") << u"1.0e+8"_s << true << 1.0e+8;
+
+ // NaN and infinity:
+ QTest::newRow("nan") << u"nan"_s << true << qQNaN();
+ QTest::newRow("NaN") << u"NaN"_s << true << qQNaN();
+ QTest::newRow("-nan") << u"-nan"_s << false << 0.0;
+ QTest::newRow("+nan") << u"+nan"_s << false << 0.0;
+ QTest::newRow("inf") << u"inf"_s << true << qInf();
+ QTest::newRow("Inf") << u"Inf"_s << true << qInf();
+ QTest::newRow("+inf") << u"+inf"_s << true << qInf();
+ QTest::newRow("-inf") << u"-inf"_s << true << -qInf();
+}
+
+void tst_QString::toDouble()
+{
+ QFETCH(QString, text);
+ QFETCH(bool, good);
+ QFETCH(double, expected);
+
+ double actual = expected;
+ bool ok = false;
+ QBENCHMARK {
+ actual = text.toDouble(&ok);
+ }
+ QCOMPARE(ok, good);
+ QCOMPARE(actual, expected);
+}
+
+template <typename T> void tst_QString::operator_assign()
+{
+ QFETCH(QByteArray, data);
+ QString str(data.size(), Qt::Uninitialized);
+
+ T tdata;
+ if constexpr (std::is_same_v<T, const char*>) {
+ tdata = data.constData();
+ } else if constexpr (std::is_same_v<T, QLatin1String>) {
+ tdata = T(data.constData(), data.size());
+ } else {
+ tdata = T(data.constData(), data.size());
+ tdata.detach();
+ }
+
+ QBENCHMARK {
+ str.operator=(tdata);
+ }
+}
+
+void tst_QString::operator_assign_data()
+{
+ QTest::addColumn<QByteArray>("data");
+
+ QByteArray data;
+ data.fill('a', 5);
+ QTest::newRow("length: 5") << data;
+ data.fill('b', 10);
+ QTest::newRow("length: 10") << data;
+ data.fill('c', 20);
+ QTest::newRow("length: 20") << data;
+ data.fill('d', 50);
+ QTest::newRow("length: 50") << data;
+ data.fill('e', 100);
+ QTest::newRow("length: 100") << data;
+ data.fill('f', 500);
+ QTest::newRow("length: 500") << data;
+ data.fill('g', 1'000);
+ QTest::newRow("length: 1'000") << data;
+}
+
QTEST_APPLESS_MAIN(tst_QString)
#include "tst_bench_qstring.moc"
diff --git a/tests/benchmarks/corelib/text/qstringbuilder/CMakeLists.txt b/tests/benchmarks/corelib/text/qstringbuilder/CMakeLists.txt
index b450aa50a0..c3c95e233c 100644
--- a/tests/benchmarks/corelib/text/qstringbuilder/CMakeLists.txt
+++ b/tests/benchmarks/corelib/text/qstringbuilder/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qstringbuilder Binary:
#####################################################################
@@ -5,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qstringbuilder
SOURCES
tst_bench_qstringbuilder.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
COMPILE_OPTIONS
-g
diff --git a/tests/benchmarks/corelib/text/qstringbuilder/tst_bench_qstringbuilder.cpp b/tests/benchmarks/corelib/text/qstringbuilder/tst_bench_qstringbuilder.cpp
index acb7c14169..496abdaf3b 100644
--- a/tests/benchmarks/corelib/text/qstringbuilder/tst_bench_qstringbuilder.cpp
+++ b/tests/benchmarks/corelib/text/qstringbuilder/tst_bench_qstringbuilder.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 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
// Select one of the scenarios below
#define SCENARIO 1
diff --git a/tests/benchmarks/corelib/text/qstringlist/CMakeLists.txt b/tests/benchmarks/corelib/text/qstringlist/CMakeLists.txt
index 58af3c9dd3..da2f84d6e9 100644
--- a/tests/benchmarks/corelib/text/qstringlist/CMakeLists.txt
+++ b/tests/benchmarks/corelib/text/qstringlist/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qstringlist Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qstringlist
SOURCES
tst_bench_qstringlist.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/text/qstringlist/tst_bench_qstringlist.cpp b/tests/benchmarks/corelib/text/qstringlist/tst_bench_qstringlist.cpp
index 327f4dc1a1..2431446bf6 100644
--- a/tests/benchmarks/corelib/text/qstringlist/tst_bench_qstringlist.cpp
+++ b/tests/benchmarks/corelib/text/qstringlist/tst_bench_qstringlist.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 <QStringList>
#include <QTest>
@@ -33,6 +8,8 @@
#include <string>
#include <vector>
+using namespace Qt::StringLiterals;
+
class tst_QStringList: public QObject
{
Q_OBJECT
@@ -44,6 +21,11 @@ private slots:
void removeDuplicates() const;
void removeDuplicates_data() const;
+ void filter_data() const;
+ void filter() const;
+ void filter_stringMatcher_data() const { filter_data(); }
+ void filter_stringMatcher() const;
+
void split_qlist_qbytearray() const;
void split_qlist_qbytearray_data() const { return split_data(); }
@@ -68,9 +50,9 @@ private:
QStringList tst_QStringList::populateList(const int count, const QString &unit)
{
QStringList retval;
-
+ retval.reserve(count);
for (int i = 0; i < count; ++i)
- retval.append(unit);
+ retval.append(unit + QString::number(i));
return retval;
}
@@ -102,20 +84,20 @@ void tst_QStringList::join_data() const
QTest::addColumn<QStringList>("input");
QTest::addColumn<QString>("separator");
- QTest::newRow("")
+ QTest::newRow("100")
<< populateList(100, QLatin1String("unit"))
<< QString();
- QTest::newRow("")
+ QTest::newRow("1000")
<< populateList(1000, QLatin1String("unit"))
<< QString();
- QTest::newRow("")
- << populateList(10000, QLatin1String("unit"))
+ QTest::newRow("10000")
+ << populateList(10'000, QLatin1String("unit"))
<< QString();
- QTest::newRow("")
- << populateList(100000, QLatin1String("unit"))
+ QTest::newRow("100000")
+ << populateList(100'000, QLatin1String("unit"))
<< QString();
}
@@ -155,6 +137,39 @@ void tst_QStringList::removeDuplicates_data() const
QTest::addRow("long-dup-0.75") << (l + l + l + l);
}
+void tst_QStringList::filter_data() const
+{
+ QTest::addColumn<QStringList>("list");
+ QTest::addColumn<QStringList>("expected");
+
+ for (int i : {10, 20, 30, 40, 50, 70, 80, 100, 300, 500, 700, 900, 10'000}) {
+ QStringList list = populateList(i, u"A rather long string to test QStringMatcher"_s);
+ list.append(u"Horse and cart from old"_s);
+ QTest::addRow("list%d", i) << list << QStringList(u"Horse and cart from old"_s);
+ }
+}
+
+void tst_QStringList::filter() const
+{
+ QFETCH(QStringList, list);
+ QFETCH(QStringList, expected);
+
+ QBENCHMARK {
+ QCOMPARE(list.filter(u"Horse and cart from old", Qt::CaseSensitive), expected);
+ }
+}
+
+void tst_QStringList::filter_stringMatcher() const
+{
+ QFETCH(QStringList, list);
+ QFETCH(QStringList, expected);
+
+ const QStringMatcher matcher(u"Horse and cart from old", Qt::CaseSensitive);
+ QBENCHMARK {
+ QCOMPARE(list.filter(matcher), expected);
+ }
+}
+
void tst_QStringList::split_data() const
{
QTest::addColumn<QString>("input");
diff --git a/tests/benchmarks/corelib/text/qstringtokenizer/CMakeLists.txt b/tests/benchmarks/corelib/text/qstringtokenizer/CMakeLists.txt
index 92dd6cec98..11720e5204 100644
--- a/tests/benchmarks/corelib/text/qstringtokenizer/CMakeLists.txt
+++ b/tests/benchmarks/corelib/text/qstringtokenizer/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qstringtokenizer Binary:
#####################################################################
@@ -5,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qstringtokenizer
SOURCES
tst_bench_qstringtokenizer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/text/qstringtokenizer/tst_bench_qstringtokenizer.cpp b/tests/benchmarks/corelib/text/qstringtokenizer/tst_bench_qstringtokenizer.cpp
index 291b314a7f..eccfad91da 100644
--- a/tests/benchmarks/corelib/text/qstringtokenizer/tst_bench_qstringtokenizer.cpp
+++ b/tests/benchmarks/corelib/text/qstringtokenizer/tst_bench_qstringtokenizer.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtTest/QTest>
diff --git a/tests/benchmarks/corelib/text/qutf8stringview/CMakeLists.txt b/tests/benchmarks/corelib/text/qutf8stringview/CMakeLists.txt
new file mode 100644
index 0000000000..14613afe56
--- /dev/null
+++ b/tests/benchmarks/corelib/text/qutf8stringview/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_bench_qutf8stringview Binary:
+#####################################################################
+
+qt_internal_add_benchmark(tst_bench_qutf8stringview
+ SOURCES
+ tst_bench_qutf8stringview.cpp
+ LIBRARIES
+ Qt::Test
+ Qt::CorePrivate
+)
diff --git a/tests/benchmarks/corelib/text/qutf8stringview/tst_bench_qutf8stringview.cpp b/tests/benchmarks/corelib/text/qutf8stringview/tst_bench_qutf8stringview.cpp
new file mode 100644
index 0000000000..ec633ff67d
--- /dev/null
+++ b/tests/benchmarks/corelib/text/qutf8stringview/tst_bench_qutf8stringview.cpp
@@ -0,0 +1,263 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <qbytearray.h>
+#include <qdebug.h>
+#include <qstring.h>
+#include <qtest.h>
+#include <qutf8stringview.h>
+
+class tst_QUtf8StringView : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void equalStringsLatin1_data() { equalStrings_data(); }
+ void equalStringsLatin1();
+ void equalStringsUtf16_data() { equalStrings_data(); }
+ void equalStringsUtf16();
+ void equalStringsUtf8_data() { equalStrings_data(); }
+ void equalStringsUtf8();
+
+ void compareStringsCaseSensitiveLatin1_data() { compareStringsCaseSensitive_data(); }
+ void compareStringsCaseSensitiveLatin1() { compareStringsLatin1(true); }
+ void compareStringsCaseSensitiveUtf16_data() { compareStringsCaseSensitive_data(); }
+ void compareStringsCaseSensitiveUtf16() { compareStringsUtf16(true); }
+ void compareStringsCaseSensitiveUtf8_data() { compareStringsCaseSensitive_data(); }
+ void compareStringsCaseSensitiveUtf8() { compareStringsUtf8(true); }
+
+ void compareStringsCaseInsensitiveLatin1_data() { compareStringsCaseInsensitive_data(); }
+ void compareStringsCaseInsensitiveLatin1() { compareStringsLatin1(false); }
+ void compareStringsCaseInsensitiveUtf16_data() { compareStringsCaseInsensitive_data(); }
+ void compareStringsCaseInsensitiveUtf16() { compareStringsUtf16(false); }
+ void compareStringsCaseInsensitiveUtf8_data() { compareStringsCaseInsensitive_data(); }
+ void compareStringsCaseInsensitiveUtf8() { compareStringsUtf8(false); }
+
+ void compareStringsWithErrors_data();
+ void compareStringsWithErrors();
+
+private:
+ void equalStrings_data();
+ void compareStringsCaseSensitive_data();
+ void compareStringsCaseInsensitive_data();
+ void compareStringsLatin1(bool caseSensitive);
+ void compareStringsUtf16(bool caseSensitive);
+ void compareStringsUtf8(bool caseSensitive);
+};
+
+void tst_QUtf8StringView::equalStrings_data()
+{
+ QTest::addColumn<QString>("lhs");
+ QTest::addColumn<QString>("rhs");
+ QTest::addColumn<bool>("isEqual");
+
+ QTest::newRow("EqualStrings") << "Test"
+ << "Test" << true;
+ QTest::newRow("EqualStringsLong")
+ << "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ << "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" << true;
+ QTest::newRow("DifferentCase") << "test"
+ << "Test" << false;
+ QTest::newRow("DifferentCaseLong")
+ << "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ << "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz" << false;
+ QTest::newRow("ReverseStrings") << "Test"
+ << "tseT" << false;
+ QTest::newRow("Latin1RangeCharacter") << u8"B\u00d8" << u8"B\u00d8" << true;
+ QTest::newRow("Latin1RangeCharacterDifferentCase") << u8"B\u00d8" << u8"B\u00f8" << false;
+}
+
+void tst_QUtf8StringView::equalStringsLatin1()
+{
+ QFETCH(QString, lhs);
+ QFETCH(QString, rhs);
+ QFETCH(bool, isEqual);
+ QByteArray left = lhs.toUtf8();
+ QByteArray right = rhs.toLatin1();
+ QBasicUtf8StringView<false> lhv(left);
+ QLatin1StringView rhv(right);
+ bool result;
+
+ QBENCHMARK {
+ result = QtPrivate::equalStrings(lhv, rhv);
+ };
+ QCOMPARE(result, isEqual);
+}
+
+void tst_QUtf8StringView::equalStringsUtf16()
+{
+ QFETCH(QString, lhs);
+ QFETCH(QString, rhs);
+ QFETCH(bool, isEqual);
+
+ QByteArray left = lhs.toUtf8();
+ QBasicUtf8StringView<false> lhv(left);
+ QStringView rhv(rhs);
+ bool result;
+
+ QBENCHMARK {
+ result = QtPrivate::equalStrings(lhv, rhv);
+ };
+ QCOMPARE(result, isEqual);
+}
+
+void tst_QUtf8StringView::equalStringsUtf8()
+{
+ QFETCH(QString, lhs);
+ QFETCH(QString, rhs);
+ QFETCH(bool, isEqual);
+
+ QByteArray left = lhs.toUtf8();
+ QByteArray right = rhs.toUtf8();
+ QBasicUtf8StringView<false> lhv(left);
+ QBasicUtf8StringView<false> rhv(right);
+ bool result;
+
+ QBENCHMARK {
+ result = QtPrivate::equalStrings(lhv, rhv);
+ };
+ QCOMPARE(result, isEqual);
+}
+
+void tst_QUtf8StringView::compareStringsCaseSensitive_data()
+{
+ QTest::addColumn<QString>("lhs");
+ QTest::addColumn<QString>("rhs");
+ QTest::addColumn<int>("compareValue");
+
+ QTest::newRow("EqualStrings") << "Test"
+ << "Test" << 0;
+ QTest::newRow("EqualStringsLong") << "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ"
+ << "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ" << 0;
+ QTest::newRow("DifferentCase") << "test"
+ << "Test" << 32;
+ QTest::newRow("DifferentCaseLong")
+ << "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ"
+ << "abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz" << -32;
+ QTest::newRow("ReverseStrings") << "Test"
+ << "tseT" << -32;
+ QTest::newRow("Different Strings") << "Testing and testing"
+ << "Testing and resting" << 2;
+ QTest::newRow("Latin1RangeCharacter") << u8"B\u00d8" << u8"B\u00d8" << 0;
+ QTest::newRow("Latin1RangeCharacterDifferentCase") << u8"B\u00d8" << u8"B\u00f8" << -32;
+}
+
+void tst_QUtf8StringView::compareStringsCaseInsensitive_data()
+{
+ QTest::addColumn<QString>("lhs");
+ QTest::addColumn<QString>("rhs");
+ QTest::addColumn<int>("compareValue");
+
+ QTest::newRow("EqualStrings") << "Test"
+ << "Test" << 0;
+ QTest::newRow("EqualStringsLong") << "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ"
+ << "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ" << 0;
+ QTest::newRow("DifferentCase") << "test"
+ << "Test" << 0;
+ QTest::newRow("DifferentCaseLong") << "abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ"
+ << "abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz" << 0;
+ QTest::newRow("ReverseStrings") << "Test"
+ << "tseT" << -14;
+ QTest::newRow("Different Strings") << "Testing and testing"
+ << "Testing and resting" << 2;
+ QTest::newRow("Latin1RangeCharacter") << u8"B\u00d8" << u8"B\u00d8" << 0;
+ QTest::newRow("Latin1RangeCharacterDifferentCase") << u8"B\u00d8" << u8"B\u00f8" << 0;
+}
+
+void tst_QUtf8StringView::compareStringsLatin1(bool caseSensitive)
+{
+ QFETCH(QString, lhs);
+ QFETCH(QString, rhs);
+ QFETCH(int, compareValue);
+ QByteArray left = lhs.toUtf8();
+ QByteArray right = rhs.toLatin1();
+ QBasicUtf8StringView<false> lhv(left);
+ QLatin1StringView rhv(right);
+ Qt::CaseSensitivity cs = caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive;
+ int result;
+
+ QBENCHMARK {
+ result = lhv.compare(rhv, cs);
+ };
+ QCOMPARE(result, compareValue);
+}
+
+void tst_QUtf8StringView::compareStringsUtf16(bool caseSensitive)
+{
+ QFETCH(QString, lhs);
+ QFETCH(QString, rhs);
+ QFETCH(int, compareValue);
+
+ QByteArray left = lhs.toUtf8();
+ QBasicUtf8StringView<false> lhv(left);
+ QStringView rhv(rhs);
+ Qt::CaseSensitivity cs = caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive;
+ int result;
+
+ QBENCHMARK {
+ result = lhv.compare(rhv, cs);
+ };
+ QCOMPARE(result, compareValue);
+}
+
+void tst_QUtf8StringView::compareStringsUtf8(bool caseSensitive)
+{
+ QFETCH(QString, lhs);
+ QFETCH(QString, rhs);
+ QFETCH(int, compareValue);
+
+ QByteArray left = lhs.toUtf8();
+ QByteArray right = rhs.toUtf8();
+ QBasicUtf8StringView<false> lhv(left);
+ QBasicUtf8StringView<false> rhv(right);
+ Qt::CaseSensitivity cs = caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive;
+ int result;
+
+ QBENCHMARK {
+ result = lhv.compare(rhv, cs);
+ };
+ QCOMPARE(result, compareValue);
+}
+
+void tst_QUtf8StringView::compareStringsWithErrors_data()
+{
+ QTest::addColumn<QByteArray>("lhs");
+ QTest::addColumn<QByteArray>("rhs");
+ QTest::addColumn<int>("compare");
+ QTest::addColumn<bool>("caseSensitive");
+
+ QTest::newRow("Compare errors 0xfe vs 0xff case-insensitive")
+ << QByteArray("\xfe") << QByteArray("\xff") << 0 << false;
+ QTest::newRow("Compare errors 0xff vs 0xff case-insensitive")
+ << QByteArray("\xff") << QByteArray("\xff") << 0 << false;
+ QTest::newRow("Compare 'a' with error 0xff case-insensitive")
+ << QByteArray("a") << QByteArray("\xff") << -65436 << false;
+ QTest::newRow("Compare errors 0xfe vs 0xff case-sensitive")
+ << QByteArray("\xfe") << QByteArray("\xff") << -1 << true;
+ QTest::newRow("Compare errors 0xff vs 0xff case-sensitive")
+ << QByteArray("\xff") << QByteArray("\xff") << 0 << true;
+ QTest::newRow("Compare 'a' with error 0xff case-sensitive")
+ << QByteArray("a") << QByteArray("\xff") << -158 << true;
+}
+
+void tst_QUtf8StringView::compareStringsWithErrors()
+{
+ QFETCH(QByteArray, lhs);
+ QFETCH(QByteArray, rhs);
+ QFETCH(int, compare);
+ QFETCH(bool, caseSensitive);
+ QBasicUtf8StringView<false> lhv(lhs);
+ QBasicUtf8StringView<false> rhv(rhs);
+ Qt::CaseSensitivity cs = caseSensitive ? Qt::CaseSensitive : Qt::CaseInsensitive;
+ int result;
+
+ QBENCHMARK {
+ result = lhv.compare(rhv, cs);
+ };
+ QCOMPARE(result, compare);
+ QCOMPARE(-result, rhv.compare(lhv, cs));
+}
+
+QTEST_MAIN(tst_QUtf8StringView)
+
+#include "tst_bench_qutf8stringview.moc"
diff --git a/tests/benchmarks/corelib/thread/CMakeLists.txt b/tests/benchmarks/corelib/thread/CMakeLists.txt
index 8f7b829a40..48bf0572a6 100644
--- a/tests/benchmarks/corelib/thread/CMakeLists.txt
+++ b/tests/benchmarks/corelib/thread/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from thread.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qfuture)
add_subdirectory(qmutex)
diff --git a/tests/benchmarks/corelib/thread/qfuture/CMakeLists.txt b/tests/benchmarks/corelib/thread/qfuture/CMakeLists.txt
index d53e3f6728..5988b1c0b0 100644
--- a/tests/benchmarks/corelib/thread/qfuture/CMakeLists.txt
+++ b/tests/benchmarks/corelib/thread/qfuture/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qfuture Binary:
#####################################################################
@@ -6,6 +9,6 @@ qt_internal_add_benchmark(tst_bench_qfuture
EXCEPTIONS
SOURCES
tst_bench_qfuture.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/thread/qfuture/tst_bench_qfuture.cpp b/tests/benchmarks/corelib/thread/qfuture/tst_bench_qfuture.cpp
index 686bb76bdb..38b3f636c9 100644
--- a/tests/benchmarks/corelib/thread/qfuture/tst_bench_qfuture.cpp
+++ b/tests/benchmarks/corelib/thread/qfuture/tst_bench_qfuture.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
@@ -38,7 +13,7 @@ class tst_QFuture : public QObject
Q_OBJECT
private slots:
- void makeReadyfuture();
+ void makeReadyValueFuture();
#ifndef QT_NO_EXCEPTIONS
void makeExceptionalFuture();
#endif
@@ -68,10 +43,10 @@ private slots:
void progressText();
};
-void tst_QFuture::makeReadyfuture()
+void tst_QFuture::makeReadyValueFuture()
{
QBENCHMARK {
- auto future = QtFuture::makeReadyFuture(42);
+ auto future = QtFuture::makeReadyValueFuture(42);
Q_UNUSED(future);
}
}
@@ -89,7 +64,7 @@ void tst_QFuture::makeExceptionalFuture()
void tst_QFuture::result()
{
- auto future = QtFuture::makeReadyFuture(42);
+ auto future = QtFuture::makeReadyValueFuture(42);
QBENCHMARK {
auto value = future.result();
@@ -117,7 +92,7 @@ void tst_QFuture::results()
void tst_QFuture::takeResult()
{
QBENCHMARK {
- auto future = QtFuture::makeReadyFuture(42);
+ auto future = QtFuture::makeReadyValueFuture(42);
auto value = future.takeResult();
Q_UNUSED(value);
}
@@ -165,7 +140,7 @@ void tst_QFuture::reportException()
void tst_QFuture::then()
{
- auto f = QtFuture::makeReadyFuture(42);
+ auto f = QtFuture::makeReadyValueFuture(42);
QBENCHMARK {
auto future = f.then([](int value) { return value; });
Q_UNUSED(future);
@@ -174,7 +149,7 @@ void tst_QFuture::then()
void tst_QFuture::thenVoid()
{
- auto f = QtFuture::makeReadyFuture();
+ auto f = QtFuture::makeReadyVoidFuture();
QBENCHMARK {
auto future = f.then([] {});
Q_UNUSED(future);
@@ -230,7 +205,7 @@ void tst_QFuture::onFailedVoid()
void tst_QFuture::thenOnFailed()
{
- auto f = QtFuture::makeReadyFuture(42);
+ auto f = QtFuture::makeReadyValueFuture(42);
QBENCHMARK {
auto future =
f.then([](int) { throw std::runtime_error("error"); }).onFailed([] { return 0; });
@@ -240,7 +215,7 @@ void tst_QFuture::thenOnFailed()
void tst_QFuture::thenOnFailedVoid()
{
- auto f = QtFuture::makeReadyFuture();
+ auto f = QtFuture::makeReadyVoidFuture();
QBENCHMARK {
auto future = f.then([] { throw std::runtime_error("error"); }).onFailed([] {});
Q_UNUSED(future);
diff --git a/tests/benchmarks/corelib/thread/qmutex/CMakeLists.txt b/tests/benchmarks/corelib/thread/qmutex/CMakeLists.txt
index d056a10568..2d01f9ff1f 100644
--- a/tests/benchmarks/corelib/thread/qmutex/CMakeLists.txt
+++ b/tests/benchmarks/corelib/thread/qmutex/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qmutex Binary:
#####################################################################
@@ -5,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qmutex
SOURCES
tst_bench_qmutex.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Test
)
diff --git a/tests/benchmarks/corelib/thread/qmutex/tst_bench_qmutex.cpp b/tests/benchmarks/corelib/thread/qmutex/tst_bench_qmutex.cpp
index 2042aa4885..6ea0c25c0b 100644
--- a/tests/benchmarks/corelib/thread/qmutex/tst_bench_qmutex.cpp
+++ b/tests/benchmarks/corelib/thread/qmutex/tst_bench_qmutex.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 <QtCore/QtCore>
#include <QTest>
@@ -34,6 +9,8 @@
//#define USE_SEM_T
+using namespace std::chrono_literals;
+
#if defined(Q_OS_UNIX)
#if !defined(USE_SEM_T)
# include <pthread.h>
@@ -76,9 +53,6 @@ void NativeMutexUnlock(NativeMutexType *mutex)
}
#endif
#elif defined(Q_OS_WIN)
-# if !defined(_WIN32_WINNT)
-# define _WIN32_WINNT 0x0A00
-# endif
# include <qt_windows.h>
typedef CRITICAL_SECTION NativeMutexType;
void NativeMutexInitialize(NativeMutexType *mutex)
@@ -256,7 +230,8 @@ void tst_QMutex::contendedNative_data()
class NativeMutexThread : public QThread
{
NativeMutexType *mutex1, *mutex2;
- int iterations, msleepDuration;
+ int iterations;
+ std::chrono::milliseconds msleepDuration;
bool use2mutexes;
public:
bool done;
@@ -274,8 +249,8 @@ public:
NativeMutexLock(mutex1);
if (use2mutexes)
NativeMutexLock(mutex2);
- if (msleepDuration >= 0)
- msleep(msleepDuration);
+ if (msleepDuration >= 0ms)
+ sleep(msleepDuration);
if (use2mutexes)
NativeMutexUnlock(mutex2);
NativeMutexUnlock(mutex1);
@@ -299,7 +274,7 @@ void tst_QMutex::contendedNative()
NativeMutexInitialize(&mutex2);
QList<NativeMutexThread *> threads(threadCount);
- for (int i = 0; i < threads.count(); ++i) {
+ for (int i = 0; i < threads.size(); ++i) {
threads[i] = new NativeMutexThread(&mutex1, &mutex2, iterations, msleepDuration, use2mutexes);
threads[i]->start();
}
@@ -311,11 +286,11 @@ void tst_QMutex::contendedNative()
semaphore4.release(threadCount);
}
- for (int i = 0; i < threads.count(); ++i)
+ for (int i = 0; i < threads.size(); ++i)
threads[i]->done = true;
semaphore1.acquire(threadCount);
semaphore2.release(threadCount);
- for (int i = 0; i < threads.count(); ++i)
+ for (int i = 0; i < threads.size(); ++i)
threads[i]->wait();
qDeleteAll(threads);
@@ -326,7 +301,8 @@ void tst_QMutex::contendedNative()
class QMutexThread : public QThread
{
QMutex *mutex1, *mutex2;
- int iterations, msleepDuration;
+ int iterations;
+ std::chrono::milliseconds msleepDuration;
bool use2mutexes;
public:
bool done;
@@ -344,8 +320,8 @@ public:
mutex1->lock();
if (use2mutexes)
mutex2->lock();
- if (msleepDuration >= 0)
- msleep(msleepDuration);
+ if (msleepDuration >= 0ms)
+ sleep(msleepDuration);
if (use2mutexes)
mutex2->unlock();
mutex1->unlock();
@@ -367,7 +343,7 @@ void tst_QMutex::contendedQMutex()
QMutex mutex1, mutex2;
QList<QMutexThread *> threads(threadCount);
- for (int i = 0; i < threads.count(); ++i) {
+ for (int i = 0; i < threads.size(); ++i) {
threads[i] = new QMutexThread(&mutex1, &mutex2, iterations, msleepDuration, use2mutexes);
threads[i]->start();
}
@@ -379,11 +355,11 @@ void tst_QMutex::contendedQMutex()
semaphore4.release(threadCount);
}
- for (int i = 0; i < threads.count(); ++i)
+ for (int i = 0; i < threads.size(); ++i)
threads[i]->done = true;
semaphore1.acquire(threadCount);
semaphore2.release(threadCount);
- for (int i = 0; i < threads.count(); ++i)
+ for (int i = 0; i < threads.size(); ++i)
threads[i]->wait();
qDeleteAll(threads);
}
@@ -391,7 +367,8 @@ void tst_QMutex::contendedQMutex()
class QMutexLockerThread : public QThread
{
QMutex *mutex1, *mutex2;
- int iterations, msleepDuration;
+ int iterations;
+ std::chrono::milliseconds msleepDuration;
bool use2mutexes;
public:
bool done;
@@ -409,8 +386,8 @@ public:
{
QMutexLocker locker1(mutex1);
QMutexLocker locker2(use2mutexes ? mutex2 : 0);
- if (msleepDuration >= 0)
- msleep(msleepDuration);
+ if (msleepDuration >= 0ms)
+ sleep(msleepDuration);
}
QThread::yieldCurrentThread();
@@ -430,7 +407,7 @@ void tst_QMutex::contendedQMutexLocker()
QMutex mutex1, mutex2;
QList<QMutexLockerThread *> threads(threadCount);
- for (int i = 0; i < threads.count(); ++i) {
+ for (int i = 0; i < threads.size(); ++i) {
threads[i] = new QMutexLockerThread(&mutex1, &mutex2, iterations, msleepDuration, use2mutexes);
threads[i]->start();
}
@@ -442,11 +419,11 @@ void tst_QMutex::contendedQMutexLocker()
semaphore4.release(threadCount);
}
- for (int i = 0; i < threads.count(); ++i)
+ for (int i = 0; i < threads.size(); ++i)
threads[i]->done = true;
semaphore1.acquire(threadCount);
semaphore2.release(threadCount);
- for (int i = 0; i < threads.count(); ++i)
+ for (int i = 0; i < threads.size(); ++i)
threads[i]->wait();
qDeleteAll(threads);
}
diff --git a/tests/benchmarks/corelib/thread/qreadwritelock/CMakeLists.txt b/tests/benchmarks/corelib/thread/qreadwritelock/CMakeLists.txt
index 901f9609bc..b56f484b48 100644
--- a/tests/benchmarks/corelib/thread/qreadwritelock/CMakeLists.txt
+++ b/tests/benchmarks/corelib/thread/qreadwritelock/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qreadwritelock Binary:
#####################################################################
@@ -5,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qreadwritelock
SOURCES
tst_bench_qreadwritelock.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Test
)
diff --git a/tests/benchmarks/corelib/thread/qreadwritelock/tst_bench_qreadwritelock.cpp b/tests/benchmarks/corelib/thread/qreadwritelock/tst_bench_qreadwritelock.cpp
index 824f85ec6a..e63ac6573f 100644
--- a/tests/benchmarks/corelib/thread/qreadwritelock/tst_bench_qreadwritelock.cpp
+++ b/tests/benchmarks/corelib/thread/qreadwritelock/tst_bench_qreadwritelock.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Olivier Goffart <ogoffart@woboq.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 Olivier Goffart <ogoffart@woboq.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QtCore>
#include <QTest>
diff --git a/tests/benchmarks/corelib/thread/qthreadpool/CMakeLists.txt b/tests/benchmarks/corelib/thread/qthreadpool/CMakeLists.txt
index 0d1f145e25..1353eaa2c4 100644
--- a/tests/benchmarks/corelib/thread/qthreadpool/CMakeLists.txt
+++ b/tests/benchmarks/corelib/thread/qthreadpool/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qthreadpool Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qthreadpool
SOURCES
tst_bench_qthreadpool.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/thread/qthreadpool/tst_bench_qthreadpool.cpp b/tests/benchmarks/corelib/thread/qthreadpool/tst_bench_qthreadpool.cpp
index a64dbd15c9..e7e5636307 100644
--- a/tests/benchmarks/corelib/thread/qthreadpool/tst_bench_qthreadpool.cpp
+++ b/tests/benchmarks/corelib/thread/qthreadpool/tst_bench_qthreadpool.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 David Faure <david.faure@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) 2013 David Faure <david.faure@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qtest.h>
#include <QtCore>
diff --git a/tests/benchmarks/corelib/thread/qthreadstorage/CMakeLists.txt b/tests/benchmarks/corelib/thread/qthreadstorage/CMakeLists.txt
index 7f5de4e9ab..916a2d8dee 100644
--- a/tests/benchmarks/corelib/thread/qthreadstorage/CMakeLists.txt
+++ b/tests/benchmarks/corelib/thread/qthreadstorage/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qthreadstorage Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qthreadstorage
SOURCES
tst_bench_qthreadstorage.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/thread/qthreadstorage/tst_bench_qthreadstorage.cpp b/tests/benchmarks/corelib/thread/qthreadstorage/tst_bench_qthreadstorage.cpp
index 6230cd3187..47db215465 100644
--- a/tests/benchmarks/corelib/thread/qthreadstorage/tst_bench_qthreadstorage.cpp
+++ b/tests/benchmarks/corelib/thread/qthreadstorage/tst_bench_qthreadstorage.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 <qtest.h>
#include <QtCore>
@@ -89,6 +64,7 @@ void tst_QThreadStorage::get()
int *i = ts.localData();
count += *i;
}
+ QVERIFY(count > 0);
ts.setLocalData(0);
}
diff --git a/tests/benchmarks/corelib/thread/qwaitcondition/CMakeLists.txt b/tests/benchmarks/corelib/thread/qwaitcondition/CMakeLists.txt
index 13814d7074..c7a15f9e8a 100644
--- a/tests/benchmarks/corelib/thread/qwaitcondition/CMakeLists.txt
+++ b/tests/benchmarks/corelib/thread/qwaitcondition/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qwaitcondition Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qwaitcondition
SOURCES
tst_bench_qwaitcondition.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/thread/qwaitcondition/tst_bench_qwaitcondition.cpp b/tests/benchmarks/corelib/thread/qwaitcondition/tst_bench_qwaitcondition.cpp
index 3612b8784b..0abd53fc93 100644
--- a/tests/benchmarks/corelib/thread/qwaitcondition/tst_bench_qwaitcondition.cpp
+++ b/tests/benchmarks/corelib/thread/qwaitcondition/tst_bench_qwaitcondition.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 <QtCore/QtCore>
#include <QTest>
diff --git a/tests/benchmarks/corelib/time/CMakeLists.txt b/tests/benchmarks/corelib/time/CMakeLists.txt
index 086650edb6..7c9de68486 100644
--- a/tests/benchmarks/corelib/time/CMakeLists.txt
+++ b/tests/benchmarks/corelib/time/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from time.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qdate)
add_subdirectory(qdatetime)
diff --git a/tests/benchmarks/corelib/time/qdate/CMakeLists.txt b/tests/benchmarks/corelib/time/qdate/CMakeLists.txt
index edc55463d8..e4ef5e3edc 100644
--- a/tests/benchmarks/corelib/time/qdate/CMakeLists.txt
+++ b/tests/benchmarks/corelib/time/qdate/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qdate.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qdate Binary:
@@ -7,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qdate
SOURCES
tst_bench_qdate.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/time/qdate/tst_bench_qdate.cpp b/tests/benchmarks/corelib/time/qdate/tst_bench_qdate.cpp
index 196289148a..581c300d36 100644
--- a/tests/benchmarks/corelib/time/qdate/tst_bench_qdate.cpp
+++ b/tests/benchmarks/corelib/time/qdate/tst_bench_qdate.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDate>
#include <QTest>
diff --git a/tests/benchmarks/corelib/time/qdatetime/CMakeLists.txt b/tests/benchmarks/corelib/time/qdatetime/CMakeLists.txt
index a9546f3cad..14c0b9c730 100644
--- a/tests/benchmarks/corelib/time/qdatetime/CMakeLists.txt
+++ b/tests/benchmarks/corelib/time/qdatetime/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qdatetime Binary:
#####################################################################
@@ -5,6 +8,7 @@
qt_internal_add_benchmark(tst_bench_qdatetime
SOURCES
tst_bench_qdatetime.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
+ Qt::CorePrivate
)
diff --git a/tests/benchmarks/corelib/time/qdatetime/tst_bench_qdatetime.cpp b/tests/benchmarks/corelib/time/qdatetime/tst_bench_qdatetime.cpp
index 302cf80abf..1c86eae009 100644
--- a/tests/benchmarks/corelib/time/qdatetime/tst_bench_qdatetime.cpp
+++ b/tests/benchmarks/corelib/time/qdatetime/tst_bench_qdatetime.cpp
@@ -1,59 +1,25 @@
-/****************************************************************************
-**
-** 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDateTime>
#include <QTimeZone>
#include <QTest>
#include <QList>
#include <qdebug.h>
+#include <QtCore/private/qdatetime_p.h>
class tst_QDateTime : public QObject
{
Q_OBJECT
- enum : qint64
- {
- SECS_PER_DAY = 86400,
- MSECS_PER_DAY = 86400000,
- JULIAN_DAY_1950 = 2433283,
- JULIAN_DAY_1960 = 2436935,
- JULIAN_DAY_1970 = 2440588, // Epoch
- JULIAN_DAY_2010 = 2455198,
- JULIAN_DAY_2011 = 2455563,
- JULIAN_DAY_2020 = 2458850,
- JULIAN_DAY_2050 = 2469808,
- JULIAN_DAY_2060 = 2473460
- };
-
static QList<QDateTime> daily(qint64 start, qint64 end);
+#if QT_CONFIG(timezone)
static QList<QDateTime> norse(qint64 start, qint64 end);
+#endif
+ void decade_data();
private Q_SLOTS:
+ void create_data() { decade_data(); }
void create();
void isNull();
void isValid();
@@ -62,27 +28,35 @@ private Q_SLOTS:
void timeSpec();
void offsetFromUtc();
void timeZoneAbbreviation();
+ void toMSecsSinceEpoch_data() { decade_data(); }
void toMSecsSinceEpoch();
- void toMSecsSinceEpoch1950();
- void toMSecsSinceEpoch2050();
+#if QT_CONFIG(timezone)
+ void toMSecsSinceEpochTz_data() { decade_data(); }
void toMSecsSinceEpochTz();
- void toMSecsSinceEpoch1950Tz();
- void toMSecsSinceEpoch2050Tz();
+#endif
void setDate();
void setTime();
+#if QT_DEPRECATED_SINCE(6, 9)
void setTimeSpec();
void setOffsetFromUtc();
+#endif
void setMSecsSinceEpoch();
+#if QT_CONFIG(timezone)
void setMSecsSinceEpochTz();
+#endif
void toString();
void toStringTextFormat();
void toStringIsoFormat();
void addDays();
+#if QT_CONFIG(timezone)
void addDaysTz();
- void addMSecs();
void addMSecsTz();
+#endif
+ void addMSecs();
+#if QT_DEPRECATED_SINCE(6, 9)
void toTimeSpec();
void toOffsetFromUtc();
+#endif
void daysTo();
void msecsTo();
void equivalent();
@@ -99,33 +73,64 @@ private Q_SLOTS:
void fromStringIso();
void fromMSecsSinceEpoch();
void fromMSecsSinceEpochUtc();
+#if QT_CONFIG(timezone)
void fromMSecsSinceEpochTz();
+#endif
};
+using namespace QtPrivate::DateTimeConstants;
+constexpr qint64 JULIAN_DAY_1 = 1721426;
+constexpr qint64 JULIAN_DAY_11 = 1725078;
+constexpr qint64 JULIAN_DAY_1890 = 2411369;
+constexpr qint64 JULIAN_DAY_1900 = 2415021;
+constexpr qint64 JULIAN_DAY_1950 = 2433283;
+constexpr qint64 JULIAN_DAY_1960 = 2436935;
+constexpr qint64 JULIAN_DAY_1970 = 2440588; // Epoch
+constexpr qint64 JULIAN_DAY_2010 = 2455198;
+constexpr qint64 JULIAN_DAY_2011 = 2455563;
+constexpr qint64 JULIAN_DAY_2020 = 2458850;
+constexpr qint64 JULIAN_DAY_2050 = 2469808;
+constexpr qint64 JULIAN_DAY_2060 = 2473460;
+
+void tst_QDateTime::decade_data()
+{
+ QTest::addColumn<qint64>("startJd");
+ QTest::addColumn<qint64>("stopJd");
+
+ QTest::newRow("first-decade-CE") << JULIAN_DAY_1 << JULIAN_DAY_11;
+ QTest::newRow("1890s") << JULIAN_DAY_1890 << JULIAN_DAY_1900;
+ QTest::newRow("1950s") << JULIAN_DAY_1950 << JULIAN_DAY_1960;
+ QTest::newRow("2010s") << JULIAN_DAY_2010 << JULIAN_DAY_2020;
+ QTest::newRow("2050s") << JULIAN_DAY_2050 << JULIAN_DAY_2060;
+}
+
QList<QDateTime> tst_QDateTime::daily(qint64 start, qint64 end)
{
QList<QDateTime> list;
list.reserve(end - start);
for (int jd = start; jd < end; ++jd)
- list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0)));
+ list.append(QDateTime(QDate::fromJulianDay(jd).startOfDay()));
return list;
}
-
+#if QT_CONFIG(timezone)
QList<QDateTime> tst_QDateTime::norse(qint64 start, qint64 end)
{
const QTimeZone cet("Europe/Oslo");
QList<QDateTime> list;
list.reserve(end - start);
for (int jd = start; jd < end; ++jd)
- list.append(QDateTime(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0), cet));
+ list.append(QDateTime(QDate::fromJulianDay(jd).startOfDay(cet)));
return list;
}
-
+#endif
void tst_QDateTime::create()
{
+ QFETCH(const qint64, startJd);
+ QFETCH(const qint64, stopJd);
+ const QTime noon = QTime::fromMSecsSinceStartOfDay(43200);
QBENCHMARK {
- for (int jd = JULIAN_DAY_2010; jd < JULIAN_DAY_2020; ++jd) {
- QDateTime test(QDate::fromJulianDay(jd), QTime::fromMSecsSinceStartOfDay(0));
+ for (int jd = startJd; jd < stopJd; ++jd) {
+ QDateTime test(QDate::fromJulianDay(jd), noon);
Q_UNUSED(test);
}
}
@@ -196,64 +201,29 @@ void tst_QDateTime::timeZoneAbbreviation()
void tst_QDateTime::toMSecsSinceEpoch()
{
- const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020);
- QBENCHMARK {
- for (const QDateTime &test : list)
- test.toMSecsSinceEpoch();
- }
-}
-
-void tst_QDateTime::toMSecsSinceEpoch1950()
-{
- const auto list = daily(JULIAN_DAY_1950, JULIAN_DAY_1960);
+ QFETCH(const qint64, startJd);
+ QFETCH(const qint64, stopJd);
+ const auto list = daily(startJd, stopJd);
QBENCHMARK {
for (const QDateTime &test : list)
test.toMSecsSinceEpoch();
}
}
-
-void tst_QDateTime::toMSecsSinceEpoch2050()
-{
- const auto list = daily(JULIAN_DAY_2050, JULIAN_DAY_2060);
- QBENCHMARK {
- for (const QDateTime &test : list)
- test.toMSecsSinceEpoch();
- }
-}
-
+#if QT_CONFIG(timezone)
void tst_QDateTime::toMSecsSinceEpochTz()
{
- qint64 result;
- const auto list = norse(JULIAN_DAY_2010, JULIAN_DAY_2020);
- QBENCHMARK {
- for (const QDateTime &test : list)
- result = test.toMSecsSinceEpoch();
- }
- Q_UNUSED(result);
-}
-
-void tst_QDateTime::toMSecsSinceEpoch1950Tz()
-{
- qint64 result;
- const auto list = norse(JULIAN_DAY_1950, JULIAN_DAY_1960);
- QBENCHMARK {
- for (const QDateTime &test : list)
- result = test.toMSecsSinceEpoch();
- }
- Q_UNUSED(result);
-}
+ QFETCH(const qint64, startJd);
+ QFETCH(const qint64, stopJd);
+ const auto list = norse(startJd, stopJd);
-void tst_QDateTime::toMSecsSinceEpoch2050Tz()
-{
qint64 result;
- const auto list = norse(JULIAN_DAY_2050, JULIAN_DAY_2060);
QBENCHMARK {
for (const QDateTime &test : list)
result = test.toMSecsSinceEpoch();
}
Q_UNUSED(result);
}
-
+#endif
void tst_QDateTime::setDate()
{
const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020);
@@ -272,6 +242,9 @@ void tst_QDateTime::setTime()
}
}
+#if QT_DEPRECATED_SINCE(6, 9)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QDateTime::setTimeSpec()
{
const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020);
@@ -289,6 +262,8 @@ void tst_QDateTime::setOffsetFromUtc()
test.setOffsetFromUtc(3600);
}
}
+QT_WARNING_POP
+#endif // 6.9 deprecation
void tst_QDateTime::setMSecsSinceEpoch()
{
@@ -299,7 +274,7 @@ void tst_QDateTime::setMSecsSinceEpoch()
test.setMSecsSinceEpoch(msecs);
}
}
-
+#if QT_CONFIG(timezone)
void tst_QDateTime::setMSecsSinceEpochTz()
{
const qint64 msecs = qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970 + 180) * MSECS_PER_DAY;
@@ -309,7 +284,7 @@ void tst_QDateTime::setMSecsSinceEpochTz()
test.setMSecsSinceEpoch(msecs);
}
}
-
+#endif
void tst_QDateTime::toString()
{
const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2011);
@@ -347,7 +322,7 @@ void tst_QDateTime::addDays()
}
Q_UNUSED(next);
}
-
+#if QT_CONFIG(timezone)
void tst_QDateTime::addDaysTz()
{
const auto list = norse(JULIAN_DAY_2010, JULIAN_DAY_2020);
@@ -356,7 +331,7 @@ void tst_QDateTime::addDaysTz()
QDateTime result = test.addDays(1);
}
}
-
+#endif
void tst_QDateTime::addMSecs()
{
const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020);
@@ -367,7 +342,7 @@ void tst_QDateTime::addMSecs()
}
Q_UNUSED(next);
}
-
+#if QT_CONFIG(timezone)
void tst_QDateTime::addMSecsTz()
{
const auto list = norse(JULIAN_DAY_2010, JULIAN_DAY_2020);
@@ -376,7 +351,10 @@ void tst_QDateTime::addMSecsTz()
QDateTime result = test.addMSecs(1);
}
}
-
+#endif
+#if QT_DEPRECATED_SINCE(6, 9)
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_DEPRECATED
void tst_QDateTime::toTimeSpec()
{
const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020);
@@ -394,6 +372,8 @@ void tst_QDateTime::toOffsetFromUtc()
test.toOffsetFromUtc(3600);
}
}
+QT_WARNING_POP
+#endif
void tst_QDateTime::daysTo()
{
@@ -434,7 +414,7 @@ void tst_QDateTime::equivalentUtc()
{
bool result = false;
const QDateTime other = QDateTime::fromMSecsSinceEpoch(
- qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY, Qt::UTC);
+ qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY, QTimeZone::UTC);
const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020);
QBENCHMARK {
for (const QDateTime &test : list)
@@ -460,7 +440,7 @@ void tst_QDateTime::lessThanUtc()
{
bool result = false;
const QDateTime other = QDateTime::fromMSecsSinceEpoch(
- qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY, Qt::UTC);
+ qint64(JULIAN_DAY_2010 - JULIAN_DAY_1970) * MSECS_PER_DAY, QTimeZone::UTC);
const auto list = daily(JULIAN_DAY_2010, JULIAN_DAY_2020);
QBENCHMARK {
for (const QDateTime &test : list)
@@ -544,7 +524,7 @@ void tst_QDateTime::fromMSecsSinceEpoch()
const int end = JULIAN_DAY_2020 - JULIAN_DAY_1970;
QBENCHMARK {
for (int jd = start; jd < end; ++jd)
- QDateTime::fromMSecsSinceEpoch(jd * MSECS_PER_DAY, Qt::LocalTime);
+ QDateTime::fromMSecsSinceEpoch(jd * MSECS_PER_DAY);
}
}
@@ -554,10 +534,10 @@ void tst_QDateTime::fromMSecsSinceEpochUtc()
const int end = JULIAN_DAY_2020 - JULIAN_DAY_1970;
QBENCHMARK {
for (int jd = start; jd < end; ++jd)
- QDateTime::fromMSecsSinceEpoch(jd * MSECS_PER_DAY, Qt::UTC);
+ QDateTime::fromMSecsSinceEpoch(jd * MSECS_PER_DAY, QTimeZone::UTC);
}
}
-
+#if QT_CONFIG(timezone)
void tst_QDateTime::fromMSecsSinceEpochTz()
{
const int start = JULIAN_DAY_2010 - JULIAN_DAY_1970;
@@ -568,6 +548,7 @@ void tst_QDateTime::fromMSecsSinceEpochTz()
QDateTime test = QDateTime::fromMSecsSinceEpoch(jd * MSECS_PER_DAY, cet);
}
}
+#endif
QTEST_MAIN(tst_QDateTime)
diff --git a/tests/benchmarks/corelib/time/qtimezone/CMakeLists.txt b/tests/benchmarks/corelib/time/qtimezone/CMakeLists.txt
index 99d8b7f044..f80b64be2d 100644
--- a/tests/benchmarks/corelib/time/qtimezone/CMakeLists.txt
+++ b/tests/benchmarks/corelib/time/qtimezone/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qtimezone Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qtimezone
SOURCES
tst_bench_qtimezone.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/time/qtimezone/tst_bench_qtimezone.cpp b/tests/benchmarks/corelib/time/qtimezone/tst_bench_qtimezone.cpp
index 36bb1dd24f..db8b910d98 100644
--- a/tests/benchmarks/corelib/time/qtimezone/tst_bench_qtimezone.cpp
+++ b/tests/benchmarks/corelib/time/qtimezone/tst_bench_qtimezone.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 Crimson AS <info@crimson.no>
-** Copyright (C) 2018 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
-** 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) 2022 The Qt Company Ltd.
+// Copyright (C) 2019 Crimson AS <info@crimson.no>
+// Copyright (C) 2018 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTimeZone>
#include <QTest>
@@ -39,6 +15,7 @@ class tst_QTimeZone : public QObject
Q_OBJECT
private Q_SLOTS:
+#if QT_CONFIG(timezone)
void isTimeZoneIdAvailable();
void systemTimeZone();
void zoneByName_data();
@@ -49,31 +26,35 @@ private Q_SLOTS:
void transitionsForward();
void transitionsReverse_data() { transitionList_data(); }
void transitionsReverse();
+#endif
};
static QList<QByteArray> enoughZones()
{
#ifdef EXHAUSTIVE
- auto available = QTimeZone::availableTimeZoneIds();
- QList<QByteArray> result;
- result.reserve(available.size() + 1);
- for (conat auto &name : available)
- result << name;
+ QList<QByteArray> result = QTimeZone::availableTimeZoneIds();
#else
- QList<QByteArray> result { QByteArray("UTC"),
- // Those named overtly in tst_QDateTime:
- QByteArray("Europe/Oslo"), QByteArray("America/Vancouver"),
- QByteArray("Europe/Berlin"), QByteArray("America/Sao_Paulo"),
- QByteArray("Pacific/Auckland"), QByteArray("Australia/Eucla"),
- QByteArray("Asia/Kathmandu"), QByteArray("Pacific/Kiritimati"),
- QByteArray("Pacific/Apia"), QByteArray("UTC+12:00"),
- QByteArray("Australia/Sydney"), QByteArray("Asia/Singapore"),
- QByteArray("Australia/Brisbane") };
+ QList<QByteArray> result {
+ QByteArray("UTC"),
+ // Those named overtly in tst_QDateTime - special cases first:
+ QByteArray("UTC-02:00"), QByteArray("UTC+02:00"), QByteArray("UTC+12:00"),
+ QByteArray("Etc/GMT+3"), QByteArray("GMT-2"), QByteArray("GMT"),
+ // ... then ordinary names in alphabetic order:
+ QByteArray("America/New_York"), QByteArray("America/Sao_Paulo"),
+ QByteArray("America/Vancouver"),
+ QByteArray("Asia/Kathmandu"), QByteArray("Asia/Singapore"),
+ QByteArray("Australia/Brisbane"), QByteArray("Australia/Eucla"),
+ QByteArray("Australia/Sydney"),
+ QByteArray("Europe/Berlin"), QByteArray("Europe/Helsinki"),
+ QByteArray("Europe/Rome"), QByteArray("Europe/Oslo"),
+ QByteArray("Pacific/Apia"), QByteArray("Pacific/Auckland"),
+ QByteArray("Pacific/Kiritimati")
+ };
#endif
result << QByteArray("Vulcan/ShiKahr"); // invalid: also worth testing
return result;
}
-
+#if QT_CONFIG(timezone)
void tst_QTimeZone::isTimeZoneIdAvailable()
{
const QList<QByteArray> available = QTimeZone::availableTimeZoneIds();
@@ -89,7 +70,6 @@ void tst_QTimeZone::systemTimeZone()
QTimeZone::systemTimeZone();
}
}
-
void tst_QTimeZone::zoneByName_data()
{
QTest::addColumn<QByteArray>("name");
@@ -126,9 +106,9 @@ void tst_QTimeZone::transitionList()
{
QFETCH(QByteArray, name);
const QTimeZone zone = name.isEmpty() ? QTimeZone::systemTimeZone() : QTimeZone(name);
- const QDateTime early = QDate(1625, 6, 8).startOfDay(Qt::UTC); // Cassini's birth date
+ const QDateTime early = QDate(1625, 6, 8).startOfDay(QTimeZone::UTC); // Cassini's birth date
const QDateTime late // End of 32-bit signed time_t
- = QDateTime::fromSecsSinceEpoch(std::numeric_limits<qint32>::max(), Qt::UTC);
+ = QDateTime::fromSecsSinceEpoch(std::numeric_limits<qint32>::max(), QTimeZone::UTC);
QTimeZone::OffsetDataList seq;
QBENCHMARK {
seq = zone.transitions(early, late);
@@ -140,7 +120,7 @@ void tst_QTimeZone::transitionsForward()
{
QFETCH(QByteArray, name);
const QTimeZone zone = name.isEmpty() ? QTimeZone::systemTimeZone() : QTimeZone(name);
- const QDateTime early = QDate(1625, 6, 8).startOfDay(Qt::UTC); // Cassini's birth date
+ const QDateTime early = QDate(1625, 6, 8).startOfDay(QTimeZone::UTC); // Cassini's birth date
QBENCHMARK {
QTimeZone::OffsetData tran = zone.nextTransition(early);
while (tran.atUtc.isValid())
@@ -153,13 +133,14 @@ void tst_QTimeZone::transitionsReverse()
QFETCH(QByteArray, name);
const QTimeZone zone = name.isEmpty() ? QTimeZone::systemTimeZone() : QTimeZone(name);
const QDateTime late // End of 32-bit signed time_t
- = QDateTime::fromSecsSinceEpoch(std::numeric_limits<qint32>::max(), Qt::UTC);
+ = QDateTime::fromSecsSinceEpoch(std::numeric_limits<qint32>::max(), QTimeZone::UTC);
QBENCHMARK {
QTimeZone::OffsetData tran = zone.previousTransition(late);
while (tran.atUtc.isValid())
tran = zone.previousTransition(tran.atUtc);
}
}
+#endif
QTEST_MAIN(tst_QTimeZone)
diff --git a/tests/benchmarks/corelib/tools/CMakeLists.txt b/tests/benchmarks/corelib/tools/CMakeLists.txt
index 25cc02ad1d..b46eac4165 100644
--- a/tests/benchmarks/corelib/tools/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
add_subdirectory(containers-associative)
add_subdirectory(containers-sequential)
add_subdirectory(qcontiguouscache)
diff --git a/tests/benchmarks/corelib/tools/containers-associative/CMakeLists.txt b/tests/benchmarks/corelib/tools/containers-associative/CMakeLists.txt
index 50bf8a0c0f..7036fa96b7 100644
--- a/tests/benchmarks/corelib/tools/containers-associative/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/containers-associative/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_containers_associative Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_containers_associative
SOURCES
tst_bench_containers_associative.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/containers-associative/tst_bench_containers_associative.cpp b/tests/benchmarks/corelib/tools/containers-associative/tst_bench_containers_associative.cpp
index 6bab99cad7..a5618cfcaf 100644
--- a/tests/benchmarks/corelib/tools/containers-associative/tst_bench_containers_associative.cpp
+++ b/tests/benchmarks/corelib/tools/containers-associative/tst_bench_containers_associative.cpp
@@ -1,31 +1,8 @@
-/****************************************************************************
-**
-** 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 <QString>
+#include <QMap>
+#include <QHash>
#include <qtest.h>
diff --git a/tests/benchmarks/corelib/tools/containers-sequential/CMakeLists.txt b/tests/benchmarks/corelib/tools/containers-sequential/CMakeLists.txt
index 2e6d26e343..d24f26e664 100644
--- a/tests/benchmarks/corelib/tools/containers-sequential/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/containers-sequential/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_containers-sequential Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_containers_sequential
SOURCES
tst_bench_containers_sequential.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/containers-sequential/tst_bench_containers_sequential.cpp b/tests/benchmarks/corelib/tools/containers-sequential/tst_bench_containers_sequential.cpp
index 55d4cc72df..78c8016664 100644
--- a/tests/benchmarks/corelib/tools/containers-sequential/tst_bench_containers_sequential.cpp
+++ b/tests/benchmarks/corelib/tools/containers-sequential/tst_bench_containers_sequential.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
// This file contains benchmarks for comparing QList against std::vector
#include <QtCore>
@@ -90,7 +65,7 @@ class UseCases_stdvector : public UseCases<T>
void insert(int size) override
{
std::vector<T> v;
- T t;
+ T t = {};
QBENCHMARK {
for (int i = 0; i < size; ++i)
v.push_back(t);
@@ -101,7 +76,7 @@ class UseCases_stdvector : public UseCases<T>
{
std::vector<T> v;
- T t;
+ T t = {};
for (int i = 0; i < size; ++i)
v.push_back(t);
diff --git a/tests/benchmarks/corelib/tools/qcontiguouscache/CMakeLists.txt b/tests/benchmarks/corelib/tools/qcontiguouscache/CMakeLists.txt
index 29366ecf36..9a68212fc0 100644
--- a/tests/benchmarks/corelib/tools/qcontiguouscache/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/qcontiguouscache/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qcontiguouscache Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qcontiguouscache
SOURCES
tst_bench_qcontiguouscache.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/qcontiguouscache/tst_bench_qcontiguouscache.cpp b/tests/benchmarks/corelib/tools/qcontiguouscache/tst_bench_qcontiguouscache.cpp
index bc235b6747..ae2cf471b0 100644
--- a/tests/benchmarks/corelib/tools/qcontiguouscache/tst_bench_qcontiguouscache.cpp
+++ b/tests/benchmarks/corelib/tools/qcontiguouscache/tst_bench_qcontiguouscache.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 <QObject>
#include <QTest>
diff --git a/tests/benchmarks/corelib/tools/qcryptographichash/CMakeLists.txt b/tests/benchmarks/corelib/tools/qcryptographichash/CMakeLists.txt
index e9d539eb1a..b69b884f7d 100644
--- a/tests/benchmarks/corelib/tools/qcryptographichash/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/qcryptographichash/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qcryptographichash Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qcryptographichash
SOURCES
tst_bench_qcryptographichash.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/qcryptographichash/tst_bench_qcryptographichash.cpp b/tests/benchmarks/corelib/tools/qcryptographichash/tst_bench_qcryptographichash.cpp
index bff3ddbc26..9f2d1c57f2 100644
--- a/tests/benchmarks/corelib/tools/qcryptographichash/tst_bench_qcryptographichash.cpp
+++ b/tests/benchmarks/corelib/tools/qcryptographichash/tst_bench_qcryptographichash.cpp
@@ -1,38 +1,19 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Intel Corporation.
-** 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) 2023 The Qt Company Ltd.
+// Copyright (C) 2017 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QByteArray>
#include <QCryptographicHash>
#include <QFile>
+#include <QMetaEnum>
+#include <QMessageAuthenticationCode>
#include <QRandomGenerator>
#include <QString>
#include <QTest>
+#include <qxpfunctional.h>
+#include <numeric>
+
#include <time.h>
class tst_QCryptographicHash : public QObject
@@ -40,6 +21,8 @@ class tst_QCryptographicHash : public QObject
Q_OBJECT
QByteArray blockOfData;
+ using Algorithm = QCryptographicHash::Algorithm;
+
public:
tst_QCryptographicHash();
@@ -50,63 +33,24 @@ private Q_SLOTS:
void addData();
void addDataChunked_data() { hash_data(); }
void addDataChunked();
+
+ // QMessageAuthenticationCode:
+ void hmac_hash_data() { hash_data(); }
+ void hmac_hash();
+ void hmac_addData_data() { hash_data(); }
+ void hmac_addData();
+ void hmac_setKey_data();
+ void hmac_setKey();
};
-const int MaxCryptoAlgorithm = QCryptographicHash::Sha3_512;
const int MaxBlockSize = 65536;
-const char *algoname(int i)
+static void for_each_algorithm(qxp::function_ref<void(QCryptographicHash::Algorithm, const char*) const> f)
{
- switch (QCryptographicHash::Algorithm(i)) {
- case QCryptographicHash::Md4:
- return "md4-";
- case QCryptographicHash::Md5:
- return "md5-";
- case QCryptographicHash::Sha1:
- return "sha1-";
- case QCryptographicHash::Sha224:
- return "sha2_224-";
- case QCryptographicHash::Sha256:
- return "sha2_256-";
- case QCryptographicHash::Sha384:
- return "sha2_384-";
- case QCryptographicHash::Sha512:
- return "sha2_512-";
- case QCryptographicHash::Sha3_224:
- return "sha3_224-";
- case QCryptographicHash::Sha3_256:
- return "sha3_256-";
- case QCryptographicHash::Sha3_384:
- return "sha3_384-";
- case QCryptographicHash::Sha3_512:
- return "sha3_512-";
- case QCryptographicHash::Keccak_224:
- return "keccak_224-";
- case QCryptographicHash::Keccak_256:
- return "keccak_256-";
- case QCryptographicHash::Keccak_384:
- return "keccak_384-";
- case QCryptographicHash::Keccak_512:
- return "keccak_512-";
- case QCryptographicHash::Blake2b_160:
- return "blake2b_160-";
- case QCryptographicHash::Blake2b_256:
- return "blake2b_256-";
- case QCryptographicHash::Blake2b_384:
- return "blake2b_384-";
- case QCryptographicHash::Blake2b_512:
- return "blake2b_512-";
- case QCryptographicHash::Blake2s_128:
- return "blake2s_128-";
- case QCryptographicHash::Blake2s_160:
- return "blake2s_160-";
- case QCryptographicHash::Blake2s_224:
- return "blake2s_224-";
- case QCryptographicHash::Blake2s_256:
- return "blake2s_256-";
- }
- Q_UNREACHABLE();
- return nullptr;
+ using A = QCryptographicHash::Algorithm;
+ static const auto metaEnum = QMetaEnum::fromType<A>();
+ for (int i = 0, value = metaEnum.value(i); value != -1; value = metaEnum.value(++i))
+ f(A(value), metaEnum.key(i));
}
tst_QCryptographicHash::tst_QCryptographicHash()
@@ -126,7 +70,7 @@ tst_QCryptographicHash::tst_QCryptographicHash()
void tst_QCryptographicHash::hash_data()
{
- QTest::addColumn<int>("algorithm");
+ QTest::addColumn<Algorithm>("algo");
QTest::addColumn<QByteArray>("data");
static const int datasizes[] = { 0, 1, 64, 65, 512, 4095, 4096, 4097, 65536 };
@@ -134,55 +78,146 @@ void tst_QCryptographicHash::hash_data()
Q_ASSERT(datasizes[i] < MaxBlockSize);
QByteArray data = QByteArray::fromRawData(blockOfData.constData(), datasizes[i]);
- for (int algo = QCryptographicHash::Md4; algo <= MaxCryptoAlgorithm; ++algo)
- QTest::newRow(algoname(algo) + QByteArray::number(datasizes[i])) << algo << data;
+ for_each_algorithm([&] (Algorithm algo, const char *name) {
+ if (algo == Algorithm::NumAlgorithms)
+ return;
+ QTest::addRow("%s-%d", name, datasizes[i]) << algo << data;
+ });
}
}
+#define SKIP_IF_NOT_SUPPORTED(algo) do { \
+ if (!QCryptographicHash::supportsAlgorithm(algo)) \
+ QSKIP("This algorithm is not supported in this configuration"); \
+ } while (false) \
+ /* end */
+
void tst_QCryptographicHash::hash()
{
- QFETCH(int, algorithm);
+ QFETCH(const Algorithm, algo);
QFETCH(QByteArray, data);
- QCryptographicHash::Algorithm algo = QCryptographicHash::Algorithm(algorithm);
+ SKIP_IF_NOT_SUPPORTED(algo);
+
QBENCHMARK {
- QCryptographicHash::hash(data, algo);
+ [[maybe_unused]]
+ auto r = QCryptographicHash::hash(data, algo);
}
}
void tst_QCryptographicHash::addData()
{
- QFETCH(int, algorithm);
+ QFETCH(const Algorithm, algo);
QFETCH(QByteArray, data);
- QCryptographicHash::Algorithm algo = QCryptographicHash::Algorithm(algorithm);
+ SKIP_IF_NOT_SUPPORTED(algo);
+
QCryptographicHash hash(algo);
QBENCHMARK {
hash.reset();
hash.addData(data);
- hash.result();
+ [[maybe_unused]]
+ auto r = hash.resultView();
}
}
void tst_QCryptographicHash::addDataChunked()
{
- QFETCH(int, algorithm);
+ QFETCH(const Algorithm, algo);
QFETCH(QByteArray, data);
- QCryptographicHash::Algorithm algo = QCryptographicHash::Algorithm(algorithm);
+ SKIP_IF_NOT_SUPPORTED(algo);
+
QCryptographicHash hash(algo);
QBENCHMARK {
hash.reset();
// add the data in chunks of 64 bytes
for (int i = 0; i < data.size() / 64; ++i)
- hash.addData(data.constData() + 64 * i, 64);
- hash.addData(data.constData() + data.size() / 64 * 64, data.size() % 64);
+ hash.addData({data.constData() + 64 * i, 64});
+ hash.addData({data.constData() + data.size() / 64 * 64, data.size() % 64});
+
+ [[maybe_unused]]
+ auto r = hash.resultView();
+ }
+}
+
+static QByteArray hmacKey() {
+ static QByteArray key = [] {
+ QByteArray result(277, Qt::Uninitialized);
+ std::iota(result.begin(), result.end(), uchar(0)); // uchar so wraps after UCHAR_MAX
+ return result;
+ }();
+ return key;
+}
+
+void tst_QCryptographicHash::hmac_hash()
+{
+ QFETCH(const Algorithm, algo);
+ QFETCH(const QByteArray, data);
+
+ SKIP_IF_NOT_SUPPORTED(algo);
+
+ const auto key = hmacKey();
+ QBENCHMARK {
+ [[maybe_unused]]
+ auto r = QMessageAuthenticationCode::hash(data, key, algo);
+ }
+}
+
+void tst_QCryptographicHash::hmac_addData()
+{
+ QFETCH(const Algorithm, algo);
+ QFETCH(const QByteArray, data);
+
+ SKIP_IF_NOT_SUPPORTED(algo);
+
+ const auto key = hmacKey();
+ QMessageAuthenticationCode mac(algo, key);
+ QBENCHMARK {
+ mac.reset();
+ mac.addData(data);
+ [[maybe_unused]]
+ auto r = mac.resultView();
+ }
+}
- hash.result();
+void tst_QCryptographicHash::hmac_setKey_data()
+{
+ QTest::addColumn<Algorithm>("algo");
+ for_each_algorithm([] (Algorithm algo, const char *name) {
+ if (algo == Algorithm::NumAlgorithms)
+ return;
+ QTest::addRow("%s", name) << algo;
+ });
+}
+
+void tst_QCryptographicHash::hmac_setKey()
+{
+ QFETCH(const Algorithm, algo);
+
+ SKIP_IF_NOT_SUPPORTED(algo);
+
+ const QByteArrayList keys = [] {
+ QByteArrayList result;
+ const auto fullKey = hmacKey();
+ result.reserve(fullKey.size());
+ for (auto i = fullKey.size(); i > 0; --i)
+ result.push_back(fullKey.sliced(i));
+ return result;
+ }();
+
+ QMessageAuthenticationCode mac(algo);
+ QBENCHMARK {
+ for (const auto &key : keys) {
+ mac.setKey(key);
+ mac.addData("abc", 3); // avoid lazy setKey()
+ }
}
}
+#undef SKIP_IF_NOT_SUPPORTED
+
QTEST_APPLESS_MAIN(tst_QCryptographicHash)
#include "tst_bench_qcryptographichash.moc"
diff --git a/tests/benchmarks/corelib/tools/qhash/CMakeLists.txt b/tests/benchmarks/corelib/tools/qhash/CMakeLists.txt
index 437ea285e8..9002cc0723 100644
--- a/tests/benchmarks/corelib/tools/qhash/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/qhash/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qhash Binary:
#####################################################################
@@ -6,8 +9,10 @@ qt_internal_add_benchmark(tst_bench_qhash
SOURCES
tst_bench_qhash.cpp
outofline.cpp
+ NO_PCH_SOURCES
+ tst_bench_qhash.cpp # undef QT_NO_FOREACH
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/qhash/outofline.cpp b/tests/benchmarks/corelib/tools/qhash/outofline.cpp
index 795b2cbdc6..5b16c36ffb 100644
--- a/tests/benchmarks/corelib/tools/qhash/outofline.cpp
+++ b/tests/benchmarks/corelib/tools/qhash/outofline.cpp
@@ -1,38 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtTest 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 "tst_bench_qhash.h"
QT_BEGIN_NAMESPACE
-uint qHash(const Qt4String &str)
+size_t qHash(const Qt4String &str, size_t /* never used */)
{
- int n = str.length();
+ qsizetype n = str.size();
const QChar *p = str.unicode();
uint h = 0;
@@ -44,11 +19,11 @@ uint qHash(const Qt4String &str)
return h;
}
-uint qHash(const Qt50String &key, uint seed)
+size_t qHash(const Qt50String &key, size_t seed)
{
const QChar *p = key.unicode();
- int len = key.size();
- uint h = seed;
+ qsizetype len = key.size();
+ size_t h = seed;
for (int i = 0; i < len; ++i)
h = 31 * h + p[i].unicode();
return h;
@@ -65,10 +40,10 @@ uint qHash(const Qt50String &key, uint seed)
// Still, we can avoid writing the multiplication as "(h << 5) - h"
// -- the compiler will turn it into a shift and an addition anyway
// (for instance, gcc 4.4 does that even at -O0).
-uint qHash(const JavaString &str)
+size_t qHash(const JavaString &str, size_t /* never used */)
{
- const unsigned short *p = (unsigned short *)str.constData();
- const int len = str.size();
+ const auto *p = reinterpret_cast<const char16_t *>(str.constData());
+ const qsizetype len = str.size();
uint h = 0;
diff --git a/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.cpp b/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.cpp
index 30778a0c8c..1a62a48437 100644
--- a/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.cpp
+++ b/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.cpp
@@ -1,31 +1,8 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Copyright (C) 2016 Intel Corporation.
-** 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.
+// Copyright (C) 2016 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "tst_bench_qhash.h"
@@ -36,6 +13,8 @@
#include <QUuid>
#include <QTest>
+static constexpr quint64 RandomSeed32 = 1045982819;
+static constexpr quint64 RandomSeed64 = QtPrivate::QHashCombine{}(RandomSeed32, RandomSeed32);
class tst_QHash : public QObject
{
@@ -54,6 +33,8 @@ private slots:
void hashing_current_data() { data(); }
void hashing_current() { hashing_template<QString>(); }
+ void hashing_qbytearray_data() { data(); }
+ void hashing_qbytearray() { hashing_template<QByteArray>(); }
void hashing_qt50_data() { data(); }
void hashing_qt50() { hashing_template<Qt50String>(); }
void hashing_qt4_data() { data(); }
@@ -61,15 +42,25 @@ private slots:
void hashing_javaString_data() { data(); }
void hashing_javaString() { hashing_template<JavaString>(); }
+ void hashing_nonzero_current_data() { data(); }
+ void hashing_nonzero_current() { hashing_nonzero_template<QString>(); }
+ void hashing_nonzero_qbytearray_data() { data(); }
+ void hashing_nonzero_qbytearray() { hashing_nonzero_template<QByteArray>(); }
+ void hashing_nonzero_qlatin1string_data() { data(); }
+ void hashing_nonzero_qlatin1string() { hashing_nonzero_template<OwningLatin1String>(); }
+
private:
void data();
template <typename String> void qhash_template();
- template <typename String> void hashing_template();
+ template <typename String, size_t Seed = 0> void hashing_template();
+ template <typename String> void hashing_nonzero_template()
+ { hashing_template<String, size_t(RandomSeed64)>(); }
QStringList smallFilePaths;
QStringList uuids;
QStringList dict;
QStringList numbers;
+ QStringList longstrings;
};
///////////////////// QHash /////////////////////
@@ -78,6 +69,8 @@ private:
void tst_QHash::initTestCase()
{
+ QHashSeed::setDeterministicGlobalSeed();
+
// small list of strings (that happen to look like file paths produced long
// ago by cd ../.. && find . -print, but that's irrelevant).
QFile smallPathsData(QFINDTESTDATA("paths_small_data.txt"));
@@ -89,15 +82,17 @@ void tst_QHash::initTestCase()
// guaranteed to be completely random, generated by http://xkcd.com/221/
QUuid ns = QUuid("{f43d2ef3-2fe9-4563-a6f5-5a0100c2d699}");
uuids.reserve(smallFilePaths.size());
+ longstrings.reserve(smallFilePaths.size());
foreach (const QString &path, smallFilePaths)
uuids.append(QUuid::createUuidV5(ns, path).toString());
-
+ for (qsizetype i = 0; i < uuids.size(); ++i)
+ longstrings.append(uuids.at(i).repeated(8));
// lots of strings with alphabetical characters, vaguely reminiscent of
// a dictionary.
//
- // this programatically generates a series like:
+ // this programmatically generates a series like:
// AAAAAA
// AAAAAB
// AAAAAC
@@ -110,7 +105,7 @@ void tst_QHash::initTestCase()
QByteArray id("AAAAAAA");
if (dict.isEmpty()) {
- for (int i = id.length() - 1; i > 0;) {
+ for (int i = id.size() - 1; i > 0;) {
dict.append(id);
char c = id.at(i);
id[i] = ++c;
@@ -133,6 +128,7 @@ void tst_QHash::data()
QTest::addColumn<QStringList>("items");
QTest::newRow("paths-small") << smallFilePaths;
QTest::newRow("uuids-list") << uuids;
+ QTest::newRow("longstrings-list") << longstrings;
QTest::newRow("dictionary") << dict;
QTest::newRow("numbers") << numbers;
}
@@ -153,19 +149,30 @@ template <typename String> void tst_QHash::qhash_template()
}
}
-template <typename String> void tst_QHash::hashing_template()
+template <typename String, size_t Seed> void tst_QHash::hashing_template()
{
// just the hashing function
QFETCH(QStringList, items);
QList<String> realitems;
realitems.reserve(items.size());
- foreach (const QString &s, items)
- realitems.append(s);
+ foreach (const QString &s, items) {
+ if constexpr (std::is_same_v<QString::value_type, typename String::value_type>) {
+ realitems.append(s);
+ } else if constexpr (sizeof(typename String::value_type) == 1) {
+ realitems.append(String(s.toLatin1()));
+ }
+ }
QBENCHMARK {
- for (int i = 0, n = realitems.size(); i != n; ++i)
- (void)qHash(realitems.at(i));
+ for (int i = 0, n = realitems.size(); i != n; ++i) {
+ volatile size_t h = qHash(realitems.at(i), Seed);
+ (void)h;
+#ifdef Q_CC_GNU
+ // "use" h
+ asm ("" : "+r" (h));
+#endif
+ }
}
}
diff --git a/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.h b/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.h
index eca4b61d58..501b4a8b7f 100644
--- a/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.h
+++ b/tests/benchmarks/corelib/tools/qhash/tst_bench_qhash.h
@@ -1,33 +1,20 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtTest 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 <QHashFunctions>
#include <QString>
+struct OwningLatin1String : QByteArray
+{
+ OwningLatin1String() = default;
+ OwningLatin1String(const QByteArray &a) : QByteArray(a) {}
+ OwningLatin1String(QByteArray &&a) : QByteArray(std::move(a)) {}
+};
+QT_BEGIN_NAMESPACE
+inline size_t qHash(const OwningLatin1String &s, size_t seed = 0)
+{ return qHash(QLatin1StringView(s), seed); }
+QT_END_NAMESPACE
+
struct Qt4String : QString
{
Qt4String() {}
@@ -35,7 +22,7 @@ struct Qt4String : QString
};
QT_BEGIN_NAMESPACE
-uint qHash(const Qt4String &);
+size_t qHash(const Qt4String &, size_t = 0);
QT_END_NAMESPACE
struct Qt50String : QString
@@ -45,7 +32,7 @@ struct Qt50String : QString
};
QT_BEGIN_NAMESPACE
-uint qHash(const Qt50String &, uint seed = 0);
+size_t qHash(const Qt50String &, size_t seed = 0);
QT_END_NAMESPACE
@@ -56,6 +43,6 @@ struct JavaString : QString
};
QT_BEGIN_NAMESPACE
-uint qHash(const JavaString &);
+size_t qHash(const JavaString &, size_t = 0);
QT_END_NAMESPACE
diff --git a/tests/benchmarks/corelib/tools/qlist/CMakeLists.txt b/tests/benchmarks/corelib/tools/qlist/CMakeLists.txt
index 6c9a96399f..dabfe08122 100644
--- a/tests/benchmarks/corelib/tools/qlist/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/qlist/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qlist Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qlist
SOURCES
tst_bench_qlist.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/qlist/tst_bench_qlist.cpp b/tests/benchmarks/corelib/tools/qlist/tst_bench_qlist.cpp
index 90c1e02a81..24691d1f71 100644
--- a/tests/benchmarks/corelib/tools/qlist/tst_bench_qlist.cpp
+++ b/tests/benchmarks/corelib/tools/qlist/tst_bench_qlist.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QList>
#include <QTest>
diff --git a/tests/benchmarks/corelib/tools/qmap/CMakeLists.txt b/tests/benchmarks/corelib/tools/qmap/CMakeLists.txt
index f4b389ad08..4dc3dbb258 100644
--- a/tests/benchmarks/corelib/tools/qmap/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/qmap/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qmap.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qmap Binary:
@@ -9,6 +10,6 @@ qt_internal_add_benchmark(tst_bench_qmap
tst_bench_qmap.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/qmap/tst_bench_qmap.cpp b/tests/benchmarks/corelib/tools/qmap/tst_bench_qmap.cpp
index c8df971e3c..db3c4fc7a2 100644
--- a/tests/benchmarks/corelib/tools/qmap/tst_bench_qmap.cpp
+++ b/tests/benchmarks/corelib/tools/qmap/tst_bench_qmap.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QFile>
#include <QMap>
diff --git a/tests/benchmarks/corelib/tools/qrect/CMakeLists.txt b/tests/benchmarks/corelib/tools/qrect/CMakeLists.txt
index e3ce41f7be..e28ca82c74 100644
--- a/tests/benchmarks/corelib/tools/qrect/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/qrect/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qrect Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qrect
SOURCES
tst_bench_qrect.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/qrect/tst_bench_qrect.cpp b/tests/benchmarks/corelib/tools/qrect/tst_bench_qrect.cpp
index 8850ede4f6..0ba9e15963 100644
--- a/tests/benchmarks/corelib/tools/qrect/tst_bench_qrect.cpp
+++ b/tests/benchmarks/corelib/tools/qrect/tst_bench_qrect.cpp
@@ -1,32 +1,9 @@
-/****************************************************************************
-**
-** 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 file contains benchmarks for QRect/QRectF functions.
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include <QDebug>
#include <qtest.h>
diff --git a/tests/benchmarks/corelib/tools/qringbuffer/CMakeLists.txt b/tests/benchmarks/corelib/tools/qringbuffer/CMakeLists.txt
index 23a2c990de..322fbbb83c 100644
--- a/tests/benchmarks/corelib/tools/qringbuffer/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/qringbuffer/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qringbuffer Binary:
#####################################################################
@@ -5,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qringbuffer
SOURCES
tst_bench_qringbuffer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/qringbuffer/tst_bench_qringbuffer.cpp b/tests/benchmarks/corelib/tools/qringbuffer/tst_bench_qringbuffer.cpp
index ab75688749..f352cd56a9 100644
--- a/tests/benchmarks/corelib/tools/qringbuffer/tst_bench_qringbuffer.cpp
+++ b/tests/benchmarks/corelib/tools/qringbuffer/tst_bench_qringbuffer.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 <private/qringbuffer_p.h>
#include <QByteArray>
diff --git a/tests/benchmarks/corelib/tools/qset/CMakeLists.txt b/tests/benchmarks/corelib/tools/qset/CMakeLists.txt
index 844226c833..7bbed20106 100644
--- a/tests/benchmarks/corelib/tools/qset/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/qset/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qset Binary:
#####################################################################
@@ -5,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_qset
SOURCES
tst_bench_qset.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/qset/tst_bench_qset.cpp b/tests/benchmarks/corelib/tools/qset/tst_bench_qset.cpp
index 4d873f8e39..5bbec05aab 100644
--- a/tests/benchmarks/corelib/tools/qset/tst_bench_qset.cpp
+++ b/tests/benchmarks/corelib/tools/qset/tst_bench_qset.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 <QSet>
#include <QTest>
@@ -34,12 +9,22 @@ class tst_QSet : public QObject
Q_OBJECT
private slots:
+ void initTestCase();
void intersect_int_data();
void intersect_int();
void intersect_complexType_data();
void intersect_complexType();
+ void unite_int_data();
+ void unite_int();
+ void contains_then_insert_int_data();
+ void contains_then_insert_int();
};
+void tst_QSet::initTestCase()
+{
+ QHashSeed::setDeterministicGlobalSeed();
+}
+
void tst_QSet::intersect_int_data()
{
QTest::addColumn<int>("lhsSize");
@@ -123,6 +108,70 @@ void tst_QSet::intersect_complexType()
}
}
+void tst_QSet::unite_int_data()
+{
+ QTest::addColumn<int>("lhsSize");
+ QTest::addColumn<int>("rhsSize");
+ QTest::addColumn<int>("overlap");
+
+ QTest::newRow("1000000.unite(1000) - 0 overlap") << 1000000 << 1000 << 0;
+ QTest::newRow("1000000.unite(1000) - 100 overlap") << 1000000 << 1000 << 100;
+ QTest::newRow("1000000.unite(1000) - 1000 overlap") << 1000000 << 1000 << 1000;
+ QTest::newRow("1000.unite(1000000) - 0 overlap") << 1000 << 1000000 << 0;
+ QTest::newRow("1000.unite(1000000) - 100 overlap") << 1000 << 1000000 << 100;
+ QTest::newRow("1000.unite(1000000) - 1000 overlap") << 1000 << 1000000 << 1000;
+}
+
+auto build_sets(int lhsSize, int rhsSize, int overlap)
+{
+ QSet<int> lhs;
+ for (int i = 0; i < lhsSize; ++i)
+ lhs.insert(i);
+
+ QSet<int> rhs;
+ for (int i = lhsSize - overlap; i < rhsSize + lhsSize - overlap; ++i)
+ rhs.insert(i);
+
+ return std::make_pair(lhs, rhs);
+}
+
+void tst_QSet::unite_int()
+{
+ QFETCH(int, lhsSize);
+ QFETCH(int, rhsSize);
+ QFETCH(int, overlap);
+
+ auto [lhs, rhs] = build_sets(lhsSize, rhsSize, overlap);
+
+ QBENCHMARK {
+ QSet united = QSet(lhs).unite(rhs);
+ QCOMPARE(united.size(), lhsSize + rhsSize - overlap);
+ }
+}
+
+void tst_QSet::contains_then_insert_int_data()
+{
+ unite_int_data();
+}
+
+void tst_QSet::contains_then_insert_int()
+{
+ QFETCH(int, lhsSize);
+ QFETCH(int, rhsSize);
+ QFETCH(int, overlap);
+
+ auto [lhs, rhs] = build_sets(lhsSize, rhsSize, overlap);
+
+ QBENCHMARK {
+ QSet copy(lhs);
+ for (auto i : rhs) {
+ if (!copy.contains(i))
+ copy.insert(i);
+ }
+ QCOMPARE(copy.size(), lhsSize + rhsSize - overlap);
+ }
+}
+
QTEST_MAIN(tst_QSet)
#include "tst_bench_qset.moc"
diff --git a/tests/benchmarks/corelib/tools/qsharedpointer/CMakeLists.txt b/tests/benchmarks/corelib/tools/qsharedpointer/CMakeLists.txt
index 5103fc3229..6adf1f2e4e 100644
--- a/tests/benchmarks/corelib/tools/qsharedpointer/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/qsharedpointer/CMakeLists.txt
@@ -1,9 +1,12 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_benchmark(tst_bench_shared_ptr
SOURCES
tst_bench_shared_ptr.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/qsharedpointer/tst_bench_shared_ptr.cpp b/tests/benchmarks/corelib/tools/qsharedpointer/tst_bench_shared_ptr.cpp
index 4430282403..6197863601 100644
--- a/tests/benchmarks/corelib/tools/qsharedpointer/tst_bench_shared_ptr.cpp
+++ b/tests/benchmarks/corelib/tools/qsharedpointer/tst_bench_shared_ptr.cpp
@@ -1,30 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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 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) 2021 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QObject>
#include <QScopeGuard>
@@ -39,6 +15,18 @@
#if __has_include(<boost/shared_ptr.hpp>)
# include <boost/shared_ptr.hpp>
# include <boost/make_shared.hpp>
+
+# ifdef BOOST_NO_EXCEPTIONS
+// https://stackoverflow.com/a/9530546/134841
+// https://www.boost.org/doc/libs/1_79_0/libs/throw_exception/doc/html/throw_exception.html#throw_exception
+BOOST_NORETURN void boost::throw_exception(const std::exception &) { std::terminate(); }
+# if BOOST_VERSION >= 107300
+// https://www.boost.org/doc/libs/1_79_0/libs/throw_exception/doc/html/throw_exception.html#changes_in_1_73_0
+BOOST_NORETURN void boost::throw_exception(const std::exception &, const boost::source_location &)
+{ std::terminate(); }
+# endif // Boost v1.73
+# endif // BOOST_NO_EXCEPTIONS
+
# define ONLY_IF_BOOST(x) x
#else
# define ONLY_IF_BOOST(x) QSKIP("This benchmark requires Boost.SharedPtr.")
diff --git a/tests/benchmarks/corelib/tools/qstack/CMakeLists.txt b/tests/benchmarks/corelib/tools/qstack/CMakeLists.txt
index 9cd09a0699..e5ae510521 100644
--- a/tests/benchmarks/corelib/tools/qstack/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/qstack/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qstack Binary:
#####################################################################
@@ -5,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qstack
SOURCES
tst_bench_qstack.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/qstack/tst_bench_qstack.cpp b/tests/benchmarks/corelib/tools/qstack/tst_bench_qstack.cpp
index 2f17895f61..e0c8cda18c 100644
--- a/tests/benchmarks/corelib/tools/qstack/tst_bench_qstack.cpp
+++ b/tests/benchmarks/corelib/tools/qstack/tst_bench_qstack.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2015 Robin Burchell <robin.burchell@viroteck.net>
-** 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) 2015 Robin Burchell <robin.burchell@viroteck.net>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QStack>
#include <QDebug>
diff --git a/tests/benchmarks/corelib/tools/qvector/CMakeLists.txt b/tests/benchmarks/corelib/tools/qvector/CMakeLists.txt
index 37510cce42..df2fc8ec6a 100644
--- a/tests/benchmarks/corelib/tools/qvector/CMakeLists.txt
+++ b/tests/benchmarks/corelib/tools/qvector/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qvector.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qvector Binary:
@@ -10,7 +11,7 @@ qt_internal_add_benchmark(tst_bench_qvector
outofline.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Test
)
diff --git a/tests/benchmarks/corelib/tools/qvector/outofline.cpp b/tests/benchmarks/corelib/tools/qvector/outofline.cpp
index ec2110120e..eb4756f710 100644
--- a/tests/benchmarks/corelib/tools/qvector/outofline.cpp
+++ b/tests/benchmarks/corelib/tools/qvector/outofline.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtTest 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QList>
#include "qrawvector.h"
diff --git a/tests/benchmarks/corelib/tools/qvector/qrawvector.h b/tests/benchmarks/corelib/tools/qvector/qrawvector.h
index df3c11b223..9e68b81285 100644
--- a/tests/benchmarks/corelib/tools/qvector/qrawvector.h
+++ b/tests/benchmarks/corelib/tools/qvector/qrawvector.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QRAWVECTOR_H
#define QRAWVECTOR_H
diff --git a/tests/benchmarks/corelib/tools/qvector/tst_bench_qvector.cpp b/tests/benchmarks/corelib/tools/qvector/tst_bench_qvector.cpp
index 1c43836cb9..0486beed4e 100644
--- a/tests/benchmarks/corelib/tools/qvector/tst_bench_qvector.cpp
+++ b/tests/benchmarks/corelib/tools/qvector/tst_bench_qvector.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QVector>
#include <QDebug>
diff --git a/tests/benchmarks/dbus/CMakeLists.txt b/tests/benchmarks/dbus/CMakeLists.txt
index cd246922a1..03c1599742 100644
--- a/tests/benchmarks/dbus/CMakeLists.txt
+++ b/tests/benchmarks/dbus/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from dbus.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qdbustype)
if(QT_FEATURE_process)
diff --git a/tests/benchmarks/dbus/qdbusperformance/CMakeLists.txt b/tests/benchmarks/dbus/qdbusperformance/CMakeLists.txt
index 5d79f36090..4f070d26e4 100644
--- a/tests/benchmarks/dbus/qdbusperformance/CMakeLists.txt
+++ b/tests/benchmarks/dbus/qdbusperformance/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qdbusperformance.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(server)
add_subdirectory(test)
diff --git a/tests/benchmarks/dbus/qdbusperformance/server/CMakeLists.txt b/tests/benchmarks/dbus/qdbusperformance/server/CMakeLists.txt
index c3a5ac3c8d..7136a2e571 100644
--- a/tests/benchmarks/dbus/qdbusperformance/server/CMakeLists.txt
+++ b/tests/benchmarks/dbus/qdbusperformance/server/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from server.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## server Binary:
@@ -10,6 +11,6 @@ qt_internal_add_executable(server
SOURCES
../serverobject.h
server.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
)
diff --git a/tests/benchmarks/dbus/qdbusperformance/server/server.cpp b/tests/benchmarks/dbus/qdbusperformance/server/server.cpp
index 3831a62f71..5bf4ac1ec3 100644
--- a/tests/benchmarks/dbus/qdbusperformance/server/server.cpp
+++ b/tests/benchmarks/dbus/qdbusperformance/server/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 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/QtCore>
diff --git a/tests/benchmarks/dbus/qdbusperformance/serverobject.h b/tests/benchmarks/dbus/qdbusperformance/serverobject.h
index ea499f32ec..da12a56308 100644
--- a/tests/benchmarks/dbus/qdbusperformance/serverobject.h
+++ b/tests/benchmarks/dbus/qdbusperformance/serverobject.h
@@ -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
#ifndef SERVEROBJECT_H
diff --git a/tests/benchmarks/dbus/qdbusperformance/test/CMakeLists.txt b/tests/benchmarks/dbus/qdbusperformance/test/CMakeLists.txt
index 6b22096b4d..d62ab282a8 100644
--- a/tests/benchmarks/dbus/qdbusperformance/test/CMakeLists.txt
+++ b/tests/benchmarks/dbus/qdbusperformance/test/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from test.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qdbusperformance Binary:
@@ -8,7 +9,7 @@ qt_internal_add_benchmark(tst_qdbusperformance
SOURCES
../serverobject.h
../tst_qdbusperformance.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::DBus
Qt::Test
)
diff --git a/tests/benchmarks/dbus/qdbusperformance/tst_qdbusperformance.cpp b/tests/benchmarks/dbus/qdbusperformance/tst_qdbusperformance.cpp
index 25a22247ba..7f1957b87f 100644
--- a/tests/benchmarks/dbus/qdbusperformance/tst_qdbusperformance.cpp
+++ b/tests/benchmarks/dbus/qdbusperformance/tst_qdbusperformance.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QTestEventLoop>
diff --git a/tests/benchmarks/dbus/qdbustype/CMakeLists.txt b/tests/benchmarks/dbus/qdbustype/CMakeLists.txt
index 13169cc0a0..79597c435c 100644
--- a/tests/benchmarks/dbus/qdbustype/CMakeLists.txt
+++ b/tests/benchmarks/dbus/qdbustype/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qdbustype.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qdbustype Binary:
@@ -7,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qdbustype
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::DBusPrivate
Qt::Test
@@ -19,7 +20,7 @@ qt_internal_add_benchmark(tst_bench_qdbustype
qt_internal_extend_target(tst_bench_qdbustype CONDITION QT_FEATURE_dbus_linked
DEFINES
QT_LINKED_LIBDBUS
- PUBLIC_LIBRARIES
+ LIBRARIES
dbus-1
)
diff --git a/tests/benchmarks/dbus/qdbustype/main.cpp b/tests/benchmarks/dbus/qdbustype/main.cpp
index 6efdb81ae0..d3ee0da14c 100644
--- a/tests/benchmarks/dbus/qdbustype/main.cpp
+++ b/tests/benchmarks/dbus/qdbustype/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 FOO 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 <QTest>
#include <QtCore/QCoreApplication>
diff --git a/tests/benchmarks/gui/CMakeLists.txt b/tests/benchmarks/gui/CMakeLists.txt
index 6af9d8e224..c8c805a2a7 100644
--- a/tests/benchmarks/gui/CMakeLists.txt
+++ b/tests/benchmarks/gui/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from gui.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(animation)
add_subdirectory(image)
diff --git a/tests/benchmarks/gui/animation/CMakeLists.txt b/tests/benchmarks/gui/animation/CMakeLists.txt
index 6190f29a65..7a014c2a7a 100644
--- a/tests/benchmarks/gui/animation/CMakeLists.txt
+++ b/tests/benchmarks/gui/animation/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from animation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(TARGET Qt::Widgets)
add_subdirectory(qanimation)
diff --git a/tests/benchmarks/gui/animation/qanimation/CMakeLists.txt b/tests/benchmarks/gui/animation/qanimation/CMakeLists.txt
index 4d611eedb1..0193551ee1 100644
--- a/tests/benchmarks/gui/animation/qanimation/CMakeLists.txt
+++ b/tests/benchmarks/gui/animation/qanimation/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qanimation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qanimation Binary:
@@ -10,7 +11,7 @@ qt_internal_add_benchmark(tst_bench_qanimation
dummyobject.cpp dummyobject.h
main.cpp
rectanimation.cpp rectanimation.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
diff --git a/tests/benchmarks/gui/animation/qanimation/dummyanimation.cpp b/tests/benchmarks/gui/animation/qanimation/dummyanimation.cpp
index 71d628fda0..a877cca838 100644
--- a/tests/benchmarks/gui/animation/qanimation/dummyanimation.cpp
+++ b/tests/benchmarks/gui/animation/qanimation/dummyanimation.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 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 "dummyanimation.h"
#include "dummyobject.h"
diff --git a/tests/benchmarks/gui/animation/qanimation/dummyanimation.h b/tests/benchmarks/gui/animation/qanimation/dummyanimation.h
index adc805b726..5ac0e6431b 100644
--- a/tests/benchmarks/gui/animation/qanimation/dummyanimation.h
+++ b/tests/benchmarks/gui/animation/qanimation/dummyanimation.h
@@ -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 <QtGui>
diff --git a/tests/benchmarks/gui/animation/qanimation/dummyobject.cpp b/tests/benchmarks/gui/animation/qanimation/dummyobject.cpp
index 9c691eaf57..a69c73a90b 100644
--- a/tests/benchmarks/gui/animation/qanimation/dummyobject.cpp
+++ b/tests/benchmarks/gui/animation/qanimation/dummyobject.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
#include "dummyobject.h"
diff --git a/tests/benchmarks/gui/animation/qanimation/dummyobject.h b/tests/benchmarks/gui/animation/qanimation/dummyobject.h
index 980508598b..3bae6407ba 100644
--- a/tests/benchmarks/gui/animation/qanimation/dummyobject.h
+++ b/tests/benchmarks/gui/animation/qanimation/dummyobject.h
@@ -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 <QtGui>
diff --git a/tests/benchmarks/gui/animation/qanimation/main.cpp b/tests/benchmarks/gui/animation/qanimation/main.cpp
index afe3bcfd5e..26c188bb4a 100644
--- a/tests/benchmarks/gui/animation/qanimation/main.cpp
+++ b/tests/benchmarks/gui/animation/qanimation/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 test suite 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 <QtWidgets>
#include <qtest.h>
diff --git a/tests/benchmarks/gui/animation/qanimation/rectanimation.cpp b/tests/benchmarks/gui/animation/qanimation/rectanimation.cpp
index 48ad64b0d9..ec2fc340cf 100644
--- a/tests/benchmarks/gui/animation/qanimation/rectanimation.cpp
+++ b/tests/benchmarks/gui/animation/qanimation/rectanimation.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 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 "rectanimation.h"
#include "dummyobject.h"
diff --git a/tests/benchmarks/gui/animation/qanimation/rectanimation.h b/tests/benchmarks/gui/animation/qanimation/rectanimation.h
index 9528b6c16d..359c9a8a9b 100644
--- a/tests/benchmarks/gui/animation/qanimation/rectanimation.h
+++ b/tests/benchmarks/gui/animation/qanimation/rectanimation.h
@@ -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 <QtGui>
diff --git a/tests/benchmarks/gui/image/CMakeLists.txt b/tests/benchmarks/gui/image/CMakeLists.txt
index 77cfeedc3e..53768eda4c 100644
--- a/tests/benchmarks/gui/image/CMakeLists.txt
+++ b/tests/benchmarks/gui/image/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from image.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(blendbench)
add_subdirectory(qimageconversion)
diff --git a/tests/benchmarks/gui/image/blendbench/CMakeLists.txt b/tests/benchmarks/gui/image/blendbench/CMakeLists.txt
index d0d61cea19..88a47c894b 100644
--- a/tests/benchmarks/gui/image/blendbench/CMakeLists.txt
+++ b/tests/benchmarks/gui/image/blendbench/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from blendbench.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_blendbench Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_blendbench
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:blendbench.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/image/blendbench/main.cpp b/tests/benchmarks/gui/image/blendbench/main.cpp
index 039d822a39..4aaf89d029 100644
--- a/tests/benchmarks/gui/image/blendbench/main.cpp
+++ b/tests/benchmarks/gui/image/blendbench/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 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 <QtGui>
#include <QString>
diff --git a/tests/benchmarks/gui/image/qimageconversion/CMakeLists.txt b/tests/benchmarks/gui/image/qimageconversion/CMakeLists.txt
index f67a2b6908..034ed28fcd 100644
--- a/tests/benchmarks/gui/image/qimageconversion/CMakeLists.txt
+++ b/tests/benchmarks/gui/image/qimageconversion/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qimageconversion.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_imageConversion Binary:
@@ -7,15 +8,11 @@
qt_internal_add_benchmark(tst_bench_imageConversion
SOURCES
tst_qimageconversion.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-#### Keys ignored in scope 1:.:.:qimageconversion.pro:<TRUE>:
-# QT_FOR_CONFIG = "gui-private"
-# TEMPLATE = "app"
-
## Scopes:
#####################################################################
diff --git a/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp b/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp
index afc9292c1d..0c4243637c 100644
--- a/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.cpp
+++ b/tests/benchmarks/gui/image/qimageconversion/tst_qimageconversion.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 <qtest.h>
#include <QImage>
diff --git a/tests/benchmarks/gui/image/qimagereader/CMakeLists.txt b/tests/benchmarks/gui/image/qimagereader/CMakeLists.txt
index d0ef0e3984..ba3c2a7ec4 100644
--- a/tests/benchmarks/gui/image/qimagereader/CMakeLists.txt
+++ b/tests/benchmarks/gui/image/qimagereader/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qimagereader.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qimagereader Binary:
@@ -6,17 +7,13 @@
qt_internal_add_benchmark(tst_bench_qimagereader
SOURCES
- tst_qimagereader.cpp
- PUBLIC_LIBRARIES
+ tst_bench_qimagereader.cpp
+ LIBRARIES
+ Qt::CorePrivate
Qt::Gui
Qt::Test
)
-#### Keys ignored in scope 1:.:.:qimagereader.pro:<TRUE>:
-# QT_FOR_CONFIG = "gui-private"
-# TEMPLATE = "app"
-# TESTDATA = "images/*"
-
## Scopes:
#####################################################################
diff --git a/tests/benchmarks/gui/image/qimagereader/tst_qimagereader.cpp b/tests/benchmarks/gui/image/qimagereader/tst_bench_qimagereader.cpp
index 48e838148f..9b23741405 100644
--- a/tests/benchmarks/gui/image/qimagereader/tst_qimagereader.cpp
+++ b/tests/benchmarks/gui/image/qimagereader/tst_bench_qimagereader.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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 <qtest.h>
+
#include <QBuffer>
#include <QDebug>
#include <QFile>
@@ -34,6 +10,8 @@
#include <QImageReader>
#include <QImageWriter>
#include <QPixmap>
+
+#include <QtCore/private/qfactoryloader_p.h>
#include <QSet>
#include <QTimer>
@@ -42,20 +20,20 @@ typedef QList<int> QIntList;
Q_DECLARE_METATYPE(QStringMap)
Q_DECLARE_METATYPE(QIntList)
-class tst_QImageReader : public QObject
+class tst_bench_QImageReader : public QObject
{
Q_OBJECT
public:
- tst_QImageReader();
- virtual ~tst_QImageReader();
+ tst_bench_QImageReader();
public slots:
void initTestCase();
- void init();
- void cleanup();
private slots:
+ void rawFactoryLoader_keyMap();
+ void rawFactoryLoader_instance();
+
void readImage_data();
void readImage();
@@ -71,9 +49,10 @@ private slots:
private:
QList< QPair<QString, QByteArray> > images; // filename, format
QString prefix;
+ QFactoryLoader m_loader{QImageIOHandlerFactoryInterface_iid, "/imageformats"};
};
-tst_QImageReader::tst_QImageReader()
+tst_bench_QImageReader::tst_bench_QImageReader()
{
images << QPair<QString, QByteArray>(QLatin1String("colorful.bmp"), QByteArray("bmp"));
images << QPair<QString, QByteArray>(QLatin1String("font.bmp"), QByteArray("bmp"));
@@ -100,26 +79,38 @@ tst_QImageReader::tst_QImageReader()
#endif
}
-tst_QImageReader::~tst_QImageReader()
-{
-}
-
-void tst_QImageReader::initTestCase()
+void tst_bench_QImageReader::initTestCase()
{
prefix = QFINDTESTDATA("images/");
if (prefix.isEmpty())
QFAIL("Can't find images directory!");
}
-void tst_QImageReader::init()
+void tst_bench_QImageReader::rawFactoryLoader_keyMap()
{
+ if (m_loader.keyMap().isEmpty())
+ QSKIP("No image plugins found.");
+
+ QBENCHMARK {
+ [[maybe_unused]] auto r = m_loader.keyMap();
+ }
}
-void tst_QImageReader::cleanup()
+void tst_bench_QImageReader::rawFactoryLoader_instance()
{
+ if (m_loader.keyMap().isEmpty())
+ QSKIP("No image plugins found.");
+
+ const auto numInstances = m_loader.keyMap().uniqueKeys().size();
+
+ QBENCHMARK {
+ for (int i = 0; i < numInstances; ++i)
+ delete m_loader.instance(i);
+ }
}
-void tst_QImageReader::readImage_data()
+
+void tst_bench_QImageReader::readImage_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<QByteArray>("format");
@@ -131,7 +122,7 @@ void tst_QImageReader::readImage_data()
}
}
-void tst_QImageReader::readImage()
+void tst_bench_QImageReader::readImage()
{
QFETCH(QString, fileName);
QFETCH(QByteArray, format);
@@ -143,7 +134,7 @@ void tst_QImageReader::readImage()
}
}
-void tst_QImageReader::setScaledSize_data()
+void tst_bench_QImageReader::setScaledSize_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<QByteArray>("format");
@@ -161,7 +152,7 @@ void tst_QImageReader::setScaledSize_data()
}
}
-void tst_QImageReader::setScaledSize()
+void tst_bench_QImageReader::setScaledSize()
{
QFETCH(QString, fileName);
QFETCH(QSize, newSize);
@@ -175,7 +166,7 @@ void tst_QImageReader::setScaledSize()
}
}
-void tst_QImageReader::setClipRect_data()
+void tst_bench_QImageReader::setClipRect_data()
{
QTest::addColumn<QString>("fileName");
QTest::addColumn<QByteArray>("format");
@@ -188,7 +179,7 @@ void tst_QImageReader::setClipRect_data()
}
}
-void tst_QImageReader::setClipRect()
+void tst_bench_QImageReader::setClipRect()
{
QFETCH(QString, fileName);
QFETCH(QRect, newRect);
@@ -202,12 +193,12 @@ void tst_QImageReader::setClipRect()
}
}
-void tst_QImageReader::setScaledClipRect_data()
+void tst_bench_QImageReader::setScaledClipRect_data()
{
setClipRect_data();
}
-void tst_QImageReader::setScaledClipRect()
+void tst_bench_QImageReader::setScaledClipRect()
{
QFETCH(QString, fileName);
QFETCH(QRect, newRect);
@@ -222,5 +213,5 @@ void tst_QImageReader::setScaledClipRect()
}
}
-QTEST_MAIN(tst_QImageReader)
-#include "tst_qimagereader.moc"
+QTEST_MAIN(tst_bench_QImageReader)
+#include "tst_bench_qimagereader.moc"
diff --git a/tests/benchmarks/gui/image/qimagescale/CMakeLists.txt b/tests/benchmarks/gui/image/qimagescale/CMakeLists.txt
index 51610fa567..74d5c8e470 100644
--- a/tests/benchmarks/gui/image/qimagescale/CMakeLists.txt
+++ b/tests/benchmarks/gui/image/qimagescale/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qimagescale.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_imageScale Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_imageScale
SOURCES
tst_qimagescale.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qimagescale.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/image/qimagescale/tst_qimagescale.cpp b/tests/benchmarks/gui/image/qimagescale/tst_qimagescale.cpp
index 2ba3731e9b..2819dc1c11 100644
--- a/tests/benchmarks/gui/image/qimagescale/tst_qimagescale.cpp
+++ b/tests/benchmarks/gui/image/qimagescale/tst_qimagescale.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 <qtest.h>
#include <QImage>
diff --git a/tests/benchmarks/gui/image/qpixmap/CMakeLists.txt b/tests/benchmarks/gui/image/qpixmap/CMakeLists.txt
index f8b1a4c754..db0546390a 100644
--- a/tests/benchmarks/gui/image/qpixmap/CMakeLists.txt
+++ b/tests/benchmarks/gui/image/qpixmap/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qpixmap.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qpixmap Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qpixmap
SOURCES
tst_qpixmap.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qpixmap.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/image/qpixmap/tst_qpixmap.cpp b/tests/benchmarks/gui/image/qpixmap/tst_qpixmap.cpp
index 36f555ba61..7a6e4a2b3f 100644
--- a/tests/benchmarks/gui/image/qpixmap/tst_qpixmap.cpp
+++ b/tests/benchmarks/gui/image/qpixmap/tst_qpixmap.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 <qtest.h>
#include <QBitmap>
diff --git a/tests/benchmarks/gui/image/qpixmapcache/CMakeLists.txt b/tests/benchmarks/gui/image/qpixmapcache/CMakeLists.txt
index 0f4a57c191..f2939ab470 100644
--- a/tests/benchmarks/gui/image/qpixmapcache/CMakeLists.txt
+++ b/tests/benchmarks/gui/image/qpixmapcache/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qpixmapcache.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qpixmapcache Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qpixmapcache
SOURCES
tst_qpixmapcache.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qpixmapcache.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/image/qpixmapcache/tst_qpixmapcache.cpp b/tests/benchmarks/gui/image/qpixmapcache/tst_qpixmapcache.cpp
index b1f1a4c083..0c93e6d2ec 100644
--- a/tests/benchmarks/gui/image/qpixmapcache/tst_qpixmapcache.cpp
+++ b/tests/benchmarks/gui/image/qpixmapcache/tst_qpixmapcache.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 <qtest.h>
#include <QPixmapCache>
diff --git a/tests/benchmarks/gui/kernel/CMakeLists.txt b/tests/benchmarks/gui/kernel/CMakeLists.txt
index 451b12388d..1f79c7d99b 100644
--- a/tests/benchmarks/gui/kernel/CMakeLists.txt
+++ b/tests/benchmarks/gui/kernel/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from kernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qguimetatype)
add_subdirectory(qguivariant)
diff --git a/tests/benchmarks/gui/kernel/qguimetatype/CMakeLists.txt b/tests/benchmarks/gui/kernel/qguimetatype/CMakeLists.txt
index 1b11788093..394706b078 100644
--- a/tests/benchmarks/gui/kernel/qguimetatype/CMakeLists.txt
+++ b/tests/benchmarks/gui/kernel/qguimetatype/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qguimetatype.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qguimetatype Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qguimetatype
SOURCES
tst_qguimetatype.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qguimetatype.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp b/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp
index ac4b45d044..2f7d278e87 100644
--- a/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.cpp
+++ b/tests/benchmarks/gui/kernel/qguimetatype/tst_qguimetatype.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 <qtest.h>
#include <QtCore/qmetatype.h>
diff --git a/tests/benchmarks/gui/kernel/qguivariant/CMakeLists.txt b/tests/benchmarks/gui/kernel/qguivariant/CMakeLists.txt
index ef1c220259..a8e3ec8ec6 100644
--- a/tests/benchmarks/gui/kernel/qguivariant/CMakeLists.txt
+++ b/tests/benchmarks/gui/kernel/qguivariant/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qguivariant.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qguivariant Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qguivariant
SOURCES
tst_qguivariant.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qguivariant.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/kernel/qguivariant/tst_qguivariant.cpp b/tests/benchmarks/gui/kernel/qguivariant/tst_qguivariant.cpp
index 625df6aef4..9c49e467ce 100644
--- a/tests/benchmarks/gui/kernel/qguivariant/tst_qguivariant.cpp
+++ b/tests/benchmarks/gui/kernel/qguivariant/tst_qguivariant.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 <qtest.h>
#include <QtCore/qvariant.h>
diff --git a/tests/benchmarks/gui/math3d/CMakeLists.txt b/tests/benchmarks/gui/math3d/CMakeLists.txt
index 53e56a83a3..f8e6f7b16c 100644
--- a/tests/benchmarks/gui/math3d/CMakeLists.txt
+++ b/tests/benchmarks/gui/math3d/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from math3d.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qmatrix4x4)
add_subdirectory(qquaternion)
diff --git a/tests/benchmarks/gui/math3d/qmatrix4x4/CMakeLists.txt b/tests/benchmarks/gui/math3d/qmatrix4x4/CMakeLists.txt
index 28ada45257..2929d2d46f 100644
--- a/tests/benchmarks/gui/math3d/qmatrix4x4/CMakeLists.txt
+++ b/tests/benchmarks/gui/math3d/qmatrix4x4/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qmatrix4x4.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qmatrix4x4 Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qmatrix4x4
SOURCES
tst_qmatrix4x4.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qmatrix4x4.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/math3d/qmatrix4x4/tst_qmatrix4x4.cpp b/tests/benchmarks/gui/math3d/qmatrix4x4/tst_qmatrix4x4.cpp
index 528256d7df..ebc61495dd 100644
--- a/tests/benchmarks/gui/math3d/qmatrix4x4/tst_qmatrix4x4.cpp
+++ b/tests/benchmarks/gui/math3d/qmatrix4x4/tst_qmatrix4x4.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtOpenGL 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 <QTest>
#include <QtGui/qmatrix4x4.h>
diff --git a/tests/benchmarks/gui/math3d/qquaternion/CMakeLists.txt b/tests/benchmarks/gui/math3d/qquaternion/CMakeLists.txt
index 147f4ce15f..e5880c0916 100644
--- a/tests/benchmarks/gui/math3d/qquaternion/CMakeLists.txt
+++ b/tests/benchmarks/gui/math3d/qquaternion/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qquaternion.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qquaternion Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qquaternion
SOURCES
tst_qquaternion.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qquaternion.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/math3d/qquaternion/tst_qquaternion.cpp b/tests/benchmarks/gui/math3d/qquaternion/tst_qquaternion.cpp
index 6a97f417a8..07b47d6401 100644
--- a/tests/benchmarks/gui/math3d/qquaternion/tst_qquaternion.cpp
+++ b/tests/benchmarks/gui/math3d/qquaternion/tst_qquaternion.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 <qtest.h>
#include <QQuaternion>
diff --git a/tests/benchmarks/gui/painting/CMakeLists.txt b/tests/benchmarks/gui/painting/CMakeLists.txt
index 080fe582f2..2313688038 100644
--- a/tests/benchmarks/gui/painting/CMakeLists.txt
+++ b/tests/benchmarks/gui/painting/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from painting.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(drawtexture)
add_subdirectory(qcolor)
diff --git a/tests/benchmarks/gui/painting/drawtexture/CMakeLists.txt b/tests/benchmarks/gui/painting/drawtexture/CMakeLists.txt
index 2d30686339..1e9af29d7f 100644
--- a/tests/benchmarks/gui/painting/drawtexture/CMakeLists.txt
+++ b/tests/benchmarks/gui/painting/drawtexture/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from drawtexture.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_drawtexture Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_drawtexture
SOURCES
tst_drawtexture.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:drawtexture.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/painting/drawtexture/tst_drawtexture.cpp b/tests/benchmarks/gui/painting/drawtexture/tst_drawtexture.cpp
index c16e68a0b1..4ab0a2db1e 100644
--- a/tests/benchmarks/gui/painting/drawtexture/tst_drawtexture.cpp
+++ b/tests/benchmarks/gui/painting/drawtexture/tst_drawtexture.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <qtest.h>
#include <QPainter>
diff --git a/tests/benchmarks/gui/painting/lancebench/CMakeLists.txt b/tests/benchmarks/gui/painting/lancebench/CMakeLists.txt
index 0d22641117..bfdd4df1c9 100644
--- a/tests/benchmarks/gui/painting/lancebench/CMakeLists.txt
+++ b/tests/benchmarks/gui/painting/lancebench/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from lancebench.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_lancebench Binary:
@@ -10,7 +11,7 @@ qt_internal_add_benchmark(tst_bench_lancebench
tst_lancebench.cpp
INCLUDE_DIRECTORIES
../../../../baseline/shared
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Test
@@ -60,15 +61,10 @@ qt_internal_add_resource(tst_bench_lancebench "images"
${images_resource_files}
)
-
-#### Keys ignored in scope 1:.:.:lancebench.pro:<TRUE>:
-# TEMPLATE = "app"
-# TESTDATA = "../../../../baseline/painting/scripts/*"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_bench_lancebench CONDITION QT_FEATURE_opengl
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::OpenGL
)
diff --git a/tests/benchmarks/gui/painting/lancebench/tst_lancebench.cpp b/tests/benchmarks/gui/painting/lancebench/tst_lancebench.cpp
index b6f7d693b9..67bef8ebfe 100644
--- a/tests/benchmarks/gui/painting/lancebench/tst_lancebench.cpp
+++ b/tests/benchmarks/gui/painting/lancebench/tst_lancebench.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "paintcommands.h"
@@ -96,7 +71,7 @@ tst_LanceBench::tst_LanceBench()
void tst_LanceBench::initTestCase()
{
- QString baseDir = QFINDTESTDATA("../../../../auto/other/lancelot/scripts/text.qps");
+ QString baseDir = QFINDTESTDATA("../../../../baseline/painting/scripts/text.qps");
scriptsDir = baseDir.left(baseDir.lastIndexOf('/')) + '/';
QDir qpsDir(scriptsDir);
qpsFiles = qpsDir.entryList(QStringList() << QLatin1String("*.qps"), QDir::Files | QDir::Readable);
@@ -106,7 +81,7 @@ void tst_LanceBench::initTestCase()
}
std::sort(qpsFiles.begin(), qpsFiles.end());
- for (const QString& fileName : qAsConst(qpsFiles)) {
+ for (const QString& fileName : std::as_const(qpsFiles)) {
QFile file(scriptsDir + fileName);
file.open(QFile::ReadOnly);
QByteArray cont = file.readAll();
@@ -262,7 +237,7 @@ void tst_LanceBench::testCoreOpenGL()
void tst_LanceBench::setupTestSuite(const QStringList& blacklist)
{
QTest::addColumn<QString>("qpsFile");
- for (const QString &fileName : qAsConst(qpsFiles)) {
+ for (const QString &fileName : std::as_const(qpsFiles)) {
if (blacklist.contains(fileName))
continue;
QTest::newRow(fileName.toLatin1()) << fileName;
diff --git a/tests/benchmarks/gui/painting/qcolor/CMakeLists.txt b/tests/benchmarks/gui/painting/qcolor/CMakeLists.txt
index d482102f1b..a450c698bf 100644
--- a/tests/benchmarks/gui/painting/qcolor/CMakeLists.txt
+++ b/tests/benchmarks/gui/painting/qcolor/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qcolor.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qcolor Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qcolor
SOURCES
tst_qcolor.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qcolor.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/painting/qcolor/tst_qcolor.cpp b/tests/benchmarks/gui/painting/qcolor/tst_qcolor.cpp
index 52a7673c0c..02fe3f986e 100644
--- a/tests/benchmarks/gui/painting/qcolor/tst_qcolor.cpp
+++ b/tests/benchmarks/gui/painting/qcolor/tst_qcolor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@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 David Faure <david.faure@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qtest.h>
#include <QColor>
diff --git a/tests/benchmarks/gui/painting/qpainter/CMakeLists.txt b/tests/benchmarks/gui/painting/qpainter/CMakeLists.txt
index ce302599cf..13a99ecc1d 100644
--- a/tests/benchmarks/gui/painting/qpainter/CMakeLists.txt
+++ b/tests/benchmarks/gui/painting/qpainter/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qpainter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qpainter Binary:
@@ -7,13 +8,10 @@
qt_internal_add_benchmark(tst_bench_qpainter
SOURCES
tst_qpainter.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Test
Qt::Widgets
Qt::WidgetsPrivate
)
-
-#### Keys ignored in scope 1:.:.:qpainter.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/painting/qpainter/tst_qpainter.cpp b/tests/benchmarks/gui/painting/qpainter/tst_qpainter.cpp
index d0719d716b..7954e964b3 100644
--- a/tests/benchmarks/gui/painting/qpainter/tst_qpainter.cpp
+++ b/tests/benchmarks/gui/painting/qpainter/tst_qpainter.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <qtest.h>
#include <QPainter>
@@ -220,6 +197,9 @@ private slots:
void drawTransformedSemiTransparentImage();
void drawTransformedFilledImage();
+ void drawPathExceedingDevice_data();
+ void drawPathExceedingDevice();
+
private:
void setupBrushes();
void createPrimitives();
@@ -695,7 +675,7 @@ void tst_QPainter::drawPixmapImage_data_helper(bool pixmaps)
for (; *targetFormats != QImage::Format_Invalid; ++targetFormats) {
const QImage::Format *sourceFormats = pixmaps ? pixmapFormats : sourceImageFormats;
for (; *sourceFormats != QImage::Format_Invalid; ++sourceFormats) {
- for (const QSize &s : qAsConst(sizes)) {
+ for (const QSize &s : std::as_const(sizes)) {
for (int type=0; type<=3; ++type) {
QString name = QString::fromLatin1("%1 on %2, (%3x%4), %5")
.arg(formatNames[*sourceFormats])
@@ -1684,6 +1664,56 @@ void tst_QPainter::drawTransformedFilledImage()
}
}
+void tst_QPainter::drawPathExceedingDevice_data()
+{
+ QTest::addColumn<int>("dim");
+ QTest::addColumn<QPainterPath>("path");
+
+ const int dim = 512;
+ QPainterPath p;
+ const int ext = 10 * dim;
+ for (int i = 0; i < ext; i += (ext / 50)) {
+ p.lineTo(ext, i);
+ p.lineTo(0, dim);
+ p.moveTo(0, 0);
+ }
+
+ {
+ QPainterPath preClip;
+ preClip.addRect(0, 0, dim, dim);
+ QTest::newRow("devicesize") << dim << p.intersected(preClip);
+ }
+
+ {
+ QPainterPath preClip;
+ preClip.addRect(0, 0, 2*dim, 2*dim);
+ QTest::newRow("devicesizex2") << dim << p.intersected(preClip);
+ }
+
+ {
+ QPainterPath preClip;
+ preClip.addRect(0, 0, 5*dim, 5*dim);
+ QTest::newRow("devicesizex5") << dim << p.intersected(preClip);
+ }
+
+ QTest::newRow("devicesizex10") << dim << p;
+}
+
+void tst_QPainter::drawPathExceedingDevice()
+{
+ QFETCH(int, dim);
+ QFETCH(QPainterPath, path);
+
+ QImage img(dim, dim, QImage::Format_RGB32);
+ QPainter p(&img);
+ p.setRenderHint(QPainter::Antialiasing);
+ p.setPen(QPen(Qt::black, 3));
+ p.setBrush(Qt::NoBrush);
+
+ QBENCHMARK {
+ p.drawPath(path);
+ }
+}
QTEST_MAIN(tst_QPainter)
diff --git a/tests/benchmarks/gui/painting/qregion/CMakeLists.txt b/tests/benchmarks/gui/painting/qregion/CMakeLists.txt
index 43d397c456..c242a2f588 100644
--- a/tests/benchmarks/gui/painting/qregion/CMakeLists.txt
+++ b/tests/benchmarks/gui/painting/qregion/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qregion.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qregion Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qregion
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qregion.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/painting/qregion/main.cpp b/tests/benchmarks/gui/painting/qregion/main.cpp
index 9e926780ab..696972c140 100644
--- a/tests/benchmarks/gui/painting/qregion/main.cpp
+++ b/tests/benchmarks/gui/painting/qregion/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 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 file contains benchmarks for QRegion functions.
#include <QDebug>
diff --git a/tests/benchmarks/gui/painting/qtbench/CMakeLists.txt b/tests/benchmarks/gui/painting/qtbench/CMakeLists.txt
index e6e2ed76ab..68fbf0984f 100644
--- a/tests/benchmarks/gui/painting/qtbench/CMakeLists.txt
+++ b/tests/benchmarks/gui/painting/qtbench/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtbench.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qtbench Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qtbench
SOURCES
tst_qtbench.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qtbench.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/painting/qtbench/benchmarktests.h b/tests/benchmarks/gui/painting/qtbench/benchmarktests.h
index bffdd5bf2d..9d890f1577 100644
--- a/tests/benchmarks/gui/painting/qtbench/benchmarktests.h
+++ b/tests/benchmarks/gui/painting/qtbench/benchmarktests.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the FOO 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
#ifndef BENCHMARKTESTS_H
#define BENCHMARKTESTS_H
@@ -554,13 +529,13 @@ public:
m_staticTexts.append(staticText);
QFontMetrics fm(p->font());
- m_size = QSize(fm.horizontalAdvance(m_text, m_text.length()), fm.height());
+ m_size = QSize(fm.horizontalAdvance(m_text, m_text.size()), fm.height());
break;
}
case PainterQPointMode: {
QFontMetrics fm(p->font());
- m_size = QSize(fm.horizontalAdvance(m_text, m_text.length()), fm.height());
+ m_size = QSize(fm.horizontalAdvance(m_text, m_text.size()), fm.height());
break;
}
@@ -601,7 +576,7 @@ public:
QString name() const override
{
- int letters = m_text.length();
+ int letters = m_text.size();
int lines = m_text.count('\n');
if (lines == 0)
lines = 1;
diff --git a/tests/benchmarks/gui/painting/qtbench/tst_qtbench.cpp b/tests/benchmarks/gui/painting/qtbench/tst_qtbench.cpp
index c44eeb3b67..45b7045f94 100644
--- a/tests/benchmarks/gui/painting/qtbench/tst_qtbench.cpp
+++ b/tests/benchmarks/gui/painting/qtbench/tst_qtbench.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <qtest.h>
@@ -132,9 +109,13 @@ class tst_QtBench : public QObject
{
Q_OBJECT
+ QList<Benchmark *> benchmarks;
+
private slots:
void qtBench();
void qtBench_data();
+
+ void cleanupTestCase() { qDeleteAll(benchmarks); }
};
QString makeString(int length)
@@ -184,7 +165,6 @@ void tst_QtBench::qtBench_data()
"i erat, sed pellentesque\n"
"mi. Curabitur sed.";
- QList<Benchmark *> benchmarks;
benchmarks << (new DrawText(shortString, DrawText::PainterMode));
benchmarks << (new DrawText(middleString, DrawText::PainterMode));
benchmarks << (new DrawText(longString, DrawText::PainterMode));
diff --git a/tests/benchmarks/gui/painting/qtransform/CMakeLists.txt b/tests/benchmarks/gui/painting/qtransform/CMakeLists.txt
index b9adb340dc..8915ca3eb7 100644
--- a/tests/benchmarks/gui/painting/qtransform/CMakeLists.txt
+++ b/tests/benchmarks/gui/painting/qtransform/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtransform.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qtransform Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qtransform
SOURCES
tst_qtransform.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qtransform.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/painting/qtransform/tst_qtransform.cpp b/tests/benchmarks/gui/painting/qtransform/tst_qtransform.cpp
index 65748997bb..e6442d0dff 100644
--- a/tests/benchmarks/gui/painting/qtransform/tst_qtransform.cpp
+++ b/tests/benchmarks/gui/painting/qtransform/tst_qtransform.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 <qtest.h>
#include <QTransform>
@@ -266,7 +241,7 @@ void tst_QTransform::operatorEqual()
QFETCH(QTransform, x2);
QTransform x = x1;
QBENCHMARK {
- x == x2;
+ [[maybe_unused]] auto r = x == x2;
}
}
@@ -278,7 +253,7 @@ void tst_QTransform::operatorNotEqual()
QFETCH(QTransform, x2);
QTransform x = x1;
QBENCHMARK {
- x != x2;
+ [[maybe_unused]] auto r = x != x2;
}
}
@@ -290,7 +265,7 @@ void tst_QTransform::operatorMultiply()
QFETCH(QTransform, x2);
QTransform x = x1;
QBENCHMARK {
- x * x2;
+ [[maybe_unused]] auto r = x * x2;
}
}
@@ -335,7 +310,7 @@ void tst_QTransform::operatorMultiplyEqualScalar()
QFETCH(QTransform, transform);
QTransform x = transform;
QBENCHMARK {
- x * 3;
+ x *= 3;
}
}
@@ -357,7 +332,7 @@ void tst_QTransform::mapQPoint()
QFETCH(QTransform, transform);
QTransform x = transform;
QBENCHMARK {
- x.map(QPoint(3, 3));
+ [[maybe_unused]] auto r = x.map(QPoint(3, 3));
}
}
@@ -368,7 +343,7 @@ void tst_QTransform::mapQPointF()
QFETCH(QTransform, transform);
QTransform x = transform;
QBENCHMARK {
- x.map(QPointF(3, 3));
+ [[maybe_unused]] auto r = x.map(QPointF(3, 3));
}
}
@@ -379,7 +354,7 @@ void tst_QTransform::mapRect()
QFETCH(QTransform, transform);
QTransform x = transform;
QBENCHMARK {
- x.mapRect(QRect(0, 0, 100, 100));
+ [[maybe_unused]] auto r = x.mapRect(QRect(0, 0, 100, 100));
}
}
@@ -390,7 +365,7 @@ void tst_QTransform::mapRectF()
QFETCH(QTransform, transform);
QTransform x = transform;
QBENCHMARK {
- x.mapRect(QRectF(0, 0, 100, 100));
+ [[maybe_unused]] auto r = x.mapRect(QRectF(0, 0, 100, 100));
}
}
@@ -402,7 +377,7 @@ void tst_QTransform::mapQPolygon()
QTransform x = transform;
QPolygon poly = QPolygon(QRect(0, 0, 100, 100));
QBENCHMARK {
- x.map(poly);
+ [[maybe_unused]] auto r = x.map(poly);
}
}
@@ -414,7 +389,7 @@ void tst_QTransform::mapQPolygonF()
QTransform x = transform;
QPolygonF poly = QPolygonF(QRectF(0, 0, 100, 100));
QBENCHMARK {
- x.map(poly);
+ [[maybe_unused]] auto r = x.map(poly);
}
}
@@ -428,7 +403,7 @@ void tst_QTransform::mapQRegion()
for (int i = 0; i < 10; ++i)
region += QRect(i * 10, i * 10, 100, 100);
QBENCHMARK {
- x.map(region);
+ [[maybe_unused]] auto r = x.map(region);
}
}
@@ -439,7 +414,7 @@ void tst_QTransform::mapToPolygon()
QFETCH(QTransform, transform);
QTransform x = transform;
QBENCHMARK {
- x.mapToPolygon(QRect(0, 0, 100, 100));
+ [[maybe_unused]] auto r = x.mapToPolygon(QRect(0, 0, 100, 100));
}
}
@@ -454,7 +429,7 @@ void tst_QTransform::mapQPainterPath()
for (int i = 0; i < 10; ++i)
path.addEllipse(i * 10, i * 10, 100, 100);
QBENCHMARK {
- x.map(path);
+ [[maybe_unused]] auto r = x.map(path);
}
}
@@ -464,7 +439,7 @@ void tst_QTransform::isIdentity()
{
QFETCH(QTransform, transform);
QBENCHMARK {
- transform.isIdentity();
+ [[maybe_unused]] auto r = transform.isIdentity();
}
}
@@ -474,7 +449,7 @@ void tst_QTransform::isAffine()
{
QFETCH(QTransform, transform);
QBENCHMARK {
- transform.isAffine();
+ [[maybe_unused]] auto r = transform.isAffine();
}
}
@@ -484,7 +459,7 @@ void tst_QTransform::isInvertible()
{
QFETCH(QTransform, transform);
QBENCHMARK {
- transform.isInvertible();
+ [[maybe_unused]] auto r = transform.isInvertible();
}
}
@@ -494,7 +469,7 @@ void tst_QTransform::isRotating()
{
QFETCH(QTransform, transform);
QBENCHMARK {
- transform.isRotating();
+ [[maybe_unused]] auto r = transform.isRotating();
}
}
@@ -504,7 +479,7 @@ void tst_QTransform::isScaling()
{
QFETCH(QTransform, transform);
QBENCHMARK {
- transform.isScaling();
+ [[maybe_unused]] auto r = transform.isScaling();
}
}
@@ -514,7 +489,7 @@ void tst_QTransform::isTranslating()
{
QFETCH(QTransform, transform);
QBENCHMARK {
- transform.isTranslating();
+ [[maybe_unused]] auto r = transform.isTranslating();
}
}
@@ -524,7 +499,7 @@ void tst_QTransform::type()
{
QFETCH(QTransform, transform);
QBENCHMARK {
- transform.type();
+ [[maybe_unused]] auto r = transform.type();
}
}
@@ -534,7 +509,7 @@ void tst_QTransform::determinant()
{
QFETCH(QTransform, transform);
QBENCHMARK {
- transform.determinant();
+ [[maybe_unused]] auto r = transform.determinant();
}
}
diff --git a/tests/benchmarks/gui/text/CMakeLists.txt b/tests/benchmarks/gui/text/CMakeLists.txt
index 630f01091d..052d49e03c 100644
--- a/tests/benchmarks/gui/text/CMakeLists.txt
+++ b/tests/benchmarks/gui/text/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from text.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qfontmetrics)
add_subdirectory(qtext)
diff --git a/tests/benchmarks/gui/text/qfontmetrics/CMakeLists.txt b/tests/benchmarks/gui/text/qfontmetrics/CMakeLists.txt
index b580a6fd3d..4b9ae1e4c8 100644
--- a/tests/benchmarks/gui/text/qfontmetrics/CMakeLists.txt
+++ b/tests/benchmarks/gui/text/qfontmetrics/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qfontmetrics.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_QFontMetrics Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_QFontMetrics
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qfontmetrics.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/text/qfontmetrics/main.cpp b/tests/benchmarks/gui/text/qfontmetrics/main.cpp
index 86c7cebfd4..8aafa809f8 100644
--- a/tests/benchmarks/gui/text/qfontmetrics/main.cpp
+++ b/tests/benchmarks/gui/text/qfontmetrics/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 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 <QObject>
#include <QFont>
diff --git a/tests/benchmarks/gui/text/qtext/CMakeLists.txt b/tests/benchmarks/gui/text/qtext/CMakeLists.txt
index 5b154a431b..13cd6a2c3a 100644
--- a/tests/benchmarks/gui/text/qtext/CMakeLists.txt
+++ b/tests/benchmarks/gui/text/qtext/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtext.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_QText Binary:
@@ -7,12 +8,8 @@
qt_internal_add_benchmark(tst_bench_QText
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qtext.pro:<TRUE>:
-# TEMPLATE = "app"
-# TESTDATA = "bidi.txt"
diff --git a/tests/benchmarks/gui/text/qtext/main.cpp b/tests/benchmarks/gui/text/qtext/main.cpp
index ef88f64d8f..121bc43573 100644
--- a/tests/benchmarks/gui/text/qtext/main.cpp
+++ b/tests/benchmarks/gui/text/qtext/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 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 <QDebug>
#include <QTextDocument>
@@ -122,10 +97,10 @@ void tst_QText::shaping_data()
QFile file(testFile);
QVERIFY(file.open(QFile::ReadOnly));
QByteArray data = file.readAll();
- QVERIFY(data.count() > 1000);
+ QVERIFY(data.size() > 1000);
QStringList list = QString::fromUtf8(data.data()).split(QLatin1Char('\n'), Qt::SkipEmptyParts);
- QVERIFY(list.count() %2 == 0); // even amount as we have title and then content.
- for (int i=0; i < list.count(); i+=2) {
+ QVERIFY(list.size() % 2 == 0); // even amount as we have title and then content.
+ for (int i = 0; i < list.size(); i += 2) {
QTest::newRow(list.at(i).toLatin1()) << list.at(i+1);
}
}
diff --git a/tests/benchmarks/gui/text/qtextdocument/CMakeLists.txt b/tests/benchmarks/gui/text/qtextdocument/CMakeLists.txt
index 9a9017c8e0..2a95411335 100644
--- a/tests/benchmarks/gui/text/qtextdocument/CMakeLists.txt
+++ b/tests/benchmarks/gui/text/qtextdocument/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtextdocument.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_QTextDocument Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_QTextDocument
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qtextdocument.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/gui/text/qtextdocument/main.cpp b/tests/benchmarks/gui/text/qtextdocument/main.cpp
index 17fee3b2eb..7bdff95235 100644
--- a/tests/benchmarks/gui/text/qtextdocument/main.cpp
+++ b/tests/benchmarks/gui/text/qtextdocument/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Robin Burchell <robin.burchell@viroteck.net>
-** 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 Robin Burchell <robin.burchell@viroteck.net>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QTextDocument>
diff --git a/tests/benchmarks/network/CMakeLists.txt b/tests/benchmarks/network/CMakeLists.txt
index 4f20fb5ccd..50558e6999 100644
--- a/tests/benchmarks/network/CMakeLists.txt
+++ b/tests/benchmarks/network/CMakeLists.txt
@@ -1,6 +1,6 @@
-# Generated from network.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# special case begin
# SSL library include path is not propagated with private tests which results in
# test not being able to find the ssl header when they are not in the standard
# include paths
@@ -13,7 +13,6 @@ if (QT_FEATURE_private_tests)
include_directories($<TARGET_PROPERTY:WrapOpenSSLHeaders::WrapOpenSSLHeaders,INTERFACE_INCLUDE_DIRECTORIES>)
endif()
endif()
-# special case end
add_subdirectory(access)
add_subdirectory(kernel)
diff --git a/tests/benchmarks/network/access/CMakeLists.txt b/tests/benchmarks/network/access/CMakeLists.txt
index 3069505252..bc085cad61 100644
--- a/tests/benchmarks/network/access/CMakeLists.txt
+++ b/tests/benchmarks/network/access/CMakeLists.txt
@@ -1,6 +1,8 @@
-# Generated from access.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qfile_vs_qnetworkaccessmanager)
+add_subdirectory(qhttpheaders)
add_subdirectory(qnetworkreply)
add_subdirectory(qnetworkreply_from_cache)
add_subdirectory(qnetworkdiskcache)
diff --git a/tests/benchmarks/network/access/qdecompresshelper/CMakeLists.txt b/tests/benchmarks/network/access/qdecompresshelper/CMakeLists.txt
index 92a729d373..d2ca8db69d 100644
--- a/tests/benchmarks/network/access/qdecompresshelper/CMakeLists.txt
+++ b/tests/benchmarks/network/access/qdecompresshelper/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qdecompresshelper.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qdecompresshelper Binary:
@@ -8,12 +9,8 @@ qt_internal_add_benchmark(qdecompresshelper
SOURCES
main.cpp
DEFINES
- SRC_DIR=${CMAKE_CURRENT_SOURCE_DIR} # special case
- PUBLIC_LIBRARIES
+ SRC_DIR=${CMAKE_CURRENT_SOURCE_DIR}
+ LIBRARIES
Qt::NetworkPrivate
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:decompresshelper.pro:<TRUE>:
-# TEMPLATE = "app"
-# _REQUIREMENTS = "qtConfig(private_tests)"
diff --git a/tests/benchmarks/network/access/qdecompresshelper/main.cpp b/tests/benchmarks/network/access/qdecompresshelper/main.cpp
index 3c651b16dd..09c24af668 100644
--- a/tests/benchmarks/network/access/qdecompresshelper/main.cpp
+++ b/tests/benchmarks/network/access/qdecompresshelper/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QtNetwork/private/qdecompresshelper_p.h>
diff --git a/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/CMakeLists.txt b/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/CMakeLists.txt
index 929e87908b..fd1592ad17 100644
--- a/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/CMakeLists.txt
+++ b/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qfile_vs_qnetworkaccessmanager.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qfile_vs_qnetworkaccessmanager Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qfile_vs_qnetworkaccessmanager
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qfile_vs_qnetworkaccessmanager.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp b/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp
index d0ed0f9b00..372158163f 100644
--- a/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp
+++ b/tests/benchmarks/network/access/qfile_vs_qnetworkaccessmanager/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QDebug>
#include <qtest.h>
#include <QTest>
diff --git a/tests/benchmarks/network/access/qhttpheaders/CMakeLists.txt b/tests/benchmarks/network/access/qhttpheaders/CMakeLists.txt
new file mode 100644
index 0000000000..6e89259141
--- /dev/null
+++ b/tests/benchmarks/network/access/qhttpheaders/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2024 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_benchmark(tst_bench_qhttpheaders
+ SOURCES
+ tst_bench_qhttpheaders.cpp
+ LIBRARIES
+ Qt::Test
+ Qt::Network
+)
diff --git a/tests/benchmarks/network/access/qhttpheaders/tst_bench_qhttpheaders.cpp b/tests/benchmarks/network/access/qhttpheaders/tst_bench_qhttpheaders.cpp
new file mode 100644
index 0000000000..424b475b27
--- /dev/null
+++ b/tests/benchmarks/network/access/qhttpheaders/tst_bench_qhttpheaders.cpp
@@ -0,0 +1,266 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtNetwork/qhttpheaders.h>
+
+#include <QtCore/qstring.h>
+#include <QTest>
+
+using namespace Qt::StringLiterals;
+
+class tst_QHttpHeaders : public QObject
+{
+ Q_OBJECT
+private slots:
+ void initTestCase();
+
+ void append_enum();
+ void append_string_data();
+ void append_string();
+
+ void contains_enum_data() { setupBasicEnumData(); }
+ void contains_enum();
+ void contains_string_data() { setupBasicStringData(); }
+ void contains_string();
+
+ void values_enum_data() { setupBasicEnumData(); }
+ void values_enum();
+ void values_string_data() { setupBasicStringData(); }
+ void values_string();
+
+ void combinedValue_enum_data() { setupBasicEnumData(); }
+ void combinedValue_enum();
+ void combinedValue_string_data() { setupBasicStringData(); }
+ void combinedValue_string();
+
+ void removeAll_enum_data() { setupBasicEnumData(); }
+ void removeAll_enum();
+ void removeAll_string_data() { setupBasicStringData(); }
+ void removeAll_string();
+
+private:
+ using WKH = QHttpHeaders::WellKnownHeader;
+
+ void setupBasicEnumData()
+ {
+ QTest::addColumn<WKH>("name");
+ QTest::addColumn<bool>("exists");
+
+ QTest::newRow("Nonexistent enum") << WKH::CDNLoop << false;
+ QTest::newRow("Existent enum") << WKH::Accept << true;
+ }
+
+ void setupBasicStringData()
+ {
+ QTest::addColumn<QString>("name");
+ QTest::addColumn<bool>("exists");
+
+ QTest::newRow("Nonexistent string") << "cdn-loop" << false;
+ QTest::newRow("Existent wellknown string") << "accept" << true;
+ QTest::newRow("Existent custom string") << "customheader" << true;
+ }
+
+ const QString customNameLowCase = u"customm-name"_s; // Not a typo, same length as knownName
+ const QString customNameMixCase = u"Customm-Name"_s;
+ const QString knownNameLowCase = u"content-type"_s;
+ const QString knownNameMixCase = u"Content-Type"_s;
+ static constexpr QAnyStringView value1{"value1"};
+ static constexpr QAnyStringView value2{"value2"};
+ static constexpr QAnyStringView value3{"value3"};
+ static constexpr QAnyStringView value4{"value4"};
+
+ QHttpHeaders m_complexHeaders;
+ QHttpHeaders m_simpleHeaders;
+};
+
+void tst_QHttpHeaders::initTestCase()
+{
+ // A mix of known and custom headers in non-alphabetical order.
+ // "accept" (wellknown header) and "customheader" (custom header)
+ // have four values and in same order: value3, value1, value2, value4
+ m_complexHeaders.append(WKH::Upgrade, value1);
+ m_complexHeaders.append("timeout", value1);
+ m_complexHeaders.append(WKH::KeepAlive, value1);
+ m_complexHeaders.append("nel", value1);
+ m_complexHeaders.append(WKH::Date, value1);
+ m_complexHeaders.append("accept", value3);
+ m_complexHeaders.append("customheader", value3);
+ m_complexHeaders.append(WKH::SoapAction, value1);
+ m_complexHeaders.append("foobar", value1);
+ m_complexHeaders.append(WKH::Accept, value1);
+ m_complexHeaders.append("customheader", value1);
+ m_complexHeaders.append(WKH::Cookie, value1);
+ m_complexHeaders.append("cookie", value1);
+ m_complexHeaders.append(WKH::ProxyStatus, value1);
+ m_complexHeaders.append("cookie", value1);
+ m_complexHeaders.append(WKH::Accept, value2);
+ m_complexHeaders.append("customheader", value2);
+ m_complexHeaders.append(WKH::Authorization, value1);
+ m_complexHeaders.append("content-type", value1);
+ m_complexHeaders.append(WKH::Destination, value1);
+ m_complexHeaders.append("rover", value1);
+ m_complexHeaders.append("accept", value4);
+ m_complexHeaders.append("customheader", value4);
+ m_complexHeaders.append(WKH::Range, value1);
+ m_complexHeaders.append("destination", value1);
+ m_complexHeaders.append(WKH::Location, value1);
+ m_complexHeaders.append("font", value1);
+
+ // Simple headers with one value-less entry; having at least one entry ensures
+ // we don't include initial memory allocation into a test, and having
+ // as few as possible reduces cost of copying (header re-set)
+ m_simpleHeaders.append(WKH::Accept, "");
+}
+
+void tst_QHttpHeaders::append_enum()
+{
+ QHttpHeaders headers;
+ QBENCHMARK {
+ headers = m_simpleHeaders; // (Re-)set as we'll modify the headers
+ headers.append(WKH::Link, value1);
+ }
+ QCOMPARE(headers.size(), m_simpleHeaders.size() + 1);
+ QCOMPARE(headers.nameAt(headers.size() - 1), "link");
+}
+
+void tst_QHttpHeaders::append_string_data()
+{
+ QTest::addColumn<QString>("name");
+ QTest::newRow("Custom lowcase string") << customNameLowCase;
+ QTest::newRow("WellKnown lowcase string") << knownNameLowCase;
+ QTest::newRow("Custom mixcase string") << customNameMixCase;
+ QTest::newRow("WellKnown mixcase string") << knownNameMixCase;
+}
+
+void tst_QHttpHeaders::append_string()
+{
+ QFETCH(QString, name);
+
+ QHttpHeaders headers;
+ QBENCHMARK {
+ headers = m_simpleHeaders; // (Re-)set as we'll modify the headers
+ headers.append(name, value1);
+ }
+ QCOMPARE(headers.size(), m_simpleHeaders.size() + 1);
+ QCOMPARE(headers.nameAt(headers.size() - 1), name.toLower());
+}
+
+void tst_QHttpHeaders::contains_enum()
+{
+ QFETCH(WKH, name);
+ QFETCH(bool, exists);
+
+ bool result;
+ QBENCHMARK {
+ result = m_complexHeaders.contains(name);
+ }
+ QCOMPARE(result, exists);
+}
+
+void tst_QHttpHeaders::contains_string()
+{
+ QFETCH(QString, name);
+ QFETCH(bool, exists);
+
+ bool result;
+ QBENCHMARK {
+ result = m_complexHeaders.contains(name);
+ }
+ QCOMPARE(result, exists);
+}
+
+void tst_QHttpHeaders::values_enum()
+{
+ QFETCH(WKH, name);
+ QFETCH(bool, exists);
+
+ QList<QByteArray> result;
+ const QList<QByteArray> expectedResult{"value3", "value1", "value2", "value4"};
+ QBENCHMARK {
+ result = m_complexHeaders.values(name);
+ }
+ if (exists)
+ QCOMPARE(result, expectedResult);
+ else
+ QVERIFY(result.isEmpty());
+}
+
+void tst_QHttpHeaders::values_string()
+{
+ QFETCH(QString, name);
+ QFETCH(bool, exists);
+
+ QList<QByteArray> result;
+ const QList<QByteArray> expectedResult{"value3", "value1", "value2", "value4"};
+ QBENCHMARK {
+ result = m_complexHeaders.values(name);
+ }
+ if (exists)
+ QCOMPARE(result, expectedResult);
+ else
+ QVERIFY(result.isEmpty());
+}
+
+void tst_QHttpHeaders::combinedValue_enum()
+{
+ QFETCH(WKH, name);
+ QFETCH(bool, exists);
+
+ QByteArray result;
+ constexpr QByteArrayView expectedResult = "value3, value1, value2, value4";
+ QBENCHMARK {
+ result = m_complexHeaders.combinedValue(name);
+ }
+ if (exists)
+ QCOMPARE(result, expectedResult);
+ else
+ QVERIFY(result.isEmpty());
+}
+
+void tst_QHttpHeaders::combinedValue_string()
+{
+ QFETCH(QString, name);
+ QFETCH(bool, exists);
+
+ QByteArray result;
+ constexpr QByteArrayView expectedResult = "value3, value1, value2, value4";
+ QBENCHMARK {
+ result = m_complexHeaders.combinedValue(name);
+ }
+ if (exists)
+ QCOMPARE(result, expectedResult);
+ else
+ QVERIFY(result.isEmpty());
+}
+
+void tst_QHttpHeaders::removeAll_enum()
+{
+ QFETCH(WKH, name);
+ QFETCH(bool, exists);
+
+ QHttpHeaders headers = m_complexHeaders;
+ QCOMPARE(headers.contains(name), exists);
+ QBENCHMARK {
+ headers = m_complexHeaders; // Restore as we'll modify the headers
+ headers.removeAll(name);
+ }
+ QVERIFY(!headers.contains(name));
+}
+
+void tst_QHttpHeaders::removeAll_string()
+{
+ QFETCH(QString, name);
+ QFETCH(bool, exists);
+
+ QHttpHeaders headers = m_complexHeaders;
+ QCOMPARE(headers.contains(name), exists);
+ QBENCHMARK {
+ headers = m_complexHeaders; // Restore as we'll modify the headers
+ headers.removeAll(name);
+ }
+ QVERIFY(!headers.contains(name));
+}
+
+QTEST_MAIN(tst_QHttpHeaders)
+
+#include "tst_bench_qhttpheaders.moc"
diff --git a/tests/benchmarks/network/access/qnetworkdiskcache/CMakeLists.txt b/tests/benchmarks/network/access/qnetworkdiskcache/CMakeLists.txt
index 4b8f3f4406..e049b221ff 100644
--- a/tests/benchmarks/network/access/qnetworkdiskcache/CMakeLists.txt
+++ b/tests/benchmarks/network/access/qnetworkdiskcache/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qnetworkdiskcache.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qnetworkdiskcache Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qnetworkdiskcache
SOURCES
tst_qnetworkdiskcache.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qnetworkdiskcache.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp b/tests/benchmarks/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp
index 113cef2cba..c70248f590 100644
--- a/tests/benchmarks/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.cpp
+++ b/tests/benchmarks/network/access/qnetworkdiskcache/tst_qnetworkdiskcache.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 <QNetworkDiskCache>
#include <QNetworkCacheMetaData>
diff --git a/tests/benchmarks/network/access/qnetworkreply/CMakeLists.txt b/tests/benchmarks/network/access/qnetworkreply/CMakeLists.txt
index ad0224e82c..1d13192d97 100644
--- a/tests/benchmarks/network/access/qnetworkreply/CMakeLists.txt
+++ b/tests/benchmarks/network/access/qnetworkreply/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qnetworkreply.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qnetworkreply Binary:
@@ -7,12 +8,9 @@
qt_internal_add_benchmark(tst_bench_qnetworkreply
SOURCES
tst_qnetworkreply.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
Qt::NetworkPrivate
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qnetworkreply.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp
index 92d9972b4e..bab2743513 100644
--- a/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/benchmarks/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
// This file contains benchmarks for QNetworkReply functions.
#include <QDebug>
@@ -46,6 +21,8 @@
#include <QtNetwork/private/qhostinfo_p.h>
#endif
+using namespace std::chrono_literals;
+
Q_DECLARE_METATYPE(QSharedPointer<char>)
class TimedSender: public QThread
@@ -481,7 +458,7 @@ void tst_qnetworkreply::httpLatency()
QNetworkRequest request(QUrl("http://" + QtNetworkSettings::serverName() + "/qtest/"));
QNetworkReply* reply = manager.get(request);
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
- QTestEventLoop::instance().enterLoop(5);
+ QTestEventLoop::instance().enterLoop(5s);
QVERIFY(!QTestEventLoop::instance().timeout());
delete reply;
}
@@ -495,7 +472,7 @@ QPair<QNetworkReply *, qint64> tst_qnetworkreply::runGetRequest(
QNetworkReply *reply = manager->get(request);
connect(reply, SIGNAL(sslErrors(QList<QSslError>)), reply, SLOT(ignoreSslErrors()));
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
- QTestEventLoop::instance().enterLoop(20);
+ QTestEventLoop::instance().enterLoop(20s);
qint64 elapsed = timer.elapsed();
return qMakePair(reply, elapsed);
}
@@ -526,7 +503,7 @@ void tst_qnetworkreply::echoPerformance()
QNetworkReply* reply = manager.post(request, data);
connect(reply, SIGNAL(sslErrors(QList<QSslError>)), reply, SLOT(ignoreSslErrors()));
connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop()), Qt::QueuedConnection);
- QTestEventLoop::instance().enterLoop(5);
+ QTestEventLoop::instance().enterLoop(5s);
QVERIFY(!QTestEventLoop::instance().timeout());
QVERIFY(reply->error() == QNetworkReply::NoError);
delete reply;
@@ -535,7 +512,7 @@ void tst_qnetworkreply::echoPerformance()
void tst_qnetworkreply::preConnectEncrypted()
{
- QFETCH(int, sleepTime);
+ QFETCH(std::chrono::milliseconds, sleepTime);
QString hostName = QLatin1String("www.google.com");
QNetworkAccessManager manager;
@@ -566,7 +543,7 @@ void tst_qnetworkreply::preConnectEncrypted()
// now try to make the connection beforehand
manager.connectToHostEncrypted(hostName);
- QTestEventLoop::instance().enterLoopMSecs(sleepTime);
+ QTestEventLoop::instance().enterLoop(sleepTime);
// now make another request and hopefully use the existing connection
QPair<QNetworkReply *, qint64> preConnectResult = runGetRequest(&manager, request);
@@ -584,12 +561,12 @@ void tst_qnetworkreply::preConnectEncrypted()
void tst_qnetworkreply::preConnectEncrypted_data()
{
#ifndef QT_NO_OPENSSL
- QTest::addColumn<int>("sleepTime");
+ QTest::addColumn<std::chrono::milliseconds>("sleepTime");
// start a new normal request after preconnecting is done
- QTest::newRow("HTTPS-2secs") << 2000;
+ QTest::newRow("HTTPS-2secs") << 2000ms;
// start a new normal request while preconnecting is in-flight
- QTest::newRow("HTTPS-100ms") << 100;
+ QTest::newRow("HTTPS-100ms") << 100ms;
#endif // QT_NO_OPENSSL
}
@@ -940,9 +917,9 @@ void tst_qnetworkreply::preConnect()
manager.clearAccessCache();
// now try to make the connection beforehand
- QFETCH(int, sleepTime);
+ QFETCH(std::chrono::milliseconds, sleepTime);
manager.connectToHost(hostName);
- QTestEventLoop::instance().enterLoopMSecs(sleepTime);
+ QTestEventLoop::instance().enterLoop(sleepTime);
// now make another request and hopefully use the existing connection
QPair<QNetworkReply *, qint64> preConnectResult = runGetRequest(&manager, request);
diff --git a/tests/benchmarks/network/access/qnetworkreply_from_cache/CMakeLists.txt b/tests/benchmarks/network/access/qnetworkreply_from_cache/CMakeLists.txt
index ced1a0850e..3e9bf3d23e 100644
--- a/tests/benchmarks/network/access/qnetworkreply_from_cache/CMakeLists.txt
+++ b/tests/benchmarks/network/access/qnetworkreply_from_cache/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qnetworkreply_from_cache.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qnetworkreply_from_cache Binary:
@@ -7,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qnetworkreply_from_cache
SOURCES
tst_qnetworkreply_from_cache.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
diff --git a/tests/benchmarks/network/access/qnetworkreply_from_cache/tst_qnetworkreply_from_cache.cpp b/tests/benchmarks/network/access/qnetworkreply_from_cache/tst_qnetworkreply_from_cache.cpp
index 1d7dd79fe2..c18daa8195 100644
--- a/tests/benchmarks/network/access/qnetworkreply_from_cache/tst_qnetworkreply_from_cache.cpp
+++ b/tests/benchmarks/network/access/qnetworkreply_from_cache/tst_qnetworkreply_from_cache.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Hewlett-Packard Development Company, L.P.
-** 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) 2012 Hewlett-Packard Development Company, L.P.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QBuffer>
diff --git a/tests/benchmarks/network/kernel/CMakeLists.txt b/tests/benchmarks/network/kernel/CMakeLists.txt
index 13a7caecdb..4310cdc1ee 100644
--- a/tests/benchmarks/network/kernel/CMakeLists.txt
+++ b/tests/benchmarks/network/kernel/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from kernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(QT_FEATURE_private_tests)
add_subdirectory(qhostinfo)
diff --git a/tests/benchmarks/network/kernel/qhostinfo/CMakeLists.txt b/tests/benchmarks/network/kernel/qhostinfo/CMakeLists.txt
index 7611998c26..83b63ca501 100644
--- a/tests/benchmarks/network/kernel/qhostinfo/CMakeLists.txt
+++ b/tests/benchmarks/network/kernel/qhostinfo/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qhostinfo.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qhostinfo Binary:
@@ -7,12 +8,9 @@
qt_internal_add_benchmark(tst_bench_qhostinfo
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
Qt::NetworkPrivate
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qhostinfo.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/network/kernel/qhostinfo/main.cpp b/tests/benchmarks/network/kernel/qhostinfo/main.cpp
index 88112908d5..66e4f52ec2 100644
--- a/tests/benchmarks/network/kernel/qhostinfo/main.cpp
+++ b/tests/benchmarks/network/kernel/qhostinfo/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 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 <QDebug>
diff --git a/tests/benchmarks/network/socket/CMakeLists.txt b/tests/benchmarks/network/socket/CMakeLists.txt
index 7c122a73ef..034f618737 100644
--- a/tests/benchmarks/network/socket/CMakeLists.txt
+++ b/tests/benchmarks/network/socket/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from socket.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qlocalsocket)
add_subdirectory(qtcpserver)
diff --git a/tests/benchmarks/network/socket/qlocalsocket/CMakeLists.txt b/tests/benchmarks/network/socket/qlocalsocket/CMakeLists.txt
index 7c56b0b946..660f2ee5b4 100644
--- a/tests/benchmarks/network/socket/qlocalsocket/CMakeLists.txt
+++ b/tests/benchmarks/network/socket/qlocalsocket/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
#####################################################################
## tst_bench_qlocalsocket Binary:
#####################################################################
@@ -5,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qlocalsocket
SOURCES
tst_qlocalsocket.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qlocalsocket.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp b/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp
index 7130895f51..a28869f24c 100644
--- a/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp
+++ b/tests/benchmarks/network/socket/qlocalsocket/tst_qlocalsocket.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Copyright (C) 2021 Alex Trotsenko <alex1973tr@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) 2021 The Qt Company Ltd.
+// Copyright (C) 2021 Alex Trotsenko <alex1973tr@gmail.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtTest/qtesteventloop.h>
@@ -39,6 +14,8 @@
#include <QtNetwork/qlocalsocket.h>
#include <QtNetwork/qlocalserver.h>
+using namespace std::chrono_literals;
+
class tst_QLocalSocket : public QObject
{
Q_OBJECT
@@ -200,7 +177,7 @@ void tst_QLocalSocket::dataExchange()
QFETCH(int, chunkSize);
Q_ASSERT(chunkSize > 0 && connections > 0);
- const qint64 timeToTest = 5000;
+ const auto timeToTest = 5000ms;
ServerThread serverThread(chunkSize);
serverThread.start();
@@ -212,12 +189,11 @@ void tst_QLocalSocket::dataExchange()
qint64 totalReceived = 0;
QElapsedTimer timer;
- connect(&factory, &SocketFactory::bytesReceived,
- [&totalReceived, &timer, timeToTest, &factory, &eventLoop](int channel, qint64 bytes) {
+ connect(&factory, &SocketFactory::bytesReceived, [&](int channel, qint64 bytes) {
Q_UNUSED(channel);
totalReceived += bytes;
- if (timer.elapsed() >= timeToTest) {
+ if (timer.elapsed() >= timeToTest.count()) {
factory.stopped = true;
eventLoop.exitLoop();
}
@@ -225,7 +201,7 @@ void tst_QLocalSocket::dataExchange()
timer.start();
emit factory.start();
- eventLoop.enterLoopMSecs(timeToTest * 2);
+ eventLoop.enterLoop(timeToTest * 2);
if (!QTest::currentTestFailed())
qDebug("Transfer rate: %.1f MB/s", totalReceived / 1048.576 / timer.elapsed());
diff --git a/tests/benchmarks/network/socket/qtcpserver/CMakeLists.txt b/tests/benchmarks/network/socket/qtcpserver/CMakeLists.txt
index f566c4f341..ae2f491df0 100644
--- a/tests/benchmarks/network/socket/qtcpserver/CMakeLists.txt
+++ b/tests/benchmarks/network/socket/qtcpserver/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtcpserver.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qtcpserver Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qtcpserver
SOURCES
tst_qtcpserver.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qtcpserver.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp
index 06643dd1fd..68d60261d5 100644
--- a/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp
+++ b/tests/benchmarks/network/socket/qtcpserver/tst_qtcpserver.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QtCore/QElapsedTimer>
diff --git a/tests/benchmarks/network/socket/qudpsocket/CMakeLists.txt b/tests/benchmarks/network/socket/qudpsocket/CMakeLists.txt
index 02293cdae6..0a39e8fc0c 100644
--- a/tests/benchmarks/network/socket/qudpsocket/CMakeLists.txt
+++ b/tests/benchmarks/network/socket/qudpsocket/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qudpsocket.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qudpsocket Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qudpsocket
SOURCES
tst_qudpsocket.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qudpsocket.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp b/tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp
index f2fd297414..d3ef636e74 100644
--- a/tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp
+++ b/tests/benchmarks/network/socket/qudpsocket/tst_qudpsocket.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/qglobal.h>
diff --git a/tests/benchmarks/network/ssl/CMakeLists.txt b/tests/benchmarks/network/ssl/CMakeLists.txt
index bc469359f1..579816e153 100644
--- a/tests/benchmarks/network/ssl/CMakeLists.txt
+++ b/tests/benchmarks/network/ssl/CMakeLists.txt
@@ -1,3 +1,4 @@
-# Generated from ssl.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qsslsocket)
diff --git a/tests/benchmarks/network/ssl/qsslsocket/CMakeLists.txt b/tests/benchmarks/network/ssl/qsslsocket/CMakeLists.txt
index 95bbda6758..70e4448b73 100644
--- a/tests/benchmarks/network/ssl/qsslsocket/CMakeLists.txt
+++ b/tests/benchmarks/network/ssl/qsslsocket/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qsslsocket.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qsslsocket Binary:
@@ -7,10 +8,7 @@
qt_internal_add_benchmark(tst_bench_qsslsocket
SOURCES
tst_qsslsocket.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qsslsocket.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/benchmarks/network/ssl/qsslsocket/tst_qsslsocket.cpp
index 96f6ad87e7..fd5f49863a 100644
--- a/tests/benchmarks/network/ssl/qsslsocket/tst_qsslsocket.cpp
+++ b/tests/benchmarks/network/ssl/qsslsocket/tst_qsslsocket.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 <QTest>
diff --git a/tests/benchmarks/plugins/imageformats/jpeg/CMakeLists.txt b/tests/benchmarks/plugins/imageformats/jpeg/CMakeLists.txt
index d0fcd51f4e..814dc124c7 100644
--- a/tests/benchmarks/plugins/imageformats/jpeg/CMakeLists.txt
+++ b/tests/benchmarks/plugins/imageformats/jpeg/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from jpeg.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## jpeg Binary:
@@ -7,11 +8,7 @@
qt_internal_add_benchmark(jpeg
SOURCES
jpeg.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:jpeg.pro:<TRUE>:
-# TEMPLATE = "app"
-# TESTDATA = "n900.jpeg"
diff --git a/tests/benchmarks/plugins/imageformats/jpeg/jpeg.cpp b/tests/benchmarks/plugins/imageformats/jpeg/jpeg.cpp
index ab5bad733e..d73b2477fa 100644
--- a/tests/benchmarks/plugins/imageformats/jpeg/jpeg.cpp
+++ b/tests/benchmarks/plugins/imageformats/jpeg/jpeg.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 <QDebug>
#include <qtest.h>
diff --git a/tests/benchmarks/sql/CMakeLists.txt b/tests/benchmarks/sql/CMakeLists.txt
index c4d96e338d..6f16384761 100644
--- a/tests/benchmarks/sql/CMakeLists.txt
+++ b/tests/benchmarks/sql/CMakeLists.txt
@@ -1,3 +1,4 @@
-# Generated from sql.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(kernel)
diff --git a/tests/benchmarks/sql/kernel/CMakeLists.txt b/tests/benchmarks/sql/kernel/CMakeLists.txt
index 86108db75d..12681ea5a1 100644
--- a/tests/benchmarks/sql/kernel/CMakeLists.txt
+++ b/tests/benchmarks/sql/kernel/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from kernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qsqlquery)
add_subdirectory(qsqlrecord)
diff --git a/tests/benchmarks/sql/kernel/qsqlquery/CMakeLists.txt b/tests/benchmarks/sql/kernel/qsqlquery/CMakeLists.txt
index 977ea673ac..601f2556e1 100644
--- a/tests/benchmarks/sql/kernel/qsqlquery/CMakeLists.txt
+++ b/tests/benchmarks/sql/kernel/qsqlquery/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qsqlquery.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qsqlquery Binary:
@@ -7,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qsqlquery
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Sql
Qt::SqlPrivate
diff --git a/tests/benchmarks/sql/kernel/qsqlquery/main.cpp b/tests/benchmarks/sql/kernel/qsqlquery/main.cpp
index 444b8b0188..5c1bc7b88e 100644
--- a/tests/benchmarks/sql/kernel/qsqlquery/main.cpp
+++ b/tests/benchmarks/sql/kernel/qsqlquery/main.cpp
@@ -1,45 +1,17 @@
-/****************************************************************************
-**
-** 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 <QTest>
#include <QtSql/QtSql>
#include "../../../../auto/sql/kernel/qsqldatabase/tst_databases.h"
-const QString qtest(qTableName("qtest", __FILE__, QSqlDatabase()));
-
class tst_QSqlQuery : public QObject
{
Q_OBJECT
public:
- tst_QSqlQuery();
- virtual ~tst_QSqlQuery();
+ using QObject::QObject;
public slots:
void initTestCase();
@@ -55,45 +27,20 @@ private slots:
private:
// returns all database connections
- void generic_data(const QString &engine=QString());
- void dropTestTables( QSqlDatabase db );
- void createTestTables( QSqlDatabase db );
- void populateTestTables( QSqlDatabase db );
+ void generic_data(const QString &engine = QString());
tst_Databases dbs;
};
QTEST_MAIN(tst_QSqlQuery)
-tst_QSqlQuery::tst_QSqlQuery()
-{
-}
-
-tst_QSqlQuery::~tst_QSqlQuery()
-{
-}
-
void tst_QSqlQuery::initTestCase()
{
dbs.open();
-
- for ( QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it ) {
- QSqlDatabase db = QSqlDatabase::database(( *it ) );
- CHECK_DATABASE( db );
- dropTestTables( db ); //in case of leftovers
- createTestTables( db );
- populateTestTables( db );
- }
}
void tst_QSqlQuery::cleanupTestCase()
{
- for ( QStringList::ConstIterator it = dbs.dbNames.begin(); it != dbs.dbNames.end(); ++it ) {
- QSqlDatabase db = QSqlDatabase::database(( *it ) );
- CHECK_DATABASE( db );
- dropTestTables( db );
- }
-
dbs.close();
}
@@ -103,29 +50,11 @@ void tst_QSqlQuery::init()
void tst_QSqlQuery::cleanup()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
- const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
-
- if ( QTest::currentTestFunction() == QLatin1String( "numRowsAffected" )
- || QTest::currentTestFunction() == QLatin1String( "transactions" )
- || QTest::currentTestFunction() == QLatin1String( "size" )
- || QTest::currentTestFunction() == QLatin1String( "isActive" )
- || QTest::currentTestFunction() == QLatin1String( "lastInsertId" ) ) {
- populateTestTables( db );
- }
-
- if (QTest::currentTestFailed() && (dbType == QSqlDriver::Oracle || db.driverName().startsWith("QODBC"))) {
- //since Oracle ODBC totally craps out on error, we init again
- db.close();
- db.open();
- }
}
-void tst_QSqlQuery::generic_data(const QString& engine)
+void tst_QSqlQuery::generic_data(const QString &engine)
{
- if ( dbs.fillTestTable(engine) == 0 ) {
+ if (dbs.fillTestTable(engine) == 0) {
if (engine.isEmpty())
QSKIP( "No database drivers are available in this Qt configuration");
else
@@ -133,153 +62,48 @@ void tst_QSqlQuery::generic_data(const QString& engine)
}
}
-void tst_QSqlQuery::dropTestTables( QSqlDatabase db )
-{
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- QStringList tablenames;
- // drop all the table in case a testcase failed
- tablenames << qtest
- << qTableName("qtest_null", __FILE__, db)
- << qTableName("qtest_blob", __FILE__, db)
- << qTableName("qtest_bittest", __FILE__, db)
- << qTableName("qtest_nullblob", __FILE__, db)
- << qTableName("qtest_rawtest", __FILE__, db)
- << qTableName("qtest_precision", __FILE__, db)
- << qTableName("qtest_prepare", __FILE__, db)
- << qTableName("qtestj1", __FILE__, db)
- << qTableName("qtestj2", __FILE__, db)
- << qTableName("char1Select", __FILE__, db)
- << qTableName("char1SU", __FILE__, db)
- << qTableName("qxmltest", __FILE__, db)
- << qTableName("qtest_exerr", __FILE__, db)
- << qTableName("qtest_empty", __FILE__, db)
- << qTableName("clobby", __FILE__, db)
- << qTableName("bindtest", __FILE__, db)
- << qTableName("more_results", __FILE__, db)
- << qTableName("blobstest", __FILE__, db)
- << qTableName("oraRowId", __FILE__, db)
- << qTableName("qtest_batch", __FILE__, db)
- << qTableName("bug6421", __FILE__, db).toUpper()
- << qTableName("bug5765", __FILE__, db)
- << qTableName("bug6852", __FILE__, db)
- << qTableName("qtest_lockedtable", __FILE__, db)
- << qTableName("Planet", __FILE__, db)
- << qTableName("task_250026", __FILE__, db)
- << qTableName("task_234422", __FILE__, db)
- << qTableName("test141895", __FILE__, db)
- << qTableName("qtest_oraOCINumber", __FILE__, db);
-
- if (dbType == QSqlDriver::PostgreSQL)
- tablenames << qTableName("task_233829", __FILE__, db);
-
- if (dbType == QSqlDriver::SQLite)
- tablenames << qTableName("record_sqlite", __FILE__, db);
-
- if (dbType == QSqlDriver::MSSqlServer || dbType == QSqlDriver::Oracle)
- tablenames << qTableName("qtest_longstr", __FILE__, db);
-
- if (dbType == QSqlDriver::MSSqlServer)
- db.exec("DROP PROCEDURE " + qTableName("test141895_proc", __FILE__, db));
-
- if (dbType == QSqlDriver::MySqlServer)
- db.exec("DROP PROCEDURE IF EXISTS "+qTableName("bug6852_proc", __FILE__, db));
-
- tst_Databases::safeDropTables( db, tablenames );
-
- if (dbType == QSqlDriver::Oracle) {
- QSqlQuery q( db );
- q.exec("DROP PACKAGE " + qTableName("pkg", __FILE__, db));
- }
-}
-
-void tst_QSqlQuery::createTestTables( QSqlDatabase db )
-{
- const QString qtestNull = qTableName("qtest_null", __FILE__, db);
- QSqlQuery q( db );
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- if (dbType == QSqlDriver::MySqlServer)
- // ### stupid workaround until we find a way to hardcode this
- // in the MySQL server startup script
- q.exec( "set table_type=innodb" );
- else if (dbType == QSqlDriver::PostgreSQL)
- QVERIFY_SQL( q, exec("set client_min_messages='warning'"));
-
- if (dbType == QSqlDriver::PostgreSQL)
- QVERIFY_SQL( q, exec( "create table " + qtest + " (id serial NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id)) WITH OIDS" ) );
- else
- QVERIFY_SQL( q, exec( "create table " + qtest + " (id int "+tst_Databases::autoFieldName(db) +" NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id))" ) );
-
- if (dbType == QSqlDriver::MSSqlServer || dbType == QSqlDriver::Sybase)
- QVERIFY_SQL(q, exec("create table " + qtestNull + " (id int null, t_varchar varchar(20) null)"));
- else
- QVERIFY_SQL(q, exec("create table " + qtestNull + " (id int, t_varchar varchar(20))"));
-}
-
-void tst_QSqlQuery::populateTestTables( QSqlDatabase db )
-{
- QSqlQuery q( db );
- const QString qtest_null(qTableName("qtest_null", __FILE__, db));
- q.exec( "delete from " + qtest );
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (1, 'VarChar1', 'Char1')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (2, 'VarChar2', 'Char2')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (3, 'VarChar3', 'Char3')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (4, 'VarChar4', 'Char4')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest + " values (5, 'VarChar5', 'Char5')" ) );
-
- q.exec( "delete from " + qtest_null );
- QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (0, NULL)" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (1, 'n')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (2, 'i')" ) );
- QVERIFY_SQL( q, exec( "insert into " + qtest_null + " values (3, NULL)" ) );
-}
-
void tst_QSqlQuery::benchmark()
{
- QFETCH( QString, dbName );
- QSqlDatabase db = QSqlDatabase::database( dbName );
- CHECK_DATABASE( db );
+ QFETCH(QString, dbName);
+ QSqlDatabase db = QSqlDatabase::database(dbName);
+ CHECK_DATABASE(db);
QSqlQuery q(db);
- const QString tableName(qTableName("benchmark", __FILE__, db));
-
- tst_Databases::safeDropTable( db, tableName );
+ TableScope ts(db, "benchmark", __FILE__);
- QVERIFY_SQL(q, exec("CREATE TABLE "+tableName+"(\n"
+ QVERIFY_SQL(q, exec("CREATE TABLE " + ts.tableName() + "(\n"
"MainKey INT NOT NULL,\n"
"OtherTextCol VARCHAR(45) NOT NULL,\n"
- "PRIMARY KEY(`MainKey`))"));
+ "PRIMARY KEY(MainKey))"));
int i=1;
QBENCHMARK {
- QVERIFY_SQL(q, exec("INSERT INTO "+tableName+" VALUES("+QString::number(i)+", \"Value"+QString::number(i)+"\")"));
+ const QString num = QString::number(i);
+ QVERIFY_SQL(q, exec("INSERT INTO " + ts.tableName() + " VALUES(" + num + ", 'Value" + num + "')"));
i++;
}
-
- tst_Databases::safeDropTable( db, tableName );
}
void tst_QSqlQuery::benchmarkSelectPrepared()
{
- QFETCH( QString, dbName );
+ QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
QSqlQuery q(db);
- const QString tableName(qTableName("benchmark", __FILE__, db));
+ TableScope ts(db, "benchmark", __FILE__);
- tst_Databases::safeDropTable(db, tableName);
-
- QVERIFY_SQL(q, exec("CREATE TABLE " + tableName + "(id INT NOT NULL)"));
+ QVERIFY_SQL(q, exec("CREATE TABLE " + ts.tableName() + "(id INT NOT NULL)"));
const int NUM_ROWS = 1000;
int expectedSum = 0;
- QString fillQuery = "INSERT INTO " + tableName + " VALUES (0)";
+ QString fillQuery = "INSERT INTO " + ts.tableName() + " VALUES (0)";
for (int i = 1; i < NUM_ROWS; ++i) {
fillQuery += ", (" + QString::number(i) + QLatin1Char(')');
expectedSum += i;
}
QVERIFY_SQL(q, exec(fillQuery));
- QVERIFY_SQL(q, prepare("SELECT id FROM "+tableName));
+ QVERIFY_SQL(q, prepare("SELECT id FROM " + ts.tableName()));
QBENCHMARK {
QVERIFY_SQL(q, exec());
int sum = 0;
@@ -289,8 +113,6 @@ void tst_QSqlQuery::benchmarkSelectPrepared()
QCOMPARE(sum, expectedSum);
}
-
- tst_Databases::safeDropTable(db, tableName);
}
#include "main.moc"
diff --git a/tests/benchmarks/sql/kernel/qsqlrecord/CMakeLists.txt b/tests/benchmarks/sql/kernel/qsqlrecord/CMakeLists.txt
index 81fc3a1f3e..11a3f6bcc3 100644
--- a/tests/benchmarks/sql/kernel/qsqlrecord/CMakeLists.txt
+++ b/tests/benchmarks/sql/kernel/qsqlrecord/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qsqlrecord.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qsqlrecord Binary:
@@ -7,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qsqlrecord
SOURCES
tst_bench_qsqlrecord.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Sql
Qt::SqlPrivate
diff --git a/tests/benchmarks/sql/kernel/qsqlrecord/tst_bench_qsqlrecord.cpp b/tests/benchmarks/sql/kernel/qsqlrecord/tst_bench_qsqlrecord.cpp
index 2cebd3c7b4..55ec1983ee 100644
--- a/tests/benchmarks/sql/kernel/qsqlrecord/tst_bench_qsqlrecord.cpp
+++ b/tests/benchmarks/sql/kernel/qsqlrecord/tst_bench_qsqlrecord.cpp
@@ -1,38 +1,11 @@
-/****************************************************************************
- **
- ** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtSql/QtSql>
#include "../../../../auto/sql/kernel/qsqldatabase/tst_databases.h"
-const QString qtest(qTableName("qtest", __FILE__, QSqlDatabase()));
-
class tst_QSqlRecord : public QObject
{
Q_OBJECT
@@ -52,9 +25,6 @@ private slots:
private:
void generic_data(const QString &engine = QString());
- void dropTestTables(QSqlDatabase db);
- void createTestTables(QSqlDatabase db);
- void populateTestTables(QSqlDatabase db);
tst_Databases dbs;
};
@@ -64,38 +34,15 @@ QTEST_MAIN(tst_QSqlRecord)
void tst_QSqlRecord::initTestCase()
{
dbs.open();
- for (const auto &dbName : qAsConst(dbs.dbNames)) {
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
- dropTestTables(db); // In case of leftovers
- createTestTables(db);
- populateTestTables(db);
- }
}
void tst_QSqlRecord::cleanupTestCase()
{
- for (const auto &dbName : qAsConst(dbs.dbNames)) {
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
- dropTestTables(db);
- }
dbs.close();
}
void tst_QSqlRecord::cleanup()
{
- QFETCH(QString, dbName);
- QSqlDatabase db = QSqlDatabase::database(dbName);
- CHECK_DATABASE(db);
- const QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
-
- if (QTest::currentTestFailed() && (dbType == QSqlDriver::Oracle ||
- db.driverName().startsWith("QODBC"))) {
- // Since Oracle ODBC has a problem when encountering an error, we init again
- db.close();
- db.open();
- }
}
void tst_QSqlRecord::generic_data(const QString &engine)
@@ -108,74 +55,28 @@ void tst_QSqlRecord::generic_data(const QString &engine)
}
}
-void tst_QSqlRecord::dropTestTables(QSqlDatabase db)
-{
- QSqlDriver::DbmsType dbType = tst_Databases::getDatabaseType(db);
- QStringList tablenames;
- // drop all the tables in case a testcase failed
- tablenames << qtest
- << qTableName("record", __FILE__, db);
- tst_Databases::safeDropTables(db, tablenames);
-
- if (dbType == QSqlDriver::Oracle) {
- QSqlQuery q(db);
- q.exec("DROP PACKAGE " + qTableName("pkg", __FILE__, db));
- }
-}
-
-void tst_QSqlRecord::createTestTables(QSqlDatabase db)
-{
- QSqlQuery q(db);
- switch (tst_Databases::getDatabaseType(db)) {
- case QSqlDriver::PostgreSQL:
- QVERIFY_SQL(q, exec("set client_min_messages='warning'"));
- QVERIFY_SQL(q, exec("create table " + qtest + " (id serial NOT NULL, t_varchar varchar(20), "
- "t_char char(20), primary key(id)) WITH OIDS"));
- break;
- case QSqlDriver::MySqlServer:
- QVERIFY_SQL(q, exec("set table_type=innodb"));
- Q_FALLTHROUGH();
- default:
- QVERIFY_SQL(q, exec("create table " + qtest + " (id int " + tst_Databases::autoFieldName(db) +
- " NOT NULL, t_varchar varchar(20), t_char char(20), primary key(id))"));
- break;
- }
-}
-
-void tst_QSqlRecord::populateTestTables(QSqlDatabase db)
-{
- QSqlQuery q(db);
- QVERIFY_SQL(q, exec("delete from " + qtest));
- QVERIFY_SQL(q, exec("insert into " + qtest + " values (1, 'VarChar1', 'Char1')"));
- QVERIFY_SQL(q, exec("insert into " + qtest + " values (2, 'VarChar2', 'Char2')"));
- QVERIFY_SQL(q, exec("insert into " + qtest + " values (3, 'VarChar3', 'Char3')"));
- QVERIFY_SQL(q, exec("insert into " + qtest + " values (4, 'VarChar4', 'Char4')"));
- QVERIFY_SQL(q, exec("insert into " + qtest + " values (5, 'VarChar5', 'Char5')"));
-}
-
void tst_QSqlRecord::benchmarkRecord()
{
QFETCH(QString, dbName);
QSqlDatabase db = QSqlDatabase::database(dbName);
CHECK_DATABASE(db);
- const auto tableName = qTableName("record", __FILE__, db);
+ TableScope ts(db, "record", __FILE__);
{
QSqlQuery qry(db);
- QVERIFY_SQL(qry, exec("create table " + tableName +
+ QVERIFY_SQL(qry, exec("create table " + ts.tableName() +
" (id int NOT NULL, t_varchar varchar(20), "
"t_char char(20), primary key(id))"));
// Limit to 500: at 600, the set-up takes nearly 5 minutes
for (int i = 0; i < 500; i++)
- QVERIFY_SQL(qry, exec(QString("INSERT INTO " + tableName +
+ QVERIFY_SQL(qry, exec(QString("INSERT INTO " + ts.tableName() +
" VALUES (%1, 'VarChar%1', 'Char%1')").arg(i)));
- QVERIFY_SQL(qry, exec(QString("SELECT * from ") + tableName));
+ QVERIFY_SQL(qry, exec(QString("SELECT * from ") + ts.tableName()));
QBENCHMARK {
while (qry.next())
qry.record();
QVERIFY(qry.seek(0));
}
}
- tst_Databases::safeDropTables(db, QStringList() << tableName);
}
void tst_QSqlRecord::benchFieldName()
@@ -199,7 +100,6 @@ void tst_QSqlRecord::benchFieldIndex()
QCOMPARE(tst_Databases::getDatabaseType(db), QSqlDriver::PostgreSQL);
QSqlQuery qry(db);
QVERIFY_SQL(qry, exec("SELECT GENERATE_SERIES(1,5000) AS r"));
- qry = db.exec("SELECT GENERATE_SERIES(1,5000) AS r");
QBENCHMARK {
while (qry.next())
qry.value(0);
diff --git a/tests/benchmarks/testlib/CMakeLists.txt b/tests/benchmarks/testlib/CMakeLists.txt
index e7bd29b564..a1891b447d 100644
--- a/tests/benchmarks/testlib/CMakeLists.txt
+++ b/tests/benchmarks/testlib/CMakeLists.txt
@@ -1,3 +1,4 @@
-# Generated from testlib.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(tostring)
diff --git a/tests/benchmarks/testlib/tostring/CMakeLists.txt b/tests/benchmarks/testlib/tostring/CMakeLists.txt
index 161fae4c01..e9484ce9b4 100644
--- a/tests/benchmarks/testlib/tostring/CMakeLists.txt
+++ b/tests/benchmarks/testlib/tostring/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from tostring.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_tostring Binary:
@@ -7,6 +8,6 @@
qt_internal_add_benchmark(tst_bench_tostring
SOURCES
tst_tostring.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Test
)
diff --git a/tests/benchmarks/testlib/tostring/tst_tostring.cpp b/tests/benchmarks/testlib/tostring/tst_tostring.cpp
index 03455748f4..e00b12ef53 100644
--- a/tests/benchmarks/testlib/tostring/tst_tostring.cpp
+++ b/tests/benchmarks/testlib/tostring/tst_tostring.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtCore/qmath.h> // pi, e
@@ -50,6 +25,36 @@ private slots:
void quint64Tst() { numeric<quint64>(); }
void qint64Tst_data() { numeric_data<qint64>(); }
void qint64Tst() { numeric<qint64>(); }
+
+private:
+ template <typename T> void compare();
+ template <typename T> void compare_eq();
+
+private slots:
+ void floatCompare_data() { numeric_data<float>(); }
+ void floatCompare() { compare<float>(); }
+ void floatCompareEq_data() { numeric_data<float>(); }
+ void floatCompareEq() { compare_eq<float>(); }
+ void doubleCompare_data() { numeric_data<double>(); }
+ void doubleCompare() { compare<double>(); }
+ void doubleCompareEq_data() { numeric_data<double>(); }
+ void doubleCompareEq() { compare_eq<double>(); }
+ void intCompare_data() { numeric_data<int>(); }
+ void intCompare() { compare<int>(); }
+ void intCompareEq_data() { numeric_data<int>(); }
+ void intCompareEq() { compare_eq<int>(); }
+ void unsignedCompare_data() { numeric_data<unsigned>(); }
+ void unsignedCompare() { compare<unsigned>(); }
+ void unsignedCompareEq_data() { numeric_data<unsigned>(); }
+ void unsignedCompareEq() { compare_eq<unsigned>(); }
+ void quint64Compare_data() { numeric_data<quint64>(); }
+ void quint64Compare() { compare<quint64>(); }
+ void quint64CompareEq_data() { numeric_data<quint64>(); }
+ void quint64CompareEq() { compare_eq<quint64>(); }
+ void qint64Compare_data() { numeric_data<qint64>(); }
+ void qint64Compare() { compare<qint64>(); }
+ void qint64CompareEq_data() { numeric_data<qint64>(); }
+ void qint64CompareEq() { compare_eq<qint64>(); }
};
template <typename T>
@@ -95,10 +100,35 @@ void tst_toString::numeric()
QFETCH(T, datum);
QBENCHMARK {
- auto tst = QTest::toString<T>(datum);
+ auto tst = QTest::toString(datum);
delete [] tst;
}
}
+template <typename T>
+void tst_toString::compare()
+{
+ QFETCH(T, datum);
+
+ QBENCHMARK {
+ QCOMPARE(datum, datum);
+ }
+}
+
+template <typename T>
+void tst_toString::compare_eq()
+{
+ QFETCH(T, datum);
+
+ if constexpr (std::numeric_limits<T>::has_quiet_NaN) {
+ if (qIsNaN(datum))
+ QSKIP("Unlike QCOMPARE, QCOMPARE_EQ doesn't handle NaN specially");
+ }
+
+ QBENCHMARK {
+ QCOMPARE_EQ(datum, datum);
+ }
+}
+
QTEST_MAIN(tst_toString)
#include "tst_tostring.moc"
diff --git a/tests/benchmarks/widgets/CMakeLists.txt b/tests/benchmarks/widgets/CMakeLists.txt
index bf543e664d..afea392472 100644
--- a/tests/benchmarks/widgets/CMakeLists.txt
+++ b/tests/benchmarks/widgets/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from widgets.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(graphicsview)
add_subdirectory(itemviews)
diff --git a/tests/benchmarks/widgets/graphicsview/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/CMakeLists.txt
index 3928328a98..bcb905aa1b 100644
--- a/tests/benchmarks/widgets/graphicsview/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from graphicsview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(functional)
add_subdirectory(qgraphicsanchorlayout)
diff --git a/tests/benchmarks/widgets/graphicsview/functional/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/functional/CMakeLists.txt
index 20e4286a6e..8b13789179 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/functional/CMakeLists.txt
@@ -1,2 +1 @@
-# Generated from functional.pro.
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/CMakeLists.txt
index 491b7fc6d1..c7b18103a5 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from GraphicsViewBenchmark.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_GraphicsViewBenchmark Binary:
@@ -38,7 +39,7 @@ qt_internal_add_benchmark(tst_GraphicsViewBenchmark
widgets/topbar.cpp widgets/topbar.h
INCLUDE_DIRECTORIES
widgets
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Svg
Qt::Test
@@ -354,15 +355,11 @@ qt_internal_add_resource(tst_GraphicsViewBenchmark "GraphicsViewBenchmark3"
${GraphicsViewBenchmark3_resource_files}
)
-
-#### Keys ignored in scope 1:.:.:GraphicsViewBenchmark.pro:<TRUE>:
-# TEMPLATE = "app"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_GraphicsViewBenchmark CONDITION TARGET Qt::OpenGL
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::OpenGL
Qt::OpenGLWidgets
)
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/main.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/main.cpp
index 8463354af3..fa47ca9fa6 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/main.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/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 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 <QTest>
@@ -566,23 +541,11 @@ void tst_GraphicsViewBenchmark::update_data()
QTest::addColumn<bool>("subtreeCache");
QTest::addColumn<int>("rotationAngle");
- QList<ListType> listTypes;
- listTypes << Simple << Recycling;
-
- QList<int> listSizes;
- listSizes << 10 << 50 << 500;
-
- QList<Theme::Themes> themes;
- themes << Theme::Blue << Theme::Lime;
-
- QList<int> rotationAngles;
- rotationAngles << 0 << 90;
-
// Generate rows:
- foreach (ListType listType, listTypes) {
- foreach (int listSize, listSizes) {
- foreach (int angle, rotationAngles) {
- foreach (Theme::Themes theme, themes) {
+ for (ListType listType : {Simple, Recycling}) {
+ for (int listSize : {10, 50, 500}) {
+ for (int angle : {0, 90}) {
+ for (Theme::Themes theme : {Theme::Blue, Theme::Lime}) {
for (int toImage = 0; toImage < 2; ++toImage) {
for (int cache = 0; cache < 2; ++cache) {
QString string = rowString(listSize, listType, theme, toImage, cache, angle);
@@ -638,27 +601,12 @@ void tst_GraphicsViewBenchmark::scroll_data()
QTest::addColumn<int>("rotationAngle");
QTest::addColumn<ScrollStep>("scrollStep");
- QList<ListType> listTypes;
- listTypes << Simple << Recycling;
-
- QList<int> listSizes;
- listSizes << 10 << 50 << 500;
-
- QList<Theme::Themes> themes;
- themes << Theme::Blue << Theme::Lime;
-
- QList<int> rotationAngles;
- rotationAngles << 0 << 90;
-
- QList<ScrollStep> scrollSteps;
- scrollSteps << Slow << Normal << Fast;
-
// Generate rows:
- foreach (ListType listType, listTypes) {
- foreach (int listSize, listSizes) {
- foreach (int angle, rotationAngles) {
- foreach (ScrollStep step, scrollSteps) {
- foreach (Theme::Themes theme, themes) {
+ for (ListType listType : {Simple, Recycling}) {
+ for (int listSize : {10, 50, 500}) {
+ for (int angle : {0, 90}) {
+ for (ScrollStep step : {Slow, Normal, Fast}) {
+ for (Theme::Themes theme : {Theme::Blue, Theme::Lime}) {
for (int cache = 0; cache < 2; ++cache) {
QString string = rowString(listSize, listType, theme, cache, angle, step);
QTest::newRow(string.toLatin1()) << listSize << listType << theme
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.cpp
index 00481a638d..9cf6ffcaa2 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QDebug>
#include <QGraphicsLayout>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.h
index 7373f66deb..d3d1b334f4 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemcontainer.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef ABSTRACTITEMCONTAINER_H
#define ABSTRACTITEMCONTAINER_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp
index e5214b51fb..87350f6b62 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QGraphicsLayout>
#include "abstractitemview.h"
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.h
index 80c3b3b943..6242c9647b 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractitemview.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef ABSTRACTITEMVIEW_H
#define ABSTRACTITEMVIEW_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.cpp
index e4588cc1d1..c390550cb9 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QGraphicsSceneResizeEvent>
#include <QGraphicsWidget>
@@ -115,9 +90,9 @@ void AbstractScrollArea::setViewport(QGraphicsWidget *viewport)
if (m_viewport) {
m_viewport->setParentItem(0);
- QList<QGraphicsItem*> children = m_viewport->childItems();
+ const QList<QGraphicsItem*> children = m_viewport->childItems();
- foreach (QGraphicsItem *child, children)
+ for (QGraphicsItem *child : children)
child->setParentItem(0);
delete m_viewport;
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.h
index 4c530b2059..0fefcfe271 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractscrollarea.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef ABSTRACTSCROLLAREA_H
#define ABSTRACTSCROLLAREA_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.cpp
index dbd7c40c35..b12cf4c81a 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 "abstractviewitem.h"
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.h
index 423ed4f654..c85ad3d203 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/abstractviewitem.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef ABSTRACTVIEWITEM_H
#define ABSTRACTVIEWITEM_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.cpp
index 1b928ab908..16eeb25467 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QStyleOptionGraphicsItem>
#include <QGraphicsSceneResizeEvent>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.h
index 0cb0ee778c..ba961e2792 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/backgrounditem.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef __BACKGROUNDITEM_H__
#define __BACKGROUNDITEM_H__
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp
index 98bf9f8521..d9d6e48f99 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/button.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 "button.h"
#include "theme.h"
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/button.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/button.h
index 8e76b88463..0c117d2c81 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/button.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/button.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef BUTTON_H
#define BUTTON_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp
index 226c60cec8..492eb95628 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QStringList>
#include <QDebug>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.h
index eaddeac59d..59be7e87f1 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/commandline.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef COMMANDLINE_H
#define COMMANDLINE_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.cpp
index 20d7286c96..19cbb62770 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QFile>
#include <QRandomGenerator>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.h
index bcb9681d5d..114380c264 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/dummydatagen.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef __DUMMYDATAGEN_H__
#define __DUMMYDATAGEN_H__
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.cpp
index 93285c0723..efa35db679 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QtGui>
#include "gvbwidget.h"
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.h
index f9f0a9a2cd..54d7cac5a5 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/gvbwidget.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef GVBWIDGET_H
#define GVBWIDGET_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.cpp
index a081e1b064..088f517105 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QtGui>
#include <QSvgRenderer>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.h
index a2dc81e4f5..53bcce2466 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/iconitem.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef ICONITEM_H
#define ICONITEM_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp
index 0aa73b9e26..3e9669cd44 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to 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 <QDebug>
#include <QElapsedTimer>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.h
index 15969a6e09..7dc6b3e224 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglist.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef ITEMRECYCLINGLIST_H
#define ITEMRECYCLINGLIST_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.cpp
index 5aa93256ff..7406c37677 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 "itemrecyclinglistview.h"
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.h
index 28c5c0acb0..b7ab0f3004 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/itemrecyclinglistview.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef ITEMRECYCLINGLISTVIEW_H
#define ITEMRECYCLINGLISTVIEW_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp
index 5fb2ee1a51..c09043df93 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/label.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QtGui>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/label.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/label.h
index 1ecbe8ae49..6d6705027e 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/label.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/label.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef TEXTITEM_H
#define TEXTITEM_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.cpp
index 1872bcc9d3..6c11effa28 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QDebug>
#include <QGraphicsGridLayout>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.h
index db08e948b0..01c1d61ea4 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitem.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef LISTITEM_H
#define LISTITEM_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.cpp
index 0e4520d0a8..ed8943aa7b 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QGraphicsItem>
#include <QPainter>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.h
index ba35023bbc..0827ae1cea 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcache.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef LISTITEMCACHE_H
#define LISTITEMCACHE_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.cpp
index 496919214d..5815dfa103 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <qmath.h>
#include <QGraphicsLinearLayout>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.h
index 62c9450c38..6c03a9e116 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listitemcontainer.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef LISTITEMCONTAINER_H
#define LISTITEMCONTAINER_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.cpp
index 1aa2cfa1ea..eb10745328 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 "listmodel.h"
#include "recycledlistitem.h"
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.h
index d58db8de41..b6fdbcb837 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listmodel.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef LISTMODEL_H
#define LISTMODEL_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.cpp
index 6e09a09d81..fbb82777b9 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QGraphicsSceneResizeEvent>
#include <QGraphicsGridLayout>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.h
index a1120d1871..cbd23ca19a 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/listwidget.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef LISTWIDGET_H
#define LISTWIDGET_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp
index d8e778f151..1f92107729 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to 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 <QDebug>
#include <QApplication>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h
index 23043136f3..d2ff03f039 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/mainview.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to 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
#ifndef __MAINWINDOW_H__
#define __MAINWINDOW_H__
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.cpp
index 1cc75d569b..8c2ff7b7ce 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/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 examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QGraphicsView>
#include <QGraphicsWidget>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.h
index 074d5b9d95..fd50fe5039 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/menu.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef __MENU_H__
#define __MENU_H__
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.cpp
index c0aed25abb..a457b69be9 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QGraphicsGridLayout>
#include <QDebug>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.h
index 021a8b8902..82dd304b38 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/recycledlistitem.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef RECYCLEDLISTITEM_H
#define RECYCLEDLISTITEM_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/resourcemoninterface.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/resourcemoninterface.h
index b03f09048a..6d58d139bb 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/resourcemoninterface.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/resourcemoninterface.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef __RESOURCEMONINTERFACE_H__
#define __RESOURCEMONINTERFACE_H__
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.cpp
index 81f123e2b7..3361c1e1c0 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QGraphicsWidget>
#include <QPainter>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.h
index 966052676c..9abd5d264b 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scrollbar.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef SCROLLBAR_H
#define SCROLLBAR_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.cpp
index 203ea7e046..241d752365 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QScrollBar>
#include <QEvent>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.h
index d81db64d5e..db9c47d838 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef SCROLLER_H
#define SCROLLER_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h
index c8769f59b2..c18f4069e3 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_p.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/scroller_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 examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to 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
#ifndef SCROLLER_P_H
#define SCROLLER_P_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.cpp
index 9cb44882a6..4b0adffe5c 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/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 examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 "settings.h"
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h
index dc228162c4..da961493ad 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/settings.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/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 examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef SETTINGS_H
#define SETTINGS_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp
index d64f3ac38d..0020e2491d 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the examples of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to 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 <QDebug>
#include <QGraphicsLinearLayout>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.h
index 3c1ec4f82a..ef29d5c855 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelist.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef SIMPLELIST_H_
#define SIMPLELIST_H_
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.cpp
index b1467238f8..3de5554e61 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 "simplelistview.h"
#include "scrollbar.h"
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.h
index 34eb7594ad..32ed0af937 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/simplelistview.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef SIMPLELISTVIEW_H
#define SIMPLELISTVIEW_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.cpp
index 06851b0fd8..8de0b612df 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QDebug>
#include <QPainter>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.h
index 1e5cd8ad3b..b78a9033f9 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/theme.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef THEME_H
#define THEME_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.cpp
index 1209b4a0f7..4df67b63bf 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 "themeevent.h"
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.h
index 4ae63d8755..4b06f54267 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/themeevent.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef __THEMEEVENT_H__
#define __THEMEEVENT_H__
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.cpp
index 7c3d97b859..ece0cfa66f 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.cpp
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-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 <QGraphicsView>
#include <QStyleOptionGraphicsItem>
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.h
index 53750ca706..152b4ba2b6 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/topbar.h
@@ -1,30 +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:GPL-EXCEPT$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef __TOPBAR_H__
#define __TOPBAR_H__
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.cpp b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.cpp
index d09bd43214..c3c14a6362 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.cpp
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.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 "webview.h"
#include "webview_p.h"
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.h
index d5d32f146f..8eafb65048 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview.h
@@ -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
#ifndef WEBVIEW_H
#define WEBVIEW_H
diff --git a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview_p.h b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview_p.h
index 98817e6762..f0c87e5a0f 100644
--- a/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview_p.h
+++ b/tests/benchmarks/widgets/graphicsview/functional/GraphicsViewBenchmark/widgets/webview_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 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
#ifndef WEBVIEW_P_H
#define WEBVIEW_P_H
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsanchorlayout/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/qgraphicsanchorlayout/CMakeLists.txt
index eca0a60d0d..53c5068d7b 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsanchorlayout/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsanchorlayout/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qgraphicsanchorlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qgraphicsanchorlayout Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qgraphicsanchorlayout
SOURCES
tst_qgraphicsanchorlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qgraphicsanchorlayout.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
index 7e86e96830..d65246a568 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsanchorlayout/tst_qgraphicsanchorlayout.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 <QTest>
#include <QtWidgets/qgraphicsanchorlayout.h>
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsitem/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/qgraphicsitem/CMakeLists.txt
index e5d19ceb24..0ab35585fb 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsitem/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsitem/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qgraphicsitem.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qgraphicsitem Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qgraphicsitem
SOURCES
tst_qgraphicsitem.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qgraphicsitem.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
index 56b34fff2a..7556864ded 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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 <qtest.h>
#include <QGraphicsItem>
#include <QGraphicsScene>
#include <QGraphicsView>
+#include <QTextDocument>
class tst_QGraphicsItem : public QObject
{
@@ -57,6 +33,8 @@ private slots:
void scale();
void shear();
void translate();
+ void createTextItem();
+ void createTextItemNoLayouting();
};
tst_QGraphicsItem::tst_QGraphicsItem()
@@ -230,5 +208,32 @@ void tst_QGraphicsItem::translate()
}
}
+void tst_QGraphicsItem::createTextItem()
+{
+ // Ensure QFontDatabase loaded the font beforehand
+ QFontInfo(qApp->font()).family();
+ const QString text = "This is some text";
+ QBENCHMARK {
+ QGraphicsTextItem item(text);
+ }
+}
+
+void tst_QGraphicsItem::createTextItemNoLayouting()
+{
+ // Ensure QFontDatabase loaded the font beforehand
+ QFontInfo(qApp->font()).family();
+ const QString text = "This is some text";
+ QBENCHMARK {
+ QGraphicsTextItem item;
+ item.document()->setLayoutEnabled(false);
+ // Prepare everything
+ item.setPlainText(text);
+ QTextOption option = item.document()->defaultTextOption();
+ option.setAlignment(Qt::AlignHCenter);
+ item.document()->setDefaultTextOption(option);
+ // And (in a real app) enable layouting here
+ }
+}
+
QTEST_MAIN(tst_QGraphicsItem)
#include "tst_qgraphicsitem.moc"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicslayout/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/qgraphicslayout/CMakeLists.txt
index 5e50712496..0a33918c39 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicslayout/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicslayout/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qgraphicslayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qgraphicslayout Binary:
@@ -7,11 +8,10 @@
qt_internal_add_benchmark(tst_bench_qgraphicslayout
SOURCES
tst_qgraphicslayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-#### Keys ignored in scope 1:.:.:qgraphicslayout.pro:<TRUE>:
# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp
index 73fad597b2..f583606266 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicslayout/tst_qgraphicslayout.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicslayout/tst_qgraphicslayout.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 <QTest>
#include <QGraphicsLayout>
@@ -120,7 +95,7 @@ void tst_QGraphicsLayout::invalidate()
QBENCHMARK {
leaf->setMinimumSize(size);
leaf->setMaximumSize(size);
- while (setGeometryCalls->count() < depth) {
+ while (setGeometryCalls->size() < depth) {
QApplication::sendPostedEvents();
}
// force a resize on each widget, this will ensure
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicslinearlayout/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/qgraphicslinearlayout/CMakeLists.txt
index 247ca92eff..10e59e0ecf 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicslinearlayout/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicslinearlayout/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qgraphicslinearlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qgraphicslinearlayout Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qgraphicslinearlayout
SOURCES
tst_qgraphicslinearlayout.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qgraphicslinearlayout.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
index afa11cd553..6dd9dc7d9a 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.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 <QTest>
#include <QGraphicsLinearLayout>
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsscene/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/qgraphicsscene/CMakeLists.txt
index 4ac043e058..1a39b258db 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsscene/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsscene/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qgraphicsscene.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qgraphicsscene Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qgraphicsscene
SOURCES
tst_qgraphicsscene.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qgraphicsscene.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
index 5f36759c9b..cc53100a43 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsscene/tst_qgraphicsscene.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 <qtest.h>
#include <QGraphicsItem>
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/qgraphicsview/CMakeLists.txt
index 60509247e3..c9eff6db3c 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qgraphicsview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qgraphicsview Binary:
@@ -9,7 +10,7 @@ qt_internal_add_benchmark(tst_bench_qgraphicsview
chiptester/chip.cpp chiptester/chip.h
chiptester/chiptester.cpp chiptester/chiptester.h
tst_qgraphicsview.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
@@ -42,14 +43,10 @@ qt_internal_add_resource(tst_bench_qgraphicsview "images"
${images_resource_files}
)
-
-#### Keys ignored in scope 1:.:.:qgraphicsview.pro:<TRUE>:
-# TEMPLATE = "app"
-
## Scopes:
#####################################################################
qt_internal_extend_target(tst_bench_qgraphicsview CONDITION TARGET Qt::OpenGL
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::OpenGL
)
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/CMakeLists.txt
index c3a708a56c..e3577fd91e 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from chip.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## chip Binary:
@@ -11,7 +12,7 @@ qt_internal_add_benchmark(chip
main.cpp
mainwindow.cpp mainwindow.h
view.cpp view.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
@@ -32,17 +33,10 @@ qt_internal_add_resource(chip "images"
${images_resource_files}
)
-
-#### Keys ignored in scope 1:.:.:chip.pro:<TRUE>:
-# INSTALLS = "target" "sources"
-# sources.files = "$$SOURCES" "$$HEADERS" "$$RESOURCES" "*.png" "*.pro" "*.html" "*.doc" "images"
-# sources.path = "$$[QT_INSTALL_EXAMPLES]/graphicsview/chip"
-# target.path = "$$[QT_INSTALL_EXAMPLES]/graphicsview/chip"
-
## Scopes:
#####################################################################
qt_internal_extend_target(chip CONDITION TARGET Qt::OpenGL
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::OpenGL
)
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/chip.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/chip.cpp
index 4937edf8fd..94c779658d 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/chip.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/chip.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 "chip.h"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/chip.h b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/chip.h
index 1f5142f35f..5852b5055e 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/chip.h
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/chip.h
@@ -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
#ifndef CHIP_H
#define CHIP_H
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/main.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/main.cpp
index 53fcfa7192..e2c6a943dd 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/main.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/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 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 "mainwindow.h"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/mainwindow.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/mainwindow.cpp
index b162461403..48aa7f5d71 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/mainwindow.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/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 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 "mainwindow.h"
#include "view.h"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/mainwindow.h b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/mainwindow.h
index dd3cc2a2ad..aae2435a32 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/mainwindow.h
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/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 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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp
index 60e8dd0032..4689532eae 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.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 "view.h"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.h b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.h
index a31b07f3f7..d3cbea87d9 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.h
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/chipTest/view.h
@@ -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
#ifndef VIEW_H
#define VIEW_H
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/moveItems/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/moveItems/CMakeLists.txt
index 82f665c4d4..3bbeb08350 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/moveItems/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/moveItems/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from moveItems.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## moveItems Binary:
@@ -8,6 +9,6 @@ qt_internal_add_benchmark(moveItems
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp
index 140278b8f6..f6ab1c6714 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/moveItems/main.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/moveItems/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 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 <QtGui>
#include "valgrind/callgrind.h"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/scrolltest/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/scrolltest/CMakeLists.txt
index f30ca15082..f35781b344 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/scrolltest/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/scrolltest/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from scrolltest.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## scrolltest Binary:
@@ -8,6 +9,6 @@ qt_internal_add_benchmark(scrolltest
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp
index 566d16ca51..acd0b38ec1 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/scrolltest/main.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/benchapps/scrolltest/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 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 <QtGui>
#include "valgrind/callgrind.h"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chip.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chip.cpp
index e585107c06..fc81c460ce 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chip.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chip.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 "chip.h"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chip.h b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chip.h
index e716b4dafc..ce5fb5222e 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chip.h
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chip.h
@@ -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
#ifndef CHIP_H
#define CHIP_H
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.cpp
index 6b108f7be9..d6c0b46487 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 "chiptester.h"
#include "chip.h"
@@ -104,7 +79,6 @@ void ChipTester::populateScene()
// Populate scene
int xx = 0;
- int nitems = 0;
for (int i = -1100; i < 1100; i += 110) {
++xx;
int yy = 0;
@@ -117,8 +91,6 @@ void ChipTester::populateScene()
QGraphicsItem *item = new Chip(color, xx, yy);
item->setPos(QPointF(i, j));
scene->addItem(item);
-
- ++nitems;
}
}
}
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.h b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.h
index e6d383dc1b..7be17d7144 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.h
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/chiptester/chiptester.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef CHIPTESTER_H
#define CHIPTESTER_H
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
index 1b275fbd29..cefbc75e76 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.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 <qtest.h>
#include <QtCore/QDebug>
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicswidget/CMakeLists.txt b/tests/benchmarks/widgets/graphicsview/qgraphicswidget/CMakeLists.txt
index f2c32fbb78..c8d7bc0301 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicswidget/CMakeLists.txt
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicswidget/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qgraphicswidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qgraphicswidget Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qgraphicswidget
SOURCES
tst_qgraphicswidget.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qgraphicswidget.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/benchmarks/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp
index d9bc7f21b6..fb274160fa 100644
--- a/tests/benchmarks/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp
+++ b/tests/benchmarks/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.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 <qtest.h>
#include <QGraphicsItem>
diff --git a/tests/benchmarks/widgets/itemviews/CMakeLists.txt b/tests/benchmarks/widgets/itemviews/CMakeLists.txt
index 76747b527d..33224ca61f 100644
--- a/tests/benchmarks/widgets/itemviews/CMakeLists.txt
+++ b/tests/benchmarks/widgets/itemviews/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from itemviews.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qtableview)
add_subdirectory(qheaderview)
diff --git a/tests/benchmarks/widgets/itemviews/qheaderview/CMakeLists.txt b/tests/benchmarks/widgets/itemviews/qheaderview/CMakeLists.txt
index 74fa7a37ed..ee98e2e8c3 100644
--- a/tests/benchmarks/widgets/itemviews/qheaderview/CMakeLists.txt
+++ b/tests/benchmarks/widgets/itemviews/qheaderview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qheaderview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qheaderview Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qheaderview
SOURCES
qheaderviewbench.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qheaderview.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/itemviews/qheaderview/qheaderviewbench.cpp b/tests/benchmarks/widgets/itemviews/qheaderview/qheaderviewbench.cpp
index ba1dc2d750..f04ca82cdc 100644
--- a/tests/benchmarks/widgets/itemviews/qheaderview/qheaderviewbench.cpp
+++ b/tests/benchmarks/widgets/itemviews/qheaderview/qheaderviewbench.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]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) 2012 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QtWidgets/QtWidgets>
diff --git a/tests/benchmarks/widgets/itemviews/qlistview/CMakeLists.txt b/tests/benchmarks/widgets/itemviews/qlistview/CMakeLists.txt
index 0a9a89f7cb..9b40adadb1 100644
--- a/tests/benchmarks/widgets/itemviews/qlistview/CMakeLists.txt
+++ b/tests/benchmarks/widgets/itemviews/qlistview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qlistview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qlistview Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qlistview
SOURCES
tst_qlistview.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qlistview.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/benchmarks/widgets/itemviews/qlistview/tst_qlistview.cpp
index 01496743c2..2e588adc58 100644
--- a/tests/benchmarks/widgets/itemviews/qlistview/tst_qlistview.cpp
+++ b/tests/benchmarks/widgets/itemviews/qlistview/tst_qlistview.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qtest.h>
#include <QListView>
diff --git a/tests/benchmarks/widgets/itemviews/qtableview/CMakeLists.txt b/tests/benchmarks/widgets/itemviews/qtableview/CMakeLists.txt
index 9fecbeb232..aae0f7e4e6 100644
--- a/tests/benchmarks/widgets/itemviews/qtableview/CMakeLists.txt
+++ b/tests/benchmarks/widgets/itemviews/qtableview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtableview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qtableview Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qtableview
SOURCES
tst_qtableview.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qtableview.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/itemviews/qtableview/tst_qtableview.cpp b/tests/benchmarks/widgets/itemviews/qtableview/tst_qtableview.cpp
index 157ee7a152..e625066800 100644
--- a/tests/benchmarks/widgets/itemviews/qtableview/tst_qtableview.cpp
+++ b/tests/benchmarks/widgets/itemviews/qtableview/tst_qtableview.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 <qtest.h>
#include <QDebug>
@@ -258,13 +233,13 @@ void tst_QTableView::rowInsertion_data()
void tst_QTableView::rowInsertion()
{
- QFETCH(SpanList, spans);
+ QFETCH(const SpanList, spans);
QtTestTableModel model(10, 10);
QTableView view;
view.setModel(&model);
- foreach (QRect span, spans)
+ for (QRect span : spans)
view.setSpan(span.top(), span.left(), span.height(), span.width());
view.show();
QTest::qWait(50);
@@ -284,13 +259,13 @@ void tst_QTableView::rowRemoval_data()
void tst_QTableView::rowRemoval()
{
- QFETCH(SpanList, spans);
+ QFETCH(const SpanList, spans);
QtTestTableModel model(10, 10);
QTableView view;
view.setModel(&model);
- foreach (QRect span, spans)
+ for (QRect span : spans)
view.setSpan(span.top(), span.left(), span.height(), span.width());
view.show();
QTest::qWait(50);
@@ -307,14 +282,14 @@ void tst_QTableView::columnInsertion_data()
void tst_QTableView::columnInsertion()
{
- QFETCH(SpanList, spans);
+ QFETCH(const SpanList, spans);
QtTestTableModel model(10, 10);
QTableView view;
view.setModel(&model);
// Same set as for rowInsertion, just swapping columns and rows.
- foreach (QRect span, spans)
+ for (QRect span : spans)
view.setSpan(span.left(), span.top(), span.width(), span.height());
view.show();
QTest::qWait(50);
@@ -334,14 +309,14 @@ void tst_QTableView::columnRemoval_data()
void tst_QTableView::columnRemoval()
{
- QFETCH(SpanList, spans);
+ QFETCH(const SpanList, spans);
QtTestTableModel model(10, 10);
QTableView view;
view.setModel(&model);
// Same set as for rowRemoval, just swapping columns and rows.
- foreach (QRect span, spans)
+ for (QRect span : spans)
view.setSpan(span.left(), span.top(), span.width(), span.height());
view.show();
QTest::qWait(50);
diff --git a/tests/benchmarks/widgets/kernel/CMakeLists.txt b/tests/benchmarks/widgets/kernel/CMakeLists.txt
index b55b31fe67..a1f9f91042 100644
--- a/tests/benchmarks/widgets/kernel/CMakeLists.txt
+++ b/tests/benchmarks/widgets/kernel/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from kernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qapplication)
add_subdirectory(qwidget)
diff --git a/tests/benchmarks/widgets/kernel/qapplication/CMakeLists.txt b/tests/benchmarks/widgets/kernel/qapplication/CMakeLists.txt
index a89faa0c0e..620ac09a59 100644
--- a/tests/benchmarks/widgets/kernel/qapplication/CMakeLists.txt
+++ b/tests/benchmarks/widgets/kernel/qapplication/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qapplication.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qapplication Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qapplication
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qapplication.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/kernel/qapplication/main.cpp b/tests/benchmarks/widgets/kernel/qapplication/main.cpp
index 49de765ef0..5ada0728e7 100644
--- a/tests/benchmarks/widgets/kernel/qapplication/main.cpp
+++ b/tests/benchmarks/widgets/kernel/qapplication/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 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 <qtest.h>
diff --git a/tests/benchmarks/widgets/kernel/qwidget/CMakeLists.txt b/tests/benchmarks/widgets/kernel/qwidget/CMakeLists.txt
index fcdffbf425..6469727d0d 100644
--- a/tests/benchmarks/widgets/kernel/qwidget/CMakeLists.txt
+++ b/tests/benchmarks/widgets/kernel/qwidget/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qwidget Binary:
@@ -7,7 +8,7 @@
qt_internal_add_benchmark(tst_bench_qwidget
SOURCES
tst_qwidget.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
diff --git a/tests/benchmarks/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/benchmarks/widgets/kernel/qwidget/tst_qwidget.cpp
index f906f05a4b..4f55fbc84c 100644
--- a/tests/benchmarks/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/benchmarks/widgets/kernel/qwidget/tst_qwidget.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 <qtest.h>
@@ -74,7 +49,7 @@ public:
void setOpaqueChildren(bool enable)
{
if (opaqueChildren != enable) {
- foreach (QWidget *w, children)
+ for (QWidget *w : std::as_const(children))
w->setAttribute(Qt::WA_OpaquePaintEvent, enable);
opaqueChildren = enable;
processEvents();
diff --git a/tests/benchmarks/widgets/styles/CMakeLists.txt b/tests/benchmarks/widgets/styles/CMakeLists.txt
index 74e57c5731..999c10ed19 100644
--- a/tests/benchmarks/widgets/styles/CMakeLists.txt
+++ b/tests/benchmarks/widgets/styles/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from styles.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
if(TARGET Qt::Widgets)
add_subdirectory(qstylesheetstyle)
diff --git a/tests/benchmarks/widgets/styles/qstylesheetstyle/CMakeLists.txt b/tests/benchmarks/widgets/styles/qstylesheetstyle/CMakeLists.txt
index be43709be7..33880337b8 100644
--- a/tests/benchmarks/widgets/styles/qstylesheetstyle/CMakeLists.txt
+++ b/tests/benchmarks/widgets/styles/qstylesheetstyle/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qstylesheetstyle.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_qstylesheetstyle Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_qstylesheetstyle
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qstylesheetstyle.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/styles/qstylesheetstyle/main.cpp b/tests/benchmarks/widgets/styles/qstylesheetstyle/main.cpp
index 9dbf618dd9..011914dae2 100644
--- a/tests/benchmarks/widgets/styles/qstylesheetstyle/main.cpp
+++ b/tests/benchmarks/widgets/styles/qstylesheetstyle/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 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 file contains benchmarks for QRect/QRectF functions.
#include <QtWidgets/QWidget>
diff --git a/tests/benchmarks/widgets/widgets/CMakeLists.txt b/tests/benchmarks/widgets/widgets/CMakeLists.txt
index 81a8fccc05..3672f573f0 100644
--- a/tests/benchmarks/widgets/widgets/CMakeLists.txt
+++ b/tests/benchmarks/widgets/widgets/CMakeLists.txt
@@ -1,3 +1,4 @@
-# Generated from widgets.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(qtextbrowser)
diff --git a/tests/benchmarks/widgets/widgets/qtextbrowser/CMakeLists.txt b/tests/benchmarks/widgets/widgets/qtextbrowser/CMakeLists.txt
index 22c321d5bb..8a6b966eaf 100644
--- a/tests/benchmarks/widgets/widgets/qtextbrowser/CMakeLists.txt
+++ b/tests/benchmarks/widgets/widgets/qtextbrowser/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtextbrowser.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_bench_QTextBrowser Binary:
@@ -7,11 +8,8 @@
qt_internal_add_benchmark(tst_bench_QTextBrowser
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qtextbrowser.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/benchmarks/widgets/widgets/qtextbrowser/main.cpp b/tests/benchmarks/widgets/widgets/qtextbrowser/main.cpp
index e469ddcb5b..ad4e370d36 100644
--- a/tests/benchmarks/widgets/widgets/qtextbrowser/main.cpp
+++ b/tests/benchmarks/widgets/widgets/qtextbrowser/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 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 <QDebug>
#include <QTextBrowser>
diff --git a/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/CMakeLists.txt b/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/CMakeLists.txt
index 98d43b4d73..bb614575d6 100644
--- a/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/CMakeLists.txt
+++ b/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(next LANGUAGES CXX)
diff --git a/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/main.cpp b/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/main.cpp
index 118f402a15..19001628b2 100644
--- a/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/main.cpp
+++ b/tests/libfuzzer/corelib/serialization/qcborstreamreader/next/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QCborStreamReader>
diff --git a/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/CMakeLists.txt b/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/CMakeLists.txt
index 735a9ff9eb..1ced99cfc4 100644
--- a/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/CMakeLists.txt
+++ b/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(fromcbor LANGUAGES CXX)
diff --git a/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/main.cpp b/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/main.cpp
index 5e2a440d1b..b82b0303ca 100644
--- a/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/main.cpp
+++ b/tests/libfuzzer/corelib/serialization/qcborvalue/fromcbor/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QCborValue>
diff --git a/tests/libfuzzer/corelib/serialization/qjsondocument/fromjson/CMakeLists.txt b/tests/libfuzzer/corelib/serialization/qjsondocument/fromjson/CMakeLists.txt
index f79774c8d4..095c4733e4 100644
--- a/tests/libfuzzer/corelib/serialization/qjsondocument/fromjson/CMakeLists.txt
+++ b/tests/libfuzzer/corelib/serialization/qjsondocument/fromjson/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(fromjson LANGUAGES CXX)
diff --git a/tests/libfuzzer/corelib/serialization/qjsondocument/fromjson/main.cpp b/tests/libfuzzer/corelib/serialization/qjsondocument/fromjson/main.cpp
index df9090a551..dec863fd2b 100644
--- a/tests/libfuzzer/corelib/serialization/qjsondocument/fromjson/main.cpp
+++ b/tests/libfuzzer/corelib/serialization/qjsondocument/fromjson/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2022 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QJsonDocument>
diff --git a/tests/libfuzzer/corelib/serialization/qtextstream/extractionoperator-float/CMakeLists.txt b/tests/libfuzzer/corelib/serialization/qtextstream/extractionoperator-float/CMakeLists.txt
index 57cc0ce3d1..4ab7142d8e 100644
--- a/tests/libfuzzer/corelib/serialization/qtextstream/extractionoperator-float/CMakeLists.txt
+++ b/tests/libfuzzer/corelib/serialization/qtextstream/extractionoperator-float/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(extractionoperator-float LANGUAGES CXX)
diff --git a/tests/libfuzzer/corelib/serialization/qtextstream/extractionoperator-float/main.cpp b/tests/libfuzzer/corelib/serialization/qtextstream/extractionoperator-float/main.cpp
index 10d5c3222e..01a80ab293 100644
--- a/tests/libfuzzer/corelib/serialization/qtextstream/extractionoperator-float/main.cpp
+++ b/tests/libfuzzer/corelib/serialization/qtextstream/extractionoperator-float/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QTextStream>
diff --git a/tests/libfuzzer/corelib/serialization/qxmlstream/qxmlstreamreader/readnext/CMakeLists.txt b/tests/libfuzzer/corelib/serialization/qxmlstream/qxmlstreamreader/readnext/CMakeLists.txt
index f9de253654..642b862da7 100644
--- a/tests/libfuzzer/corelib/serialization/qxmlstream/qxmlstreamreader/readnext/CMakeLists.txt
+++ b/tests/libfuzzer/corelib/serialization/qxmlstream/qxmlstreamreader/readnext/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(readnext LANGUAGES CXX)
diff --git a/tests/libfuzzer/corelib/serialization/qxmlstream/qxmlstreamreader/readnext/main.cpp b/tests/libfuzzer/corelib/serialization/qxmlstream/qxmlstreamreader/readnext/main.cpp
index 7b73e6e952..b1f6dc5e50 100644
--- a/tests/libfuzzer/corelib/serialization/qxmlstream/qxmlstreamreader/readnext/main.cpp
+++ b/tests/libfuzzer/corelib/serialization/qxmlstream/qxmlstreamreader/readnext/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 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QXmlStreamReader>
diff --git a/tests/libfuzzer/corelib/text/qregularexpression/optimize/CMakeLists.txt b/tests/libfuzzer/corelib/text/qregularexpression/optimize/CMakeLists.txt
index 782e00dc3b..fcacd7c67d 100644
--- a/tests/libfuzzer/corelib/text/qregularexpression/optimize/CMakeLists.txt
+++ b/tests/libfuzzer/corelib/text/qregularexpression/optimize/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(optimize LANGUAGES CXX)
diff --git a/tests/libfuzzer/corelib/text/qregularexpression/optimize/main.cpp b/tests/libfuzzer/corelib/text/qregularexpression/optimize/main.cpp
index 30a714c250..335b6c0552 100644
--- a/tests/libfuzzer/corelib/text/qregularexpression/optimize/main.cpp
+++ b/tests/libfuzzer/corelib/text/qregularexpression/optimize/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QRegularExpression>
diff --git a/tests/libfuzzer/corelib/time/qdatetime/fromstring/CMakeLists.txt b/tests/libfuzzer/corelib/time/qdatetime/fromstring/CMakeLists.txt
index 6c0000092a..b4ffa66760 100644
--- a/tests/libfuzzer/corelib/time/qdatetime/fromstring/CMakeLists.txt
+++ b/tests/libfuzzer/corelib/time/qdatetime/fromstring/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(fromstring LANGUAGES CXX)
diff --git a/tests/libfuzzer/corelib/time/qdatetime/fromstring/main.cpp b/tests/libfuzzer/corelib/time/qdatetime/fromstring/main.cpp
index 31b1c414a3..a0bbe9b03d 100644
--- a/tests/libfuzzer/corelib/time/qdatetime/fromstring/main.cpp
+++ b/tests/libfuzzer/corelib/time/qdatetime/fromstring/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QDateTime>
diff --git a/tests/libfuzzer/corelib/tools/qcryptographichash/result/CMakeLists.txt b/tests/libfuzzer/corelib/tools/qcryptographichash/result/CMakeLists.txt
index 4b71c78873..ceb2f673e8 100644
--- a/tests/libfuzzer/corelib/tools/qcryptographichash/result/CMakeLists.txt
+++ b/tests/libfuzzer/corelib/tools/qcryptographichash/result/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(result LANGUAGES CXX)
diff --git a/tests/libfuzzer/corelib/tools/qcryptographichash/result/main.cpp b/tests/libfuzzer/corelib/tools/qcryptographichash/result/main.cpp
index 71780898bc..738da38e29 100644
--- a/tests/libfuzzer/corelib/tools/qcryptographichash/result/main.cpp
+++ b/tests/libfuzzer/corelib/tools/qcryptographichash/result/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QCryptographicHash>
diff --git a/tests/libfuzzer/gui/image/qimage/loadfromdata/CMakeLists.txt b/tests/libfuzzer/gui/image/qimage/loadfromdata/CMakeLists.txt
index 0355db4b1b..9c97294077 100644
--- a/tests/libfuzzer/gui/image/qimage/loadfromdata/CMakeLists.txt
+++ b/tests/libfuzzer/gui/image/qimage/loadfromdata/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(loadfromdata LANGUAGES CXX)
diff --git a/tests/libfuzzer/gui/image/qimage/loadfromdata/main.cpp b/tests/libfuzzer/gui/image/qimage/loadfromdata/main.cpp
index 4a34d8fe5d..951b8f4637 100644
--- a/tests/libfuzzer/gui/image/qimage/loadfromdata/main.cpp
+++ b/tests/libfuzzer/gui/image/qimage/loadfromdata/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2022 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QGuiApplication>
#include <QImage>
diff --git a/tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/CMakeLists.txt b/tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/CMakeLists.txt
index 9c77939a2a..808d4e435c 100644
--- a/tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/CMakeLists.txt
+++ b/tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(fromiccprofile LANGUAGES CXX)
diff --git a/tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/main.cpp b/tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/main.cpp
index 943f85d92e..3b9e843405 100644
--- a/tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/main.cpp
+++ b/tests/libfuzzer/gui/painting/qcolorspace/fromiccprofile/main.cpp
@@ -1,35 +1,27 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <cstdlib>
#include <QGuiApplication>
+#include <QColor>
#include <QColorSpace>
+#include <QImage>
+
+static QImage::Format toFormat(QColorSpace::ColorModel model)
+{
+ switch (model) {
+ case QColorSpace::ColorModel::Rgb:
+ return QImage::Format_RGB32;
+ case QColorSpace::ColorModel::Gray:
+ return QImage::Format_Grayscale16;
+ case QColorSpace::ColorModel::Cmyk:
+ return QImage::Format_CMYK8888;
+ case QColorSpace::ColorModel::Undefined:
+ break;
+ }
+ return QImage::Format_Invalid;
+}
extern "C" int LLVMFuzzerTestOneInput(const char *data, size_t size) {
// to reduce noise and increase speed
@@ -43,5 +35,27 @@ extern "C" int LLVMFuzzerTestOneInput(const char *data, size_t size) {
static char *argv[] = {arg1, arg2, arg3, nullptr};
static QGuiApplication qga(argc, argv);
QColorSpace cs = QColorSpace::fromIccProfile(QByteArray::fromRawData(data, size));
+ if (cs.isValid()) {
+ cs.description();
+ QColorTransform trans1 = cs.transformationToColorSpace(QColorSpace::SRgb);
+ trans1.isIdentity();
+ QColorSpace cs2 = cs;
+ cs2.setDescription("Hello");
+ bool b = (cs == cs2);
+ Q_UNUSED(b);
+ QColor color(0xfaf8fa00);
+ color = trans1.map(color);
+ QImage img(16, 2, toFormat(cs.colorModel()));
+ img.setColorSpace(cs);
+ QImage img2 = img.convertedToColorSpace(QColorSpace::SRgb);
+ if (cs.isValidTarget()) {
+ QImage img3 = img2.convertedToColorSpace(cs);
+
+ QColorTransform trans2 = QColorSpace(QColorSpace::SRgb).transformationToColorSpace(cs);
+ bool a = (trans1 == trans2);
+ Q_UNUSED(a);
+ color = trans2.map(color);
+ }
+ }
return 0;
}
diff --git a/tests/libfuzzer/gui/text/qtextdocument/sethtml/CMakeLists.txt b/tests/libfuzzer/gui/text/qtextdocument/sethtml/CMakeLists.txt
index 7540b43790..906ee30384 100644
--- a/tests/libfuzzer/gui/text/qtextdocument/sethtml/CMakeLists.txt
+++ b/tests/libfuzzer/gui/text/qtextdocument/sethtml/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(sethtml LANGUAGES CXX)
diff --git a/tests/libfuzzer/gui/text/qtextdocument/sethtml/main.cpp b/tests/libfuzzer/gui/text/qtextdocument/sethtml/main.cpp
index 3e8af5d98b..6cac5d20ec 100644
--- a/tests/libfuzzer/gui/text/qtextdocument/sethtml/main.cpp
+++ b/tests/libfuzzer/gui/text/qtextdocument/sethtml/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QGuiApplication>
#include <QTextDocument>
diff --git a/tests/libfuzzer/gui/text/qtextdocument/setmarkdown/CMakeLists.txt b/tests/libfuzzer/gui/text/qtextdocument/setmarkdown/CMakeLists.txt
index 22b24ab06f..0fdf3dfaf8 100644
--- a/tests/libfuzzer/gui/text/qtextdocument/setmarkdown/CMakeLists.txt
+++ b/tests/libfuzzer/gui/text/qtextdocument/setmarkdown/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(setmarkdown LANGUAGES CXX)
diff --git a/tests/libfuzzer/gui/text/qtextdocument/setmarkdown/main.cpp b/tests/libfuzzer/gui/text/qtextdocument/setmarkdown/main.cpp
index 983fe60ce9..d9678d5453 100644
--- a/tests/libfuzzer/gui/text/qtextdocument/setmarkdown/main.cpp
+++ b/tests/libfuzzer/gui/text/qtextdocument/setmarkdown/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QGuiApplication>
#include <QTextDocument>
diff --git a/tests/libfuzzer/gui/text/qtextlayout/beginlayout/CMakeLists.txt b/tests/libfuzzer/gui/text/qtextlayout/beginlayout/CMakeLists.txt
index e542ece703..468b37a8f9 100644
--- a/tests/libfuzzer/gui/text/qtextlayout/beginlayout/CMakeLists.txt
+++ b/tests/libfuzzer/gui/text/qtextlayout/beginlayout/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(beginlayout LANGUAGES CXX)
diff --git a/tests/libfuzzer/gui/text/qtextlayout/beginlayout/main.cpp b/tests/libfuzzer/gui/text/qtextlayout/beginlayout/main.cpp
index 27e0566c2c..ae6d84bd5c 100644
--- a/tests/libfuzzer/gui/text/qtextlayout/beginlayout/main.cpp
+++ b/tests/libfuzzer/gui/text/qtextlayout/beginlayout/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QGuiApplication>
#include <QTextLayout>
diff --git a/tests/libfuzzer/network/ssl/qsslcertificate/qsslcertificate/pem/CMakeLists.txt b/tests/libfuzzer/network/ssl/qsslcertificate/qsslcertificate/pem/CMakeLists.txt
index dbb1840ead..d7c4f0a2f7 100644
--- a/tests/libfuzzer/network/ssl/qsslcertificate/qsslcertificate/pem/CMakeLists.txt
+++ b/tests/libfuzzer/network/ssl/qsslcertificate/qsslcertificate/pem/CMakeLists.txt
@@ -1,3 +1,6 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
cmake_minimum_required(VERSION 3.16)
project(pem LANGUAGES CXX)
diff --git a/tests/libfuzzer/network/ssl/qsslcertificate/qsslcertificate/pem/main.cpp b/tests/libfuzzer/network/ssl/qsslcertificate/qsslcertificate/pem/main.cpp
index 2d1cb2705b..4baf3df357 100644
--- a/tests/libfuzzer/network/ssl/qsslcertificate/qsslcertificate/pem/main.cpp
+++ b/tests/libfuzzer/network/ssl/qsslcertificate/qsslcertificate/pem/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QSslCertificate>
diff --git a/tests/manual/CMakeLists.txt b/tests/manual/CMakeLists.txt
index 6dee2e7448..f8c7ecb07f 100644
--- a/tests/manual/CMakeLists.txt
+++ b/tests/manual/CMakeLists.txt
@@ -1,26 +1,29 @@
-# Generated from manual.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# special case begin
# Don't build manual tests when targeting iOS.
if(UIKIT)
return()
endif()
-# special case end
+add_subdirectory(corelib)
add_subdirectory(filetest)
-# special case begin
# diaglib is broken in dev due to missing
# QtOpenGL/QGLFunctions headers
# add_subdirectory(embeddedintoforeignwindow)
# add_subdirectory(foreignwindows)
-# special case end
add_subdirectory(gestures)
-# add_subdirectory(highdpi) special case broken in dev
+if (QT_FEATURE_graphicsframecapture)
+ add_subdirectory(graphicsframecapture)
+endif()
+add_subdirectory(highdpi)
add_subdirectory(inputmethodhints)
add_subdirectory(keypadnavigation)
-#add_subdirectory(lance) # special case qgl.h missing
+add_subdirectory(keyevents)
+#add_subdirectory(lance) # qgl.h missing
add_subdirectory(qcursor)
add_subdirectory(qdesktopservices)
+add_subdirectory(qdnslookup)
add_subdirectory(qgraphicsitem)
add_subdirectory(qgraphicsitemgroup)
add_subdirectory(qgraphicslayout/flicker)
@@ -32,11 +35,12 @@ add_subdirectory(qmimedatabase)
add_subdirectory(qnetconmonitor)
add_subdirectory(qnetworkaccessmanager/qget)
add_subdirectory(qnetworkinformation)
-#special case begin
if (QT_FEATURE_openssl AND UNIX)
add_subdirectory(qnetworkreply)
endif()
-#special case end
+if(QT_FEATURE_permissions)
+ add_subdirectory(permissions)
+endif()
add_subdirectory(qstorageinfo)
add_subdirectory(qscreen)
add_subdirectory(qscreen_xrandr)
@@ -58,10 +62,13 @@ add_subdirectory(windowflags)
add_subdirectory(windowgeometry)
add_subdirectory(windowmodality)
add_subdirectory(widgetgrab)
-add_subdirectory(xembed-raster)
-add_subdirectory(xembed-widgets)
+if(QT_FEATURE_xcb)
+ add_subdirectory(xembed)
+endif()
+add_subdirectory(xmlstreamlint)
add_subdirectory(shortcuts)
add_subdirectory(dialogs)
+add_subdirectory(windowmask)
add_subdirectory(windowtransparency)
add_subdirectory(unc)
add_subdirectory(qtabbar)
@@ -74,11 +81,15 @@ if(QT_FEATURE_openssl)
add_subdirectory(qssloptions)
endif()
if(QT_FEATURE_opengl)
- # add_subdirectory(qopengltextureblitter) special case broken in dev
+ # add_subdirectory(qopengltextureblitter) # TODO: broken in dev
endif()
if(QT_FEATURE_egl AND QT_FEATURE_opengl)
- # add_subdirectory(qopenglcontext) # special case broken in dev
+ # add_subdirectory(qopenglcontext) # TODO: broken in dev
endif()
if(QT_FEATURE_vulkan)
add_subdirectory(qvulkaninstance)
endif()
+
+if(ANDROID)
+ add_subdirectory(android_content_uri)
+endif()
diff --git a/tests/manual/android_content_uri/CMakeLists.txt b/tests/manual/android_content_uri/CMakeLists.txt
new file mode 100644
index 0000000000..44df410b4f
--- /dev/null
+++ b/tests/manual/android_content_uri/CMakeLists.txt
@@ -0,0 +1,13 @@
+if (NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(android_content_uri LANGUAGES CXX)
+ find_package(Qt6BuildInternals COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_test(tst_content_uris
+ SOURCES
+ tst_content_uris.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Widgets
+)
diff --git a/tests/manual/android_content_uri/tst_content_uris.cpp b/tests/manual/android_content_uri/tst_content_uris.cpp
new file mode 100644
index 0000000000..b9a150a447
--- /dev/null
+++ b/tests/manual/android_content_uri/tst_content_uris.cpp
@@ -0,0 +1,252 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+#include <QDirIterator>
+#include <QFileDialog>
+#include <QMessageBox>
+
+using namespace Qt::StringLiterals;
+
+class tst_ContentUris: public QObject
+{
+ Q_OBJECT
+private slots:
+ void dirFacilities();
+ void readWriteFile();
+ void readWriteNonExistingFile_data();
+ void readWriteNonExistingFile();
+ void createFileFromDirUrl_data();
+ void createFileFromDirUrl();
+ void fileOperations();
+};
+
+static QStringList listFiles(const QDir &dir, QDirIterator::IteratorFlag flag = {})
+{
+ QDirIterator it(dir, flag);
+ QStringList dirs;
+ while (it.hasNext())
+ dirs << it.next();
+ return dirs;
+}
+
+void showInstructionsDialog(const QString &message)
+{
+ QMessageBox::information(nullptr, "Instructions", message);
+}
+
+void tst_ContentUris::dirFacilities()
+{
+ showInstructionsDialog("Choose a folder with no content/files/subdirs");
+
+ auto url = QFileDialog::getExistingDirectory();
+ QVERIFY(url.startsWith("content"_L1));
+ QDir dir(url);
+
+ QVERIFY(dir.exists());
+ QVERIFY(!dir.dirName().isEmpty());
+ QVERIFY(listFiles(dir).isEmpty());
+
+ QVERIFY(dir.mkdir("Sub"));
+ const auto dirList = listFiles(dir);
+ QVERIFY(dirList.size() == 1);
+ const QDir subDir = dirList.first();
+
+ QVERIFY(subDir.dirName() == "Sub"_L1);
+ qWarning() << "subDir.absolutePath()" << subDir.absolutePath() << dirList.first();
+ QVERIFY(subDir.absolutePath() == dirList.first());
+ QVERIFY(subDir.path() == dirList.first());
+
+ QVERIFY(listFiles(dir, QDirIterator::Subdirectories).size() == 1);
+ QVERIFY(dir.mkdir("Sub")); // Create an existing dir
+ QVERIFY(dir.rmdir("Sub"));
+
+ QVERIFY(dir.mkpath("Sub/Sub2/Sub3"));
+ QVERIFY(listFiles(dir).size() == 1);
+ QVERIFY(listFiles(dir, QDirIterator::Subdirectories).size() == 3);
+ QVERIFY(dir.mkpath("Sub/Sub2/Sub3")); // Create an existing dir hierarchy
+ QVERIFY(dir.rmdir("Sub"));
+}
+
+void tst_ContentUris::readWriteFile()
+{
+ const QByteArray content = "Written to file";
+ const QString fileName = "new_file.txt";
+
+ {
+ showInstructionsDialog("Choose a name for new file to create");
+
+ auto url = QFileDialog::getSaveFileName(nullptr, tr("Save File"), fileName);
+ QFile file(url);
+ QVERIFY(file.exists());
+ QVERIFY(file.size() == 0);
+ QVERIFY(file.fileName() == url);
+ QVERIFY(QFileInfo(url).fileName() == fileName);
+
+ QVERIFY(file.open(QFile::WriteOnly));
+ QVERIFY(file.isOpen());
+ QVERIFY(file.isWritable());
+ QVERIFY(file.fileTime(QFileDevice::FileModificationTime) != QDateTime());
+ QVERIFY(file.write(content) > 0);
+ QVERIFY(file.size() == content.size());
+ file.close();
+
+ // NOTE: The native file cursor is not returning an updated time or it takes long
+ // for it to get updated, for now just check that we actually received a valid QDateTime
+ QVERIFY(file.fileTime(QFileDevice::FileModificationTime) != QDateTime());
+ }
+
+ {
+ showInstructionsDialog("Choose the file that was created");
+
+ auto url = QFileDialog::getOpenFileName(nullptr, tr("Open File"), fileName);
+ QFile file(url);
+ QVERIFY(file.exists());
+
+ QVERIFY(file.open(QFile::ReadOnly));
+ QVERIFY(file.isOpen());
+ QVERIFY(file.isReadable());
+ QVERIFY(file.readAll() == content);
+
+ QVERIFY(file.remove());
+ }
+}
+
+void tst_ContentUris::readWriteNonExistingFile_data()
+{
+ QTest::addColumn<QString>("path");
+
+ const QString fileName = "non-existing-file.txt";
+ const QString uriSchemeAuthority = "content://com.android.externalstorage.documents";
+ const QString id = "primary%3APictures";
+ const QString encSlash = QUrl::toPercentEncoding("/"_L1);
+
+ const QString docSlash = uriSchemeAuthority + "/document/"_L1 + id + "/"_L1 + fileName;
+ const QString docEncodedSlash = uriSchemeAuthority + "/document/"_L1 + id + encSlash + fileName;
+
+ QTest::newRow("document_with_slash") << docSlash;
+ QTest::newRow("document_with_encoded_slash") << docEncodedSlash;
+}
+
+void tst_ContentUris::readWriteNonExistingFile()
+{
+ QFETCH(QString, path);
+
+ QFile file(path);
+ QVERIFY(!file.exists());
+ QVERIFY(file.size() == 0);
+
+ QVERIFY(!file.open(QFile::WriteOnly));
+ QVERIFY(!file.isOpen());
+ QVERIFY(!file.isWritable());
+}
+
+void tst_ContentUris::createFileFromDirUrl_data()
+{
+ QTest::addColumn<QString>("path");
+
+ showInstructionsDialog("Choose a folder with no content/files/subdirs");
+
+ const QString treeUrl = QFileDialog::getExistingDirectory();
+ const QString fileName = "text.txt";
+ const QString treeSlash = treeUrl + "/"_L1 + fileName;
+ QTest::newRow("tree_with_slash") << treeSlash;
+
+ // TODO: This is not handled at the moment
+ // const QString encSlash = QUrl::toPercentEncoding("/"_L1);
+ // const QString treeEncodedSlash = treeUrl + encSlash + fileName;
+ // QTest::newRow("tree_with_encoded_slash") << treeEncodedSlash;
+}
+
+void tst_ContentUris::createFileFromDirUrl()
+{
+ QFETCH(QString, path);
+
+ const QByteArray content = "Written to file";
+
+ QFile file(path);
+ QVERIFY(!file.exists());
+ QVERIFY(file.size() == 0);
+
+ QVERIFY(file.open(QFile::WriteOnly));
+ QVERIFY(file.isOpen());
+ QVERIFY(file.isWritable());
+ QVERIFY(file.exists());
+ QVERIFY(file.write(content));
+ QVERIFY(file.size() == content.size());
+ file.close();
+
+ QVERIFY(file.open(QFile::ReadOnly));
+ QVERIFY(file.isOpen());
+ QVERIFY(file.isReadable());
+ QVERIFY(file.readAll() == content);
+
+ QVERIFY(file.remove());
+}
+
+void tst_ContentUris::fileOperations()
+{
+ showInstructionsDialog("Choose a name for new file to create");
+
+ const QString fileName = "new_file.txt";
+ auto url = QFileDialog::getSaveFileName(nullptr, tr("Save File"), fileName);
+ QFile file(url);
+ QVERIFY(file.exists());
+
+ // Rename
+ {
+ const QString renamedFileName = "renamed_new_file.txt";
+ QVERIFY(file.rename(renamedFileName));
+ const auto renamedUrl = url.replace(fileName, renamedFileName);
+ QVERIFY(file.fileName() == renamedUrl);
+
+ // NOTE: The uri doesn't seem to stay usable after a rename and it needs to get
+ // permission again via the SAF picker.
+ showInstructionsDialog("Choose the file that was renamed");
+ QFileDialog::getOpenFileName(nullptr, tr("Open File"));
+ QVERIFY(file.exists());
+
+ // rename now with full content uri
+ const auto secondRenamedUrl = url.replace(renamedFileName, "second_nenamed_file.txt");
+ QVERIFY(file.rename(secondRenamedUrl));
+ QVERIFY(file.fileName() == secondRenamedUrl);
+
+ // NOTE: The uri doesn't seem to stay usable after a rename and it needs to get
+ // permission again via the SAF picker.
+ showInstructionsDialog("Choose the file that was renamed");
+ QFileDialog::getOpenFileName(nullptr, tr("Open File"));
+ QVERIFY(file.exists());
+ }
+
+ // Remove
+ QVERIFY(file.remove());
+ QVERIFY(!file.exists());
+
+ // Move
+ {
+ showInstructionsDialog("Choose source directory of file to move");
+ const QString srcDir = QFileDialog::getExistingDirectory(nullptr, tr("Choose Directory"));
+
+ const QString fileName = "file_to_move.txt"_L1;
+
+ // Create a file
+ QFile file(srcDir + u'/' + fileName);
+ QVERIFY(file.open(QFile::WriteOnly));
+ QVERIFY(file.exists());
+
+ showInstructionsDialog("Choose target directory to where to move the file");
+ const QString destDir = QFileDialog::getExistingDirectory(nullptr, tr("Choose Directory"));
+
+ QVERIFY(file.rename(destDir + u'/' + fileName));
+
+ // NOTE: The uri doesn't seem to stay usable after a rename and it needs to get
+ // permission again via the SAF picker.
+ showInstructionsDialog("Choose the file that was moved");
+ QFileDialog::getOpenFileName(nullptr, tr("Open File"));
+
+ QVERIFY(file.remove());
+ }
+}
+
+QTEST_MAIN(tst_ContentUris)
+#include "tst_content_uris.moc"
diff --git a/tests/manual/cmake/test_copy_file_if_different_command/CMakeLists.txt b/tests/manual/cmake/test_copy_file_if_different_command/CMakeLists.txt
new file mode 100644
index 0000000000..7e00b98888
--- /dev/null
+++ b/tests/manual/cmake/test_copy_file_if_different_command/CMakeLists.txt
@@ -0,0 +1,76 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+# How to run the test:
+# 1. Create the build directory, e.g. /home/user/build_test_copy_file_if_different
+# 2. cd /home/user/build_test_copy_file_if_different
+# 3. /path/to/Qt/bin/qt-cmake /path/to/Qt/Sources/qtbase/tests/manual/cmake/test_copy_file_if_different_command
+# 4. cmake --build . --parallel
+# 5. ctest
+cmake_minimum_required(VERSION 3.16)
+
+project(test_copy_file_if_different_command
+ LANGUAGES CXX
+)
+
+if(NOT CMAKE_HOST_WIN32)
+ message("Test only applicable for WIN32 platform. Nothing to do.")
+ return()
+endif()
+
+if(CMAKE_CROSSCOMPILING)
+ message("Test should only be run on host system. Crosscompiling is not supported.")
+ return()
+endif()
+
+find_program(fsutil NAMES fsutil fsutil.exe)
+if(NOT fsutil)
+ message(WARNING "Unable to find 'fsutil' executable. Skipping the test")
+ return()
+endif()
+
+find_package(Qt6 REQUIRED COMPONENTS Core)
+
+function(test_copy_file_command output_file test_data_base_name size)
+ set(testdatasrc1 "${CMAKE_CURRENT_BINARY_DIR}/${test_data_base_name}1.bin")
+ set(testdatasrc2 "${CMAKE_CURRENT_BINARY_DIR}/${test_data_base_name}2.bin")
+ set(testdatadst "${CMAKE_CURRENT_BINARY_DIR}/${test_data_base_name}.bin")
+
+ # Remove existing data first
+ file(REMOVE "${testdatasrc1}" "${testdatasrc2}" "${testdatadst}")
+
+ file(TO_NATIVE_PATH "${testdatasrc1}" native_testdatasrc)
+ execute_process(COMMAND ${fsutil} file createNew "${native_testdatasrc}" ${size}
+ RESULT_VARIABLE result)
+ if(NOT result EQUAL 0)
+ message(FATAL_ERROR "Unable to allocate file ${native_testdatasrc}"
+ " of size ${size} for test"
+ )
+ endif()
+
+ execute_process(COMMAND ${CMAKE_COMMAND} -E copy "${testdatasrc1}" "${testdatasrc2}"
+ RESULT_VARIABLE result)
+ if(NOT result EQUAL 0)
+ message(FATAL_ERROR "Unable to copy test data from ${testdatasrc1} to ${testdatasrc2}")
+ endif()
+
+ foreach(src_file_num RANGE 1 2)
+ set(src_file "${testdatasrc${src_file_num}}")
+ file(APPEND "${src_file}" "${src_file_num}")
+ _qt_internal_copy_file_if_different_command(copy_command "${src_file}" "${testdatadst}")
+ execute_process(COMMAND ${copy_command} RESULT_VARIABLE result)
+ if(NOT result EQUAL 0)
+ message(FATAL_ERROR "Unable to execute the copy command ${copy_command}")
+ endif()
+ endforeach()
+
+ set(${output_file} "${testdatadst}" PARENT_SCOPE)
+endfunction()
+
+test_copy_file_command(output_file1K testdata1K 1024)
+test_copy_file_command(output_file2GB testdata2GB 2147483648)
+
+add_executable(test_copy_if_different_command main.cpp)
+
+enable_testing()
+add_test(NAME "test_copy_if_different_command" COMMAND test_copy_if_different_command "${output_file1K}" "${output_file2GB}")
diff --git a/tests/manual/cmake/test_copy_file_if_different_command/main.cpp b/tests/manual/cmake/test_copy_file_if_different_command/main.cpp
new file mode 100644
index 0000000000..eeb641a36b
--- /dev/null
+++ b/tests/manual/cmake/test_copy_file_if_different_command/main.cpp
@@ -0,0 +1,36 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <fstream>
+#include <iostream>
+
+int checkFileLastByte(const std::string &filename, std::fstream::off_type offset)
+{
+ std::ifstream file(filename, std::ios_base::in);
+ if (!file.is_open()) {
+ std::cerr << "Unable to open test data file: " << filename << std::endl;
+ return 1;
+ }
+ file.seekg(offset, std::ios_base::beg);
+ char data = 0;
+ file.read(&data, sizeof(data));
+ if (data != '2') { // We always expect it's the second copy of the file
+ std::cerr << "Invalid data inside the file: " << filename << std::endl;
+ return 2;
+ }
+
+ return 0;
+};
+
+int main(int argc, char *argv[])
+{
+ if (argc != 3) {
+ std::cerr << "Test requires exact 2 arguments that point to the test data" << std::endl;
+ return 1;
+ }
+
+ int result = checkFileLastByte(argv[1], 1024);
+ if (result != 0)
+ return result;
+ return checkFileLastByte(argv[2], 2147483648);
+}
diff --git a/tests/manual/cocoa/appicon/CMakeLists.txt b/tests/manual/cocoa/appicon/CMakeLists.txt
index b027994db1..ed9c1b0c98 100644
--- a/tests/manual/cocoa/appicon/CMakeLists.txt
+++ b/tests/manual/cocoa/appicon/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from appicon.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## appicon Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(appicon
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:appicon.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/cocoa/appicon/main.cpp b/tests/manual/cocoa/appicon/main.cpp
index ba398703b7..750f5e2f72 100644
--- a/tests/manual/cocoa/appicon/main.cpp
+++ b/tests/manual/cocoa/appicon/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 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 <QPushButton>
diff --git a/tests/manual/cocoa/menurama/CMakeLists.txt b/tests/manual/cocoa/menurama/CMakeLists.txt
index 2d93198df8..3519fadcf9 100644
--- a/tests/manual/cocoa/menurama/CMakeLists.txt
+++ b/tests/manual/cocoa/menurama/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from menurama.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## Menurama Binary:
@@ -10,12 +11,11 @@ qt_internal_add_manual_test(Menurama
main.cpp
mainwindow.cpp mainwindow.h mainwindow.ui
menuramaapplication.cpp menuramaapplication.h
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ menuramaapplication.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::Gui
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
uic
)
-
-#### Keys ignored in scope 1:.:.:menurama.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/cocoa/menurama/main.cpp b/tests/manual/cocoa/menurama/main.cpp
index 4da4511884..9d3ea2fad5 100644
--- a/tests/manual/cocoa/menurama/main.cpp
+++ b/tests/manual/cocoa/menurama/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "mainwindow.h"
#include "menuramaapplication.h"
diff --git a/tests/manual/cocoa/menurama/mainwindow.cpp b/tests/manual/cocoa/menurama/mainwindow.cpp
index 086fc1e2fa..2bd761374d 100644
--- a/tests/manual/cocoa/menurama/mainwindow.cpp
+++ b/tests/manual/cocoa/menurama/mainwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "mainwindow.h"
#include "ui_mainwindow.h"
diff --git a/tests/manual/cocoa/menurama/mainwindow.h b/tests/manual/cocoa/menurama/mainwindow.h
index e2af43e04e..bb8a2a3996 100644
--- a/tests/manual/cocoa/menurama/mainwindow.h
+++ b/tests/manual/cocoa/menurama/mainwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/tests/manual/cocoa/menurama/menuramaapplication.cpp b/tests/manual/cocoa/menurama/menuramaapplication.cpp
index 1506fe7d19..43b6bd8ad4 100644
--- a/tests/manual/cocoa/menurama/menuramaapplication.cpp
+++ b/tests/manual/cocoa/menurama/menuramaapplication.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "menuramaapplication.h"
diff --git a/tests/manual/cocoa/menurama/menuramaapplication.h b/tests/manual/cocoa/menurama/menuramaapplication.h
index 2d836832fa..7670445024 100644
--- a/tests/manual/cocoa/menurama/menuramaapplication.h
+++ b/tests/manual/cocoa/menurama/menuramaapplication.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef MENURAMAAPPLICATION_H
#define MENURAMAAPPLICATION_H
diff --git a/tests/manual/cocoa/menus/CMakeLists.txt b/tests/manual/cocoa/menus/CMakeLists.txt
index 878a7ce998..84ce6604ce 100644
--- a/tests/manual/cocoa/menus/CMakeLists.txt
+++ b/tests/manual/cocoa/menus/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from menus.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## menus Binary:
@@ -7,10 +8,7 @@
qt_internal_add_manual_test(menus
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:menus.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/cocoa/menus/main.cpp b/tests/manual/cocoa/menus/main.cpp
index a32d11f18b..f0da9a6ced 100644
--- a/tests/manual/cocoa/menus/main.cpp
+++ b/tests/manual/cocoa/menus/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 KDAB
-** 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) 2012 KDAB
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QMainWindow>
#include <QMenu>
diff --git a/tests/manual/cocoa/nativewidgets/CMakeLists.txt b/tests/manual/cocoa/nativewidgets/CMakeLists.txt
index 342a99372b..59d965c89d 100644
--- a/tests/manual/cocoa/nativewidgets/CMakeLists.txt
+++ b/tests/manual/cocoa/nativewidgets/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from nativewigets.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## nativewigets Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(nativewigets
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:nativewigets.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/cocoa/nativewidgets/main.cpp b/tests/manual/cocoa/nativewidgets/main.cpp
index 769bf8664a..cad8449069 100644
--- a/tests/manual/cocoa/nativewidgets/main.cpp
+++ b/tests/manual/cocoa/nativewidgets/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 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>
#include <QtWidgets>
diff --git a/tests/manual/cocoa/popups/CMakeLists.txt b/tests/manual/cocoa/popups/CMakeLists.txt
index ac48dec318..5d5217d1b4 100644
--- a/tests/manual/cocoa/popups/CMakeLists.txt
+++ b/tests/manual/cocoa/popups/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from popups.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## popups Binary:
@@ -7,7 +8,7 @@
qt_internal_add_manual_test(popups
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/cocoa/popups/main.cpp b/tests/manual/cocoa/popups/main.cpp
index 1eb2e8f2a6..7c28795cab 100644
--- a/tests/manual/cocoa/popups/main.cpp
+++ b/tests/manual/cocoa/popups/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 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 <QtWidgets>
diff --git a/tests/manual/cocoa/qsystemtrayicon/CMakeLists.txt b/tests/manual/cocoa/qsystemtrayicon/CMakeLists.txt
index 37220922d0..59aaea4b34 100644
--- a/tests/manual/cocoa/qsystemtrayicon/CMakeLists.txt
+++ b/tests/manual/cocoa/qsystemtrayicon/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qsystemtrayicon.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qsystemtrayicon Binary:
@@ -10,7 +11,7 @@ qt_internal_add_manual_test(qsystemtrayicon
main.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
@@ -32,7 +33,3 @@ qt_internal_add_resource(qsystemtrayicon "icons"
FILES
${icons_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:qsystemtrayicon.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/cocoa/qsystemtrayicon/main.cpp b/tests/manual/cocoa/qsystemtrayicon/main.cpp
index 52aa5efe56..0346398c10 100644
--- a/tests/manual/cocoa/qsystemtrayicon/main.cpp
+++ b/tests/manual/cocoa/qsystemtrayicon/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 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 <QtWidgets>
int main(int argc, char**argv)
diff --git a/tests/manual/cocoa/qt_on_cocoa/CMakeLists.txt b/tests/manual/cocoa/qt_on_cocoa/CMakeLists.txt
index 332fd8c9d7..8c6a5111d8 100644
--- a/tests/manual/cocoa/qt_on_cocoa/CMakeLists.txt
+++ b/tests/manual/cocoa/qt_on_cocoa/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qt_on_cocoa.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qt_on_cocoa Binary:
@@ -9,14 +10,9 @@ qt_internal_add_manual_test(qt_on_cocoa
SOURCES
main.mm
rasterwindow.cpp rasterwindow.h
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWAppKit}
Qt::Gui
Qt::Quick
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qt_on_cocoa.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/cocoa/qt_on_cocoa/main.mm b/tests/manual/cocoa/qt_on_cocoa/main.mm
index e6218e48ac..7c48e5acbd 100644
--- a/tests/manual/cocoa/qt_on_cocoa/main.mm
+++ b/tests/manual/cocoa/qt_on_cocoa/main.mm
@@ -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 "rasterwindow.h"
diff --git a/tests/manual/cocoa/qt_on_cocoa/qt_on_cocoa.pro b/tests/manual/cocoa/qt_on_cocoa/qt_on_cocoa.pro
index 91c4d2c875..8913558915 100644
--- a/tests/manual/cocoa/qt_on_cocoa/qt_on_cocoa.pro
+++ b/tests/manual/cocoa/qt_on_cocoa/qt_on_cocoa.pro
@@ -8,4 +8,3 @@ LIBS += -framework AppKit
QT += gui widgets quick
QT += quick
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/manual/cocoa/qt_on_cocoa/rasterwindow.cpp b/tests/manual/cocoa/qt_on_cocoa/rasterwindow.cpp
index 6d7cb3e305..af84b599f5 100644
--- a/tests/manual/cocoa/qt_on_cocoa/rasterwindow.cpp
+++ b/tests/manual/cocoa/qt_on_cocoa/rasterwindow.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 "rasterwindow.h"
diff --git a/tests/manual/cocoa/qt_on_cocoa/rasterwindow.h b/tests/manual/cocoa/qt_on_cocoa/rasterwindow.h
index b8ef674994..a5260449be 100644
--- a/tests/manual/cocoa/qt_on_cocoa/rasterwindow.h
+++ b/tests/manual/cocoa/qt_on_cocoa/rasterwindow.h
@@ -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 <QRasterWindow>
#include <QImage>
diff --git a/tests/manual/cocoa/wheelevent/CMakeLists.txt b/tests/manual/cocoa/wheelevent/CMakeLists.txt
index e52da47db1..4bdb89cf89 100644
--- a/tests/manual/cocoa/wheelevent/CMakeLists.txt
+++ b/tests/manual/cocoa/wheelevent/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from wheelevent.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## wheelevent Binary:
@@ -9,12 +10,9 @@ qt_internal_add_manual_test(wheelevent
SOURCES
main.cpp
window.cpp window.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:wheelevent.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/cocoa/wheelevent/main.cpp b/tests/manual/cocoa/wheelevent/main.cpp
index aae4812793..9d302c1d9a 100644
--- a/tests/manual/cocoa/wheelevent/main.cpp
+++ b/tests/manual/cocoa/wheelevent/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 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>
#include <QtWidgets>
diff --git a/tests/manual/cocoa/wheelevent/window.cpp b/tests/manual/cocoa/wheelevent/window.cpp
index 9df7313b62..cd3f1f04ac 100644
--- a/tests/manual/cocoa/wheelevent/window.cpp
+++ b/tests/manual/cocoa/wheelevent/window.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 "window.h"
diff --git a/tests/manual/cocoa/wheelevent/window.h b/tests/manual/cocoa/wheelevent/window.h
index 42a6b4a1aa..e85f70fefc 100644
--- a/tests/manual/cocoa/wheelevent/window.h
+++ b/tests/manual/cocoa/wheelevent/window.h
@@ -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 <QWindow>
#include <QImage>
diff --git a/tests/manual/corelib/CMakeLists.txt b/tests/manual/corelib/CMakeLists.txt
new file mode 100644
index 0000000000..8ed7441e77
--- /dev/null
+++ b/tests/manual/corelib/CMakeLists.txt
@@ -0,0 +1,6 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(qdatastream)
+add_subdirectory(time)
+add_subdirectory(tools)
diff --git a/tests/manual/corelib/qdatastream/CMakeLists.txt b/tests/manual/corelib/qdatastream/CMakeLists.txt
new file mode 100644
index 0000000000..5d26a862e5
--- /dev/null
+++ b/tests/manual/corelib/qdatastream/CMakeLists.txt
@@ -0,0 +1,15 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## tst_manual_qdatastream Test:
+#####################################################################
+
+qt_internal_add_manual_test(tst_manual_qdatastream
+ SOURCES
+ tst_manualqdatastream.cpp
+ LIBRARIES
+ Qt::Core
+ ENABLE_AUTOGEN_TOOLS
+ uic
+)
diff --git a/tests/manual/corelib/qdatastream/qdatastream.pro b/tests/manual/corelib/qdatastream/qdatastream.pro
new file mode 100644
index 0000000000..9143f62851
--- /dev/null
+++ b/tests/manual/corelib/qdatastream/qdatastream.pro
@@ -0,0 +1,6 @@
+CONFIG += testcase
+
+SOURCES += tst_manualqdatastream.cpp
+QT = core testlib
+
+TARGET = tst_manual_qdatastream
diff --git a/tests/manual/corelib/qdatastream/tst_manualqdatastream.cpp b/tests/manual/corelib/qdatastream/tst_manualqdatastream.cpp
new file mode 100644
index 0000000000..37e5b80950
--- /dev/null
+++ b/tests/manual/corelib/qdatastream/tst_manualqdatastream.cpp
@@ -0,0 +1,234 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QDataStream>
+#include <QHash>
+#include <QList>
+#include <QMap>
+#include <QScopeGuard>
+#include <QSet>
+#include <QTest>
+
+// These tests are way too slow to be part of automatic unit tests
+class tst_QDataStream : public QObject
+{
+ Q_OBJECT
+
+ template <class T>
+ void fill(T &input);
+
+ void fill(QSet<qsizetype> &input);
+ void fill(QMap<qsizetype, qsizetype> &input);
+ void fill(QHash<qsizetype, qsizetype> &input);
+
+ template <class T>
+ void stream_big();
+
+public slots:
+ void initTestCase();
+
+private slots:
+ void stream_bigQString();
+ void stream_bigQByteArray();
+ void stream_bigQList();
+ void stream_bigQSet();
+ void stream_bigQMap();
+ void stream_bigQHash();
+ void stream_bigCString();
+};
+
+void tst_QDataStream::initTestCase()
+{
+ qputenv("QTEST_FUNCTION_TIMEOUT", "9000000");
+
+ QTest::addColumn<QDataStream::Version>("streamVersion");
+ QTest::addRow("current") << QDataStream::Qt_DefaultCompiledVersion;
+ QTest::addRow("Qt_6_6") << QDataStream::Qt_6_6;
+}
+
+template <class T>
+void tst_QDataStream::fill(T &input)
+{
+ constexpr qsizetype GiB = 1024 * 1024 * 1024;
+ constexpr qsizetype BaseSize = 4 * GiB + 1;
+ qDebug("Filling container with %lld entries", qint64(BaseSize));
+ QElapsedTimer timer;
+ timer.start();
+ try {
+ input.reserve(BaseSize);
+ input.resize(BaseSize, 'a');
+ } catch (const std::bad_alloc &) {
+ QSKIP("Could not allocate 4 GiB of RAM.");
+ }
+ qDebug("Created dataset in %lld ms", timer.elapsed());
+}
+
+void tst_QDataStream::fill(QSet<qsizetype> &input)
+{
+ constexpr qsizetype GiB = 1024 * 1024 * 1024;
+ constexpr qsizetype BaseSize = 4 * GiB + 1;
+ qDebug("Filling container with %lld entries", qint64(BaseSize));
+ QElapsedTimer timer;
+ timer.start();
+ try {
+ input.reserve(BaseSize);
+ for (qsizetype i = 0; i < BaseSize; ++i)
+ input.insert(i);
+ } catch (const std::bad_alloc &) {
+ QSKIP("Could not allocate 4 Gi entries.");
+ }
+ qDebug("Created dataset in %lld ms", timer.elapsed());
+}
+
+void tst_QDataStream::fill(QMap<qsizetype, qsizetype> &input)
+{
+ constexpr qsizetype GiB = 1024 * 1024 * 1024;
+ constexpr qsizetype BaseSize = 4 * GiB + 1;
+ qDebug("Filling container with %lld entries", qint64(BaseSize));
+ QElapsedTimer timer;
+ timer.start();
+ try {
+ for (qsizetype i = 0; i < BaseSize; ++i)
+ input.insert(i, i);
+ } catch (const std::bad_alloc &) {
+ QSKIP("Could not allocate 4 Gi entries.");
+ }
+ qDebug("Created dataset in %lld ms", timer.elapsed());
+}
+
+void tst_QDataStream::fill(QHash<qsizetype, qsizetype> &input)
+{
+ constexpr qsizetype GiB = 1024 * 1024 * 1024;
+ constexpr qsizetype BaseSize = 4 * GiB + 1;
+ qDebug("Filling container with %lld entries", qint64(BaseSize));
+ QElapsedTimer timer;
+ timer.start();
+ try {
+ input.reserve(BaseSize);
+ for (qsizetype i = 0; i < BaseSize; ++i)
+ input.emplace(i, i);
+ } catch (const std::bad_alloc &) {
+ QSKIP("Could not allocate 4 Gi entries.");
+ }
+ qDebug("Created dataset in %lld ms", timer.elapsed());
+}
+
+template <class T>
+void tst_QDataStream::stream_big()
+{
+#if QT_POINTER_SIZE > 4
+ QFETCH_GLOBAL(const QDataStream::Version, streamVersion);
+ QElapsedTimer timer;
+ T input;
+ fill(input);
+ QByteArray ba;
+ QDataStream inputstream(&ba, QIODevice::WriteOnly);
+ inputstream.setVersion(streamVersion);
+ timer.start();
+ try {
+ inputstream << input;
+ } catch (const std::bad_alloc &) {
+ QSKIP("Not enough memory to copy into QDataStream.");
+ }
+ qDebug("Streamed into QDataStream in %lld ms", timer.elapsed());
+ if (streamVersion < QDataStream::Qt_6_7) {
+ // old versions do not support data size more than 4 GiB
+ QCOMPARE(inputstream.status(), QDataStream::SizeLimitExceeded);
+ QVERIFY(ba.isEmpty());
+ } else {
+ T output;
+ QDataStream outputstream(ba);
+ timer.start();
+ try {
+ outputstream >> output;
+ } catch (const std::bad_alloc &) {
+ QSKIP("Not enough memory to copy out of QDataStream.");
+ }
+ qDebug("Streamed out of QDataStream in %lld ms", timer.elapsed());
+ QCOMPARE(input.size(), output.size());
+ QCOMPARE(input, output);
+ }
+#else
+ QSKIP("This test is 64-bit only.");
+#endif
+}
+
+void tst_QDataStream::stream_bigQString()
+{
+ stream_big<QString>();
+}
+
+void tst_QDataStream::stream_bigQByteArray()
+{
+ stream_big<QByteArray>();
+}
+void tst_QDataStream::stream_bigQList()
+{
+ stream_big<QList<char>>();
+}
+
+void tst_QDataStream::stream_bigQSet()
+{
+ stream_big<QSet<qsizetype>>();
+}
+
+void tst_QDataStream::stream_bigQMap()
+{
+ stream_big<QMap<qsizetype, qsizetype>>();
+}
+void tst_QDataStream::stream_bigQHash()
+{
+ stream_big<QHash<qsizetype, qsizetype>>();
+}
+
+void tst_QDataStream::stream_bigCString()
+{
+ if constexpr (sizeof(void*) == sizeof(int))
+ QSKIP("This test is 64-bit only.");
+
+ QFETCH_GLOBAL(const QDataStream::Version, streamVersion);
+ constexpr qint64 GiB = 1024 * 1024 * 1024;
+ constexpr qint64 BaseSize = 4 * GiB + 1;
+ std::string input;
+ qDebug("Creating an array with %lld entries", BaseSize);
+ QElapsedTimer timer;
+ timer.start();
+ try {
+ input.resize(BaseSize, 'a');
+ } catch (const std::bad_alloc &) {
+ QSKIP("Could not allocate 4 Gi + 2 entries.");
+ }
+ qDebug("Created dataset in %lld ms", timer.elapsed());
+ QByteArray ba;
+ QDataStream inputstream(&ba, QIODevice::WriteOnly);
+ inputstream.setVersion(streamVersion);
+ timer.start();
+ try {
+ inputstream << input.data();
+ } catch (const std::bad_alloc &) {
+ QSKIP("Not enough memory to copy into QDataStream.");
+ }
+ qDebug("Streamed into QDataStream in %lld ms", timer.elapsed());
+ if (streamVersion < QDataStream::Qt_6_7) {
+ // old versions do not support data size more than 4 GiB
+ QCOMPARE(inputstream.status(), QDataStream::SizeLimitExceeded);
+ QVERIFY(ba.isEmpty());
+ } else {
+ char *output = nullptr;
+ auto cleanup = qScopeGuard([&output] { delete [] output; });
+ QDataStream outputstream(ba);
+ timer.start();
+ try {
+ outputstream >> output;
+ } catch (const std::bad_alloc &) {
+ QSKIP("Not enough memory to copy out of QDataStream.");
+ }
+ qDebug("Streamed out of QDataStream in %lld ms", timer.elapsed());
+ QCOMPARE(qstrlen(output), input.size());
+ QVERIFY(memcmp(input.data(), output, BaseSize + 1) == 0);
+ }
+}
+
+QTEST_MAIN(tst_QDataStream)
+
+#include "tst_manualqdatastream.moc"
diff --git a/tests/manual/corelib/time/CMakeLists.txt b/tests/manual/corelib/time/CMakeLists.txt
new file mode 100644
index 0000000000..b8e6aa2f18
--- /dev/null
+++ b/tests/manual/corelib/time/CMakeLists.txt
@@ -0,0 +1,4 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(zonechange)
diff --git a/tests/manual/corelib/time/foreachzone b/tests/manual/corelib/time/foreachzone
new file mode 100755
index 0000000000..480679885a
--- /dev/null
+++ b/tests/manual/corelib/time/foreachzone
@@ -0,0 +1,30 @@
+#!/bin/sh
+# Usage: foreachzone command [args...]
+#
+# The command is run with eval, so can include embedded shell
+# metacharacters such as | and ||. It is run in a sub-shell, so can
+# change environment or cd to a different directory without
+# complicating later runs of the same command.
+#
+# It is run repeatedly, with the TZ environment variable set to each
+# timezone name in turn, excluding the copies of zoneinfo/ under its
+# posix/ and right/ sub-dirs. Symbolic links are included (as long as
+# they point to valid zone data).
+#
+# For example, in the top level of a build tree,
+# foreachzone ninja tst_qdate_check
+# will run all the QDate tests in every time zone (this may take some
+# time).
+
+DIR=/usr/share/zoneinfo
+[ -d "$DIR" ] || DIR=/usr/lib/zoneinfo
+
+find $DIR -type d \( -name posix -o -name right \) -prune -o \( -type f -o -type l \) -print \
+ | while read f
+do
+ # To filter out symlinks in zoneinfo/ itself, uncomment this line:
+ # echo "$f" | grep -wq 'zoneinfo/.*/' || [ ! -h "$f" ] || continue
+ # To skip all symlinks, omit the -L here:
+ file -L "$f" | grep -wq 'timezone data .*, version' || continue
+ ( export TZ=${f#*/zoneinfo/}; eval "$@" )
+done
diff --git a/tests/manual/corelib/time/zonechange/CMakeLists.txt b/tests/manual/corelib/time/zonechange/CMakeLists.txt
new file mode 100644
index 0000000000..474779849f
--- /dev/null
+++ b/tests/manual/corelib/time/zonechange/CMakeLists.txt
@@ -0,0 +1,9 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(zonechange
+ SOURCES
+ tst_zonechange.cpp
+ LIBRARIES
+ Qt::Core
+)
diff --git a/tests/manual/corelib/time/zonechange/tst_zonechange.cpp b/tests/manual/corelib/time/zonechange/tst_zonechange.cpp
new file mode 100644
index 0000000000..5ca33f1396
--- /dev/null
+++ b/tests/manual/corelib/time/zonechange/tst_zonechange.cpp
@@ -0,0 +1,60 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/qcoreapplication.h>
+
+#include <QtCore/qdatetime.h>
+#if QT_CONFIG(timezone)
+#include <QtCore/qtimezone.h>
+#endif
+
+#include <chrono>
+#include <thread>
+
+using namespace std::chrono;
+
+bool distinct(const QDateTime &left, const QDateTime &right)
+{
+ if (left == right)
+ return false;
+
+ qInfo() << " Actual:" << left << "\nExpected:" << right;
+ return true;
+}
+
+// Exit status: 0 success, 1 test failed, 2 test not viable.
+int main(int argc, char **argv)
+{
+ // Other things may need this indirectly, so make sure it exists:
+ QCoreApplication ignored(argc, argv);
+ if (!qEnvironmentVariableIsEmpty("TZ")) {
+ qInfo("Environment variable TZ over-rides system setting; you need to clear it.");
+ return 2;
+ }
+
+ QDateTime date = QDateTime(QDate(2020, 2, 20), QTime(20, 20, 20));
+ QDateTime copy = date;
+ if (distinct(date, copy))
+ return 1;
+#if QT_CONFIG(timezone)
+ const auto prior = QTimeZone::systemTimeZoneId();
+#endif
+
+ qInfo("You have two minutes in which to change the system time-zone setting.");
+ std::this_thread::sleep_for(120s);
+#if QT_CONFIG(timezone)
+ if (QTimeZone::systemTimeZoneId() == prior) {
+ qInfo("Too slow.");
+ return 2;
+ }
+#endif
+
+ if (distinct(copy, date))
+ return 1;
+ QDateTime copy2 = copy.addMSecs(2);
+ QDateTime date2 = date.addMSecs(2);
+ if (distinct(copy2, date2))
+ return 1;
+
+ return 0;
+}
diff --git a/tests/manual/corelib/tools/CMakeLists.txt b/tests/manual/corelib/tools/CMakeLists.txt
new file mode 100644
index 0000000000..4300db8859
--- /dev/null
+++ b/tests/manual/corelib/tools/CMakeLists.txt
@@ -0,0 +1,12 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(customtype)
+add_subdirectory(customtypesending)
+# Needs conversion from qmake:
+# add_subdirectory(qhash)
+# add_subdirectory(qlist)
+# add_subdirectory(qmap)
+# add_subdirectory(qset)
+# add_subdirectory(qvarlengtharray)
+# add_subdirectory(qvector)
diff --git a/tests/manual/corelib/tools/customtype/CMakeLists.txt b/tests/manual/corelib/tools/customtype/CMakeLists.txt
new file mode 100644
index 0000000000..4cb1c024b3
--- /dev/null
+++ b/tests/manual/corelib/tools/customtype/CMakeLists.txt
@@ -0,0 +1,15 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+qt_internal_add_manual_test(customtype
+ GUI
+ SOURCES
+ main.cpp
+ message.cpp message.h
+ LIBRARIES
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
diff --git a/tests/manual/corelib/tools/customtype/customtype.pro b/tests/manual/corelib/tools/customtype/customtype.pro
new file mode 100644
index 0000000000..0a5a90f541
--- /dev/null
+++ b/tests/manual/corelib/tools/customtype/customtype.pro
@@ -0,0 +1,7 @@
+HEADERS = message.h
+SOURCES = main.cpp \
+ message.cpp
+QT += widgets
+INCLUDEPATH += .
+TARGET = customtype
+
diff --git a/tests/manual/corelib/tools/customtype/main.cpp b/tests/manual/corelib/tools/customtype/main.cpp
new file mode 100644
index 0000000000..2368db6ec0
--- /dev/null
+++ b/tests/manual/corelib/tools/customtype/main.cpp
@@ -0,0 +1,37 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+#include <QDebug>
+#include <QVariant>
+#include "message.h"
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication app(argc, argv);
+ QStringList headers;
+ headers << "Subject: Hello World"
+ << "From: address@example.com";
+ QString body = "This is a test.\r\n";
+
+//! [printing a custom type]
+ Message message(body, headers);
+ qDebug() << "Original:" << message;
+//! [printing a custom type]
+
+//! [storing a custom value]
+ QVariant stored;
+ stored.setValue(message);
+//! [storing a custom value]
+
+ qDebug() << "Stored:" << stored;
+
+//! [retrieving a custom value]
+ Message retrieved = qvariant_cast<Message>(stored);
+ qDebug() << "Retrieved:" << retrieved;
+ retrieved = qvariant_cast<Message>(stored);
+ qDebug() << "Retrieved:" << retrieved;
+//! [retrieving a custom value]
+
+ return 0;
+}
diff --git a/tests/manual/corelib/tools/customtype/message.cpp b/tests/manual/corelib/tools/customtype/message.cpp
new file mode 100644
index 0000000000..221480d56f
--- /dev/null
+++ b/tests/manual/corelib/tools/customtype/message.cpp
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "message.h"
+
+#include <QDebug>
+
+Message::Message(const QString &body, const QStringList &headers)
+ : m_body(body), m_headers(headers)
+{
+}
+
+//! [custom type streaming operator]
+QDebug operator<<(QDebug dbg, const Message &message)
+{
+ QDebugStateSaver saver(dbg);
+ QList<QStringView> pieces = message.body().split(u"\r\n", Qt::SkipEmptyParts);
+ if (pieces.isEmpty())
+ dbg.nospace() << "Message()";
+ else if (pieces.size() == 1)
+ dbg.nospace() << "Message(" << pieces.first() << ")";
+ else
+ dbg.nospace() << "Message(" << pieces.first() << " ...)";
+ return dbg;
+}
+//! [custom type streaming operator]
+
+//! [getter functions]
+QStringView Message::body() const
+{
+ return m_body;
+}
+
+QStringList Message::headers() const
+{
+ return m_headers;
+}
+//! [getter functions]
diff --git a/tests/manual/corelib/tools/customtype/message.h b/tests/manual/corelib/tools/customtype/message.h
new file mode 100644
index 0000000000..3b91938eb7
--- /dev/null
+++ b/tests/manual/corelib/tools/customtype/message.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef MESSAGE_H
+#define MESSAGE_H
+
+#include <QMetaType>
+#include <QStringList>
+
+//! [custom type definition]
+class Message
+{
+public:
+ Message() = default;
+ ~Message() = default;
+ Message(const Message &) = default;
+ Message &operator=(const Message &) = default;
+
+ Message(const QString &body, const QStringList &headers);
+
+ QStringView body() const;
+ QStringList headers() const;
+
+private:
+ QString m_body;
+ QStringList m_headers;
+};
+//! [custom type definition]
+
+//! [custom type meta-type declaration]
+Q_DECLARE_METATYPE(Message);
+//! [custom type meta-type declaration]
+
+//! [custom type streaming operator]
+QDebug operator<<(QDebug dbg, const Message &message);
+//! [custom type streaming operator]
+
+#endif
diff --git a/tests/manual/corelib/tools/customtypesending/CMakeLists.txt b/tests/manual/corelib/tools/customtypesending/CMakeLists.txt
new file mode 100644
index 0000000000..c22d5e23c1
--- /dev/null
+++ b/tests/manual/corelib/tools/customtypesending/CMakeLists.txt
@@ -0,0 +1,16 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+
+qt_internal_add_manual_test(customtypesending
+ GUI
+ SOURCES
+ main.cpp
+ message.cpp message.h
+ window.cpp window.h
+ LIBRARIES
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
diff --git a/tests/manual/corelib/tools/customtypesending/customtypesending.pro b/tests/manual/corelib/tools/customtypesending/customtypesending.pro
new file mode 100644
index 0000000000..d316787f76
--- /dev/null
+++ b/tests/manual/corelib/tools/customtypesending/customtypesending.pro
@@ -0,0 +1,9 @@
+HEADERS = message.h \
+ window.h
+SOURCES = main.cpp \
+ message.cpp \
+ window.cpp
+QT += widgets
+INCLUDEPATH += .
+TARGET = customtypesending
+
diff --git a/tests/manual/corelib/tools/customtypesending/main.cpp b/tests/manual/corelib/tools/customtypesending/main.cpp
new file mode 100644
index 0000000000..a8f95ffe8e
--- /dev/null
+++ b/tests/manual/corelib/tools/customtypesending/main.cpp
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QApplication>
+#include "message.h"
+#include "window.h"
+
+//! [main function]
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QStringList headers;
+ headers << "Subject: Hello World"
+ << "From: address@example.com";
+ QString body = "This is a test.\r\n";
+ Message message(body, headers);
+
+ Window window1;
+ window1.setMessage(message);
+
+ Window window2;
+ QObject::connect(&window1, &Window::messageSent,
+ &window2, &Window::setMessage);
+ QObject::connect(&window2, &Window::messageSent,
+ &window1, &Window::setMessage);
+ window1.show();
+ window2.show();
+ return app.exec();
+}
+//! [main function]
diff --git a/tests/manual/corelib/tools/customtypesending/message.cpp b/tests/manual/corelib/tools/customtypesending/message.cpp
new file mode 100644
index 0000000000..a7a8722673
--- /dev/null
+++ b/tests/manual/corelib/tools/customtypesending/message.cpp
@@ -0,0 +1,19 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "message.h"
+
+Message::Message(const QString &body, const QStringList &headers)
+ : m_body(body), m_headers(headers)
+{
+}
+
+QString Message::body() const
+{
+ return m_body;
+}
+
+QStringList Message::headers() const
+{
+ return m_headers;
+}
diff --git a/tests/manual/corelib/tools/customtypesending/message.h b/tests/manual/corelib/tools/customtypesending/message.h
new file mode 100644
index 0000000000..b16c92f177
--- /dev/null
+++ b/tests/manual/corelib/tools/customtypesending/message.h
@@ -0,0 +1,34 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef MESSAGE_H
+#define MESSAGE_H
+
+#include <QMetaType>
+#include <QStringList>
+
+//! [custom type definition]
+class Message
+{
+public:
+ Message() = default;
+ ~Message() = default;
+ Message(const Message &) = default;
+ Message &operator=(const Message &) = default;
+
+ Message(const QString &body, const QStringList &headers);
+
+ QString body() const;
+ QStringList headers() const;
+
+private:
+ QString m_body;
+ QStringList m_headers;
+};
+//! [custom type definition]
+
+//! [custom type meta-type declaration]
+Q_DECLARE_METATYPE(Message);
+//! [custom type meta-type declaration]
+
+#endif
diff --git a/tests/manual/corelib/tools/customtypesending/window.cpp b/tests/manual/corelib/tools/customtypesending/window.cpp
new file mode 100644
index 0000000000..fc158f10e6
--- /dev/null
+++ b/tests/manual/corelib/tools/customtypesending/window.cpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtWidgets>
+#include "window.h"
+
+//! [Window constructor]
+Window::Window(QWidget *parent)
+ : QWidget(parent), editor(new QTextEdit(this))
+{
+ QPushButton *sendButton = new QPushButton(tr("&Send message"));
+
+ connect(sendButton, &QPushButton::clicked,
+ this, &Window::sendMessage);
+
+ QHBoxLayout *buttonLayout = new QHBoxLayout;
+ buttonLayout->addStretch();
+ buttonLayout->addWidget(sendButton);
+ buttonLayout->addStretch();
+
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ layout->addWidget(editor);
+ layout->addLayout(buttonLayout);
+
+ setWindowTitle(tr("Custom Type Sending"));
+}
+//! [Window constructor]
+
+//! [sending a message]
+void Window::sendMessage()
+{
+ thisMessage = Message(editor->toPlainText(), thisMessage.headers());
+ emit messageSent(thisMessage);
+}
+//! [sending a message]
+
+//! [receiving a message]
+void Window::setMessage(const Message &message)
+{
+ thisMessage = message;
+ editor->setPlainText(thisMessage.body());
+}
+//! [receiving a message]
diff --git a/tests/manual/corelib/tools/customtypesending/window.h b/tests/manual/corelib/tools/customtypesending/window.h
new file mode 100644
index 0000000000..974e7a7629
--- /dev/null
+++ b/tests/manual/corelib/tools/customtypesending/window.h
@@ -0,0 +1,35 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include <QWidget>
+#include "message.h"
+
+QT_FORWARD_DECLARE_CLASS(QTextEdit)
+
+//! [Window class definition]
+class Window : public QWidget
+{
+ Q_OBJECT
+
+public:
+ Window(QWidget *parent = nullptr);
+
+signals:
+ void messageSent(const Message &message);
+
+public slots:
+ void setMessage(const Message &message);
+
+private slots:
+ void sendMessage();
+
+private:
+ Message thisMessage;
+ QTextEdit *editor;
+};
+//! [Window class definition]
+
+#endif
diff --git a/tests/manual/corelib/tools/qhash/main.cpp b/tests/manual/corelib/tools/qhash/main.cpp
index 298d1777ea..6c9006ace2 100644
--- a/tests/manual/corelib/tools/qhash/main.cpp
+++ b/tests/manual/corelib/tools/qhash/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Thorbjørn Lund Martsum - tmartsum[at]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) 2013 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QHash>
diff --git a/tests/manual/corelib/tools/qlist/main.cpp b/tests/manual/corelib/tools/qlist/main.cpp
index 1553962d32..2f3e8c0c73 100644
--- a/tests/manual/corelib/tools/qlist/main.cpp
+++ b/tests/manual/corelib/tools/qlist/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Thorbjørn Lund Martsum - tmartsum[at]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) 2013 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QList>
diff --git a/tests/manual/corelib/tools/qmap/main.cpp b/tests/manual/corelib/tools/qmap/main.cpp
index 586bfb2750..b3c163e515 100644
--- a/tests/manual/corelib/tools/qmap/main.cpp
+++ b/tests/manual/corelib/tools/qmap/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]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) 2012 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
//#define Q_NO_DEBUGMAP_PARENT_TEST
// Comment in line above to skip the parent test.
diff --git a/tests/manual/corelib/tools/qset/main.cpp b/tests/manual/corelib/tools/qset/main.cpp
index 701c8889db..6b86d2fb06 100644
--- a/tests/manual/corelib/tools/qset/main.cpp
+++ b/tests/manual/corelib/tools/qset/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Thorbjørn Lund Martsum - tmartsum[at]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) 2013 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QSet>
diff --git a/tests/manual/corelib/tools/qvarlengtharray/main.cpp b/tests/manual/corelib/tools/qvarlengtharray/main.cpp
index 0544bb0c4b..0ad8d75b6c 100644
--- a/tests/manual/corelib/tools/qvarlengtharray/main.cpp
+++ b/tests/manual/corelib/tools/qvarlengtharray/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Thorbjørn Lund Martsum - tmartsum[at]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) 2013 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QVarLengthArray>
diff --git a/tests/manual/corelib/tools/qvector/main.cpp b/tests/manual/corelib/tools/qvector/main.cpp
index 1b35123f15..40462f272f 100644
--- a/tests/manual/corelib/tools/qvector/main.cpp
+++ b/tests/manual/corelib/tools/qvector/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Thorbjørn Lund Martsum - tmartsum[at]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) 2013 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDebug>
#include <QVector>
diff --git a/tests/manual/diaglib/debugproxystyle.cpp b/tests/manual/diaglib/debugproxystyle.cpp
index cf73ae2ef8..39aad93d17 100644
--- a/tests/manual/diaglib/debugproxystyle.cpp
+++ b/tests/manual/diaglib/debugproxystyle.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "debugproxystyle.h"
#include "eventfilter.h"
diff --git a/tests/manual/diaglib/debugproxystyle.h b/tests/manual/diaglib/debugproxystyle.h
index 51bf79374e..160693a452 100644
--- a/tests/manual/diaglib/debugproxystyle.h
+++ b/tests/manual/diaglib/debugproxystyle.h
@@ -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
#ifndef DEBUGPROXYSTYLE_H
#define DEBUGPROXYSTYLE_H
diff --git a/tests/manual/diaglib/eventfilter.cpp b/tests/manual/diaglib/eventfilter.cpp
index 2a434a2cdb..e7896c278b 100644
--- a/tests/manual/diaglib/eventfilter.cpp
+++ b/tests/manual/diaglib/eventfilter.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "eventfilter.h"
#include <QtGui/QMouseEvent>
diff --git a/tests/manual/diaglib/eventfilter.h b/tests/manual/diaglib/eventfilter.h
index a8740bb4e9..9db4918381 100644
--- a/tests/manual/diaglib/eventfilter.h
+++ b/tests/manual/diaglib/eventfilter.h
@@ -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
#ifndef _EVENTFILTER_
#define _EVENTFILTER_
diff --git a/tests/manual/diaglib/glinfo.cpp b/tests/manual/diaglib/glinfo.cpp
index 663ceabc05..1abd4dd731 100644
--- a/tests/manual/diaglib/glinfo.cpp
+++ b/tests/manual/diaglib/glinfo.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "glinfo.h"
diff --git a/tests/manual/diaglib/glinfo.h b/tests/manual/diaglib/glinfo.h
index 2903a98d2f..d633ae8a2f 100644
--- a/tests/manual/diaglib/glinfo.h
+++ b/tests/manual/diaglib/glinfo.h
@@ -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
#ifndef _GLINFO_
#define _GLINFO_
diff --git a/tests/manual/diaglib/logwidget.cpp b/tests/manual/diaglib/logwidget.cpp
index a1822d7ed4..e49a78d454 100644
--- a/tests/manual/diaglib/logwidget.cpp
+++ b/tests/manual/diaglib/logwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "logwidget.h"
#include <QApplication>
diff --git a/tests/manual/diaglib/logwidget.h b/tests/manual/diaglib/logwidget.h
index b1ce43f231..921cc5be71 100644
--- a/tests/manual/diaglib/logwidget.h
+++ b/tests/manual/diaglib/logwidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef LOGWIDGET_H
#define LOGWIDGET_H
diff --git a/tests/manual/diaglib/nativewindowdump.cpp b/tests/manual/diaglib/nativewindowdump.cpp
index 2937665bad..d384f05d57 100644
--- a/tests/manual/diaglib/nativewindowdump.cpp
+++ b/tests/manual/diaglib/nativewindowdump.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "nativewindowdump.h"
diff --git a/tests/manual/diaglib/nativewindowdump.h b/tests/manual/diaglib/nativewindowdump.h
index e848724b13..6fe2995dc8 100644
--- a/tests/manual/diaglib/nativewindowdump.h
+++ b/tests/manual/diaglib/nativewindowdump.h
@@ -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
#ifndef _NATIVEWINDOWDUMP_
#define _NATIVEWINDOWDUMP_
diff --git a/tests/manual/diaglib/nativewindowdump_win.cpp b/tests/manual/diaglib/nativewindowdump_win.cpp
index f88b189665..b2f8be861b 100644
--- a/tests/manual/diaglib/nativewindowdump_win.cpp
+++ b/tests/manual/diaglib/nativewindowdump_win.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "nativewindowdump.h"
#include "qwindowdump.h"
diff --git a/tests/manual/diaglib/qwidgetdump.cpp b/tests/manual/diaglib/qwidgetdump.cpp
index 95c4b175d8..9fd79d32d4 100644
--- a/tests/manual/diaglib/qwidgetdump.cpp
+++ b/tests/manual/diaglib/qwidgetdump.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qwidgetdump.h"
@@ -148,7 +123,7 @@ void dumpAllWidgets(FormatWindowOptions options, const QWidget *root)
topLevels.append(const_cast<QWidget *>(root));
else
topLevels = QApplication::topLevelWidgets();
- for (QWidget *tw : qAsConst(topLevels))
+ for (QWidget *tw : std::as_const(topLevels))
dumpWidgetRecursion(str, tw, options);
for (const QString &line : d.split(QLatin1Char('\n')))
qDebug().noquote() << line;
diff --git a/tests/manual/diaglib/qwidgetdump.h b/tests/manual/diaglib/qwidgetdump.h
index c9b2db72dd..5bac7395a8 100644
--- a/tests/manual/diaglib/qwidgetdump.h
+++ b/tests/manual/diaglib/qwidgetdump.h
@@ -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
#ifndef _WIDGETDUMP_
#define _WIDGETDUMP_
diff --git a/tests/manual/diaglib/qwindowdump.cpp b/tests/manual/diaglib/qwindowdump.cpp
index 2e5b3e0f96..9c71c0ae9b 100644
--- a/tests/manual/diaglib/qwindowdump.cpp
+++ b/tests/manual/diaglib/qwindowdump.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "qwindowdump.h"
diff --git a/tests/manual/diaglib/qwindowdump.h b/tests/manual/diaglib/qwindowdump.h
index 9d7491eab2..1fdc1f1bcd 100644
--- a/tests/manual/diaglib/qwindowdump.h
+++ b/tests/manual/diaglib/qwindowdump.h
@@ -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
#ifndef _WINDOWDUMP_
#define _WINDOWDUMP_
diff --git a/tests/manual/diaglib/textdump.cpp b/tests/manual/diaglib/textdump.cpp
index 544f094fd1..0256baba51 100644
--- a/tests/manual/diaglib/textdump.cpp
+++ b/tests/manual/diaglib/textdump.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "textdump.h"
diff --git a/tests/manual/diaglib/textdump.h b/tests/manual/diaglib/textdump.h
index 5bfc73ac78..0885c2d29c 100644
--- a/tests/manual/diaglib/textdump.h
+++ b/tests/manual/diaglib/textdump.h
@@ -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
#ifndef TEXTDUMP_H
#define TEXTDUMP_H
diff --git a/tests/manual/dialogs/CMakeLists.txt b/tests/manual/dialogs/CMakeLists.txt
index 09c9a287c2..1900b68540 100644
--- a/tests/manual/dialogs/CMakeLists.txt
+++ b/tests/manual/dialogs/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from dialogs.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## dialogs Binary:
@@ -14,25 +15,27 @@ qt_internal_add_manual_test(dialogs
messageboxpanel.cpp messageboxpanel.h
utils.cpp utils.h
wizardpanel.cpp wizardpanel.h
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ filedialogpanel.cpp # undef QT_NO_FOREACH
+ utils.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-#### Keys ignored in scope 1:.:.:dialogs.pro:<TRUE>:
-# TEMPLATE = "app"
-
## Scopes:
#####################################################################
qt_internal_extend_target(dialogs CONDITION TARGET Qt::PrintSupport
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::PrintSupport
)
qt_internal_extend_target(dialogs CONDITION NOT (QT_FEATURE_printer EQUAL FALSE)
SOURCES
printdialogpanel.cpp printdialogpanel.h printdialogpanel.ui
+ NO_PCH_SOURCES
+ printdialogpanel.cpp # undef QT_NO_FOREACH
ENABLE_AUTOGEN_TOOLS
uic
)
diff --git a/tests/manual/dialogs/colordialogpanel.cpp b/tests/manual/dialogs/colordialogpanel.cpp
index f47e4ea8f1..c9052263b6 100644
--- a/tests/manual/dialogs/colordialogpanel.cpp
+++ b/tests/manual/dialogs/colordialogpanel.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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 "colordialogpanel.h"
+#include "utils.h"
#include <QGroupBox>
#include <QCheckBox>
@@ -69,15 +45,6 @@ static inline QStringList svgColorNames()
<< "turquoise" << "violet" << "wheat" << "white" << "whitesmoke" << "yellow" << "yellowgreen";
}
-static inline QPushButton *addButton(const QString &description, QVBoxLayout *layout,
- QObject *receiver, const char *slotFunc)
-{
- QPushButton *button = new QPushButton(description);
- QObject::connect(button, SIGNAL(clicked()), receiver, slotFunc);
- layout->addWidget(button);
- return button;
-}
-
class ColorProxyModel : public QSortFilterProxyModel
{
public:
@@ -85,7 +52,7 @@ public:
{
}
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
{
if (role == Qt::DisplayRole) {
QString name = data(index, Qt::EditRole).toString();
@@ -128,7 +95,9 @@ ColorDialogPanel::ColorDialogPanel(QWidget *parent)
QGroupBox *buttonsGroupBox = new QGroupBox(tr("Show"));
QVBoxLayout *buttonsLayout = new QVBoxLayout(buttonsGroupBox);
addButton(tr("Exec modal"), buttonsLayout, this, SLOT(execModal()));
- addButton(tr("Show modal"), buttonsLayout, this, SLOT(showModal()));
+ addButton(tr("Show application modal"), buttonsLayout,
+ [this]() { showModal(Qt::ApplicationModal); });
+ addButton(tr("Show window modal"), buttonsLayout, [this]() { showModal(Qt::WindowModal); });
m_deleteModalDialogButton =
addButton(tr("Delete modal"), buttonsLayout, this, SLOT(deleteModalDialog()));
addButton(tr("Show non-modal"), buttonsLayout, this, SLOT(showNonModal()));
@@ -162,7 +131,7 @@ void ColorDialogPanel::execModal()
dialog.exec();
}
-void ColorDialogPanel::showModal()
+void ColorDialogPanel::showModal(Qt::WindowModality modality)
{
if (m_modalDialog.isNull()) {
static int n = 0;
@@ -176,6 +145,7 @@ void ColorDialogPanel::showModal()
.arg(QLatin1String(QT_VERSION_STR)));
enableDeleteModalDialogButton();
}
+ m_modalDialog->setWindowModality(modality);
applySettings(m_modalDialog);
m_modalDialog->show();
}
diff --git a/tests/manual/dialogs/colordialogpanel.h b/tests/manual/dialogs/colordialogpanel.h
index a299337f43..06eff59945 100644
--- a/tests/manual/dialogs/colordialogpanel.h
+++ b/tests/manual/dialogs/colordialogpanel.h
@@ -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
#ifndef COLORDIALOGPANEL_H
#define COLORDIALOGPANEL_H
@@ -46,7 +21,7 @@ public:
public slots:
void execModal();
- void showModal();
+ void showModal(Qt::WindowModality modality);
void showNonModal();
void deleteNonModalDialog();
void deleteModalDialog();
diff --git a/tests/manual/dialogs/filedialogpanel.cpp b/tests/manual/dialogs/filedialogpanel.cpp
index f72ab3d107..2f47c5ad0a 100644
--- a/tests/manual/dialogs/filedialogpanel.cpp
+++ b/tests/manual/dialogs/filedialogpanel.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "filedialogpanel.h"
#include "utils.h"
@@ -68,15 +45,6 @@ const FlagData fileModeComboData[] =
{"Directory", QFileDialog::Directory}
};
-static inline QPushButton *addButton(const QString &description, QGridLayout *layout,
- int &row, int column, QObject *receiver, const char *slotFunc)
-{
- QPushButton *button = new QPushButton(description);
- QObject::connect(button, SIGNAL(clicked()), receiver, slotFunc);
- layout->addWidget(button, row++, column);
- return button;
-}
-
// A line edit for editing the label fields of the dialog, keeping track of whether it has
// been modified by the user to avoid applying Qt's default texts to native dialogs.
@@ -118,6 +86,7 @@ FileDialogPanel::FileDialogPanel(QWidget *parent)
, m_resolveSymLinks(new QCheckBox(tr("Resolve symlinks")))
, m_native(new QCheckBox(tr("Use native dialog")))
, m_customDirIcons(new QCheckBox(tr("Don't use custom directory icons")))
+ , m_noIconProvider(new QCheckBox(tr("Null icon provider")))
, m_acceptMode(createCombo(this, acceptModeComboData, sizeof(acceptModeComboData)/sizeof(FlagData)))
, m_fileMode(createCombo(this, fileModeComboData, sizeof(fileModeComboData)/sizeof(FlagData)))
, m_viewMode(createCombo(this, viewModeComboData, sizeof(viewModeComboData)/sizeof(FlagData)))
@@ -145,6 +114,7 @@ FileDialogPanel::FileDialogPanel(QWidget *parent)
optionsLayout->addRow(m_resolveSymLinks);
optionsLayout->addRow(m_readOnly);
optionsLayout->addRow(m_customDirIcons);
+ optionsLayout->addRow(m_noIconProvider);
// Files
QGroupBox *filesGroupBox = new QGroupBox(tr("Files / Filters"));
@@ -177,9 +147,12 @@ FileDialogPanel::FileDialogPanel(QWidget *parent)
int row = 0;
int column = 0;
addButton(tr("Exec modal"), buttonLayout, row, column, this, SLOT(execModal()));
- addButton(tr("Show modal"), buttonLayout, row, column, this, SLOT(showModal()));
- m_deleteModalDialogButton =
- addButton(tr("Delete modal"), buttonLayout, row, column, this, SLOT(deleteModalDialog()));
+ addButton(tr("Show application modal"), buttonLayout, row, column,
+ [this]() { showModal(Qt::ApplicationModal); });
+ addButton(tr("Show window modal"), buttonLayout, row, column,
+ [this]() { showModal(Qt::WindowModal); });
+ m_deleteModalDialogButton = addButton(tr("Delete modal"), buttonLayout, row, column, this,
+ SLOT(deleteModalDialog()));
addButton(tr("Show non-modal"), buttonLayout, row, column, this, SLOT(showNonModal()));
m_deleteNonModalDialogButton =
addButton(tr("Delete non-modal"), buttonLayout, row, column, this, SLOT(deleteNonModalDialog()));
@@ -218,7 +191,7 @@ void FileDialogPanel::execModal()
dialog.exec();
}
-void FileDialogPanel::showModal()
+void FileDialogPanel::showModal(Qt::WindowModality modality)
{
if (m_modalDialog.isNull()) {
static int n = 0;
@@ -230,6 +203,7 @@ void FileDialogPanel::showModal()
.arg(QLatin1String(QT_VERSION_STR)));
enableDeleteModalDialogButton();
}
+ m_modalDialog->setWindowModality(modality);
applySettings(m_modalDialog);
m_modalDialog->show();
}
@@ -445,12 +419,19 @@ void FileDialogPanel::restoreDefaults()
l->restoreDefault(&d);
}
-void FileDialogPanel::applySettings(QFileDialog *d) const
+void FileDialogPanel::applySettings(QFileDialog *d)
{
d->setAcceptMode(comboBoxValue<QFileDialog::AcceptMode>(m_acceptMode));
d->setViewMode(comboBoxValue<QFileDialog::ViewMode>(m_viewMode));
d->setFileMode(comboBoxValue<QFileDialog::FileMode>(m_fileMode));
d->setOptions(options());
+ if (m_noIconProvider->isChecked()) {
+ m_origIconProvider = d->iconProvider();
+ d->setIconProvider(nullptr);
+ } else if (m_origIconProvider) {
+ d->setIconProvider(m_origIconProvider);
+ }
+
d->setDefaultSuffix(m_defaultSuffix->text().trimmed());
const QString directory = m_directory->text().trimmed();
if (!directory.isEmpty())
diff --git a/tests/manual/dialogs/filedialogpanel.h b/tests/manual/dialogs/filedialogpanel.h
index 28dded3891..3acf193121 100644
--- a/tests/manual/dialogs/filedialogpanel.h
+++ b/tests/manual/dialogs/filedialogpanel.h
@@ -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
#ifndef FILEDIALOGPANEL_H
#define FILEDIALOGPANEL_H
@@ -34,6 +9,8 @@
#include <QPointer>
QT_BEGIN_NAMESPACE
+
+class QAbstractFileIconProvider;
class QPushButton;
class QCheckBox;
class QComboBox;
@@ -51,7 +28,7 @@ public:
public slots:
void execModal();
- void showModal();
+ void showModal(Qt::WindowModality modality);
void showNonModal();
void deleteNonModalDialog();
void deleteModalDialog();
@@ -77,7 +54,7 @@ private:
QString filterString() const;
QFileDialog::Options options() const;
QStringList allowedSchemes() const;
- void applySettings(QFileDialog *d) const;
+ void applySettings(QFileDialog *d);
QFormLayout *filesLayout;
QCheckBox *m_showDirsOnly;
@@ -87,6 +64,9 @@ private:
QCheckBox *m_resolveSymLinks;
QCheckBox *m_native;
QCheckBox *m_customDirIcons;
+ QCheckBox *m_noIconProvider = nullptr;
+ QAbstractFileIconProvider *m_origIconProvider = nullptr;
+
QComboBox *m_acceptMode;
QComboBox *m_fileMode;
QComboBox *m_viewMode;
diff --git a/tests/manual/dialogs/fontdialogpanel.cpp b/tests/manual/dialogs/fontdialogpanel.cpp
index 629fa95262..4d599c456d 100644
--- a/tests/manual/dialogs/fontdialogpanel.cpp
+++ b/tests/manual/dialogs/fontdialogpanel.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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 "fontdialogpanel.h"
+#include "utils.h"
#include <QGroupBox>
#include <QCheckBox>
@@ -39,15 +15,6 @@
#include <QTimer>
#include <QDebug>
-static inline QPushButton *addButton(const QString &description, QVBoxLayout *layout,
- QObject *receiver, const char *slotFunc)
-{
- QPushButton *button = new QPushButton(description);
- QObject::connect(button, SIGNAL(clicked()), receiver, slotFunc);
- layout->addWidget(button);
- return button;
-}
-
FontDialogPanel::FontDialogPanel(QWidget *parent)
: QWidget(parent)
, m_fontFamilyBox(new QFontComboBox)
@@ -80,7 +47,9 @@ FontDialogPanel::FontDialogPanel(QWidget *parent)
QGroupBox *buttonsGroupBox = new QGroupBox(tr("Show"));
QVBoxLayout *buttonsLayout = new QVBoxLayout(buttonsGroupBox);
addButton(tr("Exec modal"), buttonsLayout, this, SLOT(execModal()));
- addButton(tr("Show modal"), buttonsLayout, this, SLOT(showModal()));
+ addButton(tr("Show application modal"), buttonsLayout,
+ [this]() { showModal(Qt::ApplicationModal); });
+ addButton(tr("Show window modal"), buttonsLayout, [this]() { showModal(Qt::WindowModal); });
m_deleteModalDialogButton =
addButton(tr("Delete modal"), buttonsLayout, this, SLOT(deleteModalDialog()));
addButton(tr("Show non-modal"), buttonsLayout, this, SLOT(showNonModal()));
@@ -112,7 +81,7 @@ void FontDialogPanel::execModal()
dialog.exec();
}
-void FontDialogPanel::showModal()
+void FontDialogPanel::showModal(Qt::WindowModality modality)
{
if (m_modalDialog.isNull()) {
static int n = 0;
@@ -124,6 +93,7 @@ void FontDialogPanel::showModal()
.arg(QLatin1String(QT_VERSION_STR)));
enableDeleteModalDialogButton();
}
+ m_modalDialog->setWindowModality(modality);
applySettings(m_modalDialog);
m_modalDialog->show();
}
diff --git a/tests/manual/dialogs/fontdialogpanel.h b/tests/manual/dialogs/fontdialogpanel.h
index 2bcd68c74c..db3f2fc3f4 100644
--- a/tests/manual/dialogs/fontdialogpanel.h
+++ b/tests/manual/dialogs/fontdialogpanel.h
@@ -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
#ifndef FONTDIALOGPANEL_H
#define FONTDIALOGPANEL_H
@@ -47,7 +22,7 @@ public:
public slots:
void execModal();
- void showModal();
+ void showModal(Qt::WindowModality modality);
void showNonModal();
void deleteNonModalDialog();
void deleteModalDialog();
diff --git a/tests/manual/dialogs/main.cpp b/tests/manual/dialogs/main.cpp
index 90915b18ea..d8b3f3c567 100644
--- a/tests/manual/dialogs/main.cpp
+++ b/tests/manual/dialogs/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "filedialogpanel.h"
#include "colordialogpanel.h"
diff --git a/tests/manual/dialogs/messageboxpanel.cpp b/tests/manual/dialogs/messageboxpanel.cpp
index 25c230a855..1d03072123 100644
--- a/tests/manual/dialogs/messageboxpanel.cpp
+++ b/tests/manual/dialogs/messageboxpanel.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Thorbjørn Lund Martsum - tmartsum[at]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) 2013 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "messageboxpanel.h"
diff --git a/tests/manual/dialogs/messageboxpanel.h b/tests/manual/dialogs/messageboxpanel.h
index d5ca6057d1..c84657562b 100644
--- a/tests/manual/dialogs/messageboxpanel.h
+++ b/tests/manual/dialogs/messageboxpanel.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 2013 Thorbjørn Lund Martsum - tmartsum[at]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) 2013 2013 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef MESSAGEBOXPANEL_H
#define MESSAGEBOXPANEL_H
diff --git a/tests/manual/dialogs/printdialogpanel.cpp b/tests/manual/dialogs/printdialogpanel.cpp
index d36715e9dd..716faa48c6 100644
--- a/tests/manual/dialogs/printdialogpanel.cpp
+++ b/tests/manual/dialogs/printdialogpanel.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#ifndef QT_NO_PRINTER
diff --git a/tests/manual/dialogs/printdialogpanel.h b/tests/manual/dialogs/printdialogpanel.h
index 0f34d01033..a8d54e8aa2 100644
--- a/tests/manual/dialogs/printdialogpanel.h
+++ b/tests/manual/dialogs/printdialogpanel.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef PRINTDIALOGPANEL_H
#define PRINTDIALOGPANEL_H
diff --git a/tests/manual/dialogs/utils.cpp b/tests/manual/dialogs/utils.cpp
index e584f0d6ff..bfb61cd8df 100644
--- a/tests/manual/dialogs/utils.cpp
+++ b/tests/manual/dialogs/utils.cpp
@@ -1,34 +1,13 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "utils.h"
#include <QCheckBox>
+#include <QGridLayout>
+#include <QPushButton>
#include <QVBoxLayout>
QComboBox *createCombo(QWidget *parent, const FlagData *d, size_t size)
@@ -91,3 +70,38 @@ int OptionsControl::intValue() const
}
return result;
}
+
+QPushButton *addButton(const QString &description, QGridLayout *layout, int &row, int column,
+ QObject *receiver, const char *slotFunc)
+{
+ QPushButton *button = new QPushButton(description);
+ QObject::connect(button, SIGNAL(clicked()), receiver, slotFunc);
+ layout->addWidget(button, row++, column);
+ return button;
+}
+
+QPushButton *addButton(const QString &description, QGridLayout *layout, int &row, int column,
+ std::function<void()> fn)
+{
+ QPushButton *button = new QPushButton(description);
+ QObject::connect(button, &QPushButton::clicked, fn);
+ layout->addWidget(button, row++, column);
+ return button;
+}
+
+QPushButton *addButton(const QString &description, QVBoxLayout *layout, QObject *receiver,
+ const char *slotFunc)
+{
+ QPushButton *button = new QPushButton(description);
+ QObject::connect(button, SIGNAL(clicked()), receiver, slotFunc);
+ layout->addWidget(button);
+ return button;
+}
+
+QPushButton *addButton(const QString &description, QVBoxLayout *layout, std::function<void()> fn)
+{
+ QPushButton *button = new QPushButton(description);
+ QObject::connect(button, &QPushButton::clicked, fn);
+ layout->addWidget(button);
+ return button;
+}
diff --git a/tests/manual/dialogs/utils.h b/tests/manual/dialogs/utils.h
index cac0f1af18..3db08ce44e 100644
--- a/tests/manual/dialogs/utils.h
+++ b/tests/manual/dialogs/utils.h
@@ -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
#ifndef UTILS_H
#define UTILS_H
@@ -35,7 +10,12 @@
#include <QPair>
#include <QList>
+#include <functional>
+
QT_FORWARD_DECLARE_CLASS(QCheckBox)
+QT_FORWARD_DECLARE_CLASS(QGridLayout)
+QT_FORWARD_DECLARE_CLASS(QVBoxLayout)
+QT_FORWARD_DECLARE_CLASS(QPushButton)
// Associate enum/flag value with a description.
struct FlagData
@@ -76,4 +56,15 @@ private:
QList<CheckBoxFlagPair> m_checkBoxes;
};
+QPushButton *addButton(const QString &description, QGridLayout *layout, int &row, int column,
+ QObject *receiver, const char *slotFunc);
+
+QPushButton *addButton(const QString &description, QGridLayout *layout, int &row, int column,
+ std::function<void()> fn);
+
+QPushButton *addButton(const QString &description, QVBoxLayout *layout, QObject *receiver,
+ const char *slotFunc);
+
+QPushButton *addButton(const QString &description, QVBoxLayout *layout, std::function<void()> fn);
+
#endif // UTILS_H
diff --git a/tests/manual/dialogs/wizardpanel.cpp b/tests/manual/dialogs/wizardpanel.cpp
index 4edb10afb8..6fa7d1803a 100644
--- a/tests/manual/dialogs/wizardpanel.cpp
+++ b/tests/manual/dialogs/wizardpanel.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 "wizardpanel.h"
@@ -216,7 +191,7 @@ class WizardPage : public QWizardPage
public:
explicit WizardPage(const QString &title, QWidget *parent = nullptr);
- void initializePage();
+ void initializePage() override;
private:
WizardStyleControl *m_styleControl;
@@ -296,8 +271,14 @@ WizardPanel::WizardPanel(QWidget *parent)
gridLayout->addWidget(m_styleControl, 0, 1);
QGroupBox *buttonGroupBox = new QGroupBox(this);
QVBoxLayout *vLayout = new QVBoxLayout(buttonGroupBox);
- QPushButton *button = new QPushButton(tr("Show modal"), this);
- connect(button, SIGNAL(clicked()), this, SLOT(showModal()));
+ QPushButton *button = new QPushButton(tr("Exec modal"), this);
+ connect(button, SIGNAL(clicked()), this, SLOT(execModal()));
+ vLayout->addWidget(button);
+ button = new QPushButton(tr("Show application modal"), this);
+ connect(button, &QPushButton::clicked, [this]() { showModal(Qt::ApplicationModal); });
+ vLayout->addWidget(button);
+ button = new QPushButton(tr("Show window modal"), this);
+ connect(button, &QPushButton::clicked, [this]() { showModal(Qt::WindowModal); });
vLayout->addWidget(button);
button = new QPushButton(tr("Show non-modal"), this);
connect(button, SIGNAL(clicked()), this, SLOT(showNonModal()));
@@ -310,13 +291,23 @@ WizardPanel::WizardPanel(QWidget *parent)
gridLayout->addWidget(buttonGroupBox, 1, 1);
}
-void WizardPanel::showModal()
+void WizardPanel::execModal()
{
Wizard wizard(this);
applyParameters(&wizard);
wizard.exec();
}
+void WizardPanel::showModal(Qt::WindowModality modality)
+{
+ Wizard *wizard = new Wizard(this);
+ applyParameters(wizard);
+ wizard->setModal(true);
+ wizard->setAttribute(Qt::WA_DeleteOnClose);
+ wizard->setWindowModality(modality);
+ wizard->show();
+}
+
void WizardPanel::showNonModal()
{
Wizard *wizard = new Wizard(this);
diff --git a/tests/manual/dialogs/wizardpanel.h b/tests/manual/dialogs/wizardpanel.h
index 8d9ee79274..42765aeaef 100644
--- a/tests/manual/dialogs/wizardpanel.h
+++ b/tests/manual/dialogs/wizardpanel.h
@@ -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
#ifndef WIZARDPANEL_H
#define WIZARDPANEL_H
@@ -44,7 +19,8 @@ public:
explicit WizardPanel(QWidget *parent = nullptr);
public slots:
- void showModal();
+ void execModal();
+ void showModal(Qt::WindowModality modality);
void showNonModal();
void showEmbedded();
diff --git a/tests/manual/embeddedintoforeignwindow/CMakeLists.txt b/tests/manual/embeddedintoforeignwindow/CMakeLists.txt
index 84ce8b4daa..a80206133b 100644
--- a/tests/manual/embeddedintoforeignwindow/CMakeLists.txt
+++ b/tests/manual/embeddedintoforeignwindow/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from embeddedintoforeignwindow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## embeddedintoforeignwindow Binary:
@@ -12,26 +13,25 @@ qt_internal_add_manual_test(embeddedintoforeignwindow
../diaglib/textdump.cpp ../diaglib/textdump.h
itemwindow.cpp itemwindow.h
main.cpp
+ NO_PCH_SOURCES
+ itemwindow.cpp # undef QT_NO_FOREACH
DEFINES
QT_DIAG_LIB
INCLUDE_DIRECTORIES
../diaglib
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
)
-#### Keys ignored in scope 1:.:.:embeddedintoforeignwindow.pro:<TRUE>:
-# TEMPLATE = "app"
-
## Scopes:
#####################################################################
qt_internal_extend_target(embeddedintoforeignwindow CONDITION WIN32
SOURCES
../diaglib/nativewindowdump_win.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
@@ -45,14 +45,14 @@ qt_internal_extend_target(embeddedintoforeignwindow CONDITION QT_FEATURE_widgets
../diaglib/debugproxystyle.cpp ../diaglib/debugproxystyle.h
../diaglib/logwidget.cpp ../diaglib/logwidget.h
../diaglib/qwidgetdump.cpp ../diaglib/qwidgetdump.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::WidgetsPrivate
)
qt_internal_extend_target(embeddedintoforeignwindow CONDITION QT_FEATURE_opengl
SOURCES
../diaglib/glinfo.cpp ../diaglib/glinfo.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::OpenGL
Qt::OpenGLWidgets
)
diff --git a/tests/manual/embeddedintoforeignwindow/itemwindow.cpp b/tests/manual/embeddedintoforeignwindow/itemwindow.cpp
index 15edc88325..422e699afc 100644
--- a/tests/manual/embeddedintoforeignwindow/itemwindow.cpp
+++ b/tests/manual/embeddedintoforeignwindow/itemwindow.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "itemwindow.h"
diff --git a/tests/manual/embeddedintoforeignwindow/itemwindow.h b/tests/manual/embeddedintoforeignwindow/itemwindow.h
index 096051061a..a8db113761 100644
--- a/tests/manual/embeddedintoforeignwindow/itemwindow.h
+++ b/tests/manual/embeddedintoforeignwindow/itemwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef ITEMWINDOW_H
#define ITEMWINDOW_H
@@ -90,7 +65,8 @@ private:
#define PROPAGATE_EVENT(windowHandler, eventClass, itemHandler) \
void windowHandler(eventClass *e) override \
{ \
- foreach (Item *i, m_items) \
+ const auto copy = m_items; /* needed? */ \
+ for (Item *i : copy) \
i->itemHandler(e); \
}
diff --git a/tests/manual/embeddedintoforeignwindow/main.cpp b/tests/manual/embeddedintoforeignwindow/main.cpp
index c63eeae023..cadd9a3bec 100644
--- a/tests/manual/embeddedintoforeignwindow/main.cpp
+++ b/tests/manual/embeddedintoforeignwindow/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "itemwindow.h"
diff --git a/tests/manual/embeddedwindows/CMakeLists.txt b/tests/manual/embeddedwindows/CMakeLists.txt
new file mode 100644
index 0000000000..814398631e
--- /dev/null
+++ b/tests/manual/embeddedwindows/CMakeLists.txt
@@ -0,0 +1,19 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(embeddedwindows
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Gui
+)
+
+if(QT_FEATURE_xcb)
+ target_link_libraries(embeddedwindows PRIVATE XCB::XCB)
+endif()
+
+if(APPLE)
+ enable_language(OBJCXX)
+ set_source_files_properties(main.cpp PROPERTIES LANGUAGE OBJCXX)
+ set_property(TARGET embeddedwindows PROPERTY PROPERTY MACOSX_BUNDLE TRUE)
+endif()
diff --git a/tests/manual/embeddedwindows/main.cpp b/tests/manual/embeddedwindows/main.cpp
new file mode 100644
index 0000000000..e34c7206ea
--- /dev/null
+++ b/tests/manual/embeddedwindows/main.cpp
@@ -0,0 +1,110 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtGui>
+
+#if QT_CONFIG(metal) || defined(Q_OS_WIN) || QT_CONFIG(xcb) || defined(ANDROID)
+#include "../../shared/nativewindow.h"
+#define HAVE_NATIVE_WINDOW
+#endif
+
+#include <QDebug>
+
+class TestWindow : public QRasterWindow
+{
+public:
+ using QRasterWindow::QRasterWindow;
+ TestWindow(const QBrush &brush) : m_brush(brush) {}
+
+protected:
+ void mousePressEvent(QMouseEvent *) override
+ {
+ m_pressed = true;
+ update();
+ }
+
+ void mouseReleaseEvent(QMouseEvent *) override
+ {
+ m_pressed = false;
+ update();
+ }
+
+ void paintEvent(QPaintEvent *) override
+ {
+ QPainter painter(this);
+ painter.setCompositionMode(QPainter::CompositionMode_Source);
+ if (!mask().isNull())
+ painter.setClipRegion(mask());
+ painter.fillRect(QRect(0, 0, width(), height()),
+ m_pressed ? QGradient(QGradient::JuicyPeach) : m_brush);
+ }
+
+private:
+ QBrush m_brush = QGradient(QGradient::DustyGrass);
+ bool m_pressed = false;
+};
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ TestWindow window{QGradient(QGradient::WinterNeva)};
+ window.resize(500, 500);
+
+ TestWindow *opaqueChildWindow = new TestWindow;
+ opaqueChildWindow->setParent(&window);
+ opaqueChildWindow->setGeometry(50, 50, 100, 100);
+ opaqueChildWindow->showNormal();
+
+ TestWindow *maskedChildWindow = new TestWindow;
+ maskedChildWindow->setParent(&window);
+ maskedChildWindow->setGeometry(200, 50, 100, 100);
+ maskedChildWindow->setMask(QRegion(0, 0, 100, 100, QRegion::Ellipse));
+ maskedChildWindow->showNormal();
+
+ static const QColor transparentGreen = QColor(0, 255, 0, 20);
+ TestWindow *transparentChildWindow = new TestWindow(transparentGreen);
+ // The default surface format of a platform may not include
+ // an alpha, so set it explicitly.
+ QSurfaceFormat format = transparentChildWindow->format();
+ format.setAlphaBufferSize(8);
+ transparentChildWindow->setFormat(format);
+ // FIXME: Windows requires this, even for child windows
+ transparentChildWindow->setFlag(Qt::FramelessWindowHint);
+ transparentChildWindow->setParent(&window);
+ transparentChildWindow->setGeometry(350, 50, 100, 100);
+ transparentChildWindow->showNormal();
+
+#if defined(HAVE_NATIVE_WINDOW)
+ NativeWindow nativeWindow;
+ if (QWindow *foreignWindow = QWindow::fromWinId(nativeWindow)) {
+ foreignWindow->setParent(&window);
+ foreignWindow->setGeometry(50, 200, 100, 100);
+ foreignWindow->showNormal();
+ }
+
+ NativeWindow maskedNativeWindow;
+ if (QWindow *foreignWindow = QWindow::fromWinId(maskedNativeWindow)) {
+ foreignWindow->setParent(&window);
+ foreignWindow->setGeometry(200, 200, 100, 100);
+ foreignWindow->setMask(QRegion(0, 0, 100, 100, QRegion::Ellipse));
+ foreignWindow->showNormal();
+ }
+
+ NativeWindow nativeParentWindow;
+ if (QWindow *foreignWindow = QWindow::fromWinId(nativeParentWindow)) {
+ foreignWindow->setParent(&window);
+ foreignWindow->setGeometry(50, 350, 100, 100);
+ foreignWindow->showNormal();
+
+ TestWindow *maskedChildWindowOfNativeWindow = new TestWindow;
+ maskedChildWindowOfNativeWindow->setParent(foreignWindow);
+ maskedChildWindowOfNativeWindow->setGeometry(25, 25, 50, 50);
+ maskedChildWindowOfNativeWindow->showNormal();
+ }
+#endif
+
+ window.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/blurpicker/CMakeLists.txt b/tests/manual/examples/blurpicker/CMakeLists.txt
new file mode 100644
index 0000000000..b5579fc9ed
--- /dev/null
+++ b/tests/manual/examples/blurpicker/CMakeLists.txt
@@ -0,0 +1,58 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(blurpicker LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/effects/blurpicker")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(blurpicker
+ blureffect.cpp blureffect.h
+ blurpicker.cpp blurpicker.h
+ main.cpp
+)
+
+set_target_properties(blurpicker PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(blurpicker PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(blurpicker_resource_files
+ "images/accessories-calculator.png"
+ "images/accessories-text-editor.png"
+ "images/background.jpg"
+ "images/help-browser.png"
+ "images/internet-group-chat.png"
+ "images/internet-mail.png"
+ "images/internet-web-browser.png"
+ "images/office-calendar.png"
+ "images/system-users.png"
+)
+
+qt_add_resources(blurpicker "blurpicker"
+ PREFIX
+ "/"
+ FILES
+ ${blurpicker_resource_files}
+)
+
+install(TARGETS blurpicker
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/blurpicker/blureffect.cpp b/tests/manual/examples/blurpicker/blureffect.cpp
new file mode 100644
index 0000000000..2e2b8c8d6b
--- /dev/null
+++ b/tests/manual/examples/blurpicker/blureffect.cpp
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "blureffect.h"
+
+#include <QDebug>
+
+BlurEffect::BlurEffect(QGraphicsItem *item)
+ : QGraphicsBlurEffect()
+ , m_baseLine(200), item(item)
+{
+}
+
+void BlurEffect::adjustForItem()
+{
+ qreal y = m_baseLine - item->pos().y();
+ qreal radius = qBound(qreal(0.0), y / 32, qreal(16.0));
+ setBlurRadius(radius);
+}
+
+QRectF BlurEffect::boundingRect() const
+{
+ const_cast<BlurEffect *>(this)->adjustForItem();
+ return QGraphicsBlurEffect::boundingRect();
+}
+
+void BlurEffect::draw(QPainter *painter)
+{
+ adjustForItem();
+ QGraphicsBlurEffect::draw(painter);
+}
diff --git a/tests/manual/examples/blurpicker/blureffect.h b/tests/manual/examples/blurpicker/blureffect.h
new file mode 100644
index 0000000000..a39261fc5a
--- /dev/null
+++ b/tests/manual/examples/blurpicker/blureffect.h
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BLUREFFECT_H
+#define BLUREFFECT_H
+
+#include <QGraphicsEffect>
+#include <QGraphicsItem>
+
+class BlurEffect: public QGraphicsBlurEffect
+{
+public:
+ BlurEffect(QGraphicsItem *item);
+
+ void setBaseLine(qreal y) { m_baseLine = y; }
+
+ QRectF boundingRect() const;
+
+ void draw(QPainter *painter) override;
+
+private:
+ void adjustForItem();
+
+private:
+ qreal m_baseLine;
+ QGraphicsItem *item;
+};
+
+#endif // BLUREFFECT_H
diff --git a/tests/manual/examples/blurpicker/blurpicker.cpp b/tests/manual/examples/blurpicker/blurpicker.cpp
new file mode 100644
index 0000000000..00269c8fe3
--- /dev/null
+++ b/tests/manual/examples/blurpicker/blurpicker.cpp
@@ -0,0 +1,122 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "blurpicker.h"
+
+#include <QtWidgets>
+#include <QtCore/qmath.h>
+#include <qmath.h>
+#include "blureffect.h"
+
+BlurPicker::BlurPicker(QWidget *parent): QGraphicsView(parent), m_index(0.0), m_animation(this, "index")
+{
+ setBackgroundBrush(QPixmap(":/images/background.jpg"));
+ setScene(new QGraphicsScene(this));
+
+ setupScene();
+ setIndex(0);
+
+ m_animation.setDuration(400);
+ m_animation.setEasingCurve(QEasingCurve::InOutSine);
+
+ setRenderHint(QPainter::Antialiasing, true);
+ setFrameStyle(QFrame::NoFrame);
+}
+
+qreal BlurPicker::index() const
+{
+ return m_index;
+}
+
+void BlurPicker::setIndex(qreal index)
+{
+ m_index = index;
+
+ qreal baseline = 0;
+ const qreal iconAngle = 2 * M_PI / m_icons.count();
+ for (int i = 0; i < m_icons.count(); ++i) {
+ QGraphicsItem *icon = m_icons[i];
+ qreal a = (i + m_index) * iconAngle;
+ qreal xs = 170 * qSin(a);
+ qreal ys = 100 * qCos(a);
+ QPointF pos(xs, ys);
+ pos = QTransform().rotate(-20).map(pos);
+ pos -= QPointF(40, 40);
+ icon->setPos(pos);
+ baseline = qMax(baseline, ys);
+ static_cast<BlurEffect *>(icon->graphicsEffect())->setBaseLine(baseline);
+ }
+
+ scene()->update();
+}
+
+void BlurPicker::setupScene()
+{
+ scene()->setSceneRect(-200, -120, 400, 240);
+
+ QStringList names;
+ names << ":/images/accessories-calculator.png";
+ names << ":/images/accessories-text-editor.png";
+ names << ":/images/help-browser.png";
+ names << ":/images/internet-group-chat.png";
+ names << ":/images/internet-mail.png";
+ names << ":/images/internet-web-browser.png";
+ names << ":/images/office-calendar.png";
+ names << ":/images/system-users.png";
+
+ for (int i = 0; i < names.count(); i++) {
+ QPixmap pixmap(names[i]);
+ QGraphicsPixmapItem *icon = scene()->addPixmap(pixmap);
+ icon->setZValue(1);
+ icon->setGraphicsEffect(new BlurEffect(icon));
+ m_icons << icon;
+ }
+
+ QGraphicsPixmapItem *bg = scene()->addPixmap(QPixmap(":/images/background.jpg"));
+ bg->setZValue(0);
+ bg->setPos(-200, -150);
+}
+
+void BlurPicker::keyPressEvent(QKeyEvent *event)
+{
+ int delta = 0;
+ switch (event->key())
+ {
+ case Qt::Key_Left:
+ delta = -1;
+ break;
+ case Qt::Key_Right:
+ delta = 1;
+ break;
+ default:
+ break;
+ }
+ if (m_animation.state() == QAbstractAnimation::Stopped && delta) {
+ m_animation.setEndValue(m_index + delta);
+ m_animation.start();
+ event->accept();
+ }
+}
+
+void BlurPicker::resizeEvent(QResizeEvent * /* event */)
+{
+}
+
+void BlurPicker::mousePressEvent(QMouseEvent *event)
+{
+ int delta = 0;
+ if (event->position().x() > (width() / 2))
+ {
+ delta = 1;
+ }
+ else
+ {
+ delta = -1;
+ }
+
+ if (m_animation.state() == QAbstractAnimation::Stopped && delta) {
+ m_animation.setEndValue(m_index + delta);
+ m_animation.start();
+ event->accept();
+ }
+}
diff --git a/tests/manual/examples/blurpicker/blurpicker.h b/tests/manual/examples/blurpicker/blurpicker.h
new file mode 100644
index 0000000000..6e4ac84e56
--- /dev/null
+++ b/tests/manual/examples/blurpicker/blurpicker.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BLURPICKER_H
+#define BLURPICKER_H
+
+#include <QGraphicsEffect>
+#include <QGraphicsView>
+#include <QPropertyAnimation>
+
+#include "blureffect.h"
+
+class BlurPicker: public QGraphicsView
+{
+ Q_OBJECT
+ Q_PROPERTY(qreal index READ index WRITE setIndex)
+
+public:
+ BlurPicker(QWidget *parent = nullptr);
+
+ qreal index() const;
+ void setIndex(qreal);
+
+protected:
+ void keyPressEvent(QKeyEvent *event) override;
+ void resizeEvent(QResizeEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+
+private:
+ void setupScene();
+
+private:
+ qreal m_index;
+ QList<QGraphicsItem*> m_icons;
+ QPropertyAnimation m_animation;
+};
+
+#endif // BLURPICKER_H
diff --git a/tests/manual/examples/blurpicker/blurpicker.pro b/tests/manual/examples/blurpicker/blurpicker.pro
new file mode 100644
index 0000000000..c570ac3b98
--- /dev/null
+++ b/tests/manual/examples/blurpicker/blurpicker.pro
@@ -0,0 +1,9 @@
+QT += widgets
+
+SOURCES += main.cpp blurpicker.cpp blureffect.cpp
+HEADERS += blurpicker.h blureffect.h
+RESOURCES += blurpicker.qrc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/effects/blurpicker
+INSTALLS += target
diff --git a/tests/manual/examples/blurpicker/blurpicker.qrc b/tests/manual/examples/blurpicker/blurpicker.qrc
new file mode 100644
index 0000000000..e88eaca966
--- /dev/null
+++ b/tests/manual/examples/blurpicker/blurpicker.qrc
@@ -0,0 +1,14 @@
+<RCC>
+ <qresource prefix="/" >
+ <file>images/background.jpg</file>
+ <file>images/accessories-calculator.png</file>
+ <file>images/accessories-text-editor.png</file>
+ <file>images/help-browser.png</file>
+ <file>images/internet-group-chat.png</file>
+ <file>images/internet-mail.png</file>
+ <file>images/internet-web-browser.png</file>
+ <file>images/office-calendar.png</file>
+ <file>images/system-users.png</file>
+ </qresource>
+</RCC>
+
diff --git a/tests/manual/examples/blurpicker/images/README.txt b/tests/manual/examples/blurpicker/images/README.txt
new file mode 100644
index 0000000000..0927e177d2
--- /dev/null
+++ b/tests/manual/examples/blurpicker/images/README.txt
@@ -0,0 +1,5 @@
+The background is taken from a public domain photo at:
+http://www.photos8.com/view/computer_board2-800x600.html
+
+All other icons are from the Tango Desktop project:
+http://tango.freedesktop.org/Tango_Desktop_Project
diff --git a/tests/manual/examples/blurpicker/images/accessories-calculator.png b/tests/manual/examples/blurpicker/images/accessories-calculator.png
new file mode 100644
index 0000000000..4e7661f65c
--- /dev/null
+++ b/tests/manual/examples/blurpicker/images/accessories-calculator.png
Binary files differ
diff --git a/tests/manual/examples/blurpicker/images/accessories-text-editor.png b/tests/manual/examples/blurpicker/images/accessories-text-editor.png
new file mode 100644
index 0000000000..33bef0bc17
--- /dev/null
+++ b/tests/manual/examples/blurpicker/images/accessories-text-editor.png
Binary files differ
diff --git a/tests/manual/examples/blurpicker/images/background.jpg b/tests/manual/examples/blurpicker/images/background.jpg
new file mode 100644
index 0000000000..e75b38899d
--- /dev/null
+++ b/tests/manual/examples/blurpicker/images/background.jpg
Binary files differ
diff --git a/tests/manual/examples/blurpicker/images/help-browser.png b/tests/manual/examples/blurpicker/images/help-browser.png
new file mode 100644
index 0000000000..8ef4fae91b
--- /dev/null
+++ b/tests/manual/examples/blurpicker/images/help-browser.png
Binary files differ
diff --git a/tests/manual/examples/blurpicker/images/internet-group-chat.png b/tests/manual/examples/blurpicker/images/internet-group-chat.png
new file mode 100644
index 0000000000..dd92d93947
--- /dev/null
+++ b/tests/manual/examples/blurpicker/images/internet-group-chat.png
Binary files differ
diff --git a/tests/manual/examples/blurpicker/images/internet-mail.png b/tests/manual/examples/blurpicker/images/internet-mail.png
new file mode 100644
index 0000000000..7e6b93be83
--- /dev/null
+++ b/tests/manual/examples/blurpicker/images/internet-mail.png
Binary files differ
diff --git a/tests/manual/examples/blurpicker/images/internet-web-browser.png b/tests/manual/examples/blurpicker/images/internet-web-browser.png
new file mode 100644
index 0000000000..a979a92b4f
--- /dev/null
+++ b/tests/manual/examples/blurpicker/images/internet-web-browser.png
Binary files differ
diff --git a/tests/manual/examples/blurpicker/images/office-calendar.png b/tests/manual/examples/blurpicker/images/office-calendar.png
new file mode 100644
index 0000000000..e09590682b
--- /dev/null
+++ b/tests/manual/examples/blurpicker/images/office-calendar.png
Binary files differ
diff --git a/tests/manual/examples/blurpicker/images/system-users.png b/tests/manual/examples/blurpicker/images/system-users.png
new file mode 100644
index 0000000000..a7f630a5bd
--- /dev/null
+++ b/tests/manual/examples/blurpicker/images/system-users.png
Binary files differ
diff --git a/tests/manual/examples/blurpicker/main.cpp b/tests/manual/examples/blurpicker/main.cpp
new file mode 100644
index 0000000000..4d5bf158c9
--- /dev/null
+++ b/tests/manual/examples/blurpicker/main.cpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "blurpicker.h"
+#include <QApplication>
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ BlurPicker blurPicker;
+ blurPicker.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Application Picker"));
+
+ blurPicker.setFixedSize(400, 300);
+ blurPicker.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/corelib/permissions/CMakeLists.txt b/tests/manual/examples/corelib/permissions/CMakeLists.txt
new file mode 100644
index 0000000000..699c90647c
--- /dev/null
+++ b/tests/manual/examples/corelib/permissions/CMakeLists.txt
@@ -0,0 +1,47 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(permissions LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/corelib/permissions")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(permissions
+ MANUAL_FINALIZATION
+ main.cpp
+ android/AndroidManifest.xml
+)
+
+set_target_properties(permissions PROPERTIES
+ MACOSX_BUNDLE TRUE
+ MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist"
+ MACOSX_BUNDLE_GUI_IDENTIFIER "io.qt.examples.permissions"
+ QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android"
+)
+
+target_link_libraries(permissions PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS permissions
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
+
+if(APPLE AND NOT CMAKE_GENERATOR STREQUAL "Xcode")
+ add_custom_command(TARGET permissions
+ POST_BUILD COMMAND codesign -s - permissions.app)
+endif()
+
+qt_finalize_executable(permissions)
diff --git a/tests/manual/examples/corelib/permissions/Info.plist b/tests/manual/examples/corelib/permissions/Info.plist
new file mode 100644
index 0000000000..57625d03dc
--- /dev/null
+++ b/tests/manual/examples/corelib/permissions/Info.plist
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+
+ <key>CFBundleName</key>
+ <string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
+ <key>CFBundleExecutable</key>
+ <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
+
+ <key>CFBundleVersion</key>
+ <string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
+ <key>CFBundleShortVersionString</key>
+ <string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
+
+ <key>LSMinimumSystemVersion</key>
+ <string>${CMAKE_OSX_DEPLOYMENT_TARGET}</string>
+
+ <key>NSHumanReadableCopyright</key>
+ <string>${MACOSX_BUNDLE_COPYRIGHT}</string>
+
+ <key>CFBundleIconFile</key>
+ <string>${MACOSX_BUNDLE_ICON_FILE}</string>
+
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+
+ <key>NSSupportsAutomaticGraphicsSwitching</key>
+ <true/>
+
+ <key>NSBluetoothAlwaysUsageDescription</key>
+ <string>Testing BluetoothAlways</string>
+ <key>NSCalendarsUsageDescription</key>
+ <string>Testing Calendars</string>
+ <key>NSCameraUsageDescription</key>
+ <string>Testing Camera</string>
+ <key>NSContactsUsageDescription</key>
+ <string>Testing Contacts</string>
+ <key>NSHealthShareUsageDescription</key>
+ <string>Testing HealthShare</string>
+ <key>NSHealthUpdateUsageDescription</key>
+ <string>Testing HealthUpdate</string>
+ <key>NSLocationUsageDescription</key>
+ <string>Testing Location on macOS</string>
+ <key>NSLocationWhenInUseUsageDescription</key>
+ <string>Testing Location when in use on iOS</string>
+ <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
+ <string>Testing Location always and when in use on iOS</string>
+ <key>NSMicrophoneUsageDescription</key>
+ <string>Testing Microphone</string>
+
+</dict>
+</plist>
diff --git a/tests/manual/examples/corelib/permissions/android/AndroidManifest.xml b/tests/manual/examples/corelib/permissions/android/AndroidManifest.xml
new file mode 100644
index 0000000000..ec25a929ae
--- /dev/null
+++ b/tests/manual/examples/corelib/permissions/android/AndroidManifest.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="org.qtproject.example"
+ android:installLocation="auto"
+ android:versionCode="-- %%INSERT_VERSION_CODE%% --"
+ android:versionName="-- %%INSERT_VERSION_NAME%% --">
+ <uses-permission android:name="android.permission.CAMERA" />
+ <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+ <uses-permission android:name="android.permission.RECORD_AUDIO" />
+ <uses-permission android:name="android.permission.BLUETOOTH"
+ android:maxSdkVersion="30" />
+ <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
+ <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
+ <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
+ <uses-permission android:name="android.permission.READ_CONTACTS" />
+ <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+ <uses-permission android:name="android.permission.READ_CALENDAR" />
+ <uses-permission android:name="android.permission.WRITE_CALENDAR" />
+ <!-- %%INSERT_PERMISSIONS -->
+ <!-- %%INSERT_FEATURES -->
+ <supports-screens
+ android:anyDensity="true"
+ android:largeScreens="true"
+ android:normalScreens="true"
+ android:smallScreens="true" />
+ <application
+ android:name="org.qtproject.qt.android.bindings.QtApplication"
+ android:hardwareAccelerated="true"
+ android:label="-- %%INSERT_APP_NAME%% --"
+ android:requestLegacyExternalStorage="true"
+ android:allowBackup="true"
+ android:fullBackupOnly="false">
+ <activity
+ android:name="org.qtproject.qt.android.bindings.QtActivity"
+ android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density"
+ android:label="-- %%INSERT_APP_NAME%% --"
+ android:launchMode="singleTop"
+ android:screenOrientation="unspecified"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+
+ <meta-data
+ android:name="android.app.lib_name"
+ android:value="-- %%INSERT_APP_LIB_NAME%% --" />
+ </activity>
+ </application>
+</manifest>
diff --git a/tests/manual/examples/corelib/permissions/main.cpp b/tests/manual/examples/corelib/permissions/main.cpp
new file mode 100644
index 0000000000..913aed2fec
--- /dev/null
+++ b/tests/manual/examples/corelib/permissions/main.cpp
@@ -0,0 +1,87 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtCore/qmetaobject.h>
+#include <QtWidgets/qapplication.h>
+#include <QtWidgets/qwidget.h>
+#include <QtWidgets/qpushbutton.h>
+#include <QtWidgets/qlayout.h>
+#include <QtWidgets/qmessagebox.h>
+
+#if !QT_CONFIG(permissions)
+#error "This example requires the permissions feature, which is not enabled on this platform"
+#endif
+
+#include <QtCore/qpermissions.h>
+
+class PermissionWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit PermissionWidget(QWidget *parent = nullptr) : QWidget(parent)
+ {
+ QVBoxLayout *layout = new QVBoxLayout(this);
+
+ static const QPermission permissions[] = {
+ QCameraPermission{},
+ QMicrophonePermission{},
+ QBluetoothPermission{},
+ QContactsPermission{},
+ QCalendarPermission{},
+ QLocationPermission{}
+ };
+
+ for (auto permission : permissions) {
+ auto permissionName = QString::fromLatin1(permission.type().name());
+ QPushButton *button = new QPushButton(permissionName.sliced(1, permissionName.length() - 11));
+ connect(button, &QPushButton::clicked, this, &PermissionWidget::buttonClicked);
+ button->setProperty("permission", QVariant::fromValue(permission));
+ layout->addWidget(button);
+ }
+
+ QPalette pal = palette();
+ pal.setBrush(QPalette::Window, QGradient(QGradient::HappyAcid));
+ setPalette(pal);
+ }
+
+private:
+ void buttonClicked()
+ {
+ auto *button = static_cast<QPushButton*>(sender());
+
+ auto permission = button->property("permission").value<QPermission>();
+ Q_ASSERT(permission.type().isValid());
+
+ switch (qApp->checkPermission(permission)) {
+ case Qt::PermissionStatus::Undetermined:
+ qApp->requestPermission(permission, this,
+ [button](const QPermission &permission) {
+ Q_UNUSED(permission);
+ emit button->clicked(); // Try again
+ }
+ );
+ return;
+ case Qt::PermissionStatus::Denied:
+ QMessageBox::warning(this, button->text(),
+ tr("Permission is needed to use %1. Please grant permission "\
+ "to this application in the system settings.").arg(button->text()));
+ return;
+ case Qt::PermissionStatus::Granted:
+ break; // Proceed
+ }
+
+ // All good, can use the feature
+ QMessageBox::information(this, button->text(),
+ tr("Accessing %1").arg(button->text()));
+ }
+};
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+ PermissionWidget widget;
+ widget.show();
+ return app.exec();
+}
+
+#include "main.moc"
diff --git a/tests/manual/examples/opengl/computegles31/CMakeLists.txt b/tests/manual/examples/opengl/computegles31/CMakeLists.txt
new file mode 100644
index 0000000000..32426152aa
--- /dev/null
+++ b/tests/manual/examples/opengl/computegles31/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(computegles31 LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/opengl/computegles31")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL)
+
+qt_standard_project_setup()
+
+qt_add_executable(computegles31
+ glwindow.cpp glwindow.h
+ main.cpp
+)
+
+set_target_properties(computegles31 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(computegles31 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::OpenGL
+)
+
+# Resources:
+set(computegles31_resource_files
+ "Qt-logo-medium.png"
+)
+
+qt_add_resources(computegles31 "computegles31"
+ PREFIX
+ "/"
+ FILES
+ ${computegles31_resource_files}
+)
+
+install(TARGETS computegles31
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/opengl/computegles31/Qt-logo-medium.png b/tests/manual/examples/opengl/computegles31/Qt-logo-medium.png
new file mode 100644
index 0000000000..a1ca1f1830
--- /dev/null
+++ b/tests/manual/examples/opengl/computegles31/Qt-logo-medium.png
Binary files differ
diff --git a/tests/manual/examples/opengl/computegles31/computegles31.pro b/tests/manual/examples/opengl/computegles31/computegles31.pro
new file mode 100644
index 0000000000..8d9b00ba83
--- /dev/null
+++ b/tests/manual/examples/opengl/computegles31/computegles31.pro
@@ -0,0 +1,11 @@
+QT += opengl
+
+HEADERS = $$PWD/glwindow.h
+
+SOURCES = $$PWD/glwindow.cpp \
+ $$PWD/main.cpp
+
+RESOURCES += computegles31.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/opengl/computegles31
+INSTALLS += target
diff --git a/tests/manual/examples/opengl/computegles31/computegles31.qrc b/tests/manual/examples/opengl/computegles31/computegles31.qrc
new file mode 100644
index 0000000000..b99eb0a82e
--- /dev/null
+++ b/tests/manual/examples/opengl/computegles31/computegles31.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Qt-logo-medium.png</file>
+ </qresource>
+</RCC>
diff --git a/tests/manual/examples/opengl/computegles31/glwindow.cpp b/tests/manual/examples/opengl/computegles31/glwindow.cpp
new file mode 100644
index 0000000000..98533e714e
--- /dev/null
+++ b/tests/manual/examples/opengl/computegles31/glwindow.cpp
@@ -0,0 +1,372 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "glwindow.h"
+#include <QImage>
+#include <QOpenGLShaderProgram>
+#include <QOpenGLContext>
+#include <QOpenGLFunctions>
+#include <QOpenGLExtraFunctions>
+#include <QOpenGLVertexArrayObject>
+#include <QtGui/qopengl.h>
+#include <QDebug>
+#include <QTimer>
+#include <math.h>
+
+#ifndef GL_READ_WRITE
+#define GL_READ_WRITE 0x88BA
+#endif
+
+#ifndef GL_RGBA8
+#define GL_RGBA8 0x8058
+#endif
+
+#ifndef GL_SHADER_IMAGE_ACCESS_BARRIER_BIT
+#define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020
+#endif
+
+GLWindow::GLWindow()
+{
+ const float animationStart = 0.0;
+ const float animationEnd = 10.0;
+ const float animationLength = 1000;
+
+ m_animationGroup = new QSequentialAnimationGroup(this);
+ m_animationGroup->setLoopCount(-1);
+
+ m_animationForward = new QPropertyAnimation(this, QByteArrayLiteral("blurRadius"));
+ m_animationForward->setStartValue(animationStart);
+ m_animationForward->setEndValue(animationEnd);
+ m_animationForward->setDuration(animationLength);
+ m_animationGroup->addAnimation(m_animationForward);
+
+ m_animationBackward = new QPropertyAnimation(this, QByteArrayLiteral("blurRadius"));
+ m_animationBackward->setStartValue(animationEnd);
+ m_animationBackward->setEndValue(animationStart);
+ m_animationBackward->setDuration(animationLength);
+ m_animationGroup->addAnimation(m_animationBackward);
+
+ m_animationGroup->start();
+}
+
+GLWindow::~GLWindow()
+{
+ makeCurrent();
+ delete m_texImageInput;
+ delete m_texImageProcessed;
+ delete m_texImageTmp;
+ delete m_shaderDisplay;
+ delete m_shaderComputeH;
+ delete m_shaderComputeV;
+ delete m_animationGroup;
+ delete m_animationForward;
+ delete m_animationBackward;
+ delete m_vao;
+}
+
+void GLWindow::setBlurRadius(float blurRadius)
+{
+ int radius = int(blurRadius);
+ if (radius != m_blurRadius) {
+ m_blurRadius = radius;
+ update();
+ }
+}
+
+void GLWindow::setAnimating(bool animate)
+{
+ m_animate = animate;
+ if (animate)
+ m_animationGroup->start();
+ else
+ m_animationGroup->stop();
+}
+
+void GLWindow::keyPressEvent(QKeyEvent *e)
+{
+ if (e->key() == Qt::Key_Space) { // pause
+ setAnimating(!m_animate);
+ }
+ update();
+}
+
+
+
+
+static const char *vsDisplaySource =
+ "const vec4 vertices[4] = vec4[4] (\n"
+ " vec4( -1.0, 1.0, 0.0, 1.0),\n"
+ " vec4( -1.0, -1.0, 0.0, 1.0),\n"
+ " vec4( 1.0, 1.0, 0.0, 1.0),\n"
+ " vec4( 1.0, -1.0, 0.0, 1.0)\n"
+ ");\n"
+ "const vec2 texCoords[4] = vec2[4] (\n"
+ " vec2( 0.0, 1.0),\n"
+ " vec2( 0.0, 0.0),\n"
+ " vec2( 1.0, 1.0),\n"
+ " vec2( 1.0, 0.0)\n"
+ ");\n"
+ "out vec2 texCoord;\n"
+ "uniform mat4 matProjection;\n"
+ "uniform vec2 imageRatio;\n"
+ "void main() {\n"
+ " gl_Position = matProjection * ( vertices[gl_VertexID] * vec4(imageRatio,0,1) );\n"
+ " texCoord = texCoords[gl_VertexID];\n"
+ "}\n";
+
+static const char *fsDisplaySource =
+ "in lowp vec2 texCoord; \n"
+ "uniform sampler2D samImage; \n"
+ "layout(location = 0) out lowp vec4 color;\n"
+ "void main() {\n"
+ " lowp vec4 texColor = texture(samImage,texCoord);\n"
+ " color = vec4(texColor.rgb, 1.0);\n"
+ "}\n";
+
+static const char *csComputeSourceV =
+ "#define COMPUTEPATCHSIZE 10 // Setting this to 10 to comply with MAX_COMPUTE_WORK_GROUP_INVOCATIONS for both OpenGL and OpenGLES - see QTBUG-79374 \n"
+ "#define IMGFMT rgba8 \n"
+ "layout (local_size_x = COMPUTEPATCHSIZE, local_size_y = COMPUTEPATCHSIZE) in;\n"
+ "layout(binding=0, IMGFMT) uniform readonly highp image2D inputImage; // Use a sampler to improve performance \n"
+ "layout(binding=1, IMGFMT) uniform writeonly highp image2D resultImage;\n"
+ "uniform int radius;\n"
+ "const float cutoff = 2.2;\n"
+
+ "float expFactor() { // a function, otherwise MESA produces error: initializer of global variable `expFactor' must be a constant expression\n"
+ " float sigma = clamp(float(radius) / cutoff,0.02,100.0);\n"
+ " return 1.0 / (2.0 * sigma * sigma);\n"
+ "}\n"
+
+ "float gaussian(float distance, float expfactor) {\n"
+ " return exp( -(distance * distance) * expfactor);\n"
+ "}\n"
+
+ "void main() {\n"
+ " ivec2 imgSize = imageSize(resultImage);\n"
+ " int x = int(gl_GlobalInvocationID.x);\n"
+ " int y = int(gl_GlobalInvocationID.y);\n"
+ " if ( (x >= imgSize.x) || (y >= imgSize.y) ) return;\n"
+ " vec4 sumPixels = vec4(0.0);\n"
+ " float sumWeights = 0.0;\n"
+ " int left = clamp(x - radius, 0, imgSize.x - 1);\n"
+ " int right = clamp(x + radius, 0, imgSize.x - 1);\n"
+ " int top = clamp(y - radius, 0, imgSize.y - 1);\n"
+ " int bottom = clamp(y + radius, 0, imgSize.y - 1);\n"
+ " float expfactor = expFactor();\n"
+ " for (int iY = top; iY <= bottom; iY++) {\n"
+ " float dy = float(abs(iY - y));\n"
+ " vec4 imgValue = imageLoad(inputImage, ivec2(x,iY));\n"
+ " float weight = gaussian(dy, expfactor);\n"
+ " sumWeights += weight;\n"
+ " sumPixels += (imgValue * weight);\n"
+ " }\n"
+ " sumPixels /= sumWeights;\n"
+ " imageStore(resultImage, ivec2(x,y), sumPixels);\n"
+ "}\n";
+
+static const char *csComputeSourceH =
+ "#define COMPUTEPATCHSIZE 10 \n"
+ "#define IMGFMT rgba8 \n"
+ "layout (local_size_x = COMPUTEPATCHSIZE, local_size_y = COMPUTEPATCHSIZE) in;\n"
+ "layout(binding=0, IMGFMT) uniform readonly highp image2D inputImage; // Use a sampler to improve performance \n"
+ "layout(binding=1, IMGFMT) uniform writeonly highp image2D resultImage;\n"
+ "uniform int radius;\n"
+ "const float cutoff = 2.2;\n"
+
+ "float expFactor() { // a function, otherwise MESA produces error: initializer of global variable `expFactor' must be a constant expression\n"
+ " float sigma = clamp(float(radius) / cutoff,0.02,100.0);\n"
+ " return 1.0 / (2.0 * sigma * sigma);\n"
+ "}\n"
+
+ "float gaussian(float distance, float expfactor) {\n"
+ " return exp( -(distance * distance) * expfactor);\n"
+ "}\n"
+
+ "void main() {\n"
+ " ivec2 imgSize = imageSize(resultImage);\n"
+ " int x = int(gl_GlobalInvocationID.x);\n"
+ " int y = int(gl_GlobalInvocationID.y);\n"
+ " if ( (x >= imgSize.x) || (y >= imgSize.y) ) return;\n"
+ " vec4 sumPixels = vec4(0.0);\n"
+ " float sumWeights = 0.0;\n"
+ " int left = clamp(x - radius, 0, imgSize.x - 1);\n"
+ " int right = clamp(x + radius, 0, imgSize.x - 1);\n"
+ " int top = clamp(y - radius, 0, imgSize.y - 1);\n"
+ " int bottom = clamp(y + radius, 0, imgSize.y - 1);\n"
+ " float expfactor = expFactor();\n"
+ " for (int iX = left; iX <= right; iX++) {\n"
+ " float dx = float(abs(iX - x));\n"
+ " vec4 imgValue = imageLoad(inputImage, ivec2(iX,y));\n"
+ " float weight = gaussian(dx, expfactor);\n"
+ " sumWeights += weight;\n"
+ " sumPixels += (imgValue * weight);\n"
+ " }\n"
+ " sumPixels /= sumWeights;\n"
+ " imageStore(resultImage, ivec2(x,y), sumPixels);\n"
+ "}\n";
+
+
+
+QByteArray versionedShaderCode(const char *src)
+{
+ QByteArray versionedSrc;
+
+ if (QOpenGLContext::currentContext()->isOpenGLES())
+ versionedSrc.append(QByteArrayLiteral("#version 310 es\n"));
+ else
+ versionedSrc.append(QByteArrayLiteral("#version 430 core\n"));
+
+ versionedSrc.append(src);
+ return versionedSrc;
+}
+
+void computeProjection(int winWidth, int winHeight, int imgWidth, int imgHeight, QMatrix4x4 &outProjection, QSizeF &outQuadSize)
+{
+ float ratioImg = float(imgWidth) / float(imgHeight);
+ float ratioCanvas = float(winWidth) / float(winHeight);
+
+ float correction = ratioImg / ratioCanvas;
+ float rescaleFactor = 1.0f;
+ float quadWidth = 1.0f;
+ float quadHeight = 1.0f;
+
+ if (correction < 1.0f) // canvas larger than image -- height = 1.0, vertical black bands
+ {
+ quadHeight = 1.0f;
+ quadWidth = 1.0f * ratioImg;
+ rescaleFactor = ratioCanvas;
+ correction = 1.0f / rescaleFactor;
+ }
+ else // image larger than canvas -- width = 1.0, horizontal black bands
+ {
+ quadWidth = 1.0f;
+ quadHeight = 1.0f / ratioImg;
+ correction = 1.0f / ratioCanvas;
+ }
+
+ const float frustumWidth = 1.0f * rescaleFactor;
+ const float frustumHeight = 1.0f * rescaleFactor * correction;
+
+ outProjection = QMatrix4x4();
+ outProjection.ortho(
+ -frustumWidth,
+ frustumWidth,
+ -frustumHeight,
+ frustumHeight,
+ -1.0f,
+ 1.0f);
+ outQuadSize = QSizeF(quadWidth,quadHeight);
+}
+
+void GLWindow::initializeGL()
+{
+ QOpenGLContext *ctx = QOpenGLContext::currentContext();
+ qDebug() << "Got a "
+ << ctx->format().majorVersion()
+ << "."
+ << ctx->format().minorVersion()
+ << ((ctx->format().renderableType() == QSurfaceFormat::OpenGLES) ? (" GLES") : (" GL"))
+ << " context";
+
+ QImage img(":/Qt-logo-medium.png");
+ Q_ASSERT(!img.isNull());
+ delete m_texImageInput;
+ m_texImageInput = new QOpenGLTexture(img.convertToFormat(QImage::Format_RGBA8888).mirrored());
+
+ delete m_texImageTmp;
+ m_texImageTmp = new QOpenGLTexture(QOpenGLTexture::Target2D);
+ m_texImageTmp->setFormat(m_texImageInput->format());
+ m_texImageTmp->setSize(m_texImageInput->width(),m_texImageInput->height());
+ m_texImageTmp->allocateStorage(QOpenGLTexture::RGBA,QOpenGLTexture::UInt8); // WTF?
+
+ delete m_texImageProcessed;
+ m_texImageProcessed = new QOpenGLTexture(QOpenGLTexture::Target2D);
+ m_texImageProcessed->setFormat(m_texImageInput->format());
+ m_texImageProcessed->setSize(m_texImageInput->width(),m_texImageInput->height());
+ m_texImageProcessed->allocateStorage(QOpenGLTexture::RGBA,QOpenGLTexture::UInt8);
+
+ m_texImageProcessed->setMagnificationFilter(QOpenGLTexture::Linear);
+ m_texImageProcessed->setMinificationFilter(QOpenGLTexture::Linear);
+ m_texImageProcessed->setWrapMode(QOpenGLTexture::ClampToEdge);
+
+ delete m_shaderDisplay;
+ m_shaderDisplay = new QOpenGLShaderProgram;
+ // Prepend the correct version directive to the sources. The rest is the
+ // same, thanks to the common GLSL syntax.
+ m_shaderDisplay->addShaderFromSourceCode(QOpenGLShader::Vertex, versionedShaderCode(vsDisplaySource));
+ m_shaderDisplay->addShaderFromSourceCode(QOpenGLShader::Fragment, versionedShaderCode(fsDisplaySource));
+ m_shaderDisplay->link();
+
+ delete m_shaderComputeV;
+ m_shaderComputeV = new QOpenGLShaderProgram;
+ m_shaderComputeV->addShaderFromSourceCode(QOpenGLShader::Compute, versionedShaderCode(csComputeSourceV));
+ m_shaderComputeV->link();
+
+ delete m_shaderComputeH;
+ m_shaderComputeH = new QOpenGLShaderProgram;
+ m_shaderComputeH->addShaderFromSourceCode(QOpenGLShader::Compute, versionedShaderCode(csComputeSourceH));
+ m_shaderComputeH->link();
+
+ // Create a VAO. Not strictly required for ES 3, but it is for plain OpenGL core context.
+ m_vao = new QOpenGLVertexArrayObject;
+ m_vao->create();
+}
+
+void GLWindow::resizeGL(int w, int h)
+{
+ computeProjection(w,h,m_texImageInput->width(),m_texImageInput->height(),m_proj,m_quadSize);
+}
+
+QSize getWorkGroups(int workGroupSize, const QSize &imageSize)
+{
+ int x = imageSize.width();
+ x = (x % workGroupSize) ? (x / workGroupSize) + 1 : (x / workGroupSize);
+ int y = imageSize.height();
+ y = (y % workGroupSize) ? (y / workGroupSize) + 1 : (y / workGroupSize);
+ return QSize(x,y);
+}
+
+void GLWindow::paintGL()
+{
+ // Now use QOpenGLExtraFunctions instead of QOpenGLFunctions as we want to
+ // do more than what GL(ES) 2.0 offers.
+ QOpenGLExtraFunctions *f = QOpenGLContext::currentContext()->extraFunctions();
+
+
+ // Process input image
+ QSize workGroups = getWorkGroups(10, QSize(m_texImageInput->width(), m_texImageInput->height()));
+ // Pass 1
+ f->glBindImageTexture(0, m_texImageInput->textureId(), 0, 0, 0, GL_READ_WRITE, GL_RGBA8);
+ f->glBindImageTexture(1, m_texImageTmp->textureId(), 0, 0, 0, GL_READ_WRITE, GL_RGBA8);
+ m_shaderComputeV->bind();
+ m_shaderComputeV->setUniformValue("radius",m_blurRadius);
+ f->glDispatchCompute(workGroups.width(),workGroups.height(),1);
+ f->glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
+ m_shaderComputeV->release();
+ // Pass 2
+ f->glBindImageTexture(0, m_texImageTmp->textureId(), 0, 0, 0, GL_READ_WRITE, GL_RGBA8);
+ f->glBindImageTexture(1, m_texImageProcessed->textureId(), 0, 0, 0, GL_READ_WRITE, GL_RGBA8);
+ m_shaderComputeH->bind();
+ m_shaderComputeH->setUniformValue("radius",m_blurRadius);
+ f->glDispatchCompute(workGroups.width(),workGroups.height(),1);
+ f->glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
+ m_shaderComputeH->release();
+ // Compute cleanup
+ f->glBindImageTexture(0, 0, 0, 0, 0, GL_READ_WRITE, GL_RGBA8);
+ f->glBindImageTexture(1, 0, 0, 0, 0, GL_READ_WRITE, GL_RGBA8);
+
+ // Display processed image
+ f->glClearColor(0, 0, 0, 1);
+ f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ m_texImageProcessed->bind(0);
+ m_shaderDisplay->bind();
+ m_shaderDisplay->setUniformValue("matProjection",m_proj);
+ m_shaderDisplay->setUniformValue("imageRatio",m_quadSize);
+ m_shaderDisplay->setUniformValue("samImage",0);
+ m_vao->bind();
+ f->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+ m_vao->release();
+ m_shaderDisplay->release();
+ m_texImageProcessed->release(0);
+}
+
diff --git a/tests/manual/examples/opengl/computegles31/glwindow.h b/tests/manual/examples/opengl/computegles31/glwindow.h
new file mode 100644
index 0000000000..268647a7aa
--- /dev/null
+++ b/tests/manual/examples/opengl/computegles31/glwindow.h
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef GLWIDGET_H
+#define GLWIDGET_H
+
+#include <QOpenGLWindow>
+#include <QOpenGLTexture>
+#include <QMatrix4x4>
+#include <QVector3D>
+#include <QKeyEvent>
+#include <QPropertyAnimation>
+#include <QSequentialAnimationGroup>
+#include <QRectF>
+
+QT_BEGIN_NAMESPACE
+
+class QOpenGLTexture;
+class QOpenGLShaderProgram;
+class QOpenGLBuffer;
+class QOpenGLVertexArrayObject;
+
+QT_END_NAMESPACE
+
+class GLWindow : public QOpenGLWindow
+{
+ Q_OBJECT
+ Q_PROPERTY(float blurRadius READ blurRadius WRITE setBlurRadius)
+
+public:
+ GLWindow();
+ ~GLWindow();
+
+ void initializeGL() override;
+ void resizeGL(int w, int h) override;
+ void paintGL() override;
+
+ float blurRadius() const { return m_blurRadius; }
+ void setBlurRadius(float blurRadius);
+
+protected:
+ void keyPressEvent(QKeyEvent *e) override;
+ void setAnimating(bool animate);
+
+private:
+ QPropertyAnimation *m_animationForward = nullptr;
+ QPropertyAnimation *m_animationBackward = nullptr;
+ QSequentialAnimationGroup *m_animationGroup;
+ QOpenGLTexture *m_texImageInput = nullptr;
+ QOpenGLTexture *m_texImageTmp = nullptr;
+ QOpenGLTexture *m_texImageProcessed = nullptr;
+ QOpenGLShaderProgram *m_shaderDisplay = nullptr;
+ QOpenGLShaderProgram *m_shaderComputeV = nullptr;
+ QOpenGLShaderProgram *m_shaderComputeH = nullptr;
+ QMatrix4x4 m_proj;
+ QSizeF m_quadSize;
+
+ int m_blurRadius = 0;
+ bool m_animate = true;
+ QOpenGLVertexArrayObject *m_vao = nullptr;
+};
+
+#endif
diff --git a/tests/manual/examples/opengl/computegles31/main.cpp b/tests/manual/examples/opengl/computegles31/main.cpp
new file mode 100644
index 0000000000..6c29dd4de9
--- /dev/null
+++ b/tests/manual/examples/opengl/computegles31/main.cpp
@@ -0,0 +1,101 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QSurfaceFormat>
+#include <QOffscreenSurface>
+#include <QOpenGLContext>
+#include <QDebug>
+#include <QPair>
+#include "glwindow.h"
+
+bool OGLSupports(int major, int minor, bool gles = false, QSurfaceFormat::OpenGLContextProfile profile = QSurfaceFormat::NoProfile)
+{
+ QOpenGLContext ctx;
+ QSurfaceFormat fmt;
+ fmt.setVersion(major, minor);
+ if (gles) {
+ fmt.setRenderableType(QSurfaceFormat::OpenGLES);
+ } else {
+ fmt.setRenderableType(QSurfaceFormat::OpenGL);
+ fmt.setProfile(profile);
+ }
+
+ ctx.setFormat(fmt);
+ ctx.create();
+ if (!ctx.isValid())
+ return false;
+ int ctxMajor = ctx.format().majorVersion();
+ int ctxMinor = ctx.format().minorVersion();
+ bool isGles = (ctx.format().renderableType() == QSurfaceFormat::OpenGLES);
+
+ if (isGles != gles) return false;
+ if (ctxMajor < major) return false;
+ if (ctxMajor == major && ctxMinor < minor)
+ return false;
+ if (!gles && ctx.format().profile() != profile)
+ return false;
+ return true;
+}
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ qDebug() << "Support for GL 2.0 noprof "<<( OGLSupports(2,0,false) ? "yes" : "no");
+ qDebug() << "Support for GL 2.0 core "<<( OGLSupports(2,0,false, QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 2.0 compat "<<( OGLSupports(2,0,false, QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 2.1 noprof "<<( OGLSupports(2,1,false) ? "yes" : "no");
+ qDebug() << "Support for GL 2.1 core "<<( OGLSupports(2,1,false, QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 2.1 compat "<<( OGLSupports(2,1,false, QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 3.0 noprof "<<( OGLSupports(3,0,false) ? "yes" : "no");
+ qDebug() << "Support for GL 3.0 core "<<( OGLSupports(3,0,false, QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 3.0 compat "<<( OGLSupports(3,0,false, QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 3.1 noprof "<<( OGLSupports(3,1,false) ? "yes" : "no");
+ qDebug() << "Support for GL 3.1 core "<<( OGLSupports(3,1,false, QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 3.1 compat "<<( OGLSupports(3,1,false, QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 3.2 core "<<( OGLSupports(3,2,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 3.2 compat "<<( OGLSupports(3,2,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 3.3 core "<<( OGLSupports(3,3,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 3.3 compat "<<( OGLSupports(3,3,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.0 core "<<( OGLSupports(4,0,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.0 compat "<<( OGLSupports(4,0,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.1 core "<<( OGLSupports(4,1,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.1 compat "<<( OGLSupports(4,1,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.2 core "<<( OGLSupports(4,2,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.2 compat "<<( OGLSupports(4,2,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.3 core "<<( OGLSupports(4,3,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.3 compat "<<( OGLSupports(4,3,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.4 core "<<( OGLSupports(4,4,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.4 compat "<<( OGLSupports(4,4,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.5 core "<<( OGLSupports(4,5,false,QSurfaceFormat::CoreProfile) ? "yes" : "no");
+ qDebug() << "Support for GL 4.5 compat "<<( OGLSupports(4,5,false,QSurfaceFormat::CompatibilityProfile) ? "yes" : "no");
+ qDebug() << "Support for GLES 2.0 "<<( OGLSupports(2,0,true) ? "yes" : "no");
+ qDebug() << "Support for GLES 3.0 "<<( OGLSupports(3,0,true) ? "yes" : "no");
+ qDebug() << "Support for GLES 3.1 "<<( OGLSupports(3,1,true) ? "yes" : "no");
+ qDebug() << "Support for GLES 3.2 "<<( OGLSupports(3,2,true) ? "yes" : "no");
+
+ QSurfaceFormat fmt;
+ fmt.setDepthBufferSize(24);
+
+ // Request OpenGL ES 3.1 context, as this is a GLES example. If not available, go for OpenGL 4.3 core.
+ if (OGLSupports(3,1,true)) {
+ qDebug("Requesting 3.1 GLES context");
+ fmt.setVersion(3, 1);
+ fmt.setRenderableType(QSurfaceFormat::OpenGLES);
+ } else if (OGLSupports(4,3,false,QSurfaceFormat::CoreProfile)) {
+ qDebug("Requesting 4.3 core context");
+ fmt.setVersion(4, 3);
+ fmt.setRenderableType(QSurfaceFormat::OpenGL);
+ fmt.setProfile(QSurfaceFormat::CoreProfile);
+ } else {
+ qWarning("Error: This system does not support OpenGL Compute Shaders! Exiting.");
+ return -1;
+ }
+ QSurfaceFormat::setDefaultFormat(fmt);
+
+ GLWindow glWindow;
+ glWindow.showMaximized();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/opengl/contextinfo/CMakeLists.txt b/tests/manual/examples/opengl/contextinfo/CMakeLists.txt
new file mode 100644
index 0000000000..ae5c10942a
--- /dev/null
+++ b/tests/manual/examples/opengl/contextinfo/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(contextinfo LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/opengl/contextinfo")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(contextinfo
+ main.cpp
+ renderwindow.cpp renderwindow.h
+ widget.cpp widget.h
+)
+
+set_target_properties(contextinfo PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(contextinfo PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::OpenGL
+ Qt6::Widgets
+)
+
+install(TARGETS contextinfo
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/opengl/contextinfo/contextinfo.pro b/tests/manual/examples/opengl/contextinfo/contextinfo.pro
new file mode 100644
index 0000000000..ae8f4067b6
--- /dev/null
+++ b/tests/manual/examples/opengl/contextinfo/contextinfo.pro
@@ -0,0 +1,14 @@
+TEMPLATE = app
+QT += widgets opengl
+requires(qtConfig(filedialog))
+
+SOURCES += main.cpp \
+ widget.cpp \
+ renderwindow.cpp
+
+HEADERS += widget.h \
+ renderwindow.h
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/opengl/contextinfo
+INSTALLS += target
diff --git a/tests/manual/examples/opengl/contextinfo/main.cpp b/tests/manual/examples/opengl/contextinfo/main.cpp
new file mode 100644
index 0000000000..253425ded9
--- /dev/null
+++ b/tests/manual/examples/opengl/contextinfo/main.cpp
@@ -0,0 +1,25 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include "widget.h"
+
+int main(int argc, char **argv)
+{
+ for (int i = 1; i < argc; ++i) {
+ if (!qstrcmp(argv[i], "-g"))
+ QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
+ else if (!qstrcmp(argv[i], "-s"))
+ QCoreApplication::setAttribute(Qt::AA_UseSoftwareOpenGL);
+ else if (!qstrcmp(argv[i], "-d"))
+ QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);
+ }
+
+ QApplication app(argc, argv);
+
+ Widget w;
+ w.resize(700, 800);
+ w.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/opengl/contextinfo/renderwindow.cpp b/tests/manual/examples/opengl/contextinfo/renderwindow.cpp
new file mode 100644
index 0000000000..64c0f47db9
--- /dev/null
+++ b/tests/manual/examples/opengl/contextinfo/renderwindow.cpp
@@ -0,0 +1,191 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "renderwindow.h"
+#include <QTimer>
+#include <QMatrix4x4>
+#include <QOpenGLContext>
+#include <QtOpenGL/QOpenGLShaderProgram>
+#include <QOpenGLFunctions>
+
+RenderWindow::RenderWindow(const QSurfaceFormat &format)
+ : m_context(nullptr),
+ m_initialized(false),
+ m_forceGLSL110(false),
+ m_angle(0.0f)
+{
+ setSurfaceType(QWindow::OpenGLSurface);
+ setFormat(format);
+ m_context = new QOpenGLContext(this);
+ m_context->setFormat(requestedFormat());
+ if (!m_context->create()) {
+ delete m_context;
+ m_context = nullptr;
+ }
+}
+
+void RenderWindow::exposeEvent(QExposeEvent *)
+{
+ if (isExposed())
+ render();
+}
+
+// ES needs the precision qualifiers.
+// On desktop GL QOpenGLShaderProgram inserts dummy defines for highp/mediump/lowp.
+static const char *vertexShaderSource110 =
+ "attribute highp vec4 posAttr;\n"
+ "attribute lowp vec4 colAttr;\n"
+ "varying lowp vec4 col;\n"
+ "uniform highp mat4 matrix;\n"
+ "void main() {\n"
+ " col = colAttr;\n"
+ " gl_Position = matrix * posAttr;\n"
+ "}\n";
+
+static const char *fragmentShaderSource110 =
+ "varying lowp vec4 col;\n"
+ "void main() {\n"
+ " gl_FragColor = col;\n"
+ "}\n";
+
+static const char *vertexShaderSource =
+ "#version 150\n"
+ "in vec4 posAttr;\n"
+ "in vec4 colAttr;\n"
+ "out vec4 col;\n"
+ "uniform mat4 matrix;\n"
+ "void main() {\n"
+ " col = colAttr;\n"
+ " gl_Position = matrix * posAttr;\n"
+ "}\n";
+
+static const char *fragmentShaderSource =
+ "#version 150\n"
+ "in vec4 col;\n"
+ "out vec4 fragColor;\n"
+ "void main() {\n"
+ " fragColor = col;\n"
+ "}\n";
+
+static GLfloat vertices[] = {
+ 0.0f, 0.707f,
+ -0.5f, -0.5f,
+ 0.5f, -0.5f
+};
+
+static GLfloat colors[] = {
+ 1.0f, 0.0f, 0.0f,
+ 0.0f, 1.0f, 0.0f,
+ 0.0f, 0.0f, 1.0f
+};
+
+void RenderWindow::init()
+{
+ m_program = new QOpenGLShaderProgram(this);
+
+ QSurfaceFormat format = m_context->format();
+ bool useNewStyleShader = format.profile() == QSurfaceFormat::CoreProfile;
+ // Try to handle 3.0 & 3.1 that do not have the core/compatibility profile concept 3.2+ has.
+ // This may still fail since version 150 (3.2) is specified in the sources but it's worth a try.
+ if (format.renderableType() == QSurfaceFormat::OpenGL && format.majorVersion() == 3 && format.minorVersion() <= 1)
+ useNewStyleShader = !format.testOption(QSurfaceFormat::DeprecatedFunctions);
+ if (m_forceGLSL110)
+ useNewStyleShader = false;
+
+ const char *vsrc = useNewStyleShader ? vertexShaderSource : vertexShaderSource110;
+ const char *fsrc = useNewStyleShader ? fragmentShaderSource : fragmentShaderSource110;
+ qDebug("Using version %s shader", useNewStyleShader ? "150" : "110");
+
+ if (!m_program->addShaderFromSourceCode(QOpenGLShader::Vertex, vsrc)) {
+ emit error(m_program->log());
+ return;
+ }
+ if (!m_program->addShaderFromSourceCode(QOpenGLShader::Fragment, fsrc)) {
+ emit error(m_program->log());
+ return;
+ }
+ if (!m_program->link()) {
+ emit error(m_program->log());
+ return;
+ }
+
+ m_posAttr = m_program->attributeLocation("posAttr");
+ m_colAttr = m_program->attributeLocation("colAttr");
+ m_matrixUniform = m_program->uniformLocation("matrix");
+
+ m_vbo.create();
+ m_vbo.bind();
+ m_vbo.allocate(vertices, sizeof(vertices) + sizeof(colors));
+ m_vbo.write(sizeof(vertices), colors, sizeof(colors));
+ m_vbo.release();
+
+ QOpenGLVertexArrayObject::Binder vaoBinder(&m_vao);
+ if (m_vao.isCreated()) // have VAO support, use it
+ setupVertexAttribs();
+}
+
+void RenderWindow::setupVertexAttribs()
+{
+ m_vbo.bind();
+ m_program->setAttributeBuffer(m_posAttr, GL_FLOAT, 0, 2);
+ m_program->setAttributeBuffer(m_colAttr, GL_FLOAT, sizeof(vertices), 3);
+ m_program->enableAttributeArray(m_posAttr);
+ m_program->enableAttributeArray(m_colAttr);
+ m_vbo.release();
+}
+
+bool RenderWindow::event(QEvent *ev)
+{
+ if (ev->type() == QEvent::UpdateRequest)
+ render();
+ return QWindow::event(ev);
+}
+
+void RenderWindow::render()
+{
+ if (!m_context->makeCurrent(this)) {
+ emit error(tr("makeCurrent() failed"));
+ return;
+ }
+
+ QOpenGLFunctions *f = m_context->functions();
+ if (!m_initialized) {
+ m_initialized = true;
+ f->glEnable(GL_DEPTH_TEST);
+ f->glClearColor(0, 0, 0, 1);
+ init();
+ emit ready();
+ }
+
+ if (!m_vbo.isCreated()) // init() failed, don't bother with trying to render
+ return;
+
+ const qreal retinaScale = devicePixelRatio();
+ f->glViewport(0, 0, width() * retinaScale, height() * retinaScale);
+ f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ m_program->bind();
+ QMatrix4x4 matrix;
+ matrix.perspective(60.0f, 4.0f / 3.0f, 0.1f, 100.0f);
+ matrix.translate(0.0f, 0.0f, -2.0f);
+ matrix.rotate(m_angle, 0.0f, 1.0f, 0.0f);
+ m_program->setUniformValue(m_matrixUniform, matrix);
+
+ if (m_vao.isCreated())
+ m_vao.bind();
+ else // no VAO support, set the vertex attribute arrays now
+ setupVertexAttribs();
+
+ f->glDrawArrays(GL_TRIANGLES, 0, 3);
+
+ m_vao.release();
+ m_program->release();
+
+ // swapInterval is 1 by default which means that swapBuffers() will (hopefully) block
+ // and wait for vsync.
+ m_context->swapBuffers(this);
+
+ m_angle += 1.0f;
+
+ requestUpdate();
+}
diff --git a/tests/manual/examples/opengl/contextinfo/renderwindow.h b/tests/manual/examples/opengl/contextinfo/renderwindow.h
new file mode 100644
index 0000000000..964dd601a6
--- /dev/null
+++ b/tests/manual/examples/opengl/contextinfo/renderwindow.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef RENDERWINDOW_H
+#define RENDERWINDOW_H
+
+#include <QWindow>
+#include <QOpenGLVertexArrayObject>
+#include <QOpenGLBuffer>
+
+QT_FORWARD_DECLARE_CLASS(QOpenGLContext)
+QT_FORWARD_DECLARE_CLASS(QOpenGLShaderProgram)
+
+class RenderWindow : public QWindow
+{
+ Q_OBJECT
+
+public:
+ RenderWindow(const QSurfaceFormat &format);
+ QOpenGLContext *context() { return m_context; }
+ void exposeEvent(QExposeEvent *) override;
+ void setForceGLSL110(bool enable) { m_forceGLSL110 = enable; }
+
+signals:
+ void ready();
+ void error(const QString &msg);
+
+protected:
+ bool event(QEvent *ev) override;
+
+private slots:
+ void render();
+
+private:
+ void init();
+ void setupVertexAttribs();
+
+ QOpenGLContext *m_context;
+ bool m_initialized;
+ bool m_forceGLSL110;
+ QOpenGLShaderProgram *m_program;
+ int m_posAttr, m_colAttr, m_matrixUniform;
+ QOpenGLVertexArrayObject m_vao;
+ QOpenGLBuffer m_vbo;
+ float m_angle;
+};
+
+#endif // RENDERWINDOW_H
diff --git a/tests/manual/examples/opengl/contextinfo/widget.cpp b/tests/manual/examples/opengl/contextinfo/widget.cpp
new file mode 100644
index 0000000000..bc31497039
--- /dev/null
+++ b/tests/manual/examples/opengl/contextinfo/widget.cpp
@@ -0,0 +1,360 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "widget.h"
+#include "renderwindow.h"
+#include <QVBoxLayout>
+#include <QComboBox>
+#include <QGroupBox>
+#include <QRadioButton>
+#include <QCheckBox>
+#include <QHBoxLayout>
+#include <QLabel>
+#include <QList>
+#include <QByteArray>
+#include <QPushButton>
+#include <QTextEdit>
+#include <QSplitter>
+#include <QGuiApplication>
+#include <QSurfaceFormat>
+#include <QOpenGLContext>
+#include <QOpenGLFunctions>
+#include <QDebug>
+#include <QTextStream>
+
+struct Version {
+ const char *str;
+ int major;
+ int minor;
+};
+
+static struct Version versions[] = {
+ { "1.0", 1, 0 },
+ { "1.1", 1, 1 },
+ { "1.2", 1, 2 },
+ { "1.3", 1, 3 },
+ { "1.4", 1, 4 },
+ { "1.5", 1, 5 },
+ { "2.0", 2, 0 },
+ { "2.1", 2, 1 },
+ { "3.0", 3, 0 },
+ { "3.1", 3, 1 },
+ { "3.2", 3, 2 },
+ { "3.3", 3, 3 },
+ { "4.0", 4, 0 },
+ { "4.1", 4, 1 },
+ { "4.2", 4, 2 },
+ { "4.3", 4, 3 },
+ { "4.4", 4, 4 },
+ { "4.5", 4, 5 }
+};
+
+struct Profile {
+ const char *str;
+ QSurfaceFormat::OpenGLContextProfile profile;
+};
+
+static struct Profile profiles[] = {
+ { "none", QSurfaceFormat::NoProfile },
+ { "core", QSurfaceFormat::CoreProfile },
+ { "compatibility", QSurfaceFormat::CompatibilityProfile }
+};
+
+struct Option {
+ const char *str;
+ QSurfaceFormat::FormatOption option;
+};
+
+static struct Option options[] = {
+ { "deprecated functions (not forward compatible)", QSurfaceFormat::DeprecatedFunctions },
+ { "debug context", QSurfaceFormat::DebugContext },
+ { "stereo buffers", QSurfaceFormat::StereoBuffers },
+ // This is not a QSurfaceFormat option but is helpful to determine if the driver
+ // allows compiling old-style shaders with core profile.
+ { "force version 110 shaders", QSurfaceFormat::FormatOption(0) }
+};
+
+struct Renderable {
+ const char *str;
+ QSurfaceFormat::RenderableType renderable;
+};
+
+static struct Renderable renderables[] = {
+ { "default", QSurfaceFormat::DefaultRenderableType },
+#ifndef Q_OS_ANDROID
+ { "OpenGL", QSurfaceFormat::OpenGL },
+#endif
+ { "OpenGL ES", QSurfaceFormat::OpenGLES }
+};
+
+void Widget::addVersions(QLayout *layout)
+{
+ QHBoxLayout *hbox = new QHBoxLayout;
+ hbox->setSpacing(20);
+ QLabel *label = new QLabel(tr("Context &version: "));
+ hbox->addWidget(label);
+ m_version = new QComboBox;
+ m_version->setMinimumWidth(60);
+ label->setBuddy(m_version);
+ hbox->addWidget(m_version);
+ for (size_t i = 0; i < sizeof(versions) / sizeof(Version); ++i) {
+ m_version->addItem(QString::fromLatin1(versions[i].str));
+ if (versions[i].major == 2 && versions[i].minor == 0)
+ m_version->setCurrentIndex(m_version->count() - 1);
+ }
+
+ QPushButton *btn = new QPushButton(tr("Create context"));
+ connect(btn, &QPushButton::clicked, this, &Widget::start);
+ btn->setMinimumSize(120, 40);
+ hbox->addWidget(btn);
+
+ layout->addItem(hbox);
+}
+
+void Widget::addProfiles(QLayout *layout)
+{
+ QGroupBox *groupBox = new QGroupBox(tr("Profile"));
+ QVBoxLayout *vbox = new QVBoxLayout;
+ for (size_t i = 0; i < sizeof(profiles) / sizeof(Profile); ++i)
+ vbox->addWidget(new QRadioButton(QString::fromLatin1(profiles[i].str)));
+ static_cast<QRadioButton *>(vbox->itemAt(0)->widget())->setChecked(true);
+ groupBox->setLayout(vbox);
+ layout->addWidget(groupBox);
+ m_profiles = vbox;
+}
+
+void Widget::addOptions(QLayout *layout)
+{
+ QGroupBox *groupBox = new QGroupBox(tr("Options"));
+ QVBoxLayout *vbox = new QVBoxLayout;
+ for (size_t i = 0; i < sizeof(options) / sizeof(Option); ++i)
+ vbox->addWidget(new QCheckBox(QString::fromLatin1(options[i].str)));
+ groupBox->setLayout(vbox);
+ layout->addWidget(groupBox);
+ m_options = vbox;
+}
+
+void Widget::addRenderableTypes(QLayout *layout)
+{
+ QGroupBox *groupBox = new QGroupBox(tr("Renderable type"));
+ QVBoxLayout *vbox = new QVBoxLayout;
+ for (size_t i = 0; i < sizeof(renderables) / sizeof(Renderable); ++i)
+ vbox->addWidget(new QRadioButton(QString::fromLatin1(renderables[i].str)));
+ static_cast<QRadioButton *>(vbox->itemAt(0)->widget())->setChecked(true);
+ groupBox->setLayout(vbox);
+ layout->addWidget(groupBox);
+ m_renderables = vbox;
+}
+
+void Widget::addRenderWindow()
+{
+ m_renderWindowLayout->addWidget(m_renderWindowContainer);
+}
+
+static QWidget *widgetWithLayout(QLayout *layout)
+{
+ QWidget *w = new QWidget;
+ w->setLayout(layout);
+ return w;
+}
+
+Widget::Widget(QWidget *parent)
+ : QWidget(parent)
+{
+ QVBoxLayout *layout = new QVBoxLayout;
+ QSplitter *vsplit = new QSplitter(Qt::Vertical);
+ layout->addWidget(vsplit);
+
+ QSplitter *hsplit = new QSplitter;
+
+ QVBoxLayout *settingsLayout = new QVBoxLayout;
+ addVersions(settingsLayout);
+ addProfiles(settingsLayout);
+ addOptions(settingsLayout);
+ addRenderableTypes(settingsLayout);
+ hsplit->addWidget(widgetWithLayout(settingsLayout));
+
+ QVBoxLayout *outputLayout = new QVBoxLayout;
+ m_output = new QTextEdit;
+ m_output->setReadOnly(true);
+ outputLayout->addWidget(m_output);
+ m_extensions = new QTextEdit;
+ m_extensions->setReadOnly(true);
+ outputLayout->addWidget(m_extensions);
+ hsplit->addWidget(widgetWithLayout(outputLayout));
+
+ hsplit->setStretchFactor(0, 4);
+ hsplit->setStretchFactor(1, 6);
+ vsplit->addWidget(hsplit);
+
+ m_renderWindowLayout = new QVBoxLayout;
+ vsplit->addWidget(widgetWithLayout(m_renderWindowLayout));
+ vsplit->setStretchFactor(1, 5);
+
+ m_renderWindowContainer = new QWidget;
+ addRenderWindow();
+
+ QString description;
+ QTextStream str(&description);
+ str << "Qt " << QT_VERSION_STR << ' ' << QGuiApplication::platformName();
+ const char *openGlVariables[] =
+ {"QT_ANGLE_PLATFORM", "QT_OPENGL", "QT_OPENGL_BUGLIST", "QT_OPENGL_DLL"};
+ const size_t variableCount = sizeof(openGlVariables) / sizeof(openGlVariables[0]);
+ for (size_t v = 0; v < variableCount; ++v) {
+ if (qEnvironmentVariableIsSet(openGlVariables[v]))
+ str << ' ' << openGlVariables[v] << '=' << qgetenv(openGlVariables[v]);
+ }
+ if (QCoreApplication::testAttribute(Qt::AA_UseOpenGLES))
+ str << " Qt::AA_UseOpenGLES";
+ if (QCoreApplication::testAttribute(Qt::AA_UseSoftwareOpenGL))
+ str << " Qt::AA_UseSoftwareOpenGL";
+ if (QCoreApplication::testAttribute(Qt::AA_UseDesktopOpenGL))
+ str << " Qt::AA_UseDesktopOpenGL";
+ layout->addWidget(new QLabel(description));
+
+ setLayout(layout);
+}
+
+void Widget::start()
+{
+ QSurfaceFormat fmt;
+
+ int idx = m_version->currentIndex();
+ if (idx < 0)
+ return;
+ fmt.setVersion(versions[idx].major, versions[idx].minor);
+
+ for (size_t i = 0; i < sizeof(profiles) / sizeof(Profile); ++i)
+ if (static_cast<QRadioButton *>(m_profiles->itemAt(int(i))->widget())->isChecked()) {
+ fmt.setProfile(profiles[i].profile);
+ break;
+ }
+
+ bool forceGLSL110 = false;
+ for (size_t i = 0; i < sizeof(options) / sizeof(Option); ++i)
+ if (static_cast<QCheckBox *>(m_options->itemAt(int(i))->widget())->isChecked()) {
+ if (options[i].option)
+ fmt.setOption(options[i].option);
+ else if (i == 3)
+ forceGLSL110 = true;
+ }
+
+ for (size_t i = 0; i < sizeof(renderables) / sizeof(Renderable); ++i)
+ if (static_cast<QRadioButton *>(m_renderables->itemAt(int(i))->widget())->isChecked()) {
+ fmt.setRenderableType(renderables[i].renderable);
+ break;
+ }
+
+ // The example rendering will need a depth buffer.
+ fmt.setDepthBufferSize(16);
+
+ m_output->clear();
+ m_extensions->clear();
+ qDebug() << "Requesting surface format" << fmt;
+
+ m_renderWindowLayout->removeWidget(m_renderWindowContainer);
+ delete m_renderWindowContainer;
+
+ RenderWindow *renderWindow = new RenderWindow(fmt);
+ if (!renderWindow->context()) {
+ m_output->append(tr("Failed to create context"));
+ delete renderWindow;
+ m_renderWindowContainer = new QWidget;
+ addRenderWindow();
+ return;
+ }
+ m_surface = renderWindow;
+
+ renderWindow->setForceGLSL110(forceGLSL110);
+ connect(renderWindow, &RenderWindow::ready, this, &Widget::renderWindowReady);
+ connect(renderWindow, &RenderWindow::error, this, &Widget::renderWindowError);
+
+ m_renderWindowContainer = QWidget::createWindowContainer(renderWindow);
+ addRenderWindow();
+}
+
+void Widget::printFormat(const QSurfaceFormat &format)
+{
+ m_output->append(tr("OpenGL version: %1.%2").arg(format.majorVersion()).arg(format.minorVersion()));
+
+ for (size_t i = 0; i < sizeof(profiles) / sizeof(Profile); ++i)
+ if (profiles[i].profile == format.profile()) {
+ m_output->append(tr("Profile: %1").arg(QString::fromLatin1(profiles[i].str)));
+ break;
+ }
+
+ QString opts;
+ for (size_t i = 0; i < sizeof(options) / sizeof(Option); ++i)
+ if (format.testOption(options[i].option))
+ opts += QString::fromLatin1(options[i].str) + QLatin1Char(' ');
+ m_output->append(tr("Options: %1").arg(opts));
+
+ for (size_t i = 0; i < sizeof(renderables) / sizeof(Renderable); ++i)
+ if (renderables[i].renderable == format.renderableType()) {
+ m_output->append(tr("Renderable type: %1").arg(QString::fromLatin1(renderables[i].str)));
+ break;
+ }
+
+ m_output->append(tr("Depth buffer size: %1").arg(QString::number(format.depthBufferSize())));
+ m_output->append(tr("Stencil buffer size: %1").arg(QString::number(format.stencilBufferSize())));
+ m_output->append(tr("Samples: %1").arg(QString::number(format.samples())));
+ m_output->append(tr("Red buffer size: %1").arg(QString::number(format.redBufferSize())));
+ m_output->append(tr("Green buffer size: %1").arg(QString::number(format.greenBufferSize())));
+ m_output->append(tr("Blue buffer size: %1").arg(QString::number(format.blueBufferSize())));
+ m_output->append(tr("Alpha buffer size: %1").arg(QString::number(format.alphaBufferSize())));
+ m_output->append(tr("Swap interval: %1").arg(QString::number(format.swapInterval())));
+}
+
+void Widget::renderWindowReady()
+{
+ QOpenGLContext *context = QOpenGLContext::currentContext();
+ Q_ASSERT(context);
+
+ QString vendor, renderer, version, glslVersion;
+ const GLubyte *p;
+ QOpenGLFunctions *f = context->functions();
+ if ((p = f->glGetString(GL_VENDOR)))
+ vendor = QString::fromLatin1(reinterpret_cast<const char *>(p));
+ if ((p = f->glGetString(GL_RENDERER)))
+ renderer = QString::fromLatin1(reinterpret_cast<const char *>(p));
+ if ((p = f->glGetString(GL_VERSION)))
+ version = QString::fromLatin1(reinterpret_cast<const char *>(p));
+ if ((p = f->glGetString(GL_SHADING_LANGUAGE_VERSION)))
+ glslVersion = QString::fromLatin1(reinterpret_cast<const char *>(p));
+
+ m_output->append(tr("*** Context information ***"));
+ m_output->append(tr("Vendor: %1").arg(vendor));
+ m_output->append(tr("Renderer: %1").arg(renderer));
+ m_output->append(tr("OpenGL version: %1").arg(version));
+ m_output->append(tr("GLSL version: %1").arg(glslVersion));
+
+ m_output->append(tr("\n*** QSurfaceFormat from context ***"));
+ printFormat(context->format());
+
+ m_output->append(tr("\n*** QSurfaceFormat from window surface ***"));
+ printFormat(m_surface->format());
+
+ m_output->append(tr("\n*** Qt build information ***"));
+ const char *gltype[] = { "Desktop", "GLES 2", "GLES 1" };
+ m_output->append(tr("Qt OpenGL configuration: %1")
+ .arg(QString::fromLatin1(gltype[QOpenGLContext::openGLModuleType()])));
+#if defined(Q_OS_WIN)
+ using namespace QNativeInterface;
+ m_output->append(tr("Qt OpenGL library handle: %1")
+ .arg(QString::number(qintptr(QWGLContext::openGLModuleHandle()), 16)));
+#endif
+
+ QList<QByteArray> extensionList = context->extensions().values();
+ std::sort(extensionList.begin(), extensionList.end());
+ m_extensions->append(tr("Found %1 extensions:").arg(extensionList.count()));
+ for (const QByteArray &ext : std::as_const(extensionList))
+ m_extensions->append(QString::fromLatin1(ext));
+
+ m_output->moveCursor(QTextCursor::Start);
+ m_extensions->moveCursor(QTextCursor::Start);
+}
+
+void Widget::renderWindowError(const QString &msg)
+{
+ m_output->append(tr("An error has occurred:\n%1").arg(msg));
+}
diff --git a/tests/manual/examples/opengl/contextinfo/widget.h b/tests/manual/examples/opengl/contextinfo/widget.h
new file mode 100644
index 0000000000..e5c31fcaa7
--- /dev/null
+++ b/tests/manual/examples/opengl/contextinfo/widget.h
@@ -0,0 +1,46 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QWidget>
+
+QT_FORWARD_DECLARE_CLASS(QComboBox)
+QT_FORWARD_DECLARE_CLASS(QTextEdit)
+QT_FORWARD_DECLARE_CLASS(QVBoxLayout)
+QT_FORWARD_DECLARE_CLASS(QSurfaceFormat)
+QT_FORWARD_DECLARE_CLASS(QSurface)
+
+class Widget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit Widget(QWidget *parent = nullptr);
+
+private slots:
+ void start();
+ void renderWindowReady();
+ void renderWindowError(const QString &msg);
+
+private:
+ void addVersions(QLayout *layout);
+ void addProfiles(QLayout *layout);
+ void addOptions(QLayout *layout);
+ void addRenderableTypes(QLayout *layout);
+ void addRenderWindow();
+ void printFormat(const QSurfaceFormat &format);
+
+ QComboBox *m_version;
+ QLayout *m_profiles;
+ QLayout *m_options;
+ QLayout *m_renderables;
+ QTextEdit *m_output;
+ QTextEdit *m_extensions;
+ QVBoxLayout *m_renderWindowLayout;
+ QWidget *m_renderWindowContainer;
+ QSurface *m_surface;
+};
+
+#endif // WIDGET_H
diff --git a/tests/manual/examples/opengl/hellowindow/CMakeLists.txt b/tests/manual/examples/opengl/hellowindow/CMakeLists.txt
new file mode 100644
index 0000000000..3224c81ccc
--- /dev/null
+++ b/tests/manual/examples/opengl/hellowindow/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(hellowindow LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/opengl/hellowindow")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL)
+
+qt_standard_project_setup()
+
+qt_add_executable(hellowindow
+ hellowindow.cpp hellowindow.h
+ main.cpp
+)
+
+set_target_properties(hellowindow PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(hellowindow PRIVATE
+ Qt6::Core
+ Qt6::CorePrivate
+ Qt6::Gui
+ Qt6::GuiPrivate
+ Qt6::OpenGL
+)
+
+install(TARGETS hellowindow
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/opengl/hellowindow/hellowindow.cpp b/tests/manual/examples/opengl/hellowindow/hellowindow.cpp
new file mode 100644
index 0000000000..c9cad95563
--- /dev/null
+++ b/tests/manual/examples/opengl/hellowindow/hellowindow.cpp
@@ -0,0 +1,305 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "hellowindow.h"
+
+#include <QOpenGLContext>
+#include <QOpenGLFunctions>
+#include <QRandomGenerator>
+#include <qmath.h>
+#include <QElapsedTimer>
+
+Renderer::Renderer(const QSurfaceFormat &format, Renderer *share, QScreen *screen)
+ : m_initialized(false)
+ , m_format(format)
+{
+ m_context = new QOpenGLContext(this);
+ if (screen)
+ m_context->setScreen(screen);
+ m_context->setFormat(format);
+ if (share)
+ m_context->setShareContext(share->m_context);
+ m_context->create();
+
+ m_backgroundColor = QColor::fromRgbF(0.1f, 0.1f, 0.2f, 1.0f);
+ m_backgroundColor.setRed(QRandomGenerator::global()->bounded(64));
+ m_backgroundColor.setGreen(QRandomGenerator::global()->bounded(128));
+ m_backgroundColor.setBlue(QRandomGenerator::global()->bounded(256));
+}
+
+HelloWindow::HelloWindow(const QSharedPointer<Renderer> &renderer, QScreen *screen)
+ : m_colorIndex(0), m_renderer(renderer)
+{
+ setSurfaceType(QWindow::OpenGLSurface);
+ setFlags(Qt::Window | Qt::WindowSystemMenuHint | Qt::WindowTitleHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
+
+ setGeometry(QRect(10, 10, 640, 480));
+
+ setFormat(renderer->format());
+ if (screen)
+ setScreen(screen);
+
+ create();
+
+ updateColor();
+
+ connect(renderer.data(), &Renderer::requestUpdate, this, &QWindow::requestUpdate);
+}
+
+void HelloWindow::exposeEvent(QExposeEvent *)
+{
+ if (isExposed())
+ render();
+}
+
+bool HelloWindow::event(QEvent *ev)
+{
+ if (ev->type() == QEvent::UpdateRequest && isExposed())
+ render();
+ return QWindow::event(ev);
+}
+
+void HelloWindow::render()
+{
+ static QElapsedTimer timer;
+ if (!timer.isValid())
+ timer.start();
+ qreal a = (qreal)(((timer.elapsed() * 3) % 36000) / 100.0);
+ auto call = [this, r = m_renderer.data(), a, c = color()]() { r->render(this, a, c); };
+ QMetaObject::invokeMethod(m_renderer.data(), call);
+}
+
+void HelloWindow::mousePressEvent(QMouseEvent *)
+{
+ updateColor();
+}
+
+QColor HelloWindow::color() const
+{
+ return m_color;
+}
+
+void HelloWindow::updateColor()
+{
+ QColor colors[] =
+ {
+ QColor(100, 255, 0),
+ QColor(0, 100, 255)
+ };
+
+ m_color = colors[m_colorIndex];
+ m_colorIndex = 1 - m_colorIndex;
+}
+
+void Renderer::render(HelloWindow *surface, qreal angle, const QColor &color)
+{
+ if (!m_context->makeCurrent(surface))
+ return;
+
+ QSize viewSize = surface->size();
+
+ if (!m_initialized) {
+ initialize();
+ m_initialized = true;
+ }
+
+ QOpenGLFunctions *f = m_context->functions();
+ f->glViewport(0, 0, viewSize.width() * surface->devicePixelRatio(), viewSize.height() * surface->devicePixelRatio());
+ f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ f->glClearColor(m_backgroundColor.redF(), m_backgroundColor.greenF(), m_backgroundColor.blueF(), m_backgroundColor.alphaF());
+ f->glFrontFace(GL_CW);
+ f->glCullFace(GL_FRONT);
+ f->glEnable(GL_CULL_FACE);
+ f->glEnable(GL_DEPTH_TEST);
+
+ m_program->bind();
+ m_vbo.bind();
+
+ m_program->enableAttributeArray(vertexAttr);
+ m_program->enableAttributeArray(normalAttr);
+ m_program->setAttributeBuffer(vertexAttr, GL_FLOAT, 0, 3);
+ const int verticesSize = vertices.count() * 3 * sizeof(GLfloat);
+ m_program->setAttributeBuffer(normalAttr, GL_FLOAT, verticesSize, 3);
+
+ QMatrix4x4 modelview;
+ modelview.rotate(angle, 0.0f, 1.0f, 0.0f);
+ modelview.rotate(angle, 1.0f, 0.0f, 0.0f);
+ modelview.rotate(angle, 0.0f, 0.0f, 1.0f);
+ modelview.translate(0.0f, -0.2f, 0.0f);
+
+ m_program->setUniformValue(matrixUniform, modelview);
+ m_program->setUniformValue(colorUniform, color);
+
+ m_context->functions()->glDrawArrays(GL_TRIANGLES, 0, vertices.size());
+
+ m_context->swapBuffers(surface);
+
+ emit requestUpdate();
+}
+
+Q_GLOBAL_STATIC(QMutex, initMutex)
+
+void Renderer::initialize()
+{
+ // Threaded shader compilation can confuse some drivers. Avoid it.
+ QMutexLocker lock(initMutex());
+
+ QOpenGLShader *vshader = new QOpenGLShader(QOpenGLShader::Vertex, this);
+ vshader->compileSourceCode(
+ "attribute highp vec4 vertex;"
+ "attribute mediump vec3 normal;"
+ "uniform mediump mat4 matrix;"
+ "uniform lowp vec4 sourceColor;"
+ "varying mediump vec4 color;"
+ "void main(void)"
+ "{"
+ " vec3 toLight = normalize(vec3(0.0, 0.3, 1.0));"
+ " float angle = max(dot(normal, toLight), 0.0);"
+ " vec3 col = sourceColor.rgb;"
+ " color = vec4(col * 0.2 + col * 0.8 * angle, 1.0);"
+ " color = clamp(color, 0.0, 1.0);"
+ " gl_Position = matrix * vertex;"
+ "}");
+
+ QOpenGLShader *fshader = new QOpenGLShader(QOpenGLShader::Fragment, this);
+ fshader->compileSourceCode(
+ "varying mediump vec4 color;"
+ "void main(void)"
+ "{"
+ " gl_FragColor = color;"
+ "}");
+
+ m_program = new QOpenGLShaderProgram(this);
+ m_program->addShader(vshader);
+ m_program->addShader(fshader);
+ m_program->link();
+ m_program->bind();
+
+ vertexAttr = m_program->attributeLocation("vertex");
+ normalAttr = m_program->attributeLocation("normal");
+ matrixUniform = m_program->uniformLocation("matrix");
+ colorUniform = m_program->uniformLocation("sourceColor");
+
+ createGeometry();
+
+ m_vbo.create();
+ m_vbo.bind();
+ const int verticesSize = vertices.count() * 3 * sizeof(GLfloat);
+ m_vbo.allocate(verticesSize * 2);
+ m_vbo.write(0, vertices.constData(), verticesSize);
+ m_vbo.write(verticesSize, normals.constData(), verticesSize);
+}
+
+void Renderer::createGeometry()
+{
+ vertices.clear();
+ normals.clear();
+
+ qreal x1 = +0.06f;
+ qreal y1 = -0.14f;
+ qreal x2 = +0.14f;
+ qreal y2 = -0.06f;
+ qreal x3 = +0.08f;
+ qreal y3 = +0.00f;
+ qreal x4 = +0.30f;
+ qreal y4 = +0.22f;
+
+ quad(x1, y1, x2, y2, y2, x2, y1, x1);
+ quad(x3, y3, x4, y4, y4, x4, y3, x3);
+
+ extrude(x1, y1, x2, y2);
+ extrude(x2, y2, y2, x2);
+ extrude(y2, x2, y1, x1);
+ extrude(y1, x1, x1, y1);
+ extrude(x3, y3, x4, y4);
+ extrude(x4, y4, y4, x4);
+ extrude(y4, x4, y3, x3);
+
+ const int NumSectors = 100;
+ const qreal sectorAngle = 2 * qreal(M_PI) / NumSectors;
+ for (int i = 0; i < NumSectors; ++i) {
+ qreal angle = i * sectorAngle;
+ qreal x5 = 0.30 * qSin(angle);
+ qreal y5 = 0.30 * qCos(angle);
+ qreal x6 = 0.20 * qSin(angle);
+ qreal y6 = 0.20 * qCos(angle);
+
+ angle += sectorAngle;
+ qreal x7 = 0.20 * qSin(angle);
+ qreal y7 = 0.20 * qCos(angle);
+ qreal x8 = 0.30 * qSin(angle);
+ qreal y8 = 0.30 * qCos(angle);
+
+ quad(x5, y5, x6, y6, x7, y7, x8, y8);
+
+ extrude(x6, y6, x7, y7);
+ extrude(x8, y8, x5, y5);
+ }
+
+ for (int i = 0;i < vertices.size();i++)
+ vertices[i] *= 2.0f;
+}
+
+void Renderer::quad(qreal x1, qreal y1, qreal x2, qreal y2, qreal x3, qreal y3, qreal x4, qreal y4)
+{
+ vertices << QVector3D(x1, y1, -0.05f);
+ vertices << QVector3D(x2, y2, -0.05f);
+ vertices << QVector3D(x4, y4, -0.05f);
+
+ vertices << QVector3D(x3, y3, -0.05f);
+ vertices << QVector3D(x4, y4, -0.05f);
+ vertices << QVector3D(x2, y2, -0.05f);
+
+ QVector3D n = QVector3D::normal
+ (QVector3D(x2 - x1, y2 - y1, 0.0f), QVector3D(x4 - x1, y4 - y1, 0.0f));
+
+ normals << n;
+ normals << n;
+ normals << n;
+
+ normals << n;
+ normals << n;
+ normals << n;
+
+ vertices << QVector3D(x4, y4, 0.05f);
+ vertices << QVector3D(x2, y2, 0.05f);
+ vertices << QVector3D(x1, y1, 0.05f);
+
+ vertices << QVector3D(x2, y2, 0.05f);
+ vertices << QVector3D(x4, y4, 0.05f);
+ vertices << QVector3D(x3, y3, 0.05f);
+
+ n = QVector3D::normal
+ (QVector3D(x2 - x4, y2 - y4, 0.0f), QVector3D(x1 - x4, y1 - y4, 0.0f));
+
+ normals << n;
+ normals << n;
+ normals << n;
+
+ normals << n;
+ normals << n;
+ normals << n;
+}
+
+void Renderer::extrude(qreal x1, qreal y1, qreal x2, qreal y2)
+{
+ vertices << QVector3D(x1, y1, +0.05f);
+ vertices << QVector3D(x2, y2, +0.05f);
+ vertices << QVector3D(x1, y1, -0.05f);
+
+ vertices << QVector3D(x2, y2, -0.05f);
+ vertices << QVector3D(x1, y1, -0.05f);
+ vertices << QVector3D(x2, y2, +0.05f);
+
+ QVector3D n = QVector3D::normal
+ (QVector3D(x2 - x1, y2 - y1, 0.0f), QVector3D(0.0f, 0.0f, -0.1f));
+
+ normals << n;
+ normals << n;
+ normals << n;
+
+ normals << n;
+ normals << n;
+ normals << n;
+}
diff --git a/tests/manual/examples/opengl/hellowindow/hellowindow.h b/tests/manual/examples/opengl/hellowindow/hellowindow.h
new file mode 100644
index 0000000000..1e117ab2e0
--- /dev/null
+++ b/tests/manual/examples/opengl/hellowindow/hellowindow.h
@@ -0,0 +1,77 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef HELLOWINDOW_H
+#define HELLOWINDOW_H
+
+#include <QWindow>
+
+#include <QColor>
+#include <QMutex>
+#include <QOpenGLShaderProgram>
+#include <QOpenGLBuffer>
+#include <QSharedPointer>
+#include <QTimer>
+
+class HelloWindow;
+
+class Renderer : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit Renderer(const QSurfaceFormat &format, Renderer *share = nullptr,
+ QScreen *screen = nullptr);
+
+ QSurfaceFormat format() const { return m_format; }
+
+public slots:
+ void render(HelloWindow *surface, qreal angle, const QColor &color);
+
+signals:
+ void requestUpdate();
+
+private:
+ void initialize();
+
+ void createGeometry();
+ void createBubbles(int number);
+ void quad(qreal x1, qreal y1, qreal x2, qreal y2, qreal x3, qreal y3, qreal x4, qreal y4);
+ void extrude(qreal x1, qreal y1, qreal x2, qreal y2);
+
+ QList<QVector3D> vertices;
+ QList<QVector3D> normals;
+ int vertexAttr;
+ int normalAttr;
+ int matrixUniform;
+ int colorUniform;
+
+ bool m_initialized;
+ QSurfaceFormat m_format;
+ QOpenGLContext *m_context;
+ QOpenGLShaderProgram *m_program;
+ QOpenGLBuffer m_vbo;
+ QColor m_backgroundColor;
+};
+
+class HelloWindow : public QWindow
+{
+public:
+ explicit HelloWindow(const QSharedPointer<Renderer> &renderer, QScreen *screen = nullptr);
+
+ QColor color() const;
+ void updateColor();
+
+protected:
+ bool event(QEvent *ev) override;
+ void exposeEvent(QExposeEvent *event) override;
+ void mousePressEvent(QMouseEvent *) override;
+ void render();
+
+private:
+ int m_colorIndex;
+ QColor m_color;
+ const QSharedPointer<Renderer> m_renderer;
+};
+
+#endif // HELLOWINDOW_H
diff --git a/tests/manual/examples/opengl/hellowindow/hellowindow.pro b/tests/manual/examples/opengl/hellowindow/hellowindow.pro
new file mode 100644
index 0000000000..27c274a378
--- /dev/null
+++ b/tests/manual/examples/opengl/hellowindow/hellowindow.pro
@@ -0,0 +1,9 @@
+QT += gui-private core-private opengl
+
+HEADERS += hellowindow.h
+SOURCES += hellowindow.cpp main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/opengl/hellowindow
+INSTALLS += target
+
diff --git a/tests/manual/examples/opengl/hellowindow/main.cpp b/tests/manual/examples/opengl/hellowindow/main.cpp
new file mode 100644
index 0000000000..ee4729a493
--- /dev/null
+++ b/tests/manual/examples/opengl/hellowindow/main.cpp
@@ -0,0 +1,125 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "hellowindow.h"
+
+#include <qpa/qplatformintegration.h>
+
+#include <QCommandLineParser>
+#include <QCommandLineOption>
+#include <QGuiApplication>
+#include <QScreen>
+#include <QThread>
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QCoreApplication::setApplicationName("Qt HelloWindow GL Example");
+ QCoreApplication::setOrganizationName("QtProject");
+ QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+ QCommandLineParser parser;
+ parser.setApplicationDescription(QCoreApplication::applicationName());
+ parser.addHelpOption();
+ parser.addVersionOption();
+ QCommandLineOption multipleOption("multiple", "Create multiple windows");
+ parser.addOption(multipleOption);
+ QCommandLineOption multipleSampleOption("multisample", "Multisampling");
+ parser.addOption(multipleSampleOption);
+ QCommandLineOption multipleScreenOption("multiscreen", "Run on multiple screens");
+ parser.addOption(multipleScreenOption);
+ QCommandLineOption timeoutOption("timeout", "Close after 10s");
+ parser.addOption(timeoutOption);
+ parser.process(app);
+
+ // Some platforms can only have one window per screen. Therefore we need to differentiate.
+ const bool multipleWindows = parser.isSet(multipleOption);
+ const bool multipleScreens = parser.isSet(multipleScreenOption);
+
+ QScreen *screen = QGuiApplication::primaryScreen();
+
+ QRect screenGeometry = screen->availableGeometry();
+
+ QSurfaceFormat format;
+ format.setDepthBufferSize(16);
+ if (parser.isSet(multipleSampleOption))
+ format.setSamples(4);
+
+ QPoint center = QPoint(screenGeometry.center().x(), screenGeometry.top() + 80);
+ QSize windowSize(400, 320);
+ int delta = 40;
+
+ QList<QWindow *> windows;
+ QSharedPointer<Renderer> rendererA(new Renderer(format));
+
+ HelloWindow *windowA = new HelloWindow(rendererA);
+ windowA->setGeometry(QRect(center, windowSize).translated(-windowSize.width() - delta / 2, 0));
+ windowA->setTitle(QStringLiteral("Thread A - Context A"));
+ windowA->setVisible(true);
+ windows.prepend(windowA);
+
+ QList<QThread *> renderThreads;
+ if (multipleWindows) {
+ QSharedPointer<Renderer> rendererB(new Renderer(format, rendererA.data()));
+
+ QThread *renderThread = new QThread;
+ rendererB->moveToThread(renderThread);
+ renderThreads << renderThread;
+
+ HelloWindow *windowB = new HelloWindow(rendererA);
+ windowB->setGeometry(QRect(center, windowSize).translated(delta / 2, 0));
+ windowB->setTitle(QStringLiteral("Thread A - Context A"));
+ windowB->setVisible(true);
+ windows.prepend(windowB);
+
+ HelloWindow *windowC = new HelloWindow(rendererB);
+ windowC->setGeometry(QRect(center, windowSize).translated(-windowSize.width() / 2, windowSize.height() + delta));
+ windowC->setTitle(QStringLiteral("Thread B - Context B"));
+ windowC->setVisible(true);
+ windows.prepend(windowC);
+ }
+ if (multipleScreens) {
+ for (int i = 1; i < QGuiApplication::screens().size(); ++i) {
+ QScreen *screen = QGuiApplication::screens().at(i);
+ QSharedPointer<Renderer> renderer(new Renderer(format, rendererA.data(), screen));
+
+ QThread *renderThread = new QThread;
+ renderer->moveToThread(renderThread);
+ renderThreads.prepend(renderThread);
+
+ QRect screenGeometry = screen->availableGeometry();
+ QPoint center = screenGeometry.center();
+
+ QSize windowSize = screenGeometry.size() * 0.8;
+
+ HelloWindow *window = new HelloWindow(renderer, screen);
+ window->setGeometry(QRect(center, windowSize).translated(-windowSize.width() / 2, -windowSize.height() / 2));
+
+ QChar id = QChar('B' + i);
+ window->setTitle(QStringLiteral("Thread ") + id + QStringLiteral(" - Context ") + id);
+ window->setVisible(true);
+ windows.prepend(window);
+ }
+ }
+
+ for (int i = 0; i < renderThreads.size(); ++i) {
+ QObject::connect(qGuiApp, &QGuiApplication::lastWindowClosed, renderThreads.at(i), &QThread::quit);
+ renderThreads.at(i)->start();
+ }
+
+ // Quit after 10 seconds. For platforms that do not have windows that are closeable.
+ if (parser.isSet(timeoutOption))
+ QTimer::singleShot(10000, qGuiApp, &QCoreApplication::quit);
+
+ const int exitValue = app.exec();
+
+ for (int i = 0; i < renderThreads.size(); ++i) {
+ renderThreads.at(i)->quit(); // some platforms may not have windows to close so ensure quit()
+ renderThreads.at(i)->wait();
+ }
+
+ qDeleteAll(windows);
+ qDeleteAll(renderThreads);
+
+ return exitValue;
+}
diff --git a/tests/manual/examples/opengl/paintedwindow/CMakeLists.txt b/tests/manual/examples/opengl/paintedwindow/CMakeLists.txt
new file mode 100644
index 0000000000..c1bf33e73c
--- /dev/null
+++ b/tests/manual/examples/opengl/paintedwindow/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(paintedwindow LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/opengl/paintedwindow")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL)
+
+qt_standard_project_setup()
+
+qt_add_executable(paintedwindow
+ main.cpp
+ paintedwindow.cpp paintedwindow.h
+)
+
+set_target_properties(paintedwindow PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(paintedwindow PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::OpenGL
+)
+
+install(TARGETS paintedwindow
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/opengl/paintedwindow/main.cpp b/tests/manual/examples/opengl/paintedwindow/main.cpp
new file mode 100644
index 0000000000..e055e92812
--- /dev/null
+++ b/tests/manual/examples/opengl/paintedwindow/main.cpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QRect>
+
+#include "paintedwindow.h"
+
+int main(int argc, char **argv)
+{
+ QGuiApplication app(argc, argv);
+
+ PaintedWindow window;
+ window.show();
+
+ return app.exec();
+}
+
diff --git a/tests/manual/examples/opengl/paintedwindow/paintedwindow.cpp b/tests/manual/examples/opengl/paintedwindow/paintedwindow.cpp
new file mode 100644
index 0000000000..d0b8284157
--- /dev/null
+++ b/tests/manual/examples/opengl/paintedwindow/paintedwindow.cpp
@@ -0,0 +1,185 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "paintedwindow.h"
+
+#include <QGuiApplication>
+#include <QOpenGLContext>
+#include <QOpenGLPaintDevice>
+#include <QPainter>
+#include <QPainterPath>
+#include <QScreen>
+#include <QTimer>
+
+#include <qmath.h>
+
+PaintedWindow::PaintedWindow()
+{
+ QSurfaceFormat format;
+ format.setStencilBufferSize(8);
+ format.setSamples(4);
+
+ setSurfaceType(QWindow::OpenGLSurface);
+ setFlags(Qt::Window | Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
+ setFormat(format);
+
+ create();
+
+ m_context = new QOpenGLContext(this);
+ m_context->setFormat(format);
+ m_context->create();
+
+ m_animation = new QPropertyAnimation(this, "rotation");
+ m_animation->setStartValue(qreal(0));
+ m_animation->setEndValue(qreal(1));
+ m_animation->setDuration(500);
+
+ QRect screenGeometry = screen()->availableGeometry();
+
+ QPoint center = screenGeometry.center();
+ QRect windowRect = screen()->isLandscape(screen()->orientation()) ? QRect(0, 0, 640, 480) : QRect(0, 0, 480, 640);
+ setGeometry(QRect(center - windowRect.center(), windowRect.size()));
+
+ m_rotation = 0;
+
+ reportContentOrientationChange(screen()->orientation());
+
+ m_targetOrientation = contentOrientation();
+ m_nextTargetOrientation = Qt::PrimaryOrientation;
+
+ connect(screen(), &QScreen::orientationChanged, this, &PaintedWindow::orientationChanged);
+ connect(m_animation, &QAbstractAnimation::finished, this, &PaintedWindow::rotationDone);
+ connect(this, &PaintedWindow::rotationChanged, this, QOverload<>::of(&PaintedWindow::paint));
+}
+
+void PaintedWindow::exposeEvent(QExposeEvent *)
+{
+ if (isExposed())
+ paint();
+}
+
+void PaintedWindow::mousePressEvent(QMouseEvent *)
+{
+ Qt::ScreenOrientation o = contentOrientation();
+ switch (o) {
+ case Qt::LandscapeOrientation:
+ orientationChanged(Qt::PortraitOrientation);
+ break;
+ case Qt::PortraitOrientation:
+ orientationChanged(Qt::InvertedLandscapeOrientation);
+ break;
+ case Qt::InvertedLandscapeOrientation:
+ orientationChanged(Qt::InvertedPortraitOrientation);
+ break;
+ case Qt::InvertedPortraitOrientation:
+ orientationChanged(Qt::LandscapeOrientation);
+ break;
+ default:
+ Q_ASSERT(false);
+ }
+
+ paint();
+}
+
+void PaintedWindow::orientationChanged(Qt::ScreenOrientation newOrientation)
+{
+ if (contentOrientation() == newOrientation)
+ return;
+
+ if (m_animation->state() == QAbstractAnimation::Running) {
+ m_nextTargetOrientation = newOrientation;
+ return;
+ }
+
+ QRect rect(0, 0, width(), height());
+
+ m_prevImage = QImage(width(), height(), QImage::Format_ARGB32_Premultiplied);
+ m_nextImage = QImage(width(), height(), QImage::Format_ARGB32_Premultiplied);
+ m_prevImage.fill(0);
+ m_nextImage.fill(0);
+
+ QPainter p;
+ p.begin(&m_prevImage);
+ p.setTransform(screen()->transformBetween(contentOrientation(), screen()->orientation(), rect));
+ paint(&p, screen()->mapBetween(contentOrientation(), screen()->orientation(), rect));
+ p.end();
+
+ p.begin(&m_nextImage);
+ p.setTransform(screen()->transformBetween(newOrientation, screen()->orientation(), rect));
+ paint(&p, screen()->mapBetween(newOrientation, screen()->orientation(), rect));
+ p.end();
+
+ m_deltaRotation = screen()->angleBetween(newOrientation, contentOrientation());
+ if (m_deltaRotation > 180)
+ m_deltaRotation = 180 - m_deltaRotation;
+
+ m_targetOrientation = newOrientation;
+ m_animation->start();
+}
+
+void PaintedWindow::rotationDone()
+{
+ reportContentOrientationChange(m_targetOrientation);
+ if (m_nextTargetOrientation != Qt::PrimaryOrientation) {
+ Q_ASSERT(m_animation->state() != QAbstractAnimation::Running);
+ orientationChanged(m_nextTargetOrientation);
+ m_nextTargetOrientation = Qt::PrimaryOrientation;
+ }
+}
+
+void PaintedWindow::setRotation(qreal r)
+{
+ if (r != m_rotation) {
+ m_rotation = r;
+ emit rotationChanged(r);
+ }
+}
+
+void PaintedWindow::paint()
+{
+ m_context->makeCurrent(this);
+
+ QRect rect(0, 0, width() * devicePixelRatio(), height() * devicePixelRatio());
+
+ QOpenGLPaintDevice device(size() * devicePixelRatio());
+ QPainter painter(&device);
+
+ QPainterPath path;
+ path.addEllipse(rect);
+ painter.setCompositionMode(QPainter::CompositionMode_Source);
+ painter.fillRect(rect, Qt::transparent);
+ painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
+ painter.fillPath(path, Qt::blue);
+
+ if (contentOrientation() != m_targetOrientation) {
+ painter.setRenderHint(QPainter::SmoothPixmapTransform);
+ painter.save();
+ painter.translate(width() / 2, height() / 2);
+ painter.rotate(m_deltaRotation * m_rotation);
+ painter.translate(-width() / 2, -height() / 2);
+ painter.drawImage(0, 0, m_prevImage);
+ painter.restore();
+ painter.translate(width() / 2, height() / 2);
+ painter.rotate(m_deltaRotation * m_rotation - m_deltaRotation);
+ painter.translate(-width() / 2, -height() / 2);
+ painter.setOpacity(m_rotation);
+ painter.drawImage(0, 0, m_nextImage);
+ } else {
+ QRect mapped = screen()->mapBetween(contentOrientation(), screen()->orientation(), rect);
+
+ painter.setTransform(screen()->transformBetween(contentOrientation(), screen()->orientation(), rect));
+ paint(&painter, mapped);
+ painter.end();
+ }
+
+ m_context->swapBuffers(this);
+}
+
+void PaintedWindow::paint(QPainter *painter, const QRect &rect)
+{
+ painter->setRenderHint(QPainter::Antialiasing);
+ QFont font;
+ font.setPixelSize(64);
+ painter->setFont(font);
+ painter->drawText(rect, Qt::AlignCenter, "Hello");
+}
diff --git a/tests/manual/examples/opengl/paintedwindow/paintedwindow.h b/tests/manual/examples/opengl/paintedwindow/paintedwindow.h
new file mode 100644
index 0000000000..11a76a3056
--- /dev/null
+++ b/tests/manual/examples/opengl/paintedwindow/paintedwindow.h
@@ -0,0 +1,62 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PAINTEDWINDOW_H
+#define PAINTEDWINDOW_H
+
+#include <QWindow>
+
+#include <QtGui/qopengl.h>
+#include <QtOpenGL/qopenglshaderprogram.h>
+#include <QtOpenGL/qopenglframebufferobject.h>
+
+#include <QPropertyAnimation>
+
+#include <QColor>
+#include <QImage>
+#include <QTime>
+
+QT_BEGIN_NAMESPACE
+class QOpenGLContext;
+QT_END_NAMESPACE
+
+class PaintedWindow : public QWindow
+{
+ Q_OBJECT
+ Q_PROPERTY(qreal rotation READ rotation WRITE setRotation NOTIFY rotationChanged)
+
+public:
+ PaintedWindow();
+
+ qreal rotation() const { return m_rotation; }
+
+signals:
+ void rotationChanged(qreal rotation);
+
+private slots:
+ void paint();
+ void setRotation(qreal r);
+ void orientationChanged(Qt::ScreenOrientation newOrientation);
+ void rotationDone();
+
+private:
+ void exposeEvent(QExposeEvent *) override;
+ void mousePressEvent(QMouseEvent *) override;
+
+ void paint(QPainter *painter, const QRect &rect);
+
+ QOpenGLContext *m_context;
+ qreal m_rotation;
+
+ QImage m_prevImage;
+ QImage m_nextImage;
+ qreal m_deltaRotation;
+
+ Qt::ScreenOrientation m_targetOrientation;
+ Qt::ScreenOrientation m_nextTargetOrientation;
+
+ QPropertyAnimation *m_animation;
+ QTimer *m_paintTimer;
+};
+
+#endif // PAINTEDWINDOW_H
diff --git a/tests/manual/examples/opengl/paintedwindow/paintedwindow.pro b/tests/manual/examples/opengl/paintedwindow/paintedwindow.pro
new file mode 100644
index 0000000000..569eebe674
--- /dev/null
+++ b/tests/manual/examples/opengl/paintedwindow/paintedwindow.pro
@@ -0,0 +1,8 @@
+QT += opengl
+
+HEADERS += paintedwindow.h
+SOURCES += paintedwindow.cpp main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/opengl/paintedwindow
+INSTALLS += target
diff --git a/tests/manual/examples/opengl/qopenglwidget/CMakeLists.txt b/tests/manual/examples/opengl/qopenglwidget/CMakeLists.txt
new file mode 100644
index 0000000000..d6e9c268ff
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwidget/CMakeLists.txt
@@ -0,0 +1,53 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(qopenglwidget LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/opengl/qopenglwidget")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL OpenGLWidgets Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(qopenglwidget
+ bubble.cpp bubble.h
+ glwidget.cpp glwidget.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+)
+
+set_target_properties(qopenglwidget PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(qopenglwidget PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::OpenGL
+ Qt6::OpenGLWidgets
+ Qt6::Widgets
+)
+
+# Resources:
+set(texture_resource_files
+ "qt.png"
+)
+
+qt6_add_resources(qopenglwidget "texture"
+ PREFIX
+ "/"
+ FILES
+ ${texture_resource_files}
+)
+
+install(TARGETS qopenglwidget
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/opengl/qopenglwidget/bubble.cpp b/tests/manual/examples/opengl/qopenglwidget/bubble.cpp
new file mode 100644
index 0000000000..3c32b62113
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwidget/bubble.cpp
@@ -0,0 +1,99 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+
+#include "bubble.h"
+
+Bubble::Bubble(const QPointF &position, qreal radius, const QPointF &velocity)
+ : position(position), vel(velocity), radius(radius)
+{
+ innerColor = randomColor();
+ outerColor = randomColor();
+ updateBrush();
+}
+
+//! [0]
+void Bubble::updateCache()
+{
+ delete cache;
+ cache = new QImage(qRound(radius * 2 + 2), qRound(radius * 2 + 2), QImage::Format_ARGB32_Premultiplied);
+ cache->fill(0x00000000);
+ QPainter p(cache);
+ p.setRenderHint(QPainter::Antialiasing);
+ QPen pen(Qt::white);
+ pen.setWidth(2);
+ p.setPen(pen);
+ p.setBrush(brush);
+ p.drawEllipse(1, 1, int(2*radius), int(2*radius));
+}
+//! [0]
+
+Bubble::~Bubble()
+{
+ delete cache;
+}
+
+void Bubble::updateBrush()
+{
+ QRadialGradient gradient(QPointF(radius, radius), radius,
+ QPointF(radius*0.5, radius*0.5));
+
+ gradient.setColorAt(0, QColor(255, 255, 255, 255));
+ gradient.setColorAt(0.25, innerColor);
+ gradient.setColorAt(1, outerColor);
+ brush = QBrush(gradient);
+ updateCache();
+}
+
+//! [1]
+void Bubble::drawBubble(QPainter *painter)
+{
+ painter->save();
+ painter->translate(position.x() - radius, position.y() - radius);
+ painter->setOpacity(0.8);
+ painter->drawImage(0, 0, *cache);
+ painter->restore();
+}
+//! [1]
+
+QColor Bubble::randomColor()
+{
+ int red = int(185 + QRandomGenerator::global()->bounded(70));
+ int green = int(185 + QRandomGenerator::global()->bounded(70));
+ int blue = int(205 + QRandomGenerator::global()->bounded(50));
+ int alpha = int(91 + QRandomGenerator::global()->bounded(100));
+
+ return QColor(red, green, blue, alpha);
+}
+
+void Bubble::move(const QRect &bbox)
+{
+ position += vel;
+ qreal leftOverflow = position.x() - radius - bbox.left();
+ qreal rightOverflow = position.x() + radius - bbox.right();
+ qreal topOverflow = position.y() - radius - bbox.top();
+ qreal bottomOverflow = position.y() + radius - bbox.bottom();
+
+ if (leftOverflow < 0.0) {
+ position.setX(position.x() - 2 * leftOverflow);
+ vel.setX(-vel.x());
+ } else if (rightOverflow > 0.0) {
+ position.setX(position.x() - 2 * rightOverflow);
+ vel.setX(-vel.x());
+ }
+
+ if (topOverflow < 0.0) {
+ position.setY(position.y() - 2 * topOverflow);
+ vel.setY(-vel.y());
+ } else if (bottomOverflow > 0.0) {
+ position.setY(position.y() - 2 * bottomOverflow);
+ vel.setY(-vel.y());
+ }
+}
+
+QRectF Bubble::rect()
+{
+ return QRectF(position.x() - radius, position.y() - radius,
+ 2 * radius, 2 * radius);
+}
diff --git a/tests/manual/examples/opengl/qopenglwidget/bubble.h b/tests/manual/examples/opengl/qopenglwidget/bubble.h
new file mode 100644
index 0000000000..47355ead41
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwidget/bubble.h
@@ -0,0 +1,39 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BUBBLE_H
+#define BUBBLE_H
+
+#include <QBrush>
+#include <QColor>
+#include <QPointF>
+#include <QRect>
+#include <QRectF>
+
+QT_FORWARD_DECLARE_CLASS(QPainter)
+
+class Bubble
+{
+public:
+ Bubble(const QPointF &position, qreal radius, const QPointF &velocity);
+ ~Bubble();
+
+ void drawBubble(QPainter *painter);
+ void updateBrush();
+ void move(const QRect &bbox);
+ void updateCache();
+ QRectF rect();
+
+private:
+ QColor randomColor();
+
+ QBrush brush;
+ QPointF position;
+ QPointF vel;
+ qreal radius;
+ QColor innerColor;
+ QColor outerColor;
+ QImage *cache = nullptr;
+};
+
+#endif
diff --git a/tests/manual/examples/opengl/qopenglwidget/glwidget.cpp b/tests/manual/examples/opengl/qopenglwidget/glwidget.cpp
new file mode 100644
index 0000000000..e2a3ea4fc5
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwidget/glwidget.cpp
@@ -0,0 +1,540 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "glwidget.h"
+#include <QPainter>
+#include <QPaintEngine>
+#include <QOpenGLShaderProgram>
+#include <QOpenGLTexture>
+#include <QRandomGenerator>
+#include <QCoreApplication>
+#include <qmath.h>
+
+#include "mainwindow.h"
+#include "bubble.h"
+
+const int bubbleNum = 8;
+
+#ifndef GL_SRGB8_ALPHA8
+#define GL_SRGB8_ALPHA8 0x8C43
+#endif
+
+GLWidget::GLWidget(MainWindow *maybeMainWindow, const QColor &background)
+ : m_mainWindow(maybeMainWindow),
+ m_background(background)
+{
+ setMinimumSize(300, 250);
+ if (QCoreApplication::arguments().contains(QStringLiteral("--srgb")))
+ setTextureFormat(GL_SRGB8_ALPHA8);
+}
+
+GLWidget::~GLWidget()
+{
+ reset();
+}
+
+void GLWidget::reset()
+{
+ qDeleteAll(m_bubbles);
+ // Leave everything in a state suitable for a subsequent call to
+ // initialize(). This matters when coming from the context's
+ // aboutToBeDestroyed signal, would not matter when invoked from the
+ // destructor.
+ m_bubbles.clear();
+
+ // And now release all OpenGL resources.
+ makeCurrent();
+ delete m_texture;
+ m_texture = nullptr;
+ delete m_program1;
+ m_program1 = nullptr;
+ delete m_program2;
+ m_program2 = nullptr;
+ delete m_vshader1;
+ m_vshader1 = nullptr;
+ delete m_fshader1;
+ m_fshader1 = nullptr;
+ delete m_vshader2;
+ m_vshader2 = nullptr;
+ delete m_fshader2;
+ m_fshader2 = nullptr;
+ m_vbo1.destroy();
+ m_vbo2.destroy();
+ doneCurrent();
+
+ // We are done with the current QOpenGLContext, forget it. If there is a
+ // subsequent initialize(), that will then connect to the new context.
+ QObject::disconnect(m_contextWatchConnection);
+}
+
+void GLWidget::setScaling(int scale)
+{
+ if (scale > 30)
+ m_fScale = 1 + qreal(scale - 30) / 30 * 0.25;
+ else if (scale < 30)
+ m_fScale = 1 - (qreal(30 - scale) / 30 * 0.25);
+ else
+ m_fScale = 1;
+}
+
+void GLWidget::setLogo()
+{
+ m_qtLogo = true;
+}
+
+void GLWidget::setTexture()
+{
+ m_qtLogo = false;
+}
+
+void GLWidget::setShowBubbles(bool bubbles)
+{
+ m_showBubbles = bubbles;
+}
+
+void GLWidget::paintQtLogo()
+{
+ m_program1->enableAttributeArray(m_vertexAttr1);
+ m_program1->enableAttributeArray(m_normalAttr1);
+
+ m_vbo1.bind();
+ // The data in the buffer is placed like this:
+ // vertex1.x, vertex1.y, vertex1.z, normal1.x, normal1.y, normal1.z, vertex2.x, ...
+ m_program1->setAttributeBuffer(m_vertexAttr1, GL_FLOAT, 0, 3, 6 * sizeof(GLfloat));
+ m_program1->setAttributeBuffer(m_normalAttr1, GL_FLOAT, 3 * sizeof(GLfloat), 3, 6 * sizeof(GLfloat));
+ m_vbo1.release();
+
+ glDrawArrays(GL_TRIANGLES, 0, m_vertices.size());
+
+ m_program1->disableAttributeArray(m_normalAttr1);
+ m_program1->disableAttributeArray(m_vertexAttr1);
+}
+
+void GLWidget::paintTexturedCube()
+{
+ m_texture->bind();
+
+ if (!m_vbo2.isCreated()) {
+ static GLfloat afVertices[] = {
+ -0.5, 0.5, 0.5, 0.5,-0.5,0.5,-0.5,-0.5,0.5,
+ 0.5, -0.5, 0.5, -0.5,0.5,0.5,0.5,0.5,0.5,
+ -0.5, -0.5, -0.5, 0.5,-0.5,-0.5,-0.5,0.5,-0.5,
+ 0.5, 0.5, -0.5, -0.5,0.5,-0.5,0.5,-0.5,-0.5,
+
+ 0.5, -0.5, -0.5, 0.5,-0.5,0.5,0.5,0.5,-0.5,
+ 0.5, 0.5, 0.5, 0.5,0.5,-0.5,0.5,-0.5,0.5,
+ -0.5, 0.5, -0.5, -0.5,-0.5,0.5,-0.5,-0.5,-0.5,
+ -0.5, -0.5, 0.5, -0.5,0.5,-0.5,-0.5,0.5,0.5,
+
+ 0.5, 0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, -0.5,
+ -0.5, 0.5, 0.5, 0.5, 0.5, -0.5, 0.5, 0.5, 0.5,
+ -0.5, -0.5, -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, -0.5,
+ 0.5, -0.5, 0.5, 0.5, -0.5, -0.5, -0.5, -0.5, 0.5
+ };
+
+ static GLfloat afTexCoord[] = {
+ 0.0f,0.0f, 1.0f,1.0f, 1.0f,0.0f,
+ 1.0f,1.0f, 0.0f,0.0f, 0.0f,1.0f,
+ 1.0f,1.0f, 1.0f,0.0f, 0.0f,1.0f,
+ 0.0f,0.0f, 0.0f,1.0f, 1.0f,0.0f,
+
+ 1.0f,1.0f, 1.0f,0.0f, 0.0f,1.0f,
+ 0.0f,0.0f, 0.0f,1.0f, 1.0f,0.0f,
+ 0.0f,0.0f, 1.0f,1.0f, 1.0f,0.0f,
+ 1.0f,1.0f, 0.0f,0.0f, 0.0f,1.0f,
+
+ 0.0f,1.0f, 1.0f,0.0f, 1.0f,1.0f,
+ 1.0f,0.0f, 0.0f,1.0f, 0.0f,0.0f,
+ 1.0f,0.0f, 1.0f,1.0f, 0.0f,0.0f,
+ 0.0f,1.0f, 0.0f,0.0f, 1.0f,1.0f
+ };
+
+ GLfloat afNormals[] = {
+
+ 0,0,-1, 0,0,-1, 0,0,-1,
+ 0,0,-1, 0,0,-1, 0,0,-1,
+ 0,0,1, 0,0,1, 0,0,1,
+ 0,0,1, 0,0,1, 0,0,1,
+
+ -1,0,0, -1,0,0, -1,0,0,
+ -1,0,0, -1,0,0, -1,0,0,
+ 1,0,0, 1,0,0, 1,0,0,
+ 1,0,0, 1,0,0, 1,0,0,
+
+ 0,-1,0, 0,-1,0, 0,-1,0,
+ 0,-1,0, 0,-1,0, 0,-1,0,
+ 0,1,0, 0,1,0, 0,1,0,
+ 0,1,0, 0,1,0, 0,1,0
+ };
+
+ m_vbo2.create();
+ m_vbo2.bind();
+ m_vbo2.allocate(36 * 8 * sizeof(GLfloat));
+ m_vbo2.write(0, afVertices, sizeof(afVertices));
+ m_vbo2.write(sizeof(afVertices), afTexCoord, sizeof(afTexCoord));
+ m_vbo2.write(sizeof(afVertices) + sizeof(afTexCoord), afNormals, sizeof(afNormals));
+ m_vbo2.release();
+ }
+
+ m_program2->setUniformValue(m_textureUniform2, 0); // use texture unit 0
+
+ m_program2->enableAttributeArray(m_vertexAttr2);
+ m_program2->enableAttributeArray(m_normalAttr2);
+ m_program2->enableAttributeArray(m_texCoordAttr2);
+
+ m_vbo2.bind();
+ // In the buffer we first have 36 vertices (3 floats for each), then 36 texture
+ // coordinates (2 floats for each), then 36 normals (3 floats for each).
+ m_program2->setAttributeBuffer(m_vertexAttr2, GL_FLOAT, 0, 3);
+ m_program2->setAttributeBuffer(m_texCoordAttr2, GL_FLOAT, 36 * 3 * sizeof(GLfloat), 2);
+ m_program2->setAttributeBuffer(m_normalAttr2, GL_FLOAT, 36 * 5 * sizeof(GLfloat), 3);
+ m_vbo2.release();
+
+ glDrawArrays(GL_TRIANGLES, 0, 36);
+
+ m_program2->disableAttributeArray(m_vertexAttr2);
+ m_program2->disableAttributeArray(m_normalAttr2);
+ m_program2->disableAttributeArray(m_texCoordAttr2);
+}
+
+void GLWidget::initializeGL()
+{
+ initializeOpenGLFunctions();
+
+ m_texture = new QOpenGLTexture(QImage(":/qt.png"));
+
+ m_vshader1 = new QOpenGLShader(QOpenGLShader::Vertex);
+ const char *vsrc1 =
+ "attribute highp vec4 vertex;\n"
+ "attribute mediump vec3 normal;\n"
+ "uniform mediump mat4 matrix;\n"
+ "varying mediump vec4 color;\n"
+ "void main(void)\n"
+ "{\n"
+ " vec3 toLight = normalize(vec3(0.0, 0.3, 1.0));\n"
+ " float angle = max(dot(normal, toLight), 0.0);\n"
+ " vec3 col = vec3(0.40, 1.0, 0.0);\n"
+ " color = vec4(col * 0.2 + col * 0.8 * angle, 1.0);\n"
+ " color = clamp(color, 0.0, 1.0);\n"
+ " gl_Position = matrix * vertex;\n"
+ "}\n";
+ m_vshader1->compileSourceCode(vsrc1);
+
+ m_fshader1 = new QOpenGLShader(QOpenGLShader::Fragment);
+ const char *fsrc1 =
+ "varying mediump vec4 color;\n"
+ "void main(void)\n"
+ "{\n"
+ " gl_FragColor = color;\n"
+ "}\n";
+ m_fshader1->compileSourceCode(fsrc1);
+
+ m_program1 = new QOpenGLShaderProgram;
+ m_program1->addShader(m_vshader1);
+ m_program1->addShader(m_fshader1);
+ m_program1->link();
+
+ m_vertexAttr1 = m_program1->attributeLocation("vertex");
+ m_normalAttr1 = m_program1->attributeLocation("normal");
+ m_matrixUniform1 = m_program1->uniformLocation("matrix");
+
+ m_vshader2 = new QOpenGLShader(QOpenGLShader::Vertex);
+ const char *vsrc2 =
+ "attribute highp vec4 vertex;\n"
+ "attribute highp vec4 texCoord;\n"
+ "attribute mediump vec3 normal;\n"
+ "uniform mediump mat4 matrix;\n"
+ "varying highp vec4 texc;\n"
+ "varying mediump float angle;\n"
+ "void main(void)\n"
+ "{\n"
+ " vec3 toLight = normalize(vec3(0.0, 0.3, 1.0));\n"
+ " angle = max(dot(normal, toLight), 0.0);\n"
+ " gl_Position = matrix * vertex;\n"
+ " texc = texCoord;\n"
+ "}\n";
+ m_vshader2->compileSourceCode(vsrc2);
+
+ m_fshader2 = new QOpenGLShader(QOpenGLShader::Fragment);
+ const char *fsrc2 =
+ "varying highp vec4 texc;\n"
+ "uniform sampler2D tex;\n"
+ "varying mediump float angle;\n"
+ "void main(void)\n"
+ "{\n"
+ " highp vec3 color = texture2D(tex, texc.st).rgb;\n"
+ " color = color * 0.2 + color * 0.8 * angle;\n"
+ " gl_FragColor = vec4(clamp(color, 0.0, 1.0), 1.0);\n"
+ "}\n";
+ m_fshader2->compileSourceCode(fsrc2);
+
+ m_program2 = new QOpenGLShaderProgram;
+ m_program2->addShader(m_vshader2);
+ m_program2->addShader(m_fshader2);
+ m_program2->link();
+
+ m_vertexAttr2 = m_program2->attributeLocation("vertex");
+ m_normalAttr2 = m_program2->attributeLocation("normal");
+ m_texCoordAttr2 = m_program2->attributeLocation("texCoord");
+ m_matrixUniform2 = m_program2->uniformLocation("matrix");
+ m_textureUniform2 = m_program2->uniformLocation("tex");
+
+ m_fAngle = 0;
+ m_fScale = 1;
+
+ createGeometry();
+
+ // Use a vertex buffer object. Client-side pointers are old-school and should be avoided.
+ m_vbo1.create();
+ m_vbo1.bind();
+ // For the cube all the data belonging to the texture coordinates and
+ // normals is placed separately, after the vertices. Here, for the Qt logo,
+ // let's do something different and potentially more efficient: create a
+ // properly interleaved data set.
+ const int vertexCount = m_vertices.count();
+ QList<GLfloat> buf;
+ buf.resize(vertexCount * 3 * 2);
+ GLfloat *p = buf.data();
+ for (int i = 0; i < vertexCount; ++i) {
+ *p++ = m_vertices[i].x();
+ *p++ = m_vertices[i].y();
+ *p++ = m_vertices[i].z();
+ *p++ = m_normals[i].x();
+ *p++ = m_normals[i].y();
+ *p++ = m_normals[i].z();
+ }
+ m_vbo1.allocate(buf.constData(), buf.count() * sizeof(GLfloat));
+ m_vbo1.release();
+
+ createBubbles(bubbleNum - m_bubbles.count());
+
+ // A well-behaved QOpenGLWidget releases OpenGL resources not only upon
+ // destruction, but also when the associated OpenGL context disappears. If
+ // the widget continues to exist, the context's destruction will be
+ // followed by a call to initialize(). This is not strictly mandatory in
+ // widgets that never change their parents.
+ m_contextWatchConnection = QObject::connect(context(), &QOpenGLContext::aboutToBeDestroyed, context(), [this] { reset(); });
+}
+
+void GLWidget::paintGL()
+{
+ createBubbles(bubbleNum - m_bubbles.count());
+
+ QPainter painter;
+ painter.begin(this);
+
+ painter.beginNativePainting();
+
+ glClearColor(m_background.redF(), m_background.greenF(), m_background.blueF(), m_transparent ? 0.0f : 1.0f);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glFrontFace(GL_CW);
+ glCullFace(GL_FRONT);
+ glEnable(GL_CULL_FACE);
+ glEnable(GL_DEPTH_TEST);
+
+ QMatrix4x4 modelview;
+ modelview.rotate(m_fAngle, 0.0f, 1.0f, 0.0f);
+ modelview.rotate(m_fAngle, 1.0f, 0.0f, 0.0f);
+ modelview.rotate(m_fAngle, 0.0f, 0.0f, 1.0f);
+ modelview.scale(m_fScale);
+ modelview.translate(0.0f, -0.2f, 0.0f);
+
+ if (m_qtLogo) {
+ m_program1->bind();
+ m_program1->setUniformValue(m_matrixUniform1, modelview);
+ paintQtLogo();
+ m_program1->release();
+ } else {
+ m_program2->bind();
+ m_program2->setUniformValue(m_matrixUniform2, modelview);
+ paintTexturedCube();
+ m_program2->release();
+ }
+
+ glDisable(GL_DEPTH_TEST);
+ glDisable(GL_CULL_FACE);
+
+ painter.endNativePainting();
+
+ if (m_showBubbles) {
+ for (Bubble *bubble : std::as_const(m_bubbles))
+ bubble->drawBubble(&painter);
+ }
+
+ if (const int elapsed = m_time.elapsed()) {
+ QString framesPerSecond;
+ framesPerSecond.setNum(m_frames /(elapsed / 1000.0), 'f', 2);
+ painter.setPen(m_transparent ? Qt::black : Qt::white);
+ painter.drawText(20, 40, framesPerSecond + " paintGL calls / s");
+ }
+
+ painter.end();
+
+ for (Bubble *bubble : std::as_const(m_bubbles))
+ bubble->move(rect());
+
+ if (!(m_frames % 100)) {
+ m_time.start();
+ m_frames = 0;
+ }
+ m_fAngle += 1.0f;
+ ++m_frames;
+
+ // When requested, follow the ideal way to animate: Rely on
+ // blocking swap and just schedule updates continuously.
+ if (!m_mainWindow || !m_mainWindow->timerEnabled())
+ update();
+}
+
+void GLWidget::createBubbles(int number)
+{
+ for (int i = 0; i < number; ++i) {
+ QPointF position(width()*(0.1 + QRandomGenerator::global()->bounded(0.8)),
+ height()*(0.1 + QRandomGenerator::global()->bounded(0.8)));
+ qreal radius = qMin(width(), height())*(0.0175 + QRandomGenerator::global()->bounded(0.0875));
+ QPointF velocity(width()*0.0175*(-0.5 + QRandomGenerator::global()->bounded(1.0)),
+ height()*0.0175*(-0.5 + QRandomGenerator::global()->bounded(1.0)));
+
+ m_bubbles.append(new Bubble(position, radius, velocity));
+ }
+}
+
+void GLWidget::createGeometry()
+{
+ m_vertices.clear();
+ m_normals.clear();
+
+ qreal x1 = +0.06f;
+ qreal y1 = -0.14f;
+ qreal x2 = +0.14f;
+ qreal y2 = -0.06f;
+ qreal x3 = +0.08f;
+ qreal y3 = +0.00f;
+ qreal x4 = +0.30f;
+ qreal y4 = +0.22f;
+
+ quad(x1, y1, x2, y2, y2, x2, y1, x1);
+ quad(x3, y3, x4, y4, y4, x4, y3, x3);
+
+ extrude(x1, y1, x2, y2);
+ extrude(x2, y2, y2, x2);
+ extrude(y2, x2, y1, x1);
+ extrude(y1, x1, x1, y1);
+ extrude(x3, y3, x4, y4);
+ extrude(x4, y4, y4, x4);
+ extrude(y4, x4, y3, x3);
+
+ const int NumSectors = 100;
+ const qreal sectorAngle = 2 * qreal(M_PI) / NumSectors;
+
+ for (int i = 0; i < NumSectors; ++i) {
+ qreal angle = i * sectorAngle;
+ qreal x5 = 0.30 * sin(angle);
+ qreal y5 = 0.30 * cos(angle);
+ qreal x6 = 0.20 * sin(angle);
+ qreal y6 = 0.20 * cos(angle);
+
+ angle += sectorAngle;
+ qreal x7 = 0.20 * sin(angle);
+ qreal y7 = 0.20 * cos(angle);
+ qreal x8 = 0.30 * sin(angle);
+ qreal y8 = 0.30 * cos(angle);
+
+ quad(x5, y5, x6, y6, x7, y7, x8, y8);
+
+ extrude(x6, y6, x7, y7);
+ extrude(x8, y8, x5, y5);
+ }
+
+ for (int i = 0;i < m_vertices.size();i++)
+ m_vertices[i] *= 2.0f;
+}
+
+void GLWidget::quad(qreal x1, qreal y1, qreal x2, qreal y2, qreal x3, qreal y3, qreal x4, qreal y4)
+{
+ m_vertices << QVector3D(x1, y1, -0.05f);
+ m_vertices << QVector3D(x2, y2, -0.05f);
+ m_vertices << QVector3D(x4, y4, -0.05f);
+
+ m_vertices << QVector3D(x3, y3, -0.05f);
+ m_vertices << QVector3D(x4, y4, -0.05f);
+ m_vertices << QVector3D(x2, y2, -0.05f);
+
+ QVector3D n = QVector3D::normal
+ (QVector3D(x2 - x1, y2 - y1, 0.0f), QVector3D(x4 - x1, y4 - y1, 0.0f));
+
+ m_normals << n;
+ m_normals << n;
+ m_normals << n;
+
+ m_normals << n;
+ m_normals << n;
+ m_normals << n;
+
+ m_vertices << QVector3D(x4, y4, 0.05f);
+ m_vertices << QVector3D(x2, y2, 0.05f);
+ m_vertices << QVector3D(x1, y1, 0.05f);
+
+ m_vertices << QVector3D(x2, y2, 0.05f);
+ m_vertices << QVector3D(x4, y4, 0.05f);
+ m_vertices << QVector3D(x3, y3, 0.05f);
+
+ n = QVector3D::normal
+ (QVector3D(x2 - x4, y2 - y4, 0.0f), QVector3D(x1 - x4, y1 - y4, 0.0f));
+
+ m_normals << n;
+ m_normals << n;
+ m_normals << n;
+
+ m_normals << n;
+ m_normals << n;
+ m_normals << n;
+}
+
+void GLWidget::extrude(qreal x1, qreal y1, qreal x2, qreal y2)
+{
+ m_vertices << QVector3D(x1, y1, +0.05f);
+ m_vertices << QVector3D(x2, y2, +0.05f);
+ m_vertices << QVector3D(x1, y1, -0.05f);
+
+ m_vertices << QVector3D(x2, y2, -0.05f);
+ m_vertices << QVector3D(x1, y1, -0.05f);
+ m_vertices << QVector3D(x2, y2, +0.05f);
+
+ QVector3D n = QVector3D::normal
+ (QVector3D(x2 - x1, y2 - y1, 0.0f), QVector3D(0.0f, 0.0f, -0.1f));
+
+ m_normals << n;
+ m_normals << n;
+ m_normals << n;
+
+ m_normals << n;
+ m_normals << n;
+ m_normals << n;
+}
+
+void GLWidget::setTransparent(bool transparent)
+{
+ setAttribute(Qt::WA_AlwaysStackOnTop, transparent);
+ m_transparent = transparent;
+ // Call update() on the top-level window after toggling AlwayStackOnTop to make sure
+ // the entire backingstore is updated accordingly.
+ window()->update();
+}
+
+void GLWidget::resizeGL(int, int)
+{
+ if (m_mainWindow) {
+ if (!m_btn) {
+ m_btn = new QPushButton("\nAdd widget\n", this);
+ connect(m_btn, &QPushButton::clicked, this, [this] { m_mainWindow->addNew(); });
+ }
+ m_btn->move(20, 80);
+ if (!m_btn2) {
+ m_btn2 = new QPushButton("\nI prefer tabbed widgets\n", this);
+ connect(m_btn2, &QPushButton::clicked, this, [this] { m_mainWindow->showNewWindow(); });
+ }
+ m_btn2->move(20, 160);
+ }
+}
diff --git a/tests/manual/examples/opengl/qopenglwidget/glwidget.h b/tests/manual/examples/opengl/qopenglwidget/glwidget.h
new file mode 100644
index 0000000000..de9d11b94c
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwidget/glwidget.h
@@ -0,0 +1,85 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef GLWIDGET_H
+#define GLWIDGET_H
+
+#include <QOpenGLWidget>
+#include <QOpenGLFunctions>
+#include <QOpenGLBuffer>
+#include <QVector3D>
+#include <QMatrix4x4>
+#include <QElapsedTimer>
+#include <QList>
+#include <QPushButton>
+
+class Bubble;
+class MainWindow;
+
+QT_FORWARD_DECLARE_CLASS(QOpenGLTexture)
+QT_FORWARD_DECLARE_CLASS(QOpenGLShader)
+QT_FORWARD_DECLARE_CLASS(QOpenGLShaderProgram)
+
+class GLWidget : public QOpenGLWidget, protected QOpenGLFunctions
+{
+ Q_OBJECT
+public:
+ GLWidget(MainWindow *maybeMainWindow, const QColor &background);
+ ~GLWidget();
+
+public slots:
+ void setScaling(int scale);
+ void setLogo();
+ void setTexture();
+ void setShowBubbles(bool);
+ void setTransparent(bool transparent);
+
+protected:
+ void resizeGL(int w, int h) override;
+ void paintGL() override;
+ void initializeGL() override;
+
+private:
+ void paintTexturedCube();
+ void paintQtLogo();
+ void createGeometry();
+ void createBubbles(int number);
+ void quad(qreal x1, qreal y1, qreal x2, qreal y2, qreal x3, qreal y3, qreal x4, qreal y4);
+ void extrude(qreal x1, qreal y1, qreal x2, qreal y2);
+ void reset();
+
+ MainWindow *m_mainWindow;
+ qreal m_fAngle = 0;
+ qreal m_fScale = 1;
+ bool m_showBubbles = true;
+ QList<QVector3D> m_vertices;
+ QList<QVector3D> m_normals;
+ bool m_qtLogo = true;
+ QList<Bubble *> m_bubbles;
+ int m_frames = 0;
+ QElapsedTimer m_time;
+ QOpenGLShader *m_vshader1 = nullptr;
+ QOpenGLShader *m_fshader1 = nullptr;
+ QOpenGLShader *m_vshader2 = nullptr;
+ QOpenGLShader *m_fshader2 = nullptr;
+ QOpenGLShaderProgram *m_program1 = nullptr;
+ QOpenGLShaderProgram *m_program2 = nullptr;
+ QOpenGLTexture *m_texture = nullptr;
+ QOpenGLBuffer m_vbo1;
+ QOpenGLBuffer m_vbo2;
+ int m_vertexAttr1 = 0;
+ int m_normalAttr1 = 0;
+ int m_matrixUniform1 = 0;
+ int m_vertexAttr2 = 0;
+ int m_normalAttr2 = 0;
+ int m_texCoordAttr2 = 0;
+ int m_matrixUniform2 = 0;
+ int m_textureUniform2 = 0;
+ bool m_transparent = false;
+ QPushButton *m_btn = nullptr;
+ QPushButton *m_btn2 = nullptr;
+ QColor m_background;
+ QMetaObject::Connection m_contextWatchConnection;
+};
+
+#endif
diff --git a/tests/manual/examples/opengl/qopenglwidget/main.cpp b/tests/manual/examples/opengl/qopenglwidget/main.cpp
new file mode 100644
index 0000000000..1614649a5a
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwidget/main.cpp
@@ -0,0 +1,42 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QMainWindow>
+#include <QColorSpace>
+#include <QSurfaceFormat>
+#include <QCommandLineParser>
+#include <QCommandLineOption>
+#include "mainwindow.h"
+
+int main( int argc, char ** argv )
+{
+ QApplication a( argc, argv );
+
+ QCoreApplication::setApplicationName("Qt QOpenGLWidget Example");
+ QCoreApplication::setOrganizationName("QtProject");
+ QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+ QCommandLineParser parser;
+ parser.setApplicationDescription(QCoreApplication::applicationName());
+ parser.addHelpOption();
+ parser.addVersionOption();
+ QCommandLineOption multipleSampleOption("multisample", "Multisampling");
+ parser.addOption(multipleSampleOption);
+ QCommandLineOption srgbOption("srgb", "Use sRGB Color Space");
+ parser.addOption(srgbOption);
+ parser.process(a);
+
+ QSurfaceFormat format;
+ format.setDepthBufferSize(24);
+ format.setStencilBufferSize(8);
+ if (parser.isSet(srgbOption))
+ format.setColorSpace(QColorSpace::SRgb);
+ if (parser.isSet(multipleSampleOption))
+ format.setSamples(4);
+ QSurfaceFormat::setDefaultFormat(format);
+
+ MainWindow mw;
+ mw.resize(1280, 720);
+ mw.show();
+ return a.exec();
+}
diff --git a/tests/manual/examples/opengl/qopenglwidget/mainwindow.cpp b/tests/manual/examples/opengl/qopenglwidget/mainwindow.cpp
new file mode 100644
index 0000000000..c383a692d5
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwidget/mainwindow.cpp
@@ -0,0 +1,188 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+
+#include <QApplication>
+#include <QMenuBar>
+#include <QGroupBox>
+#include <QSlider>
+#include <QLabel>
+#include <QCheckBox>
+#include <QRandomGenerator>
+#include <QSpinBox>
+#include <QScrollArea>
+#include <QTabWidget>
+#include <QTabBar>
+#include <QToolButton>
+
+#include "glwidget.h"
+
+MainWindow::MainWindow()
+ : m_nextX(1), m_nextY(1)
+{
+ GLWidget *glwidget = new GLWidget(this, qRgb(20, 20, 50));
+ m_glWidgets << glwidget;
+ QLabel *label = new QLabel(this);
+ m_timer = new QTimer(this);
+ QSlider *slider = new QSlider(this);
+ slider->setOrientation(Qt::Horizontal);
+
+ QLabel *updateLabel = new QLabel("Update interval");
+ QSpinBox *updateInterval = new QSpinBox(this);
+ updateInterval->setSuffix(" ms");
+ updateInterval->setValue(10);
+ updateInterval->setToolTip("Interval for the timer that calls update().\n"
+ "Note that on most systems the swap will block to wait for vsync\n"
+ "and therefore an interval < 16 ms will likely lead to a 60 FPS update rate.");
+ QGroupBox *updateGroupBox = new QGroupBox(this);
+ QCheckBox *timerBased = new QCheckBox("Use timer", this);
+ timerBased->setChecked(false);
+ timerBased->setToolTip("Toggles using a timer to trigger update().\n"
+ "When not set, each paintGL() schedules the next update immediately,\n"
+ "expecting the blocking swap to throttle the thread.\n"
+ "This shows how unnecessary the timer is in most cases.");
+ QCheckBox *transparent = new QCheckBox("Transparent background", this);
+ transparent->setToolTip("Toggles Qt::WA_AlwaysStackOnTop and transparent clear color for glClear().\n"
+ "Note how the button on top stacks incorrectly when enabling this.");
+ QHBoxLayout *updateLayout = new QHBoxLayout;
+ updateLayout->addWidget(updateLabel);
+ updateLayout->addWidget(updateInterval);
+ updateLayout->addWidget(timerBased);
+ updateLayout->addWidget(transparent);
+ updateGroupBox->setLayout(updateLayout);
+
+ slider->setRange(0, 50);
+ slider->setSliderPosition(30);
+ m_timer->setInterval(10);
+ label->setText("A scrollable QOpenGLWidget");
+ label->setAlignment(Qt::AlignHCenter);
+
+ QGroupBox * groupBox = new QGroupBox(this);
+ setCentralWidget(groupBox);
+ groupBox->setTitle("QOpenGLWidget Example");
+
+ m_layout = new QGridLayout(groupBox);
+
+ QScrollArea *scrollArea = new QScrollArea;
+ scrollArea->setWidget(glwidget);
+
+ m_layout->addWidget(scrollArea,1,0,8,1);
+ m_layout->addWidget(label,9,0,1,1);
+ m_layout->addWidget(updateGroupBox, 10, 0, 1, 1);
+ m_layout->addWidget(slider, 11,0,1,1);
+
+ groupBox->setLayout(m_layout);
+
+
+ QMenu *fileMenu = menuBar()->addMenu("&File");
+ fileMenu->addAction("E&xit", this, &QWidget::close);
+ QMenu *showMenu = menuBar()->addMenu("&Show");
+ showMenu->addAction("Show 3D Logo", glwidget, &GLWidget::setLogo);
+ showMenu->addAction("Show 2D Texture", glwidget, &GLWidget::setTexture);
+ QAction *showBubbles = showMenu->addAction("Show bubbles", glwidget, &GLWidget::setShowBubbles);
+ showBubbles->setCheckable(true);
+ showBubbles->setChecked(true);
+ showMenu->addAction("Open tab window", this, &MainWindow::showNewWindow);
+ QMenu *helpMenu = menuBar()->addMenu("&Help");
+ helpMenu->addAction("About Qt", qApp, &QApplication::aboutQt);
+
+ connect(m_timer, &QTimer::timeout, glwidget, QOverload<>::of(&QWidget::update));
+
+ connect(slider, &QAbstractSlider::valueChanged, glwidget, &GLWidget::setScaling);
+ connect(transparent, &QCheckBox::toggled, glwidget, &GLWidget::setTransparent);
+ connect(updateInterval, &QSpinBox::valueChanged,
+ this, &MainWindow::updateIntervalChanged);
+ connect(timerBased, &QCheckBox::toggled, this, &MainWindow::timerUsageChanged);
+ connect(timerBased, &QCheckBox::toggled, updateInterval, &QWidget::setEnabled);
+
+ if (timerBased->isChecked())
+ m_timer->start();
+ else
+ updateInterval->setEnabled(false);
+}
+
+void MainWindow::updateIntervalChanged(int value)
+{
+ m_timer->setInterval(value);
+ if (m_timer->isActive())
+ m_timer->start();
+}
+
+void MainWindow::addNew()
+{
+ if (m_nextY == 4)
+ return;
+ GLWidget *w = new GLWidget(nullptr, qRgb(QRandomGenerator::global()->bounded(256),
+ QRandomGenerator::global()->bounded(256),
+ QRandomGenerator::global()->bounded(256)));
+ m_glWidgets << w;
+ connect(m_timer, &QTimer::timeout, w, QOverload<>::of(&QWidget::update));
+ m_layout->addWidget(w, m_nextY, m_nextX, 1, 1);
+ if (m_nextX == 3) {
+ m_nextX = 1;
+ ++m_nextY;
+ } else {
+ ++m_nextX;
+ }
+}
+
+void MainWindow::timerUsageChanged(bool enabled)
+{
+ if (enabled) {
+ m_timer->start();
+ } else {
+ m_timer->stop();
+ for (QOpenGLWidget *w : std::as_const(m_glWidgets))
+ w->update();
+ }
+}
+
+void MainWindow::resizeEvent(QResizeEvent *)
+{
+ m_glWidgets[0]->setMinimumSize(size() + QSize(128, 128));
+}
+
+void MainWindow::showNewWindow()
+{
+ QTabWidget *tabs = new QTabWidget;
+ tabs->resize(800, 600);
+
+ QToolButton *tb = new QToolButton;
+ tb->setText(QLatin1String("+"));
+ tabs->addTab(new QLabel(QLatin1String("Add OpenGL widgets with +")), QString());
+ tabs->setTabEnabled(0, false);
+ tabs->tabBar()->setTabButton(0, QTabBar::RightSide, tb);
+ tabs->tabBar()->setTabsClosable(true);
+ QObject::connect(tabs->tabBar(), &QTabBar::tabCloseRequested, tabs, [tabs](int index) {
+ tabs->widget(index)->deleteLater();
+ });
+
+ const QString msgToTopLevel = QLatin1String("Break out to top-level window");
+ const QString msgFromTopLevel = QLatin1String("Move back under tab widget");
+
+ QObject::connect(tb, &QAbstractButton::clicked, tabs, [=] {
+ GLWidget *glwidget = new GLWidget(nullptr, Qt::blue);
+ glwidget->resize(tabs->size());
+ glwidget->setWindowTitle(QString::asprintf("QOpenGLWidget %p", glwidget));
+
+ QPushButton *btn = new QPushButton(msgToTopLevel, glwidget);
+ connect(btn, &QPushButton::clicked, glwidget, [=] {
+ if (glwidget->parent()) {
+ glwidget->setAttribute(Qt::WA_DeleteOnClose, true);
+ glwidget->setParent(nullptr);
+ glwidget->show();
+ btn->setText(msgFromTopLevel);
+ } else {
+ glwidget->setAttribute(Qt::WA_DeleteOnClose, false);
+ tabs->addTab(glwidget, glwidget->windowTitle());
+ btn->setText(msgToTopLevel);
+ }
+ });
+
+ tabs->setCurrentIndex(tabs->addTab(glwidget, glwidget->windowTitle()));
+ });
+
+ tabs->setAttribute(Qt::WA_DeleteOnClose);
+ tabs->show();
+}
diff --git a/tests/manual/examples/opengl/qopenglwidget/mainwindow.h b/tests/manual/examples/opengl/qopenglwidget/mainwindow.h
new file mode 100644
index 0000000000..85f11ad764
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwidget/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>
+#include <QTimer>
+#include <QGridLayout>
+
+QT_FORWARD_DECLARE_CLASS(QOpenGLWidget)
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow();
+ void addNew();
+ bool timerEnabled() const { return m_timer->isActive(); }
+
+ void resizeEvent(QResizeEvent *);
+
+public slots:
+ void showNewWindow();
+
+private slots:
+ void updateIntervalChanged(int value);
+ void timerUsageChanged(bool enabled);
+
+private:
+ QTimer *m_timer;
+ QGridLayout *m_layout;
+ int m_nextX;
+ int m_nextY;
+ QList<QOpenGLWidget *> m_glWidgets;
+};
+
+#endif
diff --git a/tests/manual/examples/opengl/qopenglwidget/qopenglwidget.pro b/tests/manual/examples/opengl/qopenglwidget/qopenglwidget.pro
new file mode 100644
index 0000000000..7ac546d7ce
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwidget/qopenglwidget.pro
@@ -0,0 +1,15 @@
+QT += widgets opengl openglwidgets
+
+SOURCES += main.cpp \
+ glwidget.cpp \
+ mainwindow.cpp \
+ bubble.cpp
+
+HEADERS += glwidget.h \
+ mainwindow.h \
+ bubble.h
+
+RESOURCES += texture.qrc
+
+target.path = $$[QT_INSTALL_EXAMPLES]/opengl/qopenglwidget
+INSTALLS += target
diff --git a/tests/manual/examples/opengl/qopenglwidget/qt.png b/tests/manual/examples/opengl/qopenglwidget/qt.png
new file mode 100644
index 0000000000..4f68e162de
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwidget/qt.png
Binary files differ
diff --git a/tests/manual/examples/opengl/qopenglwidget/texture.qrc b/tests/manual/examples/opengl/qopenglwidget/texture.qrc
new file mode 100644
index 0000000000..ff1d0e535f
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwidget/texture.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>qt.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/opengl/qopenglwindow/CMakeLists.txt b/tests/manual/examples/opengl/qopenglwindow/CMakeLists.txt
new file mode 100644
index 0000000000..be3cb45152
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwindow/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(qopenglwindow LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/opengl/qopenglwindow")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL)
+
+qt_standard_project_setup()
+
+qt_add_executable(qopenglwindow
+ background_renderer.cpp background_renderer.h
+ main.cpp
+)
+
+set_target_properties(qopenglwindow PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(qopenglwindow PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::OpenGL
+)
+
+# Resources:
+set(shaders_resource_files
+ "background.frag"
+)
+
+qt_add_resources(qopenglwindow "shaders"
+ PREFIX
+ "/"
+ FILES
+ ${shaders_resource_files}
+)
+
+install(TARGETS qopenglwindow
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/opengl/qopenglwindow/background.frag b/tests/manual/examples/opengl/qopenglwindow/background.frag
new file mode 100644
index 0000000000..4af85aae8e
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwindow/background.frag
@@ -0,0 +1,30 @@
+#define M_PI 3.14159265358979323846
+#define SPEED 10000.0
+
+uniform int currentTime;
+uniform highp vec2 windowSize;
+
+highp float noise(highp vec2 co)
+{
+ return 0.5 * fract(sin(dot(co.xy, vec2(12.9898,78.233))) * 43758.5453);
+}
+
+highp float curvSpeed()
+{
+ return (mod(float(currentTime), SPEED) / SPEED) * (2.0 * M_PI);
+}
+
+highp float curv(int curvCount)
+{
+ highp float curv_y = 0.1 *(cos((gl_FragCoord.x / windowSize.x) * (float(curvCount * 2) * M_PI) - curvSpeed())) + 0.5;
+ highp float frag_y = gl_FragCoord.y / windowSize.y;
+ return 1.0 - abs(curv_y - frag_y);
+}
+
+void main()
+{
+ highp float coordNoise = noise(gl_FragCoord.xy);
+ highp float proximity = smoothstep(0.85, 1.0, (curv(6) + 1.0) * (coordNoise ));
+ highp vec3 color = vec3(coordNoise) * proximity;
+ gl_FragColor = vec4(color, 1.0);
+}
diff --git a/tests/manual/examples/opengl/qopenglwindow/background_renderer.cpp b/tests/manual/examples/opengl/qopenglwindow/background_renderer.cpp
new file mode 100644
index 0000000000..5939894dfe
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwindow/background_renderer.cpp
@@ -0,0 +1,167 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "background_renderer.h"
+
+#include <qmath.h>
+#include <QFileInfo>
+#include <QTime>
+
+#include <QOpenGLShaderProgram>
+#include <QOpenGLContext>
+#include <QOpenGLFunctions>
+
+#include <math.h>
+
+static const char vertex_shader[] =
+ "attribute highp vec3 vertexCoord;"
+ "void main() {"
+ " gl_Position = vec4(vertexCoord,1.0);"
+ "}";
+
+static const char fragment_shader[] =
+ "void main() {"
+ " gl_FragColor = vec4(0.0,1.0,0.0,1.0);"
+ "}";
+
+static const float vertices[] = { -1, -1, 0,
+ -1, 1, 0,
+ 1, -1, 0,
+ 1, 1, 0 };
+
+FragmentToy::FragmentToy(const QString &fragmentSource, QObject *parent)
+ : QObject(parent)
+ , m_recompile_shaders(true)
+{
+ if (QFile::exists(fragmentSource)) {
+ QFileInfo info(fragmentSource);
+ m_fragment_file_last_modified = info.lastModified();
+ m_fragment_file = fragmentSource;
+#if QT_CONFIG(filesystemwatcher)
+ m_watcher.addPath(info.canonicalPath());
+ QObject::connect(&m_watcher, &QFileSystemWatcher::directoryChanged, this, &FragmentToy::fileChanged);
+#endif
+ }
+}
+
+FragmentToy::~FragmentToy()
+ = default;
+
+void FragmentToy::draw(const QSize &windowSize)
+{
+ if (!m_program)
+ initializeOpenGLFunctions();
+
+ glDisable(GL_STENCIL_TEST);
+ glDisable(GL_DEPTH_TEST);
+
+ glClearColor(0, 0, 0, 1);
+ glClear(GL_COLOR_BUFFER_BIT);
+ if (!m_vao.isCreated())
+ m_vao.create();
+
+ QOpenGLVertexArrayObject::Binder binder(&m_vao);
+
+ if (!m_vertex_buffer.isCreated()) {
+ m_vertex_buffer.create();
+ m_vertex_buffer.bind();
+ m_vertex_buffer.allocate(vertices, sizeof(vertices));
+ m_vertex_buffer.release();
+ }
+
+ if (!m_program) {
+ m_program.reset(new QOpenGLShaderProgram);
+ m_program->create();
+ m_vertex_shader.reset(new QOpenGLShader(QOpenGLShader::Vertex));
+ if (!m_vertex_shader->compileSourceCode(vertex_shader)) {
+ qWarning() << "Failed to compile the vertex shader:" << m_vertex_shader->log();
+ }
+ if (!m_program->addShader(m_vertex_shader.get())) {
+ qWarning() << "Failed to add vertex shader to program:" << m_program->log();
+ }
+ }
+
+ if (!m_fragment_shader && m_recompile_shaders) {
+ QByteArray data;
+ if (m_fragment_file.size()) {
+ QFile file(m_fragment_file);
+ if (file.open(QIODevice::ReadOnly)) {
+ data = file.readAll();
+ } else {
+ qWarning() << "Failed to load input file, falling back to default";
+ data = QByteArray::fromRawData(fragment_shader, sizeof(fragment_shader));
+ }
+ } else {
+ QFile qrcFile(":/background.frag");
+ if (qrcFile.open(QIODevice::ReadOnly))
+ data = qrcFile.readAll();
+ else
+ data = QByteArray::fromRawData(fragment_shader, sizeof(fragment_shader));
+ }
+ if (data.size()) {
+ m_fragment_shader.reset(new QOpenGLShader(QOpenGLShader::Fragment));
+ if (!m_fragment_shader->compileSourceCode(data)) {
+ qWarning() << "Failed to compile fragment shader:" << m_fragment_shader->log();
+ m_fragment_shader.reset(nullptr);
+ }
+ } else {
+ qWarning() << "Unknown error, no fragment shader";
+ }
+
+ if (m_fragment_shader) {
+ if (!m_program->addShader(m_fragment_shader.get())) {
+ qWarning() << "Failed to add fragment shader to program:" << m_program->log();
+ }
+ }
+ }
+
+ if (m_recompile_shaders) {
+ m_recompile_shaders = false;
+
+ if (m_program->link()) {
+ m_vertex_coord_pos = m_program->attributeLocation("vertexCoord");
+ } else {
+ qWarning() << "Failed to link shader program" << m_program->log();
+ }
+
+ }
+
+ if (!m_program->isLinked())
+ return;
+
+ m_program->bind();
+
+ m_vertex_buffer.bind();
+ m_program->setAttributeBuffer("vertexCoord", GL_FLOAT, 0, 3, 0);
+ m_program->enableAttributeArray("vertexCoord");
+ m_vertex_buffer.release();
+
+ m_program->setUniformValue("currentTime", (uint) QDateTime::currentMSecsSinceEpoch());
+ m_program->setUniformValue("windowSize", windowSize);
+
+ QOpenGLContext::currentContext()->functions()->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
+
+ m_program->release();
+}
+
+void FragmentToy::fileChanged(const QString &path)
+{
+ Q_UNUSED(path);
+ if (QFile::exists(m_fragment_file)) {
+ QFileInfo fragment_source(m_fragment_file);
+ if (fragment_source.lastModified() > m_fragment_file_last_modified) {
+ m_fragment_file_last_modified = fragment_source.lastModified();
+ m_recompile_shaders = true;
+ if (m_program) {
+ m_program->removeShader(m_fragment_shader.get());
+ m_fragment_shader.reset(nullptr);
+ }
+ }
+ } else {
+ m_recompile_shaders = true;
+ if (m_program) {
+ m_program->removeShader(m_fragment_shader.get());
+ m_fragment_shader.reset(nullptr);
+ }
+ }
+}
diff --git a/tests/manual/examples/opengl/qopenglwindow/background_renderer.h b/tests/manual/examples/opengl/qopenglwindow/background_renderer.h
new file mode 100644
index 0000000000..76c0bec6a8
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwindow/background_renderer.h
@@ -0,0 +1,46 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef FRAGMENT_TOY_H
+#define FRAGMENT_TOY_H
+
+#include <QObject>
+#include <QFile>
+#include <QDateTime>
+#if QT_CONFIG(filesystemwatcher)
+#include <QFileSystemWatcher>
+#endif
+#include <QOpenGLVertexArrayObject>
+#include <QOpenGLBuffer>
+#include <QOpenGLShaderProgram>
+#include <QOpenGLFunctions>
+
+#include <memory>
+
+class FragmentToy : public QObject, protected QOpenGLFunctions
+{
+ Q_OBJECT
+public:
+ explicit FragmentToy(const QString &fragmentSource, QObject *parent = nullptr);
+ ~FragmentToy();
+
+ void draw(const QSize &windowSize);
+
+private:
+ void fileChanged(const QString &path);
+ bool m_recompile_shaders;
+#if QT_CONFIG(filesystemwatcher)
+ QFileSystemWatcher m_watcher;
+#endif
+ QString m_fragment_file;
+ QDateTime m_fragment_file_last_modified;
+
+ std::unique_ptr<QOpenGLShaderProgram> m_program;
+ std::unique_ptr<QOpenGLShader> m_vertex_shader;
+ std::unique_ptr<QOpenGLShader> m_fragment_shader;
+ QOpenGLVertexArrayObject m_vao;
+ QOpenGLBuffer m_vertex_buffer;
+ GLuint m_vertex_coord_pos;
+};
+
+#endif //FRAGMENT_TOY_H
diff --git a/tests/manual/examples/opengl/qopenglwindow/main.cpp b/tests/manual/examples/opengl/qopenglwindow/main.cpp
new file mode 100644
index 0000000000..44810a4ecf
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwindow/main.cpp
@@ -0,0 +1,154 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QOpenGLWindow>
+#include <QScreen>
+#include <QPainter>
+#include <QPainterPath>
+#include <QGuiApplication>
+#include <QMatrix4x4>
+#include <QStaticText>
+#include <QKeyEvent>
+
+#include "background_renderer.h"
+
+static QPainterPath painterPathForTriangle()
+{
+ static const QPointF bottomLeft(-1.0, -1.0);
+ static const QPointF top(0.0, 1.0);
+ static const QPointF bottomRight(1.0, -1.0);
+
+ QPainterPath path(bottomLeft);
+ path.lineTo(top);
+ path.lineTo(bottomRight);
+ path.closeSubpath();
+ return path;
+}
+
+class OpenGLWindow : public QOpenGLWindow
+{
+ Q_OBJECT
+
+public:
+ OpenGLWindow();
+
+protected:
+ void paintGL() override;
+ void resizeGL(int w, int h) override;
+ void keyPressEvent(QKeyEvent *e) override;
+
+private:
+ void setAnimating(bool enabled);
+
+ QMatrix4x4 m_window_normalised_matrix;
+ QMatrix4x4 m_window_painter_matrix;
+ QMatrix4x4 m_projection;
+ QMatrix4x4 m_view;
+ QMatrix4x4 m_model_triangle;
+ QMatrix4x4 m_model_text;
+
+ FragmentToy m_fragment_toy;
+ QStaticText m_text_layout;
+ bool m_animate;
+};
+
+// Use NoPartialUpdate. This means that all the rendering goes directly to
+// the window surface, no additional framebuffer object stands in the
+// middle. This is fine since we will clear the entire framebuffer on each
+// paint. Under the hood this means that the behavior is equivalent to the
+// manual makeCurrent - perform OpenGL calls - swapBuffers loop that is
+// typical in pure QWindow-based applications.
+OpenGLWindow::OpenGLWindow()
+ : QOpenGLWindow(QOpenGLWindow::NoPartialUpdate)
+ , m_fragment_toy("./background.frag")
+ , m_text_layout("The triangle and this text is rendered with QPainter")
+ , m_animate(true)
+{
+ setGeometry(300, 300, 500, 500);
+
+ m_view.lookAt(QVector3D(3,1,1),
+ QVector3D(0,0,0),
+ QVector3D(0,1,0));
+
+ setAnimating(m_animate);
+}
+
+void OpenGLWindow::paintGL()
+{
+ m_fragment_toy.draw(size());
+
+ QPainter p(this);
+ p.setWorldTransform(m_window_normalised_matrix.toTransform());
+
+ QMatrix4x4 mvp = m_projection * m_view * m_model_triangle;
+ p.setTransform(mvp.toTransform(), true);
+
+ p.fillPath(painterPathForTriangle(), QBrush(QGradient(QGradient::NightFade)));
+
+ QTransform text_transform = (m_window_painter_matrix * m_view * m_model_text).toTransform();
+ p.setTransform(text_transform, false);
+ p.setPen(QPen(Qt::black));
+ m_text_layout.prepare(text_transform);
+ qreal x = - (m_text_layout.size().width() / 2);
+ qreal y = 0;
+ p.drawStaticText(x, y, m_text_layout);
+
+ m_model_triangle.rotate(-1, 0, 1, 0);
+ m_model_text.rotate(1, 0, 1, 0);
+}
+
+void OpenGLWindow::resizeGL(int w, int h)
+{
+ m_window_normalised_matrix.setToIdentity();
+ m_window_normalised_matrix.translate(w / 2.0, h / 2.0);
+ m_window_normalised_matrix.scale(w / 2.0, -h / 2.0);
+
+ m_window_painter_matrix.setToIdentity();
+ m_window_painter_matrix.translate(w / 2.0, h / 2.0);
+
+ m_text_layout.setTextWidth(std::max(w * 0.2, 80.0));
+
+ m_projection.setToIdentity();
+ m_projection.perspective(45.f, qreal(w) / qreal(h), 0.1f, 100.f);
+}
+
+void OpenGLWindow::keyPressEvent(QKeyEvent *e)
+{
+ if (e->key() == Qt::Key_P) { // pause
+ m_animate = !m_animate;
+ setAnimating(m_animate);
+ }
+}
+
+void OpenGLWindow::setAnimating(bool enabled)
+{
+ if (enabled) {
+ // Animate continuously, throttled by the blocking swapBuffers() call the
+ // QOpenGLWindow internally executes after each paint. Once that is done
+ // (frameSwapped signal is emitted), we schedule a new update. This
+ // obviously assumes that the swap interval (see
+ // QSurfaceFormat::setSwapInterval()) is non-zero.
+ connect(this, &QOpenGLWindow::frameSwapped,
+ this, QOverload<>::of(&QPaintDeviceWindow::update));
+ update();
+ } else {
+ disconnect(this, &QOpenGLWindow::frameSwapped,
+ this, QOverload<>::of(&QPaintDeviceWindow::update));
+ }
+}
+
+int main(int argc, char **argv)
+{
+ QGuiApplication app(argc, argv);
+
+ OpenGLWindow window;
+ QSurfaceFormat fmt;
+ fmt.setDepthBufferSize(24);
+ fmt.setStencilBufferSize(8);
+ window.setFormat(fmt);
+ window.show();
+
+ return app.exec();
+}
+
+#include "main.moc"
diff --git a/tests/manual/examples/opengl/qopenglwindow/qopenglwindow.pro b/tests/manual/examples/opengl/qopenglwindow/qopenglwindow.pro
new file mode 100644
index 0000000000..e7073a324b
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwindow/qopenglwindow.pro
@@ -0,0 +1,16 @@
+TEMPLATE = app
+TARGET = qopenglwindow
+INCLUDEPATH += .
+QT += opengl
+
+RESOURCES += shaders.qrc
+
+SOURCES += \
+ main.cpp \
+ background_renderer.cpp
+
+HEADERS += \
+ background_renderer.h
+
+target.path = $$[QT_INSTALL_EXAMPLES]/opengl/qopenglwindow
+INSTALLS += target
diff --git a/tests/manual/examples/opengl/qopenglwindow/shaders.qrc b/tests/manual/examples/opengl/qopenglwindow/shaders.qrc
new file mode 100644
index 0000000000..64eefe2c70
--- /dev/null
+++ b/tests/manual/examples/opengl/qopenglwindow/shaders.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>background.frag</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/qpa/CMakeLists.txt b/tests/manual/examples/qpa/CMakeLists.txt
new file mode 100644
index 0000000000..1cf5edd939
--- /dev/null
+++ b/tests/manual/examples/qpa/CMakeLists.txt
@@ -0,0 +1,8 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+if(NOT TARGET Qt6::Gui)
+ return()
+endif()
+qt_internal_add_example(windows)
+qt_internal_add_example(qrasterwindow)
diff --git a/tests/manual/examples/qpa/qpa.pro b/tests/manual/examples/qpa/qpa.pro
new file mode 100644
index 0000000000..85b51dc5f4
--- /dev/null
+++ b/tests/manual/examples/qpa/qpa.pro
@@ -0,0 +1,5 @@
+requires(qtHaveModule(gui))
+
+TEMPLATE = subdirs
+SUBDIRS = windows \
+ qrasterwindow
diff --git a/tests/manual/examples/qpa/qrasterwindow/CMakeLists.txt b/tests/manual/examples/qpa/qrasterwindow/CMakeLists.txt
new file mode 100644
index 0000000000..3770400268
--- /dev/null
+++ b/tests/manual/examples/qpa/qrasterwindow/CMakeLists.txt
@@ -0,0 +1,35 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(qrasterwindow LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qpa/qrasterwindow")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui)
+
+qt_standard_project_setup()
+
+qt_add_executable(qrasterwindow
+ main.cpp
+)
+
+set_target_properties(qrasterwindow PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(qrasterwindow PRIVATE
+ Qt6::Core
+ Qt6::Gui
+)
+
+install(TARGETS qrasterwindow
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/qpa/qrasterwindow/main.cpp b/tests/manual/examples/qpa/qrasterwindow/main.cpp
new file mode 100644
index 0000000000..9c245bf8a1
--- /dev/null
+++ b/tests/manual/examples/qpa/qrasterwindow/main.cpp
@@ -0,0 +1,91 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QRasterWindow>
+#include <QPainter>
+#include <QPainterPath>
+#include <QGuiApplication>
+#include <QMatrix4x4>
+#include <QTimer>
+
+static QPainterPath painterPathForTriangle()
+{
+ static const QPointF bottomLeft(-1.0, -1.0);
+ static const QPointF top(0.0, 1.0);
+ static const QPointF bottomRight(1.0, -1.0);
+
+ QPainterPath path(bottomLeft);
+ path.lineTo(top);
+ path.lineTo(bottomRight);
+ path.closeSubpath();
+ return path;
+}
+
+class PaintedWindow : public QRasterWindow
+{
+ Q_OBJECT
+
+public:
+ PaintedWindow()
+ {
+ m_view.lookAt(QVector3D(3,1,1),
+ QVector3D(0,0,0),
+ QVector3D(0,1,0));
+ m_timer.setInterval(16);
+ connect(&m_timer, &QTimer::timeout, this, qOverload<>(&PaintedWindow::update));
+ m_timer.start();
+ }
+
+protected:
+ void paintEvent(QPaintEvent *)
+ {
+ QPainter p(this);
+ p.fillRect(QRect(0,0,width(),height()),Qt::gray);
+
+ p.setWorldTransform(m_window_matrix.toTransform());
+
+ QMatrix4x4 mvp = m_projection * m_view * m_model;
+ p.setTransform(mvp.toTransform(), true);
+
+ p.fillPath(painterPathForTriangle(), m_brush);
+
+ m_model.rotate(1, 0, 1, 0);
+ }
+
+ void resizeEvent(QResizeEvent *)
+ {
+ m_window_matrix = QTransform();
+ m_window_matrix.translate(width() / 2.0, height() / 2.0);
+ m_window_matrix.scale(width() / 2.0, -height() / 2.0);
+
+ m_projection.setToIdentity();
+ m_projection.perspective(45.f, qreal(width()) / qreal(height()), 0.1f, 100.f);
+
+ QLinearGradient gradient(QPointF(-1,-1), QPointF(1,1));
+ gradient.setColorAt(0, Qt::red);
+ gradient.setColorAt(1, Qt::green);
+
+ m_brush = QBrush(gradient);
+ }
+
+private:
+ QMatrix4x4 m_window_matrix;
+ QMatrix4x4 m_projection;
+ QMatrix4x4 m_view;
+ QMatrix4x4 m_model;
+ QBrush m_brush;
+ QTimer m_timer;
+};
+
+int main (int argc, char **argv)
+{
+ QGuiApplication app(argc, argv);
+
+ PaintedWindow window;
+ window.create();
+ window.show();
+
+ return app.exec();
+}
+
+#include "main.moc"
diff --git a/tests/manual/examples/qpa/qrasterwindow/qrasterwindow.pro b/tests/manual/examples/qpa/qrasterwindow/qrasterwindow.pro
new file mode 100644
index 0000000000..e5bf34f25c
--- /dev/null
+++ b/tests/manual/examples/qpa/qrasterwindow/qrasterwindow.pro
@@ -0,0 +1,4 @@
+SOURCES += main.cpp
+
+target.path = $$[QT_INSTALL_EXAMPLES]/qpa/qrasterwindow
+INSTALLS += target
diff --git a/tests/manual/examples/qpa/windows/CMakeLists.txt b/tests/manual/examples/qpa/windows/CMakeLists.txt
new file mode 100644
index 0000000000..3ced0d4b96
--- /dev/null
+++ b/tests/manual/examples/qpa/windows/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(windows LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/qpa/windows")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui)
+
+qt_standard_project_setup()
+
+qt_add_executable(windows
+ main.cpp
+ window.cpp window.h
+)
+
+set_target_properties(windows PROPERTIES
+ WIN32_EXECUTABLE FALSE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(windows PRIVATE
+ Qt6::Core
+ Qt6::CorePrivate
+ Qt6::Gui
+ Qt6::GuiPrivate
+)
+
+install(TARGETS windows
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/qpa/windows/main.cpp b/tests/manual/examples/qpa/windows/main.cpp
new file mode 100644
index 0000000000..b2ce40c439
--- /dev/null
+++ b/tests/manual/examples/qpa/windows/main.cpp
@@ -0,0 +1,50 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QScreen>
+#include <QRect>
+#include <QSharedPointer>
+
+#include "window.h"
+
+int main(int argc, char **argv)
+{
+ typedef QSharedPointer<QWindow> WindowPtr;
+
+ QGuiApplication app(argc, argv);
+
+ Window a;
+ a.setFramePosition(QPoint(10, 10));
+ a.setTitle(QStringLiteral("Window A"));
+ a.setObjectName(a.title());
+ a.setVisible(true);
+
+ Window b;
+ b.setFramePosition(QPoint(100, 100));
+ b.setTitle(QStringLiteral("Window B"));
+ b.setObjectName(b.title());
+ b.setVisible(true);
+
+ Window child(&b);
+ child.setObjectName(QStringLiteral("ChildOfB"));
+ child.setVisible(true);
+
+ // create one window on each additional screen as well
+
+ QList<WindowPtr> windows;
+ const QList<QScreen *> screens = app.screens();
+ for (QScreen *screen : screens) {
+ if (screen == app.primaryScreen())
+ continue;
+ WindowPtr window(new Window(screen));
+ QRect geometry = window->geometry();
+ geometry.moveCenter(screen->availableGeometry().center());
+ window->setGeometry(geometry);
+ window->setVisible(true);
+ window->setTitle(screen->name());
+ window->setObjectName(window->title());
+ windows.push_back(window);
+ }
+ return app.exec();
+}
diff --git a/tests/manual/examples/qpa/windows/window.cpp b/tests/manual/examples/qpa/windows/window.cpp
new file mode 100644
index 0000000000..e86a4f7cfd
--- /dev/null
+++ b/tests/manual/examples/qpa/windows/window.cpp
@@ -0,0 +1,164 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "window.h"
+
+#include <private/qguiapplication_p.h>
+
+#include <QBackingStore>
+#include <QPainter>
+
+static int colorIndexId = 0;
+
+QColor colorTable[] =
+{
+ QColor("#f09f8f"),
+ QColor("#a2bff2"),
+ QColor("#c0ef8f")
+};
+
+Window::Window(QScreen *screen)
+ : QWindow(screen)
+ , m_backgroundColorIndex(colorIndexId++)
+{
+ initialize();
+}
+
+Window::Window(QWindow *parent)
+ : QWindow(parent)
+ , m_backgroundColorIndex(colorIndexId++)
+{
+ initialize();
+}
+
+void Window::initialize()
+{
+ if (parent())
+ setGeometry(QRect(160, 120, 320, 240));
+ else {
+ setFlags(flags() | Qt::WindowTitleHint | Qt::WindowSystemMenuHint
+ | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
+ const QSize baseSize = QSize(640, 480);
+ setGeometry(QRect(geometry().topLeft(), baseSize));
+
+ setSizeIncrement(QSize(10, 10));
+ setBaseSize(baseSize);
+ setMinimumSize(QSize(240, 160));
+ setMaximumSize(QSize(800, 600));
+ }
+
+ create();
+ m_backingStore = new QBackingStore(this);
+
+ m_image = QImage(geometry().size(), QImage::Format_RGB32);
+ m_image.fill(colorTable[m_backgroundColorIndex % (sizeof(colorTable) / sizeof(colorTable[0]))].rgba());
+
+ m_lastPos = QPoint(-1, -1);
+ m_renderTimer = 0;
+}
+
+void Window::mousePressEvent(QMouseEvent *event)
+{
+ m_lastPos = event->position().toPoint();
+}
+
+void Window::mouseMoveEvent(QMouseEvent *event)
+{
+ if (m_lastPos != QPoint(-1, -1)) {
+ QPainter p(&m_image);
+ p.setRenderHint(QPainter::Antialiasing);
+ p.drawLine(m_lastPos, event->position().toPoint());
+ m_lastPos = event->position().toPoint();
+
+ scheduleRender();
+ }
+}
+
+void Window::mouseReleaseEvent(QMouseEvent *event)
+{
+ if (m_lastPos != QPoint(-1, -1)) {
+ QPainter p(&m_image);
+ p.setRenderHint(QPainter::Antialiasing);
+ p.drawLine(m_lastPos, event->position().toPoint());
+ m_lastPos = QPoint(-1, -1);
+
+ scheduleRender();
+ }
+}
+
+void Window::exposeEvent(QExposeEvent *)
+{
+ scheduleRender();
+}
+
+void Window::resizeEvent(QResizeEvent *)
+{
+ QImage old = m_image;
+
+ int width = qMax(geometry().width(), old.width());
+ int height = qMax(geometry().height(), old.height());
+
+ if (width > old.width() || height > old.height()) {
+ m_image = QImage(width, height, QImage::Format_RGB32);
+ m_image.fill(colorTable[(m_backgroundColorIndex) % (sizeof(colorTable) / sizeof(colorTable[0]))].rgba());
+
+ QPainter p(&m_image);
+ p.drawImage(0, 0, old);
+ }
+ scheduleRender();
+}
+
+void Window::keyPressEvent(QKeyEvent *event)
+{
+ switch (event->key()) {
+ case Qt::Key_Backspace:
+ m_text.chop(1);
+ break;
+ case Qt::Key_Enter:
+ case Qt::Key_Return:
+ m_text.append('\n');
+ break;
+ default:
+ m_text.append(event->text());
+ break;
+ }
+ scheduleRender();
+}
+
+void Window::scheduleRender()
+{
+ if (!m_renderTimer)
+ m_renderTimer = startTimer(1);
+}
+
+void Window::timerEvent(QTimerEvent *)
+{
+ if (isExposed())
+ render();
+ killTimer(m_renderTimer);
+ m_renderTimer = 0;
+}
+
+void Window::render()
+{
+ QRect rect(QPoint(), geometry().size());
+ m_backingStore->resize(rect.size());
+
+ m_backingStore->beginPaint(rect);
+
+ QPaintDevice *device = m_backingStore->paintDevice();
+
+ QPainter p(device);
+ p.drawImage(0, 0, m_image);
+
+ QFont font;
+ font.setPixelSize(32);
+
+ p.setFont(font);
+ p.drawText(rect, 0, m_text);
+
+ m_backingStore->endPaint();
+ m_backingStore->flush(rect);
+}
+
+
diff --git a/tests/manual/examples/qpa/windows/window.h b/tests/manual/examples/qpa/windows/window.h
new file mode 100644
index 0000000000..c7eae4028a
--- /dev/null
+++ b/tests/manual/examples/qpa/windows/window.h
@@ -0,0 +1,41 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include <QWindow>
+#include <QImage>
+
+class Window : public QWindow
+{
+public:
+ Window(QWindow *parent = nullptr);
+ Window(QScreen *screen);
+
+protected:
+ void mousePressEvent(QMouseEvent *) override;
+ void mouseMoveEvent(QMouseEvent *) override;
+ void mouseReleaseEvent(QMouseEvent *) override;
+
+ void keyPressEvent(QKeyEvent *) override;
+
+ void exposeEvent(QExposeEvent *) override;
+ void resizeEvent(QResizeEvent *) override;
+
+ void timerEvent(QTimerEvent *) override;
+
+private:
+ void render();
+ void scheduleRender();
+ void initialize();
+
+ QString m_text;
+ QImage m_image;
+ QPoint m_lastPos;
+ int m_backgroundColorIndex;
+ QBackingStore *m_backingStore;
+ int m_renderTimer;
+};
+
+#endif // WINDOW_H
diff --git a/tests/manual/examples/qpa/windows/windows.pro b/tests/manual/examples/qpa/windows/windows.pro
new file mode 100644
index 0000000000..cf2b7ab200
--- /dev/null
+++ b/tests/manual/examples/qpa/windows/windows.pro
@@ -0,0 +1,9 @@
+CONFIG += console
+QT += gui-private core-private
+
+HEADERS += window.h
+SOURCES += window.cpp main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/qpa/windows
+INSTALLS += target
diff --git a/tests/manual/examples/vulkan/hellovulkantexture/CMakeLists.txt b/tests/manual/examples/vulkan/hellovulkantexture/CMakeLists.txt
new file mode 100644
index 0000000000..07495e1ecf
--- /dev/null
+++ b/tests/manual/examples/vulkan/hellovulkantexture/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(hellovulkantexture LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/vulkan/hellovulkantexture")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui)
+
+qt_standard_project_setup()
+
+qt_add_executable(hellovulkantexture
+ hellovulkantexture.cpp hellovulkantexture.h
+ main.cpp
+)
+
+set_target_properties(hellovulkantexture PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(hellovulkantexture PRIVATE
+ Qt6::Core
+ Qt6::Gui
+)
+
+# Resources:
+set(hellovulkantexture_resource_files
+ "qt256.png"
+ "texture_frag.spv"
+ "texture_vert.spv"
+)
+
+qt_add_resources(hellovulkantexture "hellovulkantexture"
+ PREFIX
+ "/"
+ FILES
+ ${hellovulkantexture_resource_files}
+)
+
+install(TARGETS hellovulkantexture
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.cpp b/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.cpp
new file mode 100644
index 0000000000..ed58c6caca
--- /dev/null
+++ b/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.cpp
@@ -0,0 +1,792 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "hellovulkantexture.h"
+#include <QVulkanFunctions>
+#include <QCoreApplication>
+#include <QFile>
+
+// Use a triangle strip to get a quad.
+//
+// Note that the vertex data and the projection matrix assume OpenGL. With
+// Vulkan Y is negated in clip space and the near/far plane is at 0/1 instead
+// of -1/1. These will be corrected for by an extra transformation when
+// calculating the modelview-projection matrix.
+static float vertexData[] = { // Y up, front = CW
+ // x, y, z, u, v
+ -1, -1, 0, 0, 1,
+ -1, 1, 0, 0, 0,
+ 1, -1, 0, 1, 1,
+ 1, 1, 0, 1, 0
+};
+
+static const int UNIFORM_DATA_SIZE = 16 * sizeof(float);
+
+static inline VkDeviceSize aligned(VkDeviceSize v, VkDeviceSize byteAlign)
+{
+ return (v + byteAlign - 1) & ~(byteAlign - 1);
+}
+
+QVulkanWindowRenderer *VulkanWindow::createRenderer()
+{
+ return new VulkanRenderer(this);
+}
+
+VulkanRenderer::VulkanRenderer(QVulkanWindow *w)
+ : m_window(w)
+{
+}
+
+VkShaderModule VulkanRenderer::createShader(const QString &name)
+{
+ QFile file(name);
+ if (!file.open(QIODevice::ReadOnly)) {
+ qWarning("Failed to read shader %s", qPrintable(name));
+ return VK_NULL_HANDLE;
+ }
+ QByteArray blob = file.readAll();
+ file.close();
+
+ VkShaderModuleCreateInfo shaderInfo;
+ memset(&shaderInfo, 0, sizeof(shaderInfo));
+ shaderInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
+ shaderInfo.codeSize = blob.size();
+ shaderInfo.pCode = reinterpret_cast<const uint32_t *>(blob.constData());
+ VkShaderModule shaderModule;
+ VkResult err = m_devFuncs->vkCreateShaderModule(m_window->device(), &shaderInfo, nullptr, &shaderModule);
+ if (err != VK_SUCCESS) {
+ qWarning("Failed to create shader module: %d", err);
+ return VK_NULL_HANDLE;
+ }
+
+ return shaderModule;
+}
+
+bool VulkanRenderer::createTexture(const QString &name)
+{
+ QImage img(name);
+ if (img.isNull()) {
+ qWarning("Failed to load image %s", qPrintable(name));
+ return false;
+ }
+
+ // Convert to byte ordered RGBA8. Use premultiplied alpha, see pColorBlendState in the pipeline.
+ img = img.convertToFormat(QImage::Format_RGBA8888_Premultiplied);
+
+ QVulkanFunctions *f = m_window->vulkanInstance()->functions();
+ VkDevice dev = m_window->device();
+
+ const bool srgb = QCoreApplication::arguments().contains(QStringLiteral("--srgb"));
+ if (srgb)
+ qDebug("sRGB swapchain was requested, making texture sRGB too");
+
+ m_texFormat = srgb ? VK_FORMAT_R8G8B8A8_SRGB : VK_FORMAT_R8G8B8A8_UNORM;
+
+ // Now we can either map and copy the image data directly, or have to go
+ // through a staging buffer to copy and convert into the internal optimal
+ // tiling format.
+ VkFormatProperties props;
+ f->vkGetPhysicalDeviceFormatProperties(m_window->physicalDevice(), m_texFormat, &props);
+ const bool canSampleLinear = (props.linearTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT);
+ const bool canSampleOptimal = (props.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT);
+ if (!canSampleLinear && !canSampleOptimal) {
+ qWarning("Neither linear nor optimal image sampling is supported for RGBA8");
+ return false;
+ }
+
+ static bool alwaysStage = qEnvironmentVariableIntValue("QT_VK_FORCE_STAGE_TEX");
+
+ if (canSampleLinear && !alwaysStage) {
+ if (!createTextureImage(img.size(), &m_texImage, &m_texMem,
+ VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_SAMPLED_BIT,
+ m_window->hostVisibleMemoryIndex()))
+ return false;
+
+ if (!writeLinearImage(img, m_texImage, m_texMem))
+ return false;
+
+ m_texLayoutPending = true;
+ } else {
+ if (!createTextureImage(img.size(), &m_texStaging, &m_texStagingMem,
+ VK_IMAGE_TILING_LINEAR, VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
+ m_window->hostVisibleMemoryIndex()))
+ return false;
+
+ if (!createTextureImage(img.size(), &m_texImage, &m_texMem,
+ VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
+ m_window->deviceLocalMemoryIndex()))
+ return false;
+
+ if (!writeLinearImage(img, m_texStaging, m_texStagingMem))
+ return false;
+
+ m_texStagingPending = true;
+ }
+
+ VkImageViewCreateInfo viewInfo;
+ memset(&viewInfo, 0, sizeof(viewInfo));
+ viewInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
+ viewInfo.image = m_texImage;
+ viewInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
+ viewInfo.format = m_texFormat;
+ viewInfo.components.r = VK_COMPONENT_SWIZZLE_R;
+ viewInfo.components.g = VK_COMPONENT_SWIZZLE_G;
+ viewInfo.components.b = VK_COMPONENT_SWIZZLE_B;
+ viewInfo.components.a = VK_COMPONENT_SWIZZLE_A;
+ viewInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+ viewInfo.subresourceRange.levelCount = viewInfo.subresourceRange.layerCount = 1;
+
+ VkResult err = m_devFuncs->vkCreateImageView(dev, &viewInfo, nullptr, &m_texView);
+ if (err != VK_SUCCESS) {
+ qWarning("Failed to create image view for texture: %d", err);
+ return false;
+ }
+
+ m_texSize = img.size();
+
+ return true;
+}
+
+bool VulkanRenderer::createTextureImage(const QSize &size, VkImage *image, VkDeviceMemory *mem,
+ VkImageTiling tiling, VkImageUsageFlags usage, uint32_t memIndex)
+{
+ VkDevice dev = m_window->device();
+
+ VkImageCreateInfo imageInfo;
+ memset(&imageInfo, 0, sizeof(imageInfo));
+ imageInfo.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
+ imageInfo.imageType = VK_IMAGE_TYPE_2D;
+ imageInfo.format = m_texFormat;
+ imageInfo.extent.width = size.width();
+ imageInfo.extent.height = size.height();
+ imageInfo.extent.depth = 1;
+ imageInfo.mipLevels = 1;
+ imageInfo.arrayLayers = 1;
+ imageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
+ imageInfo.tiling = tiling;
+ imageInfo.usage = usage;
+ imageInfo.initialLayout = VK_IMAGE_LAYOUT_PREINITIALIZED;
+
+ VkResult err = m_devFuncs->vkCreateImage(dev, &imageInfo, nullptr, image);
+ if (err != VK_SUCCESS) {
+ qWarning("Failed to create linear image for texture: %d", err);
+ return false;
+ }
+
+ VkMemoryRequirements memReq;
+ m_devFuncs->vkGetImageMemoryRequirements(dev, *image, &memReq);
+
+ if (!(memReq.memoryTypeBits & (1 << memIndex))) {
+ VkPhysicalDeviceMemoryProperties physDevMemProps;
+ m_window->vulkanInstance()->functions()->vkGetPhysicalDeviceMemoryProperties(m_window->physicalDevice(), &physDevMemProps);
+ for (uint32_t i = 0; i < physDevMemProps.memoryTypeCount; ++i) {
+ if (!(memReq.memoryTypeBits & (1 << i)))
+ continue;
+ memIndex = i;
+ }
+ }
+
+ VkMemoryAllocateInfo allocInfo = {
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
+ nullptr,
+ memReq.size,
+ memIndex
+ };
+ qDebug("allocating %u bytes for texture image", uint32_t(memReq.size));
+
+ err = m_devFuncs->vkAllocateMemory(dev, &allocInfo, nullptr, mem);
+ if (err != VK_SUCCESS) {
+ qWarning("Failed to allocate memory for linear image: %d", err);
+ return false;
+ }
+
+ err = m_devFuncs->vkBindImageMemory(dev, *image, *mem, 0);
+ if (err != VK_SUCCESS) {
+ qWarning("Failed to bind linear image memory: %d", err);
+ return false;
+ }
+
+ return true;
+}
+
+bool VulkanRenderer::writeLinearImage(const QImage &img, VkImage image, VkDeviceMemory memory)
+{
+ VkDevice dev = m_window->device();
+
+ VkImageSubresource subres = {
+ VK_IMAGE_ASPECT_COLOR_BIT,
+ 0, // mip level
+ 0
+ };
+ VkSubresourceLayout layout;
+ m_devFuncs->vkGetImageSubresourceLayout(dev, image, &subres, &layout);
+
+ uchar *p;
+ VkResult err = m_devFuncs->vkMapMemory(dev, memory, layout.offset, layout.size, 0, reinterpret_cast<void **>(&p));
+ if (err != VK_SUCCESS) {
+ qWarning("Failed to map memory for linear image: %d", err);
+ return false;
+ }
+
+ for (int y = 0; y < img.height(); ++y) {
+ const uchar *line = img.constScanLine(y);
+ memcpy(p, line, img.width() * 4);
+ p += layout.rowPitch;
+ }
+
+ m_devFuncs->vkUnmapMemory(dev, memory);
+ return true;
+}
+
+void VulkanRenderer::ensureTexture()
+{
+ if (!m_texLayoutPending && !m_texStagingPending)
+ return;
+
+ Q_ASSERT(m_texLayoutPending != m_texStagingPending);
+ VkCommandBuffer cb = m_window->currentCommandBuffer();
+
+ VkImageMemoryBarrier barrier;
+ memset(&barrier, 0, sizeof(barrier));
+ barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
+ barrier.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+ barrier.subresourceRange.levelCount = barrier.subresourceRange.layerCount = 1;
+
+ if (m_texLayoutPending) {
+ m_texLayoutPending = false;
+
+ barrier.oldLayout = VK_IMAGE_LAYOUT_PREINITIALIZED;
+ barrier.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+ barrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT;
+ barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
+ barrier.image = m_texImage;
+
+ m_devFuncs->vkCmdPipelineBarrier(cb,
+ VK_PIPELINE_STAGE_HOST_BIT,
+ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
+ 0, 0, nullptr, 0, nullptr,
+ 1, &barrier);
+ } else {
+ m_texStagingPending = false;
+
+ barrier.oldLayout = VK_IMAGE_LAYOUT_PREINITIALIZED;
+ barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL;
+ barrier.srcAccessMask = VK_ACCESS_HOST_WRITE_BIT;
+ barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
+ barrier.image = m_texStaging;
+ m_devFuncs->vkCmdPipelineBarrier(cb,
+ VK_PIPELINE_STAGE_HOST_BIT,
+ VK_PIPELINE_STAGE_TRANSFER_BIT,
+ 0, 0, nullptr, 0, nullptr,
+ 1, &barrier);
+
+ barrier.oldLayout = VK_IMAGE_LAYOUT_PREINITIALIZED;
+ barrier.newLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
+ barrier.srcAccessMask = 0;
+ barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
+ barrier.image = m_texImage;
+ m_devFuncs->vkCmdPipelineBarrier(cb,
+ VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT,
+ VK_PIPELINE_STAGE_TRANSFER_BIT,
+ 0, 0, nullptr, 0, nullptr,
+ 1, &barrier);
+
+ VkImageCopy copyInfo;
+ memset(&copyInfo, 0, sizeof(copyInfo));
+ copyInfo.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+ copyInfo.srcSubresource.layerCount = 1;
+ copyInfo.dstSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
+ copyInfo.dstSubresource.layerCount = 1;
+ copyInfo.extent.width = m_texSize.width();
+ copyInfo.extent.height = m_texSize.height();
+ copyInfo.extent.depth = 1;
+ m_devFuncs->vkCmdCopyImage(cb, m_texStaging, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
+ m_texImage, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &copyInfo);
+
+ barrier.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL;
+ barrier.newLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
+ barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
+ barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
+ barrier.image = m_texImage;
+ m_devFuncs->vkCmdPipelineBarrier(cb,
+ VK_PIPELINE_STAGE_TRANSFER_BIT,
+ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
+ 0, 0, nullptr, 0, nullptr,
+ 1, &barrier);
+ }
+}
+
+void VulkanRenderer::initResources()
+{
+ qDebug("initResources");
+
+ VkDevice dev = m_window->device();
+ m_devFuncs = m_window->vulkanInstance()->deviceFunctions(dev);
+
+ // The setup is similar to hellovulkantriangle. The difference is the
+ // presence of a second vertex attribute (texcoord), a sampler, and that we
+ // need blending.
+
+ const int concurrentFrameCount = m_window->concurrentFrameCount();
+ const VkPhysicalDeviceLimits *pdevLimits = &m_window->physicalDeviceProperties()->limits;
+ const VkDeviceSize uniAlign = pdevLimits->minUniformBufferOffsetAlignment;
+ qDebug("uniform buffer offset alignment is %u", (uint) uniAlign);
+ VkBufferCreateInfo bufInfo;
+ memset(&bufInfo, 0, sizeof(bufInfo));
+ bufInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
+ // Our internal layout is vertex, uniform, uniform, ... with each uniform buffer start offset aligned to uniAlign.
+ const VkDeviceSize vertexAllocSize = aligned(sizeof(vertexData), uniAlign);
+ const VkDeviceSize uniformAllocSize = aligned(UNIFORM_DATA_SIZE, uniAlign);
+ bufInfo.size = vertexAllocSize + concurrentFrameCount * uniformAllocSize;
+ bufInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT;
+
+ VkResult err = m_devFuncs->vkCreateBuffer(dev, &bufInfo, nullptr, &m_buf);
+ if (err != VK_SUCCESS)
+ qFatal("Failed to create buffer: %d", err);
+
+ VkMemoryRequirements memReq;
+ m_devFuncs->vkGetBufferMemoryRequirements(dev, m_buf, &memReq);
+
+ VkMemoryAllocateInfo memAllocInfo = {
+ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
+ nullptr,
+ memReq.size,
+ m_window->hostVisibleMemoryIndex()
+ };
+
+ err = m_devFuncs->vkAllocateMemory(dev, &memAllocInfo, nullptr, &m_bufMem);
+ if (err != VK_SUCCESS)
+ qFatal("Failed to allocate memory: %d", err);
+
+ err = m_devFuncs->vkBindBufferMemory(dev, m_buf, m_bufMem, 0);
+ if (err != VK_SUCCESS)
+ qFatal("Failed to bind buffer memory: %d", err);
+
+ quint8 *p;
+ err = m_devFuncs->vkMapMemory(dev, m_bufMem, 0, memReq.size, 0, reinterpret_cast<void **>(&p));
+ if (err != VK_SUCCESS)
+ qFatal("Failed to map memory: %d", err);
+ memcpy(p, vertexData, sizeof(vertexData));
+ QMatrix4x4 ident;
+ memset(m_uniformBufInfo, 0, sizeof(m_uniformBufInfo));
+ for (int i = 0; i < concurrentFrameCount; ++i) {
+ const VkDeviceSize offset = vertexAllocSize + i * uniformAllocSize;
+ memcpy(p + offset, ident.constData(), 16 * sizeof(float));
+ m_uniformBufInfo[i].buffer = m_buf;
+ m_uniformBufInfo[i].offset = offset;
+ m_uniformBufInfo[i].range = uniformAllocSize;
+ }
+ m_devFuncs->vkUnmapMemory(dev, m_bufMem);
+
+ VkVertexInputBindingDescription vertexBindingDesc = {
+ 0, // binding
+ 5 * sizeof(float),
+ VK_VERTEX_INPUT_RATE_VERTEX
+ };
+ VkVertexInputAttributeDescription vertexAttrDesc[] = {
+ { // position
+ 0, // location
+ 0, // binding
+ VK_FORMAT_R32G32B32_SFLOAT,
+ 0
+ },
+ { // texcoord
+ 1,
+ 0,
+ VK_FORMAT_R32G32_SFLOAT,
+ 3 * sizeof(float)
+ }
+ };
+
+ VkPipelineVertexInputStateCreateInfo vertexInputInfo;
+ vertexInputInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
+ vertexInputInfo.pNext = nullptr;
+ vertexInputInfo.flags = 0;
+ vertexInputInfo.vertexBindingDescriptionCount = 1;
+ vertexInputInfo.pVertexBindingDescriptions = &vertexBindingDesc;
+ vertexInputInfo.vertexAttributeDescriptionCount = 2;
+ vertexInputInfo.pVertexAttributeDescriptions = vertexAttrDesc;
+
+ // Sampler.
+ VkSamplerCreateInfo samplerInfo;
+ memset(&samplerInfo, 0, sizeof(samplerInfo));
+ samplerInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
+ samplerInfo.magFilter = VK_FILTER_NEAREST;
+ samplerInfo.minFilter = VK_FILTER_NEAREST;
+ samplerInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
+ samplerInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
+ samplerInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;
+ samplerInfo.maxAnisotropy = 1.0f;
+ err = m_devFuncs->vkCreateSampler(dev, &samplerInfo, nullptr, &m_sampler);
+ if (err != VK_SUCCESS)
+ qFatal("Failed to create sampler: %d", err);
+
+ // Texture.
+ if (!createTexture(QStringLiteral(":/qt256.png")))
+ qFatal("Failed to create texture");
+
+ // Set up descriptor set and its layout.
+ VkDescriptorPoolSize descPoolSizes[2] = {
+ { VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, uint32_t(concurrentFrameCount) },
+ { VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, uint32_t(concurrentFrameCount) }
+ };
+ VkDescriptorPoolCreateInfo descPoolInfo;
+ memset(&descPoolInfo, 0, sizeof(descPoolInfo));
+ descPoolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
+ descPoolInfo.maxSets = concurrentFrameCount;
+ descPoolInfo.poolSizeCount = 2;
+ descPoolInfo.pPoolSizes = descPoolSizes;
+ err = m_devFuncs->vkCreateDescriptorPool(dev, &descPoolInfo, nullptr, &m_descPool);
+ if (err != VK_SUCCESS)
+ qFatal("Failed to create descriptor pool: %d", err);
+
+ VkDescriptorSetLayoutBinding layoutBinding[2] =
+ {
+ {
+ 0, // binding
+ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,
+ 1, // descriptorCount
+ VK_SHADER_STAGE_VERTEX_BIT,
+ nullptr
+ },
+ {
+ 1, // binding
+ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,
+ 1, // descriptorCount
+ VK_SHADER_STAGE_FRAGMENT_BIT,
+ nullptr
+ }
+ };
+ VkDescriptorSetLayoutCreateInfo descLayoutInfo = {
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO,
+ nullptr,
+ 0,
+ 2, // bindingCount
+ layoutBinding
+ };
+ err = m_devFuncs->vkCreateDescriptorSetLayout(dev, &descLayoutInfo, nullptr, &m_descSetLayout);
+ if (err != VK_SUCCESS)
+ qFatal("Failed to create descriptor set layout: %d", err);
+
+ for (int i = 0; i < concurrentFrameCount; ++i) {
+ VkDescriptorSetAllocateInfo descSetAllocInfo = {
+ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO,
+ nullptr,
+ m_descPool,
+ 1,
+ &m_descSetLayout
+ };
+ err = m_devFuncs->vkAllocateDescriptorSets(dev, &descSetAllocInfo, &m_descSet[i]);
+ if (err != VK_SUCCESS)
+ qFatal("Failed to allocate descriptor set: %d", err);
+
+ VkWriteDescriptorSet descWrite[2];
+ memset(descWrite, 0, sizeof(descWrite));
+ descWrite[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+ descWrite[0].dstSet = m_descSet[i];
+ descWrite[0].dstBinding = 0;
+ descWrite[0].descriptorCount = 1;
+ descWrite[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
+ descWrite[0].pBufferInfo = &m_uniformBufInfo[i];
+
+ VkDescriptorImageInfo descImageInfo = {
+ m_sampler,
+ m_texView,
+ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
+ };
+
+ descWrite[1].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
+ descWrite[1].dstSet = m_descSet[i];
+ descWrite[1].dstBinding = 1;
+ descWrite[1].descriptorCount = 1;
+ descWrite[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
+ descWrite[1].pImageInfo = &descImageInfo;
+
+ m_devFuncs->vkUpdateDescriptorSets(dev, 2, descWrite, 0, nullptr);
+ }
+
+ // Pipeline cache
+ VkPipelineCacheCreateInfo pipelineCacheInfo;
+ memset(&pipelineCacheInfo, 0, sizeof(pipelineCacheInfo));
+ pipelineCacheInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO;
+ err = m_devFuncs->vkCreatePipelineCache(dev, &pipelineCacheInfo, nullptr, &m_pipelineCache);
+ if (err != VK_SUCCESS)
+ qFatal("Failed to create pipeline cache: %d", err);
+
+ // Pipeline layout
+ VkPipelineLayoutCreateInfo pipelineLayoutInfo;
+ memset(&pipelineLayoutInfo, 0, sizeof(pipelineLayoutInfo));
+ pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
+ pipelineLayoutInfo.setLayoutCount = 1;
+ pipelineLayoutInfo.pSetLayouts = &m_descSetLayout;
+ err = m_devFuncs->vkCreatePipelineLayout(dev, &pipelineLayoutInfo, nullptr, &m_pipelineLayout);
+ if (err != VK_SUCCESS)
+ qFatal("Failed to create pipeline layout: %d", err);
+
+ // Shaders
+ VkShaderModule vertShaderModule = createShader(QStringLiteral(":/texture_vert.spv"));
+ VkShaderModule fragShaderModule = createShader(QStringLiteral(":/texture_frag.spv"));
+
+ // Graphics pipeline
+ VkGraphicsPipelineCreateInfo pipelineInfo;
+ memset(&pipelineInfo, 0, sizeof(pipelineInfo));
+ pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
+
+ VkPipelineShaderStageCreateInfo shaderStages[2] = {
+ {
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+ nullptr,
+ 0,
+ VK_SHADER_STAGE_VERTEX_BIT,
+ vertShaderModule,
+ "main",
+ nullptr
+ },
+ {
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO,
+ nullptr,
+ 0,
+ VK_SHADER_STAGE_FRAGMENT_BIT,
+ fragShaderModule,
+ "main",
+ nullptr
+ }
+ };
+ pipelineInfo.stageCount = 2;
+ pipelineInfo.pStages = shaderStages;
+
+ pipelineInfo.pVertexInputState = &vertexInputInfo;
+
+ VkPipelineInputAssemblyStateCreateInfo ia;
+ memset(&ia, 0, sizeof(ia));
+ ia.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
+ ia.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP;
+ pipelineInfo.pInputAssemblyState = &ia;
+
+ // The viewport and scissor will be set dynamically via vkCmdSetViewport/Scissor.
+ // This way the pipeline does not need to be touched when resizing the window.
+ VkPipelineViewportStateCreateInfo vp;
+ memset(&vp, 0, sizeof(vp));
+ vp.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
+ vp.viewportCount = 1;
+ vp.scissorCount = 1;
+ pipelineInfo.pViewportState = &vp;
+
+ VkPipelineRasterizationStateCreateInfo rs;
+ memset(&rs, 0, sizeof(rs));
+ rs.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
+ rs.polygonMode = VK_POLYGON_MODE_FILL;
+ rs.cullMode = VK_CULL_MODE_BACK_BIT;
+ rs.frontFace = VK_FRONT_FACE_CLOCKWISE;
+ rs.lineWidth = 1.0f;
+ pipelineInfo.pRasterizationState = &rs;
+
+ VkPipelineMultisampleStateCreateInfo ms;
+ memset(&ms, 0, sizeof(ms));
+ ms.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
+ ms.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT;
+ pipelineInfo.pMultisampleState = &ms;
+
+ VkPipelineDepthStencilStateCreateInfo ds;
+ memset(&ds, 0, sizeof(ds));
+ ds.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
+ ds.depthTestEnable = VK_TRUE;
+ ds.depthWriteEnable = VK_TRUE;
+ ds.depthCompareOp = VK_COMPARE_OP_LESS_OR_EQUAL;
+ pipelineInfo.pDepthStencilState = &ds;
+
+ VkPipelineColorBlendStateCreateInfo cb;
+ memset(&cb, 0, sizeof(cb));
+ cb.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
+ // assume pre-multiplied alpha, blend, write out all of rgba
+ VkPipelineColorBlendAttachmentState att;
+ memset(&att, 0, sizeof(att));
+ att.colorWriteMask = 0xF;
+ att.blendEnable = VK_TRUE;
+ att.srcColorBlendFactor = VK_BLEND_FACTOR_ONE;
+ att.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
+ att.colorBlendOp = VK_BLEND_OP_ADD;
+ att.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE;
+ att.dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
+ att.alphaBlendOp = VK_BLEND_OP_ADD;
+ cb.attachmentCount = 1;
+ cb.pAttachments = &att;
+ pipelineInfo.pColorBlendState = &cb;
+
+ VkDynamicState dynEnable[] = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR };
+ VkPipelineDynamicStateCreateInfo dyn;
+ memset(&dyn, 0, sizeof(dyn));
+ dyn.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
+ dyn.dynamicStateCount = sizeof(dynEnable) / sizeof(VkDynamicState);
+ dyn.pDynamicStates = dynEnable;
+ pipelineInfo.pDynamicState = &dyn;
+
+ pipelineInfo.layout = m_pipelineLayout;
+ pipelineInfo.renderPass = m_window->defaultRenderPass();
+
+ err = m_devFuncs->vkCreateGraphicsPipelines(dev, m_pipelineCache, 1, &pipelineInfo, nullptr, &m_pipeline);
+ if (err != VK_SUCCESS)
+ qFatal("Failed to create graphics pipeline: %d", err);
+
+ if (vertShaderModule)
+ m_devFuncs->vkDestroyShaderModule(dev, vertShaderModule, nullptr);
+ if (fragShaderModule)
+ m_devFuncs->vkDestroyShaderModule(dev, fragShaderModule, nullptr);
+}
+
+void VulkanRenderer::initSwapChainResources()
+{
+ qDebug("initSwapChainResources");
+
+ // Projection matrix
+ m_proj = m_window->clipCorrectionMatrix(); // adjust for Vulkan-OpenGL clip space differences
+ const QSize sz = m_window->swapChainImageSize();
+ m_proj.perspective(45.0f, sz.width() / (float) sz.height(), 0.01f, 100.0f);
+ m_proj.translate(0, 0, -4);
+}
+
+void VulkanRenderer::releaseSwapChainResources()
+{
+ qDebug("releaseSwapChainResources");
+}
+
+void VulkanRenderer::releaseResources()
+{
+ qDebug("releaseResources");
+
+ VkDevice dev = m_window->device();
+
+ if (m_sampler) {
+ m_devFuncs->vkDestroySampler(dev, m_sampler, nullptr);
+ m_sampler = VK_NULL_HANDLE;
+ }
+
+ if (m_texStaging) {
+ m_devFuncs->vkDestroyImage(dev, m_texStaging, nullptr);
+ m_texStaging = VK_NULL_HANDLE;
+ }
+
+ if (m_texStagingMem) {
+ m_devFuncs->vkFreeMemory(dev, m_texStagingMem, nullptr);
+ m_texStagingMem = VK_NULL_HANDLE;
+ }
+
+ if (m_texView) {
+ m_devFuncs->vkDestroyImageView(dev, m_texView, nullptr);
+ m_texView = VK_NULL_HANDLE;
+ }
+
+ if (m_texImage) {
+ m_devFuncs->vkDestroyImage(dev, m_texImage, nullptr);
+ m_texImage = VK_NULL_HANDLE;
+ }
+
+ if (m_texMem) {
+ m_devFuncs->vkFreeMemory(dev, m_texMem, nullptr);
+ m_texMem = VK_NULL_HANDLE;
+ }
+
+ if (m_pipeline) {
+ m_devFuncs->vkDestroyPipeline(dev, m_pipeline, nullptr);
+ m_pipeline = VK_NULL_HANDLE;
+ }
+
+ if (m_pipelineLayout) {
+ m_devFuncs->vkDestroyPipelineLayout(dev, m_pipelineLayout, nullptr);
+ m_pipelineLayout = VK_NULL_HANDLE;
+ }
+
+ if (m_pipelineCache) {
+ m_devFuncs->vkDestroyPipelineCache(dev, m_pipelineCache, nullptr);
+ m_pipelineCache = VK_NULL_HANDLE;
+ }
+
+ if (m_descSetLayout) {
+ m_devFuncs->vkDestroyDescriptorSetLayout(dev, m_descSetLayout, nullptr);
+ m_descSetLayout = VK_NULL_HANDLE;
+ }
+
+ if (m_descPool) {
+ m_devFuncs->vkDestroyDescriptorPool(dev, m_descPool, nullptr);
+ m_descPool = VK_NULL_HANDLE;
+ }
+
+ if (m_buf) {
+ m_devFuncs->vkDestroyBuffer(dev, m_buf, nullptr);
+ m_buf = VK_NULL_HANDLE;
+ }
+
+ if (m_bufMem) {
+ m_devFuncs->vkFreeMemory(dev, m_bufMem, nullptr);
+ m_bufMem = VK_NULL_HANDLE;
+ }
+}
+
+void VulkanRenderer::startNextFrame()
+{
+ VkDevice dev = m_window->device();
+ VkCommandBuffer cb = m_window->currentCommandBuffer();
+ const QSize sz = m_window->swapChainImageSize();
+
+ // Add the necessary barriers and do the host-linear -> device-optimal copy, if not yet done.
+ ensureTexture();
+
+ VkClearColorValue clearColor = {{ 0, 0, 0, 1 }};
+ VkClearDepthStencilValue clearDS = { 1, 0 };
+ VkClearValue clearValues[2];
+ memset(clearValues, 0, sizeof(clearValues));
+ clearValues[0].color = clearColor;
+ clearValues[1].depthStencil = clearDS;
+
+ VkRenderPassBeginInfo rpBeginInfo;
+ memset(&rpBeginInfo, 0, sizeof(rpBeginInfo));
+ rpBeginInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
+ rpBeginInfo.renderPass = m_window->defaultRenderPass();
+ rpBeginInfo.framebuffer = m_window->currentFramebuffer();
+ rpBeginInfo.renderArea.extent.width = sz.width();
+ rpBeginInfo.renderArea.extent.height = sz.height();
+ rpBeginInfo.clearValueCount = 2;
+ rpBeginInfo.pClearValues = clearValues;
+ VkCommandBuffer cmdBuf = m_window->currentCommandBuffer();
+ m_devFuncs->vkCmdBeginRenderPass(cmdBuf, &rpBeginInfo, VK_SUBPASS_CONTENTS_INLINE);
+
+ quint8 *p;
+ VkResult err = m_devFuncs->vkMapMemory(dev, m_bufMem, m_uniformBufInfo[m_window->currentFrame()].offset,
+ UNIFORM_DATA_SIZE, 0, reinterpret_cast<void **>(&p));
+ if (err != VK_SUCCESS)
+ qFatal("Failed to map memory: %d", err);
+ QMatrix4x4 m = m_proj;
+ m.rotate(m_rotation, 0, 0, 1);
+ memcpy(p, m.constData(), 16 * sizeof(float));
+ m_devFuncs->vkUnmapMemory(dev, m_bufMem);
+
+ // Not exactly a real animation system, just advance on every frame for now.
+ m_rotation += 1.0f;
+
+ m_devFuncs->vkCmdBindPipeline(cb, VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipeline);
+ m_devFuncs->vkCmdBindDescriptorSets(cb, VK_PIPELINE_BIND_POINT_GRAPHICS, m_pipelineLayout, 0, 1,
+ &m_descSet[m_window->currentFrame()], 0, nullptr);
+ VkDeviceSize vbOffset = 0;
+ m_devFuncs->vkCmdBindVertexBuffers(cb, 0, 1, &m_buf, &vbOffset);
+
+ VkViewport viewport;
+ viewport.x = viewport.y = 0;
+ viewport.width = sz.width();
+ viewport.height = sz.height();
+ viewport.minDepth = 0;
+ viewport.maxDepth = 1;
+ m_devFuncs->vkCmdSetViewport(cb, 0, 1, &viewport);
+
+ VkRect2D scissor;
+ scissor.offset.x = scissor.offset.y = 0;
+ scissor.extent.width = viewport.width;
+ scissor.extent.height = viewport.height;
+ m_devFuncs->vkCmdSetScissor(cb, 0, 1, &scissor);
+
+ m_devFuncs->vkCmdDraw(cb, 4, 1, 0, 0);
+
+ m_devFuncs->vkCmdEndRenderPass(cmdBuf);
+
+ m_window->frameReady();
+ m_window->requestUpdate(); // render continuously, throttled by the presentation rate
+}
diff --git a/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.h b/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.h
new file mode 100644
index 0000000000..251bdfb2e2
--- /dev/null
+++ b/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.h
@@ -0,0 +1,66 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef HELLOVULKANTEXTURE_H
+#define HELLOVULKANTEXTURE_H
+
+#include <QVulkanWindow>
+#include <QImage>
+
+class VulkanRenderer : public QVulkanWindowRenderer
+{
+public:
+ VulkanRenderer(QVulkanWindow *w);
+
+ void initResources() override;
+ void initSwapChainResources() override;
+ void releaseSwapChainResources() override;
+ void releaseResources() override;
+
+ void startNextFrame() override;
+
+private:
+ VkShaderModule createShader(const QString &name);
+ bool createTexture(const QString &name);
+ bool createTextureImage(const QSize &size, VkImage *image, VkDeviceMemory *mem,
+ VkImageTiling tiling, VkImageUsageFlags usage, uint32_t memIndex);
+ bool writeLinearImage(const QImage &img, VkImage image, VkDeviceMemory memory);
+ void ensureTexture();
+
+ QVulkanWindow *m_window;
+ QVulkanDeviceFunctions *m_devFuncs;
+
+ VkDeviceMemory m_bufMem = VK_NULL_HANDLE;
+ VkBuffer m_buf = VK_NULL_HANDLE;
+ VkDescriptorBufferInfo m_uniformBufInfo[QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT];
+
+ VkDescriptorPool m_descPool = VK_NULL_HANDLE;
+ VkDescriptorSetLayout m_descSetLayout = VK_NULL_HANDLE;
+ VkDescriptorSet m_descSet[QVulkanWindow::MAX_CONCURRENT_FRAME_COUNT];
+
+ VkPipelineCache m_pipelineCache = VK_NULL_HANDLE;
+ VkPipelineLayout m_pipelineLayout = VK_NULL_HANDLE;
+ VkPipeline m_pipeline = VK_NULL_HANDLE;
+
+ VkSampler m_sampler = VK_NULL_HANDLE;
+ VkImage m_texImage = VK_NULL_HANDLE;
+ VkDeviceMemory m_texMem = VK_NULL_HANDLE;
+ bool m_texLayoutPending = false;
+ VkImageView m_texView = VK_NULL_HANDLE;
+ VkImage m_texStaging = VK_NULL_HANDLE;
+ VkDeviceMemory m_texStagingMem = VK_NULL_HANDLE;
+ bool m_texStagingPending = false;
+ QSize m_texSize;
+ VkFormat m_texFormat;
+
+ QMatrix4x4 m_proj;
+ float m_rotation = 0.0f;
+};
+
+class VulkanWindow : public QVulkanWindow
+{
+public:
+ QVulkanWindowRenderer *createRenderer() override;
+};
+
+#endif // HELLOVULKANTEXTURE_H
diff --git a/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.pro b/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.pro
new file mode 100644
index 0000000000..59bfcda715
--- /dev/null
+++ b/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.pro
@@ -0,0 +1,7 @@
+HEADERS += hellovulkantexture.h
+SOURCES += hellovulkantexture.cpp main.cpp
+RESOURCES += hellovulkantexture.qrc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/vulkan/hellovulkantexture
+INSTALLS += target
diff --git a/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.qrc b/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.qrc
new file mode 100644
index 0000000000..04e7cda859
--- /dev/null
+++ b/tests/manual/examples/vulkan/hellovulkantexture/hellovulkantexture.qrc
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>texture_vert.spv</file>
+ <file>texture_frag.spv</file>
+ <file>qt256.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/vulkan/hellovulkantexture/main.cpp b/tests/manual/examples/vulkan/hellovulkantexture/main.cpp
new file mode 100644
index 0000000000..59a3273303
--- /dev/null
+++ b/tests/manual/examples/vulkan/hellovulkantexture/main.cpp
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QGuiApplication>
+#include <QVulkanInstance>
+#include <QLoggingCategory>
+#include "hellovulkantexture.h"
+
+Q_LOGGING_CATEGORY(lcVk, "qt.vulkan")
+
+int main(int argc, char *argv[])
+{
+ QGuiApplication app(argc, argv);
+
+ QLoggingCategory::setFilterRules(QStringLiteral("qt.vulkan=true"));
+
+ QVulkanInstance inst;
+ inst.setLayers({ "VK_LAYER_KHRONOS_validation" });
+
+ if (!inst.create())
+ qFatal("Failed to create Vulkan instance: %d", inst.errorCode());
+
+ VulkanWindow w;
+ w.setVulkanInstance(&inst);
+ if (QCoreApplication::arguments().contains(QStringLiteral("--srgb")))
+ w.setPreferredColorFormats(QList<VkFormat>() << VK_FORMAT_B8G8R8A8_SRGB);
+
+ w.resize(1024, 768);
+ w.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/vulkan/hellovulkantexture/qt256.png b/tests/manual/examples/vulkan/hellovulkantexture/qt256.png
new file mode 100644
index 0000000000..30c621c9c6
--- /dev/null
+++ b/tests/manual/examples/vulkan/hellovulkantexture/qt256.png
Binary files differ
diff --git a/tests/manual/examples/vulkan/hellovulkantexture/texture.frag b/tests/manual/examples/vulkan/hellovulkantexture/texture.frag
new file mode 100644
index 0000000000..e6021fe905
--- /dev/null
+++ b/tests/manual/examples/vulkan/hellovulkantexture/texture.frag
@@ -0,0 +1,12 @@
+#version 440
+
+layout(location = 0) in vec2 v_texcoord;
+
+layout(location = 0) out vec4 fragColor;
+
+layout(binding = 1) uniform sampler2D tex;
+
+void main()
+{
+ fragColor = texture(tex, v_texcoord);
+}
diff --git a/tests/manual/examples/vulkan/hellovulkantexture/texture.vert b/tests/manual/examples/vulkan/hellovulkantexture/texture.vert
new file mode 100644
index 0000000000..de486cb772
--- /dev/null
+++ b/tests/manual/examples/vulkan/hellovulkantexture/texture.vert
@@ -0,0 +1,18 @@
+#version 440
+
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec2 texcoord;
+
+layout(location = 0) out vec2 v_texcoord;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+} ubuf;
+
+out gl_PerVertex { vec4 gl_Position; };
+
+void main()
+{
+ v_texcoord = texcoord;
+ gl_Position = ubuf.mvp * position;
+}
diff --git a/tests/manual/examples/vulkan/hellovulkantexture/texture_frag.spv b/tests/manual/examples/vulkan/hellovulkantexture/texture_frag.spv
new file mode 100644
index 0000000000..7521ef6eef
--- /dev/null
+++ b/tests/manual/examples/vulkan/hellovulkantexture/texture_frag.spv
Binary files differ
diff --git a/tests/manual/examples/vulkan/hellovulkantexture/texture_vert.spv b/tests/manual/examples/vulkan/hellovulkantexture/texture_vert.spv
new file mode 100644
index 0000000000..6292c0de31
--- /dev/null
+++ b/tests/manual/examples/vulkan/hellovulkantexture/texture_vert.spv
Binary files differ
diff --git a/tests/manual/examples/widgets/application/CMakeLists.txt b/tests/manual/examples/widgets/application/CMakeLists.txt
new file mode 100644
index 0000000000..9b863a89fa
--- /dev/null
+++ b/tests/manual/examples/widgets/application/CMakeLists.txt
@@ -0,0 +1,54 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(application LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/mainwindows/application")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(application
+ main.cpp
+ mainwindow.cpp mainwindow.h
+)
+
+set_target_properties(application PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(application PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(application_resource_files
+ "images/copy.png"
+ "images/cut.png"
+ "images/new.png"
+ "images/open.png"
+ "images/paste.png"
+ "images/save.png"
+)
+
+qt_add_resources(application "application"
+ PREFIX
+ "/"
+ FILES
+ ${application_resource_files}
+)
+
+install(TARGETS application
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/application/application.pro b/tests/manual/examples/widgets/application/application.pro
new file mode 100644
index 0000000000..e55655a934
--- /dev/null
+++ b/tests/manual/examples/widgets/application/application.pro
@@ -0,0 +1,13 @@
+QT += widgets
+requires(qtConfig(filedialog))
+
+HEADERS = mainwindow.h
+SOURCES = main.cpp \
+ mainwindow.cpp
+#! [0]
+RESOURCES = application.qrc
+#! [0]
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/mainwindows/application
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/application/application.qrc b/tests/manual/examples/widgets/application/application.qrc
new file mode 100644
index 0000000000..0a776fab4d
--- /dev/null
+++ b/tests/manual/examples/widgets/application/application.qrc
@@ -0,0 +1,10 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>images/copy.png</file>
+ <file>images/cut.png</file>
+ <file>images/new.png</file>
+ <file>images/open.png</file>
+ <file>images/paste.png</file>
+ <file>images/save.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/application/images/copy.png b/tests/manual/examples/widgets/application/images/copy.png
new file mode 100644
index 0000000000..2aeb28288f
--- /dev/null
+++ b/tests/manual/examples/widgets/application/images/copy.png
Binary files differ
diff --git a/tests/manual/examples/widgets/application/images/cut.png b/tests/manual/examples/widgets/application/images/cut.png
new file mode 100644
index 0000000000..54638e9386
--- /dev/null
+++ b/tests/manual/examples/widgets/application/images/cut.png
Binary files differ
diff --git a/tests/manual/examples/widgets/application/images/new.png b/tests/manual/examples/widgets/application/images/new.png
new file mode 100644
index 0000000000..12131b0100
--- /dev/null
+++ b/tests/manual/examples/widgets/application/images/new.png
Binary files differ
diff --git a/tests/manual/examples/widgets/application/images/open.png b/tests/manual/examples/widgets/application/images/open.png
new file mode 100644
index 0000000000..45fa2883a7
--- /dev/null
+++ b/tests/manual/examples/widgets/application/images/open.png
Binary files differ
diff --git a/tests/manual/examples/widgets/application/images/paste.png b/tests/manual/examples/widgets/application/images/paste.png
new file mode 100644
index 0000000000..c14425cad1
--- /dev/null
+++ b/tests/manual/examples/widgets/application/images/paste.png
Binary files differ
diff --git a/tests/manual/examples/widgets/application/images/save.png b/tests/manual/examples/widgets/application/images/save.png
new file mode 100644
index 0000000000..e65a29d5f1
--- /dev/null
+++ b/tests/manual/examples/widgets/application/images/save.png
Binary files differ
diff --git a/tests/manual/examples/widgets/application/main.cpp b/tests/manual/examples/widgets/application/main.cpp
new file mode 100644
index 0000000000..722b8a71b8
--- /dev/null
+++ b/tests/manual/examples/widgets/application/main.cpp
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QCommandLineParser>
+#include <QCommandLineOption>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ QCoreApplication::setOrganizationName("QtProject");
+ QCoreApplication::setApplicationName("Application Example");
+ QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+ QCommandLineParser parser;
+ parser.setApplicationDescription(QCoreApplication::applicationName());
+ parser.addHelpOption();
+ parser.addVersionOption();
+ parser.addPositionalArgument("file", "The file to open.");
+ parser.process(app);
+
+ MainWindow mainWin;
+ if (!parser.positionalArguments().isEmpty())
+ mainWin.loadFile(parser.positionalArguments().first());
+ mainWin.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/application/mainwindow.cpp b/tests/manual/examples/widgets/application/mainwindow.cpp
new file mode 100644
index 0000000000..fcb5590751
--- /dev/null
+++ b/tests/manual/examples/widgets/application/mainwindow.cpp
@@ -0,0 +1,306 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+
+#include "mainwindow.h"
+
+MainWindow::MainWindow()
+ : textEdit(new QPlainTextEdit)
+{
+ setCentralWidget(textEdit);
+
+ createActions();
+ createStatusBar();
+
+ readSettings();
+
+ connect(textEdit->document(), &QTextDocument::contentsChanged,
+ this, &MainWindow::documentWasModified);
+
+#ifndef QT_NO_SESSIONMANAGER
+ connect(qApp, &QGuiApplication::commitDataRequest,
+ this, &MainWindow::commitData);
+#endif
+
+ setCurrentFile(QString());
+ setUnifiedTitleAndToolBarOnMac(true);
+}
+
+void MainWindow::closeEvent(QCloseEvent *event)
+{
+ if (maybeSave()) {
+ writeSettings();
+ event->accept();
+ } else {
+ event->ignore();
+ }
+}
+
+void MainWindow::newFile()
+{
+ if (maybeSave()) {
+ textEdit->clear();
+ setCurrentFile(QString());
+ }
+}
+
+void MainWindow::open()
+{
+ if (maybeSave()) {
+ QString fileName = QFileDialog::getOpenFileName(this);
+ if (!fileName.isEmpty())
+ loadFile(fileName);
+ }
+}
+
+bool MainWindow::save()
+{
+ if (curFile.isEmpty()) {
+ return saveAs();
+ } else {
+ return saveFile(curFile);
+ }
+}
+
+bool MainWindow::saveAs()
+{
+ QFileDialog dialog(this);
+ dialog.setWindowModality(Qt::WindowModal);
+ dialog.setAcceptMode(QFileDialog::AcceptSave);
+ if (dialog.exec() != QDialog::Accepted)
+ return false;
+ return saveFile(dialog.selectedFiles().first());
+}
+
+void MainWindow::about()
+{
+ QMessageBox::about(this, tr("About Application"),
+ tr("The <b>Application</b> example demonstrates how to "
+ "write modern GUI applications using Qt, with a menu bar, "
+ "toolbars, and a status bar."));
+}
+
+void MainWindow::documentWasModified()
+{
+ setWindowModified(textEdit->document()->isModified());
+}
+
+void MainWindow::createActions()
+{
+
+ QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
+ QToolBar *fileToolBar = addToolBar(tr("File"));
+ const QIcon newIcon = QIcon::fromTheme("document-new", QIcon(":/images/new.png"));
+ QAction *newAct = new QAction(newIcon, tr("&New"), this);
+ newAct->setShortcuts(QKeySequence::New);
+ newAct->setStatusTip(tr("Create a new file"));
+ connect(newAct, &QAction::triggered, this, &MainWindow::newFile);
+ fileMenu->addAction(newAct);
+ fileToolBar->addAction(newAct);
+
+ const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png"));
+ QAction *openAct = new QAction(openIcon, tr("&Open..."), this);
+ openAct->setShortcuts(QKeySequence::Open);
+ openAct->setStatusTip(tr("Open an existing file"));
+ connect(openAct, &QAction::triggered, this, &MainWindow::open);
+ fileMenu->addAction(openAct);
+ fileToolBar->addAction(openAct);
+
+ const QIcon saveIcon = QIcon::fromTheme("document-save", QIcon(":/images/save.png"));
+ QAction *saveAct = new QAction(saveIcon, tr("&Save"), this);
+ saveAct->setShortcuts(QKeySequence::Save);
+ saveAct->setStatusTip(tr("Save the document to disk"));
+ connect(saveAct, &QAction::triggered, this, &MainWindow::save);
+ fileMenu->addAction(saveAct);
+ fileToolBar->addAction(saveAct);
+
+ const QIcon saveAsIcon = QIcon::fromTheme("document-save-as");
+ QAction *saveAsAct = fileMenu->addAction(saveAsIcon, tr("Save &As..."), this, &MainWindow::saveAs);
+ saveAsAct->setShortcuts(QKeySequence::SaveAs);
+ saveAsAct->setStatusTip(tr("Save the document under a new name"));
+
+ fileMenu->addSeparator();
+
+ const QIcon exitIcon = QIcon::fromTheme("application-exit");
+ QAction *exitAct = fileMenu->addAction(exitIcon, tr("E&xit"), this, &QWidget::close);
+ exitAct->setShortcuts(QKeySequence::Quit);
+ exitAct->setStatusTip(tr("Exit the application"));
+
+ QMenu *editMenu = menuBar()->addMenu(tr("&Edit"));
+ QToolBar *editToolBar = addToolBar(tr("Edit"));
+
+#ifndef QT_NO_CLIPBOARD
+ const QIcon cutIcon = QIcon::fromTheme("edit-cut", QIcon(":/images/cut.png"));
+ QAction *cutAct = new QAction(cutIcon, tr("Cu&t"), this);
+ cutAct->setShortcuts(QKeySequence::Cut);
+ cutAct->setStatusTip(tr("Cut the current selection's contents to the "
+ "clipboard"));
+ connect(cutAct, &QAction::triggered, textEdit, &QPlainTextEdit::cut);
+ editMenu->addAction(cutAct);
+ editToolBar->addAction(cutAct);
+
+ const QIcon copyIcon = QIcon::fromTheme("edit-copy", QIcon(":/images/copy.png"));
+ QAction *copyAct = new QAction(copyIcon, tr("&Copy"), this);
+ copyAct->setShortcuts(QKeySequence::Copy);
+ copyAct->setStatusTip(tr("Copy the current selection's contents to the "
+ "clipboard"));
+ connect(copyAct, &QAction::triggered, textEdit, &QPlainTextEdit::copy);
+ editMenu->addAction(copyAct);
+ editToolBar->addAction(copyAct);
+
+ const QIcon pasteIcon = QIcon::fromTheme("edit-paste", QIcon(":/images/paste.png"));
+ QAction *pasteAct = new QAction(pasteIcon, tr("&Paste"), this);
+ pasteAct->setShortcuts(QKeySequence::Paste);
+ pasteAct->setStatusTip(tr("Paste the clipboard's contents into the current "
+ "selection"));
+ connect(pasteAct, &QAction::triggered, textEdit, &QPlainTextEdit::paste);
+ editMenu->addAction(pasteAct);
+ editToolBar->addAction(pasteAct);
+
+ menuBar()->addSeparator();
+
+#endif // !QT_NO_CLIPBOARD
+
+ QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
+ QAction *aboutAct = helpMenu->addAction(tr("&About"), this, &MainWindow::about);
+ aboutAct->setStatusTip(tr("Show the application's About box"));
+
+ QAction *aboutQtAct = helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt);
+ aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));
+
+#ifndef QT_NO_CLIPBOARD
+ cutAct->setEnabled(false);
+ copyAct->setEnabled(false);
+ connect(textEdit, &QPlainTextEdit::copyAvailable, cutAct, &QAction::setEnabled);
+ connect(textEdit, &QPlainTextEdit::copyAvailable, copyAct, &QAction::setEnabled);
+#endif // !QT_NO_CLIPBOARD
+}
+
+void MainWindow::createStatusBar()
+{
+ statusBar()->showMessage(tr("Ready"));
+}
+
+void MainWindow::readSettings()
+{
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+ const QByteArray geometry = settings.value("geometry", QByteArray()).toByteArray();
+ if (geometry.isEmpty()) {
+ const QRect availableGeometry = screen()->availableGeometry();
+ resize(availableGeometry.width() / 3, availableGeometry.height() / 2);
+ move((availableGeometry.width() - width()) / 2,
+ (availableGeometry.height() - height()) / 2);
+ } else {
+ restoreGeometry(geometry);
+ }
+}
+
+void MainWindow::writeSettings()
+{
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+ settings.setValue("geometry", saveGeometry());
+}
+
+bool MainWindow::maybeSave()
+{
+ if (!textEdit->document()->isModified())
+ return true;
+ const QMessageBox::StandardButton ret
+ = QMessageBox::warning(this, tr("Application"),
+ tr("The document has been modified.\n"
+ "Do you want to save your changes?"),
+ QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
+ switch (ret) {
+ case QMessageBox::Save:
+ return save();
+ case QMessageBox::Cancel:
+ return false;
+ default:
+ break;
+ }
+ return true;
+}
+
+void MainWindow::loadFile(const QString &fileName)
+{
+ QFile file(fileName);
+ if (!file.open(QFile::ReadOnly | QFile::Text)) {
+ QMessageBox::warning(this, tr("Application"),
+ tr("Cannot read file %1:\n%2.")
+ .arg(QDir::toNativeSeparators(fileName), file.errorString()));
+ return;
+ }
+
+ QTextStream in(&file);
+#ifndef QT_NO_CURSOR
+ QGuiApplication::setOverrideCursor(Qt::WaitCursor);
+#endif
+ textEdit->setPlainText(in.readAll());
+#ifndef QT_NO_CURSOR
+ QGuiApplication::restoreOverrideCursor();
+#endif
+
+ setCurrentFile(fileName);
+ statusBar()->showMessage(tr("File loaded"), 2000);
+}
+
+bool MainWindow::saveFile(const QString &fileName)
+{
+ QString errorMessage;
+
+ QGuiApplication::setOverrideCursor(Qt::WaitCursor);
+ QSaveFile file(fileName);
+ if (file.open(QFile::WriteOnly | QFile::Text)) {
+ QTextStream out(&file);
+ out << textEdit->toPlainText();
+ if (!file.commit()) {
+ errorMessage = tr("Cannot write file %1:\n%2.")
+ .arg(QDir::toNativeSeparators(fileName), file.errorString());
+ }
+ } else {
+ errorMessage = tr("Cannot open file %1 for writing:\n%2.")
+ .arg(QDir::toNativeSeparators(fileName), file.errorString());
+ }
+ QGuiApplication::restoreOverrideCursor();
+
+ if (!errorMessage.isEmpty()) {
+ QMessageBox::warning(this, tr("Application"), errorMessage);
+ return false;
+ }
+
+ setCurrentFile(fileName);
+ statusBar()->showMessage(tr("File saved"), 2000);
+ return true;
+}
+
+void MainWindow::setCurrentFile(const QString &fileName)
+{
+ curFile = fileName;
+ textEdit->document()->setModified(false);
+ setWindowModified(false);
+
+ QString shownName = curFile;
+ if (curFile.isEmpty())
+ shownName = "untitled.txt";
+ setWindowFilePath(shownName);
+}
+
+QString MainWindow::strippedName(const QString &fullFileName)
+{
+ return QFileInfo(fullFileName).fileName();
+}
+
+#ifndef QT_NO_SESSIONMANAGER
+void MainWindow::commitData(QSessionManager &manager)
+{
+ if (manager.allowsInteraction()) {
+ if (!maybeSave())
+ manager.cancel();
+ } else {
+ // Non-interactive: save without asking
+ if (textEdit->document()->isModified())
+ save();
+ }
+}
+#endif
diff --git a/tests/manual/examples/widgets/application/mainwindow.h b/tests/manual/examples/widgets/application/mainwindow.h
new file mode 100644
index 0000000000..f1a4e2ac4f
--- /dev/null
+++ b/tests/manual/examples/widgets/application/mainwindow.h
@@ -0,0 +1,53 @@
+// 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 QMenu;
+class QPlainTextEdit;
+class QSessionManager;
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow();
+
+ void loadFile(const QString &fileName);
+
+protected:
+ void closeEvent(QCloseEvent *event) override;
+
+private slots:
+ void newFile();
+ void open();
+ bool save();
+ bool saveAs();
+ void about();
+ void documentWasModified();
+#ifndef QT_NO_SESSIONMANAGER
+ void commitData(QSessionManager &);
+#endif
+
+private:
+ void createActions();
+ void createStatusBar();
+ void readSettings();
+ void writeSettings();
+ bool maybeSave();
+ bool saveFile(const QString &fileName);
+ void setCurrentFile(const QString &fileName);
+ QString strippedName(const QString &fullFileName);
+
+ QPlainTextEdit *textEdit;
+ QString curFile;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/CMakeLists.txt b/tests/manual/examples/widgets/dialogs/classwizard/CMakeLists.txt
new file mode 100644
index 0000000000..1e31415f87
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/CMakeLists.txt
@@ -0,0 +1,55 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(classwizard LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/dialogs/classwizard")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(classwizard
+ classwizard.cpp classwizard.h
+ main.cpp
+)
+
+set_target_properties(classwizard PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(classwizard PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(classwizard_resource_files
+ "images/background.png"
+ "images/banner.png"
+ "images/logo1.png"
+ "images/logo2.png"
+ "images/logo3.png"
+ "images/watermark1.png"
+ "images/watermark2.png"
+)
+
+qt_add_resources(classwizard "classwizard"
+ PREFIX
+ "/"
+ FILES
+ ${classwizard_resource_files}
+)
+
+install(TARGETS classwizard
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/classwizard.cpp b/tests/manual/examples/widgets/dialogs/classwizard/classwizard.cpp
new file mode 100644
index 0000000000..d3587ce46f
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/classwizard.cpp
@@ -0,0 +1,394 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+
+#include "classwizard.h"
+
+//! [0] //! [1]
+ClassWizard::ClassWizard(QWidget *parent)
+ : QWizard(parent)
+{
+ addPage(new IntroPage);
+ addPage(new ClassInfoPage);
+ addPage(new CodeStylePage);
+ addPage(new OutputFilesPage);
+ addPage(new ConclusionPage);
+//! [0]
+
+ setPixmap(QWizard::BannerPixmap, QPixmap(":/images/banner.png"));
+ setPixmap(QWizard::BackgroundPixmap, QPixmap(":/images/background.png"));
+
+ setWindowTitle(tr("Class Wizard"));
+//! [2]
+}
+//! [1] //! [2]
+
+//! [3]
+void ClassWizard::accept()
+//! [3] //! [4]
+{
+ QByteArray className = field("className").toByteArray();
+ QByteArray baseClass = field("baseClass").toByteArray();
+ QByteArray macroName = field("macroName").toByteArray();
+ QByteArray baseInclude = field("baseInclude").toByteArray();
+
+ QString outputDir = field("outputDir").toString();
+ QString header = field("header").toString();
+ QString implementation = field("implementation").toString();
+//! [4]
+
+ QByteArray block;
+
+ if (field("comment").toBool()) {
+ block += "/*\n";
+ block += " " + header.toLatin1() + '\n';
+ block += "*/\n";
+ block += '\n';
+ }
+ if (field("protect").toBool()) {
+ block += "#ifndef " + macroName + '\n';
+ block += "#define " + macroName + '\n';
+ block += '\n';
+ }
+ if (field("includeBase").toBool()) {
+ block += "#include " + baseInclude + '\n';
+ block += '\n';
+ }
+
+ block += "class " + className;
+ if (!baseClass.isEmpty())
+ block += " : public " + baseClass;
+ block += '\n';
+ block += "{\n";
+
+ /* qmake ignore Q_OBJECT */
+
+ if (field("qobjectMacro").toBool()) {
+ block += " Q_OBJECT\n";
+ block += '\n';
+ }
+ block += "public:\n";
+
+ if (field("qobjectCtor").toBool()) {
+ block += " " + className + "(QObject *parent = nullptr);\n";
+ } else if (field("qwidgetCtor").toBool()) {
+ block += " " + className + "(QWidget *parent = nullptr);\n";
+ } else if (field("defaultCtor").toBool()) {
+ block += " " + className + "();\n";
+ if (field("copyCtor").toBool()) {
+ block += " " + className + "(const " + className + " &other);\n";
+ block += '\n';
+ block += " " + className + " &operator=" + "(const " + className
+ + " &other);\n";
+ }
+ }
+ block += "};\n";
+
+ if (field("protect").toBool()) {
+ block += '\n';
+ block += "#endif\n";
+ }
+
+ QFile headerFile(outputDir + '/' + header);
+ if (!headerFile.open(QFile::WriteOnly | QFile::Text)) {
+ QMessageBox::warning(nullptr, QObject::tr("Simple Wizard"),
+ QObject::tr("Cannot write file %1:\n%2")
+ .arg(headerFile.fileName())
+ .arg(headerFile.errorString()));
+ return;
+ }
+ headerFile.write(block);
+
+ block.clear();
+
+ if (field("comment").toBool()) {
+ block += "/*\n";
+ block += " " + implementation.toLatin1() + '\n';
+ block += "*/\n";
+ block += '\n';
+ }
+ block += "#include \"" + header.toLatin1() + "\"\n";
+ block += '\n';
+
+ if (field("qobjectCtor").toBool()) {
+ block += className + "::" + className + "(QObject *parent)\n";
+ block += " : " + baseClass + "(parent)\n";
+ block += "{\n";
+ block += "}\n";
+ } else if (field("qwidgetCtor").toBool()) {
+ block += className + "::" + className + "(QWidget *parent)\n";
+ block += " : " + baseClass + "(parent)\n";
+ block += "{\n";
+ block += "}\n";
+ } else if (field("defaultCtor").toBool()) {
+ block += className + "::" + className + "()\n";
+ block += "{\n";
+ block += " // missing code\n";
+ block += "}\n";
+
+ if (field("copyCtor").toBool()) {
+ block += "\n";
+ block += className + "::" + className + "(const " + className
+ + " &other)\n";
+ block += "{\n";
+ block += " *this = other;\n";
+ block += "}\n";
+ block += '\n';
+ block += className + " &" + className + "::operator=(const "
+ + className + " &other)\n";
+ block += "{\n";
+ if (!baseClass.isEmpty())
+ block += " " + baseClass + "::operator=(other);\n";
+ block += " // missing code\n";
+ block += " return *this;\n";
+ block += "}\n";
+ }
+ }
+
+ QFile implementationFile(outputDir + '/' + implementation);
+ if (!implementationFile.open(QFile::WriteOnly | QFile::Text)) {
+ QMessageBox::warning(nullptr, QObject::tr("Simple Wizard"),
+ QObject::tr("Cannot write file %1:\n%2")
+ .arg(implementationFile.fileName())
+ .arg(implementationFile.errorString()));
+ return;
+ }
+ implementationFile.write(block);
+
+//! [5]
+ QDialog::accept();
+//! [5] //! [6]
+}
+//! [6]
+
+//! [7]
+IntroPage::IntroPage(QWidget *parent)
+ : QWizardPage(parent)
+{
+ setTitle(tr("Introduction"));
+ setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/watermark1.png"));
+
+ label = new QLabel(tr("This wizard will generate a skeleton C++ class "
+ "definition, including a few functions. You simply "
+ "need to specify the class name and set a few "
+ "options to produce a header file and an "
+ "implementation file for your new C++ class."));
+ label->setWordWrap(true);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(label);
+ setLayout(layout);
+}
+//! [7]
+
+//! [8] //! [9]
+ClassInfoPage::ClassInfoPage(QWidget *parent)
+ : QWizardPage(parent)
+{
+//! [8]
+ setTitle(tr("Class Information"));
+ setSubTitle(tr("Specify basic information about the class for which you "
+ "want to generate skeleton source code files."));
+ setPixmap(QWizard::LogoPixmap, QPixmap(":/images/logo1.png"));
+
+//! [10]
+ classNameLabel = new QLabel(tr("&Class name:"));
+ classNameLineEdit = new QLineEdit;
+ classNameLabel->setBuddy(classNameLineEdit);
+
+ baseClassLabel = new QLabel(tr("B&ase class:"));
+ baseClassLineEdit = new QLineEdit;
+ baseClassLabel->setBuddy(baseClassLineEdit);
+
+ qobjectMacroCheckBox = new QCheckBox(tr("Generate Q_OBJECT &macro"));
+
+//! [10]
+ groupBox = new QGroupBox(tr("C&onstructor"));
+//! [9]
+
+ qobjectCtorRadioButton = new QRadioButton(tr("&QObject-style constructor"));
+ qwidgetCtorRadioButton = new QRadioButton(tr("Q&Widget-style constructor"));
+ defaultCtorRadioButton = new QRadioButton(tr("&Default constructor"));
+ copyCtorCheckBox = new QCheckBox(tr("&Generate copy constructor and "
+ "operator="));
+
+ defaultCtorRadioButton->setChecked(true);
+
+ connect(defaultCtorRadioButton, &QAbstractButton::toggled,
+ copyCtorCheckBox, &QWidget::setEnabled);
+
+//! [11] //! [12]
+ registerField("className*", classNameLineEdit);
+ registerField("baseClass", baseClassLineEdit);
+ registerField("qobjectMacro", qobjectMacroCheckBox);
+//! [11]
+ registerField("qobjectCtor", qobjectCtorRadioButton);
+ registerField("qwidgetCtor", qwidgetCtorRadioButton);
+ registerField("defaultCtor", defaultCtorRadioButton);
+ registerField("copyCtor", copyCtorCheckBox);
+
+ QVBoxLayout *groupBoxLayout = new QVBoxLayout;
+//! [12]
+ groupBoxLayout->addWidget(qobjectCtorRadioButton);
+ groupBoxLayout->addWidget(qwidgetCtorRadioButton);
+ groupBoxLayout->addWidget(defaultCtorRadioButton);
+ groupBoxLayout->addWidget(copyCtorCheckBox);
+ groupBox->setLayout(groupBoxLayout);
+
+ QGridLayout *layout = new QGridLayout;
+ layout->addWidget(classNameLabel, 0, 0);
+ layout->addWidget(classNameLineEdit, 0, 1);
+ layout->addWidget(baseClassLabel, 1, 0);
+ layout->addWidget(baseClassLineEdit, 1, 1);
+ layout->addWidget(qobjectMacroCheckBox, 2, 0, 1, 2);
+ layout->addWidget(groupBox, 3, 0, 1, 2);
+ setLayout(layout);
+//! [13]
+}
+//! [13]
+
+//! [14]
+CodeStylePage::CodeStylePage(QWidget *parent)
+ : QWizardPage(parent)
+{
+ setTitle(tr("Code Style Options"));
+ setSubTitle(tr("Choose the formatting of the generated code."));
+ setPixmap(QWizard::LogoPixmap, QPixmap(":/images/logo2.png"));
+
+ commentCheckBox = new QCheckBox(tr("&Start generated files with a "
+//! [14]
+ "comment"));
+ commentCheckBox->setChecked(true);
+
+ protectCheckBox = new QCheckBox(tr("&Protect header file against multiple "
+ "inclusions"));
+ protectCheckBox->setChecked(true);
+
+ macroNameLabel = new QLabel(tr("&Macro name:"));
+ macroNameLineEdit = new QLineEdit;
+ macroNameLabel->setBuddy(macroNameLineEdit);
+
+ includeBaseCheckBox = new QCheckBox(tr("&Include base class definition"));
+ baseIncludeLabel = new QLabel(tr("Base class include:"));
+ baseIncludeLineEdit = new QLineEdit;
+ baseIncludeLabel->setBuddy(baseIncludeLineEdit);
+
+ connect(protectCheckBox, &QAbstractButton::toggled,
+ macroNameLabel, &QWidget::setEnabled);
+ connect(protectCheckBox, &QAbstractButton::toggled,
+ macroNameLineEdit, &QWidget::setEnabled);
+ connect(includeBaseCheckBox, &QAbstractButton::toggled,
+ baseIncludeLabel, &QWidget::setEnabled);
+ connect(includeBaseCheckBox, &QAbstractButton::toggled,
+ baseIncludeLineEdit, &QWidget::setEnabled);
+
+ registerField("comment", commentCheckBox);
+ registerField("protect", protectCheckBox);
+ registerField("macroName", macroNameLineEdit);
+ registerField("includeBase", includeBaseCheckBox);
+ registerField("baseInclude", baseIncludeLineEdit);
+
+ QGridLayout *layout = new QGridLayout;
+ layout->setColumnMinimumWidth(0, 20);
+ layout->addWidget(commentCheckBox, 0, 0, 1, 3);
+ layout->addWidget(protectCheckBox, 1, 0, 1, 3);
+ layout->addWidget(macroNameLabel, 2, 1);
+ layout->addWidget(macroNameLineEdit, 2, 2);
+ layout->addWidget(includeBaseCheckBox, 3, 0, 1, 3);
+ layout->addWidget(baseIncludeLabel, 4, 1);
+ layout->addWidget(baseIncludeLineEdit, 4, 2);
+//! [15]
+ setLayout(layout);
+}
+//! [15]
+
+//! [16]
+void CodeStylePage::initializePage()
+{
+ QString className = field("className").toString();
+ macroNameLineEdit->setText(className.toUpper() + "_H");
+
+ QString baseClass = field("baseClass").toString();
+
+ includeBaseCheckBox->setChecked(!baseClass.isEmpty());
+ includeBaseCheckBox->setEnabled(!baseClass.isEmpty());
+ baseIncludeLabel->setEnabled(!baseClass.isEmpty());
+ baseIncludeLineEdit->setEnabled(!baseClass.isEmpty());
+
+ QRegularExpression rx("Q[A-Z].*");
+ if (baseClass.isEmpty()) {
+ baseIncludeLineEdit->clear();
+ } else if (rx.match(baseClass).hasMatch()) {
+ baseIncludeLineEdit->setText('<' + baseClass + '>');
+ } else {
+ baseIncludeLineEdit->setText('"' + baseClass.toLower() + ".h\"");
+ }
+}
+//! [16]
+
+OutputFilesPage::OutputFilesPage(QWidget *parent)
+ : QWizardPage(parent)
+{
+ setTitle(tr("Output Files"));
+ setSubTitle(tr("Specify where you want the wizard to put the generated "
+ "skeleton code."));
+ setPixmap(QWizard::LogoPixmap, QPixmap(":/images/logo3.png"));
+
+ outputDirLabel = new QLabel(tr("&Output directory:"));
+ outputDirLineEdit = new QLineEdit;
+ outputDirLabel->setBuddy(outputDirLineEdit);
+
+ headerLabel = new QLabel(tr("&Header file name:"));
+ headerLineEdit = new QLineEdit;
+ headerLabel->setBuddy(headerLineEdit);
+
+ implementationLabel = new QLabel(tr("&Implementation file name:"));
+ implementationLineEdit = new QLineEdit;
+ implementationLabel->setBuddy(implementationLineEdit);
+
+ registerField("outputDir*", outputDirLineEdit);
+ registerField("header*", headerLineEdit);
+ registerField("implementation*", implementationLineEdit);
+
+ QGridLayout *layout = new QGridLayout;
+ layout->addWidget(outputDirLabel, 0, 0);
+ layout->addWidget(outputDirLineEdit, 0, 1);
+ layout->addWidget(headerLabel, 1, 0);
+ layout->addWidget(headerLineEdit, 1, 1);
+ layout->addWidget(implementationLabel, 2, 0);
+ layout->addWidget(implementationLineEdit, 2, 1);
+ setLayout(layout);
+}
+
+//! [17]
+void OutputFilesPage::initializePage()
+{
+ QString className = field("className").toString();
+ headerLineEdit->setText(className.toLower() + ".h");
+ implementationLineEdit->setText(className.toLower() + ".cpp");
+ outputDirLineEdit->setText(QDir::toNativeSeparators(QDir::tempPath()));
+}
+//! [17]
+
+ConclusionPage::ConclusionPage(QWidget *parent)
+ : QWizardPage(parent)
+{
+ setTitle(tr("Conclusion"));
+ setPixmap(QWizard::WatermarkPixmap, QPixmap(":/images/watermark2.png"));
+
+ label = new QLabel;
+ label->setWordWrap(true);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(label);
+ setLayout(layout);
+}
+
+void ConclusionPage::initializePage()
+{
+ QString finishText = wizard()->buttonText(QWizard::FinishButton);
+ finishText.remove('&');
+ label->setText(tr("Click %1 to generate the class skeleton.")
+ .arg(finishText));
+}
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/classwizard.h b/tests/manual/examples/widgets/dialogs/classwizard/classwizard.h
new file mode 100644
index 0000000000..61f63b5035
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/classwizard.h
@@ -0,0 +1,119 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef CLASSWIZARD_H
+#define CLASSWIZARD_H
+
+#include <QWizard>
+
+QT_BEGIN_NAMESPACE
+class QCheckBox;
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+class QRadioButton;
+QT_END_NAMESPACE
+
+//! [0]
+class ClassWizard : public QWizard
+{
+ Q_OBJECT
+
+public:
+ ClassWizard(QWidget *parent = nullptr);
+
+ void accept() override;
+};
+//! [0]
+
+//! [1]
+class IntroPage : public QWizardPage
+{
+ Q_OBJECT
+
+public:
+ IntroPage(QWidget *parent = nullptr);
+
+private:
+ QLabel *label;
+};
+//! [1]
+
+//! [2]
+class ClassInfoPage : public QWizardPage
+{
+ Q_OBJECT
+
+public:
+ ClassInfoPage(QWidget *parent = nullptr);
+
+private:
+ QLabel *classNameLabel;
+ QLabel *baseClassLabel;
+ QLineEdit *classNameLineEdit;
+ QLineEdit *baseClassLineEdit;
+ QCheckBox *qobjectMacroCheckBox;
+ QGroupBox *groupBox;
+ QRadioButton *qobjectCtorRadioButton;
+ QRadioButton *qwidgetCtorRadioButton;
+ QRadioButton *defaultCtorRadioButton;
+ QCheckBox *copyCtorCheckBox;
+};
+//! [2]
+
+//! [3]
+class CodeStylePage : public QWizardPage
+{
+ Q_OBJECT
+
+public:
+ CodeStylePage(QWidget *parent = nullptr);
+
+protected:
+ void initializePage() override;
+
+private:
+ QCheckBox *commentCheckBox;
+ QCheckBox *protectCheckBox;
+ QCheckBox *includeBaseCheckBox;
+ QLabel *macroNameLabel;
+ QLabel *baseIncludeLabel;
+ QLineEdit *macroNameLineEdit;
+ QLineEdit *baseIncludeLineEdit;
+};
+//! [3]
+
+class OutputFilesPage : public QWizardPage
+{
+ Q_OBJECT
+
+public:
+ OutputFilesPage(QWidget *parent = nullptr);
+
+protected:
+ void initializePage() override;
+
+private:
+ QLabel *outputDirLabel;
+ QLabel *headerLabel;
+ QLabel *implementationLabel;
+ QLineEdit *outputDirLineEdit;
+ QLineEdit *headerLineEdit;
+ QLineEdit *implementationLineEdit;
+};
+
+class ConclusionPage : public QWizardPage
+{
+ Q_OBJECT
+
+public:
+ ConclusionPage(QWidget *parent = nullptr);
+
+protected:
+ void initializePage() override;
+
+private:
+ QLabel *label;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/classwizard.pro b/tests/manual/examples/widgets/dialogs/classwizard/classwizard.pro
new file mode 100644
index 0000000000..3ec321f4e8
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/classwizard.pro
@@ -0,0 +1,10 @@
+QT += widgets
+
+HEADERS = classwizard.h
+SOURCES = classwizard.cpp \
+ main.cpp
+RESOURCES = classwizard.qrc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/dialogs/classwizard
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/classwizard.qrc b/tests/manual/examples/widgets/dialogs/classwizard/classwizard.qrc
new file mode 100644
index 0000000000..41a5ddc7d1
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/classwizard.qrc
@@ -0,0 +1,11 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>images/background.png</file>
+ <file>images/banner.png</file>
+ <file>images/logo1.png</file>
+ <file>images/logo2.png</file>
+ <file>images/logo3.png</file>
+ <file>images/watermark1.png</file>
+ <file>images/watermark2.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/images/background.png b/tests/manual/examples/widgets/dialogs/classwizard/images/background.png
new file mode 100644
index 0000000000..44c7badb85
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/images/background.png
Binary files differ
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/images/banner.png b/tests/manual/examples/widgets/dialogs/classwizard/images/banner.png
new file mode 100644
index 0000000000..3169152b8e
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/images/banner.png
Binary files differ
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/images/logo1.png b/tests/manual/examples/widgets/dialogs/classwizard/images/logo1.png
new file mode 100644
index 0000000000..f9b594aafc
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/images/logo1.png
Binary files differ
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/images/logo2.png b/tests/manual/examples/widgets/dialogs/classwizard/images/logo2.png
new file mode 100644
index 0000000000..5dcbd4669d
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/images/logo2.png
Binary files differ
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/images/logo3.png b/tests/manual/examples/widgets/dialogs/classwizard/images/logo3.png
new file mode 100644
index 0000000000..9fd3ea2358
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/images/logo3.png
Binary files differ
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/images/watermark1.png b/tests/manual/examples/widgets/dialogs/classwizard/images/watermark1.png
new file mode 100644
index 0000000000..0091f5c17a
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/images/watermark1.png
Binary files differ
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/images/watermark2.png b/tests/manual/examples/widgets/dialogs/classwizard/images/watermark2.png
new file mode 100644
index 0000000000..3b88f2e360
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/images/watermark2.png
Binary files differ
diff --git a/tests/manual/examples/widgets/dialogs/classwizard/main.cpp b/tests/manual/examples/widgets/dialogs/classwizard/main.cpp
new file mode 100644
index 0000000000..a58db7f54f
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/classwizard/main.cpp
@@ -0,0 +1,26 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QTranslator>
+#include <QLocale>
+#include <QLibraryInfo>
+
+#include "classwizard.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+#ifndef QT_NO_TRANSLATION
+ QString translatorFileName = QLatin1String("qtbase_");
+ translatorFileName += QLocale::system().name();
+ QTranslator *translator = new QTranslator(&app);
+ if (translator->load(translatorFileName, QLibraryInfo::path(QLibraryInfo::TranslationsPath)))
+ app.installTranslator(translator);
+#endif
+
+ ClassWizard wizard;
+ wizard.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/dialogs/extension/CMakeLists.txt b/tests/manual/examples/widgets/dialogs/extension/CMakeLists.txt
new file mode 100644
index 0000000000..1e6da9187f
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/extension/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(extension LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/dialogs/extension")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(extension
+ finddialog.cpp finddialog.h
+ main.cpp
+)
+
+set_target_properties(extension PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(extension PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS extension
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/dialogs/extension/extension.pro b/tests/manual/examples/widgets/dialogs/extension/extension.pro
new file mode 100644
index 0000000000..f51052cd56
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/extension/extension.pro
@@ -0,0 +1,9 @@
+QT += widgets
+
+HEADERS = finddialog.h
+SOURCES = finddialog.cpp \
+ main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/dialogs/extension
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/dialogs/extension/finddialog.cpp b/tests/manual/examples/widgets/dialogs/extension/finddialog.cpp
new file mode 100644
index 0000000000..f6b5943467
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/extension/finddialog.cpp
@@ -0,0 +1,77 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+
+#include "finddialog.h"
+
+//! [0]
+FindDialog::FindDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ label = new QLabel(tr("Find &what:"));
+ lineEdit = new QLineEdit;
+ label->setBuddy(lineEdit);
+
+ caseCheckBox = new QCheckBox(tr("Match &case"));
+ fromStartCheckBox = new QCheckBox(tr("Search from &start"));
+ fromStartCheckBox->setChecked(true);
+
+//! [1]
+ findButton = new QPushButton(tr("&Find"));
+ findButton->setDefault(true);
+
+ moreButton = new QPushButton(tr("&More"));
+ moreButton->setCheckable(true);
+//! [0]
+ moreButton->setAutoDefault(false);
+
+//! [1]
+
+//! [2]
+ extension = new QWidget;
+
+ wholeWordsCheckBox = new QCheckBox(tr("&Whole words"));
+ backwardCheckBox = new QCheckBox(tr("Search &backward"));
+ searchSelectionCheckBox = new QCheckBox(tr("Search se&lection"));
+//! [2]
+
+//! [3]
+ buttonBox = new QDialogButtonBox(Qt::Vertical);
+ buttonBox->addButton(findButton, QDialogButtonBox::ActionRole);
+ buttonBox->addButton(moreButton, QDialogButtonBox::ActionRole);
+
+ connect(moreButton, &QAbstractButton::toggled, extension, &QWidget::setVisible);
+
+ QVBoxLayout *extensionLayout = new QVBoxLayout;
+ extensionLayout->setContentsMargins(QMargins());
+ extensionLayout->addWidget(wholeWordsCheckBox);
+ extensionLayout->addWidget(backwardCheckBox);
+ extensionLayout->addWidget(searchSelectionCheckBox);
+ extension->setLayout(extensionLayout);
+//! [3]
+
+//! [4]
+ QHBoxLayout *topLeftLayout = new QHBoxLayout;
+ topLeftLayout->addWidget(label);
+ topLeftLayout->addWidget(lineEdit);
+
+ QVBoxLayout *leftLayout = new QVBoxLayout;
+ leftLayout->addLayout(topLeftLayout);
+ leftLayout->addWidget(caseCheckBox);
+ leftLayout->addWidget(fromStartCheckBox);
+
+ QGridLayout *mainLayout = new QGridLayout;
+ mainLayout->setSizeConstraint(QLayout::SetFixedSize);
+ mainLayout->addLayout(leftLayout, 0, 0);
+ mainLayout->addWidget(buttonBox, 0, 1);
+ mainLayout->addWidget(extension, 1, 0, 1, 2);
+ mainLayout->setRowStretch(2, 1);
+
+ setLayout(mainLayout);
+
+ setWindowTitle(tr("Extension"));
+//! [4] //! [5]
+ extension->hide();
+}
+//! [5]
diff --git a/tests/manual/examples/widgets/dialogs/extension/finddialog.h b/tests/manual/examples/widgets/dialogs/extension/finddialog.h
new file mode 100644
index 0000000000..61bc442f46
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/extension/finddialog.h
@@ -0,0 +1,41 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef FINDDIALOG_H
+#define FINDDIALOG_H
+
+#include <QDialog>
+
+QT_BEGIN_NAMESPACE
+class QCheckBox;
+class QDialogButtonBox;
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+class QPushButton;
+QT_END_NAMESPACE
+
+//! [0]
+class FindDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ FindDialog(QWidget *parent = nullptr);
+
+private:
+ QLabel *label;
+ QLineEdit *lineEdit;
+ QCheckBox *caseCheckBox;
+ QCheckBox *fromStartCheckBox;
+ QCheckBox *wholeWordsCheckBox;
+ QCheckBox *searchSelectionCheckBox;
+ QCheckBox *backwardCheckBox;
+ QDialogButtonBox *buttonBox;
+ QPushButton *findButton;
+ QPushButton *moreButton;
+ QWidget *extension;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/dialogs/extension/main.cpp b/tests/manual/examples/widgets/dialogs/extension/main.cpp
new file mode 100644
index 0000000000..730a0347f4
--- /dev/null
+++ b/tests/manual/examples/widgets/dialogs/extension/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 "finddialog.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ FindDialog dialog;
+
+ dialog.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/draganddrop/fridgemagnets/CMakeLists.txt b/tests/manual/examples/widgets/draganddrop/fridgemagnets/CMakeLists.txt
new file mode 100644
index 0000000000..966406969c
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/fridgemagnets/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(fridgemagnets LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/draganddrop/fridgemagnets")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(fridgemagnets
+ draglabel.cpp draglabel.h
+ dragwidget.cpp dragwidget.h
+ main.cpp
+)
+
+set_target_properties(fridgemagnets PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(fridgemagnets PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(fridgemagnets_resource_files
+ "words.txt"
+)
+
+qt_add_resources(fridgemagnets "fridgemagnets"
+ PREFIX
+ "/dictionary"
+ FILES
+ ${fridgemagnets_resource_files}
+)
+
+install(TARGETS fridgemagnets
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/draganddrop/fridgemagnets/draglabel.cpp b/tests/manual/examples/widgets/draganddrop/fridgemagnets/draglabel.cpp
new file mode 100644
index 0000000000..952faae8fe
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/fridgemagnets/draglabel.cpp
@@ -0,0 +1,51 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "draglabel.h"
+
+#include <QtWidgets>
+
+//! [0]
+DragLabel::DragLabel(const QString &text, QWidget *parent)
+ : QLabel(parent)
+{
+ QFontMetrics metric(font());
+ QSize size = metric.size(Qt::TextSingleLine, text);
+
+ QImage image(size.width() + 12, size.height() + 12, QImage::Format_ARGB32_Premultiplied);
+ image.fill(qRgba(0, 0, 0, 0));
+
+ QFont font;
+ font.setStyleStrategy(QFont::ForceOutline);
+//! [0]
+
+//! [1]
+ QLinearGradient gradient(0, 0, 0, image.height()-1);
+ gradient.setColorAt(0.0, Qt::white);
+ gradient.setColorAt(0.2, QColor(200, 200, 255));
+ gradient.setColorAt(0.8, QColor(200, 200, 255));
+ gradient.setColorAt(1.0, QColor(127, 127, 200));
+
+ QPainter painter;
+ painter.begin(&image);
+ painter.setRenderHint(QPainter::Antialiasing);
+ painter.setBrush(gradient);
+ painter.drawRoundedRect(QRectF(0.5, 0.5, image.width()-1, image.height()-1),
+ 25, 25, Qt::RelativeSize);
+
+ painter.setFont(font);
+ painter.setBrush(Qt::black);
+ painter.drawText(QRect(QPoint(6, 6), size), Qt::AlignCenter, text);
+ painter.end();
+//! [1]
+
+//! [2]
+ setPixmap(QPixmap::fromImage(image));
+ m_labelText = text;
+}
+//! [2]
+
+QString DragLabel::labelText() const
+{
+ return m_labelText;
+}
diff --git a/tests/manual/examples/widgets/draganddrop/fridgemagnets/draglabel.h b/tests/manual/examples/widgets/draganddrop/fridgemagnets/draglabel.h
new file mode 100644
index 0000000000..e734a9ff78
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/fridgemagnets/draglabel.h
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef DRAGLABEL_H
+#define DRAGLABEL_H
+
+#include <QLabel>
+
+QT_BEGIN_NAMESPACE
+class QDragEnterEvent;
+class QDragMoveEvent;
+class QFrame;
+QT_END_NAMESPACE
+
+//! [0]
+class DragLabel : public QLabel
+{
+public:
+ DragLabel(const QString &text, QWidget *parent);
+ QString labelText() const;
+
+private:
+ QString m_labelText;
+};
+//! [0]
+
+#endif // DRAGLABEL_H
diff --git a/tests/manual/examples/widgets/draganddrop/fridgemagnets/dragwidget.cpp b/tests/manual/examples/widgets/draganddrop/fridgemagnets/dragwidget.cpp
new file mode 100644
index 0000000000..a883e7c58a
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/fridgemagnets/dragwidget.cpp
@@ -0,0 +1,176 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "draglabel.h"
+#include "dragwidget.h"
+
+#include <QtWidgets>
+
+static inline QString fridgetMagnetsMimeType() { return QStringLiteral("application/x-fridgemagnet"); }
+
+//! [0]
+DragWidget::DragWidget(QWidget *parent)
+ : QWidget(parent)
+{
+ QFile dictionaryFile(QStringLiteral(":/dictionary/words.txt"));
+ dictionaryFile.open(QFile::ReadOnly);
+ QTextStream inputStream(&dictionaryFile);
+//! [0]
+
+//! [1]
+ int x = 5;
+ int y = 5;
+
+ while (!inputStream.atEnd()) {
+ QString word;
+ inputStream >> word;
+ if (!word.isEmpty()) {
+ DragLabel *wordLabel = new DragLabel(word, this);
+ wordLabel->move(x, y);
+ wordLabel->show();
+ wordLabel->setAttribute(Qt::WA_DeleteOnClose);
+ x += wordLabel->width() + 2;
+ if (x >= 245) {
+ x = 5;
+ y += wordLabel->height() + 2;
+ }
+ }
+ }
+//! [1]
+
+//! [2]
+ QPalette newPalette = palette();
+ newPalette.setColor(QPalette::Window, Qt::white);
+ setPalette(newPalette);
+
+ setMinimumSize(400, qMax(200, y));
+ setWindowTitle(tr("Fridge Magnets"));
+//! [2] //! [3]
+ setAcceptDrops(true);
+}
+//! [3]
+
+//! [4]
+void DragWidget::dragEnterEvent(QDragEnterEvent *event)
+{
+//! [4] //! [5]
+ if (event->mimeData()->hasFormat(fridgetMagnetsMimeType())) {
+ if (children().contains(event->source())) {
+ event->setDropAction(Qt::MoveAction);
+ event->accept();
+ } else {
+ event->acceptProposedAction();
+//! [5] //! [6]
+ }
+//! [6] //! [7]
+ } else if (event->mimeData()->hasText()) {
+ event->acceptProposedAction();
+ } else {
+ event->ignore();
+ }
+}
+//! [7]
+
+//! [8]
+void DragWidget::dragMoveEvent(QDragMoveEvent *event)
+{
+ if (event->mimeData()->hasFormat(fridgetMagnetsMimeType())) {
+ if (children().contains(event->source())) {
+ event->setDropAction(Qt::MoveAction);
+ event->accept();
+ } else {
+ event->acceptProposedAction();
+ }
+ } else if (event->mimeData()->hasText()) {
+ event->acceptProposedAction();
+ } else {
+ event->ignore();
+ }
+}
+//! [8]
+
+//! [9]
+void DragWidget::dropEvent(QDropEvent *event)
+{
+ if (event->mimeData()->hasFormat(fridgetMagnetsMimeType())) {
+ const QMimeData *mime = event->mimeData();
+//! [9] //! [10]
+ QByteArray itemData = mime->data(fridgetMagnetsMimeType());
+ QDataStream dataStream(&itemData, QIODevice::ReadOnly);
+
+ QString text;
+ QPoint offset;
+ dataStream >> text >> offset;
+//! [10]
+//! [11]
+ DragLabel *newLabel = new DragLabel(text, this);
+ newLabel->move(event->position().toPoint() - offset);
+ newLabel->show();
+ newLabel->setAttribute(Qt::WA_DeleteOnClose);
+
+ if (event->source() == this) {
+ event->setDropAction(Qt::MoveAction);
+ event->accept();
+ } else {
+ event->acceptProposedAction();
+ }
+//! [11] //! [12]
+ } else if (event->mimeData()->hasText()) {
+ QStringList pieces = event->mimeData()->text().split(
+ QRegularExpression(QStringLiteral("\\s+")), Qt::SkipEmptyParts);
+ QPoint position = event->position().toPoint();
+
+ for (const QString &piece : pieces) {
+ DragLabel *newLabel = new DragLabel(piece, this);
+ newLabel->move(position);
+ newLabel->show();
+ newLabel->setAttribute(Qt::WA_DeleteOnClose);
+
+ position += QPoint(newLabel->width(), 0);
+ }
+
+ event->acceptProposedAction();
+ } else {
+ event->ignore();
+ }
+}
+//! [12]
+
+//! [13]
+void DragWidget::mousePressEvent(QMouseEvent *event)
+{
+//! [13]
+//! [14]
+ DragLabel *child = static_cast<DragLabel*>(childAt(event->position().toPoint()));
+ if (!child)
+ return;
+
+ QPoint hotSpot = event->position().toPoint() - child->pos();
+
+ QByteArray itemData;
+ QDataStream dataStream(&itemData, QIODevice::WriteOnly);
+ dataStream << child->labelText() << QPoint(hotSpot);
+//! [14]
+
+//! [15]
+ QMimeData *mimeData = new QMimeData;
+ mimeData->setData(fridgetMagnetsMimeType(), itemData);
+ mimeData->setText(child->labelText());
+//! [15]
+
+//! [16]
+ QDrag *drag = new QDrag(this);
+ drag->setMimeData(mimeData);
+ drag->setPixmap(child->pixmap());
+ drag->setHotSpot(hotSpot);
+
+ child->hide();
+//! [16]
+
+//! [17]
+ if (drag->exec(Qt::MoveAction | Qt::CopyAction, Qt::CopyAction) == Qt::MoveAction)
+ child->close();
+ else
+ child->show();
+}
+//! [17]
diff --git a/tests/manual/examples/widgets/draganddrop/fridgemagnets/dragwidget.h b/tests/manual/examples/widgets/draganddrop/fridgemagnets/dragwidget.h
new file mode 100644
index 0000000000..9614a3b76a
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/fridgemagnets/dragwidget.h
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef DRAGWIDGET_H
+#define DRAGWIDGET_H
+
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QDragEnterEvent;
+class QDropEvent;
+QT_END_NAMESPACE
+
+//! [0]
+class DragWidget : public QWidget
+{
+public:
+ explicit DragWidget(QWidget *parent = nullptr);
+
+protected:
+ void dragEnterEvent(QDragEnterEvent *event) override;
+ void dragMoveEvent(QDragMoveEvent *event) override;
+ void dropEvent(QDropEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+};
+//! [0]
+
+#endif // DRAGWIDGET_H
diff --git a/tests/manual/examples/widgets/draganddrop/fridgemagnets/fridgemagnets.pro b/tests/manual/examples/widgets/draganddrop/fridgemagnets/fridgemagnets.pro
new file mode 100644
index 0000000000..2c3165d1c5
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/fridgemagnets/fridgemagnets.pro
@@ -0,0 +1,12 @@
+QT += widgets
+
+HEADERS = draglabel.h \
+ dragwidget.h
+RESOURCES = fridgemagnets.qrc
+SOURCES = draglabel.cpp \
+ dragwidget.cpp \
+ main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/draganddrop/fridgemagnets
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/draganddrop/fridgemagnets/fridgemagnets.qrc b/tests/manual/examples/widgets/draganddrop/fridgemagnets/fridgemagnets.qrc
new file mode 100644
index 0000000000..b72217d701
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/fridgemagnets/fridgemagnets.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/dictionary">
+ <file>words.txt</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/draganddrop/fridgemagnets/main.cpp b/tests/manual/examples/widgets/draganddrop/fridgemagnets/main.cpp
new file mode 100644
index 0000000000..d3ffc82650
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/fridgemagnets/main.cpp
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "dragwidget.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+#ifdef QT_KEYPAD_NAVIGATION
+ QApplication::setNavigationMode(Qt::NavigationModeCursorAuto);
+#endif
+ DragWidget window;
+
+ bool smallScreen = QApplication::arguments().contains(QStringLiteral("-small-screen"));
+ if (smallScreen)
+ window.showFullScreen();
+ else
+ window.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/draganddrop/fridgemagnets/words.txt b/tests/manual/examples/widgets/draganddrop/fridgemagnets/words.txt
new file mode 100644
index 0000000000..a7e1632b09
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/fridgemagnets/words.txt
@@ -0,0 +1,48 @@
+Colorless
+green
+ideas
+sleep
+furiously
+A
+colorless
+green
+idea
+is
+a
+new
+untried
+idea
+that
+is
+without
+vividness
+dull
+and
+unexciting
+To
+sleep
+furiously
+may
+seem
+a
+puzzling
+turn
+of
+phrase
+but
+the
+mind
+in
+sleep
+often
+indeed
+moves
+furiously
+with
+ideas
+and
+images
+flickering
+in
+and
+out
diff --git a/tests/manual/examples/widgets/draganddrop/puzzle/CMakeLists.txt b/tests/manual/examples/widgets/draganddrop/puzzle/CMakeLists.txt
new file mode 100644
index 0000000000..a4c098e45b
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/puzzle/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(puzzle LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/draganddrop_puzzle")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(draganddrop_puzzle
+ main.cpp
+ mainwindow.cpp mainwindow.h
+ pieceslist.cpp pieceslist.h
+ puzzlewidget.cpp puzzlewidget.h
+)
+
+set_target_properties(draganddrop_puzzle PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(draganddrop_puzzle PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(puzzle_resource_files
+ "example.jpg"
+)
+
+qt_add_resources(draganddrop_puzzle "puzzle"
+ PREFIX
+ "/images"
+ FILES
+ ${puzzle_resource_files}
+)
+
+install(TARGETS draganddrop_puzzle
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/draganddrop/puzzle/example.jpg b/tests/manual/examples/widgets/draganddrop/puzzle/example.jpg
new file mode 100644
index 0000000000..023203c57a
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/puzzle/example.jpg
Binary files differ
diff --git a/tests/manual/examples/widgets/draganddrop/puzzle/main.cpp b/tests/manual/examples/widgets/draganddrop/puzzle/main.cpp
new file mode 100644
index 0000000000..32e219256a
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/puzzle/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow window;
+ window.loadImage(QStringLiteral(":/images/example.jpg"));
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/draganddrop/puzzle/mainwindow.cpp b/tests/manual/examples/widgets/draganddrop/puzzle/mainwindow.cpp
new file mode 100644
index 0000000000..b34bc24201
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/puzzle/mainwindow.cpp
@@ -0,0 +1,118 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+#include "pieceslist.h"
+#include "puzzlewidget.h"
+
+#include <QtWidgets>
+#include <stdlib.h>
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+{
+ setupMenus();
+ setupWidgets();
+
+ setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ setWindowTitle(tr("Puzzle"));
+}
+
+void MainWindow::openImage()
+{
+ const QString directory =
+ QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).value(0, QDir::homePath());
+ QFileDialog dialog(this, tr("Open Image"), directory);
+ dialog.setAcceptMode(QFileDialog::AcceptOpen);
+ dialog.setFileMode(QFileDialog::ExistingFile);
+ QStringList mimeTypeFilters;
+ for (const QByteArray &mimeTypeName : QImageReader::supportedMimeTypes())
+ mimeTypeFilters.append(mimeTypeName);
+ mimeTypeFilters.sort();
+ dialog.setMimeTypeFilters(mimeTypeFilters);
+ dialog.selectMimeTypeFilter("image/jpeg");
+ if (dialog.exec() == QDialog::Accepted)
+ loadImage(dialog.selectedFiles().constFirst());
+}
+
+void MainWindow::loadImage(const QString &fileName)
+{
+ QPixmap newImage;
+ if (!newImage.load(fileName)) {
+ QMessageBox::warning(this, tr("Open Image"),
+ tr("The image file could not be loaded."),
+ QMessageBox::Close);
+ return;
+ }
+ puzzleImage = newImage;
+ setupPuzzle();
+}
+
+void MainWindow::setCompleted()
+{
+ QMessageBox::information(this, tr("Puzzle Completed"),
+ tr("Congratulations! You have completed the puzzle!\n"
+ "Click OK to start again."),
+ QMessageBox::Ok);
+
+ setupPuzzle();
+}
+
+void MainWindow::setupPuzzle()
+{
+ int size = qMin(puzzleImage.width(), puzzleImage.height());
+ puzzleImage = puzzleImage.copy((puzzleImage.width() - size) / 2,
+ (puzzleImage.height() - size) / 2, size, size).scaled(puzzleWidget->width(),
+ puzzleWidget->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+
+ piecesList->clear();
+
+ for (int y = 0; y < 5; ++y) {
+ for (int x = 0; x < 5; ++x) {
+ int pieceSize = puzzleWidget->pieceSize();
+ QPixmap pieceImage = puzzleImage.copy(x * pieceSize, y * pieceSize, pieceSize, pieceSize);
+ piecesList->addPiece(pieceImage, QPoint(x, y));
+ }
+ }
+
+ for (int i = 0; i < piecesList->count(); ++i) {
+ if (QRandomGenerator::global()->bounded(2) == 1) {
+ QListWidgetItem *item = piecesList->takeItem(i);
+ piecesList->insertItem(0, item);
+ }
+ }
+
+ puzzleWidget->clear();
+}
+
+void MainWindow::setupMenus()
+{
+ QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
+
+ QAction *openAction = fileMenu->addAction(tr("&Open..."), this, &MainWindow::openImage);
+ openAction->setShortcuts(QKeySequence::Open);
+
+ QAction *exitAction = fileMenu->addAction(tr("E&xit"), qApp, &QCoreApplication::quit);
+ exitAction->setShortcuts(QKeySequence::Quit);
+
+ QMenu *gameMenu = menuBar()->addMenu(tr("&Game"));
+
+ gameMenu->addAction(tr("&Restart"), this, &MainWindow::setupPuzzle);
+}
+
+void MainWindow::setupWidgets()
+{
+ QFrame *frame = new QFrame;
+ QHBoxLayout *frameLayout = new QHBoxLayout(frame);
+ puzzleWidget = new PuzzleWidget(400);
+
+ piecesList = new PiecesList(puzzleWidget->pieceSize(), this);
+
+
+ connect(puzzleWidget, &PuzzleWidget::puzzleCompleted,
+ this, &MainWindow::setCompleted, Qt::QueuedConnection);
+
+ frameLayout->addWidget(piecesList);
+ frameLayout->addWidget(puzzleWidget);
+ setCentralWidget(frame);
+}
diff --git a/tests/manual/examples/widgets/draganddrop/puzzle/mainwindow.h b/tests/manual/examples/widgets/draganddrop/puzzle/mainwindow.h
new file mode 100644
index 0000000000..83a441c722
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/puzzle/mainwindow.h
@@ -0,0 +1,40 @@
+// 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>
+#include <QPixmap>
+
+class PiecesList;
+class PuzzleWidget;
+QT_BEGIN_NAMESPACE
+class QListWidgetItem;
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit MainWindow(QWidget *parent = nullptr);
+ void loadImage(const QString &path);
+
+public slots:
+ void openImage();
+ void setupPuzzle();
+
+private slots:
+ void setCompleted();
+
+private:
+ void setupMenus();
+ void setupWidgets();
+
+ QPixmap puzzleImage;
+ PiecesList *piecesList;
+ PuzzleWidget *puzzleWidget;
+};
+
+#endif // MAINWINDOW_H
diff --git a/tests/manual/examples/widgets/draganddrop/puzzle/pieceslist.cpp b/tests/manual/examples/widgets/draganddrop/puzzle/pieceslist.cpp
new file mode 100644
index 0000000000..0c7e771e42
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/puzzle/pieceslist.cpp
@@ -0,0 +1,87 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "pieceslist.h"
+
+#include <QDrag>
+#include <QDragEnterEvent>
+#include <QMimeData>
+
+PiecesList::PiecesList(int pieceSize, QWidget *parent)
+ : QListWidget(parent), m_PieceSize(pieceSize)
+{
+ setDragEnabled(true);
+ setViewMode(QListView::IconMode);
+ setIconSize(QSize(m_PieceSize, m_PieceSize));
+ setSpacing(10);
+ setAcceptDrops(true);
+ setDropIndicatorShown(true);
+}
+
+void PiecesList::dragEnterEvent(QDragEnterEvent *event)
+{
+ if (event->mimeData()->hasFormat(PiecesList::puzzleMimeType()))
+ event->accept();
+ else
+ event->ignore();
+}
+
+void PiecesList::dragMoveEvent(QDragMoveEvent *event)
+{
+ if (event->mimeData()->hasFormat(PiecesList::puzzleMimeType())) {
+ event->setDropAction(Qt::MoveAction);
+ event->accept();
+ } else {
+ event->ignore();
+ }
+}
+
+void PiecesList::dropEvent(QDropEvent *event)
+{
+ if (event->mimeData()->hasFormat(PiecesList::puzzleMimeType())) {
+ QByteArray pieceData = event->mimeData()->data(PiecesList::puzzleMimeType());
+ QDataStream dataStream(&pieceData, QIODevice::ReadOnly);
+ QPixmap pixmap;
+ QPoint location;
+ dataStream >> pixmap >> location;
+
+ addPiece(pixmap, location);
+
+ event->setDropAction(Qt::MoveAction);
+ event->accept();
+ } else {
+ event->ignore();
+ }
+}
+
+void PiecesList::addPiece(const QPixmap &pixmap, const QPoint &location)
+{
+ QListWidgetItem *pieceItem = new QListWidgetItem(this);
+ pieceItem->setIcon(QIcon(pixmap));
+ pieceItem->setData(Qt::UserRole, QVariant(pixmap));
+ pieceItem->setData(Qt::UserRole+1, location);
+ pieceItem->setFlags(Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDragEnabled);
+}
+
+void PiecesList::startDrag(Qt::DropActions /*supportedActions*/)
+{
+ QListWidgetItem *item = currentItem();
+
+ QByteArray itemData;
+ QDataStream dataStream(&itemData, QIODevice::WriteOnly);
+ QPixmap pixmap = qvariant_cast<QPixmap>(item->data(Qt::UserRole));
+ QPoint location = item->data(Qt::UserRole+1).toPoint();
+
+ dataStream << pixmap << location;
+
+ QMimeData *mimeData = new QMimeData;
+ mimeData->setData(PiecesList::puzzleMimeType(), itemData);
+
+ QDrag *drag = new QDrag(this);
+ drag->setMimeData(mimeData);
+ drag->setHotSpot(QPoint(pixmap.width()/2, pixmap.height()/2));
+ drag->setPixmap(pixmap);
+
+ if (drag->exec(Qt::MoveAction) == Qt::MoveAction)
+ delete takeItem(row(item));
+}
diff --git a/tests/manual/examples/widgets/draganddrop/puzzle/pieceslist.h b/tests/manual/examples/widgets/draganddrop/puzzle/pieceslist.h
new file mode 100644
index 0000000000..4c617e7006
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/puzzle/pieceslist.h
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PIECESLIST_H
+#define PIECESLIST_H
+
+#include <QListWidget>
+
+class PiecesList : public QListWidget
+{
+ Q_OBJECT
+
+public:
+ explicit PiecesList(int pieceSize, QWidget *parent = nullptr);
+ void addPiece(const QPixmap &pixmap, const QPoint &location);
+
+ static QString puzzleMimeType() { return QStringLiteral("image/x-puzzle-piece"); }
+
+protected:
+ void dragEnterEvent(QDragEnterEvent *event) override;
+ void dragMoveEvent(QDragMoveEvent *event) override;
+ void dropEvent(QDropEvent *event) override;
+ void startDrag(Qt::DropActions supportedActions) override;
+
+ int m_PieceSize;
+};
+
+#endif // PIECESLIST_H
diff --git a/tests/manual/examples/widgets/draganddrop/puzzle/puzzle.pro b/tests/manual/examples/widgets/draganddrop/puzzle/puzzle.pro
new file mode 100644
index 0000000000..c462ba1bb8
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/puzzle/puzzle.pro
@@ -0,0 +1,17 @@
+QT += widgets
+requires(qtConfig(filedialog))
+
+HEADERS = mainwindow.h \
+ pieceslist.h \
+ puzzlewidget.h
+RESOURCES = puzzle.qrc
+SOURCES = main.cpp \
+ mainwindow.cpp \
+ pieceslist.cpp \
+ puzzlewidget.cpp
+
+QMAKE_PROJECT_NAME = dndpuzzle
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/draganddrop/puzzle
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/draganddrop/puzzle/puzzle.qrc b/tests/manual/examples/widgets/draganddrop/puzzle/puzzle.qrc
new file mode 100644
index 0000000000..4076cec026
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/puzzle/puzzle.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/images">
+ <file>example.jpg</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/draganddrop/puzzle/puzzlewidget.cpp b/tests/manual/examples/widgets/draganddrop/puzzle/puzzlewidget.cpp
new file mode 100644
index 0000000000..7c3f12f7d8
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/puzzle/puzzlewidget.cpp
@@ -0,0 +1,167 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "puzzlewidget.h"
+#include "pieceslist.h"
+
+#include <QDrag>
+#include <QDragEnterEvent>
+#include <QMimeData>
+#include <QPainter>
+
+PuzzleWidget::PuzzleWidget(int imageSize, QWidget *parent)
+ : QWidget(parent), m_ImageSize(imageSize)
+{
+ setAcceptDrops(true);
+ setMinimumSize(m_ImageSize, m_ImageSize);
+ setMaximumSize(m_ImageSize, m_ImageSize);
+}
+
+void PuzzleWidget::clear()
+{
+ pieces.clear();
+ highlightedRect = QRect();
+ inPlace = 0;
+ update();
+}
+
+void PuzzleWidget::dragEnterEvent(QDragEnterEvent *event)
+{
+ if (event->mimeData()->hasFormat(PiecesList::puzzleMimeType()))
+ event->accept();
+ else
+ event->ignore();
+}
+
+void PuzzleWidget::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ QRect updateRect = highlightedRect;
+ highlightedRect = QRect();
+ update(updateRect);
+ event->accept();
+}
+
+void PuzzleWidget::dragMoveEvent(QDragMoveEvent *event)
+{
+ QRect updateRect = highlightedRect.united(targetSquare(event->position().toPoint()));
+
+ if (event->mimeData()->hasFormat(PiecesList::puzzleMimeType())
+ && findPiece(targetSquare(event->position().toPoint())) == -1) {
+
+ highlightedRect = targetSquare(event->position().toPoint());
+ event->setDropAction(Qt::MoveAction);
+ event->accept();
+ } else {
+ highlightedRect = QRect();
+ event->ignore();
+ }
+
+ update(updateRect);
+}
+
+void PuzzleWidget::dropEvent(QDropEvent *event)
+{
+ if (event->mimeData()->hasFormat(PiecesList::puzzleMimeType())
+ && findPiece(targetSquare(event->position().toPoint())) == -1) {
+
+ QByteArray pieceData = event->mimeData()->data(PiecesList::puzzleMimeType());
+ QDataStream dataStream(&pieceData, QIODevice::ReadOnly);
+ Piece piece;
+ piece.rect = targetSquare(event->position().toPoint());
+ dataStream >> piece.pixmap >> piece.location;
+
+ pieces.append(piece);
+
+ highlightedRect = QRect();
+ update(piece.rect);
+
+ event->setDropAction(Qt::MoveAction);
+ event->accept();
+
+ if (piece.location == piece.rect.topLeft() / pieceSize()) {
+ inPlace++;
+ if (inPlace == 25)
+ emit puzzleCompleted();
+ }
+ } else {
+ highlightedRect = QRect();
+ event->ignore();
+ }
+}
+
+int PuzzleWidget::findPiece(const QRect &pieceRect) const
+{
+ for (int i = 0, size = pieces.size(); i < size; ++i) {
+ if (pieces.at(i).rect == pieceRect)
+ return i;
+ }
+ return -1;
+}
+
+void PuzzleWidget::mousePressEvent(QMouseEvent *event)
+{
+ QRect square = targetSquare(event->position().toPoint());
+ const int found = findPiece(square);
+
+ if (found == -1)
+ return;
+
+ Piece piece = pieces.takeAt(found);
+
+ if (piece.location == square.topLeft() / pieceSize())
+ inPlace--;
+
+ update(square);
+
+ QByteArray itemData;
+ QDataStream dataStream(&itemData, QIODevice::WriteOnly);
+
+ dataStream << piece.pixmap << piece.location;
+
+ QMimeData *mimeData = new QMimeData;
+ mimeData->setData(PiecesList::puzzleMimeType(), itemData);
+
+ QDrag *drag = new QDrag(this);
+ drag->setMimeData(mimeData);
+ drag->setHotSpot(event->position().toPoint() - square.topLeft());
+ drag->setPixmap(piece.pixmap);
+
+ if (drag->exec(Qt::MoveAction) != Qt::MoveAction) {
+ pieces.insert(found, piece);
+ update(targetSquare(event->position().toPoint()));
+
+ if (piece.location == square.topLeft() / pieceSize())
+ inPlace++;
+ }
+}
+
+void PuzzleWidget::paintEvent(QPaintEvent *event)
+{
+ QPainter painter(this);
+ painter.fillRect(event->rect(), Qt::white);
+
+ if (highlightedRect.isValid()) {
+ painter.setBrush(QColor("#ffcccc"));
+ painter.setPen(Qt::NoPen);
+ painter.drawRect(highlightedRect.adjusted(0, 0, -1, -1));
+ }
+
+ for (const Piece &piece : pieces)
+ painter.drawPixmap(piece.rect, piece.pixmap);
+}
+
+const QRect PuzzleWidget::targetSquare(const QPoint &position) const
+{
+ QPoint topLeft = QPoint(position.x() / pieceSize(), position.y() / pieceSize()) * pieceSize();
+ return QRect(topLeft, QSize(pieceSize(), pieceSize()));
+}
+
+int PuzzleWidget::pieceSize() const
+{
+ return m_ImageSize / 5;
+}
+
+int PuzzleWidget::imageSize() const
+{
+ return m_ImageSize;
+}
diff --git a/tests/manual/examples/widgets/draganddrop/puzzle/puzzlewidget.h b/tests/manual/examples/widgets/draganddrop/puzzle/puzzlewidget.h
new file mode 100644
index 0000000000..d1c00872ec
--- /dev/null
+++ b/tests/manual/examples/widgets/draganddrop/puzzle/puzzlewidget.h
@@ -0,0 +1,56 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PUZZLEWIDGET_H
+#define PUZZLEWIDGET_H
+
+#include <QPoint>
+#include <QPixmap>
+#include <QList>
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QDragEnterEvent;
+class QDropEvent;
+class QMouseEvent;
+QT_END_NAMESPACE
+
+class PuzzleWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit PuzzleWidget(int imageSize, QWidget *parent = nullptr);
+ void clear();
+
+ int pieceSize() const;
+ int imageSize() const;
+
+signals:
+ void puzzleCompleted();
+
+protected:
+ void dragEnterEvent(QDragEnterEvent *event) override;
+ void dragLeaveEvent(QDragLeaveEvent *event) override;
+ void dragMoveEvent(QDragMoveEvent *event) override;
+ void dropEvent(QDropEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void paintEvent(QPaintEvent *event) override;
+
+private:
+ struct Piece {
+ QPixmap pixmap;
+ QRect rect;
+ QPoint location;
+ };
+
+ int findPiece(const QRect &pieceRect) const;
+ const QRect targetSquare(const QPoint &position) const;
+
+ QList<Piece> pieces;
+ QRect highlightedRect;
+ int inPlace;
+ int m_ImageSize;
+};
+
+#endif // PUZZLEWIDGET_H
diff --git a/tests/manual/examples/widgets/effects/fademessage/CMakeLists.txt b/tests/manual/examples/widgets/effects/fademessage/CMakeLists.txt
new file mode 100644
index 0000000000..13139fe0ad
--- /dev/null
+++ b/tests/manual/examples/widgets/effects/fademessage/CMakeLists.txt
@@ -0,0 +1,49 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(fademessage LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/effects/fademessage")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(fademessage
+ fademessage.cpp fademessage.h
+ main.cpp
+)
+
+set_target_properties(fademessage PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(fademessage PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(fademessage_resource_files
+ "background.jpg"
+)
+
+qt_add_resources(fademessage "fademessage"
+ PREFIX
+ "/"
+ FILES
+ ${fademessage_resource_files}
+)
+
+install(TARGETS fademessage
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/effects/fademessage/README b/tests/manual/examples/widgets/effects/fademessage/README
new file mode 100644
index 0000000000..f639e76508
--- /dev/null
+++ b/tests/manual/examples/widgets/effects/fademessage/README
@@ -0,0 +1,2 @@
+The background is taken from a public domain photo at:
+http://www.photos8.com/view/windows_problem_blue-800x600.html
diff --git a/tests/manual/examples/widgets/effects/fademessage/background.jpg b/tests/manual/examples/widgets/effects/fademessage/background.jpg
new file mode 100644
index 0000000000..9884233a29
--- /dev/null
+++ b/tests/manual/examples/widgets/effects/fademessage/background.jpg
Binary files differ
diff --git a/tests/manual/examples/widgets/effects/fademessage/fademessage.cpp b/tests/manual/examples/widgets/effects/fademessage/fademessage.cpp
new file mode 100644
index 0000000000..3d8385020b
--- /dev/null
+++ b/tests/manual/examples/widgets/effects/fademessage/fademessage.cpp
@@ -0,0 +1,91 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "fademessage.h"
+
+#include <QtWidgets>
+
+FadeMessage::FadeMessage(QWidget *parent): QGraphicsView(parent)
+{
+ setScene(&m_scene);
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+
+ setupScene();
+
+ m_animation = new QPropertyAnimation(m_effect, "strength", this);
+ m_animation->setDuration(500);
+ m_animation->setEasingCurve(QEasingCurve::InOutSine);
+ m_animation->setStartValue(0);
+ m_animation->setEndValue(1);
+
+ setRenderHint(QPainter::Antialiasing, true);
+ setFrameStyle(QFrame::NoFrame);
+}
+
+void FadeMessage::togglePopup()
+{
+ if (m_message->isVisible()) {
+ m_message->setVisible(false);
+ m_animation->setDirection(QAbstractAnimation::Backward);
+ } else {
+ m_message->setVisible(true);
+ m_animation->setDirection(QAbstractAnimation::Forward);
+ }
+ m_animation->start();
+}
+
+void FadeMessage::setupScene()
+{
+ QGraphicsRectItem *parent = m_scene.addRect(0, 0, 800, 600);
+ parent->setPen(Qt::NoPen);
+ parent->setZValue(0);
+
+ QGraphicsPixmapItem *bg = m_scene.addPixmap(QPixmap(":/background.jpg"));
+ bg->setParentItem(parent);
+ bg->setZValue(-1);
+
+ for (int i = 1; i < 5; ++i)
+ for (int j = 2; j < 5; ++j) {
+ QGraphicsRectItem *item = m_scene.addRect(i * 50, (j - 1) * 50, 38, 38);
+ item->setParentItem(parent);
+ item->setZValue(1);
+ int hue = 12 * (i * 5 + j);
+ item->setBrush(QColor::fromHsv(hue, 128, 128));
+ }
+
+ QFont font;
+ font.setPointSize(font.pointSize() * 2);
+ font.setBold(true);
+ QFontMetrics fontMetrics(font);
+ int fh = fontMetrics.height();
+
+ QString sceneText = "Qt Everywhere!";
+ int sceneTextWidth = fontMetrics.horizontalAdvance(sceneText);
+
+ QGraphicsRectItem *block = m_scene.addRect(50, 300, sceneTextWidth, fh + 3);
+ block->setPen(Qt::NoPen);
+ block->setBrush(QColor(102, 153, 51));
+
+ QGraphicsTextItem *text = m_scene.addText(sceneText, font);
+ text->setDefaultTextColor(Qt::white);
+ text->setPos(50, 300);
+ block->setZValue(2);
+ block->hide();
+
+ text->setParentItem(block);
+ m_message = block;
+
+ m_effect = new QGraphicsColorizeEffect;
+ m_effect->setColor(QColor(122, 193, 66));
+ m_effect->setStrength(0);
+ m_effect->setEnabled(true);
+ parent->setGraphicsEffect(m_effect);
+
+ QPushButton *press = new QPushButton;
+ press->setText(tr("Press me"));
+ connect(press, &QAbstractButton::clicked, this, &FadeMessage::togglePopup);
+ m_scene.addWidget(press);
+
+ press->move(300, 500);
+}
diff --git a/tests/manual/examples/widgets/effects/fademessage/fademessage.h b/tests/manual/examples/widgets/effects/fademessage/fademessage.h
new file mode 100644
index 0000000000..49923016cd
--- /dev/null
+++ b/tests/manual/examples/widgets/effects/fademessage/fademessage.h
@@ -0,0 +1,33 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef FADEMESSAGE_H
+#define FADEMESSAGE_H
+
+#include <QGraphicsEffect>
+#include <QGraphicsView>
+#include <QPropertyAnimation>
+
+#include "fademessage.h"
+
+class FadeMessage: public QGraphicsView
+{
+ Q_OBJECT
+
+public:
+ FadeMessage(QWidget *parent = nullptr);
+
+private:
+ void setupScene();
+
+private slots:
+ void togglePopup();
+
+private:
+ QGraphicsScene m_scene;
+ QGraphicsColorizeEffect *m_effect;
+ QGraphicsItem *m_message;
+ QPropertyAnimation *m_animation;
+};
+
+#endif // FADEMESSAGE_H
diff --git a/tests/manual/examples/widgets/effects/fademessage/fademessage.pro b/tests/manual/examples/widgets/effects/fademessage/fademessage.pro
new file mode 100644
index 0000000000..0beff1999a
--- /dev/null
+++ b/tests/manual/examples/widgets/effects/fademessage/fademessage.pro
@@ -0,0 +1,9 @@
+QT += widgets
+
+SOURCES += main.cpp fademessage.cpp
+HEADERS += fademessage.h
+RESOURCES += fademessage.qrc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/effects/fademessage
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/effects/fademessage/fademessage.qrc b/tests/manual/examples/widgets/effects/fademessage/fademessage.qrc
new file mode 100644
index 0000000000..9efea6a67d
--- /dev/null
+++ b/tests/manual/examples/widgets/effects/fademessage/fademessage.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/" >
+ <file>background.jpg</file>
+ </qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/effects/fademessage/main.cpp b/tests/manual/examples/widgets/effects/fademessage/main.cpp
new file mode 100644
index 0000000000..66504bc432
--- /dev/null
+++ b/tests/manual/examples/widgets/effects/fademessage/main.cpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "fademessage.h"
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ FadeMessage widget;
+ widget.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Popup Message with Effect"));
+ widget.setFixedSize(400, 600);
+ widget.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/graphicsview/embeddeddialogs/CMakeLists.txt b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/CMakeLists.txt
new file mode 100644
index 0000000000..c25544166f
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(embeddeddialogs LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/graphicsview/embeddeddialogs")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(embeddeddialogs
+ customproxy.cpp customproxy.h
+ embeddeddialog.cpp embeddeddialog.h embeddeddialog.ui
+ main.cpp
+)
+
+set_target_properties(embeddeddialogs PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(embeddeddialogs PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(embeddeddialogs_resource_files
+ "No-Ones-Laughing-3.jpg"
+)
+
+qt_add_resources(embeddeddialogs "embeddeddialogs"
+ PREFIX
+ "/"
+ FILES
+ ${embeddeddialogs_resource_files}
+)
+
+install(TARGETS embeddeddialogs
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/graphicsview/embeddeddialogs/No-Ones-Laughing-3.jpg b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/No-Ones-Laughing-3.jpg
new file mode 100644
index 0000000000..445567fbda
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/No-Ones-Laughing-3.jpg
Binary files differ
diff --git a/tests/manual/examples/widgets/graphicsview/embeddeddialogs/customproxy.cpp b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/customproxy.cpp
new file mode 100644
index 0000000000..57a104f57d
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/customproxy.cpp
@@ -0,0 +1,133 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "customproxy.h"
+
+#include <QGraphicsScene>
+#include <QPainter>
+#include <QStyleOptionGraphicsItem>
+
+CustomProxy::CustomProxy(QGraphicsItem *parent, Qt::WindowFlags wFlags)
+ : QGraphicsProxyWidget(parent, wFlags), timeLine(new QTimeLine(250, this))
+{
+ connect(timeLine, &QTimeLine::valueChanged,
+ this, &CustomProxy::updateStep);
+ connect(timeLine, &QTimeLine::stateChanged,
+ this, &CustomProxy::stateChanged);
+}
+
+QRectF CustomProxy::boundingRect() const
+{
+ return QGraphicsProxyWidget::boundingRect().adjusted(0, 0, 10, 10);
+}
+
+void CustomProxy::paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option,
+ QWidget *widget)
+{
+ const QColor color(0, 0, 0, 64);
+
+ QRectF r = windowFrameRect();
+ QRectF right(r.right(), r.top() + 10, 10, r.height() - 10);
+ QRectF bottom(r.left() + 10, r.bottom(), r.width(), 10);
+ bool intersectsRight = right.intersects(option->exposedRect);
+ bool intersectsBottom = bottom.intersects(option->exposedRect);
+ if (intersectsRight && intersectsBottom) {
+ QPainterPath path;
+ path.addRect(right);
+ path.addRect(bottom);
+ painter->setPen(Qt::NoPen);
+ painter->setBrush(color);
+ painter->drawPath(path);
+ } else if (intersectsBottom) {
+ painter->fillRect(bottom, color);
+ } else if (intersectsRight) {
+ painter->fillRect(right, color);
+ }
+
+ QGraphicsProxyWidget::paintWindowFrame(painter, option, widget);
+}
+
+void CustomProxy::hoverEnterEvent(QGraphicsSceneHoverEvent *event)
+{
+ QGraphicsProxyWidget::hoverEnterEvent(event);
+ scene()->setActiveWindow(this);
+ if (qFuzzyCompare(timeLine->currentValue(), 1))
+ zoomIn();
+}
+
+void CustomProxy::hoverLeaveEvent(QGraphicsSceneHoverEvent *event)
+{
+ QGraphicsProxyWidget::hoverLeaveEvent(event);
+ if (!popupShown
+ && (timeLine->direction() != QTimeLine::Backward || qFuzzyIsNull(timeLine->currentValue()))) {
+ zoomOut();
+ }
+}
+
+bool CustomProxy::sceneEventFilter(QGraphicsItem *watched, QEvent *event)
+{
+ if (watched->isWindow()
+ && (event->type() == QEvent::UngrabMouse || event->type() == QEvent::GrabMouse)) {
+ popupShown = watched->isVisible();
+ if (!popupShown && !isUnderMouse())
+ zoomOut();
+ }
+ return QGraphicsProxyWidget::sceneEventFilter(watched, event);
+}
+
+QVariant CustomProxy::itemChange(GraphicsItemChange change, const QVariant &value)
+{
+ if (change == ItemChildAddedChange || change == ItemChildRemovedChange) {
+ if (change == ItemChildAddedChange) {
+ currentPopup = qvariant_cast<QGraphicsItem *>(value);
+ currentPopup->setCacheMode(ItemCoordinateCache);
+ if (scene())
+ currentPopup->installSceneEventFilter(this);
+ } else if (scene()) {
+ currentPopup->removeSceneEventFilter(this);
+ currentPopup = nullptr;
+ }
+ } else if (currentPopup && change == ItemSceneHasChanged) {
+ currentPopup->installSceneEventFilter(this);
+ }
+ return QGraphicsProxyWidget::itemChange(change, value);
+}
+
+void CustomProxy::updateStep(qreal step)
+{
+ QRectF r = boundingRect();
+ setTransform(QTransform()
+ .translate(r.width() / 2, r.height() / 2)
+ .rotate(step * 30, Qt::XAxis)
+ .rotate(step * 10, Qt::YAxis)
+ .rotate(step * 5, Qt::ZAxis)
+ .scale(1 + 1.5 * step, 1 + 1.5 * step)
+ .translate(-r.width() / 2, -r.height() / 2));
+}
+
+void CustomProxy::stateChanged(QTimeLine::State state)
+{
+ if (state == QTimeLine::Running) {
+ if (timeLine->direction() == QTimeLine::Forward)
+ setCacheMode(ItemCoordinateCache);
+ } else if (state == QTimeLine::NotRunning) {
+ if (timeLine->direction() == QTimeLine::Backward)
+ setCacheMode(DeviceCoordinateCache);
+ }
+}
+
+void CustomProxy::zoomIn()
+{
+ if (timeLine->direction() != QTimeLine::Forward)
+ timeLine->setDirection(QTimeLine::Forward);
+ if (timeLine->state() == QTimeLine::NotRunning)
+ timeLine->start();
+}
+
+void CustomProxy::zoomOut()
+{
+ if (timeLine->direction() != QTimeLine::Backward)
+ timeLine->setDirection(QTimeLine::Backward);
+ if (timeLine->state() == QTimeLine::NotRunning)
+ timeLine->start();
+}
diff --git a/tests/manual/examples/widgets/graphicsview/embeddeddialogs/customproxy.h b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/customproxy.h
new file mode 100644
index 0000000000..444d39e73e
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/customproxy.h
@@ -0,0 +1,39 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef CUSTOMPROXY_H
+#define CUSTOMPROXY_H
+
+#include <QTimeLine>
+#include <QGraphicsProxyWidget>
+
+class CustomProxy : public QGraphicsProxyWidget
+{
+ Q_OBJECT
+
+public:
+ explicit CustomProxy(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = { });
+
+ QRectF boundingRect() const override;
+ void paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option,
+ QWidget *widget) override;
+
+protected:
+ void hoverEnterEvent(QGraphicsSceneHoverEvent *event) override;
+ void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) override;
+ bool sceneEventFilter(QGraphicsItem *watched, QEvent *event) override;
+ QVariant itemChange(GraphicsItemChange change, const QVariant &value) override;
+
+private slots:
+ void updateStep(qreal step);
+ void stateChanged(QTimeLine::State);
+ void zoomIn();
+ void zoomOut();
+
+private:
+ QTimeLine *timeLine;
+ QGraphicsItem *currentPopup = nullptr;
+ bool popupShown = false;
+};
+
+#endif // CUSTOMPROXY_H
diff --git a/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.cpp b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.cpp
new file mode 100644
index 0000000000..43d7fbf1e9
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.cpp
@@ -0,0 +1,70 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "embeddeddialog.h"
+#include "ui_embeddeddialog.h"
+
+#include <QStyleFactory>
+
+EmbeddedDialog::EmbeddedDialog(QWidget *parent)
+ : QDialog(parent)
+ , ui(new Ui::EmbeddedDialog)
+{
+ ui->setupUi(this);
+ ui->layoutDirection->setCurrentIndex(layoutDirection() != Qt::LeftToRight);
+
+ const QStringList styleKeys = QStyleFactory::keys();
+ for (const QString &styleName : styleKeys) {
+ ui->style->addItem(styleName);
+ if (style()->objectName().toLower() == styleName.toLower())
+ ui->style->setCurrentIndex(ui->style->count() - 1);
+ }
+
+ connect(ui->layoutDirection, &QComboBox::activated,
+ this, &EmbeddedDialog::layoutDirectionChanged);
+ connect(ui->spacing, &QSlider::valueChanged,
+ this, &EmbeddedDialog::spacingChanged);
+ connect(ui->fontComboBox, &QFontComboBox::currentFontChanged,
+ this, &EmbeddedDialog::fontChanged);
+ connect(ui->style, &QComboBox::textActivated,
+ this, &EmbeddedDialog::styleChanged);
+}
+
+EmbeddedDialog::~EmbeddedDialog()
+{
+ delete ui;
+}
+
+void EmbeddedDialog::layoutDirectionChanged(int index)
+{
+ setLayoutDirection(index == 0 ? Qt::LeftToRight : Qt::RightToLeft);
+}
+
+void EmbeddedDialog::spacingChanged(int spacing)
+{
+ layout()->setSpacing(spacing);
+ adjustSize();
+}
+
+void EmbeddedDialog::fontChanged(const QFont &font)
+{
+ setFont(font);
+}
+
+static void setStyleHelper(QWidget *widget, QStyle *style)
+{
+ widget->setStyle(style);
+ widget->setPalette(style->standardPalette());
+ const QObjectList children = widget->children();
+ for (QObject *child : children) {
+ if (QWidget *childWidget = qobject_cast<QWidget *>(child))
+ setStyleHelper(childWidget, style);
+ }
+}
+
+void EmbeddedDialog::styleChanged(const QString &styleName)
+{
+ QStyle *style = QStyleFactory::create(styleName);
+ if (style)
+ setStyleHelper(this, style);
+}
diff --git a/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.h b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.h
new file mode 100644
index 0000000000..d4c561799e
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.h
@@ -0,0 +1,33 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef EMBEDDEDDIALOG_H
+#define EMBEDDEDDIALOG_H
+
+#include <QDialog>
+
+QT_BEGIN_NAMESPACE
+namespace Ui {
+class EmbeddedDialog;
+}
+QT_END_NAMESPACE
+
+class EmbeddedDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ EmbeddedDialog(QWidget *parent = nullptr);
+ ~EmbeddedDialog();
+
+private slots:
+ void layoutDirectionChanged(int index);
+ void spacingChanged(int spacing);
+ void fontChanged(const QFont &font);
+ void styleChanged(const QString &styleName);
+
+private:
+ Ui::EmbeddedDialog *ui;
+};
+
+#endif // EMBEDDEDDIALOG_H
diff --git a/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.ui b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.ui
new file mode 100644
index 0000000000..82aa5d7be3
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialog.ui
@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>EmbeddedDialog</class>
+ <widget class="QDialog" name="EmbeddedDialog">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>407</width>
+ <height>134</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Embedded Dialog</string>
+ </property>
+ <layout class="QFormLayout" name="formLayout">
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Layout Direction:</string>
+ </property>
+ <property name="buddy">
+ <cstring>layoutDirection</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="layoutDirection">
+ <item>
+ <property name="text">
+ <string>Left to Right</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Right to Left</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Select Font:</string>
+ </property>
+ <property name="buddy">
+ <cstring>fontComboBox</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QFontComboBox" name="fontComboBox"/>
+ </item>
+ <item row="2" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Style:</string>
+ </property>
+ <property name="buddy">
+ <cstring>style</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QComboBox" name="style"/>
+ </item>
+ <item row="3" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Layout spacing:</string>
+ </property>
+ <property name="buddy">
+ <cstring>spacing</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1">
+ <widget class="QSlider" name="spacing">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialogs.pro b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialogs.pro
new file mode 100644
index 0000000000..60c507fc3d
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialogs.pro
@@ -0,0 +1,18 @@
+QT += widgets
+requires(qtConfig(fontcombobox))
+
+SOURCES += main.cpp
+SOURCES += customproxy.cpp embeddeddialog.cpp
+HEADERS += customproxy.h embeddeddialog.h
+
+FORMS += embeddeddialog.ui
+RESOURCES += embeddeddialogs.qrc
+
+build_all:!build_pass {
+ CONFIG -= build_all
+ CONFIG += release
+}
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/graphicsview/embeddeddialogs
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialogs.qrc b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialogs.qrc
new file mode 100644
index 0000000000..33be5038da
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/embeddeddialogs.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource>
+ <file>No-Ones-Laughing-3.jpg</file>
+ </qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/graphicsview/embeddeddialogs/main.cpp b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/main.cpp
new file mode 100644
index 0000000000..700c6b1222
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/embeddeddialogs/main.cpp
@@ -0,0 +1,42 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "customproxy.h"
+#include "embeddeddialog.h"
+
+#include <QApplication>
+#include <QGraphicsScene>
+#include <QGraphicsView>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QGraphicsScene scene;
+ scene.setStickyFocus(true);
+ const int gridSize = 10;
+
+ for (int y = 0; y < gridSize; ++y) {
+ for (int x = 0; x < gridSize; ++x) {
+ CustomProxy *proxy = new CustomProxy(nullptr, Qt::Window);
+ proxy->setWidget(new EmbeddedDialog);
+
+ QRectF rect = proxy->boundingRect();
+
+ proxy->setPos(x * rect.width() * 1.05, y * rect.height() * 1.05);
+ proxy->setCacheMode(QGraphicsItem::DeviceCoordinateCache);
+
+ scene.addItem(proxy);
+ }
+ }
+ scene.setSceneRect(scene.itemsBoundingRect());
+
+ QGraphicsView view(&scene);
+ view.scale(0.5, 0.5);
+ view.setRenderHints(view.renderHints() | QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
+ view.setBackgroundBrush(QPixmap(":/No-Ones-Laughing-3.jpg"));
+ view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
+ view.show();
+ view.setWindowTitle("Embedded Dialogs Example");
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/graphicsview/flowlayout/CMakeLists.txt b/tests/manual/examples/widgets/graphicsview/flowlayout/CMakeLists.txt
new file mode 100644
index 0000000000..66ad4707b5
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/flowlayout/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(flowlayout LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/graphicsview_flowlayout")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(graphicsview_flowlayout
+ flowlayout.cpp flowlayout.h
+ main.cpp
+ window.cpp window.h
+)
+
+set_target_properties(graphicsview_flowlayout PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(graphicsview_flowlayout PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS graphicsview_flowlayout
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.cpp b/tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.cpp
new file mode 100644
index 0000000000..ab5f4717b3
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.cpp
@@ -0,0 +1,170 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "flowlayout.h"
+
+#include <QtMath>
+
+FlowLayout::FlowLayout(QGraphicsLayoutItem *parent) : QGraphicsLayout(parent)
+{
+ QSizePolicy sp = sizePolicy();
+ sp.setHeightForWidth(true);
+ setSizePolicy(sp);
+}
+
+void FlowLayout::insertItem(int index, QGraphicsLayoutItem *item)
+{
+ item->setParentLayoutItem(this);
+ if (index > m_items.count() || index < 0)
+ index = m_items.count();
+ m_items.insert(index, item);
+ invalidate();
+}
+
+int FlowLayout::count() const
+{
+ return m_items.count();
+}
+
+QGraphicsLayoutItem *FlowLayout::itemAt(int index) const
+{
+ return m_items.value(index);
+}
+
+void FlowLayout::removeAt(int index)
+{
+ m_items.removeAt(index);
+ invalidate();
+}
+
+qreal FlowLayout::spacing(Qt::Orientation o) const
+{
+ return m_spacing[int(o) - 1];
+}
+
+void FlowLayout::setSpacing(Qt::Orientations o, qreal spacing)
+{
+ if (o & Qt::Horizontal)
+ m_spacing[0] = spacing;
+ if (o & Qt::Vertical)
+ m_spacing[1] = spacing;
+}
+
+void FlowLayout::setGeometry(const QRectF &geom)
+{
+ QGraphicsLayout::setGeometry(geom);
+ doLayout(geom, true);
+}
+
+qreal FlowLayout::doLayout(const QRectF &geom, bool applyNewGeometry) const
+{
+ qreal left, top, right, bottom;
+ getContentsMargins(&left, &top, &right, &bottom);
+ const qreal maxw = geom.width() - left - right;
+
+ qreal x = 0;
+ qreal y = 0;
+ qreal maxRowHeight = 0;
+ QSizeF pref;
+ for (QGraphicsLayoutItem *item : m_items) {
+ pref = item->effectiveSizeHint(Qt::PreferredSize);
+ maxRowHeight = qMax(maxRowHeight, pref.height());
+
+ qreal next_x;
+ next_x = x + pref.width();
+ if (next_x > maxw) {
+ if (qFuzzyIsNull(x)) {
+ pref.setWidth(maxw);
+ } else {
+ x = 0;
+ next_x = pref.width();
+ }
+ y += maxRowHeight + spacing(Qt::Vertical);
+ maxRowHeight = 0;
+ }
+
+ if (applyNewGeometry)
+ item->setGeometry(QRectF(QPointF(left + x, top + y), pref));
+ x = next_x + spacing(Qt::Horizontal);
+ }
+ maxRowHeight = qMax(maxRowHeight, pref.height());
+ return top + y + maxRowHeight + bottom;
+}
+
+QSizeF FlowLayout::minSize(const QSizeF &constraint) const
+{
+ QSizeF size(0, 0);
+ qreal left, top, right, bottom;
+ getContentsMargins(&left, &top, &right, &bottom);
+ if (constraint.width() >= 0) { // height for width
+ const qreal height = doLayout(QRectF(QPointF(0,0), constraint), false);
+ size = QSizeF(constraint.width(), height);
+ } else if (constraint.height() >= 0) { // width for height?
+ // not supported
+ } else {
+ for (const QGraphicsLayoutItem *item : std::as_const(m_items))
+ size = size.expandedTo(item->effectiveSizeHint(Qt::MinimumSize));
+ size += QSizeF(left + right, top + bottom);
+ }
+ return size;
+}
+
+QSizeF FlowLayout::prefSize() const
+{
+ qreal left, right;
+ getContentsMargins(&left, nullptr, &right, nullptr);
+
+ qreal maxh = 0;
+ qreal totalWidth = 0;
+ for (const QGraphicsLayoutItem *item : std::as_const(m_items)) {
+ if (totalWidth > 0)
+ totalWidth += spacing(Qt::Horizontal);
+ QSizeF pref = item->effectiveSizeHint(Qt::PreferredSize);
+ totalWidth += pref.width();
+ maxh = qMax(maxh, pref.height());
+ }
+ maxh += spacing(Qt::Vertical);
+
+ const qreal goldenAspectRatio = 1.61803399;
+ qreal w = qSqrt(totalWidth * maxh * goldenAspectRatio) + left + right;
+
+ return minSize(QSizeF(w, -1));
+}
+
+QSizeF FlowLayout::maxSize() const
+{
+ qreal totalWidth = 0;
+ qreal totalHeight = 0;
+ for (const QGraphicsLayoutItem *item : std::as_const(m_items)) {
+ if (totalWidth > 0)
+ totalWidth += spacing(Qt::Horizontal);
+ if (totalHeight > 0)
+ totalHeight += spacing(Qt::Vertical);
+ QSizeF pref = item->effectiveSizeHint(Qt::PreferredSize);
+ totalWidth += pref.width();
+ totalHeight += pref.height();
+ }
+
+ qreal left, top, right, bottom;
+ getContentsMargins(&left, &top, &right, &bottom);
+ return QSizeF(left + totalWidth + right, top + totalHeight + bottom);
+}
+
+QSizeF FlowLayout::sizeHint(Qt::SizeHint which, const QSizeF &constraint) const
+{
+ QSizeF sh = constraint;
+ switch (which) {
+ case Qt::PreferredSize:
+ sh = prefSize();
+ break;
+ case Qt::MinimumSize:
+ sh = minSize(constraint);
+ break;
+ case Qt::MaximumSize:
+ sh = maxSize();
+ break;
+ default:
+ break;
+ }
+ return sh;
+}
diff --git a/tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.h b/tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.h
new file mode 100644
index 0000000000..028394827a
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.h
@@ -0,0 +1,44 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef FLOWLAYOUT_H
+#define FLOWLAYOUT_H
+
+#include <QGraphicsLayout>
+
+class FlowLayout : public QGraphicsLayout
+{
+public:
+ FlowLayout(QGraphicsLayoutItem *parent = nullptr);
+ inline void addItem(QGraphicsLayoutItem *item);
+ void insertItem(int index, QGraphicsLayoutItem *item);
+ void setSpacing(Qt::Orientations o, qreal spacing);
+ qreal spacing(Qt::Orientation o) const;
+
+ // inherited functions
+ void setGeometry(const QRectF &geom) override;
+
+ int count() const override;
+ QGraphicsLayoutItem *itemAt(int index) const override;
+ void removeAt(int index) override;
+
+protected:
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override;
+
+private:
+ qreal doLayout(const QRectF &geom, bool applyNewGeometry) const;
+ QSizeF minSize(const QSizeF &constraint) const;
+ QSizeF prefSize() const;
+ QSizeF maxSize() const;
+
+ QList<QGraphicsLayoutItem *> m_items;
+ qreal m_spacing[2] = {6, 6};
+};
+
+
+inline void FlowLayout::addItem(QGraphicsLayoutItem *item)
+{
+ insertItem(-1, item);
+}
+
+#endif // FLOWLAYOUT_H
diff --git a/tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.pro b/tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.pro
new file mode 100644
index 0000000000..7830e3a008
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/flowlayout/flowlayout.pro
@@ -0,0 +1,10 @@
+QT += widgets
+
+QMAKE_PROJECT_NAME = flowlayout_graphicsview
+
+HEADERS += flowlayout.h window.h
+SOURCES += flowlayout.cpp main.cpp window.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/graphicsview/flowlayout
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/graphicsview/flowlayout/main.cpp b/tests/manual/examples/widgets/graphicsview/flowlayout/main.cpp
new file mode 100644
index 0000000000..118b404870
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/flowlayout/main.cpp
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+//! [1]
+#include "window.h"
+
+#include <QApplication>
+#include <QGraphicsView>
+
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QGraphicsScene scene;
+ QGraphicsView view(&scene);
+ Window *w = new Window;
+ scene.addItem(w);
+
+ view.resize(400, 300);
+ view.show();
+
+ return app.exec();
+}
+//! [1]
diff --git a/tests/manual/examples/widgets/graphicsview/flowlayout/window.cpp b/tests/manual/examples/widgets/graphicsview/flowlayout/window.cpp
new file mode 100644
index 0000000000..ed9a5720d3
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/flowlayout/window.cpp
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "window.h"
+#include "flowlayout.h"
+
+#include <QGraphicsProxyWidget>
+#include <QLabel>
+
+Window::Window(QGraphicsItem *parent) : QGraphicsWidget(parent, Qt::Window)
+{
+ FlowLayout *lay = new FlowLayout;
+ const QString sentence(QLatin1String("I am not bothered by the fact that I am unknown."
+ " I am bothered when I do not know others. (Confucius)"));
+ const QList<QStringView> words = QStringView{ sentence }.split(QLatin1Char(' '), Qt::SkipEmptyParts);
+ for (const QStringView &word : words) {
+ QGraphicsProxyWidget *proxy = new QGraphicsProxyWidget(this);
+ QLabel *label = new QLabel(word.toString());
+ label->setFrameStyle(QFrame::Box | QFrame::Plain);
+ proxy->setWidget(label);
+ lay->addItem(proxy);
+ }
+ setLayout(lay);
+}
diff --git a/tests/manual/examples/widgets/graphicsview/flowlayout/window.h b/tests/manual/examples/widgets/graphicsview/flowlayout/window.h
new file mode 100644
index 0000000000..2fc5570406
--- /dev/null
+++ b/tests/manual/examples/widgets/graphicsview/flowlayout/window.h
@@ -0,0 +1,16 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include <QGraphicsWidget>
+
+class Window : public QGraphicsWidget
+{
+ Q_OBJECT
+public:
+ Window(QGraphicsItem *parent = nullptr);
+};
+
+#endif // WINDOW_H
diff --git a/tests/manual/examples/widgets/itemviews/chart/CMakeLists.txt b/tests/manual/examples/widgets/itemviews/chart/CMakeLists.txt
new file mode 100644
index 0000000000..57e52d84fc
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/chart/CMakeLists.txt
@@ -0,0 +1,56 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(chart LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/chart")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(chart
+ main.cpp
+ mainwindow.cpp mainwindow.h
+ pieview.cpp pieview.h
+)
+
+set_target_properties(chart PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(chart PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(chart_resource_files
+ "qtdata.cht"
+)
+
+qt_add_resources(chart "chart"
+ PREFIX
+ "/Charts"
+ FILES
+ ${chart_resource_files}
+)
+
+if(UNIX AND NOT APPLE AND NOT HAIKU AND NOT INTEGRITY AND NOT VXWORKS)
+ target_link_libraries(chart PRIVATE
+ m
+ )
+endif()
+
+install(TARGETS chart
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/itemviews/chart/chart.pro b/tests/manual/examples/widgets/itemviews/chart/chart.pro
new file mode 100644
index 0000000000..323f6202e4
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/chart/chart.pro
@@ -0,0 +1,14 @@
+QT += widgets
+requires(qtConfig(filedialog))
+
+HEADERS = mainwindow.h \
+ pieview.h
+RESOURCES = chart.qrc
+SOURCES = main.cpp \
+ mainwindow.cpp \
+ pieview.cpp
+unix:!mac:!vxworks:!integrity:!haiku:LIBS += -lm
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/chart
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/itemviews/chart/chart.qrc b/tests/manual/examples/widgets/itemviews/chart/chart.qrc
new file mode 100644
index 0000000000..7401d4d2f8
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/chart/chart.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/Charts" >
+ <file>qtdata.cht</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/itemviews/chart/main.cpp b/tests/manual/examples/widgets/itemviews/chart/main.cpp
new file mode 100644
index 0000000000..7d7cf3e573
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/chart/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow window;
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/itemviews/chart/mainwindow.cpp b/tests/manual/examples/widgets/itemviews/chart/mainwindow.cpp
new file mode 100644
index 0000000000..450f2e3a56
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/chart/mainwindow.cpp
@@ -0,0 +1,136 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "pieview.h"
+#include "mainwindow.h"
+
+#include <QtWidgets>
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+{
+ QMenu *fileMenu = new QMenu(tr("&File"), this);
+ QAction *openAction = fileMenu->addAction(tr("&Open..."));
+ openAction->setShortcuts(QKeySequence::Open);
+ QAction *saveAction = fileMenu->addAction(tr("&Save As..."));
+ saveAction->setShortcuts(QKeySequence::SaveAs);
+ QAction *quitAction = fileMenu->addAction(tr("E&xit"));
+ quitAction->setShortcuts(QKeySequence::Quit);
+
+ setupModel();
+ setupViews();
+
+ connect(openAction, &QAction::triggered, this, &MainWindow::openFile);
+ connect(saveAction, &QAction::triggered, this, &MainWindow::saveFile);
+ connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit);
+
+ menuBar()->addMenu(fileMenu);
+ statusBar();
+
+ loadFile(":/Charts/qtdata.cht");
+
+ setWindowTitle(tr("Chart"));
+ resize(870, 550);
+}
+
+void MainWindow::setupModel()
+{
+ model = new QStandardItemModel(8, 2, this);
+ model->setHeaderData(0, Qt::Horizontal, tr("Label"));
+ model->setHeaderData(1, Qt::Horizontal, tr("Quantity"));
+}
+
+void MainWindow::setupViews()
+{
+ QSplitter *splitter = new QSplitter;
+ QTableView *table = new QTableView;
+ pieChart = new PieView;
+ splitter->addWidget(table);
+ splitter->addWidget(pieChart);
+ splitter->setStretchFactor(0, 0);
+ splitter->setStretchFactor(1, 1);
+
+ table->setModel(model);
+ pieChart->setModel(model);
+
+ QItemSelectionModel *selectionModel = new QItemSelectionModel(model);
+ table->setSelectionModel(selectionModel);
+ pieChart->setSelectionModel(selectionModel);
+
+ QHeaderView *headerView = table->horizontalHeader();
+ headerView->setStretchLastSection(true);
+
+ setCentralWidget(splitter);
+}
+
+void MainWindow::openFile()
+{
+ const QString fileName =
+ QFileDialog::getOpenFileName(this, tr("Choose a data file"), "", "*.cht");
+ if (!fileName.isEmpty())
+ loadFile(fileName);
+}
+
+void MainWindow::loadFile(const QString &fileName)
+{
+ QFile file(fileName);
+ if (!file.open(QFile::ReadOnly | QFile::Text))
+ return;
+
+ QTextStream stream(&file);
+
+ model->removeRows(0, model->rowCount(QModelIndex()), QModelIndex());
+
+ int row = 0;
+ while (!stream.atEnd()) {
+ const QString line = stream.readLine();
+ if (!line.isEmpty()) {
+ model->insertRows(row, 1, QModelIndex());
+
+ const QStringList pieces = line.split(QLatin1Char(','), Qt::SkipEmptyParts);
+ if (pieces.size() < 3)
+ continue;
+ model->setData(model->index(row, 0, QModelIndex()),
+ pieces.value(0));
+ model->setData(model->index(row, 1, QModelIndex()),
+ pieces.value(1));
+ model->setData(model->index(row, 0, QModelIndex()),
+ QColor(pieces.value(2)), Qt::DecorationRole);
+ row++;
+ }
+ };
+
+ file.close();
+ statusBar()->showMessage(tr("Loaded %1").arg(fileName), 2000);
+}
+
+void MainWindow::saveFile()
+{
+ QString fileName = QFileDialog::getSaveFileName(this,
+ tr("Save file as"), "", "*.cht");
+
+ if (fileName.isEmpty())
+ return;
+
+ QFile file(fileName);
+ if (!file.open(QFile::WriteOnly | QFile::Text))
+ return;
+
+ QTextStream stream(&file);
+ for (int row = 0; row < model->rowCount(QModelIndex()); ++row) {
+
+ QStringList pieces;
+
+ pieces.append(model->data(model->index(row, 0, QModelIndex()),
+ Qt::DisplayRole).toString());
+ pieces.append(model->data(model->index(row, 1, QModelIndex()),
+ Qt::DisplayRole).toString());
+ pieces.append(model->data(model->index(row, 0, QModelIndex()),
+ Qt::DecorationRole).toString());
+
+ stream << pieces.join(',') << "\n";
+ }
+
+ file.close();
+ statusBar()->showMessage(tr("Saved %1").arg(fileName), 2000);
+}
diff --git a/tests/manual/examples/widgets/itemviews/chart/mainwindow.h b/tests/manual/examples/widgets/itemviews/chart/mainwindow.h
new file mode 100644
index 0000000000..f2a639c952
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/chart/mainwindow.h
@@ -0,0 +1,34 @@
+// 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 QAbstractItemModel;
+class QAbstractItemView;
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+
+private slots:
+ void openFile();
+ void saveFile();
+
+private:
+ void setupModel();
+ void setupViews();
+ void loadFile(const QString &path);
+
+ QAbstractItemModel *model = nullptr;
+ QAbstractItemView *pieChart = nullptr;
+};
+
+#endif // MAINWINDOW_H
diff --git a/tests/manual/examples/widgets/itemviews/chart/pieview.cpp b/tests/manual/examples/widgets/itemviews/chart/pieview.cpp
new file mode 100644
index 0000000000..e681207f38
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/chart/pieview.cpp
@@ -0,0 +1,506 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "pieview.h"
+
+#include <QtWidgets>
+
+PieView::PieView(QWidget *parent)
+ : QAbstractItemView(parent)
+{
+ horizontalScrollBar()->setRange(0, 0);
+ verticalScrollBar()->setRange(0, 0);
+}
+
+void PieView::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
+ const QList<int> &roles)
+{
+ QAbstractItemView::dataChanged(topLeft, bottomRight, roles);
+
+ if (!roles.contains(Qt::DisplayRole))
+ return;
+
+ validItems = 0;
+ totalValue = 0.0;
+
+ for (int row = 0; row < model()->rowCount(rootIndex()); ++row) {
+
+ QModelIndex index = model()->index(row, 1, rootIndex());
+ double value = model()->data(index, Qt::DisplayRole).toDouble();
+
+ if (value > 0.0) {
+ totalValue += value;
+ validItems++;
+ }
+ }
+ viewport()->update();
+}
+
+bool PieView::edit(const QModelIndex &index, EditTrigger trigger, QEvent *event)
+{
+ if (index.column() == 0)
+ return QAbstractItemView::edit(index, trigger, event);
+ else
+ return false;
+}
+
+/*
+ Returns the item that covers the coordinate given in the view.
+*/
+
+QModelIndex PieView::indexAt(const QPoint &point) const
+{
+ if (validItems == 0)
+ return QModelIndex();
+
+ // Transform the view coordinates into contents widget coordinates.
+ int wx = point.x() + horizontalScrollBar()->value();
+ int wy = point.y() + verticalScrollBar()->value();
+
+ if (wx < totalSize) {
+ double cx = wx - totalSize / 2;
+ double cy = totalSize / 2 - wy; // positive cy for items above the center
+
+ // Determine the distance from the center point of the pie chart.
+ double d = std::sqrt(std::pow(cx, 2) + std::pow(cy, 2));
+
+ if (d == 0 || d > pieSize / 2)
+ return QModelIndex();
+
+ // Determine the angle of the point.
+ double angle = qRadiansToDegrees(std::atan2(cy, cx));
+ if (angle < 0)
+ angle = 360 + angle;
+
+ // Find the relevant slice of the pie.
+ double startAngle = 0.0;
+
+ for (int row = 0; row < model()->rowCount(rootIndex()); ++row) {
+
+ QModelIndex index = model()->index(row, 1, rootIndex());
+ double value = model()->data(index).toDouble();
+
+ if (value > 0.0) {
+ double sliceAngle = 360 * value / totalValue;
+
+ if (angle >= startAngle && angle < (startAngle + sliceAngle))
+ return model()->index(row, 1, rootIndex());
+
+ startAngle += sliceAngle;
+ }
+ }
+ } else {
+ QStyleOptionViewItem option;
+ initViewItemOption(&option);
+ double itemHeight = QFontMetrics(option.font).height();
+ int listItem = int((wy - margin) / itemHeight);
+ int validRow = 0;
+
+ for (int row = 0; row < model()->rowCount(rootIndex()); ++row) {
+
+ QModelIndex index = model()->index(row, 1, rootIndex());
+ if (model()->data(index).toDouble() > 0.0) {
+
+ if (listItem == validRow)
+ return model()->index(row, 0, rootIndex());
+
+ // Update the list index that corresponds to the next valid row.
+ ++validRow;
+ }
+ }
+ }
+
+ return QModelIndex();
+}
+
+bool PieView::isIndexHidden(const QModelIndex & /*index*/) const
+{
+ return false;
+}
+
+/*
+ Returns the rectangle of the item at position \a index in the
+ model. The rectangle is in contents coordinates.
+*/
+
+QRect PieView::itemRect(const QModelIndex &index) const
+{
+ if (!index.isValid())
+ return QRect();
+
+ // Check whether the index's row is in the list of rows represented
+ // by slices.
+ QModelIndex valueIndex;
+
+ if (index.column() != 1)
+ valueIndex = model()->index(index.row(), 1, rootIndex());
+ else
+ valueIndex = index;
+
+ if (model()->data(valueIndex).toDouble() <= 0.0)
+ return QRect();
+
+ int listItem = 0;
+ for (int row = index.row()-1; row >= 0; --row) {
+ if (model()->data(model()->index(row, 1, rootIndex())).toDouble() > 0.0)
+ listItem++;
+ }
+
+ switch (index.column()) {
+ case 0: {
+ QStyleOptionViewItem option;
+ initViewItemOption(&option);
+ const qreal itemHeight = QFontMetricsF(option.font).height();
+ return QRect(totalSize,
+ qRound(margin + listItem * itemHeight),
+ totalSize - margin, qRound(itemHeight));
+ }
+ case 1:
+ return viewport()->rect();
+ }
+ return QRect();
+}
+
+QRegion PieView::itemRegion(const QModelIndex &index) const
+{
+ if (!index.isValid())
+ return QRegion();
+
+ if (index.column() != 1)
+ return itemRect(index);
+
+ if (model()->data(index).toDouble() <= 0.0)
+ return QRegion();
+
+ double startAngle = 0.0;
+ for (int row = 0; row < model()->rowCount(rootIndex()); ++row) {
+
+ QModelIndex sliceIndex = model()->index(row, 1, rootIndex());
+ double value = model()->data(sliceIndex).toDouble();
+
+ if (value > 0.0) {
+ double angle = 360 * value / totalValue;
+
+ if (sliceIndex == index) {
+ QPainterPath slicePath;
+ slicePath.moveTo(totalSize / 2, totalSize / 2);
+ slicePath.arcTo(margin, margin, margin + pieSize, margin + pieSize,
+ startAngle, angle);
+ slicePath.closeSubpath();
+
+ return QRegion(slicePath.toFillPolygon().toPolygon());
+ }
+
+ startAngle += angle;
+ }
+ }
+
+ return QRegion();
+}
+
+int PieView::horizontalOffset() const
+{
+ return horizontalScrollBar()->value();
+}
+
+void PieView::mousePressEvent(QMouseEvent *event)
+{
+ QAbstractItemView::mousePressEvent(event);
+ origin = event->position().toPoint();
+ if (!rubberBand)
+ rubberBand = new QRubberBand(QRubberBand::Rectangle, viewport());
+ rubberBand->setGeometry(QRect(origin, QSize()));
+ rubberBand->show();
+}
+
+void PieView::mouseMoveEvent(QMouseEvent *event)
+{
+ if (rubberBand)
+ rubberBand->setGeometry(QRect(origin, event->position().toPoint()).normalized());
+ QAbstractItemView::mouseMoveEvent(event);
+}
+
+void PieView::mouseReleaseEvent(QMouseEvent *event)
+{
+ QAbstractItemView::mouseReleaseEvent(event);
+ if (rubberBand)
+ rubberBand->hide();
+ viewport()->update();
+}
+
+QModelIndex PieView::moveCursor(QAbstractItemView::CursorAction cursorAction,
+ Qt::KeyboardModifiers /*modifiers*/)
+{
+ QModelIndex current = currentIndex();
+
+ switch (cursorAction) {
+ case MoveLeft:
+ case MoveUp:
+ if (current.row() > 0)
+ current = model()->index(current.row() - 1, current.column(),
+ rootIndex());
+ else
+ current = model()->index(0, current.column(), rootIndex());
+ break;
+ case MoveRight:
+ case MoveDown:
+ if (current.row() < rows(current) - 1)
+ current = model()->index(current.row() + 1, current.column(),
+ rootIndex());
+ else
+ current = model()->index(rows(current) - 1, current.column(),
+ rootIndex());
+ break;
+ default:
+ break;
+ }
+
+ viewport()->update();
+ return current;
+}
+
+void PieView::paintEvent(QPaintEvent *event)
+{
+ QItemSelectionModel *selections = selectionModel();
+ QStyleOptionViewItem option;
+ initViewItemOption(&option);
+
+ QBrush background = option.palette.base();
+ QPen foreground(option.palette.color(QPalette::WindowText));
+
+ QPainter painter(viewport());
+ painter.setRenderHint(QPainter::Antialiasing);
+
+ painter.fillRect(event->rect(), background);
+ painter.setPen(foreground);
+
+ // Viewport rectangles
+ QRect pieRect = QRect(margin, margin, pieSize, pieSize);
+
+ if (validItems <= 0)
+ return;
+
+ painter.save();
+ painter.translate(pieRect.x() - horizontalScrollBar()->value(),
+ pieRect.y() - verticalScrollBar()->value());
+ painter.drawEllipse(0, 0, pieSize, pieSize);
+ double startAngle = 0.0;
+ int row;
+
+ for (row = 0; row < model()->rowCount(rootIndex()); ++row) {
+ QModelIndex index = model()->index(row, 1, rootIndex());
+ double value = model()->data(index).toDouble();
+
+ if (value > 0.0) {
+ double angle = 360 * value / totalValue;
+
+ QModelIndex colorIndex = model()->index(row, 0, rootIndex());
+ QColor color = QColor(model()->data(colorIndex, Qt::DecorationRole).toString());
+
+ if (currentIndex() == index)
+ painter.setBrush(QBrush(color, Qt::Dense4Pattern));
+ else if (selections->isSelected(index))
+ painter.setBrush(QBrush(color, Qt::Dense3Pattern));
+ else
+ painter.setBrush(QBrush(color));
+
+ painter.drawPie(0, 0, pieSize, pieSize, int(startAngle*16), int(angle*16));
+
+ startAngle += angle;
+ }
+ }
+ painter.restore();
+
+ for (row = 0; row < model()->rowCount(rootIndex()); ++row) {
+ QModelIndex index = model()->index(row, 1, rootIndex());
+ double value = model()->data(index).toDouble();
+
+ if (value > 0.0) {
+ QModelIndex labelIndex = model()->index(row, 0, rootIndex());
+
+ QStyleOptionViewItem option;
+ initViewItemOption(&option);
+
+ option.rect = visualRect(labelIndex);
+ if (selections->isSelected(labelIndex))
+ option.state |= QStyle::State_Selected;
+ if (currentIndex() == labelIndex)
+ option.state |= QStyle::State_HasFocus;
+ itemDelegate()->paint(&painter, option, labelIndex);
+ }
+ }
+}
+
+void PieView::resizeEvent(QResizeEvent * /* event */)
+{
+ updateGeometries();
+}
+
+int PieView::rows(const QModelIndex &index) const
+{
+ return model()->rowCount(model()->parent(index));
+}
+
+void PieView::rowsInserted(const QModelIndex &parent, int start, int end)
+{
+ for (int row = start; row <= end; ++row) {
+ QModelIndex index = model()->index(row, 1, rootIndex());
+ double value = model()->data(index).toDouble();
+
+ if (value > 0.0) {
+ totalValue += value;
+ ++validItems;
+ }
+ }
+
+ QAbstractItemView::rowsInserted(parent, start, end);
+}
+
+void PieView::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end)
+{
+ for (int row = start; row <= end; ++row) {
+ QModelIndex index = model()->index(row, 1, rootIndex());
+ double value = model()->data(index).toDouble();
+ if (value > 0.0) {
+ totalValue -= value;
+ --validItems;
+ }
+ }
+
+ QAbstractItemView::rowsAboutToBeRemoved(parent, start, end);
+}
+
+void PieView::scrollContentsBy(int dx, int dy)
+{
+ viewport()->scroll(dx, dy);
+}
+
+void PieView::scrollTo(const QModelIndex &index, ScrollHint)
+{
+ QRect area = viewport()->rect();
+ QRect rect = visualRect(index);
+
+ if (rect.left() < area.left()) {
+ horizontalScrollBar()->setValue(
+ horizontalScrollBar()->value() + rect.left() - area.left());
+ } else if (rect.right() > area.right()) {
+ horizontalScrollBar()->setValue(
+ horizontalScrollBar()->value() + qMin(
+ rect.right() - area.right(), rect.left() - area.left()));
+ }
+
+ if (rect.top() < area.top()) {
+ verticalScrollBar()->setValue(
+ verticalScrollBar()->value() + rect.top() - area.top());
+ } else if (rect.bottom() > area.bottom()) {
+ verticalScrollBar()->setValue(
+ verticalScrollBar()->value() + qMin(
+ rect.bottom() - area.bottom(), rect.top() - area.top()));
+ }
+
+ update();
+}
+
+/*
+ Find the indices corresponding to the extent of the selection.
+*/
+
+void PieView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command)
+{
+ // Use content widget coordinates because we will use the itemRegion()
+ // function to check for intersections.
+
+ QRect contentsRect = rect.translated(
+ horizontalScrollBar()->value(),
+ verticalScrollBar()->value()).normalized();
+
+ int rows = model()->rowCount(rootIndex());
+ int columns = model()->columnCount(rootIndex());
+ QModelIndexList indexes;
+
+ for (int row = 0; row < rows; ++row) {
+ for (int column = 0; column < columns; ++column) {
+ QModelIndex index = model()->index(row, column, rootIndex());
+ QRegion region = itemRegion(index);
+ if (region.intersects(contentsRect))
+ indexes.append(index);
+ }
+ }
+
+ if (indexes.size() > 0) {
+ int firstRow = indexes.at(0).row();
+ int lastRow = firstRow;
+ int firstColumn = indexes.at(0).column();
+ int lastColumn = firstColumn;
+
+ for (int i = 1; i < indexes.size(); ++i) {
+ firstRow = qMin(firstRow, indexes.at(i).row());
+ lastRow = qMax(lastRow, indexes.at(i).row());
+ firstColumn = qMin(firstColumn, indexes.at(i).column());
+ lastColumn = qMax(lastColumn, indexes.at(i).column());
+ }
+
+ QItemSelection selection(
+ model()->index(firstRow, firstColumn, rootIndex()),
+ model()->index(lastRow, lastColumn, rootIndex()));
+ selectionModel()->select(selection, command);
+ } else {
+ QModelIndex noIndex;
+ QItemSelection selection(noIndex, noIndex);
+ selectionModel()->select(selection, command);
+ }
+
+ update();
+}
+
+void PieView::updateGeometries()
+{
+ horizontalScrollBar()->setPageStep(viewport()->width());
+ horizontalScrollBar()->setRange(0, qMax(0, 2 * totalSize - viewport()->width()));
+ verticalScrollBar()->setPageStep(viewport()->height());
+ verticalScrollBar()->setRange(0, qMax(0, totalSize - viewport()->height()));
+}
+
+int PieView::verticalOffset() const
+{
+ return verticalScrollBar()->value();
+}
+
+/*
+ Returns the position of the item in viewport coordinates.
+*/
+
+QRect PieView::visualRect(const QModelIndex &index) const
+{
+ QRect rect = itemRect(index);
+ if (!rect.isValid())
+ return rect;
+
+ return QRect(rect.left() - horizontalScrollBar()->value(),
+ rect.top() - verticalScrollBar()->value(),
+ rect.width(), rect.height());
+}
+
+/*
+ Returns a region corresponding to the selection in viewport coordinates.
+*/
+
+QRegion PieView::visualRegionForSelection(const QItemSelection &selection) const
+{
+ int ranges = selection.count();
+
+ if (ranges == 0)
+ return QRect();
+
+ QRegion region;
+ for (int i = 0; i < ranges; ++i) {
+ const QItemSelectionRange &range = selection.at(i);
+ for (int row = range.top(); row <= range.bottom(); ++row) {
+ for (int col = range.left(); col <= range.right(); ++col) {
+ QModelIndex index = model()->index(row, col, rootIndex());
+ region += visualRect(index);
+ }
+ }
+ }
+ return region;
+}
diff --git a/tests/manual/examples/widgets/itemviews/chart/pieview.h b/tests/manual/examples/widgets/itemviews/chart/pieview.h
new file mode 100644
index 0000000000..19c4a18ed0
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/chart/pieview.h
@@ -0,0 +1,66 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PIEVIEW_H
+#define PIEVIEW_H
+
+#include <QAbstractItemView>
+
+//! [0]
+class PieView : public QAbstractItemView
+{
+ Q_OBJECT
+
+public:
+ PieView(QWidget *parent = nullptr);
+
+ QRect visualRect(const QModelIndex &index) const override;
+ void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) override;
+ QModelIndex indexAt(const QPoint &point) const override;
+
+protected slots:
+ void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
+ const QList<int> &roles = QList<int>()) override;
+ void rowsInserted(const QModelIndex &parent, int start, int end) override;
+ void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) override;
+
+protected:
+ bool edit(const QModelIndex &index, EditTrigger trigger, QEvent *event) override;
+ QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction,
+ Qt::KeyboardModifiers modifiers) override;
+
+ int horizontalOffset() const override;
+ int verticalOffset() const override;
+
+ bool isIndexHidden(const QModelIndex &index) const override;
+
+ void setSelection(const QRect&, QItemSelectionModel::SelectionFlags command) override;
+
+ void mousePressEvent(QMouseEvent *event) override;
+
+ void mouseMoveEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+
+ void paintEvent(QPaintEvent *event) override;
+ void resizeEvent(QResizeEvent *event) override;
+ void scrollContentsBy(int dx, int dy) override;
+
+ QRegion visualRegionForSelection(const QItemSelection &selection) const override;
+
+private:
+ QRect itemRect(const QModelIndex &item) const;
+ QRegion itemRegion(const QModelIndex &index) const;
+ int rows(const QModelIndex &index = QModelIndex()) const;
+ void updateGeometries() override;
+
+ int margin = 0;
+ int totalSize = 300;
+ int pieSize = totalSize - 2 * margin;
+ int validItems = 0;
+ double totalValue = 0.0;
+ QRubberBand *rubberBand = nullptr;
+ QPoint origin;
+};
+//! [0]
+
+#endif // PIEVIEW_H
diff --git a/tests/manual/examples/widgets/itemviews/chart/qtdata.cht b/tests/manual/examples/widgets/itemviews/chart/qtdata.cht
new file mode 100644
index 0000000000..6386246c4b
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/chart/qtdata.cht
@@ -0,0 +1,14 @@
+Scientific Research,21,#99e600
+Engineering & Design,18,#99cc00
+Automotive,14,#99b300
+Aerospace,13,#9f991a
+Automation & Machine Tools,13,#a48033
+Medical & Bioinformatics,13,#a9664d
+Imaging & Special Effects,12,#ae4d66
+Defense,11,#b33380
+Test & Measurement Systems,9,#a64086
+Oil & Gas,9,#994d8d
+Entertainment & Broadcasting,7,#8d5a93
+Financial,6,#806699
+Consumer Electronics,4,#8073a6
+Other,38,#8080b3
diff --git a/tests/manual/examples/widgets/itemviews/dirview/CMakeLists.txt b/tests/manual/examples/widgets/itemviews/dirview/CMakeLists.txt
new file mode 100644
index 0000000000..e7261fc4e6
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/dirview/CMakeLists.txt
@@ -0,0 +1,36 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(dirview LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/dirview")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(dirview
+ main.cpp
+)
+
+set_target_properties(dirview PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(dirview PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS dirview
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/itemviews/dirview/dirview.pro b/tests/manual/examples/widgets/itemviews/dirview/dirview.pro
new file mode 100644
index 0000000000..981a64a7d6
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/dirview/dirview.pro
@@ -0,0 +1,8 @@
+QT += widgets
+requires(qtConfig(treeview))
+
+SOURCES = main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/dirview
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/itemviews/dirview/main.cpp b/tests/manual/examples/widgets/itemviews/dirview/main.cpp
new file mode 100644
index 0000000000..5db9338b67
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/dirview/main.cpp
@@ -0,0 +1,62 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QFileSystemModel>
+#include <QFileIconProvider>
+#include <QScreen>
+#include <QScroller>
+#include <QTreeView>
+#include <QCommandLineParser>
+#include <QCommandLineOption>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+ QCommandLineParser parser;
+ parser.setApplicationDescription("Qt Dir View Example");
+ parser.addHelpOption();
+ parser.addVersionOption();
+ QCommandLineOption dontUseCustomDirectoryIconsOption("c", "Set QFileSystemModel::DontUseCustomDirectoryIcons");
+ parser.addOption(dontUseCustomDirectoryIconsOption);
+ QCommandLineOption dontWatchOption("w", "Set QFileSystemModel::DontWatch");
+ parser.addOption(dontWatchOption);
+ parser.addPositionalArgument("directory", "The directory to start in.");
+ parser.process(app);
+ const QString rootPath = parser.positionalArguments().isEmpty()
+ ? QString() : parser.positionalArguments().first();
+
+ QFileSystemModel model;
+ QFileIconProvider iconProvider;
+ model.setIconProvider(&iconProvider);
+ model.setRootPath("");
+ if (parser.isSet(dontUseCustomDirectoryIconsOption))
+ model.setOption(QFileSystemModel::DontUseCustomDirectoryIcons);
+ if (parser.isSet(dontWatchOption))
+ model.setOption(QFileSystemModel::DontWatchForChanges);
+ QTreeView tree;
+ tree.setModel(&model);
+ if (!rootPath.isEmpty()) {
+ const QModelIndex rootIndex = model.index(QDir::cleanPath(rootPath));
+ if (rootIndex.isValid())
+ tree.setRootIndex(rootIndex);
+ }
+
+ // Demonstrating look and feel features
+ tree.setAnimated(false);
+ tree.setIndentation(20);
+ tree.setSortingEnabled(true);
+ const QSize availableSize = tree.screen()->availableGeometry().size();
+ tree.resize(availableSize / 2);
+ tree.setColumnWidth(0, tree.width() / 3);
+
+ // Make it flickable on touchscreens
+ QScroller::grabGesture(&tree, QScroller::TouchGesture);
+
+ tree.setWindowTitle(QObject::tr("Dir View"));
+ tree.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/itemviews/interview/CMakeLists.txt b/tests/manual/examples/widgets/itemviews/interview/CMakeLists.txt
new file mode 100644
index 0000000000..8bab5798ad
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/interview/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(interview LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/interview")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(interview
+ main.cpp
+ model.cpp model.h
+)
+
+set_target_properties(interview PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(interview PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(interview_resource_files
+ "images/folder.png"
+ "images/interview.png"
+ "images/services.png"
+)
+
+qt_add_resources(interview "interview"
+ PREFIX
+ "/"
+ FILES
+ ${interview_resource_files}
+)
+
+install(TARGETS interview
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/itemviews/interview/README b/tests/manual/examples/widgets/itemviews/interview/README
new file mode 100644
index 0000000000..50894428f6
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/interview/README
@@ -0,0 +1,2 @@
+The interview example shows the same model and selection being shared
+between three different views.
diff --git a/tests/manual/examples/widgets/itemviews/interview/images/folder.png b/tests/manual/examples/widgets/itemviews/interview/images/folder.png
new file mode 100644
index 0000000000..589fd2df59
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/interview/images/folder.png
Binary files differ
diff --git a/tests/manual/examples/widgets/itemviews/interview/images/interview.png b/tests/manual/examples/widgets/itemviews/interview/images/interview.png
new file mode 100644
index 0000000000..0c3d690258
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/interview/images/interview.png
Binary files differ
diff --git a/tests/manual/examples/widgets/itemviews/interview/images/services.png b/tests/manual/examples/widgets/itemviews/interview/images/services.png
new file mode 100644
index 0000000000..6b2ad969d4
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/interview/images/services.png
Binary files differ
diff --git a/tests/manual/examples/widgets/itemviews/interview/interview.pro b/tests/manual/examples/widgets/itemviews/interview/interview.pro
new file mode 100644
index 0000000000..6d64f23eb9
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/interview/interview.pro
@@ -0,0 +1,16 @@
+TEMPLATE = app
+QT += widgets
+requires(qtConfig(treeview))
+
+HEADERS += model.h
+SOURCES += model.cpp main.cpp
+RESOURCES += interview.qrc
+
+build_all:!build_pass {
+ CONFIG -= build_all
+ CONFIG += release
+}
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/interview
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/itemviews/interview/interview.qrc b/tests/manual/examples/widgets/itemviews/interview/interview.qrc
new file mode 100644
index 0000000000..b28ea34d8a
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/interview/interview.qrc
@@ -0,0 +1,7 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+ <file>images/folder.png</file>
+ <file>images/services.png</file>
+ <file>images/interview.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/itemviews/interview/main.cpp b/tests/manual/examples/widgets/itemviews/interview/main.cpp
new file mode 100644
index 0000000000..3446ff1dc4
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/interview/main.cpp
@@ -0,0 +1,55 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "model.h"
+
+#include <QApplication>
+#include <QHeaderView>
+#include <QListView>
+#include <QSplitter>
+#include <QTableView>
+#include <QTreeView>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ QSplitter page;
+
+ QAbstractItemModel *data = new Model(1000, 10, &page);
+ QItemSelectionModel *selections = new QItemSelectionModel(data);
+
+ QTableView *table = new QTableView;
+ table->setModel(data);
+ table->setSelectionModel(selections);
+ table->horizontalHeader()->setSectionsMovable(true);
+ table->verticalHeader()->setSectionsMovable(true);
+ // Set StaticContents to enable minimal repaints on resizes.
+ table->viewport()->setAttribute(Qt::WA_StaticContents);
+ page.addWidget(table);
+
+ QTreeView *tree = new QTreeView;
+ tree->setModel(data);
+ tree->setSelectionModel(selections);
+ tree->setUniformRowHeights(true);
+ tree->header()->setStretchLastSection(false);
+ tree->viewport()->setAttribute(Qt::WA_StaticContents);
+ // Disable the focus rect to get minimal repaints when scrolling on Mac.
+ tree->setAttribute(Qt::WA_MacShowFocusRect, false);
+ page.addWidget(tree);
+
+ QListView *list = new QListView;
+ list->setModel(data);
+ list->setSelectionModel(selections);
+ list->setViewMode(QListView::IconMode);
+ list->setSelectionMode(QAbstractItemView::ExtendedSelection);
+ list->setAlternatingRowColors(false);
+ list->viewport()->setAttribute(Qt::WA_StaticContents);
+ list->setAttribute(Qt::WA_MacShowFocusRect, false);
+ page.addWidget(list);
+
+ page.setWindowIcon(QPixmap(":/images/interview.png"));
+ page.setWindowTitle("Interview");
+ page.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/itemviews/interview/model.cpp b/tests/manual/examples/widgets/itemviews/interview/model.cpp
new file mode 100644
index 0000000000..9050ae6cc1
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/interview/model.cpp
@@ -0,0 +1,110 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "model.h"
+
+#include <QPixmap>
+
+Model::Model(int rows, int columns, QObject *parent)
+ : QAbstractItemModel(parent),
+ services(QPixmap(":/images/services.png")),
+ rc(rows),
+ cc(columns),
+ tree(new QList<Node>(rows, Node()))
+{
+
+}
+
+Model::~Model()
+{
+ delete tree;
+}
+
+QModelIndex Model::index(int row, int column, const QModelIndex &parent) const
+{
+ if (row < rc && row >= 0 && column < cc && column >= 0) {
+ Node *parentNode = static_cast<Node*>(parent.internalPointer());
+ Node *childNode = node(row, parentNode);
+ if (childNode)
+ return createIndex(row, column, childNode);
+ }
+ return QModelIndex();
+}
+
+QModelIndex Model::parent(const QModelIndex &child) const
+{
+ if (child.isValid()) {
+ Node *childNode = static_cast<Node*>(child.internalPointer());
+ Node *parentNode = parent(childNode);
+ if (parentNode)
+ return createIndex(row(parentNode), 0, parentNode);
+ }
+ return QModelIndex();
+}
+
+int Model::rowCount(const QModelIndex &parent) const
+{
+ return (parent.isValid() && parent.column() != 0) ? 0 : rc;
+}
+
+int Model::columnCount(const QModelIndex &parent) const
+{
+ Q_UNUSED(parent);
+ return cc;
+}
+
+QVariant Model::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+ if (role == Qt::DisplayRole)
+ return QVariant("Item " + QString::number(index.row()) + ':' + QString::number(index.column()));
+ if (role == Qt::DecorationRole) {
+ if (index.column() == 0)
+ return iconProvider.icon(QFileIconProvider::Folder);
+ return iconProvider.icon(QFileIconProvider::File);
+ }
+ return QVariant();
+}
+
+QVariant Model::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ if (role == Qt::DisplayRole)
+ return QString::number(section);
+ if (role == Qt::DecorationRole)
+ return QVariant::fromValue(services);
+ return QAbstractItemModel::headerData(section, orientation, role);
+}
+
+bool Model::hasChildren(const QModelIndex &parent) const
+{
+ if (parent.isValid() && parent.column() != 0)
+ return false;
+ return rc > 0 && cc > 0;
+}
+
+Qt::ItemFlags Model::flags(const QModelIndex &index) const
+{
+ if (!index.isValid())
+ return {};
+ return Qt::ItemIsDragEnabled|QAbstractItemModel::flags(index);
+}
+
+Model::Node *Model::node(int row, Node *parent) const
+{
+ if (parent && !parent->children)
+ parent->children = new QList<Node>(rc, Node(parent));
+ QList<Node> *v = parent ? parent->children : tree;
+ return const_cast<Node*>(&(v->at(row)));
+}
+
+Model::Node *Model::parent(Node *child) const
+{
+ return child ? child->parent : nullptr;
+}
+
+int Model::row(Node *node) const
+{
+ const Node *first = node->parent ? &(node->parent->children->at(0)) : &(tree->at(0));
+ return node - first;
+}
diff --git a/tests/manual/examples/widgets/itemviews/interview/model.h b/tests/manual/examples/widgets/itemviews/interview/model.h
new file mode 100644
index 0000000000..87ee740792
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/interview/model.h
@@ -0,0 +1,53 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MODEL_H
+#define MODEL_H
+
+#include <QAbstractItemModel>
+#include <QFileIconProvider>
+#include <QIcon>
+#include <QList>
+
+class Model : public QAbstractItemModel
+{
+ Q_OBJECT
+
+public:
+ Model(int rows, int columns, QObject *parent = nullptr);
+ ~Model();
+
+ QModelIndex index(int row, int column, const QModelIndex &parent) const override;
+ QModelIndex parent(const QModelIndex &child) const override;
+
+ int rowCount(const QModelIndex &parent) const override;
+ int columnCount(const QModelIndex &parent) const override;
+
+ QVariant data(const QModelIndex &index, int role) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
+
+ bool hasChildren(const QModelIndex &parent) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
+
+private:
+
+ struct Node
+ {
+ Node(Node *parent = nullptr) : parent(parent), children(nullptr) {}
+ ~Node() { delete children; }
+ Node *parent;
+ QList<Node> *children;
+ };
+
+ Node *node(int row, Node *parent) const;
+ Node *parent(Node *child) const;
+ int row(Node *node) const;
+
+ QIcon services;
+ int rc;
+ int cc;
+ QList<Node> *tree;
+ QFileIconProvider iconProvider;
+};
+
+#endif // MODEL_H
diff --git a/tests/manual/examples/widgets/itemviews/pixelator/CMakeLists.txt b/tests/manual/examples/widgets/itemviews/pixelator/CMakeLists.txt
new file mode 100644
index 0000000000..0a2671b13c
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/pixelator/CMakeLists.txt
@@ -0,0 +1,58 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(pixelator LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/pixelator")
+
+find_package(Qt6
+ REQUIRED COMPONENTS Core Gui Widgets
+ OPTIONAL_COMPONENTS PrintSupport
+)
+
+qt_standard_project_setup()
+
+qt_add_executable(pixelator
+ imagemodel.cpp imagemodel.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+ pixeldelegate.cpp pixeldelegate.h
+)
+
+set_target_properties(pixelator PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(pixelator PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+if(TARGET Qt6::PrintSupport)
+ target_link_libraries(pixelator PRIVATE Qt6::PrintSupport)
+endif()
+
+# Resources:
+set(images_resource_files
+ "images/qt.png"
+)
+
+qt_add_resources(pixelator "images"
+ PREFIX
+ "/"
+ FILES
+ ${images_resource_files}
+)
+
+install(TARGETS pixelator
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/itemviews/pixelator/imagemodel.cpp b/tests/manual/examples/widgets/itemviews/pixelator/imagemodel.cpp
new file mode 100644
index 0000000000..6b5b866522
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/pixelator/imagemodel.cpp
@@ -0,0 +1,53 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "imagemodel.h"
+
+//! [0]
+ImageModel::ImageModel(QObject *parent)
+ : QAbstractTableModel(parent)
+{
+}
+//! [0]
+
+//! [1]
+void ImageModel::setImage(const QImage &image)
+{
+ beginResetModel();
+ modelImage = image;
+ endResetModel();
+}
+//! [1]
+
+//! [2]
+int ImageModel::rowCount(const QModelIndex & /* parent */) const
+{
+ return modelImage.height();
+}
+
+int ImageModel::columnCount(const QModelIndex & /* parent */) const
+//! [2] //! [3]
+{
+ return modelImage.width();
+}
+//! [3]
+
+//! [4]
+QVariant ImageModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid() || role != Qt::DisplayRole)
+ return QVariant();
+ return qGray(modelImage.pixel(index.column(), index.row()));
+}
+//! [4]
+
+//! [5]
+QVariant ImageModel::headerData(int /* section */,
+ Qt::Orientation /* orientation */,
+ int role) const
+{
+ if (role == Qt::SizeHintRole)
+ return QSize(1, 1);
+ return QVariant();
+}
+//! [5]
diff --git a/tests/manual/examples/widgets/itemviews/pixelator/imagemodel.h b/tests/manual/examples/widgets/itemviews/pixelator/imagemodel.h
new file mode 100644
index 0000000000..050ac6b790
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/pixelator/imagemodel.h
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef IMAGEMODEL_H
+#define IMAGEMODEL_H
+
+#include <QAbstractTableModel>
+#include <QImage>
+
+//! [0]
+class ImageModel : public QAbstractTableModel
+{
+ Q_OBJECT
+
+public:
+ ImageModel(QObject *parent = nullptr);
+
+ void setImage(const QImage &image);
+
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
+
+private:
+ QImage modelImage;
+};
+//! [0]
+
+#endif // IMAGEMODEL_H
diff --git a/tests/manual/examples/widgets/itemviews/pixelator/images.qrc b/tests/manual/examples/widgets/itemviews/pixelator/images.qrc
new file mode 100644
index 0000000000..c105e13895
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/pixelator/images.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>images/qt.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/itemviews/pixelator/images/qt.png b/tests/manual/examples/widgets/itemviews/pixelator/images/qt.png
new file mode 100644
index 0000000000..dd197cb59c
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/pixelator/images/qt.png
Binary files differ
diff --git a/tests/manual/examples/widgets/itemviews/pixelator/main.cpp b/tests/manual/examples/widgets/itemviews/pixelator/main.cpp
new file mode 100644
index 0000000000..26783b02fc
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/pixelator/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow window;
+ window.show();
+ window.openImage(":/images/qt.png");
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/itemviews/pixelator/mainwindow.cpp b/tests/manual/examples/widgets/itemviews/pixelator/mainwindow.cpp
new file mode 100644
index 0000000000..42f0a43844
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/pixelator/mainwindow.cpp
@@ -0,0 +1,214 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+#include "imagemodel.h"
+#include "pixeldelegate.h"
+
+#include <QtWidgets>
+#if defined(QT_PRINTSUPPORT_LIB)
+#include <QtPrintSupport/qtprintsupportglobal.h>
+#if QT_CONFIG(printdialog)
+#include <QPrinter>
+#include <QPrintDialog>
+#endif
+#endif
+
+//! [0]
+MainWindow::MainWindow()
+{
+//! [0]
+ currentPath = QDir::homePath();
+ model = new ImageModel(this);
+
+ QWidget *centralWidget = new QWidget;
+
+//! [1]
+ view = new QTableView;
+ view->setShowGrid(false);
+ view->horizontalHeader()->hide();
+ view->verticalHeader()->hide();
+ view->horizontalHeader()->setMinimumSectionSize(1);
+ view->verticalHeader()->setMinimumSectionSize(1);
+ view->setModel(model);
+//! [1]
+
+//! [2]
+ PixelDelegate *delegate = new PixelDelegate(this);
+ view->setItemDelegate(delegate);
+//! [2]
+
+//! [3]
+ QLabel *pixelSizeLabel = new QLabel(tr("Pixel size:"));
+ QSpinBox *pixelSizeSpinBox = new QSpinBox;
+ pixelSizeSpinBox->setMinimum(4);
+ pixelSizeSpinBox->setMaximum(32);
+ pixelSizeSpinBox->setValue(12);
+//! [3]
+
+ QMenu *fileMenu = new QMenu(tr("&File"), this);
+ QAction *openAction = fileMenu->addAction(tr("&Open..."));
+ openAction->setShortcuts(QKeySequence::Open);
+
+ printAction = fileMenu->addAction(tr("&Print..."));
+ printAction->setEnabled(false);
+ printAction->setShortcut(QKeySequence::Print);
+
+ QAction *quitAction = fileMenu->addAction(tr("E&xit"));
+ quitAction->setShortcuts(QKeySequence::Quit);
+
+ QMenu *helpMenu = new QMenu(tr("&Help"), this);
+ QAction *aboutAction = helpMenu->addAction(tr("&About"));
+
+ menuBar()->addMenu(fileMenu);
+ menuBar()->addSeparator();
+ menuBar()->addMenu(helpMenu);
+
+ connect(openAction, &QAction::triggered, this, &MainWindow::chooseImage);
+ connect(printAction, &QAction::triggered, this, &MainWindow::printImage);
+ connect(quitAction, &QAction::triggered, qApp, &QCoreApplication::quit);
+ connect(aboutAction, &QAction::triggered, this, &MainWindow::showAboutBox);
+//! [4]
+ connect(pixelSizeSpinBox, &QSpinBox::valueChanged,
+ delegate, &PixelDelegate::setPixelSize);
+ connect(pixelSizeSpinBox, &QSpinBox::valueChanged,
+ this, &MainWindow::updateView);
+//! [4]
+
+ QHBoxLayout *controlsLayout = new QHBoxLayout;
+ controlsLayout->addWidget(pixelSizeLabel);
+ controlsLayout->addWidget(pixelSizeSpinBox);
+ controlsLayout->addStretch(1);
+
+ QVBoxLayout *mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(view);
+ mainLayout->addLayout(controlsLayout);
+ centralWidget->setLayout(mainLayout);
+
+ setCentralWidget(centralWidget);
+
+ setWindowTitle(tr("Pixelator"));
+ resize(640, 480);
+//! [5]
+}
+//! [5]
+
+void MainWindow::chooseImage()
+{
+ QString fileName = QFileDialog::getOpenFileName(this,
+ tr("Choose an image"), currentPath, "*");
+
+ if (!fileName.isEmpty())
+ openImage(fileName);
+}
+
+void MainWindow::openImage(const QString &fileName)
+{
+ QImage image;
+
+ if (image.load(fileName)) {
+ model->setImage(image);
+ if (!fileName.startsWith(":/")) {
+ currentPath = fileName;
+ setWindowTitle(tr("%1 - Pixelator").arg(currentPath));
+ }
+
+ printAction->setEnabled(true);
+ updateView();
+ }
+}
+
+void MainWindow::printImage()
+{
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
+ if (model->rowCount(QModelIndex())*model->columnCount(QModelIndex()) > 90000) {
+ QMessageBox::StandardButton answer;
+ answer = QMessageBox::question(this, tr("Large Image Size"),
+ tr("The printed image may be very large. Are you sure that "
+ "you want to print it?"),
+ QMessageBox::Yes | QMessageBox::No);
+ if (answer == QMessageBox::No)
+ return;
+ }
+
+ QPrinter printer(QPrinter::HighResolution);
+
+ QPrintDialog dlg(&printer, this);
+ dlg.setWindowTitle(tr("Print Image"));
+
+ if (dlg.exec() != QDialog::Accepted) {
+ return;
+ }
+
+ QPainter painter;
+ painter.begin(&printer);
+
+ int rows = model->rowCount(QModelIndex());
+ int columns = model->columnCount(QModelIndex());
+ int sourceWidth = (columns + 1) * ItemSize;
+ int sourceHeight = (rows + 1) * ItemSize;
+
+ painter.save();
+
+ double xscale = printer.pageRect(QPrinter::DevicePixel).width() / double(sourceWidth);
+ double yscale = printer.pageRect(QPrinter::DevicePixel).height() / double(sourceHeight);
+ double scale = qMin(xscale, yscale);
+
+ painter.translate(printer.paperRect(QPrinter::DevicePixel).x() + printer.pageRect(QPrinter::DevicePixel).width() / 2,
+ printer.paperRect(QPrinter::DevicePixel).y() + printer.pageRect(QPrinter::DevicePixel).height() / 2);
+ painter.scale(scale, scale);
+ painter.translate(-sourceWidth / 2, -sourceHeight / 2);
+
+ QStyleOptionViewItem option;
+ QModelIndex parent = QModelIndex();
+
+ QProgressDialog progress(tr("Printing..."), tr("Cancel"), 0, rows, this);
+ progress.setWindowModality(Qt::ApplicationModal);
+ float y = ItemSize / 2;
+
+ for (int row = 0; row < rows; ++row) {
+ progress.setValue(row);
+ qApp->processEvents();
+ if (progress.wasCanceled())
+ break;
+
+ float x = ItemSize / 2;
+
+ for (int column = 0; column < columns; ++column) {
+ option.rect = QRect(int(x), int(y), ItemSize, ItemSize);
+ view->itemDelegate()->paint(&painter, option,
+ model->index(row, column, parent));
+ x = x + ItemSize;
+ }
+ y = y + ItemSize;
+ }
+ progress.setValue(rows);
+
+ painter.restore();
+ painter.end();
+
+ if (progress.wasCanceled()) {
+ QMessageBox::information(this, tr("Printing canceled"),
+ tr("The printing process was canceled."), QMessageBox::Cancel);
+ }
+#else
+ QMessageBox::information(this, tr("Printing canceled"),
+ tr("Printing is not supported on this Qt build"), QMessageBox::Cancel);
+#endif
+}
+
+void MainWindow::showAboutBox()
+{
+ QMessageBox::about(this, tr("About the Pixelator example"),
+ tr("This example demonstrates how a standard view and a custom\n"
+ "delegate can be used to produce a specialized representation\n"
+ "of data in a simple custom model."));
+}
+
+//! [6]
+void MainWindow::updateView()
+{
+ view->resizeColumnsToContents();
+ view->resizeRowsToContents();
+}
+//! [6]
diff --git a/tests/manual/examples/widgets/itemviews/pixelator/mainwindow.h b/tests/manual/examples/widgets/itemviews/pixelator/mainwindow.h
new file mode 100644
index 0000000000..9929e2f5af
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/pixelator/mainwindow.h
@@ -0,0 +1,37 @@
+// 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>
+
+class ImageModel;
+QT_BEGIN_NAMESPACE
+class QAction;
+class QTableView;
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow();
+
+ void openImage(const QString &fileName);
+
+public slots:
+ void chooseImage();
+ void printImage();
+ void showAboutBox();
+ void updateView();
+
+private:
+ ImageModel *model;
+ QAction *printAction;
+ QString currentPath;
+ QTableView *view;
+};
+
+#endif // MAINWINDOW_H
diff --git a/tests/manual/examples/widgets/itemviews/pixelator/pixelator.pro b/tests/manual/examples/widgets/itemviews/pixelator/pixelator.pro
new file mode 100644
index 0000000000..421f626e28
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/pixelator/pixelator.pro
@@ -0,0 +1,16 @@
+QT += widgets
+requires(qtConfig(tableview))
+qtHaveModule(printsupport): QT += printsupport
+
+HEADERS = imagemodel.h \
+ mainwindow.h \
+ pixeldelegate.h
+SOURCES = imagemodel.cpp \
+ main.cpp \
+ mainwindow.cpp \
+ pixeldelegate.cpp
+RESOURCES += images.qrc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/pixelator
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/itemviews/pixelator/pixeldelegate.cpp b/tests/manual/examples/widgets/itemviews/pixelator/pixeldelegate.cpp
new file mode 100644
index 0000000000..3a104cd2c2
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/pixelator/pixeldelegate.cpp
@@ -0,0 +1,68 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "pixeldelegate.h"
+
+#include <QPainter>
+
+//! [0]
+PixelDelegate::PixelDelegate(QObject *parent)
+ : QAbstractItemDelegate(parent), pixelSize(12)
+{}
+//! [0]
+
+//! [1]
+void PixelDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
+ const QModelIndex &index) const
+{
+//! [2]
+ if (option.state & QStyle::State_Selected)
+ painter->fillRect(option.rect, option.palette.highlight());
+//! [1]
+
+//! [3]
+ const int size = qMin(option.rect.width(), option.rect.height());
+//! [3] //! [4]
+ const int brightness = index.model()->data(index, Qt::DisplayRole).toInt();
+ const double radius = (size / 2.0) - (brightness / 255.0 * size / 2.0);
+ if (qFuzzyIsNull(radius))
+ return;
+//! [4]
+
+//! [5]
+ painter->save();
+//! [5] //! [6]
+ painter->setRenderHint(QPainter::Antialiasing, true);
+//! [6] //! [7]
+ painter->setPen(Qt::NoPen);
+//! [7] //! [8]
+ if (option.state & QStyle::State_Selected)
+//! [8] //! [9]
+ painter->setBrush(option.palette.highlightedText());
+ else
+//! [2]
+ painter->setBrush(option.palette.text());
+//! [9]
+
+//! [10]
+ painter->drawEllipse(QRectF(option.rect.x() + option.rect.width() / 2 - radius,
+ option.rect.y() + option.rect.height() / 2 - radius,
+ 2 * radius, 2 * radius));
+ painter->restore();
+}
+//! [10]
+
+//! [11]
+QSize PixelDelegate::sizeHint(const QStyleOptionViewItem & /* option */,
+ const QModelIndex & /* index */) const
+{
+ return QSize(pixelSize, pixelSize);
+}
+//! [11]
+
+//! [12]
+void PixelDelegate::setPixelSize(int size)
+{
+ pixelSize = size;
+}
+//! [12]
diff --git a/tests/manual/examples/widgets/itemviews/pixelator/pixeldelegate.h b/tests/manual/examples/widgets/itemviews/pixelator/pixeldelegate.h
new file mode 100644
index 0000000000..a4c435ce69
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/pixelator/pixeldelegate.h
@@ -0,0 +1,41 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PIXELDELEGATE_H
+#define PIXELDELEGATE_H
+
+#include <QAbstractItemDelegate>
+#include <QModelIndex>
+#include <QSize>
+
+QT_BEGIN_NAMESPACE
+class QAbstractItemModel;
+class QObject;
+class QPainter;
+QT_END_NAMESPACE
+
+static constexpr int ItemSize = 256;
+
+//! [0]
+class PixelDelegate : public QAbstractItemDelegate
+{
+ Q_OBJECT
+
+public:
+ PixelDelegate(QObject *parent = nullptr);
+
+ void paint(QPainter *painter, const QStyleOptionViewItem &option,
+ const QModelIndex &index) const override;
+
+ QSize sizeHint(const QStyleOptionViewItem &option,
+ const QModelIndex &index) const override;
+
+public slots:
+ void setPixelSize(int size);
+
+private:
+ int pixelSize;
+};
+//! [0]
+
+#endif // PIXELDELEGATE_H
diff --git a/tests/manual/examples/widgets/itemviews/puzzle/CMakeLists.txt b/tests/manual/examples/widgets/itemviews/puzzle/CMakeLists.txt
new file mode 100644
index 0000000000..21989f1a83
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/puzzle/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(puzzle LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/puzzle")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(itemviews_puzzle
+ main.cpp
+ mainwindow.cpp mainwindow.h
+ piecesmodel.cpp piecesmodel.h
+ puzzlewidget.cpp puzzlewidget.h
+)
+
+set_target_properties(itemviews_puzzle PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(itemviews_puzzle PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(puzzle_resource_files
+ "example.jpg"
+)
+
+qt_add_resources(itemviews_puzzle "puzzle"
+ PREFIX
+ "/images"
+ FILES
+ ${puzzle_resource_files}
+)
+
+install(TARGETS itemviews_puzzle
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/itemviews/puzzle/example.jpg b/tests/manual/examples/widgets/itemviews/puzzle/example.jpg
new file mode 100644
index 0000000000..023203c57a
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/puzzle/example.jpg
Binary files differ
diff --git a/tests/manual/examples/widgets/itemviews/puzzle/main.cpp b/tests/manual/examples/widgets/itemviews/puzzle/main.cpp
new file mode 100644
index 0000000000..32e219256a
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/puzzle/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow window;
+ window.loadImage(QStringLiteral(":/images/example.jpg"));
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/itemviews/puzzle/mainwindow.cpp b/tests/manual/examples/widgets/itemviews/puzzle/mainwindow.cpp
new file mode 100644
index 0000000000..f4b221df20
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/puzzle/mainwindow.cpp
@@ -0,0 +1,115 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+#include "piecesmodel.h"
+#include "puzzlewidget.h"
+
+#include <QtWidgets>
+#include <stdlib.h>
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+{
+ setupMenus();
+ setupWidgets();
+ model = new PiecesModel(puzzleWidget->pieceSize(), this);
+ piecesList->setModel(model);
+
+ setSizePolicy(QSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed));
+ setWindowTitle(tr("Puzzle"));
+}
+
+void MainWindow::openImage()
+{
+ const QString directory =
+ QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).value(0, QDir::homePath());
+ QFileDialog dialog(this, tr("Open Image"), directory);
+ dialog.setAcceptMode(QFileDialog::AcceptOpen);
+ dialog.setFileMode(QFileDialog::ExistingFile);
+ QStringList mimeTypeFilters;
+ for (const QByteArray &mimeTypeName : QImageReader::supportedMimeTypes())
+ mimeTypeFilters.append(mimeTypeName);
+ mimeTypeFilters.sort();
+ dialog.setMimeTypeFilters(mimeTypeFilters);
+ dialog.selectMimeTypeFilter("image/jpeg");
+ if (dialog.exec() == QDialog::Accepted)
+ loadImage(dialog.selectedFiles().constFirst());
+}
+
+void MainWindow::loadImage(const QString &fileName)
+{
+ QPixmap newImage;
+ if (!newImage.load(fileName)) {
+ QMessageBox::warning(this, tr("Open Image"),
+ tr("The image file could not be loaded."),
+ QMessageBox::Close);
+ return;
+ }
+ puzzleImage = newImage;
+ setupPuzzle();
+}
+
+void MainWindow::setCompleted()
+{
+ QMessageBox::information(this, tr("Puzzle Completed"),
+ tr("Congratulations! You have completed the puzzle!\n"
+ "Click OK to start again."),
+ QMessageBox::Ok);
+
+ setupPuzzle();
+}
+
+void MainWindow::setupPuzzle()
+{
+ int size = qMin(puzzleImage.width(), puzzleImage.height());
+ puzzleImage = puzzleImage.copy((puzzleImage.width() - size) / 2,
+ (puzzleImage.height() - size) / 2, size, size).scaled(puzzleWidget->imageSize(),
+ puzzleWidget->imageSize(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+
+ model->addPieces(puzzleImage);
+ puzzleWidget->clear();
+}
+
+void MainWindow::setupMenus()
+{
+ QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
+
+ QAction *openAction = fileMenu->addAction(tr("&Open..."), this, &MainWindow::openImage);
+ openAction->setShortcuts(QKeySequence::Open);
+
+ QAction *exitAction = fileMenu->addAction(tr("E&xit"), qApp, &QCoreApplication::quit);
+ exitAction->setShortcuts(QKeySequence::Quit);
+
+ QMenu *gameMenu = menuBar()->addMenu(tr("&Game"));
+
+ gameMenu->addAction(tr("&Restart"), this, &MainWindow::setupPuzzle);
+}
+
+void MainWindow::setupWidgets()
+{
+ QFrame *frame = new QFrame;
+ QHBoxLayout *frameLayout = new QHBoxLayout(frame);
+
+ puzzleWidget = new PuzzleWidget(400);
+
+ piecesList = new QListView;
+ piecesList->setDragEnabled(true);
+ piecesList->setViewMode(QListView::IconMode);
+ piecesList->setIconSize(QSize(puzzleWidget->pieceSize() - 20, puzzleWidget->pieceSize() - 20));
+ piecesList->setGridSize(QSize(puzzleWidget->pieceSize(), puzzleWidget->pieceSize()));
+ piecesList->setSpacing(10);
+ piecesList->setMovement(QListView::Snap);
+ piecesList->setAcceptDrops(true);
+ piecesList->setDropIndicatorShown(true);
+
+ PiecesModel *model = new PiecesModel(puzzleWidget->pieceSize(), this);
+ piecesList->setModel(model);
+
+ connect(puzzleWidget, &PuzzleWidget::puzzleCompleted,
+ this, &MainWindow::setCompleted, Qt::QueuedConnection);
+
+ frameLayout->addWidget(piecesList);
+ frameLayout->addWidget(puzzleWidget);
+ setCentralWidget(frame);
+}
diff --git a/tests/manual/examples/widgets/itemviews/puzzle/mainwindow.h b/tests/manual/examples/widgets/itemviews/puzzle/mainwindow.h
new file mode 100644
index 0000000000..56a59b805c
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/puzzle/mainwindow.h
@@ -0,0 +1,41 @@
+// 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>
+#include <QPixmap>
+
+class PuzzleWidget;
+class PiecesModel;
+QT_BEGIN_NAMESPACE
+class QListView;
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ explicit MainWindow(QWidget *parent = nullptr);
+
+public slots:
+ void openImage();
+ void loadImage(const QString &path);
+ void setupPuzzle();
+
+private slots:
+ void setCompleted();
+
+private:
+ void setupMenus();
+ void setupWidgets();
+
+ QPixmap puzzleImage;
+ QListView *piecesList;
+ PuzzleWidget *puzzleWidget;
+ PiecesModel *model;
+};
+
+#endif // MAINWINDOW_H
diff --git a/tests/manual/examples/widgets/itemviews/puzzle/piecesmodel.cpp b/tests/manual/examples/widgets/itemviews/puzzle/piecesmodel.cpp
new file mode 100644
index 0000000000..8e3ccf4aa3
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/puzzle/piecesmodel.cpp
@@ -0,0 +1,168 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "piecesmodel.h"
+
+#include <QIcon>
+#include <QMimeData>
+#include <QRandomGenerator>
+
+PiecesModel::PiecesModel(int pieceSize, QObject *parent)
+ : QAbstractListModel(parent), m_PieceSize(pieceSize)
+{
+}
+
+QVariant PiecesModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+
+ if (role == Qt::DecorationRole)
+ return QIcon(pixmaps.value(index.row()).scaled(m_PieceSize, m_PieceSize,
+ Qt::KeepAspectRatio, Qt::SmoothTransformation));
+ else if (role == Qt::UserRole)
+ return pixmaps.value(index.row());
+ else if (role == Qt::UserRole + 1)
+ return locations.value(index.row());
+
+ return QVariant();
+}
+
+void PiecesModel::addPiece(const QPixmap &pixmap, const QPoint &location)
+{
+ int row;
+ if (QRandomGenerator::global()->bounded(2) == 1)
+ row = 0;
+ else
+ row = pixmaps.size();
+
+ beginInsertRows(QModelIndex(), row, row);
+ pixmaps.insert(row, pixmap);
+ locations.insert(row, location);
+ endInsertRows();
+}
+
+Qt::ItemFlags PiecesModel::flags(const QModelIndex &index) const
+{
+ if (index.isValid())
+ return (QAbstractListModel::flags(index)|Qt::ItemIsDragEnabled);
+
+ return Qt::ItemIsDropEnabled;
+}
+
+bool PiecesModel::removeRows(int row, int count, const QModelIndex &parent)
+{
+ if (parent.isValid())
+ return false;
+
+ if (row >= pixmaps.size() || row + count <= 0)
+ return false;
+
+ int beginRow = qMax(0, row);
+ int endRow = qMin(row + count - 1, pixmaps.size() - 1);
+
+ beginRemoveRows(parent, beginRow, endRow);
+
+ while (beginRow <= endRow) {
+ pixmaps.removeAt(beginRow);
+ locations.removeAt(beginRow);
+ ++beginRow;
+ }
+
+ endRemoveRows();
+ return true;
+}
+
+QStringList PiecesModel::mimeTypes() const
+{
+ QStringList types;
+ types << "image/x-puzzle-piece";
+ return types;
+}
+
+QMimeData *PiecesModel::mimeData(const QModelIndexList &indexes) const
+{
+ QMimeData *mimeData = new QMimeData();
+ QByteArray encodedData;
+
+ QDataStream stream(&encodedData, QDataStream::WriteOnly);
+
+ for (const QModelIndex &index : indexes) {
+ if (index.isValid()) {
+ QPixmap pixmap = qvariant_cast<QPixmap>(data(index, Qt::UserRole));
+ QPoint location = data(index, Qt::UserRole+1).toPoint();
+ stream << pixmap << location;
+ }
+ }
+
+ mimeData->setData("image/x-puzzle-piece", encodedData);
+ return mimeData;
+}
+
+bool PiecesModel::dropMimeData(const QMimeData *data, Qt::DropAction action,
+ int row, int column, const QModelIndex &parent)
+{
+ if (!data->hasFormat("image/x-puzzle-piece"))
+ return false;
+
+ if (action == Qt::IgnoreAction)
+ return true;
+
+ if (column > 0)
+ return false;
+
+ int endRow;
+
+ if (!parent.isValid()) {
+ if (row < 0)
+ endRow = pixmaps.size();
+ else
+ endRow = qMin(row, pixmaps.size());
+ } else {
+ endRow = parent.row();
+ }
+
+ QByteArray encodedData = data->data("image/x-puzzle-piece");
+ QDataStream stream(&encodedData, QDataStream::ReadOnly);
+
+ while (!stream.atEnd()) {
+ QPixmap pixmap;
+ QPoint location;
+ stream >> pixmap >> location;
+
+ beginInsertRows(QModelIndex(), endRow, endRow);
+ pixmaps.insert(endRow, pixmap);
+ locations.insert(endRow, location);
+ endInsertRows();
+
+ ++endRow;
+ }
+
+ return true;
+}
+
+int PiecesModel::rowCount(const QModelIndex &parent) const
+{
+ return parent.isValid() ? 0 : pixmaps.size();
+}
+
+Qt::DropActions PiecesModel::supportedDropActions() const
+{
+ return Qt::CopyAction | Qt::MoveAction;
+}
+
+void PiecesModel::addPieces(const QPixmap &pixmap)
+{
+ if (!pixmaps.isEmpty()) {
+ beginRemoveRows(QModelIndex(), 0, pixmaps.size() - 1);
+ pixmaps.clear();
+ locations.clear();
+ endRemoveRows();
+ }
+ for (int y = 0; y < 5; ++y) {
+ for (int x = 0; x < 5; ++x) {
+ QPixmap pieceImage = pixmap.copy(x*m_PieceSize, y*m_PieceSize, m_PieceSize, m_PieceSize);
+ addPiece(pieceImage, QPoint(x, y));
+ }
+ }
+}
diff --git a/tests/manual/examples/widgets/itemviews/puzzle/piecesmodel.h b/tests/manual/examples/widgets/itemviews/puzzle/piecesmodel.h
new file mode 100644
index 0000000000..878ed73a70
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/puzzle/piecesmodel.h
@@ -0,0 +1,45 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PIECESLIST_H
+#define PIECESLIST_H
+
+#include <QAbstractListModel>
+#include <QPixmap>
+#include <QPoint>
+#include <QStringList>
+#include <QList>
+
+QT_BEGIN_NAMESPACE
+class QMimeData;
+QT_END_NAMESPACE
+
+class PiecesModel : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+ explicit PiecesModel(int pieceSize, QObject *parent = nullptr);
+
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
+ bool removeRows(int row, int count, const QModelIndex &parent) override;
+
+ bool dropMimeData(const QMimeData *data, Qt::DropAction action,
+ int row, int column, const QModelIndex &parent) override;
+ QMimeData *mimeData(const QModelIndexList &indexes) const override;
+ QStringList mimeTypes() const override;
+ int rowCount(const QModelIndex &parent) const override;
+ Qt::DropActions supportedDropActions() const override;
+
+ void addPiece(const QPixmap &pixmap, const QPoint &location);
+ void addPieces(const QPixmap &pixmap);
+
+private:
+ QList<QPoint> locations;
+ QList<QPixmap> pixmaps;
+
+ int m_PieceSize;
+};
+
+#endif // PIECESLIST_H
diff --git a/tests/manual/examples/widgets/itemviews/puzzle/puzzle.pro b/tests/manual/examples/widgets/itemviews/puzzle/puzzle.pro
new file mode 100644
index 0000000000..dcc27aae6a
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/puzzle/puzzle.pro
@@ -0,0 +1,15 @@
+QT += widgets
+requires(qtConfig(listview))
+
+HEADERS = mainwindow.h \
+ piecesmodel.h \
+ puzzlewidget.h
+RESOURCES = puzzle.qrc
+SOURCES = main.cpp \
+ mainwindow.cpp \
+ piecesmodel.cpp \
+ puzzlewidget.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/puzzle
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/itemviews/puzzle/puzzle.qrc b/tests/manual/examples/widgets/itemviews/puzzle/puzzle.qrc
new file mode 100644
index 0000000000..4076cec026
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/puzzle/puzzle.qrc
@@ -0,0 +1,5 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/images">
+ <file>example.jpg</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/itemviews/puzzle/puzzlewidget.cpp b/tests/manual/examples/widgets/itemviews/puzzle/puzzlewidget.cpp
new file mode 100644
index 0000000000..15aa6ac94f
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/puzzle/puzzlewidget.cpp
@@ -0,0 +1,163 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "puzzlewidget.h"
+
+#include <QtWidgets>
+
+PuzzleWidget::PuzzleWidget(int imageSize, QWidget *parent)
+ : QWidget(parent), m_ImageSize(imageSize)
+{
+ setAcceptDrops(true);
+ setMinimumSize(m_ImageSize, m_ImageSize);
+ setMaximumSize(m_ImageSize, m_ImageSize);
+}
+
+void PuzzleWidget::clear()
+{
+ pieces.clear();
+ highlightedRect = QRect();
+ inPlace = 0;
+ update();
+}
+
+void PuzzleWidget::dragEnterEvent(QDragEnterEvent *event)
+{
+ if (event->mimeData()->hasFormat("image/x-puzzle-piece"))
+ event->accept();
+ else
+ event->ignore();
+}
+
+void PuzzleWidget::dragLeaveEvent(QDragLeaveEvent *event)
+{
+ QRect updateRect = highlightedRect;
+ highlightedRect = QRect();
+ update(updateRect);
+ event->accept();
+}
+
+void PuzzleWidget::dragMoveEvent(QDragMoveEvent *event)
+{
+ QRect updateRect = highlightedRect.united(targetSquare(event->position().toPoint()));
+
+ if (event->mimeData()->hasFormat("image/x-puzzle-piece")
+ && findPiece(targetSquare(event->position().toPoint())) == -1) {
+
+ highlightedRect = targetSquare(event->position().toPoint());
+ event->setDropAction(Qt::MoveAction);
+ event->accept();
+ } else {
+ highlightedRect = QRect();
+ event->ignore();
+ }
+
+ update(updateRect);
+}
+
+void PuzzleWidget::dropEvent(QDropEvent *event)
+{
+ if (event->mimeData()->hasFormat("image/x-puzzle-piece")
+ && findPiece(targetSquare(event->position().toPoint())) == -1) {
+
+ QByteArray pieceData = event->mimeData()->data("image/x-puzzle-piece");
+ QDataStream dataStream(&pieceData, QIODevice::ReadOnly);
+ Piece piece;
+ piece.rect = targetSquare(event->position().toPoint());
+ dataStream >> piece.pixmap >> piece.location;
+
+ pieces.append(piece);
+
+ highlightedRect = QRect();
+ update(piece.rect);
+
+ event->setDropAction(Qt::MoveAction);
+ event->accept();
+
+ if (piece.location == piece.rect.topLeft() / pieceSize()) {
+ inPlace++;
+ if (inPlace == 25)
+ emit puzzleCompleted();
+ }
+ } else {
+ highlightedRect = QRect();
+ event->ignore();
+ }
+}
+
+int PuzzleWidget::findPiece(const QRect &pieceRect) const
+{
+ for (int i = 0, size = pieces.size(); i < size; ++i) {
+ if (pieces.at(i).rect == pieceRect)
+ return i;
+ }
+ return -1;
+}
+
+void PuzzleWidget::mousePressEvent(QMouseEvent *event)
+{
+ QRect square = targetSquare(event->position().toPoint());
+ int found = findPiece(square);
+
+ if (found == -1)
+ return;
+
+ Piece piece = pieces.takeAt(found);
+
+ if (piece.location == square.topLeft() / pieceSize())
+ inPlace--;
+
+ update(square);
+
+ QByteArray itemData;
+ QDataStream dataStream(&itemData, QIODevice::WriteOnly);
+
+ dataStream << piece.pixmap << piece.location;
+
+ QMimeData *mimeData = new QMimeData;
+ mimeData->setData("image/x-puzzle-piece", itemData);
+
+ QDrag *drag = new QDrag(this);
+ drag->setMimeData(mimeData);
+ drag->setHotSpot(event->position().toPoint() - square.topLeft());
+ drag->setPixmap(piece.pixmap);
+
+ if (drag->exec(Qt::MoveAction) == Qt::IgnoreAction) {
+ pieces.insert(found, piece);
+ update(targetSquare(event->position().toPoint()));
+
+ if (piece.location == QPoint(square.x() / pieceSize(), square.y() / pieceSize()))
+ inPlace++;
+ }
+}
+
+void PuzzleWidget::paintEvent(QPaintEvent *event)
+{
+ QPainter painter(this);
+ painter.fillRect(event->rect(), Qt::white);
+
+ if (highlightedRect.isValid()) {
+ painter.setBrush(QColor("#ffcccc"));
+ painter.setPen(Qt::NoPen);
+ painter.drawRect(highlightedRect.adjusted(0, 0, -1, -1));
+ }
+
+ for (const Piece &piece : pieces)
+ painter.drawPixmap(piece.rect, piece.pixmap);
+}
+
+const QRect PuzzleWidget::targetSquare(const QPoint &position) const
+{
+ QPoint topLeft = QPoint(position.x() / pieceSize(), position.y() / pieceSize()) * pieceSize();
+ return QRect(topLeft, QSize(pieceSize(), pieceSize()));
+}
+
+int PuzzleWidget::pieceSize() const
+{
+ return m_ImageSize / 5;
+}
+
+int PuzzleWidget::imageSize() const
+{
+ return m_ImageSize;
+}
diff --git a/tests/manual/examples/widgets/itemviews/puzzle/puzzlewidget.h b/tests/manual/examples/widgets/itemviews/puzzle/puzzlewidget.h
new file mode 100644
index 0000000000..d1c00872ec
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/puzzle/puzzlewidget.h
@@ -0,0 +1,56 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PUZZLEWIDGET_H
+#define PUZZLEWIDGET_H
+
+#include <QPoint>
+#include <QPixmap>
+#include <QList>
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QDragEnterEvent;
+class QDropEvent;
+class QMouseEvent;
+QT_END_NAMESPACE
+
+class PuzzleWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit PuzzleWidget(int imageSize, QWidget *parent = nullptr);
+ void clear();
+
+ int pieceSize() const;
+ int imageSize() const;
+
+signals:
+ void puzzleCompleted();
+
+protected:
+ void dragEnterEvent(QDragEnterEvent *event) override;
+ void dragLeaveEvent(QDragLeaveEvent *event) override;
+ void dragMoveEvent(QDragMoveEvent *event) override;
+ void dropEvent(QDropEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void paintEvent(QPaintEvent *event) override;
+
+private:
+ struct Piece {
+ QPixmap pixmap;
+ QRect rect;
+ QPoint location;
+ };
+
+ int findPiece(const QRect &pieceRect) const;
+ const QRect targetSquare(const QPoint &position) const;
+
+ QList<Piece> pieces;
+ QRect highlightedRect;
+ int inPlace;
+ int m_ImageSize;
+};
+
+#endif // PUZZLEWIDGET_H
diff --git a/tests/manual/examples/widgets/itemviews/simpledommodel/CMakeLists.txt b/tests/manual/examples/widgets/itemviews/simpledommodel/CMakeLists.txt
new file mode 100644
index 0000000000..20d0aeedde
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simpledommodel/CMakeLists.txt
@@ -0,0 +1,40 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(simpledommodel LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/simpledommodel")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Xml)
+
+qt_standard_project_setup()
+
+qt_add_executable(simpledommodel
+ domitem.cpp domitem.h
+ dommodel.cpp dommodel.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+)
+
+set_target_properties(simpledommodel PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(simpledommodel PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+ Qt6::Xml
+)
+
+install(TARGETS simpledommodel
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/itemviews/simpledommodel/domitem.cpp b/tests/manual/examples/widgets/itemviews/simpledommodel/domitem.cpp
new file mode 100644
index 0000000000..b3e197b3db
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simpledommodel/domitem.cpp
@@ -0,0 +1,62 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "domitem.h"
+
+#include <QtXml>
+
+//! [0]
+DomItem::DomItem(const QDomNode &node, int row, DomItem *parent)
+ : domNode(node),
+//! [0]
+ // Record the item's location within its parent.
+//! [1]
+ parentItem(parent),
+ rowNumber(row)
+{}
+//! [1]
+
+//! [2]
+DomItem::~DomItem()
+{
+ qDeleteAll(childItems);
+}
+//! [2]
+
+//! [3]
+QDomNode DomItem::node() const
+{
+ return domNode;
+}
+//! [3]
+
+//! [4]
+DomItem *DomItem::parent()
+{
+ return parentItem;
+}
+//! [4]
+
+//! [5]
+DomItem *DomItem::child(int i)
+{
+ DomItem *childItem = childItems.value(i);
+ if (childItem)
+ return childItem;
+
+ // if child does not yet exist, create it
+ if (i >= 0 && i < domNode.childNodes().count()) {
+ QDomNode childNode = domNode.childNodes().item(i);
+ childItem = new DomItem(childNode, i, this);
+ childItems[i] = childItem;
+ }
+ return childItem;
+}
+//! [5]
+
+//! [6]
+int DomItem::row() const
+{
+ return rowNumber;
+}
+//! [6]
diff --git a/tests/manual/examples/widgets/itemviews/simpledommodel/domitem.h b/tests/manual/examples/widgets/itemviews/simpledommodel/domitem.h
new file mode 100644
index 0000000000..9b02d8e88c
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simpledommodel/domitem.h
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef DOMITEM_H
+#define DOMITEM_H
+
+#include <QDomNode>
+#include <QHash>
+
+//! [0]
+class DomItem
+{
+public:
+ DomItem(const QDomNode &node, int row, DomItem *parent = nullptr);
+ ~DomItem();
+ DomItem *child(int i);
+ DomItem *parent();
+ QDomNode node() const;
+ int row() const;
+
+private:
+ QDomNode domNode;
+ QHash<int, DomItem *> childItems;
+ DomItem *parentItem;
+ int rowNumber;
+};
+//! [0]
+
+#endif // DOMITEM_H
diff --git a/tests/manual/examples/widgets/itemviews/simpledommodel/dommodel.cpp b/tests/manual/examples/widgets/itemviews/simpledommodel/dommodel.cpp
new file mode 100644
index 0000000000..17f05c8be3
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simpledommodel/dommodel.cpp
@@ -0,0 +1,153 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "dommodel.h"
+#include "domitem.h"
+
+#include <QtXml>
+
+//! [0]
+DomModel::DomModel(const QDomDocument &document, QObject *parent)
+ : QAbstractItemModel(parent),
+ domDocument(document),
+ rootItem(new DomItem(domDocument, 0))
+{
+}
+//! [0]
+
+//! [1]
+DomModel::~DomModel()
+{
+ delete rootItem;
+}
+//! [1]
+
+//! [2]
+int DomModel::columnCount(const QModelIndex &parent) const
+{
+ Q_UNUSED(parent);
+ return 3;
+}
+//! [2]
+
+//! [3]
+QVariant DomModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+
+ if (role != Qt::DisplayRole)
+ return QVariant();
+
+ const DomItem *item = static_cast<DomItem*>(index.internalPointer());
+
+ const QDomNode node = item->node();
+//! [3] //! [4]
+
+ switch (index.column()) {
+ case 0:
+ return node.nodeName();
+ case 1:
+ {
+ const QDomNamedNodeMap attributeMap = node.attributes();
+ QStringList attributes;
+ for (int i = 0; i < attributeMap.count(); ++i) {
+ QDomNode attribute = attributeMap.item(i);
+ attributes << attribute.nodeName() + "=\""
+ + attribute.nodeValue() + '"';
+ }
+ return attributes.join(' ');
+ }
+ case 2:
+ return node.nodeValue().split('\n').join(' ');
+ default:
+ break;
+ }
+ return QVariant();
+}
+//! [4]
+
+//! [5]
+Qt::ItemFlags DomModel::flags(const QModelIndex &index) const
+{
+ if (!index.isValid())
+ return Qt::NoItemFlags;
+
+ return QAbstractItemModel::flags(index);
+}
+//! [5]
+
+//! [6]
+QVariant DomModel::headerData(int section, Qt::Orientation orientation,
+ int role) const
+{
+ if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
+ switch (section) {
+ case 0:
+ return tr("Name");
+ case 1:
+ return tr("Attributes");
+ case 2:
+ return tr("Value");
+ default:
+ break;
+ }
+ }
+ return QVariant();
+}
+//! [6]
+
+//! [7]
+QModelIndex DomModel::index(int row, int column, const QModelIndex &parent) const
+{
+ if (!hasIndex(row, column, parent))
+ return QModelIndex();
+
+ DomItem *parentItem;
+
+ if (!parent.isValid())
+ parentItem = rootItem;
+ else
+ parentItem = static_cast<DomItem*>(parent.internalPointer());
+//! [7]
+
+//! [8]
+ DomItem *childItem = parentItem->child(row);
+ if (childItem)
+ return createIndex(row, column, childItem);
+ return QModelIndex();
+}
+//! [8]
+
+//! [9]
+QModelIndex DomModel::parent(const QModelIndex &child) const
+{
+ if (!child.isValid())
+ return QModelIndex();
+
+ DomItem *childItem = static_cast<DomItem*>(child.internalPointer());
+ DomItem *parentItem = childItem->parent();
+
+ if (!parentItem || parentItem == rootItem)
+ return QModelIndex();
+
+ return createIndex(parentItem->row(), 0, parentItem);
+}
+//! [9]
+
+//! [10]
+int DomModel::rowCount(const QModelIndex &parent) const
+{
+ if (parent.column() > 0)
+ return 0;
+
+ DomItem *parentItem;
+
+ if (!parent.isValid())
+ parentItem = rootItem;
+ else
+ parentItem = static_cast<DomItem*>(parent.internalPointer());
+
+ return parentItem->node().childNodes().count();
+}
+//! [10]
diff --git a/tests/manual/examples/widgets/itemviews/simpledommodel/dommodel.h b/tests/manual/examples/widgets/itemviews/simpledommodel/dommodel.h
new file mode 100644
index 0000000000..109ab33e58
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simpledommodel/dommodel.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef DOMMODEL_H
+#define DOMMODEL_H
+
+#include <QAbstractItemModel>
+#include <QDomDocument>
+#include <QModelIndex>
+
+class DomItem;
+
+//! [0]
+class DomModel : public QAbstractItemModel
+{
+ Q_OBJECT
+
+public:
+ explicit DomModel(const QDomDocument &document, QObject *parent = nullptr);
+ ~DomModel();
+
+ QVariant data(const QModelIndex &index, int role) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
+ QVariant headerData(int section, Qt::Orientation orientation,
+ int role = Qt::DisplayRole) const override;
+ QModelIndex index(int row, int column,
+ const QModelIndex &parent = QModelIndex()) const override;
+ QModelIndex parent(const QModelIndex &child) const override;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const override;
+
+private:
+ QDomDocument domDocument;
+ DomItem *rootItem;
+};
+//! [0]
+
+#endif // DOMMODEL_H
diff --git a/tests/manual/examples/widgets/itemviews/simpledommodel/main.cpp b/tests/manual/examples/widgets/itemviews/simpledommodel/main.cpp
new file mode 100644
index 0000000000..2ea03356f2
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simpledommodel/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow window;
+ window.resize(640, 480);
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/itemviews/simpledommodel/mainwindow.cpp b/tests/manual/examples/widgets/itemviews/simpledommodel/mainwindow.cpp
new file mode 100644
index 0000000000..ad64863fbb
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simpledommodel/mainwindow.cpp
@@ -0,0 +1,47 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+#include "dommodel.h"
+
+#include <QDomDocument>
+#include <QTreeView>
+#include <QMenuBar>
+#include <QFileDialog>
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent),
+ model(new DomModel(QDomDocument(), this)),
+ view(new QTreeView(this))
+{
+ fileMenu = menuBar()->addMenu(tr("&File"));
+ fileMenu->addAction(tr("&Open..."), QKeySequence::Open, this, &MainWindow::openFile);
+ fileMenu->addAction(tr("E&xit"), QKeySequence::Quit, this, &QWidget::close);
+
+ view->setModel(model);
+
+ setCentralWidget(view);
+ setWindowTitle(tr("Simple DOM Model"));
+}
+
+void MainWindow::openFile()
+{
+ QString filePath = QFileDialog::getOpenFileName(this, tr("Open File"),
+ xmlPath, tr("XML files (*.xml);;HTML files (*.html);;"
+ "SVG files (*.svg);;User Interface files (*.ui)"));
+
+ if (!filePath.isEmpty()) {
+ QFile file(filePath);
+ if (file.open(QIODevice::ReadOnly)) {
+ QDomDocument document;
+ if (document.setContent(&file)) {
+ DomModel *newModel = new DomModel(document, this);
+ view->setModel(newModel);
+ delete model;
+ model = newModel;
+ xmlPath = filePath;
+ }
+ file.close();
+ }
+ }
+}
diff --git a/tests/manual/examples/widgets/itemviews/simpledommodel/mainwindow.h b/tests/manual/examples/widgets/itemviews/simpledommodel/mainwindow.h
new file mode 100644
index 0000000000..a82f3956c8
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simpledommodel/mainwindow.h
@@ -0,0 +1,33 @@
+// 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>
+#include <QString>
+
+class DomModel;
+QT_BEGIN_NAMESPACE
+class QMenu;
+class QTreeView;
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+
+public slots:
+ void openFile();
+
+private:
+ DomModel *model;
+ QMenu *fileMenu;
+ QString xmlPath;
+ QTreeView *view;
+};
+
+#endif // MAINWINDOW_H
diff --git a/tests/manual/examples/widgets/itemviews/simpledommodel/simpledommodel.pro b/tests/manual/examples/widgets/itemviews/simpledommodel/simpledommodel.pro
new file mode 100644
index 0000000000..3d45920e36
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simpledommodel/simpledommodel.pro
@@ -0,0 +1,14 @@
+HEADERS = domitem.h \
+ dommodel.h \
+ mainwindow.h
+SOURCES = domitem.cpp \
+ dommodel.cpp \
+ main.cpp \
+ mainwindow.cpp
+QT += xml widgets
+requires(qtConfig(filedialog))
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/simpledommodel
+INSTALLS += target
+
diff --git a/tests/manual/examples/widgets/itemviews/simplewidgetmapper/CMakeLists.txt b/tests/manual/examples/widgets/itemviews/simplewidgetmapper/CMakeLists.txt
new file mode 100644
index 0000000000..c62dbc0306
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simplewidgetmapper/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(simplewidgetmapper LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/simplewidgetmapper")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(simplewidgetmapper
+ main.cpp
+ window.cpp window.h
+)
+
+set_target_properties(simplewidgetmapper PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(simplewidgetmapper PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS simplewidgetmapper
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/itemviews/simplewidgetmapper/main.cpp b/tests/manual/examples/widgets/itemviews/simplewidgetmapper/main.cpp
new file mode 100644
index 0000000000..2709c948f9
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simplewidgetmapper/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "window.h"
+
+#include <QApplication>
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+ Window window;
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/itemviews/simplewidgetmapper/simplewidgetmapper.pro b/tests/manual/examples/widgets/itemviews/simplewidgetmapper/simplewidgetmapper.pro
new file mode 100644
index 0000000000..f86a16bd3f
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simplewidgetmapper/simplewidgetmapper.pro
@@ -0,0 +1,10 @@
+QT += widgets
+requires(qtConfig(datawidgetmapper))
+
+HEADERS = window.h
+SOURCES = main.cpp \
+ window.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/simplewidgetmapper
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/itemviews/simplewidgetmapper/window.cpp b/tests/manual/examples/widgets/itemviews/simplewidgetmapper/window.cpp
new file mode 100644
index 0000000000..f7ef05dbd5
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simplewidgetmapper/window.cpp
@@ -0,0 +1,93 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "window.h"
+
+#include <QtWidgets>
+
+//! [Set up widgets]
+Window::Window(QWidget *parent)
+ : QWidget(parent)
+{
+ setupModel();
+
+ nameLabel = new QLabel(tr("Na&me:"));
+ nameEdit = new QLineEdit();
+ addressLabel = new QLabel(tr("&Address:"));
+ addressEdit = new QTextEdit();
+ ageLabel = new QLabel(tr("A&ge (in years):"));
+ ageSpinBox = new QSpinBox();
+ nextButton = new QPushButton(tr("&Next"));
+ previousButton = new QPushButton(tr("&Previous"));
+
+ nameLabel->setBuddy(nameEdit);
+ addressLabel->setBuddy(addressEdit);
+ ageLabel->setBuddy(ageSpinBox);
+//! [Set up widgets]
+
+//! [Set up the mapper]
+ mapper = new QDataWidgetMapper(this);
+ mapper->setModel(model);
+ mapper->addMapping(nameEdit, 0);
+ mapper->addMapping(addressEdit, 1);
+ mapper->addMapping(ageSpinBox, 2);
+
+ connect(previousButton, &QAbstractButton::clicked, mapper, &QDataWidgetMapper::toPrevious);
+ connect(nextButton, &QAbstractButton::clicked, mapper, &QDataWidgetMapper::toNext);
+ connect(mapper, &QDataWidgetMapper::currentIndexChanged, this, &Window::updateButtons);
+//! [Set up the mapper]
+
+//! [Set up the layout]
+ QGridLayout *layout = new QGridLayout();
+ layout->addWidget(nameLabel, 0, 0, 1, 1);
+ layout->addWidget(nameEdit, 0, 1, 1, 1);
+ layout->addWidget(previousButton, 0, 2, 1, 1);
+ layout->addWidget(addressLabel, 1, 0, 1, 1);
+ layout->addWidget(addressEdit, 1, 1, 2, 1);
+ layout->addWidget(nextButton, 1, 2, 1, 1);
+ layout->addWidget(ageLabel, 3, 0, 1, 1);
+ layout->addWidget(ageSpinBox, 3, 1, 1, 1);
+ setLayout(layout);
+
+ setWindowTitle(tr("Simple Widget Mapper"));
+ mapper->toFirst();
+}
+//! [Set up the layout]
+
+//! [Set up the model]
+void Window::setupModel()
+{
+ model = new QStandardItemModel(5, 3, this);
+
+ QStringList names;
+ names << "Alice" << "Bob" << "Carol" << "Donald" << "Emma";
+
+ QStringList addresses;
+ addresses << "<qt>123 Main Street<br/>Market Town</qt>"
+ << "<qt>PO Box 32<br/>Mail Handling Service"
+ "<br/>Service City</qt>"
+ << "<qt>The Lighthouse<br/>Remote Island</qt>"
+ << "<qt>47338 Park Avenue<br/>Big City</qt>"
+ << "<qt>Research Station<br/>Base Camp<br/>Big Mountain</qt>";
+
+ QStringList ages;
+ ages << "20" << "31" << "32" << "19" << "26";
+
+ for (int row = 0; row < 5; ++row) {
+ QStandardItem *item = new QStandardItem(names[row]);
+ model->setItem(row, 0, item);
+ item = new QStandardItem(addresses[row]);
+ model->setItem(row, 1, item);
+ item = new QStandardItem(ages[row]);
+ model->setItem(row, 2, item);
+ }
+}
+//! [Set up the model]
+
+//! [Slot for updating the buttons]
+void Window::updateButtons(int row)
+{
+ previousButton->setEnabled(row > 0);
+ nextButton->setEnabled(row < model->rowCount() - 1);
+}
+//! [Slot for updating the buttons]
diff --git a/tests/manual/examples/widgets/itemviews/simplewidgetmapper/window.h b/tests/manual/examples/widgets/itemviews/simplewidgetmapper/window.h
new file mode 100644
index 0000000000..1502c00df1
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/simplewidgetmapper/window.h
@@ -0,0 +1,47 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QDataWidgetMapper;
+class QLabel;
+class QLineEdit;
+class QPushButton;
+class QSpinBox;
+class QStandardItemModel;
+class QTextEdit;
+QT_END_NAMESPACE
+
+//! [Window definition]
+class Window : public QWidget
+{
+ Q_OBJECT
+
+public:
+ Window(QWidget *parent = nullptr);
+
+private slots:
+ void updateButtons(int row);
+
+private:
+ void setupModel();
+
+ QLabel *nameLabel;
+ QLabel *addressLabel;
+ QLabel *ageLabel;
+ QLineEdit *nameEdit;
+ QTextEdit *addressEdit;
+ QSpinBox *ageSpinBox;
+ QPushButton *nextButton;
+ QPushButton *previousButton;
+
+ QStandardItemModel *model;
+ QDataWidgetMapper *mapper;
+};
+//! [Window definition]
+
+#endif // WINDOW_H
diff --git a/tests/manual/examples/widgets/itemviews/storageview/CMakeLists.txt b/tests/manual/examples/widgets/itemviews/storageview/CMakeLists.txt
new file mode 100644
index 0000000000..36c37d037f
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/storageview/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(storageview LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/storageview")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(storageview
+ main.cpp
+ storagemodel.cpp storagemodel.h
+)
+
+set_target_properties(storageview PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(storageview PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS storageview
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/itemviews/storageview/main.cpp b/tests/manual/examples/widgets/itemviews/storageview/main.cpp
new file mode 100644
index 0000000000..3bd5392736
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/storageview/main.cpp
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// Copyright (C) 2016 Ivan Komissarov
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QShortcut>
+#include <QTreeView>
+
+#include "storagemodel.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+
+ QTreeView view;
+ view.resize(640, 480);
+ view.setWindowTitle("Storage View");
+ view.setSelectionBehavior(QAbstractItemView::SelectRows);
+
+ StorageModel *model = new StorageModel(&view);
+ model->refresh();
+ QShortcut *refreshShortcut = new QShortcut(QKeySequence::Refresh, &view);
+ QObject::connect(refreshShortcut, &QShortcut::activated, model, &StorageModel::refresh);
+ view.setModel(model);
+
+ int columnCount = view.model()->columnCount();
+ for (int c = 0; c < columnCount; ++c)
+ view.resizeColumnToContents(c);
+ view.show();
+
+ return a.exec();
+}
diff --git a/tests/manual/examples/widgets/itemviews/storageview/storagemodel.cpp b/tests/manual/examples/widgets/itemviews/storageview/storagemodel.cpp
new file mode 100644
index 0000000000..194f8723f6
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/storageview/storagemodel.cpp
@@ -0,0 +1,164 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// Copyright (C) 2016 Ivan Komissarov
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "storagemodel.h"
+
+#include <QDir>
+#include <QLocale>
+
+void StorageModel::refresh()
+{
+ beginResetModel();
+ m_volumes = QStorageInfo::mountedVolumes();
+ std::sort(m_volumes.begin(), m_volumes.end(),
+ [](const QStorageInfo &st1, const QStorageInfo &st2) {
+ static const QString rootSortString = QStringLiteral(" ");
+ return (st1.isRoot() ? rootSortString : st1.rootPath())
+ < (st2.isRoot() ? rootSortString : st2.rootPath());
+ });
+ endResetModel();
+}
+
+int StorageModel::columnCount(const QModelIndex &/*parent*/) const
+{
+ return ColumnCount;
+}
+
+int StorageModel::rowCount(const QModelIndex &parent) const
+{
+ if (parent.isValid())
+ return 0;
+ return m_volumes.count();
+}
+
+Qt::ItemFlags StorageModel::flags(const QModelIndex &index) const
+{
+ Qt::ItemFlags result = QAbstractTableModel::flags(index);
+ switch (index.column()) {
+ case ColumnAvailable:
+ case ColumnIsReady:
+ case ColumnIsReadOnly:
+ case ColumnIsValid:
+ result |= Qt::ItemIsUserCheckable;
+ break;
+ default:
+ break;
+ }
+ return result;
+}
+
+QVariant StorageModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+
+ if (role == Qt::DisplayRole) {
+ const QStorageInfo &volume = m_volumes.at(index.row());
+ switch (index.column()) {
+ case ColumnRootPath:
+ return QDir::toNativeSeparators(volume.rootPath());
+ case ColumnName:
+ return volume.name();
+ case ColumnDevice:
+ return volume.device();
+ case ColumnFileSystemName:
+ return volume.fileSystemType();
+ case ColumnTotal:
+ return QLocale().formattedDataSize(volume.bytesTotal());
+ case ColumnFree:
+ return QLocale().formattedDataSize(volume.bytesFree());
+ case ColumnAvailable:
+ return QLocale().formattedDataSize(volume.bytesAvailable());
+ default:
+ break;
+ }
+ } else if (role == Qt::CheckStateRole) {
+ const QStorageInfo &volume = m_volumes.at(index.row());
+ switch (index.column()) {
+ case ColumnIsReady:
+ return volume.isReady();
+ case ColumnIsReadOnly:
+ return volume.isReadOnly();
+ case ColumnIsValid:
+ return volume.isValid();
+ default:
+ break;
+ }
+ } else if (role == Qt::TextAlignmentRole) {
+ switch (index.column()) {
+ case ColumnTotal:
+ case ColumnFree:
+ case ColumnAvailable:
+ return Qt::AlignTrailing;
+ default:
+ break;
+ }
+ return Qt::AlignLeading;
+ } else if (role == Qt::ToolTipRole) {
+ QLocale locale;
+ const QStorageInfo &volume = m_volumes.at(index.row());
+ return tr("Root path : %1\n"
+ "Name: %2\n"
+ "Display Name: %3\n"
+ "Device: %4\n"
+ "FileSystem: %5\n"
+ "Total size: %6\n"
+ "Free size: %7\n"
+ "Available size: %8\n"
+ "Is Ready: %9\n"
+ "Is Read-only: %10\n"
+ "Is Valid: %11\n"
+ "Is Root: %12"
+ ).
+ arg(QDir::toNativeSeparators(volume.rootPath())).
+ arg(volume.name()).
+ arg(volume.displayName()).
+ arg(QString::fromUtf8(volume.device())).
+ arg(QString::fromUtf8(volume.fileSystemType())).
+ arg(locale.formattedDataSize(volume.bytesTotal())).
+ arg(locale.formattedDataSize(volume.bytesFree())).
+ arg(locale.formattedDataSize(volume.bytesAvailable())).
+ arg(volume.isReady() ? tr("true") : tr("false")).
+ arg(volume.isReadOnly() ? tr("true") : tr("false")).
+ arg(volume.isValid() ? tr("true") : tr("false")).
+ arg(volume.isRoot() ? tr("true") : tr("false"));
+ }
+ return QVariant();
+}
+
+QVariant StorageModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ if (orientation != Qt::Horizontal)
+ return QVariant();
+
+ if (role != Qt::DisplayRole)
+ return QVariant();
+
+ switch (section) {
+ case ColumnRootPath:
+ return tr("Root Path");
+ case ColumnName:
+ return tr("Volume Name");
+ case ColumnDevice:
+ return tr("Device");
+ case ColumnFileSystemName:
+ return tr("File System");
+ case ColumnTotal:
+ return tr("Total");
+ case ColumnFree:
+ return tr("Free");
+ case ColumnAvailable:
+ return tr("Available");
+ case ColumnIsReady:
+ return tr("Ready");
+ case ColumnIsReadOnly:
+ return tr("Read-only");
+ case ColumnIsValid:
+ return tr("Valid");
+ default:
+ break;
+ }
+
+ return QVariant();
+}
diff --git a/tests/manual/examples/widgets/itemviews/storageview/storagemodel.h b/tests/manual/examples/widgets/itemviews/storageview/storagemodel.h
new file mode 100644
index 0000000000..f8cc3289c8
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/storageview/storagemodel.h
@@ -0,0 +1,46 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// Copyright (C) 2016 Ivan Komissarov
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef STORAGEMODEL_H
+#define STORAGEMODEL_H
+
+#include <QAbstractTableModel>
+#include <QStorageInfo>
+
+class StorageModel : public QAbstractTableModel
+{
+ Q_OBJECT
+ Q_DISABLE_COPY(StorageModel)
+public:
+ enum Column {
+ ColumnRootPath = 0,
+ ColumnName,
+ ColumnDevice,
+ ColumnFileSystemName,
+ ColumnTotal,
+ ColumnFree,
+ ColumnAvailable,
+ ColumnIsReady,
+ ColumnIsReadOnly,
+ ColumnIsValid,
+ ColumnCount
+ };
+
+ using QAbstractTableModel::QAbstractTableModel;
+
+ int columnCount(const QModelIndex &parent) const override;
+ int rowCount(const QModelIndex &parent) const override;
+
+ QVariant data(const QModelIndex &index, int role) const override;
+ Qt::ItemFlags flags(const QModelIndex &index) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
+
+public slots:
+ void refresh();
+
+private:
+ QList<QStorageInfo> m_volumes;
+};
+
+#endif // STORAGEMODEL_H
diff --git a/tests/manual/examples/widgets/itemviews/storageview/storageview.pro b/tests/manual/examples/widgets/itemviews/storageview/storageview.pro
new file mode 100644
index 0000000000..2fdb78e7b8
--- /dev/null
+++ b/tests/manual/examples/widgets/itemviews/storageview/storageview.pro
@@ -0,0 +1,12 @@
+QT += core gui widgets
+requires(qtConfig(treeview))
+TARGET = storageview
+TEMPLATE = app
+SOURCES += storagemodel.cpp \
+ main.cpp
+HEADERS += \
+ storagemodel.h
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/storageview
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/layouts/borderlayout/CMakeLists.txt b/tests/manual/examples/widgets/layouts/borderlayout/CMakeLists.txt
new file mode 100644
index 0000000000..d217e825d5
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/borderlayout/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(borderlayout LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/layouts/borderlayout")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(borderlayout
+ borderlayout.cpp borderlayout.h
+ main.cpp
+ window.cpp window.h
+)
+
+set_target_properties(borderlayout PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(borderlayout PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS borderlayout
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/layouts/borderlayout/borderlayout.cpp b/tests/manual/examples/widgets/layouts/borderlayout/borderlayout.cpp
new file mode 100644
index 0000000000..4dad24da0d
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/borderlayout/borderlayout.cpp
@@ -0,0 +1,171 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "borderlayout.h"
+
+BorderLayout::BorderLayout(QWidget *parent, const QMargins &margins, int spacing)
+ : QLayout(parent)
+{
+ setContentsMargins(margins);
+ setSpacing(spacing);
+}
+
+BorderLayout::BorderLayout(int spacing)
+{
+ setSpacing(spacing);
+}
+
+
+BorderLayout::~BorderLayout()
+{
+ QLayoutItem *l;
+ while ((l = takeAt(0)))
+ delete l;
+}
+
+void BorderLayout::addItem(QLayoutItem *item)
+{
+ add(item, West);
+}
+
+void BorderLayout::addWidget(QWidget *widget, Position position)
+{
+ add(new QWidgetItem(widget), position);
+}
+
+Qt::Orientations BorderLayout::expandingDirections() const
+{
+ return Qt::Horizontal | Qt::Vertical;
+}
+
+bool BorderLayout::hasHeightForWidth() const
+{
+ return false;
+}
+
+int BorderLayout::count() const
+{
+ return list.size();
+}
+
+QLayoutItem *BorderLayout::itemAt(int index) const
+{
+ ItemWrapper *wrapper = list.value(index);
+ return wrapper ? wrapper->item : nullptr;
+}
+
+QSize BorderLayout::minimumSize() const
+{
+ return calculateSize(MinimumSize);
+}
+
+void BorderLayout::setGeometry(const QRect &rect)
+{
+ ItemWrapper *center = nullptr;
+ int eastWidth = 0;
+ int westWidth = 0;
+ int northHeight = 0;
+ int southHeight = 0;
+ int centerHeight = 0;
+ int i;
+
+ QLayout::setGeometry(rect);
+
+ for (i = 0; i < list.size(); ++i) {
+ ItemWrapper *wrapper = list.at(i);
+ QLayoutItem *item = wrapper->item;
+ Position position = wrapper->position;
+
+ if (position == North) {
+ item->setGeometry(QRect(rect.x(), northHeight, rect.width(),
+ item->sizeHint().height()));
+
+ northHeight += item->geometry().height() + spacing();
+ } else if (position == South) {
+ item->setGeometry(QRect(item->geometry().x(),
+ item->geometry().y(), rect.width(),
+ item->sizeHint().height()));
+
+ southHeight += item->geometry().height() + spacing();
+
+ item->setGeometry(QRect(rect.x(),
+ rect.y() + rect.height() - southHeight + spacing(),
+ item->geometry().width(),
+ item->geometry().height()));
+ } else if (position == Center) {
+ center = wrapper;
+ }
+ }
+
+ centerHeight = rect.height() - northHeight - southHeight;
+
+ for (i = 0; i < list.size(); ++i) {
+ ItemWrapper *wrapper = list.at(i);
+ QLayoutItem *item = wrapper->item;
+ Position position = wrapper->position;
+
+ if (position == West) {
+ item->setGeometry(QRect(rect.x() + westWidth, northHeight,
+ item->sizeHint().width(), centerHeight));
+
+ westWidth += item->geometry().width() + spacing();
+ } else if (position == East) {
+ item->setGeometry(QRect(item->geometry().x(), item->geometry().y(),
+ item->sizeHint().width(), centerHeight));
+
+ eastWidth += item->geometry().width() + spacing();
+
+ item->setGeometry(QRect(
+ rect.x() + rect.width() - eastWidth + spacing(),
+ northHeight, item->geometry().width(),
+ item->geometry().height()));
+ }
+ }
+
+ if (center)
+ center->item->setGeometry(QRect(westWidth, northHeight,
+ rect.width() - eastWidth - westWidth,
+ centerHeight));
+}
+
+QSize BorderLayout::sizeHint() const
+{
+ return calculateSize(SizeHint);
+}
+
+QLayoutItem *BorderLayout::takeAt(int index)
+{
+ if (index >= 0 && index < list.size()) {
+ ItemWrapper *layoutStruct = list.takeAt(index);
+ return layoutStruct->item;
+ }
+ return nullptr;
+}
+
+void BorderLayout::add(QLayoutItem *item, Position position)
+{
+ list.append(new ItemWrapper(item, position));
+}
+
+QSize BorderLayout::calculateSize(SizeType sizeType) const
+{
+ QSize totalSize;
+
+ for (int i = 0; i < list.size(); ++i) {
+ ItemWrapper *wrapper = list.at(i);
+ Position position = wrapper->position;
+ QSize itemSize;
+
+ if (sizeType == MinimumSize)
+ itemSize = wrapper->item->minimumSize();
+ else // (sizeType == SizeHint)
+ itemSize = wrapper->item->sizeHint();
+
+ if (position == North || position == South || position == Center)
+ totalSize.rheight() += itemSize.height();
+
+ if (position == West || position == East || position == Center)
+ totalSize.rwidth() += itemSize.width();
+ }
+ return totalSize;
+}
diff --git a/tests/manual/examples/widgets/layouts/borderlayout/borderlayout.h b/tests/manual/examples/widgets/layouts/borderlayout/borderlayout.h
new file mode 100644
index 0000000000..c1d3ae7204
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/borderlayout/borderlayout.h
@@ -0,0 +1,50 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BORDERLAYOUT_H
+#define BORDERLAYOUT_H
+
+#include <QLayout>
+#include <QRect>
+
+class BorderLayout : public QLayout
+{
+public:
+ enum Position { West, North, South, East, Center };
+
+ explicit BorderLayout(QWidget *parent, const QMargins &margins = QMargins(), int spacing = -1);
+ BorderLayout(int spacing = -1);
+ ~BorderLayout();
+
+ void addItem(QLayoutItem *item) override;
+ void addWidget(QWidget *widget, Position position);
+ Qt::Orientations expandingDirections() const override;
+ bool hasHeightForWidth() const override;
+ int count() const override;
+ QLayoutItem *itemAt(int index) const override;
+ QSize minimumSize() const override;
+ void setGeometry(const QRect &rect) override;
+ QSize sizeHint() const override;
+ QLayoutItem *takeAt(int index) override;
+
+ void add(QLayoutItem *item, Position position);
+
+private:
+ struct ItemWrapper
+ {
+ ItemWrapper(QLayoutItem *i, Position p) {
+ item = i;
+ position = p;
+ }
+
+ QLayoutItem *item;
+ Position position;
+ };
+
+ enum SizeType { MinimumSize, SizeHint };
+ QSize calculateSize(SizeType sizeType) const;
+
+ QList<ItemWrapper *> list;
+};
+
+#endif // BORDERLAYOUT_H
diff --git a/tests/manual/examples/widgets/layouts/borderlayout/borderlayout.pro b/tests/manual/examples/widgets/layouts/borderlayout/borderlayout.pro
new file mode 100644
index 0000000000..53c9647bd7
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/borderlayout/borderlayout.pro
@@ -0,0 +1,11 @@
+QT += widgets
+
+HEADERS = borderlayout.h \
+ window.h
+SOURCES = borderlayout.cpp \
+ main.cpp \
+ window.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/layouts/borderlayout
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/layouts/borderlayout/main.cpp b/tests/manual/examples/widgets/layouts/borderlayout/main.cpp
new file mode 100644
index 0000000000..27409403a5
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/borderlayout/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "window.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ Window window;
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/layouts/borderlayout/window.cpp b/tests/manual/examples/widgets/layouts/borderlayout/window.cpp
new file mode 100644
index 0000000000..ea3b6a6fe8
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/borderlayout/window.cpp
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "borderlayout.h"
+#include "window.h"
+#include <QTextBrowser>
+#include <QLabel>
+
+Window::Window()
+{
+ QTextBrowser *centralWidget = new QTextBrowser;
+ centralWidget->setPlainText(tr("Central widget"));
+
+ BorderLayout *layout = new BorderLayout;
+ layout->addWidget(centralWidget, BorderLayout::Center);
+ layout->addWidget(createLabel("North"), BorderLayout::North);
+ layout->addWidget(createLabel("West"), BorderLayout::West);
+ layout->addWidget(createLabel("East 1"), BorderLayout::East);
+ layout->addWidget(createLabel("East 2") , BorderLayout::East);
+ layout->addWidget(createLabel("South"), BorderLayout::South);
+ setLayout(layout);
+
+ setWindowTitle(tr("Border Layout"));
+}
+
+QLabel *Window::createLabel(const QString &text)
+{
+ QLabel *label = new QLabel(text);
+ label->setFrameStyle(QFrame::Box | QFrame::Raised);
+ return label;
+}
diff --git a/tests/manual/examples/widgets/layouts/borderlayout/window.h b/tests/manual/examples/widgets/layouts/borderlayout/window.h
new file mode 100644
index 0000000000..9e97d0e8fb
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/borderlayout/window.h
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QLabel;
+QT_END_NAMESPACE
+
+class Window : public QWidget
+{
+ Q_OBJECT
+
+public:
+ Window();
+
+private:
+ QLabel *createLabel(const QString &text);
+};
+
+#endif // WINDOW_H
diff --git a/tests/manual/examples/widgets/layouts/dynamiclayouts/CMakeLists.txt b/tests/manual/examples/widgets/layouts/dynamiclayouts/CMakeLists.txt
new file mode 100644
index 0000000000..26978a901d
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/dynamiclayouts/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(dynamiclayouts LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/layouts/dynamiclayouts")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(dynamiclayouts
+ dialog.cpp dialog.h
+ main.cpp
+)
+
+set_target_properties(dynamiclayouts PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(dynamiclayouts PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS dynamiclayouts
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/layouts/dynamiclayouts/dialog.cpp b/tests/manual/examples/widgets/layouts/dynamiclayouts/dialog.cpp
new file mode 100644
index 0000000000..28b4fc2f7f
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/dynamiclayouts/dialog.cpp
@@ -0,0 +1,136 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+
+#include "dialog.h"
+
+Dialog::Dialog(QWidget *parent)
+ : QDialog(parent)
+{
+ createRotatableGroupBox();
+ createOptionsGroupBox();
+ createButtonBox();
+
+ mainLayout = new QGridLayout;
+ mainLayout->addWidget(rotatableGroupBox, 0, 0);
+ mainLayout->addWidget(optionsGroupBox, 1, 0);
+ mainLayout->addWidget(buttonBox, 2, 0);
+ setLayout(mainLayout);
+
+ mainLayout->setSizeConstraint(QLayout::SetMinimumSize);
+
+ setWindowTitle(tr("Dynamic Layouts"));
+}
+
+void Dialog::buttonsOrientationChanged(int index)
+{
+ mainLayout->setSizeConstraint(QLayout::SetNoConstraint);
+ setMinimumSize(0, 0);
+
+ Qt::Orientation orientation = Qt::Orientation(
+ buttonsOrientationComboBox->itemData(index).toInt());
+
+ if (orientation == buttonBox->orientation())
+ return;
+
+ mainLayout->removeWidget(buttonBox);
+
+ int spacing = mainLayout->spacing();
+
+ QSize oldSizeHint = buttonBox->sizeHint() + QSize(spacing, spacing);
+ buttonBox->setOrientation(orientation);
+ QSize newSizeHint = buttonBox->sizeHint() + QSize(spacing, spacing);
+
+ if (orientation == Qt::Horizontal) {
+ mainLayout->addWidget(buttonBox, 2, 0);
+ resize(size() + QSize(-oldSizeHint.width(), newSizeHint.height()));
+ } else {
+ mainLayout->addWidget(buttonBox, 0, 3, 2, 1);
+ resize(size() + QSize(newSizeHint.width(), -oldSizeHint.height()));
+ }
+
+ mainLayout->setSizeConstraint(QLayout::SetDefaultConstraint);
+}
+
+void Dialog::rotateWidgets()
+{
+ Q_ASSERT(rotatableWidgets.count() % 2 == 0);
+
+ for (QWidget *widget : std::as_const(rotatableWidgets))
+ rotatableLayout->removeWidget(widget);
+
+ rotatableWidgets.enqueue(rotatableWidgets.dequeue());
+
+ const int n = rotatableWidgets.count();
+ for (int i = 0; i < n / 2; ++i) {
+ rotatableLayout->addWidget(rotatableWidgets[n - i - 1], 0, i);
+ rotatableLayout->addWidget(rotatableWidgets[i], 1, i);
+ }
+}
+
+void Dialog::help()
+{
+ QMessageBox::information(this, tr("Dynamic Layouts Help"),
+ tr("This example shows how to change layouts "
+ "dynamically."));
+}
+
+void Dialog::createRotatableGroupBox()
+{
+ rotatableGroupBox = new QGroupBox(tr("Rotatable Widgets"));
+
+ rotatableWidgets.enqueue(new QSpinBox);
+ rotatableWidgets.enqueue(new QSlider);
+ rotatableWidgets.enqueue(new QDial);
+ rotatableWidgets.enqueue(new QProgressBar);
+
+ int n = rotatableWidgets.count();
+ for (int i = 0; i < n; ++i) {
+ connect(rotatableWidgets[i], SIGNAL(valueChanged(int)),
+ rotatableWidgets[(i + 1) % n], SLOT(setValue(int)));
+ }
+
+ rotatableLayout = new QGridLayout;
+ rotatableGroupBox->setLayout(rotatableLayout);
+
+ rotateWidgets();
+}
+
+void Dialog::createOptionsGroupBox()
+{
+ optionsGroupBox = new QGroupBox(tr("Options"));
+
+ buttonsOrientationLabel = new QLabel(tr("Orientation of buttons:"));
+
+ buttonsOrientationComboBox = new QComboBox;
+ buttonsOrientationComboBox->addItem(tr("Horizontal"), Qt::Horizontal);
+ buttonsOrientationComboBox->addItem(tr("Vertical"), Qt::Vertical);
+
+ connect(buttonsOrientationComboBox,
+ &QComboBox::currentIndexChanged,
+ this,
+ &Dialog::buttonsOrientationChanged);
+
+ optionsLayout = new QGridLayout;
+ optionsLayout->addWidget(buttonsOrientationLabel, 0, 0);
+ optionsLayout->addWidget(buttonsOrientationComboBox, 0, 1);
+ optionsLayout->setColumnStretch(2, 1);
+ optionsGroupBox->setLayout(optionsLayout);
+}
+
+void Dialog::createButtonBox()
+{
+ buttonBox = new QDialogButtonBox;
+
+ closeButton = buttonBox->addButton(QDialogButtonBox::Close);
+ helpButton = buttonBox->addButton(QDialogButtonBox::Help);
+ rotateWidgetsButton = buttonBox->addButton(tr("Rotate &Widgets"),
+ QDialogButtonBox::ActionRole);
+
+ connect(rotateWidgetsButton, &QPushButton::clicked, this, &Dialog::rotateWidgets);
+ connect(closeButton, &QPushButton::clicked, this, &Dialog::close);
+ connect(helpButton, &QPushButton::clicked, this, &Dialog::help);
+}
+
+
diff --git a/tests/manual/examples/widgets/layouts/dynamiclayouts/dialog.h b/tests/manual/examples/widgets/layouts/dynamiclayouts/dialog.h
new file mode 100644
index 0000000000..89424cee8a
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/dynamiclayouts/dialog.h
@@ -0,0 +1,53 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef DIALOG_H
+#define DIALOG_H
+
+#include <QDialog>
+#include <QQueue>
+
+QT_BEGIN_NAMESPACE
+class QComboBox;
+class QDialogButtonBox;
+class QGridLayout;
+class QGroupBox;
+class QLabel;
+class QPushButton;
+QT_END_NAMESPACE
+
+class Dialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ Dialog(QWidget *parent = nullptr);
+
+private slots:
+ void buttonsOrientationChanged(int index);
+ void rotateWidgets();
+ void help();
+
+private:
+ void createRotatableGroupBox();
+ void createOptionsGroupBox();
+ void createButtonBox();
+
+ QGroupBox *rotatableGroupBox;
+ QQueue<QWidget *> rotatableWidgets;
+
+ QGroupBox *optionsGroupBox;
+ QLabel *buttonsOrientationLabel;
+ QComboBox *buttonsOrientationComboBox;
+
+ QDialogButtonBox *buttonBox;
+ QPushButton *closeButton;
+ QPushButton *helpButton;
+ QPushButton *rotateWidgetsButton;
+
+ QGridLayout *mainLayout;
+ QGridLayout *rotatableLayout;
+ QGridLayout *optionsLayout;
+};
+
+#endif // DIALOG_H
diff --git a/tests/manual/examples/widgets/layouts/dynamiclayouts/dynamiclayouts.pro b/tests/manual/examples/widgets/layouts/dynamiclayouts/dynamiclayouts.pro
new file mode 100644
index 0000000000..dcd4288698
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/dynamiclayouts/dynamiclayouts.pro
@@ -0,0 +1,10 @@
+QT += widgets
+requires(qtConfig(combobox))
+
+HEADERS = dialog.h
+SOURCES = dialog.cpp \
+ main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/layouts/dynamiclayouts
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/layouts/dynamiclayouts/main.cpp b/tests/manual/examples/widgets/layouts/dynamiclayouts/main.cpp
new file mode 100644
index 0000000000..865e0d1579
--- /dev/null
+++ b/tests/manual/examples/widgets/layouts/dynamiclayouts/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "dialog.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ Dialog dialog;
+ dialog.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/mainwindows/dockwidgets/CMakeLists.txt b/tests/manual/examples/widgets/mainwindows/dockwidgets/CMakeLists.txt
new file mode 100644
index 0000000000..fd8444ae65
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/dockwidgets/CMakeLists.txt
@@ -0,0 +1,59 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(dockwidgets LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/mainwindows/dockwidgets")
+
+find_package(Qt6
+ REQUIRED COMPONENTS Core Gui Widgets
+ OPTIONAL_COMPONENTS PrintSupport
+)
+
+qt_standard_project_setup()
+
+qt_add_executable(dockwidgets
+ main.cpp
+ mainwindow.cpp mainwindow.h
+)
+
+set_target_properties(dockwidgets PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(dockwidgets PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+if (TARGET Qt6::PrintSupport)
+ target_link_libraries(dockwidgets PRIVATE Qt6::PrintSupport)
+endif()
+
+# Resources:
+set(dockwidgets_resource_files
+ "images/new.png"
+ "images/print.png"
+ "images/save.png"
+ "images/undo.png"
+)
+
+qt_add_resources(dockwidgets "dockwidgets"
+ PREFIX
+ "/"
+ FILES
+ ${dockwidgets_resource_files}
+)
+
+install(TARGETS dockwidgets
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/mainwindows/dockwidgets/dockwidgets.pro b/tests/manual/examples/widgets/mainwindows/dockwidgets/dockwidgets.pro
new file mode 100644
index 0000000000..3acded5ed3
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/dockwidgets/dockwidgets.pro
@@ -0,0 +1,12 @@
+QT += widgets
+requires(qtConfig(listwidget))
+qtHaveModule(printsupport): QT += printsupport
+
+HEADERS = mainwindow.h
+SOURCES = main.cpp \
+ mainwindow.cpp
+RESOURCES = dockwidgets.qrc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/mainwindows/dockwidgets
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/mainwindows/dockwidgets/dockwidgets.qrc b/tests/manual/examples/widgets/mainwindows/dockwidgets/dockwidgets.qrc
new file mode 100644
index 0000000000..968feac7ea
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/dockwidgets/dockwidgets.qrc
@@ -0,0 +1,8 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>images/new.png</file>
+ <file>images/print.png</file>
+ <file>images/save.png</file>
+ <file>images/undo.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/mainwindows/dockwidgets/images/new.png b/tests/manual/examples/widgets/mainwindows/dockwidgets/images/new.png
new file mode 100644
index 0000000000..dd795cfffc
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/dockwidgets/images/new.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/dockwidgets/images/print.png b/tests/manual/examples/widgets/mainwindows/dockwidgets/images/print.png
new file mode 100644
index 0000000000..2afb769ee2
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/dockwidgets/images/print.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/dockwidgets/images/save.png b/tests/manual/examples/widgets/mainwindows/dockwidgets/images/save.png
new file mode 100644
index 0000000000..46eac82ad1
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/dockwidgets/images/save.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/dockwidgets/images/undo.png b/tests/manual/examples/widgets/mainwindows/dockwidgets/images/undo.png
new file mode 100644
index 0000000000..eee23d24a3
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/dockwidgets/images/undo.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/dockwidgets/main.cpp b/tests/manual/examples/widgets/mainwindows/dockwidgets/main.cpp
new file mode 100644
index 0000000000..431d7dae98
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/dockwidgets/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow mainWin;
+ mainWin.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/mainwindows/dockwidgets/mainwindow.cpp b/tests/manual/examples/widgets/mainwindows/dockwidgets/mainwindow.cpp
new file mode 100644
index 0000000000..3493a66a67
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/dockwidgets/mainwindow.cpp
@@ -0,0 +1,298 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+//! [0]
+#include <QtWidgets>
+#if defined(QT_PRINTSUPPORT_LIB)
+#include <QtPrintSupport/qtprintsupportglobal.h>
+#if QT_CONFIG(printdialog)
+#include <QtPrintSupport>
+#endif
+#endif
+
+#include "mainwindow.h"
+//! [0]
+
+//! [1]
+MainWindow::MainWindow()
+ : textEdit(new QTextEdit)
+{
+ setCentralWidget(textEdit);
+
+ createActions();
+ createStatusBar();
+ createDockWindows();
+
+ setWindowTitle(tr("Dock Widgets"));
+
+ newLetter();
+ setUnifiedTitleAndToolBarOnMac(true);
+}
+//! [1]
+
+//! [2]
+void MainWindow::newLetter()
+{
+ textEdit->clear();
+
+ QTextCursor cursor(textEdit->textCursor());
+ cursor.movePosition(QTextCursor::Start);
+ QTextFrame *topFrame = cursor.currentFrame();
+ QTextFrameFormat topFrameFormat = topFrame->frameFormat();
+ topFrameFormat.setPadding(16);
+ topFrame->setFrameFormat(topFrameFormat);
+
+ QTextCharFormat textFormat;
+ QTextCharFormat boldFormat;
+ boldFormat.setFontWeight(QFont::Bold);
+ QTextCharFormat italicFormat;
+ italicFormat.setFontItalic(true);
+
+ QTextTableFormat tableFormat;
+ tableFormat.setBorder(1);
+ tableFormat.setCellPadding(16);
+ tableFormat.setAlignment(Qt::AlignRight);
+ cursor.insertTable(1, 1, tableFormat);
+ cursor.insertText("The Firm", boldFormat);
+ cursor.insertBlock();
+ cursor.insertText("321 City Street", textFormat);
+ cursor.insertBlock();
+ cursor.insertText("Industry Park");
+ cursor.insertBlock();
+ cursor.insertText("Some Country");
+ cursor.setPosition(topFrame->lastPosition());
+ cursor.insertText(QDate::currentDate().toString("d MMMM yyyy"), textFormat);
+ cursor.insertBlock();
+ cursor.insertBlock();
+ cursor.insertText("Dear ", textFormat);
+ cursor.insertText("NAME", italicFormat);
+ cursor.insertText(",", textFormat);
+ for (int i = 0; i < 3; ++i)
+ cursor.insertBlock();
+ cursor.insertText(tr("Yours sincerely,"), textFormat);
+ for (int i = 0; i < 3; ++i)
+ cursor.insertBlock();
+ cursor.insertText("The Boss", textFormat);
+ cursor.insertBlock();
+ cursor.insertText("ADDRESS", italicFormat);
+}
+//! [2]
+
+//! [3]
+void MainWindow::print()
+{
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
+ QTextDocument *document = textEdit->document();
+ QPrinter printer;
+
+ QPrintDialog dlg(&printer, this);
+ if (dlg.exec() != QDialog::Accepted) {
+ return;
+ }
+
+ document->print(&printer);
+ statusBar()->showMessage(tr("Ready"), 2000);
+#endif
+}
+//! [3]
+
+//! [4]
+void MainWindow::save()
+{
+ QMimeDatabase mimeDatabase;
+ QString fileName = QFileDialog::getSaveFileName(this,
+ tr("Choose a file name"), ".",
+ mimeDatabase.mimeTypeForName("text/html").filterString());
+ if (fileName.isEmpty())
+ return;
+ QFile file(fileName);
+ if (!file.open(QFile::WriteOnly | QFile::Text)) {
+ QMessageBox::warning(this, tr("Dock Widgets"),
+ tr("Cannot write file %1:\n%2.")
+ .arg(QDir::toNativeSeparators(fileName), file.errorString()));
+ return;
+ }
+
+ QTextStream out(&file);
+ QGuiApplication::setOverrideCursor(Qt::WaitCursor);
+ out << textEdit->toHtml();
+ QGuiApplication::restoreOverrideCursor();
+
+ statusBar()->showMessage(tr("Saved '%1'").arg(fileName), 2000);
+}
+//! [4]
+
+//! [5]
+void MainWindow::undo()
+{
+ QTextDocument *document = textEdit->document();
+ document->undo();
+}
+//! [5]
+
+//! [6]
+void MainWindow::insertCustomer(const QString &customer)
+{
+ if (customer.isEmpty())
+ return;
+ QStringList customerList = customer.split(", ");
+ QTextDocument *document = textEdit->document();
+ QTextCursor cursor = document->find("NAME");
+ if (!cursor.isNull()) {
+ cursor.beginEditBlock();
+ cursor.insertText(customerList.at(0));
+ QTextCursor oldcursor = cursor;
+ cursor = document->find("ADDRESS");
+ if (!cursor.isNull()) {
+ for (int i = 1; i < customerList.size(); ++i) {
+ cursor.insertBlock();
+ cursor.insertText(customerList.at(i));
+ }
+ cursor.endEditBlock();
+ }
+ else
+ oldcursor.endEditBlock();
+ }
+}
+//! [6]
+
+//! [7]
+void MainWindow::addParagraph(const QString &paragraph)
+{
+ if (paragraph.isEmpty())
+ return;
+ QTextDocument *document = textEdit->document();
+ QTextCursor cursor = document->find(tr("Yours sincerely,"));
+ if (cursor.isNull())
+ return;
+ cursor.beginEditBlock();
+ cursor.movePosition(QTextCursor::PreviousBlock, QTextCursor::MoveAnchor, 2);
+ cursor.insertBlock();
+ cursor.insertText(paragraph);
+ cursor.insertBlock();
+ cursor.endEditBlock();
+
+}
+//! [7]
+
+void MainWindow::about()
+{
+ QMessageBox::about(this, tr("About Dock Widgets"),
+ tr("The <b>Dock Widgets</b> example demonstrates how to "
+ "use Qt's dock widgets. You can enter your own text, "
+ "click a customer to add a customer name and "
+ "address, and click standard paragraphs to add them."));
+}
+
+void MainWindow::createActions()
+{
+ QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
+ QToolBar *fileToolBar = addToolBar(tr("File"));
+
+ const QIcon newIcon = QIcon::fromTheme("document-new", QIcon(":/images/new.png"));
+ QAction *newLetterAct = new QAction(newIcon, tr("&New Letter"), this);
+ newLetterAct->setShortcuts(QKeySequence::New);
+ newLetterAct->setStatusTip(tr("Create a new form letter"));
+ connect(newLetterAct, &QAction::triggered, this, &MainWindow::newLetter);
+ fileMenu->addAction(newLetterAct);
+ fileToolBar->addAction(newLetterAct);
+
+ const QIcon saveIcon = QIcon::fromTheme("document-save", QIcon(":/images/save.png"));
+ QAction *saveAct = new QAction(saveIcon, tr("&Save..."), this);
+ saveAct->setShortcuts(QKeySequence::Save);
+ saveAct->setStatusTip(tr("Save the current form letter"));
+ connect(saveAct, &QAction::triggered, this, &MainWindow::save);
+ fileMenu->addAction(saveAct);
+ fileToolBar->addAction(saveAct);
+
+ const QIcon printIcon = QIcon::fromTheme("document-print", QIcon(":/images/print.png"));
+ QAction *printAct = new QAction(printIcon, tr("&Print..."), this);
+ printAct->setShortcuts(QKeySequence::Print);
+ printAct->setStatusTip(tr("Print the current form letter"));
+ connect(printAct, &QAction::triggered, this, &MainWindow::print);
+ fileMenu->addAction(printAct);
+ fileToolBar->addAction(printAct);
+
+ fileMenu->addSeparator();
+
+ QAction *quitAct = fileMenu->addAction(tr("&Quit"), qApp, &QCoreApplication::quit);
+ quitAct->setShortcuts(QKeySequence::Quit);
+ quitAct->setStatusTip(tr("Quit the application"));
+
+ QMenu *editMenu = menuBar()->addMenu(tr("&Edit"));
+ QToolBar *editToolBar = addToolBar(tr("Edit"));
+ const QIcon undoIcon = QIcon::fromTheme("edit-undo", QIcon(":/images/undo.png"));
+ QAction *undoAct = new QAction(undoIcon, tr("&Undo"), this);
+ undoAct->setShortcuts(QKeySequence::Undo);
+ undoAct->setStatusTip(tr("Undo the last editing action"));
+ connect(undoAct, &QAction::triggered, this, &MainWindow::undo);
+ editMenu->addAction(undoAct);
+ editToolBar->addAction(undoAct);
+
+ viewMenu = menuBar()->addMenu(tr("&View"));
+
+ menuBar()->addSeparator();
+
+ QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
+
+ QAction *aboutAct = helpMenu->addAction(tr("&About"), this, &MainWindow::about);
+ aboutAct->setStatusTip(tr("Show the application's About box"));
+
+ QAction *aboutQtAct = helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt);
+ aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));
+}
+
+//! [8]
+void MainWindow::createStatusBar()
+{
+ statusBar()->showMessage(tr("Ready"));
+}
+//! [8]
+
+//! [9]
+void MainWindow::createDockWindows()
+{
+ QDockWidget *dock = new QDockWidget(tr("Customers"), this);
+ dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
+ customerList = new QListWidget(dock);
+ customerList->addItems(QStringList()
+ << "John Doe, Harmony Enterprises, 12 Lakeside, Ambleton"
+ << "Jane Doe, Memorabilia, 23 Watersedge, Beaton"
+ << "Tammy Shea, Tiblanka, 38 Sea Views, Carlton"
+ << "Tim Sheen, Caraba Gifts, 48 Ocean Way, Deal"
+ << "Sol Harvey, Chicos Coffee, 53 New Springs, Eccleston"
+ << "Sally Hobart, Tiroli Tea, 67 Long River, Fedula");
+ dock->setWidget(customerList);
+ addDockWidget(Qt::RightDockWidgetArea, dock);
+ viewMenu->addAction(dock->toggleViewAction());
+
+ dock = new QDockWidget(tr("Paragraphs"), this);
+ paragraphsList = new QListWidget(dock);
+ paragraphsList->addItems(QStringList()
+ << "Thank you for your payment which we have received today."
+ << "Your order has been dispatched and should be with you "
+ "within 28 days."
+ << "We have dispatched those items that were in stock. The "
+ "rest of your order will be dispatched once all the "
+ "remaining items have arrived at our warehouse. No "
+ "additional shipping charges will be made."
+ << "You made a small overpayment (less than $5) which we "
+ "will keep on account for you, or return at your request."
+ << "You made a small underpayment (less than $1), but we have "
+ "sent your order anyway. We'll add this underpayment to "
+ "your next bill."
+ << "Unfortunately you did not send enough money. Please remit "
+ "an additional $. Your order will be dispatched as soon as "
+ "the complete amount has been received."
+ << "You made an overpayment (more than $5). Do you wish to "
+ "buy more items, or should we return the excess to you?");
+ dock->setWidget(paragraphsList);
+ addDockWidget(Qt::RightDockWidgetArea, dock);
+ viewMenu->addAction(dock->toggleViewAction());
+
+ connect(customerList, &QListWidget::currentTextChanged,
+ this, &MainWindow::insertCustomer);
+ connect(paragraphsList, &QListWidget::currentTextChanged,
+ this, &MainWindow::addParagraph);
+}
+//! [9]
diff --git a/tests/manual/examples/widgets/mainwindows/dockwidgets/mainwindow.h b/tests/manual/examples/widgets/mainwindows/dockwidgets/mainwindow.h
new file mode 100644
index 0000000000..67890e8a61
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/dockwidgets/mainwindow.h
@@ -0,0 +1,46 @@
+// 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 QListWidget;
+class QMenu;
+class QTextEdit;
+QT_END_NAMESPACE
+
+//! [0]
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow();
+
+private slots:
+ void newLetter();
+ void save();
+ void print();
+ void undo();
+ void about();
+ void insertCustomer(const QString &customer);
+ void addParagraph(const QString &paragraph);
+
+private:
+ void createActions();
+ void createStatusBar();
+ void createDockWindows();
+
+ QTextEdit *textEdit;
+ QListWidget *customerList;
+ QListWidget *paragraphsList;
+
+ QMenu *viewMenu;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/CMakeLists.txt b/tests/manual/examples/widgets/mainwindows/mainwindow/CMakeLists.txt
new file mode 100644
index 0000000000..bab95a9145
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/CMakeLists.txt
@@ -0,0 +1,54 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(mainwindow LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/mainwindows/mainwindow")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(mainwindow
+ colorswatch.cpp colorswatch.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+ toolbar.cpp toolbar.h
+)
+
+set_target_properties(mainwindow PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(mainwindow PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(mainwindow_resource_files
+ "qt.png"
+ "titlebarCenter.png"
+ "titlebarLeft.png"
+ "titlebarRight.png"
+)
+
+qt_add_resources(mainwindow "mainwindow"
+ PREFIX
+ "/res"
+ FILES
+ ${mainwindow_resource_files}
+)
+
+install(TARGETS mainwindow
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/colorswatch.cpp b/tests/manual/examples/widgets/mainwindows/mainwindow/colorswatch.cpp
new file mode 100644
index 0000000000..678f00054c
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/colorswatch.cpp
@@ -0,0 +1,685 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "colorswatch.h"
+
+#include <QActionGroup>
+#include <QtEvents>
+#include <QFrame>
+#include <QMainWindow>
+#include <QMenu>
+#include <QPainter>
+#include <QImage>
+#include <QColor>
+#include <QDialog>
+#include <QDialogButtonBox>
+#include <QGridLayout>
+#include <QSignalBlocker>
+#include <QSpinBox>
+#include <QLabel>
+#include <QPainterPath>
+#include <QPushButton>
+#include <QHBoxLayout>
+#include <QBitmap>
+#include <QtDebug>
+
+#undef DEBUG_SIZEHINTS
+
+QColor bgColorForName(const QString &name)
+{
+ if (name == "Black")
+ return QColor("#D8D8D8");
+ if (name == "White")
+ return QColor("#F1F1F1");
+ if (name == "Red")
+ return QColor("#F1D8D8");
+ if (name == "Green")
+ return QColor("#D8E4D8");
+ if (name == "Blue")
+ return QColor("#D8D8F1");
+ if (name == "Yellow")
+ return QColor("#F1F0D8");
+ return QColor(name).lighter(110);
+}
+
+QColor fgColorForName(const QString &name)
+{
+ if (name == "Black")
+ return QColor("#6C6C6C");
+ if (name == "White")
+ return QColor("#F8F8F8");
+ if (name == "Red")
+ return QColor("#F86C6C");
+ if (name == "Green")
+ return QColor("#6CB26C");
+ if (name == "Blue")
+ return QColor("#6C6CF8");
+ if (name == "Yellow")
+ return QColor("#F8F76C");
+ return QColor(name);
+}
+
+class ColorDock : public QFrame
+{
+ Q_OBJECT
+public:
+ explicit ColorDock(const QString &c, QWidget *parent);
+
+ QSize sizeHint() const override { return szHint; }
+ QSize minimumSizeHint() const override { return minSzHint; }
+
+ void setCustomSizeHint(const QSize &size);
+
+public slots:
+ void changeSizeHints();
+
+protected:
+ void paintEvent(QPaintEvent *) override;
+
+private:
+ const QString color;
+ QSize szHint;
+ QSize minSzHint;
+};
+
+ColorDock::ColorDock(const QString &c, QWidget *parent)
+ : QFrame(parent)
+ , color(c)
+ , szHint(-1, -1)
+ , minSzHint(125, 75)
+{
+ QFont font = this->font();
+ font.setPointSize(8);
+ setFont(font);
+}
+
+void ColorDock::paintEvent(QPaintEvent *)
+{
+ QPainter p(this);
+ p.setRenderHint(QPainter::Antialiasing);
+ p.fillRect(rect(), bgColorForName(color));
+
+ p.save();
+
+ extern void render_qt_text(QPainter *, int, int, const QColor &);
+ render_qt_text(&p, width(), height(), fgColorForName(color));
+
+ p.restore();
+
+#ifdef DEBUG_SIZEHINTS
+ p.setRenderHint(QPainter::Antialiasing, false);
+
+ QSize sz = size();
+ QSize szHint = sizeHint();
+ QSize minSzHint = minimumSizeHint();
+ QSize maxSz = maximumSize();
+ QString text = QString::fromLatin1("sz: %1x%2\nszHint: %3x%4\nminSzHint: %5x%6\n"
+ "maxSz: %8x%9")
+ .arg(sz.width()).arg(sz.height())
+ .arg(szHint.width()).arg(szHint.height())
+ .arg(minSzHint.width()).arg(minSzHint.height())
+ .arg(maxSz.width()).arg(maxSz.height());
+
+ QRect r = fontMetrics().boundingRect(rect(), Qt::AlignLeft|Qt::AlignTop, text);
+ r.adjust(-2, -2, 1, 1);
+ p.translate(4, 4);
+ QColor bg = Qt::yellow;
+ bg.setAlpha(120);
+ p.setBrush(bg);
+ p.setPen(Qt::black);
+ p.drawRect(r);
+ p.drawText(rect(), Qt::AlignLeft|Qt::AlignTop, text);
+#endif // DEBUG_SIZEHINTS
+}
+
+static QSpinBox *createSpinBox(int value, QWidget *parent, int max = 1000)
+{
+ QSpinBox *result = new QSpinBox(parent);
+ result->setMinimum(-1);
+ result->setMaximum(max);
+ result->setValue(value);
+ return result;
+}
+
+void ColorDock::changeSizeHints()
+{
+ QDialog dialog(this);
+ dialog.setWindowFlags(dialog.windowFlags() & ~Qt::WindowContextHelpButtonHint);
+ dialog.setWindowTitle(color);
+
+ QVBoxLayout *topLayout = new QVBoxLayout(&dialog);
+
+ QGridLayout *inputLayout = new QGridLayout();
+ topLayout->addLayout(inputLayout);
+
+ inputLayout->addWidget(new QLabel(tr("Size Hint:"), &dialog), 0, 0);
+ inputLayout->addWidget(new QLabel(tr("Min Size Hint:"), &dialog), 1, 0);
+ inputLayout->addWidget(new QLabel(tr("Max Size:"), &dialog), 2, 0);
+ inputLayout->addWidget(new QLabel(tr("Dock Widget Max Size:"), &dialog), 3, 0);
+
+ QSpinBox *szHintW = createSpinBox(szHint.width(), &dialog);
+ inputLayout->addWidget(szHintW, 0, 1);
+ QSpinBox *szHintH = createSpinBox(szHint.height(), &dialog);
+ inputLayout->addWidget(szHintH, 0, 2);
+
+ QSpinBox *minSzHintW = createSpinBox(minSzHint.width(), &dialog);
+ inputLayout->addWidget(minSzHintW, 1, 1);
+ QSpinBox *minSzHintH = createSpinBox(minSzHint.height(), &dialog);
+ inputLayout->addWidget(minSzHintH, 1, 2);
+
+ QSize maxSz = maximumSize();
+ QSpinBox *maxSzW = createSpinBox(maxSz.width(), &dialog, QWIDGETSIZE_MAX);
+ inputLayout->addWidget(maxSzW, 2, 1);
+ QSpinBox *maxSzH = createSpinBox(maxSz.height(), &dialog, QWIDGETSIZE_MAX);
+ inputLayout->addWidget(maxSzH, 2, 2);
+
+ QSize dwMaxSz = parentWidget()->maximumSize();
+ QSpinBox *dwMaxSzW = createSpinBox(dwMaxSz.width(), &dialog, QWIDGETSIZE_MAX);
+ inputLayout->addWidget(dwMaxSzW, 3, 1);
+ QSpinBox *dwMaxSzH = createSpinBox(dwMaxSz.height(), &dialog, QWIDGETSIZE_MAX);
+ inputLayout->addWidget(dwMaxSzH, 3, 2);
+
+ inputLayout->setColumnStretch(1, 1);
+ inputLayout->setColumnStretch(2, 1);
+
+ topLayout->addStretch();
+
+ QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
+ connect(buttonBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);
+ connect(buttonBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
+
+ topLayout->addWidget(buttonBox);
+
+ if (dialog.exec() != QDialog::Accepted)
+ return;
+
+ szHint = QSize(szHintW->value(), szHintH->value());
+ minSzHint = QSize(minSzHintW->value(), minSzHintH->value());
+ maxSz = QSize(maxSzW->value(), maxSzH->value());
+ setMaximumSize(maxSz);
+ dwMaxSz = QSize(dwMaxSzW->value(), dwMaxSzH->value());
+ parentWidget()->setMaximumSize(dwMaxSz);
+ updateGeometry();
+ update();
+}
+
+void ColorDock::setCustomSizeHint(const QSize &size)
+{
+ if (szHint != size) {
+ szHint = size;
+ updateGeometry();
+ }
+}
+
+ColorSwatch::ColorSwatch(const QString &colorName, QMainWindow *parent, Qt::WindowFlags flags)
+ : QDockWidget(parent, flags), mainWindow(parent)
+{
+ setObjectName(colorName + QLatin1String(" Dock Widget"));
+ setWindowTitle(objectName() + QLatin1String(" [*]"));
+
+ ColorDock *swatch = new ColorDock(colorName, this);
+ swatch->setFrameStyle(QFrame::Box | QFrame::Sunken);
+
+ setWidget(swatch);
+
+ closableAction = new QAction(tr("Closable"), this);
+ closableAction->setCheckable(true);
+ connect(closableAction, &QAction::triggered, this, &ColorSwatch::changeClosable);
+
+ movableAction = new QAction(tr("Movable"), this);
+ movableAction->setCheckable(true);
+ connect(movableAction, &QAction::triggered, this, &ColorSwatch::changeMovable);
+
+ floatableAction = new QAction(tr("Floatable"), this);
+ floatableAction->setCheckable(true);
+ connect(floatableAction, &QAction::triggered, this, &ColorSwatch::changeFloatable);
+
+ verticalTitleBarAction = new QAction(tr("Vertical title bar"), this);
+ verticalTitleBarAction->setCheckable(true);
+ connect(verticalTitleBarAction, &QAction::triggered,
+ this, &ColorSwatch::changeVerticalTitleBar);
+
+ floatingAction = new QAction(tr("Floating"), this);
+ floatingAction->setCheckable(true);
+ connect(floatingAction, &QAction::triggered, this, &ColorSwatch::changeFloating);
+
+ allowedAreasActions = new QActionGroup(this);
+ allowedAreasActions->setExclusive(false);
+
+ allowLeftAction = new QAction(tr("Allow on Left"), this);
+ allowLeftAction->setCheckable(true);
+ connect(allowLeftAction, &QAction::triggered, this, &ColorSwatch::allowLeft);
+
+ allowRightAction = new QAction(tr("Allow on Right"), this);
+ allowRightAction->setCheckable(true);
+ connect(allowRightAction, &QAction::triggered, this, &ColorSwatch::allowRight);
+
+ allowTopAction = new QAction(tr("Allow on Top"), this);
+ allowTopAction->setCheckable(true);
+ connect(allowTopAction, &QAction::triggered, this, &ColorSwatch::allowTop);
+
+ allowBottomAction = new QAction(tr("Allow on Bottom"), this);
+ allowBottomAction->setCheckable(true);
+ connect(allowBottomAction, &QAction::triggered, this, &ColorSwatch::allowBottom);
+
+ allowedAreasActions->addAction(allowLeftAction);
+ allowedAreasActions->addAction(allowRightAction);
+ allowedAreasActions->addAction(allowTopAction);
+ allowedAreasActions->addAction(allowBottomAction);
+
+ areaActions = new QActionGroup(this);
+ areaActions->setExclusive(true);
+
+ leftAction = new QAction(tr("Place on Left") , this);
+ leftAction->setCheckable(true);
+ connect(leftAction, &QAction::triggered, this, &ColorSwatch::placeLeft);
+
+ rightAction = new QAction(tr("Place on Right") , this);
+ rightAction->setCheckable(true);
+ connect(rightAction, &QAction::triggered, this, &ColorSwatch::placeRight);
+
+ topAction = new QAction(tr("Place on Top") , this);
+ topAction->setCheckable(true);
+ connect(topAction, &QAction::triggered, this, &ColorSwatch::placeTop);
+
+ bottomAction = new QAction(tr("Place on Bottom") , this);
+ bottomAction->setCheckable(true);
+ connect(bottomAction, &QAction::triggered, this, &ColorSwatch::placeBottom);
+
+ areaActions->addAction(leftAction);
+ areaActions->addAction(rightAction);
+ areaActions->addAction(topAction);
+ areaActions->addAction(bottomAction);
+
+ connect(movableAction, &QAction::triggered, areaActions, &QActionGroup::setEnabled);
+
+ connect(movableAction, &QAction::triggered, allowedAreasActions, &QActionGroup::setEnabled);
+
+ connect(floatableAction, &QAction::triggered, floatingAction, &QAction::setEnabled);
+
+ connect(floatingAction, &QAction::triggered, floatableAction, &QAction::setDisabled);
+ connect(movableAction, &QAction::triggered, floatableAction, &QAction::setEnabled);
+
+ tabMenu = new QMenu(this);
+ tabMenu->setTitle(tr("Tab into"));
+ connect(tabMenu, &QMenu::triggered, this, &ColorSwatch::tabInto);
+
+ splitHMenu = new QMenu(this);
+ splitHMenu->setTitle(tr("Split horizontally into"));
+ connect(splitHMenu, &QMenu::triggered, this, &ColorSwatch::splitInto);
+
+ splitVMenu = new QMenu(this);
+ splitVMenu->setTitle(tr("Split vertically into"));
+ connect(splitVMenu, &QMenu::triggered, this, &ColorSwatch::splitInto);
+
+ QAction *windowModifiedAction = new QAction(tr("Modified"), this);
+ windowModifiedAction->setCheckable(true);
+ windowModifiedAction->setChecked(false);
+ connect(windowModifiedAction, &QAction::toggled, this, &QWidget::setWindowModified);
+
+ menu = new QMenu(colorName, this);
+ menu->addAction(toggleViewAction());
+ menu->addAction(tr("Raise"), this, &QWidget::raise);
+ menu->addAction(tr("Change Size Hints..."), swatch, &ColorDock::changeSizeHints);
+
+ menu->addSeparator();
+ menu->addAction(closableAction);
+ menu->addAction(movableAction);
+ menu->addAction(floatableAction);
+ menu->addAction(floatingAction);
+ menu->addAction(verticalTitleBarAction);
+ menu->addSeparator();
+ menu->addActions(allowedAreasActions->actions());
+ menu->addSeparator();
+ menu->addActions(areaActions->actions());
+ menu->addSeparator();
+ menu->addMenu(splitHMenu);
+ menu->addMenu(splitVMenu);
+ menu->addMenu(tabMenu);
+ menu->addSeparator();
+ menu->addAction(windowModifiedAction);
+
+ connect(menu, &QMenu::aboutToShow, this, &ColorSwatch::updateContextMenu);
+
+ if (colorName == QLatin1String("Black")) {
+ leftAction->setShortcut(Qt::CTRL | Qt::Key_W);
+ rightAction->setShortcut(Qt::CTRL | Qt::Key_E);
+ toggleViewAction()->setShortcut(Qt::CTRL | Qt::Key_R);
+ }
+}
+
+void ColorSwatch::updateContextMenu()
+{
+ const Qt::DockWidgetArea area = mainWindow->dockWidgetArea(this);
+ const Qt::DockWidgetAreas areas = allowedAreas();
+
+ closableAction->setChecked(features() & QDockWidget::DockWidgetClosable);
+ if (windowType() == Qt::Drawer) {
+ floatableAction->setEnabled(false);
+ floatingAction->setEnabled(false);
+ movableAction->setEnabled(false);
+ verticalTitleBarAction->setChecked(false);
+ } else {
+ floatableAction->setChecked(features() & QDockWidget::DockWidgetFloatable);
+ floatingAction->setChecked(isWindow());
+ // done after floating, to get 'floatable' correctly initialized
+ movableAction->setChecked(features() & QDockWidget::DockWidgetMovable);
+ verticalTitleBarAction
+ ->setChecked(features() & QDockWidget::DockWidgetVerticalTitleBar);
+ }
+
+ allowLeftAction->setChecked(isAreaAllowed(Qt::LeftDockWidgetArea));
+ allowRightAction->setChecked(isAreaAllowed(Qt::RightDockWidgetArea));
+ allowTopAction->setChecked(isAreaAllowed(Qt::TopDockWidgetArea));
+ allowBottomAction->setChecked(isAreaAllowed(Qt::BottomDockWidgetArea));
+
+ if (allowedAreasActions->isEnabled()) {
+ allowLeftAction->setEnabled(area != Qt::LeftDockWidgetArea);
+ allowRightAction->setEnabled(area != Qt::RightDockWidgetArea);
+ allowTopAction->setEnabled(area != Qt::TopDockWidgetArea);
+ allowBottomAction->setEnabled(area != Qt::BottomDockWidgetArea);
+ }
+
+ {
+ const QSignalBlocker blocker(leftAction);
+ leftAction->setChecked(area == Qt::LeftDockWidgetArea);
+ }
+ {
+ const QSignalBlocker blocker(rightAction);
+ rightAction->setChecked(area == Qt::RightDockWidgetArea);
+ }
+ {
+ const QSignalBlocker blocker(topAction);
+ topAction->setChecked(area == Qt::TopDockWidgetArea);
+ }
+ {
+ const QSignalBlocker blocker(bottomAction);
+ bottomAction->setChecked(area == Qt::BottomDockWidgetArea);
+ }
+
+ if (areaActions->isEnabled()) {
+ leftAction->setEnabled(areas & Qt::LeftDockWidgetArea);
+ rightAction->setEnabled(areas & Qt::RightDockWidgetArea);
+ topAction->setEnabled(areas & Qt::TopDockWidgetArea);
+ bottomAction->setEnabled(areas & Qt::BottomDockWidgetArea);
+ }
+
+ tabMenu->clear();
+ splitHMenu->clear();
+ splitVMenu->clear();
+ const QList<ColorSwatch *> dockList = mainWindow->findChildren<ColorSwatch*>();
+ for (const ColorSwatch *dock : dockList) {
+ tabMenu->addAction(dock->objectName());
+ splitHMenu->addAction(dock->objectName());
+ splitVMenu->addAction(dock->objectName());
+ }
+}
+
+static ColorSwatch *findByName(const QMainWindow *mainWindow, const QString &name)
+{
+ const QList<ColorSwatch *> dockList = mainWindow->findChildren<ColorSwatch*>();
+ for (ColorSwatch *dock : dockList) {
+ if (name == dock->objectName())
+ return dock;
+ }
+ return nullptr;
+}
+
+void ColorSwatch::splitInto(QAction *action)
+{
+ ColorSwatch *target = findByName(mainWindow, action->text());
+ if (!target)
+ return;
+
+ const Qt::Orientation o = action->parent() == splitHMenu
+ ? Qt::Horizontal : Qt::Vertical;
+ mainWindow->splitDockWidget(target, this, o);
+}
+
+void ColorSwatch::tabInto(QAction *action)
+{
+ if (ColorSwatch *target = findByName(mainWindow, action->text()))
+ mainWindow->tabifyDockWidget(target, this);
+}
+
+#ifndef QT_NO_CONTEXTMENU
+void ColorSwatch::contextMenuEvent(QContextMenuEvent *event)
+{
+ event->accept();
+ menu->popup(event->globalPos());
+}
+#endif // QT_NO_CONTEXTMENU
+
+void ColorSwatch::resizeEvent(QResizeEvent *e)
+{
+ if (BlueTitleBar *btb = qobject_cast<BlueTitleBar*>(titleBarWidget()))
+ btb->updateMask();
+
+ QDockWidget::resizeEvent(e);
+}
+
+void ColorSwatch::allow(Qt::DockWidgetArea area, bool a)
+{
+ Qt::DockWidgetAreas areas = allowedAreas();
+ areas = a ? areas | area : areas & ~area;
+ setAllowedAreas(areas);
+
+ if (areaActions->isEnabled()) {
+ leftAction->setEnabled(areas & Qt::LeftDockWidgetArea);
+ rightAction->setEnabled(areas & Qt::RightDockWidgetArea);
+ topAction->setEnabled(areas & Qt::TopDockWidgetArea);
+ bottomAction->setEnabled(areas & Qt::BottomDockWidgetArea);
+ }
+}
+
+void ColorSwatch::place(Qt::DockWidgetArea area, bool p)
+{
+ if (!p)
+ return;
+
+ mainWindow->addDockWidget(area, this);
+
+ if (allowedAreasActions->isEnabled()) {
+ allowLeftAction->setEnabled(area != Qt::LeftDockWidgetArea);
+ allowRightAction->setEnabled(area != Qt::RightDockWidgetArea);
+ allowTopAction->setEnabled(area != Qt::TopDockWidgetArea);
+ allowBottomAction->setEnabled(area != Qt::BottomDockWidgetArea);
+ }
+}
+
+void ColorSwatch::setCustomSizeHint(const QSize &size)
+{
+ if (ColorDock *dock = qobject_cast<ColorDock*>(widget()))
+ dock->setCustomSizeHint(size);
+}
+
+void ColorSwatch::changeClosable(bool on)
+{ setFeatures(on ? features() | DockWidgetClosable : features() & ~DockWidgetClosable); }
+
+void ColorSwatch::changeMovable(bool on)
+{ setFeatures(on ? features() | DockWidgetMovable : features() & ~DockWidgetMovable); }
+
+void ColorSwatch::changeFloatable(bool on)
+{ setFeatures(on ? features() | DockWidgetFloatable : features() & ~DockWidgetFloatable); }
+
+void ColorSwatch::changeFloating(bool floating)
+{ setFloating(floating); }
+
+void ColorSwatch::allowLeft(bool a)
+{ allow(Qt::LeftDockWidgetArea, a); }
+
+void ColorSwatch::allowRight(bool a)
+{ allow(Qt::RightDockWidgetArea, a); }
+
+void ColorSwatch::allowTop(bool a)
+{ allow(Qt::TopDockWidgetArea, a); }
+
+void ColorSwatch::allowBottom(bool a)
+{ allow(Qt::BottomDockWidgetArea, a); }
+
+void ColorSwatch::placeLeft(bool p)
+{ place(Qt::LeftDockWidgetArea, p); }
+
+void ColorSwatch::placeRight(bool p)
+{ place(Qt::RightDockWidgetArea, p); }
+
+void ColorSwatch::placeTop(bool p)
+{ place(Qt::TopDockWidgetArea, p); }
+
+void ColorSwatch::placeBottom(bool p)
+{ place(Qt::BottomDockWidgetArea, p); }
+
+void ColorSwatch::changeVerticalTitleBar(bool on)
+{
+ setFeatures(on ? features() | DockWidgetVerticalTitleBar
+ : features() & ~DockWidgetVerticalTitleBar);
+}
+
+QSize BlueTitleBar::minimumSizeHint() const
+{
+ QDockWidget *dw = qobject_cast<QDockWidget*>(parentWidget());
+ Q_ASSERT(dw);
+ QSize result(leftPm.width() + rightPm.width(), centerPm.height());
+ if (dw->features() & QDockWidget::DockWidgetVerticalTitleBar)
+ result.transpose();
+ return result;
+}
+
+BlueTitleBar::BlueTitleBar(QWidget *parent)
+ : QWidget(parent)
+ , leftPm(QPixmap(":/res/titlebarLeft.png"))
+ , centerPm(QPixmap(":/res/titlebarCenter.png"))
+ , rightPm(QPixmap(":/res/titlebarRight.png"))
+{
+}
+
+void BlueTitleBar::paintEvent(QPaintEvent*)
+{
+ QPainter painter(this);
+ QRect rect = this->rect();
+
+ QDockWidget *dw = qobject_cast<QDockWidget*>(parentWidget());
+ Q_ASSERT(dw);
+
+ if (dw->features() & QDockWidget::DockWidgetVerticalTitleBar) {
+ QSize s = rect.size();
+ s.transpose();
+ rect.setSize(s);
+
+ painter.translate(rect.left(), rect.top() + rect.width());
+ painter.rotate(-90);
+ painter.translate(-rect.left(), -rect.top());
+ }
+
+ painter.drawPixmap(rect.topLeft(), leftPm);
+ painter.drawPixmap(rect.topRight() - QPoint(rightPm.width() - 1, 0), rightPm);
+ QBrush brush(centerPm);
+ painter.fillRect(rect.left() + leftPm.width(), rect.top(),
+ rect.width() - leftPm.width() - rightPm.width(),
+ centerPm.height(), centerPm);
+}
+
+void BlueTitleBar::mouseReleaseEvent(QMouseEvent *event)
+{
+ QPoint pos = event->position().toPoint();
+
+ QRect rect = this->rect();
+
+ QDockWidget *dw = qobject_cast<QDockWidget*>(parentWidget());
+ Q_ASSERT(dw);
+
+ if (dw->features() & QDockWidget::DockWidgetVerticalTitleBar) {
+ QPoint p = pos;
+ pos.setX(rect.left() + rect.bottom() - p.y());
+ pos.setY(rect.top() + p.x() - rect.left());
+
+ QSize s = rect.size();
+ s.transpose();
+ rect.setSize(s);
+ }
+
+ const int buttonRight = 7;
+ const int buttonWidth = 20;
+ int right = rect.right() - pos.x();
+ int button = (right - buttonRight)/buttonWidth;
+ switch (button) {
+ case 0:
+ event->accept();
+ dw->close();
+ break;
+ case 1:
+ event->accept();
+ dw->setFloating(!dw->isFloating());
+ break;
+ case 2: {
+ event->accept();
+ QDockWidget::DockWidgetFeatures features = dw->features();
+ if (features & QDockWidget::DockWidgetVerticalTitleBar)
+ features &= ~QDockWidget::DockWidgetVerticalTitleBar;
+ else
+ features |= QDockWidget::DockWidgetVerticalTitleBar;
+ dw->setFeatures(features);
+ break;
+ }
+ default:
+ event->ignore();
+ break;
+ }
+}
+
+void BlueTitleBar::updateMask()
+{
+ QDockWidget *dw = qobject_cast<QDockWidget*>(parent());
+ Q_ASSERT(dw);
+
+ QRect rect = dw->rect();
+ QBitmap bitmap(dw->size());
+
+ {
+ QPainter painter(&bitmap);
+
+ // initialize to transparent
+ painter.fillRect(rect, Qt::color0);
+
+ QRect contents = rect;
+ contents.setTopLeft(geometry().bottomLeft());
+ contents.setRight(geometry().right());
+ contents.setBottom(contents.bottom()-y());
+ painter.fillRect(contents, Qt::color1);
+
+ // let's paint the titlebar
+ QRect titleRect = this->geometry();
+
+ if (dw->features() & QDockWidget::DockWidgetVerticalTitleBar) {
+ QSize s = rect.size();
+ s.transpose();
+ rect.setSize(s);
+
+ QSize s2 = size();
+ s2.transpose();
+ titleRect.setSize(s2);
+
+ painter.translate(rect.left(), rect.top() + rect.width());
+ painter.rotate(-90);
+ painter.translate(-rect.left(), -rect.top());
+ }
+
+ contents.setTopLeft(titleRect.bottomLeft());
+ contents.setRight(titleRect.right());
+ contents.setBottom(rect.bottom()-y());
+
+ QRect rect = titleRect;
+
+ painter.drawPixmap(rect.topLeft(), leftPm.mask());
+ painter.fillRect(rect.left() + leftPm.width(), rect.top(),
+ rect.width() - leftPm.width() - rightPm.width(),
+ centerPm.height(), Qt::color1);
+ painter.drawPixmap(rect.topRight() - QPoint(rightPm.width() - 1, 0), rightPm.mask());
+
+ painter.fillRect(contents, Qt::color1);
+ }
+
+ dw->setMask(bitmap);
+}
+
+#include "colorswatch.moc"
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/colorswatch.h b/tests/manual/examples/widgets/mainwindows/mainwindow/colorswatch.h
new file mode 100644
index 0000000000..5b144bd428
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/colorswatch.h
@@ -0,0 +1,102 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef COLORSWATCH_H
+#define COLORSWATCH_H
+
+#include <QDockWidget>
+
+QT_FORWARD_DECLARE_CLASS(QAction)
+QT_FORWARD_DECLARE_CLASS(QActionGroup)
+QT_FORWARD_DECLARE_CLASS(QMenu)
+
+class ColorSwatch : public QDockWidget
+{
+ Q_OBJECT
+
+public:
+ explicit ColorSwatch(const QString &colorName, QMainWindow *parent = nullptr, Qt::WindowFlags flags = { });
+
+ void setCustomSizeHint(const QSize &size);
+ QMenu *colorSwatchMenu() const { return menu; }
+
+protected:
+#ifndef QT_NO_CONTEXTMENU
+ void contextMenuEvent(QContextMenuEvent *event) override;
+#endif // QT_NO_CONTEXTMENU
+ void resizeEvent(QResizeEvent *e) override;
+
+private slots:
+ void changeClosable(bool on);
+ void changeMovable(bool on);
+ void changeFloatable(bool on);
+ void changeFloating(bool on);
+ void changeVerticalTitleBar(bool on);
+ void updateContextMenu();
+
+ void allowLeft(bool a);
+ void allowRight(bool a);
+ void allowTop(bool a);
+ void allowBottom(bool a);
+
+ void placeLeft(bool p);
+ void placeRight(bool p);
+ void placeTop(bool p);
+ void placeBottom(bool p);
+
+ void splitInto(QAction *action);
+ void tabInto(QAction *action);
+
+private:
+ void allow(Qt::DockWidgetArea area, bool allow);
+ void place(Qt::DockWidgetArea area, bool place);
+
+ QAction *closableAction;
+ QAction *movableAction;
+ QAction *floatableAction;
+ QAction *floatingAction;
+ QAction *verticalTitleBarAction;
+
+ QActionGroup *allowedAreasActions;
+ QAction *allowLeftAction;
+ QAction *allowRightAction;
+ QAction *allowTopAction;
+ QAction *allowBottomAction;
+
+ QActionGroup *areaActions;
+ QAction *leftAction;
+ QAction *rightAction;
+ QAction *topAction;
+ QAction *bottomAction;
+
+ QMenu *tabMenu;
+ QMenu *splitHMenu;
+ QMenu *splitVMenu;
+ QMenu *menu;
+
+ QMainWindow *mainWindow;
+};
+
+class BlueTitleBar : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit BlueTitleBar(QWidget *parent = nullptr);
+
+ QSize sizeHint() const override { return minimumSizeHint(); }
+ QSize minimumSizeHint() const override;
+
+protected:
+ void paintEvent(QPaintEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+
+public slots:
+ void updateMask();
+
+private:
+ const QPixmap leftPm;
+ const QPixmap centerPm;
+ const QPixmap rightPm;
+};
+
+#endif // COLORSWATCH_H
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/main.cpp b/tests/manual/examples/widgets/mainwindows/mainwindow/main.cpp
new file mode 100644
index 0000000000..a64d2f5843
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/main.cpp
@@ -0,0 +1,147 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+
+#include <QApplication>
+#include <QPainterPath>
+#include <QPainter>
+#include <QMap>
+#include <QDebug>
+
+void render_qt_text(QPainter *painter, int w, int h, const QColor &color)
+{
+ QPainterPath path;
+ path.moveTo(-0.083695, 0.283849);
+ path.cubicTo(-0.049581, 0.349613, -0.012720, 0.397969, 0.026886, 0.428917);
+ path.cubicTo(0.066493, 0.459865, 0.111593, 0.477595, 0.162186, 0.482108);
+ path.lineTo(0.162186, 0.500000);
+ path.cubicTo(0.115929, 0.498066, 0.066565, 0.487669, 0.014094, 0.468810);
+ path.cubicTo(-0.038378, 0.449952, -0.088103, 0.423839, -0.135082, 0.390474);
+ path.cubicTo(-0.182061, 0.357108, -0.222608, 0.321567, -0.256722, 0.283849);
+ path.cubicTo(-0.304712, 0.262250, -0.342874, 0.239362, -0.371206, 0.215184);
+ path.cubicTo(-0.411969, 0.179078, -0.443625, 0.134671, -0.466175, 0.081963);
+ path.cubicTo(-0.488725, 0.029255, -0.500000, -0.033043, -0.500000, -0.104932);
+ path.cubicTo(-0.500000, -0.218407, -0.467042, -0.312621, -0.401127, -0.387573);
+ path.cubicTo(-0.335212, -0.462524, -0.255421, -0.500000, -0.161752, -0.500000);
+ path.cubicTo(-0.072998, -0.500000, 0.003903, -0.462444, 0.068951, -0.387331);
+ path.cubicTo(0.133998, -0.312218, 0.166522, -0.217440, 0.166522, -0.102998);
+ path.cubicTo(0.166522, -0.010155, 0.143394, 0.071325, 0.097138, 0.141441);
+ path.cubicTo(0.050882, 0.211557, -0.009396, 0.259026, -0.083695, 0.283849);
+ path.moveTo(-0.167823, -0.456963);
+ path.cubicTo(-0.228823, -0.456963, -0.277826, -0.432624, -0.314831, -0.383946);
+ path.cubicTo(-0.361665, -0.323340, -0.385082, -0.230335, -0.385082, -0.104932);
+ path.cubicTo(-0.385082, 0.017569, -0.361376, 0.112025, -0.313964, 0.178433);
+ path.cubicTo(-0.277248, 0.229368, -0.228534, 0.254836, -0.167823, 0.254836);
+ path.cubicTo(-0.105088, 0.254836, -0.054496, 0.229368, -0.016045, 0.178433);
+ path.cubicTo(0.029055, 0.117827, 0.051605, 0.028691, 0.051605, -0.088975);
+ path.cubicTo(0.051605, -0.179562, 0.039318, -0.255803, 0.014744, -0.317698);
+ path.cubicTo(-0.004337, -0.365409, -0.029705, -0.400548, -0.061362, -0.423114);
+ path.cubicTo(-0.093018, -0.445680, -0.128505, -0.456963, -0.167823, -0.456963);
+ path.moveTo(0.379011, -0.404739);
+ path.lineTo(0.379011, -0.236460);
+ path.lineTo(0.486123, -0.236460);
+ path.lineTo(0.486123, -0.197292);
+ path.lineTo(0.379011, -0.197292);
+ path.lineTo(0.379011, 0.134913);
+ path.cubicTo(0.379011, 0.168117, 0.383276, 0.190442, 0.391804, 0.201886);
+ path.cubicTo(0.400332, 0.213330, 0.411246, 0.219052, 0.424545, 0.219052);
+ path.cubicTo(0.435531, 0.219052, 0.446227, 0.215264, 0.456635, 0.207689);
+ path.cubicTo(0.467042, 0.200113, 0.474993, 0.188910, 0.480486, 0.174081);
+ path.lineTo(0.500000, 0.174081);
+ path.cubicTo(0.488436, 0.210509, 0.471957, 0.237911, 0.450564, 0.256286);
+ path.cubicTo(0.429170, 0.274662, 0.407054, 0.283849, 0.384215, 0.283849);
+ path.cubicTo(0.368893, 0.283849, 0.353859, 0.279094, 0.339115, 0.269584);
+ path.cubicTo(0.324371, 0.260074, 0.313530, 0.246534, 0.306592, 0.228965);
+ path.cubicTo(0.299653, 0.211396, 0.296184, 0.184075, 0.296184, 0.147002);
+ path.lineTo(0.296184, -0.197292);
+ path.lineTo(0.223330, -0.197292);
+ path.lineTo(0.223330, -0.215667);
+ path.cubicTo(0.241833, -0.224049, 0.260697, -0.237992, 0.279922, -0.257495);
+ path.cubicTo(0.299147, -0.276999, 0.316276, -0.300129, 0.331310, -0.326886);
+ path.cubicTo(0.338826, -0.341070, 0.349523, -0.367021, 0.363400, -0.404739);
+ path.lineTo(0.379011, -0.404739);
+ path.moveTo(-0.535993, 0.275629);
+
+ painter->translate(w / 2, h / 2);
+ double scale = qMin(w, h) * 8 / 10.0;
+ painter->scale(scale, scale);
+
+ painter->setRenderHint(QPainter::Antialiasing);
+
+ painter->save();
+ painter->translate(.1, .1);
+ painter->fillPath(path, QColor(0, 0, 0, 63));
+ painter->restore();
+
+ painter->setBrush(color);
+ painter->setPen(QPen(Qt::black, 0.02, Qt::SolidLine, Qt::FlatCap, Qt::RoundJoin));
+ painter->drawPath(path);
+}
+
+static void usage()
+{
+ qWarning() << "Usage: mainwindow [-SizeHint<color> <width>x<height>] ...";
+ exit(1);
+}
+
+enum ParseCommandLineArgumentsResult {
+ CommandLineArgumentsOk,
+ CommandLineArgumentsError,
+ HelpRequested
+};
+
+static ParseCommandLineArgumentsResult
+ parseCustomSizeHints(const QStringList &arguments, MainWindow::CustomSizeHintMap *result)
+{
+ result->clear();
+ const auto argumentCount = arguments.size();
+ for (int i = 1; i < argumentCount; ++i) {
+ const QString &arg = arguments.at(i);
+ if (arg.startsWith(QLatin1String("-SizeHint"))) {
+ const QString name = arg.mid(9);
+ if (name.isEmpty())
+ return CommandLineArgumentsError;
+ if (++i == argumentCount)
+ return CommandLineArgumentsError;
+ const QStringView sizeStr{ arguments.at(i) };
+ const auto idx = sizeStr.indexOf(QLatin1Char('x'));
+ if (idx == -1)
+ return CommandLineArgumentsError;
+ bool ok;
+ const int w = sizeStr.left(idx).toInt(&ok);
+ if (!ok)
+ return CommandLineArgumentsError;
+ const int h = sizeStr.mid(idx + 1).toInt(&ok);
+ if (!ok)
+ return CommandLineArgumentsError;
+ result->insert(name, QSize(w, h));
+ } else if (arg == QLatin1String("-h") || arg == QLatin1String("--help")) {
+ return HelpRequested;
+ } else {
+ return CommandLineArgumentsError;
+ }
+ }
+
+ return CommandLineArgumentsOk;
+}
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+ MainWindow::CustomSizeHintMap customSizeHints;
+ switch (parseCustomSizeHints(QCoreApplication::arguments(), &customSizeHints)) {
+ case CommandLineArgumentsOk:
+ break;
+ case CommandLineArgumentsError:
+ usage();
+ return -1;
+ case HelpRequested:
+ usage();
+ return 0;
+ }
+ MainWindow mainWin(customSizeHints);
+ mainWin.resize(800, 600);
+ mainWin.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.cpp b/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.cpp
new file mode 100644
index 0000000000..2f989ab97c
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.cpp
@@ -0,0 +1,444 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+#include "colorswatch.h"
+#include "toolbar.h"
+
+#include <QActionGroup>
+#include <QLayout>
+#include <QMenu>
+#include <QMenuBar>
+#include <QStatusBar>
+#include <QTextEdit>
+#include <QFile>
+#include <QDataStream>
+#include <QFileDialog>
+#include <QDialogButtonBox>
+#include <QMessageBox>
+#include <QApplication>
+#include <QPainter>
+#include <QMouseEvent>
+#include <QLineEdit>
+#include <QComboBox>
+#include <QLabel>
+#include <QPushButton>
+#include <QTextEdit>
+#include <QDebug>
+
+static const char message[] =
+ "<p><b>Qt Main Window Example</b></p>"
+
+ "<p>This is a demonstration of the QMainWindow, QToolBar and "
+ "QDockWidget classes.</p>"
+
+ "<p>The tool bar and dock widgets can be dragged around and rearranged "
+ "using the mouse or via the menu.</p>"
+
+ "<p>Each dock widget contains a colored frame and a context "
+ "(right-click) menu.</p>"
+
+#ifdef Q_OS_MAC
+ "<p>On OS X, the \"Black\" dock widget has been created as a "
+ "<em>Drawer</em>, which is a special kind of QDockWidget.</p>"
+#endif
+ ;
+
+Q_DECLARE_METATYPE(QDockWidget::DockWidgetFeatures)
+
+MainWindow::MainWindow(const CustomSizeHintMap &customSizeHints,
+ QWidget *parent, Qt::WindowFlags flags)
+ : QMainWindow(parent, flags)
+{
+ Q_UNUSED(message);
+ setObjectName("MainWindow");
+ setWindowTitle("Qt Main Window Example");
+
+ QTextEdit *center = new QTextEdit(this);
+ center->setReadOnly(true);
+ center->setMinimumSize(400, 205);
+ setCentralWidget(center);
+
+ setupToolBar();
+ setupMenuBar();
+ setupDockWidgets(customSizeHints);
+
+ statusBar()->showMessage(tr("Status Bar"));
+}
+
+void MainWindow::actionTriggered(QAction *action)
+{
+ qDebug("action '%s' triggered", action->text().toLocal8Bit().data());
+}
+
+void MainWindow::setupToolBar()
+{
+#ifdef Q_OS_MACOS
+ setUnifiedTitleAndToolBarOnMac(true);
+#endif
+
+ for (int i = 0; i < 3; ++i) {
+ ToolBar *tb = new ToolBar(QString::fromLatin1("Tool Bar %1").arg(i + 1), this);
+ toolBars.append(tb);
+ addToolBar(tb);
+ }
+}
+
+void MainWindow::setupMenuBar()
+{
+ QMenu *menu = menuBar()->addMenu(tr("&File"));
+
+ menu->addAction(tr("Save layout..."), this, &MainWindow::saveLayout);
+ menu->addAction(tr("Load layout..."), this, &MainWindow::loadLayout);
+ menu->addAction(tr("Switch layout direction"),this, &MainWindow::switchLayoutDirection);
+
+ menu->addSeparator();
+ menu->addAction(tr("&Quit"), qApp, &QCoreApplication::quit);
+
+ mainWindowMenu = menuBar()->addMenu(tr("Main window"));
+
+ QAction *action = mainWindowMenu->addAction(tr("Animated docks"));
+ action->setCheckable(true);
+ action->setChecked(dockOptions() & AnimatedDocks);
+ connect(action, &QAction::toggled, this, &MainWindow::setDockOptions);
+
+ action = mainWindowMenu->addAction(tr("Allow nested docks"));
+ action->setCheckable(true);
+ action->setChecked(dockOptions() & AllowNestedDocks);
+ connect(action, &QAction::toggled, this, &MainWindow::setDockOptions);
+
+ action = mainWindowMenu->addAction(tr("Allow tabbed docks"));
+ action->setCheckable(true);
+ action->setChecked(dockOptions() & AllowTabbedDocks);
+ connect(action, &QAction::toggled, this, &MainWindow::setDockOptions);
+
+ action = mainWindowMenu->addAction(tr("Force tabbed docks"));
+ action->setCheckable(true);
+ action->setChecked(dockOptions() & ForceTabbedDocks);
+ connect(action, &QAction::toggled, this, &MainWindow::setDockOptions);
+
+ action = mainWindowMenu->addAction(tr("Vertical tabs"));
+ action->setCheckable(true);
+ action->setChecked(dockOptions() & VerticalTabs);
+ connect(action, &QAction::toggled, this, &MainWindow::setDockOptions);
+
+ action = mainWindowMenu->addAction(tr("Grouped dragging"));
+ action->setCheckable(true);
+ action->setChecked(dockOptions() & GroupedDragging);
+ connect(action, &QAction::toggled, this, &MainWindow::setDockOptions);
+
+ QMenu *toolBarMenu = menuBar()->addMenu(tr("Tool bars"));
+ for (int i = 0; i < toolBars.count(); ++i)
+ toolBarMenu->addMenu(toolBars.at(i)->toolbarMenu());
+
+#ifdef Q_OS_MACOS
+ toolBarMenu->addSeparator();
+
+ action = toolBarMenu->addAction(tr("Unified"));
+ action->setCheckable(true);
+ action->setChecked(unifiedTitleAndToolBarOnMac());
+ connect(action, &QAction::toggled, this, &QMainWindow::setUnifiedTitleAndToolBarOnMac);
+#endif
+
+ dockWidgetMenu = menuBar()->addMenu(tr("&Dock Widgets"));
+
+ QMenu *aboutMenu = menuBar()->addMenu(tr("About"));
+ QAction *aboutAct = aboutMenu->addAction(tr("&About"), this, &MainWindow::about);
+ aboutAct->setStatusTip(tr("Show the application's About box"));
+
+ QAction *aboutQtAct = aboutMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt);
+ aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));
+}
+
+void MainWindow::setDockOptions()
+{
+ DockOptions opts;
+ QList<QAction*> actions = mainWindowMenu->actions();
+
+ if (actions.at(0)->isChecked())
+ opts |= AnimatedDocks;
+ if (actions.at(1)->isChecked())
+ opts |= AllowNestedDocks;
+ if (actions.at(2)->isChecked())
+ opts |= AllowTabbedDocks;
+ if (actions.at(3)->isChecked())
+ opts |= ForceTabbedDocks;
+ if (actions.at(4)->isChecked())
+ opts |= VerticalTabs;
+ if (actions.at(5)->isChecked())
+ opts |= GroupedDragging;
+
+ QMainWindow::setDockOptions(opts);
+}
+
+void MainWindow::saveLayout()
+{
+ QString fileName
+ = QFileDialog::getSaveFileName(this, tr("Save layout"));
+ if (fileName.isEmpty())
+ return;
+ QFile file(fileName);
+ if (!file.open(QFile::WriteOnly)) {
+ QString msg = tr("Failed to open %1\n%2")
+ .arg(QDir::toNativeSeparators(fileName), file.errorString());
+ QMessageBox::warning(this, tr("Error"), msg);
+ return;
+ }
+
+ QByteArray geo_data = saveGeometry();
+ QByteArray layout_data = saveState();
+
+ bool ok = file.putChar((uchar)geo_data.size());
+ if (ok)
+ ok = file.write(geo_data) == geo_data.size();
+ if (ok)
+ ok = file.write(layout_data) == layout_data.size();
+
+ if (!ok) {
+ QString msg = tr("Error writing to %1\n%2")
+ .arg(QDir::toNativeSeparators(fileName), file.errorString());
+ QMessageBox::warning(this, tr("Error"), msg);
+ return;
+ }
+}
+
+void MainWindow::loadLayout()
+{
+ QString fileName
+ = QFileDialog::getOpenFileName(this, tr("Load layout"));
+ if (fileName.isEmpty())
+ return;
+ QFile file(fileName);
+ if (!file.open(QFile::ReadOnly)) {
+ QString msg = tr("Failed to open %1\n%2")
+ .arg(QDir::toNativeSeparators(fileName), file.errorString());
+ QMessageBox::warning(this, tr("Error"), msg);
+ return;
+ }
+
+ uchar geo_size;
+ QByteArray geo_data;
+ QByteArray layout_data;
+
+ bool ok = file.getChar((char*)&geo_size);
+ if (ok) {
+ geo_data = file.read(geo_size);
+ ok = geo_data.size() == geo_size;
+ }
+ if (ok) {
+ layout_data = file.readAll();
+ ok = layout_data.size() > 0;
+ }
+
+ if (ok)
+ ok = restoreGeometry(geo_data);
+ if (ok)
+ ok = restoreState(layout_data);
+
+ if (!ok) {
+ QString msg = tr("Error reading %1").arg(QDir::toNativeSeparators(fileName));
+ QMessageBox::warning(this, tr("Error"), msg);
+ return;
+ }
+}
+
+static QAction *addCornerAction(const QString &text, QMainWindow *mw, QMenu *menu, QActionGroup *group,
+ Qt::Corner c, Qt::DockWidgetArea a)
+{
+ QAction *result = menu->addAction(text, mw, [=]() { mw->setCorner(c, a); });
+ result->setCheckable(true);
+ group->addAction(result);
+ return result;
+}
+
+void MainWindow::setupDockWidgets(const CustomSizeHintMap &customSizeHints)
+{
+ qRegisterMetaType<QDockWidget::DockWidgetFeatures>();
+
+ QMenu *cornerMenu = dockWidgetMenu->addMenu(tr("Top left corner"));
+ QActionGroup *group = new QActionGroup(this);
+ group->setExclusive(true);
+ QAction *cornerAction = addCornerAction(tr("Top dock area"), this, cornerMenu, group, Qt::TopLeftCorner, Qt::TopDockWidgetArea);
+ cornerAction->setChecked(true);
+ addCornerAction(tr("Left dock area"), this, cornerMenu, group, Qt::TopLeftCorner, Qt::LeftDockWidgetArea);
+
+ cornerMenu = dockWidgetMenu->addMenu(tr("Top right corner"));
+ group = new QActionGroup(this);
+ group->setExclusive(true);
+ cornerAction = addCornerAction(tr("Top dock area"), this, cornerMenu, group, Qt::TopRightCorner, Qt::TopDockWidgetArea);
+ cornerAction->setChecked(true);
+ addCornerAction(tr("Right dock area"), this, cornerMenu, group, Qt::TopRightCorner, Qt::RightDockWidgetArea);
+
+ cornerMenu = dockWidgetMenu->addMenu(tr("Bottom left corner"));
+ group = new QActionGroup(this);
+ group->setExclusive(true);
+ cornerAction = addCornerAction(tr("Bottom dock area"), this, cornerMenu, group, Qt::BottomLeftCorner, Qt::BottomDockWidgetArea);
+ cornerAction->setChecked(true);
+ addCornerAction(tr("Left dock area"), this, cornerMenu, group, Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
+
+ cornerMenu = dockWidgetMenu->addMenu(tr("Bottom right corner"));
+ group = new QActionGroup(this);
+ group->setExclusive(true);
+ cornerAction = addCornerAction(tr("Bottom dock area"), this, cornerMenu, group, Qt::BottomRightCorner, Qt::BottomDockWidgetArea);
+ cornerAction->setChecked(true);
+ addCornerAction(tr("Right dock area"), this, cornerMenu, group, Qt::BottomRightCorner, Qt::RightDockWidgetArea);
+
+ dockWidgetMenu->addSeparator();
+
+ static const struct Set {
+ const char * name;
+ uint flags;
+ Qt::DockWidgetArea area;
+ } sets [] = {
+#ifndef Q_OS_MAC
+ { "Black", 0, Qt::LeftDockWidgetArea },
+#else
+ { "Black", Qt::Drawer, Qt::LeftDockWidgetArea },
+#endif
+ { "White", 0, Qt::RightDockWidgetArea },
+ { "Red", 0, Qt::TopDockWidgetArea },
+ { "Green", 0, Qt::TopDockWidgetArea },
+ { "Blue", 0, Qt::BottomDockWidgetArea },
+ { "Yellow", 0, Qt::BottomDockWidgetArea }
+ };
+ const int setCount = sizeof(sets) / sizeof(Set);
+
+ const QIcon qtIcon(QPixmap(":/res/qt.png"));
+ for (int i = 0; i < setCount; ++i) {
+ ColorSwatch *swatch = new ColorSwatch(tr(sets[i].name), this, Qt::WindowFlags(sets[i].flags));
+ if (i % 2)
+ swatch->setWindowIcon(qtIcon);
+ if (qstrcmp(sets[i].name, "Blue") == 0) {
+ BlueTitleBar *titlebar = new BlueTitleBar(swatch);
+ swatch->setTitleBarWidget(titlebar);
+ connect(swatch, &QDockWidget::topLevelChanged, titlebar, &BlueTitleBar::updateMask);
+ connect(swatch, &QDockWidget::featuresChanged, titlebar, &BlueTitleBar::updateMask, Qt::QueuedConnection);
+ }
+
+ QString name = QString::fromLatin1(sets[i].name);
+ if (customSizeHints.contains(name))
+ swatch->setCustomSizeHint(customSizeHints.value(name));
+
+ addDockWidget(sets[i].area, swatch);
+ dockWidgetMenu->addMenu(swatch->colorSwatchMenu());
+ }
+
+ destroyDockWidgetMenu = new QMenu(tr("Destroy dock widget"), this);
+ destroyDockWidgetMenu->setEnabled(false);
+ connect(destroyDockWidgetMenu, &QMenu::triggered, this, &MainWindow::destroyDockWidget);
+
+ dockWidgetMenu->addSeparator();
+ dockWidgetMenu->addAction(tr("Add dock widget..."), this, &MainWindow::createDockWidget);
+ dockWidgetMenu->addMenu(destroyDockWidgetMenu);
+}
+
+void MainWindow::switchLayoutDirection()
+{
+ if (layoutDirection() == Qt::LeftToRight)
+ QApplication::setLayoutDirection(Qt::RightToLeft);
+ else
+ QApplication::setLayoutDirection(Qt::LeftToRight);
+}
+
+class CreateDockWidgetDialog : public QDialog
+{
+public:
+ explicit CreateDockWidgetDialog(QWidget *parent = nullptr);
+
+ QString enteredObjectName() const { return m_objectName->text(); }
+ Qt::DockWidgetArea location() const;
+
+private:
+ QLineEdit *m_objectName;
+ QComboBox *m_location;
+};
+
+CreateDockWidgetDialog::CreateDockWidgetDialog(QWidget *parent)
+ : QDialog(parent)
+ , m_objectName(new QLineEdit(this))
+ , m_location(new QComboBox(this))
+{
+ setWindowTitle(tr("Add Dock Widget"));
+ setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
+ QGridLayout *layout = new QGridLayout(this);
+
+ layout->addWidget(new QLabel(tr("Object name:")), 0, 0);
+ layout->addWidget(m_objectName, 0, 1);
+
+ layout->addWidget(new QLabel(tr("Location:")), 1, 0);
+ m_location->setEditable(false);
+ m_location->addItem(tr("Top"));
+ m_location->addItem(tr("Left"));
+ m_location->addItem(tr("Right"));
+ m_location->addItem(tr("Bottom"));
+ m_location->addItem(tr("Restore"));
+ layout->addWidget(m_location, 1, 1);
+
+ QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
+ connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
+ connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
+ layout->addWidget(buttonBox, 2, 0, 1, 2);
+}
+
+Qt::DockWidgetArea CreateDockWidgetDialog::location() const
+{
+ switch (m_location->currentIndex()) {
+ case 0: return Qt::TopDockWidgetArea;
+ case 1: return Qt::LeftDockWidgetArea;
+ case 2: return Qt::RightDockWidgetArea;
+ case 3: return Qt::BottomDockWidgetArea;
+ default:
+ break;
+ }
+ return Qt::NoDockWidgetArea;
+}
+
+void MainWindow::createDockWidget()
+{
+ CreateDockWidgetDialog dialog(this);
+ if (dialog.exec() == QDialog::Rejected)
+ return;
+
+ QDockWidget *dw = new QDockWidget;
+ const QString name = dialog.enteredObjectName();
+ dw->setObjectName(name);
+ dw->setWindowTitle(name);
+ dw->setWidget(new QTextEdit);
+
+ Qt::DockWidgetArea area = dialog.location();
+ switch (area) {
+ case Qt::LeftDockWidgetArea:
+ case Qt::RightDockWidgetArea:
+ case Qt::TopDockWidgetArea:
+ case Qt::BottomDockWidgetArea:
+ addDockWidget(area, dw);
+ break;
+ default:
+ if (!restoreDockWidget(dw)) {
+ QMessageBox::warning(this, QString(), tr("Failed to restore dock widget"));
+ delete dw;
+ return;
+ }
+ break;
+ }
+
+ extraDockWidgets.append(dw);
+ destroyDockWidgetMenu->setEnabled(true);
+ destroyDockWidgetMenu->addAction(new QAction(name, this));
+}
+
+void MainWindow::destroyDockWidget(QAction *action)
+{
+ auto index = destroyDockWidgetMenu->actions().indexOf(action);
+ delete extraDockWidgets.takeAt(index);
+ destroyDockWidgetMenu->removeAction(action);
+ action->deleteLater();
+
+ if (destroyDockWidgetMenu->isEmpty())
+ destroyDockWidgetMenu->setEnabled(false);
+}
+
+void MainWindow::about()
+{
+ QMessageBox::about(this, tr("About MainWindows"), message);
+}
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.h b/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.h
new file mode 100644
index 0000000000..ec522d1a51
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.h
@@ -0,0 +1,50 @@
+// 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>
+#include <QMap>
+#include <QString>
+#include <QSize>
+
+class ToolBar;
+QT_FORWARD_DECLARE_CLASS(QMenu)
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ typedef QMap<QString, QSize> CustomSizeHintMap;
+
+ explicit MainWindow(const CustomSizeHintMap &customSizeHints,
+ QWidget *parent = nullptr,
+ Qt::WindowFlags flags = { });
+
+public slots:
+ void actionTriggered(QAction *action);
+ void saveLayout();
+ void loadLayout();
+ void switchLayoutDirection();
+ void setDockOptions();
+
+ void createDockWidget();
+ void destroyDockWidget(QAction *action);
+
+ void about();
+
+private:
+ void setupToolBar();
+ void setupMenuBar();
+ void setupDockWidgets(const CustomSizeHintMap &customSizeHints);
+
+ QList<ToolBar*> toolBars;
+ QMenu *dockWidgetMenu;
+ QMenu *mainWindowMenu;
+ QList<QDockWidget *> extraDockWidgets;
+ QMenu *destroyDockWidgetMenu;
+};
+
+#endif // MAINWINDOW_H
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.pro b/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.pro
new file mode 100644
index 0000000000..49f4d30720
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.pro
@@ -0,0 +1,18 @@
+TEMPLATE = app
+QT += widgets
+requires(qtConfig(combobox))
+
+HEADERS += colorswatch.h mainwindow.h toolbar.h
+SOURCES += colorswatch.cpp mainwindow.cpp toolbar.cpp main.cpp
+build_all:!build_pass {
+ CONFIG -= build_all
+ CONFIG += release
+}
+
+#! [qrc]
+RESOURCES += mainwindow.qrc
+#! [qrc]
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/mainwindows/mainwindow
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.qrc b/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.qrc
new file mode 100644
index 0000000000..47ff22a3e4
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/mainwindow.qrc
@@ -0,0 +1,8 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/res">
+ <file>qt.png</file>
+ <file>titlebarLeft.png</file>
+ <file>titlebarCenter.png</file>
+ <file>titlebarRight.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/qt.png b/tests/manual/examples/widgets/mainwindows/mainwindow/qt.png
new file mode 100644
index 0000000000..4f68e162de
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/qt.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/titlebarCenter.png b/tests/manual/examples/widgets/mainwindows/mainwindow/titlebarCenter.png
new file mode 100644
index 0000000000..5cc141355c
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/titlebarCenter.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/titlebarLeft.png b/tests/manual/examples/widgets/mainwindows/mainwindow/titlebarLeft.png
new file mode 100644
index 0000000000..315166202b
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/titlebarLeft.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/titlebarRight.png b/tests/manual/examples/widgets/mainwindows/mainwindow/titlebarRight.png
new file mode 100644
index 0000000000..a4505268ec
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/titlebarRight.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/toolbar.cpp b/tests/manual/examples/widgets/mainwindows/mainwindow/toolbar.cpp
new file mode 100644
index 0000000000..d73c12f50d
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/toolbar.cpp
@@ -0,0 +1,308 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "toolbar.h"
+
+#include <QRandomGenerator>
+
+#include <QActionGroup>
+#include <QMainWindow>
+#include <QMenu>
+#include <QPainter>
+#include <QPainterPath>
+#include <QSpinBox>
+#include <QLabel>
+#include <QToolTip>
+
+#include <stdlib.h>
+
+static QPixmap genIcon(const QSize &iconSize, const QString &, const QColor &color, qreal pixelRatio)
+{
+ int w = qRound(iconSize.width() * pixelRatio);
+ int h = qRound(iconSize.height() * pixelRatio);
+
+ QImage image(w, h, QImage::Format_ARGB32_Premultiplied);
+ image.fill(0);
+
+ QPainter p(&image);
+
+ extern void render_qt_text(QPainter *, int, int, const QColor &);
+ render_qt_text(&p, w, h, color);
+
+ QPixmap pm = QPixmap::fromImage(image, Qt::DiffuseDither | Qt::DiffuseAlphaDither);
+ pm.setDevicePixelRatio(pixelRatio);
+ return pm;
+}
+
+static QPixmap genIcon(const QSize &iconSize, int number, const QColor &color, qreal pixelRatio)
+{ return genIcon(iconSize, QString::number(number), color, pixelRatio); }
+
+ToolBar::ToolBar(const QString &title, QMainWindow *mainWindow)
+ : QToolBar(mainWindow)
+ , mainWindow(mainWindow)
+ , spinbox(nullptr)
+ , spinboxAction(nullptr)
+{
+ setWindowTitle(title);
+ setObjectName(title);
+
+ setIconSize(QSize(32, 32));
+
+ qreal dpr = devicePixelRatio();
+ menu = new QMenu("One", this);
+ menu->setIcon(genIcon(iconSize(), 1, Qt::black, dpr));
+ menu->addAction(genIcon(iconSize(), "A", Qt::blue, dpr), "A");
+ menu->addAction(genIcon(iconSize(), "B", Qt::blue, dpr), "B");
+ menu->addAction(genIcon(iconSize(), "C", Qt::blue, dpr), "C");
+ addAction(menu->menuAction());
+
+ QAction *two = addAction(genIcon(iconSize(), 2, Qt::white, dpr), "Two");
+ QFont boldFont;
+ boldFont.setBold(true);
+ two->setFont(boldFont);
+
+ addAction(genIcon(iconSize(), 3, Qt::red, dpr), "Three");
+ addAction(genIcon(iconSize(), 4, Qt::green, dpr), "Four");
+ addAction(genIcon(iconSize(), 5, Qt::blue, dpr), "Five");
+ addAction(genIcon(iconSize(), 6, Qt::yellow, dpr), "Six");
+ orderAction = new QAction(this);
+ orderAction->setText(tr("Order Items in Tool Bar"));
+ connect(orderAction, &QAction::triggered, this, &ToolBar::order);
+
+ randomizeAction = new QAction(this);
+ randomizeAction->setText(tr("Randomize Items in Tool Bar"));
+ connect(randomizeAction, &QAction::triggered, this, &ToolBar::randomize);
+
+ addSpinBoxAction = new QAction(this);
+ addSpinBoxAction->setText(tr("Add Spin Box"));
+ connect(addSpinBoxAction, &QAction::triggered, this, &ToolBar::addSpinBox);
+
+ removeSpinBoxAction = new QAction(this);
+ removeSpinBoxAction->setText(tr("Remove Spin Box"));
+ removeSpinBoxAction->setEnabled(false);
+ connect(removeSpinBoxAction, &QAction::triggered, this, &ToolBar::removeSpinBox);
+
+ movableAction = new QAction(tr("Movable"), this);
+ movableAction->setCheckable(true);
+ connect(movableAction, &QAction::triggered, this, &ToolBar::changeMovable);
+
+ allowedAreasActions = new QActionGroup(this);
+ allowedAreasActions->setExclusive(false);
+
+ allowLeftAction = new QAction(tr("Allow on Left"), this);
+ allowLeftAction->setCheckable(true);
+ connect(allowLeftAction, &QAction::triggered, this, &ToolBar::allowLeft);
+
+ allowRightAction = new QAction(tr("Allow on Right"), this);
+ allowRightAction->setCheckable(true);
+ connect(allowRightAction, &QAction::triggered, this, &ToolBar::allowRight);
+
+ allowTopAction = new QAction(tr("Allow on Top"), this);
+ allowTopAction->setCheckable(true);
+ connect(allowTopAction, &QAction::triggered, this, &ToolBar::allowTop);
+
+ allowBottomAction = new QAction(tr("Allow on Bottom"), this);
+ allowBottomAction->setCheckable(true);
+ connect(allowBottomAction, &QAction::triggered, this, &ToolBar::allowBottom);
+
+ allowedAreasActions->addAction(allowLeftAction);
+ allowedAreasActions->addAction(allowRightAction);
+ allowedAreasActions->addAction(allowTopAction);
+ allowedAreasActions->addAction(allowBottomAction);
+
+ areaActions = new QActionGroup(this);
+ areaActions->setExclusive(true);
+
+ leftAction = new QAction(tr("Place on Left") , this);
+ leftAction->setCheckable(true);
+ connect(leftAction, &QAction::triggered, this, &ToolBar::placeLeft);
+
+ rightAction = new QAction(tr("Place on Right") , this);
+ rightAction->setCheckable(true);
+ connect(rightAction, &QAction::triggered, this, &ToolBar::placeRight);
+
+ topAction = new QAction(tr("Place on Top") , this);
+ topAction->setCheckable(true);
+ connect(topAction, &QAction::triggered, this, &ToolBar::placeTop);
+
+ bottomAction = new QAction(tr("Place on Bottom") , this);
+ bottomAction->setCheckable(true);
+ connect(bottomAction, &QAction::triggered, this, &ToolBar::placeBottom);
+
+ areaActions->addAction(leftAction);
+ areaActions->addAction(rightAction);
+ areaActions->addAction(topAction);
+ areaActions->addAction(bottomAction);
+
+ connect(movableAction, &QAction::triggered, areaActions, &QActionGroup::setEnabled);
+
+ connect(movableAction, &QAction::triggered, allowedAreasActions, &QActionGroup::setEnabled);
+
+ menu = new QMenu(title, this);
+ menu->addAction(toggleViewAction());
+ menu->addSeparator();
+ menu->addAction(orderAction);
+ menu->addAction(randomizeAction);
+ menu->addSeparator();
+ menu->addAction(addSpinBoxAction);
+ menu->addAction(removeSpinBoxAction);
+ menu->addSeparator();
+ menu->addAction(movableAction);
+ menu->addSeparator();
+ menu->addActions(allowedAreasActions->actions());
+ menu->addSeparator();
+ menu->addActions(areaActions->actions());
+ menu->addSeparator();
+ menu->addAction(tr("Insert break"), this, &ToolBar::insertToolBarBreak);
+
+ connect(menu, &QMenu::aboutToShow, this, &ToolBar::updateMenu);
+
+ randomize();
+}
+
+void ToolBar::updateMenu()
+{
+ const Qt::ToolBarArea area = mainWindow->toolBarArea(this);
+ const Qt::ToolBarAreas areas = allowedAreas();
+
+ movableAction->setChecked(isMovable());
+
+ allowLeftAction->setChecked(isAreaAllowed(Qt::LeftToolBarArea));
+ allowRightAction->setChecked(isAreaAllowed(Qt::RightToolBarArea));
+ allowTopAction->setChecked(isAreaAllowed(Qt::TopToolBarArea));
+ allowBottomAction->setChecked(isAreaAllowed(Qt::BottomToolBarArea));
+
+ if (allowedAreasActions->isEnabled()) {
+ allowLeftAction->setEnabled(area != Qt::LeftToolBarArea);
+ allowRightAction->setEnabled(area != Qt::RightToolBarArea);
+ allowTopAction->setEnabled(area != Qt::TopToolBarArea);
+ allowBottomAction->setEnabled(area != Qt::BottomToolBarArea);
+ }
+
+ leftAction->setChecked(area == Qt::LeftToolBarArea);
+ rightAction->setChecked(area == Qt::RightToolBarArea);
+ topAction->setChecked(area == Qt::TopToolBarArea);
+ bottomAction->setChecked(area == Qt::BottomToolBarArea);
+
+ if (areaActions->isEnabled()) {
+ leftAction->setEnabled(areas & Qt::LeftToolBarArea);
+ rightAction->setEnabled(areas & Qt::RightToolBarArea);
+ topAction->setEnabled(areas & Qt::TopToolBarArea);
+ bottomAction->setEnabled(areas & Qt::BottomToolBarArea);
+ }
+}
+
+void ToolBar::order()
+{
+ QList<QAction *> ordered;
+ QList<QAction *> actions1 = actions();
+ const QList<QAction *> childActions = findChildren<QAction *>();
+ for (QAction *action : childActions) {
+ if (!actions1.contains(action))
+ continue;
+ actions1.removeAll(action);
+ ordered.append(action);
+ }
+
+ clear();
+ addActions(ordered);
+
+ orderAction->setEnabled(false);
+}
+
+void ToolBar::randomize()
+{
+ QList<QAction *> randomized;
+ QList<QAction *> actions = this->actions();
+ while (!actions.isEmpty()) {
+ QAction *action = actions.takeAt(QRandomGenerator::global()->bounded(actions.size()));
+ randomized.append(action);
+ }
+ clear();
+ addActions(randomized);
+
+ orderAction->setEnabled(true);
+}
+
+void ToolBar::addSpinBox()
+{
+ if (!spinbox)
+ spinbox = new QSpinBox(this);
+ if (!spinboxAction)
+ spinboxAction = addWidget(spinbox);
+ else
+ addAction(spinboxAction);
+
+ addSpinBoxAction->setEnabled(false);
+ removeSpinBoxAction->setEnabled(true);
+}
+
+void ToolBar::removeSpinBox()
+{
+ if (spinboxAction)
+ removeAction(spinboxAction);
+
+ addSpinBoxAction->setEnabled(true);
+ removeSpinBoxAction->setEnabled(false);
+}
+
+void ToolBar::allow(Qt::ToolBarArea area, bool a)
+{
+ Qt::ToolBarAreas areas = allowedAreas();
+ areas = a ? areas | area : areas & ~area;
+ setAllowedAreas(areas);
+
+ if (areaActions->isEnabled()) {
+ leftAction->setEnabled(areas & Qt::LeftToolBarArea);
+ rightAction->setEnabled(areas & Qt::RightToolBarArea);
+ topAction->setEnabled(areas & Qt::TopToolBarArea);
+ bottomAction->setEnabled(areas & Qt::BottomToolBarArea);
+ }
+}
+
+void ToolBar::place(Qt::ToolBarArea area, bool p)
+{
+ if (!p)
+ return;
+
+ mainWindow->addToolBar(area, this);
+
+ if (allowedAreasActions->isEnabled()) {
+ allowLeftAction->setEnabled(area != Qt::LeftToolBarArea);
+ allowRightAction->setEnabled(area != Qt::RightToolBarArea);
+ allowTopAction->setEnabled(area != Qt::TopToolBarArea);
+ allowBottomAction->setEnabled(area != Qt::BottomToolBarArea);
+ }
+}
+
+void ToolBar::changeMovable(bool movable)
+{ setMovable(movable); }
+
+void ToolBar::allowLeft(bool a)
+{ allow(Qt::LeftToolBarArea, a); }
+
+void ToolBar::allowRight(bool a)
+{ allow(Qt::RightToolBarArea, a); }
+
+void ToolBar::allowTop(bool a)
+{ allow(Qt::TopToolBarArea, a); }
+
+void ToolBar::allowBottom(bool a)
+{ allow(Qt::BottomToolBarArea, a); }
+
+void ToolBar::placeLeft(bool p)
+{ place(Qt::LeftToolBarArea, p); }
+
+void ToolBar::placeRight(bool p)
+{ place(Qt::RightToolBarArea, p); }
+
+void ToolBar::placeTop(bool p)
+{ place(Qt::TopToolBarArea, p); }
+
+void ToolBar::placeBottom(bool p)
+{ place(Qt::BottomToolBarArea, p); }
+
+void ToolBar::insertToolBarBreak()
+{
+ mainWindow->insertToolBarBreak(this);
+}
diff --git a/tests/manual/examples/widgets/mainwindows/mainwindow/toolbar.h b/tests/manual/examples/widgets/mainwindows/mainwindow/toolbar.h
new file mode 100644
index 0000000000..0030adbe23
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mainwindow/toolbar.h
@@ -0,0 +1,74 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef TOOLBAR_H
+#define TOOLBAR_H
+
+#include <QToolBar>
+
+QT_FORWARD_DECLARE_CLASS(QAction)
+QT_FORWARD_DECLARE_CLASS(QActionGroup)
+QT_FORWARD_DECLARE_CLASS(QMenu)
+QT_FORWARD_DECLARE_CLASS(QSpinBox)
+
+class ToolBar : public QToolBar
+{
+ Q_OBJECT
+
+public:
+ explicit ToolBar(const QString &title, QMainWindow *mainWindow);
+
+ QMenu *toolbarMenu() const { return menu; }
+
+private slots:
+ void order();
+ void randomize();
+ void addSpinBox();
+ void removeSpinBox();
+
+ void changeMovable(bool movable);
+
+ void allowLeft(bool a);
+ void allowRight(bool a);
+ void allowTop(bool a);
+ void allowBottom(bool a);
+
+ void placeLeft(bool p);
+ void placeRight(bool p);
+ void placeTop(bool p);
+ void placeBottom(bool p);
+
+ void updateMenu();
+ void insertToolBarBreak();
+
+private:
+ void allow(Qt::ToolBarArea area, bool allow);
+ void place(Qt::ToolBarArea area, bool place);
+
+ QMainWindow *mainWindow;
+
+ QSpinBox *spinbox;
+ QAction *spinboxAction;
+
+ QMenu *menu;
+ QAction *orderAction;
+ QAction *randomizeAction;
+ QAction *addSpinBoxAction;
+ QAction *removeSpinBoxAction;
+
+ QAction *movableAction;
+
+ QActionGroup *allowedAreasActions;
+ QAction *allowLeftAction;
+ QAction *allowRightAction;
+ QAction *allowTopAction;
+ QAction *allowBottomAction;
+
+ QActionGroup *areaActions;
+ QAction *leftAction;
+ QAction *rightAction;
+ QAction *topAction;
+ QAction *bottomAction;
+};
+
+#endif // TOOLBAR_H
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/CMakeLists.txt b/tests/manual/examples/widgets/mainwindows/mdi/CMakeLists.txt
new file mode 100644
index 0000000000..2f544b9510
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/CMakeLists.txt
@@ -0,0 +1,55 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(mdi LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/mainwindows/mdi")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(mdi
+ main.cpp
+ mainwindow.cpp mainwindow.h
+ mdichild.cpp mdichild.h
+)
+
+set_target_properties(mdi PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(mdi PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(mdi_resource_files
+ "images/copy.png"
+ "images/cut.png"
+ "images/new.png"
+ "images/open.png"
+ "images/paste.png"
+ "images/save.png"
+)
+
+qt_add_resources(mdi "mdi"
+ PREFIX
+ "/"
+ FILES
+ ${mdi_resource_files}
+)
+
+install(TARGETS mdi
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/images/copy.png b/tests/manual/examples/widgets/mainwindows/mdi/images/copy.png
new file mode 100644
index 0000000000..2aeb28288f
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/images/copy.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/images/cut.png b/tests/manual/examples/widgets/mainwindows/mdi/images/cut.png
new file mode 100644
index 0000000000..54638e9386
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/images/cut.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/images/new.png b/tests/manual/examples/widgets/mainwindows/mdi/images/new.png
new file mode 100644
index 0000000000..12131b0100
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/images/new.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/images/open.png b/tests/manual/examples/widgets/mainwindows/mdi/images/open.png
new file mode 100644
index 0000000000..45fa2883a7
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/images/open.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/images/paste.png b/tests/manual/examples/widgets/mainwindows/mdi/images/paste.png
new file mode 100644
index 0000000000..c14425cad1
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/images/paste.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/images/save.png b/tests/manual/examples/widgets/mainwindows/mdi/images/save.png
new file mode 100644
index 0000000000..e65a29d5f1
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/images/save.png
Binary files differ
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/main.cpp b/tests/manual/examples/widgets/mainwindows/mdi/main.cpp
new file mode 100644
index 0000000000..ee70050544
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/main.cpp
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QCommandLineParser>
+#include <QCommandLineOption>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ QCoreApplication::setApplicationName("MDI Example");
+ QCoreApplication::setOrganizationName("QtProject");
+ QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+ QCommandLineParser parser;
+ parser.setApplicationDescription("Qt MDI Example");
+ parser.addHelpOption();
+ parser.addVersionOption();
+ parser.addPositionalArgument("file", "The file to open.");
+ parser.process(app);
+
+ MainWindow mainWin;
+ const QStringList posArgs = parser.positionalArguments();
+ for (const QString &fileName : posArgs)
+ mainWin.openFile(fileName);
+ mainWin.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/mainwindow.cpp b/tests/manual/examples/widgets/mainwindows/mdi/mainwindow.cpp
new file mode 100644
index 0000000000..c0f9091002
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/mainwindow.cpp
@@ -0,0 +1,476 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+
+#include "mainwindow.h"
+#include "mdichild.h"
+
+MainWindow::MainWindow()
+ : mdiArea(new QMdiArea)
+{
+ mdiArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+ mdiArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
+ setCentralWidget(mdiArea);
+ connect(mdiArea, &QMdiArea::subWindowActivated,
+ this, &MainWindow::updateMenus);
+
+ createActions();
+ createStatusBar();
+ updateMenus();
+
+ readSettings();
+
+ setWindowTitle(tr("MDI"));
+ setUnifiedTitleAndToolBarOnMac(true);
+}
+
+void MainWindow::closeEvent(QCloseEvent *event)
+{
+ mdiArea->closeAllSubWindows();
+ if (mdiArea->currentSubWindow()) {
+ event->ignore();
+ } else {
+ writeSettings();
+ event->accept();
+ }
+}
+
+void MainWindow::newFile()
+{
+ MdiChild *child = createMdiChild();
+ child->newFile();
+ child->show();
+}
+
+void MainWindow::open()
+{
+ const QString fileName = QFileDialog::getOpenFileName(this);
+ if (!fileName.isEmpty())
+ openFile(fileName);
+}
+
+bool MainWindow::openFile(const QString &fileName)
+{
+ if (QMdiSubWindow *existing = findMdiChild(fileName)) {
+ mdiArea->setActiveSubWindow(existing);
+ return true;
+ }
+ const bool succeeded = loadFile(fileName);
+ if (succeeded)
+ statusBar()->showMessage(tr("File loaded"), 2000);
+ return succeeded;
+}
+
+bool MainWindow::loadFile(const QString &fileName)
+{
+ MdiChild *child = createMdiChild();
+ const bool succeeded = child->loadFile(fileName);
+ if (succeeded)
+ child->show();
+ else
+ child->close();
+ MainWindow::prependToRecentFiles(fileName);
+ return succeeded;
+}
+
+void MainWindow::newSubWindow()
+{
+ MdiChild *child = createMdiChild(static_cast<MdiChild *>(mdiArea->activeSubWindow()->widget()));
+ child->show();
+}
+
+static inline QString recentFilesKey() { return QStringLiteral("recentFileList"); }
+static inline QString fileKey() { return QStringLiteral("file"); }
+
+static QStringList readRecentFiles(QSettings &settings)
+{
+ QStringList result;
+ const int count = settings.beginReadArray(recentFilesKey());
+ for (int i = 0; i < count; ++i) {
+ settings.setArrayIndex(i);
+ result.append(settings.value(fileKey()).toString());
+ }
+ settings.endArray();
+ return result;
+}
+
+static void writeRecentFiles(const QStringList &files, QSettings &settings)
+{
+ const int count = files.size();
+ settings.beginWriteArray(recentFilesKey());
+ for (int i = 0; i < count; ++i) {
+ settings.setArrayIndex(i);
+ settings.setValue(fileKey(), files.at(i));
+ }
+ settings.endArray();
+}
+
+bool MainWindow::hasRecentFiles()
+{
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+ const int count = settings.beginReadArray(recentFilesKey());
+ settings.endArray();
+ return count > 0;
+}
+
+void MainWindow::prependToRecentFiles(const QString &fileName)
+{
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+
+ const QStringList oldRecentFiles = readRecentFiles(settings);
+ QStringList recentFiles = oldRecentFiles;
+ recentFiles.removeAll(fileName);
+ recentFiles.prepend(fileName);
+ if (oldRecentFiles != recentFiles)
+ writeRecentFiles(recentFiles, settings);
+
+ setRecentFilesVisible(!recentFiles.isEmpty());
+}
+
+void MainWindow::setRecentFilesVisible(bool visible)
+{
+ recentFileSubMenuAct->setVisible(visible);
+ recentFileSeparator->setVisible(visible);
+}
+
+void MainWindow::updateRecentFileActions()
+{
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+
+ const QStringList recentFiles = readRecentFiles(settings);
+ const int count = qMin(int(MaxRecentFiles), recentFiles.size());
+ int i = 0;
+ for ( ; i < count; ++i) {
+ const QString fileName = QFileInfo(recentFiles.at(i)).fileName();
+ recentFileActs[i]->setText(tr("&%1 %2").arg(i + 1).arg(fileName));
+ recentFileActs[i]->setData(recentFiles.at(i));
+ recentFileActs[i]->setVisible(true);
+ }
+ for ( ; i < MaxRecentFiles; ++i)
+ recentFileActs[i]->setVisible(false);
+}
+
+void MainWindow::openRecentFile()
+{
+ if (const QAction *action = qobject_cast<const QAction *>(sender()))
+ openFile(action->data().toString());
+}
+
+void MainWindow::save()
+{
+ if (activeMdiChild() && activeMdiChild()->save())
+ statusBar()->showMessage(tr("File saved"), 2000);
+}
+
+void MainWindow::saveAs()
+{
+ MdiChild *child = activeMdiChild();
+ if (child && child->saveAs()) {
+ statusBar()->showMessage(tr("File saved"), 2000);
+ MainWindow::prependToRecentFiles(child->currentFile());
+ }
+}
+
+#ifndef QT_NO_CLIPBOARD
+void MainWindow::cut()
+{
+ if (activeMdiChild())
+ activeMdiChild()->cut();
+}
+
+void MainWindow::copy()
+{
+ if (activeMdiChild())
+ activeMdiChild()->copy();
+}
+
+void MainWindow::paste()
+{
+ if (activeMdiChild())
+ activeMdiChild()->paste();
+}
+#endif
+
+void MainWindow::about()
+{
+ QMessageBox::about(this, tr("About MDI"),
+ tr("The <b>MDI</b> example demonstrates how to write multiple "
+ "document interface applications using Qt."));
+}
+
+void MainWindow::updateMenus()
+{
+ bool hasMdiChild = (activeMdiChild() != nullptr);
+ saveAct->setEnabled(hasMdiChild);
+ saveAsAct->setEnabled(hasMdiChild);
+#ifndef QT_NO_CLIPBOARD
+ pasteAct->setEnabled(hasMdiChild);
+#endif
+ newWindowAct->setEnabled(hasMdiChild);
+ closeAct->setEnabled(hasMdiChild);
+ closeAllAct->setEnabled(hasMdiChild);
+ tileAct->setEnabled(hasMdiChild);
+ cascadeAct->setEnabled(hasMdiChild);
+ nextAct->setEnabled(hasMdiChild);
+ previousAct->setEnabled(hasMdiChild);
+ windowMenuSeparatorAct->setVisible(hasMdiChild);
+
+#ifndef QT_NO_CLIPBOARD
+ bool hasSelection = (activeMdiChild() &&
+ activeMdiChild()->textCursor().hasSelection());
+ cutAct->setEnabled(hasSelection);
+ copyAct->setEnabled(hasSelection);
+#endif
+}
+
+void MainWindow::updateWindowMenu()
+{
+ windowMenu->clear();
+ windowMenu->addAction(newWindowAct);
+ windowMenu->addAction(closeAct);
+ windowMenu->addAction(closeAllAct);
+ windowMenu->addSeparator();
+ windowMenu->addAction(tileAct);
+ windowMenu->addAction(cascadeAct);
+ windowMenu->addSeparator();
+ windowMenu->addAction(nextAct);
+ windowMenu->addAction(previousAct);
+ windowMenu->addAction(windowMenuSeparatorAct);
+
+ QList<QMdiSubWindow *> windows = mdiArea->subWindowList();
+ windowMenuSeparatorAct->setVisible(!windows.isEmpty());
+
+ for (int i = 0; i < windows.size(); ++i) {
+ QMdiSubWindow *mdiSubWindow = windows.at(i);
+ MdiChild *child = qobject_cast<MdiChild *>(mdiSubWindow->widget());
+
+ QString text;
+ if (i < 9) {
+ text = tr("&%1 %2").arg(i + 1)
+ .arg(child->userFriendlyCurrentFile());
+ } else {
+ text = tr("%1 %2").arg(i + 1)
+ .arg(child->userFriendlyCurrentFile());
+ }
+ QAction *action = windowMenu->addAction(text, mdiSubWindow, [this, mdiSubWindow]() {
+ mdiArea->setActiveSubWindow(mdiSubWindow);
+ });
+ action->setCheckable(true);
+ action ->setChecked(child == activeMdiChild());
+ }
+}
+
+MdiChild *MainWindow::createMdiChild(MdiChild *other)
+{
+ MdiChild *child = new MdiChild(other);
+ mdiArea->addSubWindow(child);
+
+#ifndef QT_NO_CLIPBOARD
+ connect(child, &QTextEdit::copyAvailable, cutAct, &QAction::setEnabled);
+ connect(child, &QTextEdit::copyAvailable, copyAct, &QAction::setEnabled);
+#endif
+
+ return child;
+}
+
+void MainWindow::createActions()
+{
+ QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
+ QToolBar *fileToolBar = addToolBar(tr("File"));
+
+ const QIcon newIcon = QIcon::fromTheme("document-new", QIcon(":/images/new.png"));
+ newAct = new QAction(newIcon, tr("&New"), this);
+ newAct->setShortcuts(QKeySequence::New);
+ newAct->setStatusTip(tr("Create a new file"));
+ connect(newAct, &QAction::triggered, this, &MainWindow::newFile);
+ fileMenu->addAction(newAct);
+ fileToolBar->addAction(newAct);
+
+//! [qaction setup]
+ const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(":/images/open.png"));
+ QAction *openAct = new QAction(openIcon, tr("&Open..."), this);
+ openAct->setShortcuts(QKeySequence::Open);
+ openAct->setStatusTip(tr("Open an existing file"));
+ connect(openAct, &QAction::triggered, this, &MainWindow::open);
+ fileMenu->addAction(openAct);
+ fileToolBar->addAction(openAct);
+//! [qaction setup]
+
+ const QIcon saveIcon = QIcon::fromTheme("document-save", QIcon(":/images/save.png"));
+ saveAct = new QAction(saveIcon, tr("&Save"), this);
+ saveAct->setShortcuts(QKeySequence::Save);
+ saveAct->setStatusTip(tr("Save the document to disk"));
+ connect(saveAct, &QAction::triggered, this, &MainWindow::save);
+ fileToolBar->addAction(saveAct);
+
+ const QIcon saveAsIcon = QIcon::fromTheme("document-save-as");
+ saveAsAct = new QAction(saveAsIcon, tr("Save &As..."), this);
+ saveAsAct->setShortcuts(QKeySequence::SaveAs);
+ saveAsAct->setStatusTip(tr("Save the document under a new name"));
+ connect(saveAsAct, &QAction::triggered, this, &MainWindow::saveAs);
+ fileMenu->addAction(saveAsAct);
+
+ fileMenu->addSeparator();
+
+ QMenu *recentMenu = fileMenu->addMenu(tr("Recent..."));
+ connect(recentMenu, &QMenu::aboutToShow, this, &MainWindow::updateRecentFileActions);
+ recentFileSubMenuAct = recentMenu->menuAction();
+
+ for (int i = 0; i < MaxRecentFiles; ++i) {
+ recentFileActs[i] = recentMenu->addAction(QString(), this, &MainWindow::openRecentFile);
+ recentFileActs[i]->setVisible(false);
+ }
+
+ recentFileSeparator = fileMenu->addSeparator();
+
+ setRecentFilesVisible(MainWindow::hasRecentFiles());
+
+ fileMenu->addAction(tr("Switch layout direction"), this, &MainWindow::switchLayoutDirection);
+
+ fileMenu->addSeparator();
+
+//! [0]
+ const QIcon exitIcon = QIcon::fromTheme("application-exit");
+ QAction *exitAct = fileMenu->addAction(exitIcon, tr("E&xit"), qApp, &QApplication::quit);
+ exitAct->setShortcuts(QKeySequence::Quit);
+ exitAct->setStatusTip(tr("Exit the application"));
+ fileMenu->addAction(exitAct);
+//! [0]
+
+#ifndef QT_NO_CLIPBOARD
+ QMenu *editMenu = menuBar()->addMenu(tr("&Edit"));
+ QToolBar *editToolBar = addToolBar(tr("Edit"));
+
+ const QIcon cutIcon = QIcon::fromTheme("edit-cut", QIcon(":/images/cut.png"));
+ cutAct = new QAction(cutIcon, tr("Cu&t"), this);
+ cutAct->setShortcuts(QKeySequence::Cut);
+ cutAct->setStatusTip(tr("Cut the current selection's contents to the "
+ "clipboard"));
+ connect(cutAct, &QAction::triggered, this, &MainWindow::cut);
+ editMenu->addAction(cutAct);
+ editToolBar->addAction(cutAct);
+
+ const QIcon copyIcon = QIcon::fromTheme("edit-copy", QIcon(":/images/copy.png"));
+ copyAct = new QAction(copyIcon, tr("&Copy"), this);
+ copyAct->setShortcuts(QKeySequence::Copy);
+ copyAct->setStatusTip(tr("Copy the current selection's contents to the "
+ "clipboard"));
+ connect(copyAct, &QAction::triggered, this, &MainWindow::copy);
+ editMenu->addAction(copyAct);
+ editToolBar->addAction(copyAct);
+
+ const QIcon pasteIcon = QIcon::fromTheme("edit-paste", QIcon(":/images/paste.png"));
+ pasteAct = new QAction(pasteIcon, tr("&Paste"), this);
+ pasteAct->setShortcuts(QKeySequence::Paste);
+ pasteAct->setStatusTip(tr("Paste the clipboard's contents into the current "
+ "selection"));
+ connect(pasteAct, &QAction::triggered, this, &MainWindow::paste);
+ editMenu->addAction(pasteAct);
+ editToolBar->addAction(pasteAct);
+#endif
+
+ windowMenu = menuBar()->addMenu(tr("&Window"));
+ connect(windowMenu, &QMenu::aboutToShow, this, &MainWindow::updateWindowMenu);
+
+ newWindowAct = new QAction(tr("&New view"), this);
+ newWindowAct->setStatusTip(tr("Make another window viewing the same document"));
+ connect(newWindowAct, &QAction::triggered,
+ this, &MainWindow::newSubWindow);
+
+ closeAct = new QAction(tr("Cl&ose"), this);
+ closeAct->setStatusTip(tr("Close the active window"));
+ connect(closeAct, &QAction::triggered,
+ mdiArea, &QMdiArea::closeActiveSubWindow);
+
+ closeAllAct = new QAction(tr("Close &All"), this);
+ closeAllAct->setStatusTip(tr("Close all the windows"));
+ connect(closeAllAct, &QAction::triggered, mdiArea, &QMdiArea::closeAllSubWindows);
+
+ tileAct = new QAction(tr("&Tile"), this);
+ tileAct->setStatusTip(tr("Tile the windows"));
+ connect(tileAct, &QAction::triggered, mdiArea, &QMdiArea::tileSubWindows);
+
+ cascadeAct = new QAction(tr("&Cascade"), this);
+ cascadeAct->setStatusTip(tr("Cascade the windows"));
+ connect(cascadeAct, &QAction::triggered, mdiArea, &QMdiArea::cascadeSubWindows);
+
+ nextAct = new QAction(tr("Ne&xt"), this);
+ nextAct->setShortcuts(QKeySequence::NextChild);
+ nextAct->setStatusTip(tr("Move the focus to the next window"));
+ connect(nextAct, &QAction::triggered, mdiArea, &QMdiArea::activateNextSubWindow);
+
+ previousAct = new QAction(tr("Pre&vious"), this);
+ previousAct->setShortcuts(QKeySequence::PreviousChild);
+ previousAct->setStatusTip(tr("Move the focus to the previous "
+ "window"));
+ connect(previousAct, &QAction::triggered, mdiArea, &QMdiArea::activatePreviousSubWindow);
+
+ windowMenuSeparatorAct = new QAction(this);
+ windowMenuSeparatorAct->setSeparator(true);
+
+ updateWindowMenu();
+
+ menuBar()->addSeparator();
+
+ QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
+
+ QAction *aboutAct = helpMenu->addAction(tr("&About"), this, &MainWindow::about);
+ aboutAct->setStatusTip(tr("Show the application's About box"));
+
+ QAction *aboutQtAct = helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt);
+ aboutQtAct->setStatusTip(tr("Show the Qt library's About box"));
+}
+
+void MainWindow::createStatusBar()
+{
+ statusBar()->showMessage(tr("Ready"));
+}
+
+void MainWindow::readSettings()
+{
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+ const QByteArray geometry = settings.value("geometry", QByteArray()).toByteArray();
+ if (geometry.isEmpty()) {
+ const QRect availableGeometry = screen()->availableGeometry();
+ resize(availableGeometry.width() / 3, availableGeometry.height() / 2);
+ move((availableGeometry.width() - width()) / 2,
+ (availableGeometry.height() - height()) / 2);
+ } else {
+ restoreGeometry(geometry);
+ }
+}
+
+void MainWindow::writeSettings()
+{
+ QSettings settings(QCoreApplication::organizationName(), QCoreApplication::applicationName());
+ settings.setValue("geometry", saveGeometry());
+}
+
+MdiChild *MainWindow::activeMdiChild() const
+{
+ if (QMdiSubWindow *activeSubWindow = mdiArea->activeSubWindow())
+ return qobject_cast<MdiChild *>(activeSubWindow->widget());
+ return nullptr;
+}
+
+QMdiSubWindow *MainWindow::findMdiChild(const QString &fileName) const
+{
+ QString canonicalFilePath = QFileInfo(fileName).canonicalFilePath();
+
+ const QList<QMdiSubWindow *> subWindows = mdiArea->subWindowList();
+ for (QMdiSubWindow *window : subWindows) {
+ MdiChild *mdiChild = qobject_cast<MdiChild *>(window->widget());
+ if (mdiChild->currentFile() == canonicalFilePath)
+ return window;
+ }
+ return nullptr;
+}
+
+void MainWindow::switchLayoutDirection()
+{
+ if (layoutDirection() == Qt::LeftToRight)
+ QGuiApplication::setLayoutDirection(Qt::RightToLeft);
+ else
+ QGuiApplication::setLayoutDirection(Qt::LeftToRight);
+}
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/mainwindow.h b/tests/manual/examples/widgets/mainwindows/mdi/mainwindow.h
new file mode 100644
index 0000000000..c8b720e216
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/mainwindow.h
@@ -0,0 +1,87 @@
+// 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>
+
+class MdiChild;
+QT_BEGIN_NAMESPACE
+class QAction;
+class QMenu;
+class QMdiArea;
+class QMdiSubWindow;
+class QTextDocument;
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow();
+
+ bool openFile(const QString &fileName);
+
+protected:
+ void closeEvent(QCloseEvent *event) override;
+
+private slots:
+ void newFile();
+ void open();
+ void save();
+ void saveAs();
+ void updateRecentFileActions();
+ void openRecentFile();
+#ifndef QT_NO_CLIPBOARD
+ void cut();
+ void copy();
+ void paste();
+#endif
+ void about();
+ void updateMenus();
+ void updateWindowMenu();
+ MdiChild *createMdiChild(MdiChild *other = nullptr);
+ void switchLayoutDirection();
+ void newSubWindow();
+
+private:
+ enum { MaxRecentFiles = 5 };
+
+ void createActions();
+ void createStatusBar();
+ void readSettings();
+ void writeSettings();
+ bool loadFile(const QString &fileName);
+ static bool hasRecentFiles();
+ void prependToRecentFiles(const QString &fileName);
+ void setRecentFilesVisible(bool visible);
+ MdiChild *activeMdiChild() const;
+ QMdiSubWindow *findMdiChild(const QString &fileName) const;
+
+ QMdiArea *mdiArea;
+
+ QMenu *windowMenu;
+ QAction *newAct;
+ QAction *saveAct;
+ QAction *saveAsAct;
+ QAction *recentFileActs[MaxRecentFiles];
+ QAction *recentFileSeparator;
+ QAction *recentFileSubMenuAct;
+#ifndef QT_NO_CLIPBOARD
+ QAction *cutAct;
+ QAction *copyAct;
+ QAction *pasteAct;
+#endif
+ QAction *newWindowAct;
+ QAction *closeAct;
+ QAction *closeAllAct;
+ QAction *tileAct;
+ QAction *cascadeAct;
+ QAction *nextAct;
+ QAction *previousAct;
+ QAction *windowMenuSeparatorAct;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/mdi.pro b/tests/manual/examples/widgets/mainwindows/mdi/mdi.pro
new file mode 100644
index 0000000000..f2c236f7e2
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/mdi.pro
@@ -0,0 +1,13 @@
+QT += widgets
+requires(qtConfig(filedialog))
+
+HEADERS = mainwindow.h \
+ mdichild.h
+SOURCES = main.cpp \
+ mainwindow.cpp \
+ mdichild.cpp
+RESOURCES = mdi.qrc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/mainwindows/mdi
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/mdi.qrc b/tests/manual/examples/widgets/mainwindows/mdi/mdi.qrc
new file mode 100644
index 0000000000..0a776fab4d
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/mdi.qrc
@@ -0,0 +1,10 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>images/copy.png</file>
+ <file>images/cut.png</file>
+ <file>images/new.png</file>
+ <file>images/open.png</file>
+ <file>images/paste.png</file>
+ <file>images/save.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/mdichild.cpp b/tests/manual/examples/widgets/mainwindows/mdi/mdichild.cpp
new file mode 100644
index 0000000000..b922826ae3
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/mdichild.cpp
@@ -0,0 +1,158 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+
+#include "mdichild.h"
+
+MdiChild::MdiChild(MdiChild *other)
+{
+ setAttribute(Qt::WA_DeleteOnClose);
+ if (other) {
+ auto *doc = other->document();
+ setDocument(doc);
+ setWindowModified(other->isWindowModified());
+ connect(doc, &QTextDocument::contentsChanged,
+ this, &MdiChild::documentWasModified);
+ curFile = other->curFile;
+ setWindowTitle(userFriendlyCurrentFile() + "[*]");
+ }
+}
+
+void MdiChild::newFile()
+{
+ static int sequenceNumber = 1;
+
+ isUntitled = true;
+ curFile = tr("document%1.txt").arg(sequenceNumber++);
+ setWindowTitle(curFile + "[*]");
+
+ connect(document(), &QTextDocument::contentsChanged,
+ this, &MdiChild::documentWasModified);
+}
+
+bool MdiChild::loadFile(const QString &fileName)
+{
+ QFile file(fileName);
+ if (!file.open(QFile::ReadOnly | QFile::Text)) {
+ QMessageBox::warning(this, tr("MDI"),
+ tr("Cannot read file %1:\n%2.")
+ .arg(fileName)
+ .arg(file.errorString()));
+ return false;
+ }
+
+ QTextStream in(&file);
+ QGuiApplication::setOverrideCursor(Qt::WaitCursor);
+ setPlainText(in.readAll());
+ QGuiApplication::restoreOverrideCursor();
+
+ setCurrentFile(fileName);
+
+ connect(document(), &QTextDocument::contentsChanged,
+ this, &MdiChild::documentWasModified);
+
+ return true;
+}
+
+bool MdiChild::save()
+{
+ if (isUntitled) {
+ return saveAs();
+ } else {
+ return saveFile(curFile);
+ }
+}
+
+bool MdiChild::saveAs()
+{
+ QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
+ curFile);
+ if (fileName.isEmpty())
+ return false;
+
+ return saveFile(fileName);
+}
+
+bool MdiChild::saveFile(const QString &fileName)
+{
+ QString errorMessage;
+
+ QGuiApplication::setOverrideCursor(Qt::WaitCursor);
+ QSaveFile file(fileName);
+ if (file.open(QFile::WriteOnly | QFile::Text)) {
+ QTextStream out(&file);
+ out << toPlainText();
+ if (!file.commit()) {
+ errorMessage = tr("Cannot write file %1:\n%2.")
+ .arg(QDir::toNativeSeparators(fileName), file.errorString());
+ }
+ } else {
+ errorMessage = tr("Cannot open file %1 for writing:\n%2.")
+ .arg(QDir::toNativeSeparators(fileName), file.errorString());
+ }
+ QGuiApplication::restoreOverrideCursor();
+
+ if (!errorMessage.isEmpty()) {
+ QMessageBox::warning(this, tr("MDI"), errorMessage);
+ return false;
+ }
+
+ setCurrentFile(fileName);
+ return true;
+}
+
+QString MdiChild::userFriendlyCurrentFile()
+{
+ return strippedName(curFile);
+}
+
+void MdiChild::closeEvent(QCloseEvent *event)
+{
+ if (maybeSave()) {
+ event->accept();
+ } else {
+ event->ignore();
+ }
+}
+
+void MdiChild::documentWasModified()
+{
+ setWindowModified(document()->isModified());
+}
+
+bool MdiChild::maybeSave()
+{
+ if (!document()->isModified())
+ return true;
+ const QMessageBox::StandardButton ret
+ = QMessageBox::warning(this, tr("MDI"),
+ tr("'%1' has been modified.\n"
+ "Do you want to save your changes?")
+ .arg(userFriendlyCurrentFile()),
+ QMessageBox::Save | QMessageBox::Discard
+ | QMessageBox::Cancel);
+ switch (ret) {
+ case QMessageBox::Save:
+ return save();
+ case QMessageBox::Cancel:
+ return false;
+ default:
+ break;
+ }
+ return true;
+}
+
+void MdiChild::setCurrentFile(const QString &fileName)
+{
+ curFile = QFileInfo(fileName).canonicalFilePath();
+ isUntitled = false;
+ document()->setModified(false);
+ setWindowModified(false);
+ setWindowTitle(userFriendlyCurrentFile() + "[*]");
+}
+
+QString MdiChild::strippedName(const QString &fullFileName)
+{
+ return QFileInfo(fullFileName).fileName();
+}
diff --git a/tests/manual/examples/widgets/mainwindows/mdi/mdichild.h b/tests/manual/examples/widgets/mainwindows/mdi/mdichild.h
new file mode 100644
index 0000000000..813a845594
--- /dev/null
+++ b/tests/manual/examples/widgets/mainwindows/mdi/mdichild.h
@@ -0,0 +1,39 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MDICHILD_H
+#define MDICHILD_H
+
+#include <QTextEdit>
+
+class MdiChild : public QTextEdit
+{
+ Q_OBJECT
+
+public:
+ MdiChild(MdiChild *other = nullptr);
+
+ void newFile();
+ bool loadFile(const QString &fileName);
+ bool save();
+ bool saveAs();
+ bool saveFile(const QString &fileName);
+ QString userFriendlyCurrentFile();
+ QString currentFile() { return curFile; }
+
+protected:
+ void closeEvent(QCloseEvent *event) override;
+
+private slots:
+ void documentWasModified();
+
+private:
+ bool maybeSave();
+ void setCurrentFile(const QString &fileName);
+ QString strippedName(const QString &fullFileName);
+
+ QString curFile;
+ bool isUntitled = true;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/painting/fontsampler/CMakeLists.txt b/tests/manual/examples/widgets/painting/fontsampler/CMakeLists.txt
new file mode 100644
index 0000000000..576bd122a0
--- /dev/null
+++ b/tests/manual/examples/widgets/painting/fontsampler/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(fontsampler LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/painting/fontsampler")
+
+find_package(Qt6
+ REQUIRED COMPONENTS Core Gui Widgets
+ OPTIONAL_COMPONENTS PrintSupport
+)
+
+qt_standard_project_setup()
+
+qt_add_executable(fontsampler
+ main.cpp
+ mainwindow.cpp mainwindow.h
+ mainwindowbase.ui
+)
+
+set_target_properties(fontsampler PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(fontsampler PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+if(TARGET Qt6::PrintSupport)
+ target_link_libraries(fontsampler PRIVATE Qt6::PrintSupport)
+endif()
+
+install(TARGETS fontsampler
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/painting/fontsampler/fontsampler.pro b/tests/manual/examples/widgets/painting/fontsampler/fontsampler.pro
new file mode 100644
index 0000000000..5d3461f4b8
--- /dev/null
+++ b/tests/manual/examples/widgets/painting/fontsampler/fontsampler.pro
@@ -0,0 +1,12 @@
+QT += widgets
+requires(qtConfig(combobox))
+qtHaveModule(printsupport): QT += printsupport
+
+FORMS = mainwindowbase.ui
+HEADERS = mainwindow.h
+SOURCES = main.cpp \
+ mainwindow.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/painting/fontsampler
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/painting/fontsampler/main.cpp b/tests/manual/examples/widgets/painting/fontsampler/main.cpp
new file mode 100644
index 0000000000..7d7cf3e573
--- /dev/null
+++ b/tests/manual/examples/widgets/painting/fontsampler/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow window;
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/painting/fontsampler/mainwindow.cpp b/tests/manual/examples/widgets/painting/fontsampler/mainwindow.cpp
new file mode 100644
index 0000000000..e2bd768f79
--- /dev/null
+++ b/tests/manual/examples/widgets/painting/fontsampler/mainwindow.cpp
@@ -0,0 +1,314 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#if defined(QT_PRINTSUPPORT_LIB)
+#include <QtPrintSupport/qtprintsupportglobal.h>
+#if QT_CONFIG(printdialog)
+#include <QPrinter>
+#include <QPrintDialog>
+#if QT_CONFIG(printpreviewdialog)
+#include <QPrintPreviewDialog>
+#endif
+#endif
+#endif
+
+#include "mainwindow.h"
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+{
+ setupUi(this);
+
+ sampleSizes << 32 << 24 << 16 << 14 << 12 << 8 << 4 << 2 << 1;
+ markedCount = 0;
+ setupFontTree();
+
+ connect(quitAction, &QAction::triggered,
+ qApp, &QApplication::quit);
+ connect(fontTree, &QTreeWidget::currentItemChanged,
+ this, &MainWindow::showFont);
+ connect(fontTree, &QTreeWidget::itemChanged,
+ this, &MainWindow::updateStyles);
+
+ fontTree->topLevelItem(0)->setSelected(true);
+ showFont(fontTree->topLevelItem(0));
+}
+
+void MainWindow::setupFontTree()
+{
+ fontTree->setColumnCount(1);
+ fontTree->setHeaderLabels({ tr("Font") });
+
+ const QStringList fontFamilies = QFontDatabase::families();
+ for (const QString &family : fontFamilies) {
+ const QStringList styles = QFontDatabase::styles(family);
+ if (styles.isEmpty())
+ continue;
+
+ QTreeWidgetItem *familyItem = new QTreeWidgetItem(fontTree);
+ familyItem->setText(0, family);
+ familyItem->setCheckState(0, Qt::Unchecked);
+ familyItem->setFlags(familyItem->flags() | Qt::ItemIsAutoTristate);
+
+ for (const QString &style : styles) {
+ QTreeWidgetItem *styleItem = new QTreeWidgetItem(familyItem);
+ styleItem->setText(0, style);
+ styleItem->setCheckState(0, Qt::Unchecked);
+ styleItem->setData(0, Qt::UserRole, QVariant(QFontDatabase::weight(family, style)));
+ styleItem->setData(0, Qt::UserRole + 1, QVariant(QFontDatabase::italic(family, style)));
+ }
+ }
+}
+
+void MainWindow::on_clearAction_triggered()
+{
+ const QList<QTreeWidgetItem *> items = fontTree->selectedItems();
+ for (QTreeWidgetItem *item : items)
+ item->setSelected(false);
+ fontTree->currentItem()->setSelected(true);
+}
+
+void MainWindow::on_markAction_triggered()
+{
+ markUnmarkFonts(Qt::Checked);
+}
+
+void MainWindow::on_unmarkAction_triggered()
+{
+ markUnmarkFonts(Qt::Unchecked);
+}
+
+void MainWindow::markUnmarkFonts(Qt::CheckState state)
+{
+ const QList<QTreeWidgetItem *> items = fontTree->selectedItems();
+ for (QTreeWidgetItem *item : items) {
+ if (item->checkState(0) != state)
+ item->setCheckState(0, state);
+ }
+}
+
+void MainWindow::showFont(QTreeWidgetItem *item)
+{
+ if (!item)
+ return;
+
+ QString family;
+ QString style;
+ int weight;
+ bool italic;
+
+ if (item->parent()) {
+ family = item->parent()->text(0);
+ style = item->text(0);
+ weight = item->data(0, Qt::UserRole).toInt();
+ italic = item->data(0, Qt::UserRole + 1).toBool();
+ } else {
+ family = item->text(0);
+ style = item->child(0)->text(0);
+ weight = item->child(0)->data(0, Qt::UserRole).toInt();
+ italic = item->child(0)->data(0, Qt::UserRole + 1).toBool();
+ }
+
+ QString oldText = textEdit->toPlainText().trimmed();
+ bool modified = textEdit->document()->isModified();
+ textEdit->clear();
+ QFont font(family, 32, weight, italic);
+ font.setStyleName(style);
+ textEdit->document()->setDefaultFont(font);
+
+ QTextCursor cursor = textEdit->textCursor();
+ QTextBlockFormat blockFormat;
+ blockFormat.setAlignment(Qt::AlignCenter);
+ cursor.insertBlock(blockFormat);
+
+ if (modified)
+ cursor.insertText(QString(oldText));
+ else
+ cursor.insertText(QString("%1 %2").arg(family).arg(style));
+
+ textEdit->document()->setModified(modified);
+}
+
+void MainWindow::updateStyles(QTreeWidgetItem *item, int column)
+{
+ if (!item || column != 0)
+ return;
+
+ Qt::CheckState state = item->checkState(0);
+ QTreeWidgetItem *parent = item->parent();
+
+ if (parent) {
+ // Only count style items.
+ if (state == Qt::Checked)
+ ++markedCount;
+ else
+ --markedCount;
+ }
+
+ printAction->setEnabled(markedCount > 0);
+ printPreviewAction->setEnabled(markedCount > 0);
+}
+
+QMap<QString, StyleItems> MainWindow::currentPageMap()
+{
+ QMap<QString, StyleItems> pageMap;
+
+ for (int row = 0; row < fontTree->topLevelItemCount(); ++row) {
+ QTreeWidgetItem *familyItem = fontTree->topLevelItem(row);
+ QString family;
+
+ if (familyItem->checkState(0) == Qt::Checked) {
+ family = familyItem->text(0);
+ pageMap[family] = StyleItems();
+ }
+
+ for (int childRow = 0; childRow < familyItem->childCount(); ++childRow) {
+ QTreeWidgetItem *styleItem = familyItem->child(childRow);
+ if (styleItem->checkState(0) == Qt::Checked)
+ pageMap[family].append(styleItem);
+ }
+ }
+
+ return pageMap;
+}
+
+void MainWindow::on_printAction_triggered()
+{
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
+ pageMap = currentPageMap();
+
+ if (pageMap.count() == 0)
+ return;
+
+ QPrinter printer(QPrinter::HighResolution);
+ QPrintDialog dialog(&printer, this);
+ if (dialog.exec() != QDialog::Accepted)
+ return;
+
+ int from = printer.fromPage();
+ int to = printer.toPage();
+ if (from <= 0 && to <= 0)
+ printer.setFromTo(1, pageMap.keys().count());
+
+ printDocument(&printer);
+#endif
+}
+
+void MainWindow::printDocument(QPrinter *printer)
+{
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
+ printer->setFromTo(1, pageMap.count());
+
+ QProgressDialog progress(tr("Preparing font samples..."), tr("&Cancel"),
+ 0, pageMap.count(), this);
+ progress.setWindowModality(Qt::ApplicationModal);
+ progress.setWindowTitle(tr("Font Sampler"));
+ progress.setMinimum(printer->fromPage() - 1);
+ progress.setMaximum(printer->toPage());
+
+ QPainter painter;
+ painter.begin(printer);
+ bool firstPage = true;
+
+ for (int page = printer->fromPage(); page <= printer->toPage(); ++page) {
+
+ if (!firstPage)
+ printer->newPage();
+
+ qApp->processEvents();
+ if (progress.wasCanceled())
+ break;
+
+ printPage(page - 1, &painter, printer);
+ progress.setValue(page);
+ firstPage = false;
+ }
+
+ painter.end();
+#endif
+}
+
+void MainWindow::on_printPreviewAction_triggered()
+{
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printpreviewdialog)
+ pageMap = currentPageMap();
+
+ if (pageMap.count() == 0)
+ return;
+
+ QPrinter printer(QPrinter::HighResolution);
+ QPrintPreviewDialog preview(&printer, this);
+ connect(&preview, &QPrintPreviewDialog::paintRequested,
+ this, &MainWindow::printDocument);
+ preview.exec();
+#endif
+}
+
+void MainWindow::printPage(int index, QPainter *painter, QPrinter *printer)
+{
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
+ const QString family = std::next(pageMap.begin(), index).key();
+ const StyleItems items = pageMap.value(family);
+
+ // Find the dimensions of the text on each page.
+ qreal width = 0.0;
+ qreal height = 0.0;
+ for (const QTreeWidgetItem *item : items) {
+ QString style = item->text(0);
+ int weight = item->data(0, Qt::UserRole).toInt();
+ bool italic = item->data(0, Qt::UserRole + 1).toBool();
+
+ // Calculate the maximum width and total height of the text.
+ for (int size : std::as_const(sampleSizes)) {
+ QFont font(family, size, weight, italic);
+ font.setStyleName(style);
+ font = QFont(font, painter->device());
+ QFontMetricsF fontMetrics(font);
+ QRectF rect = fontMetrics.boundingRect(
+ QString("%1 %2").arg(family).arg(style));
+ width = qMax(rect.width(), width);
+ height += rect.height();
+ }
+ }
+
+ qreal xScale = printer->pageRect(QPrinter::DevicePixel).width() / width;
+ qreal yScale = printer->pageRect(QPrinter::DevicePixel).height() / height;
+ qreal scale = qMin(xScale, yScale);
+
+ qreal remainingHeight = printer->pageRect(QPrinter::DevicePixel).height()/scale - height;
+ qreal spaceHeight = (remainingHeight / 4.0) / (items.count() + 1);
+ qreal interLineHeight = (remainingHeight / 4.0) / (sampleSizes.count() * items.count());
+
+ painter->save();
+ painter->translate(printer->pageRect(QPrinter::DevicePixel).width() / 2.0, printer->pageRect(QPrinter::DevicePixel).height() / 2.0);
+ painter->scale(scale, scale);
+ painter->setBrush(QBrush(Qt::black));
+
+ qreal x = -width / 2.0;
+ qreal y = -height / 2.0 - remainingHeight / 4.0 + spaceHeight;
+
+ for (const QTreeWidgetItem *item : items) {
+ QString style = item->text(0);
+ int weight = item->data(0, Qt::UserRole).toInt();
+ bool italic = item->data(0, Qt::UserRole + 1).toBool();
+
+ // Draw each line of text.
+ for (int size : std::as_const(sampleSizes)) {
+ QFont font(family, size, weight, italic);
+ font.setStyleName(style);
+ font = QFont(font, painter->device());
+ QFontMetricsF fontMetrics(font);
+ QRectF rect = fontMetrics.boundingRect(QString("%1 %2").arg(
+ font.family()).arg(style));
+ y += rect.height();
+ painter->setFont(font);
+ painter->drawText(QPointF(x, y), QString("%1 %2").arg(family).arg(style));
+ y += interLineHeight;
+ }
+ y += spaceHeight;
+ }
+
+ painter->restore();
+#endif
+}
diff --git a/tests/manual/examples/widgets/painting/fontsampler/mainwindow.h b/tests/manual/examples/widgets/painting/fontsampler/mainwindow.h
new file mode 100644
index 0000000000..131fb06312
--- /dev/null
+++ b/tests/manual/examples/widgets/painting/fontsampler/mainwindow.h
@@ -0,0 +1,54 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include "ui_mainwindowbase.h"
+
+#if defined(QT_PRINTSUPPORT_LIB)
+#include <QtPrintSupport/qtprintsupportglobal.h>
+#endif
+
+#include <QList>
+#include <QMap>
+#include <QString>
+
+QT_BEGIN_NAMESPACE
+class QPrinter;
+class QTextEdit;
+class QTreeWidget;
+class QTreeWidgetItem;
+QT_END_NAMESPACE
+
+typedef QList<QTreeWidgetItem *> StyleItems;
+
+class MainWindow : public QMainWindow, private Ui::MainWindowBase
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+
+public slots:
+ void on_clearAction_triggered();
+ void on_markAction_triggered();
+ void on_unmarkAction_triggered();
+ void on_printAction_triggered();
+ void on_printPreviewAction_triggered();
+ void printDocument(QPrinter *printer);
+ void printPage(int index, QPainter *painter, QPrinter *printer);
+ void showFont(QTreeWidgetItem *item);
+ void updateStyles(QTreeWidgetItem *item, int column);
+
+private:
+ QMap<QString, StyleItems> currentPageMap();
+ void markUnmarkFonts(Qt::CheckState state);
+ void setupFontTree();
+
+ QList<int> sampleSizes;
+ QMap<QString, StyleItems> pageMap;
+ int markedCount;
+};
+
+#endif // MAINWINDOW_H
diff --git a/tests/manual/examples/widgets/painting/fontsampler/mainwindowbase.ui b/tests/manual/examples/widgets/painting/fontsampler/mainwindowbase.ui
new file mode 100644
index 0000000000..1a95ebd6d1
--- /dev/null
+++ b/tests/manual/examples/widgets/painting/fontsampler/mainwindowbase.ui
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>MainWindowBase</class>
+ <widget class="QMainWindow" name="MainWindowBase">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>345</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Font Sampler</string>
+ </property>
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>9</number>
+ </property>
+ <item>
+ <widget class="QTextEdit" name="textEdit"/>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menubar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>18</height>
+ </rect>
+ </property>
+ <widget class="QMenu" name="menu_Selection">
+ <property name="title">
+ <string>&amp;Selection</string>
+ </property>
+ <addaction name="markAction"/>
+ <addaction name="unmarkAction"/>
+ <addaction name="clearAction"/>
+ </widget>
+ <widget class="QMenu" name="menu_File">
+ <property name="title">
+ <string>&amp;File</string>
+ </property>
+ <addaction name="printPreviewAction"/>
+ <addaction name="printAction"/>
+ <addaction name="quitAction"/>
+ </widget>
+ <addaction name="menu_File"/>
+ <addaction name="menu_Selection"/>
+ </widget>
+ <widget class="QStatusBar" name="statusbar"/>
+ <widget class="QDockWidget" name="dockWidget">
+ <property name="features">
+ <set>QDockWidget::DockWidgetFloatable|QDockWidget::DockWidgetMovable</set>
+ </property>
+ <property name="windowTitle">
+ <string>Available Fonts</string>
+ </property>
+ <attribute name="dockWidgetArea">
+ <number>1</number>
+ </attribute>
+ <widget class="QWidget" name="dockWidgetContents">
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>9</number>
+ </property>
+ <item>
+ <widget class="QTreeWidget" name="fontTree">
+ <property name="selectionMode">
+ <enum>QAbstractItemView::ExtendedSelection</enum>
+ </property>
+ <column>
+ <property name="text">
+ <string notr="true">1</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </widget>
+ <action name="printAction">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>&amp;Print...</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+P</string>
+ </property>
+ </action>
+ <action name="quitAction">
+ <property name="text">
+ <string>E&amp;xit</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+Q</string>
+ </property>
+ </action>
+ <action name="markAction">
+ <property name="text">
+ <string>&amp;Mark</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+M</string>
+ </property>
+ </action>
+ <action name="unmarkAction">
+ <property name="text">
+ <string>&amp;Unmark</string>
+ </property>
+ <property name="shortcut">
+ <string>Ctrl+U</string>
+ </property>
+ </action>
+ <action name="clearAction">
+ <property name="text">
+ <string>&amp;Clear</string>
+ </property>
+ </action>
+ <action name="printPreviewAction">
+ <property name="enabled">
+ <bool>false</bool>
+ </property>
+ <property name="text">
+ <string>Print Preview...</string>
+ </property>
+ </action>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/examples/widgets/richtext/calendar/CMakeLists.txt b/tests/manual/examples/widgets/richtext/calendar/CMakeLists.txt
new file mode 100644
index 0000000000..7b8e10060b
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/calendar/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(calendar LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/richtext/calendar")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(calendar
+ main.cpp
+ mainwindow.cpp mainwindow.h
+)
+
+set_target_properties(calendar PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(calendar PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS calendar
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/richtext/calendar/calendar.pro b/tests/manual/examples/widgets/richtext/calendar/calendar.pro
new file mode 100644
index 0000000000..199c1dbb8d
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/calendar/calendar.pro
@@ -0,0 +1,10 @@
+QT += widgets
+requires(qtConfig(combobox))
+
+HEADERS = mainwindow.h
+SOURCES = main.cpp \
+ mainwindow.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/richtext/calendar
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/richtext/calendar/main.cpp b/tests/manual/examples/widgets/richtext/calendar/main.cpp
new file mode 100644
index 0000000000..5641ae527a
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/calendar/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow window;
+ window.resize(640, 256);
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/richtext/calendar/mainwindow.cpp b/tests/manual/examples/widgets/richtext/calendar/mainwindow.cpp
new file mode 100644
index 0000000000..0b44c96d46
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/calendar/mainwindow.cpp
@@ -0,0 +1,179 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+
+#include <QtWidgets>
+
+//! [0]
+MainWindow::MainWindow()
+{
+ selectedDate = QDate::currentDate();
+ fontSize = 10;
+
+ QWidget *centralWidget = new QWidget;
+//! [0]
+
+//! [1]
+ QLabel *dateLabel = new QLabel(tr("Date:"));
+ QComboBox *monthCombo = new QComboBox;
+
+ for (int month = 1; month <= 12; ++month)
+ monthCombo->addItem(QLocale::system().monthName(month));
+
+ QDateTimeEdit *yearEdit = new QDateTimeEdit;
+ yearEdit->setDisplayFormat("yyyy");
+ yearEdit->setDateRange(QDate(1753, 1, 1), QDate(8000, 1, 1));
+//! [1]
+
+ monthCombo->setCurrentIndex(selectedDate.month() - 1);
+ yearEdit->setDate(selectedDate);
+
+//! [2]
+ QLabel *fontSizeLabel = new QLabel(tr("Font size:"));
+ QSpinBox *fontSizeSpinBox = new QSpinBox;
+ fontSizeSpinBox->setRange(1, 64);
+
+ editor = new QTextBrowser;
+ insertCalendar();
+//! [2]
+
+//! [3]
+ connect(monthCombo, &QComboBox::activated,
+ this, &MainWindow::setMonth);
+ connect(yearEdit, &QDateTimeEdit::dateChanged,
+ this, &MainWindow::setYear);
+ connect(fontSizeSpinBox, &QSpinBox::valueChanged,
+ this, &MainWindow::setFontSize);
+//! [3]
+
+ fontSizeSpinBox->setValue(10);
+
+//! [4]
+ QHBoxLayout *controlsLayout = new QHBoxLayout;
+ controlsLayout->addWidget(dateLabel);
+ controlsLayout->addWidget(monthCombo);
+ controlsLayout->addWidget(yearEdit);
+ controlsLayout->addSpacing(24);
+ controlsLayout->addWidget(fontSizeLabel);
+ controlsLayout->addWidget(fontSizeSpinBox);
+ controlsLayout->addStretch(1);
+
+ QVBoxLayout *centralLayout = new QVBoxLayout;
+ centralLayout->addLayout(controlsLayout);
+ centralLayout->addWidget(editor, 1);
+ centralWidget->setLayout(centralLayout);
+
+ setCentralWidget(centralWidget);
+//! [4]
+}
+
+//! [5]
+void MainWindow::insertCalendar()
+{
+ editor->clear();
+ QTextCursor cursor = editor->textCursor();
+ cursor.beginEditBlock();
+
+ QDate date(selectedDate.year(), selectedDate.month(), 1);
+//! [5]
+
+//! [6]
+ QTextTableFormat tableFormat;
+ tableFormat.setAlignment(Qt::AlignHCenter);
+ tableFormat.setBackground(QColor("#e0e0e0"));
+ tableFormat.setCellPadding(2);
+ tableFormat.setCellSpacing(4);
+//! [6] //! [7]
+ QList<QTextLength> constraints;
+ constraints << QTextLength(QTextLength::PercentageLength, 14)
+ << QTextLength(QTextLength::PercentageLength, 14)
+ << QTextLength(QTextLength::PercentageLength, 14)
+ << QTextLength(QTextLength::PercentageLength, 14)
+ << QTextLength(QTextLength::PercentageLength, 14)
+ << QTextLength(QTextLength::PercentageLength, 14)
+ << QTextLength(QTextLength::PercentageLength, 14);
+ tableFormat.setColumnWidthConstraints(constraints);
+//! [7]
+
+//! [8]
+ QTextTable *table = cursor.insertTable(1, 7, tableFormat);
+//! [8]
+
+//! [9]
+ QTextFrame *frame = cursor.currentFrame();
+ QTextFrameFormat frameFormat = frame->frameFormat();
+ frameFormat.setBorder(1);
+ frame->setFrameFormat(frameFormat);
+//! [9]
+
+//! [10]
+ QTextCharFormat format = cursor.charFormat();
+ format.setFontPointSize(fontSize);
+
+ QTextCharFormat boldFormat = format;
+ boldFormat.setFontWeight(QFont::Bold);
+
+ QTextCharFormat highlightedFormat = boldFormat;
+ highlightedFormat.setBackground(Qt::yellow);
+//! [10]
+
+//! [11]
+ for (int weekDay = 1; weekDay <= 7; ++weekDay) {
+ QTextTableCell cell = table->cellAt(0, weekDay-1);
+//! [11] //! [12]
+ QTextCursor cellCursor = cell.firstCursorPosition();
+ cellCursor.insertText(QLocale::system().dayName(weekDay), boldFormat);
+ }
+//! [12]
+
+//! [13]
+ table->insertRows(table->rows(), 1);
+//! [13]
+
+ while (date.month() == selectedDate.month()) {
+ int weekDay = date.dayOfWeek();
+ QTextTableCell cell = table->cellAt(table->rows()-1, weekDay-1);
+ QTextCursor cellCursor = cell.firstCursorPosition();
+
+ if (date == QDate::currentDate())
+ cellCursor.insertText(QString("%1").arg(date.day()), highlightedFormat);
+ else
+ cellCursor.insertText(QString("%1").arg(date.day()), format);
+
+ date = date.addDays(1);
+ if (weekDay == 7 && date.month() == selectedDate.month())
+ table->insertRows(table->rows(), 1);
+ }
+
+ cursor.endEditBlock();
+//! [14]
+ setWindowTitle(tr("Calendar for %1 %2"
+ ).arg(QLocale::system().monthName(selectedDate.month())
+ ).arg(selectedDate.year()));
+}
+//! [14]
+
+//! [15]
+void MainWindow::setFontSize(int size)
+{
+ fontSize = size;
+ insertCalendar();
+}
+//! [15]
+
+//! [16]
+void MainWindow::setMonth(int month)
+{
+ selectedDate = QDate(selectedDate.year(), month + 1, selectedDate.day());
+ insertCalendar();
+}
+//! [16]
+
+//! [17]
+void MainWindow::setYear(QDate date)
+{
+ selectedDate = QDate(date.year(), selectedDate.month(), selectedDate.day());
+ insertCalendar();
+}
+//! [17]
diff --git a/tests/manual/examples/widgets/richtext/calendar/mainwindow.h b/tests/manual/examples/widgets/richtext/calendar/mainwindow.h
new file mode 100644
index 0000000000..76632820d6
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/calendar/mainwindow.h
@@ -0,0 +1,36 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QDate>
+#include <QMainWindow>
+
+QT_BEGIN_NAMESPACE
+class QTextBrowser;
+QT_END_NAMESPACE
+
+//! [0]
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow();
+
+public slots:
+ void setFontSize(int size);
+ void setMonth(int month);
+ void setYear(QDate date);
+
+private:
+ void insertCalendar();
+
+ int fontSize;
+ QDate selectedDate;
+ QTextBrowser *editor;
+};
+//! [0]
+
+#endif // MAINWINDOW_H
diff --git a/tests/manual/examples/widgets/richtext/textedit/CMakeLists.txt b/tests/manual/examples/widgets/richtext/textedit/CMakeLists.txt
new file mode 100644
index 0000000000..6e8df9134d
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/CMakeLists.txt
@@ -0,0 +1,105 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(textedit LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/richtext/textedit")
+
+find_package(Qt6
+ REQUIRED COMPONENTS Core Gui Widgets
+ OPTIONAL_COMPONENTS PrintSupport
+)
+
+qt_standard_project_setup()
+
+qt_add_executable(textedit
+ main.cpp
+ textedit.cpp textedit.h
+)
+
+set_target_properties(textedit PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(textedit PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+if (TARGET Qt6::PrintSupport)
+ target_link_libraries(textedit PRIVATE Qt6::PrintSupport)
+endif()
+
+# Resources:
+set(textedit_resource_files
+ "example.html"
+ "images/logo32.png"
+ "images/mac/checkbox-checked.png"
+ "images/mac/checkbox.png"
+ "images/mac/editcopy.png"
+ "images/mac/editcut.png"
+ "images/mac/editpaste.png"
+ "images/mac/editredo.png"
+ "images/mac/editundo.png"
+ "images/mac/exportpdf.png"
+ "images/mac/filenew.png"
+ "images/mac/fileopen.png"
+ "images/mac/fileprint.png"
+ "images/mac/filesave.png"
+ "images/mac/format-indent-less.png"
+ "images/mac/format-indent-more.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/textunder.png"
+ "images/mac/textundercolor.png"
+ "images/mac/zoomin.png"
+ "images/mac/zoomout.png"
+ "images/win/checkbox-checked.png"
+ "images/win/checkbox.png"
+ "images/win/editcopy.png"
+ "images/win/editcut.png"
+ "images/win/editpaste.png"
+ "images/win/editredo.png"
+ "images/win/editundo.png"
+ "images/win/exportpdf.png"
+ "images/win/filenew.png"
+ "images/win/fileopen.png"
+ "images/win/fileprint.png"
+ "images/win/filesave.png"
+ "images/win/format-indent-less.png"
+ "images/win/format-indent-more.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/textunder.png"
+ "images/win/textundercolor.png"
+ "images/win/zoomin.png"
+ "images/win/zoomout.png"
+)
+
+qt_add_resources(textedit "textedit"
+ PREFIX
+ "/"
+ FILES
+ ${textedit_resource_files}
+)
+
+install(TARGETS textedit
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/richtext/textedit/example.html b/tests/manual/examples/widgets/richtext/textedit/example.html
new file mode 100644
index 0000000000..ebae3362e9
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/example.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
+<html><head><meta name="qrichtext" content="1" /><meta charset="utf-8" /><title>QTextEdit Example</title><style type="text/css">
+p, li { white-space: pre-wrap; }
+hr { height: 1px; border-width: 0; }
+</style></head><body style=" font-family:'Helvetica'; font-size:9pt; font-weight:400; font-style:normal;">
+<h1 align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:20pt; font-weight:600;">QTextEdit</span></h1>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">The QTextEdit widget is an advanced editor that supports formatted rich text. It can be used to display HTML and other rich document formats. Internally, QTextEdit uses the QTextDocument class to describe both the high-level structure of each document and the low-level formatting of paragraphs.</span></p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;">If you are viewing this document in the <span style=" font-style:italic;">textedit</span> example, you can edit this document to explore Qt's rich text editing features. We have included some comments in each of the following sections to encourage you to experiment. </p>
+<h2 style=" margin-top:16px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:18pt; font-weight:600;"><span style=" font-size:16pt;">Font and Paragraph Styles</span></h2>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">QTextEdit supports </span><span style=" font-size:11pt; font-weight:600;">bold</span><span style=" font-size:11pt;">, </span><span style=" font-size:11pt; font-style:italic;">italic</span><span style=" font-size:11pt;">, and </span><span style=" font-size:11pt; text-decoration: underline;">underlined</span><span style=" font-size:11pt;"> font styles, and can display </span><span style=" font-size:11pt; font-weight:600; color:#00007f;">multicolored</span><span style=" font-size:11pt;"> </span><span style=" font-size:11pt; font-weight:600; color:#aa0000;">text</span><span style=" font-size:11pt;">. Font families such as </span><span style=" font-family:'Times New Roman'; font-size:11pt; font-weight:600;">Times New Roman</span><span style=" font-size:11pt;"> and </span><span style=" font-family:'Courier'; font-size:11pt; font-weight:600;">Courier</span><span style=" font-size:11pt;"> can also be used directly. </span><span style=" font-size:11pt; font-style:italic;">If you place the cursor in a region of styled text, the controls in the tool bars will change to reflect the current style.</span></p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;">Paragraphs can be formatted so that the text is left-aligned, right-aligned, centered, or fully justified.</p>
+<p align="center" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-style:italic;">Try changing the alignment of some text and resize the editor to see how the text layout changes.</span> </p>
+<h2 align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Lists</span></h2>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt; font-weight:600;"><span style=" font-size:11pt; font-weight:400;">Different kinds of lists can be included in rich text documents. Standard bullet lists can be nested, using different symbols for each level of the list: </span></p>
+<ul style="-qt-list-indent: 1;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Disc symbols are typically used for top-level list items. </li></ul>
+<ul type=circle style="-qt-list-indent: 2;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Circle symbols can be used to distinguish between items in lower-level lists.</li></ul>
+<ul type=square style="-qt-list-indent: 3;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Square symbols provide a reasonable alternative to discs and circles. </li></ul>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;">Ordered lists can be created that can be used for tables of contents. Different characters can be used to enumerate items, and we can use both Roman and Arabic numerals in the same list structure: </p>
+<ol style="-qt-list-indent: 1;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Introduction</li>
+<li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qt Tools </li></ol>
+<ol type=a style="-qt-list-indent: 2;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qt Assistant</li>
+<li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qt Designer</li>
+<ol type=A style="-qt-list-indent: 3;"><li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Form Editor</li>
+<li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Component Architecture</li></ol>
+<li style=" font-size:11pt;" style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Qt Linguist</li></ol>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;">The list will automatically be renumbered if you add or remove items. <span style=" font-style:italic;">Try adding new sections to the above list or removing existing item to see the numbers change.</span> </p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p>
+<h2 style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Images</span></h2>
+<p style=" margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt; font-weight:600;"><span style=" font-size:11pt; font-weight:400;">Inline images are treated like ordinary ranges of characters in the text editor, so they flow with the surrounding text. Images can also be selected in the same way as text, making it easy to cut, copy, and paste them. </span></p>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><img src=":/images/logo32.png" /><span style=" font-style:italic;"> Try to select this image by clicking and dragging over it with the mouse, or use the text cursor to select it by holding down Shift and using the arrow keys. You can then cut or copy it, and paste it into different parts of this document.</span></p>
+<h2 align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:16pt; font-weight:600;">Horizontal Rule</span></h2>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Here is an example:</p>
+<hr width="50%" style=" background-color:green;"/>
+<h2 align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Tables</span></h2>
+<p align="justify" style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:16pt; font-weight:600;"><span style=" font-size:11pt; font-weight:400;">QTextEdit can arrange and format tables, supporting features such as row and column spans, text formatting within cells, and size constraints for columns. </span></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p>
+<table border="1" align="center" width="90%" cellspacing="0" cellpadding="4">
+<tr>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"> </p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Development Tools </span></p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Programming Techniques </span></p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Graphical User Interfaces </span></p></td></tr>
+<tr>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">9:00 - 11:00 </span></p></td>
+<td colspan="3">
+<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Introduction to <span style=" font-style:italic;">Qt </span></p></td></tr>
+<tr>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">11:00 - 13:00 </span></p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Using <span style=" font-style:italic;">qmake</span> </p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Object-oriented Programming </p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Layouts in <span style=" font-style:italic;">Qt</span> </p></td></tr>
+<tr>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">13:00 - 15:00 </span></p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Qt Designer</span> Tutorial </p></td>
+<td rowspan="2">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Extreme Programming </p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Writing Custom Styles </p></td></tr>
+<tr>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">15:00 - 17:00 </span></p></td>
+<td>
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-style:italic;">Qt Linguist</span> and Internationalization </p></td>
+<td></td></tr></table>
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"></p>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt; font-style:italic;">Try adding text to the cells in the table and experiment with the alignment of the paragraphs.</p>
+<h2 style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Hyperlinks</span></h2>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:11pt;">QTextEdit is designed to support hyperlinks between documents, and this feature is used extensively in </span><span style=" font-size:11pt; font-style:italic;">Qt Assistant</span><span style=" font-size:11pt;">. Hyperlinks are automatically created when an HTML file is imported into an editor. Since the rich text framework supports hyperlinks natively, they can also be created programmatically.</span></p>
+<h2 style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-size:16pt; font-weight:600;">Undo and Redo</span></h2>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;">Full support for undo and redo operations is built into QTextEdit and the underlying rich text framework. Operations on a document can be packaged together to make editing a more comfortable experience for the user.</p>
+<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:11pt;"><span style=" font-style:italic;">Try making changes to this document and press Ctrl+Z to undo them. You can always recover the original contents of the document.</span> </p></body></html>
diff --git a/tests/manual/examples/widgets/richtext/textedit/example.md b/tests/manual/examples/widgets/richtext/textedit/example.md
new file mode 100644
index 0000000000..15f3c3cacf
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/example.md
@@ -0,0 +1,104 @@
+# QTextEdit
+
+The QTextEdit widget is an advanced editor that supports formatted rich text.
+It can be used to display HTML and other rich document formats. Internally,
+QTextEdit uses the QTextDocument class to describe both the high-level
+structure of each document and the low-level formatting of paragraphs.
+
+If you are viewing this document in the textedit example, you can edit this
+document to explore Qt's rich text editing features. We have included some
+comments in each of the following sections to encourage you to experiment.
+
+## Font and Paragraph Styles
+
+QTextEdit supports **bold**, *italic*, _underline_ &amp; ~~strikethrough~~ font
+styles, and can display
+<span style="font-size:10pt; font-weight:600; color:#00007f;"> multicolored</span>
+text. Font families such as
+<span style="font-family:Times New Roman">Times New Roman</span> and
+<span style="font-family:Courier">Courier</span>
+can also be used directly. *If you place the cursor in a region of styled text,
+the controls in the tool bars will change to reflect the current style.*
+
+Paragraphs can be formatted so that the text is left-aligned, right-aligned,
+centered, or fully justified.
+
+*Try changing the alignment of some text and resize the editor to see how the
+text layout changes.*
+
+## Lists
+
+Different kinds of lists can be included in rich text documents. Standard
+bullet lists can be nested, using different symbols for each level of the list:
+
+- Disc symbols are typically used for top-level list items.
+ * Circle symbols can be used to distinguish between items in lower-level
+ lists.
+ + Square symbols provide a reasonable alternative to discs and circles.
+
+Ordered lists can be created that can be used for tables of contents. Different
+characters can be used to enumerate items, and we can use both Roman and Arabic
+numerals in the same list structure:
+
+1. Introduction
+2. Qt Tools
+ 1) Qt Assistant
+ 2) Qt Designer
+ 1. Form Editor
+ 2. Component Architecture
+ 3) Qt Linguist
+
+The list will automatically be renumbered if you add or remove items. *Try
+adding new sections to the above list or removing existing item to see the
+numbers change.*
+
+Task lists can be used to track progress on projects:
+
+- [ ] This is not yet done
+- This is just a bullet point
+- [x] This is done
+
+## Images
+
+Inline images are treated like ordinary ranges of characters in the text
+editor, so they flow with the surrounding text. Images can also be selected in
+the same way as text, making it easy to cut, copy, and paste them.
+
+![logo](images/logo32.png "logo") *Try to select this image by clicking and
+dragging over it with the mouse, or use the text cursor to select it by holding
+down Shift and using the arrow keys. You can then cut or copy it, and paste it
+into different parts of this document.*
+
+## Tables
+
+QTextEdit can arrange and format tables, supporting features such as row and
+column spans, text formatting within cells, and size constraints for columns.
+
+| | Development Tools | Programming Techniques | Graphical User Interfaces |
+| ------------: | ----------------- | ---------------------- | ------------------------- |
+| 9:00 - 11:00 | Introduction to Qt |||
+| 11:00 - 13:00 | Using qmake | Object-oriented Programming | Layouts in Qt |
+| 13:00 - 15:00 | Qt Designer Tutorial | Extreme Programming | Writing Custom Styles |
+| 15:00 - 17:00 | Qt Linguist and Internationalization | &nbsp; | &nbsp; |
+
+*Try adding text to the cells in the table and experiment with the alignment of
+the paragraphs.*
+
+## Hyperlinks
+
+QTextEdit is designed to support hyperlinks between documents, and this feature
+is used extensively in
+[Qt Assistant](http://doc.qt.io/qt-5/qtassistant-index.html). Hyperlinks are
+automatically created when an HTML file is imported into an editor. Since the
+rich text framework supports hyperlinks natively, they can also be created
+programmatically.
+
+## Undo and Redo
+
+Full support for undo and redo operations is built into QTextEdit and the
+underlying rich text framework. Operations on a document can be packaged
+together to make editing a more comfortable experience for the user.
+
+*Try making changes to this document and press `Ctrl+Z` to undo them. You can
+always recover the original contents of the document.*
+
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/logo32.png b/tests/manual/examples/widgets/richtext/textedit/images/logo32.png
new file mode 100644
index 0000000000..5f91e9873b
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/logo32.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/checkbox-checked.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/checkbox-checked.png
new file mode 100644
index 0000000000..a072d7fb5c
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/checkbox-checked.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/checkbox.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/checkbox.png
new file mode 100644
index 0000000000..4064909712
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/checkbox.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/editcopy.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/editcopy.png
new file mode 100644
index 0000000000..f551364464
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/editcopy.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/editcut.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/editcut.png
new file mode 100644
index 0000000000..a784fd5709
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/editcut.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/editpaste.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/editpaste.png
new file mode 100644
index 0000000000..64c0b2d6ab
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/editpaste.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/editredo.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/editredo.png
new file mode 100644
index 0000000000..8875bf246c
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/editredo.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/editundo.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/editundo.png
new file mode 100644
index 0000000000..a3bd5e0bf2
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/editundo.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/exportpdf.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/exportpdf.png
new file mode 100644
index 0000000000..9e199407af
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/exportpdf.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/filenew.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/filenew.png
new file mode 100644
index 0000000000..d3882c7b3f
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/filenew.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/fileopen.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/fileopen.png
new file mode 100644
index 0000000000..fc06c5ec63
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/fileopen.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/fileprint.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/fileprint.png
new file mode 100644
index 0000000000..10ca56c82a
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/fileprint.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/filesave.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/filesave.png
new file mode 100644
index 0000000000..e65a29d5f1
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/filesave.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/format-indent-less.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/format-indent-less.png
new file mode 100644
index 0000000000..e38074e78b
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/format-indent-less.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/format-indent-more.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/format-indent-more.png
new file mode 100644
index 0000000000..1bdeabd354
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/format-indent-more.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/textbold.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/textbold.png
new file mode 100644
index 0000000000..38400bd1f6
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/textbold.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/textcenter.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/textcenter.png
new file mode 100644
index 0000000000..2ef5b2ee6f
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/textcenter.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/textitalic.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/textitalic.png
new file mode 100644
index 0000000000..0170ee26a6
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/textitalic.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/textjustify.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/textjustify.png
new file mode 100644
index 0000000000..39cd6c1a9d
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/textjustify.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/textleft.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/textleft.png
new file mode 100644
index 0000000000..83a66d5535
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/textleft.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/textright.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/textright.png
new file mode 100644
index 0000000000..e7c04645cf
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/textright.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/textunder.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/textunder.png
new file mode 100644
index 0000000000..968bac5e90
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/textunder.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/textundercolor.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/textundercolor.png
new file mode 100644
index 0000000000..30e24e61c3
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/textundercolor.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/zoomin.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/zoomin.png
new file mode 100644
index 0000000000..d46f5aff0d
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/zoomin.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/mac/zoomout.png b/tests/manual/examples/widgets/richtext/textedit/images/mac/zoomout.png
new file mode 100644
index 0000000000..46326566d1
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/mac/zoomout.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/checkbox-checked.png b/tests/manual/examples/widgets/richtext/textedit/images/win/checkbox-checked.png
new file mode 100644
index 0000000000..a072d7fb5c
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/checkbox-checked.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/checkbox.png b/tests/manual/examples/widgets/richtext/textedit/images/win/checkbox.png
new file mode 100644
index 0000000000..4064909712
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/checkbox.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/editcopy.png b/tests/manual/examples/widgets/richtext/textedit/images/win/editcopy.png
new file mode 100644
index 0000000000..1121b47d8b
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/editcopy.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/editcut.png b/tests/manual/examples/widgets/richtext/textedit/images/win/editcut.png
new file mode 100644
index 0000000000..38e55f7420
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/editcut.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/editpaste.png b/tests/manual/examples/widgets/richtext/textedit/images/win/editpaste.png
new file mode 100644
index 0000000000..ffab15aaf8
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/editpaste.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/editredo.png b/tests/manual/examples/widgets/richtext/textedit/images/win/editredo.png
new file mode 100644
index 0000000000..9d679fe6fc
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/editredo.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/editundo.png b/tests/manual/examples/widgets/richtext/textedit/images/win/editundo.png
new file mode 100644
index 0000000000..eee23d24a3
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/editundo.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/exportpdf.png b/tests/manual/examples/widgets/richtext/textedit/images/win/exportpdf.png
new file mode 100644
index 0000000000..ebb44e6b88
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/exportpdf.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/filenew.png b/tests/manual/examples/widgets/richtext/textedit/images/win/filenew.png
new file mode 100644
index 0000000000..af5d122141
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/filenew.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/fileopen.png b/tests/manual/examples/widgets/richtext/textedit/images/win/fileopen.png
new file mode 100644
index 0000000000..fc6f17e977
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/fileopen.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/fileprint.png b/tests/manual/examples/widgets/richtext/textedit/images/win/fileprint.png
new file mode 100644
index 0000000000..ba7c02dc18
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/fileprint.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/filesave.png b/tests/manual/examples/widgets/richtext/textedit/images/win/filesave.png
new file mode 100644
index 0000000000..8feec99bee
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/filesave.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/format-indent-less.png b/tests/manual/examples/widgets/richtext/textedit/images/win/format-indent-less.png
new file mode 100644
index 0000000000..e38074e78b
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/format-indent-less.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/format-indent-more.png b/tests/manual/examples/widgets/richtext/textedit/images/win/format-indent-more.png
new file mode 100644
index 0000000000..1bdeabd354
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/format-indent-more.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/textbold.png b/tests/manual/examples/widgets/richtext/textedit/images/win/textbold.png
new file mode 100644
index 0000000000..9cbc7138b9
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/textbold.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/textcenter.png b/tests/manual/examples/widgets/richtext/textedit/images/win/textcenter.png
new file mode 100644
index 0000000000..11efb4b852
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/textcenter.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/textitalic.png b/tests/manual/examples/widgets/richtext/textedit/images/win/textitalic.png
new file mode 100644
index 0000000000..b30ce14c14
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/textitalic.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/textjustify.png b/tests/manual/examples/widgets/richtext/textedit/images/win/textjustify.png
new file mode 100644
index 0000000000..9de0c88085
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/textjustify.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/textleft.png b/tests/manual/examples/widgets/richtext/textedit/images/win/textleft.png
new file mode 100644
index 0000000000..16f80bc325
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/textleft.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/textright.png b/tests/manual/examples/widgets/richtext/textedit/images/win/textright.png
new file mode 100644
index 0000000000..16872df62a
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/textright.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/textunder.png b/tests/manual/examples/widgets/richtext/textedit/images/win/textunder.png
new file mode 100644
index 0000000000..c72eff53fb
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/textunder.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/textundercolor.png b/tests/manual/examples/widgets/richtext/textedit/images/win/textundercolor.png
new file mode 100644
index 0000000000..30e24e61c3
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/textundercolor.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/zoomin.png b/tests/manual/examples/widgets/richtext/textedit/images/win/zoomin.png
new file mode 100644
index 0000000000..2e586fc7bf
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/zoomin.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/images/win/zoomout.png b/tests/manual/examples/widgets/richtext/textedit/images/win/zoomout.png
new file mode 100644
index 0000000000..a736d39343
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/images/win/zoomout.png
Binary files differ
diff --git a/tests/manual/examples/widgets/richtext/textedit/main.cpp b/tests/manual/examples/widgets/richtext/textedit/main.cpp
new file mode 100644
index 0000000000..4d46dcd51c
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/main.cpp
@@ -0,0 +1,36 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "textedit.h"
+
+#include <QApplication>
+#include <QCommandLineParser>
+#include <QCommandLineOption>
+#include <QScreen>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ QCoreApplication::setOrganizationName("QtProject");
+ QCoreApplication::setApplicationName("Rich Text");
+ QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+ QCommandLineParser parser;
+ parser.setApplicationDescription(QCoreApplication::applicationName());
+ parser.addHelpOption();
+ parser.addVersionOption();
+ parser.addPositionalArgument("file", "The file to open.");
+ parser.process(a);
+
+ TextEdit mw;
+
+ const QRect availableGeometry = mw.screen()->availableGeometry();
+ mw.resize(availableGeometry.width() / 2, (availableGeometry.height() * 2) / 3);
+ mw.move((availableGeometry.width() - mw.width()) / 2,
+ (availableGeometry.height() - mw.height()) / 2);
+
+ if (!mw.load(parser.positionalArguments().value(0, QLatin1String(":/example.html"))))
+ mw.fileNew();
+
+ mw.show();
+ return a.exec();
+}
diff --git a/tests/manual/examples/widgets/richtext/textedit/textedit.cpp b/tests/manual/examples/widgets/richtext/textedit/textedit.cpp
new file mode 100644
index 0000000000..5f9e8d87b7
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/textedit.cpp
@@ -0,0 +1,904 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "textedit.h"
+
+#include <QActionGroup>
+#include <QApplication>
+#include <QClipboard>
+#include <QColorDialog>
+#include <QComboBox>
+#include <QFontComboBox>
+#include <QFile>
+#include <QFileDialog>
+#include <QFileInfo>
+#include <QFontDatabase>
+#include <QMenu>
+#include <QMenuBar>
+#include <QTextEdit>
+#include <QStatusBar>
+#include <QToolBar>
+#include <QTextCursor>
+#include <QTextDocumentWriter>
+#include <QTextList>
+#include <QTimer>
+#include <QtDebug>
+#include <QCloseEvent>
+#include <QMessageBox>
+#include <QMimeData>
+#include <QMimeDatabase>
+#include <QStringDecoder>
+#if defined(QT_PRINTSUPPORT_LIB)
+#include <QtPrintSupport/qtprintsupportglobal.h>
+#if QT_CONFIG(printer)
+#if QT_CONFIG(printdialog)
+#include <QPrintDialog>
+#endif
+#include <QPrinter>
+#if QT_CONFIG(printpreviewdialog)
+#include <QPrintPreviewDialog>
+#endif
+#endif
+#endif
+
+#ifdef Q_OS_MAC
+const QString rsrcPath = ":/images/mac";
+#else
+const QString rsrcPath = ":/images/win";
+#endif
+
+TextEdit::TextEdit(QWidget *parent)
+ : QMainWindow(parent)
+{
+#ifdef Q_OS_MACOS
+ setUnifiedTitleAndToolBarOnMac(true);
+#endif
+ setWindowTitle(QCoreApplication::applicationName());
+
+ textEdit = new QTextEdit(this);
+ connect(textEdit, &QTextEdit::currentCharFormatChanged,
+ this, &TextEdit::currentCharFormatChanged);
+ connect(textEdit, &QTextEdit::cursorPositionChanged,
+ this, &TextEdit::cursorPositionChanged);
+ setCentralWidget(textEdit);
+
+ setToolButtonStyle(Qt::ToolButtonFollowStyle);
+ setupFileActions();
+ setupEditActions();
+ setupTextActions();
+
+ {
+ QMenu *helpMenu = menuBar()->addMenu(tr("Help"));
+ helpMenu->addAction(tr("About"), this, &TextEdit::about);
+ helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt);
+ }
+
+ QFont textFont("Helvetica");
+ textFont.setStyleHint(QFont::SansSerif);
+ textEdit->setFont(textFont);
+ fontChanged(textEdit->font());
+ colorChanged(textEdit->textColor());
+ alignmentChanged(textEdit->alignment());
+
+ auto *document = textEdit->document();
+ connect(document, &QTextDocument::modificationChanged,
+ actionSave, &QAction::setEnabled);
+ connect(document, &QTextDocument::modificationChanged,
+ this, &QWidget::setWindowModified);
+ connect(document, &QTextDocument::undoAvailable,
+ actionUndo, &QAction::setEnabled);
+ connect(document, &QTextDocument::redoAvailable,
+ actionRedo, &QAction::setEnabled);
+
+ setWindowModified(document->isModified());
+ actionSave->setEnabled(document->isModified());
+ actionUndo->setEnabled(document->isUndoAvailable());
+ actionRedo->setEnabled(document->isRedoAvailable());
+
+#ifndef QT_NO_CLIPBOARD
+ actionCut->setEnabled(false);
+ connect(textEdit, &QTextEdit::copyAvailable, actionCut, &QAction::setEnabled);
+ actionCopy->setEnabled(false);
+ connect(textEdit, &QTextEdit::copyAvailable, actionCopy, &QAction::setEnabled);
+
+ connect(QGuiApplication::clipboard(), &QClipboard::dataChanged,
+ this, &TextEdit::clipboardDataChanged);
+#endif
+
+ textEdit->setFocus();
+ setCurrentFileName(QString());
+
+#ifdef Q_OS_MACOS
+ // Use dark text on light background on macOS, also in dark mode.
+ QPalette pal = textEdit->palette();
+ pal.setColor(QPalette::Base, QColor(Qt::white));
+ pal.setColor(QPalette::Text, QColor(Qt::black));
+ textEdit->setPalette(pal);
+#endif
+}
+
+//! [closeevent]
+void TextEdit::closeEvent(QCloseEvent *e)
+{
+ if (closeAccepted) {
+ e->accept();
+ return;
+ }
+
+ e->ignore();
+ maybeSave(SaveContinuation::Close);
+}
+//! [closeevent]
+
+void TextEdit::setupFileActions()
+{
+ QToolBar *tb = addToolBar(tr("File Actions"));
+ QMenu *menu = menuBar()->addMenu(tr("&File"));
+
+ const QIcon newIcon = QIcon::fromTheme("document-new", QIcon(rsrcPath + "/filenew.png"));
+ QAction *a = menu->addAction(newIcon, tr("&New"), this, &TextEdit::fileNew);
+ tb->addAction(a);
+ a->setPriority(QAction::LowPriority);
+ a->setShortcut(QKeySequence::New);
+
+ const QIcon openIcon = QIcon::fromTheme("document-open", QIcon(rsrcPath + "/fileopen.png"));
+ a = menu->addAction(openIcon, tr("&Open..."), this, &TextEdit::fileOpen);
+ a->setShortcut(QKeySequence::Open);
+ tb->addAction(a);
+
+ menu->addSeparator();
+
+ const QIcon saveIcon = QIcon::fromTheme("document-save", QIcon(rsrcPath + "/filesave.png"));
+ actionSave = menu->addAction(saveIcon, tr("&Save"), this,
+ [this]() { fileSave(SaveContinuation::None); });
+ actionSave->setShortcut(QKeySequence::Save);
+ actionSave->setEnabled(false);
+ tb->addAction(actionSave);
+
+ a = menu->addAction(tr("Save &As..."), this, [this]() { fileSaveAs(SaveContinuation::None); });
+ a->setPriority(QAction::LowPriority);
+ menu->addSeparator();
+
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
+ const QIcon printIcon = QIcon::fromTheme("document-print", QIcon(rsrcPath + "/fileprint.png"));
+ a = menu->addAction(printIcon, tr("&Print..."), this, &TextEdit::filePrint);
+ a->setPriority(QAction::LowPriority);
+ a->setShortcut(QKeySequence::Print);
+ tb->addAction(a);
+
+ const QIcon filePrintIcon = QIcon::fromTheme("fileprint", QIcon(rsrcPath + "/fileprint.png"));
+ menu->addAction(filePrintIcon, tr("Print Preview..."), this, &TextEdit::filePrintPreview);
+
+ const QIcon exportPdfIcon = QIcon::fromTheme("exportpdf", QIcon(rsrcPath + "/exportpdf.png"));
+ a = menu->addAction(exportPdfIcon, tr("&Export PDF..."), this, &TextEdit::filePrintPdf);
+ a->setPriority(QAction::LowPriority);
+ a->setShortcut(Qt::CTRL | Qt::Key_D);
+ tb->addAction(a);
+
+ menu->addSeparator();
+#endif
+
+ a = menu->addAction(tr("&Quit"), qApp, &QCoreApplication::quit);
+ a->setShortcut(Qt::CTRL | Qt::Key_Q);
+}
+
+void TextEdit::setupEditActions()
+{
+ QToolBar *tb = addToolBar(tr("Edit Actions"));
+ QMenu *menu = menuBar()->addMenu(tr("&Edit"));
+
+ const QIcon undoIcon = QIcon::fromTheme("edit-undo", QIcon(rsrcPath + "/editundo.png"));
+ actionUndo = menu->addAction(undoIcon, tr("&Undo"), textEdit, &QTextEdit::undo);
+ actionUndo->setShortcut(QKeySequence::Undo);
+ tb->addAction(actionUndo);
+
+ const QIcon redoIcon = QIcon::fromTheme("edit-redo", QIcon(rsrcPath + "/editredo.png"));
+ actionRedo = menu->addAction(redoIcon, tr("&Redo"), textEdit, &QTextEdit::redo);
+ actionRedo->setPriority(QAction::LowPriority);
+ actionRedo->setShortcut(QKeySequence::Redo);
+ tb->addAction(actionRedo);
+ menu->addSeparator();
+
+#ifndef QT_NO_CLIPBOARD
+ const QIcon cutIcon = QIcon::fromTheme("edit-cut", QIcon(rsrcPath + "/editcut.png"));
+ actionCut = menu->addAction(cutIcon, tr("Cu&t"), textEdit, &QTextEdit::cut);
+ actionCut->setPriority(QAction::LowPriority);
+ actionCut->setShortcut(QKeySequence::Cut);
+ tb->addAction(actionCut);
+
+ const QIcon copyIcon = QIcon::fromTheme("edit-copy", QIcon(rsrcPath + "/editcopy.png"));
+ actionCopy = menu->addAction(copyIcon, tr("&Copy"), textEdit, &QTextEdit::copy);
+ actionCopy->setPriority(QAction::LowPriority);
+ actionCopy->setShortcut(QKeySequence::Copy);
+ tb->addAction(actionCopy);
+
+ const QIcon pasteIcon = QIcon::fromTheme("edit-paste", QIcon(rsrcPath + "/editpaste.png"));
+ actionPaste = menu->addAction(pasteIcon, tr("&Paste"), textEdit, &QTextEdit::paste);
+ actionPaste->setPriority(QAction::LowPriority);
+ actionPaste->setShortcut(QKeySequence::Paste);
+ tb->addAction(actionPaste);
+ if (const QMimeData *md = QGuiApplication::clipboard()->mimeData())
+ actionPaste->setEnabled(md->hasText());
+#endif
+}
+
+void TextEdit::setupTextActions()
+{
+ QToolBar *tb = addToolBar(tr("Format Actions"));
+ QMenu *menu = menuBar()->addMenu(tr("F&ormat"));
+
+ const QIcon boldIcon = QIcon::fromTheme("format-text-bold", QIcon(rsrcPath + "/textbold.png"));
+ actionTextBold = menu->addAction(boldIcon, tr("&Bold"), this, &TextEdit::textBold);
+ actionTextBold->setShortcut(Qt::CTRL | Qt::Key_B);
+ actionTextBold->setPriority(QAction::LowPriority);
+ QFont bold;
+ bold.setBold(true);
+ actionTextBold->setFont(bold);
+ tb->addAction(actionTextBold);
+ actionTextBold->setCheckable(true);
+
+ const QIcon italicIcon = QIcon::fromTheme("format-text-italic", QIcon(rsrcPath + "/textitalic.png"));
+ actionTextItalic = menu->addAction(italicIcon, tr("&Italic"), this, &TextEdit::textItalic);
+ actionTextItalic->setPriority(QAction::LowPriority);
+ actionTextItalic->setShortcut(Qt::CTRL | Qt::Key_I);
+ QFont italic;
+ italic.setItalic(true);
+ actionTextItalic->setFont(italic);
+ tb->addAction(actionTextItalic);
+ actionTextItalic->setCheckable(true);
+
+ const QIcon underlineIcon = QIcon::fromTheme("format-text-underline", QIcon(rsrcPath + "/textunder.png"));
+ actionTextUnderline = menu->addAction(underlineIcon, tr("&Underline"), this, &TextEdit::textUnderline);
+ actionTextUnderline->setShortcut(Qt::CTRL | Qt::Key_U);
+ actionTextUnderline->setPriority(QAction::LowPriority);
+ QFont underline;
+ underline.setUnderline(true);
+ actionTextUnderline->setFont(underline);
+ tb->addAction(actionTextUnderline);
+ actionTextUnderline->setCheckable(true);
+
+ menu->addSeparator();
+
+ const QIcon leftIcon = QIcon::fromTheme("format-justify-left", QIcon(rsrcPath + "/textleft.png"));
+ actionAlignLeft = new QAction(leftIcon, tr("&Left"), this);
+ actionAlignLeft->setShortcut(Qt::CTRL | Qt::Key_L);
+ actionAlignLeft->setCheckable(true);
+ actionAlignLeft->setPriority(QAction::LowPriority);
+ const QIcon centerIcon = QIcon::fromTheme("format-justify-center", QIcon(rsrcPath + "/textcenter.png"));
+ actionAlignCenter = new QAction(centerIcon, tr("C&enter"), this);
+ actionAlignCenter->setShortcut(Qt::CTRL | Qt::Key_E);
+ actionAlignCenter->setCheckable(true);
+ actionAlignCenter->setPriority(QAction::LowPriority);
+ const QIcon rightIcon = QIcon::fromTheme("format-justify-right", QIcon(rsrcPath + "/textright.png"));
+ actionAlignRight = new QAction(rightIcon, tr("&Right"), this);
+ actionAlignRight->setShortcut(Qt::CTRL | Qt::Key_R);
+ actionAlignRight->setCheckable(true);
+ actionAlignRight->setPriority(QAction::LowPriority);
+ const QIcon fillIcon = QIcon::fromTheme("format-justify-fill", QIcon(rsrcPath + "/textjustify.png"));
+ actionAlignJustify = new QAction(fillIcon, tr("&Justify"), this);
+ actionAlignJustify->setShortcut(Qt::CTRL | Qt::Key_J);
+ actionAlignJustify->setCheckable(true);
+ actionAlignJustify->setPriority(QAction::LowPriority);
+ const QIcon indentMoreIcon = QIcon::fromTheme("format-indent-more", QIcon(rsrcPath + "/format-indent-more.png"));
+ actionIndentMore = menu->addAction(indentMoreIcon, tr("&Indent"), this, &TextEdit::indent);
+ actionIndentMore->setShortcut(Qt::CTRL | Qt::Key_BracketRight);
+ actionIndentMore->setPriority(QAction::LowPriority);
+ const QIcon indentLessIcon = QIcon::fromTheme("format-indent-less", QIcon(rsrcPath + "/format-indent-less.png"));
+ actionIndentLess = menu->addAction(indentLessIcon, tr("&Unindent"), this, &TextEdit::unindent);
+ actionIndentLess->setShortcut(Qt::CTRL | Qt::Key_BracketLeft);
+ actionIndentLess->setPriority(QAction::LowPriority);
+
+ // Make sure the alignLeft is always left of the alignRight
+ QActionGroup *alignGroup = new QActionGroup(this);
+ connect(alignGroup, &QActionGroup::triggered, this, &TextEdit::textAlign);
+
+ if (QGuiApplication::isLeftToRight()) {
+ alignGroup->addAction(actionAlignLeft);
+ alignGroup->addAction(actionAlignCenter);
+ alignGroup->addAction(actionAlignRight);
+ } else {
+ alignGroup->addAction(actionAlignRight);
+ alignGroup->addAction(actionAlignCenter);
+ alignGroup->addAction(actionAlignLeft);
+ }
+ alignGroup->addAction(actionAlignJustify);
+
+ tb->addActions(alignGroup->actions());
+ menu->addActions(alignGroup->actions());
+ tb->addAction(actionIndentMore);
+ tb->addAction(actionIndentLess);
+ menu->addAction(actionIndentMore);
+ menu->addAction(actionIndentLess);
+
+ menu->addSeparator();
+
+ QPixmap pix(16, 16);
+ pix.fill(Qt::black);
+ actionTextColor = menu->addAction(pix, tr("&Color..."), this, &TextEdit::textColor);
+ tb->addAction(actionTextColor);
+
+ const QIcon underlineColorIcon(rsrcPath + "/textundercolor.png");
+ actionUnderlineColor = menu->addAction(underlineColorIcon, tr("Underline color..."), this, &TextEdit::underlineColor);
+ tb->addAction(actionUnderlineColor);
+
+ menu->addSeparator();
+
+ const QIcon checkboxIcon = QIcon::fromTheme("status-checkbox-checked", QIcon(rsrcPath + "/checkbox-checked.png"));
+ actionToggleCheckState = menu->addAction(checkboxIcon, tr("Chec&ked"), this, &TextEdit::setChecked);
+ actionToggleCheckState->setShortcut(Qt::CTRL | Qt::Key_K);
+ actionToggleCheckState->setCheckable(true);
+ actionToggleCheckState->setPriority(QAction::LowPriority);
+ tb->addAction(actionToggleCheckState);
+
+ tb = addToolBar(tr("Format Actions"));
+ tb->setAllowedAreas(Qt::TopToolBarArea | Qt::BottomToolBarArea);
+ addToolBarBreak(Qt::TopToolBarArea);
+ addToolBar(tb);
+
+ comboStyle = new QComboBox(tb);
+ tb->addWidget(comboStyle);
+ comboStyle->addItems({"Standard",
+ "Bullet List (Disc)",
+ "Bullet List (Circle)",
+ "Bullet List (Square)",
+ "Task List (Unchecked)",
+ "Task List (Checked)",
+ "Ordered List (Decimal)",
+ "Ordered List (Alpha lower)",
+ "Ordered List (Alpha upper)",
+ "Ordered List (Roman lower)",
+ "Ordered List (Roman upper)",
+ "Heading 1",
+ "Heading 2",
+ "Heading 3",
+ "Heading 4",
+ "Heading 5",
+ "Heading 6"}),
+
+ connect(comboStyle, &QComboBox::activated, this, &TextEdit::textStyle);
+
+ comboFont = new QFontComboBox(tb);
+ tb->addWidget(comboFont);
+ connect(comboFont, &QComboBox::textActivated, this, &TextEdit::textFamily);
+
+ comboSize = new QComboBox(tb);
+ comboSize->setObjectName("comboSize");
+ tb->addWidget(comboSize);
+ comboSize->setEditable(true);
+
+ const QList<int> standardSizes = QFontDatabase::standardSizes();
+ for (int size : standardSizes)
+ comboSize->addItem(QString::number(size));
+ comboSize->setCurrentIndex(standardSizes.indexOf(QApplication::font().pointSize()));
+
+ connect(comboSize, &QComboBox::textActivated, this, &TextEdit::textSize);
+}
+
+bool TextEdit::load(const QString &f)
+{
+ if (!QFile::exists(f))
+ return false;
+ QFile file(f);
+ if (!file.open(QFile::ReadOnly))
+ return false;
+
+ QByteArray data = file.readAll();
+ QMimeDatabase db;
+ const QString &mimeTypeName = db.mimeTypeForFileNameAndData(f, data).name();
+ if (mimeTypeName == u"text/html") {
+ auto encoding = QStringDecoder::encodingForHtml(data);
+ QString str = QStringDecoder(encoding ? *encoding : QStringDecoder::Utf8)(data);
+ QUrl fileUrl = f.startsWith(u':') ? QUrl(f) : QUrl::fromLocalFile(f);
+ textEdit->document()->setBaseUrl(fileUrl.adjusted(QUrl::RemoveFilename));
+ textEdit->setHtml(str);
+#if QT_CONFIG(textmarkdownreader)
+ } else if (mimeTypeName == u"text/markdown") {
+ textEdit->setMarkdown(QString::fromUtf8(data));
+#endif
+ } else {
+ textEdit->setPlainText(QString::fromUtf8(data));
+ }
+
+ setCurrentFileName(f);
+ return true;
+}
+
+void TextEdit::maybeSave(SaveContinuation continuation)
+{
+ if (!textEdit->document()->isModified()) {
+ // Execute continuation as soon as control has returned to the event loop so that existing
+ // dialogs do not get in the way of closing the window.
+ QTimer::singleShot(0, [this, continuation]() { fileSaveComplete(continuation); });
+ return;
+ }
+
+ QMessageBox *msgBox =
+ new QMessageBox(QMessageBox::Icon::Warning, QCoreApplication::applicationName(),
+ tr("The document has been modified.\n"
+ "Do you want to save your changes?"),
+ QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel, this);
+
+ connect(msgBox, &QMessageBox::finished, [=](int result) {
+ if (result == QMessageBox::Save) {
+ fileSave(continuation);
+ return;
+ }
+ fileSaveComplete(result == QMessageBox::Discard ? continuation : SaveContinuation::None);
+ });
+
+ msgBox->setAttribute(Qt::WA_DeleteOnClose);
+ msgBox->open();
+}
+
+void TextEdit::setCurrentFileName(const QString &fileName)
+{
+ this->fileName = fileName;
+ textEdit->document()->setModified(false);
+
+ QString shownName;
+ if (fileName.isEmpty())
+ shownName = "untitled.txt";
+ else
+ shownName = QFileInfo(fileName).fileName();
+
+ setWindowTitle(tr("%1[*] - %2").arg(shownName, QCoreApplication::applicationName()));
+ setWindowModified(false);
+}
+
+void TextEdit::fileNew()
+{
+ maybeSave(SaveContinuation::Clear);
+}
+
+void TextEdit::fileOpen()
+{
+ QFileDialog *fileDialog = new QFileDialog(this, tr("Open File..."));
+ fileDialog->setAcceptMode(QFileDialog::AcceptOpen);
+ fileDialog->setFileMode(QFileDialog::ExistingFile);
+ fileDialog->setMimeTypeFilters({
+#if QT_CONFIG(texthtmlparser)
+ "text/html",
+#endif
+#if QT_CONFIG(textmarkdownreader)
+
+ "text/markdown",
+#endif
+ "text/plain"});
+
+ connect(fileDialog, &QFileDialog::fileSelected, [=](const QString &file) {
+ statusBar()->showMessage(
+ load(file) ? tr(R"(Opened "%1")").arg(QDir::toNativeSeparators(file))
+ : tr(R"(Could not open "%1")").arg(QDir::toNativeSeparators(file)));
+ });
+ fileDialog->setAttribute(Qt::WA_DeleteOnClose);
+ fileDialog->open();
+}
+
+void TextEdit::fileSave(SaveContinuation continuation)
+{
+ if (fileName.isEmpty() || fileName.startsWith(u":/"))
+ return fileSaveAs(continuation);
+
+ QTextDocumentWriter writer(fileName);
+ bool success = writer.write(textEdit->document());
+ if (success) {
+ textEdit->document()->setModified(false);
+ statusBar()->showMessage(tr("Wrote \"%1\"").arg(QDir::toNativeSeparators(fileName)));
+ } else {
+ statusBar()->showMessage(tr("Could not write to file \"%1\"")
+ .arg(QDir::toNativeSeparators(fileName)));
+ }
+ fileSaveComplete(success ? continuation : SaveContinuation::None);
+}
+
+void TextEdit::fileSaveAs(SaveContinuation continuation)
+{
+ QFileDialog *fileDialog = new QFileDialog(this, tr("Save as..."));
+ fileDialog->setAcceptMode(QFileDialog::AcceptSave);
+ QStringList mimeTypes{"text/plain",
+#if QT_CONFIG(textodfwriter)
+ "application/vnd.oasis.opendocument.text",
+#endif
+#if QT_CONFIG(textmarkdownwriter)
+ "text/markdown",
+#endif
+ "text/html"};
+ fileDialog->setMimeTypeFilters(mimeTypes);
+#if QT_CONFIG(textodfwriter)
+ fileDialog->setDefaultSuffix("odt");
+#endif
+ connect(fileDialog, &QFileDialog::finished, [this, continuation, fileDialog](int result) {
+ if (result != QDialog::Accepted)
+ return;
+ setCurrentFileName(fileDialog->selectedFiles().constFirst());
+ fileSave(continuation);
+ });
+ fileDialog->setAttribute(Qt::WA_DeleteOnClose);
+ fileDialog->open();
+}
+
+void TextEdit::fileSaveComplete(SaveContinuation continuation)
+{
+ switch (continuation) {
+ case SaveContinuation::Clear:
+ textEdit->clear();
+ setCurrentFileName({});
+ return;
+ case SaveContinuation::Close:
+ closeAccepted = true;
+ close();
+ return;
+ case SaveContinuation::None:
+ // NOOP as promised
+ return;
+ }
+}
+
+void TextEdit::filePrint()
+{
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
+ auto printer = std::make_shared<QPrinter>(QPrinter::HighResolution);
+ QPrintDialog *dlg = new QPrintDialog(printer.get(), this);
+ if (textEdit->textCursor().hasSelection())
+ dlg->setOption(QAbstractPrintDialog::PrintSelection);
+ dlg->setWindowTitle(tr("Print Document"));
+ dlg->setAttribute(Qt::WA_DeleteOnClose);
+ connect(dlg, qOverload<QPrinter *>(&QPrintDialog::accepted),
+ [this](QPrinter *printer) { textEdit->print(printer); });
+ connect(dlg, &QPrintDialog::finished, [printer]() mutable { printer.reset(); });
+ dlg->open();
+#endif
+}
+
+void TextEdit::filePrintPreview()
+{
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printpreviewdialog)
+ auto printer = std::make_shared<QPrinter>(QPrinter::HighResolution);
+ QPrintPreviewDialog *preview = new QPrintPreviewDialog(printer.get(), this);
+ preview->setAttribute(Qt::WA_DeleteOnClose);
+ connect(preview, &QPrintPreviewDialog::paintRequested, textEdit, &QTextEdit::print);
+ connect(preview, &QPrintPreviewDialog::finished, [printer]() mutable { printer.reset(); });
+ preview->open();
+#endif
+}
+
+void TextEdit::filePrintPdf()
+{
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
+ QFileDialog *fileDialog = new QFileDialog(this, tr("Export PDF"));
+ fileDialog->setAcceptMode(QFileDialog::AcceptSave);
+ fileDialog->setMimeTypeFilters(QStringList("application/pdf"));
+ fileDialog->setDefaultSuffix("pdf");
+ fileDialog->setAttribute(Qt::WA_DeleteOnClose);
+ connect(fileDialog, &QFileDialog::fileSelected, [this](const QString &file) {
+ QPrinter printer(QPrinter::HighResolution);
+ printer.setOutputFormat(QPrinter::PdfFormat);
+ printer.setOutputFileName(file);
+ textEdit->document()->print(&printer);
+ statusBar()->showMessage(tr("Exported \"%1\"").arg(QDir::toNativeSeparators(file)));
+ });
+
+ fileDialog->open();
+#endif
+}
+
+void TextEdit::textBold()
+{
+ QTextCharFormat fmt;
+ fmt.setFontWeight(actionTextBold->isChecked() ? QFont::Bold : QFont::Normal);
+ mergeFormatOnWordOrSelection(fmt);
+}
+
+void TextEdit::textUnderline()
+{
+ QTextCharFormat fmt;
+ fmt.setFontUnderline(actionTextUnderline->isChecked());
+ mergeFormatOnWordOrSelection(fmt);
+}
+
+void TextEdit::textItalic()
+{
+ QTextCharFormat fmt;
+ fmt.setFontItalic(actionTextItalic->isChecked());
+ mergeFormatOnWordOrSelection(fmt);
+}
+
+void TextEdit::textFamily(const QString &f)
+{
+ QTextCharFormat fmt;
+ fmt.setFontFamilies({f});
+ mergeFormatOnWordOrSelection(fmt);
+}
+
+void TextEdit::textSize(const QString &p)
+{
+ qreal pointSize = p.toFloat();
+ if (pointSize > 0) {
+ QTextCharFormat fmt;
+ fmt.setFontPointSize(pointSize);
+ mergeFormatOnWordOrSelection(fmt);
+ }
+}
+
+void TextEdit::textStyle(int styleIndex)
+{
+ QTextCursor cursor = textEdit->textCursor();
+ QTextListFormat::Style style = QTextListFormat::ListStyleUndefined;
+ QTextBlockFormat::MarkerType marker = QTextBlockFormat::MarkerType::NoMarker;
+
+ switch (styleIndex) {
+ case 1:
+ style = QTextListFormat::ListDisc;
+ break;
+ case 2:
+ style = QTextListFormat::ListCircle;
+ break;
+ case 3:
+ style = QTextListFormat::ListSquare;
+ break;
+ case 4:
+ if (cursor.currentList())
+ style = cursor.currentList()->format().style();
+ else
+ style = QTextListFormat::ListDisc;
+ marker = QTextBlockFormat::MarkerType::Unchecked;
+ break;
+ case 5:
+ if (cursor.currentList())
+ style = cursor.currentList()->format().style();
+ else
+ style = QTextListFormat::ListDisc;
+ marker = QTextBlockFormat::MarkerType::Checked;
+ break;
+ case 6:
+ style = QTextListFormat::ListDecimal;
+ break;
+ case 7:
+ style = QTextListFormat::ListLowerAlpha;
+ break;
+ case 8:
+ style = QTextListFormat::ListUpperAlpha;
+ break;
+ case 9:
+ style = QTextListFormat::ListLowerRoman;
+ break;
+ case 10:
+ style = QTextListFormat::ListUpperRoman;
+ break;
+ default:
+ break;
+ }
+
+ cursor.beginEditBlock();
+
+ QTextBlockFormat blockFmt = cursor.blockFormat();
+
+ if (style == QTextListFormat::ListStyleUndefined) {
+ blockFmt.setObjectIndex(-1);
+ int headingLevel = styleIndex >= 11 ? styleIndex - 11 + 1 : 0; // H1 to H6, or Standard
+ blockFmt.setHeadingLevel(headingLevel);
+ cursor.setBlockFormat(blockFmt);
+
+ int sizeAdjustment = headingLevel ? 4 - headingLevel : 0; // H1 to H6: +3 to -2
+ QTextCharFormat fmt;
+ fmt.setFontWeight(headingLevel ? QFont::Bold : QFont::Normal);
+ fmt.setProperty(QTextFormat::FontSizeAdjustment, sizeAdjustment);
+ cursor.select(QTextCursor::LineUnderCursor);
+ cursor.mergeCharFormat(fmt);
+ textEdit->mergeCurrentCharFormat(fmt);
+ } else {
+ blockFmt.setMarker(marker);
+ cursor.setBlockFormat(blockFmt);
+ QTextListFormat listFmt;
+ if (cursor.currentList()) {
+ listFmt = cursor.currentList()->format();
+ } else {
+ listFmt.setIndent(blockFmt.indent() + 1);
+ blockFmt.setIndent(0);
+ cursor.setBlockFormat(blockFmt);
+ }
+ listFmt.setStyle(style);
+ cursor.createList(listFmt);
+ }
+
+ cursor.endEditBlock();
+}
+
+void TextEdit::textColor()
+{
+ QColorDialog *dlg = new QColorDialog(this);
+ dlg->setCurrentColor(textEdit->textColor());
+ connect(dlg, &QColorDialog::colorSelected, [this](const QColor &color) {
+ if (!color.isValid())
+ return;
+ QTextCharFormat fmt;
+ fmt.setForeground(color);
+ mergeFormatOnWordOrSelection(fmt);
+ colorChanged(color);
+ });
+ dlg->setAttribute(Qt::WA_DeleteOnClose);
+ dlg->open();
+}
+
+void TextEdit::underlineColor()
+{
+ QColorDialog *dlg = new QColorDialog(this);
+ dlg->setCurrentColor(textEdit->textColor());
+ connect(dlg, &QColorDialog::colorSelected, [this](const QColor &color) {
+ if (!color.isValid())
+ return;
+ QTextCharFormat fmt;
+ fmt.setUnderlineColor(color);
+ mergeFormatOnWordOrSelection(fmt);
+ colorChanged(color);
+ });
+ dlg->setAttribute(Qt::WA_DeleteOnClose);
+ dlg->open();
+}
+
+void TextEdit::textAlign(QAction *a)
+{
+ if (a == actionAlignLeft)
+ textEdit->setAlignment(Qt::AlignLeft | Qt::AlignAbsolute);
+ else if (a == actionAlignCenter)
+ textEdit->setAlignment(Qt::AlignHCenter);
+ else if (a == actionAlignRight)
+ textEdit->setAlignment(Qt::AlignRight | Qt::AlignAbsolute);
+ else if (a == actionAlignJustify)
+ textEdit->setAlignment(Qt::AlignJustify);
+}
+
+void TextEdit::setChecked(bool checked)
+{
+ textStyle(checked ? 5 : 4);
+}
+
+void TextEdit::indent()
+{
+ modifyIndentation(1);
+}
+
+void TextEdit::unindent()
+{
+ modifyIndentation(-1);
+}
+
+void TextEdit::modifyIndentation(int amount)
+{
+ QTextCursor cursor = textEdit->textCursor();
+ cursor.beginEditBlock();
+ if (cursor.currentList()) {
+ QTextListFormat listFmt = cursor.currentList()->format();
+ // See whether the line above is the list we want to move this item into,
+ // or whether we need a new list.
+ QTextCursor above(cursor);
+ above.movePosition(QTextCursor::Up);
+ if (above.currentList() && listFmt.indent() + amount == above.currentList()->format().indent()) {
+ above.currentList()->add(cursor.block());
+ } else {
+ listFmt.setIndent(listFmt.indent() + amount);
+ cursor.createList(listFmt);
+ }
+ } else {
+ QTextBlockFormat blockFmt = cursor.blockFormat();
+ blockFmt.setIndent(blockFmt.indent() + amount);
+ cursor.setBlockFormat(blockFmt);
+ }
+ cursor.endEditBlock();
+}
+
+void TextEdit::currentCharFormatChanged(const QTextCharFormat &format)
+{
+ fontChanged(format.font());
+ colorChanged(format.foreground().color());
+}
+
+void TextEdit::cursorPositionChanged()
+{
+ alignmentChanged(textEdit->alignment());
+ QTextList *list = textEdit->textCursor().currentList();
+ if (list) {
+ switch (list->format().style()) {
+ case QTextListFormat::ListDisc:
+ comboStyle->setCurrentIndex(1);
+ break;
+ case QTextListFormat::ListCircle:
+ comboStyle->setCurrentIndex(2);
+ break;
+ case QTextListFormat::ListSquare:
+ comboStyle->setCurrentIndex(3);
+ break;
+ case QTextListFormat::ListDecimal:
+ comboStyle->setCurrentIndex(6);
+ break;
+ case QTextListFormat::ListLowerAlpha:
+ comboStyle->setCurrentIndex(7);
+ break;
+ case QTextListFormat::ListUpperAlpha:
+ comboStyle->setCurrentIndex(8);
+ break;
+ case QTextListFormat::ListLowerRoman:
+ comboStyle->setCurrentIndex(9);
+ break;
+ case QTextListFormat::ListUpperRoman:
+ comboStyle->setCurrentIndex(10);
+ break;
+ default:
+ comboStyle->setCurrentIndex(-1);
+ break;
+ }
+ switch (textEdit->textCursor().block().blockFormat().marker()) {
+ case QTextBlockFormat::MarkerType::NoMarker:
+ actionToggleCheckState->setChecked(false);
+ break;
+ case QTextBlockFormat::MarkerType::Unchecked:
+ comboStyle->setCurrentIndex(4);
+ actionToggleCheckState->setChecked(false);
+ break;
+ case QTextBlockFormat::MarkerType::Checked:
+ comboStyle->setCurrentIndex(5);
+ actionToggleCheckState->setChecked(true);
+ break;
+ }
+ } else {
+ int headingLevel = textEdit->textCursor().blockFormat().headingLevel();
+ comboStyle->setCurrentIndex(headingLevel ? headingLevel + 10 : 0);
+ }
+}
+
+void TextEdit::clipboardDataChanged()
+{
+#ifndef QT_NO_CLIPBOARD
+ if (const QMimeData *md = QGuiApplication::clipboard()->mimeData())
+ actionPaste->setEnabled(md->hasText());
+#endif
+}
+
+void TextEdit::about()
+{
+ QMessageBox *msgBox =
+ new QMessageBox(QMessageBox::Icon::Information, tr("About"),
+ tr("This example demonstrates Qt's rich text editing facilities in "
+ "action, providing an example document for you to experiment with."),
+ QMessageBox::NoButton, this);
+ msgBox->setAttribute(Qt::WA_DeleteOnClose);
+ msgBox->open();
+}
+
+void TextEdit::mergeFormatOnWordOrSelection(const QTextCharFormat &format)
+{
+ QTextCursor cursor = textEdit->textCursor();
+ if (!cursor.hasSelection())
+ cursor.select(QTextCursor::WordUnderCursor);
+ cursor.mergeCharFormat(format);
+ textEdit->mergeCurrentCharFormat(format);
+}
+
+void TextEdit::fontChanged(const QFont &f)
+{
+ comboFont->setCurrentIndex(comboFont->findText(QFontInfo(f).family()));
+ comboSize->setCurrentIndex(comboSize->findText(QString::number(f.pointSize())));
+ actionTextBold->setChecked(f.bold());
+ actionTextItalic->setChecked(f.italic());
+ actionTextUnderline->setChecked(f.underline());
+}
+
+void TextEdit::colorChanged(const QColor &c)
+{
+ QPixmap pix(16, 16);
+ pix.fill(c);
+ actionTextColor->setIcon(pix);
+}
+
+void TextEdit::alignmentChanged(Qt::Alignment a)
+{
+ if (a.testFlag(Qt::AlignLeft))
+ actionAlignLeft->setChecked(true);
+ else if (a.testFlag(Qt::AlignHCenter))
+ actionAlignCenter->setChecked(true);
+ else if (a.testFlag(Qt::AlignRight))
+ actionAlignRight->setChecked(true);
+ else if (a.testFlag(Qt::AlignJustify))
+ actionAlignJustify->setChecked(true);
+}
+
diff --git a/tests/manual/examples/widgets/richtext/textedit/textedit.h b/tests/manual/examples/widgets/richtext/textedit/textedit.h
new file mode 100644
index 0000000000..f0f4abb827
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/textedit.h
@@ -0,0 +1,110 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef TEXTEDIT_H
+#define TEXTEDIT_H
+
+#include <QMainWindow>
+
+QT_BEGIN_NAMESPACE
+class QAction;
+class QComboBox;
+class QFontComboBox;
+class QTextEdit;
+class QTextCharFormat;
+class QMenu;
+class QPrinter;
+QT_END_NAMESPACE
+
+class TextEdit : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ TextEdit(QWidget *parent = nullptr);
+
+ bool load(const QString &f);
+
+public slots:
+ void fileNew();
+
+protected:
+ void closeEvent(QCloseEvent *e) override;
+
+private:
+ enum class SaveContinuation { None, Close, Clear };
+
+private slots:
+ void fileOpen();
+ void filePrint();
+ void filePrintPreview();
+ void filePrintPdf();
+
+ void textBold();
+ void textUnderline();
+ void textItalic();
+ void textFamily(const QString &f);
+ void textSize(const QString &p);
+ void textStyle(int styleIndex);
+ void textColor();
+ void underlineColor();
+ void textAlign(QAction *a);
+ void setChecked(bool checked);
+ void indent();
+ void unindent();
+
+ void currentCharFormatChanged(const QTextCharFormat &format);
+ void cursorPositionChanged();
+
+ void clipboardDataChanged();
+ void about();
+
+private:
+ void setupFileActions();
+ void setupEditActions();
+ void setupTextActions();
+ void maybeSave(SaveContinuation saveContinuation);
+ void setCurrentFileName(const QString &fileName);
+ void modifyIndentation(int amount);
+
+ void mergeFormatOnWordOrSelection(const QTextCharFormat &format);
+ void fontChanged(const QFont &f);
+ void colorChanged(const QColor &c);
+ void alignmentChanged(Qt::Alignment a);
+
+ void fileSave(SaveContinuation continuation);
+ void fileSaveAs(SaveContinuation continuation);
+ void fileSaveComplete(SaveContinuation continuation);
+
+ QAction *actionSave;
+ QAction *actionTextBold;
+ QAction *actionTextUnderline;
+ QAction *actionTextItalic;
+ QAction *actionTextColor;
+ QAction *actionUnderlineColor;
+ QAction *actionAlignLeft;
+ QAction *actionAlignCenter;
+ QAction *actionAlignRight;
+ QAction *actionAlignJustify;
+ QAction *actionIndentLess;
+ QAction *actionIndentMore;
+ QAction *actionToggleCheckState;
+ QAction *actionUndo;
+ QAction *actionRedo;
+#ifndef QT_NO_CLIPBOARD
+ QAction *actionCut;
+ QAction *actionCopy;
+ QAction *actionPaste;
+#endif
+
+ QComboBox *comboStyle;
+ QFontComboBox *comboFont;
+ QComboBox *comboSize;
+
+ QString fileName;
+ QTextEdit *textEdit;
+
+ bool closeAccepted = false;
+};
+
+#endif // TEXTEDIT_H
diff --git a/tests/manual/examples/widgets/richtext/textedit/textedit.pro b/tests/manual/examples/widgets/richtext/textedit/textedit.pro
new file mode 100644
index 0000000000..b7a2155b0b
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/textedit.pro
@@ -0,0 +1,22 @@
+QT += widgets
+requires(qtConfig(filedialog))
+qtHaveModule(printsupport): QT += printsupport
+
+TEMPLATE = app
+TARGET = textedit
+
+HEADERS = textedit.h
+SOURCES = textedit.cpp \
+ main.cpp
+
+RESOURCES += textedit.qrc
+build_all:!build_pass {
+ CONFIG -= build_all
+ CONFIG += release
+}
+
+EXAMPLE_FILES = textedit.qdoc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/richtext/textedit
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/richtext/textedit/textedit.qdoc b/tests/manual/examples/widgets/richtext/textedit/textedit.qdoc
new file mode 100644
index 0000000000..ce574353b4
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/textedit.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
+
+/*! \page textedit-example.html
+
+ \ingroup examples
+ \title Text Edit Example
+
+ \brief This example displays a text editor with the user interface written
+ in pure C++.
+
+ A similar example which uses \QD to produce the user
+ interface is in the \l {Qt Widgets Designer Manual}.
+
+
+ See \c{$QTDIR/examples/textedit} for the source code.
+
+*/
+
+
diff --git a/tests/manual/examples/widgets/richtext/textedit/textedit.qrc b/tests/manual/examples/widgets/richtext/textedit/textedit.qrc
new file mode 100644
index 0000000000..a30d50fdbf
--- /dev/null
+++ b/tests/manual/examples/widgets/richtext/textedit/textedit.qrc
@@ -0,0 +1,54 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource prefix="/">
+ <file>images/logo32.png</file>
+ <file>images/mac/checkbox.png</file>
+ <file>images/mac/checkbox-checked.png</file>
+ <file>images/mac/editcopy.png</file>
+ <file>images/mac/editcut.png</file>
+ <file>images/mac/editpaste.png</file>
+ <file>images/mac/editredo.png</file>
+ <file>images/mac/editundo.png</file>
+ <file>images/mac/exportpdf.png</file>
+ <file>images/mac/filenew.png</file>
+ <file>images/mac/fileopen.png</file>
+ <file>images/mac/fileprint.png</file>
+ <file>images/mac/filesave.png</file>
+ <file>images/mac/format-indent-less.png</file>
+ <file>images/mac/format-indent-more.png</file>
+ <file>images/mac/textbold.png</file>
+ <file>images/mac/textcenter.png</file>
+ <file>images/mac/textitalic.png</file>
+ <file>images/mac/textjustify.png</file>
+ <file>images/mac/textleft.png</file>
+ <file>images/mac/textright.png</file>
+ <file>images/mac/textunder.png</file>
+ <file>images/mac/textundercolor.png</file>
+ <file>images/mac/zoomin.png</file>
+ <file>images/mac/zoomout.png</file>
+ <file>images/win/checkbox.png</file>
+ <file>images/win/checkbox-checked.png</file>
+ <file>images/win/editcopy.png</file>
+ <file>images/win/editcut.png</file>
+ <file>images/win/editpaste.png</file>
+ <file>images/win/editredo.png</file>
+ <file>images/win/editundo.png</file>
+ <file>images/win/exportpdf.png</file>
+ <file>images/win/filenew.png</file>
+ <file>images/win/fileopen.png</file>
+ <file>images/win/fileprint.png</file>
+ <file>images/win/filesave.png</file>
+ <file>images/win/format-indent-less.png</file>
+ <file>images/win/format-indent-more.png</file>
+ <file>images/win/textbold.png</file>
+ <file>images/win/textcenter.png</file>
+ <file>images/win/textitalic.png</file>
+ <file>images/win/textjustify.png</file>
+ <file>images/win/textleft.png</file>
+ <file>images/win/textright.png</file>
+ <file>images/win/textunder.png</file>
+ <file>images/win/textundercolor.png</file>
+ <file>images/win/zoomin.png</file>
+ <file>images/win/zoomout.png</file>
+ <file>example.html</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/scroller/CMakeLists.txt b/tests/manual/examples/widgets/scroller/CMakeLists.txt
new file mode 100644
index 0000000000..fb9ebc2848
--- /dev/null
+++ b/tests/manual/examples/widgets/scroller/CMakeLists.txt
@@ -0,0 +1 @@
+qt_internal_add_example(graphicsview)
diff --git a/tests/manual/examples/widgets/scroller/graphicsview/CMakeLists.txt b/tests/manual/examples/widgets/scroller/graphicsview/CMakeLists.txt
new file mode 100644
index 0000000000..3c50b6d99f
--- /dev/null
+++ b/tests/manual/examples/widgets/scroller/graphicsview/CMakeLists.txt
@@ -0,0 +1,36 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(graphicsview LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/scroller/graphicsview")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(graphicsview
+ main.cpp
+)
+
+set_target_properties(graphicsview PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(graphicsview PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS graphicsview
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/scroller/graphicsview/graphicsview.pro b/tests/manual/examples/widgets/scroller/graphicsview/graphicsview.pro
new file mode 100644
index 0000000000..39bdb2bc2c
--- /dev/null
+++ b/tests/manual/examples/widgets/scroller/graphicsview/graphicsview.pro
@@ -0,0 +1,8 @@
+QT += widgets
+
+TEMPLATE = app
+SOURCES = main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/scroller/graphicsview
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/scroller/graphicsview/main.cpp b/tests/manual/examples/widgets/scroller/graphicsview/main.cpp
new file mode 100644
index 0000000000..b8df2b1b2e
--- /dev/null
+++ b/tests/manual/examples/widgets/scroller/graphicsview/main.cpp
@@ -0,0 +1,255 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtCore>
+#include <QtWidgets>
+
+#define NUM_ITEMS 100
+#define NUM_LISTS 10
+
+/*!
+ \class RectObject
+ Note that it needs to be a QGraphicsObject or else the gestures will not work correctly.
+*/
+class RectObject : public QGraphicsObject
+{
+ Q_OBJECT
+
+public:
+
+ RectObject(const QString &text, qreal x, qreal y, qreal width, qreal height, QBrush brush, QGraphicsItem *parent = nullptr)
+ : QGraphicsObject(parent)
+ , m_text(text)
+ , m_rect(x, y, width, height)
+ , m_pen(brush.color().lighter(), 3.0)
+ , m_brush(brush)
+ {
+ setFlag(QGraphicsItem::ItemClipsToShape, true);
+ }
+
+ QRectF boundingRect() const override
+ {
+ // here we only want the size of the children and not the size of the children of the children...
+ qreal halfpw = m_pen.widthF() / 2;
+ QRectF rect = m_rect;
+ if (halfpw > 0.0)
+ rect.adjust(-halfpw, -halfpw, halfpw, halfpw);
+
+ return rect;
+ }
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
+ {
+ Q_UNUSED(option);
+ Q_UNUSED(widget);
+ painter->setPen(m_pen);
+ painter->setBrush(m_brush);
+ painter->drawRect(m_rect);
+
+ painter->setPen(Qt::black);
+ QFont f;
+ f.setPixelSize(m_rect.height());
+ painter->setFont(f);
+ painter->drawText(m_rect, Qt::AlignCenter, m_text);
+ }
+
+ QString m_text;
+ QRectF m_rect;
+ QPen m_pen;
+ QBrush m_brush;
+};
+
+class ViewObject : public QGraphicsObject
+{
+ Q_OBJECT
+public:
+ ViewObject(QGraphicsObject *parent)
+ : QGraphicsObject(parent)
+ { }
+
+ QRectF boundingRect() const override
+ {
+ QRectF rect;
+ const auto items = childItems();
+ for (const QGraphicsItem *item : items)
+ rect |= item->boundingRect().translated(item->pos());
+ return rect;
+ }
+
+ void paint(QPainter *, const QStyleOptionGraphicsItem *, QWidget *) override
+ { }
+};
+
+class ListObject : public QGraphicsObject
+{
+ Q_OBJECT
+
+public:
+ ListObject(const QSizeF &size, bool useTouch)
+ {
+ m_size = size;
+ setFlag(QGraphicsItem::ItemClipsChildrenToShape, true);
+ // grab gesture via Touch or Mouse events
+ QScroller::grabGesture(this, useTouch ? QScroller::TouchGesture : QScroller::LeftMouseButtonGesture);
+
+ // this needs to be QGraphicsOBJECT - otherwise gesture recognition
+ // will not work for the parent of the viewport (in this case the
+ // list)
+ m_viewport = new ViewObject(this);
+
+ }
+
+ QGraphicsObject *viewport() const
+ {
+ return m_viewport;
+ }
+
+ bool event(QEvent *e) override
+ {
+ switch (e->type()) {
+// ![2]
+ case QEvent::ScrollPrepare: {
+ QScrollPrepareEvent *se = static_cast<QScrollPrepareEvent *>(e);
+ se->setViewportSize(m_size);
+ QRectF br = m_viewport->boundingRect();
+ se->setContentPosRange(QRectF(0, 0,
+ qMax(qreal(0), br.width() - m_size.width()),
+ qMax(qreal(0), br.height() - m_size.height())));
+ se->setContentPos(-m_viewport->pos());
+ se->accept();
+ return true;
+ }
+// ![1]
+// ![2]
+ case QEvent::Scroll: {
+ QScrollEvent *se = static_cast<QScrollEvent *>(e);
+ m_viewport->setPos(-se->contentPos() - se->overshootDistance());
+ return true;
+ }
+// ![2]
+ default:
+ break;
+ }
+ return QGraphicsObject::event(e);
+ }
+
+ bool sceneEvent(QEvent *e) override
+ {
+ switch (e->type()) {
+ case QEvent::TouchBegin: {
+ // We need to return true for the TouchBegin here in the
+ // top-most graphics object - otherwise gestures in our parent
+ // objects will NOT work at all (the accept() flag is already
+ // set due to our setAcceptTouchEvents(true) call in the c'tor
+ return true;
+
+ }
+ case QEvent::GraphicsSceneMousePress: {
+ // We need to return true for the MousePress here in the
+ // top-most graphics object - otherwise gestures in our parent
+ // objects will NOT work at all (the accept() flag is already
+ // set to true by Qt)
+ return true;
+
+ }
+ default:
+ break;
+ }
+ return QGraphicsObject::sceneEvent(e);
+ }
+
+ QRectF boundingRect() const override
+ {
+ return QRectF(0, 0, m_size.width() + 3, m_size.height());
+ }
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override
+ {
+ Q_UNUSED(option);
+ Q_UNUSED(widget);
+ painter->setPen(QPen(QColor(100, 100, 100), 3.0));
+ painter->drawRect(QRectF(1.5, 1.5, m_size.width() - 3, m_size.height() - 3));
+ }
+
+ QSizeF m_size;
+ ViewObject *m_viewport;
+};
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(bool useTouch)
+ {
+ m_scene = new QGraphicsScene();
+
+ // -- make the main list
+ ListObject *mainList = new ListObject(QSizeF(780, 400), useTouch);
+ mainList->setObjectName(QLatin1String("MainList"));
+ m_scene->addItem(mainList);
+// ![3]
+ for (int i=0; i<NUM_LISTS; i++) {
+ ListObject *childList = new ListObject(QSizeF(mainList->m_size.width()/3, mainList->m_size.height()), useTouch);
+ childList->setObjectName(QString("ChildList %1").arg(i));
+ fillList(childList);
+ childList->setParentItem(mainList->viewport());
+ childList->setPos(i*mainList->m_size.width()/3, 0);
+ }
+ mainList->viewport()->setPos(0, 0);
+
+
+ /*
+ list1->setTransformOriginPoint(200, 200);
+ list1->setRotation(135);
+ list1->setPos(20 + 200 * .41, 20 + 200 * .41);
+ */
+// ![3]
+
+ m_view = new QGraphicsView(m_scene);
+ setCentralWidget(m_view);
+ setWindowTitle(tr("Gesture example"));
+ m_scene->setSceneRect(0, 0, m_view->viewport()->width(), m_view->viewport()->height());
+ }
+
+ /**
+ * Fills the list object \a list with RectObjects.
+ */
+ void fillList(ListObject *list)
+ {
+ qreal h = list->m_size.height() / 10;
+ for (int i=0; i<NUM_ITEMS; i++) {
+ QColor color = QColor(255*i/NUM_ITEMS, 255*(NUM_ITEMS-i)/NUM_ITEMS, 127*(i%2)+64*(i/2%2));
+ QString text = QLatin1String("Item #") + QString::number(i);
+ QGraphicsItem *rect = new RectObject(text, 0, 0, list->m_size.width() - 6, h - 3, QBrush(color), list->viewport());
+ rect->setPos(3, h*i+3);
+ }
+ list->viewport()->setPos(0, 0);
+ }
+
+
+protected:
+ void resizeEvent(QResizeEvent *e) override
+ {
+ // resize the scene according to our own size to prevent scrolling
+ m_scene->setSceneRect(0, 0, m_view->viewport()->width(), m_view->viewport()->height());
+ QMainWindow::resizeEvent(e);
+ }
+
+ QGraphicsScene *m_scene;
+ QGraphicsView *m_view;
+};
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ bool touch = (a.arguments().contains(QLatin1String("--touch")));
+ MainWindow mw(touch);
+ mw.show();
+#ifdef Q_OS_MAC
+ mw.raise();
+#endif
+ return a.exec();
+}
+
+#include "main.moc"
diff --git a/tests/manual/examples/widgets/scroller/scroller.pro b/tests/manual/examples/widgets/scroller/scroller.pro
new file mode 100644
index 0000000000..bac3f26554
--- /dev/null
+++ b/tests/manual/examples/widgets/scroller/scroller.pro
@@ -0,0 +1,2 @@
+TEMPLATE = subdirs
+SUBDIRS += graphicsview
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/CMakeLists.txt b/tests/manual/examples/widgets/tools/plugandpaint/CMakeLists.txt
new file mode 100644
index 0000000000..16b261f2f1
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(plugandpaint LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tools/plugandpaint")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+add_subdirectory(plugins)
+add_subdirectory(app)
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/app/CMakeLists.txt b/tests/manual/examples/widgets/tools/plugandpaint/app/CMakeLists.txt
new file mode 100644
index 0000000000..b4b6277e2a
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/app/CMakeLists.txt
@@ -0,0 +1,36 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+qt_add_executable(plugandpaint
+ interfaces.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+ paintarea.cpp paintarea.h
+ plugindialog.cpp plugindialog.h
+)
+
+set_target_properties(plugandpaint PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(plugandpaint PRIVATE
+ Qt6::Widgets
+ pnp_basictools
+)
+
+if(QT6_IS_SHARED_LIBS_BUILD)
+ # Build the shared plugin too when building this example target.
+ add_dependencies(plugandpaint pnp_extrafilters)
+else()
+ # Link the extrafilters plugin if Qt is built statically.
+ target_link_libraries(plugandpaint PRIVATE
+ pnp_extrafilters
+ )
+endif()
+
+install(TARGETS plugandpaint
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/app/app.pro b/tests/manual/examples/widgets/tools/plugandpaint/app/app.pro
new file mode 100644
index 0000000000..e5ff02ecf2
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/app/app.pro
@@ -0,0 +1,37 @@
+#! [0]
+TARGET = plugandpaint
+DESTDIR = ..
+
+QT += widgets
+
+HEADERS = interfaces.h \
+ mainwindow.h \
+ paintarea.h \
+ plugindialog.h
+SOURCES = main.cpp \
+ mainwindow.cpp \
+ paintarea.cpp \
+ plugindialog.cpp
+
+LIBS = -L../plugins
+
+macx-xcode {
+ LIBS += -lpnp_basictools$($${QMAKE_XCODE_LIBRARY_SUFFIX_SETTING})
+} else {
+ android {
+ LIBS += -lpnp_basictools_$${QT_ARCH}
+ } else {
+ LIBS += -lpnp_basictools
+ }
+ if(!debug_and_release|build_pass):CONFIG(debug, debug|release) {
+ mac:LIBS = $$member(LIBS, 0) $$member(LIBS, 1)_debug
+ win32:LIBS = $$member(LIBS, 0) $$member(LIBS, 1)d
+ }
+}
+#! [0]
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint
+INSTALLS += target
+
+CONFIG += install_ok # Do not cargo-cult this!
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/app/interfaces.h b/tests/manual/examples/widgets/tools/plugandpaint/app/interfaces.h
new file mode 100644
index 0000000000..9cd0e34fda
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/app/interfaces.h
@@ -0,0 +1,76 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef INTERFACES_H
+#define INTERFACES_H
+
+#include <QtPlugin>
+
+QT_BEGIN_NAMESPACE
+class QImage;
+class QPainter;
+class QWidget;
+class QPainterPath;
+class QPoint;
+class QRect;
+class QString;
+QT_END_NAMESPACE
+
+//! [0]
+class BrushInterface
+{
+public:
+ virtual ~BrushInterface() = default;
+
+ virtual QStringList brushes() const = 0;
+ virtual QRect mousePress(const QString &brush, QPainter &painter,
+ const QPoint &pos) = 0;
+ virtual QRect mouseMove(const QString &brush, QPainter &painter,
+ const QPoint &oldPos, const QPoint &newPos) = 0;
+ virtual QRect mouseRelease(const QString &brush, QPainter &painter,
+ const QPoint &pos) = 0;
+};
+//! [0]
+
+//! [1]
+class ShapeInterface
+{
+public:
+ virtual ~ShapeInterface() = default;
+
+ virtual QStringList shapes() const = 0;
+ virtual QPainterPath generateShape(const QString &shape,
+ QWidget *parent) = 0;
+};
+//! [1]
+
+//! [2]
+class FilterInterface
+{
+public:
+ virtual ~FilterInterface() = default;
+
+ virtual QStringList filters() const = 0;
+ virtual QImage filterImage(const QString &filter, const QImage &image,
+ QWidget *parent) = 0;
+};
+//! [2]
+
+QT_BEGIN_NAMESPACE
+//! [3] //! [4]
+#define BrushInterface_iid "org.qt-project.Qt.Examples.PlugAndPaint.BrushInterface/1.0"
+
+Q_DECLARE_INTERFACE(BrushInterface, BrushInterface_iid)
+//! [3]
+
+#define ShapeInterface_iid "org.qt-project.Qt.Examples.PlugAndPaint.ShapeInterface/1.0"
+
+Q_DECLARE_INTERFACE(ShapeInterface, ShapeInterface_iid)
+//! [5]
+#define FilterInterface_iid "org.qt-project.Qt.Examples.PlugAndPaint.FilterInterface/1.0"
+
+Q_DECLARE_INTERFACE(FilterInterface, FilterInterface_iid)
+//! [4] //! [5]
+QT_END_NAMESPACE
+
+#endif
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/app/main.cpp b/tests/manual/examples/widgets/tools/plugandpaint/app/main.cpp
new file mode 100644
index 0000000000..3fc647dcca
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/app/main.cpp
@@ -0,0 +1,19 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+//! [0]
+#include "mainwindow.h"
+
+#include <QApplication>
+#include <QtPlugin>
+
+Q_IMPORT_PLUGIN(BasicToolsPlugin)
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow window;
+ window.show();
+ return app.exec();
+}
+//! [0]
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/app/mainwindow.cpp b/tests/manual/examples/widgets/tools/plugandpaint/app/mainwindow.cpp
new file mode 100644
index 0000000000..8e58ae4ba8
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/app/mainwindow.cpp
@@ -0,0 +1,282 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+
+#include "mainwindow.h"
+#include "interfaces.h"
+#include "paintarea.h"
+#include "plugindialog.h"
+
+#include <QAction>
+#include <QActionGroup>
+#include <QApplication>
+#include <QColorDialog>
+#include <QFileDialog>
+#include <QInputDialog>
+#include <QMenu>
+#include <QMenuBar>
+#include <QMessageBox>
+#include <QPluginLoader>
+#include <QScrollArea>
+#include <QTimer>
+
+MainWindow::MainWindow() : paintArea(new PaintArea)
+ , scrollArea(new QScrollArea)
+{
+ scrollArea->setBackgroundRole(QPalette::Dark);
+ scrollArea->setWidget(paintArea);
+ setCentralWidget(scrollArea);
+
+ createActions();
+ createMenus();
+ loadPlugins();
+
+ setWindowTitle(tr("Plug & Paint"));
+
+ if (!brushActionGroup->actions().isEmpty())
+ brushActionGroup->actions().first()->trigger();
+
+ QTimer::singleShot(500, this, &MainWindow::aboutPlugins);
+}
+
+void MainWindow::open()
+{
+ const QString fileName = QFileDialog::getOpenFileName(this,
+ tr("Open File"),
+ QDir::currentPath());
+ if (!fileName.isEmpty()) {
+ if (!paintArea->openImage(fileName)) {
+ QMessageBox::information(this, tr("Plug & Paint"),
+ tr("Cannot load %1.").arg(fileName));
+ return;
+ }
+ paintArea->adjustSize();
+ }
+}
+
+bool MainWindow::saveAs()
+{
+ const QString initialPath = QDir::currentPath() + "/untitled.png";
+
+ const QString fileName = QFileDialog::getSaveFileName(this, tr("Save As"),
+ initialPath);
+ if (fileName.isEmpty())
+ return false;
+
+ return paintArea->saveImage(fileName, "png");
+}
+
+void MainWindow::brushColor()
+{
+ const QColor newColor = QColorDialog::getColor(paintArea->brushColor());
+ if (newColor.isValid())
+ paintArea->setBrushColor(newColor);
+}
+
+void MainWindow::brushWidth()
+{
+ bool ok;
+ const int newWidth = QInputDialog::getInt(this, tr("Plug & Paint"),
+ tr("Select brush width:"),
+ paintArea->brushWidth(),
+ 1, 50, 1, &ok);
+ if (ok)
+ paintArea->setBrushWidth(newWidth);
+}
+
+//! [0]
+void MainWindow::changeBrush()
+{
+ auto action = qobject_cast<QAction *>(sender());
+ if (!action)
+ return;
+ auto iBrush = qobject_cast<BrushInterface *>(action->parent());
+ if (!iBrush)
+ return;
+ const QString brush = action->text();
+
+ paintArea->setBrush(iBrush, brush);
+}
+//! [0]
+
+//! [1]
+void MainWindow::insertShape()
+{
+ auto action = qobject_cast<QAction *>(sender());
+ if (!action)
+ return;
+ auto iShape = qobject_cast<ShapeInterface *>(action->parent());
+ if (!iShape)
+ return;
+
+ const QPainterPath path = iShape->generateShape(action->text(), this);
+ if (!path.isEmpty())
+ paintArea->insertShape(path);
+}
+//! [1]
+
+//! [2]
+void MainWindow::applyFilter()
+{
+ auto action = qobject_cast<QAction *>(sender());
+ if (!action)
+ return;
+ auto iFilter = qobject_cast<FilterInterface *>(action->parent());
+ if (!iFilter)
+ return;
+
+ const QImage image = iFilter->filterImage(action->text(), paintArea->image(),
+ this);
+ paintArea->setImage(image);
+}
+//! [2]
+
+void MainWindow::about()
+{
+ QMessageBox::about(this, tr("About Plug & Paint"),
+ tr("The <b>Plug & Paint</b> example demonstrates how to write Qt "
+ "applications that can be extended through plugins."));
+}
+
+//! [3]
+void MainWindow::aboutPlugins()
+{
+ PluginDialog dialog(pluginsDir.path(), pluginFileNames, this);
+ dialog.exec();
+}
+//! [3]
+
+void MainWindow::createActions()
+{
+ openAct = new QAction(tr("&Open..."), this);
+ openAct->setShortcuts(QKeySequence::Open);
+ connect(openAct, &QAction::triggered, this, &MainWindow::open);
+
+ saveAsAct = new QAction(tr("&Save As..."), this);
+ saveAsAct->setShortcuts(QKeySequence::SaveAs);
+ connect(saveAsAct, &QAction::triggered, this, &MainWindow::saveAs);
+
+ exitAct = new QAction(tr("E&xit"), this);
+ exitAct->setShortcuts(QKeySequence::Quit);
+ connect(exitAct, &QAction::triggered, this, &MainWindow::close);
+
+ brushColorAct = new QAction(tr("&Brush Color..."), this);
+ connect(brushColorAct, &QAction::triggered, this, &MainWindow::brushColor);
+
+ brushWidthAct = new QAction(tr("&Brush Width..."), this);
+ connect(brushWidthAct, &QAction::triggered, this, &MainWindow::brushWidth);
+
+ brushActionGroup = new QActionGroup(this);
+
+ aboutAct = new QAction(tr("&About"), this);
+ connect(aboutAct, &QAction::triggered, this, &MainWindow::about);
+
+ aboutQtAct = new QAction(tr("About &Qt"), this);
+ connect(aboutQtAct, &QAction::triggered, qApp, &QApplication::aboutQt);
+
+ aboutPluginsAct = new QAction(tr("About &Plugins"), this);
+ connect(aboutPluginsAct, &QAction::triggered, this, &MainWindow::aboutPlugins);
+}
+
+void MainWindow::createMenus()
+{
+ fileMenu = menuBar()->addMenu(tr("&File"));
+ fileMenu->addAction(openAct);
+ fileMenu->addAction(saveAsAct);
+ fileMenu->addSeparator();
+ fileMenu->addAction(exitAct);
+
+ brushMenu = menuBar()->addMenu(tr("&Brush"));
+ brushMenu->addAction(brushColorAct);
+ brushMenu->addAction(brushWidthAct);
+ brushMenu->addSeparator();
+
+ shapesMenu = menuBar()->addMenu(tr("&Shapes"));
+
+ filterMenu = menuBar()->addMenu(tr("&Filter"));
+
+ menuBar()->addSeparator();
+
+ helpMenu = menuBar()->addMenu(tr("&Help"));
+ helpMenu->addAction(aboutAct);
+ helpMenu->addAction(aboutQtAct);
+ helpMenu->addAction(aboutPluginsAct);
+}
+
+//! [4]
+void MainWindow::loadPlugins()
+{
+ const auto staticInstances = QPluginLoader::staticInstances();
+ for (QObject *plugin : staticInstances)
+ populateMenus(plugin);
+//! [4] //! [5]
+
+ pluginsDir = QDir(QCoreApplication::applicationDirPath());
+
+#if defined(Q_OS_WIN)
+ if (pluginsDir.dirName().toLower() == "debug" || pluginsDir.dirName().toLower() == "release")
+ pluginsDir.cdUp();
+#elif defined(Q_OS_MAC)
+ if (pluginsDir.dirName() == "MacOS") {
+ pluginsDir.cdUp();
+ pluginsDir.cdUp();
+ pluginsDir.cdUp();
+ }
+#endif
+ pluginsDir.cd("plugins");
+//! [5]
+
+//! [6]
+ const auto entryList = pluginsDir.entryList(QDir::Files);
+ for (const QString &fileName : entryList) {
+ QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
+ QObject *plugin = loader.instance();
+ if (plugin) {
+ populateMenus(plugin);
+ pluginFileNames += fileName;
+//! [6] //! [7]
+ }
+//! [7] //! [8]
+ }
+//! [8]
+
+//! [9]
+ brushMenu->setEnabled(!brushActionGroup->actions().isEmpty());
+ shapesMenu->setEnabled(!shapesMenu->actions().isEmpty());
+ filterMenu->setEnabled(!filterMenu->actions().isEmpty());
+}
+//! [9]
+
+//! [10]
+void MainWindow::populateMenus(QObject *plugin)
+{
+ auto iBrush = qobject_cast<BrushInterface *>(plugin);
+ if (iBrush)
+ addToMenu(plugin, iBrush->brushes(), brushMenu, &MainWindow::changeBrush,
+ brushActionGroup);
+
+ auto iShape = qobject_cast<ShapeInterface *>(plugin);
+ if (iShape)
+ addToMenu(plugin, iShape->shapes(), shapesMenu, &MainWindow::insertShape);
+
+ auto iFilter = qobject_cast<FilterInterface *>(plugin);
+ if (iFilter)
+ addToMenu(plugin, iFilter->filters(), filterMenu, &MainWindow::applyFilter);
+}
+//! [10]
+
+void MainWindow::addToMenu(QObject *plugin, const QStringList &texts,
+ QMenu *menu, Member member,
+ QActionGroup *actionGroup)
+{
+ for (const QString &text : texts) {
+ auto action = new QAction(text, plugin);
+ connect(action, &QAction::triggered, this, member);
+ menu->addAction(action);
+
+ if (actionGroup) {
+ action->setCheckable(true);
+ actionGroup->addAction(action);
+ }
+ }
+}
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/app/mainwindow.h b/tests/manual/examples/widgets/tools/plugandpaint/app/mainwindow.h
new file mode 100644
index 0000000000..bc09471ba5
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/app/mainwindow.h
@@ -0,0 +1,68 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QDir>
+#include <QMainWindow>
+#include <QStringList>
+
+QT_BEGIN_NAMESPACE
+class QAction;
+class QActionGroup;
+class QMenu;
+class QScrollArea;
+QT_END_NAMESPACE
+class PaintArea;
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow();
+
+private slots:
+ void open();
+ bool saveAs();
+ void brushColor();
+ void brushWidth();
+ void changeBrush();
+ void insertShape();
+ void applyFilter();
+ void about();
+ void aboutPlugins();
+
+private:
+ typedef void (MainWindow::*Member)();
+
+ void createActions();
+ void createMenus();
+ void loadPlugins();
+ void populateMenus(QObject *plugin);
+ void addToMenu(QObject *plugin, const QStringList &texts, QMenu *menu,
+ Member member, QActionGroup *actionGroup = nullptr);
+
+ PaintArea *paintArea = nullptr;
+ QScrollArea *scrollArea = nullptr;
+ QDir pluginsDir;
+ QStringList pluginFileNames;
+
+ QMenu *fileMenu = nullptr;
+ QMenu *brushMenu = nullptr;
+ QMenu *shapesMenu = nullptr;
+ QMenu *filterMenu = nullptr;
+ QMenu *helpMenu = nullptr;
+ QActionGroup *brushActionGroup = nullptr;
+ QAction *openAct = nullptr;
+ QAction *saveAsAct = nullptr;
+ QAction *exitAct = nullptr;
+ QAction *brushWidthAct = nullptr;
+ QAction *brushColorAct = nullptr;
+ QAction *aboutAct = nullptr;
+ QAction *aboutQtAct = nullptr;
+ QAction *aboutPluginsAct = nullptr;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/app/paintarea.cpp b/tests/manual/examples/widgets/tools/plugandpaint/app/paintarea.cpp
new file mode 100644
index 0000000000..3596f7979c
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/app/paintarea.cpp
@@ -0,0 +1,152 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+
+#include "paintarea.h"
+#include "interfaces.h"
+
+#include <QMouseEvent>
+#include <QPainter>
+
+PaintArea::PaintArea(QWidget *parent) : QWidget(parent)
+{
+ setAttribute(Qt::WA_StaticContents);
+ setAttribute(Qt::WA_OpaquePaintEvent);
+
+ theImage.fill(qRgb(255, 255, 255));
+}
+
+bool PaintArea::openImage(const QString &fileName)
+{
+ QImage image;
+ if (!image.load(fileName))
+ return false;
+
+ setImage(image);
+ return true;
+}
+
+bool PaintArea::saveImage(const QString &fileName, const char *fileFormat)
+{
+ return theImage.save(fileName, fileFormat);
+}
+
+void PaintArea::setImage(const QImage &image)
+{
+ theImage = image.convertToFormat(QImage::Format_RGB32);
+ update();
+ updateGeometry();
+}
+
+void PaintArea::insertShape(const QPainterPath &path)
+{
+ pendingPath = path;
+#ifndef QT_NO_CURSOR
+ setCursor(Qt::CrossCursor);
+#endif
+}
+
+void PaintArea::setBrushColor(const QColor &color)
+{
+ this->color = color;
+}
+
+void PaintArea::setBrushWidth(int width)
+{
+ thickness = width;
+}
+
+//! [0]
+void PaintArea::setBrush(BrushInterface *brushInterface, const QString &brush)
+{
+ this->brushInterface = brushInterface;
+ this->brush = brush;
+}
+//! [0]
+
+QSize PaintArea::sizeHint() const
+{
+ return theImage.size();
+}
+
+void PaintArea::paintEvent(QPaintEvent * /* event */)
+{
+ QPainter painter(this);
+ painter.drawImage(QPoint(0, 0), theImage);
+}
+
+void PaintArea::mousePressEvent(QMouseEvent *event)
+{
+ if (event->button() == Qt::LeftButton) {
+ if (!pendingPath.isEmpty()) {
+ QPainter painter(&theImage);
+ setupPainter(painter);
+
+ const QRectF boundingRect = pendingPath.boundingRect();
+ QLinearGradient gradient(boundingRect.topRight(),
+ boundingRect.bottomLeft());
+ gradient.setColorAt(0.0, QColor(color.red(), color.green(),
+ color.blue(), 63));
+ gradient.setColorAt(1.0, QColor(color.red(), color.green(),
+ color.blue(), 191));
+ painter.setBrush(gradient);
+ painter.translate(event->position().toPoint() - boundingRect.center());
+ painter.drawPath(pendingPath);
+
+ pendingPath = QPainterPath();
+#ifndef QT_NO_CURSOR
+ unsetCursor();
+#endif
+ update();
+ } else {
+ if (brushInterface) {
+ QPainter painter(&theImage);
+ setupPainter(painter);
+ const QRect rect = brushInterface->mousePress(brush, painter,
+ event->position().toPoint());
+ update(rect);
+ }
+
+ lastPos = event->position().toPoint();
+ }
+ }
+}
+
+//! [1]
+void PaintArea::mouseMoveEvent(QMouseEvent *event)
+{
+ if ((event->buttons() & Qt::LeftButton) && lastPos != QPoint(-1, -1)) {
+ if (brushInterface) {
+ QPainter painter(&theImage);
+ setupPainter(painter);
+ const QRect rect = brushInterface->mouseMove(brush, painter, lastPos,
+ event->position().toPoint());
+ update(rect);
+ }
+
+ lastPos = event->position().toPoint();
+ }
+}
+//! [1]
+
+void PaintArea::mouseReleaseEvent(QMouseEvent *event)
+{
+ if (event->button() == Qt::LeftButton && lastPos != QPoint(-1, -1)) {
+ if (brushInterface) {
+ QPainter painter(&theImage);
+ setupPainter(painter);
+ QRect rect = brushInterface->mouseRelease(brush, painter,
+ event->position().toPoint());
+ update(rect);
+ }
+
+ lastPos = QPoint(-1, -1);
+ }
+}
+
+void PaintArea::setupPainter(QPainter &painter)
+{
+ painter.setRenderHint(QPainter::Antialiasing, true);
+ painter.setPen(QPen(color, thickness, Qt::SolidLine, Qt::RoundCap,
+ Qt::RoundJoin));
+}
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/app/paintarea.h b/tests/manual/examples/widgets/tools/plugandpaint/app/paintarea.h
new file mode 100644
index 0000000000..f24db0ba89
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/app/paintarea.h
@@ -0,0 +1,54 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PAINTAREA_H
+#define PAINTAREA_H
+
+#include <QColor>
+#include <QImage>
+#include <QPainterPath>
+#include <QWidget>
+
+class BrushInterface;
+
+class PaintArea : public QWidget
+{
+ Q_OBJECT
+
+public:
+ PaintArea(QWidget *parent = nullptr);
+
+ bool openImage(const QString &fileName);
+ bool saveImage(const QString &fileName, const char *fileFormat);
+ void setImage(const QImage &image);
+ void insertShape(const QPainterPath &path);
+ void setBrushColor(const QColor &color);
+ void setBrushWidth(int width);
+ void setBrush(BrushInterface *brushInterface, const QString &brush);
+
+ QImage image() const { return theImage; }
+ QColor brushColor() const { return color; }
+ int brushWidth() const { return thickness; }
+ QSize sizeHint() const override;
+
+protected:
+ void paintEvent(QPaintEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void mouseMoveEvent(QMouseEvent *event) override;
+ void mouseReleaseEvent(QMouseEvent *event) override;
+
+private:
+ void setupPainter(QPainter &painter);
+
+ QImage theImage = {500, 400, QImage::Format_RGB32};
+ QColor color = Qt::blue;
+ int thickness = 3;
+
+ BrushInterface *brushInterface = nullptr;
+ QString brush;
+ QPoint lastPos = {-1, -1};
+
+ QPainterPath pendingPath;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/app/plugindialog.cpp b/tests/manual/examples/widgets/tools/plugandpaint/app/plugindialog.cpp
new file mode 100644
index 0000000000..2ff5c4b1e3
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/app/plugindialog.cpp
@@ -0,0 +1,118 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+
+#include "plugindialog.h"
+#include "interfaces.h"
+
+#include <QDir>
+#include <QGridLayout>
+#include <QHeaderView>
+#include <QLabel>
+#include <QPluginLoader>
+#include <QPushButton>
+#include <QStringList>
+#include <QTreeWidget>
+#include <QTreeWidgetItem>
+
+PluginDialog::PluginDialog(const QString &path, const QStringList &fileNames,
+ QWidget *parent) :
+ QDialog(parent),
+ label(new QLabel),
+ treeWidget(new QTreeWidget),
+ okButton(new QPushButton(tr("OK")))
+{
+ treeWidget->setAlternatingRowColors(false);
+ treeWidget->setSelectionMode(QAbstractItemView::NoSelection);
+ treeWidget->setColumnCount(1);
+ treeWidget->header()->hide();
+
+ okButton->setDefault(true);
+
+ connect(okButton, &QAbstractButton::clicked, this, &QWidget::close);
+
+ QGridLayout *mainLayout = new QGridLayout;
+ mainLayout->setColumnStretch(0, 1);
+ mainLayout->setColumnStretch(2, 1);
+ mainLayout->addWidget(label, 0, 0, 1, 3);
+ mainLayout->addWidget(treeWidget, 1, 0, 1, 3);
+ mainLayout->addWidget(okButton, 2, 1);
+ setLayout(mainLayout);
+
+ interfaceIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirOpenIcon),
+ QIcon::Normal, QIcon::On);
+ interfaceIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirClosedIcon),
+ QIcon::Normal, QIcon::Off);
+ featureIcon.addPixmap(style()->standardPixmap(QStyle::SP_FileIcon));
+
+ setWindowTitle(tr("Plugin Information"));
+ findPlugins(path, fileNames);
+}
+
+//! [0]
+void PluginDialog::findPlugins(const QString &path,
+ const QStringList &fileNames)
+{
+ label->setText(tr("Plug & Paint found the following plugins\n"
+ "(looked in %1):")
+ .arg(QDir::toNativeSeparators(path)));
+
+ const QDir dir(path);
+
+ const auto staticInstances = QPluginLoader::staticInstances();
+ for (QObject *plugin : staticInstances)
+ populateTreeWidget(plugin, tr("%1 (Static Plugin)")
+ .arg(plugin->metaObject()->className()));
+
+ for (const QString &fileName : fileNames) {
+ QPluginLoader loader(dir.absoluteFilePath(fileName));
+ QObject *plugin = loader.instance();
+ if (plugin)
+ populateTreeWidget(plugin, fileName);
+ }
+}
+//! [0]
+
+//! [1]
+void PluginDialog::populateTreeWidget(QObject *plugin, const QString &text)
+{
+ auto pluginItem = new QTreeWidgetItem(treeWidget);
+ pluginItem->setText(0, text);
+ pluginItem->setExpanded(true);
+
+ QFont boldFont = pluginItem->font(0);
+ boldFont.setBold(true);
+ pluginItem->setFont(0, boldFont);
+
+ if (plugin) {
+ auto iBrush = qobject_cast<BrushInterface *>(plugin);
+ if (iBrush)
+ addItems(pluginItem, "BrushInterface", iBrush->brushes());
+
+ auto iShape = qobject_cast<ShapeInterface *>(plugin);
+ if (iShape)
+ addItems(pluginItem, "ShapeInterface", iShape->shapes());
+
+ auto iFilter = qobject_cast<FilterInterface *>(plugin);
+ if (iFilter)
+ addItems(pluginItem, "FilterInterface", iFilter->filters());
+ }
+}
+//! [1]
+
+void PluginDialog::addItems(QTreeWidgetItem *pluginItem,
+ const char *interfaceName,
+ const QStringList &features)
+{
+ auto interfaceItem = new QTreeWidgetItem(pluginItem);
+ interfaceItem->setText(0, interfaceName);
+ interfaceItem->setIcon(0, interfaceIcon);
+
+ for (QString feature : features) {
+ if (feature.endsWith("..."))
+ feature.chop(3);
+ auto featureItem = new QTreeWidgetItem(interfaceItem);
+ featureItem->setText(0, feature);
+ featureItem->setIcon(0, featureIcon);
+ }
+}
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/app/plugindialog.h b/tests/manual/examples/widgets/tools/plugandpaint/app/plugindialog.h
new file mode 100644
index 0000000000..32b8aa6fe0
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/app/plugindialog.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef PLUGINDIALOG_H
+#define PLUGINDIALOG_H
+
+#include <QDialog>
+#include <QIcon>
+
+QT_BEGIN_NAMESPACE
+class QLabel;
+class QPushButton;
+class QTreeWidget;
+class QTreeWidgetItem;
+QT_END_NAMESPACE
+
+class PluginDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ PluginDialog(const QString &path, const QStringList &fileNames,
+ QWidget *parent = nullptr);
+
+private:
+ void findPlugins(const QString &path, const QStringList &fileNames);
+ void populateTreeWidget(QObject *plugin, const QString &text);
+ void addItems(QTreeWidgetItem *pluginItem, const char *interfaceName,
+ const QStringList &features);
+
+ QLabel *label = nullptr;
+ QTreeWidget *treeWidget = nullptr;
+ QPushButton *okButton = nullptr;
+ QIcon interfaceIcon;
+ QIcon featureIcon;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugandpaint.pro b/tests/manual/examples/widgets/tools/plugandpaint/plugandpaint.pro
new file mode 100644
index 0000000000..58c4dbbb6e
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugandpaint.pro
@@ -0,0 +1,7 @@
+QT_FOR_CONFIG += widgets
+requires(qtConfig(inputdialog))
+
+TEMPLATE = subdirs
+SUBDIRS = plugins app
+
+app.depends = plugins
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/CMakeLists.txt b/tests/manual/examples/widgets/tools/plugandpaint/plugins/CMakeLists.txt
new file mode 100644
index 0000000000..9a2d66d99e
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/CMakeLists.txt
@@ -0,0 +1,2 @@
+add_subdirectory(basictools)
+add_subdirectory(extrafilters)
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/CMakeLists.txt b/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/CMakeLists.txt
new file mode 100644
index 0000000000..8b6436173b
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/CMakeLists.txt
@@ -0,0 +1,18 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+qt_add_plugin(pnp_basictools
+ STATIC
+ CLASS_NAME BasicToolsPlugin
+ basictoolsplugin.cpp basictoolsplugin.h
+)
+
+target_include_directories(pnp_basictools PRIVATE
+ ../../app
+)
+
+target_link_libraries(pnp_basictools PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.json b/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.json
new file mode 100644
index 0000000000..0967ef424b
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.json
@@ -0,0 +1 @@
+{}
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro b/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro
new file mode 100644
index 0000000000..f5ba95252c
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictools.pro
@@ -0,0 +1,17 @@
+#! [0]
+TEMPLATE = lib
+CONFIG += plugin static
+QT += widgets
+INCLUDEPATH += ../../app
+HEADERS = basictoolsplugin.h
+SOURCES = basictoolsplugin.cpp
+TARGET = $$qtLibraryTarget(pnp_basictools)
+DESTDIR = ../../plugins
+#! [0]
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
+INSTALLS += target
+
+CONFIG += install_ok # Do not cargo-cult this!
+uikit: CONFIG += debug_and_release
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictoolsplugin.cpp b/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictoolsplugin.cpp
new file mode 100644
index 0000000000..6a350f38a4
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictoolsplugin.cpp
@@ -0,0 +1,150 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "basictoolsplugin.h"
+
+#include <QInputDialog>
+#include <QPainter>
+#include <QRandomGenerator>
+#include <QtMath>
+
+//! [0]
+QStringList BasicToolsPlugin::brushes() const
+{
+ return {tr("Pencil"), tr("Air Brush"), tr("Random Letters")};
+}
+//! [0]
+
+//! [1]
+QRect BasicToolsPlugin::mousePress(const QString &brush, QPainter &painter,
+ const QPoint &pos)
+{
+ return mouseMove(brush, painter, pos, pos);
+}
+//! [1]
+
+//! [2]
+QRect BasicToolsPlugin::mouseMove(const QString &brush, QPainter &painter,
+ const QPoint &oldPos, const QPoint &newPos)
+{
+ painter.save();
+
+ int rad = painter.pen().width() / 2;
+ QRect boundingRect = QRect(oldPos, newPos).normalized()
+ .adjusted(-rad, -rad, +rad, +rad);
+ QColor color = painter.pen().color();
+ int thickness = painter.pen().width();
+ QColor transparentColor(color.red(), color.green(), color.blue(), 0);
+//! [2] //! [3]
+
+ if (brush == tr("Pencil")) {
+ painter.drawLine(oldPos, newPos);
+ } else if (brush == tr("Air Brush")) {
+ int numSteps = 2 + (newPos - oldPos).manhattanLength() / 2;
+
+ painter.setBrush(QBrush(color, Qt::Dense6Pattern));
+ painter.setPen(Qt::NoPen);
+
+ for (int i = 0; i < numSteps; ++i) {
+ int x = oldPos.x() + i * (newPos.x() - oldPos.x()) / (numSteps - 1);
+ int y = oldPos.y() + i * (newPos.y() - oldPos.y()) / (numSteps - 1);
+
+ painter.drawEllipse(x - (thickness / 2), y - (thickness / 2),
+ thickness, thickness);
+ }
+ } else if (brush == tr("Random Letters")) {
+ QChar ch(QRandomGenerator::global()->bounded('A', 'Z' + 1));
+
+ QFont biggerFont = painter.font();
+ biggerFont.setBold(true);
+ biggerFont.setPointSize(biggerFont.pointSize() + thickness);
+ painter.setFont(biggerFont);
+
+ painter.drawText(newPos, QString(ch));
+
+ QFontMetrics metrics(painter.font());
+ boundingRect = metrics.boundingRect(ch);
+ boundingRect.translate(newPos);
+ boundingRect.adjust(-10, -10, +10, +10);
+ }
+ painter.restore();
+ return boundingRect;
+}
+//! [3]
+
+//! [4]
+QRect BasicToolsPlugin::mouseRelease(const QString & /* brush */,
+ QPainter & /* painter */,
+ const QPoint & /* pos */)
+{
+ return QRect(0, 0, 0, 0);
+}
+//! [4]
+
+//! [5]
+QStringList BasicToolsPlugin::shapes() const
+{
+ return {tr("Circle"), tr("Star"), tr("Text...")};
+}
+//! [5]
+
+//! [6]
+QPainterPath BasicToolsPlugin::generateShape(const QString &shape,
+ QWidget *parent)
+{
+ QPainterPath path;
+
+ if (shape == tr("Circle")) {
+ path.addEllipse(0, 0, 50, 50);
+ } else if (shape == tr("Star")) {
+ path.moveTo(90, 50);
+ for (int i = 1; i < 5; ++i) {
+ path.lineTo(50 + 40 * std::cos(0.8 * i * M_PI),
+ 50 + 40 * std::sin(0.8 * i * M_PI));
+ }
+ path.closeSubpath();
+ } else if (shape == tr("Text...")) {
+ QString text = QInputDialog::getText(parent, tr("Text Shape"),
+ tr("Enter text:"),
+ QLineEdit::Normal, tr("Qt"));
+ if (!text.isEmpty()) {
+ QFont timesFont("Times", 50);
+ timesFont.setStyleStrategy(QFont::ForceOutline);
+ path.addText(0, 0, timesFont, text);
+ }
+ }
+
+ return path;
+}
+//! [6]
+
+//! [7]
+QStringList BasicToolsPlugin::filters() const
+{
+ return {tr("Invert Pixels"), tr("Swap RGB"), tr("Grayscale")};
+}
+//! [7]
+
+//! [8]
+QImage BasicToolsPlugin::filterImage(const QString &filter, const QImage &image,
+ QWidget * /* parent */)
+{
+ QImage result = image.convertToFormat(QImage::Format_RGB32);
+
+ if (filter == tr("Invert Pixels")) {
+ result.invertPixels();
+ } else if (filter == tr("Swap RGB")) {
+ result = result.rgbSwapped();
+ } else if (filter == tr("Grayscale")) {
+ for (int y = 0; y < result.height(); ++y) {
+ for (int x = 0; x < result.width(); ++x) {
+ QRgb pixel = result.pixel(x, y);
+ int gray = qGray(pixel);
+ int alpha = qAlpha(pixel);
+ result.setPixel(x, y, qRgba(gray, gray, gray, alpha));
+ }
+ }
+ }
+ return result;
+}
+//! [8]
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictoolsplugin.h b/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictoolsplugin.h
new file mode 100644
index 0000000000..9fb3295bf5
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/basictools/basictoolsplugin.h
@@ -0,0 +1,54 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef BASICTOOLSPLUGIN_H
+#define BASICTOOLSPLUGIN_H
+
+//! [0]
+#include <interfaces.h>
+
+#include <QImage>
+#include <QObject>
+#include <QPainterPath>
+#include <QRect>
+#include <QStringList>
+#include <QtPlugin>
+
+//! [1]
+class BasicToolsPlugin : public QObject,
+ public BrushInterface,
+ public ShapeInterface,
+ public FilterInterface
+{
+ Q_OBJECT
+//! [4]
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.Examples.PlugAndPaint.BrushInterface" FILE "basictools.json")
+//! [4]
+ Q_INTERFACES(BrushInterface ShapeInterface FilterInterface)
+//! [0]
+
+//! [2]
+public:
+//! [1]
+ // BrushInterface
+ QStringList brushes() const override;
+ QRect mousePress(const QString &brush, QPainter &painter,
+ const QPoint &pos) override;
+ QRect mouseMove(const QString &brush, QPainter &painter,
+ const QPoint &oldPos, const QPoint &newPos) override;
+ QRect mouseRelease(const QString &brush, QPainter &painter,
+ const QPoint &pos) override;
+
+ // ShapeInterface
+ QStringList shapes() const override;
+ QPainterPath generateShape(const QString &shape, QWidget *parent) override;
+
+ // FilterInterface
+ QStringList filters() const override;
+ QImage filterImage(const QString &filter, const QImage &image,
+ QWidget *parent) override;
+//! [3]
+};
+//! [2] //! [3]
+
+#endif
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/CMakeLists.txt b/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/CMakeLists.txt
new file mode 100644
index 0000000000..ead67decd5
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+qt_add_plugin(pnp_extrafilters
+ CLASS_NAME ExtraFiltersPlugin
+ extrafiltersplugin.cpp extrafiltersplugin.h
+)
+
+set_target_properties(pnp_extrafilters PROPERTIES
+ LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/app"
+)
+
+target_include_directories(pnp_extrafilters PRIVATE
+ ../../app
+)
+
+target_link_libraries(pnp_extrafilters PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS pnp_extrafilters
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}/plugins"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}/plugins"
+)
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.json b/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.json
new file mode 100644
index 0000000000..0967ef424b
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.json
@@ -0,0 +1 @@
+{}
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro b/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro
new file mode 100644
index 0000000000..e137b04823
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafilters.pro
@@ -0,0 +1,17 @@
+#! [0]
+TEMPLATE = lib
+CONFIG += plugin
+QT += widgets
+INCLUDEPATH += ../../app
+HEADERS = extrafiltersplugin.h
+SOURCES = extrafiltersplugin.cpp
+TARGET = $$qtLibraryTarget(pnp_extrafilters)
+DESTDIR = ../../plugins
+
+#! [0]
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/plugandpaint/plugins
+INSTALLS += target
+
+CONFIG += install_ok # Do not cargo-cult this!
+uikit: CONFIG += debug_and_release
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafiltersplugin.cpp b/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafiltersplugin.cpp
new file mode 100644
index 0000000000..5356efc328
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafiltersplugin.cpp
@@ -0,0 +1,82 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "extrafiltersplugin.h"
+
+#include <QInputDialog>
+
+QStringList ExtraFiltersPlugin::filters() const
+{
+ return {tr("Flip Horizontally"), tr("Flip Vertically"),
+ tr("Smudge..."), tr("Threshold...")};
+}
+
+QImage ExtraFiltersPlugin::filterImage(const QString &filter,
+ const QImage &image, QWidget *parent)
+{
+ QImage original = image.convertToFormat(QImage::Format_RGB32);
+ QImage result = original;
+
+ if (filter == tr("Flip Horizontally")) {
+ for (int y = 0; y < original.height(); ++y) {
+ for (int x = 0; x < original.width(); ++x) {
+ QRgb pixel = original.pixel(original.width() - x - 1, y);
+ result.setPixel(x, y, pixel);
+ }
+ }
+ } else if (filter == tr("Flip Vertically")) {
+ for (int y = 0; y < original.height(); ++y) {
+ for (int x = 0; x < original.width(); ++x) {
+ QRgb pixel = original.pixel(x, original.height() - y - 1);
+ result.setPixel(x, y, pixel);
+ }
+ }
+ } else if (filter == tr("Smudge...")) {
+ bool ok;
+ int numIters = QInputDialog::getInt(parent, tr("Smudge Filter"),
+ tr("Enter number of iterations:"),
+ 5, 1, 20, 1, &ok);
+ if (ok) {
+ for (int i = 0; i < numIters; ++i) {
+ for (int y = 1; y < original.height() - 1; ++y) {
+ for (int x = 1; x < original.width() - 1; ++x) {
+ QRgb p1 = original.pixel(x, y);
+ QRgb p2 = original.pixel(x, y + 1);
+ QRgb p3 = original.pixel(x, y - 1);
+ QRgb p4 = original.pixel(x + 1, y);
+ QRgb p5 = original.pixel(x - 1, y);
+
+ int red = (qRed(p1) + qRed(p2) + qRed(p3) + qRed(p4)
+ + qRed(p5)) / 5;
+ int green = (qGreen(p1) + qGreen(p2) + qGreen(p3)
+ + qGreen(p4) + qGreen(p5)) / 5;
+ int blue = (qBlue(p1) + qBlue(p2) + qBlue(p3)
+ + qBlue(p4) + qBlue(p5)) / 5;
+ int alpha = (qAlpha(p1) + qAlpha(p2) + qAlpha(p3)
+ + qAlpha(p4) + qAlpha(p5)) / 5;
+
+ result.setPixel(x, y, qRgba(red, green, blue, alpha));
+ }
+ }
+ }
+ }
+ } else if (filter == tr("Threshold...")) {
+ bool ok;
+ int threshold = QInputDialog::getInt(parent, tr("Threshold Filter"),
+ tr("Enter threshold:"),
+ 10, 1, 256, 1, &ok);
+ if (ok) {
+ int factor = 256 / threshold;
+ for (int y = 0; y < original.height(); ++y) {
+ for (int x = 0; x < original.width(); ++x) {
+ QRgb pixel = original.pixel(x, y);
+ result.setPixel(x, y, qRgba(qRed(pixel) / factor * factor,
+ qGreen(pixel) / factor * factor,
+ qBlue(pixel) / factor * factor,
+ qAlpha(pixel)));
+ }
+ }
+ }
+ }
+ return result;
+}
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafiltersplugin.h b/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafiltersplugin.h
new file mode 100644
index 0000000000..0fc50d2fd0
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/extrafilters/extrafiltersplugin.h
@@ -0,0 +1,28 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef EXTRAFILTERSPLUGIN_H
+#define EXTRAFILTERSPLUGIN_H
+
+//! [0]
+#include <interfaces.h>
+
+#include <QObject>
+#include <QtPlugin>
+#include <QStringList>
+#include <QImage>
+
+class ExtraFiltersPlugin : public QObject, public FilterInterface
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.Examples.PlugAndPaint.FilterInterface" FILE "extrafilters.json")
+ Q_INTERFACES(FilterInterface)
+
+public:
+ QStringList filters() const override;
+ QImage filterImage(const QString &filter, const QImage &image,
+ QWidget *parent) override;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/tools/plugandpaint/plugins/plugins.pro b/tests/manual/examples/widgets/tools/plugandpaint/plugins/plugins.pro
new file mode 100644
index 0000000000..e15220c621
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/plugandpaint/plugins/plugins.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+SUBDIRS = basictools \
+ extrafilters
diff --git a/tests/manual/examples/widgets/tools/settingseditor/CMakeLists.txt b/tests/manual/examples/widgets/tools/settingseditor/CMakeLists.txt
new file mode 100644
index 0000000000..3b934a9ae9
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/CMakeLists.txt
@@ -0,0 +1,20 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+if(NOT QT_BUILD_STANDALONE_TESTS AND NOT QT_BUILDING_QT)
+ cmake_minimum_required(VERSION 3.16)
+ project(settingseditor LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+qt_internal_add_manual_test(settingseditor
+ SOURCES
+ locationdialog.cpp locationdialog.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+ settingstree.cpp settingstree.h
+ variantdelegate.cpp variantdelegate.h
+ LIBRARIES
+ Qt::Widgets
+)
diff --git a/tests/manual/examples/widgets/tools/settingseditor/inifiles/licensepage.ini b/tests/manual/examples/widgets/tools/settingseditor/inifiles/licensepage.ini
new file mode 100644
index 0000000000..608d1b7885
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/inifiles/licensepage.ini
@@ -0,0 +1,46 @@
+[Field%201]
+Bottom=89
+Flags=MULTILINE|VSCROLL|READONLY
+Left=4
+Right=296
+State=No license agreement file found. Please contact support.
+Top=14
+Type=Text
+
+[Field%202]
+Bottom=8
+Left=4
+Right=294
+Text=Press Page Down to see the rest of the agreement.
+Top=0
+Type=Label
+
+[Field%203]
+Bottom=111
+Left=4
+Right=297
+Text=If you accept the terms of the agreement, select the first option below. You must accept the agreement to install this software. Click Next to continue.
+Top=92
+Type=Label
+
+[Field%204]
+Bottom=129
+Flags=GROUP|NOTIFY
+Left=4
+Right=299
+Text=I &accept the terms in the License Agreement
+Top=120
+Type=RadioButton
+
+[Field%205]
+Bottom=140
+Flags=NOTIFY
+Left=4
+Right=300
+State=1
+Text=I &do not accept the terms in the License Agreement
+Top=129
+Type=RadioButton
+
+[Settings]
+NumFields=5
diff --git a/tests/manual/examples/widgets/tools/settingseditor/inifiles/qsa.ini b/tests/manual/examples/widgets/tools/settingseditor/inifiles/qsa.ini
new file mode 100644
index 0000000000..56a2964ee5
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/inifiles/qsa.ini
@@ -0,0 +1,26 @@
+[Field%201]
+Bottom=65
+Left=0
+Right=299
+Text=QSA Build Options
+Top=9
+Type=Groupbox
+
+[Field%202]
+Bottom=37
+Left=20
+Right=284
+Text=Don't compile QSA Workbench into QSA.
+Top=27
+Type=Checkbox
+
+[Field%203]
+Bottom=56
+Left=20
+Right=247
+Text=Don't compile QSA Workbench nor QSA Editor into QSA.
+Top=45
+Type=Checkbox
+
+[Settings]
+NumFields=3
diff --git a/tests/manual/examples/widgets/tools/settingseditor/locationdialog.cpp b/tests/manual/examples/widgets/tools/settingseditor/locationdialog.cpp
new file mode 100644
index 0000000000..1c41d45009
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/locationdialog.cpp
@@ -0,0 +1,192 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "locationdialog.h"
+
+#include <QBoxLayout>
+#include <QComboBox>
+#include <QDialogButtonBox>
+#include <QDir>
+#include <QPushButton>
+#include <QGroupBox>
+#include <QHeaderView>
+#include <QLabel>
+#include <QLineEdit>
+#include <QTableWidget>
+#include <QTableWidgetItem>
+
+LocationDialog::LocationDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ formatComboBox = new QComboBox;
+ formatComboBox->addItem(tr("Native"));
+ formatComboBox->addItem(tr("INI"));
+
+ scopeComboBox = new QComboBox;
+ scopeComboBox->addItem(tr("User"));
+ scopeComboBox->addItem(tr("System"));
+
+ organizationComboBox = new QComboBox;
+ organizationComboBox->addItem(tr("QtProject"));
+ organizationComboBox->setEditable(true);
+
+ applicationComboBox = new QComboBox;
+ applicationComboBox->addItem(tr("Any"));
+ applicationComboBox->addItem(tr("Qt Creator"));
+ applicationComboBox->addItem(tr("Assistant"));
+ applicationComboBox->addItem(tr("Designer"));
+ applicationComboBox->addItem(tr("Linguist"));
+ applicationComboBox->setEditable(true);
+ applicationComboBox->setCurrentIndex(1);
+
+ formatLabel = new QLabel(tr("&Format:"));
+ formatLabel->setBuddy(formatComboBox);
+
+ scopeLabel = new QLabel(tr("&Scope:"));
+ scopeLabel->setBuddy(scopeComboBox);
+
+ organizationLabel = new QLabel(tr("&Organization:"));
+ organizationLabel->setBuddy(organizationComboBox);
+
+ applicationLabel = new QLabel(tr("&Application:"));
+ applicationLabel->setBuddy(applicationComboBox);
+
+ locationsGroupBox = new QGroupBox(tr("Setting Locations"));
+
+ const QStringList labels{tr("Location"), tr("Access")};
+
+ locationsTable = new QTableWidget;
+ locationsTable->setSelectionMode(QAbstractItemView::SingleSelection);
+ locationsTable->setSelectionBehavior(QAbstractItemView::SelectRows);
+ locationsTable->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ locationsTable->setColumnCount(2);
+ locationsTable->setHorizontalHeaderLabels(labels);
+ locationsTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
+ locationsTable->horizontalHeader()->resizeSection(1, 180);
+ connect(locationsTable, &QTableWidget::itemActivated, this, &LocationDialog::itemActivated);
+
+ buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
+
+ connect(formatComboBox, &QComboBox::activated,
+ this, &LocationDialog::updateLocationsTable);
+ connect(scopeComboBox, &QComboBox::activated,
+ this, &LocationDialog::updateLocationsTable);
+ connect(organizationComboBox->lineEdit(),
+ &QLineEdit::editingFinished,
+ this, &LocationDialog::updateLocationsTable);
+ connect(applicationComboBox->lineEdit(),
+ &QLineEdit::editingFinished,
+ this, &LocationDialog::updateLocationsTable);
+ connect(applicationComboBox, &QComboBox::activated,
+ this, &LocationDialog::updateLocationsTable);
+ connect(buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept);
+ connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
+
+ QVBoxLayout *locationsLayout = new QVBoxLayout(locationsGroupBox);
+ locationsLayout->addWidget(locationsTable);
+
+ QGridLayout *mainLayout = new QGridLayout(this);
+ mainLayout->addWidget(formatLabel, 0, 0);
+ mainLayout->addWidget(formatComboBox, 0, 1);
+ mainLayout->addWidget(scopeLabel, 1, 0);
+ mainLayout->addWidget(scopeComboBox, 1, 1);
+ mainLayout->addWidget(organizationLabel, 2, 0);
+ mainLayout->addWidget(organizationComboBox, 2, 1);
+ mainLayout->addWidget(applicationLabel, 3, 0);
+ mainLayout->addWidget(applicationComboBox, 3, 1);
+ mainLayout->addWidget(locationsGroupBox, 4, 0, 1, 2);
+ mainLayout->addWidget(buttonBox, 5, 0, 1, 2);
+
+ updateLocationsTable();
+
+ setWindowTitle(tr("Open Application Settings"));
+ resize(650, 400);
+}
+
+QSettings::Format LocationDialog::format() const
+{
+ if (formatComboBox->currentIndex() == 0)
+ return QSettings::NativeFormat;
+ else
+ return QSettings::IniFormat;
+}
+
+QSettings::Scope LocationDialog::scope() const
+{
+ if (scopeComboBox->currentIndex() == 0)
+ return QSettings::UserScope;
+ else
+ return QSettings::SystemScope;
+}
+
+QString LocationDialog::organization() const
+{
+ return organizationComboBox->currentText();
+}
+
+QString LocationDialog::application() const
+{
+ if (applicationComboBox->currentText() == tr("Any"))
+ return QString();
+ else
+ return applicationComboBox->currentText();
+}
+
+void LocationDialog::itemActivated(QTableWidgetItem *)
+{
+ buttonBox->button(QDialogButtonBox::Ok)->animateClick();
+}
+
+void LocationDialog::updateLocationsTable()
+{
+ locationsTable->setUpdatesEnabled(false);
+ locationsTable->setRowCount(0);
+
+ for (int i = 0; i < 2; ++i) {
+ if (i == 0 && scope() == QSettings::SystemScope)
+ continue;
+
+ QSettings::Scope actualScope = (i == 0) ? QSettings::UserScope
+ : QSettings::SystemScope;
+ for (int j = 0; j < 2; ++j) {
+ if (j == 0 && application().isEmpty())
+ continue;
+
+ QString actualApplication;
+ if (j == 0)
+ actualApplication = application();
+ QSettings settings(format(), actualScope, organization(),
+ actualApplication);
+
+ int row = locationsTable->rowCount();
+ locationsTable->setRowCount(row + 1);
+
+ QTableWidgetItem *item0 = new QTableWidgetItem(QDir::toNativeSeparators(settings.fileName()));
+
+ QTableWidgetItem *item1 = new QTableWidgetItem;
+ bool disable = (settings.childKeys().isEmpty()
+ && settings.childGroups().isEmpty());
+
+ if (row == 0) {
+ if (settings.isWritable()) {
+ item1->setText(tr("Read-write"));
+ disable = false;
+ } else {
+ item1->setText(tr("Read-only"));
+ }
+ buttonBox->button(QDialogButtonBox::Ok)->setDisabled(disable);
+ } else {
+ item1->setText(tr("Read-only fallback"));
+ }
+
+ if (disable) {
+ item0->setFlags(item0->flags() & ~Qt::ItemIsEnabled);
+ item1->setFlags(item1->flags() & ~Qt::ItemIsEnabled);
+ }
+
+ locationsTable->setItem(row, 0, item0);
+ locationsTable->setItem(row, 1, item1);
+ }
+ }
+ locationsTable->setUpdatesEnabled(true);
+}
diff --git a/tests/manual/examples/widgets/tools/settingseditor/locationdialog.h b/tests/manual/examples/widgets/tools/settingseditor/locationdialog.h
new file mode 100644
index 0000000000..4bcef76ce7
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/locationdialog.h
@@ -0,0 +1,49 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef LOCATIONDIALOG_H
+#define LOCATIONDIALOG_H
+
+#include <QDialog>
+#include <QSettings>
+
+QT_BEGIN_NAMESPACE
+class QComboBox;
+class QDialogButtonBox;
+class QGroupBox;
+class QLabel;
+class QTableWidget;
+class QTableWidgetItem;
+QT_END_NAMESPACE
+
+class LocationDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ LocationDialog(QWidget *parent = nullptr);
+
+ QSettings::Format format() const;
+ QSettings::Scope scope() const;
+ QString organization() const;
+ QString application() const;
+
+private slots:
+ void updateLocationsTable();
+ void itemActivated(QTableWidgetItem *);
+
+private:
+ QLabel *formatLabel;
+ QLabel *scopeLabel;
+ QLabel *organizationLabel;
+ QLabel *applicationLabel;
+ QComboBox *formatComboBox;
+ QComboBox *scopeComboBox;
+ QComboBox *organizationComboBox;
+ QComboBox *applicationComboBox;
+ QGroupBox *locationsGroupBox;
+ QTableWidget *locationsTable;
+ QDialogButtonBox *buttonBox;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tools/settingseditor/main.cpp b/tests/manual/examples/widgets/tools/settingseditor/main.cpp
new file mode 100644
index 0000000000..f49701be5c
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/main.cpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ QCoreApplication::setApplicationName("Settings Editor");
+ QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+
+ MainWindow mainWin;
+ mainWin.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/tools/settingseditor/mainwindow.cpp b/tests/manual/examples/widgets/tools/settingseditor/mainwindow.cpp
new file mode 100644
index 0000000000..be9f19e8cc
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/mainwindow.cpp
@@ -0,0 +1,175 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "locationdialog.h"
+#include "mainwindow.h"
+#include "settingstree.h"
+
+#include <QAction>
+#include <QApplication>
+#include <QFileDialog>
+#include <QInputDialog>
+#include <QLineEdit>
+#include <QMenuBar>
+#include <QMessageBox>
+#include <QScreen>
+#include <QStandardPaths>
+#include <QStatusBar>
+
+MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
+ , settingsTree(new SettingsTree)
+{
+ setCentralWidget(settingsTree);
+
+ createActions();
+
+ autoRefreshAct->setChecked(true);
+ fallbacksAct->setChecked(true);
+
+ setWindowTitle(QCoreApplication::applicationName());
+ const QRect availableGeometry = screen()->availableGeometry();
+ adjustSize();
+ move((availableGeometry.width() - width()) / 2, (availableGeometry.height() - height()) / 2);
+}
+
+void MainWindow::openSettings()
+{
+ if (!locationDialog)
+ locationDialog = new LocationDialog(this);
+
+ if (locationDialog->exec() != QDialog::Accepted)
+ return;
+
+ SettingsPtr settings(new QSettings(locationDialog->format(),
+ locationDialog->scope(),
+ locationDialog->organization(),
+ locationDialog->application()));
+
+ setSettingsObject(settings);
+ fallbacksAct->setEnabled(true);
+}
+
+void MainWindow::openIniFile()
+{
+ const QString directory = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
+ const QString fileName =
+ QFileDialog::getOpenFileName(this, tr("Open INI File"),
+ directory, tr("INI Files (*.ini *.conf)"));
+ if (fileName.isEmpty())
+ return;
+
+ SettingsPtr settings(new QSettings(fileName, QSettings::IniFormat));
+
+ setSettingsObject(settings);
+ fallbacksAct->setEnabled(false);
+}
+
+void MainWindow::openPropertyList()
+{
+ const QString directory = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation);
+ const QString fileName =
+ QFileDialog::getOpenFileName(this, tr("Open Property List"),
+ directory, tr("Property List Files (*.plist)"));
+ if (fileName.isEmpty())
+ return;
+
+ SettingsPtr settings(new QSettings(fileName, QSettings::NativeFormat));
+ setSettingsObject(settings);
+ fallbacksAct->setEnabled(false);
+}
+
+void MainWindow::openRegistryPath()
+{
+ const QString path =
+ QInputDialog::getText(this, tr("Open Registry Path"),
+ tr("Enter the path in the Windows registry:"),
+ QLineEdit::Normal, "HKEY_CURRENT_USER\\");
+ if (path.isEmpty())
+ return;
+
+ SettingsPtr settings(new QSettings(path, QSettings::NativeFormat));
+
+ setSettingsObject(settings);
+ fallbacksAct->setEnabled(false);
+}
+
+void MainWindow::about()
+{
+ QMessageBox::about(this, tr("About Settings Editor"),
+ tr("The <b>Settings Editor</b> example shows how to access "
+ "application settings using Qt."));
+}
+
+void MainWindow::createActions()
+{
+ QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
+
+ QAction *openSettingsAct = fileMenu->addAction(tr("&Open Application Settings..."), this, &MainWindow::openSettings);
+ openSettingsAct->setShortcuts(QKeySequence::Open);
+
+ QAction *openIniFileAct = fileMenu->addAction(tr("Open I&NI File..."), this, &MainWindow::openIniFile);
+ openIniFileAct->setShortcut(tr("Ctrl+N"));
+
+#ifdef Q_OS_MACOS
+ QAction *openPropertyListAct = fileMenu->addAction(tr("Open Apple &Property List..."), this, &MainWindow::openPropertyList);
+ openPropertyListAct->setShortcut(tr("Ctrl+P"));
+#endif // Q_OS_MACOS
+
+#ifdef Q_OS_WIN
+ QAction *openRegistryPathAct = fileMenu->addAction(tr("Open Windows &Registry Path..."), this, &MainWindow::openRegistryPath);
+ openRegistryPathAct->setShortcut(tr("Ctrl+G"));
+#endif // Q_OS_WIN
+
+ fileMenu->addSeparator();
+
+ refreshAct = fileMenu->addAction(tr("&Refresh"), settingsTree, &SettingsTree::refresh);
+ refreshAct->setShortcut(tr("Ctrl+R"));
+ refreshAct->setEnabled(false);
+
+ fileMenu->addSeparator();
+
+ QAction *exitAct = fileMenu->addAction(tr("E&xit"), this, &QWidget::close);
+ exitAct->setShortcuts(QKeySequence::Quit);
+
+ QMenu *optionsMenu = menuBar()->addMenu(tr("&Options"));
+
+ autoRefreshAct = optionsMenu->addAction(tr("&Auto-Refresh"));
+ autoRefreshAct->setShortcut(tr("Ctrl+A"));
+ autoRefreshAct->setCheckable(true);
+ autoRefreshAct->setEnabled(false);
+ connect(autoRefreshAct, &QAction::triggered,
+ settingsTree, &SettingsTree::setAutoRefresh);
+ connect(autoRefreshAct, &QAction::triggered,
+ refreshAct, &QAction::setDisabled);
+
+ fallbacksAct = optionsMenu->addAction(tr("&Fallbacks"));
+ fallbacksAct->setShortcut(tr("Ctrl+F"));
+ fallbacksAct->setCheckable(true);
+ fallbacksAct->setEnabled(false);
+ connect(fallbacksAct, &QAction::triggered,
+ settingsTree, &SettingsTree::setFallbacksEnabled);
+
+ QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
+ helpMenu->addAction(tr("&About"), this, &MainWindow::about);
+ helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt);
+}
+
+void MainWindow::setSettingsObject(const SettingsPtr &settings)
+{
+ settings->setFallbacksEnabled(fallbacksAct->isChecked());
+ settingsTree->setSettingsObject(settings);
+
+ refreshAct->setEnabled(true);
+ autoRefreshAct->setEnabled(true);
+
+ QString niceName = QDir::cleanPath(settings->fileName());
+ int pos = niceName.lastIndexOf(QLatin1Char('/'));
+ if (pos != -1)
+ niceName.remove(0, pos + 1);
+
+ if (!settings->isWritable())
+ niceName = tr("%1 (read only)").arg(niceName);
+
+ setWindowTitle(tr("%1 - %2").arg(niceName, QCoreApplication::applicationName()));
+ statusBar()->showMessage(tr("Opened \"%1\"").arg(QDir::toNativeSeparators(settings->fileName())));
+}
diff --git a/tests/manual/examples/widgets/tools/settingseditor/mainwindow.h b/tests/manual/examples/widgets/tools/settingseditor/mainwindow.h
new file mode 100644
index 0000000000..84bdaef966
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/mainwindow.h
@@ -0,0 +1,44 @@
+// 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>
+#include <QSharedPointer>
+
+QT_BEGIN_NAMESPACE
+class QAction;
+class QSettings;
+QT_END_NAMESPACE
+class LocationDialog;
+class SettingsTree;
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ typedef QSharedPointer<QSettings> SettingsPtr;
+
+ MainWindow(QWidget *parent = nullptr);
+
+private slots:
+ void openSettings();
+ void openIniFile();
+ void openPropertyList();
+ void openRegistryPath();
+ void about();
+
+private:
+ void createActions();
+ void setSettingsObject(const SettingsPtr &settings);
+
+ SettingsTree *settingsTree = nullptr;
+ LocationDialog *locationDialog = nullptr;
+ QAction *refreshAct = nullptr;
+ QAction *autoRefreshAct = nullptr;
+ QAction *fallbacksAct = nullptr;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tools/settingseditor/settingseditor.pro b/tests/manual/examples/widgets/tools/settingseditor/settingseditor.pro
new file mode 100644
index 0000000000..4880b7e582
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/settingseditor.pro
@@ -0,0 +1,18 @@
+QT += widgets
+requires(qtConfig(tablewidget))
+
+HEADERS = locationdialog.h \
+ mainwindow.h \
+ settingstree.h \
+ variantdelegate.h
+SOURCES = locationdialog.cpp \
+ main.cpp \
+ mainwindow.cpp \
+ settingstree.cpp \
+ variantdelegate.cpp
+
+EXAMPLE_FILES = inifiles
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tools/settingseditor
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/tools/settingseditor/settingstree.cpp b/tests/manual/examples/widgets/tools/settingseditor/settingstree.cpp
new file mode 100644
index 0000000000..5de2a8cff1
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/settingstree.cpp
@@ -0,0 +1,231 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "settingstree.h"
+#include "variantdelegate.h"
+
+#include <QApplication>
+#include <QHeaderView>
+#include <QScreen>
+#include <QSettings>
+
+SettingsTree::SettingsTree(QWidget *parent)
+ : QTreeWidget(parent),
+ m_typeChecker(new TypeChecker)
+{
+ setItemDelegate(new VariantDelegate(m_typeChecker, this));
+
+ setHeaderLabels({tr("Setting"), tr("Type"), tr("Value")});
+ header()->setSectionResizeMode(0, QHeaderView::ResizeToContents);
+ header()->setSectionResizeMode(1, QHeaderView::ResizeToContents);
+ header()->setSectionResizeMode(2, QHeaderView::Stretch);
+
+ refreshTimer.setInterval(2000);
+
+ groupIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirClosedIcon),
+ QIcon::Normal, QIcon::Off);
+ groupIcon.addPixmap(style()->standardPixmap(QStyle::SP_DirOpenIcon),
+ QIcon::Normal, QIcon::On);
+ keyIcon.addPixmap(style()->standardPixmap(QStyle::SP_FileIcon));
+
+ connect(&refreshTimer, &QTimer::timeout, this, &SettingsTree::maybeRefresh);
+}
+
+SettingsTree::~SettingsTree() = default;
+
+void SettingsTree::setSettingsObject(const SettingsPtr &newSettings)
+{
+ settings = newSettings;
+ clear();
+
+ if (settings.isNull()) {
+ refreshTimer.stop();
+ } else {
+ refresh();
+ if (autoRefresh)
+ refreshTimer.start();
+ }
+}
+
+QSize SettingsTree::sizeHint() const
+{
+ const QRect availableGeometry = screen()->availableGeometry();
+ return QSize(availableGeometry.width() * 2 / 3, availableGeometry.height() * 2 / 3);
+}
+
+void SettingsTree::setAutoRefresh(bool autoRefresh)
+{
+ this->autoRefresh = autoRefresh;
+ if (!settings.isNull()) {
+ if (autoRefresh) {
+ maybeRefresh();
+ refreshTimer.start();
+ } else {
+ refreshTimer.stop();
+ }
+ }
+}
+
+void SettingsTree::setFallbacksEnabled(bool enabled)
+{
+ if (!settings.isNull()) {
+ settings->setFallbacksEnabled(enabled);
+ refresh();
+ }
+}
+
+void SettingsTree::maybeRefresh()
+{
+ if (state() != EditingState)
+ refresh();
+}
+
+void SettingsTree::refresh()
+{
+ if (settings.isNull())
+ return;
+
+ disconnect(this, &QTreeWidget::itemChanged,
+ this, &SettingsTree::updateSetting);
+
+ settings->sync();
+ updateChildItems(nullptr);
+
+ connect(this, &QTreeWidget::itemChanged,
+ this, &SettingsTree::updateSetting);
+}
+
+bool SettingsTree::event(QEvent *event)
+{
+ if (event->type() == QEvent::WindowActivate) {
+ if (isActiveWindow() && autoRefresh)
+ maybeRefresh();
+ }
+ return QTreeWidget::event(event);
+}
+
+void SettingsTree::updateSetting(QTreeWidgetItem *item)
+{
+ QString key = item->text(0);
+ QTreeWidgetItem *ancestor = item->parent();
+ while (ancestor) {
+ key.prepend(ancestor->text(0) + QLatin1Char('/'));
+ ancestor = ancestor->parent();
+ }
+
+ settings->setValue(key, item->data(2, Qt::UserRole));
+ if (autoRefresh)
+ refresh();
+}
+
+void SettingsTree::updateChildItems(QTreeWidgetItem *parent)
+{
+ int dividerIndex = 0;
+
+ const QStringList childGroups = settings->childGroups();
+ for (const QString &group : childGroups) {
+ QTreeWidgetItem *child;
+ int childIndex = findChild(parent, group, dividerIndex);
+ if (childIndex != -1) {
+ child = childAt(parent, childIndex);
+ child->setText(1, QString());
+ child->setText(2, QString());
+ child->setData(2, Qt::UserRole, QVariant());
+ moveItemForward(parent, childIndex, dividerIndex);
+ } else {
+ child = createItem(group, parent, dividerIndex);
+ }
+ child->setIcon(0, groupIcon);
+ ++dividerIndex;
+
+ settings->beginGroup(group);
+ updateChildItems(child);
+ settings->endGroup();
+ }
+
+ const QStringList childKeys = settings->childKeys();
+ for (const QString &key : childKeys) {
+ QTreeWidgetItem *child;
+ int childIndex = findChild(parent, key, 0);
+
+ if (childIndex == -1 || childIndex >= dividerIndex) {
+ if (childIndex != -1) {
+ child = childAt(parent, childIndex);
+ for (int i = 0; i < child->childCount(); ++i)
+ delete childAt(child, i);
+ moveItemForward(parent, childIndex, dividerIndex);
+ } else {
+ child = createItem(key, parent, dividerIndex);
+ }
+ child->setIcon(0, keyIcon);
+ ++dividerIndex;
+ } else {
+ child = childAt(parent, childIndex);
+ }
+
+ QVariant value = settings->value(key);
+ if (value.userType() == QMetaType::UnknownType) {
+ child->setText(1, "Invalid");
+ } else {
+ if (value.typeId() == QMetaType::QString) {
+ const QString stringValue = value.toString();
+ if (m_typeChecker->boolExp.match(stringValue).hasMatch()) {
+ value.setValue(stringValue.compare("true", Qt::CaseInsensitive) == 0);
+ } else if (m_typeChecker->signedIntegerExp.match(stringValue).hasMatch())
+ value.setValue(stringValue.toInt());
+ }
+
+ child->setText(1, value.typeName());
+ }
+ child->setText(2, VariantDelegate::displayText(value));
+ child->setData(2, Qt::UserRole, value);
+ }
+
+ while (dividerIndex < childCount(parent))
+ delete childAt(parent, dividerIndex);
+}
+
+QTreeWidgetItem *SettingsTree::createItem(const QString &text,
+ QTreeWidgetItem *parent, int index)
+{
+ QTreeWidgetItem *after = nullptr;
+ if (index != 0)
+ after = childAt(parent, index - 1);
+
+ QTreeWidgetItem *item;
+ if (parent)
+ item = new QTreeWidgetItem(parent, after);
+ else
+ item = new QTreeWidgetItem(this, after);
+
+ item->setText(0, text);
+ item->setFlags(item->flags() | Qt::ItemIsEditable);
+ return item;
+}
+
+QTreeWidgetItem *SettingsTree::childAt(QTreeWidgetItem *parent, int index) const
+{
+ return (parent ? parent->child(index) : topLevelItem(index));
+}
+
+int SettingsTree::childCount(QTreeWidgetItem *parent) const
+{
+ return (parent ? parent->childCount() : topLevelItemCount());
+}
+
+int SettingsTree::findChild(QTreeWidgetItem *parent, const QString &text,
+ int startIndex) const
+{
+ for (int i = startIndex; i < childCount(parent); ++i) {
+ if (childAt(parent, i)->text(0) == text)
+ return i;
+ }
+ return -1;
+}
+
+void SettingsTree::moveItemForward(QTreeWidgetItem *parent, int oldIndex,
+ int newIndex)
+{
+ for (int i = 0; i < oldIndex - newIndex; ++i)
+ delete childAt(parent, newIndex);
+}
diff --git a/tests/manual/examples/widgets/tools/settingseditor/settingstree.h b/tests/manual/examples/widgets/tools/settingseditor/settingstree.h
new file mode 100644
index 0000000000..8dfa52113f
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/settingstree.h
@@ -0,0 +1,61 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SETTINGSTREE_H
+#define SETTINGSTREE_H
+
+#include <QIcon>
+#include <QTimer>
+#include <QTreeWidget>
+#include <QSharedPointer>
+
+QT_BEGIN_NAMESPACE
+class QSettings;
+QT_END_NAMESPACE
+
+struct TypeChecker;
+
+class SettingsTree : public QTreeWidget
+{
+ Q_OBJECT
+
+public:
+ using SettingsPtr = QSharedPointer<QSettings>;
+ using TypeCheckerPtr = QSharedPointer<TypeChecker>;
+
+ SettingsTree(QWidget *parent = nullptr);
+ ~SettingsTree();
+
+ void setSettingsObject(const SettingsPtr &settings);
+ QSize sizeHint() const override;
+
+public slots:
+ void setAutoRefresh(bool autoRefresh);
+ void setFallbacksEnabled(bool enabled);
+ void maybeRefresh();
+ void refresh();
+
+protected:
+ bool event(QEvent *event) override;
+
+private slots:
+ void updateSetting(QTreeWidgetItem *item);
+
+private:
+ void updateChildItems(QTreeWidgetItem *parent);
+ QTreeWidgetItem *createItem(const QString &text, QTreeWidgetItem *parent,
+ int index);
+ QTreeWidgetItem *childAt(QTreeWidgetItem *parent, int index) const;
+ int childCount(QTreeWidgetItem *parent) const;
+ int findChild(QTreeWidgetItem *parent, const QString &text, int startIndex) const;
+ void moveItemForward(QTreeWidgetItem *parent, int oldIndex, int newIndex);
+
+ SettingsPtr settings;
+ TypeCheckerPtr m_typeChecker;
+ QTimer refreshTimer;
+ QIcon groupIcon;
+ QIcon keyIcon;
+ bool autoRefresh = false;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tools/settingseditor/variantdelegate.cpp b/tests/manual/examples/widgets/tools/settingseditor/variantdelegate.cpp
new file mode 100644
index 0000000000..ed51a1645b
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/variantdelegate.cpp
@@ -0,0 +1,377 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "variantdelegate.h"
+
+#include <QCheckBox>
+#include <QDateTime>
+#include <QLineEdit>
+#include <QSpinBox>
+#include <QRegularExpressionValidator>
+#include <QTextStream>
+
+#include <algorithm>
+
+static bool isPrintableChar(char c)
+{
+ return uchar(c) >= 32 && uchar(c) < 128;
+}
+
+static bool isPrintable(const QByteArray &ba)
+{
+ return std::all_of(ba.cbegin(), ba.cend(), isPrintableChar);
+}
+
+static QString byteArrayToString(const QByteArray &ba)
+{
+ if (isPrintable(ba))
+ return QString::fromLatin1(ba);
+ QString result;
+ for (char c : ba) {
+ if (isPrintableChar(c)) {
+ if (c == '\\')
+ result += QLatin1Char(c);
+ result += QLatin1Char(c);
+ } else {
+ const uint uc = uchar(c);
+ result += "\\x";
+ if (uc < 16)
+ result += '0';
+ result += QString::number(uc, 16);
+ }
+ }
+ return result;
+}
+
+TypeChecker::TypeChecker()
+{
+ boolExp.setPattern("^(true)|(false)$");
+ boolExp.setPatternOptions(QRegularExpression::CaseInsensitiveOption);
+ Q_ASSERT(boolExp.isValid());
+
+ byteArrayExp.setPattern(R"RX(^[\x00-\xff]*$)RX");
+ charExp.setPattern("^.$");
+ Q_ASSERT(charExp.isValid());
+ colorExp.setPattern(R"RX(^\(([0-9]*),([0-9]*),([0-9]*),([0-9]*)\)$)RX");
+ Q_ASSERT(colorExp.isValid());
+ doubleExp.setPattern("");
+ pointExp.setPattern(R"RX(^\((-?[0-9]*),(-?[0-9]*)\)$)RX");
+ Q_ASSERT(pointExp.isValid());
+ rectExp.setPattern(R"RX(^\((-?[0-9]*),(-?[0-9]*),(-?[0-9]*),(-?[0-9]*)\)$)RX");
+ Q_ASSERT(rectExp.isValid());
+ signedIntegerExp.setPattern("^-?[0-9]*$");
+ Q_ASSERT(signedIntegerExp.isValid());
+ sizeExp = pointExp;
+ unsignedIntegerExp.setPattern("^[0-9]+$");
+ Q_ASSERT(unsignedIntegerExp.isValid());
+
+ const QString datePattern = "([0-9]{,4})-([0-9]{,2})-([0-9]{,2})";
+ dateExp.setPattern('^' + datePattern + '$');
+ Q_ASSERT(dateExp.isValid());
+ const QString timePattern = "([0-9]{,2}):([0-9]{,2}):([0-9]{,2})";
+ timeExp.setPattern('^' + timePattern + '$');
+ Q_ASSERT(timeExp.isValid());
+ dateTimeExp.setPattern('^' + datePattern + 'T' + timePattern + '$');
+ Q_ASSERT(dateTimeExp.isValid());
+}
+
+VariantDelegate::VariantDelegate(const QSharedPointer<TypeChecker> &typeChecker,
+ QObject *parent)
+ : QStyledItemDelegate(parent),
+ m_typeChecker(typeChecker)
+{
+}
+
+void VariantDelegate::paint(QPainter *painter,
+ const QStyleOptionViewItem &option,
+ const QModelIndex &index) const
+{
+ if (index.column() == 2) {
+ QVariant value = index.model()->data(index, Qt::UserRole);
+ if (!isSupportedType(value.userType())) {
+ QStyleOptionViewItem myOption = option;
+ myOption.state &= ~QStyle::State_Enabled;
+ QStyledItemDelegate::paint(painter, myOption, index);
+ return;
+ }
+ }
+
+ QStyledItemDelegate::paint(painter, option, index);
+}
+
+QWidget *VariantDelegate::createEditor(QWidget *parent,
+ const QStyleOptionViewItem & /* option */,
+ const QModelIndex &index) const
+{
+ if (index.column() != 2)
+ return nullptr;
+
+ QVariant originalValue = index.model()->data(index, Qt::UserRole);
+ if (!isSupportedType(originalValue.userType()))
+ return nullptr;
+
+ switch (originalValue.userType()) {
+ case QMetaType::Bool:
+ return new QCheckBox(parent);
+ break;
+ case QMetaType::Int:
+ case QMetaType::LongLong: {
+ auto spinBox = new QSpinBox(parent);
+ spinBox->setRange(-32767, 32767);
+ return spinBox;
+ }
+ case QMetaType::UInt:
+ case QMetaType::ULongLong: {
+ auto spinBox = new QSpinBox(parent);
+ spinBox->setRange(0, 63335);
+ return spinBox;
+ }
+ default:
+ break;
+ }
+
+ QLineEdit *lineEdit = new QLineEdit(parent);
+ lineEdit->setFrame(false);
+
+ QRegularExpression regExp;
+
+ switch (originalValue.userType()) {
+ case QMetaType::Bool:
+ regExp = m_typeChecker->boolExp;
+ break;
+ case QMetaType::QByteArray:
+ regExp = m_typeChecker->byteArrayExp;
+ break;
+ case QMetaType::QChar:
+ regExp = m_typeChecker->charExp;
+ break;
+ case QMetaType::QColor:
+ regExp = m_typeChecker->colorExp;
+ break;
+ case QMetaType::QDate:
+ regExp = m_typeChecker->dateExp;
+ break;
+ case QMetaType::QDateTime:
+ regExp = m_typeChecker->dateTimeExp;
+ break;
+ case QMetaType::Double:
+ regExp = m_typeChecker->doubleExp;
+ break;
+ case QMetaType::Int:
+ case QMetaType::LongLong:
+ regExp = m_typeChecker->signedIntegerExp;
+ break;
+ case QMetaType::QPoint:
+ regExp = m_typeChecker->pointExp;
+ break;
+ case QMetaType::QRect:
+ regExp = m_typeChecker->rectExp;
+ break;
+ case QMetaType::QSize:
+ regExp = m_typeChecker->sizeExp;
+ break;
+ case QMetaType::QTime:
+ regExp = m_typeChecker->timeExp;
+ break;
+ case QMetaType::UInt:
+ case QMetaType::ULongLong:
+ regExp = m_typeChecker->unsignedIntegerExp;
+ break;
+ default:
+ break;
+ }
+
+ if (regExp.isValid()) {
+ QValidator *validator = new QRegularExpressionValidator(regExp, lineEdit);
+ lineEdit->setValidator(validator);
+ }
+
+ return lineEdit;
+}
+
+void VariantDelegate::setEditorData(QWidget *editor,
+ const QModelIndex &index) const
+{
+ QVariant value = index.model()->data(index, Qt::UserRole);
+ if (auto spinBox = qobject_cast<QSpinBox *>(editor)) {
+ const auto userType = value.userType();
+ if (userType == QMetaType::UInt || userType == QMetaType::ULongLong)
+ spinBox->setValue(value.toUInt());
+ else
+ spinBox->setValue(value.toInt());
+ } else if (auto checkBox = qobject_cast<QCheckBox *>(editor)) {
+ checkBox->setChecked(value.toBool());
+ } else if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(editor)) {
+ if (value.userType() == QMetaType::QByteArray
+ && !isPrintable(value.toByteArray())) {
+ lineEdit->setReadOnly(true);
+ }
+ lineEdit->setText(displayText(value));
+ }
+}
+
+void VariantDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
+ const QModelIndex &index) const
+{
+ const QVariant originalValue = index.model()->data(index, Qt::UserRole);
+ QVariant value;
+
+ if (auto spinBox = qobject_cast<QSpinBox *>(editor)) {
+ value.setValue(spinBox->value());
+ } else if (auto checkBox = qobject_cast<QCheckBox *>(editor)) {
+ value.setValue(checkBox->isChecked());
+ } else if (QLineEdit *lineEdit = qobject_cast<QLineEdit *>(editor)) {
+ if (!lineEdit->isModified())
+ return;
+
+ QString text = lineEdit->text();
+ const QValidator *validator = lineEdit->validator();
+ if (validator) {
+ int pos;
+ if (validator->validate(text, pos) != QValidator::Acceptable)
+ return;
+ }
+
+ QRegularExpressionMatch match;
+
+ switch (originalValue.userType()) {
+ case QMetaType::QChar:
+ value = text.at(0);
+ break;
+ case QMetaType::QColor:
+ match = m_typeChecker->colorExp.match(text);
+ value = QColor(qMin(match.captured(1).toInt(), 255),
+ qMin(match.captured(2).toInt(), 255),
+ qMin(match.captured(3).toInt(), 255),
+ qMin(match.captured(4).toInt(), 255));
+ break;
+ case QMetaType::QDate:
+ {
+ QDate date = QDate::fromString(text, Qt::ISODate);
+ if (!date.isValid())
+ return;
+ value = date;
+ }
+ break;
+ case QMetaType::QDateTime:
+ {
+ QDateTime dateTime = QDateTime::fromString(text, Qt::ISODate);
+ if (!dateTime.isValid())
+ return;
+ value = dateTime;
+ }
+ break;
+ case QMetaType::QPoint:
+ match = m_typeChecker->pointExp.match(text);
+ value = QPoint(match.captured(1).toInt(), match.captured(2).toInt());
+ break;
+ case QMetaType::QRect:
+ match = m_typeChecker->rectExp.match(text);
+ value = QRect(match.captured(1).toInt(), match.captured(2).toInt(),
+ match.captured(3).toInt(), match.captured(4).toInt());
+ break;
+ case QMetaType::QSize:
+ match = m_typeChecker->sizeExp.match(text);
+ value = QSize(match.captured(1).toInt(), match.captured(2).toInt());
+ break;
+ case QMetaType::QStringList:
+ value = text.split(',');
+ break;
+ case QMetaType::QTime:
+ {
+ QTime time = QTime::fromString(text, Qt::ISODate);
+ if (!time.isValid())
+ return;
+ value = time;
+ }
+ break;
+ default:
+ value = text;
+ value.convert(originalValue.metaType());
+ }
+ }
+
+ model->setData(index, displayText(value), Qt::DisplayRole);
+ model->setData(index, value, Qt::UserRole);
+}
+
+bool VariantDelegate::isSupportedType(int type)
+{
+ switch (type) {
+ case QMetaType::Bool:
+ case QMetaType::QByteArray:
+ case QMetaType::QChar:
+ case QMetaType::QColor:
+ case QMetaType::QDate:
+ case QMetaType::QDateTime:
+ case QMetaType::Double:
+ case QMetaType::Int:
+ case QMetaType::LongLong:
+ case QMetaType::QPoint:
+ case QMetaType::QRect:
+ case QMetaType::QSize:
+ case QMetaType::QString:
+ case QMetaType::QStringList:
+ case QMetaType::QTime:
+ case QMetaType::UInt:
+ case QMetaType::ULongLong:
+ return true;
+ default:
+ return false;
+ }
+}
+
+QString VariantDelegate::displayText(const QVariant &value)
+{
+ switch (value.userType()) {
+ case QMetaType::Bool:
+ return value.toBool() ? "✓" : "â˜";
+ case QMetaType::QByteArray:
+ return byteArrayToString(value.toByteArray());
+ case QMetaType::QChar:
+ case QMetaType::Double:
+ case QMetaType::Int:
+ case QMetaType::LongLong:
+ case QMetaType::QString:
+ case QMetaType::UInt:
+ case QMetaType::ULongLong:
+ return value.toString();
+ case QMetaType::QColor:
+ {
+ QColor color = qvariant_cast<QColor>(value);
+ return QString("(%1,%2,%3,%4)")
+ .arg(color.red()).arg(color.green())
+ .arg(color.blue()).arg(color.alpha());
+ }
+ case QMetaType::QDate:
+ return value.toDate().toString(Qt::ISODate);
+ case QMetaType::QDateTime:
+ return value.toDateTime().toString(Qt::ISODate);
+ case QMetaType::UnknownType:
+ return "<Invalid>";
+ case QMetaType::QPoint:
+ {
+ QPoint point = value.toPoint();
+ return QString("(%1,%2)").arg(point.x()).arg(point.y());
+ }
+ case QMetaType::QRect:
+ {
+ QRect rect = value.toRect();
+ return QString("(%1,%2,%3,%4)")
+ .arg(rect.x()).arg(rect.y())
+ .arg(rect.width()).arg(rect.height());
+ }
+ case QMetaType::QSize:
+ {
+ QSize size = value.toSize();
+ return QString("(%1,%2)").arg(size.width()).arg(size.height());
+ }
+ case QMetaType::QStringList:
+ return value.toStringList().join(',');
+ case QMetaType::QTime:
+ return value.toTime().toString(Qt::ISODate);
+ default:
+ break;
+ }
+ return QString("<%1>").arg(value.typeName());
+}
diff --git a/tests/manual/examples/widgets/tools/settingseditor/variantdelegate.h b/tests/manual/examples/widgets/tools/settingseditor/variantdelegate.h
new file mode 100644
index 0000000000..dc06d51bbc
--- /dev/null
+++ b/tests/manual/examples/widgets/tools/settingseditor/variantdelegate.h
@@ -0,0 +1,53 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef VARIANTDELEGATE_H
+#define VARIANTDELEGATE_H
+
+#include <QStyledItemDelegate>
+#include <QRegularExpression>
+#include <QSharedPointer>
+
+struct TypeChecker
+{
+ TypeChecker();
+
+ QRegularExpression boolExp;
+ QRegularExpression byteArrayExp;
+ QRegularExpression charExp;
+ QRegularExpression colorExp;
+ QRegularExpression dateExp;
+ QRegularExpression dateTimeExp;
+ QRegularExpression doubleExp;
+ QRegularExpression pointExp;
+ QRegularExpression rectExp;
+ QRegularExpression signedIntegerExp;
+ QRegularExpression sizeExp;
+ QRegularExpression timeExp;
+ QRegularExpression unsignedIntegerExp;
+};
+
+class VariantDelegate : public QStyledItemDelegate
+{
+ Q_OBJECT
+
+public:
+ explicit VariantDelegate(const QSharedPointer<TypeChecker> &typeChecker,
+ QObject *parent = nullptr);
+
+ void paint(QPainter *painter, const QStyleOptionViewItem &option,
+ const QModelIndex &index) const override;
+ QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
+ const QModelIndex &index) const override;
+ void setEditorData(QWidget *editor, const QModelIndex &index) const override;
+ void setModelData(QWidget *editor, QAbstractItemModel *model,
+ const QModelIndex &index) const override;
+
+ static bool isSupportedType(int type);
+ static QString displayText(const QVariant &value);
+
+private:
+ QSharedPointer<TypeChecker> m_typeChecker;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/touch/dials/CMakeLists.txt b/tests/manual/examples/widgets/touch/dials/CMakeLists.txt
new file mode 100644
index 0000000000..fd4b7859a9
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/dials/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(dials LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/touch/dials")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(dials
+ dials.ui
+ main.cpp
+)
+
+set_target_properties(dials PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(dials PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS dials
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/touch/dials/dials.pro b/tests/manual/examples/widgets/touch/dials/dials.pro
new file mode 100644
index 0000000000..0e823551cc
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/dials/dials.pro
@@ -0,0 +1,8 @@
+QT += widgets
+
+SOURCES += main.cpp
+FORMS += dials.ui
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/touch/dials
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/touch/dials/dials.ui b/tests/manual/examples/widgets/touch/dials/dials.ui
new file mode 100644
index 0000000000..8ca7ae9475
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/dials/dials.ui
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Dials</class>
+ <widget class="QWidget" name="Dials">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QDial" name="dial_1">
+ <property name="notchesVisible">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QDial" name="dial_2">
+ <property name="notchesVisible">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QDial" name="dial_3">
+ <property name="notchesVisible">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="3">
+ <widget class="QDial" name="dial_4">
+ <property name="notchesVisible">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QDial" name="dial_5">
+ <property name="notchesVisible">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QDial" name="dial_6">
+ <property name="notchesVisible">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QDial" name="dial_7">
+ <property name="notchesVisible">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="3">
+ <widget class="QDial" name="dial_8">
+ <property name="notchesVisible">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/examples/widgets/touch/dials/doc/images/touch-dials-example.png b/tests/manual/examples/widgets/touch/dials/doc/images/touch-dials-example.png
new file mode 100644
index 0000000000..60e1776fc3
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/dials/doc/images/touch-dials-example.png
Binary files differ
diff --git a/tests/manual/examples/widgets/touch/dials/doc/src/touch-dials.qdoc b/tests/manual/examples/widgets/touch/dials/doc/src/touch-dials.qdoc
new file mode 100644
index 0000000000..448430ed79
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/dials/doc/src/touch-dials.qdoc
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example touch/dials
+ \title Touch Dials Example
+ \ingroup touchinputexamples
+ \brief Shows how to apply touch to a set of standard Qt widgets.
+
+ The Touch Dials example shows how to apply touch to a set of
+ standard Qt widgets.
+
+ \image touch-dials-example.png
+*/
diff --git a/tests/manual/examples/widgets/touch/dials/main.cpp b/tests/manual/examples/widgets/touch/dials/main.cpp
new file mode 100644
index 0000000000..63fdb7db3b
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/dials/main.cpp
@@ -0,0 +1,21 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QWidget>
+#include <QDial>
+
+#include "ui_dials.h"
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+ QWidget window;
+ Ui::Dials dialsUi;
+ dialsUi.setupUi(&window);
+ const QList<QAbstractSlider *> sliders = window.findChildren<QAbstractSlider *>();
+ for (QAbstractSlider *slider : sliders)
+ slider->setAttribute(Qt::WA_AcceptTouchEvents);
+ window.showMaximized();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/touch/fingerpaint/CMakeLists.txt b/tests/manual/examples/widgets/touch/fingerpaint/CMakeLists.txt
new file mode 100644
index 0000000000..c06a91b53b
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/fingerpaint/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(fingerpaint LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/touch/fingerpaint")
+
+find_package(Qt6
+ REQUIRED COMPONENTS Core Gui Widgets
+ OPTIONAL_COMPONENTS PrintSupport
+)
+
+qt_standard_project_setup()
+
+qt_add_executable(fingerpaint
+ main.cpp
+ mainwindow.cpp mainwindow.h
+ scribblearea.cpp scribblearea.h
+)
+
+set_target_properties(fingerpaint PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(fingerpaint PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+if (TARGET Qt6::PrintSupport)
+ target_link_libraries(fingerpaint PRIVATE Qt6::PrintSupport)
+endif()
+
+install(TARGETS fingerpaint
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/touch/fingerpaint/doc/src/fingerpaint.qdoc b/tests/manual/examples/widgets/touch/fingerpaint/doc/src/fingerpaint.qdoc
new file mode 100644
index 0000000000..0e3319004c
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/fingerpaint/doc/src/fingerpaint.qdoc
@@ -0,0 +1,18 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example touch/fingerpaint
+ \title Finger Paint Example
+ \ingroup touchinputexamples
+ \brief Shows the use of a touchscreen to make a simple painting application.
+
+ The Finger Paint example shows the use of a touchscreen with a custom widget
+ to create a simple painting application.
+
+ \image touch-fingerpaint-example.png
+
+ This example was specifically designed to work with a touchscreen, using
+ QTouchEvent instead of QMouseEvent to handle user input over the custom
+ widget. As a result, it is not possible to draw with the mouse cursor.
+*/
diff --git a/tests/manual/examples/widgets/touch/fingerpaint/fingerpaint.pro b/tests/manual/examples/widgets/touch/fingerpaint/fingerpaint.pro
new file mode 100644
index 0000000000..6370da6607
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/fingerpaint/fingerpaint.pro
@@ -0,0 +1,13 @@
+QT += widgets
+requires(qtConfig(filedialog))
+qtHaveModule(printsupport): QT += printsupport
+
+HEADERS = mainwindow.h \
+ scribblearea.h
+SOURCES = main.cpp \
+ mainwindow.cpp \
+ scribblearea.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/touch/fingerpaint
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/touch/fingerpaint/main.cpp b/tests/manual/examples/widgets/touch/fingerpaint/main.cpp
new file mode 100644
index 0000000000..d283c7b85c
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/fingerpaint/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow window;
+ window.showMaximized();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/touch/fingerpaint/mainwindow.cpp b/tests/manual/examples/widgets/touch/fingerpaint/mainwindow.cpp
new file mode 100644
index 0000000000..b9109fceeb
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/fingerpaint/mainwindow.cpp
@@ -0,0 +1,180 @@
+// 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("Finger Paint"));
+ 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]
+
+//! [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->setShortcut(tr("Ctrl+O"));
+ connect(openAct, &QAction::triggered, this, &MainWindow::open);
+
+ const QList<QByteArray> imageFormats = QImageWriter::supportedImageFormats();
+ for (const QByteArray &format : imageFormats) {
+ QString text = tr("%1...").arg(QString(format).toUpper());
+
+ QAction *action = new QAction(text, this);
+ action->setData(format);
+ connect(action, &QAction::triggered, this, &MainWindow::save);
+ saveAsActs.append(action);
+ }
+
+ printAct = new QAction(tr("&Print..."), this);
+ connect(printAct, &QAction::triggered, scribbleArea, &ScribbleArea::print);
+
+ exitAct = new QAction(tr("E&xit"), this);
+ exitAct->setShortcut(tr("Ctrl+Q"));
+ connect(exitAct, &QAction::triggered, this, &QWidget::close);
+
+ clearScreenAct = new QAction(tr("&Clear Screen"), this);
+ clearScreenAct->setShortcut(tr("Ctrl+L"));
+ connect(clearScreenAct, &QAction::triggered,
+ scribbleArea, &ScribbleArea::clearImage);
+
+ aboutAct = new QAction(tr("&About"), this);
+ connect(aboutAct, &QAction::triggered, this, &MainWindow::about);
+
+ aboutQtAct = new QAction(tr("About &Qt"), this);
+ connect(aboutQtAct, &QAction::triggered, qApp, &QApplication::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(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::fromLatin1(fileFormat.toUpper()))
+ .arg(QString::fromLatin1(fileFormat)));
+ if (fileName.isEmpty()) {
+ return false;
+ } else {
+ return scribbleArea->saveImage(fileName, fileFormat.constData());
+ }
+}
+//! [20]
diff --git a/tests/manual/examples/widgets/touch/fingerpaint/mainwindow.h b/tests/manual/examples/widgets/touch/fingerpaint/mainwindow.h
new file mode 100644
index 0000000000..a4aac1e36b
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/fingerpaint/mainwindow.h
@@ -0,0 +1,51 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QList>
+#include <QMainWindow>
+
+class ScribbleArea;
+
+//! [0]
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow();
+
+protected:
+ void closeEvent(QCloseEvent *event) override;
+
+private slots:
+ void open();
+ void save();
+ void about();
+
+private:
+ void createActions();
+ void createMenus();
+ bool maybeSave();
+ bool saveFile(const QByteArray &fileFormat);
+
+ ScribbleArea *scribbleArea;
+
+ QMenu *saveAsMenu;
+ QMenu *fileMenu;
+ QMenu *optionMenu;
+ QMenu *helpMenu;
+
+ QAction *openAct;
+ QList<QAction *> saveAsActs;
+ QAction *exitAct;
+ QAction *printAct;
+ QAction *clearScreenAct;
+ QAction *aboutAct;
+ QAction *aboutQtAct;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/touch/fingerpaint/scribblearea.cpp b/tests/manual/examples/widgets/touch/fingerpaint/scribblearea.cpp
new file mode 100644
index 0000000000..fb5e62906b
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/fingerpaint/scribblearea.cpp
@@ -0,0 +1,190 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#if defined(QT_PRINTSUPPORT_LIB)
+#include <QtPrintSupport/qtprintsupportglobal.h>
+#if QT_CONFIG(printdialog)
+#include <QPrinter>
+#include <QPrintDialog>
+#endif
+#endif
+
+#include "scribblearea.h"
+
+static const qreal MinimumDiameter = 3.0;
+static const qreal MaximumDiameter = 50.0;
+
+//! [0]
+ScribbleArea::ScribbleArea(QWidget *parent)
+ : QWidget(parent)
+{
+ setAttribute(Qt::WA_AcceptTouchEvents);
+ setAttribute(Qt::WA_StaticContents);
+ modified = false;
+
+ myPenColors
+ << QColor("green")
+ << QColor("purple")
+ << QColor("red")
+ << QColor("blue")
+ << QColor("yellow")
+
+ << QColor("pink")
+ << QColor("orange")
+ << QColor("brown")
+ << QColor("grey")
+ << QColor("black");
+}
+//! [0]
+
+//! [1]
+bool ScribbleArea::openImage(const QString &fileName)
+//! [1] //! [2]
+{
+ QImage loadedImage;
+ if (!loadedImage.load(fileName))
+ return false;
+
+ QSize newSize = loadedImage.size().expandedTo(size());
+ resizeImage(&loadedImage, newSize);
+ image = loadedImage;
+ modified = false;
+ update();
+ return true;
+}
+//! [2]
+
+//! [3]
+bool ScribbleArea::saveImage(const QString &fileName, const char *fileFormat)
+//! [3] //! [4]
+{
+ QImage visibleImage = image;
+ resizeImage(&visibleImage, size());
+
+ if (visibleImage.save(fileName, fileFormat)) {
+ modified = false;
+ return true;
+ } else {
+ return false;
+ }
+}
+//! [4]
+
+//! [9]
+void ScribbleArea::clearImage()
+//! [9] //! [10]
+{
+ image.fill(qRgb(255, 255, 255));
+ modified = true;
+ update();
+}
+//! [10]
+
+//! [12] //! [13]
+void ScribbleArea::paintEvent(QPaintEvent *event)
+//! [13] //! [14]
+{
+ QPainter painter(this);
+ const QRect rect = event->rect();
+ painter.drawImage(rect.topLeft(), image, rect);
+}
+//! [14]
+
+//! [15]
+void ScribbleArea::resizeEvent(QResizeEvent *event)
+//! [15] //! [16]
+{
+ if (width() > image.width() || height() > image.height()) {
+ int newWidth = qMax(width() + 128, image.width());
+ int newHeight = qMax(height() + 128, image.height());
+ resizeImage(&image, QSize(newWidth, newHeight));
+ update();
+ }
+ QWidget::resizeEvent(event);
+}
+//! [16]
+
+//! [19]
+void ScribbleArea::resizeImage(QImage *image, const QSize &newSize)
+//! [19] //! [20]
+{
+ if (image->size() == newSize)
+ return;
+
+ QImage newImage(newSize, QImage::Format_RGB32);
+ newImage.fill(qRgb(255, 255, 255));
+ QPainter painter(&newImage);
+ painter.drawImage(QPoint(0, 0), *image);
+ *image = newImage;
+}
+//! [20]
+
+//! [21]
+void ScribbleArea::print()
+{
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
+ QPrinter printer(QPrinter::HighResolution);
+
+ QPrintDialog printDialog(&printer, this);
+//! [21] //! [22]
+ if (printDialog.exec() == QDialog::Accepted) {
+ QPainter painter(&printer);
+ QRect rect = painter.viewport();
+ QSize size = image.size();
+ size.scale(rect.size(), Qt::KeepAspectRatio);
+ painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
+ painter.setWindow(image.rect());
+ painter.drawImage(0, 0, image);
+ }
+#endif // QT_CONFIG(printdialog)
+}
+//! [22]
+
+bool ScribbleArea::event(QEvent *event)
+{
+ switch (event->type()) {
+ case QEvent::TouchBegin:
+ case QEvent::TouchUpdate:
+ case QEvent::TouchEnd:
+ {
+ const QTouchEvent *touch = static_cast<QTouchEvent *>(event);
+ const auto touchPoints = static_cast<QTouchEvent *>(event)->points();
+ for (const QTouchEvent::TouchPoint &touchPoint : touchPoints) {
+ switch (touchPoint.state()) {
+ case QEventPoint::Stationary:
+ case QEventPoint::Released:
+ // don't do anything if this touch point hasn't moved or has been released
+ continue;
+ default:
+ {
+ QSizeF diams = touchPoint.ellipseDiameters();
+ if (diams.isEmpty()) {
+ qreal diameter = MaximumDiameter;
+ if (touch->pointingDevice()->capabilities().testFlag(QPointingDevice::Capability::Pressure))
+ diameter = MinimumDiameter + (MaximumDiameter - MinimumDiameter) * touchPoint.pressure();
+ diams = QSizeF(diameter, diameter);
+ }
+
+ QPainter painter(&image);
+ painter.setPen(Qt::NoPen);
+ painter.setBrush(myPenColors.at(touchPoint.id() % myPenColors.count()));
+ painter.drawEllipse(touchPoint.position(), diams.width() / 2, diams.height() / 2);
+ painter.end();
+
+ modified = true;
+ const int rad = 2;
+ QRectF rect(QPointF(), diams);
+ rect.moveCenter(touchPoint.position());
+ update(rect.toRect().adjusted(-rad,-rad, +rad, +rad));
+ }
+ break;
+ }
+ }
+ break;
+ }
+ default:
+ return QWidget::event(event);
+ }
+ return true;
+}
diff --git a/tests/manual/examples/widgets/touch/fingerpaint/scribblearea.h b/tests/manual/examples/widgets/touch/fingerpaint/scribblearea.h
new file mode 100644
index 0000000000..624f07074a
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/fingerpaint/scribblearea.h
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef SCRIBBLEAREA_H
+#define SCRIBBLEAREA_H
+
+#include <QColor>
+#include <QImage>
+#include <QPoint>
+#include <QWidget>
+
+//! [0]
+class ScribbleArea : public QWidget
+{
+ Q_OBJECT
+
+public:
+ ScribbleArea(QWidget *parent = nullptr);
+
+ bool openImage(const QString &fileName);
+ bool saveImage(const QString &fileName, const char *fileFormat);
+
+ bool isModified() const { return modified; }
+
+public slots:
+ void clearImage();
+ void print();
+
+protected:
+ void paintEvent(QPaintEvent *event) override;
+ void resizeEvent(QResizeEvent *event) override;
+ bool event(QEvent *event) override;
+
+private:
+ void resizeImage(QImage *image, const QSize &newSize);
+
+ bool modified;
+ QList<QColor> myPenColors;
+ QImage image;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/touch/pinchzoom/CMakeLists.txt b/tests/manual/examples/widgets/touch/pinchzoom/CMakeLists.txt
new file mode 100644
index 0000000000..8820d8d44b
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/pinchzoom/CMakeLists.txt
@@ -0,0 +1,50 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(pinchzoom LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/touch/pinchzoom")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(pinchzoom
+ graphicsview.cpp graphicsview.h
+ main.cpp
+ mouse.cpp mouse.h
+)
+
+set_target_properties(pinchzoom PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(pinchzoom PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(mice_resource_files
+ "images/cheese.jpg"
+)
+
+qt_add_resources(pinchzoom "mice"
+ PREFIX
+ "/"
+ FILES
+ ${mice_resource_files}
+)
+
+install(TARGETS pinchzoom
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/touch/pinchzoom/doc/images/pinch-zoom-example.png b/tests/manual/examples/widgets/touch/pinchzoom/doc/images/pinch-zoom-example.png
new file mode 100644
index 0000000000..7db51fbf55
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/pinchzoom/doc/images/pinch-zoom-example.png
Binary files differ
diff --git a/tests/manual/examples/widgets/touch/pinchzoom/doc/src/pinchzoom.qdoc b/tests/manual/examples/widgets/touch/pinchzoom/doc/src/pinchzoom.qdoc
new file mode 100644
index 0000000000..aef5c59407
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/pinchzoom/doc/src/pinchzoom.qdoc
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example touch/pinchzoom
+ \title Pinch Zoom Example
+ \ingroup touchinputexamples
+ \brief Shows how to recognize a gesture.
+
+ The Pinch Zoom example shows how to use low-level touch information
+ to recognize a gesture.
+
+ \image touch-pinchzoom-example.png
+*/
diff --git a/tests/manual/examples/widgets/touch/pinchzoom/graphicsview.cpp b/tests/manual/examples/widgets/touch/pinchzoom/graphicsview.cpp
new file mode 100644
index 0000000000..61042e7e02
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/pinchzoom/graphicsview.cpp
@@ -0,0 +1,48 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "graphicsview.h"
+
+#include <QScrollBar>
+#include <QTouchEvent>
+
+GraphicsView::GraphicsView(QGraphicsScene *scene, QWidget *parent)
+ : QGraphicsView(scene, parent)
+{
+ viewport()->setAttribute(Qt::WA_AcceptTouchEvents);
+ setDragMode(ScrollHandDrag);
+}
+
+bool GraphicsView::viewportEvent(QEvent *event)
+{
+ switch (event->type()) {
+ case QEvent::TouchBegin:
+ case QEvent::TouchUpdate:
+ case QEvent::TouchEnd:
+ {
+ QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event);
+ const auto touchPoints = touchEvent->points();
+ if (touchPoints.count() == 2) {
+ // determine scale factor
+ const QEventPoint &touchPoint0 = touchPoints.first();
+ const QEventPoint &touchPoint1 = touchPoints.last();
+ qreal currentScaleFactor =
+ QLineF(touchPoint0.position(), touchPoint1.position()).length()
+ / QLineF(touchPoint0.pressPosition(), touchPoint1.pressPosition()).length();
+ if (touchEvent->touchPointStates() & QEventPoint::Released) {
+ // if one of the fingers is released, remember the current scale
+ // factor so that adding another finger later will continue zooming
+ // by adding new scale factor to the existing remembered value.
+ totalScaleFactor *= currentScaleFactor;
+ currentScaleFactor = 1;
+ }
+ setTransform(QTransform::fromScale(totalScaleFactor * currentScaleFactor,
+ totalScaleFactor * currentScaleFactor));
+ }
+ return true;
+ }
+ default:
+ break;
+ }
+ return QGraphicsView::viewportEvent(event);
+}
diff --git a/tests/manual/examples/widgets/touch/pinchzoom/graphicsview.h b/tests/manual/examples/widgets/touch/pinchzoom/graphicsview.h
new file mode 100644
index 0000000000..e6a300f418
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/pinchzoom/graphicsview.h
@@ -0,0 +1,18 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#pragma once
+#include <QGraphicsView>
+
+class GraphicsView : public QGraphicsView
+{
+ Q_OBJECT
+
+public:
+ GraphicsView(QGraphicsScene *scene = nullptr, QWidget *parent = nullptr);
+
+ bool viewportEvent(QEvent *event) override;
+
+private:
+ qreal totalScaleFactor = 1;
+};
diff --git a/tests/manual/examples/widgets/touch/pinchzoom/images/cheese.jpg b/tests/manual/examples/widgets/touch/pinchzoom/images/cheese.jpg
new file mode 100644
index 0000000000..dea5795fd0
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/pinchzoom/images/cheese.jpg
Binary files differ
diff --git a/tests/manual/examples/widgets/touch/pinchzoom/main.cpp b/tests/manual/examples/widgets/touch/pinchzoom/main.cpp
new file mode 100644
index 0000000000..85b5cad1f8
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/pinchzoom/main.cpp
@@ -0,0 +1,47 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "graphicsview.h"
+#include "mouse.h"
+
+#include <QApplication>
+#include <cmath>
+
+static constexpr int MouseCount = 7;
+
+//! [0]
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+//! [0]
+
+//! [1]
+ QGraphicsScene scene;
+ scene.setSceneRect(-300, -300, 600, 600);
+//! [1] //! [2]
+ scene.setItemIndexMethod(QGraphicsScene::NoIndex);
+//! [2]
+
+//! [3]
+ for (int i = 0; i < MouseCount; ++i) {
+ Mouse *mouse = new Mouse;
+ mouse->setPos(::sin((i * 6.28) / MouseCount) * 200,
+ ::cos((i * 6.28) / MouseCount) * 200);
+ scene.addItem(mouse);
+ }
+//! [3]
+
+//! [4]
+ GraphicsView view(&scene);
+ view.setRenderHint(QPainter::Antialiasing);
+ view.setBackgroundBrush(QPixmap(":/images/cheese.jpg"));
+//! [4] //! [5]
+ view.setCacheMode(QGraphicsView::CacheBackground);
+ view.setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
+//! [5] //! [6]
+ view.setWindowTitle(QT_TRANSLATE_NOOP(QGraphicsView, "Colliding Mice"));
+ view.showMaximized();
+
+ return app.exec();
+}
+//! [6]
diff --git a/tests/manual/examples/widgets/touch/pinchzoom/mice.qrc b/tests/manual/examples/widgets/touch/pinchzoom/mice.qrc
new file mode 100644
index 0000000000..accdb4d0a6
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/pinchzoom/mice.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/" >
+ <file>images/cheese.jpg</file>
+ </qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/touch/pinchzoom/mouse.cpp b/tests/manual/examples/widgets/touch/pinchzoom/mouse.cpp
new file mode 100644
index 0000000000..ae0d497833
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/pinchzoom/mouse.cpp
@@ -0,0 +1,158 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mouse.h"
+
+#include <QGraphicsScene>
+#include <QPainter>
+#include <QRandomGenerator>
+#include <QStyleOption>
+#include <qmath.h>
+
+constexpr qreal Pi = M_PI;
+constexpr qreal TwoPi = 2 * M_PI;
+
+static qreal normalizeAngle(qreal angle)
+{
+ while (angle < 0)
+ angle += TwoPi;
+ while (angle > TwoPi)
+ angle -= TwoPi;
+ return angle;
+}
+
+//! [0]
+Mouse::Mouse() : color(QRandomGenerator::global()->bounded(256),
+ QRandomGenerator::global()->bounded(256),
+ QRandomGenerator::global()->bounded(256))
+{
+ setTransform(QTransform().rotate(QRandomGenerator::global()->bounded(360 * 16)), true);
+ startTimer(1000 / 33);
+}
+//! [0]
+
+//! [1]
+QRectF Mouse::boundingRect() const
+{
+ qreal adjust = 0.5;
+ return QRectF(-18 - adjust, -22 - adjust,
+ 36 + adjust, 60 + adjust);
+}
+//! [1]
+
+//! [2]
+QPainterPath Mouse::shape() const
+{
+ QPainterPath path;
+ path.addRect(-10, -20, 20, 40);
+ return path;
+}
+//! [2]
+
+//! [3]
+void Mouse::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
+{
+ // Body
+ painter->setBrush(color);
+ painter->drawEllipse(-10, -20, 20, 40);
+
+ // Eyes
+ painter->setBrush(Qt::white);
+ painter->drawEllipse(-10, -17, 8, 8);
+ painter->drawEllipse(2, -17, 8, 8);
+
+ // Nose
+ painter->setBrush(Qt::black);
+ painter->drawEllipse(QRectF(-2, -22, 4, 4));
+
+ // Pupils
+ painter->drawEllipse(QRectF(-8.0 + mouseEyeDirection, -17, 4, 4));
+ painter->drawEllipse(QRectF(4.0 + mouseEyeDirection, -17, 4, 4));
+
+ // Ears
+ painter->setBrush(scene()->collidingItems(this).isEmpty() ? Qt::darkYellow : Qt::red);
+ painter->drawEllipse(-17, -12, 16, 16);
+ painter->drawEllipse(1, -12, 16, 16);
+
+ // Tail
+ QPainterPath path(QPointF(0, 20));
+ path.cubicTo(-5, 22, -5, 22, 0, 25);
+ path.cubicTo(5, 27, 5, 32, 0, 30);
+ path.cubicTo(-5, 32, -5, 42, 0, 35);
+ painter->setBrush(Qt::NoBrush);
+ painter->drawPath(path);
+}
+//! [3]
+
+//! [4]
+void Mouse::timerEvent(QTimerEvent *)
+{
+//! [4]
+ // Don't move too far away
+//! [5]
+ QLineF lineToCenter(QPointF(0, 0), mapFromScene(0, 0));
+ if (lineToCenter.length() > 150) {
+ qreal angleToCenter = std::atan2(lineToCenter.dy(), lineToCenter.dx());
+ angleToCenter = normalizeAngle((Pi - angleToCenter) + Pi / 2);
+
+ if (angleToCenter < Pi && angleToCenter > Pi / 4) {
+ // Rotate left
+ angle += (angle < -Pi / 2) ? 0.25 : -0.25;
+ } else if (angleToCenter >= Pi && angleToCenter < (Pi + Pi / 2 + Pi / 4)) {
+ // Rotate right
+ angle += (angle < Pi / 2) ? 0.25 : -0.25;
+ }
+ } else if (::sin(angle) < 0) {
+ angle += 0.25;
+ } else if (::sin(angle) > 0) {
+ angle -= 0.25;
+//! [5] //! [6]
+ }
+//! [6]
+
+ // Try not to crash with any other mice
+//! [7]
+ QList<QGraphicsItem *> dangerMice = scene()->items(QPolygonF()
+ << mapToScene(0, 0)
+ << mapToScene(-30, -50)
+ << mapToScene(30, -50));
+ for (QGraphicsItem *item : dangerMice) {
+ if (item == this)
+ continue;
+
+ QLineF lineToMouse(QPointF(0, 0), mapFromItem(item, 0, 0));
+ qreal angleToMouse = std::atan2(lineToMouse.dy(), lineToMouse.dx());
+ angleToMouse = normalizeAngle((Pi - angleToMouse) + Pi / 2);
+
+ if (angleToMouse >= 0 && angleToMouse < Pi / 2) {
+ // Rotate right
+ angle += 0.5;
+ } else if (angleToMouse <= TwoPi && angleToMouse > (TwoPi - Pi / 2)) {
+ // Rotate left
+ angle -= 0.5;
+//! [7] //! [8]
+ }
+//! [8] //! [9]
+ }
+//! [9]
+
+ // Add some random movement
+//! [10]
+ if (dangerMice.size() > 1 && QRandomGenerator::global()->bounded(10) == 0) {
+ if (QRandomGenerator::global()->bounded(1))
+ angle += QRandomGenerator::global()->bounded(1 / 500.0);
+ else
+ angle -= QRandomGenerator::global()->bounded(1 / 500.0);
+ }
+//! [10]
+
+//! [11]
+ speed += (-50 + QRandomGenerator::global()->bounded(100)) / 100.0;
+
+ qreal dx = ::sin(angle) * 10;
+ mouseEyeDirection = (qAbs(dx / 5) < 1) ? 0 : dx / 5;
+
+ setTransform(QTransform().rotate(dx), true);
+ setPos(mapToParent(0, -(3 + sin(speed) * 3)));
+}
+//! [11]
diff --git a/tests/manual/examples/widgets/touch/pinchzoom/mouse.h b/tests/manual/examples/widgets/touch/pinchzoom/mouse.h
new file mode 100644
index 0000000000..6b3ef98c22
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/pinchzoom/mouse.h
@@ -0,0 +1,33 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MOUSE_H
+#define MOUSE_H
+
+#include <QGraphicsObject>
+
+//! [0]
+class Mouse : public QGraphicsObject
+{
+ Q_OBJECT
+
+public:
+ Mouse();
+
+ QRectF boundingRect() const override;
+ QPainterPath shape() const override;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
+ QWidget *widget) override;
+
+protected:
+ void timerEvent(QTimerEvent *event) override;
+
+private:
+ qreal angle = 0;
+ qreal speed = 0;
+ qreal mouseEyeDirection = 0;
+ QColor color;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/touch/pinchzoom/pinchzoom.pro b/tests/manual/examples/widgets/touch/pinchzoom/pinchzoom.pro
new file mode 100644
index 0000000000..ebbc7ddf1f
--- /dev/null
+++ b/tests/manual/examples/widgets/touch/pinchzoom/pinchzoom.pro
@@ -0,0 +1,16 @@
+QT += widgets
+
+HEADERS += \
+ mouse.h \
+ graphicsview.h
+SOURCES += \
+ main.cpp \
+ mouse.cpp \
+ graphicsview.cpp
+
+RESOURCES += \
+ mice.qrc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/touch/pinchzoom
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/CMakeLists.txt b/tests/manual/examples/widgets/tutorials/addressbook/CMakeLists.txt
new file mode 100644
index 0000000000..066a323d61
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+qt_internal_add_example(part1)
+qt_internal_add_example(part2)
+qt_internal_add_example(part3)
+qt_internal_add_example(part4)
+qt_internal_add_example(part5)
+qt_internal_add_example(part6)
+qt_internal_add_example(part7)
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/README b/tests/manual/examples/widgets/tutorials/addressbook/README
new file mode 100644
index 0000000000..07897b9683
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/README
@@ -0,0 +1,40 @@
+The Address Book Tutorial shows how to put together a simple yet
+fully-functioning GUI application. The tutorial chapters can be found in the
+Qt documentation, which can be viewed using Qt Assistant or a Web browser.
+
+The tutorial is also available online at
+
+http://qt-project.org/doc/qt-5.0/qtwidgets/tutorials-addressbook.html
+
+All programs corresponding to the chapters in the tutorial should
+automatically be built when Qt is compiled, or will be provided as
+pre-built executables if you have obtained a binary package of Qt.
+
+If you have only compiled the Qt libraries, use the following instructions
+to build the tutorial.
+
+On Linux/Unix:
+
+Typing 'make' in this directory builds all the programs (part1/part1,
+part2/part2, part3/part3 and so on). Typing 'make' in each subdirectory
+builds just that tutorial program.
+
+On Windows:
+
+Create a single Visual Studio project for the tutorial directory in
+the usual way. You can do this by typing the following at the command
+line:
+
+qmake -tp vc
+
+You should now be able to open the project file in Visual Studio and
+build all of the tutorial programs at the same time.
+
+On Mac OS X:
+
+Create an Xcode project with the .pro file in the tutorial directory.
+You can do this by typing the following at the command line:
+
+qmake -spec macx-xcode
+
+Then open the generated Xcode project in Xcode and build it.
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-labeled-layout.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-labeled-layout.png
new file mode 100644
index 0000000000..b19cb360a1
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-labeled-layout.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-labeled-screenshot.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-labeled-screenshot.png
new file mode 100644
index 0000000000..f9b91eebe6
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-labeled-screenshot.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-screenshot.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-screenshot.png
new file mode 100644
index 0000000000..454b0959e6
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part1-screenshot.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-contact.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-contact.png
new file mode 100644
index 0000000000..6f2b947b21
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-contact.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-flowchart.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-flowchart.png
new file mode 100644
index 0000000000..ca9af3720d
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-flowchart.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-successful.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-successful.png
new file mode 100644
index 0000000000..99a2154007
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-add-successful.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-labeled-layout.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-labeled-layout.png
new file mode 100644
index 0000000000..1e000c8f31
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-labeled-layout.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-signals-and-slots.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-signals-and-slots.png
new file mode 100644
index 0000000000..e49f8dc262
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-signals-and-slots.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-stretch-effects.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-stretch-effects.png
new file mode 100644
index 0000000000..d9f7f31227
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part2-stretch-effects.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-labeled-layout.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-labeled-layout.png
new file mode 100644
index 0000000000..1981ba8cb6
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-labeled-layout.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-linkedlist.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-linkedlist.png
new file mode 100644
index 0000000000..e7f4725dce
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-linkedlist.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-screenshot.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-screenshot.png
new file mode 100644
index 0000000000..75159b4045
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part3-screenshot.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part4-remove.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part4-remove.png
new file mode 100644
index 0000000000..8eb259ef02
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part4-remove.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-finddialog.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-finddialog.png
new file mode 100644
index 0000000000..743d92ef6f
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-finddialog.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-notfound.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-notfound.png
new file mode 100644
index 0000000000..2d35766ab5
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-notfound.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-screenshot.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-screenshot.png
new file mode 100644
index 0000000000..3abe2775c2
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-screenshot.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-signals-and-slots.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-signals-and-slots.png
new file mode 100644
index 0000000000..1771e7bbbf
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part5-signals-and-slots.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-load.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-load.png
new file mode 100644
index 0000000000..a027a1decb
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-load.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-save.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-save.png
new file mode 100644
index 0000000000..757feeb9ac
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-save.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-screenshot.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-screenshot.png
new file mode 100644
index 0000000000..7bb2f749bf
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part6-screenshot.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part7-screenshot.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part7-screenshot.png
new file mode 100644
index 0000000000..3e7b3ca522
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-part7-screenshot.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-screenshot.png b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-screenshot.png
new file mode 100644
index 0000000000..3fba6e849e
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial-screenshot.png
Binary files differ
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial.qdoc b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial.qdoc
new file mode 100644
index 0000000000..2f7884bee8
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook-tutorial.qdoc
@@ -0,0 +1,948 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page tutorials-addressbook.html
+
+ \title Address Book Tutorial
+ \ingroup examples-layout
+ \brief An introduction to GUI programming, showing how to put together a
+ simple yet fully-functioning application.
+
+ This tutorial is an introduction to GUI programming with the Qt
+ cross-platform framework.
+
+ \image addressbook-tutorial-screenshot.png
+
+ \omit
+ It doesn't cover everything; the emphasis is on teaching the programming
+ philosophy of GUI programming, and Qt's features are introduced as needed.
+ Some commonly used features are never used in this tutorial.
+ \endomit
+
+ In this tutorial, you will learn about some of the basic
+ components of Qt, including:
+
+ \list
+ \li Widgets and layout managers
+ \li Container classes
+ \li Signals and slots
+ \li Input and output devices
+ \endlist
+
+ Tutorial contents:
+
+ \list 1
+ \li \l{tutorials/addressbook/part1}{Designing the User Interface}
+ \li \l{tutorials/addressbook/part2}{Adding Addresses}
+ \li \l{tutorials/addressbook/part3}{Navigating between Entries}
+ \li \l{tutorials/addressbook/part4}{Editing and Removing Addresses}
+ \li \l{tutorials/addressbook/part5}{Adding a Find Function}
+ \li \l{tutorials/addressbook/part6}{Loading and Saving}
+ \li \l{tutorials/addressbook/part7}{Additional Features}
+ \endlist
+
+ The tutorial source code is located in \c{tutorials/addressbook}.
+
+ Although this little application does not look much like a
+ fully-fledged modern GUI application, it uses many of the basic
+ elements that are used in more complex applications. After you
+ have worked through this tutorial, we recommend reading the
+ \l{mainwindows/application}{Application} example, which presents a
+ small GUI application, with menus, toolbars, a status bar, and so
+ on.
+*/
+
+/*!
+ \example tutorials/addressbook/part1
+ \title Part 1 - Designing the User Interface
+ \brief Describes how to code the user interface of the Address Book Example.
+ This first part covers the design of the basic graphical user
+ interface (GUI) for our address book application.
+
+ The first step in creating a GUI program is to design the user
+ interface. Here the our goal is to set up the labels and input
+ fields to implement a basic address book. The figure below is a
+ screenshot of the expected output.
+
+ \image addressbook-tutorial-part1-screenshot.png
+
+ We require two QLabel objects, \c nameLabel and \c addressLabel, as well
+ as two input fields, a QLineEdit object, \c nameLine, and a QTextEdit
+ object, \c addressText, to enable the user to enter a contact's name and
+ address. The widgets used and their positions are shown in the figure
+ below.
+
+ \image addressbook-tutorial-part1-labeled-screenshot.png
+
+ There are three files used to implement this address book:
+
+ \list
+ \li \c{addressbook.h} - the definition file for the \c AddressBook
+ class,
+ \li \c{addressbook.cpp} - the implementation file for the
+ \c AddressBook class, and
+ \li \c{main.cpp} - the file containing a \c main() function, with
+ an instance of \c AddressBook.
+ \endlist
+
+ \section1 Qt Programming - Subclassing
+
+ When writing Qt programs, we usually subclass Qt objects to add
+ functionality. This is one of the essential concepts behind creating
+ custom widgets or collections of standard widgets. Subclassing to
+ extend or change the behavior of a widget has the following advantages:
+
+ \list
+ \li We can write implementations of virtual or pure virtual functions to
+ obtain exactly what we need, falling back on the base class's implementation
+ when necessary.
+ \li It allows us to encapsulate parts of the user interface within a class,
+ so that the other parts of the application don't need to know about the
+ individual widgets in the user interface.
+ \li The subclass can be used to create multiple custom widgets in the same
+ application or library, and the code for the subclass can be reused in other
+ projects.
+ \endlist
+
+ Since Qt does not provide a specific address book widget, we subclass a
+ standard Qt widget class and add features to it. The \c AddressBook class
+ we create in this tutorial can be reused in situations where a basic address
+ book widget is needed.
+
+ \section1 Defining the AddressBook Class
+
+ The \c{tutorials/addressbook/part1/addressbook.h} file is
+ used to define the \c AddressBook class.
+
+ We start by defining \c AddressBook as a QWidget subclass and declaring
+ a constructor. We also use the Q_OBJECT macro to indicate that the class
+ uses internationalization and Qt's signals and slots features, even
+ if we do not use all of these features at this stage.
+
+ \snippet tutorials/addressbook/part1/addressbook.h class definition
+
+ The class holds declarations of \c nameLine and \c addressText,
+ the private instances of QLineEdit and QTextEdit mentioned
+ earlier. The data stored in \c nameLine and \c addressText will
+ be needed for many of the address book functions.
+
+ We don't include declarations of the QLabel objects we will use
+ because we will not need to reference them once they have been
+ created. The way Qt tracks the ownership of objects is explained
+ in the next section.
+
+ The Q_OBJECT macro itself implements some of the more advanced features of Qt.
+ For now, it is useful to think of the Q_OBJECT macro as a shortcut which allows
+ us to use the \l{QObject::}{tr()} and \l{QObject::}{connect()} functions.
+
+ We have now completed the \c addressbook.h file and we move on to
+ implement the corresponding \c addressbook.cpp file.
+
+ \section1 Implementing the AddressBook Class
+
+ The constructor of \c AddressBook accepts a QWidget parameter, \a parent.
+ By convention, we pass this parameter to the base class's constructor.
+ This concept of ownership, where a parent can have one or more children,
+ is useful for grouping widgets in Qt. For example, if you delete a parent,
+ all of its children will be deleted as well.
+
+ \snippet tutorials/addressbook/part1/addressbook.cpp constructor and input fields
+
+ In this constructor, the QLabel objects \c nameLabel and \c
+ addressLabel are instantiated, as well as \c nameLine and \c
+ addressText. The \l{QObject::tr()}{tr()} function returns a
+ translated version of the string, if there is one
+ available. Otherwise it returns the string itself. This function
+ marks its QString parameter as one that should be translated into
+ other languages. It should be used wherever a translatable string
+ appears.
+
+ When programming with Qt, it is useful to know how layouts work.
+ Qt provides three main layout classes: QHBoxLayout, QVBoxLayout
+ and QGridLayout to handle the positioning of widgets.
+
+ \image addressbook-tutorial-part1-labeled-layout.png
+
+ We use a QGridLayout to position our labels and input fields in a
+ structured manner. QGridLayout divides the available space into a grid and
+ places widgets in the cells we specify with row and column numbers. The
+ diagram above shows the layout cells and the position of our widgets, and
+ we specify this arrangement using the following code:
+
+ \snippet tutorials/addressbook/part1/addressbook.cpp layout
+
+ Notice that \c addressLabel is positioned using Qt::AlignTop as an
+ additional argument. This is to make sure it is not vertically centered in
+ cell (1,0). For a basic overview on Qt Layouts, refer to the
+ \l{Layout Management} documentation.
+
+ In order to install the layout object onto the widget, we have to invoke
+ the widget's \l{QWidget::setLayout()}{setLayout()} function:
+
+ \snippet tutorials/addressbook/part1/addressbook.cpp setting the layout
+
+ Lastly, we set the widget's title to "Simple Address Book".
+
+ \section1 Running the Application
+
+ A separate file, \c main.cpp, is used for the \c main() function. Within
+ this function, we instantiate a QApplication object, \c app. QApplication
+ is responsible for various application-wide resources, such as the default
+ font and cursor, and for running an event loop. Hence, there is always one
+ QApplication object in every GUI application using Qt.
+
+ \snippet tutorials/addressbook/part1/main.cpp main function
+
+ We construct a new \c AddressBook widget on the stack and invoke
+ its \l{QWidget::show()}{show()} function to display it.
+ However, the widget will not be shown until the application's event loop
+ is started. We start the event loop by calling the application's
+ \l{QApplication::}{exec()} function; the result returned by this function
+ is used as the return value from the \c main() function. At this point,
+ it becomes apparent why we instantiated \c AddressBook on the stack: It
+ will now go out of scope. Therefore, \c AddressBook and all its child widgets
+ will be deleted, thus preventing memory leaks.
+*/
+
+/*!
+ \example tutorials/addressbook/part2
+ \title Part 2 - Adding Addresses
+ \brief Describes the code for inserting records in the Address Book Example.
+
+ The next step in creating the address book is to implement some
+ user interactions.
+
+ \image addressbook-tutorial-part2-add-contact.png
+
+ We will provide a push button that the user can click to add a new contact.
+ Also, some form of data structure is needed to store these contacts in an
+ organized way.
+
+ \section1 Defining the AddressBook Class
+
+ Now that we have the labels and input fields set up, we add push buttons to
+ complete the process of adding a contact. This means that our
+ \c addressbook.h file now has three QPushButton objects declared and three
+ corresponding public slots.
+
+ \snippet tutorials/addressbook/part2/addressbook.h slots
+
+ A slot is a function that responds to a particular signal. We will discuss
+ this concept in further detail when implementing the \c AddressBook class.
+ However, for an overview of Qt's signals and slots concept, you can refer
+ to the \l{Signals and Slots} document.
+
+ Three QPushButton objects (\c addButton, \c submitButton, and
+ \c cancelButton) are now included in our private variable declarations,
+ along with \c nameLine and \c addressText.
+
+ \snippet tutorials/addressbook/part2/addressbook.h pushbutton declaration
+
+ We need a container to store our address book contacts, so that we can
+ traverse and display them. A QMap object, \c contacts, is used for this
+ purpose as it holds a key-value pair: the contact's name as the \e key,
+ and the contact's address as the \e{value}.
+
+ \snippet tutorials/addressbook/part2/addressbook.h remaining private variables
+
+ We also declare two private QString objects, \c oldName and \c oldAddress.
+ These objects are needed to hold the name and address of the contact that
+ was last displayed, before the user clicked \uicontrol Add. So, when the user clicks
+ \uicontrol Cancel, we can revert to displaying the details of the last contact.
+
+ \section1 Implementing the AddressBook Class
+
+ Within the constructor of \c AddressBook, we set the \c nameLine and
+ \c addressText to read-only, so that we can only display but not edit
+ existing contact details.
+
+ \dots
+ \snippet tutorials/addressbook/part2/addressbook.cpp setting readonly 1
+ \dots
+ \snippet tutorials/addressbook/part2/addressbook.cpp setting readonly 2
+
+ Then, we instantiate our push buttons: \c addButton, \c submitButton, and
+ \c cancelButton.
+
+ \snippet tutorials/addressbook/part2/addressbook.cpp pushbutton declaration
+
+ The \c addButton is displayed by invoking the \l{QPushButton::show()}
+ {show()} function, while the \c submitButton and \c cancelButton are
+ hidden by invoking \l{QPushButton::hide()}{hide()}. These two push
+ buttons will only be displayed when the user clicks \uicontrol Add and this is
+ handled by the \c addContact() function discussed below.
+
+ \snippet tutorials/addressbook/part2/addressbook.cpp connecting signals and slots
+
+ We connect the push buttons' \l{QPushButton::clicked()}{clicked()} signal
+ to their respective slots. The figure below illustrates this.
+
+ \image addressbook-tutorial-part2-signals-and-slots.png
+
+ Next, we arrange our push buttons neatly to the right of our address book
+ widget, using a QVBoxLayout to line them up vertically.
+
+ \snippet tutorials/addressbook/part2/addressbook.cpp vertical layout
+
+ The \l{QBoxLayout::addStretch()}{addStretch()} function is used to ensure
+ the push buttons are not evenly spaced, but arranged closer to the top of
+ the widget. The figure below shows the difference between using
+ \l{QBoxLayout::addStretch()}{addStretch()} and not using it.
+
+ \image addressbook-tutorial-part2-stretch-effects.png
+
+ We then add \c buttonLayout1 to \c mainLayout, using
+ \l{QGridLayout::addLayout()}{addLayout()}. This gives us nested layouts
+ as \c buttonLayout1 is now a child of \c mainLayout.
+
+ \snippet tutorials/addressbook/part2/addressbook.cpp grid layout
+
+ Our layout coordinates now look like this:
+
+ \image addressbook-tutorial-part2-labeled-layout.png
+
+ In the \c addContact() function, we store the last displayed contact
+ details in \c oldName and \c oldAddress. Then we clear these input
+ fields and turn off the read-only mode. The focus is set on \c nameLine
+ and we display \c submitButton and \c cancelButton.
+
+ \snippet tutorials/addressbook/part2/addressbook.cpp addContact
+
+ The \c submitContact() function can be divided into three parts:
+
+ \list 1
+ \li We extract the contact's details from \c nameLine and \c addressText
+ and store them in QString objects. We also validate to make sure that the
+ user did not click \uicontrol Submit with empty input fields; otherwise, a
+ QMessageBox is displayed to remind the user for a name and address.
+
+ \snippet tutorials/addressbook/part2/addressbook.cpp submitContact part1
+
+ \li We then proceed to check if the contact already exists. If it does not
+ exist, we add the contact to \c contacts and we display a QMessageBox to
+ inform the user that the contact has been added.
+
+ \snippet tutorials/addressbook/part2/addressbook.cpp submitContact part2
+
+ If the contact already exists, again, we display a QMessageBox to inform
+ the user about this, preventing the user from adding duplicate contacts.
+ Our \c contacts object is based on key-value pairs of name and address,
+ hence, we want to ensure that \e key is unique.
+
+ \li Once we have handled both cases mentioned above, we restore the push
+ buttons to their normal state with the following code:
+
+ \snippet tutorials/addressbook/part2/addressbook.cpp submitContact part3
+
+ \endlist
+
+ The screenshot below shows the QMessageBox object we use to display
+ information messages to the user.
+
+ \image addressbook-tutorial-part2-add-successful.png
+
+ The \c cancel() function restores the last displayed contact details and
+ enables \c addButton, as well as hides \c submitButton and
+ \c cancelButton.
+
+ \snippet tutorials/addressbook/part2/addressbook.cpp cancel
+
+ The general idea behind adding a contact is to give the user the
+ flexibility to click \uicontrol Submit or \uicontrol Cancel at any time. The flowchart below
+ further explains this concept:
+
+ \image addressbook-tutorial-part2-add-flowchart.png
+*/
+
+/*!
+ \example tutorials/addressbook/part3
+ \title Part 3 - Navigating between Entries
+ \brief Explains the code that enables navigating the contacts.
+
+ The address book is now about half complete. We should add the
+ capability to navigate the contacts, but first we must
+ decide what sort of a data structure we need for containing these
+ contacts.
+
+ In the previous section, we used a QMap of key-value pairs with
+ the contact's name as the \e key, and the contact's address as the
+ \e value. This works well for our case. However, in order to
+ navigate and display each entry, a little bit of enhancement is
+ needed.
+
+ We enhance the QMap by making it replicate a data structure similar to a
+ circularly-linked list, where all elements are connected, including the
+ first element and the last element. The figure below illustrates this data
+ structure.
+
+ \image addressbook-tutorial-part3-linkedlist.png
+
+ \section1 Defining the AddressBook Class
+
+ To add navigation functions to the address book, we must add two
+ more slots to the \c AddressBook class: \c next() and \c
+ previous() to the \c addressbook.h file:
+
+ \snippet tutorials/addressbook/part3/addressbook.h navigation functions
+
+ We also require another two QPushButton objects, so we declare \c nextButton
+ and \c previousButton as private variables:
+
+ \snippet tutorials/addressbook/part3/addressbook.h navigation pushbuttons
+
+ \section1 Implementing the AddressBook Class
+
+ In the \c AddressBook constructor in \c addressbook.cpp, we instantiate
+ \c nextButton and \c previousButton and disable them by default. This is
+ because navigation is only enabled when there is more than one contact
+ in the address book.
+
+ \snippet tutorials/addressbook/part3/addressbook.cpp navigation pushbuttons
+
+ We then connect these push buttons to their respective slots:
+
+ \snippet tutorials/addressbook/part3/addressbook.cpp connecting navigation signals
+
+ The image below is the expected graphical user interface.
+
+ \image addressbook-tutorial-part3-screenshot.png
+
+ We follow basic conventions for \c next() and \c previous() functions by
+ placing the \c nextButton on the right and the \c previousButton on the
+ left. In order to achieve this intuitive layout, we use QHBoxLayout to
+ place the widgets side-by-side:
+
+ \snippet tutorials/addressbook/part3/addressbook.cpp navigation layout
+
+ The QHBoxLayout object, \c buttonLayout2, is then added to \c mainLayout.
+
+ \snippet tutorials/addressbook/part3/addressbook.cpp adding navigation layout
+
+ The figure below shows the coordinates of the widgets in \c mainLayout.
+ \image addressbook-tutorial-part3-labeled-layout.png
+
+ Within our \c addContact() function, we have to disable these buttons so
+ that the user does not attempt to navigate while adding a contact.
+
+ \snippet tutorials/addressbook/part3/addressbook.cpp disabling navigation
+
+ Also, in our \c submitContact() function, we enable the navigation
+ buttons, \c nextButton and \c previousButton, depending on the size
+ of \c contacts. As mentioned earlier, navigation is only enabled when
+ there is more than one contact in the address book. The following lines
+ of code demonstrates how to do this:
+
+ \snippet tutorials/addressbook/part3/addressbook.cpp enabling navigation
+
+ We also include these lines of code in the \c cancel() function.
+
+ Recall that we intend to emulate a circularly-linked list with our QMap
+ object, \c contacts. So, in the \c next() function, we obtain an iterator
+ for \c contacts and then:
+
+ \list
+ \li If the iterator is not at the end of \c contacts, we increment it
+ by one.
+ \li If the iterator is at the end of \c contacts, we move it to the
+ beginning of \c contacts. This gives us the illusion that our QMap is
+ working like a circularly-linked list.
+ \endlist
+
+ \snippet tutorials/addressbook/part3/addressbook.cpp next() function
+
+ Once we have iterated to the correct object in \c contacts, we display
+ its contents on \c nameLine and \c addressText.
+
+ Similarly, for the \c previous() function, we obtain an iterator for
+ \c contacts and then:
+
+ \list
+ \li If the iterator is at the end of \c contacts, we clear the
+ display and return.
+ \li If the iterator is at the beginning of \c contacts, we move it to
+ the end.
+ \li We then decrement the iterator by one.
+ \endlist
+
+ \snippet tutorials/addressbook/part3/addressbook.cpp previous() function
+
+ Again, we display the contents of the current object in \c contacts.
+
+*/
+
+/*!
+ \example tutorials/addressbook/part4
+ \title Part 4 - Editing and Removing Addresses
+ \brief Explains how to add edit and remove functionality.
+
+ Now we look at ways to modify the contents of contacts stored in
+ the address book.
+
+ \image addressbook-tutorial-screenshot.png
+
+ We now have an address book that not only holds contacts in an
+ organized manner, but also allows navigation. It would be
+ convenient to include edit and remove functions so that a
+ contact's details can be changed when needed. However, this
+ requires a little improvement, in the form of enums. We defined
+ two modes: \c{AddingMode} and \c{NavigationMode}, but they were
+ not defined as enum values. Instead, we enabled and disabled the
+ corresponding buttons manually, resulting in multiple lines of
+ repeated code.
+
+ Here we define the \c Mode enum with three different values:
+
+ \list
+ \li \c{NavigationMode},
+ \li \c{AddingMode}, and
+ \li \c{EditingMode}.
+ \endlist
+
+ \section1 Defining the AddressBook Class
+
+ The \c addressbook.h file is updated to contain the \c Mode enum:
+
+ \snippet tutorials/addressbook/part4/addressbook.h Mode enum
+
+ We also add two new slots, \c editContact() and \c removeContact(), to
+ our current list of public slots.
+
+ \snippet tutorials/addressbook/part4/addressbook.h edit and remove slots
+
+ In order to switch between modes, we introduce the \c updateInterface() function
+ to control the enabling and disabling of all QPushButton objects. We also
+ add two new push buttons, \c editButton and \c removeButton, for the edit
+ and remove functions mentioned earlier.
+
+ \snippet tutorials/addressbook/part4/addressbook.h updateInterface() declaration
+ \dots
+ \snippet tutorials/addressbook/part4/addressbook.h buttons declaration
+ \dots
+ \snippet tutorials/addressbook/part4/addressbook.h mode declaration
+
+ Lastly, we declare \c currentMode to keep track of the enum's current mode.
+
+ \section1 Implementing the AddressBook Class
+
+ We now implement the mode-changing features of the address
+ book. The \c editButton and \c removeButton are instantiated and
+ disabled by default. The address book starts with zero contacts
+ in memory.
+
+ \snippet tutorials/addressbook/part4/addressbook.cpp edit and remove buttons
+
+ These buttons are then connected to their respective slots, \c editContact()
+ and \c removeContact(), and we add them to \c buttonLayout1.
+
+ \snippet tutorials/addressbook/part4/addressbook.cpp connecting edit and remove
+ \dots
+ \snippet tutorials/addressbook/part4/addressbook.cpp adding edit and remove to the layout
+
+ The \c editContact() function stores the contact's old details in
+ \c oldName and \c oldAddress, before switching the mode to \c EditingMode.
+ In this mode, the \c submitButton and \c cancelButton are both enabled,
+ hence, the user can change the contact's details and click either button.
+
+ \snippet tutorials/addressbook/part4/addressbook.cpp editContact() function
+
+ The \c submitContact() function has been divided in two with an \c{if-else}
+ statement. We check \c currentMode to see if it's in \c AddingMode. If it is,
+ we proceed with our adding process.
+
+ \snippet tutorials/addressbook/part4/addressbook.cpp submitContact() function beginning
+ \dots
+ \snippet tutorials/addressbook/part4/addressbook.cpp submitContact() function part1
+
+ Otherwise, we check to see if \c currentMode is in \c EditingMode. If it
+ is, we compare \c oldName with \c name. If the name has changed, we remove
+ the old contact from \c contacts and insert the newly updated contact.
+
+ \snippet tutorials/addressbook/part4/addressbook.cpp submitContact() function part2
+
+ If only the address has changed (i.e., \c oldAddress is not the same as \c address),
+ we update the contact's address. Lastly, we set \c currentMode to
+ \c NavigationMode. This is an important step as it re-enables all the
+ disabled push buttons.
+
+ To remove a contact from the address book, we implement the
+ \c removeContact() function. This function checks to see if the contact
+ exists in \c contacts.
+
+ \snippet tutorials/addressbook/part4/addressbook.cpp removeContact() function
+
+ If it does, we display a QMessageBox, to confirm the removal with the
+ user. Once the user has confirmed, we call \c previous() to ensure that the
+ user interface shows another contact, and we remove the contact using \l{QMap}'s
+ \l{QMap::remove()}{remove()} function. As a courtesy, we display a QMessageBox
+ to inform the user. Both the message boxes used in this function are shown below:
+
+ \image addressbook-tutorial-part4-remove.png
+
+ \section2 Updating the User Interface
+
+ We mentioned the \c updateInterface() function earlier as a means to
+ enable and disable the push buttons depending on the current mode.
+ The function updates the current mode according to the \c mode argument
+ passed to it, assigning it to \c currentMode before checking its value.
+
+ Each of the push buttons is then enabled or disabled, depending on the
+ current mode. The code for \c AddingMode and \c EditingMode is shown below:
+
+ \snippet tutorials/addressbook/part4/addressbook.cpp update interface() part 1
+
+ For \c NavigationMode, however, we include conditions within the parameters
+ of the QPushButton::setEnabled() function. This is to ensure that
+ \c editButton and \c removeButton are enabled when there is at least one
+ contact in the address book; \c nextButton and \c previousButton are only
+ enabled when there is more than one contact in the address book.
+
+ \snippet tutorials/addressbook/part4/addressbook.cpp update interface() part 2
+
+ By setting the mode and updating the user interface in the same
+ function, we avoid the possibility of the user interface getting
+ out of sync with the internal state of the application.
+ */
+
+/*!
+ \example tutorials/addressbook/part5
+ \title Part 5 - Adding a Find Function
+ \brief Describes how to add a find function.
+
+ Here we look at ways to locate contacts and addresses in the
+ address book.
+
+ \image addressbook-tutorial-part5-screenshot.png
+
+ As we add contacts to our address book, it becomes tedious to
+ navigate the list with the \e Next and \e Previous buttons. A \e
+ Find function would be more efficient. The screenshot above shows
+ the \e Find button and its position on the panel of buttons.
+
+ When the user clicks on the \e Find button, it is useful to
+ display a dialog that prompts for a contact's name. Qt provides
+ QDialog, which we subclass here to implement a \c FindDialog
+ class.
+
+ \section1 Defining the FindDialog Class
+
+ \image addressbook-tutorial-part5-finddialog.png
+
+ In order to subclass QDialog, we first include the header for QDialog in
+ the \c finddialog.h file. Also, we use forward declaration to declare
+ QLineEdit and QPushButton since we will be using those widgets in our
+ dialog class.
+
+ As in our \c AddressBook class, the \c FindDialog class includes
+ the Q_OBJECT macro and its constructor is defined to accept a parent
+ QWidget, even though the dialog will be opened as a separate window.
+
+ \snippet tutorials/addressbook/part5/finddialog.h FindDialog header
+
+ We define a public function, \c getFindText(), to be used by classes that
+ instantiate \c FindDialog. This function allows these classes to obtain the
+ search string entered by the user. A public slot, \c findClicked(), is also
+ defined to handle the search string when the user clicks the \uicontrol Find
+ button.
+
+ Lastly, we define the private variables, \c findButton, \c lineEdit
+ and \c findText, corresponding to the \uicontrol Find button, the line edit
+ into which the user types the search string, and an internal string
+ used to store the search string for later use.
+
+ \section1 Implementing the FindDialog Class
+
+ Within the constructor of \c FindDialog, we set up the private variables,
+ \c lineEdit, \c findButton and \c findText. We use a QHBoxLayout to
+ position the widgets.
+
+ \snippet tutorials/addressbook/part5/finddialog.cpp constructor
+
+ We set the layout and window title, as well as connect the signals to their
+ respective slots. Notice that \c{findButton}'s \l{QPushButton::clicked()}
+ {clicked()} signal is connected to \c findClicked() and
+ \l{QDialog::accept()}{accept()}. The \l{QDialog::accept()}{accept()} slot
+ provided by QDialog hides the dialog and sets the result code to
+ \l{QDialog::}{Accepted}. We use this function to help \c{AddressBook}'s
+ \c findContact() function know when the \c FindDialog object has been
+ closed. We will explain this logic in further detail when discussing the
+ \c findContact() function.
+
+ \image addressbook-tutorial-part5-signals-and-slots.png
+
+ In \c findClicked(), we validate \c lineEdit to ensure that the user
+ did not click the \uicontrol Find button without entering a contact's name. Then, we set
+ \c findText to the search string, extracted from \c lineEdit. After that,
+ we clear the contents of \c lineEdit and hide the dialog.
+
+ \snippet tutorials/addressbook/part5/finddialog.cpp findClicked() function
+
+ The \c findText variable has a public getter function, \c getFindText(),
+ associated with it. Since we only ever set \c findText directly in both the
+ constructor and in the \c findClicked() function, we do not create a
+ setter function to accompany \c getFindText().
+ Because \c getFindText() is public, classes instantiating and using
+ \c FindDialog can always access the search string that the user has
+ entered and accepted.
+
+ \snippet tutorials/addressbook/part5/finddialog.cpp getFindText() function
+
+ \section1 Defining the AddressBook Class
+
+ To ensure we can use \c FindDialog from within our \c AddressBook class, we
+ include \c finddialog.h in the \c addressbook.h file.
+
+ \snippet tutorials/addressbook/part5/addressbook.h include finddialog's header
+
+ So far, all our address book features have a QPushButton and a
+ corresponding slot. Similarly, for the \uicontrol Find feature we have
+ \c findButton and \c findContact().
+
+ The \c findButton is declared as a private variable and the
+ \c findContact() function is declared as a public slot.
+
+ \snippet tutorials/addressbook/part5/addressbook.h findContact() declaration
+ \dots
+ \snippet tutorials/addressbook/part5/addressbook.h findButton declaration
+
+ Lastly, we declare the private variable, \c dialog, which we will use to
+ refer to an instance of \c FindDialog.
+
+ \snippet tutorials/addressbook/part5/addressbook.h FindDialog declaration
+
+ Once we have instantiated a dialog, we will want to use it more than once;
+ using a private variable allows us to refer to it from more than one place
+ in the class.
+
+ \section1 Implementing the AddressBook Class
+
+ Within the \c AddressBook class's constructor, we instantiate our private
+ objects, \c findButton and \c findDialog:
+
+ \snippet tutorials/addressbook/part5/addressbook.cpp instantiating findButton
+ \dots
+ \snippet tutorials/addressbook/part5/addressbook.cpp instantiating FindDialog
+
+ Next, we connect the \c{findButton}'s
+ \l{QPushButton::clicked()}{clicked()} signal to \c findContact().
+
+ \snippet tutorials/addressbook/part5/addressbook.cpp signals and slots for find
+
+ Now all that is left is the code for our \c findContact() function:
+
+ \snippet tutorials/addressbook/part5/addressbook.cpp findContact() function
+
+ We start out by displaying the \c FindDialog instance, \c dialog. This is
+ when the user enters a contact name to look up. Once the user clicks
+ the dialog's \c findButton, the dialog is hidden and the result code is
+ set to QDialog::Accepted. This ensures that
+ our \c if statement is always true.
+
+ We then proceed to extract the search string, which in this case is
+ \c contactName, using \c{FindDialog}'s \c getFindText() function. If the
+ contact exists in our address book, we display it immediately. Otherwise,
+ we display the QMessageBox shown below to indicate that their search
+ failed.
+
+ \image addressbook-tutorial-part5-notfound.png
+*/
+
+/*!
+ \example tutorials/addressbook/part6
+ \title Part 6 - Loading and Saving
+ \brief Describes how to add save and load functionality.
+
+ This part covers the Qt file handling features we use to write
+ loading and saving routines for the address book.
+
+ \image addressbook-tutorial-part6-screenshot.png
+
+ Although browsing and searching the contact list are useful
+ features, our address book is not complete until we can save
+ existing contacts and load them again at a later time.
+
+ Qt provides a number of classes for \l{Input/Output and Networking}
+ {input and output}, but we have chosen to use two which are simple to use
+ in combination: QFile and QDataStream.
+
+ A QFile object represents a file on disk that can be read from and written
+ to. QFile is a subclass of the more general QIODevice class which
+ represents many different kinds of devices.
+
+ A QDataStream object is used to serialize binary data so that it can be
+ stored in a QIODevice and retrieved again later. Reading from a QIODevice
+ and writing to it is as simple as opening the stream - with the respective
+ device as a parameter - and reading from or writing to it.
+
+
+ \section1 Defining the AddressBook Class
+
+ We declare two public slots, \c saveToFile() and \c loadFromFile(), as well
+ as two QPushButton objects, \c loadButton and \c saveButton.
+
+ \snippet tutorials/addressbook/part6/addressbook.h save and load functions declaration
+ \dots
+ \snippet tutorials/addressbook/part6/addressbook.h save and load buttons declaration
+
+ \section1 Implementing the AddressBook Class
+
+ In our constructor, we instantiate \c loadButton and \c saveButton.
+ Ideally, it would be more user-friendly to set the push buttons' labels
+ to "Load contacts from a file" and "Save contacts to a file". However, due
+ to the size of our other push buttons, we set the labels to \uicontrol{Load...}
+ and \uicontrol{Save...}. Fortunately, Qt provides a simple way to set tooltips with
+ \l{QWidget::setToolTip()}{setToolTip()} and we use it in the following way
+ for our push buttons:
+
+ \snippet tutorials/addressbook/part6/addressbook.cpp tooltip 1
+ \dots
+ \snippet tutorials/addressbook/part6/addressbook.cpp tooltip 2
+
+ Although it is not shown here, just like the other features we implemented,
+ we add the push buttons to the layout panel on the right, \c buttonLayout1,
+ and we connect the push buttons' \l{QPushButton::clicked()}{clicked()}
+ signals to their respective slots.
+
+ For the saving feature, we first obtain \c fileName using
+ QFileDialog::getSaveFileName(). This is a convenience function provided
+ by QFileDialog, which pops up a modal file dialog and allows the user to
+ enter a file name or select any existing \c{.abk} file. The \c{.abk} file
+ is our Address Book extension that we create when we save contacts.
+
+ \snippet tutorials/addressbook/part6/addressbook.cpp saveToFile() function part1
+
+ The file dialog that pops up is displayed in the screenshot below:
+
+ \image addressbook-tutorial-part6-save.png
+
+ If \c fileName is not empty, we create a QFile object, \c file, with
+ \c fileName. QFile works with QDataStream as QFile is a QIODevice.
+
+ Next, we attempt to open the file in \l{QIODeviceBase::}{WriteOnly} mode.
+ If this is unsuccessful, we display a QMessageBox to inform the user.
+
+ \snippet tutorials/addressbook/part6/addressbook.cpp saveToFile() function part2
+
+ Otherwise, we instantiate a QDataStream object, \c out, to write the open
+ file. QDataStream requires that the same version of the stream is used
+ for reading and writing. We ensure that this is the case by setting the
+ version used to the \l{QDataStream::Qt_4_5}{version introduced with Qt 4.5}
+ before serializing the data to \c file.
+
+ \snippet tutorials/addressbook/part6/addressbook.cpp saveToFile() function part3
+
+ For the loading feature, we also obtain \c fileName using
+ QFileDialog::getOpenFileName(). This function, the counterpart to
+ QFileDialog::getSaveFileName(), also pops up the modal file dialog and
+ allows the user to enter a file name or select any existing \c{.abk} file
+ to load it into the address book.
+
+ \snippet tutorials/addressbook/part6/addressbook.cpp loadFromFile() function part1
+
+ On Windows, for example, this function pops up a native file dialog, as
+ shown in the following screenshot.
+
+ \image addressbook-tutorial-part6-load.png
+
+ If \c fileName is not empty, again, we use a QFile object, \c file, and
+ attempt to open it in \l{QIODeviceBase::}{ReadOnly} mode. Similar to our
+ implementation of \c saveToFile(), if this attempt is unsuccessful, we
+ display a QMessageBox to inform the user.
+
+ \snippet tutorials/addressbook/part6/addressbook.cpp loadFromFile() function part2
+
+ Otherwise, we instantiate a QDataStream object, \c in, set its version as
+ above and read the serialized data into the \c contacts data structure.
+ The \c contacts object is emptied before data is read into it to simplify
+ the file reading process. A more advanced method would be to read the
+ contacts into a temporary QMap object, and copy over non-duplicate contacts
+ into \c contacts.
+
+ \snippet tutorials/addressbook/part6/addressbook.cpp loadFromFile() function part3
+
+ To display the contacts that have been read from the file, we must first
+ validate the data obtained to ensure that the file we read from actually
+ contains address book contacts. If it does, we display the first contact;
+ otherwise, we display a QMessageBox to inform the user about the problem.
+ Lastly, we update the interface to enable and disable the push buttons
+ accordingly.
+*/
+
+/*!
+ \example tutorials/addressbook/part7
+ \title Part 7 - Additional Features
+ \brief Describes how to export data in VCard format.
+
+ This part covers some additional features that make the address
+ book more convenient for the frequent user.
+
+ \image addressbook-tutorial-part7-screenshot.png
+
+ Although our address book is useful in isolation, it would be
+ better if we could exchange contact data with other applications.
+ The vCard format is a popular file format that can be used for
+ this purpose. Here we extend our address book client to allow
+ contacts to be exported to vCard \c{.vcf} files.
+
+ \section1 Defining the AddressBook Class
+
+ We add a QPushButton object, \c exportButton, and a corresponding public
+ slot, \c exportAsVCard() to our \c AddressBook class in the
+ \c addressbook.h file.
+
+ \snippet tutorials/addressbook/part7/addressbook.h exportAsVCard() declaration
+ \dots
+ \snippet tutorials/addressbook/part7/addressbook.h exportButton declaration
+
+ \section1 Implementing the AddressBook Class
+
+ Within the \c AddressBook constructor, we connect \c{exportButton}'s
+ \l{QPushButton::clicked()}{clicked()} signal to \c exportAsVCard().
+ We also add this button to our \c buttonLayout1, the layout responsible
+ for our panel of buttons on the right.
+
+ In our \c exportAsVCard() function, we start by extracting the contact's
+ name into \c name. We declare \c firstName, \c lastName and \c nameList.
+ Next, we look for the index of the first white space in \c name. If there
+ is a white space, we split the contact's name into \c firstName and
+ \c lastName. Then, we replace the space with an underscore ("_").
+ Alternately, if there is no white space, we assume that the contact only
+ has a first name.
+
+ \snippet tutorials/addressbook/part7/addressbook.cpp export function part1
+
+ As with the \c saveToFile() function, we open a file dialog to let the user
+ choose a location for the file. Using the file name chosen, we create an
+ instance of QFile to write to.
+
+ We attempt to open the file in \l{QIODeviceBase::}{WriteOnly} mode. If this
+ process fails, we display a QMessageBox to inform the user about the
+ problem and return. Otherwise, we pass the file as a parameter to a
+ QTextStream object, \c out. Like QDataStream, the QTextStream class
+ provides functionality to read and write plain text to files. As a result,
+ the \c{.vcf} file generated can be opened for editing in a text editor.
+
+ \snippet tutorials/addressbook/part7/addressbook.cpp export function part2
+
+ We then write out a vCard file with the \c{BEGIN:VCARD} tag, followed by
+ the \c{VERSION:2.1} tag. The contact's name is written with the \c{N:}
+ tag. For the \c{FN:} tag, which fills in the "File as" property of a vCard,
+ we have to check whether the contact has a last name or not. If the contact
+ does, we use the details in \c nameList to fill it. Otherwise, we write
+ \c firstName only.
+
+ \snippet tutorials/addressbook/part7/addressbook.cpp export function part3
+
+ We proceed to write the contact's address. The semicolons in the address
+ are escaped with "\\", the newlines are replaced with semicolons, and the
+ commas are replaced with spaces. Lastly, we write the \c{ADR;HOME:;}
+ tag, followed by \c address and then the \c{END:VCARD} tag.
+
+ \snippet tutorials/addressbook/part7/addressbook.cpp export function part4
+
+ In the end, a QMessageBox is displayed to inform the user that the vCard
+ has been successfully exported.
+
+ \e{vCard is a trademark of the \l{http://www.imc.org}
+ {Internet Mail Consortium}}.
+*/
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/addressbook.pro b/tests/manual/examples/widgets/tutorials/addressbook/addressbook.pro
new file mode 100644
index 0000000000..d31424998e
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/addressbook.pro
@@ -0,0 +1,6 @@
+TEMPLATE = subdirs
+SUBDIRS = part1 part2 part3 part4 part5 part6 part7
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tutorials/addressbook
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part1/CMakeLists.txt b/tests/manual/examples/widgets/tutorials/addressbook/part1/CMakeLists.txt
new file mode 100644
index 0000000000..12eaccd384
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part1/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(part1 LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tutorials/addressbook/part1")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(part1
+ addressbook.cpp addressbook.h
+ main.cpp
+)
+
+set_target_properties(part1 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(part1 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS part1
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part1/addressbook.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part1/addressbook.cpp
new file mode 100644
index 0000000000..eae818dbbf
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part1/addressbook.cpp
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+//! [constructor and input fields]
+AddressBook::AddressBook(QWidget *parent)
+ : QWidget(parent)
+{
+ QLabel *nameLabel = new QLabel(tr("Name:"));
+ nameLine = new QLineEdit;
+
+ QLabel *addressLabel = new QLabel(tr("Address:"));
+ addressText = new QTextEdit;
+//! [constructor and input fields]
+
+//! [layout]
+ QGridLayout *mainLayout = new QGridLayout;
+ mainLayout->addWidget(nameLabel, 0, 0);
+ mainLayout->addWidget(nameLine, 0, 1);
+ mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+ mainLayout->addWidget(addressText, 1, 1);
+//! [layout]
+
+//![setting the layout]
+ setLayout(mainLayout);
+ setWindowTitle(tr("Simple Address Book"));
+}
+//! [setting the layout]
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part1/addressbook.h b/tests/manual/examples/widgets/tutorials/addressbook/part1/addressbook.h
new file mode 100644
index 0000000000..f2e28b4135
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part1/addressbook.h
@@ -0,0 +1,29 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QLabel;
+class QLineEdit;
+class QTextEdit;
+QT_END_NAMESPACE
+
+//! [class definition]
+class AddressBook : public QWidget
+{
+ Q_OBJECT
+
+public:
+ AddressBook(QWidget *parent = nullptr);
+
+private:
+ QLineEdit *nameLine;
+ QTextEdit *addressText;
+};
+//! [class definition]
+
+#endif
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part1/main.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part1/main.cpp
new file mode 100644
index 0000000000..879fb606a2
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part1/main.cpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+//! [main function]
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ AddressBook addressBook;
+ addressBook.show();
+
+ return app.exec();
+}
+//! [main function]
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part1/part1.pro b/tests/manual/examples/widgets/tutorials/addressbook/part1/part1.pro
new file mode 100644
index 0000000000..35d4a0152e
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part1/part1.pro
@@ -0,0 +1,11 @@
+QT += widgets
+
+SOURCES = addressbook.cpp \
+ main.cpp
+HEADERS = addressbook.h
+
+QMAKE_PROJECT_NAME = ab_part1
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tutorials/addressbook/part1
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part2/CMakeLists.txt b/tests/manual/examples/widgets/tutorials/addressbook/part2/CMakeLists.txt
new file mode 100644
index 0000000000..0231e7bce8
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part2/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(part2 LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tutorials/addressbook/part2")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(part2
+ addressbook.cpp addressbook.h
+ main.cpp
+)
+
+set_target_properties(part2 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(part2 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS part2
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.cpp
new file mode 100644
index 0000000000..085103c791
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.cpp
@@ -0,0 +1,123 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+ : QWidget(parent)
+{
+ QLabel *nameLabel = new QLabel(tr("Name:"));
+ nameLine = new QLineEdit;
+//! [setting readonly 1]
+ nameLine->setReadOnly(true);
+//! [setting readonly 1]
+ QLabel *addressLabel = new QLabel(tr("Address:"));
+ addressText = new QTextEdit;
+//! [setting readonly 2]
+ addressText->setReadOnly(true);
+//! [setting readonly 2]
+
+//! [pushbutton declaration]
+ addButton = new QPushButton(tr("&Add"));
+ addButton->show();
+ submitButton = new QPushButton(tr("&Submit"));
+ submitButton->hide();
+ cancelButton = new QPushButton(tr("&Cancel"));
+ cancelButton->hide();
+//! [pushbutton declaration]
+//! [connecting signals and slots]
+ connect(addButton, &QPushButton::clicked,
+ this, &AddressBook::addContact);
+ connect(submitButton, &QPushButton::clicked,
+ this, &AddressBook::submitContact);
+ connect(cancelButton, &QPushButton::clicked,
+ this, &AddressBook::cancel);
+//! [connecting signals and slots]
+//! [vertical layout]
+ QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+ buttonLayout1->addWidget(addButton, Qt::AlignTop);
+ buttonLayout1->addWidget(submitButton);
+ buttonLayout1->addWidget(cancelButton);
+ buttonLayout1->addStretch();
+//! [vertical layout]
+//! [grid layout]
+ QGridLayout *mainLayout = new QGridLayout;
+ mainLayout->addWidget(nameLabel, 0, 0);
+ mainLayout->addWidget(nameLine, 0, 1);
+ mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+ mainLayout->addWidget(addressText, 1, 1);
+ mainLayout->addLayout(buttonLayout1, 1, 2);
+//! [grid layout]
+ setLayout(mainLayout);
+ setWindowTitle(tr("Simple Address Book"));
+}
+//! [addContact]
+void AddressBook::addContact()
+{
+ oldName = nameLine->text();
+ oldAddress = addressText->toPlainText();
+
+ nameLine->clear();
+ addressText->clear();
+
+ nameLine->setReadOnly(false);
+ nameLine->setFocus(Qt::OtherFocusReason);
+ addressText->setReadOnly(false);
+
+ addButton->setEnabled(false);
+ submitButton->show();
+ cancelButton->show();
+}
+//! [addContact]
+
+//! [submitContact part1]
+void AddressBook::submitContact()
+{
+ QString name = nameLine->text();
+ QString address = addressText->toPlainText();
+
+ if (name.isEmpty() || address.isEmpty()) {
+ QMessageBox::information(this, tr("Empty Field"),
+ tr("Please enter a name and address."));
+ return;
+ }
+//! [submitContact part1]
+//! [submitContact part2]
+ if (!contacts.contains(name)) {
+ contacts.insert(name, address);
+ QMessageBox::information(this, tr("Add Successful"),
+ tr("\"%1\" has been added to your address book.").arg(name));
+ } else {
+ QMessageBox::information(this, tr("Add Unsuccessful"),
+ tr("Sorry, \"%1\" is already in your address book.").arg(name));
+ return;
+ }
+//! [submitContact part2]
+//! [submitContact part3]
+ if (contacts.isEmpty()) {
+ nameLine->clear();
+ addressText->clear();
+ }
+
+ nameLine->setReadOnly(true);
+ addressText->setReadOnly(true);
+ addButton->setEnabled(true);
+ submitButton->hide();
+ cancelButton->hide();
+}
+//! [submitContact part3]
+//! [cancel]
+void AddressBook::cancel()
+{
+ nameLine->setText(oldName);
+ nameLine->setReadOnly(true);
+
+ addressText->setText(oldAddress);
+ addressText->setReadOnly(true);
+
+ addButton->setEnabled(true);
+ submitButton->hide();
+ cancelButton->hide();
+}
+//! [cancel]
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.h b/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.h
new file mode 100644
index 0000000000..ecc1a71cee
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part2/addressbook.h
@@ -0,0 +1,47 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+
+QT_BEGIN_NAMESPACE
+class QLabel;
+class QLineEdit;
+class QPushButton;
+class QTextEdit;
+QT_END_NAMESPACE
+
+class AddressBook : public QWidget
+{
+ Q_OBJECT
+
+public:
+ AddressBook(QWidget *parent = nullptr);
+
+//! [slots]
+public slots:
+ void addContact();
+ void submitContact();
+ void cancel();
+//! [slots]
+
+//! [pushbutton declaration]
+private:
+ QPushButton *addButton;
+ QPushButton *submitButton;
+ QPushButton *cancelButton;
+ QLineEdit *nameLine;
+ QTextEdit *addressText;
+//! [pushbutton declaration]
+
+//! [remaining private variables]
+ QMap<QString, QString> contacts;
+ QString oldName;
+ QString oldAddress;
+};
+//! [remaining private variables]
+
+#endif
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part2/main.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part2/main.cpp
new file mode 100644
index 0000000000..879fb606a2
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part2/main.cpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+//! [main function]
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ AddressBook addressBook;
+ addressBook.show();
+
+ return app.exec();
+}
+//! [main function]
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part2/part2.pro b/tests/manual/examples/widgets/tutorials/addressbook/part2/part2.pro
new file mode 100644
index 0000000000..643ffcfebd
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part2/part2.pro
@@ -0,0 +1,11 @@
+QT += widgets
+
+SOURCES = addressbook.cpp \
+ main.cpp
+HEADERS = addressbook.h
+
+QMAKE_PROJECT_NAME = ab_part2
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tutorials/addressbook/part2
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part3/CMakeLists.txt b/tests/manual/examples/widgets/tutorials/addressbook/part3/CMakeLists.txt
new file mode 100644
index 0000000000..77d8d8a610
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part3/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(part3 LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tutorials/addressbook/part3")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(part3
+ addressbook.cpp addressbook.h
+ main.cpp
+)
+
+set_target_properties(part3 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(part3 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS part3
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.cpp
new file mode 100644
index 0000000000..1b37e56880
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.cpp
@@ -0,0 +1,182 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+ : QWidget(parent)
+{
+ QLabel *nameLabel = new QLabel(tr("Name:"));
+ nameLine = new QLineEdit;
+ nameLine->setReadOnly(true);
+
+ QLabel *addressLabel = new QLabel(tr("Address:"));
+ addressText = new QTextEdit;
+ addressText->setReadOnly(true);
+
+ addButton = new QPushButton(tr("&Add"));
+ addButton->show();
+ submitButton = new QPushButton(tr("&Submit"));
+ submitButton->hide();
+ cancelButton = new QPushButton(tr("&Cancel"));
+ cancelButton->hide();
+//! [navigation pushbuttons]
+ nextButton = new QPushButton(tr("&Next"));
+ nextButton->setEnabled(false);
+ previousButton = new QPushButton(tr("&Previous"));
+ previousButton->setEnabled(false);
+//! [navigation pushbuttons]
+ connect(addButton, &QPushButton::clicked,
+ this, &AddressBook::addContact);
+ connect(submitButton, &QPushButton::clicked,
+ this, &AddressBook::submitContact);
+ connect(cancelButton, &QPushButton::clicked,
+ this, &AddressBook::cancel);
+//! [connecting navigation signals]
+ connect(nextButton, &QPushButton::clicked,
+ this, &AddressBook::next);
+ connect(previousButton, &QPushButton::clicked,
+ this, &AddressBook::previous);
+//! [connecting navigation signals]
+
+ QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+ buttonLayout1->addWidget(addButton, Qt::AlignTop);
+ buttonLayout1->addWidget(submitButton);
+ buttonLayout1->addWidget(cancelButton);
+ buttonLayout1->addStretch();
+//! [navigation layout]
+ QHBoxLayout *buttonLayout2 = new QHBoxLayout;
+ buttonLayout2->addWidget(previousButton);
+ buttonLayout2->addWidget(nextButton);
+//! [ navigation layout]
+ QGridLayout *mainLayout = new QGridLayout;
+ mainLayout->addWidget(nameLabel, 0, 0);
+ mainLayout->addWidget(nameLine, 0, 1);
+ mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+ mainLayout->addWidget(addressText, 1, 1);
+ mainLayout->addLayout(buttonLayout1, 1, 2);
+//! [adding navigation layout]
+ mainLayout->addLayout(buttonLayout2, 2, 1);
+//! [adding navigation layout]
+ setLayout(mainLayout);
+ setWindowTitle(tr("Simple Address Book"));
+}
+
+void AddressBook::addContact()
+{
+ oldName = nameLine->text();
+ oldAddress = addressText->toPlainText();
+
+ nameLine->clear();
+ addressText->clear();
+
+ nameLine->setReadOnly(false);
+ nameLine->setFocus(Qt::OtherFocusReason);
+ addressText->setReadOnly(false);
+
+ addButton->setEnabled(false);
+//! [disabling navigation]
+ nextButton->setEnabled(false);
+ previousButton->setEnabled(false);
+//! [disabling navigation]
+ submitButton->show();
+ cancelButton->show();
+}
+
+void AddressBook::submitContact()
+{
+ QString name = nameLine->text();
+ QString address = addressText->toPlainText();
+
+ if (name.isEmpty() || address.isEmpty()) {
+ QMessageBox::information(this, tr("Empty Field"),
+ tr("Please enter a name and address."));
+ return;
+ }
+
+ if (!contacts.contains(name)) {
+ contacts.insert(name, address);
+ QMessageBox::information(this, tr("Add Successful"),
+ tr("\"%1\" has been added to your address book.").arg(name));
+ } else {
+ QMessageBox::information(this, tr("Add Unsuccessful"),
+ tr("Sorry, \"%1\" is already in your address book.").arg(name));
+ }
+
+ if (contacts.isEmpty()) {
+ nameLine->clear();
+ addressText->clear();
+ }
+
+ nameLine->setReadOnly(true);
+ addressText->setReadOnly(true);
+ addButton->setEnabled(true);
+
+//! [enabling navigation]
+ int number = contacts.size();
+ nextButton->setEnabled(number > 1);
+ previousButton->setEnabled(number > 1);
+//! [enabling navigation]
+ submitButton->hide();
+ cancelButton->hide();
+}
+
+void AddressBook::cancel()
+{
+ nameLine->setText(oldName);
+ addressText->setText(oldAddress);
+
+ if (contacts.isEmpty()) {
+ nameLine->clear();
+ addressText->clear();
+ }
+
+ nameLine->setReadOnly(true);
+ addressText->setReadOnly(true);
+ addButton->setEnabled(true);
+
+ int number = contacts.size();
+ nextButton->setEnabled(number > 1);
+ previousButton->setEnabled(number > 1);
+
+ submitButton->hide();
+ cancelButton->hide();
+}
+
+//! [next() function]
+void AddressBook::next()
+{
+ QString name = nameLine->text();
+ QMap<QString, QString>::iterator i = contacts.find(name);
+
+ if (i != contacts.end())
+ i++;
+
+ if (i == contacts.end())
+ i = contacts.begin();
+
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+}
+//! [next() function]
+//! [previous() function]
+void AddressBook::previous()
+{
+ QString name = nameLine->text();
+ QMap<QString, QString>::iterator i = contacts.find(name);
+
+ if (i == contacts.end()){
+ nameLine->clear();
+ addressText->clear();
+ return;
+ }
+
+ if (i == contacts.begin())
+ i = contacts.end();
+
+ i--;
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+}
+//! [previous() function]
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.h b/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.h
new file mode 100644
index 0000000000..0e3aea1e05
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part3/addressbook.h
@@ -0,0 +1,49 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+
+QT_BEGIN_NAMESPACE
+class QLabel;
+class QLineEdit;
+class QPushButton;
+class QTextEdit;
+QT_END_NAMESPACE
+
+class AddressBook : public QWidget
+{
+ Q_OBJECT
+
+public:
+ AddressBook(QWidget *parent = nullptr);
+
+public slots:
+ void addContact();
+ void submitContact();
+ void cancel();
+//! [navigation functions]
+ void next();
+ void previous();
+//! [navigation functions]
+
+private:
+ QPushButton *addButton;
+ QPushButton *submitButton;
+ QPushButton *cancelButton;
+//! [navigation pushbuttons]
+ QPushButton *nextButton;
+ QPushButton *previousButton;
+//! [navigation pushbuttons]
+ QLineEdit *nameLine;
+ QTextEdit *addressText;
+
+ QMap<QString, QString> contacts;
+ QString oldName;
+ QString oldAddress;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part3/main.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part3/main.cpp
new file mode 100644
index 0000000000..1f3aac3397
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part3/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ AddressBook addressBook;
+ addressBook.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part3/part3.pro b/tests/manual/examples/widgets/tutorials/addressbook/part3/part3.pro
new file mode 100644
index 0000000000..3bacdd9501
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part3/part3.pro
@@ -0,0 +1,11 @@
+QT += widgets
+
+SOURCES = addressbook.cpp \
+ main.cpp
+HEADERS = addressbook.h
+
+QMAKE_PROJECT_NAME = ab_part3
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tutorials/addressbook/part3
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part4/CMakeLists.txt b/tests/manual/examples/widgets/tutorials/addressbook/part4/CMakeLists.txt
new file mode 100644
index 0000000000..eb136dbf10
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part4/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(part4 LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tutorials/addressbook/part4")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(part4
+ addressbook.cpp addressbook.h
+ main.cpp
+)
+
+set_target_properties(part4 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(part4 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS part4
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part4/addressbook.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part4/addressbook.cpp
new file mode 100644
index 0000000000..a54a888073
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part4/addressbook.cpp
@@ -0,0 +1,258 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+ : QWidget(parent)
+{
+ QLabel *nameLabel = new QLabel(tr("Name:"));
+ nameLine = new QLineEdit;
+ nameLine->setReadOnly(true);
+
+ QLabel *addressLabel = new QLabel(tr("Address:"));
+ addressText = new QTextEdit;
+ addressText->setReadOnly(true);
+
+ addButton = new QPushButton(tr("&Add"));
+//! [edit and remove buttons]
+ editButton = new QPushButton(tr("&Edit"));
+ editButton->setEnabled(false);
+ removeButton = new QPushButton(tr("&Remove"));
+ removeButton->setEnabled(false);
+//! [edit and remove buttons]
+ submitButton = new QPushButton(tr("&Submit"));
+ submitButton->hide();
+ cancelButton = new QPushButton(tr("&Cancel"));
+ cancelButton->hide();
+
+ nextButton = new QPushButton(tr("&Next"));
+ nextButton->setEnabled(false);
+ previousButton = new QPushButton(tr("&Previous"));
+ previousButton->setEnabled(false);
+
+ connect(addButton, &QPushButton::clicked,
+ this, &AddressBook::addContact);
+ connect(submitButton, &QPushButton::clicked,
+ this, &AddressBook::submitContact);
+//! [connecting edit and remove]
+ connect(editButton, &QPushButton::clicked,
+ this, &AddressBook::editContact);
+ connect(removeButton, &QPushButton::clicked,
+ this, &AddressBook::removeContact);
+//! [connecting edit and remove]
+ connect(cancelButton, &QPushButton::clicked,
+ this, &AddressBook::cancel);
+ connect(nextButton, &QPushButton::clicked,
+ this, &AddressBook::next);
+ connect(previousButton, &QPushButton::clicked,
+ this, &AddressBook::previous);
+
+ QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+ buttonLayout1->addWidget(addButton);
+//! [adding edit and remove to the layout]
+ buttonLayout1->addWidget(editButton);
+ buttonLayout1->addWidget(removeButton);
+//! [adding edit and remove to the layout]
+ buttonLayout1->addWidget(submitButton);
+ buttonLayout1->addWidget(cancelButton);
+ buttonLayout1->addStretch();
+
+ QHBoxLayout *buttonLayout2 = new QHBoxLayout;
+ buttonLayout2->addWidget(previousButton);
+ buttonLayout2->addWidget(nextButton);
+
+ QGridLayout *mainLayout = new QGridLayout;
+ mainLayout->addWidget(nameLabel, 0, 0);
+ mainLayout->addWidget(nameLine, 0, 1);
+ mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+ mainLayout->addWidget(addressText, 1, 1);
+ mainLayout->addLayout(buttonLayout1, 1, 2);
+ mainLayout->addLayout(buttonLayout2, 2, 1);
+
+ setLayout(mainLayout);
+ setWindowTitle(tr("Simple Address Book"));
+}
+
+void AddressBook::addContact()
+{
+ oldName = nameLine->text();
+ oldAddress = addressText->toPlainText();
+
+ nameLine->clear();
+ addressText->clear();
+
+ updateInterface(AddingMode);
+}
+//! [editContact() function]
+void AddressBook::editContact()
+{
+ oldName = nameLine->text();
+ oldAddress = addressText->toPlainText();
+
+ updateInterface(EditingMode);
+}
+//! [editContact() function]
+//! [submitContact() function beginning]
+void AddressBook::submitContact()
+{
+//! [submitContact() function beginning]
+ QString name = nameLine->text();
+ QString address = addressText->toPlainText();
+
+ if (name.isEmpty() || address.isEmpty()) {
+ QMessageBox::information(this, tr("Empty Field"),
+ tr("Please enter a name and address."));
+ return;
+ }
+//! [submitContact() function part1]
+ if (currentMode == AddingMode) {
+
+ if (!contacts.contains(name)) {
+ contacts.insert(name, address);
+ QMessageBox::information(this, tr("Add Successful"),
+ tr("\"%1\" has been added to your address book.").arg(name));
+ } else {
+ QMessageBox::information(this, tr("Add Unsuccessful"),
+ tr("Sorry, \"%1\" is already in your address book.").arg(name));
+ }
+//! [submitContact() function part1]
+//! [submitContact() function part2]
+ } else if (currentMode == EditingMode) {
+
+ if (oldName != name) {
+ if (!contacts.contains(name)) {
+ QMessageBox::information(this, tr("Edit Successful"),
+ tr("\"%1\" has been edited in your address book.").arg(oldName));
+ contacts.remove(oldName);
+ contacts.insert(name, address);
+ } else {
+ QMessageBox::information(this, tr("Edit Unsuccessful"),
+ tr("Sorry, \"%1\" is already in your address book.").arg(name));
+ }
+ } else if (oldAddress != address) {
+ QMessageBox::information(this, tr("Edit Successful"),
+ tr("\"%1\" has been edited in your address book.").arg(name));
+ contacts[name] = address;
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+//! [submitContact() function part2]
+
+void AddressBook::cancel()
+{
+ nameLine->setText(oldName);
+ addressText->setText(oldAddress);
+ updateInterface(NavigationMode);
+}
+//! [removeContact() function]
+void AddressBook::removeContact()
+{
+ QString name = nameLine->text();
+ QString address = addressText->toPlainText();
+
+ if (contacts.contains(name)) {
+
+ int button = QMessageBox::question(this,
+ tr("Confirm Remove"),
+ tr("Are you sure you want to remove \"%1\"?").arg(name),
+ QMessageBox::Yes | QMessageBox::No);
+
+ if (button == QMessageBox::Yes) {
+
+ previous();
+ contacts.remove(name);
+
+ QMessageBox::information(this, tr("Remove Successful"),
+ tr("\"%1\" has been removed from your address book.").arg(name));
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+//! [removeContact() function]
+void AddressBook::next()
+{
+ QString name = nameLine->text();
+ QMap<QString, QString>::iterator i = contacts.find(name);
+
+ if (i != contacts.end())
+ i++;
+
+ if (i == contacts.end())
+ i = contacts.begin();
+
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+}
+
+void AddressBook::previous()
+{
+ QString name = nameLine->text();
+ QMap<QString, QString>::iterator i = contacts.find(name);
+
+ if (i == contacts.end()) {
+ nameLine->clear();
+ addressText->clear();
+ return;
+ }
+
+ if (i == contacts.begin())
+ i = contacts.end();
+
+ i--;
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+}
+//! [update interface() part 1]
+void AddressBook::updateInterface(Mode mode)
+{
+ currentMode = mode;
+
+ switch (currentMode) {
+
+ case AddingMode:
+ case EditingMode:
+
+ nameLine->setReadOnly(false);
+ nameLine->setFocus(Qt::OtherFocusReason);
+ addressText->setReadOnly(false);
+
+ addButton->setEnabled(false);
+ editButton->setEnabled(false);
+ removeButton->setEnabled(false);
+
+ nextButton->setEnabled(false);
+ previousButton->setEnabled(false);
+
+ submitButton->show();
+ cancelButton->show();
+ break;
+//! [update interface() part 1]
+//! [update interface() part 2]
+ case NavigationMode:
+
+ if (contacts.isEmpty()) {
+ nameLine->clear();
+ addressText->clear();
+ }
+
+ nameLine->setReadOnly(true);
+ addressText->setReadOnly(true);
+ addButton->setEnabled(true);
+
+ int number = contacts.size();
+ editButton->setEnabled(number >= 1);
+ removeButton->setEnabled(number >= 1);
+ nextButton->setEnabled(number > 1);
+ previousButton->setEnabled(number >1 );
+
+ submitButton->hide();
+ cancelButton->hide();
+ break;
+ }
+}
+//! [update interface() part 2]
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part4/addressbook.h b/tests/manual/examples/widgets/tutorials/addressbook/part4/addressbook.h
new file mode 100644
index 0000000000..e77bbd3961
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part4/addressbook.h
@@ -0,0 +1,62 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+
+QT_BEGIN_NAMESPACE
+class QPushButton;
+class QLabel;
+class QLineEdit;
+class QTextEdit;
+QT_END_NAMESPACE
+
+class AddressBook : public QWidget
+{
+ Q_OBJECT
+
+public:
+ AddressBook(QWidget *parent = nullptr);
+//! [Mode enum]
+ enum Mode { NavigationMode, AddingMode, EditingMode };
+//! [Mode enum]
+
+public slots:
+ void addContact();
+ void submitContact();
+ void cancel();
+//! [edit and remove slots]
+ void editContact();
+ void removeContact();
+//! [edit and remove slots]
+ void next();
+ void previous();
+
+private:
+//! [updateInterface() declaration]
+ void updateInterface(Mode mode);
+//! [updateInterface() declaration]
+ QPushButton *addButton;
+//! [buttons declaration]
+ QPushButton *editButton;
+ QPushButton *removeButton;
+//! [buttons declaration]
+ QPushButton *submitButton;
+ QPushButton *cancelButton;
+ QPushButton *nextButton;
+ QPushButton *previousButton;
+ QLineEdit *nameLine;
+ QTextEdit *addressText;
+
+ QMap<QString, QString> contacts;
+ QString oldName;
+ QString oldAddress;
+//! [mode declaration]
+ Mode currentMode;
+//! [mode declaration]
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part4/main.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part4/main.cpp
new file mode 100644
index 0000000000..1f3aac3397
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part4/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ AddressBook addressBook;
+ addressBook.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part4/part4.pro b/tests/manual/examples/widgets/tutorials/addressbook/part4/part4.pro
new file mode 100644
index 0000000000..02cc5b8e07
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part4/part4.pro
@@ -0,0 +1,11 @@
+QT += widgets
+
+SOURCES = addressbook.cpp \
+ main.cpp
+HEADERS = addressbook.h
+
+QMAKE_PROJECT_NAME = ab_part4
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tutorials/addressbook/part4
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part5/CMakeLists.txt b/tests/manual/examples/widgets/tutorials/addressbook/part5/CMakeLists.txt
new file mode 100644
index 0000000000..4c6ec27fae
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part5/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(part5 LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tutorials/addressbook/part5")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(part5
+ addressbook.cpp addressbook.h
+ finddialog.cpp finddialog.h
+ main.cpp
+)
+
+set_target_properties(part5 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(part5 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS part5
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part5/addressbook.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part5/addressbook.cpp
new file mode 100644
index 0000000000..52aa5a0b28
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part5/addressbook.cpp
@@ -0,0 +1,283 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+ : QWidget(parent)
+{
+ QLabel *nameLabel = new QLabel(tr("Name:"));
+ nameLine = new QLineEdit;
+ nameLine->setReadOnly(true);
+
+ QLabel *addressLabel = new QLabel(tr("Address:"));
+ addressText = new QTextEdit;
+ addressText->setReadOnly(true);
+
+ addButton = new QPushButton(tr("&Add"));
+
+ editButton = new QPushButton(tr("&Edit"));
+ editButton->setEnabled(false);
+ removeButton = new QPushButton(tr("&Remove"));
+ removeButton->setEnabled(false);
+//! [instantiating findButton]
+ findButton = new QPushButton(tr("&Find"));
+ findButton->setEnabled(false);
+//! [instantiating findButton]
+ submitButton = new QPushButton(tr("&Submit"));
+ submitButton->hide();
+ cancelButton = new QPushButton(tr("&Cancel"));
+ cancelButton->hide();
+
+ nextButton = new QPushButton(tr("&Next"));
+ nextButton->setEnabled(false);
+ previousButton = new QPushButton(tr("&Previous"));
+ previousButton->setEnabled(false);
+
+//! [instantiating FindDialog]
+ dialog = new FindDialog(this);
+//! [instantiating FindDialog]
+
+ connect(addButton, &QPushButton::clicked,
+ this, &AddressBook::addContact);
+ connect(submitButton, &QPushButton::clicked,
+ this, &AddressBook::submitContact);
+ connect(editButton, &QPushButton::clicked,
+ this, &AddressBook::editContact);
+ connect(removeButton, &QPushButton::clicked,
+ this, &AddressBook::removeContact);
+ connect(cancelButton, &QPushButton::clicked,
+ this, &AddressBook::cancel);
+//! [signals and slots for find]
+ connect(findButton, &QPushButton::clicked,
+ this, &AddressBook::findContact);
+//! [signals and slots for find]
+ connect(nextButton, &QPushButton::clicked,
+ this, &AddressBook::next);
+ connect(previousButton, &QPushButton::clicked,
+ this, &AddressBook::previous);
+
+ QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+ buttonLayout1->addWidget(addButton);
+ buttonLayout1->addWidget(editButton);
+ buttonLayout1->addWidget(removeButton);
+//! [adding findButton to layout]
+ buttonLayout1->addWidget(findButton);
+//! [adding findButton to layout]
+ buttonLayout1->addWidget(submitButton);
+ buttonLayout1->addWidget(cancelButton);
+ buttonLayout1->addStretch();
+
+ QHBoxLayout *buttonLayout2 = new QHBoxLayout;
+ buttonLayout2->addWidget(previousButton);
+ buttonLayout2->addWidget(nextButton);
+
+ QGridLayout *mainLayout = new QGridLayout;
+ mainLayout->addWidget(nameLabel, 0, 0);
+ mainLayout->addWidget(nameLine, 0, 1);
+ mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+ mainLayout->addWidget(addressText, 1, 1);
+ mainLayout->addLayout(buttonLayout1, 1, 2);
+ mainLayout->addLayout(buttonLayout2, 2, 1);
+
+ setLayout(mainLayout);
+ setWindowTitle(tr("Simple Address Book"));
+}
+
+void AddressBook::addContact()
+{
+ oldName = nameLine->text();
+ oldAddress = addressText->toPlainText();
+
+ nameLine->clear();
+ addressText->clear();
+
+ updateInterface(AddingMode);
+}
+
+void AddressBook::editContact()
+{
+ oldName = nameLine->text();
+ oldAddress = addressText->toPlainText();
+
+ updateInterface(EditingMode);
+}
+
+void AddressBook::submitContact()
+{
+ QString name = nameLine->text();
+ QString address = addressText->toPlainText();
+
+ if (name.isEmpty() || address.isEmpty()) {
+ QMessageBox::information(this, tr("Empty Field"),
+ tr("Please enter a name and address."));
+ return;
+ }
+
+ if (currentMode == AddingMode) {
+
+ if (!contacts.contains(name)) {
+ contacts.insert(name, address);
+ QMessageBox::information(this, tr("Add Successful"),
+ tr("\"%1\" has been added to your address book.").arg(name));
+ } else {
+ QMessageBox::information(this, tr("Add Unsuccessful"),
+ tr("Sorry, \"%1\" is already in your address book.").arg(name));
+ }
+ } else if (currentMode == EditingMode) {
+
+ if (oldName != name) {
+ if (!contacts.contains(name)) {
+ QMessageBox::information(this, tr("Edit Successful"),
+ tr("\"%1\" has been edited in your address book.").arg(oldName));
+ contacts.remove(oldName);
+ contacts.insert(name, address);
+ } else {
+ QMessageBox::information(this, tr("Edit Unsuccessful"),
+ tr("Sorry, \"%1\" is already in your address book.").arg(name));
+ }
+ } else if (oldAddress != address) {
+ QMessageBox::information(this, tr("Edit Successful"),
+ tr("\"%1\" has been edited in your address book.").arg(name));
+ contacts[name] = address;
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+
+void AddressBook::cancel()
+{
+ nameLine->setText(oldName);
+ addressText->setText(oldAddress);
+ updateInterface(NavigationMode);
+}
+
+void AddressBook::removeContact()
+{
+ QString name = nameLine->text();
+ QString address = addressText->toPlainText();
+
+ if (contacts.contains(name)) {
+
+ int button = QMessageBox::question(this,
+ tr("Confirm Remove"),
+ tr("Are you sure you want to remove \"%1\"?").arg(name),
+ QMessageBox::Yes | QMessageBox::No);
+
+ if (button == QMessageBox::Yes) {
+
+ previous();
+ contacts.remove(name);
+
+ QMessageBox::information(this, tr("Remove Successful"),
+ tr("\"%1\" has been removed from your address book.").arg(name));
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+
+void AddressBook::next()
+{
+ QString name = nameLine->text();
+ QMap<QString, QString>::iterator i = contacts.find(name);
+
+ if (i != contacts.end())
+ i++;
+
+ if (i == contacts.end())
+ i = contacts.begin();
+
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+}
+
+void AddressBook::previous()
+{
+ QString name = nameLine->text();
+ QMap<QString, QString>::iterator i = contacts.find(name);
+
+ if (i == contacts.end()) {
+ nameLine->clear();
+ addressText->clear();
+ return;
+ }
+
+ if (i == contacts.begin())
+ i = contacts.end();
+
+ i--;
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+}
+//! [findContact() function]
+void AddressBook::findContact()
+{
+ dialog->show();
+
+ if (dialog->exec() == QDialog::Accepted) {
+ QString contactName = dialog->getFindText();
+
+ if (contacts.contains(contactName)) {
+ nameLine->setText(contactName);
+ addressText->setText(contacts.value(contactName));
+ } else {
+ QMessageBox::information(this, tr("Contact Not Found"),
+ tr("Sorry, \"%1\" is not in your address book.").arg(contactName));
+ return;
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+//! [findContact() function]
+
+void AddressBook::updateInterface(Mode mode)
+{
+ currentMode = mode;
+
+ switch (currentMode) {
+
+ case AddingMode:
+ case EditingMode:
+
+ nameLine->setReadOnly(false);
+ nameLine->setFocus(Qt::OtherFocusReason);
+ addressText->setReadOnly(false);
+
+ addButton->setEnabled(false);
+ editButton->setEnabled(false);
+ removeButton->setEnabled(false);
+
+ nextButton->setEnabled(false);
+ previousButton->setEnabled(false);
+
+ submitButton->show();
+ cancelButton->show();
+ break;
+
+ case NavigationMode:
+
+ if (contacts.isEmpty()) {
+ nameLine->clear();
+ addressText->clear();
+ }
+
+ nameLine->setReadOnly(true);
+ addressText->setReadOnly(true);
+ addButton->setEnabled(true);
+
+ int number = contacts.size();
+ editButton->setEnabled(number >= 1);
+ removeButton->setEnabled(number >= 1);
+ findButton->setEnabled(number > 2);
+ nextButton->setEnabled(number > 1);
+ previousButton->setEnabled(number > 1);
+
+ submitButton->hide();
+ cancelButton->hide();
+ break;
+ }
+}
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part5/addressbook.h b/tests/manual/examples/widgets/tutorials/addressbook/part5/addressbook.h
new file mode 100644
index 0000000000..93da08038c
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part5/addressbook.h
@@ -0,0 +1,65 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+//! [include finddialog's header]
+#include "finddialog.h"
+//! [include finddialog's header]
+QT_BEGIN_NAMESPACE
+class QPushButton;
+class QLabel;
+class QLineEdit;
+class QTextEdit;
+QT_END_NAMESPACE
+
+
+class AddressBook : public QWidget
+{
+ Q_OBJECT
+
+public:
+ AddressBook(QWidget *parent = nullptr);
+ enum Mode { NavigationMode, AddingMode, EditingMode };
+
+public slots:
+ void addContact();
+ void editContact();
+ void submitContact();
+ void cancel();
+ void removeContact();
+//! [findContact() declaration]
+ void findContact();
+//! [findContact() declaration]
+ void next();
+ void previous();
+
+private:
+ void updateInterface(Mode mode);
+
+ QPushButton *addButton;
+ QPushButton *editButton;
+ QPushButton *removeButton;
+//! [findButton declaration]
+ QPushButton *findButton;
+//! [findButton declaration]
+ QPushButton *submitButton;
+ QPushButton *cancelButton;
+ QPushButton *nextButton;
+ QPushButton *previousButton;
+ QLineEdit *nameLine;
+ QTextEdit *addressText;
+
+ QMap<QString, QString> contacts;
+//! [FindDialog declaration]
+ FindDialog *dialog;
+//! [FindDialog declaration]
+ QString oldName;
+ QString oldAddress;
+ Mode currentMode;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part5/finddialog.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part5/finddialog.cpp
new file mode 100644
index 0000000000..d5daa661d0
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part5/finddialog.cpp
@@ -0,0 +1,51 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "finddialog.h"
+
+//! [constructor]
+FindDialog::FindDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ QLabel *findLabel = new QLabel(tr("Enter the name of a contact:"));
+ lineEdit = new QLineEdit;
+
+ findButton = new QPushButton(tr("&Find"));
+ findText = "";
+
+ QHBoxLayout *layout = new QHBoxLayout;
+ layout->addWidget(findLabel);
+ layout->addWidget(lineEdit);
+ layout->addWidget(findButton);
+
+ setLayout(layout);
+ setWindowTitle(tr("Find a Contact"));
+ connect(findButton, &QPushButton::clicked,
+ this, &FindDialog::findClicked);
+ connect(findButton, &QPushButton::clicked,
+ this, &FindDialog::accept);
+}
+//! [constructor]
+//! [findClicked() function]
+void FindDialog::findClicked()
+{
+ QString text = lineEdit->text();
+
+ if (text.isEmpty()) {
+ QMessageBox::information(this, tr("Empty Field"),
+ tr("Please enter a name."));
+ return;
+ } else {
+ findText = text;
+ lineEdit->clear();
+ hide();
+ }
+}
+//! [findClicked() function]
+//! [getFindText() function]
+QString FindDialog::getFindText()
+{
+ return findText;
+}
+//! [getFindText() function]
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part5/finddialog.h b/tests/manual/examples/widgets/tutorials/addressbook/part5/finddialog.h
new file mode 100644
index 0000000000..7cedcffa60
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part5/finddialog.h
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef FINDDIALOG_H
+#define FINDDIALOG_H
+//! [FindDialog header]
+#include <QDialog>
+
+QT_BEGIN_NAMESPACE
+class QLineEdit;
+class QPushButton;
+QT_END_NAMESPACE
+
+class FindDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ FindDialog(QWidget *parent = nullptr);
+ QString getFindText();
+
+public slots:
+ void findClicked();
+
+private:
+ QPushButton *findButton;
+ QLineEdit *lineEdit;
+ QString findText;
+};
+//! [FindDialog header]
+#endif
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part5/main.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part5/main.cpp
new file mode 100644
index 0000000000..1f3aac3397
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part5/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ AddressBook addressBook;
+ addressBook.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part5/part5.pro b/tests/manual/examples/widgets/tutorials/addressbook/part5/part5.pro
new file mode 100644
index 0000000000..da5469f655
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part5/part5.pro
@@ -0,0 +1,13 @@
+QT += widgets
+
+SOURCES = addressbook.cpp \
+ finddialog.cpp \
+ main.cpp
+HEADERS = addressbook.h \
+ finddialog.h
+
+QMAKE_PROJECT_NAME = ab_part5
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tutorials/addressbook/part5
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part6/CMakeLists.txt b/tests/manual/examples/widgets/tutorials/addressbook/part6/CMakeLists.txt
new file mode 100644
index 0000000000..007e0c5171
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part6/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(part6 LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tutorials/addressbook/part6")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(part6
+ addressbook.cpp addressbook.h
+ finddialog.cpp finddialog.h
+ main.cpp
+)
+
+set_target_properties(part6 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(part6 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS part6
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part6/addressbook.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part6/addressbook.cpp
new file mode 100644
index 0000000000..455ccc899a
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part6/addressbook.cpp
@@ -0,0 +1,366 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+ : QWidget(parent)
+{
+ QLabel *nameLabel = new QLabel(tr("Name:"));
+ nameLine = new QLineEdit;
+ nameLine->setReadOnly(true);
+
+ QLabel *addressLabel = new QLabel(tr("Address:"));
+ addressText = new QTextEdit;
+ addressText->setReadOnly(true);
+
+ addButton = new QPushButton(tr("&Add"));
+
+ editButton = new QPushButton(tr("&Edit"));
+ editButton->setEnabled(false);
+ removeButton = new QPushButton(tr("&Remove"));
+ removeButton->setEnabled(false);
+ findButton = new QPushButton(tr("&Find"));
+ findButton->setEnabled(false);
+ submitButton = new QPushButton(tr("&Submit"));
+ submitButton->hide();
+ cancelButton = new QPushButton(tr("&Cancel"));
+ cancelButton->hide();
+
+ nextButton = new QPushButton(tr("&Next"));
+ nextButton->setEnabled(false);
+ previousButton = new QPushButton(tr("&Previous"));
+ previousButton->setEnabled(false);
+
+ loadButton = new QPushButton(tr("&Load..."));
+//! [tooltip 1]
+ loadButton->setToolTip(tr("Load contacts from a file"));
+//! [tooltip 1]
+ saveButton = new QPushButton(tr("&Save..."));
+//! [tooltip 2]
+ saveButton->setToolTip(tr("Save contacts to a file"));
+//! [tooltip 2]
+ saveButton->setEnabled(false);
+
+ dialog = new FindDialog(this);
+
+ connect(addButton, &QPushButton::clicked,
+ this, &AddressBook::addContact);
+ connect(submitButton, &QPushButton::clicked,
+ this, &AddressBook::submitContact);
+ connect(editButton, &QPushButton::clicked,
+ this, &AddressBook::editContact);
+ connect(removeButton, &QPushButton::clicked,
+ this, &AddressBook::removeContact);
+ connect(cancelButton, &QPushButton::clicked,
+ this, &AddressBook::cancel);
+ connect(findButton, &QPushButton::clicked,
+ this, &AddressBook::findContact);
+ connect(nextButton, &QPushButton::clicked,
+ this, &AddressBook::next);
+ connect(previousButton, &QPushButton::clicked,
+ this, &AddressBook::previous);
+ connect(loadButton, &QPushButton::clicked,
+ this, &AddressBook::loadFromFile);
+ connect(saveButton, &QPushButton::clicked,
+ this, &AddressBook::saveToFile);
+
+ QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+ buttonLayout1->addWidget(addButton);
+ buttonLayout1->addWidget(editButton);
+ buttonLayout1->addWidget(removeButton);
+ buttonLayout1->addWidget(findButton);
+ buttonLayout1->addWidget(submitButton);
+ buttonLayout1->addWidget(cancelButton);
+ buttonLayout1->addWidget(loadButton);
+ buttonLayout1->addWidget(saveButton);
+ buttonLayout1->addStretch();
+
+ QHBoxLayout *buttonLayout2 = new QHBoxLayout;
+ buttonLayout2->addWidget(previousButton);
+ buttonLayout2->addWidget(nextButton);
+
+ QGridLayout *mainLayout = new QGridLayout;
+ mainLayout->addWidget(nameLabel, 0, 0);
+ mainLayout->addWidget(nameLine, 0, 1);
+ mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+ mainLayout->addWidget(addressText, 1, 1);
+ mainLayout->addLayout(buttonLayout1, 1, 2);
+ mainLayout->addLayout(buttonLayout2, 2, 1);
+
+ setLayout(mainLayout);
+ setWindowTitle(tr("Simple Address Book"));
+}
+
+void AddressBook::addContact()
+{
+ oldName = nameLine->text();
+ oldAddress = addressText->toPlainText();
+
+ nameLine->clear();
+ addressText->clear();
+
+ updateInterface(AddingMode);
+}
+
+void AddressBook::editContact()
+{
+ oldName = nameLine->text();
+ oldAddress = addressText->toPlainText();
+
+ updateInterface(EditingMode);
+}
+
+void AddressBook::submitContact()
+{
+ QString name = nameLine->text();
+ QString address = addressText->toPlainText();
+
+ if (name.isEmpty() || address.isEmpty()) {
+ QMessageBox::information(this, tr("Empty Field"),
+ tr("Please enter a name and address."));
+ return;
+ }
+
+ if (currentMode == AddingMode) {
+
+ if (!contacts.contains(name)) {
+ contacts.insert(name, address);
+ QMessageBox::information(this, tr("Add Successful"),
+ tr("\"%1\" has been added to your address book.").arg(name));
+ } else {
+ QMessageBox::information(this, tr("Add Unsuccessful"),
+ tr("Sorry, \"%1\" is already in your address book.").arg(name));
+ }
+ } else if (currentMode == EditingMode) {
+
+ if (oldName != name) {
+ if (!contacts.contains(name)) {
+ QMessageBox::information(this, tr("Edit Successful"),
+ tr("\"%1\" has been edited in your address book.").arg(oldName));
+ contacts.remove(oldName);
+ contacts.insert(name, address);
+ } else {
+ QMessageBox::information(this, tr("Edit Unsuccessful"),
+ tr("Sorry, \"%1\" is already in your address book.").arg(name));
+ }
+ } else if (oldAddress != address) {
+ QMessageBox::information(this, tr("Edit Successful"),
+ tr("\"%1\" has been edited in your address book.").arg(name));
+ contacts[name] = address;
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+
+void AddressBook::cancel()
+{
+ nameLine->setText(oldName);
+ addressText->setText(oldAddress);
+ updateInterface(NavigationMode);
+}
+
+void AddressBook::removeContact()
+{
+ QString name = nameLine->text();
+ QString address = addressText->toPlainText();
+
+ if (contacts.contains(name)) {
+
+ int button = QMessageBox::question(this,
+ tr("Confirm Remove"),
+ tr("Are you sure you want to remove \"%1\"?").arg(name),
+ QMessageBox::Yes | QMessageBox::No);
+
+ if (button == QMessageBox::Yes) {
+
+ previous();
+ contacts.remove(name);
+
+ QMessageBox::information(this, tr("Remove Successful"),
+ tr("\"%1\" has been removed from your address book.").arg(name));
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+
+void AddressBook::next()
+{
+ QString name = nameLine->text();
+ QMap<QString, QString>::iterator i = contacts.find(name);
+
+ if (i != contacts.end())
+ i++;
+
+ if (i == contacts.end())
+ i = contacts.begin();
+
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+}
+
+void AddressBook::previous()
+{
+ QString name = nameLine->text();
+ QMap<QString, QString>::iterator i = contacts.find(name);
+
+ if (i == contacts.end()) {
+ nameLine->clear();
+ addressText->clear();
+ return;
+ }
+
+ if (i == contacts.begin())
+ i = contacts.end();
+
+ i--;
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+}
+
+void AddressBook::findContact()
+{
+ dialog->show();
+
+ if (dialog->exec() == 1) {
+ QString contactName = dialog->getFindText();
+
+ if (contacts.contains(contactName)) {
+ nameLine->setText(contactName);
+ addressText->setText(contacts.value(contactName));
+ } else {
+ QMessageBox::information(this, tr("Contact Not Found"),
+ tr("Sorry, \"%1\" is not in your address book.").arg(contactName));
+ return;
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+
+void AddressBook::updateInterface(Mode mode)
+{
+ currentMode = mode;
+
+ switch (currentMode) {
+
+ case AddingMode:
+ case EditingMode:
+
+ nameLine->setReadOnly(false);
+ nameLine->setFocus(Qt::OtherFocusReason);
+ addressText->setReadOnly(false);
+
+ addButton->setEnabled(false);
+ editButton->setEnabled(false);
+ removeButton->setEnabled(false);
+
+ nextButton->setEnabled(false);
+ previousButton->setEnabled(false);
+
+ submitButton->show();
+ cancelButton->show();
+
+ loadButton->setEnabled(false);
+ saveButton->setEnabled(false);
+ break;
+
+ case NavigationMode:
+
+ if (contacts.isEmpty()) {
+ nameLine->clear();
+ addressText->clear();
+ }
+
+ nameLine->setReadOnly(true);
+ addressText->setReadOnly(true);
+ addButton->setEnabled(true);
+
+ int number = contacts.size();
+ editButton->setEnabled(number >= 1);
+ removeButton->setEnabled(number >= 1);
+ findButton->setEnabled(number > 2);
+ nextButton->setEnabled(number > 1);
+ previousButton->setEnabled(number > 1);
+
+ submitButton->hide();
+ cancelButton->hide();
+
+ loadButton->setEnabled(true);
+ saveButton->setEnabled(number >= 1);
+ break;
+ }
+}
+
+//! [saveToFile() function part1]
+void AddressBook::saveToFile()
+{
+ QString fileName = QFileDialog::getSaveFileName(this,
+ tr("Save Address Book"), "",
+ tr("Address Book (*.abk);;All Files (*)"));
+
+//! [saveToFile() function part1]
+//! [saveToFile() function part2]
+ if (fileName.isEmpty())
+ return;
+ else {
+ QFile file(fileName);
+ if (!file.open(QIODevice::WriteOnly)) {
+ QMessageBox::information(this, tr("Unable to open file"),
+ file.errorString());
+ return;
+ }
+
+//! [saveToFile() function part2]
+//! [saveToFile() function part3]
+ QDataStream out(&file);
+ out.setVersion(QDataStream::Qt_4_5);
+ out << contacts;
+ }
+}
+//! [saveToFile() function part3]
+
+//! [loadFromFile() function part1]
+void AddressBook::loadFromFile()
+{
+ QString fileName = QFileDialog::getOpenFileName(this,
+ tr("Open Address Book"), "",
+ tr("Address Book (*.abk);;All Files (*)"));
+//! [loadFromFile() function part1]
+
+//! [loadFromFile() function part2]
+ if (fileName.isEmpty())
+ return;
+ else {
+
+ QFile file(fileName);
+
+ if (!file.open(QIODevice::ReadOnly)) {
+ QMessageBox::information(this, tr("Unable to open file"),
+ file.errorString());
+ return;
+ }
+
+ QDataStream in(&file);
+ in.setVersion(QDataStream::Qt_4_5);
+ contacts.clear(); // clear existing contacts
+ in >> contacts;
+//! [loadFromFile() function part2]
+
+//! [loadFromFile() function part3]
+ if (contacts.isEmpty()) {
+ QMessageBox::information(this, tr("No contacts in file"),
+ tr("The file you are attempting to open contains no contacts."));
+ } else {
+ QMap<QString, QString>::iterator i = contacts.begin();
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+//! [loadFromFile() function part3]
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part6/addressbook.h b/tests/manual/examples/widgets/tutorials/addressbook/part6/addressbook.h
new file mode 100644
index 0000000000..26389d7446
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part6/addressbook.h
@@ -0,0 +1,66 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+#include "finddialog.h"
+
+QT_BEGIN_NAMESPACE
+class QPushButton;
+class QLabel;
+class QLineEdit;
+class QTextEdit;
+QT_END_NAMESPACE
+
+
+class AddressBook : public QWidget
+{
+ Q_OBJECT
+
+public:
+ AddressBook(QWidget *parent = nullptr);
+ enum Mode { NavigationMode, AddingMode, EditingMode };
+
+public slots:
+ void addContact();
+ void editContact();
+ void submitContact();
+ void cancel();
+ void removeContact();
+ void findContact();
+ void next();
+ void previous();
+//! [save and load functions declaration]
+ void saveToFile();
+ void loadFromFile();
+//! [save and load functions declaration]
+
+private:
+ void updateInterface(Mode mode);
+
+ QPushButton *addButton;
+ QPushButton *editButton;
+ QPushButton *removeButton;
+ QPushButton *findButton;
+ QPushButton *submitButton;
+ QPushButton *cancelButton;
+ QPushButton *nextButton;
+ QPushButton *previousButton;
+//! [save and load buttons declaration]
+ QPushButton *loadButton;
+ QPushButton *saveButton;
+//! [save and load buttons declaration]
+ QLineEdit *nameLine;
+ QTextEdit *addressText;
+
+ QMap<QString, QString> contacts;
+ FindDialog *dialog;
+ QString oldName;
+ QString oldAddress;
+ Mode currentMode;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part6/finddialog.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part6/finddialog.cpp
new file mode 100644
index 0000000000..90729d9c12
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part6/finddialog.cpp
@@ -0,0 +1,47 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "finddialog.h"
+
+FindDialog::FindDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ QLabel *findLabel = new QLabel(tr("Enter the name of a contact:"));
+ lineEdit = new QLineEdit;
+
+ findButton = new QPushButton(tr("&Find"));
+ findText = "";
+
+ QHBoxLayout *layout = new QHBoxLayout;
+ layout->addWidget(findLabel);
+ layout->addWidget(lineEdit);
+ layout->addWidget(findButton);
+
+ setLayout(layout);
+ setWindowTitle(tr("Find a Contact"));
+ connect(findButton, &QPushButton::clicked,
+ this, &FindDialog::findClicked);
+ connect(findButton, &QPushButton::clicked,
+ this, &FindDialog::accept);
+}
+
+void FindDialog::findClicked()
+{
+ QString text = lineEdit->text();
+
+ if (text.isEmpty()) {
+ QMessageBox::information(this, tr("Empty Field"),
+ tr("Please enter a name."));
+ return;
+ } else {
+ findText = text;
+ lineEdit->clear();
+ hide();
+ }
+}
+
+QString FindDialog::getFindText()
+{
+ return findText;
+}
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part6/finddialog.h b/tests/manual/examples/widgets/tutorials/addressbook/part6/finddialog.h
new file mode 100644
index 0000000000..7c9a3af30f
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part6/finddialog.h
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef FINDDIALOG_H
+#define FINDDIALOG_H
+
+#include <QDialog>
+
+QT_BEGIN_NAMESPACE
+class QLineEdit;
+class QPushButton;
+QT_END_NAMESPACE
+
+class FindDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ FindDialog(QWidget *parent = nullptr);
+ QString getFindText();
+
+public slots:
+ void findClicked();
+
+private:
+ QPushButton *findButton;
+ QLineEdit *lineEdit;
+ QString findText;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part6/main.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part6/main.cpp
new file mode 100644
index 0000000000..1f3aac3397
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part6/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ AddressBook addressBook;
+ addressBook.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part6/part6.pro b/tests/manual/examples/widgets/tutorials/addressbook/part6/part6.pro
new file mode 100644
index 0000000000..6796f30a73
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part6/part6.pro
@@ -0,0 +1,14 @@
+QT += widgets
+requires(qtConfig(filedialog))
+
+SOURCES = addressbook.cpp \
+ finddialog.cpp \
+ main.cpp
+HEADERS = addressbook.h \
+ finddialog.h
+
+QMAKE_PROJECT_NAME = ab_part6
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tutorials/addressbook/part6
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part7/CMakeLists.txt b/tests/manual/examples/widgets/tutorials/addressbook/part7/CMakeLists.txt
new file mode 100644
index 0000000000..f480e22c21
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part7/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(part7 LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/tutorials/addressbook/part7")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(part7
+ addressbook.cpp addressbook.h
+ finddialog.cpp finddialog.h
+ main.cpp
+)
+
+set_target_properties(part7 PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(part7 PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS part7
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part7/addressbook.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part7/addressbook.cpp
new file mode 100644
index 0000000000..30878d7bbc
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part7/addressbook.cpp
@@ -0,0 +1,419 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+AddressBook::AddressBook(QWidget *parent)
+ : QWidget(parent)
+{
+ QLabel *nameLabel = new QLabel(tr("Name:"));
+ nameLine = new QLineEdit;
+ nameLine->setReadOnly(true);
+
+ QLabel *addressLabel = new QLabel(tr("Address:"));
+ addressText = new QTextEdit;
+ addressText->setReadOnly(true);
+
+ addButton = new QPushButton(tr("&Add"));
+
+ editButton = new QPushButton(tr("&Edit"));
+ editButton->setEnabled(false);
+ removeButton = new QPushButton(tr("&Remove"));
+ removeButton->setEnabled(false);
+ findButton = new QPushButton(tr("&Find"));
+ findButton->setEnabled(false);
+ submitButton = new QPushButton(tr("&Submit"));
+ submitButton->hide();
+ cancelButton = new QPushButton(tr("&Cancel"));
+ cancelButton->hide();
+
+ nextButton = new QPushButton(tr("&Next"));
+ nextButton->setEnabled(false);
+ previousButton = new QPushButton(tr("&Previous"));
+ previousButton->setEnabled(false);
+
+ loadButton = new QPushButton(tr("&Load..."));
+ loadButton->setToolTip(tr("Load contacts from a file"));
+ saveButton = new QPushButton(tr("&Save..."));
+ saveButton->setToolTip(tr("Save contacts to a file"));
+ saveButton->setEnabled(false);
+
+ exportButton = new QPushButton(tr("E&xport"));
+ exportButton->setToolTip(tr("Export as vCard"));
+ exportButton->setEnabled(false);
+
+ dialog = new FindDialog(this);
+
+ connect(addButton, &QPushButton::clicked,
+ this, &AddressBook::addContact);
+ connect(submitButton, &QPushButton::clicked,
+ this, &AddressBook::submitContact);
+ connect(editButton, &QPushButton::clicked,
+ this, &AddressBook::editContact);
+ connect(removeButton, &QPushButton::clicked,
+ this, &AddressBook::removeContact);
+ connect(cancelButton, &QPushButton::clicked,
+ this, &AddressBook::cancel);
+ connect(findButton, &QPushButton::clicked,
+ this, &AddressBook::findContact);
+ connect(nextButton, &QPushButton::clicked,
+ this, &AddressBook::next);
+ connect(previousButton, &QPushButton::clicked,
+ this, &AddressBook::previous);
+ connect(loadButton, &QPushButton::clicked,
+ this, &AddressBook::loadFromFile);
+ connect(saveButton, &QPushButton::clicked,
+ this, &AddressBook::saveToFile);
+ connect(exportButton, &QPushButton::clicked,
+ this, &AddressBook::exportAsVCard);
+
+ QVBoxLayout *buttonLayout1 = new QVBoxLayout;
+ buttonLayout1->addWidget(addButton);
+ buttonLayout1->addWidget(editButton);
+ buttonLayout1->addWidget(removeButton);
+ buttonLayout1->addWidget(findButton);
+ buttonLayout1->addWidget(submitButton);
+ buttonLayout1->addWidget(cancelButton);
+ buttonLayout1->addWidget(loadButton);
+ buttonLayout1->addWidget(saveButton);
+ buttonLayout1->addWidget(exportButton);
+ buttonLayout1->addStretch();
+
+ QHBoxLayout *buttonLayout2 = new QHBoxLayout;
+ buttonLayout2->addWidget(previousButton);
+ buttonLayout2->addWidget(nextButton);
+
+ QGridLayout *mainLayout = new QGridLayout;
+ mainLayout->addWidget(nameLabel, 0, 0);
+ mainLayout->addWidget(nameLine, 0, 1);
+ mainLayout->addWidget(addressLabel, 1, 0, Qt::AlignTop);
+ mainLayout->addWidget(addressText, 1, 1);
+ mainLayout->addLayout(buttonLayout1, 1, 2);
+ mainLayout->addLayout(buttonLayout2, 2, 1);
+
+ setLayout(mainLayout);
+ setWindowTitle(tr("Simple Address Book"));
+}
+
+void AddressBook::addContact()
+{
+ oldName = nameLine->text();
+ oldAddress = addressText->toPlainText();
+
+ nameLine->clear();
+ addressText->clear();
+
+ updateInterface(AddingMode);
+}
+
+void AddressBook::editContact()
+{
+ oldName = nameLine->text();
+ oldAddress = addressText->toPlainText();
+
+ updateInterface(EditingMode);
+}
+
+void AddressBook::submitContact()
+{
+ QString name = nameLine->text();
+ QString address = addressText->toPlainText();
+
+ if (name.isEmpty() || address.isEmpty()) {
+ QMessageBox::information(this, tr("Empty Field"),
+ tr("Please enter a name and address."));
+ return;
+ }
+
+ if (currentMode == AddingMode) {
+
+ if (!contacts.contains(name)) {
+ contacts.insert(name, address);
+ QMessageBox::information(this, tr("Add Successful"),
+ tr("\"%1\" has been added to your address book.").arg(name));
+ } else {
+ QMessageBox::information(this, tr("Add Unsuccessful"),
+ tr("Sorry, \"%1\" is already in your address book.").arg(name));
+ }
+ } else if (currentMode == EditingMode) {
+
+ if (oldName != name) {
+ if (!contacts.contains(name)) {
+ QMessageBox::information(this, tr("Edit Successful"),
+ tr("\"%1\" has been edited in your address book.").arg(oldName));
+ contacts.remove(oldName);
+ contacts.insert(name, address);
+ } else {
+ QMessageBox::information(this, tr("Edit Unsuccessful"),
+ tr("Sorry, \"%1\" is already in your address book.").arg(name));
+ }
+ } else if (oldAddress != address) {
+ QMessageBox::information(this, tr("Edit Successful"),
+ tr("\"%1\" has been edited in your address book.").arg(name));
+ contacts[name] = address;
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+
+void AddressBook::cancel()
+{
+ nameLine->setText(oldName);
+ addressText->setText(oldAddress);
+ updateInterface(NavigationMode);
+}
+
+void AddressBook::removeContact()
+{
+ QString name = nameLine->text();
+ QString address = addressText->toPlainText();
+
+ if (contacts.contains(name)) {
+
+ int button = QMessageBox::question(this,
+ tr("Confirm Remove"),
+ tr("Are you sure you want to remove \"%1\"?").arg(name),
+ QMessageBox::Yes | QMessageBox::No);
+
+ if (button == QMessageBox::Yes) {
+
+ previous();
+ contacts.remove(name);
+
+ QMessageBox::information(this, tr("Remove Successful"),
+ tr("\"%1\" has been removed from your address book.").arg(name));
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+
+void AddressBook::next()
+{
+ QString name = nameLine->text();
+ QMap<QString, QString>::iterator i = contacts.find(name);
+
+ if (i != contacts.end())
+ i++;
+
+ if (i == contacts.end())
+ i = contacts.begin();
+
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+}
+
+void AddressBook::previous()
+{
+ QString name = nameLine->text();
+ QMap<QString, QString>::iterator i = contacts.find(name);
+
+ if (i == contacts.end()) {
+ nameLine->clear();
+ addressText->clear();
+ return;
+ }
+
+ if (i == contacts.begin())
+ i = contacts.end();
+
+ i--;
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+}
+
+void AddressBook::findContact()
+{
+ dialog->show();
+
+ if (dialog->exec() == 1) {
+ QString contactName = dialog->getFindText();
+
+ if (contacts.contains(contactName)) {
+ nameLine->setText(contactName);
+ addressText->setText(contacts.value(contactName));
+ } else {
+ QMessageBox::information(this, tr("Contact Not Found"),
+ tr("Sorry, \"%1\" is not in your address book.").arg(contactName));
+ return;
+ }
+ }
+
+ updateInterface(NavigationMode);
+}
+void AddressBook::updateInterface(Mode mode)
+{
+ currentMode = mode;
+
+ switch (currentMode) {
+
+ case AddingMode:
+ case EditingMode:
+
+ nameLine->setReadOnly(false);
+ nameLine->setFocus(Qt::OtherFocusReason);
+ addressText->setReadOnly(false);
+
+ addButton->setEnabled(false);
+ editButton->setEnabled(false);
+ removeButton->setEnabled(false);
+
+ nextButton->setEnabled(false);
+ previousButton->setEnabled(false);
+
+ submitButton->show();
+ cancelButton->show();
+
+ loadButton->setEnabled(false);
+ saveButton->setEnabled(false);
+ exportButton->setEnabled(false);
+ break;
+
+ case NavigationMode:
+
+ if (contacts.isEmpty()) {
+ nameLine->clear();
+ addressText->clear();
+ }
+
+ nameLine->setReadOnly(true);
+ addressText->setReadOnly(true);
+ addButton->setEnabled(true);
+
+ int number = contacts.size();
+ editButton->setEnabled(number >= 1);
+ removeButton->setEnabled(number >= 1);
+ findButton->setEnabled(number > 2);
+ nextButton->setEnabled(number > 1);
+ previousButton->setEnabled(number > 1);
+
+ submitButton->hide();
+ cancelButton->hide();
+
+ exportButton->setEnabled(number >= 1);
+
+ loadButton->setEnabled(true);
+ saveButton->setEnabled(number >= 1);
+ break;
+ }
+}
+
+void AddressBook::saveToFile()
+{
+ QString fileName = QFileDialog::getSaveFileName(this,
+ tr("Save Address Book"), "",
+ tr("Address Book (*.abk);;All Files (*)"));
+
+ if (fileName.isEmpty())
+ return;
+ else {
+ QFile file(fileName);
+
+ if (!file.open(QIODevice::WriteOnly)) {
+ QMessageBox::information(this, tr("Unable to open file"),
+ file.errorString());
+ return;
+ }
+
+ QDataStream out(&file);
+ out.setVersion(QDataStream::Qt_4_3);
+ out << contacts;
+ }
+
+ updateInterface(NavigationMode);
+}
+
+void AddressBook::loadFromFile()
+{
+ QString fileName = QFileDialog::getOpenFileName(this,
+ tr("Open Address Book"), "",
+ tr("Address Book (*.abk);;All Files (*)"));
+
+ if (fileName.isEmpty())
+ return;
+ else {
+ QFile file(fileName);
+
+ if (!file.open(QIODevice::ReadOnly)) {
+ QMessageBox::information(this, tr("Unable to open file"),
+ file.errorString());
+ return;
+ }
+
+ QDataStream in(&file);
+ in.setVersion(QDataStream::Qt_4_3);
+ in >> contacts;
+
+ QMap<QString, QString>::iterator i = contacts.begin();
+ nameLine->setText(i.key());
+ addressText->setText(i.value());
+ }
+
+ updateInterface(NavigationMode);
+}
+
+//! [export function part1]
+void AddressBook::exportAsVCard()
+{
+ QString name = nameLine->text();
+ QString address = addressText->toPlainText();
+ QString firstName;
+ QString lastName;
+ QStringList nameList;
+
+ int index = name.indexOf(" ");
+
+ if (index != -1) {
+ nameList = name.split(QRegularExpression("\\s+"), Qt::SkipEmptyParts);
+ firstName = nameList.first();
+ lastName = nameList.last();
+ } else {
+ firstName = name;
+ lastName = "";
+ }
+
+ QString fileName = QFileDialog::getSaveFileName(this,
+ tr("Export Contact"), "",
+ tr("vCard Files (*.vcf);;All Files (*)"));
+
+ if (fileName.isEmpty())
+ return;
+
+ QFile file(fileName);
+//! [export function part1]
+
+//! [export function part2]
+ if (!file.open(QIODevice::WriteOnly)) {
+ QMessageBox::information(this, tr("Unable to open file"),
+ file.errorString());
+ return;
+ }
+
+ QTextStream out(&file);
+//! [export function part2]
+
+//! [export function part3]
+ out << "BEGIN:VCARD" << '\n';
+ out << "VERSION:2.1" << '\n';
+ out << "N:" << lastName << ';' << firstName << '\n';
+
+ if (!nameList.isEmpty())
+ out << "FN:" << nameList.join(' ') << '\n';
+ else
+ out << "FN:" << firstName << '\n';
+//! [export function part3]
+
+//! [export function part4]
+ address.replace(";", "\\;", Qt::CaseInsensitive);
+ address.replace('\n', ";", Qt::CaseInsensitive);
+ address.replace(",", " ", Qt::CaseInsensitive);
+
+ out << "ADR;HOME:;" << address << '\n';
+ out << "END:VCARD" << '\n';
+
+ QMessageBox::information(this, tr("Export Successful"),
+ tr("\"%1\" has been exported as a vCard.").arg(name));
+}
+//! [export function part4]
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part7/addressbook.h b/tests/manual/examples/widgets/tutorials/addressbook/part7/addressbook.h
new file mode 100644
index 0000000000..c408a97642
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part7/addressbook.h
@@ -0,0 +1,68 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef ADDRESSBOOK_H
+#define ADDRESSBOOK_H
+
+#include <QWidget>
+#include <QMap>
+#include "finddialog.h"
+
+QT_BEGIN_NAMESPACE
+class QPushButton;
+class QLabel;
+class QLineEdit;
+class QTextEdit;
+QT_END_NAMESPACE
+
+
+class AddressBook : public QWidget
+{
+ Q_OBJECT
+
+public:
+ AddressBook(QWidget *parent = nullptr);
+ enum Mode { NavigationMode, AddingMode, EditingMode };
+
+public slots:
+ void addContact();
+ void editContact();
+ void submitContact();
+ void cancel();
+ void removeContact();
+ void findContact();
+ void next();
+ void previous();
+ void saveToFile();
+ void loadFromFile();
+//! [exportAsVCard() declaration]
+ void exportAsVCard();
+//! [exportAsVCard() declaration]
+
+private:
+ void updateInterface(Mode mode);
+
+ QPushButton *addButton;
+ QPushButton *editButton;
+ QPushButton *removeButton;
+ QPushButton *findButton;
+ QPushButton *submitButton;
+ QPushButton *cancelButton;
+ QPushButton *nextButton;
+ QPushButton *previousButton;
+ QPushButton *loadButton;
+ QPushButton *saveButton;
+//! [exportButton declaration]
+ QPushButton *exportButton;
+//! [exportButton declaration]
+ QLineEdit *nameLine;
+ QTextEdit *addressText;
+
+ QMap<QString, QString> contacts;
+ FindDialog *dialog;
+ QString oldName;
+ QString oldAddress;
+ Mode currentMode;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part7/finddialog.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part7/finddialog.cpp
new file mode 100644
index 0000000000..90729d9c12
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part7/finddialog.cpp
@@ -0,0 +1,47 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "finddialog.h"
+
+FindDialog::FindDialog(QWidget *parent)
+ : QDialog(parent)
+{
+ QLabel *findLabel = new QLabel(tr("Enter the name of a contact:"));
+ lineEdit = new QLineEdit;
+
+ findButton = new QPushButton(tr("&Find"));
+ findText = "";
+
+ QHBoxLayout *layout = new QHBoxLayout;
+ layout->addWidget(findLabel);
+ layout->addWidget(lineEdit);
+ layout->addWidget(findButton);
+
+ setLayout(layout);
+ setWindowTitle(tr("Find a Contact"));
+ connect(findButton, &QPushButton::clicked,
+ this, &FindDialog::findClicked);
+ connect(findButton, &QPushButton::clicked,
+ this, &FindDialog::accept);
+}
+
+void FindDialog::findClicked()
+{
+ QString text = lineEdit->text();
+
+ if (text.isEmpty()) {
+ QMessageBox::information(this, tr("Empty Field"),
+ tr("Please enter a name."));
+ return;
+ } else {
+ findText = text;
+ lineEdit->clear();
+ hide();
+ }
+}
+
+QString FindDialog::getFindText()
+{
+ return findText;
+}
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part7/finddialog.h b/tests/manual/examples/widgets/tutorials/addressbook/part7/finddialog.h
new file mode 100644
index 0000000000..7c9a3af30f
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part7/finddialog.h
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef FINDDIALOG_H
+#define FINDDIALOG_H
+
+#include <QDialog>
+
+QT_BEGIN_NAMESPACE
+class QLineEdit;
+class QPushButton;
+QT_END_NAMESPACE
+
+class FindDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ FindDialog(QWidget *parent = nullptr);
+ QString getFindText();
+
+public slots:
+ void findClicked();
+
+private:
+ QPushButton *findButton;
+ QLineEdit *lineEdit;
+ QString findText;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part7/main.cpp b/tests/manual/examples/widgets/tutorials/addressbook/part7/main.cpp
new file mode 100644
index 0000000000..1f3aac3397
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part7/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QtWidgets>
+#include "addressbook.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ AddressBook addressBook;
+ addressBook.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/tutorials/addressbook/part7/part7.pro b/tests/manual/examples/widgets/tutorials/addressbook/part7/part7.pro
new file mode 100644
index 0000000000..6a99799c67
--- /dev/null
+++ b/tests/manual/examples/widgets/tutorials/addressbook/part7/part7.pro
@@ -0,0 +1,14 @@
+QT += widgets
+requires(qtConfig(filedialog))
+
+SOURCES = addressbook.cpp \
+ finddialog.cpp \
+ main.cpp
+HEADERS = addressbook.h \
+ finddialog.h
+
+QMAKE_PROJECT_NAME = ab_part7
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/tutorials/addressbook/part7
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/widgets/charactermap/CMakeLists.txt b/tests/manual/examples/widgets/widgets/charactermap/CMakeLists.txt
new file mode 100644
index 0000000000..f02ac52689
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/charactermap/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(charactermap LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/charactermap")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(charactermap
+ characterwidget.cpp characterwidget.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+)
+
+set_target_properties(charactermap PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(charactermap PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS charactermap
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/widgets/charactermap/charactermap.pro b/tests/manual/examples/widgets/widgets/charactermap/charactermap.pro
new file mode 100644
index 0000000000..373aabca73
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/charactermap/charactermap.pro
@@ -0,0 +1,12 @@
+QT += widgets
+requires(qtConfig(combobox))
+
+HEADERS = characterwidget.h \
+ mainwindow.h
+SOURCES = characterwidget.cpp \
+ mainwindow.cpp \
+ main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/charactermap
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/widgets/charactermap/characterwidget.cpp b/tests/manual/examples/widgets/widgets/charactermap/characterwidget.cpp
new file mode 100644
index 0000000000..6287a44e80
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/charactermap/characterwidget.cpp
@@ -0,0 +1,145 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "characterwidget.h"
+
+#include <QFontDatabase>
+#include <QMouseEvent>
+#include <QPainter>
+#include <QToolTip>
+
+//! [0]
+CharacterWidget::CharacterWidget(QWidget *parent)
+ : QWidget(parent)
+{
+ calculateSquareSize();
+ setMouseTracking(true);
+}
+//! [0]
+
+//! [1]
+void CharacterWidget::updateFont(const QFont &font)
+{
+ displayFont.setFamily(font.family());
+ calculateSquareSize();
+ adjustSize();
+ update();
+}
+//! [1]
+
+//! [2]
+void CharacterWidget::updateSize(const QString &fontSize)
+{
+ displayFont.setPointSize(fontSize.toInt());
+ calculateSquareSize();
+ adjustSize();
+ update();
+}
+//! [2]
+
+void CharacterWidget::updateStyle(const QString &fontStyle)
+{
+ const QFont::StyleStrategy oldStrategy = displayFont.styleStrategy();
+ displayFont = QFontDatabase::font(displayFont.family(), fontStyle, displayFont.pointSize());
+ displayFont.setStyleStrategy(oldStrategy);
+ calculateSquareSize();
+ adjustSize();
+ update();
+}
+
+void CharacterWidget::updateFontMerging(bool enable)
+{
+ if (enable)
+ displayFont.setStyleStrategy(QFont::PreferDefault);
+ else
+ displayFont.setStyleStrategy(QFont::NoFontMerging);
+ adjustSize();
+ update();
+}
+
+void CharacterWidget::calculateSquareSize()
+{
+ squareSize = qMax(16, 4 + QFontMetrics(displayFont, this).height());
+}
+
+//! [3]
+QSize CharacterWidget::sizeHint() const
+{
+ return QSize(columns*squareSize, (65536 / columns) * squareSize);
+}
+//! [3]
+
+//! [4]
+void CharacterWidget::mouseMoveEvent(QMouseEvent *event)
+{
+ QPoint widgetPosition = mapFromGlobal(event->globalPosition().toPoint());
+ uint key = (widgetPosition.y() / squareSize) * columns + widgetPosition.x() / squareSize;
+
+ QString text = QString::fromLatin1("<p>Character: <span style=\"font-size: 24pt; font-family: %1\">").arg(displayFont.family())
+ + QChar(key)
+ + QString::fromLatin1("</span><p>Value: 0x")
+ + QString::number(key, 16);
+ QToolTip::showText(event->globalPosition().toPoint(), text, this);
+}
+//! [4]
+
+//! [5]
+void CharacterWidget::mousePressEvent(QMouseEvent *event)
+{
+ if (event->button() == Qt::LeftButton) {
+ lastKey = (event->position().toPoint().y() / squareSize) * columns + event->position().toPoint().x() / squareSize;
+ if (QChar(lastKey).category() != QChar::Other_NotAssigned)
+ emit characterSelected(QString(QChar(lastKey)));
+ update();
+ }
+ else
+ QWidget::mousePressEvent(event);
+}
+//! [5]
+
+//! [6]
+void CharacterWidget::paintEvent(QPaintEvent *event)
+{
+ QPainter painter(this);
+ painter.fillRect(event->rect(), QBrush(Qt::white));
+ painter.setFont(displayFont);
+//! [6]
+
+//! [7]
+ QRect redrawRect = event->rect();
+ int beginRow = redrawRect.top() / squareSize;
+ int endRow = redrawRect.bottom() / squareSize;
+ int beginColumn = redrawRect.left() / squareSize;
+ int endColumn = redrawRect.right() / squareSize;
+//! [7]
+
+//! [8]
+ painter.setPen(QPen(Qt::gray));
+ for (int row = beginRow; row <= endRow; ++row) {
+ for (int column = beginColumn; column <= endColumn; ++column) {
+ painter.drawRect(column * squareSize, row * squareSize, squareSize, squareSize);
+ }
+//! [8] //! [9]
+ }
+//! [9]
+
+//! [10]
+ QFontMetrics fontMetrics(displayFont);
+ painter.setPen(QPen(Qt::black));
+ for (int row = beginRow; row <= endRow; ++row) {
+ for (int column = beginColumn; column <= endColumn; ++column) {
+ int key = row * columns + column;
+ painter.setClipRect(column * squareSize, row * squareSize, squareSize, squareSize);
+
+ if (key == lastKey)
+ painter.fillRect(column * squareSize + 1, row * squareSize + 1,
+ squareSize, squareSize, QBrush(Qt::red));
+
+ painter.drawText(column * squareSize + (squareSize / 2) -
+ fontMetrics.horizontalAdvance(QChar(key)) / 2,
+ row * squareSize + 4 + fontMetrics.ascent(),
+ QString(QChar(key)));
+ }
+ }
+}
+//! [10]
diff --git a/tests/manual/examples/widgets/widgets/charactermap/characterwidget.h b/tests/manual/examples/widgets/widgets/charactermap/characterwidget.h
new file mode 100644
index 0000000000..b8aa76d111
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/charactermap/characterwidget.h
@@ -0,0 +1,50 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef CHARACTERWIDGET_H
+#define CHARACTERWIDGET_H
+
+#include <QFont>
+#include <QSize>
+#include <QString>
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QMouseEvent;
+class QPaintEvent;
+QT_END_NAMESPACE
+
+//! [0]
+class CharacterWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ CharacterWidget(QWidget *parent = nullptr);
+ QSize sizeHint() const override;
+
+public slots:
+ void updateFont(const QFont &font);
+ void updateSize(const QString &fontSize);
+ void updateStyle(const QString &fontStyle);
+ void updateFontMerging(bool enable);
+
+signals:
+ void characterSelected(const QString &character);
+
+protected:
+ void mouseMoveEvent(QMouseEvent *event) override;
+ void mousePressEvent(QMouseEvent *event) override;
+ void paintEvent(QPaintEvent *event) override;
+
+private:
+ void calculateSquareSize();
+
+ QFont displayFont;
+ int columns = 16;
+ int lastKey = -1;
+ int squareSize = 0;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/charactermap/main.cpp b/tests/manual/examples/widgets/widgets/charactermap/main.cpp
new file mode 100644
index 0000000000..7d7cf3e573
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/charactermap/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow window;
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/widgets/charactermap/mainwindow.cpp b/tests/manual/examples/widgets/widgets/charactermap/mainwindow.cpp
new file mode 100644
index 0000000000..fcc00f9642
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/charactermap/mainwindow.cpp
@@ -0,0 +1,264 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+#include "characterwidget.h"
+
+#include <QApplication>
+#include <QBoxLayout>
+#include <QCheckBox>
+#include <QClipboard>
+#include <QDialog>
+#include <QDialogButtonBox>
+#include <QFontComboBox>
+#include <QLabel>
+#include <QLineEdit>
+#include <QMenuBar>
+#include <QPlainTextEdit>
+#include <QPushButton>
+#include <QScreen>
+#include <QScrollArea>
+#include <QStatusBar>
+#include <QTextStream>
+
+//! [0]
+Q_DECLARE_METATYPE(QFontComboBox::FontFilter)
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+{
+ QMenu *fileMenu = menuBar()->addMenu(tr("File"));
+ fileMenu->addAction(tr("Quit"), this, &QWidget::close);
+ QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
+ helpMenu->addAction(tr("Show Font Info"), this, &MainWindow::showInfo);
+ helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt);
+
+ QWidget *centralWidget = new QWidget;
+
+ QLabel *filterLabel = new QLabel(tr("Filter:"));
+ filterCombo = new QComboBox;
+ filterCombo->addItem(tr("All"), QVariant::fromValue(QFontComboBox::AllFonts));
+ filterCombo->addItem(tr("Scalable"), QVariant::fromValue(QFontComboBox::ScalableFonts));
+ filterCombo->addItem(tr("Monospaced"), QVariant::fromValue(QFontComboBox::MonospacedFonts));
+ filterCombo->addItem(tr("Proportional"), QVariant::fromValue(QFontComboBox::ProportionalFonts));
+ filterCombo->setCurrentIndex(0);
+ connect(filterCombo, &QComboBox::currentIndexChanged,
+ this, &MainWindow::filterChanged);
+
+ QLabel *fontLabel = new QLabel(tr("Font:"));
+ fontCombo = new QFontComboBox;
+ QLabel *sizeLabel = new QLabel(tr("Size:"));
+ sizeCombo = new QComboBox;
+ QLabel *styleLabel = new QLabel(tr("Style:"));
+ styleCombo = new QComboBox;
+ QLabel *fontMergingLabel = new QLabel(tr("Automatic Font Merging:"));
+ fontMerging = new QCheckBox;
+ fontMerging->setChecked(true);
+
+ scrollArea = new QScrollArea;
+ characterWidget = new CharacterWidget;
+ scrollArea->setWidget(characterWidget);
+//! [0]
+
+//! [1]
+ findStyles(fontCombo->currentFont());
+//! [1]
+ findSizes(fontCombo->currentFont());
+
+//! [2]
+ lineEdit = new QLineEdit;
+ lineEdit->setClearButtonEnabled(true);
+#ifndef QT_NO_CLIPBOARD
+ QPushButton *clipboardButton = new QPushButton(tr("&To clipboard"));
+//! [2]
+
+#endif
+
+//! [4]
+ connect(fontCombo, &QFontComboBox::currentFontChanged,
+ this, &MainWindow::findStyles);
+ connect(fontCombo, &QFontComboBox::currentFontChanged,
+ this, &MainWindow::findSizes);
+ connect(fontCombo, &QFontComboBox::currentFontChanged,
+ characterWidget, &CharacterWidget::updateFont);
+ connect(sizeCombo, &QComboBox::currentTextChanged,
+ characterWidget, &CharacterWidget::updateSize);
+ connect(styleCombo, &QComboBox::currentTextChanged,
+ characterWidget, &CharacterWidget::updateStyle);
+//! [4] //! [5]
+ connect(characterWidget, &CharacterWidget::characterSelected,
+ this, &MainWindow::insertCharacter);
+
+#ifndef QT_NO_CLIPBOARD
+ connect(clipboardButton, &QAbstractButton::clicked, this, &MainWindow::updateClipboard);
+#endif
+//! [5]
+ connect(fontMerging, &QAbstractButton::toggled, characterWidget, &CharacterWidget::updateFontMerging);
+
+//! [6]
+ QHBoxLayout *controlsLayout = new QHBoxLayout;
+ controlsLayout->addWidget(filterLabel);
+ controlsLayout->addWidget(filterCombo, 1);
+ controlsLayout->addWidget(fontLabel);
+ controlsLayout->addWidget(fontCombo, 1);
+ controlsLayout->addWidget(sizeLabel);
+ controlsLayout->addWidget(sizeCombo, 1);
+ controlsLayout->addWidget(styleLabel);
+ controlsLayout->addWidget(styleCombo, 1);
+ controlsLayout->addWidget(fontMergingLabel);
+ controlsLayout->addWidget(fontMerging, 1);
+ controlsLayout->addStretch(1);
+
+ QHBoxLayout *lineLayout = new QHBoxLayout;
+ lineLayout->addWidget(lineEdit, 1);
+ lineLayout->addSpacing(12);
+#ifndef QT_NO_CLIPBOARD
+ lineLayout->addWidget(clipboardButton);
+#endif
+
+ QVBoxLayout *centralLayout = new QVBoxLayout;
+ centralLayout->addLayout(controlsLayout);
+ centralLayout->addWidget(scrollArea, 1);
+ centralLayout->addSpacing(4);
+ centralLayout->addLayout(lineLayout);
+ centralWidget->setLayout(centralLayout);
+
+ setCentralWidget(centralWidget);
+ setWindowTitle(tr("Character Map"));
+}
+//! [6]
+
+//! [7]
+void MainWindow::findStyles(const QFont &font)
+{
+ QString currentItem = styleCombo->currentText();
+ styleCombo->clear();
+//! [7]
+
+//! [8]
+ const QStringList styles = QFontDatabase::styles(font.family());
+ for (const QString &style : styles)
+ styleCombo->addItem(style);
+
+ int styleIndex = styleCombo->findText(currentItem);
+
+ if (styleIndex == -1)
+ styleCombo->setCurrentIndex(0);
+ else
+ styleCombo->setCurrentIndex(styleIndex);
+}
+//! [8]
+
+void MainWindow::filterChanged(int f)
+{
+ const QFontComboBox::FontFilter filter =
+ qvariant_cast<QFontComboBox::FontFilter>(filterCombo->itemData(f));
+ fontCombo->setFontFilters(filter);
+ statusBar()->showMessage(tr("%n font(s) found", nullptr, fontCombo->count()));
+}
+
+void MainWindow::findSizes(const QFont &font)
+{
+ QString currentSize = sizeCombo->currentText();
+
+ {
+ const QSignalBlocker blocker(sizeCombo);
+ // sizeCombo signals are now blocked until end of scope
+ sizeCombo->clear();
+
+ if (QFontDatabase::isSmoothlyScalable(font.family(), QFontDatabase::styleString(font))) {
+ const QList<int> sizes = QFontDatabase::standardSizes();
+ for (const int size : sizes) {
+ sizeCombo->addItem(QVariant(size).toString());
+ sizeCombo->setEditable(true);
+ }
+
+ } else {
+ const QList<int> sizes = QFontDatabase::smoothSizes(font.family(), QFontDatabase::styleString(font));
+ for (const int size : sizes ) {
+ sizeCombo->addItem(QVariant(size).toString());
+ sizeCombo->setEditable(false);
+ }
+ }
+ }
+
+ int sizeIndex = sizeCombo->findText(currentSize);
+
+ if(sizeIndex == -1)
+ sizeCombo->setCurrentIndex(qMax(0, sizeCombo->count() / 3));
+ else
+ sizeCombo->setCurrentIndex(sizeIndex);
+}
+
+//! [9]
+void MainWindow::insertCharacter(const QString &character)
+{
+ lineEdit->insert(character);
+}
+//! [9]
+
+//! [10]
+#ifndef QT_NO_CLIPBOARD
+void MainWindow::updateClipboard()
+{
+//! [11]
+ QGuiApplication::clipboard()->setText(lineEdit->text(), QClipboard::Clipboard);
+//! [11]
+ QGuiApplication::clipboard()->setText(lineEdit->text(), QClipboard::Selection);
+}
+#endif
+
+class FontInfoDialog : public QDialog
+{
+public:
+ explicit FontInfoDialog(QWidget *parent = nullptr);
+
+private:
+ QString text() const;
+};
+
+FontInfoDialog::FontInfoDialog(QWidget *parent) : QDialog(parent)
+{
+ setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
+ QVBoxLayout *mainLayout = new QVBoxLayout(this);
+ QPlainTextEdit *textEdit = new QPlainTextEdit(text(), this);
+ textEdit->setReadOnly(true);
+ textEdit->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
+ mainLayout->addWidget(textEdit);
+ QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Close, this);
+ connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject);
+ mainLayout->addWidget(buttonBox);
+}
+
+QString FontInfoDialog::text() const
+{
+ QString text;
+ QTextStream str(&text);
+ const QFont defaultFont = QFontDatabase::systemFont(QFontDatabase::GeneralFont);
+ const QFont fixedFont = QFontDatabase::systemFont(QFontDatabase::FixedFont);
+ const QFont titleFont = QFontDatabase::systemFont(QFontDatabase::TitleFont);
+ const QFont smallestReadableFont = QFontDatabase::systemFont(QFontDatabase::SmallestReadableFont);
+
+ str << "Qt " << QT_VERSION_STR << " on " << QGuiApplication::platformName()
+ << ", " << logicalDpiX() << "DPI";
+ if (!qFuzzyCompare(devicePixelRatio(), qreal(1)))
+ str << ", device pixel ratio: " << devicePixelRatio();
+ str << "\n\nDefault font : " << defaultFont.family() << ", " << defaultFont.pointSizeF() << "pt\n"
+ << "Fixed font : " << fixedFont.family() << ", " << fixedFont.pointSizeF() << "pt\n"
+ << "Title font : " << titleFont.family() << ", " << titleFont.pointSizeF() << "pt\n"
+ << "Smallest font: " << smallestReadableFont.family() << ", " << smallestReadableFont.pointSizeF() << "pt\n";
+
+ return text;
+}
+
+void MainWindow::showInfo()
+{
+ const QRect screenGeometry = screen()->geometry();
+ FontInfoDialog *dialog = new FontInfoDialog(this);
+ dialog->setWindowTitle(tr("Fonts"));
+ dialog->setAttribute(Qt::WA_DeleteOnClose);
+ dialog->resize(screenGeometry.width() / 4, screenGeometry.height() / 4);
+ dialog->show();
+}
+
+//! [10]
diff --git a/tests/manual/examples/widgets/widgets/charactermap/mainwindow.h b/tests/manual/examples/widgets/widgets/charactermap/mainwindow.h
new file mode 100644
index 0000000000..b8f3c166eb
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/charactermap/mainwindow.h
@@ -0,0 +1,50 @@
+// 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>
+#include <QString>
+
+QT_BEGIN_NAMESPACE
+class QClipboard;
+class QComboBox;
+class QFontComboBox;
+class QLineEdit;
+class QScrollArea;
+class QCheckBox;
+QT_END_NAMESPACE
+class CharacterWidget;
+
+//! [0]
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+
+public slots:
+ void filterChanged(int);
+ void findStyles(const QFont &font);
+ void findSizes(const QFont &font);
+ void insertCharacter(const QString &character);
+#ifndef QT_NO_CLIPBOARD
+ void updateClipboard();
+#endif
+ void showInfo();
+
+private:
+ CharacterWidget *characterWidget;
+ QComboBox *filterCombo;
+ QComboBox *styleCombo;
+ QComboBox *sizeCombo;
+ QFontComboBox *fontCombo;
+ QLineEdit *lineEdit;
+ QScrollArea *scrollArea;
+ QCheckBox *fontMerging;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/digitalclock/CMakeLists.txt b/tests/manual/examples/widgets/widgets/digitalclock/CMakeLists.txt
new file mode 100644
index 0000000000..04d9c53ed3
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/digitalclock/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(digitalclock LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/digitalclock")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(digitalclock
+ digitalclock.cpp digitalclock.h
+ main.cpp
+)
+
+set_target_properties(digitalclock PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(digitalclock PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS digitalclock
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/widgets/digitalclock/digitalclock.cpp b/tests/manual/examples/widgets/widgets/digitalclock/digitalclock.cpp
new file mode 100644
index 0000000000..4eec982c25
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/digitalclock/digitalclock.cpp
@@ -0,0 +1,36 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "digitalclock.h"
+
+#include <QTime>
+#include <QTimer>
+
+//! [0]
+DigitalClock::DigitalClock(QWidget *parent)
+ : QLCDNumber(parent)
+{
+ setSegmentStyle(Filled);
+
+ QTimer *timer = new QTimer(this);
+ connect(timer, &QTimer::timeout, this, &DigitalClock::showTime);
+ timer->start(1000);
+
+ showTime();
+
+ setWindowTitle(tr("Digital Clock"));
+ resize(150, 60);
+}
+//! [0]
+
+//! [1]
+void DigitalClock::showTime()
+//! [1] //! [2]
+{
+ QTime time = QTime::currentTime();
+ QString text = time.toString("hh:mm");
+ if ((time.second() % 2) == 0)
+ text[2] = ' ';
+ display(text);
+}
+//! [2]
diff --git a/tests/manual/examples/widgets/widgets/digitalclock/digitalclock.h b/tests/manual/examples/widgets/widgets/digitalclock/digitalclock.h
new file mode 100644
index 0000000000..7b028cb06e
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/digitalclock/digitalclock.h
@@ -0,0 +1,22 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef DIGITALCLOCK_H
+#define DIGITALCLOCK_H
+
+#include <QLCDNumber>
+
+//! [0]
+class DigitalClock : public QLCDNumber
+{
+ Q_OBJECT
+
+public:
+ DigitalClock(QWidget *parent = nullptr);
+
+private slots:
+ void showTime();
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/digitalclock/digitalclock.pro b/tests/manual/examples/widgets/widgets/digitalclock/digitalclock.pro
new file mode 100644
index 0000000000..4e4bc0f557
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/digitalclock/digitalclock.pro
@@ -0,0 +1,9 @@
+QT += widgets
+
+HEADERS = digitalclock.h
+SOURCES = digitalclock.cpp \
+ main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/digitalclock
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/widgets/digitalclock/main.cpp b/tests/manual/examples/widgets/widgets/digitalclock/main.cpp
new file mode 100644
index 0000000000..d930e72f23
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/digitalclock/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "digitalclock.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ DigitalClock clock;
+ clock.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/widgets/icons/CMakeLists.txt b/tests/manual/examples/widgets/widgets/icons/CMakeLists.txt
new file mode 100644
index 0000000000..f36e47bef6
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/CMakeLists.txt
@@ -0,0 +1,44 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(icons LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/icons")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(icons
+ iconpreviewarea.cpp iconpreviewarea.h
+ iconsizespinbox.cpp iconsizespinbox.h
+ imagedelegate.cpp imagedelegate.h
+ main.cpp
+ mainwindow.cpp mainwindow.h
+)
+
+set_target_properties(icons PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_compile_definitions(icons PRIVATE
+ SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}"
+)
+
+target_link_libraries(icons PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS icons
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/widgets/icons/iconpreviewarea.cpp b/tests/manual/examples/widgets/widgets/icons/iconpreviewarea.cpp
new file mode 100644
index 0000000000..42a5fa7914
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/iconpreviewarea.cpp
@@ -0,0 +1,130 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "iconpreviewarea.h"
+
+#include <QGridLayout>
+#include <QLabel>
+#include <QWindow>
+
+//! [0]
+IconPreviewArea::IconPreviewArea(QWidget *parent)
+ : QWidget(parent)
+{
+ QGridLayout *mainLayout = new QGridLayout(this);
+
+ for (int row = 0; row < NumStates; ++row) {
+ stateLabels[row] = createHeaderLabel(IconPreviewArea::iconStateNames().at(row));
+ mainLayout->addWidget(stateLabels[row], row + 1, 0);
+ }
+ Q_ASSERT(NumStates == 2);
+
+ for (int column = 0; column < NumModes; ++column) {
+ modeLabels[column] = createHeaderLabel(IconPreviewArea::iconModeNames().at(column));
+ mainLayout->addWidget(modeLabels[column], 0, column + 1);
+ }
+ Q_ASSERT(NumModes == 4);
+
+ for (int column = 0; column < NumModes; ++column) {
+ for (int row = 0; row < NumStates; ++row) {
+ pixmapLabels[column][row] = createPixmapLabel();
+ mainLayout->addWidget(pixmapLabels[column][row], row + 1, column + 1);
+ }
+ }
+}
+//! [0]
+
+//! [42]
+QList<QIcon::Mode> IconPreviewArea::iconModes()
+{
+ static const QList<QIcon::Mode> result = { QIcon::Normal, QIcon::Active, QIcon::Disabled,
+ QIcon::Selected };
+ return result;
+}
+
+QList<QIcon::State> IconPreviewArea::iconStates()
+{
+ static const QList<QIcon::State> result = { QIcon::Off, QIcon::On };
+ return result;
+}
+
+QStringList IconPreviewArea::iconModeNames()
+{
+ static const QStringList result = {tr("Normal"), tr("Active"), tr("Disabled"), tr("Selected")};
+ return result;
+}
+
+QStringList IconPreviewArea::iconStateNames()
+{
+ static const QStringList result = {tr("Off"), tr("On")};
+ return result;
+}
+//! [42]
+
+//! [1]
+void IconPreviewArea::setIcon(const QIcon &icon)
+{
+ this->icon = icon;
+ updatePixmapLabels();
+}
+//! [1]
+
+//! [2]
+void IconPreviewArea::setSize(const QSize &size)
+{
+ if (size != this->size) {
+ this->size = size;
+ updatePixmapLabels();
+ }
+}
+//! [2]
+
+//! [3]
+QLabel *IconPreviewArea::createHeaderLabel(const QString &text)
+{
+ QLabel *label = new QLabel(tr("<b>%1</b>").arg(text));
+ label->setAlignment(Qt::AlignCenter);
+ return label;
+}
+//! [3]
+
+//! [4]
+QLabel *IconPreviewArea::createPixmapLabel()
+{
+ QLabel *label = new QLabel;
+ label->setEnabled(false);
+ label->setAlignment(Qt::AlignCenter);
+ label->setFrameShape(QFrame::Box);
+ label->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ label->setBackgroundRole(QPalette::Base);
+ label->setAutoFillBackground(true);
+ label->setMinimumSize(132, 132);
+ return label;
+}
+//! [4]
+
+//! [5]
+void IconPreviewArea::updatePixmapLabels()
+{
+ for (int column = 0; column < NumModes; ++column) {
+ for (int row = 0; row < NumStates; ++row) {
+ const QPixmap pixmap =
+ icon.pixmap(size, devicePixelRatio(), IconPreviewArea::iconModes().at(column),
+ IconPreviewArea::iconStates().at(row));
+ QLabel *pixmapLabel = pixmapLabels[column][row];
+ pixmapLabel->setPixmap(pixmap);
+ pixmapLabel->setEnabled(!pixmap.isNull());
+ QString toolTip;
+ if (!pixmap.isNull()) {
+ const QSize actualSize = icon.actualSize(size);
+ toolTip =
+ tr("Size: %1x%2\nActual size: %3x%4\nDevice pixel ratio: %5")
+ .arg(size.width()).arg(size.height())
+ .arg(actualSize.width()).arg(actualSize.height())
+ .arg(pixmap.devicePixelRatio());
+ }
+ pixmapLabel->setToolTip(toolTip);
+ }
+ }
+}
+//! [5]
diff --git a/tests/manual/examples/widgets/widgets/icons/iconpreviewarea.h b/tests/manual/examples/widgets/widgets/icons/iconpreviewarea.h
new file mode 100644
index 0000000000..c59ebc42ba
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/iconpreviewarea.h
@@ -0,0 +1,47 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef ICONPREVIEWAREA_H
+#define ICONPREVIEWAREA_H
+
+#include <QIcon>
+#include <QWidget>
+#include <QStringList>
+#include <QList>
+
+QT_BEGIN_NAMESPACE
+class QLabel;
+QT_END_NAMESPACE
+
+//! [0]
+class IconPreviewArea : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit IconPreviewArea(QWidget *parent = nullptr);
+
+ void setIcon(const QIcon &icon);
+ void setSize(const QSize &size);
+
+ static QList<QIcon::Mode> iconModes();
+ static QList<QIcon::State> iconStates();
+ static QStringList iconModeNames();
+ static QStringList iconStateNames();
+
+private:
+ QLabel *createHeaderLabel(const QString &text);
+ QLabel *createPixmapLabel();
+ void updatePixmapLabels();
+
+ enum { NumModes = 4, NumStates = 2 };
+
+ QIcon icon;
+ QSize size;
+ QLabel *stateLabels[NumStates];
+ QLabel *modeLabels[NumModes];
+ QLabel *pixmapLabels[NumModes][NumStates];
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/icons/icons.pro b/tests/manual/examples/widgets/widgets/icons/icons.pro
new file mode 100644
index 0000000000..243ce6b092
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/icons.pro
@@ -0,0 +1,20 @@
+QT += widgets
+requires(qtConfig(combobox))
+
+HEADERS = iconpreviewarea.h \
+ iconsizespinbox.h \
+ imagedelegate.h \
+ mainwindow.h
+SOURCES = iconpreviewarea.cpp \
+ iconsizespinbox.cpp \
+ imagedelegate.cpp \
+ main.cpp \
+ mainwindow.cpp
+
+DEFINES += SRCDIR=\\\"$$PWD/\\\"
+
+EXAMPLE_FILES = images/*
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/icons
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/widgets/icons/iconsizespinbox.cpp b/tests/manual/examples/widgets/widgets/icons/iconsizespinbox.cpp
new file mode 100644
index 0000000000..16c88f4dd0
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/iconsizespinbox.cpp
@@ -0,0 +1,33 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "iconsizespinbox.h"
+
+#include <QRegularExpression>
+
+//! [0]
+IconSizeSpinBox::IconSizeSpinBox(QWidget *parent)
+ : QSpinBox(parent)
+{
+}
+//! [0]
+
+//! [1]
+int IconSizeSpinBox::valueFromText(const QString &text) const
+{
+ static const QRegularExpression regExp(tr("(\\d+)(\\s*[xx]\\s*\\d+)?"));
+ Q_ASSERT(regExp.isValid());
+
+ const QRegularExpressionMatch match = regExp.match(text);
+ if (match.isValid())
+ return match.captured(1).toInt();
+ return 0;
+}
+//! [1]
+
+//! [2]
+QString IconSizeSpinBox::textFromValue(int value) const
+{
+ return tr("%1 x %1").arg(value);
+}
+//! [2]
diff --git a/tests/manual/examples/widgets/widgets/icons/iconsizespinbox.h b/tests/manual/examples/widgets/widgets/icons/iconsizespinbox.h
new file mode 100644
index 0000000000..ac304b4794
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/iconsizespinbox.h
@@ -0,0 +1,22 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef ICONSIZESPINBOX_H
+#define ICONSIZESPINBOX_H
+
+#include <QSpinBox>
+
+//! [0]
+class IconSizeSpinBox : public QSpinBox
+{
+ Q_OBJECT
+
+public:
+ explicit IconSizeSpinBox(QWidget *parent = nullptr);
+
+ int valueFromText(const QString &text) const override;
+ QString textFromValue(int value) const override;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/icons/imagedelegate.cpp b/tests/manual/examples/widgets/widgets/icons/imagedelegate.cpp
new file mode 100644
index 0000000000..ec3c227c71
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/imagedelegate.cpp
@@ -0,0 +1,64 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "imagedelegate.h"
+#include "iconpreviewarea.h"
+
+#include <QComboBox>
+
+//! [0]
+ImageDelegate::ImageDelegate(QObject *parent)
+ : QStyledItemDelegate(parent)
+{}
+//! [0]
+
+//! [1]
+QWidget *ImageDelegate::createEditor(QWidget *parent,
+ const QStyleOptionViewItem & /* option */,
+ const QModelIndex &index) const
+{
+ QComboBox *comboBox = new QComboBox(parent);
+ if (index.column() == 1)
+ comboBox->addItems(IconPreviewArea::iconModeNames());
+ else if (index.column() == 2)
+ comboBox->addItems(IconPreviewArea::iconStateNames());
+
+ connect(comboBox, &QComboBox::activated,
+ this, &ImageDelegate::emitCommitData);
+
+ return comboBox;
+}
+//! [1]
+
+//! [2]
+void ImageDelegate::setEditorData(QWidget *editor,
+ const QModelIndex &index) const
+{
+ QComboBox *comboBox = qobject_cast<QComboBox *>(editor);
+ if (!comboBox)
+ return;
+
+ int pos = comboBox->findText(index.model()->data(index).toString(),
+ Qt::MatchExactly);
+ comboBox->setCurrentIndex(pos);
+}
+//! [2]
+
+//! [3]
+void ImageDelegate::setModelData(QWidget *editor, QAbstractItemModel *model,
+ const QModelIndex &index) const
+{
+ QComboBox *comboBox = qobject_cast<QComboBox *>(editor);
+ if (!comboBox)
+ return;
+
+ model->setData(index, comboBox->currentText());
+}
+//! [3]
+
+//! [4]
+void ImageDelegate::emitCommitData()
+{
+ emit commitData(qobject_cast<QWidget *>(sender()));
+}
+//! [4]
diff --git a/tests/manual/examples/widgets/widgets/icons/imagedelegate.h b/tests/manual/examples/widgets/widgets/icons/imagedelegate.h
new file mode 100644
index 0000000000..29707e68c6
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/imagedelegate.h
@@ -0,0 +1,31 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef IMAGEDELEGATE_H
+#define IMAGEDELEGATE_H
+
+#include <QStyledItemDelegate>
+
+//! [0]
+class ImageDelegate : public QStyledItemDelegate
+{
+ Q_OBJECT
+
+public:
+ explicit ImageDelegate(QObject *parent = nullptr);
+//! [0]
+
+//! [1]
+ QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
+ const QModelIndex &index) const override;
+ void setEditorData(QWidget *editor, const QModelIndex &index) const override;
+ void setModelData(QWidget *editor, QAbstractItemModel *model,
+ const QModelIndex &index) const override;
+
+//! [1] //! [2]
+private slots:
+ void emitCommitData();
+//! [2]
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/icons/images/designer.png b/tests/manual/examples/widgets/widgets/icons/images/designer.png
new file mode 100644
index 0000000000..9f8578b49e
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/designer.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/find_disabled.png b/tests/manual/examples/widgets/widgets/icons/images/find_disabled.png
new file mode 100644
index 0000000000..e85e33fe05
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/find_disabled.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/find_normal.png b/tests/manual/examples/widgets/widgets/icons/images/find_normal.png
new file mode 100644
index 0000000000..728c27f905
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/find_normal.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/monkey_off_128x128.png b/tests/manual/examples/widgets/widgets/icons/images/monkey_off_128x128.png
new file mode 100644
index 0000000000..f878267287
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/monkey_off_128x128.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/monkey_off_16x16.png b/tests/manual/examples/widgets/widgets/icons/images/monkey_off_16x16.png
new file mode 100644
index 0000000000..0ac57d7d4f
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/monkey_off_16x16.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/monkey_off_32x32.png b/tests/manual/examples/widgets/widgets/icons/images/monkey_off_32x32.png
new file mode 100644
index 0000000000..1f7fab694c
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/monkey_off_32x32.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/monkey_off_64x64.png b/tests/manual/examples/widgets/widgets/icons/images/monkey_off_64x64.png
new file mode 100644
index 0000000000..47d8f6de35
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/monkey_off_64x64.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/monkey_on_128x128.png b/tests/manual/examples/widgets/widgets/icons/images/monkey_on_128x128.png
new file mode 100644
index 0000000000..8e1c7468bf
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/monkey_on_128x128.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/monkey_on_16x16.png b/tests/manual/examples/widgets/widgets/icons/images/monkey_on_16x16.png
new file mode 100644
index 0000000000..082e8527f1
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/monkey_on_16x16.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/monkey_on_32x32.png b/tests/manual/examples/widgets/widgets/icons/images/monkey_on_32x32.png
new file mode 100644
index 0000000000..bf9acc6cae
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/monkey_on_32x32.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/monkey_on_64x64.png b/tests/manual/examples/widgets/widgets/icons/images/monkey_on_64x64.png
new file mode 100644
index 0000000000..990f604d98
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/monkey_on_64x64.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/qt_extended_16x16.png b/tests/manual/examples/widgets/widgets/icons/images/qt_extended_16x16.png
new file mode 100644
index 0000000000..30bcb45ed2
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/qt_extended_16x16.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/qt_extended_32x32.png b/tests/manual/examples/widgets/widgets/icons/images/qt_extended_32x32.png
new file mode 100644
index 0000000000..d609c1e1e5
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/qt_extended_32x32.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/images/qt_extended_48x48.png b/tests/manual/examples/widgets/widgets/icons/images/qt_extended_48x48.png
new file mode 100644
index 0000000000..0e524fed5f
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/images/qt_extended_48x48.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/icons/main.cpp b/tests/manual/examples/widgets/widgets/icons/main.cpp
new file mode 100644
index 0000000000..b7ed18ff94
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/main.cpp
@@ -0,0 +1,34 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QCommandLineParser>
+#include <QScreen>
+
+#include "mainwindow.h"
+
+//! [45]
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ QCoreApplication::setApplicationName(MainWindow::tr("Icons"));
+ QCoreApplication::setApplicationVersion(QT_VERSION_STR);
+ QCommandLineParser commandLineParser;
+ commandLineParser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions);
+ commandLineParser.addHelpOption();
+ commandLineParser.addVersionOption();
+ commandLineParser.addPositionalArgument(MainWindow::tr("[file]"), MainWindow::tr("Icon file(s) to open."));
+ commandLineParser.process(QCoreApplication::arguments());
+
+ MainWindow mainWin;
+ if (!commandLineParser.positionalArguments().isEmpty())
+ mainWin.loadImages(commandLineParser.positionalArguments());
+
+ const QRect availableGeometry = mainWin.screen()->availableGeometry();
+ mainWin.resize(availableGeometry.width() / 2, availableGeometry.height() * 2 / 3);
+ mainWin.move((availableGeometry.width() - mainWin.width()) / 2, (availableGeometry.height() - mainWin.height()) / 2);
+
+ mainWin.show();
+ return app.exec();
+}
+//! [45]
diff --git a/tests/manual/examples/widgets/widgets/icons/mainwindow.cpp b/tests/manual/examples/widgets/widgets/icons/mainwindow.cpp
new file mode 100644
index 0000000000..f893575f76
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/mainwindow.cpp
@@ -0,0 +1,478 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+#include "iconpreviewarea.h"
+#include "iconsizespinbox.h"
+#include "imagedelegate.h"
+
+#include <QActionGroup>
+#include <QApplication>
+#include <QButtonGroup>
+#include <QCheckBox>
+#include <QFileDialog>
+#include <QHeaderView>
+#include <QFormLayout>
+#include <QGridLayout>
+#include <QGroupBox>
+#include <QImageReader>
+#include <QLabel>
+#include <QMenuBar>
+#include <QMessageBox>
+#include <QRadioButton>
+#include <QScreen>
+#include <QStandardPaths>
+#include <QStyleFactory>
+#include <QTableWidget>
+#include <QWindow>
+
+//! [40]
+enum { OtherSize = QStyle::PM_CustomBase };
+//! [40]
+
+//! [0]
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+{
+ QWidget *centralWidget = new QWidget(this);
+ setCentralWidget(centralWidget);
+
+ createActions();
+
+ QGridLayout *mainLayout = new QGridLayout(centralWidget);
+
+ QGroupBox *previewGroupBox = new QGroupBox(tr("Preview"));
+ previewArea = new IconPreviewArea(previewGroupBox);
+ QVBoxLayout *previewLayout = new QVBoxLayout(previewGroupBox);
+ previewLayout->addWidget(previewArea);
+
+ mainLayout->addWidget(previewGroupBox, 0, 0, 1, 2);
+ mainLayout->addWidget(createImagesGroupBox(), 1, 0);
+ QVBoxLayout *vBox = new QVBoxLayout;
+ vBox->addWidget(createIconSizeGroupBox());
+ vBox->addWidget(createHighDpiIconSizeGroupBox());
+ vBox->addItem(new QSpacerItem(0, 0, QSizePolicy::Ignored, QSizePolicy::MinimumExpanding));
+ mainLayout->addLayout(vBox, 1, 1);
+ createContextMenu();
+
+ setWindowTitle(tr("Icons"));
+ checkCurrentStyle();
+ sizeButtonGroup->button(OtherSize)->click();
+}
+//! [0]
+
+//! [44]
+void MainWindow::show()
+{
+ QMainWindow::show();
+ connect(windowHandle(), &QWindow::screenChanged, this, &MainWindow::screenChanged);
+ screenChanged();
+}
+//! [44]
+
+//! [1]
+void MainWindow::about()
+{
+ QMessageBox::about(this, tr("About Icons"),
+ tr("The <b>Icons</b> example illustrates how Qt renders an icon in "
+ "different modes (active, normal, disabled, and selected) and "
+ "states (on and off) based on a set of images."));
+}
+//! [1]
+
+//! [2]
+void MainWindow::changeStyle(bool checked)
+{
+ if (!checked)
+ return;
+
+ const QAction *action = qobject_cast<QAction *>(sender());
+//! [2] //! [3]
+ QStyle *style = QStyleFactory::create(action->data().toString());
+//! [3] //! [4]
+ Q_ASSERT(style);
+ QApplication::setStyle(style);
+
+ const QList<QAbstractButton*> buttons = sizeButtonGroup->buttons();
+ for (QAbstractButton *button : buttons) {
+ const QStyle::PixelMetric metric = static_cast<QStyle::PixelMetric>(sizeButtonGroup->id(button));
+ const int value = style->pixelMetric(metric);
+ switch (metric) {
+ case QStyle::PM_SmallIconSize:
+ button->setText(tr("Small (%1 x %1)").arg(value));
+ break;
+ case QStyle::PM_LargeIconSize:
+ button->setText(tr("Large (%1 x %1)").arg(value));
+ break;
+ case QStyle::PM_ToolBarIconSize:
+ button->setText(tr("Toolbars (%1 x %1)").arg(value));
+ break;
+ case QStyle::PM_ListViewIconSize:
+ button->setText(tr("List views (%1 x %1)").arg(value));
+ break;
+ case QStyle::PM_IconViewIconSize:
+ button->setText(tr("Icon views (%1 x %1)").arg(value));
+ break;
+ case QStyle::PM_TabBarIconSize:
+ button->setText(tr("Tab bars (%1 x %1)").arg(value));
+ break;
+ default:
+ break;
+ }
+ }
+
+ triggerChangeSize();
+}
+//! [4]
+
+//! [5]
+void MainWindow::changeSize(QAbstractButton *button, bool checked)
+{
+ if (!checked)
+ return;
+
+ const int index = sizeButtonGroup->id(button);
+ const bool other = index == int(OtherSize);
+ const int extent = other
+ ? otherSpinBox->value()
+ : QApplication::style()->pixelMetric(static_cast<QStyle::PixelMetric>(index));
+
+ previewArea->setSize(QSize(extent, extent));
+ otherSpinBox->setEnabled(other);
+}
+
+void MainWindow::triggerChangeSize()
+{
+ changeSize(sizeButtonGroup->checkedButton(), true);
+}
+//! [5]
+
+//! [6]
+void MainWindow::changeIcon()
+{
+ QIcon icon;
+
+ for (int row = 0; row < imagesTable->rowCount(); ++row) {
+ const QTableWidgetItem *fileItem = imagesTable->item(row, 0);
+ const QTableWidgetItem *modeItem = imagesTable->item(row, 1);
+ const QTableWidgetItem *stateItem = imagesTable->item(row, 2);
+
+ if (fileItem->checkState() == Qt::Checked) {
+ const int modeIndex = IconPreviewArea::iconModeNames().indexOf(modeItem->text());
+ Q_ASSERT(modeIndex >= 0);
+ const int stateIndex = IconPreviewArea::iconStateNames().indexOf(stateItem->text());
+ Q_ASSERT(stateIndex >= 0);
+ const QIcon::Mode mode = IconPreviewArea::iconModes().at(modeIndex);
+ const QIcon::State state = IconPreviewArea::iconStates().at(stateIndex);
+//! [6]
+
+//! [8]
+ const QString fileName = fileItem->data(Qt::UserRole).toString();
+ QImage image(fileName);
+ if (!image.isNull())
+ icon.addPixmap(QPixmap::fromImage(image), mode, state);
+//! [8]
+ }
+ }
+//! [11]
+ previewArea->setIcon(icon);
+//! [11]
+}
+
+void MainWindow::addSampleImages()
+{
+ addImages(QLatin1String(SRCDIR) + QLatin1String("/images"));
+}
+
+void MainWindow::addOtherImages()
+{
+ static bool firstInvocation = true;
+ QString directory;
+ if (firstInvocation) {
+ firstInvocation = false;
+ directory = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation).value(0, QString());
+ }
+ addImages(directory);
+}
+
+//! [12]
+void MainWindow::addImages(const QString &directory)
+{
+ QFileDialog fileDialog(this, tr("Open Images"), directory);
+ QStringList mimeTypeFilters;
+ const QList<QByteArray> mimeTypes = QImageReader::supportedMimeTypes();
+ for (const QByteArray &mimeTypeName : mimeTypes)
+ mimeTypeFilters.append(mimeTypeName);
+ mimeTypeFilters.sort();
+ fileDialog.setMimeTypeFilters(mimeTypeFilters);
+ fileDialog.selectMimeTypeFilter(QLatin1String("image/png"));
+ fileDialog.setAcceptMode(QFileDialog::AcceptOpen);
+ fileDialog.setFileMode(QFileDialog::ExistingFiles);
+ if (!nativeFileDialogAct->isChecked())
+ fileDialog.setOption(QFileDialog::DontUseNativeDialog);
+ if (fileDialog.exec() == QDialog::Accepted)
+ loadImages(fileDialog.selectedFiles());
+//! [12]
+}
+
+void MainWindow::loadImages(const QStringList &fileNames)
+{
+ for (const QString &fileName : fileNames) {
+ const int row = imagesTable->rowCount();
+ imagesTable->setRowCount(row + 1);
+//! [13]
+ const QFileInfo fileInfo(fileName);
+ const QString imageName = fileInfo.baseName();
+ const QString fileName2x = fileInfo.absolutePath()
+ + QLatin1Char('/') + imageName + QLatin1String("@2x.") + fileInfo.suffix();
+ const QFileInfo fileInfo2x(fileName2x);
+ const QImage image(fileName);
+ const QString toolTip =
+ tr("Directory: %1\nFile: %2\nFile@2x: %3\nSize: %4x%5")
+ .arg(QDir::toNativeSeparators(fileInfo.absolutePath()), fileInfo.fileName())
+ .arg(fileInfo2x.exists() ? fileInfo2x.fileName() : tr("<None>"))
+ .arg(image.width()).arg(image.height());
+ QTableWidgetItem *fileItem = new QTableWidgetItem(imageName);
+ fileItem->setData(Qt::UserRole, fileName);
+ fileItem->setIcon(QPixmap::fromImage(image));
+ fileItem->setFlags((fileItem->flags() | Qt::ItemIsUserCheckable) & ~Qt::ItemIsEditable);
+ fileItem->setToolTip(toolTip);
+//! [13]
+
+//! [15]
+ QIcon::Mode mode = QIcon::Normal;
+ QIcon::State state = QIcon::Off;
+ if (guessModeStateAct->isChecked()) {
+ if (imageName.contains(QLatin1String("_act"), Qt::CaseInsensitive))
+ mode = QIcon::Active;
+ else if (imageName.contains(QLatin1String("_dis"), Qt::CaseInsensitive))
+ mode = QIcon::Disabled;
+ else if (imageName.contains(QLatin1String("_sel"), Qt::CaseInsensitive))
+ mode = QIcon::Selected;
+
+ if (imageName.contains(QLatin1String("_on"), Qt::CaseInsensitive))
+ state = QIcon::On;
+//! [15]
+ }
+
+//! [18]
+ imagesTable->setItem(row, 0, fileItem);
+ QTableWidgetItem *modeItem =
+ new QTableWidgetItem(IconPreviewArea::iconModeNames().at(IconPreviewArea::iconModes().indexOf(mode)));
+ modeItem->setToolTip(toolTip);
+ imagesTable->setItem(row, 1, modeItem);
+ QTableWidgetItem *stateItem =
+ new QTableWidgetItem(IconPreviewArea::iconStateNames().at(IconPreviewArea::iconStates().indexOf(state)));
+ stateItem->setToolTip(toolTip);
+ imagesTable->setItem(row, 2, stateItem);
+ imagesTable->openPersistentEditor(modeItem);
+ imagesTable->openPersistentEditor(stateItem);
+
+ fileItem->setCheckState(Qt::Checked);
+//! [18]
+ }
+}
+
+//! [20]
+void MainWindow::removeAllImages()
+{
+ imagesTable->setRowCount(0);
+ changeIcon();
+}
+//! [20]
+
+//! [21]
+QWidget *MainWindow::createImagesGroupBox()
+{
+ QGroupBox *imagesGroupBox = new QGroupBox(tr("Images"));
+
+ imagesTable = new QTableWidget;
+ imagesTable->setSelectionMode(QAbstractItemView::NoSelection);
+ imagesTable->setItemDelegate(new ImageDelegate(this));
+//! [21]
+
+//! [22]
+ const QStringList labels({tr("Image"), tr("Mode"), tr("State")});
+
+ imagesTable->horizontalHeader()->setDefaultSectionSize(90);
+ imagesTable->setColumnCount(3);
+ imagesTable->setHorizontalHeaderLabels(labels);
+ imagesTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
+ imagesTable->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Fixed);
+ imagesTable->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Fixed);
+ imagesTable->verticalHeader()->hide();
+//! [22]
+
+//! [24]
+ connect(imagesTable, &QTableWidget::itemChanged,
+ this, &MainWindow::changeIcon);
+
+ QVBoxLayout *layout = new QVBoxLayout(imagesGroupBox);
+ layout->addWidget(imagesTable);
+ return imagesGroupBox;
+//! [24]
+}
+
+//! [26]
+QWidget *MainWindow::createIconSizeGroupBox()
+{
+ QGroupBox *iconSizeGroupBox = new QGroupBox(tr("Icon Size"));
+
+ sizeButtonGroup = new QButtonGroup(this);
+ sizeButtonGroup->setExclusive(true);
+
+ connect(sizeButtonGroup, &QButtonGroup::buttonToggled,
+ this, &MainWindow::changeSize);
+
+ QRadioButton *smallRadioButton = new QRadioButton;
+ sizeButtonGroup->addButton(smallRadioButton, QStyle::PM_SmallIconSize);
+ QRadioButton *largeRadioButton = new QRadioButton;
+ sizeButtonGroup->addButton(largeRadioButton, QStyle::PM_LargeIconSize);
+ QRadioButton *toolBarRadioButton = new QRadioButton;
+ sizeButtonGroup->addButton(toolBarRadioButton, QStyle::PM_ToolBarIconSize);
+ QRadioButton *listViewRadioButton = new QRadioButton;
+ sizeButtonGroup->addButton(listViewRadioButton, QStyle::PM_ListViewIconSize);
+ QRadioButton *iconViewRadioButton = new QRadioButton;
+ sizeButtonGroup->addButton(iconViewRadioButton, QStyle::PM_IconViewIconSize);
+ QRadioButton *tabBarRadioButton = new QRadioButton;
+ sizeButtonGroup->addButton(tabBarRadioButton, QStyle::PM_TabBarIconSize);
+ QRadioButton *otherRadioButton = new QRadioButton(tr("Other:"));
+ sizeButtonGroup->addButton(otherRadioButton, OtherSize);
+ otherSpinBox = new IconSizeSpinBox;
+ otherSpinBox->setRange(8, 256);
+ const QString spinBoxToolTip =
+ tr("Enter a custom size within %1..%2")
+ .arg(otherSpinBox->minimum()).arg(otherSpinBox->maximum());
+ otherSpinBox->setValue(64);
+ otherSpinBox->setToolTip(spinBoxToolTip);
+ otherRadioButton->setToolTip(spinBoxToolTip);
+//! [26]
+
+//! [27]
+ connect(otherSpinBox, &QSpinBox::valueChanged,
+ this, &MainWindow::triggerChangeSize);
+
+ QHBoxLayout *otherSizeLayout = new QHBoxLayout;
+ otherSizeLayout->addWidget(otherRadioButton);
+ otherSizeLayout->addWidget(otherSpinBox);
+ otherSizeLayout->addStretch();
+
+ QGridLayout *layout = new QGridLayout(iconSizeGroupBox);
+ layout->addWidget(smallRadioButton, 0, 0);
+ layout->addWidget(largeRadioButton, 1, 0);
+ layout->addWidget(toolBarRadioButton, 2, 0);
+ layout->addWidget(listViewRadioButton, 0, 1);
+ layout->addWidget(iconViewRadioButton, 1, 1);
+ layout->addWidget(tabBarRadioButton, 2, 1);
+ layout->addLayout(otherSizeLayout, 3, 0, 1, 2);
+ layout->setRowStretch(4, 1);
+ return iconSizeGroupBox;
+//! [27]
+}
+
+void MainWindow::screenChanged()
+{
+ devicePixelRatioLabel->setText(QString::number(devicePixelRatio()));
+ if (const QWindow *window = windowHandle()) {
+ const QScreen *screen = window->screen();
+ const QString screenDescription =
+ tr("\"%1\" (%2x%3)").arg(screen->name())
+ .arg(screen->geometry().width()).arg(screen->geometry().height());
+ screenNameLabel->setText(screenDescription);
+ }
+ changeIcon();
+}
+
+QWidget *MainWindow::createHighDpiIconSizeGroupBox()
+{
+ QGroupBox *highDpiGroupBox = new QGroupBox(tr("High DPI Scaling"));
+ QFormLayout *layout = new QFormLayout(highDpiGroupBox);
+ devicePixelRatioLabel = new QLabel(highDpiGroupBox);
+ screenNameLabel = new QLabel(highDpiGroupBox);
+ layout->addRow(tr("Screen:"), screenNameLabel);
+ layout->addRow(tr("Device pixel ratio:"), devicePixelRatioLabel);
+ return highDpiGroupBox;
+}
+
+//! [28]
+void MainWindow::createActions()
+{
+ QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
+
+ addSampleImagesAct = new QAction(tr("Add &Sample Images..."), this);
+ addSampleImagesAct->setShortcut(tr("Ctrl+A"));
+ connect(addSampleImagesAct, &QAction::triggered, this, &MainWindow::addSampleImages);
+ fileMenu->addAction(addSampleImagesAct);
+
+ addOtherImagesAct = new QAction(tr("&Add Images..."), this);
+ addOtherImagesAct->setShortcut(QKeySequence::Open);
+ connect(addOtherImagesAct, &QAction::triggered, this, &MainWindow::addOtherImages);
+ fileMenu->addAction(addOtherImagesAct);
+
+ removeAllImagesAct = new QAction(tr("&Remove All Images"), this);
+ removeAllImagesAct->setShortcut(tr("Ctrl+R"));
+ connect(removeAllImagesAct, &QAction::triggered,
+ this, &MainWindow::removeAllImages);
+ fileMenu->addAction(removeAllImagesAct);
+
+ fileMenu->addSeparator();
+
+ QAction *exitAct = fileMenu->addAction(tr("&Quit"), qApp, &QCoreApplication::quit);
+ exitAct->setShortcuts(QKeySequence::Quit);
+
+ QMenu *viewMenu = menuBar()->addMenu(tr("&View"));
+
+ styleActionGroup = new QActionGroup(this);
+ const QStringList styleKeys = QStyleFactory::keys();
+ for (const QString &styleName : styleKeys) {
+ QAction *action = new QAction(tr("%1 Style").arg(styleName), styleActionGroup);
+ action->setData(styleName);
+ action->setCheckable(true);
+ connect(action, &QAction::triggered, this, &MainWindow::changeStyle);
+ viewMenu->addAction(action);
+ }
+
+ QMenu *settingsMenu = menuBar()->addMenu(tr("&Settings"));
+
+ guessModeStateAct = new QAction(tr("&Guess Image Mode/State"), this);
+ guessModeStateAct->setCheckable(true);
+ guessModeStateAct->setChecked(true);
+ settingsMenu->addAction(guessModeStateAct);
+
+ nativeFileDialogAct = new QAction(tr("&Use Native File Dialog"), this);
+ nativeFileDialogAct->setCheckable(true);
+ nativeFileDialogAct->setChecked(true);
+ settingsMenu->addAction(nativeFileDialogAct);
+
+ QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
+ helpMenu->addAction(tr("&About"), this, &MainWindow::about);
+ helpMenu->addAction(tr("About &Qt"), qApp, &QApplication::aboutQt);
+}
+//! [28]
+
+//! [30]
+void MainWindow::createContextMenu()
+{
+ imagesTable->setContextMenuPolicy(Qt::ActionsContextMenu);
+ imagesTable->addAction(addSampleImagesAct);
+ imagesTable->addAction(addOtherImagesAct);
+ imagesTable->addAction(removeAllImagesAct);
+}
+//! [30]
+
+//! [31]
+void MainWindow::checkCurrentStyle()
+{
+ const QList<QAction *> actions = styleActionGroup->actions();
+ for (QAction *action : actions) {
+ const QString styleName = action->data().toString();
+ const std::unique_ptr<QStyle> candidate{QStyleFactory::create(styleName)};
+ Q_ASSERT(candidate);
+ if (candidate->metaObject()->className()
+ == QApplication::style()->metaObject()->className()) {
+ action->trigger();
+ return;
+ }
+ }
+}
+//! [31]
diff --git a/tests/manual/examples/widgets/widgets/icons/mainwindow.h b/tests/manual/examples/widgets/widgets/icons/mainwindow.h
new file mode 100644
index 0000000000..fb6e0493f7
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/icons/mainwindow.h
@@ -0,0 +1,74 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QIcon>
+#include <QList>
+#include <QMainWindow>
+#include <QPixmap>
+
+QT_BEGIN_NAMESPACE
+class QAction;
+class QActionGroup;
+class QLabel;
+class QButtonGroup;
+class QTableWidget;
+class QAbstractButton;
+QT_END_NAMESPACE
+class IconPreviewArea;
+class IconSizeSpinBox;
+
+//! [0]
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+
+ void loadImages(const QStringList &fileNames);
+
+ void show();
+
+private slots:
+ void about();
+ void changeStyle(bool checked);
+ void changeSize(QAbstractButton *button, bool);
+ void triggerChangeSize();
+ void changeIcon();
+ void addSampleImages();
+ void addOtherImages();
+ void removeAllImages();
+ void screenChanged();
+
+private:
+ QWidget *createImagesGroupBox();
+ QWidget *createIconSizeGroupBox();
+ QWidget *createHighDpiIconSizeGroupBox();
+ void createActions();
+ void createContextMenu();
+ void checkCurrentStyle();
+ void addImages(const QString &directory);
+
+ IconPreviewArea *previewArea;
+
+ QTableWidget *imagesTable;
+
+ QButtonGroup *sizeButtonGroup;
+ IconSizeSpinBox *otherSpinBox;
+
+ QLabel *devicePixelRatioLabel;
+ QLabel *screenNameLabel;
+
+ QAction *addOtherImagesAct;
+ QAction *addSampleImagesAct;
+ QAction *removeAllImagesAct;
+ QAction *guessModeStateAct;
+ QAction *nativeFileDialogAct;
+ QActionGroup *styleActionGroup;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/imageviewer/CMakeLists.txt b/tests/manual/examples/widgets/widgets/imageviewer/CMakeLists.txt
new file mode 100644
index 0000000000..fd2f051210
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/imageviewer/CMakeLists.txt
@@ -0,0 +1,44 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(imageviewer LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/imageviewer")
+
+find_package(Qt6
+ REQUIRED COMPONENTS Core Gui Widgets
+ OPTIONAL_COMPONENTS PrintSupport
+)
+
+qt_standard_project_setup()
+
+qt_add_executable(imageviewer
+ imageviewer.cpp imageviewer.h
+ main.cpp
+)
+
+set_target_properties(imageviewer PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(imageviewer PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+if (TARGET Qt6::PrintSupport)
+ target_link_libraries(imageviewer PRIVATE Qt6::PrintSupport)
+endif()
+
+install(TARGETS imageviewer
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/widgets/imageviewer/imageviewer.cpp b/tests/manual/examples/widgets/widgets/imageviewer/imageviewer.cpp
new file mode 100644
index 0000000000..72a93dbf1b
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/imageviewer/imageviewer.cpp
@@ -0,0 +1,364 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "imageviewer.h"
+
+#include <QApplication>
+#include <QClipboard>
+#include <QColorSpace>
+#include <QDir>
+#include <QFileDialog>
+#include <QImageReader>
+#include <QImageWriter>
+#include <QLabel>
+#include <QMenuBar>
+#include <QMessageBox>
+#include <QMimeData>
+#include <QPainter>
+#include <QScreen>
+#include <QScrollArea>
+#include <QScrollBar>
+#include <QStandardPaths>
+#include <QStatusBar>
+
+#if defined(QT_PRINTSUPPORT_LIB)
+# include <QtPrintSupport/qtprintsupportglobal.h>
+
+# if QT_CONFIG(printdialog)
+# include <QPrintDialog>
+# endif
+#endif
+
+//! [0]
+ImageViewer::ImageViewer(QWidget *parent)
+ : QMainWindow(parent), imageLabel(new QLabel)
+ , scrollArea(new QScrollArea)
+{
+ imageLabel->setBackgroundRole(QPalette::Base);
+ imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
+ imageLabel->setScaledContents(true);
+
+ scrollArea->setBackgroundRole(QPalette::Dark);
+ scrollArea->setWidget(imageLabel);
+ scrollArea->setVisible(false);
+ setCentralWidget(scrollArea);
+
+ createActions();
+
+ resize(QGuiApplication::primaryScreen()->availableSize() * 3 / 5);
+}
+
+//! [0]
+//! [2]
+
+bool ImageViewer::loadFile(const QString &fileName)
+{
+ QImageReader reader(fileName);
+ reader.setAutoTransform(true);
+ const QImage newImage = reader.read();
+ if (newImage.isNull()) {
+ QMessageBox::information(this, QGuiApplication::applicationDisplayName(),
+ tr("Cannot load %1: %2")
+ .arg(QDir::toNativeSeparators(fileName), reader.errorString()));
+ return false;
+ }
+//! [2]
+
+ setImage(newImage);
+
+ setWindowFilePath(fileName);
+
+ const QString description = image.colorSpace().isValid()
+ ? image.colorSpace().description() : tr("unknown");
+ const QString message = tr("Opened \"%1\", %2x%3, Depth: %4 (%5)")
+ .arg(QDir::toNativeSeparators(fileName)).arg(image.width()).arg(image.height())
+ .arg(image.depth()).arg(description);
+ statusBar()->showMessage(message);
+ return true;
+}
+
+void ImageViewer::setImage(const QImage &newImage)
+{
+ if (newImage.colorSpace().isValid())
+ image = newImage.convertedToColorSpace(QColorSpace::SRgb);
+ else
+ image = newImage;
+ imageLabel->setPixmap(QPixmap::fromImage(image, Qt::NoFormatConversion));
+//! [4]
+ scaleFactor = 1.0;
+
+ scrollArea->setVisible(true);
+ printAct->setEnabled(true);
+ fitToWindowAct->setEnabled(true);
+ updateActions();
+
+ if (!fitToWindowAct->isChecked())
+ imageLabel->adjustSize();
+}
+
+//! [4]
+
+bool ImageViewer::saveFile(const QString &fileName)
+{
+ QImageWriter writer(fileName);
+
+ if (!writer.write(image)) {
+ QMessageBox::information(this, QGuiApplication::applicationDisplayName(),
+ tr("Cannot write %1: %2")
+ .arg(QDir::toNativeSeparators(fileName), writer.errorString()));
+ return false;
+ }
+ const QString message = tr("Wrote \"%1\"").arg(QDir::toNativeSeparators(fileName));
+ statusBar()->showMessage(message);
+ return true;
+}
+
+//! [1]
+
+static void initializeImageFileDialog(QFileDialog &dialog, QFileDialog::AcceptMode acceptMode)
+{
+ static bool firstDialog = true;
+
+ if (firstDialog) {
+ firstDialog = false;
+ const QStringList picturesLocations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation);
+ dialog.setDirectory(picturesLocations.isEmpty() ? QDir::currentPath() : picturesLocations.last());
+ }
+
+ QStringList mimeTypeFilters;
+ const QByteArrayList supportedMimeTypes = acceptMode == QFileDialog::AcceptOpen
+ ? QImageReader::supportedMimeTypes() : QImageWriter::supportedMimeTypes();
+ for (const QByteArray &mimeTypeName : supportedMimeTypes)
+ mimeTypeFilters.append(mimeTypeName);
+ mimeTypeFilters.sort();
+ dialog.setMimeTypeFilters(mimeTypeFilters);
+ dialog.selectMimeTypeFilter("image/jpeg");
+ dialog.setAcceptMode(acceptMode);
+ if (acceptMode == QFileDialog::AcceptSave)
+ dialog.setDefaultSuffix("jpg");
+}
+
+void ImageViewer::open()
+{
+ QFileDialog dialog(this, tr("Open File"));
+ initializeImageFileDialog(dialog, QFileDialog::AcceptOpen);
+
+ while (dialog.exec() == QDialog::Accepted && !loadFile(dialog.selectedFiles().constFirst())) {}
+}
+//! [1]
+
+void ImageViewer::saveAs()
+{
+ QFileDialog dialog(this, tr("Save File As"));
+ initializeImageFileDialog(dialog, QFileDialog::AcceptSave);
+
+ while (dialog.exec() == QDialog::Accepted && !saveFile(dialog.selectedFiles().constFirst())) {}
+}
+
+//! [5]
+void ImageViewer::print()
+//! [5] //! [6]
+{
+ Q_ASSERT(!imageLabel->pixmap().isNull());
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printdialog)
+//! [6] //! [7]
+ QPrintDialog dialog(&printer, this);
+//! [7] //! [8]
+ if (dialog.exec()) {
+ QPainter painter(&printer);
+ QPixmap pixmap = imageLabel->pixmap();
+ QRect rect = painter.viewport();
+ QSize size = pixmap.size();
+ size.scale(rect.size(), Qt::KeepAspectRatio);
+ painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
+ painter.setWindow(pixmap.rect());
+ painter.drawPixmap(0, 0, pixmap);
+ }
+#endif
+}
+//! [8]
+
+void ImageViewer::copy()
+{
+#ifndef QT_NO_CLIPBOARD
+ QGuiApplication::clipboard()->setImage(image);
+#endif // !QT_NO_CLIPBOARD
+}
+
+#ifndef QT_NO_CLIPBOARD
+static QImage clipboardImage()
+{
+ if (const QMimeData *mimeData = QGuiApplication::clipboard()->mimeData()) {
+ if (mimeData->hasImage()) {
+ const QImage image = qvariant_cast<QImage>(mimeData->imageData());
+ if (!image.isNull())
+ return image;
+ }
+ }
+ return QImage();
+}
+#endif // !QT_NO_CLIPBOARD
+
+void ImageViewer::paste()
+{
+#ifndef QT_NO_CLIPBOARD
+ const QImage newImage = clipboardImage();
+ if (newImage.isNull()) {
+ statusBar()->showMessage(tr("No image in clipboard"));
+ } else {
+ setImage(newImage);
+ setWindowFilePath(QString());
+ const QString message = tr("Obtained image from clipboard, %1x%2, Depth: %3")
+ .arg(newImage.width()).arg(newImage.height()).arg(newImage.depth());
+ statusBar()->showMessage(message);
+ }
+#endif // !QT_NO_CLIPBOARD
+}
+
+//! [9]
+void ImageViewer::zoomIn()
+//! [9] //! [10]
+{
+ scaleImage(1.25);
+}
+
+void ImageViewer::zoomOut()
+{
+ scaleImage(0.8);
+}
+
+//! [10] //! [11]
+void ImageViewer::normalSize()
+//! [11] //! [12]
+{
+ imageLabel->adjustSize();
+ scaleFactor = 1.0;
+}
+//! [12]
+
+//! [13]
+void ImageViewer::fitToWindow()
+//! [13] //! [14]
+{
+ bool fitToWindow = fitToWindowAct->isChecked();
+ scrollArea->setWidgetResizable(fitToWindow);
+ if (!fitToWindow)
+ normalSize();
+ updateActions();
+}
+//! [14]
+
+
+//! [15]
+void ImageViewer::about()
+//! [15] //! [16]
+{
+ QMessageBox::about(this, tr("About Image Viewer"),
+ tr("<p>The <b>Image Viewer</b> example shows how to combine QLabel "
+ "and QScrollArea to display an image. QLabel is typically used "
+ "for displaying a text, but it can also display an image. "
+ "QScrollArea provides a scrolling view around another widget. "
+ "If the child widget exceeds the size of the frame, QScrollArea "
+ "automatically provides scroll bars. </p><p>The example "
+ "demonstrates how QLabel's ability to scale its contents "
+ "(QLabel::scaledContents), and QScrollArea's ability to "
+ "automatically resize its contents "
+ "(QScrollArea::widgetResizable), can be used to implement "
+ "zooming and scaling features. </p><p>In addition the example "
+ "shows how to use QPainter to print an image.</p>"));
+}
+//! [16]
+
+//! [17]
+void ImageViewer::createActions()
+//! [17] //! [18]
+{
+ QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
+
+ QAction *openAct = fileMenu->addAction(tr("&Open..."), this, &ImageViewer::open);
+ openAct->setShortcut(QKeySequence::Open);
+
+ saveAsAct = fileMenu->addAction(tr("&Save As..."), this, &ImageViewer::saveAs);
+ saveAsAct->setEnabled(false);
+
+ printAct = fileMenu->addAction(tr("&Print..."), this, &ImageViewer::print);
+ printAct->setShortcut(QKeySequence::Print);
+ printAct->setEnabled(false);
+
+ fileMenu->addSeparator();
+
+ QAction *exitAct = fileMenu->addAction(tr("E&xit"), this, &QWidget::close);
+ exitAct->setShortcut(tr("Ctrl+Q"));
+
+ QMenu *editMenu = menuBar()->addMenu(tr("&Edit"));
+
+ copyAct = editMenu->addAction(tr("&Copy"), this, &ImageViewer::copy);
+ copyAct->setShortcut(QKeySequence::Copy);
+ copyAct->setEnabled(false);
+
+ QAction *pasteAct = editMenu->addAction(tr("&Paste"), this, &ImageViewer::paste);
+ pasteAct->setShortcut(QKeySequence::Paste);
+
+ QMenu *viewMenu = menuBar()->addMenu(tr("&View"));
+
+ zoomInAct = viewMenu->addAction(tr("Zoom &In (25%)"), this, &ImageViewer::zoomIn);
+ zoomInAct->setShortcut(QKeySequence::ZoomIn);
+ zoomInAct->setEnabled(false);
+
+ zoomOutAct = viewMenu->addAction(tr("Zoom &Out (25%)"), this, &ImageViewer::zoomOut);
+ zoomOutAct->setShortcut(QKeySequence::ZoomOut);
+ zoomOutAct->setEnabled(false);
+
+ normalSizeAct = viewMenu->addAction(tr("&Normal Size"), this, &ImageViewer::normalSize);
+ normalSizeAct->setShortcut(tr("Ctrl+S"));
+ normalSizeAct->setEnabled(false);
+
+ viewMenu->addSeparator();
+
+ fitToWindowAct = viewMenu->addAction(tr("&Fit to Window"), this, &ImageViewer::fitToWindow);
+ fitToWindowAct->setEnabled(false);
+ fitToWindowAct->setCheckable(true);
+ fitToWindowAct->setShortcut(tr("Ctrl+F"));
+
+ QMenu *helpMenu = menuBar()->addMenu(tr("&Help"));
+
+ helpMenu->addAction(tr("&About"), this, &ImageViewer::about);
+ helpMenu->addAction(tr("About &Qt"), this, &QApplication::aboutQt);
+}
+//! [18]
+
+//! [21]
+void ImageViewer::updateActions()
+//! [21] //! [22]
+{
+ saveAsAct->setEnabled(!image.isNull());
+ copyAct->setEnabled(!image.isNull());
+ zoomInAct->setEnabled(!fitToWindowAct->isChecked());
+ zoomOutAct->setEnabled(!fitToWindowAct->isChecked());
+ normalSizeAct->setEnabled(!fitToWindowAct->isChecked());
+}
+//! [22]
+
+//! [23]
+void ImageViewer::scaleImage(double factor)
+//! [23] //! [24]
+{
+ scaleFactor *= factor;
+ imageLabel->resize(scaleFactor * imageLabel->pixmap().size());
+
+ adjustScrollBar(scrollArea->horizontalScrollBar(), factor);
+ adjustScrollBar(scrollArea->verticalScrollBar(), factor);
+
+ zoomInAct->setEnabled(scaleFactor < 3.0);
+ zoomOutAct->setEnabled(scaleFactor > 0.333);
+}
+//! [24]
+
+//! [25]
+void ImageViewer::adjustScrollBar(QScrollBar *scrollBar, double factor)
+//! [25] //! [26]
+{
+ scrollBar->setValue(int(factor * scrollBar->value()
+ + ((factor - 1) * scrollBar->pageStep()/2)));
+}
+//! [26]
diff --git a/tests/manual/examples/widgets/widgets/imageviewer/imageviewer.h b/tests/manual/examples/widgets/widgets/imageviewer/imageviewer.h
new file mode 100644
index 0000000000..e9e6858c74
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/imageviewer/imageviewer.h
@@ -0,0 +1,74 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef IMAGEVIEWER_H
+#define IMAGEVIEWER_H
+
+#include <QMainWindow>
+#include <QImage>
+#if defined(QT_PRINTSUPPORT_LIB)
+# include <QtPrintSupport/qtprintsupportglobal.h>
+
+# if QT_CONFIG(printer)
+# include <QPrinter>
+# endif
+#endif
+
+QT_BEGIN_NAMESPACE
+class QAction;
+class QLabel;
+class QMenu;
+class QScrollArea;
+class QScrollBar;
+QT_END_NAMESPACE
+
+//! [0]
+class ImageViewer : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ ImageViewer(QWidget *parent = nullptr);
+ bool loadFile(const QString &);
+
+private slots:
+ void open();
+ void saveAs();
+ void print();
+ void copy();
+ void paste();
+ void zoomIn();
+ void zoomOut();
+ void normalSize();
+ void fitToWindow();
+ void about();
+
+private:
+ void createActions();
+ void createMenus();
+ void updateActions();
+ bool saveFile(const QString &fileName);
+ void setImage(const QImage &newImage);
+ void scaleImage(double factor);
+ void adjustScrollBar(QScrollBar *scrollBar, double factor);
+
+ QImage image;
+ QLabel *imageLabel;
+ QScrollArea *scrollArea;
+ double scaleFactor = 1;
+
+#if defined(QT_PRINTSUPPORT_LIB) && QT_CONFIG(printer)
+ QPrinter printer;
+#endif
+
+ QAction *saveAsAct;
+ QAction *printAct;
+ QAction *copyAct;
+ QAction *zoomInAct;
+ QAction *zoomOutAct;
+ QAction *normalSizeAct;
+ QAction *fitToWindowAct;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/imageviewer/imageviewer.pro b/tests/manual/examples/widgets/widgets/imageviewer/imageviewer.pro
new file mode 100644
index 0000000000..d3db63ec20
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/imageviewer/imageviewer.pro
@@ -0,0 +1,11 @@
+QT += widgets
+requires(qtConfig(filedialog))
+qtHaveModule(printsupport): QT += printsupport
+
+HEADERS = imageviewer.h
+SOURCES = imageviewer.cpp \
+ main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/imageviewer
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/widgets/imageviewer/main.cpp b/tests/manual/examples/widgets/widgets/imageviewer/main.cpp
new file mode 100644
index 0000000000..013f7d8689
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/imageviewer/main.cpp
@@ -0,0 +1,24 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+#include <QCommandLineParser>
+
+#include "imageviewer.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ QGuiApplication::setApplicationDisplayName(ImageViewer::tr("Image Viewer"));
+ QCommandLineParser commandLineParser;
+ commandLineParser.addHelpOption();
+ commandLineParser.addPositionalArgument(ImageViewer::tr("[file]"), ImageViewer::tr("Image file to open."));
+ commandLineParser.process(QCoreApplication::arguments());
+ ImageViewer imageViewer;
+ if (!commandLineParser.positionalArguments().isEmpty()
+ && !imageViewer.loadFile(commandLineParser.positionalArguments().constFirst())) {
+ return -1;
+ }
+ imageViewer.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/widgets/movie/CMakeLists.txt b/tests/manual/examples/widgets/widgets/movie/CMakeLists.txt
new file mode 100644
index 0000000000..49b766a11d
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/movie/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(movie LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/movie")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(movie
+ main.cpp
+ movieplayer.cpp movieplayer.h
+)
+
+set_target_properties(movie PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(movie PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS movie
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/widgets/movie/animation.gif b/tests/manual/examples/widgets/widgets/movie/animation.gif
new file mode 100644
index 0000000000..f674369efc
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/movie/animation.gif
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/movie/main.cpp b/tests/manual/examples/widgets/widgets/movie/main.cpp
new file mode 100644
index 0000000000..e5d4d3f040
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/movie/main.cpp
@@ -0,0 +1,15 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "movieplayer.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MoviePlayer player;
+ player.show();
+ player.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/widgets/movie/movie.pro b/tests/manual/examples/widgets/widgets/movie/movie.pro
new file mode 100644
index 0000000000..f9f89109e4
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/movie/movie.pro
@@ -0,0 +1,12 @@
+QT += widgets
+requires(qtConfig(filedialog))
+
+HEADERS = movieplayer.h
+SOURCES = main.cpp \
+ movieplayer.cpp
+
+EXAMPLE_FILES = animation.gif
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/movie
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/widgets/movie/movieplayer.cpp b/tests/manual/examples/widgets/widgets/movie/movieplayer.cpp
new file mode 100644
index 0000000000..6f6ec14bb1
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/movie/movieplayer.cpp
@@ -0,0 +1,180 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "movieplayer.h"
+
+#include <QCheckBox>
+#include <QFileDialog>
+#include <QLabel>
+#include <QMovie>
+#include <QSlider>
+#include <QSpinBox>
+#include <QStyle>
+#include <QToolButton>
+#include <QVBoxLayout>
+
+MoviePlayer::MoviePlayer(QWidget *parent)
+ : QWidget(parent)
+{
+ movie = new QMovie(this);
+ movie->setCacheMode(QMovie::CacheAll);
+
+ movieLabel = new QLabel(tr("No movie loaded"));
+ movieLabel->setAlignment(Qt::AlignCenter);
+ movieLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
+ movieLabel->setBackgroundRole(QPalette::Dark);
+ movieLabel->setAutoFillBackground(true);
+
+ currentMovieDirectory = "movies";
+
+ createControls();
+ createButtons();
+
+ connect(movie, &QMovie::frameChanged, this, &MoviePlayer::updateFrameSlider);
+ connect(movie, &QMovie::stateChanged, this, &MoviePlayer::updateButtons);
+ connect(fitCheckBox, &QCheckBox::clicked, this, &MoviePlayer::fitToWindow);
+ connect(frameSlider, &QSlider::valueChanged, this, &MoviePlayer::goToFrame);
+ connect(speedSpinBox, &QSpinBox::valueChanged,
+ movie, &QMovie::setSpeed);
+
+ mainLayout = new QVBoxLayout;
+ mainLayout->addWidget(movieLabel);
+ mainLayout->addLayout(controlsLayout);
+ mainLayout->addLayout(buttonsLayout);
+ setLayout(mainLayout);
+
+ updateFrameSlider();
+ updateButtons();
+
+ setWindowTitle(tr("Movie Player"));
+ resize(400, 400);
+}
+
+void MoviePlayer::open()
+{
+ QString fileName = QFileDialog::getOpenFileName(this, tr("Open a Movie"),
+ currentMovieDirectory);
+ if (!fileName.isEmpty())
+ openFile(fileName);
+}
+
+void MoviePlayer::openFile(const QString &fileName)
+{
+ currentMovieDirectory = QFileInfo(fileName).path();
+
+ movie->stop();
+ movieLabel->setMovie(movie);
+ movie->setFileName(fileName);
+ movie->start();
+
+ updateFrameSlider();
+ updateButtons();
+}
+
+void MoviePlayer::goToFrame(int frame)
+{
+ movie->jumpToFrame(frame);
+}
+
+void MoviePlayer::fitToWindow()
+{
+ movieLabel->setScaledContents(fitCheckBox->isChecked());
+}
+
+void MoviePlayer::updateFrameSlider()
+{
+ bool hasFrames = (movie->currentFrameNumber() >= 0);
+
+ if (hasFrames) {
+ if (movie->frameCount() > 0) {
+ frameSlider->setMaximum(movie->frameCount() - 1);
+ } else {
+ if (movie->currentFrameNumber() > frameSlider->maximum())
+ frameSlider->setMaximum(movie->currentFrameNumber());
+ }
+ frameSlider->setValue(movie->currentFrameNumber());
+ } else {
+ frameSlider->setMaximum(0);
+ }
+ frameLabel->setEnabled(hasFrames);
+ frameSlider->setEnabled(hasFrames);
+}
+
+void MoviePlayer::updateButtons()
+{
+ playButton->setEnabled(movie->isValid() && movie->frameCount() != 1
+ && movie->state() == QMovie::NotRunning);
+ pauseButton->setEnabled(movie->state() != QMovie::NotRunning);
+ pauseButton->setChecked(movie->state() == QMovie::Paused);
+ stopButton->setEnabled(movie->state() != QMovie::NotRunning);
+}
+
+void MoviePlayer::createControls()
+{
+ fitCheckBox = new QCheckBox(tr("Fit to Window"));
+
+ frameLabel = new QLabel(tr("Current frame:"));
+
+ frameSlider = new QSlider(Qt::Horizontal);
+ frameSlider->setTickPosition(QSlider::TicksBelow);
+ frameSlider->setTickInterval(10);
+
+ speedLabel = new QLabel(tr("Speed:"));
+
+ speedSpinBox = new QSpinBox;
+ speedSpinBox->setRange(1, 9999);
+ speedSpinBox->setValue(100);
+ speedSpinBox->setSuffix(tr("%"));
+
+ controlsLayout = new QGridLayout;
+ controlsLayout->addWidget(fitCheckBox, 0, 0, 1, 2);
+ controlsLayout->addWidget(frameLabel, 1, 0);
+ controlsLayout->addWidget(frameSlider, 1, 1, 1, 2);
+ controlsLayout->addWidget(speedLabel, 2, 0);
+ controlsLayout->addWidget(speedSpinBox, 2, 1);
+}
+
+void MoviePlayer::createButtons()
+{
+ QSize iconSize(36, 36);
+
+ openButton = new QToolButton;
+ openButton->setIcon(style()->standardIcon(QStyle::SP_DialogOpenButton));
+ openButton->setIconSize(iconSize);
+ openButton->setToolTip(tr("Open File"));
+ connect(openButton, &QToolButton::clicked, this, &MoviePlayer::open);
+
+ playButton = new QToolButton;
+ playButton->setIcon(style()->standardIcon(QStyle::SP_MediaPlay));
+ playButton->setIconSize(iconSize);
+ playButton->setToolTip(tr("Play"));
+ connect(playButton, &QToolButton::clicked, movie, &QMovie::start);
+
+ pauseButton = new QToolButton;
+ pauseButton->setCheckable(true);
+ pauseButton->setIcon(style()->standardIcon(QStyle::SP_MediaPause));
+ pauseButton->setIconSize(iconSize);
+ pauseButton->setToolTip(tr("Pause"));
+ connect(pauseButton, &QToolButton::clicked, movie, &QMovie::setPaused);
+
+ stopButton = new QToolButton;
+ stopButton->setIcon(style()->standardIcon(QStyle::SP_MediaStop));
+ stopButton->setIconSize(iconSize);
+ stopButton->setToolTip(tr("Stop"));
+ connect(stopButton, &QToolButton::clicked, movie, &QMovie::stop);
+
+ quitButton = new QToolButton;
+ quitButton->setIcon(style()->standardIcon(QStyle::SP_DialogCloseButton));
+ quitButton->setIconSize(iconSize);
+ quitButton->setToolTip(tr("Quit"));
+ connect(quitButton, &QToolButton::clicked, this, &MoviePlayer::close);
+
+ buttonsLayout = new QHBoxLayout;
+ buttonsLayout->addStretch();
+ buttonsLayout->addWidget(openButton);
+ buttonsLayout->addWidget(playButton);
+ buttonsLayout->addWidget(pauseButton);
+ buttonsLayout->addWidget(stopButton);
+ buttonsLayout->addWidget(quitButton);
+ buttonsLayout->addStretch();
+}
diff --git a/tests/manual/examples/widgets/widgets/movie/movieplayer.h b/tests/manual/examples/widgets/widgets/movie/movieplayer.h
new file mode 100644
index 0000000000..362fd50535
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/movie/movieplayer.h
@@ -0,0 +1,59 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef MOVIEPLAYER_H
+#define MOVIEPLAYER_H
+
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QCheckBox;
+class QGridLayout;
+class QHBoxLayout;
+class QLabel;
+class QMovie;
+class QSlider;
+class QSpinBox;
+class QToolButton;
+class QVBoxLayout;
+QT_END_NAMESPACE
+
+class MoviePlayer : public QWidget
+{
+ Q_OBJECT
+
+public:
+ MoviePlayer(QWidget *parent = nullptr);
+ void openFile(const QString &fileName);
+
+private slots:
+ void open();
+ void goToFrame(int frame);
+ void fitToWindow();
+ void updateButtons();
+ void updateFrameSlider();
+
+private:
+ void createControls();
+ void createButtons();
+
+ QString currentMovieDirectory;
+ QLabel *movieLabel;
+ QMovie *movie;
+ QToolButton *openButton;
+ QToolButton *playButton;
+ QToolButton *pauseButton;
+ QToolButton *stopButton;
+ QToolButton *quitButton;
+ QCheckBox *fitCheckBox;
+ QSlider *frameSlider;
+ QSpinBox *speedSpinBox;
+ QLabel *frameLabel;
+ QLabel *speedLabel;
+
+ QGridLayout *controlsLayout;
+ QHBoxLayout *buttonsLayout;
+ QVBoxLayout *mainLayout;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/styles/CMakeLists.txt b/tests/manual/examples/widgets/widgets/styles/CMakeLists.txt
new file mode 100644
index 0000000000..ff1d64b9d9
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/styles/CMakeLists.txt
@@ -0,0 +1,51 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(styles LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/styles")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(styles
+ main.cpp
+ norwegianwoodstyle.cpp norwegianwoodstyle.h
+ widgetgallery.cpp widgetgallery.h
+)
+
+set_target_properties(styles PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(styles PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(styles_resource_files
+ "images/woodbackground.png"
+ "images/woodbutton.png"
+)
+
+qt_add_resources(styles "styles"
+ PREFIX
+ "/"
+ FILES
+ ${styles_resource_files}
+)
+
+install(TARGETS styles
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/widgets/styles/images/woodbackground.png b/tests/manual/examples/widgets/widgets/styles/images/woodbackground.png
new file mode 100644
index 0000000000..8be3366bb4
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/styles/images/woodbackground.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/styles/images/woodbutton.png b/tests/manual/examples/widgets/widgets/styles/images/woodbutton.png
new file mode 100644
index 0000000000..adb59ef633
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/styles/images/woodbutton.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/styles/main.cpp b/tests/manual/examples/widgets/widgets/styles/main.cpp
new file mode 100644
index 0000000000..5c33895ea4
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/styles/main.cpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "norwegianwoodstyle.h"
+#include "widgetgallery.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication::setStyle(new NorwegianWoodStyle);
+
+ QApplication app(argc, argv);
+ WidgetGallery gallery;
+ gallery.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/widgets/styles/norwegianwoodstyle.cpp b/tests/manual/examples/widgets/widgets/styles/norwegianwoodstyle.cpp
new file mode 100644
index 0000000000..a8969dfd54
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/styles/norwegianwoodstyle.cpp
@@ -0,0 +1,310 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "norwegianwoodstyle.h"
+
+#include <QComboBox>
+#include <QPainter>
+#include <QPainterPath>
+#include <QPushButton>
+#include <QStyleFactory>
+
+NorwegianWoodStyle::NorwegianWoodStyle() :
+ QProxyStyle(QStyleFactory::create("windows"))
+{
+ setObjectName("NorwegianWood");
+}
+
+//! [0]
+QPalette NorwegianWoodStyle::standardPalette() const
+{
+ if (!m_standardPalette.isBrushSet(QPalette::Disabled, QPalette::Mid)) {
+ QColor brown(212, 140, 95);
+ QColor beige(236, 182, 120);
+ QColor slightlyOpaqueBlack(0, 0, 0, 63);
+
+ QImage backgroundImage(":/images/woodbackground.png");
+ QImage buttonImage(":/images/woodbutton.png");
+ QImage midImage = buttonImage.convertToFormat(QImage::Format_RGB32);
+
+ QPainter painter;
+ painter.begin(&midImage);
+ painter.setPen(Qt::NoPen);
+ painter.fillRect(midImage.rect(), slightlyOpaqueBlack);
+ painter.end();
+ //! [0]
+
+ //! [1]
+ QPalette palette(brown);
+
+ palette.setBrush(QPalette::BrightText, Qt::white);
+ palette.setBrush(QPalette::Base, beige);
+ palette.setBrush(QPalette::Highlight, Qt::darkGreen);
+ setTexture(palette, QPalette::Button, buttonImage);
+ setTexture(palette, QPalette::Mid, midImage);
+ setTexture(palette, QPalette::Window, backgroundImage);
+
+ QBrush brush = palette.window();
+ brush.setColor(brush.color().darker());
+
+ palette.setBrush(QPalette::Disabled, QPalette::WindowText, brush);
+ palette.setBrush(QPalette::Disabled, QPalette::Text, brush);
+ palette.setBrush(QPalette::Disabled, QPalette::ButtonText, brush);
+ palette.setBrush(QPalette::Disabled, QPalette::Base, brush);
+ palette.setBrush(QPalette::Disabled, QPalette::Button, brush);
+ palette.setBrush(QPalette::Disabled, QPalette::Mid, brush);
+
+ m_standardPalette = palette;
+ }
+
+ return m_standardPalette;
+}
+//! [1]
+
+//! [3]
+void NorwegianWoodStyle::polish(QWidget *widget)
+//! [3] //! [4]
+{
+ if (qobject_cast<QPushButton *>(widget)
+ || qobject_cast<QComboBox *>(widget))
+ widget->setAttribute(Qt::WA_Hover, true);
+}
+//! [4]
+
+//! [5]
+void NorwegianWoodStyle::unpolish(QWidget *widget)
+//! [5] //! [6]
+{
+ if (qobject_cast<QPushButton *>(widget)
+ || qobject_cast<QComboBox *>(widget))
+ widget->setAttribute(Qt::WA_Hover, false);
+}
+//! [6]
+
+//! [7]
+int NorwegianWoodStyle::pixelMetric(PixelMetric metric,
+//! [7] //! [8]
+ const QStyleOption *option,
+ const QWidget *widget) const
+{
+ switch (metric) {
+ case PM_ComboBoxFrameWidth:
+ return 8;
+ case PM_ScrollBarExtent:
+ return QProxyStyle::pixelMetric(metric, option, widget) + 4;
+ default:
+ return QProxyStyle::pixelMetric(metric, option, widget);
+ }
+}
+//! [8]
+
+//! [9]
+int NorwegianWoodStyle::styleHint(StyleHint hint, const QStyleOption *option,
+//! [9] //! [10]
+ const QWidget *widget,
+ QStyleHintReturn *returnData) const
+{
+ switch (hint) {
+ case SH_DitherDisabledText:
+ return int(false);
+ case SH_EtchDisabledText:
+ return int(true);
+ default:
+ return QProxyStyle::styleHint(hint, option, widget, returnData);
+ }
+}
+//! [10]
+
+//! [11]
+void NorwegianWoodStyle::drawPrimitive(PrimitiveElement element,
+//! [11] //! [12]
+ const QStyleOption *option,
+ QPainter *painter,
+ const QWidget *widget) const
+{
+ switch (element) {
+ case PE_PanelButtonCommand:
+ {
+ int delta = (option->state & State_MouseOver) ? 64 : 0;
+ QColor slightlyOpaqueBlack(0, 0, 0, 63);
+ QColor semiTransparentWhite(255, 255, 255, 127 + delta);
+ QColor semiTransparentBlack(0, 0, 0, 127 - delta);
+
+ int x, y, width, height;
+ option->rect.getRect(&x, &y, &width, &height);
+//! [12]
+
+//! [13]
+ QPainterPath roundRect = roundRectPath(option->rect);
+//! [13] //! [14]
+ int radius = qMin(width, height) / 2;
+//! [14]
+
+//! [15]
+ QBrush brush;
+//! [15] //! [16]
+ bool darker;
+
+ const QStyleOptionButton *buttonOption =
+ qstyleoption_cast<const QStyleOptionButton *>(option);
+ if (buttonOption
+ && (buttonOption->features & QStyleOptionButton::Flat)) {
+ brush = option->palette.window();
+ darker = (option->state & (State_Sunken | State_On));
+ } else {
+ if (option->state & (State_Sunken | State_On)) {
+ brush = option->palette.mid();
+ darker = !(option->state & State_Sunken);
+ } else {
+ brush = option->palette.button();
+ darker = false;
+//! [16] //! [17]
+ }
+//! [17] //! [18]
+ }
+//! [18]
+
+//! [19]
+ painter->save();
+//! [19] //! [20]
+ painter->setRenderHint(QPainter::Antialiasing, true);
+//! [20] //! [21]
+ painter->fillPath(roundRect, brush);
+//! [21] //! [22]
+ if (darker)
+//! [22] //! [23]
+ painter->fillPath(roundRect, slightlyOpaqueBlack);
+//! [23]
+
+//! [24]
+ int penWidth;
+//! [24] //! [25]
+ if (radius < 10)
+ penWidth = 3;
+ else if (radius < 20)
+ penWidth = 5;
+ else
+ penWidth = 7;
+
+ QPen topPen(semiTransparentWhite, penWidth);
+ QPen bottomPen(semiTransparentBlack, penWidth);
+
+ if (option->state & (State_Sunken | State_On))
+ qSwap(topPen, bottomPen);
+//! [25]
+
+//! [26]
+ int x1 = x;
+ int x2 = x + radius;
+ int x3 = x + width - radius;
+ int x4 = x + width;
+
+ if (option->direction == Qt::RightToLeft) {
+ qSwap(x1, x4);
+ qSwap(x2, x3);
+ }
+
+ QPolygon topHalf;
+ topHalf << QPoint(x1, y)
+ << QPoint(x4, y)
+ << QPoint(x3, y + radius)
+ << QPoint(x2, y + height - radius)
+ << QPoint(x1, y + height);
+
+ painter->setClipPath(roundRect);
+ painter->setClipRegion(topHalf, Qt::IntersectClip);
+ painter->setPen(topPen);
+ painter->drawPath(roundRect);
+//! [26] //! [32]
+
+ QPolygon bottomHalf = topHalf;
+ bottomHalf[0] = QPoint(x4, y + height);
+
+ painter->setClipPath(roundRect);
+ painter->setClipRegion(bottomHalf, Qt::IntersectClip);
+ painter->setPen(bottomPen);
+ painter->drawPath(roundRect);
+
+ painter->setPen(option->palette.windowText().color());
+ painter->setClipping(false);
+ painter->drawPath(roundRect);
+
+ painter->restore();
+ }
+ break;
+//! [32] //! [33]
+ default:
+//! [33] //! [34]
+ QProxyStyle::drawPrimitive(element, option, painter, widget);
+ }
+}
+//! [34]
+
+//! [35]
+void NorwegianWoodStyle::drawControl(ControlElement element,
+//! [35] //! [36]
+ const QStyleOption *option,
+ QPainter *painter,
+ const QWidget *widget) const
+{
+ switch (element) {
+ case CE_PushButtonLabel:
+ {
+ QStyleOptionButton myButtonOption;
+ const QStyleOptionButton *buttonOption =
+ qstyleoption_cast<const QStyleOptionButton *>(option);
+ if (buttonOption) {
+ myButtonOption = *buttonOption;
+ if (myButtonOption.palette.currentColorGroup()
+ != QPalette::Disabled) {
+ if (myButtonOption.state & (State_Sunken | State_On)) {
+ myButtonOption.palette.setBrush(QPalette::ButtonText,
+ myButtonOption.palette.brightText());
+ }
+ }
+ }
+ QProxyStyle::drawControl(element, &myButtonOption, painter, widget);
+ }
+ break;
+ default:
+ QProxyStyle::drawControl(element, option, painter, widget);
+ }
+}
+//! [36]
+
+//! [37]
+void NorwegianWoodStyle::setTexture(QPalette &palette, QPalette::ColorRole role,
+//! [37] //! [38]
+ const QImage &image)
+{
+ for (int i = 0; i < QPalette::NColorGroups; ++i) {
+ QBrush brush(image);
+ brush.setColor(palette.brush(QPalette::ColorGroup(i), role).color());
+ palette.setBrush(QPalette::ColorGroup(i), role, brush);
+ }
+}
+//! [38]
+
+//! [39]
+QPainterPath NorwegianWoodStyle::roundRectPath(const QRect &rect)
+//! [39] //! [40]
+{
+ int radius = qMin(rect.width(), rect.height()) / 2;
+ int diam = 2 * radius;
+
+ int x1, y1, x2, y2;
+ rect.getCoords(&x1, &y1, &x2, &y2);
+
+ QPainterPath path;
+ path.moveTo(x2, y1 + radius);
+ path.arcTo(QRect(x2 - diam, y1, diam, diam), 0.0, +90.0);
+ path.lineTo(x1 + radius, y1);
+ path.arcTo(QRect(x1, y1, diam, diam), 90.0, +90.0);
+ path.lineTo(x1, y2 - radius);
+ path.arcTo(QRect(x1, y2 - diam, diam, diam), 180.0, +90.0);
+ path.lineTo(x1 + radius, y2);
+ path.arcTo(QRect(x2 - diam, y2 - diam, diam, diam), 270.0, +90.0);
+ path.closeSubpath();
+ return path;
+}
+//! [40]
diff --git a/tests/manual/examples/widgets/widgets/styles/norwegianwoodstyle.h b/tests/manual/examples/widgets/widgets/styles/norwegianwoodstyle.h
new file mode 100644
index 0000000000..5af2171f35
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/styles/norwegianwoodstyle.h
@@ -0,0 +1,43 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef NORWEGIANWOODSTYLE_H
+#define NORWEGIANWOODSTYLE_H
+
+#include <QProxyStyle>
+#include <QPalette>
+
+QT_BEGIN_NAMESPACE
+class QPainterPath;
+QT_END_NAMESPACE
+
+//! [0]
+class NorwegianWoodStyle : public QProxyStyle
+{
+ Q_OBJECT
+
+public:
+ NorwegianWoodStyle();
+
+ QPalette standardPalette() const override;
+
+ void polish(QWidget *widget) override;
+ void unpolish(QWidget *widget) override;
+ int pixelMetric(PixelMetric metric, const QStyleOption *option,
+ const QWidget *widget) const override;
+ int styleHint(StyleHint hint, const QStyleOption *option,
+ const QWidget *widget, QStyleHintReturn *returnData) const override;
+ void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const override;
+ void drawControl(ControlElement control, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const override;
+
+private:
+ static void setTexture(QPalette &palette, QPalette::ColorRole role,
+ const QImage &image);
+ static QPainterPath roundRectPath(const QRect &rect);
+ mutable QPalette m_standardPalette;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/styles/styles.pro b/tests/manual/examples/widgets/widgets/styles/styles.pro
new file mode 100644
index 0000000000..87dee7e04c
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/styles/styles.pro
@@ -0,0 +1,13 @@
+QT += widgets
+requires(qtConfig(combobox))
+
+HEADERS = norwegianwoodstyle.h \
+ widgetgallery.h
+SOURCES = main.cpp \
+ norwegianwoodstyle.cpp \
+ widgetgallery.cpp
+RESOURCES = styles.qrc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/styles
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/widgets/styles/styles.qrc b/tests/manual/examples/widgets/widgets/styles/styles.qrc
new file mode 100644
index 0000000000..4fdad8d914
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/styles/styles.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>images/woodbutton.png</file>
+ <file>images/woodbackground.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/widgets/styles/widgetgallery.cpp b/tests/manual/examples/widgets/widgets/styles/widgetgallery.cpp
new file mode 100644
index 0000000000..83cb99a52c
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/styles/widgetgallery.cpp
@@ -0,0 +1,277 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "widgetgallery.h"
+#include "norwegianwoodstyle.h"
+
+#include <QApplication>
+#include <QCheckBox>
+#include <QComboBox>
+#include <QDateTimeEdit>
+#include <QDial>
+#include <QGridLayout>
+#include <QGroupBox>
+#include <QLabel>
+#include <QLineEdit>
+#include <QProgressBar>
+#include <QPushButton>
+#include <QRadioButton>
+#include <QScrollBar>
+#include <QSpinBox>
+#include <QStyle>
+#include <QStyleFactory>
+#include <QTableWidget>
+#include <QTextEdit>
+#include <QTimer>
+
+//! [0]
+WidgetGallery::WidgetGallery(QWidget *parent)
+ : QDialog(parent)
+{
+ styleComboBox = new QComboBox;
+ const QString defaultStyleName = QApplication::style()->objectName();
+ QStringList styleNames = QStyleFactory::keys();
+ styleNames.append("NorwegianWood");
+ for (int i = 1, size = styleNames.size(); i < size; ++i) {
+ if (defaultStyleName.compare(styleNames.at(i), Qt::CaseInsensitive) == 0) {
+ styleNames.swapItemsAt(0, i);
+ break;
+ }
+ }
+ styleComboBox->addItems(styleNames);
+
+ styleLabel = new QLabel(tr("&Style:"));
+ styleLabel->setBuddy(styleComboBox);
+
+ useStylePaletteCheckBox = new QCheckBox(tr("&Use style's standard palette"));
+ useStylePaletteCheckBox->setChecked(true);
+
+ disableWidgetsCheckBox = new QCheckBox(tr("&Disable widgets"));
+
+ createTopLeftGroupBox();
+ createTopRightGroupBox();
+ createBottomLeftTabWidget();
+ createBottomRightGroupBox();
+ createProgressBar();
+//! [0]
+
+//! [1]
+ connect(styleComboBox, &QComboBox::textActivated,
+//! [1] //! [2]
+ this, &WidgetGallery::changeStyle);
+ connect(useStylePaletteCheckBox, &QCheckBox::toggled,
+ this, &WidgetGallery::changePalette);
+ connect(disableWidgetsCheckBox, &QCheckBox::toggled,
+ topLeftGroupBox, &QGroupBox::setDisabled);
+ connect(disableWidgetsCheckBox, &QCheckBox::toggled,
+ topRightGroupBox, &QGroupBox::setDisabled);
+ connect(disableWidgetsCheckBox, &QCheckBox::toggled,
+ bottomLeftTabWidget, &QGroupBox::setDisabled);
+ connect(disableWidgetsCheckBox, &QCheckBox::toggled,
+ bottomRightGroupBox, &QGroupBox::setDisabled);
+//! [2]
+
+//! [3]
+ QHBoxLayout *topLayout = new QHBoxLayout;
+//! [3] //! [4]
+ topLayout->addWidget(styleLabel);
+ topLayout->addWidget(styleComboBox);
+ topLayout->addStretch(1);
+ topLayout->addWidget(useStylePaletteCheckBox);
+ topLayout->addWidget(disableWidgetsCheckBox);
+
+ QGridLayout *mainLayout = new QGridLayout;
+ mainLayout->addLayout(topLayout, 0, 0, 1, 2);
+ mainLayout->addWidget(topLeftGroupBox, 1, 0);
+ mainLayout->addWidget(topRightGroupBox, 1, 1);
+ mainLayout->addWidget(bottomLeftTabWidget, 2, 0);
+ mainLayout->addWidget(bottomRightGroupBox, 2, 1);
+ mainLayout->addWidget(progressBar, 3, 0, 1, 2);
+ mainLayout->setRowStretch(1, 1);
+ mainLayout->setRowStretch(2, 1);
+ mainLayout->setColumnStretch(0, 1);
+ mainLayout->setColumnStretch(1, 1);
+ setLayout(mainLayout);
+
+ setWindowTitle(tr("Styles"));
+ styleChanged();
+}
+//! [4]
+
+//! [5]
+void WidgetGallery::changeStyle(const QString &styleName)
+//! [5] //! [6]
+{
+ if (styleName == "NorwegianWood")
+ QApplication::setStyle(new NorwegianWoodStyle);
+ else
+ QApplication::setStyle(QStyleFactory::create(styleName));
+}
+//! [6]
+
+//! [7]
+void WidgetGallery::changePalette()
+//! [7] //! [8]
+{
+ QApplication::setPalette(useStylePaletteCheckBox->isChecked() ?
+ QApplication::style()->standardPalette() : QPalette());
+}
+//! [8]
+
+void WidgetGallery::changeEvent(QEvent *event)
+{
+ if (event->type() == QEvent::StyleChange)
+ styleChanged();
+}
+
+void WidgetGallery::styleChanged()
+{
+ auto styleName = QApplication::style()->objectName();
+ for (int i = 0; i < styleComboBox->count(); ++i) {
+ if (QString::compare(styleComboBox->itemText(i), styleName, Qt::CaseInsensitive) == 0) {
+ styleComboBox->setCurrentIndex(i);
+ break;
+ }
+ }
+
+ changePalette();
+}
+
+//! [9]
+void WidgetGallery::advanceProgressBar()
+//! [9] //! [10]
+{
+ int curVal = progressBar->value();
+ int maxVal = progressBar->maximum();
+ progressBar->setValue(curVal + (maxVal - curVal) / 100);
+}
+//! [10]
+
+//! [11]
+void WidgetGallery::createTopLeftGroupBox()
+//! [11] //! [12]
+{
+ topLeftGroupBox = new QGroupBox(tr("Group 1"));
+
+ radioButton1 = new QRadioButton(tr("Radio button 1"));
+ radioButton2 = new QRadioButton(tr("Radio button 2"));
+ radioButton3 = new QRadioButton(tr("Radio button 3"));
+ radioButton1->setChecked(true);
+
+ checkBox = new QCheckBox(tr("Tri-state check box"));
+ checkBox->setTristate(true);
+ checkBox->setCheckState(Qt::PartiallyChecked);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(radioButton1);
+ layout->addWidget(radioButton2);
+ layout->addWidget(radioButton3);
+ layout->addWidget(checkBox);
+ layout->addStretch(1);
+ topLeftGroupBox->setLayout(layout);
+}
+//! [12]
+
+void WidgetGallery::createTopRightGroupBox()
+{
+ topRightGroupBox = new QGroupBox(tr("Group 2"));
+
+ defaultPushButton = new QPushButton(tr("Default Push Button"));
+ defaultPushButton->setDefault(true);
+
+ togglePushButton = new QPushButton(tr("Toggle Push Button"));
+ togglePushButton->setCheckable(true);
+ togglePushButton->setChecked(true);
+
+ flatPushButton = new QPushButton(tr("Flat Push Button"));
+ flatPushButton->setFlat(true);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+ layout->addWidget(defaultPushButton);
+ layout->addWidget(togglePushButton);
+ layout->addWidget(flatPushButton);
+ layout->addStretch(1);
+ topRightGroupBox->setLayout(layout);
+}
+
+void WidgetGallery::createBottomLeftTabWidget()
+{
+ bottomLeftTabWidget = new QTabWidget;
+ bottomLeftTabWidget->setSizePolicy(QSizePolicy::Preferred,
+ QSizePolicy::Ignored);
+
+ QWidget *tab1 = new QWidget;
+ tableWidget = new QTableWidget(10, 10);
+
+ QHBoxLayout *tab1hbox = new QHBoxLayout;
+ tab1hbox->setContentsMargins(5,5, 5, 5);
+ tab1hbox->addWidget(tableWidget);
+ tab1->setLayout(tab1hbox);
+
+ QWidget *tab2 = new QWidget;
+ textEdit = new QTextEdit;
+
+ textEdit->setPlainText(tr("Twinkle, twinkle, little star,\n"
+ "How I wonder what you are.\n"
+ "Up above the world so high,\n"
+ "Like a diamond in the sky.\n"
+ "Twinkle, twinkle, little star,\n"
+ "How I wonder what you are!\n"));
+
+ QHBoxLayout *tab2hbox = new QHBoxLayout;
+ tab2hbox->setContentsMargins(5, 5, 5, 5);
+ tab2hbox->addWidget(textEdit);
+ tab2->setLayout(tab2hbox);
+
+ bottomLeftTabWidget->addTab(tab1, tr("&Table"));
+ bottomLeftTabWidget->addTab(tab2, tr("Text &Edit"));
+}
+
+void WidgetGallery::createBottomRightGroupBox()
+{
+ bottomRightGroupBox = new QGroupBox(tr("Group 3"));
+ bottomRightGroupBox->setCheckable(true);
+ bottomRightGroupBox->setChecked(true);
+
+ lineEdit = new QLineEdit("s3cRe7");
+ lineEdit->setEchoMode(QLineEdit::Password);
+
+ spinBox = new QSpinBox(bottomRightGroupBox);
+ spinBox->setValue(50);
+
+ dateTimeEdit = new QDateTimeEdit(bottomRightGroupBox);
+ dateTimeEdit->setDateTime(QDateTime::currentDateTime());
+
+ slider = new QSlider(Qt::Horizontal, bottomRightGroupBox);
+ slider->setValue(40);
+
+ scrollBar = new QScrollBar(Qt::Horizontal, bottomRightGroupBox);
+ scrollBar->setValue(60);
+
+ dial = new QDial(bottomRightGroupBox);
+ dial->setValue(30);
+ dial->setNotchesVisible(true);
+
+ QGridLayout *layout = new QGridLayout;
+ layout->addWidget(lineEdit, 0, 0, 1, 2);
+ layout->addWidget(spinBox, 1, 0, 1, 2);
+ layout->addWidget(dateTimeEdit, 2, 0, 1, 2);
+ layout->addWidget(slider, 3, 0);
+ layout->addWidget(scrollBar, 4, 0);
+ layout->addWidget(dial, 3, 1, 2, 1);
+ layout->setRowStretch(5, 1);
+ bottomRightGroupBox->setLayout(layout);
+}
+
+//! [13]
+void WidgetGallery::createProgressBar()
+{
+ progressBar = new QProgressBar;
+ progressBar->setRange(0, 10000);
+ progressBar->setValue(0);
+
+ QTimer *timer = new QTimer(this);
+ connect(timer, &QTimer::timeout, this, &WidgetGallery::advanceProgressBar);
+ timer->start(1000);
+}
+//! [13]
diff --git a/tests/manual/examples/widgets/widgets/styles/widgetgallery.h b/tests/manual/examples/widgets/widgets/styles/widgetgallery.h
new file mode 100644
index 0000000000..f4c43e7b4f
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/styles/widgetgallery.h
@@ -0,0 +1,86 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef WIDGETGALLERY_H
+#define WIDGETGALLERY_H
+
+#include <QDialog>
+
+QT_BEGIN_NAMESPACE
+class QCheckBox;
+class QComboBox;
+class QDateTimeEdit;
+class QDial;
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+class QProgressBar;
+class QPushButton;
+class QRadioButton;
+class QScrollBar;
+class QSlider;
+class QSpinBox;
+class QTabWidget;
+class QTableWidget;
+class QTextEdit;
+QT_END_NAMESPACE
+
+//! [0]
+class WidgetGallery : public QDialog
+{
+ Q_OBJECT
+
+public:
+ WidgetGallery(QWidget *parent = nullptr);
+
+protected:
+ void changeEvent(QEvent *) override;
+
+private slots:
+ void changeStyle(const QString &styleName);
+ void styleChanged();
+ void changePalette();
+ void advanceProgressBar();
+
+private:
+ void createTopLeftGroupBox();
+ void createTopRightGroupBox();
+ void createBottomLeftTabWidget();
+ void createBottomRightGroupBox();
+ void createProgressBar();
+
+ QLabel *styleLabel;
+ QComboBox *styleComboBox;
+ QCheckBox *useStylePaletteCheckBox;
+ QCheckBox *disableWidgetsCheckBox;
+//! [0]
+
+ QGroupBox *topLeftGroupBox;
+ QRadioButton *radioButton1;
+ QRadioButton *radioButton2;
+ QRadioButton *radioButton3;
+ QCheckBox *checkBox;
+
+ QGroupBox *topRightGroupBox;
+ QPushButton *defaultPushButton;
+ QPushButton *togglePushButton;
+ QPushButton *flatPushButton;
+
+ QTabWidget *bottomLeftTabWidget;
+ QTableWidget *tableWidget;
+ QTextEdit *textEdit;
+
+ QGroupBox *bottomRightGroupBox;
+ QLineEdit *lineEdit;
+ QSpinBox *spinBox;
+ QDateTimeEdit *dateTimeEdit;
+ QSlider *slider;
+ QScrollBar *scrollBar;
+ QDial *dial;
+
+ QProgressBar *progressBar;
+//! [1]
+};
+//! [1]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/CMakeLists.txt b/tests/manual/examples/widgets/widgets/stylesheet/CMakeLists.txt
new file mode 100644
index 0000000000..7937f6076f
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/CMakeLists.txt
@@ -0,0 +1,84 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(stylesheet LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/stylesheet")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(stylesheet
+ main.cpp
+ mainwindow.cpp mainwindow.h mainwindow.ui
+ stylesheeteditor.cpp stylesheeteditor.h stylesheeteditor.ui
+)
+
+set_target_properties(stylesheet PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(stylesheet PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(stylesheet_resource_files
+ "images/checkbox_checked.png"
+ "images/checkbox_checked_hover.png"
+ "images/checkbox_checked_pressed.png"
+ "images/checkbox_unchecked.png"
+ "images/checkbox_unchecked_hover.png"
+ "images/checkbox_unchecked_pressed.png"
+ "images/down_arrow.png"
+ "images/down_arrow_disabled.png"
+ "images/frame.png"
+ "images/pagefold.png"
+ "images/pushbutton.png"
+ "images/pushbutton_hover.png"
+ "images/pushbutton_pressed.png"
+ "images/radiobutton_checked.png"
+ "images/radiobutton_checked_hover.png"
+ "images/radiobutton_checked_pressed.png"
+ "images/radiobutton_unchecked.png"
+ "images/radiobutton_unchecked_hover.png"
+ "images/radiobutton_unchecked_pressed.png"
+ "images/sizegrip.png"
+ "images/spindown.png"
+ "images/spindown_hover.png"
+ "images/spindown_off.png"
+ "images/spindown_pressed.png"
+ "images/spinup.png"
+ "images/spinup_hover.png"
+ "images/spinup_off.png"
+ "images/spinup_pressed.png"
+ "images/up_arrow.png"
+ "images/up_arrow_disabled.png"
+ "layouts/default.ui"
+ "layouts/pagefold.ui"
+ "qss/coffee.qss"
+ "qss/default.qss"
+ "qss/pagefold.qss"
+)
+
+qt_add_resources(stylesheet "stylesheet"
+ PREFIX
+ "/"
+ FILES
+ ${stylesheet_resource_files}
+)
+
+install(TARGETS stylesheet
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked.png b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked.png
new file mode 100644
index 0000000000..cbf06f6513
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked_hover.png b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked_hover.png
new file mode 100644
index 0000000000..fb4d4d3fdb
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked_hover.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked_pressed.png b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked_pressed.png
new file mode 100644
index 0000000000..852fcc0306
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_checked_pressed.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked.png b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked.png
new file mode 100644
index 0000000000..5f5465582a
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked_hover.png b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked_hover.png
new file mode 100644
index 0000000000..687364497e
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked_hover.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked_pressed.png b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked_pressed.png
new file mode 100644
index 0000000000..6a768c44de
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/checkbox_unchecked_pressed.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/down_arrow.png b/tests/manual/examples/widgets/widgets/stylesheet/images/down_arrow.png
new file mode 100644
index 0000000000..85004aeaf6
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/down_arrow.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/down_arrow_disabled.png b/tests/manual/examples/widgets/widgets/stylesheet/images/down_arrow_disabled.png
new file mode 100644
index 0000000000..d9eefed4c8
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/down_arrow_disabled.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/frame.png b/tests/manual/examples/widgets/widgets/stylesheet/images/frame.png
new file mode 100644
index 0000000000..05a600502e
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/frame.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/pagefold.png b/tests/manual/examples/widgets/widgets/stylesheet/images/pagefold.png
new file mode 100644
index 0000000000..69be8f2a38
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/pagefold.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton.png b/tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton.png
new file mode 100644
index 0000000000..c7529ba02d
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton_hover.png b/tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton_hover.png
new file mode 100644
index 0000000000..af0ef9d561
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton_hover.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton_pressed.png b/tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton_pressed.png
new file mode 100644
index 0000000000..f7381f752a
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/pushbutton_pressed.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked.png b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked.png
new file mode 100644
index 0000000000..8ab9157578
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked_hover.png b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked_hover.png
new file mode 100644
index 0000000000..d68cb009a7
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked_hover.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked_pressed.png b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked_pressed.png
new file mode 100644
index 0000000000..e3cd5a59e4
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_checked_pressed.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked.png b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked.png
new file mode 100644
index 0000000000..321a9a1558
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked_hover.png b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked_hover.png
new file mode 100644
index 0000000000..666a3b0bdd
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked_hover.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked_pressed.png b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked_pressed.png
new file mode 100644
index 0000000000..c4b0567aa9
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/radiobutton_unchecked_pressed.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/sizegrip.png b/tests/manual/examples/widgets/widgets/stylesheet/images/sizegrip.png
new file mode 100644
index 0000000000..350583aaac
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/sizegrip.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/spindown.png b/tests/manual/examples/widgets/widgets/stylesheet/images/spindown.png
new file mode 100644
index 0000000000..7ff3c64926
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/spindown.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/spindown_hover.png b/tests/manual/examples/widgets/widgets/stylesheet/images/spindown_hover.png
new file mode 100644
index 0000000000..1486c4dfe4
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/spindown_hover.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/spindown_off.png b/tests/manual/examples/widgets/widgets/stylesheet/images/spindown_off.png
new file mode 100644
index 0000000000..a90ab3f038
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/spindown_off.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/spindown_pressed.png b/tests/manual/examples/widgets/widgets/stylesheet/images/spindown_pressed.png
new file mode 100644
index 0000000000..f6271cbde2
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/spindown_pressed.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/spinup.png b/tests/manual/examples/widgets/widgets/stylesheet/images/spinup.png
new file mode 100644
index 0000000000..1069dd00df
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/spinup.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/spinup_hover.png b/tests/manual/examples/widgets/widgets/stylesheet/images/spinup_hover.png
new file mode 100644
index 0000000000..884c8d77c5
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/spinup_hover.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/spinup_off.png b/tests/manual/examples/widgets/widgets/stylesheet/images/spinup_off.png
new file mode 100644
index 0000000000..02dad1fb29
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/spinup_off.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/spinup_pressed.png b/tests/manual/examples/widgets/widgets/stylesheet/images/spinup_pressed.png
new file mode 100644
index 0000000000..b1843e2a1f
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/spinup_pressed.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/up_arrow.png b/tests/manual/examples/widgets/widgets/stylesheet/images/up_arrow.png
new file mode 100644
index 0000000000..e7f7ddb3a6
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/up_arrow.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/images/up_arrow_disabled.png b/tests/manual/examples/widgets/widgets/stylesheet/images/up_arrow_disabled.png
new file mode 100644
index 0000000000..4d2c27770f
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/images/up_arrow_disabled.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/layouts/default.ui b/tests/manual/examples/widgets/widgets/stylesheet/layouts/default.ui
new file mode 100644
index 0000000000..431a40956e
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/layouts/default.ui
@@ -0,0 +1,329 @@
+<ui version="4.0" >
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>388</width>
+ <height>413</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>MainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralwidget" >
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="0" >
+ <widget class="QLabel" name="nameLabel" >
+ <property name="text" >
+ <string>&amp;Name:</string>
+ </property>
+ <property name="buddy" >
+ <cstring>nameCombo</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" colspan="3" >
+ <widget class="QComboBox" name="nameCombo" >
+ <property name="toolTip" >
+ <string>Specify your name</string>
+ </property>
+ <property name="editable" >
+ <bool>true</bool>
+ </property>
+ <property name="currentIndex" >
+ <number>-1</number>
+ </property>
+ <item>
+ <property name="text" >
+ <string>Girish</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Jasmin</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Simon</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Zack</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="3" >
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="2" >
+ <widget class="QRadioButton" name="femaleRadioButton" >
+ <property name="toolTip" >
+ <string>Check this if you are female</string>
+ </property>
+ <property name="text" >
+ <string>&amp;Female</string>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0" colspan="4" >
+ <widget class="QCheckBox" name="agreeCheckBox" >
+ <property name="toolTip" >
+ <string>Please read the license before checking this</string>
+ </property>
+ <property name="text" >
+ <string>I &amp;accept the terms and conditions</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1" >
+ <widget class="QRadioButton" name="maleRadioButton" >
+ <property name="toolTip" >
+ <string>Check this if you are male</string>
+ </property>
+ <property name="text" >
+ <string>&amp;Male</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="genderLabel" >
+ <property name="text" >
+ <string>Gender:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1" colspan="3" >
+ <widget class="QSpinBox" name="ageSpinBox" >
+ <property name="toolTip" >
+ <string>Specify your age</string>
+ </property>
+ <property name="statusTip" >
+ <string>Specify your age here</string>
+ </property>
+ <property name="minimum" >
+ <number>12</number>
+ </property>
+ <property name="value" >
+ <number>22</number>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="2" colspan="2" >
+ <widget class="QDialogButtonBox" name="buttonBox" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons" >
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" >
+ <widget class="QLabel" name="ageLabel" >
+ <property name="text" >
+ <string>&amp;Age:</string>
+ </property>
+ <property name="buddy" >
+ <cstring>ageSpinBox</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" >
+ <widget class="QLabel" name="passwordLabel" >
+ <property name="text" >
+ <string>&amp;Password:</string>
+ </property>
+ <property name="buddy" >
+ <cstring>passwordEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1" colspan="3" >
+ <widget class="QLineEdit" name="passwordEdit" >
+ <property name="toolTip" >
+ <string>Specify your password</string>
+ </property>
+ <property name="statusTip" >
+ <string>Specify your password here</string>
+ </property>
+ <property name="text" >
+ <string>Password</string>
+ </property>
+ <property name="echoMode" >
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0" >
+ <widget class="QLabel" name="label" >
+ <property name="text" >
+ <string>Profession</string>
+ </property>
+ <property name="buddy" >
+ <cstring>professionList</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0" >
+ <widget class="QLabel" name="countryLabel" >
+ <property name="text" >
+ <string>&amp;Country</string>
+ </property>
+ <property name="buddy" >
+ <cstring>professionList</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1" colspan="3" >
+ <widget class="QListWidget" name="professionList" >
+ <property name="toolTip" >
+ <string>Select your profession</string>
+ </property>
+ <property name="statusTip" >
+ <string>Select your profession</string>
+ </property>
+ <property name="whatsThis" >
+ <string>Select your profession</string>
+ </property>
+ <property name="currentRow" >
+ <number>1</number>
+ </property>
+ <item>
+ <property name="text" >
+ <string>Developer</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Student</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Fisherman</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="4" column="1" colspan="3" >
+ <widget class="QComboBox" name="countryCombo" >
+ <property name="toolTip" >
+ <string>Specify your country</string>
+ </property>
+ <property name="statusTip" >
+ <string>Specify your country here</string>
+ </property>
+ <property name="currentIndex" >
+ <number>2</number>
+ </property>
+ <item>
+ <property name="text" >
+ <string>Germany</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>India</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Norway</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>United States Of America</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>United Kingdom</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menubar" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>388</width>
+ <height>21</height>
+ </rect>
+ </property>
+ <widget class="QMenu" name="menu_File" >
+ <property name="title" >
+ <string>&amp;File</string>
+ </property>
+ <addaction name="editStyleAction" />
+ <addaction name="separator" />
+ <addaction name="exitAction" />
+ </widget>
+ <widget class="QMenu" name="menu_Help" >
+ <property name="title" >
+ <string>&amp;Help</string>
+ </property>
+ <addaction name="aboutAction" />
+ <addaction name="separator" />
+ <addaction name="aboutQtAction" />
+ </widget>
+ <addaction name="menu_File" />
+ <addaction name="menu_Help" />
+ </widget>
+ <widget class="QStatusBar" name="statusbar" />
+ <action name="exitAction" >
+ <property name="text" >
+ <string>&amp;Exit</string>
+ </property>
+ </action>
+ <action name="aboutQtAction" >
+ <property name="text" >
+ <string>About Qt</string>
+ </property>
+ </action>
+ <action name="editStyleAction" >
+ <property name="text" >
+ <string>Edit &amp;Style</string>
+ </property>
+ </action>
+ <action name="aboutAction" >
+ <property name="text" >
+ <string>About</string>
+ </property>
+ </action>
+ </widget>
+ <tabstops>
+ <tabstop>maleRadioButton</tabstop>
+ <tabstop>femaleRadioButton</tabstop>
+ <tabstop>ageSpinBox</tabstop>
+ <tabstop>passwordEdit</tabstop>
+ <tabstop>professionList</tabstop>
+ <tabstop>agreeCheckBox</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/layouts/pagefold.ui b/tests/manual/examples/widgets/widgets/stylesheet/layouts/pagefold.ui
new file mode 100644
index 0000000000..7ae313c331
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/layouts/pagefold.ui
@@ -0,0 +1,349 @@
+<ui version="4.0" >
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>392</width>
+ <height>412</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>MainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralwidget" >
+ <layout class="QVBoxLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QFrame" name="mainFrame" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="frameShadow" >
+ <enum>QFrame::Raised</enum>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="1" colspan="3" >
+ <widget class="QComboBox" name="nameCombo" >
+ <property name="toolTip" >
+ <string>Specify your name</string>
+ </property>
+ <property name="editable" >
+ <bool>true</bool>
+ </property>
+ <property name="currentIndex" >
+ <number>-1</number>
+ </property>
+ <item>
+ <property name="text" >
+ <string>Girish</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Jasmin</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Simon</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Zack</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="3" >
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="1" column="2" >
+ <widget class="QRadioButton" name="femaleRadioButton" >
+ <property name="styleSheet" >
+ <string>Check this if you are female</string>
+ </property>
+ <property name="text" >
+ <string>&amp;Female</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="genderLabel" >
+ <property name="text" >
+ <string>Gender:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" >
+ <widget class="QLabel" name="ageLabel" >
+ <property name="text" >
+ <string>&amp;Age:</string>
+ </property>
+ <property name="buddy" >
+ <cstring>ageSpinBox</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1" >
+ <widget class="QRadioButton" name="maleRadioButton" >
+ <property name="toolTip" >
+ <string>Check this if you are male</string>
+ </property>
+ <property name="text" >
+ <string>&amp;Male</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QLabel" name="nameLabel" >
+ <property name="text" >
+ <string>&amp;Name:</string>
+ </property>
+ <property name="buddy" >
+ <cstring>nameCombo</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" >
+ <widget class="QLabel" name="passwordLabel" >
+ <property name="text" >
+ <string>&amp;Password:</string>
+ </property>
+ <property name="buddy" >
+ <cstring>passwordEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1" colspan="3" >
+ <widget class="QSpinBox" name="ageSpinBox" >
+ <property name="toolTip" >
+ <string>Specify your age</string>
+ </property>
+ <property name="statusTip" >
+ <string>Specify your age</string>
+ </property>
+ <property name="minimum" >
+ <number>12</number>
+ </property>
+ <property name="value" >
+ <number>22</number>
+ </property>
+ </widget>
+ </item>
+ <item row="7" column="2" colspan="2" >
+ <widget class="QDialogButtonBox" name="buttonBox" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons" >
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ <item row="6" column="0" colspan="4" >
+ <widget class="QCheckBox" name="agreeCheckBox" >
+ <property name="toolTip" >
+ <string>Please read the LICENSE file before checking</string>
+ </property>
+ <property name="text" >
+ <string>I &amp;accept the terms and &amp;conditions</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1" colspan="3" >
+ <widget class="QLineEdit" name="passwordEdit" >
+ <property name="toolTip" >
+ <string>Specify your password</string>
+ </property>
+ <property name="statusTip" >
+ <string>Specify your password</string>
+ </property>
+ <property name="text" >
+ <string>Password</string>
+ </property>
+ <property name="echoMode" >
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1" colspan="3" >
+ <widget class="QListWidget" name="professionList" >
+ <property name="toolTip" >
+ <string>Select your profession</string>
+ </property>
+ <property name="statusTip" >
+ <string>Specify your name here</string>
+ </property>
+ <property name="whatsThis" >
+ <string>Specify your name here</string>
+ </property>
+ <property name="currentRow" >
+ <number>0</number>
+ </property>
+ <item>
+ <property name="text" >
+ <string>Developer</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Student</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Fisherman</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="5" column="0" >
+ <widget class="QLabel" name="label" >
+ <property name="text" >
+ <string>Profession:</string>
+ </property>
+ <property name="buddy" >
+ <cstring>professionList</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1" colspan="3" >
+ <widget class="QComboBox" name="countryCombo" >
+ <property name="toolTip" >
+ <string>Specify country of origin</string>
+ </property>
+ <property name="statusTip" >
+ <string>Specify country of origin</string>
+ </property>
+ <property name="currentIndex" >
+ <number>6</number>
+ </property>
+ <item>
+ <property name="text" >
+ <string>Egypt</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>France</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Germany</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>India</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Italy</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Korea</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Norway</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="4" column="0" >
+ <widget class="QLabel" name="countryLabel" >
+ <property name="text" >
+ <string>Pro&amp;fession</string>
+ </property>
+ <property name="buddy" >
+ <cstring>professionList</cstring>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menubar" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>392</width>
+ <height>25</height>
+ </rect>
+ </property>
+ <widget class="QMenu" name="menu_File" >
+ <property name="title" >
+ <string>&amp;File</string>
+ </property>
+ <addaction name="editStyleAction" />
+ <addaction name="separator" />
+ <addaction name="exitAction" />
+ </widget>
+ <widget class="QMenu" name="menu_Help" >
+ <property name="title" >
+ <string>&amp;Help</string>
+ </property>
+ <addaction name="aboutAction" />
+ <addaction name="separator" />
+ <addaction name="aboutQtAction" />
+ </widget>
+ <addaction name="menu_File" />
+ <addaction name="menu_Help" />
+ </widget>
+ <widget class="QStatusBar" name="statusbar" />
+ <action name="exitAction" >
+ <property name="text" >
+ <string>&amp;Exit</string>
+ </property>
+ </action>
+ <action name="aboutQtAction" >
+ <property name="text" >
+ <string>About Qt</string>
+ </property>
+ </action>
+ <action name="editStyleAction" >
+ <property name="text" >
+ <string>Edit &amp;Style</string>
+ </property>
+ </action>
+ <action name="aboutAction" >
+ <property name="text" >
+ <string>About</string>
+ </property>
+ </action>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/main.cpp b/tests/manual/examples/widgets/widgets/stylesheet/main.cpp
new file mode 100644
index 0000000000..7d7cf3e573
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include <QApplication>
+
+#include "mainwindow.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ MainWindow window;
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/mainwindow.cpp b/tests/manual/examples/widgets/widgets/stylesheet/mainwindow.cpp
new file mode 100644
index 0000000000..a43613c757
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/mainwindow.cpp
@@ -0,0 +1,41 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "mainwindow.h"
+#include "stylesheeteditor.h"
+
+#include <QMessageBox>
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+{
+ ui.setupUi(this);
+
+ ui.nameLabel->setProperty("class", "mandatory QLabel");
+ ui.nameCombo->lineEdit()->setPlaceholderText(tr("Last, First"));
+
+ styleSheetEditor = new StyleSheetEditor(this);
+
+ statusBar()->addWidget(new QLabel(tr("Ready")));
+
+ connect(ui.exitAction, &QAction::triggered, qApp, &QApplication::quit);
+ connect(ui.aboutQtAction, &QAction::triggered, qApp, &QApplication::aboutQt);
+}
+
+void MainWindow::on_editStyleAction_triggered()
+{
+ styleSheetEditor->show();
+ styleSheetEditor->activateWindow();
+}
+
+void MainWindow::on_aboutAction_triggered()
+{
+ const QString url = QStringLiteral("http://doc.qt.io/qt-%1/stylesheet.html")
+ .arg(QT_VERSION_MAJOR);
+ QMessageBox::about(this, tr("About Style sheet"),
+ tr("The <b>Style Sheet</b> example shows how widgets can be styled "
+ "using <a href=\"%1\">Qt "
+ "Style Sheets</a>. Click <b>File|Edit Style Sheet</b> to pop up the "
+ "style editor, and either choose an existing style sheet or design "
+ "your own.").arg(url));
+}
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/mainwindow.h b/tests/manual/examples/widgets/widgets/stylesheet/mainwindow.h
new file mode 100644
index 0000000000..877636bddf
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/mainwindow.h
@@ -0,0 +1,29 @@
+// 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>
+
+#include "ui_mainwindow.h"
+
+class StyleSheetEditor;
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+
+private slots:
+ void on_editStyleAction_triggered();
+ void on_aboutAction_triggered();
+
+private:
+ StyleSheetEditor *styleSheetEditor;
+ Ui::MainWindow ui;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/mainwindow.ui b/tests/manual/examples/widgets/widgets/stylesheet/mainwindow.ui
new file mode 100644
index 0000000000..cc29257afb
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/mainwindow.ui
@@ -0,0 +1,356 @@
+<ui version="4.0" >
+ <class>MainWindow</class>
+ <widget class="QMainWindow" name="MainWindow" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>413</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>Style Sheet</string>
+ </property>
+ <widget class="QWidget" name="centralwidget" >
+ <layout class="QVBoxLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item>
+ <widget class="QFrame" name="mainFrame" >
+ <property name="frameShape" >
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="frameShadow" >
+ <enum>QFrame::Raised</enum>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="6" column="0" colspan="5" >
+ <widget class="QCheckBox" name="agreeCheckBox" >
+ <property name="toolTip" >
+ <string>Please read the LICENSE file before checking</string>
+ </property>
+ <property name="text" >
+ <string>I accept the terms and &amp;conditions</string>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="0" >
+ <widget class="QLabel" name="label" >
+ <property name="text" >
+ <string>Profession:</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing</set>
+ </property>
+ <property name="buddy" >
+ <cstring>professionList</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0" >
+ <widget class="QLabel" name="nameLabel" >
+ <property name="text" >
+ <string>&amp;Name:</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy" >
+ <cstring>nameCombo</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1" >
+ <widget class="QRadioButton" name="maleRadioButton" >
+ <property name="toolTip" >
+ <string>Check this if you are male</string>
+ </property>
+ <property name="text" >
+ <string>&amp;Male</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="0" >
+ <widget class="QLabel" name="passwordLabel" >
+ <property name="text" >
+ <string>&amp;Password:</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy" >
+ <cstring>passwordEdit</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1" colspan="4" >
+ <widget class="QComboBox" name="countryCombo" >
+ <property name="toolTip" >
+ <string>Specify country of origin</string>
+ </property>
+ <property name="statusTip" >
+ <string>Specify country of origin</string>
+ </property>
+ <property name="currentIndex" >
+ <number>6</number>
+ </property>
+ <item>
+ <property name="text" >
+ <string>Egypt</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>France</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Germany</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>India</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Italy</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Norway</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Pakistan</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="2" column="0" >
+ <widget class="QLabel" name="ageLabel" >
+ <property name="text" >
+ <string>&amp;Age:</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy" >
+ <cstring>ageSpinBox</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0" >
+ <widget class="QLabel" name="countryLabel" >
+ <property name="text" >
+ <string>Country:</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ <property name="buddy" >
+ <cstring>countryCombo</cstring>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="genderLabel" >
+ <property name="text" >
+ <string>Gender:</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="3" column="1" colspan="4" >
+ <widget class="QLineEdit" name="passwordEdit" >
+ <property name="toolTip" >
+ <string>Specify your password</string>
+ </property>
+ <property name="statusTip" >
+ <string>Specify your password</string>
+ </property>
+ <property name="text" >
+ <string>Password</string>
+ </property>
+ <property name="echoMode" >
+ <enum>QLineEdit::Password</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2" colspan="2" >
+ <widget class="QRadioButton" name="femaleRadioButton" >
+ <property name="toolTip">
+ <string>Check this if you are female</string>
+ </property>
+ <property name="text" >
+ <string>&amp;Female</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1" colspan="2" >
+ <widget class="QSpinBox" name="ageSpinBox" >
+ <property name="toolTip" >
+ <string>Specify your age</string>
+ </property>
+ <property name="statusTip" >
+ <string>Specify your age</string>
+ </property>
+ <property name="minimum" >
+ <number>12</number>
+ </property>
+ <property name="value" >
+ <number>22</number>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" colspan="4" >
+ <widget class="QComboBox" name="nameCombo" >
+ <property name="toolTip" >
+ <string>Specify your name</string>
+ </property>
+ <property name="editable" >
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="4" >
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="2" column="3" colspan="2" >
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>61</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="7" column="3" colspan="2" >
+ <widget class="QDialogButtonBox" name="buttonBox" >
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="standardButtons" >
+ <set>QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok</set>
+ </property>
+ </widget>
+ </item>
+ <item row="5" column="1" colspan="4" >
+ <widget class="QListWidget" name="professionList" >
+ <property name="toolTip" >
+ <string>Select your profession</string>
+ </property>
+ <property name="statusTip" >
+ <string>Specify your name here</string>
+ </property>
+ <property name="whatsThis" >
+ <string>Specify your name here</string>
+ </property>
+ <property name="currentRow" >
+ <number>0</number>
+ </property>
+ <item>
+ <property name="text" >
+ <string>Developer</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Student</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Fisherman</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menubar" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>400</width>
+ <height>29</height>
+ </rect>
+ </property>
+ <widget class="QMenu" name="menu_File" >
+ <property name="title" >
+ <string>&amp;File</string>
+ </property>
+ <addaction name="editStyleAction" />
+ <addaction name="separator" />
+ <addaction name="exitAction" />
+ </widget>
+ <widget class="QMenu" name="menu_Help" >
+ <property name="title" >
+ <string>&amp;Help</string>
+ </property>
+ <addaction name="aboutAction" />
+ <addaction name="aboutQtAction" />
+ </widget>
+ <addaction name="menu_File" />
+ <addaction name="menu_Help" />
+ </widget>
+ <widget class="QStatusBar" name="statusbar" />
+ <action name="exitAction" >
+ <property name="text" >
+ <string>&amp;Exit</string>
+ </property>
+ </action>
+ <action name="aboutQtAction" >
+ <property name="text" >
+ <string>About Qt</string>
+ </property>
+ </action>
+ <action name="editStyleAction" >
+ <property name="text" >
+ <string>Edit &amp;Style...</string>
+ </property>
+ </action>
+ <action name="aboutAction" >
+ <property name="text" >
+ <string>About</string>
+ </property>
+ </action>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/qss/coffee.qss b/tests/manual/examples/widgets/widgets/stylesheet/qss/coffee.qss
new file mode 100644
index 0000000000..8f72a15ee5
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/qss/coffee.qss
@@ -0,0 +1,117 @@
+.QWidget {
+ background-color: beige;
+}
+
+/* Nice Windows-XP-style password character. */
+QLineEdit[echoMode="2"] {
+ lineedit-password-character: 9679;
+}
+
+/* We provide a min-width and min-height for push buttons
+ so that they look elegant regardless of the width of the text. */
+QPushButton {
+ background-color: palegoldenrod;
+ border-width: 2px;
+ border-color: darkkhaki;
+ border-style: solid;
+ border-radius: 5;
+ padding: 3px;
+ min-width: 9ex;
+ min-height: 2.5ex;
+}
+
+QPushButton:hover {
+ background-color: khaki;
+}
+
+/* Increase the padding, so the text is shifted when the button is
+ pressed. */
+QPushButton:pressed {
+ padding-left: 5px;
+ padding-top: 5px;
+ background-color: #d0d67c;
+}
+
+QLabel, QAbstractButton {
+ font: bold;
+}
+
+/* Mark mandatory fields with a brownish color. */
+.mandatory {
+ color: brown;
+}
+
+/* Bold text on status bar looks awful. */
+QStatusBar QLabel {
+ font: normal;
+}
+
+QStatusBar::item {
+ border-width: 1;
+ border-color: darkkhaki;
+ border-style: solid;
+ border-radius: 2;
+}
+
+QComboBox, QLineEdit, QSpinBox, QTextEdit, QListView {
+ background-color: cornsilk;
+ selection-color: #0a214c;
+ selection-background-color: #C19A6B;
+}
+
+/* Make placeholder text a matching semi-transparent color */
+QComboBox, QLineEdit {
+ placeholder-text-color: #80C19A6B;
+}
+
+QListView {
+ show-decoration-selected: 1;
+}
+
+QListView::item:hover {
+ background-color: wheat;
+}
+
+/* We reserve 1 pixel space in padding. When we get the focus,
+ we kill the padding and enlarge the border. This makes the items
+ glow. */
+QLineEdit, QFrame {
+ border-width: 2px;
+ padding: 1px;
+ border-style: solid;
+ border-color: darkkhaki;
+ border-radius: 5px;
+}
+
+/* As mentioned above, eliminate the padding and increase the border. */
+QLineEdit:focus, QFrame:focus {
+ border-width: 3px;
+ padding: 0px;
+}
+
+/* A QLabel is a QFrame ... */
+QLabel {
+ border: none;
+ padding: 0;
+ background: none;
+}
+
+/* A QToolTip is a QLabel ... */
+QToolTip {
+ border: 2px solid darkkhaki;
+ padding: 5px;
+ border-radius: 3px;
+ opacity: 200;
+}
+
+/* Nice to have the background color change when hovered. */
+QRadioButton:hover, QCheckBox:hover {
+ background-color: wheat;
+}
+
+/* Force the dialog's buttons to follow the Windows guidelines. */
+QDialogButtonBox {
+ button-layout: 0;
+}
+
+
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/qss/default.qss b/tests/manual/examples/widgets/widgets/stylesheet/qss/default.qss
new file mode 100644
index 0000000000..84eb5e0bc2
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/qss/default.qss
@@ -0,0 +1 @@
+/* empty stylesheet */
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/qss/pagefold.qss b/tests/manual/examples/widgets/widgets/stylesheet/qss/pagefold.qss
new file mode 100644
index 0000000000..3701fc713c
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/qss/pagefold.qss
@@ -0,0 +1,299 @@
+/* Customize any plain widget that is a child of a QMainWindow. */
+QMainWindow > .QWidget {
+ background-color: gainsboro;
+ background-image: url(:/images/pagefold.png);
+ background-position: top right;
+ background-repeat: no-repeat
+}
+
+/* Provide a padding for the layout inside the frame. The frame
+ exists only to provide a padding for the top-right image, so we
+ explicitly disable the border. */
+#mainFrame {
+ padding-right: 30px;
+ border-style: none;
+ border-image: none; /* since we set a border-image below */
+}
+
+/* mainFrame won't have this border-image since we have
+ explicitly set it to 'none' using a more specific selector. */
+QFrame, QLineEdit, QComboBox[editable="true"], QSpinBox {
+ border-image: url(:/images/frame.png) 4;
+ border-width: 3;
+}
+
+QLabel {
+ border: none;
+ border-image: none;
+ padding: 0;
+ background: none;
+}
+
+/* Make text in message boxes selectable. */
+QMessageBox {
+ /* LinksAccessibleByMouse | TextSelectableByMouse */
+ messagebox-text-interaction-flags: 5;
+}
+
+/* Set the selection colors for all widgets. */
+QWidget {
+ selection-color: black;
+ selection-background-color: Silver;
+ color: black;
+}
+
+/* Make the entire row selected in item views. */
+QAbstractItemView {
+ show-decoration-selected: 1;
+}
+
+/* Nice WindowsXP-style password character for password line edits. */
+QLineEdit[echoMode="2"] {
+ lineedit-password-character: 9679;
+}
+
+/* Customize tooltips. */
+QToolTip {
+ background-color: rgb(200,200,255);
+ border-color: darkslategray;
+ border-width: 1px;
+ border-style: solid;
+ padding: 3px;
+ font: bold;
+ border-radius: 3px;
+ opacity: 200;
+}
+
+/* Customize radio buttons. */
+
+QRadioButton {
+ spacing: 5px;
+}
+
+QRadioButton::indicator {
+ width: 13px;
+ height: 13px;
+}
+
+QRadioButton::indicator::unchecked {
+ image: url(:/images/radiobutton_unchecked.png);
+}
+
+QRadioButton::indicator:unchecked:hover {
+ image: url(:/images/radiobutton_unchecked_hover.png);
+}
+
+QRadioButton::indicator:unchecked:pressed {
+ image: url(:/images/radiobutton_unchecked_pressed.png);
+}
+
+QRadioButton::indicator::checked {
+ image: url(:/images/radiobutton_checked.png);
+}
+
+QRadioButton::indicator:checked:hover {
+ image: url(:/images/radiobutton_checked_hover.png);
+}
+
+QRadioButton::indicator:checked:pressed {
+ image: url(:/images/radiobutton_checked_pressed.png);
+}
+
+/* Customize arrows. */
+
+*::down-arrow, *::menu-indicator {
+ image: url(:/images/down_arrow.png);
+ width: 7px;
+ height: 7px;
+}
+
+*::down-arrow:disabled, *::down-arrow:off {
+ image: url(:/images/down_arrow_disabled.png);
+}
+
+*::up-arrow {
+ image: url(:/images/up_arrow.png);
+ width: 7px;
+ height: 7px;
+}
+
+*::up-arrow:disabled, *::up-arrow:off {
+ image: url(:/images/up_arrow_disabled.png);
+}
+
+/* Customize push buttons and comboboxes. Our read-only combobox
+ is very similar to a push button, so they share the same border image. */
+
+QPushButton {
+ min-width: 4em;
+}
+
+QPushButton, QComboBox[editable="false"],
+QComboBox[editable="true"]::drop-down {
+ border-image: url(:/images/pushbutton.png) 5;
+ border-width: 5;
+}
+
+QPushButton:hover, QComboBox[editable="false"]:hover,
+QComboBox[editable="true"]::drop-down:hover, QMenuBar::item:hover {
+ border-image: url(:/images/pushbutton_hover.png) 5;
+ border-width: 5;
+}
+
+QPushButton:pressed, QComboBox[editable="false"]:on,
+QComboBox[editable="true"]::drop-down:on, QMenuBar::item:on {
+ border-image: url(:/images/pushbutton_pressed.png) 5;
+ border-width: 5;
+}
+
+/* Customize read-only comboboxes. */
+
+QComboBox[editable="false"] {
+ padding-left: 3px;
+ padding-right: 20px; /* space for the arrow */
+}
+
+QComboBox[editable="false"]::drop-down {
+ subcontrol-origin: padding;
+ subcontrol-position: top right;
+ width: 15px;
+ border-left-style: solid;
+ border-left-color: darkgray;
+ border-left-width: 1px;
+}
+
+QComboBox[editable="false"]::down-arrow {
+ subcontrol-origin: content;
+ subcontrol-position: center;
+ position: relative;
+ left: 1px; /* 1 pixel dropdown border */
+}
+
+/* The combobox arrow is on when the popup is open. */
+QComboBox[editable="false"]::down-arrow:on {
+ position: relative;
+ top: 1px;
+ left: 2px;
+}
+
+/* Customize editable comboboxes. */
+
+QComboBox[editable="true"] {
+ padding-right: 16px;
+}
+
+QComboBox[editable="true"]::drop-down {
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+ width: 13px;
+ position: absolute;
+ top: 2px;
+ bottom: 2px;
+ right: 2px;
+}
+
+QComboBox[editable="true"]::drop-down,
+QComboBox[editable="true"]::drop-down:hover,
+QComboBox[editable="true"]::drop-down:on {
+ border-width: 0px;
+ border-left-width: 3px; /* we need only left and center part */
+}
+
+/* Shift the arrow when it's open. */
+QComboBox[editable="true"]::down-arrow:on {
+ position: relative;
+ top: 1px;
+ left: 1px;
+}
+
+/* Customize check boxes. */
+QCheckBox {
+ spacing: 5px;
+}
+
+QCheckBox::indicator {
+ width: 13px;
+ height: 13px;
+}
+
+QCheckBox::indicator:unchecked {
+ image: url(:/images/checkbox_unchecked.png);
+}
+
+QCheckBox::indicator:unchecked:hover {
+ image: url(:/images/checkbox_unchecked_hover.png);
+}
+
+QCheckBox::indicator:unchecked:pressed {
+ image: url(:/images/checkbox_unchecked_pressed.png);
+}
+
+QCheckBox::indicator:checked {
+ image: url(:/images/checkbox_checked.png);
+}
+
+QCheckBox::indicator:checked:hover {
+ image: url(:/images/checkbox_checked_hover.png);
+}
+
+QCheckBox::indicator:checked:pressed {
+ image: url(:/images/checkbox_checked_pressed.png);
+}
+
+/* Customize the size grip. */
+QSizeGrip {
+ image: url(:/images/sizegrip.png);
+ width: 16px;
+ height: 16px;
+}
+
+/* Customize the menu bar. */
+QMenuBar {
+ border-image: none;
+ border-style: none;
+ border-width: 1px;
+ border-bottom-style: solid;
+ border-bottom-color: darkslategray;
+ padding: 2px;
+}
+
+/* Customize spin boxes. */
+
+QSpinBox {
+ padding-right: 15px;
+}
+
+QSpinBox::up-button {
+ subcontrol-origin: border;
+ subcontrol-position: top right;
+
+ width: 16px; /* 16 + 2*1px border-width = 15px padding + 3px parent border */
+ border-image: url(:/images/spinup.png) 1;
+ border-width: 1px;
+}
+
+QSpinBox::up-button:hover {
+ border-image: url(:/images/spinup_hover.png) 1;
+}
+
+QSpinBox::up-button:pressed {
+ border-image: url(:/images/spinup_pressed.png) 1;
+}
+
+QSpinBox::down-button {
+ subcontrol-origin: border;
+ subcontrol-position: bottom right;
+
+ width: 16px;
+ border-image: url(:/images/spindown.png) 1;
+ border-width: 1px;
+ border-top-width: 0;
+}
+
+QSpinBox::down-button:hover {
+ border-image: url(:/images/spindown_hover.png) 1;
+}
+
+QSpinBox::down-button:pressed {
+ border-image: url(:/images/spindown_pressed.png) 1;
+}
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/stylesheet.pro b/tests/manual/examples/widgets/widgets/stylesheet/stylesheet.pro
new file mode 100644
index 0000000000..0fe3187f63
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/stylesheet.pro
@@ -0,0 +1,15 @@
+QT += widgets
+requires(qtConfig(combobox))
+
+HEADERS = mainwindow.h \
+ stylesheeteditor.h
+FORMS = mainwindow.ui \
+ stylesheeteditor.ui
+RESOURCES = stylesheet.qrc
+SOURCES = main.cpp \
+ mainwindow.cpp \
+ stylesheeteditor.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/stylesheet
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/stylesheet.qrc b/tests/manual/examples/widgets/widgets/stylesheet/stylesheet.qrc
new file mode 100644
index 0000000000..e1e61a920a
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/stylesheet.qrc
@@ -0,0 +1,39 @@
+<RCC>
+<qresource prefix="/">
+ <file>layouts/default.ui</file>
+ <file>layouts/pagefold.ui</file>
+ <file>qss/coffee.qss</file>
+ <file>qss/default.qss</file>
+ <file>qss/pagefold.qss</file>
+ <file>images/pagefold.png</file>
+ <file>images/frame.png</file>
+ <file>images/radiobutton_unchecked.png</file>
+ <file>images/radiobutton_unchecked_pressed.png</file>
+ <file>images/radiobutton_unchecked_hover.png</file>
+ <file>images/radiobutton_checked.png</file>
+ <file>images/radiobutton_checked_pressed.png</file>
+ <file>images/radiobutton_checked_hover.png</file>
+ <file>images/pushbutton.png</file>
+ <file>images/pushbutton_hover.png</file>
+ <file>images/pushbutton_pressed.png</file>
+ <file>images/checkbox_unchecked.png</file>
+ <file>images/checkbox_unchecked_pressed.png</file>
+ <file>images/checkbox_unchecked_hover.png</file>
+ <file>images/checkbox_checked.png</file>
+ <file>images/checkbox_checked_pressed.png</file>
+ <file>images/checkbox_checked_hover.png</file>
+ <file>images/down_arrow.png</file>
+ <file>images/down_arrow_disabled.png</file>
+ <file>images/up_arrow.png</file>
+ <file>images/up_arrow_disabled.png</file>
+ <file>images/sizegrip.png</file>
+ <file>images/spinup.png</file>
+ <file>images/spinup_off.png</file>
+ <file>images/spinup_hover.png</file>
+ <file>images/spinup_pressed.png</file>
+ <file>images/spindown.png</file>
+ <file>images/spindown_off.png</file>
+ <file>images/spindown_hover.png</file>
+ <file>images/spindown_pressed.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.cpp b/tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.cpp
new file mode 100644
index 0000000000..84fda79a16
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.cpp
@@ -0,0 +1,64 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "stylesheeteditor.h"
+
+#include <QFile>
+#include <QRegularExpression>
+#include <QStyleFactory>
+
+StyleSheetEditor::StyleSheetEditor(QWidget *parent)
+ : QDialog(parent)
+{
+ ui.setupUi(this);
+
+ connect(ui.styleCombo, &QComboBox::textActivated, this, &StyleSheetEditor::setStyleName);
+ connect(ui.styleSheetCombo, &QComboBox::textActivated, this, &StyleSheetEditor::setStyleSheetName);
+ connect(ui.styleTextEdit, &QTextEdit::textChanged, this, &StyleSheetEditor::setModified);
+ connect(ui.applyButton, &QAbstractButton::clicked, this, &StyleSheetEditor::apply);
+
+ QRegularExpression regExp("^.(.*)\\+?Style$");
+ QString defaultStyle = QApplication::style()->metaObject()->className();
+ QRegularExpressionMatch match = regExp.match(defaultStyle);
+
+ if (match.hasMatch())
+ defaultStyle = match.captured(1);
+
+ ui.styleCombo->addItems(QStyleFactory::keys());
+ ui.styleCombo->setCurrentIndex(ui.styleCombo->findText(defaultStyle, Qt::MatchContains));
+ ui.styleSheetCombo->setCurrentIndex(ui.styleSheetCombo->findText("Coffee"));
+ loadStyleSheet("Coffee");
+}
+
+void StyleSheetEditor::setStyleName(const QString &styleName)
+{
+ qApp->setStyle(styleName);
+ ui.applyButton->setEnabled(false);
+}
+
+void StyleSheetEditor::setStyleSheetName(const QString &sheetName)
+{
+ loadStyleSheet(sheetName);
+}
+
+void StyleSheetEditor::setModified()
+{
+ ui.applyButton->setEnabled(true);
+}
+
+void StyleSheetEditor::apply()
+{
+ qApp->setStyleSheet(ui.styleTextEdit->toPlainText());
+ ui.applyButton->setEnabled(false);
+}
+
+void StyleSheetEditor::loadStyleSheet(const QString &sheetName)
+{
+ QFile file(":/qss/" + sheetName.toLower() + ".qss");
+ file.open(QFile::ReadOnly);
+ QString styleSheet = QString::fromLatin1(file.readAll());
+
+ ui.styleTextEdit->setPlainText(styleSheet);
+ qApp->setStyleSheet(styleSheet);
+ ui.applyButton->setEnabled(false);
+}
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.h b/tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.h
new file mode 100644
index 0000000000..e61534a4f9
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.h
@@ -0,0 +1,30 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef STYLESHEETEDITOR_H
+#define STYLESHEETEDITOR_H
+
+#include <QDialog>
+
+#include "ui_stylesheeteditor.h"
+
+class StyleSheetEditor : public QDialog
+{
+ Q_OBJECT
+
+public:
+ StyleSheetEditor(QWidget *parent = nullptr);
+
+private slots:
+ void setStyleName(const QString &styleName);
+ void setStyleSheetName(const QString &styleSheetName);
+ void setModified();
+ void apply();
+
+private:
+ void loadStyleSheet(const QString &sheetName);
+
+ Ui::StyleSheetEditor ui;
+};
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.ui b/tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.ui
new file mode 100644
index 0000000000..34cd7f6d04
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/stylesheet/stylesheeteditor.ui
@@ -0,0 +1,171 @@
+<ui version="4.0" >
+ <class>StyleSheetEditor</class>
+ <widget class="QWidget" name="StyleSheetEditor" >
+ <property name="geometry" >
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>445</width>
+ <height>289</height>
+ </rect>
+ </property>
+ <property name="windowTitle" >
+ <string>Style Editor</string>
+ </property>
+ <layout class="QGridLayout" >
+ <property name="margin" >
+ <number>9</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item row="0" column="6" >
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType" >
+ <enum>QSizePolicy::MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>32</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="0" >
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType" >
+ <enum>QSizePolicy::MinimumExpanding</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>32</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="5" >
+ <widget class="QComboBox" name="styleSheetCombo" >
+ <item>
+ <property name="text" >
+ <string>Default</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Coffee</string>
+ </property>
+ </item>
+ <item>
+ <property name="text" >
+ <string>Pagefold</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="0" column="3" >
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeType" >
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>10</width>
+ <height>16</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item row="0" column="2" >
+ <widget class="QComboBox" name="styleCombo" >
+ <property name="sizePolicy" >
+ <sizepolicy>
+ <hsizetype>5</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1" >
+ <widget class="QLabel" name="label_7" >
+ <property name="sizePolicy" >
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text" >
+ <string>Style:</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0" colspan="7" >
+ <layout class="QHBoxLayout" >
+ <property name="margin" >
+ <number>0</number>
+ </property>
+ <property name="spacing" >
+ <number>6</number>
+ </property>
+ <item>
+ <spacer>
+ <property name="orientation" >
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" >
+ <size>
+ <width>321</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="applyButton" >
+ <property name="enabled" >
+ <bool>false</bool>
+ </property>
+ <property name="text" >
+ <string>&amp;Apply</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item row="1" column="0" colspan="7" >
+ <widget class="QTextEdit" name="styleTextEdit" />
+ </item>
+ <item row="0" column="4" >
+ <widget class="QLabel" name="label_8" >
+ <property name="sizePolicy" >
+ <sizepolicy>
+ <hsizetype>0</hsizetype>
+ <vsizetype>5</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text" >
+ <string>Style Sheet:</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/examples/widgets/widgets/tetrix/CMakeLists.txt b/tests/manual/examples/widgets/widgets/tetrix/CMakeLists.txt
new file mode 100644
index 0000000000..c591684ee6
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/tetrix/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(tetrix LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/tetrix")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(tetrix
+ main.cpp
+ tetrixboard.cpp tetrixboard.h
+ tetrixpiece.cpp tetrixpiece.h
+ tetrixwindow.cpp tetrixwindow.h
+)
+
+set_target_properties(tetrix PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(tetrix PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS tetrix
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/widgets/tetrix/main.cpp b/tests/manual/examples/widgets/widgets/tetrix/main.cpp
new file mode 100644
index 0000000000..24791bde26
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/tetrix/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "tetrixwindow.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ TetrixWindow window;
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/widgets/tetrix/tetrix.pro b/tests/manual/examples/widgets/widgets/tetrix/tetrix.pro
new file mode 100644
index 0000000000..bb9f855fb0
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/tetrix/tetrix.pro
@@ -0,0 +1,13 @@
+QT += widgets
+
+HEADERS = tetrixboard.h \
+ tetrixpiece.h \
+ tetrixwindow.h
+SOURCES = main.cpp \
+ tetrixboard.cpp \
+ tetrixpiece.cpp \
+ tetrixwindow.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/tetrix
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/widgets/tetrix/tetrixboard.cpp b/tests/manual/examples/widgets/widgets/tetrix/tetrixboard.cpp
new file mode 100644
index 0000000000..0c5771ad89
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/tetrix/tetrixboard.cpp
@@ -0,0 +1,371 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "tetrixboard.h"
+
+#include <QKeyEvent>
+#include <QLabel>
+#include <QPainter>
+
+//! [0]
+TetrixBoard::TetrixBoard(QWidget *parent)
+ : QFrame(parent), isStarted(false), isPaused(false)
+{
+ setFrameStyle(QFrame::Panel | QFrame::Sunken);
+ setFocusPolicy(Qt::StrongFocus);
+ clearBoard();
+
+ nextPiece.setRandomShape();
+}
+//! [0]
+
+//! [1]
+void TetrixBoard::setNextPieceLabel(QLabel *label)
+{
+ nextPieceLabel = label;
+}
+//! [1]
+
+//! [2]
+QSize TetrixBoard::sizeHint() const
+{
+ return QSize(BoardWidth * 15 + frameWidth() * 2,
+ BoardHeight * 15 + frameWidth() * 2);
+}
+
+QSize TetrixBoard::minimumSizeHint() const
+//! [2] //! [3]
+{
+ return QSize(BoardWidth * 5 + frameWidth() * 2,
+ BoardHeight * 5 + frameWidth() * 2);
+}
+//! [3]
+
+//! [4]
+void TetrixBoard::start()
+{
+ if (isPaused)
+ return;
+
+ isStarted = true;
+ isWaitingAfterLine = false;
+ numLinesRemoved = 0;
+ numPiecesDropped = 0;
+ score = 0;
+ level = 1;
+ clearBoard();
+
+ emit linesRemovedChanged(numLinesRemoved);
+ emit scoreChanged(score);
+ emit levelChanged(level);
+
+ newPiece();
+ timer.start(timeoutTime(), this);
+}
+//! [4]
+
+//! [5]
+void TetrixBoard::pause()
+{
+ if (!isStarted)
+ return;
+
+ isPaused = !isPaused;
+ if (isPaused) {
+ timer.stop();
+ } else {
+ timer.start(timeoutTime(), this);
+ }
+ update();
+//! [5] //! [6]
+}
+//! [6]
+
+//! [7]
+void TetrixBoard::paintEvent(QPaintEvent *event)
+{
+ QFrame::paintEvent(event);
+
+ QPainter painter(this);
+ QRect rect = contentsRect();
+//! [7]
+
+ if (isPaused) {
+ painter.drawText(rect, Qt::AlignCenter, tr("Pause"));
+ return;
+ }
+
+//! [8]
+ int boardTop = rect.bottom() - BoardHeight*squareHeight();
+
+ for (int i = 0; i < BoardHeight; ++i) {
+ for (int j = 0; j < BoardWidth; ++j) {
+ TetrixShape shape = shapeAt(j, BoardHeight - i - 1);
+ if (shape != NoShape)
+ drawSquare(painter, rect.left() + j * squareWidth(),
+ boardTop + i * squareHeight(), shape);
+ }
+//! [8] //! [9]
+ }
+//! [9]
+
+//! [10]
+ if (curPiece.shape() != NoShape) {
+ for (int i = 0; i < 4; ++i) {
+ int x = curX + curPiece.x(i);
+ int y = curY - curPiece.y(i);
+ drawSquare(painter, rect.left() + x * squareWidth(),
+ boardTop + (BoardHeight - y - 1) * squareHeight(),
+ curPiece.shape());
+ }
+//! [10] //! [11]
+ }
+//! [11] //! [12]
+}
+//! [12]
+
+//! [13]
+void TetrixBoard::keyPressEvent(QKeyEvent *event)
+{
+ if (!isStarted || isPaused || curPiece.shape() == NoShape) {
+ QFrame::keyPressEvent(event);
+ return;
+ }
+//! [13]
+
+//! [14]
+ switch (event->key()) {
+ case Qt::Key_Left:
+ tryMove(curPiece, curX - 1, curY);
+ break;
+ case Qt::Key_Right:
+ tryMove(curPiece, curX + 1, curY);
+ break;
+ case Qt::Key_Down:
+ tryMove(curPiece.rotatedRight(), curX, curY);
+ break;
+ case Qt::Key_Up:
+ tryMove(curPiece.rotatedLeft(), curX, curY);
+ break;
+ case Qt::Key_Space:
+ dropDown();
+ break;
+ case Qt::Key_D:
+ oneLineDown();
+ break;
+ default:
+ QFrame::keyPressEvent(event);
+ }
+//! [14]
+}
+
+//! [15]
+void TetrixBoard::timerEvent(QTimerEvent *event)
+{
+ if (event->timerId() == timer.timerId()) {
+ if (isWaitingAfterLine) {
+ isWaitingAfterLine = false;
+ newPiece();
+ timer.start(timeoutTime(), this);
+ } else {
+ oneLineDown();
+ }
+ } else {
+ QFrame::timerEvent(event);
+//! [15] //! [16]
+ }
+//! [16] //! [17]
+}
+//! [17]
+
+//! [18]
+void TetrixBoard::clearBoard()
+{
+ for (int i = 0; i < BoardHeight * BoardWidth; ++i)
+ board[i] = NoShape;
+}
+//! [18]
+
+//! [19]
+void TetrixBoard::dropDown()
+{
+ int dropHeight = 0;
+ int newY = curY;
+ while (newY > 0) {
+ if (!tryMove(curPiece, curX, newY - 1))
+ break;
+ --newY;
+ ++dropHeight;
+ }
+ pieceDropped(dropHeight);
+//! [19] //! [20]
+}
+//! [20]
+
+//! [21]
+void TetrixBoard::oneLineDown()
+{
+ if (!tryMove(curPiece, curX, curY - 1))
+ pieceDropped(0);
+}
+//! [21]
+
+//! [22]
+void TetrixBoard::pieceDropped(int dropHeight)
+{
+ for (int i = 0; i < 4; ++i) {
+ int x = curX + curPiece.x(i);
+ int y = curY - curPiece.y(i);
+ shapeAt(x, y) = curPiece.shape();
+ }
+
+ ++numPiecesDropped;
+ if (numPiecesDropped % 25 == 0) {
+ ++level;
+ timer.start(timeoutTime(), this);
+ emit levelChanged(level);
+ }
+
+ score += dropHeight + 7;
+ emit scoreChanged(score);
+ removeFullLines();
+
+ if (!isWaitingAfterLine)
+ newPiece();
+//! [22] //! [23]
+}
+//! [23]
+
+//! [24]
+void TetrixBoard::removeFullLines()
+{
+ int numFullLines = 0;
+
+ for (int i = BoardHeight - 1; i >= 0; --i) {
+ bool lineIsFull = true;
+
+ for (int j = 0; j < BoardWidth; ++j) {
+ if (shapeAt(j, i) == NoShape) {
+ lineIsFull = false;
+ break;
+ }
+ }
+
+ if (lineIsFull) {
+//! [24] //! [25]
+ ++numFullLines;
+ for (int k = i; k < BoardHeight - 1; ++k) {
+ for (int j = 0; j < BoardWidth; ++j)
+ shapeAt(j, k) = shapeAt(j, k + 1);
+ }
+//! [25] //! [26]
+ for (int j = 0; j < BoardWidth; ++j)
+ shapeAt(j, BoardHeight - 1) = NoShape;
+ }
+//! [26] //! [27]
+ }
+//! [27]
+
+//! [28]
+ if (numFullLines > 0) {
+ numLinesRemoved += numFullLines;
+ score += 10 * numFullLines;
+ emit linesRemovedChanged(numLinesRemoved);
+ emit scoreChanged(score);
+
+ timer.start(500, this);
+ isWaitingAfterLine = true;
+ curPiece.setShape(NoShape);
+ update();
+ }
+//! [28] //! [29]
+}
+//! [29]
+
+//! [30]
+void TetrixBoard::newPiece()
+{
+ curPiece = nextPiece;
+ nextPiece.setRandomShape();
+ showNextPiece();
+ curX = BoardWidth / 2 + 1;
+ curY = BoardHeight - 1 + curPiece.minY();
+
+ if (!tryMove(curPiece, curX, curY)) {
+ curPiece.setShape(NoShape);
+ timer.stop();
+ isStarted = false;
+ }
+//! [30] //! [31]
+}
+//! [31]
+
+//! [32]
+void TetrixBoard::showNextPiece()
+{
+ if (!nextPieceLabel)
+ return;
+
+ int dx = nextPiece.maxX() - nextPiece.minX() + 1;
+ int dy = nextPiece.maxY() - nextPiece.minY() + 1;
+
+ QPixmap pixmap(dx * squareWidth(), dy * squareHeight());
+ QPainter painter(&pixmap);
+ painter.fillRect(pixmap.rect(), nextPieceLabel->palette().window());
+
+ for (int i = 0; i < 4; ++i) {
+ int x = nextPiece.x(i) - nextPiece.minX();
+ int y = nextPiece.y(i) - nextPiece.minY();
+ drawSquare(painter, x * squareWidth(), y * squareHeight(),
+ nextPiece.shape());
+ }
+ nextPieceLabel->setPixmap(pixmap);
+//! [32] //! [33]
+}
+//! [33]
+
+//! [34]
+bool TetrixBoard::tryMove(const TetrixPiece &newPiece, int newX, int newY)
+{
+ for (int i = 0; i < 4; ++i) {
+ int x = newX + newPiece.x(i);
+ int y = newY - newPiece.y(i);
+ if (x < 0 || x >= BoardWidth || y < 0 || y >= BoardHeight)
+ return false;
+ if (shapeAt(x, y) != NoShape)
+ return false;
+ }
+//! [34]
+
+//! [35]
+ curPiece = newPiece;
+ curX = newX;
+ curY = newY;
+ update();
+ return true;
+}
+//! [35]
+
+//! [36]
+void TetrixBoard::drawSquare(QPainter &painter, int x, int y, TetrixShape shape)
+{
+ static constexpr QRgb colorTable[8] = {
+ 0x000000, 0xCC6666, 0x66CC66, 0x6666CC,
+ 0xCCCC66, 0xCC66CC, 0x66CCCC, 0xDAAA00
+ };
+
+ QColor color = colorTable[int(shape)];
+ painter.fillRect(x + 1, y + 1, squareWidth() - 2, squareHeight() - 2,
+ color);
+
+ painter.setPen(color.lighter());
+ painter.drawLine(x, y + squareHeight() - 1, x, y);
+ painter.drawLine(x, y, x + squareWidth() - 1, y);
+
+ painter.setPen(color.darker());
+ painter.drawLine(x + 1, y + squareHeight() - 1,
+ x + squareWidth() - 1, y + squareHeight() - 1);
+ painter.drawLine(x + squareWidth() - 1, y + squareHeight() - 1,
+ x + squareWidth() - 1, y + 1);
+}
+//! [36]
diff --git a/tests/manual/examples/widgets/widgets/tetrix/tetrixboard.h b/tests/manual/examples/widgets/widgets/tetrix/tetrixboard.h
new file mode 100644
index 0000000000..c2fe3fd01e
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/tetrix/tetrixboard.h
@@ -0,0 +1,79 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef TETRIXBOARD_H
+#define TETRIXBOARD_H
+
+#include <QBasicTimer>
+#include <QFrame>
+#include <QPointer>
+
+#include "tetrixpiece.h"
+
+QT_BEGIN_NAMESPACE
+class QLabel;
+QT_END_NAMESPACE
+
+//! [0]
+class TetrixBoard : public QFrame
+{
+ Q_OBJECT
+
+public:
+ TetrixBoard(QWidget *parent = nullptr);
+
+ void setNextPieceLabel(QLabel *label);
+ QSize sizeHint() const override;
+ QSize minimumSizeHint() const override;
+
+public slots:
+ void start();
+ void pause();
+
+signals:
+ void scoreChanged(int score);
+ void levelChanged(int level);
+ void linesRemovedChanged(int numLines);
+
+protected:
+ void paintEvent(QPaintEvent *event) override;
+ void keyPressEvent(QKeyEvent *event) override;
+ void timerEvent(QTimerEvent *event) override;
+//! [0]
+
+//! [1]
+private:
+ enum { BoardWidth = 10, BoardHeight = 22 };
+
+ TetrixShape &shapeAt(int x, int y) { return board[(y * BoardWidth) + x]; }
+ int timeoutTime() { return 1000 / (1 + level); }
+ int squareWidth() { return contentsRect().width() / BoardWidth; }
+ int squareHeight() { return contentsRect().height() / BoardHeight; }
+ void clearBoard();
+ void dropDown();
+ void oneLineDown();
+ void pieceDropped(int dropHeight);
+ void removeFullLines();
+ void newPiece();
+ void showNextPiece();
+ bool tryMove(const TetrixPiece &newPiece, int newX, int newY);
+ void drawSquare(QPainter &painter, int x, int y, TetrixShape shape);
+
+ QBasicTimer timer;
+ QPointer<QLabel> nextPieceLabel;
+ bool isStarted;
+ bool isPaused;
+ bool isWaitingAfterLine;
+ TetrixPiece curPiece;
+ TetrixPiece nextPiece;
+ int curX;
+ int curY;
+ int numLinesRemoved;
+ int numPiecesDropped;
+ int score;
+ int level;
+ TetrixShape board[BoardWidth * BoardHeight];
+};
+//! [1]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/tetrix/tetrixpiece.cpp b/tests/manual/examples/widgets/widgets/tetrix/tetrixpiece.cpp
new file mode 100644
index 0000000000..5dc9e11c49
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/tetrix/tetrixpiece.cpp
@@ -0,0 +1,106 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "tetrixpiece.h"
+
+#include <QtCore>
+
+//! [0]
+void TetrixPiece::setRandomShape()
+{
+ setShape(TetrixShape(QRandomGenerator::global()->bounded(7) + 1));
+}
+//! [0]
+
+//! [1]
+void TetrixPiece::setShape(TetrixShape shape)
+{
+ static constexpr int coordsTable[8][4][2] = {
+ { { 0, 0 }, { 0, 0 }, { 0, 0 }, { 0, 0 } },
+ { { 0, -1 }, { 0, 0 }, { -1, 0 }, { -1, 1 } },
+ { { 0, -1 }, { 0, 0 }, { 1, 0 }, { 1, 1 } },
+ { { 0, -1 }, { 0, 0 }, { 0, 1 }, { 0, 2 } },
+ { { -1, 0 }, { 0, 0 }, { 1, 0 }, { 0, 1 } },
+ { { 0, 0 }, { 1, 0 }, { 0, 1 }, { 1, 1 } },
+ { { -1, -1 }, { 0, -1 }, { 0, 0 }, { 0, 1 } },
+ { { 1, -1 }, { 0, -1 }, { 0, 0 }, { 0, 1 } }
+ };
+
+ for (int i = 0; i < 4 ; i++) {
+ for (int j = 0; j < 2; ++j)
+ coords[i][j] = coordsTable[shape][i][j];
+ }
+ pieceShape = shape;
+//! [1] //! [2]
+}
+//! [2]
+
+//! [3]
+int TetrixPiece::minX() const
+{
+ int min = coords[0][0];
+ for (int i = 1; i < 4; ++i)
+ min = qMin(min, coords[i][0]);
+ return min;
+}
+
+int TetrixPiece::maxX() const
+//! [3] //! [4]
+{
+ int max = coords[0][0];
+ for (int i = 1; i < 4; ++i)
+ max = qMax(max, coords[i][0]);
+ return max;
+}
+//! [4]
+
+//! [5]
+int TetrixPiece::minY() const
+{
+ int min = coords[0][1];
+ for (int i = 1; i < 4; ++i)
+ min = qMin(min, coords[i][1]);
+ return min;
+}
+
+int TetrixPiece::maxY() const
+//! [5] //! [6]
+{
+ int max = coords[0][1];
+ for (int i = 1; i < 4; ++i)
+ max = qMax(max, coords[i][1]);
+ return max;
+}
+//! [6]
+
+//! [7]
+TetrixPiece TetrixPiece::rotatedLeft() const
+{
+ if (pieceShape == SquareShape)
+ return *this;
+
+ TetrixPiece result;
+ result.pieceShape = pieceShape;
+ for (int i = 0; i < 4; ++i) {
+ result.setX(i, y(i));
+ result.setY(i, -x(i));
+ }
+//! [7]
+ return result;
+}
+
+//! [9]
+TetrixPiece TetrixPiece::rotatedRight() const
+{
+ if (pieceShape == SquareShape)
+ return *this;
+
+ TetrixPiece result;
+ result.pieceShape = pieceShape;
+ for (int i = 0; i < 4; ++i) {
+ result.setX(i, -y(i));
+ result.setY(i, x(i));
+ }
+//! [9]
+ return result;
+}
diff --git a/tests/manual/examples/widgets/widgets/tetrix/tetrixpiece.h b/tests/manual/examples/widgets/widgets/tetrix/tetrixpiece.h
new file mode 100644
index 0000000000..86a513a76e
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/tetrix/tetrixpiece.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef TETRIXPIECE_H
+#define TETRIXPIECE_H
+
+enum TetrixShape { NoShape, ZShape, SShape, LineShape, TShape, SquareShape,
+ LShape, MirroredLShape };
+
+//! [0]
+class TetrixPiece
+{
+public:
+ TetrixPiece() { setShape(NoShape); }
+
+ void setRandomShape();
+ void setShape(TetrixShape shape);
+
+ TetrixShape shape() const { return pieceShape; }
+ int x(int index) const { return coords[index][0]; }
+ int y(int index) const { return coords[index][1]; }
+ int minX() const;
+ int maxX() const;
+ int minY() const;
+ int maxY() const;
+ TetrixPiece rotatedLeft() const;
+ TetrixPiece rotatedRight() const;
+
+private:
+ void setX(int index, int x) { coords[index][0] = x; }
+ void setY(int index, int y) { coords[index][1] = y; }
+
+ TetrixShape pieceShape;
+ int coords[4][2];
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/tetrix/tetrixwindow.cpp b/tests/manual/examples/widgets/widgets/tetrix/tetrixwindow.cpp
new file mode 100644
index 0000000000..ae10a778e7
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/tetrix/tetrixwindow.cpp
@@ -0,0 +1,82 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "tetrixboard.h"
+#include "tetrixwindow.h"
+
+#include <QCoreApplication>
+#include <QGridLayout>
+#include <QLabel>
+#include <QLCDNumber>
+#include <QPushButton>
+
+//! [0]
+TetrixWindow::TetrixWindow(QWidget *parent)
+ : QWidget(parent), board(new TetrixBoard)
+{
+//! [0]
+ nextPieceLabel = new QLabel;
+ nextPieceLabel->setFrameStyle(QFrame::Box | QFrame::Raised);
+ nextPieceLabel->setAlignment(Qt::AlignCenter);
+ board->setNextPieceLabel(nextPieceLabel);
+//! [1]
+ scoreLcd = new QLCDNumber(5);
+ scoreLcd->setSegmentStyle(QLCDNumber::Filled);
+//! [1]
+ levelLcd = new QLCDNumber(2);
+ levelLcd->setSegmentStyle(QLCDNumber::Filled);
+ linesLcd = new QLCDNumber(5);
+ linesLcd->setSegmentStyle(QLCDNumber::Filled);
+
+//! [2]
+ startButton = new QPushButton(tr("&Start"));
+ startButton->setFocusPolicy(Qt::NoFocus);
+ quitButton = new QPushButton(tr("&Quit"));
+ quitButton->setFocusPolicy(Qt::NoFocus);
+ pauseButton = new QPushButton(tr("&Pause"));
+//! [2] //! [3]
+ pauseButton->setFocusPolicy(Qt::NoFocus);
+//! [3] //! [4]
+
+ connect(startButton, &QPushButton::clicked, board, &TetrixBoard::start);
+//! [4] //! [5]
+ connect(quitButton , &QPushButton::clicked, qApp, &QCoreApplication::quit);
+ connect(pauseButton, &QPushButton::clicked, board, &TetrixBoard::pause);
+ connect(board, &TetrixBoard::scoreChanged,
+ scoreLcd, qOverload<int>(&QLCDNumber::display));
+ connect(board, &TetrixBoard::levelChanged,
+ levelLcd, qOverload<int>(&QLCDNumber::display));
+ connect(board, &TetrixBoard::linesRemovedChanged,
+ linesLcd, qOverload<int>(&QLCDNumber::display));
+//! [5]
+
+//! [6]
+ QGridLayout *layout = new QGridLayout;
+ layout->addWidget(createLabel(tr("NEXT")), 0, 0);
+ layout->addWidget(nextPieceLabel, 1, 0);
+ layout->addWidget(createLabel(tr("LEVEL")), 2, 0);
+ layout->addWidget(levelLcd, 3, 0);
+ layout->addWidget(startButton, 4, 0);
+ layout->addWidget(board, 0, 1, 6, 1);
+ layout->addWidget(createLabel(tr("SCORE")), 0, 2);
+ layout->addWidget(scoreLcd, 1, 2);
+ layout->addWidget(createLabel(tr("LINES REMOVED")), 2, 2);
+ layout->addWidget(linesLcd, 3, 2);
+ layout->addWidget(quitButton, 4, 2);
+ layout->addWidget(pauseButton, 5, 2);
+ setLayout(layout);
+
+ setWindowTitle(tr("Tetrix"));
+ resize(550, 370);
+}
+//! [6]
+
+//! [7]
+QLabel *TetrixWindow::createLabel(const QString &text)
+{
+ QLabel *label = new QLabel(text);
+ label->setAlignment(Qt::AlignHCenter | Qt::AlignBottom);
+ return label;
+}
+//! [7]
+
diff --git a/tests/manual/examples/widgets/widgets/tetrix/tetrixwindow.h b/tests/manual/examples/widgets/widgets/tetrix/tetrixwindow.h
new file mode 100644
index 0000000000..2ed468717d
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/tetrix/tetrixwindow.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef TETRIXWINDOW_H
+#define TETRIXWINDOW_H
+
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QLCDNumber;
+class QLabel;
+class QPushButton;
+QT_END_NAMESPACE
+class TetrixBoard;
+
+//! [0]
+class TetrixWindow : public QWidget
+{
+ Q_OBJECT
+
+public:
+ TetrixWindow(QWidget *parent = nullptr);
+
+private:
+ QLabel *createLabel(const QString &text);
+
+ TetrixBoard *board;
+ QLabel *nextPieceLabel;
+ QLCDNumber *scoreLcd;
+ QLCDNumber *levelLcd;
+ QLCDNumber *linesLcd;
+ QPushButton *startButton;
+ QPushButton *quitButton;
+ QPushButton *pauseButton;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/widgets/validators/CMakeLists.txt b/tests/manual/examples/widgets/widgets/validators/CMakeLists.txt
new file mode 100644
index 0000000000..653b8eba78
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/CMakeLists.txt
@@ -0,0 +1,55 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(validators LANGUAGES CXX)
+
+set(CMAKE_INCLUDE_CURRENT_DIR ON)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/validators")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(validators
+ ledwidget.cpp ledwidget.h
+ localeselector.cpp localeselector.h
+ main.cpp
+ validators.ui
+ validatorwidget.cpp validatorwidget.h
+)
+
+set_target_properties(validators PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(validators PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+# Resources:
+set(validators_resource_files
+ "ledoff.png"
+ "ledon.png"
+)
+
+qt_add_resources(validators "validators"
+ PREFIX
+ "/"
+ FILES
+ ${validators_resource_files}
+)
+
+install(TARGETS validators
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/widgets/validators/ledoff.png b/tests/manual/examples/widgets/widgets/validators/ledoff.png
new file mode 100644
index 0000000000..8b1f2ed123
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/ledoff.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/validators/ledon.png b/tests/manual/examples/widgets/widgets/validators/ledon.png
new file mode 100644
index 0000000000..601c34d5a8
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/ledon.png
Binary files differ
diff --git a/tests/manual/examples/widgets/widgets/validators/ledwidget.cpp b/tests/manual/examples/widgets/widgets/validators/ledwidget.cpp
new file mode 100644
index 0000000000..5b95595a75
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/ledwidget.cpp
@@ -0,0 +1,25 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "ledwidget.h"
+
+LEDWidget::LEDWidget(QWidget *parent)
+ : QLabel(parent), onPixmap(":/ledon.png"), offPixmap(":/ledoff.png")
+{
+ setPixmap(offPixmap);
+ flashTimer.setInterval(200);
+ flashTimer.setSingleShot(true);
+ connect(&flashTimer, &QTimer::timeout, this, &LEDWidget::extinguish);
+};
+
+void LEDWidget::extinguish()
+{
+ setPixmap(offPixmap);
+}
+
+void LEDWidget::flash()
+{
+ setPixmap(onPixmap);
+ flashTimer.start();
+}
+
diff --git a/tests/manual/examples/widgets/widgets/validators/ledwidget.h b/tests/manual/examples/widgets/widgets/validators/ledwidget.h
new file mode 100644
index 0000000000..81215b668f
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/ledwidget.h
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef LEDWIDGET_H
+#define LEDWIDGET_H
+
+#include <QLabel>
+#include <QPixmap>
+#include <QTimer>
+
+class LEDWidget : public QLabel
+{
+ Q_OBJECT
+public:
+ LEDWidget(QWidget *parent = nullptr);
+public slots:
+ void flash();
+
+private slots:
+ void extinguish();
+
+private:
+ QPixmap onPixmap, offPixmap;
+ QTimer flashTimer;
+};
+
+#endif // LEDWIDGET_H
diff --git a/tests/manual/examples/widgets/widgets/validators/localeselector.cpp b/tests/manual/examples/widgets/widgets/validators/localeselector.cpp
new file mode 100644
index 0000000000..c74faa8c9d
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/localeselector.cpp
@@ -0,0 +1,48 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "localeselector.h"
+
+#include <QLocale>
+
+LocaleSelector::LocaleSelector(QWidget *parent)
+ : QComboBox(parent)
+{
+ int curIndex = -1;
+ int index = 0;
+ for (int _lang = QLocale::C; _lang <= QLocale::LastLanguage; ++_lang) {
+ QLocale::Language lang = static_cast<QLocale::Language>(_lang);
+ const QList<QLocale> locales =
+ QLocale::matchingLocales(lang, QLocale::AnyScript, QLocale::AnyTerritory);
+ for (const QLocale &l : locales) {
+ QString label = QLocale::languageToString(l.language());
+ label += QLatin1Char('/');
+ label += QLocale::territoryToString(l.territory());
+ // distinguish locales by script, if there are more than one script for a language/territory pair
+ if (QLocale::matchingLocales(l.language(), QLocale::AnyScript, l.territory()).size() > 1)
+ label += QLatin1String(" (") + QLocale::scriptToString(l.script()) + QLatin1Char(')');
+
+ addItem(label, QVariant::fromValue(l));
+
+ if (l.language() == locale().language() && l.territory() == locale().territory()
+ && (locale().script() == QLocale::AnyScript || l.script() == locale().script())) {
+ curIndex = index;
+ }
+ ++index;
+ }
+ }
+ if (curIndex != -1)
+ setCurrentIndex(curIndex);
+
+ connect(this, QOverload<int>::of(&LocaleSelector::activated),
+ this, &LocaleSelector::emitLocaleSelected);
+}
+
+void LocaleSelector::emitLocaleSelected(int index)
+{
+ QVariant v = itemData(index);
+ if (!v.isValid())
+ return;
+ const QLocale l = qvariant_cast<QLocale>(v);
+ emit localeSelected(l);
+}
diff --git a/tests/manual/examples/widgets/widgets/validators/localeselector.h b/tests/manual/examples/widgets/widgets/validators/localeselector.h
new file mode 100644
index 0000000000..c684e18d40
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/localeselector.h
@@ -0,0 +1,23 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef LOCALESELECTOR_H
+#define LOCALESELECTOR_H
+
+#include <QComboBox>
+
+class LocaleSelector : public QComboBox
+{
+ Q_OBJECT
+
+public:
+ LocaleSelector(QWidget *parent = nullptr);
+
+signals:
+ void localeSelected(const QLocale &locale);
+
+private slots:
+ void emitLocaleSelected(int index);
+};
+
+#endif //LOCALESELECTOR_H
diff --git a/tests/manual/examples/widgets/widgets/validators/main.cpp b/tests/manual/examples/widgets/widgets/validators/main.cpp
new file mode 100644
index 0000000000..c09d428416
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/main.cpp
@@ -0,0 +1,16 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "validatorwidget.h"
+
+#include <QApplication>
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ ValidatorWidget w;
+ w.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/widgets/validators/validators.pro b/tests/manual/examples/widgets/widgets/validators/validators.pro
new file mode 100644
index 0000000000..029cf95aca
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/validators.pro
@@ -0,0 +1,12 @@
+QT += widgets
+requires(qtConfig(combobox))
+
+FORMS += validators.ui
+RESOURCES += validators.qrc
+
+SOURCES += main.cpp ledwidget.cpp localeselector.cpp validatorwidget.cpp
+HEADERS += ledwidget.h localeselector.h validatorwidget.h
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/validators
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/widgets/validators/validators.qrc b/tests/manual/examples/widgets/widgets/validators/validators.qrc
new file mode 100644
index 0000000000..94874317a8
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/validators.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/" >
+ <file>ledoff.png</file>
+ <file>ledon.png</file>
+ </qresource>
+</RCC>
diff --git a/tests/manual/examples/widgets/widgets/validators/validators.ui b/tests/manual/examples/widgets/widgets/validators/validators.ui
new file mode 100644
index 0000000000..cd984e6b97
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/validators.ui
@@ -0,0 +1,468 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>ValidatorsForm</class>
+ <widget class="QWidget" name="ValidatorsForm">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>526</width>
+ <height>443</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Validators</string>
+ </property>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>9</number>
+ </property>
+ <item>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <widget class="LocaleSelector" name="localeSelector"/>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>QIntValidator</string>
+ </property>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>9</number>
+ </property>
+ <item>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <layout class="QGridLayout">
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Min:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QSpinBox" name="minVal">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimum">
+ <number>-1000000</number>
+ </property>
+ <property name="maximum">
+ <number>1000000</number>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Max:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QSpinBox" name="maxVal">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimum">
+ <number>-1000000</number>
+ </property>
+ <property name="maximum">
+ <number>1000000</number>
+ </property>
+ <property name="value">
+ <number>1000</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QFrame" name="frame">
+ <property name="frameShape">
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Sunken</enum>
+ </property>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>9</number>
+ </property>
+ <item>
+ <widget class="LEDWidget" name="ledWidget">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Fixed">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="pixmap">
+ <pixmap resource="validators.qrc">:/ledoff.png</pixmap>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_7">
+ <property name="text">
+ <string>editingFinished()</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="editor"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>QDoubleValidator</string>
+ </property>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>9</number>
+ </property>
+ <item>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <layout class="QGridLayout">
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Min:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QDoubleSpinBox" name="doubleMinVal">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimum">
+ <double>-100000.000000000000000</double>
+ </property>
+ <property name="maximum">
+ <double>100000.000000000000000</double>
+ </property>
+ <property name="value">
+ <double>0.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QLabel" name="label_5">
+ <property name="text">
+ <string>Format:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="3">
+ <widget class="QComboBox" name="doubleFormat">
+ <item>
+ <property name="text">
+ <string>Standard</string>
+ </property>
+ </item>
+ <item>
+ <property name="text">
+ <string>Scientific</string>
+ </property>
+ </item>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_4">
+ <property name="text">
+ <string>Max:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QDoubleSpinBox" name="doubleMaxVal">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Minimum" vsizetype="Fixed">
+ <horstretch>1</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimum">
+ <double>-100000.000000000000000</double>
+ </property>
+ <property name="maximum">
+ <double>100000.000000000000000</double>
+ </property>
+ <property name="value">
+ <double>1000.000000000000000</double>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="2">
+ <widget class="QLabel" name="label_6">
+ <property name="text">
+ <string>Decimals:</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="3">
+ <widget class="QSpinBox" name="doubleDecimals">
+ <property name="value">
+ <number>2</number>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QFrame" name="frame_2">
+ <property name="frameShape">
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Sunken</enum>
+ </property>
+ <layout class="QVBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>9</number>
+ </property>
+ <item>
+ <widget class="LEDWidget" name="doubleLedWidget">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="pixmap">
+ <pixmap resource="validators.qrc">:/ledoff.png</pixmap>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_8">
+ <property name="text">
+ <string>editingFinished()</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeType">
+ <enum>QSizePolicy::Fixed</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="doubleEditor"/>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Vertical</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>20</width>
+ <height>111</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <layout class="QHBoxLayout">
+ <property name="spacing">
+ <number>6</number>
+ </property>
+ <property name="margin">
+ <number>0</number>
+ </property>
+ <item>
+ <spacer>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pushButton">
+ <property name="text">
+ <string>Quit</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>LEDWidget</class>
+ <extends>QLabel</extends>
+ <header>ledwidget.h</header>
+ </customwidget>
+ <customwidget>
+ <class>LocaleSelector</class>
+ <extends>QComboBox</extends>
+ <header>localeselector.h</header>
+ </customwidget>
+ </customwidgets>
+ <resources>
+ <include location="validators.qrc"/>
+ </resources>
+ <connections>
+ <connection>
+ <sender>pushButton</sender>
+ <signal>clicked()</signal>
+ <receiver>ValidatorsForm</receiver>
+ <slot>close()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>94</x>
+ <y>274</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>131</x>
+ <y>260</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/tests/manual/examples/widgets/widgets/validators/validatorwidget.cpp b/tests/manual/examples/widgets/widgets/validators/validatorwidget.cpp
new file mode 100644
index 0000000000..7782342221
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/validatorwidget.cpp
@@ -0,0 +1,75 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "validatorwidget.h"
+
+#include <QIntValidator>
+
+ValidatorWidget::ValidatorWidget(QWidget *parent)
+ : QWidget(parent)
+{
+ setupUi(this);
+
+ connect(localeSelector, &LocaleSelector::localeSelected,
+ this, &ValidatorWidget::setLocale);
+ connect(localeSelector, &LocaleSelector::localeSelected,
+ this, &ValidatorWidget::updateValidator);
+ connect(localeSelector, &LocaleSelector::localeSelected,
+ this, &ValidatorWidget::updateDoubleValidator);
+
+ connect(minVal, &QSpinBox::editingFinished,
+ this, &ValidatorWidget::updateValidator);
+ connect(maxVal, &QSpinBox::editingFinished,
+ this, &ValidatorWidget::updateValidator);
+ connect(editor, &QLineEdit::editingFinished,
+ ledWidget, &LEDWidget::flash);
+
+ connect(doubleMaxVal, &QDoubleSpinBox::editingFinished,
+ this, &ValidatorWidget::updateDoubleValidator);
+ connect(doubleMinVal, &QDoubleSpinBox::editingFinished,
+ this, &ValidatorWidget::updateDoubleValidator);
+ connect(doubleDecimals, &QSpinBox::valueChanged,
+ this, &ValidatorWidget::updateDoubleValidator);
+ connect(doubleFormat, &QComboBox::activated,
+ this, &ValidatorWidget::updateDoubleValidator);
+ connect(doubleEditor, &QLineEdit::editingFinished,
+ doubleLedWidget, &LEDWidget::flash);
+
+ updateValidator();
+ updateDoubleValidator();
+}
+
+void ValidatorWidget::updateValidator()
+{
+ QIntValidator *v = new QIntValidator(minVal->value(), maxVal->value(), this);
+ v->setLocale(locale());
+ delete editor->validator();
+ editor->setValidator(v);
+
+ QString s = editor->text();
+ int i = 0;
+ if (v->validate(s, i) == QValidator::Invalid) {
+ editor->clear();
+ } else {
+ editor->setText(s);
+ }
+}
+
+void ValidatorWidget::updateDoubleValidator()
+{
+ QDoubleValidator *v
+ = new QDoubleValidator(doubleMinVal->value(), doubleMaxVal->value(),
+ doubleDecimals->value(), this);
+ v->setNotation(static_cast<QDoubleValidator::Notation>(doubleFormat->currentIndex()));
+ v->setLocale(locale());
+ delete doubleEditor->validator();
+ doubleEditor->setValidator(v);
+
+ QString s = doubleEditor->text();
+ int i = 0;
+ if (v->validate(s, i) == QValidator::Invalid) {
+ doubleEditor->clear();
+ } else {
+ doubleEditor->setText(s);
+ }
+}
diff --git a/tests/manual/examples/widgets/widgets/validators/validatorwidget.h b/tests/manual/examples/widgets/widgets/validators/validatorwidget.h
new file mode 100644
index 0000000000..d186c5863b
--- /dev/null
+++ b/tests/manual/examples/widgets/widgets/validators/validatorwidget.h
@@ -0,0 +1,22 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef VALIDATORWIDGET_H
+#define VALIDATORWIDGET_H
+
+#include <QWidget>
+
+#include "ui_validators.h"
+
+class ValidatorWidget : public QWidget, public Ui::ValidatorsForm
+{
+ Q_OBJECT
+public:
+ ValidatorWidget(QWidget *parent = nullptr);
+
+private slots:
+ void updateValidator();
+ void updateDoubleValidator();
+};
+
+#endif // VALIDATORWIDGET_H
diff --git a/tests/manual/examples/widgets/wiggly/CMakeLists.txt b/tests/manual/examples/widgets/wiggly/CMakeLists.txt
new file mode 100644
index 0000000000..fe68396f92
--- /dev/null
+++ b/tests/manual/examples/widgets/wiggly/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(wiggly LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/wiggly")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(wiggly
+ dialog.cpp dialog.h
+ main.cpp
+ wigglywidget.cpp wigglywidget.h
+)
+
+set_target_properties(wiggly PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(wiggly PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS wiggly
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/wiggly/dialog.cpp b/tests/manual/examples/widgets/wiggly/dialog.cpp
new file mode 100644
index 0000000000..0f3aa84fd8
--- /dev/null
+++ b/tests/manual/examples/widgets/wiggly/dialog.cpp
@@ -0,0 +1,27 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "dialog.h"
+#include "wigglywidget.h"
+
+#include <QLineEdit>
+#include <QVBoxLayout>
+
+//! [0]
+Dialog::Dialog(QWidget *parent)
+ : QDialog(parent)
+{
+ WigglyWidget *wigglyWidget = new WigglyWidget;
+ QLineEdit *lineEdit = new QLineEdit;
+
+ QVBoxLayout *layout = new QVBoxLayout(this);
+ layout->addWidget(wigglyWidget);
+ layout->addWidget(lineEdit);
+
+ connect(lineEdit, &QLineEdit::textChanged, wigglyWidget, &WigglyWidget::setText);
+ lineEdit->setText(u8"🖖 " + tr("Hello world!"));
+
+ setWindowTitle(tr("Wiggly"));
+ resize(360, 145);
+}
+//! [0]
diff --git a/tests/manual/examples/widgets/wiggly/dialog.h b/tests/manual/examples/widgets/wiggly/dialog.h
new file mode 100644
index 0000000000..1f27668f4a
--- /dev/null
+++ b/tests/manual/examples/widgets/wiggly/dialog.h
@@ -0,0 +1,19 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef DIALOG_H
+#define DIALOG_H
+
+#include <QDialog>
+
+//! [0]
+class Dialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit Dialog(QWidget *parent = nullptr);
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/wiggly/main.cpp b/tests/manual/examples/widgets/wiggly/main.cpp
new file mode 100644
index 0000000000..e7df19b6a0
--- /dev/null
+++ b/tests/manual/examples/widgets/wiggly/main.cpp
@@ -0,0 +1,16 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "dialog.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ Dialog dialog;
+ dialog.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/examples/widgets/wiggly/wiggly.pro b/tests/manual/examples/widgets/wiggly/wiggly.pro
new file mode 100644
index 0000000000..0e39f18add
--- /dev/null
+++ b/tests/manual/examples/widgets/wiggly/wiggly.pro
@@ -0,0 +1,11 @@
+QT += widgets
+
+HEADERS = wigglywidget.h \
+ dialog.h
+SOURCES = wigglywidget.cpp \
+ dialog.cpp \
+ main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/wiggly
+INSTALLS += target
diff --git a/tests/manual/examples/widgets/wiggly/wigglywidget.cpp b/tests/manual/examples/widgets/wiggly/wigglywidget.cpp
new file mode 100644
index 0000000000..3e686a67cf
--- /dev/null
+++ b/tests/manual/examples/widgets/wiggly/wigglywidget.cpp
@@ -0,0 +1,65 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "wigglywidget.h"
+
+#include <QFontMetrics>
+#include <QPainter>
+#include <QTimerEvent>
+
+//! [0]
+WigglyWidget::WigglyWidget(QWidget *parent)
+ : QWidget(parent), step(0)
+{
+ setBackgroundRole(QPalette::Midlight);
+ setAutoFillBackground(true);
+
+ QFont newFont = font();
+ newFont.setPointSize(newFont.pointSize() + 20);
+ setFont(newFont);
+
+ timer.start(60, this);
+}
+//! [0]
+
+//! [1]
+void WigglyWidget::paintEvent(QPaintEvent * /* event */)
+//! [1] //! [2]
+{
+ static constexpr int sineTable[16] = {
+ 0, 38, 71, 92, 100, 92, 71, 38, 0, -38, -71, -92, -100, -92, -71, -38
+ };
+
+ QFontMetrics metrics(font());
+ int x = (width() - metrics.horizontalAdvance(text)) / 2;
+ int y = (height() + metrics.ascent() - metrics.descent()) / 2;
+ QColor color;
+//! [2]
+
+//! [3]
+ QPainter painter(this);
+//! [3] //! [4]
+ int offset = 0;
+ for (char32_t codePoint : text.toUcs4()) {
+ int index = (step + offset++) % 16;
+ color.setHsv((15 - index) * 16, 255, 191);
+ painter.setPen(color);
+ QString symbol = QString::fromUcs4(&codePoint, 1);
+ painter.drawText(x, y - ((sineTable[index] * metrics.height()) / 400), symbol);
+ x += metrics.horizontalAdvance(symbol);
+ }
+}
+//! [4]
+
+//! [5]
+void WigglyWidget::timerEvent(QTimerEvent *event)
+//! [5] //! [6]
+{
+ if (event->timerId() == timer.timerId()) {
+ ++step;
+ update();
+ } else {
+ QWidget::timerEvent(event);
+ }
+//! [6]
+}
diff --git a/tests/manual/examples/widgets/wiggly/wigglywidget.h b/tests/manual/examples/widgets/wiggly/wigglywidget.h
new file mode 100644
index 0000000000..1c21e52234
--- /dev/null
+++ b/tests/manual/examples/widgets/wiggly/wigglywidget.h
@@ -0,0 +1,32 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#ifndef WIGGLYWIDGET_H
+#define WIGGLYWIDGET_H
+
+#include <QBasicTimer>
+#include <QWidget>
+
+//! [0]
+class WigglyWidget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ WigglyWidget(QWidget *parent = nullptr);
+
+public slots:
+ void setText(const QString &newText) { text = newText; }
+
+protected:
+ void paintEvent(QPaintEvent *event) override;
+ void timerEvent(QTimerEvent *event) override;
+
+private:
+ QBasicTimer timer;
+ QString text;
+ int step;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/examples/widgets/windowcontainer/CMakeLists.txt b/tests/manual/examples/widgets/windowcontainer/CMakeLists.txt
new file mode 100644
index 0000000000..8e58ff0c84
--- /dev/null
+++ b/tests/manual/examples/widgets/windowcontainer/CMakeLists.txt
@@ -0,0 +1,42 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(windowcontainer LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/windowcontainer")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui OpenGL Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(windowcontainer
+ ../../opengl/openglwindow/openglwindow.cpp ../../opengl/openglwindow/openglwindow.h
+ windowcontainer.cpp
+)
+
+set_target_properties(windowcontainer PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_include_directories(windowcontainer PRIVATE
+ ../../opengl/openglwindow
+)
+
+target_link_libraries(windowcontainer PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::OpenGL
+ Qt6::Widgets
+)
+
+install(TARGETS windowcontainer
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/examples/widgets/windowcontainer/windowcontainer.cpp b/tests/manual/examples/widgets/windowcontainer/windowcontainer.cpp
new file mode 100644
index 0000000000..fa66684294
--- /dev/null
+++ b/tests/manual/examples/widgets/windowcontainer/windowcontainer.cpp
@@ -0,0 +1,136 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+#include "openglwindow.h"
+
+#include <QApplication>
+#include <QFocusEvent>
+#include <QHBoxLayout>
+#include <QKeyEvent>
+#include <QLineEdit>
+#include <QMouseEvent>
+#include <QPainter>
+#include <QWidget>
+
+
+// Making use of the class from the openglwindow example
+class Window : public OpenGLWindow
+{
+ Q_OBJECT
+public:
+ using OpenGLWindow::OpenGLWindow;
+
+ void render(QPainter *p) override
+ {
+ QLinearGradient g(0, 0, 0, height());
+ g.setColorAt(0, QColor("lightsteelblue"));
+ g.setColorAt(1, Qt::black);
+ p->fillRect(0, 0, width(), height(), g);
+
+ p->setPen(Qt::white);
+
+ p->drawText(20, 30, QLatin1String("This is an OpenGL based QWindow"));
+
+ if (m_key.trimmed().length() > 0) {
+ QRect bounds = p->boundingRect(QRect(0, 0, width(), height()), Qt::AlignTop | Qt::AlignLeft, m_key);
+ p->save();
+ p->translate(width() / 2.0, height() / 2.0);
+ p->scale(10, 10);
+ p->translate(-bounds.width() / 2.0, -bounds.height() / 2.0);
+ p->drawText(bounds, Qt::AlignCenter, m_key);
+ p->restore();
+ }
+
+ if (m_focus)
+ p->drawText(20, height() - 20, QLatin1String("Window has focus!"));
+
+ p->setRenderHint(QPainter::Antialiasing);
+ p->drawPolyline(m_polygon);
+ }
+
+ void mousePressEvent(QMouseEvent *e) override
+ {
+ if (!m_mouseDown) {
+ m_mouseDown = true;
+ m_polygon.clear();
+ m_polygon.append(e->position().toPoint());
+ renderLater();
+ }
+ }
+
+ void mouseMoveEvent(QMouseEvent *e) override
+ {
+ if (m_mouseDown) {
+ m_polygon.append(e->position().toPoint());
+ renderLater();
+ }
+ }
+
+ void mouseReleaseEvent(QMouseEvent *e) override
+ {
+ if (m_mouseDown) {
+ m_mouseDown = false;
+ m_polygon.append(e->position().toPoint());
+ renderLater();
+ }
+ }
+
+ void focusInEvent(QFocusEvent *) override
+ {
+ m_focus = true;
+ renderLater();
+ }
+
+ void focusOutEvent(QFocusEvent *) override
+ {
+ m_focus = false;
+ m_polygon.clear();
+ renderLater();
+ }
+
+ void keyPressEvent(QKeyEvent *e) override
+ {
+ m_key = e->text();
+ renderLater();
+ }
+
+ void keyReleaseEvent(QKeyEvent *) override
+ {
+ m_key = QString();
+ renderLater();
+ }
+private:
+ QPolygon m_polygon;
+ QString m_key;
+ bool m_mouseDown = false;
+ bool m_focus = false;
+};
+
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QWidget *widget = new QWidget;
+ QHBoxLayout *layout = new QHBoxLayout(widget);
+
+ Window *window = new Window;
+
+ QWidget *container = QWidget::createWindowContainer(window);
+ container->setMinimumSize(300, 300);
+ container->setMaximumSize(600, 600);
+ container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
+ container->setFocusPolicy(Qt::StrongFocus);
+
+ window->setGeometry(100, 100, 300, 200);
+
+ layout->addWidget(new QLineEdit(QLatin1String("A QLineEdit")));
+ layout->addWidget(container);
+ layout->addWidget(new QLineEdit(QLatin1String("A QLabel")));
+
+ widget->show();
+
+ return app.exec();
+}
+
+#include "windowcontainer.moc"
diff --git a/tests/manual/examples/widgets/windowcontainer/windowcontainer.pro b/tests/manual/examples/widgets/windowcontainer/windowcontainer.pro
new file mode 100644
index 0000000000..664ac938a2
--- /dev/null
+++ b/tests/manual/examples/widgets/windowcontainer/windowcontainer.pro
@@ -0,0 +1,9 @@
+SOURCES = windowcontainer.cpp
+
+QT += widgets
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/windowcontainer
+INSTALLS += target
+
+include(../../opengl/openglwindow/openglwindow.pri)
diff --git a/tests/manual/filetest/CMakeLists.txt b/tests/manual/filetest/CMakeLists.txt
index f1b562ccf1..bd3818a78e 100644
--- a/tests/manual/filetest/CMakeLists.txt
+++ b/tests/manual/filetest/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from filetest.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## filetest Binary:
@@ -8,6 +9,3 @@ qt_internal_add_manual_test(filetest
SOURCES
main.cpp
)
-
-#### Keys ignored in scope 1:.:.:filetest.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/filetest/main.cpp b/tests/manual/filetest/main.cpp
index 7a19599858..d30b6c62c2 100644
--- a/tests/manual/filetest/main.cpp
+++ b/tests/manual/filetest/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QDateTime>
#include <QDebug>
@@ -41,12 +16,14 @@ static const char usage1[] =
"Usage: ";
static const char usage2[] =" [KEYWORD] [ARGUMENTS]\n\n"
"Keywords: ls FILES list file information\n"
+" find FILES list file information recursively\n"
" stat FILES print detailed file information\n"
" mv SOURCE TARGET rename files using QFile::rename\n"
" cp SOURCE TARGET copy files using QFile::copy\n"
" rm FILE remove file using QFile::remove\n"
" rmr DIR remove directory recursively\n"
-" using QDir::removeRecursively\n";
+" using QDir::removeRecursively\n"
+" trash FILES moves the file or directory to trash\n";
std::ostream &operator<<(std::ostream &o, const QString &str)
{
@@ -94,7 +71,7 @@ static inline std::string permissions(const QFileInfo &fi)
return result;
}
-static int ls(int argCount, const char **args, bool recursive = false)
+static int ls(int argCount, const char **args, int depth = 0, int maxDepth = 1)
{
for (int i = 0 ; i < argCount; ++i) {
const QFileInfo fi(QString::fromLocal8Bit(args[i]));
@@ -113,13 +90,13 @@ static int ls(int argCount, const char **args, bool recursive = false)
std::cout << std::endl;
- if (recursive && fi.isDir()) {
- QDir dir(fi.fileName());
+ if (depth < maxDepth && fi.isDir()) {
+ QDir dir(fi.absoluteFilePath());
const QStringList entries = dir.entryList(QDir::AllEntries | QDir::NoDotAndDotDot);
for (const QString &s : entries) {
- QByteArray encoded = QFile::encodeName(s);
+ QByteArray encoded = QFile::encodeName(dir.filePath(s));
const char *ptr = encoded.constData();
- ls(1, &ptr, false);
+ ls(1, &ptr, depth + 1, maxDepth);
}
}
}
@@ -205,12 +182,26 @@ static int rmr(const char *dirName)
return 0;
}
+static int trash(const char *filename)
+{
+ QFile f(QString::fromLocal8Bit(filename));
+ if (!f.moveToTrash()) {
+ qWarning().nospace() << "Failed to trash " << f.fileName()
+ << ": " << f.errorString();
+ return -1;
+ }
+ return 0;
+}
+
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Q_UNUSED(a);
if (argc >= 3 && !qstrcmp(argv[1], "ls"))
- return ls(argc -2, const_cast<const char **>(argv + 2), true);
+ return ls(argc -2, const_cast<const char **>(argv + 2));
+
+ if (argc >= 3 && !qstrcmp(argv[1], "find"))
+ return ls(argc -2, const_cast<const char **>(argv + 2), 0, std::numeric_limits<int>::max());
if (argc >= 3 && !qstrcmp(argv[1], "stat"))
return stat(argc -2, argv + 2);
@@ -227,6 +218,9 @@ int main(int argc, char *argv[])
if (argc == 3 && !qstrcmp(argv[1], "rmr"))
return rmr(argv[2]);
+ if (argc == 3 && !qstrcmp(argv[1], "trash"))
+ return trash(argv[2]);
+
std::cerr << usage1 << argv[0] << usage2;
return 0;
}
diff --git a/tests/manual/findfiles/CMakeLists.txt b/tests/manual/findfiles/CMakeLists.txt
new file mode 100644
index 0000000000..db27300b1e
--- /dev/null
+++ b/tests/manual/findfiles/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(findfiles LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/dialogs/findfiles")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(findfiles
+ main.cpp
+ window.cpp window.h
+)
+
+set_target_properties(findfiles PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(findfiles PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS findfiles
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/findfiles/findfiles.pro b/tests/manual/findfiles/findfiles.pro
new file mode 100644
index 0000000000..4fb77f0dd7
--- /dev/null
+++ b/tests/manual/findfiles/findfiles.pro
@@ -0,0 +1,10 @@
+QT += widgets
+requires(qtConfig(filedialog))
+
+HEADERS = window.h
+SOURCES = main.cpp \
+ window.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/dialogs/findfiles
+INSTALLS += target
diff --git a/tests/manual/findfiles/findfiles.qdoc b/tests/manual/findfiles/findfiles.qdoc
new file mode 100644
index 0000000000..ec00698703
--- /dev/null
+++ b/tests/manual/findfiles/findfiles.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
+
+/*!
+ \example dialogs/findfiles
+ \title Find Files Example
+ \ingroup examples-dialogs
+
+ \brief A dialog for finding files in a specified folder.
+
+ The Find Files application allows the user to search for files in a
+ specified directory, matching a given file name or wildcard,
+ and containing a specified string (if filled in). The search
+ result is displayed in a table containing the names of the files
+ and their sizes. The application also shows the number of files found.
+
+ The Find Files example illustrates the use of several classes:
+
+ \table
+ \row
+ \li QProgressDialog
+ \li Provide feedback on the progress of a search operation
+ \row
+ \li QFileDialog
+ \li Browse through a file list
+ \row
+ \li QTextStream
+ \li Use stream operators to read a file
+ \row
+ \li QTableWidget
+ \li Browse through the search results in a table
+ \row
+ \li QDesktopServices
+ \li Open files in the result list in a suitable application
+ \endtable
+
+ \image findfiles-example.png Screenshot of the Find Files example
+
+
+ \section1 Window Class Definition
+
+ The \c Window class inherits QWidget, and is the main application
+ widget. It shows the search options and displays the search
+ results.
+
+ \snippet dialogs/findfiles/window.h 0
+
+ The application has two private slots:
+ \table
+ \row
+ \li The \c browse() slot
+ \li Called whenever the user wants to browse for a directory to search in
+ \row
+ \li The \c find() slot
+ \li Called whenever the user launches a search with the \uicontrol Find button
+ \endtable
+
+ In addition we declare several private functions:
+
+ \table
+ \row
+ \li findFiles()
+ \li Search for files matching the search parameters
+ \row
+ \li showFiles()
+ \li Display the search result
+ \row
+ \li ceateButton()
+ \li Construct the widget
+ \row
+ \li createComboBox()
+ \li Construct the widget
+ \row
+ \li createFilesTable()
+ \li Construct the widget
+ \endtable
+
+ \section1 Window Class Implementation
+
+ In the constructor we first create the application's widgets.
+
+ \snippet dialogs/findfiles/window.cpp 0
+
+ We create the widgets to build up the UI, and we add them to a main layout
+ using QGridLayout. We have, however, put the \c Find and \c Quit buttons
+ and a stretchable space in a separate \l QHBoxLayout first, to make the
+ buttons appear in the \c Window widget's bottom right corner.
+
+ Alternatively, we could have used \QD to construct a UI file,
+ and \l {uic} to generate this code.
+
+ \snippet dialogs/findfiles/window.cpp 1
+
+ We did not create a \l QMenuBar with a \uicontrol Quit menu item; but we
+ would still like to have a keyboard shortcut for quitting. Since we
+ construct a \l QShortcut with \l QKeySequence::Quit, and connect it to
+ \l QApplication::quit(), on most platforms it will be possible to press
+ Control-Q to quit (or whichever standard Quit key is configured on that platform).
+ (On \macos, this is redundant, because every application gets a
+ \uicontrol Quit menu item automatically; but it helps to make the application portable.)
+
+ \snippet dialogs/findfiles/window.cpp 2
+
+ The \c browse() slot presents a file dialog to the user, using the
+ QFileDialog class. QFileDialog enables a user to traverse the file
+ system in order to select one or many files or a directory. The
+ easiest way to create a QFileDialog is to use the convenience
+ static functions.
+
+ Here we use the static QFileDialog::getExistingDirectory()
+ function which returns an existing directory selected by the
+ user. Then we display the directory in the directory combobox
+ using the QComboBox::addItem() function and update the current
+ index.
+
+ QComboBox::addItem() adds an item to the combobox with the given
+ text (if not already present in the list), and containing
+ the specified userData. The item is appended to the list of
+ existing items.
+
+ \snippet dialogs/findfiles/window.cpp 3
+
+ The \c find() slot is called whenever the user requests a new
+ search by pressing the \uicontrol Find button.
+
+ First we eliminate any previous search results by setting the
+ table widgets row count to zero. Then we retrieve the
+ specified file name, text, and directory path from the respective
+ comboboxes.
+
+ \snippet dialogs/findfiles/window.cpp 4
+
+ We use the directory's path to create a QDir; the QDir class
+ provides access to the directory structure and its contents.
+
+ We use QDirIterator to iterate over the files that match the
+ specified file name and build a QStringList of paths.
+
+ Then we search through all the files in the list, using the private
+ \c findFiles() function, eliminating the ones that don't contain the
+ specified text. We sort them (because QDirIterator did not). And finally,
+ we display the results using the private \c showFiles() function.
+
+ If the user didn't specify any text, there is no reason to search
+ through the files, so we sort and display the results immediately.
+
+ \image findfiles_progress_dialog.png Screenshot of the Progress Dialog
+
+ \snippet dialogs/findfiles/window.cpp 5
+
+ In the private \c findFiles() function we search through a list of
+ files, looking for the ones that contain a specified text. This
+ can be a very slow operation depending on the number of files as
+ well as their sizes. QProgressDialog displays a progress dialog
+ if the application has to search through a large number of files,
+ or if some of the files have a large size. QProgressDialog can
+ also allow the user to abort the operation if it takes too much
+ time.
+
+ \snippet dialogs/findfiles/window.cpp 6
+
+ We run through the files, one at a time, and for each file we
+ update the QProgressDialog value. This property holds the current
+ amount of progress made. We also update the progress dialog's
+ label.
+
+ Then we call the QCoreApplication::processEvents() function using
+ the QApplication object. In this way we interleave the display of
+ the progress made with the process of searching through the files
+ so the application doesn't appear to be frozen.
+
+ The QApplication class manages the GUI application's control flow
+ and main settings. It contains the main event loop, where all
+ events from the window system and other sources are processed and
+ dispatched. QApplication inherits QCoreApplication. The
+ QCoreApplication::processEvents() function processes all pending
+ events according to the specified QEventLoop::ProcessEventFlags
+ until there are no more events to process. The default flags are
+ QEventLoop::AllEvents.
+
+ \snippet dialogs/findfiles/window.cpp 7
+
+ After updating the QProgressDialog, we open the file in read-only
+ mode, and read one line at a time using QTextStream.
+
+ The QTextStream class provides a convenient interface for reading
+ and writing text. Using QTextStream's streaming operators, you can
+ conveniently read and write words, lines and numbers.
+
+ For each line we read we check if the QProgressDialog has been
+ canceled. If it has, we abort the operation, otherwise we check if
+ the line contains the specified text. When we find the text within
+ one of the files, we add the file's name to a list of found files
+ that contain the specified text, and start searching a new file.
+
+ Finally, we return the list of the files found.
+
+ \snippet dialogs/findfiles/window.cpp 8
+
+ Both the \c findFiles() and \c showFiles() functions are called from
+ the \c find() slot. In the \c showFiles() function we run through
+ the provided list of file names, adding each relative file name to the
+ first column in the table widget and retrieving the file's size using
+ QFileInfo for the second column. We use \l QLocale::formattedDataSize()
+ to format the file size in a human-readable form. For later use, we set
+ the absolute path as a data on the QTableWidget using the
+ the role absoluteFileNameRole defined to be Qt::UserRole + 1.
+
+ \snippet dialogs/findfiles/window.cpp 17
+
+ This allows for retrieving the name of an item using a
+ convenience function:
+
+ \snippet dialogs/findfiles/window.cpp 18
+
+ We also update the total number of files found.
+
+ \snippet dialogs/findfiles/window.cpp 10
+
+ The private \c createComboBox() function is also called from the
+ constructor. We create a QComboBox with the given text, and make it
+ editable.
+
+ When the user enters a new string in an editable combobox, the
+ widget may or may not insert it, and it can insert it in several
+ locations, depending on the QComboBox::InsertPolicy. The default
+ policy is is QComboBox::InsertAtBottom.
+
+ Then we add the provided text to the combobox, and specify the
+ widget's size policies, before we return a pointer to the
+ combobox.
+
+ \snippet dialogs/findfiles/window.cpp 11
+
+ The private \c createFilesTable() function is called from the
+ constructor. In this function we create the QTableWidget that
+ will display the search results. We set its horizontal headers and
+ their resize mode.
+
+ QTableWidget inherits QTableView which provides a default
+ model/view implementation of a table view. The
+ QTableView::horizontalHeader() function returns the table view's
+ horizontal header as a QHeaderView. The QHeaderView class provides
+ a header row or header column for item views, and the
+ QHeaderView::setResizeMode() function sets the constraints on how
+ the section in the header can be resized.
+
+ Finally, we hide the QTableWidget's vertical headers using the
+ QWidget::hide() function, and remove the default grid drawn for
+ the table using the QTableView::setShowGrid() function.
+
+ \snippet dialogs/findfiles/window.cpp 12
+
+ \snippet dialogs/findfiles/window.cpp 14
+
+ The \c openFileOfItem() slot is invoked when the user double
+ clicks on a cell in the table. The QDesktopServices::openUrl()
+ knows how to open a file given the file name.
+
+ \snippet dialogs/findfiles/window.cpp 15
+ \snippet dialogs/findfiles/window.cpp 16
+
+ We set the context menu policy to of the table view to Qt::CustomContextMenu
+ and connect a slot contextMenu() to its signal
+ customContextMenuRequested(). We retrieve the absolute file name
+ from the data of the QTableWidgetItem and populate the context menu
+ with actions offering to copy the file name and to open the file.
+*/
+
diff --git a/tests/manual/findfiles/main.cpp b/tests/manual/findfiles/main.cpp
new file mode 100644
index 0000000000..8c25b7e031
--- /dev/null
+++ b/tests/manual/findfiles/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QApplication>
+
+#include "window.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ Window window;
+ window.show();
+ return app.exec();
+}
diff --git a/tests/manual/findfiles/window.cpp b/tests/manual/findfiles/window.cpp
new file mode 100644
index 0000000000..278fb7dd62
--- /dev/null
+++ b/tests/manual/findfiles/window.cpp
@@ -0,0 +1,264 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtWidgets>
+
+#include "window.h"
+
+//! [17]
+enum { absoluteFileNameRole = Qt::UserRole + 1 };
+//! [17]
+
+//! [18]
+static inline QString fileNameOfItem(const QTableWidgetItem *item)
+{
+ return item->data(absoluteFileNameRole).toString();
+}
+//! [18]
+
+//! [14]
+static inline void openFile(const QString &fileName)
+{
+ QDesktopServices::openUrl(QUrl::fromLocalFile(fileName));
+}
+//! [14]
+
+//! [0]
+Window::Window(QWidget *parent)
+ : QWidget(parent)
+{
+ setWindowTitle(tr("Find Files"));
+ QPushButton *browseButton = new QPushButton(tr("&Browse..."), this);
+ connect(browseButton, &QAbstractButton::clicked, this, &Window::browse);
+ findButton = new QPushButton(tr("&Find"), this);
+ connect(findButton, &QAbstractButton::clicked, this, &Window::find);
+
+ fileComboBox = createComboBox(tr("*"));
+ connect(fileComboBox->lineEdit(), &QLineEdit::returnPressed,
+ this, &Window::animateFindClick);
+ textComboBox = createComboBox();
+ connect(textComboBox->lineEdit(), &QLineEdit::returnPressed,
+ this, &Window::animateFindClick);
+ directoryComboBox = createComboBox(QDir::toNativeSeparators(QDir::currentPath()));
+ connect(directoryComboBox->lineEdit(), &QLineEdit::returnPressed,
+ this, &Window::animateFindClick);
+
+ filesFoundLabel = new QLabel;
+
+ createFilesTable();
+
+ QGridLayout *mainLayout = new QGridLayout(this);
+ mainLayout->addWidget(new QLabel(tr("Named:")), 0, 0);
+ mainLayout->addWidget(fileComboBox, 0, 1, 1, 2);
+ mainLayout->addWidget(new QLabel(tr("Containing text:")), 1, 0);
+ mainLayout->addWidget(textComboBox, 1, 1, 1, 2);
+ mainLayout->addWidget(new QLabel(tr("In directory:")), 2, 0);
+ mainLayout->addWidget(directoryComboBox, 2, 1);
+ mainLayout->addWidget(browseButton, 2, 2);
+ mainLayout->addWidget(filesTable, 3, 0, 1, 3);
+ mainLayout->addWidget(filesFoundLabel, 4, 0, 1, 2);
+ mainLayout->addWidget(findButton, 4, 2);
+//! [0]
+
+//! [1]
+ connect(new QShortcut(QKeySequence::Quit, this), &QShortcut::activated,
+ qApp, &QApplication::quit);
+//! [1]
+}
+
+//! [2]
+void Window::browse()
+{
+ QString directory =
+ QDir::toNativeSeparators(QFileDialog::getExistingDirectory(this, tr("Find Files"), QDir::currentPath()));
+
+ if (!directory.isEmpty()) {
+ if (directoryComboBox->findText(directory) == -1)
+ directoryComboBox->addItem(directory);
+ directoryComboBox->setCurrentIndex(directoryComboBox->findText(directory));
+ }
+}
+//! [2]
+
+static void updateComboBox(QComboBox *comboBox)
+{
+ if (comboBox->findText(comboBox->currentText()) == -1)
+ comboBox->addItem(comboBox->currentText());
+}
+
+//! [3]
+void Window::find()
+{
+ filesTable->setRowCount(0);
+
+ QString fileName = fileComboBox->currentText();
+ QString text = textComboBox->currentText();
+ QString path = QDir::cleanPath(directoryComboBox->currentText());
+ currentDir = QDir(path);
+//! [3]
+
+ updateComboBox(fileComboBox);
+ updateComboBox(textComboBox);
+ updateComboBox(directoryComboBox);
+
+//! [4]
+ QStringList filter;
+ if (!fileName.isEmpty())
+ filter << fileName;
+ QDirIterator it(path, filter, QDir::AllEntries | QDir::NoSymLinks | QDir::NoDotAndDotDot, QDirIterator::Subdirectories);
+ QStringList files;
+ while (it.hasNext())
+ files << it.next();
+ if (!text.isEmpty())
+ files = findFiles(files, text);
+ files.sort();
+ showFiles(files);
+}
+//! [4]
+
+void Window::animateFindClick()
+{
+ findButton->animateClick();
+}
+
+//! [5]
+QStringList Window::findFiles(const QStringList &files, const QString &text)
+{
+ QProgressDialog progressDialog(this);
+ progressDialog.setCancelButtonText(tr("&Cancel"));
+ progressDialog.setRange(0, files.size());
+ progressDialog.setWindowTitle(tr("Find Files"));
+
+//! [5] //! [6]
+ QMimeDatabase mimeDatabase;
+ QStringList foundFiles;
+
+ for (int i = 0; i < files.size(); ++i) {
+ progressDialog.setValue(i);
+ progressDialog.setLabelText(tr("Searching file number %1 of %n...", nullptr, files.size()).arg(i));
+ QCoreApplication::processEvents();
+//! [6]
+
+ if (progressDialog.wasCanceled())
+ break;
+
+//! [7]
+ const QString fileName = files.at(i);
+ const QMimeType mimeType = mimeDatabase.mimeTypeForFile(fileName);
+ if (mimeType.isValid() && !mimeType.inherits(QStringLiteral("text/plain"))) {
+ qWarning() << "Not searching binary file " << QDir::toNativeSeparators(fileName);
+ continue;
+ }
+ QFile file(fileName);
+ if (file.open(QIODevice::ReadOnly)) {
+ QString line;
+ QTextStream in(&file);
+ while (!in.atEnd()) {
+ if (progressDialog.wasCanceled())
+ break;
+ line = in.readLine();
+ if (line.contains(text, Qt::CaseInsensitive)) {
+ foundFiles << files[i];
+ break;
+ }
+ }
+ }
+ }
+ return foundFiles;
+}
+//! [7]
+
+//! [8]
+void Window::showFiles(const QStringList &paths)
+{
+ for (const QString &filePath : paths) {
+ const QString toolTip = QDir::toNativeSeparators(filePath);
+ const QString relativePath = QDir::toNativeSeparators(currentDir.relativeFilePath(filePath));
+ const qint64 size = QFileInfo(filePath).size();
+ QTableWidgetItem *fileNameItem = new QTableWidgetItem(relativePath);
+ fileNameItem->setData(absoluteFileNameRole, QVariant(filePath));
+ fileNameItem->setToolTip(toolTip);
+ fileNameItem->setFlags(fileNameItem->flags() ^ Qt::ItemIsEditable);
+ QTableWidgetItem *sizeItem = new QTableWidgetItem(QLocale().formattedDataSize(size));
+ sizeItem->setData(absoluteFileNameRole, QVariant(filePath));
+ sizeItem->setToolTip(toolTip);
+ sizeItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
+ sizeItem->setFlags(sizeItem->flags() ^ Qt::ItemIsEditable);
+
+ int row = filesTable->rowCount();
+ filesTable->insertRow(row);
+ filesTable->setItem(row, 0, fileNameItem);
+ filesTable->setItem(row, 1, sizeItem);
+ }
+ filesFoundLabel->setText(tr("%n file(s) found (Double click on a file to open it)", nullptr, paths.size()));
+ filesFoundLabel->setWordWrap(true);
+}
+//! [8]
+
+//! [10]
+QComboBox *Window::createComboBox(const QString &text)
+{
+ QComboBox *comboBox = new QComboBox;
+ comboBox->setEditable(true);
+ comboBox->addItem(text);
+ comboBox->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);
+ return comboBox;
+}
+//! [10]
+
+//! [11]
+void Window::createFilesTable()
+{
+ filesTable = new QTableWidget(0, 2);
+ filesTable->setSelectionBehavior(QAbstractItemView::SelectRows);
+
+ QStringList labels;
+ labels << tr("Filename") << tr("Size");
+ filesTable->setHorizontalHeaderLabels(labels);
+ filesTable->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
+ filesTable->verticalHeader()->hide();
+ filesTable->setShowGrid(false);
+//! [15]
+ filesTable->setContextMenuPolicy(Qt::CustomContextMenu);
+ connect(filesTable, &QTableWidget::customContextMenuRequested,
+ this, &Window::contextMenu);
+ connect(filesTable, &QTableWidget::cellActivated,
+ this, &Window::openFileOfItem);
+//! [15]
+}
+//! [11]
+
+
+//! [12]
+
+void Window::openFileOfItem(int row, int /* column */)
+{
+ const QTableWidgetItem *item = filesTable->item(row, 0);
+ openFile(fileNameOfItem(item));
+}
+
+//! [12]
+
+//! [16]
+void Window::contextMenu(const QPoint &pos)
+{
+ const QTableWidgetItem *item = filesTable->itemAt(pos);
+ if (!item)
+ return;
+ QMenu menu;
+#ifndef QT_NO_CLIPBOARD
+ QAction *copyAction = menu.addAction("Copy Name");
+#endif
+ QAction *openAction = menu.addAction("Open");
+ QAction *action = menu.exec(filesTable->mapToGlobal(pos));
+ if (!action)
+ return;
+ const QString fileName = fileNameOfItem(item);
+ if (action == openAction)
+ openFile(fileName);
+#ifndef QT_NO_CLIPBOARD
+ else if (action == copyAction)
+ QGuiApplication::clipboard()->setText(QDir::toNativeSeparators(fileName));
+#endif
+}
+//! [16]
diff --git a/tests/manual/findfiles/window.h b/tests/manual/findfiles/window.h
new file mode 100644
index 0000000000..ff166bf63d
--- /dev/null
+++ b/tests/manual/findfiles/window.h
@@ -0,0 +1,50 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include <QWidget>
+#include <QDir>
+
+QT_BEGIN_NAMESPACE
+class QComboBox;
+class QLabel;
+class QPushButton;
+class QTableWidget;
+class QTableWidgetItem;
+QT_END_NAMESPACE
+
+//! [0]
+class Window : public QWidget
+{
+ Q_OBJECT
+
+public:
+ Window(QWidget *parent = nullptr);
+
+private slots:
+ void browse();
+ void find();
+ void animateFindClick();
+ void openFileOfItem(int row, int column);
+ void contextMenu(const QPoint &pos);
+
+private:
+ QStringList findFiles(const QStringList &files, const QString &text);
+ void showFiles(const QStringList &paths);
+ QComboBox *createComboBox(const QString &text = QString());
+ void createFilesTable();
+
+ QComboBox *fileComboBox;
+ QComboBox *textComboBox;
+ QComboBox *directoryComboBox;
+ QLabel *filesFoundLabel;
+ QPushButton *findButton;
+ QTableWidget *filesTable;
+
+ QDir currentDir;
+};
+//! [0]
+
+#endif
diff --git a/tests/manual/fontfeatures/fontfeatures.pro b/tests/manual/fontfeatures/fontfeatures.pro
new file mode 100644
index 0000000000..62769072b4
--- /dev/null
+++ b/tests/manual/fontfeatures/fontfeatures.pro
@@ -0,0 +1,17 @@
+TEMPLATE = app
+TARGET = fontfeatures
+INCLUDEPATH += .
+QT += widgets
+
+# You can make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# Please consult the documentation of the deprecated API in order to know
+# how to port your code away from it.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_UP_TO=0x060000 # disables all APIs deprecated in Qt 6.0.0 and earlier
+
+# Input
+HEADERS += mainwindow.h
+FORMS += mainwindow.ui
+SOURCES += main.cpp \
+ mainwindow.cpp \
diff --git a/tests/manual/fontfeatures/main.cpp b/tests/manual/fontfeatures/main.cpp
new file mode 100644
index 0000000000..38c32b1bd3
--- /dev/null
+++ b/tests/manual/fontfeatures/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "mainwindow.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ MainWindow w;
+ w.show();
+ return a.exec();
+}
diff --git a/tests/manual/fontfeatures/mainwindow.cpp b/tests/manual/fontfeatures/mainwindow.cpp
new file mode 100644
index 0000000000..5e61a14d5e
--- /dev/null
+++ b/tests/manual/fontfeatures/mainwindow.cpp
@@ -0,0 +1,225 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+ , ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+
+ setup();
+ updateSampleText();
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
+
+void MainWindow::updateSampleText()
+{
+ QFont font = ui->fontComboBox->currentFont();
+ font.setPixelSize(54);
+
+ for (int i = 0; i < ui->lwFeatures->count(); ++i) {
+ QListWidgetItem *it = ui->lwFeatures->item(i);
+ if (it->checkState() != Qt::PartiallyChecked) {
+ if (const auto maybeTag = QFont::Tag::fromString(it->text().toLatin1()))
+ font.setFeature(*maybeTag, !!it->checkState());
+ }
+ }
+
+ ui->lSampleDisplay->setFont(font);
+ ui->lSampleDisplay->setText(ui->leSampleText->text());
+}
+
+void MainWindow::enableAll()
+{
+ for (int i = 0; i < ui->lwFeatures->count(); ++i) {
+ QListWidgetItem *it = ui->lwFeatures->item(i);
+ it->setCheckState(Qt::Checked);
+ }
+}
+
+void MainWindow::disableAll()
+{
+ for (int i = 0; i < ui->lwFeatures->count(); ++i) {
+ QListWidgetItem *it = ui->lwFeatures->item(i);
+ it->setCheckState(Qt::Unchecked);
+ }
+}
+
+void MainWindow::reset()
+{
+ for (int i = 0; i < ui->lwFeatures->count(); ++i) {
+ QListWidgetItem *it = ui->lwFeatures->item(i);
+ it->setCheckState(Qt::PartiallyChecked);
+ }
+}
+
+void MainWindow::setup()
+{
+ connect(ui->fontComboBox, &QFontComboBox::currentFontChanged, this, &MainWindow::updateSampleText);
+ connect(ui->leSampleText, &QLineEdit::textChanged, this, &MainWindow::updateSampleText);
+ connect(ui->lwFeatures, &QListWidget::itemChanged, this, &MainWindow::updateSampleText);
+ connect(ui->pbEnableAll, &QPushButton::clicked, this, &MainWindow::enableAll);
+ connect(ui->pbDisableAll, &QPushButton::clicked, this, &MainWindow::disableAll);
+ connect(ui->pbReset, &QPushButton::clicked, this, &MainWindow::reset);
+
+ QList<QByteArray> featureList =
+ {
+ "aalt",
+ "abvf",
+ "abvm",
+ "abvs",
+ "afrc",
+ "akhn",
+ "blwf",
+ "blwm",
+ "blws",
+ "calt",
+ "case",
+ "ccmp",
+ "cfar",
+ "chws",
+ "cjct",
+ "clig",
+ "cpct",
+ "cpsp",
+ "cswh",
+ "curs",
+ "cv01",
+ "c2pc",
+ "c2sc",
+ "dist",
+ "dlig",
+ "dnom",
+ "dtls",
+ "expt",
+ "falt",
+ "fin2",
+ "fin3",
+ "fina",
+ "flac",
+ "frac",
+ "fwid",
+ "half",
+ "haln",
+ "halt",
+ "hist",
+ "hkna",
+ "hlig",
+ "hngl",
+ "hojo",
+ "hwid",
+ "init",
+ "isol",
+ "ital",
+ "jalt",
+ "jp78",
+ "jp83",
+ "jp90",
+ "jp04",
+ "kern",
+ "lfbd",
+ "liga",
+ "ljmo",
+ "lnum",
+ "locl",
+ "ltra",
+ "ltrm",
+ "mark",
+ "med2",
+ "medi",
+ "mgrk",
+ "mkmk",
+ "mset",
+ "nalt",
+ "nlck",
+ "nukt",
+ "numr",
+ "onum",
+ "opbd",
+ "ordn",
+ "ornm",
+ "palt",
+ "pcap",
+ "pkna",
+ "pnum",
+ "pref",
+ "pres",
+ "pstf",
+ "psts",
+ "pwid",
+ "qwid",
+ "rand",
+ "rclt",
+ "rkrf",
+ "rlig",
+ "rphf",
+ "rtbd",
+ "rtla",
+ "rtlm",
+ "ruby",
+ "rvrn",
+ "salt",
+ "sinf",
+ "size",
+ "smcp",
+ "smpl",
+ "ss01",
+ "ss02",
+ "ss03",
+ "ss04",
+ "ss05",
+ "ss06",
+ "ss07",
+ "ss08",
+ "ss09",
+ "ss10",
+ "ss11",
+ "ss12",
+ "ss13",
+ "ss14",
+ "ss15",
+ "ss16",
+ "ss17",
+ "ss18",
+ "ss19",
+ "ss20",
+ "ssty",
+ "stch",
+ "subs",
+ "sups",
+ "swsh",
+ "titl",
+ "tjmo",
+ "tnam",
+ "tnum",
+ "trad",
+ "twid",
+ "unic",
+ "valt",
+ "vatu",
+ "vchw",
+ "vert",
+ "vhal",
+ "vjmo",
+ "vkna",
+ "vkrn",
+ "vpal",
+ "vrt2",
+ "vrtr",
+ "zero"
+ };
+
+ for (auto it = featureList.constBegin(); it != featureList.constEnd(); ++it) {
+ QListWidgetItem *item = new QListWidgetItem(*it);
+ item->setFlags(Qt::ItemIsUserTristate | Qt::ItemIsUserCheckable | Qt::ItemIsEnabled);
+ item->setCheckState(Qt::PartiallyChecked);
+ ui->lwFeatures->addItem(item);
+ }
+}
diff --git a/tests/manual/fontfeatures/mainwindow.h b/tests/manual/fontfeatures/mainwindow.h
new file mode 100644
index 0000000000..8df130edd6
--- /dev/null
+++ b/tests/manual/fontfeatures/mainwindow.h
@@ -0,0 +1,32 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+
+QT_BEGIN_NAMESPACE
+namespace Ui { class MainWindow; }
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+ ~MainWindow();
+
+private slots:
+ void updateSampleText();
+ void enableAll();
+ void disableAll();
+ void reset();
+
+private:
+ Ui::MainWindow *ui;
+
+ void setup();
+};
+#endif // MAINWINDOW_H
diff --git a/tests/manual/fontfeatures/mainwindow.ui b/tests/manual/fontfeatures/mainwindow.ui
new file mode 100644
index 0000000000..17f56c5a01
--- /dev/null
+++ b/tests/manual/fontfeatures/mainwindow.ui
@@ -0,0 +1,116 @@
+<?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>MainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QFontComboBox" name="fontComboBox"/>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Sample text:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QLineEdit" name="leSampleText">
+ <property name="text">
+ <string>Foobar</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <widget class="QPushButton" name="pbEnableAll">
+ <property name="text">
+ <string>Enable all</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pbDisableAll">
+ <property name="text">
+ <string>Disable all</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pbReset">
+ <property name="text">
+ <string>Reset</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QListWidget" name="lwFeatures">
+ <property name="alternatingRowColors">
+ <bool>true</bool>
+ </property>
+ <property name="flow">
+ <enum>QListView::TopToBottom</enum>
+ </property>
+ <property name="isWrapping" stdset="0">
+ <bool>false</bool>
+ </property>
+ <property name="viewMode">
+ <enum>QListView::ListMode</enum>
+ </property>
+ <property name="uniformItemSizes">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QLabel" name="lSampleDisplay">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="text">
+ <string>LABEL</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menubar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>21</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/foreignwindows/CMakeLists.txt b/tests/manual/foreignwindows/CMakeLists.txt
index 96df481ba4..41b2260946 100644
--- a/tests/manual/foreignwindows/CMakeLists.txt
+++ b/tests/manual/foreignwindows/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from foreignwindows.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## foreignwindows Binary:
@@ -15,7 +16,7 @@ qt_internal_add_manual_test(foreignwindows
QT_DIAG_LIB
INCLUDE_DIRECTORIES
../diaglib
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -23,16 +24,13 @@ qt_internal_add_manual_test(foreignwindows
Qt::Widgets
)
-#### Keys ignored in scope 1:.:.:foreignwindows.pro:<TRUE>:
-# TEMPLATE = "app"
-
## Scopes:
#####################################################################
qt_internal_extend_target(foreignwindows CONDITION WIN32
SOURCES
../diaglib/nativewindowdump_win.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
@@ -46,14 +44,14 @@ qt_internal_extend_target(foreignwindows CONDITION QT_FEATURE_widgets
../diaglib/debugproxystyle.cpp ../diaglib/debugproxystyle.h
../diaglib/logwidget.cpp ../diaglib/logwidget.h
../diaglib/qwidgetdump.cpp ../diaglib/qwidgetdump.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::WidgetsPrivate
)
qt_internal_extend_target(foreignwindows CONDITION QT_FEATURE_opengl
SOURCES
../diaglib/glinfo.cpp ../diaglib/glinfo.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::OpenGL
Qt::OpenGLWidgets
)
diff --git a/tests/manual/foreignwindows/main.cpp b/tests/manual/foreignwindows/main.cpp
index 700ecf379b..1fb4b0c167 100644
--- a/tests/manual/foreignwindows/main.cpp
+++ b/tests/manual/foreignwindows/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QtGui/QAction>
#include <QtWidgets/QApplication>
@@ -302,7 +277,7 @@ int main(int argc, char *argv[])
QPoint pos = availableGeometry.topLeft() + QPoint(availableGeometry.width(), availableGeometry.height()) / 3;
WidgetPtrList mainWindows;
- for (QWindow *window : qAsConst(windows)) {
+ for (QWindow *window : std::as_const(windows)) {
WidgetPtr mainWindow(new EmbeddingWindow(window));
mainWindow->move(pos);
mainWindow->resize(availableGeometry.size() / 4);
diff --git a/tests/manual/gestures/CMakeLists.txt b/tests/manual/gestures/CMakeLists.txt
index 7011d3221d..7ae6ae38eb 100644
--- a/tests/manual/gestures/CMakeLists.txt
+++ b/tests/manual/gestures/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from gestures.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(graphicsview)
add_subdirectory(scrollarea)
diff --git a/tests/manual/gestures/graphicsview/CMakeLists.txt b/tests/manual/gestures/graphicsview/CMakeLists.txt
index e728dba542..acb4eb5463 100644
--- a/tests/manual/gestures/graphicsview/CMakeLists.txt
+++ b/tests/manual/gestures/graphicsview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from graphicsview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_manual_graphicsview Binary:
@@ -11,7 +12,7 @@ qt_internal_add_manual_test(tst_manual_graphicsview
imageitem.cpp imageitem.h
main.cpp
mousepangesturerecognizer.cpp mousepangesturerecognizer.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/gestures/graphicsview/gestures.cpp b/tests/manual/gestures/graphicsview/gestures.cpp
index 26e6b1853b..5a46246143 100644
--- a/tests/manual/gestures/graphicsview/gestures.cpp
+++ b/tests/manual/gestures/graphicsview/gestures.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 "gestures.h"
diff --git a/tests/manual/gestures/graphicsview/gestures.h b/tests/manual/gestures/graphicsview/gestures.h
index 20a850e67e..525e9f04f6 100644
--- a/tests/manual/gestures/graphicsview/gestures.h
+++ b/tests/manual/gestures/graphicsview/gestures.h
@@ -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
#ifndef GESTURE_H
#define GESTURE_H
diff --git a/tests/manual/gestures/graphicsview/imageitem.cpp b/tests/manual/gestures/graphicsview/imageitem.cpp
index cdb3b70766..6e93232f96 100644
--- a/tests/manual/gestures/graphicsview/imageitem.cpp
+++ b/tests/manual/gestures/graphicsview/imageitem.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 "imageitem.h"
#include "gestures.h"
diff --git a/tests/manual/gestures/graphicsview/imageitem.h b/tests/manual/gestures/graphicsview/imageitem.h
index b66b377896..f3dd4cec9f 100644
--- a/tests/manual/gestures/graphicsview/imageitem.h
+++ b/tests/manual/gestures/graphicsview/imageitem.h
@@ -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
#ifndef IMAGEITEM_H
#define IMAGEITEM_H
diff --git a/tests/manual/gestures/graphicsview/main.cpp b/tests/manual/gestures/graphicsview/main.cpp
index b05d104d99..69d97bd0bc 100644
--- a/tests/manual/gestures/graphicsview/main.cpp
+++ b/tests/manual/gestures/graphicsview/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 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 <QMainWindow>
@@ -168,8 +143,8 @@ MainWindow::MainWindow()
void MainWindow::setDirectory(const QString &path)
{
QDir dir(path);
- QStringList files = dir.entryList(QDir::Files | QDir::Readable | QDir::NoDotAndDotDot);
- foreach(const QString &file, files) {
+ const QStringList files = dir.entryList(QDir::Files | QDir::Readable | QDir::NoDotAndDotDot);
+ for (const QString &file : files) {
QImageReader img(path + QLatin1Char('/') +file);
QImage image = img.read();
if (!image.isNull()) {
diff --git a/tests/manual/gestures/graphicsview/mousepangesturerecognizer.cpp b/tests/manual/gestures/graphicsview/mousepangesturerecognizer.cpp
index e70a9e4ef7..45580f8e88 100644
--- a/tests/manual/gestures/graphicsview/mousepangesturerecognizer.cpp
+++ b/tests/manual/gestures/graphicsview/mousepangesturerecognizer.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 "mousepangesturerecognizer.h"
diff --git a/tests/manual/gestures/graphicsview/mousepangesturerecognizer.h b/tests/manual/gestures/graphicsview/mousepangesturerecognizer.h
index 81eaea4f37..512171f1ae 100644
--- a/tests/manual/gestures/graphicsview/mousepangesturerecognizer.h
+++ b/tests/manual/gestures/graphicsview/mousepangesturerecognizer.h
@@ -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
#ifndef MOUSEPANGESTURERECOGNIZER_H
#define MOUSEPANGESTURERECOGNIZER_H
diff --git a/tests/manual/gestures/scrollarea/CMakeLists.txt b/tests/manual/gestures/scrollarea/CMakeLists.txt
index fe33655ca1..02ea63d040 100644
--- a/tests/manual/gestures/scrollarea/CMakeLists.txt
+++ b/tests/manual/gestures/scrollarea/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from scrollarea.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## scrollarea Binary:
@@ -9,7 +10,9 @@ qt_internal_add_manual_test(scrollarea
SOURCES
main.cpp
mousepangesturerecognizer.cpp mousepangesturerecognizer.h
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ main.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/gestures/scrollarea/main.cpp b/tests/manual/gestures/scrollarea/main.cpp
index 5378f48de9..911c3530cf 100644
--- a/tests/manual/gestures/scrollarea/main.cpp
+++ b/tests/manual/gestures/scrollarea/main.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QApplication>
#include <QSlider>
diff --git a/tests/manual/gestures/scrollarea/mousepangesturerecognizer.cpp b/tests/manual/gestures/scrollarea/mousepangesturerecognizer.cpp
index 9cf69abd97..c6d4295868 100644
--- a/tests/manual/gestures/scrollarea/mousepangesturerecognizer.cpp
+++ b/tests/manual/gestures/scrollarea/mousepangesturerecognizer.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 "mousepangesturerecognizer.h"
diff --git a/tests/manual/gestures/scrollarea/mousepangesturerecognizer.h b/tests/manual/gestures/scrollarea/mousepangesturerecognizer.h
index 81eaea4f37..512171f1ae 100644
--- a/tests/manual/gestures/scrollarea/mousepangesturerecognizer.h
+++ b/tests/manual/gestures/scrollarea/mousepangesturerecognizer.h
@@ -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
#ifndef MOUSEPANGESTURERECOGNIZER_H
#define MOUSEPANGESTURERECOGNIZER_H
diff --git a/tests/manual/graphicsframecapture/CMakeLists.txt b/tests/manual/graphicsframecapture/CMakeLists.txt
new file mode 100644
index 0000000000..8d5fc5952d
--- /dev/null
+++ b/tests/manual/graphicsframecapture/CMakeLists.txt
@@ -0,0 +1,35 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## graphicsframecapture Binary:
+#####################################################################
+
+qt_internal_add_manual_test(graphicsframecapture
+ SOURCES
+ examplewindow.cpp examplewindow.h
+ main.cpp
+ window.cpp window.h
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
+
+# Resources:
+set_source_files_properties("../rhi/shared/color.frag.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "color.frag.qsb"
+)
+set_source_files_properties("../rhi/shared/color.vert.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "color.vert.qsb"
+)
+set(graphicsframecapture_resource_files
+ "../rhi/shared/color.frag.qsb"
+ "../rhi/shared/color.vert.qsb"
+)
+
+qt_internal_add_resource(graphicsframecapture "graphicsframecapture"
+ PREFIX
+ "/"
+ FILES
+ ${graphicsframecapture_resource_files}
+)
diff --git a/tests/manual/graphicsframecapture/examplewindow.cpp b/tests/manual/graphicsframecapture/examplewindow.cpp
new file mode 100644
index 0000000000..6bc49a81ce
--- /dev/null
+++ b/tests/manual/graphicsframecapture/examplewindow.cpp
@@ -0,0 +1,116 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "examplewindow.h"
+#include <QFile>
+#include <rhi/qshader.h>
+
+static float vertexData[] = {
+ // Y up (note clipSpaceCorrMatrix in m_proj), CCW
+ -0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
+ -0.5f, -0.5f, 1.0f, 0.0f, 0.0f,
+ 0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
+
+ 0.5f, 0.5f, 1.0f, 0.0f, 0.0f,
+ -0.5f, -0.5f, 1.0f, 0.0f, 0.0f,
+ 0.5f, -0.5f, 1.0f, 0.0f, 0.0f,
+};
+
+ExampleWindow::ExampleWindow(QRhi::Implementation graphicsApi)
+ : Window(graphicsApi)
+{
+}
+
+QShader ExampleWindow::getShader(const QString &name)
+{
+ QFile f(name);
+ if (f.open(QIODevice::ReadOnly))
+ return QShader::fromSerialized(f.readAll());
+
+ return QShader();
+}
+
+void ExampleWindow::customInit()
+{
+ m_vbuf.reset(m_rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(vertexData)));
+ m_vbuf->create();
+ m_vbufReady = false;
+
+ m_ubuf.reset(m_rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 68));
+ m_ubuf->create();
+
+ m_srb.reset(m_rhi->newShaderResourceBindings());
+ m_srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage,
+ m_ubuf.get())
+ });
+ m_srb->create();
+
+ m_ps.reset(m_rhi->newGraphicsPipeline());
+
+ QRhiGraphicsPipeline::TargetBlend premulAlphaBlend;
+ premulAlphaBlend.enable = true;
+ m_ps->setTargetBlends({ premulAlphaBlend });
+
+ const QShader vs = getShader(QLatin1String(":/color.vert.qsb"));
+ if (!vs.isValid())
+ qFatal("Failed to load shader pack (vertex)");
+ const QShader fs = getShader(QLatin1String(":/color.frag.qsb"));
+ if (!fs.isValid())
+ qFatal("Failed to load shader pack (fragment)");
+
+ m_ps->setShaderStages({
+ { QRhiShaderStage::Vertex, vs },
+ { QRhiShaderStage::Fragment, fs }
+ });
+
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 5 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float3, 2 * sizeof(float) }
+ });
+
+ m_ps->setVertexInputLayout(inputLayout);
+ m_ps->setShaderResourceBindings(m_srb.get());
+ m_ps->setRenderPassDescriptor(m_rp.get());
+
+ m_ps->create();
+}
+
+// called once per frame
+void ExampleWindow::customRender()
+{
+ QRhiResourceUpdateBatch *u = m_rhi->nextResourceUpdateBatch();
+ if (!m_vbufReady) {
+ m_vbufReady = true;
+ u->uploadStaticBuffer(m_vbuf.get(), vertexData);
+ }
+ m_rotation += 1.0f;
+ QMatrix4x4 mvp = m_proj;
+ mvp.rotate(m_rotation, 0, 0, 1);
+ u->updateDynamicBuffer(m_ubuf.get(), 0, 64, mvp.constData());
+ m_opacity += m_opacityDir * 0.005f;
+ if (m_opacity < 0.0f || m_opacity > 1.0f) {
+ m_opacityDir *= -1;
+ m_opacity = qBound(0.0f, m_opacity, 1.0f);
+ }
+ u->updateDynamicBuffer(m_ubuf.get(), 64, 4, &m_opacity);
+
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+
+ cb->beginPass(m_sc->currentFrameRenderTarget(), QColor::fromRgbF(0.0f, 0.0f, 0.0f, 1.0f), { 1.0f, 0 }, u);
+
+ cb->setGraphicsPipeline(m_ps.get());
+ cb->setViewport({ 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) });
+ cb->setShaderResources();
+
+ const QRhiCommandBuffer::VertexInput vbufBinding(m_vbuf.get(), 0);
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(6);
+
+ cb->endPass();
+}
diff --git a/tests/manual/graphicsframecapture/examplewindow.h b/tests/manual/graphicsframecapture/examplewindow.h
new file mode 100644
index 0000000000..88442efb31
--- /dev/null
+++ b/tests/manual/graphicsframecapture/examplewindow.h
@@ -0,0 +1,31 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef EXAMPLEWINDOW_H
+#define EXAMPLEWINDOW_H
+
+#include "window.h"
+
+class ExampleWindow : public Window
+{
+public:
+ ExampleWindow(QRhi::Implementation graphicsApi);
+
+ void customInit() override;
+ void customRender() override;
+
+private:
+ QShader getShader(const QString &name);
+
+ std::unique_ptr<QRhiBuffer> m_vbuf;
+ bool m_vbufReady = false;
+ std::unique_ptr<QRhiBuffer> m_ubuf;
+ std::unique_ptr<QRhiShaderResourceBindings> m_srb;
+ std::unique_ptr<QRhiGraphicsPipeline> m_ps;
+
+ float m_rotation = 0;
+ float m_opacity = 1;
+ int m_opacityDir = -1;
+};
+
+#endif
diff --git a/tests/manual/graphicsframecapture/main.cpp b/tests/manual/graphicsframecapture/main.cpp
new file mode 100644
index 0000000000..b13f2f4184
--- /dev/null
+++ b/tests/manual/graphicsframecapture/main.cpp
@@ -0,0 +1,128 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+// This is a compact, minimal demo of deciding the backend at runtime while
+// using the exact same shaders and rendering code without any branching
+// whatsoever once the QWindow is up and the RHI is initialized.
+
+#include <QGuiApplication>
+#include <QCommandLineParser>
+#include "examplewindow.h"
+
+
+QString graphicsApiName(QRhi::Implementation graphicsApi);
+QRhi::Implementation graphicsApiFromCmd(const QGuiApplication &app);
+
+int main(int argc, char **argv)
+{
+ QGuiApplication app(argc, argv);
+ QRhi::Implementation graphicsApi = graphicsApiFromCmd(app);
+
+ QSurfaceFormat fmt;
+ fmt.setDepthBufferSize(24);
+ fmt.setStencilBufferSize(8);
+ QSurfaceFormat::setDefaultFormat(fmt);
+
+ ExampleWindow w(graphicsApi);
+
+#if QT_CONFIG(vulkan)
+ QVulkanInstance inst;
+ if (graphicsApi == QRhi::Vulkan) {
+ inst.setLayers({ "VK_LAYER_KHRONOS_validation" });
+ inst.setExtensions(QRhiVulkanInitParams::preferredInstanceExtensions());
+ if (!inst.create()) {
+ qWarning("Failed to create Vulkan instance, switching to OpenGL");
+ graphicsApi = QRhi::OpenGLES2;
+ }
+ }
+#endif
+
+#if QT_CONFIG(vulkan)
+ if (graphicsApi == QRhi::Vulkan)
+ w.setVulkanInstance(&inst);
+#endif
+ w.resize(1280, 720);
+ w.setTitle(QCoreApplication::applicationName() + QLatin1String(" - ") + graphicsApiName(graphicsApi));
+ w.show();
+
+ int ret = app.exec();
+
+ // Window::event() will not get invoked when the
+ // PlatformSurfaceAboutToBeDestroyed event is sent during the QWindow
+ // destruction. That happens only when exiting via app::quit() instead of
+ // the more common QWindow::close(). Take care of it: if the QPlatformWindow
+ // is still around (there was no close() yet), get rid of the swapchain
+ // while it's not too late.
+ if (w.handle())
+ w.releaseSwapChain();
+
+ return ret;
+}
+
+QString graphicsApiName(QRhi::Implementation graphicsApi)
+{
+ switch (graphicsApi) {
+ case QRhi::Null:
+ return QLatin1String("Null (no output)");
+ case QRhi::OpenGLES2:
+ return QLatin1String("OpenGL 2.x");
+ case QRhi::Vulkan:
+ return QLatin1String("Vulkan");
+ case QRhi::D3D11:
+ return QLatin1String("Direct3D 11");
+ case QRhi::D3D12:
+ return QLatin1String("Direct3D 12");
+ case QRhi::Metal:
+ return QLatin1String("Metal");
+ default:
+ break;
+ }
+ return QString();
+}
+
+QRhi::Implementation graphicsApiFromCmd(const QGuiApplication &app) {
+ QRhi::Implementation graphicsApi;
+#if defined(Q_OS_WIN)
+ graphicsApi = QRhi::D3D11;
+#elif QT_CONFIG(metal)
+ graphicsApi = QRhi::Metal;
+#elif QT_CONFIG(vulkan)
+ graphicsApi = QRhi::Vulkan;
+#else
+ graphicsApi = QRhi::OpenGLES2;
+#endif
+
+ QCommandLineParser cmdLineParser;
+ cmdLineParser.addHelpOption();
+ QCommandLineOption nullOption({ "n", "null" }, QLatin1String("Null"));
+ cmdLineParser.addOption(nullOption);
+ QCommandLineOption glOption({ "g", "opengl" }, QLatin1String("OpenGL (2.x)"));
+ cmdLineParser.addOption(glOption);
+ QCommandLineOption vkOption({ "v", "vulkan" }, QLatin1String("Vulkan"));
+ cmdLineParser.addOption(vkOption);
+ QCommandLineOption d3d11Option({ "d", "d3d11" }, QLatin1String("Direct3D 11"));
+ cmdLineParser.addOption(d3d11Option);
+ QCommandLineOption d3d12Option({ "D", "d3d12" }, QLatin1String("Direct3D 12"));
+ cmdLineParser.addOption(d3d12Option);
+ QCommandLineOption mtlOption({ "m", "metal" }, QLatin1String("Metal"));
+ cmdLineParser.addOption(mtlOption);
+
+ cmdLineParser.process(app);
+ if (cmdLineParser.isSet(nullOption))
+ graphicsApi = QRhi::Null;
+ if (cmdLineParser.isSet(glOption))
+ graphicsApi = QRhi::OpenGLES2;
+ if (cmdLineParser.isSet(vkOption))
+ graphicsApi = QRhi::Vulkan;
+ if (cmdLineParser.isSet(d3d11Option))
+ graphicsApi = QRhi::D3D11;
+ if (cmdLineParser.isSet(d3d12Option))
+ graphicsApi = QRhi::D3D12;
+ if (cmdLineParser.isSet(mtlOption))
+ graphicsApi = QRhi::Metal;
+
+ qDebug("Selected graphics API is %s", qPrintable(graphicsApiName(graphicsApi)));
+ qDebug("This is a multi-api example, use command line arguments to override:\n%s", qPrintable(cmdLineParser.helpText()));
+
+ return graphicsApi;
+}
diff --git a/tests/manual/graphicsframecapture/window.cpp b/tests/manual/graphicsframecapture/window.cpp
new file mode 100644
index 0000000000..92a5483634
--- /dev/null
+++ b/tests/manual/graphicsframecapture/window.cpp
@@ -0,0 +1,256 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "window.h"
+#include <QPlatformSurfaceEvent>
+#include <QTimer>
+
+Window::Window(QRhi::Implementation graphicsApi)
+ : m_graphicsApi(graphicsApi)
+{
+ m_capturer.reset(new QGraphicsFrameCapture);
+#if QT_CONFIG(metal)
+ qDebug("This example uses Metal Capture Manager In App API to capture frames. Press F9 to capture a frame and F10 to open it for analysis");
+#else
+ qDebug("This example uses RenderDoc In App API to capture frames. Press F9 to capture a frame and F10 to open it for analysis");
+ qDebug("On Linux with OpenGL, make sure that librenderdoc.so is loaded using LD_PRELOAD");
+#endif
+ qDebug("The Frame Capturer API will save captures in this directory : %s", qPrintable(m_capturer->capturePath()));
+
+ switch (graphicsApi) {
+ case QRhi::OpenGLES2:
+ setSurfaceType(OpenGLSurface);
+ break;
+ case QRhi::Vulkan:
+ setSurfaceType(VulkanSurface);
+ break;
+ case QRhi::D3D11:
+ case QRhi::D3D12:
+ setSurfaceType(Direct3DSurface);
+ break;
+ case QRhi::Metal:
+ setSurfaceType(MetalSurface);
+ break;
+ default:
+ break;
+ }
+}
+
+void Window::exposeEvent(QExposeEvent *)
+{
+ // initialize and start rendering when the window becomes usable for graphics purposes
+ if (isExposed() && !m_running) {
+ qDebug("init");
+ m_running = true;
+ init();
+ resizeSwapChain();
+ }
+
+ const QSize surfaceSize = m_hasSwapChain ? m_sc->surfacePixelSize() : QSize();
+
+ // stop pushing frames when not exposed (or size is 0)
+ if ((!isExposed() || (m_hasSwapChain && surfaceSize.isEmpty())) && m_running && !m_notExposed) {
+ qDebug("not exposed");
+ m_notExposed = true;
+ }
+
+ // Continue when exposed again and the surface has a valid size. Note that
+ // surfaceSize can be (0, 0) even though size() reports a valid one, hence
+ // trusting surfacePixelSize() and not QWindow.
+ if (isExposed() && m_running && m_notExposed && !surfaceSize.isEmpty()) {
+ qDebug("exposed again");
+ m_notExposed = false;
+ m_newlyExposed = true;
+ }
+
+ // always render a frame on exposeEvent() (when exposed) in order to update
+ // immediately on window resize.
+ if (isExposed() && !surfaceSize.isEmpty())
+ render();
+}
+
+bool Window::event(QEvent *e)
+{
+
+ switch (e->type()) {
+ case QEvent::UpdateRequest:
+ render();
+ break;
+
+ case QEvent::PlatformSurface:
+ // this is the proper time to tear down the swapchain (while the native window and surface are still around)
+ if (static_cast<QPlatformSurfaceEvent *>(e)->surfaceEventType() == QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed)
+ releaseSwapChain();
+ break;
+
+ case QEvent::KeyRelease:
+ if (static_cast<QKeyEvent *>(e)->key() == Qt::Key::Key_F9 && !static_cast<QKeyEvent *>(e)->isAutoRepeat()) {
+ m_shouldCapture = true;
+ return true;
+ }
+ else if (static_cast<QKeyEvent *>(e)->key() == Qt::Key::Key_F10 && !static_cast<QKeyEvent *>(e)->isAutoRepeat()) {
+ if (!m_capturer.isNull())
+ m_capturer->openCapture();
+ }
+ break;
+
+ default:
+ break;
+ }
+
+ return QWindow::event(e);
+
+}
+
+void Window::init()
+{
+ QRhi::Flags rhiFlags = QRhi::EnableDebugMarkers;
+
+ if (m_graphicsApi == QRhi::Null) {
+ QRhiNullInitParams params;
+ m_rhi.reset(QRhi::create(QRhi::Null, &params, rhiFlags));
+ }
+
+#if QT_CONFIG(opengl)
+ if (m_graphicsApi == QRhi::OpenGLES2) {
+ m_fallbackSurface.reset(QRhiGles2InitParams::newFallbackSurface());
+ QRhiGles2InitParams params;
+ params.fallbackSurface = m_fallbackSurface.get();
+ params.window = this;
+ m_rhi.reset(QRhi::create(QRhi::OpenGLES2, &params, rhiFlags));
+ }
+#endif
+
+#if QT_CONFIG(vulkan)
+ if (m_graphicsApi == QRhi::Vulkan) {
+ QRhiVulkanInitParams params;
+ params.inst = vulkanInstance();
+ params.window = this;
+ m_rhi.reset(QRhi::create(QRhi::Vulkan, &params, rhiFlags));
+ }
+#endif
+
+#ifdef Q_OS_WIN
+ if (m_graphicsApi == QRhi::D3D11) {
+ QRhiD3D11InitParams params;
+ params.enableDebugLayer = true;
+ m_rhi.reset(QRhi::create(QRhi::D3D11, &params, rhiFlags));
+ } else if (m_graphicsApi == QRhi::D3D12) {
+ QRhiD3D12InitParams params;
+ params.enableDebugLayer = true;
+ m_rhi.reset(QRhi::create(QRhi::D3D12, &params, rhiFlags));
+ }
+#endif
+
+#if QT_CONFIG(metal)
+ if (m_graphicsApi == QRhi::Metal) {
+ QRhiMetalInitParams params;
+ m_rhi.reset(QRhi::create(QRhi::Metal, &params, rhiFlags));
+ }
+#endif
+
+ if (!m_rhi)
+ qFatal("Failed to create RHI backend");
+
+ m_sc.reset(m_rhi->newSwapChain());
+ m_ds.reset(m_rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil,
+ QSize(), // no need to set the size here, due to UsedWithSwapChainOnly
+ 1,
+ QRhiRenderBuffer::UsedWithSwapChainOnly));
+ m_sc->setWindow(this);
+ m_sc->setDepthStencil(m_ds.get());
+ m_rp.reset(m_sc->newCompatibleRenderPassDescriptor());
+ m_sc->setRenderPassDescriptor(m_rp.get());
+
+ m_capturer->setRhi(m_rhi.get());
+
+ customInit();
+}
+
+void Window::resizeSwapChain()
+{
+ m_hasSwapChain = m_sc->createOrResize(); // also handles m_ds
+
+ const QSize outputSize = m_sc->currentPixelSize();
+ m_proj = m_rhi->clipSpaceCorrMatrix();
+ m_proj.perspective(45.0f, outputSize.width() / (float) outputSize.height(), 0.01f, 1000.0f);
+ m_proj.translate(0, 0, -4);
+}
+
+void Window::releaseSwapChain()
+{
+ if (m_hasSwapChain) {
+ m_hasSwapChain = false;
+ m_sc->destroy();
+ }
+}
+
+void Window::render()
+{
+ if (!m_hasSwapChain || m_notExposed)
+ return;
+
+ // If the window got resized or newly exposed, resize the swapchain. (the
+ // newly-exposed case is not actually required by some platforms, but
+ // f.ex. Vulkan on Windows seems to need it)
+ //
+ // This (exposeEvent + the logic here) is the only safe way to perform
+ // resize handling. Note the usage of the RHI's surfacePixelSize(), and
+ // never QWindow::size(). (the two may or may not be the same under the hood,
+ // depending on the backend and platform)
+ //
+ if (m_sc->currentPixelSize() != m_sc->surfacePixelSize() || m_newlyExposed) {
+ resizeSwapChain();
+ if (!m_hasSwapChain)
+ return;
+ m_newlyExposed = false;
+ }
+
+ if (m_shouldCapture)
+ m_capturer->startCaptureFrame();
+
+ QRhi::FrameOpResult r = m_rhi->beginFrame(m_sc.get());
+ if (r == QRhi::FrameOpSwapChainOutOfDate) {
+ resizeSwapChain();
+ if (!m_hasSwapChain)
+ return;
+ r = m_rhi->beginFrame(m_sc.get());
+ }
+ if (r != QRhi::FrameOpSuccess) {
+ qDebug("beginFrame failed with %d, retry", r);
+ requestUpdate();
+ return;
+ }
+
+ customRender();
+
+ m_rhi->endFrame(m_sc.get());
+
+ if (m_shouldCapture) {
+ m_capturer->endCaptureFrame();
+ m_shouldCapture = false;
+ }
+
+// Always request the next frame via requestUpdate(). On some platforms this is backed
+// by a platform-specific solution, e.g. CVDisplayLink on macOS, which is potentially
+// more efficient than a timer, queued metacalls, etc.
+//
+// However, the rendering behavior is identical no matter how the next round of
+// rendering is triggered: the rendering thread is throttled to the presentation rate
+// (either in beginFrame() or endFrame()) so the triangle should rotate at the exact
+// same speed no matter which approach is taken here.
+
+#if 1
+ requestUpdate();
+#else
+ QTimer::singleShot(0, this, [this] { render(); });
+#endif
+}
+
+void Window::customInit()
+{
+}
+
+void Window::customRender()
+{
+}
diff --git a/tests/manual/graphicsframecapture/window.h b/tests/manual/graphicsframecapture/window.h
new file mode 100644
index 0000000000..d7e75c6f98
--- /dev/null
+++ b/tests/manual/graphicsframecapture/window.h
@@ -0,0 +1,55 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include <QWindow>
+#include <QOffscreenSurface>
+#include <rhi/qrhi.h>
+#include <QtGui/private/qgraphicsframecapture_p.h>
+
+class Window : public QWindow
+{
+public:
+ Window(QRhi::Implementation graphicsApi);
+
+ void releaseSwapChain();
+
+protected:
+ virtual void customInit();
+ virtual void customRender();
+
+ // destruction order matters to a certain degree: the fallbackSurface must
+ // outlive the rhi, the rhi must outlive all other resources. The resources
+ // need no special order when destroying.
+#if QT_CONFIG(opengl)
+ std::unique_ptr<QOffscreenSurface> m_fallbackSurface;
+#endif
+ std::unique_ptr<QRhi> m_rhi;
+ std::unique_ptr<QRhiSwapChain> m_sc;
+ std::unique_ptr<QRhiRenderBuffer> m_ds;
+ std::unique_ptr<QRhiRenderPassDescriptor> m_rp;
+
+ bool m_hasSwapChain = false;
+ QMatrix4x4 m_proj;
+
+private:
+ void init();
+ void resizeSwapChain();
+ void render();
+
+ void exposeEvent(QExposeEvent *) override;
+ bool event(QEvent *) override;
+
+ QRhi::Implementation m_graphicsApi;
+
+ bool m_running = false;
+ bool m_notExposed = false;
+ bool m_newlyExposed = false;
+
+ QScopedPointer<QGraphicsFrameCapture> m_capturer;
+ bool m_shouldCapture = false;
+};
+
+#endif
diff --git a/tests/manual/highdpi/CMakeLists.txt b/tests/manual/highdpi/CMakeLists.txt
new file mode 100644
index 0000000000..d32e2a52fc
--- /dev/null
+++ b/tests/manual/highdpi/CMakeLists.txt
@@ -0,0 +1,5 @@
+
+add_subdirectory(dprgadget)
+add_subdirectory(kitchensink)
+add_subdirectory(pixelgadget)
+add_subdirectory(screengadget)
diff --git a/tests/manual/highdpi/dprgadget/CMakeLists.txt b/tests/manual/highdpi/dprgadget/CMakeLists.txt
index a8d52f03d8..2c6bd91f0d 100644
--- a/tests/manual/highdpi/dprgadget/CMakeLists.txt
+++ b/tests/manual/highdpi/dprgadget/CMakeLists.txt
@@ -1,18 +1,13 @@
-# special case skip regeneration
-cmake_minimum_required(VERSION 3.16)
-project(dprgadget LANGUAGES CXX)
-set(CMAKE_AUTOMOC ON)
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
-
-qt_add_executable(dprgadget
- main.cpp
-)
-
-target_link_libraries(dprgadget PUBLIC
- Qt::Core
- Qt::Gui
- Qt::GuiPrivate
- Qt::Widgets
+#####################################################################
+## dprgadget Binary:
+#####################################################################
+
+qt_internal_add_manual_test(dprgadget
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::Widgets
+ Qt::GuiPrivate
)
-
diff --git a/tests/manual/highdpi/dprgadget/main.cpp b/tests/manual/highdpi/dprgadget/main.cpp
index 42a0e79c8c..26a653e849 100644
--- a/tests/manual/highdpi/dprgadget/main.cpp
+++ b/tests/manual/highdpi/dprgadget/main.cpp
@@ -1,31 +1,7 @@
-/****************************************************************************
- **
- ** 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/qtversion.h>
#include <QtGui/qpa/qplatformscreen.h>
#include <QtGui/qpa/qplatformwindow.h>
#include <QtGui/private/qhighdpiscaling_p.h>
@@ -47,6 +23,7 @@ bool g_qtScaleFactor = false;
bool g_qtUsePhysicalDpi = false;
bool g_qtFontDpi = false;
bool g_qtScaleFactorRoundingPolicy = false;
+bool g_qtHighDpiDownscale = false;
bool g_displayEvents = false;
@@ -161,7 +138,7 @@ public:
if (g_displayEvents)
layout->addWidget(eventsLabel);
- bool activeEnvironment = g_qtScaleFactor || g_qtUsePhysicalDpi || g_qtFontDpi || g_qtScaleFactorRoundingPolicy;
+ bool activeEnvironment = g_qtScaleFactor || g_qtUsePhysicalDpi || g_qtFontDpi || g_qtScaleFactorRoundingPolicy || g_qtHighDpiDownscale;
if (activeEnvironment) {
layout->addWidget(new QLabel("Active Environment:"));
if (g_qtScaleFactor) {
@@ -180,7 +157,10 @@ public:
QString text = QString("QT_SCALE_FACTOR_ROUNDING_POLICY=") + qgetenv("QT_SCALE_FACTOR_ROUNDING_POLICY");
layout->addWidget(new QLabel(text));
}
-
+ if (g_qtHighDpiDownscale) {
+ QString text = QString("QT_WIDGETS_HIGHDPI_DOWNSCALE=") + qgetenv("QT_WIDGETS_HIGHDPI_DOWNSCALE");
+ layout->addWidget(new QLabel(text));
+ }
}
auto updateValues = [=]() {
@@ -269,6 +249,7 @@ int main(int argc, char **argv) {
g_qtUsePhysicalDpi = qgetenv("QT_USE_PHYSICAL_DPI") == QByteArray("1");
g_qtFontDpi = qEnvironmentVariableIsSet("QT_FONT_DPI");
g_qtScaleFactorRoundingPolicy = qEnvironmentVariableIsSet("QT_SCALE_FACTOR_ROUNDING_POLICY");
+ g_qtHighDpiDownscale = qEnvironmentVariableIsSet("QT_WIDGETS_HIGHDPI_DOWNSCALE");
QApplication app(argc, argv);
diff --git a/tests/manual/highdpi/highdpi.pro b/tests/manual/highdpi/highdpi.pro
new file mode 100644
index 0000000000..fcf4a5f09e
--- /dev/null
+++ b/tests/manual/highdpi/highdpi.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+
+SUBDIRS = dprgadget kitchensink pixelgadget screengadget
diff --git a/tests/manual/highdpi/kitchensink/CMakeLists.txt b/tests/manual/highdpi/kitchensink/CMakeLists.txt
index b8dfa9be37..8caf85983e 100644
--- a/tests/manual/highdpi/kitchensink/CMakeLists.txt
+++ b/tests/manual/highdpi/kitchensink/CMakeLists.txt
@@ -1,4 +1,3 @@
-# Generated from kitchensink.pro.
#####################################################################
## kitchensink Binary:
@@ -12,7 +11,7 @@ qt_internal_add_manual_test(kitchensink
HAVE_SCREEN_BASE_DPI
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
@@ -34,7 +33,3 @@ qt_internal_add_resource(kitchensink "kitchensink"
FILES
${kitchensink_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:kitchensink.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/highdpi/kitchensink/dragwidget.cpp b/tests/manual/highdpi/kitchensink/dragwidget.cpp
index bd65fcf81b..4088a56a80 100644
--- a/tests/manual/highdpi/kitchensink/dragwidget.cpp
+++ b/tests/manual/highdpi/kitchensink/dragwidget.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 <QtWidgets>
#include "dragwidget.h"
@@ -109,8 +84,8 @@ void DragWidget::dropEvent(QDropEvent *event)
{
if (event->mimeData()->hasText()) {
const QMimeData *mime = event->mimeData();
- QStringList pieces = mime->text().split(QRegularExpression("\\s+"),
- Qt::SkipEmptyParts);
+ const QStringList pieces = mime->text().split(QRegularExpression("\\s+"),
+ Qt::SkipEmptyParts);
QPoint position = event->pos();
QPoint hotSpot;
@@ -123,7 +98,7 @@ void DragWidget::dropEvent(QDropEvent *event)
dropTimer.start(500, this);
update();
- foreach (QString piece, pieces) {
+ for (const QString &piece : pieces) {
FramedLabel *newLabel = new FramedLabel(piece, this);
newLabel->move(position - hotSpot);
newLabel->show();
diff --git a/tests/manual/highdpi/kitchensink/dragwidget.h b/tests/manual/highdpi/kitchensink/dragwidget.h
index 06663fc74a..d444f7f0a6 100644
--- a/tests/manual/highdpi/kitchensink/dragwidget.h
+++ b/tests/manual/highdpi/kitchensink/dragwidget.h
@@ -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
#ifndef DRAGWIDGET_H
#define DRAGWIDGET_H
diff --git a/tests/manual/highdpi/kitchensink/main.cpp b/tests/manual/highdpi/kitchensink/main.cpp
index bdb4c3d571..5fe46828bd 100644
--- a/tests/manual/highdpi/kitchensink/main.cpp
+++ b/tests/manual/highdpi/kitchensink/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 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 <QMainWindow>
#include <QMenuBar>
@@ -1458,7 +1433,7 @@ int main(int argc, char **argv)
demoList << new DemoContainer<GraphicsViewCaching>("graphicsview", "Test QGraphicsView caching");
demoList << new DemoContainer<MetricsTest>("metrics", "Show screen metrics");
- for (DemoContainerBase *demo : qAsConst(demoList))
+ for (DemoContainerBase *demo : std::as_const(demoList))
parser.addOption(demo->option());
parser.process(app);
diff --git a/tests/manual/highdpi/pixelgadget/CMakeLists.txt b/tests/manual/highdpi/pixelgadget/CMakeLists.txt
index ac2013af0e..2cc04225df 100644
--- a/tests/manual/highdpi/pixelgadget/CMakeLists.txt
+++ b/tests/manual/highdpi/pixelgadget/CMakeLists.txt
@@ -1,17 +1,13 @@
-# special case skip regeneration
-cmake_minimum_required(VERSION 3.16)
-project(pixelgadget LANGUAGES CXX)
-set(CMAKE_AUTOMOC ON)
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
-
-qt_add_executable(pixelgadget
- main.cpp
-)
-
-target_link_libraries(pixelgadget PUBLIC
- Qt::Core
- Qt::Gui
- Qt::Widgets
+#####################################################################
+## pixelgadget Binary:
+#####################################################################
+
+qt_internal_add_manual_test(pixelgadget
+ GUI
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::Widgets
)
-
diff --git a/tests/manual/highdpi/pixelgadget/main.cpp b/tests/manual/highdpi/pixelgadget/main.cpp
index 2692f22a0e..51174bc6d9 100644
--- a/tests/manual/highdpi/pixelgadget/main.cpp
+++ b/tests/manual/highdpi/pixelgadget/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
- **
- ** 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 <QtGui>
#include <QtWidgets>
diff --git a/tests/manual/highdpi/screengadget/CMakeLists.txt b/tests/manual/highdpi/screengadget/CMakeLists.txt
index 0b3c3dbc30..d9045541bb 100644
--- a/tests/manual/highdpi/screengadget/CMakeLists.txt
+++ b/tests/manual/highdpi/screengadget/CMakeLists.txt
@@ -1,18 +1,14 @@
-# special case skip regeneration
-cmake_minimum_required(VERSION 3.16)
-project(screengadget LANGUAGES CXX)
-set(CMAKE_AUTOMOC ON)
-find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
-
-qt_add_executable(screengadget
- main.cpp
-)
-
-target_link_libraries(screengadget PUBLIC
- Qt::Core
- Qt::Gui
- Qt::GuiPrivate
- Qt::Widgets
+#####################################################################
+## screengadget Binary:
+#####################################################################
+
+qt_internal_add_manual_test(screengadget
+ GUI
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::Widgets
+ Qt::GuiPrivate
)
-
diff --git a/tests/manual/highdpi/screengadget/main.cpp b/tests/manual/highdpi/screengadget/main.cpp
index 762981c395..68343a31c5 100644
--- a/tests/manual/highdpi/screengadget/main.cpp
+++ b/tests/manual/highdpi/screengadget/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
- **
- ** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui>
#include <QtWidgets>
diff --git a/tests/manual/iconbrowser/CMakeLists.txt b/tests/manual/iconbrowser/CMakeLists.txt
new file mode 100644
index 0000000000..b0fefba5db
--- /dev/null
+++ b/tests/manual/iconbrowser/CMakeLists.txt
@@ -0,0 +1,64 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+find_package(Qt6 REQUIRED COMPONENTS Gui Widgets)
+
+qt_internal_add_manual_test(iconbrowser
+ GUI
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
+ Qt::WidgetsPrivate
+)
+
+if (TARGET Qt::Quick)
+find_package(Qt6 COMPONENTS QuickWidgets REQUIRED)
+
+qt_add_qml_module(iconbrowser
+ URI main
+ VERSION 1.0
+ QML_FILES "Main.qml"
+ NO_RESOURCE_TARGET_PATH
+)
+target_link_libraries(iconbrowser PRIVATE
+ Qt6::QuickWidgets
+)
+endif()
+
+if (ANDROID)
+ set(font_filename "MaterialSymbolsOutlined[FILL,GRAD,opsz,wght].ttf")
+ if (QT_ALLOW_DOWNLOAD)
+ include(FetchContent)
+
+ FetchContent_Declare(
+ MaterialIcons
+ URL
+ "https://github.com/google/material-design-icons/raw/master/variablefont/${font_filename}"
+ DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}
+ DOWNLOAD_NAME "${font_filename}"
+ DOWNLOAD_NO_EXTRACT TRUE
+ )
+
+ FetchContent_MakeAvailable(MaterialIcons)
+ endif()
+
+ if (EXISTS "${CMAKE_CURRENT_BINARY_DIR}/${font_filename}")
+ set_source_files_properties("${CMAKE_CURRENT_BINARY_DIR}/${font_filename}"
+ PROPERTIES QT_RESOURCE_ALIAS ${font_filename})
+ target_compile_definitions(iconbrowser PRIVATE "ICONBROWSER_RESOURCE")
+ qt_add_resources(iconbrowser "icons"
+ PREFIX
+ "/qt-project.org/icons"
+ FILES
+ "${CMAKE_CURRENT_BINARY_DIR}/${font_filename}"
+ )
+ else()
+ message(WARNING "Font file ${font_filename} not found and not downloaded!\n"
+ "Make sure the font file ${font_filename} is available in ${CMAKE_CURRENT_BINARY_DIR}.\n"
+ "Consider configuring with -DQT_ALLOW_DOWNLOAD=ON to download the font automatically.")
+ endif()
+endif()
+
diff --git a/tests/manual/iconbrowser/Main.qml b/tests/manual/iconbrowser/Main.qml
new file mode 100644
index 0000000000..fd16df58ec
--- /dev/null
+++ b/tests/manual/iconbrowser/Main.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls
+
+Rectangle {
+ anchors.fill: parent
+ Column {
+ Row {
+ ToolButton {
+ id: normalButton
+ icon.name: iconName.text
+ }
+ ToolButton {
+ id: disabledButton
+ enabled: false
+ icon.name: iconName.text
+ }
+ ToolButton {
+ id: checkedButton
+ checked: true
+ icon.name: iconName.text
+ }
+ }
+ TextField {
+ id: iconName
+ text: "folder"
+ }
+ }
+}
diff --git a/tests/manual/iconbrowser/main.cpp b/tests/manual/iconbrowser/main.cpp
new file mode 100644
index 0000000000..e4749de6cc
--- /dev/null
+++ b/tests/manual/iconbrowser/main.cpp
@@ -0,0 +1,570 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtWidgets>
+
+#include <QtWidgets/private/qapplication_p.h>
+#include <QtGui/qpa/qplatformtheme.h>
+
+#ifdef QT_QUICKWIDGETS_LIB
+#include <QQuickWidget>
+#endif
+
+using namespace Qt::StringLiterals;
+
+class IconModel : public QAbstractItemModel
+{
+ const QStringList themedIcons = {
+ u"address-book-new"_s,
+ u"application-exit"_s,
+ u"appointment-new"_s,
+ u"call-start"_s,
+ u"call-stop"_s,
+ u"contact-new"_s,
+ u"document-new"_s,
+ u"document-open"_s,
+ u"document-open-recent"_s,
+ u"document-page-setup"_s,
+ u"document-print"_s,
+ u"document-print-preview"_s,
+ u"document-properties"_s,
+ u"document-revert"_s,
+ u"document-save"_s,
+ u"document-save-as"_s,
+ u"document-send"_s,
+ u"edit-clear"_s,
+ u"edit-copy"_s,
+ u"edit-cut"_s,
+ u"edit-delete"_s,
+ u"edit-find"_s,
+ u"edit-find-replace"_s,
+ u"edit-paste"_s,
+ u"edit-redo"_s,
+ u"edit-select-all"_s,
+ u"edit-undo"_s,
+ u"folder-new"_s,
+ u"format-indent-less"_s,
+ u"format-indent-more"_s,
+ u"format-justify-center"_s,
+ u"format-justify-fill"_s,
+ u"format-justify-left"_s,
+ u"format-justify-right"_s,
+ u"format-text-direction-ltr"_s,
+ u"format-text-direction-rtl"_s,
+ u"format-text-bold"_s,
+ u"format-text-italic"_s,
+ u"format-text-underline"_s,
+ u"format-text-strikethrough"_s,
+ u"go-bottom"_s,
+ u"go-down"_s,
+ u"go-first"_s,
+ u"go-home"_s,
+ u"go-jump"_s,
+ u"go-last"_s,
+ u"go-next"_s,
+ u"go-previous"_s,
+ u"go-top"_s,
+ u"go-up"_s,
+ u"help-about"_s,
+ u"help-contents"_s,
+ u"help-faq"_s,
+ u"insert-image"_s,
+ u"insert-link"_s,
+ u"insert-object"_s,
+ u"insert-text"_s,
+ u"list-add"_s,
+ u"list-remove"_s,
+ u"mail-forward"_s,
+ u"mail-mark-important"_s,
+ u"mail-mark-junk"_s,
+ u"mail-mark-notjunk"_s,
+ u"mail-mark-read"_s,
+ u"mail-mark-unread"_s,
+ u"mail-message-new"_s,
+ u"mail-reply-all"_s,
+ u"mail-reply-sender"_s,
+ u"mail-send"_s,
+ u"mail-send-receive"_s,
+ u"media-eject"_s,
+ u"media-playback-pause"_s,
+ u"media-playback-start"_s,
+ u"media-playback-stop"_s,
+ u"media-record"_s,
+ u"media-seek-backward"_s,
+ u"media-seek-forward"_s,
+ u"media-skip-backward"_s,
+ u"media-skip-forward"_s,
+ u"object-flip-horizontal"_s,
+ u"object-flip-vertical"_s,
+ u"object-rotate-left"_s,
+ u"object-rotate-right"_s,
+ u"process-stop"_s,
+ u"system-lock-screen"_s,
+ u"system-log-out"_s,
+ u"system-run"_s,
+ u"system-search"_s,
+ u"system-reboot"_s,
+ u"system-shutdown"_s,
+ u"tools-check-spelling"_s,
+ u"view-fullscreen"_s,
+ u"view-refresh"_s,
+ u"view-restore"_s,
+ u"view-sort-ascending"_s,
+ u"view-sort-descending"_s,
+ u"window-close"_s,
+ u"window-new"_s,
+ u"zoom-fit-best"_s,
+ u"zoom-in"_s,
+ u"zoom-original"_s,
+ u"zoom-out"_s,
+
+
+ u"process-working"_s,
+
+
+ u"accessories-calculator"_s,
+ u"accessories-character-map"_s,
+ u"accessories-dictionary"_s,
+ u"accessories-text-editor"_s,
+ u"help-browser"_s,
+ u"multimedia-volume-control"_s,
+ u"preferences-desktop-accessibility"_s,
+ u"preferences-desktop-font"_s,
+ u"preferences-desktop-keyboard"_s,
+ u"preferences-desktop-locale"_s,
+ u"preferences-desktop-multimedia"_s,
+ u"preferences-desktop-screensaver"_s,
+ u"preferences-desktop-theme"_s,
+ u"preferences-desktop-wallpaper"_s,
+ u"system-file-manager"_s,
+ u"system-software-install"_s,
+ u"system-software-update"_s,
+ u"utilities-system-monitor"_s,
+ u"utilities-terminal"_s,
+
+
+ u"applications-accessories"_s,
+ u"applications-development"_s,
+ u"applications-engineering"_s,
+ u"applications-games"_s,
+ u"applications-graphics"_s,
+ u"applications-internet"_s,
+ u"applications-multimedia"_s,
+ u"applications-office"_s,
+ u"applications-other"_s,
+ u"applications-science"_s,
+ u"applications-system"_s,
+ u"applications-utilities"_s,
+ u"preferences-desktop"_s,
+ u"preferences-desktop-peripherals"_s,
+ u"preferences-desktop-personal"_s,
+ u"preferences-other"_s,
+ u"preferences-system"_s,
+ u"preferences-system-network"_s,
+ u"system-help"_s,
+
+
+ u"audio-card"_s,
+ u"audio-input-microphone"_s,
+ u"battery"_s,
+ u"camera-photo"_s,
+ u"camera-video"_s,
+ u"camera-web"_s,
+ u"computer"_s,
+ u"drive-harddisk"_s,
+ u"drive-optical"_s,
+ u"drive-removable-media"_s,
+ u"input-gaming"_s,
+ u"input-keyboard"_s,
+ u"input-mouse"_s,
+ u"input-tablet"_s,
+ u"media-flash"_s,
+ u"media-floppy"_s,
+ u"media-optical"_s,
+ u"media-tape"_s,
+ u"modem"_s,
+ u"multimedia-player"_s,
+ u"network-wired"_s,
+ u"network-wireless"_s,
+ u"pda"_s,
+ u"phone"_s,
+ u"printer"_s,
+ u"scanner"_s,
+ u"video-display"_s,
+
+
+ u"emblem-default"_s,
+ u"emblem-documents"_s,
+ u"emblem-downloads"_s,
+ u"emblem-favorite"_s,
+ u"emblem-important"_s,
+ u"emblem-mail"_s,
+ u"emblem-photos"_s,
+ u"emblem-readonly"_s,
+ u"emblem-shared"_s,
+ u"emblem-symbolic-link"_s,
+ u"emblem-synchronized"_s,
+ u"emblem-system"_s,
+ u"emblem-unreadable"_s,
+
+
+ u"face-angel"_s,
+ u"face-angry"_s,
+ u"face-cool"_s,
+ u"face-crying"_s,
+ u"face-devilish"_s,
+ u"face-embarrassed"_s,
+ u"face-kiss"_s,
+ u"face-laugh"_s,
+ u"face-monkey"_s,
+ u"face-plain"_s,
+ u"face-raspberry"_s,
+ u"face-sad"_s,
+ u"face-sick"_s,
+ u"face-smile"_s,
+ u"face-smile-big"_s,
+ u"face-smirk"_s,
+ u"face-surprise"_s,
+ u"face-tired"_s,
+ u"face-uncertain"_s,
+ u"face-wink"_s,
+ u"face-worried"_s,
+
+
+ u"flag-aa"_s,
+
+
+ u"application-x-executable"_s,
+ u"audio-x-generic"_s,
+ u"font-x-generic"_s,
+ u"image-x-generic"_s,
+ u"package-x-generic"_s,
+ u"text-html"_s,
+ u"text-x-generic"_s,
+ u"text-x-generic-template"_s,
+ u"text-x-script"_s,
+ u"video-x-generic"_s,
+ u"x-office-address-book"_s,
+ u"x-office-calendar"_s,
+ u"x-office-document"_s,
+ u"x-office-presentation"_s,
+ u"x-office-spreadsheet"_s,
+
+
+ u"folder"_s,
+ u"folder-remote"_s,
+ u"network-server"_s,
+ u"network-workgroup"_s,
+ u"start-here"_s,
+ u"user-bookmarks"_s,
+ u"user-desktop"_s,
+ u"user-home"_s,
+ u"user-trash"_s,
+
+
+ u"appointment-missed"_s,
+ u"appointment-soon"_s,
+ u"audio-volume-high"_s,
+ u"audio-volume-low"_s,
+ u"audio-volume-medium"_s,
+ u"audio-volume-muted"_s,
+ u"battery-caution"_s,
+ u"battery-low"_s,
+ u"dialog-error"_s,
+ u"dialog-information"_s,
+ u"dialog-password"_s,
+ u"dialog-question"_s,
+ u"dialog-warning"_s,
+ u"folder-drag-accept"_s,
+ u"folder-open"_s,
+ u"folder-visiting"_s,
+ u"image-loading"_s,
+ u"image-missing"_s,
+ u"mail-attachment"_s,
+ u"mail-unread"_s,
+ u"mail-read"_s,
+ u"mail-replied"_s,
+ u"mail-signed"_s,
+ u"mail-signed-verified"_s,
+ u"media-playlist-repeat"_s,
+ u"media-playlist-shuffle"_s,
+ u"network-error"_s,
+ u"network-idle"_s,
+ u"network-offline"_s,
+ u"network-receive"_s,
+ u"network-transmit"_s,
+ u"network-transmit-receive"_s,
+ u"printer-error"_s,
+ u"printer-printing"_s,
+ u"security-high"_s,
+ u"security-medium"_s,
+ u"security-low"_s,
+ u"software-update-available"_s,
+ u"software-update-urgent"_s,
+ u"sync-error"_s,
+ u"sync-synchronizing"_s,
+ u"task-due"_s,
+ u"task-past-due"_s,
+ u"user-available"_s,
+ u"user-away"_s,
+ u"user-idle"_s,
+ u"user-offline"_s,
+ u"user-trash-full"_s,
+ u"weather-clear"_s,
+ u"weather-clear-night"_s,
+ u"weather-few-clouds"_s,
+ u"weather-few-clouds-night"_s,
+ u"weather-fog"_s,
+ u"weather-overcast"_s,
+ u"weather-severe-alert"_s,
+ u"weather-showers"_s,
+ u"weather-showers-scattered"_s,
+ u"weather-snow"_s,
+ u"weather-storm"_s,
+ };
+public:
+ using QAbstractItemModel::QAbstractItemModel;
+
+ enum Columns {
+ Name,
+ Style,
+ Theme,
+ Icon
+ };
+
+ int rowCount(const QModelIndex &parent) const override
+ {
+ if (parent.isValid())
+ return 0;
+ return themedIcons.size() + QStyle::NStandardPixmap;
+ }
+ int columnCount(const QModelIndex &parent) const override
+ {
+ if (parent.isValid())
+ return 0;
+ return Icon + 1;
+ }
+ QModelIndex index(int row, int column, const QModelIndex &parent) const override
+ {
+ if (parent.isValid())
+ return {};
+ if (column > columnCount(parent) || row > rowCount(parent))
+ return {};
+ return createIndex(row, column, quintptr(row));
+ }
+ QModelIndex parent(const QModelIndex &) const override
+ {
+ return {};
+ }
+
+ QVariant data(const QModelIndex &index, int role) const override
+ {
+ int row = index.row();
+ const Columns column = Columns(index.column());
+ if (!index.isValid() || row >= rowCount(index.parent()) || column >= columnCount(index.parent()))
+ return {};
+ const bool fromIcon = row < themedIcons.size();
+ if (!fromIcon)
+ row -= themedIcons.size();
+ switch (role) {
+ case Qt::DisplayRole:
+ if (fromIcon) {
+ return themedIcons.at(row);
+ } else {
+ const QMetaObject *styleMO = &QStyle::staticMetaObject;
+ const int pixmapIndex = styleMO->indexOfEnumerator("StandardPixmap");
+ Q_ASSERT(pixmapIndex >= 0);
+ const QMetaEnum pixmapEnum = styleMO->enumerator(pixmapIndex);
+ const QString pixmapName = QString::fromUtf8(pixmapEnum.key(row));
+ return QVariant(pixmapName);
+ }
+ break;
+ case Qt::DecorationRole:
+ switch (index.column()) {
+ case Name:
+ break;
+ case Style:
+ if (fromIcon)
+ break;
+ return QApplication::style()->standardIcon(QStyle::StandardPixmap(row));
+ case Theme:
+ if (fromIcon)
+ break;
+ return QIcon(QApplicationPrivate::platformTheme()->standardPixmap(QPlatformTheme::StandardPixmap(row), {36, 36}));
+ case Icon:
+ if (fromIcon)
+ return QIcon::fromTheme(themedIcons.at(row));
+ break;
+ }
+ break;
+ default:
+ break;
+ }
+ return {};
+ }
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const override
+ {
+ switch (orientation) {
+ case Qt::Vertical:
+ break;
+ case Qt::Horizontal:
+ if (role == Qt::DisplayRole) {
+ switch (section) {
+ case Name:
+ return "Name";
+ case Style:
+ return "Style";
+ case Theme:
+ return "Theme";
+ case Icon:
+ return"Icon";
+ }
+ }
+ }
+ return QAbstractItemModel::headerData(section, orientation, role);
+ }
+};
+
+template<IconModel::Columns Column>
+struct ColumnModel : public QSortFilterProxyModel
+{
+ bool filterAcceptsColumn(int sourceColumn, const QModelIndex &) const override
+ {
+ return sourceColumn == Column;
+ }
+
+ bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override
+ {
+ const QModelIndex sourceIndex = sourceModel()->index(sourceRow, Column, sourceParent);
+ const QIcon iconData = sourceModel()->data(sourceIndex, Qt::DecorationRole).template value<QIcon>();
+ return !iconData.isNull();
+ }
+};
+
+template<IconModel::Columns Column>
+struct IconView : public QListView
+{
+ ColumnModel<Column> proxyModel;
+
+ IconView(QAbstractItemModel *model)
+ {
+ setViewMode(QListView::ListMode);
+ setIconSize(QSize(64, 64));
+ setUniformItemSizes(true);
+ proxyModel.setSourceModel(model);
+ setModel(&proxyModel);
+ }
+};
+
+class IconInspector : public QFrame
+{
+public:
+ IconInspector()
+ {
+ setFrameShape(QFrame::StyledPanel);
+
+ QLineEdit *lineEdit = new QLineEdit;
+ connect(lineEdit, &QLineEdit::textChanged,
+ this, &IconInspector::updateIcon);
+
+ QVBoxLayout *vbox = new QVBoxLayout;
+ vbox->addStretch(10);
+ vbox->addWidget(lineEdit);
+ setLayout(vbox);
+ }
+
+protected:
+ void paintEvent(QPaintEvent *event) override
+ {
+ QPainter painter(this);
+ painter.fillRect(event->rect(), palette().window());
+ if (!icon.isNull()) {
+ const QString modeLabels[] = { u"Normal"_s, u"Disabled"_s, u"Active"_s, u"Selected"_s};
+ const QString stateLabels[] = { u"On"_s, u"Off"_s};
+ const int labelWidth = fontMetrics().horizontalAdvance(u"Disabled"_s);
+ const int labelHeight = fontMetrics().height();
+ int labelYs[4] = {};
+ int labelXs[2] = {};
+
+ painter.save();
+ painter.translate(labelWidth + contentsMargins().left(), labelHeight * 2);
+ const QBrush brush(palette().base().color(), Qt::CrossPattern);
+
+ QPoint point;
+ for (const auto &mode : {QIcon::Normal, QIcon::Disabled, QIcon::Active, QIcon::Selected}) {
+ int height = 0;
+ for (const auto &state : {QIcon::On, QIcon::Off}) {
+ int totalWidth = 0;
+ const int relativeX = point.x();
+ const auto sizes = icon.availableSizes(mode, state);
+ for (const auto &size : sizes) {
+ if (size.width() > 256)
+ continue;
+ const QRect iconRect(point, size);
+ painter.fillRect(iconRect, brush);
+ icon.paint(&painter, iconRect, Qt::AlignCenter, mode, state);
+ totalWidth += size.width();
+ point.rx() += size.width();
+ height = std::max(height, size.height());
+ }
+ labelXs[state] = relativeX + totalWidth / 2;
+ }
+ point.rx() = 0;
+ labelYs[mode] = point.ry() + height / 2;
+ point.ry() += height;
+ }
+ painter.restore();
+
+ painter.translate(contentsMargins().left(), labelHeight);
+ for (const auto &mode : {QIcon::Normal, QIcon::Disabled, QIcon::Active, QIcon::Selected})
+ painter.drawText(QPoint(0, labelYs[mode]), modeLabels[mode]);
+ painter.translate(labelWidth, 0);
+ for (const auto &state : {QIcon::On, QIcon::Off})
+ painter.drawText(QPoint(labelXs[state], 0), stateLabels[state]);
+ }
+ QFrame::paintEvent(event);
+ }
+private:
+ QIcon icon;
+ void updateIcon(const QString &iconName)
+ {
+ icon = QIcon::fromTheme(iconName);
+ update();
+ }
+};
+
+int main(int argc, char* argv[])
+{
+ QApplication app(argc, argv);
+
+#ifdef ICONBROWSER_RESOURCE
+ Q_INIT_RESOURCE(icons);
+#endif
+
+ IconModel model;
+
+ QTabWidget widget;
+ widget.setTabPosition(QTabWidget::West);
+ widget.addTab(new IconInspector, "Inspect");
+ widget.addTab(new IconView<IconModel::Icon>(&model), "QIcon::fromTheme");
+ widget.addTab(new IconView<IconModel::Style>(&model), "QStyle");
+ widget.addTab(new IconView<IconModel::Theme>(&model), "QPlatformTheme");
+
+#ifdef QT_QUICKWIDGETS_LIB
+ QQuickWidget *quickBrowser = new QQuickWidget;
+ quickBrowser->setSource(QUrl(u"qrc:/Main.qml"_s));
+ quickBrowser->setResizeMode(QQuickWidget::SizeRootObjectToView);
+ widget.addTab(quickBrowser, "Qt Quick");
+ QObject::connect(quickBrowser, &QQuickWidget::statusChanged, quickBrowser,
+ [](QQuickWidget::Status status){
+ qDebug() << status;
+ });
+ QObject::connect(quickBrowser, &QQuickWidget::sceneGraphError, quickBrowser,
+ [](QQuickWindow::SceneGraphError error, const QString &message){
+ qDebug() << error << message;
+ });
+#endif
+
+ widget.show();
+ return app.exec();
+}
diff --git a/tests/manual/inputdevices/CMakeLists.txt b/tests/manual/inputdevices/CMakeLists.txt
new file mode 100644
index 0000000000..9440705a9b
--- /dev/null
+++ b/tests/manual/inputdevices/CMakeLists.txt
@@ -0,0 +1,17 @@
+project(inputdevices)
+cmake_minimum_required(VERSION 3.19)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_add_executable(inputdevices
+ main.cpp
+ inputdevicemodel.h inputdevicemodel.cpp
+)
+
+set_target_properties(inputdevices PROPERTIES
+ AUTOMOC TRUE
+)
+
+target_link_libraries(inputdevices PUBLIC
+ Qt::Widgets
+)
diff --git a/tests/manual/inputdevices/inputdevicemodel.cpp b/tests/manual/inputdevices/inputdevicemodel.cpp
new file mode 100644
index 0000000000..c0b594a7da
--- /dev/null
+++ b/tests/manual/inputdevices/inputdevicemodel.cpp
@@ -0,0 +1,264 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "inputdevicemodel.h"
+
+#include <QEvent>
+#include <QInputDevice>
+#include <QLoggingCategory>
+#include <QMetaEnum>
+#include <QPointingDevice>
+
+Q_LOGGING_CATEGORY(lcIPDM, "qt.inputdevicemodel")
+
+static QString enumToString(const QObject *obj, const char* enumName, int enumValue)
+{
+ const auto *metaobj = obj->metaObject();
+ Q_ASSERT(metaobj);
+ const int enumIdx = metaobj->indexOfEnumerator(enumName);
+ if (enumIdx < 0)
+ return {};
+ Q_ASSERT(metaobj->enumerator(enumIdx).isValid());
+ const char *ret = metaobj->enumerator(enumIdx).valueToKey(enumValue);
+ if (!ret)
+ return {};
+ return QString::fromUtf8(ret);
+}
+
+static QString capabilitiesString(const QInputDevice *dev)
+{
+ QStringList ret;
+ const auto caps = dev->capabilities();
+ if (caps.testFlag(QInputDevice::Capability::Position))
+ ret << InputDeviceModel::tr("pos");
+ if (caps.testFlag(QInputDevice::Capability::Area))
+ ret << InputDeviceModel::tr("area");
+ if (caps.testFlag(QInputDevice::Capability::Pressure))
+ ret << InputDeviceModel::tr("press");
+ if (caps.testFlag(QInputDevice::Capability::Velocity))
+ ret << InputDeviceModel::tr("vel");
+ if (caps.testFlag(QInputDevice::Capability::NormalizedPosition))
+ ret << InputDeviceModel::tr("norm");
+ if (caps.testFlag(QInputDevice::Capability::MouseEmulation))
+ ret << InputDeviceModel::tr("m-emu");
+ if (caps.testFlag(QInputDevice::Capability::Scroll))
+ ret << InputDeviceModel::tr("scroll");
+ if (caps.testFlag(QInputDevice::Capability::PixelScroll))
+ ret << InputDeviceModel::tr("pxscroll");
+ if (caps.testFlag(QInputDevice::Capability::Hover))
+ ret << InputDeviceModel::tr("hover");
+ if (caps.testFlag(QInputDevice::Capability::Rotation))
+ ret << InputDeviceModel::tr("rot");
+ if (caps.testFlag(QInputDevice::Capability::XTilt))
+ ret << InputDeviceModel::tr("xtilt");
+ if (caps.testFlag(QInputDevice::Capability::YTilt))
+ ret << InputDeviceModel::tr("ytilt");
+ if (caps.testFlag(QInputDevice::Capability::TangentialPressure))
+ ret << InputDeviceModel::tr("tan");
+ if (caps.testFlag(QInputDevice::Capability::ZPosition))
+ ret << InputDeviceModel::tr("z");
+ return ret.join(u'|');
+}
+
+/*!
+ Returns true only if the given \a device is a master:
+ that is, if its parent is \e not another QInputDevice.
+*/
+static const auto masterDevicePred = [](const QInputDevice *device)
+{
+ return !qobject_cast<QInputDevice*>(device->parent());
+};
+
+/*!
+ Returns the master device at index \a i:
+ that is, the i'th of the devices that satisfy masterDevicePred().
+*/
+static const QInputDevice *masterDevice(int i)
+{
+ const auto devices = QInputDevice::devices();
+ auto it = std::find_if(devices.constBegin(), devices.constEnd(), masterDevicePred);
+ it += i;
+ return (it == devices.constEnd() ? nullptr : *it);
+}
+
+/*!
+ Returns the index of the master \a device: that is, the index within the
+ subset of QInputDevice::devices() that satisfy masterDevicePred().
+*/
+static const int masterDeviceIndex(const QInputDevice *device)
+{
+ Q_ASSERT(masterDevicePred(device)); // assume dev is not a slave
+ const auto devices = QInputDevice::devices();
+ auto it = std::find_if(devices.constBegin(), devices.constEnd(), masterDevicePred);
+ for (int i = 0; it != devices.constEnd(); ++i, ++it)
+ if (*it == device)
+ return i;
+ return -1;
+}
+
+InputDeviceModel::InputDeviceModel(QObject *parent)
+ : QAbstractItemModel{parent}
+{
+ connect(this, &InputDeviceModel::deviceAdded, this, &InputDeviceModel::onDeviceAdded, Qt::QueuedConnection);
+}
+
+// invariant: always call createIndex(row, column, QInputDevice*) or else nullptr for the last argument
+
+QModelIndex InputDeviceModel::index(int row, int column, const QModelIndex &parent) const
+{
+ const QInputDevice *par = static_cast<QInputDevice *>(parent.internalPointer());
+ const QInputDevice *ret = par ? qobject_cast<const QInputDevice *>(par->children().at(row)) : masterDevice(row);
+ qCDebug(lcIPDM) << row << column << "under parent" << par << ":" << ret;
+ return createIndex(row, column, ret);
+}
+
+QModelIndex InputDeviceModel::parent(const QModelIndex &index) const
+{
+ if (!index.internalPointer())
+ return {};
+ const QInputDevice *par = qobject_cast<const QInputDevice *>(
+ static_cast<QInputDevice *>(index.internalPointer())->parent());
+ if (par)
+ return createIndex(masterDeviceIndex(par), index.column(), par);
+ return {};
+}
+
+int InputDeviceModel::rowCount(const QModelIndex &parent) const
+{
+ int ret = 0;
+ const QInputDevice *par = qobject_cast<const QInputDevice *>(static_cast<QObject *>(parent.internalPointer()));
+ if (par) {
+ ret = par->children().count();
+ } else {
+ const auto devices = QInputDevice::devices();
+ ret = std::count_if(devices.constBegin(), devices.constEnd(), masterDevicePred);
+ }
+ qCDebug(lcIPDM) << ret << "under parent" << parent << par;
+ return ret;
+}
+
+int InputDeviceModel::columnCount(const QModelIndex &) const
+{
+ return NRoles;
+}
+
+QVariant InputDeviceModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {
+ switch (section + Name) {
+ case Name:
+ return tr("Device Name");
+ case DeviceType:
+ return tr("Device Type");
+ case PointerType:
+ return tr("Pointer Type");
+ case Capabilities:
+ return tr("Capabilities");
+ case SystemId:
+ return tr("System ID");
+ case SeatName:
+ return tr("Seat Name");
+ case AvailableVirtualGeometry:
+ return tr("Available Virtual Geometry");
+ case MaximumPoints:
+ return tr("Maximum Points");
+ case ButtonCount:
+ return tr("Button Count");
+ case UniqueId:
+ return tr("Unique ID");
+ case NRoles:
+ break;
+ }
+ }
+ return {};
+}
+
+bool InputDeviceModel::eventFilter(QObject *obj, QEvent *event)
+{
+ if (event->type() == QEvent::ChildAdded)
+ // At this time, the child is not fully-constructed.
+ // Emit a signal which is connected to onDeviceAdded via queued connection, to delay row insertion.
+ emit deviceAdded(static_cast<QChildEvent *>(event)->child());
+ return false;
+}
+
+void InputDeviceModel::onDeviceAdded(const QObject *o)
+{
+ const QInputDevice *child = qobject_cast<const QInputDevice *>(o);
+ const QInputDevice *parent = qobject_cast<const QInputDevice *>(child->parent());
+ const int idx = parent->children().indexOf(child);
+ qCDebug(lcIPDM) << parent << "has a baby!" << child << "@" << idx;
+ beginInsertRows(createIndex(masterDeviceIndex(parent), 0, parent), idx, idx);
+ endInsertRows();
+}
+
+void InputDeviceModel::watchDevice(const QInputDevice *dev) const
+{
+ if (!m_known.contains(dev)) {
+ m_known << dev;
+ connect(dev, &QObject::destroyed, this, &InputDeviceModel::deviceDestroyed);
+ if (masterDevicePred(dev))
+ const_cast<QInputDevice *>(dev)->installEventFilter(const_cast<InputDeviceModel *>(this));
+ }
+}
+
+void InputDeviceModel::deviceDestroyed(QObject *o)
+{
+ beginResetModel();
+ const QInputDevice *dev = static_cast<QInputDevice *>(o);
+ bool needsReset = true;
+ if (!masterDevicePred(dev)) {
+ const QInputDevice *parent = static_cast<const QInputDevice *>(dev->parent());
+ const int idx = parent->children().indexOf(dev);
+ Q_ASSERT(idx >= 0);
+ beginRemoveRows(createIndex(masterDeviceIndex(parent), 0, parent), idx, idx);
+ endRemoveRows();
+ needsReset = false;
+ }
+ m_known.removeOne(dev);
+ if (needsReset)
+ endResetModel();
+}
+
+QVariant InputDeviceModel::data(const QModelIndex &index, int role) const
+{
+ if (role == Qt::DisplayRole)
+ role = index.column() + Role::Name;
+ if (role >= NRoles)
+ return {};
+ const QInputDevice *dev = static_cast<QInputDevice *>(index.internalPointer());
+ watchDevice(dev);
+ if (role < Name)
+ qCDebug(lcIPDM) << index << Qt::ItemDataRole(role) << dev;
+ else
+ qCDebug(lcIPDM) << index << Role(role) << dev;
+ const QPointingDevice *pdev = qobject_cast<const QPointingDevice *>(dev);
+ switch (role) {
+ case Name:
+ return dev->name();
+ case DeviceType:
+ return enumToString(dev, "DeviceType", int(dev->type()));
+ case PointerType:
+ return pdev ? enumToString(pdev, "PointerType", int(pdev->pointerType()))
+ : QString();
+ case Capabilities:
+ return capabilitiesString(dev);
+ case SystemId:
+ return dev->systemId();
+ case SeatName:
+ return dev->seatName();
+ case AvailableVirtualGeometry: {
+ const auto rect = dev->availableVirtualGeometry();
+ return tr("%1 x %2 %3 %4").arg(rect.width()).arg(rect.height()).arg(rect.x()).arg(rect.y());
+ }
+ case MaximumPoints:
+ return pdev ? pdev->maximumPoints() : 0;
+ case ButtonCount:
+ return pdev ? pdev->buttonCount() : 0;
+ case UniqueId:
+ return pdev ? pdev->uniqueId().numericId() : 0;
+ }
+ return {};
+}
+
+#include "moc_inputdevicemodel.cpp"
diff --git a/tests/manual/inputdevices/inputdevicemodel.h b/tests/manual/inputdevices/inputdevicemodel.h
new file mode 100644
index 0000000000..7c72d498e0
--- /dev/null
+++ b/tests/manual/inputdevices/inputdevicemodel.h
@@ -0,0 +1,55 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef INPUTDEVICEMODEL_H
+#define INPUTDEVICEMODEL_H
+
+#include <QAbstractItemModel>
+
+class QInputDevice;
+
+class InputDeviceModel : public QAbstractItemModel
+{
+ Q_OBJECT
+
+public:
+ enum Role {
+ Name = Qt::UserRole + 1,
+ DeviceType,
+ PointerType,
+ Capabilities,
+ SystemId,
+ SeatName,
+ AvailableVirtualGeometry,
+ MaximumPoints,
+ ButtonCount,
+ UniqueId,
+ NRoles
+ };
+ Q_ENUM(Role);
+
+ explicit InputDeviceModel(QObject *parent = nullptr);
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) 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;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
+
+protected:
+ bool eventFilter(QObject *obj, QEvent *event) override;
+
+signals:
+ void deviceAdded(const QObject *o);
+
+private slots:
+ void onDeviceAdded(const QObject *o);
+
+private:
+ void watchDevice(const QInputDevice *dev) const;
+ void deviceDestroyed(QObject *o);
+
+ mutable QList<const QInputDevice *> m_known;
+};
+
+#endif // INPUTDEVICEMODEL_H
diff --git a/tests/manual/inputdevices/main.cpp b/tests/manual/inputdevices/main.cpp
new file mode 100644
index 0000000000..2857fd0fb6
--- /dev/null
+++ b/tests/manual/inputdevices/main.cpp
@@ -0,0 +1,24 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QApplication>
+#include <QLoggingCategory>
+#include <QTreeView>
+
+#include "inputdevicemodel.h"
+
+int main(int argc, char **argv)
+{
+ QLoggingCategory::setFilterRules(QStringLiteral("qt.qpa.input.devices=true"));
+
+ QApplication app(argc, argv);
+
+ QTreeView view;
+ view.setModel(new InputDeviceModel(&view));
+ view.resize(1280, 600);
+ view.show();
+ view.resizeColumnToContents(0);
+
+ app.exec();
+}
+
diff --git a/tests/manual/inputmethodhints/CMakeLists.txt b/tests/manual/inputmethodhints/CMakeLists.txt
index 6a25220c45..491c9d5b59 100644
--- a/tests/manual/inputmethodhints/CMakeLists.txt
+++ b/tests/manual/inputmethodhints/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from inputmethodhints.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_inputmethodhints Binary:
@@ -9,12 +10,9 @@ qt_internal_add_manual_test(tst_inputmethodhints
SOURCES
inputmethodhints.cpp inputmethodhints.h inputmethodhints.ui
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
uic
)
-
-#### Keys ignored in scope 1:.:.:inputmethodhints.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/inputmethodhints/inputmethodhints.cpp b/tests/manual/inputmethodhints/inputmethodhints.cpp
index 0949777af1..89fa9ab0be 100644
--- a/tests/manual/inputmethodhints/inputmethodhints.cpp
+++ b/tests/manual/inputmethodhints/inputmethodhints.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 "inputmethodhints.h"
diff --git a/tests/manual/inputmethodhints/inputmethodhints.h b/tests/manual/inputmethodhints/inputmethodhints.h
index ca8025e3ec..24461d87b0 100644
--- a/tests/manual/inputmethodhints/inputmethodhints.h
+++ b/tests/manual/inputmethodhints/inputmethodhints.h
@@ -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
#ifndef INPUTMETHODHINTS_H
#define INPUTMETHODHINTS_H
diff --git a/tests/manual/inputmethodhints/main.cpp b/tests/manual/inputmethodhints/main.cpp
index e7114b2e6a..1b511b91f8 100644
--- a/tests/manual/inputmethodhints/main.cpp
+++ b/tests/manual/inputmethodhints/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 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 "inputmethodhints.h"
diff --git a/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon1024x1024.png b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon1024x1024.png
new file mode 100644
index 0000000000..91d71a1b45
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon1024x1024.png
Binary files differ
diff --git a/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon167x167.png b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon167x167.png
new file mode 100644
index 0000000000..c184c7f93d
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon167x167.png
Binary files differ
diff --git a/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png
new file mode 100644
index 0000000000..14eb31e401
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png
Binary files differ
diff --git a/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon76x76@2x~ipad.png b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon76x76@2x~ipad.png
new file mode 100644
index 0000000000..ffa1d4729a
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/AppIcon76x76@2x~ipad.png
Binary files differ
diff --git a/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/Contents.json b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000..c7cc581ac4
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,102 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "filename" : "AppIcon60x60@2x.png",
+ "idiom" : "iphone",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "iphone",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "ipad",
+ "scale" : "1x",
+ "size" : "76x76"
+ },
+ {
+ "filename" : "AppIcon76x76@2x~ipad.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "76x76"
+ },
+ {
+ "filename" : "AppIcon167x167.png",
+ "idiom" : "ipad",
+ "scale" : "2x",
+ "size" : "83.5x83.5"
+ },
+ {
+ "filename" : "AppIcon1024x1024.png",
+ "idiom" : "ios-marketing",
+ "scale" : "1x",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Contents.json b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Contents.json
new file mode 100644
index 0000000000..73c00596a7
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Contents.json b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Contents.json
new file mode 100644
index 0000000000..2108ce2651
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "Face-16.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Face-32.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "Face-48.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-16.png b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-16.png
new file mode 100644
index 0000000000..670beb4fbb
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-16.png
Binary files differ
diff --git a/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-32.png b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-32.png
new file mode 100644
index 0000000000..ee159b6061
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-32.png
Binary files differ
diff --git a/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-48.png b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-48.png
new file mode 100644
index 0000000000..f0783cd533
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode13.0.xcassets/Face.imageset/Face-48.png
Binary files differ
diff --git a/tests/manual/ios_assets/AssetsXcode14.3.xcassets/AppIcon.appiconset/AppIcon1024x1024.png b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/AppIcon.appiconset/AppIcon1024x1024.png
new file mode 100644
index 0000000000..91d71a1b45
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/AppIcon.appiconset/AppIcon1024x1024.png
Binary files differ
diff --git a/tests/manual/ios_assets/AssetsXcode14.3.xcassets/AppIcon.appiconset/Contents.json b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000000..7baa233d94
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,104 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "2x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "3x",
+ "size" : "20x20"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "2x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "3x",
+ "size" : "29x29"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "2x",
+ "size" : "38x38"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "3x",
+ "size" : "38x38"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "2x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "3x",
+ "size" : "40x40"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "2x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "3x",
+ "size" : "60x60"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "2x",
+ "size" : "64x64"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "3x",
+ "size" : "64x64"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "2x",
+ "size" : "68x68"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "2x",
+ "size" : "76x76"
+ },
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "scale" : "2x",
+ "size" : "83.5x83.5"
+ },
+ {
+ "filename" : "AppIcon1024x1024.png",
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Contents.json b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Contents.json
new file mode 100644
index 0000000000..73c00596a7
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Contents.json b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Contents.json
new file mode 100644
index 0000000000..2108ce2651
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "filename" : "Face-16.png",
+ "idiom" : "universal",
+ "scale" : "1x"
+ },
+ {
+ "filename" : "Face-32.png",
+ "idiom" : "universal",
+ "scale" : "2x"
+ },
+ {
+ "filename" : "Face-48.png",
+ "idiom" : "universal",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-16.png b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-16.png
new file mode 100644
index 0000000000..670beb4fbb
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-16.png
Binary files differ
diff --git a/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-32.png b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-32.png
new file mode 100644
index 0000000000..ee159b6061
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-32.png
Binary files differ
diff --git a/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-48.png b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-48.png
new file mode 100644
index 0000000000..f0783cd533
--- /dev/null
+++ b/tests/manual/ios_assets/AssetsXcode14.3.xcassets/Face.imageset/Face-48.png
Binary files differ
diff --git a/tests/manual/ios_assets/CMakeLists.txt b/tests/manual/ios_assets/CMakeLists.txt
new file mode 100644
index 0000000000..a9abe52b02
--- /dev/null
+++ b/tests/manual/ios_assets/CMakeLists.txt
@@ -0,0 +1,114 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(ios_assets LANGUAGES CXX)
+
+set(CMAKE_AUTOMOC ON)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Test)
+
+qt_add_executable(tst_manual_ios_assets
+ main.cpp
+)
+
+set_target_properties(tst_manual_ios_assets PROPERTIES
+ MACOSX_BUNDLE TRUE
+)
+target_link_libraries(tst_manual_ios_assets PRIVATE
+ Qt::Core
+ Qt::Gui
+ Qt::Test
+)
+
+# Custom Info.plist
+if(IOS)
+ if(XCODE_VERSION AND XCODE_VERSION VERSION_LESS "14")
+ set(plist_path "${CMAKE_CURRENT_SOURCE_DIR}/Info.ios.cmake.xcode.13.0.plist")
+ else()
+ set(plist_path "${CMAKE_CURRENT_SOURCE_DIR}/Info.ios.cmake.xcode.14.3.plist")
+ endif()
+ set_target_properties(tst_manual_ios_assets
+ PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${plist_path}")
+endif()
+
+# Custom resources
+file(GLOB_RECURSE text_files CONFIGURE_DEPENDS "*.txt")
+if(text_files)
+ list(FILTER text_files EXCLUDE REGEX CMakeLists.txt)
+ target_sources(tst_manual_ios_assets PRIVATE ${text_files})
+ # On iOS the 'Resources' prefix is removed by Xcode because on iOS app bundles are shallow,
+ # so the final location of the text file will be
+ # tst_manual_ios_assets.app/textFiles/foo.txt
+ # On macOS the location will be
+ # tst_manual_ios_assets.app/Contents/Resources/textFiles/foo.txt
+ set_source_files_properties(
+ ${text_files}
+ PROPERTIES MACOSX_PACKAGE_LOCATION Resources/textFiles)
+endif()
+
+# App icons
+# https://developer.apple.com/library/archive/qa/qa1686/_index.html
+# https://help.apple.com/xcode/mac/current/#/dev10510b1f7
+# https://web.archive.org/web/20180124234409/https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/app-icon/
+# https://doc.qt.io/qt-6/ios-platform-notes.html#icons
+# No need to copy the icons into the bundle manually when using Xcode 13+.
+# - rely on Xcode 13 to copy the needed icon files that are specified in the asset catalog (all the
+# required ones should be specified manually)
+# - rely on Xcode 14 to generate the needed icon files based on the 1024x1024 sized image in the
+# asset catalog
+
+# Asset catalog with images and icons.
+if(IOS)
+ enable_language(OBJCXX)
+ if(XCODE_VERSION AND XCODE_VERSION VERSION_LESS "14")
+ set(asset_catalog_path "${CMAKE_CURRENT_SOURCE_DIR}/AssetsXcode13.0.xcassets")
+ else()
+ set(asset_catalog_path "${CMAKE_CURRENT_SOURCE_DIR}/AssetsXcode14.3.xcassets")
+ endif()
+ target_sources(tst_manual_ios_assets PRIVATE "${asset_catalog_path}")
+ set_source_files_properties(
+ ${asset_catalog_path}
+ PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
+
+ # Make sure asset catalog compilation generates the needed app icons image sizes.
+ # This might not be needed in a future Qt version where qt_add_executable might do it
+ # automatically. Unclear how to do it cleanly though, because specifying the option when
+ # the asset catalog doesn't have an AppIcon set will cause a build failure.
+ set_target_properties(tst_manual_ios_assets PROPERTIES
+ XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME AppIcon)
+
+ target_sources(tst_manual_ios_assets PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/utils.mm")
+endif()
+
+# Set custom launch screen.
+# iOS has evolved and provides a few ways to handle this.
+# - UILaunchImageFile Info.plist key, introduced in iOS 3.2, supposedly deprecated in iOS 10.
+# - UILaunchImages, Info.plist keys, introduced in iOS 7, deprecated in iOS 13
+# - UILaunchStoryboardName, Info.plist key, introduced in iOS 9, not deprecated
+# - UILaunchScreen / UILaunchScreens, Info.plist dictionaries, introduced in iOS 14, not
+# deprecated
+# The first two expect images, the third one expects a storyboard / .xib file.
+# The last ones expect a dictionary of keys to configure the launch screen.
+# At the moment, UILaunchStoryboardName represents the lower bound of what Qt supports,
+# so use it here.
+# Reference info
+# https://developer.apple.com/documentation/xcode/specifying-your-apps-launch-screen/
+# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW24
+# https://developer.apple.com/documentation/uikit/uilocalnotification/1616660-alertlaunchimage?language=objc
+# https://developer.apple.com/documentation/bundleresources/information_property_list/uilaunchimages?language=objc
+# https://developer.apple.com/documentation/bundleresources/information_property_list/uilaunchstoryboardname?language=objc
+# https://developer.apple.com/documentation/bundleresources/information_property_list/uilaunchscreen?language=objc
+# https://forum.qt.io/topic/106251/use-launch-images-in-ios-project/4
+# https://codereview.qt-project.org/c/qt/qtdoc/+/100846
+if(IOS)
+ # Because we're not using the automatically generated Info.plist, it needs to be manually
+ # modified to have the UILaunchStoryboardName key.
+ set_target_properties(tst_manual_ios_assets PROPERTIES
+ QT_IOS_LAUNCH_SCREEN "${CMAKE_CURRENT_SOURCE_DIR}/CustomLaunchScreen.storyboard")
+endif()
+
+# Flip to TRUE to debug
+if(FALSE)
+ target_compile_definitions(tst_manual_ios_assets PRIVATE DEBUG_APP_DATA_LOCATION=1)
+endif()
diff --git a/tests/manual/ios_assets/CustomLaunchScreen.storyboard b/tests/manual/ios_assets/CustomLaunchScreen.storyboard
new file mode 100644
index 0000000000..889aa39d73
--- /dev/null
+++ b/tests/manual/ios_assets/CustomLaunchScreen.storyboard
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="13142" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
+ <dependencies>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12042"/>
+ <capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
+ <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+ <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+ </dependencies>
+ <scenes>
+ <!--View Controller-->
+ <scene sceneID="EHf-IW-A2E">
+ <objects>
+ <viewController id="01J-lp-oVM" sceneMemberID="viewController">
+ <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
+ <rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
+ <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
+ <subviews>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="obG-Y5-kRd">
+ <rect key="frame" x="0.0" y="626.5" width="375" height="20.5"/>
+ <fontDescription key="fontDescription" type="system" pointSize="17"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ <label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Pretty launch screen" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb">
+ <rect key="frame" x="0.0" y="202" width="375" height="43"/>
+ <fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
+ <color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <nil key="highlightedColor"/>
+ </label>
+ </subviews>
+ <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
+ <constraints>
+ <constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="obG-Y5-kRd" secondAttribute="centerX" id="5cz-MP-9tL"/>
+ <constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="GJd-Yh-RWb" secondAttribute="centerX" id="Q3B-4B-g5h"/>
+ <constraint firstItem="obG-Y5-kRd" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" constant="20" symbolic="YES" id="SfN-ll-jLj"/>
+ <constraint firstAttribute="bottom" secondItem="obG-Y5-kRd" secondAttribute="bottom" constant="20" id="Y44-ml-fuU"/>
+ <constraint firstItem="GJd-Yh-RWb" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="bottom" multiplier="1/3" constant="1" id="moa-c2-u7t"/>
+ <constraint firstItem="GJd-Yh-RWb" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" constant="20" symbolic="YES" id="x7j-FC-K8j"/>
+ </constraints>
+ <viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
+ </view>
+ </viewController>
+ <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
+ </objects>
+ <point key="canvasLocation" x="53" y="375"/>
+ </scene>
+ </scenes>
+</document>
diff --git a/tests/manual/ios_assets/Info.ios.cmake.xcode.13.0.plist b/tests/manual/ios_assets/Info.ios.cmake.xcode.13.0.plist
new file mode 100644
index 0000000000..b83c922e24
--- /dev/null
+++ b/tests/manual/ios_assets/Info.ios.cmake.xcode.13.0.plist
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+
+ <key>CFBundleDisplayName</key>
+ <string>$(PRODUCT_NAME)</string>
+
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+
+ <key>CFBundleVersion</key>
+ <string>$(CURRENT_PROJECT_VERSION)</string>
+
+ <key>CFBundleShortVersionString</key>
+ <string>$(MARKETING_VERSION)</string>
+
+ <key>NSHumanReadableCopyright</key>
+ <string></string>
+
+ <key>CFBundleIconFile</key>
+ <string></string>
+
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleAllowMixedLocalizations</key>
+ <true/>
+
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+
+ <key>UILaunchStoryboardName</key>
+ <string>CustomLaunchScreen</string>
+
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+
+ <key>CFBundleIcons</key>
+ <dict>
+ <key>CFBundlePrimaryIcon</key>
+ <dict>
+ <key>CFBundleIconFiles</key>
+ <array>
+ <string>AppIcon60x60@2x.png</string>
+ </array>
+ <key>CFBundleIconName</key>
+ <string>AppIcon</string>
+ </dict>
+ </dict>
+ <key>CFBundleIcons~ipad</key>
+ <dict>
+ <key>CFBundlePrimaryIcon</key>
+ <dict>
+ <key>CFBundleIconFiles</key>
+ <array>
+ <string>AppIcon76x76@2x~ipad.png</string>
+ </array>
+ </dict>
+ </dict>
+</dict>
+</plist>
diff --git a/tests/manual/ios_assets/Info.ios.cmake.xcode.14.3.plist b/tests/manual/ios_assets/Info.ios.cmake.xcode.14.3.plist
new file mode 100644
index 0000000000..282ad81c94
--- /dev/null
+++ b/tests/manual/ios_assets/Info.ios.cmake.xcode.14.3.plist
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+
+ <key>CFBundleName</key>
+ <string>$(PRODUCT_NAME)</string>
+
+ <key>CFBundleDisplayName</key>
+ <string>$(PRODUCT_NAME)</string>
+
+ <key>CFBundleIdentifier</key>
+ <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
+
+ <key>CFBundleExecutable</key>
+ <string>$(EXECUTABLE_NAME)</string>
+
+ <key>CFBundleVersion</key>
+ <string>$(CURRENT_PROJECT_VERSION)</string>
+
+ <key>CFBundleShortVersionString</key>
+ <string>$(MARKETING_VERSION)</string>
+
+ <key>NSHumanReadableCopyright</key>
+ <string></string>
+
+ <key>CFBundleIconFile</key>
+ <string></string>
+
+ <key>CFBundleDevelopmentRegion</key>
+ <string>en</string>
+ <key>CFBundleAllowMixedLocalizations</key>
+ <true/>
+
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+
+ <key>UILaunchStoryboardName</key>
+ <string>CustomLaunchScreen</string>
+
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+</dict>
+</plist>
diff --git a/tests/manual/ios_assets/Info.ios.qmake.xcode.13.0.plist b/tests/manual/ios_assets/Info.ios.qmake.xcode.13.0.plist
new file mode 100644
index 0000000000..7b1454beeb
--- /dev/null
+++ b/tests/manual/ios_assets/Info.ios.qmake.xcode.13.0.plist
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDisplayName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string>${ASSETCATALOG_COMPILER_APPICON_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>${QMAKE_SHORT_VERSION}</string>
+ <key>CFBundleSignature</key>
+ <string>${QMAKE_PKGINFO_TYPEINFO}</string>
+ <key>CFBundleVersion</key>
+ <string>${QMAKE_FULL_VERSION}</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>MinimumOSVersion</key>
+ <string>${IPHONEOS_DEPLOYMENT_TARGET}</string>
+ <key>UILaunchStoryboardName</key>
+ <string>CustomLaunchScreen</string>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+
+ <key>CFBundleIcons</key>
+ <dict>
+ <key>CFBundlePrimaryIcon</key>
+ <dict>
+ <key>CFBundleIconFiles</key>
+ <array>
+ <string>AppIcon60x60@2x.png</string>
+ </array>
+ <key>CFBundleIconName</key>
+ <string>AppIcon</string>
+ </dict>
+ </dict>
+ <key>CFBundleIcons~ipad</key>
+ <dict>
+ <key>CFBundlePrimaryIcon</key>
+ <dict>
+ <key>CFBundleIconFiles</key>
+ <array>
+ <string>AppIcon76x76@2x~ipad.png</string>
+ </array>
+ </dict>
+ </dict>
+</dict>
+</plist>
diff --git a/tests/manual/ios_assets/Info.ios.qmake.xcode.14.3.plist b/tests/manual/ios_assets/Info.ios.qmake.xcode.14.3.plist
new file mode 100644
index 0000000000..9df52cb2f7
--- /dev/null
+++ b/tests/manual/ios_assets/Info.ios.qmake.xcode.14.3.plist
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDisplayName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundleExecutable</key>
+ <string>${EXECUTABLE_NAME}</string>
+ <key>CFBundleIconFile</key>
+ <string>${ASSETCATALOG_COMPILER_APPICON_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>${PRODUCT_BUNDLE_IDENTIFIER}</string>
+ <key>CFBundleName</key>
+ <string>${PRODUCT_NAME}</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+ <key>CFBundleShortVersionString</key>
+ <string>${QMAKE_SHORT_VERSION}</string>
+ <key>CFBundleSignature</key>
+ <string>${QMAKE_PKGINFO_TYPEINFO}</string>
+ <key>CFBundleVersion</key>
+ <string>${QMAKE_FULL_VERSION}</string>
+ <key>LSRequiresIPhoneOS</key>
+ <true/>
+ <key>MinimumOSVersion</key>
+ <string>${IPHONEOS_DEPLOYMENT_TARGET}</string>
+ <key>UILaunchStoryboardName</key>
+ <string>CustomLaunchScreen</string>
+ <key>UISupportedInterfaceOrientations</key>
+ <array>
+ <string>UIInterfaceOrientationPortrait</string>
+ <string>UIInterfaceOrientationPortraitUpsideDown</string>
+ <string>UIInterfaceOrientationLandscapeLeft</string>
+ <string>UIInterfaceOrientationLandscapeRight</string>
+ </array>
+</dict>
+</plist>
diff --git a/tests/manual/ios_assets/foo.txt b/tests/manual/ios_assets/foo.txt
new file mode 100644
index 0000000000..ce01362503
--- /dev/null
+++ b/tests/manual/ios_assets/foo.txt
@@ -0,0 +1 @@
+hello
diff --git a/tests/manual/ios_assets/ios_assets.pro b/tests/manual/ios_assets/ios_assets.pro
new file mode 100644
index 0000000000..a2aa348771
--- /dev/null
+++ b/tests/manual/ios_assets/ios_assets.pro
@@ -0,0 +1,52 @@
+TEMPLATE = app
+SOURCES += main.cpp
+QT += core gui testlib
+CONFIG += app_bundle
+TARGET = tst_manual_ios_assets
+
+# Custom Info.plist
+ios {
+ versionAtLeast(QMAKE_XCODE_VERSION, 14.0) {
+ plist_path = Info.ios.qmake.xcode.14.3.plist
+ } else {
+ plist_path = Info.ios.qmake.xcode.13.0.plist
+ }
+ QMAKE_INFO_PLIST = $$plist_path
+}
+
+# Custom resources
+textFiles.files = $$files(*.txt)
+# On iOS no 'Resources' prefix is needed because iOS app bundles are shallow,
+# so the final location of the text file will be
+# tst_manual_ios_assets.app/textFiles/foo.txt
+# Specifying a Resources prefix actually causes code signing error for some reason.
+# On macOS the location will be
+# tst_manual_ios_assets.app/Contents/Resources/textFiles/foo.txt
+ios {
+ textFiles.path = textFiles
+}
+macos {
+ textFiles.path = Contents/Resources/textFiles
+}
+textFiles.files -= CMakeLists.txt
+QMAKE_BUNDLE_DATA += textFiles
+
+# Asset catalog with images and app icons
+ios {
+ # The asset catalog needs to have at least an empty AppIcon.appiconset, otherwise Xcode refuses
+ # to compile the asset catalog.
+ versionAtLeast(QMAKE_XCODE_VERSION, 14.0) {
+ QMAKE_ASSET_CATALOGS += AssetsXcode14.3.xcassets
+ } else {
+ QMAKE_ASSET_CATALOGS += AssetsXcode13.0.xcassets
+ }
+ SOURCES += utils.mm
+ LIBS += -framework UIKit
+}
+
+# Set custom launch screen
+ios {
+ # Underneath, this uses QMAKE_BUNDLE_DATA, prevents the default launch screen from being set
+ # and bundles the custom one.
+ QMAKE_IOS_LAUNCH_SCREEN = $$PWD/CustomLaunchScreen.storyboard
+}
diff --git a/tests/manual/ios_assets/main.cpp b/tests/manual/ios_assets/main.cpp
new file mode 100644
index 0000000000..bbad425b62
--- /dev/null
+++ b/tests/manual/ios_assets/main.cpp
@@ -0,0 +1,70 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QStandardPaths>
+#include <QtCore/QDir>
+#include <QtTest/QtTest>
+
+#ifdef DEBUG_APP_DATA_LOCATION
+ #include <QtCore/QDebug>
+#endif
+
+class AssetsIos : public QObject
+{
+ Q_OBJECT
+private slots:
+ void bundledTextFiles();
+ void bundledAppIcons();
+ void bundledImageInAssetCatalog();
+};
+
+void AssetsIos::bundledTextFiles()
+{
+#ifdef DEBUG_APP_DATA_LOCATION
+ auto paths = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation);
+ qDebug() << paths;
+
+ for (const QString& path: paths) {
+ QDir oneDir = QDir(path);
+ qDebug() << "path" << path << "entries" << oneDir.entryList();
+ }
+#endif
+
+ /*
+ AppDataLocation returns the following 3 paths on iOS
+ /var/mobile/Containers/Data/Application/uuid/Library/Application Support/tst_manual_ios_assets
+ /Library/Application Support/tst_manual_ios_assets
+ /private/var/containers/Bundle/Application/<uuid>/tst_manual_ios_assets.app
+
+ The textFiles/foo.txt file only exists in the third location at
+ /private/var/containers/Bundle/Application/<uuid>/tst_manual_ios_assets.app/textFiles/foo.txt
+
+ AppDataLocation returns the following 3 paths on macOS
+ /Users/<user>/Library/Application Support/tst_manual_ios_assets
+ /Library/Application Support/tst_manual_ios_assets
+ <build-dir>/tst_manual_ios_assets.app/Contents/Resources
+
+ Once again the file only exists in the third location at
+ <build-dir>/tst_manual_ios_assets.app/Contents/Resources/textFiles/foo.txt
+ */
+ QString textFile = QStandardPaths::locate(QStandardPaths::AppDataLocation,
+ QStringLiteral("textFiles/foo.txt"));
+ QVERIFY(!textFile.isEmpty());
+}
+
+void AssetsIos::bundledAppIcons() {
+ // Confirm one of the app icons are present.
+ QString appIcon = QStandardPaths::locate(QStandardPaths::AppDataLocation,
+ QStringLiteral("AppIcon40x40@2x.png"));
+ QVERIFY(!appIcon.isEmpty());
+}
+
+bool imageExistsInAssetCatalog(QString imageName);
+
+void AssetsIos::bundledImageInAssetCatalog() {
+ // Asset catalog images can be accessed only via a name, not a path.
+ QVERIFY(imageExistsInAssetCatalog(QStringLiteral("Face")));
+}
+
+QTEST_MAIN(AssetsIos)
+#include "main.moc"
diff --git a/tests/manual/ios_assets/utils.mm b/tests/manual/ios_assets/utils.mm
new file mode 100644
index 0000000000..44a333f673
--- /dev/null
+++ b/tests/manual/ios_assets/utils.mm
@@ -0,0 +1,18 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QString>
+
+#ifdef Q_OS_IOS
+#include <UIKit/UIKit.h>
+#endif
+
+bool imageExistsInAssetCatalog(QString imageName) {
+#ifdef Q_OS_IOS
+ UIImage* image = [UIImage imageNamed:imageName.toNSString()];
+ return image != nil;
+#else
+ // Don't fail the test when building on platforms other than iOS.
+ return true;
+#endif
+}
diff --git a/tests/manual/keyevents/CMakeLists.txt b/tests/manual/keyevents/CMakeLists.txt
new file mode 100644
index 0000000000..92a9f6f0b4
--- /dev/null
+++ b/tests/manual/keyevents/CMakeLists.txt
@@ -0,0 +1,12 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(keyevents
+ GUI
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
+)
diff --git a/tests/manual/keyevents/keyevents.pro b/tests/manual/keyevents/keyevents.pro
new file mode 100644
index 0000000000..dd53f0645d
--- /dev/null
+++ b/tests/manual/keyevents/keyevents.pro
@@ -0,0 +1,6 @@
+QT += core gui widgets gui-private
+
+TARGET = keyevents
+TEMPLATE = app
+
+SOURCES += main.cpp
diff --git a/tests/manual/keyevents/main.cpp b/tests/manual/keyevents/main.cpp
new file mode 100644
index 0000000000..888b7f9d3f
--- /dev/null
+++ b/tests/manual/keyevents/main.cpp
@@ -0,0 +1,305 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtWidgets>
+#include <vector>
+#include <memory>
+#include <type_traits>
+
+#include <private/qkeymapper_p.h>
+#include <private/qguiapplication_p.h>
+
+static const QKeySequence keySequences[] = {
+ QKeySequence("Ctrl+C"),
+ QKeySequence("Ctrl++"),
+};
+
+class KeyEventModel : public QAbstractTableModel
+{
+ Q_OBJECT
+public:
+ explicit KeyEventModel(QObject *parent = nullptr)
+ : QAbstractTableModel(parent)
+ {
+ }
+
+ enum Columns {
+ Language,
+ Direction,
+ Type,
+ ScanCode,
+ VirtualKey,
+ Modifiers,
+ Key,
+ Text,
+ PortableText,
+ NativeText,
+ PossibleKeys,
+ FirstKeySequence,
+ LastKeySequence = FirstKeySequence + std::size(keySequences) - 1,
+ KeySequenceEdit,
+ ColumnCount
+ };
+
+ int rowCount(const QModelIndex & = QModelIndex()) const override
+ {
+ return int(m_events.size());
+ }
+
+ int columnCount(const QModelIndex & = QModelIndex()) const override
+ {
+ return ColumnCount;
+ }
+
+ QVariant headerData(int column, Qt::Orientation orientation, int role) const override
+ {
+ if (role == Qt::DisplayRole && orientation == Qt::Horizontal) {
+ switch (column) {
+ case Language: return QString("language");
+ case Direction: return QString("direction");
+ case Type: return QString("type");
+ case ScanCode: return QString("nativeScanCode");
+ case VirtualKey: return QString("nativeVirtualKey");
+ case Modifiers: return QString("modifiers");
+ case Key: return QString("key");
+ case Text: return QString("text");
+ case PortableText: return QString("PortableText");
+ case NativeText: return QString("NativeText");
+ case PossibleKeys: return QString("keyCombinations");
+ case KeySequenceEdit: return m_customKeySequence.toString();
+ default: {
+ auto keySequence = keySequences[column - FirstKeySequence];
+ return keySequence.toString();
+ }
+ }
+ }
+ return QVariant();
+ }
+
+ template <typename T>
+ static QString toString(T &&object, int verbosity = QDebug::DefaultVerbosity)
+ {
+ QString buffer;
+ QDebug stream(&buffer);
+ stream.setVerbosity(verbosity);
+ stream.nospace() << std::forward<T>(object);
+ return buffer;
+ }
+
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
+ {
+ if (role == Qt::DisplayRole) {
+ auto &event = m_events.at(index.row());
+ auto *keyEvent = event.keyEvent.get();
+ switch (int column = index.column()) {
+ case Language: return event.language;
+ case Direction: return toString(event.layoutDirection, QDebug::MinimumVerbosity);
+ case Type: return toString(keyEvent->type(), QDebug::MinimumVerbosity);
+ case ScanCode: return keyEvent->nativeScanCode();
+ case VirtualKey: return keyEvent->nativeVirtualKey();
+ case Modifiers: return toString(keyEvent->modifiers(), QDebug::MinimumVerbosity);
+ case Key: return toString(Qt::Key(keyEvent->key()), QDebug::MinimumVerbosity);
+ case Text: return keyEvent->text();
+ case PortableText: return event.keySequence.toString(QKeySequence::PortableText);
+ case NativeText: return event.keySequence.toString(QKeySequence::NativeText);
+ case PossibleKeys: {
+ QStringList keyCombinations;
+ for (auto combination : event.possibleKeyCombinations)
+ keyCombinations << QKeySequence(combination).toString(QKeySequence::NativeText);
+ static constexpr auto leftToRightOverride = QChar(0x202d);
+ return leftToRightOverride + keyCombinations.join(" ");
+ }
+ default: {
+ QStringList matches;
+ if (event.keySequenceEquals[column - FirstKeySequence])
+ matches << "K";
+ if (event.shortcutMatches[column - FirstKeySequence])
+ matches << "S";
+ return matches.join(" ");
+ }
+ }
+ } else if (role == Qt::TextAlignmentRole) {
+ return Qt::AlignCenter;
+ }
+
+ return QVariant();
+ }
+
+ struct Event {
+ std::unique_ptr<QKeyEvent> keyEvent;
+ QString language;
+ Qt::LayoutDirection layoutDirection;
+ QKeySequence keySequence;
+ using PossibleKeysList = decltype(std::declval<QKeyMapper>().possibleKeys(nullptr));
+ PossibleKeysList possibleKeyCombinations;
+ // Hard-coded key sequences, plus room for KeySequenceEdit
+ bool keySequenceEquals[std::size(keySequences) + 1] = {};
+ bool shortcutMatches[std::size(keySequences) + 1] = {};
+ };
+
+ bool eventFilter(QObject *object, QEvent *event) override
+ {
+ if (!m_enabled)
+ return false;
+
+ switch (auto type = event->type()) {
+ case QEvent::KeyPress:
+ case QEvent::KeyRelease: {
+ auto *keyEvent = static_cast<QKeyEvent*>(event);
+ auto *inputMethod = qGuiApp->inputMethod();
+ auto row = int(m_events.size());
+ beginInsertRows(QModelIndex(), row, row);
+ m_events.push_back({
+ std::unique_ptr<QKeyEvent>(keyEvent->clone()),
+ QLocale::languageToString(inputMethod->locale().language()),
+ inputMethod->inputDirection(),
+ QKeySequence(keyEvent->keyCombination()),
+ QKeyMapper::instance()->possibleKeys(keyEvent)
+ });
+
+ Event &event = m_events.back();
+
+ if (type == QEvent::KeyPress) {
+ for (size_t i = 0; i < std::size(event.keySequenceEquals); ++i) {
+ QKeySequence keySequence = i == std::size(keySequences) ?
+ m_customKeySequence : keySequences[i];
+
+ event.keySequenceEquals[i] = event.keySequence == keySequence;
+
+ QShortcut shortcut(keySequence, object, [&] {
+ event.shortcutMatches[i] = true;
+ }, Qt::ApplicationShortcut);
+ QShortcutMap &shortcutMap = QGuiApplicationPrivate::instance()->shortcutMap;
+ shortcutMap.tryShortcut(keyEvent);
+ }
+ }
+
+ endInsertRows();
+ return false;
+ }
+ case QEvent::ShortcutOverride: {
+ auto *keyEvent = static_cast<QKeyEvent*>(event);
+ if (!keyEvent->matches(QKeySequence::Quit)) {
+ event->accept();
+ return true;
+ }
+ return false;
+ }
+ default:
+ return false;
+ }
+ }
+
+ void reset()
+ {
+ beginResetModel();
+ m_events.clear();
+ endResetModel();
+ }
+
+ Q_SLOT void setCustomKeySequence(const QKeySequence &keySequence)
+ {
+ m_customKeySequence = keySequence;
+ emit headerDataChanged(Qt::Horizontal, KeySequenceEdit, ColumnCount);
+ }
+
+ bool m_enabled = true;
+ std::vector<Event> m_events;
+ QKeySequence m_customKeySequence;
+};
+
+class KeyEventWindow : public QMainWindow
+{
+public:
+ KeyEventWindow()
+ {
+ setWindowTitle(QString("Qt %1 on %2").arg(QT_VERSION_STR).arg(QSysInfo::prettyProductName()));
+ auto *tableView = new QTableView(this);
+ m_keyEventModel = new KeyEventModel(this);
+ tableView->setModel(m_keyEventModel);
+ tableView->installEventFilter(m_keyEventModel);
+
+ tableView->setFocusPolicy(Qt::ClickFocus);
+ tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
+ tableView->setSelectionMode(QAbstractItemView::NoSelection);
+ tableView->setWordWrap(false);
+
+ QObject::connect(tableView->model(), &QAbstractItemModel::rowsInserted,
+ tableView, &QTableView::scrollToBottom);
+
+ QMenu *menu = menuBar()->addMenu("File");
+ menu->addAction("Save...", this, &KeyEventWindow::save);
+ menu->addAction("Clear", this, [this]{
+ m_keyEventModel->reset();
+ });
+ auto *enableAction = menu->addAction("Enabled", this, [this]{
+ auto *action = static_cast<QAction*>(sender());
+ m_keyEventModel->m_enabled = action->isChecked();
+ });
+ enableAction->setCheckable(true);
+ enableAction->setChecked(true);
+
+ auto *toolBar = addToolBar("Tools");
+ toolBar->setMovable(false);
+ toolBar->addWidget(new QLabel("Key sequence editor:"));
+ auto *keySequenceEdit = new QKeySequenceEdit;
+ keySequenceEdit->setMaximumSequenceLength(1);
+ connect(keySequenceEdit, &QKeySequenceEdit::keySequenceChanged,
+ m_keyEventModel, &KeyEventModel::setCustomKeySequence);
+ keySequenceEdit->installEventFilter(m_keyEventModel);
+ toolBar->addWidget(keySequenceEdit);
+ toolBar->addWidget(new QLabel("Free form text input:"));
+ toolBar->addWidget(new QLineEdit);
+
+ setCentralWidget(tableView);
+ centralWidget()->setFocus();
+ }
+
+ void save()
+ {
+ auto homeDirectory = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
+ QString fileName = QFileDialog::getSaveFileName(this, "Save events",
+ QString("%1/events.csv").arg(homeDirectory));
+
+ QFile file(fileName);
+ if (!file.open(QFile::WriteOnly | QFile::Truncate)) {
+ QMessageBox::critical(this, "Could not open file", file.errorString());
+ return;
+ }
+ QTextStream output(&file);
+ const auto columns = m_keyEventModel->columnCount();
+ for (int c = 0; c < columns; ++c) {
+ output << m_keyEventModel->headerData(c, Qt::Horizontal, Qt::DisplayRole).toString()
+ << ((c < columns - 1) ? ";" : "");
+ }
+ output << "\n";
+ for (int r = 0; r < m_keyEventModel->rowCount(); ++r) {
+ for (int c = 0; c < m_keyEventModel->columnCount(); ++c) {
+ auto index = m_keyEventModel->index(r, c);
+ output << m_keyEventModel->data(index).toString()
+ << ((c < columns - 1) ? ";" : "");
+ }
+ output << "\n";
+ }
+ }
+
+ void keyPressEvent(QKeyEvent *keyEvent) override
+ {
+ if (keyEvent->matches(QKeySequence::Quit))
+ qGuiApp->quit();
+ }
+
+ KeyEventModel *m_keyEventModel = nullptr;
+};
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+
+ KeyEventWindow keyEventWindow;
+ keyEventWindow.showMaximized();
+
+ return a.exec();
+}
+
+#include "main.moc"
diff --git a/tests/manual/keypadnavigation/CMakeLists.txt b/tests/manual/keypadnavigation/CMakeLists.txt
index 17206e8c31..bb8478c2fb 100644
--- a/tests/manual/keypadnavigation/CMakeLists.txt
+++ b/tests/manual/keypadnavigation/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from keypadnavigation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## keypadnavigation Binary:
@@ -9,7 +10,7 @@ qt_internal_add_manual_test(keypadnavigation
SOURCES
keypadnavigation.ui
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
diff --git a/tests/manual/keypadnavigation/main.cpp b/tests/manual/keypadnavigation/main.cpp
index 52d0dacd07..4cfd8975d2 100644
--- a/tests/manual/keypadnavigation/main.cpp
+++ b/tests/manual/keypadnavigation/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 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 <QMainWindow>
#include <QApplication>
diff --git a/tests/manual/lance/CMakeLists.txt b/tests/manual/lance/CMakeLists.txt
index 3b932c3629..41eb18b6c2 100644
--- a/tests/manual/lance/CMakeLists.txt
+++ b/tests/manual/lance/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from lance.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## lance Binary:
@@ -10,10 +11,12 @@ qt_internal_add_manual_test(lance
interactivewidget.cpp interactivewidget.h
main.cpp
widgets.h
+ NO_PCH_SOURCES
+ interactivewidget.cpp # undef QT_NO_FOREACH
INCLUDE_DIRECTORIES
.
../../baseline/shared
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -74,14 +77,10 @@ qt_internal_add_resource(lance "images"
${images_resource_files}
)
-
-#### Keys ignored in scope 1:.:.:lance.pro:<TRUE>:
-# TEMPLATE = "app"
-
## Scopes:
#####################################################################
qt_internal_extend_target(lance CONDITION TARGET Qt::OpenGL
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::OpenGL
)
diff --git a/tests/manual/lance/README b/tests/manual/lance/README
index 6e89b29b08..68a9d647bc 100644
--- a/tests/manual/lance/README
+++ b/tests/manual/lance/README
@@ -1,6 +1,6 @@
The "lance" tool can be used to edit and run QPainter script (.qps)
files. They are used in the "lancelot" qpainter regression autotest.
-A collection of scripts can be found in the directory
-tests/auto/lancelot/scripts
+A collection of scripts can be found in subdirectories under
+tests/baseline
See lance -help for options.
diff --git a/tests/manual/lance/interactivewidget.cpp b/tests/manual/lance/interactivewidget.cpp
index 62c3b5586a..03bfca8566 100644
--- a/tests/manual/lance/interactivewidget.cpp
+++ b/tests/manual/lance/interactivewidget.cpp
@@ -1,30 +1,8 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
+
#include "interactivewidget.h"
#include <QtWidgets>
diff --git a/tests/manual/lance/interactivewidget.h b/tests/manual/lance/interactivewidget.h
index bd6d54664a..b11c6cfee2 100644
--- a/tests/manual/lance/interactivewidget.h
+++ b/tests/manual/lance/interactivewidget.h
@@ -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
#ifndef INTERACTIVEWIDGET_H
#define INTERACTIVEWIDGET_H
diff --git a/tests/manual/lance/lance.pro b/tests/manual/lance/lance.pro
index f6c6210998..68f5368f7d 100644
--- a/tests/manual/lance/lance.pro
+++ b/tests/manual/lance/lance.pro
@@ -1,4 +1,4 @@
-LANCELOT_DIR = $$PWD/../../baseline/painting
+LANCELOT_DIR = $$[QT_HOST_PREFIX]/tests/baseline/shared
CONFIG += cmdline moc
TEMPLATE = app
INCLUDEPATH += . $$LANCELOT_DIR
@@ -11,7 +11,7 @@ SOURCES += interactivewidget.cpp \
main.cpp \
$$LANCELOT_DIR/paintcommands.cpp
RESOURCES += icons.qrc \
- $$LANCELOT_DIR/images.qrc
+ $$LANCELOT_DIR/../painting/images.qrc
qtHaveModule(opengl): QT += opengl
diff --git a/tests/manual/lance/main.cpp b/tests/manual/lance/main.cpp
index caf68654b6..f39001f3c2 100644
--- a/tests/manual/lance/main.cpp
+++ b/tests/manual/lance/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 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 "interactivewidget.h"
#include "widgets.h"
#include "paintcommands.h"
@@ -216,6 +191,7 @@ int main(int argc, char **argv)
DeviceType type = WidgetType;
QSurfaceFormat contextFormat;
+ contextFormat.setStencilBufferSize(8);
bool checkers_background = true;
QImage::Format imageFormat = QImage::Format_ARGB32_Premultiplied;
diff --git a/tests/manual/lance/widgets.h b/tests/manual/lance/widgets.h
index a804471f53..ae2e75fbdc 100644
--- a/tests/manual/lance/widgets.h
+++ b/tests/manual/lance/widgets.h
@@ -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
#ifndef WIDGETS_H
#define WIDGETS_H
diff --git a/tests/manual/manual.pro b/tests/manual/manual.pro
index 8ad5882234..ef52a60952 100644
--- a/tests/manual/manual.pro
+++ b/tests/manual/manual.pro
@@ -5,10 +5,12 @@ SUBDIRS = \
filetest \
embeddedintoforeignwindow \
foreignwindows \
+fontfeatures \
gestures \
highdpi \
inputmethodhints \
keypadnavigation \
+keyevents \
lance \
network_remote_stresstest \
network_stresstest \
@@ -47,8 +49,7 @@ windowflags \
windowgeometry \
windowmodality \
widgetgrab \
-xembed-raster \
-xembed-widgets \
+xmlstreamlint \
shortcuts \
dialogs \
windowtransparency \
@@ -66,3 +67,5 @@ qtConfig(opengl) {
win32: SUBDIRS -= network_remote_stresstest network_stresstest
qtConfig(vulkan): SUBDIRS += qvulkaninstance
+
+qtConfig(xcb): SUBDIRS += xembed
diff --git a/tests/manual/markdown/CMakeLists.txt b/tests/manual/markdown/CMakeLists.txt
index e02515a80b..8f2f9684c8 100644
--- a/tests/manual/markdown/CMakeLists.txt
+++ b/tests/manual/markdown/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from html2md.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## html2md Binary:
@@ -10,9 +11,6 @@ qt_internal_add_manual_test(html2md
html2md.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
-
-#### Keys ignored in scope 1:.:.:html2md.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/markdown/html2md.cpp b/tests/manual/markdown/html2md.cpp
index 19d6ff06af..f813330242 100644
--- a/tests/manual/markdown/html2md.cpp
+++ b/tests/manual/markdown/html2md.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
- **
- ** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QCommandLineParser>
#include <QDebug>
diff --git a/tests/manual/mkspecs/test.sh b/tests/manual/mkspecs/test.sh
index 902b566294..c2d3215cf7 100755
--- a/tests/manual/mkspecs/test.sh
+++ b/tests/manual/mkspecs/test.sh
@@ -1,31 +1,6 @@
#!/bin/bash
-#############################################################################
-##
-## 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
if [ "$1" == "--help" ]; then
diff --git a/tests/manual/network/ssl/client-auth/CMakeLists.txt b/tests/manual/network/ssl/client-auth/CMakeLists.txt
new file mode 100644
index 0000000000..67ecc20bf4
--- /dev/null
+++ b/tests/manual/network/ssl/client-auth/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(tst_manual_ssl_client_auth
+ SOURCES
+ tst_manual_ssl_client_auth.cpp
+ LIBRARIES
+ Qt::Network
+)
+
+qt_internal_add_resource(tst_manual_ssl_client_auth "tst_manual_ssl_client_auth"
+ PREFIX
+ "/"
+ FILES
+ "certs/127.0.0.1.pem"
+ "certs/127.0.0.1-key.pem"
+ "certs/127.0.0.1-client.pem"
+ "certs/127.0.0.1-client-key.pem"
+ "certs/accepted-client.pem"
+ "certs/accepted-client-key.pem"
+ "certs/rootCA.pem"
+ BASE
+ "certs"
+)
diff --git a/tests/manual/network/ssl/client-auth/certs/.gitignore b/tests/manual/network/ssl/client-auth/certs/.gitignore
new file mode 100644
index 0000000000..5866f7b609
--- /dev/null
+++ b/tests/manual/network/ssl/client-auth/certs/.gitignore
@@ -0,0 +1,4 @@
+*
+!/.gitignore
+!/generate.sh
+!/accepted-client.conf
diff --git a/tests/manual/network/ssl/client-auth/certs/accepted-client.conf b/tests/manual/network/ssl/client-auth/certs/accepted-client.conf
new file mode 100644
index 0000000000..a88b276efe
--- /dev/null
+++ b/tests/manual/network/ssl/client-auth/certs/accepted-client.conf
@@ -0,0 +1,14 @@
+[req]
+default_md = sha512
+basicConstraints = CA:FALSE
+extendedKeyUsage = clientAuth
+[req]
+distinguished_name = client_distinguished_name
+prompt = no
+[client_distinguished_name]
+C = NO
+ST = Oslo
+L = Oslo
+O = The Qt Project
+OU = The Qt Project
+CN = Fake Qt Project Client Certificate
diff --git a/tests/manual/network/ssl/client-auth/certs/generate.sh b/tests/manual/network/ssl/client-auth/certs/generate.sh
new file mode 100755
index 0000000000..5dbe3b3712
--- /dev/null
+++ b/tests/manual/network/ssl/client-auth/certs/generate.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+# Requires mkcert and openssl
+
+warn () { echo "$@" >&2; }
+die () { warn "$@"; exit 1; }
+
+
+command -v mkcert 1>/dev/null 2>&1 || die "Failed to find mkcert"
+command -v openssl 1>/dev/null 2>&1 || die "Failed to find openssl"
+
+SCRIPT=$(realpath "$0")
+SCRIPTPATH=$(dirname "$SCRIPT")
+
+pushd "$SCRIPTPATH" || die "Unable to pushd to $SCRIPTPATH"
+mkcert 127.0.0.1
+mkcert -client 127.0.0.1
+warn "Remember to run mkcert -install if you haven't already"
+
+# Generate CA
+openssl genrsa -out ca-key.pem 2048
+openssl req -new -x509 -noenc -days 365 -key ca-key.pem -out rootCA.pem
+
+# Generate accepted client certificate
+openssl genrsa -out accepted-client-key.pem 2048
+openssl req -new -sha512 -nodes -key accepted-client-key.pem -out accepted-client.csr -config accepted-client.conf
+openssl x509 -req -sha512 -days 45 -in accepted-client.csr -CA rootCA.pem -CAkey ca-key.pem -CAcreateserial -out accepted-client.pem
+rm accepted-client.csr
+rm rootCA.srl
+
+popd || die "Unable to popd"
diff --git a/tests/manual/network/ssl/client-auth/tst_manual_ssl_client_auth.cpp b/tests/manual/network/ssl/client-auth/tst_manual_ssl_client_auth.cpp
new file mode 100644
index 0000000000..7730105f36
--- /dev/null
+++ b/tests/manual/network/ssl/client-auth/tst_manual_ssl_client_auth.cpp
@@ -0,0 +1,136 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/qcoreapplication.h>
+
+#include <QtCore/qthread.h>
+#include <QtCore/qfile.h>
+#include <QtCore/qdir.h>
+
+#include <QtNetwork/qsslsocket.h>
+#include <QtNetwork/qsslserver.h>
+#include <QtNetwork/qsslconfiguration.h>
+#include <QtNetwork/qsslkey.h>
+
+// Client and/or server presents a certificate signed by a system-trusted CA
+// but the other side presents a certificate signed by a different CA.
+constexpr bool TestServerPresentsIncorrectCa = false;
+constexpr bool TestClientPresentsIncorrectCa = true;
+// Decides whether or not to put the root CA into the global ssl configuration
+// or into the socket's specific ssl configuration.
+constexpr bool UseGlobalConfiguration = true;
+
+class ServerThread : public QThread
+{
+ Q_OBJECT
+public:
+ void run() override
+ {
+ QSslServer server;
+
+ QSslConfiguration config = server.sslConfiguration();
+ if (!UseGlobalConfiguration) {
+ QList<QSslCertificate> certs = QSslCertificate::fromPath(QStringLiteral(":/rootCA.pem"));
+ config.setCaCertificates(certs);
+ }
+ config.setLocalCertificate(QSslCertificate::fromPath(QStringLiteral(":/127.0.0.1.pem"))
+ .first());
+ QFile keyFile(QStringLiteral(":/127.0.0.1-key.pem"));
+ if (!keyFile.open(QIODevice::ReadOnly))
+ qFatal("Failed to open key file");
+ config.setPrivateKey(QSslKey(&keyFile, QSsl::Rsa));
+ config.setPeerVerifyMode(QSslSocket::VerifyPeer);
+ server.setSslConfiguration(config);
+
+ connect(&server, &QSslServer::pendingConnectionAvailable, [&server]() {
+ QSslSocket *socket = static_cast<QSslSocket *>(server.nextPendingConnection());
+ qDebug() << "[s] newConnection" << socket->peerAddress() << socket->peerPort();
+ socket->disconnectFromHost();
+ qApp->quit();
+ });
+ connect(&server, &QSslServer::startedEncryptionHandshake, [](QSslSocket *socket) {
+ qDebug() << "[s] new handshake" << socket->peerAddress() << socket->peerPort();
+ });
+ connect(&server, &QSslServer::errorOccurred,
+ [](QSslSocket *socket, QAbstractSocket::SocketError error) {
+ qDebug() << "[s] errorOccurred" << socket->peerAddress() << socket->peerPort()
+ << error << socket->errorString();
+ });
+ connect(&server, &QSslServer::peerVerifyError,
+ [](QSslSocket *socket, const QSslError &error) {
+ qDebug() << "[s] peerVerifyError" << socket->peerAddress() << socket->peerPort()
+ << error;
+ });
+ server.listen(QHostAddress::LocalHost, 24242);
+
+ exec();
+
+ server.close();
+ }
+};
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+
+ using namespace Qt::StringLiterals;
+
+ if (!QFileInfo(u":/rootCA.pem"_s).exists())
+ qFatal("rootCA.pem not found. Did you run generate.sh in the certs directory?");
+
+ if (UseGlobalConfiguration) {
+ QSslConfiguration config = QSslConfiguration::defaultConfiguration();
+ config.setCaCertificates(QSslCertificate::fromPath(u":/rootCA.pem"_s));
+ QSslConfiguration::setDefaultConfiguration(config);
+ }
+
+ ServerThread serverThread;
+ serverThread.start();
+
+ QSslSocket socket;
+ QSslConfiguration config = socket.sslConfiguration();
+ QString certificatePath;
+ QString keyFileName;
+ if constexpr (TestClientPresentsIncorrectCa) { // true: Present cert signed with incorrect CA: should fail
+ certificatePath = u":/127.0.0.1-client.pem"_s;
+ keyFileName = u":/127.0.0.1-client-key.pem"_s;
+ } else { // false: Use correct CA: should succeed
+ certificatePath = u":/accepted-client.pem"_s;
+ keyFileName = u":/accepted-client-key.pem"_s;
+ }
+ config.setLocalCertificate(QSslCertificate::fromPath(certificatePath).first());
+ if (!UseGlobalConfiguration && TestServerPresentsIncorrectCa) {
+ // Verify server using incorrect CA: should fail
+ config.setCaCertificates(QSslCertificate::fromPath(u":/rootCA.pem"_s));
+ } else if (UseGlobalConfiguration && !TestServerPresentsIncorrectCa) {
+ // Verify server using correct CA, we need to explicitly set the
+ // system CAs when the global config is overridden.
+ config.setCaCertificates(QSslConfiguration::systemCaCertificates());
+ }
+ QFile keyFile(keyFileName);
+ if (!keyFile.open(QIODevice::ReadOnly))
+ qFatal("Failed to open key file");
+ config.setPrivateKey(QSslKey(&keyFile, QSsl::Rsa));
+
+ socket.setSslConfiguration(config);
+
+ QObject::connect(&socket, &QSslSocket::encrypted, []() { qDebug() << "[c] encrypted"; });
+ QObject::connect(&socket, &QSslSocket::errorOccurred,
+ [&socket](QAbstractSocket::SocketError error) {
+ qDebug() << "[c] errorOccurred" << error << socket.errorString();
+ qApp->quit();
+ });
+ QObject::connect(&socket, &QSslSocket::sslErrors, [](const QList<QSslError> &errors) {
+ qDebug() << "[c] sslErrors" << errors;
+ });
+ QObject::connect(&socket, &QSslSocket::connected, []() { qDebug() << "[c] connected"; });
+
+ socket.connectToHostEncrypted(QStringLiteral("127.0.0.1"), 24242);
+
+ const int res = app.exec();
+ serverThread.quit();
+ serverThread.wait();
+ return res;
+}
+
+#include "tst_manual_ssl_client_auth.moc"
diff --git a/tests/manual/network_remote_stresstest/CMakeLists.txt b/tests/manual/network_remote_stresstest/CMakeLists.txt
index 20006c2cb9..d8a3e6c8e5 100644
--- a/tests/manual/network_remote_stresstest/CMakeLists.txt
+++ b/tests/manual/network_remote_stresstest/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from network_remote_stresstest.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_network_remote_stresstest Binary:
@@ -7,7 +8,7 @@
qt_internal_add_manual_test(tst_network_remote_stresstest
SOURCES
tst_network_remote_stresstest.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
Qt::NetworkPrivate
diff --git a/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp b/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
index b2545285c4..fd4e62c92b 100644
--- a/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
+++ b/tests/manual/network_remote_stresstest/tst_network_remote_stresstest.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <QtTest/qtesteventloop.h>
#include <QtCore/QElapsedTimer>
#include <QtCore/QList>
#include <QtCore/QSemaphore>
diff --git a/tests/manual/network_stresstest/CMakeLists.txt b/tests/manual/network_stresstest/CMakeLists.txt
index bb29e74615..56b23a4b21 100644
--- a/tests/manual/network_stresstest/CMakeLists.txt
+++ b/tests/manual/network_stresstest/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from network_stresstest.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_network_stresstest Binary:
@@ -8,9 +9,7 @@ qt_internal_add_manual_test(tst_network_stresstest
SOURCES
minihttpserver.cpp minihttpserver.h
tst_network_stresstest.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
Qt::Test
@@ -27,7 +26,3 @@ qt_internal_add_resource(tst_network_stresstest "wwwfiles"
FILES
${wwwfiles_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:network_stresstest.pro:<TRUE>:
-# QMAKE_RESOURCE_FLAGS = "-no-compress"
diff --git a/tests/manual/network_stresstest/minihttpserver.cpp b/tests/manual/network_stresstest/minihttpserver.cpp
index c96e4df0d7..cd07f585b1 100644
--- a/tests/manual/network_stresstest/minihttpserver.cpp
+++ b/tests/manual/network_stresstest/minihttpserver.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 "minihttpserver.h"
diff --git a/tests/manual/network_stresstest/minihttpserver.h b/tests/manual/network_stresstest/minihttpserver.h
index e17f1266a4..d630e29c9a 100644
--- a/tests/manual/network_stresstest/minihttpserver.h
+++ b/tests/manual/network_stresstest/minihttpserver.h
@@ -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
#ifndef MINIHTTPSERVER_H
diff --git a/tests/manual/network_stresstest/network_stresstest.pro b/tests/manual/network_stresstest/network_stresstest.pro
index cefb064020..2644c2b18f 100644
--- a/tests/manual/network_stresstest/network_stresstest.pro
+++ b/tests/manual/network_stresstest/network_stresstest.pro
@@ -11,4 +11,3 @@ HEADERS += \
RESOURCES += wwwfiles.qrc
QMAKE_RESOURCE_FLAGS += -no-compress
LIBS += $$QMAKE_LIBS_NETWORK
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/manual/network_stresstest/tst_network_stresstest.cpp b/tests/manual/network_stresstest/tst_network_stresstest.cpp
index b86b3b884d..5796dd8e77 100644
--- a/tests/manual/network_stresstest/tst_network_stresstest.cpp
+++ b/tests/manual/network_stresstest/tst_network_stresstest.cpp
@@ -1,32 +1,8 @@
-/****************************************************************************
-**
-** 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 <QTest>
+#include <QtTest/qtesteventloop.h>
#include <QtCore/QElapsedTimer>
#include <QtCore/QList>
#include <QtCore/QSemaphore>
diff --git a/tests/manual/permissions/.gitignore b/tests/manual/permissions/.gitignore
new file mode 100644
index 0000000000..bd59d3407e
--- /dev/null
+++ b/tests/manual/permissions/.gitignore
@@ -0,0 +1 @@
+tst_qpermissions
diff --git a/tests/manual/permissions/CMakeLists.txt b/tests/manual/permissions/CMakeLists.txt
new file mode 100644
index 0000000000..f9fac7e362
--- /dev/null
+++ b/tests/manual/permissions/CMakeLists.txt
@@ -0,0 +1,61 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_test(tst_manual_qpermissions
+ SOURCES
+ tst_qpermissions.cpp
+ LIBRARIES
+ Qt::CorePrivate
+)
+
+if(ANDROID)
+ set_property(TARGET tst_manual_qpermissions
+ PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
+elseif(APPLE)
+ # Test an app bundle, but without any usage descriptions
+
+ qt_internal_add_test(tst_qpermissions_app
+ SOURCES
+ tst_qpermissions.cpp
+ DEFINES
+ tst_QPermissions=tst_QPermissionsApp
+ LIBRARIES
+ Qt::CorePrivate
+ )
+
+ set_property(TARGET tst_qpermissions_app
+ PROPERTY MACOSX_BUNDLE TRUE)
+ set_property(TARGET tst_qpermissions_app
+ PROPERTY MACOSX_BUNDLE_GUI_IDENTIFIER "io.qt.dev.tst_permissions_app")
+
+ # Test an app bundle with all the required usage descriptions
+
+ qt_internal_add_test(tst_qpermissions_app_with_usage_descriptions
+ SOURCES
+ tst_qpermissions.cpp
+ DEFINES
+ tst_QPermissions=tst_QPermissionsAppWithUsageDescriptions
+ HAVE_USAGE_DESCRIPTION=1
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ )
+
+ set_property(TARGET tst_qpermissions_app_with_usage_descriptions
+ PROPERTY MACOSX_BUNDLE TRUE)
+ set_property(TARGET tst_qpermissions_app_with_usage_descriptions
+ PROPERTY MACOSX_BUNDLE_GUI_IDENTIFIER "io.qt.dev.tst_qpermissions_app_with_usage_descriptions")
+ set_property(TARGET tst_qpermissions_app_with_usage_descriptions
+ PROPERTY MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist")
+
+ foreach(permission_plugin IN LISTS QT_ALL_PLUGINS_FOUND_BY_FIND_PACKAGE_permissions)
+ set(permission_plugin "${QT_CMAKE_EXPORT_NAMESPACE}::${permission_plugin}")
+ qt6_import_plugins(tst_qpermissions_app INCLUDE ${permission_plugin})
+ qt6_import_plugins(tst_qpermissions_app_with_usage_descriptions INCLUDE ${permission_plugin})
+ endforeach()
+
+ if(NOT CMAKE_GENERATOR STREQUAL "Xcode")
+ add_custom_command(TARGET tst_qpermissions_app_with_usage_descriptions
+ POST_BUILD COMMAND codesign -s - tst_qpermissions_app_with_usage_descriptions.app)
+ endif()
+endif()
diff --git a/tests/manual/permissions/Info.plist b/tests/manual/permissions/Info.plist
new file mode 100644
index 0000000000..dce43caf12
--- /dev/null
+++ b/tests/manual/permissions/Info.plist
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleInfoDictionaryVersion</key>
+ <string>6.0</string>
+ <key>CFBundlePackageType</key>
+ <string>APPL</string>
+
+ <key>CFBundleName</key>
+ <string>${MACOSX_BUNDLE_BUNDLE_NAME}</string>
+ <key>CFBundleIdentifier</key>
+ <string>${MACOSX_BUNDLE_GUI_IDENTIFIER}</string>
+ <key>CFBundleExecutable</key>
+ <string>${MACOSX_BUNDLE_EXECUTABLE_NAME}</string>
+
+ <key>CFBundleVersion</key>
+ <string>${MACOSX_BUNDLE_BUNDLE_VERSION}</string>
+ <key>CFBundleShortVersionString</key>
+ <string>${MACOSX_BUNDLE_SHORT_VERSION_STRING}</string>
+
+ <key>LSMinimumSystemVersion</key>
+ <string>${CMAKE_OSX_DEPLOYMENT_TARGET}</string>
+
+ <key>NSHumanReadableCopyright</key>
+ <string>${MACOSX_BUNDLE_COPYRIGHT}</string>
+
+ <key>CFBundleIconFile</key>
+ <string>${MACOSX_BUNDLE_ICON_FILE}</string>
+
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+
+ <key>NSSupportsAutomaticGraphicsSwitching</key>
+ <true/>
+
+ <key>NSBluetoothAlwaysUsageDescription</key>
+ <string>Testing BluetoothAlways</string>
+ <key>NSCalendarsUsageDescription</key>
+ <string>Testing Calendars</string>
+ <key>NSCameraUsageDescription</key>
+ <string>Testing Camera</string>
+ <key>NSContactsUsageDescription</key>
+ <string>Testing Contacts</string>
+ <key>NSHealthShareUsageDescription</key>
+ <string>Testing HealthShare</string>
+ <key>NSHealthUpdateUsageDescription</key>
+ <string>Testing HealthUpdate</string>
+ <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
+ <string>Testing LocationAlwaysAndWhenInUse</string>
+ <key>NSLocationAlwaysUsageDescription</key>
+ <string>Testing LocationAlways</string>
+ <key>NSLocationWhenInUseUsageDescription</key>
+ <string>Testing LocationWhenInUse</string>
+ <key>NSMicrophoneUsageDescription</key>
+ <string>Testing Microphone</string>
+
+</dict>
+</plist>
diff --git a/tests/manual/permissions/android/AndroidManifest.xml b/tests/manual/permissions/android/AndroidManifest.xml
new file mode 100644
index 0000000000..041c920ad1
--- /dev/null
+++ b/tests/manual/permissions/android/AndroidManifest.xml
@@ -0,0 +1,48 @@
+<?xml version="1.0"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="org.qtproject.example"
+ android:installLocation="auto"
+ android:versionCode="-- %%INSERT_VERSION_CODE%% --"
+ android:versionName="-- %%INSERT_VERSION_NAME%% --">
+ <uses-permission android:name="android.permission.CAMERA" />
+ <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+ <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+ <uses-permission android:name="android.permission.RECORD_AUDIO" />
+ <uses-permission android:name="android.permission.BLUETOOTH" />
+ <uses-permission android:name="android.permission.READ_CONTACTS" />
+ <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+ <uses-permission android:name="android.permission.READ_CALENDAR" />
+ <uses-permission android:name="android.permission.WRITE_CALENDAR" />
+ <!-- %%INSERT_PERMISSIONS -->
+ <!-- %%INSERT_FEATURES -->
+ <supports-screens
+ android:anyDensity="true"
+ android:largeScreens="true"
+ android:normalScreens="true"
+ android:smallScreens="true" />
+ <application
+ android:name="org.qtproject.qt.android.bindings.QtApplication"
+ android:hardwareAccelerated="true"
+ android:label="-- %%INSERT_APP_NAME%% --"
+ android:requestLegacyExternalStorage="true"
+ android:allowBackup="true"
+ android:fullBackupOnly="false">
+ <activity
+ android:name="org.qtproject.qt.android.bindings.QtActivity"
+ android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|layoutDirection|locale|fontScale|keyboard|keyboardHidden|navigation|mcc|mnc|density"
+ android:label="-- %%INSERT_APP_NAME%% --"
+ android:launchMode="singleTop"
+ android:screenOrientation="unspecified"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+
+ <meta-data
+ android:name="android.app.lib_name"
+ android:value="-- %%INSERT_APP_LIB_NAME%% --" />
+ </activity>
+ </application>
+</manifest>
diff --git a/tests/manual/permissions/tst_qpermissions.cpp b/tests/manual/permissions/tst_qpermissions.cpp
new file mode 100644
index 0000000000..7df2fdc2fe
--- /dev/null
+++ b/tests/manual/permissions/tst_qpermissions.cpp
@@ -0,0 +1,116 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QTest>
+
+#include <QtCore/qpermissions.h>
+#include <QtCore/qthread.h>
+#include <QtCore/qmutex.h>
+#include <QtCore/qwaitcondition.h>
+#include <QtCore/qtimer.h>
+
+#if defined(Q_OS_MACOS) && defined(QT_BUILD_INTERNAL)
+#include <private/qcore_mac_p.h>
+Q_CONSTRUCTOR_FUNCTION(qt_mac_ensureResponsible);
+#endif
+
+class tst_QPermissions : public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void initTestCase_data();
+
+ void checkPermission();
+ void checkPermissionInNonMainThread();
+
+ void requestPermission();
+ void requestPermissionInNonMainThread();
+};
+
+void tst_QPermissions::initTestCase_data()
+{
+ QTest::addColumn<QPermission>("permission");
+
+ QTest::newRow("Camera") << QPermission(QCameraPermission{});
+ QTest::newRow("Microphone") << QPermission(QMicrophonePermission{});
+ QTest::newRow("Bluetooth") << QPermission(QBluetoothPermission{});
+ QTest::newRow("Contacts") << QPermission(QContactsPermission{});
+ QTest::newRow("Calendar") << QPermission(QCalendarPermission{});
+ QTest::newRow("Location") << QPermission(QLocationPermission{});
+}
+
+void tst_QPermissions::checkPermission()
+{
+ QFETCH_GLOBAL(QPermission, permission);
+ qApp->checkPermission(permission);
+}
+
+class Thread : public QThread
+{
+public:
+ QMutex mutex;
+ QWaitCondition cond;
+ std::function<void()> function;
+
+ void run() override
+ {
+ QMutexLocker locker(&mutex);
+ function();
+ cond.wakeOne();
+ }
+};
+
+void tst_QPermissions::checkPermissionInNonMainThread()
+{
+ QFETCH_GLOBAL(QPermission, permission);
+
+ Thread thread;
+ thread.function = [=]{
+ qApp->checkPermission(permission);
+ };
+
+ QVERIFY(!thread.isFinished());
+ QMutexLocker locker(&thread.mutex);
+ thread.start();
+ QVERIFY(!thread.isFinished());
+ thread.cond.wait(locker.mutex());
+ QVERIFY(thread.wait(1000));
+ QVERIFY(thread.isFinished());
+}
+
+void tst_QPermissions::requestPermission()
+{
+ QFETCH_GLOBAL(QPermission, permission);
+ QTimer::singleShot(0, this, [=] {
+ qApp->requestPermission(permission, [=](auto result) {
+ qDebug() << result;
+ Q_ASSERT(QThread::currentThread() == thread());
+ qApp->exit();
+ });
+ });
+ qApp->exec();
+}
+
+void tst_QPermissions::requestPermissionInNonMainThread()
+{
+ QFETCH_GLOBAL(QPermission, permission);
+
+ QTest::ignoreMessage(QtWarningMsg, "Permissions can only be requested from the GUI (main) thread");
+
+ Thread thread;
+ thread.function = [&]{
+ qApp->requestPermission(permission, [&]() {});
+ };
+
+ QVERIFY(!thread.isFinished());
+ QMutexLocker locker(&thread.mutex);
+ thread.start();
+ QVERIFY(!thread.isFinished());
+ thread.cond.wait(locker.mutex());
+ QVERIFY(thread.wait(1000));
+ QVERIFY(thread.isFinished());
+}
+
+QTEST_MAIN(tst_QPermissions)
+#include "tst_qpermissions.moc"
diff --git a/tests/manual/qcursor/CMakeLists.txt b/tests/manual/qcursor/CMakeLists.txt
index 1824c0c1a4..3f6e73818e 100644
--- a/tests/manual/qcursor/CMakeLists.txt
+++ b/tests/manual/qcursor/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qcursor.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(allcursors)
add_subdirectory(childwidget)
diff --git a/tests/manual/qcursor/allcursors/CMakeLists.txt b/tests/manual/qcursor/allcursors/CMakeLists.txt
index 65e7251c6d..91b365ed6c 100644
--- a/tests/manual/qcursor/allcursors/CMakeLists.txt
+++ b/tests/manual/qcursor/allcursors/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from allcursors.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_allcursors Binary:
@@ -9,12 +10,9 @@ qt_internal_add_manual_test(tst_allcursors
SOURCES
main.cpp
mainwindow.cpp mainwindow.h mainwindow.ui
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
uic
)
-
-#### Keys ignored in scope 1:.:.:allcursors.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qcursor/allcursors/main.cpp b/tests/manual/qcursor/allcursors/main.cpp
index 5cf1c29d65..b688308b13 100644
--- a/tests/manual/qcursor/allcursors/main.cpp
+++ b/tests/manual/qcursor/allcursors/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 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 "mainwindow.h"
diff --git a/tests/manual/qcursor/allcursors/mainwindow.cpp b/tests/manual/qcursor/allcursors/mainwindow.cpp
index ecd2c4d908..917f17520f 100644
--- a/tests/manual/qcursor/allcursors/mainwindow.cpp
+++ b/tests/manual/qcursor/allcursors/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 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 "mainwindow.h"
#include "ui_mainwindow.h"
diff --git a/tests/manual/qcursor/allcursors/mainwindow.h b/tests/manual/qcursor/allcursors/mainwindow.h
index 73a023afbb..ebe81855f8 100644
--- a/tests/manual/qcursor/allcursors/mainwindow.h
+++ b/tests/manual/qcursor/allcursors/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 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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/tests/manual/qcursor/childwidget/CMakeLists.txt b/tests/manual/qcursor/childwidget/CMakeLists.txt
index ca377cb90f..3475948d8b 100644
--- a/tests/manual/qcursor/childwidget/CMakeLists.txt
+++ b/tests/manual/qcursor/childwidget/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from childwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_manual_childwidget Binary:
@@ -10,10 +11,7 @@ qt_internal_add_manual_test(tst_manual_childwidget
main.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:childwidget.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qcursor/childwidget/main.cpp b/tests/manual/qcursor/childwidget/main.cpp
index 39d52a97e8..fd2a010a01 100644
--- a/tests/manual/qcursor/childwidget/main.cpp
+++ b/tests/manual/qcursor/childwidget/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QtWidgets>
diff --git a/tests/manual/qcursor/childwindow/CMakeLists.txt b/tests/manual/qcursor/childwindow/CMakeLists.txt
index 147bd065d1..52ad23374a 100644
--- a/tests/manual/qcursor/childwindow/CMakeLists.txt
+++ b/tests/manual/qcursor/childwindow/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from childwindow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## childwindow Binary:
@@ -10,9 +11,6 @@ qt_internal_add_manual_test(childwindow
main.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
-
-#### Keys ignored in scope 1:.:.:childwindow.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qcursor/childwindow/main.cpp b/tests/manual/qcursor/childwindow/main.cpp
index c6b8faca4d..af84816463 100644
--- a/tests/manual/qcursor/childwindow/main.cpp
+++ b/tests/manual/qcursor/childwindow/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QtGui>
diff --git a/tests/manual/qcursor/childwindowcontainer/CMakeLists.txt b/tests/manual/qcursor/childwindowcontainer/CMakeLists.txt
index 0efe0cb61a..6fe9611f02 100644
--- a/tests/manual/qcursor/childwindowcontainer/CMakeLists.txt
+++ b/tests/manual/qcursor/childwindowcontainer/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from childwindowcontainer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## childwindowcontainer Binary:
@@ -10,10 +11,7 @@ qt_internal_add_manual_test(childwindowcontainer
main.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:childwindowcontainer.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qcursor/childwindowcontainer/main.cpp b/tests/manual/qcursor/childwindowcontainer/main.cpp
index e9bf927929..ae1e415545 100644
--- a/tests/manual/qcursor/childwindowcontainer/main.cpp
+++ b/tests/manual/qcursor/childwindowcontainer/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QtWidgets>
diff --git a/tests/manual/qcursor/grab_override/CMakeLists.txt b/tests/manual/qcursor/grab_override/CMakeLists.txt
index c52ed6a1dd..17f4b80ee2 100644
--- a/tests/manual/qcursor/grab_override/CMakeLists.txt
+++ b/tests/manual/qcursor/grab_override/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from grab_override.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## t_cursors Binary:
@@ -9,7 +10,7 @@ qt_internal_add_manual_test(t_cursors
SOURCES
main.cpp
mainwindow.cpp mainwindow.h mainwindow.ui
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
@@ -27,7 +28,3 @@ qt_internal_add_resource(t_cursors "images"
FILES
${images_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:grab_override.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qcursor/grab_override/main.cpp b/tests/manual/qcursor/grab_override/main.cpp
index 5cf1c29d65..b688308b13 100644
--- a/tests/manual/qcursor/grab_override/main.cpp
+++ b/tests/manual/qcursor/grab_override/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 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 "mainwindow.h"
diff --git a/tests/manual/qcursor/grab_override/mainwindow.cpp b/tests/manual/qcursor/grab_override/mainwindow.cpp
index 087ee8d1d8..4ed3dfe979 100644
--- a/tests/manual/qcursor/grab_override/mainwindow.cpp
+++ b/tests/manual/qcursor/grab_override/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 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 "mainwindow.h"
#include "ui_mainwindow.h"
diff --git a/tests/manual/qcursor/grab_override/mainwindow.h b/tests/manual/qcursor/grab_override/mainwindow.h
index 5275d80184..ded9059991 100644
--- a/tests/manual/qcursor/grab_override/mainwindow.h
+++ b/tests/manual/qcursor/grab_override/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 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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/tests/manual/qcursor/qcursorhighdpi/CMakeLists.txt b/tests/manual/qcursor/qcursorhighdpi/CMakeLists.txt
index 60f4c03c18..171377e42f 100644
--- a/tests/manual/qcursor/qcursorhighdpi/CMakeLists.txt
+++ b/tests/manual/qcursor/qcursorhighdpi/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qcursorhighdpi.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qcursorhighdpi Binary:
@@ -7,20 +8,17 @@
qt_internal_add_manual_test(qcursorhighdpi
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
)
-#### Keys ignored in scope 1:.:.:qcursorhighdpi.pro:<TRUE>:
-# TEMPLATE = "app"
-
## Scopes:
#####################################################################
qt_internal_extend_target(qcursorhighdpi CONDITION WIN32
- PUBLIC_LIBRARIES
+ LIBRARIES
user32
)
diff --git a/tests/manual/qcursor/qcursorhighdpi/main.cpp b/tests/manual/qcursor/qcursorhighdpi/main.cpp
index a81f914c90..9997e93967 100644
--- a/tests/manual/qcursor/qcursorhighdpi/main.cpp
+++ b/tests/manual/qcursor/qcursorhighdpi/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QAction>
#include <QApplication>
diff --git a/tests/manual/qdesktopservices/CMakeLists.txt b/tests/manual/qdesktopservices/CMakeLists.txt
index 3909128fd3..f81bb7c367 100644
--- a/tests/manual/qdesktopservices/CMakeLists.txt
+++ b/tests/manual/qdesktopservices/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qdesktopservices.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_manual_qdesktopservices Binary:
@@ -8,12 +9,8 @@ qt_internal_add_manual_test(tst_manual_qdesktopservices
SOURCES
tst_qdesktopservices.cpp
DEFINES
- SRCDIR=\\\"${CMAKE_CURRENT_SOURCE_DIR}/\\\"
- PUBLIC_LIBRARIES
+ SRCDIR="${CMAKE_CURRENT_SOURCE_DIR}/"
+ LIBRARIES
Qt::Gui
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qdesktopservices.pro:<TRUE>:
-# OTHER_FILES = "test.txt"
-# TEMPLATE = "app"
diff --git a/tests/manual/qdesktopservices/tst_qdesktopservices.cpp b/tests/manual/qdesktopservices/tst_qdesktopservices.cpp
index e17ca413eb..96340d5e7c 100644
--- a/tests/manual/qdesktopservices/tst_qdesktopservices.cpp
+++ b/tests/manual/qdesktopservices/tst_qdesktopservices.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QString>
#include <QTest>
diff --git a/tests/manual/qdnslookup/CMakeLists.txt b/tests/manual/qdnslookup/CMakeLists.txt
new file mode 100644
index 0000000000..646e972b30
--- /dev/null
+++ b/tests/manual/qdnslookup/CMakeLists.txt
@@ -0,0 +1,9 @@
+# Copyright (C) 2023 Intel Corporation.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(qdnslookup
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Network
+)
diff --git a/tests/manual/qdnslookup/main.cpp b/tests/manual/qdnslookup/main.cpp
new file mode 100644
index 0000000000..aa80f4df78
--- /dev/null
+++ b/tests/manual/qdnslookup/main.cpp
@@ -0,0 +1,184 @@
+// Copyright (C) 2023 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QCoreApplication>
+#include <QtCore/QDebug>
+#include <QtCore/QElapsedTimer>
+#include <QtCore/QMetaEnum>
+#include <QtCore/QTimer>
+#include <QtCore/QUrl>
+#include <QtNetwork/QHostAddress>
+#include <QtNetwork/QHostInfo>
+#include <QtNetwork/QDnsLookup>
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <chrono>
+
+using namespace Qt::StringLiterals;
+using namespace std::chrono;
+using namespace std::chrono_literals;
+
+static QDnsLookup::Type typeFromString(QString str)
+{
+ // we can use the meta object
+ QMetaEnum me = QMetaEnum::fromType<QDnsLookup::Type>();
+
+ bool ok;
+ int value = me.keyToValue(str.toUpper().toLatin1(), &ok);
+ if (!ok)
+ return QDnsLookup::Type(0);
+ return QDnsLookup::Type(value);
+}
+
+static int showHelp(const char *argv0, int exitcode)
+{
+ // like dig
+ printf("%s [@global-server] [domain] [query-type]\n", argv0);
+ return exitcode;
+}
+
+static auto parseServerAddress(QString server)
+{
+ struct R {
+ QHostAddress address;
+ int port = -1;
+ } r;
+
+ // let's use QUrl to help us
+ QUrl url;
+ url.setAuthority(server);
+ if (!url.isValid() || !url.userInfo().isNull())
+ return r; // failed
+
+ r.port = url.port();
+ r.address.setAddress(url.host());
+ return r;
+}
+
+static void printAnswers(const QDnsLookup &lookup)
+{
+ printf("\n;; ANSWER:\n");
+ static auto printRecordCommon = [](const auto &rr, const char *rrtype) {
+ printf("%-23s %6d IN %s\t", qPrintable(rr.name()), rr.timeToLive(), rrtype);
+ };
+ auto printNameRecords = [](const char *rrtype, const QList<QDnsDomainNameRecord> list) {
+ for (const QDnsDomainNameRecord &rr : list) {
+ printRecordCommon(rr, rrtype);
+ printf("%s\n", qPrintable(rr.value()));
+ }
+ };
+
+ for (const QDnsMailExchangeRecord &rr : lookup.mailExchangeRecords()) {
+ printRecordCommon(rr, "MX");
+ printf("%d %s\n", rr.preference(), qPrintable(rr.exchange()));
+ }
+ for (const QDnsServiceRecord &rr : lookup.serviceRecords()) {
+ printRecordCommon(rr, "SRV");
+ printf("%d %d %d %s\n", rr.priority(), rr.weight(), rr.port(),
+ qPrintable(rr.target()));
+ }
+ printNameRecords("NS", lookup.nameServerRecords());
+ printNameRecords("PTR", lookup.pointerRecords());
+ printNameRecords("CNAME", lookup.canonicalNameRecords());
+
+ for (const QDnsHostAddressRecord &rr : lookup.hostAddressRecords()) {
+ QHostAddress addr = rr.value();
+ printRecordCommon(rr, addr.protocol() == QHostAddress::IPv6Protocol ? "AAAA" : "A");
+ printf("%s\n", qPrintable(addr.toString()));
+ }
+
+ for (const QDnsTextRecord &rr : lookup.textRecords()) {
+ printRecordCommon(rr, "TXT");
+ for (const QByteArray &data : rr.values())
+ printf("%s ", qPrintable(QDebug::toString(data)));
+ puts("");
+ }
+}
+
+static void printResults(const QDnsLookup &lookup, QElapsedTimer::Duration duration)
+{
+ if (QDnsLookup::Error error = lookup.error())
+ printf(";; status: %s (%s)\n", QMetaEnum::fromType<QDnsLookup::Error>().valueToKey(error),
+ qPrintable(lookup.errorString()));
+ else
+ printf(";; status: NoError\n");
+
+ QMetaEnum me = QMetaEnum::fromType<QDnsLookup::Type>();
+ printf(";; QUESTION:\n");
+ printf(";%-30s IN %s\n", qPrintable(lookup.name()),
+ me.valueToKey(lookup.type()));
+
+ if (lookup.error() == QDnsLookup::NoError)
+ printAnswers(lookup);
+
+ printf("\n;; Query time: %lld ms\n", qint64(duration_cast<milliseconds>(duration).count()));
+ if (QHostAddress server = lookup.nameserver(); !server.isNull())
+ printf(";; SERVER: %s#%d\n", qPrintable(server.toString()), lookup.nameserverPort());
+}
+
+int main(int argc, char *argv[])
+{
+ QCoreApplication a(argc, argv);
+
+ QDnsLookup::Type type = {};
+ QString domain, server;
+ const QStringList args = QCoreApplication::arguments().sliced(1);
+ for (const QString &arg : args) {
+ if (arg.startsWith(u'@')) {
+ server = arg.mid(1);
+ continue;
+ }
+ if (arg == u"-h")
+ return showHelp(argv[0], EXIT_SUCCESS);
+ if (domain.isNull()) {
+ domain = arg;
+ continue;
+ }
+ if (type != QDnsLookup::Type{})
+ return showHelp(argv[0], EXIT_FAILURE);
+
+ type = typeFromString(arg);
+ if (type == QDnsLookup::Type{}) {
+ fprintf(stderr, "%s: unknown DNS record type '%s'. Valid types are:\n",
+ argv[0], qPrintable(arg));
+ QMetaEnum me = QMetaEnum::fromType<QDnsLookup::Type>();
+ for (int i = 0; i < me.keyCount(); ++i)
+ fprintf(stderr, " %s\n", me.key(i));
+ return EXIT_FAILURE;
+ }
+ }
+
+ if (domain.isEmpty())
+ domain = u"qt-project.org"_s;
+ if (type == QDnsLookup::Type{})
+ type = QDnsLookup::A;
+
+ QDnsLookup lookup(type, domain);
+ if (!server.isEmpty()) {
+ auto addr = parseServerAddress(server);
+ if (addr.address.isNull()) {
+ fprintf(stderr, "%s: could not parse name server address '%s'\n",
+ argv[0], qPrintable(server));
+ return EXIT_FAILURE;
+ }
+ lookup.setNameserver(addr.address);
+ if (addr.port > 0)
+ lookup.setNameserverPort(addr.port);
+ }
+
+ // execute the lookup
+ QObject::connect(&lookup, &QDnsLookup::finished, qApp, &QCoreApplication::quit);
+ QTimer::singleShot(15s, []() { qApp->exit(EXIT_FAILURE); });
+
+ QElapsedTimer timer;
+ timer.start();
+ lookup.lookup();
+ if (a.exec() == EXIT_FAILURE)
+ return EXIT_FAILURE;
+ printf("; <<>> QDnsLookup " QT_VERSION_STR " <<>> %s %s\n",
+ qPrintable(QCoreApplication::applicationName()), qPrintable(args.join(u' ')));
+ printResults(lookup, timer.durationElapsed());
+ return 0;
+}
diff --git a/tests/manual/qglyphruns/CMakeLists.txt b/tests/manual/qglyphruns/CMakeLists.txt
new file mode 100644
index 0000000000..4af9c3e241
--- /dev/null
+++ b/tests/manual/qglyphruns/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(qglyphrun
+ GUI
+ SOURCES
+ main.cpp
+ controller.h controller.cpp controller.ui
+ view.h view.cpp
+ glyphruninspector.h glyphruninspector.cpp
+ singleglyphrun.h singleglyphrun.cpp singleglyphrun.ui
+ LIBRARIES
+ Qt::Gui
+ Qt::Widgets
+ ENABLE_AUTOGEN_TOOLS
+ uic
+)
diff --git a/tests/manual/qglyphruns/controller.cpp b/tests/manual/qglyphruns/controller.cpp
new file mode 100644
index 0000000000..0037d11b5b
--- /dev/null
+++ b/tests/manual/qglyphruns/controller.cpp
@@ -0,0 +1,57 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "controller.h"
+#include "ui_controller.h"
+
+Controller::Controller(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::Controller)
+{
+ ui->setupUi(this);
+
+ connect(ui->cbWrap, &QCheckBox::toggled, this, &Controller::updateViews);
+ connect(ui->gbRange, &QGroupBox::toggled, this, &Controller::updateViews);
+ connect(ui->teSourceString, &QPlainTextEdit::textChanged, this, &Controller::updateViews);
+ connect(ui->hsLineWidth, &QSlider::valueChanged, this, &Controller::updateViews);
+ connect(ui->inspector, &GlyphRunInspector::updateBounds, ui->view, &View::setVisualizedBounds);
+ connect(ui->sbFrom, &QSpinBox::valueChanged, this, &Controller::updateViews);
+ connect(ui->sbTo, &QSpinBox::valueChanged, this, &Controller::updateViews);
+ connect(ui->teSourceString, &QPlainTextEdit::selectionChanged, this, &Controller::updateRange);
+ connect(ui->fcbFont, &QFontComboBox::currentFontChanged, this, &Controller::updateViews);
+}
+
+Controller::~Controller()
+{
+ delete ui;
+}
+
+void Controller::updateRange()
+{
+ if (ui->gbRange->isChecked()) {
+ QTextCursor cursor = ui->teSourceString->textCursor();
+ if (cursor.hasSelection()) {
+ ui->sbFrom->setValue(cursor.selectionStart());
+ ui->sbTo->setValue(cursor.selectionEnd() - 1);
+
+ updateViews();
+ }
+ }
+}
+
+void Controller::updateViews()
+{
+ QString s = ui->teSourceString->toPlainText();
+ ui->sbFrom->setMaximum(s.length());
+ ui->sbTo->setMaximum(s.length());
+
+ s.replace('\n', QChar::LineSeparator);
+ ui->view->updateLayout(s,
+ qreal(ui->hsLineWidth->value()) * ui->hsLineWidth->width() / 100.0f,
+ ui->cbWrap ? QTextOption::WrapAtWordBoundaryOrAnywhere : QTextOption::ManualWrap,
+ ui->fcbFont->currentFont());
+
+ int start = ui->gbRange->isChecked() ? ui->sbFrom->value() : -1;
+ int length = ui->gbRange->isChecked() ? ui->sbTo->value() - start + 1 : -1;
+ ui->inspector->updateLayout(ui->view->layout(), start, length);
+}
diff --git a/tests/manual/qglyphruns/controller.h b/tests/manual/qglyphruns/controller.h
new file mode 100644
index 0000000000..75289165f8
--- /dev/null
+++ b/tests/manual/qglyphruns/controller.h
@@ -0,0 +1,29 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef CONTROLLER_H
+#define CONTROLLER_H
+
+#include <QWidget>
+
+namespace Ui {
+class Controller;
+}
+
+class Controller : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit Controller(QWidget *parent = nullptr);
+ ~Controller();
+
+private slots:
+ void updateViews();
+ void updateRange();
+
+private:
+ Ui::Controller *ui;
+};
+
+#endif // CONTROLLER_H
diff --git a/tests/manual/qglyphruns/controller.ui b/tests/manual/qglyphruns/controller.ui
new file mode 100644
index 0000000000..903135a281
--- /dev/null
+++ b/tests/manual/qglyphruns/controller.ui
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Controller</class>
+ <widget class="QWidget" name="Controller">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>549</width>
+ <height>419</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>Source string:</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPlainTextEdit" name="teSourceString"/>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_4">
+ <item>
+ <widget class="QCheckBox" name="cbWrap">
+ <property name="text">
+ <string>Wrap</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QFontComboBox" name="fcbFont"/>
+ </item>
+ </layout>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="gbRange">
+ <property name="title">
+ <string>Range</string>
+ </property>
+ <property name="checkable">
+ <bool>true</bool>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout_3">
+ <item>
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>From</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="sbFrom"/>
+ </item>
+ <item>
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>To</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QSpinBox" name="sbTo"/>
+ </item>
+ <item>
+ <spacer name="horizontalSpacer_2">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Display</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="1" column="0">
+ <widget class="View" name="view" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QSlider" name="hsLineWidth">
+ <property name="minimum">
+ <number>1</number>
+ </property>
+ <property name="maximum">
+ <number>100</number>
+ </property>
+ <property name="value">
+ <number>100</number>
+ </property>
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="GlyphRunInspector" name="inspector" native="true">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
+ <item>
+ <spacer name="horizontalSpacer">
+ <property name="orientation">
+ <enum>Qt::Horizontal</enum>
+ </property>
+ <property name="sizeHint" stdset="0">
+ <size>
+ <width>40</width>
+ <height>20</height>
+ </size>
+ </property>
+ </spacer>
+ </item>
+ <item>
+ <widget class="QPushButton" name="pbQuit">
+ <property name="text">
+ <string>Quit</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>View</class>
+ <extends>QWidget</extends>
+ <header>view.h</header>
+ <container>1</container>
+ </customwidget>
+ <customwidget>
+ <class>GlyphRunInspector</class>
+ <extends>QWidget</extends>
+ <header>glyphruninspector.h</header>
+ <container>1</container>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections>
+ <connection>
+ <sender>pbQuit</sender>
+ <signal>clicked()</signal>
+ <receiver>Controller</receiver>
+ <slot>close()</slot>
+ <hints>
+ <hint type="sourcelabel">
+ <x>517</x>
+ <y>398</y>
+ </hint>
+ <hint type="destinationlabel">
+ <x>35</x>
+ <y>-16</y>
+ </hint>
+ </hints>
+ </connection>
+ </connections>
+</ui>
diff --git a/tests/manual/qglyphruns/glyphruninspector.cpp b/tests/manual/qglyphruns/glyphruninspector.cpp
new file mode 100644
index 0000000000..0e35a1f94b
--- /dev/null
+++ b/tests/manual/qglyphruns/glyphruninspector.cpp
@@ -0,0 +1,48 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "glyphruninspector.h"
+#include "singleglyphrun.h"
+
+#include <QTextLayout>
+#include <QtWidgets>
+
+GlyphRunInspector::GlyphRunInspector(QWidget *parent)
+ : QWidget{parent}
+{
+ QHBoxLayout *layout = new QHBoxLayout(this);
+
+ m_tabWidget = new QTabWidget;
+ layout->addWidget(m_tabWidget);
+
+ connect(m_tabWidget,
+ &QTabWidget::currentChanged,
+ this,
+ &GlyphRunInspector::updateVisualizationForTab);
+}
+
+void GlyphRunInspector::updateVisualizationForTab()
+{
+ int currentTab = m_tabWidget->currentIndex();
+ SingleGlyphRun *gr = currentTab >= 0 && currentTab < m_content.size() ? m_content.at(currentTab) : nullptr;
+ if (gr != nullptr)
+ emit updateBounds(gr->bounds());
+}
+
+void GlyphRunInspector::updateLayout(QTextLayout *layout, int start, int length)
+{
+ QList<QGlyphRun> glyphRuns = layout->glyphRuns(start, length, QTextLayout::RetrieveAll);
+
+ m_tabWidget->clear();
+ qDeleteAll(m_content);
+ m_content.clear();
+ for (int i = 0; i < glyphRuns.size(); ++i) {
+ SingleGlyphRun *w = new SingleGlyphRun(m_tabWidget);
+ w->updateGlyphRun(glyphRuns.at(i));
+
+ m_tabWidget->addTab(w, QStringLiteral("%1").arg(glyphRuns.at(i).rawFont().familyName()));
+ m_content.append(w);
+ }
+
+ updateVisualizationForTab();
+}
diff --git a/tests/manual/qglyphruns/glyphruninspector.h b/tests/manual/qglyphruns/glyphruninspector.h
new file mode 100644
index 0000000000..d2aa6033db
--- /dev/null
+++ b/tests/manual/qglyphruns/glyphruninspector.h
@@ -0,0 +1,31 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef GLYPHRUNINSPECTOR_H
+#define GLYPHRUNINSPECTOR_H
+
+#include <QWidget>
+
+class QTextLayout;
+class QTabWidget;
+class SingleGlyphRun;
+class GlyphRunInspector : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit GlyphRunInspector(QWidget *parent = nullptr);
+
+ void updateLayout(QTextLayout *layout, int start, int length);
+
+private slots:
+ void updateVisualizationForTab();
+
+signals:
+ void updateBounds(const QRegion &region);
+
+private:
+ QTabWidget *m_tabWidget;
+ QList<SingleGlyphRun *> m_content;
+};
+
+#endif // GLYPHRUNINSPECTOR_H
diff --git a/tests/manual/qglyphruns/main.cpp b/tests/manual/qglyphruns/main.cpp
new file mode 100644
index 0000000000..0f192e051f
--- /dev/null
+++ b/tests/manual/qglyphruns/main.cpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "controller.h"
+
+#include <QtWidgets>
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ Controller controller;
+ controller.showMaximized();
+
+ return app.exec();
+}
+
+#include "main.moc"
diff --git a/tests/manual/qglyphruns/singleglyphrun.cpp b/tests/manual/qglyphruns/singleglyphrun.cpp
new file mode 100644
index 0000000000..9a5bd3e139
--- /dev/null
+++ b/tests/manual/qglyphruns/singleglyphrun.cpp
@@ -0,0 +1,73 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "singleglyphrun.h"
+#include "ui_singleglyphrun.h"
+
+SingleGlyphRun::SingleGlyphRun(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::SingleGlyphRun)
+{
+ ui->setupUi(this);
+}
+
+SingleGlyphRun::~SingleGlyphRun()
+{
+ delete ui;
+}
+
+void SingleGlyphRun::updateGlyphRun(const QGlyphRun &glyphRun)
+{
+ m_bounds = QRegion();
+
+ QList<quint32> glyphIndexes = glyphRun.glyphIndexes();
+ QList<qsizetype> stringIndexes = glyphRun.stringIndexes();
+ QList<QPointF> glyphPositions = glyphRun.positions();
+
+ ui->twGlyphRun->clearContents();
+ ui->twGlyphRun->setRowCount(glyphIndexes.size());
+
+ for (int i = 0; i < glyphIndexes.size(); ++i) {
+ {
+ QTableWidgetItem *glyphIndex = new QTableWidgetItem(QString::number(glyphIndexes.at(i)));
+ ui->twGlyphRun->setItem(i, 0, glyphIndex);
+ }
+
+ {
+ QPointF position = glyphPositions.at(i);
+ QTableWidgetItem *glyphPosition = new QTableWidgetItem(QStringLiteral("(%1, %2)")
+ .arg(position.x())
+ .arg(position.y()));
+ ui->twGlyphRun->setItem(i, 1, glyphPosition);
+ }
+
+ {
+ QTableWidgetItem *stringIndex = new QTableWidgetItem(QString::number(stringIndexes.at(i)));
+ ui->twGlyphRun->setItem(i, 2, stringIndex);
+ }
+
+ QChar c = glyphRun.sourceString().at(stringIndexes.at(i));
+
+ {
+ QTableWidgetItem *unicode = new QTableWidgetItem(QString::number(c.unicode(), 16));
+ ui->twGlyphRun->setItem(i, 3, unicode);
+ }
+
+ {
+ QTableWidgetItem *character = new QTableWidgetItem(c);
+ ui->twGlyphRun->setItem(i, 4, character);
+ }
+
+ {
+ QImage image = glyphRun.rawFont().alphaMapForGlyph(glyphIndexes.at(i));
+
+ QTableWidgetItem *glyphImage = new QTableWidgetItem(QIcon(QPixmap::fromImage(image)), QString{});
+ ui->twGlyphRun->setItem(i, 5, glyphImage);
+ }
+
+ QRectF brect = glyphRun.rawFont().boundingRect(glyphIndexes.at(i));
+ brect.adjust(glyphPositions.at(i).x(), glyphPositions.at(i).y(),
+ glyphPositions.at(i).x(), glyphPositions.at(i).y());
+ m_bounds += brect.toAlignedRect();
+ }
+}
diff --git a/tests/manual/qglyphruns/singleglyphrun.h b/tests/manual/qglyphruns/singleglyphrun.h
new file mode 100644
index 0000000000..138d820ad4
--- /dev/null
+++ b/tests/manual/qglyphruns/singleglyphrun.h
@@ -0,0 +1,30 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef SINGLEGLYPHRUN_H
+#define SINGLEGLYPHRUN_H
+
+#include <QWidget>
+#include <QGlyphRun>
+
+namespace Ui {
+class SingleGlyphRun;
+}
+
+class SingleGlyphRun : public QWidget
+{
+ Q_OBJECT
+
+public:
+ explicit SingleGlyphRun(QWidget *parent = nullptr);
+ ~SingleGlyphRun();
+
+ void updateGlyphRun(const QGlyphRun &glyphRun);
+ QRegion bounds() const { return m_bounds; }
+
+private:
+ Ui::SingleGlyphRun *ui;
+ QRegion m_bounds;
+};
+
+#endif // SINGLEGLYPHRUN_H
diff --git a/tests/manual/qglyphruns/singleglyphrun.ui b/tests/manual/qglyphruns/singleglyphrun.ui
new file mode 100644
index 0000000000..e2c8860de0
--- /dev/null
+++ b/tests/manual/qglyphruns/singleglyphrun.ui
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>SingleGlyphRun</class>
+ <widget class="QWidget" name="SingleGlyphRun">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>599</width>
+ <height>300</height>
+ </rect>
+ </property>
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Expanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="windowTitle">
+ <string>Form</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QTableWidget" name="twGlyphRun">
+ <column>
+ <property name="text">
+ <string>Glyph index</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Glyph position</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>String index</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Unicode</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Character</string>
+ </property>
+ </column>
+ <column>
+ <property name="text">
+ <string>Font glyph</string>
+ </property>
+ </column>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/qglyphruns/view.cpp b/tests/manual/qglyphruns/view.cpp
new file mode 100644
index 0000000000..0e7d6dd478
--- /dev/null
+++ b/tests/manual/qglyphruns/view.cpp
@@ -0,0 +1,70 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "view.h"
+#include <QTextLayout>
+#include <QPainter>
+
+View::View(QWidget *parent)
+ : QWidget{parent}
+{
+ setSizePolicy(QSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Maximum));
+}
+
+View::~View()
+{
+ delete m_layout;
+}
+
+void View::updateLayout(const QString &sourceString,
+ float width,
+ QTextOption::WrapMode mode,
+ const QFont &font)
+{
+ if (m_layout == nullptr)
+ m_layout = new QTextLayout;
+
+ m_layout->setText(sourceString);
+ QTextOption option;
+ option.setWrapMode(mode);
+ m_layout->setTextOption(option);
+ m_layout->setFont(font);
+ m_layout->beginLayout();
+ float y = 0.0f;
+ forever {
+ QTextLine line = m_layout->createLine();
+ if (!line.isValid())
+ break;
+
+ line.setLineWidth(width);
+ line.setPosition(QPointF(0, y));
+ y += line.height();
+ }
+ m_layout->endLayout();
+
+ update();
+ updateGeometry();
+}
+
+QSize View::sizeHint() const
+{
+ if (m_layout != nullptr)
+ return m_layout->boundingRect().size().toSize();
+ else
+ return QSize(100, 100);
+}
+
+void View::paintEvent(QPaintEvent *)
+{
+ QPainter p(this);
+ if (m_layout != nullptr)
+ m_layout->draw(&p, QPointF(0, 0));
+ if (!m_bounds.isEmpty()) {
+ p.setPen(Qt::NoPen);
+ p.setBrush(Qt::yellow);
+ p.setOpacity(0.25);
+ for (const QRect &r : m_bounds) {
+ p.drawRect(r);
+ }
+ }
+}
diff --git a/tests/manual/qglyphruns/view.h b/tests/manual/qglyphruns/view.h
new file mode 100644
index 0000000000..a8c3c1aed9
--- /dev/null
+++ b/tests/manual/qglyphruns/view.h
@@ -0,0 +1,42 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef VIEW_H
+#define VIEW_H
+
+#include <QWidget>
+#include <QTextOption>
+
+class QTextLayout;
+class View : public QWidget
+{
+ Q_OBJECT
+public:
+ explicit View(QWidget *parent = nullptr);
+ ~View() override;
+
+ void updateLayout(const QString &sourceString,
+ float width,
+ QTextOption::WrapMode mode,
+ const QFont &font);
+
+ QSize sizeHint() const override;
+
+ QTextLayout *layout() const { return m_layout; }
+
+public slots:
+ void setVisualizedBounds(const QRegion &region)
+ {
+ m_bounds = region;
+ update();
+ }
+
+protected:
+ void paintEvent(QPaintEvent *e) override;
+
+private:
+ QTextLayout *m_layout = nullptr;
+ QRegion m_bounds;
+};
+
+#endif // VIEW_H
diff --git a/tests/manual/qgraphicsitem/CMakeLists.txt b/tests/manual/qgraphicsitem/CMakeLists.txt
index 85303d3674..c6a8cd23d2 100644
--- a/tests/manual/qgraphicsitem/CMakeLists.txt
+++ b/tests/manual/qgraphicsitem/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qgraphicsitem.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qgraphicsitem Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(qgraphicsitem
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/qgraphicsitem/main.cpp b/tests/manual/qgraphicsitem/main.cpp
index d32c3c6dec..9a852f4fab 100644
--- a/tests/manual/qgraphicsitem/main.cpp
+++ b/tests/manual/qgraphicsitem/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 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 <QGraphicsView>
diff --git a/tests/manual/qgraphicsitemgroup/CMakeLists.txt b/tests/manual/qgraphicsitemgroup/CMakeLists.txt
index 737bcd5851..d6a158fac5 100644
--- a/tests/manual/qgraphicsitemgroup/CMakeLists.txt
+++ b/tests/manual/qgraphicsitemgroup/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qgraphicsitemgroup.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qgraphicsitemgroup Binary:
@@ -10,12 +11,11 @@ qt_internal_add_manual_test(qgraphicsitemgroup
customitem.cpp customitem.h
main.cpp
widget.cpp widget.h widget.ui
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ widget.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::Gui
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
uic
)
-
-#### Keys ignored in scope 1:.:.:qgraphicsitemgroup.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qgraphicsitemgroup/customitem.cpp b/tests/manual/qgraphicsitemgroup/customitem.cpp
index 81ecd3d76b..5df16291ad 100644
--- a/tests/manual/qgraphicsitemgroup/customitem.cpp
+++ b/tests/manual/qgraphicsitemgroup/customitem.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 "customitem.h"
@@ -34,10 +9,10 @@
QList<CustomGroup*> CustomScene::selectedCustomGroups() const
{
- QList<QGraphicsItem*> all = selectedItems();
+ const QList<QGraphicsItem*> all = selectedItems();
QList<CustomGroup*> groups;
- foreach (QGraphicsItem *item, all) {
+ for (QGraphicsItem *item : all) {
CustomGroup* group = qgraphicsitem_cast<CustomGroup*>(item);
if (group)
groups.append(group);
@@ -48,10 +23,10 @@ QList<CustomGroup*> CustomScene::selectedCustomGroups() const
QList<CustomItem*> CustomScene::selectedCustomItems() const
{
- QList<QGraphicsItem*> all = selectedItems();
+ const QList<QGraphicsItem*> all = selectedItems();
QList<CustomItem*> items;
- foreach (QGraphicsItem *item, all) {
+ for (QGraphicsItem *item : all) {
CustomItem* citem = qgraphicsitem_cast<CustomItem*>(item);
if (citem)
items.append(citem);
diff --git a/tests/manual/qgraphicsitemgroup/customitem.h b/tests/manual/qgraphicsitemgroup/customitem.h
index 84a3b265fc..78f195629d 100644
--- a/tests/manual/qgraphicsitemgroup/customitem.h
+++ b/tests/manual/qgraphicsitemgroup/customitem.h
@@ -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
#ifndef CUSTOMITEM_H
#define CUSTOMITEM_H
diff --git a/tests/manual/qgraphicsitemgroup/main.cpp b/tests/manual/qgraphicsitemgroup/main.cpp
index 0150369ecb..d586e84d20 100644
--- a/tests/manual/qgraphicsitemgroup/main.cpp
+++ b/tests/manual/qgraphicsitemgroup/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 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 "widget.h"
diff --git a/tests/manual/qgraphicsitemgroup/widget.cpp b/tests/manual/qgraphicsitemgroup/widget.cpp
index ba9ed815fa..25362d52a4 100644
--- a/tests/manual/qgraphicsitemgroup/widget.cpp
+++ b/tests/manual/qgraphicsitemgroup/widget.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "widget.h"
#include "ui_widget.h"
@@ -120,15 +97,15 @@ void Widget::on_scaleItem_valueChanged(int value)
void Widget::on_group_clicked()
{
- QList<QGraphicsItem*> all = scene->selectedItems();
+ const QList<QGraphicsItem*> all = scene->selectedItems();
if (all.size() < 2)
return;
- QList<CustomItem*> items = scene->selectedCustomItems();
+ const QList<CustomItem*> items = scene->selectedCustomItems();
QList<CustomGroup*> groups = scene->selectedCustomGroups();
if (groups.size() == 1) {
- foreach (CustomItem *item, items) {
+ for (CustomItem *item : items) {
item->setSelected(false);
groups[0]->addToGroup(item);
}
@@ -138,7 +115,7 @@ void Widget::on_group_clicked()
CustomGroup* group = new CustomGroup;
scene->addItem(group);
- foreach (QGraphicsItem *item, all) {
+ for (QGraphicsItem *item : all) {
item->setSelected(false);
group->addToGroup(item);
}
@@ -149,9 +126,9 @@ void Widget::on_group_clicked()
void Widget::on_dismantle_clicked()
{
- QList<CustomGroup*> groups = scene->selectedCustomGroups();
+ const QList<CustomGroup*> groups = scene->selectedCustomGroups();
- foreach (CustomGroup *group, groups) {
+ for (CustomGroup *group : groups) {
foreach (QGraphicsItem *item, group->childItems())
group->removeFromGroup(item);
diff --git a/tests/manual/qgraphicsitemgroup/widget.h b/tests/manual/qgraphicsitemgroup/widget.h
index d778adb068..51b2943282 100644
--- a/tests/manual/qgraphicsitemgroup/widget.h
+++ b/tests/manual/qgraphicsitemgroup/widget.h
@@ -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
#ifndef WIDGET_H
#define WIDGET_H
diff --git a/tests/manual/qgraphicslayout/anchorlayout/CMakeLists.txt b/tests/manual/qgraphicslayout/anchorlayout/CMakeLists.txt
new file mode 100644
index 0000000000..13331a74a8
--- /dev/null
+++ b/tests/manual/qgraphicslayout/anchorlayout/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## anchorlayout Binary:
+#####################################################################
+cmake_minimum_required(VERSION 3.16)
+
+qt_internal_add_manual_test(anchorlayout
+ GUI
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::Widgets
+)
+
diff --git a/tests/manual/qgraphicslayout/anchorlayout/anchorlayout.pro b/tests/manual/qgraphicslayout/anchorlayout/anchorlayout.pro
new file mode 100644
index 0000000000..1afba2747c
--- /dev/null
+++ b/tests/manual/qgraphicslayout/anchorlayout/anchorlayout.pro
@@ -0,0 +1,9 @@
+TARGET = anchorlayout
+
+QT += widgets
+
+SOURCES = main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/graphicsview/anchorlayout
+INSTALLS += target
diff --git a/tests/manual/qgraphicslayout/anchorlayout/main.cpp b/tests/manual/qgraphicslayout/anchorlayout/main.cpp
new file mode 100644
index 0000000000..93f712753b
--- /dev/null
+++ b/tests/manual/qgraphicslayout/anchorlayout/main.cpp
@@ -0,0 +1,89 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtWidgets>
+
+static QGraphicsProxyWidget *createItem(const QSizeF &minimum = QSizeF(100.0, 100.0),
+ const QSizeF &preferred = QSize(150.0, 100.0),
+ const QSizeF &maximum = QSizeF(200.0, 100.0),
+ const QString &name = "0")
+{
+ QGraphicsProxyWidget *w = new QGraphicsProxyWidget;
+ w->setWidget(new QPushButton(name));
+ w->setData(0, name);
+ w->setMinimumSize(minimum);
+ w->setPreferredSize(preferred);
+ w->setMaximumSize(maximum);
+
+ w->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+ return w;
+}
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ QGraphicsScene scene;
+ scene.setSceneRect(0, 0, 800, 480);
+
+ QSizeF minSize(30, 100);
+ QSizeF prefSize(210, 100);
+ QSizeF maxSize(300, 100);
+
+ QGraphicsProxyWidget *a = createItem(minSize, prefSize, maxSize, "A");
+ QGraphicsProxyWidget *b = createItem(minSize, prefSize, maxSize, "B");
+ QGraphicsProxyWidget *c = createItem(minSize, prefSize, maxSize, "C");
+ QGraphicsProxyWidget *d = createItem(minSize, prefSize, maxSize, "D");
+ QGraphicsProxyWidget *e = createItem(minSize, prefSize, maxSize, "E");
+ QGraphicsProxyWidget *f = createItem(QSizeF(30, 50), QSizeF(150, 50), maxSize, "F (overflow)");
+ QGraphicsProxyWidget *g = createItem(QSizeF(30, 50), QSizeF(30, 100), maxSize, "G (overflow)");
+
+ QGraphicsAnchorLayout *l = new QGraphicsAnchorLayout;
+ l->setSpacing(0);
+
+ QGraphicsWidget *w = new QGraphicsWidget(nullptr, Qt::Window);
+ w->setPos(20, 20);
+ w->setLayout(l);
+
+ // vertical
+ l->addAnchor(a, Qt::AnchorTop, l, Qt::AnchorTop);
+ l->addAnchor(b, Qt::AnchorTop, l, Qt::AnchorTop);
+
+ l->addAnchor(c, Qt::AnchorTop, a, Qt::AnchorBottom);
+ l->addAnchor(c, Qt::AnchorTop, b, Qt::AnchorBottom);
+ l->addAnchor(c, Qt::AnchorBottom, d, Qt::AnchorTop);
+ l->addAnchor(c, Qt::AnchorBottom, e, Qt::AnchorTop);
+
+ l->addAnchor(d, Qt::AnchorBottom, l, Qt::AnchorBottom);
+ l->addAnchor(e, Qt::AnchorBottom, l, Qt::AnchorBottom);
+
+ l->addAnchor(c, Qt::AnchorTop, f, Qt::AnchorTop);
+ l->addAnchor(c, Qt::AnchorVerticalCenter, f, Qt::AnchorBottom);
+ l->addAnchor(f, Qt::AnchorBottom, g, Qt::AnchorTop);
+ l->addAnchor(c, Qt::AnchorBottom, g, Qt::AnchorBottom);
+
+ // horizontal
+ l->addAnchor(l, Qt::AnchorLeft, a, Qt::AnchorLeft);
+ l->addAnchor(l, Qt::AnchorLeft, d, Qt::AnchorLeft);
+ l->addAnchor(a, Qt::AnchorRight, b, Qt::AnchorLeft);
+
+ l->addAnchor(a, Qt::AnchorRight, c, Qt::AnchorLeft);
+ l->addAnchor(c, Qt::AnchorRight, e, Qt::AnchorLeft);
+
+ l->addAnchor(b, Qt::AnchorRight, l, Qt::AnchorRight);
+ l->addAnchor(e, Qt::AnchorRight, l, Qt::AnchorRight);
+ l->addAnchor(d, Qt::AnchorRight, e, Qt::AnchorLeft);
+
+ l->addAnchor(l, Qt::AnchorLeft, f, Qt::AnchorLeft);
+ l->addAnchor(l, Qt::AnchorLeft, g, Qt::AnchorLeft);
+ l->addAnchor(f, Qt::AnchorRight, g, Qt::AnchorRight);
+
+
+ scene.addItem(w);
+ scene.setBackgroundBrush(Qt::darkGreen);
+ QGraphicsView view(&scene);
+
+ view.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/qgraphicslayout/flicker/CMakeLists.txt b/tests/manual/qgraphicslayout/flicker/CMakeLists.txt
index 73130ed9c7..f49cfa5015 100644
--- a/tests/manual/qgraphicslayout/flicker/CMakeLists.txt
+++ b/tests/manual/qgraphicslayout/flicker/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from flicker.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## flicker Binary:
@@ -9,7 +10,7 @@ qt_internal_add_manual_test(flicker
SOURCES
main.cpp
window.cpp window.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/qgraphicslayout/flicker/main.cpp b/tests/manual/qgraphicslayout/flicker/main.cpp
index 9e6d98e1dd..f7a227a401 100644
--- a/tests/manual/qgraphicslayout/flicker/main.cpp
+++ b/tests/manual/qgraphicslayout/flicker/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 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 <QMainWindow>
#include <QApplication>
diff --git a/tests/manual/qgraphicslayout/flicker/window.cpp b/tests/manual/qgraphicslayout/flicker/window.cpp
index f5f4131ab7..a30c1e0cf6 100644
--- a/tests/manual/qgraphicslayout/flicker/window.cpp
+++ b/tests/manual/qgraphicslayout/flicker/window.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 "window.h"
diff --git a/tests/manual/qgraphicslayout/flicker/window.h b/tests/manual/qgraphicslayout/flicker/window.h
index 3901eaa157..d54c69050f 100644
--- a/tests/manual/qgraphicslayout/flicker/window.h
+++ b/tests/manual/qgraphicslayout/flicker/window.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef WINDOW_H
#define WINDOW_H
diff --git a/tests/manual/qgraphicslayout/weatheranchorlayout/CMakeLists.txt b/tests/manual/qgraphicslayout/weatheranchorlayout/CMakeLists.txt
new file mode 100644
index 0000000000..9f9f3f56f9
--- /dev/null
+++ b/tests/manual/qgraphicslayout/weatheranchorlayout/CMakeLists.txt
@@ -0,0 +1,34 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## weatheranchorlayout Binary:
+#####################################################################
+cmake_minimum_required(VERSION 3.16)
+
+qt_internal_add_manual_test(weatheranchorlayout
+ GUI
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::Widgets
+)
+
+# Resources:
+set(weatheranchorlayout_resource_files
+ "images/5days.jpg"
+ "images/details.jpg"
+ "images/place.jpg"
+ "images/tabbar.jpg"
+ "images/title.jpg"
+ "images/weather-few-clouds.png"
+)
+
+qt_add_resources(weatheranchorlayout "weatheranchorlayout"
+ PREFIX
+ "/"
+ FILES
+ ${weatheranchorlayout_resource_files}
+)
+
diff --git a/tests/manual/qgraphicslayout/weatheranchorlayout/images/5days.jpg b/tests/manual/qgraphicslayout/weatheranchorlayout/images/5days.jpg
new file mode 100644
index 0000000000..fd92ba8ba7
--- /dev/null
+++ b/tests/manual/qgraphicslayout/weatheranchorlayout/images/5days.jpg
Binary files differ
diff --git a/tests/manual/qgraphicslayout/weatheranchorlayout/images/details.jpg b/tests/manual/qgraphicslayout/weatheranchorlayout/images/details.jpg
new file mode 100644
index 0000000000..fde0448c69
--- /dev/null
+++ b/tests/manual/qgraphicslayout/weatheranchorlayout/images/details.jpg
Binary files differ
diff --git a/tests/manual/qgraphicslayout/weatheranchorlayout/images/place.jpg b/tests/manual/qgraphicslayout/weatheranchorlayout/images/place.jpg
new file mode 100644
index 0000000000..03e5344330
--- /dev/null
+++ b/tests/manual/qgraphicslayout/weatheranchorlayout/images/place.jpg
Binary files differ
diff --git a/tests/manual/qgraphicslayout/weatheranchorlayout/images/tabbar.jpg b/tests/manual/qgraphicslayout/weatheranchorlayout/images/tabbar.jpg
new file mode 100644
index 0000000000..7777662901
--- /dev/null
+++ b/tests/manual/qgraphicslayout/weatheranchorlayout/images/tabbar.jpg
Binary files differ
diff --git a/tests/manual/qgraphicslayout/weatheranchorlayout/images/title.jpg b/tests/manual/qgraphicslayout/weatheranchorlayout/images/title.jpg
new file mode 100644
index 0000000000..fa84c8156c
--- /dev/null
+++ b/tests/manual/qgraphicslayout/weatheranchorlayout/images/title.jpg
Binary files differ
diff --git a/tests/manual/qgraphicslayout/weatheranchorlayout/images/weather-few-clouds.png b/tests/manual/qgraphicslayout/weatheranchorlayout/images/weather-few-clouds.png
new file mode 100644
index 0000000000..eea6ce6529
--- /dev/null
+++ b/tests/manual/qgraphicslayout/weatheranchorlayout/images/weather-few-clouds.png
Binary files differ
diff --git a/tests/manual/qgraphicslayout/weatheranchorlayout/main.cpp b/tests/manual/qgraphicslayout/weatheranchorlayout/main.cpp
new file mode 100644
index 0000000000..bdf7c00942
--- /dev/null
+++ b/tests/manual/qgraphicslayout/weatheranchorlayout/main.cpp
@@ -0,0 +1,239 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QApplication>
+#include <QLabel>
+#include <QGraphicsAnchorLayout>
+#include <QGraphicsProxyWidget>
+#include <QGraphicsScene>
+#include <QGraphicsSceneResizeEvent>
+#include <QGraphicsView>
+#include <QGraphicsWidget>
+#include <QPainter>
+#include <QPushButton>
+
+
+class GraphicsView : public QGraphicsView
+{
+public:
+ GraphicsView(QGraphicsScene *scene, QGraphicsWidget *widget)
+ : QGraphicsView(scene), w(widget)
+ {
+ }
+
+ void resizeEvent(QResizeEvent *event) override
+ {
+ w->setGeometry(0, 0, event->size().width(), event->size().height());
+ }
+
+ QGraphicsWidget *w;
+};
+
+class PixmapWidget : public QGraphicsLayoutItem
+{
+public:
+ PixmapWidget(const QPixmap &pix)
+ : QGraphicsLayoutItem(), original(new QGraphicsPixmapItem(pix))
+ , r(QRectF(QPointF(0, 0), pix.size()))
+ {
+ setGraphicsItem(original);
+ original->show();
+ }
+
+ ~PixmapWidget()
+ {
+ setGraphicsItem(nullptr);
+ delete original;
+ }
+
+ void setZValue(qreal z)
+ {
+ original->setZValue(z);
+ }
+
+ void setGeometry(const QRectF &rect) override
+ {
+ original->setTransform(QTransform::fromScale(rect.width() / r.width(),
+ rect.height() / r.height()), true);
+ original->setPos(rect.x(), rect.y());
+ r = rect;
+ }
+
+protected:
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const override
+ {
+ Q_UNUSED(constraint);
+ QSizeF sh;
+ switch (which) {
+ case Qt::MinimumSize:
+ sh = QSizeF(0, 0);
+ break;
+ case Qt::PreferredSize:
+ sh = QSizeF(50, 50);
+ break;
+ case Qt::MaximumSize:
+ sh = QSizeF(QWIDGETSIZE_MAX, QWIDGETSIZE_MAX);
+ break;
+ default:
+ break;
+ }
+ return sh;
+ }
+
+private:
+ QGraphicsPixmapItem *original;
+ QRectF r;
+};
+
+
+class PlaceWidget : public QGraphicsWidget
+{
+ Q_OBJECT
+
+public:
+ PlaceWidget(const QPixmap &pix)
+ : QGraphicsWidget()
+ , original(pix)
+ , scaled(pix)
+ {
+ }
+
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *) override
+ {
+ const QPointF reflection(0, scaled.height() + 2);
+
+ painter->drawPixmap(QPointF(), scaled);
+
+ QPixmap tmp(scaled.size());
+ tmp.fill(Qt::transparent);
+ QPainter p(&tmp);
+
+ // create gradient
+ QPoint p1(scaled.width() / 2, 0);
+ QPoint p2(scaled.width() / 2, scaled.height());
+ QLinearGradient linearGrad(p1, p2);
+ linearGrad.setColorAt(0, QColor(0, 0, 0, 0));
+ linearGrad.setColorAt(0.65, QColor(0, 0, 0, 127));
+ linearGrad.setColorAt(1, QColor(0, 0, 0, 255));
+
+ // apply 'mask'
+ p.setBrush(linearGrad);
+ p.fillRect(0, 0, tmp.width(), tmp.height(), QBrush(linearGrad));
+ p.fillRect(0, 0, tmp.width(), tmp.height(), QBrush(linearGrad));
+
+ // paint the image flipped
+ p.setCompositionMode(QPainter::CompositionMode_DestinationOver);
+ p.drawPixmap(0, 0, QPixmap::fromImage(scaled.toImage().mirrored(false, true)));
+ p.end();
+
+ painter->drawPixmap(reflection, tmp);
+ }
+
+ void resizeEvent(QGraphicsSceneResizeEvent *event) override
+ {
+ QSize newSize = event->newSize().toSize();
+ newSize.setHeight(newSize.height() / 2);
+ scaled = original.scaled(newSize);
+ }
+
+ QRectF boundingRect() const override
+ {
+ QSize size(scaled.width(), scaled.height() * 2 + 2);
+ return QRectF(QPointF(0, 0), size);
+ }
+
+private:
+ QPixmap original;
+ QPixmap scaled;
+};
+
+
+int main(int argc, char *argv[])
+{
+ Q_INIT_RESOURCE(weatheranchorlayout);
+
+ QApplication app(argc, argv);
+
+ QGraphicsScene scene;
+ scene.setSceneRect(0, 0, 800, 480);
+
+ // pixmaps widgets
+ PixmapWidget *title = new PixmapWidget(QPixmap(":/images/title.jpg"));
+ PlaceWidget *place = new PlaceWidget(QPixmap(":/images/place.jpg"));
+ PixmapWidget *details = new PixmapWidget(QPixmap(":/images/5days.jpg"));
+ PixmapWidget *sunnyWeather = new PixmapWidget(QPixmap(":/images/weather-few-clouds.png"));
+ PixmapWidget *tabbar = new PixmapWidget(QPixmap(":/images/tabbar.jpg"));
+
+
+ // setup sizes
+ title->setPreferredSize(QSizeF(348, 45));
+ title->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ place->setPreferredSize(QSizeF(96, 72));
+ place->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ details->setMinimumSize(QSizeF(200, 112));
+ details->setPreferredSize(QSizeF(200, 112));
+ details->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ tabbar->setPreferredSize(QSizeF(70, 24));
+ tabbar->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+
+ sunnyWeather->setPreferredSize(QSizeF(128, 97));
+ sunnyWeather->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
+ sunnyWeather->setZValue(9999);
+
+ // start anchor layout
+ QGraphicsAnchorLayout *layout = new QGraphicsAnchorLayout;
+ layout->setSpacing(0);
+
+ // setup the main widget
+ QGraphicsWidget *widget = new QGraphicsWidget(nullptr, Qt::Window);
+ QPalette p;
+ p.setColor(QPalette::Window, Qt::black);
+ widget->setPalette(p);
+ widget->setPos(20, 20);
+ widget->setLayout(layout);
+
+ // vertical anchors
+ QGraphicsAnchor *anchor = layout->addAnchor(title, Qt::AnchorTop, layout, Qt::AnchorTop);
+ anchor = layout->addAnchor(place, Qt::AnchorTop, title, Qt::AnchorBottom);
+ anchor->setSpacing(12);
+ anchor = layout->addAnchor(place, Qt::AnchorBottom, layout, Qt::AnchorBottom);
+ anchor->setSpacing(12);
+
+ anchor = layout->addAnchor(sunnyWeather, Qt::AnchorTop, title, Qt::AnchorTop);
+ anchor = layout->addAnchor(sunnyWeather, Qt::AnchorBottom, layout, Qt::AnchorVerticalCenter);
+
+ anchor = layout->addAnchor(tabbar, Qt::AnchorTop, title, Qt::AnchorBottom);
+ anchor->setSpacing(5);
+ anchor = layout->addAnchor(details, Qt::AnchorTop, tabbar, Qt::AnchorBottom);
+ anchor->setSpacing(2);
+ anchor = layout->addAnchor(details, Qt::AnchorBottom, layout, Qt::AnchorBottom);
+ anchor->setSpacing(12);
+
+ // horizontal anchors
+ anchor = layout->addAnchor(layout, Qt::AnchorLeft, title, Qt::AnchorLeft);
+ anchor = layout->addAnchor(title, Qt::AnchorRight, layout, Qt::AnchorRight);
+
+ anchor = layout->addAnchor(place, Qt::AnchorLeft, layout, Qt::AnchorLeft);
+ anchor->setSpacing(15);
+ anchor = layout->addAnchor(place, Qt::AnchorRight, details, Qt::AnchorLeft);
+ anchor->setSpacing(35);
+
+ anchor = layout->addAnchor(sunnyWeather, Qt::AnchorLeft, place, Qt::AnchorHorizontalCenter);
+ anchor = layout->addAnchor(sunnyWeather, Qt::AnchorRight, layout, Qt::AnchorHorizontalCenter);
+
+ anchor = layout->addAnchor(tabbar, Qt::AnchorHorizontalCenter, details, Qt::AnchorHorizontalCenter);
+ anchor = layout->addAnchor(details, Qt::AnchorRight, layout, Qt::AnchorRight);
+
+ // QGV setup
+ scene.addItem(widget);
+ scene.setBackgroundBrush(Qt::white);
+ QGraphicsView *view = new QGraphicsView(&scene);
+ view->show();
+
+ return app.exec();
+}
+
+#include "main.moc"
diff --git a/tests/manual/qgraphicslayout/weatheranchorlayout/weatheranchorlayout.pro b/tests/manual/qgraphicslayout/weatheranchorlayout/weatheranchorlayout.pro
new file mode 100644
index 0000000000..db1c453cb4
--- /dev/null
+++ b/tests/manual/qgraphicslayout/weatheranchorlayout/weatheranchorlayout.pro
@@ -0,0 +1,8 @@
+QT += widgets
+
+SOURCES += main.cpp
+RESOURCES += weatheranchorlayout.qrc
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/graphicsview/weatheranchorlayout
+INSTALLS += target
diff --git a/tests/manual/qgraphicslayout/weatheranchorlayout/weatheranchorlayout.qrc b/tests/manual/qgraphicslayout/weatheranchorlayout/weatheranchorlayout.qrc
new file mode 100644
index 0000000000..e39f8c0423
--- /dev/null
+++ b/tests/manual/qgraphicslayout/weatheranchorlayout/weatheranchorlayout.qrc
@@ -0,0 +1,10 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file>images/5days.jpg</file>
+ <file>images/title.jpg</file>
+ <file>images/place.jpg</file>
+ <file>images/tabbar.jpg</file>
+ <file>images/details.jpg</file>
+ <file>images/weather-few-clouds.png</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/qhttpnetworkconnection/CMakeLists.txt b/tests/manual/qhttpnetworkconnection/CMakeLists.txt
index 1606869d21..b58187f970 100644
--- a/tests/manual/qhttpnetworkconnection/CMakeLists.txt
+++ b/tests/manual/qhttpnetworkconnection/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qhttpnetworkconnection.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_manual_qhttpnetworkconnection Binary:
@@ -7,10 +8,7 @@
qt_internal_add_manual_test(tst_manual_qhttpnetworkconnection
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qhttpnetworkconnection.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qhttpnetworkconnection/main.cpp b/tests/manual/qhttpnetworkconnection/main.cpp
index c4c87598c7..9be3b32fa2 100644
--- a/tests/manual/qhttpnetworkconnection/main.cpp
+++ b/tests/manual/qhttpnetworkconnection/main.cpp
@@ -1,35 +1,11 @@
-/****************************************************************************
-**
-** 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
// This file contains benchmarks for QNetworkReply functions.
#include <QDebug>
#include <qtest.h>
#include <QTest>
+#include <QtTest/qtesteventloop.h>
#include <QtNetwork/qnetworkreply.h>
#include <QtNetwork/qnetworkrequest.h>
#include <QtNetwork/qnetworkaccessmanager.h>
diff --git a/tests/manual/qimagereader/CMakeLists.txt b/tests/manual/qimagereader/CMakeLists.txt
index 00cceab584..abfd7c6697 100644
--- a/tests/manual/qimagereader/CMakeLists.txt
+++ b/tests/manual/qimagereader/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qimagereader.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qimagereader Binary:
@@ -8,7 +9,16 @@ qt_internal_add_manual_test(qimagereader
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
+set(qimagereader_resource_files
+ "Qt_logostrap_CMYK.jpg"
+)
+qt_add_resources(qimagereader "qimagereader"
+ PREFIX
+ "/"
+ FILES
+ ${qimagereader_resource_files}
+)
diff --git a/tests/manual/qimagereader/main.cpp b/tests/manual/qimagereader/main.cpp
index cf86162022..c4ea74b6d2 100644
--- a/tests/manual/qimagereader/main.cpp
+++ b/tests/manual/qimagereader/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 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 <QWidget>
#include <QHBoxLayout>
@@ -42,7 +17,7 @@ public:
}
- virtual void paintEvent(QPaintEvent * /*event*/)
+ void paintEvent(QPaintEvent * /*event*/) override
{
QPainter painter(this);
QImageReader reader(fileName);
@@ -79,8 +54,8 @@ int main(int argc, char** argv)
mainWidget.setWindowTitle("Colors in images are identical?");
mainWidget.setMinimumSize(400,400);
QHBoxLayout *l = new QHBoxLayout;
- MyWidget *w1 = new MyWidget(&mainWidget,"Qt_logostrap_CMYK.jpg", false);
- MyWidget *w2 = new MyWidget(&mainWidget,"Qt_logostrap_CMYK.jpg", true);
+ MyWidget *w1 = new MyWidget(&mainWidget,":/Qt_logostrap_CMYK.jpg", false);
+ MyWidget *w2 = new MyWidget(&mainWidget,":/Qt_logostrap_CMYK.jpg", true);
l->addWidget(w1);
l->addWidget(w2);
mainWidget.setLayout(l);
diff --git a/tests/manual/qimagereader/qimagereader.pro b/tests/manual/qimagereader/qimagereader.pro
index 3523257f3e..9a5ad4de13 100644
--- a/tests/manual/qimagereader/qimagereader.pro
+++ b/tests/manual/qimagereader/qimagereader.pro
@@ -1,2 +1,3 @@
QT += widgets
SOURCES += main.cpp
+RESOURCES += qimagereader.qrc
diff --git a/tests/manual/qimagereader/qimagereader.qrc b/tests/manual/qimagereader/qimagereader.qrc
new file mode 100644
index 0000000000..30a11fd17d
--- /dev/null
+++ b/tests/manual/qimagereader/qimagereader.qrc
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/" >
+ <file>Qt_logostrap_CMYK.jpg</file>
+ </qresource>
+</RCC>
diff --git a/tests/manual/qlayout/CMakeLists.txt b/tests/manual/qlayout/CMakeLists.txt
index 746a6392ce..925cf5175e 100644
--- a/tests/manual/qlayout/CMakeLists.txt
+++ b/tests/manual/qlayout/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qlayout.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qlayout Binary:
@@ -12,10 +13,7 @@ qt_internal_add_manual_test(qlayout
main.cpp
mainwindow.cpp mainwindow.h
vbwidget.cpp vbwidget.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qlayout.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qlayout/gridwidget.cpp b/tests/manual/qlayout/gridwidget.cpp
index f19b3eac6f..1dda49654c 100644
--- a/tests/manual/qlayout/gridwidget.cpp
+++ b/tests/manual/qlayout/gridwidget.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 "gridwidget.h"
#include <QGridLayout>
diff --git a/tests/manual/qlayout/gridwidget.h b/tests/manual/qlayout/gridwidget.h
index 2d1800d64d..3a957c9fa5 100644
--- a/tests/manual/qlayout/gridwidget.h
+++ b/tests/manual/qlayout/gridwidget.h
@@ -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
#ifndef GRIDWIDGET_H
#define GRIDWIDGET_H
diff --git a/tests/manual/qlayout/hbwidget.cpp b/tests/manual/qlayout/hbwidget.cpp
index 80219d01fd..a3bcffc315 100644
--- a/tests/manual/qlayout/hbwidget.cpp
+++ b/tests/manual/qlayout/hbwidget.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 "hbwidget.h"
#include <QHBoxLayout>
diff --git a/tests/manual/qlayout/hbwidget.h b/tests/manual/qlayout/hbwidget.h
index 4f106a9ce3..61ee916a85 100644
--- a/tests/manual/qlayout/hbwidget.h
+++ b/tests/manual/qlayout/hbwidget.h
@@ -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
#ifndef HBWIDGET_H
#define HBWIDGET_H
diff --git a/tests/manual/qlayout/main.cpp b/tests/manual/qlayout/main.cpp
index c218120aa0..9bcf883e36 100644
--- a/tests/manual/qlayout/main.cpp
+++ b/tests/manual/qlayout/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 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 "mainwindow.h"
diff --git a/tests/manual/qlayout/mainwindow.cpp b/tests/manual/qlayout/mainwindow.cpp
index 4f7ffdfdad..24a3d6bb27 100644
--- a/tests/manual/qlayout/mainwindow.cpp
+++ b/tests/manual/qlayout/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 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 "mainwindow.h"
#include "hbwidget.h"
diff --git a/tests/manual/qlayout/mainwindow.h b/tests/manual/qlayout/mainwindow.h
index 1f19047b74..efcf2259a8 100644
--- a/tests/manual/qlayout/mainwindow.h
+++ b/tests/manual/qlayout/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 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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/tests/manual/qlayout/vbwidget.cpp b/tests/manual/qlayout/vbwidget.cpp
index 97f240f9a0..c99f533d64 100644
--- a/tests/manual/qlayout/vbwidget.cpp
+++ b/tests/manual/qlayout/vbwidget.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 "vbwidget.h"
#include <QVBoxLayout>
diff --git a/tests/manual/qlayout/vbwidget.h b/tests/manual/qlayout/vbwidget.h
index b5f2073faf..9292852307 100644
--- a/tests/manual/qlayout/vbwidget.h
+++ b/tests/manual/qlayout/vbwidget.h
@@ -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
#ifndef VBWIDGET_H
#define VBWIDGET_H
diff --git a/tests/manual/qlocale/CMakeLists.txt b/tests/manual/qlocale/CMakeLists.txt
index a41d3fb33a..e749565129 100644
--- a/tests/manual/qlocale/CMakeLists.txt
+++ b/tests/manual/qlocale/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qlocale.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qlocale Binary:
@@ -16,7 +17,9 @@ qt_internal_add_manual_test(qlocale
miscellaneous.cpp miscellaneous.h
numberformats.cpp numberformats.h
window.cpp window.h
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ languages.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/qlocale/calendar.cpp b/tests/manual/qlocale/calendar.cpp
index f127c81656..c79e4ae02c 100644
--- a/tests/manual/qlocale/calendar.cpp
+++ b/tests/manual/qlocale/calendar.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "calendar.h"
diff --git a/tests/manual/qlocale/calendar.h b/tests/manual/qlocale/calendar.h
index 6a72a4e2d2..a8b35a5989 100644
--- a/tests/manual/qlocale/calendar.h
+++ b/tests/manual/qlocale/calendar.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef CALENDAR_H
#define CALENDAR_H
diff --git a/tests/manual/qlocale/currency.cpp b/tests/manual/qlocale/currency.cpp
index 7ea435d9bb..8e0d126f84 100644
--- a/tests/manual/qlocale/currency.cpp
+++ b/tests/manual/qlocale/currency.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "currency.h"
#include <QLineEdit>
diff --git a/tests/manual/qlocale/currency.h b/tests/manual/qlocale/currency.h
index 6a53667cd9..a528e406ee 100644
--- a/tests/manual/qlocale/currency.h
+++ b/tests/manual/qlocale/currency.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef CURRENCY_H
#define CURRENCY_H
diff --git a/tests/manual/qlocale/dateformats.cpp b/tests/manual/qlocale/dateformats.cpp
index 3cac1d2479..c47a96c8e5 100644
--- a/tests/manual/qlocale/dateformats.cpp
+++ b/tests/manual/qlocale/dateformats.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "dateformats.h"
diff --git a/tests/manual/qlocale/dateformats.h b/tests/manual/qlocale/dateformats.h
index f82333b3d5..ddfc5d8548 100644
--- a/tests/manual/qlocale/dateformats.h
+++ b/tests/manual/qlocale/dateformats.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef DATEFORMATS_H
#define DATEFORMATS_H
diff --git a/tests/manual/qlocale/info.cpp b/tests/manual/qlocale/info.cpp
index 3f23403350..86de7e5b69 100644
--- a/tests/manual/qlocale/info.cpp
+++ b/tests/manual/qlocale/info.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "info.h"
diff --git a/tests/manual/qlocale/info.h b/tests/manual/qlocale/info.h
index a477afdb55..820a2435ad 100644
--- a/tests/manual/qlocale/info.h
+++ b/tests/manual/qlocale/info.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef INFO_H
#define INFO_H
diff --git a/tests/manual/qlocale/languages.cpp b/tests/manual/qlocale/languages.cpp
index e3bd8a68f2..f5085fcd3e 100644
--- a/tests/manual/qlocale/languages.cpp
+++ b/tests/manual/qlocale/languages.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "languages.h"
diff --git a/tests/manual/qlocale/languages.h b/tests/manual/qlocale/languages.h
index e0b9420a56..b1fc997156 100644
--- a/tests/manual/qlocale/languages.h
+++ b/tests/manual/qlocale/languages.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef LANGUAGES_H
#define LANGUAGES_H
diff --git a/tests/manual/qlocale/main.cpp b/tests/manual/qlocale/main.cpp
index 19fe8604bb..6a108e7757 100644
--- a/tests/manual/qlocale/main.cpp
+++ b/tests/manual/qlocale/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QApplication>
diff --git a/tests/manual/qlocale/miscellaneous.cpp b/tests/manual/qlocale/miscellaneous.cpp
index 636378b70c..6eb33972bf 100644
--- a/tests/manual/qlocale/miscellaneous.cpp
+++ b/tests/manual/qlocale/miscellaneous.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "miscellaneous.h"
diff --git a/tests/manual/qlocale/miscellaneous.h b/tests/manual/qlocale/miscellaneous.h
index bffffe8399..a1a5c810ac 100644
--- a/tests/manual/qlocale/miscellaneous.h
+++ b/tests/manual/qlocale/miscellaneous.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef MISCELLANEOUS_H
#define MISCELLANEOUS_H
diff --git a/tests/manual/qlocale/numberformats.cpp b/tests/manual/qlocale/numberformats.cpp
index 6f09b3dc7a..8545b8c6fc 100644
--- a/tests/manual/qlocale/numberformats.cpp
+++ b/tests/manual/qlocale/numberformats.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "numberformats.h"
diff --git a/tests/manual/qlocale/numberformats.h b/tests/manual/qlocale/numberformats.h
index e822ea9240..7bb44f46e5 100644
--- a/tests/manual/qlocale/numberformats.h
+++ b/tests/manual/qlocale/numberformats.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef NUMBERFORMATS_H
#define NUMBERFORMATS_H
diff --git a/tests/manual/qlocale/window.cpp b/tests/manual/qlocale/window.cpp
index b222fcbfd8..48fdec5f4d 100644
--- a/tests/manual/qlocale/window.cpp
+++ b/tests/manual/qlocale/window.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "window.h"
@@ -41,8 +16,8 @@ Window::Window()
localeCombo->addItem("System", QLocale::system());
- QList<QLocale> locales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyTerritory);
- foreach (const QLocale &locale, locales) {
+ const QList<QLocale> locales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyTerritory);
+ for (const QLocale &locale : locales) {
QString label = QLocale::languageToString(locale.language());
label += QLatin1Char('/');
if (locale.script() != QLocale::AnyScript) {
diff --git a/tests/manual/qlocale/window.h b/tests/manual/qlocale/window.h
index b45545d477..c12651348a 100644
--- a/tests/manual/qlocale/window.h
+++ b/tests/manual/qlocale/window.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef WINDOW_H
#define WINDOW_H
diff --git a/tests/manual/qmetatype/CMakeLists.txt b/tests/manual/qmetatype/CMakeLists.txt
index 76e565a0ac..e3448a528d 100644
--- a/tests/manual/qmetatype/CMakeLists.txt
+++ b/tests/manual/qmetatype/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qmetatype.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qmetatype_expect_fail Test:
diff --git a/tests/manual/qmetatype/declare_metatype_noninline.cpp b/tests/manual/qmetatype/declare_metatype_noninline.cpp
index f6466c5e06..dcb34e75ac 100644
--- a/tests/manual/qmetatype/declare_metatype_noninline.cpp
+++ b/tests/manual/qmetatype/declare_metatype_noninline.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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 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) 2012 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
#include "declare_metatype_noninline.h"
diff --git a/tests/manual/qmetatype/declare_metatype_noninline.h b/tests/manual/qmetatype/declare_metatype_noninline.h
index 5dfe1782c3..8b2e34744c 100644
--- a/tests/manual/qmetatype/declare_metatype_noninline.h
+++ b/tests/manual/qmetatype/declare_metatype_noninline.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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 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) 2012 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
#ifndef DECLARE_METATYPE_NONINLINE_H
#define DECLARE_METATYPE_NONINLINE_H
diff --git a/tests/manual/qmetatype/tst_qmetatype.cpp b/tests/manual/qmetatype/tst_qmetatype.cpp
index 98baf11aaf..21c139200c 100644
--- a/tests/manual/qmetatype/tst_qmetatype.cpp
+++ b/tests/manual/qmetatype/tst_qmetatype.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 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 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) 2012 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
#include <QtCore>
diff --git a/tests/manual/qmimedatabase/CMakeLists.txt b/tests/manual/qmimedatabase/CMakeLists.txt
index b308eeac67..d8e94f61c8 100644
--- a/tests/manual/qmimedatabase/CMakeLists.txt
+++ b/tests/manual/qmimedatabase/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qmimedatabase.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qmimedatabase Binary:
@@ -8,6 +9,3 @@ qt_internal_add_manual_test(qmimedatabase
SOURCES
main.cpp
)
-
-#### Keys ignored in scope 1:.:.:qmimedatabase.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qmimedatabase/main.cpp b/tests/manual/qmimedatabase/main.cpp
index 7db21ce92d..a28a64a2e7 100644
--- a/tests/manual/qmimedatabase/main.cpp
+++ b/tests/manual/qmimedatabase/main.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QtCore/QMimeDatabase>
#include <QtCore/QMimeType>
diff --git a/tests/manual/qnetconmonitor/CMakeLists.txt b/tests/manual/qnetconmonitor/CMakeLists.txt
index cddb59b3da..0aa095f276 100644
--- a/tests/manual/qnetconmonitor/CMakeLists.txt
+++ b/tests/manual/qnetconmonitor/CMakeLists.txt
@@ -1,22 +1,18 @@
-# Generated from qnetconmonitor.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qnetconmonitor Binary:
#####################################################################
-# special case begin
if (NOT QT_FEATURE_private_tests)
return()
endif()
-# special case end
qt_internal_add_manual_test(qnetconmonitor
SOURCES
tst_qnetconmonitor.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::NetworkPrivate
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qnetconmonitor.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qnetconmonitor/tst_qnetconmonitor.cpp b/tests/manual/qnetconmonitor/tst_qnetconmonitor.cpp
index 1909b684e9..a052932dd2 100644
--- a/tests/manual/qnetconmonitor/tst_qnetconmonitor.cpp
+++ b/tests/manual/qnetconmonitor/tst_qnetconmonitor.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/qcoreapplication.h>
#include <QtCore/qdeadlinetimer.h>
@@ -105,7 +80,7 @@ void testDetectRouteDisrupted()
QTextStream writer(stdout);
{
- if (!QNetworkInformation::load()) {
+ if (!QNetworkInformation::loadDefaultBackend()) {
writer << "Error: Failed to start";
return;
}
diff --git a/tests/manual/qnetworkaccessmanager/qget/CMakeLists.txt b/tests/manual/qnetworkaccessmanager/qget/CMakeLists.txt
index 1de539cbb0..e870ab2b62 100644
--- a/tests/manual/qnetworkaccessmanager/qget/CMakeLists.txt
+++ b/tests/manual/qnetworkaccessmanager/qget/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qget Binary:
@@ -9,9 +10,9 @@ qt_internal_add_manual_test(qget
downloadmanager.cpp
qget.cpp qget.h
transferitem.cpp
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ downloadmanager.cpp # undef QT_NO_FOREACH
+ qget.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::Network
)
-
-#### Keys ignored in scope 1:.:.:qget.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qnetworkaccessmanager/qget/downloadmanager.cpp b/tests/manual/qnetworkaccessmanager/qget/downloadmanager.cpp
index 4154188770..b9ad330e1e 100644
--- a/tests/manual/qnetworkaccessmanager/qget/downloadmanager.cpp
+++ b/tests/manual/qnetworkaccessmanager/qget/downloadmanager.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "qget.h"
#include <QAuthenticator>
diff --git a/tests/manual/qnetworkaccessmanager/qget/qget.cpp b/tests/manual/qnetworkaccessmanager/qget/qget.cpp
index 14415ee890..9577275b5b 100644
--- a/tests/manual/qnetworkaccessmanager/qget/qget.cpp
+++ b/tests/manual/qnetworkaccessmanager/qget/qget.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "qget.h"
diff --git a/tests/manual/qnetworkaccessmanager/qget/qget.h b/tests/manual/qnetworkaccessmanager/qget/qget.h
index 75e9161c1c..20c1b97db4 100644
--- a/tests/manual/qnetworkaccessmanager/qget/qget.h
+++ b/tests/manual/qnetworkaccessmanager/qget/qget.h
@@ -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
#ifndef QGET_H
#define QGET_H
diff --git a/tests/manual/qnetworkaccessmanager/qget/transferitem.cpp b/tests/manual/qnetworkaccessmanager/qget/transferitem.cpp
index 267a64ba14..fc06b3d5b0 100644
--- a/tests/manual/qnetworkaccessmanager/qget/transferitem.cpp
+++ b/tests/manual/qnetworkaccessmanager/qget/transferitem.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 "qget.h"
#include <QDebug>
diff --git a/tests/manual/qnetworkinformation/CMakeLists.txt b/tests/manual/qnetworkinformation/CMakeLists.txt
index 0c0bdbb627..3456c350a2 100644
--- a/tests/manual/qnetworkinformation/CMakeLists.txt
+++ b/tests/manual/qnetworkinformation/CMakeLists.txt
@@ -1,8 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
qt_internal_add_manual_test(qnetworkinformation
SOURCES
tst_qnetworkinformation.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
@@ -10,7 +12,7 @@ qt_internal_add_manual_test(qnetworkinformation
qt_internal_extend_target(qnetworkinformation CONDITION ANDROID OR UIKIT
SOURCES
mainwindow.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
DEFINES
MOBILE)
diff --git a/tests/manual/qnetworkinformation/mainwindow.h b/tests/manual/qnetworkinformation/mainwindow.h
index eaaeece358..822511a5f9 100644
--- a/tests/manual/qnetworkinformation/mainwindow.h
+++ b/tests/manual/qnetworkinformation/mainwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/tests/manual/qnetworkinformation/tst_qnetworkinformation.cpp b/tests/manual/qnetworkinformation/tst_qnetworkinformation.cpp
index 32cb84fcf2..5b7d55c7ce 100644
--- a/tests/manual/qnetworkinformation/tst_qnetworkinformation.cpp
+++ b/tests/manual/qnetworkinformation/tst_qnetworkinformation.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifdef MOBILE
# include "mainwindow.h"
@@ -47,7 +22,7 @@ int main(int argc, char **argv)
#endif
// Use the platform-default:
- if (!QNetworkInformation::load()) {
+ if (!QNetworkInformation::loadDefaultBackend()) {
qWarning("Failed to load any backend");
qDebug() << "Backends available:" << QNetworkInformation::availableBackends().join(", ");
return -1;
diff --git a/tests/manual/qnetworkreply/CMakeLists.txt b/tests/manual/qnetworkreply/CMakeLists.txt
index 6fc330b6a4..2cea067a78 100644
--- a/tests/manual/qnetworkreply/CMakeLists.txt
+++ b/tests/manual/qnetworkreply/CMakeLists.txt
@@ -1,24 +1,20 @@
-# Generated from qnetworkreply.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_manual_qnetworkreply Binary:
#####################################################################
-# special case begin
if (NOT QT_FEATURE_private_tests)
return()
endif()
-# special case end
qt_internal_add_manual_test(tst_manual_qnetworkreply
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
Qt::NetworkPrivate
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:qnetworkreply.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qnetworkreply/main.cpp b/tests/manual/qnetworkreply/main.cpp
index 8b013bd2ce..aece9e1045 100644
--- a/tests/manual/qnetworkreply/main.cpp
+++ b/tests/manual/qnetworkreply/main.cpp
@@ -1,31 +1,6 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
-** 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.
+// Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// This file contains benchmarks for QNetworkReply functions.
#include <QDebug>
diff --git a/tests/manual/qopenglcontext/CMakeLists.txt b/tests/manual/qopenglcontext/CMakeLists.txt
index fe9d332ca8..1a77aa3a35 100644
--- a/tests/manual/qopenglcontext/CMakeLists.txt
+++ b/tests/manual/qopenglcontext/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qopenglcontext.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qopenglcontext Binary:
@@ -9,12 +10,9 @@ qt_internal_add_manual_test(qopenglcontext
SOURCES
main.cpp
qopenglcontextwindow.cpp qopenglcontextwindow.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::EglSupportPrivate
Qt::Gui
Qt::GuiPrivate
Qt::OpenGL
)
-
-#### Keys ignored in scope 1:.:.:qopenglcontext.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qopenglcontext/main.cpp b/tests/manual/qopenglcontext/main.cpp
index 73931c24af..dee1321576 100644
--- a/tests/manual/qopenglcontext/main.cpp
+++ b/tests/manual/qopenglcontext/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 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 <QtGui/QGuiApplication>
#include "qopenglcontextwindow.h"
diff --git a/tests/manual/qopenglcontext/qopenglcontextwindow.cpp b/tests/manual/qopenglcontext/qopenglcontextwindow.cpp
index 07147a4488..7640fb5ba7 100644
--- a/tests/manual/qopenglcontext/qopenglcontextwindow.cpp
+++ b/tests/manual/qopenglcontext/qopenglcontextwindow.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 "qopenglcontextwindow.h"
#include <QtGui/QOpenGLFunctions>
diff --git a/tests/manual/qopenglcontext/qopenglcontextwindow.h b/tests/manual/qopenglcontext/qopenglcontextwindow.h
index 1a497a750c..1822667070 100644
--- a/tests/manual/qopenglcontext/qopenglcontextwindow.h
+++ b/tests/manual/qopenglcontext/qopenglcontextwindow.h
@@ -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
#ifndef QOPENGLCONTEXTWINDOW_H
#define QOPENGLCONTEXTWINDOW_H
diff --git a/tests/manual/qopengltextureblitter/CMakeLists.txt b/tests/manual/qopengltextureblitter/CMakeLists.txt
index e45089d778..4f71562483 100644
--- a/tests/manual/qopengltextureblitter/CMakeLists.txt
+++ b/tests/manual/qopengltextureblitter/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qopengltextureblitter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qopengltextureblitter Binary:
@@ -11,11 +12,8 @@ qt_internal_add_manual_test(qopengltextureblitter
qopengltextureblitwindow.cpp qopengltextureblitwindow.h
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
- Qt::OpenGL # special case
+ Qt::OpenGL
)
-
-#### Keys ignored in scope 1:.:.:qopengltextureblitter.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qopengltextureblitter/main.cpp b/tests/manual/qopengltextureblitter/main.cpp
index 5a30d821d7..b213994898 100644
--- a/tests/manual/qopengltextureblitter/main.cpp
+++ b/tests/manual/qopengltextureblitter/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 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 "qopengltextureblitwindow.h"
#include <QtGui/QGuiApplication>
diff --git a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp
index f8e033c927..90557c7dc4 100644
--- a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.cpp
+++ b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.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 "qopengltextureblitwindow.h"
diff --git a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.h b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.h
index 0912f096e4..0978d8cc2d 100644
--- a/tests/manual/qopengltextureblitter/qopengltextureblitwindow.h
+++ b/tests/manual/qopengltextureblitter/qopengltextureblitwindow.h
@@ -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
#ifndef QOPENGLTEXTUREBLITWINDOW_H
#define QOPENGLTEXTUREBLITWINDOW_H
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/CMakeLists.txt b/tests/manual/qopenglwidget/dockedopenglwidget/CMakeLists.txt
new file mode 100644
index 0000000000..e34342fc37
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/CMakeLists.txt
@@ -0,0 +1,31 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+set(CMAKE_AUTOUIC ON)
+
+qt_internal_add_manual_test(dockedopenglwidget
+ GUI
+ SOURCES
+ main.cpp
+ geometryengine.cpp geometryengine.h
+ mainwidget.cpp mainwidget.h
+ mainwindow.cpp mainwindow.h
+ mainwindow.ui
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::OpenGL
+ Qt::OpenGLWidgets
+ Qt::Widgets
+ Qt::WidgetsPrivate
+)
+
+qt_add_resources(dockedopenglwidget "dockedopenglwidget"
+ PREFIX
+ "/"
+ FILES
+ vshader.glsl
+ fshader.glsl
+ cube.png
+)
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/cube.png b/tests/manual/qopenglwidget/dockedopenglwidget/cube.png
new file mode 100644
index 0000000000..42c8c51b3a
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/cube.png
Binary files differ
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/fshader.glsl b/tests/manual/qopenglwidget/dockedopenglwidget/fshader.glsl
new file mode 100644
index 0000000000..8e5a4de8fc
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/fshader.glsl
@@ -0,0 +1,8 @@
+uniform sampler2D texture;
+varying vec2 v_texcoord;
+
+void main()
+{
+ gl_FragColor = texture2D(texture, v_texcoord);
+}
+
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/geometryengine.cpp b/tests/manual/qopenglwidget/dockedopenglwidget/geometryengine.cpp
new file mode 100644
index 0000000000..d7b9b8d05a
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/geometryengine.cpp
@@ -0,0 +1,126 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "geometryengine.h"
+
+#include <QVector2D>
+#include <QVector3D>
+
+struct VertexData
+{
+ QVector3D position;
+ QVector2D texCoord;
+};
+
+GeometryEngine::GeometryEngine()
+ : indexBuf(QOpenGLBuffer::IndexBuffer)
+{
+ initializeOpenGLFunctions();
+
+ // Generate 2 VBOs
+ arrayBuf.create();
+ indexBuf.create();
+
+ // Initializes cube geometry and transfers it to VBOs
+ initCubeGeometry();
+}
+
+GeometryEngine::~GeometryEngine()
+{
+ arrayBuf.destroy();
+ indexBuf.destroy();
+}
+
+void GeometryEngine::initCubeGeometry()
+{
+ // For cube we would need only 8 vertices but we have to
+ // duplicate vertex for each face because texture coordinate
+ // is different.
+ VertexData vertices[] = {
+ // Vertex data for face 0
+ {QVector3D(-1.0f, -1.0f, 1.0f), QVector2D(0.0f, 0.0f)}, // v0
+ {QVector3D( 1.0f, -1.0f, 1.0f), QVector2D(0.33f, 0.0f)}, // v1
+ {QVector3D(-1.0f, 1.0f, 1.0f), QVector2D(0.0f, 0.5f)}, // v2
+ {QVector3D( 1.0f, 1.0f, 1.0f), QVector2D(0.33f, 0.5f)}, // v3
+
+ // Vertex data for face 1
+ {QVector3D( 1.0f, -1.0f, 1.0f), QVector2D( 0.0f, 0.5f)}, // v4
+ {QVector3D( 1.0f, -1.0f, -1.0f), QVector2D(0.33f, 0.5f)}, // v5
+ {QVector3D( 1.0f, 1.0f, 1.0f), QVector2D(0.0f, 1.0f)}, // v6
+ {QVector3D( 1.0f, 1.0f, -1.0f), QVector2D(0.33f, 1.0f)}, // v7
+
+ // Vertex data for face 2
+ {QVector3D( 1.0f, -1.0f, -1.0f), QVector2D(0.66f, 0.5f)}, // v8
+ {QVector3D(-1.0f, -1.0f, -1.0f), QVector2D(1.0f, 0.5f)}, // v9
+ {QVector3D( 1.0f, 1.0f, -1.0f), QVector2D(0.66f, 1.0f)}, // v10
+ {QVector3D(-1.0f, 1.0f, -1.0f), QVector2D(1.0f, 1.0f)}, // v11
+
+ // Vertex data for face 3
+ {QVector3D(-1.0f, -1.0f, -1.0f), QVector2D(0.66f, 0.0f)}, // v12
+ {QVector3D(-1.0f, -1.0f, 1.0f), QVector2D(1.0f, 0.0f)}, // v13
+ {QVector3D(-1.0f, 1.0f, -1.0f), QVector2D(0.66f, 0.5f)}, // v14
+ {QVector3D(-1.0f, 1.0f, 1.0f), QVector2D(1.0f, 0.5f)}, // v15
+
+ // Vertex data for face 4
+ {QVector3D(-1.0f, -1.0f, -1.0f), QVector2D(0.33f, 0.0f)}, // v16
+ {QVector3D( 1.0f, -1.0f, -1.0f), QVector2D(0.66f, 0.0f)}, // v17
+ {QVector3D(-1.0f, -1.0f, 1.0f), QVector2D(0.33f, 0.5f)}, // v18
+ {QVector3D( 1.0f, -1.0f, 1.0f), QVector2D(0.66f, 0.5f)}, // v19
+
+ // Vertex data for face 5
+ {QVector3D(-1.0f, 1.0f, 1.0f), QVector2D(0.33f, 0.5f)}, // v20
+ {QVector3D( 1.0f, 1.0f, 1.0f), QVector2D(0.66f, 0.5f)}, // v21
+ {QVector3D(-1.0f, 1.0f, -1.0f), QVector2D(0.33f, 1.0f)}, // v22
+ {QVector3D( 1.0f, 1.0f, -1.0f), QVector2D(0.66f, 1.0f)} // v23
+ };
+
+ // Indices for drawing cube faces using triangle strips.
+ // Triangle strips can be connected by duplicating indices
+ // between the strips. If connecting strips have opposite
+ // vertex order then last index of the first strip and first
+ // index of the second strip needs to be duplicated. If
+ // connecting strips have same vertex order then only last
+ // index of the first strip needs to be duplicated.
+ GLushort indices[] = {
+ 0, 1, 2, 3, 3, // Face 0 - triangle strip ( v0, v1, v2, v3)
+ 4, 4, 5, 6, 7, 7, // Face 1 - triangle strip ( v4, v5, v6, v7)
+ 8, 8, 9, 10, 11, 11, // Face 2 - triangle strip ( v8, v9, v10, v11)
+ 12, 12, 13, 14, 15, 15, // Face 3 - triangle strip (v12, v13, v14, v15)
+ 16, 16, 17, 18, 19, 19, // Face 4 - triangle strip (v16, v17, v18, v19)
+ 20, 20, 21, 22, 23 // Face 5 - triangle strip (v20, v21, v22, v23)
+ };
+
+ // Transfer vertex data to VBO 0
+ arrayBuf.bind();
+ arrayBuf.allocate(vertices, 24 * sizeof(VertexData));
+
+ // Transfer index data to VBO 1
+ indexBuf.bind();
+ indexBuf.allocate(indices, 34 * sizeof(GLushort));
+}
+
+void GeometryEngine::drawCubeGeometry(QOpenGLShaderProgram *program)
+{
+ // Tell OpenGL which VBOs to use
+ arrayBuf.bind();
+ indexBuf.bind();
+
+ // Offset for position
+ quintptr offset = 0;
+
+ // Tell OpenGL programmable pipeline how to locate vertex position data
+ int vertexLocation = program->attributeLocation("a_position");
+ program->enableAttributeArray(vertexLocation);
+ program->setAttributeBuffer(vertexLocation, GL_FLOAT, offset, 3, sizeof(VertexData));
+
+ // Offset for texture coordinate
+ offset += sizeof(QVector3D);
+
+ // Tell OpenGL programmable pipeline how to locate vertex texture coordinate data
+ int texcoordLocation = program->attributeLocation("a_texcoord");
+ program->enableAttributeArray(texcoordLocation);
+ program->setAttributeBuffer(texcoordLocation, GL_FLOAT, offset, 2, sizeof(VertexData));
+
+ // Draw cube geometry using indices from VBO 1
+ glDrawElements(GL_TRIANGLE_STRIP, 34, GL_UNSIGNED_SHORT, nullptr);
+}
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/geometryengine.h b/tests/manual/qopenglwidget/dockedopenglwidget/geometryengine.h
new file mode 100644
index 0000000000..646d6570c8
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/geometryengine.h
@@ -0,0 +1,26 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef GEOMETRYENGINE_H
+#define GEOMETRYENGINE_H
+
+#include <QOpenGLFunctions>
+#include <QOpenGLShaderProgram>
+#include <QOpenGLBuffer>
+
+class GeometryEngine : protected QOpenGLFunctions
+{
+public:
+ GeometryEngine();
+ virtual ~GeometryEngine();
+
+ void drawCubeGeometry(QOpenGLShaderProgram *program);
+
+private:
+ void initCubeGeometry();
+
+ QOpenGLBuffer arrayBuf;
+ QOpenGLBuffer indexBuf;
+};
+
+#endif // GEOMETRYENGINE_H
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/main.cpp b/tests/manual/qopenglwidget/dockedopenglwidget/main.cpp
new file mode 100644
index 0000000000..e21a976ca7
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "mainwindow.h"
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+
+ MainWindow w;
+ w.show();
+ return a.exec();
+}
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/mainwidget.cpp b/tests/manual/qopenglwidget/dockedopenglwidget/mainwidget.cpp
new file mode 100644
index 0000000000..b9dc4c5fe2
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/mainwidget.cpp
@@ -0,0 +1,161 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "mainwidget.h"
+#include <QMouseEvent>
+#include <cmath>
+
+MainWidget::~MainWidget()
+{
+ cleanup();
+}
+
+void MainWidget::cleanup()
+{
+ makeCurrent();
+ delete texture;
+ texture = nullptr;
+ delete geometries;
+ geometries = nullptr;
+ delete program;
+ program = nullptr;
+ doneCurrent();
+
+ QObject::disconnect(context(), &QOpenGLContext::aboutToBeDestroyed, this, &MainWidget::cleanup);
+}
+
+void MainWidget::mousePressEvent(QMouseEvent *e)
+{
+ // Save mouse press position
+ mousePressPosition = QVector2D(e->position());
+}
+
+void MainWidget::mouseReleaseEvent(QMouseEvent *e)
+{
+ // Mouse release position - mouse press position
+ QVector2D diff = QVector2D(e->position()) - mousePressPosition;
+
+ // Rotation axis is perpendicular to the mouse position difference
+ // vector
+ QVector3D n = QVector3D(diff.y(), diff.x(), 0.0).normalized();
+
+ // Accelerate angular speed relative to the length of the mouse sweep
+ qreal acc = diff.length() / 100.0;
+
+ // Calculate new rotation axis as weighted sum
+ rotationAxis = (rotationAxis * angularSpeed + n * acc).normalized();
+
+ // Increase angular speed
+ angularSpeed += acc;
+}
+
+void MainWidget::timerEvent(QTimerEvent *)
+{
+ // Decrease angular speed (friction)
+ angularSpeed *= 0.99;
+
+ // Stop rotation when speed goes below threshold
+ if (angularSpeed < 0.01) {
+ angularSpeed = 0.0;
+ } else {
+ // Update rotation
+ rotation = QQuaternion::fromAxisAndAngle(rotationAxis, angularSpeed) * rotation;
+
+ // Request an update
+ update();
+ }
+}
+
+void MainWidget::initializeGL()
+{
+ initializeOpenGLFunctions();
+
+ glClearColor(0, 0, 0, 1);
+
+ initShaders();
+ initTextures();
+
+ glEnable(GL_DEPTH_TEST);
+
+ glEnable(GL_CULL_FACE);
+
+ geometries = new GeometryEngine;
+
+ // Use QBasicTimer because its faster than QTimer
+ timer.start(12, this);
+
+ connect(context(), &QOpenGLContext::aboutToBeDestroyed, this, &MainWidget::cleanup);
+}
+
+void MainWidget::initShaders()
+{
+ program = new QOpenGLShaderProgram;
+ // Compile vertex shader
+ if (!program->addShaderFromSourceFile(QOpenGLShader::Vertex, ":/vshader.glsl"))
+ close();
+
+ // Compile fragment shader
+ if (!program->addShaderFromSourceFile(QOpenGLShader::Fragment, ":/fshader.glsl"))
+ close();
+
+ // Link shader pipeline
+ if (!program->link())
+ close();
+
+ // Bind shader pipeline for use
+ if (!program->bind())
+ close();
+}
+
+void MainWidget::initTextures()
+{
+ // Load cube.png image
+ texture = new QOpenGLTexture(QImage(":/cube.png").mirrored());
+
+ // Set nearest filtering mode for texture minification
+ texture->setMinificationFilter(QOpenGLTexture::Nearest);
+
+ // Set bilinear filtering mode for texture magnification
+ texture->setMagnificationFilter(QOpenGLTexture::Linear);
+
+ // Wrap texture coordinates by repeating
+ // f.ex. texture coordinate (1.1, 1.2) is same as (0.1, 0.2)
+ texture->setWrapMode(QOpenGLTexture::Repeat);
+}
+
+void MainWidget::resizeGL(int w, int h)
+{
+ // Calculate aspect ratio
+ qreal aspect = qreal(w) / qreal(h ? h : 1);
+
+ // Set near plane to 3.0, far plane to 7.0, field of view 45 degrees
+ const qreal zNear = 3.0, zFar = 7.0, fov = 45.0;
+
+ // Reset projection
+ projection.setToIdentity();
+
+ // Set perspective projection
+ projection.perspective(fov, aspect, zNear, zFar);
+}
+
+void MainWidget::paintGL()
+{
+ // Clear color and depth buffer
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ texture->bind();
+
+ // Calculate model view transformation
+ QMatrix4x4 matrix;
+ matrix.translate(0.0, 0.0, -5.0);
+ matrix.rotate(rotation);
+
+ // Set modelview-projection matrix
+ program->setUniformValue("mvp_matrix", projection * matrix);
+
+ // Use texture unit 0 which contains cube.png
+ program->setUniformValue("texture", 0);
+
+ // Draw cube geometry
+ geometries->drawCubeGeometry(program);
+}
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/mainwidget.h b/tests/manual/qopenglwidget/dockedopenglwidget/mainwidget.h
new file mode 100644
index 0000000000..b21131d485
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/mainwidget.h
@@ -0,0 +1,57 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef MAINWIDGET_H
+#define MAINWIDGET_H
+
+#include "geometryengine.h"
+
+#include <QOpenGLWidget>
+#include <QOpenGLFunctions>
+#include <QMatrix4x4>
+#include <QQuaternion>
+#include <QVector2D>
+#include <QBasicTimer>
+#include <QOpenGLShaderProgram>
+#include <QOpenGLTexture>
+
+class GeometryEngine;
+
+class MainWidget : public QOpenGLWidget, protected QOpenGLFunctions
+{
+ Q_OBJECT
+
+public:
+ using QOpenGLWidget::QOpenGLWidget;
+ ~MainWidget();
+
+protected:
+ void mousePressEvent(QMouseEvent *e) override;
+ void mouseReleaseEvent(QMouseEvent *e) override;
+ void timerEvent(QTimerEvent *e) override;
+
+ void initializeGL() override;
+ void resizeGL(int w, int h) override;
+ void paintGL() override;
+
+ void initShaders();
+ void initTextures();
+
+private slots:
+ void cleanup();
+
+private:
+ QBasicTimer timer;
+ QOpenGLShaderProgram *program = nullptr;
+ GeometryEngine *geometries = nullptr;
+ QOpenGLTexture *texture = nullptr;
+
+ QMatrix4x4 projection;
+
+ QVector2D mousePressPosition;
+ QVector3D rotationAxis;
+ qreal angularSpeed = 0;
+ QQuaternion rotation;
+};
+
+#endif // MAINWIDGET_H
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.cpp b/tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.cpp
new file mode 100644
index 0000000000..9a530bc4f7
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.cpp
@@ -0,0 +1,31 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "mainwindow.h"
+#include "ui_mainwindow.h"
+#include "mainwidget.h"
+#include <QDockWidget>
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+ , ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+
+ MainWidget *w1 = new MainWidget();
+ centralWidget()->layout()->addWidget(w1);
+
+ MainWidget *w2 = new MainWidget();
+ QDockWidget *dock = new QDockWidget("OpenGL Dock", this);
+ w2->setFixedSize(300, 300);
+ dock->setWidget(w2);
+ dock->setFixedSize(300, 300);
+
+ addDockWidget(Qt::RightDockWidgetArea, dock);
+ dock->setFloating(false);
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.h b/tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.h
new file mode 100644
index 0000000000..bea5cc41cc
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.h
@@ -0,0 +1,24 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+
+QT_BEGIN_NAMESPACE
+namespace Ui { class MainWindow; }
+QT_END_NAMESPACE
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+ ~MainWindow();
+
+private:
+ Ui::MainWindow *ui;
+};
+#endif // MAINWINDOW_H
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.ui b/tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.ui
new file mode 100644
index 0000000000..f013b8ec25
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/mainwindow.ui
@@ -0,0 +1,33 @@
+<?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>MainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QHBoxLayout" name="horizontalLayout"/>
+ </widget>
+ <widget class="QMenuBar" name="menubar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>800</width>
+ <height>20</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/qopenglwidget/dockedopenglwidget/vshader.glsl b/tests/manual/qopenglwidget/dockedopenglwidget/vshader.glsl
new file mode 100644
index 0000000000..098eda946e
--- /dev/null
+++ b/tests/manual/qopenglwidget/dockedopenglwidget/vshader.glsl
@@ -0,0 +1,12 @@
+uniform mat4 mvp_matrix;
+
+attribute vec4 a_position;
+attribute vec2 a_texcoord;
+
+varying vec2 v_texcoord;
+
+void main()
+{
+ gl_Position = mvp_matrix * a_position;
+ v_texcoord = a_texcoord;
+}
diff --git a/tests/manual/qopenglwidget/openglwidget/CMakeLists.txt b/tests/manual/qopenglwidget/openglwidget/CMakeLists.txt
index c0c031489f..967feda558 100644
--- a/tests/manual/qopenglwidget/openglwidget/CMakeLists.txt
+++ b/tests/manual/qopenglwidget/openglwidget/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from openglwidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## openglwidget Binary:
@@ -9,13 +10,14 @@ qt_internal_add_manual_test(openglwidget
SOURCES
main.cpp
openglwidget.cpp openglwidget.h
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ main.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
+ Qt::OpenGL
+ Qt::OpenGLWidgets
Qt::Widgets
Qt::WidgetsPrivate
)
-
-#### Keys ignored in scope 1:.:.:openglwidget.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qopenglwidget/openglwidget/main.cpp b/tests/manual/qopenglwidget/openglwidget/main.cpp
index 4e9ea13267..3a0e019b06 100644
--- a/tests/manual/qopenglwidget/openglwidget/main.cpp
+++ b/tests/manual/qopenglwidget/openglwidget/main.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "openglwidget.h"
#include <QApplication>
@@ -56,7 +33,6 @@ public:
private slots:
void turnNative();
void hideShowAllGL();
- void dumpCompositingStatus();
signals:
void aboutToShowGLWidgets();
@@ -108,12 +84,6 @@ void Tools::dumpWidget(QWidget *w, int indent)
}
}
-void Tools::dumpCompositingStatus()
-{
- QWindow *w = m_root->window()->windowHandle();
- qDebug() << "Compositing status for" << w << m_root->window() << "is" << QWindowPrivate::get(w)->compositing;
-}
-
class TabWidgetResetter : public QObject
{
Q_OBJECT
@@ -218,10 +188,6 @@ int main(int argc, char *argv[])
toolsMenu->addAction("&Turn widgets (or some parent) into native", &t, SLOT(turnNative()));
toolsMenu->addAction("&Hide/show all OpenGL widgets", &t, SLOT(hideShowAllGL()));
- QTimer compStatusDumpTimer;
- QObject::connect(&compStatusDumpTimer, SIGNAL(timeout()), &t, SLOT(dumpCompositingStatus()));
- compStatusDumpTimer.start(5000);
-
wnd.show();
if (glw->isValid())
diff --git a/tests/manual/qopenglwidget/openglwidget/openglwidget.cpp b/tests/manual/qopenglwidget/openglwidget/openglwidget.cpp
index 031558a787..7e39945639 100644
--- a/tests/manual/qopenglwidget/openglwidget/openglwidget.cpp
+++ b/tests/manual/qopenglwidget/openglwidget/openglwidget.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
#define GL_GLEXT_PROTOTYPES
@@ -39,7 +14,7 @@
#include <QtGui/QOpenGLFunctions>
#include <QtGui/QGuiApplication>
#include <QtGui/QMatrix4x4>
-#include <QtGui/QOpenGLShaderProgram>
+#include <QOpenGLShaderProgram>
#include <QtGui/QScreen>
#include <QtCore/qmath.h>
diff --git a/tests/manual/qopenglwidget/openglwidget/openglwidget.h b/tests/manual/qopenglwidget/openglwidget/openglwidget.h
index 06ec5b1a40..8366d17a11 100644
--- a/tests/manual/qopenglwidget/openglwidget/openglwidget.h
+++ b/tests/manual/qopenglwidget/openglwidget/openglwidget.h
@@ -1,35 +1,10 @@
-/****************************************************************************
-**
-** 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
#ifndef OPENGLWIDGET_H
#define OPENGLWIDGET_H
-#include <QtWidgets/QOpenGLWidget>
+#include <QOpenGLWidget>
#include <QtGui/QVector3D>
class OpenGLWidgetPrivate;
diff --git a/tests/manual/qopenglwindow/multiwindow/CMakeLists.txt b/tests/manual/qopenglwindow/multiwindow/CMakeLists.txt
index 5f6aaef0d2..bc40407af4 100644
--- a/tests/manual/qopenglwindow/multiwindow/CMakeLists.txt
+++ b/tests/manual/qopenglwindow/multiwindow/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from multiwindow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## multiwindow Binary:
@@ -8,9 +9,6 @@ qt_internal_add_manual_test(multiwindow
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
-
-#### Keys ignored in scope 1:.:.:multiwindow.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qopenglwindow/multiwindow/main.cpp b/tests/manual/qopenglwindow/multiwindow/main.cpp
index 1f84758bc9..0b351d5796 100644
--- a/tests/manual/qopenglwindow/multiwindow/main.cpp
+++ b/tests/manual/qopenglwindow/multiwindow/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 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 <QtGui>
diff --git a/tests/manual/qprintdevice_dump/CMakeLists.txt b/tests/manual/qprintdevice_dump/CMakeLists.txt
index 78334c603b..e4393ff624 100644
--- a/tests/manual/qprintdevice_dump/CMakeLists.txt
+++ b/tests/manual/qprintdevice_dump/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qprintdevice_dump.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qprintdevice_dump Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(qprintdevice_dump
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::PrintSupportPrivate
)
-
-#### Keys ignored in scope 1:.:.:qprintdevice_dump.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qprintdevice_dump/main.cpp b/tests/manual/qprintdevice_dump/main.cpp
index 1d76e858c8..9d1de96221 100644
--- a/tests/manual/qprintdevice_dump/main.cpp
+++ b/tests/manual/qprintdevice_dump/main.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 John Layt <jlayt@kde.org>
-** 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) 2014 John Layt <jlayt@kde.org>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <qpa/qplatformprintplugin.h>
#include <qpa/qplatformprintersupport.h>
diff --git a/tests/manual/qscreen/CMakeLists.txt b/tests/manual/qscreen/CMakeLists.txt
index 22c1401f1d..4149310df4 100644
--- a/tests/manual/qscreen/CMakeLists.txt
+++ b/tests/manual/qscreen/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qscreen.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qscreen Binary:
@@ -9,10 +10,9 @@ qt_internal_add_manual_test(qscreen
main.cpp
propertyfield.cpp propertyfield.h
propertywatcher.cpp propertywatcher.h
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ main.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qscreen.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qscreen/main.cpp b/tests/manual/qscreen/main.cpp
index ec2203e1f1..f85271923c 100644
--- a/tests/manual/qscreen/main.cpp
+++ b/tests/manual/qscreen/main.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "propertywatcher.h"
#include <QApplication>
diff --git a/tests/manual/qscreen/propertyfield.cpp b/tests/manual/qscreen/propertyfield.cpp
index e310798573..1a637e302f 100644
--- a/tests/manual/qscreen/propertyfield.cpp
+++ b/tests/manual/qscreen/propertyfield.cpp
@@ -1,36 +1,11 @@
-/****************************************************************************
-**
-** 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 "propertyfield.h"
#include <QDebug>
PropertyField::PropertyField(QObject* subject, const QMetaProperty& prop, QWidget *parent)
- : QLineEdit(parent), m_subject(subject), m_lastChangeTime(QTime::currentTime()), m_prop(prop)
+ : QLineEdit(parent), m_subject(subject), m_lastChangeTime(), m_prop(prop)
, m_defaultBrush(palette().brush(QPalette::Active, QPalette::Text))
{
setReadOnly(true);
@@ -82,7 +57,6 @@ void PropertyField::propertyChanged()
if (m_lastText.isEmpty()) {
m_lastText = text;
m_lastTextShowing = text;
- m_lastChangeTime = QTime::currentTime().addSecs(-5);
}
qDebug() << " " << QString::fromUtf8(m_prop.name()) << ':' << val;
diff --git a/tests/manual/qscreen/propertyfield.h b/tests/manual/qscreen/propertyfield.h
index 364eef2f6c..62e9f9e99c 100644
--- a/tests/manual/qscreen/propertyfield.h
+++ b/tests/manual/qscreen/propertyfield.h
@@ -1,37 +1,12 @@
-/****************************************************************************
-**
-** 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
#ifndef PROPERTYFIELD_H
#define PROPERTYFIELD_H
#include <QLineEdit>
#include <QMetaProperty>
-#include <QTime>
+#include <QElapsedTimer>
/*!
A QLineEdit for viewing the text form of a property on an object.
@@ -56,7 +31,7 @@ private:
QObject* m_subject;
QString m_lastText;
QString m_lastTextShowing;
- QTime m_lastChangeTime;
+ QElapsedTimer m_lastChangeTime;
const QMetaProperty m_prop;
QBrush m_defaultBrush;
};
diff --git a/tests/manual/qscreen/propertywatcher.cpp b/tests/manual/qscreen/propertywatcher.cpp
index d2a552f108..6ba6f5c351 100644
--- a/tests/manual/qscreen/propertywatcher.cpp
+++ b/tests/manual/qscreen/propertywatcher.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 "propertywatcher.h"
#include <QMetaProperty>
@@ -110,8 +85,8 @@ void PropertyWatcher::setSubject(QObject *s, const QString &annotation)
void PropertyWatcher::updateAllFields()
{
- QList<PropertyField *> fields = findChildren<PropertyField*>();
- foreach (PropertyField *field, fields)
+ const QList<PropertyField *> fields = findChildren<PropertyField*>();
+ for (PropertyField *field : fields)
field->propertyChanged();
emit updatedAllFields(this);
}
diff --git a/tests/manual/qscreen/propertywatcher.h b/tests/manual/qscreen/propertywatcher.h
index d988d96c91..061d94964e 100644
--- a/tests/manual/qscreen/propertywatcher.h
+++ b/tests/manual/qscreen/propertywatcher.h
@@ -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
#ifndef PROPERTY_WATCHER_H
#define PROPERTY_WATCHER_H
diff --git a/tests/manual/qscreen_xrandr/CMakeLists.txt b/tests/manual/qscreen_xrandr/CMakeLists.txt
index 095948b070..32057e375d 100644
--- a/tests/manual/qscreen_xrandr/CMakeLists.txt
+++ b/tests/manual/qscreen_xrandr/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qscreen_xrandr.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qscreen2 Test:
@@ -7,7 +8,7 @@
qt_internal_add_test(tst_qscreen_xrandr
SOURCES
tst_qscreen_xrandr.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
diff --git a/tests/manual/qscreen_xrandr/tst_qscreen_xrandr.cpp b/tests/manual/qscreen_xrandr/tst_qscreen_xrandr.cpp
index 293dec47b4..542214792c 100644
--- a/tests/manual/qscreen_xrandr/tst_qscreen_xrandr.cpp
+++ b/tests/manual/qscreen_xrandr/tst_qscreen_xrandr.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2022 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) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <qpainter.h>
#include <qrasterwindow.h>
@@ -43,6 +18,7 @@ private slots:
void xrandr_15_scale();
void xrandr_15_off_and_on();
void xrandr_15_primary();
+ void xrandr_15_rotate();
private:
void xrandr_process(const QStringList &arguments = {});
@@ -143,7 +119,7 @@ void tst_QScreen_Xrandr::xrandr_15_scale()
QVERIFY(height2 == expectedHeight);
QVERIFY(width2 == expectedWidth);
- QSignalSpy geometryChangedSpy2(screen1, &QScreen::geometryChanged);
+ QSignalSpy geometryChangedSpy2(screen2, &QScreen::geometryChanged);
// "xrandr --output name1 --scale 1x1"
args.clear();
@@ -232,6 +208,65 @@ void tst_QScreen_Xrandr::xrandr_15_primary()
}
}
+void tst_QScreen_Xrandr::xrandr_15_rotate()
+{
+ QList<QScreen *> screens = QGuiApplication::screens();
+ int ss = screens.size();
+ if (ss < 1)
+ QSKIP("This test requires at least one screen.");
+
+ QScreen *screen1 = screens.at(0);
+ QString name1 = screen1->name();
+ int height1 = screen1->size().height();
+ int width1 = screen1->size().width();
+ qDebug() << "screen " << name1 << ": height=" << height1 << ", width=" << width1;
+
+ int expectedHeight = width1;
+ int expectedWidth = height1;
+
+ QSignalSpy geometryChangedSpy1(screen1, &QScreen::geometryChanged);
+
+ // "xrandr --output name1 --rotate left"
+ QStringList args;
+ args << "--output" << name1 << "--rotate" << "left";
+ xrandr_process(args);
+ QTRY_COMPARE(geometryChangedSpy1.count(), 1);
+
+ QList<QScreen *> screens2 = QGuiApplication::screens();
+ QVERIFY(screens2.size() >= 1);
+ QScreen *screen2 = nullptr;
+ for (QScreen *s : screens2) {
+ if (s->name() == name1)
+ screen2 = s;
+ }
+ int height2 = screen2->size().height();
+ int width2 = screen2->size().width();
+ qDebug() << "screen " << name1 << ": height=" << height2 << ", width=" << width2;
+ QVERIFY(height2 == expectedHeight);
+ QVERIFY(width2 == expectedWidth);
+
+ QSignalSpy geometryChangedSpy2(screen2, &QScreen::geometryChanged);
+
+ // "xrandr --output name1 --rotate normal"
+ args.clear();
+ args << "--output" << name1 << "--rotate" << "normal";
+ xrandr_process(args);
+ QTRY_COMPARE(geometryChangedSpy2.count(), 1);
+
+ QList<QScreen *> screens3 = QGuiApplication::screens();
+ QVERIFY(screens3.size() >= 1);
+ QScreen *screen3 = nullptr;
+ for (QScreen *s : screens3) {
+ if (s->name() == name1)
+ screen3 = s;
+ }
+ int height3 = screen3->size().height();
+ int width3 = screen3->size().width();
+ qDebug() << "screen " << name1 << ": height=" << height3 << ", width=" << width3;
+ QVERIFY(height3 == height1);
+ QVERIFY(width3 == width1);
+}
+
void tst_QScreen_Xrandr::xrandr_process(const QStringList &args)
{
QString prog = "xrandr";
diff --git a/tests/manual/qssloptions/CMakeLists.txt b/tests/manual/qssloptions/CMakeLists.txt
index edfbf88d80..ee83371d89 100644
--- a/tests/manual/qssloptions/CMakeLists.txt
+++ b/tests/manual/qssloptions/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qssloptions.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qssloptions Binary:
@@ -7,7 +8,7 @@
qt_internal_add_manual_test(tst_qssloptions
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
Qt::Test
)
diff --git a/tests/manual/qssloptions/main.cpp b/tests/manual/qssloptions/main.cpp
index cc65c57f33..36d3ae57d3 100644
--- a/tests/manual/qssloptions/main.cpp
+++ b/tests/manual/qssloptions/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 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 <QtNetwork/qsslconfiguration.h>
#include <QtCore/QCoreApplication>
diff --git a/tests/manual/qsslsocket/CMakeLists.txt b/tests/manual/qsslsocket/CMakeLists.txt
index 9347418bff..59f902a301 100644
--- a/tests/manual/qsslsocket/CMakeLists.txt
+++ b/tests/manual/qsslsocket/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qsslsocket.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_manual_qsslsocket Test:
@@ -7,6 +8,6 @@
qt_internal_add_test(tst_manual_qsslsocket
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Network
)
diff --git a/tests/manual/qsslsocket/main.cpp b/tests/manual/qsslsocket/main.cpp
index 188a1f4027..cc3cdb92d6 100644
--- a/tests/manual/qsslsocket/main.cpp
+++ b/tests/manual/qsslsocket/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
-** 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) 2014 BlackBerry Limited. All rights reserved.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtNetwork/qsslconfiguration.h>
@@ -55,14 +30,15 @@ void tst_QSslSocket::nextProtocolNegotiation_data()
QTest::addColumn<QByteArray>("expectedProtocol");
QTest::addColumn<QSslConfiguration::NextProtocolNegotiationStatus>("expectedStatus");
- QList<QString> hosts = QList<QString>()
- << QStringLiteral("www.google.com")
- << QStringLiteral("www.facebook.com")
- << QStringLiteral("www.twitter.com")
- << QStringLiteral("graph.facebook.com")
- << QStringLiteral("api.twitter.com");
+ const QString hosts[] = {
+ QStringLiteral("www.google.com"),
+ QStringLiteral("www.facebook.com"),
+ QStringLiteral("www.twitter.com"),
+ QStringLiteral("graph.facebook.com"),
+ QStringLiteral("api.twitter.com"),
+ };
- foreach (QString host, hosts) {
+ for (const QString &host : hosts) {
QByteArray tag = host.toLocal8Bit();
tag.append("-none");
QTest::newRow(tag)
diff --git a/tests/manual/qstorageinfo/CMakeLists.txt b/tests/manual/qstorageinfo/CMakeLists.txt
index 40bf1fdeaf..a72cc2d92c 100644
--- a/tests/manual/qstorageinfo/CMakeLists.txt
+++ b/tests/manual/qstorageinfo/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qstorageinfo.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qstorageinfo Binary:
diff --git a/tests/manual/qstorageinfo/main.cpp b/tests/manual/qstorageinfo/main.cpp
index 12e767baf4..f6890b0c3b 100644
--- a/tests/manual/qstorageinfo/main.cpp
+++ b/tests/manual/qstorageinfo/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation
-** 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 Intel Corporation
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QCoreApplication>
@@ -40,7 +15,7 @@ int main(int argc, char *argv[])
QStringList args = a.arguments();
args.takeFirst(); // skip application name
- foreach (const QString &path, args) {
+ for (const QString &path : std::as_const(args)) {
QStorageInfo info(path);
if (!info.isValid()) {
// no error string...
diff --git a/tests/manual/qstorageinfo/printvolumes.cpp b/tests/manual/qstorageinfo/printvolumes.cpp
index b56e871109..d6bf9dab52 100644
--- a/tests/manual/qstorageinfo/printvolumes.cpp
+++ b/tests/manual/qstorageinfo/printvolumes.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Intel Corporation
-** 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 Intel Corporation
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore/QStorageInfo>
@@ -37,21 +12,31 @@ void printVolumes(const QList<QStorageInfo> &volumes, int (*printer)(const char
// 214958080 39088272 4096 /
// /dev/disk1s2 (hfs) RW 488050672 419909696 4096 Macintosh HD2 /Volumes/Macintosh HD2
- printer("Filesystem (Type) Size Available BSize Label Mounted on\n");
- foreach (const QStorageInfo &info, volumes) {
+ int fsColumnWidth = 25;
+ int labelColumnWidth = 20;
+ for (const QStorageInfo &info : volumes) {
+ int len = 3 + info.device().size() + info.fileSystemType().size();
+ fsColumnWidth = qMax(fsColumnWidth, len);
+ if (QString subvol = info.subvolume(); !subvol.isEmpty())
+ labelColumnWidth = qMax(labelColumnWidth, int(subvol.size() + strlen("subvol=")));
+ else
+ labelColumnWidth = qMax(labelColumnWidth, int(info.name().size()));
+ }
+
+ printer("%*s Size Available BSize %*s Mounted on\n",
+ -fsColumnWidth, "Filesystem (Type)",
+ -labelColumnWidth, "Label");
+ for (const QStorageInfo &info : volumes) {
QByteArray fsAndType = info.device();
if (info.fileSystemType() != fsAndType)
fsAndType += " (" + info.fileSystemType() + ')';
- printer("%-19s R%c ", fsAndType.constData(), info.isReadOnly() ? 'O' : 'W');
- if (fsAndType.size() > 19)
- printer("\n%23s", "");
-
+ printer("%*s R%c ", -fsColumnWidth, fsAndType.constData(), info.isReadOnly() ? 'O' : 'W');
printer("%10llu %10llu %5u ", info.bytesTotal() / 1024, info.bytesFree() / 1024, info.blockSize());
if (!info.subvolume().isEmpty())
- printer("subvol=%-18s ", qPrintable(info.subvolume()));
+ printer("subvol=%*s ", -labelColumnWidth + int(strlen("subvol=")), qPrintable(info.subvolume()));
else
- printer("%-25s ", qPrintable(info.name()));
+ printer("%*s ", -labelColumnWidth, qPrintable(info.name()));
printer("%s\n", qPrintable(info.rootPath()));
}
}
diff --git a/tests/manual/qsysinfo/CMakeLists.txt b/tests/manual/qsysinfo/CMakeLists.txt
index 08117af9fc..1d46ba1146 100644
--- a/tests/manual/qsysinfo/CMakeLists.txt
+++ b/tests/manual/qsysinfo/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qsysinfo.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qsysinfo Binary:
@@ -8,6 +9,3 @@ qt_internal_add_manual_test(qsysinfo
SOURCES
main.cpp
)
-
-#### Keys ignored in scope 1:.:.:qsysinfo.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qsysinfo/main.cpp b/tests/manual/qsysinfo/main.cpp
index 119bb7682e..247553d624 100644
--- a/tests/manual/qsysinfo/main.cpp
+++ b/tests/manual/qsysinfo/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2017 Intel Corporation.
-** 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 Intel Corporation.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QCoreApplication>
#include <QOperatingSystemVersion>
diff --git a/tests/manual/qt_poll/CMakeLists.txt b/tests/manual/qt_poll/CMakeLists.txt
index 2b61787b10..06226a47e3 100644
--- a/tests/manual/qt_poll/CMakeLists.txt
+++ b/tests/manual/qt_poll/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qt_poll.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_qt_poll Test:
@@ -10,7 +11,7 @@ qt_internal_add_test(tst_qt_poll
tst_qt_poll.cpp
INCLUDE_DIRECTORIES
../../../src/corelib/kernel
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Network
)
diff --git a/tests/manual/qt_poll/tst_qt_poll.cpp b/tests/manual/qt_poll/tst_qt_poll.cpp
index 1fb5c2ca89..068120666e 100644
--- a/tests/manual/qt_poll/tst_qt_poll.cpp
+++ b/tests/manual/qt_poll/tst_qt_poll.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
#ifndef QT_NO_NATIVE_POLL
#define QT_NO_NATIVE_POLL
diff --git a/tests/manual/qtabbar/CMakeLists.txt b/tests/manual/qtabbar/CMakeLists.txt
index ea8d27ac91..c4219e7457 100644
--- a/tests/manual/qtabbar/CMakeLists.txt
+++ b/tests/manual/qtabbar/CMakeLists.txt
@@ -1,20 +1,18 @@
-# Generated from qtabbar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtabbar Binary:
#####################################################################
-qt_internal_add_manual_test(qtabbar
+qt_internal_add_manual_test(tst_manual_qtabbar
GUI
SOURCES
main.cpp
tabbarform.cpp tabbarform.h tabbarform.ui
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
uic
)
-
-#### Keys ignored in scope 1:.:.:qtabbar.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qtabbar/main.cpp b/tests/manual/qtabbar/main.cpp
index f916141497..02d4229973 100644
--- a/tests/manual/qtabbar/main.cpp
+++ b/tests/manual/qtabbar/main.cpp
@@ -1,56 +1,10 @@
-/****************************************************************************
-**
-** 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: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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QApplication>
#include <QWidget>
#include <QStackedWidget>
+#include <QMap>
#include <QTabBar>
#include <QLabel>
#include <QLayout>
diff --git a/tests/manual/qtabletevent/CMakeLists.txt b/tests/manual/qtabletevent/CMakeLists.txt
index 422664e2a4..df4a66c8f1 100644
--- a/tests/manual/qtabletevent/CMakeLists.txt
+++ b/tests/manual/qtabletevent/CMakeLists.txt
@@ -1,5 +1,6 @@
-# Generated from qtabletevent.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-#add_subdirectory(device_information) # special case no member named 'staticQtMetaObject'
+#add_subdirectory(device_information) # TODO: no member named 'staticQtMetaObject'
add_subdirectory(event_compression)
add_subdirectory(regular_widgets)
diff --git a/tests/manual/qtabletevent/device_information/CMakeLists.txt b/tests/manual/qtabletevent/device_information/CMakeLists.txt
index 02c0789ffe..a0583b1f93 100644
--- a/tests/manual/qtabletevent/device_information/CMakeLists.txt
+++ b/tests/manual/qtabletevent/device_information/CMakeLists.txt
@@ -1,15 +1,20 @@
-# Generated from device_information.pro.
-
-#####################################################################
-## device_information Binary:
-#####################################################################
-
-qt_internal_add_manual_test(device_information
- GUI
- SOURCES
- main.cpp
- tabletwidget.cpp tabletwidget.h
- PUBLIC_LIBRARIES
- Qt::Gui
- Qt::Widgets
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+project(tablet_device_info)
+cmake_minimum_required(VERSION 3.19)
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_add_executable(tablet_device_info
+ main.cpp
+ tabletwidget.h tabletwidget.cpp
+)
+
+set_target_properties(tablet_device_info PROPERTIES
+ AUTOMOC TRUE
+)
+
+target_link_libraries(tablet_device_info PUBLIC
+ Qt::Widgets
)
diff --git a/tests/manual/qtabletevent/device_information/main.cpp b/tests/manual/qtabletevent/device_information/main.cpp
index d1ccd28928..cb18e79eac 100644
--- a/tests/manual/qtabletevent/device_information/main.cpp
+++ b/tests/manual/qtabletevent/device_information/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 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/manual/qtabletevent/device_information/tabletwidget.cpp b/tests/manual/qtabletevent/device_information/tabletwidget.cpp
index c37210a885..747c807e02 100644
--- a/tests/manual/qtabletevent/device_information/tabletwidget.cpp
+++ b/tests/manual/qtabletevent/device_information/tabletwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "tabletwidget.h"
#include <QPainter>
@@ -82,6 +57,8 @@ bool TabletWidget::eventFilter(QObject *, QEvent *ev)
mPos = event->pos();
mGPos = event->globalPosition();
mTimestamp = event->timestamp();
+ if (isVisible())
+ update();
}
break;
case QEvent::Wheel:
@@ -132,6 +109,7 @@ void TabletWidget::paintEvent(QPaintEvent *)
eventInfo << QString("Device info missing");
} else {
eventInfo << QString("Seat: %1").arg(mDev->seatName());
+ eventInfo << QString("Name: %1").arg(mDev->name());
eventInfo << QString("Device type: %1").arg(deviceTypeToString(mDev->type()));
eventInfo << QString("Pointer type: %1").arg(pointerTypeToString(mDev->pointerType()));
eventInfo << QString("Capabilities: %1").arg(pointerCapabilitiesToString(mDev->capabilities()));
diff --git a/tests/manual/qtabletevent/device_information/tabletwidget.h b/tests/manual/qtabletevent/device_information/tabletwidget.h
index b58442ccda..477ae55b1b 100644
--- a/tests/manual/qtabletevent/device_information/tabletwidget.h
+++ b/tests/manual/qtabletevent/device_information/tabletwidget.h
@@ -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
#ifndef TABLETWIDGET_H
#define TABLETWIDGET_H
diff --git a/tests/manual/qtabletevent/event_compression/CMakeLists.txt b/tests/manual/qtabletevent/event_compression/CMakeLists.txt
index 8f5b6a3962..74fa0fb790 100644
--- a/tests/manual/qtabletevent/event_compression/CMakeLists.txt
+++ b/tests/manual/qtabletevent/event_compression/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from event_compression.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## event_compression Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(event_compression
SOURCES
main.cpp
mousestatwidget.cpp mousestatwidget.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
diff --git a/tests/manual/qtabletevent/event_compression/main.cpp b/tests/manual/qtabletevent/event_compression/main.cpp
index 10a26a976a..13edf8e704 100644
--- a/tests/manual/qtabletevent/event_compression/main.cpp
+++ b/tests/manual/qtabletevent/event_compression/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 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 "mousestatwidget.h"
diff --git a/tests/manual/qtabletevent/event_compression/mousestatwidget.cpp b/tests/manual/qtabletevent/event_compression/mousestatwidget.cpp
index a26c62d2e1..483ce0019d 100644
--- a/tests/manual/qtabletevent/event_compression/mousestatwidget.cpp
+++ b/tests/manual/qtabletevent/event_compression/mousestatwidget.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 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 "mousestatwidget.h"
diff --git a/tests/manual/qtabletevent/event_compression/mousestatwidget.h b/tests/manual/qtabletevent/event_compression/mousestatwidget.h
index 78294c2d25..f204a753a3 100644
--- a/tests/manual/qtabletevent/event_compression/mousestatwidget.h
+++ b/tests/manual/qtabletevent/event_compression/mousestatwidget.h
@@ -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 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
#ifndef MOUSESTATWIDGET_H
#define MOUSESTATWIDGET_H
diff --git a/tests/manual/qtabletevent/regular_widgets/CMakeLists.txt b/tests/manual/qtabletevent/regular_widgets/CMakeLists.txt
index 786e061322..d95c33df18 100644
--- a/tests/manual/qtabletevent/regular_widgets/CMakeLists.txt
+++ b/tests/manual/qtabletevent/regular_widgets/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from regular_widgets.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## regular_widgets Binary:
@@ -8,12 +9,9 @@ qt_internal_add_manual_test(regular_widgets
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:regular_widgets.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qtabletevent/regular_widgets/main.cpp b/tests/manual/qtabletevent/regular_widgets/main.cpp
index 8f14b2625f..3aee2bcdba 100644
--- a/tests/manual/qtabletevent/regular_widgets/main.cpp
+++ b/tests/manual/qtabletevent/regular_widgets/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 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 <QAction>
#include <QApplication>
@@ -177,7 +152,7 @@ void EventReportWidget::paintEvent(QPaintEvent *)
p.setPen(Qt::white);
QPainterPath ellipse;
ellipse.addEllipse(0, 0, halfLineSpacing * 5, halfLineSpacing);
- for (const TabletPoint &t : qAsConst(m_points)) {
+ for (const TabletPoint &t : std::as_const(m_points)) {
if (geom.contains(t.pos)) {
QPainterPath pp;
pp.addEllipse(t.pos, halfLineSpacing, halfLineSpacing);
diff --git a/tests/manual/qtbug-52641/CMakeLists.txt b/tests/manual/qtbug-52641/CMakeLists.txt
index 7b752dc1ee..f96a5f27a0 100644
--- a/tests/manual/qtbug-52641/CMakeLists.txt
+++ b/tests/manual/qtbug-52641/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtbug-52641.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtbug-52641 Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(qtbug-52641
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qtbug-52641.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qtbug-52641/main.cpp b/tests/manual/qtbug-52641/main.cpp
index 513b6d6291..71cfcb4075 100644
--- a/tests/manual/qtbug-52641/main.cpp
+++ b/tests/manual/qtbug-52641/main.cpp
@@ -1,34 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Kai Pastor
-** 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 Kai Pastor
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QApplication>
#include <QFileDialog>
#include <QPainter>
+#include <QPainterPath>
#include <QPdfWriter>
int main(int argc, char *argv[])
diff --git a/tests/manual/qtbug-8933/CMakeLists.txt b/tests/manual/qtbug-8933/CMakeLists.txt
index 5405c77f34..ecb4b8a70a 100644
--- a/tests/manual/qtbug-8933/CMakeLists.txt
+++ b/tests/manual/qtbug-8933/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtbug-8933.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtbug-8933 Binary:
@@ -9,12 +10,9 @@ qt_internal_add_manual_test(qtbug-8933
SOURCES
main.cpp
widget.cpp widget.h widget.ui
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
uic
)
-
-#### Keys ignored in scope 1:.:.:qtbug-8933.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qtbug-8933/main.cpp b/tests/manual/qtbug-8933/main.cpp
index 0150369ecb..d586e84d20 100644
--- a/tests/manual/qtbug-8933/main.cpp
+++ b/tests/manual/qtbug-8933/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 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 "widget.h"
diff --git a/tests/manual/qtbug-8933/widget.cpp b/tests/manual/qtbug-8933/widget.cpp
index b9444f3e77..77ec831d65 100644
--- a/tests/manual/qtbug-8933/widget.cpp
+++ b/tests/manual/qtbug-8933/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 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 "widget.h"
#include "ui_widget.h"
diff --git a/tests/manual/qtbug-8933/widget.h b/tests/manual/qtbug-8933/widget.h
index bc26971a9c..e3d3dee0d0 100644
--- a/tests/manual/qtbug-8933/widget.h
+++ b/tests/manual/qtbug-8933/widget.h
@@ -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
#ifndef WIDGET_H
#define WIDGET_H
diff --git a/tests/manual/qtextcursorinsert/CMakeLists.txt b/tests/manual/qtextcursorinsert/CMakeLists.txt
new file mode 100644
index 0000000000..064b636bdd
--- /dev/null
+++ b/tests/manual/qtextcursorinsert/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(qtextcursorinsert
+ GUI
+ SOURCES
+ main.cpp
+ widget.cpp widget.h widget.ui
+ LIBRARIES
+ Qt::Gui
+ Qt::Widgets
+ ENABLE_AUTOGEN_TOOLS
+ uic
+)
diff --git a/tests/manual/qtextcursorinsert/main.cpp b/tests/manual/qtextcursorinsert/main.cpp
new file mode 100644
index 0000000000..f4fa2f705f
--- /dev/null
+++ b/tests/manual/qtextcursorinsert/main.cpp
@@ -0,0 +1,14 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "widget.h"
+
+#include <QApplication>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+ Widget w;
+ w.show();
+ return a.exec();
+}
diff --git a/tests/manual/qtextcursorinsert/widget.cpp b/tests/manual/qtextcursorinsert/widget.cpp
new file mode 100644
index 0000000000..14440b7b7a
--- /dev/null
+++ b/tests/manual/qtextcursorinsert/widget.cpp
@@ -0,0 +1,188 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "widget.h"
+#include "./ui_widget.h"
+
+#include <QBuffer>
+#include <QShortcut>
+#include <QTextBlock>
+#include <QTextDocumentWriter>
+#include <QTextList>
+
+using namespace Qt::StringLiterals;
+
+Widget::Widget(QWidget *parent)
+ : QWidget(parent)
+ , ui(new Ui::Widget)
+{
+ ui->setupUi(this);
+
+ m_texts.insert(u"0-numbered html list"_s, u"<ol start=\"0\">\n<li>eggs</li>\n<li>maple syrup</li>\n</ol>"_s);
+ m_texts.insert(u"0-numbered markdown list"_s, u"0) eggs\n1) maple syrup\n"_s);
+ m_texts.insert(u"lorem ipsum markdown"_s,
+ u"Lorem ipsum dolor sit amet quod scimus quomodo legere et scribere Markdown, non solum applicationes interrete."_s);
+ m_texts.insert(u"markdown checkboxes"_s,
+ u"- [ ] kürbis-kernöl\n- [ ] mon cheri (große schachtel)\n- [ ] bergkäse\n- [ ] mannerwaffln\n"_s);
+ m_texts.insert(u"markdown checkboxes (3 hidden list styles)"_s,
+ u"- [ ] kürbis-kernöl\n- [ ] mon cheri (große schachtel)\n+ [ ] bergkäse\n* [ ] mannerwaffln\n"_s);
+ m_texts.insert(u"numbered html list"_s, u"<ol>\n<li>eggs</li>\n<li>maple syrup</li>\n</ol>"_s);
+ m_texts.insert(u"numbered markdown list"_s, u"1. bread\n1. milk\n"_s);
+
+ for (auto it = m_texts.constBegin(); it != m_texts.constEnd(); ++it) {
+ ui->richTextCB->addItem(it.key(), it.value());
+ ui->plainTextCB->addItem(it.key(), it.value());
+ }
+
+ ui->richTextCB->setCurrentIndex(m_texts.count() - 1);
+ ui->plainTextCB->setCurrentIndex(1);
+
+ m_fileDialog.setWindowTitle(tr("Save rich text"));
+ m_fileDialog.setAcceptMode(QFileDialog::AcceptSave);
+ m_fileDialog.setMimeTypeFilters({"text/markdown", "text/html", "text/plain",
+ "application/vnd.oasis.opendocument.text"});
+ connect(&m_fileDialog, &QFileDialog::fileSelected, this, &Widget::onSave);
+
+ connect(new QShortcut(QKeySequence::Save, this), &QShortcut::activated, [this]() { m_fileDialog.open(); });
+ connect(new QShortcut(QKeySequence::Quit, this), &QShortcut::activated, [this]() { qApp->quit(); });
+}
+
+Widget::~Widget()
+{
+ delete ui;
+}
+
+void Widget::on_insertMarkdownButton_clicked()
+{
+ if (ui->newBlockBeforeCB->isChecked()) {
+ if (ui->moveToBeginningRB->isChecked())
+ ui->textEdit->moveCursor(QTextCursor::StartOfBlock);
+ if (ui->moveToEndRB->isChecked())
+ ui->textEdit->moveCursor(QTextCursor::EndOfBlock);
+ if (ui->defaultBlockFormatCB->isChecked())
+ ui->textEdit->textCursor().insertBlock(QTextBlockFormat());
+ else
+ ui->textEdit->textCursor().insertBlock();
+ }
+ ui->textEdit->textCursor().insertMarkdown(ui->plainTextEdit->toPlainText());
+ if (ui->newBlockBeforeCB->isChecked()) {
+ if (ui->defaultBlockFormatCB->isChecked())
+ ui->textEdit->textCursor().insertBlock(QTextBlockFormat());
+ else
+ ui->textEdit->textCursor().insertBlock();
+ }
+}
+
+void Widget::on_insertHtmlButton_clicked()
+{
+ if (ui->newBlockBeforeCB->isChecked()) {
+ if (ui->moveToBeginningRB->isChecked())
+ ui->textEdit->moveCursor(QTextCursor::StartOfBlock);
+ if (ui->moveToEndRB->isChecked())
+ ui->textEdit->moveCursor(QTextCursor::EndOfBlock);
+ if (ui->defaultBlockFormatCB->isChecked())
+ ui->textEdit->textCursor().insertBlock(QTextBlockFormat());
+ else
+ ui->textEdit->textCursor().insertBlock();
+ }
+ ui->textEdit->insertHtml(ui->plainTextEdit->toPlainText());
+ if (ui->newBlockBeforeCB->isChecked()) {
+ if (ui->defaultBlockFormatCB->isChecked())
+ ui->textEdit->textCursor().insertBlock(QTextBlockFormat());
+ else
+ ui->textEdit->textCursor().insertBlock();
+ }
+}
+
+void Widget::on_insertPlainButton_clicked()
+{
+ if (ui->newBlockBeforeCB->isChecked()) {
+ if (ui->moveToBeginningRB->isChecked())
+ ui->textEdit->moveCursor(QTextCursor::StartOfBlock);
+ if (ui->moveToEndRB->isChecked())
+ ui->textEdit->moveCursor(QTextCursor::EndOfBlock);
+ if (ui->defaultBlockFormatCB->isChecked())
+ ui->textEdit->textCursor().insertBlock(QTextBlockFormat());
+ else
+ ui->textEdit->textCursor().insertBlock();
+ }
+ ui->textEdit->insertPlainText(ui->plainTextEdit->toPlainText());
+ if (ui->newBlockBeforeCB->isChecked()) {
+ if (ui->defaultBlockFormatCB->isChecked())
+ ui->textEdit->textCursor().insertBlock(QTextBlockFormat());
+ else
+ ui->textEdit->textCursor().insertBlock();
+ }
+}
+
+void Widget::on_plainTextCB_activated(int index)
+{
+ if (index < m_texts.size()) {
+ auto it = m_texts.constBegin();
+ std::advance(it, index);
+ ui->plainTextEdit->setPlainText(it.value());
+ }
+}
+
+void Widget::on_richTextCB_activated(int index)
+{
+ if (index < m_texts.size()) {
+ auto it = m_texts.constBegin();
+ std::advance(it, index);
+ if (it.key().contains(u"markdown", Qt::CaseInsensitive))
+ ui->textEdit->setMarkdown(it.value());
+ else if (it.key().contains(u"html", Qt::CaseInsensitive))
+ ui->textEdit->setHtml(it.value());
+ else
+ ui->textEdit->setPlainText(it.value());
+ }
+}
+
+void Widget::on_textEdit_cursorPositionChanged()
+{
+ QTextBlock block = ui->textEdit->textCursor().block();
+ ui->blockDesc->setText(u"%1 of %2"_s
+ .arg(block.blockNumber())
+ .arg(ui->textEdit->document()->blockCount()));
+ QTextList *list = block.textList();
+ if (list) {
+ QTextBlock first = list->item(0);
+ ui->listDesc->setText(u"index %1: \"%2\" is in list\nwith style %3 and %4 items starting with %5: %6 %7"_s
+ .arg(list->itemNumber(block))
+ .arg(block.text())
+ .arg(list->format().style())
+ .arg(list->count())
+ .arg(list->format().start())
+ .arg(list->format().style() > QTextListFormat::ListDecimal ? u""_s : list->itemText(first))
+ .arg(first.text()) );
+ } else {
+ ui->listDesc->setText(u"not in a list"_s);
+ }
+}
+
+void Widget::on_saveButton_clicked()
+{
+ m_fileDialog.open();
+}
+
+void Widget::onSave(const QString &file)
+{
+ QFile f(file);
+ if (f.open(QFile::WriteOnly)) {
+ if (m_fileDialog.selectedMimeTypeFilter() == u"text/markdown")
+ f.write(ui->textEdit->toMarkdown().toUtf8());
+ else if (m_fileDialog.selectedMimeTypeFilter() == u"text/html")
+ f.write(ui->textEdit->toHtml().toUtf8());
+ else if (m_fileDialog.selectedMimeTypeFilter() == u"text/plain")
+ f.write(ui->textEdit->toPlainText().toUtf8());
+ else if (m_fileDialog.selectedMimeTypeFilter() == u"application/vnd.oasis.opendocument.text") {
+ QBuffer buffer;
+ QTextDocumentWriter writer(&buffer, "ODF");
+ writer.write(ui->textEdit->document());
+ buffer.close();
+ f.write(buffer.data());
+ }
+ f.close();
+ }
+}
+
diff --git a/tests/manual/qtextcursorinsert/widget.h b/tests/manual/qtextcursorinsert/widget.h
new file mode 100644
index 0000000000..9185da975c
--- /dev/null
+++ b/tests/manual/qtextcursorinsert/widget.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef WIDGET_H
+#define WIDGET_H
+
+#include <QFileDialog>
+#include <QMap>
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+namespace Ui { class Widget; }
+QT_END_NAMESPACE
+
+class Widget : public QWidget
+{
+ Q_OBJECT
+
+public:
+ Widget(QWidget *parent = nullptr);
+ ~Widget();
+
+private slots:
+ void on_insertMarkdownButton_clicked();
+ void on_insertHtmlButton_clicked();
+ void on_insertPlainButton_clicked();
+ void on_plainTextCB_activated(int index);
+ void on_richTextCB_activated(int index);
+ void on_textEdit_cursorPositionChanged();
+ void on_saveButton_clicked();
+ void onSave(const QString &file);
+
+private:
+ Ui::Widget *ui;
+ QMap<QString, QString> m_texts;
+ QFileDialog m_fileDialog;
+};
+#endif // WIDGET_H
diff --git a/tests/manual/qtextcursorinsert/widget.ui b/tests/manual/qtextcursorinsert/widget.ui
new file mode 100644
index 0000000000..42a4a60acb
--- /dev/null
+++ b/tests/manual/qtextcursorinsert/widget.ui
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>Widget</class>
+ <widget class="QWidget" name="Widget">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1200</width>
+ <height>600</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>Try inserting (or dragging) text on right into text on left</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout">
+ <item row="0" column="0">
+ <widget class="QTextEdit" name="textEdit">
+ <property name="html">
+ <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+p, li { white-space: pre-wrap; }
+hr { height: 1px; border-width: 0; }
+li.unchecked::marker { content: &quot;\2610&quot;; }
+li.checked::marker { content: &quot;\2612&quot;; }
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;ol style=&quot;margin-top: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; -qt-list-indent: 1;&quot;&gt;
+&lt;li style=&quot; margin-top:12px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;bread&lt;/li&gt;
+&lt;li style=&quot; margin-top:0px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;milk&lt;/li&gt;&lt;/ol&gt;&lt;/body&gt;&lt;/html&gt;</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QPlainTextEdit" name="plainTextEdit">
+ <property name="plainText">
+ <string>0) eggs
+1) maple syrup</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <layout class="QFormLayout" name="formLayout">
+ <item row="2" column="0">
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>List</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="1">
+ <widget class="QLabel" name="listDesc">
+ <property name="text">
+ <string/>
+ </property>
+ <property name="textFormat">
+ <enum>Qt::PlainText</enum>
+ </property>
+ <property name="wordWrap">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QComboBox" name="richTextCB"/>
+ </item>
+ <item row="0" column="0">
+ <widget class="QLabel" name="label_2">
+ <property name="text">
+ <string>Change to</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0">
+ <widget class="QLabel" name="label_3">
+ <property name="text">
+ <string>Block</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="1">
+ <widget class="QLabel" name="blockDesc">
+ <property name="text">
+ <string/>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="0">
+ <widget class="QPushButton" name="saveButton">
+ <property name="text">
+ <string>Save</string>
+ </property>
+ </widget>
+ </item>
+ <item row="3" 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>
+ </item>
+ <item row="1" column="1">
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QComboBox" name="plainTextCB"/>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_2">
+ <property name="title">
+ <string>Before</string>
+ </property>
+ <layout class="QGridLayout" name="gridLayout_2">
+ <item row="4" column="0">
+ <widget class="QCheckBox" name="newBlockBeforeCB">
+ <property name="text">
+ <string>new block</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="2">
+ <widget class="QRadioButton" name="moveToEndRB">
+ <property name="text">
+ <string>move to end of block</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="1">
+ <widget class="QRadioButton" name="moveToBeginningRB">
+ <property name="text">
+ <string>move to beginning of block</string>
+ </property>
+ </widget>
+ </item>
+ <item row="0" column="0">
+ <widget class="QRadioButton" name="radioButton">
+ <property name="text">
+ <string>nothing</string>
+ </property>
+ </widget>
+ </item>
+ <item row="4" column="1">
+ <widget class="QCheckBox" name="defaultBlockFormatCB">
+ <property name="text">
+ <string>default block format</string>
+ </property>
+ <property name="checked">
+ <bool>true</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox">
+ <property name="title">
+ <string>Insert</string>
+ </property>
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="QPushButton" name="insertMarkdownButton">
+ <property name="text">
+ <string>Markdown</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="insertHtmlButton">
+ <property name="text">
+ <string>HTML</string>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QPushButton" name="insertPlainButton">
+ <property name="text">
+ <string>Plain</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ <item>
+ <widget class="QGroupBox" name="groupBox_3">
+ <property name="title">
+ <string>After</string>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout_3">
+ <item>
+ <widget class="QCheckBox" name="newBlockAfterCB">
+ <property name="text">
+ <string>new block</string>
+ </property>
+ <property name="checked">
+ <bool>false</bool>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </widget>
+ </item>
+ </layout>
+ </item>
+ </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/qtexteditlist/CMakeLists.txt b/tests/manual/qtexteditlist/CMakeLists.txt
index 7b11cade93..e0cf2f0f4d 100644
--- a/tests/manual/qtexteditlist/CMakeLists.txt
+++ b/tests/manual/qtexteditlist/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtexteditlist.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtexteditlist Binary:
@@ -9,12 +10,9 @@ qt_internal_add_manual_test(qtexteditlist
SOURCES
main.cpp
widget.cpp widget.h widget.ui
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
uic
)
-
-#### Keys ignored in scope 1:.:.:qtexteditlist.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qtexteditlist/main.cpp b/tests/manual/qtexteditlist/main.cpp
index 7efcdf88a4..916855bb89 100644
--- a/tests/manual/qtexteditlist/main.cpp
+++ b/tests/manual/qtexteditlist/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 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 "widget.h"
#include <QApplication>
diff --git a/tests/manual/qtexteditlist/widget.cpp b/tests/manual/qtexteditlist/widget.cpp
index b356093200..671328d804 100644
--- a/tests/manual/qtexteditlist/widget.cpp
+++ b/tests/manual/qtexteditlist/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 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 "widget.h"
#include "ui_widget.h"
diff --git a/tests/manual/qtexteditlist/widget.h b/tests/manual/qtexteditlist/widget.h
index f22dae6add..a376b358d7 100644
--- a/tests/manual/qtexteditlist/widget.h
+++ b/tests/manual/qtexteditlist/widget.h
@@ -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
#ifndef WIDGET_H
#define WIDGET_H
diff --git a/tests/manual/qtexttableborders/CMakeLists.txt b/tests/manual/qtexttableborders/CMakeLists.txt
index 0f88a2443b..edae83e643 100644
--- a/tests/manual/qtexttableborders/CMakeLists.txt
+++ b/tests/manual/qtexttableborders/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtexttableborders.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtexttableborders Binary:
@@ -9,7 +10,7 @@ qt_internal_add_manual_test(qtexttableborders
SOURCES
main.cpp
widget.cpp widget.h widget.ui
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::PrintSupport
Qt::Widgets
@@ -29,7 +30,3 @@ qt_internal_add_resource(qtexttableborders "resources"
FILES
${resources_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:qtexttableborders.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qtexttableborders/main.cpp b/tests/manual/qtexttableborders/main.cpp
index a8fdf7becc..b45e853938 100644
--- a/tests/manual/qtexttableborders/main.cpp
+++ b/tests/manual/qtexttableborders/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "widget.h"
#include <QApplication>
diff --git a/tests/manual/qtexttableborders/widget.cpp b/tests/manual/qtexttableborders/widget.cpp
index 21d958ce81..80479a3d99 100644
--- a/tests/manual/qtexttableborders/widget.cpp
+++ b/tests/manual/qtexttableborders/widget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "widget.h"
#include "ui_widget.h"
@@ -93,7 +68,7 @@ void Widget::onPrint()
QPrinter printer(QPrinter::HighResolution);
QPrintDialog dlg(&printer, this);
if (ui->htmlEdit->textCursor().hasSelection())
- dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
+ dlg.setOption(QAbstractPrintDialog::PrintSelection, true);
dlg.setWindowTitle(tr("Print Document"));
if (dlg.exec() == QDialog::Accepted) {
ui->htmlEdit->print(&printer);
diff --git a/tests/manual/qtexttableborders/widget.h b/tests/manual/qtexttableborders/widget.h
index 9cf459e1cd..d604861144 100644
--- a/tests/manual/qtexttableborders/widget.h
+++ b/tests/manual/qtexttableborders/widget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef WIDGET_H
#define WIDGET_H
diff --git a/tests/manual/qtouchevent/CMakeLists.txt b/tests/manual/qtouchevent/CMakeLists.txt
index 21042a12c8..6dbaa840cb 100644
--- a/tests/manual/qtouchevent/CMakeLists.txt
+++ b/tests/manual/qtouchevent/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtouchevent.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtouchevent Binary:
@@ -9,7 +10,7 @@ qt_internal_add_manual_test(qtouchevent
form.ui
main.cpp
touchwidget.cpp touchwidget.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
diff --git a/tests/manual/qtouchevent/main.cpp b/tests/manual/qtouchevent/main.cpp
index a5162d6f12..25b63fafb3 100644
--- a/tests/manual/qtouchevent/main.cpp
+++ b/tests/manual/qtouchevent/main.cpp
@@ -1,33 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the test suite 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>
#include <QTest>
+#include <QTimer>
#include "ui_form.h"
#include "touchwidget.h"
diff --git a/tests/manual/qtouchevent/touchwidget.cpp b/tests/manual/qtouchevent/touchwidget.cpp
index 7eb53ab720..7a8a0098e0 100644
--- a/tests/manual/qtouchevent/touchwidget.cpp
+++ b/tests/manual/qtouchevent/touchwidget.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 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 "touchwidget.h"
diff --git a/tests/manual/qtouchevent/touchwidget.h b/tests/manual/qtouchevent/touchwidget.h
index 4036693169..d4128634f3 100644
--- a/tests/manual/qtouchevent/touchwidget.h
+++ b/tests/manual/qtouchevent/touchwidget.h
@@ -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
#ifndef TOUCHWIDGET_H
#define TOUCHWIDGET_H
diff --git a/tests/manual/qvulkaninstance/CMakeLists.txt b/tests/manual/qvulkaninstance/CMakeLists.txt
index eafd1baa0a..9b44ca3116 100644
--- a/tests/manual/qvulkaninstance/CMakeLists.txt
+++ b/tests/manual/qvulkaninstance/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qvulkaninstance.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qvulkaninstance Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(qvulkaninstance
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
-
-#### Keys ignored in scope 1:.:.:qvulkaninstance.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/qvulkaninstance/main.cpp b/tests/manual/qvulkaninstance/main.cpp
index 10c32fc84f..48825b34f6 100644
--- a/tests/manual/qvulkaninstance/main.cpp
+++ b/tests/manual/qvulkaninstance/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QGuiApplication>
#include <QVulkanInstance>
diff --git a/tests/manual/qwidget_zorder/CMakeLists.txt b/tests/manual/qwidget_zorder/CMakeLists.txt
index 7d769c2be9..dc7188a8ba 100644
--- a/tests/manual/qwidget_zorder/CMakeLists.txt
+++ b/tests/manual/qwidget_zorder/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qwidget_zorder.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qwidget_zorder Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(qwidget_zorder
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/qwidget_zorder/main.cpp b/tests/manual/qwidget_zorder/main.cpp
index 437e8a1619..45285f9b8e 100644
--- a/tests/manual/qwidget_zorder/main.cpp
+++ b/tests/manual/qwidget_zorder/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 test suite 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>
#include <QPushButton>
diff --git a/tests/manual/repaint/CMakeLists.txt b/tests/manual/repaint/CMakeLists.txt
index fd579a76a2..909e66d8bc 100644
--- a/tests/manual/repaint/CMakeLists.txt
+++ b/tests/manual/repaint/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from repaint.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(mainwindow)
add_subdirectory(scrollarea)
diff --git a/tests/manual/repaint/mainwindow/CMakeLists.txt b/tests/manual/repaint/mainwindow/CMakeLists.txt
index f632da9827..82b0c1ccdb 100644
--- a/tests/manual/repaint/mainwindow/CMakeLists.txt
+++ b/tests/manual/repaint/mainwindow/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from mainwindow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_manual_mainwindow Binary:
@@ -9,7 +10,7 @@ qt_internal_add_manual_test(tst_manual_mainwindow
SOURCES
../shared/shared.h
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/repaint/mainwindow/main.cpp b/tests/manual/repaint/mainwindow/main.cpp
index adb102ad32..ea024d22a5 100644
--- a/tests/manual/repaint/mainwindow/main.cpp
+++ b/tests/manual/repaint/mainwindow/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 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 <QMainWindow>
@@ -51,9 +26,9 @@ int main(int argc, char **argv)
QToolBar *toolBar = new QToolBar();
- toolBar->addWidget(new StaticWidget())->setVisible(true);;
+ toolBar->addWidget(new StaticWidget())->setVisible(true);
- toolBar->addWidget(new QSpinBox())->setVisible(true);;
+ toolBar->addWidget(new QSpinBox())->setVisible(true);
mainWindow.addToolBar(toolBar);
mainWindow.resize(600, 400);
diff --git a/tests/manual/repaint/scrollarea/CMakeLists.txt b/tests/manual/repaint/scrollarea/CMakeLists.txt
index 54ab0fd410..a21cdb3f1c 100644
--- a/tests/manual/repaint/scrollarea/CMakeLists.txt
+++ b/tests/manual/repaint/scrollarea/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from scrollarea.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_manual_scrollarea Binary:
@@ -9,7 +10,7 @@ qt_internal_add_manual_test(tst_manual_scrollarea
SOURCES
../shared/shared.h
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/repaint/scrollarea/main.cpp b/tests/manual/repaint/scrollarea/main.cpp
index 926c5ab853..b45a85c353 100644
--- a/tests/manual/repaint/scrollarea/main.cpp
+++ b/tests/manual/repaint/scrollarea/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 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 <QMainWindow>
diff --git a/tests/manual/repaint/shared/shared.h b/tests/manual/repaint/shared/shared.h
index d6bef849f5..0a69011b6c 100644
--- a/tests/manual/repaint/shared/shared.h
+++ b/tests/manual/repaint/shared/shared.h
@@ -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 <QWidget>
#include <QPainter>
@@ -53,20 +28,20 @@ public:
const int rectSize = 10;
QRect rect(pos.x() - rectSize, pos.y() - rectSize, rectSize *2, rectSize * 2);
- QList<QRect> updateRects;
- updateRects.append(rect.translated(rectSize * 2, rectSize * 2));
- updateRects.append(rect.translated(rectSize * 2, -rectSize * 2));
- updateRects.append(rect.translated(-rectSize * 2, rectSize * 2));
- updateRects.append(rect.translated(-rectSize * 2, -rectSize * 2));
-
+ const QRect updateRects[] = {
+ rect.translated(rectSize * 2, rectSize * 2),
+ rect.translated(rectSize * 2, -rectSize * 2),
+ rect.translated(-rectSize * 2, rectSize * 2),
+ rect.translated(-rectSize * 2, -rectSize * 2),
+ };
bool useRegion = false;
if (useRegion) {
QRegion region;
- region.setRects(updateRects.data(), 4);
+ region.setRects(updateRects, 4);
update(region);
} else {
- foreach (QRect rect, updateRects)
+ for (QRect rect : updateRects)
update(rect);
}
}
diff --git a/tests/manual/repaint/splitter/CMakeLists.txt b/tests/manual/repaint/splitter/CMakeLists.txt
index 9799abce09..f9328ed000 100644
--- a/tests/manual/repaint/splitter/CMakeLists.txt
+++ b/tests/manual/repaint/splitter/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from splitter.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## splitter Binary:
@@ -9,7 +10,7 @@ qt_internal_add_manual_test(splitter
SOURCES
../shared/shared.h
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/repaint/splitter/main.cpp b/tests/manual/repaint/splitter/main.cpp
index 6f5174ef87..62f9f74d5b 100644
--- a/tests/manual/repaint/splitter/main.cpp
+++ b/tests/manual/repaint/splitter/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 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 "../shared/shared.h"
diff --git a/tests/manual/repaint/tableview/CMakeLists.txt b/tests/manual/repaint/tableview/CMakeLists.txt
index 1885076501..172957c631 100644
--- a/tests/manual/repaint/tableview/CMakeLists.txt
+++ b/tests/manual/repaint/tableview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from tableview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tableview Binary:
@@ -9,7 +10,7 @@ qt_internal_add_manual_test(tableview
SOURCES
../shared/shared.h
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/repaint/tableview/main.cpp b/tests/manual/repaint/tableview/main.cpp
index 07d1529d1d..f7d04c6a60 100644
--- a/tests/manual/repaint/tableview/main.cpp
+++ b/tests/manual/repaint/tableview/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 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 "../shared/shared.h"
diff --git a/tests/manual/repaint/task141091/CMakeLists.txt b/tests/manual/repaint/task141091/CMakeLists.txt
index 1ef2896c03..6483e08ddb 100644
--- a/tests/manual/repaint/task141091/CMakeLists.txt
+++ b/tests/manual/repaint/task141091/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from task141091.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## task141091 Binary:
@@ -7,7 +8,7 @@
qt_internal_add_manual_test(task141091
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/repaint/task141091/main.cpp b/tests/manual/repaint/task141091/main.cpp
index 4fb5bcaeaf..2fceea0148 100644
--- a/tests/manual/repaint/task141091/main.cpp
+++ b/tests/manual/repaint/task141091/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 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 <QMainWindow>
diff --git a/tests/manual/repaint/toplevel/CMakeLists.txt b/tests/manual/repaint/toplevel/CMakeLists.txt
index c345ce974c..30dfcab689 100644
--- a/tests/manual/repaint/toplevel/CMakeLists.txt
+++ b/tests/manual/repaint/toplevel/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from toplevel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_manual_toplevel Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(tst_manual_toplevel
SOURCES
../shared/shared.h
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/repaint/toplevel/main.cpp b/tests/manual/repaint/toplevel/main.cpp
index 670e24b69e..b93bf2fec8 100644
--- a/tests/manual/repaint/toplevel/main.cpp
+++ b/tests/manual/repaint/toplevel/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 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 "../shared/shared.h"
diff --git a/tests/manual/repaint/widget/CMakeLists.txt b/tests/manual/repaint/widget/CMakeLists.txt
index 2900692f1b..27097a980f 100644
--- a/tests/manual/repaint/widget/CMakeLists.txt
+++ b/tests/manual/repaint/widget/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from widget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## widget Binary:
@@ -9,7 +10,7 @@ qt_internal_add_manual_test(widget
SOURCES
../shared/shared.h
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/repaint/widget/main.cpp b/tests/manual/repaint/widget/main.cpp
index 681d1fb67a..b4400d5170 100644
--- a/tests/manual/repaint/widget/main.cpp
+++ b/tests/manual/repaint/widget/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 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 "../shared/shared.h"
diff --git a/tests/manual/rhi/CMakeLists.txt b/tests/manual/rhi/CMakeLists.txt
index 5b756dbee3..8f48bf219d 100644
--- a/tests/manual/rhi/CMakeLists.txt
+++ b/tests/manual/rhi/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from rhi.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(hellominimalcrossgfxtriangle)
add_subdirectory(compressedtexture_bc1)
@@ -23,4 +24,16 @@ add_subdirectory(instancing)
add_subdirectory(noninstanced)
add_subdirectory(tex3d)
add_subdirectory(texturearray)
+add_subdirectory(polygonmode)
add_subdirectory(tessellation)
+add_subdirectory(geometryshader)
+add_subdirectory(stenciloutline)
+add_subdirectory(stereo)
+add_subdirectory(tex1d)
+add_subdirectory(displacement)
+add_subdirectory(imguirenderer)
+add_subdirectory(multiview)
+add_subdirectory(msaatextureresolve)
+if(QT_FEATURE_widgets)
+ add_subdirectory(rhiwidgetproto)
+endif()
diff --git a/tests/manual/rhi/compressedtexture_bc1/CMakeLists.txt b/tests/manual/rhi/compressedtexture_bc1/CMakeLists.txt
index ee50072919..384eb55eb3 100644
--- a/tests/manual/rhi/compressedtexture_bc1/CMakeLists.txt
+++ b/tests/manual/rhi/compressedtexture_bc1/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from compressedtexture_bc1.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## compressedtexture_bc1 Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(compressedtexture_bc1
GUI
SOURCES
compressedtexture_bc1.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -35,7 +36,3 @@ qt_internal_add_resource(compressedtexture_bc1 "compressedtexture_bc1"
FILES
${compressedtexture_bc1_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:compressedtexture_bc1.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/compressedtexture_bc1/compressedtexture_bc1.cpp b/tests/manual/rhi/compressedtexture_bc1/compressedtexture_bc1.cpp
index 24227305aa..80eb63783e 100644
--- a/tests/manual/rhi/compressedtexture_bc1/compressedtexture_bc1.cpp
+++ b/tests/manual/rhi/compressedtexture_bc1/compressedtexture_bc1.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
#include "../shared/cube.h"
diff --git a/tests/manual/rhi/compressedtexture_bc1_subupload/CMakeLists.txt b/tests/manual/rhi/compressedtexture_bc1_subupload/CMakeLists.txt
index e77e09e2e6..370f7bf6f4 100644
--- a/tests/manual/rhi/compressedtexture_bc1_subupload/CMakeLists.txt
+++ b/tests/manual/rhi/compressedtexture_bc1_subupload/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from compressedtexture_bc1_subupload.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## compressedtexture_bc1_subupload Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(compressedtexture_bc1_subupload
GUI
SOURCES
compressedtexture_bc1_subupload.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -39,7 +40,3 @@ qt_internal_add_resource(compressedtexture_bc1_subupload "compressedtexture_bc1_
FILES
${compressedtexture_bc1_subupload_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:compressedtexture_bc1_subupload.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/compressedtexture_bc1_subupload/compressedtexture_bc1_subupload.cpp b/tests/manual/rhi/compressedtexture_bc1_subupload/compressedtexture_bc1_subupload.cpp
index 071f6e23ca..a98744afc0 100644
--- a/tests/manual/rhi/compressedtexture_bc1_subupload/compressedtexture_bc1_subupload.cpp
+++ b/tests/manual/rhi/compressedtexture_bc1_subupload/compressedtexture_bc1_subupload.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
#include "../shared/cube.h"
@@ -170,7 +123,7 @@ void Window::customRender()
}
if (!d.compressedData.isEmpty()) {
{
- QRhiTextureUploadDescription desc({ 0, 0, { d.compressedData[0].constData(), int(d.compressedData[0].size()) } });
+ QRhiTextureUploadDescription desc({ 0, 0, { d.compressedData[0].constData(), quint32(d.compressedData[0].size()) } });
u->uploadTexture(d.tex, desc);
d.compressedData.clear();
}
diff --git a/tests/manual/rhi/computebuffer/CMakeLists.txt b/tests/manual/rhi/computebuffer/CMakeLists.txt
index a47a8436f8..5deec908aa 100644
--- a/tests/manual/rhi/computebuffer/CMakeLists.txt
+++ b/tests/manual/rhi/computebuffer/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from computebuffer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## computebuffer Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(computebuffer
GUI
SOURCES
computebuffer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -28,5 +29,4 @@ qt_internal_add_resource(computebuffer "computebuffer"
)
-#### Keys ignored in scope 1:.:.:computebuffer.pro:<TRUE>:
# TEMPLATE = "app"
diff --git a/tests/manual/rhi/computebuffer/computebuffer.cpp b/tests/manual/rhi/computebuffer/computebuffer.cpp
index 942de2821b..a54c0817b4 100644
--- a/tests/manual/rhi/computebuffer/computebuffer.cpp
+++ b/tests/manual/rhi/computebuffer/computebuffer.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
#include <QRandomGenerator>
diff --git a/tests/manual/rhi/computeimage/CMakeLists.txt b/tests/manual/rhi/computeimage/CMakeLists.txt
index f7ecd5ce65..955dd9a67c 100644
--- a/tests/manual/rhi/computeimage/CMakeLists.txt
+++ b/tests/manual/rhi/computeimage/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from computeimage.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## computeimage Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(computeimage
GUI
SOURCES
computeimage.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -36,7 +37,3 @@ qt_internal_add_resource(computeimage "computeimage"
FILES
${computeimage_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:computeimage.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/computeimage/computeimage.cpp b/tests/manual/rhi/computeimage/computeimage.cpp
index 35c48a0451..5da68e4a18 100644
--- a/tests/manual/rhi/computeimage/computeimage.cpp
+++ b/tests/manual/rhi/computeimage/computeimage.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
diff --git a/tests/manual/rhi/cubemap/CMakeLists.txt b/tests/manual/rhi/cubemap/CMakeLists.txt
index b3e3206cf5..9df6ca1927 100644
--- a/tests/manual/rhi/cubemap/CMakeLists.txt
+++ b/tests/manual/rhi/cubemap/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from cubemap.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## cubemap Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(cubemap
GUI
SOURCES
cubemap.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -26,7 +27,3 @@ qt_internal_add_resource(cubemap "cubemap"
FILES
${cubemap_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:cubemap.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/cubemap/cubemap.cpp b/tests/manual/rhi/cubemap/cubemap.cpp
index 7949d2ecfc..bf027b49de 100644
--- a/tests/manual/rhi/cubemap/cubemap.cpp
+++ b/tests/manual/rhi/cubemap/cubemap.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
#include "../shared/cube.h"
diff --git a/tests/manual/rhi/cubemap_render/CMakeLists.txt b/tests/manual/rhi/cubemap_render/CMakeLists.txt
index 66abf688ea..e84bfd5920 100644
--- a/tests/manual/rhi/cubemap_render/CMakeLists.txt
+++ b/tests/manual/rhi/cubemap_render/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from cubemap_render.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## cubemap_render Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(cubemap_render
GUI
SOURCES
cubemap_render.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -29,7 +30,3 @@ qt_internal_add_resource(cubemap_render "cubemap_render"
FILES
${cubemap_render_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:cubemap_render.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/cubemap_render/cubemap_render.cpp b/tests/manual/rhi/cubemap_render/cubemap_render.cpp
index 3417fbf7c2..3eb013937f 100644
--- a/tests/manual/rhi/cubemap_render/cubemap_render.cpp
+++ b/tests/manual/rhi/cubemap_render/cubemap_render.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Demonstrates rendering to two cubemaps in two different ways:
// - one by one, to each face,
diff --git a/tests/manual/rhi/cubemap_scissor/CMakeLists.txt b/tests/manual/rhi/cubemap_scissor/CMakeLists.txt
index dd59b1791c..02ecd3db20 100644
--- a/tests/manual/rhi/cubemap_scissor/CMakeLists.txt
+++ b/tests/manual/rhi/cubemap_scissor/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from cubemap_scissor.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## cubemap_scissor Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(cubemap_scissor
GUI
SOURCES
cubemap_scissor.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -35,7 +36,3 @@ qt_internal_add_resource(cubemap_scissor "cubemap_scissor"
FILES
${cubemap_scissor_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:cubemap_scissor.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/cubemap_scissor/cubemap_scissor.cpp b/tests/manual/rhi/cubemap_scissor/cubemap_scissor.cpp
index 9a6d55ed69..78933830a1 100644
--- a/tests/manual/rhi/cubemap_scissor/cubemap_scissor.cpp
+++ b/tests/manual/rhi/cubemap_scissor/cubemap_scissor.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// This is a test for scissoring. Based on the cubemap test (because there the
// rendering covers the entire viewport which is what we need here). The
diff --git a/tests/manual/rhi/displacement/CMakeLists.txt b/tests/manual/rhi/displacement/CMakeLists.txt
new file mode 100644
index 0000000000..8157626f50
--- /dev/null
+++ b/tests/manual/rhi/displacement/CMakeLists.txt
@@ -0,0 +1,26 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(displacement
+ GUI
+ SOURCES
+ displacement.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
+
+qt_internal_add_resource(displacement "displacement"
+ PREFIX
+ "/"
+ FILES
+ "material.vert.qsb"
+ "material.tesc.qsb"
+ "material.tese.qsb"
+ "material.frag.qsb"
+ "heightmap.png"
+)
+
+set(imgui_base ../shared/imgui)
+set(imgui_target displacement)
+include(${imgui_base}/imgui.cmakeinc)
diff --git a/tests/manual/rhi/displacement/buildshaders b/tests/manual/rhi/displacement/buildshaders
new file mode 100755
index 0000000000..87d14a4742
--- /dev/null
+++ b/tests/manual/rhi/displacement/buildshaders
@@ -0,0 +1,7 @@
+#!/bin/sh
+qsb --glsl 320es,410 --hlsl 50 --msl 12 --msltess material.vert -o material.vert.qsb
+qsb --glsl 320es,410 --hlsl 50 --msl 12 material.frag -o material.frag.qsb
+qsb --glsl 320es,410 --msl 12 --tess-mode triangles material.tesc -o material.tesc.qsb
+qsb --glsl 320es,410 --msl 12 --tess-vertex-count 3 material.tese -o material.tese.qsb
+qsb -r hlsl,50,material_hull.hlsl material.tesc.qsb
+qsb -r hlsl,50,material_domain.hlsl material.tese.qsb
diff --git a/tests/manual/rhi/displacement/buildshaders.bat b/tests/manual/rhi/displacement/buildshaders.bat
new file mode 100644
index 0000000000..552277491d
--- /dev/null
+++ b/tests/manual/rhi/displacement/buildshaders.bat
@@ -0,0 +1,8 @@
+qsb --glsl 320es,410 --hlsl 50 --msl 12 --msltess material.vert -o material.vert.qsb
+qsb --glsl 320es,410 --hlsl 50 --msl 12 material.frag -o material.frag.qsb
+
+qsb --glsl 320es,410 --msl 12 --tess-mode triangles material.tesc -o material.tesc.qsb
+qsb --glsl 320es,410 --msl 12 --tess-vertex-count 3 material.tese -o material.tese.qsb
+
+qsb -r hlsl,50,material_hull.hlsl material.tesc.qsb
+qsb -r hlsl,50,material_domain.hlsl material.tese.qsb
diff --git a/tests/manual/rhi/displacement/displacement.cpp b/tests/manual/rhi/displacement/displacement.cpp
new file mode 100644
index 0000000000..680ffa0628
--- /dev/null
+++ b/tests/manual/rhi/displacement/displacement.cpp
@@ -0,0 +1,199 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#define EXAMPLEFW_IMGUI
+#include "../shared/examplefw.h"
+#include "../shared/cube.h"
+
+// Another tessellation test. Compatible with Direct 3D via hand-written hull
+// and domain shaders, but this already pushes the limits of what is sensible
+// when it comes to injecting hand-written HLSL code to get tessellation
+// functional (cbuffer layout, resource registers all need to be figured out
+// manually and works only as long as the GLSL source is not changing, etc.).
+// Note that the domain shader must use SampleLevel (textureLod), it won't
+// compile for ds_5_0 otherwise.
+
+static const quint32 UBUF_SIZE = 80;
+
+struct {
+ QList<QRhiResource *> releasePool;
+
+ QRhiBuffer *vbuf;
+ QRhiBuffer *ubuf;
+ QRhiTexture *tex;
+ QRhiSampler *sampler;
+ QRhiShaderResourceBindings *srb;
+ QRhiGraphicsPipeline *psWire;
+ QRhiGraphicsPipeline *psSolid;
+ bool rotate = true;
+ float rotation = 0.0f;
+ float viewZ = 0.0f;
+ float displacementAmount = 0.0f;
+ int tessInner = 4;
+ int tessOuter = 4;
+ bool useTex = false;
+ bool wireframe = true;
+
+ QRhiResourceUpdateBatch *initialUpdates = nullptr;
+} d;
+
+void Window::customInit()
+{
+ if (!m_r->isFeatureSupported(QRhi::Tessellation))
+ qFatal("Tessellation is not supported");
+
+ d.initialUpdates = m_r->nextResourceUpdateBatch();
+
+ d.vbuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(cube));
+ d.vbuf->create();
+ d.releasePool << d.vbuf;
+
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, cube);
+
+ d.ubuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, m_r->ubufAligned(UBUF_SIZE));
+ d.ubuf->create();
+ d.releasePool << d.ubuf;
+
+ QImage image;
+ image.load(":/heightmap.png");
+ if (image.isNull())
+ qFatal("Failed to load displacement map");
+
+ d.tex = m_r->newTexture(QRhiTexture::RGBA8, image.size());
+ d.tex->create();
+ d.releasePool << d.tex;
+
+ d.initialUpdates->uploadTexture(d.tex, image);
+
+ d.sampler = m_r->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
+ QRhiSampler::Repeat, QRhiSampler::Repeat);
+ d.releasePool << d.sampler;
+ d.sampler->create();
+
+ d.srb = m_r->newShaderResourceBindings();
+ d.releasePool << d.srb;
+ d.srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0,
+ QRhiShaderResourceBinding::TessellationControlStage
+ | QRhiShaderResourceBinding::TessellationEvaluationStage,
+ d.ubuf),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::TessellationEvaluationStage, d.tex, d.sampler)
+ });
+ d.srb->create();
+
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 3 * sizeof(float) },
+ { 2 * sizeof(float) },
+ { 3 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
+ { 1, 1, QRhiVertexInputAttribute::Float2, 0 },
+ { 2, 2, QRhiVertexInputAttribute::Float3, 0 }
+ });
+
+ const QRhiShaderStage stages[] = {
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/material.vert.qsb")) },
+ { QRhiShaderStage::TessellationControl, getShader(QLatin1String(":/material.tesc.qsb")) },
+ { QRhiShaderStage::TessellationEvaluation, getShader(QLatin1String(":/material.tese.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/material.frag.qsb")) }
+ };
+
+ d.psWire = m_r->newGraphicsPipeline();
+ d.releasePool << d.psWire;
+ d.psWire->setTopology(QRhiGraphicsPipeline::Patches);
+ d.psWire->setPatchControlPointCount(3);
+ d.psWire->setShaderStages(stages, stages + 4);
+ d.psWire->setDepthTest(true);
+ d.psWire->setDepthWrite(true);
+ d.psWire->setCullMode(QRhiGraphicsPipeline::Back);
+ d.psWire->setPolygonMode(QRhiGraphicsPipeline::Line);
+ d.psWire->setVertexInputLayout(inputLayout);
+ d.psWire->setShaderResourceBindings(d.srb);
+ d.psWire->setRenderPassDescriptor(m_rp);
+ d.psWire->create();
+
+ d.psSolid = m_r->newGraphicsPipeline();
+ d.releasePool << d.psSolid;
+ d.psSolid->setTopology(QRhiGraphicsPipeline::Patches);
+ d.psSolid->setPatchControlPointCount(3);
+ d.psSolid->setShaderStages(stages, stages + 4);
+ d.psSolid->setDepthTest(true);
+ d.psSolid->setDepthWrite(true);
+ d.psSolid->setCullMode(QRhiGraphicsPipeline::Back);
+ d.psSolid->setVertexInputLayout(inputLayout);
+ d.psSolid->setShaderResourceBindings(d.srb);
+ d.psSolid->setRenderPassDescriptor(m_rp);
+ d.psSolid->create();
+}
+
+void Window::customRelease()
+{
+ qDeleteAll(d.releasePool);
+ d.releasePool.clear();
+}
+
+void Window::customRender()
+{
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiResourceUpdateBatch *u = nullptr;
+ if (d.initialUpdates) {
+ u = d.initialUpdates;
+ d.initialUpdates = nullptr;
+ }
+
+ char *p = d.ubuf->beginFullDynamicBufferUpdateForCurrentFrame();
+ QMatrix4x4 mvp = m_proj;
+ mvp.translate(0, 0, d.viewZ);
+ mvp.rotate(d.rotation, 1, 1, 0);
+ mvp.scale(0.5f);
+
+ memcpy(p, mvp.constData(), 64);
+ memcpy(p + 64, &d.displacementAmount, sizeof(float));
+ float tessInnerFloat = d.tessInner;
+ memcpy(p + 68, &tessInnerFloat, sizeof(float));
+ float tessOuterFloat = d.tessOuter;
+ memcpy(p + 72, &tessOuterFloat, sizeof(float));
+ qint32 useTex = d.useTex ? 1 : 0;
+ memcpy(p + 76, &useTex, sizeof(qint32));
+
+ d.ubuf->endFullDynamicBufferUpdateForCurrentFrame();
+
+ const QRhiCommandBuffer::VertexInput vbufBinding[] = {
+ { d.vbuf, 0 },
+ { d.vbuf, quint32(36 * 3 * sizeof(float)) },
+ { d.vbuf, quint32(36 * (3 + 2) * sizeof(float)) }
+ };
+
+ cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 }, u, QRhiCommandBuffer::DoNotTrackResourcesForCompute);
+
+ cb->setGraphicsPipeline(d.wireframe ? d.psWire : d.psSolid);
+ cb->setViewport({ 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) });
+ cb->setShaderResources(d.srb);
+ cb->setVertexInput(0, 3, vbufBinding);
+ cb->draw(36);
+
+ m_imguiRenderer->render();
+
+ cb->endPass();
+
+ if (d.rotate)
+ d.rotation += 1;
+}
+
+void Window::customGui()
+{
+ ImGui::SetNextWindowPos(ImVec2(10, 10), ImGuiCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(500, 250), ImGuiCond_FirstUseEver);
+ ImGui::Begin("Test");
+ ImGui::SliderInt("Inner", &d.tessInner, 0, 20);
+ ImGui::SliderInt("Outer", &d.tessOuter, 0, 20);
+ ImGui::SliderFloat("Displacement", &d.displacementAmount, 0.0f, 4.0f);
+ ImGui::Checkbox("Use displacement texture", &d.useTex);
+ ImGui::SliderFloat("Z", &d.viewZ, -16.0f, 4.0f);
+ ImGui::Checkbox("Rotate", &d.rotate);
+ ImGui::Checkbox("Wireframe", &d.wireframe);
+ ImGui::End();
+}
diff --git a/tests/manual/rhi/displacement/heightmap.png b/tests/manual/rhi/displacement/heightmap.png
new file mode 100644
index 0000000000..701bf7f7b1
--- /dev/null
+++ b/tests/manual/rhi/displacement/heightmap.png
Binary files differ
diff --git a/tests/manual/rhi/displacement/material.frag b/tests/manual/rhi/displacement/material.frag
new file mode 100644
index 0000000000..67c19e3c69
--- /dev/null
+++ b/tests/manual/rhi/displacement/material.frag
@@ -0,0 +1,10 @@
+#version 440
+
+layout(location = 0) out vec4 fragColor;
+
+layout(location = 1) in vec3 in_normal;
+
+void main()
+{
+ fragColor = vec4((normalize(in_normal) + 1.0) / 2.0, 1.0);
+}
diff --git a/tests/manual/rhi/displacement/material.frag.qsb b/tests/manual/rhi/displacement/material.frag.qsb
new file mode 100644
index 0000000000..b3d55e61de
--- /dev/null
+++ b/tests/manual/rhi/displacement/material.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/displacement/material.tesc b/tests/manual/rhi/displacement/material.tesc
new file mode 100644
index 0000000000..cb9e677034
--- /dev/null
+++ b/tests/manual/rhi/displacement/material.tesc
@@ -0,0 +1,32 @@
+#version 440
+
+layout(vertices = 3) out;
+
+layout(location = 0) in vec2 in_uv[];
+layout(location = 1) in vec3 in_normal[];
+
+layout(location = 0) out vec2 out_uv[];
+layout(location = 1) out vec3 out_normal[];
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ float displacementAmount;
+ float tessInner;
+ float tessOuter;
+ int useTex;
+};
+
+void main()
+{
+ if (gl_InvocationID == 0) {
+ gl_TessLevelOuter[0] = tessOuter;
+ gl_TessLevelOuter[1] = tessOuter;
+ gl_TessLevelOuter[2] = tessOuter;
+
+ gl_TessLevelInner[0] = tessInner;
+ }
+
+ gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
+ out_uv[gl_InvocationID] = in_uv[gl_InvocationID];
+ out_normal[gl_InvocationID] = in_normal[gl_InvocationID];
+}
diff --git a/tests/manual/rhi/displacement/material.tesc.qsb b/tests/manual/rhi/displacement/material.tesc.qsb
new file mode 100644
index 0000000000..1199555e47
--- /dev/null
+++ b/tests/manual/rhi/displacement/material.tesc.qsb
Binary files differ
diff --git a/tests/manual/rhi/displacement/material.tese b/tests/manual/rhi/displacement/material.tese
new file mode 100644
index 0000000000..ed05eaccf2
--- /dev/null
+++ b/tests/manual/rhi/displacement/material.tese
@@ -0,0 +1,37 @@
+#version 440
+
+layout(triangles, fractional_odd_spacing, ccw) in;
+
+layout(location = 0) in vec2 in_uv[];
+layout(location = 1) in vec3 in_normal[];
+
+//layout(location = 0) out vec2 out_uv;
+layout(location = 1) out vec3 out_normal;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ float displacementAmount;
+ float tessInner;
+ float tessOuter;
+ int useTex;
+};
+
+layout(binding = 1) uniform sampler2D displacementMap;
+
+void main()
+{
+ vec4 pos = (gl_TessCoord.x * gl_in[0].gl_Position) + (gl_TessCoord.y * gl_in[1].gl_Position) + (gl_TessCoord.z * gl_in[2].gl_Position);
+ vec2 uv = gl_TessCoord.x * in_uv[0].xy + gl_TessCoord.y * in_uv[1].xy;
+ vec3 normal = normalize(gl_TessCoord.x * in_normal[0] + gl_TessCoord.y * in_normal[1] + gl_TessCoord.z * in_normal[2]);
+
+ vec4 c = texture(displacementMap, uv);
+ const vec3 yCoeff_709 = vec3(0.2126, 0.7152, 0.0722);
+ float df = dot(c.rgb, yCoeff_709);
+ if (useTex == 0)
+ df = 1.0;
+ vec3 displacedPos = pos.xyz + normal * df * displacementAmount;
+ gl_Position = mvp * vec4(displacedPos, 1.0);
+
+// out_uv = uv;
+ out_normal = normal;
+}
diff --git a/tests/manual/rhi/displacement/material.tese.qsb b/tests/manual/rhi/displacement/material.tese.qsb
new file mode 100644
index 0000000000..26f3e8278e
--- /dev/null
+++ b/tests/manual/rhi/displacement/material.tese.qsb
Binary files differ
diff --git a/tests/manual/rhi/displacement/material.vert b/tests/manual/rhi/displacement/material.vert
new file mode 100644
index 0000000000..b84d1050ee
--- /dev/null
+++ b/tests/manual/rhi/displacement/material.vert
@@ -0,0 +1,15 @@
+#version 440
+
+layout(location = 0) in vec3 position;
+layout(location = 1) in vec2 uv;
+layout(location = 2) in vec3 normal;
+
+layout(location = 0) out vec2 out_uv;
+layout(location = 1) out vec3 out_normal;
+
+void main()
+{
+ gl_Position = vec4(position, 1.0);
+ out_uv = uv;
+ out_normal = normal;
+}
diff --git a/tests/manual/rhi/displacement/material.vert.qsb b/tests/manual/rhi/displacement/material.vert.qsb
new file mode 100644
index 0000000000..07494b6218
--- /dev/null
+++ b/tests/manual/rhi/displacement/material.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/displacement/material_domain.hlsl b/tests/manual/rhi/displacement/material_domain.hlsl
new file mode 100644
index 0000000000..268ce0c65f
--- /dev/null
+++ b/tests/manual/rhi/displacement/material_domain.hlsl
@@ -0,0 +1,54 @@
+struct Input
+{
+ float edges[3] : SV_TessFactor;
+ float inside : SV_InsideTessFactor;
+};
+
+struct PatchInput
+{
+ float3 position : POSITION;
+ float2 uv : TEXCOORD0;
+ float3 normal : TEXCOORD1;
+};
+
+struct PixelInput
+{
+ //float2 uv : TEXCOORD0;
+ float3 normal : TEXCOORD1;
+ float4 position : SV_POSITION;
+};
+
+cbuffer buf : register(b0)
+{
+ row_major float4x4 mvp : packoffset(c0);
+ float displacementAmount : packoffset(c4);
+ float tessInner : packoffset(c4.y);
+ float tessOuter : packoffset(c4.z);
+ int useTex : packoffset(c4.w);
+};
+
+Texture2D<float4> tex : register(t1);
+SamplerState texsampler : register(s1);
+
+[domain("tri")]
+PixelInput main(Input input, float3 uvwCoord : SV_DomainLocation, const OutputPatch<PatchInput, 3> patch)
+{
+ PixelInput output;
+
+ float3 pos = uvwCoord.x * patch[0].position + uvwCoord.y * patch[1].position + uvwCoord.z * patch[2].position;
+ float2 uv = uvwCoord.x * patch[0].uv + uvwCoord.y * patch[1].uv;
+ float3 normal = normalize(uvwCoord.x * patch[0].normal + uvwCoord.y * patch[1].normal + uvwCoord.z * patch[2].normal);
+
+ float4 c = tex.SampleLevel(texsampler, uv, 0.0);
+ const float3 yCoeff_709 = float3(0.2126, 0.7152, 0.0722);
+ float df = dot(c.rgb, yCoeff_709);
+ if (useTex == 0)
+ df = 1.0;
+ float3 displacedPos = pos + normal * df * displacementAmount;
+
+ output.position = mul(float4(displacedPos, 1.0), mvp);
+ //output.uv = uv;
+ output.normal = normal;
+
+ return output;
+}
diff --git a/tests/manual/rhi/displacement/material_hull.hlsl b/tests/manual/rhi/displacement/material_hull.hlsl
new file mode 100644
index 0000000000..03b476f64f
--- /dev/null
+++ b/tests/manual/rhi/displacement/material_hull.hlsl
@@ -0,0 +1,52 @@
+struct Input
+{
+ float2 uv : TEXCOORD0;
+ float3 normal : TEXCOORD1;
+ float4 position : SV_Position;
+};
+
+struct Output
+{
+ float3 position : POSITION;
+ float2 uv : TEXCOORD0;
+ float3 normal : TEXCOORD1;
+};
+
+struct ConstantData
+{
+ float edges[3] : SV_TessFactor;
+ float inside : SV_InsideTessFactor;
+};
+
+cbuffer buf : register(b0)
+{
+ row_major float4x4 mvp : packoffset(c0);
+ float displacementAmount : packoffset(c4);
+ float tessInner : packoffset(c4.y);
+ float tessOuter : packoffset(c4.z);
+ int useTex : packoffset(c4.w);
+};
+
+ConstantData patchConstFunc(InputPatch<Input, 3> ip, uint PatchID : SV_PrimitiveID )
+{
+ ConstantData d;
+ d.edges[0] = tessOuter;
+ d.edges[1] = tessOuter;
+ d.edges[2] = tessOuter;
+ d.inside = tessInner;
+ return d;
+}
+
+[domain("tri")]
+[partitioning("integer")]
+[outputtopology("triangle_cw")]
+[outputcontrolpoints(3)]
+[patchconstantfunc("patchConstFunc")]
+Output main(InputPatch<Input, 3> patch, uint pointId : SV_OutputControlPointID, uint patchId : SV_PrimitiveID)
+{
+ Output output;
+ output.position = patch[pointId].position;
+ output.uv = patch[pointId].uv;
+ output.normal = patch[pointId].normal;
+ return output;
+}
diff --git a/tests/manual/rhi/float16texture_with_compute/CMakeLists.txt b/tests/manual/rhi/float16texture_with_compute/CMakeLists.txt
index e50a3c841f..c697660edb 100644
--- a/tests/manual/rhi/float16texture_with_compute/CMakeLists.txt
+++ b/tests/manual/rhi/float16texture_with_compute/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from float16texture_with_compute.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## float16texture_with_compute Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(float16texture_with_compute
GUI
SOURCES
float16texture_with_compute.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -37,7 +38,3 @@ qt_internal_add_resource(float16texture_with_compute "float16texture_with_comput
FILES
${float16texture_with_compute_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:float16texture_with_compute.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.cpp b/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.cpp
index 7310872748..6bf3d222b4 100644
--- a/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.cpp
+++ b/tests/manual/rhi/float16texture_with_compute/float16texture_with_compute.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// An advanced version of floattexture. Instead of RGBA32F, we use RGBA16F, and
// also generate the floating point data from rgba with compute. Then there's a
diff --git a/tests/manual/rhi/floattexture/CMakeLists.txt b/tests/manual/rhi/floattexture/CMakeLists.txt
index 7748388c54..0fde76ed51 100644
--- a/tests/manual/rhi/floattexture/CMakeLists.txt
+++ b/tests/manual/rhi/floattexture/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from floattexture.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## floattexture Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(floattexture
GUI
SOURCES
floattexture.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -37,5 +38,4 @@ qt_internal_add_resource(floattexture "floattexture"
)
-#### Keys ignored in scope 1:.:.:floattexture.pro:<TRUE>:
# TEMPLATE = "app"
diff --git a/tests/manual/rhi/floattexture/floattexture.cpp b/tests/manual/rhi/floattexture/floattexture.cpp
index f1cf9d4316..8cd41bcc58 100644
--- a/tests/manual/rhi/floattexture/floattexture.cpp
+++ b/tests/manual/rhi/floattexture/floattexture.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
#include <qmath.h>
@@ -289,7 +242,7 @@ void Window::customInit()
qint32 flip = 1;
d.initialUpdates->updateDynamicBuffer(d.ubuf, 64, 4, &flip);
- QRhiTextureUploadDescription desc({ 0, 0, { floatData.constData(), int(floatData.size()) } });
+ QRhiTextureUploadDescription desc({ 0, 0, { floatData.constData(), quint32(floatData.size()) } });
d.initialUpdates->uploadTexture(d.tex, desc);
}
diff --git a/tests/manual/rhi/geometryshader/CMakeLists.txt b/tests/manual/rhi/geometryshader/CMakeLists.txt
new file mode 100644
index 0000000000..2a23058786
--- /dev/null
+++ b/tests/manual/rhi/geometryshader/CMakeLists.txt
@@ -0,0 +1,24 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(geometryshader
+ GUI
+ SOURCES
+ geometryshader.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
+
+set(geometryshader_resource_files
+ "test.vert.qsb"
+ "test.geom.qsb"
+ "test.frag.qsb"
+)
+
+qt_internal_add_resource(geometryshader "geometryshader"
+ PREFIX
+ "/"
+ FILES
+ ${geometryshader_resource_files}
+)
diff --git a/tests/manual/rhi/geometryshader/buildshaders.bat b/tests/manual/rhi/geometryshader/buildshaders.bat
new file mode 100755
index 0000000000..6da26a6a2a
--- /dev/null
+++ b/tests/manual/rhi/geometryshader/buildshaders.bat
@@ -0,0 +1,4 @@
+qsb --glsl 320es,410 --hlsl 50 test.vert -o test.vert.qsb
+qsb --glsl 320es,410 test.geom -o test.geom.qsb
+qsb -r hlsl,50,test_geom.hlsl test.geom.qsb
+qsb --glsl 320es,410 --hlsl 50 test.frag -o test.frag.qsb
diff --git a/tests/manual/rhi/geometryshader/geometryshader.cpp b/tests/manual/rhi/geometryshader/geometryshader.cpp
new file mode 100644
index 0000000000..e03f247e9f
--- /dev/null
+++ b/tests/manual/rhi/geometryshader/geometryshader.cpp
@@ -0,0 +1,94 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "../shared/examplefw.h"
+
+static const float points[] = { 0.0f, 0.0f, 0.0f };
+
+struct
+{
+ QVector<QRhiResource *> releasePool;
+ QRhiBuffer *vbuf = nullptr;
+ QRhiBuffer *ubuf = nullptr;
+ QRhiShaderResourceBindings *srb = nullptr;
+ QRhiGraphicsPipeline *ps = nullptr;
+ QRhiResourceUpdateBatch *initialUpdates = nullptr;
+ float radius = 0.0f;
+} d;
+
+void Window::customInit()
+{
+ if (!m_r->isFeatureSupported(QRhi::GeometryShader))
+ qFatal("Geometry shaders are not supported");
+
+ m_clearColor.setRgb(0, 0, 0);
+
+ d.vbuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(points));
+ d.vbuf->create();
+ d.releasePool << d.vbuf;
+
+ d.ubuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 4);
+ d.ubuf->create();
+ d.releasePool << d.ubuf;
+
+ d.srb = m_r->newShaderResourceBindings();
+ d.releasePool << d.srb;
+ const QRhiShaderResourceBinding::StageFlags geom = QRhiShaderResourceBinding::GeometryStage;
+ d.srb->setBindings({ QRhiShaderResourceBinding::uniformBuffer(0, geom, d.ubuf) });
+ d.srb->create();
+
+ d.ps = m_r->newGraphicsPipeline();
+ d.releasePool << d.ps;
+
+ d.ps->setTopology(QRhiGraphicsPipeline::Points);
+
+ d.ps->setShaderStages(
+ { { QRhiShaderStage::Vertex, getShader(QLatin1String(":/test.vert.qsb")) },
+ { QRhiShaderStage::Geometry, getShader(QLatin1String(":/test.geom.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/test.frag.qsb")) } });
+
+ d.ps->setCullMode(QRhiGraphicsPipeline::Back);
+ d.ps->setDepthTest(true);
+ d.ps->setDepthWrite(true);
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({ { 3 * sizeof(float) } });
+ inputLayout.setAttributes({ { 0, 0, QRhiVertexInputAttribute::Float3, 0 } });
+ d.ps->setVertexInputLayout(inputLayout);
+ d.ps->setShaderResourceBindings(d.srb);
+ d.ps->setRenderPassDescriptor(m_rp);
+ d.ps->create();
+
+ d.initialUpdates = m_r->nextResourceUpdateBatch();
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, points);
+ d.initialUpdates->updateDynamicBuffer(d.ubuf, 0, 4, &d.radius);
+}
+
+void Window::customRelease()
+{
+ qDeleteAll(d.releasePool);
+ d.releasePool.clear();
+}
+
+void Window::customRender()
+{
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiResourceUpdateBatch *u = m_r->nextResourceUpdateBatch();
+ if (d.initialUpdates) {
+ u->merge(d.initialUpdates);
+ d.initialUpdates->release();
+ d.initialUpdates = nullptr;
+ }
+
+ u->updateDynamicBuffer(d.ubuf, 0, 4, &d.radius);
+ d.radius = std::fmod(d.radius + 0.01f, 1.0f);
+
+ cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 }, u);
+ cb->setGraphicsPipeline(d.ps);
+ cb->setViewport({ 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) });
+ cb->setShaderResources();
+ QRhiCommandBuffer::VertexInput vbufBinding(d.vbuf, 0);
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(1);
+ cb->endPass();
+}
diff --git a/tests/manual/rhi/geometryshader/test.frag b/tests/manual/rhi/geometryshader/test.frag
new file mode 100644
index 0000000000..4785a404d3
--- /dev/null
+++ b/tests/manual/rhi/geometryshader/test.frag
@@ -0,0 +1,8 @@
+#version 440
+
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+ fragColor = vec4(1.0);
+}
diff --git a/tests/manual/rhi/geometryshader/test.frag.qsb b/tests/manual/rhi/geometryshader/test.frag.qsb
new file mode 100644
index 0000000000..b6a5877b95
--- /dev/null
+++ b/tests/manual/rhi/geometryshader/test.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/geometryshader/test.geom b/tests/manual/rhi/geometryshader/test.geom
new file mode 100644
index 0000000000..750a3085bd
--- /dev/null
+++ b/tests/manual/rhi/geometryshader/test.geom
@@ -0,0 +1,26 @@
+#version 430
+
+# define M_PI 3.14159265358979323846
+
+layout(points) in;
+layout(line_strip, max_vertices = 7) out;
+
+layout(std140, binding = 0) uniform buf {
+ float radius;
+};
+
+void main(void)
+{
+
+ for(int i=0;i<7;++i)
+ {
+ float theta = float(i) / 6.0f * 2.0 * M_PI;
+
+ gl_Position = gl_in[0].gl_Position;
+ gl_Position.xy += radius * vec2(cos(theta), sin(theta));
+
+ EmitVertex();
+ }
+ EndPrimitive();
+
+}
diff --git a/tests/manual/rhi/geometryshader/test.geom.qsb b/tests/manual/rhi/geometryshader/test.geom.qsb
new file mode 100644
index 0000000000..9aa4a0cf98
--- /dev/null
+++ b/tests/manual/rhi/geometryshader/test.geom.qsb
Binary files differ
diff --git a/tests/manual/rhi/geometryshader/test.vert b/tests/manual/rhi/geometryshader/test.vert
new file mode 100644
index 0000000000..af06581f6a
--- /dev/null
+++ b/tests/manual/rhi/geometryshader/test.vert
@@ -0,0 +1,8 @@
+#version 440
+
+layout(location = 0) in vec3 position;
+
+void main()
+{
+ gl_Position = vec4(position, 1.0);
+}
diff --git a/tests/manual/rhi/geometryshader/test.vert.qsb b/tests/manual/rhi/geometryshader/test.vert.qsb
new file mode 100644
index 0000000000..7238d8037b
--- /dev/null
+++ b/tests/manual/rhi/geometryshader/test.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/geometryshader/test_geom.hlsl b/tests/manual/rhi/geometryshader/test_geom.hlsl
new file mode 100644
index 0000000000..e58659252b
--- /dev/null
+++ b/tests/manual/rhi/geometryshader/test_geom.hlsl
@@ -0,0 +1,26 @@
+struct VertexOutput
+{
+ float4 position : SV_Position;
+};
+
+struct PixelInput
+{
+ float4 position : SV_POSITION;
+};
+
+cbuffer buf : register(b0)
+{
+ float radius : packoffset(c0);
+};
+
+[maxvertexcount(7)]
+void main(point VertexOutput input[1], inout LineStream<PixelInput> OutputStream)
+{
+ PixelInput output;
+ for (int i = 0; i < 7; ++i) {
+ float theta = float(i) / 6.0f * 2.0 * 3.14159265;
+ output.position = input[0].position;
+ output.position.xy += radius * float2(cos(theta), sin(theta));
+ OutputStream.Append(output);
+ }
+}
diff --git a/tests/manual/rhi/hdr/CMakeLists.txt b/tests/manual/rhi/hdr/CMakeLists.txt
new file mode 100644
index 0000000000..cf6e7662a4
--- /dev/null
+++ b/tests/manual/rhi/hdr/CMakeLists.txt
@@ -0,0 +1,20 @@
+qt_internal_add_manual_test(hdr
+ GUI
+ SOURCES
+ hdr.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
+
+qt_internal_add_resource(hdr "hdr"
+ PREFIX
+ "/"
+ FILES
+ "hdrtexture.vert.qsb"
+ "hdrtexture.frag.qsb"
+)
+
+set(imgui_base ../shared/imgui)
+set(imgui_target hdr)
+include(${imgui_base}/imgui.cmakeinc)
diff --git a/tests/manual/rhi/hdr/buildshaders.bat b/tests/manual/rhi/hdr/buildshaders.bat
new file mode 100644
index 0000000000..7710c85f83
--- /dev/null
+++ b/tests/manual/rhi/hdr/buildshaders.bat
@@ -0,0 +1,2 @@
+qsb --qt6 hdrtexture.vert -o hdrtexture.vert.qsb
+qsb --qt6 hdrtexture.frag -o hdrtexture.frag.qsb
diff --git a/tests/manual/rhi/hdr/hdr.cpp b/tests/manual/rhi/hdr/hdr.cpp
new file mode 100644
index 0000000000..1ea3b276de
--- /dev/null
+++ b/tests/manual/rhi/hdr/hdr.cpp
@@ -0,0 +1,457 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+// Test application for HDR with scRGB.
+// Launch with the argument "scrgb" or "sdr", perhaps side-by-side even.
+
+#define EXAMPLEFW_PREINIT
+#define EXAMPLEFW_IMGUI
+#include "../shared/examplefw.h"
+
+#include "../shared/cube.h"
+
+QByteArray loadHdr(const QString &fn, QSize *size)
+{
+ QFile f(fn);
+ if (!f.open(QIODevice::ReadOnly)) {
+ qWarning("Failed to open %s", qPrintable(fn));
+ return QByteArray();
+ }
+
+ char sig[256];
+ f.read(sig, 11);
+ if (strncmp(sig, "#?RADIANCE\n", 11))
+ return QByteArray();
+
+ QByteArray buf = f.readAll();
+ const char *p = buf.constData();
+ const char *pEnd = p + buf.size();
+
+ // Process lines until the empty one.
+ QByteArray line;
+ while (p < pEnd) {
+ char c = *p++;
+ if (c == '\n') {
+ if (line.isEmpty())
+ break;
+ if (line.startsWith(QByteArrayLiteral("FORMAT="))) {
+ const QByteArray format = line.mid(7).trimmed();
+ if (format != QByteArrayLiteral("32-bit_rle_rgbe")) {
+ qWarning("HDR format '%s' is not supported", format.constData());
+ return QByteArray();
+ }
+ }
+ line.clear();
+ } else {
+ line.append(c);
+ }
+ }
+ if (p == pEnd) {
+ qWarning("Malformed HDR image data at property strings");
+ return QByteArray();
+ }
+
+ // Get the resolution string.
+ while (p < pEnd) {
+ char c = *p++;
+ if (c == '\n')
+ break;
+ line.append(c);
+ }
+ if (p == pEnd) {
+ qWarning("Malformed HDR image data at resolution string");
+ return QByteArray();
+ }
+
+ int w = 0, h = 0;
+ // We only care about the standard orientation.
+ if (!sscanf(line.constData(), "-Y %d +X %d", &h, &w)) {
+ qWarning("Unsupported HDR resolution string '%s'", line.constData());
+ return QByteArray();
+ }
+ if (w <= 0 || h <= 0) {
+ qWarning("Invalid HDR resolution");
+ return QByteArray();
+ }
+
+ // output is RGBA32F
+ const int blockSize = 4 * sizeof(float);
+ QByteArray data;
+ data.resize(w * h * blockSize);
+
+ typedef unsigned char RGBE[4];
+ RGBE *scanline = new RGBE[w];
+
+ for (int y = 0; y < h; ++y) {
+ if (pEnd - p < 4) {
+ qWarning("Unexpected end of HDR data");
+ delete[] scanline;
+ return QByteArray();
+ }
+
+ scanline[0][0] = *p++;
+ scanline[0][1] = *p++;
+ scanline[0][2] = *p++;
+ scanline[0][3] = *p++;
+
+ if (scanline[0][0] == 2 && scanline[0][1] == 2 && scanline[0][2] < 128) {
+ // new rle, the first pixel was a dummy
+ for (int channel = 0; channel < 4; ++channel) {
+ for (int x = 0; x < w && p < pEnd; ) {
+ unsigned char c = *p++;
+ if (c > 128) { // run
+ if (p < pEnd) {
+ int repCount = c & 127;
+ c = *p++;
+ while (repCount--)
+ scanline[x++][channel] = c;
+ }
+ } else { // not a run
+ while (c-- && p < pEnd)
+ scanline[x++][channel] = *p++;
+ }
+ }
+ }
+ } else {
+ // old rle
+ scanline[0][0] = 2;
+ int bitshift = 0;
+ int x = 1;
+ while (x < w && pEnd - p >= 4) {
+ scanline[x][0] = *p++;
+ scanline[x][1] = *p++;
+ scanline[x][2] = *p++;
+ scanline[x][3] = *p++;
+
+ if (scanline[x][0] == 1 && scanline[x][1] == 1 && scanline[x][2] == 1) { // run
+ int repCount = scanline[x][3] << bitshift;
+ while (repCount--) {
+ memcpy(scanline[x], scanline[x - 1], 4);
+ ++x;
+ }
+ bitshift += 8;
+ } else { // not a run
+ ++x;
+ bitshift = 0;
+ }
+ }
+ }
+
+ // adjust for -Y orientation
+ float *fp = reinterpret_cast<float *>(data.data() + (h - 1 - y) * blockSize * w);
+ for (int x = 0; x < w; ++x) {
+ float d = qPow(2.0f, float(scanline[x][3]) - 128.0f);
+ float r = scanline[x][0] / 256.0f * d;
+ float g = scanline[x][1] / 256.0f * d;
+ float b = scanline[x][2] / 256.0f * d;
+ float a = 1.0f;
+ *fp++ = r;
+ *fp++ = g;
+ *fp++ = b;
+ *fp++ = a;
+ }
+ }
+
+ delete[] scanline;
+
+ *size = QSize(w, h);
+
+ return data;
+}
+
+struct {
+ QMatrix4x4 winProj;
+ QList<QRhiResource *> releasePool;
+ QRhiResourceUpdateBatch *initialUpdates = nullptr;
+ QRhiBuffer *vbuf = nullptr;
+ QRhiBuffer *ubuf = nullptr;
+ QRhiTexture *tex = nullptr;
+ QRhiSampler *sampler = nullptr;
+ QRhiShaderResourceBindings *srb = nullptr;
+ QRhiGraphicsPipeline *ps = nullptr;
+ bool showDemoWindow = true;
+ QVector3D rotation;
+
+ bool usingHDRWindow;
+ bool adjustSDR = false;
+ float SDRWhiteLevelInNits = 200.0f;
+ bool tonemapHDR = false;
+ float tonemapInMax = 2.5f;
+ float tonemapOutMax = 0.0f;
+
+ QString imageFile;
+} d;
+
+void preInit()
+{
+ QStringList args = QCoreApplication::arguments();
+ if (args.contains("scrgb")) {
+ d.usingHDRWindow = true;
+ swapchainFormat = QRhiSwapChain::HDRExtendedSrgbLinear;
+ } else if (args.contains("p3")) {
+ d.usingHDRWindow = true;
+ swapchainFormat = QRhiSwapChain::HDRExtendedDisplayP3Linear;
+ } else if (args.contains("sdr")) {
+ d.usingHDRWindow = false;
+ swapchainFormat = QRhiSwapChain::SDR;
+ } else {
+ qFatal("Missing command line argument, specify scrgb or sdr");
+ }
+
+ if (args.contains("file")) {
+ d.imageFile = args[args.indexOf("file") + 1];
+ qDebug("Using HDR image file %s", qPrintable(d.imageFile));
+ } else {
+ qFatal("Missing command line argument, specify 'file' followed by a .hdr file. "
+ "Download for example the original .exr from https://viewer.openhdr.org/i/5fcb9a595812624a99d24c62/linear "
+ "and use ImageMagick's 'convert' to convert from .exr to .hdr");
+ }
+}
+
+void Window::customInit()
+{
+ if (!m_r->isTextureFormatSupported(QRhiTexture::RGBA32F))
+ qWarning("RGBA32F texture format is not supported");
+
+ d.initialUpdates = m_r->nextResourceUpdateBatch();
+
+ d.vbuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(cube));
+ d.vbuf->create();
+ d.releasePool << d.vbuf;
+
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, cube);
+
+ d.ubuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64 + 4 * 4);
+ d.ubuf->create();
+ d.releasePool << d.ubuf;
+
+ qint32 flip = 1;
+ d.initialUpdates->updateDynamicBuffer(d.ubuf, 64, 4, &flip);
+
+ qint32 doLinearToSRGBInShader = !d.usingHDRWindow;
+ d.initialUpdates->updateDynamicBuffer(d.ubuf, 68, 4, &doLinearToSRGBInShader);
+
+ QSize size;
+ QByteArray floatData = loadHdr(d.imageFile, &size);
+
+ d.tex = m_r->newTexture(QRhiTexture::RGBA32F, size);
+ d.releasePool << d.tex;
+ d.tex->create();
+ QRhiTextureUploadDescription desc({ 0, 0, { floatData.constData(), quint32(floatData.size()) } });
+ d.initialUpdates->uploadTexture(d.tex, desc);
+
+ d.sampler = m_r->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
+ QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge);
+ d.releasePool << d.sampler;
+ d.sampler->create();
+
+ d.srb = m_r->newShaderResourceBindings();
+ d.releasePool << d.srb;
+ d.srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, d.ubuf),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, d.tex, d.sampler)
+ });
+ d.srb->create();
+
+ d.ps = m_r->newGraphicsPipeline();
+ d.releasePool << d.ps;
+ d.ps->setCullMode(QRhiGraphicsPipeline::Back);
+ const QRhiShaderStage stages[] = {
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/hdrtexture.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/hdrtexture.frag.qsb")) }
+ };
+ d.ps->setShaderStages(stages, stages + 2);
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 3 * sizeof(float) },
+ { 2 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
+ { 1, 1, QRhiVertexInputAttribute::Float2, 0 }
+ });
+ d.ps->setVertexInputLayout(inputLayout);
+ d.ps->setShaderResourceBindings(d.srb);
+ d.ps->setRenderPassDescriptor(m_rp);
+ d.ps->create();
+}
+
+void Window::customRelease()
+{
+ qDeleteAll(d.releasePool);
+ d.releasePool.clear();
+}
+
+void Window::customRender()
+{
+ if (d.tonemapOutMax == 0.0f) {
+ QRhiSwapChainHdrInfo info = m_sc->hdrInfo();
+ switch (info.limitsType) {
+ case QRhiSwapChainHdrInfo::LuminanceInNits:
+ d.tonemapOutMax = info.limits.luminanceInNits.maxLuminance / 80.0f;
+ break;
+ case QRhiSwapChainHdrInfo::ColorComponentValue:
+ // because on macOS it changes dynamically when starting up, so retry in next frame if it's still just 1.0
+ if (info.limits.colorComponentValue.maxColorComponentValue > 1.0f)
+ d.tonemapOutMax = info.limits.colorComponentValue.maxColorComponentValue;
+ break;
+ }
+ }
+
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiResourceUpdateBatch *u = m_r->nextResourceUpdateBatch();
+ if (d.initialUpdates) {
+ u->merge(d.initialUpdates);
+ d.initialUpdates->release();
+ d.initialUpdates = nullptr;
+ }
+
+ QMatrix4x4 mvp = m_proj;
+ mvp.rotate(d.rotation.x(), 1, 0, 0);
+ mvp.rotate(d.rotation.y(), 0, 1, 0);
+ mvp.rotate(d.rotation.z(), 0, 0, 1);
+ u->updateDynamicBuffer(d.ubuf, 0, 64, mvp.constData());
+
+ if (d.usingHDRWindow && d.tonemapHDR) {
+ u->updateDynamicBuffer(d.ubuf, 72, 4, &d.tonemapInMax);
+ u->updateDynamicBuffer(d.ubuf, 76, 4, &d.tonemapOutMax);
+ } else {
+ float zero[2] = {};
+ u->updateDynamicBuffer(d.ubuf, 72, 8, zero);
+ }
+
+ QColor clearColor = Qt::green; // sRGB
+ if (d.usingHDRWindow && d.adjustSDR) {
+ float sdrMultiplier = d.SDRWhiteLevelInNits / 80.0f; // scRGB 1.0 = 80 nits (and linear gamma)
+ clearColor = QColor::fromRgbF(clearColor.redF() * sdrMultiplier,
+ clearColor.greenF() * sdrMultiplier,
+ clearColor.blueF() * sdrMultiplier,
+ 1.0f);
+ }
+
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ cb->beginPass(m_sc->currentFrameRenderTarget(), clearColor, { 1.0f, 0 }, u);
+
+ cb->setGraphicsPipeline(d.ps);
+ cb->setViewport(QRhiViewport(0, 0, outputSizeInPixels.width(), outputSizeInPixels.height()));
+ cb->setShaderResources();
+ const QRhiCommandBuffer::VertexInput vbufBindings[] = {
+ { d.vbuf, 0 },
+ { d.vbuf, quint32(36 * 3 * sizeof(float)) }
+ };
+ cb->setVertexInput(0, 2, vbufBindings);
+ cb->draw(36);
+
+ m_imguiRenderer->render();
+
+ cb->endPass();
+}
+
+static void addTip(const char *s)
+{
+ ImGui::SameLine();
+ ImGui::TextDisabled("(?)");
+ if (ImGui::IsItemHovered()) {
+ ImGui::BeginTooltip();
+ ImGui::PushTextWrapPos(300);
+ ImGui::TextUnformatted(s);
+ ImGui::PopTextWrapPos();
+ ImGui::EndTooltip();
+ }
+}
+
+void Window::customGui()
+{
+ ImGui::SetNextWindowBgAlpha(1.0f);
+ ImGui::SetNextWindowPos(ImVec2(10, 420), ImGuiCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(800, 300), ImGuiCond_FirstUseEver);
+ ImGui::Begin("HDR test");
+
+ if (d.usingHDRWindow) {
+ if (swapchainFormat == QRhiSwapChain::HDRExtendedDisplayP3Linear) {
+ ImGui::Text("The window is now Extended Linear Display P3 + FP16 color buffer,\n"
+ "the ImGui UI and the green background are considered SDR content,\n"
+ "the cube is using a HDR texture.");
+ } else {
+ ImGui::Text("The window is now scRGB (Extended Linear sRGB) + FP16 color buffer,\n"
+ "the ImGui UI and the green background are considered SDR content,\n"
+ "the cube is using a HDR texture.");
+ }
+ ImGui::Checkbox("Adjust SDR content", &d.adjustSDR);
+ addTip("Multiplies fragment colors for non-HDR content with sdr_white_level / 80. "
+ "Not relevant with macOS (due to EDR being display-referred).");
+ if (d.adjustSDR) {
+ ImGui::SliderFloat("SDR white level (nits)", &d.SDRWhiteLevelInNits, 0.0f, 1000.0f);
+ imguiHDRMultiplier = d.SDRWhiteLevelInNits / 80.0f; // scRGB 1.0 = 80 nits (and linear gamma)
+ } else {
+ imguiHDRMultiplier = 1.0f; // 0 would mean linear to sRGB; don't want that with HDR
+ }
+ ImGui::Separator();
+ ImGui::Checkbox("Tonemap HDR content", &d.tonemapHDR);
+ addTip("Perform some most basic Reinhard tonemapping (changed to suit HDR) on the 3D content (the cube). "
+ "Display max luminance is set to the max color component value (macOS) or max luminance in nits / 80 (Windows) by default.");
+ if (d.tonemapHDR) {
+ ImGui::SliderFloat("Content max luminance\n(color component value)", &d.tonemapInMax, 0.0f, 20.0f);
+ ImGui::SliderFloat("Display max luminance\n(color component value)", &d.tonemapOutMax, 0.0f, 20.0f);
+ }
+ } else {
+ ImGui::Text("The window is standard dynamic range (no HDR, so non-linear sRGB effectively).\n"
+ "Here we just do linear -> sRGB for everything (UI, textured cube)\n"
+ "at the end of the pipeline, while the Qt::green background is already sRGB.");
+ }
+
+ ImGui::End();
+
+ ImGui::SetNextWindowPos(ImVec2(850, 560), ImGuiCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(420, 140), ImGuiCond_FirstUseEver);
+ ImGui::Begin("Misc");
+ float *rot = reinterpret_cast<float *>(&d.rotation);
+ ImGui::SliderFloat("Rotation X", &rot[0], 0.0f, 360.0f);
+ ImGui::SliderFloat("Rotation Y", &rot[1], 0.0f, 360.0f);
+ ImGui::SliderFloat("Rotation Z", &rot[2], 0.0f, 360.0f);
+ ImGui::End();
+
+ if (d.usingHDRWindow) {
+ ImGui::SetNextWindowPos(ImVec2(850, 10), ImGuiCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(420, 180), ImGuiCond_FirstUseEver);
+ ImGui::Begin("Actual platform info");
+ QRhiSwapChainHdrInfo info = m_sc->hdrInfo();
+ switch (info.limitsType) {
+ case QRhiSwapChainHdrInfo::LuminanceInNits:
+ ImGui::Text("Platform provides luminance in nits");
+ addTip("Windows/D3D: On laptops this will be screen brightness dependent. Increasing brightness implies the max luminance decreases. "
+ "It also seems to be affected by HDR Content Brightness in the Settings, if there is one (e.g. on laptops; not to be confused with SDR Content Brightess). "
+ "(note that the DXGI query does not seem to return changed values if there are runtime changes unless restarting the app).");
+ ImGui::Text("Min luminance: %.4f\nMax luminance: %.4f",
+ info.limits.luminanceInNits.minLuminance,
+ info.limits.luminanceInNits.maxLuminance);
+ break;
+ case QRhiSwapChainHdrInfo::ColorComponentValue:
+ ImGui::Text("Platform provides color component values");
+ addTip("macOS/Metal: On laptops this will be screen brightness dependent. Increasing brightness decreases the max color value. "
+ "Max brightness may bring it down to 1.0.");
+ ImGui::Text("maxColorComponentValue: %.4f\nmaxPotentialColorComponentValue: %.4f",
+ info.limits.colorComponentValue.maxColorComponentValue,
+ info.limits.colorComponentValue.maxPotentialColorComponentValue);
+ break;
+ }
+ ImGui::Separator();
+ switch (info.luminanceBehavior) {
+ case QRhiSwapChainHdrInfo::SceneReferred:
+ ImGui::Text("Luminance behavior is scene-referred");
+ break;
+ case QRhiSwapChainHdrInfo::DisplayReferred:
+ ImGui::Text("Luminance behavior is display-referred");
+ break;
+ }
+ addTip("Windows (DWM) HDR is scene-referred: 1.0 = 80 nits.\n\n"
+ "Apple EDR is display-referred: the value of 1.0 refers to whatever the system's current SDR white level is (100, 200, ... nits depending on the brightness).");
+ if (info.luminanceBehavior == QRhiSwapChainHdrInfo::SceneReferred) {
+ ImGui::Text("SDR white level: %.4f nits", info.sdrWhiteLevel);
+ addTip("On Windows this is queried from DISPLAYCONFIG_SDR_WHITE_LEVEL. "
+ "Affected by the slider in the Windows Settings (System/Display/HDR/[S|H]DR Content Brightness). "
+ "With max screen brightness (laptops) the value will likely be the same as the max luminance.");
+ }
+ ImGui::End();
+ }
+}
diff --git a/tests/manual/rhi/hdr/hdrtexture.frag b/tests/manual/rhi/hdr/hdrtexture.frag
new file mode 100644
index 0000000000..9d5e12005a
--- /dev/null
+++ b/tests/manual/rhi/hdr/hdrtexture.frag
@@ -0,0 +1,44 @@
+#version 440
+
+layout(location = 0) in vec2 v_texcoord;
+
+layout(location = 0) out vec4 fragColor;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ int flip;
+ int sdr;
+ float tonemapInMax;
+ float tonemapOutMax;
+} ubuf;
+
+layout(binding = 1) uniform sampler2D tex;
+
+vec3 linearToSRGB(vec3 color)
+{
+ vec3 S1 = sqrt(color);
+ vec3 S2 = sqrt(S1);
+ vec3 S3 = sqrt(S2);
+ return 0.585122381 * S1 + 0.783140355 * S2 - 0.368262736 * S3;
+}
+
+// https://learn.microsoft.com/en-us/windows/win32/direct3darticles/high-dynamic-range
+vec3 simpleReinhardTonemapper(vec3 c, float inMax, float outMax)
+{
+ c /= vec3(inMax);
+ c.r = c.r / (1 + c.r);
+ c.g = c.g / (1 + c.g);
+ c.b = c.b / (1 + c.b);
+ c *= vec3(outMax);
+ return c;
+}
+
+void main()
+{
+ vec4 c = texture(tex, v_texcoord);
+ if (ubuf.tonemapInMax != 0)
+ c.rgb = simpleReinhardTonemapper(c.rgb, ubuf.tonemapInMax, ubuf.tonemapOutMax);
+ else if (ubuf.sdr != 0)
+ c.rgb = linearToSRGB(c.rgb);
+ fragColor = vec4(c.rgb * c.a, c.a);
+}
diff --git a/tests/manual/rhi/hdr/hdrtexture.frag.qsb b/tests/manual/rhi/hdr/hdrtexture.frag.qsb
new file mode 100644
index 0000000000..441b660f0b
--- /dev/null
+++ b/tests/manual/rhi/hdr/hdrtexture.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/hdr/hdrtexture.vert b/tests/manual/rhi/hdr/hdrtexture.vert
new file mode 100644
index 0000000000..336d5f8cfb
--- /dev/null
+++ b/tests/manual/rhi/hdr/hdrtexture.vert
@@ -0,0 +1,22 @@
+#version 440
+
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec2 texcoord;
+
+layout(location = 0) out vec2 v_texcoord;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ int flip;
+ int sdr;
+ float tonemapInMaxNits;
+ float tonemapOutMaxNits;
+};
+
+void main()
+{
+ v_texcoord = vec2(texcoord.x, texcoord.y);
+ if (flip != 0)
+ v_texcoord.y = 1.0 - v_texcoord.y;
+ gl_Position = mvp * position;
+}
diff --git a/tests/manual/rhi/hdr/hdrtexture.vert.qsb b/tests/manual/rhi/hdr/hdrtexture.vert.qsb
new file mode 100644
index 0000000000..bcfb0da273
--- /dev/null
+++ b/tests/manual/rhi/hdr/hdrtexture.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/hellominimalcrossgfxtriangle/CMakeLists.txt b/tests/manual/rhi/hellominimalcrossgfxtriangle/CMakeLists.txt
index d695bcbb9b..f5da850c8d 100644
--- a/tests/manual/rhi/hellominimalcrossgfxtriangle/CMakeLists.txt
+++ b/tests/manual/rhi/hellominimalcrossgfxtriangle/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from hellominimalcrossgfxtriangle.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## hellominimalcrossgfxtriangle Binary:
@@ -9,7 +10,7 @@ qt_internal_add_manual_test(hellominimalcrossgfxtriangle
hellowindow.cpp hellowindow.h
main.cpp
window.cpp window.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -32,7 +33,3 @@ qt_internal_add_resource(hellominimalcrossgfxtriangle "hellominimalcrossgfxtrian
FILES
${hellominimalcrossgfxtriangle_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:hellominimalcrossgfxtriangle.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/hellominimalcrossgfxtriangle/hellowindow.cpp b/tests/manual/rhi/hellominimalcrossgfxtriangle/hellowindow.cpp
index 308eecd199..2fb7405fa7 100644
--- a/tests/manual/rhi/hellominimalcrossgfxtriangle/hellowindow.cpp
+++ b/tests/manual/rhi/hellominimalcrossgfxtriangle/hellowindow.cpp
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "hellowindow.h"
#include <QFile>
-#include <QtGui/private/qshader_p.h>
+#include <rhi/qshader.h>
static float vertexData[] = {
// Y up (note clipSpaceCorrMatrix in m_proj), CCW
diff --git a/tests/manual/rhi/hellominimalcrossgfxtriangle/hellowindow.h b/tests/manual/rhi/hellominimalcrossgfxtriangle/hellowindow.h
index dd9890f11c..f3a91aeb09 100644
--- a/tests/manual/rhi/hellominimalcrossgfxtriangle/hellowindow.h
+++ b/tests/manual/rhi/hellominimalcrossgfxtriangle/hellowindow.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef HELLOWINDOW_H
#define HELLOWINDOW_H
diff --git a/tests/manual/rhi/hellominimalcrossgfxtriangle/main.cpp b/tests/manual/rhi/hellominimalcrossgfxtriangle/main.cpp
index c29cd0cc30..89926c19cc 100644
--- a/tests/manual/rhi/hellominimalcrossgfxtriangle/main.cpp
+++ b/tests/manual/rhi/hellominimalcrossgfxtriangle/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// This is a compact, minimal demo of deciding the backend at runtime while
// using the exact same shaders and rendering code without any branching
@@ -67,6 +20,8 @@ QString graphicsApiName(QRhi::Implementation graphicsApi)
return QLatin1String("Vulkan");
case QRhi::D3D11:
return QLatin1String("Direct3D 11");
+ case QRhi::D3D12:
+ return QLatin1String("Direct3D 12");
case QRhi::Metal:
return QLatin1String("Metal");
default:
@@ -82,7 +37,7 @@ int main(int argc, char **argv)
QRhi::Implementation graphicsApi;
#if defined(Q_OS_WIN)
graphicsApi = QRhi::D3D11;
-#elif defined(Q_OS_MACOS) || defined(Q_OS_IOS)
+#elif QT_CONFIG(metal)
graphicsApi = QRhi::Metal;
#elif QT_CONFIG(vulkan)
graphicsApi = QRhi::Vulkan;
@@ -98,8 +53,10 @@ int main(int argc, char **argv)
cmdLineParser.addOption(glOption);
QCommandLineOption vkOption({ "v", "vulkan" }, QLatin1String("Vulkan"));
cmdLineParser.addOption(vkOption);
- QCommandLineOption d3dOption({ "d", "d3d11" }, QLatin1String("Direct3D 11"));
- cmdLineParser.addOption(d3dOption);
+ QCommandLineOption d3d11Option({ "d", "d3d11" }, QLatin1String("Direct3D 11"));
+ cmdLineParser.addOption(d3d11Option);
+ QCommandLineOption d3d12Option({ "D", "d3d12" }, QLatin1String("Direct3D 12"));
+ cmdLineParser.addOption(d3d12Option);
QCommandLineOption mtlOption({ "m", "metal" }, QLatin1String("Metal"));
cmdLineParser.addOption(mtlOption);
@@ -110,8 +67,10 @@ int main(int argc, char **argv)
graphicsApi = QRhi::OpenGLES2;
if (cmdLineParser.isSet(vkOption))
graphicsApi = QRhi::Vulkan;
- if (cmdLineParser.isSet(d3dOption))
+ if (cmdLineParser.isSet(d3d11Option))
graphicsApi = QRhi::D3D11;
+ if (cmdLineParser.isSet(d3d12Option))
+ graphicsApi = QRhi::D3D12;
if (cmdLineParser.isSet(mtlOption))
graphicsApi = QRhi::Metal;
diff --git a/tests/manual/rhi/hellominimalcrossgfxtriangle/window.cpp b/tests/manual/rhi/hellominimalcrossgfxtriangle/window.cpp
index edcb81b4fe..edbd048c63 100644
--- a/tests/manual/rhi/hellominimalcrossgfxtriangle/window.cpp
+++ b/tests/manual/rhi/hellominimalcrossgfxtriangle/window.cpp
@@ -1,55 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "window.h"
#include <QPlatformSurfaceEvent>
+#include <QTimer>
Window::Window(QRhi::Implementation graphicsApi)
: m_graphicsApi(graphicsApi)
@@ -57,14 +11,12 @@ Window::Window(QRhi::Implementation graphicsApi)
switch (graphicsApi) {
case QRhi::OpenGLES2:
setSurfaceType(OpenGLSurface);
-#if QT_CONFIG(opengl)
- setFormat(QRhiGles2InitParams::adjustedFormat());
-#endif
break;
case QRhi::Vulkan:
setSurfaceType(VulkanSurface);
break;
case QRhi::D3D11:
+ case QRhi::D3D12:
setSurfaceType(Direct3DSurface);
break;
case QRhi::Metal:
@@ -130,7 +82,7 @@ bool Window::event(QEvent *e)
void Window::init()
{
- QRhi::Flags rhiFlags = QRhi::EnableDebugMarkers | QRhi::EnableProfiling;
+ QRhi::Flags rhiFlags = QRhi::EnableDebugMarkers;
if (m_graphicsApi == QRhi::Null) {
QRhiNullInitParams params;
@@ -161,10 +113,14 @@ void Window::init()
QRhiD3D11InitParams params;
params.enableDebugLayer = true;
m_rhi.reset(QRhi::create(QRhi::D3D11, &params, rhiFlags));
+ } else if (m_graphicsApi == QRhi::D3D12) {
+ QRhiD3D12InitParams params;
+ params.enableDebugLayer = true;
+ m_rhi.reset(QRhi::create(QRhi::D3D12, &params, rhiFlags));
}
#endif
-#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
+#if QT_CONFIG(metal)
if (m_graphicsApi == QRhi::Metal) {
QRhiMetalInitParams params;
m_rhi.reset(QRhi::create(QRhi::Metal, &params, rhiFlags));
@@ -243,7 +199,20 @@ void Window::render()
m_rhi->endFrame(m_sc.get());
+ // Always request the next frame via requestUpdate(). On some platforms this is backed
+ // by a platform-specific solution, e.g. CVDisplayLink on macOS, which is potentially
+ // more efficient than a timer, queued metacalls, etc.
+ //
+ // However, the rendering behavior is identical no matter how the next round of
+ // rendering is triggered: the rendering thread is throttled to the presentation rate
+ // (either in beginFrame() or endFrame()) so the triangle should rotate at the exact
+ // same speed no matter which approach is taken here.
+
+#if 1
requestUpdate();
+#else
+ QTimer::singleShot(0, this, [this] { render(); });
+#endif
}
void Window::customInit()
diff --git a/tests/manual/rhi/hellominimalcrossgfxtriangle/window.h b/tests/manual/rhi/hellominimalcrossgfxtriangle/window.h
index 30bfa2492c..eb43809096 100644
--- a/tests/manual/rhi/hellominimalcrossgfxtriangle/window.h
+++ b/tests/manual/rhi/hellominimalcrossgfxtriangle/window.h
@@ -1,72 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2020 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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef WINDOW_H
#define WINDOW_H
#include <QWindow>
-
-#include <QtGui/private/qrhinull_p.h>
-#if QT_CONFIG(opengl)
-#include <QtGui/private/qrhigles2_p.h>
#include <QOffscreenSurface>
-#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>
class Window : public QWindow
{
diff --git a/tests/manual/rhi/imguirenderer/CMakeLists.txt b/tests/manual/rhi/imguirenderer/CMakeLists.txt
new file mode 100644
index 0000000000..619c351d7f
--- /dev/null
+++ b/tests/manual/rhi/imguirenderer/CMakeLists.txt
@@ -0,0 +1,30 @@
+qt_internal_add_manual_test(imguirenderer
+ GUI
+ SOURCES
+ imguirenderer.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
+
+set_source_files_properties("../shared/texture.vert.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "texture.vert.qsb"
+)
+set_source_files_properties("../shared/texture.frag.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "texture.frag.qsb"
+)
+set_source_files_properties("../shared/qt256.png"
+ PROPERTIES QT_RESOURCE_ALIAS "qt256.png"
+)
+qt_internal_add_resource(imguirenderer "imguirenderer"
+ PREFIX
+ "/"
+ FILES
+ "../shared/texture.vert.qsb"
+ "../shared/texture.frag.qsb"
+ "../shared/qt256.png"
+)
+
+set(imgui_base ../shared/imgui)
+set(imgui_target imguirenderer)
+include(${imgui_base}/imgui.cmakeinc)
diff --git a/tests/manual/rhi/imguirenderer/imguirenderer.cpp b/tests/manual/rhi/imguirenderer/imguirenderer.cpp
new file mode 100644
index 0000000000..ef675c2e5b
--- /dev/null
+++ b/tests/manual/rhi/imguirenderer/imguirenderer.cpp
@@ -0,0 +1,128 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#define EXAMPLEFW_IMGUI
+#include "../shared/examplefw.h"
+
+#include "../shared/cube.h"
+
+struct {
+ QMatrix4x4 winProj;
+ QList<QRhiResource *> releasePool;
+ QRhiResourceUpdateBatch *initialUpdates = nullptr;
+ QRhiBuffer *vbuf = nullptr;
+ QRhiBuffer *ubuf = nullptr;
+ QRhiTexture *tex = nullptr;
+ QRhiSampler *sampler = nullptr;
+ QRhiShaderResourceBindings *srb = nullptr;
+ QRhiGraphicsPipeline *ps = nullptr;
+ bool showDemoWindow = true;
+ float rotation = 0.0f;
+} d;
+
+void Window::customInit()
+{
+ d.initialUpdates = m_r->nextResourceUpdateBatch();
+
+ d.vbuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(cube));
+ d.vbuf->create();
+ d.releasePool << d.vbuf;
+
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, cube);
+
+ d.ubuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 68);
+ d.ubuf->create();
+ d.releasePool << d.ubuf;
+ float opacity = 1.0f;
+ d.initialUpdates->updateDynamicBuffer(d.ubuf, 64, 4, &opacity);
+
+ QImage image = QImage(QLatin1String(":/qt256.png")).convertToFormat(QImage::Format_RGBA8888).mirrored();
+ d.tex = m_r->newTexture(QRhiTexture::RGBA8, QSize(image.width(), image.height()), 1, {});
+ d.releasePool << d.tex;
+ d.tex->create();
+ d.initialUpdates->uploadTexture(d.tex, image);
+
+ d.sampler = m_r->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
+ QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge);
+ d.releasePool << d.sampler;
+ d.sampler->create();
+
+ d.srb = m_r->newShaderResourceBindings();
+ d.releasePool << d.srb;
+ d.srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, d.ubuf),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, d.tex, d.sampler)
+ });
+ d.srb->create();
+
+ d.ps = m_r->newGraphicsPipeline();
+ d.releasePool << d.ps;
+ d.ps->setCullMode(QRhiGraphicsPipeline::Back);
+ const QRhiShaderStage stages[] = {
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/texture.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/texture.frag.qsb")) }
+ };
+ d.ps->setShaderStages(stages, stages + 2);
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 3 * sizeof(float) },
+ { 2 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
+ { 1, 1, QRhiVertexInputAttribute::Float2, 0 }
+ });
+ d.ps->setVertexInputLayout(inputLayout);
+ d.ps->setShaderResourceBindings(d.srb);
+ d.ps->setRenderPassDescriptor(m_rp);
+ d.ps->create();
+}
+
+void Window::customRelease()
+{
+ qDeleteAll(d.releasePool);
+ d.releasePool.clear();
+}
+
+void Window::customRender()
+{
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiResourceUpdateBatch *u = m_r->nextResourceUpdateBatch();
+ if (d.initialUpdates) {
+ u->merge(d.initialUpdates);
+ d.initialUpdates->release();
+ d.initialUpdates = nullptr;
+ }
+
+ QMatrix4x4 mvp = m_proj;
+ mvp.rotate(d.rotation, 0, 1, 0);
+ u->updateDynamicBuffer(d.ubuf, 0, 64, mvp.constData());
+
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 }, u);
+
+ cb->setGraphicsPipeline(d.ps);
+ cb->setViewport(QRhiViewport(0, 0, outputSizeInPixels.width(), outputSizeInPixels.height()));
+ cb->setShaderResources();
+ const QRhiCommandBuffer::VertexInput vbufBindings[] = {
+ { d.vbuf, 0 },
+ { d.vbuf, quint32(36 * 3 * sizeof(float)) }
+ };
+ cb->setVertexInput(0, 2, vbufBindings);
+ cb->draw(36);
+
+ m_imguiRenderer->render();
+
+ cb->endPass();
+}
+
+void Window::customGui()
+{
+ ImGui::ShowDemoWindow(&d.showDemoWindow);
+
+ ImGui::SetNextWindowPos(ImVec2(50, 120), ImGuiCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(400, 100), ImGuiCond_FirstUseEver);
+ ImGui::Begin("Test");
+ ImGui::SliderFloat("Rotation", &d.rotation, 0.0f, 360.0f);
+ ImGui::End();
+}
diff --git a/tests/manual/rhi/instancing/CMakeLists.txt b/tests/manual/rhi/instancing/CMakeLists.txt
index 71de7da494..4d16b28b68 100644
--- a/tests/manual/rhi/instancing/CMakeLists.txt
+++ b/tests/manual/rhi/instancing/CMakeLists.txt
@@ -1,14 +1,15 @@
-# Generated from instancing.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## instancing Binary:
#####################################################################
-qt_internal_add_manual_test(instancing
+qt_internal_add_manual_test(tst_manual_instancing
GUI
SOURCES
instancing.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -19,13 +20,9 @@ set(instancing_resource_files
"inst.vert.qsb"
)
-qt_internal_add_resource(instancing "instancing"
+qt_internal_add_resource(tst_manual_instancing "instancing"
PREFIX
"/"
FILES
${instancing_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:instancing.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/instancing/instancing.cpp b/tests/manual/rhi/instancing/instancing.cpp
index 5eb6293b6e..320cc2d6c7 100644
--- a/tests/manual/rhi/instancing/instancing.cpp
+++ b/tests/manual/rhi/instancing/instancing.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
#include "../shared/cube.h"
diff --git a/tests/manual/rhi/mrt/CMakeLists.txt b/tests/manual/rhi/mrt/CMakeLists.txt
index cd30003cd8..e86c6ef639 100644
--- a/tests/manual/rhi/mrt/CMakeLists.txt
+++ b/tests/manual/rhi/mrt/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from mrt.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## mrt Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(mrt
GUI
SOURCES
mrt.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -33,7 +34,3 @@ qt_internal_add_resource(mrt "mrt"
FILES
${mrt_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:mrt.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/mrt/mrt.cpp b/tests/manual/rhi/mrt/mrt.cpp
index cfe79419d1..a548ed1592 100644
--- a/tests/manual/rhi/mrt/mrt.cpp
+++ b/tests/manual/rhi/mrt/mrt.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
diff --git a/tests/manual/rhi/msaarenderbuffer/CMakeLists.txt b/tests/manual/rhi/msaarenderbuffer/CMakeLists.txt
index c9050bcdd9..ae3988b4eb 100644
--- a/tests/manual/rhi/msaarenderbuffer/CMakeLists.txt
+++ b/tests/manual/rhi/msaarenderbuffer/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from msaarenderbuffer.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## msaarenderbuffer Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(msaarenderbuffer
GUI
SOURCES
msaarenderbuffer.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -39,7 +40,3 @@ qt_internal_add_resource(msaarenderbuffer "msaarenderbuffer"
FILES
${msaarenderbuffer_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:msaarenderbuffer.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/msaarenderbuffer/msaarenderbuffer.cpp b/tests/manual/rhi/msaarenderbuffer/msaarenderbuffer.cpp
index fb30758bc1..539a1b42e1 100644
--- a/tests/manual/rhi/msaarenderbuffer/msaarenderbuffer.cpp
+++ b/tests/manual/rhi/msaarenderbuffer/msaarenderbuffer.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
diff --git a/tests/manual/rhi/msaatexture/CMakeLists.txt b/tests/manual/rhi/msaatexture/CMakeLists.txt
index a498780e4e..d948319059 100644
--- a/tests/manual/rhi/msaatexture/CMakeLists.txt
+++ b/tests/manual/rhi/msaatexture/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from msaatexture.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## msaatexture Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(msaatexture
GUI
SOURCES
msaatexture.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -43,7 +44,3 @@ qt_internal_add_resource(msaatexture "msaatexture"
FILES
${msaatexture_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:msaatexture.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/msaatexture/msaatexture.cpp b/tests/manual/rhi/msaatexture/msaatexture.cpp
index c22873342a..9edc8f5714 100644
--- a/tests/manual/rhi/msaatexture/msaatexture.cpp
+++ b/tests/manual/rhi/msaatexture/msaatexture.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
diff --git a/tests/manual/rhi/msaatextureresolve/CMakeLists.txt b/tests/manual/rhi/msaatextureresolve/CMakeLists.txt
new file mode 100644
index 0000000000..fb14b119de
--- /dev/null
+++ b/tests/manual/rhi/msaatextureresolve/CMakeLists.txt
@@ -0,0 +1,41 @@
+# Copyright (C) 2024 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(msaatextureresolve LANGUAGES CXX)
+ find_package(Qt6BuildInternals REQUIRED COMPONENTS STANDALONE_TEST)
+endif()
+
+qt_internal_add_manual_test(msaatextureresolve
+ GUI
+ SOURCES
+ msaatextureresolve.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
+
+# Resources:
+set_source_files_properties("../shared/color.frag.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "color.frag.qsb"
+)
+set_source_files_properties("../shared/color.vert.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "color.vert.qsb"
+)
+set_source_files_properties("../shared/texture.frag.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "texture.frag.qsb"
+)
+set_source_files_properties("../shared/texture.vert.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "texture.vert.qsb"
+)
+
+qt_internal_add_resource(msaatextureresolve "msaatextureresolve"
+ PREFIX
+ "/"
+ FILES
+ "../shared/color.frag.qsb"
+ "../shared/color.vert.qsb"
+ "../shared/texture.frag.qsb"
+ "../shared/texture.vert.qsb"
+)
diff --git a/tests/manual/rhi/msaatextureresolve/msaatextureresolve.cpp b/tests/manual/rhi/msaatextureresolve/msaatextureresolve.cpp
new file mode 100644
index 0000000000..128cecf707
--- /dev/null
+++ b/tests/manual/rhi/msaatextureresolve/msaatextureresolve.cpp
@@ -0,0 +1,235 @@
+// Copyright (C) 2024 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "../shared/examplefw.h"
+
+// Uses a multisample texture both for color and depth-stencil, renders into
+// those, and then resolves into non-multisample textures. Also the
+// depth-stencil, in order to exercise that rarely used path. If that is
+// functional, will not be visible on-screen. Frame captures with tools such as
+// RenderDoc can be used to verify that there is indeed a non-multisample depth
+// texture generated.
+
+static float vertexData[] =
+{ // Y up, CCW
+ -0.5f, 0.5f, 0.0f, 0.0f,
+ -0.5f, -0.5f, 0.0f, 1.0f,
+ 0.5f, -0.5f, 1.0f, 1.0f,
+ 0.5f, 0.5f, 1.0f, 0.0f
+};
+
+static quint16 indexData[] =
+{
+ 0, 1, 2, 0, 2, 3
+};
+
+static float triangleData[] =
+{ // Y up, CCW
+ 0.0f, 0.5f, 1.0f, 0.0f, 0.0f,
+ -0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
+ 0.5f, -0.5f, 0.0f, 0.0f, 1.0f,
+};
+
+struct {
+ QList<QRhiResource *> releasePool;
+ QRhiBuffer *vbuf = nullptr;
+ QRhiBuffer *ibuf = nullptr;
+ QRhiBuffer *ubuf = nullptr;
+ QRhiTexture *msaaColorTexture = nullptr;
+ QRhiTexture *msaaDepthTexture = nullptr;
+ QRhiTextureRenderTarget *rt = nullptr;
+ QRhiRenderPassDescriptor *rtRp = nullptr;
+ QRhiTexture *tex = nullptr;
+ QRhiTexture *depthTex = nullptr;
+ QRhiSampler *sampler = nullptr;
+ QRhiBuffer *triUbuf = nullptr;
+ QRhiShaderResourceBindings *triSrb = nullptr;
+ QRhiGraphicsPipeline *triPs = nullptr;
+ QRhiShaderResourceBindings *srb = nullptr;
+ QRhiGraphicsPipeline *ps = nullptr;
+ QRhiResourceUpdateBatch *initialUpdates = nullptr;
+ QMatrix4x4 triBaseMvp;
+ float triRot = 0;
+ QMatrix4x4 winProj;
+} d;
+
+void Window::customInit()
+{
+ if (!m_r->isFeatureSupported(QRhi::MultisampleTexture))
+ qFatal("Multisample textures not supported by this backend");
+
+ // Skip the check for ResolveDepthStencil, and let it run regardless. When
+ // not supported, it won't be functional, but should be handled somewhat
+ // gracefully.
+
+ d.vbuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(vertexData) + sizeof(triangleData));
+ d.vbuf->create();
+ d.releasePool << d.vbuf;
+
+ d.ibuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::IndexBuffer, sizeof(indexData));
+ d.ibuf->create();
+ d.releasePool << d.ibuf;
+
+ d.ubuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 68);
+ d.ubuf->create();
+ d.releasePool << d.ubuf;
+
+ d.msaaColorTexture = m_r->newTexture(QRhiTexture::RGBA8, QSize(512, 512), 4, QRhiTexture::RenderTarget); // 4x MSAA
+ d.msaaColorTexture->create();
+ d.releasePool << d.msaaColorTexture;
+
+ d.msaaDepthTexture = m_r->newTexture(QRhiTexture::D24S8, QSize(512, 512), 4, QRhiTexture::RenderTarget); // 4x MSAA
+ d.msaaDepthTexture->create();
+ d.releasePool << d.msaaDepthTexture;
+
+ // the non-msaa texture that will be the destination in the resolve
+ d.tex = m_r->newTexture(QRhiTexture::RGBA8, d.msaaColorTexture->pixelSize(), 1, QRhiTexture::RenderTarget);
+ d.releasePool << d.tex;
+ d.tex->create();
+
+ d.depthTex = m_r->newTexture(QRhiTexture::D24S8, d.msaaDepthTexture->pixelSize(), 1, QRhiTexture::RenderTarget);
+ d.releasePool << d.depthTex;
+ d.depthTex->create();
+
+ QRhiTextureRenderTargetDescription rtDesc;
+ QRhiColorAttachment rtAtt(d.msaaColorTexture);
+ rtAtt.setResolveTexture(d.tex);
+ rtDesc.setColorAttachments({ rtAtt });
+ rtDesc.setDepthTexture(d.msaaDepthTexture);
+ rtDesc.setDepthResolveTexture(d.depthTex);
+
+ d.rt = m_r->newTextureRenderTarget(rtDesc);
+ d.releasePool << d.rt;
+ d.rtRp = d.rt->newCompatibleRenderPassDescriptor();
+ d.releasePool << d.rtRp;
+ d.rt->setRenderPassDescriptor(d.rtRp);
+ d.rt->create();
+
+ d.triUbuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 68);
+ d.releasePool << d.triUbuf;
+ d.triUbuf->create();
+
+ d.triSrb = m_r->newShaderResourceBindings();
+ d.releasePool << d.triSrb;
+ d.triSrb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, d.triUbuf)
+ });
+ d.triSrb->create();
+
+ d.triPs = m_r->newGraphicsPipeline();
+ d.releasePool << d.triPs;
+ d.triPs->setDepthTest(true);
+ d.triPs->setDepthWrite(true);
+ d.triPs->setSampleCount(4); // must match the render target
+ d.triPs->setShaderStages({
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/color.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/color.frag.qsb")) }
+ });
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 5 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float3, quint32(2 * sizeof(float)) }
+ });
+ d.triPs->setVertexInputLayout(inputLayout);
+ d.triPs->setShaderResourceBindings(d.triSrb);
+ d.triPs->setRenderPassDescriptor(d.rtRp);
+ d.triPs->create();
+
+ d.sampler = m_r->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
+ QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge);
+ d.releasePool << d.sampler;
+ d.sampler->create();
+
+ d.srb = m_r->newShaderResourceBindings();
+ d.releasePool << d.srb;
+ d.srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, d.ubuf),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, d.tex, d.sampler)
+ });
+ d.srb->create();
+
+ d.ps = m_r->newGraphicsPipeline();
+ d.releasePool << d.ps;
+ d.ps->setShaderStages({
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/texture.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/texture.frag.qsb")) }
+ });
+ inputLayout.setBindings({
+ { 4 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float2, quint32(2 * sizeof(float)) }
+ });
+ d.ps->setVertexInputLayout(inputLayout);
+ d.ps->setShaderResourceBindings(d.srb);
+ d.ps->setRenderPassDescriptor(m_rp);
+ d.ps->create();
+
+ d.initialUpdates = m_r->nextResourceUpdateBatch();
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, 0, sizeof(vertexData), vertexData);
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, sizeof(vertexData), sizeof(triangleData), triangleData);
+ d.initialUpdates->uploadStaticBuffer(d.ibuf, indexData);
+
+ d.triBaseMvp = m_r->clipSpaceCorrMatrix();
+ d.triBaseMvp.perspective(45.0f, d.msaaColorTexture->pixelSize().width() / float(d.msaaColorTexture->pixelSize().height()), 0.01f, 1000.0f);
+ d.triBaseMvp.translate(0, 0, -2);
+ float opacity = 1.0f;
+ d.initialUpdates->updateDynamicBuffer(d.triUbuf, 64, 4, &opacity);
+
+ qint32 flip = m_r->isYUpInFramebuffer() ? 1 : 0;
+ d.initialUpdates->updateDynamicBuffer(d.ubuf, 64, 4, &flip);
+}
+
+void Window::customRelease()
+{
+ qDeleteAll(d.releasePool);
+ d.releasePool.clear();
+}
+
+void Window::customRender()
+{
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiResourceUpdateBatch *u = m_r->nextResourceUpdateBatch();
+ if (d.initialUpdates) {
+ u->merge(d.initialUpdates);
+ d.initialUpdates->release();
+ d.initialUpdates = nullptr;
+ }
+
+ QMatrix4x4 triMvp = d.triBaseMvp;
+ triMvp.rotate(d.triRot, 0, 1, 0);
+ d.triRot += 1;
+ u->updateDynamicBuffer(d.triUbuf, 0, 64, triMvp.constData());
+
+ if (d.winProj != m_proj) {
+ d.winProj = m_proj;
+ QMatrix4x4 mvp = m_proj;
+ mvp.scale(2.5f);
+ u->updateDynamicBuffer(d.ubuf, 0, 64, mvp.constData());
+ }
+
+ // offscreen (triangle, msaa)
+ cb->beginPass(d.rt, QColor::fromRgbF(0.5f, 0.2f, 0.0f, 1.0f), { 1.0f, 0 }, u);
+ cb->setGraphicsPipeline(d.triPs);
+ cb->setViewport({ 0, 0, float(d.msaaColorTexture->pixelSize().width()), float(d.msaaColorTexture->pixelSize().height()) });
+ cb->setShaderResources();
+ QRhiCommandBuffer::VertexInput vbufBinding(d.vbuf, quint32(sizeof(vertexData)));
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(3);
+ cb->endPass();
+
+ // onscreen (quad)
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 });
+ cb->setGraphicsPipeline(d.ps);
+ cb->setViewport({ 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) });
+ cb->setShaderResources();
+ vbufBinding.second = 0;
+ cb->setVertexInput(0, 1, &vbufBinding, d.ibuf, 0, QRhiCommandBuffer::IndexUInt16);
+ cb->drawIndexed(6);
+ cb->endPass();
+}
diff --git a/tests/manual/rhi/multiview/CMakeLists.txt b/tests/manual/rhi/multiview/CMakeLists.txt
new file mode 100644
index 0000000000..1e2efa02cb
--- /dev/null
+++ b/tests/manual/rhi/multiview/CMakeLists.txt
@@ -0,0 +1,21 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(multiview
+ GUI
+ SOURCES
+ multiview.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
+
+qt_internal_add_resource(multiview "multiview"
+ PREFIX
+ "/"
+ FILES
+ "multiview.vert.qsb"
+ "multiview.frag.qsb"
+ "texture.vert.qsb"
+ "texture.frag.qsb"
+)
diff --git a/tests/manual/rhi/multiview/buildshaders.bat b/tests/manual/rhi/multiview/buildshaders.bat
new file mode 100644
index 0000000000..c53119bd42
--- /dev/null
+++ b/tests/manual/rhi/multiview/buildshaders.bat
@@ -0,0 +1,4 @@
+qsb --view-count 2 --glsl "300 es,330" --hlsl 61 -c --msl 12 multiview.vert -o multiview.vert.qsb
+qsb --glsl "300 es,330" --hlsl 61 -c --msl 12 multiview.frag -o multiview.frag.qsb
+qsb --glsl "300 es,330" --hlsl 61 -c --msl 12 texture.vert -o texture.vert.qsb
+qsb --glsl "300 es,330" --hlsl 61 -c --msl 12 texture.frag -o texture.frag.qsb
diff --git a/tests/manual/rhi/multiview/multiview.cpp b/tests/manual/rhi/multiview/multiview.cpp
new file mode 100644
index 0000000000..a89821eb8e
--- /dev/null
+++ b/tests/manual/rhi/multiview/multiview.cpp
@@ -0,0 +1,305 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "../shared/examplefw.h"
+
+// Multiview rendering. Renders the same geometry (a triangle) with two
+// different transforms into two layers of a texture array object in a *single*
+// draw call. (NB under the hood it is at the hardware/driver's discretion what
+// happens; it may very well map to some simple looping and still drawing
+// twice, whereas with modern hardware it can be expected to be implemented
+// more efficiently, but that's hidden from us)
+
+// Toggle this to exercise 4x MSAA for the texture array that is the render
+// target of the multiview render pass. The elements written by the multiview
+// render pass get resolved to a non-multisample texture array at the end of
+// the pass.
+static bool MSAA = false;
+
+static float quadVertexData[] =
+{ // Y up, CCW
+ -0.5f, 0.5f, 0.0f, 0.0f,
+ -0.5f, -0.5f, 0.0f, 1.0f,
+ 0.5f, -0.5f, 1.0f, 1.0f,
+ 0.5f, 0.5f, 1.0f, 0.0f
+};
+
+static quint16 quadIndexData[] =
+{
+ 0, 1, 2, 0, 2, 3
+};
+
+static float triangleData[] =
+{ // Y up, CCW
+ 0.0f, 0.5f, 1.0f, 0.0f, 0.0f,
+ -0.5f, -0.5f, 0.0f, 1.0f, 0.0f,
+ 0.5f, -0.5f, 0.0f, 0.0f, 1.0f
+};
+
+static const int INSTANCE_COUNT = 5;
+
+static float instanceData[INSTANCE_COUNT * 3] =
+{
+ 0.4f, 0.0f, 0.0f,
+ 0.2f, 0.0f, 0.1f,
+ 0.0f, 0.0f, 0.2f,
+ -0.2f, 0.0f, 0.3f,
+ -0.4f, 0.0f, 0.4f
+};
+
+struct {
+ QList<QRhiResource *> releasePool;
+ QRhiBuffer *vbuf = nullptr;
+ QRhiBuffer *instanceBuf = nullptr;
+ QRhiBuffer *ibuf = nullptr;
+ QRhiBuffer *ubuf = nullptr;
+ QRhiTextureRenderTarget *rt = nullptr;
+ QRhiRenderPassDescriptor *rtRp = nullptr;
+ QRhiSampler *sampler = nullptr;
+ QRhiGraphicsPipeline *ps = nullptr;
+ QRhiResourceUpdateBatch *initialUpdates = nullptr;
+ QMatrix4x4 winProj;
+ QRhiTexture *tex = nullptr;
+ QRhiTexture *resolveTex = nullptr; // only if MSAA is true
+ QRhiTexture *ds = nullptr;
+ QRhiShaderResourceBindings *srb[2] = {};
+
+ QRhiBuffer *triUbuf = nullptr;
+ QRhiShaderResourceBindings *triSrb = nullptr;
+ QRhiGraphicsPipeline *triPs = nullptr;
+ QMatrix4x4 triBaseMvp;
+} d;
+
+void Window::customInit()
+{
+ if (!m_r->isFeatureSupported(QRhi::MultiView))
+ qFatal("Multiview is not supported");
+
+ int sampleCount = 1;
+ if (MSAA) {
+ qDebug("Using 4x MSAA for the multiview render pass");
+ sampleCount = 4;
+ }
+
+ // texture array with 2 elements, e.g. 0 is left eye, 1 is right
+ d.tex = m_r->newTextureArray(QRhiTexture::RGBA8, 2, QSize(512, 512), sampleCount, QRhiTexture::RenderTarget);
+ d.releasePool << d.tex;
+ d.tex->create();
+
+ if (MSAA) {
+ d.resolveTex = m_r->newTextureArray(QRhiTexture::RGBA8, 2, QSize(512, 512), 1, QRhiTexture::RenderTarget);
+ d.releasePool << d.resolveTex;
+ d.resolveTex->create();
+ }
+
+ // Have a depth-stencil buffer, just to exercise it, the triangles will be
+ // rendered with depth test/write enabled. The catch here is that we must
+ // use a texture array for depth/stencil as well, so QRhiRenderBuffer is
+ // not an option anymore.
+ d.ds = m_r->newTextureArray(QRhiTexture::D24S8, 2, QSize(512, 512), sampleCount, QRhiTexture::RenderTarget);
+ d.releasePool << d.ds;
+ d.ds->create();
+
+ // set up the multiview render target
+ QRhiColorAttachment multiViewAtt(d.tex);
+ // using array elements 0 and 1
+ multiViewAtt.setLayer(0);
+ multiViewAtt.setMultiViewCount(2); // the view count must be set both on the render target and the pipeline
+
+ // On-screen we work with a non-MSAA texture array, so the fragment shader
+ // does not need to deal with sampler2DMSArray, but can use sampler2DArray
+ // regardless of using multisampling or not. This means using an extra
+ // non-MSAA 2D texture array into which both array elements get resolved at
+ // the end of the multiview render pass.
+ QRhiTexture *textureForOnscreenView = d.tex;
+ if (MSAA) {
+ multiViewAtt.setResolveTexture(d.resolveTex);
+ textureForOnscreenView = d.resolveTex;
+ }
+
+ QRhiTextureRenderTargetDescription rtDesc(multiViewAtt);
+ rtDesc.setDepthTexture(d.ds);
+
+ d.rt = m_r->newTextureRenderTarget(rtDesc);
+ d.releasePool << d.rt;
+ d.rtRp = d.rt->newCompatibleRenderPassDescriptor();
+ d.releasePool << d.rtRp;
+ d.rt->setRenderPassDescriptor(d.rtRp);
+ d.rt->create();
+
+ // vertex buffer used by both passes
+ d.vbuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(quadVertexData) + sizeof(triangleData));
+ d.vbuf->create();
+ d.releasePool << d.vbuf;
+
+ // data for the instanced translation attribute
+ d.instanceBuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(instanceData));
+ d.instanceBuf->create();
+ d.releasePool << d.instanceBuf;
+
+ // resources for the on-screen visualizer
+ d.ibuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::IndexBuffer, sizeof(quadIndexData));
+ d.ibuf->create();
+ d.releasePool << d.ibuf;
+
+ const int oneRoundedUniformBlockSize = m_r->ubufAligned(72);
+ d.ubuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, oneRoundedUniformBlockSize * 2);
+ d.ubuf->create();
+ d.releasePool << d.ubuf;
+
+ d.sampler = m_r->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
+ QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge);
+ d.releasePool << d.sampler;
+ d.sampler->create();
+
+ // two srbs, just for the quad positioning on-screen
+ for (int i = 0; i < 2; ++i) {
+ QRhiShaderResourceBindings *srb = m_r->newShaderResourceBindings();
+ d.releasePool << srb;
+ srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage,
+ d.ubuf, i * oneRoundedUniformBlockSize, 72),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage,
+ textureForOnscreenView, d.sampler)
+ });
+ srb->create();
+ d.srb[i] = srb;
+ }
+
+ d.ps = m_r->newGraphicsPipeline();
+ d.releasePool << d.ps;
+ d.ps->setShaderStages({
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/texture.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/texture.frag.qsb")) }
+ });
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 4 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float2, quint32(2 * sizeof(float)) }
+ });
+ d.ps->setVertexInputLayout(inputLayout);
+ d.ps->setShaderResourceBindings(d.srb[0]); // all of them are layout-compatible
+ d.ps->setRenderPassDescriptor(m_rp);
+ d.ps->create();
+
+ d.initialUpdates = m_r->nextResourceUpdateBatch();
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, 0, sizeof(quadVertexData), quadVertexData);
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, sizeof(quadVertexData), sizeof(triangleData), triangleData);
+ d.initialUpdates->uploadStaticBuffer(d.instanceBuf, instanceData);
+ d.initialUpdates->uploadStaticBuffer(d.ibuf, quadIndexData);
+
+ qint32 flip = m_r->isYUpInFramebuffer() ? 1 : 0;
+ for (int i = 0; i < 2; ++i) {
+ d.initialUpdates->updateDynamicBuffer(d.ubuf, i * oneRoundedUniformBlockSize + 64, 4, &flip);
+ float layer = i;
+ d.initialUpdates->updateDynamicBuffer(d.ubuf, i * oneRoundedUniformBlockSize + 68, 4, &layer);
+ }
+
+ // create resources for the multiview render pass
+ d.triUbuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 128); // mat4 mvp[2]
+ d.releasePool << d.triUbuf;
+ d.triUbuf->create();
+
+ d.triSrb = m_r->newShaderResourceBindings();
+ d.releasePool << d.triSrb;
+ d.triSrb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, d.triUbuf)
+ });
+ d.triSrb->create();
+
+ d.triPs = m_r->newGraphicsPipeline();
+ d.releasePool << d.triPs;
+ d.triPs->setShaderStages({
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/multiview.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/multiview.frag.qsb")) }
+ });
+ d.triPs->setMultiViewCount(2); // the view count must be set both on the render target and the pipeline
+ inputLayout.setBindings({
+ { 5 * sizeof(float) },
+ { 3 * sizeof(float), QRhiVertexInputBinding::PerInstance }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float3, quint32(2 * sizeof(float)) },
+ { 1, 2, QRhiVertexInputAttribute::Float3, 0 }
+ });
+ d.triPs->setDepthTest(true);
+ d.triPs->setDepthWrite(true);
+ d.triPs->setSampleCount(sampleCount);
+ d.triPs->setVertexInputLayout(inputLayout);
+ d.triPs->setShaderResourceBindings(d.triSrb);
+ d.triPs->setRenderPassDescriptor(d.rtRp);
+ d.triPs->create();
+
+ d.triBaseMvp = m_r->clipSpaceCorrMatrix();
+ d.triBaseMvp.perspective(45.0f, d.rt->pixelSize().width() / float(d.rt->pixelSize().height()), 0.01f, 1000.0f);
+ d.triBaseMvp.translate(0, 0, -2);
+}
+
+void Window::customRelease()
+{
+ qDeleteAll(d.releasePool);
+ d.releasePool.clear();
+}
+
+void Window::customRender()
+{
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiResourceUpdateBatch *u = m_r->nextResourceUpdateBatch();
+ if (d.initialUpdates) {
+ u->merge(d.initialUpdates);
+ d.initialUpdates->release();
+ d.initialUpdates = nullptr;
+ }
+
+ QMatrix4x4 triMvp = d.triBaseMvp;
+ // let's say this is the left eye, make the triangle point left for now
+ triMvp.rotate(90, 0, 0, 1);
+ u->updateDynamicBuffer(d.triUbuf, 0, 64, triMvp.constData());
+ triMvp = d.triBaseMvp;
+ // right for the right eye
+ triMvp.rotate(270, 0, 0, 1);
+ u->updateDynamicBuffer(d.triUbuf, 64, 64, triMvp.constData());
+
+ cb->beginPass(d.rt, QColor::fromRgbF(0.5f, 0.2f, 0.0f, 1.0f), { 1.0f, 0 }, u);
+ cb->setGraphicsPipeline(d.triPs);
+ cb->setViewport({ 0, 0, float(d.rt->pixelSize().width()), float(d.rt->pixelSize().height()) });
+ cb->setShaderResources();
+ const QRhiCommandBuffer::VertexInput multiViewPassVbufBindings[] = {
+ { d.vbuf, quint32(sizeof(quadVertexData)) },
+ { d.instanceBuf, 0 }
+ };
+ cb->setVertexInput(0, 2, multiViewPassVbufBindings);
+ cb->draw(3, INSTANCE_COUNT);
+ cb->endPass();
+
+ // "blit" the two texture layers on-screen just to visualize the contents
+ u = m_r->nextResourceUpdateBatch();
+ if (d.winProj != m_proj) {
+ d.winProj = m_proj;
+ const int oneRoundedUniformBlockSize = m_r->ubufAligned(72);
+ for (int i = 0; i < 2; ++i) {
+ QMatrix4x4 mvp = m_proj;
+ mvp.translate(0, 0, 1);
+ if (i == 0)
+ mvp.translate(-1.0f, 0, 0);
+ else
+ mvp.translate(1.0f, 0, 0);
+ u->updateDynamicBuffer(d.ubuf, i * oneRoundedUniformBlockSize, 64, mvp.constData());
+ }
+ }
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 }, u);
+ cb->setGraphicsPipeline(d.ps);
+ cb->setViewport({ 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) });
+ const QRhiCommandBuffer::VertexInput quadPassVBufBindings[] = { { d.vbuf, 0 } };
+ cb->setVertexInput(0, 1, quadPassVBufBindings, d.ibuf, 0, QRhiCommandBuffer::IndexUInt16);
+ for (int i = 0; i < 2; ++i) {
+ cb->setShaderResources(d.srb[i]);
+ cb->drawIndexed(6);
+ }
+ cb->endPass();
+}
diff --git a/tests/manual/rhi/multiview/multiview.frag b/tests/manual/rhi/multiview/multiview.frag
new file mode 100644
index 0000000000..afcbff3504
--- /dev/null
+++ b/tests/manual/rhi/multiview/multiview.frag
@@ -0,0 +1,11 @@
+#version 440
+
+layout(location = 0) in vec3 v_color;
+layout(location = 1) in flat uint v_viewIndex;
+
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+ fragColor = vec4(v_color + v_viewIndex * 0.5, 1.0);
+}
diff --git a/tests/manual/rhi/multiview/multiview.frag.qsb b/tests/manual/rhi/multiview/multiview.frag.qsb
new file mode 100644
index 0000000000..c02a3cd4b9
--- /dev/null
+++ b/tests/manual/rhi/multiview/multiview.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/multiview/multiview.pro b/tests/manual/rhi/multiview/multiview.pro
new file mode 100644
index 0000000000..a9606f8898
--- /dev/null
+++ b/tests/manual/rhi/multiview/multiview.pro
@@ -0,0 +1,8 @@
+TEMPLATE = app
+
+QT += gui-private
+
+SOURCES = \
+ multiview.cpp
+
+RESOURCES = multiview.qrc
diff --git a/tests/manual/rhi/multiview/multiview.qrc b/tests/manual/rhi/multiview/multiview.qrc
new file mode 100644
index 0000000000..e931dd8c11
--- /dev/null
+++ b/tests/manual/rhi/multiview/multiview.qrc
@@ -0,0 +1,8 @@
+<!DOCTYPE RCC><RCC version="1.0">
+ <qresource>
+ <file>multiview.vert.qsb</file>
+ <file>multiview.frag.qsb</file>
+ <file>texture.vert.qsb</file>
+ <file>texture.frag.qsb</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/rhi/multiview/multiview.vert b/tests/manual/rhi/multiview/multiview.vert
new file mode 100644
index 0000000000..3dd17578d2
--- /dev/null
+++ b/tests/manual/rhi/multiview/multiview.vert
@@ -0,0 +1,21 @@
+#version 440
+#extension GL_EXT_multiview : require
+
+layout(location = 0) in vec4 pos;
+layout(location = 1) in vec3 color;
+layout(location = 2) in vec3 translation;
+
+layout(location = 0) out vec3 v_color;
+layout(location = 1) out flat uint v_viewIndex;
+
+layout(std140, binding = 0) uniform buf
+{
+ mat4 mvp[2];
+};
+
+void main()
+{
+ v_color = color;
+ gl_Position = mvp[gl_ViewIndex] * (pos + vec4(translation, 0.0));
+ v_viewIndex = gl_ViewIndex;
+}
diff --git a/tests/manual/rhi/multiview/multiview.vert.qsb b/tests/manual/rhi/multiview/multiview.vert.qsb
new file mode 100644
index 0000000000..4903c54103
--- /dev/null
+++ b/tests/manual/rhi/multiview/multiview.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/multiview/texture.frag b/tests/manual/rhi/multiview/texture.frag
new file mode 100644
index 0000000000..148f4113c8
--- /dev/null
+++ b/tests/manual/rhi/multiview/texture.frag
@@ -0,0 +1,19 @@
+#version 440
+
+layout(location = 0) in vec2 v_texcoord;
+
+layout(location = 0) out vec4 fragColor;
+
+layout(binding = 1) uniform sampler2DArray tex;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ int flip;
+ float layer;
+};
+
+void main()
+{
+ vec4 c = texture(tex, vec3(v_texcoord, layer));
+ fragColor = vec4(c.rgb * c.a, c.a);
+}
diff --git a/tests/manual/rhi/multiview/texture.frag.qsb b/tests/manual/rhi/multiview/texture.frag.qsb
new file mode 100644
index 0000000000..5d0de425d1
--- /dev/null
+++ b/tests/manual/rhi/multiview/texture.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/multiview/texture.vert b/tests/manual/rhi/multiview/texture.vert
new file mode 100644
index 0000000000..156dca0db6
--- /dev/null
+++ b/tests/manual/rhi/multiview/texture.vert
@@ -0,0 +1,20 @@
+#version 440
+
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec2 texcoord;
+
+layout(location = 0) out vec2 v_texcoord;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ int flip;
+ float layer;
+};
+
+void main()
+{
+ v_texcoord = vec2(texcoord.x, texcoord.y);
+ if (flip != 0)
+ v_texcoord.y = 1.0 - v_texcoord.y;
+ gl_Position = mvp * position;
+}
diff --git a/tests/manual/rhi/multiview/texture.vert.qsb b/tests/manual/rhi/multiview/texture.vert.qsb
new file mode 100644
index 0000000000..0d1078f394
--- /dev/null
+++ b/tests/manual/rhi/multiview/texture.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/multiwindow/CMakeLists.txt b/tests/manual/rhi/multiwindow/CMakeLists.txt
index 57960fc7d1..70e5d3823c 100644
--- a/tests/manual/rhi/multiwindow/CMakeLists.txt
+++ b/tests/manual/rhi/multiwindow/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from multiwindow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## multiwindow Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(multiwindow
GUI
SOURCES
multiwindow.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
@@ -32,7 +33,3 @@ qt_internal_add_resource(multiwindow "multiwindow"
FILES
${multiwindow_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:multiwindow.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/multiwindow/multiwindow.cpp b/tests/manual/rhi/multiwindow/multiwindow.cpp
index 376e705546..bea4af2d48 100644
--- a/tests/manual/rhi/multiwindow/multiwindow.cpp
+++ b/tests/manual/rhi/multiwindow/multiwindow.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QApplication>
#include <QWidget>
@@ -60,33 +13,17 @@
#include <QWindow>
#include <QPlatformSurfaceEvent>
#include <QElapsedTimer>
-
-#include <QtGui/private/qshader_p.h>
#include <QFile>
-
-#ifndef QT_NO_OPENGL
-#include <QtGui/private/qrhigles2_p.h>
-#include <QOffscreenSurface>
-#endif
-
-#if QT_CONFIG(vulkan)
#include <QLoggingCategory>
-#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 <QOffscreenSurface>
+#include <rhi/qrhi.h>
enum GraphicsApi
{
OpenGL,
Vulkan,
D3D11,
+ D3D12,
Metal
};
@@ -101,6 +38,8 @@ static QString graphicsApiName()
return QLatin1String("Vulkan");
case D3D11:
return QLatin1String("Direct3D 11");
+ case D3D12:
+ return QLatin1String("Direct3D 12");
case Metal:
return QLatin1String("Metal");
default:
@@ -145,10 +84,14 @@ void createRhi()
QRhiD3D11InitParams params;
params.enableDebugLayer = true;
r.r = QRhi::create(QRhi::D3D11, &params);
+ } else if (graphicsApi == D3D12) {
+ QRhiD3D12InitParams params;
+ params.enableDebugLayer = true;
+ r.r = QRhi::create(QRhi::D3D12, &params);
}
#endif
-#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
+#if QT_CONFIG(metal)
if (graphicsApi == Metal) {
QRhiMetalInitParams params;
r.r = QRhi::create(QRhi::Metal, &params);
@@ -315,21 +258,20 @@ Window::Window(const QString &title, const QColor &bgColor, int axis, bool noVSy
switch (graphicsApi) {
case OpenGL:
{
-#if QT_CONFIG(opengl)
setSurfaceType(OpenGLSurface);
- QSurfaceFormat fmt = QRhiGles2InitParams::adjustedFormat(); // default + depth/stencil
- fmt.setSwapInterval(noVSync ? 0 : 1); // + swap interval
+ QSurfaceFormat fmt = QSurfaceFormat::defaultFormat();
+ fmt.setSwapInterval(noVSync ? 0 : 1);
setFormat(fmt);
-#endif
}
break;
case Vulkan:
-#if QT_CONFIG(vulkan)
setSurfaceType(VulkanSurface);
+#if QT_CONFIG(vulkan)
setVulkanInstance(r.instance);
#endif
break;
case D3D11:
+ case D3D12:
setSurfaceType(Direct3DSurface);
break;
case Metal:
@@ -527,7 +469,7 @@ int main(int argc, char **argv)
#if defined(Q_OS_WIN)
graphicsApi = D3D11;
-#elif defined(Q_OS_MACOS) || defined(Q_OS_IOS)
+#elif QT_CONFIG(metal)
graphicsApi = Metal;
#elif QT_CONFIG(vulkan)
graphicsApi = Vulkan;
@@ -543,6 +485,8 @@ int main(int argc, char **argv)
cmdLineParser.addOption(vkOption);
QCommandLineOption d3dOption({ "d", "d3d11" }, QLatin1String("Direct3D 11"));
cmdLineParser.addOption(d3dOption);
+ QCommandLineOption d3d12Option({ "D", "d3d12" }, QLatin1String("Direct3D 12"));
+ cmdLineParser.addOption(d3d12Option);
QCommandLineOption mtlOption({ "m", "metal" }, QLatin1String("Metal"));
cmdLineParser.addOption(mtlOption);
cmdLineParser.process(app);
@@ -552,16 +496,23 @@ int main(int argc, char **argv)
graphicsApi = Vulkan;
if (cmdLineParser.isSet(d3dOption))
graphicsApi = D3D11;
+ if (cmdLineParser.isSet(d3d12Option))
+ graphicsApi = D3D12;
if (cmdLineParser.isSet(mtlOption))
graphicsApi = Metal;
qDebug("Selected graphics API is %s", qPrintable(graphicsApiName()));
qDebug("This is a multi-api example, use command line arguments to override:\n%s", qPrintable(cmdLineParser.helpText()));
+ QSurfaceFormat fmt;
+ fmt.setDepthBufferSize(24);
+ QSurfaceFormat::setDefaultFormat(fmt);
+
#if QT_CONFIG(vulkan)
r.instance = new QVulkanInstance;
if (graphicsApi == Vulkan) {
r.instance->setLayers({ "VK_LAYER_KHRONOS_validation" });
+ r.instance->setExtensions(QRhiVulkanInitParams::preferredInstanceExtensions());
if (!r.instance->create()) {
qWarning("Failed to create Vulkan instance, switching to OpenGL");
graphicsApi = OpenGL;
diff --git a/tests/manual/rhi/multiwindow_threaded/CMakeLists.txt b/tests/manual/rhi/multiwindow_threaded/CMakeLists.txt
index 421042f84f..47dd4153f3 100644
--- a/tests/manual/rhi/multiwindow_threaded/CMakeLists.txt
+++ b/tests/manual/rhi/multiwindow_threaded/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from multiwindow_threaded.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## multiwindow_threaded Binary:
@@ -9,7 +10,8 @@ qt_internal_add_manual_test(multiwindow_threaded
SOURCES
multiwindow_threaded.cpp
window.cpp window.h
- PUBLIC_LIBRARIES
+ LIBRARIES
+ Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
@@ -39,5 +41,4 @@ qt_internal_add_resource(multiwindow_threaded "multiwindow_threaded"
)
-#### Keys ignored in scope 1:.:.:multiwindow_threaded.pro:<TRUE>:
# TEMPLATE = "app"
diff --git a/tests/manual/rhi/multiwindow_threaded/multiwindow_threaded.cpp b/tests/manual/rhi/multiwindow_threaded/multiwindow_threaded.cpp
index ba1d510908..634caebd8d 100644
--- a/tests/manual/rhi/multiwindow_threaded/multiwindow_threaded.cpp
+++ b/tests/manual/rhi/multiwindow_threaded/multiwindow_threaded.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QApplication>
#include <QWidget>
@@ -63,26 +16,13 @@
#include <QEvent>
#include <QCommandLineParser>
#include <QElapsedTimer>
-
-#include <QtGui/private/qshader_p.h>
#include <QFile>
-
-#ifndef QT_NO_OPENGL
-#include <QtGui/private/qrhigles2_p.h>
-#include <QOffscreenSurface>
-#endif
-
-#if QT_CONFIG(vulkan)
#include <QLoggingCategory>
-#include <QtGui/private/qrhivulkan_p.h>
-#endif
-
-#ifdef Q_OS_WIN
-#include <QtGui/private/qrhid3d11_p.h>
-#endif
+#include <QOffscreenSurface>
+#include <rhi/qrhi.h>
-#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
-#include <QtGui/private/qrhimetal_p.h>
+#ifdef Q_OS_DARWIN
+#include <QtCore/private/qcore_mac_p.h>
#endif
#include "window.h"
@@ -109,6 +49,8 @@ static QString graphicsApiName()
return QLatin1String("Vulkan");
case D3D11:
return QLatin1String("Direct3D 11");
+ case D3D12:
+ return QLatin1String("Direct3D 12");
case Metal:
return QLatin1String("Metal");
default:
@@ -372,10 +314,14 @@ void Renderer::createRhi()
QRhiD3D11InitParams params;
params.enableDebugLayer = true;
r = QRhi::create(QRhi::D3D11, &params, rhiFlags);
+ } else if (graphicsApi == D3D12) {
+ QRhiD3D12InitParams params;
+ params.enableDebugLayer = true;
+ r = QRhi::create(QRhi::D3D12, &params, rhiFlags);
}
#endif
-#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
+#if QT_CONFIG(metal)
if (graphicsApi == Metal) {
QRhiMetalInitParams params;
r = QRhi::create(QRhi::Metal, &params, rhiFlags);
@@ -677,7 +623,7 @@ void createWindow()
static QColor colors[] = { Qt::red, Qt::green, Qt::blue, Qt::yellow, Qt::cyan, Qt::gray };
const int n = windows.count();
Window *w = new Window(QString::asprintf("Window+Thread #%d (%s)", n, qPrintable(graphicsApiName())), graphicsApi);
- Renderer *renderer = new Renderer(w, colors[n % 6], n % 3);;
+ Renderer *renderer = new Renderer(w, colors[n % 6], n % 3);
QObject::connect(w, &Window::initRequested, w, [renderer] {
renderer->sendInit();
});
@@ -708,7 +654,7 @@ int main(int argc, char **argv)
#if defined(Q_OS_WIN)
graphicsApi = D3D11;
-#elif defined(Q_OS_MACOS) || defined(Q_OS_IOS)
+#elif QT_CONFIG(metal)
graphicsApi = Metal;
#elif QT_CONFIG(vulkan)
graphicsApi = Vulkan;
@@ -724,6 +670,8 @@ int main(int argc, char **argv)
cmdLineParser.addOption(vkOption);
QCommandLineOption d3dOption({ "d", "d3d11" }, QLatin1String("Direct3D 11"));
cmdLineParser.addOption(d3dOption);
+ QCommandLineOption d3d12Option({ "D", "d3d12" }, QLatin1String("Direct3D 12"));
+ cmdLineParser.addOption(d3d12Option);
QCommandLineOption mtlOption({ "m", "metal" }, QLatin1String("Metal"));
cmdLineParser.addOption(mtlOption);
cmdLineParser.process(app);
@@ -733,12 +681,18 @@ int main(int argc, char **argv)
graphicsApi = Vulkan;
if (cmdLineParser.isSet(d3dOption))
graphicsApi = D3D11;
+ if (cmdLineParser.isSet(d3d12Option))
+ graphicsApi = D3D12;
if (cmdLineParser.isSet(mtlOption))
graphicsApi = Metal;
qDebug("Selected graphics API is %s", qPrintable(graphicsApiName()));
qDebug("This is a multi-api example, use command line arguments to override:\n%s", qPrintable(cmdLineParser.helpText()));
+ QSurfaceFormat fmt;
+ fmt.setDepthBufferSize(24);
+ QSurfaceFormat::setDefaultFormat(fmt);
+
#if QT_CONFIG(vulkan)
instance = new QVulkanInstance;
if (graphicsApi == Vulkan) {
diff --git a/tests/manual/rhi/multiwindow_threaded/window.cpp b/tests/manual/rhi/multiwindow_threaded/window.cpp
index d05543b4ae..d9c7340237 100644
--- a/tests/manual/rhi/multiwindow_threaded/window.cpp
+++ b/tests/manual/rhi/multiwindow_threaded/window.cpp
@@ -1,60 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "window.h"
#include <QPlatformSurfaceEvent>
-#ifndef QT_NO_OPENGL
-#include <QtGui/private/qrhigles2_p.h>
-#endif
-
#if QT_CONFIG(vulkan)
extern QVulkanInstance *instance;
#endif
@@ -63,18 +12,16 @@ Window::Window(const QString &title, GraphicsApi api)
{
switch (api) {
case OpenGL:
-#if QT_CONFIG(opengl)
setSurfaceType(OpenGLSurface);
- setFormat(QRhiGles2InitParams::adjustedFormat());
-#endif
break;
case Vulkan:
-#if QT_CONFIG(vulkan)
setSurfaceType(VulkanSurface);
+#if QT_CONFIG(vulkan)
setVulkanInstance(instance);
#endif
break;
case D3D11:
+ case D3D12:
setSurfaceType(Direct3DSurface);
break;
case Metal:
diff --git a/tests/manual/rhi/multiwindow_threaded/window.h b/tests/manual/rhi/multiwindow_threaded/window.h
index 7810858d0a..e55e51de7d 100644
--- a/tests/manual/rhi/multiwindow_threaded/window.h
+++ b/tests/manual/rhi/multiwindow_threaded/window.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef WINDOW_H
#define WINDOW_H
@@ -58,6 +11,7 @@ enum GraphicsApi
OpenGL,
Vulkan,
D3D11,
+ D3D12,
Metal
};
diff --git a/tests/manual/rhi/noninstanced/CMakeLists.txt b/tests/manual/rhi/noninstanced/CMakeLists.txt
index 5c4e81b6ec..b1f88282ba 100644
--- a/tests/manual/rhi/noninstanced/CMakeLists.txt
+++ b/tests/manual/rhi/noninstanced/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from noninstanced.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## noninstanced Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(noninstanced
GUI
SOURCES
noninstanced.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -25,7 +26,3 @@ qt_internal_add_resource(noninstanced "noninstanced"
FILES
${noninstanced_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:noninstanced.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/noninstanced/noninstanced.cpp b/tests/manual/rhi/noninstanced/noninstanced.cpp
index e014e302e0..830dd4c84b 100644
--- a/tests/manual/rhi/noninstanced/noninstanced.cpp
+++ b/tests/manual/rhi/noninstanced/noninstanced.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#define EXAMPLEFW_PREINIT
#include "../shared/examplefw.h"
diff --git a/tests/manual/rhi/offscreen/CMakeLists.txt b/tests/manual/rhi/offscreen/CMakeLists.txt
index 00a4221dc4..e77715e485 100644
--- a/tests/manual/rhi/offscreen/CMakeLists.txt
+++ b/tests/manual/rhi/offscreen/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from offscreen.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## offscreen Binary:
@@ -7,7 +8,7 @@
qt_internal_add_manual_test(offscreen
SOURCES
offscreen.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -30,7 +31,3 @@ qt_internal_add_resource(offscreen "offscreen"
FILES
${offscreen_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:offscreen.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/offscreen/offscreen.cpp b/tests/manual/rhi/offscreen/offscreen.cpp
index 8dd00cae01..86bf5ad5a9 100644
--- a/tests/manual/rhi/offscreen/offscreen.cpp
+++ b/tests/manual/rhi/offscreen/offscreen.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QGuiApplication>
#include <QImage>
@@ -54,27 +7,10 @@
#include <QFile>
#include <QLoggingCategory>
#include <QCommandLineParser>
-#include <QtGui/private/qshader_p.h>
-
-#include <QtGui/private/qrhinull_p.h>
-
-#ifndef QT_NO_OPENGL
-#include <QtGui/private/qrhigles2_p.h>
-#include <QOffscreenSurface>
-#endif
-
-#if QT_CONFIG(vulkan)
#include <QLoggingCategory>
-#include <QtGui/private/qrhivulkan_p.h>
-#endif
-
-#ifdef Q_OS_WIN
-#include <QtGui/private/qrhid3d11_p.h>
-#endif
+#include <QOffscreenSurface>
-#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
-#include <QtGui/private/qrhimetal_p.h>
-#endif
+#include <rhi/qrhi.h>
//#define TEST_FINISH
@@ -98,6 +34,7 @@ enum GraphicsApi
OpenGL,
Vulkan,
D3D11,
+ D3D12,
Metal,
Null
};
@@ -113,6 +50,8 @@ QString graphicsApiName()
return QLatin1String("Vulkan");
case D3D11:
return QLatin1String("Direct3D 11");
+ case D3D12:
+ return QLatin1String("Direct3D 12");
case Metal:
return QLatin1String("Metal");
case Null:
@@ -129,7 +68,7 @@ int main(int argc, char **argv)
#if defined(Q_OS_WIN)
graphicsApi = D3D11;
-#elif defined(Q_OS_MACOS) || defined(Q_OS_IOS)
+#elif QT_CONFIG(metal)
graphicsApi = Metal;
#elif QT_CONFIG(vulkan)
graphicsApi = Vulkan;
@@ -143,8 +82,10 @@ int main(int argc, char **argv)
cmdLineParser.addOption(glOption);
QCommandLineOption vkOption({ "v", "vulkan" }, QLatin1String("Vulkan"));
cmdLineParser.addOption(vkOption);
- QCommandLineOption d3dOption({ "d", "d3d11" }, QLatin1String("Direct3D 11"));
- cmdLineParser.addOption(d3dOption);
+ QCommandLineOption d3d11Option({ "d", "d3d11" }, QLatin1String("Direct3D 11"));
+ cmdLineParser.addOption(d3d11Option);
+ QCommandLineOption d3d12Option({ "D", "d3d12" }, QLatin1String("Direct3D 12"));
+ cmdLineParser.addOption(d3d12Option);
QCommandLineOption mtlOption({ "m", "metal" }, QLatin1String("Metal"));
cmdLineParser.addOption(mtlOption);
QCommandLineOption nullOption({ "n", "null" }, QLatin1String("Null"));
@@ -154,8 +95,10 @@ int main(int argc, char **argv)
graphicsApi = OpenGL;
if (cmdLineParser.isSet(vkOption))
graphicsApi = Vulkan;
- if (cmdLineParser.isSet(d3dOption))
+ if (cmdLineParser.isSet(d3d11Option))
graphicsApi = D3D11;
+ if (cmdLineParser.isSet(d3d12Option))
+ graphicsApi = D3D12;
if (cmdLineParser.isSet(mtlOption))
graphicsApi = Metal;
if (cmdLineParser.isSet(nullOption))
@@ -165,10 +108,11 @@ int main(int argc, char **argv)
qDebug("This is a multi-api example, use command line arguments to override:\n%s", qPrintable(cmdLineParser.helpText()));
QRhi *r = nullptr;
+ QRhi::Flags rhiFlags = QRhi::EnableTimestamps;
if (graphicsApi == Null) {
QRhiNullInitParams params;
- r = QRhi::create(QRhi::Null, &params);
+ r = QRhi::create(QRhi::Null, &params, rhiFlags);
}
#if QT_CONFIG(vulkan)
@@ -176,10 +120,11 @@ int main(int argc, char **argv)
if (graphicsApi == Vulkan) {
QLoggingCategory::setFilterRules(QStringLiteral("qt.vulkan=true"));
inst.setLayers({ "VK_LAYER_KHRONOS_validation" });
+ inst.setExtensions(QRhiVulkanInitParams::preferredInstanceExtensions());
if (inst.create()) {
QRhiVulkanInitParams params;
params.inst = &inst;
- r = QRhi::create(QRhi::Vulkan, &params);
+ r = QRhi::create(QRhi::Vulkan, &params, rhiFlags);
} else {
qWarning("Failed to create Vulkan instance, switching to OpenGL");
graphicsApi = OpenGL;
@@ -193,7 +138,7 @@ int main(int argc, char **argv)
offscreenSurface.reset(QRhiGles2InitParams::newFallbackSurface());
QRhiGles2InitParams params;
params.fallbackSurface = offscreenSurface.data();
- r = QRhi::create(QRhi::OpenGLES2, &params);
+ r = QRhi::create(QRhi::OpenGLES2, &params, rhiFlags);
}
#endif
@@ -201,14 +146,18 @@ int main(int argc, char **argv)
if (graphicsApi == D3D11) {
QRhiD3D11InitParams params;
params.enableDebugLayer = true;
- r = QRhi::create(QRhi::D3D11, &params);
+ r = QRhi::create(QRhi::D3D11, &params, rhiFlags);
+ } else if (graphicsApi == D3D12) {
+ QRhiD3D12InitParams params;
+ params.enableDebugLayer = true;
+ r = QRhi::create(QRhi::D3D12, &params, rhiFlags);
}
#endif
-#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
+#if QT_CONFIG(metal)
if (graphicsApi == Metal) {
QRhiMetalInitParams params;
- r = QRhi::create(QRhi::Metal, &params);
+ r = QRhi::create(QRhi::Metal, &params, rhiFlags);
}
#endif
@@ -335,6 +284,8 @@ int main(int argc, char **argv)
#ifdef TEST_FINISH
r->endOffscreenFrame();
#endif
+ if (r->isFeatureSupported(QRhi::Timestamps))
+ qDebug() << "GPU time:" << cb->lastCompletedGpuTime() << "seconds (may refer to a previous frame)";
}
delete ps;
diff --git a/tests/manual/rhi/polygonmode/CMakeLists.txt b/tests/manual/rhi/polygonmode/CMakeLists.txt
new file mode 100644
index 0000000000..ded4ca8d43
--- /dev/null
+++ b/tests/manual/rhi/polygonmode/CMakeLists.txt
@@ -0,0 +1,23 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(polygonmode
+ GUI
+ SOURCES
+ polygonmode.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
+
+set(polygonmode_resource_files
+ "test.vert.qsb"
+ "test.frag.qsb"
+)
+
+qt_internal_add_resource(polygonmode "polygonmode"
+ PREFIX
+ "/"
+ FILES
+ ${polygonmode_resource_files}
+)
diff --git a/tests/manual/rhi/polygonmode/buildshaders.bat b/tests/manual/rhi/polygonmode/buildshaders.bat
new file mode 100755
index 0000000000..3cd87ed7a2
--- /dev/null
+++ b/tests/manual/rhi/polygonmode/buildshaders.bat
@@ -0,0 +1,2 @@
+qsb --glsl 320es,410,120 test.vert --msl 12 --hlsl 50 -o test.vert.qsb
+qsb --glsl 320es,410,120 test.frag --msl 12 --hlsl 50 -o test.frag.qsb
diff --git a/tests/manual/rhi/polygonmode/polygonmode.cpp b/tests/manual/rhi/polygonmode/polygonmode.cpp
new file mode 100644
index 0000000000..466657ab03
--- /dev/null
+++ b/tests/manual/rhi/polygonmode/polygonmode.cpp
@@ -0,0 +1,101 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "../shared/examplefw.h"
+
+static const float geom[] = {
+ -0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f,
+ -0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,
+ 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 1.0f,
+ 0.0f, -0.5f, 0.0f, 1.0f, 0.0f, 1.0f,
+ 0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 0.0f,
+ 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 1.0f,
+
+};
+
+struct {
+ QVector<QRhiResource *> releasePool;
+ QRhiBuffer *vbuf = nullptr;
+ QRhiShaderResourceBindings *srb = nullptr;
+ QRhiGraphicsPipeline *ps = nullptr;
+ QRhiResourceUpdateBatch *initialUpdates = nullptr;
+ int count = 0;
+} d;
+
+void Window::customInit()
+{
+ m_clearColor = QColor("black");
+
+ d.vbuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(geom));
+ d.vbuf->create();
+ d.releasePool << d.vbuf;
+
+ d.srb = m_r->newShaderResourceBindings();
+ d.releasePool << d.srb;
+ d.srb->create();
+
+ d.ps = m_r->newGraphicsPipeline();
+ d.releasePool << d.ps;
+
+ d.ps->setTopology(QRhiGraphicsPipeline::TriangleStrip);
+
+ d.ps->setShaderStages({
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/test.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/test.frag.qsb")) }
+ });
+
+ d.ps->setCullMode(QRhiGraphicsPipeline::None);
+ d.ps->setPolygonMode(QRhiGraphicsPipeline::Line);
+ d.ps->setDepthTest(true);
+ d.ps->setDepthWrite(true);
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 6 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float3, 3 * sizeof(float) }
+ });
+ d.ps->setVertexInputLayout(inputLayout);
+ d.ps->setShaderResourceBindings(d.srb);
+ d.ps->setRenderPassDescriptor(m_rp);
+ d.ps->create();
+
+ d.initialUpdates = m_r->nextResourceUpdateBatch();
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, geom);
+}
+
+void Window::customRelease()
+{
+ qDeleteAll(d.releasePool);
+ d.releasePool.clear();
+}
+
+void Window::customRender()
+{
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiResourceUpdateBatch *u = m_r->nextResourceUpdateBatch();
+ if (d.initialUpdates) {
+ u->merge(d.initialUpdates);
+ d.initialUpdates->release();
+ d.initialUpdates = nullptr;
+ }
+
+ QRhiGraphicsPipeline::PolygonMode polygonMode =
+ (++d.count / 60) % 2 ? QRhiGraphicsPipeline::Fill : QRhiGraphicsPipeline::Line;
+
+ if (d.ps->polygonMode() != polygonMode) {
+ d.ps->setPolygonMode(polygonMode);
+ d.ps->create();
+ }
+
+ cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 }, u);
+ cb->setGraphicsPipeline(d.ps);
+ cb->setViewport({ 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) });
+ cb->setShaderResources();
+ QRhiCommandBuffer::VertexInput vbufBinding(d.vbuf, 0);
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(6);
+ cb->endPass();
+}
diff --git a/tests/manual/rhi/polygonmode/test.frag b/tests/manual/rhi/polygonmode/test.frag
new file mode 100644
index 0000000000..375587662f
--- /dev/null
+++ b/tests/manual/rhi/polygonmode/test.frag
@@ -0,0 +1,10 @@
+#version 440
+
+layout(location = 0) in vec3 v_color;
+
+layout(location = 0) out vec4 fragColor;
+
+void main()
+{
+ fragColor = vec4(v_color, 1.0);
+}
diff --git a/tests/manual/rhi/polygonmode/test.frag.qsb b/tests/manual/rhi/polygonmode/test.frag.qsb
new file mode 100644
index 0000000000..4c52be820b
--- /dev/null
+++ b/tests/manual/rhi/polygonmode/test.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/polygonmode/test.vert b/tests/manual/rhi/polygonmode/test.vert
new file mode 100644
index 0000000000..3838d2f3bb
--- /dev/null
+++ b/tests/manual/rhi/polygonmode/test.vert
@@ -0,0 +1,12 @@
+#version 440
+
+layout(location = 0) in vec3 position;
+layout(location = 1) in vec3 color;
+
+layout(location = 0) out vec3 v_color;
+
+void main()
+{
+ gl_Position = vec4(position, 1.0);
+ v_color = color;
+}
diff --git a/tests/manual/rhi/polygonmode/test.vert.qsb b/tests/manual/rhi/polygonmode/test.vert.qsb
new file mode 100644
index 0000000000..de4e434354
--- /dev/null
+++ b/tests/manual/rhi/polygonmode/test.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/rhi.pro b/tests/manual/rhi/rhi.pro
deleted file mode 100644
index 9238de6fc2..0000000000
--- a/tests/manual/rhi/rhi.pro
+++ /dev/null
@@ -1,30 +0,0 @@
-TEMPLATE = subdirs
-
-SUBDIRS += \
- hellominimalcrossgfxtriangle \
- compressedtexture_bc1 \
- compressedtexture_bc1_subupload \
- texuploads \
- msaatexture \
- msaarenderbuffer \
- cubemap \
- cubemap_scissor \
- cubemap_render \
- multiwindow \
- multiwindow_threaded \
- triquadcube \
- offscreen \
- floattexture \
- float16texture_with_compute \
- mrt \
- shadowmap \
- computebuffer \
- computeimage \
- instancing \
- noninstanced \
- tex3d
-
-qtConfig(widgets) {
- SUBDIRS += \
- qrhiprof
-}
diff --git a/tests/manual/rhi/rhiwidgetproto/CMakeLists.txt b/tests/manual/rhi/rhiwidgetproto/CMakeLists.txt
new file mode 100644
index 0000000000..5b62ef557d
--- /dev/null
+++ b/tests/manual/rhi/rhiwidgetproto/CMakeLists.txt
@@ -0,0 +1,33 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(rhiwidgetproto
+ GUI
+ SOURCES
+ examplewidget.cpp examplewidget.h
+ rhiwidget.cpp rhiwidget.h rhiwidget_p.h
+ main.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
+ Qt::WidgetsPrivate
+)
+
+set_source_files_properties("../shared/texture.vert.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "texture.vert.qsb"
+)
+set_source_files_properties("../shared/texture.frag.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "texture.frag.qsb"
+)
+set(rhiwidgetproto_resource_files
+ "../shared/texture.vert.qsb"
+ "../shared/texture.frag.qsb"
+)
+
+qt_internal_add_resource(rhiwidgetproto "rhiwidgetproto"
+ PREFIX
+ "/"
+ FILES
+ ${rhiwidgetproto_resource_files}
+)
diff --git a/tests/manual/rhi/rhiwidgetproto/examplewidget.cpp b/tests/manual/rhi/rhiwidgetproto/examplewidget.cpp
new file mode 100644
index 0000000000..6a6fd5b326
--- /dev/null
+++ b/tests/manual/rhi/rhiwidgetproto/examplewidget.cpp
@@ -0,0 +1,182 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "examplewidget.h"
+#include "../shared/cube.h"
+#include <QFile>
+#include <QPainter>
+
+static const QSize CUBE_TEX_SIZE(512, 512);
+
+ExampleRhiWidget::ExampleRhiWidget(QWidget *parent, Qt::WindowFlags f)
+ : QRhiWidget(parent, f)
+{
+ setDebugLayer(true);
+}
+
+void ExampleRhiWidget::initialize(QRhi *rhi, QRhiTexture *outputTexture)
+{
+ if (m_rhi != rhi) {
+ m_rt.reset();
+ m_rp.reset();
+ m_ds.reset();
+ scene.vbuf.reset();
+ } else if (m_output != outputTexture) {
+ m_rt.reset();
+ m_rp.reset();
+ }
+
+ m_rhi = rhi;
+ m_output = outputTexture;
+
+ if (!m_ds) {
+ m_ds.reset(m_rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil, m_output->pixelSize()));
+ m_ds->create();
+ } else if (m_ds->pixelSize() != m_output->pixelSize()) {
+ m_ds->setPixelSize(m_output->pixelSize());
+ m_ds->create();
+ }
+
+ if (!m_rt) {
+ m_rt.reset(m_rhi->newTextureRenderTarget({ { m_output }, m_ds.data() }));
+ m_rp.reset(m_rt->newCompatibleRenderPassDescriptor());
+ m_rt->setRenderPassDescriptor(m_rp.data());
+ m_rt->create();
+ }
+
+ if (!scene.vbuf) {
+ initScene();
+ updateCubeTexture();
+ }
+
+ const QSize outputSize = m_output->pixelSize();
+ scene.mvp = m_rhi->clipSpaceCorrMatrix();
+ scene.mvp.perspective(45.0f, outputSize.width() / (float) outputSize.height(), 0.01f, 1000.0f);
+ scene.mvp.translate(0, 0, -4);
+ updateMvp();
+}
+
+void ExampleRhiWidget::updateMvp()
+{
+ QMatrix4x4 mvp = scene.mvp * QMatrix4x4(QQuaternion::fromEulerAngles(QVector3D(30, itemData.cubeRotation, 0)).toRotationMatrix());
+ if (!scene.resourceUpdates)
+ scene.resourceUpdates = m_rhi->nextResourceUpdateBatch();
+ scene.resourceUpdates->updateDynamicBuffer(scene.ubuf.data(), 0, 64, mvp.constData());
+}
+
+void ExampleRhiWidget::updateCubeTexture()
+{
+ QImage image(CUBE_TEX_SIZE, QImage::Format_RGBA8888);
+ const QRect r(QPoint(0, 0), CUBE_TEX_SIZE);
+ QPainter p(&image);
+ p.fillRect(r, QGradient::DeepBlue);
+ QFont font;
+ font.setPointSize(24);
+ p.setFont(font);
+ p.drawText(r, itemData.cubeText);
+ p.end();
+
+ if (!scene.resourceUpdates)
+ scene.resourceUpdates = m_rhi->nextResourceUpdateBatch();
+ scene.resourceUpdates->uploadTexture(scene.cubeTex.data(), image);
+}
+
+static QShader getShader(const QString &name)
+{
+ QFile f(name);
+ if (f.open(QIODevice::ReadOnly))
+ return QShader::fromSerialized(f.readAll());
+
+ return QShader();
+}
+
+void ExampleRhiWidget::initScene()
+{
+ scene.vbuf.reset(m_rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(cube)));
+ scene.vbuf->create();
+
+ scene.resourceUpdates = m_rhi->nextResourceUpdateBatch();
+ scene.resourceUpdates->uploadStaticBuffer(scene.vbuf.data(), cube);
+
+ scene.ubuf.reset(m_rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 68));
+ scene.ubuf->create();
+
+ const qint32 flip = 0;
+ scene.resourceUpdates->updateDynamicBuffer(scene.ubuf.data(), 64, 4, &flip);
+
+ scene.cubeTex.reset(m_rhi->newTexture(QRhiTexture::RGBA8, CUBE_TEX_SIZE));
+ scene.cubeTex->create();
+
+ scene.sampler.reset(m_rhi->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
+ QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge));
+ scene.sampler->create();
+
+ scene.srb.reset(m_rhi->newShaderResourceBindings());
+ scene.srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, scene.ubuf.data()),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, scene.cubeTex.data(), scene.sampler.data())
+ });
+ scene.srb->create();
+
+ scene.ps.reset(m_rhi->newGraphicsPipeline());
+ scene.ps->setDepthTest(true);
+ scene.ps->setDepthWrite(true);
+ scene.ps->setDepthOp(QRhiGraphicsPipeline::Less);
+ scene.ps->setCullMode(QRhiGraphicsPipeline::Back);
+ scene.ps->setFrontFace(QRhiGraphicsPipeline::CCW);
+ QShader vs = getShader(QLatin1String(":/texture.vert.qsb"));
+ Q_ASSERT(vs.isValid());
+ QShader fs = getShader(QLatin1String(":/texture.frag.qsb"));
+ Q_ASSERT(fs.isValid());
+ scene.ps->setShaderStages({
+ { QRhiShaderStage::Vertex, vs },
+ { QRhiShaderStage::Fragment, fs }
+ });
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 3 * sizeof(float) },
+ { 2 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
+ { 1, 1, QRhiVertexInputAttribute::Float2, 0 }
+ });
+ scene.ps->setVertexInputLayout(inputLayout);
+ scene.ps->setShaderResourceBindings(scene.srb.data());
+ scene.ps->setRenderPassDescriptor(m_rp.data());
+ scene.ps->create();
+}
+
+void ExampleRhiWidget::render(QRhiCommandBuffer *cb)
+{
+ if (itemData.cubeRotationDirty) {
+ itemData.cubeRotationDirty = false;
+ updateMvp();
+ }
+
+ if (itemData.cubeTextDirty) {
+ itemData.cubeTextDirty = false;
+ updateCubeTexture();
+ }
+
+ QRhiResourceUpdateBatch *rub = scene.resourceUpdates;
+ if (rub)
+ scene.resourceUpdates = nullptr;
+
+ const QColor clearColor = QColor::fromRgbF(0.4f, 0.7f, 0.0f, 1.0f);
+
+ cb->beginPass(m_rt.data(), clearColor, { 1.0f, 0 }, rub);
+
+ cb->setGraphicsPipeline(scene.ps.data());
+ const QSize outputSize = m_output->pixelSize();
+ cb->setViewport(QRhiViewport(0, 0, outputSize.width(), outputSize.height()));
+ cb->setShaderResources();
+ const QRhiCommandBuffer::VertexInput vbufBindings[] = {
+ { scene.vbuf.data(), 0 },
+ { scene.vbuf.data(), quint32(36 * 3 * sizeof(float)) }
+ };
+ cb->setVertexInput(0, 2, vbufBindings);
+ cb->draw(36);
+
+ cb->endPass();
+}
diff --git a/tests/manual/rhi/rhiwidgetproto/examplewidget.h b/tests/manual/rhi/rhiwidgetproto/examplewidget.h
new file mode 100644
index 0000000000..a17fe7bce1
--- /dev/null
+++ b/tests/manual/rhi/rhiwidgetproto/examplewidget.h
@@ -0,0 +1,66 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef EXAMPLEWIDGET_H
+#define EXAMPLEWIDGET_H
+
+#include "rhiwidget.h"
+#include <rhi/qrhi.h>
+
+class ExampleRhiWidget : public QRhiWidget
+{
+public:
+ ExampleRhiWidget(QWidget *parent = nullptr, Qt::WindowFlags f = {});
+
+ void initialize(QRhi *rhi, QRhiTexture *outputTexture) override;
+ void render(QRhiCommandBuffer *cb) override;
+
+ void setCubeTextureText(const QString &s)
+ {
+ if (itemData.cubeText == s)
+ return;
+ itemData.cubeText = s;
+ itemData.cubeTextDirty = true;
+ update();
+ }
+
+ void setCubeRotation(float r)
+ {
+ if (itemData.cubeRotation == r)
+ return;
+ itemData.cubeRotation = r;
+ itemData.cubeRotationDirty = true;
+ update();
+ }
+
+private:
+ QRhi *m_rhi = nullptr;
+ QRhiTexture *m_output = nullptr;
+ QScopedPointer<QRhiRenderBuffer> m_ds;
+ QScopedPointer<QRhiTextureRenderTarget> m_rt;
+ QScopedPointer<QRhiRenderPassDescriptor> m_rp;
+
+ struct {
+ QRhiResourceUpdateBatch *resourceUpdates = nullptr;
+ QScopedPointer<QRhiBuffer> vbuf;
+ QScopedPointer<QRhiBuffer> ubuf;
+ QScopedPointer<QRhiShaderResourceBindings> srb;
+ QScopedPointer<QRhiGraphicsPipeline> ps;
+ QScopedPointer<QRhiSampler> sampler;
+ QScopedPointer<QRhiTexture> cubeTex;
+ QMatrix4x4 mvp;
+ } scene;
+
+ void initScene();
+ void updateMvp();
+ void updateCubeTexture();
+
+ struct {
+ QString cubeText;
+ bool cubeTextDirty = false;
+ float cubeRotation = 0.0f;
+ bool cubeRotationDirty = false;
+ } itemData;
+};
+
+#endif
diff --git a/tests/manual/rhi/rhiwidgetproto/main.cpp b/tests/manual/rhi/rhiwidgetproto/main.cpp
new file mode 100644
index 0000000000..a3b1741855
--- /dev/null
+++ b/tests/manual/rhi/rhiwidgetproto/main.cpp
@@ -0,0 +1,97 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QApplication>
+#include <QVBoxLayout>
+#include <QHBoxLayout>
+#include <QSlider>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QLabel>
+#include <QCheckBox>
+#include <QFileDialog>
+#include "examplewidget.h"
+
+static const bool TEST_OFFSCREEN_GRAB = false;
+
+int main(int argc, char **argv)
+{
+ qputenv("QSG_INFO", "1");
+ QApplication app(argc, argv);
+
+ QVBoxLayout *layout = new QVBoxLayout;
+
+ QLineEdit *edit = new QLineEdit(QLatin1String("Text on cube"));
+ QSlider *slider = new QSlider(Qt::Horizontal);
+ ExampleRhiWidget *rw = new ExampleRhiWidget;
+
+ QObject::connect(edit, &QLineEdit::textChanged, edit, [edit, rw] {
+ rw->setCubeTextureText(edit->text());
+ });
+
+ slider->setMinimum(0);
+ slider->setMaximum(360);
+ QObject::connect(slider, &QSlider::valueChanged, slider, [slider, rw] {
+ rw->setCubeRotation(slider->value());
+ });
+
+ QPushButton *btn = new QPushButton(QLatin1String("Grab to image"));
+ QObject::connect(btn, &QPushButton::clicked, btn, [rw] {
+ QImage image = rw->grabTexture();
+ qDebug() << image;
+ if (!image.isNull()) {
+ QFileDialog fd(rw->parentWidget());
+ fd.setAcceptMode(QFileDialog::AcceptSave);
+ fd.setDefaultSuffix("png");
+ fd.selectFile("test.png");
+ if (fd.exec() == QDialog::Accepted)
+ image.save(fd.selectedFiles().first());
+ }
+ });
+ QHBoxLayout *btnLayout = new QHBoxLayout;
+ btnLayout->addWidget(btn);
+ QCheckBox *cbExplicitSize = new QCheckBox(QLatin1String("Use explicit size"));
+ QObject::connect(cbExplicitSize, &QCheckBox::stateChanged, cbExplicitSize, [cbExplicitSize, rw] {
+ if (cbExplicitSize->isChecked())
+ rw->setExplicitSize(QSize(128, 128));
+ else
+ rw->setExplicitSize(QSize());
+ });
+ btnLayout->addWidget(cbExplicitSize);
+ QPushButton *btnMakeWindow = new QPushButton(QLatin1String("Make top-level window"));
+ QObject::connect(btnMakeWindow, &QPushButton::clicked, btnMakeWindow, [rw, btnMakeWindow, layout] {
+ if (rw->parentWidget()) {
+ rw->setParent(nullptr);
+ rw->setAttribute(Qt::WA_DeleteOnClose, true);
+ rw->show();
+ btnMakeWindow->setText(QLatin1String("Make child widget"));
+ } else {
+ rw->setAttribute(Qt::WA_DeleteOnClose, false);
+ layout->addWidget(rw);
+ btnMakeWindow->setText(QLatin1String("Make top-level window"));
+ }
+ });
+ btnLayout->addWidget(btnMakeWindow);
+
+ layout->addWidget(edit);
+ QHBoxLayout *sliderLayout = new QHBoxLayout;
+ sliderLayout->addWidget(new QLabel(QLatin1String("Cube rotation")));
+ sliderLayout->addWidget(slider);
+ layout->addLayout(sliderLayout);
+ layout->addLayout(btnLayout);
+ layout->addWidget(rw);
+
+ rw->setCubeTextureText(edit->text());
+
+ if (TEST_OFFSCREEN_GRAB) {
+ rw->resize(320, 200);
+ rw->grabTexture().save("offscreen_grab.png");
+ }
+
+ QWidget w;
+ w.setLayout(layout);
+ w.resize(1280, 720);
+ w.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/rhi/rhiwidgetproto/rhiwidget.cpp b/tests/manual/rhi/rhiwidgetproto/rhiwidget.cpp
new file mode 100644
index 0000000000..d535c655d0
--- /dev/null
+++ b/tests/manual/rhi/rhiwidgetproto/rhiwidget.cpp
@@ -0,0 +1,538 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "rhiwidget_p.h"
+
+#include <private/qguiapplication_p.h>
+#include <qpa/qplatformintegration.h>
+#include <private/qwidgetrepaintmanager_p.h>
+
+/*!
+ \class QRhiWidget
+ \inmodule QtWidgets
+ \since 6.x
+
+ \brief The QRhiWidget class is a widget for rendering 3D graphics via an
+ accelerated grapics API, such as Vulkan, Metal, or Direct 3D.
+
+ QRhiWidget provides functionality for displaying 3D content rendered through
+ the QRhi APIs within a QWidget-based application.
+
+ QRhiWidget is expected to be subclassed. To render into the 2D texture that
+ is implicitly created and managed by the QRhiWidget, subclasses should
+ reimplement the virtual functions initialize() and render().
+
+ The size of the texture will by default adapt to the size of the item. If a
+ fixed size is preferred, set an explicit size specified in pixels by
+ calling setExplicitSize().
+
+ The QRhi for the widget's top-level window is configured to use a platform
+ specific backend and graphics API by default: Metal on macOS and iOS,
+ Direct 3D 11 on Windows, OpenGL otherwise. Call setApi() to override this.
+
+ \note A single widget window can only use one QRhi backend, and so graphics
+ API. If two QRhiWidget or QQuickWidget widgets in the window's widget
+ hierarchy request different APIs, only one of them will function correctly.
+ */
+
+/*!
+ Constructs a widget which is a child of \a parent, with widget flags set to \a f.
+ */
+QRhiWidget::QRhiWidget(QWidget *parent, Qt::WindowFlags f)
+ : QWidget(*(new QRhiWidgetPrivate), parent, f)
+{
+ Q_D(QRhiWidget);
+ if (Q_UNLIKELY(!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::RhiBasedRendering)))
+ qWarning("QRhiWidget: QRhi is not supported on this platform.");
+ else
+ d->setRenderToTexture();
+
+ d->config.setEnabled(true);
+#if defined(Q_OS_DARWIN)
+ d->config.setApi(QPlatformBackingStoreRhiConfig::Metal);
+#elif defined(Q_OS_WIN)
+ d->config.setApi(QPlatformBackingStoreRhiConfig::D3D11);
+#else
+ d->config.setApi(QPlatformBackingStoreRhiConfig::OpenGL);
+#endif
+}
+
+/*!
+ Destructor.
+ */
+QRhiWidget::~QRhiWidget()
+{
+ Q_D(QRhiWidget);
+ // rhi resources must be destroyed here, cannot be left to the private dtor
+ delete d->t;
+ d->offscreenRenderer.reset();
+}
+
+/*!
+ Handles resize events that are passed in the \a e event parameter. Calls
+ the virtual function initialize().
+
+ \note Avoid overriding this function in derived classes. If that is not
+ feasible, make sure that QRhiWidget's implementation is invoked too.
+ Otherwise the underlying texture object and related resources will not get
+ resized properly and will lead to incorrect rendering.
+ */
+void QRhiWidget::resizeEvent(QResizeEvent *e)
+{
+ Q_D(QRhiWidget);
+
+ if (e->size().isEmpty()) {
+ d->noSize = true;
+ return;
+ }
+ d->noSize = false;
+
+ d->sendPaintEvent(QRect(QPoint(0, 0), size()));
+}
+
+/*!
+ Handles paint events.
+
+ Calling QWidget::update() will lead to sending a paint event \a e, and thus
+ invoking this function. (NB this is asynchronous and will happen at some
+ point after returning from update()). This function will then, after some
+ preparation, call the virtual render() to update the contents of the
+ QRhiWidget's associated texture. The widget's top-level window will then
+ composite the texture with the rest of the window.
+ */
+void QRhiWidget::paintEvent(QPaintEvent *)
+{
+ Q_D(QRhiWidget);
+ if (!updatesEnabled() || d->noSize)
+ return;
+
+ d->ensureRhi();
+ if (!d->rhi) {
+ qWarning("QRhiWidget: No QRhi");
+ return;
+ }
+
+ const QSize prevSize = d->t ? d->t->pixelSize() : QSize();
+ d->ensureTexture();
+ if (!d->t)
+ return;
+ if (d->t->pixelSize() != prevSize)
+ initialize(d->rhi, d->t);
+
+ QRhiCommandBuffer *cb = nullptr;
+ d->rhi->beginOffscreenFrame(&cb);
+ render(cb);
+ d->rhi->endOffscreenFrame();
+}
+
+/*!
+ \reimp
+*/
+bool QRhiWidget::event(QEvent *e)
+{
+ Q_D(QRhiWidget);
+ switch (e->type()) {
+ case QEvent::WindowChangeInternal:
+ // the QRhi will almost certainly change, prevent texture() from
+ // returning the existing QRhiTexture in the meantime
+ d->textureInvalid = true;
+ break;
+ case QEvent::Show:
+ if (isVisible())
+ d->sendPaintEvent(QRect(QPoint(0, 0), size()));
+ break;
+ default:
+ break;
+ }
+ return QWidget::event(e);
+}
+
+QPlatformBackingStoreRhiConfig QRhiWidgetPrivate::rhiConfig() const
+{
+ return config;
+}
+
+void QRhiWidgetPrivate::ensureRhi()
+{
+ Q_Q(QRhiWidget);
+ QRhi *currentRhi = QWidgetPrivate::rhi();
+ if (currentRhi && currentRhi->backend() != QBackingStoreRhiSupport::apiToRhiBackend(config.api())) {
+ qWarning("The top-level window is already using another graphics API for composition, "
+ "'%s' is not compatible with this widget",
+ currentRhi->backendName());
+ return;
+ }
+
+ if (currentRhi && rhi && rhi != currentRhi) {
+ // the texture belongs to the old rhi, drop it, this will also lead to
+ // initialize() being called again
+ delete t;
+ t = nullptr;
+ // if previously we created our own but now get a QRhi from the
+ // top-level, then drop what we have and start using the top-level's
+ if (rhi == offscreenRenderer.rhi())
+ offscreenRenderer.reset();
+ }
+
+ rhi = currentRhi;
+}
+
+void QRhiWidgetPrivate::ensureTexture()
+{
+ Q_Q(QRhiWidget);
+
+ QSize newSize = explicitSize;
+ if (newSize.isEmpty())
+ newSize = q->size() * q->devicePixelRatio();
+
+ if (!t) {
+ if (!rhi->isTextureFormatSupported(format))
+ qWarning("QRhiWidget: The requested texture format is not supported by the graphics API implementation");
+ t = rhi->newTexture(format, newSize, 1, QRhiTexture::RenderTarget | QRhiTexture::UsedAsTransferSource);
+ if (!t->create()) {
+ qWarning("Failed to create backing texture for QRhiWidget");
+ delete t;
+ t = nullptr;
+ return;
+ }
+ }
+
+ if (t->pixelSize() != newSize) {
+ t->setPixelSize(newSize);
+ if (!t->create())
+ qWarning("Failed to rebuild texture for QRhiWidget after resizing");
+ }
+
+ textureInvalid = false;
+}
+
+/*!
+ \return the currently set graphics API (QRhi backend).
+
+ \sa setApi()
+ */
+QRhiWidget::Api QRhiWidget::api() const
+{
+ Q_D(const QRhiWidget);
+ switch (d->config.api()) {
+ case QPlatformBackingStoreRhiConfig::OpenGL:
+ return OpenGL;
+ case QPlatformBackingStoreRhiConfig::Metal:
+ return Metal;
+ case QPlatformBackingStoreRhiConfig::Vulkan:
+ return Vulkan;
+ case QPlatformBackingStoreRhiConfig::D3D11:
+ return D3D11;
+ default:
+ return Null;
+ }
+}
+
+/*!
+ Sets the graphics API and QRhi backend to use to \a api.
+
+ The default value depends on the platform: Metal on macOS and iOS, Direct
+ 3D 11 on Windows, OpenGL otherwise.
+
+ \note This function must be called early enough, before the widget is added
+ to a widget hierarchy and displayed on screen. For example, aim to call the
+ function for the subclass constructor. If called too late, the function
+ will have no effect.
+
+ The \a api can only be set once for the widget and its top-level window,
+ once it is done and takes effect, the window can only use that API and QRhi
+ backend to render. Attempting to set another value, or to add another
+ QRhiWidget with a different \a api will not function as expected.
+
+ \sa setTextureFormat(), setDebugLayer(), api()
+ */
+void QRhiWidget::setApi(Api api)
+{
+ Q_D(QRhiWidget);
+ switch (api) {
+ case OpenGL:
+ d->config.setApi(QPlatformBackingStoreRhiConfig::OpenGL);
+ break;
+ case Metal:
+ d->config.setApi(QPlatformBackingStoreRhiConfig::Metal);
+ break;
+ case Vulkan:
+ d->config.setApi(QPlatformBackingStoreRhiConfig::Vulkan);
+ break;
+ case D3D11:
+ d->config.setApi(QPlatformBackingStoreRhiConfig::D3D11);
+ break;
+ default:
+ d->config.setApi(QPlatformBackingStoreRhiConfig::Null);
+ break;
+ }
+}
+
+/*!
+ \return true if a debug or validation layer will be requested if applicable
+ to the graphics API in use.
+
+ \sa setDebugLayer()
+ */
+bool QRhiWidget::isDebugLayerEnabled() const
+{
+ Q_D(const QRhiWidget);
+ return d->config.isDebugLayerEnabled();
+}
+
+/*!
+ Requests the debug or validation layer of the underlying graphics API
+ when \a enable is true.
+
+ Applicable for Vulkan and Direct 3D.
+
+ \note This function must be called early enough, before the widget is added
+ to a widget hierarchy and displayed on screen. For example, aim to call the
+ function for the subclass constructor. If called too late, the function
+ will have no effect.
+
+ By default this is disabled.
+
+ \sa setApi(), isDebugLayerEnabled()
+ */
+void QRhiWidget::setDebugLayer(bool enable)
+{
+ Q_D(QRhiWidget);
+ d->config.setDebugLayer(enable);
+}
+
+/*!
+ \return the currently set texture format.
+
+ The default value is QRhiTexture::RGBA8.
+
+ \sa setTextureFormat()
+ */
+QRhiTexture::Format QRhiWidget::textureFormat() const
+{
+ Q_D(const QRhiWidget);
+ return d->format;
+}
+
+/*!
+ Sets the associated texture's \a format.
+
+ The default value is QRhiTexture::RGBA8. Only formats that are reported as
+ supported from QRhi::isTextureFormatSupported() should be specified,
+ rendering will not be functional otherwise.
+
+ \note This function must be called early enough, before the widget is added
+ to a widget hierarchy and displayed on screen. For example, aim to call the
+ function for the subclass constructor. If called too late, the function
+ will have no effect.
+
+ \sa setApi(), textureFormat()
+ */
+void QRhiWidget::setTextureFormat(QRhiTexture::Format format)
+{
+ Q_D(QRhiWidget);
+ d->format = format;
+}
+
+/*!
+ \property QRhiWidget::explicitSize
+
+ The fixed size (in pixels) of the QRhiWidget's associated texture.
+
+ Only relevant when a fixed texture size is desired that does not depend on
+ the widget's size.
+
+ By default the value is a null QSize. A null or empty QSize means that the
+ texture's size follows the QRhiWidget's size. (\c{texture size} = \c{widget
+ size} * \c{device pixel ratio}).
+ */
+
+QSize QRhiWidget::explicitSize() const
+{
+ Q_D(const QRhiWidget);
+ return d->explicitSize;
+}
+
+void QRhiWidget::setExplicitSize(const QSize &pixelSize)
+{
+ Q_D(QRhiWidget);
+ if (d->explicitSize != pixelSize) {
+ d->explicitSize = pixelSize;
+ emit explicitSizeChanged(pixelSize);
+ update();
+ }
+}
+
+/*!
+ Renders a new frame, reads the contents of the texture back, and returns it
+ as a QImage.
+
+ When an error occurs, a null QImage is returned.
+
+ \note This function only supports reading back QRhiTexture::RGBA8 textures
+ at the moment. For other formats, the implementer of render() should
+ implement their own readback logic as they see fit.
+
+ The returned QImage will have a format of QImage::Format_RGBA8888.
+ QRhiWidget does not know the renderer's approach to blending and
+ composition, and therefore cannot know if the output has alpha
+ premultiplied.
+
+ This function can also be called when the QRhiWidget is not added to a
+ widget hierarchy belonging to an on-screen top-level window. This allows
+ generating an image from a 3D rendering off-screen.
+
+ \sa setTextureFormat()
+ */
+QImage QRhiWidget::grabTexture()
+{
+ Q_D(QRhiWidget);
+ if (d->noSize)
+ return QImage();
+
+ if (d->format != QRhiTexture::RGBA8) {
+ qWarning("QRhiWidget::grabTexture() only supports RGBA8 textures");
+ return QImage();
+ }
+
+ d->ensureRhi();
+ if (!d->rhi) {
+ // The widget (and its parent chain, if any) may not be shown at
+ // all, yet one may still want to use it for grabs. This is
+ // ridiculous of course because the rendering infrastructure is
+ // tied to the top-level widget that initializes upon expose, but
+ // it has to be supported.
+ d->offscreenRenderer.setConfig(d->config);
+ // no window passed in, so no swapchain, but we get a functional QRhi which we own
+ d->offscreenRenderer.create();
+ d->rhi = d->offscreenRenderer.rhi();
+ if (!d->rhi) {
+ qWarning("QRhiWidget: Failed to create dedicated QRhi for grabbing");
+ return QImage();
+ }
+ }
+
+ const QSize prevSize = d->t ? d->t->pixelSize() : QSize();
+ d->ensureTexture();
+ if (!d->t)
+ return QImage();
+ if (d->t->pixelSize() != prevSize)
+ initialize(d->rhi, d->t);
+
+ QRhiReadbackResult readResult;
+ bool readCompleted = false;
+ readResult.completed = [&readCompleted] { readCompleted = true; };
+
+ QRhiCommandBuffer *cb = nullptr;
+ d->rhi->beginOffscreenFrame(&cb);
+ render(cb);
+ QRhiResourceUpdateBatch *readbackBatch = d->rhi->nextResourceUpdateBatch();
+ readbackBatch->readBackTexture(d->t, &readResult);
+ cb->resourceUpdate(readbackBatch);
+ d->rhi->endOffscreenFrame();
+
+ if (readCompleted) {
+ QImage wrapperImage(reinterpret_cast<const uchar *>(readResult.data.constData()),
+ readResult.pixelSize.width(), readResult.pixelSize.height(),
+ QImage::Format_RGBA8888);
+ QImage result = wrapperImage.copy();
+ result.setDevicePixelRatio(devicePixelRatio());
+ return result;
+ } else {
+ Q_UNREACHABLE();
+ }
+
+ return QImage();
+}
+
+/*!
+ Called when the widget is initialized, when the associated texture's size
+ changes, or when the QRhi and texture change for some reason.
+
+ The implementation should be prepared that both \a rhi and \a outputTexture
+ can change between invocations of this function, although this is not
+ always going to happen in practice. When the widget size changes, this
+ function is called with the same \a rhi and \a outputTexture as before, but
+ \a outputTexture may have been rebuilt, meaning its
+ \l{QRhiTexture::pixelSize()}{size} and the underlying native texture
+ resource may be different than in the last invocation.
+
+ One special case where the objects will be different is when performing a
+ grabTexture() with a widget that is not yet shown, and then making the
+ widget visible on-screen within a top-level widget. There the grab will
+ happen with a dedicated QRhi that is then replaced with the top-level
+ window's associated QRhi in subsequent initialize() and render()
+ invocations.
+
+ Another, more common case is when the widget is reparented so that it
+ belongs to a new top-level window. In this case \a rhi and \a outputTexture
+ will definitely be different in the subsequent call to this function. Is is
+ then important that all existing QRhi resources are destroyed because they
+ belong to the previous QRhi that should not be used by the widget anymore.
+
+ Implementations will typically create or rebuild a QRhiTextureRenderTarget
+ in order to allow the subsequent render() call to render into the texture.
+ When a depth buffer is necessary create a QRhiRenderBuffer as well. The
+ size if this must follow the size of \a outputTexture. A compact and
+ efficient way for this is the following:
+
+ \code
+ if (m_rhi != rhi) {
+ // reset all resources (incl. m_ds, m_rt, m_rp)
+ } else if (m_output != outputTexture) {
+ // reset m_rt and m_rp
+ }
+ m_rhi = rhi;
+ m_output = outputTexture;
+ if (!m_ds) {
+ // no depth-stencil buffer yet, create one
+ m_ds = m_rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil, m_output->pixelSize());
+ m_ds->create();
+ } else if (m_ds->pixelSize() != m_output->pixelSize()) {
+ // the size has changed, update the size and rebuild
+ m_ds->setPixelSize(m_output->pixelSize());
+ m_ds->create();
+ }
+ if (!m_rt) {
+ m_rt = m_rhi->newTextureRenderTarget({ { m_output }, m_ds });
+ m_rp = m_rt->newCompatibleRenderPassDescriptor();
+ m_rt->setRenderPassDescriptor(m_rp);
+ m_rt->create();
+ }
+ \endcode
+
+ The above snippet is also prepared for \a rhi and \a outputTexture changing
+ between invocations, via the checks at the beginning of the function.
+
+ The created resources are expected to be released in the destructor
+ implementation of the subclass. \a rhi and \a outputTexture are not owned
+ by, and are guaranteed to outlive the QRhiWidget.
+
+ \sa render()
+ */
+void QRhiWidget::initialize(QRhi *rhi, QRhiTexture *outputTexture)
+{
+ Q_UNUSED(rhi);
+ Q_UNUSED(outputTexture);
+}
+
+/*!
+ Called when the widget contents (i.e. the contents of the texture) need
+ updating.
+
+ There is always at least one call to initialize() before this function is
+ called.
+
+ To request updates, call QWidget::update(). Calling update() from within
+ render() will lead to updating continuously, throttled by vsync.
+
+ \a cb is the QRhiCommandBuffer for the current frame of the Qt Quick
+ scenegraph. The function is called with a frame being recorded, but without
+ an active render pass.
+
+ \sa initialize()
+ */
+void QRhiWidget::render(QRhiCommandBuffer *cb)
+{
+ Q_UNUSED(cb);
+}
diff --git a/tests/manual/rhi/rhiwidgetproto/rhiwidget.h b/tests/manual/rhi/rhiwidgetproto/rhiwidget.h
new file mode 100644
index 0000000000..0ac947b058
--- /dev/null
+++ b/tests/manual/rhi/rhiwidgetproto/rhiwidget.h
@@ -0,0 +1,56 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef RHIWIDGET_H
+#define RHIWIDGET_H
+
+#include <QWidget>
+#include <rhi/qrhi.h>
+
+class QRhiWidgetPrivate;
+
+class QRhiWidget : public QWidget
+{
+ Q_OBJECT
+ Q_DECLARE_PRIVATE(QRhiWidget)
+ Q_PROPERTY(QSize explicitSize READ explicitSize WRITE setExplicitSize NOTIFY explicitSizeChanged)
+
+public:
+ QRhiWidget(QWidget *parent = nullptr, Qt::WindowFlags f = {});
+ ~QRhiWidget();
+
+ enum Api {
+ OpenGL,
+ Metal,
+ Vulkan,
+ D3D11,
+ Null
+ };
+
+ Api api() const;
+ void setApi(Api api);
+
+ bool isDebugLayerEnabled() const;
+ void setDebugLayer(bool enable);
+
+ QRhiTexture::Format textureFormat() const;
+ void setTextureFormat(QRhiTexture::Format format);
+
+ QSize explicitSize() const;
+ void setExplicitSize(const QSize &pixelSize);
+
+ virtual void initialize(QRhi *rhi, QRhiTexture *outputTexture);
+ virtual void render(QRhiCommandBuffer *cb);
+
+ QImage grabTexture();
+
+Q_SIGNALS:
+ void explicitSizeChanged(const QSize &pixelSize);
+
+protected:
+ void resizeEvent(QResizeEvent *e) override;
+ void paintEvent(QPaintEvent *e) override;
+ bool event(QEvent *e) override;
+};
+
+#endif
diff --git a/tests/manual/rhi/rhiwidgetproto/rhiwidget_p.h b/tests/manual/rhi/rhiwidgetproto/rhiwidget_p.h
new file mode 100644
index 0000000000..da8ebc5c8f
--- /dev/null
+++ b/tests/manual/rhi/rhiwidgetproto/rhiwidget_p.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef RHIWIDGET_P_H
+#define RHIWIDGET_P_H
+
+#include "rhiwidget.h"
+
+#include <private/qwidget_p.h>
+#include <private/qbackingstorerhisupport_p.h>
+
+class QRhiWidgetPrivate : public QWidgetPrivate
+{
+ Q_DECLARE_PUBLIC(QRhiWidget)
+public:
+ TextureData texture() const override
+ {
+ TextureData td;
+ if (!textureInvalid)
+ td.textureLeft = t;
+ return td;
+ }
+ QPlatformBackingStoreRhiConfig rhiConfig() const override;
+
+ void ensureRhi();
+ void ensureTexture();
+
+ QRhi *rhi = nullptr;
+ QRhiTexture *t = nullptr;
+ bool noSize = false;
+ QPlatformBackingStoreRhiConfig config;
+ QRhiTexture::Format format = QRhiTexture::RGBA8;
+ QSize explicitSize;
+ QBackingStoreRhiSupport offscreenRenderer;
+ bool textureInvalid = false;
+};
+
+#endif
diff --git a/tests/manual/rhi/shadowmap/CMakeLists.txt b/tests/manual/rhi/shadowmap/CMakeLists.txt
index 07c25d3a07..7aa93b4b14 100644
--- a/tests/manual/rhi/shadowmap/CMakeLists.txt
+++ b/tests/manual/rhi/shadowmap/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from shadowmap.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## shadowmap Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(shadowmap
GUI
SOURCES
shadowmap.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -27,7 +28,3 @@ qt_internal_add_resource(shadowmap "shadowmap"
FILES
${shadowmap_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:shadowmap.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/shadowmap/shadowmap.cpp b/tests/manual/rhi/shadowmap/shadowmap.cpp
index 39568ad9c4..626d7d9c49 100644
--- a/tests/manual/rhi/shadowmap/shadowmap.cpp
+++ b/tests/manual/rhi/shadowmap/shadowmap.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
#include "../shared/cube.h"
diff --git a/tests/manual/rhi/shared/buildshaders.bat b/tests/manual/rhi/shared/buildshaders.bat
index d0212bc7a7..59cd69716e 100644
--- a/tests/manual/rhi/shared/buildshaders.bat
+++ b/tests/manual/rhi/shared/buildshaders.bat
@@ -1,7 +1,7 @@
-qsb --glsl "100 es,120" --hlsl 50 --msl 12 -c color.vert -o color.vert.qsb
-qsb --glsl "100 es,120" --hlsl 50 --msl 12 -c color.frag -o color.frag.qsb
-qsb --glsl "100 es,120" --hlsl 50 --msl 12 -c texture.vert -o texture.vert.qsb
-qsb --glsl "100 es,120" --hlsl 50 --msl 12 -c texture.frag -o texture.frag.qsb
+qsb --glsl "100 es,120,150" --hlsl 50 --msl 12 -c color.vert -o color.vert.qsb
+qsb --glsl "100 es,120,150" --hlsl 50 --msl 12 -c color.frag -o color.frag.qsb
+qsb --glsl "100 es,120,150" --hlsl 50 --msl 12 -c texture.vert -o texture.vert.qsb
+qsb --glsl "100 es,120,150" --hlsl 50 --msl 12 -c texture.frag -o texture.frag.qsb
qsb --glsl "310 es,150" --hlsl 50 --msl 12 -c texture_ms4.frag -o texture_ms4.frag.qsb
qsb --glsl "100 es,120,150" --hlsl 50 --msl 12 -c texture_arr.vert -o texture_arr.vert.qsb
qsb --glsl "100 es,120,150" --hlsl 50 --msl 12 -c texture_arr.frag -o texture_arr.frag.qsb
diff --git a/tests/manual/rhi/shared/color.frag.qsb b/tests/manual/rhi/shared/color.frag.qsb
index 0c3815b8be..753acda690 100644
--- a/tests/manual/rhi/shared/color.frag.qsb
+++ b/tests/manual/rhi/shared/color.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/shared/color.vert.qsb b/tests/manual/rhi/shared/color.vert.qsb
index dfa577f668..ef7545b621 100644
--- a/tests/manual/rhi/shared/color.vert.qsb
+++ b/tests/manual/rhi/shared/color.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/shared/cube.h b/tests/manual/rhi/shared/cube.h
index 252e80c56c..e3ee11b66c 100644
--- a/tests/manual/rhi/shared/cube.h
+++ b/tests/manual/rhi/shared/cube.h
@@ -25,6 +25,8 @@
* Author: Bill Hollings <bill.hollings@brenwill.com>
*/
+// Normals added by Qt.
+
#ifndef CUBE_H
#define CUBE_H
@@ -72,6 +74,7 @@ static const float cube[] = {
1.0f,-1.0f, 1.0f,
1.0f, 1.0f, 1.0f,
+ // UVs
0.0f, 1.0f, // -X side
1.0f, 1.0f,
1.0f, 0.0f,
@@ -113,6 +116,49 @@ static const float cube[] = {
0.0f, 1.0f,
1.0f, 1.0f,
1.0f, 0.0f,
+
+ // normals
+ -1.0, 0.0, 0.0, // -X side
+ -1.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0,
+ -1.0, 0.0, 0.0,
+
+ 0.0, 0.0, -1.0, // -Z side
+ 0.0, 0.0, -1.0,
+ 0.0, 0.0, -1.0,
+ 0.0, 0.0, -1.0,
+ 0.0, 0.0, -1.0,
+ 0.0, 0.0, -1.0,
+
+ 0.0, -1.0, 0.0, // -Y side
+ 0.0, -1.0, 0.0,
+ 0.0, -1.0, 0.0,
+ 0.0, -1.0, 0.0,
+ 0.0, -1.0, 0.0,
+ 0.0, -1.0, 0.0,
+
+ 0.0, 1.0, 0.0, // +Y side
+ 0.0, 1.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 1.0, 0.0,
+
+ 1.0, 0.0, 0.0, // +X side
+ 1.0, 0.0, 0.0,
+ 1.0, 0.0, 0.0,
+ 1.0, 0.0, 0.0,
+ 1.0, 0.0, 0.0,
+ 1.0, 0.0, 0.0,
+
+ 0.0, 0.0, 1.0, // +Z side
+ 0.0, 0.0, 1.0,
+ 0.0, 0.0, 1.0,
+ 0.0, 0.0, 1.0,
+ 0.0, 0.0, 1.0,
+ 0.0, 0.0, 1.0
};
// clang-format on
diff --git a/tests/manual/rhi/shared/dds_bc1.h b/tests/manual/rhi/shared/dds_bc1.h
index 3c98a94cfc..6d7236d068 100644
--- a/tests/manual/rhi/shared/dds_bc1.h
+++ b/tests/manual/rhi/shared/dds_bc1.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
static const quint32 DDS_MAGIC = 0x20534444; // 'DDS '
static const quint32 DDS_FOURCC = 4;
diff --git a/tests/manual/rhi/shared/examplefw.h b/tests/manual/rhi/shared/examplefw.h
index 6b2860d772..f2ca57341c 100644
--- a/tests/manual/rhi/shared/examplefw.h
+++ b/tests/manual/rhi/shared/examplefw.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Adapted from hellominimalcrossgfxtriangle with the frame rendering stripped out.
// Include this file and implement Window::customInit, release and render.
@@ -60,26 +13,13 @@
#include <QTimer>
#include <QLoggingCategory>
#include <QColorSpace>
-
-#include <QtGui/private/qshader_p.h>
#include <QFile>
-#include <QtGui/private/qrhinull_p.h>
-
-#ifndef QT_NO_OPENGL
-#include <QtGui/private/qrhigles2_p.h>
#include <QOffscreenSurface>
-#endif
-
-#if QT_CONFIG(vulkan)
-#include <QtGui/private/qrhivulkan_p.h>
-#endif
-
-#ifdef Q_OS_WIN
-#include <QtGui/private/qrhid3d11_p.h>
-#endif
+#include <rhi/qrhi.h>
-#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
-#include <QtGui/private/qrhimetal_p.h>
+#ifdef EXAMPLEFW_IMGUI
+#include "qrhiimgui_p.h"
+#include "imgui.h"
#endif
QShader getShader(const QString &name)
@@ -91,12 +31,22 @@ QShader getShader(const QString &name)
return QShader();
}
+QByteArray getResource(const QString &name)
+{
+ QFile f(name);
+ if (f.open(QIODevice::ReadOnly))
+ return f.readAll();
+
+ return QByteArray();
+}
+
enum GraphicsApi
{
Null,
OpenGL,
Vulkan,
D3D11,
+ D3D12,
Metal
};
@@ -113,6 +63,8 @@ QString graphicsApiName()
return QLatin1String("Vulkan");
case D3D11:
return QLatin1String("Direct3D 11");
+ case D3D12:
+ return QLatin1String("Direct3D 12");
case Metal:
return QLatin1String("Metal");
default:
@@ -121,14 +73,15 @@ QString graphicsApiName()
return QString();
}
-QRhi::Flags rhiFlags = QRhi::EnableDebugMarkers;
+QRhi::Flags rhiFlags = QRhi::EnableDebugMarkers | QRhi::EnableTimestamps;
int sampleCount = 1;
QRhiSwapChain::Flags scFlags;
QRhi::BeginFrameFlags beginFrameFlags;
QRhi::EndFrameFlags endFrameFlags;
-int framesUntilTdr = -1;
bool transparentBackground = false;
bool debugLayer = true;
+QRhiSwapChain::Format swapchainFormat = QRhiSwapChain::SDR;
+float imguiHDRMultiplier = 0.0f;
class Window : public QWindow
{
@@ -146,6 +99,9 @@ protected:
void customInit();
void customRelease();
void customRender();
+#ifdef EXAMPLEFW_IMGUI
+ void customGui();
+#endif
void exposeEvent(QExposeEvent *) override;
bool event(QEvent *) override;
@@ -174,6 +130,11 @@ protected:
QColor m_clearColor;
+#ifdef EXAMPLEFW_IMGUI
+ QRhiImguiRenderer *m_imguiRenderer;
+ QRhiImgui m_imgui;
+#endif
+
friend int main(int, char**);
};
@@ -182,15 +143,13 @@ Window::Window()
// Tell the platform plugin what we want.
switch (graphicsApi) {
case OpenGL:
-#if QT_CONFIG(opengl)
setSurfaceType(OpenGLSurface);
- setFormat(QRhiGles2InitParams::adjustedFormat());
-#endif
break;
case Vulkan:
setSurfaceType(VulkanSurface);
break;
case D3D11:
+ case D3D12:
setSurfaceType(Direct3DSurface);
break;
case Metal:
@@ -250,6 +209,10 @@ bool Window::event(QEvent *e)
break;
default:
+#ifdef EXAMPLEFW_IMGUI
+ if (m_imgui.processEvent(e))
+ return true;
+#endif
break;
}
@@ -288,15 +251,17 @@ void Window::init()
if (debugLayer)
qDebug("Enabling D3D11 debug layer");
params.enableDebugLayer = debugLayer;
- if (framesUntilTdr > 0) {
- params.framesUntilKillingDeviceViaTdr = framesUntilTdr;
- params.repeatDeviceKill = true;
- }
m_r = QRhi::create(QRhi::D3D11, &params, rhiFlags);
+ } else if (graphicsApi == D3D12) {
+ QRhiD3D12InitParams params;
+ if (debugLayer)
+ qDebug("Enabling D3D12 debug layer");
+ params.enableDebugLayer = debugLayer;
+ m_r = QRhi::create(QRhi::D3D12, &params, rhiFlags);
}
#endif
-#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
+#if QT_CONFIG(metal)
if (graphicsApi == Metal) {
QRhiMetalInitParams params;
m_r = QRhi::create(QRhi::Metal, &params, rhiFlags);
@@ -309,7 +274,6 @@ void Window::init()
// now onto the backend-independent init
m_sc = m_r->newSwapChain();
- // allow depth-stencil, although we do not actually enable depth test/write for the triangle
m_ds = m_r->newRenderBuffer(QRhiRenderBuffer::DepthStencil,
QSize(), // no need to set the size here, due to UsedWithSwapChainOnly
sampleCount,
@@ -318,9 +282,28 @@ void Window::init()
m_sc->setDepthStencil(m_ds);
m_sc->setSampleCount(sampleCount);
m_sc->setFlags(scFlags);
+ if (!m_sc->isFormatSupported(swapchainFormat))
+ qWarning("Swapchain reports that requested format %d is not supported", int(swapchainFormat));
+ else
+ m_sc->setFormat(swapchainFormat);
m_rp = m_sc->newCompatibleRenderPassDescriptor();
m_sc->setRenderPassDescriptor(m_rp);
+#ifdef EXAMPLEFW_IMGUI
+ ImGuiIO &io(ImGui::GetIO());
+ io.FontAllowUserScaling = true; // enable ctrl+wheel on windows
+ io.IniFilename = nullptr; // no imgui.ini
+
+ QByteArray font = getResource(QLatin1String(":/fonts/RobotoMono-Medium.ttf"));
+ ImFontConfig fontCfg;
+ fontCfg.FontDataOwnedByAtlas = false;
+ io.Fonts->Clear();
+ io.Fonts->AddFontFromMemoryTTF(font.data(), font.size(), 20.0f, &fontCfg);
+ m_imgui.rebuildFontAtlas();
+
+ m_imguiRenderer = new QRhiImguiRenderer;
+#endif
+
customInit();
}
@@ -337,6 +320,11 @@ void Window::releaseResources()
delete m_sc;
m_sc = nullptr;
+#ifdef EXAMPLEFW_IMGUI
+ delete m_imguiRenderer;
+ m_imguiRenderer = nullptr;
+#endif
+
delete m_r;
m_r = nullptr;
@@ -405,6 +393,20 @@ void Window::render()
m_frameCount = 0;
}
+#ifdef EXAMPLEFW_IMGUI
+ m_imgui.nextFrame(size(), devicePixelRatio(), QPointF(0, 0), std::bind(&Window::customGui, this));
+ m_imgui.syncRenderer(m_imguiRenderer);
+
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiRenderTarget *rt = m_sc->currentFrameRenderTarget();
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ const float dpr = devicePixelRatio();
+
+ QMatrix4x4 guiMvp = m_r->clipSpaceCorrMatrix();
+ guiMvp.ortho(0, outputSizeInPixels.width() / dpr, outputSizeInPixels.height() / dpr, 0, 1, -1);
+ m_imguiRenderer->prepare(m_r, rt, cb, guiMvp, 1.0f, imguiHDRMultiplier);
+#endif
+
customRender();
m_r->endFrame(m_sc, endFrameFlags);
@@ -424,7 +426,7 @@ int main(int argc, char **argv)
// Defaults.
#if defined(Q_OS_WIN)
graphicsApi = D3D11;
-#elif defined(Q_OS_MACOS) || defined(Q_OS_IOS)
+#elif QT_CONFIG(metal)
graphicsApi = Metal;
#elif QT_CONFIG(vulkan)
graphicsApi = Vulkan;
@@ -441,8 +443,10 @@ int main(int argc, char **argv)
cmdLineParser.addOption(glOption);
QCommandLineOption vkOption({ "v", "vulkan" }, QLatin1String("Vulkan"));
cmdLineParser.addOption(vkOption);
- QCommandLineOption d3dOption({ "d", "d3d11" }, QLatin1String("Direct3D 11"));
- cmdLineParser.addOption(d3dOption);
+ QCommandLineOption d3d11Option({ "d", "d3d11" }, QLatin1String("Direct3D 11"));
+ cmdLineParser.addOption(d3d11Option);
+ QCommandLineOption d3d12Option({ "D", "d3d12" }, QLatin1String("Direct3D 12"));
+ cmdLineParser.addOption(d3d12Option);
QCommandLineOption mtlOption({ "m", "metal" }, QLatin1String("Metal"));
cmdLineParser.addOption(mtlOption);
// Testing cleanup both with QWindow::close() (hitting X or Alt-F4) and
@@ -452,12 +456,7 @@ int main(int argc, char **argv)
cmdLineParser.addOption(sdOption);
QCommandLineOption coreProfOption({ "c", "core" }, QLatin1String("Request a core profile context for OpenGL"));
cmdLineParser.addOption(coreProfOption);
- // Attempt testing device lost situations on D3D at least.
- QCommandLineOption tdrOption(QLatin1String("curse"), QLatin1String("Curse the graphics device. "
- "(generate a device reset every <count> frames when on D3D11)"),
- QLatin1String("count"));
- cmdLineParser.addOption(tdrOption);
- // Allow testing preferring the software adapter (D3D).
+ // Allow testing preferring the software adapter (D3D, Vulkan).
QCommandLineOption swOption(QLatin1String("software"), QLatin1String("Prefer a software renderer when choosing the adapter. "
"Only applicable with some APIs and platforms."));
cmdLineParser.addOption(swOption);
@@ -472,8 +471,10 @@ int main(int argc, char **argv)
graphicsApi = OpenGL;
if (cmdLineParser.isSet(vkOption))
graphicsApi = Vulkan;
- if (cmdLineParser.isSet(d3dOption))
+ if (cmdLineParser.isSet(d3d11Option))
graphicsApi = D3D11;
+ if (cmdLineParser.isSet(d3d12Option))
+ graphicsApi = D3D12;
if (cmdLineParser.isSet(mtlOption))
graphicsApi = Metal;
@@ -522,11 +523,14 @@ int main(int argc, char **argv)
inst.setLayers({ "VK_LAYER_KHRONOS_validation" });
}
const QVersionNumber supportedVersion = inst.supportedApiVersion();
- qDebug() << "Supported Vulkan API version:" << supportedVersion;
- if (supportedVersion >= QVersionNumber(1, 1)) {
- qDebug("Requesting Vulkan API 1.1 on the VkInstance");
+ if (supportedVersion >= QVersionNumber(1, 3))
+ inst.setApiVersion(QVersionNumber(1, 3));
+ else if (supportedVersion >= QVersionNumber(1, 2))
+ inst.setApiVersion(QVersionNumber(1, 2));
+ else if (supportedVersion >= QVersionNumber(1, 1))
inst.setApiVersion(QVersionNumber(1, 1));
- }
+ qDebug() << "Requesting Vulkan API" << inst.apiVersion().toString();
+ qDebug() << "Instance-level version was reported as" << supportedVersion.toString();
inst.setExtensions(QRhiVulkanInitParams::preferredInstanceExtensions());
if (!inst.create()) {
qWarning("Failed to create Vulkan instance, switching to OpenGL");
@@ -535,9 +539,6 @@ int main(int argc, char **argv)
}
#endif
- if (cmdLineParser.isSet(tdrOption))
- framesUntilTdr = cmdLineParser.value(tdrOption).toInt();
-
if (cmdLineParser.isSet(swOption))
rhiFlags |= QRhi::PreferSoftwareRenderer;
diff --git a/tests/manual/rhi/shared/imgui/buildshaders.bat b/tests/manual/rhi/shared/imgui/buildshaders.bat
new file mode 100644
index 0000000000..eec4e3a070
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/buildshaders.bat
@@ -0,0 +1,2 @@
+qsb --glsl "100 es,120,150" --hlsl 50 --msl 12 -c imgui.vert -o imgui.vert.qsb
+qsb --glsl "100 es,120,150" --hlsl 50 --msl 12 -c imgui.frag -o imgui.frag.qsb
diff --git a/tests/manual/rhi/shared/imgui/fonts/LICENSE.txt b/tests/manual/rhi/shared/imgui/fonts/LICENSE.txt
new file mode 100644
index 0000000000..d645695673
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/fonts/LICENSE.txt
@@ -0,0 +1,202 @@
+
+ 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.
diff --git a/tests/manual/rhi/shared/imgui/fonts/RobotoMono-Medium.ttf b/tests/manual/rhi/shared/imgui/fonts/RobotoMono-Medium.ttf
new file mode 100644
index 0000000000..752d0fab78
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/fonts/RobotoMono-Medium.ttf
Binary files differ
diff --git a/tests/manual/rhi/shared/imgui/imgui.cmakeinc b/tests/manual/rhi/shared/imgui/imgui.cmakeinc
new file mode 100644
index 0000000000..3e7420409d
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui.cmakeinc
@@ -0,0 +1,29 @@
+set(imgui_sources
+ ${imgui_base}/imgui/imgui.cpp
+ ${imgui_base}/imgui/imgui_draw.cpp
+ ${imgui_base}/imgui/imgui_tables.cpp
+ ${imgui_base}/imgui/imgui_widgets.cpp
+ ${imgui_base}/imgui/imgui_demo.cpp
+ ${imgui_base}/qrhiimgui.cpp
+ ${imgui_base}/qrhiimgui_p.h
+)
+
+target_sources(${imgui_target} PRIVATE
+ ${imgui_sources}
+)
+
+target_include_directories(${imgui_target} PRIVATE
+ ${imgui_base}
+ ${imgui_base}/imgui
+)
+
+qt6_add_resources(${imgui_target} "imgui_resources"
+ PREFIX
+ "/"
+ BASE
+ ${imgui_base}
+ FILES
+ ${imgui_base}/imgui.vert.qsb
+ ${imgui_base}/imgui.frag.qsb
+ ${imgui_base}/fonts/RobotoMono-Medium.ttf
+)
diff --git a/tests/manual/rhi/shared/imgui/imgui.frag b/tests/manual/rhi/shared/imgui/imgui.frag
new file mode 100644
index 0000000000..6169dd639f
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui.frag
@@ -0,0 +1,37 @@
+#version 440
+
+layout(location = 0) in vec2 v_texcoord;
+layout(location = 1) in vec4 v_color;
+
+layout(location = 0) out vec4 fragColor;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ float opacity;
+ // Windows HDR: set to SDR_white_level_in_nits / 80
+ // macOS/iOS EDR: set to 1.0
+ // No HDR: set to 0.0, will do linear to sRGB at the end then.
+ float hdrWhiteLevelMult;
+};
+
+layout(binding = 1) uniform sampler2D tex;
+
+vec3 linearToSRGB(vec3 color)
+{
+ vec3 S1 = sqrt(color);
+ vec3 S2 = sqrt(S1);
+ vec3 S3 = sqrt(S2);
+ return 0.585122381 * S1 + 0.783140355 * S2 - 0.368262736 * S3;
+}
+
+void main()
+{
+ vec4 c = v_color * texture(tex, v_texcoord);
+ c.a *= opacity;
+ if (hdrWhiteLevelMult > 0.0)
+ c.rgb *= hdrWhiteLevelMult;
+ else
+ c.rgb = linearToSRGB(c.rgb);
+ c.rgb *= c.a; // premultiplied alpha
+ fragColor = c;
+}
diff --git a/tests/manual/rhi/shared/imgui/imgui.frag.qsb b/tests/manual/rhi/shared/imgui/imgui.frag.qsb
new file mode 100644
index 0000000000..09b1e44697
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/shared/imgui/imgui.vert b/tests/manual/rhi/shared/imgui/imgui.vert
new file mode 100644
index 0000000000..45510ea0fe
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui.vert
@@ -0,0 +1,21 @@
+#version 440
+
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec2 texcoord;
+layout(location = 2) in vec4 color;
+
+layout(location = 0) out vec2 v_texcoord;
+layout(location = 1) out vec4 v_color;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ float opacity;
+ float sdrMult;
+};
+
+void main()
+{
+ v_texcoord = texcoord;
+ v_color = color;
+ gl_Position = mvp * vec4(position.xy, 0.0, 1.0);
+}
diff --git a/tests/manual/rhi/shared/imgui/imgui.vert.qsb b/tests/manual/rhi/shared/imgui/imgui.vert.qsb
new file mode 100644
index 0000000000..3ee5a7b716
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/shared/imgui/imgui/LICENSE.txt b/tests/manual/rhi/shared/imgui/imgui/LICENSE.txt
new file mode 100644
index 0000000000..4023e0caa8
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/LICENSE.txt
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2022 Omar Cornut
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in 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:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+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
+AUTHORS 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 IN THE
+SOFTWARE.
diff --git a/tests/manual/rhi/shared/imgui/imgui/imconfig.h b/tests/manual/rhi/shared/imgui/imgui/imconfig.h
new file mode 100644
index 0000000000..2a4e1975cd
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/imconfig.h
@@ -0,0 +1,125 @@
+//-----------------------------------------------------------------------------
+// COMPILE-TIME OPTIONS FOR DEAR IMGUI
+// Runtime options (clipboard callbacks, enabling various features, etc.) can generally be set via the ImGuiIO structure.
+// You can use ImGui::SetAllocatorFunctions() before calling ImGui::CreateContext() to rewire memory allocation functions.
+//-----------------------------------------------------------------------------
+// A) You may edit imconfig.h (and not overwrite it when updating Dear ImGui, or maintain a patch/rebased branch with your modifications to it)
+// B) or '#define IMGUI_USER_CONFIG "my_imgui_config.h"' in your project and then add directives in your own file without touching this template.
+//-----------------------------------------------------------------------------
+// You need to make sure that configuration settings are defined consistently _everywhere_ Dear ImGui is used, which include the imgui*.cpp
+// files but also _any_ of your code that uses Dear ImGui. This is because some compile-time options have an affect on data structures.
+// Defining those options in imconfig.h will ensure every compilation unit gets to see the same data structure layouts.
+// Call IMGUI_CHECKVERSION() from your .cpp files to verify that the data structures your files are using are matching the ones imgui.cpp is using.
+//-----------------------------------------------------------------------------
+
+#pragma once
+
+//---- Define assertion handler. Defaults to calling assert().
+// If your macro uses multiple statements, make sure is enclosed in a 'do { .. } while (0)' block so it can be used as a single statement.
+//#define IM_ASSERT(_EXPR) MyAssert(_EXPR)
+//#define IM_ASSERT(_EXPR) ((void)(_EXPR)) // Disable asserts
+
+//---- Define attributes of all API symbols declarations, e.g. for DLL under Windows
+// Using Dear ImGui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility.
+// DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions()
+// for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details.
+//#define IMGUI_API __declspec( dllexport )
+//#define IMGUI_API __declspec( dllimport )
+
+//---- Don't define obsolete functions/enums/behaviors. Consider enabling from time to time after updating to avoid using soon-to-be obsolete function/names.
+//#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+//#define IMGUI_DISABLE_OBSOLETE_KEYIO // 1.87: disable legacy io.KeyMap[]+io.KeysDown[] in favor io.AddKeyEvent(). This will be folded into IMGUI_DISABLE_OBSOLETE_FUNCTIONS in a few versions.
+
+//---- Disable all of Dear ImGui or don't implement standard windows/tools.
+// It is very strongly recommended to NOT disable the demo windows and debug tool during development. They are extremely useful in day to day work. Please read comments in imgui_demo.cpp.
+//#define IMGUI_DISABLE // Disable everything: all headers and source files will be empty.
+//#define IMGUI_DISABLE_DEMO_WINDOWS // Disable demo windows: ShowDemoWindow()/ShowStyleEditor() will be empty.
+//#define IMGUI_DISABLE_DEBUG_TOOLS // Disable metrics/debugger and other debug tools: ShowMetricsWindow(), ShowDebugLogWindow() and ShowStackToolWindow() will be empty (this was called IMGUI_DISABLE_METRICS_WINDOW before 1.88).
+
+//---- Don't implement some functions to reduce linkage requirements.
+//#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS // [Win32] Don't implement default clipboard handler. Won't use and link with OpenClipboard/GetClipboardData/CloseClipboard etc. (user32.lib/.a, kernel32.lib/.a)
+//#define IMGUI_ENABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] [Default with Visual Studio] Implement default IME handler (require imm32.lib/.a, auto-link for Visual Studio, -limm32 on command-line for MinGW)
+//#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS // [Win32] [Default with non-Visual Studio compilers] Don't implement default IME handler (won't require imm32.lib/.a)
+//#define IMGUI_DISABLE_WIN32_FUNCTIONS // [Win32] Won't use and link with any Win32 function (clipboard, ime).
+//#define IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS // [OSX] Implement default OSX clipboard handler (need to link with '-framework ApplicationServices', this is why this is not the default).
+//#define IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS // Don't implement ImFormatString/ImFormatStringV so you can implement them yourself (e.g. if you don't want to link with vsnprintf)
+//#define IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS // Don't implement ImFabs/ImSqrt/ImPow/ImFmod/ImCos/ImSin/ImAcos/ImAtan2 so you can implement them yourself.
+//#define IMGUI_DISABLE_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle at all (replace them with dummies)
+//#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS // Don't implement ImFileOpen/ImFileClose/ImFileRead/ImFileWrite and ImFileHandle so you can implement them yourself if you don't want to link with fopen/fclose/fread/fwrite. This will also disable the LogToTTY() function.
+//#define IMGUI_DISABLE_DEFAULT_ALLOCATORS // Don't implement default allocators calling malloc()/free() to avoid linking with them. You will need to call ImGui::SetAllocatorFunctions().
+//#define IMGUI_DISABLE_SSE // Disable use of SSE intrinsics even if available
+
+//---- Include imgui_user.h at the end of imgui.h as a convenience
+//#define IMGUI_INCLUDE_IMGUI_USER_H
+
+//---- Pack colors to BGRA8 instead of RGBA8 (to avoid converting from one to another)
+//#define IMGUI_USE_BGRA_PACKED_COLOR
+
+//---- Use 32-bit for ImWchar (default is 16-bit) to support unicode planes 1-16. (e.g. point beyond 0xFFFF like emoticons, dingbats, symbols, shapes, ancient languages, etc...)
+//#define IMGUI_USE_WCHAR32
+
+//---- Avoid multiple STB libraries implementations, or redefine path/filenames to prioritize another version
+// By default the embedded implementations are declared static and not available outside of Dear ImGui sources files.
+//#define IMGUI_STB_TRUETYPE_FILENAME "my_folder/stb_truetype.h"
+//#define IMGUI_STB_RECT_PACK_FILENAME "my_folder/stb_rect_pack.h"
+//#define IMGUI_STB_SPRINTF_FILENAME "my_folder/stb_sprintf.h" // only used if enabled
+//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
+//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
+
+//---- Use stb_sprintf.h for a faster implementation of vsnprintf instead of the one from libc (unless IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS is defined)
+// Compatibility checks of arguments and formats done by clang and GCC will be disabled in order to support the extra formats provided by stb_sprintf.h.
+//#define IMGUI_USE_STB_SPRINTF
+
+//---- Use FreeType to build and rasterize the font atlas (instead of stb_truetype which is embedded by default in Dear ImGui)
+// Requires FreeType headers to be available in the include path. Requires program to be compiled with 'misc/freetype/imgui_freetype.cpp' (in this repository) + the FreeType library (not provided).
+// On Windows you may use vcpkg with 'vcpkg install freetype --triplet=x64-windows' + 'vcpkg integrate install'.
+//#define IMGUI_ENABLE_FREETYPE
+
+//---- Use stb_truetype to build and rasterize the font atlas (default)
+// The only purpose of this define is if you want force compilation of the stb_truetype backend ALONG with the FreeType backend.
+//#define IMGUI_ENABLE_STB_TRUETYPE
+
+//---- Define constructor and implicit cast operators to convert back<>forth between your math types and ImVec2/ImVec4.
+// This will be inlined as part of ImVec2 and ImVec4 class declarations.
+/*
+#define IM_VEC2_CLASS_EXTRA \
+ constexpr ImVec2(const MyVec2& f) : x(f.x), y(f.y) {} \
+ operator MyVec2() const { return MyVec2(x,y); }
+
+#define IM_VEC4_CLASS_EXTRA \
+ constexpr ImVec4(const MyVec4& f) : x(f.x), y(f.y), z(f.z), w(f.w) {} \
+ operator MyVec4() const { return MyVec4(x,y,z,w); }
+*/
+
+//---- Use 32-bit vertex indices (default is 16-bit) is one way to allow large meshes with more than 64K vertices.
+// Your renderer backend will need to support it (most example renderer backends support both 16/32-bit indices).
+// Another way to allow large meshes while keeping 16-bit indices is to handle ImDrawCmd::VtxOffset in your renderer.
+// Read about ImGuiBackendFlags_RendererHasVtxOffset for details.
+#define ImDrawIdx unsigned int
+
+//---- Override ImDrawCallback signature (will need to modify renderer backends accordingly)
+//struct ImDrawList;
+//struct ImDrawCmd;
+//typedef void (*MyImDrawCallback)(const ImDrawList* draw_list, const ImDrawCmd* cmd, void* my_renderer_user_data);
+//#define ImDrawCallback MyImDrawCallback
+
+//---- Debug Tools: Macro to break in Debugger
+// (use 'Metrics->Tools->Item Picker' to pick widgets with the mouse and break into them for easy debugging.)
+//#define IM_DEBUG_BREAK IM_ASSERT(0)
+//#define IM_DEBUG_BREAK __debugbreak()
+
+//---- Debug Tools: Have the Item Picker break in the ItemAdd() function instead of ItemHoverable(),
+// (which comes earlier in the code, will catch a few extra items, allow picking items other than Hovered one.)
+// This adds a small runtime cost which is why it is not enabled by default.
+//#define IMGUI_DEBUG_TOOL_ITEM_PICKER_EX
+
+//---- Debug Tools: Enable slower asserts
+//#define IMGUI_DEBUG_PARANOID
+
+//---- Tip: You can add extra functions within the ImGui:: namespace, here or in your own headers files.
+/*
+namespace ImGui
+{
+ void MyFunction(const char* name, const MyMatrix44& v);
+}
+*/
diff --git a/tests/manual/rhi/shared/imgui/imgui/imgui.cpp b/tests/manual/rhi/shared/imgui/imgui/imgui.cpp
new file mode 100644
index 0000000000..b979938d45
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/imgui.cpp
@@ -0,0 +1,13444 @@
+// dear imgui, v1.88
+// (main code and documentation)
+
+// Help:
+// - Read FAQ at http://dearimgui.org/faq
+// - Newcomers, read 'Programmer guide' below for notes on how to setup Dear ImGui in your codebase.
+// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp. All applications in examples/ are doing that.
+// Read imgui.cpp for details, links and comments.
+
+// Resources:
+// - FAQ http://dearimgui.org/faq
+// - Homepage & latest https://github.com/ocornut/imgui
+// - Releases & changelog https://github.com/ocornut/imgui/releases
+// - Gallery https://github.com/ocornut/imgui/issues/5243 (please post your screenshots/video there!)
+// - Wiki https://github.com/ocornut/imgui/wiki (lots of good stuff there)
+// - Glossary https://github.com/ocornut/imgui/wiki/Glossary
+// - Issues & support https://github.com/ocornut/imgui/issues
+
+// Getting Started?
+// - For first-time users having issues compiling/linking/running or issues loading fonts:
+// please post in https://github.com/ocornut/imgui/discussions if you cannot find a solution in resources above.
+
+// Developed by Omar Cornut and every direct or indirect contributors to the GitHub.
+// See LICENSE.txt for copyright and licensing details (standard MIT License).
+// This library is free but needs your support to sustain development and maintenance.
+// Businesses: you can support continued development via invoiced technical support, maintenance and sponsoring contracts. Please reach out to "contact AT dearimgui.com".
+// Individuals: you can support continued development via donations. See docs/README or web page.
+
+// It is recommended that you don't modify imgui.cpp! It will become difficult for you to update the library.
+// Note that 'ImGui::' being a namespace, you can add functions into the namespace from your own source files, without
+// modifying imgui.h or imgui.cpp. You may include imgui_internal.h to access internal data structures, but it doesn't
+// come with any guarantee of forward compatibility. Discussing your changes on the GitHub Issue Tracker may lead you
+// to a better solution or official support for them.
+
+/*
+
+Index of this file:
+
+DOCUMENTATION
+
+- MISSION STATEMENT
+- END-USER GUIDE
+- PROGRAMMER GUIDE
+ - READ FIRST
+ - HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI
+ - GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE
+ - HOW A SIMPLE APPLICATION MAY LOOK LIKE
+ - HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE
+ - USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS
+- API BREAKING CHANGES (read me when you update!)
+- FREQUENTLY ASKED QUESTIONS (FAQ)
+ - Read all answers online: https://www.dearimgui.org/faq, or in docs/FAQ.md (with a Markdown viewer)
+
+CODE
+(search for "[SECTION]" in the code to find them)
+
+// [SECTION] INCLUDES
+// [SECTION] FORWARD DECLARATIONS
+// [SECTION] CONTEXT AND MEMORY ALLOCATORS
+// [SECTION] USER FACING STRUCTURES (ImGuiStyle, ImGuiIO)
+// [SECTION] MISC HELPERS/UTILITIES (Geometry functions)
+// [SECTION] MISC HELPERS/UTILITIES (String, Format, Hash functions)
+// [SECTION] MISC HELPERS/UTILITIES (File functions)
+// [SECTION] MISC HELPERS/UTILITIES (ImText* functions)
+// [SECTION] MISC HELPERS/UTILITIES (Color functions)
+// [SECTION] ImGuiStorage
+// [SECTION] ImGuiTextFilter
+// [SECTION] ImGuiTextBuffer
+// [SECTION] ImGuiListClipper
+// [SECTION] STYLING
+// [SECTION] RENDER HELPERS
+// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
+// [SECTION] INPUTS
+// [SECTION] ERROR CHECKING
+// [SECTION] LAYOUT
+// [SECTION] SCROLLING
+// [SECTION] TOOLTIPS
+// [SECTION] POPUPS
+// [SECTION] KEYBOARD/GAMEPAD NAVIGATION
+// [SECTION] DRAG AND DROP
+// [SECTION] LOGGING/CAPTURING
+// [SECTION] SETTINGS
+// [SECTION] VIEWPORTS
+// [SECTION] PLATFORM DEPENDENT HELPERS
+// [SECTION] METRICS/DEBUGGER WINDOW
+// [SECTION] DEBUG LOG WINDOW
+// [SECTION] OTHER DEBUG TOOLS (ITEM PICKER, STACK TOOL)
+
+*/
+
+//-----------------------------------------------------------------------------
+// DOCUMENTATION
+//-----------------------------------------------------------------------------
+
+/*
+
+ MISSION STATEMENT
+ =================
+
+ - Easy to use to create code-driven and data-driven tools.
+ - Easy to use to create ad hoc short-lived tools and long-lived, more elaborate tools.
+ - Easy to hack and improve.
+ - Minimize setup and maintenance.
+ - Minimize state storage on user side.
+ - Minimize state synchronization.
+ - Portable, minimize dependencies, run on target (consoles, phones, etc.).
+ - Efficient runtime and memory consumption.
+
+ Designed for developers and content-creators, not the typical end-user! Some of the current weaknesses includes:
+
+ - Doesn't look fancy, doesn't animate.
+ - Limited layout features, intricate layouts are typically crafted in code.
+
+
+ END-USER GUIDE
+ ==============
+
+ - Double-click on title bar to collapse window.
+ - Click upper right corner to close a window, available when 'bool* p_open' is passed to ImGui::Begin().
+ - Click and drag on lower right corner to resize window (double-click to auto fit window to its contents).
+ - Click and drag on any empty space to move window.
+ - TAB/SHIFT+TAB to cycle through keyboard editable fields.
+ - CTRL+Click on a slider or drag box to input value as text.
+ - Use mouse wheel to scroll.
+ - Text editor:
+ - Hold SHIFT or use mouse to select text.
+ - CTRL+Left/Right to word jump.
+ - CTRL+Shift+Left/Right to select words.
+ - CTRL+A our Double-Click to select all.
+ - CTRL+X,CTRL+C,CTRL+V to use OS clipboard/
+ - CTRL+Z,CTRL+Y to undo/redo.
+ - ESCAPE to revert text to its original value.
+ - Controls are automatically adjusted for OSX to match standard OSX text editing operations.
+ - General Keyboard controls: enable with ImGuiConfigFlags_NavEnableKeyboard.
+ - General Gamepad controls: enable with ImGuiConfigFlags_NavEnableGamepad. See suggested mappings in imgui.h ImGuiNavInput_ + download PNG/PSD at http://dearimgui.org/controls_sheets
+
+
+ PROGRAMMER GUIDE
+ ================
+
+ READ FIRST
+ ----------
+ - Remember to check the wonderful Wiki (https://github.com/ocornut/imgui/wiki)
+ - Your code creates the UI, if your code doesn't run the UI is gone! The UI can be highly dynamic, there are no construction or
+ destruction steps, less superfluous data retention on your side, less state duplication, less state synchronization, fewer bugs.
+ - Call and read ImGui::ShowDemoWindow() for demo code demonstrating most features.
+ - The library is designed to be built from sources. Avoid pre-compiled binaries and packaged versions. See imconfig.h to configure your build.
+ - Dear ImGui is an implementation of the IMGUI paradigm (immediate-mode graphical user interface, a term coined by Casey Muratori).
+ You can learn about IMGUI principles at http://www.johno.se/book/imgui.html, http://mollyrocket.com/861 & more links in Wiki.
+ - Dear ImGui is a "single pass" rasterizing implementation of the IMGUI paradigm, aimed at ease of use and high-performances.
+ For every application frame, your UI code will be called only once. This is in contrast to e.g. Unity's implementation of an IMGUI,
+ where the UI code is called multiple times ("multiple passes") from a single entry point. There are pros and cons to both approaches.
+ - Our origin is on the top-left. In axis aligned bounding boxes, Min = top-left, Max = bottom-right.
+ - This codebase is also optimized to yield decent performances with typical "Debug" builds settings.
+ - Please make sure you have asserts enabled (IM_ASSERT redirects to assert() by default, but can be redirected).
+ If you get an assert, read the messages and comments around the assert.
+ - C++: this is a very C-ish codebase: we don't rely on C++11, we don't include any C++ headers, and ImGui:: is a namespace.
+ - C++: ImVec2/ImVec4 do not expose math operators by default, because it is expected that you use your own math types.
+ See FAQ "How can I use my own math types instead of ImVec2/ImVec4?" for details about setting up imconfig.h for that.
+ However, imgui_internal.h can optionally export math operators for ImVec2/ImVec4, which we use in this codebase.
+ - C++: pay attention that ImVector<> manipulates plain-old-data and does not honor construction/destruction (avoid using it in your code!).
+
+
+ HOW TO UPDATE TO A NEWER VERSION OF DEAR IMGUI
+ ----------------------------------------------
+ - Overwrite all the sources files except for imconfig.h (if you have modified your copy of imconfig.h)
+ - Or maintain your own branch where you have imconfig.h modified as a top-most commit which you can regularly rebase over "master".
+ - You can also use '#define IMGUI_USER_CONFIG "my_config_file.h" to redirect configuration to your own file.
+ - Read the "API BREAKING CHANGES" section (below). This is where we list occasional API breaking changes.
+ If a function/type has been renamed / or marked obsolete, try to fix the name in your code before it is permanently removed
+ from the public API. If you have a problem with a missing function/symbols, search for its name in the code, there will
+ likely be a comment about it. Please report any issue to the GitHub page!
+ - To find out usage of old API, you can add '#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS' in your configuration file.
+ - Try to keep your copy of Dear ImGui reasonably up to date.
+
+
+ GETTING STARTED WITH INTEGRATING DEAR IMGUI IN YOUR CODE/ENGINE
+ ---------------------------------------------------------------
+ - Run and study the examples and demo in imgui_demo.cpp to get acquainted with the library.
+ - In the majority of cases you should be able to use unmodified backends files available in the backends/ folder.
+ - Add the Dear ImGui source files + selected backend source files to your projects or using your preferred build system.
+ It is recommended you build and statically link the .cpp files as part of your project and NOT as a shared library (DLL).
+ - You can later customize the imconfig.h file to tweak some compile-time behavior, such as integrating Dear ImGui types with your own maths types.
+ - When using Dear ImGui, your programming IDE is your friend: follow the declaration of variables, functions and types to find comments about them.
+ - Dear ImGui never touches or knows about your GPU state. The only function that knows about GPU is the draw function that you provide.
+ Effectively it means you can create widgets at any time in your code, regardless of considerations of being in "update" vs "render"
+ phases of your own application. All rendering information is stored into command-lists that you will retrieve after calling ImGui::Render().
+ - Refer to the backends and demo applications in the examples/ folder for instruction on how to setup your code.
+ - If you are running over a standard OS with a common graphics API, you should be able to use unmodified imgui_impl_*** files from the examples/ folder.
+
+
+ HOW A SIMPLE APPLICATION MAY LOOK LIKE
+ --------------------------------------
+ EXHIBIT 1: USING THE EXAMPLE BACKENDS (= imgui_impl_XXX.cpp files from the backends/ folder).
+ The sub-folders in examples/ contain examples applications following this structure.
+
+ // Application init: create a dear imgui context, setup some options, load fonts
+ ImGui::CreateContext();
+ ImGuiIO& io = ImGui::GetIO();
+ // TODO: Set optional io.ConfigFlags values, e.g. 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard' to enable keyboard controls.
+ // TODO: Fill optional fields of the io structure later.
+ // TODO: Load TTF/OTF fonts if you don't want to use the default font.
+
+ // Initialize helper Platform and Renderer backends (here we are using imgui_impl_win32.cpp and imgui_impl_dx11.cpp)
+ ImGui_ImplWin32_Init(hwnd);
+ ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext);
+
+ // Application main loop
+ while (true)
+ {
+ // Feed inputs to dear imgui, start new frame
+ ImGui_ImplDX11_NewFrame();
+ ImGui_ImplWin32_NewFrame();
+ ImGui::NewFrame();
+
+ // Any application code here
+ ImGui::Text("Hello, world!");
+
+ // Render dear imgui into screen
+ ImGui::Render();
+ ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData());
+ g_pSwapChain->Present(1, 0);
+ }
+
+ // Shutdown
+ ImGui_ImplDX11_Shutdown();
+ ImGui_ImplWin32_Shutdown();
+ ImGui::DestroyContext();
+
+ EXHIBIT 2: IMPLEMENTING CUSTOM BACKEND / CUSTOM ENGINE
+
+ // Application init: create a dear imgui context, setup some options, load fonts
+ ImGui::CreateContext();
+ ImGuiIO& io = ImGui::GetIO();
+ // TODO: Set optional io.ConfigFlags values, e.g. 'io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard' to enable keyboard controls.
+ // TODO: Fill optional fields of the io structure later.
+ // TODO: Load TTF/OTF fonts if you don't want to use the default font.
+
+ // Build and load the texture atlas into a texture
+ // (In the examples/ app this is usually done within the ImGui_ImplXXX_Init() function from one of the demo Renderer)
+ int width, height;
+ unsigned char* pixels = NULL;
+ io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
+
+ // At this point you've got the texture data and you need to upload that to your graphic system:
+ // After we have created the texture, store its pointer/identifier (_in whichever format your engine uses_) in 'io.Fonts->TexID'.
+ // This will be passed back to your via the renderer. Basically ImTextureID == void*. Read FAQ for details about ImTextureID.
+ MyTexture* texture = MyEngine::CreateTextureFromMemoryPixels(pixels, width, height, TEXTURE_TYPE_RGBA32)
+ io.Fonts->SetTexID((void*)texture);
+
+ // Application main loop
+ while (true)
+ {
+ // Setup low-level inputs, e.g. on Win32: calling GetKeyboardState(), or write to those fields from your Windows message handlers, etc.
+ // (In the examples/ app this is usually done within the ImGui_ImplXXX_NewFrame() function from one of the demo Platform Backends)
+ io.DeltaTime = 1.0f/60.0f; // set the time elapsed since the previous frame (in seconds)
+ io.DisplaySize.x = 1920.0f; // set the current display width
+ io.DisplaySize.y = 1280.0f; // set the current display height here
+ io.AddMousePosEvent(mouse_x, mouse_y); // update mouse position
+ io.AddMouseButtonEvent(0, mouse_b[0]); // update mouse button states
+ io.AddMouseButtonEvent(1, mouse_b[1]); // update mouse button states
+
+ // Call NewFrame(), after this point you can use ImGui::* functions anytime
+ // (So you want to try calling NewFrame() as early as you can in your main loop to be able to use Dear ImGui everywhere)
+ ImGui::NewFrame();
+
+ // Most of your application code here
+ ImGui::Text("Hello, world!");
+ MyGameUpdate(); // may use any Dear ImGui functions, e.g. ImGui::Begin("My window"); ImGui::Text("Hello, world!"); ImGui::End();
+ MyGameRender(); // may use any Dear ImGui functions as well!
+
+ // Render dear imgui, swap buffers
+ // (You want to try calling EndFrame/Render as late as you can, to be able to use Dear ImGui in your own game rendering code)
+ ImGui::EndFrame();
+ ImGui::Render();
+ ImDrawData* draw_data = ImGui::GetDrawData();
+ MyImGuiRenderFunction(draw_data);
+ SwapBuffers();
+ }
+
+ // Shutdown
+ ImGui::DestroyContext();
+
+ To decide whether to dispatch mouse/keyboard inputs to Dear ImGui to the rest of your application,
+ you should read the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags!
+ Please read the FAQ and example applications for details about this!
+
+
+ HOW A SIMPLE RENDERING FUNCTION MAY LOOK LIKE
+ ---------------------------------------------
+ The backends in impl_impl_XXX.cpp files contain many working implementations of a rendering function.
+
+ void void MyImGuiRenderFunction(ImDrawData* draw_data)
+ {
+ // TODO: Setup render state: alpha-blending enabled, no face culling, no depth testing, scissor enabled
+ // TODO: Setup texture sampling state: sample with bilinear filtering (NOT point/nearest filtering). Use 'io.Fonts->Flags |= ImFontAtlasFlags_NoBakedLines;' to allow point/nearest filtering.
+ // TODO: Setup viewport covering draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize
+ // TODO: Setup orthographic projection matrix cover draw_data->DisplayPos to draw_data->DisplayPos + draw_data->DisplaySize
+ // TODO: Setup shader: vertex { float2 pos, float2 uv, u32 color }, fragment shader sample color from 1 texture, multiply by vertex color.
+ ImVec2 clip_off = draw_data->DisplayPos;
+ for (int n = 0; n < draw_data->CmdListsCount; n++)
+ {
+ const ImDrawList* cmd_list = draw_data->CmdLists[n];
+ const ImDrawVert* vtx_buffer = cmd_list->VtxBuffer.Data; // vertex buffer generated by Dear ImGui
+ const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data; // index buffer generated by Dear ImGui
+ for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
+ {
+ const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
+ if (pcmd->UserCallback)
+ {
+ pcmd->UserCallback(cmd_list, pcmd);
+ }
+ else
+ {
+ // Project scissor/clipping rectangles into framebuffer space
+ ImVec2 clip_min(pcmd->ClipRect.x - clip_off.x, pcmd->ClipRect.y - clip_off.y);
+ ImVec2 clip_max(pcmd->ClipRect.z - clip_off.x, pcmd->ClipRect.w - clip_off.y);
+ if (clip_max.x <= clip_min.x || clip_max.y <= clip_min.y)
+ continue;
+
+ // We are using scissoring to clip some objects. All low-level graphics API should support it.
+ // - If your engine doesn't support scissoring yet, you may ignore this at first. You will get some small glitches
+ // (some elements visible outside their bounds) but you can fix that once everything else works!
+ // - Clipping coordinates are provided in imgui coordinates space:
+ // - For a given viewport, draw_data->DisplayPos == viewport->Pos and draw_data->DisplaySize == viewport->Size
+ // - In a single viewport application, draw_data->DisplayPos == (0,0) and draw_data->DisplaySize == io.DisplaySize, but always use GetMainViewport()->Pos/Size instead of hardcoding those values.
+ // - In the interest of supporting multi-viewport applications (see 'docking' branch on github),
+ // always subtract draw_data->DisplayPos from clipping bounds to convert them to your viewport space.
+ // - Note that pcmd->ClipRect contains Min+Max bounds. Some graphics API may use Min+Max, other may use Min+Size (size being Max-Min)
+ MyEngineSetScissor(clip_min.x, clip_min.y, clip_max.x, clip_max.y);
+
+ // The texture for the draw call is specified by pcmd->GetTexID().
+ // The vast majority of draw calls will use the Dear ImGui texture atlas, which value you have set yourself during initialization.
+ MyEngineBindTexture((MyTexture*)pcmd->GetTexID());
+
+ // Render 'pcmd->ElemCount/3' indexed triangles.
+ // By default the indices ImDrawIdx are 16-bit, you can change them to 32-bit in imconfig.h if your engine doesn't support 16-bit indices.
+ MyEngineDrawIndexedTriangles(pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer + pcmd->IdxOffset, vtx_buffer, pcmd->VtxOffset);
+ }
+ }
+ }
+ }
+
+
+ USING GAMEPAD/KEYBOARD NAVIGATION CONTROLS
+ ------------------------------------------
+ - The gamepad/keyboard navigation is fairly functional and keeps being improved.
+ - Gamepad support is particularly useful to use Dear ImGui on a console system (e.g. PS4, Switch, XB1) without a mouse!
+ - You can ask questions and report issues at https://github.com/ocornut/imgui/issues/787
+ - The initial focus was to support game controllers, but keyboard is becoming increasingly and decently usable.
+ - Keyboard:
+ - Application: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable.
+ - Internally: NewFrame() will automatically fill io.NavInputs[] based on backend's io.AddKeyEvent() calls.
+ - When keyboard navigation is active (io.NavActive + ImGuiConfigFlags_NavEnableKeyboard),
+ the io.WantCaptureKeyboard flag will be set. For more advanced uses, you may want to read from:
+ - io.NavActive: true when a window is focused and it doesn't have the ImGuiWindowFlags_NoNavInputs flag set.
+ - io.NavVisible: true when the navigation cursor is visible (and usually goes false when mouse is used).
+ - or query focus information with e.g. IsWindowFocused(ImGuiFocusedFlags_AnyWindow), IsItemFocused() etc. functions.
+ Please reach out if you think the game vs navigation input sharing could be improved.
+ - Gamepad:
+ - Application: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable.
+ - Backend: Set io.BackendFlags |= ImGuiBackendFlags_HasGamepad + call io.AddKeyEvent/AddKeyAnalogEvent() with ImGuiKey_Gamepad_XXX keys.
+ For analog values (0.0f to 1.0f), backend is responsible to handling a dead-zone and rescaling inputs accordingly.
+ Backend code will probably need to transform your raw inputs (such as e.g. remapping your 0.2..0.9 raw input range to 0.0..1.0 imgui range, etc.).
+ - Internally: NewFrame() will automatically fill io.NavInputs[] based on backend's io.AddKeyEvent() + io.AddKeyAnalogEvent() calls.
+ - BEFORE 1.87, BACKENDS USED TO WRITE DIRECTLY TO io.NavInputs[]. This is going to be obsoleted in the future. Please call io functions instead!
+ - You can download PNG/PSD files depicting the gamepad controls for common controllers at: http://dearimgui.org/controls_sheets
+ - If you need to share inputs between your game and the Dear ImGui interface, the easiest approach is to go all-or-nothing,
+ with a buttons combo to toggle the target. Please reach out if you think the game vs navigation input sharing could be improved.
+ - Mouse:
+ - PS4/PS5 users: Consider emulating a mouse cursor with DualShock4 touch pad or a spare analog stick as a mouse-emulation fallback.
+ - Consoles/Tablet/Phone users: Consider using a Synergy 1.x server (on your PC) + uSynergy.c (on your console/tablet/phone app) to share your PC mouse/keyboard.
+ - On a TV/console system where readability may be lower or mouse inputs may be awkward, you may want to set the ImGuiConfigFlags_NavEnableSetMousePos flag.
+ Enabling ImGuiConfigFlags_NavEnableSetMousePos + ImGuiBackendFlags_HasSetMousePos instructs dear imgui to move your mouse cursor along with navigation movements.
+ When enabled, the NewFrame() function may alter 'io.MousePos' and set 'io.WantSetMousePos' to notify you that it wants the mouse cursor to be moved.
+ When that happens your backend NEEDS to move the OS or underlying mouse cursor on the next frame. Some of the backends in examples/ do that.
+ (If you set the NavEnableSetMousePos flag but don't honor 'io.WantSetMousePos' properly, imgui will misbehave as it will see your mouse moving back and forth!)
+ (In a setup when you may not have easy control over the mouse cursor, e.g. uSynergy.c doesn't expose moving remote mouse cursor, you may want
+ to set a boolean to ignore your other external mouse positions until the external source is moved again.)
+
+
+ API BREAKING CHANGES
+ ====================
+
+ Occasionally introducing changes that are breaking the API. We try to make the breakage minor and easy to fix.
+ Below is a change-log of API breaking changes only. If you are using one of the functions listed, expect to have to fix some code.
+ When you are not sure about an old symbol or function name, try using the Search/Find function of your IDE to look for comments or references in all imgui files.
+ You can read releases logs https://github.com/ocornut/imgui/releases for more details.
+
+ - 2022/06/15 (1.88) - renamed IMGUI_DISABLE_METRICS_WINDOW to IMGUI_DISABLE_DEBUG_TOOLS for correctness. kept support for old define (will obsolete).
+ - 2022/05/03 (1.88) - backends: osx: removed ImGui_ImplOSX_HandleEvent() from backend API in favor of backend automatically handling event capture. All ImGui_ImplOSX_HandleEvent() calls should be removed as they are now unnecessary.
+ - 2022/04/05 (1.88) - inputs: renamed ImGuiKeyModFlags to ImGuiModFlags. Kept inline redirection enums (will obsolete). This was never used in public API functions but technically present in imgui.h and ImGuiIO.
+ - 2022/01/20 (1.87) - inputs: reworded gamepad IO.
+ - Backend writing to io.NavInputs[] -> backend should call io.AddKeyEvent()/io.AddKeyAnalogEvent() with ImGuiKey_GamepadXXX values.
+ - 2022/01/19 (1.87) - sliders, drags: removed support for legacy arithmetic operators (+,+-,*,/) when inputing text. This doesn't break any api/code but a feature that used to be accessible by end-users (which seemingly no one used).
+ - 2022/01/17 (1.87) - inputs: reworked mouse IO.
+ - Backend writing to io.MousePos -> backend should call io.AddMousePosEvent()
+ - Backend writing to io.MouseDown[] -> backend should call io.AddMouseButtonEvent()
+ - Backend writing to io.MouseWheel -> backend should call io.AddMouseWheelEvent()
+ - Backend writing to io.MouseHoveredViewport -> backend should call io.AddMouseViewportEvent() [Docking branch w/ multi-viewports only]
+ note: for all calls to IO new functions, the Dear ImGui context should be bound/current.
+ read https://github.com/ocornut/imgui/issues/4921 for details.
+ - 2022/01/10 (1.87) - inputs: reworked keyboard IO. Removed io.KeyMap[], io.KeysDown[] in favor of calling io.AddKeyEvent(). Removed GetKeyIndex(), now unecessary. All IsKeyXXX() functions now take ImGuiKey values. All features are still functional until IMGUI_DISABLE_OBSOLETE_KEYIO is defined. Read Changelog and Release Notes for details.
+ - IsKeyPressed(MY_NATIVE_KEY_XXX) -> use IsKeyPressed(ImGuiKey_XXX)
+ - IsKeyPressed(GetKeyIndex(ImGuiKey_XXX)) -> use IsKeyPressed(ImGuiKey_XXX)
+ - Backend writing to io.KeyMap[],io.KeysDown[] -> backend should call io.AddKeyEvent() (+ call io.SetKeyEventNativeData() if you want legacy user code to stil function with legacy key codes).
+ - Backend writing to io.KeyCtrl, io.KeyShift.. -> backend should call io.AddKeyEvent() with ImGuiKey_ModXXX values. *IF YOU PULLED CODE BETWEEN 2021/01/10 and 2021/01/27: We used to have a io.AddKeyModsEvent() function which was now replaced by io.AddKeyEvent() with ImGuiKey_ModXXX values.*
+ - one case won't work with backward compatibility: if your custom backend used ImGuiKey as mock native indices (e.g. "io.KeyMap[ImGuiKey_A] = ImGuiKey_A") because those values are now larger than the legacy KeyDown[] array. Will assert.
+ - inputs: added ImGuiKey_ModCtrl/ImGuiKey_ModShift/ImGuiKey_ModAlt/ImGuiKey_ModSuper values to submit keyboard modifiers using io.AddKeyEvent(), instead of writing directly to io.KeyCtrl, io.KeyShift, io.KeyAlt, io.KeySuper.
+ - 2022/01/05 (1.87) - inputs: renamed ImGuiKey_KeyPadEnter to ImGuiKey_KeypadEnter to align with new symbols. Kept redirection enum.
+ - 2022/01/05 (1.87) - removed io.ImeSetInputScreenPosFn() in favor of more flexible io.SetPlatformImeDataFn(). Removed 'void* io.ImeWindowHandle' in favor of writing to 'void* ImGuiViewport::PlatformHandleRaw'.
+ - 2022/01/01 (1.87) - commented out redirecting functions/enums names that were marked obsolete in 1.69, 1.70, 1.71, 1.72 (March-July 2019)
+ - ImGui::SetNextTreeNodeOpen() -> use ImGui::SetNextItemOpen()
+ - ImGui::GetContentRegionAvailWidth() -> use ImGui::GetContentRegionAvail().x
+ - ImGui::TreeAdvanceToLabelPos() -> use ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetTreeNodeToLabelSpacing());
+ - ImFontAtlas::CustomRect -> use ImFontAtlasCustomRect
+ - ImGuiColorEditFlags_RGB/HSV/HEX -> use ImGuiColorEditFlags_DisplayRGB/HSV/Hex
+ - 2021/12/20 (1.86) - backends: removed obsolete Marmalade backend (imgui_impl_marmalade.cpp) + example. Find last supported version at https://github.com/ocornut/imgui/wiki/Bindings
+ - 2021/11/04 (1.86) - removed CalcListClipping() function. Prefer using ImGuiListClipper which can return non-contiguous ranges. Please open an issue if you think you really need this function.
+ - 2021/08/23 (1.85) - removed GetWindowContentRegionWidth() function. keep inline redirection helper. can use 'GetWindowContentRegionMax().x - GetWindowContentRegionMin().x' instead for generally 'GetContentRegionAvail().x' is more useful.
+ - 2021/07/26 (1.84) - commented out redirecting functions/enums names that were marked obsolete in 1.67 and 1.69 (March 2019):
+ - ImGui::GetOverlayDrawList() -> use ImGui::GetForegroundDrawList()
+ - ImFont::GlyphRangesBuilder -> use ImFontGlyphRangesBuilder
+ - 2021/05/19 (1.83) - backends: obsoleted direct access to ImDrawCmd::TextureId in favor of calling ImDrawCmd::GetTexID().
+ - if you are using official backends from the source tree: you have nothing to do.
+ - if you have copied old backend code or using your own: change access to draw_cmd->TextureId to draw_cmd->GetTexID().
+ - 2021/03/12 (1.82) - upgraded ImDrawList::AddRect(), AddRectFilled(), PathRect() to use ImDrawFlags instead of ImDrawCornersFlags.
+ - ImDrawCornerFlags_TopLeft -> use ImDrawFlags_RoundCornersTopLeft
+ - ImDrawCornerFlags_BotRight -> use ImDrawFlags_RoundCornersBottomRight
+ - ImDrawCornerFlags_None -> use ImDrawFlags_RoundCornersNone etc.
+ flags now sanely defaults to 0 instead of 0x0F, consistent with all other flags in the API.
+ breaking: the default with rounding > 0.0f is now "round all corners" vs old implicit "round no corners":
+ - rounding == 0.0f + flags == 0 --> meant no rounding --> unchanged (common use)
+ - rounding > 0.0f + flags != 0 --> meant rounding --> unchanged (common use)
+ - rounding == 0.0f + flags != 0 --> meant no rounding --> unchanged (unlikely use)
+ - rounding > 0.0f + flags == 0 --> meant no rounding --> BREAKING (unlikely use): will now round all corners --> use ImDrawFlags_RoundCornersNone or rounding == 0.0f.
+ this ONLY matters for hard coded use of 0 + rounding > 0.0f. Use of named ImDrawFlags_RoundCornersNone (new) or ImDrawCornerFlags_None (old) are ok.
+ the old ImDrawCornersFlags used awkward default values of ~0 or 0xF (4 lower bits set) to signify "round all corners" and we sometimes encouraged using them as shortcuts.
+ legacy path still support use of hard coded ~0 or any value from 0x1 or 0xF. They will behave the same with legacy paths enabled (will assert otherwise).
+ - 2021/03/11 (1.82) - removed redirecting functions/enums names that were marked obsolete in 1.66 (September 2018):
+ - ImGui::SetScrollHere() -> use ImGui::SetScrollHereY()
+ - 2021/03/11 (1.82) - clarified that ImDrawList::PathArcTo(), ImDrawList::PathArcToFast() won't render with radius < 0.0f. Previously it sorts of accidentally worked but would generally lead to counter-clockwise paths and have an effect on anti-aliasing.
+ - 2021/03/10 (1.82) - upgraded ImDrawList::AddPolyline() and PathStroke() "bool closed" parameter to "ImDrawFlags flags". The matching ImDrawFlags_Closed value is guaranteed to always stay == 1 in the future.
+ - 2021/02/22 (1.82) - (*undone in 1.84*) win32+mingw: Re-enabled IME functions by default even under MinGW. In July 2016, issue #738 had me incorrectly disable those default functions for MinGW. MinGW users should: either link with -limm32, either set their imconfig file with '#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS'.
+ - 2021/02/17 (1.82) - renamed rarely used style.CircleSegmentMaxError (old default = 1.60f) to style.CircleTessellationMaxError (new default = 0.30f) as the meaning of the value changed.
+ - 2021/02/03 (1.81) - renamed ListBoxHeader(const char* label, ImVec2 size) to BeginListBox(). Kept inline redirection function (will obsolete).
+ - removed ListBoxHeader(const char* label, int items_count, int height_in_items = -1) in favor of specifying size. Kept inline redirection function (will obsolete).
+ - renamed ListBoxFooter() to EndListBox(). Kept inline redirection function (will obsolete).
+ - 2021/01/26 (1.81) - removed ImGuiFreeType::BuildFontAtlas(). Kept inline redirection function. Prefer using '#define IMGUI_ENABLE_FREETYPE', but there's a runtime selection path available too. The shared extra flags parameters (very rarely used) are now stored in ImFontAtlas::FontBuilderFlags.
+ - renamed ImFontConfig::RasterizerFlags (used by FreeType) to ImFontConfig::FontBuilderFlags.
+ - renamed ImGuiFreeType::XXX flags to ImGuiFreeTypeBuilderFlags_XXX for consistency with other API.
+ - 2020/10/12 (1.80) - removed redirecting functions/enums that were marked obsolete in 1.63 (August 2018):
+ - ImGui::IsItemDeactivatedAfterChange() -> use ImGui::IsItemDeactivatedAfterEdit().
+ - ImGuiCol_ModalWindowDarkening -> use ImGuiCol_ModalWindowDimBg
+ - ImGuiInputTextCallback -> use ImGuiTextEditCallback
+ - ImGuiInputTextCallbackData -> use ImGuiTextEditCallbackData
+ - 2020/12/21 (1.80) - renamed ImDrawList::AddBezierCurve() to AddBezierCubic(), and PathBezierCurveTo() to PathBezierCubicCurveTo(). Kept inline redirection function (will obsolete).
+ - 2020/12/04 (1.80) - added imgui_tables.cpp file! Manually constructed project files will need the new file added!
+ - 2020/11/18 (1.80) - renamed undocumented/internals ImGuiColumnsFlags_* to ImGuiOldColumnFlags_* in prevision of incoming Tables API.
+ - 2020/11/03 (1.80) - renamed io.ConfigWindowsMemoryCompactTimer to io.ConfigMemoryCompactTimer as the feature will apply to other data structures
+ - 2020/10/14 (1.80) - backends: moved all backends files (imgui_impl_XXXX.cpp, imgui_impl_XXXX.h) from examples/ to backends/.
+ - 2020/10/12 (1.80) - removed redirecting functions/enums that were marked obsolete in 1.60 (April 2018):
+ - io.RenderDrawListsFn pointer -> use ImGui::GetDrawData() value and call the render function of your backend
+ - ImGui::IsAnyWindowFocused() -> use ImGui::IsWindowFocused(ImGuiFocusedFlags_AnyWindow)
+ - ImGui::IsAnyWindowHovered() -> use ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow)
+ - ImGuiStyleVar_Count_ -> use ImGuiStyleVar_COUNT
+ - ImGuiMouseCursor_Count_ -> use ImGuiMouseCursor_COUNT
+ - removed redirecting functions names that were marked obsolete in 1.61 (May 2018):
+ - InputFloat (... int decimal_precision ...) -> use InputFloat (... const char* format ...) with format = "%.Xf" where X is your value for decimal_precision.
+ - same for InputFloat2()/InputFloat3()/InputFloat4() variants taking a `int decimal_precision` parameter.
+ - 2020/10/05 (1.79) - removed ImGuiListClipper: Renamed constructor parameters which created an ambiguous alternative to using the ImGuiListClipper::Begin() function, with misleading edge cases (note: imgui_memory_editor <0.40 from imgui_club/ used this old clipper API. Update your copy if needed).
+ - 2020/09/25 (1.79) - renamed ImGuiSliderFlags_ClampOnInput to ImGuiSliderFlags_AlwaysClamp. Kept redirection enum (will obsolete sooner because previous name was added recently).
+ - 2020/09/25 (1.79) - renamed style.TabMinWidthForUnselectedCloseButton to style.TabMinWidthForCloseButton.
+ - 2020/09/21 (1.79) - renamed OpenPopupContextItem() back to OpenPopupOnItemClick(), reverting the change from 1.77. For varieties of reason this is more self-explanatory.
+ - 2020/09/21 (1.79) - removed return value from OpenPopupOnItemClick() - returned true on mouse release on an item - because it is inconsistent with other popup APIs and makes others misleading. It's also and unnecessary: you can use IsWindowAppearing() after BeginPopup() for a similar result.
+ - 2020/09/17 (1.79) - removed ImFont::DisplayOffset in favor of ImFontConfig::GlyphOffset. DisplayOffset was applied after scaling and not very meaningful/useful outside of being needed by the default ProggyClean font. If you scaled this value after calling AddFontDefault(), this is now done automatically. It was also getting in the way of better font scaling, so let's get rid of it now!
+ - 2020/08/17 (1.78) - obsoleted use of the trailing 'float power=1.0f' parameter for DragFloat(), DragFloat2(), DragFloat3(), DragFloat4(), DragFloatRange2(), DragScalar(), DragScalarN(), SliderFloat(), SliderFloat2(), SliderFloat3(), SliderFloat4(), SliderScalar(), SliderScalarN(), VSliderFloat() and VSliderScalar().
+ replaced the 'float power=1.0f' argument with integer-based flags defaulting to 0 (as with all our flags).
+ worked out a backward-compatibility scheme so hopefully most C++ codebase should not be affected. in short, when calling those functions:
+ - if you omitted the 'power' parameter (likely!), you are not affected.
+ - if you set the 'power' parameter to 1.0f (same as previous default value): 1/ your compiler may warn on float>int conversion, 2/ everything else will work. 3/ you can replace the 1.0f value with 0 to fix the warning, and be technically correct.
+ - if you set the 'power' parameter to >1.0f (to enable non-linear editing): 1/ your compiler may warn on float>int conversion, 2/ code will assert at runtime, 3/ in case asserts are disabled, the code will not crash and enable the _Logarithmic flag. 4/ you can replace the >1.0f value with ImGuiSliderFlags_Logarithmic to fix the warning/assert and get a _similar_ effect as previous uses of power >1.0f.
+ see https://github.com/ocornut/imgui/issues/3361 for all details.
+ kept inline redirection functions (will obsolete) apart for: DragFloatRange2(), VSliderFloat(), VSliderScalar(). For those three the 'float power=1.0f' version was removed directly as they were most unlikely ever used.
+ for shared code, you can version check at compile-time with `#if IMGUI_VERSION_NUM >= 17704`.
+ - obsoleted use of v_min > v_max in DragInt, DragFloat, DragScalar to lock edits (introduced in 1.73, was not demoed nor documented very), will be replaced by a more generic ReadOnly feature. You may use the ImGuiSliderFlags_ReadOnly internal flag in the meantime.
+ - 2020/06/23 (1.77) - removed BeginPopupContextWindow(const char*, int mouse_button, bool also_over_items) in favor of BeginPopupContextWindow(const char*, ImGuiPopupFlags flags) with ImGuiPopupFlags_NoOverItems.
+ - 2020/06/15 (1.77) - renamed OpenPopupOnItemClick() to OpenPopupContextItem(). Kept inline redirection function (will obsolete). [NOTE: THIS WAS REVERTED IN 1.79]
+ - 2020/06/15 (1.77) - removed CalcItemRectClosestPoint() entry point which was made obsolete and asserting in December 2017.
+ - 2020/04/23 (1.77) - removed unnecessary ID (first arg) of ImFontAtlas::AddCustomRectRegular().
+ - 2020/01/22 (1.75) - ImDrawList::AddCircle()/AddCircleFilled() functions don't accept negative radius any more.
+ - 2019/12/17 (1.75) - [undid this change in 1.76] made Columns() limited to 64 columns by asserting above that limit. While the current code technically supports it, future code may not so we're putting the restriction ahead.
+ - 2019/12/13 (1.75) - [imgui_internal.h] changed ImRect() default constructor initializes all fields to 0.0f instead of (FLT_MAX,FLT_MAX,-FLT_MAX,-FLT_MAX). If you used ImRect::Add() to create bounding boxes by adding multiple points into it, you may need to fix your initial value.
+ - 2019/12/08 (1.75) - removed redirecting functions/enums that were marked obsolete in 1.53 (December 2017):
+ - ShowTestWindow() -> use ShowDemoWindow()
+ - IsRootWindowFocused() -> use IsWindowFocused(ImGuiFocusedFlags_RootWindow)
+ - IsRootWindowOrAnyChildFocused() -> use IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows)
+ - SetNextWindowContentWidth(w) -> use SetNextWindowContentSize(ImVec2(w, 0.0f)
+ - GetItemsLineHeightWithSpacing() -> use GetFrameHeightWithSpacing()
+ - ImGuiCol_ChildWindowBg -> use ImGuiCol_ChildBg
+ - ImGuiStyleVar_ChildWindowRounding -> use ImGuiStyleVar_ChildRounding
+ - ImGuiTreeNodeFlags_AllowOverlapMode -> use ImGuiTreeNodeFlags_AllowItemOverlap
+ - IMGUI_DISABLE_TEST_WINDOWS -> use IMGUI_DISABLE_DEMO_WINDOWS
+ - 2019/12/08 (1.75) - obsoleted calling ImDrawList::PrimReserve() with a negative count (which was vaguely documented and rarely if ever used). Instead, we added an explicit PrimUnreserve() API.
+ - 2019/12/06 (1.75) - removed implicit default parameter to IsMouseDragging(int button = 0) to be consistent with other mouse functions (none of the other functions have it).
+ - 2019/11/21 (1.74) - ImFontAtlas::AddCustomRectRegular() now requires an ID larger than 0x110000 (instead of 0x10000) to conform with supporting Unicode planes 1-16 in a future update. ID below 0x110000 will now assert.
+ - 2019/11/19 (1.74) - renamed IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS to IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS for consistency.
+ - 2019/11/19 (1.74) - renamed IMGUI_DISABLE_MATH_FUNCTIONS to IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS for consistency.
+ - 2019/10/22 (1.74) - removed redirecting functions/enums that were marked obsolete in 1.52 (October 2017):
+ - Begin() [old 5 args version] -> use Begin() [3 args], use SetNextWindowSize() SetNextWindowBgAlpha() if needed
+ - IsRootWindowOrAnyChildHovered() -> use IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows)
+ - AlignFirstTextHeightToWidgets() -> use AlignTextToFramePadding()
+ - SetNextWindowPosCenter() -> use SetNextWindowPos() with a pivot of (0.5f, 0.5f)
+ - ImFont::Glyph -> use ImFontGlyph
+ - 2019/10/14 (1.74) - inputs: Fixed a miscalculation in the keyboard/mouse "typematic" repeat delay/rate calculation, used by keys and e.g. repeating mouse buttons as well as the GetKeyPressedAmount() function.
+ if you were using a non-default value for io.KeyRepeatRate (previous default was 0.250), you can add +io.KeyRepeatDelay to it to compensate for the fix.
+ The function was triggering on: 0.0 and (delay+rate*N) where (N>=1). Fixed formula responds to (N>=0). Effectively it made io.KeyRepeatRate behave like it was set to (io.KeyRepeatRate + io.KeyRepeatDelay).
+ If you never altered io.KeyRepeatRate nor used GetKeyPressedAmount() this won't affect you.
+ - 2019/07/15 (1.72) - removed TreeAdvanceToLabelPos() which is rarely used and only does SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()). Kept redirection function (will obsolete).
+ - 2019/07/12 (1.72) - renamed ImFontAtlas::CustomRect to ImFontAtlasCustomRect. Kept redirection typedef (will obsolete).
+ - 2019/06/14 (1.72) - removed redirecting functions/enums names that were marked obsolete in 1.51 (June 2017): ImGuiCol_Column*, ImGuiSetCond_*, IsItemHoveredRect(), IsPosHoveringAnyWindow(), IsMouseHoveringAnyWindow(), IsMouseHoveringWindow(), IMGUI_ONCE_UPON_A_FRAME. Grep this log for details and new names, or see how they were implemented until 1.71.
+ - 2019/06/07 (1.71) - rendering of child window outer decorations (bg color, border, scrollbars) is now performed as part of the parent window. If you have
+ overlapping child windows in a same parent, and relied on their relative z-order to be mapped to their submission order, this will affect your rendering.
+ This optimization is disabled if the parent window has no visual output, because it appears to be the most common situation leading to the creation of overlapping child windows.
+ Please reach out if you are affected.
+ - 2019/05/13 (1.71) - renamed SetNextTreeNodeOpen() to SetNextItemOpen(). Kept inline redirection function (will obsolete).
+ - 2019/05/11 (1.71) - changed io.AddInputCharacter(unsigned short c) signature to io.AddInputCharacter(unsigned int c).
+ - 2019/04/29 (1.70) - improved ImDrawList thick strokes (>1.0f) preserving correct thickness up to 90 degrees angles (e.g. rectangles). If you have custom rendering using thick lines, they will appear thicker now.
+ - 2019/04/29 (1.70) - removed GetContentRegionAvailWidth(), use GetContentRegionAvail().x instead. Kept inline redirection function (will obsolete).
+ - 2019/03/04 (1.69) - renamed GetOverlayDrawList() to GetForegroundDrawList(). Kept redirection function (will obsolete).
+ - 2019/02/26 (1.69) - renamed ImGuiColorEditFlags_RGB/ImGuiColorEditFlags_HSV/ImGuiColorEditFlags_HEX to ImGuiColorEditFlags_DisplayRGB/ImGuiColorEditFlags_DisplayHSV/ImGuiColorEditFlags_DisplayHex. Kept redirection enums (will obsolete).
+ - 2019/02/14 (1.68) - made it illegal/assert when io.DisplayTime == 0.0f (with an exception for the first frame). If for some reason your time step calculation gives you a zero value, replace it with an arbitrarily small value!
+ - 2019/02/01 (1.68) - removed io.DisplayVisibleMin/DisplayVisibleMax (which were marked obsolete and removed from viewport/docking branch already).
+ - 2019/01/06 (1.67) - renamed io.InputCharacters[], marked internal as was always intended. Please don't access directly, and use AddInputCharacter() instead!
+ - 2019/01/06 (1.67) - renamed ImFontAtlas::GlyphRangesBuilder to ImFontGlyphRangesBuilder. Kept redirection typedef (will obsolete).
+ - 2018/12/20 (1.67) - made it illegal to call Begin("") with an empty string. This somehow half-worked before but had various undesirable side-effects.
+ - 2018/12/10 (1.67) - renamed io.ConfigResizeWindowsFromEdges to io.ConfigWindowsResizeFromEdges as we are doing a large pass on configuration flags.
+ - 2018/10/12 (1.66) - renamed misc/stl/imgui_stl.* to misc/cpp/imgui_stdlib.* in prevision for other C++ helper files.
+ - 2018/09/28 (1.66) - renamed SetScrollHere() to SetScrollHereY(). Kept redirection function (will obsolete).
+ - 2018/09/06 (1.65) - renamed stb_truetype.h to imstb_truetype.h, stb_textedit.h to imstb_textedit.h, and stb_rect_pack.h to imstb_rectpack.h.
+ If you were conveniently using the imgui copy of those STB headers in your project you will have to update your include paths.
+ - 2018/09/05 (1.65) - renamed io.OptCursorBlink/io.ConfigCursorBlink to io.ConfigInputTextCursorBlink. (#1427)
+ - 2018/08/31 (1.64) - added imgui_widgets.cpp file, extracted and moved widgets code out of imgui.cpp into imgui_widgets.cpp. Re-ordered some of the code remaining in imgui.cpp.
+ NONE OF THE FUNCTIONS HAVE CHANGED. THE CODE IS SEMANTICALLY 100% IDENTICAL, BUT _EVERY_ FUNCTION HAS BEEN MOVED.
+ Because of this, any local modifications to imgui.cpp will likely conflict when you update. Read docs/CHANGELOG.txt for suggestions.
+ - 2018/08/22 (1.63) - renamed IsItemDeactivatedAfterChange() to IsItemDeactivatedAfterEdit() for consistency with new IsItemEdited() API. Kept redirection function (will obsolete soonish as IsItemDeactivatedAfterChange() is very recent).
+ - 2018/08/21 (1.63) - renamed ImGuiTextEditCallback to ImGuiInputTextCallback, ImGuiTextEditCallbackData to ImGuiInputTextCallbackData for consistency. Kept redirection types (will obsolete).
+ - 2018/08/21 (1.63) - removed ImGuiInputTextCallbackData::ReadOnly since it is a duplication of (ImGuiInputTextCallbackData::Flags & ImGuiInputTextFlags_ReadOnly).
+ - 2018/08/01 (1.63) - removed per-window ImGuiWindowFlags_ResizeFromAnySide beta flag in favor of a global io.ConfigResizeWindowsFromEdges [update 1.67 renamed to ConfigWindowsResizeFromEdges] to enable the feature.
+ - 2018/08/01 (1.63) - renamed io.OptCursorBlink to io.ConfigCursorBlink [-> io.ConfigInputTextCursorBlink in 1.65], io.OptMacOSXBehaviors to ConfigMacOSXBehaviors for consistency.
+ - 2018/07/22 (1.63) - changed ImGui::GetTime() return value from float to double to avoid accumulating floating point imprecisions over time.
+ - 2018/07/08 (1.63) - style: renamed ImGuiCol_ModalWindowDarkening to ImGuiCol_ModalWindowDimBg for consistency with other features. Kept redirection enum (will obsolete).
+ - 2018/06/08 (1.62) - examples: the imgui_impl_XXX files have been split to separate platform (Win32, GLFW, SDL2, etc.) from renderer (DX11, OpenGL, Vulkan, etc.).
+ old backends will still work as is, however prefer using the separated backends as they will be updated to support multi-viewports.
+ when adopting new backends follow the main.cpp code of your preferred examples/ folder to know which functions to call.
+ in particular, note that old backends called ImGui::NewFrame() at the end of their ImGui_ImplXXXX_NewFrame() function.
+ - 2018/06/06 (1.62) - renamed GetGlyphRangesChinese() to GetGlyphRangesChineseFull() to distinguish other variants and discourage using the full set.
+ - 2018/06/06 (1.62) - TreeNodeEx()/TreeNodeBehavior(): the ImGuiTreeNodeFlags_CollapsingHeader helper now include the ImGuiTreeNodeFlags_NoTreePushOnOpen flag. See Changelog for details.
+ - 2018/05/03 (1.61) - DragInt(): the default compile-time format string has been changed from "%.0f" to "%d", as we are not using integers internally any more.
+ If you used DragInt() with custom format strings, make sure you change them to use %d or an integer-compatible format.
+ To honor backward-compatibility, the DragInt() code will currently parse and modify format strings to replace %*f with %d, giving time to users to upgrade their code.
+ If you have IMGUI_DISABLE_OBSOLETE_FUNCTIONS enabled, the code will instead assert! You may run a reg-exp search on your codebase for e.g. "DragInt.*%f" to help you find them.
+ - 2018/04/28 (1.61) - obsoleted InputFloat() functions taking an optional "int decimal_precision" in favor of an equivalent and more flexible "const char* format",
+ consistent with other functions. Kept redirection functions (will obsolete).
+ - 2018/04/09 (1.61) - IM_DELETE() helper function added in 1.60 doesn't clear the input _pointer_ reference, more consistent with expectation and allows passing r-value.
+ - 2018/03/20 (1.60) - renamed io.WantMoveMouse to io.WantSetMousePos for consistency and ease of understanding (was added in 1.52, _not_ used by core and only honored by some backend ahead of merging the Nav branch).
+ - 2018/03/12 (1.60) - removed ImGuiCol_CloseButton, ImGuiCol_CloseButtonActive, ImGuiCol_CloseButtonHovered as the closing cross uses regular button colors now.
+ - 2018/03/08 (1.60) - changed ImFont::DisplayOffset.y to default to 0 instead of +1. Fixed rounding of Ascent/Descent to match TrueType renderer. If you were adding or subtracting to ImFont::DisplayOffset check if your fonts are correctly aligned vertically.
+ - 2018/03/03 (1.60) - renamed ImGuiStyleVar_Count_ to ImGuiStyleVar_COUNT and ImGuiMouseCursor_Count_ to ImGuiMouseCursor_COUNT for consistency with other public enums.
+ - 2018/02/18 (1.60) - BeginDragDropSource(): temporarily removed the optional mouse_button=0 parameter because it is not really usable in many situations at the moment.
+ - 2018/02/16 (1.60) - obsoleted the io.RenderDrawListsFn callback, you can call your graphics engine render function after ImGui::Render(). Use ImGui::GetDrawData() to retrieve the ImDrawData* to display.
+ - 2018/02/07 (1.60) - reorganized context handling to be more explicit,
+ - YOU NOW NEED TO CALL ImGui::CreateContext() AT THE BEGINNING OF YOUR APP, AND CALL ImGui::DestroyContext() AT THE END.
+ - removed Shutdown() function, as DestroyContext() serve this purpose.
+ - you may pass a ImFontAtlas* pointer to CreateContext() to share a font atlas between contexts. Otherwise CreateContext() will create its own font atlas instance.
+ - removed allocator parameters from CreateContext(), they are now setup with SetAllocatorFunctions(), and shared by all contexts.
+ - removed the default global context and font atlas instance, which were confusing for users of DLL reloading and users of multiple contexts.
+ - 2018/01/31 (1.60) - moved sample TTF files from extra_fonts/ to misc/fonts/. If you loaded files directly from the imgui repo you may need to update your paths.
+ - 2018/01/11 (1.60) - obsoleted IsAnyWindowHovered() in favor of IsWindowHovered(ImGuiHoveredFlags_AnyWindow). Kept redirection function (will obsolete).
+ - 2018/01/11 (1.60) - obsoleted IsAnyWindowFocused() in favor of IsWindowFocused(ImGuiFocusedFlags_AnyWindow). Kept redirection function (will obsolete).
+ - 2018/01/03 (1.60) - renamed ImGuiSizeConstraintCallback to ImGuiSizeCallback, ImGuiSizeConstraintCallbackData to ImGuiSizeCallbackData.
+ - 2017/12/29 (1.60) - removed CalcItemRectClosestPoint() which was weird and not really used by anyone except demo code. If you need it it's easy to replicate on your side.
+ - 2017/12/24 (1.53) - renamed the emblematic ShowTestWindow() function to ShowDemoWindow(). Kept redirection function (will obsolete).
+ - 2017/12/21 (1.53) - ImDrawList: renamed style.AntiAliasedShapes to style.AntiAliasedFill for consistency and as a way to explicitly break code that manipulate those flag at runtime. You can now manipulate ImDrawList::Flags
+ - 2017/12/21 (1.53) - ImDrawList: removed 'bool anti_aliased = true' final parameter of ImDrawList::AddPolyline() and ImDrawList::AddConvexPolyFilled(). Prefer manipulating ImDrawList::Flags if you need to toggle them during the frame.
+ - 2017/12/14 (1.53) - using the ImGuiWindowFlags_NoScrollWithMouse flag on a child window forwards the mouse wheel event to the parent window, unless either ImGuiWindowFlags_NoInputs or ImGuiWindowFlags_NoScrollbar are also set.
+ - 2017/12/13 (1.53) - renamed GetItemsLineHeightWithSpacing() to GetFrameHeightWithSpacing(). Kept redirection function (will obsolete).
+ - 2017/12/13 (1.53) - obsoleted IsRootWindowFocused() in favor of using IsWindowFocused(ImGuiFocusedFlags_RootWindow). Kept redirection function (will obsolete).
+ - obsoleted IsRootWindowOrAnyChildFocused() in favor of using IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows). Kept redirection function (will obsolete).
+ - 2017/12/12 (1.53) - renamed ImGuiTreeNodeFlags_AllowOverlapMode to ImGuiTreeNodeFlags_AllowItemOverlap. Kept redirection enum (will obsolete).
+ - 2017/12/10 (1.53) - removed SetNextWindowContentWidth(), prefer using SetNextWindowContentSize(). Kept redirection function (will obsolete).
+ - 2017/11/27 (1.53) - renamed ImGuiTextBuffer::append() helper to appendf(), appendv() to appendfv(). If you copied the 'Log' demo in your code, it uses appendv() so that needs to be renamed.
+ - 2017/11/18 (1.53) - Style, Begin: removed ImGuiWindowFlags_ShowBorders window flag. Borders are now fully set up in the ImGuiStyle structure (see e.g. style.FrameBorderSize, style.WindowBorderSize). Use ImGui::ShowStyleEditor() to look them up.
+ Please note that the style system will keep evolving (hopefully stabilizing in Q1 2018), and so custom styles will probably subtly break over time. It is recommended you use the StyleColorsClassic(), StyleColorsDark(), StyleColorsLight() functions.
+ - 2017/11/18 (1.53) - Style: removed ImGuiCol_ComboBg in favor of combo boxes using ImGuiCol_PopupBg for consistency.
+ - 2017/11/18 (1.53) - Style: renamed ImGuiCol_ChildWindowBg to ImGuiCol_ChildBg.
+ - 2017/11/18 (1.53) - Style: renamed style.ChildWindowRounding to style.ChildRounding, ImGuiStyleVar_ChildWindowRounding to ImGuiStyleVar_ChildRounding.
+ - 2017/11/02 (1.53) - obsoleted IsRootWindowOrAnyChildHovered() in favor of using IsWindowHovered(ImGuiHoveredFlags_RootAndChildWindows);
+ - 2017/10/24 (1.52) - renamed IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCS to IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS/IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS for consistency.
+ - 2017/10/20 (1.52) - changed IsWindowHovered() default parameters behavior to return false if an item is active in another window (e.g. click-dragging item from another window to this window). You can use the newly introduced IsWindowHovered() flags to requests this specific behavior if you need it.
+ - 2017/10/20 (1.52) - marked IsItemHoveredRect()/IsMouseHoveringWindow() as obsolete, in favor of using the newly introduced flags for IsItemHovered() and IsWindowHovered(). See https://github.com/ocornut/imgui/issues/1382 for details.
+ removed the IsItemRectHovered()/IsWindowRectHovered() names introduced in 1.51 since they were merely more consistent names for the two functions we are now obsoleting.
+ IsItemHoveredRect() --> IsItemHovered(ImGuiHoveredFlags_RectOnly)
+ IsMouseHoveringAnyWindow() --> IsWindowHovered(ImGuiHoveredFlags_AnyWindow)
+ IsMouseHoveringWindow() --> IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) [weird, old behavior]
+ - 2017/10/17 (1.52) - marked the old 5-parameters version of Begin() as obsolete (still available). Use SetNextWindowSize()+Begin() instead!
+ - 2017/10/11 (1.52) - renamed AlignFirstTextHeightToWidgets() to AlignTextToFramePadding(). Kept inline redirection function (will obsolete).
+ - 2017/09/26 (1.52) - renamed ImFont::Glyph to ImFontGlyph. Kept redirection typedef (will obsolete).
+ - 2017/09/25 (1.52) - removed SetNextWindowPosCenter() because SetNextWindowPos() now has the optional pivot information to do the same and more. Kept redirection function (will obsolete).
+ - 2017/08/25 (1.52) - io.MousePos needs to be set to ImVec2(-FLT_MAX,-FLT_MAX) when mouse is unavailable/missing. Previously ImVec2(-1,-1) was enough but we now accept negative mouse coordinates. In your backend if you need to support unavailable mouse, make sure to replace "io.MousePos = ImVec2(-1,-1)" with "io.MousePos = ImVec2(-FLT_MAX,-FLT_MAX)".
+ - 2017/08/22 (1.51) - renamed IsItemHoveredRect() to IsItemRectHovered(). Kept inline redirection function (will obsolete). -> (1.52) use IsItemHovered(ImGuiHoveredFlags_RectOnly)!
+ - renamed IsMouseHoveringAnyWindow() to IsAnyWindowHovered() for consistency. Kept inline redirection function (will obsolete).
+ - renamed IsMouseHoveringWindow() to IsWindowRectHovered() for consistency. Kept inline redirection function (will obsolete).
+ - 2017/08/20 (1.51) - renamed GetStyleColName() to GetStyleColorName() for consistency.
+ - 2017/08/20 (1.51) - added PushStyleColor(ImGuiCol idx, ImU32 col) overload, which _might_ cause an "ambiguous call" compilation error if you are using ImColor() with implicit cast. Cast to ImU32 or ImVec4 explicily to fix.
+ - 2017/08/15 (1.51) - marked the weird IMGUI_ONCE_UPON_A_FRAME helper macro as obsolete. prefer using the more explicit ImGuiOnceUponAFrame type.
+ - 2017/08/15 (1.51) - changed parameter order for BeginPopupContextWindow() from (const char*,int buttons,bool also_over_items) to (const char*,int buttons,bool also_over_items). Note that most calls relied on default parameters completely.
+ - 2017/08/13 (1.51) - renamed ImGuiCol_Column to ImGuiCol_Separator, ImGuiCol_ColumnHovered to ImGuiCol_SeparatorHovered, ImGuiCol_ColumnActive to ImGuiCol_SeparatorActive. Kept redirection enums (will obsolete).
+ - 2017/08/11 (1.51) - renamed ImGuiSetCond_Always to ImGuiCond_Always, ImGuiSetCond_Once to ImGuiCond_Once, ImGuiSetCond_FirstUseEver to ImGuiCond_FirstUseEver, ImGuiSetCond_Appearing to ImGuiCond_Appearing. Kept redirection enums (will obsolete).
+ - 2017/08/09 (1.51) - removed ValueColor() helpers, they are equivalent to calling Text(label) + SameLine() + ColorButton().
+ - 2017/08/08 (1.51) - removed ColorEditMode() and ImGuiColorEditMode in favor of ImGuiColorEditFlags and parameters to the various Color*() functions. The SetColorEditOptions() allows to initialize default but the user can still change them with right-click context menu.
+ - changed prototype of 'ColorEdit4(const char* label, float col[4], bool show_alpha = true)' to 'ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0)', where passing flags = 0x01 is a safe no-op (hello dodgy backward compatibility!). - check and run the demo window, under "Color/Picker Widgets", to understand the various new options.
+ - changed prototype of rarely used 'ColorButton(ImVec4 col, bool small_height = false, bool outline_border = true)' to 'ColorButton(const char* desc_id, ImVec4 col, ImGuiColorEditFlags flags = 0, ImVec2 size = ImVec2(0, 0))'
+ - 2017/07/20 (1.51) - removed IsPosHoveringAnyWindow(ImVec2), which was partly broken and misleading. ASSERT + redirect user to io.WantCaptureMouse
+ - 2017/05/26 (1.50) - removed ImFontConfig::MergeGlyphCenterV in favor of a more multipurpose ImFontConfig::GlyphOffset.
+ - 2017/05/01 (1.50) - renamed ImDrawList::PathFill() (rarely used directly) to ImDrawList::PathFillConvex() for clarity.
+ - 2016/11/06 (1.50) - BeginChild(const char*) now applies the stack id to the provided label, consistently with other functions as it should always have been. It shouldn't affect you unless (extremely unlikely) you were appending multiple times to a same child from different locations of the stack id. If that's the case, generate an id with GetID() and use it instead of passing string to BeginChild().
+ - 2016/10/15 (1.50) - avoid 'void* user_data' parameter to io.SetClipboardTextFn/io.GetClipboardTextFn pointers. We pass io.ClipboardUserData to it.
+ - 2016/09/25 (1.50) - style.WindowTitleAlign is now a ImVec2 (ImGuiAlign enum was removed). set to (0.5f,0.5f) for horizontal+vertical centering, (0.0f,0.0f) for upper-left, etc.
+ - 2016/07/30 (1.50) - SameLine(x) with x>0.0f is now relative to left of column/group if any, and not always to left of window. This was sort of always the intent and hopefully, breakage should be minimal.
+ - 2016/05/12 (1.49) - title bar (using ImGuiCol_TitleBg/ImGuiCol_TitleBgActive colors) isn't rendered over a window background (ImGuiCol_WindowBg color) anymore.
+ If your TitleBg/TitleBgActive alpha was 1.0f or you are using the default theme it will not affect you, otherwise if <1.0f you need to tweak your custom theme to readjust for the fact that we don't draw a WindowBg background behind the title bar.
+ This helper function will convert an old TitleBg/TitleBgActive color into a new one with the same visual output, given the OLD color and the OLD WindowBg color:
+ ImVec4 ConvertTitleBgCol(const ImVec4& win_bg_col, const ImVec4& title_bg_col) { float new_a = 1.0f - ((1.0f - win_bg_col.w) * (1.0f - title_bg_col.w)), k = title_bg_col.w / new_a; return ImVec4((win_bg_col.x * win_bg_col.w + title_bg_col.x) * k, (win_bg_col.y * win_bg_col.w + title_bg_col.y) * k, (win_bg_col.z * win_bg_col.w + title_bg_col.z) * k, new_a); }
+ If this is confusing, pick the RGB value from title bar from an old screenshot and apply this as TitleBg/TitleBgActive. Or you may just create TitleBgActive from a tweaked TitleBg color.
+ - 2016/05/07 (1.49) - removed confusing set of GetInternalState(), GetInternalStateSize(), SetInternalState() functions. Now using CreateContext(), DestroyContext(), GetCurrentContext(), SetCurrentContext().
+ - 2016/05/02 (1.49) - renamed SetNextTreeNodeOpened() to SetNextTreeNodeOpen(), no redirection.
+ - 2016/05/01 (1.49) - obsoleted old signature of CollapsingHeader(const char* label, const char* str_id = NULL, bool display_frame = true, bool default_open = false) as extra parameters were badly designed and rarely used. You can replace the "default_open = true" flag in new API with CollapsingHeader(label, ImGuiTreeNodeFlags_DefaultOpen).
+ - 2016/04/26 (1.49) - changed ImDrawList::PushClipRect(ImVec4 rect) to ImDrawList::PushClipRect(Imvec2 min,ImVec2 max,bool intersect_with_current_clip_rect=false). Note that higher-level ImGui::PushClipRect() is preferable because it will clip at logic/widget level, whereas ImDrawList::PushClipRect() only affect your renderer.
+ - 2016/04/03 (1.48) - removed style.WindowFillAlphaDefault setting which was redundant. Bake default BG alpha inside style.Colors[ImGuiCol_WindowBg] and all other Bg color values. (ref GitHub issue #337).
+ - 2016/04/03 (1.48) - renamed ImGuiCol_TooltipBg to ImGuiCol_PopupBg, used by popups/menus and tooltips. popups/menus were previously using ImGuiCol_WindowBg. (ref github issue #337)
+ - 2016/03/21 (1.48) - renamed GetWindowFont() to GetFont(), GetWindowFontSize() to GetFontSize(). Kept inline redirection function (will obsolete).
+ - 2016/03/02 (1.48) - InputText() completion/history/always callbacks: if you modify the text buffer manually (without using DeleteChars()/InsertChars() helper) you need to maintain the BufTextLen field. added an assert.
+ - 2016/01/23 (1.48) - fixed not honoring exact width passed to PushItemWidth(), previously it would add extra FramePadding.x*2 over that width. if you had manual pixel-perfect alignment in place it might affect you.
+ - 2015/12/27 (1.48) - fixed ImDrawList::AddRect() which used to render a rectangle 1 px too large on each axis.
+ - 2015/12/04 (1.47) - renamed Color() helpers to ValueColor() - dangerously named, rarely used and probably to be made obsolete.
+ - 2015/08/29 (1.45) - with the addition of horizontal scrollbar we made various fixes to inconsistencies with dealing with cursor position.
+ GetCursorPos()/SetCursorPos() functions now include the scrolled amount. It shouldn't affect the majority of users, but take note that SetCursorPosX(100.0f) puts you at +100 from the starting x position which may include scrolling, not at +100 from the window left side.
+ GetContentRegionMax()/GetWindowContentRegionMin()/GetWindowContentRegionMax() functions allow include the scrolled amount. Typically those were used in cases where no scrolling would happen so it may not be a problem, but watch out!
+ - 2015/08/29 (1.45) - renamed style.ScrollbarWidth to style.ScrollbarSize
+ - 2015/08/05 (1.44) - split imgui.cpp into extra files: imgui_demo.cpp imgui_draw.cpp imgui_internal.h that you need to add to your project.
+ - 2015/07/18 (1.44) - fixed angles in ImDrawList::PathArcTo(), PathArcToFast() (introduced in 1.43) being off by an extra PI for no justifiable reason
+ - 2015/07/14 (1.43) - add new ImFontAtlas::AddFont() API. For the old AddFont***, moved the 'font_no' parameter of ImFontAtlas::AddFont** functions to the ImFontConfig structure.
+ you need to render your textured triangles with bilinear filtering to benefit from sub-pixel positioning of text.
+ - 2015/07/08 (1.43) - switched rendering data to use indexed rendering. this is saving a fair amount of CPU/GPU and enables us to get anti-aliasing for a marginal cost.
+ this necessary change will break your rendering function! the fix should be very easy. sorry for that :(
+ - if you are using a vanilla copy of one of the imgui_impl_XXX.cpp provided in the example, you just need to update your copy and you can ignore the rest.
+ - the signature of the io.RenderDrawListsFn handler has changed!
+ old: ImGui_XXXX_RenderDrawLists(ImDrawList** const cmd_lists, int cmd_lists_count)
+ new: ImGui_XXXX_RenderDrawLists(ImDrawData* draw_data).
+ parameters: 'cmd_lists' becomes 'draw_data->CmdLists', 'cmd_lists_count' becomes 'draw_data->CmdListsCount'
+ ImDrawList: 'commands' becomes 'CmdBuffer', 'vtx_buffer' becomes 'VtxBuffer', 'IdxBuffer' is new.
+ ImDrawCmd: 'vtx_count' becomes 'ElemCount', 'clip_rect' becomes 'ClipRect', 'user_callback' becomes 'UserCallback', 'texture_id' becomes 'TextureId'.
+ - each ImDrawList now contains both a vertex buffer and an index buffer. For each command, render ElemCount/3 triangles using indices from the index buffer.
+ - if you REALLY cannot render indexed primitives, you can call the draw_data->DeIndexAllBuffers() method to de-index the buffers. This is slow and a waste of CPU/GPU. Prefer using indexed rendering!
+ - refer to code in the examples/ folder or ask on the GitHub if you are unsure of how to upgrade. please upgrade!
+ - 2015/07/10 (1.43) - changed SameLine() parameters from int to float.
+ - 2015/07/02 (1.42) - renamed SetScrollPosHere() to SetScrollFromCursorPos(). Kept inline redirection function (will obsolete).
+ - 2015/07/02 (1.42) - renamed GetScrollPosY() to GetScrollY(). Necessary to reduce confusion along with other scrolling functions, because positions (e.g. cursor position) are not equivalent to scrolling amount.
+ - 2015/06/14 (1.41) - changed ImageButton() default bg_col parameter from (0,0,0,1) (black) to (0,0,0,0) (transparent) - makes a difference when texture have transparence
+ - 2015/06/14 (1.41) - changed Selectable() API from (label, selected, size) to (label, selected, flags, size). Size override should have been rarely used. Sorry!
+ - 2015/05/31 (1.40) - renamed GetWindowCollapsed() to IsWindowCollapsed() for consistency. Kept inline redirection function (will obsolete).
+ - 2015/05/31 (1.40) - renamed IsRectClipped() to IsRectVisible() for consistency. Note that return value is opposite! Kept inline redirection function (will obsolete).
+ - 2015/05/27 (1.40) - removed the third 'repeat_if_held' parameter from Button() - sorry! it was rarely used and inconsistent. Use PushButtonRepeat(true) / PopButtonRepeat() to enable repeat on desired buttons.
+ - 2015/05/11 (1.40) - changed BeginPopup() API, takes a string identifier instead of a bool. ImGui needs to manage the open/closed state of popups. Call OpenPopup() to actually set the "open" state of a popup. BeginPopup() returns true if the popup is opened.
+ - 2015/05/03 (1.40) - removed style.AutoFitPadding, using style.WindowPadding makes more sense (the default values were already the same).
+ - 2015/04/13 (1.38) - renamed IsClipped() to IsRectClipped(). Kept inline redirection function until 1.50.
+ - 2015/04/09 (1.38) - renamed ImDrawList::AddArc() to ImDrawList::AddArcFast() for compatibility with future API
+ - 2015/04/03 (1.38) - removed ImGuiCol_CheckHovered, ImGuiCol_CheckActive, replaced with the more general ImGuiCol_FrameBgHovered, ImGuiCol_FrameBgActive.
+ - 2014/04/03 (1.38) - removed support for passing -FLT_MAX..+FLT_MAX as the range for a SliderFloat(). Use DragFloat() or Inputfloat() instead.
+ - 2015/03/17 (1.36) - renamed GetItemBoxMin()/GetItemBoxMax()/IsMouseHoveringBox() to GetItemRectMin()/GetItemRectMax()/IsMouseHoveringRect(). Kept inline redirection function until 1.50.
+ - 2015/03/15 (1.36) - renamed style.TreeNodeSpacing to style.IndentSpacing, ImGuiStyleVar_TreeNodeSpacing to ImGuiStyleVar_IndentSpacing
+ - 2015/03/13 (1.36) - renamed GetWindowIsFocused() to IsWindowFocused(). Kept inline redirection function until 1.50.
+ - 2015/03/08 (1.35) - renamed style.ScrollBarWidth to style.ScrollbarWidth (casing)
+ - 2015/02/27 (1.34) - renamed OpenNextNode(bool) to SetNextTreeNodeOpened(bool, ImGuiSetCond). Kept inline redirection function until 1.50.
+ - 2015/02/27 (1.34) - renamed ImGuiSetCondition_*** to ImGuiSetCond_***, and _FirstUseThisSession becomes _Once.
+ - 2015/02/11 (1.32) - changed text input callback ImGuiTextEditCallback return type from void-->int. reserved for future use, return 0 for now.
+ - 2015/02/10 (1.32) - renamed GetItemWidth() to CalcItemWidth() to clarify its evolving behavior
+ - 2015/02/08 (1.31) - renamed GetTextLineSpacing() to GetTextLineHeightWithSpacing()
+ - 2015/02/01 (1.31) - removed IO.MemReallocFn (unused)
+ - 2015/01/19 (1.30) - renamed ImGuiStorage::GetIntPtr()/GetFloatPtr() to GetIntRef()/GetIntRef() because Ptr was conflicting with actual pointer storage functions.
+ - 2015/01/11 (1.30) - big font/image API change! now loads TTF file. allow for multiple fonts. no need for a PNG loader.
+ - 2015/01/11 (1.30) - removed GetDefaultFontData(). uses io.Fonts->GetTextureData*() API to retrieve uncompressed pixels.
+ - old: const void* png_data; unsigned int png_size; ImGui::GetDefaultFontData(NULL, NULL, &png_data, &png_size); [..Upload texture to GPU..];
+ - new: unsigned char* pixels; int width, height; io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height); [..Upload texture to GPU..]; io.Fonts->SetTexID(YourTexIdentifier);
+ you now have more flexibility to load multiple TTF fonts and manage the texture buffer for internal needs. It is now recommended that you sample the font texture with bilinear interpolation.
+ - 2015/01/11 (1.30) - added texture identifier in ImDrawCmd passed to your render function (we can now render images). make sure to call io.Fonts->SetTexID()
+ - 2015/01/11 (1.30) - removed IO.PixelCenterOffset (unnecessary, can be handled in user projection matrix)
+ - 2015/01/11 (1.30) - removed ImGui::IsItemFocused() in favor of ImGui::IsItemActive() which handles all widgets
+ - 2014/12/10 (1.18) - removed SetNewWindowDefaultPos() in favor of new generic API SetNextWindowPos(pos, ImGuiSetCondition_FirstUseEver)
+ - 2014/11/28 (1.17) - moved IO.Font*** options to inside the IO.Font-> structure (FontYOffset, FontTexUvForWhite, FontBaseScale, FontFallbackGlyph)
+ - 2014/11/26 (1.17) - reworked syntax of IMGUI_ONCE_UPON_A_FRAME helper macro to increase compiler compatibility
+ - 2014/11/07 (1.15) - renamed IsHovered() to IsItemHovered()
+ - 2014/10/02 (1.14) - renamed IMGUI_INCLUDE_IMGUI_USER_CPP to IMGUI_INCLUDE_IMGUI_USER_INL and imgui_user.cpp to imgui_user.inl (more IDE friendly)
+ - 2014/09/25 (1.13) - removed 'text_end' parameter from IO.SetClipboardTextFn (the string is now always zero-terminated for simplicity)
+ - 2014/09/24 (1.12) - renamed SetFontScale() to SetWindowFontScale()
+ - 2014/09/24 (1.12) - moved IM_MALLOC/IM_REALLOC/IM_FREE preprocessor defines to IO.MemAllocFn/IO.MemReallocFn/IO.MemFreeFn
+ - 2014/08/30 (1.09) - removed IO.FontHeight (now computed automatically)
+ - 2014/08/30 (1.09) - moved IMGUI_FONT_TEX_UV_FOR_WHITE preprocessor define to IO.FontTexUvForWhite
+ - 2014/08/28 (1.09) - changed the behavior of IO.PixelCenterOffset following various rendering fixes
+
+
+ FREQUENTLY ASKED QUESTIONS (FAQ)
+ ================================
+
+ Read all answers online:
+ https://www.dearimgui.org/faq or https://github.com/ocornut/imgui/blob/master/docs/FAQ.md (same url)
+ Read all answers locally (with a text editor or ideally a Markdown viewer):
+ docs/FAQ.md
+ Some answers are copied down here to facilitate searching in code.
+
+ Q&A: Basics
+ ===========
+
+ Q: Where is the documentation?
+ A: This library is poorly documented at the moment and expects the user to be acquainted with C/C++.
+ - Run the examples/ and explore them.
+ - See demo code in imgui_demo.cpp and particularly the ImGui::ShowDemoWindow() function.
+ - The demo covers most features of Dear ImGui, so you can read the code and see its output.
+ - See documentation and comments at the top of imgui.cpp + effectively imgui.h.
+ - Dozens of standalone example applications using e.g. OpenGL/DirectX are provided in the
+ examples/ folder to explain how to integrate Dear ImGui with your own engine/application.
+ - The Wiki (https://github.com/ocornut/imgui/wiki) has many resources and links.
+ - The Glossary (https://github.com/ocornut/imgui/wiki/Glossary) page also may be useful.
+ - Your programming IDE is your friend, find the type or function declaration to find comments
+ associated with it.
+
+ Q: What is this library called?
+ Q: Which version should I get?
+ >> This library is called "Dear ImGui", please don't call it "ImGui" :)
+ >> See https://www.dearimgui.org/faq for details.
+
+ Q&A: Integration
+ ================
+
+ Q: How to get started?
+ A: Read 'PROGRAMMER GUIDE' above. Read examples/README.txt.
+
+ Q: How can I tell whether to dispatch mouse/keyboard to Dear ImGui or my application?
+ A: You should read the 'io.WantCaptureMouse', 'io.WantCaptureKeyboard' and 'io.WantTextInput' flags!
+ >> See https://www.dearimgui.org/faq for a fully detailed answer. You really want to read this.
+
+ Q. How can I enable keyboard controls?
+ Q: How can I use this without a mouse, without a keyboard or without a screen? (gamepad, input share, remote display)
+ Q: I integrated Dear ImGui in my engine and little squares are showing instead of text...
+ Q: I integrated Dear ImGui in my engine and some elements are clipping or disappearing when I move windows around...
+ Q: I integrated Dear ImGui in my engine and some elements are displaying outside their expected windows boundaries...
+ >> See https://www.dearimgui.org/faq
+
+ Q&A: Usage
+ ----------
+
+ Q: About the ID Stack system..
+ - Why is my widget not reacting when I click on it?
+ - How can I have widgets with an empty label?
+ - How can I have multiple widgets with the same label?
+ - How can I have multiple windows with the same label?
+ Q: How can I display an image? What is ImTextureID, how does it works?
+ Q: How can I use my own math types instead of ImVec2/ImVec4?
+ Q: How can I interact with standard C++ types (such as std::string and std::vector)?
+ Q: How can I display custom shapes? (using low-level ImDrawList API)
+ >> See https://www.dearimgui.org/faq
+
+ Q&A: Fonts, Text
+ ================
+
+ Q: How should I handle DPI in my application?
+ Q: How can I load a different font than the default?
+ Q: How can I easily use icons in my application?
+ Q: How can I load multiple fonts?
+ Q: How can I display and input non-Latin characters such as Chinese, Japanese, Korean, Cyrillic?
+ >> See https://www.dearimgui.org/faq and https://github.com/ocornut/imgui/edit/master/docs/FONTS.md
+
+ Q&A: Concerns
+ =============
+
+ Q: Who uses Dear ImGui?
+ Q: Can you create elaborate/serious tools with Dear ImGui?
+ Q: Can you reskin the look of Dear ImGui?
+ Q: Why using C++ (as opposed to C)?
+ >> See https://www.dearimgui.org/faq
+
+ Q&A: Community
+ ==============
+
+ Q: How can I help?
+ A: - Businesses: please reach out to "contact AT dearimgui.com" if you work in a place using Dear ImGui!
+ We can discuss ways for your company to fund development via invoiced technical support, maintenance or sponsoring contacts.
+ This is among the most useful thing you can do for Dear ImGui. With increased funding, we can hire more people working on this project.
+ - Individuals: you can support continued development via PayPal donations. See README.
+ - If you are experienced with Dear ImGui and C++, look at the GitHub issues, look at the Wiki, read docs/TODO.txt
+ and see how you want to help and can help!
+ - Disclose your usage of Dear ImGui via a dev blog post, a tweet, a screenshot, a mention somewhere etc.
+ You may post screenshot or links in the gallery threads. Visuals are ideal as they inspire other programmers.
+ But even without visuals, disclosing your use of dear imgui helps the library grow credibility, and help other teams and programmers with taking decisions.
+ - If you have issues or if you need to hack into the library, even if you don't expect any support it is useful that you share your issues (on GitHub or privately).
+
+*/
+
+//-------------------------------------------------------------------------
+// [SECTION] INCLUDES
+//-------------------------------------------------------------------------
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "imgui.h"
+#ifndef IMGUI_DISABLE
+
+#ifndef IMGUI_DEFINE_MATH_OPERATORS
+#define IMGUI_DEFINE_MATH_OPERATORS
+#endif
+#include "imgui_internal.h"
+
+// System includes
+#include <ctype.h> // toupper
+#include <stdio.h> // vsnprintf, sscanf, printf
+#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
+#include <stddef.h> // intptr_t
+#else
+#include <stdint.h> // intptr_t
+#endif
+
+// [Windows] On non-Visual Studio compilers, we default to IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS unless explicitly enabled
+#if defined(_WIN32) && !defined(_MSC_VER) && !defined(IMGUI_ENABLE_WIN32_DEFAULT_IME_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)
+#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
+#endif
+
+// [Windows] OS specific includes (optional)
+#if defined(_WIN32) && defined(IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS) && defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS) && defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS)
+#define IMGUI_DISABLE_WIN32_FUNCTIONS
+#endif
+#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS)
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif
+#ifndef __MINGW32__
+#include <Windows.h> // _wfopen, OpenClipboard
+#else
+#include <windows.h>
+#endif
+#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY == WINAPI_FAMILY_APP) // UWP doesn't have all Win32 functions
+#define IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS
+#define IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
+#endif
+#endif
+
+// [Apple] OS specific includes
+#if defined(__APPLE__)
+#include <TargetConditionals.h>
+#endif
+
+// Visual Studio warnings
+#ifdef _MSC_VER
+#pragma warning (disable: 4127) // condition expression is constant
+#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
+#if defined(_MSC_VER) && _MSC_VER >= 1922 // MSVC 2019 16.2 or later
+#pragma warning (disable: 5054) // operator '|': deprecated between enumerations of different types
+#endif
+#pragma warning (disable: 26451) // [Static Analyzer] Arithmetic overflow : Using operator 'xxx' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator 'xxx' to avoid overflow(io.2).
+#pragma warning (disable: 26495) // [Static Analyzer] Variable 'XXX' is uninitialized. Always initialize a member variable (type.6).
+#pragma warning (disable: 26812) // [Static Analyzer] The enum type 'xxx' is unscoped. Prefer 'enum class' over 'enum' (Enum.3).
+#endif
+
+// Clang/GCC warnings with -Weverything
+#if defined(__clang__)
+#if __has_warning("-Wunknown-warning-option")
+#pragma clang diagnostic ignored "-Wunknown-warning-option" // warning: unknown warning group 'xxx' // not all warnings are known by all Clang versions and they tend to be rename-happy.. so ignoring warnings triggers new warnings on some configuration. Great!
+#endif
+#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning: unknown warning group 'xxx'
+#pragma clang diagnostic ignored "-Wold-style-cast" // warning: use of old-style cast // yes, they are more terse.
+#pragma clang diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe // storing and comparing against same constants (typically 0.0f) is ok.
+#pragma clang diagnostic ignored "-Wformat-nonliteral" // warning: format string is not a string literal // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
+#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning: declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
+#pragma clang diagnostic ignored "-Wglobal-constructors" // warning: declaration requires a global destructor // similar to above, not sure what the exact difference is.
+#pragma clang diagnostic ignored "-Wsign-conversion" // warning: implicit conversion changes signedness
+#pragma clang diagnostic ignored "-Wformat-pedantic" // warning: format specifies type 'void *' but the argument has type 'xxxx *' // unreasonable, would lead to casting every %p arg to void*. probably enabled by -pedantic.
+#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning: cast to 'void *' from smaller integer type 'int'
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning: zero as null pointer constant // some standard header variations use #define NULL 0
+#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" // warning: implicit conversion from 'xxx' to 'float' may lose precision
+#elif defined(__GNUC__)
+// We disable -Wpragmas because GCC doesn't provide an has_warning equivalent and some forks/patches may not following the warning/version association.
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used
+#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size
+#pragma GCC diagnostic ignored "-Wformat" // warning: format '%p' expects argument of type 'void*', but argument 6 has type 'ImGuiWindow*'
+#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function
+#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value
+#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked
+#pragma GCC diagnostic ignored "-Wstrict-overflow" // warning: assuming signed overflow does not occur when assuming that (X - c) > X is always false
+#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
+#endif
+
+// Debug options
+#define IMGUI_DEBUG_NAV_SCORING 0 // Display navigation scoring preview when hovering items. Display last moving direction matches when holding CTRL
+#define IMGUI_DEBUG_NAV_RECTS 0 // Display the reference navigation rectangle for each window
+#define IMGUI_DEBUG_INI_SETTINGS 0 // Save additional comments in .ini file (particularly helps for Docking, but makes saving slower)
+
+// When using CTRL+TAB (or Gamepad Square+L/R) we delay the visual a little in order to reduce visual noise doing a fast switch.
+static const float NAV_WINDOWING_HIGHLIGHT_DELAY = 0.20f; // Time before the highlight and screen dimming starts fading in
+static const float NAV_WINDOWING_LIST_APPEAR_DELAY = 0.15f; // Time before the window list starts to appear
+
+// Window resizing from edges (when io.ConfigWindowsResizeFromEdges = true and ImGuiBackendFlags_HasMouseCursors is set in io.BackendFlags by backend)
+static const float WINDOWS_HOVER_PADDING = 4.0f; // Extend outside window for hovering/resizing (maxxed with TouchPadding) and inside windows for borders. Affect FindHoveredWindow().
+static const float WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER = 0.04f; // Reduce visual noise by only highlighting the border after a certain time.
+static const float WINDOWS_MOUSE_WHEEL_SCROLL_LOCK_TIMER = 2.00f; // Lock scrolled window (so it doesn't pick child windows that are scrolling through) for a certain time, unless mouse moved.
+
+//-------------------------------------------------------------------------
+// [SECTION] FORWARD DECLARATIONS
+//-------------------------------------------------------------------------
+
+static void SetCurrentWindow(ImGuiWindow* window);
+static void FindHoveredWindow();
+static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags);
+static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window);
+
+static void AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, ImDrawList* draw_list);
+static void AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_windows, ImGuiWindow* window);
+
+// Settings
+static void WindowSettingsHandler_ClearAll(ImGuiContext*, ImGuiSettingsHandler*);
+static void* WindowSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name);
+static void WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line);
+static void WindowSettingsHandler_ApplyAll(ImGuiContext*, ImGuiSettingsHandler*);
+static void WindowSettingsHandler_WriteAll(ImGuiContext*, ImGuiSettingsHandler*, ImGuiTextBuffer* buf);
+
+// Platform Dependents default implementation for IO functions
+static const char* GetClipboardTextFn_DefaultImpl(void* user_data);
+static void SetClipboardTextFn_DefaultImpl(void* user_data, const char* text);
+static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport* viewport, ImGuiPlatformImeData* data);
+
+namespace ImGui
+{
+// Navigation
+static void NavUpdate();
+static void NavUpdateWindowing();
+static void NavUpdateWindowingOverlay();
+static void NavUpdateCancelRequest();
+static void NavUpdateCreateMoveRequest();
+static void NavUpdateCreateTabbingRequest();
+static float NavUpdatePageUpPageDown();
+static inline void NavUpdateAnyRequestFlag();
+static void NavUpdateCreateWrappingRequest();
+static void NavEndFrame();
+static bool NavScoreItem(ImGuiNavItemData* result);
+static void NavApplyItemToResult(ImGuiNavItemData* result);
+static void NavProcessItem();
+static void NavProcessItemForTabbingRequest(ImGuiID id);
+static ImVec2 NavCalcPreferredRefPos();
+static void NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window);
+static ImGuiWindow* NavRestoreLastChildNavWindow(ImGuiWindow* window);
+static void NavRestoreLayer(ImGuiNavLayer layer);
+static void NavRestoreHighlightAfterMove();
+static int FindWindowFocusIndex(ImGuiWindow* window);
+
+// Error Checking and Debug Tools
+static void ErrorCheckNewFrameSanityChecks();
+static void ErrorCheckEndFrameSanityChecks();
+static void UpdateDebugToolItemPicker();
+static void UpdateDebugToolStackQueries();
+
+// Misc
+static void UpdateSettings();
+static void UpdateKeyboardInputs();
+static void UpdateMouseInputs();
+static void UpdateMouseWheel();
+static bool UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4], const ImRect& visibility_rect);
+static void RenderWindowOuterBorders(ImGuiWindow* window);
+static void RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size);
+static void RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open);
+static void RenderDimmedBackgroundBehindWindow(ImGuiWindow* window, ImU32 col);
+static void RenderDimmedBackgrounds();
+static ImGuiWindow* FindBlockingModal(ImGuiWindow* window);
+
+// Viewports
+static void UpdateViewportsNewFrame();
+
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] CONTEXT AND MEMORY ALLOCATORS
+//-----------------------------------------------------------------------------
+
+// DLL users:
+// - Heaps and globals are not shared across DLL boundaries!
+// - You will need to call SetCurrentContext() + SetAllocatorFunctions() for each static/DLL boundary you are calling from.
+// - Same applies for hot-reloading mechanisms that are reliant on reloading DLL (note that many hot-reloading mechanisms work without DLL).
+// - Using Dear ImGui via a shared library is not recommended, because of function call overhead and because we don't guarantee backward nor forward ABI compatibility.
+// - Confused? In a debugger: add GImGui to your watch window and notice how its value changes depending on your current location (which DLL boundary you are in).
+
+// Current context pointer. Implicitly used by all Dear ImGui functions. Always assumed to be != NULL.
+// - ImGui::CreateContext() will automatically set this pointer if it is NULL.
+// Change to a different context by calling ImGui::SetCurrentContext().
+// - Important: Dear ImGui functions are not thread-safe because of this pointer.
+// If you want thread-safety to allow N threads to access N different contexts:
+// - Change this variable to use thread local storage so each thread can refer to a different context, in your imconfig.h:
+// struct ImGuiContext;
+// extern thread_local ImGuiContext* MyImGuiTLS;
+// #define GImGui MyImGuiTLS
+// And then define MyImGuiTLS in one of your cpp files. Note that thread_local is a C++11 keyword, earlier C++ uses compiler-specific keyword.
+// - Future development aims to make this context pointer explicit to all calls. Also read https://github.com/ocornut/imgui/issues/586
+// - If you need a finite number of contexts, you may compile and use multiple instances of the ImGui code from a different namespace.
+// - DLL users: read comments above.
+#ifndef GImGui
+ImGuiContext* GImGui = NULL;
+#endif
+
+// Memory Allocator functions. Use SetAllocatorFunctions() to change them.
+// - You probably don't want to modify that mid-program, and if you use global/static e.g. ImVector<> instances you may need to keep them accessible during program destruction.
+// - DLL users: read comments above.
+#ifndef IMGUI_DISABLE_DEFAULT_ALLOCATORS
+static void* MallocWrapper(size_t size, void* user_data) { IM_UNUSED(user_data); return malloc(size); }
+static void FreeWrapper(void* ptr, void* user_data) { IM_UNUSED(user_data); free(ptr); }
+#else
+static void* MallocWrapper(size_t size, void* user_data) { IM_UNUSED(user_data); IM_UNUSED(size); IM_ASSERT(0); return NULL; }
+static void FreeWrapper(void* ptr, void* user_data) { IM_UNUSED(user_data); IM_UNUSED(ptr); IM_ASSERT(0); }
+#endif
+static ImGuiMemAllocFunc GImAllocatorAllocFunc = MallocWrapper;
+static ImGuiMemFreeFunc GImAllocatorFreeFunc = FreeWrapper;
+static void* GImAllocatorUserData = NULL;
+
+//-----------------------------------------------------------------------------
+// [SECTION] USER FACING STRUCTURES (ImGuiStyle, ImGuiIO)
+//-----------------------------------------------------------------------------
+
+ImGuiStyle::ImGuiStyle()
+{
+ Alpha = 1.0f; // Global alpha applies to everything in Dear ImGui.
+ DisabledAlpha = 0.60f; // Additional alpha multiplier applied by BeginDisabled(). Multiply over current value of Alpha.
+ WindowPadding = ImVec2(8,8); // Padding within a window
+ WindowRounding = 0.0f; // Radius of window corners rounding. Set to 0.0f to have rectangular windows. Large values tend to lead to variety of artifacts and are not recommended.
+ WindowBorderSize = 1.0f; // Thickness of border around windows. Generally set to 0.0f or 1.0f. Other values not well tested.
+ WindowMinSize = ImVec2(32,32); // Minimum window size
+ WindowTitleAlign = ImVec2(0.0f,0.5f);// Alignment for title bar text
+ WindowMenuButtonPosition= ImGuiDir_Left; // Position of the collapsing/docking button in the title bar (left/right). Defaults to ImGuiDir_Left.
+ ChildRounding = 0.0f; // Radius of child window corners rounding. Set to 0.0f to have rectangular child windows
+ ChildBorderSize = 1.0f; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. Other values not well tested.
+ PopupRounding = 0.0f; // Radius of popup window corners rounding. Set to 0.0f to have rectangular child windows
+ PopupBorderSize = 1.0f; // Thickness of border around popup or tooltip windows. Generally set to 0.0f or 1.0f. Other values not well tested.
+ FramePadding = ImVec2(4,3); // Padding within a framed rectangle (used by most widgets)
+ FrameRounding = 0.0f; // Radius of frame corners rounding. Set to 0.0f to have rectangular frames (used by most widgets).
+ FrameBorderSize = 0.0f; // Thickness of border around frames. Generally set to 0.0f or 1.0f. Other values not well tested.
+ ItemSpacing = ImVec2(8,4); // Horizontal and vertical spacing between widgets/lines
+ ItemInnerSpacing = ImVec2(4,4); // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label)
+ CellPadding = ImVec2(4,2); // Padding within a table cell
+ TouchExtraPadding = ImVec2(0,0); // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
+ IndentSpacing = 21.0f; // Horizontal spacing when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2).
+ ColumnsMinSpacing = 6.0f; // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1).
+ ScrollbarSize = 14.0f; // Width of the vertical scrollbar, Height of the horizontal scrollbar
+ ScrollbarRounding = 9.0f; // Radius of grab corners rounding for scrollbar
+ GrabMinSize = 12.0f; // Minimum width/height of a grab box for slider/scrollbar
+ GrabRounding = 0.0f; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
+ LogSliderDeadzone = 4.0f; // The size in pixels of the dead-zone around zero on logarithmic sliders that cross zero.
+ TabRounding = 4.0f; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
+ TabBorderSize = 0.0f; // Thickness of border around tabs.
+ TabMinWidthForCloseButton = 0.0f; // Minimum width for close button to appears on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close button unless selected.
+ ColorButtonPosition = ImGuiDir_Right; // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
+ ButtonTextAlign = ImVec2(0.5f,0.5f);// Alignment of button text when button is larger than text.
+ SelectableTextAlign = ImVec2(0.0f,0.0f);// Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line.
+ DisplayWindowPadding = ImVec2(19,19); // Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows.
+ DisplaySafeAreaPadding = ImVec2(3,3); // If you cannot see the edge of your screen (e.g. on a TV) increase the safe area padding. Covers popups/tooltips as well regular windows.
+ MouseCursorScale = 1.0f; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
+ AntiAliasedLines = true; // Enable anti-aliased lines/borders. Disable if you are really tight on CPU/GPU.
+ AntiAliasedLinesUseTex = true; // Enable anti-aliased lines/borders using textures where possible. Require backend to render with bilinear filtering (NOT point/nearest filtering).
+ AntiAliasedFill = true; // Enable anti-aliased filled shapes (rounded rectangles, circles, etc.).
+ CurveTessellationTol = 1.25f; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality.
+ CircleTessellationMaxError = 0.30f; // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry.
+
+ // Default theme
+ ImGui::StyleColorsDark(this);
+}
+
+// To scale your entire UI (e.g. if you want your app to use High DPI or generally be DPI aware) you may use this helper function. Scaling the fonts is done separately and is up to you.
+// Important: This operation is lossy because we round all sizes to integer. If you need to change your scale multiples, call this over a freshly initialized ImGuiStyle structure rather than scaling multiple times.
+void ImGuiStyle::ScaleAllSizes(float scale_factor)
+{
+ WindowPadding = ImFloor(WindowPadding * scale_factor);
+ WindowRounding = ImFloor(WindowRounding * scale_factor);
+ WindowMinSize = ImFloor(WindowMinSize * scale_factor);
+ ChildRounding = ImFloor(ChildRounding * scale_factor);
+ PopupRounding = ImFloor(PopupRounding * scale_factor);
+ FramePadding = ImFloor(FramePadding * scale_factor);
+ FrameRounding = ImFloor(FrameRounding * scale_factor);
+ ItemSpacing = ImFloor(ItemSpacing * scale_factor);
+ ItemInnerSpacing = ImFloor(ItemInnerSpacing * scale_factor);
+ CellPadding = ImFloor(CellPadding * scale_factor);
+ TouchExtraPadding = ImFloor(TouchExtraPadding * scale_factor);
+ IndentSpacing = ImFloor(IndentSpacing * scale_factor);
+ ColumnsMinSpacing = ImFloor(ColumnsMinSpacing * scale_factor);
+ ScrollbarSize = ImFloor(ScrollbarSize * scale_factor);
+ ScrollbarRounding = ImFloor(ScrollbarRounding * scale_factor);
+ GrabMinSize = ImFloor(GrabMinSize * scale_factor);
+ GrabRounding = ImFloor(GrabRounding * scale_factor);
+ LogSliderDeadzone = ImFloor(LogSliderDeadzone * scale_factor);
+ TabRounding = ImFloor(TabRounding * scale_factor);
+ TabMinWidthForCloseButton = (TabMinWidthForCloseButton != FLT_MAX) ? ImFloor(TabMinWidthForCloseButton * scale_factor) : FLT_MAX;
+ DisplayWindowPadding = ImFloor(DisplayWindowPadding * scale_factor);
+ DisplaySafeAreaPadding = ImFloor(DisplaySafeAreaPadding * scale_factor);
+ MouseCursorScale = ImFloor(MouseCursorScale * scale_factor);
+}
+
+ImGuiIO::ImGuiIO()
+{
+ // Most fields are initialized with zero
+ memset(this, 0, sizeof(*this));
+ IM_STATIC_ASSERT(IM_ARRAYSIZE(ImGuiIO::MouseDown) == ImGuiMouseButton_COUNT && IM_ARRAYSIZE(ImGuiIO::MouseClicked) == ImGuiMouseButton_COUNT);
+
+ // Settings
+ ConfigFlags = ImGuiConfigFlags_None;
+ BackendFlags = ImGuiBackendFlags_None;
+ DisplaySize = ImVec2(-1.0f, -1.0f);
+ DeltaTime = 1.0f / 60.0f;
+ IniSavingRate = 5.0f;
+ IniFilename = "imgui.ini"; // Important: "imgui.ini" is relative to current working dir, most apps will want to lock this to an absolute path (e.g. same path as executables).
+ LogFilename = "imgui_log.txt";
+ MouseDoubleClickTime = 0.30f;
+ MouseDoubleClickMaxDist = 6.0f;
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+ for (int i = 0; i < ImGuiKey_COUNT; i++)
+ KeyMap[i] = -1;
+#endif
+ KeyRepeatDelay = 0.275f;
+ KeyRepeatRate = 0.050f;
+ UserData = NULL;
+
+ Fonts = NULL;
+ FontGlobalScale = 1.0f;
+ FontDefault = NULL;
+ FontAllowUserScaling = false;
+ DisplayFramebufferScale = ImVec2(1.0f, 1.0f);
+
+ // Miscellaneous options
+ MouseDrawCursor = false;
+#ifdef __APPLE__
+ ConfigMacOSXBehaviors = true; // Set Mac OS X style defaults based on __APPLE__ compile time flag
+#else
+ ConfigMacOSXBehaviors = false;
+#endif
+ ConfigInputTrickleEventQueue = true;
+ ConfigInputTextCursorBlink = true;
+ ConfigWindowsResizeFromEdges = true;
+ ConfigWindowsMoveFromTitleBarOnly = false;
+ ConfigMemoryCompactTimer = 60.0f;
+
+ // Platform Functions
+ BackendPlatformName = BackendRendererName = NULL;
+ BackendPlatformUserData = BackendRendererUserData = BackendLanguageUserData = NULL;
+ GetClipboardTextFn = GetClipboardTextFn_DefaultImpl; // Platform dependent default implementations
+ SetClipboardTextFn = SetClipboardTextFn_DefaultImpl;
+ ClipboardUserData = NULL;
+ SetPlatformImeDataFn = SetPlatformImeDataFn_DefaultImpl;
+
+ // Input (NB: we already have memset zero the entire structure!)
+ MousePos = ImVec2(-FLT_MAX, -FLT_MAX);
+ MousePosPrev = ImVec2(-FLT_MAX, -FLT_MAX);
+ MouseDragThreshold = 6.0f;
+ for (int i = 0; i < IM_ARRAYSIZE(MouseDownDuration); i++) MouseDownDuration[i] = MouseDownDurationPrev[i] = -1.0f;
+ for (int i = 0; i < IM_ARRAYSIZE(KeysData); i++) { KeysData[i].DownDuration = KeysData[i].DownDurationPrev = -1.0f; }
+ for (int i = 0; i < IM_ARRAYSIZE(NavInputsDownDuration); i++) NavInputsDownDuration[i] = -1.0f;
+ AppAcceptingEvents = true;
+ BackendUsingLegacyKeyArrays = (ImS8)-1;
+ BackendUsingLegacyNavInputArray = true; // assume using legacy array until proven wrong
+}
+
+// Pass in translated ASCII characters for text input.
+// - with glfw you can get those from the callback set in glfwSetCharCallback()
+// - on Windows you can get those using ToAscii+keyboard state, or via the WM_CHAR message
+// FIXME: Should in theory be called "AddCharacterEvent()" to be consistent with new API
+void ImGuiIO::AddInputCharacter(unsigned int c)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(&g.IO == this && "Can only add events to current context.");
+ if (c == 0 || !AppAcceptingEvents)
+ return;
+
+ ImGuiInputEvent e;
+ e.Type = ImGuiInputEventType_Text;
+ e.Source = ImGuiInputSource_Keyboard;
+ e.Text.Char = c;
+ g.InputEventsQueue.push_back(e);
+}
+
+// UTF16 strings use surrogate pairs to encode codepoints >= 0x10000, so
+// we should save the high surrogate.
+void ImGuiIO::AddInputCharacterUTF16(ImWchar16 c)
+{
+ if ((c == 0 && InputQueueSurrogate == 0) || !AppAcceptingEvents)
+ return;
+
+ if ((c & 0xFC00) == 0xD800) // High surrogate, must save
+ {
+ if (InputQueueSurrogate != 0)
+ AddInputCharacter(IM_UNICODE_CODEPOINT_INVALID);
+ InputQueueSurrogate = c;
+ return;
+ }
+
+ ImWchar cp = c;
+ if (InputQueueSurrogate != 0)
+ {
+ if ((c & 0xFC00) != 0xDC00) // Invalid low surrogate
+ {
+ AddInputCharacter(IM_UNICODE_CODEPOINT_INVALID);
+ }
+ else
+ {
+#if IM_UNICODE_CODEPOINT_MAX == 0xFFFF
+ cp = IM_UNICODE_CODEPOINT_INVALID; // Codepoint will not fit in ImWchar
+#else
+ cp = (ImWchar)(((InputQueueSurrogate - 0xD800) << 10) + (c - 0xDC00) + 0x10000);
+#endif
+ }
+
+ InputQueueSurrogate = 0;
+ }
+ AddInputCharacter((unsigned)cp);
+}
+
+void ImGuiIO::AddInputCharactersUTF8(const char* utf8_chars)
+{
+ if (!AppAcceptingEvents)
+ return;
+ while (*utf8_chars != 0)
+ {
+ unsigned int c = 0;
+ utf8_chars += ImTextCharFromUtf8(&c, utf8_chars, NULL);
+ if (c != 0)
+ AddInputCharacter(c);
+ }
+}
+
+void ImGuiIO::ClearInputCharacters()
+{
+ InputQueueCharacters.resize(0);
+}
+
+void ImGuiIO::ClearInputKeys()
+{
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+ memset(KeysDown, 0, sizeof(KeysDown));
+#endif
+ for (int n = 0; n < IM_ARRAYSIZE(KeysData); n++)
+ {
+ KeysData[n].Down = false;
+ KeysData[n].DownDuration = -1.0f;
+ KeysData[n].DownDurationPrev = -1.0f;
+ }
+ KeyCtrl = KeyShift = KeyAlt = KeySuper = false;
+ KeyMods = ImGuiModFlags_None;
+ for (int n = 0; n < IM_ARRAYSIZE(NavInputsDownDuration); n++)
+ NavInputsDownDuration[n] = NavInputsDownDurationPrev[n] = -1.0f;
+}
+
+// Queue a new key down/up event.
+// - ImGuiKey key: Translated key (as in, generally ImGuiKey_A matches the key end-user would use to emit an 'A' character)
+// - bool down: Is the key down? use false to signify a key release.
+// - float analog_value: 0.0f..1.0f
+void ImGuiIO::AddKeyAnalogEvent(ImGuiKey key, bool down, float analog_value)
+{
+ //if (e->Down) { IMGUI_DEBUG_LOG_IO("AddKeyEvent() Key='%s' %d, NativeKeycode = %d, NativeScancode = %d\n", ImGui::GetKeyName(e->Key), e->Down, e->NativeKeycode, e->NativeScancode); }
+ if (key == ImGuiKey_None || !AppAcceptingEvents)
+ return;
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(&g.IO == this && "Can only add events to current context.");
+ IM_ASSERT(ImGui::IsNamedKey(key)); // Backend needs to pass a valid ImGuiKey_ constant. 0..511 values are legacy native key codes which are not accepted by this API.
+
+ // Verify that backend isn't mixing up using new io.AddKeyEvent() api and old io.KeysDown[] + io.KeyMap[] data.
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+ IM_ASSERT((BackendUsingLegacyKeyArrays == -1 || BackendUsingLegacyKeyArrays == 0) && "Backend needs to either only use io.AddKeyEvent(), either only fill legacy io.KeysDown[] + io.KeyMap[]. Not both!");
+ if (BackendUsingLegacyKeyArrays == -1)
+ for (int n = ImGuiKey_NamedKey_BEGIN; n < ImGuiKey_NamedKey_END; n++)
+ IM_ASSERT(KeyMap[n] == -1 && "Backend needs to either only use io.AddKeyEvent(), either only fill legacy io.KeysDown[] + io.KeyMap[]. Not both!");
+ BackendUsingLegacyKeyArrays = 0;
+#endif
+ if (ImGui::IsGamepadKey(key))
+ BackendUsingLegacyNavInputArray = false;
+
+ // Partial filter of duplicates (not strictly needed, but makes data neater in particular for key mods and gamepad values which are most commonly spmamed)
+ ImGuiKeyData* key_data = ImGui::GetKeyData(key);
+ if (key_data->Down == down && key_data->AnalogValue == analog_value)
+ {
+ bool found = false;
+ for (int n = g.InputEventsQueue.Size - 1; n >= 0 && !found; n--)
+ if (g.InputEventsQueue[n].Type == ImGuiInputEventType_Key && g.InputEventsQueue[n].Key.Key == key)
+ found = true;
+ if (!found)
+ return;
+ }
+
+ // Add event
+ ImGuiInputEvent e;
+ e.Type = ImGuiInputEventType_Key;
+ e.Source = ImGui::IsGamepadKey(key) ? ImGuiInputSource_Gamepad : ImGuiInputSource_Keyboard;
+ e.Key.Key = key;
+ e.Key.Down = down;
+ e.Key.AnalogValue = analog_value;
+ g.InputEventsQueue.push_back(e);
+}
+
+void ImGuiIO::AddKeyEvent(ImGuiKey key, bool down)
+{
+ if (!AppAcceptingEvents)
+ return;
+ AddKeyAnalogEvent(key, down, down ? 1.0f : 0.0f);
+}
+
+// [Optional] Call after AddKeyEvent().
+// Specify native keycode, scancode + Specify index for legacy <1.87 IsKeyXXX() functions with native indices.
+// If you are writing a backend in 2022 or don't use IsKeyXXX() with native values that are not ImGuiKey values, you can avoid calling this.
+void ImGuiIO::SetKeyEventNativeData(ImGuiKey key, int native_keycode, int native_scancode, int native_legacy_index)
+{
+ if (key == ImGuiKey_None)
+ return;
+ IM_ASSERT(ImGui::IsNamedKey(key)); // >= 512
+ IM_ASSERT(native_legacy_index == -1 || ImGui::IsLegacyKey(native_legacy_index)); // >= 0 && <= 511
+ IM_UNUSED(native_keycode); // Yet unused
+ IM_UNUSED(native_scancode); // Yet unused
+
+ // Build native->imgui map so old user code can still call key functions with native 0..511 values.
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+ const int legacy_key = (native_legacy_index != -1) ? native_legacy_index : native_keycode;
+ if (!ImGui::IsLegacyKey(legacy_key))
+ return;
+ KeyMap[legacy_key] = key;
+ KeyMap[key] = legacy_key;
+#else
+ IM_UNUSED(key);
+ IM_UNUSED(native_legacy_index);
+#endif
+}
+
+// Set master flag for accepting key/mouse/text events (default to true). Useful if you have native dialog boxes that are interrupting your application loop/refresh, and you want to disable events being queued while your app is frozen.
+void ImGuiIO::SetAppAcceptingEvents(bool accepting_events)
+{
+ AppAcceptingEvents = accepting_events;
+}
+
+// Queue a mouse move event
+void ImGuiIO::AddMousePosEvent(float x, float y)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(&g.IO == this && "Can only add events to current context.");
+ if (!AppAcceptingEvents)
+ return;
+
+ ImGuiInputEvent e;
+ e.Type = ImGuiInputEventType_MousePos;
+ e.Source = ImGuiInputSource_Mouse;
+ e.MousePos.PosX = x;
+ e.MousePos.PosY = y;
+ g.InputEventsQueue.push_back(e);
+}
+
+void ImGuiIO::AddMouseButtonEvent(int mouse_button, bool down)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(&g.IO == this && "Can only add events to current context.");
+ IM_ASSERT(mouse_button >= 0 && mouse_button < ImGuiMouseButton_COUNT);
+ if (!AppAcceptingEvents)
+ return;
+
+ ImGuiInputEvent e;
+ e.Type = ImGuiInputEventType_MouseButton;
+ e.Source = ImGuiInputSource_Mouse;
+ e.MouseButton.Button = mouse_button;
+ e.MouseButton.Down = down;
+ g.InputEventsQueue.push_back(e);
+}
+
+// Queue a mouse wheel event (most mouse/API will only have a Y component)
+void ImGuiIO::AddMouseWheelEvent(float wheel_x, float wheel_y)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(&g.IO == this && "Can only add events to current context.");
+ if ((wheel_x == 0.0f && wheel_y == 0.0f) || !AppAcceptingEvents)
+ return;
+
+ ImGuiInputEvent e;
+ e.Type = ImGuiInputEventType_MouseWheel;
+ e.Source = ImGuiInputSource_Mouse;
+ e.MouseWheel.WheelX = wheel_x;
+ e.MouseWheel.WheelY = wheel_y;
+ g.InputEventsQueue.push_back(e);
+}
+
+void ImGuiIO::AddFocusEvent(bool focused)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(&g.IO == this && "Can only add events to current context.");
+
+ ImGuiInputEvent e;
+ e.Type = ImGuiInputEventType_Focus;
+ e.AppFocused.Focused = focused;
+ g.InputEventsQueue.push_back(e);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] MISC HELPERS/UTILITIES (Geometry functions)
+//-----------------------------------------------------------------------------
+
+ImVec2 ImBezierCubicClosestPoint(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, int num_segments)
+{
+ IM_ASSERT(num_segments > 0); // Use ImBezierCubicClosestPointCasteljau()
+ ImVec2 p_last = p1;
+ ImVec2 p_closest;
+ float p_closest_dist2 = FLT_MAX;
+ float t_step = 1.0f / (float)num_segments;
+ for (int i_step = 1; i_step <= num_segments; i_step++)
+ {
+ ImVec2 p_current = ImBezierCubicCalc(p1, p2, p3, p4, t_step * i_step);
+ ImVec2 p_line = ImLineClosestPoint(p_last, p_current, p);
+ float dist2 = ImLengthSqr(p - p_line);
+ if (dist2 < p_closest_dist2)
+ {
+ p_closest = p_line;
+ p_closest_dist2 = dist2;
+ }
+ p_last = p_current;
+ }
+ return p_closest;
+}
+
+// Closely mimics PathBezierToCasteljau() in imgui_draw.cpp
+static void ImBezierCubicClosestPointCasteljauStep(const ImVec2& p, ImVec2& p_closest, ImVec2& p_last, float& p_closest_dist2, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float tess_tol, int level)
+{
+ float dx = x4 - x1;
+ float dy = y4 - y1;
+ float d2 = ((x2 - x4) * dy - (y2 - y4) * dx);
+ float d3 = ((x3 - x4) * dy - (y3 - y4) * dx);
+ d2 = (d2 >= 0) ? d2 : -d2;
+ d3 = (d3 >= 0) ? d3 : -d3;
+ if ((d2 + d3) * (d2 + d3) < tess_tol * (dx * dx + dy * dy))
+ {
+ ImVec2 p_current(x4, y4);
+ ImVec2 p_line = ImLineClosestPoint(p_last, p_current, p);
+ float dist2 = ImLengthSqr(p - p_line);
+ if (dist2 < p_closest_dist2)
+ {
+ p_closest = p_line;
+ p_closest_dist2 = dist2;
+ }
+ p_last = p_current;
+ }
+ else if (level < 10)
+ {
+ float x12 = (x1 + x2)*0.5f, y12 = (y1 + y2)*0.5f;
+ float x23 = (x2 + x3)*0.5f, y23 = (y2 + y3)*0.5f;
+ float x34 = (x3 + x4)*0.5f, y34 = (y3 + y4)*0.5f;
+ float x123 = (x12 + x23)*0.5f, y123 = (y12 + y23)*0.5f;
+ float x234 = (x23 + x34)*0.5f, y234 = (y23 + y34)*0.5f;
+ float x1234 = (x123 + x234)*0.5f, y1234 = (y123 + y234)*0.5f;
+ ImBezierCubicClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1, y1, x12, y12, x123, y123, x1234, y1234, tess_tol, level + 1);
+ ImBezierCubicClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, x1234, y1234, x234, y234, x34, y34, x4, y4, tess_tol, level + 1);
+ }
+}
+
+// tess_tol is generally the same value you would find in ImGui::GetStyle().CurveTessellationTol
+// Because those ImXXX functions are lower-level than ImGui:: we cannot access this value automatically.
+ImVec2 ImBezierCubicClosestPointCasteljau(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, float tess_tol)
+{
+ IM_ASSERT(tess_tol > 0.0f);
+ ImVec2 p_last = p1;
+ ImVec2 p_closest;
+ float p_closest_dist2 = FLT_MAX;
+ ImBezierCubicClosestPointCasteljauStep(p, p_closest, p_last, p_closest_dist2, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, tess_tol, 0);
+ return p_closest;
+}
+
+ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p)
+{
+ ImVec2 ap = p - a;
+ ImVec2 ab_dir = b - a;
+ float dot = ap.x * ab_dir.x + ap.y * ab_dir.y;
+ if (dot < 0.0f)
+ return a;
+ float ab_len_sqr = ab_dir.x * ab_dir.x + ab_dir.y * ab_dir.y;
+ if (dot > ab_len_sqr)
+ return b;
+ return a + ab_dir * dot / ab_len_sqr;
+}
+
+bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p)
+{
+ bool b1 = ((p.x - b.x) * (a.y - b.y) - (p.y - b.y) * (a.x - b.x)) < 0.0f;
+ bool b2 = ((p.x - c.x) * (b.y - c.y) - (p.y - c.y) * (b.x - c.x)) < 0.0f;
+ bool b3 = ((p.x - a.x) * (c.y - a.y) - (p.y - a.y) * (c.x - a.x)) < 0.0f;
+ return ((b1 == b2) && (b2 == b3));
+}
+
+void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w)
+{
+ ImVec2 v0 = b - a;
+ ImVec2 v1 = c - a;
+ ImVec2 v2 = p - a;
+ const float denom = v0.x * v1.y - v1.x * v0.y;
+ out_v = (v2.x * v1.y - v1.x * v2.y) / denom;
+ out_w = (v0.x * v2.y - v2.x * v0.y) / denom;
+ out_u = 1.0f - out_v - out_w;
+}
+
+ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p)
+{
+ ImVec2 proj_ab = ImLineClosestPoint(a, b, p);
+ ImVec2 proj_bc = ImLineClosestPoint(b, c, p);
+ ImVec2 proj_ca = ImLineClosestPoint(c, a, p);
+ float dist2_ab = ImLengthSqr(p - proj_ab);
+ float dist2_bc = ImLengthSqr(p - proj_bc);
+ float dist2_ca = ImLengthSqr(p - proj_ca);
+ float m = ImMin(dist2_ab, ImMin(dist2_bc, dist2_ca));
+ if (m == dist2_ab)
+ return proj_ab;
+ if (m == dist2_bc)
+ return proj_bc;
+ return proj_ca;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] MISC HELPERS/UTILITIES (String, Format, Hash functions)
+//-----------------------------------------------------------------------------
+
+// Consider using _stricmp/_strnicmp under Windows or strcasecmp/strncasecmp. We don't actually use either ImStricmp/ImStrnicmp in the codebase any more.
+int ImStricmp(const char* str1, const char* str2)
+{
+ int d;
+ while ((d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; }
+ return d;
+}
+
+int ImStrnicmp(const char* str1, const char* str2, size_t count)
+{
+ int d = 0;
+ while (count > 0 && (d = toupper(*str2) - toupper(*str1)) == 0 && *str1) { str1++; str2++; count--; }
+ return d;
+}
+
+void ImStrncpy(char* dst, const char* src, size_t count)
+{
+ if (count < 1)
+ return;
+ if (count > 1)
+ strncpy(dst, src, count - 1);
+ dst[count - 1] = 0;
+}
+
+char* ImStrdup(const char* str)
+{
+ size_t len = strlen(str);
+ void* buf = IM_ALLOC(len + 1);
+ return (char*)memcpy(buf, (const void*)str, len + 1);
+}
+
+char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* src)
+{
+ size_t dst_buf_size = p_dst_size ? *p_dst_size : strlen(dst) + 1;
+ size_t src_size = strlen(src) + 1;
+ if (dst_buf_size < src_size)
+ {
+ IM_FREE(dst);
+ dst = (char*)IM_ALLOC(src_size);
+ if (p_dst_size)
+ *p_dst_size = src_size;
+ }
+ return (char*)memcpy(dst, (const void*)src, src_size);
+}
+
+const char* ImStrchrRange(const char* str, const char* str_end, char c)
+{
+ const char* p = (const char*)memchr(str, (int)c, str_end - str);
+ return p;
+}
+
+int ImStrlenW(const ImWchar* str)
+{
+ //return (int)wcslen((const wchar_t*)str); // FIXME-OPT: Could use this when wchar_t are 16-bit
+ int n = 0;
+ while (*str++) n++;
+ return n;
+}
+
+// Find end-of-line. Return pointer will point to either first \n, either str_end.
+const char* ImStreolRange(const char* str, const char* str_end)
+{
+ const char* p = (const char*)memchr(str, '\n', str_end - str);
+ return p ? p : str_end;
+}
+
+const ImWchar* ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin) // find beginning-of-line
+{
+ while (buf_mid_line > buf_begin && buf_mid_line[-1] != '\n')
+ buf_mid_line--;
+ return buf_mid_line;
+}
+
+const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end)
+{
+ if (!needle_end)
+ needle_end = needle + strlen(needle);
+
+ const char un0 = (char)toupper(*needle);
+ while ((!haystack_end && *haystack) || (haystack_end && haystack < haystack_end))
+ {
+ if (toupper(*haystack) == un0)
+ {
+ const char* b = needle + 1;
+ for (const char* a = haystack + 1; b < needle_end; a++, b++)
+ if (toupper(*a) != toupper(*b))
+ break;
+ if (b == needle_end)
+ return haystack;
+ }
+ haystack++;
+ }
+ return NULL;
+}
+
+// Trim str by offsetting contents when there's leading data + writing a \0 at the trailing position. We use this in situation where the cost is negligible.
+void ImStrTrimBlanks(char* buf)
+{
+ char* p = buf;
+ while (p[0] == ' ' || p[0] == '\t') // Leading blanks
+ p++;
+ char* p_start = p;
+ while (*p != 0) // Find end of string
+ p++;
+ while (p > p_start && (p[-1] == ' ' || p[-1] == '\t')) // Trailing blanks
+ p--;
+ if (p_start != buf) // Copy memory if we had leading blanks
+ memmove(buf, p_start, p - p_start);
+ buf[p - p_start] = 0; // Zero terminate
+}
+
+const char* ImStrSkipBlank(const char* str)
+{
+ while (str[0] == ' ' || str[0] == '\t')
+ str++;
+ return str;
+}
+
+// A) MSVC version appears to return -1 on overflow, whereas glibc appears to return total count (which may be >= buf_size).
+// Ideally we would test for only one of those limits at runtime depending on the behavior the vsnprintf(), but trying to deduct it at compile time sounds like a pandora can of worm.
+// B) When buf==NULL vsnprintf() will return the output size.
+#ifndef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
+
+// We support stb_sprintf which is much faster (see: https://github.com/nothings/stb/blob/master/stb_sprintf.h)
+// You may set IMGUI_USE_STB_SPRINTF to use our default wrapper, or set IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
+// and setup the wrapper yourself. (FIXME-OPT: Some of our high-level operations such as ImGuiTextBuffer::appendfv() are
+// designed using two-passes worst case, which probably could be improved using the stbsp_vsprintfcb() function.)
+#ifdef IMGUI_USE_STB_SPRINTF
+#define STB_SPRINTF_IMPLEMENTATION
+#ifdef IMGUI_STB_SPRINTF_FILENAME
+#include IMGUI_STB_SPRINTF_FILENAME
+#else
+#include "stb_sprintf.h"
+#endif
+#endif
+
+#if defined(_MSC_VER) && !defined(vsnprintf)
+#define vsnprintf _vsnprintf
+#endif
+
+int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+#ifdef IMGUI_USE_STB_SPRINTF
+ int w = stbsp_vsnprintf(buf, (int)buf_size, fmt, args);
+#else
+ int w = vsnprintf(buf, buf_size, fmt, args);
+#endif
+ va_end(args);
+ if (buf == NULL)
+ return w;
+ if (w == -1 || w >= (int)buf_size)
+ w = (int)buf_size - 1;
+ buf[w] = 0;
+ return w;
+}
+
+int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args)
+{
+#ifdef IMGUI_USE_STB_SPRINTF
+ int w = stbsp_vsnprintf(buf, (int)buf_size, fmt, args);
+#else
+ int w = vsnprintf(buf, buf_size, fmt, args);
+#endif
+ if (buf == NULL)
+ return w;
+ if (w == -1 || w >= (int)buf_size)
+ w = (int)buf_size - 1;
+ buf[w] = 0;
+ return w;
+}
+#endif // #ifdef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
+
+void ImFormatStringToTempBuffer(const char** out_buf, const char** out_buf_end, const char* fmt, ...)
+{
+ ImGuiContext& g = *GImGui;
+ va_list args;
+ va_start(args, fmt);
+ int buf_len = ImFormatStringV(g.TempBuffer.Data, g.TempBuffer.Size, fmt, args);
+ *out_buf = g.TempBuffer.Data;
+ if (out_buf_end) { *out_buf_end = g.TempBuffer.Data + buf_len; }
+ va_end(args);
+}
+
+void ImFormatStringToTempBufferV(const char** out_buf, const char** out_buf_end, const char* fmt, va_list args)
+{
+ ImGuiContext& g = *GImGui;
+ int buf_len = ImFormatStringV(g.TempBuffer.Data, g.TempBuffer.Size, fmt, args);
+ *out_buf = g.TempBuffer.Data;
+ if (out_buf_end) { *out_buf_end = g.TempBuffer.Data + buf_len; }
+}
+
+// CRC32 needs a 1KB lookup table (not cache friendly)
+// Although the code to generate the table is simple and shorter than the table itself, using a const table allows us to easily:
+// - avoid an unnecessary branch/memory tap, - keep the ImHashXXX functions usable by static constructors, - make it thread-safe.
+static const ImU32 GCrc32LookupTable[256] =
+{
+ 0x00000000,0x77073096,0xEE0E612C,0x990951BA,0x076DC419,0x706AF48F,0xE963A535,0x9E6495A3,0x0EDB8832,0x79DCB8A4,0xE0D5E91E,0x97D2D988,0x09B64C2B,0x7EB17CBD,0xE7B82D07,0x90BF1D91,
+ 0x1DB71064,0x6AB020F2,0xF3B97148,0x84BE41DE,0x1ADAD47D,0x6DDDE4EB,0xF4D4B551,0x83D385C7,0x136C9856,0x646BA8C0,0xFD62F97A,0x8A65C9EC,0x14015C4F,0x63066CD9,0xFA0F3D63,0x8D080DF5,
+ 0x3B6E20C8,0x4C69105E,0xD56041E4,0xA2677172,0x3C03E4D1,0x4B04D447,0xD20D85FD,0xA50AB56B,0x35B5A8FA,0x42B2986C,0xDBBBC9D6,0xACBCF940,0x32D86CE3,0x45DF5C75,0xDCD60DCF,0xABD13D59,
+ 0x26D930AC,0x51DE003A,0xC8D75180,0xBFD06116,0x21B4F4B5,0x56B3C423,0xCFBA9599,0xB8BDA50F,0x2802B89E,0x5F058808,0xC60CD9B2,0xB10BE924,0x2F6F7C87,0x58684C11,0xC1611DAB,0xB6662D3D,
+ 0x76DC4190,0x01DB7106,0x98D220BC,0xEFD5102A,0x71B18589,0x06B6B51F,0x9FBFE4A5,0xE8B8D433,0x7807C9A2,0x0F00F934,0x9609A88E,0xE10E9818,0x7F6A0DBB,0x086D3D2D,0x91646C97,0xE6635C01,
+ 0x6B6B51F4,0x1C6C6162,0x856530D8,0xF262004E,0x6C0695ED,0x1B01A57B,0x8208F4C1,0xF50FC457,0x65B0D9C6,0x12B7E950,0x8BBEB8EA,0xFCB9887C,0x62DD1DDF,0x15DA2D49,0x8CD37CF3,0xFBD44C65,
+ 0x4DB26158,0x3AB551CE,0xA3BC0074,0xD4BB30E2,0x4ADFA541,0x3DD895D7,0xA4D1C46D,0xD3D6F4FB,0x4369E96A,0x346ED9FC,0xAD678846,0xDA60B8D0,0x44042D73,0x33031DE5,0xAA0A4C5F,0xDD0D7CC9,
+ 0x5005713C,0x270241AA,0xBE0B1010,0xC90C2086,0x5768B525,0x206F85B3,0xB966D409,0xCE61E49F,0x5EDEF90E,0x29D9C998,0xB0D09822,0xC7D7A8B4,0x59B33D17,0x2EB40D81,0xB7BD5C3B,0xC0BA6CAD,
+ 0xEDB88320,0x9ABFB3B6,0x03B6E20C,0x74B1D29A,0xEAD54739,0x9DD277AF,0x04DB2615,0x73DC1683,0xE3630B12,0x94643B84,0x0D6D6A3E,0x7A6A5AA8,0xE40ECF0B,0x9309FF9D,0x0A00AE27,0x7D079EB1,
+ 0xF00F9344,0x8708A3D2,0x1E01F268,0x6906C2FE,0xF762575D,0x806567CB,0x196C3671,0x6E6B06E7,0xFED41B76,0x89D32BE0,0x10DA7A5A,0x67DD4ACC,0xF9B9DF6F,0x8EBEEFF9,0x17B7BE43,0x60B08ED5,
+ 0xD6D6A3E8,0xA1D1937E,0x38D8C2C4,0x4FDFF252,0xD1BB67F1,0xA6BC5767,0x3FB506DD,0x48B2364B,0xD80D2BDA,0xAF0A1B4C,0x36034AF6,0x41047A60,0xDF60EFC3,0xA867DF55,0x316E8EEF,0x4669BE79,
+ 0xCB61B38C,0xBC66831A,0x256FD2A0,0x5268E236,0xCC0C7795,0xBB0B4703,0x220216B9,0x5505262F,0xC5BA3BBE,0xB2BD0B28,0x2BB45A92,0x5CB36A04,0xC2D7FFA7,0xB5D0CF31,0x2CD99E8B,0x5BDEAE1D,
+ 0x9B64C2B0,0xEC63F226,0x756AA39C,0x026D930A,0x9C0906A9,0xEB0E363F,0x72076785,0x05005713,0x95BF4A82,0xE2B87A14,0x7BB12BAE,0x0CB61B38,0x92D28E9B,0xE5D5BE0D,0x7CDCEFB7,0x0BDBDF21,
+ 0x86D3D2D4,0xF1D4E242,0x68DDB3F8,0x1FDA836E,0x81BE16CD,0xF6B9265B,0x6FB077E1,0x18B74777,0x88085AE6,0xFF0F6A70,0x66063BCA,0x11010B5C,0x8F659EFF,0xF862AE69,0x616BFFD3,0x166CCF45,
+ 0xA00AE278,0xD70DD2EE,0x4E048354,0x3903B3C2,0xA7672661,0xD06016F7,0x4969474D,0x3E6E77DB,0xAED16A4A,0xD9D65ADC,0x40DF0B66,0x37D83BF0,0xA9BCAE53,0xDEBB9EC5,0x47B2CF7F,0x30B5FFE9,
+ 0xBDBDF21C,0xCABAC28A,0x53B39330,0x24B4A3A6,0xBAD03605,0xCDD70693,0x54DE5729,0x23D967BF,0xB3667A2E,0xC4614AB8,0x5D681B02,0x2A6F2B94,0xB40BBE37,0xC30C8EA1,0x5A05DF1B,0x2D02EF8D,
+};
+
+// Known size hash
+// It is ok to call ImHashData on a string with known length but the ### operator won't be supported.
+// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements.
+ImGuiID ImHashData(const void* data_p, size_t data_size, ImU32 seed)
+{
+ ImU32 crc = ~seed;
+ const unsigned char* data = (const unsigned char*)data_p;
+ const ImU32* crc32_lut = GCrc32LookupTable;
+ while (data_size-- != 0)
+ crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ *data++];
+ return ~crc;
+}
+
+// Zero-terminated string hash, with support for ### to reset back to seed value
+// We support a syntax of "label###id" where only "###id" is included in the hash, and only "label" gets displayed.
+// Because this syntax is rarely used we are optimizing for the common case.
+// - If we reach ### in the string we discard the hash so far and reset to the seed.
+// - We don't do 'current += 2; continue;' after handling ### to keep the code smaller/faster (measured ~10% diff in Debug build)
+// FIXME-OPT: Replace with e.g. FNV1a hash? CRC32 pretty much randomly access 1KB. Need to do proper measurements.
+ImGuiID ImHashStr(const char* data_p, size_t data_size, ImU32 seed)
+{
+ seed = ~seed;
+ ImU32 crc = seed;
+ const unsigned char* data = (const unsigned char*)data_p;
+ const ImU32* crc32_lut = GCrc32LookupTable;
+ if (data_size != 0)
+ {
+ while (data_size-- != 0)
+ {
+ unsigned char c = *data++;
+ if (c == '#' && data_size >= 2 && data[0] == '#' && data[1] == '#')
+ crc = seed;
+ crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c];
+ }
+ }
+ else
+ {
+ while (unsigned char c = *data++)
+ {
+ if (c == '#' && data[0] == '#' && data[1] == '#')
+ crc = seed;
+ crc = (crc >> 8) ^ crc32_lut[(crc & 0xFF) ^ c];
+ }
+ }
+ return ~crc;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] MISC HELPERS/UTILITIES (File functions)
+//-----------------------------------------------------------------------------
+
+// Default file functions
+#ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
+
+ImFileHandle ImFileOpen(const char* filename, const char* mode)
+{
+#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(__CYGWIN__) && !defined(__GNUC__)
+ // We need a fopen() wrapper because MSVC/Windows fopen doesn't handle UTF-8 filenames.
+ // Previously we used ImTextCountCharsFromUtf8/ImTextStrFromUtf8 here but we now need to support ImWchar16 and ImWchar32!
+ const int filename_wsize = ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, NULL, 0);
+ const int mode_wsize = ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, NULL, 0);
+ ImVector<ImWchar> buf;
+ buf.resize(filename_wsize + mode_wsize);
+ ::MultiByteToWideChar(CP_UTF8, 0, filename, -1, (wchar_t*)&buf[0], filename_wsize);
+ ::MultiByteToWideChar(CP_UTF8, 0, mode, -1, (wchar_t*)&buf[filename_wsize], mode_wsize);
+ return ::_wfopen((const wchar_t*)&buf[0], (const wchar_t*)&buf[filename_wsize]);
+#else
+ return fopen(filename, mode);
+#endif
+}
+
+// We should in theory be using fseeko()/ftello() with off_t and _fseeki64()/_ftelli64() with __int64, waiting for the PR that does that in a very portable pre-C++11 zero-warnings way.
+bool ImFileClose(ImFileHandle f) { return fclose(f) == 0; }
+ImU64 ImFileGetSize(ImFileHandle f) { long off = 0, sz = 0; return ((off = ftell(f)) != -1 && !fseek(f, 0, SEEK_END) && (sz = ftell(f)) != -1 && !fseek(f, off, SEEK_SET)) ? (ImU64)sz : (ImU64)-1; }
+ImU64 ImFileRead(void* data, ImU64 sz, ImU64 count, ImFileHandle f) { return fread(data, (size_t)sz, (size_t)count, f); }
+ImU64 ImFileWrite(const void* data, ImU64 sz, ImU64 count, ImFileHandle f) { return fwrite(data, (size_t)sz, (size_t)count, f); }
+#endif // #ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
+
+// Helper: Load file content into memory
+// Memory allocated with IM_ALLOC(), must be freed by user using IM_FREE() == ImGui::MemFree()
+// This can't really be used with "rt" because fseek size won't match read size.
+void* ImFileLoadToMemory(const char* filename, const char* mode, size_t* out_file_size, int padding_bytes)
+{
+ IM_ASSERT(filename && mode);
+ if (out_file_size)
+ *out_file_size = 0;
+
+ ImFileHandle f;
+ if ((f = ImFileOpen(filename, mode)) == NULL)
+ return NULL;
+
+ size_t file_size = (size_t)ImFileGetSize(f);
+ if (file_size == (size_t)-1)
+ {
+ ImFileClose(f);
+ return NULL;
+ }
+
+ void* file_data = IM_ALLOC(file_size + padding_bytes);
+ if (file_data == NULL)
+ {
+ ImFileClose(f);
+ return NULL;
+ }
+ if (ImFileRead(file_data, 1, file_size, f) != file_size)
+ {
+ ImFileClose(f);
+ IM_FREE(file_data);
+ return NULL;
+ }
+ if (padding_bytes > 0)
+ memset((void*)(((char*)file_data) + file_size), 0, (size_t)padding_bytes);
+
+ ImFileClose(f);
+ if (out_file_size)
+ *out_file_size = file_size;
+
+ return file_data;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] MISC HELPERS/UTILITIES (ImText* functions)
+//-----------------------------------------------------------------------------
+
+// Convert UTF-8 to 32-bit character, process single character input.
+// A nearly-branchless UTF-8 decoder, based on work of Christopher Wellons (https://github.com/skeeto/branchless-utf8).
+// We handle UTF-8 decoding error by skipping forward.
+int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end)
+{
+ static const char lengths[32] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 2, 3, 3, 4, 0 };
+ static const int masks[] = { 0x00, 0x7f, 0x1f, 0x0f, 0x07 };
+ static const uint32_t mins[] = { 0x400000, 0, 0x80, 0x800, 0x10000 };
+ static const int shiftc[] = { 0, 18, 12, 6, 0 };
+ static const int shifte[] = { 0, 6, 4, 2, 0 };
+ int len = lengths[*(const unsigned char*)in_text >> 3];
+ int wanted = len + !len;
+
+ if (in_text_end == NULL)
+ in_text_end = in_text + wanted; // Max length, nulls will be taken into account.
+
+ // Copy at most 'len' bytes, stop copying at 0 or past in_text_end. Branch predictor does a good job here,
+ // so it is fast even with excessive branching.
+ unsigned char s[4];
+ s[0] = in_text + 0 < in_text_end ? in_text[0] : 0;
+ s[1] = in_text + 1 < in_text_end ? in_text[1] : 0;
+ s[2] = in_text + 2 < in_text_end ? in_text[2] : 0;
+ s[3] = in_text + 3 < in_text_end ? in_text[3] : 0;
+
+ // Assume a four-byte character and load four bytes. Unused bits are shifted out.
+ *out_char = (uint32_t)(s[0] & masks[len]) << 18;
+ *out_char |= (uint32_t)(s[1] & 0x3f) << 12;
+ *out_char |= (uint32_t)(s[2] & 0x3f) << 6;
+ *out_char |= (uint32_t)(s[3] & 0x3f) << 0;
+ *out_char >>= shiftc[len];
+
+ // Accumulate the various error conditions.
+ int e = 0;
+ e = (*out_char < mins[len]) << 6; // non-canonical encoding
+ e |= ((*out_char >> 11) == 0x1b) << 7; // surrogate half?
+ e |= (*out_char > IM_UNICODE_CODEPOINT_MAX) << 8; // out of range?
+ e |= (s[1] & 0xc0) >> 2;
+ e |= (s[2] & 0xc0) >> 4;
+ e |= (s[3] ) >> 6;
+ e ^= 0x2a; // top two bits of each tail byte correct?
+ e >>= shifte[len];
+
+ if (e)
+ {
+ // No bytes are consumed when *in_text == 0 || in_text == in_text_end.
+ // One byte is consumed in case of invalid first byte of in_text.
+ // All available bytes (at most `len` bytes) are consumed on incomplete/invalid second to last bytes.
+ // Invalid or incomplete input may consume less bytes than wanted, therefore every byte has to be inspected in s.
+ wanted = ImMin(wanted, !!s[0] + !!s[1] + !!s[2] + !!s[3]);
+ *out_char = IM_UNICODE_CODEPOINT_INVALID;
+ }
+
+ return wanted;
+}
+
+int ImTextStrFromUtf8(ImWchar* buf, int buf_size, const char* in_text, const char* in_text_end, const char** in_text_remaining)
+{
+ ImWchar* buf_out = buf;
+ ImWchar* buf_end = buf + buf_size;
+ while (buf_out < buf_end - 1 && (!in_text_end || in_text < in_text_end) && *in_text)
+ {
+ unsigned int c;
+ in_text += ImTextCharFromUtf8(&c, in_text, in_text_end);
+ if (c == 0)
+ break;
+ *buf_out++ = (ImWchar)c;
+ }
+ *buf_out = 0;
+ if (in_text_remaining)
+ *in_text_remaining = in_text;
+ return (int)(buf_out - buf);
+}
+
+int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end)
+{
+ int char_count = 0;
+ while ((!in_text_end || in_text < in_text_end) && *in_text)
+ {
+ unsigned int c;
+ in_text += ImTextCharFromUtf8(&c, in_text, in_text_end);
+ if (c == 0)
+ break;
+ char_count++;
+ }
+ return char_count;
+}
+
+// Based on stb_to_utf8() from github.com/nothings/stb/
+static inline int ImTextCharToUtf8_inline(char* buf, int buf_size, unsigned int c)
+{
+ if (c < 0x80)
+ {
+ buf[0] = (char)c;
+ return 1;
+ }
+ if (c < 0x800)
+ {
+ if (buf_size < 2) return 0;
+ buf[0] = (char)(0xc0 + (c >> 6));
+ buf[1] = (char)(0x80 + (c & 0x3f));
+ return 2;
+ }
+ if (c < 0x10000)
+ {
+ if (buf_size < 3) return 0;
+ buf[0] = (char)(0xe0 + (c >> 12));
+ buf[1] = (char)(0x80 + ((c >> 6) & 0x3f));
+ buf[2] = (char)(0x80 + ((c ) & 0x3f));
+ return 3;
+ }
+ if (c <= 0x10FFFF)
+ {
+ if (buf_size < 4) return 0;
+ buf[0] = (char)(0xf0 + (c >> 18));
+ buf[1] = (char)(0x80 + ((c >> 12) & 0x3f));
+ buf[2] = (char)(0x80 + ((c >> 6) & 0x3f));
+ buf[3] = (char)(0x80 + ((c ) & 0x3f));
+ return 4;
+ }
+ // Invalid code point, the max unicode is 0x10FFFF
+ return 0;
+}
+
+const char* ImTextCharToUtf8(char out_buf[5], unsigned int c)
+{
+ int count = ImTextCharToUtf8_inline(out_buf, 5, c);
+ out_buf[count] = 0;
+ return out_buf;
+}
+
+// Not optimal but we very rarely use this function.
+int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end)
+{
+ unsigned int unused = 0;
+ return ImTextCharFromUtf8(&unused, in_text, in_text_end);
+}
+
+static inline int ImTextCountUtf8BytesFromChar(unsigned int c)
+{
+ if (c < 0x80) return 1;
+ if (c < 0x800) return 2;
+ if (c < 0x10000) return 3;
+ if (c <= 0x10FFFF) return 4;
+ return 3;
+}
+
+int ImTextStrToUtf8(char* out_buf, int out_buf_size, const ImWchar* in_text, const ImWchar* in_text_end)
+{
+ char* buf_p = out_buf;
+ const char* buf_end = out_buf + out_buf_size;
+ while (buf_p < buf_end - 1 && (!in_text_end || in_text < in_text_end) && *in_text)
+ {
+ unsigned int c = (unsigned int)(*in_text++);
+ if (c < 0x80)
+ *buf_p++ = (char)c;
+ else
+ buf_p += ImTextCharToUtf8_inline(buf_p, (int)(buf_end - buf_p - 1), c);
+ }
+ *buf_p = 0;
+ return (int)(buf_p - out_buf);
+}
+
+int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end)
+{
+ int bytes_count = 0;
+ while ((!in_text_end || in_text < in_text_end) && *in_text)
+ {
+ unsigned int c = (unsigned int)(*in_text++);
+ if (c < 0x80)
+ bytes_count++;
+ else
+ bytes_count += ImTextCountUtf8BytesFromChar(c);
+ }
+ return bytes_count;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] MISC HELPERS/UTILITIES (Color functions)
+// Note: The Convert functions are early design which are not consistent with other API.
+//-----------------------------------------------------------------------------
+
+IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b)
+{
+ float t = ((col_b >> IM_COL32_A_SHIFT) & 0xFF) / 255.f;
+ int r = ImLerp((int)(col_a >> IM_COL32_R_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_R_SHIFT) & 0xFF, t);
+ int g = ImLerp((int)(col_a >> IM_COL32_G_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_G_SHIFT) & 0xFF, t);
+ int b = ImLerp((int)(col_a >> IM_COL32_B_SHIFT) & 0xFF, (int)(col_b >> IM_COL32_B_SHIFT) & 0xFF, t);
+ return IM_COL32(r, g, b, 0xFF);
+}
+
+ImVec4 ImGui::ColorConvertU32ToFloat4(ImU32 in)
+{
+ float s = 1.0f / 255.0f;
+ return ImVec4(
+ ((in >> IM_COL32_R_SHIFT) & 0xFF) * s,
+ ((in >> IM_COL32_G_SHIFT) & 0xFF) * s,
+ ((in >> IM_COL32_B_SHIFT) & 0xFF) * s,
+ ((in >> IM_COL32_A_SHIFT) & 0xFF) * s);
+}
+
+ImU32 ImGui::ColorConvertFloat4ToU32(const ImVec4& in)
+{
+ ImU32 out;
+ out = ((ImU32)IM_F32_TO_INT8_SAT(in.x)) << IM_COL32_R_SHIFT;
+ out |= ((ImU32)IM_F32_TO_INT8_SAT(in.y)) << IM_COL32_G_SHIFT;
+ out |= ((ImU32)IM_F32_TO_INT8_SAT(in.z)) << IM_COL32_B_SHIFT;
+ out |= ((ImU32)IM_F32_TO_INT8_SAT(in.w)) << IM_COL32_A_SHIFT;
+ return out;
+}
+
+// Convert rgb floats ([0-1],[0-1],[0-1]) to hsv floats ([0-1],[0-1],[0-1]), from Foley & van Dam p592
+// Optimized http://lolengine.net/blog/2013/01/13/fast-rgb-to-hsv
+void ImGui::ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v)
+{
+ float K = 0.f;
+ if (g < b)
+ {
+ ImSwap(g, b);
+ K = -1.f;
+ }
+ if (r < g)
+ {
+ ImSwap(r, g);
+ K = -2.f / 6.f - K;
+ }
+
+ const float chroma = r - (g < b ? g : b);
+ out_h = ImFabs(K + (g - b) / (6.f * chroma + 1e-20f));
+ out_s = chroma / (r + 1e-20f);
+ out_v = r;
+}
+
+// Convert hsv floats ([0-1],[0-1],[0-1]) to rgb floats ([0-1],[0-1],[0-1]), from Foley & van Dam p593
+// also http://en.wikipedia.org/wiki/HSL_and_HSV
+void ImGui::ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b)
+{
+ if (s == 0.0f)
+ {
+ // gray
+ out_r = out_g = out_b = v;
+ return;
+ }
+
+ h = ImFmod(h, 1.0f) / (60.0f / 360.0f);
+ int i = (int)h;
+ float f = h - (float)i;
+ float p = v * (1.0f - s);
+ float q = v * (1.0f - s * f);
+ float t = v * (1.0f - s * (1.0f - f));
+
+ switch (i)
+ {
+ case 0: out_r = v; out_g = t; out_b = p; break;
+ case 1: out_r = q; out_g = v; out_b = p; break;
+ case 2: out_r = p; out_g = v; out_b = t; break;
+ case 3: out_r = p; out_g = q; out_b = v; break;
+ case 4: out_r = t; out_g = p; out_b = v; break;
+ case 5: default: out_r = v; out_g = p; out_b = q; break;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiStorage
+// Helper: Key->value storage
+//-----------------------------------------------------------------------------
+
+// std::lower_bound but without the bullshit
+static ImGuiStorage::ImGuiStoragePair* LowerBound(ImVector<ImGuiStorage::ImGuiStoragePair>& data, ImGuiID key)
+{
+ ImGuiStorage::ImGuiStoragePair* first = data.Data;
+ ImGuiStorage::ImGuiStoragePair* last = data.Data + data.Size;
+ size_t count = (size_t)(last - first);
+ while (count > 0)
+ {
+ size_t count2 = count >> 1;
+ ImGuiStorage::ImGuiStoragePair* mid = first + count2;
+ if (mid->key < key)
+ {
+ first = ++mid;
+ count -= count2 + 1;
+ }
+ else
+ {
+ count = count2;
+ }
+ }
+ return first;
+}
+
+// For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once.
+void ImGuiStorage::BuildSortByKey()
+{
+ struct StaticFunc
+ {
+ static int IMGUI_CDECL PairComparerByID(const void* lhs, const void* rhs)
+ {
+ // We can't just do a subtraction because qsort uses signed integers and subtracting our ID doesn't play well with that.
+ if (((const ImGuiStoragePair*)lhs)->key > ((const ImGuiStoragePair*)rhs)->key) return +1;
+ if (((const ImGuiStoragePair*)lhs)->key < ((const ImGuiStoragePair*)rhs)->key) return -1;
+ return 0;
+ }
+ };
+ ImQsort(Data.Data, (size_t)Data.Size, sizeof(ImGuiStoragePair), StaticFunc::PairComparerByID);
+}
+
+int ImGuiStorage::GetInt(ImGuiID key, int default_val) const
+{
+ ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
+ if (it == Data.end() || it->key != key)
+ return default_val;
+ return it->val_i;
+}
+
+bool ImGuiStorage::GetBool(ImGuiID key, bool default_val) const
+{
+ return GetInt(key, default_val ? 1 : 0) != 0;
+}
+
+float ImGuiStorage::GetFloat(ImGuiID key, float default_val) const
+{
+ ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
+ if (it == Data.end() || it->key != key)
+ return default_val;
+ return it->val_f;
+}
+
+void* ImGuiStorage::GetVoidPtr(ImGuiID key) const
+{
+ ImGuiStoragePair* it = LowerBound(const_cast<ImVector<ImGuiStoragePair>&>(Data), key);
+ if (it == Data.end() || it->key != key)
+ return NULL;
+ return it->val_p;
+}
+
+// References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer.
+int* ImGuiStorage::GetIntRef(ImGuiID key, int default_val)
+{
+ ImGuiStoragePair* it = LowerBound(Data, key);
+ if (it == Data.end() || it->key != key)
+ it = Data.insert(it, ImGuiStoragePair(key, default_val));
+ return &it->val_i;
+}
+
+bool* ImGuiStorage::GetBoolRef(ImGuiID key, bool default_val)
+{
+ return (bool*)GetIntRef(key, default_val ? 1 : 0);
+}
+
+float* ImGuiStorage::GetFloatRef(ImGuiID key, float default_val)
+{
+ ImGuiStoragePair* it = LowerBound(Data, key);
+ if (it == Data.end() || it->key != key)
+ it = Data.insert(it, ImGuiStoragePair(key, default_val));
+ return &it->val_f;
+}
+
+void** ImGuiStorage::GetVoidPtrRef(ImGuiID key, void* default_val)
+{
+ ImGuiStoragePair* it = LowerBound(Data, key);
+ if (it == Data.end() || it->key != key)
+ it = Data.insert(it, ImGuiStoragePair(key, default_val));
+ return &it->val_p;
+}
+
+// FIXME-OPT: Need a way to reuse the result of lower_bound when doing GetInt()/SetInt() - not too bad because it only happens on explicit interaction (maximum one a frame)
+void ImGuiStorage::SetInt(ImGuiID key, int val)
+{
+ ImGuiStoragePair* it = LowerBound(Data, key);
+ if (it == Data.end() || it->key != key)
+ {
+ Data.insert(it, ImGuiStoragePair(key, val));
+ return;
+ }
+ it->val_i = val;
+}
+
+void ImGuiStorage::SetBool(ImGuiID key, bool val)
+{
+ SetInt(key, val ? 1 : 0);
+}
+
+void ImGuiStorage::SetFloat(ImGuiID key, float val)
+{
+ ImGuiStoragePair* it = LowerBound(Data, key);
+ if (it == Data.end() || it->key != key)
+ {
+ Data.insert(it, ImGuiStoragePair(key, val));
+ return;
+ }
+ it->val_f = val;
+}
+
+void ImGuiStorage::SetVoidPtr(ImGuiID key, void* val)
+{
+ ImGuiStoragePair* it = LowerBound(Data, key);
+ if (it == Data.end() || it->key != key)
+ {
+ Data.insert(it, ImGuiStoragePair(key, val));
+ return;
+ }
+ it->val_p = val;
+}
+
+void ImGuiStorage::SetAllInt(int v)
+{
+ for (int i = 0; i < Data.Size; i++)
+ Data[i].val_i = v;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiTextFilter
+//-----------------------------------------------------------------------------
+
+// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
+ImGuiTextFilter::ImGuiTextFilter(const char* default_filter) //-V1077
+{
+ InputBuf[0] = 0;
+ CountGrep = 0;
+ if (default_filter)
+ {
+ ImStrncpy(InputBuf, default_filter, IM_ARRAYSIZE(InputBuf));
+ Build();
+ }
+}
+
+bool ImGuiTextFilter::Draw(const char* label, float width)
+{
+ if (width != 0.0f)
+ ImGui::SetNextItemWidth(width);
+ bool value_changed = ImGui::InputText(label, InputBuf, IM_ARRAYSIZE(InputBuf));
+ if (value_changed)
+ Build();
+ return value_changed;
+}
+
+void ImGuiTextFilter::ImGuiTextRange::split(char separator, ImVector<ImGuiTextRange>* out) const
+{
+ out->resize(0);
+ const char* wb = b;
+ const char* we = wb;
+ while (we < e)
+ {
+ if (*we == separator)
+ {
+ out->push_back(ImGuiTextRange(wb, we));
+ wb = we + 1;
+ }
+ we++;
+ }
+ if (wb != we)
+ out->push_back(ImGuiTextRange(wb, we));
+}
+
+void ImGuiTextFilter::Build()
+{
+ Filters.resize(0);
+ ImGuiTextRange input_range(InputBuf, InputBuf + strlen(InputBuf));
+ input_range.split(',', &Filters);
+
+ CountGrep = 0;
+ for (int i = 0; i != Filters.Size; i++)
+ {
+ ImGuiTextRange& f = Filters[i];
+ while (f.b < f.e && ImCharIsBlankA(f.b[0]))
+ f.b++;
+ while (f.e > f.b && ImCharIsBlankA(f.e[-1]))
+ f.e--;
+ if (f.empty())
+ continue;
+ if (Filters[i].b[0] != '-')
+ CountGrep += 1;
+ }
+}
+
+bool ImGuiTextFilter::PassFilter(const char* text, const char* text_end) const
+{
+ if (Filters.empty())
+ return true;
+
+ if (text == NULL)
+ text = "";
+
+ for (int i = 0; i != Filters.Size; i++)
+ {
+ const ImGuiTextRange& f = Filters[i];
+ if (f.empty())
+ continue;
+ if (f.b[0] == '-')
+ {
+ // Subtract
+ if (ImStristr(text, text_end, f.b + 1, f.e) != NULL)
+ return false;
+ }
+ else
+ {
+ // Grep
+ if (ImStristr(text, text_end, f.b, f.e) != NULL)
+ return true;
+ }
+ }
+
+ // Implicit * grep
+ if (CountGrep == 0)
+ return true;
+
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiTextBuffer
+//-----------------------------------------------------------------------------
+
+// On some platform vsnprintf() takes va_list by reference and modifies it.
+// va_copy is the 'correct' way to copy a va_list but Visual Studio prior to 2013 doesn't have it.
+#ifndef va_copy
+#if defined(__GNUC__) || defined(__clang__)
+#define va_copy(dest, src) __builtin_va_copy(dest, src)
+#else
+#define va_copy(dest, src) (dest = src)
+#endif
+#endif
+
+char ImGuiTextBuffer::EmptyString[1] = { 0 };
+
+void ImGuiTextBuffer::append(const char* str, const char* str_end)
+{
+ int len = str_end ? (int)(str_end - str) : (int)strlen(str);
+
+ // Add zero-terminator the first time
+ const int write_off = (Buf.Size != 0) ? Buf.Size : 1;
+ const int needed_sz = write_off + len;
+ if (write_off + len >= Buf.Capacity)
+ {
+ int new_capacity = Buf.Capacity * 2;
+ Buf.reserve(needed_sz > new_capacity ? needed_sz : new_capacity);
+ }
+
+ Buf.resize(needed_sz);
+ memcpy(&Buf[write_off - 1], str, (size_t)len);
+ Buf[write_off - 1 + len] = 0;
+}
+
+void ImGuiTextBuffer::appendf(const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ appendfv(fmt, args);
+ va_end(args);
+}
+
+// Helper: Text buffer for logging/accumulating text
+void ImGuiTextBuffer::appendfv(const char* fmt, va_list args)
+{
+ va_list args_copy;
+ va_copy(args_copy, args);
+
+ int len = ImFormatStringV(NULL, 0, fmt, args); // FIXME-OPT: could do a first pass write attempt, likely successful on first pass.
+ if (len <= 0)
+ {
+ va_end(args_copy);
+ return;
+ }
+
+ // Add zero-terminator the first time
+ const int write_off = (Buf.Size != 0) ? Buf.Size : 1;
+ const int needed_sz = write_off + len;
+ if (write_off + len >= Buf.Capacity)
+ {
+ int new_capacity = Buf.Capacity * 2;
+ Buf.reserve(needed_sz > new_capacity ? needed_sz : new_capacity);
+ }
+
+ Buf.resize(needed_sz);
+ ImFormatStringV(&Buf[write_off - 1], (size_t)len + 1, fmt, args_copy);
+ va_end(args_copy);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiListClipper
+// This is currently not as flexible/powerful as it should be and really confusing/spaghetti, mostly because we changed
+// the API mid-way through development and support two ways to using the clipper, needs some rework (see TODO)
+//-----------------------------------------------------------------------------
+
+// FIXME-TABLE: This prevents us from using ImGuiListClipper _inside_ a table cell.
+// The problem we have is that without a Begin/End scheme for rows using the clipper is ambiguous.
+static bool GetSkipItemForListClipping()
+{
+ ImGuiContext& g = *GImGui;
+ return (g.CurrentTable ? g.CurrentTable->HostSkipItems : g.CurrentWindow->SkipItems);
+}
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+// Legacy helper to calculate coarse clipping of large list of evenly sized items.
+// This legacy API is not ideal because it assume we will return a single contiguous rectangle.
+// Prefer using ImGuiListClipper which can returns non-contiguous ranges.
+void ImGui::CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (g.LogEnabled)
+ {
+ // If logging is active, do not perform any clipping
+ *out_items_display_start = 0;
+ *out_items_display_end = items_count;
+ return;
+ }
+ if (GetSkipItemForListClipping())
+ {
+ *out_items_display_start = *out_items_display_end = 0;
+ return;
+ }
+
+ // We create the union of the ClipRect and the scoring rect which at worst should be 1 page away from ClipRect
+ // We don't include g.NavId's rectangle in there (unless g.NavJustMovedToId is set) because the rectangle enlargement can get costly.
+ ImRect rect = window->ClipRect;
+ if (g.NavMoveScoringItems)
+ rect.Add(g.NavScoringNoClipRect);
+ if (g.NavJustMovedToId && window->NavLastIds[0] == g.NavJustMovedToId)
+ rect.Add(WindowRectRelToAbs(window, window->NavRectRel[0])); // Could store and use NavJustMovedToRectRel
+
+ const ImVec2 pos = window->DC.CursorPos;
+ int start = (int)((rect.Min.y - pos.y) / items_height);
+ int end = (int)((rect.Max.y - pos.y) / items_height);
+
+ // When performing a navigation request, ensure we have one item extra in the direction we are moving to
+ // FIXME: Verify this works with tabbing
+ const bool is_nav_request = (g.NavMoveScoringItems && g.NavWindow && g.NavWindow->RootWindowForNav == window->RootWindowForNav);
+ if (is_nav_request && g.NavMoveClipDir == ImGuiDir_Up)
+ start--;
+ if (is_nav_request && g.NavMoveClipDir == ImGuiDir_Down)
+ end++;
+
+ start = ImClamp(start, 0, items_count);
+ end = ImClamp(end + 1, start, items_count);
+ *out_items_display_start = start;
+ *out_items_display_end = end;
+}
+#endif
+
+static void ImGuiListClipper_SortAndFuseRanges(ImVector<ImGuiListClipperRange>& ranges, int offset = 0)
+{
+ if (ranges.Size - offset <= 1)
+ return;
+
+ // Helper to order ranges and fuse them together if possible (bubble sort is fine as we are only sorting 2-3 entries)
+ for (int sort_end = ranges.Size - offset - 1; sort_end > 0; --sort_end)
+ for (int i = offset; i < sort_end + offset; ++i)
+ if (ranges[i].Min > ranges[i + 1].Min)
+ ImSwap(ranges[i], ranges[i + 1]);
+
+ // Now fuse ranges together as much as possible.
+ for (int i = 1 + offset; i < ranges.Size; i++)
+ {
+ IM_ASSERT(!ranges[i].PosToIndexConvert && !ranges[i - 1].PosToIndexConvert);
+ if (ranges[i - 1].Max < ranges[i].Min)
+ continue;
+ ranges[i - 1].Min = ImMin(ranges[i - 1].Min, ranges[i].Min);
+ ranges[i - 1].Max = ImMax(ranges[i - 1].Max, ranges[i].Max);
+ ranges.erase(ranges.Data + i);
+ i--;
+ }
+}
+
+static void ImGuiListClipper_SeekCursorAndSetupPrevLine(float pos_y, float line_height)
+{
+ // Set cursor position and a few other things so that SetScrollHereY() and Columns() can work when seeking cursor.
+ // FIXME: It is problematic that we have to do that here, because custom/equivalent end-user code would stumble on the same issue.
+ // The clipper should probably have a final step to display the last item in a regular manner, maybe with an opt-out flag for data sets which may have costly seek?
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ float off_y = pos_y - window->DC.CursorPos.y;
+ window->DC.CursorPos.y = pos_y;
+ window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, pos_y - g.Style.ItemSpacing.y);
+ window->DC.CursorPosPrevLine.y = window->DC.CursorPos.y - line_height; // Setting those fields so that SetScrollHereY() can properly function after the end of our clipper usage.
+ window->DC.PrevLineSize.y = (line_height - g.Style.ItemSpacing.y); // If we end up needing more accurate data (to e.g. use SameLine) we may as well make the clipper have a fourth step to let user process and display the last item in their list.
+ if (ImGuiOldColumns* columns = window->DC.CurrentColumns)
+ columns->LineMinY = window->DC.CursorPos.y; // Setting this so that cell Y position are set properly
+ if (ImGuiTable* table = g.CurrentTable)
+ {
+ if (table->IsInsideRow)
+ ImGui::TableEndRow(table);
+ table->RowPosY2 = window->DC.CursorPos.y;
+ const int row_increase = (int)((off_y / line_height) + 0.5f);
+ //table->CurrentRow += row_increase; // Can't do without fixing TableEndRow()
+ table->RowBgColorCounter += row_increase;
+ }
+}
+
+static void ImGuiListClipper_SeekCursorForItem(ImGuiListClipper* clipper, int item_n)
+{
+ // StartPosY starts from ItemsFrozen hence the subtraction
+ // Perform the add and multiply with double to allow seeking through larger ranges
+ ImGuiListClipperData* data = (ImGuiListClipperData*)clipper->TempData;
+ float pos_y = (float)((double)clipper->StartPosY + data->LossynessOffset + (double)(item_n - data->ItemsFrozen) * clipper->ItemsHeight);
+ ImGuiListClipper_SeekCursorAndSetupPrevLine(pos_y, clipper->ItemsHeight);
+}
+
+ImGuiListClipper::ImGuiListClipper()
+{
+ memset(this, 0, sizeof(*this));
+ ItemsCount = -1;
+}
+
+ImGuiListClipper::~ImGuiListClipper()
+{
+ End();
+}
+
+// Use case A: Begin() called from constructor with items_height<0, then called again from Step() in StepNo 1
+// Use case B: Begin() called from constructor with items_height>0
+// FIXME-LEGACY: Ideally we should remove the Begin/End functions but they are part of the legacy API we still support. This is why some of the code in Step() calling Begin() and reassign some fields, spaghetti style.
+void ImGuiListClipper::Begin(int items_count, float items_height)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ if (ImGuiTable* table = g.CurrentTable)
+ if (table->IsInsideRow)
+ ImGui::TableEndRow(table);
+
+ StartPosY = window->DC.CursorPos.y;
+ ItemsHeight = items_height;
+ ItemsCount = items_count;
+ DisplayStart = -1;
+ DisplayEnd = 0;
+
+ // Acquire temporary buffer
+ if (++g.ClipperTempDataStacked > g.ClipperTempData.Size)
+ g.ClipperTempData.resize(g.ClipperTempDataStacked, ImGuiListClipperData());
+ ImGuiListClipperData* data = &g.ClipperTempData[g.ClipperTempDataStacked - 1];
+ data->Reset(this);
+ data->LossynessOffset = window->DC.CursorStartPosLossyness.y;
+ TempData = data;
+}
+
+void ImGuiListClipper::End()
+{
+ ImGuiContext& g = *GImGui;
+ if (ImGuiListClipperData* data = (ImGuiListClipperData*)TempData)
+ {
+ // In theory here we should assert that we are already at the right position, but it seems saner to just seek at the end and not assert/crash the user.
+ if (ItemsCount >= 0 && ItemsCount < INT_MAX && DisplayStart >= 0)
+ ImGuiListClipper_SeekCursorForItem(this, ItemsCount);
+
+ // Restore temporary buffer and fix back pointers which may be invalidated when nesting
+ IM_ASSERT(data->ListClipper == this);
+ data->StepNo = data->Ranges.Size;
+ if (--g.ClipperTempDataStacked > 0)
+ {
+ data = &g.ClipperTempData[g.ClipperTempDataStacked - 1];
+ data->ListClipper->TempData = data;
+ }
+ TempData = NULL;
+ }
+ ItemsCount = -1;
+}
+
+void ImGuiListClipper::ForceDisplayRangeByIndices(int item_min, int item_max)
+{
+ ImGuiListClipperData* data = (ImGuiListClipperData*)TempData;
+ IM_ASSERT(DisplayStart < 0); // Only allowed after Begin() and if there has not been a specified range yet.
+ IM_ASSERT(item_min <= item_max);
+ if (item_min < item_max)
+ data->Ranges.push_back(ImGuiListClipperRange::FromIndices(item_min, item_max));
+}
+
+bool ImGuiListClipper::Step()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiListClipperData* data = (ImGuiListClipperData*)TempData;
+ IM_ASSERT(data != NULL && "Called ImGuiListClipper::Step() too many times, or before ImGuiListClipper::Begin() ?");
+
+ ImGuiTable* table = g.CurrentTable;
+ if (table && table->IsInsideRow)
+ ImGui::TableEndRow(table);
+
+ // No items
+ if (ItemsCount == 0 || GetSkipItemForListClipping())
+ return (void)End(), false;
+
+ // While we are in frozen row state, keep displaying items one by one, unclipped
+ // FIXME: Could be stored as a table-agnostic state.
+ if (data->StepNo == 0 && table != NULL && !table->IsUnfrozenRows)
+ {
+ DisplayStart = data->ItemsFrozen;
+ DisplayEnd = data->ItemsFrozen + 1;
+ if (DisplayStart >= ItemsCount)
+ return (void)End(), false;
+ data->ItemsFrozen++;
+ return true;
+ }
+
+ // Step 0: Let you process the first element (regardless of it being visible or not, so we can measure the element height)
+ bool calc_clipping = false;
+ if (data->StepNo == 0)
+ {
+ StartPosY = window->DC.CursorPos.y;
+ if (ItemsHeight <= 0.0f)
+ {
+ // Submit the first item (or range) so we can measure its height (generally the first range is 0..1)
+ data->Ranges.push_front(ImGuiListClipperRange::FromIndices(data->ItemsFrozen, data->ItemsFrozen + 1));
+ DisplayStart = ImMax(data->Ranges[0].Min, data->ItemsFrozen);
+ DisplayEnd = ImMin(data->Ranges[0].Max, ItemsCount);
+ if (DisplayStart == DisplayEnd)
+ return (void)End(), false;
+ data->StepNo = 1;
+ return true;
+ }
+ calc_clipping = true; // If on the first step with known item height, calculate clipping.
+ }
+
+ // Step 1: Let the clipper infer height from first range
+ if (ItemsHeight <= 0.0f)
+ {
+ IM_ASSERT(data->StepNo == 1);
+ if (table)
+ IM_ASSERT(table->RowPosY1 == StartPosY && table->RowPosY2 == window->DC.CursorPos.y);
+
+ ItemsHeight = (window->DC.CursorPos.y - StartPosY) / (float)(DisplayEnd - DisplayStart);
+ bool affected_by_floating_point_precision = ImIsFloatAboveGuaranteedIntegerPrecision(StartPosY) || ImIsFloatAboveGuaranteedIntegerPrecision(window->DC.CursorPos.y);
+ if (affected_by_floating_point_precision)
+ ItemsHeight = window->DC.PrevLineSize.y + g.Style.ItemSpacing.y; // FIXME: Technically wouldn't allow multi-line entries.
+
+ IM_ASSERT(ItemsHeight > 0.0f && "Unable to calculate item height! First item hasn't moved the cursor vertically!");
+ calc_clipping = true; // If item height had to be calculated, calculate clipping afterwards.
+ }
+
+ // Step 0 or 1: Calculate the actual ranges of visible elements.
+ const int already_submitted = DisplayEnd;
+ if (calc_clipping)
+ {
+ if (g.LogEnabled)
+ {
+ // If logging is active, do not perform any clipping
+ data->Ranges.push_back(ImGuiListClipperRange::FromIndices(0, ItemsCount));
+ }
+ else
+ {
+ // Add range selected to be included for navigation
+ const bool is_nav_request = (g.NavMoveScoringItems && g.NavWindow && g.NavWindow->RootWindowForNav == window->RootWindowForNav);
+ if (is_nav_request)
+ data->Ranges.push_back(ImGuiListClipperRange::FromPositions(g.NavScoringNoClipRect.Min.y, g.NavScoringNoClipRect.Max.y, 0, 0));
+ if (is_nav_request && (g.NavMoveFlags & ImGuiNavMoveFlags_Tabbing) && g.NavTabbingDir == -1)
+ data->Ranges.push_back(ImGuiListClipperRange::FromIndices(ItemsCount - 1, ItemsCount));
+
+ // Add focused/active item
+ ImRect nav_rect_abs = ImGui::WindowRectRelToAbs(window, window->NavRectRel[0]);
+ if (g.NavId != 0 && window->NavLastIds[0] == g.NavId)
+ data->Ranges.push_back(ImGuiListClipperRange::FromPositions(nav_rect_abs.Min.y, nav_rect_abs.Max.y, 0, 0));
+
+ // Add visible range
+ const int off_min = (is_nav_request && g.NavMoveClipDir == ImGuiDir_Up) ? -1 : 0;
+ const int off_max = (is_nav_request && g.NavMoveClipDir == ImGuiDir_Down) ? 1 : 0;
+ data->Ranges.push_back(ImGuiListClipperRange::FromPositions(window->ClipRect.Min.y, window->ClipRect.Max.y, off_min, off_max));
+ }
+
+ // Convert position ranges to item index ranges
+ // - Very important: when a starting position is after our maximum item, we set Min to (ItemsCount - 1). This allows us to handle most forms of wrapping.
+ // - Due to how Selectable extra padding they tend to be "unaligned" with exact unit in the item list,
+ // which with the flooring/ceiling tend to lead to 2 items instead of one being submitted.
+ for (int i = 0; i < data->Ranges.Size; i++)
+ if (data->Ranges[i].PosToIndexConvert)
+ {
+ int m1 = (int)(((double)data->Ranges[i].Min - window->DC.CursorPos.y - data->LossynessOffset) / ItemsHeight);
+ int m2 = (int)((((double)data->Ranges[i].Max - window->DC.CursorPos.y - data->LossynessOffset) / ItemsHeight) + 0.999999f);
+ data->Ranges[i].Min = ImClamp(already_submitted + m1 + data->Ranges[i].PosToIndexOffsetMin, already_submitted, ItemsCount - 1);
+ data->Ranges[i].Max = ImClamp(already_submitted + m2 + data->Ranges[i].PosToIndexOffsetMax, data->Ranges[i].Min + 1, ItemsCount);
+ data->Ranges[i].PosToIndexConvert = false;
+ }
+ ImGuiListClipper_SortAndFuseRanges(data->Ranges, data->StepNo);
+ }
+
+ // Step 0+ (if item height is given in advance) or 1+: Display the next range in line.
+ if (data->StepNo < data->Ranges.Size)
+ {
+ DisplayStart = ImMax(data->Ranges[data->StepNo].Min, already_submitted);
+ DisplayEnd = ImMin(data->Ranges[data->StepNo].Max, ItemsCount);
+ if (DisplayStart > already_submitted) //-V1051
+ ImGuiListClipper_SeekCursorForItem(this, DisplayStart);
+ data->StepNo++;
+ return true;
+ }
+
+ // After the last step: Let the clipper validate that we have reached the expected Y position (corresponding to element DisplayEnd),
+ // Advance the cursor to the end of the list and then returns 'false' to end the loop.
+ if (ItemsCount < INT_MAX)
+ ImGuiListClipper_SeekCursorForItem(this, ItemsCount);
+
+ End();
+ return false;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] STYLING
+//-----------------------------------------------------------------------------
+
+ImGuiStyle& ImGui::GetStyle()
+{
+ IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
+ return GImGui->Style;
+}
+
+ImU32 ImGui::GetColorU32(ImGuiCol idx, float alpha_mul)
+{
+ ImGuiStyle& style = GImGui->Style;
+ ImVec4 c = style.Colors[idx];
+ c.w *= style.Alpha * alpha_mul;
+ return ColorConvertFloat4ToU32(c);
+}
+
+ImU32 ImGui::GetColorU32(const ImVec4& col)
+{
+ ImGuiStyle& style = GImGui->Style;
+ ImVec4 c = col;
+ c.w *= style.Alpha;
+ return ColorConvertFloat4ToU32(c);
+}
+
+const ImVec4& ImGui::GetStyleColorVec4(ImGuiCol idx)
+{
+ ImGuiStyle& style = GImGui->Style;
+ return style.Colors[idx];
+}
+
+ImU32 ImGui::GetColorU32(ImU32 col)
+{
+ ImGuiStyle& style = GImGui->Style;
+ if (style.Alpha >= 1.0f)
+ return col;
+ ImU32 a = (col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT;
+ a = (ImU32)(a * style.Alpha); // We don't need to clamp 0..255 because Style.Alpha is in 0..1 range.
+ return (col & ~IM_COL32_A_MASK) | (a << IM_COL32_A_SHIFT);
+}
+
+// FIXME: This may incur a round-trip (if the end user got their data from a float4) but eventually we aim to store the in-flight colors as ImU32
+void ImGui::PushStyleColor(ImGuiCol idx, ImU32 col)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiColorMod backup;
+ backup.Col = idx;
+ backup.BackupValue = g.Style.Colors[idx];
+ g.ColorStack.push_back(backup);
+ g.Style.Colors[idx] = ColorConvertU32ToFloat4(col);
+}
+
+void ImGui::PushStyleColor(ImGuiCol idx, const ImVec4& col)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiColorMod backup;
+ backup.Col = idx;
+ backup.BackupValue = g.Style.Colors[idx];
+ g.ColorStack.push_back(backup);
+ g.Style.Colors[idx] = col;
+}
+
+void ImGui::PopStyleColor(int count)
+{
+ ImGuiContext& g = *GImGui;
+ while (count > 0)
+ {
+ ImGuiColorMod& backup = g.ColorStack.back();
+ g.Style.Colors[backup.Col] = backup.BackupValue;
+ g.ColorStack.pop_back();
+ count--;
+ }
+}
+
+struct ImGuiStyleVarInfo
+{
+ ImGuiDataType Type;
+ ImU32 Count;
+ ImU32 Offset;
+ void* GetVarPtr(ImGuiStyle* style) const { return (void*)((unsigned char*)style + Offset); }
+};
+
+static const ImGuiStyleVarInfo GStyleVarInfo[] =
+{
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, Alpha) }, // ImGuiStyleVar_Alpha
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, DisabledAlpha) }, // ImGuiStyleVar_DisabledAlpha
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowPadding) }, // ImGuiStyleVar_WindowPadding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowRounding) }, // ImGuiStyleVar_WindowRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowBorderSize) }, // ImGuiStyleVar_WindowBorderSize
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowMinSize) }, // ImGuiStyleVar_WindowMinSize
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, WindowTitleAlign) }, // ImGuiStyleVar_WindowTitleAlign
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildRounding) }, // ImGuiStyleVar_ChildRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ChildBorderSize) }, // ImGuiStyleVar_ChildBorderSize
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupRounding) }, // ImGuiStyleVar_PopupRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, PopupBorderSize) }, // ImGuiStyleVar_PopupBorderSize
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, FramePadding) }, // ImGuiStyleVar_FramePadding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameRounding) }, // ImGuiStyleVar_FrameRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, FrameBorderSize) }, // ImGuiStyleVar_FrameBorderSize
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemSpacing) }, // ImGuiStyleVar_ItemSpacing
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ItemInnerSpacing) }, // ImGuiStyleVar_ItemInnerSpacing
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, IndentSpacing) }, // ImGuiStyleVar_IndentSpacing
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, CellPadding) }, // ImGuiStyleVar_CellPadding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarSize) }, // ImGuiStyleVar_ScrollbarSize
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, ScrollbarRounding) }, // ImGuiStyleVar_ScrollbarRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabMinSize) }, // ImGuiStyleVar_GrabMinSize
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, GrabRounding) }, // ImGuiStyleVar_GrabRounding
+ { ImGuiDataType_Float, 1, (ImU32)IM_OFFSETOF(ImGuiStyle, TabRounding) }, // ImGuiStyleVar_TabRounding
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, ButtonTextAlign) }, // ImGuiStyleVar_ButtonTextAlign
+ { ImGuiDataType_Float, 2, (ImU32)IM_OFFSETOF(ImGuiStyle, SelectableTextAlign) }, // ImGuiStyleVar_SelectableTextAlign
+};
+
+static const ImGuiStyleVarInfo* GetStyleVarInfo(ImGuiStyleVar idx)
+{
+ IM_ASSERT(idx >= 0 && idx < ImGuiStyleVar_COUNT);
+ IM_ASSERT(IM_ARRAYSIZE(GStyleVarInfo) == ImGuiStyleVar_COUNT);
+ return &GStyleVarInfo[idx];
+}
+
+void ImGui::PushStyleVar(ImGuiStyleVar idx, float val)
+{
+ const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
+ if (var_info->Type == ImGuiDataType_Float && var_info->Count == 1)
+ {
+ ImGuiContext& g = *GImGui;
+ float* pvar = (float*)var_info->GetVarPtr(&g.Style);
+ g.StyleVarStack.push_back(ImGuiStyleMod(idx, *pvar));
+ *pvar = val;
+ return;
+ }
+ IM_ASSERT(0 && "Called PushStyleVar() float variant but variable is not a float!");
+}
+
+void ImGui::PushStyleVar(ImGuiStyleVar idx, const ImVec2& val)
+{
+ const ImGuiStyleVarInfo* var_info = GetStyleVarInfo(idx);
+ if (var_info->Type == ImGuiDataType_Float && var_info->Count == 2)
+ {
+ ImGuiContext& g = *GImGui;
+ ImVec2* pvar = (ImVec2*)var_info->GetVarPtr(&g.Style);
+ g.StyleVarStack.push_back(ImGuiStyleMod(idx, *pvar));
+ *pvar = val;
+ return;
+ }
+ IM_ASSERT(0 && "Called PushStyleVar() ImVec2 variant but variable is not a ImVec2!");
+}
+
+void ImGui::PopStyleVar(int count)
+{
+ ImGuiContext& g = *GImGui;
+ while (count > 0)
+ {
+ // We avoid a generic memcpy(data, &backup.Backup.., GDataTypeSize[info->Type] * info->Count), the overhead in Debug is not worth it.
+ ImGuiStyleMod& backup = g.StyleVarStack.back();
+ const ImGuiStyleVarInfo* info = GetStyleVarInfo(backup.VarIdx);
+ void* data = info->GetVarPtr(&g.Style);
+ if (info->Type == ImGuiDataType_Float && info->Count == 1) { ((float*)data)[0] = backup.BackupFloat[0]; }
+ else if (info->Type == ImGuiDataType_Float && info->Count == 2) { ((float*)data)[0] = backup.BackupFloat[0]; ((float*)data)[1] = backup.BackupFloat[1]; }
+ g.StyleVarStack.pop_back();
+ count--;
+ }
+}
+
+const char* ImGui::GetStyleColorName(ImGuiCol idx)
+{
+ // Create switch-case from enum with regexp: ImGuiCol_{.*}, --> case ImGuiCol_\1: return "\1";
+ switch (idx)
+ {
+ case ImGuiCol_Text: return "Text";
+ case ImGuiCol_TextDisabled: return "TextDisabled";
+ case ImGuiCol_WindowBg: return "WindowBg";
+ case ImGuiCol_ChildBg: return "ChildBg";
+ case ImGuiCol_PopupBg: return "PopupBg";
+ case ImGuiCol_Border: return "Border";
+ case ImGuiCol_BorderShadow: return "BorderShadow";
+ case ImGuiCol_FrameBg: return "FrameBg";
+ case ImGuiCol_FrameBgHovered: return "FrameBgHovered";
+ case ImGuiCol_FrameBgActive: return "FrameBgActive";
+ case ImGuiCol_TitleBg: return "TitleBg";
+ case ImGuiCol_TitleBgActive: return "TitleBgActive";
+ case ImGuiCol_TitleBgCollapsed: return "TitleBgCollapsed";
+ case ImGuiCol_MenuBarBg: return "MenuBarBg";
+ case ImGuiCol_ScrollbarBg: return "ScrollbarBg";
+ case ImGuiCol_ScrollbarGrab: return "ScrollbarGrab";
+ case ImGuiCol_ScrollbarGrabHovered: return "ScrollbarGrabHovered";
+ case ImGuiCol_ScrollbarGrabActive: return "ScrollbarGrabActive";
+ case ImGuiCol_CheckMark: return "CheckMark";
+ case ImGuiCol_SliderGrab: return "SliderGrab";
+ case ImGuiCol_SliderGrabActive: return "SliderGrabActive";
+ case ImGuiCol_Button: return "Button";
+ case ImGuiCol_ButtonHovered: return "ButtonHovered";
+ case ImGuiCol_ButtonActive: return "ButtonActive";
+ case ImGuiCol_Header: return "Header";
+ case ImGuiCol_HeaderHovered: return "HeaderHovered";
+ case ImGuiCol_HeaderActive: return "HeaderActive";
+ case ImGuiCol_Separator: return "Separator";
+ case ImGuiCol_SeparatorHovered: return "SeparatorHovered";
+ case ImGuiCol_SeparatorActive: return "SeparatorActive";
+ case ImGuiCol_ResizeGrip: return "ResizeGrip";
+ case ImGuiCol_ResizeGripHovered: return "ResizeGripHovered";
+ case ImGuiCol_ResizeGripActive: return "ResizeGripActive";
+ case ImGuiCol_Tab: return "Tab";
+ case ImGuiCol_TabHovered: return "TabHovered";
+ case ImGuiCol_TabActive: return "TabActive";
+ case ImGuiCol_TabUnfocused: return "TabUnfocused";
+ case ImGuiCol_TabUnfocusedActive: return "TabUnfocusedActive";
+ case ImGuiCol_PlotLines: return "PlotLines";
+ case ImGuiCol_PlotLinesHovered: return "PlotLinesHovered";
+ case ImGuiCol_PlotHistogram: return "PlotHistogram";
+ case ImGuiCol_PlotHistogramHovered: return "PlotHistogramHovered";
+ case ImGuiCol_TableHeaderBg: return "TableHeaderBg";
+ case ImGuiCol_TableBorderStrong: return "TableBorderStrong";
+ case ImGuiCol_TableBorderLight: return "TableBorderLight";
+ case ImGuiCol_TableRowBg: return "TableRowBg";
+ case ImGuiCol_TableRowBgAlt: return "TableRowBgAlt";
+ case ImGuiCol_TextSelectedBg: return "TextSelectedBg";
+ case ImGuiCol_DragDropTarget: return "DragDropTarget";
+ case ImGuiCol_NavHighlight: return "NavHighlight";
+ case ImGuiCol_NavWindowingHighlight: return "NavWindowingHighlight";
+ case ImGuiCol_NavWindowingDimBg: return "NavWindowingDimBg";
+ case ImGuiCol_ModalWindowDimBg: return "ModalWindowDimBg";
+ }
+ IM_ASSERT(0);
+ return "Unknown";
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] RENDER HELPERS
+// Some of those (internal) functions are currently quite a legacy mess - their signature and behavior will change,
+// we need a nicer separation between low-level functions and high-level functions relying on the ImGui context.
+// Also see imgui_draw.cpp for some more which have been reworked to not rely on ImGui:: context.
+//-----------------------------------------------------------------------------
+
+const char* ImGui::FindRenderedTextEnd(const char* text, const char* text_end)
+{
+ const char* text_display_end = text;
+ if (!text_end)
+ text_end = (const char*)-1;
+
+ while (text_display_end < text_end && *text_display_end != '\0' && (text_display_end[0] != '#' || text_display_end[1] != '#'))
+ text_display_end++;
+ return text_display_end;
+}
+
+// Internal ImGui functions to render text
+// RenderText***() functions calls ImDrawList::AddText() calls ImBitmapFont::RenderText()
+void ImGui::RenderText(ImVec2 pos, const char* text, const char* text_end, bool hide_text_after_hash)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ // Hide anything after a '##' string
+ const char* text_display_end;
+ if (hide_text_after_hash)
+ {
+ text_display_end = FindRenderedTextEnd(text, text_end);
+ }
+ else
+ {
+ if (!text_end)
+ text_end = text + strlen(text); // FIXME-OPT
+ text_display_end = text_end;
+ }
+
+ if (text != text_display_end)
+ {
+ window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_display_end);
+ if (g.LogEnabled)
+ LogRenderedText(&pos, text, text_display_end);
+ }
+}
+
+void ImGui::RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ if (!text_end)
+ text_end = text + strlen(text); // FIXME-OPT
+
+ if (text != text_end)
+ {
+ window->DrawList->AddText(g.Font, g.FontSize, pos, GetColorU32(ImGuiCol_Text), text, text_end, wrap_width);
+ if (g.LogEnabled)
+ LogRenderedText(&pos, text, text_end);
+ }
+}
+
+// Default clip_rect uses (pos_min,pos_max)
+// Handle clipping on CPU immediately (vs typically let the GPU clip the triangles that are overlapping the clipping rectangle edges)
+void ImGui::RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_display_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect)
+{
+ // Perform CPU side clipping for single clipped element to avoid using scissor state
+ ImVec2 pos = pos_min;
+ const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_display_end, false, 0.0f);
+
+ const ImVec2* clip_min = clip_rect ? &clip_rect->Min : &pos_min;
+ const ImVec2* clip_max = clip_rect ? &clip_rect->Max : &pos_max;
+ bool need_clipping = (pos.x + text_size.x >= clip_max->x) || (pos.y + text_size.y >= clip_max->y);
+ if (clip_rect) // If we had no explicit clipping rectangle then pos==clip_min
+ need_clipping |= (pos.x < clip_min->x) || (pos.y < clip_min->y);
+
+ // Align whole block. We should defer that to the better rendering function when we'll have support for individual line alignment.
+ if (align.x > 0.0f) pos.x = ImMax(pos.x, pos.x + (pos_max.x - pos.x - text_size.x) * align.x);
+ if (align.y > 0.0f) pos.y = ImMax(pos.y, pos.y + (pos_max.y - pos.y - text_size.y) * align.y);
+
+ // Render
+ if (need_clipping)
+ {
+ ImVec4 fine_clip_rect(clip_min->x, clip_min->y, clip_max->x, clip_max->y);
+ draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, &fine_clip_rect);
+ }
+ else
+ {
+ draw_list->AddText(NULL, 0.0f, pos, GetColorU32(ImGuiCol_Text), text, text_display_end, 0.0f, NULL);
+ }
+}
+
+void ImGui::RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align, const ImRect* clip_rect)
+{
+ // Hide anything after a '##' string
+ const char* text_display_end = FindRenderedTextEnd(text, text_end);
+ const int text_len = (int)(text_display_end - text);
+ if (text_len == 0)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ RenderTextClippedEx(window->DrawList, pos_min, pos_max, text, text_display_end, text_size_if_known, align, clip_rect);
+ if (g.LogEnabled)
+ LogRenderedText(&pos_min, text, text_display_end);
+}
+
+
+// Another overly complex function until we reorganize everything into a nice all-in-one helper.
+// This is made more complex because we have dissociated the layout rectangle (pos_min..pos_max) which define _where_ the ellipsis is, from actual clipping of text and limit of the ellipsis display.
+// This is because in the context of tabs we selectively hide part of the text when the Close Button appears, but we don't want the ellipsis to move.
+void ImGui::RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end_full, const ImVec2* text_size_if_known)
+{
+ ImGuiContext& g = *GImGui;
+ if (text_end_full == NULL)
+ text_end_full = FindRenderedTextEnd(text);
+ const ImVec2 text_size = text_size_if_known ? *text_size_if_known : CalcTextSize(text, text_end_full, false, 0.0f);
+
+ //draw_list->AddLine(ImVec2(pos_max.x, pos_min.y - 4), ImVec2(pos_max.x, pos_max.y + 4), IM_COL32(0, 0, 255, 255));
+ //draw_list->AddLine(ImVec2(ellipsis_max_x, pos_min.y-2), ImVec2(ellipsis_max_x, pos_max.y+2), IM_COL32(0, 255, 0, 255));
+ //draw_list->AddLine(ImVec2(clip_max_x, pos_min.y), ImVec2(clip_max_x, pos_max.y), IM_COL32(255, 0, 0, 255));
+ // FIXME: We could technically remove (last_glyph->AdvanceX - last_glyph->X1) from text_size.x here and save a few pixels.
+ if (text_size.x > pos_max.x - pos_min.x)
+ {
+ // Hello wo...
+ // | | |
+ // min max ellipsis_max
+ // <-> this is generally some padding value
+
+ const ImFont* font = draw_list->_Data->Font;
+ const float font_size = draw_list->_Data->FontSize;
+ const char* text_end_ellipsis = NULL;
+
+ ImWchar ellipsis_char = font->EllipsisChar;
+ int ellipsis_char_count = 1;
+ if (ellipsis_char == (ImWchar)-1)
+ {
+ ellipsis_char = font->DotChar;
+ ellipsis_char_count = 3;
+ }
+ const ImFontGlyph* glyph = font->FindGlyph(ellipsis_char);
+
+ float ellipsis_glyph_width = glyph->X1; // Width of the glyph with no padding on either side
+ float ellipsis_total_width = ellipsis_glyph_width; // Full width of entire ellipsis
+
+ if (ellipsis_char_count > 1)
+ {
+ // Full ellipsis size without free spacing after it.
+ const float spacing_between_dots = 1.0f * (draw_list->_Data->FontSize / font->FontSize);
+ ellipsis_glyph_width = glyph->X1 - glyph->X0 + spacing_between_dots;
+ ellipsis_total_width = ellipsis_glyph_width * (float)ellipsis_char_count - spacing_between_dots;
+ }
+
+ // We can now claim the space between pos_max.x and ellipsis_max.x
+ const float text_avail_width = ImMax((ImMax(pos_max.x, ellipsis_max_x) - ellipsis_total_width) - pos_min.x, 1.0f);
+ float text_size_clipped_x = font->CalcTextSizeA(font_size, text_avail_width, 0.0f, text, text_end_full, &text_end_ellipsis).x;
+ if (text == text_end_ellipsis && text_end_ellipsis < text_end_full)
+ {
+ // Always display at least 1 character if there's no room for character + ellipsis
+ text_end_ellipsis = text + ImTextCountUtf8BytesFromChar(text, text_end_full);
+ text_size_clipped_x = font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text, text_end_ellipsis).x;
+ }
+ while (text_end_ellipsis > text && ImCharIsBlankA(text_end_ellipsis[-1]))
+ {
+ // Trim trailing space before ellipsis (FIXME: Supporting non-ascii blanks would be nice, for this we need a function to backtrack in UTF-8 text)
+ text_end_ellipsis--;
+ text_size_clipped_x -= font->CalcTextSizeA(font_size, FLT_MAX, 0.0f, text_end_ellipsis, text_end_ellipsis + 1).x; // Ascii blanks are always 1 byte
+ }
+
+ // Render text, render ellipsis
+ RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_ellipsis, &text_size, ImVec2(0.0f, 0.0f));
+ float ellipsis_x = pos_min.x + text_size_clipped_x;
+ if (ellipsis_x + ellipsis_total_width <= ellipsis_max_x)
+ for (int i = 0; i < ellipsis_char_count; i++)
+ {
+ font->RenderChar(draw_list, font_size, ImVec2(ellipsis_x, pos_min.y), GetColorU32(ImGuiCol_Text), ellipsis_char);
+ ellipsis_x += ellipsis_glyph_width;
+ }
+ }
+ else
+ {
+ RenderTextClippedEx(draw_list, pos_min, ImVec2(clip_max_x, pos_max.y), text, text_end_full, &text_size, ImVec2(0.0f, 0.0f));
+ }
+
+ if (g.LogEnabled)
+ LogRenderedText(&pos_min, text, text_end_full);
+}
+
+// Render a rectangle shaped with optional rounding and borders
+void ImGui::RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border, float rounding)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ window->DrawList->AddRectFilled(p_min, p_max, fill_col, rounding);
+ const float border_size = g.Style.FrameBorderSize;
+ if (border && border_size > 0.0f)
+ {
+ window->DrawList->AddRect(p_min + ImVec2(1, 1), p_max + ImVec2(1, 1), GetColorU32(ImGuiCol_BorderShadow), rounding, 0, border_size);
+ window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, 0, border_size);
+ }
+}
+
+void ImGui::RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ const float border_size = g.Style.FrameBorderSize;
+ if (border_size > 0.0f)
+ {
+ window->DrawList->AddRect(p_min + ImVec2(1, 1), p_max + ImVec2(1, 1), GetColorU32(ImGuiCol_BorderShadow), rounding, 0, border_size);
+ window->DrawList->AddRect(p_min, p_max, GetColorU32(ImGuiCol_Border), rounding, 0, border_size);
+ }
+}
+
+void ImGui::RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ if (id != g.NavId)
+ return;
+ if (g.NavDisableHighlight && !(flags & ImGuiNavHighlightFlags_AlwaysDraw))
+ return;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->DC.NavHideHighlightOneFrame)
+ return;
+
+ float rounding = (flags & ImGuiNavHighlightFlags_NoRounding) ? 0.0f : g.Style.FrameRounding;
+ ImRect display_rect = bb;
+ display_rect.ClipWith(window->ClipRect);
+ if (flags & ImGuiNavHighlightFlags_TypeDefault)
+ {
+ const float THICKNESS = 2.0f;
+ const float DISTANCE = 3.0f + THICKNESS * 0.5f;
+ display_rect.Expand(ImVec2(DISTANCE, DISTANCE));
+ bool fully_visible = window->ClipRect.Contains(display_rect);
+ if (!fully_visible)
+ window->DrawList->PushClipRect(display_rect.Min, display_rect.Max);
+ window->DrawList->AddRect(display_rect.Min + ImVec2(THICKNESS * 0.5f, THICKNESS * 0.5f), display_rect.Max - ImVec2(THICKNESS * 0.5f, THICKNESS * 0.5f), GetColorU32(ImGuiCol_NavHighlight), rounding, 0, THICKNESS);
+ if (!fully_visible)
+ window->DrawList->PopClipRect();
+ }
+ if (flags & ImGuiNavHighlightFlags_TypeThin)
+ {
+ window->DrawList->AddRect(display_rect.Min, display_rect.Max, GetColorU32(ImGuiCol_NavHighlight), rounding, 0, 1.0f);
+ }
+}
+
+void ImGui::RenderMouseCursor(ImVec2 base_pos, float base_scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(mouse_cursor > ImGuiMouseCursor_None && mouse_cursor < ImGuiMouseCursor_COUNT);
+ for (int n = 0; n < g.Viewports.Size; n++)
+ {
+ ImGuiViewportP* viewport = g.Viewports[n];
+ ImDrawList* draw_list = GetForegroundDrawList(viewport);
+ ImFontAtlas* font_atlas = draw_list->_Data->Font->ContainerAtlas;
+ ImVec2 offset, size, uv[4];
+ if (font_atlas->GetMouseCursorTexData(mouse_cursor, &offset, &size, &uv[0], &uv[2]))
+ {
+ const ImVec2 pos = base_pos - offset;
+ const float scale = base_scale;
+ ImTextureID tex_id = font_atlas->TexID;
+ draw_list->PushTextureID(tex_id);
+ draw_list->AddImage(tex_id, pos + ImVec2(1, 0) * scale, pos + (ImVec2(1, 0) + size) * scale, uv[2], uv[3], col_shadow);
+ draw_list->AddImage(tex_id, pos + ImVec2(2, 0) * scale, pos + (ImVec2(2, 0) + size) * scale, uv[2], uv[3], col_shadow);
+ draw_list->AddImage(tex_id, pos, pos + size * scale, uv[2], uv[3], col_border);
+ draw_list->AddImage(tex_id, pos, pos + size * scale, uv[0], uv[1], col_fill);
+ draw_list->PopTextureID();
+ }
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] MAIN CODE (most of the code! lots of stuff, needs tidying up!)
+//-----------------------------------------------------------------------------
+
+// ImGuiWindow is mostly a dumb struct. It merely has a constructor and a few helper methods
+ImGuiWindow::ImGuiWindow(ImGuiContext* context, const char* name) : DrawListInst(NULL)
+{
+ memset(this, 0, sizeof(*this));
+ Name = ImStrdup(name);
+ NameBufLen = (int)strlen(name) + 1;
+ ID = ImHashStr(name);
+ IDStack.push_back(ID);
+ MoveId = GetID("#MOVE");
+ ScrollTarget = ImVec2(FLT_MAX, FLT_MAX);
+ ScrollTargetCenterRatio = ImVec2(0.5f, 0.5f);
+ AutoFitFramesX = AutoFitFramesY = -1;
+ AutoPosLastDirection = ImGuiDir_None;
+ SetWindowPosAllowFlags = SetWindowSizeAllowFlags = SetWindowCollapsedAllowFlags = ImGuiCond_Always | ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing;
+ SetWindowPosVal = SetWindowPosPivot = ImVec2(FLT_MAX, FLT_MAX);
+ LastFrameActive = -1;
+ LastTimeActive = -1.0f;
+ FontWindowScale = 1.0f;
+ SettingsOffset = -1;
+ DrawList = &DrawListInst;
+ DrawList->_Data = &context->DrawListSharedData;
+ DrawList->_OwnerName = Name;
+}
+
+ImGuiWindow::~ImGuiWindow()
+{
+ IM_ASSERT(DrawList == &DrawListInst);
+ IM_DELETE(Name);
+ ColumnsStorage.clear_destruct();
+}
+
+ImGuiID ImGuiWindow::GetID(const char* str, const char* str_end)
+{
+ ImGuiID seed = IDStack.back();
+ ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed);
+ ImGuiContext& g = *GImGui;
+ if (g.DebugHookIdInfo == id)
+ ImGui::DebugHookIdInfo(id, ImGuiDataType_String, str, str_end);
+ return id;
+}
+
+ImGuiID ImGuiWindow::GetID(const void* ptr)
+{
+ ImGuiID seed = IDStack.back();
+ ImGuiID id = ImHashData(&ptr, sizeof(void*), seed);
+ ImGuiContext& g = *GImGui;
+ if (g.DebugHookIdInfo == id)
+ ImGui::DebugHookIdInfo(id, ImGuiDataType_Pointer, ptr, NULL);
+ return id;
+}
+
+ImGuiID ImGuiWindow::GetID(int n)
+{
+ ImGuiID seed = IDStack.back();
+ ImGuiID id = ImHashData(&n, sizeof(n), seed);
+ ImGuiContext& g = *GImGui;
+ if (g.DebugHookIdInfo == id)
+ ImGui::DebugHookIdInfo(id, ImGuiDataType_S32, (void*)(intptr_t)n, NULL);
+ return id;
+}
+
+// This is only used in rare/specific situations to manufacture an ID out of nowhere.
+ImGuiID ImGuiWindow::GetIDFromRectangle(const ImRect& r_abs)
+{
+ ImGuiID seed = IDStack.back();
+ ImRect r_rel = ImGui::WindowRectAbsToRel(this, r_abs);
+ ImGuiID id = ImHashData(&r_rel, sizeof(r_rel), seed);
+ return id;
+}
+
+static void SetCurrentWindow(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ g.CurrentWindow = window;
+ g.CurrentTable = window && window->DC.CurrentTableIdx != -1 ? g.Tables.GetByIndex(window->DC.CurrentTableIdx) : NULL;
+ if (window)
+ g.FontSize = g.DrawListSharedData.FontSize = window->CalcFontSize();
+}
+
+void ImGui::GcCompactTransientMiscBuffers()
+{
+ ImGuiContext& g = *GImGui;
+ g.ItemFlagsStack.clear();
+ g.GroupStack.clear();
+ TableGcCompactSettings();
+}
+
+// Free up/compact internal window buffers, we can use this when a window becomes unused.
+// Not freed:
+// - ImGuiWindow, ImGuiWindowSettings, Name, StateStorage, ColumnsStorage (may hold useful data)
+// This should have no noticeable visual effect. When the window reappear however, expect new allocation/buffer growth/copy cost.
+void ImGui::GcCompactTransientWindowBuffers(ImGuiWindow* window)
+{
+ window->MemoryCompacted = true;
+ window->MemoryDrawListIdxCapacity = window->DrawList->IdxBuffer.Capacity;
+ window->MemoryDrawListVtxCapacity = window->DrawList->VtxBuffer.Capacity;
+ window->IDStack.clear();
+ window->DrawList->_ClearFreeMemory();
+ window->DC.ChildWindows.clear();
+ window->DC.ItemWidthStack.clear();
+ window->DC.TextWrapPosStack.clear();
+}
+
+void ImGui::GcAwakeTransientWindowBuffers(ImGuiWindow* window)
+{
+ // We stored capacity of the ImDrawList buffer to reduce growth-caused allocation/copy when awakening.
+ // The other buffers tends to amortize much faster.
+ window->MemoryCompacted = false;
+ window->DrawList->IdxBuffer.reserve(window->MemoryDrawListIdxCapacity);
+ window->DrawList->VtxBuffer.reserve(window->MemoryDrawListVtxCapacity);
+ window->MemoryDrawListIdxCapacity = window->MemoryDrawListVtxCapacity = 0;
+}
+
+void ImGui::SetActiveID(ImGuiID id, ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+
+ // While most behaved code would make an effort to not steal active id during window move/drag operations,
+ // we at least need to be resilient to it. Cancelling the move is rather aggressive and users of 'master' branch
+ // may prefer the weird ill-defined half working situation ('docking' did assert), so may need to rework that.
+ if (g.MovingWindow != NULL && g.ActiveId == g.MovingWindow->MoveId)
+ {
+ IMGUI_DEBUG_LOG_ACTIVEID("SetActiveID() cancel MovingWindow\n");
+ g.MovingWindow = NULL;
+ }
+
+ // Set active id
+ g.ActiveIdIsJustActivated = (g.ActiveId != id);
+ if (g.ActiveIdIsJustActivated)
+ {
+ IMGUI_DEBUG_LOG_ACTIVEID("SetActiveID() old:0x%08X (window \"%s\") -> new:0x%08X (window \"%s\")\n", g.ActiveId, g.ActiveIdWindow ? g.ActiveIdWindow->Name : "", id, window ? window->Name : "");
+ g.ActiveIdTimer = 0.0f;
+ g.ActiveIdHasBeenPressedBefore = false;
+ g.ActiveIdHasBeenEditedBefore = false;
+ g.ActiveIdMouseButton = -1;
+ if (id != 0)
+ {
+ g.LastActiveId = id;
+ g.LastActiveIdTimer = 0.0f;
+ }
+ }
+ g.ActiveId = id;
+ g.ActiveIdAllowOverlap = false;
+ g.ActiveIdNoClearOnFocusLoss = false;
+ g.ActiveIdWindow = window;
+ g.ActiveIdHasBeenEditedThisFrame = false;
+ if (id)
+ {
+ g.ActiveIdIsAlive = id;
+ g.ActiveIdSource = (g.NavActivateId == id || g.NavActivateInputId == id || g.NavJustMovedToId == id) ? (ImGuiInputSource)ImGuiInputSource_Nav : ImGuiInputSource_Mouse;
+ }
+
+ // Clear declaration of inputs claimed by the widget
+ // (Please note that this is WIP and not all keys/inputs are thoroughly declared by all widgets yet)
+ g.ActiveIdUsingMouseWheel = false;
+ g.ActiveIdUsingNavDirMask = 0x00;
+ g.ActiveIdUsingNavInputMask = 0x00;
+ g.ActiveIdUsingKeyInputMask.ClearAllBits();
+}
+
+void ImGui::ClearActiveID()
+{
+ SetActiveID(0, NULL); // g.ActiveId = 0;
+}
+
+void ImGui::SetHoveredID(ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ g.HoveredId = id;
+ g.HoveredIdAllowOverlap = false;
+ g.HoveredIdUsingMouseWheel = false;
+ if (id != 0 && g.HoveredIdPreviousFrame != id)
+ g.HoveredIdTimer = g.HoveredIdNotActiveTimer = 0.0f;
+}
+
+ImGuiID ImGui::GetHoveredID()
+{
+ ImGuiContext& g = *GImGui;
+ return g.HoveredId ? g.HoveredId : g.HoveredIdPreviousFrame;
+}
+
+// This is called by ItemAdd().
+// Code not using ItemAdd() may need to call this manually otherwise ActiveId will be cleared. In IMGUI_VERSION_NUM < 18717 this was called by GetID().
+void ImGui::KeepAliveID(ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.ActiveId == id)
+ g.ActiveIdIsAlive = id;
+ if (g.ActiveIdPreviousFrame == id)
+ g.ActiveIdPreviousFrameIsAlive = true;
+}
+
+void ImGui::MarkItemEdited(ImGuiID id)
+{
+ // This marking is solely to be able to provide info for IsItemDeactivatedAfterEdit().
+ // ActiveId might have been released by the time we call this (as in the typical press/release button behavior) but still need need to fill the data.
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.ActiveId == id || g.ActiveId == 0 || g.DragDropActive);
+ IM_UNUSED(id); // Avoid unused variable warnings when asserts are compiled out.
+ //IM_ASSERT(g.CurrentWindow->DC.LastItemId == id);
+ g.ActiveIdHasBeenEditedThisFrame = true;
+ g.ActiveIdHasBeenEditedBefore = true;
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_Edited;
+}
+
+static inline bool IsWindowContentHoverable(ImGuiWindow* window, ImGuiHoveredFlags flags)
+{
+ // An active popup disable hovering on other windows (apart from its own children)
+ // FIXME-OPT: This could be cached/stored within the window.
+ ImGuiContext& g = *GImGui;
+ if (g.NavWindow)
+ if (ImGuiWindow* focused_root_window = g.NavWindow->RootWindow)
+ if (focused_root_window->WasActive && focused_root_window != window->RootWindow)
+ {
+ // For the purpose of those flags we differentiate "standard popup" from "modal popup"
+ // NB: The order of those two tests is important because Modal windows are also Popups.
+ if (focused_root_window->Flags & ImGuiWindowFlags_Modal)
+ return false;
+ if ((focused_root_window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+ return false;
+ }
+ return true;
+}
+
+// This is roughly matching the behavior of internal-facing ItemHoverable()
+// - we allow hovering to be true when ActiveId==window->MoveID, so that clicking on non-interactive items such as a Text() item still returns true with IsItemHovered()
+// - this should work even for non-interactive items that have no ID, so we cannot use LastItemId
+bool ImGui::IsItemHovered(ImGuiHoveredFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (g.NavDisableMouseHover && !g.NavDisableHighlight && !(flags & ImGuiHoveredFlags_NoNavOverride))
+ {
+ if ((g.LastItemData.InFlags & ImGuiItemFlags_Disabled) && !(flags & ImGuiHoveredFlags_AllowWhenDisabled))
+ return false;
+ if (!IsItemFocused())
+ return false;
+ }
+ else
+ {
+ // Test for bounding box overlap, as updated as ItemAdd()
+ ImGuiItemStatusFlags status_flags = g.LastItemData.StatusFlags;
+ if (!(status_flags & ImGuiItemStatusFlags_HoveredRect))
+ return false;
+ IM_ASSERT((flags & (ImGuiHoveredFlags_AnyWindow | ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_NoPopupHierarchy)) == 0); // Flags not supported by this function
+
+ // Test if we are hovering the right window (our window could be behind another window)
+ // [2021/03/02] Reworked / reverted the revert, finally. Note we want e.g. BeginGroup/ItemAdd/EndGroup to work as well. (#3851)
+ // [2017/10/16] Reverted commit 344d48be3 and testing RootWindow instead. I believe it is correct to NOT test for RootWindow but this leaves us unable
+ // to use IsItemHovered() after EndChild() itself. Until a solution is found I believe reverting to the test from 2017/09/27 is safe since this was
+ // the test that has been running for a long while.
+ if (g.HoveredWindow != window && (status_flags & ImGuiItemStatusFlags_HoveredWindow) == 0)
+ if ((flags & ImGuiHoveredFlags_AllowWhenOverlapped) == 0)
+ return false;
+
+ // Test if another item is active (e.g. being dragged)
+ if ((flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem) == 0)
+ if (g.ActiveId != 0 && g.ActiveId != g.LastItemData.ID && !g.ActiveIdAllowOverlap && g.ActiveId != window->MoveId)
+ return false;
+
+ // Test if interactions on this window are blocked by an active popup or modal.
+ // The ImGuiHoveredFlags_AllowWhenBlockedByPopup flag will be tested here.
+ if (!IsWindowContentHoverable(window, flags))
+ return false;
+
+ // Test if the item is disabled
+ if ((g.LastItemData.InFlags & ImGuiItemFlags_Disabled) && !(flags & ImGuiHoveredFlags_AllowWhenDisabled))
+ return false;
+
+ // Special handling for calling after Begin() which represent the title bar or tab.
+ // When the window is collapsed (SkipItems==true) that last item will never be overwritten so we need to detect the case.
+ if (g.LastItemData.ID == window->MoveId && window->WriteAccessed)
+ return false;
+ }
+
+ return true;
+}
+
+// Internal facing ItemHoverable() used when submitting widgets. Differs slightly from IsItemHovered().
+bool ImGui::ItemHoverable(const ImRect& bb, ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.HoveredId != 0 && g.HoveredId != id && !g.HoveredIdAllowOverlap)
+ return false;
+
+ ImGuiWindow* window = g.CurrentWindow;
+ if (g.HoveredWindow != window)
+ return false;
+ if (g.ActiveId != 0 && g.ActiveId != id && !g.ActiveIdAllowOverlap)
+ return false;
+ if (!IsMouseHoveringRect(bb.Min, bb.Max))
+ return false;
+ if (!IsWindowContentHoverable(window, ImGuiHoveredFlags_None))
+ {
+ g.HoveredIdDisabled = true;
+ return false;
+ }
+
+ // We exceptionally allow this function to be called with id==0 to allow using it for easy high-level
+ // hover test in widgets code. We could also decide to split this function is two.
+ if (id != 0)
+ SetHoveredID(id);
+
+ // When disabled we'll return false but still set HoveredId
+ ImGuiItemFlags item_flags = (g.LastItemData.ID == id ? g.LastItemData.InFlags : g.CurrentItemFlags);
+ if (item_flags & ImGuiItemFlags_Disabled)
+ {
+ // Release active id if turning disabled
+ if (g.ActiveId == id)
+ ClearActiveID();
+ g.HoveredIdDisabled = true;
+ return false;
+ }
+
+ if (id != 0)
+ {
+ // [DEBUG] Item Picker tool!
+ // We perform the check here because SetHoveredID() is not frequently called (1~ time a frame), making
+ // the cost of this tool near-zero. We can get slightly better call-stack and support picking non-hovered
+ // items if we perform the test in ItemAdd(), but that would incur a small runtime cost.
+ // #define IMGUI_DEBUG_TOOL_ITEM_PICKER_EX in imconfig.h if you want this check to also be performed in ItemAdd().
+ if (g.DebugItemPickerActive && g.HoveredIdPreviousFrame == id)
+ GetForegroundDrawList()->AddRect(bb.Min, bb.Max, IM_COL32(255, 255, 0, 255));
+ if (g.DebugItemPickerBreakId == id)
+ IM_DEBUG_BREAK();
+ }
+
+ if (g.NavDisableMouseHover)
+ return false;
+
+ return true;
+}
+
+bool ImGui::IsClippedEx(const ImRect& bb, ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (!bb.Overlaps(window->ClipRect))
+ if (id == 0 || (id != g.ActiveId && id != g.NavId))
+ if (!g.LogEnabled)
+ return true;
+ return false;
+}
+
+// This is also inlined in ItemAdd()
+// Note: if ImGuiItemStatusFlags_HasDisplayRect is set, user needs to set window->DC.LastItemDisplayRect!
+void ImGui::SetLastItemData(ImGuiID item_id, ImGuiItemFlags in_flags, ImGuiItemStatusFlags item_flags, const ImRect& item_rect)
+{
+ ImGuiContext& g = *GImGui;
+ g.LastItemData.ID = item_id;
+ g.LastItemData.InFlags = in_flags;
+ g.LastItemData.StatusFlags = item_flags;
+ g.LastItemData.Rect = item_rect;
+}
+
+float ImGui::CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x)
+{
+ if (wrap_pos_x < 0.0f)
+ return 0.0f;
+
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (wrap_pos_x == 0.0f)
+ {
+ // We could decide to setup a default wrapping max point for auto-resizing windows,
+ // or have auto-wrap (with unspecified wrapping pos) behave as a ContentSize extending function?
+ //if (window->Hidden && (window->Flags & ImGuiWindowFlags_AlwaysAutoResize))
+ // wrap_pos_x = ImMax(window->WorkRect.Min.x + g.FontSize * 10.0f, window->WorkRect.Max.x);
+ //else
+ wrap_pos_x = window->WorkRect.Max.x;
+ }
+ else if (wrap_pos_x > 0.0f)
+ {
+ wrap_pos_x += window->Pos.x - window->Scroll.x; // wrap_pos_x is provided is window local space
+ }
+
+ return ImMax(wrap_pos_x - pos.x, 1.0f);
+}
+
+// IM_ALLOC() == ImGui::MemAlloc()
+void* ImGui::MemAlloc(size_t size)
+{
+ if (ImGuiContext* ctx = GImGui)
+ ctx->IO.MetricsActiveAllocations++;
+ return (*GImAllocatorAllocFunc)(size, GImAllocatorUserData);
+}
+
+// IM_FREE() == ImGui::MemFree()
+void ImGui::MemFree(void* ptr)
+{
+ if (ptr)
+ if (ImGuiContext* ctx = GImGui)
+ ctx->IO.MetricsActiveAllocations--;
+ return (*GImAllocatorFreeFunc)(ptr, GImAllocatorUserData);
+}
+
+const char* ImGui::GetClipboardText()
+{
+ ImGuiContext& g = *GImGui;
+ return g.IO.GetClipboardTextFn ? g.IO.GetClipboardTextFn(g.IO.ClipboardUserData) : "";
+}
+
+void ImGui::SetClipboardText(const char* text)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.IO.SetClipboardTextFn)
+ g.IO.SetClipboardTextFn(g.IO.ClipboardUserData, text);
+}
+
+const char* ImGui::GetVersion()
+{
+ return IMGUI_VERSION;
+}
+
+// Internal state access - if you want to share Dear ImGui state between modules (e.g. DLL) or allocate it yourself
+// Note that we still point to some static data and members (such as GFontAtlas), so the state instance you end up using will point to the static data within its module
+ImGuiContext* ImGui::GetCurrentContext()
+{
+ return GImGui;
+}
+
+void ImGui::SetCurrentContext(ImGuiContext* ctx)
+{
+#ifdef IMGUI_SET_CURRENT_CONTEXT_FUNC
+ IMGUI_SET_CURRENT_CONTEXT_FUNC(ctx); // For custom thread-based hackery you may want to have control over this.
+#else
+ GImGui = ctx;
+#endif
+}
+
+void ImGui::SetAllocatorFunctions(ImGuiMemAllocFunc alloc_func, ImGuiMemFreeFunc free_func, void* user_data)
+{
+ GImAllocatorAllocFunc = alloc_func;
+ GImAllocatorFreeFunc = free_func;
+ GImAllocatorUserData = user_data;
+}
+
+// This is provided to facilitate copying allocators from one static/DLL boundary to another (e.g. retrieve default allocator of your executable address space)
+void ImGui::GetAllocatorFunctions(ImGuiMemAllocFunc* p_alloc_func, ImGuiMemFreeFunc* p_free_func, void** p_user_data)
+{
+ *p_alloc_func = GImAllocatorAllocFunc;
+ *p_free_func = GImAllocatorFreeFunc;
+ *p_user_data = GImAllocatorUserData;
+}
+
+ImGuiContext* ImGui::CreateContext(ImFontAtlas* shared_font_atlas)
+{
+ ImGuiContext* prev_ctx = GetCurrentContext();
+ ImGuiContext* ctx = IM_NEW(ImGuiContext)(shared_font_atlas);
+ SetCurrentContext(ctx);
+ Initialize();
+ if (prev_ctx != NULL)
+ SetCurrentContext(prev_ctx); // Restore previous context if any, else keep new one.
+ return ctx;
+}
+
+void ImGui::DestroyContext(ImGuiContext* ctx)
+{
+ ImGuiContext* prev_ctx = GetCurrentContext();
+ if (ctx == NULL) //-V1051
+ ctx = prev_ctx;
+ SetCurrentContext(ctx);
+ Shutdown();
+ SetCurrentContext((prev_ctx != ctx) ? prev_ctx : NULL);
+ IM_DELETE(ctx);
+}
+
+// No specific ordering/dependency support, will see as needed
+ImGuiID ImGui::AddContextHook(ImGuiContext* ctx, const ImGuiContextHook* hook)
+{
+ ImGuiContext& g = *ctx;
+ IM_ASSERT(hook->Callback != NULL && hook->HookId == 0 && hook->Type != ImGuiContextHookType_PendingRemoval_);
+ g.Hooks.push_back(*hook);
+ g.Hooks.back().HookId = ++g.HookIdNext;
+ return g.HookIdNext;
+}
+
+// Deferred removal, avoiding issue with changing vector while iterating it
+void ImGui::RemoveContextHook(ImGuiContext* ctx, ImGuiID hook_id)
+{
+ ImGuiContext& g = *ctx;
+ IM_ASSERT(hook_id != 0);
+ for (int n = 0; n < g.Hooks.Size; n++)
+ if (g.Hooks[n].HookId == hook_id)
+ g.Hooks[n].Type = ImGuiContextHookType_PendingRemoval_;
+}
+
+// Call context hooks (used by e.g. test engine)
+// We assume a small number of hooks so all stored in same array
+void ImGui::CallContextHooks(ImGuiContext* ctx, ImGuiContextHookType hook_type)
+{
+ ImGuiContext& g = *ctx;
+ for (int n = 0; n < g.Hooks.Size; n++)
+ if (g.Hooks[n].Type == hook_type)
+ g.Hooks[n].Callback(&g, &g.Hooks[n]);
+}
+
+ImGuiIO& ImGui::GetIO()
+{
+ IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
+ return GImGui->IO;
+}
+
+// Pass this to your backend rendering function! Valid after Render() and until the next call to NewFrame()
+ImDrawData* ImGui::GetDrawData()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiViewportP* viewport = g.Viewports[0];
+ return viewport->DrawDataP.Valid ? &viewport->DrawDataP : NULL;
+}
+
+double ImGui::GetTime()
+{
+ return GImGui->Time;
+}
+
+int ImGui::GetFrameCount()
+{
+ return GImGui->FrameCount;
+}
+
+static ImDrawList* GetViewportDrawList(ImGuiViewportP* viewport, size_t drawlist_no, const char* drawlist_name)
+{
+ // Create the draw list on demand, because they are not frequently used for all viewports
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(drawlist_no < IM_ARRAYSIZE(viewport->DrawLists));
+ ImDrawList* draw_list = viewport->DrawLists[drawlist_no];
+ if (draw_list == NULL)
+ {
+ draw_list = IM_NEW(ImDrawList)(&g.DrawListSharedData);
+ draw_list->_OwnerName = drawlist_name;
+ viewport->DrawLists[drawlist_no] = draw_list;
+ }
+
+ // Our ImDrawList system requires that there is always a command
+ if (viewport->DrawListsLastFrame[drawlist_no] != g.FrameCount)
+ {
+ draw_list->_ResetForNewFrame();
+ draw_list->PushTextureID(g.IO.Fonts->TexID);
+ draw_list->PushClipRect(viewport->Pos, viewport->Pos + viewport->Size, false);
+ viewport->DrawListsLastFrame[drawlist_no] = g.FrameCount;
+ }
+ return draw_list;
+}
+
+ImDrawList* ImGui::GetBackgroundDrawList(ImGuiViewport* viewport)
+{
+ return GetViewportDrawList((ImGuiViewportP*)viewport, 0, "##Background");
+}
+
+ImDrawList* ImGui::GetBackgroundDrawList()
+{
+ ImGuiContext& g = *GImGui;
+ return GetBackgroundDrawList(g.Viewports[0]);
+}
+
+ImDrawList* ImGui::GetForegroundDrawList(ImGuiViewport* viewport)
+{
+ return GetViewportDrawList((ImGuiViewportP*)viewport, 1, "##Foreground");
+}
+
+ImDrawList* ImGui::GetForegroundDrawList()
+{
+ ImGuiContext& g = *GImGui;
+ return GetForegroundDrawList(g.Viewports[0]);
+}
+
+ImDrawListSharedData* ImGui::GetDrawListSharedData()
+{
+ return &GImGui->DrawListSharedData;
+}
+
+void ImGui::StartMouseMovingWindow(ImGuiWindow* window)
+{
+ // Set ActiveId even if the _NoMove flag is set. Without it, dragging away from a window with _NoMove would activate hover on other windows.
+ // We _also_ call this when clicking in a window empty space when io.ConfigWindowsMoveFromTitleBarOnly is set, but clear g.MovingWindow afterward.
+ // This is because we want ActiveId to be set even when the window is not permitted to move.
+ ImGuiContext& g = *GImGui;
+ FocusWindow(window);
+ SetActiveID(window->MoveId, window);
+ g.NavDisableHighlight = true;
+ g.ActiveIdClickOffset = g.IO.MouseClickedPos[0] - window->RootWindow->Pos;
+ g.ActiveIdNoClearOnFocusLoss = true;
+ SetActiveIdUsingNavAndKeys();
+
+ bool can_move_window = true;
+ if ((window->Flags & ImGuiWindowFlags_NoMove) || (window->RootWindow->Flags & ImGuiWindowFlags_NoMove))
+ can_move_window = false;
+ if (can_move_window)
+ g.MovingWindow = window;
+}
+
+// Handle mouse moving window
+// Note: moving window with the navigation keys (Square + d-pad / CTRL+TAB + Arrows) are processed in NavUpdateWindowing()
+// FIXME: We don't have strong guarantee that g.MovingWindow stay synched with g.ActiveId == g.MovingWindow->MoveId.
+// This is currently enforced by the fact that BeginDragDropSource() is setting all g.ActiveIdUsingXXXX flags to inhibit navigation inputs,
+// but if we should more thoroughly test cases where g.ActiveId or g.MovingWindow gets changed and not the other.
+void ImGui::UpdateMouseMovingWindowNewFrame()
+{
+ ImGuiContext& g = *GImGui;
+ if (g.MovingWindow != NULL)
+ {
+ // We actually want to move the root window. g.MovingWindow == window we clicked on (could be a child window).
+ // We track it to preserve Focus and so that generally ActiveIdWindow == MovingWindow and ActiveId == MovingWindow->MoveId for consistency.
+ KeepAliveID(g.ActiveId);
+ IM_ASSERT(g.MovingWindow && g.MovingWindow->RootWindow);
+ ImGuiWindow* moving_window = g.MovingWindow->RootWindow;
+ if (g.IO.MouseDown[0] && IsMousePosValid(&g.IO.MousePos))
+ {
+ ImVec2 pos = g.IO.MousePos - g.ActiveIdClickOffset;
+ SetWindowPos(moving_window, pos, ImGuiCond_Always);
+ FocusWindow(g.MovingWindow);
+ }
+ else
+ {
+ g.MovingWindow = NULL;
+ ClearActiveID();
+ }
+ }
+ else
+ {
+ // When clicking/dragging from a window that has the _NoMove flag, we still set the ActiveId in order to prevent hovering others.
+ if (g.ActiveIdWindow && g.ActiveIdWindow->MoveId == g.ActiveId)
+ {
+ KeepAliveID(g.ActiveId);
+ if (!g.IO.MouseDown[0])
+ ClearActiveID();
+ }
+ }
+}
+
+// Initiate moving window when clicking on empty space or title bar.
+// Handle left-click and right-click focus.
+void ImGui::UpdateMouseMovingWindowEndFrame()
+{
+ ImGuiContext& g = *GImGui;
+ if (g.ActiveId != 0 || g.HoveredId != 0)
+ return;
+
+ // Unless we just made a window/popup appear
+ if (g.NavWindow && g.NavWindow->Appearing)
+ return;
+
+ // Click on empty space to focus window and start moving
+ // (after we're done with all our widgets)
+ if (g.IO.MouseClicked[0])
+ {
+ // Handle the edge case of a popup being closed while clicking in its empty space.
+ // If we try to focus it, FocusWindow() > ClosePopupsOverWindow() will accidentally close any parent popups because they are not linked together any more.
+ ImGuiWindow* root_window = g.HoveredWindow ? g.HoveredWindow->RootWindow : NULL;
+ const bool is_closed_popup = root_window && (root_window->Flags & ImGuiWindowFlags_Popup) && !IsPopupOpen(root_window->PopupId, ImGuiPopupFlags_AnyPopupLevel);
+
+ if (root_window != NULL && !is_closed_popup)
+ {
+ StartMouseMovingWindow(g.HoveredWindow); //-V595
+
+ // Cancel moving if clicked outside of title bar
+ if (g.IO.ConfigWindowsMoveFromTitleBarOnly && !(root_window->Flags & ImGuiWindowFlags_NoTitleBar))
+ if (!root_window->TitleBarRect().Contains(g.IO.MouseClickedPos[0]))
+ g.MovingWindow = NULL;
+
+ // Cancel moving if clicked over an item which was disabled or inhibited by popups (note that we know HoveredId == 0 already)
+ if (g.HoveredIdDisabled)
+ g.MovingWindow = NULL;
+ }
+ else if (root_window == NULL && g.NavWindow != NULL && GetTopMostPopupModal() == NULL)
+ {
+ // Clicking on void disable focus
+ FocusWindow(NULL);
+ }
+ }
+
+ // With right mouse button we close popups without changing focus based on where the mouse is aimed
+ // Instead, focus will be restored to the window under the bottom-most closed popup.
+ // (The left mouse button path calls FocusWindow on the hovered window, which will lead NewFrame->ClosePopupsOverWindow to trigger)
+ if (g.IO.MouseClicked[1])
+ {
+ // Find the top-most window between HoveredWindow and the top-most Modal Window.
+ // This is where we can trim the popup stack.
+ ImGuiWindow* modal = GetTopMostPopupModal();
+ bool hovered_window_above_modal = g.HoveredWindow && (modal == NULL || IsWindowAbove(g.HoveredWindow, modal));
+ ClosePopupsOverWindow(hovered_window_above_modal ? g.HoveredWindow : modal, true);
+ }
+}
+
+static bool IsWindowActiveAndVisible(ImGuiWindow* window)
+{
+ return (window->Active) && (!window->Hidden);
+}
+
+static void ImGui::UpdateKeyboardInputs()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiIO& io = g.IO;
+
+ // Import legacy keys or verify they are not used
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+ if (io.BackendUsingLegacyKeyArrays == 0)
+ {
+ // Backend used new io.AddKeyEvent() API: Good! Verify that old arrays are never written to externally.
+ for (int n = 0; n < ImGuiKey_LegacyNativeKey_END; n++)
+ IM_ASSERT((io.KeysDown[n] == false || IsKeyDown(n)) && "Backend needs to either only use io.AddKeyEvent(), either only fill legacy io.KeysDown[] + io.KeyMap[]. Not both!");
+ }
+ else
+ {
+ if (g.FrameCount == 0)
+ for (int n = ImGuiKey_LegacyNativeKey_BEGIN; n < ImGuiKey_LegacyNativeKey_END; n++)
+ IM_ASSERT(g.IO.KeyMap[n] == -1 && "Backend is not allowed to write to io.KeyMap[0..511]!");
+
+ // Build reverse KeyMap (Named -> Legacy)
+ for (int n = ImGuiKey_NamedKey_BEGIN; n < ImGuiKey_NamedKey_END; n++)
+ if (io.KeyMap[n] != -1)
+ {
+ IM_ASSERT(IsLegacyKey((ImGuiKey)io.KeyMap[n]));
+ io.KeyMap[io.KeyMap[n]] = n;
+ }
+
+ // Import legacy keys into new ones
+ for (int n = ImGuiKey_LegacyNativeKey_BEGIN; n < ImGuiKey_LegacyNativeKey_END; n++)
+ if (io.KeysDown[n] || io.BackendUsingLegacyKeyArrays == 1)
+ {
+ const ImGuiKey key = (ImGuiKey)(io.KeyMap[n] != -1 ? io.KeyMap[n] : n);
+ IM_ASSERT(io.KeyMap[n] == -1 || IsNamedKey(key));
+ io.KeysData[key].Down = io.KeysDown[n];
+ if (key != n)
+ io.KeysDown[key] = io.KeysDown[n]; // Allow legacy code using io.KeysDown[GetKeyIndex()] with old backends
+ io.BackendUsingLegacyKeyArrays = 1;
+ }
+ if (io.BackendUsingLegacyKeyArrays == 1)
+ {
+ io.KeysData[ImGuiKey_ModCtrl].Down = io.KeyCtrl;
+ io.KeysData[ImGuiKey_ModShift].Down = io.KeyShift;
+ io.KeysData[ImGuiKey_ModAlt].Down = io.KeyAlt;
+ io.KeysData[ImGuiKey_ModSuper].Down = io.KeySuper;
+ }
+ }
+#endif
+
+ // Synchronize io.KeyMods with individual modifiers io.KeyXXX bools
+ io.KeyMods = GetMergedModFlags();
+
+ // Clear gamepad data if disabled
+ if ((io.BackendFlags & ImGuiBackendFlags_HasGamepad) == 0)
+ for (int i = ImGuiKey_Gamepad_BEGIN; i < ImGuiKey_Gamepad_END; i++)
+ {
+ io.KeysData[i - ImGuiKey_KeysData_OFFSET].Down = false;
+ io.KeysData[i - ImGuiKey_KeysData_OFFSET].AnalogValue = 0.0f;
+ }
+
+ // Update keys
+ for (int i = 0; i < IM_ARRAYSIZE(io.KeysData); i++)
+ {
+ ImGuiKeyData* key_data = &io.KeysData[i];
+ key_data->DownDurationPrev = key_data->DownDuration;
+ key_data->DownDuration = key_data->Down ? (key_data->DownDuration < 0.0f ? 0.0f : key_data->DownDuration + io.DeltaTime) : -1.0f;
+ }
+}
+
+static void ImGui::UpdateMouseInputs()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiIO& io = g.IO;
+
+ // Round mouse position to avoid spreading non-rounded position (e.g. UpdateManualResize doesn't support them well)
+ if (IsMousePosValid(&io.MousePos))
+ io.MousePos = g.MouseLastValidPos = ImFloorSigned(io.MousePos);
+
+ // If mouse just appeared or disappeared (usually denoted by -FLT_MAX components) we cancel out movement in MouseDelta
+ if (IsMousePosValid(&io.MousePos) && IsMousePosValid(&io.MousePosPrev))
+ io.MouseDelta = io.MousePos - io.MousePosPrev;
+ else
+ io.MouseDelta = ImVec2(0.0f, 0.0f);
+
+ // If mouse moved we re-enable mouse hovering in case it was disabled by gamepad/keyboard. In theory should use a >0.0f threshold but would need to reset in everywhere we set this to true.
+ if (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f)
+ g.NavDisableMouseHover = false;
+
+ io.MousePosPrev = io.MousePos;
+ for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++)
+ {
+ io.MouseClicked[i] = io.MouseDown[i] && io.MouseDownDuration[i] < 0.0f;
+ io.MouseClickedCount[i] = 0; // Will be filled below
+ io.MouseReleased[i] = !io.MouseDown[i] && io.MouseDownDuration[i] >= 0.0f;
+ io.MouseDownDurationPrev[i] = io.MouseDownDuration[i];
+ io.MouseDownDuration[i] = io.MouseDown[i] ? (io.MouseDownDuration[i] < 0.0f ? 0.0f : io.MouseDownDuration[i] + io.DeltaTime) : -1.0f;
+ if (io.MouseClicked[i])
+ {
+ bool is_repeated_click = false;
+ if ((float)(g.Time - io.MouseClickedTime[i]) < io.MouseDoubleClickTime)
+ {
+ ImVec2 delta_from_click_pos = IsMousePosValid(&io.MousePos) ? (io.MousePos - io.MouseClickedPos[i]) : ImVec2(0.0f, 0.0f);
+ if (ImLengthSqr(delta_from_click_pos) < io.MouseDoubleClickMaxDist * io.MouseDoubleClickMaxDist)
+ is_repeated_click = true;
+ }
+ if (is_repeated_click)
+ io.MouseClickedLastCount[i]++;
+ else
+ io.MouseClickedLastCount[i] = 1;
+ io.MouseClickedTime[i] = g.Time;
+ io.MouseClickedPos[i] = io.MousePos;
+ io.MouseClickedCount[i] = io.MouseClickedLastCount[i];
+ io.MouseDragMaxDistanceSqr[i] = 0.0f;
+ }
+ else if (io.MouseDown[i])
+ {
+ // Maintain the maximum distance we reaching from the initial click position, which is used with dragging threshold
+ float delta_sqr_click_pos = IsMousePosValid(&io.MousePos) ? ImLengthSqr(io.MousePos - io.MouseClickedPos[i]) : 0.0f;
+ io.MouseDragMaxDistanceSqr[i] = ImMax(io.MouseDragMaxDistanceSqr[i], delta_sqr_click_pos);
+ }
+
+ // We provide io.MouseDoubleClicked[] as a legacy service
+ io.MouseDoubleClicked[i] = (io.MouseClickedCount[i] == 2);
+
+ // Clicking any mouse button reactivate mouse hovering which may have been deactivated by gamepad/keyboard navigation
+ if (io.MouseClicked[i])
+ g.NavDisableMouseHover = false;
+ }
+}
+
+static void StartLockWheelingWindow(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.WheelingWindow == window)
+ return;
+ g.WheelingWindow = window;
+ g.WheelingWindowRefMousePos = g.IO.MousePos;
+ g.WheelingWindowTimer = WINDOWS_MOUSE_WHEEL_SCROLL_LOCK_TIMER;
+}
+
+void ImGui::UpdateMouseWheel()
+{
+ ImGuiContext& g = *GImGui;
+
+ // Reset the locked window if we move the mouse or after the timer elapses
+ if (g.WheelingWindow != NULL)
+ {
+ g.WheelingWindowTimer -= g.IO.DeltaTime;
+ if (IsMousePosValid() && ImLengthSqr(g.IO.MousePos - g.WheelingWindowRefMousePos) > g.IO.MouseDragThreshold * g.IO.MouseDragThreshold)
+ g.WheelingWindowTimer = 0.0f;
+ if (g.WheelingWindowTimer <= 0.0f)
+ {
+ g.WheelingWindow = NULL;
+ g.WheelingWindowTimer = 0.0f;
+ }
+ }
+
+ float wheel_x = g.IO.MouseWheelH;
+ float wheel_y = g.IO.MouseWheel;
+ if (wheel_x == 0.0f && wheel_y == 0.0f)
+ return;
+
+ if ((g.ActiveId != 0 && g.ActiveIdUsingMouseWheel) || (g.HoveredIdPreviousFrame != 0 && g.HoveredIdPreviousFrameUsingMouseWheel))
+ return;
+
+ ImGuiWindow* window = g.WheelingWindow ? g.WheelingWindow : g.HoveredWindow;
+ if (!window || window->Collapsed)
+ return;
+
+ // Zoom / Scale window
+ // FIXME-OBSOLETE: This is an old feature, it still works but pretty much nobody is using it and may be best redesigned.
+ if (wheel_y != 0.0f && g.IO.KeyCtrl && g.IO.FontAllowUserScaling)
+ {
+ StartLockWheelingWindow(window);
+ const float new_font_scale = ImClamp(window->FontWindowScale + g.IO.MouseWheel * 0.10f, 0.50f, 2.50f);
+ const float scale = new_font_scale / window->FontWindowScale;
+ window->FontWindowScale = new_font_scale;
+ if (window == window->RootWindow)
+ {
+ const ImVec2 offset = window->Size * (1.0f - scale) * (g.IO.MousePos - window->Pos) / window->Size;
+ SetWindowPos(window, window->Pos + offset, 0);
+ window->Size = ImFloor(window->Size * scale);
+ window->SizeFull = ImFloor(window->SizeFull * scale);
+ }
+ return;
+ }
+
+ // Mouse wheel scrolling
+ // If a child window has the ImGuiWindowFlags_NoScrollWithMouse flag, we give a chance to scroll its parent
+ if (g.IO.KeyCtrl)
+ return;
+
+ // As a standard behavior holding SHIFT while using Vertical Mouse Wheel triggers Horizontal scroll instead
+ // (we avoid doing it on OSX as it the OS input layer handles this already)
+ const bool swap_axis = g.IO.KeyShift && !g.IO.ConfigMacOSXBehaviors;
+ if (swap_axis)
+ {
+ wheel_x = wheel_y;
+ wheel_y = 0.0f;
+ }
+
+ // Vertical Mouse Wheel scrolling
+ if (wheel_y != 0.0f)
+ {
+ StartLockWheelingWindow(window);
+ while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.y == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))))
+ window = window->ParentWindow;
+ if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))
+ {
+ float max_step = window->InnerRect.GetHeight() * 0.67f;
+ float scroll_step = ImFloor(ImMin(5 * window->CalcFontSize(), max_step));
+ SetScrollY(window, window->Scroll.y - wheel_y * scroll_step);
+ }
+ }
+
+ // Horizontal Mouse Wheel scrolling, or Vertical Mouse Wheel w/ Shift held
+ if (wheel_x != 0.0f)
+ {
+ StartLockWheelingWindow(window);
+ while ((window->Flags & ImGuiWindowFlags_ChildWindow) && ((window->ScrollMax.x == 0.0f) || ((window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))))
+ window = window->ParentWindow;
+ if (!(window->Flags & ImGuiWindowFlags_NoScrollWithMouse) && !(window->Flags & ImGuiWindowFlags_NoMouseInputs))
+ {
+ float max_step = window->InnerRect.GetWidth() * 0.67f;
+ float scroll_step = ImFloor(ImMin(2 * window->CalcFontSize(), max_step));
+ SetScrollX(window, window->Scroll.x - wheel_x * scroll_step);
+ }
+ }
+}
+
+// The reason this is exposed in imgui_internal.h is: on touch-based system that don't have hovering, we want to dispatch inputs to the right target (imgui vs imgui+app)
+void ImGui::UpdateHoveredWindowAndCaptureFlags()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiIO& io = g.IO;
+ g.WindowsHoverPadding = ImMax(g.Style.TouchExtraPadding, ImVec2(WINDOWS_HOVER_PADDING, WINDOWS_HOVER_PADDING));
+
+ // Find the window hovered by mouse:
+ // - Child windows can extend beyond the limit of their parent so we need to derive HoveredRootWindow from HoveredWindow.
+ // - When moving a window we can skip the search, which also conveniently bypasses the fact that window->WindowRectClipped is lagging as this point of the frame.
+ // - We also support the moved window toggling the NoInputs flag after moving has started in order to be able to detect windows below it, which is useful for e.g. docking mechanisms.
+ bool clear_hovered_windows = false;
+ FindHoveredWindow();
+
+ // Modal windows prevents mouse from hovering behind them.
+ ImGuiWindow* modal_window = GetTopMostPopupModal();
+ if (modal_window && g.HoveredWindow && !IsWindowWithinBeginStackOf(g.HoveredWindow->RootWindow, modal_window))
+ clear_hovered_windows = true;
+
+ // Disabled mouse?
+ if (io.ConfigFlags & ImGuiConfigFlags_NoMouse)
+ clear_hovered_windows = true;
+
+ // We track click ownership. When clicked outside of a window the click is owned by the application and
+ // won't report hovering nor request capture even while dragging over our windows afterward.
+ const bool has_open_popup = (g.OpenPopupStack.Size > 0);
+ const bool has_open_modal = (modal_window != NULL);
+ int mouse_earliest_down = -1;
+ bool mouse_any_down = false;
+ for (int i = 0; i < IM_ARRAYSIZE(io.MouseDown); i++)
+ {
+ if (io.MouseClicked[i])
+ {
+ io.MouseDownOwned[i] = (g.HoveredWindow != NULL) || has_open_popup;
+ io.MouseDownOwnedUnlessPopupClose[i] = (g.HoveredWindow != NULL) || has_open_modal;
+ }
+ mouse_any_down |= io.MouseDown[i];
+ if (io.MouseDown[i])
+ if (mouse_earliest_down == -1 || io.MouseClickedTime[i] < io.MouseClickedTime[mouse_earliest_down])
+ mouse_earliest_down = i;
+ }
+ const bool mouse_avail = (mouse_earliest_down == -1) || io.MouseDownOwned[mouse_earliest_down];
+ const bool mouse_avail_unless_popup_close = (mouse_earliest_down == -1) || io.MouseDownOwnedUnlessPopupClose[mouse_earliest_down];
+
+ // If mouse was first clicked outside of ImGui bounds we also cancel out hovering.
+ // FIXME: For patterns of drag and drop across OS windows, we may need to rework/remove this test (first committed 311c0ca9 on 2015/02)
+ const bool mouse_dragging_extern_payload = g.DragDropActive && (g.DragDropSourceFlags & ImGuiDragDropFlags_SourceExtern) != 0;
+ if (!mouse_avail && !mouse_dragging_extern_payload)
+ clear_hovered_windows = true;
+
+ if (clear_hovered_windows)
+ g.HoveredWindow = g.HoveredWindowUnderMovingWindow = NULL;
+
+ // Update io.WantCaptureMouse for the user application (true = dispatch mouse info to Dear ImGui only, false = dispatch mouse to Dear ImGui + underlying app)
+ // Update io.WantCaptureMouseAllowPopupClose (experimental) to give a chance for app to react to popup closure with a drag
+ if (g.WantCaptureMouseNextFrame != -1)
+ {
+ io.WantCaptureMouse = io.WantCaptureMouseUnlessPopupClose = (g.WantCaptureMouseNextFrame != 0);
+ }
+ else
+ {
+ io.WantCaptureMouse = (mouse_avail && (g.HoveredWindow != NULL || mouse_any_down)) || has_open_popup;
+ io.WantCaptureMouseUnlessPopupClose = (mouse_avail_unless_popup_close && (g.HoveredWindow != NULL || mouse_any_down)) || has_open_modal;
+ }
+
+ // Update io.WantCaptureKeyboard for the user application (true = dispatch keyboard info to Dear ImGui only, false = dispatch keyboard info to Dear ImGui + underlying app)
+ if (g.WantCaptureKeyboardNextFrame != -1)
+ io.WantCaptureKeyboard = (g.WantCaptureKeyboardNextFrame != 0);
+ else
+ io.WantCaptureKeyboard = (g.ActiveId != 0) || (modal_window != NULL);
+ if (io.NavActive && (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) && !(io.ConfigFlags & ImGuiConfigFlags_NavNoCaptureKeyboard))
+ io.WantCaptureKeyboard = true;
+
+ // Update io.WantTextInput flag, this is to allow systems without a keyboard (e.g. mobile, hand-held) to show a software keyboard if possible
+ io.WantTextInput = (g.WantTextInputNextFrame != -1) ? (g.WantTextInputNextFrame != 0) : false;
+}
+
+// [Internal] Do not use directly (can read io.KeyMods instead)
+ImGuiModFlags ImGui::GetMergedModFlags()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiModFlags key_mods = ImGuiModFlags_None;
+ if (g.IO.KeyCtrl) { key_mods |= ImGuiModFlags_Ctrl; }
+ if (g.IO.KeyShift) { key_mods |= ImGuiModFlags_Shift; }
+ if (g.IO.KeyAlt) { key_mods |= ImGuiModFlags_Alt; }
+ if (g.IO.KeySuper) { key_mods |= ImGuiModFlags_Super; }
+ return key_mods;
+}
+
+void ImGui::NewFrame()
+{
+ IM_ASSERT(GImGui != NULL && "No current context. Did you call ImGui::CreateContext() and ImGui::SetCurrentContext() ?");
+ ImGuiContext& g = *GImGui;
+
+ // Remove pending delete hooks before frame start.
+ // This deferred removal avoid issues of removal while iterating the hook vector
+ for (int n = g.Hooks.Size - 1; n >= 0; n--)
+ if (g.Hooks[n].Type == ImGuiContextHookType_PendingRemoval_)
+ g.Hooks.erase(&g.Hooks[n]);
+
+ CallContextHooks(&g, ImGuiContextHookType_NewFramePre);
+
+ // Check and assert for various common IO and Configuration mistakes
+ ErrorCheckNewFrameSanityChecks();
+
+ // Load settings on first frame, save settings when modified (after a delay)
+ UpdateSettings();
+
+ g.Time += g.IO.DeltaTime;
+ g.WithinFrameScope = true;
+ g.FrameCount += 1;
+ g.TooltipOverrideCount = 0;
+ g.WindowsActiveCount = 0;
+ g.MenusIdSubmittedThisFrame.resize(0);
+
+ // Calculate frame-rate for the user, as a purely luxurious feature
+ g.FramerateSecPerFrameAccum += g.IO.DeltaTime - g.FramerateSecPerFrame[g.FramerateSecPerFrameIdx];
+ g.FramerateSecPerFrame[g.FramerateSecPerFrameIdx] = g.IO.DeltaTime;
+ g.FramerateSecPerFrameIdx = (g.FramerateSecPerFrameIdx + 1) % IM_ARRAYSIZE(g.FramerateSecPerFrame);
+ g.FramerateSecPerFrameCount = ImMin(g.FramerateSecPerFrameCount + 1, IM_ARRAYSIZE(g.FramerateSecPerFrame));
+ g.IO.Framerate = (g.FramerateSecPerFrameAccum > 0.0f) ? (1.0f / (g.FramerateSecPerFrameAccum / (float)g.FramerateSecPerFrameCount)) : FLT_MAX;
+
+ UpdateViewportsNewFrame();
+
+ // Setup current font and draw list shared data
+ g.IO.Fonts->Locked = true;
+ SetCurrentFont(GetDefaultFont());
+ IM_ASSERT(g.Font->IsLoaded());
+ ImRect virtual_space(FLT_MAX, FLT_MAX, -FLT_MAX, -FLT_MAX);
+ for (int n = 0; n < g.Viewports.Size; n++)
+ virtual_space.Add(g.Viewports[n]->GetMainRect());
+ g.DrawListSharedData.ClipRectFullscreen = virtual_space.ToVec4();
+ g.DrawListSharedData.CurveTessellationTol = g.Style.CurveTessellationTol;
+ g.DrawListSharedData.SetCircleTessellationMaxError(g.Style.CircleTessellationMaxError);
+ g.DrawListSharedData.InitialFlags = ImDrawListFlags_None;
+ if (g.Style.AntiAliasedLines)
+ g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AntiAliasedLines;
+ if (g.Style.AntiAliasedLinesUseTex && !(g.Font->ContainerAtlas->Flags & ImFontAtlasFlags_NoBakedLines))
+ g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AntiAliasedLinesUseTex;
+ if (g.Style.AntiAliasedFill)
+ g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AntiAliasedFill;
+ if (g.IO.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset)
+ g.DrawListSharedData.InitialFlags |= ImDrawListFlags_AllowVtxOffset;
+
+ // Mark rendering data as invalid to prevent user who may have a handle on it to use it.
+ for (int n = 0; n < g.Viewports.Size; n++)
+ {
+ ImGuiViewportP* viewport = g.Viewports[n];
+ viewport->DrawDataP.Clear();
+ }
+
+ // Drag and drop keep the source ID alive so even if the source disappear our state is consistent
+ if (g.DragDropActive && g.DragDropPayload.SourceId == g.ActiveId)
+ KeepAliveID(g.DragDropPayload.SourceId);
+
+ // Update HoveredId data
+ if (!g.HoveredIdPreviousFrame)
+ g.HoveredIdTimer = 0.0f;
+ if (!g.HoveredIdPreviousFrame || (g.HoveredId && g.ActiveId == g.HoveredId))
+ g.HoveredIdNotActiveTimer = 0.0f;
+ if (g.HoveredId)
+ g.HoveredIdTimer += g.IO.DeltaTime;
+ if (g.HoveredId && g.ActiveId != g.HoveredId)
+ g.HoveredIdNotActiveTimer += g.IO.DeltaTime;
+ g.HoveredIdPreviousFrame = g.HoveredId;
+ g.HoveredIdPreviousFrameUsingMouseWheel = g.HoveredIdUsingMouseWheel;
+ g.HoveredId = 0;
+ g.HoveredIdAllowOverlap = false;
+ g.HoveredIdUsingMouseWheel = false;
+ g.HoveredIdDisabled = false;
+
+ // Clear ActiveID if the item is not alive anymore.
+ // In 1.87, the common most call to KeepAliveID() was moved from GetID() to ItemAdd().
+ // As a result, custom widget using ButtonBehavior() _without_ ItemAdd() need to call KeepAliveID() themselves.
+ if (g.ActiveId != 0 && g.ActiveIdIsAlive != g.ActiveId && g.ActiveIdPreviousFrame == g.ActiveId)
+ {
+ IMGUI_DEBUG_LOG_ACTIVEID("NewFrame(): ClearActiveID() because it isn't marked alive anymore!\n");
+ ClearActiveID();
+ }
+
+ // Update ActiveId data (clear reference to active widget if the widget isn't alive anymore)
+ if (g.ActiveId)
+ g.ActiveIdTimer += g.IO.DeltaTime;
+ g.LastActiveIdTimer += g.IO.DeltaTime;
+ g.ActiveIdPreviousFrame = g.ActiveId;
+ g.ActiveIdPreviousFrameWindow = g.ActiveIdWindow;
+ g.ActiveIdPreviousFrameHasBeenEditedBefore = g.ActiveIdHasBeenEditedBefore;
+ g.ActiveIdIsAlive = 0;
+ g.ActiveIdHasBeenEditedThisFrame = false;
+ g.ActiveIdPreviousFrameIsAlive = false;
+ g.ActiveIdIsJustActivated = false;
+ if (g.TempInputId != 0 && g.ActiveId != g.TempInputId)
+ g.TempInputId = 0;
+ if (g.ActiveId == 0)
+ {
+ g.ActiveIdUsingNavDirMask = 0x00;
+ g.ActiveIdUsingNavInputMask = 0x00;
+ g.ActiveIdUsingKeyInputMask.ClearAllBits();
+ }
+
+ // Drag and drop
+ g.DragDropAcceptIdPrev = g.DragDropAcceptIdCurr;
+ g.DragDropAcceptIdCurr = 0;
+ g.DragDropAcceptIdCurrRectSurface = FLT_MAX;
+ g.DragDropWithinSource = false;
+ g.DragDropWithinTarget = false;
+ g.DragDropHoldJustPressedId = 0;
+
+ // Close popups on focus lost (currently wip/opt-in)
+ //if (g.IO.AppFocusLost)
+ // ClosePopupsExceptModals();
+
+ // Process input queue (trickle as many events as possible)
+ g.InputEventsTrail.resize(0);
+ UpdateInputEvents(g.IO.ConfigInputTrickleEventQueue);
+
+ // Update keyboard input state
+ UpdateKeyboardInputs();
+
+ //IM_ASSERT(g.IO.KeyCtrl == IsKeyDown(ImGuiKey_LeftCtrl) || IsKeyDown(ImGuiKey_RightCtrl));
+ //IM_ASSERT(g.IO.KeyShift == IsKeyDown(ImGuiKey_LeftShift) || IsKeyDown(ImGuiKey_RightShift));
+ //IM_ASSERT(g.IO.KeyAlt == IsKeyDown(ImGuiKey_LeftAlt) || IsKeyDown(ImGuiKey_RightAlt));
+ //IM_ASSERT(g.IO.KeySuper == IsKeyDown(ImGuiKey_LeftSuper) || IsKeyDown(ImGuiKey_RightSuper));
+
+ // Update gamepad/keyboard navigation
+ NavUpdate();
+
+ // Update mouse input state
+ UpdateMouseInputs();
+
+ // Find hovered window
+ // (needs to be before UpdateMouseMovingWindowNewFrame so we fill g.HoveredWindowUnderMovingWindow on the mouse release frame)
+ UpdateHoveredWindowAndCaptureFlags();
+
+ // Handle user moving window with mouse (at the beginning of the frame to avoid input lag or sheering)
+ UpdateMouseMovingWindowNewFrame();
+
+ // Background darkening/whitening
+ if (GetTopMostPopupModal() != NULL || (g.NavWindowingTarget != NULL && g.NavWindowingHighlightAlpha > 0.0f))
+ g.DimBgRatio = ImMin(g.DimBgRatio + g.IO.DeltaTime * 6.0f, 1.0f);
+ else
+ g.DimBgRatio = ImMax(g.DimBgRatio - g.IO.DeltaTime * 10.0f, 0.0f);
+
+ g.MouseCursor = ImGuiMouseCursor_Arrow;
+ g.WantCaptureMouseNextFrame = g.WantCaptureKeyboardNextFrame = g.WantTextInputNextFrame = -1;
+
+ // Platform IME data: reset for the frame
+ g.PlatformImeDataPrev = g.PlatformImeData;
+ g.PlatformImeData.WantVisible = false;
+
+ // Mouse wheel scrolling, scale
+ UpdateMouseWheel();
+
+ // Mark all windows as not visible and compact unused memory.
+ IM_ASSERT(g.WindowsFocusOrder.Size <= g.Windows.Size);
+ const float memory_compact_start_time = (g.GcCompactAll || g.IO.ConfigMemoryCompactTimer < 0.0f) ? FLT_MAX : (float)g.Time - g.IO.ConfigMemoryCompactTimer;
+ for (int i = 0; i != g.Windows.Size; i++)
+ {
+ ImGuiWindow* window = g.Windows[i];
+ window->WasActive = window->Active;
+ window->BeginCount = 0;
+ window->Active = false;
+ window->WriteAccessed = false;
+
+ // Garbage collect transient buffers of recently unused windows
+ if (!window->WasActive && !window->MemoryCompacted && window->LastTimeActive < memory_compact_start_time)
+ GcCompactTransientWindowBuffers(window);
+ }
+
+ // Garbage collect transient buffers of recently unused tables
+ for (int i = 0; i < g.TablesLastTimeActive.Size; i++)
+ if (g.TablesLastTimeActive[i] >= 0.0f && g.TablesLastTimeActive[i] < memory_compact_start_time)
+ TableGcCompactTransientBuffers(g.Tables.GetByIndex(i));
+ for (int i = 0; i < g.TablesTempData.Size; i++)
+ if (g.TablesTempData[i].LastTimeActive >= 0.0f && g.TablesTempData[i].LastTimeActive < memory_compact_start_time)
+ TableGcCompactTransientBuffers(&g.TablesTempData[i]);
+ if (g.GcCompactAll)
+ GcCompactTransientMiscBuffers();
+ g.GcCompactAll = false;
+
+ // Closing the focused window restore focus to the first active root window in descending z-order
+ if (g.NavWindow && !g.NavWindow->WasActive)
+ FocusTopMostWindowUnderOne(NULL, NULL);
+
+ // No window should be open at the beginning of the frame.
+ // But in order to allow the user to call NewFrame() multiple times without calling Render(), we are doing an explicit clear.
+ g.CurrentWindowStack.resize(0);
+ g.BeginPopupStack.resize(0);
+ g.ItemFlagsStack.resize(0);
+ g.ItemFlagsStack.push_back(ImGuiItemFlags_None);
+ g.GroupStack.resize(0);
+
+ // [DEBUG] Update debug features
+ UpdateDebugToolItemPicker();
+ UpdateDebugToolStackQueries();
+
+ // Create implicit/fallback window - which we will only render it if the user has added something to it.
+ // We don't use "Debug" to avoid colliding with user trying to create a "Debug" window with custom flags.
+ // This fallback is particularly important as it avoid ImGui:: calls from crashing.
+ g.WithinFrameScopeWithImplicitWindow = true;
+ SetNextWindowSize(ImVec2(400, 400), ImGuiCond_FirstUseEver);
+ Begin("Debug##Default");
+ IM_ASSERT(g.CurrentWindow->IsFallbackWindow == true);
+
+ CallContextHooks(&g, ImGuiContextHookType_NewFramePost);
+}
+
+void ImGui::Initialize()
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(!g.Initialized && !g.SettingsLoaded);
+
+ // Add .ini handle for ImGuiWindow type
+ {
+ ImGuiSettingsHandler ini_handler;
+ ini_handler.TypeName = "Window";
+ ini_handler.TypeHash = ImHashStr("Window");
+ ini_handler.ClearAllFn = WindowSettingsHandler_ClearAll;
+ ini_handler.ReadOpenFn = WindowSettingsHandler_ReadOpen;
+ ini_handler.ReadLineFn = WindowSettingsHandler_ReadLine;
+ ini_handler.ApplyAllFn = WindowSettingsHandler_ApplyAll;
+ ini_handler.WriteAllFn = WindowSettingsHandler_WriteAll;
+ AddSettingsHandler(&ini_handler);
+ }
+
+ // Add .ini handle for ImGuiTable type
+ TableSettingsAddSettingsHandler();
+
+ // Create default viewport
+ ImGuiViewportP* viewport = IM_NEW(ImGuiViewportP)();
+ g.Viewports.push_back(viewport);
+ g.TempBuffer.resize(1024 * 3 + 1, 0);
+
+#ifdef IMGUI_HAS_DOCK
+#endif
+
+ g.Initialized = true;
+}
+
+// This function is merely here to free heap allocations.
+void ImGui::Shutdown()
+{
+ // The fonts atlas can be used prior to calling NewFrame(), so we clear it even if g.Initialized is FALSE (which would happen if we never called NewFrame)
+ ImGuiContext& g = *GImGui;
+ if (g.IO.Fonts && g.FontAtlasOwnedByContext)
+ {
+ g.IO.Fonts->Locked = false;
+ IM_DELETE(g.IO.Fonts);
+ }
+ g.IO.Fonts = NULL;
+
+ // Cleanup of other data are conditional on actually having initialized Dear ImGui.
+ if (!g.Initialized)
+ return;
+
+ // Save settings (unless we haven't attempted to load them: CreateContext/DestroyContext without a call to NewFrame shouldn't save an empty file)
+ if (g.SettingsLoaded && g.IO.IniFilename != NULL)
+ SaveIniSettingsToDisk(g.IO.IniFilename);
+
+ CallContextHooks(&g, ImGuiContextHookType_Shutdown);
+
+ // Clear everything else
+ g.Windows.clear_delete();
+ g.WindowsFocusOrder.clear();
+ g.WindowsTempSortBuffer.clear();
+ g.CurrentWindow = NULL;
+ g.CurrentWindowStack.clear();
+ g.WindowsById.Clear();
+ g.NavWindow = NULL;
+ g.HoveredWindow = g.HoveredWindowUnderMovingWindow = NULL;
+ g.ActiveIdWindow = g.ActiveIdPreviousFrameWindow = NULL;
+ g.MovingWindow = NULL;
+ g.ColorStack.clear();
+ g.StyleVarStack.clear();
+ g.FontStack.clear();
+ g.OpenPopupStack.clear();
+ g.BeginPopupStack.clear();
+
+ g.Viewports.clear_delete();
+
+ g.TabBars.Clear();
+ g.CurrentTabBarStack.clear();
+ g.ShrinkWidthBuffer.clear();
+
+ g.ClipperTempData.clear_destruct();
+
+ g.Tables.Clear();
+ g.TablesTempData.clear_destruct();
+ g.DrawChannelsTempMergeBuffer.clear();
+
+ g.ClipboardHandlerData.clear();
+ g.MenusIdSubmittedThisFrame.clear();
+ g.InputTextState.ClearFreeMemory();
+
+ g.SettingsWindows.clear();
+ g.SettingsHandlers.clear();
+
+ if (g.LogFile)
+ {
+#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
+ if (g.LogFile != stdout)
+#endif
+ ImFileClose(g.LogFile);
+ g.LogFile = NULL;
+ }
+ g.LogBuffer.clear();
+ g.DebugLogBuf.clear();
+
+ g.Initialized = false;
+}
+
+// FIXME: Add a more explicit sort order in the window structure.
+static int IMGUI_CDECL ChildWindowComparer(const void* lhs, const void* rhs)
+{
+ const ImGuiWindow* const a = *(const ImGuiWindow* const *)lhs;
+ const ImGuiWindow* const b = *(const ImGuiWindow* const *)rhs;
+ if (int d = (a->Flags & ImGuiWindowFlags_Popup) - (b->Flags & ImGuiWindowFlags_Popup))
+ return d;
+ if (int d = (a->Flags & ImGuiWindowFlags_Tooltip) - (b->Flags & ImGuiWindowFlags_Tooltip))
+ return d;
+ return (a->BeginOrderWithinParent - b->BeginOrderWithinParent);
+}
+
+static void AddWindowToSortBuffer(ImVector<ImGuiWindow*>* out_sorted_windows, ImGuiWindow* window)
+{
+ out_sorted_windows->push_back(window);
+ if (window->Active)
+ {
+ int count = window->DC.ChildWindows.Size;
+ ImQsort(window->DC.ChildWindows.Data, (size_t)count, sizeof(ImGuiWindow*), ChildWindowComparer);
+ for (int i = 0; i < count; i++)
+ {
+ ImGuiWindow* child = window->DC.ChildWindows[i];
+ if (child->Active)
+ AddWindowToSortBuffer(out_sorted_windows, child);
+ }
+ }
+}
+
+static void AddDrawListToDrawData(ImVector<ImDrawList*>* out_list, ImDrawList* draw_list)
+{
+ if (draw_list->CmdBuffer.Size == 0)
+ return;
+ if (draw_list->CmdBuffer.Size == 1 && draw_list->CmdBuffer[0].ElemCount == 0 && draw_list->CmdBuffer[0].UserCallback == NULL)
+ return;
+
+ // Draw list sanity check. Detect mismatch between PrimReserve() calls and incrementing _VtxCurrentIdx, _VtxWritePtr etc.
+ // May trigger for you if you are using PrimXXX functions incorrectly.
+ IM_ASSERT(draw_list->VtxBuffer.Size == 0 || draw_list->_VtxWritePtr == draw_list->VtxBuffer.Data + draw_list->VtxBuffer.Size);
+ IM_ASSERT(draw_list->IdxBuffer.Size == 0 || draw_list->_IdxWritePtr == draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size);
+ if (!(draw_list->Flags & ImDrawListFlags_AllowVtxOffset))
+ IM_ASSERT((int)draw_list->_VtxCurrentIdx == draw_list->VtxBuffer.Size);
+
+ // Check that draw_list doesn't use more vertices than indexable (default ImDrawIdx = unsigned short = 2 bytes = 64K vertices per ImDrawList = per window)
+ // If this assert triggers because you are drawing lots of stuff manually:
+ // - First, make sure you are coarse clipping yourself and not trying to draw many things outside visible bounds.
+ // Be mindful that the ImDrawList API doesn't filter vertices. Use the Metrics/Debugger window to inspect draw list contents.
+ // - If you want large meshes with more than 64K vertices, you can either:
+ // (A) Handle the ImDrawCmd::VtxOffset value in your renderer backend, and set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset'.
+ // Most example backends already support this from 1.71. Pre-1.71 backends won't.
+ // Some graphics API such as GL ES 1/2 don't have a way to offset the starting vertex so it is not supported for them.
+ // (B) Or handle 32-bit indices in your renderer backend, and uncomment '#define ImDrawIdx unsigned int' line in imconfig.h.
+ // Most example backends already support this. For example, the OpenGL example code detect index size at compile-time:
+ // glDrawElements(GL_TRIANGLES, (GLsizei)pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer_offset);
+ // Your own engine or render API may use different parameters or function calls to specify index sizes.
+ // 2 and 4 bytes indices are generally supported by most graphics API.
+ // - If for some reason neither of those solutions works for you, a workaround is to call BeginChild()/EndChild() before reaching
+ // the 64K limit to split your draw commands in multiple draw lists.
+ if (sizeof(ImDrawIdx) == 2)
+ IM_ASSERT(draw_list->_VtxCurrentIdx < (1 << 16) && "Too many vertices in ImDrawList using 16-bit indices. Read comment above");
+
+ out_list->push_back(draw_list);
+}
+
+static void AddWindowToDrawData(ImGuiWindow* window, int layer)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiViewportP* viewport = g.Viewports[0];
+ g.IO.MetricsRenderWindows++;
+ AddDrawListToDrawData(&viewport->DrawDataBuilder.Layers[layer], window->DrawList);
+ for (int i = 0; i < window->DC.ChildWindows.Size; i++)
+ {
+ ImGuiWindow* child = window->DC.ChildWindows[i];
+ if (IsWindowActiveAndVisible(child)) // Clipped children may have been marked not active
+ AddWindowToDrawData(child, layer);
+ }
+}
+
+static inline int GetWindowDisplayLayer(ImGuiWindow* window)
+{
+ return (window->Flags & ImGuiWindowFlags_Tooltip) ? 1 : 0;
+}
+
+// Layer is locked for the root window, however child windows may use a different viewport (e.g. extruding menu)
+static inline void AddRootWindowToDrawData(ImGuiWindow* window)
+{
+ AddWindowToDrawData(window, GetWindowDisplayLayer(window));
+}
+
+void ImDrawDataBuilder::FlattenIntoSingleLayer()
+{
+ int n = Layers[0].Size;
+ int size = n;
+ for (int i = 1; i < IM_ARRAYSIZE(Layers); i++)
+ size += Layers[i].Size;
+ Layers[0].resize(size);
+ for (int layer_n = 1; layer_n < IM_ARRAYSIZE(Layers); layer_n++)
+ {
+ ImVector<ImDrawList*>& layer = Layers[layer_n];
+ if (layer.empty())
+ continue;
+ memcpy(&Layers[0][n], &layer[0], layer.Size * sizeof(ImDrawList*));
+ n += layer.Size;
+ layer.resize(0);
+ }
+}
+
+static void SetupViewportDrawData(ImGuiViewportP* viewport, ImVector<ImDrawList*>* draw_lists)
+{
+ ImGuiIO& io = ImGui::GetIO();
+ ImDrawData* draw_data = &viewport->DrawDataP;
+ draw_data->Valid = true;
+ draw_data->CmdLists = (draw_lists->Size > 0) ? draw_lists->Data : NULL;
+ draw_data->CmdListsCount = draw_lists->Size;
+ draw_data->TotalVtxCount = draw_data->TotalIdxCount = 0;
+ draw_data->DisplayPos = viewport->Pos;
+ draw_data->DisplaySize = viewport->Size;
+ draw_data->FramebufferScale = io.DisplayFramebufferScale;
+ for (int n = 0; n < draw_lists->Size; n++)
+ {
+ ImDrawList* draw_list = draw_lists->Data[n];
+ draw_list->_PopUnusedDrawCmd();
+ draw_data->TotalVtxCount += draw_list->VtxBuffer.Size;
+ draw_data->TotalIdxCount += draw_list->IdxBuffer.Size;
+ }
+}
+
+// Push a clipping rectangle for both ImGui logic (hit-testing etc.) and low-level ImDrawList rendering.
+// - When using this function it is sane to ensure that float are perfectly rounded to integer values,
+// so that e.g. (int)(max.x-min.x) in user's render produce correct result.
+// - If the code here changes, may need to update code of functions like NextColumn() and PushColumnClipRect():
+// some frequently called functions which to modify both channels and clipping simultaneously tend to use the
+// more specialized SetWindowClipRectBeforeSetChannel() to avoid extraneous updates of underlying ImDrawCmds.
+void ImGui::PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ window->DrawList->PushClipRect(clip_rect_min, clip_rect_max, intersect_with_current_clip_rect);
+ window->ClipRect = window->DrawList->_ClipRectStack.back();
+}
+
+void ImGui::PopClipRect()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ window->DrawList->PopClipRect();
+ window->ClipRect = window->DrawList->_ClipRectStack.back();
+}
+
+static void ImGui::RenderDimmedBackgroundBehindWindow(ImGuiWindow* window, ImU32 col)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ ImGuiViewportP* viewport = (ImGuiViewportP*)GetMainViewport();
+ ImRect viewport_rect = viewport->GetMainRect();
+
+ // Draw behind window by moving the draw command at the FRONT of the draw list
+ {
+ // We've already called AddWindowToDrawData() which called DrawList->ChannelsMerge() on DockNodeHost windows,
+ // and draw list have been trimmed already, hence the explicit recreation of a draw command if missing.
+ // FIXME: This is creating complication, might be simpler if we could inject a drawlist in drawdata at a given position and not attempt to manipulate ImDrawCmd order.
+ ImDrawList* draw_list = window->RootWindow->DrawList;
+ if (draw_list->CmdBuffer.Size == 0)
+ draw_list->AddDrawCmd();
+ draw_list->PushClipRect(viewport_rect.Min - ImVec2(1, 1), viewport_rect.Max + ImVec2(1, 1), false); // Ensure ImDrawCmd are not merged
+ draw_list->AddRectFilled(viewport_rect.Min, viewport_rect.Max, col);
+ ImDrawCmd cmd = draw_list->CmdBuffer.back();
+ IM_ASSERT(cmd.ElemCount == 6);
+ draw_list->CmdBuffer.pop_back();
+ draw_list->CmdBuffer.push_front(cmd);
+ draw_list->PopClipRect();
+ draw_list->AddDrawCmd(); // We need to create a command as CmdBuffer.back().IdxOffset won't be correct if we append to same command.
+ }
+}
+
+ImGuiWindow* ImGui::FindBottomMostVisibleWindowWithinBeginStack(ImGuiWindow* parent_window)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* bottom_most_visible_window = parent_window;
+ for (int i = FindWindowDisplayIndex(parent_window); i >= 0; i--)
+ {
+ ImGuiWindow* window = g.Windows[i];
+ if (window->Flags & ImGuiWindowFlags_ChildWindow)
+ continue;
+ if (!IsWindowWithinBeginStackOf(window, parent_window))
+ break;
+ if (IsWindowActiveAndVisible(window) && GetWindowDisplayLayer(window) <= GetWindowDisplayLayer(parent_window))
+ bottom_most_visible_window = window;
+ }
+ return bottom_most_visible_window;
+}
+
+static void ImGui::RenderDimmedBackgrounds()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* modal_window = GetTopMostAndVisiblePopupModal();
+ if (g.DimBgRatio <= 0.0f && g.NavWindowingHighlightAlpha <= 0.0f)
+ return;
+ const bool dim_bg_for_modal = (modal_window != NULL);
+ const bool dim_bg_for_window_list = (g.NavWindowingTargetAnim != NULL && g.NavWindowingTargetAnim->Active);
+ if (!dim_bg_for_modal && !dim_bg_for_window_list)
+ return;
+
+ if (dim_bg_for_modal)
+ {
+ // Draw dimming behind modal or a begin stack child, whichever comes first in draw order.
+ ImGuiWindow* dim_behind_window = FindBottomMostVisibleWindowWithinBeginStack(modal_window);
+ RenderDimmedBackgroundBehindWindow(dim_behind_window, GetColorU32(ImGuiCol_ModalWindowDimBg, g.DimBgRatio));
+ }
+ else if (dim_bg_for_window_list)
+ {
+ // Draw dimming behind CTRL+Tab target window
+ RenderDimmedBackgroundBehindWindow(g.NavWindowingTargetAnim, GetColorU32(ImGuiCol_NavWindowingDimBg, g.DimBgRatio));
+
+ // Draw border around CTRL+Tab target window
+ ImGuiWindow* window = g.NavWindowingTargetAnim;
+ ImGuiViewport* viewport = GetMainViewport();
+ float distance = g.FontSize;
+ ImRect bb = window->Rect();
+ bb.Expand(distance);
+ if (bb.GetWidth() >= viewport->Size.x && bb.GetHeight() >= viewport->Size.y)
+ bb.Expand(-distance - 1.0f); // If a window fits the entire viewport, adjust its highlight inward
+ if (window->DrawList->CmdBuffer.Size == 0)
+ window->DrawList->AddDrawCmd();
+ window->DrawList->PushClipRect(viewport->Pos, viewport->Pos + viewport->Size);
+ window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_NavWindowingHighlight, g.NavWindowingHighlightAlpha), window->WindowRounding, 0, 3.0f);
+ window->DrawList->PopClipRect();
+ }
+}
+
+// This is normally called by Render(). You may want to call it directly if you want to avoid calling Render() but the gain will be very minimal.
+void ImGui::EndFrame()
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.Initialized);
+
+ // Don't process EndFrame() multiple times.
+ if (g.FrameCountEnded == g.FrameCount)
+ return;
+ IM_ASSERT(g.WithinFrameScope && "Forgot to call ImGui::NewFrame()?");
+
+ CallContextHooks(&g, ImGuiContextHookType_EndFramePre);
+
+ ErrorCheckEndFrameSanityChecks();
+
+ // Notify Platform/OS when our Input Method Editor cursor has moved (e.g. CJK inputs using Microsoft IME)
+ if (g.IO.SetPlatformImeDataFn && memcmp(&g.PlatformImeData, &g.PlatformImeDataPrev, sizeof(ImGuiPlatformImeData)) != 0)
+ g.IO.SetPlatformImeDataFn(GetMainViewport(), &g.PlatformImeData);
+
+ // Hide implicit/fallback "Debug" window if it hasn't been used
+ g.WithinFrameScopeWithImplicitWindow = false;
+ if (g.CurrentWindow && !g.CurrentWindow->WriteAccessed)
+ g.CurrentWindow->Active = false;
+ End();
+
+ // Update navigation: CTRL+Tab, wrap-around requests
+ NavEndFrame();
+
+ // Drag and Drop: Elapse payload (if delivered, or if source stops being submitted)
+ if (g.DragDropActive)
+ {
+ bool is_delivered = g.DragDropPayload.Delivery;
+ bool is_elapsed = (g.DragDropPayload.DataFrameCount + 1 < g.FrameCount) && ((g.DragDropSourceFlags & ImGuiDragDropFlags_SourceAutoExpirePayload) || !IsMouseDown(g.DragDropMouseButton));
+ if (is_delivered || is_elapsed)
+ ClearDragDrop();
+ }
+
+ // Drag and Drop: Fallback for source tooltip. This is not ideal but better than nothing.
+ if (g.DragDropActive && g.DragDropSourceFrameCount < g.FrameCount && !(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
+ {
+ g.DragDropWithinSource = true;
+ SetTooltip("...");
+ g.DragDropWithinSource = false;
+ }
+
+ // End frame
+ g.WithinFrameScope = false;
+ g.FrameCountEnded = g.FrameCount;
+
+ // Initiate moving window + handle left-click and right-click focus
+ UpdateMouseMovingWindowEndFrame();
+
+ // Sort the window list so that all child windows are after their parent
+ // We cannot do that on FocusWindow() because children may not exist yet
+ g.WindowsTempSortBuffer.resize(0);
+ g.WindowsTempSortBuffer.reserve(g.Windows.Size);
+ for (int i = 0; i != g.Windows.Size; i++)
+ {
+ ImGuiWindow* window = g.Windows[i];
+ if (window->Active && (window->Flags & ImGuiWindowFlags_ChildWindow)) // if a child is active its parent will add it
+ continue;
+ AddWindowToSortBuffer(&g.WindowsTempSortBuffer, window);
+ }
+
+ // This usually assert if there is a mismatch between the ImGuiWindowFlags_ChildWindow / ParentWindow values and DC.ChildWindows[] in parents, aka we've done something wrong.
+ IM_ASSERT(g.Windows.Size == g.WindowsTempSortBuffer.Size);
+ g.Windows.swap(g.WindowsTempSortBuffer);
+ g.IO.MetricsActiveWindows = g.WindowsActiveCount;
+
+ // Unlock font atlas
+ g.IO.Fonts->Locked = false;
+
+ // Clear Input data for next frame
+ g.IO.MouseWheel = g.IO.MouseWheelH = 0.0f;
+ g.IO.InputQueueCharacters.resize(0);
+ memset(g.IO.NavInputs, 0, sizeof(g.IO.NavInputs));
+
+ CallContextHooks(&g, ImGuiContextHookType_EndFramePost);
+}
+
+// Prepare the data for rendering so you can call GetDrawData()
+// (As with anything within the ImGui:: namspace this doesn't touch your GPU or graphics API at all:
+// it is the role of the ImGui_ImplXXXX_RenderDrawData() function provided by the renderer backend)
+void ImGui::Render()
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.Initialized);
+
+ if (g.FrameCountEnded != g.FrameCount)
+ EndFrame();
+ const bool first_render_of_frame = (g.FrameCountRendered != g.FrameCount);
+ g.FrameCountRendered = g.FrameCount;
+ g.IO.MetricsRenderWindows = 0;
+
+ CallContextHooks(&g, ImGuiContextHookType_RenderPre);
+
+ // Add background ImDrawList (for each active viewport)
+ for (int n = 0; n != g.Viewports.Size; n++)
+ {
+ ImGuiViewportP* viewport = g.Viewports[n];
+ viewport->DrawDataBuilder.Clear();
+ if (viewport->DrawLists[0] != NULL)
+ AddDrawListToDrawData(&viewport->DrawDataBuilder.Layers[0], GetBackgroundDrawList(viewport));
+ }
+
+ // Draw modal/window whitening backgrounds
+ if (first_render_of_frame)
+ RenderDimmedBackgrounds();
+
+ // Add ImDrawList to render
+ ImGuiWindow* windows_to_render_top_most[2];
+ windows_to_render_top_most[0] = (g.NavWindowingTarget && !(g.NavWindowingTarget->Flags & ImGuiWindowFlags_NoBringToFrontOnFocus)) ? g.NavWindowingTarget->RootWindow : NULL;
+ windows_to_render_top_most[1] = (g.NavWindowingTarget ? g.NavWindowingListWindow : NULL);
+ for (int n = 0; n != g.Windows.Size; n++)
+ {
+ ImGuiWindow* window = g.Windows[n];
+ IM_MSVC_WARNING_SUPPRESS(6011); // Static Analysis false positive "warning C6011: Dereferencing NULL pointer 'window'"
+ if (IsWindowActiveAndVisible(window) && (window->Flags & ImGuiWindowFlags_ChildWindow) == 0 && window != windows_to_render_top_most[0] && window != windows_to_render_top_most[1])
+ AddRootWindowToDrawData(window);
+ }
+ for (int n = 0; n < IM_ARRAYSIZE(windows_to_render_top_most); n++)
+ if (windows_to_render_top_most[n] && IsWindowActiveAndVisible(windows_to_render_top_most[n])) // NavWindowingTarget is always temporarily displayed as the top-most window
+ AddRootWindowToDrawData(windows_to_render_top_most[n]);
+
+ // Draw software mouse cursor if requested by io.MouseDrawCursor flag
+ if (g.IO.MouseDrawCursor && first_render_of_frame && g.MouseCursor != ImGuiMouseCursor_None)
+ RenderMouseCursor(g.IO.MousePos, g.Style.MouseCursorScale, g.MouseCursor, IM_COL32_WHITE, IM_COL32_BLACK, IM_COL32(0, 0, 0, 48));
+
+ // Setup ImDrawData structures for end-user
+ g.IO.MetricsRenderVertices = g.IO.MetricsRenderIndices = 0;
+ for (int n = 0; n < g.Viewports.Size; n++)
+ {
+ ImGuiViewportP* viewport = g.Viewports[n];
+ viewport->DrawDataBuilder.FlattenIntoSingleLayer();
+
+ // Add foreground ImDrawList (for each active viewport)
+ if (viewport->DrawLists[1] != NULL)
+ AddDrawListToDrawData(&viewport->DrawDataBuilder.Layers[0], GetForegroundDrawList(viewport));
+
+ SetupViewportDrawData(viewport, &viewport->DrawDataBuilder.Layers[0]);
+ ImDrawData* draw_data = &viewport->DrawDataP;
+ g.IO.MetricsRenderVertices += draw_data->TotalVtxCount;
+ g.IO.MetricsRenderIndices += draw_data->TotalIdxCount;
+ }
+
+ CallContextHooks(&g, ImGuiContextHookType_RenderPost);
+}
+
+// Calculate text size. Text can be multi-line. Optionally ignore text after a ## marker.
+// CalcTextSize("") should return ImVec2(0.0f, g.FontSize)
+ImVec2 ImGui::CalcTextSize(const char* text, const char* text_end, bool hide_text_after_double_hash, float wrap_width)
+{
+ ImGuiContext& g = *GImGui;
+
+ const char* text_display_end;
+ if (hide_text_after_double_hash)
+ text_display_end = FindRenderedTextEnd(text, text_end); // Hide anything after a '##' string
+ else
+ text_display_end = text_end;
+
+ ImFont* font = g.Font;
+ const float font_size = g.FontSize;
+ if (text == text_display_end)
+ return ImVec2(0.0f, font_size);
+ ImVec2 text_size = font->CalcTextSizeA(font_size, FLT_MAX, wrap_width, text, text_display_end, NULL);
+
+ // Round
+ // FIXME: This has been here since Dec 2015 (7b0bf230) but down the line we want this out.
+ // FIXME: Investigate using ceilf or e.g.
+ // - https://git.musl-libc.org/cgit/musl/tree/src/math/ceilf.c
+ // - https://embarkstudios.github.io/rust-gpu/api/src/libm/math/ceilf.rs.html
+ text_size.x = IM_FLOOR(text_size.x + 0.99999f);
+
+ return text_size;
+}
+
+// Find window given position, search front-to-back
+// FIXME: Note that we have an inconsequential lag here: OuterRectClipped is updated in Begin(), so windows moved programmatically
+// with SetWindowPos() and not SetNextWindowPos() will have that rectangle lagging by a frame at the time FindHoveredWindow() is
+// called, aka before the next Begin(). Moving window isn't affected.
+static void FindHoveredWindow()
+{
+ ImGuiContext& g = *GImGui;
+
+ ImGuiWindow* hovered_window = NULL;
+ ImGuiWindow* hovered_window_ignoring_moving_window = NULL;
+ if (g.MovingWindow && !(g.MovingWindow->Flags & ImGuiWindowFlags_NoMouseInputs))
+ hovered_window = g.MovingWindow;
+
+ ImVec2 padding_regular = g.Style.TouchExtraPadding;
+ ImVec2 padding_for_resize = g.IO.ConfigWindowsResizeFromEdges ? g.WindowsHoverPadding : padding_regular;
+ for (int i = g.Windows.Size - 1; i >= 0; i--)
+ {
+ ImGuiWindow* window = g.Windows[i];
+ IM_MSVC_WARNING_SUPPRESS(28182); // [Static Analyzer] Dereferencing NULL pointer.
+ if (!window->Active || window->Hidden)
+ continue;
+ if (window->Flags & ImGuiWindowFlags_NoMouseInputs)
+ continue;
+
+ // Using the clipped AABB, a child window will typically be clipped by its parent (not always)
+ ImRect bb(window->OuterRectClipped);
+ if (window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_AlwaysAutoResize))
+ bb.Expand(padding_regular);
+ else
+ bb.Expand(padding_for_resize);
+ if (!bb.Contains(g.IO.MousePos))
+ continue;
+
+ // Support for one rectangular hole in any given window
+ // FIXME: Consider generalizing hit-testing override (with more generic data, callback, etc.) (#1512)
+ if (window->HitTestHoleSize.x != 0)
+ {
+ ImVec2 hole_pos(window->Pos.x + (float)window->HitTestHoleOffset.x, window->Pos.y + (float)window->HitTestHoleOffset.y);
+ ImVec2 hole_size((float)window->HitTestHoleSize.x, (float)window->HitTestHoleSize.y);
+ if (ImRect(hole_pos, hole_pos + hole_size).Contains(g.IO.MousePos))
+ continue;
+ }
+
+ if (hovered_window == NULL)
+ hovered_window = window;
+ IM_MSVC_WARNING_SUPPRESS(28182); // [Static Analyzer] Dereferencing NULL pointer.
+ if (hovered_window_ignoring_moving_window == NULL && (!g.MovingWindow || window->RootWindow != g.MovingWindow->RootWindow))
+ hovered_window_ignoring_moving_window = window;
+ if (hovered_window && hovered_window_ignoring_moving_window)
+ break;
+ }
+
+ g.HoveredWindow = hovered_window;
+ g.HoveredWindowUnderMovingWindow = hovered_window_ignoring_moving_window;
+}
+
+bool ImGui::IsItemActive()
+{
+ ImGuiContext& g = *GImGui;
+ if (g.ActiveId)
+ return g.ActiveId == g.LastItemData.ID;
+ return false;
+}
+
+bool ImGui::IsItemActivated()
+{
+ ImGuiContext& g = *GImGui;
+ if (g.ActiveId)
+ if (g.ActiveId == g.LastItemData.ID && g.ActiveIdPreviousFrame != g.LastItemData.ID)
+ return true;
+ return false;
+}
+
+bool ImGui::IsItemDeactivated()
+{
+ ImGuiContext& g = *GImGui;
+ if (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_HasDeactivated)
+ return (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_Deactivated) != 0;
+ return (g.ActiveIdPreviousFrame == g.LastItemData.ID && g.ActiveIdPreviousFrame != 0 && g.ActiveId != g.LastItemData.ID);
+}
+
+bool ImGui::IsItemDeactivatedAfterEdit()
+{
+ ImGuiContext& g = *GImGui;
+ return IsItemDeactivated() && (g.ActiveIdPreviousFrameHasBeenEditedBefore || (g.ActiveId == 0 && g.ActiveIdHasBeenEditedBefore));
+}
+
+// == GetItemID() == GetFocusID()
+bool ImGui::IsItemFocused()
+{
+ ImGuiContext& g = *GImGui;
+ if (g.NavId != g.LastItemData.ID || g.NavId == 0)
+ return false;
+ return true;
+}
+
+// Important: this can be useful but it is NOT equivalent to the behavior of e.g.Button()!
+// Most widgets have specific reactions based on mouse-up/down state, mouse position etc.
+bool ImGui::IsItemClicked(ImGuiMouseButton mouse_button)
+{
+ return IsMouseClicked(mouse_button) && IsItemHovered(ImGuiHoveredFlags_None);
+}
+
+bool ImGui::IsItemToggledOpen()
+{
+ ImGuiContext& g = *GImGui;
+ return (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_ToggledOpen) ? true : false;
+}
+
+bool ImGui::IsItemToggledSelection()
+{
+ ImGuiContext& g = *GImGui;
+ return (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_ToggledSelection) ? true : false;
+}
+
+bool ImGui::IsAnyItemHovered()
+{
+ ImGuiContext& g = *GImGui;
+ return g.HoveredId != 0 || g.HoveredIdPreviousFrame != 0;
+}
+
+bool ImGui::IsAnyItemActive()
+{
+ ImGuiContext& g = *GImGui;
+ return g.ActiveId != 0;
+}
+
+bool ImGui::IsAnyItemFocused()
+{
+ ImGuiContext& g = *GImGui;
+ return g.NavId != 0 && !g.NavDisableHighlight;
+}
+
+bool ImGui::IsItemVisible()
+{
+ ImGuiContext& g = *GImGui;
+ return g.CurrentWindow->ClipRect.Overlaps(g.LastItemData.Rect);
+}
+
+bool ImGui::IsItemEdited()
+{
+ ImGuiContext& g = *GImGui;
+ return (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_Edited) != 0;
+}
+
+// Allow last item to be overlapped by a subsequent item. Both may be activated during the same frame before the later one takes priority.
+// FIXME: Although this is exposed, its interaction and ideal idiom with using ImGuiButtonFlags_AllowItemOverlap flag are extremely confusing, need rework.
+void ImGui::SetItemAllowOverlap()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiID id = g.LastItemData.ID;
+ if (g.HoveredId == id)
+ g.HoveredIdAllowOverlap = true;
+ if (g.ActiveId == id)
+ g.ActiveIdAllowOverlap = true;
+}
+
+void ImGui::SetItemUsingMouseWheel()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiID id = g.LastItemData.ID;
+ if (g.HoveredId == id)
+ g.HoveredIdUsingMouseWheel = true;
+ if (g.ActiveId == id)
+ g.ActiveIdUsingMouseWheel = true;
+}
+
+void ImGui::SetActiveIdUsingNavAndKeys()
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.ActiveId != 0);
+ g.ActiveIdUsingNavDirMask = ~(ImU32)0;
+ g.ActiveIdUsingNavInputMask = ~(ImU32)0;
+ g.ActiveIdUsingKeyInputMask.SetAllBits();
+ NavMoveRequestCancel();
+}
+
+ImVec2 ImGui::GetItemRectMin()
+{
+ ImGuiContext& g = *GImGui;
+ return g.LastItemData.Rect.Min;
+}
+
+ImVec2 ImGui::GetItemRectMax()
+{
+ ImGuiContext& g = *GImGui;
+ return g.LastItemData.Rect.Max;
+}
+
+ImVec2 ImGui::GetItemRectSize()
+{
+ ImGuiContext& g = *GImGui;
+ return g.LastItemData.Rect.GetSize();
+}
+
+bool ImGui::BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* parent_window = g.CurrentWindow;
+
+ flags |= ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_ChildWindow;
+ flags |= (parent_window->Flags & ImGuiWindowFlags_NoMove); // Inherit the NoMove flag
+
+ // Size
+ const ImVec2 content_avail = GetContentRegionAvail();
+ ImVec2 size = ImFloor(size_arg);
+ const int auto_fit_axises = ((size.x == 0.0f) ? (1 << ImGuiAxis_X) : 0x00) | ((size.y == 0.0f) ? (1 << ImGuiAxis_Y) : 0x00);
+ if (size.x <= 0.0f)
+ size.x = ImMax(content_avail.x + size.x, 4.0f); // Arbitrary minimum child size (0.0f causing too much issues)
+ if (size.y <= 0.0f)
+ size.y = ImMax(content_avail.y + size.y, 4.0f);
+ SetNextWindowSize(size);
+
+ // Build up name. If you need to append to a same child from multiple location in the ID stack, use BeginChild(ImGuiID id) with a stable value.
+ const char* temp_window_name;
+ if (name)
+ ImFormatStringToTempBuffer(&temp_window_name, NULL, "%s/%s_%08X", parent_window->Name, name, id);
+ else
+ ImFormatStringToTempBuffer(&temp_window_name, NULL, "%s/%08X", parent_window->Name, id);
+
+ const float backup_border_size = g.Style.ChildBorderSize;
+ if (!border)
+ g.Style.ChildBorderSize = 0.0f;
+ bool ret = Begin(temp_window_name, NULL, flags);
+ g.Style.ChildBorderSize = backup_border_size;
+
+ ImGuiWindow* child_window = g.CurrentWindow;
+ child_window->ChildId = id;
+ child_window->AutoFitChildAxises = (ImS8)auto_fit_axises;
+
+ // Set the cursor to handle case where the user called SetNextWindowPos()+BeginChild() manually.
+ // While this is not really documented/defined, it seems that the expected thing to do.
+ if (child_window->BeginCount == 1)
+ parent_window->DC.CursorPos = child_window->Pos;
+
+ // Process navigation-in immediately so NavInit can run on first frame
+ if (g.NavActivateId == id && !(flags & ImGuiWindowFlags_NavFlattened) && (child_window->DC.NavLayersActiveMask != 0 || child_window->DC.NavHasScroll))
+ {
+ FocusWindow(child_window);
+ NavInitWindow(child_window, false);
+ SetActiveID(id + 1, child_window); // Steal ActiveId with another arbitrary id so that key-press won't activate child item
+ g.ActiveIdSource = ImGuiInputSource_Nav;
+ }
+ return ret;
+}
+
+bool ImGui::BeginChild(const char* str_id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ return BeginChildEx(str_id, window->GetID(str_id), size_arg, border, extra_flags);
+}
+
+bool ImGui::BeginChild(ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags extra_flags)
+{
+ IM_ASSERT(id != 0);
+ return BeginChildEx(NULL, id, size_arg, border, extra_flags);
+}
+
+void ImGui::EndChild()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ IM_ASSERT(g.WithinEndChild == false);
+ IM_ASSERT(window->Flags & ImGuiWindowFlags_ChildWindow); // Mismatched BeginChild()/EndChild() calls
+
+ g.WithinEndChild = true;
+ if (window->BeginCount > 1)
+ {
+ End();
+ }
+ else
+ {
+ ImVec2 sz = window->Size;
+ if (window->AutoFitChildAxises & (1 << ImGuiAxis_X)) // Arbitrary minimum zero-ish child size of 4.0f causes less trouble than a 0.0f
+ sz.x = ImMax(4.0f, sz.x);
+ if (window->AutoFitChildAxises & (1 << ImGuiAxis_Y))
+ sz.y = ImMax(4.0f, sz.y);
+ End();
+
+ ImGuiWindow* parent_window = g.CurrentWindow;
+ ImRect bb(parent_window->DC.CursorPos, parent_window->DC.CursorPos + sz);
+ ItemSize(sz);
+ if ((window->DC.NavLayersActiveMask != 0 || window->DC.NavHasScroll) && !(window->Flags & ImGuiWindowFlags_NavFlattened))
+ {
+ ItemAdd(bb, window->ChildId);
+ RenderNavHighlight(bb, window->ChildId);
+
+ // When browsing a window that has no activable items (scroll only) we keep a highlight on the child (pass g.NavId to trick into always displaying)
+ if (window->DC.NavLayersActiveMask == 0 && window == g.NavWindow)
+ RenderNavHighlight(ImRect(bb.Min - ImVec2(2, 2), bb.Max + ImVec2(2, 2)), g.NavId, ImGuiNavHighlightFlags_TypeThin);
+ }
+ else
+ {
+ // Not navigable into
+ ItemAdd(bb, 0);
+ }
+ if (g.HoveredWindow == window)
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_HoveredWindow;
+ }
+ g.WithinEndChild = false;
+ g.LogLinePosY = -FLT_MAX; // To enforce a carriage return
+}
+
+// Helper to create a child window / scrolling region that looks like a normal widget frame.
+bool ImGui::BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags extra_flags)
+{
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]);
+ PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding);
+ PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize);
+ PushStyleVar(ImGuiStyleVar_WindowPadding, style.FramePadding);
+ bool ret = BeginChild(id, size, true, ImGuiWindowFlags_NoMove | ImGuiWindowFlags_AlwaysUseWindowPadding | extra_flags);
+ PopStyleVar(3);
+ PopStyleColor();
+ return ret;
+}
+
+void ImGui::EndChildFrame()
+{
+ EndChild();
+}
+
+static void SetWindowConditionAllowFlags(ImGuiWindow* window, ImGuiCond flags, bool enabled)
+{
+ window->SetWindowPosAllowFlags = enabled ? (window->SetWindowPosAllowFlags | flags) : (window->SetWindowPosAllowFlags & ~flags);
+ window->SetWindowSizeAllowFlags = enabled ? (window->SetWindowSizeAllowFlags | flags) : (window->SetWindowSizeAllowFlags & ~flags);
+ window->SetWindowCollapsedAllowFlags = enabled ? (window->SetWindowCollapsedAllowFlags | flags) : (window->SetWindowCollapsedAllowFlags & ~flags);
+}
+
+ImGuiWindow* ImGui::FindWindowByID(ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ return (ImGuiWindow*)g.WindowsById.GetVoidPtr(id);
+}
+
+ImGuiWindow* ImGui::FindWindowByName(const char* name)
+{
+ ImGuiID id = ImHashStr(name);
+ return FindWindowByID(id);
+}
+
+static void ApplyWindowSettings(ImGuiWindow* window, ImGuiWindowSettings* settings)
+{
+ window->Pos = ImFloor(ImVec2(settings->Pos.x, settings->Pos.y));
+ if (settings->Size.x > 0 && settings->Size.y > 0)
+ window->Size = window->SizeFull = ImFloor(ImVec2(settings->Size.x, settings->Size.y));
+ window->Collapsed = settings->Collapsed;
+}
+
+static void UpdateWindowInFocusOrderList(ImGuiWindow* window, bool just_created, ImGuiWindowFlags new_flags)
+{
+ ImGuiContext& g = *GImGui;
+
+ const bool new_is_explicit_child = (new_flags & ImGuiWindowFlags_ChildWindow) != 0;
+ const bool child_flag_changed = new_is_explicit_child != window->IsExplicitChild;
+ if ((just_created || child_flag_changed) && !new_is_explicit_child)
+ {
+ IM_ASSERT(!g.WindowsFocusOrder.contains(window));
+ g.WindowsFocusOrder.push_back(window);
+ window->FocusOrder = (short)(g.WindowsFocusOrder.Size - 1);
+ }
+ else if (!just_created && child_flag_changed && new_is_explicit_child)
+ {
+ IM_ASSERT(g.WindowsFocusOrder[window->FocusOrder] == window);
+ for (int n = window->FocusOrder + 1; n < g.WindowsFocusOrder.Size; n++)
+ g.WindowsFocusOrder[n]->FocusOrder--;
+ g.WindowsFocusOrder.erase(g.WindowsFocusOrder.Data + window->FocusOrder);
+ window->FocusOrder = -1;
+ }
+ window->IsExplicitChild = new_is_explicit_child;
+}
+
+static ImGuiWindow* CreateNewWindow(const char* name, ImGuiWindowFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ //IMGUI_DEBUG_LOG("CreateNewWindow '%s', flags = 0x%08X\n", name, flags);
+
+ // Create window the first time
+ ImGuiWindow* window = IM_NEW(ImGuiWindow)(&g, name);
+ window->Flags = flags;
+ g.WindowsById.SetVoidPtr(window->ID, window);
+
+ // Default/arbitrary window position. Use SetNextWindowPos() with the appropriate condition flag to change the initial position of a window.
+ const ImGuiViewport* main_viewport = ImGui::GetMainViewport();
+ window->Pos = main_viewport->Pos + ImVec2(60, 60);
+
+ // User can disable loading and saving of settings. Tooltip and child windows also don't store settings.
+ if (!(flags & ImGuiWindowFlags_NoSavedSettings))
+ if (ImGuiWindowSettings* settings = ImGui::FindWindowSettings(window->ID))
+ {
+ // Retrieve settings from .ini file
+ window->SettingsOffset = g.SettingsWindows.offset_from_ptr(settings);
+ SetWindowConditionAllowFlags(window, ImGuiCond_FirstUseEver, false);
+ ApplyWindowSettings(window, settings);
+ }
+ window->DC.CursorStartPos = window->DC.CursorMaxPos = window->DC.IdealMaxPos = window->Pos; // So first call to CalcWindowContentSizes() doesn't return crazy values
+
+ if ((flags & ImGuiWindowFlags_AlwaysAutoResize) != 0)
+ {
+ window->AutoFitFramesX = window->AutoFitFramesY = 2;
+ window->AutoFitOnlyGrows = false;
+ }
+ else
+ {
+ if (window->Size.x <= 0.0f)
+ window->AutoFitFramesX = 2;
+ if (window->Size.y <= 0.0f)
+ window->AutoFitFramesY = 2;
+ window->AutoFitOnlyGrows = (window->AutoFitFramesX > 0) || (window->AutoFitFramesY > 0);
+ }
+
+ if (flags & ImGuiWindowFlags_NoBringToFrontOnFocus)
+ g.Windows.push_front(window); // Quite slow but rare and only once
+ else
+ g.Windows.push_back(window);
+ UpdateWindowInFocusOrderList(window, true, window->Flags);
+
+ return window;
+}
+
+static ImVec2 CalcWindowSizeAfterConstraint(ImGuiWindow* window, const ImVec2& size_desired)
+{
+ ImGuiContext& g = *GImGui;
+ ImVec2 new_size = size_desired;
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint)
+ {
+ // Using -1,-1 on either X/Y axis to preserve the current size.
+ ImRect cr = g.NextWindowData.SizeConstraintRect;
+ new_size.x = (cr.Min.x >= 0 && cr.Max.x >= 0) ? ImClamp(new_size.x, cr.Min.x, cr.Max.x) : window->SizeFull.x;
+ new_size.y = (cr.Min.y >= 0 && cr.Max.y >= 0) ? ImClamp(new_size.y, cr.Min.y, cr.Max.y) : window->SizeFull.y;
+ if (g.NextWindowData.SizeCallback)
+ {
+ ImGuiSizeCallbackData data;
+ data.UserData = g.NextWindowData.SizeCallbackUserData;
+ data.Pos = window->Pos;
+ data.CurrentSize = window->SizeFull;
+ data.DesiredSize = new_size;
+ g.NextWindowData.SizeCallback(&data);
+ new_size = data.DesiredSize;
+ }
+ new_size.x = IM_FLOOR(new_size.x);
+ new_size.y = IM_FLOOR(new_size.y);
+ }
+
+ // Minimum size
+ if (!(window->Flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_AlwaysAutoResize)))
+ {
+ ImGuiWindow* window_for_height = window;
+ const float decoration_up_height = window_for_height->TitleBarHeight() + window_for_height->MenuBarHeight();
+ new_size = ImMax(new_size, g.Style.WindowMinSize);
+ new_size.y = ImMax(new_size.y, decoration_up_height + ImMax(0.0f, g.Style.WindowRounding - 1.0f)); // Reduce artifacts with very small windows
+ }
+ return new_size;
+}
+
+static void CalcWindowContentSizes(ImGuiWindow* window, ImVec2* content_size_current, ImVec2* content_size_ideal)
+{
+ bool preserve_old_content_sizes = false;
+ if (window->Collapsed && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0)
+ preserve_old_content_sizes = true;
+ else if (window->Hidden && window->HiddenFramesCannotSkipItems == 0 && window->HiddenFramesCanSkipItems > 0)
+ preserve_old_content_sizes = true;
+ if (preserve_old_content_sizes)
+ {
+ *content_size_current = window->ContentSize;
+ *content_size_ideal = window->ContentSizeIdeal;
+ return;
+ }
+
+ content_size_current->x = (window->ContentSizeExplicit.x != 0.0f) ? window->ContentSizeExplicit.x : IM_FLOOR(window->DC.CursorMaxPos.x - window->DC.CursorStartPos.x);
+ content_size_current->y = (window->ContentSizeExplicit.y != 0.0f) ? window->ContentSizeExplicit.y : IM_FLOOR(window->DC.CursorMaxPos.y - window->DC.CursorStartPos.y);
+ content_size_ideal->x = (window->ContentSizeExplicit.x != 0.0f) ? window->ContentSizeExplicit.x : IM_FLOOR(ImMax(window->DC.CursorMaxPos.x, window->DC.IdealMaxPos.x) - window->DC.CursorStartPos.x);
+ content_size_ideal->y = (window->ContentSizeExplicit.y != 0.0f) ? window->ContentSizeExplicit.y : IM_FLOOR(ImMax(window->DC.CursorMaxPos.y, window->DC.IdealMaxPos.y) - window->DC.CursorStartPos.y);
+}
+
+static ImVec2 CalcWindowAutoFitSize(ImGuiWindow* window, const ImVec2& size_contents)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiStyle& style = g.Style;
+ const float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight();
+ ImVec2 size_pad = window->WindowPadding * 2.0f;
+ ImVec2 size_desired = size_contents + size_pad + ImVec2(0.0f, decoration_up_height);
+ if (window->Flags & ImGuiWindowFlags_Tooltip)
+ {
+ // Tooltip always resize
+ return size_desired;
+ }
+ else
+ {
+ // Maximum window size is determined by the viewport size or monitor size
+ const bool is_popup = (window->Flags & ImGuiWindowFlags_Popup) != 0;
+ const bool is_menu = (window->Flags & ImGuiWindowFlags_ChildMenu) != 0;
+ ImVec2 size_min = style.WindowMinSize;
+ if (is_popup || is_menu) // Popups and menus bypass style.WindowMinSize by default, but we give then a non-zero minimum size to facilitate understanding problematic cases (e.g. empty popups)
+ size_min = ImMin(size_min, ImVec2(4.0f, 4.0f));
+
+ // FIXME-VIEWPORT-WORKAREA: May want to use GetWorkSize() instead of Size depending on the type of windows?
+ ImVec2 avail_size = ImGui::GetMainViewport()->Size;
+ ImVec2 size_auto_fit = ImClamp(size_desired, size_min, ImMax(size_min, avail_size - style.DisplaySafeAreaPadding * 2.0f));
+
+ // When the window cannot fit all contents (either because of constraints, either because screen is too small),
+ // we are growing the size on the other axis to compensate for expected scrollbar. FIXME: Might turn bigger than ViewportSize-WindowPadding.
+ ImVec2 size_auto_fit_after_constraint = CalcWindowSizeAfterConstraint(window, size_auto_fit);
+ bool will_have_scrollbar_x = (size_auto_fit_after_constraint.x - size_pad.x - 0.0f < size_contents.x && !(window->Flags & ImGuiWindowFlags_NoScrollbar) && (window->Flags & ImGuiWindowFlags_HorizontalScrollbar)) || (window->Flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar);
+ bool will_have_scrollbar_y = (size_auto_fit_after_constraint.y - size_pad.y - decoration_up_height < size_contents.y && !(window->Flags & ImGuiWindowFlags_NoScrollbar)) || (window->Flags & ImGuiWindowFlags_AlwaysVerticalScrollbar);
+ if (will_have_scrollbar_x)
+ size_auto_fit.y += style.ScrollbarSize;
+ if (will_have_scrollbar_y)
+ size_auto_fit.x += style.ScrollbarSize;
+ return size_auto_fit;
+ }
+}
+
+ImVec2 ImGui::CalcWindowNextAutoFitSize(ImGuiWindow* window)
+{
+ ImVec2 size_contents_current;
+ ImVec2 size_contents_ideal;
+ CalcWindowContentSizes(window, &size_contents_current, &size_contents_ideal);
+ ImVec2 size_auto_fit = CalcWindowAutoFitSize(window, size_contents_ideal);
+ ImVec2 size_final = CalcWindowSizeAfterConstraint(window, size_auto_fit);
+ return size_final;
+}
+
+static ImGuiCol GetWindowBgColorIdx(ImGuiWindow* window)
+{
+ if (window->Flags & (ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_Popup))
+ return ImGuiCol_PopupBg;
+ if (window->Flags & ImGuiWindowFlags_ChildWindow)
+ return ImGuiCol_ChildBg;
+ return ImGuiCol_WindowBg;
+}
+
+static void CalcResizePosSizeFromAnyCorner(ImGuiWindow* window, const ImVec2& corner_target, const ImVec2& corner_norm, ImVec2* out_pos, ImVec2* out_size)
+{
+ ImVec2 pos_min = ImLerp(corner_target, window->Pos, corner_norm); // Expected window upper-left
+ ImVec2 pos_max = ImLerp(window->Pos + window->Size, corner_target, corner_norm); // Expected window lower-right
+ ImVec2 size_expected = pos_max - pos_min;
+ ImVec2 size_constrained = CalcWindowSizeAfterConstraint(window, size_expected);
+ *out_pos = pos_min;
+ if (corner_norm.x == 0.0f)
+ out_pos->x -= (size_constrained.x - size_expected.x);
+ if (corner_norm.y == 0.0f)
+ out_pos->y -= (size_constrained.y - size_expected.y);
+ *out_size = size_constrained;
+}
+
+// Data for resizing from corner
+struct ImGuiResizeGripDef
+{
+ ImVec2 CornerPosN;
+ ImVec2 InnerDir;
+ int AngleMin12, AngleMax12;
+};
+static const ImGuiResizeGripDef resize_grip_def[4] =
+{
+ { ImVec2(1, 1), ImVec2(-1, -1), 0, 3 }, // Lower-right
+ { ImVec2(0, 1), ImVec2(+1, -1), 3, 6 }, // Lower-left
+ { ImVec2(0, 0), ImVec2(+1, +1), 6, 9 }, // Upper-left (Unused)
+ { ImVec2(1, 0), ImVec2(-1, +1), 9, 12 } // Upper-right (Unused)
+};
+
+// Data for resizing from borders
+struct ImGuiResizeBorderDef
+{
+ ImVec2 InnerDir;
+ ImVec2 SegmentN1, SegmentN2;
+ float OuterAngle;
+};
+static const ImGuiResizeBorderDef resize_border_def[4] =
+{
+ { ImVec2(+1, 0), ImVec2(0, 1), ImVec2(0, 0), IM_PI * 1.00f }, // Left
+ { ImVec2(-1, 0), ImVec2(1, 0), ImVec2(1, 1), IM_PI * 0.00f }, // Right
+ { ImVec2(0, +1), ImVec2(0, 0), ImVec2(1, 0), IM_PI * 1.50f }, // Up
+ { ImVec2(0, -1), ImVec2(1, 1), ImVec2(0, 1), IM_PI * 0.50f } // Down
+};
+
+static ImRect GetResizeBorderRect(ImGuiWindow* window, int border_n, float perp_padding, float thickness)
+{
+ ImRect rect = window->Rect();
+ if (thickness == 0.0f)
+ rect.Max -= ImVec2(1, 1);
+ if (border_n == ImGuiDir_Left) { return ImRect(rect.Min.x - thickness, rect.Min.y + perp_padding, rect.Min.x + thickness, rect.Max.y - perp_padding); }
+ if (border_n == ImGuiDir_Right) { return ImRect(rect.Max.x - thickness, rect.Min.y + perp_padding, rect.Max.x + thickness, rect.Max.y - perp_padding); }
+ if (border_n == ImGuiDir_Up) { return ImRect(rect.Min.x + perp_padding, rect.Min.y - thickness, rect.Max.x - perp_padding, rect.Min.y + thickness); }
+ if (border_n == ImGuiDir_Down) { return ImRect(rect.Min.x + perp_padding, rect.Max.y - thickness, rect.Max.x - perp_padding, rect.Max.y + thickness); }
+ IM_ASSERT(0);
+ return ImRect();
+}
+
+// 0..3: corners (Lower-right, Lower-left, Unused, Unused)
+ImGuiID ImGui::GetWindowResizeCornerID(ImGuiWindow* window, int n)
+{
+ IM_ASSERT(n >= 0 && n < 4);
+ ImGuiID id = window->ID;
+ id = ImHashStr("#RESIZE", 0, id);
+ id = ImHashData(&n, sizeof(int), id);
+ return id;
+}
+
+// Borders (Left, Right, Up, Down)
+ImGuiID ImGui::GetWindowResizeBorderID(ImGuiWindow* window, ImGuiDir dir)
+{
+ IM_ASSERT(dir >= 0 && dir < 4);
+ int n = (int)dir + 4;
+ ImGuiID id = window->ID;
+ id = ImHashStr("#RESIZE", 0, id);
+ id = ImHashData(&n, sizeof(int), id);
+ return id;
+}
+
+// Handle resize for: Resize Grips, Borders, Gamepad
+// Return true when using auto-fit (double click on resize grip)
+static bool ImGui::UpdateWindowManualResize(ImGuiWindow* window, const ImVec2& size_auto_fit, int* border_held, int resize_grip_count, ImU32 resize_grip_col[4], const ImRect& visibility_rect)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindowFlags flags = window->Flags;
+
+ if ((flags & ImGuiWindowFlags_NoResize) || (flags & ImGuiWindowFlags_AlwaysAutoResize) || window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0)
+ return false;
+ if (window->WasActive == false) // Early out to avoid running this code for e.g. an hidden implicit/fallback Debug window.
+ return false;
+
+ bool ret_auto_fit = false;
+ const int resize_border_count = g.IO.ConfigWindowsResizeFromEdges ? 4 : 0;
+ const float grip_draw_size = IM_FLOOR(ImMax(g.FontSize * 1.35f, window->WindowRounding + 1.0f + g.FontSize * 0.2f));
+ const float grip_hover_inner_size = IM_FLOOR(grip_draw_size * 0.75f);
+ const float grip_hover_outer_size = g.IO.ConfigWindowsResizeFromEdges ? WINDOWS_HOVER_PADDING : 0.0f;
+
+ ImVec2 pos_target(FLT_MAX, FLT_MAX);
+ ImVec2 size_target(FLT_MAX, FLT_MAX);
+
+ // Resize grips and borders are on layer 1
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
+
+ // Manual resize grips
+ PushID("#RESIZE");
+ for (int resize_grip_n = 0; resize_grip_n < resize_grip_count; resize_grip_n++)
+ {
+ const ImGuiResizeGripDef& def = resize_grip_def[resize_grip_n];
+ const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, def.CornerPosN);
+
+ // Using the FlattenChilds button flag we make the resize button accessible even if we are hovering over a child window
+ bool hovered, held;
+ ImRect resize_rect(corner - def.InnerDir * grip_hover_outer_size, corner + def.InnerDir * grip_hover_inner_size);
+ if (resize_rect.Min.x > resize_rect.Max.x) ImSwap(resize_rect.Min.x, resize_rect.Max.x);
+ if (resize_rect.Min.y > resize_rect.Max.y) ImSwap(resize_rect.Min.y, resize_rect.Max.y);
+ ImGuiID resize_grip_id = window->GetID(resize_grip_n); // == GetWindowResizeCornerID()
+ KeepAliveID(resize_grip_id);
+ ButtonBehavior(resize_rect, resize_grip_id, &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_NoNavFocus);
+ //GetForegroundDrawList(window)->AddRect(resize_rect.Min, resize_rect.Max, IM_COL32(255, 255, 0, 255));
+ if (hovered || held)
+ g.MouseCursor = (resize_grip_n & 1) ? ImGuiMouseCursor_ResizeNESW : ImGuiMouseCursor_ResizeNWSE;
+
+ if (held && g.IO.MouseClickedCount[0] == 2 && resize_grip_n == 0)
+ {
+ // Manual auto-fit when double-clicking
+ size_target = CalcWindowSizeAfterConstraint(window, size_auto_fit);
+ ret_auto_fit = true;
+ ClearActiveID();
+ }
+ else if (held)
+ {
+ // Resize from any of the four corners
+ // We don't use an incremental MouseDelta but rather compute an absolute target size based on mouse position
+ ImVec2 clamp_min = ImVec2(def.CornerPosN.x == 1.0f ? visibility_rect.Min.x : -FLT_MAX, def.CornerPosN.y == 1.0f ? visibility_rect.Min.y : -FLT_MAX);
+ ImVec2 clamp_max = ImVec2(def.CornerPosN.x == 0.0f ? visibility_rect.Max.x : +FLT_MAX, def.CornerPosN.y == 0.0f ? visibility_rect.Max.y : +FLT_MAX);
+ ImVec2 corner_target = g.IO.MousePos - g.ActiveIdClickOffset + ImLerp(def.InnerDir * grip_hover_outer_size, def.InnerDir * -grip_hover_inner_size, def.CornerPosN); // Corner of the window corresponding to our corner grip
+ corner_target = ImClamp(corner_target, clamp_min, clamp_max);
+ CalcResizePosSizeFromAnyCorner(window, corner_target, def.CornerPosN, &pos_target, &size_target);
+ }
+
+ // Only lower-left grip is visible before hovering/activating
+ if (resize_grip_n == 0 || held || hovered)
+ resize_grip_col[resize_grip_n] = GetColorU32(held ? ImGuiCol_ResizeGripActive : hovered ? ImGuiCol_ResizeGripHovered : ImGuiCol_ResizeGrip);
+ }
+ for (int border_n = 0; border_n < resize_border_count; border_n++)
+ {
+ const ImGuiResizeBorderDef& def = resize_border_def[border_n];
+ const ImGuiAxis axis = (border_n == ImGuiDir_Left || border_n == ImGuiDir_Right) ? ImGuiAxis_X : ImGuiAxis_Y;
+
+ bool hovered, held;
+ ImRect border_rect = GetResizeBorderRect(window, border_n, grip_hover_inner_size, WINDOWS_HOVER_PADDING);
+ ImGuiID border_id = window->GetID(border_n + 4); // == GetWindowResizeBorderID()
+ KeepAliveID(border_id);
+ ButtonBehavior(border_rect, border_id, &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_NoNavFocus);
+ //GetForegroundDrawLists(window)->AddRect(border_rect.Min, border_rect.Max, IM_COL32(255, 255, 0, 255));
+ if ((hovered && g.HoveredIdTimer > WINDOWS_RESIZE_FROM_EDGES_FEEDBACK_TIMER) || held)
+ {
+ g.MouseCursor = (axis == ImGuiAxis_X) ? ImGuiMouseCursor_ResizeEW : ImGuiMouseCursor_ResizeNS;
+ if (held)
+ *border_held = border_n;
+ }
+ if (held)
+ {
+ ImVec2 clamp_min(border_n == ImGuiDir_Right ? visibility_rect.Min.x : -FLT_MAX, border_n == ImGuiDir_Down ? visibility_rect.Min.y : -FLT_MAX);
+ ImVec2 clamp_max(border_n == ImGuiDir_Left ? visibility_rect.Max.x : +FLT_MAX, border_n == ImGuiDir_Up ? visibility_rect.Max.y : +FLT_MAX);
+ ImVec2 border_target = window->Pos;
+ border_target[axis] = g.IO.MousePos[axis] - g.ActiveIdClickOffset[axis] + WINDOWS_HOVER_PADDING;
+ border_target = ImClamp(border_target, clamp_min, clamp_max);
+ CalcResizePosSizeFromAnyCorner(window, border_target, ImMin(def.SegmentN1, def.SegmentN2), &pos_target, &size_target);
+ }
+ }
+ PopID();
+
+ // Restore nav layer
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
+
+ // Navigation resize (keyboard/gamepad)
+ if (g.NavWindowingTarget && g.NavWindowingTarget->RootWindow == window)
+ {
+ ImVec2 nav_resize_delta;
+ if (g.NavInputSource == ImGuiInputSource_Keyboard && g.IO.KeyShift)
+ nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_RawKeyboard, ImGuiNavReadMode_Down);
+ if (g.NavInputSource == ImGuiInputSource_Gamepad)
+ nav_resize_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadDPad, ImGuiNavReadMode_Down);
+ if (nav_resize_delta.x != 0.0f || nav_resize_delta.y != 0.0f)
+ {
+ const float NAV_RESIZE_SPEED = 600.0f;
+ nav_resize_delta *= ImFloor(NAV_RESIZE_SPEED * g.IO.DeltaTime * ImMin(g.IO.DisplayFramebufferScale.x, g.IO.DisplayFramebufferScale.y));
+ nav_resize_delta = ImMax(nav_resize_delta, visibility_rect.Min - window->Pos - window->Size);
+ g.NavWindowingToggleLayer = false;
+ g.NavDisableMouseHover = true;
+ resize_grip_col[0] = GetColorU32(ImGuiCol_ResizeGripActive);
+ // FIXME-NAV: Should store and accumulate into a separate size buffer to handle sizing constraints properly, right now a constraint will make us stuck.
+ size_target = CalcWindowSizeAfterConstraint(window, window->SizeFull + nav_resize_delta);
+ }
+ }
+
+ // Apply back modified position/size to window
+ if (size_target.x != FLT_MAX)
+ {
+ window->SizeFull = size_target;
+ MarkIniSettingsDirty(window);
+ }
+ if (pos_target.x != FLT_MAX)
+ {
+ window->Pos = ImFloor(pos_target);
+ MarkIniSettingsDirty(window);
+ }
+
+ window->Size = window->SizeFull;
+ return ret_auto_fit;
+}
+
+static inline void ClampWindowRect(ImGuiWindow* window, const ImRect& visibility_rect)
+{
+ ImGuiContext& g = *GImGui;
+ ImVec2 size_for_clamping = window->Size;
+ if (g.IO.ConfigWindowsMoveFromTitleBarOnly && !(window->Flags & ImGuiWindowFlags_NoTitleBar))
+ size_for_clamping.y = window->TitleBarHeight();
+ window->Pos = ImClamp(window->Pos, visibility_rect.Min - size_for_clamping, visibility_rect.Max);
+}
+
+static void ImGui::RenderWindowOuterBorders(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ float rounding = window->WindowRounding;
+ float border_size = window->WindowBorderSize;
+ if (border_size > 0.0f && !(window->Flags & ImGuiWindowFlags_NoBackground))
+ window->DrawList->AddRect(window->Pos, window->Pos + window->Size, GetColorU32(ImGuiCol_Border), rounding, 0, border_size);
+
+ int border_held = window->ResizeBorderHeld;
+ if (border_held != -1)
+ {
+ const ImGuiResizeBorderDef& def = resize_border_def[border_held];
+ ImRect border_r = GetResizeBorderRect(window, border_held, rounding, 0.0f);
+ window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.SegmentN1) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle - IM_PI * 0.25f, def.OuterAngle);
+ window->DrawList->PathArcTo(ImLerp(border_r.Min, border_r.Max, def.SegmentN2) + ImVec2(0.5f, 0.5f) + def.InnerDir * rounding, rounding, def.OuterAngle, def.OuterAngle + IM_PI * 0.25f);
+ window->DrawList->PathStroke(GetColorU32(ImGuiCol_SeparatorActive), 0, ImMax(2.0f, border_size)); // Thicker than usual
+ }
+ if (g.Style.FrameBorderSize > 0 && !(window->Flags & ImGuiWindowFlags_NoTitleBar))
+ {
+ float y = window->Pos.y + window->TitleBarHeight() - 1;
+ window->DrawList->AddLine(ImVec2(window->Pos.x + border_size, y), ImVec2(window->Pos.x + window->Size.x - border_size, y), GetColorU32(ImGuiCol_Border), g.Style.FrameBorderSize);
+ }
+}
+
+// Draw background and borders
+// Draw and handle scrollbars
+void ImGui::RenderWindowDecorations(ImGuiWindow* window, const ImRect& title_bar_rect, bool title_bar_is_highlight, int resize_grip_count, const ImU32 resize_grip_col[4], float resize_grip_draw_size)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiStyle& style = g.Style;
+ ImGuiWindowFlags flags = window->Flags;
+
+ // Ensure that ScrollBar doesn't read last frame's SkipItems
+ IM_ASSERT(window->BeginCount == 0);
+ window->SkipItems = false;
+
+ // Draw window + handle manual resize
+ // As we highlight the title bar when want_focus is set, multiple reappearing windows will have have their title bar highlighted on their reappearing frame.
+ const float window_rounding = window->WindowRounding;
+ const float window_border_size = window->WindowBorderSize;
+ if (window->Collapsed)
+ {
+ // Title bar only
+ float backup_border_size = style.FrameBorderSize;
+ g.Style.FrameBorderSize = window->WindowBorderSize;
+ ImU32 title_bar_col = GetColorU32((title_bar_is_highlight && !g.NavDisableHighlight) ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBgCollapsed);
+ RenderFrame(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, true, window_rounding);
+ g.Style.FrameBorderSize = backup_border_size;
+ }
+ else
+ {
+ // Window background
+ if (!(flags & ImGuiWindowFlags_NoBackground))
+ {
+ ImU32 bg_col = GetColorU32(GetWindowBgColorIdx(window));
+ bool override_alpha = false;
+ float alpha = 1.0f;
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasBgAlpha)
+ {
+ alpha = g.NextWindowData.BgAlphaVal;
+ override_alpha = true;
+ }
+ if (override_alpha)
+ bg_col = (bg_col & ~IM_COL32_A_MASK) | (IM_F32_TO_INT8_SAT(alpha) << IM_COL32_A_SHIFT);
+ window->DrawList->AddRectFilled(window->Pos + ImVec2(0, window->TitleBarHeight()), window->Pos + window->Size, bg_col, window_rounding, (flags & ImGuiWindowFlags_NoTitleBar) ? 0 : ImDrawFlags_RoundCornersBottom);
+ }
+
+ // Title bar
+ if (!(flags & ImGuiWindowFlags_NoTitleBar))
+ {
+ ImU32 title_bar_col = GetColorU32(title_bar_is_highlight ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg);
+ window->DrawList->AddRectFilled(title_bar_rect.Min, title_bar_rect.Max, title_bar_col, window_rounding, ImDrawFlags_RoundCornersTop);
+ }
+
+ // Menu bar
+ if (flags & ImGuiWindowFlags_MenuBar)
+ {
+ ImRect menu_bar_rect = window->MenuBarRect();
+ menu_bar_rect.ClipWith(window->Rect()); // Soft clipping, in particular child window don't have minimum size covering the menu bar so this is useful for them.
+ window->DrawList->AddRectFilled(menu_bar_rect.Min + ImVec2(window_border_size, 0), menu_bar_rect.Max - ImVec2(window_border_size, 0), GetColorU32(ImGuiCol_MenuBarBg), (flags & ImGuiWindowFlags_NoTitleBar) ? window_rounding : 0.0f, ImDrawFlags_RoundCornersTop);
+ if (style.FrameBorderSize > 0.0f && menu_bar_rect.Max.y < window->Pos.y + window->Size.y)
+ window->DrawList->AddLine(menu_bar_rect.GetBL(), menu_bar_rect.GetBR(), GetColorU32(ImGuiCol_Border), style.FrameBorderSize);
+ }
+
+ // Scrollbars
+ if (window->ScrollbarX)
+ Scrollbar(ImGuiAxis_X);
+ if (window->ScrollbarY)
+ Scrollbar(ImGuiAxis_Y);
+
+ // Render resize grips (after their input handling so we don't have a frame of latency)
+ if (!(flags & ImGuiWindowFlags_NoResize))
+ {
+ for (int resize_grip_n = 0; resize_grip_n < resize_grip_count; resize_grip_n++)
+ {
+ const ImGuiResizeGripDef& grip = resize_grip_def[resize_grip_n];
+ const ImVec2 corner = ImLerp(window->Pos, window->Pos + window->Size, grip.CornerPosN);
+ window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(window_border_size, resize_grip_draw_size) : ImVec2(resize_grip_draw_size, window_border_size)));
+ window->DrawList->PathLineTo(corner + grip.InnerDir * ((resize_grip_n & 1) ? ImVec2(resize_grip_draw_size, window_border_size) : ImVec2(window_border_size, resize_grip_draw_size)));
+ window->DrawList->PathArcToFast(ImVec2(corner.x + grip.InnerDir.x * (window_rounding + window_border_size), corner.y + grip.InnerDir.y * (window_rounding + window_border_size)), window_rounding, grip.AngleMin12, grip.AngleMax12);
+ window->DrawList->PathFillConvex(resize_grip_col[resize_grip_n]);
+ }
+ }
+
+ // Borders
+ RenderWindowOuterBorders(window);
+ }
+}
+
+// Render title text, collapse button, close button
+void ImGui::RenderWindowTitleBarContents(ImGuiWindow* window, const ImRect& title_bar_rect, const char* name, bool* p_open)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiStyle& style = g.Style;
+ ImGuiWindowFlags flags = window->Flags;
+
+ const bool has_close_button = (p_open != NULL);
+ const bool has_collapse_button = !(flags & ImGuiWindowFlags_NoCollapse) && (style.WindowMenuButtonPosition != ImGuiDir_None);
+
+ // Close & Collapse button are on the Menu NavLayer and don't default focus (unless there's nothing else on that layer)
+ // FIXME-NAV: Might want (or not?) to set the equivalent of ImGuiButtonFlags_NoNavFocus so that mouse clicks on standard title bar items don't necessarily set nav/keyboard ref?
+ const ImGuiItemFlags item_flags_backup = g.CurrentItemFlags;
+ g.CurrentItemFlags |= ImGuiItemFlags_NoNavDefaultFocus;
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
+
+ // Layout buttons
+ // FIXME: Would be nice to generalize the subtleties expressed here into reusable code.
+ float pad_l = style.FramePadding.x;
+ float pad_r = style.FramePadding.x;
+ float button_sz = g.FontSize;
+ ImVec2 close_button_pos;
+ ImVec2 collapse_button_pos;
+ if (has_close_button)
+ {
+ pad_r += button_sz;
+ close_button_pos = ImVec2(title_bar_rect.Max.x - pad_r - style.FramePadding.x, title_bar_rect.Min.y);
+ }
+ if (has_collapse_button && style.WindowMenuButtonPosition == ImGuiDir_Right)
+ {
+ pad_r += button_sz;
+ collapse_button_pos = ImVec2(title_bar_rect.Max.x - pad_r - style.FramePadding.x, title_bar_rect.Min.y);
+ }
+ if (has_collapse_button && style.WindowMenuButtonPosition == ImGuiDir_Left)
+ {
+ collapse_button_pos = ImVec2(title_bar_rect.Min.x + pad_l - style.FramePadding.x, title_bar_rect.Min.y);
+ pad_l += button_sz;
+ }
+
+ // Collapse button (submitting first so it gets priority when choosing a navigation init fallback)
+ if (has_collapse_button)
+ if (CollapseButton(window->GetID("#COLLAPSE"), collapse_button_pos))
+ window->WantCollapseToggle = true; // Defer actual collapsing to next frame as we are too far in the Begin() function
+
+ // Close button
+ if (has_close_button)
+ if (CloseButton(window->GetID("#CLOSE"), close_button_pos))
+ *p_open = false;
+
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
+ g.CurrentItemFlags = item_flags_backup;
+
+ // Title bar text (with: horizontal alignment, avoiding collapse/close button, optional "unsaved document" marker)
+ // FIXME: Refactor text alignment facilities along with RenderText helpers, this is WAY too much messy code..
+ const float marker_size_x = (flags & ImGuiWindowFlags_UnsavedDocument) ? button_sz * 0.80f : 0.0f;
+ const ImVec2 text_size = CalcTextSize(name, NULL, true) + ImVec2(marker_size_x, 0.0f);
+
+ // As a nice touch we try to ensure that centered title text doesn't get affected by visibility of Close/Collapse button,
+ // while uncentered title text will still reach edges correctly.
+ if (pad_l > style.FramePadding.x)
+ pad_l += g.Style.ItemInnerSpacing.x;
+ if (pad_r > style.FramePadding.x)
+ pad_r += g.Style.ItemInnerSpacing.x;
+ if (style.WindowTitleAlign.x > 0.0f && style.WindowTitleAlign.x < 1.0f)
+ {
+ float centerness = ImSaturate(1.0f - ImFabs(style.WindowTitleAlign.x - 0.5f) * 2.0f); // 0.0f on either edges, 1.0f on center
+ float pad_extend = ImMin(ImMax(pad_l, pad_r), title_bar_rect.GetWidth() - pad_l - pad_r - text_size.x);
+ pad_l = ImMax(pad_l, pad_extend * centerness);
+ pad_r = ImMax(pad_r, pad_extend * centerness);
+ }
+
+ ImRect layout_r(title_bar_rect.Min.x + pad_l, title_bar_rect.Min.y, title_bar_rect.Max.x - pad_r, title_bar_rect.Max.y);
+ ImRect clip_r(layout_r.Min.x, layout_r.Min.y, ImMin(layout_r.Max.x + g.Style.ItemInnerSpacing.x, title_bar_rect.Max.x), layout_r.Max.y);
+ if (flags & ImGuiWindowFlags_UnsavedDocument)
+ {
+ ImVec2 marker_pos;
+ marker_pos.x = ImClamp(layout_r.Min.x + (layout_r.GetWidth() - text_size.x) * style.WindowTitleAlign.x + text_size.x, layout_r.Min.x, layout_r.Max.x);
+ marker_pos.y = (layout_r.Min.y + layout_r.Max.y) * 0.5f;
+ if (marker_pos.x > layout_r.Min.x)
+ {
+ RenderBullet(window->DrawList, marker_pos, GetColorU32(ImGuiCol_Text));
+ clip_r.Max.x = ImMin(clip_r.Max.x, marker_pos.x - (int)(marker_size_x * 0.5f));
+ }
+ }
+ //if (g.IO.KeyShift) window->DrawList->AddRect(layout_r.Min, layout_r.Max, IM_COL32(255, 128, 0, 255)); // [DEBUG]
+ //if (g.IO.KeyCtrl) window->DrawList->AddRect(clip_r.Min, clip_r.Max, IM_COL32(255, 128, 0, 255)); // [DEBUG]
+ RenderTextClipped(layout_r.Min, layout_r.Max, name, NULL, &text_size, style.WindowTitleAlign, &clip_r);
+}
+
+void ImGui::UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window)
+{
+ window->ParentWindow = parent_window;
+ window->RootWindow = window->RootWindowPopupTree = window->RootWindowForTitleBarHighlight = window->RootWindowForNav = window;
+ if (parent_window && (flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Tooltip))
+ window->RootWindow = parent_window->RootWindow;
+ if (parent_window && (flags & ImGuiWindowFlags_Popup))
+ window->RootWindowPopupTree = parent_window->RootWindowPopupTree;
+ if (parent_window && !(flags & ImGuiWindowFlags_Modal) && (flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)))
+ window->RootWindowForTitleBarHighlight = parent_window->RootWindowForTitleBarHighlight;
+ while (window->RootWindowForNav->Flags & ImGuiWindowFlags_NavFlattened)
+ {
+ IM_ASSERT(window->RootWindowForNav->ParentWindow != NULL);
+ window->RootWindowForNav = window->RootWindowForNav->ParentWindow;
+ }
+}
+
+// When a modal popup is open, newly created windows that want focus (i.e. are not popups and do not specify ImGuiWindowFlags_NoFocusOnAppearing)
+// should be positioned behind that modal window, unless the window was created inside the modal begin-stack.
+// In case of multiple stacked modals newly created window honors begin stack order and does not go below its own modal parent.
+// - Window // FindBlockingModal() returns Modal1
+// - Window // .. returns Modal1
+// - Modal1 // .. returns Modal2
+// - Window // .. returns Modal2
+// - Window // .. returns Modal2
+// - Modal2 // .. returns Modal2
+static ImGuiWindow* ImGui::FindBlockingModal(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.OpenPopupStack.Size <= 0)
+ return NULL;
+
+ // Find a modal that has common parent with specified window. Specified window should be positioned behind that modal.
+ for (int i = g.OpenPopupStack.Size - 1; i >= 0; i--)
+ {
+ ImGuiWindow* popup_window = g.OpenPopupStack.Data[i].Window;
+ if (popup_window == NULL || !(popup_window->Flags & ImGuiWindowFlags_Modal))
+ continue;
+ if (!popup_window->Active && !popup_window->WasActive) // Check WasActive, because this code may run before popup renders on current frame, also check Active to handle newly created windows.
+ continue;
+ if (IsWindowWithinBeginStackOf(window, popup_window)) // Window is rendered over last modal, no render order change needed.
+ break;
+ for (ImGuiWindow* parent = popup_window->ParentWindowInBeginStack->RootWindow; parent != NULL; parent = parent->ParentWindowInBeginStack->RootWindow)
+ if (IsWindowWithinBeginStackOf(window, parent))
+ return popup_window; // Place window above its begin stack parent.
+ }
+ return NULL;
+}
+
+// Push a new Dear ImGui window to add widgets to.
+// - A default window called "Debug" is automatically stacked at the beginning of every frame so you can use widgets without explicitly calling a Begin/End pair.
+// - Begin/End can be called multiple times during the frame with the same window name to append content.
+// - The window name is used as a unique identifier to preserve window information across frames (and save rudimentary information to the .ini file).
+// You can use the "##" or "###" markers to use the same label with different id, or same id with different label. See documentation at the top of this file.
+// - Return false when window is collapsed, so you can early out in your code. You always need to call ImGui::End() even if false is returned.
+// - Passing 'bool* p_open' displays a Close button on the upper-right corner of the window, the pointed value will be set to false when the button is pressed.
+bool ImGui::Begin(const char* name, bool* p_open, ImGuiWindowFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ IM_ASSERT(name != NULL && name[0] != '\0'); // Window name required
+ IM_ASSERT(g.WithinFrameScope); // Forgot to call ImGui::NewFrame()
+ IM_ASSERT(g.FrameCountEnded != g.FrameCount); // Called ImGui::Render() or ImGui::EndFrame() and haven't called ImGui::NewFrame() again yet
+
+ // Find or create
+ ImGuiWindow* window = FindWindowByName(name);
+ const bool window_just_created = (window == NULL);
+ if (window_just_created)
+ window = CreateNewWindow(name, flags);
+ else
+ UpdateWindowInFocusOrderList(window, window_just_created, flags);
+
+ // Automatically disable manual moving/resizing when NoInputs is set
+ if ((flags & ImGuiWindowFlags_NoInputs) == ImGuiWindowFlags_NoInputs)
+ flags |= ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize;
+
+ if (flags & ImGuiWindowFlags_NavFlattened)
+ IM_ASSERT(flags & ImGuiWindowFlags_ChildWindow);
+
+ const int current_frame = g.FrameCount;
+ const bool first_begin_of_the_frame = (window->LastFrameActive != current_frame);
+ window->IsFallbackWindow = (g.CurrentWindowStack.Size == 0 && g.WithinFrameScopeWithImplicitWindow);
+
+ // Update the Appearing flag
+ bool window_just_activated_by_user = (window->LastFrameActive < current_frame - 1); // Not using !WasActive because the implicit "Debug" window would always toggle off->on
+ if (flags & ImGuiWindowFlags_Popup)
+ {
+ ImGuiPopupData& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size];
+ window_just_activated_by_user |= (window->PopupId != popup_ref.PopupId); // We recycle popups so treat window as activated if popup id changed
+ window_just_activated_by_user |= (window != popup_ref.Window);
+ }
+ window->Appearing = window_just_activated_by_user;
+ if (window->Appearing)
+ SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, true);
+
+ // Update Flags, LastFrameActive, BeginOrderXXX fields
+ if (first_begin_of_the_frame)
+ {
+ window->Flags = (ImGuiWindowFlags)flags;
+ window->LastFrameActive = current_frame;
+ window->LastTimeActive = (float)g.Time;
+ window->BeginOrderWithinParent = 0;
+ window->BeginOrderWithinContext = (short)(g.WindowsActiveCount++);
+ }
+ else
+ {
+ flags = window->Flags;
+ }
+
+ // Parent window is latched only on the first call to Begin() of the frame, so further append-calls can be done from a different window stack
+ ImGuiWindow* parent_window_in_stack = g.CurrentWindowStack.empty() ? NULL : g.CurrentWindowStack.back().Window;
+ ImGuiWindow* parent_window = first_begin_of_the_frame ? ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Popup)) ? parent_window_in_stack : NULL) : window->ParentWindow;
+ IM_ASSERT(parent_window != NULL || !(flags & ImGuiWindowFlags_ChildWindow));
+
+ // We allow window memory to be compacted so recreate the base stack when needed.
+ if (window->IDStack.Size == 0)
+ window->IDStack.push_back(window->ID);
+
+ // Add to stack
+ // We intentionally set g.CurrentWindow to NULL to prevent usage until when the viewport is set, then will call SetCurrentWindow()
+ g.CurrentWindow = window;
+ ImGuiWindowStackData window_stack_data;
+ window_stack_data.Window = window;
+ window_stack_data.ParentLastItemDataBackup = g.LastItemData;
+ window_stack_data.StackSizesOnBegin.SetToCurrentState();
+ g.CurrentWindowStack.push_back(window_stack_data);
+ g.CurrentWindow = NULL;
+ if (flags & ImGuiWindowFlags_ChildMenu)
+ g.BeginMenuCount++;
+
+ if (flags & ImGuiWindowFlags_Popup)
+ {
+ ImGuiPopupData& popup_ref = g.OpenPopupStack[g.BeginPopupStack.Size];
+ popup_ref.Window = window;
+ popup_ref.ParentNavLayer = parent_window_in_stack->DC.NavLayerCurrent;
+ g.BeginPopupStack.push_back(popup_ref);
+ window->PopupId = popup_ref.PopupId;
+ }
+
+ // Update ->RootWindow and others pointers (before any possible call to FocusWindow)
+ if (first_begin_of_the_frame)
+ {
+ UpdateWindowParentAndRootLinks(window, flags, parent_window);
+ window->ParentWindowInBeginStack = parent_window_in_stack;
+ }
+
+ // Process SetNextWindow***() calls
+ // (FIXME: Consider splitting the HasXXX flags into X/Y components
+ bool window_pos_set_by_api = false;
+ bool window_size_x_set_by_api = false, window_size_y_set_by_api = false;
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos)
+ {
+ window_pos_set_by_api = (window->SetWindowPosAllowFlags & g.NextWindowData.PosCond) != 0;
+ if (window_pos_set_by_api && ImLengthSqr(g.NextWindowData.PosPivotVal) > 0.00001f)
+ {
+ // May be processed on the next frame if this is our first frame and we are measuring size
+ // FIXME: Look into removing the branch so everything can go through this same code path for consistency.
+ window->SetWindowPosVal = g.NextWindowData.PosVal;
+ window->SetWindowPosPivot = g.NextWindowData.PosPivotVal;
+ window->SetWindowPosAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
+ }
+ else
+ {
+ SetWindowPos(window, g.NextWindowData.PosVal, g.NextWindowData.PosCond);
+ }
+ }
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize)
+ {
+ window_size_x_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.x > 0.0f);
+ window_size_y_set_by_api = (window->SetWindowSizeAllowFlags & g.NextWindowData.SizeCond) != 0 && (g.NextWindowData.SizeVal.y > 0.0f);
+ SetWindowSize(window, g.NextWindowData.SizeVal, g.NextWindowData.SizeCond);
+ }
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasScroll)
+ {
+ if (g.NextWindowData.ScrollVal.x >= 0.0f)
+ {
+ window->ScrollTarget.x = g.NextWindowData.ScrollVal.x;
+ window->ScrollTargetCenterRatio.x = 0.0f;
+ }
+ if (g.NextWindowData.ScrollVal.y >= 0.0f)
+ {
+ window->ScrollTarget.y = g.NextWindowData.ScrollVal.y;
+ window->ScrollTargetCenterRatio.y = 0.0f;
+ }
+ }
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasContentSize)
+ window->ContentSizeExplicit = g.NextWindowData.ContentSizeVal;
+ else if (first_begin_of_the_frame)
+ window->ContentSizeExplicit = ImVec2(0.0f, 0.0f);
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasCollapsed)
+ SetWindowCollapsed(window, g.NextWindowData.CollapsedVal, g.NextWindowData.CollapsedCond);
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasFocus)
+ FocusWindow(window);
+ if (window->Appearing)
+ SetWindowConditionAllowFlags(window, ImGuiCond_Appearing, false);
+
+ // When reusing window again multiple times a frame, just append content (don't need to setup again)
+ if (first_begin_of_the_frame)
+ {
+ // Initialize
+ const bool window_is_child_tooltip = (flags & ImGuiWindowFlags_ChildWindow) && (flags & ImGuiWindowFlags_Tooltip); // FIXME-WIP: Undocumented behavior of Child+Tooltip for pinned tooltip (#1345)
+ const bool window_just_appearing_after_hidden_for_resize = (window->HiddenFramesCannotSkipItems > 0);
+ window->Active = true;
+ window->HasCloseButton = (p_open != NULL);
+ window->ClipRect = ImVec4(-FLT_MAX, -FLT_MAX, +FLT_MAX, +FLT_MAX);
+ window->IDStack.resize(1);
+ window->DrawList->_ResetForNewFrame();
+ window->DC.CurrentTableIdx = -1;
+
+ // Restore buffer capacity when woken from a compacted state, to avoid
+ if (window->MemoryCompacted)
+ GcAwakeTransientWindowBuffers(window);
+
+ // Update stored window name when it changes (which can _only_ happen with the "###" operator, so the ID would stay unchanged).
+ // The title bar always display the 'name' parameter, so we only update the string storage if it needs to be visible to the end-user elsewhere.
+ bool window_title_visible_elsewhere = false;
+ if (g.NavWindowingListWindow != NULL && (window->Flags & ImGuiWindowFlags_NoNavFocus) == 0) // Window titles visible when using CTRL+TAB
+ window_title_visible_elsewhere = true;
+ if (window_title_visible_elsewhere && !window_just_created && strcmp(name, window->Name) != 0)
+ {
+ size_t buf_len = (size_t)window->NameBufLen;
+ window->Name = ImStrdupcpy(window->Name, &buf_len, name);
+ window->NameBufLen = (int)buf_len;
+ }
+
+ // UPDATE CONTENTS SIZE, UPDATE HIDDEN STATUS
+
+ // Update contents size from last frame for auto-fitting (or use explicit size)
+ CalcWindowContentSizes(window, &window->ContentSize, &window->ContentSizeIdeal);
+ if (window->HiddenFramesCanSkipItems > 0)
+ window->HiddenFramesCanSkipItems--;
+ if (window->HiddenFramesCannotSkipItems > 0)
+ window->HiddenFramesCannotSkipItems--;
+ if (window->HiddenFramesForRenderOnly > 0)
+ window->HiddenFramesForRenderOnly--;
+
+ // Hide new windows for one frame until they calculate their size
+ if (window_just_created && (!window_size_x_set_by_api || !window_size_y_set_by_api))
+ window->HiddenFramesCannotSkipItems = 1;
+
+ // Hide popup/tooltip window when re-opening while we measure size (because we recycle the windows)
+ // We reset Size/ContentSize for reappearing popups/tooltips early in this function, so further code won't be tempted to use the old size.
+ if (window_just_activated_by_user && (flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) != 0)
+ {
+ window->HiddenFramesCannotSkipItems = 1;
+ if (flags & ImGuiWindowFlags_AlwaysAutoResize)
+ {
+ if (!window_size_x_set_by_api)
+ window->Size.x = window->SizeFull.x = 0.f;
+ if (!window_size_y_set_by_api)
+ window->Size.y = window->SizeFull.y = 0.f;
+ window->ContentSize = window->ContentSizeIdeal = ImVec2(0.f, 0.f);
+ }
+ }
+
+ // SELECT VIEWPORT
+ // FIXME-VIEWPORT: In the docking/viewport branch, this is the point where we select the current viewport (which may affect the style)
+
+ ImGuiViewportP* viewport = (ImGuiViewportP*)(void*)GetMainViewport();
+ SetWindowViewport(window, viewport);
+ SetCurrentWindow(window);
+
+ // LOCK BORDER SIZE AND PADDING FOR THE FRAME (so that altering them doesn't cause inconsistencies)
+
+ if (flags & ImGuiWindowFlags_ChildWindow)
+ window->WindowBorderSize = style.ChildBorderSize;
+ else
+ window->WindowBorderSize = ((flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_Tooltip)) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupBorderSize : style.WindowBorderSize;
+ window->WindowPadding = style.WindowPadding;
+ if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & (ImGuiWindowFlags_AlwaysUseWindowPadding | ImGuiWindowFlags_Popup)) && window->WindowBorderSize == 0.0f)
+ window->WindowPadding = ImVec2(0.0f, (flags & ImGuiWindowFlags_MenuBar) ? style.WindowPadding.y : 0.0f);
+
+ // Lock menu offset so size calculation can use it as menu-bar windows need a minimum size.
+ window->DC.MenuBarOffset.x = ImMax(ImMax(window->WindowPadding.x, style.ItemSpacing.x), g.NextWindowData.MenuBarOffsetMinVal.x);
+ window->DC.MenuBarOffset.y = g.NextWindowData.MenuBarOffsetMinVal.y;
+
+ // Collapse window by double-clicking on title bar
+ // At this point we don't have a clipping rectangle setup yet, so we can use the title bar area for hit detection and drawing
+ if (!(flags & ImGuiWindowFlags_NoTitleBar) && !(flags & ImGuiWindowFlags_NoCollapse))
+ {
+ // We don't use a regular button+id to test for double-click on title bar (mostly due to legacy reason, could be fixed), so verify that we don't have items over the title bar.
+ ImRect title_bar_rect = window->TitleBarRect();
+ if (g.HoveredWindow == window && g.HoveredId == 0 && g.HoveredIdPreviousFrame == 0 && IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max) && g.IO.MouseClickedCount[0] == 2)
+ window->WantCollapseToggle = true;
+ if (window->WantCollapseToggle)
+ {
+ window->Collapsed = !window->Collapsed;
+ MarkIniSettingsDirty(window);
+ }
+ }
+ else
+ {
+ window->Collapsed = false;
+ }
+ window->WantCollapseToggle = false;
+
+ // SIZE
+
+ // Calculate auto-fit size, handle automatic resize
+ const ImVec2 size_auto_fit = CalcWindowAutoFitSize(window, window->ContentSizeIdeal);
+ bool use_current_size_for_scrollbar_x = window_just_created;
+ bool use_current_size_for_scrollbar_y = window_just_created;
+ if ((flags & ImGuiWindowFlags_AlwaysAutoResize) && !window->Collapsed)
+ {
+ // Using SetNextWindowSize() overrides ImGuiWindowFlags_AlwaysAutoResize, so it can be used on tooltips/popups, etc.
+ if (!window_size_x_set_by_api)
+ {
+ window->SizeFull.x = size_auto_fit.x;
+ use_current_size_for_scrollbar_x = true;
+ }
+ if (!window_size_y_set_by_api)
+ {
+ window->SizeFull.y = size_auto_fit.y;
+ use_current_size_for_scrollbar_y = true;
+ }
+ }
+ else if (window->AutoFitFramesX > 0 || window->AutoFitFramesY > 0)
+ {
+ // Auto-fit may only grow window during the first few frames
+ // We still process initial auto-fit on collapsed windows to get a window width, but otherwise don't honor ImGuiWindowFlags_AlwaysAutoResize when collapsed.
+ if (!window_size_x_set_by_api && window->AutoFitFramesX > 0)
+ {
+ window->SizeFull.x = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.x, size_auto_fit.x) : size_auto_fit.x;
+ use_current_size_for_scrollbar_x = true;
+ }
+ if (!window_size_y_set_by_api && window->AutoFitFramesY > 0)
+ {
+ window->SizeFull.y = window->AutoFitOnlyGrows ? ImMax(window->SizeFull.y, size_auto_fit.y) : size_auto_fit.y;
+ use_current_size_for_scrollbar_y = true;
+ }
+ if (!window->Collapsed)
+ MarkIniSettingsDirty(window);
+ }
+
+ // Apply minimum/maximum window size constraints and final size
+ window->SizeFull = CalcWindowSizeAfterConstraint(window, window->SizeFull);
+ window->Size = window->Collapsed && !(flags & ImGuiWindowFlags_ChildWindow) ? window->TitleBarRect().GetSize() : window->SizeFull;
+
+ // Decoration size
+ const float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight();
+
+ // POSITION
+
+ // Popup latch its initial position, will position itself when it appears next frame
+ if (window_just_activated_by_user)
+ {
+ window->AutoPosLastDirection = ImGuiDir_None;
+ if ((flags & ImGuiWindowFlags_Popup) != 0 && !(flags & ImGuiWindowFlags_Modal) && !window_pos_set_by_api) // FIXME: BeginPopup() could use SetNextWindowPos()
+ window->Pos = g.BeginPopupStack.back().OpenPopupPos;
+ }
+
+ // Position child window
+ if (flags & ImGuiWindowFlags_ChildWindow)
+ {
+ IM_ASSERT(parent_window && parent_window->Active);
+ window->BeginOrderWithinParent = (short)parent_window->DC.ChildWindows.Size;
+ parent_window->DC.ChildWindows.push_back(window);
+ if (!(flags & ImGuiWindowFlags_Popup) && !window_pos_set_by_api && !window_is_child_tooltip)
+ window->Pos = parent_window->DC.CursorPos;
+ }
+
+ const bool window_pos_with_pivot = (window->SetWindowPosVal.x != FLT_MAX && window->HiddenFramesCannotSkipItems == 0);
+ if (window_pos_with_pivot)
+ SetWindowPos(window, window->SetWindowPosVal - window->Size * window->SetWindowPosPivot, 0); // Position given a pivot (e.g. for centering)
+ else if ((flags & ImGuiWindowFlags_ChildMenu) != 0)
+ window->Pos = FindBestWindowPosForPopup(window);
+ else if ((flags & ImGuiWindowFlags_Popup) != 0 && !window_pos_set_by_api && window_just_appearing_after_hidden_for_resize)
+ window->Pos = FindBestWindowPosForPopup(window);
+ else if ((flags & ImGuiWindowFlags_Tooltip) != 0 && !window_pos_set_by_api && !window_is_child_tooltip)
+ window->Pos = FindBestWindowPosForPopup(window);
+
+ // Calculate the range of allowed position for that window (to be movable and visible past safe area padding)
+ // When clamping to stay visible, we will enforce that window->Pos stays inside of visibility_rect.
+ ImRect viewport_rect(viewport->GetMainRect());
+ ImRect viewport_work_rect(viewport->GetWorkRect());
+ ImVec2 visibility_padding = ImMax(style.DisplayWindowPadding, style.DisplaySafeAreaPadding);
+ ImRect visibility_rect(viewport_work_rect.Min + visibility_padding, viewport_work_rect.Max - visibility_padding);
+
+ // Clamp position/size so window stays visible within its viewport or monitor
+ // Ignore zero-sized display explicitly to avoid losing positions if a window manager reports zero-sized window when initializing or minimizing.
+ if (!window_pos_set_by_api && !(flags & ImGuiWindowFlags_ChildWindow) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0)
+ if (viewport_rect.GetWidth() > 0.0f && viewport_rect.GetHeight() > 0.0f)
+ ClampWindowRect(window, visibility_rect);
+ window->Pos = ImFloor(window->Pos);
+
+ // Lock window rounding for the frame (so that altering them doesn't cause inconsistencies)
+ // Large values tend to lead to variety of artifacts and are not recommended.
+ window->WindowRounding = (flags & ImGuiWindowFlags_ChildWindow) ? style.ChildRounding : ((flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiWindowFlags_Modal)) ? style.PopupRounding : style.WindowRounding;
+
+ // For windows with title bar or menu bar, we clamp to FrameHeight(FontSize + FramePadding.y * 2.0f) to completely hide artifacts.
+ //if ((window->Flags & ImGuiWindowFlags_MenuBar) || !(window->Flags & ImGuiWindowFlags_NoTitleBar))
+ // window->WindowRounding = ImMin(window->WindowRounding, g.FontSize + style.FramePadding.y * 2.0f);
+
+ // Apply window focus (new and reactivated windows are moved to front)
+ bool want_focus = false;
+ if (window_just_activated_by_user && !(flags & ImGuiWindowFlags_NoFocusOnAppearing))
+ {
+ if (flags & ImGuiWindowFlags_Popup)
+ want_focus = true;
+ else if ((flags & (ImGuiWindowFlags_ChildWindow | ImGuiWindowFlags_Tooltip)) == 0)
+ want_focus = true;
+
+ ImGuiWindow* modal = GetTopMostPopupModal();
+ if (modal != NULL && !IsWindowWithinBeginStackOf(window, modal))
+ {
+ // Avoid focusing a window that is created outside of active modal. This will prevent active modal from being closed.
+ // Since window is not focused it would reappear at the same display position like the last time it was visible.
+ // In case of completely new windows it would go to the top (over current modal), but input to such window would still be blocked by modal.
+ // Position window behind a modal that is not a begin-parent of this window.
+ want_focus = false;
+ if (window == window->RootWindow)
+ {
+ ImGuiWindow* blocking_modal = FindBlockingModal(window);
+ IM_ASSERT(blocking_modal != NULL);
+ BringWindowToDisplayBehind(window, blocking_modal);
+ }
+ }
+ }
+
+ // [Test Engine] Register whole window in the item system
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ if (g.TestEngineHookItems)
+ {
+ IM_ASSERT(window->IDStack.Size == 1);
+ window->IDStack.Size = 0;
+ IMGUI_TEST_ENGINE_ITEM_ADD(window->Rect(), window->ID);
+ IMGUI_TEST_ENGINE_ITEM_INFO(window->ID, window->Name, (g.HoveredWindow == window) ? ImGuiItemStatusFlags_HoveredRect : 0);
+ window->IDStack.Size = 1;
+ }
+#endif
+
+ // Handle manual resize: Resize Grips, Borders, Gamepad
+ int border_held = -1;
+ ImU32 resize_grip_col[4] = {};
+ const int resize_grip_count = g.IO.ConfigWindowsResizeFromEdges ? 2 : 1; // Allow resize from lower-left if we have the mouse cursor feedback for it.
+ const float resize_grip_draw_size = IM_FLOOR(ImMax(g.FontSize * 1.10f, window->WindowRounding + 1.0f + g.FontSize * 0.2f));
+ if (!window->Collapsed)
+ if (UpdateWindowManualResize(window, size_auto_fit, &border_held, resize_grip_count, &resize_grip_col[0], visibility_rect))
+ use_current_size_for_scrollbar_x = use_current_size_for_scrollbar_y = true;
+ window->ResizeBorderHeld = (signed char)border_held;
+
+ // SCROLLBAR VISIBILITY
+
+ // Update scrollbar visibility (based on the Size that was effective during last frame or the auto-resized Size).
+ if (!window->Collapsed)
+ {
+ // When reading the current size we need to read it after size constraints have been applied.
+ // When we use InnerRect here we are intentionally reading last frame size, same for ScrollbarSizes values before we set them again.
+ ImVec2 avail_size_from_current_frame = ImVec2(window->SizeFull.x, window->SizeFull.y - decoration_up_height);
+ ImVec2 avail_size_from_last_frame = window->InnerRect.GetSize() + window->ScrollbarSizes;
+ ImVec2 needed_size_from_last_frame = window_just_created ? ImVec2(0, 0) : window->ContentSize + window->WindowPadding * 2.0f;
+ float size_x_for_scrollbars = use_current_size_for_scrollbar_x ? avail_size_from_current_frame.x : avail_size_from_last_frame.x;
+ float size_y_for_scrollbars = use_current_size_for_scrollbar_y ? avail_size_from_current_frame.y : avail_size_from_last_frame.y;
+ //bool scrollbar_y_from_last_frame = window->ScrollbarY; // FIXME: May want to use that in the ScrollbarX expression? How many pros vs cons?
+ window->ScrollbarY = (flags & ImGuiWindowFlags_AlwaysVerticalScrollbar) || ((needed_size_from_last_frame.y > size_y_for_scrollbars) && !(flags & ImGuiWindowFlags_NoScrollbar));
+ window->ScrollbarX = (flags & ImGuiWindowFlags_AlwaysHorizontalScrollbar) || ((needed_size_from_last_frame.x > size_x_for_scrollbars - (window->ScrollbarY ? style.ScrollbarSize : 0.0f)) && !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar));
+ if (window->ScrollbarX && !window->ScrollbarY)
+ window->ScrollbarY = (needed_size_from_last_frame.y > size_y_for_scrollbars) && !(flags & ImGuiWindowFlags_NoScrollbar);
+ window->ScrollbarSizes = ImVec2(window->ScrollbarY ? style.ScrollbarSize : 0.0f, window->ScrollbarX ? style.ScrollbarSize : 0.0f);
+ }
+
+ // UPDATE RECTANGLES (1- THOSE NOT AFFECTED BY SCROLLING)
+ // Update various regions. Variables they depends on should be set above in this function.
+ // We set this up after processing the resize grip so that our rectangles doesn't lag by a frame.
+
+ // Outer rectangle
+ // Not affected by window border size. Used by:
+ // - FindHoveredWindow() (w/ extra padding when border resize is enabled)
+ // - Begin() initial clipping rect for drawing window background and borders.
+ // - Begin() clipping whole child
+ const ImRect host_rect = ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip) ? parent_window->ClipRect : viewport_rect;
+ const ImRect outer_rect = window->Rect();
+ const ImRect title_bar_rect = window->TitleBarRect();
+ window->OuterRectClipped = outer_rect;
+ window->OuterRectClipped.ClipWith(host_rect);
+
+ // Inner rectangle
+ // Not affected by window border size. Used by:
+ // - InnerClipRect
+ // - ScrollToRectEx()
+ // - NavUpdatePageUpPageDown()
+ // - Scrollbar()
+ window->InnerRect.Min.x = window->Pos.x;
+ window->InnerRect.Min.y = window->Pos.y + decoration_up_height;
+ window->InnerRect.Max.x = window->Pos.x + window->Size.x - window->ScrollbarSizes.x;
+ window->InnerRect.Max.y = window->Pos.y + window->Size.y - window->ScrollbarSizes.y;
+
+ // Inner clipping rectangle.
+ // Will extend a little bit outside the normal work region.
+ // This is to allow e.g. Selectable or CollapsingHeader or some separators to cover that space.
+ // Force round operator last to ensure that e.g. (int)(max.x-min.x) in user's render code produce correct result.
+ // Note that if our window is collapsed we will end up with an inverted (~null) clipping rectangle which is the correct behavior.
+ // Affected by window/frame border size. Used by:
+ // - Begin() initial clip rect
+ float top_border_size = (((flags & ImGuiWindowFlags_MenuBar) || !(flags & ImGuiWindowFlags_NoTitleBar)) ? style.FrameBorderSize : window->WindowBorderSize);
+ window->InnerClipRect.Min.x = ImFloor(0.5f + window->InnerRect.Min.x + ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize));
+ window->InnerClipRect.Min.y = ImFloor(0.5f + window->InnerRect.Min.y + top_border_size);
+ window->InnerClipRect.Max.x = ImFloor(0.5f + window->InnerRect.Max.x - ImMax(ImFloor(window->WindowPadding.x * 0.5f), window->WindowBorderSize));
+ window->InnerClipRect.Max.y = ImFloor(0.5f + window->InnerRect.Max.y - window->WindowBorderSize);
+ window->InnerClipRect.ClipWithFull(host_rect);
+
+ // Default item width. Make it proportional to window size if window manually resizes
+ if (window->Size.x > 0.0f && !(flags & ImGuiWindowFlags_Tooltip) && !(flags & ImGuiWindowFlags_AlwaysAutoResize))
+ window->ItemWidthDefault = ImFloor(window->Size.x * 0.65f);
+ else
+ window->ItemWidthDefault = ImFloor(g.FontSize * 16.0f);
+
+ // SCROLLING
+
+ // Lock down maximum scrolling
+ // The value of ScrollMax are ahead from ScrollbarX/ScrollbarY which is intentionally using InnerRect from previous rect in order to accommodate
+ // for right/bottom aligned items without creating a scrollbar.
+ window->ScrollMax.x = ImMax(0.0f, window->ContentSize.x + window->WindowPadding.x * 2.0f - window->InnerRect.GetWidth());
+ window->ScrollMax.y = ImMax(0.0f, window->ContentSize.y + window->WindowPadding.y * 2.0f - window->InnerRect.GetHeight());
+
+ // Apply scrolling
+ window->Scroll = CalcNextScrollFromScrollTargetAndClamp(window);
+ window->ScrollTarget = ImVec2(FLT_MAX, FLT_MAX);
+
+ // DRAWING
+
+ // Setup draw list and outer clipping rectangle
+ IM_ASSERT(window->DrawList->CmdBuffer.Size == 1 && window->DrawList->CmdBuffer[0].ElemCount == 0);
+ window->DrawList->PushTextureID(g.Font->ContainerAtlas->TexID);
+ PushClipRect(host_rect.Min, host_rect.Max, false);
+
+ // Child windows can render their decoration (bg color, border, scrollbars, etc.) within their parent to save a draw call (since 1.71)
+ // When using overlapping child windows, this will break the assumption that child z-order is mapped to submission order.
+ // FIXME: User code may rely on explicit sorting of overlapping child window and would need to disable this somehow. Please get in contact if you are affected (github #4493)
+ {
+ bool render_decorations_in_parent = false;
+ if ((flags & ImGuiWindowFlags_ChildWindow) && !(flags & ImGuiWindowFlags_Popup) && !window_is_child_tooltip)
+ {
+ // - We test overlap with the previous child window only (testing all would end up being O(log N) not a good investment here)
+ // - We disable this when the parent window has zero vertices, which is a common pattern leading to laying out multiple overlapping childs
+ ImGuiWindow* previous_child = parent_window->DC.ChildWindows.Size >= 2 ? parent_window->DC.ChildWindows[parent_window->DC.ChildWindows.Size - 2] : NULL;
+ bool previous_child_overlapping = previous_child ? previous_child->Rect().Overlaps(window->Rect()) : false;
+ bool parent_is_empty = parent_window->DrawList->VtxBuffer.Size > 0;
+ if (window->DrawList->CmdBuffer.back().ElemCount == 0 && parent_is_empty && !previous_child_overlapping)
+ render_decorations_in_parent = true;
+ }
+ if (render_decorations_in_parent)
+ window->DrawList = parent_window->DrawList;
+
+ // Handle title bar, scrollbar, resize grips and resize borders
+ const ImGuiWindow* window_to_highlight = g.NavWindowingTarget ? g.NavWindowingTarget : g.NavWindow;
+ const bool title_bar_is_highlight = want_focus || (window_to_highlight && window->RootWindowForTitleBarHighlight == window_to_highlight->RootWindowForTitleBarHighlight);
+ RenderWindowDecorations(window, title_bar_rect, title_bar_is_highlight, resize_grip_count, resize_grip_col, resize_grip_draw_size);
+
+ if (render_decorations_in_parent)
+ window->DrawList = &window->DrawListInst;
+ }
+
+ // UPDATE RECTANGLES (2- THOSE AFFECTED BY SCROLLING)
+
+ // Work rectangle.
+ // Affected by window padding and border size. Used by:
+ // - Columns() for right-most edge
+ // - TreeNode(), CollapsingHeader() for right-most edge
+ // - BeginTabBar() for right-most edge
+ const bool allow_scrollbar_x = !(flags & ImGuiWindowFlags_NoScrollbar) && (flags & ImGuiWindowFlags_HorizontalScrollbar);
+ const bool allow_scrollbar_y = !(flags & ImGuiWindowFlags_NoScrollbar);
+ const float work_rect_size_x = (window->ContentSizeExplicit.x != 0.0f ? window->ContentSizeExplicit.x : ImMax(allow_scrollbar_x ? window->ContentSize.x : 0.0f, window->Size.x - window->WindowPadding.x * 2.0f - window->ScrollbarSizes.x));
+ const float work_rect_size_y = (window->ContentSizeExplicit.y != 0.0f ? window->ContentSizeExplicit.y : ImMax(allow_scrollbar_y ? window->ContentSize.y : 0.0f, window->Size.y - window->WindowPadding.y * 2.0f - decoration_up_height - window->ScrollbarSizes.y));
+ window->WorkRect.Min.x = ImFloor(window->InnerRect.Min.x - window->Scroll.x + ImMax(window->WindowPadding.x, window->WindowBorderSize));
+ window->WorkRect.Min.y = ImFloor(window->InnerRect.Min.y - window->Scroll.y + ImMax(window->WindowPadding.y, window->WindowBorderSize));
+ window->WorkRect.Max.x = window->WorkRect.Min.x + work_rect_size_x;
+ window->WorkRect.Max.y = window->WorkRect.Min.y + work_rect_size_y;
+ window->ParentWorkRect = window->WorkRect;
+
+ // [LEGACY] Content Region
+ // FIXME-OBSOLETE: window->ContentRegionRect.Max is currently very misleading / partly faulty, but some BeginChild() patterns relies on it.
+ // Used by:
+ // - Mouse wheel scrolling + many other things
+ window->ContentRegionRect.Min.x = window->Pos.x - window->Scroll.x + window->WindowPadding.x;
+ window->ContentRegionRect.Min.y = window->Pos.y - window->Scroll.y + window->WindowPadding.y + decoration_up_height;
+ window->ContentRegionRect.Max.x = window->ContentRegionRect.Min.x + (window->ContentSizeExplicit.x != 0.0f ? window->ContentSizeExplicit.x : (window->Size.x - window->WindowPadding.x * 2.0f - window->ScrollbarSizes.x));
+ window->ContentRegionRect.Max.y = window->ContentRegionRect.Min.y + (window->ContentSizeExplicit.y != 0.0f ? window->ContentSizeExplicit.y : (window->Size.y - window->WindowPadding.y * 2.0f - decoration_up_height - window->ScrollbarSizes.y));
+
+ // Setup drawing context
+ // (NB: That term "drawing context / DC" lost its meaning a long time ago. Initially was meant to hold transient data only. Nowadays difference between window-> and window->DC-> is dubious.)
+ window->DC.Indent.x = 0.0f + window->WindowPadding.x - window->Scroll.x;
+ window->DC.GroupOffset.x = 0.0f;
+ window->DC.ColumnsOffset.x = 0.0f;
+
+ // Record the loss of precision of CursorStartPos which can happen due to really large scrolling amount.
+ // This is used by clipper to compensate and fix the most common use case of large scroll area. Easy and cheap, next best thing compared to switching everything to double or ImU64.
+ double start_pos_highp_x = (double)window->Pos.x + window->WindowPadding.x - (double)window->Scroll.x + window->DC.ColumnsOffset.x;
+ double start_pos_highp_y = (double)window->Pos.y + window->WindowPadding.y - (double)window->Scroll.y + decoration_up_height;
+ window->DC.CursorStartPos = ImVec2((float)start_pos_highp_x, (float)start_pos_highp_y);
+ window->DC.CursorStartPosLossyness = ImVec2((float)(start_pos_highp_x - window->DC.CursorStartPos.x), (float)(start_pos_highp_y - window->DC.CursorStartPos.y));
+ window->DC.CursorPos = window->DC.CursorStartPos;
+ window->DC.CursorPosPrevLine = window->DC.CursorPos;
+ window->DC.CursorMaxPos = window->DC.CursorStartPos;
+ window->DC.IdealMaxPos = window->DC.CursorStartPos;
+ window->DC.CurrLineSize = window->DC.PrevLineSize = ImVec2(0.0f, 0.0f);
+ window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset = 0.0f;
+ window->DC.IsSameLine = false;
+
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
+ window->DC.NavLayersActiveMask = window->DC.NavLayersActiveMaskNext;
+ window->DC.NavLayersActiveMaskNext = 0x00;
+ window->DC.NavHideHighlightOneFrame = false;
+ window->DC.NavHasScroll = (window->ScrollMax.y > 0.0f);
+
+ window->DC.MenuBarAppending = false;
+ window->DC.MenuColumns.Update(style.ItemSpacing.x, window_just_activated_by_user);
+ window->DC.TreeDepth = 0;
+ window->DC.TreeJumpToParentOnPopMask = 0x00;
+ window->DC.ChildWindows.resize(0);
+ window->DC.StateStorage = &window->StateStorage;
+ window->DC.CurrentColumns = NULL;
+ window->DC.LayoutType = ImGuiLayoutType_Vertical;
+ window->DC.ParentLayoutType = parent_window ? parent_window->DC.LayoutType : ImGuiLayoutType_Vertical;
+
+ window->DC.ItemWidth = window->ItemWidthDefault;
+ window->DC.TextWrapPos = -1.0f; // disabled
+ window->DC.ItemWidthStack.resize(0);
+ window->DC.TextWrapPosStack.resize(0);
+
+ if (window->AutoFitFramesX > 0)
+ window->AutoFitFramesX--;
+ if (window->AutoFitFramesY > 0)
+ window->AutoFitFramesY--;
+
+ // Apply focus (we need to call FocusWindow() AFTER setting DC.CursorStartPos so our initial navigation reference rectangle can start around there)
+ if (want_focus)
+ {
+ FocusWindow(window);
+ NavInitWindow(window, false); // <-- this is in the way for us to be able to defer and sort reappearing FocusWindow() calls
+ }
+
+ // Title bar
+ if (!(flags & ImGuiWindowFlags_NoTitleBar))
+ RenderWindowTitleBarContents(window, ImRect(title_bar_rect.Min.x + window->WindowBorderSize, title_bar_rect.Min.y, title_bar_rect.Max.x - window->WindowBorderSize, title_bar_rect.Max.y), name, p_open);
+
+ // Clear hit test shape every frame
+ window->HitTestHoleSize.x = window->HitTestHoleSize.y = 0;
+
+ // Pressing CTRL+C while holding on a window copy its content to the clipboard
+ // This works but 1. doesn't handle multiple Begin/End pairs, 2. recursing into another Begin/End pair - so we need to work that out and add better logging scope.
+ // Maybe we can support CTRL+C on every element?
+ /*
+ //if (g.NavWindow == window && g.ActiveId == 0)
+ if (g.ActiveId == window->MoveId)
+ if (g.IO.KeyCtrl && IsKeyPressedMap(ImGuiKey_C))
+ LogToClipboard();
+ */
+
+ // We fill last item data based on Title Bar/Tab, in order for IsItemHovered() and IsItemActive() to be usable after Begin().
+ // This is useful to allow creating context menus on title bar only, etc.
+ SetLastItemData(window->MoveId, g.CurrentItemFlags, IsMouseHoveringRect(title_bar_rect.Min, title_bar_rect.Max, false) ? ImGuiItemStatusFlags_HoveredRect : 0, title_bar_rect);
+
+ // [Test Engine] Register title bar / tab
+ if (!(window->Flags & ImGuiWindowFlags_NoTitleBar))
+ IMGUI_TEST_ENGINE_ITEM_ADD(g.LastItemData.Rect, g.LastItemData.ID);
+ }
+ else
+ {
+ // Append
+ SetCurrentWindow(window);
+ }
+
+ // Pull/inherit current state
+ window->DC.NavFocusScopeIdCurrent = (flags & ImGuiWindowFlags_ChildWindow) ? parent_window->DC.NavFocusScopeIdCurrent : window->GetID("#FOCUSSCOPE"); // Inherit from parent only // -V595
+
+ PushClipRect(window->InnerClipRect.Min, window->InnerClipRect.Max, true);
+
+ // Clear 'accessed' flag last thing (After PushClipRect which will set the flag. We want the flag to stay false when the default "Debug" window is unused)
+ window->WriteAccessed = false;
+ window->BeginCount++;
+ g.NextWindowData.ClearFlags();
+
+ // Update visibility
+ if (first_begin_of_the_frame)
+ {
+ if (flags & ImGuiWindowFlags_ChildWindow)
+ {
+ // Child window can be out of sight and have "negative" clip windows.
+ // Mark them as collapsed so commands are skipped earlier (we can't manually collapse them because they have no title bar).
+ IM_ASSERT((flags & ImGuiWindowFlags_NoTitleBar) != 0);
+ if (!(flags & ImGuiWindowFlags_AlwaysAutoResize) && window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0) // FIXME: Doesn't make sense for ChildWindow??
+ {
+ const bool nav_request = (flags & ImGuiWindowFlags_NavFlattened) && (g.NavAnyRequest && g.NavWindow && g.NavWindow->RootWindowForNav == window->RootWindowForNav);
+ if (!g.LogEnabled && !nav_request)
+ if (window->OuterRectClipped.Min.x >= window->OuterRectClipped.Max.x || window->OuterRectClipped.Min.y >= window->OuterRectClipped.Max.y)
+ window->HiddenFramesCanSkipItems = 1;
+ }
+
+ // Hide along with parent or if parent is collapsed
+ if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCanSkipItems > 0))
+ window->HiddenFramesCanSkipItems = 1;
+ if (parent_window && (parent_window->Collapsed || parent_window->HiddenFramesCannotSkipItems > 0))
+ window->HiddenFramesCannotSkipItems = 1;
+ }
+
+ // Don't render if style alpha is 0.0 at the time of Begin(). This is arbitrary and inconsistent but has been there for a long while (may remove at some point)
+ if (style.Alpha <= 0.0f)
+ window->HiddenFramesCanSkipItems = 1;
+
+ // Update the Hidden flag
+ bool hidden_regular = (window->HiddenFramesCanSkipItems > 0) || (window->HiddenFramesCannotSkipItems > 0);
+ window->Hidden = hidden_regular || (window->HiddenFramesForRenderOnly > 0);
+
+ // Disable inputs for requested number of frames
+ if (window->DisableInputsFrames > 0)
+ {
+ window->DisableInputsFrames--;
+ window->Flags |= ImGuiWindowFlags_NoInputs;
+ }
+
+ // Update the SkipItems flag, used to early out of all items functions (no layout required)
+ bool skip_items = false;
+ if (window->Collapsed || !window->Active || hidden_regular)
+ if (window->AutoFitFramesX <= 0 && window->AutoFitFramesY <= 0 && window->HiddenFramesCannotSkipItems <= 0)
+ skip_items = true;
+ window->SkipItems = skip_items;
+ }
+
+ return !window->SkipItems;
+}
+
+void ImGui::End()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ // Error checking: verify that user hasn't called End() too many times!
+ if (g.CurrentWindowStack.Size <= 1 && g.WithinFrameScopeWithImplicitWindow)
+ {
+ IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size > 1, "Calling End() too many times!");
+ return;
+ }
+ IM_ASSERT(g.CurrentWindowStack.Size > 0);
+
+ // Error checking: verify that user doesn't directly call End() on a child window.
+ if (window->Flags & ImGuiWindowFlags_ChildWindow)
+ IM_ASSERT_USER_ERROR(g.WithinEndChild, "Must call EndChild() and not End()!");
+
+ // Close anything that is open
+ if (window->DC.CurrentColumns)
+ EndColumns();
+ PopClipRect(); // Inner window clip rectangle
+
+ // Stop logging
+ if (!(window->Flags & ImGuiWindowFlags_ChildWindow)) // FIXME: add more options for scope of logging
+ LogFinish();
+
+ // Pop from window stack
+ g.LastItemData = g.CurrentWindowStack.back().ParentLastItemDataBackup;
+ if (window->Flags & ImGuiWindowFlags_ChildMenu)
+ g.BeginMenuCount--;
+ if (window->Flags & ImGuiWindowFlags_Popup)
+ g.BeginPopupStack.pop_back();
+ g.CurrentWindowStack.back().StackSizesOnBegin.CompareWithCurrentState();
+ g.CurrentWindowStack.pop_back();
+ SetCurrentWindow(g.CurrentWindowStack.Size == 0 ? NULL : g.CurrentWindowStack.back().Window);
+}
+
+void ImGui::BringWindowToFocusFront(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(window == window->RootWindow);
+
+ const int cur_order = window->FocusOrder;
+ IM_ASSERT(g.WindowsFocusOrder[cur_order] == window);
+ if (g.WindowsFocusOrder.back() == window)
+ return;
+
+ const int new_order = g.WindowsFocusOrder.Size - 1;
+ for (int n = cur_order; n < new_order; n++)
+ {
+ g.WindowsFocusOrder[n] = g.WindowsFocusOrder[n + 1];
+ g.WindowsFocusOrder[n]->FocusOrder--;
+ IM_ASSERT(g.WindowsFocusOrder[n]->FocusOrder == n);
+ }
+ g.WindowsFocusOrder[new_order] = window;
+ window->FocusOrder = (short)new_order;
+}
+
+void ImGui::BringWindowToDisplayFront(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* current_front_window = g.Windows.back();
+ if (current_front_window == window || current_front_window->RootWindow == window) // Cheap early out (could be better)
+ return;
+ for (int i = g.Windows.Size - 2; i >= 0; i--) // We can ignore the top-most window
+ if (g.Windows[i] == window)
+ {
+ memmove(&g.Windows[i], &g.Windows[i + 1], (size_t)(g.Windows.Size - i - 1) * sizeof(ImGuiWindow*));
+ g.Windows[g.Windows.Size - 1] = window;
+ break;
+ }
+}
+
+void ImGui::BringWindowToDisplayBack(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.Windows[0] == window)
+ return;
+ for (int i = 0; i < g.Windows.Size; i++)
+ if (g.Windows[i] == window)
+ {
+ memmove(&g.Windows[1], &g.Windows[0], (size_t)i * sizeof(ImGuiWindow*));
+ g.Windows[0] = window;
+ break;
+ }
+}
+
+void ImGui::BringWindowToDisplayBehind(ImGuiWindow* window, ImGuiWindow* behind_window)
+{
+ IM_ASSERT(window != NULL && behind_window != NULL);
+ ImGuiContext& g = *GImGui;
+ window = window->RootWindow;
+ behind_window = behind_window->RootWindow;
+ int pos_wnd = FindWindowDisplayIndex(window);
+ int pos_beh = FindWindowDisplayIndex(behind_window);
+ if (pos_wnd < pos_beh)
+ {
+ size_t copy_bytes = (pos_beh - pos_wnd - 1) * sizeof(ImGuiWindow*);
+ memmove(&g.Windows.Data[pos_wnd], &g.Windows.Data[pos_wnd + 1], copy_bytes);
+ g.Windows[pos_beh - 1] = window;
+ }
+ else
+ {
+ size_t copy_bytes = (pos_wnd - pos_beh) * sizeof(ImGuiWindow*);
+ memmove(&g.Windows.Data[pos_beh + 1], &g.Windows.Data[pos_beh], copy_bytes);
+ g.Windows[pos_beh] = window;
+ }
+}
+
+int ImGui::FindWindowDisplayIndex(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ return g.Windows.index_from_ptr(g.Windows.find(window));
+}
+
+// Moving window to front of display and set focus (which happens to be back of our sorted list)
+void ImGui::FocusWindow(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+
+ if (g.NavWindow != window)
+ {
+ SetNavWindow(window);
+ if (window && g.NavDisableMouseHover)
+ g.NavMousePosDirty = true;
+ g.NavId = window ? window->NavLastIds[0] : 0; // Restore NavId
+ g.NavLayer = ImGuiNavLayer_Main;
+ g.NavFocusScopeId = 0;
+ g.NavIdIsAlive = false;
+ }
+
+ // Close popups if any
+ ClosePopupsOverWindow(window, false);
+
+ // Move the root window to the top of the pile
+ IM_ASSERT(window == NULL || window->RootWindow != NULL);
+ ImGuiWindow* focus_front_window = window ? window->RootWindow : NULL; // NB: In docking branch this is window->RootWindowDockStop
+ ImGuiWindow* display_front_window = window ? window->RootWindow : NULL;
+
+ // Steal active widgets. Some of the cases it triggers includes:
+ // - Focus a window while an InputText in another window is active, if focus happens before the old InputText can run.
+ // - When using Nav to activate menu items (due to timing of activating on press->new window appears->losing ActiveId)
+ if (g.ActiveId != 0 && g.ActiveIdWindow && g.ActiveIdWindow->RootWindow != focus_front_window)
+ if (!g.ActiveIdNoClearOnFocusLoss)
+ ClearActiveID();
+
+ // Passing NULL allow to disable keyboard focus
+ if (!window)
+ return;
+
+ // Bring to front
+ BringWindowToFocusFront(focus_front_window);
+ if (((window->Flags | display_front_window->Flags) & ImGuiWindowFlags_NoBringToFrontOnFocus) == 0)
+ BringWindowToDisplayFront(display_front_window);
+}
+
+void ImGui::FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window)
+{
+ ImGuiContext& g = *GImGui;
+ int start_idx = g.WindowsFocusOrder.Size - 1;
+ if (under_this_window != NULL)
+ {
+ // Aim at root window behind us, if we are in a child window that's our own root (see #4640)
+ int offset = -1;
+ while (under_this_window->Flags & ImGuiWindowFlags_ChildWindow)
+ {
+ under_this_window = under_this_window->ParentWindow;
+ offset = 0;
+ }
+ start_idx = FindWindowFocusIndex(under_this_window) + offset;
+ }
+ for (int i = start_idx; i >= 0; i--)
+ {
+ // We may later decide to test for different NoXXXInputs based on the active navigation input (mouse vs nav) but that may feel more confusing to the user.
+ ImGuiWindow* window = g.WindowsFocusOrder[i];
+ IM_ASSERT(window == window->RootWindow);
+ if (window != ignore_window && window->WasActive)
+ if ((window->Flags & (ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs)) != (ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs))
+ {
+ ImGuiWindow* focus_window = NavRestoreLastChildNavWindow(window);
+ FocusWindow(focus_window);
+ return;
+ }
+ }
+ FocusWindow(NULL);
+}
+
+// Important: this alone doesn't alter current ImDrawList state. This is called by PushFont/PopFont only.
+void ImGui::SetCurrentFont(ImFont* font)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(font && font->IsLoaded()); // Font Atlas not created. Did you call io.Fonts->GetTexDataAsRGBA32 / GetTexDataAsAlpha8 ?
+ IM_ASSERT(font->Scale > 0.0f);
+ g.Font = font;
+ g.FontBaseSize = ImMax(1.0f, g.IO.FontGlobalScale * g.Font->FontSize * g.Font->Scale);
+ g.FontSize = g.CurrentWindow ? g.CurrentWindow->CalcFontSize() : 0.0f;
+
+ ImFontAtlas* atlas = g.Font->ContainerAtlas;
+ g.DrawListSharedData.TexUvWhitePixel = atlas->TexUvWhitePixel;
+ g.DrawListSharedData.TexUvLines = atlas->TexUvLines;
+ g.DrawListSharedData.Font = g.Font;
+ g.DrawListSharedData.FontSize = g.FontSize;
+}
+
+void ImGui::PushFont(ImFont* font)
+{
+ ImGuiContext& g = *GImGui;
+ if (!font)
+ font = GetDefaultFont();
+ SetCurrentFont(font);
+ g.FontStack.push_back(font);
+ g.CurrentWindow->DrawList->PushTextureID(font->ContainerAtlas->TexID);
+}
+
+void ImGui::PopFont()
+{
+ ImGuiContext& g = *GImGui;
+ g.CurrentWindow->DrawList->PopTextureID();
+ g.FontStack.pop_back();
+ SetCurrentFont(g.FontStack.empty() ? GetDefaultFont() : g.FontStack.back());
+}
+
+void ImGui::PushItemFlag(ImGuiItemFlags option, bool enabled)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiItemFlags item_flags = g.CurrentItemFlags;
+ IM_ASSERT(item_flags == g.ItemFlagsStack.back());
+ if (enabled)
+ item_flags |= option;
+ else
+ item_flags &= ~option;
+ g.CurrentItemFlags = item_flags;
+ g.ItemFlagsStack.push_back(item_flags);
+}
+
+void ImGui::PopItemFlag()
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.ItemFlagsStack.Size > 1); // Too many calls to PopItemFlag() - we always leave a 0 at the bottom of the stack.
+ g.ItemFlagsStack.pop_back();
+ g.CurrentItemFlags = g.ItemFlagsStack.back();
+}
+
+// BeginDisabled()/EndDisabled()
+// - Those can be nested but it cannot be used to enable an already disabled section (a single BeginDisabled(true) in the stack is enough to keep everything disabled)
+// - Visually this is currently altering alpha, but it is expected that in a future styling system this would work differently.
+// - Feedback welcome at https://github.com/ocornut/imgui/issues/211
+// - BeginDisabled(false) essentially does nothing useful but is provided to facilitate use of boolean expressions. If you can avoid calling BeginDisabled(False)/EndDisabled() best to avoid it.
+// - Optimized shortcuts instead of PushStyleVar() + PushItemFlag()
+void ImGui::BeginDisabled(bool disabled)
+{
+ ImGuiContext& g = *GImGui;
+ bool was_disabled = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0;
+ if (!was_disabled && disabled)
+ {
+ g.DisabledAlphaBackup = g.Style.Alpha;
+ g.Style.Alpha *= g.Style.DisabledAlpha; // PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * g.Style.DisabledAlpha);
+ }
+ if (was_disabled || disabled)
+ g.CurrentItemFlags |= ImGuiItemFlags_Disabled;
+ g.ItemFlagsStack.push_back(g.CurrentItemFlags);
+ g.DisabledStackSize++;
+}
+
+void ImGui::EndDisabled()
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.DisabledStackSize > 0);
+ g.DisabledStackSize--;
+ bool was_disabled = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0;
+ //PopItemFlag();
+ g.ItemFlagsStack.pop_back();
+ g.CurrentItemFlags = g.ItemFlagsStack.back();
+ if (was_disabled && (g.CurrentItemFlags & ImGuiItemFlags_Disabled) == 0)
+ g.Style.Alpha = g.DisabledAlphaBackup; //PopStyleVar();
+}
+
+// FIXME: Look into renaming this once we have settled the new Focus/Activation/TabStop system.
+void ImGui::PushAllowKeyboardFocus(bool allow_keyboard_focus)
+{
+ PushItemFlag(ImGuiItemFlags_NoTabStop, !allow_keyboard_focus);
+}
+
+void ImGui::PopAllowKeyboardFocus()
+{
+ PopItemFlag();
+}
+
+void ImGui::PushButtonRepeat(bool repeat)
+{
+ PushItemFlag(ImGuiItemFlags_ButtonRepeat, repeat);
+}
+
+void ImGui::PopButtonRepeat()
+{
+ PopItemFlag();
+}
+
+void ImGui::PushTextWrapPos(float wrap_pos_x)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ window->DC.TextWrapPosStack.push_back(window->DC.TextWrapPos);
+ window->DC.TextWrapPos = wrap_pos_x;
+}
+
+void ImGui::PopTextWrapPos()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ window->DC.TextWrapPos = window->DC.TextWrapPosStack.back();
+ window->DC.TextWrapPosStack.pop_back();
+}
+
+static ImGuiWindow* GetCombinedRootWindow(ImGuiWindow* window, bool popup_hierarchy)
+{
+ ImGuiWindow* last_window = NULL;
+ while (last_window != window)
+ {
+ last_window = window;
+ window = window->RootWindow;
+ if (popup_hierarchy)
+ window = window->RootWindowPopupTree;
+ }
+ return window;
+}
+
+bool ImGui::IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent, bool popup_hierarchy)
+{
+ ImGuiWindow* window_root = GetCombinedRootWindow(window, popup_hierarchy);
+ if (window_root == potential_parent)
+ return true;
+ while (window != NULL)
+ {
+ if (window == potential_parent)
+ return true;
+ if (window == window_root) // end of chain
+ return false;
+ window = window->ParentWindow;
+ }
+ return false;
+}
+
+bool ImGui::IsWindowWithinBeginStackOf(ImGuiWindow* window, ImGuiWindow* potential_parent)
+{
+ if (window->RootWindow == potential_parent)
+ return true;
+ while (window != NULL)
+ {
+ if (window == potential_parent)
+ return true;
+ window = window->ParentWindowInBeginStack;
+ }
+ return false;
+}
+
+bool ImGui::IsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below)
+{
+ ImGuiContext& g = *GImGui;
+
+ // It would be saner to ensure that display layer is always reflected in the g.Windows[] order, which would likely requires altering all manipulations of that array
+ const int display_layer_delta = GetWindowDisplayLayer(potential_above) - GetWindowDisplayLayer(potential_below);
+ if (display_layer_delta != 0)
+ return display_layer_delta > 0;
+
+ for (int i = g.Windows.Size - 1; i >= 0; i--)
+ {
+ ImGuiWindow* candidate_window = g.Windows[i];
+ if (candidate_window == potential_above)
+ return true;
+ if (candidate_window == potential_below)
+ return false;
+ }
+ return false;
+}
+
+bool ImGui::IsWindowHovered(ImGuiHoveredFlags flags)
+{
+ IM_ASSERT((flags & (ImGuiHoveredFlags_AllowWhenOverlapped | ImGuiHoveredFlags_AllowWhenDisabled)) == 0); // Flags not supported by this function
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* ref_window = g.HoveredWindow;
+ ImGuiWindow* cur_window = g.CurrentWindow;
+ if (ref_window == NULL)
+ return false;
+
+ if ((flags & ImGuiHoveredFlags_AnyWindow) == 0)
+ {
+ IM_ASSERT(cur_window); // Not inside a Begin()/End()
+ const bool popup_hierarchy = (flags & ImGuiHoveredFlags_NoPopupHierarchy) == 0;
+ if (flags & ImGuiHoveredFlags_RootWindow)
+ cur_window = GetCombinedRootWindow(cur_window, popup_hierarchy);
+
+ bool result;
+ if (flags & ImGuiHoveredFlags_ChildWindows)
+ result = IsWindowChildOf(ref_window, cur_window, popup_hierarchy);
+ else
+ result = (ref_window == cur_window);
+ if (!result)
+ return false;
+ }
+
+ if (!IsWindowContentHoverable(ref_window, flags))
+ return false;
+ if (!(flags & ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
+ if (g.ActiveId != 0 && !g.ActiveIdAllowOverlap && g.ActiveId != ref_window->MoveId)
+ return false;
+ return true;
+}
+
+bool ImGui::IsWindowFocused(ImGuiFocusedFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* ref_window = g.NavWindow;
+ ImGuiWindow* cur_window = g.CurrentWindow;
+
+ if (ref_window == NULL)
+ return false;
+ if (flags & ImGuiFocusedFlags_AnyWindow)
+ return true;
+
+ IM_ASSERT(cur_window); // Not inside a Begin()/End()
+ const bool popup_hierarchy = (flags & ImGuiFocusedFlags_NoPopupHierarchy) == 0;
+ if (flags & ImGuiHoveredFlags_RootWindow)
+ cur_window = GetCombinedRootWindow(cur_window, popup_hierarchy);
+
+ if (flags & ImGuiHoveredFlags_ChildWindows)
+ return IsWindowChildOf(ref_window, cur_window, popup_hierarchy);
+ else
+ return (ref_window == cur_window);
+}
+
+// Can we focus this window with CTRL+TAB (or PadMenu + PadFocusPrev/PadFocusNext)
+// Note that NoNavFocus makes the window not reachable with CTRL+TAB but it can still be focused with mouse or programmatically.
+// If you want a window to never be focused, you may use the e.g. NoInputs flag.
+bool ImGui::IsWindowNavFocusable(ImGuiWindow* window)
+{
+ return window->WasActive && window == window->RootWindow && !(window->Flags & ImGuiWindowFlags_NoNavFocus);
+}
+
+float ImGui::GetWindowWidth()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->Size.x;
+}
+
+float ImGui::GetWindowHeight()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->Size.y;
+}
+
+ImVec2 ImGui::GetWindowPos()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ return window->Pos;
+}
+
+void ImGui::SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond)
+{
+ // Test condition (NB: bit 0 is always true) and clear flags for next time
+ if (cond && (window->SetWindowPosAllowFlags & cond) == 0)
+ return;
+
+ IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+ window->SetWindowPosAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
+ window->SetWindowPosVal = ImVec2(FLT_MAX, FLT_MAX);
+
+ // Set
+ const ImVec2 old_pos = window->Pos;
+ window->Pos = ImFloor(pos);
+ ImVec2 offset = window->Pos - old_pos;
+ if (offset.x == 0.0f && offset.y == 0.0f)
+ return;
+ MarkIniSettingsDirty(window);
+ window->DC.CursorPos += offset; // As we happen to move the window while it is being appended to (which is a bad idea - will smear) let's at least offset the cursor
+ window->DC.CursorMaxPos += offset; // And more importantly we need to offset CursorMaxPos/CursorStartPos this so ContentSize calculation doesn't get affected.
+ window->DC.IdealMaxPos += offset;
+ window->DC.CursorStartPos += offset;
+}
+
+void ImGui::SetWindowPos(const ImVec2& pos, ImGuiCond cond)
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ SetWindowPos(window, pos, cond);
+}
+
+void ImGui::SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond)
+{
+ if (ImGuiWindow* window = FindWindowByName(name))
+ SetWindowPos(window, pos, cond);
+}
+
+ImVec2 ImGui::GetWindowSize()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->Size;
+}
+
+void ImGui::SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond)
+{
+ // Test condition (NB: bit 0 is always true) and clear flags for next time
+ if (cond && (window->SetWindowSizeAllowFlags & cond) == 0)
+ return;
+
+ IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+ window->SetWindowSizeAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
+
+ // Set
+ ImVec2 old_size = window->SizeFull;
+ window->AutoFitFramesX = (size.x <= 0.0f) ? 2 : 0;
+ window->AutoFitFramesY = (size.y <= 0.0f) ? 2 : 0;
+ if (size.x <= 0.0f)
+ window->AutoFitOnlyGrows = false;
+ else
+ window->SizeFull.x = IM_FLOOR(size.x);
+ if (size.y <= 0.0f)
+ window->AutoFitOnlyGrows = false;
+ else
+ window->SizeFull.y = IM_FLOOR(size.y);
+ if (old_size.x != window->SizeFull.x || old_size.y != window->SizeFull.y)
+ MarkIniSettingsDirty(window);
+}
+
+void ImGui::SetWindowSize(const ImVec2& size, ImGuiCond cond)
+{
+ SetWindowSize(GImGui->CurrentWindow, size, cond);
+}
+
+void ImGui::SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond)
+{
+ if (ImGuiWindow* window = FindWindowByName(name))
+ SetWindowSize(window, size, cond);
+}
+
+void ImGui::SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond)
+{
+ // Test condition (NB: bit 0 is always true) and clear flags for next time
+ if (cond && (window->SetWindowCollapsedAllowFlags & cond) == 0)
+ return;
+ window->SetWindowCollapsedAllowFlags &= ~(ImGuiCond_Once | ImGuiCond_FirstUseEver | ImGuiCond_Appearing);
+
+ // Set
+ window->Collapsed = collapsed;
+}
+
+void ImGui::SetWindowHitTestHole(ImGuiWindow* window, const ImVec2& pos, const ImVec2& size)
+{
+ IM_ASSERT(window->HitTestHoleSize.x == 0); // We don't support multiple holes/hit test filters
+ window->HitTestHoleSize = ImVec2ih(size);
+ window->HitTestHoleOffset = ImVec2ih(pos - window->Pos);
+}
+
+void ImGui::SetWindowCollapsed(bool collapsed, ImGuiCond cond)
+{
+ SetWindowCollapsed(GImGui->CurrentWindow, collapsed, cond);
+}
+
+bool ImGui::IsWindowCollapsed()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->Collapsed;
+}
+
+bool ImGui::IsWindowAppearing()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->Appearing;
+}
+
+void ImGui::SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond)
+{
+ if (ImGuiWindow* window = FindWindowByName(name))
+ SetWindowCollapsed(window, collapsed, cond);
+}
+
+void ImGui::SetWindowFocus()
+{
+ FocusWindow(GImGui->CurrentWindow);
+}
+
+void ImGui::SetWindowFocus(const char* name)
+{
+ if (name)
+ {
+ if (ImGuiWindow* window = FindWindowByName(name))
+ FocusWindow(window);
+ }
+ else
+ {
+ FocusWindow(NULL);
+ }
+}
+
+void ImGui::SetNextWindowPos(const ImVec2& pos, ImGuiCond cond, const ImVec2& pivot)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasPos;
+ g.NextWindowData.PosVal = pos;
+ g.NextWindowData.PosPivotVal = pivot;
+ g.NextWindowData.PosCond = cond ? cond : ImGuiCond_Always;
+}
+
+void ImGui::SetNextWindowSize(const ImVec2& size, ImGuiCond cond)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSize;
+ g.NextWindowData.SizeVal = size;
+ g.NextWindowData.SizeCond = cond ? cond : ImGuiCond_Always;
+}
+
+void ImGui::SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback, void* custom_callback_user_data)
+{
+ ImGuiContext& g = *GImGui;
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasSizeConstraint;
+ g.NextWindowData.SizeConstraintRect = ImRect(size_min, size_max);
+ g.NextWindowData.SizeCallback = custom_callback;
+ g.NextWindowData.SizeCallbackUserData = custom_callback_user_data;
+}
+
+// Content size = inner scrollable rectangle, padded with WindowPadding.
+// SetNextWindowContentSize(ImVec2(100,100) + ImGuiWindowFlags_AlwaysAutoResize will always allow submitting a 100x100 item.
+void ImGui::SetNextWindowContentSize(const ImVec2& size)
+{
+ ImGuiContext& g = *GImGui;
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasContentSize;
+ g.NextWindowData.ContentSizeVal = ImFloor(size);
+}
+
+void ImGui::SetNextWindowScroll(const ImVec2& scroll)
+{
+ ImGuiContext& g = *GImGui;
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasScroll;
+ g.NextWindowData.ScrollVal = scroll;
+}
+
+void ImGui::SetNextWindowCollapsed(bool collapsed, ImGuiCond cond)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(cond == 0 || ImIsPowerOfTwo(cond)); // Make sure the user doesn't attempt to combine multiple condition flags.
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasCollapsed;
+ g.NextWindowData.CollapsedVal = collapsed;
+ g.NextWindowData.CollapsedCond = cond ? cond : ImGuiCond_Always;
+}
+
+void ImGui::SetNextWindowFocus()
+{
+ ImGuiContext& g = *GImGui;
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasFocus;
+}
+
+void ImGui::SetNextWindowBgAlpha(float alpha)
+{
+ ImGuiContext& g = *GImGui;
+ g.NextWindowData.Flags |= ImGuiNextWindowDataFlags_HasBgAlpha;
+ g.NextWindowData.BgAlphaVal = alpha;
+}
+
+ImDrawList* ImGui::GetWindowDrawList()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ return window->DrawList;
+}
+
+ImFont* ImGui::GetFont()
+{
+ return GImGui->Font;
+}
+
+float ImGui::GetFontSize()
+{
+ return GImGui->FontSize;
+}
+
+ImVec2 ImGui::GetFontTexUvWhitePixel()
+{
+ return GImGui->DrawListSharedData.TexUvWhitePixel;
+}
+
+void ImGui::SetWindowFontScale(float scale)
+{
+ IM_ASSERT(scale > 0.0f);
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ window->FontWindowScale = scale;
+ g.FontSize = g.DrawListSharedData.FontSize = window->CalcFontSize();
+}
+
+void ImGui::ActivateItem(ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ g.NavNextActivateId = id;
+ g.NavNextActivateFlags = ImGuiActivateFlags_None;
+}
+
+void ImGui::PushFocusScope(ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ g.FocusScopeStack.push_back(window->DC.NavFocusScopeIdCurrent);
+ window->DC.NavFocusScopeIdCurrent = id;
+}
+
+void ImGui::PopFocusScope()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ IM_ASSERT(g.FocusScopeStack.Size > 0); // Too many PopFocusScope() ?
+ window->DC.NavFocusScopeIdCurrent = g.FocusScopeStack.back();
+ g.FocusScopeStack.pop_back();
+}
+
+// Note: this will likely be called ActivateItem() once we rework our Focus/Activation system!
+void ImGui::SetKeyboardFocusHere(int offset)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ IM_ASSERT(offset >= -1); // -1 is allowed but not below
+ IMGUI_DEBUG_LOG_ACTIVEID("SetKeyboardFocusHere(%d) in window \"%s\"\n", offset, window->Name);
+
+ // It makes sense in the vast majority of cases to never interrupt a drag and drop.
+ // When we refactor this function into ActivateItem() we may want to make this an option.
+ // MovingWindow is protected from most user inputs using SetActiveIdUsingNavAndKeys(), but
+ // is also automatically dropped in the event g.ActiveId is stolen.
+ if (g.DragDropActive || g.MovingWindow != NULL)
+ {
+ IMGUI_DEBUG_LOG_ACTIVEID("SetKeyboardFocusHere() ignored while DragDropActive!\n");
+ return;
+ }
+
+ SetNavWindow(window);
+
+ ImGuiScrollFlags scroll_flags = window->Appearing ? ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_AlwaysCenterY : ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_KeepVisibleEdgeY;
+ NavMoveRequestSubmit(ImGuiDir_None, offset < 0 ? ImGuiDir_Up : ImGuiDir_Down, ImGuiNavMoveFlags_Tabbing | ImGuiNavMoveFlags_FocusApi, scroll_flags); // FIXME-NAV: Once we refactor tabbing, add LegacyApi flag to not activate non-inputable.
+ if (offset == -1)
+ {
+ NavMoveRequestResolveWithLastItem(&g.NavMoveResultLocal);
+ }
+ else
+ {
+ g.NavTabbingDir = 1;
+ g.NavTabbingCounter = offset + 1;
+ }
+}
+
+void ImGui::SetItemDefaultFocus()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (!window->Appearing)
+ return;
+ if (g.NavWindow != window->RootWindowForNav || (!g.NavInitRequest && g.NavInitResultId == 0) || g.NavLayer != window->DC.NavLayerCurrent)
+ return;
+
+ g.NavInitRequest = false;
+ g.NavInitResultId = g.LastItemData.ID;
+ g.NavInitResultRectRel = WindowRectAbsToRel(window, g.LastItemData.Rect);
+ NavUpdateAnyRequestFlag();
+
+ // Scroll could be done in NavInitRequestApplyResult() via a opt-in flag (we however don't want regular init requests to scroll)
+ if (!IsItemVisible())
+ ScrollToRectEx(window, g.LastItemData.Rect, ImGuiScrollFlags_None);
+}
+
+void ImGui::SetStateStorage(ImGuiStorage* tree)
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ window->DC.StateStorage = tree ? tree : &window->StateStorage;
+}
+
+ImGuiStorage* ImGui::GetStateStorage()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->DC.StateStorage;
+}
+
+void ImGui::PushID(const char* str_id)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiID id = window->GetID(str_id);
+ window->IDStack.push_back(id);
+}
+
+void ImGui::PushID(const char* str_id_begin, const char* str_id_end)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiID id = window->GetID(str_id_begin, str_id_end);
+ window->IDStack.push_back(id);
+}
+
+void ImGui::PushID(const void* ptr_id)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiID id = window->GetID(ptr_id);
+ window->IDStack.push_back(id);
+}
+
+void ImGui::PushID(int int_id)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiID id = window->GetID(int_id);
+ window->IDStack.push_back(id);
+}
+
+// Push a given id value ignoring the ID stack as a seed.
+void ImGui::PushOverrideID(ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (g.DebugHookIdInfo == id)
+ DebugHookIdInfo(id, ImGuiDataType_ID, NULL, NULL);
+ window->IDStack.push_back(id);
+}
+
+// Helper to avoid a common series of PushOverrideID -> GetID() -> PopID() call
+// (note that when using this pattern, TestEngine's "Stack Tool" will tend to not display the intermediate stack level.
+// for that to work we would need to do PushOverrideID() -> ItemAdd() -> PopID() which would alter widget code a little more)
+ImGuiID ImGui::GetIDWithSeed(const char* str, const char* str_end, ImGuiID seed)
+{
+ ImGuiID id = ImHashStr(str, str_end ? (str_end - str) : 0, seed);
+ ImGuiContext& g = *GImGui;
+ if (g.DebugHookIdInfo == id)
+ DebugHookIdInfo(id, ImGuiDataType_String, str, str_end);
+ return id;
+}
+
+void ImGui::PopID()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ IM_ASSERT(window->IDStack.Size > 1); // Too many PopID(), or could be popping in a wrong/different window?
+ window->IDStack.pop_back();
+}
+
+ImGuiID ImGui::GetID(const char* str_id)
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->GetID(str_id);
+}
+
+ImGuiID ImGui::GetID(const char* str_id_begin, const char* str_id_end)
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->GetID(str_id_begin, str_id_end);
+}
+
+ImGuiID ImGui::GetID(const void* ptr_id)
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->GetID(ptr_id);
+}
+
+bool ImGui::IsRectVisible(const ImVec2& size)
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->ClipRect.Overlaps(ImRect(window->DC.CursorPos, window->DC.CursorPos + size));
+}
+
+bool ImGui::IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max)
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->ClipRect.Overlaps(ImRect(rect_min, rect_max));
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] INPUTS
+//-----------------------------------------------------------------------------
+
+// Test if mouse cursor is hovering given rectangle
+// NB- Rectangle is clipped by our current clip setting
+// NB- Expand the rectangle to be generous on imprecise inputs systems (g.Style.TouchExtraPadding)
+bool ImGui::IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip)
+{
+ ImGuiContext& g = *GImGui;
+
+ // Clip
+ ImRect rect_clipped(r_min, r_max);
+ if (clip)
+ rect_clipped.ClipWith(g.CurrentWindow->ClipRect);
+
+ // Expand for touch input
+ const ImRect rect_for_touch(rect_clipped.Min - g.Style.TouchExtraPadding, rect_clipped.Max + g.Style.TouchExtraPadding);
+ if (!rect_for_touch.Contains(g.IO.MousePos))
+ return false;
+ return true;
+}
+
+ImGuiKeyData* ImGui::GetKeyData(ImGuiKey key)
+{
+ ImGuiContext& g = *GImGui;
+ int index;
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+ IM_ASSERT(key >= ImGuiKey_LegacyNativeKey_BEGIN && key < ImGuiKey_NamedKey_END);
+ if (IsLegacyKey(key))
+ index = (g.IO.KeyMap[key] != -1) ? g.IO.KeyMap[key] : key; // Remap native->imgui or imgui->native
+ else
+ index = key;
+#else
+ IM_ASSERT(IsNamedKey(key) && "Support for user key indices was dropped in favor of ImGuiKey. Please update backend & user code.");
+ index = key - ImGuiKey_NamedKey_BEGIN;
+#endif
+ return &g.IO.KeysData[index];
+}
+
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+int ImGui::GetKeyIndex(ImGuiKey key)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(IsNamedKey(key));
+ const ImGuiKeyData* key_data = GetKeyData(key);
+ return (int)(key_data - g.IO.KeysData);
+}
+#endif
+
+// Those names a provided for debugging purpose and are not meant to be saved persistently not compared.
+static const char* const GKeyNames[] =
+{
+ "Tab", "LeftArrow", "RightArrow", "UpArrow", "DownArrow", "PageUp", "PageDown",
+ "Home", "End", "Insert", "Delete", "Backspace", "Space", "Enter", "Escape",
+ "LeftCtrl", "LeftShift", "LeftAlt", "LeftSuper", "RightCtrl", "RightShift", "RightAlt", "RightSuper", "Menu",
+ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H",
+ "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
+ "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12",
+ "Apostrophe", "Comma", "Minus", "Period", "Slash", "Semicolon", "Equal", "LeftBracket",
+ "Backslash", "RightBracket", "GraveAccent", "CapsLock", "ScrollLock", "NumLock", "PrintScreen",
+ "Pause", "Keypad0", "Keypad1", "Keypad2", "Keypad3", "Keypad4", "Keypad5", "Keypad6",
+ "Keypad7", "Keypad8", "Keypad9", "KeypadDecimal", "KeypadDivide", "KeypadMultiply",
+ "KeypadSubtract", "KeypadAdd", "KeypadEnter", "KeypadEqual",
+ "GamepadStart", "GamepadBack", "GamepadFaceUp", "GamepadFaceDown", "GamepadFaceLeft", "GamepadFaceRight",
+ "GamepadDpadUp", "GamepadDpadDown", "GamepadDpadLeft", "GamepadDpadRight",
+ "GamepadL1", "GamepadR1", "GamepadL2", "GamepadR2", "GamepadL3", "GamepadR3",
+ "GamepadLStickUp", "GamepadLStickDown", "GamepadLStickLeft", "GamepadLStickRight",
+ "GamepadRStickUp", "GamepadRStickDown", "GamepadRStickLeft", "GamepadRStickRight",
+ "ModCtrl", "ModShift", "ModAlt", "ModSuper"
+};
+IM_STATIC_ASSERT(ImGuiKey_NamedKey_COUNT == IM_ARRAYSIZE(GKeyNames));
+
+const char* ImGui::GetKeyName(ImGuiKey key)
+{
+#ifdef IMGUI_DISABLE_OBSOLETE_KEYIO
+ IM_ASSERT((IsNamedKey(key) || key == ImGuiKey_None) && "Support for user key indices was dropped in favor of ImGuiKey. Please update backend and user code.");
+#else
+ if (IsLegacyKey(key))
+ {
+ ImGuiIO& io = GetIO();
+ if (io.KeyMap[key] == -1)
+ return "N/A";
+ IM_ASSERT(IsNamedKey((ImGuiKey)io.KeyMap[key]));
+ key = (ImGuiKey)io.KeyMap[key];
+ }
+#endif
+ if (key == ImGuiKey_None)
+ return "None";
+ if (!IsNamedKey(key))
+ return "Unknown";
+
+ return GKeyNames[key - ImGuiKey_NamedKey_BEGIN];
+}
+
+// t0 = previous time (e.g.: g.Time - g.IO.DeltaTime)
+// t1 = current time (e.g.: g.Time)
+// An event is triggered at:
+// t = 0.0f t = repeat_delay, t = repeat_delay + repeat_rate*N
+int ImGui::CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate)
+{
+ if (t1 == 0.0f)
+ return 1;
+ if (t0 >= t1)
+ return 0;
+ if (repeat_rate <= 0.0f)
+ return (t0 < repeat_delay) && (t1 >= repeat_delay);
+ const int count_t0 = (t0 < repeat_delay) ? -1 : (int)((t0 - repeat_delay) / repeat_rate);
+ const int count_t1 = (t1 < repeat_delay) ? -1 : (int)((t1 - repeat_delay) / repeat_rate);
+ const int count = count_t1 - count_t0;
+ return count;
+}
+
+int ImGui::GetKeyPressedAmount(ImGuiKey key, float repeat_delay, float repeat_rate)
+{
+ ImGuiContext& g = *GImGui;
+ const ImGuiKeyData* key_data = GetKeyData(key);
+ const float t = key_data->DownDuration;
+ return CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, repeat_delay, repeat_rate);
+}
+
+// Note that Dear ImGui doesn't know the meaning/semantic of ImGuiKey from 0..511: they are legacy native keycodes.
+// Consider transitioning from 'IsKeyDown(MY_ENGINE_KEY_A)' (<1.87) to IsKeyDown(ImGuiKey_A) (>= 1.87)
+bool ImGui::IsKeyDown(ImGuiKey key)
+{
+ const ImGuiKeyData* key_data = GetKeyData(key);
+ if (!key_data->Down)
+ return false;
+ return true;
+}
+
+bool ImGui::IsKeyPressed(ImGuiKey key, bool repeat)
+{
+ ImGuiContext& g = *GImGui;
+ const ImGuiKeyData* key_data = GetKeyData(key);
+ const float t = key_data->DownDuration;
+ if (t < 0.0f)
+ return false;
+ const bool pressed = (t == 0.0f) || (repeat && t > g.IO.KeyRepeatDelay && GetKeyPressedAmount(key, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate) > 0);
+ if (!pressed)
+ return false;
+ return true;
+}
+
+bool ImGui::IsKeyReleased(ImGuiKey key)
+{
+ const ImGuiKeyData* key_data = GetKeyData(key);
+ if (key_data->DownDurationPrev < 0.0f || key_data->Down)
+ return false;
+ return true;
+}
+
+bool ImGui::IsMouseDown(ImGuiMouseButton button)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+ return g.IO.MouseDown[button];
+}
+
+bool ImGui::IsMouseClicked(ImGuiMouseButton button, bool repeat)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+ const float t = g.IO.MouseDownDuration[button];
+ if (t == 0.0f)
+ return true;
+ if (repeat && t > g.IO.KeyRepeatDelay)
+ return CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay, g.IO.KeyRepeatRate) > 0;
+ return false;
+}
+
+bool ImGui::IsMouseReleased(ImGuiMouseButton button)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+ return g.IO.MouseReleased[button];
+}
+
+bool ImGui::IsMouseDoubleClicked(ImGuiMouseButton button)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+ return g.IO.MouseClickedCount[button] == 2;
+}
+
+int ImGui::GetMouseClickedCount(ImGuiMouseButton button)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+ return g.IO.MouseClickedCount[button];
+}
+
+// Return if a mouse click/drag went past the given threshold. Valid to call during the MouseReleased frame.
+// [Internal] This doesn't test if the button is pressed
+bool ImGui::IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+ if (lock_threshold < 0.0f)
+ lock_threshold = g.IO.MouseDragThreshold;
+ return g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold;
+}
+
+bool ImGui::IsMouseDragging(ImGuiMouseButton button, float lock_threshold)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+ if (!g.IO.MouseDown[button])
+ return false;
+ return IsMouseDragPastThreshold(button, lock_threshold);
+}
+
+ImVec2 ImGui::GetMousePos()
+{
+ ImGuiContext& g = *GImGui;
+ return g.IO.MousePos;
+}
+
+// NB: prefer to call right after BeginPopup(). At the time Selectable/MenuItem is activated, the popup is already closed!
+ImVec2 ImGui::GetMousePosOnOpeningCurrentPopup()
+{
+ ImGuiContext& g = *GImGui;
+ if (g.BeginPopupStack.Size > 0)
+ return g.OpenPopupStack[g.BeginPopupStack.Size - 1].OpenMousePos;
+ return g.IO.MousePos;
+}
+
+// We typically use ImVec2(-FLT_MAX,-FLT_MAX) to denote an invalid mouse position.
+bool ImGui::IsMousePosValid(const ImVec2* mouse_pos)
+{
+ // The assert is only to silence a false-positive in XCode Static Analysis.
+ // Because GImGui is not dereferenced in every code path, the static analyzer assume that it may be NULL (which it doesn't for other functions).
+ IM_ASSERT(GImGui != NULL);
+ const float MOUSE_INVALID = -256000.0f;
+ ImVec2 p = mouse_pos ? *mouse_pos : GImGui->IO.MousePos;
+ return p.x >= MOUSE_INVALID && p.y >= MOUSE_INVALID;
+}
+
+// [WILL OBSOLETE] This was designed for backends, but prefer having backend maintain a mask of held mouse buttons, because upcoming input queue system will make this invalid.
+bool ImGui::IsAnyMouseDown()
+{
+ ImGuiContext& g = *GImGui;
+ for (int n = 0; n < IM_ARRAYSIZE(g.IO.MouseDown); n++)
+ if (g.IO.MouseDown[n])
+ return true;
+ return false;
+}
+
+// Return the delta from the initial clicking position while the mouse button is clicked or was just released.
+// This is locked and return 0.0f until the mouse moves past a distance threshold at least once.
+// NB: This is only valid if IsMousePosValid(). backends in theory should always keep mouse position valid when dragging even outside the client window.
+ImVec2 ImGui::GetMouseDragDelta(ImGuiMouseButton button, float lock_threshold)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+ if (lock_threshold < 0.0f)
+ lock_threshold = g.IO.MouseDragThreshold;
+ if (g.IO.MouseDown[button] || g.IO.MouseReleased[button])
+ if (g.IO.MouseDragMaxDistanceSqr[button] >= lock_threshold * lock_threshold)
+ if (IsMousePosValid(&g.IO.MousePos) && IsMousePosValid(&g.IO.MouseClickedPos[button]))
+ return g.IO.MousePos - g.IO.MouseClickedPos[button];
+ return ImVec2(0.0f, 0.0f);
+}
+
+void ImGui::ResetMouseDragDelta(ImGuiMouseButton button)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(button >= 0 && button < IM_ARRAYSIZE(g.IO.MouseDown));
+ // NB: We don't need to reset g.IO.MouseDragMaxDistanceSqr
+ g.IO.MouseClickedPos[button] = g.IO.MousePos;
+}
+
+ImGuiMouseCursor ImGui::GetMouseCursor()
+{
+ ImGuiContext& g = *GImGui;
+ return g.MouseCursor;
+}
+
+void ImGui::SetMouseCursor(ImGuiMouseCursor cursor_type)
+{
+ ImGuiContext& g = *GImGui;
+ g.MouseCursor = cursor_type;
+}
+
+void ImGui::SetNextFrameWantCaptureKeyboard(bool want_capture_keyboard)
+{
+ ImGuiContext& g = *GImGui;
+ g.WantCaptureKeyboardNextFrame = want_capture_keyboard ? 1 : 0;
+}
+
+void ImGui::SetNextFrameWantCaptureMouse(bool want_capture_mouse)
+{
+ ImGuiContext& g = *GImGui;
+ g.WantCaptureMouseNextFrame = want_capture_mouse ? 1 : 0;
+}
+
+#ifndef IMGUI_DISABLE_DEBUG_TOOLS
+static const char* GetInputSourceName(ImGuiInputSource source)
+{
+ const char* input_source_names[] = { "None", "Mouse", "Keyboard", "Gamepad", "Nav", "Clipboard" };
+ IM_ASSERT(IM_ARRAYSIZE(input_source_names) == ImGuiInputSource_COUNT && source >= 0 && source < ImGuiInputSource_COUNT);
+ return input_source_names[source];
+}
+#endif
+
+/*static void DebugPrintInputEvent(const char* prefix, const ImGuiInputEvent* e)
+{
+ if (e->Type == ImGuiInputEventType_MousePos) { IMGUI_DEBUG_LOG_IO("%s: MousePos (%.1f %.1f)\n", prefix, e->MousePos.PosX, e->MousePos.PosY); return; }
+ if (e->Type == ImGuiInputEventType_MouseButton) { IMGUI_DEBUG_LOG_IO("%s: MouseButton %d %s\n", prefix, e->MouseButton.Button, e->MouseButton.Down ? "Down" : "Up"); return; }
+ if (e->Type == ImGuiInputEventType_MouseWheel) { IMGUI_DEBUG_LOG_IO("%s: MouseWheel (%.1f %.1f)\n", prefix, e->MouseWheel.WheelX, e->MouseWheel.WheelY); return; }
+ if (e->Type == ImGuiInputEventType_Key) { IMGUI_DEBUG_LOG_IO("%s: Key \"%s\" %s\n", prefix, ImGui::GetKeyName(e->Key.Key), e->Key.Down ? "Down" : "Up"); return; }
+ if (e->Type == ImGuiInputEventType_Text) { IMGUI_DEBUG_LOG_IO("%s: Text: %c (U+%08X)\n", prefix, e->Text.Char, e->Text.Char); return; }
+ if (e->Type == ImGuiInputEventType_Focus) { IMGUI_DEBUG_LOG_IO("%s: AppFocused %d\n", prefix, e->AppFocused.Focused); return; }
+}*/
+
+// Process input queue
+// We always call this with the value of 'bool g.IO.ConfigInputTrickleEventQueue'.
+// - trickle_fast_inputs = false : process all events, turn into flattened input state (e.g. successive down/up/down/up will be lost)
+// - trickle_fast_inputs = true : process as many events as possible (successive down/up/down/up will be trickled over several frames so nothing is lost) (new feature in 1.87)
+void ImGui::UpdateInputEvents(bool trickle_fast_inputs)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiIO& io = g.IO;
+
+ // Only trickle chars<>key when working with InputText()
+ // FIXME: InputText() could parse event trail?
+ // FIXME: Could specialize chars<>keys trickling rules for control keys (those not typically associated to characters)
+ const bool trickle_interleaved_keys_and_text = (trickle_fast_inputs && g.WantTextInputNextFrame == 1);
+
+ bool mouse_moved = false, mouse_wheeled = false, key_changed = false, text_inputted = false;
+ int mouse_button_changed = 0x00;
+ ImBitArray<ImGuiKey_KeysData_SIZE> key_changed_mask;
+
+ int event_n = 0;
+ for (; event_n < g.InputEventsQueue.Size; event_n++)
+ {
+ const ImGuiInputEvent* e = &g.InputEventsQueue[event_n];
+ if (e->Type == ImGuiInputEventType_MousePos)
+ {
+ ImVec2 event_pos(e->MousePos.PosX, e->MousePos.PosY);
+ if (IsMousePosValid(&event_pos))
+ event_pos = ImVec2(ImFloorSigned(event_pos.x), ImFloorSigned(event_pos.y)); // Apply same flooring as UpdateMouseInputs()
+ if (io.MousePos.x != event_pos.x || io.MousePos.y != event_pos.y)
+ {
+ // Trickling Rule: Stop processing queued events if we already handled a mouse button change
+ if (trickle_fast_inputs && (mouse_button_changed != 0 || mouse_wheeled || key_changed || text_inputted))
+ break;
+ io.MousePos = event_pos;
+ mouse_moved = true;
+ }
+ }
+ else if (e->Type == ImGuiInputEventType_MouseButton)
+ {
+ const ImGuiMouseButton button = e->MouseButton.Button;
+ IM_ASSERT(button >= 0 && button < ImGuiMouseButton_COUNT);
+ if (io.MouseDown[button] != e->MouseButton.Down)
+ {
+ // Trickling Rule: Stop processing queued events if we got multiple action on the same button
+ if (trickle_fast_inputs && ((mouse_button_changed & (1 << button)) || mouse_wheeled))
+ break;
+ io.MouseDown[button] = e->MouseButton.Down;
+ mouse_button_changed |= (1 << button);
+ }
+ }
+ else if (e->Type == ImGuiInputEventType_MouseWheel)
+ {
+ if (e->MouseWheel.WheelX != 0.0f || e->MouseWheel.WheelY != 0.0f)
+ {
+ // Trickling Rule: Stop processing queued events if we got multiple action on the event
+ if (trickle_fast_inputs && (mouse_moved || mouse_button_changed != 0))
+ break;
+ io.MouseWheelH += e->MouseWheel.WheelX;
+ io.MouseWheel += e->MouseWheel.WheelY;
+ mouse_wheeled = true;
+ }
+ }
+ else if (e->Type == ImGuiInputEventType_Key)
+ {
+ ImGuiKey key = e->Key.Key;
+ IM_ASSERT(key != ImGuiKey_None);
+ const int keydata_index = (key - ImGuiKey_KeysData_OFFSET);
+ ImGuiKeyData* keydata = &io.KeysData[keydata_index];
+ if (keydata->Down != e->Key.Down || keydata->AnalogValue != e->Key.AnalogValue)
+ {
+ // Trickling Rule: Stop processing queued events if we got multiple action on the same button
+ if (trickle_fast_inputs && keydata->Down != e->Key.Down && (key_changed_mask.TestBit(keydata_index) || text_inputted || mouse_button_changed != 0))
+ break;
+ keydata->Down = e->Key.Down;
+ keydata->AnalogValue = e->Key.AnalogValue;
+ key_changed = true;
+ key_changed_mask.SetBit(keydata_index);
+
+ if (key == ImGuiKey_ModCtrl || key == ImGuiKey_ModShift || key == ImGuiKey_ModAlt || key == ImGuiKey_ModSuper)
+ {
+ if (key == ImGuiKey_ModCtrl) { io.KeyCtrl = keydata->Down; }
+ if (key == ImGuiKey_ModShift) { io.KeyShift = keydata->Down; }
+ if (key == ImGuiKey_ModAlt) { io.KeyAlt = keydata->Down; }
+ if (key == ImGuiKey_ModSuper) { io.KeySuper = keydata->Down; }
+ io.KeyMods = GetMergedModFlags();
+ }
+
+ // Allow legacy code using io.KeysDown[GetKeyIndex()] with new backends
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+ io.KeysDown[key] = keydata->Down;
+ if (io.KeyMap[key] != -1)
+ io.KeysDown[io.KeyMap[key]] = keydata->Down;
+#endif
+ }
+ }
+ else if (e->Type == ImGuiInputEventType_Text)
+ {
+ // Trickling Rule: Stop processing queued events if keys/mouse have been interacted with
+ if (trickle_fast_inputs && ((key_changed && trickle_interleaved_keys_and_text) || mouse_button_changed != 0 || mouse_moved || mouse_wheeled))
+ break;
+ unsigned int c = e->Text.Char;
+ io.InputQueueCharacters.push_back(c <= IM_UNICODE_CODEPOINT_MAX ? (ImWchar)c : IM_UNICODE_CODEPOINT_INVALID);
+ if (trickle_interleaved_keys_and_text)
+ text_inputted = true;
+ }
+ else if (e->Type == ImGuiInputEventType_Focus)
+ {
+ // We intentionally overwrite this and process lower, in order to give a chance
+ // to multi-viewports backends to queue AddFocusEvent(false) + AddFocusEvent(true) in same frame.
+ io.AppFocusLost = !e->AppFocused.Focused;
+ }
+ else
+ {
+ IM_ASSERT(0 && "Unknown event!");
+ }
+ }
+
+ // Record trail (for domain-specific applications wanting to access a precise trail)
+ //if (event_n != 0) IMGUI_DEBUG_LOG_IO("Processed: %d / Remaining: %d\n", event_n, g.InputEventsQueue.Size - event_n);
+ for (int n = 0; n < event_n; n++)
+ g.InputEventsTrail.push_back(g.InputEventsQueue[n]);
+
+ // [DEBUG]
+ /*if (event_n != 0)
+ for (int n = 0; n < g.InputEventsQueue.Size; n++)
+ DebugPrintInputEvent(n < event_n ? "Processed" : "Remaining", &g.InputEventsQueue[n]);*/
+
+ // Remaining events will be processed on the next frame
+ if (event_n == g.InputEventsQueue.Size)
+ g.InputEventsQueue.resize(0);
+ else
+ g.InputEventsQueue.erase(g.InputEventsQueue.Data, g.InputEventsQueue.Data + event_n);
+
+ // Clear buttons state when focus is lost
+ // (this is useful so e.g. releasing Alt after focus loss on Alt-Tab doesn't trigger the Alt menu toggle)
+ if (g.IO.AppFocusLost)
+ {
+ g.IO.ClearInputKeys();
+ g.IO.AppFocusLost = false;
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] ERROR CHECKING
+//-----------------------------------------------------------------------------
+
+// Helper function to verify ABI compatibility between caller code and compiled version of Dear ImGui.
+// Verify that the type sizes are matching between the calling file's compilation unit and imgui.cpp's compilation unit
+// If this triggers you have an issue:
+// - Most commonly: mismatched headers and compiled code version.
+// - Or: mismatched configuration #define, compilation settings, packing pragma etc.
+// The configuration settings mentioned in imconfig.h must be set for all compilation units involved with Dear ImGui,
+// which is way it is required you put them in your imconfig file (and not just before including imgui.h).
+// Otherwise it is possible that different compilation units would see different structure layout
+bool ImGui::DebugCheckVersionAndDataLayout(const char* version, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_vert, size_t sz_idx)
+{
+ bool error = false;
+ if (strcmp(version, IMGUI_VERSION) != 0) { error = true; IM_ASSERT(strcmp(version, IMGUI_VERSION) == 0 && "Mismatched version string!"); }
+ if (sz_io != sizeof(ImGuiIO)) { error = true; IM_ASSERT(sz_io == sizeof(ImGuiIO) && "Mismatched struct layout!"); }
+ if (sz_style != sizeof(ImGuiStyle)) { error = true; IM_ASSERT(sz_style == sizeof(ImGuiStyle) && "Mismatched struct layout!"); }
+ if (sz_vec2 != sizeof(ImVec2)) { error = true; IM_ASSERT(sz_vec2 == sizeof(ImVec2) && "Mismatched struct layout!"); }
+ if (sz_vec4 != sizeof(ImVec4)) { error = true; IM_ASSERT(sz_vec4 == sizeof(ImVec4) && "Mismatched struct layout!"); }
+ if (sz_vert != sizeof(ImDrawVert)) { error = true; IM_ASSERT(sz_vert == sizeof(ImDrawVert) && "Mismatched struct layout!"); }
+ if (sz_idx != sizeof(ImDrawIdx)) { error = true; IM_ASSERT(sz_idx == sizeof(ImDrawIdx) && "Mismatched struct layout!"); }
+ return !error;
+}
+
+static void ImGui::ErrorCheckNewFrameSanityChecks()
+{
+ ImGuiContext& g = *GImGui;
+
+ // Check user IM_ASSERT macro
+ // (IF YOU GET A WARNING OR COMPILE ERROR HERE: it means your assert macro is incorrectly defined!
+ // If your macro uses multiple statements, it NEEDS to be surrounded by a 'do { ... } while (0)' block.
+ // This is a common C/C++ idiom to allow multiple statements macros to be used in control flow blocks.)
+ // #define IM_ASSERT(EXPR) if (SomeCode(EXPR)) SomeMoreCode(); // Wrong!
+ // #define IM_ASSERT(EXPR) do { if (SomeCode(EXPR)) SomeMoreCode(); } while (0) // Correct!
+ if (true) IM_ASSERT(1); else IM_ASSERT(0);
+
+ // Check user data
+ // (We pass an error message in the assert expression to make it visible to programmers who are not using a debugger, as most assert handlers display their argument)
+ IM_ASSERT(g.Initialized);
+ IM_ASSERT((g.IO.DeltaTime > 0.0f || g.FrameCount == 0) && "Need a positive DeltaTime!");
+ IM_ASSERT((g.FrameCount == 0 || g.FrameCountEnded == g.FrameCount) && "Forgot to call Render() or EndFrame() at the end of the previous frame?");
+ IM_ASSERT(g.IO.DisplaySize.x >= 0.0f && g.IO.DisplaySize.y >= 0.0f && "Invalid DisplaySize value!");
+ IM_ASSERT(g.IO.Fonts->IsBuilt() && "Font Atlas not built! Make sure you called ImGui_ImplXXXX_NewFrame() function for renderer backend, which should call io.Fonts->GetTexDataAsRGBA32() / GetTexDataAsAlpha8()");
+ IM_ASSERT(g.Style.CurveTessellationTol > 0.0f && "Invalid style setting!");
+ IM_ASSERT(g.Style.CircleTessellationMaxError > 0.0f && "Invalid style setting!");
+ IM_ASSERT(g.Style.Alpha >= 0.0f && g.Style.Alpha <= 1.0f && "Invalid style setting!"); // Allows us to avoid a few clamps in color computations
+ IM_ASSERT(g.Style.WindowMinSize.x >= 1.0f && g.Style.WindowMinSize.y >= 1.0f && "Invalid style setting.");
+ IM_ASSERT(g.Style.WindowMenuButtonPosition == ImGuiDir_None || g.Style.WindowMenuButtonPosition == ImGuiDir_Left || g.Style.WindowMenuButtonPosition == ImGuiDir_Right);
+ IM_ASSERT(g.Style.ColorButtonPosition == ImGuiDir_Left || g.Style.ColorButtonPosition == ImGuiDir_Right);
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+ for (int n = ImGuiKey_NamedKey_BEGIN; n < ImGuiKey_COUNT; n++)
+ IM_ASSERT(g.IO.KeyMap[n] >= -1 && g.IO.KeyMap[n] < ImGuiKey_LegacyNativeKey_END && "io.KeyMap[] contains an out of bound value (need to be 0..511, or -1 for unmapped key)");
+
+ // Check: required key mapping (we intentionally do NOT check all keys to not pressure user into setting up everything, but Space is required and was only added in 1.60 WIP)
+ if ((g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) && g.IO.BackendUsingLegacyKeyArrays == 1)
+ IM_ASSERT(g.IO.KeyMap[ImGuiKey_Space] != -1 && "ImGuiKey_Space is not mapped, required for keyboard navigation.");
+#endif
+
+ // Check: the io.ConfigWindowsResizeFromEdges option requires backend to honor mouse cursor changes and set the ImGuiBackendFlags_HasMouseCursors flag accordingly.
+ if (g.IO.ConfigWindowsResizeFromEdges && !(g.IO.BackendFlags & ImGuiBackendFlags_HasMouseCursors))
+ g.IO.ConfigWindowsResizeFromEdges = false;
+}
+
+static void ImGui::ErrorCheckEndFrameSanityChecks()
+{
+ ImGuiContext& g = *GImGui;
+
+ // Verify that io.KeyXXX fields haven't been tampered with. Key mods should not be modified between NewFrame() and EndFrame()
+ // One possible reason leading to this assert is that your backends update inputs _AFTER_ NewFrame().
+ // It is known that when some modal native windows called mid-frame takes focus away, some backends such as GLFW will
+ // send key release events mid-frame. This would normally trigger this assertion and lead to sheared inputs.
+ // We silently accommodate for this case by ignoring/ the case where all io.KeyXXX modifiers were released (aka key_mod_flags == 0),
+ // while still correctly asserting on mid-frame key press events.
+ const ImGuiModFlags key_mods = GetMergedModFlags();
+ IM_ASSERT((key_mods == 0 || g.IO.KeyMods == key_mods) && "Mismatching io.KeyCtrl/io.KeyShift/io.KeyAlt/io.KeySuper vs io.KeyMods");
+ IM_UNUSED(key_mods);
+
+ // [EXPERIMENTAL] Recover from errors: You may call this yourself before EndFrame().
+ //ErrorCheckEndFrameRecover();
+
+ // Report when there is a mismatch of Begin/BeginChild vs End/EndChild calls. Important: Remember that the Begin/BeginChild API requires you
+ // to always call End/EndChild even if Begin/BeginChild returns false! (this is unfortunately inconsistent with most other Begin* API).
+ if (g.CurrentWindowStack.Size != 1)
+ {
+ if (g.CurrentWindowStack.Size > 1)
+ {
+ IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size == 1, "Mismatched Begin/BeginChild vs End/EndChild calls: did you forget to call End/EndChild?");
+ while (g.CurrentWindowStack.Size > 1)
+ End();
+ }
+ else
+ {
+ IM_ASSERT_USER_ERROR(g.CurrentWindowStack.Size == 1, "Mismatched Begin/BeginChild vs End/EndChild calls: did you call End/EndChild too much?");
+ }
+ }
+
+ IM_ASSERT_USER_ERROR(g.GroupStack.Size == 0, "Missing EndGroup call!");
+}
+
+// Experimental recovery from incorrect usage of BeginXXX/EndXXX/PushXXX/PopXXX calls.
+// Must be called during or before EndFrame().
+// This is generally flawed as we are not necessarily End/Popping things in the right order.
+// FIXME: Can't recover from inside BeginTabItem/EndTabItem yet.
+// FIXME: Can't recover from interleaved BeginTabBar/Begin
+void ImGui::ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data)
+{
+ // PVS-Studio V1044 is "Loop break conditions do not depend on the number of iterations"
+ ImGuiContext& g = *GImGui;
+ while (g.CurrentWindowStack.Size > 0) //-V1044
+ {
+ ErrorCheckEndWindowRecover(log_callback, user_data);
+ ImGuiWindow* window = g.CurrentWindow;
+ if (g.CurrentWindowStack.Size == 1)
+ {
+ IM_ASSERT(window->IsFallbackWindow);
+ break;
+ }
+ if (window->Flags & ImGuiWindowFlags_ChildWindow)
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing EndChild() for '%s'", window->Name);
+ EndChild();
+ }
+ else
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing End() for '%s'", window->Name);
+ End();
+ }
+ }
+}
+
+// Must be called before End()/EndChild()
+void ImGui::ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data)
+{
+ ImGuiContext& g = *GImGui;
+ while (g.CurrentTable && (g.CurrentTable->OuterWindow == g.CurrentWindow || g.CurrentTable->InnerWindow == g.CurrentWindow))
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing EndTable() in '%s'", g.CurrentTable->OuterWindow->Name);
+ EndTable();
+ }
+
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiStackSizes* stack_sizes = &g.CurrentWindowStack.back().StackSizesOnBegin;
+ IM_ASSERT(window != NULL);
+ while (g.CurrentTabBar != NULL) //-V1044
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing EndTabBar() in '%s'", window->Name);
+ EndTabBar();
+ }
+ while (window->DC.TreeDepth > 0)
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing TreePop() in '%s'", window->Name);
+ TreePop();
+ }
+ while (g.GroupStack.Size > stack_sizes->SizeOfGroupStack) //-V1044
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing EndGroup() in '%s'", window->Name);
+ EndGroup();
+ }
+ while (window->IDStack.Size > 1)
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing PopID() in '%s'", window->Name);
+ PopID();
+ }
+ while (g.DisabledStackSize > stack_sizes->SizeOfDisabledStack) //-V1044
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing EndDisabled() in '%s'", window->Name);
+ EndDisabled();
+ }
+ while (g.ColorStack.Size > stack_sizes->SizeOfColorStack)
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing PopStyleColor() in '%s' for ImGuiCol_%s", window->Name, GetStyleColorName(g.ColorStack.back().Col));
+ PopStyleColor();
+ }
+ while (g.ItemFlagsStack.Size > stack_sizes->SizeOfItemFlagsStack) //-V1044
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing PopItemFlag() in '%s'", window->Name);
+ PopItemFlag();
+ }
+ while (g.StyleVarStack.Size > stack_sizes->SizeOfStyleVarStack) //-V1044
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing PopStyleVar() in '%s'", window->Name);
+ PopStyleVar();
+ }
+ while (g.FocusScopeStack.Size > stack_sizes->SizeOfFocusScopeStack) //-V1044
+ {
+ if (log_callback) log_callback(user_data, "Recovered from missing PopFocusScope() in '%s'", window->Name);
+ PopFocusScope();
+ }
+}
+
+// Save current stack sizes for later compare
+void ImGuiStackSizes::SetToCurrentState()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ SizeOfIDStack = (short)window->IDStack.Size;
+ SizeOfColorStack = (short)g.ColorStack.Size;
+ SizeOfStyleVarStack = (short)g.StyleVarStack.Size;
+ SizeOfFontStack = (short)g.FontStack.Size;
+ SizeOfFocusScopeStack = (short)g.FocusScopeStack.Size;
+ SizeOfGroupStack = (short)g.GroupStack.Size;
+ SizeOfItemFlagsStack = (short)g.ItemFlagsStack.Size;
+ SizeOfBeginPopupStack = (short)g.BeginPopupStack.Size;
+ SizeOfDisabledStack = (short)g.DisabledStackSize;
+}
+
+// Compare to detect usage errors
+void ImGuiStackSizes::CompareWithCurrentState()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ IM_UNUSED(window);
+
+ // Window stacks
+ // NOT checking: DC.ItemWidth, DC.TextWrapPos (per window) to allow user to conveniently push once and not pop (they are cleared on Begin)
+ IM_ASSERT(SizeOfIDStack == window->IDStack.Size && "PushID/PopID or TreeNode/TreePop Mismatch!");
+
+ // Global stacks
+ // For color, style and font stacks there is an incentive to use Push/Begin/Pop/.../End patterns, so we relax our checks a little to allow them.
+ IM_ASSERT(SizeOfGroupStack == g.GroupStack.Size && "BeginGroup/EndGroup Mismatch!");
+ IM_ASSERT(SizeOfBeginPopupStack == g.BeginPopupStack.Size && "BeginPopup/EndPopup or BeginMenu/EndMenu Mismatch!");
+ IM_ASSERT(SizeOfDisabledStack == g.DisabledStackSize && "BeginDisabled/EndDisabled Mismatch!");
+ IM_ASSERT(SizeOfItemFlagsStack >= g.ItemFlagsStack.Size && "PushItemFlag/PopItemFlag Mismatch!");
+ IM_ASSERT(SizeOfColorStack >= g.ColorStack.Size && "PushStyleColor/PopStyleColor Mismatch!");
+ IM_ASSERT(SizeOfStyleVarStack >= g.StyleVarStack.Size && "PushStyleVar/PopStyleVar Mismatch!");
+ IM_ASSERT(SizeOfFontStack >= g.FontStack.Size && "PushFont/PopFont Mismatch!");
+ IM_ASSERT(SizeOfFocusScopeStack == g.FocusScopeStack.Size && "PushFocusScope/PopFocusScope Mismatch!");
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] LAYOUT
+//-----------------------------------------------------------------------------
+// - ItemSize()
+// - ItemAdd()
+// - SameLine()
+// - GetCursorScreenPos()
+// - SetCursorScreenPos()
+// - GetCursorPos(), GetCursorPosX(), GetCursorPosY()
+// - SetCursorPos(), SetCursorPosX(), SetCursorPosY()
+// - GetCursorStartPos()
+// - Indent()
+// - Unindent()
+// - SetNextItemWidth()
+// - PushItemWidth()
+// - PushMultiItemsWidths()
+// - PopItemWidth()
+// - CalcItemWidth()
+// - CalcItemSize()
+// - GetTextLineHeight()
+// - GetTextLineHeightWithSpacing()
+// - GetFrameHeight()
+// - GetFrameHeightWithSpacing()
+// - GetContentRegionMax()
+// - GetContentRegionMaxAbs() [Internal]
+// - GetContentRegionAvail(),
+// - GetWindowContentRegionMin(), GetWindowContentRegionMax()
+// - BeginGroup()
+// - EndGroup()
+// Also see in imgui_widgets: tab bars, and in imgui_tables: tables, columns.
+//-----------------------------------------------------------------------------
+
+// Advance cursor given item size for layout.
+// Register minimum needed size so it can extend the bounding box used for auto-fit calculation.
+// See comments in ItemAdd() about how/why the size provided to ItemSize() vs ItemAdd() may often different.
+void ImGui::ItemSize(const ImVec2& size, float text_baseline_y)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return;
+
+ // We increase the height in this function to accommodate for baseline offset.
+ // In theory we should be offsetting the starting position (window->DC.CursorPos), that will be the topic of a larger refactor,
+ // but since ItemSize() is not yet an API that moves the cursor (to handle e.g. wrapping) enlarging the height has the same effect.
+ const float offset_to_match_baseline_y = (text_baseline_y >= 0) ? ImMax(0.0f, window->DC.CurrLineTextBaseOffset - text_baseline_y) : 0.0f;
+
+ const float line_y1 = window->DC.IsSameLine ? window->DC.CursorPosPrevLine.y : window->DC.CursorPos.y;
+ const float line_height = ImMax(window->DC.CurrLineSize.y, /*ImMax(*/window->DC.CursorPos.y - line_y1/*, 0.0f)*/ + size.y + offset_to_match_baseline_y);
+
+ // Always align ourselves on pixel boundaries
+ //if (g.IO.KeyAlt) window->DrawList->AddRect(window->DC.CursorPos, window->DC.CursorPos + ImVec2(size.x, line_height), IM_COL32(255,0,0,200)); // [DEBUG]
+ window->DC.CursorPosPrevLine.x = window->DC.CursorPos.x + size.x;
+ window->DC.CursorPosPrevLine.y = line_y1;
+ window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x); // Next line
+ window->DC.CursorPos.y = IM_FLOOR(line_y1 + line_height + g.Style.ItemSpacing.y); // Next line
+ window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPosPrevLine.x);
+ window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y - g.Style.ItemSpacing.y);
+ //if (g.IO.KeyAlt) window->DrawList->AddCircle(window->DC.CursorMaxPos, 3.0f, IM_COL32(255,0,0,255), 4); // [DEBUG]
+
+ window->DC.PrevLineSize.y = line_height;
+ window->DC.CurrLineSize.y = 0.0f;
+ window->DC.PrevLineTextBaseOffset = ImMax(window->DC.CurrLineTextBaseOffset, text_baseline_y);
+ window->DC.CurrLineTextBaseOffset = 0.0f;
+ window->DC.IsSameLine = false;
+
+ // Horizontal layout mode
+ if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
+ SameLine();
+}
+
+// Declare item bounding box for clipping and interaction.
+// Note that the size can be different than the one provided to ItemSize(). Typically, widgets that spread over available surface
+// declare their minimum size requirement to ItemSize() and provide a larger region to ItemAdd() which is used drawing/interaction.
+bool ImGui::ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb_arg, ImGuiItemFlags extra_flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ // Set item data
+ // (DisplayRect is left untouched, made valid when ImGuiItemStatusFlags_HasDisplayRect is set)
+ g.LastItemData.ID = id;
+ g.LastItemData.Rect = bb;
+ g.LastItemData.NavRect = nav_bb_arg ? *nav_bb_arg : bb;
+ g.LastItemData.InFlags = g.CurrentItemFlags | extra_flags;
+ g.LastItemData.StatusFlags = ImGuiItemStatusFlags_None;
+
+ // Directional navigation processing
+ if (id != 0)
+ {
+ KeepAliveID(id);
+
+ // Runs prior to clipping early-out
+ // (a) So that NavInitRequest can be honored, for newly opened windows to select a default widget
+ // (b) So that we can scroll up/down past clipped items. This adds a small O(N) cost to regular navigation requests
+ // unfortunately, but it is still limited to one window. It may not scale very well for windows with ten of
+ // thousands of item, but at least NavMoveRequest is only set on user interaction, aka maximum once a frame.
+ // We could early out with "if (is_clipped && !g.NavInitRequest) return false;" but when we wouldn't be able
+ // to reach unclipped widgets. This would work if user had explicit scrolling control (e.g. mapped on a stick).
+ // We intentionally don't check if g.NavWindow != NULL because g.NavAnyRequest should only be set when it is non null.
+ // If we crash on a NULL g.NavWindow we need to fix the bug elsewhere.
+ window->DC.NavLayersActiveMaskNext |= (1 << window->DC.NavLayerCurrent);
+ if (g.NavId == id || g.NavAnyRequest)
+ if (g.NavWindow->RootWindowForNav == window->RootWindowForNav)
+ if (window == g.NavWindow || ((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened))
+ NavProcessItem();
+
+ // [DEBUG] People keep stumbling on this problem and using "" as identifier in the root of a window instead of "##something".
+ // Empty identifier are valid and useful in a small amount of cases, but 99.9% of the time you want to use "##something".
+ // READ THE FAQ: https://dearimgui.org/faq
+ IM_ASSERT(id != window->ID && "Cannot have an empty ID at the root of a window. If you need an empty label, use ## and read the FAQ about how the ID Stack works!");
+
+ // [DEBUG] Item Picker tool, when enabling the "extended" version we perform the check in ItemAdd()
+#ifdef IMGUI_DEBUG_TOOL_ITEM_PICKER_EX
+ if (id == g.DebugItemPickerBreakId)
+ {
+ IM_DEBUG_BREAK();
+ g.DebugItemPickerBreakId = 0;
+ }
+#endif
+ }
+ g.NextItemData.Flags = ImGuiNextItemDataFlags_None;
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ if (id != 0)
+ IMGUI_TEST_ENGINE_ITEM_ADD(nav_bb_arg ? *nav_bb_arg : bb, id);
+#endif
+
+ // Clipping test
+ const bool is_clipped = IsClippedEx(bb, id);
+ if (is_clipped)
+ return false;
+ //if (g.IO.KeyAlt) window->DrawList->AddRect(bb.Min, bb.Max, IM_COL32(255,255,0,120)); // [DEBUG]
+
+ // We need to calculate this now to take account of the current clipping rectangle (as items like Selectable may change them)
+ if (IsMouseHoveringRect(bb.Min, bb.Max))
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_HoveredRect;
+ return true;
+}
+
+// Gets back to previous line and continue with horizontal layout
+// offset_from_start_x == 0 : follow right after previous item
+// offset_from_start_x != 0 : align to specified x position (relative to window/group left)
+// spacing_w < 0 : use default spacing if pos_x == 0, no spacing if pos_x != 0
+// spacing_w >= 0 : enforce spacing amount
+void ImGui::SameLine(float offset_from_start_x, float spacing_w)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return;
+
+ if (offset_from_start_x != 0.0f)
+ {
+ if (spacing_w < 0.0f)
+ spacing_w = 0.0f;
+ window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + offset_from_start_x + spacing_w + window->DC.GroupOffset.x + window->DC.ColumnsOffset.x;
+ window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y;
+ }
+ else
+ {
+ if (spacing_w < 0.0f)
+ spacing_w = g.Style.ItemSpacing.x;
+ window->DC.CursorPos.x = window->DC.CursorPosPrevLine.x + spacing_w;
+ window->DC.CursorPos.y = window->DC.CursorPosPrevLine.y;
+ }
+ window->DC.CurrLineSize = window->DC.PrevLineSize;
+ window->DC.CurrLineTextBaseOffset = window->DC.PrevLineTextBaseOffset;
+ window->DC.IsSameLine = true;
+}
+
+ImVec2 ImGui::GetCursorScreenPos()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->DC.CursorPos;
+}
+
+void ImGui::SetCursorScreenPos(const ImVec2& pos)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ window->DC.CursorPos = pos;
+ window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos);
+}
+
+// User generally sees positions in window coordinates. Internally we store CursorPos in absolute screen coordinates because it is more convenient.
+// Conversion happens as we pass the value to user, but it makes our naming convention confusing because GetCursorPos() == (DC.CursorPos - window.Pos). May want to rename 'DC.CursorPos'.
+ImVec2 ImGui::GetCursorPos()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->DC.CursorPos - window->Pos + window->Scroll;
+}
+
+float ImGui::GetCursorPosX()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->DC.CursorPos.x - window->Pos.x + window->Scroll.x;
+}
+
+float ImGui::GetCursorPosY()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->DC.CursorPos.y - window->Pos.y + window->Scroll.y;
+}
+
+void ImGui::SetCursorPos(const ImVec2& local_pos)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ window->DC.CursorPos = window->Pos - window->Scroll + local_pos;
+ window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, window->DC.CursorPos);
+}
+
+void ImGui::SetCursorPosX(float x)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ window->DC.CursorPos.x = window->Pos.x - window->Scroll.x + x;
+ window->DC.CursorMaxPos.x = ImMax(window->DC.CursorMaxPos.x, window->DC.CursorPos.x);
+}
+
+void ImGui::SetCursorPosY(float y)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ window->DC.CursorPos.y = window->Pos.y - window->Scroll.y + y;
+ window->DC.CursorMaxPos.y = ImMax(window->DC.CursorMaxPos.y, window->DC.CursorPos.y);
+}
+
+ImVec2 ImGui::GetCursorStartPos()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->DC.CursorStartPos - window->Pos;
+}
+
+void ImGui::Indent(float indent_w)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ window->DC.Indent.x += (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing;
+ window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x;
+}
+
+void ImGui::Unindent(float indent_w)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ window->DC.Indent.x -= (indent_w != 0.0f) ? indent_w : g.Style.IndentSpacing;
+ window->DC.CursorPos.x = window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x;
+}
+
+// Affect large frame+labels widgets only.
+void ImGui::SetNextItemWidth(float item_width)
+{
+ ImGuiContext& g = *GImGui;
+ g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasWidth;
+ g.NextItemData.Width = item_width;
+}
+
+// FIXME: Remove the == 0.0f behavior?
+void ImGui::PushItemWidth(float item_width)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ window->DC.ItemWidthStack.push_back(window->DC.ItemWidth); // Backup current width
+ window->DC.ItemWidth = (item_width == 0.0f ? window->ItemWidthDefault : item_width);
+ g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
+}
+
+void ImGui::PushMultiItemsWidths(int components, float w_full)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ const ImGuiStyle& style = g.Style;
+ const float w_item_one = ImMax(1.0f, IM_FLOOR((w_full - (style.ItemInnerSpacing.x) * (components - 1)) / (float)components));
+ const float w_item_last = ImMax(1.0f, IM_FLOOR(w_full - (w_item_one + style.ItemInnerSpacing.x) * (components - 1)));
+ window->DC.ItemWidthStack.push_back(window->DC.ItemWidth); // Backup current width
+ window->DC.ItemWidthStack.push_back(w_item_last);
+ for (int i = 0; i < components - 2; i++)
+ window->DC.ItemWidthStack.push_back(w_item_one);
+ window->DC.ItemWidth = (components == 1) ? w_item_last : w_item_one;
+ g.NextItemData.Flags &= ~ImGuiNextItemDataFlags_HasWidth;
+}
+
+void ImGui::PopItemWidth()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ window->DC.ItemWidth = window->DC.ItemWidthStack.back();
+ window->DC.ItemWidthStack.pop_back();
+}
+
+// Calculate default item width given value passed to PushItemWidth() or SetNextItemWidth().
+// The SetNextItemWidth() data is generally cleared/consumed by ItemAdd() or NextItemData.ClearFlags()
+float ImGui::CalcItemWidth()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ float w;
+ if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasWidth)
+ w = g.NextItemData.Width;
+ else
+ w = window->DC.ItemWidth;
+ if (w < 0.0f)
+ {
+ float region_max_x = GetContentRegionMaxAbs().x;
+ w = ImMax(1.0f, region_max_x - window->DC.CursorPos.x + w);
+ }
+ w = IM_FLOOR(w);
+ return w;
+}
+
+// [Internal] Calculate full item size given user provided 'size' parameter and default width/height. Default width is often == CalcItemWidth().
+// Those two functions CalcItemWidth vs CalcItemSize are awkwardly named because they are not fully symmetrical.
+// Note that only CalcItemWidth() is publicly exposed.
+// The 4.0f here may be changed to match CalcItemWidth() and/or BeginChild() (right now we have a mismatch which is harmless but undesirable)
+ImVec2 ImGui::CalcItemSize(ImVec2 size, float default_w, float default_h)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ ImVec2 region_max;
+ if (size.x < 0.0f || size.y < 0.0f)
+ region_max = GetContentRegionMaxAbs();
+
+ if (size.x == 0.0f)
+ size.x = default_w;
+ else if (size.x < 0.0f)
+ size.x = ImMax(4.0f, region_max.x - window->DC.CursorPos.x + size.x);
+
+ if (size.y == 0.0f)
+ size.y = default_h;
+ else if (size.y < 0.0f)
+ size.y = ImMax(4.0f, region_max.y - window->DC.CursorPos.y + size.y);
+
+ return size;
+}
+
+float ImGui::GetTextLineHeight()
+{
+ ImGuiContext& g = *GImGui;
+ return g.FontSize;
+}
+
+float ImGui::GetTextLineHeightWithSpacing()
+{
+ ImGuiContext& g = *GImGui;
+ return g.FontSize + g.Style.ItemSpacing.y;
+}
+
+float ImGui::GetFrameHeight()
+{
+ ImGuiContext& g = *GImGui;
+ return g.FontSize + g.Style.FramePadding.y * 2.0f;
+}
+
+float ImGui::GetFrameHeightWithSpacing()
+{
+ ImGuiContext& g = *GImGui;
+ return g.FontSize + g.Style.FramePadding.y * 2.0f + g.Style.ItemSpacing.y;
+}
+
+// FIXME: All the Contents Region function are messy or misleading. WE WILL AIM TO OBSOLETE ALL OF THEM WITH A NEW "WORK RECT" API. Thanks for your patience!
+
+// FIXME: This is in window space (not screen space!).
+ImVec2 ImGui::GetContentRegionMax()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImVec2 mx = window->ContentRegionRect.Max - window->Pos;
+ if (window->DC.CurrentColumns || g.CurrentTable)
+ mx.x = window->WorkRect.Max.x - window->Pos.x;
+ return mx;
+}
+
+// [Internal] Absolute coordinate. Saner. This is not exposed until we finishing refactoring work rect features.
+ImVec2 ImGui::GetContentRegionMaxAbs()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImVec2 mx = window->ContentRegionRect.Max;
+ if (window->DC.CurrentColumns || g.CurrentTable)
+ mx.x = window->WorkRect.Max.x;
+ return mx;
+}
+
+ImVec2 ImGui::GetContentRegionAvail()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return GetContentRegionMaxAbs() - window->DC.CursorPos;
+}
+
+// In window space (not screen space!)
+ImVec2 ImGui::GetWindowContentRegionMin()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->ContentRegionRect.Min - window->Pos;
+}
+
+ImVec2 ImGui::GetWindowContentRegionMax()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->ContentRegionRect.Max - window->Pos;
+}
+
+// Lock horizontal starting position + capture group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.)
+// Groups are currently a mishmash of functionalities which should perhaps be clarified and separated.
+// FIXME-OPT: Could we safely early out on ->SkipItems?
+void ImGui::BeginGroup()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ g.GroupStack.resize(g.GroupStack.Size + 1);
+ ImGuiGroupData& group_data = g.GroupStack.back();
+ group_data.WindowID = window->ID;
+ group_data.BackupCursorPos = window->DC.CursorPos;
+ group_data.BackupCursorMaxPos = window->DC.CursorMaxPos;
+ group_data.BackupIndent = window->DC.Indent;
+ group_data.BackupGroupOffset = window->DC.GroupOffset;
+ group_data.BackupCurrLineSize = window->DC.CurrLineSize;
+ group_data.BackupCurrLineTextBaseOffset = window->DC.CurrLineTextBaseOffset;
+ group_data.BackupActiveIdIsAlive = g.ActiveIdIsAlive;
+ group_data.BackupHoveredIdIsAlive = g.HoveredId != 0;
+ group_data.BackupActiveIdPreviousFrameIsAlive = g.ActiveIdPreviousFrameIsAlive;
+ group_data.EmitItem = true;
+
+ window->DC.GroupOffset.x = window->DC.CursorPos.x - window->Pos.x - window->DC.ColumnsOffset.x;
+ window->DC.Indent = window->DC.GroupOffset;
+ window->DC.CursorMaxPos = window->DC.CursorPos;
+ window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
+ if (g.LogEnabled)
+ g.LogLinePosY = -FLT_MAX; // To enforce a carriage return
+}
+
+void ImGui::EndGroup()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ IM_ASSERT(g.GroupStack.Size > 0); // Mismatched BeginGroup()/EndGroup() calls
+
+ ImGuiGroupData& group_data = g.GroupStack.back();
+ IM_ASSERT(group_data.WindowID == window->ID); // EndGroup() in wrong window?
+
+ ImRect group_bb(group_data.BackupCursorPos, ImMax(window->DC.CursorMaxPos, group_data.BackupCursorPos));
+
+ window->DC.CursorPos = group_data.BackupCursorPos;
+ window->DC.CursorMaxPos = ImMax(group_data.BackupCursorMaxPos, window->DC.CursorMaxPos);
+ window->DC.Indent = group_data.BackupIndent;
+ window->DC.GroupOffset = group_data.BackupGroupOffset;
+ window->DC.CurrLineSize = group_data.BackupCurrLineSize;
+ window->DC.CurrLineTextBaseOffset = group_data.BackupCurrLineTextBaseOffset;
+ if (g.LogEnabled)
+ g.LogLinePosY = -FLT_MAX; // To enforce a carriage return
+
+ if (!group_data.EmitItem)
+ {
+ g.GroupStack.pop_back();
+ return;
+ }
+
+ window->DC.CurrLineTextBaseOffset = ImMax(window->DC.PrevLineTextBaseOffset, group_data.BackupCurrLineTextBaseOffset); // FIXME: Incorrect, we should grab the base offset from the *first line* of the group but it is hard to obtain now.
+ ItemSize(group_bb.GetSize());
+ ItemAdd(group_bb, 0, NULL, ImGuiItemFlags_NoTabStop);
+
+ // If the current ActiveId was declared within the boundary of our group, we copy it to LastItemId so IsItemActive(), IsItemDeactivated() etc. will be functional on the entire group.
+ // It would be be neater if we replaced window.DC.LastItemId by e.g. 'bool LastItemIsActive', but would put a little more burden on individual widgets.
+ // Also if you grep for LastItemId you'll notice it is only used in that context.
+ // (The two tests not the same because ActiveIdIsAlive is an ID itself, in order to be able to handle ActiveId being overwritten during the frame.)
+ const bool group_contains_curr_active_id = (group_data.BackupActiveIdIsAlive != g.ActiveId) && (g.ActiveIdIsAlive == g.ActiveId) && g.ActiveId;
+ const bool group_contains_prev_active_id = (group_data.BackupActiveIdPreviousFrameIsAlive == false) && (g.ActiveIdPreviousFrameIsAlive == true);
+ if (group_contains_curr_active_id)
+ g.LastItemData.ID = g.ActiveId;
+ else if (group_contains_prev_active_id)
+ g.LastItemData.ID = g.ActiveIdPreviousFrame;
+ g.LastItemData.Rect = group_bb;
+
+ // Forward Hovered flag
+ const bool group_contains_curr_hovered_id = (group_data.BackupHoveredIdIsAlive == false) && g.HoveredId != 0;
+ if (group_contains_curr_hovered_id)
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_HoveredWindow;
+
+ // Forward Edited flag
+ if (group_contains_curr_active_id && g.ActiveIdHasBeenEditedThisFrame)
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_Edited;
+
+ // Forward Deactivated flag
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_HasDeactivated;
+ if (group_contains_prev_active_id && g.ActiveId != g.ActiveIdPreviousFrame)
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_Deactivated;
+
+ g.GroupStack.pop_back();
+ //window->DrawList->AddRect(group_bb.Min, group_bb.Max, IM_COL32(255,0,255,255)); // [Debug]
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] SCROLLING
+//-----------------------------------------------------------------------------
+
+// Helper to snap on edges when aiming at an item very close to the edge,
+// So the difference between WindowPadding and ItemSpacing will be in the visible area after scrolling.
+// When we refactor the scrolling API this may be configurable with a flag?
+// Note that the effect for this won't be visible on X axis with default Style settings as WindowPadding.x == ItemSpacing.x by default.
+static float CalcScrollEdgeSnap(float target, float snap_min, float snap_max, float snap_threshold, float center_ratio)
+{
+ if (target <= snap_min + snap_threshold)
+ return ImLerp(snap_min, target, center_ratio);
+ if (target >= snap_max - snap_threshold)
+ return ImLerp(target, snap_max, center_ratio);
+ return target;
+}
+
+static ImVec2 CalcNextScrollFromScrollTargetAndClamp(ImGuiWindow* window)
+{
+ ImVec2 scroll = window->Scroll;
+ if (window->ScrollTarget.x < FLT_MAX)
+ {
+ float decoration_total_width = window->ScrollbarSizes.x;
+ float center_x_ratio = window->ScrollTargetCenterRatio.x;
+ float scroll_target_x = window->ScrollTarget.x;
+ if (window->ScrollTargetEdgeSnapDist.x > 0.0f)
+ {
+ float snap_x_min = 0.0f;
+ float snap_x_max = window->ScrollMax.x + window->SizeFull.x - decoration_total_width;
+ scroll_target_x = CalcScrollEdgeSnap(scroll_target_x, snap_x_min, snap_x_max, window->ScrollTargetEdgeSnapDist.x, center_x_ratio);
+ }
+ scroll.x = scroll_target_x - center_x_ratio * (window->SizeFull.x - decoration_total_width);
+ }
+ if (window->ScrollTarget.y < FLT_MAX)
+ {
+ float decoration_total_height = window->TitleBarHeight() + window->MenuBarHeight() + window->ScrollbarSizes.y;
+ float center_y_ratio = window->ScrollTargetCenterRatio.y;
+ float scroll_target_y = window->ScrollTarget.y;
+ if (window->ScrollTargetEdgeSnapDist.y > 0.0f)
+ {
+ float snap_y_min = 0.0f;
+ float snap_y_max = window->ScrollMax.y + window->SizeFull.y - decoration_total_height;
+ scroll_target_y = CalcScrollEdgeSnap(scroll_target_y, snap_y_min, snap_y_max, window->ScrollTargetEdgeSnapDist.y, center_y_ratio);
+ }
+ scroll.y = scroll_target_y - center_y_ratio * (window->SizeFull.y - decoration_total_height);
+ }
+ scroll.x = IM_FLOOR(ImMax(scroll.x, 0.0f));
+ scroll.y = IM_FLOOR(ImMax(scroll.y, 0.0f));
+ if (!window->Collapsed && !window->SkipItems)
+ {
+ scroll.x = ImMin(scroll.x, window->ScrollMax.x);
+ scroll.y = ImMin(scroll.y, window->ScrollMax.y);
+ }
+ return scroll;
+}
+
+void ImGui::ScrollToItem(ImGuiScrollFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ScrollToRectEx(window, g.LastItemData.NavRect, flags);
+}
+
+void ImGui::ScrollToRect(ImGuiWindow* window, const ImRect& item_rect, ImGuiScrollFlags flags)
+{
+ ScrollToRectEx(window, item_rect, flags);
+}
+
+// Scroll to keep newly navigated item fully into view
+ImVec2 ImGui::ScrollToRectEx(ImGuiWindow* window, const ImRect& item_rect, ImGuiScrollFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImRect window_rect(window->InnerRect.Min - ImVec2(1, 1), window->InnerRect.Max + ImVec2(1, 1));
+ //GetForegroundDrawList(window)->AddRect(window_rect.Min, window_rect.Max, IM_COL32_WHITE); // [DEBUG]
+
+ // Check that only one behavior is selected per axis
+ IM_ASSERT((flags & ImGuiScrollFlags_MaskX_) == 0 || ImIsPowerOfTwo(flags & ImGuiScrollFlags_MaskX_));
+ IM_ASSERT((flags & ImGuiScrollFlags_MaskY_) == 0 || ImIsPowerOfTwo(flags & ImGuiScrollFlags_MaskY_));
+
+ // Defaults
+ ImGuiScrollFlags in_flags = flags;
+ if ((flags & ImGuiScrollFlags_MaskX_) == 0 && window->ScrollbarX)
+ flags |= ImGuiScrollFlags_KeepVisibleEdgeX;
+ if ((flags & ImGuiScrollFlags_MaskY_) == 0)
+ flags |= window->Appearing ? ImGuiScrollFlags_AlwaysCenterY : ImGuiScrollFlags_KeepVisibleEdgeY;
+
+ const bool fully_visible_x = item_rect.Min.x >= window_rect.Min.x && item_rect.Max.x <= window_rect.Max.x;
+ const bool fully_visible_y = item_rect.Min.y >= window_rect.Min.y && item_rect.Max.y <= window_rect.Max.y;
+ const bool can_be_fully_visible_x = (item_rect.GetWidth() + g.Style.ItemSpacing.x * 2.0f) <= window_rect.GetWidth();
+ const bool can_be_fully_visible_y = (item_rect.GetHeight() + g.Style.ItemSpacing.y * 2.0f) <= window_rect.GetHeight();
+
+ if ((flags & ImGuiScrollFlags_KeepVisibleEdgeX) && !fully_visible_x)
+ {
+ if (item_rect.Min.x < window_rect.Min.x || !can_be_fully_visible_x)
+ SetScrollFromPosX(window, item_rect.Min.x - g.Style.ItemSpacing.x - window->Pos.x, 0.0f);
+ else if (item_rect.Max.x >= window_rect.Max.x)
+ SetScrollFromPosX(window, item_rect.Max.x + g.Style.ItemSpacing.x - window->Pos.x, 1.0f);
+ }
+ else if (((flags & ImGuiScrollFlags_KeepVisibleCenterX) && !fully_visible_x) || (flags & ImGuiScrollFlags_AlwaysCenterX))
+ {
+ float target_x = can_be_fully_visible_x ? ImFloor((item_rect.Min.x + item_rect.Max.x - window->InnerRect.GetWidth()) * 0.5f) : item_rect.Min.x;
+ SetScrollFromPosX(window, target_x - window->Pos.x, 0.0f);
+ }
+
+ if ((flags & ImGuiScrollFlags_KeepVisibleEdgeY) && !fully_visible_y)
+ {
+ if (item_rect.Min.y < window_rect.Min.y || !can_be_fully_visible_y)
+ SetScrollFromPosY(window, item_rect.Min.y - g.Style.ItemSpacing.y - window->Pos.y, 0.0f);
+ else if (item_rect.Max.y >= window_rect.Max.y)
+ SetScrollFromPosY(window, item_rect.Max.y + g.Style.ItemSpacing.y - window->Pos.y, 1.0f);
+ }
+ else if (((flags & ImGuiScrollFlags_KeepVisibleCenterY) && !fully_visible_y) || (flags & ImGuiScrollFlags_AlwaysCenterY))
+ {
+ float target_y = can_be_fully_visible_y ? ImFloor((item_rect.Min.y + item_rect.Max.y - window->InnerRect.GetHeight()) * 0.5f) : item_rect.Min.y;
+ SetScrollFromPosY(window, target_y - window->Pos.y, 0.0f);
+ }
+
+ ImVec2 next_scroll = CalcNextScrollFromScrollTargetAndClamp(window);
+ ImVec2 delta_scroll = next_scroll - window->Scroll;
+
+ // Also scroll parent window to keep us into view if necessary
+ if (!(flags & ImGuiScrollFlags_NoScrollParent) && (window->Flags & ImGuiWindowFlags_ChildWindow))
+ {
+ // FIXME-SCROLL: May be an option?
+ if ((in_flags & (ImGuiScrollFlags_AlwaysCenterX | ImGuiScrollFlags_KeepVisibleCenterX)) != 0)
+ in_flags = (in_flags & ~ImGuiScrollFlags_MaskX_) | ImGuiScrollFlags_KeepVisibleEdgeX;
+ if ((in_flags & (ImGuiScrollFlags_AlwaysCenterY | ImGuiScrollFlags_KeepVisibleCenterY)) != 0)
+ in_flags = (in_flags & ~ImGuiScrollFlags_MaskY_) | ImGuiScrollFlags_KeepVisibleEdgeY;
+ delta_scroll += ScrollToRectEx(window->ParentWindow, ImRect(item_rect.Min - delta_scroll, item_rect.Max - delta_scroll), in_flags);
+ }
+
+ return delta_scroll;
+}
+
+float ImGui::GetScrollX()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->Scroll.x;
+}
+
+float ImGui::GetScrollY()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->Scroll.y;
+}
+
+float ImGui::GetScrollMaxX()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->ScrollMax.x;
+}
+
+float ImGui::GetScrollMaxY()
+{
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->ScrollMax.y;
+}
+
+void ImGui::SetScrollX(ImGuiWindow* window, float scroll_x)
+{
+ window->ScrollTarget.x = scroll_x;
+ window->ScrollTargetCenterRatio.x = 0.0f;
+ window->ScrollTargetEdgeSnapDist.x = 0.0f;
+}
+
+void ImGui::SetScrollY(ImGuiWindow* window, float scroll_y)
+{
+ window->ScrollTarget.y = scroll_y;
+ window->ScrollTargetCenterRatio.y = 0.0f;
+ window->ScrollTargetEdgeSnapDist.y = 0.0f;
+}
+
+void ImGui::SetScrollX(float scroll_x)
+{
+ ImGuiContext& g = *GImGui;
+ SetScrollX(g.CurrentWindow, scroll_x);
+}
+
+void ImGui::SetScrollY(float scroll_y)
+{
+ ImGuiContext& g = *GImGui;
+ SetScrollY(g.CurrentWindow, scroll_y);
+}
+
+// Note that a local position will vary depending on initial scroll value,
+// This is a little bit confusing so bear with us:
+// - local_pos = (absolution_pos - window->Pos)
+// - So local_x/local_y are 0.0f for a position at the upper-left corner of a window,
+// and generally local_x/local_y are >(padding+decoration) && <(size-padding-decoration) when in the visible area.
+// - They mostly exists because of legacy API.
+// Following the rules above, when trying to work with scrolling code, consider that:
+// - SetScrollFromPosY(0.0f) == SetScrollY(0.0f + scroll.y) == has no effect!
+// - SetScrollFromPosY(-scroll.y) == SetScrollY(-scroll.y + scroll.y) == SetScrollY(0.0f) == reset scroll. Of course writing SetScrollY(0.0f) directly then makes more sense
+// We store a target position so centering and clamping can occur on the next frame when we are guaranteed to have a known window size
+void ImGui::SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio)
+{
+ IM_ASSERT(center_x_ratio >= 0.0f && center_x_ratio <= 1.0f);
+ window->ScrollTarget.x = IM_FLOOR(local_x + window->Scroll.x); // Convert local position to scroll offset
+ window->ScrollTargetCenterRatio.x = center_x_ratio;
+ window->ScrollTargetEdgeSnapDist.x = 0.0f;
+}
+
+void ImGui::SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio)
+{
+ IM_ASSERT(center_y_ratio >= 0.0f && center_y_ratio <= 1.0f);
+ const float decoration_up_height = window->TitleBarHeight() + window->MenuBarHeight(); // FIXME: Would be nice to have a more standardized access to our scrollable/client rect;
+ local_y -= decoration_up_height;
+ window->ScrollTarget.y = IM_FLOOR(local_y + window->Scroll.y); // Convert local position to scroll offset
+ window->ScrollTargetCenterRatio.y = center_y_ratio;
+ window->ScrollTargetEdgeSnapDist.y = 0.0f;
+}
+
+void ImGui::SetScrollFromPosX(float local_x, float center_x_ratio)
+{
+ ImGuiContext& g = *GImGui;
+ SetScrollFromPosX(g.CurrentWindow, local_x, center_x_ratio);
+}
+
+void ImGui::SetScrollFromPosY(float local_y, float center_y_ratio)
+{
+ ImGuiContext& g = *GImGui;
+ SetScrollFromPosY(g.CurrentWindow, local_y, center_y_ratio);
+}
+
+// center_x_ratio: 0.0f left of last item, 0.5f horizontal center of last item, 1.0f right of last item.
+void ImGui::SetScrollHereX(float center_x_ratio)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ float spacing_x = ImMax(window->WindowPadding.x, g.Style.ItemSpacing.x);
+ float target_pos_x = ImLerp(g.LastItemData.Rect.Min.x - spacing_x, g.LastItemData.Rect.Max.x + spacing_x, center_x_ratio);
+ SetScrollFromPosX(window, target_pos_x - window->Pos.x, center_x_ratio); // Convert from absolute to local pos
+
+ // Tweak: snap on edges when aiming at an item very close to the edge
+ window->ScrollTargetEdgeSnapDist.x = ImMax(0.0f, window->WindowPadding.x - spacing_x);
+}
+
+// center_y_ratio: 0.0f top of last item, 0.5f vertical center of last item, 1.0f bottom of last item.
+void ImGui::SetScrollHereY(float center_y_ratio)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ float spacing_y = ImMax(window->WindowPadding.y, g.Style.ItemSpacing.y);
+ float target_pos_y = ImLerp(window->DC.CursorPosPrevLine.y - spacing_y, window->DC.CursorPosPrevLine.y + window->DC.PrevLineSize.y + spacing_y, center_y_ratio);
+ SetScrollFromPosY(window, target_pos_y - window->Pos.y, center_y_ratio); // Convert from absolute to local pos
+
+ // Tweak: snap on edges when aiming at an item very close to the edge
+ window->ScrollTargetEdgeSnapDist.y = ImMax(0.0f, window->WindowPadding.y - spacing_y);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] TOOLTIPS
+//-----------------------------------------------------------------------------
+
+void ImGui::BeginTooltip()
+{
+ BeginTooltipEx(ImGuiTooltipFlags_None, ImGuiWindowFlags_None);
+}
+
+void ImGui::BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags)
+{
+ ImGuiContext& g = *GImGui;
+
+ if (g.DragDropWithinSource || g.DragDropWithinTarget)
+ {
+ // The default tooltip position is a little offset to give space to see the context menu (it's also clamped within the current viewport/monitor)
+ // In the context of a dragging tooltip we try to reduce that offset and we enforce following the cursor.
+ // Whatever we do we want to call SetNextWindowPos() to enforce a tooltip position and disable clipping the tooltip without our display area, like regular tooltip do.
+ //ImVec2 tooltip_pos = g.IO.MousePos - g.ActiveIdClickOffset - g.Style.WindowPadding;
+ ImVec2 tooltip_pos = g.IO.MousePos + ImVec2(16 * g.Style.MouseCursorScale, 8 * g.Style.MouseCursorScale);
+ SetNextWindowPos(tooltip_pos);
+ SetNextWindowBgAlpha(g.Style.Colors[ImGuiCol_PopupBg].w * 0.60f);
+ //PushStyleVar(ImGuiStyleVar_Alpha, g.Style.Alpha * 0.60f); // This would be nice but e.g ColorButton with checkboard has issue with transparent colors :(
+ tooltip_flags |= ImGuiTooltipFlags_OverridePreviousTooltip;
+ }
+
+ char window_name[16];
+ ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", g.TooltipOverrideCount);
+ if (tooltip_flags & ImGuiTooltipFlags_OverridePreviousTooltip)
+ if (ImGuiWindow* window = FindWindowByName(window_name))
+ if (window->Active)
+ {
+ // Hide previous tooltip from being displayed. We can't easily "reset" the content of a window so we create a new one.
+ window->Hidden = true;
+ window->HiddenFramesCanSkipItems = 1; // FIXME: This may not be necessary?
+ ImFormatString(window_name, IM_ARRAYSIZE(window_name), "##Tooltip_%02d", ++g.TooltipOverrideCount);
+ }
+ ImGuiWindowFlags flags = ImGuiWindowFlags_Tooltip | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_AlwaysAutoResize;
+ Begin(window_name, NULL, flags | extra_window_flags);
+}
+
+void ImGui::EndTooltip()
+{
+ IM_ASSERT(GetCurrentWindowRead()->Flags & ImGuiWindowFlags_Tooltip); // Mismatched BeginTooltip()/EndTooltip() calls
+ End();
+}
+
+void ImGui::SetTooltipV(const char* fmt, va_list args)
+{
+ BeginTooltipEx(ImGuiTooltipFlags_OverridePreviousTooltip, ImGuiWindowFlags_None);
+ TextV(fmt, args);
+ EndTooltip();
+}
+
+void ImGui::SetTooltip(const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ SetTooltipV(fmt, args);
+ va_end(args);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] POPUPS
+//-----------------------------------------------------------------------------
+
+// Supported flags: ImGuiPopupFlags_AnyPopupId, ImGuiPopupFlags_AnyPopupLevel
+bool ImGui::IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags)
+{
+ ImGuiContext& g = *GImGui;
+ if (popup_flags & ImGuiPopupFlags_AnyPopupId)
+ {
+ // Return true if any popup is open at the current BeginPopup() level of the popup stack
+ // This may be used to e.g. test for another popups already opened to handle popups priorities at the same level.
+ IM_ASSERT(id == 0);
+ if (popup_flags & ImGuiPopupFlags_AnyPopupLevel)
+ return g.OpenPopupStack.Size > 0;
+ else
+ return g.OpenPopupStack.Size > g.BeginPopupStack.Size;
+ }
+ else
+ {
+ if (popup_flags & ImGuiPopupFlags_AnyPopupLevel)
+ {
+ // Return true if the popup is open anywhere in the popup stack
+ for (int n = 0; n < g.OpenPopupStack.Size; n++)
+ if (g.OpenPopupStack[n].PopupId == id)
+ return true;
+ return false;
+ }
+ else
+ {
+ // Return true if the popup is open at the current BeginPopup() level of the popup stack (this is the most-common query)
+ return g.OpenPopupStack.Size > g.BeginPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].PopupId == id;
+ }
+ }
+}
+
+bool ImGui::IsPopupOpen(const char* str_id, ImGuiPopupFlags popup_flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiID id = (popup_flags & ImGuiPopupFlags_AnyPopupId) ? 0 : g.CurrentWindow->GetID(str_id);
+ if ((popup_flags & ImGuiPopupFlags_AnyPopupLevel) && id != 0)
+ IM_ASSERT(0 && "Cannot use IsPopupOpen() with a string id and ImGuiPopupFlags_AnyPopupLevel."); // But non-string version is legal and used internally
+ return IsPopupOpen(id, popup_flags);
+}
+
+ImGuiWindow* ImGui::GetTopMostPopupModal()
+{
+ ImGuiContext& g = *GImGui;
+ for (int n = g.OpenPopupStack.Size - 1; n >= 0; n--)
+ if (ImGuiWindow* popup = g.OpenPopupStack.Data[n].Window)
+ if (popup->Flags & ImGuiWindowFlags_Modal)
+ return popup;
+ return NULL;
+}
+
+ImGuiWindow* ImGui::GetTopMostAndVisiblePopupModal()
+{
+ ImGuiContext& g = *GImGui;
+ for (int n = g.OpenPopupStack.Size - 1; n >= 0; n--)
+ if (ImGuiWindow* popup = g.OpenPopupStack.Data[n].Window)
+ if ((popup->Flags & ImGuiWindowFlags_Modal) && IsWindowActiveAndVisible(popup))
+ return popup;
+ return NULL;
+}
+
+void ImGui::OpenPopup(const char* str_id, ImGuiPopupFlags popup_flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiID id = g.CurrentWindow->GetID(str_id);
+ IMGUI_DEBUG_LOG_POPUP("[popup] OpenPopup(\"%s\" -> 0x%08X\n", str_id, id);
+ OpenPopupEx(id, popup_flags);
+}
+
+void ImGui::OpenPopup(ImGuiID id, ImGuiPopupFlags popup_flags)
+{
+ OpenPopupEx(id, popup_flags);
+}
+
+// Mark popup as open (toggle toward open state).
+// Popups are closed when user click outside, or activate a pressable item, or CloseCurrentPopup() is called within a BeginPopup()/EndPopup() block.
+// Popup identifiers are relative to the current ID-stack (so OpenPopup and BeginPopup needs to be at the same level).
+// One open popup per level of the popup hierarchy (NB: when assigning we reset the Window member of ImGuiPopupRef to NULL)
+void ImGui::OpenPopupEx(ImGuiID id, ImGuiPopupFlags popup_flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* parent_window = g.CurrentWindow;
+ const int current_stack_size = g.BeginPopupStack.Size;
+
+ if (popup_flags & ImGuiPopupFlags_NoOpenOverExistingPopup)
+ if (IsPopupOpen(0u, ImGuiPopupFlags_AnyPopupId))
+ return;
+
+ ImGuiPopupData popup_ref; // Tagged as new ref as Window will be set back to NULL if we write this into OpenPopupStack.
+ popup_ref.PopupId = id;
+ popup_ref.Window = NULL;
+ popup_ref.SourceWindow = g.NavWindow;
+ popup_ref.OpenFrameCount = g.FrameCount;
+ popup_ref.OpenParentId = parent_window->IDStack.back();
+ popup_ref.OpenPopupPos = NavCalcPreferredRefPos();
+ popup_ref.OpenMousePos = IsMousePosValid(&g.IO.MousePos) ? g.IO.MousePos : popup_ref.OpenPopupPos;
+
+ IMGUI_DEBUG_LOG_POPUP("[popup] OpenPopupEx(0x%08X)\n", id);
+ if (g.OpenPopupStack.Size < current_stack_size + 1)
+ {
+ g.OpenPopupStack.push_back(popup_ref);
+ }
+ else
+ {
+ // Gently handle the user mistakenly calling OpenPopup() every frame. It is a programming mistake! However, if we were to run the regular code path, the ui
+ // would become completely unusable because the popup will always be in hidden-while-calculating-size state _while_ claiming focus. Which would be a very confusing
+ // situation for the programmer. Instead, we silently allow the popup to proceed, it will keep reappearing and the programming error will be more obvious to understand.
+ if (g.OpenPopupStack[current_stack_size].PopupId == id && g.OpenPopupStack[current_stack_size].OpenFrameCount == g.FrameCount - 1)
+ {
+ g.OpenPopupStack[current_stack_size].OpenFrameCount = popup_ref.OpenFrameCount;
+ }
+ else
+ {
+ // Close child popups if any, then flag popup for open/reopen
+ ClosePopupToLevel(current_stack_size, false);
+ g.OpenPopupStack.push_back(popup_ref);
+ }
+
+ // When reopening a popup we first refocus its parent, otherwise if its parent is itself a popup it would get closed by ClosePopupsOverWindow().
+ // This is equivalent to what ClosePopupToLevel() does.
+ //if (g.OpenPopupStack[current_stack_size].PopupId == id)
+ // FocusWindow(parent_window);
+ }
+}
+
+// When popups are stacked, clicking on a lower level popups puts focus back to it and close popups above it.
+// This function closes any popups that are over 'ref_window'.
+void ImGui::ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.OpenPopupStack.Size == 0)
+ return;
+
+ // Don't close our own child popup windows.
+ int popup_count_to_keep = 0;
+ if (ref_window)
+ {
+ // Find the highest popup which is a descendant of the reference window (generally reference window = NavWindow)
+ for (; popup_count_to_keep < g.OpenPopupStack.Size; popup_count_to_keep++)
+ {
+ ImGuiPopupData& popup = g.OpenPopupStack[popup_count_to_keep];
+ if (!popup.Window)
+ continue;
+ IM_ASSERT((popup.Window->Flags & ImGuiWindowFlags_Popup) != 0);
+ if (popup.Window->Flags & ImGuiWindowFlags_ChildWindow)
+ continue;
+
+ // Trim the stack unless the popup is a direct parent of the reference window (the reference window is often the NavWindow)
+ // - With this stack of window, clicking/focusing Popup1 will close Popup2 and Popup3:
+ // Window -> Popup1 -> Popup2 -> Popup3
+ // - Each popups may contain child windows, which is why we compare ->RootWindow!
+ // Window -> Popup1 -> Popup1_Child -> Popup2 -> Popup2_Child
+ bool ref_window_is_descendent_of_popup = false;
+ for (int n = popup_count_to_keep; n < g.OpenPopupStack.Size; n++)
+ if (ImGuiWindow* popup_window = g.OpenPopupStack[n].Window)
+ if (IsWindowWithinBeginStackOf(ref_window, popup_window))
+ {
+ ref_window_is_descendent_of_popup = true;
+ break;
+ }
+ if (!ref_window_is_descendent_of_popup)
+ break;
+ }
+ }
+ if (popup_count_to_keep < g.OpenPopupStack.Size) // This test is not required but it allows to set a convenient breakpoint on the statement below
+ {
+ IMGUI_DEBUG_LOG_POPUP("[popup] ClosePopupsOverWindow(\"%s\")\n", ref_window ? ref_window->Name : "<NULL>");
+ ClosePopupToLevel(popup_count_to_keep, restore_focus_to_window_under_popup);
+ }
+}
+
+void ImGui::ClosePopupsExceptModals()
+{
+ ImGuiContext& g = *GImGui;
+
+ int popup_count_to_keep;
+ for (popup_count_to_keep = g.OpenPopupStack.Size; popup_count_to_keep > 0; popup_count_to_keep--)
+ {
+ ImGuiWindow* window = g.OpenPopupStack[popup_count_to_keep - 1].Window;
+ if (!window || window->Flags & ImGuiWindowFlags_Modal)
+ break;
+ }
+ if (popup_count_to_keep < g.OpenPopupStack.Size) // This test is not required but it allows to set a convenient breakpoint on the statement below
+ ClosePopupToLevel(popup_count_to_keep, true);
+}
+
+void ImGui::ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup)
+{
+ ImGuiContext& g = *GImGui;
+ IMGUI_DEBUG_LOG_POPUP("[popup] ClosePopupToLevel(%d), restore_focus_to_window_under_popup=%d\n", remaining, restore_focus_to_window_under_popup);
+ IM_ASSERT(remaining >= 0 && remaining < g.OpenPopupStack.Size);
+
+ // Trim open popup stack
+ ImGuiWindow* focus_window = g.OpenPopupStack[remaining].SourceWindow;
+ ImGuiWindow* popup_window = g.OpenPopupStack[remaining].Window;
+ g.OpenPopupStack.resize(remaining);
+
+ if (restore_focus_to_window_under_popup)
+ {
+ if (focus_window && !focus_window->WasActive && popup_window)
+ {
+ // Fallback
+ FocusTopMostWindowUnderOne(popup_window, NULL);
+ }
+ else
+ {
+ if (g.NavLayer == ImGuiNavLayer_Main && focus_window)
+ focus_window = NavRestoreLastChildNavWindow(focus_window);
+ FocusWindow(focus_window);
+ }
+ }
+}
+
+// Close the popup we have begin-ed into.
+void ImGui::CloseCurrentPopup()
+{
+ ImGuiContext& g = *GImGui;
+ int popup_idx = g.BeginPopupStack.Size - 1;
+ if (popup_idx < 0 || popup_idx >= g.OpenPopupStack.Size || g.BeginPopupStack[popup_idx].PopupId != g.OpenPopupStack[popup_idx].PopupId)
+ return;
+
+ // Closing a menu closes its top-most parent popup (unless a modal)
+ while (popup_idx > 0)
+ {
+ ImGuiWindow* popup_window = g.OpenPopupStack[popup_idx].Window;
+ ImGuiWindow* parent_popup_window = g.OpenPopupStack[popup_idx - 1].Window;
+ bool close_parent = false;
+ if (popup_window && (popup_window->Flags & ImGuiWindowFlags_ChildMenu))
+ if (parent_popup_window && !(parent_popup_window->Flags & ImGuiWindowFlags_MenuBar))
+ close_parent = true;
+ if (!close_parent)
+ break;
+ popup_idx--;
+ }
+ IMGUI_DEBUG_LOG_POPUP("[popup] CloseCurrentPopup %d -> %d\n", g.BeginPopupStack.Size - 1, popup_idx);
+ ClosePopupToLevel(popup_idx, true);
+
+ // A common pattern is to close a popup when selecting a menu item/selectable that will open another window.
+ // To improve this usage pattern, we avoid nav highlight for a single frame in the parent window.
+ // Similarly, we could avoid mouse hover highlight in this window but it is less visually problematic.
+ if (ImGuiWindow* window = g.NavWindow)
+ window->DC.NavHideHighlightOneFrame = true;
+}
+
+// Attention! BeginPopup() adds default flags which BeginPopupEx()!
+bool ImGui::BeginPopupEx(ImGuiID id, ImGuiWindowFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ if (!IsPopupOpen(id, ImGuiPopupFlags_None))
+ {
+ g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
+ return false;
+ }
+
+ char name[20];
+ if (flags & ImGuiWindowFlags_ChildMenu)
+ ImFormatString(name, IM_ARRAYSIZE(name), "##Menu_%02d", g.BeginMenuCount); // Recycle windows based on depth
+ else
+ ImFormatString(name, IM_ARRAYSIZE(name), "##Popup_%08x", id); // Not recycling, so we can close/open during the same frame
+
+ flags |= ImGuiWindowFlags_Popup;
+ bool is_open = Begin(name, NULL, flags);
+ if (!is_open) // NB: Begin can return false when the popup is completely clipped (e.g. zero size display)
+ EndPopup();
+
+ return is_open;
+}
+
+bool ImGui::BeginPopup(const char* str_id, ImGuiWindowFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.OpenPopupStack.Size <= g.BeginPopupStack.Size) // Early out for performance
+ {
+ g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
+ return false;
+ }
+ flags |= ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings;
+ ImGuiID id = g.CurrentWindow->GetID(str_id);
+ return BeginPopupEx(id, flags);
+}
+
+// If 'p_open' is specified for a modal popup window, the popup will have a regular close button which will close the popup.
+// Note that popup visibility status is owned by Dear ImGui (and manipulated with e.g. OpenPopup) so the actual value of *p_open is meaningless here.
+bool ImGui::BeginPopupModal(const char* name, bool* p_open, ImGuiWindowFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ const ImGuiID id = window->GetID(name);
+ if (!IsPopupOpen(id, ImGuiPopupFlags_None))
+ {
+ g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
+ return false;
+ }
+
+ // Center modal windows by default for increased visibility
+ // (this won't really last as settings will kick in, and is mostly for backward compatibility. user may do the same themselves)
+ // FIXME: Should test for (PosCond & window->SetWindowPosAllowFlags) with the upcoming window.
+ if ((g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasPos) == 0)
+ {
+ const ImGuiViewport* viewport = GetMainViewport();
+ SetNextWindowPos(viewport->GetCenter(), ImGuiCond_FirstUseEver, ImVec2(0.5f, 0.5f));
+ }
+
+ flags |= ImGuiWindowFlags_Popup | ImGuiWindowFlags_Modal | ImGuiWindowFlags_NoCollapse;
+ const bool is_open = Begin(name, p_open, flags);
+ if (!is_open || (p_open && !*p_open)) // NB: is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
+ {
+ EndPopup();
+ if (is_open)
+ ClosePopupToLevel(g.BeginPopupStack.Size, true);
+ return false;
+ }
+ return is_open;
+}
+
+void ImGui::EndPopup()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ IM_ASSERT(window->Flags & ImGuiWindowFlags_Popup); // Mismatched BeginPopup()/EndPopup() calls
+ IM_ASSERT(g.BeginPopupStack.Size > 0);
+
+ // Make all menus and popups wrap around for now, may need to expose that policy (e.g. focus scope could include wrap/loop policy flags used by new move requests)
+ if (g.NavWindow == window)
+ NavMoveRequestTryWrapping(window, ImGuiNavMoveFlags_LoopY);
+
+ // Child-popups don't need to be laid out
+ IM_ASSERT(g.WithinEndChild == false);
+ if (window->Flags & ImGuiWindowFlags_ChildWindow)
+ g.WithinEndChild = true;
+ End();
+ g.WithinEndChild = false;
+}
+
+// Helper to open a popup if mouse button is released over the item
+// - This is essentially the same as BeginPopupContextItem() but without the trailing BeginPopup()
+void ImGui::OpenPopupOnItemClick(const char* str_id, ImGuiPopupFlags popup_flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ int mouse_button = (popup_flags & ImGuiPopupFlags_MouseButtonMask_);
+ if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+ {
+ ImGuiID id = str_id ? window->GetID(str_id) : g.LastItemData.ID; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict!
+ IM_ASSERT(id != 0); // You cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item)
+ OpenPopupEx(id, popup_flags);
+ }
+}
+
+// This is a helper to handle the simplest case of associating one named popup to one given widget.
+// - To create a popup associated to the last item, you generally want to pass a NULL value to str_id.
+// - To create a popup with a specific identifier, pass it in str_id.
+// - This is useful when using using BeginPopupContextItem() on an item which doesn't have an identifier, e.g. a Text() call.
+// - This is useful when multiple code locations may want to manipulate/open the same popup, given an explicit id.
+// - You may want to handle the whole on user side if you have specific needs (e.g. tweaking IsItemHovered() parameters).
+// This is essentially the same as:
+// id = str_id ? GetID(str_id) : GetItemID();
+// OpenPopupOnItemClick(str_id, ImGuiPopupFlags_MouseButtonRight);
+// return BeginPopup(id);
+// Which is essentially the same as:
+// id = str_id ? GetID(str_id) : GetItemID();
+// if (IsItemHovered() && IsMouseReleased(ImGuiMouseButton_Right))
+// OpenPopup(id);
+// return BeginPopup(id);
+// The main difference being that this is tweaked to avoid computing the ID twice.
+bool ImGui::BeginPopupContextItem(const char* str_id, ImGuiPopupFlags popup_flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+ ImGuiID id = str_id ? window->GetID(str_id) : g.LastItemData.ID; // If user hasn't passed an ID, we can use the LastItemID. Using LastItemID as a Popup ID won't conflict!
+ IM_ASSERT(id != 0); // You cannot pass a NULL str_id if the last item has no identifier (e.g. a Text() item)
+ int mouse_button = (popup_flags & ImGuiPopupFlags_MouseButtonMask_);
+ if (IsMouseReleased(mouse_button) && IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+ OpenPopupEx(id, popup_flags);
+ return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings);
+}
+
+bool ImGui::BeginPopupContextWindow(const char* str_id, ImGuiPopupFlags popup_flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (!str_id)
+ str_id = "window_context";
+ ImGuiID id = window->GetID(str_id);
+ int mouse_button = (popup_flags & ImGuiPopupFlags_MouseButtonMask_);
+ if (IsMouseReleased(mouse_button) && IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup))
+ if (!(popup_flags & ImGuiPopupFlags_NoOpenOverItems) || !IsAnyItemHovered())
+ OpenPopupEx(id, popup_flags);
+ return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings);
+}
+
+bool ImGui::BeginPopupContextVoid(const char* str_id, ImGuiPopupFlags popup_flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (!str_id)
+ str_id = "void_context";
+ ImGuiID id = window->GetID(str_id);
+ int mouse_button = (popup_flags & ImGuiPopupFlags_MouseButtonMask_);
+ if (IsMouseReleased(mouse_button) && !IsWindowHovered(ImGuiHoveredFlags_AnyWindow))
+ if (GetTopMostPopupModal() == NULL)
+ OpenPopupEx(id, popup_flags);
+ return BeginPopupEx(id, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings);
+}
+
+// r_avoid = the rectangle to avoid (e.g. for tooltip it is a rectangle around the mouse cursor which we want to avoid. for popups it's a small point around the cursor.)
+// r_outer = the visible area rectangle, minus safe area padding. If our popup size won't fit because of safe area padding we ignore it.
+// (r_outer is usually equivalent to the viewport rectangle minus padding, but when multi-viewports are enabled and monitor
+// information are available, it may represent the entire platform monitor from the frame of reference of the current viewport.
+// this allows us to have tooltips/popups displayed out of the parent viewport.)
+ImVec2 ImGui::FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy)
+{
+ ImVec2 base_pos_clamped = ImClamp(ref_pos, r_outer.Min, r_outer.Max - size);
+ //GetForegroundDrawList()->AddRect(r_avoid.Min, r_avoid.Max, IM_COL32(255,0,0,255));
+ //GetForegroundDrawList()->AddRect(r_outer.Min, r_outer.Max, IM_COL32(0,255,0,255));
+
+ // Combo Box policy (we want a connecting edge)
+ if (policy == ImGuiPopupPositionPolicy_ComboBox)
+ {
+ const ImGuiDir dir_prefered_order[ImGuiDir_COUNT] = { ImGuiDir_Down, ImGuiDir_Right, ImGuiDir_Left, ImGuiDir_Up };
+ for (int n = (*last_dir != ImGuiDir_None) ? -1 : 0; n < ImGuiDir_COUNT; n++)
+ {
+ const ImGuiDir dir = (n == -1) ? *last_dir : dir_prefered_order[n];
+ if (n != -1 && dir == *last_dir) // Already tried this direction?
+ continue;
+ ImVec2 pos;
+ if (dir == ImGuiDir_Down) pos = ImVec2(r_avoid.Min.x, r_avoid.Max.y); // Below, Toward Right (default)
+ if (dir == ImGuiDir_Right) pos = ImVec2(r_avoid.Min.x, r_avoid.Min.y - size.y); // Above, Toward Right
+ if (dir == ImGuiDir_Left) pos = ImVec2(r_avoid.Max.x - size.x, r_avoid.Max.y); // Below, Toward Left
+ if (dir == ImGuiDir_Up) pos = ImVec2(r_avoid.Max.x - size.x, r_avoid.Min.y - size.y); // Above, Toward Left
+ if (!r_outer.Contains(ImRect(pos, pos + size)))
+ continue;
+ *last_dir = dir;
+ return pos;
+ }
+ }
+
+ // Tooltip and Default popup policy
+ // (Always first try the direction we used on the last frame, if any)
+ if (policy == ImGuiPopupPositionPolicy_Tooltip || policy == ImGuiPopupPositionPolicy_Default)
+ {
+ const ImGuiDir dir_prefered_order[ImGuiDir_COUNT] = { ImGuiDir_Right, ImGuiDir_Down, ImGuiDir_Up, ImGuiDir_Left };
+ for (int n = (*last_dir != ImGuiDir_None) ? -1 : 0; n < ImGuiDir_COUNT; n++)
+ {
+ const ImGuiDir dir = (n == -1) ? *last_dir : dir_prefered_order[n];
+ if (n != -1 && dir == *last_dir) // Already tried this direction?
+ continue;
+
+ const float avail_w = (dir == ImGuiDir_Left ? r_avoid.Min.x : r_outer.Max.x) - (dir == ImGuiDir_Right ? r_avoid.Max.x : r_outer.Min.x);
+ const float avail_h = (dir == ImGuiDir_Up ? r_avoid.Min.y : r_outer.Max.y) - (dir == ImGuiDir_Down ? r_avoid.Max.y : r_outer.Min.y);
+
+ // If there not enough room on one axis, there's no point in positioning on a side on this axis (e.g. when not enough width, use a top/bottom position to maximize available width)
+ if (avail_w < size.x && (dir == ImGuiDir_Left || dir == ImGuiDir_Right))
+ continue;
+ if (avail_h < size.y && (dir == ImGuiDir_Up || dir == ImGuiDir_Down))
+ continue;
+
+ ImVec2 pos;
+ pos.x = (dir == ImGuiDir_Left) ? r_avoid.Min.x - size.x : (dir == ImGuiDir_Right) ? r_avoid.Max.x : base_pos_clamped.x;
+ pos.y = (dir == ImGuiDir_Up) ? r_avoid.Min.y - size.y : (dir == ImGuiDir_Down) ? r_avoid.Max.y : base_pos_clamped.y;
+
+ // Clamp top-left corner of popup
+ pos.x = ImMax(pos.x, r_outer.Min.x);
+ pos.y = ImMax(pos.y, r_outer.Min.y);
+
+ *last_dir = dir;
+ return pos;
+ }
+ }
+
+ // Fallback when not enough room:
+ *last_dir = ImGuiDir_None;
+
+ // For tooltip we prefer avoiding the cursor at all cost even if it means that part of the tooltip won't be visible.
+ if (policy == ImGuiPopupPositionPolicy_Tooltip)
+ return ref_pos + ImVec2(2, 2);
+
+ // Otherwise try to keep within display
+ ImVec2 pos = ref_pos;
+ pos.x = ImMax(ImMin(pos.x + size.x, r_outer.Max.x) - size.x, r_outer.Min.x);
+ pos.y = ImMax(ImMin(pos.y + size.y, r_outer.Max.y) - size.y, r_outer.Min.y);
+ return pos;
+}
+
+// Note that this is used for popups, which can overlap the non work-area of individual viewports.
+ImRect ImGui::GetPopupAllowedExtentRect(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ IM_UNUSED(window);
+ ImRect r_screen = ((ImGuiViewportP*)(void*)GetMainViewport())->GetMainRect();
+ ImVec2 padding = g.Style.DisplaySafeAreaPadding;
+ r_screen.Expand(ImVec2((r_screen.GetWidth() > padding.x * 2) ? -padding.x : 0.0f, (r_screen.GetHeight() > padding.y * 2) ? -padding.y : 0.0f));
+ return r_screen;
+}
+
+ImVec2 ImGui::FindBestWindowPosForPopup(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+
+ ImRect r_outer = GetPopupAllowedExtentRect(window);
+ if (window->Flags & ImGuiWindowFlags_ChildMenu)
+ {
+ // Child menus typically request _any_ position within the parent menu item, and then we move the new menu outside the parent bounds.
+ // This is how we end up with child menus appearing (most-commonly) on the right of the parent menu.
+ IM_ASSERT(g.CurrentWindow == window);
+ ImGuiWindow* parent_window = g.CurrentWindowStack[g.CurrentWindowStack.Size - 2].Window;
+ float horizontal_overlap = g.Style.ItemInnerSpacing.x; // We want some overlap to convey the relative depth of each menu (currently the amount of overlap is hard-coded to style.ItemSpacing.x).
+ ImRect r_avoid;
+ if (parent_window->DC.MenuBarAppending)
+ r_avoid = ImRect(-FLT_MAX, parent_window->ClipRect.Min.y, FLT_MAX, parent_window->ClipRect.Max.y); // Avoid parent menu-bar. If we wanted multi-line menu-bar, we may instead want to have the calling window setup e.g. a NextWindowData.PosConstraintAvoidRect field
+ else
+ r_avoid = ImRect(parent_window->Pos.x + horizontal_overlap, -FLT_MAX, parent_window->Pos.x + parent_window->Size.x - horizontal_overlap - parent_window->ScrollbarSizes.x, FLT_MAX);
+ return FindBestWindowPosForPopupEx(window->Pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid, ImGuiPopupPositionPolicy_Default);
+ }
+ if (window->Flags & ImGuiWindowFlags_Popup)
+ {
+ return FindBestWindowPosForPopupEx(window->Pos, window->Size, &window->AutoPosLastDirection, r_outer, ImRect(window->Pos, window->Pos), ImGuiPopupPositionPolicy_Default); // Ideally we'd disable r_avoid here
+ }
+ if (window->Flags & ImGuiWindowFlags_Tooltip)
+ {
+ // Position tooltip (always follows mouse)
+ float sc = g.Style.MouseCursorScale;
+ ImVec2 ref_pos = NavCalcPreferredRefPos();
+ ImRect r_avoid;
+ if (!g.NavDisableHighlight && g.NavDisableMouseHover && !(g.IO.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos))
+ r_avoid = ImRect(ref_pos.x - 16, ref_pos.y - 8, ref_pos.x + 16, ref_pos.y + 8);
+ else
+ r_avoid = ImRect(ref_pos.x - 16, ref_pos.y - 8, ref_pos.x + 24 * sc, ref_pos.y + 24 * sc); // FIXME: Hard-coded based on mouse cursor shape expectation. Exact dimension not very important.
+ return FindBestWindowPosForPopupEx(ref_pos, window->Size, &window->AutoPosLastDirection, r_outer, r_avoid, ImGuiPopupPositionPolicy_Tooltip);
+ }
+ IM_ASSERT(0);
+ return window->Pos;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] KEYBOARD/GAMEPAD NAVIGATION
+//-----------------------------------------------------------------------------
+
+// FIXME-NAV: The existence of SetNavID vs SetFocusID vs FocusWindow() needs to be clarified/reworked.
+// In our terminology those should be interchangeable, yet right now this is super confusing.
+// Those two functions are merely a legacy artifact, so at minimum naming should be clarified.
+
+void ImGui::SetNavWindow(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.NavWindow != window)
+ {
+ IMGUI_DEBUG_LOG_FOCUS("[focus] SetNavWindow(\"%s\")\n", window ? window->Name : "<NULL>");
+ g.NavWindow = window;
+ }
+ g.NavInitRequest = g.NavMoveSubmitted = g.NavMoveScoringItems = false;
+ NavUpdateAnyRequestFlag();
+}
+
+void ImGui::SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.NavWindow != NULL);
+ IM_ASSERT(nav_layer == ImGuiNavLayer_Main || nav_layer == ImGuiNavLayer_Menu);
+ g.NavId = id;
+ g.NavLayer = nav_layer;
+ g.NavFocusScopeId = focus_scope_id;
+ g.NavWindow->NavLastIds[nav_layer] = id;
+ g.NavWindow->NavRectRel[nav_layer] = rect_rel;
+}
+
+void ImGui::SetFocusID(ImGuiID id, ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(id != 0);
+
+ if (g.NavWindow != window)
+ SetNavWindow(window);
+
+ // Assume that SetFocusID() is called in the context where its window->DC.NavLayerCurrent and window->DC.NavFocusScopeIdCurrent are valid.
+ // Note that window may be != g.CurrentWindow (e.g. SetFocusID call in InputTextEx for multi-line text)
+ const ImGuiNavLayer nav_layer = window->DC.NavLayerCurrent;
+ g.NavId = id;
+ g.NavLayer = nav_layer;
+ g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent;
+ window->NavLastIds[nav_layer] = id;
+ if (g.LastItemData.ID == id)
+ window->NavRectRel[nav_layer] = WindowRectAbsToRel(window, g.LastItemData.NavRect);
+
+ if (g.ActiveIdSource == ImGuiInputSource_Nav)
+ g.NavDisableMouseHover = true;
+ else
+ g.NavDisableHighlight = true;
+}
+
+ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy)
+{
+ if (ImFabs(dx) > ImFabs(dy))
+ return (dx > 0.0f) ? ImGuiDir_Right : ImGuiDir_Left;
+ return (dy > 0.0f) ? ImGuiDir_Down : ImGuiDir_Up;
+}
+
+static float inline NavScoreItemDistInterval(float a0, float a1, float b0, float b1)
+{
+ if (a1 < b0)
+ return a1 - b0;
+ if (b1 < a0)
+ return a0 - b1;
+ return 0.0f;
+}
+
+static void inline NavClampRectToVisibleAreaForMoveDir(ImGuiDir move_dir, ImRect& r, const ImRect& clip_rect)
+{
+ if (move_dir == ImGuiDir_Left || move_dir == ImGuiDir_Right)
+ {
+ r.Min.y = ImClamp(r.Min.y, clip_rect.Min.y, clip_rect.Max.y);
+ r.Max.y = ImClamp(r.Max.y, clip_rect.Min.y, clip_rect.Max.y);
+ }
+ else // FIXME: PageUp/PageDown are leaving move_dir == None
+ {
+ r.Min.x = ImClamp(r.Min.x, clip_rect.Min.x, clip_rect.Max.x);
+ r.Max.x = ImClamp(r.Max.x, clip_rect.Min.x, clip_rect.Max.x);
+ }
+}
+
+// Scoring function for gamepad/keyboard directional navigation. Based on https://gist.github.com/rygorous/6981057
+static bool ImGui::NavScoreItem(ImGuiNavItemData* result)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (g.NavLayer != window->DC.NavLayerCurrent)
+ return false;
+
+ // FIXME: Those are not good variables names
+ ImRect cand = g.LastItemData.NavRect; // Current item nav rectangle
+ const ImRect curr = g.NavScoringRect; // Current modified source rect (NB: we've applied Max.x = Min.x in NavUpdate() to inhibit the effect of having varied item width)
+ g.NavScoringDebugCount++;
+
+ // When entering through a NavFlattened border, we consider child window items as fully clipped for scoring
+ if (window->ParentWindow == g.NavWindow)
+ {
+ IM_ASSERT((window->Flags | g.NavWindow->Flags) & ImGuiWindowFlags_NavFlattened);
+ if (!window->ClipRect.Overlaps(cand))
+ return false;
+ cand.ClipWithFull(window->ClipRect); // This allows the scored item to not overlap other candidates in the parent window
+ }
+
+ // We perform scoring on items bounding box clipped by the current clipping rectangle on the other axis (clipping on our movement axis would give us equal scores for all clipped items)
+ // For example, this ensure that items in one column are not reached when moving vertically from items in another column.
+ NavClampRectToVisibleAreaForMoveDir(g.NavMoveClipDir, cand, window->ClipRect);
+
+ // Compute distance between boxes
+ // FIXME-NAV: Introducing biases for vertical navigation, needs to be removed.
+ float dbx = NavScoreItemDistInterval(cand.Min.x, cand.Max.x, curr.Min.x, curr.Max.x);
+ float dby = NavScoreItemDistInterval(ImLerp(cand.Min.y, cand.Max.y, 0.2f), ImLerp(cand.Min.y, cand.Max.y, 0.8f), ImLerp(curr.Min.y, curr.Max.y, 0.2f), ImLerp(curr.Min.y, curr.Max.y, 0.8f)); // Scale down on Y to keep using box-distance for vertically touching items
+ if (dby != 0.0f && dbx != 0.0f)
+ dbx = (dbx / 1000.0f) + ((dbx > 0.0f) ? +1.0f : -1.0f);
+ float dist_box = ImFabs(dbx) + ImFabs(dby);
+
+ // Compute distance between centers (this is off by a factor of 2, but we only compare center distances with each other so it doesn't matter)
+ float dcx = (cand.Min.x + cand.Max.x) - (curr.Min.x + curr.Max.x);
+ float dcy = (cand.Min.y + cand.Max.y) - (curr.Min.y + curr.Max.y);
+ float dist_center = ImFabs(dcx) + ImFabs(dcy); // L1 metric (need this for our connectedness guarantee)
+
+ // Determine which quadrant of 'curr' our candidate item 'cand' lies in based on distance
+ ImGuiDir quadrant;
+ float dax = 0.0f, day = 0.0f, dist_axial = 0.0f;
+ if (dbx != 0.0f || dby != 0.0f)
+ {
+ // For non-overlapping boxes, use distance between boxes
+ dax = dbx;
+ day = dby;
+ dist_axial = dist_box;
+ quadrant = ImGetDirQuadrantFromDelta(dbx, dby);
+ }
+ else if (dcx != 0.0f || dcy != 0.0f)
+ {
+ // For overlapping boxes with different centers, use distance between centers
+ dax = dcx;
+ day = dcy;
+ dist_axial = dist_center;
+ quadrant = ImGetDirQuadrantFromDelta(dcx, dcy);
+ }
+ else
+ {
+ // Degenerate case: two overlapping buttons with same center, break ties arbitrarily (note that LastItemId here is really the _previous_ item order, but it doesn't matter)
+ quadrant = (g.LastItemData.ID < g.NavId) ? ImGuiDir_Left : ImGuiDir_Right;
+ }
+
+#if IMGUI_DEBUG_NAV_SCORING
+ char buf[128];
+ if (IsMouseHoveringRect(cand.Min, cand.Max))
+ {
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "dbox (%.2f,%.2f->%.4f)\ndcen (%.2f,%.2f->%.4f)\nd (%.2f,%.2f->%.4f)\nnav %c, quadrant %c", dbx, dby, dist_box, dcx, dcy, dist_center, dax, day, dist_axial, "WENS"[g.NavMoveDir], "WENS"[quadrant]);
+ ImDrawList* draw_list = GetForegroundDrawList(window);
+ draw_list->AddRect(curr.Min, curr.Max, IM_COL32(255,200,0,100));
+ draw_list->AddRect(cand.Min, cand.Max, IM_COL32(255,255,0,200));
+ draw_list->AddRectFilled(cand.Max - ImVec2(4, 4), cand.Max + CalcTextSize(buf) + ImVec2(4, 4), IM_COL32(40,0,0,150));
+ draw_list->AddText(cand.Max, ~0U, buf);
+ }
+ else if (g.IO.KeyCtrl) // Hold to preview score in matching quadrant. Press C to rotate.
+ {
+ if (quadrant == g.NavMoveDir)
+ {
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "%.0f/%.0f", dist_box, dist_center);
+ ImDrawList* draw_list = GetForegroundDrawList(window);
+ draw_list->AddRectFilled(cand.Min, cand.Max, IM_COL32(255, 0, 0, 200));
+ draw_list->AddText(cand.Min, IM_COL32(255, 255, 255, 255), buf);
+ }
+ }
+#endif
+
+ // Is it in the quadrant we're interesting in moving to?
+ bool new_best = false;
+ const ImGuiDir move_dir = g.NavMoveDir;
+ if (quadrant == move_dir)
+ {
+ // Does it beat the current best candidate?
+ if (dist_box < result->DistBox)
+ {
+ result->DistBox = dist_box;
+ result->DistCenter = dist_center;
+ return true;
+ }
+ if (dist_box == result->DistBox)
+ {
+ // Try using distance between center points to break ties
+ if (dist_center < result->DistCenter)
+ {
+ result->DistCenter = dist_center;
+ new_best = true;
+ }
+ else if (dist_center == result->DistCenter)
+ {
+ // Still tied! we need to be extra-careful to make sure everything gets linked properly. We consistently break ties by symbolically moving "later" items
+ // (with higher index) to the right/downwards by an infinitesimal amount since we the current "best" button already (so it must have a lower index),
+ // this is fairly easy. This rule ensures that all buttons with dx==dy==0 will end up being linked in order of appearance along the x axis.
+ if (((move_dir == ImGuiDir_Up || move_dir == ImGuiDir_Down) ? dby : dbx) < 0.0f) // moving bj to the right/down decreases distance
+ new_best = true;
+ }
+ }
+ }
+
+ // Axial check: if 'curr' has no link at all in some direction and 'cand' lies roughly in that direction, add a tentative link. This will only be kept if no "real" matches
+ // are found, so it only augments the graph produced by the above method using extra links. (important, since it doesn't guarantee strong connectedness)
+ // This is just to avoid buttons having no links in a particular direction when there's a suitable neighbor. you get good graphs without this too.
+ // 2017/09/29: FIXME: This now currently only enabled inside menu bars, ideally we'd disable it everywhere. Menus in particular need to catch failure. For general navigation it feels awkward.
+ // Disabling it may lead to disconnected graphs when nodes are very spaced out on different axis. Perhaps consider offering this as an option?
+ if (result->DistBox == FLT_MAX && dist_axial < result->DistAxial) // Check axial match
+ if (g.NavLayer == ImGuiNavLayer_Menu && !(g.NavWindow->Flags & ImGuiWindowFlags_ChildMenu))
+ if ((move_dir == ImGuiDir_Left && dax < 0.0f) || (move_dir == ImGuiDir_Right && dax > 0.0f) || (move_dir == ImGuiDir_Up && day < 0.0f) || (move_dir == ImGuiDir_Down && day > 0.0f))
+ {
+ result->DistAxial = dist_axial;
+ new_best = true;
+ }
+
+ return new_best;
+}
+
+static void ImGui::NavApplyItemToResult(ImGuiNavItemData* result)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ result->Window = window;
+ result->ID = g.LastItemData.ID;
+ result->FocusScopeId = window->DC.NavFocusScopeIdCurrent;
+ result->InFlags = g.LastItemData.InFlags;
+ result->RectRel = WindowRectAbsToRel(window, g.LastItemData.NavRect);
+}
+
+// We get there when either NavId == id, or when g.NavAnyRequest is set (which is updated by NavUpdateAnyRequestFlag above)
+// This is called after LastItemData is set.
+static void ImGui::NavProcessItem()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ const ImGuiID id = g.LastItemData.ID;
+ const ImRect nav_bb = g.LastItemData.NavRect;
+ const ImGuiItemFlags item_flags = g.LastItemData.InFlags;
+
+ // Process Init Request
+ if (g.NavInitRequest && g.NavLayer == window->DC.NavLayerCurrent && (item_flags & ImGuiItemFlags_Disabled) == 0)
+ {
+ // Even if 'ImGuiItemFlags_NoNavDefaultFocus' is on (typically collapse/close button) we record the first ResultId so they can be used as a fallback
+ const bool candidate_for_nav_default_focus = (item_flags & ImGuiItemFlags_NoNavDefaultFocus) == 0;
+ if (candidate_for_nav_default_focus || g.NavInitResultId == 0)
+ {
+ g.NavInitResultId = id;
+ g.NavInitResultRectRel = WindowRectAbsToRel(window, nav_bb);
+ }
+ if (candidate_for_nav_default_focus)
+ {
+ g.NavInitRequest = false; // Found a match, clear request
+ NavUpdateAnyRequestFlag();
+ }
+ }
+
+ // Process Move Request (scoring for navigation)
+ // FIXME-NAV: Consider policy for double scoring (scoring from NavScoringRect + scoring from a rect wrapped according to current wrapping policy)
+ if (g.NavMoveScoringItems)
+ {
+ const bool is_tab_stop = (item_flags & ImGuiItemFlags_Inputable) && (item_flags & (ImGuiItemFlags_NoTabStop | ImGuiItemFlags_Disabled)) == 0;
+ const bool is_tabbing = (g.NavMoveFlags & ImGuiNavMoveFlags_Tabbing) != 0;
+ if (is_tabbing)
+ {
+ if (is_tab_stop || (g.NavMoveFlags & ImGuiNavMoveFlags_FocusApi))
+ NavProcessItemForTabbingRequest(id);
+ }
+ else if ((g.NavId != id || (g.NavMoveFlags & ImGuiNavMoveFlags_AllowCurrentNavId)) && !(item_flags & (ImGuiItemFlags_Disabled | ImGuiItemFlags_NoNav)))
+ {
+ ImGuiNavItemData* result = (window == g.NavWindow) ? &g.NavMoveResultLocal : &g.NavMoveResultOther;
+ if (!is_tabbing)
+ {
+ if (NavScoreItem(result))
+ NavApplyItemToResult(result);
+
+ // Features like PageUp/PageDown need to maintain a separate score for the visible set of items.
+ const float VISIBLE_RATIO = 0.70f;
+ if ((g.NavMoveFlags & ImGuiNavMoveFlags_AlsoScoreVisibleSet) && window->ClipRect.Overlaps(nav_bb))
+ if (ImClamp(nav_bb.Max.y, window->ClipRect.Min.y, window->ClipRect.Max.y) - ImClamp(nav_bb.Min.y, window->ClipRect.Min.y, window->ClipRect.Max.y) >= (nav_bb.Max.y - nav_bb.Min.y) * VISIBLE_RATIO)
+ if (NavScoreItem(&g.NavMoveResultLocalVisible))
+ NavApplyItemToResult(&g.NavMoveResultLocalVisible);
+ }
+ }
+ }
+
+ // Update window-relative bounding box of navigated item
+ if (g.NavId == id)
+ {
+ if (g.NavWindow != window)
+ SetNavWindow(window); // Always refresh g.NavWindow, because some operations such as FocusItem() may not have a window.
+ g.NavLayer = window->DC.NavLayerCurrent;
+ g.NavFocusScopeId = window->DC.NavFocusScopeIdCurrent;
+ g.NavIdIsAlive = true;
+ window->NavRectRel[window->DC.NavLayerCurrent] = WindowRectAbsToRel(window, nav_bb); // Store item bounding box (relative to window position)
+ }
+}
+
+// Handle "scoring" of an item for a tabbing/focusing request initiated by NavUpdateCreateTabbingRequest().
+// Note that SetKeyboardFocusHere() API calls are considered tabbing requests!
+// - Case 1: no nav/active id: set result to first eligible item, stop storing.
+// - Case 2: tab forward: on ref id set counter, on counter elapse store result
+// - Case 3: tab forward wrap: set result to first eligible item (preemptively), on ref id set counter, on next frame if counter hasn't elapsed store result. // FIXME-TABBING: Could be done as a next-frame forwarded request
+// - Case 4: tab backward: store all results, on ref id pick prev, stop storing
+// - Case 5: tab backward wrap: store all results, on ref id if no result keep storing until last // FIXME-TABBING: Could be done as next-frame forwarded requested
+void ImGui::NavProcessItemForTabbingRequest(ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+
+ // Always store in NavMoveResultLocal (unlike directional request which uses NavMoveResultOther on sibling/flattened windows)
+ ImGuiNavItemData* result = &g.NavMoveResultLocal;
+ if (g.NavTabbingDir == +1)
+ {
+ // Tab Forward or SetKeyboardFocusHere() with >= 0
+ if (g.NavTabbingResultFirst.ID == 0)
+ NavApplyItemToResult(&g.NavTabbingResultFirst);
+ if (--g.NavTabbingCounter == 0)
+ NavMoveRequestResolveWithLastItem(result);
+ else if (g.NavId == id)
+ g.NavTabbingCounter = 1;
+ }
+ else if (g.NavTabbingDir == -1)
+ {
+ // Tab Backward
+ if (g.NavId == id)
+ {
+ if (result->ID)
+ {
+ g.NavMoveScoringItems = false;
+ NavUpdateAnyRequestFlag();
+ }
+ }
+ else
+ {
+ NavApplyItemToResult(result);
+ }
+ }
+ else if (g.NavTabbingDir == 0)
+ {
+ // Tab Init
+ if (g.NavTabbingResultFirst.ID == 0)
+ NavMoveRequestResolveWithLastItem(&g.NavTabbingResultFirst);
+ }
+}
+
+bool ImGui::NavMoveRequestButNoResultYet()
+{
+ ImGuiContext& g = *GImGui;
+ return g.NavMoveScoringItems && g.NavMoveResultLocal.ID == 0 && g.NavMoveResultOther.ID == 0;
+}
+
+// FIXME: ScoringRect is not set
+void ImGui::NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.NavWindow != NULL);
+
+ if (move_flags & ImGuiNavMoveFlags_Tabbing)
+ move_flags |= ImGuiNavMoveFlags_AllowCurrentNavId;
+
+ g.NavMoveSubmitted = g.NavMoveScoringItems = true;
+ g.NavMoveDir = move_dir;
+ g.NavMoveDirForDebug = move_dir;
+ g.NavMoveClipDir = clip_dir;
+ g.NavMoveFlags = move_flags;
+ g.NavMoveScrollFlags = scroll_flags;
+ g.NavMoveForwardToNextFrame = false;
+ g.NavMoveKeyMods = g.IO.KeyMods;
+ g.NavMoveResultLocal.Clear();
+ g.NavMoveResultLocalVisible.Clear();
+ g.NavMoveResultOther.Clear();
+ g.NavTabbingCounter = 0;
+ g.NavTabbingResultFirst.Clear();
+ NavUpdateAnyRequestFlag();
+}
+
+void ImGui::NavMoveRequestResolveWithLastItem(ImGuiNavItemData* result)
+{
+ ImGuiContext& g = *GImGui;
+ g.NavMoveScoringItems = false; // Ensure request doesn't need more processing
+ NavApplyItemToResult(result);
+ NavUpdateAnyRequestFlag();
+}
+
+void ImGui::NavMoveRequestCancel()
+{
+ ImGuiContext& g = *GImGui;
+ g.NavMoveSubmitted = g.NavMoveScoringItems = false;
+ NavUpdateAnyRequestFlag();
+}
+
+// Forward will reuse the move request again on the next frame (generally with modifications done to it)
+void ImGui::NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.NavMoveForwardToNextFrame == false);
+ NavMoveRequestCancel();
+ g.NavMoveForwardToNextFrame = true;
+ g.NavMoveDir = move_dir;
+ g.NavMoveClipDir = clip_dir;
+ g.NavMoveFlags = move_flags | ImGuiNavMoveFlags_Forwarded;
+ g.NavMoveScrollFlags = scroll_flags;
+}
+
+// Navigation wrap-around logic is delayed to the end of the frame because this operation is only valid after entire
+// popup is assembled and in case of appended popups it is not clear which EndPopup() call is final.
+void ImGui::NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags wrap_flags)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(wrap_flags != 0); // Call with _WrapX, _WrapY, _LoopX, _LoopY
+ // In theory we should test for NavMoveRequestButNoResultYet() but there's no point doing it, NavEndFrame() will do the same test
+ if (g.NavWindow == window && g.NavMoveScoringItems && g.NavLayer == ImGuiNavLayer_Main)
+ g.NavMoveFlags |= wrap_flags;
+}
+
+// FIXME: This could be replaced by updating a frame number in each window when (window == NavWindow) and (NavLayer == 0).
+// This way we could find the last focused window among our children. It would be much less confusing this way?
+static void ImGui::NavSaveLastChildNavWindowIntoParent(ImGuiWindow* nav_window)
+{
+ ImGuiWindow* parent = nav_window;
+ while (parent && parent->RootWindow != parent && (parent->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0)
+ parent = parent->ParentWindow;
+ if (parent && parent != nav_window)
+ parent->NavLastChildNavWindow = nav_window;
+}
+
+// Restore the last focused child.
+// Call when we are expected to land on the Main Layer (0) after FocusWindow()
+static ImGuiWindow* ImGui::NavRestoreLastChildNavWindow(ImGuiWindow* window)
+{
+ if (window->NavLastChildNavWindow && window->NavLastChildNavWindow->WasActive)
+ return window->NavLastChildNavWindow;
+ return window;
+}
+
+void ImGui::NavRestoreLayer(ImGuiNavLayer layer)
+{
+ ImGuiContext& g = *GImGui;
+ if (layer == ImGuiNavLayer_Main)
+ {
+ ImGuiWindow* prev_nav_window = g.NavWindow;
+ g.NavWindow = NavRestoreLastChildNavWindow(g.NavWindow); // FIXME-NAV: Should clear ongoing nav requests?
+ if (prev_nav_window)
+ IMGUI_DEBUG_LOG_FOCUS("[focus] NavRestoreLayer: from \"%s\" to SetNavWindow(\"%s\")\n", prev_nav_window->Name, g.NavWindow->Name);
+ }
+ ImGuiWindow* window = g.NavWindow;
+ if (window->NavLastIds[layer] != 0)
+ {
+ SetNavID(window->NavLastIds[layer], layer, 0, window->NavRectRel[layer]);
+ }
+ else
+ {
+ g.NavLayer = layer;
+ NavInitWindow(window, true);
+ }
+}
+
+void ImGui::NavRestoreHighlightAfterMove()
+{
+ ImGuiContext& g = *GImGui;
+ g.NavDisableHighlight = false;
+ g.NavDisableMouseHover = g.NavMousePosDirty = true;
+}
+
+static inline void ImGui::NavUpdateAnyRequestFlag()
+{
+ ImGuiContext& g = *GImGui;
+ g.NavAnyRequest = g.NavMoveScoringItems || g.NavInitRequest || (IMGUI_DEBUG_NAV_SCORING && g.NavWindow != NULL);
+ if (g.NavAnyRequest)
+ IM_ASSERT(g.NavWindow != NULL);
+}
+
+// This needs to be called before we submit any widget (aka in or before Begin)
+void ImGui::NavInitWindow(ImGuiWindow* window, bool force_reinit)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(window == g.NavWindow);
+
+ if (window->Flags & ImGuiWindowFlags_NoNavInputs)
+ {
+ g.NavId = g.NavFocusScopeId = 0;
+ return;
+ }
+
+ bool init_for_nav = false;
+ if (window == window->RootWindow || (window->Flags & ImGuiWindowFlags_Popup) || (window->NavLastIds[0] == 0) || force_reinit)
+ init_for_nav = true;
+ IMGUI_DEBUG_LOG_NAV("[nav] NavInitRequest: from NavInitWindow(), init_for_nav=%d, window=\"%s\", layer=%d\n", init_for_nav, window->Name, g.NavLayer);
+ if (init_for_nav)
+ {
+ SetNavID(0, g.NavLayer, 0, ImRect());
+ g.NavInitRequest = true;
+ g.NavInitRequestFromMove = false;
+ g.NavInitResultId = 0;
+ g.NavInitResultRectRel = ImRect();
+ NavUpdateAnyRequestFlag();
+ }
+ else
+ {
+ g.NavId = window->NavLastIds[0];
+ g.NavFocusScopeId = 0;
+ }
+}
+
+static ImVec2 ImGui::NavCalcPreferredRefPos()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.NavWindow;
+ if (g.NavDisableHighlight || !g.NavDisableMouseHover || !window)
+ {
+ // Mouse (we need a fallback in case the mouse becomes invalid after being used)
+ // The +1.0f offset when stored by OpenPopupEx() allows reopening this or another popup (same or another mouse button) while not moving the mouse, it is pretty standard.
+ // In theory we could move that +1.0f offset in OpenPopupEx()
+ ImVec2 p = IsMousePosValid(&g.IO.MousePos) ? g.IO.MousePos : g.MouseLastValidPos;
+ return ImVec2(p.x + 1.0f, p.y);
+ }
+ else
+ {
+ // When navigation is active and mouse is disabled, pick a position around the bottom left of the currently navigated item
+ // Take account of upcoming scrolling (maybe set mouse pos should be done in EndFrame?)
+ ImRect rect_rel = WindowRectRelToAbs(window, window->NavRectRel[g.NavLayer]);
+ if (window->LastFrameActive != g.FrameCount && (window->ScrollTarget.x != FLT_MAX || window->ScrollTarget.y != FLT_MAX))
+ {
+ ImVec2 next_scroll = CalcNextScrollFromScrollTargetAndClamp(window);
+ rect_rel.Translate(window->Scroll - next_scroll);
+ }
+ ImVec2 pos = ImVec2(rect_rel.Min.x + ImMin(g.Style.FramePadding.x * 4, rect_rel.GetWidth()), rect_rel.Max.y - ImMin(g.Style.FramePadding.y, rect_rel.GetHeight()));
+ ImGuiViewport* viewport = GetMainViewport();
+ return ImFloor(ImClamp(pos, viewport->Pos, viewport->Pos + viewport->Size)); // ImFloor() is important because non-integer mouse position application in backend might be lossy and result in undesirable non-zero delta.
+ }
+}
+
+const char* ImGui::GetNavInputName(ImGuiNavInput n)
+{
+ static const char* names[] =
+ {
+ "Activate", "Cancel", "Input", "Menu", "DpadLeft", "DpadRight", "DpadUp", "DpadDown", "LStickLeft", "LStickRight", "LStickUp", "LStickDown",
+ "FocusPrev", "FocusNext", "TweakSlow", "TweakFast", "KeyLeft", "KeyRight", "KeyUp", "KeyDown"
+ };
+ IM_ASSERT(IM_ARRAYSIZE(names) == ImGuiNavInput_COUNT);
+ IM_ASSERT(n >= 0 && n < ImGuiNavInput_COUNT);
+ return names[n];
+}
+
+float ImGui::GetNavInputAmount(ImGuiNavInput n, ImGuiNavReadMode mode)
+{
+ ImGuiContext& g = *GImGui;
+ if (mode == ImGuiNavReadMode_Down)
+ return g.IO.NavInputs[n]; // Instant, read analog input (0.0f..1.0f, as provided by user)
+
+ const float t = g.IO.NavInputsDownDuration[n];
+ if (t < 0.0f && mode == ImGuiNavReadMode_Released) // Return 1.0f when just released, no repeat, ignore analog input.
+ return (g.IO.NavInputsDownDurationPrev[n] >= 0.0f ? 1.0f : 0.0f);
+ if (t < 0.0f)
+ return 0.0f;
+ if (mode == ImGuiNavReadMode_Pressed) // Return 1.0f when just pressed, no repeat, ignore analog input.
+ return (t == 0.0f) ? 1.0f : 0.0f;
+ if (mode == ImGuiNavReadMode_Repeat)
+ return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 0.72f, g.IO.KeyRepeatRate * 0.80f);
+ if (mode == ImGuiNavReadMode_RepeatSlow)
+ return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 1.25f, g.IO.KeyRepeatRate * 2.00f);
+ if (mode == ImGuiNavReadMode_RepeatFast)
+ return (float)CalcTypematicRepeatAmount(t - g.IO.DeltaTime, t, g.IO.KeyRepeatDelay * 0.72f, g.IO.KeyRepeatRate * 0.30f);
+ return 0.0f;
+}
+
+ImVec2 ImGui::GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiNavReadMode mode, float slow_factor, float fast_factor)
+{
+ ImVec2 delta(0.0f, 0.0f);
+ if (dir_sources & ImGuiNavDirSourceFlags_RawKeyboard)
+ delta += ImVec2((float)IsKeyDown(ImGuiKey_RightArrow) - (float)IsKeyDown(ImGuiKey_LeftArrow), (float)IsKeyDown(ImGuiKey_DownArrow) - (float)IsKeyDown(ImGuiKey_UpArrow));
+ if (dir_sources & ImGuiNavDirSourceFlags_Keyboard)
+ delta += ImVec2(GetNavInputAmount(ImGuiNavInput_KeyRight_, mode) - GetNavInputAmount(ImGuiNavInput_KeyLeft_, mode), GetNavInputAmount(ImGuiNavInput_KeyDown_, mode) - GetNavInputAmount(ImGuiNavInput_KeyUp_, mode));
+ if (dir_sources & ImGuiNavDirSourceFlags_PadDPad)
+ delta += ImVec2(GetNavInputAmount(ImGuiNavInput_DpadRight, mode) - GetNavInputAmount(ImGuiNavInput_DpadLeft, mode), GetNavInputAmount(ImGuiNavInput_DpadDown, mode) - GetNavInputAmount(ImGuiNavInput_DpadUp, mode));
+ if (dir_sources & ImGuiNavDirSourceFlags_PadLStick)
+ delta += ImVec2(GetNavInputAmount(ImGuiNavInput_LStickRight, mode) - GetNavInputAmount(ImGuiNavInput_LStickLeft, mode), GetNavInputAmount(ImGuiNavInput_LStickDown, mode) - GetNavInputAmount(ImGuiNavInput_LStickUp, mode));
+ if (slow_factor != 0.0f && IsNavInputDown(ImGuiNavInput_TweakSlow))
+ delta *= slow_factor;
+ if (fast_factor != 0.0f && IsNavInputDown(ImGuiNavInput_TweakFast))
+ delta *= fast_factor;
+ return delta;
+}
+
+static void ImGui::NavUpdate()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiIO& io = g.IO;
+
+ io.WantSetMousePos = false;
+ //if (g.NavScoringDebugCount > 0) IMGUI_DEBUG_LOG_NAV("[nav] NavScoringDebugCount %d for '%s' layer %d (Init:%d, Move:%d)\n", g.NavScoringDebugCount, g.NavWindow ? g.NavWindow->Name : "NULL", g.NavLayer, g.NavInitRequest || g.NavInitResultId != 0, g.NavMoveRequest);
+
+ // Update Gamepad->Nav inputs mapping
+ // Set input source as Gamepad when buttons are pressed (as some features differs when used with Gamepad vs Keyboard)
+ const bool nav_gamepad_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) != 0 && (io.BackendFlags & ImGuiBackendFlags_HasGamepad) != 0;
+ if (nav_gamepad_active && g.IO.BackendUsingLegacyNavInputArray == false)
+ {
+ for (int n = 0; n < ImGuiNavInput_COUNT; n++)
+ IM_ASSERT(io.NavInputs[n] == 0.0f && "Backend needs to either only use io.AddKeyEvent()/io.AddKeyAnalogEvent(), either only fill legacy io.NavInputs[]. Not both!");
+ #define NAV_MAP_KEY(_KEY, _NAV_INPUT, _ACTIVATE_NAV) do { io.NavInputs[_NAV_INPUT] = io.KeysData[_KEY - ImGuiKey_KeysData_OFFSET].AnalogValue; if (_ACTIVATE_NAV && io.NavInputs[_NAV_INPUT] > 0.0f) { g.NavInputSource = ImGuiInputSource_Gamepad; } } while (0)
+ NAV_MAP_KEY(ImGuiKey_GamepadFaceDown, ImGuiNavInput_Activate, true);
+ NAV_MAP_KEY(ImGuiKey_GamepadFaceRight, ImGuiNavInput_Cancel, true);
+ NAV_MAP_KEY(ImGuiKey_GamepadFaceLeft, ImGuiNavInput_Menu, true);
+ NAV_MAP_KEY(ImGuiKey_GamepadFaceUp, ImGuiNavInput_Input, true);
+ NAV_MAP_KEY(ImGuiKey_GamepadDpadLeft, ImGuiNavInput_DpadLeft, true);
+ NAV_MAP_KEY(ImGuiKey_GamepadDpadRight, ImGuiNavInput_DpadRight, true);
+ NAV_MAP_KEY(ImGuiKey_GamepadDpadUp, ImGuiNavInput_DpadUp, true);
+ NAV_MAP_KEY(ImGuiKey_GamepadDpadDown, ImGuiNavInput_DpadDown, true);
+ NAV_MAP_KEY(ImGuiKey_GamepadL1, ImGuiNavInput_FocusPrev, false);
+ NAV_MAP_KEY(ImGuiKey_GamepadR1, ImGuiNavInput_FocusNext, false);
+ NAV_MAP_KEY(ImGuiKey_GamepadL1, ImGuiNavInput_TweakSlow, false);
+ NAV_MAP_KEY(ImGuiKey_GamepadR1, ImGuiNavInput_TweakFast, false);
+ NAV_MAP_KEY(ImGuiKey_GamepadLStickLeft, ImGuiNavInput_LStickLeft, false);
+ NAV_MAP_KEY(ImGuiKey_GamepadLStickRight, ImGuiNavInput_LStickRight, false);
+ NAV_MAP_KEY(ImGuiKey_GamepadLStickUp, ImGuiNavInput_LStickUp, false);
+ NAV_MAP_KEY(ImGuiKey_GamepadLStickDown, ImGuiNavInput_LStickDown, false);
+ #undef NAV_MAP_KEY
+ }
+
+ // Update Keyboard->Nav inputs mapping
+ const bool nav_keyboard_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) != 0;
+ if (nav_keyboard_active)
+ {
+ #define NAV_MAP_KEY(_KEY, _NAV_INPUT) do { if (IsKeyDown(_KEY)) { io.NavInputs[_NAV_INPUT] = 1.0f; g.NavInputSource = ImGuiInputSource_Keyboard; } } while (0)
+ NAV_MAP_KEY(ImGuiKey_Space, ImGuiNavInput_Activate );
+ NAV_MAP_KEY(ImGuiKey_Enter, ImGuiNavInput_Input );
+ NAV_MAP_KEY(ImGuiKey_Escape, ImGuiNavInput_Cancel );
+ NAV_MAP_KEY(ImGuiKey_LeftArrow, ImGuiNavInput_KeyLeft_ );
+ NAV_MAP_KEY(ImGuiKey_RightArrow,ImGuiNavInput_KeyRight_);
+ NAV_MAP_KEY(ImGuiKey_UpArrow, ImGuiNavInput_KeyUp_ );
+ NAV_MAP_KEY(ImGuiKey_DownArrow, ImGuiNavInput_KeyDown_ );
+ if (io.KeyCtrl)
+ io.NavInputs[ImGuiNavInput_TweakSlow] = 1.0f;
+ if (io.KeyShift)
+ io.NavInputs[ImGuiNavInput_TweakFast] = 1.0f;
+ #undef NAV_MAP_KEY
+ }
+ memcpy(io.NavInputsDownDurationPrev, io.NavInputsDownDuration, sizeof(io.NavInputsDownDuration));
+ for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++)
+ io.NavInputsDownDuration[i] = (io.NavInputs[i] > 0.0f) ? (io.NavInputsDownDuration[i] < 0.0f ? 0.0f : io.NavInputsDownDuration[i] + io.DeltaTime) : -1.0f;
+
+ // Process navigation init request (select first/default focus)
+ if (g.NavInitResultId != 0)
+ NavInitRequestApplyResult();
+ g.NavInitRequest = false;
+ g.NavInitRequestFromMove = false;
+ g.NavInitResultId = 0;
+ g.NavJustMovedToId = 0;
+
+ // Process navigation move request
+ if (g.NavMoveSubmitted)
+ NavMoveRequestApplyResult();
+ g.NavTabbingCounter = 0;
+ g.NavMoveSubmitted = g.NavMoveScoringItems = false;
+
+ // Schedule mouse position update (will be done at the bottom of this function, after 1) processing all move requests and 2) updating scrolling)
+ bool set_mouse_pos = false;
+ if (g.NavMousePosDirty && g.NavIdIsAlive)
+ if (!g.NavDisableHighlight && g.NavDisableMouseHover && g.NavWindow)
+ set_mouse_pos = true;
+ g.NavMousePosDirty = false;
+ IM_ASSERT(g.NavLayer == ImGuiNavLayer_Main || g.NavLayer == ImGuiNavLayer_Menu);
+
+ // Store our return window (for returning from Menu Layer to Main Layer) and clear it as soon as we step back in our own Layer 0
+ if (g.NavWindow)
+ NavSaveLastChildNavWindowIntoParent(g.NavWindow);
+ if (g.NavWindow && g.NavWindow->NavLastChildNavWindow != NULL && g.NavLayer == ImGuiNavLayer_Main)
+ g.NavWindow->NavLastChildNavWindow = NULL;
+
+ // Update CTRL+TAB and Windowing features (hold Square to move/resize/etc.)
+ NavUpdateWindowing();
+
+ // Set output flags for user application
+ io.NavActive = (nav_keyboard_active || nav_gamepad_active) && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs);
+ io.NavVisible = (io.NavActive && g.NavId != 0 && !g.NavDisableHighlight) || (g.NavWindowingTarget != NULL);
+
+ // Process NavCancel input (to close a popup, get back to parent, clear focus)
+ NavUpdateCancelRequest();
+
+ // Process manual activation request
+ g.NavActivateId = g.NavActivateDownId = g.NavActivatePressedId = g.NavActivateInputId = 0;
+ g.NavActivateFlags = ImGuiActivateFlags_None;
+ if (g.NavId != 0 && !g.NavDisableHighlight && !g.NavWindowingTarget && g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
+ {
+ bool activate_down = IsNavInputDown(ImGuiNavInput_Activate);
+ bool input_down = IsNavInputDown(ImGuiNavInput_Input);
+ bool activate_pressed = activate_down && IsNavInputTest(ImGuiNavInput_Activate, ImGuiNavReadMode_Pressed);
+ bool input_pressed = input_down && IsNavInputTest(ImGuiNavInput_Input, ImGuiNavReadMode_Pressed);
+ if (g.ActiveId == 0 && activate_pressed)
+ {
+ g.NavActivateId = g.NavId;
+ g.NavActivateFlags = ImGuiActivateFlags_PreferTweak;
+ }
+ if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && input_pressed)
+ {
+ g.NavActivateInputId = g.NavId;
+ g.NavActivateFlags = ImGuiActivateFlags_PreferInput;
+ }
+ if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && activate_down)
+ g.NavActivateDownId = g.NavId;
+ if ((g.ActiveId == 0 || g.ActiveId == g.NavId) && activate_pressed)
+ g.NavActivatePressedId = g.NavId;
+ }
+ if (g.NavWindow && (g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs))
+ g.NavDisableHighlight = true;
+ if (g.NavActivateId != 0)
+ IM_ASSERT(g.NavActivateDownId == g.NavActivateId);
+
+ // Process programmatic activation request
+ // FIXME-NAV: Those should eventually be queued (unlike focus they don't cancel each others)
+ if (g.NavNextActivateId != 0)
+ {
+ if (g.NavNextActivateFlags & ImGuiActivateFlags_PreferInput)
+ g.NavActivateInputId = g.NavNextActivateId;
+ else
+ g.NavActivateId = g.NavActivateDownId = g.NavActivatePressedId = g.NavNextActivateId;
+ g.NavActivateFlags = g.NavNextActivateFlags;
+ }
+ g.NavNextActivateId = 0;
+
+ // Process move requests
+ NavUpdateCreateMoveRequest();
+ if (g.NavMoveDir == ImGuiDir_None)
+ NavUpdateCreateTabbingRequest();
+ NavUpdateAnyRequestFlag();
+ g.NavIdIsAlive = false;
+
+ // Scrolling
+ if (g.NavWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_NoNavInputs) && !g.NavWindowingTarget)
+ {
+ // *Fallback* manual-scroll with Nav directional keys when window has no navigable item
+ ImGuiWindow* window = g.NavWindow;
+ const float scroll_speed = IM_ROUND(window->CalcFontSize() * 100 * io.DeltaTime); // We need round the scrolling speed because sub-pixel scroll isn't reliably supported.
+ const ImGuiDir move_dir = g.NavMoveDir;
+ if (window->DC.NavLayersActiveMask == 0x00 && window->DC.NavHasScroll && move_dir != ImGuiDir_None)
+ {
+ if (move_dir == ImGuiDir_Left || move_dir == ImGuiDir_Right)
+ SetScrollX(window, ImFloor(window->Scroll.x + ((move_dir == ImGuiDir_Left) ? -1.0f : +1.0f) * scroll_speed));
+ if (move_dir == ImGuiDir_Up || move_dir == ImGuiDir_Down)
+ SetScrollY(window, ImFloor(window->Scroll.y + ((move_dir == ImGuiDir_Up) ? -1.0f : +1.0f) * scroll_speed));
+ }
+
+ // *Normal* Manual scroll with NavScrollXXX keys
+ // Next movement request will clamp the NavId reference rectangle to the visible area, so navigation will resume within those bounds.
+ ImVec2 scroll_dir = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiNavReadMode_Down, 1.0f / 10.0f, 10.0f);
+ if (scroll_dir.x != 0.0f && window->ScrollbarX)
+ SetScrollX(window, ImFloor(window->Scroll.x + scroll_dir.x * scroll_speed));
+ if (scroll_dir.y != 0.0f)
+ SetScrollY(window, ImFloor(window->Scroll.y + scroll_dir.y * scroll_speed));
+ }
+
+ // Always prioritize mouse highlight if navigation is disabled
+ if (!nav_keyboard_active && !nav_gamepad_active)
+ {
+ g.NavDisableHighlight = true;
+ g.NavDisableMouseHover = set_mouse_pos = false;
+ }
+
+ // Update mouse position if requested
+ // (This will take into account the possibility that a Scroll was queued in the window to offset our absolute mouse position before scroll has been applied)
+ if (set_mouse_pos && (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) && (io.BackendFlags & ImGuiBackendFlags_HasSetMousePos))
+ {
+ io.MousePos = io.MousePosPrev = NavCalcPreferredRefPos();
+ io.WantSetMousePos = true;
+ //IMGUI_DEBUG_LOG_IO("SetMousePos: (%.1f,%.1f)\n", io.MousePos.x, io.MousePos.y);
+ }
+
+ // [DEBUG]
+ g.NavScoringDebugCount = 0;
+#if IMGUI_DEBUG_NAV_RECTS
+ if (g.NavWindow)
+ {
+ ImDrawList* draw_list = GetForegroundDrawList(g.NavWindow);
+ if (1) { for (int layer = 0; layer < 2; layer++) { ImRect r = WindowRectRelToAbs(g.NavWindow, g.NavWindow->NavRectRel[layer]); draw_list->AddRect(r.Min, r.Max, IM_COL32(255,200,0,255)); } } // [DEBUG]
+ if (1) { ImU32 col = (!g.NavWindow->Hidden) ? IM_COL32(255,0,255,255) : IM_COL32(255,0,0,255); ImVec2 p = NavCalcPreferredRefPos(); char buf[32]; ImFormatString(buf, 32, "%d", g.NavLayer); draw_list->AddCircleFilled(p, 3.0f, col); draw_list->AddText(NULL, 13.0f, p + ImVec2(8,-4), col, buf); }
+ }
+#endif
+}
+
+void ImGui::NavInitRequestApplyResult()
+{
+ // In very rare cases g.NavWindow may be null (e.g. clearing focus after requesting an init request, which does happen when releasing Alt while clicking on void)
+ ImGuiContext& g = *GImGui;
+ if (!g.NavWindow)
+ return;
+
+ // Apply result from previous navigation init request (will typically select the first item, unless SetItemDefaultFocus() has been called)
+ // FIXME-NAV: On _NavFlattened windows, g.NavWindow will only be updated during subsequent frame. Not a problem currently.
+ IMGUI_DEBUG_LOG_NAV("[nav] NavInitRequest: ApplyResult: NavID 0x%08X in Layer %d Window \"%s\"\n", g.NavInitResultId, g.NavLayer, g.NavWindow->Name);
+ SetNavID(g.NavInitResultId, g.NavLayer, 0, g.NavInitResultRectRel);
+ g.NavIdIsAlive = true; // Mark as alive from previous frame as we got a result
+ if (g.NavInitRequestFromMove)
+ NavRestoreHighlightAfterMove();
+}
+
+void ImGui::NavUpdateCreateMoveRequest()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiIO& io = g.IO;
+ ImGuiWindow* window = g.NavWindow;
+
+ if (g.NavMoveForwardToNextFrame && window != NULL)
+ {
+ // Forwarding previous request (which has been modified, e.g. wrap around menus rewrite the requests with a starting rectangle at the other side of the window)
+ // (preserve most state, which were already set by the NavMoveRequestForward() function)
+ IM_ASSERT(g.NavMoveDir != ImGuiDir_None && g.NavMoveClipDir != ImGuiDir_None);
+ IM_ASSERT(g.NavMoveFlags & ImGuiNavMoveFlags_Forwarded);
+ IMGUI_DEBUG_LOG_NAV("[nav] NavMoveRequestForward %d\n", g.NavMoveDir);
+ }
+ else
+ {
+ // Initiate directional inputs request
+ g.NavMoveDir = ImGuiDir_None;
+ g.NavMoveFlags = ImGuiNavMoveFlags_None;
+ g.NavMoveScrollFlags = ImGuiScrollFlags_None;
+ if (window && !g.NavWindowingTarget && !(window->Flags & ImGuiWindowFlags_NoNavInputs))
+ {
+ const ImGuiNavReadMode read_mode = ImGuiNavReadMode_Repeat;
+ if (!IsActiveIdUsingNavDir(ImGuiDir_Left) && (IsNavInputTest(ImGuiNavInput_DpadLeft, read_mode) || IsNavInputTest(ImGuiNavInput_KeyLeft_, read_mode))) { g.NavMoveDir = ImGuiDir_Left; }
+ if (!IsActiveIdUsingNavDir(ImGuiDir_Right) && (IsNavInputTest(ImGuiNavInput_DpadRight, read_mode) || IsNavInputTest(ImGuiNavInput_KeyRight_, read_mode))) { g.NavMoveDir = ImGuiDir_Right; }
+ if (!IsActiveIdUsingNavDir(ImGuiDir_Up) && (IsNavInputTest(ImGuiNavInput_DpadUp, read_mode) || IsNavInputTest(ImGuiNavInput_KeyUp_, read_mode))) { g.NavMoveDir = ImGuiDir_Up; }
+ if (!IsActiveIdUsingNavDir(ImGuiDir_Down) && (IsNavInputTest(ImGuiNavInput_DpadDown, read_mode) || IsNavInputTest(ImGuiNavInput_KeyDown_, read_mode))) { g.NavMoveDir = ImGuiDir_Down; }
+ }
+ g.NavMoveClipDir = g.NavMoveDir;
+ g.NavScoringNoClipRect = ImRect(+FLT_MAX, +FLT_MAX, -FLT_MAX, -FLT_MAX);
+ }
+
+ // Update PageUp/PageDown/Home/End scroll
+ // FIXME-NAV: Consider enabling those keys even without the master ImGuiConfigFlags_NavEnableKeyboard flag?
+ const bool nav_keyboard_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) != 0;
+ float scoring_rect_offset_y = 0.0f;
+ if (window && g.NavMoveDir == ImGuiDir_None && nav_keyboard_active)
+ scoring_rect_offset_y = NavUpdatePageUpPageDown();
+ if (scoring_rect_offset_y != 0.0f)
+ {
+ g.NavScoringNoClipRect = window->InnerRect;
+ g.NavScoringNoClipRect.TranslateY(scoring_rect_offset_y);
+ }
+
+ // [DEBUG] Always send a request
+#if IMGUI_DEBUG_NAV_SCORING
+ if (io.KeyCtrl && IsKeyPressed(ImGuiKey_C))
+ g.NavMoveDirForDebug = (ImGuiDir)((g.NavMoveDirForDebug + 1) & 3);
+ if (io.KeyCtrl && g.NavMoveDir == ImGuiDir_None)
+ {
+ g.NavMoveDir = g.NavMoveDirForDebug;
+ g.NavMoveFlags |= ImGuiNavMoveFlags_DebugNoResult;
+ }
+#endif
+
+ // Submit
+ g.NavMoveForwardToNextFrame = false;
+ if (g.NavMoveDir != ImGuiDir_None)
+ NavMoveRequestSubmit(g.NavMoveDir, g.NavMoveClipDir, g.NavMoveFlags, g.NavMoveScrollFlags);
+
+ // Moving with no reference triggers a init request (will be used as a fallback if the direction fails to find a match)
+ if (g.NavMoveSubmitted && g.NavId == 0)
+ {
+ IMGUI_DEBUG_LOG_NAV("[nav] NavInitRequest: from move, window \"%s\", layer=%d\n", window ? window->Name : "<NULL>", g.NavLayer);
+ g.NavInitRequest = g.NavInitRequestFromMove = true;
+ g.NavInitResultId = 0;
+ g.NavDisableHighlight = false;
+ }
+
+ // When using gamepad, we project the reference nav bounding box into window visible area.
+ // This is to allow resuming navigation inside the visible area after doing a large amount of scrolling, since with gamepad every movements are relative
+ // (can't focus a visible object like we can with the mouse).
+ if (g.NavMoveSubmitted && g.NavInputSource == ImGuiInputSource_Gamepad && g.NavLayer == ImGuiNavLayer_Main && window != NULL)// && (g.NavMoveFlags & ImGuiNavMoveFlags_Forwarded))
+ {
+ bool clamp_x = (g.NavMoveFlags & (ImGuiNavMoveFlags_LoopX | ImGuiNavMoveFlags_WrapX)) == 0;
+ bool clamp_y = (g.NavMoveFlags & (ImGuiNavMoveFlags_LoopY | ImGuiNavMoveFlags_WrapY)) == 0;
+ ImRect inner_rect_rel = WindowRectAbsToRel(window, ImRect(window->InnerRect.Min - ImVec2(1, 1), window->InnerRect.Max + ImVec2(1, 1)));
+ if ((clamp_x || clamp_y) && !inner_rect_rel.Contains(window->NavRectRel[g.NavLayer]))
+ {
+ //IMGUI_DEBUG_LOG_NAV("[nav] NavMoveRequest: clamp NavRectRel for gamepad move\n");
+ float pad_x = ImMin(inner_rect_rel.GetWidth(), window->CalcFontSize() * 0.5f);
+ float pad_y = ImMin(inner_rect_rel.GetHeight(), window->CalcFontSize() * 0.5f); // Terrible approximation for the intent of starting navigation from first fully visible item
+ inner_rect_rel.Min.x = clamp_x ? (inner_rect_rel.Min.x + pad_x) : -FLT_MAX;
+ inner_rect_rel.Max.x = clamp_x ? (inner_rect_rel.Max.x - pad_x) : +FLT_MAX;
+ inner_rect_rel.Min.y = clamp_y ? (inner_rect_rel.Min.y + pad_y) : -FLT_MAX;
+ inner_rect_rel.Max.y = clamp_y ? (inner_rect_rel.Max.y - pad_y) : +FLT_MAX;
+ window->NavRectRel[g.NavLayer].ClipWithFull(inner_rect_rel);
+ g.NavId = g.NavFocusScopeId = 0;
+ }
+ }
+
+ // For scoring we use a single segment on the left side our current item bounding box (not touching the edge to avoid box overlap with zero-spaced items)
+ ImRect scoring_rect;
+ if (window != NULL)
+ {
+ ImRect nav_rect_rel = !window->NavRectRel[g.NavLayer].IsInverted() ? window->NavRectRel[g.NavLayer] : ImRect(0, 0, 0, 0);
+ scoring_rect = WindowRectRelToAbs(window, nav_rect_rel);
+ scoring_rect.TranslateY(scoring_rect_offset_y);
+ scoring_rect.Min.x = ImMin(scoring_rect.Min.x + 1.0f, scoring_rect.Max.x);
+ scoring_rect.Max.x = scoring_rect.Min.x;
+ IM_ASSERT(!scoring_rect.IsInverted()); // Ensure if we have a finite, non-inverted bounding box here will allows us to remove extraneous ImFabs() calls in NavScoreItem().
+ //GetForegroundDrawList()->AddRect(scoring_rect.Min, scoring_rect.Max, IM_COL32(255,200,0,255)); // [DEBUG]
+ //if (!g.NavScoringNoClipRect.IsInverted()) { GetForegroundDrawList()->AddRect(g.NavScoringNoClipRect.Min, g.NavScoringNoClipRect.Max, IM_COL32(255, 200, 0, 255)); } // [DEBUG]
+ }
+ g.NavScoringRect = scoring_rect;
+ g.NavScoringNoClipRect.Add(scoring_rect);
+}
+
+void ImGui::NavUpdateCreateTabbingRequest()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.NavWindow;
+ IM_ASSERT(g.NavMoveDir == ImGuiDir_None);
+ if (window == NULL || g.NavWindowingTarget != NULL || (window->Flags & ImGuiWindowFlags_NoNavInputs))
+ return;
+
+ const bool tab_pressed = IsKeyPressed(ImGuiKey_Tab, true) && !IsActiveIdUsingKey(ImGuiKey_Tab) && !g.IO.KeyCtrl && !g.IO.KeyAlt;
+ if (!tab_pressed)
+ return;
+
+ // Initiate tabbing request
+ // (this is ALWAYS ENABLED, regardless of ImGuiConfigFlags_NavEnableKeyboard flag!)
+ // Initially this was designed to use counters and modulo arithmetic, but that could not work with unsubmitted items (list clipper). Instead we use a strategy close to other move requests.
+ // See NavProcessItemForTabbingRequest() for a description of the various forward/backward tabbing cases with and without wrapping.
+ //// FIXME: We use (g.ActiveId == 0) but (g.NavDisableHighlight == false) might be righter once we can tab through anything
+ g.NavTabbingDir = g.IO.KeyShift ? -1 : (g.ActiveId == 0) ? 0 : +1;
+ ImGuiScrollFlags scroll_flags = window->Appearing ? ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_AlwaysCenterY : ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_KeepVisibleEdgeY;
+ ImGuiDir clip_dir = (g.NavTabbingDir < 0) ? ImGuiDir_Up : ImGuiDir_Down;
+ NavMoveRequestSubmit(ImGuiDir_None, clip_dir, ImGuiNavMoveFlags_Tabbing, scroll_flags); // FIXME-NAV: Once we refactor tabbing, add LegacyApi flag to not activate non-inputable.
+ g.NavTabbingCounter = -1;
+}
+
+// Apply result from previous frame navigation directional move request. Always called from NavUpdate()
+void ImGui::NavMoveRequestApplyResult()
+{
+ ImGuiContext& g = *GImGui;
+#if IMGUI_DEBUG_NAV_SCORING
+ if (g.NavMoveFlags & ImGuiNavMoveFlags_DebugNoResult) // [DEBUG] Scoring all items in NavWindow at all times
+ return;
+#endif
+
+ // Select which result to use
+ ImGuiNavItemData* result = (g.NavMoveResultLocal.ID != 0) ? &g.NavMoveResultLocal : (g.NavMoveResultOther.ID != 0) ? &g.NavMoveResultOther : NULL;
+
+ // Tabbing forward wrap
+ if (g.NavMoveFlags & ImGuiNavMoveFlags_Tabbing)
+ if ((g.NavTabbingCounter == 1 || g.NavTabbingDir == 0) && g.NavTabbingResultFirst.ID)
+ result = &g.NavTabbingResultFirst;
+
+ // In a situation when there is no results but NavId != 0, re-enable the Navigation highlight (because g.NavId is not considered as a possible result)
+ if (result == NULL)
+ {
+ if (g.NavMoveFlags & ImGuiNavMoveFlags_Tabbing)
+ g.NavMoveFlags |= ImGuiNavMoveFlags_DontSetNavHighlight;
+ if (g.NavId != 0 && (g.NavMoveFlags & ImGuiNavMoveFlags_DontSetNavHighlight) == 0)
+ NavRestoreHighlightAfterMove();
+ return;
+ }
+
+ // PageUp/PageDown behavior first jumps to the bottom/top mostly visible item, _otherwise_ use the result from the previous/next page.
+ if (g.NavMoveFlags & ImGuiNavMoveFlags_AlsoScoreVisibleSet)
+ if (g.NavMoveResultLocalVisible.ID != 0 && g.NavMoveResultLocalVisible.ID != g.NavId)
+ result = &g.NavMoveResultLocalVisible;
+
+ // Maybe entering a flattened child from the outside? In this case solve the tie using the regular scoring rules.
+ if (result != &g.NavMoveResultOther && g.NavMoveResultOther.ID != 0 && g.NavMoveResultOther.Window->ParentWindow == g.NavWindow)
+ if ((g.NavMoveResultOther.DistBox < result->DistBox) || (g.NavMoveResultOther.DistBox == result->DistBox && g.NavMoveResultOther.DistCenter < result->DistCenter))
+ result = &g.NavMoveResultOther;
+ IM_ASSERT(g.NavWindow && result->Window);
+
+ // Scroll to keep newly navigated item fully into view.
+ if (g.NavLayer == ImGuiNavLayer_Main)
+ {
+ if (g.NavMoveFlags & ImGuiNavMoveFlags_ScrollToEdgeY)
+ {
+ // FIXME: Should remove this
+ float scroll_target = (g.NavMoveDir == ImGuiDir_Up) ? result->Window->ScrollMax.y : 0.0f;
+ SetScrollY(result->Window, scroll_target);
+ }
+ else
+ {
+ ImRect rect_abs = WindowRectRelToAbs(result->Window, result->RectRel);
+ ScrollToRectEx(result->Window, rect_abs, g.NavMoveScrollFlags);
+ }
+ }
+
+ if (g.NavWindow != result->Window)
+ {
+ IMGUI_DEBUG_LOG_FOCUS("[focus] NavMoveRequest: SetNavWindow(\"%s\")\n", result->Window->Name);
+ g.NavWindow = result->Window;
+ }
+ if (g.ActiveId != result->ID)
+ ClearActiveID();
+ if (g.NavId != result->ID)
+ {
+ // Don't set NavJustMovedToId if just landed on the same spot (which may happen with ImGuiNavMoveFlags_AllowCurrentNavId)
+ g.NavJustMovedToId = result->ID;
+ g.NavJustMovedToFocusScopeId = result->FocusScopeId;
+ g.NavJustMovedToKeyMods = g.NavMoveKeyMods;
+ }
+
+ // Focus
+ IMGUI_DEBUG_LOG_NAV("[nav] NavMoveRequest: result NavID 0x%08X in Layer %d Window \"%s\"\n", result->ID, g.NavLayer, g.NavWindow->Name);
+ SetNavID(result->ID, g.NavLayer, result->FocusScopeId, result->RectRel);
+
+ // Tabbing: Activates Inputable or Focus non-Inputable
+ if ((g.NavMoveFlags & ImGuiNavMoveFlags_Tabbing) && (result->InFlags & ImGuiItemFlags_Inputable))
+ {
+ g.NavNextActivateId = result->ID;
+ g.NavNextActivateFlags = ImGuiActivateFlags_PreferInput | ImGuiActivateFlags_TryToPreserveState;
+ g.NavMoveFlags |= ImGuiNavMoveFlags_DontSetNavHighlight;
+ }
+
+ // Activate
+ if (g.NavMoveFlags & ImGuiNavMoveFlags_Activate)
+ {
+ g.NavNextActivateId = result->ID;
+ g.NavNextActivateFlags = ImGuiActivateFlags_None;
+ }
+
+ // Enable nav highlight
+ if ((g.NavMoveFlags & ImGuiNavMoveFlags_DontSetNavHighlight) == 0)
+ NavRestoreHighlightAfterMove();
+}
+
+// Process NavCancel input (to close a popup, get back to parent, clear focus)
+// FIXME: In order to support e.g. Escape to clear a selection we'll need:
+// - either to store the equivalent of ActiveIdUsingKeyInputMask for a FocusScope and test for it.
+// - either to move most/all of those tests to the epilogue/end functions of the scope they are dealing with (e.g. exit child window in EndChild()) or in EndFrame(), to allow an earlier intercept
+static void ImGui::NavUpdateCancelRequest()
+{
+ ImGuiContext& g = *GImGui;
+ if (!IsNavInputTest(ImGuiNavInput_Cancel, ImGuiNavReadMode_Pressed))
+ return;
+
+ IMGUI_DEBUG_LOG_NAV("[nav] ImGuiNavInput_Cancel\n");
+ if (g.ActiveId != 0)
+ {
+ if (!IsActiveIdUsingNavInput(ImGuiNavInput_Cancel))
+ ClearActiveID();
+ }
+ else if (g.NavLayer != ImGuiNavLayer_Main)
+ {
+ // Leave the "menu" layer
+ NavRestoreLayer(ImGuiNavLayer_Main);
+ NavRestoreHighlightAfterMove();
+ }
+ else if (g.NavWindow && g.NavWindow != g.NavWindow->RootWindow && !(g.NavWindow->Flags & ImGuiWindowFlags_Popup) && g.NavWindow->ParentWindow)
+ {
+ // Exit child window
+ ImGuiWindow* child_window = g.NavWindow;
+ ImGuiWindow* parent_window = g.NavWindow->ParentWindow;
+ IM_ASSERT(child_window->ChildId != 0);
+ ImRect child_rect = child_window->Rect();
+ FocusWindow(parent_window);
+ SetNavID(child_window->ChildId, ImGuiNavLayer_Main, 0, WindowRectAbsToRel(parent_window, child_rect));
+ NavRestoreHighlightAfterMove();
+ }
+ else if (g.OpenPopupStack.Size > 0 && !(g.OpenPopupStack.back().Window->Flags & ImGuiWindowFlags_Modal))
+ {
+ // Close open popup/menu
+ ClosePopupToLevel(g.OpenPopupStack.Size - 1, true);
+ }
+ else
+ {
+ // Clear NavLastId for popups but keep it for regular child window so we can leave one and come back where we were
+ if (g.NavWindow && ((g.NavWindow->Flags & ImGuiWindowFlags_Popup) || !(g.NavWindow->Flags & ImGuiWindowFlags_ChildWindow)))
+ g.NavWindow->NavLastIds[0] = 0;
+ g.NavId = g.NavFocusScopeId = 0;
+ }
+}
+
+// Handle PageUp/PageDown/Home/End keys
+// Called from NavUpdateCreateMoveRequest() which will use our output to create a move request
+// FIXME-NAV: This doesn't work properly with NavFlattened siblings as we use NavWindow rectangle for reference
+// FIXME-NAV: how to get Home/End to aim at the beginning/end of a 2D grid?
+static float ImGui::NavUpdatePageUpPageDown()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.NavWindow;
+ if ((window->Flags & ImGuiWindowFlags_NoNavInputs) || g.NavWindowingTarget != NULL)
+ return 0.0f;
+
+ const bool page_up_held = IsKeyDown(ImGuiKey_PageUp) && !IsActiveIdUsingKey(ImGuiKey_PageUp);
+ const bool page_down_held = IsKeyDown(ImGuiKey_PageDown) && !IsActiveIdUsingKey(ImGuiKey_PageDown);
+ const bool home_pressed = IsKeyPressed(ImGuiKey_Home) && !IsActiveIdUsingKey(ImGuiKey_Home);
+ const bool end_pressed = IsKeyPressed(ImGuiKey_End) && !IsActiveIdUsingKey(ImGuiKey_End);
+ if (page_up_held == page_down_held && home_pressed == end_pressed) // Proceed if either (not both) are pressed, otherwise early out
+ return 0.0f;
+
+ if (g.NavLayer != ImGuiNavLayer_Main)
+ NavRestoreLayer(ImGuiNavLayer_Main);
+
+ if (window->DC.NavLayersActiveMask == 0x00 && window->DC.NavHasScroll)
+ {
+ // Fallback manual-scroll when window has no navigable item
+ if (IsKeyPressed(ImGuiKey_PageUp, true))
+ SetScrollY(window, window->Scroll.y - window->InnerRect.GetHeight());
+ else if (IsKeyPressed(ImGuiKey_PageDown, true))
+ SetScrollY(window, window->Scroll.y + window->InnerRect.GetHeight());
+ else if (home_pressed)
+ SetScrollY(window, 0.0f);
+ else if (end_pressed)
+ SetScrollY(window, window->ScrollMax.y);
+ }
+ else
+ {
+ ImRect& nav_rect_rel = window->NavRectRel[g.NavLayer];
+ const float page_offset_y = ImMax(0.0f, window->InnerRect.GetHeight() - window->CalcFontSize() * 1.0f + nav_rect_rel.GetHeight());
+ float nav_scoring_rect_offset_y = 0.0f;
+ if (IsKeyPressed(ImGuiKey_PageUp, true))
+ {
+ nav_scoring_rect_offset_y = -page_offset_y;
+ g.NavMoveDir = ImGuiDir_Down; // Because our scoring rect is offset up, we request the down direction (so we can always land on the last item)
+ g.NavMoveClipDir = ImGuiDir_Up;
+ g.NavMoveFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet;
+ }
+ else if (IsKeyPressed(ImGuiKey_PageDown, true))
+ {
+ nav_scoring_rect_offset_y = +page_offset_y;
+ g.NavMoveDir = ImGuiDir_Up; // Because our scoring rect is offset down, we request the up direction (so we can always land on the last item)
+ g.NavMoveClipDir = ImGuiDir_Down;
+ g.NavMoveFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_AlsoScoreVisibleSet;
+ }
+ else if (home_pressed)
+ {
+ // FIXME-NAV: handling of Home/End is assuming that the top/bottom most item will be visible with Scroll.y == 0/ScrollMax.y
+ // Scrolling will be handled via the ImGuiNavMoveFlags_ScrollToEdgeY flag, we don't scroll immediately to avoid scrolling happening before nav result.
+ // Preserve current horizontal position if we have any.
+ nav_rect_rel.Min.y = nav_rect_rel.Max.y = 0.0f;
+ if (nav_rect_rel.IsInverted())
+ nav_rect_rel.Min.x = nav_rect_rel.Max.x = 0.0f;
+ g.NavMoveDir = ImGuiDir_Down;
+ g.NavMoveFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_ScrollToEdgeY;
+ // FIXME-NAV: MoveClipDir left to _None, intentional?
+ }
+ else if (end_pressed)
+ {
+ nav_rect_rel.Min.y = nav_rect_rel.Max.y = window->ContentSize.y;
+ if (nav_rect_rel.IsInverted())
+ nav_rect_rel.Min.x = nav_rect_rel.Max.x = 0.0f;
+ g.NavMoveDir = ImGuiDir_Up;
+ g.NavMoveFlags = ImGuiNavMoveFlags_AllowCurrentNavId | ImGuiNavMoveFlags_ScrollToEdgeY;
+ // FIXME-NAV: MoveClipDir left to _None, intentional?
+ }
+ return nav_scoring_rect_offset_y;
+ }
+ return 0.0f;
+}
+
+static void ImGui::NavEndFrame()
+{
+ ImGuiContext& g = *GImGui;
+
+ // Show CTRL+TAB list window
+ if (g.NavWindowingTarget != NULL)
+ NavUpdateWindowingOverlay();
+
+ // Perform wrap-around in menus
+ // FIXME-NAV: Wrap may need to apply a weight bias on the other axis. e.g. 4x4 grid with 2 last items missing on last item won't handle LoopY/WrapY correctly.
+ // FIXME-NAV: Wrap (not Loop) support could be handled by the scoring function and then WrapX would function without an extra frame.
+ const ImGuiNavMoveFlags wanted_flags = ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX | ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY;
+ if (g.NavWindow && NavMoveRequestButNoResultYet() && (g.NavMoveFlags & wanted_flags) && (g.NavMoveFlags & ImGuiNavMoveFlags_Forwarded) == 0)
+ NavUpdateCreateWrappingRequest();
+}
+
+static void ImGui::NavUpdateCreateWrappingRequest()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.NavWindow;
+
+ bool do_forward = false;
+ ImRect bb_rel = window->NavRectRel[g.NavLayer];
+ ImGuiDir clip_dir = g.NavMoveDir;
+ const ImGuiNavMoveFlags move_flags = g.NavMoveFlags;
+ if (g.NavMoveDir == ImGuiDir_Left && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
+ {
+ bb_rel.Min.x = bb_rel.Max.x = window->ContentSize.x + window->WindowPadding.x;
+ if (move_flags & ImGuiNavMoveFlags_WrapX)
+ {
+ bb_rel.TranslateY(-bb_rel.GetHeight()); // Previous row
+ clip_dir = ImGuiDir_Up;
+ }
+ do_forward = true;
+ }
+ if (g.NavMoveDir == ImGuiDir_Right && (move_flags & (ImGuiNavMoveFlags_WrapX | ImGuiNavMoveFlags_LoopX)))
+ {
+ bb_rel.Min.x = bb_rel.Max.x = -window->WindowPadding.x;
+ if (move_flags & ImGuiNavMoveFlags_WrapX)
+ {
+ bb_rel.TranslateY(+bb_rel.GetHeight()); // Next row
+ clip_dir = ImGuiDir_Down;
+ }
+ do_forward = true;
+ }
+ if (g.NavMoveDir == ImGuiDir_Up && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
+ {
+ bb_rel.Min.y = bb_rel.Max.y = window->ContentSize.y + window->WindowPadding.y;
+ if (move_flags & ImGuiNavMoveFlags_WrapY)
+ {
+ bb_rel.TranslateX(-bb_rel.GetWidth()); // Previous column
+ clip_dir = ImGuiDir_Left;
+ }
+ do_forward = true;
+ }
+ if (g.NavMoveDir == ImGuiDir_Down && (move_flags & (ImGuiNavMoveFlags_WrapY | ImGuiNavMoveFlags_LoopY)))
+ {
+ bb_rel.Min.y = bb_rel.Max.y = -window->WindowPadding.y;
+ if (move_flags & ImGuiNavMoveFlags_WrapY)
+ {
+ bb_rel.TranslateX(+bb_rel.GetWidth()); // Next column
+ clip_dir = ImGuiDir_Right;
+ }
+ do_forward = true;
+ }
+ if (!do_forward)
+ return;
+ window->NavRectRel[g.NavLayer] = bb_rel;
+ NavMoveRequestForward(g.NavMoveDir, clip_dir, move_flags, g.NavMoveScrollFlags);
+}
+
+static int ImGui::FindWindowFocusIndex(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ IM_UNUSED(g);
+ int order = window->FocusOrder;
+ IM_ASSERT(window->RootWindow == window); // No child window (not testing _ChildWindow because of docking)
+ IM_ASSERT(g.WindowsFocusOrder[order] == window);
+ return order;
+}
+
+static ImGuiWindow* FindWindowNavFocusable(int i_start, int i_stop, int dir) // FIXME-OPT O(N)
+{
+ ImGuiContext& g = *GImGui;
+ for (int i = i_start; i >= 0 && i < g.WindowsFocusOrder.Size && i != i_stop; i += dir)
+ if (ImGui::IsWindowNavFocusable(g.WindowsFocusOrder[i]))
+ return g.WindowsFocusOrder[i];
+ return NULL;
+}
+
+static void NavUpdateWindowingHighlightWindow(int focus_change_dir)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.NavWindowingTarget);
+ if (g.NavWindowingTarget->Flags & ImGuiWindowFlags_Modal)
+ return;
+
+ const int i_current = ImGui::FindWindowFocusIndex(g.NavWindowingTarget);
+ ImGuiWindow* window_target = FindWindowNavFocusable(i_current + focus_change_dir, -INT_MAX, focus_change_dir);
+ if (!window_target)
+ window_target = FindWindowNavFocusable((focus_change_dir < 0) ? (g.WindowsFocusOrder.Size - 1) : 0, i_current, focus_change_dir);
+ if (window_target) // Don't reset windowing target if there's a single window in the list
+ g.NavWindowingTarget = g.NavWindowingTargetAnim = window_target;
+ g.NavWindowingToggleLayer = false;
+}
+
+// Windowing management mode
+// Keyboard: CTRL+Tab (change focus/move/resize), Alt (toggle menu layer)
+// Gamepad: Hold Menu/Square (change focus/move/resize), Tap Menu/Square (toggle menu layer)
+static void ImGui::NavUpdateWindowing()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiIO& io = g.IO;
+
+ ImGuiWindow* apply_focus_window = NULL;
+ bool apply_toggle_layer = false;
+
+ ImGuiWindow* modal_window = GetTopMostPopupModal();
+ bool allow_windowing = (modal_window == NULL);
+ if (!allow_windowing)
+ g.NavWindowingTarget = NULL;
+
+ // Fade out
+ if (g.NavWindowingTargetAnim && g.NavWindowingTarget == NULL)
+ {
+ g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha - io.DeltaTime * 10.0f, 0.0f);
+ if (g.DimBgRatio <= 0.0f && g.NavWindowingHighlightAlpha <= 0.0f)
+ g.NavWindowingTargetAnim = NULL;
+ }
+
+ // Start CTRL+Tab or Square+L/R window selection
+ const bool start_windowing_with_gamepad = allow_windowing && !g.NavWindowingTarget && IsNavInputTest(ImGuiNavInput_Menu, ImGuiNavReadMode_Pressed);
+ const bool start_windowing_with_keyboard = allow_windowing && !g.NavWindowingTarget && io.KeyCtrl && IsKeyPressed(ImGuiKey_Tab);
+ if (start_windowing_with_gamepad || start_windowing_with_keyboard)
+ if (ImGuiWindow* window = g.NavWindow ? g.NavWindow : FindWindowNavFocusable(g.WindowsFocusOrder.Size - 1, -INT_MAX, -1))
+ {
+ g.NavWindowingTarget = g.NavWindowingTargetAnim = window->RootWindow;
+ g.NavWindowingTimer = g.NavWindowingHighlightAlpha = 0.0f;
+ g.NavWindowingToggleLayer = start_windowing_with_gamepad ? true : false; // Gamepad starts toggling layer
+ g.NavInputSource = start_windowing_with_keyboard ? ImGuiInputSource_Keyboard : ImGuiInputSource_Gamepad;
+ }
+
+ // Gamepad update
+ g.NavWindowingTimer += io.DeltaTime;
+ if (g.NavWindowingTarget && g.NavInputSource == ImGuiInputSource_Gamepad)
+ {
+ // Highlight only appears after a brief time holding the button, so that a fast tap on PadMenu (to toggle NavLayer) doesn't add visual noise
+ g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha, ImSaturate((g.NavWindowingTimer - NAV_WINDOWING_HIGHLIGHT_DELAY) / 0.05f));
+
+ // Select window to focus
+ const int focus_change_dir = (int)IsNavInputTest(ImGuiNavInput_FocusPrev, ImGuiNavReadMode_RepeatSlow) - (int)IsNavInputTest(ImGuiNavInput_FocusNext, ImGuiNavReadMode_RepeatSlow);
+ if (focus_change_dir != 0)
+ {
+ NavUpdateWindowingHighlightWindow(focus_change_dir);
+ g.NavWindowingHighlightAlpha = 1.0f;
+ }
+
+ // Single press toggles NavLayer, long press with L/R apply actual focus on release (until then the window was merely rendered top-most)
+ if (!IsNavInputDown(ImGuiNavInput_Menu))
+ {
+ g.NavWindowingToggleLayer &= (g.NavWindowingHighlightAlpha < 1.0f); // Once button was held long enough we don't consider it a tap-to-toggle-layer press anymore.
+ if (g.NavWindowingToggleLayer && g.NavWindow)
+ apply_toggle_layer = true;
+ else if (!g.NavWindowingToggleLayer)
+ apply_focus_window = g.NavWindowingTarget;
+ g.NavWindowingTarget = NULL;
+ }
+ }
+
+ // Keyboard: Focus
+ if (g.NavWindowingTarget && g.NavInputSource == ImGuiInputSource_Keyboard)
+ {
+ // Visuals only appears after a brief time after pressing TAB the first time, so that a fast CTRL+TAB doesn't add visual noise
+ g.NavWindowingHighlightAlpha = ImMax(g.NavWindowingHighlightAlpha, ImSaturate((g.NavWindowingTimer - NAV_WINDOWING_HIGHLIGHT_DELAY) / 0.05f)); // 1.0f
+ if (IsKeyPressed(ImGuiKey_Tab, true))
+ NavUpdateWindowingHighlightWindow(io.KeyShift ? +1 : -1);
+ if (!io.KeyCtrl)
+ apply_focus_window = g.NavWindowingTarget;
+ }
+
+ // Keyboard: Press and Release ALT to toggle menu layer
+ // - Testing that only Alt is tested prevents Alt+Shift or AltGR from toggling menu layer.
+ // - AltGR is normally Alt+Ctrl but we can't reliably detect it (not all backends/systems/layout emit it as Alt+Ctrl). But even on keyboards without AltGR we don't want Alt+Ctrl to open menu anyway.
+ const bool nav_keyboard_active = (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) != 0;
+ if (nav_keyboard_active && IsKeyPressed(ImGuiKey_ModAlt))
+ {
+ g.NavWindowingToggleLayer = true;
+ g.NavInputSource = ImGuiInputSource_Keyboard;
+ }
+ if (g.NavWindowingToggleLayer && g.NavInputSource == ImGuiInputSource_Keyboard)
+ {
+ // We cancel toggling nav layer when any text has been typed (generally while holding Alt). (See #370)
+ // We cancel toggling nav layer when other modifiers are pressed. (See #4439)
+ if (io.InputQueueCharacters.Size > 0 || io.KeyCtrl || io.KeyShift || io.KeySuper)
+ g.NavWindowingToggleLayer = false;
+
+ // Apply layer toggle on release
+ // Important: as before version <18314 we lacked an explicit IO event for focus gain/loss, we also compare mouse validity to detect old backends clearing mouse pos on focus loss.
+ if (IsKeyReleased(ImGuiKey_ModAlt) && g.NavWindowingToggleLayer)
+ if (g.ActiveId == 0 || g.ActiveIdAllowOverlap)
+ if (IsMousePosValid(&io.MousePos) == IsMousePosValid(&io.MousePosPrev))
+ apply_toggle_layer = true;
+ if (!IsKeyDown(ImGuiKey_ModAlt))
+ g.NavWindowingToggleLayer = false;
+ }
+
+ // Move window
+ if (g.NavWindowingTarget && !(g.NavWindowingTarget->Flags & ImGuiWindowFlags_NoMove))
+ {
+ ImVec2 move_delta;
+ if (g.NavInputSource == ImGuiInputSource_Keyboard && !io.KeyShift)
+ move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_RawKeyboard, ImGuiNavReadMode_Down);
+ if (g.NavInputSource == ImGuiInputSource_Gamepad)
+ move_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_PadLStick, ImGuiNavReadMode_Down);
+ if (move_delta.x != 0.0f || move_delta.y != 0.0f)
+ {
+ const float NAV_MOVE_SPEED = 800.0f;
+ const float move_speed = ImFloor(NAV_MOVE_SPEED * io.DeltaTime * ImMin(io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y)); // FIXME: Doesn't handle variable framerate very well
+ ImGuiWindow* moving_window = g.NavWindowingTarget->RootWindow;
+ SetWindowPos(moving_window, moving_window->Pos + move_delta * move_speed, ImGuiCond_Always);
+ g.NavDisableMouseHover = true;
+ }
+ }
+
+ // Apply final focus
+ if (apply_focus_window && (g.NavWindow == NULL || apply_focus_window != g.NavWindow->RootWindow))
+ {
+ ClearActiveID();
+ NavRestoreHighlightAfterMove();
+ apply_focus_window = NavRestoreLastChildNavWindow(apply_focus_window);
+ ClosePopupsOverWindow(apply_focus_window, false);
+ FocusWindow(apply_focus_window);
+ if (apply_focus_window->NavLastIds[0] == 0)
+ NavInitWindow(apply_focus_window, false);
+
+ // If the window has ONLY a menu layer (no main layer), select it directly
+ // Use NavLayersActiveMaskNext since windows didn't have a chance to be Begin()-ed on this frame,
+ // so CTRL+Tab where the keys are only held for 1 frame will be able to use correct layers mask since
+ // the target window as already been previewed once.
+ // FIXME-NAV: This should be done in NavInit.. or in FocusWindow... However in both of those cases,
+ // we won't have a guarantee that windows has been visible before and therefore NavLayersActiveMask*
+ // won't be valid.
+ if (apply_focus_window->DC.NavLayersActiveMaskNext == (1 << ImGuiNavLayer_Menu))
+ g.NavLayer = ImGuiNavLayer_Menu;
+ }
+ if (apply_focus_window)
+ g.NavWindowingTarget = NULL;
+
+ // Apply menu/layer toggle
+ if (apply_toggle_layer && g.NavWindow)
+ {
+ ClearActiveID();
+
+ // Move to parent menu if necessary
+ ImGuiWindow* new_nav_window = g.NavWindow;
+ while (new_nav_window->ParentWindow
+ && (new_nav_window->DC.NavLayersActiveMask & (1 << ImGuiNavLayer_Menu)) == 0
+ && (new_nav_window->Flags & ImGuiWindowFlags_ChildWindow) != 0
+ && (new_nav_window->Flags & (ImGuiWindowFlags_Popup | ImGuiWindowFlags_ChildMenu)) == 0)
+ new_nav_window = new_nav_window->ParentWindow;
+ if (new_nav_window != g.NavWindow)
+ {
+ ImGuiWindow* old_nav_window = g.NavWindow;
+ FocusWindow(new_nav_window);
+ new_nav_window->NavLastChildNavWindow = old_nav_window;
+ }
+
+ // Toggle layer
+ const ImGuiNavLayer new_nav_layer = (g.NavWindow->DC.NavLayersActiveMask & (1 << ImGuiNavLayer_Menu)) ? (ImGuiNavLayer)((int)g.NavLayer ^ 1) : ImGuiNavLayer_Main;
+ if (new_nav_layer != g.NavLayer)
+ {
+ // Reinitialize navigation when entering menu bar with the Alt key (FIXME: could be a properly of the layer?)
+ if (new_nav_layer == ImGuiNavLayer_Menu)
+ g.NavWindow->NavLastIds[new_nav_layer] = 0;
+ NavRestoreLayer(new_nav_layer);
+ NavRestoreHighlightAfterMove();
+ }
+ }
+}
+
+// Window has already passed the IsWindowNavFocusable()
+static const char* GetFallbackWindowNameForWindowingList(ImGuiWindow* window)
+{
+ if (window->Flags & ImGuiWindowFlags_Popup)
+ return "(Popup)";
+ if ((window->Flags & ImGuiWindowFlags_MenuBar) && strcmp(window->Name, "##MainMenuBar") == 0)
+ return "(Main menu bar)";
+ return "(Untitled)";
+}
+
+// Overlay displayed when using CTRL+TAB. Called by EndFrame().
+void ImGui::NavUpdateWindowingOverlay()
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.NavWindowingTarget != NULL);
+
+ if (g.NavWindowingTimer < NAV_WINDOWING_LIST_APPEAR_DELAY)
+ return;
+
+ if (g.NavWindowingListWindow == NULL)
+ g.NavWindowingListWindow = FindWindowByName("###NavWindowingList");
+ const ImGuiViewport* viewport = GetMainViewport();
+ SetNextWindowSizeConstraints(ImVec2(viewport->Size.x * 0.20f, viewport->Size.y * 0.20f), ImVec2(FLT_MAX, FLT_MAX));
+ SetNextWindowPos(viewport->GetCenter(), ImGuiCond_Always, ImVec2(0.5f, 0.5f));
+ PushStyleVar(ImGuiStyleVar_WindowPadding, g.Style.WindowPadding * 2.0f);
+ Begin("###NavWindowingList", NULL, ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoInputs | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings);
+ for (int n = g.WindowsFocusOrder.Size - 1; n >= 0; n--)
+ {
+ ImGuiWindow* window = g.WindowsFocusOrder[n];
+ IM_ASSERT(window != NULL); // Fix static analyzers
+ if (!IsWindowNavFocusable(window))
+ continue;
+ const char* label = window->Name;
+ if (label == FindRenderedTextEnd(label))
+ label = GetFallbackWindowNameForWindowingList(window);
+ Selectable(label, g.NavWindowingTarget == window);
+ }
+ End();
+ PopStyleVar();
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] DRAG AND DROP
+//-----------------------------------------------------------------------------
+
+bool ImGui::IsDragDropActive()
+{
+ ImGuiContext& g = *GImGui;
+ return g.DragDropActive;
+}
+
+void ImGui::ClearDragDrop()
+{
+ ImGuiContext& g = *GImGui;
+ g.DragDropActive = false;
+ g.DragDropPayload.Clear();
+ g.DragDropAcceptFlags = ImGuiDragDropFlags_None;
+ g.DragDropAcceptIdCurr = g.DragDropAcceptIdPrev = 0;
+ g.DragDropAcceptIdCurrRectSurface = FLT_MAX;
+ g.DragDropAcceptFrameCount = -1;
+
+ g.DragDropPayloadBufHeap.clear();
+ memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal));
+}
+
+// When this returns true you need to: a) call SetDragDropPayload() exactly once, b) you may render the payload visual/description, c) call EndDragDropSource()
+// If the item has an identifier:
+// - This assume/require the item to be activated (typically via ButtonBehavior).
+// - Therefore if you want to use this with a mouse button other than left mouse button, it is up to the item itself to activate with another button.
+// - We then pull and use the mouse button that was used to activate the item and use it to carry on the drag.
+// If the item has no identifier:
+// - Currently always assume left mouse button.
+bool ImGui::BeginDragDropSource(ImGuiDragDropFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ // FIXME-DRAGDROP: While in the common-most "drag from non-zero active id" case we can tell the mouse button,
+ // in both SourceExtern and id==0 cases we may requires something else (explicit flags or some heuristic).
+ ImGuiMouseButton mouse_button = ImGuiMouseButton_Left;
+
+ bool source_drag_active = false;
+ ImGuiID source_id = 0;
+ ImGuiID source_parent_id = 0;
+ if (!(flags & ImGuiDragDropFlags_SourceExtern))
+ {
+ source_id = g.LastItemData.ID;
+ if (source_id != 0)
+ {
+ // Common path: items with ID
+ if (g.ActiveId != source_id)
+ return false;
+ if (g.ActiveIdMouseButton != -1)
+ mouse_button = g.ActiveIdMouseButton;
+ if (g.IO.MouseDown[mouse_button] == false || window->SkipItems)
+ return false;
+ g.ActiveIdAllowOverlap = false;
+ }
+ else
+ {
+ // Uncommon path: items without ID
+ if (g.IO.MouseDown[mouse_button] == false || window->SkipItems)
+ return false;
+ if ((g.LastItemData.StatusFlags & ImGuiItemStatusFlags_HoveredRect) == 0 && (g.ActiveId == 0 || g.ActiveIdWindow != window))
+ return false;
+
+ // If you want to use BeginDragDropSource() on an item with no unique identifier for interaction, such as Text() or Image(), you need to:
+ // A) Read the explanation below, B) Use the ImGuiDragDropFlags_SourceAllowNullID flag.
+ if (!(flags & ImGuiDragDropFlags_SourceAllowNullID))
+ {
+ IM_ASSERT(0);
+ return false;
+ }
+
+ // Magic fallback to handle items with no assigned ID, e.g. Text(), Image()
+ // We build a throwaway ID based on current ID stack + relative AABB of items in window.
+ // THE IDENTIFIER WON'T SURVIVE ANY REPOSITIONING/RESIZINGG OF THE WIDGET, so if your widget moves your dragging operation will be canceled.
+ // We don't need to maintain/call ClearActiveID() as releasing the button will early out this function and trigger !ActiveIdIsAlive.
+ // Rely on keeping other window->LastItemXXX fields intact.
+ source_id = g.LastItemData.ID = window->GetIDFromRectangle(g.LastItemData.Rect);
+ KeepAliveID(source_id);
+ bool is_hovered = ItemHoverable(g.LastItemData.Rect, source_id);
+ if (is_hovered && g.IO.MouseClicked[mouse_button])
+ {
+ SetActiveID(source_id, window);
+ FocusWindow(window);
+ }
+ if (g.ActiveId == source_id) // Allow the underlying widget to display/return hovered during the mouse release frame, else we would get a flicker.
+ g.ActiveIdAllowOverlap = is_hovered;
+ }
+ if (g.ActiveId != source_id)
+ return false;
+ source_parent_id = window->IDStack.back();
+ source_drag_active = IsMouseDragging(mouse_button);
+
+ // Disable navigation and key inputs while dragging + cancel existing request if any
+ SetActiveIdUsingNavAndKeys();
+ }
+ else
+ {
+ window = NULL;
+ source_id = ImHashStr("#SourceExtern");
+ source_drag_active = true;
+ }
+
+ if (source_drag_active)
+ {
+ if (!g.DragDropActive)
+ {
+ IM_ASSERT(source_id != 0);
+ ClearDragDrop();
+ ImGuiPayload& payload = g.DragDropPayload;
+ payload.SourceId = source_id;
+ payload.SourceParentId = source_parent_id;
+ g.DragDropActive = true;
+ g.DragDropSourceFlags = flags;
+ g.DragDropMouseButton = mouse_button;
+ if (payload.SourceId == g.ActiveId)
+ g.ActiveIdNoClearOnFocusLoss = true;
+ }
+ g.DragDropSourceFrameCount = g.FrameCount;
+ g.DragDropWithinSource = true;
+
+ if (!(flags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
+ {
+ // Target can request the Source to not display its tooltip (we use a dedicated flag to make this request explicit)
+ // We unfortunately can't just modify the source flags and skip the call to BeginTooltip, as caller may be emitting contents.
+ BeginTooltip();
+ if (g.DragDropAcceptIdPrev && (g.DragDropAcceptFlags & ImGuiDragDropFlags_AcceptNoPreviewTooltip))
+ {
+ ImGuiWindow* tooltip_window = g.CurrentWindow;
+ tooltip_window->Hidden = tooltip_window->SkipItems = true;
+ tooltip_window->HiddenFramesCanSkipItems = 1;
+ }
+ }
+
+ if (!(flags & ImGuiDragDropFlags_SourceNoDisableHover) && !(flags & ImGuiDragDropFlags_SourceExtern))
+ g.LastItemData.StatusFlags &= ~ImGuiItemStatusFlags_HoveredRect;
+
+ return true;
+ }
+ return false;
+}
+
+void ImGui::EndDragDropSource()
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.DragDropActive);
+ IM_ASSERT(g.DragDropWithinSource && "Not after a BeginDragDropSource()?");
+
+ if (!(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoPreviewTooltip))
+ EndTooltip();
+
+ // Discard the drag if have not called SetDragDropPayload()
+ if (g.DragDropPayload.DataFrameCount == -1)
+ ClearDragDrop();
+ g.DragDropWithinSource = false;
+}
+
+// Use 'cond' to choose to submit payload on drag start or every frame
+bool ImGui::SetDragDropPayload(const char* type, const void* data, size_t data_size, ImGuiCond cond)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiPayload& payload = g.DragDropPayload;
+ if (cond == 0)
+ cond = ImGuiCond_Always;
+
+ IM_ASSERT(type != NULL);
+ IM_ASSERT(strlen(type) < IM_ARRAYSIZE(payload.DataType) && "Payload type can be at most 32 characters long");
+ IM_ASSERT((data != NULL && data_size > 0) || (data == NULL && data_size == 0));
+ IM_ASSERT(cond == ImGuiCond_Always || cond == ImGuiCond_Once);
+ IM_ASSERT(payload.SourceId != 0); // Not called between BeginDragDropSource() and EndDragDropSource()
+
+ if (cond == ImGuiCond_Always || payload.DataFrameCount == -1)
+ {
+ // Copy payload
+ ImStrncpy(payload.DataType, type, IM_ARRAYSIZE(payload.DataType));
+ g.DragDropPayloadBufHeap.resize(0);
+ if (data_size > sizeof(g.DragDropPayloadBufLocal))
+ {
+ // Store in heap
+ g.DragDropPayloadBufHeap.resize((int)data_size);
+ payload.Data = g.DragDropPayloadBufHeap.Data;
+ memcpy(payload.Data, data, data_size);
+ }
+ else if (data_size > 0)
+ {
+ // Store locally
+ memset(&g.DragDropPayloadBufLocal, 0, sizeof(g.DragDropPayloadBufLocal));
+ payload.Data = g.DragDropPayloadBufLocal;
+ memcpy(payload.Data, data, data_size);
+ }
+ else
+ {
+ payload.Data = NULL;
+ }
+ payload.DataSize = (int)data_size;
+ }
+ payload.DataFrameCount = g.FrameCount;
+
+ // Return whether the payload has been accepted
+ return (g.DragDropAcceptFrameCount == g.FrameCount) || (g.DragDropAcceptFrameCount == g.FrameCount - 1);
+}
+
+bool ImGui::BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ if (!g.DragDropActive)
+ return false;
+
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiWindow* hovered_window = g.HoveredWindowUnderMovingWindow;
+ if (hovered_window == NULL || window->RootWindow != hovered_window->RootWindow)
+ return false;
+ IM_ASSERT(id != 0);
+ if (!IsMouseHoveringRect(bb.Min, bb.Max) || (id == g.DragDropPayload.SourceId))
+ return false;
+ if (window->SkipItems)
+ return false;
+
+ IM_ASSERT(g.DragDropWithinTarget == false);
+ g.DragDropTargetRect = bb;
+ g.DragDropTargetId = id;
+ g.DragDropWithinTarget = true;
+ return true;
+}
+
+// We don't use BeginDragDropTargetCustom() and duplicate its code because:
+// 1) we use LastItemRectHoveredRect which handles items that pushes a temporarily clip rectangle in their code. Calling BeginDragDropTargetCustom(LastItemRect) would not handle them.
+// 2) and it's faster. as this code may be very frequently called, we want to early out as fast as we can.
+// Also note how the HoveredWindow test is positioned differently in both functions (in both functions we optimize for the cheapest early out case)
+bool ImGui::BeginDragDropTarget()
+{
+ ImGuiContext& g = *GImGui;
+ if (!g.DragDropActive)
+ return false;
+
+ ImGuiWindow* window = g.CurrentWindow;
+ if (!(g.LastItemData.StatusFlags & ImGuiItemStatusFlags_HoveredRect))
+ return false;
+ ImGuiWindow* hovered_window = g.HoveredWindowUnderMovingWindow;
+ if (hovered_window == NULL || window->RootWindow != hovered_window->RootWindow || window->SkipItems)
+ return false;
+
+ const ImRect& display_rect = (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_HasDisplayRect) ? g.LastItemData.DisplayRect : g.LastItemData.Rect;
+ ImGuiID id = g.LastItemData.ID;
+ if (id == 0)
+ {
+ id = window->GetIDFromRectangle(display_rect);
+ KeepAliveID(id);
+ }
+ if (g.DragDropPayload.SourceId == id)
+ return false;
+
+ IM_ASSERT(g.DragDropWithinTarget == false);
+ g.DragDropTargetRect = display_rect;
+ g.DragDropTargetId = id;
+ g.DragDropWithinTarget = true;
+ return true;
+}
+
+bool ImGui::IsDragDropPayloadBeingAccepted()
+{
+ ImGuiContext& g = *GImGui;
+ return g.DragDropActive && g.DragDropAcceptIdPrev != 0;
+}
+
+const ImGuiPayload* ImGui::AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiPayload& payload = g.DragDropPayload;
+ IM_ASSERT(g.DragDropActive); // Not called between BeginDragDropTarget() and EndDragDropTarget() ?
+ IM_ASSERT(payload.DataFrameCount != -1); // Forgot to call EndDragDropTarget() ?
+ if (type != NULL && !payload.IsDataType(type))
+ return NULL;
+
+ // Accept smallest drag target bounding box, this allows us to nest drag targets conveniently without ordering constraints.
+ // NB: We currently accept NULL id as target. However, overlapping targets requires a unique ID to function!
+ const bool was_accepted_previously = (g.DragDropAcceptIdPrev == g.DragDropTargetId);
+ ImRect r = g.DragDropTargetRect;
+ float r_surface = r.GetWidth() * r.GetHeight();
+ if (r_surface <= g.DragDropAcceptIdCurrRectSurface)
+ {
+ g.DragDropAcceptFlags = flags;
+ g.DragDropAcceptIdCurr = g.DragDropTargetId;
+ g.DragDropAcceptIdCurrRectSurface = r_surface;
+ }
+
+ // Render default drop visuals
+ // FIXME-DRAGDROP: Settle on a proper default visuals for drop target.
+ payload.Preview = was_accepted_previously;
+ flags |= (g.DragDropSourceFlags & ImGuiDragDropFlags_AcceptNoDrawDefaultRect); // Source can also inhibit the preview (useful for external sources that lives for 1 frame)
+ if (!(flags & ImGuiDragDropFlags_AcceptNoDrawDefaultRect) && payload.Preview)
+ window->DrawList->AddRect(r.Min - ImVec2(3.5f,3.5f), r.Max + ImVec2(3.5f, 3.5f), GetColorU32(ImGuiCol_DragDropTarget), 0.0f, 0, 2.0f);
+
+ g.DragDropAcceptFrameCount = g.FrameCount;
+ payload.Delivery = was_accepted_previously && !IsMouseDown(g.DragDropMouseButton); // For extern drag sources affecting os window focus, it's easier to just test !IsMouseDown() instead of IsMouseReleased()
+ if (!payload.Delivery && !(flags & ImGuiDragDropFlags_AcceptBeforeDelivery))
+ return NULL;
+
+ return &payload;
+}
+
+const ImGuiPayload* ImGui::GetDragDropPayload()
+{
+ ImGuiContext& g = *GImGui;
+ return g.DragDropActive ? &g.DragDropPayload : NULL;
+}
+
+// We don't really use/need this now, but added it for the sake of consistency and because we might need it later.
+void ImGui::EndDragDropTarget()
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.DragDropActive);
+ IM_ASSERT(g.DragDropWithinTarget);
+ g.DragDropWithinTarget = false;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] LOGGING/CAPTURING
+//-----------------------------------------------------------------------------
+// All text output from the interface can be captured into tty/file/clipboard.
+// By default, tree nodes are automatically opened during logging.
+//-----------------------------------------------------------------------------
+
+// Pass text data straight to log (without being displayed)
+static inline void LogTextV(ImGuiContext& g, const char* fmt, va_list args)
+{
+ if (g.LogFile)
+ {
+ g.LogBuffer.Buf.resize(0);
+ g.LogBuffer.appendfv(fmt, args);
+ ImFileWrite(g.LogBuffer.c_str(), sizeof(char), (ImU64)g.LogBuffer.size(), g.LogFile);
+ }
+ else
+ {
+ g.LogBuffer.appendfv(fmt, args);
+ }
+}
+
+void ImGui::LogText(const char* fmt, ...)
+{
+ ImGuiContext& g = *GImGui;
+ if (!g.LogEnabled)
+ return;
+
+ va_list args;
+ va_start(args, fmt);
+ LogTextV(g, fmt, args);
+ va_end(args);
+}
+
+void ImGui::LogTextV(const char* fmt, va_list args)
+{
+ ImGuiContext& g = *GImGui;
+ if (!g.LogEnabled)
+ return;
+
+ LogTextV(g, fmt, args);
+}
+
+// Internal version that takes a position to decide on newline placement and pad items according to their depth.
+// We split text into individual lines to add current tree level padding
+// FIXME: This code is a little complicated perhaps, considering simplifying the whole system.
+void ImGui::LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ const char* prefix = g.LogNextPrefix;
+ const char* suffix = g.LogNextSuffix;
+ g.LogNextPrefix = g.LogNextSuffix = NULL;
+
+ if (!text_end)
+ text_end = FindRenderedTextEnd(text, text_end);
+
+ const bool log_new_line = ref_pos && (ref_pos->y > g.LogLinePosY + g.Style.FramePadding.y + 1);
+ if (ref_pos)
+ g.LogLinePosY = ref_pos->y;
+ if (log_new_line)
+ {
+ LogText(IM_NEWLINE);
+ g.LogLineFirstItem = true;
+ }
+
+ if (prefix)
+ LogRenderedText(ref_pos, prefix, prefix + strlen(prefix)); // Calculate end ourself to ensure "##" are included here.
+
+ // Re-adjust padding if we have popped out of our starting depth
+ if (g.LogDepthRef > window->DC.TreeDepth)
+ g.LogDepthRef = window->DC.TreeDepth;
+ const int tree_depth = (window->DC.TreeDepth - g.LogDepthRef);
+
+ const char* text_remaining = text;
+ for (;;)
+ {
+ // Split the string. Each new line (after a '\n') is followed by indentation corresponding to the current depth of our log entry.
+ // We don't add a trailing \n yet to allow a subsequent item on the same line to be captured.
+ const char* line_start = text_remaining;
+ const char* line_end = ImStreolRange(line_start, text_end);
+ const bool is_last_line = (line_end == text_end);
+ if (line_start != line_end || !is_last_line)
+ {
+ const int line_length = (int)(line_end - line_start);
+ const int indentation = g.LogLineFirstItem ? tree_depth * 4 : 1;
+ LogText("%*s%.*s", indentation, "", line_length, line_start);
+ g.LogLineFirstItem = false;
+ if (*line_end == '\n')
+ {
+ LogText(IM_NEWLINE);
+ g.LogLineFirstItem = true;
+ }
+ }
+ if (is_last_line)
+ break;
+ text_remaining = line_end + 1;
+ }
+
+ if (suffix)
+ LogRenderedText(ref_pos, suffix, suffix + strlen(suffix));
+}
+
+// Start logging/capturing text output
+void ImGui::LogBegin(ImGuiLogType type, int auto_open_depth)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ IM_ASSERT(g.LogEnabled == false);
+ IM_ASSERT(g.LogFile == NULL);
+ IM_ASSERT(g.LogBuffer.empty());
+ g.LogEnabled = true;
+ g.LogType = type;
+ g.LogNextPrefix = g.LogNextSuffix = NULL;
+ g.LogDepthRef = window->DC.TreeDepth;
+ g.LogDepthToExpand = ((auto_open_depth >= 0) ? auto_open_depth : g.LogDepthToExpandDefault);
+ g.LogLinePosY = FLT_MAX;
+ g.LogLineFirstItem = true;
+}
+
+// Important: doesn't copy underlying data, use carefully (prefix/suffix must be in scope at the time of the next LogRenderedText)
+void ImGui::LogSetNextTextDecoration(const char* prefix, const char* suffix)
+{
+ ImGuiContext& g = *GImGui;
+ g.LogNextPrefix = prefix;
+ g.LogNextSuffix = suffix;
+}
+
+void ImGui::LogToTTY(int auto_open_depth)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.LogEnabled)
+ return;
+ IM_UNUSED(auto_open_depth);
+#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
+ LogBegin(ImGuiLogType_TTY, auto_open_depth);
+ g.LogFile = stdout;
+#endif
+}
+
+// Start logging/capturing text output to given file
+void ImGui::LogToFile(int auto_open_depth, const char* filename)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.LogEnabled)
+ return;
+
+ // FIXME: We could probably open the file in text mode "at", however note that clipboard/buffer logging will still
+ // be subject to outputting OS-incompatible carriage return if within strings the user doesn't use IM_NEWLINE.
+ // By opening the file in binary mode "ab" we have consistent output everywhere.
+ if (!filename)
+ filename = g.IO.LogFilename;
+ if (!filename || !filename[0])
+ return;
+ ImFileHandle f = ImFileOpen(filename, "ab");
+ if (!f)
+ {
+ IM_ASSERT(0);
+ return;
+ }
+
+ LogBegin(ImGuiLogType_File, auto_open_depth);
+ g.LogFile = f;
+}
+
+// Start logging/capturing text output to clipboard
+void ImGui::LogToClipboard(int auto_open_depth)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.LogEnabled)
+ return;
+ LogBegin(ImGuiLogType_Clipboard, auto_open_depth);
+}
+
+void ImGui::LogToBuffer(int auto_open_depth)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.LogEnabled)
+ return;
+ LogBegin(ImGuiLogType_Buffer, auto_open_depth);
+}
+
+void ImGui::LogFinish()
+{
+ ImGuiContext& g = *GImGui;
+ if (!g.LogEnabled)
+ return;
+
+ LogText(IM_NEWLINE);
+ switch (g.LogType)
+ {
+ case ImGuiLogType_TTY:
+#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
+ fflush(g.LogFile);
+#endif
+ break;
+ case ImGuiLogType_File:
+ ImFileClose(g.LogFile);
+ break;
+ case ImGuiLogType_Buffer:
+ break;
+ case ImGuiLogType_Clipboard:
+ if (!g.LogBuffer.empty())
+ SetClipboardText(g.LogBuffer.begin());
+ break;
+ case ImGuiLogType_None:
+ IM_ASSERT(0);
+ break;
+ }
+
+ g.LogEnabled = false;
+ g.LogType = ImGuiLogType_None;
+ g.LogFile = NULL;
+ g.LogBuffer.clear();
+}
+
+// Helper to display logging buttons
+// FIXME-OBSOLETE: We should probably obsolete this and let the user have their own helper (this is one of the oldest function alive!)
+void ImGui::LogButtons()
+{
+ ImGuiContext& g = *GImGui;
+
+ PushID("LogButtons");
+#ifndef IMGUI_DISABLE_TTY_FUNCTIONS
+ const bool log_to_tty = Button("Log To TTY"); SameLine();
+#else
+ const bool log_to_tty = false;
+#endif
+ const bool log_to_file = Button("Log To File"); SameLine();
+ const bool log_to_clipboard = Button("Log To Clipboard"); SameLine();
+ PushAllowKeyboardFocus(false);
+ SetNextItemWidth(80.0f);
+ SliderInt("Default Depth", &g.LogDepthToExpandDefault, 0, 9, NULL);
+ PopAllowKeyboardFocus();
+ PopID();
+
+ // Start logging at the end of the function so that the buttons don't appear in the log
+ if (log_to_tty)
+ LogToTTY();
+ if (log_to_file)
+ LogToFile();
+ if (log_to_clipboard)
+ LogToClipboard();
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] SETTINGS
+//-----------------------------------------------------------------------------
+// - UpdateSettings() [Internal]
+// - MarkIniSettingsDirty() [Internal]
+// - CreateNewWindowSettings() [Internal]
+// - FindWindowSettings() [Internal]
+// - FindOrCreateWindowSettings() [Internal]
+// - FindSettingsHandler() [Internal]
+// - ClearIniSettings() [Internal]
+// - LoadIniSettingsFromDisk()
+// - LoadIniSettingsFromMemory()
+// - SaveIniSettingsToDisk()
+// - SaveIniSettingsToMemory()
+// - WindowSettingsHandler_***() [Internal]
+//-----------------------------------------------------------------------------
+
+// Called by NewFrame()
+void ImGui::UpdateSettings()
+{
+ // Load settings on first frame (if not explicitly loaded manually before)
+ ImGuiContext& g = *GImGui;
+ if (!g.SettingsLoaded)
+ {
+ IM_ASSERT(g.SettingsWindows.empty());
+ if (g.IO.IniFilename)
+ LoadIniSettingsFromDisk(g.IO.IniFilename);
+ g.SettingsLoaded = true;
+ }
+
+ // Save settings (with a delay after the last modification, so we don't spam disk too much)
+ if (g.SettingsDirtyTimer > 0.0f)
+ {
+ g.SettingsDirtyTimer -= g.IO.DeltaTime;
+ if (g.SettingsDirtyTimer <= 0.0f)
+ {
+ if (g.IO.IniFilename != NULL)
+ SaveIniSettingsToDisk(g.IO.IniFilename);
+ else
+ g.IO.WantSaveIniSettings = true; // Let user know they can call SaveIniSettingsToMemory(). user will need to clear io.WantSaveIniSettings themselves.
+ g.SettingsDirtyTimer = 0.0f;
+ }
+ }
+}
+
+void ImGui::MarkIniSettingsDirty()
+{
+ ImGuiContext& g = *GImGui;
+ if (g.SettingsDirtyTimer <= 0.0f)
+ g.SettingsDirtyTimer = g.IO.IniSavingRate;
+}
+
+void ImGui::MarkIniSettingsDirty(ImGuiWindow* window)
+{
+ ImGuiContext& g = *GImGui;
+ if (!(window->Flags & ImGuiWindowFlags_NoSavedSettings))
+ if (g.SettingsDirtyTimer <= 0.0f)
+ g.SettingsDirtyTimer = g.IO.IniSavingRate;
+}
+
+ImGuiWindowSettings* ImGui::CreateNewWindowSettings(const char* name)
+{
+ ImGuiContext& g = *GImGui;
+
+#if !IMGUI_DEBUG_INI_SETTINGS
+ // Skip to the "###" marker if any. We don't skip past to match the behavior of GetID()
+ // Preserve the full string when IMGUI_DEBUG_INI_SETTINGS is set to make .ini inspection easier.
+ if (const char* p = strstr(name, "###"))
+ name = p;
+#endif
+ const size_t name_len = strlen(name);
+
+ // Allocate chunk
+ const size_t chunk_size = sizeof(ImGuiWindowSettings) + name_len + 1;
+ ImGuiWindowSettings* settings = g.SettingsWindows.alloc_chunk(chunk_size);
+ IM_PLACEMENT_NEW(settings) ImGuiWindowSettings();
+ settings->ID = ImHashStr(name, name_len);
+ memcpy(settings->GetName(), name, name_len + 1); // Store with zero terminator
+
+ return settings;
+}
+
+ImGuiWindowSettings* ImGui::FindWindowSettings(ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
+ if (settings->ID == id)
+ return settings;
+ return NULL;
+}
+
+ImGuiWindowSettings* ImGui::FindOrCreateWindowSettings(const char* name)
+{
+ if (ImGuiWindowSettings* settings = FindWindowSettings(ImHashStr(name)))
+ return settings;
+ return CreateNewWindowSettings(name);
+}
+
+void ImGui::AddSettingsHandler(const ImGuiSettingsHandler* handler)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(FindSettingsHandler(handler->TypeName) == NULL);
+ g.SettingsHandlers.push_back(*handler);
+}
+
+void ImGui::RemoveSettingsHandler(const char* type_name)
+{
+ ImGuiContext& g = *GImGui;
+ if (ImGuiSettingsHandler* handler = FindSettingsHandler(type_name))
+ g.SettingsHandlers.erase(handler);
+}
+
+ImGuiSettingsHandler* ImGui::FindSettingsHandler(const char* type_name)
+{
+ ImGuiContext& g = *GImGui;
+ const ImGuiID type_hash = ImHashStr(type_name);
+ for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
+ if (g.SettingsHandlers[handler_n].TypeHash == type_hash)
+ return &g.SettingsHandlers[handler_n];
+ return NULL;
+}
+
+void ImGui::ClearIniSettings()
+{
+ ImGuiContext& g = *GImGui;
+ g.SettingsIniData.clear();
+ for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
+ if (g.SettingsHandlers[handler_n].ClearAllFn)
+ g.SettingsHandlers[handler_n].ClearAllFn(&g, &g.SettingsHandlers[handler_n]);
+}
+
+void ImGui::LoadIniSettingsFromDisk(const char* ini_filename)
+{
+ size_t file_data_size = 0;
+ char* file_data = (char*)ImFileLoadToMemory(ini_filename, "rb", &file_data_size);
+ if (!file_data)
+ return;
+ if (file_data_size > 0)
+ LoadIniSettingsFromMemory(file_data, (size_t)file_data_size);
+ IM_FREE(file_data);
+}
+
+// Zero-tolerance, no error reporting, cheap .ini parsing
+void ImGui::LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.Initialized);
+ //IM_ASSERT(!g.WithinFrameScope && "Cannot be called between NewFrame() and EndFrame()");
+ //IM_ASSERT(g.SettingsLoaded == false && g.FrameCount == 0);
+
+ // For user convenience, we allow passing a non zero-terminated string (hence the ini_size parameter).
+ // For our convenience and to make the code simpler, we'll also write zero-terminators within the buffer. So let's create a writable copy..
+ if (ini_size == 0)
+ ini_size = strlen(ini_data);
+ g.SettingsIniData.Buf.resize((int)ini_size + 1);
+ char* const buf = g.SettingsIniData.Buf.Data;
+ char* const buf_end = buf + ini_size;
+ memcpy(buf, ini_data, ini_size);
+ buf_end[0] = 0;
+
+ // Call pre-read handlers
+ // Some types will clear their data (e.g. dock information) some types will allow merge/override (window)
+ for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
+ if (g.SettingsHandlers[handler_n].ReadInitFn)
+ g.SettingsHandlers[handler_n].ReadInitFn(&g, &g.SettingsHandlers[handler_n]);
+
+ void* entry_data = NULL;
+ ImGuiSettingsHandler* entry_handler = NULL;
+
+ char* line_end = NULL;
+ for (char* line = buf; line < buf_end; line = line_end + 1)
+ {
+ // Skip new lines markers, then find end of the line
+ while (*line == '\n' || *line == '\r')
+ line++;
+ line_end = line;
+ while (line_end < buf_end && *line_end != '\n' && *line_end != '\r')
+ line_end++;
+ line_end[0] = 0;
+ if (line[0] == ';')
+ continue;
+ if (line[0] == '[' && line_end > line && line_end[-1] == ']')
+ {
+ // Parse "[Type][Name]". Note that 'Name' can itself contains [] characters, which is acceptable with the current format and parsing code.
+ line_end[-1] = 0;
+ const char* name_end = line_end - 1;
+ const char* type_start = line + 1;
+ char* type_end = (char*)(void*)ImStrchrRange(type_start, name_end, ']');
+ const char* name_start = type_end ? ImStrchrRange(type_end + 1, name_end, '[') : NULL;
+ if (!type_end || !name_start)
+ continue;
+ *type_end = 0; // Overwrite first ']'
+ name_start++; // Skip second '['
+ entry_handler = FindSettingsHandler(type_start);
+ entry_data = entry_handler ? entry_handler->ReadOpenFn(&g, entry_handler, name_start) : NULL;
+ }
+ else if (entry_handler != NULL && entry_data != NULL)
+ {
+ // Let type handler parse the line
+ entry_handler->ReadLineFn(&g, entry_handler, entry_data, line);
+ }
+ }
+ g.SettingsLoaded = true;
+
+ // [DEBUG] Restore untouched copy so it can be browsed in Metrics (not strictly necessary)
+ memcpy(buf, ini_data, ini_size);
+
+ // Call post-read handlers
+ for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
+ if (g.SettingsHandlers[handler_n].ApplyAllFn)
+ g.SettingsHandlers[handler_n].ApplyAllFn(&g, &g.SettingsHandlers[handler_n]);
+}
+
+void ImGui::SaveIniSettingsToDisk(const char* ini_filename)
+{
+ ImGuiContext& g = *GImGui;
+ g.SettingsDirtyTimer = 0.0f;
+ if (!ini_filename)
+ return;
+
+ size_t ini_data_size = 0;
+ const char* ini_data = SaveIniSettingsToMemory(&ini_data_size);
+ ImFileHandle f = ImFileOpen(ini_filename, "wt");
+ if (!f)
+ return;
+ ImFileWrite(ini_data, sizeof(char), ini_data_size, f);
+ ImFileClose(f);
+}
+
+// Call registered handlers (e.g. SettingsHandlerWindow_WriteAll() + custom handlers) to write their stuff into a text buffer
+const char* ImGui::SaveIniSettingsToMemory(size_t* out_size)
+{
+ ImGuiContext& g = *GImGui;
+ g.SettingsDirtyTimer = 0.0f;
+ g.SettingsIniData.Buf.resize(0);
+ g.SettingsIniData.Buf.push_back(0);
+ for (int handler_n = 0; handler_n < g.SettingsHandlers.Size; handler_n++)
+ {
+ ImGuiSettingsHandler* handler = &g.SettingsHandlers[handler_n];
+ handler->WriteAllFn(&g, handler, &g.SettingsIniData);
+ }
+ if (out_size)
+ *out_size = (size_t)g.SettingsIniData.size();
+ return g.SettingsIniData.c_str();
+}
+
+static void WindowSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSettingsHandler*)
+{
+ ImGuiContext& g = *ctx;
+ for (int i = 0; i != g.Windows.Size; i++)
+ g.Windows[i]->SettingsOffset = -1;
+ g.SettingsWindows.clear();
+}
+
+static void* WindowSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name)
+{
+ ImGuiWindowSettings* settings = ImGui::FindOrCreateWindowSettings(name);
+ ImGuiID id = settings->ID;
+ *settings = ImGuiWindowSettings(); // Clear existing if recycling previous entry
+ settings->ID = id;
+ settings->WantApply = true;
+ return (void*)settings;
+}
+
+static void WindowSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line)
+{
+ ImGuiWindowSettings* settings = (ImGuiWindowSettings*)entry;
+ int x, y;
+ int i;
+ if (sscanf(line, "Pos=%i,%i", &x, &y) == 2) { settings->Pos = ImVec2ih((short)x, (short)y); }
+ else if (sscanf(line, "Size=%i,%i", &x, &y) == 2) { settings->Size = ImVec2ih((short)x, (short)y); }
+ else if (sscanf(line, "Collapsed=%d", &i) == 1) { settings->Collapsed = (i != 0); }
+}
+
+// Apply to existing windows (if any)
+static void WindowSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSettingsHandler*)
+{
+ ImGuiContext& g = *ctx;
+ for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
+ if (settings->WantApply)
+ {
+ if (ImGuiWindow* window = ImGui::FindWindowByID(settings->ID))
+ ApplyWindowSettings(window, settings);
+ settings->WantApply = false;
+ }
+}
+
+static void WindowSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* buf)
+{
+ // Gather data from windows that were active during this session
+ // (if a window wasn't opened in this session we preserve its settings)
+ ImGuiContext& g = *ctx;
+ for (int i = 0; i != g.Windows.Size; i++)
+ {
+ ImGuiWindow* window = g.Windows[i];
+ if (window->Flags & ImGuiWindowFlags_NoSavedSettings)
+ continue;
+
+ ImGuiWindowSettings* settings = (window->SettingsOffset != -1) ? g.SettingsWindows.ptr_from_offset(window->SettingsOffset) : ImGui::FindWindowSettings(window->ID);
+ if (!settings)
+ {
+ settings = ImGui::CreateNewWindowSettings(window->Name);
+ window->SettingsOffset = g.SettingsWindows.offset_from_ptr(settings);
+ }
+ IM_ASSERT(settings->ID == window->ID);
+ settings->Pos = ImVec2ih(window->Pos);
+ settings->Size = ImVec2ih(window->SizeFull);
+
+ settings->Collapsed = window->Collapsed;
+ }
+
+ // Write to text buffer
+ buf->reserve(buf->size() + g.SettingsWindows.size() * 6); // ballpark reserve
+ for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
+ {
+ const char* settings_name = settings->GetName();
+ buf->appendf("[%s][%s]\n", handler->TypeName, settings_name);
+ buf->appendf("Pos=%d,%d\n", settings->Pos.x, settings->Pos.y);
+ buf->appendf("Size=%d,%d\n", settings->Size.x, settings->Size.y);
+ buf->appendf("Collapsed=%d\n", settings->Collapsed);
+ buf->append("\n");
+ }
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] VIEWPORTS, PLATFORM WINDOWS
+//-----------------------------------------------------------------------------
+// - GetMainViewport()
+// - SetWindowViewport() [Internal]
+// - UpdateViewportsNewFrame() [Internal]
+// (this section is more complete in the 'docking' branch)
+//-----------------------------------------------------------------------------
+
+ImGuiViewport* ImGui::GetMainViewport()
+{
+ ImGuiContext& g = *GImGui;
+ return g.Viewports[0];
+}
+
+void ImGui::SetWindowViewport(ImGuiWindow* window, ImGuiViewportP* viewport)
+{
+ window->Viewport = viewport;
+}
+
+// Update viewports and monitor infos
+static void ImGui::UpdateViewportsNewFrame()
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(g.Viewports.Size == 1);
+
+ // Update main viewport with current platform position.
+ // FIXME-VIEWPORT: Size is driven by backend/user code for backward-compatibility but we should aim to make this more consistent.
+ ImGuiViewportP* main_viewport = g.Viewports[0];
+ main_viewport->Flags = ImGuiViewportFlags_IsPlatformWindow | ImGuiViewportFlags_OwnedByApp;
+ main_viewport->Pos = ImVec2(0.0f, 0.0f);
+ main_viewport->Size = g.IO.DisplaySize;
+
+ for (int n = 0; n < g.Viewports.Size; n++)
+ {
+ ImGuiViewportP* viewport = g.Viewports[n];
+
+ // Lock down space taken by menu bars and status bars, reset the offset for fucntions like BeginMainMenuBar() to alter them again.
+ viewport->WorkOffsetMin = viewport->BuildWorkOffsetMin;
+ viewport->WorkOffsetMax = viewport->BuildWorkOffsetMax;
+ viewport->BuildWorkOffsetMin = viewport->BuildWorkOffsetMax = ImVec2(0.0f, 0.0f);
+ viewport->UpdateWorkRect();
+ }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] DOCKING
+//-----------------------------------------------------------------------------
+
+// (this section is filled in the 'docking' branch)
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] PLATFORM DEPENDENT HELPERS
+//-----------------------------------------------------------------------------
+
+#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS)
+
+#ifdef _MSC_VER
+#pragma comment(lib, "user32")
+#pragma comment(lib, "kernel32")
+#endif
+
+// Win32 clipboard implementation
+// We use g.ClipboardHandlerData for temporary storage to ensure it is freed on Shutdown()
+static const char* GetClipboardTextFn_DefaultImpl(void*)
+{
+ ImGuiContext& g = *GImGui;
+ g.ClipboardHandlerData.clear();
+ if (!::OpenClipboard(NULL))
+ return NULL;
+ HANDLE wbuf_handle = ::GetClipboardData(CF_UNICODETEXT);
+ if (wbuf_handle == NULL)
+ {
+ ::CloseClipboard();
+ return NULL;
+ }
+ if (const WCHAR* wbuf_global = (const WCHAR*)::GlobalLock(wbuf_handle))
+ {
+ int buf_len = ::WideCharToMultiByte(CP_UTF8, 0, wbuf_global, -1, NULL, 0, NULL, NULL);
+ g.ClipboardHandlerData.resize(buf_len);
+ ::WideCharToMultiByte(CP_UTF8, 0, wbuf_global, -1, g.ClipboardHandlerData.Data, buf_len, NULL, NULL);
+ }
+ ::GlobalUnlock(wbuf_handle);
+ ::CloseClipboard();
+ return g.ClipboardHandlerData.Data;
+}
+
+static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
+{
+ if (!::OpenClipboard(NULL))
+ return;
+ const int wbuf_length = ::MultiByteToWideChar(CP_UTF8, 0, text, -1, NULL, 0);
+ HGLOBAL wbuf_handle = ::GlobalAlloc(GMEM_MOVEABLE, (SIZE_T)wbuf_length * sizeof(WCHAR));
+ if (wbuf_handle == NULL)
+ {
+ ::CloseClipboard();
+ return;
+ }
+ WCHAR* wbuf_global = (WCHAR*)::GlobalLock(wbuf_handle);
+ ::MultiByteToWideChar(CP_UTF8, 0, text, -1, wbuf_global, wbuf_length);
+ ::GlobalUnlock(wbuf_handle);
+ ::EmptyClipboard();
+ if (::SetClipboardData(CF_UNICODETEXT, wbuf_handle) == NULL)
+ ::GlobalFree(wbuf_handle);
+ ::CloseClipboard();
+}
+
+#elif defined(__APPLE__) && TARGET_OS_OSX && defined(IMGUI_ENABLE_OSX_DEFAULT_CLIPBOARD_FUNCTIONS)
+
+#include <Carbon/Carbon.h> // Use old API to avoid need for separate .mm file
+static PasteboardRef main_clipboard = 0;
+
+// OSX clipboard implementation
+// If you enable this you will need to add '-framework ApplicationServices' to your linker command-line!
+static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
+{
+ if (!main_clipboard)
+ PasteboardCreate(kPasteboardClipboard, &main_clipboard);
+ PasteboardClear(main_clipboard);
+ CFDataRef cf_data = CFDataCreate(kCFAllocatorDefault, (const UInt8*)text, strlen(text));
+ if (cf_data)
+ {
+ PasteboardPutItemFlavor(main_clipboard, (PasteboardItemID)1, CFSTR("public.utf8-plain-text"), cf_data, 0);
+ CFRelease(cf_data);
+ }
+}
+
+static const char* GetClipboardTextFn_DefaultImpl(void*)
+{
+ if (!main_clipboard)
+ PasteboardCreate(kPasteboardClipboard, &main_clipboard);
+ PasteboardSynchronize(main_clipboard);
+
+ ItemCount item_count = 0;
+ PasteboardGetItemCount(main_clipboard, &item_count);
+ for (ItemCount i = 0; i < item_count; i++)
+ {
+ PasteboardItemID item_id = 0;
+ PasteboardGetItemIdentifier(main_clipboard, i + 1, &item_id);
+ CFArrayRef flavor_type_array = 0;
+ PasteboardCopyItemFlavors(main_clipboard, item_id, &flavor_type_array);
+ for (CFIndex j = 0, nj = CFArrayGetCount(flavor_type_array); j < nj; j++)
+ {
+ CFDataRef cf_data;
+ if (PasteboardCopyItemFlavorData(main_clipboard, item_id, CFSTR("public.utf8-plain-text"), &cf_data) == noErr)
+ {
+ ImGuiContext& g = *GImGui;
+ g.ClipboardHandlerData.clear();
+ int length = (int)CFDataGetLength(cf_data);
+ g.ClipboardHandlerData.resize(length + 1);
+ CFDataGetBytes(cf_data, CFRangeMake(0, length), (UInt8*)g.ClipboardHandlerData.Data);
+ g.ClipboardHandlerData[length] = 0;
+ CFRelease(cf_data);
+ return g.ClipboardHandlerData.Data;
+ }
+ }
+ }
+ return NULL;
+}
+
+#else
+
+// Local Dear ImGui-only clipboard implementation, if user hasn't defined better clipboard handlers.
+static const char* GetClipboardTextFn_DefaultImpl(void*)
+{
+ ImGuiContext& g = *GImGui;
+ return g.ClipboardHandlerData.empty() ? NULL : g.ClipboardHandlerData.begin();
+}
+
+static void SetClipboardTextFn_DefaultImpl(void*, const char* text)
+{
+ ImGuiContext& g = *GImGui;
+ g.ClipboardHandlerData.clear();
+ const char* text_end = text + strlen(text);
+ g.ClipboardHandlerData.resize((int)(text_end - text) + 1);
+ memcpy(&g.ClipboardHandlerData[0], text, (size_t)(text_end - text));
+ g.ClipboardHandlerData[(int)(text_end - text)] = 0;
+}
+
+#endif
+
+// Win32 API IME support (for Asian languages, etc.)
+#if defined(_WIN32) && !defined(IMGUI_DISABLE_WIN32_FUNCTIONS) && !defined(IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS)
+
+#include <imm.h>
+#ifdef _MSC_VER
+#pragma comment(lib, "imm32")
+#endif
+
+static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport* viewport, ImGuiPlatformImeData* data)
+{
+ // Notify OS Input Method Editor of text input position
+ HWND hwnd = (HWND)viewport->PlatformHandleRaw;
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ if (hwnd == 0)
+ hwnd = (HWND)ImGui::GetIO().ImeWindowHandle;
+#endif
+ if (hwnd == 0)
+ return;
+
+ ::ImmAssociateContextEx(hwnd, NULL, data->WantVisible ? IACE_DEFAULT : 0);
+
+ if (HIMC himc = ::ImmGetContext(hwnd))
+ {
+ COMPOSITIONFORM composition_form = {};
+ composition_form.ptCurrentPos.x = (LONG)data->InputPos.x;
+ composition_form.ptCurrentPos.y = (LONG)data->InputPos.y;
+ composition_form.dwStyle = CFS_FORCE_POSITION;
+ ::ImmSetCompositionWindow(himc, &composition_form);
+ CANDIDATEFORM candidate_form = {};
+ candidate_form.dwStyle = CFS_CANDIDATEPOS;
+ candidate_form.ptCurrentPos.x = (LONG)data->InputPos.x;
+ candidate_form.ptCurrentPos.y = (LONG)data->InputPos.y;
+ ::ImmSetCandidateWindow(himc, &candidate_form);
+ ::ImmReleaseContext(hwnd, himc);
+ }
+}
+
+#else
+
+static void SetPlatformImeDataFn_DefaultImpl(ImGuiViewport*, ImGuiPlatformImeData*) {}
+
+#endif
+
+//-----------------------------------------------------------------------------
+// [SECTION] METRICS/DEBUGGER WINDOW
+//-----------------------------------------------------------------------------
+// - RenderViewportThumbnail() [Internal]
+// - RenderViewportsThumbnails() [Internal]
+// - DebugTextEncoding()
+// - MetricsHelpMarker() [Internal]
+// - ShowFontAtlas() [Internal]
+// - ShowMetricsWindow()
+// - DebugNodeColumns() [Internal]
+// - DebugNodeDrawList() [Internal]
+// - DebugNodeDrawCmdShowMeshAndBoundingBox() [Internal]
+// - DebugNodeFont() [Internal]
+// - DebugNodeFontGlyph() [Internal]
+// - DebugNodeStorage() [Internal]
+// - DebugNodeTabBar() [Internal]
+// - DebugNodeViewport() [Internal]
+// - DebugNodeWindow() [Internal]
+// - DebugNodeWindowSettings() [Internal]
+// - DebugNodeWindowsList() [Internal]
+// - DebugNodeWindowsListByBeginStackParent() [Internal]
+//-----------------------------------------------------------------------------
+
+#ifndef IMGUI_DISABLE_DEBUG_TOOLS
+
+void ImGui::DebugRenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewport, const ImRect& bb)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ ImVec2 scale = bb.GetSize() / viewport->Size;
+ ImVec2 off = bb.Min - viewport->Pos * scale;
+ float alpha_mul = 1.0f;
+ window->DrawList->AddRectFilled(bb.Min, bb.Max, GetColorU32(ImGuiCol_Border, alpha_mul * 0.40f));
+ for (int i = 0; i != g.Windows.Size; i++)
+ {
+ ImGuiWindow* thumb_window = g.Windows[i];
+ if (!thumb_window->WasActive || (thumb_window->Flags & ImGuiWindowFlags_ChildWindow))
+ continue;
+
+ ImRect thumb_r = thumb_window->Rect();
+ ImRect title_r = thumb_window->TitleBarRect();
+ thumb_r = ImRect(ImFloor(off + thumb_r.Min * scale), ImFloor(off + thumb_r.Max * scale));
+ title_r = ImRect(ImFloor(off + title_r.Min * scale), ImFloor(off + ImVec2(title_r.Max.x, title_r.Min.y) * scale) + ImVec2(0,5)); // Exaggerate title bar height
+ thumb_r.ClipWithFull(bb);
+ title_r.ClipWithFull(bb);
+ const bool window_is_focused = (g.NavWindow && thumb_window->RootWindowForTitleBarHighlight == g.NavWindow->RootWindowForTitleBarHighlight);
+ window->DrawList->AddRectFilled(thumb_r.Min, thumb_r.Max, GetColorU32(ImGuiCol_WindowBg, alpha_mul));
+ window->DrawList->AddRectFilled(title_r.Min, title_r.Max, GetColorU32(window_is_focused ? ImGuiCol_TitleBgActive : ImGuiCol_TitleBg, alpha_mul));
+ window->DrawList->AddRect(thumb_r.Min, thumb_r.Max, GetColorU32(ImGuiCol_Border, alpha_mul));
+ window->DrawList->AddText(g.Font, g.FontSize * 1.0f, title_r.Min, GetColorU32(ImGuiCol_Text, alpha_mul), thumb_window->Name, FindRenderedTextEnd(thumb_window->Name));
+ }
+ draw_list->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_Border, alpha_mul));
+}
+
+static void RenderViewportsThumbnails()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ // We don't display full monitor bounds (we could, but it often looks awkward), instead we display just enough to cover all of our viewports.
+ float SCALE = 1.0f / 8.0f;
+ ImRect bb_full(FLT_MAX, FLT_MAX, -FLT_MAX, -FLT_MAX);
+ for (int n = 0; n < g.Viewports.Size; n++)
+ bb_full.Add(g.Viewports[n]->GetMainRect());
+ ImVec2 p = window->DC.CursorPos;
+ ImVec2 off = p - bb_full.Min * SCALE;
+ for (int n = 0; n < g.Viewports.Size; n++)
+ {
+ ImGuiViewportP* viewport = g.Viewports[n];
+ ImRect viewport_draw_bb(off + (viewport->Pos) * SCALE, off + (viewport->Pos + viewport->Size) * SCALE);
+ ImGui::DebugRenderViewportThumbnail(window->DrawList, viewport, viewport_draw_bb);
+ }
+ ImGui::Dummy(bb_full.GetSize() * SCALE);
+}
+
+// Helper tool to diagnose between text encoding issues and font loading issues. Pass your UTF-8 string and verify that there are correct.
+void ImGui::DebugTextEncoding(const char* str)
+{
+ Text("Text: \"%s\"", str);
+ if (!BeginTable("list", 4, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_SizingFixedFit))
+ return;
+ TableSetupColumn("Offset");
+ TableSetupColumn("UTF-8");
+ TableSetupColumn("Glyph");
+ TableSetupColumn("Codepoint");
+ TableHeadersRow();
+ for (const char* p = str; *p != 0; )
+ {
+ unsigned int c;
+ const int c_utf8_len = ImTextCharFromUtf8(&c, p, NULL);
+ TableNextColumn();
+ Text("%d", (int)(p - str));
+ TableNextColumn();
+ for (int byte_index = 0; byte_index < c_utf8_len; byte_index++)
+ {
+ if (byte_index > 0)
+ SameLine();
+ Text("0x%02X", (int)(unsigned char)p[byte_index]);
+ }
+ TableNextColumn();
+ if (GetFont()->FindGlyphNoFallback((ImWchar)c))
+ TextUnformatted(p, p + c_utf8_len);
+ else
+ TextUnformatted((c == IM_UNICODE_CODEPOINT_INVALID) ? "[invalid]" : "[missing]");
+ TableNextColumn();
+ Text("U+%04X", (int)c);
+ p += c_utf8_len;
+ }
+ EndTable();
+}
+
+// Avoid naming collision with imgui_demo.cpp's HelpMarker() for unity builds.
+static void MetricsHelpMarker(const char* desc)
+{
+ ImGui::TextDisabled("(?)");
+ if (ImGui::IsItemHovered())
+ {
+ ImGui::BeginTooltip();
+ ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
+ ImGui::TextUnformatted(desc);
+ ImGui::PopTextWrapPos();
+ ImGui::EndTooltip();
+ }
+}
+
+// [DEBUG] List fonts in a font atlas and display its texture
+void ImGui::ShowFontAtlas(ImFontAtlas* atlas)
+{
+ for (int i = 0; i < atlas->Fonts.Size; i++)
+ {
+ ImFont* font = atlas->Fonts[i];
+ PushID(font);
+ DebugNodeFont(font);
+ PopID();
+ }
+ if (TreeNode("Atlas texture", "Atlas texture (%dx%d pixels)", atlas->TexWidth, atlas->TexHeight))
+ {
+ ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f);
+ ImVec4 border_col = ImVec4(1.0f, 1.0f, 1.0f, 0.5f);
+ Image(atlas->TexID, ImVec2((float)atlas->TexWidth, (float)atlas->TexHeight), ImVec2(0.0f, 0.0f), ImVec2(1.0f, 1.0f), tint_col, border_col);
+ TreePop();
+ }
+}
+
+void ImGui::ShowMetricsWindow(bool* p_open)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiIO& io = g.IO;
+ ImGuiMetricsConfig* cfg = &g.DebugMetricsConfig;
+ if (cfg->ShowDebugLog)
+ ShowDebugLogWindow(&cfg->ShowDebugLog);
+ if (cfg->ShowStackTool)
+ ShowStackToolWindow(&cfg->ShowStackTool);
+
+ if (!Begin("Dear ImGui Metrics/Debugger", p_open) || GetCurrentWindow()->BeginCount > 1)
+ {
+ End();
+ return;
+ }
+
+ // Basic info
+ Text("Dear ImGui %s", GetVersion());
+ Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
+ Text("%d vertices, %d indices (%d triangles)", io.MetricsRenderVertices, io.MetricsRenderIndices, io.MetricsRenderIndices / 3);
+ Text("%d visible windows, %d active allocations", io.MetricsRenderWindows, io.MetricsActiveAllocations);
+ //SameLine(); if (SmallButton("GC")) { g.GcCompactAll = true; }
+
+ Separator();
+
+ // Debugging enums
+ enum { WRT_OuterRect, WRT_OuterRectClipped, WRT_InnerRect, WRT_InnerClipRect, WRT_WorkRect, WRT_Content, WRT_ContentIdeal, WRT_ContentRegionRect, WRT_Count }; // Windows Rect Type
+ const char* wrt_rects_names[WRT_Count] = { "OuterRect", "OuterRectClipped", "InnerRect", "InnerClipRect", "WorkRect", "Content", "ContentIdeal", "ContentRegionRect" };
+ enum { TRT_OuterRect, TRT_InnerRect, TRT_WorkRect, TRT_HostClipRect, TRT_InnerClipRect, TRT_BackgroundClipRect, TRT_ColumnsRect, TRT_ColumnsWorkRect, TRT_ColumnsClipRect, TRT_ColumnsContentHeadersUsed, TRT_ColumnsContentHeadersIdeal, TRT_ColumnsContentFrozen, TRT_ColumnsContentUnfrozen, TRT_Count }; // Tables Rect Type
+ const char* trt_rects_names[TRT_Count] = { "OuterRect", "InnerRect", "WorkRect", "HostClipRect", "InnerClipRect", "BackgroundClipRect", "ColumnsRect", "ColumnsWorkRect", "ColumnsClipRect", "ColumnsContentHeadersUsed", "ColumnsContentHeadersIdeal", "ColumnsContentFrozen", "ColumnsContentUnfrozen" };
+ if (cfg->ShowWindowsRectsType < 0)
+ cfg->ShowWindowsRectsType = WRT_WorkRect;
+ if (cfg->ShowTablesRectsType < 0)
+ cfg->ShowTablesRectsType = TRT_WorkRect;
+
+ struct Funcs
+ {
+ static ImRect GetTableRect(ImGuiTable* table, int rect_type, int n)
+ {
+ ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent); // Always using last submitted instance
+ if (rect_type == TRT_OuterRect) { return table->OuterRect; }
+ else if (rect_type == TRT_InnerRect) { return table->InnerRect; }
+ else if (rect_type == TRT_WorkRect) { return table->WorkRect; }
+ else if (rect_type == TRT_HostClipRect) { return table->HostClipRect; }
+ else if (rect_type == TRT_InnerClipRect) { return table->InnerClipRect; }
+ else if (rect_type == TRT_BackgroundClipRect) { return table->BgClipRect; }
+ else if (rect_type == TRT_ColumnsRect) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->MinX, table->InnerClipRect.Min.y, c->MaxX, table->InnerClipRect.Min.y + table_instance->LastOuterHeight); }
+ else if (rect_type == TRT_ColumnsWorkRect) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->WorkRect.Min.y, c->WorkMaxX, table->WorkRect.Max.y); }
+ else if (rect_type == TRT_ColumnsClipRect) { ImGuiTableColumn* c = &table->Columns[n]; return c->ClipRect; }
+ else if (rect_type == TRT_ColumnsContentHeadersUsed){ ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y, c->ContentMaxXHeadersUsed, table->InnerClipRect.Min.y + table_instance->LastFirstRowHeight); } // Note: y1/y2 not always accurate
+ else if (rect_type == TRT_ColumnsContentHeadersIdeal){ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y, c->ContentMaxXHeadersIdeal, table->InnerClipRect.Min.y + table_instance->LastFirstRowHeight); }
+ else if (rect_type == TRT_ColumnsContentFrozen) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y, c->ContentMaxXFrozen, table->InnerClipRect.Min.y + table_instance->LastFirstRowHeight); }
+ else if (rect_type == TRT_ColumnsContentUnfrozen) { ImGuiTableColumn* c = &table->Columns[n]; return ImRect(c->WorkMinX, table->InnerClipRect.Min.y + table_instance->LastFirstRowHeight, c->ContentMaxXUnfrozen, table->InnerClipRect.Max.y); }
+ IM_ASSERT(0);
+ return ImRect();
+ }
+
+ static ImRect GetWindowRect(ImGuiWindow* window, int rect_type)
+ {
+ if (rect_type == WRT_OuterRect) { return window->Rect(); }
+ else if (rect_type == WRT_OuterRectClipped) { return window->OuterRectClipped; }
+ else if (rect_type == WRT_InnerRect) { return window->InnerRect; }
+ else if (rect_type == WRT_InnerClipRect) { return window->InnerClipRect; }
+ else if (rect_type == WRT_WorkRect) { return window->WorkRect; }
+ else if (rect_type == WRT_Content) { ImVec2 min = window->InnerRect.Min - window->Scroll + window->WindowPadding; return ImRect(min, min + window->ContentSize); }
+ else if (rect_type == WRT_ContentIdeal) { ImVec2 min = window->InnerRect.Min - window->Scroll + window->WindowPadding; return ImRect(min, min + window->ContentSizeIdeal); }
+ else if (rect_type == WRT_ContentRegionRect) { return window->ContentRegionRect; }
+ IM_ASSERT(0);
+ return ImRect();
+ }
+ };
+
+ // Tools
+ if (TreeNode("Tools"))
+ {
+ bool show_encoding_viewer = TreeNode("UTF-8 Encoding viewer");
+ SameLine();
+ MetricsHelpMarker("You can also call ImGui::DebugTextEncoding() from your code with a given string to test that your UTF-8 encoding settings are correct.");
+ if (show_encoding_viewer)
+ {
+ static char buf[100] = "";
+ SetNextItemWidth(-FLT_MIN);
+ InputText("##Text", buf, IM_ARRAYSIZE(buf));
+ if (buf[0] != 0)
+ DebugTextEncoding(buf);
+ TreePop();
+ }
+
+ // The Item Picker tool is super useful to visually select an item and break into the call-stack of where it was submitted.
+ if (Checkbox("Show Item Picker", &g.DebugItemPickerActive) && g.DebugItemPickerActive)
+ DebugStartItemPicker();
+ SameLine();
+ MetricsHelpMarker("Will call the IM_DEBUG_BREAK() macro to break in debugger.\nWarning: If you don't have a debugger attached, this will probably crash.");
+
+ // Stack Tool is your best friend!
+ Checkbox("Show Debug Log", &cfg->ShowDebugLog);
+ SameLine();
+ MetricsHelpMarker("You can also call ImGui::ShowDebugLogWindow() from your code.");
+
+ // Stack Tool is your best friend!
+ Checkbox("Show Stack Tool", &cfg->ShowStackTool);
+ SameLine();
+ MetricsHelpMarker("You can also call ImGui::ShowStackToolWindow() from your code.");
+
+ Checkbox("Show windows begin order", &cfg->ShowWindowsBeginOrder);
+ Checkbox("Show windows rectangles", &cfg->ShowWindowsRects);
+ SameLine();
+ SetNextItemWidth(GetFontSize() * 12);
+ cfg->ShowWindowsRects |= Combo("##show_windows_rect_type", &cfg->ShowWindowsRectsType, wrt_rects_names, WRT_Count, WRT_Count);
+ if (cfg->ShowWindowsRects && g.NavWindow != NULL)
+ {
+ BulletText("'%s':", g.NavWindow->Name);
+ Indent();
+ for (int rect_n = 0; rect_n < WRT_Count; rect_n++)
+ {
+ ImRect r = Funcs::GetWindowRect(g.NavWindow, rect_n);
+ Text("(%6.1f,%6.1f) (%6.1f,%6.1f) Size (%6.1f,%6.1f) %s", r.Min.x, r.Min.y, r.Max.x, r.Max.y, r.GetWidth(), r.GetHeight(), wrt_rects_names[rect_n]);
+ }
+ Unindent();
+ }
+
+ Checkbox("Show tables rectangles", &cfg->ShowTablesRects);
+ SameLine();
+ SetNextItemWidth(GetFontSize() * 12);
+ cfg->ShowTablesRects |= Combo("##show_table_rects_type", &cfg->ShowTablesRectsType, trt_rects_names, TRT_Count, TRT_Count);
+ if (cfg->ShowTablesRects && g.NavWindow != NULL)
+ {
+ for (int table_n = 0; table_n < g.Tables.GetMapSize(); table_n++)
+ {
+ ImGuiTable* table = g.Tables.TryGetMapData(table_n);
+ if (table == NULL || table->LastFrameActive < g.FrameCount - 1 || (table->OuterWindow != g.NavWindow && table->InnerWindow != g.NavWindow))
+ continue;
+
+ BulletText("Table 0x%08X (%d columns, in '%s')", table->ID, table->ColumnsCount, table->OuterWindow->Name);
+ if (IsItemHovered())
+ GetForegroundDrawList()->AddRect(table->OuterRect.Min - ImVec2(1, 1), table->OuterRect.Max + ImVec2(1, 1), IM_COL32(255, 255, 0, 255), 0.0f, 0, 2.0f);
+ Indent();
+ char buf[128];
+ for (int rect_n = 0; rect_n < TRT_Count; rect_n++)
+ {
+ if (rect_n >= TRT_ColumnsRect)
+ {
+ if (rect_n != TRT_ColumnsRect && rect_n != TRT_ColumnsClipRect)
+ continue;
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ ImRect r = Funcs::GetTableRect(table, rect_n, column_n);
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "(%6.1f,%6.1f) (%6.1f,%6.1f) Size (%6.1f,%6.1f) Col %d %s", r.Min.x, r.Min.y, r.Max.x, r.Max.y, r.GetWidth(), r.GetHeight(), column_n, trt_rects_names[rect_n]);
+ Selectable(buf);
+ if (IsItemHovered())
+ GetForegroundDrawList()->AddRect(r.Min - ImVec2(1, 1), r.Max + ImVec2(1, 1), IM_COL32(255, 255, 0, 255), 0.0f, 0, 2.0f);
+ }
+ }
+ else
+ {
+ ImRect r = Funcs::GetTableRect(table, rect_n, -1);
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "(%6.1f,%6.1f) (%6.1f,%6.1f) Size (%6.1f,%6.1f) %s", r.Min.x, r.Min.y, r.Max.x, r.Max.y, r.GetWidth(), r.GetHeight(), trt_rects_names[rect_n]);
+ Selectable(buf);
+ if (IsItemHovered())
+ GetForegroundDrawList()->AddRect(r.Min - ImVec2(1, 1), r.Max + ImVec2(1, 1), IM_COL32(255, 255, 0, 255), 0.0f, 0, 2.0f);
+ }
+ }
+ Unindent();
+ }
+ }
+
+ TreePop();
+ }
+
+ // Windows
+ if (TreeNode("Windows", "Windows (%d)", g.Windows.Size))
+ {
+ //SetNextItemOpen(true, ImGuiCond_Once);
+ DebugNodeWindowsList(&g.Windows, "By display order");
+ DebugNodeWindowsList(&g.WindowsFocusOrder, "By focus order (root windows)");
+ if (TreeNode("By submission order (begin stack)"))
+ {
+ // Here we display windows in their submitted order/hierarchy, however note that the Begin stack doesn't constitute a Parent<>Child relationship!
+ ImVector<ImGuiWindow*>& temp_buffer = g.WindowsTempSortBuffer;
+ temp_buffer.resize(0);
+ for (int i = 0; i < g.Windows.Size; i++)
+ if (g.Windows[i]->LastFrameActive + 1 >= g.FrameCount)
+ temp_buffer.push_back(g.Windows[i]);
+ struct Func { static int IMGUI_CDECL WindowComparerByBeginOrder(const void* lhs, const void* rhs) { return ((int)(*(const ImGuiWindow* const *)lhs)->BeginOrderWithinContext - (*(const ImGuiWindow* const*)rhs)->BeginOrderWithinContext); } };
+ ImQsort(temp_buffer.Data, (size_t)temp_buffer.Size, sizeof(ImGuiWindow*), Func::WindowComparerByBeginOrder);
+ DebugNodeWindowsListByBeginStackParent(temp_buffer.Data, temp_buffer.Size, NULL);
+ TreePop();
+ }
+
+ TreePop();
+ }
+
+ // DrawLists
+ int drawlist_count = 0;
+ for (int viewport_i = 0; viewport_i < g.Viewports.Size; viewport_i++)
+ drawlist_count += g.Viewports[viewport_i]->DrawDataBuilder.GetDrawListCount();
+ if (TreeNode("DrawLists", "DrawLists (%d)", drawlist_count))
+ {
+ Checkbox("Show ImDrawCmd mesh when hovering", &cfg->ShowDrawCmdMesh);
+ Checkbox("Show ImDrawCmd bounding boxes when hovering", &cfg->ShowDrawCmdBoundingBoxes);
+ for (int viewport_i = 0; viewport_i < g.Viewports.Size; viewport_i++)
+ {
+ ImGuiViewportP* viewport = g.Viewports[viewport_i];
+ for (int layer_i = 0; layer_i < IM_ARRAYSIZE(viewport->DrawDataBuilder.Layers); layer_i++)
+ for (int draw_list_i = 0; draw_list_i < viewport->DrawDataBuilder.Layers[layer_i].Size; draw_list_i++)
+ DebugNodeDrawList(NULL, viewport->DrawDataBuilder.Layers[layer_i][draw_list_i], "DrawList");
+ }
+ TreePop();
+ }
+
+ // Viewports
+ if (TreeNode("Viewports", "Viewports (%d)", g.Viewports.Size))
+ {
+ Indent(GetTreeNodeToLabelSpacing());
+ RenderViewportsThumbnails();
+ Unindent(GetTreeNodeToLabelSpacing());
+ for (int i = 0; i < g.Viewports.Size; i++)
+ DebugNodeViewport(g.Viewports[i]);
+ TreePop();
+ }
+
+ // Details for Popups
+ if (TreeNode("Popups", "Popups (%d)", g.OpenPopupStack.Size))
+ {
+ for (int i = 0; i < g.OpenPopupStack.Size; i++)
+ {
+ ImGuiWindow* window = g.OpenPopupStack[i].Window;
+ BulletText("PopupID: %08x, Window: '%s'%s%s", g.OpenPopupStack[i].PopupId, window ? window->Name : "NULL", window && (window->Flags & ImGuiWindowFlags_ChildWindow) ? " ChildWindow" : "", window && (window->Flags & ImGuiWindowFlags_ChildMenu) ? " ChildMenu" : "");
+ }
+ TreePop();
+ }
+
+ // Details for TabBars
+ if (TreeNode("TabBars", "Tab Bars (%d)", g.TabBars.GetAliveCount()))
+ {
+ for (int n = 0; n < g.TabBars.GetMapSize(); n++)
+ if (ImGuiTabBar* tab_bar = g.TabBars.TryGetMapData(n))
+ {
+ PushID(tab_bar);
+ DebugNodeTabBar(tab_bar, "TabBar");
+ PopID();
+ }
+ TreePop();
+ }
+
+ // Details for Tables
+ if (TreeNode("Tables", "Tables (%d)", g.Tables.GetAliveCount()))
+ {
+ for (int n = 0; n < g.Tables.GetMapSize(); n++)
+ if (ImGuiTable* table = g.Tables.TryGetMapData(n))
+ DebugNodeTable(table);
+ TreePop();
+ }
+
+ // Details for Fonts
+ ImFontAtlas* atlas = g.IO.Fonts;
+ if (TreeNode("Fonts", "Fonts (%d)", atlas->Fonts.Size))
+ {
+ ShowFontAtlas(atlas);
+ TreePop();
+ }
+
+ // Details for InputText
+ if (TreeNode("InputText"))
+ {
+ DebugNodeInputTextState(&g.InputTextState);
+ TreePop();
+ }
+
+ // Details for Docking
+#ifdef IMGUI_HAS_DOCK
+ if (TreeNode("Docking"))
+ {
+ TreePop();
+ }
+#endif // #ifdef IMGUI_HAS_DOCK
+
+ // Settings
+ if (TreeNode("Settings"))
+ {
+ if (SmallButton("Clear"))
+ ClearIniSettings();
+ SameLine();
+ if (SmallButton("Save to memory"))
+ SaveIniSettingsToMemory();
+ SameLine();
+ if (SmallButton("Save to disk"))
+ SaveIniSettingsToDisk(g.IO.IniFilename);
+ SameLine();
+ if (g.IO.IniFilename)
+ Text("\"%s\"", g.IO.IniFilename);
+ else
+ TextUnformatted("<NULL>");
+ Text("SettingsDirtyTimer %.2f", g.SettingsDirtyTimer);
+ if (TreeNode("SettingsHandlers", "Settings handlers: (%d)", g.SettingsHandlers.Size))
+ {
+ for (int n = 0; n < g.SettingsHandlers.Size; n++)
+ BulletText("%s", g.SettingsHandlers[n].TypeName);
+ TreePop();
+ }
+ if (TreeNode("SettingsWindows", "Settings packed data: Windows: %d bytes", g.SettingsWindows.size()))
+ {
+ for (ImGuiWindowSettings* settings = g.SettingsWindows.begin(); settings != NULL; settings = g.SettingsWindows.next_chunk(settings))
+ DebugNodeWindowSettings(settings);
+ TreePop();
+ }
+
+ if (TreeNode("SettingsTables", "Settings packed data: Tables: %d bytes", g.SettingsTables.size()))
+ {
+ for (ImGuiTableSettings* settings = g.SettingsTables.begin(); settings != NULL; settings = g.SettingsTables.next_chunk(settings))
+ DebugNodeTableSettings(settings);
+ TreePop();
+ }
+
+#ifdef IMGUI_HAS_DOCK
+#endif // #ifdef IMGUI_HAS_DOCK
+
+ if (TreeNode("SettingsIniData", "Settings unpacked data (.ini): %d bytes", g.SettingsIniData.size()))
+ {
+ InputTextMultiline("##Ini", (char*)(void*)g.SettingsIniData.c_str(), g.SettingsIniData.Buf.Size, ImVec2(-FLT_MIN, GetTextLineHeight() * 20), ImGuiInputTextFlags_ReadOnly);
+ TreePop();
+ }
+ TreePop();
+ }
+
+ // Misc Details
+ if (TreeNode("Internal state"))
+ {
+ Text("WINDOWING");
+ Indent();
+ Text("HoveredWindow: '%s'", g.HoveredWindow ? g.HoveredWindow->Name : "NULL");
+ Text("HoveredWindow->Root: '%s'", g.HoveredWindow ? g.HoveredWindow->RootWindow->Name : "NULL");
+ Text("HoveredWindowUnderMovingWindow: '%s'", g.HoveredWindowUnderMovingWindow ? g.HoveredWindowUnderMovingWindow->Name : "NULL");
+ Text("MovingWindow: '%s'", g.MovingWindow ? g.MovingWindow->Name : "NULL");
+ Unindent();
+
+ Text("ITEMS");
+ Indent();
+ Text("ActiveId: 0x%08X/0x%08X (%.2f sec), AllowOverlap: %d, Source: %s", g.ActiveId, g.ActiveIdPreviousFrame, g.ActiveIdTimer, g.ActiveIdAllowOverlap, GetInputSourceName(g.ActiveIdSource));
+ Text("ActiveIdWindow: '%s'", g.ActiveIdWindow ? g.ActiveIdWindow->Name : "NULL");
+
+ int active_id_using_key_input_count = 0;
+ for (int n = ImGuiKey_NamedKey_BEGIN; n < ImGuiKey_NamedKey_END; n++)
+ active_id_using_key_input_count += g.ActiveIdUsingKeyInputMask[n] ? 1 : 0;
+ Text("ActiveIdUsing: Wheel: %d, NavDirMask: %X, NavInputMask: %X, KeyInputMask: %d key(s)", g.ActiveIdUsingMouseWheel, g.ActiveIdUsingNavDirMask, g.ActiveIdUsingNavInputMask, active_id_using_key_input_count);
+ Text("HoveredId: 0x%08X (%.2f sec), AllowOverlap: %d", g.HoveredIdPreviousFrame, g.HoveredIdTimer, g.HoveredIdAllowOverlap); // Not displaying g.HoveredId as it is update mid-frame
+ Text("DragDrop: %d, SourceId = 0x%08X, Payload \"%s\" (%d bytes)", g.DragDropActive, g.DragDropPayload.SourceId, g.DragDropPayload.DataType, g.DragDropPayload.DataSize);
+ Unindent();
+
+ Text("NAV,FOCUS");
+ Indent();
+ Text("NavWindow: '%s'", g.NavWindow ? g.NavWindow->Name : "NULL");
+ Text("NavId: 0x%08X, NavLayer: %d", g.NavId, g.NavLayer);
+ Text("NavInputSource: %s", GetInputSourceName(g.NavInputSource));
+ Text("NavActive: %d, NavVisible: %d", g.IO.NavActive, g.IO.NavVisible);
+ Text("NavActivateId/DownId/PressedId/InputId: %08X/%08X/%08X/%08X", g.NavActivateId, g.NavActivateDownId, g.NavActivatePressedId, g.NavActivateInputId);
+ Text("NavActivateFlags: %04X", g.NavActivateFlags);
+ Text("NavDisableHighlight: %d, NavDisableMouseHover: %d", g.NavDisableHighlight, g.NavDisableMouseHover);
+ Text("NavFocusScopeId = 0x%08X", g.NavFocusScopeId);
+ Text("NavWindowingTarget: '%s'", g.NavWindowingTarget ? g.NavWindowingTarget->Name : "NULL");
+ Unindent();
+
+ TreePop();
+ }
+
+ // Overlay: Display windows Rectangles and Begin Order
+ if (cfg->ShowWindowsRects || cfg->ShowWindowsBeginOrder)
+ {
+ for (int n = 0; n < g.Windows.Size; n++)
+ {
+ ImGuiWindow* window = g.Windows[n];
+ if (!window->WasActive)
+ continue;
+ ImDrawList* draw_list = GetForegroundDrawList(window);
+ if (cfg->ShowWindowsRects)
+ {
+ ImRect r = Funcs::GetWindowRect(window, cfg->ShowWindowsRectsType);
+ draw_list->AddRect(r.Min, r.Max, IM_COL32(255, 0, 128, 255));
+ }
+ if (cfg->ShowWindowsBeginOrder && !(window->Flags & ImGuiWindowFlags_ChildWindow))
+ {
+ char buf[32];
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "%d", window->BeginOrderWithinContext);
+ float font_size = GetFontSize();
+ draw_list->AddRectFilled(window->Pos, window->Pos + ImVec2(font_size, font_size), IM_COL32(200, 100, 100, 255));
+ draw_list->AddText(window->Pos, IM_COL32(255, 255, 255, 255), buf);
+ }
+ }
+ }
+
+ // Overlay: Display Tables Rectangles
+ if (cfg->ShowTablesRects)
+ {
+ for (int table_n = 0; table_n < g.Tables.GetMapSize(); table_n++)
+ {
+ ImGuiTable* table = g.Tables.TryGetMapData(table_n);
+ if (table == NULL || table->LastFrameActive < g.FrameCount - 1)
+ continue;
+ ImDrawList* draw_list = GetForegroundDrawList(table->OuterWindow);
+ if (cfg->ShowTablesRectsType >= TRT_ColumnsRect)
+ {
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ ImRect r = Funcs::GetTableRect(table, cfg->ShowTablesRectsType, column_n);
+ ImU32 col = (table->HoveredColumnBody == column_n) ? IM_COL32(255, 255, 128, 255) : IM_COL32(255, 0, 128, 255);
+ float thickness = (table->HoveredColumnBody == column_n) ? 3.0f : 1.0f;
+ draw_list->AddRect(r.Min, r.Max, col, 0.0f, 0, thickness);
+ }
+ }
+ else
+ {
+ ImRect r = Funcs::GetTableRect(table, cfg->ShowTablesRectsType, -1);
+ draw_list->AddRect(r.Min, r.Max, IM_COL32(255, 0, 128, 255));
+ }
+ }
+ }
+
+#ifdef IMGUI_HAS_DOCK
+ // Overlay: Display Docking info
+ if (show_docking_nodes && g.IO.KeyCtrl)
+ {
+ }
+#endif // #ifdef IMGUI_HAS_DOCK
+
+ End();
+}
+
+// [DEBUG] Display contents of Columns
+void ImGui::DebugNodeColumns(ImGuiOldColumns* columns)
+{
+ if (!TreeNode((void*)(uintptr_t)columns->ID, "Columns Id: 0x%08X, Count: %d, Flags: 0x%04X", columns->ID, columns->Count, columns->Flags))
+ return;
+ BulletText("Width: %.1f (MinX: %.1f, MaxX: %.1f)", columns->OffMaxX - columns->OffMinX, columns->OffMinX, columns->OffMaxX);
+ for (int column_n = 0; column_n < columns->Columns.Size; column_n++)
+ BulletText("Column %02d: OffsetNorm %.3f (= %.1f px)", column_n, columns->Columns[column_n].OffsetNorm, GetColumnOffsetFromNorm(columns, columns->Columns[column_n].OffsetNorm));
+ TreePop();
+}
+
+// [DEBUG] Display contents of ImDrawList
+void ImGui::DebugNodeDrawList(ImGuiWindow* window, const ImDrawList* draw_list, const char* label)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiMetricsConfig* cfg = &g.DebugMetricsConfig;
+ int cmd_count = draw_list->CmdBuffer.Size;
+ if (cmd_count > 0 && draw_list->CmdBuffer.back().ElemCount == 0 && draw_list->CmdBuffer.back().UserCallback == NULL)
+ cmd_count--;
+ bool node_open = TreeNode(draw_list, "%s: '%s' %d vtx, %d indices, %d cmds", label, draw_list->_OwnerName ? draw_list->_OwnerName : "", draw_list->VtxBuffer.Size, draw_list->IdxBuffer.Size, cmd_count);
+ if (draw_list == GetWindowDrawList())
+ {
+ SameLine();
+ TextColored(ImVec4(1.0f, 0.4f, 0.4f, 1.0f), "CURRENTLY APPENDING"); // Can't display stats for active draw list! (we don't have the data double-buffered)
+ if (node_open)
+ TreePop();
+ return;
+ }
+
+ ImDrawList* fg_draw_list = GetForegroundDrawList(window); // Render additional visuals into the top-most draw list
+ if (window && IsItemHovered() && fg_draw_list)
+ fg_draw_list->AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255, 255, 0, 255));
+ if (!node_open)
+ return;
+
+ if (window && !window->WasActive)
+ TextDisabled("Warning: owning Window is inactive. This DrawList is not being rendered!");
+
+ for (const ImDrawCmd* pcmd = draw_list->CmdBuffer.Data; pcmd < draw_list->CmdBuffer.Data + cmd_count; pcmd++)
+ {
+ if (pcmd->UserCallback)
+ {
+ BulletText("Callback %p, user_data %p", pcmd->UserCallback, pcmd->UserCallbackData);
+ continue;
+ }
+
+ char buf[300];
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "DrawCmd:%5d tris, Tex 0x%p, ClipRect (%4.0f,%4.0f)-(%4.0f,%4.0f)",
+ pcmd->ElemCount / 3, (void*)(intptr_t)pcmd->TextureId,
+ pcmd->ClipRect.x, pcmd->ClipRect.y, pcmd->ClipRect.z, pcmd->ClipRect.w);
+ bool pcmd_node_open = TreeNode((void*)(pcmd - draw_list->CmdBuffer.begin()), "%s", buf);
+ if (IsItemHovered() && (cfg->ShowDrawCmdMesh || cfg->ShowDrawCmdBoundingBoxes) && fg_draw_list)
+ DebugNodeDrawCmdShowMeshAndBoundingBox(fg_draw_list, draw_list, pcmd, cfg->ShowDrawCmdMesh, cfg->ShowDrawCmdBoundingBoxes);
+ if (!pcmd_node_open)
+ continue;
+
+ // Calculate approximate coverage area (touched pixel count)
+ // This will be in pixels squared as long there's no post-scaling happening to the renderer output.
+ const ImDrawIdx* idx_buffer = (draw_list->IdxBuffer.Size > 0) ? draw_list->IdxBuffer.Data : NULL;
+ const ImDrawVert* vtx_buffer = draw_list->VtxBuffer.Data + pcmd->VtxOffset;
+ float total_area = 0.0f;
+ for (unsigned int idx_n = pcmd->IdxOffset; idx_n < pcmd->IdxOffset + pcmd->ElemCount; )
+ {
+ ImVec2 triangle[3];
+ for (int n = 0; n < 3; n++, idx_n++)
+ triangle[n] = vtx_buffer[idx_buffer ? idx_buffer[idx_n] : idx_n].pos;
+ total_area += ImTriangleArea(triangle[0], triangle[1], triangle[2]);
+ }
+
+ // Display vertex information summary. Hover to get all triangles drawn in wire-frame
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "Mesh: ElemCount: %d, VtxOffset: +%d, IdxOffset: +%d, Area: ~%0.f px", pcmd->ElemCount, pcmd->VtxOffset, pcmd->IdxOffset, total_area);
+ Selectable(buf);
+ if (IsItemHovered() && fg_draw_list)
+ DebugNodeDrawCmdShowMeshAndBoundingBox(fg_draw_list, draw_list, pcmd, true, false);
+
+ // Display individual triangles/vertices. Hover on to get the corresponding triangle highlighted.
+ ImGuiListClipper clipper;
+ clipper.Begin(pcmd->ElemCount / 3); // Manually coarse clip our print out of individual vertices to save CPU, only items that may be visible.
+ while (clipper.Step())
+ for (int prim = clipper.DisplayStart, idx_i = pcmd->IdxOffset + clipper.DisplayStart * 3; prim < clipper.DisplayEnd; prim++)
+ {
+ char* buf_p = buf, * buf_end = buf + IM_ARRAYSIZE(buf);
+ ImVec2 triangle[3];
+ for (int n = 0; n < 3; n++, idx_i++)
+ {
+ const ImDrawVert& v = vtx_buffer[idx_buffer ? idx_buffer[idx_i] : idx_i];
+ triangle[n] = v.pos;
+ buf_p += ImFormatString(buf_p, buf_end - buf_p, "%s %04d: pos (%8.2f,%8.2f), uv (%.6f,%.6f), col %08X\n",
+ (n == 0) ? "Vert:" : " ", idx_i, v.pos.x, v.pos.y, v.uv.x, v.uv.y, v.col);
+ }
+
+ Selectable(buf, false);
+ if (fg_draw_list && IsItemHovered())
+ {
+ ImDrawListFlags backup_flags = fg_draw_list->Flags;
+ fg_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines is more readable for very large and thin triangles.
+ fg_draw_list->AddPolyline(triangle, 3, IM_COL32(255, 255, 0, 255), ImDrawFlags_Closed, 1.0f);
+ fg_draw_list->Flags = backup_flags;
+ }
+ }
+ TreePop();
+ }
+ TreePop();
+}
+
+// [DEBUG] Display mesh/aabb of a ImDrawCmd
+void ImGui::DebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList* out_draw_list, const ImDrawList* draw_list, const ImDrawCmd* draw_cmd, bool show_mesh, bool show_aabb)
+{
+ IM_ASSERT(show_mesh || show_aabb);
+
+ // Draw wire-frame version of all triangles
+ ImRect clip_rect = draw_cmd->ClipRect;
+ ImRect vtxs_rect(FLT_MAX, FLT_MAX, -FLT_MAX, -FLT_MAX);
+ ImDrawListFlags backup_flags = out_draw_list->Flags;
+ out_draw_list->Flags &= ~ImDrawListFlags_AntiAliasedLines; // Disable AA on triangle outlines is more readable for very large and thin triangles.
+ for (unsigned int idx_n = draw_cmd->IdxOffset, idx_end = draw_cmd->IdxOffset + draw_cmd->ElemCount; idx_n < idx_end; )
+ {
+ ImDrawIdx* idx_buffer = (draw_list->IdxBuffer.Size > 0) ? draw_list->IdxBuffer.Data : NULL; // We don't hold on those pointers past iterations as ->AddPolyline() may invalidate them if out_draw_list==draw_list
+ ImDrawVert* vtx_buffer = draw_list->VtxBuffer.Data + draw_cmd->VtxOffset;
+
+ ImVec2 triangle[3];
+ for (int n = 0; n < 3; n++, idx_n++)
+ vtxs_rect.Add((triangle[n] = vtx_buffer[idx_buffer ? idx_buffer[idx_n] : idx_n].pos));
+ if (show_mesh)
+ out_draw_list->AddPolyline(triangle, 3, IM_COL32(255, 255, 0, 255), ImDrawFlags_Closed, 1.0f); // In yellow: mesh triangles
+ }
+ // Draw bounding boxes
+ if (show_aabb)
+ {
+ out_draw_list->AddRect(ImFloor(clip_rect.Min), ImFloor(clip_rect.Max), IM_COL32(255, 0, 255, 255)); // In pink: clipping rectangle submitted to GPU
+ out_draw_list->AddRect(ImFloor(vtxs_rect.Min), ImFloor(vtxs_rect.Max), IM_COL32(0, 255, 255, 255)); // In cyan: bounding box of triangles
+ }
+ out_draw_list->Flags = backup_flags;
+}
+
+// [DEBUG] Display details for a single font, called by ShowStyleEditor().
+void ImGui::DebugNodeFont(ImFont* font)
+{
+ bool opened = TreeNode(font, "Font: \"%s\"\n%.2f px, %d glyphs, %d file(s)",
+ font->ConfigData ? font->ConfigData[0].Name : "", font->FontSize, font->Glyphs.Size, font->ConfigDataCount);
+ SameLine();
+ if (SmallButton("Set as default"))
+ GetIO().FontDefault = font;
+ if (!opened)
+ return;
+
+ // Display preview text
+ PushFont(font);
+ Text("The quick brown fox jumps over the lazy dog");
+ PopFont();
+
+ // Display details
+ SetNextItemWidth(GetFontSize() * 8);
+ DragFloat("Font scale", &font->Scale, 0.005f, 0.3f, 2.0f, "%.1f");
+ SameLine(); MetricsHelpMarker(
+ "Note than the default embedded font is NOT meant to be scaled.\n\n"
+ "Font are currently rendered into bitmaps at a given size at the time of building the atlas. "
+ "You may oversample them to get some flexibility with scaling. "
+ "You can also render at multiple sizes and select which one to use at runtime.\n\n"
+ "(Glimmer of hope: the atlas system will be rewritten in the future to make scaling more flexible.)");
+ Text("Ascent: %f, Descent: %f, Height: %f", font->Ascent, font->Descent, font->Ascent - font->Descent);
+ char c_str[5];
+ Text("Fallback character: '%s' (U+%04X)", ImTextCharToUtf8(c_str, font->FallbackChar), font->FallbackChar);
+ Text("Ellipsis character: '%s' (U+%04X)", ImTextCharToUtf8(c_str, font->EllipsisChar), font->EllipsisChar);
+ const int surface_sqrt = (int)ImSqrt((float)font->MetricsTotalSurface);
+ Text("Texture Area: about %d px ~%dx%d px", font->MetricsTotalSurface, surface_sqrt, surface_sqrt);
+ for (int config_i = 0; config_i < font->ConfigDataCount; config_i++)
+ if (font->ConfigData)
+ if (const ImFontConfig* cfg = &font->ConfigData[config_i])
+ BulletText("Input %d: \'%s\', Oversample: (%d,%d), PixelSnapH: %d, Offset: (%.1f,%.1f)",
+ config_i, cfg->Name, cfg->OversampleH, cfg->OversampleV, cfg->PixelSnapH, cfg->GlyphOffset.x, cfg->GlyphOffset.y);
+
+ // Display all glyphs of the fonts in separate pages of 256 characters
+ if (TreeNode("Glyphs", "Glyphs (%d)", font->Glyphs.Size))
+ {
+ ImDrawList* draw_list = GetWindowDrawList();
+ const ImU32 glyph_col = GetColorU32(ImGuiCol_Text);
+ const float cell_size = font->FontSize * 1;
+ const float cell_spacing = GetStyle().ItemSpacing.y;
+ for (unsigned int base = 0; base <= IM_UNICODE_CODEPOINT_MAX; base += 256)
+ {
+ // Skip ahead if a large bunch of glyphs are not present in the font (test in chunks of 4k)
+ // This is only a small optimization to reduce the number of iterations when IM_UNICODE_MAX_CODEPOINT
+ // is large // (if ImWchar==ImWchar32 we will do at least about 272 queries here)
+ if (!(base & 4095) && font->IsGlyphRangeUnused(base, base + 4095))
+ {
+ base += 4096 - 256;
+ continue;
+ }
+
+ int count = 0;
+ for (unsigned int n = 0; n < 256; n++)
+ if (font->FindGlyphNoFallback((ImWchar)(base + n)))
+ count++;
+ if (count <= 0)
+ continue;
+ if (!TreeNode((void*)(intptr_t)base, "U+%04X..U+%04X (%d %s)", base, base + 255, count, count > 1 ? "glyphs" : "glyph"))
+ continue;
+
+ // Draw a 16x16 grid of glyphs
+ ImVec2 base_pos = GetCursorScreenPos();
+ for (unsigned int n = 0; n < 256; n++)
+ {
+ // We use ImFont::RenderChar as a shortcut because we don't have UTF-8 conversion functions
+ // available here and thus cannot easily generate a zero-terminated UTF-8 encoded string.
+ ImVec2 cell_p1(base_pos.x + (n % 16) * (cell_size + cell_spacing), base_pos.y + (n / 16) * (cell_size + cell_spacing));
+ ImVec2 cell_p2(cell_p1.x + cell_size, cell_p1.y + cell_size);
+ const ImFontGlyph* glyph = font->FindGlyphNoFallback((ImWchar)(base + n));
+ draw_list->AddRect(cell_p1, cell_p2, glyph ? IM_COL32(255, 255, 255, 100) : IM_COL32(255, 255, 255, 50));
+ if (!glyph)
+ continue;
+ font->RenderChar(draw_list, cell_size, cell_p1, glyph_col, (ImWchar)(base + n));
+ if (IsMouseHoveringRect(cell_p1, cell_p2))
+ {
+ BeginTooltip();
+ DebugNodeFontGlyph(font, glyph);
+ EndTooltip();
+ }
+ }
+ Dummy(ImVec2((cell_size + cell_spacing) * 16, (cell_size + cell_spacing) * 16));
+ TreePop();
+ }
+ TreePop();
+ }
+ TreePop();
+}
+
+void ImGui::DebugNodeFontGlyph(ImFont*, const ImFontGlyph* glyph)
+{
+ Text("Codepoint: U+%04X", glyph->Codepoint);
+ Separator();
+ Text("Visible: %d", glyph->Visible);
+ Text("AdvanceX: %.1f", glyph->AdvanceX);
+ Text("Pos: (%.2f,%.2f)->(%.2f,%.2f)", glyph->X0, glyph->Y0, glyph->X1, glyph->Y1);
+ Text("UV: (%.3f,%.3f)->(%.3f,%.3f)", glyph->U0, glyph->V0, glyph->U1, glyph->V1);
+}
+
+// [DEBUG] Display contents of ImGuiStorage
+void ImGui::DebugNodeStorage(ImGuiStorage* storage, const char* label)
+{
+ if (!TreeNode(label, "%s: %d entries, %d bytes", label, storage->Data.Size, storage->Data.size_in_bytes()))
+ return;
+ for (int n = 0; n < storage->Data.Size; n++)
+ {
+ const ImGuiStorage::ImGuiStoragePair& p = storage->Data[n];
+ BulletText("Key 0x%08X Value { i: %d }", p.key, p.val_i); // Important: we currently don't store a type, real value may not be integer.
+ }
+ TreePop();
+}
+
+// [DEBUG] Display contents of ImGuiTabBar
+void ImGui::DebugNodeTabBar(ImGuiTabBar* tab_bar, const char* label)
+{
+ // Standalone tab bars (not associated to docking/windows functionality) currently hold no discernible strings.
+ char buf[256];
+ char* p = buf;
+ const char* buf_end = buf + IM_ARRAYSIZE(buf);
+ const bool is_active = (tab_bar->PrevFrameVisible >= GetFrameCount() - 2);
+ p += ImFormatString(p, buf_end - p, "%s 0x%08X (%d tabs)%s", label, tab_bar->ID, tab_bar->Tabs.Size, is_active ? "" : " *Inactive*");
+ p += ImFormatString(p, buf_end - p, " { ");
+ for (int tab_n = 0; tab_n < ImMin(tab_bar->Tabs.Size, 3); tab_n++)
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+ p += ImFormatString(p, buf_end - p, "%s'%s'",
+ tab_n > 0 ? ", " : "", (tab->NameOffset != -1) ? tab_bar->GetTabName(tab) : "???");
+ }
+ p += ImFormatString(p, buf_end - p, (tab_bar->Tabs.Size > 3) ? " ... }" : " } ");
+ if (!is_active) { PushStyleColor(ImGuiCol_Text, GetStyleColorVec4(ImGuiCol_TextDisabled)); }
+ bool open = TreeNode(label, "%s", buf);
+ if (!is_active) { PopStyleColor(); }
+ if (is_active && IsItemHovered())
+ {
+ ImDrawList* draw_list = GetForegroundDrawList();
+ draw_list->AddRect(tab_bar->BarRect.Min, tab_bar->BarRect.Max, IM_COL32(255, 255, 0, 255));
+ draw_list->AddLine(ImVec2(tab_bar->ScrollingRectMinX, tab_bar->BarRect.Min.y), ImVec2(tab_bar->ScrollingRectMinX, tab_bar->BarRect.Max.y), IM_COL32(0, 255, 0, 255));
+ draw_list->AddLine(ImVec2(tab_bar->ScrollingRectMaxX, tab_bar->BarRect.Min.y), ImVec2(tab_bar->ScrollingRectMaxX, tab_bar->BarRect.Max.y), IM_COL32(0, 255, 0, 255));
+ }
+ if (open)
+ {
+ for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+ {
+ const ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+ PushID(tab);
+ if (SmallButton("<")) { TabBarQueueReorder(tab_bar, tab, -1); } SameLine(0, 2);
+ if (SmallButton(">")) { TabBarQueueReorder(tab_bar, tab, +1); } SameLine();
+ Text("%02d%c Tab 0x%08X '%s' Offset: %.1f, Width: %.1f/%.1f",
+ tab_n, (tab->ID == tab_bar->SelectedTabId) ? '*' : ' ', tab->ID, (tab->NameOffset != -1) ? tab_bar->GetTabName(tab) : "???", tab->Offset, tab->Width, tab->ContentWidth);
+ PopID();
+ }
+ TreePop();
+ }
+}
+
+void ImGui::DebugNodeViewport(ImGuiViewportP* viewport)
+{
+ SetNextItemOpen(true, ImGuiCond_Once);
+ if (TreeNode("viewport0", "Viewport #%d", 0))
+ {
+ ImGuiWindowFlags flags = viewport->Flags;
+ BulletText("Main Pos: (%.0f,%.0f), Size: (%.0f,%.0f)\nWorkArea Offset Left: %.0f Top: %.0f, Right: %.0f, Bottom: %.0f",
+ viewport->Pos.x, viewport->Pos.y, viewport->Size.x, viewport->Size.y,
+ viewport->WorkOffsetMin.x, viewport->WorkOffsetMin.y, viewport->WorkOffsetMax.x, viewport->WorkOffsetMax.y);
+ BulletText("Flags: 0x%04X =%s%s%s", viewport->Flags,
+ (flags & ImGuiViewportFlags_IsPlatformWindow) ? " IsPlatformWindow" : "",
+ (flags & ImGuiViewportFlags_IsPlatformMonitor) ? " IsPlatformMonitor" : "",
+ (flags & ImGuiViewportFlags_OwnedByApp) ? " OwnedByApp" : "");
+ for (int layer_i = 0; layer_i < IM_ARRAYSIZE(viewport->DrawDataBuilder.Layers); layer_i++)
+ for (int draw_list_i = 0; draw_list_i < viewport->DrawDataBuilder.Layers[layer_i].Size; draw_list_i++)
+ DebugNodeDrawList(NULL, viewport->DrawDataBuilder.Layers[layer_i][draw_list_i], "DrawList");
+ TreePop();
+ }
+}
+
+void ImGui::DebugNodeWindow(ImGuiWindow* window, const char* label)
+{
+ if (window == NULL)
+ {
+ BulletText("%s: NULL", label);
+ return;
+ }
+
+ ImGuiContext& g = *GImGui;
+ const bool is_active = window->WasActive;
+ ImGuiTreeNodeFlags tree_node_flags = (window == g.NavWindow) ? ImGuiTreeNodeFlags_Selected : ImGuiTreeNodeFlags_None;
+ if (!is_active) { PushStyleColor(ImGuiCol_Text, GetStyleColorVec4(ImGuiCol_TextDisabled)); }
+ const bool open = TreeNodeEx(label, tree_node_flags, "%s '%s'%s", label, window->Name, is_active ? "" : " *Inactive*");
+ if (!is_active) { PopStyleColor(); }
+ if (IsItemHovered() && is_active)
+ GetForegroundDrawList(window)->AddRect(window->Pos, window->Pos + window->Size, IM_COL32(255, 255, 0, 255));
+ if (!open)
+ return;
+
+ if (window->MemoryCompacted)
+ TextDisabled("Note: some memory buffers have been compacted/freed.");
+
+ ImGuiWindowFlags flags = window->Flags;
+ DebugNodeDrawList(window, window->DrawList, "DrawList");
+ BulletText("Pos: (%.1f,%.1f), Size: (%.1f,%.1f), ContentSize (%.1f,%.1f) Ideal (%.1f,%.1f)", window->Pos.x, window->Pos.y, window->Size.x, window->Size.y, window->ContentSize.x, window->ContentSize.y, window->ContentSizeIdeal.x, window->ContentSizeIdeal.y);
+ BulletText("Flags: 0x%08X (%s%s%s%s%s%s%s%s%s..)", flags,
+ (flags & ImGuiWindowFlags_ChildWindow) ? "Child " : "", (flags & ImGuiWindowFlags_Tooltip) ? "Tooltip " : "", (flags & ImGuiWindowFlags_Popup) ? "Popup " : "",
+ (flags & ImGuiWindowFlags_Modal) ? "Modal " : "", (flags & ImGuiWindowFlags_ChildMenu) ? "ChildMenu " : "", (flags & ImGuiWindowFlags_NoSavedSettings) ? "NoSavedSettings " : "",
+ (flags & ImGuiWindowFlags_NoMouseInputs)? "NoMouseInputs":"", (flags & ImGuiWindowFlags_NoNavInputs) ? "NoNavInputs" : "", (flags & ImGuiWindowFlags_AlwaysAutoResize) ? "AlwaysAutoResize" : "");
+ BulletText("Scroll: (%.2f/%.2f,%.2f/%.2f) Scrollbar:%s%s", window->Scroll.x, window->ScrollMax.x, window->Scroll.y, window->ScrollMax.y, window->ScrollbarX ? "X" : "", window->ScrollbarY ? "Y" : "");
+ BulletText("Active: %d/%d, WriteAccessed: %d, BeginOrderWithinContext: %d", window->Active, window->WasActive, window->WriteAccessed, (window->Active || window->WasActive) ? window->BeginOrderWithinContext : -1);
+ BulletText("Appearing: %d, Hidden: %d (CanSkip %d Cannot %d), SkipItems: %d", window->Appearing, window->Hidden, window->HiddenFramesCanSkipItems, window->HiddenFramesCannotSkipItems, window->SkipItems);
+ for (int layer = 0; layer < ImGuiNavLayer_COUNT; layer++)
+ {
+ ImRect r = window->NavRectRel[layer];
+ if (r.Min.x >= r.Max.y && r.Min.y >= r.Max.y)
+ {
+ BulletText("NavLastIds[%d]: 0x%08X", layer, window->NavLastIds[layer]);
+ continue;
+ }
+ BulletText("NavLastIds[%d]: 0x%08X at +(%.1f,%.1f)(%.1f,%.1f)", layer, window->NavLastIds[layer], r.Min.x, r.Min.y, r.Max.x, r.Max.y);
+ if (IsItemHovered())
+ GetForegroundDrawList(window)->AddRect(r.Min + window->Pos, r.Max + window->Pos, IM_COL32(255, 255, 0, 255));
+ }
+ BulletText("NavLayersActiveMask: %X, NavLastChildNavWindow: %s", window->DC.NavLayersActiveMask, window->NavLastChildNavWindow ? window->NavLastChildNavWindow->Name : "NULL");
+ if (window->RootWindow != window) { DebugNodeWindow(window->RootWindow, "RootWindow"); }
+ if (window->ParentWindow != NULL) { DebugNodeWindow(window->ParentWindow, "ParentWindow"); }
+ if (window->DC.ChildWindows.Size > 0) { DebugNodeWindowsList(&window->DC.ChildWindows, "ChildWindows"); }
+ if (window->ColumnsStorage.Size > 0 && TreeNode("Columns", "Columns sets (%d)", window->ColumnsStorage.Size))
+ {
+ for (int n = 0; n < window->ColumnsStorage.Size; n++)
+ DebugNodeColumns(&window->ColumnsStorage[n]);
+ TreePop();
+ }
+ DebugNodeStorage(&window->StateStorage, "Storage");
+ TreePop();
+}
+
+void ImGui::DebugNodeWindowSettings(ImGuiWindowSettings* settings)
+{
+ Text("0x%08X \"%s\" Pos (%d,%d) Size (%d,%d) Collapsed=%d",
+ settings->ID, settings->GetName(), settings->Pos.x, settings->Pos.y, settings->Size.x, settings->Size.y, settings->Collapsed);
+}
+
+void ImGui::DebugNodeWindowsList(ImVector<ImGuiWindow*>* windows, const char* label)
+{
+ if (!TreeNode(label, "%s (%d)", label, windows->Size))
+ return;
+ for (int i = windows->Size - 1; i >= 0; i--) // Iterate front to back
+ {
+ PushID((*windows)[i]);
+ DebugNodeWindow((*windows)[i], "Window");
+ PopID();
+ }
+ TreePop();
+}
+
+// FIXME-OPT: This is technically suboptimal, but it is simpler this way.
+void ImGui::DebugNodeWindowsListByBeginStackParent(ImGuiWindow** windows, int windows_size, ImGuiWindow* parent_in_begin_stack)
+{
+ for (int i = 0; i < windows_size; i++)
+ {
+ ImGuiWindow* window = windows[i];
+ if (window->ParentWindowInBeginStack != parent_in_begin_stack)
+ continue;
+ char buf[20];
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "[%04d] Window", window->BeginOrderWithinContext);
+ //BulletText("[%04d] Window '%s'", window->BeginOrderWithinContext, window->Name);
+ DebugNodeWindow(window, buf);
+ Indent();
+ DebugNodeWindowsListByBeginStackParent(windows + i + 1, windows_size - i - 1, window);
+ Unindent();
+ }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] DEBUG LOG
+//-----------------------------------------------------------------------------
+
+void ImGui::DebugLog(const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ DebugLogV(fmt, args);
+ va_end(args);
+}
+
+void ImGui::DebugLogV(const char* fmt, va_list args)
+{
+ ImGuiContext& g = *GImGui;
+ const int old_size = g.DebugLogBuf.size();
+ g.DebugLogBuf.appendf("[%05d] ", g.FrameCount);
+ g.DebugLogBuf.appendfv(fmt, args);
+ if (g.DebugLogFlags & ImGuiDebugLogFlags_OutputToTTY)
+ IMGUI_DEBUG_PRINTF("%s", g.DebugLogBuf.begin() + old_size);
+}
+
+void ImGui::ShowDebugLogWindow(bool* p_open)
+{
+ ImGuiContext& g = *GImGui;
+ if (!(g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize))
+ SetNextWindowSize(ImVec2(0.0f, GetFontSize() * 12.0f), ImGuiCond_FirstUseEver);
+ if (!Begin("Dear ImGui Debug Log", p_open) || GetCurrentWindow()->BeginCount > 1)
+ {
+ End();
+ return;
+ }
+
+ AlignTextToFramePadding();
+ Text("Log events:");
+ SameLine(); CheckboxFlags("All", &g.DebugLogFlags, ImGuiDebugLogFlags_EventMask_);
+ SameLine(); CheckboxFlags("ActiveId", &g.DebugLogFlags, ImGuiDebugLogFlags_EventActiveId);
+ SameLine(); CheckboxFlags("Focus", &g.DebugLogFlags, ImGuiDebugLogFlags_EventFocus);
+ SameLine(); CheckboxFlags("Popup", &g.DebugLogFlags, ImGuiDebugLogFlags_EventPopup);
+ SameLine(); CheckboxFlags("Nav", &g.DebugLogFlags, ImGuiDebugLogFlags_EventNav);
+
+ if (SmallButton("Clear"))
+ g.DebugLogBuf.clear();
+ SameLine();
+ if (SmallButton("Copy"))
+ SetClipboardText(g.DebugLogBuf.c_str());
+ BeginChild("##log", ImVec2(0.0f, 0.0f), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar);
+ TextUnformatted(g.DebugLogBuf.begin(), g.DebugLogBuf.end()); // FIXME-OPT: Could use a line index, but TextUnformatted() has a semi-decent fast path for large text.
+ if (GetScrollY() >= GetScrollMaxY())
+ SetScrollHereY(1.0f);
+ EndChild();
+
+ End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] OTHER DEBUG TOOLS (ITEM PICKER, STACK TOOL)
+//-----------------------------------------------------------------------------
+
+// [DEBUG] Item picker tool - start with DebugStartItemPicker() - useful to visually select an item and break into its call-stack.
+void ImGui::UpdateDebugToolItemPicker()
+{
+ ImGuiContext& g = *GImGui;
+ g.DebugItemPickerBreakId = 0;
+ if (!g.DebugItemPickerActive)
+ return;
+
+ const ImGuiID hovered_id = g.HoveredIdPreviousFrame;
+ SetMouseCursor(ImGuiMouseCursor_Hand);
+ if (IsKeyPressed(ImGuiKey_Escape))
+ g.DebugItemPickerActive = false;
+ if (IsMouseClicked(0) && hovered_id)
+ {
+ g.DebugItemPickerBreakId = hovered_id;
+ g.DebugItemPickerActive = false;
+ }
+ SetNextWindowBgAlpha(0.60f);
+ BeginTooltip();
+ Text("HoveredId: 0x%08X", hovered_id);
+ Text("Press ESC to abort picking.");
+ TextColored(GetStyleColorVec4(hovered_id ? ImGuiCol_Text : ImGuiCol_TextDisabled), "Click to break in debugger!");
+ EndTooltip();
+}
+
+// [DEBUG] Stack Tool: update queries. Called by NewFrame()
+void ImGui::UpdateDebugToolStackQueries()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiStackTool* tool = &g.DebugStackTool;
+
+ // Clear hook when stack tool is not visible
+ g.DebugHookIdInfo = 0;
+ if (g.FrameCount != tool->LastActiveFrame + 1)
+ return;
+
+ // Update queries. The steps are: -1: query Stack, >= 0: query each stack item
+ // We can only perform 1 ID Info query every frame. This is designed so the GetID() tests are cheap and constant-time
+ const ImGuiID query_id = g.HoveredIdPreviousFrame ? g.HoveredIdPreviousFrame : g.ActiveId;
+ if (tool->QueryId != query_id)
+ {
+ tool->QueryId = query_id;
+ tool->StackLevel = -1;
+ tool->Results.resize(0);
+ }
+ if (query_id == 0)
+ return;
+
+ // Advance to next stack level when we got our result, or after 2 frames (in case we never get a result)
+ int stack_level = tool->StackLevel;
+ if (stack_level >= 0 && stack_level < tool->Results.Size)
+ if (tool->Results[stack_level].QuerySuccess || tool->Results[stack_level].QueryFrameCount > 2)
+ tool->StackLevel++;
+
+ // Update hook
+ stack_level = tool->StackLevel;
+ if (stack_level == -1)
+ g.DebugHookIdInfo = query_id;
+ if (stack_level >= 0 && stack_level < tool->Results.Size)
+ {
+ g.DebugHookIdInfo = tool->Results[stack_level].ID;
+ tool->Results[stack_level].QueryFrameCount++;
+ }
+}
+
+// [DEBUG] Stack tool: hooks called by GetID() family functions
+void ImGui::DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void* data_id, const void* data_id_end)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiStackTool* tool = &g.DebugStackTool;
+
+ // Step 0: stack query
+ // This assume that the ID was computed with the current ID stack, which tends to be the case for our widget.
+ if (tool->StackLevel == -1)
+ {
+ tool->StackLevel++;
+ tool->Results.resize(window->IDStack.Size + 1, ImGuiStackLevelInfo());
+ for (int n = 0; n < window->IDStack.Size + 1; n++)
+ tool->Results[n].ID = (n < window->IDStack.Size) ? window->IDStack[n] : id;
+ return;
+ }
+
+ // Step 1+: query for individual level
+ IM_ASSERT(tool->StackLevel >= 0);
+ if (tool->StackLevel != window->IDStack.Size)
+ return;
+ ImGuiStackLevelInfo* info = &tool->Results[tool->StackLevel];
+ IM_ASSERT(info->ID == id && info->QueryFrameCount > 0);
+
+ switch (data_type)
+ {
+ case ImGuiDataType_S32:
+ ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "%d", (int)(intptr_t)data_id);
+ break;
+ case ImGuiDataType_String:
+ ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "%.*s", data_id_end ? (int)((const char*)data_id_end - (const char*)data_id) : (int)strlen((const char*)data_id), (const char*)data_id);
+ break;
+ case ImGuiDataType_Pointer:
+ ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "(void*)0x%p", data_id);
+ break;
+ case ImGuiDataType_ID:
+ if (info->Desc[0] != 0) // PushOverrideID() is often used to avoid hashing twice, which would lead to 2 calls to DebugHookIdInfo(). We prioritize the first one.
+ return;
+ ImFormatString(info->Desc, IM_ARRAYSIZE(info->Desc), "0x%08X [override]", id);
+ break;
+ default:
+ IM_ASSERT(0);
+ }
+ info->QuerySuccess = true;
+ info->DataType = data_type;
+}
+
+static int StackToolFormatLevelInfo(ImGuiStackTool* tool, int n, bool format_for_ui, char* buf, size_t buf_size)
+{
+ ImGuiStackLevelInfo* info = &tool->Results[n];
+ ImGuiWindow* window = (info->Desc[0] == 0 && n == 0) ? ImGui::FindWindowByID(info->ID) : NULL;
+ if (window) // Source: window name (because the root ID don't call GetID() and so doesn't get hooked)
+ return ImFormatString(buf, buf_size, format_for_ui ? "\"%s\" [window]" : "%s", window->Name);
+ if (info->QuerySuccess) // Source: GetID() hooks (prioritize over ItemInfo() because we frequently use patterns like: PushID(str), Button("") where they both have same id)
+ return ImFormatString(buf, buf_size, (format_for_ui && info->DataType == ImGuiDataType_String) ? "\"%s\"" : "%s", info->Desc);
+ if (tool->StackLevel < tool->Results.Size) // Only start using fallback below when all queries are done, so during queries we don't flickering ??? markers.
+ return (*buf = 0);
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ if (const char* label = ImGuiTestEngine_FindItemDebugLabel(GImGui, info->ID)) // Source: ImGuiTestEngine's ItemInfo()
+ return ImFormatString(buf, buf_size, format_for_ui ? "??? \"%s\"" : "%s", label);
+#endif
+ return ImFormatString(buf, buf_size, "???");
+}
+
+// Stack Tool: Display UI
+void ImGui::ShowStackToolWindow(bool* p_open)
+{
+ ImGuiContext& g = *GImGui;
+ if (!(g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSize))
+ SetNextWindowSize(ImVec2(0.0f, GetFontSize() * 8.0f), ImGuiCond_FirstUseEver);
+ if (!Begin("Dear ImGui Stack Tool", p_open) || GetCurrentWindow()->BeginCount > 1)
+ {
+ End();
+ return;
+ }
+
+ // Display hovered/active status
+ ImGuiStackTool* tool = &g.DebugStackTool;
+ const ImGuiID hovered_id = g.HoveredIdPreviousFrame;
+ const ImGuiID active_id = g.ActiveId;
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ Text("HoveredId: 0x%08X (\"%s\"), ActiveId: 0x%08X (\"%s\")", hovered_id, hovered_id ? ImGuiTestEngine_FindItemDebugLabel(&g, hovered_id) : "", active_id, active_id ? ImGuiTestEngine_FindItemDebugLabel(&g, active_id) : "");
+#else
+ Text("HoveredId: 0x%08X, ActiveId: 0x%08X", hovered_id, active_id);
+#endif
+ SameLine();
+ MetricsHelpMarker("Hover an item with the mouse to display elements of the ID Stack leading to the item's final ID.\nEach level of the stack correspond to a PushID() call.\nAll levels of the stack are hashed together to make the final ID of a widget (ID displayed at the bottom level of the stack).\nRead FAQ entry about the ID stack for details.");
+
+ // CTRL+C to copy path
+ const float time_since_copy = (float)g.Time - tool->CopyToClipboardLastTime;
+ Checkbox("Ctrl+C: copy path to clipboard", &tool->CopyToClipboardOnCtrlC);
+ SameLine();
+ TextColored((time_since_copy >= 0.0f && time_since_copy < 0.75f && ImFmod(time_since_copy, 0.25f) < 0.25f * 0.5f) ? ImVec4(1.f, 1.f, 0.3f, 1.f) : ImVec4(), "*COPIED*");
+ if (tool->CopyToClipboardOnCtrlC && IsKeyDown(ImGuiKey_ModCtrl) && IsKeyPressed(ImGuiKey_C))
+ {
+ tool->CopyToClipboardLastTime = (float)g.Time;
+ char* p = g.TempBuffer.Data;
+ char* p_end = p + g.TempBuffer.Size;
+ for (int stack_n = 0; stack_n < tool->Results.Size && p + 3 < p_end; stack_n++)
+ {
+ *p++ = '/';
+ char level_desc[256];
+ StackToolFormatLevelInfo(tool, stack_n, false, level_desc, IM_ARRAYSIZE(level_desc));
+ for (int n = 0; level_desc[n] && p + 2 < p_end; n++)
+ {
+ if (level_desc[n] == '/')
+ *p++ = '\\';
+ *p++ = level_desc[n];
+ }
+ }
+ *p = '\0';
+ SetClipboardText(g.TempBuffer.Data);
+ }
+
+ // Display decorated stack
+ tool->LastActiveFrame = g.FrameCount;
+ if (tool->Results.Size > 0 && BeginTable("##table", 3, ImGuiTableFlags_Borders))
+ {
+ const float id_width = CalcTextSize("0xDDDDDDDD").x;
+ TableSetupColumn("Seed", ImGuiTableColumnFlags_WidthFixed, id_width);
+ TableSetupColumn("PushID", ImGuiTableColumnFlags_WidthStretch);
+ TableSetupColumn("Result", ImGuiTableColumnFlags_WidthFixed, id_width);
+ TableHeadersRow();
+ for (int n = 0; n < tool->Results.Size; n++)
+ {
+ ImGuiStackLevelInfo* info = &tool->Results[n];
+ TableNextColumn();
+ Text("0x%08X", (n > 0) ? tool->Results[n - 1].ID : 0);
+ TableNextColumn();
+ StackToolFormatLevelInfo(tool, n, true, g.TempBuffer.Data, g.TempBuffer.Size);
+ TextUnformatted(g.TempBuffer.Data);
+ TableNextColumn();
+ Text("0x%08X", info->ID);
+ if (n == tool->Results.Size - 1)
+ TableSetBgColor(ImGuiTableBgTarget_CellBg, GetColorU32(ImGuiCol_Header));
+ }
+ EndTable();
+ }
+ End();
+}
+
+#else
+
+void ImGui::ShowMetricsWindow(bool*) {}
+void ImGui::ShowFontAtlas(ImFontAtlas*) {}
+void ImGui::DebugNodeColumns(ImGuiOldColumns*) {}
+void ImGui::DebugNodeDrawList(ImGuiWindow*, const ImDrawList*, const char*) {}
+void ImGui::DebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList*, const ImDrawList*, const ImDrawCmd*, bool, bool) {}
+void ImGui::DebugNodeFont(ImFont*) {}
+void ImGui::DebugNodeStorage(ImGuiStorage*, const char*) {}
+void ImGui::DebugNodeTabBar(ImGuiTabBar*, const char*) {}
+void ImGui::DebugNodeWindow(ImGuiWindow*, const char*) {}
+void ImGui::DebugNodeWindowSettings(ImGuiWindowSettings*) {}
+void ImGui::DebugNodeWindowsList(ImVector<ImGuiWindow*>*, const char*) {}
+void ImGui::DebugNodeViewport(ImGuiViewportP*) {}
+
+void ImGui::DebugLog(const char*, ...) {}
+void ImGui::DebugLogV(const char*, va_list) {}
+void ImGui::ShowDebugLogWindow(bool*) {}
+void ImGui::ShowStackToolWindow(bool*) {}
+void ImGui::DebugHookIdInfo(ImGuiID, ImGuiDataType, const void*, const void*) {}
+void ImGui::UpdateDebugToolItemPicker() {}
+void ImGui::UpdateDebugToolStackQueries() {}
+
+#endif // #ifndef IMGUI_DISABLE_DEBUG_TOOLS
+
+//-----------------------------------------------------------------------------
+
+// Include imgui_user.inl at the end of imgui.cpp to access private data/functions that aren't exposed.
+// Prefer just including imgui_internal.h from your code rather than using this define. If a declaration is missing from imgui_internal.h add it or request it on the github.
+#ifdef IMGUI_INCLUDE_IMGUI_USER_INL
+#include "imgui_user.inl"
+#endif
+
+//-----------------------------------------------------------------------------
+
+#endif // #ifndef IMGUI_DISABLE
diff --git a/tests/manual/rhi/shared/imgui/imgui/imgui.h b/tests/manual/rhi/shared/imgui/imgui/imgui.h
new file mode 100644
index 0000000000..bc5fbd61a0
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/imgui.h
@@ -0,0 +1,3065 @@
+// dear imgui, v1.88
+// (headers)
+
+// Help:
+// - Read FAQ at http://dearimgui.org/faq
+// - Newcomers, read 'Programmer guide' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
+// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp. All applications in examples/ are doing that.
+// Read imgui.cpp for details, links and comments.
+
+// Resources:
+// - FAQ http://dearimgui.org/faq
+// - Homepage & latest https://github.com/ocornut/imgui
+// - Releases & changelog https://github.com/ocornut/imgui/releases
+// - Gallery https://github.com/ocornut/imgui/issues/5243 (please post your screenshots/video there!)
+// - Wiki https://github.com/ocornut/imgui/wiki (lots of good stuff there)
+// - Glossary https://github.com/ocornut/imgui/wiki/Glossary
+// - Issues & support https://github.com/ocornut/imgui/issues
+
+// Getting Started?
+// - For first-time users having issues compiling/linking/running or issues loading fonts:
+// please post in https://github.com/ocornut/imgui/discussions if you cannot find a solution in resources above.
+
+/*
+
+Index of this file:
+// [SECTION] Header mess
+// [SECTION] Forward declarations and basic types
+// [SECTION] Dear ImGui end-user API functions
+// [SECTION] Flags & Enumerations
+// [SECTION] Helpers: Memory allocations macros, ImVector<>
+// [SECTION] ImGuiStyle
+// [SECTION] ImGuiIO
+// [SECTION] Misc data structures (ImGuiInputTextCallbackData, ImGuiSizeCallbackData, ImGuiPayload, ImGuiTableSortSpecs, ImGuiTableColumnSortSpecs)
+// [SECTION] Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor)
+// [SECTION] Drawing API (ImDrawCallback, ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawFlags, ImDrawListFlags, ImDrawList, ImDrawData)
+// [SECTION] Font API (ImFontConfig, ImFontGlyph, ImFontGlyphRangesBuilder, ImFontAtlasFlags, ImFontAtlas, ImFont)
+// [SECTION] Viewports (ImGuiViewportFlags, ImGuiViewport)
+// [SECTION] Platform Dependent Interfaces (ImGuiPlatformImeData)
+// [SECTION] Obsolete functions and types
+
+*/
+
+#pragma once
+
+// Configuration file with compile-time options (edit imconfig.h or '#define IMGUI_USER_CONFIG "myfilename.h" from your build system')
+#ifdef IMGUI_USER_CONFIG
+#include IMGUI_USER_CONFIG
+#endif
+#if !defined(IMGUI_DISABLE_INCLUDE_IMCONFIG_H) || defined(IMGUI_INCLUDE_IMCONFIG_H)
+#include "imconfig.h"
+#endif
+
+#ifndef IMGUI_DISABLE
+
+//-----------------------------------------------------------------------------
+// [SECTION] Header mess
+//-----------------------------------------------------------------------------
+
+// Includes
+#include <float.h> // FLT_MIN, FLT_MAX
+#include <stdarg.h> // va_list, va_start, va_end
+#include <stddef.h> // ptrdiff_t, NULL
+#include <string.h> // memset, memmove, memcpy, strlen, strchr, strcpy, strcmp
+
+// Version
+// (Integer encoded as XYYZZ for use in #if preprocessor conditionals. Work in progress versions typically starts at XYY99 then bounce up to XYY00, XYY01 etc. when release tagging happens)
+#define IMGUI_VERSION "1.88"
+#define IMGUI_VERSION_NUM 18800
+#define IMGUI_CHECKVERSION() ImGui::DebugCheckVersionAndDataLayout(IMGUI_VERSION, sizeof(ImGuiIO), sizeof(ImGuiStyle), sizeof(ImVec2), sizeof(ImVec4), sizeof(ImDrawVert), sizeof(ImDrawIdx))
+#define IMGUI_HAS_TABLE
+
+// Define attributes of all API symbols declarations (e.g. for DLL under Windows)
+// IMGUI_API is used for core imgui functions, IMGUI_IMPL_API is used for the default backends files (imgui_impl_xxx.h)
+// Using dear imgui via a shared library is not recommended, because we don't guarantee backward nor forward ABI compatibility (also function call overhead, as dear imgui is a call-heavy API)
+#ifndef IMGUI_API
+#define IMGUI_API
+#endif
+#ifndef IMGUI_IMPL_API
+#define IMGUI_IMPL_API IMGUI_API
+#endif
+
+// Helper Macros
+#ifndef IM_ASSERT
+#include <assert.h>
+#define IM_ASSERT(_EXPR) assert(_EXPR) // You can override the default assert handler by editing imconfig.h
+#endif
+#define IM_ARRAYSIZE(_ARR) ((int)(sizeof(_ARR) / sizeof(*(_ARR)))) // Size of a static C-style array. Don't use on pointers!
+#define IM_UNUSED(_VAR) ((void)(_VAR)) // Used to silence "unused variable warnings". Often useful as asserts may be stripped out from final builds.
+#define IM_OFFSETOF(_TYPE,_MEMBER) offsetof(_TYPE, _MEMBER) // Offset of _MEMBER within _TYPE. Standardized as offsetof() in C++11
+
+// Helper Macros - IM_FMTARGS, IM_FMTLIST: Apply printf-style warnings to our formatting functions.
+#if !defined(IMGUI_USE_STB_SPRINTF) && defined(__MINGW32__) && !defined(__clang__)
+#define IM_FMTARGS(FMT) __attribute__((format(gnu_printf, FMT, FMT+1)))
+#define IM_FMTLIST(FMT) __attribute__((format(gnu_printf, FMT, 0)))
+#elif !defined(IMGUI_USE_STB_SPRINTF) && (defined(__clang__) || defined(__GNUC__))
+#define IM_FMTARGS(FMT) __attribute__((format(printf, FMT, FMT+1)))
+#define IM_FMTLIST(FMT) __attribute__((format(printf, FMT, 0)))
+#else
+#define IM_FMTARGS(FMT)
+#define IM_FMTLIST(FMT)
+#endif
+
+// Disable some of MSVC most aggressive Debug runtime checks in function header/footer (used in some simple/low-level functions)
+#if defined(_MSC_VER) && !defined(__clang__) && !defined(__INTEL_COMPILER) && !defined(IMGUI_DEBUG_PARANOID)
+#define IM_MSVC_RUNTIME_CHECKS_OFF __pragma(runtime_checks("",off)) __pragma(check_stack(off)) __pragma(strict_gs_check(push,off))
+#define IM_MSVC_RUNTIME_CHECKS_RESTORE __pragma(runtime_checks("",restore)) __pragma(check_stack()) __pragma(strict_gs_check(pop))
+#else
+#define IM_MSVC_RUNTIME_CHECKS_OFF
+#define IM_MSVC_RUNTIME_CHECKS_RESTORE
+#endif
+
+// Warnings
+#ifdef _MSC_VER
+#pragma warning (push)
+#pragma warning (disable: 26495) // [Static Analyzer] Variable 'XXX' is uninitialized. Always initialize a member variable (type.6).
+#endif
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wold-style-cast"
+#if __has_warning("-Wzero-as-null-pointer-constant")
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
+#endif
+#elif defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
+#endif
+
+//-----------------------------------------------------------------------------
+// [SECTION] Forward declarations and basic types
+//-----------------------------------------------------------------------------
+
+// Forward declarations
+struct ImDrawChannel; // Temporary storage to output draw commands out of order, used by ImDrawListSplitter and ImDrawList::ChannelsSplit()
+struct ImDrawCmd; // A single draw command within a parent ImDrawList (generally maps to 1 GPU draw call, unless it is a callback)
+struct ImDrawData; // All draw command lists required to render the frame + pos/size coordinates to use for the projection matrix.
+struct ImDrawList; // A single draw command list (generally one per window, conceptually you may see this as a dynamic "mesh" builder)
+struct ImDrawListSharedData; // Data shared among multiple draw lists (typically owned by parent ImGui context, but you may create one yourself)
+struct ImDrawListSplitter; // Helper to split a draw list into different layers which can be drawn into out of order, then flattened back.
+struct ImDrawVert; // A single vertex (pos + uv + col = 20 bytes by default. Override layout with IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT)
+struct ImFont; // Runtime data for a single font within a parent ImFontAtlas
+struct ImFontAtlas; // Runtime data for multiple fonts, bake multiple fonts into a single texture, TTF/OTF font loader
+struct ImFontBuilderIO; // Opaque interface to a font builder (stb_truetype or FreeType).
+struct ImFontConfig; // Configuration data when adding a font or merging fonts
+struct ImFontGlyph; // A single font glyph (code point + coordinates within in ImFontAtlas + offset)
+struct ImFontGlyphRangesBuilder; // Helper to build glyph ranges from text/string data
+struct ImColor; // Helper functions to create a color that can be converted to either u32 or float4 (*OBSOLETE* please avoid using)
+struct ImGuiContext; // Dear ImGui context (opaque structure, unless including imgui_internal.h)
+struct ImGuiIO; // Main configuration and I/O between your application and ImGui
+struct ImGuiInputTextCallbackData; // Shared state of InputText() when using custom ImGuiInputTextCallback (rare/advanced use)
+struct ImGuiKeyData; // Storage for ImGuiIO and IsKeyDown(), IsKeyPressed() etc functions.
+struct ImGuiListClipper; // Helper to manually clip large list of items
+struct ImGuiOnceUponAFrame; // Helper for running a block of code not more than once a frame
+struct ImGuiPayload; // User data payload for drag and drop operations
+struct ImGuiPlatformImeData; // Platform IME data for io.SetPlatformImeDataFn() function.
+struct ImGuiSizeCallbackData; // Callback data when using SetNextWindowSizeConstraints() (rare/advanced use)
+struct ImGuiStorage; // Helper for key->value storage
+struct ImGuiStyle; // Runtime data for styling/colors
+struct ImGuiTableSortSpecs; // Sorting specifications for a table (often handling sort specs for a single column, occasionally more)
+struct ImGuiTableColumnSortSpecs; // Sorting specification for one column of a table
+struct ImGuiTextBuffer; // Helper to hold and append into a text buffer (~string builder)
+struct ImGuiTextFilter; // Helper to parse and apply text filters (e.g. "aaaaa[,bbbbb][,ccccc]")
+struct ImGuiViewport; // A Platform Window (always only one in 'master' branch), in the future may represent Platform Monitor
+
+// Enums/Flags (declared as int for compatibility with old C++, to allow using as flags without overhead, and to not pollute the top of this file)
+// - Tip: Use your programming IDE navigation facilities on the names in the _central column_ below to find the actual flags/enum lists!
+// In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
+// With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
+typedef int ImGuiCol; // -> enum ImGuiCol_ // Enum: A color identifier for styling
+typedef int ImGuiCond; // -> enum ImGuiCond_ // Enum: A condition for many Set*() functions
+typedef int ImGuiDataType; // -> enum ImGuiDataType_ // Enum: A primary data type
+typedef int ImGuiDir; // -> enum ImGuiDir_ // Enum: A cardinal direction
+typedef int ImGuiKey; // -> enum ImGuiKey_ // Enum: A key identifier
+typedef int ImGuiNavInput; // -> enum ImGuiNavInput_ // Enum: An input identifier for navigation
+typedef int ImGuiMouseButton; // -> enum ImGuiMouseButton_ // Enum: A mouse button identifier (0=left, 1=right, 2=middle)
+typedef int ImGuiMouseCursor; // -> enum ImGuiMouseCursor_ // Enum: A mouse cursor identifier
+typedef int ImGuiSortDirection; // -> enum ImGuiSortDirection_ // Enum: A sorting direction (ascending or descending)
+typedef int ImGuiStyleVar; // -> enum ImGuiStyleVar_ // Enum: A variable identifier for styling
+typedef int ImGuiTableBgTarget; // -> enum ImGuiTableBgTarget_ // Enum: A color target for TableSetBgColor()
+typedef int ImDrawFlags; // -> enum ImDrawFlags_ // Flags: for ImDrawList functions
+typedef int ImDrawListFlags; // -> enum ImDrawListFlags_ // Flags: for ImDrawList instance
+typedef int ImFontAtlasFlags; // -> enum ImFontAtlasFlags_ // Flags: for ImFontAtlas build
+typedef int ImGuiBackendFlags; // -> enum ImGuiBackendFlags_ // Flags: for io.BackendFlags
+typedef int ImGuiButtonFlags; // -> enum ImGuiButtonFlags_ // Flags: for InvisibleButton()
+typedef int ImGuiColorEditFlags; // -> enum ImGuiColorEditFlags_ // Flags: for ColorEdit4(), ColorPicker4() etc.
+typedef int ImGuiConfigFlags; // -> enum ImGuiConfigFlags_ // Flags: for io.ConfigFlags
+typedef int ImGuiComboFlags; // -> enum ImGuiComboFlags_ // Flags: for BeginCombo()
+typedef int ImGuiDragDropFlags; // -> enum ImGuiDragDropFlags_ // Flags: for BeginDragDropSource(), AcceptDragDropPayload()
+typedef int ImGuiFocusedFlags; // -> enum ImGuiFocusedFlags_ // Flags: for IsWindowFocused()
+typedef int ImGuiHoveredFlags; // -> enum ImGuiHoveredFlags_ // Flags: for IsItemHovered(), IsWindowHovered() etc.
+typedef int ImGuiInputTextFlags; // -> enum ImGuiInputTextFlags_ // Flags: for InputText(), InputTextMultiline()
+typedef int ImGuiModFlags; // -> enum ImGuiModFlags_ // Flags: for io.KeyMods (Ctrl/Shift/Alt/Super)
+typedef int ImGuiPopupFlags; // -> enum ImGuiPopupFlags_ // Flags: for OpenPopup*(), BeginPopupContext*(), IsPopupOpen()
+typedef int ImGuiSelectableFlags; // -> enum ImGuiSelectableFlags_ // Flags: for Selectable()
+typedef int ImGuiSliderFlags; // -> enum ImGuiSliderFlags_ // Flags: for DragFloat(), DragInt(), SliderFloat(), SliderInt() etc.
+typedef int ImGuiTabBarFlags; // -> enum ImGuiTabBarFlags_ // Flags: for BeginTabBar()
+typedef int ImGuiTabItemFlags; // -> enum ImGuiTabItemFlags_ // Flags: for BeginTabItem()
+typedef int ImGuiTableFlags; // -> enum ImGuiTableFlags_ // Flags: For BeginTable()
+typedef int ImGuiTableColumnFlags; // -> enum ImGuiTableColumnFlags_// Flags: For TableSetupColumn()
+typedef int ImGuiTableRowFlags; // -> enum ImGuiTableRowFlags_ // Flags: For TableNextRow()
+typedef int ImGuiTreeNodeFlags; // -> enum ImGuiTreeNodeFlags_ // Flags: for TreeNode(), TreeNodeEx(), CollapsingHeader()
+typedef int ImGuiViewportFlags; // -> enum ImGuiViewportFlags_ // Flags: for ImGuiViewport
+typedef int ImGuiWindowFlags; // -> enum ImGuiWindowFlags_ // Flags: for Begin(), BeginChild()
+
+// ImTexture: user data for renderer backend to identify a texture [Compile-time configurable type]
+// - To use something else than an opaque void* pointer: override with e.g. '#define ImTextureID MyTextureType*' in your imconfig.h file.
+// - This can be whatever to you want it to be! read the FAQ about ImTextureID for details.
+#ifndef ImTextureID
+typedef void* ImTextureID; // Default: store a pointer or an integer fitting in a pointer (most renderer backends are ok with that)
+#endif
+
+// ImDrawIdx: vertex index. [Compile-time configurable type]
+// - To use 16-bit indices + allow large meshes: backend need to set 'io.BackendFlags |= ImGuiBackendFlags_RendererHasVtxOffset' and handle ImDrawCmd::VtxOffset (recommended).
+// - To use 32-bit indices: override with '#define ImDrawIdx unsigned int' in your imconfig.h file.
+#ifndef ImDrawIdx
+typedef unsigned short ImDrawIdx; // Default: 16-bit (for maximum compatibility with renderer backends)
+#endif
+
+// Scalar data types
+typedef unsigned int ImGuiID;// A unique ID used by widgets (typically the result of hashing a stack of string)
+typedef signed char ImS8; // 8-bit signed integer
+typedef unsigned char ImU8; // 8-bit unsigned integer
+typedef signed short ImS16; // 16-bit signed integer
+typedef unsigned short ImU16; // 16-bit unsigned integer
+typedef signed int ImS32; // 32-bit signed integer == int
+typedef unsigned int ImU32; // 32-bit unsigned integer (often used to store packed colors)
+typedef signed long long ImS64; // 64-bit signed integer
+typedef unsigned long long ImU64; // 64-bit unsigned integer
+
+// Character types
+// (we generally use UTF-8 encoded string in the API. This is storage specifically for a decoded character used for keyboard input and display)
+typedef unsigned short ImWchar16; // A single decoded U16 character/code point. We encode them as multi bytes UTF-8 when used in strings.
+typedef unsigned int ImWchar32; // A single decoded U32 character/code point. We encode them as multi bytes UTF-8 when used in strings.
+#ifdef IMGUI_USE_WCHAR32 // ImWchar [configurable type: override in imconfig.h with '#define IMGUI_USE_WCHAR32' to support Unicode planes 1-16]
+typedef ImWchar32 ImWchar;
+#else
+typedef ImWchar16 ImWchar;
+#endif
+
+// Callback and functions types
+typedef int (*ImGuiInputTextCallback)(ImGuiInputTextCallbackData* data); // Callback function for ImGui::InputText()
+typedef void (*ImGuiSizeCallback)(ImGuiSizeCallbackData* data); // Callback function for ImGui::SetNextWindowSizeConstraints()
+typedef void* (*ImGuiMemAllocFunc)(size_t sz, void* user_data); // Function signature for ImGui::SetAllocatorFunctions()
+typedef void (*ImGuiMemFreeFunc)(void* ptr, void* user_data); // Function signature for ImGui::SetAllocatorFunctions()
+
+// ImVec2: 2D vector used to store positions, sizes etc. [Compile-time configurable type]
+// This is a frequently used type in the API. Consider using IM_VEC2_CLASS_EXTRA to create implicit cast from/to our preferred type.
+IM_MSVC_RUNTIME_CHECKS_OFF
+struct ImVec2
+{
+ float x, y;
+ constexpr ImVec2() : x(0.0f), y(0.0f) { }
+ constexpr ImVec2(float _x, float _y) : x(_x), y(_y) { }
+ float operator[] (size_t idx) const { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine.
+ float& operator[] (size_t idx) { IM_ASSERT(idx <= 1); return (&x)[idx]; } // We very rarely use this [] operator, the assert overhead is fine.
+#ifdef IM_VEC2_CLASS_EXTRA
+ IM_VEC2_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec2.
+#endif
+};
+
+// ImVec4: 4D vector used to store clipping rectangles, colors etc. [Compile-time configurable type]
+struct ImVec4
+{
+ float x, y, z, w;
+ constexpr ImVec4() : x(0.0f), y(0.0f), z(0.0f), w(0.0f) { }
+ constexpr ImVec4(float _x, float _y, float _z, float _w) : x(_x), y(_y), z(_z), w(_w) { }
+#ifdef IM_VEC4_CLASS_EXTRA
+ IM_VEC4_CLASS_EXTRA // Define additional constructors and implicit cast operators in imconfig.h to convert back and forth between your math types and ImVec4.
+#endif
+};
+IM_MSVC_RUNTIME_CHECKS_RESTORE
+
+//-----------------------------------------------------------------------------
+// [SECTION] Dear ImGui end-user API functions
+// (Note that ImGui:: being a namespace, you can add extra ImGui:: functions in your own separate file. Please don't modify imgui source files!)
+//-----------------------------------------------------------------------------
+
+namespace ImGui
+{
+ // Context creation and access
+ // - Each context create its own ImFontAtlas by default. You may instance one yourself and pass it to CreateContext() to share a font atlas between contexts.
+ // - DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions()
+ // for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for details.
+ IMGUI_API ImGuiContext* CreateContext(ImFontAtlas* shared_font_atlas = NULL);
+ IMGUI_API void DestroyContext(ImGuiContext* ctx = NULL); // NULL = destroy current context
+ IMGUI_API ImGuiContext* GetCurrentContext();
+ IMGUI_API void SetCurrentContext(ImGuiContext* ctx);
+
+ // Main
+ IMGUI_API ImGuiIO& GetIO(); // access the IO structure (mouse/keyboard/gamepad inputs, time, various configuration options/flags)
+ IMGUI_API ImGuiStyle& GetStyle(); // access the Style structure (colors, sizes). Always use PushStyleCol(), PushStyleVar() to modify style mid-frame!
+ IMGUI_API void NewFrame(); // start a new Dear ImGui frame, you can submit any command from this point until Render()/EndFrame().
+ IMGUI_API void EndFrame(); // ends the Dear ImGui frame. automatically called by Render(). If you don't need to render data (skipping rendering) you may call EndFrame() without Render()... but you'll have wasted CPU already! If you don't need to render, better to not create any windows and not call NewFrame() at all!
+ IMGUI_API void Render(); // ends the Dear ImGui frame, finalize the draw data. You can then get call GetDrawData().
+ IMGUI_API ImDrawData* GetDrawData(); // valid after Render() and until the next call to NewFrame(). this is what you have to render.
+
+ // Demo, Debug, Information
+ IMGUI_API void ShowDemoWindow(bool* p_open = NULL); // create Demo window. demonstrate most ImGui features. call this to learn about the library! try to make it always available in your application!
+ IMGUI_API void ShowMetricsWindow(bool* p_open = NULL); // create Metrics/Debugger window. display Dear ImGui internals: windows, draw commands, various internal state, etc.
+ IMGUI_API void ShowDebugLogWindow(bool* p_open = NULL); // create Debug Log window. display a simplified log of important dear imgui events.
+ IMGUI_API void ShowStackToolWindow(bool* p_open = NULL); // create Stack Tool window. hover items with mouse to query information about the source of their unique ID.
+ IMGUI_API void ShowAboutWindow(bool* p_open = NULL); // create About window. display Dear ImGui version, credits and build/system information.
+ IMGUI_API void ShowStyleEditor(ImGuiStyle* ref = NULL); // add style editor block (not a window). you can pass in a reference ImGuiStyle structure to compare to, revert to and save to (else it uses the default style)
+ IMGUI_API bool ShowStyleSelector(const char* label); // add style selector block (not a window), essentially a combo listing the default styles.
+ IMGUI_API void ShowFontSelector(const char* label); // add font selector block (not a window), essentially a combo listing the loaded fonts.
+ IMGUI_API void ShowUserGuide(); // add basic help/info block (not a window): how to manipulate ImGui as a end-user (mouse/keyboard controls).
+ IMGUI_API const char* GetVersion(); // get the compiled version string e.g. "1.80 WIP" (essentially the value for IMGUI_VERSION from the compiled version of imgui.cpp)
+
+ // Styles
+ IMGUI_API void StyleColorsDark(ImGuiStyle* dst = NULL); // new, recommended style (default)
+ IMGUI_API void StyleColorsLight(ImGuiStyle* dst = NULL); // best used with borders and a custom, thicker font
+ IMGUI_API void StyleColorsClassic(ImGuiStyle* dst = NULL); // classic imgui style
+
+ // Windows
+ // - Begin() = push window to the stack and start appending to it. End() = pop window from the stack.
+ // - Passing 'bool* p_open != NULL' shows a window-closing widget in the upper-right corner of the window,
+ // which clicking will set the boolean to false when clicked.
+ // - You may append multiple times to the same window during the same frame by calling Begin()/End() pairs multiple times.
+ // Some information such as 'flags' or 'p_open' will only be considered by the first call to Begin().
+ // - Begin() return false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting
+ // anything to the window. Always call a matching End() for each Begin() call, regardless of its return value!
+ // [Important: due to legacy reason, this is inconsistent with most other functions such as BeginMenu/EndMenu,
+ // BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function
+ // returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.]
+ // - Note that the bottom of window stack always contains a window called "Debug".
+ IMGUI_API bool Begin(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0);
+ IMGUI_API void End();
+
+ // Child Windows
+ // - Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window. Child windows can embed their own child.
+ // - For each independent axis of 'size': ==0.0f: use remaining host window size / >0.0f: fixed size / <0.0f: use remaining window size minus abs(size) / Each axis can use a different mode, e.g. ImVec2(0,400).
+ // - BeginChild() returns false to indicate the window is collapsed or fully clipped, so you may early out and omit submitting anything to the window.
+ // Always call a matching EndChild() for each BeginChild() call, regardless of its return value.
+ // [Important: due to legacy reason, this is inconsistent with most other functions such as BeginMenu/EndMenu,
+ // BeginPopup/EndPopup, etc. where the EndXXX call should only be called if the corresponding BeginXXX function
+ // returned true. Begin and BeginChild are the only odd ones out. Will be fixed in a future update.]
+ IMGUI_API bool BeginChild(const char* str_id, const ImVec2& size = ImVec2(0, 0), bool border = false, ImGuiWindowFlags flags = 0);
+ IMGUI_API bool BeginChild(ImGuiID id, const ImVec2& size = ImVec2(0, 0), bool border = false, ImGuiWindowFlags flags = 0);
+ IMGUI_API void EndChild();
+
+ // Windows Utilities
+ // - 'current window' = the window we are appending into while inside a Begin()/End() block. 'next window' = next window we will Begin() into.
+ IMGUI_API bool IsWindowAppearing();
+ IMGUI_API bool IsWindowCollapsed();
+ IMGUI_API bool IsWindowFocused(ImGuiFocusedFlags flags=0); // is current window focused? or its root/child, depending on flags. see flags for options.
+ IMGUI_API bool IsWindowHovered(ImGuiHoveredFlags flags=0); // is current window hovered (and typically: not blocked by a popup/modal)? see flags for options. NB: If you are trying to check whether your mouse should be dispatched to imgui or to your app, you should use the 'io.WantCaptureMouse' boolean for that! Please read the FAQ!
+ IMGUI_API ImDrawList* GetWindowDrawList(); // get draw list associated to the current window, to append your own drawing primitives
+ IMGUI_API ImVec2 GetWindowPos(); // get current window position in screen space (useful if you want to do your own drawing via the DrawList API)
+ IMGUI_API ImVec2 GetWindowSize(); // get current window size
+ IMGUI_API float GetWindowWidth(); // get current window width (shortcut for GetWindowSize().x)
+ IMGUI_API float GetWindowHeight(); // get current window height (shortcut for GetWindowSize().y)
+
+ // Window manipulation
+ // - Prefer using SetNextXXX functions (before Begin) rather that SetXXX functions (after Begin).
+ IMGUI_API void SetNextWindowPos(const ImVec2& pos, ImGuiCond cond = 0, const ImVec2& pivot = ImVec2(0, 0)); // set next window position. call before Begin(). use pivot=(0.5f,0.5f) to center on given point, etc.
+ IMGUI_API void SetNextWindowSize(const ImVec2& size, ImGuiCond cond = 0); // set next window size. set axis to 0.0f to force an auto-fit on this axis. call before Begin()
+ IMGUI_API void SetNextWindowSizeConstraints(const ImVec2& size_min, const ImVec2& size_max, ImGuiSizeCallback custom_callback = NULL, void* custom_callback_data = NULL); // set next window size limits. use -1,-1 on either X/Y axis to preserve the current size. Sizes will be rounded down. Use callback to apply non-trivial programmatic constraints.
+ IMGUI_API void SetNextWindowContentSize(const ImVec2& size); // set next window content size (~ scrollable client area, which enforce the range of scrollbars). Not including window decorations (title bar, menu bar, etc.) nor WindowPadding. set an axis to 0.0f to leave it automatic. call before Begin()
+ IMGUI_API void SetNextWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // set next window collapsed state. call before Begin()
+ IMGUI_API void SetNextWindowFocus(); // set next window to be focused / top-most. call before Begin()
+ IMGUI_API void SetNextWindowBgAlpha(float alpha); // set next window background color alpha. helper to easily override the Alpha component of ImGuiCol_WindowBg/ChildBg/PopupBg. you may also use ImGuiWindowFlags_NoBackground.
+ IMGUI_API void SetWindowPos(const ImVec2& pos, ImGuiCond cond = 0); // (not recommended) set current window position - call within Begin()/End(). prefer using SetNextWindowPos(), as this may incur tearing and side-effects.
+ IMGUI_API void SetWindowSize(const ImVec2& size, ImGuiCond cond = 0); // (not recommended) set current window size - call within Begin()/End(). set to ImVec2(0, 0) to force an auto-fit. prefer using SetNextWindowSize(), as this may incur tearing and minor side-effects.
+ IMGUI_API void SetWindowCollapsed(bool collapsed, ImGuiCond cond = 0); // (not recommended) set current window collapsed state. prefer using SetNextWindowCollapsed().
+ IMGUI_API void SetWindowFocus(); // (not recommended) set current window to be focused / top-most. prefer using SetNextWindowFocus().
+ IMGUI_API void SetWindowFontScale(float scale); // [OBSOLETE] set font scale. Adjust IO.FontGlobalScale if you want to scale all windows. This is an old API! For correct scaling, prefer to reload font + rebuild ImFontAtlas + call style.ScaleAllSizes().
+ IMGUI_API void SetWindowPos(const char* name, const ImVec2& pos, ImGuiCond cond = 0); // set named window position.
+ IMGUI_API void SetWindowSize(const char* name, const ImVec2& size, ImGuiCond cond = 0); // set named window size. set axis to 0.0f to force an auto-fit on this axis.
+ IMGUI_API void SetWindowCollapsed(const char* name, bool collapsed, ImGuiCond cond = 0); // set named window collapsed state
+ IMGUI_API void SetWindowFocus(const char* name); // set named window to be focused / top-most. use NULL to remove focus.
+
+ // Content region
+ // - Retrieve available space from a given point. GetContentRegionAvail() is frequently useful.
+ // - Those functions are bound to be redesigned (they are confusing, incomplete and the Min/Max return values are in local window coordinates which increases confusion)
+ IMGUI_API ImVec2 GetContentRegionAvail(); // == GetContentRegionMax() - GetCursorPos()
+ IMGUI_API ImVec2 GetContentRegionMax(); // current content boundaries (typically window boundaries including scrolling, or current column boundaries), in windows coordinates
+ IMGUI_API ImVec2 GetWindowContentRegionMin(); // content boundaries min for the full window (roughly (0,0)-Scroll), in window coordinates
+ IMGUI_API ImVec2 GetWindowContentRegionMax(); // content boundaries max for the full window (roughly (0,0)+Size-Scroll) where Size can be override with SetNextWindowContentSize(), in window coordinates
+
+ // Windows Scrolling
+ IMGUI_API float GetScrollX(); // get scrolling amount [0 .. GetScrollMaxX()]
+ IMGUI_API float GetScrollY(); // get scrolling amount [0 .. GetScrollMaxY()]
+ IMGUI_API void SetScrollX(float scroll_x); // set scrolling amount [0 .. GetScrollMaxX()]
+ IMGUI_API void SetScrollY(float scroll_y); // set scrolling amount [0 .. GetScrollMaxY()]
+ IMGUI_API float GetScrollMaxX(); // get maximum scrolling amount ~~ ContentSize.x - WindowSize.x - DecorationsSize.x
+ IMGUI_API float GetScrollMaxY(); // get maximum scrolling amount ~~ ContentSize.y - WindowSize.y - DecorationsSize.y
+ IMGUI_API void SetScrollHereX(float center_x_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_x_ratio=0.0: left, 0.5: center, 1.0: right. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead.
+ IMGUI_API void SetScrollHereY(float center_y_ratio = 0.5f); // adjust scrolling amount to make current cursor position visible. center_y_ratio=0.0: top, 0.5: center, 1.0: bottom. When using to make a "default/current item" visible, consider using SetItemDefaultFocus() instead.
+ IMGUI_API void SetScrollFromPosX(float local_x, float center_x_ratio = 0.5f); // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position.
+ IMGUI_API void SetScrollFromPosY(float local_y, float center_y_ratio = 0.5f); // adjust scrolling amount to make given position visible. Generally GetCursorStartPos() + offset to compute a valid position.
+
+ // Parameters stacks (shared)
+ IMGUI_API void PushFont(ImFont* font); // use NULL as a shortcut to push default font
+ IMGUI_API void PopFont();
+ IMGUI_API void PushStyleColor(ImGuiCol idx, ImU32 col); // modify a style color. always use this if you modify the style after NewFrame().
+ IMGUI_API void PushStyleColor(ImGuiCol idx, const ImVec4& col);
+ IMGUI_API void PopStyleColor(int count = 1);
+ IMGUI_API void PushStyleVar(ImGuiStyleVar idx, float val); // modify a style float variable. always use this if you modify the style after NewFrame().
+ IMGUI_API void PushStyleVar(ImGuiStyleVar idx, const ImVec2& val); // modify a style ImVec2 variable. always use this if you modify the style after NewFrame().
+ IMGUI_API void PopStyleVar(int count = 1);
+ IMGUI_API void PushAllowKeyboardFocus(bool allow_keyboard_focus); // == tab stop enable. Allow focusing using TAB/Shift-TAB, enabled by default but you can disable it for certain widgets
+ IMGUI_API void PopAllowKeyboardFocus();
+ IMGUI_API void PushButtonRepeat(bool repeat); // in 'repeat' mode, Button*() functions return repeated true in a typematic manner (using io.KeyRepeatDelay/io.KeyRepeatRate setting). Note that you can call IsItemActive() after any Button() to tell if the button is held in the current frame.
+ IMGUI_API void PopButtonRepeat();
+
+ // Parameters stacks (current window)
+ IMGUI_API void PushItemWidth(float item_width); // push width of items for common large "item+label" widgets. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -FLT_MIN always align width to the right side).
+ IMGUI_API void PopItemWidth();
+ IMGUI_API void SetNextItemWidth(float item_width); // set width of the _next_ common large "item+label" widget. >0.0f: width in pixels, <0.0f align xx pixels to the right of window (so -FLT_MIN always align width to the right side)
+ IMGUI_API float CalcItemWidth(); // width of item given pushed settings and current cursor position. NOT necessarily the width of last item unlike most 'Item' functions.
+ IMGUI_API void PushTextWrapPos(float wrap_local_pos_x = 0.0f); // push word-wrapping position for Text*() commands. < 0.0f: no wrapping; 0.0f: wrap to end of window (or column); > 0.0f: wrap at 'wrap_pos_x' position in window local space
+ IMGUI_API void PopTextWrapPos();
+
+ // Style read access
+ // - Use the style editor (ShowStyleEditor() function) to interactively see what the colors are)
+ IMGUI_API ImFont* GetFont(); // get current font
+ IMGUI_API float GetFontSize(); // get current font size (= height in pixels) of current font with current scale applied
+ IMGUI_API ImVec2 GetFontTexUvWhitePixel(); // get UV coordinate for a while pixel, useful to draw custom shapes via the ImDrawList API
+ IMGUI_API ImU32 GetColorU32(ImGuiCol idx, float alpha_mul = 1.0f); // retrieve given style color with style alpha applied and optional extra alpha multiplier, packed as a 32-bit value suitable for ImDrawList
+ IMGUI_API ImU32 GetColorU32(const ImVec4& col); // retrieve given color with style alpha applied, packed as a 32-bit value suitable for ImDrawList
+ IMGUI_API ImU32 GetColorU32(ImU32 col); // retrieve given color with style alpha applied, packed as a 32-bit value suitable for ImDrawList
+ IMGUI_API const ImVec4& GetStyleColorVec4(ImGuiCol idx); // retrieve style color as stored in ImGuiStyle structure. use to feed back into PushStyleColor(), otherwise use GetColorU32() to get style color with style alpha baked in.
+
+ // Cursor / Layout
+ // - By "cursor" we mean the current output position.
+ // - The typical widget behavior is to output themselves at the current cursor position, then move the cursor one line down.
+ // - You can call SameLine() between widgets to undo the last carriage return and output at the right of the preceding widget.
+ // - Attention! We currently have inconsistencies between window-local and absolute positions we will aim to fix with future API:
+ // Window-local coordinates: SameLine(), GetCursorPos(), SetCursorPos(), GetCursorStartPos(), GetContentRegionMax(), GetWindowContentRegion*(), PushTextWrapPos()
+ // Absolute coordinate: GetCursorScreenPos(), SetCursorScreenPos(), all ImDrawList:: functions.
+ IMGUI_API void Separator(); // separator, generally horizontal. inside a menu bar or in horizontal layout mode, this becomes a vertical separator.
+ IMGUI_API void SameLine(float offset_from_start_x=0.0f, float spacing=-1.0f); // call between widgets or groups to layout them horizontally. X position given in window coordinates.
+ IMGUI_API void NewLine(); // undo a SameLine() or force a new line when in an horizontal-layout context.
+ IMGUI_API void Spacing(); // add vertical spacing.
+ IMGUI_API void Dummy(const ImVec2& size); // add a dummy item of given size. unlike InvisibleButton(), Dummy() won't take the mouse click or be navigable into.
+ IMGUI_API void Indent(float indent_w = 0.0f); // move content position toward the right, by indent_w, or style.IndentSpacing if indent_w <= 0
+ IMGUI_API void Unindent(float indent_w = 0.0f); // move content position back to the left, by indent_w, or style.IndentSpacing if indent_w <= 0
+ IMGUI_API void BeginGroup(); // lock horizontal starting position
+ IMGUI_API void EndGroup(); // unlock horizontal starting position + capture the whole group bounding box into one "item" (so you can use IsItemHovered() or layout primitives such as SameLine() on whole group, etc.)
+ IMGUI_API ImVec2 GetCursorPos(); // cursor position in window coordinates (relative to window position)
+ IMGUI_API float GetCursorPosX(); // (some functions are using window-relative coordinates, such as: GetCursorPos, GetCursorStartPos, GetContentRegionMax, GetWindowContentRegion* etc.
+ IMGUI_API float GetCursorPosY(); // other functions such as GetCursorScreenPos or everything in ImDrawList::
+ IMGUI_API void SetCursorPos(const ImVec2& local_pos); // are using the main, absolute coordinate system.
+ IMGUI_API void SetCursorPosX(float local_x); // GetWindowPos() + GetCursorPos() == GetCursorScreenPos() etc.)
+ IMGUI_API void SetCursorPosY(float local_y); //
+ IMGUI_API ImVec2 GetCursorStartPos(); // initial cursor position in window coordinates
+ IMGUI_API ImVec2 GetCursorScreenPos(); // cursor position in absolute coordinates (useful to work with ImDrawList API). generally top-left == GetMainViewport()->Pos == (0,0) in single viewport mode, and bottom-right == GetMainViewport()->Pos+Size == io.DisplaySize in single-viewport mode.
+ IMGUI_API void SetCursorScreenPos(const ImVec2& pos); // cursor position in absolute coordinates
+ IMGUI_API void AlignTextToFramePadding(); // vertically align upcoming text baseline to FramePadding.y so that it will align properly to regularly framed items (call if you have text on a line before a framed item)
+ IMGUI_API float GetTextLineHeight(); // ~ FontSize
+ IMGUI_API float GetTextLineHeightWithSpacing(); // ~ FontSize + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of text)
+ IMGUI_API float GetFrameHeight(); // ~ FontSize + style.FramePadding.y * 2
+ IMGUI_API float GetFrameHeightWithSpacing(); // ~ FontSize + style.FramePadding.y * 2 + style.ItemSpacing.y (distance in pixels between 2 consecutive lines of framed widgets)
+
+ // ID stack/scopes
+ // Read the FAQ (docs/FAQ.md or http://dearimgui.org/faq) for more details about how ID are handled in dear imgui.
+ // - Those questions are answered and impacted by understanding of the ID stack system:
+ // - "Q: Why is my widget not reacting when I click on it?"
+ // - "Q: How can I have widgets with an empty label?"
+ // - "Q: How can I have multiple widgets with the same label?"
+ // - Short version: ID are hashes of the entire ID stack. If you are creating widgets in a loop you most likely
+ // want to push a unique identifier (e.g. object pointer, loop index) to uniquely differentiate them.
+ // - You can also use the "Label##foobar" syntax within widget label to distinguish them from each others.
+ // - In this header file we use the "label"/"name" terminology to denote a string that will be displayed + used as an ID,
+ // whereas "str_id" denote a string that is only used as an ID and not normally displayed.
+ IMGUI_API void PushID(const char* str_id); // push string into the ID stack (will hash string).
+ IMGUI_API void PushID(const char* str_id_begin, const char* str_id_end); // push string into the ID stack (will hash string).
+ IMGUI_API void PushID(const void* ptr_id); // push pointer into the ID stack (will hash pointer).
+ IMGUI_API void PushID(int int_id); // push integer into the ID stack (will hash integer).
+ IMGUI_API void PopID(); // pop from the ID stack.
+ IMGUI_API ImGuiID GetID(const char* str_id); // calculate unique ID (hash of whole ID stack + given parameter). e.g. if you want to query into ImGuiStorage yourself
+ IMGUI_API ImGuiID GetID(const char* str_id_begin, const char* str_id_end);
+ IMGUI_API ImGuiID GetID(const void* ptr_id);
+
+ // Widgets: Text
+ IMGUI_API void TextUnformatted(const char* text, const char* text_end = NULL); // raw text without formatting. Roughly equivalent to Text("%s", text) but: A) doesn't require null terminated string if 'text_end' is specified, B) it's faster, no memory copy is done, no buffer size limits, recommended for long chunks of text.
+ IMGUI_API void Text(const char* fmt, ...) IM_FMTARGS(1); // formatted text
+ IMGUI_API void TextV(const char* fmt, va_list args) IM_FMTLIST(1);
+ IMGUI_API void TextColored(const ImVec4& col, const char* fmt, ...) IM_FMTARGS(2); // shortcut for PushStyleColor(ImGuiCol_Text, col); Text(fmt, ...); PopStyleColor();
+ IMGUI_API void TextColoredV(const ImVec4& col, const char* fmt, va_list args) IM_FMTLIST(2);
+ IMGUI_API void TextDisabled(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); Text(fmt, ...); PopStyleColor();
+ IMGUI_API void TextDisabledV(const char* fmt, va_list args) IM_FMTLIST(1);
+ IMGUI_API void TextWrapped(const char* fmt, ...) IM_FMTARGS(1); // shortcut for PushTextWrapPos(0.0f); Text(fmt, ...); PopTextWrapPos();. Note that this won't work on an auto-resizing window if there's no other widgets to extend the window width, yoy may need to set a size using SetNextWindowSize().
+ IMGUI_API void TextWrappedV(const char* fmt, va_list args) IM_FMTLIST(1);
+ IMGUI_API void LabelText(const char* label, const char* fmt, ...) IM_FMTARGS(2); // display text+label aligned the same way as value+label widgets
+ IMGUI_API void LabelTextV(const char* label, const char* fmt, va_list args) IM_FMTLIST(2);
+ IMGUI_API void BulletText(const char* fmt, ...) IM_FMTARGS(1); // shortcut for Bullet()+Text()
+ IMGUI_API void BulletTextV(const char* fmt, va_list args) IM_FMTLIST(1);
+
+ // Widgets: Main
+ // - Most widgets return true when the value has been changed or when pressed/selected
+ // - You may also use one of the many IsItemXXX functions (e.g. IsItemActive, IsItemHovered, etc.) to query widget state.
+ IMGUI_API bool Button(const char* label, const ImVec2& size = ImVec2(0, 0)); // button
+ IMGUI_API bool SmallButton(const char* label); // button with FramePadding=(0,0) to easily embed within text
+ IMGUI_API bool InvisibleButton(const char* str_id, const ImVec2& size, ImGuiButtonFlags flags = 0); // flexible button behavior without the visuals, frequently useful to build custom behaviors using the public api (along with IsItemActive, IsItemHovered, etc.)
+ IMGUI_API bool ArrowButton(const char* str_id, ImGuiDir dir); // square button with an arrow shape
+ IMGUI_API void Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0, 0), const ImVec2& uv1 = ImVec2(1,1), const ImVec4& tint_col = ImVec4(1,1,1,1), const ImVec4& border_col = ImVec4(0,0,0,0));
+ IMGUI_API bool ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0 = ImVec2(0, 0), const ImVec2& uv1 = ImVec2(1,1), int frame_padding = -1, const ImVec4& bg_col = ImVec4(0,0,0,0), const ImVec4& tint_col = ImVec4(1,1,1,1)); // <0 frame_padding uses default frame padding settings. 0 for no padding
+ IMGUI_API bool Checkbox(const char* label, bool* v);
+ IMGUI_API bool CheckboxFlags(const char* label, int* flags, int flags_value);
+ IMGUI_API bool CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value);
+ IMGUI_API bool RadioButton(const char* label, bool active); // use with e.g. if (RadioButton("one", my_value==1)) { my_value = 1; }
+ IMGUI_API bool RadioButton(const char* label, int* v, int v_button); // shortcut to handle the above pattern when value is an integer
+ IMGUI_API void ProgressBar(float fraction, const ImVec2& size_arg = ImVec2(-FLT_MIN, 0), const char* overlay = NULL);
+ IMGUI_API void Bullet(); // draw a small circle + keep the cursor on the same line. advance cursor x position by GetTreeNodeToLabelSpacing(), same distance that TreeNode() uses
+
+ // Widgets: Combo Box
+ // - The BeginCombo()/EndCombo() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() items.
+ // - The old Combo() api are helpers over BeginCombo()/EndCombo() which are kept available for convenience purpose. This is analogous to how ListBox are created.
+ IMGUI_API bool BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags = 0);
+ IMGUI_API void EndCombo(); // only call EndCombo() if BeginCombo() returns true!
+ IMGUI_API bool Combo(const char* label, int* current_item, const char* const items[], int items_count, int popup_max_height_in_items = -1);
+ IMGUI_API bool Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int popup_max_height_in_items = -1); // Separate items with \0 within a string, end item-list with \0\0. e.g. "One\0Two\0Three\0"
+ IMGUI_API bool Combo(const char* label, int* current_item, bool(*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int popup_max_height_in_items = -1);
+
+ // Widgets: Drag Sliders
+ // - CTRL+Click on any drag box to turn them into an input box. Manually input values aren't clamped by default and can go off-bounds. Use ImGuiSliderFlags_AlwaysClamp to always clamp.
+ // - For all the Float2/Float3/Float4/Int2/Int3/Int4 versions of every functions, note that a 'float v[X]' function argument is the same as 'float* v',
+ // the array syntax is just a way to document the number of elements that are expected to be accessible. You can pass address of your first element out of a contiguous set, e.g. &myvector.x
+ // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
+ // - Format string may also be set to NULL or use the default format ("%f" or "%d").
+ // - Speed are per-pixel of mouse movement (v_speed=0.2f: mouse needs to move by 5 pixels to increase value by 1). For gamepad/keyboard navigation, minimum speed is Max(v_speed, minimum_step_at_given_precision).
+ // - Use v_min < v_max to clamp edits to given limits. Note that CTRL+Click manual input can override those limits if ImGuiSliderFlags_AlwaysClamp is not used.
+ // - Use v_max = FLT_MAX / INT_MAX etc to avoid clamping to a maximum, same with v_min = -FLT_MAX / INT_MIN to avoid clamping to a minimum.
+ // - We use the same sets of flags for DragXXX() and SliderXXX() functions as the features are the same and it makes it easier to swap them.
+ // - Legacy: Pre-1.78 there are DragXXX() function signatures that takes a final `float power=1.0f' argument instead of the `ImGuiSliderFlags flags=0' argument.
+ // If you get a warning converting a float to ImGuiSliderFlags, read https://github.com/ocornut/imgui/issues/3361
+ IMGUI_API bool DragFloat(const char* label, float* v, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiSliderFlags flags = 0); // If v_min >= v_max we have no bound
+ IMGUI_API bool DragFloat2(const char* label, float v[2], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool DragFloat3(const char* label, float v[3], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool DragFloat4(const char* label, float v[4], float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed = 1.0f, float v_min = 0.0f, float v_max = 0.0f, const char* format = "%.3f", const char* format_max = NULL, ImGuiSliderFlags flags = 0);
+ IMGUI_API bool DragInt(const char* label, int* v, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiSliderFlags flags = 0); // If v_min >= v_max we have no bound
+ IMGUI_API bool DragInt2(const char* label, int v[2], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool DragInt3(const char* label, int v[3], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool DragInt4(const char* label, int v[4], float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed = 1.0f, int v_min = 0, int v_max = 0, const char* format = "%d", const char* format_max = NULL, ImGuiSliderFlags flags = 0);
+ IMGUI_API bool DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed = 1.0f, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, ImGuiSliderFlags flags = 0);
+ IMGUI_API bool DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed = 1.0f, const void* p_min = NULL, const void* p_max = NULL, const char* format = NULL, ImGuiSliderFlags flags = 0);
+
+ // Widgets: Regular Sliders
+ // - CTRL+Click on any slider to turn them into an input box. Manually input values aren't clamped by default and can go off-bounds. Use ImGuiSliderFlags_AlwaysClamp to always clamp.
+ // - Adjust format string to decorate the value with a prefix, a suffix, or adapt the editing and display precision e.g. "%.3f" -> 1.234; "%5.2f secs" -> 01.23 secs; "Biscuit: %.0f" -> Biscuit: 1; etc.
+ // - Format string may also be set to NULL or use the default format ("%f" or "%d").
+ // - Legacy: Pre-1.78 there are SliderXXX() function signatures that takes a final `float power=1.0f' argument instead of the `ImGuiSliderFlags flags=0' argument.
+ // If you get a warning converting a float to ImGuiSliderFlags, read https://github.com/ocornut/imgui/issues/3361
+ IMGUI_API bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0); // adjust format to decorate the value with a prefix or a suffix for in-slider labels or unit display.
+ IMGUI_API bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool SliderAngle(const char* label, float* v_rad, float v_degrees_min = -360.0f, float v_degrees_max = +360.0f, const char* format = "%.0f deg", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool SliderInt(const char* label, int* v, int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0);
+ IMGUI_API bool SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0);
+ IMGUI_API bool VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format = "%.3f", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format = "%d", ImGuiSliderFlags flags = 0);
+ IMGUI_API bool VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format = NULL, ImGuiSliderFlags flags = 0);
+
+ // Widgets: Input with Keyboard
+ // - If you want to use InputText() with std::string or any custom dynamic string type, see misc/cpp/imgui_stdlib.h and comments in imgui_demo.cpp.
+ // - Most of the ImGuiInputTextFlags flags are only useful for InputText() and not for InputFloatX, InputIntX, InputDouble etc.
+ IMGUI_API bool InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
+ IMGUI_API bool InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size = ImVec2(0, 0), ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
+ IMGUI_API bool InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags = 0, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
+ IMGUI_API bool InputFloat(const char* label, float* v, float step = 0.0f, float step_fast = 0.0f, const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputFloat2(const char* label, float v[2], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputFloat3(const char* label, float v[3], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputFloat4(const char* label, float v[4], const char* format = "%.3f", ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputInt(const char* label, int* v, int step = 1, int step_fast = 100, ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputDouble(const char* label, double* v, double step = 0.0, double step_fast = 0.0, const char* format = "%.6f", ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0);
+ IMGUI_API bool InputScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_step = NULL, const void* p_step_fast = NULL, const char* format = NULL, ImGuiInputTextFlags flags = 0);
+
+ // Widgets: Color Editor/Picker (tip: the ColorEdit* functions have a little color square that can be left-clicked to open a picker, and right-clicked to open an option menu.)
+ // - Note that in C++ a 'float v[X]' function argument is the _same_ as 'float* v', the array syntax is just a way to document the number of elements that are expected to be accessible.
+ // - You can pass the address of a first float element out of a contiguous structure, e.g. &myvector.x
+ IMGUI_API bool ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
+ IMGUI_API bool ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags = 0);
+ IMGUI_API bool ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags = 0);
+ IMGUI_API bool ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags = 0, const float* ref_col = NULL);
+ IMGUI_API bool ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags = 0, const ImVec2& size = ImVec2(0, 0)); // display a color square/button, hover for details, return true when pressed.
+ IMGUI_API void SetColorEditOptions(ImGuiColorEditFlags flags); // initialize current options (generally on application startup) if you want to select a default format, picker type, etc. User will be able to change many settings, unless you pass the _NoOptions flag to your calls.
+
+ // Widgets: Trees
+ // - TreeNode functions return true when the node is open, in which case you need to also call TreePop() when you are finished displaying the tree node contents.
+ IMGUI_API bool TreeNode(const char* label);
+ IMGUI_API bool TreeNode(const char* str_id, const char* fmt, ...) IM_FMTARGS(2); // helper variation to easily decorelate the id from the displayed string. Read the FAQ about why and how to use ID. to align arbitrary text at the same level as a TreeNode() you can use Bullet().
+ IMGUI_API bool TreeNode(const void* ptr_id, const char* fmt, ...) IM_FMTARGS(2); // "
+ IMGUI_API bool TreeNodeV(const char* str_id, const char* fmt, va_list args) IM_FMTLIST(2);
+ IMGUI_API bool TreeNodeV(const void* ptr_id, const char* fmt, va_list args) IM_FMTLIST(2);
+ IMGUI_API bool TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags = 0);
+ IMGUI_API bool TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
+ IMGUI_API bool TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...) IM_FMTARGS(3);
+ IMGUI_API bool TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
+ IMGUI_API bool TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args) IM_FMTLIST(3);
+ IMGUI_API void TreePush(const char* str_id); // ~ Indent()+PushId(). Already called by TreeNode() when returning true, but you can call TreePush/TreePop yourself if desired.
+ IMGUI_API void TreePush(const void* ptr_id = NULL); // "
+ IMGUI_API void TreePop(); // ~ Unindent()+PopId()
+ IMGUI_API float GetTreeNodeToLabelSpacing(); // horizontal distance preceding label when using TreeNode*() or Bullet() == (g.FontSize + style.FramePadding.x*2) for a regular unframed TreeNode
+ IMGUI_API bool CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags = 0); // if returning 'true' the header is open. doesn't indent nor push on ID stack. user doesn't have to call TreePop().
+ IMGUI_API bool CollapsingHeader(const char* label, bool* p_visible, ImGuiTreeNodeFlags flags = 0); // when 'p_visible != NULL': if '*p_visible==true' display an additional small close button on upper right of the header which will set the bool to false when clicked, if '*p_visible==false' don't display the header.
+ IMGUI_API void SetNextItemOpen(bool is_open, ImGuiCond cond = 0); // set next TreeNode/CollapsingHeader open state.
+
+ // Widgets: Selectables
+ // - A selectable highlights when hovered, and can display another color when selected.
+ // - Neighbors selectable extend their highlight bounds in order to leave no gap between them. This is so a series of selected Selectable appear contiguous.
+ IMGUI_API bool Selectable(const char* label, bool selected = false, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0, 0)); // "bool selected" carry the selection state (read-only). Selectable() is clicked is returns true so you can modify your selection state. size.x==0.0: use remaining width, size.x>0.0: specify width. size.y==0.0: use label height, size.y>0.0: specify height
+ IMGUI_API bool Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags = 0, const ImVec2& size = ImVec2(0, 0)); // "bool* p_selected" point to the selection state (read-write), as a convenient helper.
+
+ // Widgets: List Boxes
+ // - This is essentially a thin wrapper to using BeginChild/EndChild with some stylistic changes.
+ // - The BeginListBox()/EndListBox() api allows you to manage your contents and selection state however you want it, by creating e.g. Selectable() or any items.
+ // - The simplified/old ListBox() api are helpers over BeginListBox()/EndListBox() which are kept available for convenience purpose. This is analoguous to how Combos are created.
+ // - Choose frame width: size.x > 0.0f: custom / size.x < 0.0f or -FLT_MIN: right-align / size.x = 0.0f (default): use current ItemWidth
+ // - Choose frame height: size.y > 0.0f: custom / size.y < 0.0f or -FLT_MIN: bottom-align / size.y = 0.0f (default): arbitrary default height which can fit ~7 items
+ IMGUI_API bool BeginListBox(const char* label, const ImVec2& size = ImVec2(0, 0)); // open a framed scrolling region
+ IMGUI_API void EndListBox(); // only call EndListBox() if BeginListBox() returned true!
+ IMGUI_API bool ListBox(const char* label, int* current_item, const char* const items[], int items_count, int height_in_items = -1);
+ IMGUI_API bool ListBox(const char* label, int* current_item, bool (*items_getter)(void* data, int idx, const char** out_text), void* data, int items_count, int height_in_items = -1);
+
+ // Widgets: Data Plotting
+ // - Consider using ImPlot (https://github.com/epezent/implot) which is much better!
+ IMGUI_API void PlotLines(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0), int stride = sizeof(float));
+ IMGUI_API void PlotLines(const char* label, float(*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0));
+ IMGUI_API void PlotHistogram(const char* label, const float* values, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0), int stride = sizeof(float));
+ IMGUI_API void PlotHistogram(const char* label, float(*values_getter)(void* data, int idx), void* data, int values_count, int values_offset = 0, const char* overlay_text = NULL, float scale_min = FLT_MAX, float scale_max = FLT_MAX, ImVec2 graph_size = ImVec2(0, 0));
+
+ // Widgets: Value() Helpers.
+ // - Those are merely shortcut to calling Text() with a format string. Output single value in "name: value" format (tip: freely declare more in your code to handle your types. you can add functions to the ImGui namespace)
+ IMGUI_API void Value(const char* prefix, bool b);
+ IMGUI_API void Value(const char* prefix, int v);
+ IMGUI_API void Value(const char* prefix, unsigned int v);
+ IMGUI_API void Value(const char* prefix, float v, const char* float_format = NULL);
+
+ // Widgets: Menus
+ // - Use BeginMenuBar() on a window ImGuiWindowFlags_MenuBar to append to its menu bar.
+ // - Use BeginMainMenuBar() to create a menu bar at the top of the screen and append to it.
+ // - Use BeginMenu() to create a menu. You can call BeginMenu() multiple time with the same identifier to append more items to it.
+ // - Not that MenuItem() keyboardshortcuts are displayed as a convenience but _not processed_ by Dear ImGui at the moment.
+ IMGUI_API bool BeginMenuBar(); // append to menu-bar of current window (requires ImGuiWindowFlags_MenuBar flag set on parent window).
+ IMGUI_API void EndMenuBar(); // only call EndMenuBar() if BeginMenuBar() returns true!
+ IMGUI_API bool BeginMainMenuBar(); // create and append to a full screen menu-bar.
+ IMGUI_API void EndMainMenuBar(); // only call EndMainMenuBar() if BeginMainMenuBar() returns true!
+ IMGUI_API bool BeginMenu(const char* label, bool enabled = true); // create a sub-menu entry. only call EndMenu() if this returns true!
+ IMGUI_API void EndMenu(); // only call EndMenu() if BeginMenu() returns true!
+ IMGUI_API bool MenuItem(const char* label, const char* shortcut = NULL, bool selected = false, bool enabled = true); // return true when activated.
+ IMGUI_API bool MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled = true); // return true when activated + toggle (*p_selected) if p_selected != NULL
+
+ // Tooltips
+ // - Tooltip are windows following the mouse. They do not take focus away.
+ IMGUI_API void BeginTooltip(); // begin/append a tooltip window. to create full-featured tooltip (with any kind of items).
+ IMGUI_API void EndTooltip();
+ IMGUI_API void SetTooltip(const char* fmt, ...) IM_FMTARGS(1); // set a text-only tooltip, typically use with ImGui::IsItemHovered(). override any previous call to SetTooltip().
+ IMGUI_API void SetTooltipV(const char* fmt, va_list args) IM_FMTLIST(1);
+
+ // Popups, Modals
+ // - They block normal mouse hovering detection (and therefore most mouse interactions) behind them.
+ // - If not modal: they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
+ // - Their visibility state (~bool) is held internally instead of being held by the programmer as we are used to with regular Begin*() calls.
+ // - The 3 properties above are related: we need to retain popup visibility state in the library because popups may be closed as any time.
+ // - You can bypass the hovering restriction by using ImGuiHoveredFlags_AllowWhenBlockedByPopup when calling IsItemHovered() or IsWindowHovered().
+ // - IMPORTANT: Popup identifiers are relative to the current ID stack, so OpenPopup and BeginPopup generally needs to be at the same level of the stack.
+ // This is sometimes leading to confusing mistakes. May rework this in the future.
+
+ // Popups: begin/end functions
+ // - BeginPopup(): query popup state, if open start appending into the window. Call EndPopup() afterwards. ImGuiWindowFlags are forwarded to the window.
+ // - BeginPopupModal(): block every interactions behind the window, cannot be closed by user, add a dimming background, has a title bar.
+ IMGUI_API bool BeginPopup(const char* str_id, ImGuiWindowFlags flags = 0); // return true if the popup is open, and you can start outputting to it.
+ IMGUI_API bool BeginPopupModal(const char* name, bool* p_open = NULL, ImGuiWindowFlags flags = 0); // return true if the modal is open, and you can start outputting to it.
+ IMGUI_API void EndPopup(); // only call EndPopup() if BeginPopupXXX() returns true!
+
+ // Popups: open/close functions
+ // - OpenPopup(): set popup state to open. ImGuiPopupFlags are available for opening options.
+ // - If not modal: they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
+ // - CloseCurrentPopup(): use inside the BeginPopup()/EndPopup() scope to close manually.
+ // - CloseCurrentPopup() is called by default by Selectable()/MenuItem() when activated (FIXME: need some options).
+ // - Use ImGuiPopupFlags_NoOpenOverExistingPopup to avoid opening a popup if there's already one at the same level. This is equivalent to e.g. testing for !IsAnyPopupOpen() prior to OpenPopup().
+ // - Use IsWindowAppearing() after BeginPopup() to tell if a window just opened.
+ // - IMPORTANT: Notice that for OpenPopupOnItemClick() we exceptionally default flags to 1 (== ImGuiPopupFlags_MouseButtonRight) for backward compatibility with older API taking 'int mouse_button = 1' parameter
+ IMGUI_API void OpenPopup(const char* str_id, ImGuiPopupFlags popup_flags = 0); // call to mark popup as open (don't call every frame!).
+ IMGUI_API void OpenPopup(ImGuiID id, ImGuiPopupFlags popup_flags = 0); // id overload to facilitate calling from nested stacks
+ IMGUI_API void OpenPopupOnItemClick(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // helper to open popup when clicked on last item. Default to ImGuiPopupFlags_MouseButtonRight == 1. (note: actually triggers on the mouse _released_ event to be consistent with popup behaviors)
+ IMGUI_API void CloseCurrentPopup(); // manually close the popup we have begin-ed into.
+
+ // Popups: open+begin combined functions helpers
+ // - Helpers to do OpenPopup+BeginPopup where the Open action is triggered by e.g. hovering an item and right-clicking.
+ // - They are convenient to easily create context menus, hence the name.
+ // - IMPORTANT: Notice that BeginPopupContextXXX takes ImGuiPopupFlags just like OpenPopup() and unlike BeginPopup(). For full consistency, we may add ImGuiWindowFlags to the BeginPopupContextXXX functions in the future.
+ // - IMPORTANT: Notice that we exceptionally default their flags to 1 (== ImGuiPopupFlags_MouseButtonRight) for backward compatibility with older API taking 'int mouse_button = 1' parameter, so if you add other flags remember to re-add the ImGuiPopupFlags_MouseButtonRight.
+ IMGUI_API bool BeginPopupContextItem(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // open+begin popup when clicked on last item. Use str_id==NULL to associate the popup to previous item. If you want to use that on a non-interactive item such as Text() you need to pass in an explicit ID here. read comments in .cpp!
+ IMGUI_API bool BeginPopupContextWindow(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1);// open+begin popup when clicked on current window.
+ IMGUI_API bool BeginPopupContextVoid(const char* str_id = NULL, ImGuiPopupFlags popup_flags = 1); // open+begin popup when clicked in void (where there are no windows).
+
+ // Popups: query functions
+ // - IsPopupOpen(): return true if the popup is open at the current BeginPopup() level of the popup stack.
+ // - IsPopupOpen() with ImGuiPopupFlags_AnyPopupId: return true if any popup is open at the current BeginPopup() level of the popup stack.
+ // - IsPopupOpen() with ImGuiPopupFlags_AnyPopupId + ImGuiPopupFlags_AnyPopupLevel: return true if any popup is open.
+ IMGUI_API bool IsPopupOpen(const char* str_id, ImGuiPopupFlags flags = 0); // return true if the popup is open.
+
+ // Tables
+ // - Full-featured replacement for old Columns API.
+ // - See Demo->Tables for demo code. See top of imgui_tables.cpp for general commentary.
+ // - See ImGuiTableFlags_ and ImGuiTableColumnFlags_ enums for a description of available flags.
+ // The typical call flow is:
+ // - 1. Call BeginTable(), early out if returning false.
+ // - 2. Optionally call TableSetupColumn() to submit column name/flags/defaults.
+ // - 3. Optionally call TableSetupScrollFreeze() to request scroll freezing of columns/rows.
+ // - 4. Optionally call TableHeadersRow() to submit a header row. Names are pulled from TableSetupColumn() data.
+ // - 5. Populate contents:
+ // - In most situations you can use TableNextRow() + TableSetColumnIndex(N) to start appending into a column.
+ // - If you are using tables as a sort of grid, where every columns is holding the same type of contents,
+ // you may prefer using TableNextColumn() instead of TableNextRow() + TableSetColumnIndex().
+ // TableNextColumn() will automatically wrap-around into the next row if needed.
+ // - IMPORTANT: Comparatively to the old Columns() API, we need to call TableNextColumn() for the first column!
+ // - Summary of possible call flow:
+ // --------------------------------------------------------------------------------------------------------
+ // TableNextRow() -> TableSetColumnIndex(0) -> Text("Hello 0") -> TableSetColumnIndex(1) -> Text("Hello 1") // OK
+ // TableNextRow() -> TableNextColumn() -> Text("Hello 0") -> TableNextColumn() -> Text("Hello 1") // OK
+ // TableNextColumn() -> Text("Hello 0") -> TableNextColumn() -> Text("Hello 1") // OK: TableNextColumn() automatically gets to next row!
+ // TableNextRow() -> Text("Hello 0") // Not OK! Missing TableSetColumnIndex() or TableNextColumn()! Text will not appear!
+ // --------------------------------------------------------------------------------------------------------
+ // - 5. Call EndTable()
+ IMGUI_API bool BeginTable(const char* str_id, int column, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0.0f, 0.0f), float inner_width = 0.0f);
+ IMGUI_API void EndTable(); // only call EndTable() if BeginTable() returns true!
+ IMGUI_API void TableNextRow(ImGuiTableRowFlags row_flags = 0, float min_row_height = 0.0f); // append into the first cell of a new row.
+ IMGUI_API bool TableNextColumn(); // append into the next column (or first column of next row if currently in last column). Return true when column is visible.
+ IMGUI_API bool TableSetColumnIndex(int column_n); // append into the specified column. Return true when column is visible.
+
+ // Tables: Headers & Columns declaration
+ // - Use TableSetupColumn() to specify label, resizing policy, default width/weight, id, various other flags etc.
+ // - Use TableHeadersRow() to create a header row and automatically submit a TableHeader() for each column.
+ // Headers are required to perform: reordering, sorting, and opening the context menu.
+ // The context menu can also be made available in columns body using ImGuiTableFlags_ContextMenuInBody.
+ // - You may manually submit headers using TableNextRow() + TableHeader() calls, but this is only useful in
+ // some advanced use cases (e.g. adding custom widgets in header row).
+ // - Use TableSetupScrollFreeze() to lock columns/rows so they stay visible when scrolled.
+ IMGUI_API void TableSetupColumn(const char* label, ImGuiTableColumnFlags flags = 0, float init_width_or_weight = 0.0f, ImGuiID user_id = 0);
+ IMGUI_API void TableSetupScrollFreeze(int cols, int rows); // lock columns/rows so they stay visible when scrolled.
+ IMGUI_API void TableHeadersRow(); // submit all headers cells based on data provided to TableSetupColumn() + submit context menu
+ IMGUI_API void TableHeader(const char* label); // submit one header cell manually (rarely used)
+
+ // Tables: Sorting & Miscellaneous functions
+ // - Sorting: call TableGetSortSpecs() to retrieve latest sort specs for the table. NULL when not sorting.
+ // When 'sort_specs->SpecsDirty == true' you should sort your data. It will be true when sorting specs have
+ // changed since last call, or the first time. Make sure to set 'SpecsDirty = false' after sorting,
+ // else you may wastefully sort your data every frame!
+ // - Functions args 'int column_n' treat the default value of -1 as the same as passing the current column index.
+ IMGUI_API ImGuiTableSortSpecs* TableGetSortSpecs(); // get latest sort specs for the table (NULL if not sorting). Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable().
+ IMGUI_API int TableGetColumnCount(); // return number of columns (value passed to BeginTable)
+ IMGUI_API int TableGetColumnIndex(); // return current column index.
+ IMGUI_API int TableGetRowIndex(); // return current row index.
+ IMGUI_API const char* TableGetColumnName(int column_n = -1); // return "" if column didn't have a name declared by TableSetupColumn(). Pass -1 to use current column.
+ IMGUI_API ImGuiTableColumnFlags TableGetColumnFlags(int column_n = -1); // return column flags so you can query their Enabled/Visible/Sorted/Hovered status flags. Pass -1 to use current column.
+ IMGUI_API void TableSetColumnEnabled(int column_n, bool v);// change user accessible enabled/disabled state of a column. Set to false to hide the column. User can use the context menu to change this themselves (right-click in headers, or right-click in columns body with ImGuiTableFlags_ContextMenuInBody)
+ IMGUI_API void TableSetBgColor(ImGuiTableBgTarget target, ImU32 color, int column_n = -1); // change the color of a cell, row, or column. See ImGuiTableBgTarget_ flags for details.
+
+ // Legacy Columns API (prefer using Tables!)
+ // - You can also use SameLine(pos_x) to mimic simplified columns.
+ IMGUI_API void Columns(int count = 1, const char* id = NULL, bool border = true);
+ IMGUI_API void NextColumn(); // next column, defaults to current row or next row if the current row is finished
+ IMGUI_API int GetColumnIndex(); // get current column index
+ IMGUI_API float GetColumnWidth(int column_index = -1); // get column width (in pixels). pass -1 to use current column
+ IMGUI_API void SetColumnWidth(int column_index, float width); // set column width (in pixels). pass -1 to use current column
+ IMGUI_API float GetColumnOffset(int column_index = -1); // get position of column line (in pixels, from the left side of the contents region). pass -1 to use current column, otherwise 0..GetColumnsCount() inclusive. column 0 is typically 0.0f
+ IMGUI_API void SetColumnOffset(int column_index, float offset_x); // set position of column line (in pixels, from the left side of the contents region). pass -1 to use current column
+ IMGUI_API int GetColumnsCount();
+
+ // Tab Bars, Tabs
+ IMGUI_API bool BeginTabBar(const char* str_id, ImGuiTabBarFlags flags = 0); // create and append into a TabBar
+ IMGUI_API void EndTabBar(); // only call EndTabBar() if BeginTabBar() returns true!
+ IMGUI_API bool BeginTabItem(const char* label, bool* p_open = NULL, ImGuiTabItemFlags flags = 0); // create a Tab. Returns true if the Tab is selected.
+ IMGUI_API void EndTabItem(); // only call EndTabItem() if BeginTabItem() returns true!
+ IMGUI_API bool TabItemButton(const char* label, ImGuiTabItemFlags flags = 0); // create a Tab behaving like a button. return true when clicked. cannot be selected in the tab bar.
+ IMGUI_API void SetTabItemClosed(const char* tab_or_docked_window_label); // notify TabBar or Docking system of a closed tab/window ahead (useful to reduce visual flicker on reorderable tab bars). For tab-bar: call after BeginTabBar() and before Tab submissions. Otherwise call with a window name.
+
+ // Logging/Capture
+ // - All text output from the interface can be captured into tty/file/clipboard. By default, tree nodes are automatically opened during logging.
+ IMGUI_API void LogToTTY(int auto_open_depth = -1); // start logging to tty (stdout)
+ IMGUI_API void LogToFile(int auto_open_depth = -1, const char* filename = NULL); // start logging to file
+ IMGUI_API void LogToClipboard(int auto_open_depth = -1); // start logging to OS clipboard
+ IMGUI_API void LogFinish(); // stop logging (close file, etc.)
+ IMGUI_API void LogButtons(); // helper to display buttons for logging to tty/file/clipboard
+ IMGUI_API void LogText(const char* fmt, ...) IM_FMTARGS(1); // pass text data straight to log (without being displayed)
+ IMGUI_API void LogTextV(const char* fmt, va_list args) IM_FMTLIST(1);
+
+ // Drag and Drop
+ // - On source items, call BeginDragDropSource(), if it returns true also call SetDragDropPayload() + EndDragDropSource().
+ // - On target candidates, call BeginDragDropTarget(), if it returns true also call AcceptDragDropPayload() + EndDragDropTarget().
+ // - If you stop calling BeginDragDropSource() the payload is preserved however it won't have a preview tooltip (we currently display a fallback "..." tooltip, see #1725)
+ // - An item can be both drag source and drop target.
+ IMGUI_API bool BeginDragDropSource(ImGuiDragDropFlags flags = 0); // call after submitting an item which may be dragged. when this return true, you can call SetDragDropPayload() + EndDragDropSource()
+ IMGUI_API bool SetDragDropPayload(const char* type, const void* data, size_t sz, ImGuiCond cond = 0); // type is a user defined string of maximum 32 characters. Strings starting with '_' are reserved for dear imgui internal types. Data is copied and held by imgui. Return true when payload has been accepted.
+ IMGUI_API void EndDragDropSource(); // only call EndDragDropSource() if BeginDragDropSource() returns true!
+ IMGUI_API bool BeginDragDropTarget(); // call after submitting an item that may receive a payload. If this returns true, you can call AcceptDragDropPayload() + EndDragDropTarget()
+ IMGUI_API const ImGuiPayload* AcceptDragDropPayload(const char* type, ImGuiDragDropFlags flags = 0); // accept contents of a given type. If ImGuiDragDropFlags_AcceptBeforeDelivery is set you can peek into the payload before the mouse button is released.
+ IMGUI_API void EndDragDropTarget(); // only call EndDragDropTarget() if BeginDragDropTarget() returns true!
+ IMGUI_API const ImGuiPayload* GetDragDropPayload(); // peek directly into the current payload from anywhere. may return NULL. use ImGuiPayload::IsDataType() to test for the payload type.
+
+ // Disabling [BETA API]
+ // - Disable all user interactions and dim items visuals (applying style.DisabledAlpha over current colors)
+ // - Those can be nested but it cannot be used to enable an already disabled section (a single BeginDisabled(true) in the stack is enough to keep everything disabled)
+ // - BeginDisabled(false) essentially does nothing useful but is provided to facilitate use of boolean expressions. If you can avoid calling BeginDisabled(False)/EndDisabled() best to avoid it.
+ IMGUI_API void BeginDisabled(bool disabled = true);
+ IMGUI_API void EndDisabled();
+
+ // Clipping
+ // - Mouse hovering is affected by ImGui::PushClipRect() calls, unlike direct calls to ImDrawList::PushClipRect() which are render only.
+ IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect);
+ IMGUI_API void PopClipRect();
+
+ // Focus, Activation
+ // - Prefer using "SetItemDefaultFocus()" over "if (IsWindowAppearing()) SetScrollHereY()" when applicable to signify "this is the default item"
+ IMGUI_API void SetItemDefaultFocus(); // make last item the default focused item of a window.
+ IMGUI_API void SetKeyboardFocusHere(int offset = 0); // focus keyboard on the next widget. Use positive 'offset' to access sub components of a multiple component widget. Use -1 to access previous widget.
+
+ // Item/Widgets Utilities and Query Functions
+ // - Most of the functions are referring to the previous Item that has been submitted.
+ // - See Demo Window under "Widgets->Querying Status" for an interactive visualization of most of those functions.
+ IMGUI_API bool IsItemHovered(ImGuiHoveredFlags flags = 0); // is the last item hovered? (and usable, aka not blocked by a popup, etc.). See ImGuiHoveredFlags for more options.
+ IMGUI_API bool IsItemActive(); // is the last item active? (e.g. button being held, text field being edited. This will continuously return true while holding mouse button on an item. Items that don't interact will always return false)
+ IMGUI_API bool IsItemFocused(); // is the last item focused for keyboard/gamepad navigation?
+ IMGUI_API bool IsItemClicked(ImGuiMouseButton mouse_button = 0); // is the last item hovered and mouse clicked on? (**) == IsMouseClicked(mouse_button) && IsItemHovered()Important. (**) this it NOT equivalent to the behavior of e.g. Button(). Read comments in function definition.
+ IMGUI_API bool IsItemVisible(); // is the last item visible? (items may be out of sight because of clipping/scrolling)
+ IMGUI_API bool IsItemEdited(); // did the last item modify its underlying value this frame? or was pressed? This is generally the same as the "bool" return value of many widgets.
+ IMGUI_API bool IsItemActivated(); // was the last item just made active (item was previously inactive).
+ IMGUI_API bool IsItemDeactivated(); // was the last item just made inactive (item was previously active). Useful for Undo/Redo patterns with widgets that requires continuous editing.
+ IMGUI_API bool IsItemDeactivatedAfterEdit(); // was the last item just made inactive and made a value change when it was active? (e.g. Slider/Drag moved). Useful for Undo/Redo patterns with widgets that requires continuous editing. Note that you may get false positives (some widgets such as Combo()/ListBox()/Selectable() will return true even when clicking an already selected item).
+ IMGUI_API bool IsItemToggledOpen(); // was the last item open state toggled? set by TreeNode().
+ IMGUI_API bool IsAnyItemHovered(); // is any item hovered?
+ IMGUI_API bool IsAnyItemActive(); // is any item active?
+ IMGUI_API bool IsAnyItemFocused(); // is any item focused?
+ IMGUI_API ImVec2 GetItemRectMin(); // get upper-left bounding rectangle of the last item (screen space)
+ IMGUI_API ImVec2 GetItemRectMax(); // get lower-right bounding rectangle of the last item (screen space)
+ IMGUI_API ImVec2 GetItemRectSize(); // get size of last item
+ IMGUI_API void SetItemAllowOverlap(); // allow last item to be overlapped by a subsequent item. sometimes useful with invisible buttons, selectables, etc. to catch unused area.
+
+ // Viewports
+ // - Currently represents the Platform Window created by the application which is hosting our Dear ImGui windows.
+ // - In 'docking' branch with multi-viewport enabled, we extend this concept to have multiple active viewports.
+ // - In the future we will extend this concept further to also represent Platform Monitor and support a "no main platform window" operation mode.
+ IMGUI_API ImGuiViewport* GetMainViewport(); // return primary/default viewport. This can never be NULL.
+
+ // Background/Foreground Draw Lists
+ IMGUI_API ImDrawList* GetBackgroundDrawList(); // this draw list will be the first rendered one. Useful to quickly draw shapes/text behind dear imgui contents.
+ IMGUI_API ImDrawList* GetForegroundDrawList(); // this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents.
+
+ // Miscellaneous Utilities
+ IMGUI_API bool IsRectVisible(const ImVec2& size); // test if rectangle (of given size, starting from cursor position) is visible / not clipped.
+ IMGUI_API bool IsRectVisible(const ImVec2& rect_min, const ImVec2& rect_max); // test if rectangle (in screen space) is visible / not clipped. to perform coarse clipping on user's side.
+ IMGUI_API double GetTime(); // get global imgui time. incremented by io.DeltaTime every frame.
+ IMGUI_API int GetFrameCount(); // get global imgui frame count. incremented by 1 every frame.
+ IMGUI_API ImDrawListSharedData* GetDrawListSharedData(); // you may use this when creating your own ImDrawList instances.
+ IMGUI_API const char* GetStyleColorName(ImGuiCol idx); // get a string corresponding to the enum value (for display, saving, etc.).
+ IMGUI_API void SetStateStorage(ImGuiStorage* storage); // replace current window storage with our own (if you want to manipulate it yourself, typically clear subsection of it)
+ IMGUI_API ImGuiStorage* GetStateStorage();
+ IMGUI_API bool BeginChildFrame(ImGuiID id, const ImVec2& size, ImGuiWindowFlags flags = 0); // helper to create a child window / scrolling region that looks like a normal widget frame
+ IMGUI_API void EndChildFrame(); // always call EndChildFrame() regardless of BeginChildFrame() return values (which indicates a collapsed/clipped window)
+
+ // Text Utilities
+ IMGUI_API ImVec2 CalcTextSize(const char* text, const char* text_end = NULL, bool hide_text_after_double_hash = false, float wrap_width = -1.0f);
+
+ // Color Utilities
+ IMGUI_API ImVec4 ColorConvertU32ToFloat4(ImU32 in);
+ IMGUI_API ImU32 ColorConvertFloat4ToU32(const ImVec4& in);
+ IMGUI_API void ColorConvertRGBtoHSV(float r, float g, float b, float& out_h, float& out_s, float& out_v);
+ IMGUI_API void ColorConvertHSVtoRGB(float h, float s, float v, float& out_r, float& out_g, float& out_b);
+
+ // Inputs Utilities: Keyboard
+ // Without IMGUI_DISABLE_OBSOLETE_KEYIO: (legacy support)
+ // - For 'ImGuiKey key' you can still use your legacy native/user indices according to how your backend/engine stored them in io.KeysDown[].
+ // With IMGUI_DISABLE_OBSOLETE_KEYIO: (this is the way forward)
+ // - Any use of 'ImGuiKey' will assert when key < 512 will be passed, previously reserved as native/user keys indices
+ // - GetKeyIndex() is pass-through and therefore deprecated (gone if IMGUI_DISABLE_OBSOLETE_KEYIO is defined)
+ IMGUI_API bool IsKeyDown(ImGuiKey key); // is key being held.
+ IMGUI_API bool IsKeyPressed(ImGuiKey key, bool repeat = true); // was key pressed (went from !Down to Down)? if repeat=true, uses io.KeyRepeatDelay / KeyRepeatRate
+ IMGUI_API bool IsKeyReleased(ImGuiKey key); // was key released (went from Down to !Down)?
+ IMGUI_API int GetKeyPressedAmount(ImGuiKey key, float repeat_delay, float rate); // uses provided repeat rate/delay. return a count, most often 0 or 1 but might be >1 if RepeatRate is small enough that DeltaTime > RepeatRate
+ IMGUI_API const char* GetKeyName(ImGuiKey key); // [DEBUG] returns English name of the key. Those names a provided for debugging purpose and are not meant to be saved persistently not compared.
+ IMGUI_API void SetNextFrameWantCaptureKeyboard(bool want_capture_keyboard); // Override io.WantCaptureKeyboard flag next frame (said flag is left for your application to handle, typically when true it instructs your app to ignore inputs). e.g. force capture keyboard when your widget is being hovered. This is equivalent to setting "io.WantCaptureKeyboard = want_capture_keyboard"; after the next NewFrame() call.
+
+ // Inputs Utilities: Mouse
+ // - To refer to a mouse button, you may use named enums in your code e.g. ImGuiMouseButton_Left, ImGuiMouseButton_Right.
+ // - You can also use regular integer: it is forever guaranteed that 0=Left, 1=Right, 2=Middle.
+ // - Dragging operations are only reported after mouse has moved a certain distance away from the initial clicking position (see 'lock_threshold' and 'io.MouseDraggingThreshold')
+ IMGUI_API bool IsMouseDown(ImGuiMouseButton button); // is mouse button held?
+ IMGUI_API bool IsMouseClicked(ImGuiMouseButton button, bool repeat = false); // did mouse button clicked? (went from !Down to Down). Same as GetMouseClickedCount() == 1.
+ IMGUI_API bool IsMouseReleased(ImGuiMouseButton button); // did mouse button released? (went from Down to !Down)
+ IMGUI_API bool IsMouseDoubleClicked(ImGuiMouseButton button); // did mouse button double-clicked? Same as GetMouseClickedCount() == 2. (note that a double-click will also report IsMouseClicked() == true)
+ IMGUI_API int GetMouseClickedCount(ImGuiMouseButton button); // return the number of successive mouse-clicks at the time where a click happen (otherwise 0).
+ IMGUI_API bool IsMouseHoveringRect(const ImVec2& r_min, const ImVec2& r_max, bool clip = true);// is mouse hovering given bounding rect (in screen space). clipped by current clipping settings, but disregarding of other consideration of focus/window ordering/popup-block.
+ IMGUI_API bool IsMousePosValid(const ImVec2* mouse_pos = NULL); // by convention we use (-FLT_MAX,-FLT_MAX) to denote that there is no mouse available
+ IMGUI_API bool IsAnyMouseDown(); // [WILL OBSOLETE] is any mouse button held? This was designed for backends, but prefer having backend maintain a mask of held mouse buttons, because upcoming input queue system will make this invalid.
+ IMGUI_API ImVec2 GetMousePos(); // shortcut to ImGui::GetIO().MousePos provided by user, to be consistent with other calls
+ IMGUI_API ImVec2 GetMousePosOnOpeningCurrentPopup(); // retrieve mouse position at the time of opening popup we have BeginPopup() into (helper to avoid user backing that value themselves)
+ IMGUI_API bool IsMouseDragging(ImGuiMouseButton button, float lock_threshold = -1.0f); // is mouse dragging? (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold)
+ IMGUI_API ImVec2 GetMouseDragDelta(ImGuiMouseButton button = 0, float lock_threshold = -1.0f); // return the delta from the initial clicking position while the mouse button is pressed or was just released. This is locked and return 0.0f until the mouse moves past a distance threshold at least once (if lock_threshold < -1.0f, uses io.MouseDraggingThreshold)
+ IMGUI_API void ResetMouseDragDelta(ImGuiMouseButton button = 0); //
+ IMGUI_API ImGuiMouseCursor GetMouseCursor(); // get desired cursor type, reset in ImGui::NewFrame(), this is updated during the frame. valid before Render(). If you use software rendering by setting io.MouseDrawCursor ImGui will render those for you
+ IMGUI_API void SetMouseCursor(ImGuiMouseCursor cursor_type); // set desired cursor type
+ IMGUI_API void SetNextFrameWantCaptureMouse(bool want_capture_mouse); // Override io.WantCaptureMouse flag next frame (said flag is left for your application to handle, typical when true it instucts your app to ignore inputs). This is equivalent to setting "io.WantCaptureMouse = want_capture_mouse;" after the next NewFrame() call.
+
+ // Clipboard Utilities
+ // - Also see the LogToClipboard() function to capture GUI into clipboard, or easily output text data to the clipboard.
+ IMGUI_API const char* GetClipboardText();
+ IMGUI_API void SetClipboardText(const char* text);
+
+ // Settings/.Ini Utilities
+ // - The disk functions are automatically called if io.IniFilename != NULL (default is "imgui.ini").
+ // - Set io.IniFilename to NULL to load/save manually. Read io.WantSaveIniSettings description about handling .ini saving manually.
+ // - Important: default value "imgui.ini" is relative to current working dir! Most apps will want to lock this to an absolute path (e.g. same path as executables).
+ IMGUI_API void LoadIniSettingsFromDisk(const char* ini_filename); // call after CreateContext() and before the first call to NewFrame(). NewFrame() automatically calls LoadIniSettingsFromDisk(io.IniFilename).
+ IMGUI_API void LoadIniSettingsFromMemory(const char* ini_data, size_t ini_size=0); // call after CreateContext() and before the first call to NewFrame() to provide .ini data from your own data source.
+ IMGUI_API void SaveIniSettingsToDisk(const char* ini_filename); // this is automatically called (if io.IniFilename is not empty) a few seconds after any modification that should be reflected in the .ini file (and also by DestroyContext).
+ IMGUI_API const char* SaveIniSettingsToMemory(size_t* out_ini_size = NULL); // return a zero-terminated string with the .ini data which you can save by your own mean. call when io.WantSaveIniSettings is set, then save data by your own mean and clear io.WantSaveIniSettings.
+
+ // Debug Utilities
+ IMGUI_API void DebugTextEncoding(const char* text);
+ IMGUI_API bool DebugCheckVersionAndDataLayout(const char* version_str, size_t sz_io, size_t sz_style, size_t sz_vec2, size_t sz_vec4, size_t sz_drawvert, size_t sz_drawidx); // This is called by IMGUI_CHECKVERSION() macro.
+
+ // Memory Allocators
+ // - Those functions are not reliant on the current context.
+ // - DLL users: heaps and globals are not shared across DLL boundaries! You will need to call SetCurrentContext() + SetAllocatorFunctions()
+ // for each static/DLL boundary you are calling from. Read "Context and Memory Allocators" section of imgui.cpp for more details.
+ IMGUI_API void SetAllocatorFunctions(ImGuiMemAllocFunc alloc_func, ImGuiMemFreeFunc free_func, void* user_data = NULL);
+ IMGUI_API void GetAllocatorFunctions(ImGuiMemAllocFunc* p_alloc_func, ImGuiMemFreeFunc* p_free_func, void** p_user_data);
+ IMGUI_API void* MemAlloc(size_t size);
+ IMGUI_API void MemFree(void* ptr);
+
+} // namespace ImGui
+
+//-----------------------------------------------------------------------------
+// [SECTION] Flags & Enumerations
+//-----------------------------------------------------------------------------
+
+// Flags for ImGui::Begin()
+enum ImGuiWindowFlags_
+{
+ ImGuiWindowFlags_None = 0,
+ ImGuiWindowFlags_NoTitleBar = 1 << 0, // Disable title-bar
+ ImGuiWindowFlags_NoResize = 1 << 1, // Disable user resizing with the lower-right grip
+ ImGuiWindowFlags_NoMove = 1 << 2, // Disable user moving the window
+ ImGuiWindowFlags_NoScrollbar = 1 << 3, // Disable scrollbars (window can still scroll with mouse or programmatically)
+ ImGuiWindowFlags_NoScrollWithMouse = 1 << 4, // Disable user vertically scrolling with mouse wheel. On child window, mouse wheel will be forwarded to the parent unless NoScrollbar is also set.
+ ImGuiWindowFlags_NoCollapse = 1 << 5, // Disable user collapsing window by double-clicking on it. Also referred to as Window Menu Button (e.g. within a docking node).
+ ImGuiWindowFlags_AlwaysAutoResize = 1 << 6, // Resize every window to its content every frame
+ ImGuiWindowFlags_NoBackground = 1 << 7, // Disable drawing background color (WindowBg, etc.) and outside border. Similar as using SetNextWindowBgAlpha(0.0f).
+ ImGuiWindowFlags_NoSavedSettings = 1 << 8, // Never load/save settings in .ini file
+ ImGuiWindowFlags_NoMouseInputs = 1 << 9, // Disable catching mouse, hovering test with pass through.
+ ImGuiWindowFlags_MenuBar = 1 << 10, // Has a menu-bar
+ ImGuiWindowFlags_HorizontalScrollbar = 1 << 11, // Allow horizontal scrollbar to appear (off by default). You may use SetNextWindowContentSize(ImVec2(width,0.0f)); prior to calling Begin() to specify width. Read code in imgui_demo in the "Horizontal Scrolling" section.
+ ImGuiWindowFlags_NoFocusOnAppearing = 1 << 12, // Disable taking focus when transitioning from hidden to visible state
+ ImGuiWindowFlags_NoBringToFrontOnFocus = 1 << 13, // Disable bringing window to front when taking focus (e.g. clicking on it or programmatically giving it focus)
+ ImGuiWindowFlags_AlwaysVerticalScrollbar= 1 << 14, // Always show vertical scrollbar (even if ContentSize.y < Size.y)
+ ImGuiWindowFlags_AlwaysHorizontalScrollbar=1<< 15, // Always show horizontal scrollbar (even if ContentSize.x < Size.x)
+ ImGuiWindowFlags_AlwaysUseWindowPadding = 1 << 16, // Ensure child windows without border uses style.WindowPadding (ignored by default for non-bordered child windows, because more convenient)
+ ImGuiWindowFlags_NoNavInputs = 1 << 18, // No gamepad/keyboard navigation within the window
+ ImGuiWindowFlags_NoNavFocus = 1 << 19, // No focusing toward this window with gamepad/keyboard navigation (e.g. skipped by CTRL+TAB)
+ ImGuiWindowFlags_UnsavedDocument = 1 << 20, // Display a dot next to the title. When used in a tab/docking context, tab is selected when clicking the X + closure is not assumed (will wait for user to stop submitting the tab). Otherwise closure is assumed when pressing the X, so if you keep submitting the tab may reappear at end of tab bar.
+ ImGuiWindowFlags_NoNav = ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
+ ImGuiWindowFlags_NoDecoration = ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoCollapse,
+ ImGuiWindowFlags_NoInputs = ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoNavInputs | ImGuiWindowFlags_NoNavFocus,
+
+ // [Internal]
+ ImGuiWindowFlags_NavFlattened = 1 << 23, // [BETA] On child window: allow gamepad/keyboard navigation to cross over parent border to this child or between sibling child windows.
+ ImGuiWindowFlags_ChildWindow = 1 << 24, // Don't use! For internal use by BeginChild()
+ ImGuiWindowFlags_Tooltip = 1 << 25, // Don't use! For internal use by BeginTooltip()
+ ImGuiWindowFlags_Popup = 1 << 26, // Don't use! For internal use by BeginPopup()
+ ImGuiWindowFlags_Modal = 1 << 27, // Don't use! For internal use by BeginPopupModal()
+ ImGuiWindowFlags_ChildMenu = 1 << 28 // Don't use! For internal use by BeginMenu()
+ //ImGuiWindowFlags_ResizeFromAnySide = 1 << 17, // [Obsolete] --> Set io.ConfigWindowsResizeFromEdges=true and make sure mouse cursors are supported by backend (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors)
+};
+
+// Flags for ImGui::InputText()
+enum ImGuiInputTextFlags_
+{
+ ImGuiInputTextFlags_None = 0,
+ ImGuiInputTextFlags_CharsDecimal = 1 << 0, // Allow 0123456789.+-*/
+ ImGuiInputTextFlags_CharsHexadecimal = 1 << 1, // Allow 0123456789ABCDEFabcdef
+ ImGuiInputTextFlags_CharsUppercase = 1 << 2, // Turn a..z into A..Z
+ ImGuiInputTextFlags_CharsNoBlank = 1 << 3, // Filter out spaces, tabs
+ ImGuiInputTextFlags_AutoSelectAll = 1 << 4, // Select entire text when first taking mouse focus
+ ImGuiInputTextFlags_EnterReturnsTrue = 1 << 5, // Return 'true' when Enter is pressed (as opposed to every time the value was modified). Consider looking at the IsItemDeactivatedAfterEdit() function.
+ ImGuiInputTextFlags_CallbackCompletion = 1 << 6, // Callback on pressing TAB (for completion handling)
+ ImGuiInputTextFlags_CallbackHistory = 1 << 7, // Callback on pressing Up/Down arrows (for history handling)
+ ImGuiInputTextFlags_CallbackAlways = 1 << 8, // Callback on each iteration. User code may query cursor position, modify text buffer.
+ ImGuiInputTextFlags_CallbackCharFilter = 1 << 9, // Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard.
+ ImGuiInputTextFlags_AllowTabInput = 1 << 10, // Pressing TAB input a '\t' character into the text field
+ ImGuiInputTextFlags_CtrlEnterForNewLine = 1 << 11, // In multi-line mode, unfocus with Enter, add new line with Ctrl+Enter (default is opposite: unfocus with Ctrl+Enter, add line with Enter).
+ ImGuiInputTextFlags_NoHorizontalScroll = 1 << 12, // Disable following the cursor horizontally
+ ImGuiInputTextFlags_AlwaysOverwrite = 1 << 13, // Overwrite mode
+ ImGuiInputTextFlags_ReadOnly = 1 << 14, // Read-only mode
+ ImGuiInputTextFlags_Password = 1 << 15, // Password mode, display all characters as '*'
+ ImGuiInputTextFlags_NoUndoRedo = 1 << 16, // Disable undo/redo. Note that input text owns the text data while active, if you want to provide your own undo/redo stack you need e.g. to call ClearActiveID().
+ ImGuiInputTextFlags_CharsScientific = 1 << 17, // Allow 0123456789.+-*/eE (Scientific notation input)
+ ImGuiInputTextFlags_CallbackResize = 1 << 18, // Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow. Notify when the string wants to be resized (for string types which hold a cache of their Size). You will be provided a new BufSize in the callback and NEED to honor it. (see misc/cpp/imgui_stdlib.h for an example of using this)
+ ImGuiInputTextFlags_CallbackEdit = 1 << 19 // Callback on any edit (note that InputText() already returns true on edit, the callback is useful mainly to manipulate the underlying buffer while focus is active)
+
+ // Obsolete names (will be removed soon)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ , ImGuiInputTextFlags_AlwaysInsertMode = ImGuiInputTextFlags_AlwaysOverwrite // [renamed in 1.82] name was not matching behavior
+#endif
+};
+
+// Flags for ImGui::TreeNodeEx(), ImGui::CollapsingHeader*()
+enum ImGuiTreeNodeFlags_
+{
+ ImGuiTreeNodeFlags_None = 0,
+ ImGuiTreeNodeFlags_Selected = 1 << 0, // Draw as selected
+ ImGuiTreeNodeFlags_Framed = 1 << 1, // Draw frame with background (e.g. for CollapsingHeader)
+ ImGuiTreeNodeFlags_AllowItemOverlap = 1 << 2, // Hit testing to allow subsequent widgets to overlap this one
+ ImGuiTreeNodeFlags_NoTreePushOnOpen = 1 << 3, // Don't do a TreePush() when open (e.g. for CollapsingHeader) = no extra indent nor pushing on ID stack
+ ImGuiTreeNodeFlags_NoAutoOpenOnLog = 1 << 4, // Don't automatically and temporarily open node when Logging is active (by default logging will automatically open tree nodes)
+ ImGuiTreeNodeFlags_DefaultOpen = 1 << 5, // Default node to be open
+ ImGuiTreeNodeFlags_OpenOnDoubleClick = 1 << 6, // Need double-click to open node
+ ImGuiTreeNodeFlags_OpenOnArrow = 1 << 7, // Only open when clicking on the arrow part. If ImGuiTreeNodeFlags_OpenOnDoubleClick is also set, single-click arrow or double-click all box to open.
+ ImGuiTreeNodeFlags_Leaf = 1 << 8, // No collapsing, no arrow (use as a convenience for leaf nodes).
+ ImGuiTreeNodeFlags_Bullet = 1 << 9, // Display a bullet instead of arrow
+ ImGuiTreeNodeFlags_FramePadding = 1 << 10, // Use FramePadding (even for an unframed text node) to vertically align text baseline to regular widget height. Equivalent to calling AlignTextToFramePadding().
+ ImGuiTreeNodeFlags_SpanAvailWidth = 1 << 11, // Extend hit box to the right-most edge, even if not framed. This is not the default in order to allow adding other items on the same line. In the future we may refactor the hit system to be front-to-back, allowing natural overlaps and then this can become the default.
+ ImGuiTreeNodeFlags_SpanFullWidth = 1 << 12, // Extend hit box to the left-most and right-most edges (bypass the indented area).
+ ImGuiTreeNodeFlags_NavLeftJumpsBackHere = 1 << 13, // (WIP) Nav: left direction may move to this TreeNode() from any of its child (items submitted between TreeNode and TreePop)
+ //ImGuiTreeNodeFlags_NoScrollOnOpen = 1 << 14, // FIXME: TODO: Disable automatic scroll on TreePop() if node got just open and contents is not visible
+ ImGuiTreeNodeFlags_CollapsingHeader = ImGuiTreeNodeFlags_Framed | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_NoAutoOpenOnLog
+};
+
+// Flags for OpenPopup*(), BeginPopupContext*(), IsPopupOpen() functions.
+// - To be backward compatible with older API which took an 'int mouse_button = 1' argument, we need to treat
+// small flags values as a mouse button index, so we encode the mouse button in the first few bits of the flags.
+// It is therefore guaranteed to be legal to pass a mouse button index in ImGuiPopupFlags.
+// - For the same reason, we exceptionally default the ImGuiPopupFlags argument of BeginPopupContextXXX functions to 1 instead of 0.
+// IMPORTANT: because the default parameter is 1 (==ImGuiPopupFlags_MouseButtonRight), if you rely on the default parameter
+// and want to another another flag, you need to pass in the ImGuiPopupFlags_MouseButtonRight flag.
+// - Multiple buttons currently cannot be combined/or-ed in those functions (we could allow it later).
+enum ImGuiPopupFlags_
+{
+ ImGuiPopupFlags_None = 0,
+ ImGuiPopupFlags_MouseButtonLeft = 0, // For BeginPopupContext*(): open on Left Mouse release. Guaranteed to always be == 0 (same as ImGuiMouseButton_Left)
+ ImGuiPopupFlags_MouseButtonRight = 1, // For BeginPopupContext*(): open on Right Mouse release. Guaranteed to always be == 1 (same as ImGuiMouseButton_Right)
+ ImGuiPopupFlags_MouseButtonMiddle = 2, // For BeginPopupContext*(): open on Middle Mouse release. Guaranteed to always be == 2 (same as ImGuiMouseButton_Middle)
+ ImGuiPopupFlags_MouseButtonMask_ = 0x1F,
+ ImGuiPopupFlags_MouseButtonDefault_ = 1,
+ ImGuiPopupFlags_NoOpenOverExistingPopup = 1 << 5, // For OpenPopup*(), BeginPopupContext*(): don't open if there's already a popup at the same level of the popup stack
+ ImGuiPopupFlags_NoOpenOverItems = 1 << 6, // For BeginPopupContextWindow(): don't return true when hovering items, only when hovering empty space
+ ImGuiPopupFlags_AnyPopupId = 1 << 7, // For IsPopupOpen(): ignore the ImGuiID parameter and test for any popup.
+ ImGuiPopupFlags_AnyPopupLevel = 1 << 8, // For IsPopupOpen(): search/test at any level of the popup stack (default test in the current level)
+ ImGuiPopupFlags_AnyPopup = ImGuiPopupFlags_AnyPopupId | ImGuiPopupFlags_AnyPopupLevel
+};
+
+// Flags for ImGui::Selectable()
+enum ImGuiSelectableFlags_
+{
+ ImGuiSelectableFlags_None = 0,
+ ImGuiSelectableFlags_DontClosePopups = 1 << 0, // Clicking this don't close parent popup window
+ ImGuiSelectableFlags_SpanAllColumns = 1 << 1, // Selectable frame can span all columns (text will still fit in current column)
+ ImGuiSelectableFlags_AllowDoubleClick = 1 << 2, // Generate press events on double clicks too
+ ImGuiSelectableFlags_Disabled = 1 << 3, // Cannot be selected, display grayed out text
+ ImGuiSelectableFlags_AllowItemOverlap = 1 << 4 // (WIP) Hit testing to allow subsequent widgets to overlap this one
+};
+
+// Flags for ImGui::BeginCombo()
+enum ImGuiComboFlags_
+{
+ ImGuiComboFlags_None = 0,
+ ImGuiComboFlags_PopupAlignLeft = 1 << 0, // Align the popup toward the left by default
+ ImGuiComboFlags_HeightSmall = 1 << 1, // Max ~4 items visible. Tip: If you want your combo popup to be a specific size you can use SetNextWindowSizeConstraints() prior to calling BeginCombo()
+ ImGuiComboFlags_HeightRegular = 1 << 2, // Max ~8 items visible (default)
+ ImGuiComboFlags_HeightLarge = 1 << 3, // Max ~20 items visible
+ ImGuiComboFlags_HeightLargest = 1 << 4, // As many fitting items as possible
+ ImGuiComboFlags_NoArrowButton = 1 << 5, // Display on the preview box without the square arrow button
+ ImGuiComboFlags_NoPreview = 1 << 6, // Display only a square arrow button
+ ImGuiComboFlags_HeightMask_ = ImGuiComboFlags_HeightSmall | ImGuiComboFlags_HeightRegular | ImGuiComboFlags_HeightLarge | ImGuiComboFlags_HeightLargest
+};
+
+// Flags for ImGui::BeginTabBar()
+enum ImGuiTabBarFlags_
+{
+ ImGuiTabBarFlags_None = 0,
+ ImGuiTabBarFlags_Reorderable = 1 << 0, // Allow manually dragging tabs to re-order them + New tabs are appended at the end of list
+ ImGuiTabBarFlags_AutoSelectNewTabs = 1 << 1, // Automatically select new tabs when they appear
+ ImGuiTabBarFlags_TabListPopupButton = 1 << 2, // Disable buttons to open the tab list popup
+ ImGuiTabBarFlags_NoCloseWithMiddleMouseButton = 1 << 3, // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false.
+ ImGuiTabBarFlags_NoTabListScrollingButtons = 1 << 4, // Disable scrolling buttons (apply when fitting policy is ImGuiTabBarFlags_FittingPolicyScroll)
+ ImGuiTabBarFlags_NoTooltip = 1 << 5, // Disable tooltips when hovering a tab
+ ImGuiTabBarFlags_FittingPolicyResizeDown = 1 << 6, // Resize tabs when they don't fit
+ ImGuiTabBarFlags_FittingPolicyScroll = 1 << 7, // Add scroll buttons when tabs don't fit
+ ImGuiTabBarFlags_FittingPolicyMask_ = ImGuiTabBarFlags_FittingPolicyResizeDown | ImGuiTabBarFlags_FittingPolicyScroll,
+ ImGuiTabBarFlags_FittingPolicyDefault_ = ImGuiTabBarFlags_FittingPolicyResizeDown
+};
+
+// Flags for ImGui::BeginTabItem()
+enum ImGuiTabItemFlags_
+{
+ ImGuiTabItemFlags_None = 0,
+ ImGuiTabItemFlags_UnsavedDocument = 1 << 0, // Display a dot next to the title + tab is selected when clicking the X + closure is not assumed (will wait for user to stop submitting the tab). Otherwise closure is assumed when pressing the X, so if you keep submitting the tab may reappear at end of tab bar.
+ ImGuiTabItemFlags_SetSelected = 1 << 1, // Trigger flag to programmatically make the tab selected when calling BeginTabItem()
+ ImGuiTabItemFlags_NoCloseWithMiddleMouseButton = 1 << 2, // Disable behavior of closing tabs (that are submitted with p_open != NULL) with middle mouse button. You can still repro this behavior on user's side with if (IsItemHovered() && IsMouseClicked(2)) *p_open = false.
+ ImGuiTabItemFlags_NoPushId = 1 << 3, // Don't call PushID(tab->ID)/PopID() on BeginTabItem()/EndTabItem()
+ ImGuiTabItemFlags_NoTooltip = 1 << 4, // Disable tooltip for the given tab
+ ImGuiTabItemFlags_NoReorder = 1 << 5, // Disable reordering this tab or having another tab cross over this tab
+ ImGuiTabItemFlags_Leading = 1 << 6, // Enforce the tab position to the left of the tab bar (after the tab list popup button)
+ ImGuiTabItemFlags_Trailing = 1 << 7 // Enforce the tab position to the right of the tab bar (before the scrolling buttons)
+};
+
+// Flags for ImGui::BeginTable()
+// - Important! Sizing policies have complex and subtle side effects, much more so than you would expect.
+// Read comments/demos carefully + experiment with live demos to get acquainted with them.
+// - The DEFAULT sizing policies are:
+// - Default to ImGuiTableFlags_SizingFixedFit if ScrollX is on, or if host window has ImGuiWindowFlags_AlwaysAutoResize.
+// - Default to ImGuiTableFlags_SizingStretchSame if ScrollX is off.
+// - When ScrollX is off:
+// - Table defaults to ImGuiTableFlags_SizingStretchSame -> all Columns defaults to ImGuiTableColumnFlags_WidthStretch with same weight.
+// - Columns sizing policy allowed: Stretch (default), Fixed/Auto.
+// - Fixed Columns (if any) will generally obtain their requested width (unless the table cannot fit them all).
+// - Stretch Columns will share the remaining width according to their respective weight.
+// - Mixed Fixed/Stretch columns is possible but has various side-effects on resizing behaviors.
+// The typical use of mixing sizing policies is: any number of LEADING Fixed columns, followed by one or two TRAILING Stretch columns.
+// (this is because the visible order of columns have subtle but necessary effects on how they react to manual resizing).
+// - When ScrollX is on:
+// - Table defaults to ImGuiTableFlags_SizingFixedFit -> all Columns defaults to ImGuiTableColumnFlags_WidthFixed
+// - Columns sizing policy allowed: Fixed/Auto mostly.
+// - Fixed Columns can be enlarged as needed. Table will show an horizontal scrollbar if needed.
+// - When using auto-resizing (non-resizable) fixed columns, querying the content width to use item right-alignment e.g. SetNextItemWidth(-FLT_MIN) doesn't make sense, would create a feedback loop.
+// - Using Stretch columns OFTEN DOES NOT MAKE SENSE if ScrollX is on, UNLESS you have specified a value for 'inner_width' in BeginTable().
+// If you specify a value for 'inner_width' then effectively the scrolling space is known and Stretch or mixed Fixed/Stretch columns become meaningful again.
+// - Read on documentation at the top of imgui_tables.cpp for details.
+enum ImGuiTableFlags_
+{
+ // Features
+ ImGuiTableFlags_None = 0,
+ ImGuiTableFlags_Resizable = 1 << 0, // Enable resizing columns.
+ ImGuiTableFlags_Reorderable = 1 << 1, // Enable reordering columns in header row (need calling TableSetupColumn() + TableHeadersRow() to display headers)
+ ImGuiTableFlags_Hideable = 1 << 2, // Enable hiding/disabling columns in context menu.
+ ImGuiTableFlags_Sortable = 1 << 3, // Enable sorting. Call TableGetSortSpecs() to obtain sort specs. Also see ImGuiTableFlags_SortMulti and ImGuiTableFlags_SortTristate.
+ ImGuiTableFlags_NoSavedSettings = 1 << 4, // Disable persisting columns order, width and sort settings in the .ini file.
+ ImGuiTableFlags_ContextMenuInBody = 1 << 5, // Right-click on columns body/contents will display table context menu. By default it is available in TableHeadersRow().
+ // Decorations
+ ImGuiTableFlags_RowBg = 1 << 6, // Set each RowBg color with ImGuiCol_TableRowBg or ImGuiCol_TableRowBgAlt (equivalent of calling TableSetBgColor with ImGuiTableBgFlags_RowBg0 on each row manually)
+ ImGuiTableFlags_BordersInnerH = 1 << 7, // Draw horizontal borders between rows.
+ ImGuiTableFlags_BordersOuterH = 1 << 8, // Draw horizontal borders at the top and bottom.
+ ImGuiTableFlags_BordersInnerV = 1 << 9, // Draw vertical borders between columns.
+ ImGuiTableFlags_BordersOuterV = 1 << 10, // Draw vertical borders on the left and right sides.
+ ImGuiTableFlags_BordersH = ImGuiTableFlags_BordersInnerH | ImGuiTableFlags_BordersOuterH, // Draw horizontal borders.
+ ImGuiTableFlags_BordersV = ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersOuterV, // Draw vertical borders.
+ ImGuiTableFlags_BordersInner = ImGuiTableFlags_BordersInnerV | ImGuiTableFlags_BordersInnerH, // Draw inner borders.
+ ImGuiTableFlags_BordersOuter = ImGuiTableFlags_BordersOuterV | ImGuiTableFlags_BordersOuterH, // Draw outer borders.
+ ImGuiTableFlags_Borders = ImGuiTableFlags_BordersInner | ImGuiTableFlags_BordersOuter, // Draw all borders.
+ ImGuiTableFlags_NoBordersInBody = 1 << 11, // [ALPHA] Disable vertical borders in columns Body (borders will always appears in Headers). -> May move to style
+ ImGuiTableFlags_NoBordersInBodyUntilResize = 1 << 12, // [ALPHA] Disable vertical borders in columns Body until hovered for resize (borders will always appears in Headers). -> May move to style
+ // Sizing Policy (read above for defaults)
+ ImGuiTableFlags_SizingFixedFit = 1 << 13, // Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching contents width.
+ ImGuiTableFlags_SizingFixedSame = 2 << 13, // Columns default to _WidthFixed or _WidthAuto (if resizable or not resizable), matching the maximum contents width of all columns. Implicitly enable ImGuiTableFlags_NoKeepColumnsVisible.
+ ImGuiTableFlags_SizingStretchProp = 3 << 13, // Columns default to _WidthStretch with default weights proportional to each columns contents widths.
+ ImGuiTableFlags_SizingStretchSame = 4 << 13, // Columns default to _WidthStretch with default weights all equal, unless overridden by TableSetupColumn().
+ // Sizing Extra Options
+ ImGuiTableFlags_NoHostExtendX = 1 << 16, // Make outer width auto-fit to columns, overriding outer_size.x value. Only available when ScrollX/ScrollY are disabled and Stretch columns are not used.
+ ImGuiTableFlags_NoHostExtendY = 1 << 17, // Make outer height stop exactly at outer_size.y (prevent auto-extending table past the limit). Only available when ScrollX/ScrollY are disabled. Data below the limit will be clipped and not visible.
+ ImGuiTableFlags_NoKeepColumnsVisible = 1 << 18, // Disable keeping column always minimally visible when ScrollX is off and table gets too small. Not recommended if columns are resizable.
+ ImGuiTableFlags_PreciseWidths = 1 << 19, // Disable distributing remainder width to stretched columns (width allocation on a 100-wide table with 3 columns: Without this flag: 33,33,34. With this flag: 33,33,33). With larger number of columns, resizing will appear to be less smooth.
+ // Clipping
+ ImGuiTableFlags_NoClip = 1 << 20, // Disable clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow into other columns). Generally incompatible with TableSetupScrollFreeze().
+ // Padding
+ ImGuiTableFlags_PadOuterX = 1 << 21, // Default if BordersOuterV is on. Enable outer-most padding. Generally desirable if you have headers.
+ ImGuiTableFlags_NoPadOuterX = 1 << 22, // Default if BordersOuterV is off. Disable outer-most padding.
+ ImGuiTableFlags_NoPadInnerX = 1 << 23, // Disable inner padding between columns (double inner padding if BordersOuterV is on, single inner padding if BordersOuterV is off).
+ // Scrolling
+ ImGuiTableFlags_ScrollX = 1 << 24, // Enable horizontal scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size. Changes default sizing policy. Because this create a child window, ScrollY is currently generally recommended when using ScrollX.
+ ImGuiTableFlags_ScrollY = 1 << 25, // Enable vertical scrolling. Require 'outer_size' parameter of BeginTable() to specify the container size.
+ // Sorting
+ ImGuiTableFlags_SortMulti = 1 << 26, // Hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1).
+ ImGuiTableFlags_SortTristate = 1 << 27, // Allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0).
+
+ // [Internal] Combinations and masks
+ ImGuiTableFlags_SizingMask_ = ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_SizingFixedSame | ImGuiTableFlags_SizingStretchProp | ImGuiTableFlags_SizingStretchSame
+
+ // Obsolete names (will be removed soon)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ //, ImGuiTableFlags_ColumnsWidthFixed = ImGuiTableFlags_SizingFixedFit, ImGuiTableFlags_ColumnsWidthStretch = ImGuiTableFlags_SizingStretchSame // WIP Tables 2020/12
+ //, ImGuiTableFlags_SizingPolicyFixed = ImGuiTableFlags_SizingFixedFit, ImGuiTableFlags_SizingPolicyStretch = ImGuiTableFlags_SizingStretchSame // WIP Tables 2021/01
+#endif
+};
+
+// Flags for ImGui::TableSetupColumn()
+enum ImGuiTableColumnFlags_
+{
+ // Input configuration flags
+ ImGuiTableColumnFlags_None = 0,
+ ImGuiTableColumnFlags_Disabled = 1 << 0, // Overriding/master disable flag: hide column, won't show in context menu (unlike calling TableSetColumnEnabled() which manipulates the user accessible state)
+ ImGuiTableColumnFlags_DefaultHide = 1 << 1, // Default as a hidden/disabled column.
+ ImGuiTableColumnFlags_DefaultSort = 1 << 2, // Default as a sorting column.
+ ImGuiTableColumnFlags_WidthStretch = 1 << 3, // Column will stretch. Preferable with horizontal scrolling disabled (default if table sizing policy is _SizingStretchSame or _SizingStretchProp).
+ ImGuiTableColumnFlags_WidthFixed = 1 << 4, // Column will not stretch. Preferable with horizontal scrolling enabled (default if table sizing policy is _SizingFixedFit and table is resizable).
+ ImGuiTableColumnFlags_NoResize = 1 << 5, // Disable manual resizing.
+ ImGuiTableColumnFlags_NoReorder = 1 << 6, // Disable manual reordering this column, this will also prevent other columns from crossing over this column.
+ ImGuiTableColumnFlags_NoHide = 1 << 7, // Disable ability to hide/disable this column.
+ ImGuiTableColumnFlags_NoClip = 1 << 8, // Disable clipping for this column (all NoClip columns will render in a same draw command).
+ ImGuiTableColumnFlags_NoSort = 1 << 9, // Disable ability to sort on this field (even if ImGuiTableFlags_Sortable is set on the table).
+ ImGuiTableColumnFlags_NoSortAscending = 1 << 10, // Disable ability to sort in the ascending direction.
+ ImGuiTableColumnFlags_NoSortDescending = 1 << 11, // Disable ability to sort in the descending direction.
+ ImGuiTableColumnFlags_NoHeaderLabel = 1 << 12, // TableHeadersRow() will not submit label for this column. Convenient for some small columns. Name will still appear in context menu.
+ ImGuiTableColumnFlags_NoHeaderWidth = 1 << 13, // Disable header text width contribution to automatic column width.
+ ImGuiTableColumnFlags_PreferSortAscending = 1 << 14, // Make the initial sort direction Ascending when first sorting on this column (default).
+ ImGuiTableColumnFlags_PreferSortDescending = 1 << 15, // Make the initial sort direction Descending when first sorting on this column.
+ ImGuiTableColumnFlags_IndentEnable = 1 << 16, // Use current Indent value when entering cell (default for column 0).
+ ImGuiTableColumnFlags_IndentDisable = 1 << 17, // Ignore current Indent value when entering cell (default for columns > 0). Indentation changes _within_ the cell will still be honored.
+
+ // Output status flags, read-only via TableGetColumnFlags()
+ ImGuiTableColumnFlags_IsEnabled = 1 << 24, // Status: is enabled == not hidden by user/api (referred to as "Hide" in _DefaultHide and _NoHide) flags.
+ ImGuiTableColumnFlags_IsVisible = 1 << 25, // Status: is visible == is enabled AND not clipped by scrolling.
+ ImGuiTableColumnFlags_IsSorted = 1 << 26, // Status: is currently part of the sort specs
+ ImGuiTableColumnFlags_IsHovered = 1 << 27, // Status: is hovered by mouse
+
+ // [Internal] Combinations and masks
+ ImGuiTableColumnFlags_WidthMask_ = ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_WidthFixed,
+ ImGuiTableColumnFlags_IndentMask_ = ImGuiTableColumnFlags_IndentEnable | ImGuiTableColumnFlags_IndentDisable,
+ ImGuiTableColumnFlags_StatusMask_ = ImGuiTableColumnFlags_IsEnabled | ImGuiTableColumnFlags_IsVisible | ImGuiTableColumnFlags_IsSorted | ImGuiTableColumnFlags_IsHovered,
+ ImGuiTableColumnFlags_NoDirectResize_ = 1 << 30 // [Internal] Disable user resizing this column directly (it may however we resized indirectly from its left edge)
+
+ // Obsolete names (will be removed soon)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ //ImGuiTableColumnFlags_WidthAuto = ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoResize, // Column will not stretch and keep resizing based on submitted contents.
+#endif
+};
+
+// Flags for ImGui::TableNextRow()
+enum ImGuiTableRowFlags_
+{
+ ImGuiTableRowFlags_None = 0,
+ ImGuiTableRowFlags_Headers = 1 << 0 // Identify header row (set default background color + width of its contents accounted differently for auto column width)
+};
+
+// Enum for ImGui::TableSetBgColor()
+// Background colors are rendering in 3 layers:
+// - Layer 0: draw with RowBg0 color if set, otherwise draw with ColumnBg0 if set.
+// - Layer 1: draw with RowBg1 color if set, otherwise draw with ColumnBg1 if set.
+// - Layer 2: draw with CellBg color if set.
+// The purpose of the two row/columns layers is to let you decide if a background color changes should override or blend with the existing color.
+// When using ImGuiTableFlags_RowBg on the table, each row has the RowBg0 color automatically set for odd/even rows.
+// If you set the color of RowBg0 target, your color will override the existing RowBg0 color.
+// If you set the color of RowBg1 or ColumnBg1 target, your color will blend over the RowBg0 color.
+enum ImGuiTableBgTarget_
+{
+ ImGuiTableBgTarget_None = 0,
+ ImGuiTableBgTarget_RowBg0 = 1, // Set row background color 0 (generally used for background, automatically set when ImGuiTableFlags_RowBg is used)
+ ImGuiTableBgTarget_RowBg1 = 2, // Set row background color 1 (generally used for selection marking)
+ ImGuiTableBgTarget_CellBg = 3 // Set cell background color (top-most color)
+};
+
+// Flags for ImGui::IsWindowFocused()
+enum ImGuiFocusedFlags_
+{
+ ImGuiFocusedFlags_None = 0,
+ ImGuiFocusedFlags_ChildWindows = 1 << 0, // Return true if any children of the window is focused
+ ImGuiFocusedFlags_RootWindow = 1 << 1, // Test from root window (top most parent of the current hierarchy)
+ ImGuiFocusedFlags_AnyWindow = 1 << 2, // Return true if any window is focused. Important: If you are trying to tell how to dispatch your low-level inputs, do NOT use this. Use 'io.WantCaptureMouse' instead! Please read the FAQ!
+ ImGuiFocusedFlags_NoPopupHierarchy = 1 << 3, // Do not consider popup hierarchy (do not treat popup emitter as parent of popup) (when used with _ChildWindows or _RootWindow)
+ //ImGuiFocusedFlags_DockHierarchy = 1 << 4, // Consider docking hierarchy (treat dockspace host as parent of docked window) (when used with _ChildWindows or _RootWindow)
+ ImGuiFocusedFlags_RootAndChildWindows = ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_ChildWindows
+};
+
+// Flags for ImGui::IsItemHovered(), ImGui::IsWindowHovered()
+// Note: if you are trying to check whether your mouse should be dispatched to Dear ImGui or to your app, you should use 'io.WantCaptureMouse' instead! Please read the FAQ!
+// Note: windows with the ImGuiWindowFlags_NoInputs flag are ignored by IsWindowHovered() calls.
+enum ImGuiHoveredFlags_
+{
+ ImGuiHoveredFlags_None = 0, // Return true if directly over the item/window, not obstructed by another window, not obstructed by an active popup or modal blocking inputs under them.
+ ImGuiHoveredFlags_ChildWindows = 1 << 0, // IsWindowHovered() only: Return true if any children of the window is hovered
+ ImGuiHoveredFlags_RootWindow = 1 << 1, // IsWindowHovered() only: Test from root window (top most parent of the current hierarchy)
+ ImGuiHoveredFlags_AnyWindow = 1 << 2, // IsWindowHovered() only: Return true if any window is hovered
+ ImGuiHoveredFlags_NoPopupHierarchy = 1 << 3, // IsWindowHovered() only: Do not consider popup hierarchy (do not treat popup emitter as parent of popup) (when used with _ChildWindows or _RootWindow)
+ //ImGuiHoveredFlags_DockHierarchy = 1 << 4, // IsWindowHovered() only: Consider docking hierarchy (treat dockspace host as parent of docked window) (when used with _ChildWindows or _RootWindow)
+ ImGuiHoveredFlags_AllowWhenBlockedByPopup = 1 << 5, // Return true even if a popup window is normally blocking access to this item/window
+ //ImGuiHoveredFlags_AllowWhenBlockedByModal = 1 << 6, // Return true even if a modal popup window is normally blocking access to this item/window. FIXME-TODO: Unavailable yet.
+ ImGuiHoveredFlags_AllowWhenBlockedByActiveItem = 1 << 7, // Return true even if an active item is blocking access to this item/window. Useful for Drag and Drop patterns.
+ ImGuiHoveredFlags_AllowWhenOverlapped = 1 << 8, // IsItemHovered() only: Return true even if the position is obstructed or overlapped by another window
+ ImGuiHoveredFlags_AllowWhenDisabled = 1 << 9, // IsItemHovered() only: Return true even if the item is disabled
+ ImGuiHoveredFlags_NoNavOverride = 1 << 10, // Disable using gamepad/keyboard navigation state when active, always query mouse.
+ ImGuiHoveredFlags_RectOnly = ImGuiHoveredFlags_AllowWhenBlockedByPopup | ImGuiHoveredFlags_AllowWhenBlockedByActiveItem | ImGuiHoveredFlags_AllowWhenOverlapped,
+ ImGuiHoveredFlags_RootAndChildWindows = ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_ChildWindows
+};
+
+// Flags for ImGui::BeginDragDropSource(), ImGui::AcceptDragDropPayload()
+enum ImGuiDragDropFlags_
+{
+ ImGuiDragDropFlags_None = 0,
+ // BeginDragDropSource() flags
+ ImGuiDragDropFlags_SourceNoPreviewTooltip = 1 << 0, // By default, a successful call to BeginDragDropSource opens a tooltip so you can display a preview or description of the source contents. This flag disable this behavior.
+ ImGuiDragDropFlags_SourceNoDisableHover = 1 << 1, // By default, when dragging we clear data so that IsItemHovered() will return false, to avoid subsequent user code submitting tooltips. This flag disable this behavior so you can still call IsItemHovered() on the source item.
+ ImGuiDragDropFlags_SourceNoHoldToOpenOthers = 1 << 2, // Disable the behavior that allows to open tree nodes and collapsing header by holding over them while dragging a source item.
+ ImGuiDragDropFlags_SourceAllowNullID = 1 << 3, // Allow items such as Text(), Image() that have no unique identifier to be used as drag source, by manufacturing a temporary identifier based on their window-relative position. This is extremely unusual within the dear imgui ecosystem and so we made it explicit.
+ ImGuiDragDropFlags_SourceExtern = 1 << 4, // External source (from outside of dear imgui), won't attempt to read current item/window info. Will always return true. Only one Extern source can be active simultaneously.
+ ImGuiDragDropFlags_SourceAutoExpirePayload = 1 << 5, // Automatically expire the payload if the source cease to be submitted (otherwise payloads are persisting while being dragged)
+ // AcceptDragDropPayload() flags
+ ImGuiDragDropFlags_AcceptBeforeDelivery = 1 << 10, // AcceptDragDropPayload() will returns true even before the mouse button is released. You can then call IsDelivery() to test if the payload needs to be delivered.
+ ImGuiDragDropFlags_AcceptNoDrawDefaultRect = 1 << 11, // Do not draw the default highlight rectangle when hovering over target.
+ ImGuiDragDropFlags_AcceptNoPreviewTooltip = 1 << 12, // Request hiding the BeginDragDropSource tooltip from the BeginDragDropTarget site.
+ ImGuiDragDropFlags_AcceptPeekOnly = ImGuiDragDropFlags_AcceptBeforeDelivery | ImGuiDragDropFlags_AcceptNoDrawDefaultRect // For peeking ahead and inspecting the payload before delivery.
+};
+
+// Standard Drag and Drop payload types. You can define you own payload types using short strings. Types starting with '_' are defined by Dear ImGui.
+#define IMGUI_PAYLOAD_TYPE_COLOR_3F "_COL3F" // float[3]: Standard type for colors, without alpha. User code may use this type.
+#define IMGUI_PAYLOAD_TYPE_COLOR_4F "_COL4F" // float[4]: Standard type for colors. User code may use this type.
+
+// A primary data type
+enum ImGuiDataType_
+{
+ ImGuiDataType_S8, // signed char / char (with sensible compilers)
+ ImGuiDataType_U8, // unsigned char
+ ImGuiDataType_S16, // short
+ ImGuiDataType_U16, // unsigned short
+ ImGuiDataType_S32, // int
+ ImGuiDataType_U32, // unsigned int
+ ImGuiDataType_S64, // long long / __int64
+ ImGuiDataType_U64, // unsigned long long / unsigned __int64
+ ImGuiDataType_Float, // float
+ ImGuiDataType_Double, // double
+ ImGuiDataType_COUNT
+};
+
+// A cardinal direction
+enum ImGuiDir_
+{
+ ImGuiDir_None = -1,
+ ImGuiDir_Left = 0,
+ ImGuiDir_Right = 1,
+ ImGuiDir_Up = 2,
+ ImGuiDir_Down = 3,
+ ImGuiDir_COUNT
+};
+
+// A sorting direction
+enum ImGuiSortDirection_
+{
+ ImGuiSortDirection_None = 0,
+ ImGuiSortDirection_Ascending = 1, // Ascending = 0->9, A->Z etc.
+ ImGuiSortDirection_Descending = 2 // Descending = 9->0, Z->A etc.
+};
+
+// Keys value 0 to 511 are left unused as legacy native/opaque key values (< 1.87)
+// Keys value >= 512 are named keys (>= 1.87)
+enum ImGuiKey_
+{
+ // Keyboard
+ ImGuiKey_None = 0,
+ ImGuiKey_Tab = 512, // == ImGuiKey_NamedKey_BEGIN
+ ImGuiKey_LeftArrow,
+ ImGuiKey_RightArrow,
+ ImGuiKey_UpArrow,
+ ImGuiKey_DownArrow,
+ ImGuiKey_PageUp,
+ ImGuiKey_PageDown,
+ ImGuiKey_Home,
+ ImGuiKey_End,
+ ImGuiKey_Insert,
+ ImGuiKey_Delete,
+ ImGuiKey_Backspace,
+ ImGuiKey_Space,
+ ImGuiKey_Enter,
+ ImGuiKey_Escape,
+ ImGuiKey_LeftCtrl, ImGuiKey_LeftShift, ImGuiKey_LeftAlt, ImGuiKey_LeftSuper,
+ ImGuiKey_RightCtrl, ImGuiKey_RightShift, ImGuiKey_RightAlt, ImGuiKey_RightSuper,
+ ImGuiKey_Menu,
+ ImGuiKey_0, ImGuiKey_1, ImGuiKey_2, ImGuiKey_3, ImGuiKey_4, ImGuiKey_5, ImGuiKey_6, ImGuiKey_7, ImGuiKey_8, ImGuiKey_9,
+ ImGuiKey_A, ImGuiKey_B, ImGuiKey_C, ImGuiKey_D, ImGuiKey_E, ImGuiKey_F, ImGuiKey_G, ImGuiKey_H, ImGuiKey_I, ImGuiKey_J,
+ ImGuiKey_K, ImGuiKey_L, ImGuiKey_M, ImGuiKey_N, ImGuiKey_O, ImGuiKey_P, ImGuiKey_Q, ImGuiKey_R, ImGuiKey_S, ImGuiKey_T,
+ ImGuiKey_U, ImGuiKey_V, ImGuiKey_W, ImGuiKey_X, ImGuiKey_Y, ImGuiKey_Z,
+ ImGuiKey_F1, ImGuiKey_F2, ImGuiKey_F3, ImGuiKey_F4, ImGuiKey_F5, ImGuiKey_F6,
+ ImGuiKey_F7, ImGuiKey_F8, ImGuiKey_F9, ImGuiKey_F10, ImGuiKey_F11, ImGuiKey_F12,
+ ImGuiKey_Apostrophe, // '
+ ImGuiKey_Comma, // ,
+ ImGuiKey_Minus, // -
+ ImGuiKey_Period, // .
+ ImGuiKey_Slash, // /
+ ImGuiKey_Semicolon, // ;
+ ImGuiKey_Equal, // =
+ ImGuiKey_LeftBracket, // [
+ ImGuiKey_Backslash, // \ (this text inhibit multiline comment caused by backslash)
+ ImGuiKey_RightBracket, // ]
+ ImGuiKey_GraveAccent, // `
+ ImGuiKey_CapsLock,
+ ImGuiKey_ScrollLock,
+ ImGuiKey_NumLock,
+ ImGuiKey_PrintScreen,
+ ImGuiKey_Pause,
+ ImGuiKey_Keypad0, ImGuiKey_Keypad1, ImGuiKey_Keypad2, ImGuiKey_Keypad3, ImGuiKey_Keypad4,
+ ImGuiKey_Keypad5, ImGuiKey_Keypad6, ImGuiKey_Keypad7, ImGuiKey_Keypad8, ImGuiKey_Keypad9,
+ ImGuiKey_KeypadDecimal,
+ ImGuiKey_KeypadDivide,
+ ImGuiKey_KeypadMultiply,
+ ImGuiKey_KeypadSubtract,
+ ImGuiKey_KeypadAdd,
+ ImGuiKey_KeypadEnter,
+ ImGuiKey_KeypadEqual,
+
+ // Gamepad (some of those are analog values, 0.0f to 1.0f) // NAVIGATION action
+ ImGuiKey_GamepadStart, // Menu (Xbox) + (Switch) Start/Options (PS) // --
+ ImGuiKey_GamepadBack, // View (Xbox) - (Switch) Share (PS) // --
+ ImGuiKey_GamepadFaceUp, // Y (Xbox) X (Switch) Triangle (PS) // -> ImGuiNavInput_Input
+ ImGuiKey_GamepadFaceDown, // A (Xbox) B (Switch) Cross (PS) // -> ImGuiNavInput_Activate
+ ImGuiKey_GamepadFaceLeft, // X (Xbox) Y (Switch) Square (PS) // -> ImGuiNavInput_Menu
+ ImGuiKey_GamepadFaceRight, // B (Xbox) A (Switch) Circle (PS) // -> ImGuiNavInput_Cancel
+ ImGuiKey_GamepadDpadUp, // D-pad Up // -> ImGuiNavInput_DpadUp
+ ImGuiKey_GamepadDpadDown, // D-pad Down // -> ImGuiNavInput_DpadDown
+ ImGuiKey_GamepadDpadLeft, // D-pad Left // -> ImGuiNavInput_DpadLeft
+ ImGuiKey_GamepadDpadRight, // D-pad Right // -> ImGuiNavInput_DpadRight
+ ImGuiKey_GamepadL1, // L Bumper (Xbox) L (Switch) L1 (PS) // -> ImGuiNavInput_FocusPrev + ImGuiNavInput_TweakSlow
+ ImGuiKey_GamepadR1, // R Bumper (Xbox) R (Switch) R1 (PS) // -> ImGuiNavInput_FocusNext + ImGuiNavInput_TweakFast
+ ImGuiKey_GamepadL2, // L Trigger (Xbox) ZL (Switch) L2 (PS) [Analog]
+ ImGuiKey_GamepadR2, // R Trigger (Xbox) ZR (Switch) R2 (PS) [Analog]
+ ImGuiKey_GamepadL3, // L Thumbstick (Xbox) L3 (Switch) L3 (PS)
+ ImGuiKey_GamepadR3, // R Thumbstick (Xbox) R3 (Switch) R3 (PS)
+ ImGuiKey_GamepadLStickUp, // [Analog] // -> ImGuiNavInput_LStickUp
+ ImGuiKey_GamepadLStickDown, // [Analog] // -> ImGuiNavInput_LStickDown
+ ImGuiKey_GamepadLStickLeft, // [Analog] // -> ImGuiNavInput_LStickLeft
+ ImGuiKey_GamepadLStickRight, // [Analog] // -> ImGuiNavInput_LStickRight
+ ImGuiKey_GamepadRStickUp, // [Analog]
+ ImGuiKey_GamepadRStickDown, // [Analog]
+ ImGuiKey_GamepadRStickLeft, // [Analog]
+ ImGuiKey_GamepadRStickRight, // [Analog]
+
+ // Keyboard Modifiers (explicitly submitted by backend via AddKeyEvent() calls)
+ // - This is mirroring the data also written to io.KeyCtrl, io.KeyShift, io.KeyAlt, io.KeySuper, in a format allowing
+ // them to be accessed via standard key API, allowing calls such as IsKeyPressed(), IsKeyReleased(), querying duration etc.
+ // - Code polling every keys (e.g. an interface to detect a key press for input mapping) might want to ignore those
+ // and prefer using the real keys (e.g. ImGuiKey_LeftCtrl, ImGuiKey_RightCtrl instead of ImGuiKey_ModCtrl).
+ // - In theory the value of keyboard modifiers should be roughly equivalent to a logical or of the equivalent left/right keys.
+ // In practice: it's complicated; mods are often provided from different sources. Keyboard layout, IME, sticky keys and
+ // backends tend to interfere and break that equivalence. The safer decision is to relay that ambiguity down to the end-user...
+ ImGuiKey_ModCtrl, ImGuiKey_ModShift, ImGuiKey_ModAlt, ImGuiKey_ModSuper,
+
+ // End of list
+ ImGuiKey_COUNT, // No valid ImGuiKey is ever greater than this value
+
+ // [Internal] Prior to 1.87 we required user to fill io.KeysDown[512] using their own native index + a io.KeyMap[] array.
+ // We are ditching this method but keeping a legacy path for user code doing e.g. IsKeyPressed(MY_NATIVE_KEY_CODE)
+ ImGuiKey_NamedKey_BEGIN = 512,
+ ImGuiKey_NamedKey_END = ImGuiKey_COUNT,
+ ImGuiKey_NamedKey_COUNT = ImGuiKey_NamedKey_END - ImGuiKey_NamedKey_BEGIN,
+#ifdef IMGUI_DISABLE_OBSOLETE_KEYIO
+ ImGuiKey_KeysData_SIZE = ImGuiKey_NamedKey_COUNT, // Size of KeysData[]: only hold named keys
+ ImGuiKey_KeysData_OFFSET = ImGuiKey_NamedKey_BEGIN // First key stored in io.KeysData[0]. Accesses to io.KeysData[] must use (key - ImGuiKey_KeysData_OFFSET).
+#else
+ ImGuiKey_KeysData_SIZE = ImGuiKey_COUNT, // Size of KeysData[]: hold legacy 0..512 keycodes + named keys
+ ImGuiKey_KeysData_OFFSET = 0 // First key stored in io.KeysData[0]. Accesses to io.KeysData[] must use (key - ImGuiKey_KeysData_OFFSET).
+#endif
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ , ImGuiKey_KeyPadEnter = ImGuiKey_KeypadEnter // Renamed in 1.87
+#endif
+};
+
+// Helper "flags" version of key-mods to store and compare multiple key-mods easily. Sometimes used for storage (e.g. io.KeyMods) but otherwise not much used in public API.
+enum ImGuiModFlags_
+{
+ ImGuiModFlags_None = 0,
+ ImGuiModFlags_Ctrl = 1 << 0,
+ ImGuiModFlags_Shift = 1 << 1,
+ ImGuiModFlags_Alt = 1 << 2, // Menu
+ ImGuiModFlags_Super = 1 << 3 // Cmd/Super/Windows key
+};
+
+// Gamepad/Keyboard navigation
+// Since >= 1.87 backends you generally don't need to care about this enum since io.NavInputs[] is setup automatically. This might become private/internal some day.
+// Keyboard: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard to enable. NewFrame() will automatically fill io.NavInputs[] based on your io.AddKeyEvent() calls.
+// Gamepad: Set io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad to enable. Backend: set ImGuiBackendFlags_HasGamepad and fill the io.NavInputs[] fields before calling NewFrame(). Note that io.NavInputs[] is cleared by EndFrame().
+// Read instructions in imgui.cpp for more details. Download PNG/PSD at http://dearimgui.org/controls_sheets.
+enum ImGuiNavInput_
+{
+ // Gamepad Mapping
+ ImGuiNavInput_Activate, // Activate / Open / Toggle / Tweak value // e.g. Cross (PS4), A (Xbox), A (Switch), Space (Keyboard)
+ ImGuiNavInput_Cancel, // Cancel / Close / Exit // e.g. Circle (PS4), B (Xbox), B (Switch), Escape (Keyboard)
+ ImGuiNavInput_Input, // Text input / On-Screen keyboard // e.g. Triang.(PS4), Y (Xbox), X (Switch), Return (Keyboard)
+ ImGuiNavInput_Menu, // Tap: Toggle menu / Hold: Focus, Move, Resize // e.g. Square (PS4), X (Xbox), Y (Switch), Alt (Keyboard)
+ ImGuiNavInput_DpadLeft, // Move / Tweak / Resize window (w/ PadMenu) // e.g. D-pad Left/Right/Up/Down (Gamepads), Arrow keys (Keyboard)
+ ImGuiNavInput_DpadRight, //
+ ImGuiNavInput_DpadUp, //
+ ImGuiNavInput_DpadDown, //
+ ImGuiNavInput_LStickLeft, // Scroll / Move window (w/ PadMenu) // e.g. Left Analog Stick Left/Right/Up/Down
+ ImGuiNavInput_LStickRight, //
+ ImGuiNavInput_LStickUp, //
+ ImGuiNavInput_LStickDown, //
+ ImGuiNavInput_FocusPrev, // Focus Next window (w/ PadMenu) // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch)
+ ImGuiNavInput_FocusNext, // Focus Prev window (w/ PadMenu) // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch)
+ ImGuiNavInput_TweakSlow, // Slower tweaks // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch)
+ ImGuiNavInput_TweakFast, // Faster tweaks // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch)
+
+ // [Internal] Don't use directly! This is used internally to differentiate keyboard from gamepad inputs for behaviors that require to differentiate them.
+ // Keyboard behavior that have no corresponding gamepad mapping (e.g. CTRL+TAB) will be directly reading from keyboard keys instead of io.NavInputs[].
+ ImGuiNavInput_KeyLeft_, // Move left // = Arrow keys
+ ImGuiNavInput_KeyRight_, // Move right
+ ImGuiNavInput_KeyUp_, // Move up
+ ImGuiNavInput_KeyDown_, // Move down
+ ImGuiNavInput_COUNT
+};
+
+// Configuration flags stored in io.ConfigFlags. Set by user/application.
+enum ImGuiConfigFlags_
+{
+ ImGuiConfigFlags_None = 0,
+ ImGuiConfigFlags_NavEnableKeyboard = 1 << 0, // Master keyboard navigation enable flag. NewFrame() will automatically fill io.NavInputs[] based on io.AddKeyEvent() calls
+ ImGuiConfigFlags_NavEnableGamepad = 1 << 1, // Master gamepad navigation enable flag. This is mostly to instruct your imgui backend to fill io.NavInputs[]. Backend also needs to set ImGuiBackendFlags_HasGamepad.
+ ImGuiConfigFlags_NavEnableSetMousePos = 1 << 2, // Instruct navigation to move the mouse cursor. May be useful on TV/console systems where moving a virtual mouse is awkward. Will update io.MousePos and set io.WantSetMousePos=true. If enabled you MUST honor io.WantSetMousePos requests in your backend, otherwise ImGui will react as if the mouse is jumping around back and forth.
+ ImGuiConfigFlags_NavNoCaptureKeyboard = 1 << 3, // Instruct navigation to not set the io.WantCaptureKeyboard flag when io.NavActive is set.
+ ImGuiConfigFlags_NoMouse = 1 << 4, // Instruct imgui to clear mouse position/buttons in NewFrame(). This allows ignoring the mouse information set by the backend.
+ ImGuiConfigFlags_NoMouseCursorChange = 1 << 5, // Instruct backend to not alter mouse cursor shape and visibility. Use if the backend cursor changes are interfering with yours and you don't want to use SetMouseCursor() to change mouse cursor. You may want to honor requests from imgui by reading GetMouseCursor() yourself instead.
+
+ // User storage (to allow your backend/engine to communicate to code that may be shared between multiple projects. Those flags are NOT used by core Dear ImGui)
+ ImGuiConfigFlags_IsSRGB = 1 << 20, // Application is SRGB-aware.
+ ImGuiConfigFlags_IsTouchScreen = 1 << 21 // Application is using a touch screen instead of a mouse.
+};
+
+// Backend capabilities flags stored in io.BackendFlags. Set by imgui_impl_xxx or custom backend.
+enum ImGuiBackendFlags_
+{
+ ImGuiBackendFlags_None = 0,
+ ImGuiBackendFlags_HasGamepad = 1 << 0, // Backend Platform supports gamepad and currently has one connected.
+ ImGuiBackendFlags_HasMouseCursors = 1 << 1, // Backend Platform supports honoring GetMouseCursor() value to change the OS cursor shape.
+ ImGuiBackendFlags_HasSetMousePos = 1 << 2, // Backend Platform supports io.WantSetMousePos requests to reposition the OS mouse position (only used if ImGuiConfigFlags_NavEnableSetMousePos is set).
+ ImGuiBackendFlags_RendererHasVtxOffset = 1 << 3 // Backend Renderer supports ImDrawCmd::VtxOffset. This enables output of large meshes (64K+ vertices) while still using 16-bit indices.
+};
+
+// Enumeration for PushStyleColor() / PopStyleColor()
+enum ImGuiCol_
+{
+ ImGuiCol_Text,
+ ImGuiCol_TextDisabled,
+ ImGuiCol_WindowBg, // Background of normal windows
+ ImGuiCol_ChildBg, // Background of child windows
+ ImGuiCol_PopupBg, // Background of popups, menus, tooltips windows
+ ImGuiCol_Border,
+ ImGuiCol_BorderShadow,
+ ImGuiCol_FrameBg, // Background of checkbox, radio button, plot, slider, text input
+ ImGuiCol_FrameBgHovered,
+ ImGuiCol_FrameBgActive,
+ ImGuiCol_TitleBg,
+ ImGuiCol_TitleBgActive,
+ ImGuiCol_TitleBgCollapsed,
+ ImGuiCol_MenuBarBg,
+ ImGuiCol_ScrollbarBg,
+ ImGuiCol_ScrollbarGrab,
+ ImGuiCol_ScrollbarGrabHovered,
+ ImGuiCol_ScrollbarGrabActive,
+ ImGuiCol_CheckMark,
+ ImGuiCol_SliderGrab,
+ ImGuiCol_SliderGrabActive,
+ ImGuiCol_Button,
+ ImGuiCol_ButtonHovered,
+ ImGuiCol_ButtonActive,
+ ImGuiCol_Header, // Header* colors are used for CollapsingHeader, TreeNode, Selectable, MenuItem
+ ImGuiCol_HeaderHovered,
+ ImGuiCol_HeaderActive,
+ ImGuiCol_Separator,
+ ImGuiCol_SeparatorHovered,
+ ImGuiCol_SeparatorActive,
+ ImGuiCol_ResizeGrip, // Resize grip in lower-right and lower-left corners of windows.
+ ImGuiCol_ResizeGripHovered,
+ ImGuiCol_ResizeGripActive,
+ ImGuiCol_Tab, // TabItem in a TabBar
+ ImGuiCol_TabHovered,
+ ImGuiCol_TabActive,
+ ImGuiCol_TabUnfocused,
+ ImGuiCol_TabUnfocusedActive,
+ ImGuiCol_PlotLines,
+ ImGuiCol_PlotLinesHovered,
+ ImGuiCol_PlotHistogram,
+ ImGuiCol_PlotHistogramHovered,
+ ImGuiCol_TableHeaderBg, // Table header background
+ ImGuiCol_TableBorderStrong, // Table outer and header borders (prefer using Alpha=1.0 here)
+ ImGuiCol_TableBorderLight, // Table inner borders (prefer using Alpha=1.0 here)
+ ImGuiCol_TableRowBg, // Table row background (even rows)
+ ImGuiCol_TableRowBgAlt, // Table row background (odd rows)
+ ImGuiCol_TextSelectedBg,
+ ImGuiCol_DragDropTarget, // Rectangle highlighting a drop target
+ ImGuiCol_NavHighlight, // Gamepad/keyboard: current highlighted item
+ ImGuiCol_NavWindowingHighlight, // Highlight window when using CTRL+TAB
+ ImGuiCol_NavWindowingDimBg, // Darken/colorize entire screen behind the CTRL+TAB window list, when active
+ ImGuiCol_ModalWindowDimBg, // Darken/colorize entire screen behind a modal window, when one is active
+ ImGuiCol_COUNT
+};
+
+// Enumeration for PushStyleVar() / PopStyleVar() to temporarily modify the ImGuiStyle structure.
+// - The enum only refers to fields of ImGuiStyle which makes sense to be pushed/popped inside UI code.
+// During initialization or between frames, feel free to just poke into ImGuiStyle directly.
+// - Tip: Use your programming IDE navigation facilities on the names in the _second column_ below to find the actual members and their description.
+// In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
+// With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
+// - When changing this enum, you need to update the associated internal table GStyleVarInfo[] accordingly. This is where we link enum values to members offset/type.
+enum ImGuiStyleVar_
+{
+ // Enum name --------------------- // Member in ImGuiStyle structure (see ImGuiStyle for descriptions)
+ ImGuiStyleVar_Alpha, // float Alpha
+ ImGuiStyleVar_DisabledAlpha, // float DisabledAlpha
+ ImGuiStyleVar_WindowPadding, // ImVec2 WindowPadding
+ ImGuiStyleVar_WindowRounding, // float WindowRounding
+ ImGuiStyleVar_WindowBorderSize, // float WindowBorderSize
+ ImGuiStyleVar_WindowMinSize, // ImVec2 WindowMinSize
+ ImGuiStyleVar_WindowTitleAlign, // ImVec2 WindowTitleAlign
+ ImGuiStyleVar_ChildRounding, // float ChildRounding
+ ImGuiStyleVar_ChildBorderSize, // float ChildBorderSize
+ ImGuiStyleVar_PopupRounding, // float PopupRounding
+ ImGuiStyleVar_PopupBorderSize, // float PopupBorderSize
+ ImGuiStyleVar_FramePadding, // ImVec2 FramePadding
+ ImGuiStyleVar_FrameRounding, // float FrameRounding
+ ImGuiStyleVar_FrameBorderSize, // float FrameBorderSize
+ ImGuiStyleVar_ItemSpacing, // ImVec2 ItemSpacing
+ ImGuiStyleVar_ItemInnerSpacing, // ImVec2 ItemInnerSpacing
+ ImGuiStyleVar_IndentSpacing, // float IndentSpacing
+ ImGuiStyleVar_CellPadding, // ImVec2 CellPadding
+ ImGuiStyleVar_ScrollbarSize, // float ScrollbarSize
+ ImGuiStyleVar_ScrollbarRounding, // float ScrollbarRounding
+ ImGuiStyleVar_GrabMinSize, // float GrabMinSize
+ ImGuiStyleVar_GrabRounding, // float GrabRounding
+ ImGuiStyleVar_TabRounding, // float TabRounding
+ ImGuiStyleVar_ButtonTextAlign, // ImVec2 ButtonTextAlign
+ ImGuiStyleVar_SelectableTextAlign, // ImVec2 SelectableTextAlign
+ ImGuiStyleVar_COUNT
+};
+
+// Flags for InvisibleButton() [extended in imgui_internal.h]
+enum ImGuiButtonFlags_
+{
+ ImGuiButtonFlags_None = 0,
+ ImGuiButtonFlags_MouseButtonLeft = 1 << 0, // React on left mouse button (default)
+ ImGuiButtonFlags_MouseButtonRight = 1 << 1, // React on right mouse button
+ ImGuiButtonFlags_MouseButtonMiddle = 1 << 2, // React on center mouse button
+
+ // [Internal]
+ ImGuiButtonFlags_MouseButtonMask_ = ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight | ImGuiButtonFlags_MouseButtonMiddle,
+ ImGuiButtonFlags_MouseButtonDefault_ = ImGuiButtonFlags_MouseButtonLeft
+};
+
+// Flags for ColorEdit3() / ColorEdit4() / ColorPicker3() / ColorPicker4() / ColorButton()
+enum ImGuiColorEditFlags_
+{
+ ImGuiColorEditFlags_None = 0,
+ ImGuiColorEditFlags_NoAlpha = 1 << 1, // // ColorEdit, ColorPicker, ColorButton: ignore Alpha component (will only read 3 components from the input pointer).
+ ImGuiColorEditFlags_NoPicker = 1 << 2, // // ColorEdit: disable picker when clicking on color square.
+ ImGuiColorEditFlags_NoOptions = 1 << 3, // // ColorEdit: disable toggling options menu when right-clicking on inputs/small preview.
+ ImGuiColorEditFlags_NoSmallPreview = 1 << 4, // // ColorEdit, ColorPicker: disable color square preview next to the inputs. (e.g. to show only the inputs)
+ ImGuiColorEditFlags_NoInputs = 1 << 5, // // ColorEdit, ColorPicker: disable inputs sliders/text widgets (e.g. to show only the small preview color square).
+ ImGuiColorEditFlags_NoTooltip = 1 << 6, // // ColorEdit, ColorPicker, ColorButton: disable tooltip when hovering the preview.
+ ImGuiColorEditFlags_NoLabel = 1 << 7, // // ColorEdit, ColorPicker: disable display of inline text label (the label is still forwarded to the tooltip and picker).
+ ImGuiColorEditFlags_NoSidePreview = 1 << 8, // // ColorPicker: disable bigger color preview on right side of the picker, use small color square preview instead.
+ ImGuiColorEditFlags_NoDragDrop = 1 << 9, // // ColorEdit: disable drag and drop target. ColorButton: disable drag and drop source.
+ ImGuiColorEditFlags_NoBorder = 1 << 10, // // ColorButton: disable border (which is enforced by default)
+
+ // User Options (right-click on widget to change some of them).
+ ImGuiColorEditFlags_AlphaBar = 1 << 16, // // ColorEdit, ColorPicker: show vertical alpha bar/gradient in picker.
+ ImGuiColorEditFlags_AlphaPreview = 1 << 17, // // ColorEdit, ColorPicker, ColorButton: display preview as a transparent color over a checkerboard, instead of opaque.
+ ImGuiColorEditFlags_AlphaPreviewHalf= 1 << 18, // // ColorEdit, ColorPicker, ColorButton: display half opaque / half checkerboard, instead of opaque.
+ ImGuiColorEditFlags_HDR = 1 << 19, // // (WIP) ColorEdit: Currently only disable 0.0f..1.0f limits in RGBA edition (note: you probably want to use ImGuiColorEditFlags_Float flag as well).
+ ImGuiColorEditFlags_DisplayRGB = 1 << 20, // [Display] // ColorEdit: override _display_ type among RGB/HSV/Hex. ColorPicker: select any combination using one or more of RGB/HSV/Hex.
+ ImGuiColorEditFlags_DisplayHSV = 1 << 21, // [Display] // "
+ ImGuiColorEditFlags_DisplayHex = 1 << 22, // [Display] // "
+ ImGuiColorEditFlags_Uint8 = 1 << 23, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0..255.
+ ImGuiColorEditFlags_Float = 1 << 24, // [DataType] // ColorEdit, ColorPicker, ColorButton: _display_ values formatted as 0.0f..1.0f floats instead of 0..255 integers. No round-trip of value via integers.
+ ImGuiColorEditFlags_PickerHueBar = 1 << 25, // [Picker] // ColorPicker: bar for Hue, rectangle for Sat/Value.
+ ImGuiColorEditFlags_PickerHueWheel = 1 << 26, // [Picker] // ColorPicker: wheel for Hue, triangle for Sat/Value.
+ ImGuiColorEditFlags_InputRGB = 1 << 27, // [Input] // ColorEdit, ColorPicker: input and output data in RGB format.
+ ImGuiColorEditFlags_InputHSV = 1 << 28, // [Input] // ColorEdit, ColorPicker: input and output data in HSV format.
+
+ // Defaults Options. You can set application defaults using SetColorEditOptions(). The intent is that you probably don't want to
+ // override them in most of your calls. Let the user choose via the option menu and/or call SetColorEditOptions() once during startup.
+ ImGuiColorEditFlags_DefaultOptions_ = ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_PickerHueBar,
+
+ // [Internal] Masks
+ ImGuiColorEditFlags_DisplayMask_ = ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_DisplayHex,
+ ImGuiColorEditFlags_DataTypeMask_ = ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_Float,
+ ImGuiColorEditFlags_PickerMask_ = ImGuiColorEditFlags_PickerHueWheel | ImGuiColorEditFlags_PickerHueBar,
+ ImGuiColorEditFlags_InputMask_ = ImGuiColorEditFlags_InputRGB | ImGuiColorEditFlags_InputHSV
+
+ // Obsolete names (will be removed)
+ // ImGuiColorEditFlags_RGB = ImGuiColorEditFlags_DisplayRGB, ImGuiColorEditFlags_HSV = ImGuiColorEditFlags_DisplayHSV, ImGuiColorEditFlags_HEX = ImGuiColorEditFlags_DisplayHex // [renamed in 1.69]
+};
+
+// Flags for DragFloat(), DragInt(), SliderFloat(), SliderInt() etc.
+// We use the same sets of flags for DragXXX() and SliderXXX() functions as the features are the same and it makes it easier to swap them.
+enum ImGuiSliderFlags_
+{
+ ImGuiSliderFlags_None = 0,
+ ImGuiSliderFlags_AlwaysClamp = 1 << 4, // Clamp value to min/max bounds when input manually with CTRL+Click. By default CTRL+Click allows going out of bounds.
+ ImGuiSliderFlags_Logarithmic = 1 << 5, // Make the widget logarithmic (linear otherwise). Consider using ImGuiSliderFlags_NoRoundToFormat with this if using a format-string with small amount of digits.
+ ImGuiSliderFlags_NoRoundToFormat = 1 << 6, // Disable rounding underlying value to match precision of the display format string (e.g. %.3f values are rounded to those 3 digits)
+ ImGuiSliderFlags_NoInput = 1 << 7, // Disable CTRL+Click or Enter key allowing to input text directly into the widget
+ ImGuiSliderFlags_InvalidMask_ = 0x7000000F // [Internal] We treat using those bits as being potentially a 'float power' argument from the previous API that has got miscast to this enum, and will trigger an assert if needed.
+
+ // Obsolete names (will be removed)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ , ImGuiSliderFlags_ClampOnInput = ImGuiSliderFlags_AlwaysClamp // [renamed in 1.79]
+#endif
+};
+
+// Identify a mouse button.
+// Those values are guaranteed to be stable and we frequently use 0/1 directly. Named enums provided for convenience.
+enum ImGuiMouseButton_
+{
+ ImGuiMouseButton_Left = 0,
+ ImGuiMouseButton_Right = 1,
+ ImGuiMouseButton_Middle = 2,
+ ImGuiMouseButton_COUNT = 5
+};
+
+// Enumeration for GetMouseCursor()
+// User code may request backend to display given cursor by calling SetMouseCursor(), which is why we have some cursors that are marked unused here
+enum ImGuiMouseCursor_
+{
+ ImGuiMouseCursor_None = -1,
+ ImGuiMouseCursor_Arrow = 0,
+ ImGuiMouseCursor_TextInput, // When hovering over InputText, etc.
+ ImGuiMouseCursor_ResizeAll, // (Unused by Dear ImGui functions)
+ ImGuiMouseCursor_ResizeNS, // When hovering over an horizontal border
+ ImGuiMouseCursor_ResizeEW, // When hovering over a vertical border or a column
+ ImGuiMouseCursor_ResizeNESW, // When hovering over the bottom-left corner of a window
+ ImGuiMouseCursor_ResizeNWSE, // When hovering over the bottom-right corner of a window
+ ImGuiMouseCursor_Hand, // (Unused by Dear ImGui functions. Use for e.g. hyperlinks)
+ ImGuiMouseCursor_NotAllowed, // When hovering something with disallowed interaction. Usually a crossed circle.
+ ImGuiMouseCursor_COUNT
+};
+
+// Enumeration for ImGui::SetWindow***(), SetNextWindow***(), SetNextItem***() functions
+// Represent a condition.
+// Important: Treat as a regular enum! Do NOT combine multiple values using binary operators! All the functions above treat 0 as a shortcut to ImGuiCond_Always.
+enum ImGuiCond_
+{
+ ImGuiCond_None = 0, // No condition (always set the variable), same as _Always
+ ImGuiCond_Always = 1 << 0, // No condition (always set the variable)
+ ImGuiCond_Once = 1 << 1, // Set the variable once per runtime session (only the first call will succeed)
+ ImGuiCond_FirstUseEver = 1 << 2, // Set the variable if the object/window has no persistently saved data (no entry in .ini file)
+ ImGuiCond_Appearing = 1 << 3 // Set the variable if the object/window is appearing after being hidden/inactive (or the first time)
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Helpers: Memory allocations macros, ImVector<>
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// IM_MALLOC(), IM_FREE(), IM_NEW(), IM_PLACEMENT_NEW(), IM_DELETE()
+// We call C++ constructor on own allocated memory via the placement "new(ptr) Type()" syntax.
+// Defining a custom placement new() with a custom parameter allows us to bypass including <new> which on some platforms complains when user has disabled exceptions.
+//-----------------------------------------------------------------------------
+
+struct ImNewWrapper {};
+inline void* operator new(size_t, ImNewWrapper, void* ptr) { return ptr; }
+inline void operator delete(void*, ImNewWrapper, void*) {} // This is only required so we can use the symmetrical new()
+#define IM_ALLOC(_SIZE) ImGui::MemAlloc(_SIZE)
+#define IM_FREE(_PTR) ImGui::MemFree(_PTR)
+#define IM_PLACEMENT_NEW(_PTR) new(ImNewWrapper(), _PTR)
+#define IM_NEW(_TYPE) new(ImNewWrapper(), ImGui::MemAlloc(sizeof(_TYPE))) _TYPE
+template<typename T> void IM_DELETE(T* p) { if (p) { p->~T(); ImGui::MemFree(p); } }
+
+//-----------------------------------------------------------------------------
+// ImVector<>
+// Lightweight std::vector<>-like class to avoid dragging dependencies (also, some implementations of STL with debug enabled are absurdly slow, we bypass it so our code runs fast in debug).
+//-----------------------------------------------------------------------------
+// - You generally do NOT need to care or use this ever. But we need to make it available in imgui.h because some of our public structures are relying on it.
+// - We use std-like naming convention here, which is a little unusual for this codebase.
+// - Important: clear() frees memory, resize(0) keep the allocated buffer. We use resize(0) a lot to intentionally recycle allocated buffers across frames and amortize our costs.
+// - Important: our implementation does NOT call C++ constructors/destructors, we treat everything as raw data! This is intentional but be extra mindful of that,
+// Do NOT use this class as a std::vector replacement in your own code! Many of the structures used by dear imgui can be safely initialized by a zero-memset.
+//-----------------------------------------------------------------------------
+
+IM_MSVC_RUNTIME_CHECKS_OFF
+template<typename T>
+struct ImVector
+{
+ int Size;
+ int Capacity;
+ T* Data;
+
+ // Provide standard typedefs but we don't use them ourselves.
+ typedef T value_type;
+ typedef value_type* iterator;
+ typedef const value_type* const_iterator;
+
+ // Constructors, destructor
+ inline ImVector() { Size = Capacity = 0; Data = NULL; }
+ inline ImVector(const ImVector<T>& src) { Size = Capacity = 0; Data = NULL; operator=(src); }
+ inline ImVector<T>& operator=(const ImVector<T>& src) { clear(); resize(src.Size); memcpy(Data, src.Data, (size_t)Size * sizeof(T)); return *this; }
+ inline ~ImVector() { if (Data) IM_FREE(Data); } // Important: does not destruct anything
+
+ inline void clear() { if (Data) { Size = Capacity = 0; IM_FREE(Data); Data = NULL; } } // Important: does not destruct anything
+ inline void clear_delete() { for (int n = 0; n < Size; n++) IM_DELETE(Data[n]); clear(); } // Important: never called automatically! always explicit.
+ inline void clear_destruct() { for (int n = 0; n < Size; n++) Data[n].~T(); clear(); } // Important: never called automatically! always explicit.
+
+ inline bool empty() const { return Size == 0; }
+ inline int size() const { return Size; }
+ inline int size_in_bytes() const { return Size * (int)sizeof(T); }
+ inline int max_size() const { return 0x7FFFFFFF / (int)sizeof(T); }
+ inline int capacity() const { return Capacity; }
+ inline T& operator[](int i) { IM_ASSERT(i >= 0 && i < Size); return Data[i]; }
+ inline const T& operator[](int i) const { IM_ASSERT(i >= 0 && i < Size); return Data[i]; }
+
+ inline T* begin() { return Data; }
+ inline const T* begin() const { return Data; }
+ inline T* end() { return Data + Size; }
+ inline const T* end() const { return Data + Size; }
+ inline T& front() { IM_ASSERT(Size > 0); return Data[0]; }
+ inline const T& front() const { IM_ASSERT(Size > 0); return Data[0]; }
+ inline T& back() { IM_ASSERT(Size > 0); return Data[Size - 1]; }
+ inline const T& back() const { IM_ASSERT(Size > 0); return Data[Size - 1]; }
+ inline void swap(ImVector<T>& rhs) { int rhs_size = rhs.Size; rhs.Size = Size; Size = rhs_size; int rhs_cap = rhs.Capacity; rhs.Capacity = Capacity; Capacity = rhs_cap; T* rhs_data = rhs.Data; rhs.Data = Data; Data = rhs_data; }
+
+ inline int _grow_capacity(int sz) const { int new_capacity = Capacity ? (Capacity + Capacity / 2) : 8; return new_capacity > sz ? new_capacity : sz; }
+ inline void resize(int new_size) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); Size = new_size; }
+ inline void resize(int new_size, const T& v) { if (new_size > Capacity) reserve(_grow_capacity(new_size)); if (new_size > Size) for (int n = Size; n < new_size; n++) memcpy(&Data[n], &v, sizeof(v)); Size = new_size; }
+ inline void shrink(int new_size) { IM_ASSERT(new_size <= Size); Size = new_size; } // Resize a vector to a smaller size, guaranteed not to cause a reallocation
+ inline void reserve(int new_capacity) { if (new_capacity <= Capacity) return; T* new_data = (T*)IM_ALLOC((size_t)new_capacity * sizeof(T)); if (Data) { memcpy(new_data, Data, (size_t)Size * sizeof(T)); IM_FREE(Data); } Data = new_data; Capacity = new_capacity; }
+ inline void reserve_discard(int new_capacity) { if (new_capacity <= Capacity) return; if (Data) IM_FREE(Data); Data = (T*)IM_ALLOC((size_t)new_capacity * sizeof(T)); Capacity = new_capacity; }
+
+ // NB: It is illegal to call push_back/push_front/insert with a reference pointing inside the ImVector data itself! e.g. v.push_back(v[10]) is forbidden.
+ inline void push_back(const T& v) { if (Size == Capacity) reserve(_grow_capacity(Size + 1)); memcpy(&Data[Size], &v, sizeof(v)); Size++; }
+ inline void pop_back() { IM_ASSERT(Size > 0); Size--; }
+ inline void push_front(const T& v) { if (Size == 0) push_back(v); else insert(Data, v); }
+ inline T* erase(const T* it) { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + 1, ((size_t)Size - (size_t)off - 1) * sizeof(T)); Size--; return Data + off; }
+ inline T* erase(const T* it, const T* it_last){ IM_ASSERT(it >= Data && it < Data + Size && it_last >= it && it_last <= Data + Size); const ptrdiff_t count = it_last - it; const ptrdiff_t off = it - Data; memmove(Data + off, Data + off + count, ((size_t)Size - (size_t)off - (size_t)count) * sizeof(T)); Size -= (int)count; return Data + off; }
+ inline T* erase_unsorted(const T* it) { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; if (it < Data + Size - 1) memcpy(Data + off, Data + Size - 1, sizeof(T)); Size--; return Data + off; }
+ inline T* insert(const T* it, const T& v) { IM_ASSERT(it >= Data && it <= Data + Size); const ptrdiff_t off = it - Data; if (Size == Capacity) reserve(_grow_capacity(Size + 1)); if (off < (int)Size) memmove(Data + off + 1, Data + off, ((size_t)Size - (size_t)off) * sizeof(T)); memcpy(&Data[off], &v, sizeof(v)); Size++; return Data + off; }
+ inline bool contains(const T& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data++ == v) return true; return false; }
+ inline T* find(const T& v) { T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; }
+ inline const T* find(const T& v) const { const T* data = Data; const T* data_end = Data + Size; while (data < data_end) if (*data == v) break; else ++data; return data; }
+ inline bool find_erase(const T& v) { const T* it = find(v); if (it < Data + Size) { erase(it); return true; } return false; }
+ inline bool find_erase_unsorted(const T& v) { const T* it = find(v); if (it < Data + Size) { erase_unsorted(it); return true; } return false; }
+ inline int index_from_ptr(const T* it) const { IM_ASSERT(it >= Data && it < Data + Size); const ptrdiff_t off = it - Data; return (int)off; }
+};
+IM_MSVC_RUNTIME_CHECKS_RESTORE
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiStyle
+//-----------------------------------------------------------------------------
+// You may modify the ImGui::GetStyle() main instance during initialization and before NewFrame().
+// During the frame, use ImGui::PushStyleVar(ImGuiStyleVar_XXXX)/PopStyleVar() to alter the main style values,
+// and ImGui::PushStyleColor(ImGuiCol_XXX)/PopStyleColor() for colors.
+//-----------------------------------------------------------------------------
+
+struct ImGuiStyle
+{
+ float Alpha; // Global alpha applies to everything in Dear ImGui.
+ float DisabledAlpha; // Additional alpha multiplier applied by BeginDisabled(). Multiply over current value of Alpha.
+ ImVec2 WindowPadding; // Padding within a window.
+ float WindowRounding; // Radius of window corners rounding. Set to 0.0f to have rectangular windows. Large values tend to lead to variety of artifacts and are not recommended.
+ float WindowBorderSize; // Thickness of border around windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
+ ImVec2 WindowMinSize; // Minimum window size. This is a global setting. If you want to constraint individual windows, use SetNextWindowSizeConstraints().
+ ImVec2 WindowTitleAlign; // Alignment for title bar text. Defaults to (0.0f,0.5f) for left-aligned,vertically centered.
+ ImGuiDir WindowMenuButtonPosition; // Side of the collapsing/docking button in the title bar (None/Left/Right). Defaults to ImGuiDir_Left.
+ float ChildRounding; // Radius of child window corners rounding. Set to 0.0f to have rectangular windows.
+ float ChildBorderSize; // Thickness of border around child windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
+ float PopupRounding; // Radius of popup window corners rounding. (Note that tooltip windows use WindowRounding)
+ float PopupBorderSize; // Thickness of border around popup/tooltip windows. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
+ ImVec2 FramePadding; // Padding within a framed rectangle (used by most widgets).
+ float FrameRounding; // Radius of frame corners rounding. Set to 0.0f to have rectangular frame (used by most widgets).
+ float FrameBorderSize; // Thickness of border around frames. Generally set to 0.0f or 1.0f. (Other values are not well tested and more CPU/GPU costly).
+ ImVec2 ItemSpacing; // Horizontal and vertical spacing between widgets/lines.
+ ImVec2 ItemInnerSpacing; // Horizontal and vertical spacing between within elements of a composed widget (e.g. a slider and its label).
+ ImVec2 CellPadding; // Padding within a table cell
+ ImVec2 TouchExtraPadding; // Expand reactive bounding box for touch-based system where touch position is not accurate enough. Unfortunately we don't sort widgets so priority on overlap will always be given to the first widget. So don't grow this too much!
+ float IndentSpacing; // Horizontal indentation when e.g. entering a tree node. Generally == (FontSize + FramePadding.x*2).
+ float ColumnsMinSpacing; // Minimum horizontal spacing between two columns. Preferably > (FramePadding.x + 1).
+ float ScrollbarSize; // Width of the vertical scrollbar, Height of the horizontal scrollbar.
+ float ScrollbarRounding; // Radius of grab corners for scrollbar.
+ float GrabMinSize; // Minimum width/height of a grab box for slider/scrollbar.
+ float GrabRounding; // Radius of grabs corners rounding. Set to 0.0f to have rectangular slider grabs.
+ float LogSliderDeadzone; // The size in pixels of the dead-zone around zero on logarithmic sliders that cross zero.
+ float TabRounding; // Radius of upper corners of a tab. Set to 0.0f to have rectangular tabs.
+ float TabBorderSize; // Thickness of border around tabs.
+ float TabMinWidthForCloseButton; // Minimum width for close button to appears on an unselected tab when hovered. Set to 0.0f to always show when hovering, set to FLT_MAX to never show close button unless selected.
+ ImGuiDir ColorButtonPosition; // Side of the color button in the ColorEdit4 widget (left/right). Defaults to ImGuiDir_Right.
+ ImVec2 ButtonTextAlign; // Alignment of button text when button is larger than text. Defaults to (0.5f, 0.5f) (centered).
+ ImVec2 SelectableTextAlign; // Alignment of selectable text. Defaults to (0.0f, 0.0f) (top-left aligned). It's generally important to keep this left-aligned if you want to lay multiple items on a same line.
+ ImVec2 DisplayWindowPadding; // Window position are clamped to be visible within the display area or monitors by at least this amount. Only applies to regular windows.
+ ImVec2 DisplaySafeAreaPadding; // If you cannot see the edges of your screen (e.g. on a TV) increase the safe area padding. Apply to popups/tooltips as well regular windows. NB: Prefer configuring your TV sets correctly!
+ float MouseCursorScale; // Scale software rendered mouse cursor (when io.MouseDrawCursor is enabled). May be removed later.
+ bool AntiAliasedLines; // Enable anti-aliased lines/borders. Disable if you are really tight on CPU/GPU. Latched at the beginning of the frame (copied to ImDrawList).
+ bool AntiAliasedLinesUseTex; // Enable anti-aliased lines/borders using textures where possible. Require backend to render with bilinear filtering (NOT point/nearest filtering). Latched at the beginning of the frame (copied to ImDrawList).
+ bool AntiAliasedFill; // Enable anti-aliased edges around filled shapes (rounded rectangles, circles, etc.). Disable if you are really tight on CPU/GPU. Latched at the beginning of the frame (copied to ImDrawList).
+ float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo() without a specific number of segments. Decrease for highly tessellated curves (higher quality, more polygons), increase to reduce quality.
+ float CircleTessellationMaxError; // Maximum error (in pixels) allowed when using AddCircle()/AddCircleFilled() or drawing rounded corner rectangles with no explicit segment count specified. Decrease for higher quality but more geometry.
+ ImVec4 Colors[ImGuiCol_COUNT];
+
+ IMGUI_API ImGuiStyle();
+ IMGUI_API void ScaleAllSizes(float scale_factor);
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiIO
+//-----------------------------------------------------------------------------
+// Communicate most settings and inputs/outputs to Dear ImGui using this structure.
+// Access via ImGui::GetIO(). Read 'Programmer guide' section in .cpp file for general usage.
+//-----------------------------------------------------------------------------
+
+// [Internal] Storage used by IsKeyDown(), IsKeyPressed() etc functions.
+// If prior to 1.87 you used io.KeysDownDuration[] (which was marked as internal), you should use GetKeyData(key)->DownDuration and not io.KeysData[key]->DownDuration.
+struct ImGuiKeyData
+{
+ bool Down; // True for if key is down
+ float DownDuration; // Duration the key has been down (<0.0f: not pressed, 0.0f: just pressed, >0.0f: time held)
+ float DownDurationPrev; // Last frame duration the key has been down
+ float AnalogValue; // 0.0f..1.0f for gamepad values
+};
+
+struct ImGuiIO
+{
+ //------------------------------------------------------------------
+ // Configuration // Default value
+ //------------------------------------------------------------------
+
+ ImGuiConfigFlags ConfigFlags; // = 0 // See ImGuiConfigFlags_ enum. Set by user/application. Gamepad/keyboard navigation options, etc.
+ ImGuiBackendFlags BackendFlags; // = 0 // See ImGuiBackendFlags_ enum. Set by backend (imgui_impl_xxx files or custom backend) to communicate features supported by the backend.
+ ImVec2 DisplaySize; // <unset> // Main display size, in pixels (generally == GetMainViewport()->Size). May change every frame.
+ float DeltaTime; // = 1.0f/60.0f // Time elapsed since last frame, in seconds. May change every frame.
+ float IniSavingRate; // = 5.0f // Minimum time between saving positions/sizes to .ini file, in seconds.
+ const char* IniFilename; // = "imgui.ini" // Path to .ini file (important: default "imgui.ini" is relative to current working dir!). Set NULL to disable automatic .ini loading/saving or if you want to manually call LoadIniSettingsXXX() / SaveIniSettingsXXX() functions.
+ const char* LogFilename; // = "imgui_log.txt"// Path to .log file (default parameter to ImGui::LogToFile when no file is specified).
+ float MouseDoubleClickTime; // = 0.30f // Time for a double-click, in seconds.
+ float MouseDoubleClickMaxDist; // = 6.0f // Distance threshold to stay in to validate a double-click, in pixels.
+ float MouseDragThreshold; // = 6.0f // Distance threshold before considering we are dragging.
+ float KeyRepeatDelay; // = 0.250f // When holding a key/button, time before it starts repeating, in seconds (for buttons in Repeat mode, etc.).
+ float KeyRepeatRate; // = 0.050f // When holding a key/button, rate at which it repeats, in seconds.
+ void* UserData; // = NULL // Store your own data for retrieval by callbacks.
+
+ ImFontAtlas*Fonts; // <auto> // Font atlas: load, rasterize and pack one or more fonts into a single texture.
+ float FontGlobalScale; // = 1.0f // Global scale all fonts
+ bool FontAllowUserScaling; // = false // Allow user scaling text of individual window with CTRL+Wheel.
+ ImFont* FontDefault; // = NULL // Font to use on NewFrame(). Use NULL to uses Fonts->Fonts[0].
+ ImVec2 DisplayFramebufferScale; // = (1, 1) // For retina display or other situations where window coordinates are different from framebuffer coordinates. This generally ends up in ImDrawData::FramebufferScale.
+
+ // Miscellaneous options
+ bool MouseDrawCursor; // = false // Request ImGui to draw a mouse cursor for you (if you are on a platform without a mouse cursor). Cannot be easily renamed to 'io.ConfigXXX' because this is frequently used by backend implementations.
+ bool ConfigMacOSXBehaviors; // = defined(__APPLE__) // OS X style: Text editing cursor movement using Alt instead of Ctrl, Shortcuts using Cmd/Super instead of Ctrl, Line/Text Start and End using Cmd+Arrows instead of Home/End, Double click selects by word instead of selecting whole text, Multi-selection in lists uses Cmd/Super instead of Ctrl.
+ bool ConfigInputTrickleEventQueue; // = true // Enable input queue trickling: some types of events submitted during the same frame (e.g. button down + up) will be spread over multiple frames, improving interactions with low framerates.
+ bool ConfigInputTextCursorBlink; // = true // Enable blinking cursor (optional as some users consider it to be distracting).
+ bool ConfigDragClickToInputText; // = false // [BETA] Enable turning DragXXX widgets into text input with a simple mouse click-release (without moving). Not desirable on devices without a keyboard.
+ bool ConfigWindowsResizeFromEdges; // = true // Enable resizing of windows from their edges and from the lower-left corner. This requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback. (This used to be a per-window ImGuiWindowFlags_ResizeFromAnySide flag)
+ bool ConfigWindowsMoveFromTitleBarOnly; // = false // Enable allowing to move windows only when clicking on their title bar. Does not apply to windows without a title bar.
+ float ConfigMemoryCompactTimer; // = 60.0f // Timer (in seconds) to free transient windows/tables memory buffers when unused. Set to -1.0f to disable.
+
+ //------------------------------------------------------------------
+ // Platform Functions
+ // (the imgui_impl_xxxx backend files are setting those up for you)
+ //------------------------------------------------------------------
+
+ // Optional: Platform/Renderer backend name (informational only! will be displayed in About Window) + User data for backend/wrappers to store their own stuff.
+ const char* BackendPlatformName; // = NULL
+ const char* BackendRendererName; // = NULL
+ void* BackendPlatformUserData; // = NULL // User data for platform backend
+ void* BackendRendererUserData; // = NULL // User data for renderer backend
+ void* BackendLanguageUserData; // = NULL // User data for non C++ programming language backend
+
+ // Optional: Access OS clipboard
+ // (default to use native Win32 clipboard on Windows, otherwise uses a private clipboard. Override to access OS clipboard on other architectures)
+ const char* (*GetClipboardTextFn)(void* user_data);
+ void (*SetClipboardTextFn)(void* user_data, const char* text);
+ void* ClipboardUserData;
+
+ // Optional: Notify OS Input Method Editor of the screen position of your cursor for text input position (e.g. when using Japanese/Chinese IME on Windows)
+ // (default to use native imm32 api on Windows)
+ void (*SetPlatformImeDataFn)(ImGuiViewport* viewport, ImGuiPlatformImeData* data);
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ void* ImeWindowHandle; // = NULL // [Obsolete] Set ImGuiViewport::PlatformHandleRaw instead. Set this to your HWND to get automatic IME cursor positioning.
+#else
+ void* _UnusedPadding; // Unused field to keep data structure the same size.
+#endif
+
+ //------------------------------------------------------------------
+ // Input - Call before calling NewFrame()
+ //------------------------------------------------------------------
+
+ // Input Functions
+ IMGUI_API void AddKeyEvent(ImGuiKey key, bool down); // Queue a new key down/up event. Key should be "translated" (as in, generally ImGuiKey_A matches the key end-user would use to emit an 'A' character)
+ IMGUI_API void AddKeyAnalogEvent(ImGuiKey key, bool down, float v); // Queue a new key down/up event for analog values (e.g. ImGuiKey_Gamepad_ values). Dead-zones should be handled by the backend.
+ IMGUI_API void AddMousePosEvent(float x, float y); // Queue a mouse position update. Use -FLT_MAX,-FLT_MAX to signify no mouse (e.g. app not focused and not hovered)
+ IMGUI_API void AddMouseButtonEvent(int button, bool down); // Queue a mouse button change
+ IMGUI_API void AddMouseWheelEvent(float wh_x, float wh_y); // Queue a mouse wheel update
+ IMGUI_API void AddFocusEvent(bool focused); // Queue a gain/loss of focus for the application (generally based on OS/platform focus of your window)
+ IMGUI_API void AddInputCharacter(unsigned int c); // Queue a new character input
+ IMGUI_API void AddInputCharacterUTF16(ImWchar16 c); // Queue a new character input from an UTF-16 character, it can be a surrogate
+ IMGUI_API void AddInputCharactersUTF8(const char* str); // Queue a new characters input from an UTF-8 string
+
+ IMGUI_API void SetKeyEventNativeData(ImGuiKey key, int native_keycode, int native_scancode, int native_legacy_index = -1); // [Optional] Specify index for legacy <1.87 IsKeyXXX() functions with native indices + specify native keycode, scancode.
+ IMGUI_API void SetAppAcceptingEvents(bool accepting_events); // Set master flag for accepting key/mouse/text events (default to true). Useful if you have native dialog boxes that are interrupting your application loop/refresh, and you want to disable events being queued while your app is frozen.
+ IMGUI_API void ClearInputCharacters(); // [Internal] Clear the text input buffer manually
+ IMGUI_API void ClearInputKeys(); // [Internal] Release all keys
+
+ //------------------------------------------------------------------
+ // Output - Updated by NewFrame() or EndFrame()/Render()
+ // (when reading from the io.WantCaptureMouse, io.WantCaptureKeyboard flags to dispatch your inputs, it is
+ // generally easier and more correct to use their state BEFORE calling NewFrame(). See FAQ for details!)
+ //------------------------------------------------------------------
+
+ bool WantCaptureMouse; // Set when Dear ImGui will use mouse inputs, in this case do not dispatch them to your main game/application (either way, always pass on mouse inputs to imgui). (e.g. unclicked mouse is hovering over an imgui window, widget is active, mouse was clicked over an imgui window, etc.).
+ bool WantCaptureKeyboard; // Set when Dear ImGui will use keyboard inputs, in this case do not dispatch them to your main game/application (either way, always pass keyboard inputs to imgui). (e.g. InputText active, or an imgui window is focused and navigation is enabled, etc.).
+ bool WantTextInput; // Mobile/console: when set, you may display an on-screen keyboard. This is set by Dear ImGui when it wants textual keyboard input to happen (e.g. when a InputText widget is active).
+ bool WantSetMousePos; // MousePos has been altered, backend should reposition mouse on next frame. Rarely used! Set only when ImGuiConfigFlags_NavEnableSetMousePos flag is enabled.
+ bool WantSaveIniSettings; // When manual .ini load/save is active (io.IniFilename == NULL), this will be set to notify your application that you can call SaveIniSettingsToMemory() and save yourself. Important: clear io.WantSaveIniSettings yourself after saving!
+ bool NavActive; // Keyboard/Gamepad navigation is currently allowed (will handle ImGuiKey_NavXXX events) = a window is focused and it doesn't use the ImGuiWindowFlags_NoNavInputs flag.
+ bool NavVisible; // Keyboard/Gamepad navigation is visible and allowed (will handle ImGuiKey_NavXXX events).
+ float Framerate; // Rough estimate of application framerate, in frame per second. Solely for convenience. Rolling average estimation based on io.DeltaTime over 120 frames.
+ int MetricsRenderVertices; // Vertices output during last call to Render()
+ int MetricsRenderIndices; // Indices output during last call to Render() = number of triangles * 3
+ int MetricsRenderWindows; // Number of visible windows
+ int MetricsActiveWindows; // Number of active windows
+ int MetricsActiveAllocations; // Number of active allocations, updated by MemAlloc/MemFree based on current context. May be off if you have multiple imgui contexts.
+ ImVec2 MouseDelta; // Mouse delta. Note that this is zero if either current or previous position are invalid (-FLT_MAX,-FLT_MAX), so a disappearing/reappearing mouse won't have a huge delta.
+
+ // Legacy: before 1.87, we required backend to fill io.KeyMap[] (imgui->native map) during initialization and io.KeysDown[] (native indices) every frame.
+ // This is still temporarily supported as a legacy feature. However the new preferred scheme is for backend to call io.AddKeyEvent().
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+ int KeyMap[ImGuiKey_COUNT]; // [LEGACY] Input: map of indices into the KeysDown[512] entries array which represent your "native" keyboard state. The first 512 are now unused and should be kept zero. Legacy backend will write into KeyMap[] using ImGuiKey_ indices which are always >512.
+ bool KeysDown[ImGuiKey_COUNT]; // [LEGACY] Input: Keyboard keys that are pressed (ideally left in the "native" order your engine has access to keyboard keys, so you can use your own defines/enums for keys). This used to be [512] sized. It is now ImGuiKey_COUNT to allow legacy io.KeysDown[GetKeyIndex(...)] to work without an overflow.
+#endif
+
+ //------------------------------------------------------------------
+ // [Internal] Dear ImGui will maintain those fields. Forward compatibility not guaranteed!
+ //------------------------------------------------------------------
+
+ // Main Input State
+ // (this block used to be written by backend, since 1.87 it is best to NOT write to those directly, call the AddXXX functions above instead)
+ // (reading from those variables is fair game, as they are extremely unlikely to be moving anywhere)
+ ImVec2 MousePos; // Mouse position, in pixels. Set to ImVec2(-FLT_MAX, -FLT_MAX) if mouse is unavailable (on another screen, etc.)
+ bool MouseDown[5]; // Mouse buttons: 0=left, 1=right, 2=middle + extras (ImGuiMouseButton_COUNT == 5). Dear ImGui mostly uses left and right buttons. Others buttons allows us to track if the mouse is being used by your application + available to user as a convenience via IsMouse** API.
+ float MouseWheel; // Mouse wheel Vertical: 1 unit scrolls about 5 lines text.
+ float MouseWheelH; // Mouse wheel Horizontal. Most users don't have a mouse with an horizontal wheel, may not be filled by all backends.
+ bool KeyCtrl; // Keyboard modifier down: Control
+ bool KeyShift; // Keyboard modifier down: Shift
+ bool KeyAlt; // Keyboard modifier down: Alt
+ bool KeySuper; // Keyboard modifier down: Cmd/Super/Windows
+ float NavInputs[ImGuiNavInput_COUNT]; // Gamepad inputs. Cleared back to zero by EndFrame(). Keyboard keys will be auto-mapped and be written here by NewFrame().
+
+ // Other state maintained from data above + IO function calls
+ ImGuiModFlags KeyMods; // Key mods flags (same as io.KeyCtrl/KeyShift/KeyAlt/KeySuper but merged into flags), updated by NewFrame()
+ ImGuiKeyData KeysData[ImGuiKey_KeysData_SIZE]; // Key state for all known keys. Use IsKeyXXX() functions to access this.
+ bool WantCaptureMouseUnlessPopupClose; // Alternative to WantCaptureMouse: (WantCaptureMouse == true && WantCaptureMouseUnlessPopupClose == false) when a click over void is expected to close a popup.
+ ImVec2 MousePosPrev; // Previous mouse position (note that MouseDelta is not necessary == MousePos-MousePosPrev, in case either position is invalid)
+ ImVec2 MouseClickedPos[5]; // Position at time of clicking
+ double MouseClickedTime[5]; // Time of last click (used to figure out double-click)
+ bool MouseClicked[5]; // Mouse button went from !Down to Down (same as MouseClickedCount[x] != 0)
+ bool MouseDoubleClicked[5]; // Has mouse button been double-clicked? (same as MouseClickedCount[x] == 2)
+ ImU16 MouseClickedCount[5]; // == 0 (not clicked), == 1 (same as MouseClicked[]), == 2 (double-clicked), == 3 (triple-clicked) etc. when going from !Down to Down
+ ImU16 MouseClickedLastCount[5]; // Count successive number of clicks. Stays valid after mouse release. Reset after another click is done.
+ bool MouseReleased[5]; // Mouse button went from Down to !Down
+ bool MouseDownOwned[5]; // Track if button was clicked inside a dear imgui window or over void blocked by a popup. We don't request mouse capture from the application if click started outside ImGui bounds.
+ bool MouseDownOwnedUnlessPopupClose[5]; // Track if button was clicked inside a dear imgui window.
+ float MouseDownDuration[5]; // Duration the mouse button has been down (0.0f == just clicked)
+ float MouseDownDurationPrev[5]; // Previous time the mouse button has been down
+ float MouseDragMaxDistanceSqr[5]; // Squared maximum distance of how much mouse has traveled from the clicking point (used for moving thresholds)
+ float NavInputsDownDuration[ImGuiNavInput_COUNT];
+ float NavInputsDownDurationPrev[ImGuiNavInput_COUNT];
+ float PenPressure; // Touch/Pen pressure (0.0f to 1.0f, should be >0.0f only when MouseDown[0] == true). Helper storage currently unused by Dear ImGui.
+ bool AppFocusLost; // Only modify via AddFocusEvent()
+ bool AppAcceptingEvents; // Only modify via SetAppAcceptingEvents()
+ ImS8 BackendUsingLegacyKeyArrays; // -1: unknown, 0: using AddKeyEvent(), 1: using legacy io.KeysDown[]
+ bool BackendUsingLegacyNavInputArray; // 0: using AddKeyAnalogEvent(), 1: writing to legacy io.NavInputs[] directly
+ ImWchar16 InputQueueSurrogate; // For AddInputCharacterUTF16()
+ ImVector<ImWchar> InputQueueCharacters; // Queue of _characters_ input (obtained by platform backend). Fill using AddInputCharacter() helper.
+
+ IMGUI_API ImGuiIO();
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Misc data structures
+//-----------------------------------------------------------------------------
+
+// Shared state of InputText(), passed as an argument to your callback when a ImGuiInputTextFlags_Callback* flag is used.
+// The callback function should return 0 by default.
+// Callbacks (follow a flag name and see comments in ImGuiInputTextFlags_ declarations for more details)
+// - ImGuiInputTextFlags_CallbackEdit: Callback on buffer edit (note that InputText() already returns true on edit, the callback is useful mainly to manipulate the underlying buffer while focus is active)
+// - ImGuiInputTextFlags_CallbackAlways: Callback on each iteration
+// - ImGuiInputTextFlags_CallbackCompletion: Callback on pressing TAB
+// - ImGuiInputTextFlags_CallbackHistory: Callback on pressing Up/Down arrows
+// - ImGuiInputTextFlags_CallbackCharFilter: Callback on character inputs to replace or discard them. Modify 'EventChar' to replace or discard, or return 1 in callback to discard.
+// - ImGuiInputTextFlags_CallbackResize: Callback on buffer capacity changes request (beyond 'buf_size' parameter value), allowing the string to grow.
+struct ImGuiInputTextCallbackData
+{
+ ImGuiInputTextFlags EventFlag; // One ImGuiInputTextFlags_Callback* // Read-only
+ ImGuiInputTextFlags Flags; // What user passed to InputText() // Read-only
+ void* UserData; // What user passed to InputText() // Read-only
+
+ // Arguments for the different callback events
+ // - To modify the text buffer in a callback, prefer using the InsertChars() / DeleteChars() function. InsertChars() will take care of calling the resize callback if necessary.
+ // - If you know your edits are not going to resize the underlying buffer allocation, you may modify the contents of 'Buf[]' directly. You need to update 'BufTextLen' accordingly (0 <= BufTextLen < BufSize) and set 'BufDirty'' to true so InputText can update its internal state.
+ ImWchar EventChar; // Character input // Read-write // [CharFilter] Replace character with another one, or set to zero to drop. return 1 is equivalent to setting EventChar=0;
+ ImGuiKey EventKey; // Key pressed (Up/Down/TAB) // Read-only // [Completion,History]
+ char* Buf; // Text buffer // Read-write // [Resize] Can replace pointer / [Completion,History,Always] Only write to pointed data, don't replace the actual pointer!
+ int BufTextLen; // Text length (in bytes) // Read-write // [Resize,Completion,History,Always] Exclude zero-terminator storage. In C land: == strlen(some_text), in C++ land: string.length()
+ int BufSize; // Buffer size (in bytes) = capacity+1 // Read-only // [Resize,Completion,History,Always] Include zero-terminator storage. In C land == ARRAYSIZE(my_char_array), in C++ land: string.capacity()+1
+ bool BufDirty; // Set if you modify Buf/BufTextLen! // Write // [Completion,History,Always]
+ int CursorPos; // // Read-write // [Completion,History,Always]
+ int SelectionStart; // // Read-write // [Completion,History,Always] == to SelectionEnd when no selection)
+ int SelectionEnd; // // Read-write // [Completion,History,Always]
+
+ // Helper functions for text manipulation.
+ // Use those function to benefit from the CallbackResize behaviors. Calling those function reset the selection.
+ IMGUI_API ImGuiInputTextCallbackData();
+ IMGUI_API void DeleteChars(int pos, int bytes_count);
+ IMGUI_API void InsertChars(int pos, const char* text, const char* text_end = NULL);
+ void SelectAll() { SelectionStart = 0; SelectionEnd = BufTextLen; }
+ void ClearSelection() { SelectionStart = SelectionEnd = BufTextLen; }
+ bool HasSelection() const { return SelectionStart != SelectionEnd; }
+};
+
+// Resizing callback data to apply custom constraint. As enabled by SetNextWindowSizeConstraints(). Callback is called during the next Begin().
+// NB: For basic min/max size constraint on each axis you don't need to use the callback! The SetNextWindowSizeConstraints() parameters are enough.
+struct ImGuiSizeCallbackData
+{
+ void* UserData; // Read-only. What user passed to SetNextWindowSizeConstraints()
+ ImVec2 Pos; // Read-only. Window position, for reference.
+ ImVec2 CurrentSize; // Read-only. Current window size.
+ ImVec2 DesiredSize; // Read-write. Desired size, based on user's mouse position. Write to this field to restrain resizing.
+};
+
+// Data payload for Drag and Drop operations: AcceptDragDropPayload(), GetDragDropPayload()
+struct ImGuiPayload
+{
+ // Members
+ void* Data; // Data (copied and owned by dear imgui)
+ int DataSize; // Data size
+
+ // [Internal]
+ ImGuiID SourceId; // Source item id
+ ImGuiID SourceParentId; // Source parent id (if available)
+ int DataFrameCount; // Data timestamp
+ char DataType[32 + 1]; // Data type tag (short user-supplied string, 32 characters max)
+ bool Preview; // Set when AcceptDragDropPayload() was called and mouse has been hovering the target item (nb: handle overlapping drag targets)
+ bool Delivery; // Set when AcceptDragDropPayload() was called and mouse button is released over the target item.
+
+ ImGuiPayload() { Clear(); }
+ void Clear() { SourceId = SourceParentId = 0; Data = NULL; DataSize = 0; memset(DataType, 0, sizeof(DataType)); DataFrameCount = -1; Preview = Delivery = false; }
+ bool IsDataType(const char* type) const { return DataFrameCount != -1 && strcmp(type, DataType) == 0; }
+ bool IsPreview() const { return Preview; }
+ bool IsDelivery() const { return Delivery; }
+};
+
+// Sorting specification for one column of a table (sizeof == 12 bytes)
+struct ImGuiTableColumnSortSpecs
+{
+ ImGuiID ColumnUserID; // User id of the column (if specified by a TableSetupColumn() call)
+ ImS16 ColumnIndex; // Index of the column
+ ImS16 SortOrder; // Index within parent ImGuiTableSortSpecs (always stored in order starting from 0, tables sorted on a single criteria will always have a 0 here)
+ ImGuiSortDirection SortDirection : 8; // ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending (you can use this or SortSign, whichever is more convenient for your sort function)
+
+ ImGuiTableColumnSortSpecs() { memset(this, 0, sizeof(*this)); }
+};
+
+// Sorting specifications for a table (often handling sort specs for a single column, occasionally more)
+// Obtained by calling TableGetSortSpecs().
+// When 'SpecsDirty == true' you can sort your data. It will be true with sorting specs have changed since last call, or the first time.
+// Make sure to set 'SpecsDirty = false' after sorting, else you may wastefully sort your data every frame!
+struct ImGuiTableSortSpecs
+{
+ const ImGuiTableColumnSortSpecs* Specs; // Pointer to sort spec array.
+ int SpecsCount; // Sort spec count. Most often 1. May be > 1 when ImGuiTableFlags_SortMulti is enabled. May be == 0 when ImGuiTableFlags_SortTristate is enabled.
+ bool SpecsDirty; // Set to true when specs have changed since last time! Use this to sort again, then clear the flag.
+
+ ImGuiTableSortSpecs() { memset(this, 0, sizeof(*this)); }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Helpers (ImGuiOnceUponAFrame, ImGuiTextFilter, ImGuiTextBuffer, ImGuiStorage, ImGuiListClipper, ImColor)
+//-----------------------------------------------------------------------------
+
+// Helper: Unicode defines
+#define IM_UNICODE_CODEPOINT_INVALID 0xFFFD // Invalid Unicode code point (standard value).
+#ifdef IMGUI_USE_WCHAR32
+#define IM_UNICODE_CODEPOINT_MAX 0x10FFFF // Maximum Unicode code point supported by this build.
+#else
+#define IM_UNICODE_CODEPOINT_MAX 0xFFFF // Maximum Unicode code point supported by this build.
+#endif
+
+// Helper: Execute a block of code at maximum once a frame. Convenient if you want to quickly create an UI within deep-nested code that runs multiple times every frame.
+// Usage: static ImGuiOnceUponAFrame oaf; if (oaf) ImGui::Text("This will be called only once per frame");
+struct ImGuiOnceUponAFrame
+{
+ ImGuiOnceUponAFrame() { RefFrame = -1; }
+ mutable int RefFrame;
+ operator bool() const { int current_frame = ImGui::GetFrameCount(); if (RefFrame == current_frame) return false; RefFrame = current_frame; return true; }
+};
+
+// Helper: Parse and apply text filters. In format "aaaaa[,bbbb][,ccccc]"
+struct ImGuiTextFilter
+{
+ IMGUI_API ImGuiTextFilter(const char* default_filter = "");
+ IMGUI_API bool Draw(const char* label = "Filter (inc,-exc)", float width = 0.0f); // Helper calling InputText+Build
+ IMGUI_API bool PassFilter(const char* text, const char* text_end = NULL) const;
+ IMGUI_API void Build();
+ void Clear() { InputBuf[0] = 0; Build(); }
+ bool IsActive() const { return !Filters.empty(); }
+
+ // [Internal]
+ struct ImGuiTextRange
+ {
+ const char* b;
+ const char* e;
+
+ ImGuiTextRange() { b = e = NULL; }
+ ImGuiTextRange(const char* _b, const char* _e) { b = _b; e = _e; }
+ bool empty() const { return b == e; }
+ IMGUI_API void split(char separator, ImVector<ImGuiTextRange>* out) const;
+ };
+ char InputBuf[256];
+ ImVector<ImGuiTextRange>Filters;
+ int CountGrep;
+};
+
+// Helper: Growable text buffer for logging/accumulating text
+// (this could be called 'ImGuiTextBuilder' / 'ImGuiStringBuilder')
+struct ImGuiTextBuffer
+{
+ ImVector<char> Buf;
+ IMGUI_API static char EmptyString[1];
+
+ ImGuiTextBuffer() { }
+ inline char operator[](int i) const { IM_ASSERT(Buf.Data != NULL); return Buf.Data[i]; }
+ const char* begin() const { return Buf.Data ? &Buf.front() : EmptyString; }
+ const char* end() const { return Buf.Data ? &Buf.back() : EmptyString; } // Buf is zero-terminated, so end() will point on the zero-terminator
+ int size() const { return Buf.Size ? Buf.Size - 1 : 0; }
+ bool empty() const { return Buf.Size <= 1; }
+ void clear() { Buf.clear(); }
+ void reserve(int capacity) { Buf.reserve(capacity); }
+ const char* c_str() const { return Buf.Data ? Buf.Data : EmptyString; }
+ IMGUI_API void append(const char* str, const char* str_end = NULL);
+ IMGUI_API void appendf(const char* fmt, ...) IM_FMTARGS(2);
+ IMGUI_API void appendfv(const char* fmt, va_list args) IM_FMTLIST(2);
+};
+
+// Helper: Key->Value storage
+// Typically you don't have to worry about this since a storage is held within each Window.
+// We use it to e.g. store collapse state for a tree (Int 0/1)
+// This is optimized for efficient lookup (dichotomy into a contiguous buffer) and rare insertion (typically tied to user interactions aka max once a frame)
+// You can use it as custom user storage for temporary values. Declare your own storage if, for example:
+// - You want to manipulate the open/close state of a particular sub-tree in your interface (tree node uses Int 0/1 to store their state).
+// - You want to store custom debug data easily without adding or editing structures in your code (probably not efficient, but convenient)
+// Types are NOT stored, so it is up to you to make sure your Key don't collide with different types.
+struct ImGuiStorage
+{
+ // [Internal]
+ struct ImGuiStoragePair
+ {
+ ImGuiID key;
+ union { int val_i; float val_f; void* val_p; };
+ ImGuiStoragePair(ImGuiID _key, int _val_i) { key = _key; val_i = _val_i; }
+ ImGuiStoragePair(ImGuiID _key, float _val_f) { key = _key; val_f = _val_f; }
+ ImGuiStoragePair(ImGuiID _key, void* _val_p) { key = _key; val_p = _val_p; }
+ };
+
+ ImVector<ImGuiStoragePair> Data;
+
+ // - Get***() functions find pair, never add/allocate. Pairs are sorted so a query is O(log N)
+ // - Set***() functions find pair, insertion on demand if missing.
+ // - Sorted insertion is costly, paid once. A typical frame shouldn't need to insert any new pair.
+ void Clear() { Data.clear(); }
+ IMGUI_API int GetInt(ImGuiID key, int default_val = 0) const;
+ IMGUI_API void SetInt(ImGuiID key, int val);
+ IMGUI_API bool GetBool(ImGuiID key, bool default_val = false) const;
+ IMGUI_API void SetBool(ImGuiID key, bool val);
+ IMGUI_API float GetFloat(ImGuiID key, float default_val = 0.0f) const;
+ IMGUI_API void SetFloat(ImGuiID key, float val);
+ IMGUI_API void* GetVoidPtr(ImGuiID key) const; // default_val is NULL
+ IMGUI_API void SetVoidPtr(ImGuiID key, void* val);
+
+ // - Get***Ref() functions finds pair, insert on demand if missing, return pointer. Useful if you intend to do Get+Set.
+ // - References are only valid until a new value is added to the storage. Calling a Set***() function or a Get***Ref() function invalidates the pointer.
+ // - A typical use case where this is convenient for quick hacking (e.g. add storage during a live Edit&Continue session if you can't modify existing struct)
+ // float* pvar = ImGui::GetFloatRef(key); ImGui::SliderFloat("var", pvar, 0, 100.0f); some_var += *pvar;
+ IMGUI_API int* GetIntRef(ImGuiID key, int default_val = 0);
+ IMGUI_API bool* GetBoolRef(ImGuiID key, bool default_val = false);
+ IMGUI_API float* GetFloatRef(ImGuiID key, float default_val = 0.0f);
+ IMGUI_API void** GetVoidPtrRef(ImGuiID key, void* default_val = NULL);
+
+ // Use on your own storage if you know only integer are being stored (open/close all tree nodes)
+ IMGUI_API void SetAllInt(int val);
+
+ // For quicker full rebuild of a storage (instead of an incremental one), you may add all your contents and then sort once.
+ IMGUI_API void BuildSortByKey();
+};
+
+// Helper: Manually clip large list of items.
+// If you have lots evenly spaced items and you have a random access to the list, you can perform coarse
+// clipping based on visibility to only submit items that are in view.
+// The clipper calculates the range of visible items and advance the cursor to compensate for the non-visible items we have skipped.
+// (Dear ImGui already clip items based on their bounds but: it needs to first layout the item to do so, and generally
+// fetching/submitting your own data incurs additional cost. Coarse clipping using ImGuiListClipper allows you to easily
+// scale using lists with tens of thousands of items without a problem)
+// Usage:
+// ImGuiListClipper clipper;
+// clipper.Begin(1000); // We have 1000 elements, evenly spaced.
+// while (clipper.Step())
+// for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+// ImGui::Text("line number %d", i);
+// Generally what happens is:
+// - Clipper lets you process the first element (DisplayStart = 0, DisplayEnd = 1) regardless of it being visible or not.
+// - User code submit that one element.
+// - Clipper can measure the height of the first element
+// - Clipper calculate the actual range of elements to display based on the current clipping rectangle, position the cursor before the first visible element.
+// - User code submit visible elements.
+// - The clipper also handles various subtleties related to keyboard/gamepad navigation, wrapping etc.
+struct ImGuiListClipper
+{
+ int DisplayStart; // First item to display, updated by each call to Step()
+ int DisplayEnd; // End of items to display (exclusive)
+ int ItemsCount; // [Internal] Number of items
+ float ItemsHeight; // [Internal] Height of item after a first step and item submission can calculate it
+ float StartPosY; // [Internal] Cursor position at the time of Begin() or after table frozen rows are all processed
+ void* TempData; // [Internal] Internal data
+
+ // items_count: Use INT_MAX if you don't know how many items you have (in which case the cursor won't be advanced in the final step)
+ // items_height: Use -1.0f to be calculated automatically on first step. Otherwise pass in the distance between your items, typically GetTextLineHeightWithSpacing() or GetFrameHeightWithSpacing().
+ IMGUI_API ImGuiListClipper();
+ IMGUI_API ~ImGuiListClipper();
+ IMGUI_API void Begin(int items_count, float items_height = -1.0f);
+ IMGUI_API void End(); // Automatically called on the last call of Step() that returns false.
+ IMGUI_API bool Step(); // Call until it returns false. The DisplayStart/DisplayEnd fields will be set and you can process/draw those items.
+
+ // Call ForceDisplayRangeByIndices() before first call to Step() if you need a range of items to be displayed regardless of visibility.
+ IMGUI_API void ForceDisplayRangeByIndices(int item_min, int item_max); // item_max is exclusive e.g. use (42, 42+1) to make item 42 always visible BUT due to alignment/padding of certain items it is likely that an extra item may be included on either end of the display range.
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ inline ImGuiListClipper(int items_count, float items_height = -1.0f) { memset(this, 0, sizeof(*this)); ItemsCount = -1; Begin(items_count, items_height); } // [removed in 1.79]
+#endif
+};
+
+// Helpers macros to generate 32-bit encoded colors
+// User can declare their own format by #defining the 5 _SHIFT/_MASK macros in their imconfig file.
+#ifndef IM_COL32_R_SHIFT
+#ifdef IMGUI_USE_BGRA_PACKED_COLOR
+#define IM_COL32_R_SHIFT 16
+#define IM_COL32_G_SHIFT 8
+#define IM_COL32_B_SHIFT 0
+#define IM_COL32_A_SHIFT 24
+#define IM_COL32_A_MASK 0xFF000000
+#else
+#define IM_COL32_R_SHIFT 0
+#define IM_COL32_G_SHIFT 8
+#define IM_COL32_B_SHIFT 16
+#define IM_COL32_A_SHIFT 24
+#define IM_COL32_A_MASK 0xFF000000
+#endif
+#endif
+#define IM_COL32(R,G,B,A) (((ImU32)(A)<<IM_COL32_A_SHIFT) | ((ImU32)(B)<<IM_COL32_B_SHIFT) | ((ImU32)(G)<<IM_COL32_G_SHIFT) | ((ImU32)(R)<<IM_COL32_R_SHIFT))
+#define IM_COL32_WHITE IM_COL32(255,255,255,255) // Opaque white = 0xFFFFFFFF
+#define IM_COL32_BLACK IM_COL32(0,0,0,255) // Opaque black
+#define IM_COL32_BLACK_TRANS IM_COL32(0,0,0,0) // Transparent black = 0x00000000
+
+// Helper: ImColor() implicitly converts colors to either ImU32 (packed 4x1 byte) or ImVec4 (4x1 float)
+// Prefer using IM_COL32() macros if you want a guaranteed compile-time ImU32 for usage with ImDrawList API.
+// **Avoid storing ImColor! Store either u32 of ImVec4. This is not a full-featured color class. MAY OBSOLETE.
+// **None of the ImGui API are using ImColor directly but you can use it as a convenience to pass colors in either ImU32 or ImVec4 formats. Explicitly cast to ImU32 or ImVec4 if needed.
+struct ImColor
+{
+ ImVec4 Value;
+
+ constexpr ImColor() { }
+ constexpr ImColor(float r, float g, float b, float a = 1.0f) : Value(r, g, b, a) { }
+ constexpr ImColor(const ImVec4& col) : Value(col) {}
+ ImColor(int r, int g, int b, int a = 255) { float sc = 1.0f / 255.0f; Value.x = (float)r * sc; Value.y = (float)g * sc; Value.z = (float)b * sc; Value.w = (float)a * sc; }
+ ImColor(ImU32 rgba) { float sc = 1.0f / 255.0f; Value.x = (float)((rgba >> IM_COL32_R_SHIFT) & 0xFF) * sc; Value.y = (float)((rgba >> IM_COL32_G_SHIFT) & 0xFF) * sc; Value.z = (float)((rgba >> IM_COL32_B_SHIFT) & 0xFF) * sc; Value.w = (float)((rgba >> IM_COL32_A_SHIFT) & 0xFF) * sc; }
+ inline operator ImU32() const { return ImGui::ColorConvertFloat4ToU32(Value); }
+ inline operator ImVec4() const { return Value; }
+
+ // FIXME-OBSOLETE: May need to obsolete/cleanup those helpers.
+ inline void SetHSV(float h, float s, float v, float a = 1.0f){ ImGui::ColorConvertHSVtoRGB(h, s, v, Value.x, Value.y, Value.z); Value.w = a; }
+ static ImColor HSV(float h, float s, float v, float a = 1.0f) { float r, g, b; ImGui::ColorConvertHSVtoRGB(h, s, v, r, g, b); return ImColor(r, g, b, a); }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Drawing API (ImDrawCmd, ImDrawIdx, ImDrawVert, ImDrawChannel, ImDrawListSplitter, ImDrawListFlags, ImDrawList, ImDrawData)
+// Hold a series of drawing commands. The user provides a renderer for ImDrawData which essentially contains an array of ImDrawList.
+//-----------------------------------------------------------------------------
+
+// The maximum line width to bake anti-aliased textures for. Build atlas with ImFontAtlasFlags_NoBakedLines to disable baking.
+#ifndef IM_DRAWLIST_TEX_LINES_WIDTH_MAX
+#define IM_DRAWLIST_TEX_LINES_WIDTH_MAX (63)
+#endif
+
+// ImDrawCallback: Draw callbacks for advanced uses [configurable type: override in imconfig.h]
+// NB: You most likely do NOT need to use draw callbacks just to create your own widget or customized UI rendering,
+// you can poke into the draw list for that! Draw callback may be useful for example to:
+// A) Change your GPU render state,
+// B) render a complex 3D scene inside a UI element without an intermediate texture/render target, etc.
+// The expected behavior from your rendering function is 'if (cmd.UserCallback != NULL) { cmd.UserCallback(parent_list, cmd); } else { RenderTriangles() }'
+// If you want to override the signature of ImDrawCallback, you can simply use e.g. '#define ImDrawCallback MyDrawCallback' (in imconfig.h) + update rendering backend accordingly.
+#ifndef ImDrawCallback
+typedef void (*ImDrawCallback)(const ImDrawList* parent_list, const ImDrawCmd* cmd);
+#endif
+
+// Special Draw callback value to request renderer backend to reset the graphics/render state.
+// The renderer backend needs to handle this special value, otherwise it will crash trying to call a function at this address.
+// This is useful for example if you submitted callbacks which you know have altered the render state and you want it to be restored.
+// It is not done by default because they are many perfectly useful way of altering render state for imgui contents (e.g. changing shader/blending settings before an Image call).
+#define ImDrawCallback_ResetRenderState (ImDrawCallback)(-1)
+
+// Typically, 1 command = 1 GPU draw call (unless command is a callback)
+// - VtxOffset: When 'io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset' is enabled,
+// this fields allow us to render meshes larger than 64K vertices while keeping 16-bit indices.
+// Backends made for <1.71. will typically ignore the VtxOffset fields.
+// - The ClipRect/TextureId/VtxOffset fields must be contiguous as we memcmp() them together (this is asserted for).
+struct ImDrawCmd
+{
+ ImVec4 ClipRect; // 4*4 // Clipping rectangle (x1, y1, x2, y2). Subtract ImDrawData->DisplayPos to get clipping rectangle in "viewport" coordinates
+ ImTextureID TextureId; // 4-8 // User-provided texture ID. Set by user in ImfontAtlas::SetTexID() for fonts or passed to Image*() functions. Ignore if never using images or multiple fonts atlas.
+ unsigned int VtxOffset; // 4 // Start offset in vertex buffer. ImGuiBackendFlags_RendererHasVtxOffset: always 0, otherwise may be >0 to support meshes larger than 64K vertices with 16-bit indices.
+ unsigned int IdxOffset; // 4 // Start offset in index buffer.
+ unsigned int ElemCount; // 4 // Number of indices (multiple of 3) to be rendered as triangles. Vertices are stored in the callee ImDrawList's vtx_buffer[] array, indices in idx_buffer[].
+ ImDrawCallback UserCallback; // 4-8 // If != NULL, call the function instead of rendering the vertices. clip_rect and texture_id will be set normally.
+ void* UserCallbackData; // 4-8 // The draw callback code can access this.
+
+ ImDrawCmd() { memset(this, 0, sizeof(*this)); } // Also ensure our padding fields are zeroed
+
+ // Since 1.83: returns ImTextureID associated with this draw call. Warning: DO NOT assume this is always same as 'TextureId' (we will change this function for an upcoming feature)
+ inline ImTextureID GetTexID() const { return TextureId; }
+};
+
+// Vertex layout
+#ifndef IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT
+struct ImDrawVert
+{
+ ImVec2 pos;
+ ImVec2 uv;
+ ImU32 col;
+};
+#else
+// You can override the vertex format layout by defining IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT in imconfig.h
+// The code expect ImVec2 pos (8 bytes), ImVec2 uv (8 bytes), ImU32 col (4 bytes), but you can re-order them or add other fields as needed to simplify integration in your engine.
+// The type has to be described within the macro (you can either declare the struct or use a typedef). This is because ImVec2/ImU32 are likely not declared a the time you'd want to set your type up.
+// NOTE: IMGUI DOESN'T CLEAR THE STRUCTURE AND DOESN'T CALL A CONSTRUCTOR SO ANY CUSTOM FIELD WILL BE UNINITIALIZED. IF YOU ADD EXTRA FIELDS (SUCH AS A 'Z' COORDINATES) YOU WILL NEED TO CLEAR THEM DURING RENDER OR TO IGNORE THEM.
+IMGUI_OVERRIDE_DRAWVERT_STRUCT_LAYOUT;
+#endif
+
+// [Internal] For use by ImDrawList
+struct ImDrawCmdHeader
+{
+ ImVec4 ClipRect;
+ ImTextureID TextureId;
+ unsigned int VtxOffset;
+};
+
+// [Internal] For use by ImDrawListSplitter
+struct ImDrawChannel
+{
+ ImVector<ImDrawCmd> _CmdBuffer;
+ ImVector<ImDrawIdx> _IdxBuffer;
+};
+
+
+// Split/Merge functions are used to split the draw list into different layers which can be drawn into out of order.
+// This is used by the Columns/Tables API, so items of each column can be batched together in a same draw call.
+struct ImDrawListSplitter
+{
+ int _Current; // Current channel number (0)
+ int _Count; // Number of active channels (1+)
+ ImVector<ImDrawChannel> _Channels; // Draw channels (not resized down so _Count might be < Channels.Size)
+
+ inline ImDrawListSplitter() { memset(this, 0, sizeof(*this)); }
+ inline ~ImDrawListSplitter() { ClearFreeMemory(); }
+ inline void Clear() { _Current = 0; _Count = 1; } // Do not clear Channels[] so our allocations are reused next frame
+ IMGUI_API void ClearFreeMemory();
+ IMGUI_API void Split(ImDrawList* draw_list, int count);
+ IMGUI_API void Merge(ImDrawList* draw_list);
+ IMGUI_API void SetCurrentChannel(ImDrawList* draw_list, int channel_idx);
+};
+
+// Flags for ImDrawList functions
+// (Legacy: bit 0 must always correspond to ImDrawFlags_Closed to be backward compatible with old API using a bool. Bits 1..3 must be unused)
+enum ImDrawFlags_
+{
+ ImDrawFlags_None = 0,
+ ImDrawFlags_Closed = 1 << 0, // PathStroke(), AddPolyline(): specify that shape should be closed (Important: this is always == 1 for legacy reason)
+ ImDrawFlags_RoundCornersTopLeft = 1 << 4, // AddRect(), AddRectFilled(), PathRect(): enable rounding top-left corner only (when rounding > 0.0f, we default to all corners). Was 0x01.
+ ImDrawFlags_RoundCornersTopRight = 1 << 5, // AddRect(), AddRectFilled(), PathRect(): enable rounding top-right corner only (when rounding > 0.0f, we default to all corners). Was 0x02.
+ ImDrawFlags_RoundCornersBottomLeft = 1 << 6, // AddRect(), AddRectFilled(), PathRect(): enable rounding bottom-left corner only (when rounding > 0.0f, we default to all corners). Was 0x04.
+ ImDrawFlags_RoundCornersBottomRight = 1 << 7, // AddRect(), AddRectFilled(), PathRect(): enable rounding bottom-right corner only (when rounding > 0.0f, we default to all corners). Wax 0x08.
+ ImDrawFlags_RoundCornersNone = 1 << 8, // AddRect(), AddRectFilled(), PathRect(): disable rounding on all corners (when rounding > 0.0f). This is NOT zero, NOT an implicit flag!
+ ImDrawFlags_RoundCornersTop = ImDrawFlags_RoundCornersTopLeft | ImDrawFlags_RoundCornersTopRight,
+ ImDrawFlags_RoundCornersBottom = ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersBottomRight,
+ ImDrawFlags_RoundCornersLeft = ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersTopLeft,
+ ImDrawFlags_RoundCornersRight = ImDrawFlags_RoundCornersBottomRight | ImDrawFlags_RoundCornersTopRight,
+ ImDrawFlags_RoundCornersAll = ImDrawFlags_RoundCornersTopLeft | ImDrawFlags_RoundCornersTopRight | ImDrawFlags_RoundCornersBottomLeft | ImDrawFlags_RoundCornersBottomRight,
+ ImDrawFlags_RoundCornersDefault_ = ImDrawFlags_RoundCornersAll, // Default to ALL corners if none of the _RoundCornersXX flags are specified.
+ ImDrawFlags_RoundCornersMask_ = ImDrawFlags_RoundCornersAll | ImDrawFlags_RoundCornersNone
+};
+
+// Flags for ImDrawList instance. Those are set automatically by ImGui:: functions from ImGuiIO settings, and generally not manipulated directly.
+// It is however possible to temporarily alter flags between calls to ImDrawList:: functions.
+enum ImDrawListFlags_
+{
+ ImDrawListFlags_None = 0,
+ ImDrawListFlags_AntiAliasedLines = 1 << 0, // Enable anti-aliased lines/borders (*2 the number of triangles for 1.0f wide line or lines thin enough to be drawn using textures, otherwise *3 the number of triangles)
+ ImDrawListFlags_AntiAliasedLinesUseTex = 1 << 1, // Enable anti-aliased lines/borders using textures when possible. Require backend to render with bilinear filtering (NOT point/nearest filtering).
+ ImDrawListFlags_AntiAliasedFill = 1 << 2, // Enable anti-aliased edge around filled shapes (rounded rectangles, circles).
+ ImDrawListFlags_AllowVtxOffset = 1 << 3 // Can emit 'VtxOffset > 0' to allow large meshes. Set when 'ImGuiBackendFlags_RendererHasVtxOffset' is enabled.
+};
+
+// Draw command list
+// This is the low-level list of polygons that ImGui:: functions are filling. At the end of the frame,
+// all command lists are passed to your ImGuiIO::RenderDrawListFn function for rendering.
+// Each dear imgui window contains its own ImDrawList. You can use ImGui::GetWindowDrawList() to
+// access the current window draw list and draw custom primitives.
+// You can interleave normal ImGui:: calls and adding primitives to the current draw list.
+// In single viewport mode, top-left is == GetMainViewport()->Pos (generally 0,0), bottom-right is == GetMainViewport()->Pos+Size (generally io.DisplaySize).
+// You are totally free to apply whatever transformation matrix to want to the data (depending on the use of the transformation you may want to apply it to ClipRect as well!)
+// Important: Primitives are always added to the list and not culled (culling is done at higher-level by ImGui:: functions), if you use this API a lot consider coarse culling your drawn objects.
+struct ImDrawList
+{
+ // This is what you have to render
+ ImVector<ImDrawCmd> CmdBuffer; // Draw commands. Typically 1 command = 1 GPU draw call, unless the command is a callback.
+ ImVector<ImDrawIdx> IdxBuffer; // Index buffer. Each command consume ImDrawCmd::ElemCount of those
+ ImVector<ImDrawVert> VtxBuffer; // Vertex buffer.
+ ImDrawListFlags Flags; // Flags, you may poke into these to adjust anti-aliasing settings per-primitive.
+
+ // [Internal, used while building lists]
+ unsigned int _VtxCurrentIdx; // [Internal] generally == VtxBuffer.Size unless we are past 64K vertices, in which case this gets reset to 0.
+ const ImDrawListSharedData* _Data; // Pointer to shared draw data (you can use ImGui::GetDrawListSharedData() to get the one from current ImGui context)
+ const char* _OwnerName; // Pointer to owner window's name for debugging
+ ImDrawVert* _VtxWritePtr; // [Internal] point within VtxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
+ ImDrawIdx* _IdxWritePtr; // [Internal] point within IdxBuffer.Data after each add command (to avoid using the ImVector<> operators too much)
+ ImVector<ImVec4> _ClipRectStack; // [Internal]
+ ImVector<ImTextureID> _TextureIdStack; // [Internal]
+ ImVector<ImVec2> _Path; // [Internal] current path building
+ ImDrawCmdHeader _CmdHeader; // [Internal] template of active commands. Fields should match those of CmdBuffer.back().
+ ImDrawListSplitter _Splitter; // [Internal] for channels api (note: prefer using your own persistent instance of ImDrawListSplitter!)
+ float _FringeScale; // [Internal] anti-alias fringe is scaled by this value, this helps to keep things sharp while zooming at vertex buffer content
+
+ // If you want to create ImDrawList instances, pass them ImGui::GetDrawListSharedData() or create and use your own ImDrawListSharedData (so you can use ImDrawList without ImGui)
+ ImDrawList(const ImDrawListSharedData* shared_data) { memset(this, 0, sizeof(*this)); _Data = shared_data; }
+
+ ~ImDrawList() { _ClearFreeMemory(); }
+ IMGUI_API void PushClipRect(const ImVec2& clip_rect_min, const ImVec2& clip_rect_max, bool intersect_with_current_clip_rect = false); // Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling)
+ IMGUI_API void PushClipRectFullScreen();
+ IMGUI_API void PopClipRect();
+ IMGUI_API void PushTextureID(ImTextureID texture_id);
+ IMGUI_API void PopTextureID();
+ inline ImVec2 GetClipRectMin() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.x, cr.y); }
+ inline ImVec2 GetClipRectMax() const { const ImVec4& cr = _ClipRectStack.back(); return ImVec2(cr.z, cr.w); }
+
+ // Primitives
+ // - Filled shapes must always use clockwise winding order. The anti-aliasing fringe depends on it. Counter-clockwise shapes will have "inward" anti-aliasing.
+ // - For rectangular primitives, "p_min" and "p_max" represent the upper-left and lower-right corners.
+ // - For circle primitives, use "num_segments == 0" to automatically calculate tessellation (preferred).
+ // In older versions (until Dear ImGui 1.77) the AddCircle functions defaulted to num_segments == 12.
+ // In future versions we will use textures to provide cheaper and higher-quality circles.
+ // Use AddNgon() and AddNgonFilled() functions if you need to guaranteed a specific number of sides.
+ IMGUI_API void AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness = 1.0f);
+ IMGUI_API void AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawFlags flags = 0, float thickness = 1.0f); // a: upper-left, b: lower-right (== upper-left + size)
+ IMGUI_API void AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding = 0.0f, ImDrawFlags flags = 0); // a: upper-left, b: lower-right (== upper-left + size)
+ IMGUI_API void AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left);
+ IMGUI_API void AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness = 1.0f);
+ IMGUI_API void AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col);
+ IMGUI_API void AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness = 1.0f);
+ IMGUI_API void AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col);
+ IMGUI_API void AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments = 0, float thickness = 1.0f);
+ IMGUI_API void AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments = 0);
+ IMGUI_API void AddNgon(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness = 1.0f);
+ IMGUI_API void AddNgonFilled(const ImVec2& center, float radius, ImU32 col, int num_segments);
+ IMGUI_API void AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL);
+ IMGUI_API void AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end = NULL, float wrap_width = 0.0f, const ImVec4* cpu_fine_clip_rect = NULL);
+ IMGUI_API void AddPolyline(const ImVec2* points, int num_points, ImU32 col, ImDrawFlags flags, float thickness);
+ IMGUI_API void AddConvexPolyFilled(const ImVec2* points, int num_points, ImU32 col);
+ IMGUI_API void AddBezierCubic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0); // Cubic Bezier (4 control points)
+ IMGUI_API void AddBezierQuadratic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness, int num_segments = 0); // Quadratic Bezier (3 control points)
+
+ // Image primitives
+ // - Read FAQ to understand what ImTextureID is.
+ // - "p_min" and "p_max" represent the upper-left and lower-right corners of the rectangle.
+ // - "uv_min" and "uv_max" represent the normalized texture coordinates to use for those corners. Using (0,0)->(1,1) texture coordinates will generally display the entire texture.
+ IMGUI_API void AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min = ImVec2(0, 0), const ImVec2& uv_max = ImVec2(1, 1), ImU32 col = IM_COL32_WHITE);
+ IMGUI_API void AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1 = ImVec2(0, 0), const ImVec2& uv2 = ImVec2(1, 0), const ImVec2& uv3 = ImVec2(1, 1), const ImVec2& uv4 = ImVec2(0, 1), ImU32 col = IM_COL32_WHITE);
+ IMGUI_API void AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawFlags flags = 0);
+
+ // Stateful path API, add points then finish with PathFillConvex() or PathStroke()
+ // - Filled shapes must always use clockwise winding order. The anti-aliasing fringe depends on it. Counter-clockwise shapes will have "inward" anti-aliasing.
+ inline void PathClear() { _Path.Size = 0; }
+ inline void PathLineTo(const ImVec2& pos) { _Path.push_back(pos); }
+ inline void PathLineToMergeDuplicate(const ImVec2& pos) { if (_Path.Size == 0 || memcmp(&_Path.Data[_Path.Size - 1], &pos, 8) != 0) _Path.push_back(pos); }
+ inline void PathFillConvex(ImU32 col) { AddConvexPolyFilled(_Path.Data, _Path.Size, col); _Path.Size = 0; }
+ inline void PathStroke(ImU32 col, ImDrawFlags flags = 0, float thickness = 1.0f) { AddPolyline(_Path.Data, _Path.Size, col, flags, thickness); _Path.Size = 0; }
+ IMGUI_API void PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments = 0);
+ IMGUI_API void PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12); // Use precomputed angles for a 12 steps circle
+ IMGUI_API void PathBezierCubicCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0); // Cubic Bezier (4 control points)
+ IMGUI_API void PathBezierQuadraticCurveTo(const ImVec2& p2, const ImVec2& p3, int num_segments = 0); // Quadratic Bezier (3 control points)
+ IMGUI_API void PathRect(const ImVec2& rect_min, const ImVec2& rect_max, float rounding = 0.0f, ImDrawFlags flags = 0);
+
+ // Advanced
+ IMGUI_API void AddCallback(ImDrawCallback callback, void* callback_data); // Your rendering function must check for 'UserCallback' in ImDrawCmd and call the function instead of rendering triangles.
+ IMGUI_API void AddDrawCmd(); // This is useful if you need to forcefully create a new draw call (to allow for dependent rendering / blending). Otherwise primitives are merged into the same draw-call as much as possible
+ IMGUI_API ImDrawList* CloneOutput() const; // Create a clone of the CmdBuffer/IdxBuffer/VtxBuffer.
+
+ // Advanced: Channels
+ // - Use to split render into layers. By switching channels to can render out-of-order (e.g. submit FG primitives before BG primitives)
+ // - Use to minimize draw calls (e.g. if going back-and-forth between multiple clipping rectangles, prefer to append into separate channels then merge at the end)
+ // - FIXME-OBSOLETE: This API shouldn't have been in ImDrawList in the first place!
+ // Prefer using your own persistent instance of ImDrawListSplitter as you can stack them.
+ // Using the ImDrawList::ChannelsXXXX you cannot stack a split over another.
+ inline void ChannelsSplit(int count) { _Splitter.Split(this, count); }
+ inline void ChannelsMerge() { _Splitter.Merge(this); }
+ inline void ChannelsSetCurrent(int n) { _Splitter.SetCurrentChannel(this, n); }
+
+ // Advanced: Primitives allocations
+ // - We render triangles (three vertices)
+ // - All primitives needs to be reserved via PrimReserve() beforehand.
+ IMGUI_API void PrimReserve(int idx_count, int vtx_count);
+ IMGUI_API void PrimUnreserve(int idx_count, int vtx_count);
+ IMGUI_API void PrimRect(const ImVec2& a, const ImVec2& b, ImU32 col); // Axis aligned rectangle (composed of two triangles)
+ IMGUI_API void PrimRectUV(const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, ImU32 col);
+ IMGUI_API void PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col);
+ inline void PrimWriteVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { _VtxWritePtr->pos = pos; _VtxWritePtr->uv = uv; _VtxWritePtr->col = col; _VtxWritePtr++; _VtxCurrentIdx++; }
+ inline void PrimWriteIdx(ImDrawIdx idx) { *_IdxWritePtr = idx; _IdxWritePtr++; }
+ inline void PrimVtx(const ImVec2& pos, const ImVec2& uv, ImU32 col) { PrimWriteIdx((ImDrawIdx)_VtxCurrentIdx); PrimWriteVtx(pos, uv, col); } // Write vertex with unique index
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ inline void AddBezierCurve(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments = 0) { AddBezierCubic(p1, p2, p3, p4, col, thickness, num_segments); } // OBSOLETED in 1.80 (Jan 2021)
+ inline void PathBezierCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments = 0) { PathBezierCubicCurveTo(p2, p3, p4, num_segments); } // OBSOLETED in 1.80 (Jan 2021)
+#endif
+
+ // [Internal helpers]
+ IMGUI_API void _ResetForNewFrame();
+ IMGUI_API void _ClearFreeMemory();
+ IMGUI_API void _PopUnusedDrawCmd();
+ IMGUI_API void _TryMergeDrawCmds();
+ IMGUI_API void _OnChangedClipRect();
+ IMGUI_API void _OnChangedTextureID();
+ IMGUI_API void _OnChangedVtxOffset();
+ IMGUI_API int _CalcCircleAutoSegmentCount(float radius) const;
+ IMGUI_API void _PathArcToFastEx(const ImVec2& center, float radius, int a_min_sample, int a_max_sample, int a_step);
+ IMGUI_API void _PathArcToN(const ImVec2& center, float radius, float a_min, float a_max, int num_segments);
+};
+
+// All draw data to render a Dear ImGui frame
+// (NB: the style and the naming convention here is a little inconsistent, we currently preserve them for backward compatibility purpose,
+// as this is one of the oldest structure exposed by the library! Basically, ImDrawList == CmdList)
+struct ImDrawData
+{
+ bool Valid; // Only valid after Render() is called and before the next NewFrame() is called.
+ int CmdListsCount; // Number of ImDrawList* to render
+ int TotalIdxCount; // For convenience, sum of all ImDrawList's IdxBuffer.Size
+ int TotalVtxCount; // For convenience, sum of all ImDrawList's VtxBuffer.Size
+ ImDrawList** CmdLists; // Array of ImDrawList* to render. The ImDrawList are owned by ImGuiContext and only pointed to from here.
+ ImVec2 DisplayPos; // Top-left position of the viewport to render (== top-left of the orthogonal projection matrix to use) (== GetMainViewport()->Pos for the main viewport, == (0.0) in most single-viewport applications)
+ ImVec2 DisplaySize; // Size of the viewport to render (== GetMainViewport()->Size for the main viewport, == io.DisplaySize in most single-viewport applications)
+ ImVec2 FramebufferScale; // Amount of pixels for each unit of DisplaySize. Based on io.DisplayFramebufferScale. Generally (1,1) on normal display, (2,2) on OSX with Retina display.
+
+ // Functions
+ ImDrawData() { Clear(); }
+ void Clear() { memset(this, 0, sizeof(*this)); } // The ImDrawList are owned by ImGuiContext!
+ IMGUI_API void DeIndexAllBuffers(); // Helper to convert all buffers from indexed to non-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
+ IMGUI_API void ScaleClipRects(const ImVec2& fb_scale); // Helper to scale the ClipRect field of each ImDrawCmd. Use if your final output buffer is at a different scale than Dear ImGui expects, or if there is a difference between your window resolution and framebuffer resolution.
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Font API (ImFontConfig, ImFontGlyph, ImFontAtlasFlags, ImFontAtlas, ImFontGlyphRangesBuilder, ImFont)
+//-----------------------------------------------------------------------------
+
+struct ImFontConfig
+{
+ void* FontData; // // TTF/OTF data
+ int FontDataSize; // // TTF/OTF data size
+ bool FontDataOwnedByAtlas; // true // TTF/OTF data ownership taken by the container ImFontAtlas (will delete memory itself).
+ int FontNo; // 0 // Index of font within TTF/OTF file
+ float SizePixels; // // Size in pixels for rasterizer (more or less maps to the resulting font height).
+ int OversampleH; // 3 // Rasterize at higher quality for sub-pixel positioning. Note the difference between 2 and 3 is minimal so you can reduce this to 2 to save memory. Read https://github.com/nothings/stb/blob/master/tests/oversample/README.md for details.
+ int OversampleV; // 1 // Rasterize at higher quality for sub-pixel positioning. This is not really useful as we don't use sub-pixel positions on the Y axis.
+ bool PixelSnapH; // false // Align every glyph to pixel boundary. Useful e.g. if you are merging a non-pixel aligned font with the default font. If enabled, you can set OversampleH/V to 1.
+ ImVec2 GlyphExtraSpacing; // 0, 0 // Extra spacing (in pixels) between glyphs. Only X axis is supported for now.
+ ImVec2 GlyphOffset; // 0, 0 // Offset all glyphs from this font input.
+ const ImWchar* GlyphRanges; // NULL // Pointer to a user-provided list of Unicode range (2 value per range, values are inclusive, zero-terminated list). THE ARRAY DATA NEEDS TO PERSIST AS LONG AS THE FONT IS ALIVE.
+ float GlyphMinAdvanceX; // 0 // Minimum AdvanceX for glyphs, set Min to align font icons, set both Min/Max to enforce mono-space font
+ float GlyphMaxAdvanceX; // FLT_MAX // Maximum AdvanceX for glyphs
+ bool MergeMode; // false // Merge into previous ImFont, so you can combine multiple inputs font into one ImFont (e.g. ASCII font + icons + Japanese glyphs). You may want to use GlyphOffset.y when merge font of different heights.
+ unsigned int FontBuilderFlags; // 0 // Settings for custom font builder. THIS IS BUILDER IMPLEMENTATION DEPENDENT. Leave as zero if unsure.
+ float RasterizerMultiply; // 1.0f // Brighten (>1.0f) or darken (<1.0f) font output. Brightening small fonts may be a good workaround to make them more readable.
+ ImWchar EllipsisChar; // -1 // Explicitly specify unicode codepoint of ellipsis character. When fonts are being merged first specified ellipsis will be used.
+
+ // [Internal]
+ char Name[40]; // Name (strictly to ease debugging)
+ ImFont* DstFont;
+
+ IMGUI_API ImFontConfig();
+};
+
+// Hold rendering data for one glyph.
+// (Note: some language parsers may fail to convert the 31+1 bitfield members, in this case maybe drop store a single u32 or we can rework this)
+struct ImFontGlyph
+{
+ unsigned int Colored : 1; // Flag to indicate glyph is colored and should generally ignore tinting (make it usable with no shift on little-endian as this is used in loops)
+ unsigned int Visible : 1; // Flag to indicate glyph has no visible pixels (e.g. space). Allow early out when rendering.
+ unsigned int Codepoint : 30; // 0x0000..0x10FFFF
+ float AdvanceX; // Distance to next character (= data from font + ImFontConfig::GlyphExtraSpacing.x baked in)
+ float X0, Y0, X1, Y1; // Glyph corners
+ float U0, V0, U1, V1; // Texture coordinates
+};
+
+// Helper to build glyph ranges from text/string data. Feed your application strings/characters to it then call BuildRanges().
+// This is essentially a tightly packed of vector of 64k booleans = 8KB storage.
+struct ImFontGlyphRangesBuilder
+{
+ ImVector<ImU32> UsedChars; // Store 1-bit per Unicode code point (0=unused, 1=used)
+
+ ImFontGlyphRangesBuilder() { Clear(); }
+ inline void Clear() { int size_in_bytes = (IM_UNICODE_CODEPOINT_MAX + 1) / 8; UsedChars.resize(size_in_bytes / (int)sizeof(ImU32)); memset(UsedChars.Data, 0, (size_t)size_in_bytes); }
+ inline bool GetBit(size_t n) const { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); return (UsedChars[off] & mask) != 0; } // Get bit n in the array
+ inline void SetBit(size_t n) { int off = (int)(n >> 5); ImU32 mask = 1u << (n & 31); UsedChars[off] |= mask; } // Set bit n in the array
+ inline void AddChar(ImWchar c) { SetBit(c); } // Add character
+ IMGUI_API void AddText(const char* text, const char* text_end = NULL); // Add string (each character of the UTF-8 string are added)
+ IMGUI_API void AddRanges(const ImWchar* ranges); // Add ranges, e.g. builder.AddRanges(ImFontAtlas::GetGlyphRangesDefault()) to force add all of ASCII/Latin+Ext
+ IMGUI_API void BuildRanges(ImVector<ImWchar>* out_ranges); // Output new ranges
+};
+
+// See ImFontAtlas::AddCustomRectXXX functions.
+struct ImFontAtlasCustomRect
+{
+ unsigned short Width, Height; // Input // Desired rectangle dimension
+ unsigned short X, Y; // Output // Packed position in Atlas
+ unsigned int GlyphID; // Input // For custom font glyphs only (ID < 0x110000)
+ float GlyphAdvanceX; // Input // For custom font glyphs only: glyph xadvance
+ ImVec2 GlyphOffset; // Input // For custom font glyphs only: glyph display offset
+ ImFont* Font; // Input // For custom font glyphs only: target font
+ ImFontAtlasCustomRect() { Width = Height = 0; X = Y = 0xFFFF; GlyphID = 0; GlyphAdvanceX = 0.0f; GlyphOffset = ImVec2(0, 0); Font = NULL; }
+ bool IsPacked() const { return X != 0xFFFF; }
+};
+
+// Flags for ImFontAtlas build
+enum ImFontAtlasFlags_
+{
+ ImFontAtlasFlags_None = 0,
+ ImFontAtlasFlags_NoPowerOfTwoHeight = 1 << 0, // Don't round the height to next power of two
+ ImFontAtlasFlags_NoMouseCursors = 1 << 1, // Don't build software mouse cursors into the atlas (save a little texture memory)
+ ImFontAtlasFlags_NoBakedLines = 1 << 2 // Don't build thick line textures into the atlas (save a little texture memory, allow support for point/nearest filtering). The AntiAliasedLinesUseTex features uses them, otherwise they will be rendered using polygons (more expensive for CPU/GPU).
+};
+
+// Load and rasterize multiple TTF/OTF fonts into a same texture. The font atlas will build a single texture holding:
+// - One or more fonts.
+// - Custom graphics data needed to render the shapes needed by Dear ImGui.
+// - Mouse cursor shapes for software cursor rendering (unless setting 'Flags |= ImFontAtlasFlags_NoMouseCursors' in the font atlas).
+// It is the user-code responsibility to setup/build the atlas, then upload the pixel data into a texture accessible by your graphics api.
+// - Optionally, call any of the AddFont*** functions. If you don't call any, the default font embedded in the code will be loaded for you.
+// - Call GetTexDataAsAlpha8() or GetTexDataAsRGBA32() to build and retrieve pixels data.
+// - Upload the pixels data into a texture within your graphics system (see imgui_impl_xxxx.cpp examples)
+// - Call SetTexID(my_tex_id); and pass the pointer/identifier to your texture in a format natural to your graphics API.
+// This value will be passed back to you during rendering to identify the texture. Read FAQ entry about ImTextureID for more details.
+// Common pitfalls:
+// - If you pass a 'glyph_ranges' array to AddFont*** functions, you need to make sure that your array persist up until the
+// atlas is build (when calling GetTexData*** or Build()). We only copy the pointer, not the data.
+// - Important: By default, AddFontFromMemoryTTF() takes ownership of the data. Even though we are not writing to it, we will free the pointer on destruction.
+// You can set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed,
+// - Even though many functions are suffixed with "TTF", OTF data is supported just as well.
+// - This is an old API and it is currently awkward for those and and various other reasons! We will address them in the future!
+struct ImFontAtlas
+{
+ IMGUI_API ImFontAtlas();
+ IMGUI_API ~ImFontAtlas();
+ IMGUI_API ImFont* AddFont(const ImFontConfig* font_cfg);
+ IMGUI_API ImFont* AddFontDefault(const ImFontConfig* font_cfg = NULL);
+ IMGUI_API ImFont* AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL);
+ IMGUI_API ImFont* AddFontFromMemoryTTF(void* font_data, int font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // Note: Transfer ownership of 'ttf_data' to ImFontAtlas! Will be deleted after destruction of the atlas. Set font_cfg->FontDataOwnedByAtlas=false to keep ownership of your data and it won't be freed.
+ IMGUI_API ImFont* AddFontFromMemoryCompressedTTF(const void* compressed_font_data, int compressed_font_size, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data' still owned by caller. Compress with binary_to_compressed_c.cpp.
+ IMGUI_API ImFont* AddFontFromMemoryCompressedBase85TTF(const char* compressed_font_data_base85, float size_pixels, const ImFontConfig* font_cfg = NULL, const ImWchar* glyph_ranges = NULL); // 'compressed_font_data_base85' still owned by caller. Compress with binary_to_compressed_c.cpp with -base85 parameter.
+ IMGUI_API void ClearInputData(); // Clear input data (all ImFontConfig structures including sizes, TTF data, glyph ranges, etc.) = all the data used to build the texture and fonts.
+ IMGUI_API void ClearTexData(); // Clear output texture data (CPU side). Saves RAM once the texture has been copied to graphics memory.
+ IMGUI_API void ClearFonts(); // Clear output font data (glyphs storage, UV coordinates).
+ IMGUI_API void Clear(); // Clear all input and output.
+
+ // Build atlas, retrieve pixel data.
+ // User is in charge of copying the pixels into graphics memory (e.g. create a texture with your engine). Then store your texture handle with SetTexID().
+ // The pitch is always = Width * BytesPerPixels (1 or 4)
+ // Building in RGBA32 format is provided for convenience and compatibility, but note that unless you manually manipulate or copy color data into
+ // the texture (e.g. when using the AddCustomRect*** api), then the RGB pixels emitted will always be white (~75% of memory/bandwidth waste.
+ IMGUI_API bool Build(); // Build pixels data. This is called automatically for you by the GetTexData*** functions.
+ IMGUI_API void GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 1 byte per-pixel
+ IMGUI_API void GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel = NULL); // 4 bytes-per-pixel
+ bool IsBuilt() const { return Fonts.Size > 0 && TexReady; } // Bit ambiguous: used to detect when user didn't built texture but effectively we should check TexID != 0 except that would be backend dependent...
+ void SetTexID(ImTextureID id) { TexID = id; }
+
+ //-------------------------------------------
+ // Glyph Ranges
+ //-------------------------------------------
+
+ // Helpers to retrieve list of common Unicode ranges (2 value per range, values are inclusive, zero-terminated list)
+ // NB: Make sure that your string are UTF-8 and NOT in your local code page. In C++11, you can create UTF-8 string literal using the u8"Hello world" syntax. See FAQ for details.
+ // NB: Consider using ImFontGlyphRangesBuilder to build glyph ranges from textual data.
+ IMGUI_API const ImWchar* GetGlyphRangesDefault(); // Basic Latin, Extended Latin
+ IMGUI_API const ImWchar* GetGlyphRangesKorean(); // Default + Korean characters
+ IMGUI_API const ImWchar* GetGlyphRangesJapanese(); // Default + Hiragana, Katakana, Half-Width, Selection of 2999 Ideographs
+ IMGUI_API const ImWchar* GetGlyphRangesChineseFull(); // Default + Half-Width + Japanese Hiragana/Katakana + full set of about 21000 CJK Unified Ideographs
+ IMGUI_API const ImWchar* GetGlyphRangesChineseSimplifiedCommon();// Default + Half-Width + Japanese Hiragana/Katakana + set of 2500 CJK Unified Ideographs for common simplified Chinese
+ IMGUI_API const ImWchar* GetGlyphRangesCyrillic(); // Default + about 400 Cyrillic characters
+ IMGUI_API const ImWchar* GetGlyphRangesThai(); // Default + Thai characters
+ IMGUI_API const ImWchar* GetGlyphRangesVietnamese(); // Default + Vietnamese characters
+
+ //-------------------------------------------
+ // [BETA] Custom Rectangles/Glyphs API
+ //-------------------------------------------
+
+ // You can request arbitrary rectangles to be packed into the atlas, for your own purposes.
+ // - After calling Build(), you can query the rectangle position and render your pixels.
+ // - If you render colored output, set 'atlas->TexPixelsUseColors = true' as this may help some backends decide of prefered texture format.
+ // - You can also request your rectangles to be mapped as font glyph (given a font + Unicode point),
+ // so you can render e.g. custom colorful icons and use them as regular glyphs.
+ // - Read docs/FONTS.md for more details about using colorful icons.
+ // - Note: this API may be redesigned later in order to support multi-monitor varying DPI settings.
+ IMGUI_API int AddCustomRectRegular(int width, int height);
+ IMGUI_API int AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset = ImVec2(0, 0));
+ ImFontAtlasCustomRect* GetCustomRectByIndex(int index) { IM_ASSERT(index >= 0); return &CustomRects[index]; }
+
+ // [Internal]
+ IMGUI_API void CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max) const;
+ IMGUI_API bool GetMouseCursorTexData(ImGuiMouseCursor cursor, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2]);
+
+ //-------------------------------------------
+ // Members
+ //-------------------------------------------
+
+ ImFontAtlasFlags Flags; // Build flags (see ImFontAtlasFlags_)
+ ImTextureID TexID; // User data to refer to the texture once it has been uploaded to user's graphic systems. It is passed back to you during rendering via the ImDrawCmd structure.
+ int TexDesiredWidth; // Texture width desired by user before Build(). Must be a power-of-two. If have many glyphs your graphics API have texture size restrictions you may want to increase texture width to decrease height.
+ int TexGlyphPadding; // Padding between glyphs within texture in pixels. Defaults to 1. If your rendering method doesn't rely on bilinear filtering you may set this to 0 (will also need to set AntiAliasedLinesUseTex = false).
+ bool Locked; // Marked as Locked by ImGui::NewFrame() so attempt to modify the atlas will assert.
+
+ // [Internal]
+ // NB: Access texture data via GetTexData*() calls! Which will setup a default font for you.
+ bool TexReady; // Set when texture was built matching current font input
+ bool TexPixelsUseColors; // Tell whether our texture data is known to use colors (rather than just alpha channel), in order to help backend select a format.
+ unsigned char* TexPixelsAlpha8; // 1 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight
+ unsigned int* TexPixelsRGBA32; // 4 component per pixel, each component is unsigned 8-bit. Total size = TexWidth * TexHeight * 4
+ int TexWidth; // Texture width calculated during Build().
+ int TexHeight; // Texture height calculated during Build().
+ ImVec2 TexUvScale; // = (1.0f/TexWidth, 1.0f/TexHeight)
+ ImVec2 TexUvWhitePixel; // Texture coordinates to a white pixel
+ ImVector<ImFont*> Fonts; // Hold all the fonts returned by AddFont*. Fonts[0] is the default font upon calling ImGui::NewFrame(), use ImGui::PushFont()/PopFont() to change the current font.
+ ImVector<ImFontAtlasCustomRect> CustomRects; // Rectangles for packing custom texture data into the atlas.
+ ImVector<ImFontConfig> ConfigData; // Configuration data
+ ImVec4 TexUvLines[IM_DRAWLIST_TEX_LINES_WIDTH_MAX + 1]; // UVs for baked anti-aliased lines
+
+ // [Internal] Font builder
+ const ImFontBuilderIO* FontBuilderIO; // Opaque interface to a font builder (default to stb_truetype, can be changed to use FreeType by defining IMGUI_ENABLE_FREETYPE).
+ unsigned int FontBuilderFlags; // Shared flags (for all fonts) for custom font builder. THIS IS BUILD IMPLEMENTATION DEPENDENT. Per-font override is also available in ImFontConfig.
+
+ // [Internal] Packing data
+ int PackIdMouseCursors; // Custom texture rectangle ID for white pixel and mouse cursors
+ int PackIdLines; // Custom texture rectangle ID for baked anti-aliased lines
+
+ // [Obsolete]
+ //typedef ImFontAtlasCustomRect CustomRect; // OBSOLETED in 1.72+
+ //typedef ImFontGlyphRangesBuilder GlyphRangesBuilder; // OBSOLETED in 1.67+
+};
+
+// Font runtime data and rendering
+// ImFontAtlas automatically loads a default embedded font for you when you call GetTexDataAsAlpha8() or GetTexDataAsRGBA32().
+struct ImFont
+{
+ // Members: Hot ~20/24 bytes (for CalcTextSize)
+ ImVector<float> IndexAdvanceX; // 12-16 // out // // Sparse. Glyphs->AdvanceX in a directly indexable way (cache-friendly for CalcTextSize functions which only this this info, and are often bottleneck in large UI).
+ float FallbackAdvanceX; // 4 // out // = FallbackGlyph->AdvanceX
+ float FontSize; // 4 // in // // Height of characters/line, set during loading (don't change after loading)
+
+ // Members: Hot ~28/40 bytes (for CalcTextSize + render loop)
+ ImVector<ImWchar> IndexLookup; // 12-16 // out // // Sparse. Index glyphs by Unicode code-point.
+ ImVector<ImFontGlyph> Glyphs; // 12-16 // out // // All glyphs.
+ const ImFontGlyph* FallbackGlyph; // 4-8 // out // = FindGlyph(FontFallbackChar)
+
+ // Members: Cold ~32/40 bytes
+ ImFontAtlas* ContainerAtlas; // 4-8 // out // // What we has been loaded into
+ const ImFontConfig* ConfigData; // 4-8 // in // // Pointer within ContainerAtlas->ConfigData
+ short ConfigDataCount; // 2 // in // ~ 1 // Number of ImFontConfig involved in creating this font. Bigger than 1 when merging multiple font sources into one ImFont.
+ ImWchar FallbackChar; // 2 // out // = FFFD/'?' // Character used if a glyph isn't found.
+ ImWchar EllipsisChar; // 2 // out // = '...' // Character used for ellipsis rendering.
+ ImWchar DotChar; // 2 // out // = '.' // Character used for ellipsis rendering (if a single '...' character isn't found)
+ bool DirtyLookupTables; // 1 // out //
+ float Scale; // 4 // in // = 1.f // Base font scale, multiplied by the per-window font scale which you can adjust with SetWindowFontScale()
+ float Ascent, Descent; // 4+4 // out // // Ascent: distance from top to bottom of e.g. 'A' [0..FontSize]
+ int MetricsTotalSurface;// 4 // out // // Total surface in pixels to get an idea of the font rasterization/texture cost (not exact, we approximate the cost of padding between glyphs)
+ ImU8 Used4kPagesMap[(IM_UNICODE_CODEPOINT_MAX+1)/4096/8]; // 2 bytes if ImWchar=ImWchar16, 34 bytes if ImWchar==ImWchar32. Store 1-bit for each block of 4K codepoints that has one active glyph. This is mainly used to facilitate iterations across all used codepoints.
+
+ // Methods
+ IMGUI_API ImFont();
+ IMGUI_API ~ImFont();
+ IMGUI_API const ImFontGlyph*FindGlyph(ImWchar c) const;
+ IMGUI_API const ImFontGlyph*FindGlyphNoFallback(ImWchar c) const;
+ float GetCharAdvance(ImWchar c) const { return ((int)c < IndexAdvanceX.Size) ? IndexAdvanceX[(int)c] : FallbackAdvanceX; }
+ bool IsLoaded() const { return ContainerAtlas != NULL; }
+ const char* GetDebugName() const { return ConfigData ? ConfigData->Name : "<unknown>"; }
+
+ // 'max_width' stops rendering after a certain width (could be turned into a 2d size). FLT_MAX to disable.
+ // 'wrap_width' enable automatic word-wrapping across multiple lines to fit into given width. 0.0f to disable.
+ IMGUI_API ImVec2 CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end = NULL, const char** remaining = NULL) const; // utf8
+ IMGUI_API const char* CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const;
+ IMGUI_API void RenderChar(ImDrawList* draw_list, float size, const ImVec2& pos, ImU32 col, ImWchar c) const;
+ IMGUI_API void RenderText(ImDrawList* draw_list, float size, const ImVec2& pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width = 0.0f, bool cpu_fine_clip = false) const;
+
+ // [Internal] Don't use!
+ IMGUI_API void BuildLookupTable();
+ IMGUI_API void ClearOutputData();
+ IMGUI_API void GrowIndex(int new_size);
+ IMGUI_API void AddGlyph(const ImFontConfig* src_cfg, ImWchar c, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x);
+ IMGUI_API void AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst = true); // Makes 'dst' character/glyph points to 'src' character/glyph. Currently needs to be called AFTER fonts have been built.
+ IMGUI_API void SetGlyphVisible(ImWchar c, bool visible);
+ IMGUI_API bool IsGlyphRangeUnused(unsigned int c_begin, unsigned int c_last);
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Viewports
+//-----------------------------------------------------------------------------
+
+// Flags stored in ImGuiViewport::Flags, giving indications to the platform backends.
+enum ImGuiViewportFlags_
+{
+ ImGuiViewportFlags_None = 0,
+ ImGuiViewportFlags_IsPlatformWindow = 1 << 0, // Represent a Platform Window
+ ImGuiViewportFlags_IsPlatformMonitor = 1 << 1, // Represent a Platform Monitor (unused yet)
+ ImGuiViewportFlags_OwnedByApp = 1 << 2 // Platform Window: is created/managed by the application (rather than a dear imgui backend)
+};
+
+// - Currently represents the Platform Window created by the application which is hosting our Dear ImGui windows.
+// - In 'docking' branch with multi-viewport enabled, we extend this concept to have multiple active viewports.
+// - In the future we will extend this concept further to also represent Platform Monitor and support a "no main platform window" operation mode.
+// - About Main Area vs Work Area:
+// - Main Area = entire viewport.
+// - Work Area = entire viewport minus sections used by main menu bars (for platform windows), or by task bar (for platform monitor).
+// - Windows are generally trying to stay within the Work Area of their host viewport.
+struct ImGuiViewport
+{
+ ImGuiViewportFlags Flags; // See ImGuiViewportFlags_
+ ImVec2 Pos; // Main Area: Position of the viewport (Dear ImGui coordinates are the same as OS desktop/native coordinates)
+ ImVec2 Size; // Main Area: Size of the viewport.
+ ImVec2 WorkPos; // Work Area: Position of the viewport minus task bars, menus bars, status bars (>= Pos)
+ ImVec2 WorkSize; // Work Area: Size of the viewport minus task bars, menu bars, status bars (<= Size)
+
+ // Platform/Backend Dependent Data
+ void* PlatformHandleRaw; // void* to hold lower-level, platform-native window handle (under Win32 this is expected to be a HWND, unused for other platforms)
+
+ ImGuiViewport() { memset(this, 0, sizeof(*this)); }
+
+ // Helpers
+ ImVec2 GetCenter() const { return ImVec2(Pos.x + Size.x * 0.5f, Pos.y + Size.y * 0.5f); }
+ ImVec2 GetWorkCenter() const { return ImVec2(WorkPos.x + WorkSize.x * 0.5f, WorkPos.y + WorkSize.y * 0.5f); }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Platform Dependent Interfaces
+//-----------------------------------------------------------------------------
+
+// (Optional) Support for IME (Input Method Editor) via the io.SetPlatformImeDataFn() function.
+struct ImGuiPlatformImeData
+{
+ bool WantVisible; // A widget wants the IME to be visible
+ ImVec2 InputPos; // Position of the input cursor
+ float InputLineHeight; // Line height
+
+ ImGuiPlatformImeData() { memset(this, 0, sizeof(*this)); }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Obsolete functions and types
+// (Will be removed! Read 'API BREAKING CHANGES' section in imgui.cpp for details)
+// Please keep your copy of dear imgui up to date! Occasionally set '#define IMGUI_DISABLE_OBSOLETE_FUNCTIONS' in imconfig.h to stay ahead.
+//-----------------------------------------------------------------------------
+
+namespace ImGui
+{
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+ IMGUI_API int GetKeyIndex(ImGuiKey key); // map ImGuiKey_* values into legacy native key index. == io.KeyMap[key]
+#else
+ static inline int GetKeyIndex(ImGuiKey key) { IM_ASSERT(key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END && "ImGuiKey and native_index was merged together and native_index is disabled by IMGUI_DISABLE_OBSOLETE_KEYIO. Please switch to ImGuiKey."); return key; }
+#endif
+}
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+namespace ImGui
+{
+ // OBSOLETED in 1.88 (from May 2022)
+ static inline void CaptureKeyboardFromApp(bool want_capture_keyboard = true) { SetNextFrameWantCaptureKeyboard(want_capture_keyboard); } // Renamed as name was misleading + removed default value.
+ static inline void CaptureMouseFromApp(bool want_capture_mouse = true) { SetNextFrameWantCaptureMouse(want_capture_mouse); } // Renamed as name was misleading + removed default value.
+ // OBSOLETED in 1.86 (from November 2021)
+ IMGUI_API void CalcListClipping(int items_count, float items_height, int* out_items_display_start, int* out_items_display_end); // Calculate coarse clipping for large list of evenly sized items. Prefer using ImGuiListClipper.
+ // OBSOLETED in 1.85 (from August 2021)
+ static inline float GetWindowContentRegionWidth() { return GetWindowContentRegionMax().x - GetWindowContentRegionMin().x; }
+ // OBSOLETED in 1.81 (from February 2021)
+ IMGUI_API bool ListBoxHeader(const char* label, int items_count, int height_in_items = -1); // Helper to calculate size from items_count and height_in_items
+ static inline bool ListBoxHeader(const char* label, const ImVec2& size = ImVec2(0, 0)) { return BeginListBox(label, size); }
+ static inline void ListBoxFooter() { EndListBox(); }
+ // OBSOLETED in 1.79 (from August 2020)
+ static inline void OpenPopupContextItem(const char* str_id = NULL, ImGuiMouseButton mb = 1) { OpenPopupOnItemClick(str_id, mb); } // Bool return value removed. Use IsWindowAppearing() in BeginPopup() instead. Renamed in 1.77, renamed back in 1.79. Sorry!
+ // OBSOLETED in 1.78 (from June 2020)
+ // Old drag/sliders functions that took a 'float power = 1.0' argument instead of flags.
+ // For shared code, you can version check at compile-time with `#if IMGUI_VERSION_NUM >= 17704`.
+ IMGUI_API bool DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power);
+ IMGUI_API bool DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power);
+ static inline bool DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, float power) { return DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, format, power); }
+ static inline bool DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, float power) { return DragScalarN(label, ImGuiDataType_Float, v, 2, v_speed, &v_min, &v_max, format, power); }
+ static inline bool DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, float power) { return DragScalarN(label, ImGuiDataType_Float, v, 3, v_speed, &v_min, &v_max, format, power); }
+ static inline bool DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, float power) { return DragScalarN(label, ImGuiDataType_Float, v, 4, v_speed, &v_min, &v_max, format, power); }
+ IMGUI_API bool SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power);
+ IMGUI_API bool SliderScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_min, const void* p_max, const char* format, float power);
+ static inline bool SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, float power) { return SliderScalar(label, ImGuiDataType_Float, v, &v_min, &v_max, format, power); }
+ static inline bool SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, float power) { return SliderScalarN(label, ImGuiDataType_Float, v, 2, &v_min, &v_max, format, power); }
+ static inline bool SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, float power) { return SliderScalarN(label, ImGuiDataType_Float, v, 3, &v_min, &v_max, format, power); }
+ static inline bool SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, float power) { return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, power); }
+ // OBSOLETED in 1.77 (from June 2020)
+ static inline bool BeginPopupContextWindow(const char* str_id, ImGuiMouseButton mb, bool over_items) { return BeginPopupContextWindow(str_id, mb | (over_items ? 0 : ImGuiPopupFlags_NoOpenOverItems)); }
+
+ // Some of the older obsolete names along with their replacement (commented out so they are not reported in IDE)
+ //static inline void TreeAdvanceToLabelPos() { SetCursorPosX(GetCursorPosX() + GetTreeNodeToLabelSpacing()); } // OBSOLETED in 1.72 (from July 2019)
+ //static inline void SetNextTreeNodeOpen(bool open, ImGuiCond cond = 0) { SetNextItemOpen(open, cond); } // OBSOLETED in 1.71 (from June 2019)
+ //static inline float GetContentRegionAvailWidth() { return GetContentRegionAvail().x; } // OBSOLETED in 1.70 (from May 2019)
+ //static inline ImDrawList* GetOverlayDrawList() { return GetForegroundDrawList(); } // OBSOLETED in 1.69 (from Mar 2019)
+ //static inline void SetScrollHere(float ratio = 0.5f) { SetScrollHereY(ratio); } // OBSOLETED in 1.66 (from Nov 2018)
+ //static inline bool IsItemDeactivatedAfterChange() { return IsItemDeactivatedAfterEdit(); } // OBSOLETED in 1.63 (from Aug 2018)
+ //static inline bool IsAnyWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_AnyWindow); } // OBSOLETED in 1.60 (from Apr 2018)
+ //static inline bool IsAnyWindowHovered() { return IsWindowHovered(ImGuiHoveredFlags_AnyWindow); } // OBSOLETED in 1.60 (between Dec 2017 and Apr 2018)
+ //static inline void ShowTestWindow() { return ShowDemoWindow(); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
+ //static inline bool IsRootWindowFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootWindow); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
+ //static inline bool IsRootWindowOrAnyChildFocused() { return IsWindowFocused(ImGuiFocusedFlags_RootAndChildWindows); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
+ //static inline void SetNextWindowContentWidth(float w) { SetNextWindowContentSize(ImVec2(w, 0.0f)); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
+ //static inline float GetItemsLineHeightWithSpacing() { return GetFrameHeightWithSpacing(); } // OBSOLETED in 1.53 (between Oct 2017 and Dec 2017)
+}
+
+// OBSOLETED in 1.82 (from Mars 2021): flags for AddRect(), AddRectFilled(), AddImageRounded(), PathRect()
+typedef ImDrawFlags ImDrawCornerFlags;
+enum ImDrawCornerFlags_
+{
+ ImDrawCornerFlags_None = ImDrawFlags_RoundCornersNone, // Was == 0 prior to 1.82, this is now == ImDrawFlags_RoundCornersNone which is != 0 and not implicit
+ ImDrawCornerFlags_TopLeft = ImDrawFlags_RoundCornersTopLeft, // Was == 0x01 (1 << 0) prior to 1.82. Order matches ImDrawFlags_NoRoundCorner* flag (we exploit this internally).
+ ImDrawCornerFlags_TopRight = ImDrawFlags_RoundCornersTopRight, // Was == 0x02 (1 << 1) prior to 1.82.
+ ImDrawCornerFlags_BotLeft = ImDrawFlags_RoundCornersBottomLeft, // Was == 0x04 (1 << 2) prior to 1.82.
+ ImDrawCornerFlags_BotRight = ImDrawFlags_RoundCornersBottomRight, // Was == 0x08 (1 << 3) prior to 1.82.
+ ImDrawCornerFlags_All = ImDrawFlags_RoundCornersAll, // Was == 0x0F prior to 1.82
+ ImDrawCornerFlags_Top = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_TopRight,
+ ImDrawCornerFlags_Bot = ImDrawCornerFlags_BotLeft | ImDrawCornerFlags_BotRight,
+ ImDrawCornerFlags_Left = ImDrawCornerFlags_TopLeft | ImDrawCornerFlags_BotLeft,
+ ImDrawCornerFlags_Right = ImDrawCornerFlags_TopRight | ImDrawCornerFlags_BotRight
+};
+
+// RENAMED ImGuiKeyModFlags -> ImGuiModFlags in 1.88 (from April 2022)
+typedef int ImGuiKeyModFlags;
+enum ImGuiKeyModFlags_ { ImGuiKeyModFlags_None = ImGuiModFlags_None, ImGuiKeyModFlags_Ctrl = ImGuiModFlags_Ctrl, ImGuiKeyModFlags_Shift = ImGuiModFlags_Shift, ImGuiKeyModFlags_Alt = ImGuiModFlags_Alt, ImGuiKeyModFlags_Super = ImGuiModFlags_Super };
+
+#endif // #ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+
+// RENAMED IMGUI_DISABLE_METRICS_WINDOW > IMGUI_DISABLE_DEBUG_TOOLS in 1.88 (from June 2022)
+#if defined(IMGUI_DISABLE_METRICS_WINDOW) && !defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS) && !defined(IMGUI_DISABLE_DEBUG_TOOLS)
+#define IMGUI_DISABLE_DEBUG_TOOLS
+#endif
+#if defined(IMGUI_DISABLE_METRICS_WINDOW) && defined(IMGUI_DISABLE_OBSOLETE_FUNCTIONS)
+#error IMGUI_DISABLE_METRICS_WINDOW was renamed to IMGUI_DISABLE_DEBUG_TOOLS, please use new name.
+#endif
+
+//-----------------------------------------------------------------------------
+
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#elif defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (pop)
+#endif
+
+// Include imgui_user.h at the end of imgui.h (convenient for user to only explicitly include vanilla imgui.h)
+#ifdef IMGUI_INCLUDE_IMGUI_USER_H
+#include "imgui_user.h"
+#endif
+
+#endif // #ifndef IMGUI_DISABLE
diff --git a/tests/manual/rhi/shared/imgui/imgui/imgui_demo.cpp b/tests/manual/rhi/shared/imgui/imgui/imgui_demo.cpp
new file mode 100644
index 0000000000..4a12dd4df4
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/imgui_demo.cpp
@@ -0,0 +1,7969 @@
+// dear imgui, v1.88
+// (demo code)
+
+// Help:
+// - Read FAQ at http://dearimgui.org/faq
+// - Newcomers, read 'Programmer guide' in imgui.cpp for notes on how to setup Dear ImGui in your codebase.
+// - Call and read ImGui::ShowDemoWindow() in imgui_demo.cpp. All applications in examples/ are doing that.
+// Read imgui.cpp for more details, documentation and comments.
+// Get the latest version at https://github.com/ocornut/imgui
+
+// Message to the person tempted to delete this file when integrating Dear ImGui into their codebase:
+// Do NOT remove this file from your project! Think again! It is the most useful reference code that you and other
+// coders will want to refer to and call. Have the ImGui::ShowDemoWindow() function wired in an always-available
+// debug menu of your game/app! Removing this file from your project is hindering access to documentation for everyone
+// in your team, likely leading you to poorer usage of the library.
+// Everything in this file will be stripped out by the linker if you don't call ImGui::ShowDemoWindow().
+// If you want to link core Dear ImGui in your shipped builds but want a thorough guarantee that the demo will not be
+// linked, you can setup your imconfig.h with #define IMGUI_DISABLE_DEMO_WINDOWS and those functions will be empty.
+// In another situation, whenever you have Dear ImGui available you probably want this to be available for reference.
+// Thank you,
+// -Your beloved friend, imgui_demo.cpp (which you won't delete)
+
+// Message to beginner C/C++ programmers about the meaning of the 'static' keyword:
+// In this demo code, we frequently use 'static' variables inside functions. A static variable persists across calls,
+// so it is essentially like a global variable but declared inside the scope of the function. We do this as a way to
+// gather code and data in the same place, to make the demo source code faster to read, faster to write, and smaller
+// in size. It also happens to be a convenient way of storing simple UI related information as long as your function
+// doesn't need to be reentrant or used in multiple threads. This might be a pattern you will want to use in your code,
+// but most of the real data you would be editing is likely going to be stored outside your functions.
+
+// The Demo code in this file is designed to be easy to copy-and-paste into your application!
+// Because of this:
+// - We never omit the ImGui:: prefix when calling functions, even though most code here is in the same namespace.
+// - We try to declare static variables in the local scope, as close as possible to the code using them.
+// - We never use any of the helpers/facilities used internally by Dear ImGui, unless available in the public API.
+// - We never use maths operators on ImVec2/ImVec4. For our other sources files we use them, and they are provided
+// by imgui_internal.h using the IMGUI_DEFINE_MATH_OPERATORS define. For your own sources file they are optional
+// and require you either enable those, either provide your own via IM_VEC2_CLASS_EXTRA in imconfig.h.
+// Because we can't assume anything about your support of maths operators, we cannot use them in imgui_demo.cpp.
+
+// Navigating this file:
+// - In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
+// - With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
+
+/*
+
+Index of this file:
+
+// [SECTION] Forward Declarations, Helpers
+// [SECTION] Demo Window / ShowDemoWindow()
+// - sub section: ShowDemoWindowWidgets()
+// - sub section: ShowDemoWindowLayout()
+// - sub section: ShowDemoWindowPopups()
+// - sub section: ShowDemoWindowTables()
+// - sub section: ShowDemoWindowMisc()
+// [SECTION] About Window / ShowAboutWindow()
+// [SECTION] Style Editor / ShowStyleEditor()
+// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar()
+// [SECTION] Example App: Debug Console / ShowExampleAppConsole()
+// [SECTION] Example App: Debug Log / ShowExampleAppLog()
+// [SECTION] Example App: Simple Layout / ShowExampleAppLayout()
+// [SECTION] Example App: Property Editor / ShowExampleAppPropertyEditor()
+// [SECTION] Example App: Long Text / ShowExampleAppLongText()
+// [SECTION] Example App: Auto Resize / ShowExampleAppAutoResize()
+// [SECTION] Example App: Constrained Resize / ShowExampleAppConstrainedResize()
+// [SECTION] Example App: Simple overlay / ShowExampleAppSimpleOverlay()
+// [SECTION] Example App: Fullscreen window / ShowExampleAppFullscreen()
+// [SECTION] Example App: Manipulating window titles / ShowExampleAppWindowTitles()
+// [SECTION] Example App: Custom Rendering using ImDrawList API / ShowExampleAppCustomRendering()
+// [SECTION] Example App: Documents Handling / ShowExampleAppDocuments()
+
+*/
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "imgui.h"
+#ifndef IMGUI_DISABLE
+
+// System includes
+#include <ctype.h> // toupper
+#include <limits.h> // INT_MIN, INT_MAX
+#include <math.h> // sqrtf, powf, cosf, sinf, floorf, ceilf
+#include <stdio.h> // vsnprintf, sscanf, printf
+#include <stdlib.h> // NULL, malloc, free, atoi
+#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
+#include <stddef.h> // intptr_t
+#else
+#include <stdint.h> // intptr_t
+#endif
+
+// Visual Studio warnings
+#ifdef _MSC_VER
+#pragma warning (disable: 4127) // condition expression is constant
+#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
+#pragma warning (disable: 26451) // [Static Analyzer] Arithmetic overflow : Using operator 'xxx' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator 'xxx' to avoid overflow(io.2).
+#endif
+
+// Clang/GCC warnings with -Weverything
+#if defined(__clang__)
+#if __has_warning("-Wunknown-warning-option")
+#pragma clang diagnostic ignored "-Wunknown-warning-option" // warning: unknown warning group 'xxx' // not all warnings are known by all Clang versions and they tend to be rename-happy.. so ignoring warnings triggers new warnings on some configuration. Great!
+#endif
+#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning: unknown warning group 'xxx'
+#pragma clang diagnostic ignored "-Wold-style-cast" // warning: use of old-style cast // yes, they are more terse.
+#pragma clang diagnostic ignored "-Wdeprecated-declarations" // warning: 'xx' is deprecated: The POSIX name for this.. // for strdup used in demo code (so user can copy & paste the code)
+#pragma clang diagnostic ignored "-Wint-to-void-pointer-cast" // warning: cast to 'void *' from smaller integer type
+#pragma clang diagnostic ignored "-Wformat-security" // warning: format string is not a string literal
+#pragma clang diagnostic ignored "-Wexit-time-destructors" // warning: declaration requires an exit-time destructor // exit-time destruction order is undefined. if MemFree() leads to users code that has been disabled before exit it might cause problems. ImGui coding style welcomes static/globals.
+#pragma clang diagnostic ignored "-Wunused-macros" // warning: macro is not used // we define snprintf/vsnprintf on Windows so they are available, but not always used.
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning: zero as null pointer constant // some standard header variations use #define NULL 0
+#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning: macro name is a reserved identifier
+#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" // warning: implicit conversion from 'xxx' to 'float' may lose precision
+#elif defined(__GNUC__)
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wint-to-pointer-cast" // warning: cast to pointer from integer of different size
+#pragma GCC diagnostic ignored "-Wformat-security" // warning: format string is not a string literal (potentially insecure)
+#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function
+#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value
+#pragma GCC diagnostic ignored "-Wmisleading-indentation" // [__GNUC__ >= 6] warning: this 'if' clause does not guard this statement // GCC 6.0+ only. See #883 on GitHub.
+#endif
+
+// Play it nice with Windows users (Update: May 2018, Notepad now supports Unix-style carriage returns!)
+#ifdef _WIN32
+#define IM_NEWLINE "\r\n"
+#else
+#define IM_NEWLINE "\n"
+#endif
+
+// Helpers
+#if defined(_MSC_VER) && !defined(snprintf)
+#define snprintf _snprintf
+#endif
+#if defined(_MSC_VER) && !defined(vsnprintf)
+#define vsnprintf _vsnprintf
+#endif
+
+// Format specifiers, printing 64-bit hasn't been decently standardized...
+// In a real application you should be using PRId64 and PRIu64 from <inttypes.h> (non-windows) and on Windows define them yourself.
+#ifdef _MSC_VER
+#define IM_PRId64 "I64d"
+#define IM_PRIu64 "I64u"
+#else
+#define IM_PRId64 "lld"
+#define IM_PRIu64 "llu"
+#endif
+
+// Helpers macros
+// We normally try to not use many helpers in imgui_demo.cpp in order to make code easier to copy and paste,
+// but making an exception here as those are largely simplifying code...
+// In other imgui sources we can use nicer internal functions from imgui_internal.h (ImMin/ImMax) but not in the demo.
+#define IM_MIN(A, B) (((A) < (B)) ? (A) : (B))
+#define IM_MAX(A, B) (((A) >= (B)) ? (A) : (B))
+#define IM_CLAMP(V, MN, MX) ((V) < (MN) ? (MN) : (V) > (MX) ? (MX) : (V))
+
+// Enforce cdecl calling convention for functions called by the standard library, in case compilation settings changed the default to e.g. __vectorcall
+#ifndef IMGUI_CDECL
+#ifdef _MSC_VER
+#define IMGUI_CDECL __cdecl
+#else
+#define IMGUI_CDECL
+#endif
+#endif
+
+//-----------------------------------------------------------------------------
+// [SECTION] Forward Declarations, Helpers
+//-----------------------------------------------------------------------------
+
+#if !defined(IMGUI_DISABLE_DEMO_WINDOWS)
+
+// Forward Declarations
+static void ShowExampleAppDocuments(bool* p_open);
+static void ShowExampleAppMainMenuBar();
+static void ShowExampleAppConsole(bool* p_open);
+static void ShowExampleAppLog(bool* p_open);
+static void ShowExampleAppLayout(bool* p_open);
+static void ShowExampleAppPropertyEditor(bool* p_open);
+static void ShowExampleAppLongText(bool* p_open);
+static void ShowExampleAppAutoResize(bool* p_open);
+static void ShowExampleAppConstrainedResize(bool* p_open);
+static void ShowExampleAppSimpleOverlay(bool* p_open);
+static void ShowExampleAppFullscreen(bool* p_open);
+static void ShowExampleAppWindowTitles(bool* p_open);
+static void ShowExampleAppCustomRendering(bool* p_open);
+static void ShowExampleMenuFile();
+
+// Helper to display a little (?) mark which shows a tooltip when hovered.
+// In your own code you may want to display an actual icon if you are using a merged icon fonts (see docs/FONTS.md)
+static void HelpMarker(const char* desc)
+{
+ ImGui::TextDisabled("(?)");
+ if (ImGui::IsItemHovered())
+ {
+ ImGui::BeginTooltip();
+ ImGui::PushTextWrapPos(ImGui::GetFontSize() * 35.0f);
+ ImGui::TextUnformatted(desc);
+ ImGui::PopTextWrapPos();
+ ImGui::EndTooltip();
+ }
+}
+
+// Helper to wire demo markers located in code to a interactive browser
+typedef void (*ImGuiDemoMarkerCallback)(const char* file, int line, const char* section, void* user_data);
+extern ImGuiDemoMarkerCallback GImGuiDemoMarkerCallback;
+extern void* GImGuiDemoMarkerCallbackUserData;
+ImGuiDemoMarkerCallback GImGuiDemoMarkerCallback = NULL;
+void* GImGuiDemoMarkerCallbackUserData = NULL;
+#define IMGUI_DEMO_MARKER(section) do { if (GImGuiDemoMarkerCallback != NULL) GImGuiDemoMarkerCallback(__FILE__, __LINE__, section, GImGuiDemoMarkerCallbackUserData); } while (0)
+
+// Helper to display basic user controls.
+void ImGui::ShowUserGuide()
+{
+ ImGuiIO& io = ImGui::GetIO();
+ ImGui::BulletText("Double-click on title bar to collapse window.");
+ ImGui::BulletText(
+ "Click and drag on lower corner to resize window\n"
+ "(double-click to auto fit window to its contents).");
+ ImGui::BulletText("CTRL+Click on a slider or drag box to input value as text.");
+ ImGui::BulletText("TAB/SHIFT+TAB to cycle through keyboard editable fields.");
+ ImGui::BulletText("CTRL+Tab to select a window.");
+ if (io.FontAllowUserScaling)
+ ImGui::BulletText("CTRL+Mouse Wheel to zoom window contents.");
+ ImGui::BulletText("While inputing text:\n");
+ ImGui::Indent();
+ ImGui::BulletText("CTRL+Left/Right to word jump.");
+ ImGui::BulletText("CTRL+A or double-click to select all.");
+ ImGui::BulletText("CTRL+X/C/V to use clipboard cut/copy/paste.");
+ ImGui::BulletText("CTRL+Z,CTRL+Y to undo/redo.");
+ ImGui::BulletText("ESCAPE to revert.");
+ ImGui::Unindent();
+ ImGui::BulletText("With keyboard navigation enabled:");
+ ImGui::Indent();
+ ImGui::BulletText("Arrow keys to navigate.");
+ ImGui::BulletText("Space to activate a widget.");
+ ImGui::BulletText("Return to input text into a widget.");
+ ImGui::BulletText("Escape to deactivate a widget, close popup, exit child window.");
+ ImGui::BulletText("Alt to jump to the menu layer of a window.");
+ ImGui::Unindent();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Demo Window / ShowDemoWindow()
+//-----------------------------------------------------------------------------
+// - ShowDemoWindowWidgets()
+// - ShowDemoWindowLayout()
+// - ShowDemoWindowPopups()
+// - ShowDemoWindowTables()
+// - ShowDemoWindowColumns()
+// - ShowDemoWindowMisc()
+//-----------------------------------------------------------------------------
+
+// We split the contents of the big ShowDemoWindow() function into smaller functions
+// (because the link time of very large functions grow non-linearly)
+static void ShowDemoWindowWidgets();
+static void ShowDemoWindowLayout();
+static void ShowDemoWindowPopups();
+static void ShowDemoWindowTables();
+static void ShowDemoWindowColumns();
+static void ShowDemoWindowMisc();
+
+// Demonstrate most Dear ImGui features (this is big function!)
+// You may execute this function to experiment with the UI and understand what it does.
+// You may then search for keywords in the code when you are interested by a specific feature.
+void ImGui::ShowDemoWindow(bool* p_open)
+{
+ // Exceptionally add an extra assert here for people confused about initial Dear ImGui setup
+ // Most ImGui functions would normally just crash if the context is missing.
+ IM_ASSERT(ImGui::GetCurrentContext() != NULL && "Missing dear imgui context. Refer to examples app!");
+
+ // Examples Apps (accessible from the "Examples" menu)
+ static bool show_app_main_menu_bar = false;
+ static bool show_app_documents = false;
+
+ static bool show_app_console = false;
+ static bool show_app_log = false;
+ static bool show_app_layout = false;
+ static bool show_app_property_editor = false;
+ static bool show_app_long_text = false;
+ static bool show_app_auto_resize = false;
+ static bool show_app_constrained_resize = false;
+ static bool show_app_simple_overlay = false;
+ static bool show_app_fullscreen = false;
+ static bool show_app_window_titles = false;
+ static bool show_app_custom_rendering = false;
+
+ if (show_app_main_menu_bar) ShowExampleAppMainMenuBar();
+ if (show_app_documents) ShowExampleAppDocuments(&show_app_documents);
+
+ if (show_app_console) ShowExampleAppConsole(&show_app_console);
+ if (show_app_log) ShowExampleAppLog(&show_app_log);
+ if (show_app_layout) ShowExampleAppLayout(&show_app_layout);
+ if (show_app_property_editor) ShowExampleAppPropertyEditor(&show_app_property_editor);
+ if (show_app_long_text) ShowExampleAppLongText(&show_app_long_text);
+ if (show_app_auto_resize) ShowExampleAppAutoResize(&show_app_auto_resize);
+ if (show_app_constrained_resize) ShowExampleAppConstrainedResize(&show_app_constrained_resize);
+ if (show_app_simple_overlay) ShowExampleAppSimpleOverlay(&show_app_simple_overlay);
+ if (show_app_fullscreen) ShowExampleAppFullscreen(&show_app_fullscreen);
+ if (show_app_window_titles) ShowExampleAppWindowTitles(&show_app_window_titles);
+ if (show_app_custom_rendering) ShowExampleAppCustomRendering(&show_app_custom_rendering);
+
+ // Dear ImGui Apps (accessible from the "Tools" menu)
+ static bool show_app_metrics = false;
+ static bool show_app_debug_log = false;
+ static bool show_app_stack_tool = false;
+ static bool show_app_about = false;
+ static bool show_app_style_editor = false;
+
+ if (show_app_metrics)
+ ImGui::ShowMetricsWindow(&show_app_metrics);
+ if (show_app_debug_log)
+ ImGui::ShowDebugLogWindow(&show_app_debug_log);
+ if (show_app_stack_tool)
+ ImGui::ShowStackToolWindow(&show_app_stack_tool);
+ if (show_app_about)
+ ImGui::ShowAboutWindow(&show_app_about);
+ if (show_app_style_editor)
+ {
+ ImGui::Begin("Dear ImGui Style Editor", &show_app_style_editor);
+ ImGui::ShowStyleEditor();
+ ImGui::End();
+ }
+
+ // Demonstrate the various window flags. Typically you would just use the default!
+ static bool no_titlebar = false;
+ static bool no_scrollbar = false;
+ static bool no_menu = false;
+ static bool no_move = false;
+ static bool no_resize = false;
+ static bool no_collapse = false;
+ static bool no_close = false;
+ static bool no_nav = false;
+ static bool no_background = false;
+ static bool no_bring_to_front = false;
+ static bool unsaved_document = false;
+
+ ImGuiWindowFlags window_flags = 0;
+ if (no_titlebar) window_flags |= ImGuiWindowFlags_NoTitleBar;
+ if (no_scrollbar) window_flags |= ImGuiWindowFlags_NoScrollbar;
+ if (!no_menu) window_flags |= ImGuiWindowFlags_MenuBar;
+ if (no_move) window_flags |= ImGuiWindowFlags_NoMove;
+ if (no_resize) window_flags |= ImGuiWindowFlags_NoResize;
+ if (no_collapse) window_flags |= ImGuiWindowFlags_NoCollapse;
+ if (no_nav) window_flags |= ImGuiWindowFlags_NoNav;
+ if (no_background) window_flags |= ImGuiWindowFlags_NoBackground;
+ if (no_bring_to_front) window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus;
+ if (unsaved_document) window_flags |= ImGuiWindowFlags_UnsavedDocument;
+ if (no_close) p_open = NULL; // Don't pass our bool* to Begin
+
+ // We specify a default position/size in case there's no data in the .ini file.
+ // We only do it to make the demo applications a little more welcoming, but typically this isn't required.
+ const ImGuiViewport* main_viewport = ImGui::GetMainViewport();
+ ImGui::SetNextWindowPos(ImVec2(main_viewport->WorkPos.x + 650, main_viewport->WorkPos.y + 20), ImGuiCond_FirstUseEver);
+ ImGui::SetNextWindowSize(ImVec2(550, 680), ImGuiCond_FirstUseEver);
+
+ // Main body of the Demo window starts here.
+ if (!ImGui::Begin("Dear ImGui Demo", p_open, window_flags))
+ {
+ // Early out if the window is collapsed, as an optimization.
+ ImGui::End();
+ return;
+ }
+
+ // Most "big" widgets share a common width settings by default. See 'Demo->Layout->Widgets Width' for details.
+
+ // e.g. Use 2/3 of the space for widgets and 1/3 for labels (right align)
+ //ImGui::PushItemWidth(-ImGui::GetWindowWidth() * 0.35f);
+
+ // e.g. Leave a fixed amount of width for labels (by passing a negative value), the rest goes to widgets.
+ ImGui::PushItemWidth(ImGui::GetFontSize() * -12);
+
+ // Menu Bar
+ if (ImGui::BeginMenuBar())
+ {
+ if (ImGui::BeginMenu("Menu"))
+ {
+ IMGUI_DEMO_MARKER("Menu/File");
+ ShowExampleMenuFile();
+ ImGui::EndMenu();
+ }
+ if (ImGui::BeginMenu("Examples"))
+ {
+ IMGUI_DEMO_MARKER("Menu/Examples");
+ ImGui::MenuItem("Main menu bar", NULL, &show_app_main_menu_bar);
+ ImGui::MenuItem("Console", NULL, &show_app_console);
+ ImGui::MenuItem("Log", NULL, &show_app_log);
+ ImGui::MenuItem("Simple layout", NULL, &show_app_layout);
+ ImGui::MenuItem("Property editor", NULL, &show_app_property_editor);
+ ImGui::MenuItem("Long text display", NULL, &show_app_long_text);
+ ImGui::MenuItem("Auto-resizing window", NULL, &show_app_auto_resize);
+ ImGui::MenuItem("Constrained-resizing window", NULL, &show_app_constrained_resize);
+ ImGui::MenuItem("Simple overlay", NULL, &show_app_simple_overlay);
+ ImGui::MenuItem("Fullscreen window", NULL, &show_app_fullscreen);
+ ImGui::MenuItem("Manipulating window titles", NULL, &show_app_window_titles);
+ ImGui::MenuItem("Custom rendering", NULL, &show_app_custom_rendering);
+ ImGui::MenuItem("Documents", NULL, &show_app_documents);
+ ImGui::EndMenu();
+ }
+ //if (ImGui::MenuItem("MenuItem")) {} // You can also use MenuItem() inside a menu bar!
+ if (ImGui::BeginMenu("Tools"))
+ {
+ IMGUI_DEMO_MARKER("Menu/Tools");
+#ifndef IMGUI_DISABLE_DEBUG_TOOLS
+ const bool has_debug_tools = true;
+#else
+ const bool has_debug_tools = false;
+#endif
+ ImGui::MenuItem("Metrics/Debugger", NULL, &show_app_metrics, has_debug_tools);
+ ImGui::MenuItem("Debug Log", NULL, &show_app_debug_log, has_debug_tools);
+ ImGui::MenuItem("Stack Tool", NULL, &show_app_stack_tool, has_debug_tools);
+ ImGui::MenuItem("Style Editor", NULL, &show_app_style_editor);
+ ImGui::MenuItem("About Dear ImGui", NULL, &show_app_about);
+ ImGui::EndMenu();
+ }
+ ImGui::EndMenuBar();
+ }
+
+ ImGui::Text("dear imgui says hello! (%s) (%d)", IMGUI_VERSION, IMGUI_VERSION_NUM);
+ ImGui::Spacing();
+
+ IMGUI_DEMO_MARKER("Help");
+ if (ImGui::CollapsingHeader("Help"))
+ {
+ ImGui::Text("ABOUT THIS DEMO:");
+ ImGui::BulletText("Sections below are demonstrating many aspects of the library.");
+ ImGui::BulletText("The \"Examples\" menu above leads to more demo contents.");
+ ImGui::BulletText("The \"Tools\" menu above gives access to: About Box, Style Editor,\n"
+ "and Metrics/Debugger (general purpose Dear ImGui debugging tool).");
+ ImGui::Separator();
+
+ ImGui::Text("PROGRAMMER GUIDE:");
+ ImGui::BulletText("See the ShowDemoWindow() code in imgui_demo.cpp. <- you are here!");
+ ImGui::BulletText("See comments in imgui.cpp.");
+ ImGui::BulletText("See example applications in the examples/ folder.");
+ ImGui::BulletText("Read the FAQ at http://www.dearimgui.org/faq/");
+ ImGui::BulletText("Set 'io.ConfigFlags |= NavEnableKeyboard' for keyboard controls.");
+ ImGui::BulletText("Set 'io.ConfigFlags |= NavEnableGamepad' for gamepad controls.");
+ ImGui::Separator();
+
+ ImGui::Text("USER GUIDE:");
+ ImGui::ShowUserGuide();
+ }
+
+ IMGUI_DEMO_MARKER("Configuration");
+ if (ImGui::CollapsingHeader("Configuration"))
+ {
+ ImGuiIO& io = ImGui::GetIO();
+
+ if (ImGui::TreeNode("Configuration##2"))
+ {
+ ImGui::CheckboxFlags("io.ConfigFlags: NavEnableKeyboard", &io.ConfigFlags, ImGuiConfigFlags_NavEnableKeyboard);
+ ImGui::SameLine(); HelpMarker("Enable keyboard controls.");
+ ImGui::CheckboxFlags("io.ConfigFlags: NavEnableGamepad", &io.ConfigFlags, ImGuiConfigFlags_NavEnableGamepad);
+ ImGui::SameLine(); HelpMarker("Enable gamepad controls. Require backend to set io.BackendFlags |= ImGuiBackendFlags_HasGamepad.\n\nRead instructions in imgui.cpp for details.");
+ ImGui::CheckboxFlags("io.ConfigFlags: NavEnableSetMousePos", &io.ConfigFlags, ImGuiConfigFlags_NavEnableSetMousePos);
+ ImGui::SameLine(); HelpMarker("Instruct navigation to move the mouse cursor. See comment for ImGuiConfigFlags_NavEnableSetMousePos.");
+ ImGui::CheckboxFlags("io.ConfigFlags: NoMouse", &io.ConfigFlags, ImGuiConfigFlags_NoMouse);
+ if (io.ConfigFlags & ImGuiConfigFlags_NoMouse)
+ {
+ // The "NoMouse" option can get us stuck with a disabled mouse! Let's provide an alternative way to fix it:
+ if (fmodf((float)ImGui::GetTime(), 0.40f) < 0.20f)
+ {
+ ImGui::SameLine();
+ ImGui::Text("<<PRESS SPACE TO DISABLE>>");
+ }
+ if (ImGui::IsKeyPressed(ImGuiKey_Space))
+ io.ConfigFlags &= ~ImGuiConfigFlags_NoMouse;
+ }
+ ImGui::CheckboxFlags("io.ConfigFlags: NoMouseCursorChange", &io.ConfigFlags, ImGuiConfigFlags_NoMouseCursorChange);
+ ImGui::SameLine(); HelpMarker("Instruct backend to not alter mouse cursor shape and visibility.");
+ ImGui::Checkbox("io.ConfigInputTrickleEventQueue", &io.ConfigInputTrickleEventQueue);
+ ImGui::SameLine(); HelpMarker("Enable input queue trickling: some types of events submitted during the same frame (e.g. button down + up) will be spread over multiple frames, improving interactions with low framerates.");
+ ImGui::Checkbox("io.ConfigInputTextCursorBlink", &io.ConfigInputTextCursorBlink);
+ ImGui::SameLine(); HelpMarker("Enable blinking cursor (optional as some users consider it to be distracting).");
+ ImGui::Checkbox("io.ConfigDragClickToInputText", &io.ConfigDragClickToInputText);
+ ImGui::SameLine(); HelpMarker("Enable turning DragXXX widgets into text input with a simple mouse click-release (without moving).");
+ ImGui::Checkbox("io.ConfigWindowsResizeFromEdges", &io.ConfigWindowsResizeFromEdges);
+ ImGui::SameLine(); HelpMarker("Enable resizing of windows from their edges and from the lower-left corner.\nThis requires (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) because it needs mouse cursor feedback.");
+ ImGui::Checkbox("io.ConfigWindowsMoveFromTitleBarOnly", &io.ConfigWindowsMoveFromTitleBarOnly);
+ ImGui::Checkbox("io.MouseDrawCursor", &io.MouseDrawCursor);
+ ImGui::SameLine(); HelpMarker("Instruct Dear ImGui to render a mouse cursor itself. Note that a mouse cursor rendered via your application GPU rendering path will feel more laggy than hardware cursor, but will be more in sync with your other visuals.\n\nSome desktop applications may use both kinds of cursors (e.g. enable software cursor only when resizing/dragging something).");
+ ImGui::Text("Also see Style->Rendering for rendering options.");
+ ImGui::TreePop();
+ ImGui::Separator();
+ }
+
+ IMGUI_DEMO_MARKER("Configuration/Backend Flags");
+ if (ImGui::TreeNode("Backend Flags"))
+ {
+ HelpMarker(
+ "Those flags are set by the backends (imgui_impl_xxx files) to specify their capabilities.\n"
+ "Here we expose them as read-only fields to avoid breaking interactions with your backend.");
+
+ // Make a local copy to avoid modifying actual backend flags.
+ // FIXME: We don't use BeginDisabled() to keep label bright, maybe we need a BeginReadonly() equivalent..
+ ImGuiBackendFlags backend_flags = io.BackendFlags;
+ ImGui::CheckboxFlags("io.BackendFlags: HasGamepad", &backend_flags, ImGuiBackendFlags_HasGamepad);
+ ImGui::CheckboxFlags("io.BackendFlags: HasMouseCursors", &backend_flags, ImGuiBackendFlags_HasMouseCursors);
+ ImGui::CheckboxFlags("io.BackendFlags: HasSetMousePos", &backend_flags, ImGuiBackendFlags_HasSetMousePos);
+ ImGui::CheckboxFlags("io.BackendFlags: RendererHasVtxOffset", &backend_flags, ImGuiBackendFlags_RendererHasVtxOffset);
+ ImGui::TreePop();
+ ImGui::Separator();
+ }
+
+ IMGUI_DEMO_MARKER("Configuration/Style");
+ if (ImGui::TreeNode("Style"))
+ {
+ HelpMarker("The same contents can be accessed in 'Tools->Style Editor' or by calling the ShowStyleEditor() function.");
+ ImGui::ShowStyleEditor();
+ ImGui::TreePop();
+ ImGui::Separator();
+ }
+
+ IMGUI_DEMO_MARKER("Configuration/Capture, Logging");
+ if (ImGui::TreeNode("Capture/Logging"))
+ {
+ HelpMarker(
+ "The logging API redirects all text output so you can easily capture the content of "
+ "a window or a block. Tree nodes can be automatically expanded.\n"
+ "Try opening any of the contents below in this window and then click one of the \"Log To\" button.");
+ ImGui::LogButtons();
+
+ HelpMarker("You can also call ImGui::LogText() to output directly to the log without a visual output.");
+ if (ImGui::Button("Copy \"Hello, world!\" to clipboard"))
+ {
+ ImGui::LogToClipboard();
+ ImGui::LogText("Hello, world!");
+ ImGui::LogFinish();
+ }
+ ImGui::TreePop();
+ }
+ }
+
+ IMGUI_DEMO_MARKER("Window options");
+ if (ImGui::CollapsingHeader("Window options"))
+ {
+ if (ImGui::BeginTable("split", 3))
+ {
+ ImGui::TableNextColumn(); ImGui::Checkbox("No titlebar", &no_titlebar);
+ ImGui::TableNextColumn(); ImGui::Checkbox("No scrollbar", &no_scrollbar);
+ ImGui::TableNextColumn(); ImGui::Checkbox("No menu", &no_menu);
+ ImGui::TableNextColumn(); ImGui::Checkbox("No move", &no_move);
+ ImGui::TableNextColumn(); ImGui::Checkbox("No resize", &no_resize);
+ ImGui::TableNextColumn(); ImGui::Checkbox("No collapse", &no_collapse);
+ ImGui::TableNextColumn(); ImGui::Checkbox("No close", &no_close);
+ ImGui::TableNextColumn(); ImGui::Checkbox("No nav", &no_nav);
+ ImGui::TableNextColumn(); ImGui::Checkbox("No background", &no_background);
+ ImGui::TableNextColumn(); ImGui::Checkbox("No bring to front", &no_bring_to_front);
+ ImGui::TableNextColumn(); ImGui::Checkbox("Unsaved document", &unsaved_document);
+ ImGui::EndTable();
+ }
+ }
+
+ // All demo contents
+ ShowDemoWindowWidgets();
+ ShowDemoWindowLayout();
+ ShowDemoWindowPopups();
+ ShowDemoWindowTables();
+ ShowDemoWindowMisc();
+
+ // End of ShowDemoWindow()
+ ImGui::PopItemWidth();
+ ImGui::End();
+}
+
+static void ShowDemoWindowWidgets()
+{
+ IMGUI_DEMO_MARKER("Widgets");
+ if (!ImGui::CollapsingHeader("Widgets"))
+ return;
+
+ static bool disable_all = false; // The Checkbox for that is inside the "Disabled" section at the bottom
+ if (disable_all)
+ ImGui::BeginDisabled();
+
+ IMGUI_DEMO_MARKER("Widgets/Basic");
+ if (ImGui::TreeNode("Basic"))
+ {
+ IMGUI_DEMO_MARKER("Widgets/Basic/Button");
+ static int clicked = 0;
+ if (ImGui::Button("Button"))
+ clicked++;
+ if (clicked & 1)
+ {
+ ImGui::SameLine();
+ ImGui::Text("Thanks for clicking me!");
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Basic/Checkbox");
+ static bool check = true;
+ ImGui::Checkbox("checkbox", &check);
+
+ IMGUI_DEMO_MARKER("Widgets/Basic/RadioButton");
+ static int e = 0;
+ ImGui::RadioButton("radio a", &e, 0); ImGui::SameLine();
+ ImGui::RadioButton("radio b", &e, 1); ImGui::SameLine();
+ ImGui::RadioButton("radio c", &e, 2);
+
+ // Color buttons, demonstrate using PushID() to add unique identifier in the ID stack, and changing style.
+ IMGUI_DEMO_MARKER("Widgets/Basic/Buttons (Colored)");
+ for (int i = 0; i < 7; i++)
+ {
+ if (i > 0)
+ ImGui::SameLine();
+ ImGui::PushID(i);
+ ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(i / 7.0f, 0.6f, 0.6f));
+ ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(i / 7.0f, 0.7f, 0.7f));
+ ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(i / 7.0f, 0.8f, 0.8f));
+ ImGui::Button("Click");
+ ImGui::PopStyleColor(3);
+ ImGui::PopID();
+ }
+
+ // Use AlignTextToFramePadding() to align text baseline to the baseline of framed widgets elements
+ // (otherwise a Text+SameLine+Button sequence will have the text a little too high by default!)
+ // See 'Demo->Layout->Text Baseline Alignment' for details.
+ ImGui::AlignTextToFramePadding();
+ ImGui::Text("Hold to repeat:");
+ ImGui::SameLine();
+
+ // Arrow buttons with Repeater
+ IMGUI_DEMO_MARKER("Widgets/Basic/Buttons (Repeating)");
+ static int counter = 0;
+ float spacing = ImGui::GetStyle().ItemInnerSpacing.x;
+ ImGui::PushButtonRepeat(true);
+ if (ImGui::ArrowButton("##left", ImGuiDir_Left)) { counter--; }
+ ImGui::SameLine(0.0f, spacing);
+ if (ImGui::ArrowButton("##right", ImGuiDir_Right)) { counter++; }
+ ImGui::PopButtonRepeat();
+ ImGui::SameLine();
+ ImGui::Text("%d", counter);
+
+ IMGUI_DEMO_MARKER("Widgets/Basic/Tooltips");
+ ImGui::Text("Hover over me");
+ if (ImGui::IsItemHovered())
+ ImGui::SetTooltip("I am a tooltip");
+
+ ImGui::SameLine();
+ ImGui::Text("- or me");
+ if (ImGui::IsItemHovered())
+ {
+ ImGui::BeginTooltip();
+ ImGui::Text("I am a fancy tooltip");
+ static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
+ ImGui::PlotLines("Curve", arr, IM_ARRAYSIZE(arr));
+ ImGui::EndTooltip();
+ }
+
+ ImGui::Separator();
+ ImGui::LabelText("label", "Value");
+
+ {
+ // Using the _simplified_ one-liner Combo() api here
+ // See "Combo" section for examples of how to use the more flexible BeginCombo()/EndCombo() api.
+ IMGUI_DEMO_MARKER("Widgets/Basic/Combo");
+ const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIIIIII", "JJJJ", "KKKKKKK" };
+ static int item_current = 0;
+ ImGui::Combo("combo", &item_current, items, IM_ARRAYSIZE(items));
+ ImGui::SameLine(); HelpMarker(
+ "Using the simplified one-liner Combo API here.\nRefer to the \"Combo\" section below for an explanation of how to use the more flexible and general BeginCombo/EndCombo API.");
+ }
+
+ {
+ // To wire InputText() with std::string or any other custom string type,
+ // see the "Text Input > Resize Callback" section of this demo, and the misc/cpp/imgui_stdlib.h file.
+ IMGUI_DEMO_MARKER("Widgets/Basic/InputText");
+ static char str0[128] = "Hello, world!";
+ ImGui::InputText("input text", str0, IM_ARRAYSIZE(str0));
+ ImGui::SameLine(); HelpMarker(
+ "USER:\n"
+ "Hold SHIFT or use mouse to select text.\n"
+ "CTRL+Left/Right to word jump.\n"
+ "CTRL+A or double-click to select all.\n"
+ "CTRL+X,CTRL+C,CTRL+V clipboard.\n"
+ "CTRL+Z,CTRL+Y undo/redo.\n"
+ "ESCAPE to revert.\n\n"
+ "PROGRAMMER:\n"
+ "You can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputText() "
+ "to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example (this is not demonstrated "
+ "in imgui_demo.cpp).");
+
+ static char str1[128] = "";
+ ImGui::InputTextWithHint("input text (w/ hint)", "enter text here", str1, IM_ARRAYSIZE(str1));
+
+ IMGUI_DEMO_MARKER("Widgets/Basic/InputInt, InputFloat");
+ static int i0 = 123;
+ ImGui::InputInt("input int", &i0);
+
+ static float f0 = 0.001f;
+ ImGui::InputFloat("input float", &f0, 0.01f, 1.0f, "%.3f");
+
+ static double d0 = 999999.00000001;
+ ImGui::InputDouble("input double", &d0, 0.01f, 1.0f, "%.8f");
+
+ static float f1 = 1.e10f;
+ ImGui::InputFloat("input scientific", &f1, 0.0f, 0.0f, "%e");
+ ImGui::SameLine(); HelpMarker(
+ "You can input value using the scientific notation,\n"
+ " e.g. \"1e+8\" becomes \"100000000\".");
+
+ static float vec4a[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
+ ImGui::InputFloat3("input float3", vec4a);
+ }
+
+ {
+ IMGUI_DEMO_MARKER("Widgets/Basic/DragInt, DragFloat");
+ static int i1 = 50, i2 = 42;
+ ImGui::DragInt("drag int", &i1, 1);
+ ImGui::SameLine(); HelpMarker(
+ "Click and drag to edit value.\n"
+ "Hold SHIFT/ALT for faster/slower edit.\n"
+ "Double-click or CTRL+click to input value.");
+
+ ImGui::DragInt("drag int 0..100", &i2, 1, 0, 100, "%d%%", ImGuiSliderFlags_AlwaysClamp);
+
+ static float f1 = 1.00f, f2 = 0.0067f;
+ ImGui::DragFloat("drag float", &f1, 0.005f);
+ ImGui::DragFloat("drag small float", &f2, 0.0001f, 0.0f, 0.0f, "%.06f ns");
+ }
+
+ {
+ IMGUI_DEMO_MARKER("Widgets/Basic/SliderInt, SliderFloat");
+ static int i1 = 0;
+ ImGui::SliderInt("slider int", &i1, -1, 3);
+ ImGui::SameLine(); HelpMarker("CTRL+click to input value.");
+
+ static float f1 = 0.123f, f2 = 0.0f;
+ ImGui::SliderFloat("slider float", &f1, 0.0f, 1.0f, "ratio = %.3f");
+ ImGui::SliderFloat("slider float (log)", &f2, -10.0f, 10.0f, "%.4f", ImGuiSliderFlags_Logarithmic);
+
+ IMGUI_DEMO_MARKER("Widgets/Basic/SliderAngle");
+ static float angle = 0.0f;
+ ImGui::SliderAngle("slider angle", &angle);
+
+ // Using the format string to display a name instead of an integer.
+ // Here we completely omit '%d' from the format string, so it'll only display a name.
+ // This technique can also be used with DragInt().
+ IMGUI_DEMO_MARKER("Widgets/Basic/Slider (enum)");
+ enum Element { Element_Fire, Element_Earth, Element_Air, Element_Water, Element_COUNT };
+ static int elem = Element_Fire;
+ const char* elems_names[Element_COUNT] = { "Fire", "Earth", "Air", "Water" };
+ const char* elem_name = (elem >= 0 && elem < Element_COUNT) ? elems_names[elem] : "Unknown";
+ ImGui::SliderInt("slider enum", &elem, 0, Element_COUNT - 1, elem_name);
+ ImGui::SameLine(); HelpMarker("Using the format string parameter to display a name instead of the underlying integer.");
+ }
+
+ {
+ IMGUI_DEMO_MARKER("Widgets/Basic/ColorEdit3, ColorEdit4");
+ static float col1[3] = { 1.0f, 0.0f, 0.2f };
+ static float col2[4] = { 0.4f, 0.7f, 0.0f, 0.5f };
+ ImGui::ColorEdit3("color 1", col1);
+ ImGui::SameLine(); HelpMarker(
+ "Click on the color square to open a color picker.\n"
+ "Click and hold to use drag and drop.\n"
+ "Right-click on the color square to show options.\n"
+ "CTRL+click on individual component to input value.\n");
+
+ ImGui::ColorEdit4("color 2", col2);
+ }
+
+ {
+ // Using the _simplified_ one-liner ListBox() api here
+ // See "List boxes" section for examples of how to use the more flexible BeginListBox()/EndListBox() api.
+ IMGUI_DEMO_MARKER("Widgets/Basic/ListBox");
+ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi", "Mango", "Orange", "Pineapple", "Strawberry", "Watermelon" };
+ static int item_current = 1;
+ ImGui::ListBox("listbox", &item_current, items, IM_ARRAYSIZE(items), 4);
+ ImGui::SameLine(); HelpMarker(
+ "Using the simplified one-liner ListBox API here.\nRefer to the \"List boxes\" section below for an explanation of how to use the more flexible and general BeginListBox/EndListBox API.");
+ }
+
+ ImGui::TreePop();
+ }
+
+ // Testing ImGuiOnceUponAFrame helper.
+ //static ImGuiOnceUponAFrame once;
+ //for (int i = 0; i < 5; i++)
+ // if (once)
+ // ImGui::Text("This will be displayed only once.");
+
+ IMGUI_DEMO_MARKER("Widgets/Trees");
+ if (ImGui::TreeNode("Trees"))
+ {
+ IMGUI_DEMO_MARKER("Widgets/Trees/Basic trees");
+ if (ImGui::TreeNode("Basic trees"))
+ {
+ for (int i = 0; i < 5; i++)
+ {
+ // Use SetNextItemOpen() so set the default state of a node to be open. We could
+ // also use TreeNodeEx() with the ImGuiTreeNodeFlags_DefaultOpen flag to achieve the same thing!
+ if (i == 0)
+ ImGui::SetNextItemOpen(true, ImGuiCond_Once);
+
+ if (ImGui::TreeNode((void*)(intptr_t)i, "Child %d", i))
+ {
+ ImGui::Text("blah blah");
+ ImGui::SameLine();
+ if (ImGui::SmallButton("button")) {}
+ ImGui::TreePop();
+ }
+ }
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Trees/Advanced, with Selectable nodes");
+ if (ImGui::TreeNode("Advanced, with Selectable nodes"))
+ {
+ HelpMarker(
+ "This is a more typical looking tree with selectable nodes.\n"
+ "Click to select, CTRL+Click to toggle, click on arrows or double-click to open.");
+ static ImGuiTreeNodeFlags base_flags = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_SpanAvailWidth;
+ static bool align_label_with_current_x_position = false;
+ static bool test_drag_and_drop = false;
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_OpenOnArrow", &base_flags, ImGuiTreeNodeFlags_OpenOnArrow);
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_OpenOnDoubleClick", &base_flags, ImGuiTreeNodeFlags_OpenOnDoubleClick);
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanAvailWidth", &base_flags, ImGuiTreeNodeFlags_SpanAvailWidth); ImGui::SameLine(); HelpMarker("Extend hit area to all available width instead of allowing more items to be laid out after the node.");
+ ImGui::CheckboxFlags("ImGuiTreeNodeFlags_SpanFullWidth", &base_flags, ImGuiTreeNodeFlags_SpanFullWidth);
+ ImGui::Checkbox("Align label with current X position", &align_label_with_current_x_position);
+ ImGui::Checkbox("Test tree node as drag source", &test_drag_and_drop);
+ ImGui::Text("Hello!");
+ if (align_label_with_current_x_position)
+ ImGui::Unindent(ImGui::GetTreeNodeToLabelSpacing());
+
+ // 'selection_mask' is dumb representation of what may be user-side selection state.
+ // You may retain selection state inside or outside your objects in whatever format you see fit.
+ // 'node_clicked' is temporary storage of what node we have clicked to process selection at the end
+ /// of the loop. May be a pointer to your own node type, etc.
+ static int selection_mask = (1 << 2);
+ int node_clicked = -1;
+ for (int i = 0; i < 6; i++)
+ {
+ // Disable the default "open on single-click behavior" + set Selected flag according to our selection.
+ // To alter selection we use IsItemClicked() && !IsItemToggledOpen(), so clicking on an arrow doesn't alter selection.
+ ImGuiTreeNodeFlags node_flags = base_flags;
+ const bool is_selected = (selection_mask & (1 << i)) != 0;
+ if (is_selected)
+ node_flags |= ImGuiTreeNodeFlags_Selected;
+ if (i < 3)
+ {
+ // Items 0..2 are Tree Node
+ bool node_open = ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Node %d", i);
+ if (ImGui::IsItemClicked() && !ImGui::IsItemToggledOpen())
+ node_clicked = i;
+ if (test_drag_and_drop && ImGui::BeginDragDropSource())
+ {
+ ImGui::SetDragDropPayload("_TREENODE", NULL, 0);
+ ImGui::Text("This is a drag and drop source");
+ ImGui::EndDragDropSource();
+ }
+ if (node_open)
+ {
+ ImGui::BulletText("Blah blah\nBlah Blah");
+ ImGui::TreePop();
+ }
+ }
+ else
+ {
+ // Items 3..5 are Tree Leaves
+ // The only reason we use TreeNode at all is to allow selection of the leaf. Otherwise we can
+ // use BulletText() or advance the cursor by GetTreeNodeToLabelSpacing() and call Text().
+ node_flags |= ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen; // ImGuiTreeNodeFlags_Bullet
+ ImGui::TreeNodeEx((void*)(intptr_t)i, node_flags, "Selectable Leaf %d", i);
+ if (ImGui::IsItemClicked() && !ImGui::IsItemToggledOpen())
+ node_clicked = i;
+ if (test_drag_and_drop && ImGui::BeginDragDropSource())
+ {
+ ImGui::SetDragDropPayload("_TREENODE", NULL, 0);
+ ImGui::Text("This is a drag and drop source");
+ ImGui::EndDragDropSource();
+ }
+ }
+ }
+ if (node_clicked != -1)
+ {
+ // Update selection state
+ // (process outside of tree loop to avoid visual inconsistencies during the clicking frame)
+ if (ImGui::GetIO().KeyCtrl)
+ selection_mask ^= (1 << node_clicked); // CTRL+click to toggle
+ else //if (!(selection_mask & (1 << node_clicked))) // Depending on selection behavior you want, may want to preserve selection when clicking on item that is part of the selection
+ selection_mask = (1 << node_clicked); // Click to single-select
+ }
+ if (align_label_with_current_x_position)
+ ImGui::Indent(ImGui::GetTreeNodeToLabelSpacing());
+ ImGui::TreePop();
+ }
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Collapsing Headers");
+ if (ImGui::TreeNode("Collapsing Headers"))
+ {
+ static bool closable_group = true;
+ ImGui::Checkbox("Show 2nd header", &closable_group);
+ if (ImGui::CollapsingHeader("Header", ImGuiTreeNodeFlags_None))
+ {
+ ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered());
+ for (int i = 0; i < 5; i++)
+ ImGui::Text("Some content %d", i);
+ }
+ if (ImGui::CollapsingHeader("Header with a close button", &closable_group))
+ {
+ ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered());
+ for (int i = 0; i < 5; i++)
+ ImGui::Text("More content %d", i);
+ }
+ /*
+ if (ImGui::CollapsingHeader("Header with a bullet", ImGuiTreeNodeFlags_Bullet))
+ ImGui::Text("IsItemHovered: %d", ImGui::IsItemHovered());
+ */
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Bullets");
+ if (ImGui::TreeNode("Bullets"))
+ {
+ ImGui::BulletText("Bullet point 1");
+ ImGui::BulletText("Bullet point 2\nOn multiple lines");
+ if (ImGui::TreeNode("Tree node"))
+ {
+ ImGui::BulletText("Another bullet point");
+ ImGui::TreePop();
+ }
+ ImGui::Bullet(); ImGui::Text("Bullet point 3 (two calls)");
+ ImGui::Bullet(); ImGui::SmallButton("Button");
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Text");
+ if (ImGui::TreeNode("Text"))
+ {
+ IMGUI_DEMO_MARKER("Widgets/Text/Colored Text");
+ if (ImGui::TreeNode("Colorful Text"))
+ {
+ // Using shortcut. You can use PushStyleColor()/PopStyleColor() for more flexibility.
+ ImGui::TextColored(ImVec4(1.0f, 0.0f, 1.0f, 1.0f), "Pink");
+ ImGui::TextColored(ImVec4(1.0f, 1.0f, 0.0f, 1.0f), "Yellow");
+ ImGui::TextDisabled("Disabled");
+ ImGui::SameLine(); HelpMarker("The TextDisabled color is stored in ImGuiStyle.");
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Text/Word Wrapping");
+ if (ImGui::TreeNode("Word Wrapping"))
+ {
+ // Using shortcut. You can use PushTextWrapPos()/PopTextWrapPos() for more flexibility.
+ ImGui::TextWrapped(
+ "This text should automatically wrap on the edge of the window. The current implementation "
+ "for text wrapping follows simple rules suitable for English and possibly other languages.");
+ ImGui::Spacing();
+
+ static float wrap_width = 200.0f;
+ ImGui::SliderFloat("Wrap width", &wrap_width, -20, 600, "%.0f");
+
+ ImDrawList* draw_list = ImGui::GetWindowDrawList();
+ for (int n = 0; n < 2; n++)
+ {
+ ImGui::Text("Test paragraph %d:", n);
+ ImVec2 pos = ImGui::GetCursorScreenPos();
+ ImVec2 marker_min = ImVec2(pos.x + wrap_width, pos.y);
+ ImVec2 marker_max = ImVec2(pos.x + wrap_width + 10, pos.y + ImGui::GetTextLineHeight());
+ ImGui::PushTextWrapPos(ImGui::GetCursorPos().x + wrap_width);
+ if (n == 0)
+ ImGui::Text("The lazy dog is a good dog. This paragraph should fit within %.0f pixels. Testing a 1 character word. The quick brown fox jumps over the lazy dog.", wrap_width);
+ else
+ ImGui::Text("aaaaaaaa bbbbbbbb, c cccccccc,dddddddd. d eeeeeeee ffffffff. gggggggg!hhhhhhhh");
+
+ // Draw actual text bounding box, following by marker of our expected limit (should not overlap!)
+ draw_list->AddRect(ImGui::GetItemRectMin(), ImGui::GetItemRectMax(), IM_COL32(255, 255, 0, 255));
+ draw_list->AddRectFilled(marker_min, marker_max, IM_COL32(255, 0, 255, 255));
+ ImGui::PopTextWrapPos();
+ }
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Text/UTF-8 Text");
+ if (ImGui::TreeNode("UTF-8 Text"))
+ {
+ // UTF-8 test with Japanese characters
+ // (Needs a suitable font? Try "Google Noto" or "Arial Unicode". See docs/FONTS.md for details.)
+ // - From C++11 you can use the u8"my text" syntax to encode literal strings as UTF-8
+ // - For earlier compiler, you may be able to encode your sources as UTF-8 (e.g. in Visual Studio, you
+ // can save your source files as 'UTF-8 without signature').
+ // - FOR THIS DEMO FILE ONLY, BECAUSE WE WANT TO SUPPORT OLD COMPILERS, WE ARE *NOT* INCLUDING RAW UTF-8
+ // CHARACTERS IN THIS SOURCE FILE. Instead we are encoding a few strings with hexadecimal constants.
+ // Don't do this in your application! Please use u8"text in any language" in your application!
+ // Note that characters values are preserved even by InputText() if the font cannot be displayed,
+ // so you can safely copy & paste garbled characters into another application.
+ ImGui::TextWrapped(
+ "CJK text will only appears if the font was loaded with the appropriate CJK character ranges. "
+ "Call io.Fonts->AddFontFromFileTTF() manually to load extra character ranges. "
+ "Read docs/FONTS.md for details.");
+ ImGui::Text("Hiragana: \xe3\x81\x8b\xe3\x81\x8d\xe3\x81\x8f\xe3\x81\x91\xe3\x81\x93 (kakikukeko)"); // Normally we would use u8"blah blah" with the proper characters directly in the string.
+ ImGui::Text("Kanjis: \xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e (nihongo)");
+ static char buf[32] = "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e";
+ //static char buf[32] = u8"NIHONGO"; // <- this is how you would write it with C++11, using real kanjis
+ ImGui::InputText("UTF-8 input", buf, IM_ARRAYSIZE(buf));
+ ImGui::TreePop();
+ }
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Images");
+ if (ImGui::TreeNode("Images"))
+ {
+ ImGuiIO& io = ImGui::GetIO();
+ ImGui::TextWrapped(
+ "Below we are displaying the font texture (which is the only texture we have access to in this demo). "
+ "Use the 'ImTextureID' type as storage to pass pointers or identifier to your own texture data. "
+ "Hover the texture for a zoomed view!");
+
+ // Below we are displaying the font texture because it is the only texture we have access to inside the demo!
+ // Remember that ImTextureID is just storage for whatever you want it to be. It is essentially a value that
+ // will be passed to the rendering backend via the ImDrawCmd structure.
+ // If you use one of the default imgui_impl_XXXX.cpp rendering backend, they all have comments at the top
+ // of their respective source file to specify what they expect to be stored in ImTextureID, for example:
+ // - The imgui_impl_dx11.cpp renderer expect a 'ID3D11ShaderResourceView*' pointer
+ // - The imgui_impl_opengl3.cpp renderer expect a GLuint OpenGL texture identifier, etc.
+ // More:
+ // - If you decided that ImTextureID = MyEngineTexture*, then you can pass your MyEngineTexture* pointers
+ // to ImGui::Image(), and gather width/height through your own functions, etc.
+ // - You can use ShowMetricsWindow() to inspect the draw data that are being passed to your renderer,
+ // it will help you debug issues if you are confused about it.
+ // - Consider using the lower-level ImDrawList::AddImage() API, via ImGui::GetWindowDrawList()->AddImage().
+ // - Read https://github.com/ocornut/imgui/blob/master/docs/FAQ.md
+ // - Read https://github.com/ocornut/imgui/wiki/Image-Loading-and-Displaying-Examples
+ ImTextureID my_tex_id = io.Fonts->TexID;
+ float my_tex_w = (float)io.Fonts->TexWidth;
+ float my_tex_h = (float)io.Fonts->TexHeight;
+ {
+ ImGui::Text("%.0fx%.0f", my_tex_w, my_tex_h);
+ ImVec2 pos = ImGui::GetCursorScreenPos();
+ ImVec2 uv_min = ImVec2(0.0f, 0.0f); // Top-left
+ ImVec2 uv_max = ImVec2(1.0f, 1.0f); // Lower-right
+ ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); // No tint
+ ImVec4 border_col = ImVec4(1.0f, 1.0f, 1.0f, 0.5f); // 50% opaque white
+ ImGui::Image(my_tex_id, ImVec2(my_tex_w, my_tex_h), uv_min, uv_max, tint_col, border_col);
+ if (ImGui::IsItemHovered())
+ {
+ ImGui::BeginTooltip();
+ float region_sz = 32.0f;
+ float region_x = io.MousePos.x - pos.x - region_sz * 0.5f;
+ float region_y = io.MousePos.y - pos.y - region_sz * 0.5f;
+ float zoom = 4.0f;
+ if (region_x < 0.0f) { region_x = 0.0f; }
+ else if (region_x > my_tex_w - region_sz) { region_x = my_tex_w - region_sz; }
+ if (region_y < 0.0f) { region_y = 0.0f; }
+ else if (region_y > my_tex_h - region_sz) { region_y = my_tex_h - region_sz; }
+ ImGui::Text("Min: (%.2f, %.2f)", region_x, region_y);
+ ImGui::Text("Max: (%.2f, %.2f)", region_x + region_sz, region_y + region_sz);
+ ImVec2 uv0 = ImVec2((region_x) / my_tex_w, (region_y) / my_tex_h);
+ ImVec2 uv1 = ImVec2((region_x + region_sz) / my_tex_w, (region_y + region_sz) / my_tex_h);
+ ImGui::Image(my_tex_id, ImVec2(region_sz * zoom, region_sz * zoom), uv0, uv1, tint_col, border_col);
+ ImGui::EndTooltip();
+ }
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Images/Textured buttons");
+ ImGui::TextWrapped("And now some textured buttons..");
+ static int pressed_count = 0;
+ for (int i = 0; i < 8; i++)
+ {
+ ImGui::PushID(i);
+ int frame_padding = -1 + i; // -1 == uses default padding (style.FramePadding)
+ ImVec2 size = ImVec2(32.0f, 32.0f); // Size of the image we want to make visible
+ ImVec2 uv0 = ImVec2(0.0f, 0.0f); // UV coordinates for lower-left
+ ImVec2 uv1 = ImVec2(32.0f / my_tex_w, 32.0f / my_tex_h);// UV coordinates for (32,32) in our texture
+ ImVec4 bg_col = ImVec4(0.0f, 0.0f, 0.0f, 1.0f); // Black background
+ ImVec4 tint_col = ImVec4(1.0f, 1.0f, 1.0f, 1.0f); // No tint
+ if (ImGui::ImageButton(my_tex_id, size, uv0, uv1, frame_padding, bg_col, tint_col))
+ pressed_count += 1;
+ ImGui::PopID();
+ ImGui::SameLine();
+ }
+ ImGui::NewLine();
+ ImGui::Text("Pressed %d times.", pressed_count);
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Combo");
+ if (ImGui::TreeNode("Combo"))
+ {
+ // Expose flags as checkbox for the demo
+ static ImGuiComboFlags flags = 0;
+ ImGui::CheckboxFlags("ImGuiComboFlags_PopupAlignLeft", &flags, ImGuiComboFlags_PopupAlignLeft);
+ ImGui::SameLine(); HelpMarker("Only makes a difference if the popup is larger than the combo");
+ if (ImGui::CheckboxFlags("ImGuiComboFlags_NoArrowButton", &flags, ImGuiComboFlags_NoArrowButton))
+ flags &= ~ImGuiComboFlags_NoPreview; // Clear the other flag, as we cannot combine both
+ if (ImGui::CheckboxFlags("ImGuiComboFlags_NoPreview", &flags, ImGuiComboFlags_NoPreview))
+ flags &= ~ImGuiComboFlags_NoArrowButton; // Clear the other flag, as we cannot combine both
+
+ // Using the generic BeginCombo() API, you have full control over how to display the combo contents.
+ // (your selection data could be an index, a pointer to the object, an id for the object, a flag intrusively
+ // stored in the object itself, etc.)
+ const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" };
+ static int item_current_idx = 0; // Here we store our selection data as an index.
+ const char* combo_preview_value = items[item_current_idx]; // Pass in the preview value visible before opening the combo (it could be anything)
+ if (ImGui::BeginCombo("combo 1", combo_preview_value, flags))
+ {
+ for (int n = 0; n < IM_ARRAYSIZE(items); n++)
+ {
+ const bool is_selected = (item_current_idx == n);
+ if (ImGui::Selectable(items[n], is_selected))
+ item_current_idx = n;
+
+ // Set the initial focus when opening the combo (scrolling + keyboard navigation focus)
+ if (is_selected)
+ ImGui::SetItemDefaultFocus();
+ }
+ ImGui::EndCombo();
+ }
+
+ // Simplified one-liner Combo() API, using values packed in a single constant string
+ // This is a convenience for when the selection set is small and known at compile-time.
+ static int item_current_2 = 0;
+ ImGui::Combo("combo 2 (one-liner)", &item_current_2, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
+
+ // Simplified one-liner Combo() using an array of const char*
+ // This is not very useful (may obsolete): prefer using BeginCombo()/EndCombo() for full control.
+ static int item_current_3 = -1; // If the selection isn't within 0..count, Combo won't display a preview
+ ImGui::Combo("combo 3 (array)", &item_current_3, items, IM_ARRAYSIZE(items));
+
+ // Simplified one-liner Combo() using an accessor function
+ struct Funcs { static bool ItemGetter(void* data, int n, const char** out_str) { *out_str = ((const char**)data)[n]; return true; } };
+ static int item_current_4 = 0;
+ ImGui::Combo("combo 4 (function)", &item_current_4, &Funcs::ItemGetter, items, IM_ARRAYSIZE(items));
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/List Boxes");
+ if (ImGui::TreeNode("List boxes"))
+ {
+ // Using the generic BeginListBox() API, you have full control over how to display the combo contents.
+ // (your selection data could be an index, a pointer to the object, an id for the object, a flag intrusively
+ // stored in the object itself, etc.)
+ const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD", "EEEE", "FFFF", "GGGG", "HHHH", "IIII", "JJJJ", "KKKK", "LLLLLLL", "MMMM", "OOOOOOO" };
+ static int item_current_idx = 0; // Here we store our selection data as an index.
+ if (ImGui::BeginListBox("listbox 1"))
+ {
+ for (int n = 0; n < IM_ARRAYSIZE(items); n++)
+ {
+ const bool is_selected = (item_current_idx == n);
+ if (ImGui::Selectable(items[n], is_selected))
+ item_current_idx = n;
+
+ // Set the initial focus when opening the combo (scrolling + keyboard navigation focus)
+ if (is_selected)
+ ImGui::SetItemDefaultFocus();
+ }
+ ImGui::EndListBox();
+ }
+
+ // Custom size: use all width, 5 items tall
+ ImGui::Text("Full-width:");
+ if (ImGui::BeginListBox("##listbox 2", ImVec2(-FLT_MIN, 5 * ImGui::GetTextLineHeightWithSpacing())))
+ {
+ for (int n = 0; n < IM_ARRAYSIZE(items); n++)
+ {
+ const bool is_selected = (item_current_idx == n);
+ if (ImGui::Selectable(items[n], is_selected))
+ item_current_idx = n;
+
+ // Set the initial focus when opening the combo (scrolling + keyboard navigation focus)
+ if (is_selected)
+ ImGui::SetItemDefaultFocus();
+ }
+ ImGui::EndListBox();
+ }
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Selectables");
+ if (ImGui::TreeNode("Selectables"))
+ {
+ // Selectable() has 2 overloads:
+ // - The one taking "bool selected" as a read-only selection information.
+ // When Selectable() has been clicked it returns true and you can alter selection state accordingly.
+ // - The one taking "bool* p_selected" as a read-write selection information (convenient in some cases)
+ // The earlier is more flexible, as in real application your selection may be stored in many different ways
+ // and not necessarily inside a bool value (e.g. in flags within objects, as an external list, etc).
+ IMGUI_DEMO_MARKER("Widgets/Selectables/Basic");
+ if (ImGui::TreeNode("Basic"))
+ {
+ static bool selection[5] = { false, true, false, false, false };
+ ImGui::Selectable("1. I am selectable", &selection[0]);
+ ImGui::Selectable("2. I am selectable", &selection[1]);
+ ImGui::Text("(I am not selectable)");
+ ImGui::Selectable("4. I am selectable", &selection[3]);
+ if (ImGui::Selectable("5. I am double clickable", selection[4], ImGuiSelectableFlags_AllowDoubleClick))
+ if (ImGui::IsMouseDoubleClicked(0))
+ selection[4] = !selection[4];
+ ImGui::TreePop();
+ }
+ IMGUI_DEMO_MARKER("Widgets/Selectables/Single Selection");
+ if (ImGui::TreeNode("Selection State: Single Selection"))
+ {
+ static int selected = -1;
+ for (int n = 0; n < 5; n++)
+ {
+ char buf[32];
+ sprintf(buf, "Object %d", n);
+ if (ImGui::Selectable(buf, selected == n))
+ selected = n;
+ }
+ ImGui::TreePop();
+ }
+ IMGUI_DEMO_MARKER("Widgets/Selectables/Multiple Selection");
+ if (ImGui::TreeNode("Selection State: Multiple Selection"))
+ {
+ HelpMarker("Hold CTRL and click to select multiple items.");
+ static bool selection[5] = { false, false, false, false, false };
+ for (int n = 0; n < 5; n++)
+ {
+ char buf[32];
+ sprintf(buf, "Object %d", n);
+ if (ImGui::Selectable(buf, selection[n]))
+ {
+ if (!ImGui::GetIO().KeyCtrl) // Clear selection when CTRL is not held
+ memset(selection, 0, sizeof(selection));
+ selection[n] ^= 1;
+ }
+ }
+ ImGui::TreePop();
+ }
+ IMGUI_DEMO_MARKER("Widgets/Selectables/Rendering more text into the same line");
+ if (ImGui::TreeNode("Rendering more text into the same line"))
+ {
+ // Using the Selectable() override that takes "bool* p_selected" parameter,
+ // this function toggle your bool value automatically.
+ static bool selected[3] = { false, false, false };
+ ImGui::Selectable("main.c", &selected[0]); ImGui::SameLine(300); ImGui::Text(" 2,345 bytes");
+ ImGui::Selectable("Hello.cpp", &selected[1]); ImGui::SameLine(300); ImGui::Text("12,345 bytes");
+ ImGui::Selectable("Hello.h", &selected[2]); ImGui::SameLine(300); ImGui::Text(" 2,345 bytes");
+ ImGui::TreePop();
+ }
+ IMGUI_DEMO_MARKER("Widgets/Selectables/In columns");
+ if (ImGui::TreeNode("In columns"))
+ {
+ static bool selected[10] = {};
+
+ if (ImGui::BeginTable("split1", 3, ImGuiTableFlags_Resizable | ImGuiTableFlags_NoSavedSettings | ImGuiTableFlags_Borders))
+ {
+ for (int i = 0; i < 10; i++)
+ {
+ char label[32];
+ sprintf(label, "Item %d", i);
+ ImGui::TableNextColumn();
+ ImGui::Selectable(label, &selected[i]); // FIXME-TABLE: Selection overlap
+ }
+ ImGui::EndTable();
+ }
+ ImGui::Spacing();
+ if (ImGui::BeginTable("split2", 3, ImGuiTableFlags_Resizable | ImGuiTableFlags_NoSavedSettings | ImGuiTableFlags_Borders))
+ {
+ for (int i = 0; i < 10; i++)
+ {
+ char label[32];
+ sprintf(label, "Item %d", i);
+ ImGui::TableNextRow();
+ ImGui::TableNextColumn();
+ ImGui::Selectable(label, &selected[i], ImGuiSelectableFlags_SpanAllColumns);
+ ImGui::TableNextColumn();
+ ImGui::Text("Some other contents");
+ ImGui::TableNextColumn();
+ ImGui::Text("123456");
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+ IMGUI_DEMO_MARKER("Widgets/Selectables/Grid");
+ if (ImGui::TreeNode("Grid"))
+ {
+ static char selected[4][4] = { { 1, 0, 0, 0 }, { 0, 1, 0, 0 }, { 0, 0, 1, 0 }, { 0, 0, 0, 1 } };
+
+ // Add in a bit of silly fun...
+ const float time = (float)ImGui::GetTime();
+ const bool winning_state = memchr(selected, 0, sizeof(selected)) == NULL; // If all cells are selected...
+ if (winning_state)
+ ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, ImVec2(0.5f + 0.5f * cosf(time * 2.0f), 0.5f + 0.5f * sinf(time * 3.0f)));
+
+ for (int y = 0; y < 4; y++)
+ for (int x = 0; x < 4; x++)
+ {
+ if (x > 0)
+ ImGui::SameLine();
+ ImGui::PushID(y * 4 + x);
+ if (ImGui::Selectable("Sailor", selected[y][x] != 0, 0, ImVec2(50, 50)))
+ {
+ // Toggle clicked cell + toggle neighbors
+ selected[y][x] ^= 1;
+ if (x > 0) { selected[y][x - 1] ^= 1; }
+ if (x < 3) { selected[y][x + 1] ^= 1; }
+ if (y > 0) { selected[y - 1][x] ^= 1; }
+ if (y < 3) { selected[y + 1][x] ^= 1; }
+ }
+ ImGui::PopID();
+ }
+
+ if (winning_state)
+ ImGui::PopStyleVar();
+ ImGui::TreePop();
+ }
+ IMGUI_DEMO_MARKER("Widgets/Selectables/Alignment");
+ if (ImGui::TreeNode("Alignment"))
+ {
+ HelpMarker(
+ "By default, Selectables uses style.SelectableTextAlign but it can be overridden on a per-item "
+ "basis using PushStyleVar(). You'll probably want to always keep your default situation to "
+ "left-align otherwise it becomes difficult to layout multiple items on a same line");
+ static bool selected[3 * 3] = { true, false, true, false, true, false, true, false, true };
+ for (int y = 0; y < 3; y++)
+ {
+ for (int x = 0; x < 3; x++)
+ {
+ ImVec2 alignment = ImVec2((float)x / 2.0f, (float)y / 2.0f);
+ char name[32];
+ sprintf(name, "(%.1f,%.1f)", alignment.x, alignment.y);
+ if (x > 0) ImGui::SameLine();
+ ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, alignment);
+ ImGui::Selectable(name, &selected[3 * y + x], ImGuiSelectableFlags_None, ImVec2(80, 80));
+ ImGui::PopStyleVar();
+ }
+ }
+ ImGui::TreePop();
+ }
+ ImGui::TreePop();
+ }
+
+ // To wire InputText() with std::string or any other custom string type,
+ // see the "Text Input > Resize Callback" section of this demo, and the misc/cpp/imgui_stdlib.h file.
+ IMGUI_DEMO_MARKER("Widgets/Text Input");
+ if (ImGui::TreeNode("Text Input"))
+ {
+ IMGUI_DEMO_MARKER("Widgets/Text Input/Multi-line Text Input");
+ if (ImGui::TreeNode("Multi-line Text Input"))
+ {
+ // Note: we are using a fixed-sized buffer for simplicity here. See ImGuiInputTextFlags_CallbackResize
+ // and the code in misc/cpp/imgui_stdlib.h for how to setup InputText() for dynamically resizing strings.
+ static char text[1024 * 16] =
+ "/*\n"
+ " The Pentium F00F bug, shorthand for F0 0F C7 C8,\n"
+ " the hexadecimal encoding of one offending instruction,\n"
+ " more formally, the invalid operand with locked CMPXCHG8B\n"
+ " instruction bug, is a design flaw in the majority of\n"
+ " Intel Pentium, Pentium MMX, and Pentium OverDrive\n"
+ " processors (all in the P5 microarchitecture).\n"
+ "*/\n\n"
+ "label:\n"
+ "\tlock cmpxchg8b eax\n";
+
+ static ImGuiInputTextFlags flags = ImGuiInputTextFlags_AllowTabInput;
+ HelpMarker("You can use the ImGuiInputTextFlags_CallbackResize facility if you need to wire InputTextMultiline() to a dynamic string type. See misc/cpp/imgui_stdlib.h for an example. (This is not demonstrated in imgui_demo.cpp because we don't want to include <string> in here)");
+ ImGui::CheckboxFlags("ImGuiInputTextFlags_ReadOnly", &flags, ImGuiInputTextFlags_ReadOnly);
+ ImGui::CheckboxFlags("ImGuiInputTextFlags_AllowTabInput", &flags, ImGuiInputTextFlags_AllowTabInput);
+ ImGui::CheckboxFlags("ImGuiInputTextFlags_CtrlEnterForNewLine", &flags, ImGuiInputTextFlags_CtrlEnterForNewLine);
+ ImGui::InputTextMultiline("##source", text, IM_ARRAYSIZE(text), ImVec2(-FLT_MIN, ImGui::GetTextLineHeight() * 16), flags);
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Text Input/Filtered Text Input");
+ if (ImGui::TreeNode("Filtered Text Input"))
+ {
+ struct TextFilters
+ {
+ // Return 0 (pass) if the character is 'i' or 'm' or 'g' or 'u' or 'i'
+ static int FilterImGuiLetters(ImGuiInputTextCallbackData* data)
+ {
+ if (data->EventChar < 256 && strchr("imgui", (char)data->EventChar))
+ return 0;
+ return 1;
+ }
+ };
+
+ static char buf1[64] = ""; ImGui::InputText("default", buf1, 64);
+ static char buf2[64] = ""; ImGui::InputText("decimal", buf2, 64, ImGuiInputTextFlags_CharsDecimal);
+ static char buf3[64] = ""; ImGui::InputText("hexadecimal", buf3, 64, ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase);
+ static char buf4[64] = ""; ImGui::InputText("uppercase", buf4, 64, ImGuiInputTextFlags_CharsUppercase);
+ static char buf5[64] = ""; ImGui::InputText("no blank", buf5, 64, ImGuiInputTextFlags_CharsNoBlank);
+ static char buf6[64] = ""; ImGui::InputText("\"imgui\" letters", buf6, 64, ImGuiInputTextFlags_CallbackCharFilter, TextFilters::FilterImGuiLetters);
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Text Input/Password input");
+ if (ImGui::TreeNode("Password Input"))
+ {
+ static char password[64] = "password123";
+ ImGui::InputText("password", password, IM_ARRAYSIZE(password), ImGuiInputTextFlags_Password);
+ ImGui::SameLine(); HelpMarker("Display all characters as '*'.\nDisable clipboard cut and copy.\nDisable logging.\n");
+ ImGui::InputTextWithHint("password (w/ hint)", "<password>", password, IM_ARRAYSIZE(password), ImGuiInputTextFlags_Password);
+ ImGui::InputText("password (clear)", password, IM_ARRAYSIZE(password));
+ ImGui::TreePop();
+ }
+
+ if (ImGui::TreeNode("Completion, History, Edit Callbacks"))
+ {
+ struct Funcs
+ {
+ static int MyCallback(ImGuiInputTextCallbackData* data)
+ {
+ if (data->EventFlag == ImGuiInputTextFlags_CallbackCompletion)
+ {
+ data->InsertChars(data->CursorPos, "..");
+ }
+ else if (data->EventFlag == ImGuiInputTextFlags_CallbackHistory)
+ {
+ if (data->EventKey == ImGuiKey_UpArrow)
+ {
+ data->DeleteChars(0, data->BufTextLen);
+ data->InsertChars(0, "Pressed Up!");
+ data->SelectAll();
+ }
+ else if (data->EventKey == ImGuiKey_DownArrow)
+ {
+ data->DeleteChars(0, data->BufTextLen);
+ data->InsertChars(0, "Pressed Down!");
+ data->SelectAll();
+ }
+ }
+ else if (data->EventFlag == ImGuiInputTextFlags_CallbackEdit)
+ {
+ // Toggle casing of first character
+ char c = data->Buf[0];
+ if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) data->Buf[0] ^= 32;
+ data->BufDirty = true;
+
+ // Increment a counter
+ int* p_int = (int*)data->UserData;
+ *p_int = *p_int + 1;
+ }
+ return 0;
+ }
+ };
+ static char buf1[64];
+ ImGui::InputText("Completion", buf1, 64, ImGuiInputTextFlags_CallbackCompletion, Funcs::MyCallback);
+ ImGui::SameLine(); HelpMarker("Here we append \"..\" each time Tab is pressed. See 'Examples>Console' for a more meaningful demonstration of using this callback.");
+
+ static char buf2[64];
+ ImGui::InputText("History", buf2, 64, ImGuiInputTextFlags_CallbackHistory, Funcs::MyCallback);
+ ImGui::SameLine(); HelpMarker("Here we replace and select text each time Up/Down are pressed. See 'Examples>Console' for a more meaningful demonstration of using this callback.");
+
+ static char buf3[64];
+ static int edit_count = 0;
+ ImGui::InputText("Edit", buf3, 64, ImGuiInputTextFlags_CallbackEdit, Funcs::MyCallback, (void*)&edit_count);
+ ImGui::SameLine(); HelpMarker("Here we toggle the casing of the first character on every edits + count edits.");
+ ImGui::SameLine(); ImGui::Text("(%d)", edit_count);
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Text Input/Resize Callback");
+ if (ImGui::TreeNode("Resize Callback"))
+ {
+ // To wire InputText() with std::string or any other custom string type,
+ // you can use the ImGuiInputTextFlags_CallbackResize flag + create a custom ImGui::InputText() wrapper
+ // using your preferred type. See misc/cpp/imgui_stdlib.h for an implementation of this using std::string.
+ HelpMarker(
+ "Using ImGuiInputTextFlags_CallbackResize to wire your custom string type to InputText().\n\n"
+ "See misc/cpp/imgui_stdlib.h for an implementation of this for std::string.");
+ struct Funcs
+ {
+ static int MyResizeCallback(ImGuiInputTextCallbackData* data)
+ {
+ if (data->EventFlag == ImGuiInputTextFlags_CallbackResize)
+ {
+ ImVector<char>* my_str = (ImVector<char>*)data->UserData;
+ IM_ASSERT(my_str->begin() == data->Buf);
+ my_str->resize(data->BufSize); // NB: On resizing calls, generally data->BufSize == data->BufTextLen + 1
+ data->Buf = my_str->begin();
+ }
+ return 0;
+ }
+
+ // Note: Because ImGui:: is a namespace you would typically add your own function into the namespace.
+ // For example, you code may declare a function 'ImGui::InputText(const char* label, MyString* my_str)'
+ static bool MyInputTextMultiline(const char* label, ImVector<char>* my_str, const ImVec2& size = ImVec2(0, 0), ImGuiInputTextFlags flags = 0)
+ {
+ IM_ASSERT((flags & ImGuiInputTextFlags_CallbackResize) == 0);
+ return ImGui::InputTextMultiline(label, my_str->begin(), (size_t)my_str->size(), size, flags | ImGuiInputTextFlags_CallbackResize, Funcs::MyResizeCallback, (void*)my_str);
+ }
+ };
+
+ // For this demo we are using ImVector as a string container.
+ // Note that because we need to store a terminating zero character, our size/capacity are 1 more
+ // than usually reported by a typical string class.
+ static ImVector<char> my_str;
+ if (my_str.empty())
+ my_str.push_back(0);
+ Funcs::MyInputTextMultiline("##MyStr", &my_str, ImVec2(-FLT_MIN, ImGui::GetTextLineHeight() * 16));
+ ImGui::Text("Data: %p\nSize: %d\nCapacity: %d", (void*)my_str.begin(), my_str.size(), my_str.capacity());
+ ImGui::TreePop();
+ }
+
+ ImGui::TreePop();
+ }
+
+ // Tabs
+ IMGUI_DEMO_MARKER("Widgets/Tabs");
+ if (ImGui::TreeNode("Tabs"))
+ {
+ IMGUI_DEMO_MARKER("Widgets/Tabs/Basic");
+ if (ImGui::TreeNode("Basic"))
+ {
+ ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_None;
+ if (ImGui::BeginTabBar("MyTabBar", tab_bar_flags))
+ {
+ if (ImGui::BeginTabItem("Avocado"))
+ {
+ ImGui::Text("This is the Avocado tab!\nblah blah blah blah blah");
+ ImGui::EndTabItem();
+ }
+ if (ImGui::BeginTabItem("Broccoli"))
+ {
+ ImGui::Text("This is the Broccoli tab!\nblah blah blah blah blah");
+ ImGui::EndTabItem();
+ }
+ if (ImGui::BeginTabItem("Cucumber"))
+ {
+ ImGui::Text("This is the Cucumber tab!\nblah blah blah blah blah");
+ ImGui::EndTabItem();
+ }
+ ImGui::EndTabBar();
+ }
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Tabs/Advanced & Close Button");
+ if (ImGui::TreeNode("Advanced & Close Button"))
+ {
+ // Expose a couple of the available flags. In most cases you may just call BeginTabBar() with no flags (0).
+ static ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_Reorderable;
+ ImGui::CheckboxFlags("ImGuiTabBarFlags_Reorderable", &tab_bar_flags, ImGuiTabBarFlags_Reorderable);
+ ImGui::CheckboxFlags("ImGuiTabBarFlags_AutoSelectNewTabs", &tab_bar_flags, ImGuiTabBarFlags_AutoSelectNewTabs);
+ ImGui::CheckboxFlags("ImGuiTabBarFlags_TabListPopupButton", &tab_bar_flags, ImGuiTabBarFlags_TabListPopupButton);
+ ImGui::CheckboxFlags("ImGuiTabBarFlags_NoCloseWithMiddleMouseButton", &tab_bar_flags, ImGuiTabBarFlags_NoCloseWithMiddleMouseButton);
+ if ((tab_bar_flags & ImGuiTabBarFlags_FittingPolicyMask_) == 0)
+ tab_bar_flags |= ImGuiTabBarFlags_FittingPolicyDefault_;
+ if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyResizeDown", &tab_bar_flags, ImGuiTabBarFlags_FittingPolicyResizeDown))
+ tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyResizeDown);
+ if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyScroll", &tab_bar_flags, ImGuiTabBarFlags_FittingPolicyScroll))
+ tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyScroll);
+
+ // Tab Bar
+ const char* names[4] = { "Artichoke", "Beetroot", "Celery", "Daikon" };
+ static bool opened[4] = { true, true, true, true }; // Persistent user state
+ for (int n = 0; n < IM_ARRAYSIZE(opened); n++)
+ {
+ if (n > 0) { ImGui::SameLine(); }
+ ImGui::Checkbox(names[n], &opened[n]);
+ }
+
+ // Passing a bool* to BeginTabItem() is similar to passing one to Begin():
+ // the underlying bool will be set to false when the tab is closed.
+ if (ImGui::BeginTabBar("MyTabBar", tab_bar_flags))
+ {
+ for (int n = 0; n < IM_ARRAYSIZE(opened); n++)
+ if (opened[n] && ImGui::BeginTabItem(names[n], &opened[n], ImGuiTabItemFlags_None))
+ {
+ ImGui::Text("This is the %s tab!", names[n]);
+ if (n & 1)
+ ImGui::Text("I am an odd tab.");
+ ImGui::EndTabItem();
+ }
+ ImGui::EndTabBar();
+ }
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Tabs/TabItemButton & Leading-Trailing flags");
+ if (ImGui::TreeNode("TabItemButton & Leading/Trailing flags"))
+ {
+ static ImVector<int> active_tabs;
+ static int next_tab_id = 0;
+ if (next_tab_id == 0) // Initialize with some default tabs
+ for (int i = 0; i < 3; i++)
+ active_tabs.push_back(next_tab_id++);
+
+ // TabItemButton() and Leading/Trailing flags are distinct features which we will demo together.
+ // (It is possible to submit regular tabs with Leading/Trailing flags, or TabItemButton tabs without Leading/Trailing flags...
+ // but they tend to make more sense together)
+ static bool show_leading_button = true;
+ static bool show_trailing_button = true;
+ ImGui::Checkbox("Show Leading TabItemButton()", &show_leading_button);
+ ImGui::Checkbox("Show Trailing TabItemButton()", &show_trailing_button);
+
+ // Expose some other flags which are useful to showcase how they interact with Leading/Trailing tabs
+ static ImGuiTabBarFlags tab_bar_flags = ImGuiTabBarFlags_AutoSelectNewTabs | ImGuiTabBarFlags_Reorderable | ImGuiTabBarFlags_FittingPolicyResizeDown;
+ ImGui::CheckboxFlags("ImGuiTabBarFlags_TabListPopupButton", &tab_bar_flags, ImGuiTabBarFlags_TabListPopupButton);
+ if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyResizeDown", &tab_bar_flags, ImGuiTabBarFlags_FittingPolicyResizeDown))
+ tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyResizeDown);
+ if (ImGui::CheckboxFlags("ImGuiTabBarFlags_FittingPolicyScroll", &tab_bar_flags, ImGuiTabBarFlags_FittingPolicyScroll))
+ tab_bar_flags &= ~(ImGuiTabBarFlags_FittingPolicyMask_ ^ ImGuiTabBarFlags_FittingPolicyScroll);
+
+ if (ImGui::BeginTabBar("MyTabBar", tab_bar_flags))
+ {
+ // Demo a Leading TabItemButton(): click the "?" button to open a menu
+ if (show_leading_button)
+ if (ImGui::TabItemButton("?", ImGuiTabItemFlags_Leading | ImGuiTabItemFlags_NoTooltip))
+ ImGui::OpenPopup("MyHelpMenu");
+ if (ImGui::BeginPopup("MyHelpMenu"))
+ {
+ ImGui::Selectable("Hello!");
+ ImGui::EndPopup();
+ }
+
+ // Demo Trailing Tabs: click the "+" button to add a new tab (in your app you may want to use a font icon instead of the "+")
+ // Note that we submit it before the regular tabs, but because of the ImGuiTabItemFlags_Trailing flag it will always appear at the end.
+ if (show_trailing_button)
+ if (ImGui::TabItemButton("+", ImGuiTabItemFlags_Trailing | ImGuiTabItemFlags_NoTooltip))
+ active_tabs.push_back(next_tab_id++); // Add new tab
+
+ // Submit our regular tabs
+ for (int n = 0; n < active_tabs.Size; )
+ {
+ bool open = true;
+ char name[16];
+ snprintf(name, IM_ARRAYSIZE(name), "%04d", active_tabs[n]);
+ if (ImGui::BeginTabItem(name, &open, ImGuiTabItemFlags_None))
+ {
+ ImGui::Text("This is the %s tab!", name);
+ ImGui::EndTabItem();
+ }
+
+ if (!open)
+ active_tabs.erase(active_tabs.Data + n);
+ else
+ n++;
+ }
+
+ ImGui::EndTabBar();
+ }
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+ ImGui::TreePop();
+ }
+
+ // Plot/Graph widgets are not very good.
+ // Consider using a third-party library such as ImPlot: https://github.com/epezent/implot
+ // (see others https://github.com/ocornut/imgui/wiki/Useful-Extensions)
+ IMGUI_DEMO_MARKER("Widgets/Plotting");
+ if (ImGui::TreeNode("Plotting"))
+ {
+ static bool animate = true;
+ ImGui::Checkbox("Animate", &animate);
+
+ // Plot as lines and plot as histogram
+ IMGUI_DEMO_MARKER("Widgets/Plotting/PlotLines, PlotHistogram");
+ static float arr[] = { 0.6f, 0.1f, 1.0f, 0.5f, 0.92f, 0.1f, 0.2f };
+ ImGui::PlotLines("Frame Times", arr, IM_ARRAYSIZE(arr));
+ ImGui::PlotHistogram("Histogram", arr, IM_ARRAYSIZE(arr), 0, NULL, 0.0f, 1.0f, ImVec2(0, 80.0f));
+
+ // Fill an array of contiguous float values to plot
+ // Tip: If your float aren't contiguous but part of a structure, you can pass a pointer to your first float
+ // and the sizeof() of your structure in the "stride" parameter.
+ static float values[90] = {};
+ static int values_offset = 0;
+ static double refresh_time = 0.0;
+ if (!animate || refresh_time == 0.0)
+ refresh_time = ImGui::GetTime();
+ while (refresh_time < ImGui::GetTime()) // Create data at fixed 60 Hz rate for the demo
+ {
+ static float phase = 0.0f;
+ values[values_offset] = cosf(phase);
+ values_offset = (values_offset + 1) % IM_ARRAYSIZE(values);
+ phase += 0.10f * values_offset;
+ refresh_time += 1.0f / 60.0f;
+ }
+
+ // Plots can display overlay texts
+ // (in this example, we will display an average value)
+ {
+ float average = 0.0f;
+ for (int n = 0; n < IM_ARRAYSIZE(values); n++)
+ average += values[n];
+ average /= (float)IM_ARRAYSIZE(values);
+ char overlay[32];
+ sprintf(overlay, "avg %f", average);
+ ImGui::PlotLines("Lines", values, IM_ARRAYSIZE(values), values_offset, overlay, -1.0f, 1.0f, ImVec2(0, 80.0f));
+ }
+
+ // Use functions to generate output
+ // FIXME: This is rather awkward because current plot API only pass in indices.
+ // We probably want an API passing floats and user provide sample rate/count.
+ struct Funcs
+ {
+ static float Sin(void*, int i) { return sinf(i * 0.1f); }
+ static float Saw(void*, int i) { return (i & 1) ? 1.0f : -1.0f; }
+ };
+ static int func_type = 0, display_count = 70;
+ ImGui::Separator();
+ ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8);
+ ImGui::Combo("func", &func_type, "Sin\0Saw\0");
+ ImGui::SameLine();
+ ImGui::SliderInt("Sample count", &display_count, 1, 400);
+ float (*func)(void*, int) = (func_type == 0) ? Funcs::Sin : Funcs::Saw;
+ ImGui::PlotLines("Lines", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0, 80));
+ ImGui::PlotHistogram("Histogram", func, NULL, display_count, 0, NULL, -1.0f, 1.0f, ImVec2(0, 80));
+ ImGui::Separator();
+
+ // Animate a simple progress bar
+ IMGUI_DEMO_MARKER("Widgets/Plotting/ProgressBar");
+ static float progress = 0.0f, progress_dir = 1.0f;
+ if (animate)
+ {
+ progress += progress_dir * 0.4f * ImGui::GetIO().DeltaTime;
+ if (progress >= +1.1f) { progress = +1.1f; progress_dir *= -1.0f; }
+ if (progress <= -0.1f) { progress = -0.1f; progress_dir *= -1.0f; }
+ }
+
+ // Typically we would use ImVec2(-1.0f,0.0f) or ImVec2(-FLT_MIN,0.0f) to use all available width,
+ // or ImVec2(width,0.0f) for a specified width. ImVec2(0.0f,0.0f) uses ItemWidth.
+ ImGui::ProgressBar(progress, ImVec2(0.0f, 0.0f));
+ ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
+ ImGui::Text("Progress Bar");
+
+ float progress_saturated = IM_CLAMP(progress, 0.0f, 1.0f);
+ char buf[32];
+ sprintf(buf, "%d/%d", (int)(progress_saturated * 1753), 1753);
+ ImGui::ProgressBar(progress, ImVec2(0.f, 0.f), buf);
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Color");
+ if (ImGui::TreeNode("Color/Picker Widgets"))
+ {
+ static ImVec4 color = ImVec4(114.0f / 255.0f, 144.0f / 255.0f, 154.0f / 255.0f, 200.0f / 255.0f);
+
+ static bool alpha_preview = true;
+ static bool alpha_half_preview = false;
+ static bool drag_and_drop = true;
+ static bool options_menu = true;
+ static bool hdr = false;
+ ImGui::Checkbox("With Alpha Preview", &alpha_preview);
+ ImGui::Checkbox("With Half Alpha Preview", &alpha_half_preview);
+ ImGui::Checkbox("With Drag and Drop", &drag_and_drop);
+ ImGui::Checkbox("With Options Menu", &options_menu); ImGui::SameLine(); HelpMarker("Right-click on the individual color widget to show options.");
+ ImGui::Checkbox("With HDR", &hdr); ImGui::SameLine(); HelpMarker("Currently all this does is to lift the 0..1 limits on dragging widgets.");
+ ImGuiColorEditFlags misc_flags = (hdr ? ImGuiColorEditFlags_HDR : 0) | (drag_and_drop ? 0 : ImGuiColorEditFlags_NoDragDrop) | (alpha_half_preview ? ImGuiColorEditFlags_AlphaPreviewHalf : (alpha_preview ? ImGuiColorEditFlags_AlphaPreview : 0)) | (options_menu ? 0 : ImGuiColorEditFlags_NoOptions);
+
+ IMGUI_DEMO_MARKER("Widgets/Color/ColorEdit");
+ ImGui::Text("Color widget:");
+ ImGui::SameLine(); HelpMarker(
+ "Click on the color square to open a color picker.\n"
+ "CTRL+click on individual component to input value.\n");
+ ImGui::ColorEdit3("MyColor##1", (float*)&color, misc_flags);
+
+ IMGUI_DEMO_MARKER("Widgets/Color/ColorEdit (HSV, with Alpha)");
+ ImGui::Text("Color widget HSV with Alpha:");
+ ImGui::ColorEdit4("MyColor##2", (float*)&color, ImGuiColorEditFlags_DisplayHSV | misc_flags);
+
+ IMGUI_DEMO_MARKER("Widgets/Color/ColorEdit (float display)");
+ ImGui::Text("Color widget with Float Display:");
+ ImGui::ColorEdit4("MyColor##2f", (float*)&color, ImGuiColorEditFlags_Float | misc_flags);
+
+ IMGUI_DEMO_MARKER("Widgets/Color/ColorButton (with Picker)");
+ ImGui::Text("Color button with Picker:");
+ ImGui::SameLine(); HelpMarker(
+ "With the ImGuiColorEditFlags_NoInputs flag you can hide all the slider/text inputs.\n"
+ "With the ImGuiColorEditFlags_NoLabel flag you can pass a non-empty label which will only "
+ "be used for the tooltip and picker popup.");
+ ImGui::ColorEdit4("MyColor##3", (float*)&color, ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel | misc_flags);
+
+ IMGUI_DEMO_MARKER("Widgets/Color/ColorButton (with custom Picker popup)");
+ ImGui::Text("Color button with Custom Picker Popup:");
+
+ // Generate a default palette. The palette will persist and can be edited.
+ static bool saved_palette_init = true;
+ static ImVec4 saved_palette[32] = {};
+ if (saved_palette_init)
+ {
+ for (int n = 0; n < IM_ARRAYSIZE(saved_palette); n++)
+ {
+ ImGui::ColorConvertHSVtoRGB(n / 31.0f, 0.8f, 0.8f,
+ saved_palette[n].x, saved_palette[n].y, saved_palette[n].z);
+ saved_palette[n].w = 1.0f; // Alpha
+ }
+ saved_palette_init = false;
+ }
+
+ static ImVec4 backup_color;
+ bool open_popup = ImGui::ColorButton("MyColor##3b", color, misc_flags);
+ ImGui::SameLine(0, ImGui::GetStyle().ItemInnerSpacing.x);
+ open_popup |= ImGui::Button("Palette");
+ if (open_popup)
+ {
+ ImGui::OpenPopup("mypicker");
+ backup_color = color;
+ }
+ if (ImGui::BeginPopup("mypicker"))
+ {
+ ImGui::Text("MY CUSTOM COLOR PICKER WITH AN AMAZING PALETTE!");
+ ImGui::Separator();
+ ImGui::ColorPicker4("##picker", (float*)&color, misc_flags | ImGuiColorEditFlags_NoSidePreview | ImGuiColorEditFlags_NoSmallPreview);
+ ImGui::SameLine();
+
+ ImGui::BeginGroup(); // Lock X position
+ ImGui::Text("Current");
+ ImGui::ColorButton("##current", color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60, 40));
+ ImGui::Text("Previous");
+ if (ImGui::ColorButton("##previous", backup_color, ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_AlphaPreviewHalf, ImVec2(60, 40)))
+ color = backup_color;
+ ImGui::Separator();
+ ImGui::Text("Palette");
+ for (int n = 0; n < IM_ARRAYSIZE(saved_palette); n++)
+ {
+ ImGui::PushID(n);
+ if ((n % 8) != 0)
+ ImGui::SameLine(0.0f, ImGui::GetStyle().ItemSpacing.y);
+
+ ImGuiColorEditFlags palette_button_flags = ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoPicker | ImGuiColorEditFlags_NoTooltip;
+ if (ImGui::ColorButton("##palette", saved_palette[n], palette_button_flags, ImVec2(20, 20)))
+ color = ImVec4(saved_palette[n].x, saved_palette[n].y, saved_palette[n].z, color.w); // Preserve alpha!
+
+ // Allow user to drop colors into each palette entry. Note that ColorButton() is already a
+ // drag source by default, unless specifying the ImGuiColorEditFlags_NoDragDrop flag.
+ if (ImGui::BeginDragDropTarget())
+ {
+ if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F))
+ memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 3);
+ if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F))
+ memcpy((float*)&saved_palette[n], payload->Data, sizeof(float) * 4);
+ ImGui::EndDragDropTarget();
+ }
+
+ ImGui::PopID();
+ }
+ ImGui::EndGroup();
+ ImGui::EndPopup();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Color/ColorButton (simple)");
+ ImGui::Text("Color button only:");
+ static bool no_border = false;
+ ImGui::Checkbox("ImGuiColorEditFlags_NoBorder", &no_border);
+ ImGui::ColorButton("MyColor##3c", *(ImVec4*)&color, misc_flags | (no_border ? ImGuiColorEditFlags_NoBorder : 0), ImVec2(80, 80));
+
+ IMGUI_DEMO_MARKER("Widgets/Color/ColorPicker");
+ ImGui::Text("Color picker:");
+ static bool alpha = true;
+ static bool alpha_bar = true;
+ static bool side_preview = true;
+ static bool ref_color = false;
+ static ImVec4 ref_color_v(1.0f, 0.0f, 1.0f, 0.5f);
+ static int display_mode = 0;
+ static int picker_mode = 0;
+ ImGui::Checkbox("With Alpha", &alpha);
+ ImGui::Checkbox("With Alpha Bar", &alpha_bar);
+ ImGui::Checkbox("With Side Preview", &side_preview);
+ if (side_preview)
+ {
+ ImGui::SameLine();
+ ImGui::Checkbox("With Ref Color", &ref_color);
+ if (ref_color)
+ {
+ ImGui::SameLine();
+ ImGui::ColorEdit4("##RefColor", &ref_color_v.x, ImGuiColorEditFlags_NoInputs | misc_flags);
+ }
+ }
+ ImGui::Combo("Display Mode", &display_mode, "Auto/Current\0None\0RGB Only\0HSV Only\0Hex Only\0");
+ ImGui::SameLine(); HelpMarker(
+ "ColorEdit defaults to displaying RGB inputs if you don't specify a display mode, "
+ "but the user can change it with a right-click on those inputs.\n\nColorPicker defaults to displaying RGB+HSV+Hex "
+ "if you don't specify a display mode.\n\nYou can change the defaults using SetColorEditOptions().");
+ ImGui::SameLine(); HelpMarker("When not specified explicitly (Auto/Current mode), user can right-click the picker to change mode.");
+ ImGuiColorEditFlags flags = misc_flags;
+ if (!alpha) flags |= ImGuiColorEditFlags_NoAlpha; // This is by default if you call ColorPicker3() instead of ColorPicker4()
+ if (alpha_bar) flags |= ImGuiColorEditFlags_AlphaBar;
+ if (!side_preview) flags |= ImGuiColorEditFlags_NoSidePreview;
+ if (picker_mode == 1) flags |= ImGuiColorEditFlags_PickerHueBar;
+ if (picker_mode == 2) flags |= ImGuiColorEditFlags_PickerHueWheel;
+ if (display_mode == 1) flags |= ImGuiColorEditFlags_NoInputs; // Disable all RGB/HSV/Hex displays
+ if (display_mode == 2) flags |= ImGuiColorEditFlags_DisplayRGB; // Override display mode
+ if (display_mode == 3) flags |= ImGuiColorEditFlags_DisplayHSV;
+ if (display_mode == 4) flags |= ImGuiColorEditFlags_DisplayHex;
+ ImGui::ColorPicker4("MyColor##4", (float*)&color, flags, ref_color ? &ref_color_v.x : NULL);
+
+ ImGui::Text("Set defaults in code:");
+ ImGui::SameLine(); HelpMarker(
+ "SetColorEditOptions() is designed to allow you to set boot-time default.\n"
+ "We don't have Push/Pop functions because you can force options on a per-widget basis if needed,"
+ "and the user can change non-forced ones with the options menu.\nWe don't have a getter to avoid"
+ "encouraging you to persistently save values that aren't forward-compatible.");
+ if (ImGui::Button("Default: Uint8 + HSV + Hue Bar"))
+ ImGui::SetColorEditOptions(ImGuiColorEditFlags_Uint8 | ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_PickerHueBar);
+ if (ImGui::Button("Default: Float + HDR + Hue Wheel"))
+ ImGui::SetColorEditOptions(ImGuiColorEditFlags_Float | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_PickerHueWheel);
+
+ // Always both a small version of both types of pickers (to make it more visible in the demo to people who are skimming quickly through it)
+ ImGui::Text("Both types:");
+ float w = (ImGui::GetContentRegionAvail().x - ImGui::GetStyle().ItemSpacing.y) * 0.40f;
+ ImGui::SetNextItemWidth(w);
+ ImGui::ColorPicker3("##MyColor##5", (float*)&color, ImGuiColorEditFlags_PickerHueBar | ImGuiColorEditFlags_NoSidePreview | ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoAlpha);
+ ImGui::SameLine();
+ ImGui::SetNextItemWidth(w);
+ ImGui::ColorPicker3("##MyColor##6", (float*)&color, ImGuiColorEditFlags_PickerHueWheel | ImGuiColorEditFlags_NoSidePreview | ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoAlpha);
+
+ // HSV encoded support (to avoid RGB<>HSV round trips and singularities when S==0 or V==0)
+ static ImVec4 color_hsv(0.23f, 1.0f, 1.0f, 1.0f); // Stored as HSV!
+ ImGui::Spacing();
+ ImGui::Text("HSV encoded colors");
+ ImGui::SameLine(); HelpMarker(
+ "By default, colors are given to ColorEdit and ColorPicker in RGB, but ImGuiColorEditFlags_InputHSV"
+ "allows you to store colors as HSV and pass them to ColorEdit and ColorPicker as HSV. This comes with the"
+ "added benefit that you can manipulate hue values with the picker even when saturation or value are zero.");
+ ImGui::Text("Color widget with InputHSV:");
+ ImGui::ColorEdit4("HSV shown as RGB##1", (float*)&color_hsv, ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float);
+ ImGui::ColorEdit4("HSV shown as HSV##1", (float*)&color_hsv, ImGuiColorEditFlags_DisplayHSV | ImGuiColorEditFlags_InputHSV | ImGuiColorEditFlags_Float);
+ ImGui::DragFloat4("Raw HSV values", (float*)&color_hsv, 0.01f, 0.0f, 1.0f);
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Drag and Slider Flags");
+ if (ImGui::TreeNode("Drag/Slider Flags"))
+ {
+ // Demonstrate using advanced flags for DragXXX and SliderXXX functions. Note that the flags are the same!
+ static ImGuiSliderFlags flags = ImGuiSliderFlags_None;
+ ImGui::CheckboxFlags("ImGuiSliderFlags_AlwaysClamp", &flags, ImGuiSliderFlags_AlwaysClamp);
+ ImGui::SameLine(); HelpMarker("Always clamp value to min/max bounds (if any) when input manually with CTRL+Click.");
+ ImGui::CheckboxFlags("ImGuiSliderFlags_Logarithmic", &flags, ImGuiSliderFlags_Logarithmic);
+ ImGui::SameLine(); HelpMarker("Enable logarithmic editing (more precision for small values).");
+ ImGui::CheckboxFlags("ImGuiSliderFlags_NoRoundToFormat", &flags, ImGuiSliderFlags_NoRoundToFormat);
+ ImGui::SameLine(); HelpMarker("Disable rounding underlying value to match precision of the format string (e.g. %.3f values are rounded to those 3 digits).");
+ ImGui::CheckboxFlags("ImGuiSliderFlags_NoInput", &flags, ImGuiSliderFlags_NoInput);
+ ImGui::SameLine(); HelpMarker("Disable CTRL+Click or Enter key allowing to input text directly into the widget.");
+
+ // Drags
+ static float drag_f = 0.5f;
+ static int drag_i = 50;
+ ImGui::Text("Underlying float value: %f", drag_f);
+ ImGui::DragFloat("DragFloat (0 -> 1)", &drag_f, 0.005f, 0.0f, 1.0f, "%.3f", flags);
+ ImGui::DragFloat("DragFloat (0 -> +inf)", &drag_f, 0.005f, 0.0f, FLT_MAX, "%.3f", flags);
+ ImGui::DragFloat("DragFloat (-inf -> 1)", &drag_f, 0.005f, -FLT_MAX, 1.0f, "%.3f", flags);
+ ImGui::DragFloat("DragFloat (-inf -> +inf)", &drag_f, 0.005f, -FLT_MAX, +FLT_MAX, "%.3f", flags);
+ ImGui::DragInt("DragInt (0 -> 100)", &drag_i, 0.5f, 0, 100, "%d", flags);
+
+ // Sliders
+ static float slider_f = 0.5f;
+ static int slider_i = 50;
+ ImGui::Text("Underlying float value: %f", slider_f);
+ ImGui::SliderFloat("SliderFloat (0 -> 1)", &slider_f, 0.0f, 1.0f, "%.3f", flags);
+ ImGui::SliderInt("SliderInt (0 -> 100)", &slider_i, 0, 100, "%d", flags);
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Range Widgets");
+ if (ImGui::TreeNode("Range Widgets"))
+ {
+ static float begin = 10, end = 90;
+ static int begin_i = 100, end_i = 1000;
+ ImGui::DragFloatRange2("range float", &begin, &end, 0.25f, 0.0f, 100.0f, "Min: %.1f %%", "Max: %.1f %%", ImGuiSliderFlags_AlwaysClamp);
+ ImGui::DragIntRange2("range int", &begin_i, &end_i, 5, 0, 1000, "Min: %d units", "Max: %d units");
+ ImGui::DragIntRange2("range int (no bounds)", &begin_i, &end_i, 5, 0, 0, "Min: %d units", "Max: %d units");
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Data Types");
+ if (ImGui::TreeNode("Data Types"))
+ {
+ // DragScalar/InputScalar/SliderScalar functions allow various data types
+ // - signed/unsigned
+ // - 8/16/32/64-bits
+ // - integer/float/double
+ // To avoid polluting the public API with all possible combinations, we use the ImGuiDataType enum
+ // to pass the type, and passing all arguments by pointer.
+ // This is the reason the test code below creates local variables to hold "zero" "one" etc. for each types.
+ // In practice, if you frequently use a given type that is not covered by the normal API entry points,
+ // you can wrap it yourself inside a 1 line function which can take typed argument as value instead of void*,
+ // and then pass their address to the generic function. For example:
+ // bool MySliderU64(const char *label, u64* value, u64 min = 0, u64 max = 0, const char* format = "%lld")
+ // {
+ // return SliderScalar(label, ImGuiDataType_U64, value, &min, &max, format);
+ // }
+
+ // Setup limits (as helper variables so we can take their address, as explained above)
+ // Note: SliderScalar() functions have a maximum usable range of half the natural type maximum, hence the /2.
+ #ifndef LLONG_MIN
+ ImS64 LLONG_MIN = -9223372036854775807LL - 1;
+ ImS64 LLONG_MAX = 9223372036854775807LL;
+ ImU64 ULLONG_MAX = (2ULL * 9223372036854775807LL + 1);
+ #endif
+ const char s8_zero = 0, s8_one = 1, s8_fifty = 50, s8_min = -128, s8_max = 127;
+ const ImU8 u8_zero = 0, u8_one = 1, u8_fifty = 50, u8_min = 0, u8_max = 255;
+ const short s16_zero = 0, s16_one = 1, s16_fifty = 50, s16_min = -32768, s16_max = 32767;
+ const ImU16 u16_zero = 0, u16_one = 1, u16_fifty = 50, u16_min = 0, u16_max = 65535;
+ const ImS32 s32_zero = 0, s32_one = 1, s32_fifty = 50, s32_min = INT_MIN/2, s32_max = INT_MAX/2, s32_hi_a = INT_MAX/2 - 100, s32_hi_b = INT_MAX/2;
+ const ImU32 u32_zero = 0, u32_one = 1, u32_fifty = 50, u32_min = 0, u32_max = UINT_MAX/2, u32_hi_a = UINT_MAX/2 - 100, u32_hi_b = UINT_MAX/2;
+ const ImS64 s64_zero = 0, s64_one = 1, s64_fifty = 50, s64_min = LLONG_MIN/2, s64_max = LLONG_MAX/2, s64_hi_a = LLONG_MAX/2 - 100, s64_hi_b = LLONG_MAX/2;
+ const ImU64 u64_zero = 0, u64_one = 1, u64_fifty = 50, u64_min = 0, u64_max = ULLONG_MAX/2, u64_hi_a = ULLONG_MAX/2 - 100, u64_hi_b = ULLONG_MAX/2;
+ const float f32_zero = 0.f, f32_one = 1.f, f32_lo_a = -10000000000.0f, f32_hi_a = +10000000000.0f;
+ const double f64_zero = 0., f64_one = 1., f64_lo_a = -1000000000000000.0, f64_hi_a = +1000000000000000.0;
+
+ // State
+ static char s8_v = 127;
+ static ImU8 u8_v = 255;
+ static short s16_v = 32767;
+ static ImU16 u16_v = 65535;
+ static ImS32 s32_v = -1;
+ static ImU32 u32_v = (ImU32)-1;
+ static ImS64 s64_v = -1;
+ static ImU64 u64_v = (ImU64)-1;
+ static float f32_v = 0.123f;
+ static double f64_v = 90000.01234567890123456789;
+
+ const float drag_speed = 0.2f;
+ static bool drag_clamp = false;
+ IMGUI_DEMO_MARKER("Widgets/Data Types/Drags");
+ ImGui::Text("Drags:");
+ ImGui::Checkbox("Clamp integers to 0..50", &drag_clamp);
+ ImGui::SameLine(); HelpMarker(
+ "As with every widgets in dear imgui, we never modify values unless there is a user interaction.\n"
+ "You can override the clamping limits by using CTRL+Click to input a value.");
+ ImGui::DragScalar("drag s8", ImGuiDataType_S8, &s8_v, drag_speed, drag_clamp ? &s8_zero : NULL, drag_clamp ? &s8_fifty : NULL);
+ ImGui::DragScalar("drag u8", ImGuiDataType_U8, &u8_v, drag_speed, drag_clamp ? &u8_zero : NULL, drag_clamp ? &u8_fifty : NULL, "%u ms");
+ ImGui::DragScalar("drag s16", ImGuiDataType_S16, &s16_v, drag_speed, drag_clamp ? &s16_zero : NULL, drag_clamp ? &s16_fifty : NULL);
+ ImGui::DragScalar("drag u16", ImGuiDataType_U16, &u16_v, drag_speed, drag_clamp ? &u16_zero : NULL, drag_clamp ? &u16_fifty : NULL, "%u ms");
+ ImGui::DragScalar("drag s32", ImGuiDataType_S32, &s32_v, drag_speed, drag_clamp ? &s32_zero : NULL, drag_clamp ? &s32_fifty : NULL);
+ ImGui::DragScalar("drag s32 hex", ImGuiDataType_S32, &s32_v, drag_speed, drag_clamp ? &s32_zero : NULL, drag_clamp ? &s32_fifty : NULL, "0x%08X");
+ ImGui::DragScalar("drag u32", ImGuiDataType_U32, &u32_v, drag_speed, drag_clamp ? &u32_zero : NULL, drag_clamp ? &u32_fifty : NULL, "%u ms");
+ ImGui::DragScalar("drag s64", ImGuiDataType_S64, &s64_v, drag_speed, drag_clamp ? &s64_zero : NULL, drag_clamp ? &s64_fifty : NULL);
+ ImGui::DragScalar("drag u64", ImGuiDataType_U64, &u64_v, drag_speed, drag_clamp ? &u64_zero : NULL, drag_clamp ? &u64_fifty : NULL);
+ ImGui::DragScalar("drag float", ImGuiDataType_Float, &f32_v, 0.005f, &f32_zero, &f32_one, "%f");
+ ImGui::DragScalar("drag float log", ImGuiDataType_Float, &f32_v, 0.005f, &f32_zero, &f32_one, "%f", ImGuiSliderFlags_Logarithmic);
+ ImGui::DragScalar("drag double", ImGuiDataType_Double, &f64_v, 0.0005f, &f64_zero, NULL, "%.10f grams");
+ ImGui::DragScalar("drag double log",ImGuiDataType_Double, &f64_v, 0.0005f, &f64_zero, &f64_one, "0 < %.10f < 1", ImGuiSliderFlags_Logarithmic);
+
+ IMGUI_DEMO_MARKER("Widgets/Data Types/Sliders");
+ ImGui::Text("Sliders");
+ ImGui::SliderScalar("slider s8 full", ImGuiDataType_S8, &s8_v, &s8_min, &s8_max, "%d");
+ ImGui::SliderScalar("slider u8 full", ImGuiDataType_U8, &u8_v, &u8_min, &u8_max, "%u");
+ ImGui::SliderScalar("slider s16 full", ImGuiDataType_S16, &s16_v, &s16_min, &s16_max, "%d");
+ ImGui::SliderScalar("slider u16 full", ImGuiDataType_U16, &u16_v, &u16_min, &u16_max, "%u");
+ ImGui::SliderScalar("slider s32 low", ImGuiDataType_S32, &s32_v, &s32_zero, &s32_fifty,"%d");
+ ImGui::SliderScalar("slider s32 high", ImGuiDataType_S32, &s32_v, &s32_hi_a, &s32_hi_b, "%d");
+ ImGui::SliderScalar("slider s32 full", ImGuiDataType_S32, &s32_v, &s32_min, &s32_max, "%d");
+ ImGui::SliderScalar("slider s32 hex", ImGuiDataType_S32, &s32_v, &s32_zero, &s32_fifty, "0x%04X");
+ ImGui::SliderScalar("slider u32 low", ImGuiDataType_U32, &u32_v, &u32_zero, &u32_fifty,"%u");
+ ImGui::SliderScalar("slider u32 high", ImGuiDataType_U32, &u32_v, &u32_hi_a, &u32_hi_b, "%u");
+ ImGui::SliderScalar("slider u32 full", ImGuiDataType_U32, &u32_v, &u32_min, &u32_max, "%u");
+ ImGui::SliderScalar("slider s64 low", ImGuiDataType_S64, &s64_v, &s64_zero, &s64_fifty,"%" IM_PRId64);
+ ImGui::SliderScalar("slider s64 high", ImGuiDataType_S64, &s64_v, &s64_hi_a, &s64_hi_b, "%" IM_PRId64);
+ ImGui::SliderScalar("slider s64 full", ImGuiDataType_S64, &s64_v, &s64_min, &s64_max, "%" IM_PRId64);
+ ImGui::SliderScalar("slider u64 low", ImGuiDataType_U64, &u64_v, &u64_zero, &u64_fifty,"%" IM_PRIu64 " ms");
+ ImGui::SliderScalar("slider u64 high", ImGuiDataType_U64, &u64_v, &u64_hi_a, &u64_hi_b, "%" IM_PRIu64 " ms");
+ ImGui::SliderScalar("slider u64 full", ImGuiDataType_U64, &u64_v, &u64_min, &u64_max, "%" IM_PRIu64 " ms");
+ ImGui::SliderScalar("slider float low", ImGuiDataType_Float, &f32_v, &f32_zero, &f32_one);
+ ImGui::SliderScalar("slider float low log", ImGuiDataType_Float, &f32_v, &f32_zero, &f32_one, "%.10f", ImGuiSliderFlags_Logarithmic);
+ ImGui::SliderScalar("slider float high", ImGuiDataType_Float, &f32_v, &f32_lo_a, &f32_hi_a, "%e");
+ ImGui::SliderScalar("slider double low", ImGuiDataType_Double, &f64_v, &f64_zero, &f64_one, "%.10f grams");
+ ImGui::SliderScalar("slider double low log",ImGuiDataType_Double, &f64_v, &f64_zero, &f64_one, "%.10f", ImGuiSliderFlags_Logarithmic);
+ ImGui::SliderScalar("slider double high", ImGuiDataType_Double, &f64_v, &f64_lo_a, &f64_hi_a, "%e grams");
+
+ ImGui::Text("Sliders (reverse)");
+ ImGui::SliderScalar("slider s8 reverse", ImGuiDataType_S8, &s8_v, &s8_max, &s8_min, "%d");
+ ImGui::SliderScalar("slider u8 reverse", ImGuiDataType_U8, &u8_v, &u8_max, &u8_min, "%u");
+ ImGui::SliderScalar("slider s32 reverse", ImGuiDataType_S32, &s32_v, &s32_fifty, &s32_zero, "%d");
+ ImGui::SliderScalar("slider u32 reverse", ImGuiDataType_U32, &u32_v, &u32_fifty, &u32_zero, "%u");
+ ImGui::SliderScalar("slider s64 reverse", ImGuiDataType_S64, &s64_v, &s64_fifty, &s64_zero, "%" IM_PRId64);
+ ImGui::SliderScalar("slider u64 reverse", ImGuiDataType_U64, &u64_v, &u64_fifty, &u64_zero, "%" IM_PRIu64 " ms");
+
+ IMGUI_DEMO_MARKER("Widgets/Data Types/Inputs");
+ static bool inputs_step = true;
+ ImGui::Text("Inputs");
+ ImGui::Checkbox("Show step buttons", &inputs_step);
+ ImGui::InputScalar("input s8", ImGuiDataType_S8, &s8_v, inputs_step ? &s8_one : NULL, NULL, "%d");
+ ImGui::InputScalar("input u8", ImGuiDataType_U8, &u8_v, inputs_step ? &u8_one : NULL, NULL, "%u");
+ ImGui::InputScalar("input s16", ImGuiDataType_S16, &s16_v, inputs_step ? &s16_one : NULL, NULL, "%d");
+ ImGui::InputScalar("input u16", ImGuiDataType_U16, &u16_v, inputs_step ? &u16_one : NULL, NULL, "%u");
+ ImGui::InputScalar("input s32", ImGuiDataType_S32, &s32_v, inputs_step ? &s32_one : NULL, NULL, "%d");
+ ImGui::InputScalar("input s32 hex", ImGuiDataType_S32, &s32_v, inputs_step ? &s32_one : NULL, NULL, "%04X");
+ ImGui::InputScalar("input u32", ImGuiDataType_U32, &u32_v, inputs_step ? &u32_one : NULL, NULL, "%u");
+ ImGui::InputScalar("input u32 hex", ImGuiDataType_U32, &u32_v, inputs_step ? &u32_one : NULL, NULL, "%08X");
+ ImGui::InputScalar("input s64", ImGuiDataType_S64, &s64_v, inputs_step ? &s64_one : NULL);
+ ImGui::InputScalar("input u64", ImGuiDataType_U64, &u64_v, inputs_step ? &u64_one : NULL);
+ ImGui::InputScalar("input float", ImGuiDataType_Float, &f32_v, inputs_step ? &f32_one : NULL);
+ ImGui::InputScalar("input double", ImGuiDataType_Double, &f64_v, inputs_step ? &f64_one : NULL);
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Multi-component Widgets");
+ if (ImGui::TreeNode("Multi-component Widgets"))
+ {
+ static float vec4f[4] = { 0.10f, 0.20f, 0.30f, 0.44f };
+ static int vec4i[4] = { 1, 5, 100, 255 };
+
+ ImGui::InputFloat2("input float2", vec4f);
+ ImGui::DragFloat2("drag float2", vec4f, 0.01f, 0.0f, 1.0f);
+ ImGui::SliderFloat2("slider float2", vec4f, 0.0f, 1.0f);
+ ImGui::InputInt2("input int2", vec4i);
+ ImGui::DragInt2("drag int2", vec4i, 1, 0, 255);
+ ImGui::SliderInt2("slider int2", vec4i, 0, 255);
+ ImGui::Spacing();
+
+ ImGui::InputFloat3("input float3", vec4f);
+ ImGui::DragFloat3("drag float3", vec4f, 0.01f, 0.0f, 1.0f);
+ ImGui::SliderFloat3("slider float3", vec4f, 0.0f, 1.0f);
+ ImGui::InputInt3("input int3", vec4i);
+ ImGui::DragInt3("drag int3", vec4i, 1, 0, 255);
+ ImGui::SliderInt3("slider int3", vec4i, 0, 255);
+ ImGui::Spacing();
+
+ ImGui::InputFloat4("input float4", vec4f);
+ ImGui::DragFloat4("drag float4", vec4f, 0.01f, 0.0f, 1.0f);
+ ImGui::SliderFloat4("slider float4", vec4f, 0.0f, 1.0f);
+ ImGui::InputInt4("input int4", vec4i);
+ ImGui::DragInt4("drag int4", vec4i, 1, 0, 255);
+ ImGui::SliderInt4("slider int4", vec4i, 0, 255);
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Vertical Sliders");
+ if (ImGui::TreeNode("Vertical Sliders"))
+ {
+ const float spacing = 4;
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(spacing, spacing));
+
+ static int int_value = 0;
+ ImGui::VSliderInt("##int", ImVec2(18, 160), &int_value, 0, 5);
+ ImGui::SameLine();
+
+ static float values[7] = { 0.0f, 0.60f, 0.35f, 0.9f, 0.70f, 0.20f, 0.0f };
+ ImGui::PushID("set1");
+ for (int i = 0; i < 7; i++)
+ {
+ if (i > 0) ImGui::SameLine();
+ ImGui::PushID(i);
+ ImGui::PushStyleColor(ImGuiCol_FrameBg, (ImVec4)ImColor::HSV(i / 7.0f, 0.5f, 0.5f));
+ ImGui::PushStyleColor(ImGuiCol_FrameBgHovered, (ImVec4)ImColor::HSV(i / 7.0f, 0.6f, 0.5f));
+ ImGui::PushStyleColor(ImGuiCol_FrameBgActive, (ImVec4)ImColor::HSV(i / 7.0f, 0.7f, 0.5f));
+ ImGui::PushStyleColor(ImGuiCol_SliderGrab, (ImVec4)ImColor::HSV(i / 7.0f, 0.9f, 0.9f));
+ ImGui::VSliderFloat("##v", ImVec2(18, 160), &values[i], 0.0f, 1.0f, "");
+ if (ImGui::IsItemActive() || ImGui::IsItemHovered())
+ ImGui::SetTooltip("%.3f", values[i]);
+ ImGui::PopStyleColor(4);
+ ImGui::PopID();
+ }
+ ImGui::PopID();
+
+ ImGui::SameLine();
+ ImGui::PushID("set2");
+ static float values2[4] = { 0.20f, 0.80f, 0.40f, 0.25f };
+ const int rows = 3;
+ const ImVec2 small_slider_size(18, (float)(int)((160.0f - (rows - 1) * spacing) / rows));
+ for (int nx = 0; nx < 4; nx++)
+ {
+ if (nx > 0) ImGui::SameLine();
+ ImGui::BeginGroup();
+ for (int ny = 0; ny < rows; ny++)
+ {
+ ImGui::PushID(nx * rows + ny);
+ ImGui::VSliderFloat("##v", small_slider_size, &values2[nx], 0.0f, 1.0f, "");
+ if (ImGui::IsItemActive() || ImGui::IsItemHovered())
+ ImGui::SetTooltip("%.3f", values2[nx]);
+ ImGui::PopID();
+ }
+ ImGui::EndGroup();
+ }
+ ImGui::PopID();
+
+ ImGui::SameLine();
+ ImGui::PushID("set3");
+ for (int i = 0; i < 4; i++)
+ {
+ if (i > 0) ImGui::SameLine();
+ ImGui::PushID(i);
+ ImGui::PushStyleVar(ImGuiStyleVar_GrabMinSize, 40);
+ ImGui::VSliderFloat("##v", ImVec2(40, 160), &values[i], 0.0f, 1.0f, "%.2f\nsec");
+ ImGui::PopStyleVar();
+ ImGui::PopID();
+ }
+ ImGui::PopID();
+ ImGui::PopStyleVar();
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Drag and drop");
+ if (ImGui::TreeNode("Drag and Drop"))
+ {
+ IMGUI_DEMO_MARKER("Widgets/Drag and drop/Standard widgets");
+ if (ImGui::TreeNode("Drag and drop in standard widgets"))
+ {
+ // ColorEdit widgets automatically act as drag source and drag target.
+ // They are using standardized payload strings IMGUI_PAYLOAD_TYPE_COLOR_3F and IMGUI_PAYLOAD_TYPE_COLOR_4F
+ // to allow your own widgets to use colors in their drag and drop interaction.
+ // Also see 'Demo->Widgets->Color/Picker Widgets->Palette' demo.
+ HelpMarker("You can drag from the color squares.");
+ static float col1[3] = { 1.0f, 0.0f, 0.2f };
+ static float col2[4] = { 0.4f, 0.7f, 0.0f, 0.5f };
+ ImGui::ColorEdit3("color 1", col1);
+ ImGui::ColorEdit4("color 2", col2);
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Drag and drop/Copy-swap items");
+ if (ImGui::TreeNode("Drag and drop to copy/swap items"))
+ {
+ enum Mode
+ {
+ Mode_Copy,
+ Mode_Move,
+ Mode_Swap
+ };
+ static int mode = 0;
+ if (ImGui::RadioButton("Copy", mode == Mode_Copy)) { mode = Mode_Copy; } ImGui::SameLine();
+ if (ImGui::RadioButton("Move", mode == Mode_Move)) { mode = Mode_Move; } ImGui::SameLine();
+ if (ImGui::RadioButton("Swap", mode == Mode_Swap)) { mode = Mode_Swap; }
+ static const char* names[9] =
+ {
+ "Bobby", "Beatrice", "Betty",
+ "Brianna", "Barry", "Bernard",
+ "Bibi", "Blaine", "Bryn"
+ };
+ for (int n = 0; n < IM_ARRAYSIZE(names); n++)
+ {
+ ImGui::PushID(n);
+ if ((n % 3) != 0)
+ ImGui::SameLine();
+ ImGui::Button(names[n], ImVec2(60, 60));
+
+ // Our buttons are both drag sources and drag targets here!
+ if (ImGui::BeginDragDropSource(ImGuiDragDropFlags_None))
+ {
+ // Set payload to carry the index of our item (could be anything)
+ ImGui::SetDragDropPayload("DND_DEMO_CELL", &n, sizeof(int));
+
+ // Display preview (could be anything, e.g. when dragging an image we could decide to display
+ // the filename and a small preview of the image, etc.)
+ if (mode == Mode_Copy) { ImGui::Text("Copy %s", names[n]); }
+ if (mode == Mode_Move) { ImGui::Text("Move %s", names[n]); }
+ if (mode == Mode_Swap) { ImGui::Text("Swap %s", names[n]); }
+ ImGui::EndDragDropSource();
+ }
+ if (ImGui::BeginDragDropTarget())
+ {
+ if (const ImGuiPayload* payload = ImGui::AcceptDragDropPayload("DND_DEMO_CELL"))
+ {
+ IM_ASSERT(payload->DataSize == sizeof(int));
+ int payload_n = *(const int*)payload->Data;
+ if (mode == Mode_Copy)
+ {
+ names[n] = names[payload_n];
+ }
+ if (mode == Mode_Move)
+ {
+ names[n] = names[payload_n];
+ names[payload_n] = "";
+ }
+ if (mode == Mode_Swap)
+ {
+ const char* tmp = names[n];
+ names[n] = names[payload_n];
+ names[payload_n] = tmp;
+ }
+ }
+ ImGui::EndDragDropTarget();
+ }
+ ImGui::PopID();
+ }
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Drag and Drop/Drag to reorder items (simple)");
+ if (ImGui::TreeNode("Drag to reorder items (simple)"))
+ {
+ // Simple reordering
+ HelpMarker(
+ "We don't use the drag and drop api at all here! "
+ "Instead we query when the item is held but not hovered, and order items accordingly.");
+ static const char* item_names[] = { "Item One", "Item Two", "Item Three", "Item Four", "Item Five" };
+ for (int n = 0; n < IM_ARRAYSIZE(item_names); n++)
+ {
+ const char* item = item_names[n];
+ ImGui::Selectable(item);
+
+ if (ImGui::IsItemActive() && !ImGui::IsItemHovered())
+ {
+ int n_next = n + (ImGui::GetMouseDragDelta(0).y < 0.f ? -1 : 1);
+ if (n_next >= 0 && n_next < IM_ARRAYSIZE(item_names))
+ {
+ item_names[n] = item_names[n_next];
+ item_names[n_next] = item;
+ ImGui::ResetMouseDragDelta();
+ }
+ }
+ }
+ ImGui::TreePop();
+ }
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Querying Item Status (Edited,Active,Hovered etc.)");
+ if (ImGui::TreeNode("Querying Item Status (Edited/Active/Hovered etc.)"))
+ {
+ // Select an item type
+ const char* item_names[] =
+ {
+ "Text", "Button", "Button (w/ repeat)", "Checkbox", "SliderFloat", "InputText", "InputTextMultiline", "InputFloat",
+ "InputFloat3", "ColorEdit4", "Selectable", "MenuItem", "TreeNode", "TreeNode (w/ double-click)", "Combo", "ListBox"
+ };
+ static int item_type = 4;
+ static bool item_disabled = false;
+ ImGui::Combo("Item Type", &item_type, item_names, IM_ARRAYSIZE(item_names), IM_ARRAYSIZE(item_names));
+ ImGui::SameLine();
+ HelpMarker("Testing how various types of items are interacting with the IsItemXXX functions. Note that the bool return value of most ImGui function is generally equivalent to calling ImGui::IsItemHovered().");
+ ImGui::Checkbox("Item Disabled", &item_disabled);
+
+ // Submit selected item item so we can query their status in the code following it.
+ bool ret = false;
+ static bool b = false;
+ static float col4f[4] = { 1.0f, 0.5, 0.0f, 1.0f };
+ static char str[16] = {};
+ if (item_disabled)
+ ImGui::BeginDisabled(true);
+ if (item_type == 0) { ImGui::Text("ITEM: Text"); } // Testing text items with no identifier/interaction
+ if (item_type == 1) { ret = ImGui::Button("ITEM: Button"); } // Testing button
+ if (item_type == 2) { ImGui::PushButtonRepeat(true); ret = ImGui::Button("ITEM: Button"); ImGui::PopButtonRepeat(); } // Testing button (with repeater)
+ if (item_type == 3) { ret = ImGui::Checkbox("ITEM: Checkbox", &b); } // Testing checkbox
+ if (item_type == 4) { ret = ImGui::SliderFloat("ITEM: SliderFloat", &col4f[0], 0.0f, 1.0f); } // Testing basic item
+ if (item_type == 5) { ret = ImGui::InputText("ITEM: InputText", &str[0], IM_ARRAYSIZE(str)); } // Testing input text (which handles tabbing)
+ if (item_type == 6) { ret = ImGui::InputTextMultiline("ITEM: InputTextMultiline", &str[0], IM_ARRAYSIZE(str)); } // Testing input text (which uses a child window)
+ if (item_type == 7) { ret = ImGui::InputFloat("ITEM: InputFloat", col4f, 1.0f); } // Testing +/- buttons on scalar input
+ if (item_type == 8) { ret = ImGui::InputFloat3("ITEM: InputFloat3", col4f); } // Testing multi-component items (IsItemXXX flags are reported merged)
+ if (item_type == 9) { ret = ImGui::ColorEdit4("ITEM: ColorEdit4", col4f); } // Testing multi-component items (IsItemXXX flags are reported merged)
+ if (item_type == 10){ ret = ImGui::Selectable("ITEM: Selectable"); } // Testing selectable item
+ if (item_type == 11){ ret = ImGui::MenuItem("ITEM: MenuItem"); } // Testing menu item (they use ImGuiButtonFlags_PressedOnRelease button policy)
+ if (item_type == 12){ ret = ImGui::TreeNode("ITEM: TreeNode"); if (ret) ImGui::TreePop(); } // Testing tree node
+ if (item_type == 13){ ret = ImGui::TreeNodeEx("ITEM: TreeNode w/ ImGuiTreeNodeFlags_OpenOnDoubleClick", ImGuiTreeNodeFlags_OpenOnDoubleClick | ImGuiTreeNodeFlags_NoTreePushOnOpen); } // Testing tree node with ImGuiButtonFlags_PressedOnDoubleClick button policy.
+ if (item_type == 14){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::Combo("ITEM: Combo", &current, items, IM_ARRAYSIZE(items)); }
+ if (item_type == 15){ const char* items[] = { "Apple", "Banana", "Cherry", "Kiwi" }; static int current = 1; ret = ImGui::ListBox("ITEM: ListBox", &current, items, IM_ARRAYSIZE(items), IM_ARRAYSIZE(items)); }
+
+ // Display the values of IsItemHovered() and other common item state functions.
+ // Note that the ImGuiHoveredFlags_XXX flags can be combined.
+ // Because BulletText is an item itself and that would affect the output of IsItemXXX functions,
+ // we query every state in a single call to avoid storing them and to simplify the code.
+ ImGui::BulletText(
+ "Return value = %d\n"
+ "IsItemFocused() = %d\n"
+ "IsItemHovered() = %d\n"
+ "IsItemHovered(_AllowWhenBlockedByPopup) = %d\n"
+ "IsItemHovered(_AllowWhenBlockedByActiveItem) = %d\n"
+ "IsItemHovered(_AllowWhenOverlapped) = %d\n"
+ "IsItemHovered(_AllowWhenDisabled) = %d\n"
+ "IsItemHovered(_RectOnly) = %d\n"
+ "IsItemActive() = %d\n"
+ "IsItemEdited() = %d\n"
+ "IsItemActivated() = %d\n"
+ "IsItemDeactivated() = %d\n"
+ "IsItemDeactivatedAfterEdit() = %d\n"
+ "IsItemVisible() = %d\n"
+ "IsItemClicked() = %d\n"
+ "IsItemToggledOpen() = %d\n"
+ "GetItemRectMin() = (%.1f, %.1f)\n"
+ "GetItemRectMax() = (%.1f, %.1f)\n"
+ "GetItemRectSize() = (%.1f, %.1f)",
+ ret,
+ ImGui::IsItemFocused(),
+ ImGui::IsItemHovered(),
+ ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup),
+ ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem),
+ ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenOverlapped),
+ ImGui::IsItemHovered(ImGuiHoveredFlags_AllowWhenDisabled),
+ ImGui::IsItemHovered(ImGuiHoveredFlags_RectOnly),
+ ImGui::IsItemActive(),
+ ImGui::IsItemEdited(),
+ ImGui::IsItemActivated(),
+ ImGui::IsItemDeactivated(),
+ ImGui::IsItemDeactivatedAfterEdit(),
+ ImGui::IsItemVisible(),
+ ImGui::IsItemClicked(),
+ ImGui::IsItemToggledOpen(),
+ ImGui::GetItemRectMin().x, ImGui::GetItemRectMin().y,
+ ImGui::GetItemRectMax().x, ImGui::GetItemRectMax().y,
+ ImGui::GetItemRectSize().x, ImGui::GetItemRectSize().y
+ );
+
+ if (item_disabled)
+ ImGui::EndDisabled();
+
+ char buf[1] = "";
+ ImGui::InputText("unused", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_ReadOnly);
+ ImGui::SameLine();
+ HelpMarker("This widget is only here to be able to tab-out of the widgets above and see e.g. Deactivated() status.");
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Widgets/Querying Window Status (Focused,Hovered etc.)");
+ if (ImGui::TreeNode("Querying Window Status (Focused/Hovered etc.)"))
+ {
+ static bool embed_all_inside_a_child_window = false;
+ ImGui::Checkbox("Embed everything inside a child window for testing _RootWindow flag.", &embed_all_inside_a_child_window);
+ if (embed_all_inside_a_child_window)
+ ImGui::BeginChild("outer_child", ImVec2(0, ImGui::GetFontSize() * 20.0f), true);
+
+ // Testing IsWindowFocused() function with its various flags.
+ ImGui::BulletText(
+ "IsWindowFocused() = %d\n"
+ "IsWindowFocused(_ChildWindows) = %d\n"
+ "IsWindowFocused(_ChildWindows|_NoPopupHierarchy) = %d\n"
+ "IsWindowFocused(_ChildWindows|_RootWindow) = %d\n"
+ "IsWindowFocused(_ChildWindows|_RootWindow|_NoPopupHierarchy) = %d\n"
+ "IsWindowFocused(_RootWindow) = %d\n"
+ "IsWindowFocused(_RootWindow|_NoPopupHierarchy) = %d\n"
+ "IsWindowFocused(_AnyWindow) = %d\n",
+ ImGui::IsWindowFocused(),
+ ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows),
+ ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows | ImGuiFocusedFlags_NoPopupHierarchy),
+ ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows | ImGuiFocusedFlags_RootWindow),
+ ImGui::IsWindowFocused(ImGuiFocusedFlags_ChildWindows | ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_NoPopupHierarchy),
+ ImGui::IsWindowFocused(ImGuiFocusedFlags_RootWindow),
+ ImGui::IsWindowFocused(ImGuiFocusedFlags_RootWindow | ImGuiFocusedFlags_NoPopupHierarchy),
+ ImGui::IsWindowFocused(ImGuiFocusedFlags_AnyWindow));
+
+ // Testing IsWindowHovered() function with its various flags.
+ ImGui::BulletText(
+ "IsWindowHovered() = %d\n"
+ "IsWindowHovered(_AllowWhenBlockedByPopup) = %d\n"
+ "IsWindowHovered(_AllowWhenBlockedByActiveItem) = %d\n"
+ "IsWindowHovered(_ChildWindows) = %d\n"
+ "IsWindowHovered(_ChildWindows|_NoPopupHierarchy) = %d\n"
+ "IsWindowHovered(_ChildWindows|_RootWindow) = %d\n"
+ "IsWindowHovered(_ChildWindows|_RootWindow|_NoPopupHierarchy) = %d\n"
+ "IsWindowHovered(_RootWindow) = %d\n"
+ "IsWindowHovered(_RootWindow|_NoPopupHierarchy) = %d\n"
+ "IsWindowHovered(_ChildWindows|_AllowWhenBlockedByPopup) = %d\n"
+ "IsWindowHovered(_AnyWindow) = %d\n",
+ ImGui::IsWindowHovered(),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_NoPopupHierarchy),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_RootWindow),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_NoPopupHierarchy),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_RootWindow),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_RootWindow | ImGuiHoveredFlags_NoPopupHierarchy),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_ChildWindows | ImGuiHoveredFlags_AllowWhenBlockedByPopup),
+ ImGui::IsWindowHovered(ImGuiHoveredFlags_AnyWindow));
+
+ ImGui::BeginChild("child", ImVec2(0, 50), true);
+ ImGui::Text("This is another child window for testing the _ChildWindows flag.");
+ ImGui::EndChild();
+ if (embed_all_inside_a_child_window)
+ ImGui::EndChild();
+
+ // Calling IsItemHovered() after begin returns the hovered status of the title bar.
+ // This is useful in particular if you want to create a context menu associated to the title bar of a window.
+ static bool test_window = false;
+ ImGui::Checkbox("Hovered/Active tests after Begin() for title bar testing", &test_window);
+ if (test_window)
+ {
+ ImGui::Begin("Title bar Hovered/Active tests", &test_window);
+ if (ImGui::BeginPopupContextItem()) // <-- This is using IsItemHovered()
+ {
+ if (ImGui::MenuItem("Close")) { test_window = false; }
+ ImGui::EndPopup();
+ }
+ ImGui::Text(
+ "IsItemHovered() after begin = %d (== is title bar hovered)\n"
+ "IsItemActive() after begin = %d (== is window being clicked/moved)\n",
+ ImGui::IsItemHovered(), ImGui::IsItemActive());
+ ImGui::End();
+ }
+
+ ImGui::TreePop();
+ }
+
+ // Demonstrate BeginDisabled/EndDisabled using a checkbox located at the bottom of the section (which is a bit odd:
+ // logically we'd have this checkbox at the top of the section, but we don't want this feature to steal that space)
+ if (disable_all)
+ ImGui::EndDisabled();
+
+ IMGUI_DEMO_MARKER("Widgets/Disable Block");
+ if (ImGui::TreeNode("Disable block"))
+ {
+ ImGui::Checkbox("Disable entire section above", &disable_all);
+ ImGui::SameLine(); HelpMarker("Demonstrate using BeginDisabled()/EndDisabled() across this section.");
+ ImGui::TreePop();
+ }
+}
+
+static void ShowDemoWindowLayout()
+{
+ IMGUI_DEMO_MARKER("Layout");
+ if (!ImGui::CollapsingHeader("Layout & Scrolling"))
+ return;
+
+ IMGUI_DEMO_MARKER("Layout/Child windows");
+ if (ImGui::TreeNode("Child windows"))
+ {
+ HelpMarker("Use child windows to begin into a self-contained independent scrolling/clipping regions within a host window.");
+ static bool disable_mouse_wheel = false;
+ static bool disable_menu = false;
+ ImGui::Checkbox("Disable Mouse Wheel", &disable_mouse_wheel);
+ ImGui::Checkbox("Disable Menu", &disable_menu);
+
+ // Child 1: no border, enable horizontal scrollbar
+ {
+ ImGuiWindowFlags window_flags = ImGuiWindowFlags_HorizontalScrollbar;
+ if (disable_mouse_wheel)
+ window_flags |= ImGuiWindowFlags_NoScrollWithMouse;
+ ImGui::BeginChild("ChildL", ImVec2(ImGui::GetContentRegionAvail().x * 0.5f, 260), false, window_flags);
+ for (int i = 0; i < 100; i++)
+ ImGui::Text("%04d: scrollable region", i);
+ ImGui::EndChild();
+ }
+
+ ImGui::SameLine();
+
+ // Child 2: rounded border
+ {
+ ImGuiWindowFlags window_flags = ImGuiWindowFlags_None;
+ if (disable_mouse_wheel)
+ window_flags |= ImGuiWindowFlags_NoScrollWithMouse;
+ if (!disable_menu)
+ window_flags |= ImGuiWindowFlags_MenuBar;
+ ImGui::PushStyleVar(ImGuiStyleVar_ChildRounding, 5.0f);
+ ImGui::BeginChild("ChildR", ImVec2(0, 260), true, window_flags);
+ if (!disable_menu && ImGui::BeginMenuBar())
+ {
+ if (ImGui::BeginMenu("Menu"))
+ {
+ ShowExampleMenuFile();
+ ImGui::EndMenu();
+ }
+ ImGui::EndMenuBar();
+ }
+ if (ImGui::BeginTable("split", 2, ImGuiTableFlags_Resizable | ImGuiTableFlags_NoSavedSettings))
+ {
+ for (int i = 0; i < 100; i++)
+ {
+ char buf[32];
+ sprintf(buf, "%03d", i);
+ ImGui::TableNextColumn();
+ ImGui::Button(buf, ImVec2(-FLT_MIN, 0.0f));
+ }
+ ImGui::EndTable();
+ }
+ ImGui::EndChild();
+ ImGui::PopStyleVar();
+ }
+
+ ImGui::Separator();
+
+ // Demonstrate a few extra things
+ // - Changing ImGuiCol_ChildBg (which is transparent black in default styles)
+ // - Using SetCursorPos() to position child window (the child window is an item from the POV of parent window)
+ // You can also call SetNextWindowPos() to position the child window. The parent window will effectively
+ // layout from this position.
+ // - Using ImGui::GetItemRectMin/Max() to query the "item" state (because the child window is an item from
+ // the POV of the parent window). See 'Demo->Querying Status (Edited/Active/Hovered etc.)' for details.
+ {
+ static int offset_x = 0;
+ ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8);
+ ImGui::DragInt("Offset X", &offset_x, 1.0f, -1000, 1000);
+
+ ImGui::SetCursorPosX(ImGui::GetCursorPosX() + (float)offset_x);
+ ImGui::PushStyleColor(ImGuiCol_ChildBg, IM_COL32(255, 0, 0, 100));
+ ImGui::BeginChild("Red", ImVec2(200, 100), true, ImGuiWindowFlags_None);
+ for (int n = 0; n < 50; n++)
+ ImGui::Text("Some test %d", n);
+ ImGui::EndChild();
+ bool child_is_hovered = ImGui::IsItemHovered();
+ ImVec2 child_rect_min = ImGui::GetItemRectMin();
+ ImVec2 child_rect_max = ImGui::GetItemRectMax();
+ ImGui::PopStyleColor();
+ ImGui::Text("Hovered: %d", child_is_hovered);
+ ImGui::Text("Rect of child window is: (%.0f,%.0f) (%.0f,%.0f)", child_rect_min.x, child_rect_min.y, child_rect_max.x, child_rect_max.y);
+ }
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Layout/Widgets Width");
+ if (ImGui::TreeNode("Widgets Width"))
+ {
+ static float f = 0.0f;
+ static bool show_indented_items = true;
+ ImGui::Checkbox("Show indented items", &show_indented_items);
+
+ // Use SetNextItemWidth() to set the width of a single upcoming item.
+ // Use PushItemWidth()/PopItemWidth() to set the width of a group of items.
+ // In real code use you'll probably want to choose width values that are proportional to your font size
+ // e.g. Using '20.0f * GetFontSize()' as width instead of '200.0f', etc.
+
+ ImGui::Text("SetNextItemWidth/PushItemWidth(100)");
+ ImGui::SameLine(); HelpMarker("Fixed width.");
+ ImGui::PushItemWidth(100);
+ ImGui::DragFloat("float##1b", &f);
+ if (show_indented_items)
+ {
+ ImGui::Indent();
+ ImGui::DragFloat("float (indented)##1b", &f);
+ ImGui::Unindent();
+ }
+ ImGui::PopItemWidth();
+
+ ImGui::Text("SetNextItemWidth/PushItemWidth(-100)");
+ ImGui::SameLine(); HelpMarker("Align to right edge minus 100");
+ ImGui::PushItemWidth(-100);
+ ImGui::DragFloat("float##2a", &f);
+ if (show_indented_items)
+ {
+ ImGui::Indent();
+ ImGui::DragFloat("float (indented)##2b", &f);
+ ImGui::Unindent();
+ }
+ ImGui::PopItemWidth();
+
+ ImGui::Text("SetNextItemWidth/PushItemWidth(GetContentRegionAvail().x * 0.5f)");
+ ImGui::SameLine(); HelpMarker("Half of available width.\n(~ right-cursor_pos)\n(works within a column set)");
+ ImGui::PushItemWidth(ImGui::GetContentRegionAvail().x * 0.5f);
+ ImGui::DragFloat("float##3a", &f);
+ if (show_indented_items)
+ {
+ ImGui::Indent();
+ ImGui::DragFloat("float (indented)##3b", &f);
+ ImGui::Unindent();
+ }
+ ImGui::PopItemWidth();
+
+ ImGui::Text("SetNextItemWidth/PushItemWidth(-GetContentRegionAvail().x * 0.5f)");
+ ImGui::SameLine(); HelpMarker("Align to right edge minus half");
+ ImGui::PushItemWidth(-ImGui::GetContentRegionAvail().x * 0.5f);
+ ImGui::DragFloat("float##4a", &f);
+ if (show_indented_items)
+ {
+ ImGui::Indent();
+ ImGui::DragFloat("float (indented)##4b", &f);
+ ImGui::Unindent();
+ }
+ ImGui::PopItemWidth();
+
+ // Demonstrate using PushItemWidth to surround three items.
+ // Calling SetNextItemWidth() before each of them would have the same effect.
+ ImGui::Text("SetNextItemWidth/PushItemWidth(-FLT_MIN)");
+ ImGui::SameLine(); HelpMarker("Align to right edge");
+ ImGui::PushItemWidth(-FLT_MIN);
+ ImGui::DragFloat("##float5a", &f);
+ if (show_indented_items)
+ {
+ ImGui::Indent();
+ ImGui::DragFloat("float (indented)##5b", &f);
+ ImGui::Unindent();
+ }
+ ImGui::PopItemWidth();
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Layout/Basic Horizontal Layout");
+ if (ImGui::TreeNode("Basic Horizontal Layout"))
+ {
+ ImGui::TextWrapped("(Use ImGui::SameLine() to keep adding items to the right of the preceding item)");
+
+ // Text
+ IMGUI_DEMO_MARKER("Layout/Basic Horizontal Layout/SameLine");
+ ImGui::Text("Two items: Hello"); ImGui::SameLine();
+ ImGui::TextColored(ImVec4(1,1,0,1), "Sailor");
+
+ // Adjust spacing
+ ImGui::Text("More spacing: Hello"); ImGui::SameLine(0, 20);
+ ImGui::TextColored(ImVec4(1,1,0,1), "Sailor");
+
+ // Button
+ ImGui::AlignTextToFramePadding();
+ ImGui::Text("Normal buttons"); ImGui::SameLine();
+ ImGui::Button("Banana"); ImGui::SameLine();
+ ImGui::Button("Apple"); ImGui::SameLine();
+ ImGui::Button("Corniflower");
+
+ // Button
+ ImGui::Text("Small buttons"); ImGui::SameLine();
+ ImGui::SmallButton("Like this one"); ImGui::SameLine();
+ ImGui::Text("can fit within a text block.");
+
+ // Aligned to arbitrary position. Easy/cheap column.
+ IMGUI_DEMO_MARKER("Layout/Basic Horizontal Layout/SameLine (with offset)");
+ ImGui::Text("Aligned");
+ ImGui::SameLine(150); ImGui::Text("x=150");
+ ImGui::SameLine(300); ImGui::Text("x=300");
+ ImGui::Text("Aligned");
+ ImGui::SameLine(150); ImGui::SmallButton("x=150");
+ ImGui::SameLine(300); ImGui::SmallButton("x=300");
+
+ // Checkbox
+ IMGUI_DEMO_MARKER("Layout/Basic Horizontal Layout/SameLine (more)");
+ static bool c1 = false, c2 = false, c3 = false, c4 = false;
+ ImGui::Checkbox("My", &c1); ImGui::SameLine();
+ ImGui::Checkbox("Tailor", &c2); ImGui::SameLine();
+ ImGui::Checkbox("Is", &c3); ImGui::SameLine();
+ ImGui::Checkbox("Rich", &c4);
+
+ // Various
+ static float f0 = 1.0f, f1 = 2.0f, f2 = 3.0f;
+ ImGui::PushItemWidth(80);
+ const char* items[] = { "AAAA", "BBBB", "CCCC", "DDDD" };
+ static int item = -1;
+ ImGui::Combo("Combo", &item, items, IM_ARRAYSIZE(items)); ImGui::SameLine();
+ ImGui::SliderFloat("X", &f0, 0.0f, 5.0f); ImGui::SameLine();
+ ImGui::SliderFloat("Y", &f1, 0.0f, 5.0f); ImGui::SameLine();
+ ImGui::SliderFloat("Z", &f2, 0.0f, 5.0f);
+ ImGui::PopItemWidth();
+
+ ImGui::PushItemWidth(80);
+ ImGui::Text("Lists:");
+ static int selection[4] = { 0, 1, 2, 3 };
+ for (int i = 0; i < 4; i++)
+ {
+ if (i > 0) ImGui::SameLine();
+ ImGui::PushID(i);
+ ImGui::ListBox("", &selection[i], items, IM_ARRAYSIZE(items));
+ ImGui::PopID();
+ //if (ImGui::IsItemHovered()) ImGui::SetTooltip("ListBox %d hovered", i);
+ }
+ ImGui::PopItemWidth();
+
+ // Dummy
+ IMGUI_DEMO_MARKER("Layout/Basic Horizontal Layout/Dummy");
+ ImVec2 button_sz(40, 40);
+ ImGui::Button("A", button_sz); ImGui::SameLine();
+ ImGui::Dummy(button_sz); ImGui::SameLine();
+ ImGui::Button("B", button_sz);
+
+ // Manually wrapping
+ // (we should eventually provide this as an automatic layout feature, but for now you can do it manually)
+ IMGUI_DEMO_MARKER("Layout/Basic Horizontal Layout/Manual wrapping");
+ ImGui::Text("Manual wrapping:");
+ ImGuiStyle& style = ImGui::GetStyle();
+ int buttons_count = 20;
+ float window_visible_x2 = ImGui::GetWindowPos().x + ImGui::GetWindowContentRegionMax().x;
+ for (int n = 0; n < buttons_count; n++)
+ {
+ ImGui::PushID(n);
+ ImGui::Button("Box", button_sz);
+ float last_button_x2 = ImGui::GetItemRectMax().x;
+ float next_button_x2 = last_button_x2 + style.ItemSpacing.x + button_sz.x; // Expected position if next button was on same line
+ if (n + 1 < buttons_count && next_button_x2 < window_visible_x2)
+ ImGui::SameLine();
+ ImGui::PopID();
+ }
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Layout/Groups");
+ if (ImGui::TreeNode("Groups"))
+ {
+ HelpMarker(
+ "BeginGroup() basically locks the horizontal position for new line. "
+ "EndGroup() bundles the whole group so that you can use \"item\" functions such as "
+ "IsItemHovered()/IsItemActive() or SameLine() etc. on the whole group.");
+ ImGui::BeginGroup();
+ {
+ ImGui::BeginGroup();
+ ImGui::Button("AAA");
+ ImGui::SameLine();
+ ImGui::Button("BBB");
+ ImGui::SameLine();
+ ImGui::BeginGroup();
+ ImGui::Button("CCC");
+ ImGui::Button("DDD");
+ ImGui::EndGroup();
+ ImGui::SameLine();
+ ImGui::Button("EEE");
+ ImGui::EndGroup();
+ if (ImGui::IsItemHovered())
+ ImGui::SetTooltip("First group hovered");
+ }
+ // Capture the group size and create widgets using the same size
+ ImVec2 size = ImGui::GetItemRectSize();
+ const float values[5] = { 0.5f, 0.20f, 0.80f, 0.60f, 0.25f };
+ ImGui::PlotHistogram("##values", values, IM_ARRAYSIZE(values), 0, NULL, 0.0f, 1.0f, size);
+
+ ImGui::Button("ACTION", ImVec2((size.x - ImGui::GetStyle().ItemSpacing.x) * 0.5f, size.y));
+ ImGui::SameLine();
+ ImGui::Button("REACTION", ImVec2((size.x - ImGui::GetStyle().ItemSpacing.x) * 0.5f, size.y));
+ ImGui::EndGroup();
+ ImGui::SameLine();
+
+ ImGui::Button("LEVERAGE\nBUZZWORD", size);
+ ImGui::SameLine();
+
+ if (ImGui::BeginListBox("List", size))
+ {
+ ImGui::Selectable("Selected", true);
+ ImGui::Selectable("Not Selected", false);
+ ImGui::EndListBox();
+ }
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Layout/Text Baseline Alignment");
+ if (ImGui::TreeNode("Text Baseline Alignment"))
+ {
+ {
+ ImGui::BulletText("Text baseline:");
+ ImGui::SameLine(); HelpMarker(
+ "This is testing the vertical alignment that gets applied on text to keep it aligned with widgets. "
+ "Lines only composed of text or \"small\" widgets use less vertical space than lines with framed widgets.");
+ ImGui::Indent();
+
+ ImGui::Text("KO Blahblah"); ImGui::SameLine();
+ ImGui::Button("Some framed item"); ImGui::SameLine();
+ HelpMarker("Baseline of button will look misaligned with text..");
+
+ // If your line starts with text, call AlignTextToFramePadding() to align text to upcoming widgets.
+ // (because we don't know what's coming after the Text() statement, we need to move the text baseline
+ // down by FramePadding.y ahead of time)
+ ImGui::AlignTextToFramePadding();
+ ImGui::Text("OK Blahblah"); ImGui::SameLine();
+ ImGui::Button("Some framed item"); ImGui::SameLine();
+ HelpMarker("We call AlignTextToFramePadding() to vertically align the text baseline by +FramePadding.y");
+
+ // SmallButton() uses the same vertical padding as Text
+ ImGui::Button("TEST##1"); ImGui::SameLine();
+ ImGui::Text("TEST"); ImGui::SameLine();
+ ImGui::SmallButton("TEST##2");
+
+ // If your line starts with text, call AlignTextToFramePadding() to align text to upcoming widgets.
+ ImGui::AlignTextToFramePadding();
+ ImGui::Text("Text aligned to framed item"); ImGui::SameLine();
+ ImGui::Button("Item##1"); ImGui::SameLine();
+ ImGui::Text("Item"); ImGui::SameLine();
+ ImGui::SmallButton("Item##2"); ImGui::SameLine();
+ ImGui::Button("Item##3");
+
+ ImGui::Unindent();
+ }
+
+ ImGui::Spacing();
+
+ {
+ ImGui::BulletText("Multi-line text:");
+ ImGui::Indent();
+ ImGui::Text("One\nTwo\nThree"); ImGui::SameLine();
+ ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+ ImGui::Text("Banana");
+
+ ImGui::Text("Banana"); ImGui::SameLine();
+ ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+ ImGui::Text("One\nTwo\nThree");
+
+ ImGui::Button("HOP##1"); ImGui::SameLine();
+ ImGui::Text("Banana"); ImGui::SameLine();
+ ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+ ImGui::Text("Banana");
+
+ ImGui::Button("HOP##2"); ImGui::SameLine();
+ ImGui::Text("Hello\nWorld"); ImGui::SameLine();
+ ImGui::Text("Banana");
+ ImGui::Unindent();
+ }
+
+ ImGui::Spacing();
+
+ {
+ ImGui::BulletText("Misc items:");
+ ImGui::Indent();
+
+ // SmallButton() sets FramePadding to zero. Text baseline is aligned to match baseline of previous Button.
+ ImGui::Button("80x80", ImVec2(80, 80));
+ ImGui::SameLine();
+ ImGui::Button("50x50", ImVec2(50, 50));
+ ImGui::SameLine();
+ ImGui::Button("Button()");
+ ImGui::SameLine();
+ ImGui::SmallButton("SmallButton()");
+
+ // Tree
+ const float spacing = ImGui::GetStyle().ItemInnerSpacing.x;
+ ImGui::Button("Button##1");
+ ImGui::SameLine(0.0f, spacing);
+ if (ImGui::TreeNode("Node##1"))
+ {
+ // Placeholder tree data
+ for (int i = 0; i < 6; i++)
+ ImGui::BulletText("Item %d..", i);
+ ImGui::TreePop();
+ }
+
+ // Vertically align text node a bit lower so it'll be vertically centered with upcoming widget.
+ // Otherwise you can use SmallButton() (smaller fit).
+ ImGui::AlignTextToFramePadding();
+
+ // Common mistake to avoid: if we want to SameLine after TreeNode we need to do it before we add
+ // other contents below the node.
+ bool node_open = ImGui::TreeNode("Node##2");
+ ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##2");
+ if (node_open)
+ {
+ // Placeholder tree data
+ for (int i = 0; i < 6; i++)
+ ImGui::BulletText("Item %d..", i);
+ ImGui::TreePop();
+ }
+
+ // Bullet
+ ImGui::Button("Button##3");
+ ImGui::SameLine(0.0f, spacing);
+ ImGui::BulletText("Bullet text");
+
+ ImGui::AlignTextToFramePadding();
+ ImGui::BulletText("Node");
+ ImGui::SameLine(0.0f, spacing); ImGui::Button("Button##4");
+ ImGui::Unindent();
+ }
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Layout/Scrolling");
+ if (ImGui::TreeNode("Scrolling"))
+ {
+ // Vertical scroll functions
+ IMGUI_DEMO_MARKER("Layout/Scrolling/Vertical");
+ HelpMarker("Use SetScrollHereY() or SetScrollFromPosY() to scroll to a given vertical position.");
+
+ static int track_item = 50;
+ static bool enable_track = true;
+ static bool enable_extra_decorations = false;
+ static float scroll_to_off_px = 0.0f;
+ static float scroll_to_pos_px = 200.0f;
+
+ ImGui::Checkbox("Decoration", &enable_extra_decorations);
+
+ ImGui::Checkbox("Track", &enable_track);
+ ImGui::PushItemWidth(100);
+ ImGui::SameLine(140); enable_track |= ImGui::DragInt("##item", &track_item, 0.25f, 0, 99, "Item = %d");
+
+ bool scroll_to_off = ImGui::Button("Scroll Offset");
+ ImGui::SameLine(140); scroll_to_off |= ImGui::DragFloat("##off", &scroll_to_off_px, 1.00f, 0, FLT_MAX, "+%.0f px");
+
+ bool scroll_to_pos = ImGui::Button("Scroll To Pos");
+ ImGui::SameLine(140); scroll_to_pos |= ImGui::DragFloat("##pos", &scroll_to_pos_px, 1.00f, -10, FLT_MAX, "X/Y = %.0f px");
+ ImGui::PopItemWidth();
+
+ if (scroll_to_off || scroll_to_pos)
+ enable_track = false;
+
+ ImGuiStyle& style = ImGui::GetStyle();
+ float child_w = (ImGui::GetContentRegionAvail().x - 4 * style.ItemSpacing.x) / 5;
+ if (child_w < 1.0f)
+ child_w = 1.0f;
+ ImGui::PushID("##VerticalScrolling");
+ for (int i = 0; i < 5; i++)
+ {
+ if (i > 0) ImGui::SameLine();
+ ImGui::BeginGroup();
+ const char* names[] = { "Top", "25%", "Center", "75%", "Bottom" };
+ ImGui::TextUnformatted(names[i]);
+
+ const ImGuiWindowFlags child_flags = enable_extra_decorations ? ImGuiWindowFlags_MenuBar : 0;
+ const ImGuiID child_id = ImGui::GetID((void*)(intptr_t)i);
+ const bool child_is_visible = ImGui::BeginChild(child_id, ImVec2(child_w, 200.0f), true, child_flags);
+ if (ImGui::BeginMenuBar())
+ {
+ ImGui::TextUnformatted("abc");
+ ImGui::EndMenuBar();
+ }
+ if (scroll_to_off)
+ ImGui::SetScrollY(scroll_to_off_px);
+ if (scroll_to_pos)
+ ImGui::SetScrollFromPosY(ImGui::GetCursorStartPos().y + scroll_to_pos_px, i * 0.25f);
+ if (child_is_visible) // Avoid calling SetScrollHereY when running with culled items
+ {
+ for (int item = 0; item < 100; item++)
+ {
+ if (enable_track && item == track_item)
+ {
+ ImGui::TextColored(ImVec4(1, 1, 0, 1), "Item %d", item);
+ ImGui::SetScrollHereY(i * 0.25f); // 0.0f:top, 0.5f:center, 1.0f:bottom
+ }
+ else
+ {
+ ImGui::Text("Item %d", item);
+ }
+ }
+ }
+ float scroll_y = ImGui::GetScrollY();
+ float scroll_max_y = ImGui::GetScrollMaxY();
+ ImGui::EndChild();
+ ImGui::Text("%.0f/%.0f", scroll_y, scroll_max_y);
+ ImGui::EndGroup();
+ }
+ ImGui::PopID();
+
+ // Horizontal scroll functions
+ IMGUI_DEMO_MARKER("Layout/Scrolling/Horizontal");
+ ImGui::Spacing();
+ HelpMarker(
+ "Use SetScrollHereX() or SetScrollFromPosX() to scroll to a given horizontal position.\n\n"
+ "Because the clipping rectangle of most window hides half worth of WindowPadding on the "
+ "left/right, using SetScrollFromPosX(+1) will usually result in clipped text whereas the "
+ "equivalent SetScrollFromPosY(+1) wouldn't.");
+ ImGui::PushID("##HorizontalScrolling");
+ for (int i = 0; i < 5; i++)
+ {
+ float child_height = ImGui::GetTextLineHeight() + style.ScrollbarSize + style.WindowPadding.y * 2.0f;
+ ImGuiWindowFlags child_flags = ImGuiWindowFlags_HorizontalScrollbar | (enable_extra_decorations ? ImGuiWindowFlags_AlwaysVerticalScrollbar : 0);
+ ImGuiID child_id = ImGui::GetID((void*)(intptr_t)i);
+ bool child_is_visible = ImGui::BeginChild(child_id, ImVec2(-100, child_height), true, child_flags);
+ if (scroll_to_off)
+ ImGui::SetScrollX(scroll_to_off_px);
+ if (scroll_to_pos)
+ ImGui::SetScrollFromPosX(ImGui::GetCursorStartPos().x + scroll_to_pos_px, i * 0.25f);
+ if (child_is_visible) // Avoid calling SetScrollHereY when running with culled items
+ {
+ for (int item = 0; item < 100; item++)
+ {
+ if (item > 0)
+ ImGui::SameLine();
+ if (enable_track && item == track_item)
+ {
+ ImGui::TextColored(ImVec4(1, 1, 0, 1), "Item %d", item);
+ ImGui::SetScrollHereX(i * 0.25f); // 0.0f:left, 0.5f:center, 1.0f:right
+ }
+ else
+ {
+ ImGui::Text("Item %d", item);
+ }
+ }
+ }
+ float scroll_x = ImGui::GetScrollX();
+ float scroll_max_x = ImGui::GetScrollMaxX();
+ ImGui::EndChild();
+ ImGui::SameLine();
+ const char* names[] = { "Left", "25%", "Center", "75%", "Right" };
+ ImGui::Text("%s\n%.0f/%.0f", names[i], scroll_x, scroll_max_x);
+ ImGui::Spacing();
+ }
+ ImGui::PopID();
+
+ // Miscellaneous Horizontal Scrolling Demo
+ IMGUI_DEMO_MARKER("Layout/Scrolling/Horizontal (more)");
+ HelpMarker(
+ "Horizontal scrolling for a window is enabled via the ImGuiWindowFlags_HorizontalScrollbar flag.\n\n"
+ "You may want to also explicitly specify content width by using SetNextWindowContentWidth() before Begin().");
+ static int lines = 7;
+ ImGui::SliderInt("Lines", &lines, 1, 15);
+ ImGui::PushStyleVar(ImGuiStyleVar_FrameRounding, 3.0f);
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2.0f, 1.0f));
+ ImVec2 scrolling_child_size = ImVec2(0, ImGui::GetFrameHeightWithSpacing() * 7 + 30);
+ ImGui::BeginChild("scrolling", scrolling_child_size, true, ImGuiWindowFlags_HorizontalScrollbar);
+ for (int line = 0; line < lines; line++)
+ {
+ // Display random stuff. For the sake of this trivial demo we are using basic Button() + SameLine()
+ // If you want to create your own time line for a real application you may be better off manipulating
+ // the cursor position yourself, aka using SetCursorPos/SetCursorScreenPos to position the widgets
+ // yourself. You may also want to use the lower-level ImDrawList API.
+ int num_buttons = 10 + ((line & 1) ? line * 9 : line * 3);
+ for (int n = 0; n < num_buttons; n++)
+ {
+ if (n > 0) ImGui::SameLine();
+ ImGui::PushID(n + line * 1000);
+ char num_buf[16];
+ sprintf(num_buf, "%d", n);
+ const char* label = (!(n % 15)) ? "FizzBuzz" : (!(n % 3)) ? "Fizz" : (!(n % 5)) ? "Buzz" : num_buf;
+ float hue = n * 0.05f;
+ ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor::HSV(hue, 0.6f, 0.6f));
+ ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor::HSV(hue, 0.7f, 0.7f));
+ ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor::HSV(hue, 0.8f, 0.8f));
+ ImGui::Button(label, ImVec2(40.0f + sinf((float)(line + n)) * 20.0f, 0.0f));
+ ImGui::PopStyleColor(3);
+ ImGui::PopID();
+ }
+ }
+ float scroll_x = ImGui::GetScrollX();
+ float scroll_max_x = ImGui::GetScrollMaxX();
+ ImGui::EndChild();
+ ImGui::PopStyleVar(2);
+ float scroll_x_delta = 0.0f;
+ ImGui::SmallButton("<<");
+ if (ImGui::IsItemActive())
+ scroll_x_delta = -ImGui::GetIO().DeltaTime * 1000.0f;
+ ImGui::SameLine();
+ ImGui::Text("Scroll from code"); ImGui::SameLine();
+ ImGui::SmallButton(">>");
+ if (ImGui::IsItemActive())
+ scroll_x_delta = +ImGui::GetIO().DeltaTime * 1000.0f;
+ ImGui::SameLine();
+ ImGui::Text("%.0f/%.0f", scroll_x, scroll_max_x);
+ if (scroll_x_delta != 0.0f)
+ {
+ // Demonstrate a trick: you can use Begin to set yourself in the context of another window
+ // (here we are already out of your child window)
+ ImGui::BeginChild("scrolling");
+ ImGui::SetScrollX(ImGui::GetScrollX() + scroll_x_delta);
+ ImGui::EndChild();
+ }
+ ImGui::Spacing();
+
+ static bool show_horizontal_contents_size_demo_window = false;
+ ImGui::Checkbox("Show Horizontal contents size demo window", &show_horizontal_contents_size_demo_window);
+
+ if (show_horizontal_contents_size_demo_window)
+ {
+ static bool show_h_scrollbar = true;
+ static bool show_button = true;
+ static bool show_tree_nodes = true;
+ static bool show_text_wrapped = false;
+ static bool show_columns = true;
+ static bool show_tab_bar = true;
+ static bool show_child = false;
+ static bool explicit_content_size = false;
+ static float contents_size_x = 300.0f;
+ if (explicit_content_size)
+ ImGui::SetNextWindowContentSize(ImVec2(contents_size_x, 0.0f));
+ ImGui::Begin("Horizontal contents size demo window", &show_horizontal_contents_size_demo_window, show_h_scrollbar ? ImGuiWindowFlags_HorizontalScrollbar : 0);
+ IMGUI_DEMO_MARKER("Layout/Scrolling/Horizontal contents size demo window");
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(2, 0));
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 0));
+ HelpMarker("Test of different widgets react and impact the work rectangle growing when horizontal scrolling is enabled.\n\nUse 'Metrics->Tools->Show windows rectangles' to visualize rectangles.");
+ ImGui::Checkbox("H-scrollbar", &show_h_scrollbar);
+ ImGui::Checkbox("Button", &show_button); // Will grow contents size (unless explicitly overwritten)
+ ImGui::Checkbox("Tree nodes", &show_tree_nodes); // Will grow contents size and display highlight over full width
+ ImGui::Checkbox("Text wrapped", &show_text_wrapped);// Will grow and use contents size
+ ImGui::Checkbox("Columns", &show_columns); // Will use contents size
+ ImGui::Checkbox("Tab bar", &show_tab_bar); // Will use contents size
+ ImGui::Checkbox("Child", &show_child); // Will grow and use contents size
+ ImGui::Checkbox("Explicit content size", &explicit_content_size);
+ ImGui::Text("Scroll %.1f/%.1f %.1f/%.1f", ImGui::GetScrollX(), ImGui::GetScrollMaxX(), ImGui::GetScrollY(), ImGui::GetScrollMaxY());
+ if (explicit_content_size)
+ {
+ ImGui::SameLine();
+ ImGui::SetNextItemWidth(100);
+ ImGui::DragFloat("##csx", &contents_size_x);
+ ImVec2 p = ImGui::GetCursorScreenPos();
+ ImGui::GetWindowDrawList()->AddRectFilled(p, ImVec2(p.x + 10, p.y + 10), IM_COL32_WHITE);
+ ImGui::GetWindowDrawList()->AddRectFilled(ImVec2(p.x + contents_size_x - 10, p.y), ImVec2(p.x + contents_size_x, p.y + 10), IM_COL32_WHITE);
+ ImGui::Dummy(ImVec2(0, 10));
+ }
+ ImGui::PopStyleVar(2);
+ ImGui::Separator();
+ if (show_button)
+ {
+ ImGui::Button("this is a 300-wide button", ImVec2(300, 0));
+ }
+ if (show_tree_nodes)
+ {
+ bool open = true;
+ if (ImGui::TreeNode("this is a tree node"))
+ {
+ if (ImGui::TreeNode("another one of those tree node..."))
+ {
+ ImGui::Text("Some tree contents");
+ ImGui::TreePop();
+ }
+ ImGui::TreePop();
+ }
+ ImGui::CollapsingHeader("CollapsingHeader", &open);
+ }
+ if (show_text_wrapped)
+ {
+ ImGui::TextWrapped("This text should automatically wrap on the edge of the work rectangle.");
+ }
+ if (show_columns)
+ {
+ ImGui::Text("Tables:");
+ if (ImGui::BeginTable("table", 4, ImGuiTableFlags_Borders))
+ {
+ for (int n = 0; n < 4; n++)
+ {
+ ImGui::TableNextColumn();
+ ImGui::Text("Width %.2f", ImGui::GetContentRegionAvail().x);
+ }
+ ImGui::EndTable();
+ }
+ ImGui::Text("Columns:");
+ ImGui::Columns(4);
+ for (int n = 0; n < 4; n++)
+ {
+ ImGui::Text("Width %.2f", ImGui::GetColumnWidth());
+ ImGui::NextColumn();
+ }
+ ImGui::Columns(1);
+ }
+ if (show_tab_bar && ImGui::BeginTabBar("Hello"))
+ {
+ if (ImGui::BeginTabItem("OneOneOne")) { ImGui::EndTabItem(); }
+ if (ImGui::BeginTabItem("TwoTwoTwo")) { ImGui::EndTabItem(); }
+ if (ImGui::BeginTabItem("ThreeThreeThree")) { ImGui::EndTabItem(); }
+ if (ImGui::BeginTabItem("FourFourFour")) { ImGui::EndTabItem(); }
+ ImGui::EndTabBar();
+ }
+ if (show_child)
+ {
+ ImGui::BeginChild("child", ImVec2(0, 0), true);
+ ImGui::EndChild();
+ }
+ ImGui::End();
+ }
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Layout/Clipping");
+ if (ImGui::TreeNode("Clipping"))
+ {
+ static ImVec2 size(100.0f, 100.0f);
+ static ImVec2 offset(30.0f, 30.0f);
+ ImGui::DragFloat2("size", (float*)&size, 0.5f, 1.0f, 200.0f, "%.0f");
+ ImGui::TextWrapped("(Click and drag to scroll)");
+
+ HelpMarker(
+ "(Left) Using ImGui::PushClipRect():\n"
+ "Will alter ImGui hit-testing logic + ImDrawList rendering.\n"
+ "(use this if you want your clipping rectangle to affect interactions)\n\n"
+ "(Center) Using ImDrawList::PushClipRect():\n"
+ "Will alter ImDrawList rendering only.\n"
+ "(use this as a shortcut if you are only using ImDrawList calls)\n\n"
+ "(Right) Using ImDrawList::AddText() with a fine ClipRect:\n"
+ "Will alter only this specific ImDrawList::AddText() rendering.\n"
+ "This is often used internally to avoid altering the clipping rectangle and minimize draw calls.");
+
+ for (int n = 0; n < 3; n++)
+ {
+ if (n > 0)
+ ImGui::SameLine();
+
+ ImGui::PushID(n);
+ ImGui::InvisibleButton("##canvas", size);
+ if (ImGui::IsItemActive() && ImGui::IsMouseDragging(ImGuiMouseButton_Left))
+ {
+ offset.x += ImGui::GetIO().MouseDelta.x;
+ offset.y += ImGui::GetIO().MouseDelta.y;
+ }
+ ImGui::PopID();
+ if (!ImGui::IsItemVisible()) // Skip rendering as ImDrawList elements are not clipped.
+ continue;
+
+ const ImVec2 p0 = ImGui::GetItemRectMin();
+ const ImVec2 p1 = ImGui::GetItemRectMax();
+ const char* text_str = "Line 1 hello\nLine 2 clip me!";
+ const ImVec2 text_pos = ImVec2(p0.x + offset.x, p0.y + offset.y);
+ ImDrawList* draw_list = ImGui::GetWindowDrawList();
+ switch (n)
+ {
+ case 0:
+ ImGui::PushClipRect(p0, p1, true);
+ draw_list->AddRectFilled(p0, p1, IM_COL32(90, 90, 120, 255));
+ draw_list->AddText(text_pos, IM_COL32_WHITE, text_str);
+ ImGui::PopClipRect();
+ break;
+ case 1:
+ draw_list->PushClipRect(p0, p1, true);
+ draw_list->AddRectFilled(p0, p1, IM_COL32(90, 90, 120, 255));
+ draw_list->AddText(text_pos, IM_COL32_WHITE, text_str);
+ draw_list->PopClipRect();
+ break;
+ case 2:
+ ImVec4 clip_rect(p0.x, p0.y, p1.x, p1.y); // AddText() takes a ImVec4* here so let's convert.
+ draw_list->AddRectFilled(p0, p1, IM_COL32(90, 90, 120, 255));
+ draw_list->AddText(ImGui::GetFont(), ImGui::GetFontSize(), text_pos, IM_COL32_WHITE, text_str, NULL, 0.0f, &clip_rect);
+ break;
+ }
+ }
+
+ ImGui::TreePop();
+ }
+}
+
+static void ShowDemoWindowPopups()
+{
+ IMGUI_DEMO_MARKER("Popups");
+ if (!ImGui::CollapsingHeader("Popups & Modal windows"))
+ return;
+
+ // The properties of popups windows are:
+ // - They block normal mouse hovering detection outside them. (*)
+ // - Unless modal, they can be closed by clicking anywhere outside them, or by pressing ESCAPE.
+ // - Their visibility state (~bool) is held internally by Dear ImGui instead of being held by the programmer as
+ // we are used to with regular Begin() calls. User can manipulate the visibility state by calling OpenPopup().
+ // (*) One can use IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup) to bypass it and detect hovering even
+ // when normally blocked by a popup.
+ // Those three properties are connected. The library needs to hold their visibility state BECAUSE it can close
+ // popups at any time.
+
+ // Typical use for regular windows:
+ // bool my_tool_is_active = false; if (ImGui::Button("Open")) my_tool_is_active = true; [...] if (my_tool_is_active) Begin("My Tool", &my_tool_is_active) { [...] } End();
+ // Typical use for popups:
+ // if (ImGui::Button("Open")) ImGui::OpenPopup("MyPopup"); if (ImGui::BeginPopup("MyPopup") { [...] EndPopup(); }
+
+ // With popups we have to go through a library call (here OpenPopup) to manipulate the visibility state.
+ // This may be a bit confusing at first but it should quickly make sense. Follow on the examples below.
+
+ IMGUI_DEMO_MARKER("Popups/Popups");
+ if (ImGui::TreeNode("Popups"))
+ {
+ ImGui::TextWrapped(
+ "When a popup is active, it inhibits interacting with windows that are behind the popup. "
+ "Clicking outside the popup closes it.");
+
+ static int selected_fish = -1;
+ const char* names[] = { "Bream", "Haddock", "Mackerel", "Pollock", "Tilefish" };
+ static bool toggles[] = { true, false, false, false, false };
+
+ // Simple selection popup (if you want to show the current selection inside the Button itself,
+ // you may want to build a string using the "###" operator to preserve a constant ID with a variable label)
+ if (ImGui::Button("Select.."))
+ ImGui::OpenPopup("my_select_popup");
+ ImGui::SameLine();
+ ImGui::TextUnformatted(selected_fish == -1 ? "<None>" : names[selected_fish]);
+ if (ImGui::BeginPopup("my_select_popup"))
+ {
+ ImGui::Text("Aquarium");
+ ImGui::Separator();
+ for (int i = 0; i < IM_ARRAYSIZE(names); i++)
+ if (ImGui::Selectable(names[i]))
+ selected_fish = i;
+ ImGui::EndPopup();
+ }
+
+ // Showing a menu with toggles
+ if (ImGui::Button("Toggle.."))
+ ImGui::OpenPopup("my_toggle_popup");
+ if (ImGui::BeginPopup("my_toggle_popup"))
+ {
+ for (int i = 0; i < IM_ARRAYSIZE(names); i++)
+ ImGui::MenuItem(names[i], "", &toggles[i]);
+ if (ImGui::BeginMenu("Sub-menu"))
+ {
+ ImGui::MenuItem("Click me");
+ ImGui::EndMenu();
+ }
+
+ ImGui::Separator();
+ ImGui::Text("Tooltip here");
+ if (ImGui::IsItemHovered())
+ ImGui::SetTooltip("I am a tooltip over a popup");
+
+ if (ImGui::Button("Stacked Popup"))
+ ImGui::OpenPopup("another popup");
+ if (ImGui::BeginPopup("another popup"))
+ {
+ for (int i = 0; i < IM_ARRAYSIZE(names); i++)
+ ImGui::MenuItem(names[i], "", &toggles[i]);
+ if (ImGui::BeginMenu("Sub-menu"))
+ {
+ ImGui::MenuItem("Click me");
+ if (ImGui::Button("Stacked Popup"))
+ ImGui::OpenPopup("another popup");
+ if (ImGui::BeginPopup("another popup"))
+ {
+ ImGui::Text("I am the last one here.");
+ ImGui::EndPopup();
+ }
+ ImGui::EndMenu();
+ }
+ ImGui::EndPopup();
+ }
+ ImGui::EndPopup();
+ }
+
+ // Call the more complete ShowExampleMenuFile which we use in various places of this demo
+ if (ImGui::Button("With a menu.."))
+ ImGui::OpenPopup("my_file_popup");
+ if (ImGui::BeginPopup("my_file_popup", ImGuiWindowFlags_MenuBar))
+ {
+ if (ImGui::BeginMenuBar())
+ {
+ if (ImGui::BeginMenu("File"))
+ {
+ ShowExampleMenuFile();
+ ImGui::EndMenu();
+ }
+ if (ImGui::BeginMenu("Edit"))
+ {
+ ImGui::MenuItem("Dummy");
+ ImGui::EndMenu();
+ }
+ ImGui::EndMenuBar();
+ }
+ ImGui::Text("Hello from popup!");
+ ImGui::Button("This is a dummy button..");
+ ImGui::EndPopup();
+ }
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Popups/Context menus");
+ if (ImGui::TreeNode("Context menus"))
+ {
+ HelpMarker("\"Context\" functions are simple helpers to associate a Popup to a given Item or Window identifier.");
+
+ // BeginPopupContextItem() is a helper to provide common/simple popup behavior of essentially doing:
+ // if (id == 0)
+ // id = GetItemID(); // Use last item id
+ // if (IsItemHovered() && IsMouseReleased(ImGuiMouseButton_Right))
+ // OpenPopup(id);
+ // return BeginPopup(id);
+ // For advanced advanced uses you may want to replicate and customize this code.
+ // See more details in BeginPopupContextItem().
+
+ // Example 1
+ // When used after an item that has an ID (e.g. Button), we can skip providing an ID to BeginPopupContextItem(),
+ // and BeginPopupContextItem() will use the last item ID as the popup ID.
+ {
+ const char* names[5] = { "Label1", "Label2", "Label3", "Label4", "Label5" };
+ for (int n = 0; n < 5; n++)
+ {
+ ImGui::Selectable(names[n]);
+ if (ImGui::BeginPopupContextItem()) // <-- use last item id as popup id
+ {
+ ImGui::Text("This a popup for \"%s\"!", names[n]);
+ if (ImGui::Button("Close"))
+ ImGui::CloseCurrentPopup();
+ ImGui::EndPopup();
+ }
+ if (ImGui::IsItemHovered())
+ ImGui::SetTooltip("Right-click to open popup");
+ }
+ }
+
+ // Example 2
+ // Popup on a Text() element which doesn't have an identifier: we need to provide an identifier to BeginPopupContextItem().
+ // Using an explicit identifier is also convenient if you want to activate the popups from different locations.
+ {
+ HelpMarker("Text() elements don't have stable identifiers so we need to provide one.");
+ static float value = 0.5f;
+ ImGui::Text("Value = %.3f <-- (1) right-click this text", value);
+ if (ImGui::BeginPopupContextItem("my popup"))
+ {
+ if (ImGui::Selectable("Set to zero")) value = 0.0f;
+ if (ImGui::Selectable("Set to PI")) value = 3.1415f;
+ ImGui::SetNextItemWidth(-FLT_MIN);
+ ImGui::DragFloat("##Value", &value, 0.1f, 0.0f, 0.0f);
+ ImGui::EndPopup();
+ }
+
+ // We can also use OpenPopupOnItemClick() to toggle the visibility of a given popup.
+ // Here we make it that right-clicking this other text element opens the same popup as above.
+ // The popup itself will be submitted by the code above.
+ ImGui::Text("(2) Or right-click this text");
+ ImGui::OpenPopupOnItemClick("my popup", ImGuiPopupFlags_MouseButtonRight);
+
+ // Back to square one: manually open the same popup.
+ if (ImGui::Button("(3) Or click this button"))
+ ImGui::OpenPopup("my popup");
+ }
+
+ // Example 3
+ // When using BeginPopupContextItem() with an implicit identifier (NULL == use last item ID),
+ // we need to make sure your item identifier is stable.
+ // In this example we showcase altering the item label while preserving its identifier, using the ### operator (see FAQ).
+ {
+ HelpMarker("Showcase using a popup ID linked to item ID, with the item having a changing label + stable ID using the ### operator.");
+ static char name[32] = "Label1";
+ char buf[64];
+ sprintf(buf, "Button: %s###Button", name); // ### operator override ID ignoring the preceding label
+ ImGui::Button(buf);
+ if (ImGui::BeginPopupContextItem())
+ {
+ ImGui::Text("Edit name:");
+ ImGui::InputText("##edit", name, IM_ARRAYSIZE(name));
+ if (ImGui::Button("Close"))
+ ImGui::CloseCurrentPopup();
+ ImGui::EndPopup();
+ }
+ ImGui::SameLine(); ImGui::Text("(<-- right-click here)");
+ }
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Popups/Modals");
+ if (ImGui::TreeNode("Modals"))
+ {
+ ImGui::TextWrapped("Modal windows are like popups but the user cannot close them by clicking outside.");
+
+ if (ImGui::Button("Delete.."))
+ ImGui::OpenPopup("Delete?");
+
+ // Always center this window when appearing
+ ImVec2 center = ImGui::GetMainViewport()->GetCenter();
+ ImGui::SetNextWindowPos(center, ImGuiCond_Appearing, ImVec2(0.5f, 0.5f));
+
+ if (ImGui::BeginPopupModal("Delete?", NULL, ImGuiWindowFlags_AlwaysAutoResize))
+ {
+ ImGui::Text("All those beautiful files will be deleted.\nThis operation cannot be undone!\n\n");
+ ImGui::Separator();
+
+ //static int unused_i = 0;
+ //ImGui::Combo("Combo", &unused_i, "Delete\0Delete harder\0");
+
+ static bool dont_ask_me_next_time = false;
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0));
+ ImGui::Checkbox("Don't ask me next time", &dont_ask_me_next_time);
+ ImGui::PopStyleVar();
+
+ if (ImGui::Button("OK", ImVec2(120, 0))) { ImGui::CloseCurrentPopup(); }
+ ImGui::SetItemDefaultFocus();
+ ImGui::SameLine();
+ if (ImGui::Button("Cancel", ImVec2(120, 0))) { ImGui::CloseCurrentPopup(); }
+ ImGui::EndPopup();
+ }
+
+ if (ImGui::Button("Stacked modals.."))
+ ImGui::OpenPopup("Stacked 1");
+ if (ImGui::BeginPopupModal("Stacked 1", NULL, ImGuiWindowFlags_MenuBar))
+ {
+ if (ImGui::BeginMenuBar())
+ {
+ if (ImGui::BeginMenu("File"))
+ {
+ if (ImGui::MenuItem("Some menu item")) {}
+ ImGui::EndMenu();
+ }
+ ImGui::EndMenuBar();
+ }
+ ImGui::Text("Hello from Stacked The First\nUsing style.Colors[ImGuiCol_ModalWindowDimBg] behind it.");
+
+ // Testing behavior of widgets stacking their own regular popups over the modal.
+ static int item = 1;
+ static float color[4] = { 0.4f, 0.7f, 0.0f, 0.5f };
+ ImGui::Combo("Combo", &item, "aaaa\0bbbb\0cccc\0dddd\0eeee\0\0");
+ ImGui::ColorEdit4("color", color);
+
+ if (ImGui::Button("Add another modal.."))
+ ImGui::OpenPopup("Stacked 2");
+
+ // Also demonstrate passing a bool* to BeginPopupModal(), this will create a regular close button which
+ // will close the popup. Note that the visibility state of popups is owned by imgui, so the input value
+ // of the bool actually doesn't matter here.
+ bool unused_open = true;
+ if (ImGui::BeginPopupModal("Stacked 2", &unused_open))
+ {
+ ImGui::Text("Hello from Stacked The Second!");
+ if (ImGui::Button("Close"))
+ ImGui::CloseCurrentPopup();
+ ImGui::EndPopup();
+ }
+
+ if (ImGui::Button("Close"))
+ ImGui::CloseCurrentPopup();
+ ImGui::EndPopup();
+ }
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Popups/Menus inside a regular window");
+ if (ImGui::TreeNode("Menus inside a regular window"))
+ {
+ ImGui::TextWrapped("Below we are testing adding menu items to a regular window. It's rather unusual but should work!");
+ ImGui::Separator();
+
+ ImGui::MenuItem("Menu item", "CTRL+M");
+ if (ImGui::BeginMenu("Menu inside a regular window"))
+ {
+ ShowExampleMenuFile();
+ ImGui::EndMenu();
+ }
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+}
+
+// Dummy data structure that we use for the Table demo.
+// (pre-C++11 doesn't allow us to instantiate ImVector<MyItem> template if this structure if defined inside the demo function)
+namespace
+{
+// We are passing our own identifier to TableSetupColumn() to facilitate identifying columns in the sorting code.
+// This identifier will be passed down into ImGuiTableSortSpec::ColumnUserID.
+// But it is possible to omit the user id parameter of TableSetupColumn() and just use the column index instead! (ImGuiTableSortSpec::ColumnIndex)
+// If you don't use sorting, you will generally never care about giving column an ID!
+enum MyItemColumnID
+{
+ MyItemColumnID_ID,
+ MyItemColumnID_Name,
+ MyItemColumnID_Action,
+ MyItemColumnID_Quantity,
+ MyItemColumnID_Description
+};
+
+struct MyItem
+{
+ int ID;
+ const char* Name;
+ int Quantity;
+
+ // We have a problem which is affecting _only this demo_ and should not affect your code:
+ // As we don't rely on std:: or other third-party library to compile dear imgui, we only have reliable access to qsort(),
+ // however qsort doesn't allow passing user data to comparing function.
+ // As a workaround, we are storing the sort specs in a static/global for the comparing function to access.
+ // In your own use case you would probably pass the sort specs to your sorting/comparing functions directly and not use a global.
+ // We could technically call ImGui::TableGetSortSpecs() in CompareWithSortSpecs(), but considering that this function is called
+ // very often by the sorting algorithm it would be a little wasteful.
+ static const ImGuiTableSortSpecs* s_current_sort_specs;
+
+ // Compare function to be used by qsort()
+ static int IMGUI_CDECL CompareWithSortSpecs(const void* lhs, const void* rhs)
+ {
+ const MyItem* a = (const MyItem*)lhs;
+ const MyItem* b = (const MyItem*)rhs;
+ for (int n = 0; n < s_current_sort_specs->SpecsCount; n++)
+ {
+ // Here we identify columns using the ColumnUserID value that we ourselves passed to TableSetupColumn()
+ // We could also choose to identify columns based on their index (sort_spec->ColumnIndex), which is simpler!
+ const ImGuiTableColumnSortSpecs* sort_spec = &s_current_sort_specs->Specs[n];
+ int delta = 0;
+ switch (sort_spec->ColumnUserID)
+ {
+ case MyItemColumnID_ID: delta = (a->ID - b->ID); break;
+ case MyItemColumnID_Name: delta = (strcmp(a->Name, b->Name)); break;
+ case MyItemColumnID_Quantity: delta = (a->Quantity - b->Quantity); break;
+ case MyItemColumnID_Description: delta = (strcmp(a->Name, b->Name)); break;
+ default: IM_ASSERT(0); break;
+ }
+ if (delta > 0)
+ return (sort_spec->SortDirection == ImGuiSortDirection_Ascending) ? +1 : -1;
+ if (delta < 0)
+ return (sort_spec->SortDirection == ImGuiSortDirection_Ascending) ? -1 : +1;
+ }
+
+ // qsort() is instable so always return a way to differenciate items.
+ // Your own compare function may want to avoid fallback on implicit sort specs e.g. a Name compare if it wasn't already part of the sort specs.
+ return (a->ID - b->ID);
+ }
+};
+const ImGuiTableSortSpecs* MyItem::s_current_sort_specs = NULL;
+}
+
+// Make the UI compact because there are so many fields
+static void PushStyleCompact()
+{
+ ImGuiStyle& style = ImGui::GetStyle();
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(style.FramePadding.x, (float)(int)(style.FramePadding.y * 0.60f)));
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x, (float)(int)(style.ItemSpacing.y * 0.60f)));
+}
+
+static void PopStyleCompact()
+{
+ ImGui::PopStyleVar(2);
+}
+
+// Show a combo box with a choice of sizing policies
+static void EditTableSizingFlags(ImGuiTableFlags* p_flags)
+{
+ struct EnumDesc { ImGuiTableFlags Value; const char* Name; const char* Tooltip; };
+ static const EnumDesc policies[] =
+ {
+ { ImGuiTableFlags_None, "Default", "Use default sizing policy:\n- ImGuiTableFlags_SizingFixedFit if ScrollX is on or if host window has ImGuiWindowFlags_AlwaysAutoResize.\n- ImGuiTableFlags_SizingStretchSame otherwise." },
+ { ImGuiTableFlags_SizingFixedFit, "ImGuiTableFlags_SizingFixedFit", "Columns default to _WidthFixed (if resizable) or _WidthAuto (if not resizable), matching contents width." },
+ { ImGuiTableFlags_SizingFixedSame, "ImGuiTableFlags_SizingFixedSame", "Columns are all the same width, matching the maximum contents width.\nImplicitly disable ImGuiTableFlags_Resizable and enable ImGuiTableFlags_NoKeepColumnsVisible." },
+ { ImGuiTableFlags_SizingStretchProp, "ImGuiTableFlags_SizingStretchProp", "Columns default to _WidthStretch with weights proportional to their widths." },
+ { ImGuiTableFlags_SizingStretchSame, "ImGuiTableFlags_SizingStretchSame", "Columns default to _WidthStretch with same weights." }
+ };
+ int idx;
+ for (idx = 0; idx < IM_ARRAYSIZE(policies); idx++)
+ if (policies[idx].Value == (*p_flags & ImGuiTableFlags_SizingMask_))
+ break;
+ const char* preview_text = (idx < IM_ARRAYSIZE(policies)) ? policies[idx].Name + (idx > 0 ? strlen("ImGuiTableFlags") : 0) : "";
+ if (ImGui::BeginCombo("Sizing Policy", preview_text))
+ {
+ for (int n = 0; n < IM_ARRAYSIZE(policies); n++)
+ if (ImGui::Selectable(policies[n].Name, idx == n))
+ *p_flags = (*p_flags & ~ImGuiTableFlags_SizingMask_) | policies[n].Value;
+ ImGui::EndCombo();
+ }
+ ImGui::SameLine();
+ ImGui::TextDisabled("(?)");
+ if (ImGui::IsItemHovered())
+ {
+ ImGui::BeginTooltip();
+ ImGui::PushTextWrapPos(ImGui::GetFontSize() * 50.0f);
+ for (int m = 0; m < IM_ARRAYSIZE(policies); m++)
+ {
+ ImGui::Separator();
+ ImGui::Text("%s:", policies[m].Name);
+ ImGui::Separator();
+ ImGui::SetCursorPosX(ImGui::GetCursorPosX() + ImGui::GetStyle().IndentSpacing * 0.5f);
+ ImGui::TextUnformatted(policies[m].Tooltip);
+ }
+ ImGui::PopTextWrapPos();
+ ImGui::EndTooltip();
+ }
+}
+
+static void EditTableColumnsFlags(ImGuiTableColumnFlags* p_flags)
+{
+ ImGui::CheckboxFlags("_Disabled", p_flags, ImGuiTableColumnFlags_Disabled); ImGui::SameLine(); HelpMarker("Master disable flag (also hide from context menu)");
+ ImGui::CheckboxFlags("_DefaultHide", p_flags, ImGuiTableColumnFlags_DefaultHide);
+ ImGui::CheckboxFlags("_DefaultSort", p_flags, ImGuiTableColumnFlags_DefaultSort);
+ if (ImGui::CheckboxFlags("_WidthStretch", p_flags, ImGuiTableColumnFlags_WidthStretch))
+ *p_flags &= ~(ImGuiTableColumnFlags_WidthMask_ ^ ImGuiTableColumnFlags_WidthStretch);
+ if (ImGui::CheckboxFlags("_WidthFixed", p_flags, ImGuiTableColumnFlags_WidthFixed))
+ *p_flags &= ~(ImGuiTableColumnFlags_WidthMask_ ^ ImGuiTableColumnFlags_WidthFixed);
+ ImGui::CheckboxFlags("_NoResize", p_flags, ImGuiTableColumnFlags_NoResize);
+ ImGui::CheckboxFlags("_NoReorder", p_flags, ImGuiTableColumnFlags_NoReorder);
+ ImGui::CheckboxFlags("_NoHide", p_flags, ImGuiTableColumnFlags_NoHide);
+ ImGui::CheckboxFlags("_NoClip", p_flags, ImGuiTableColumnFlags_NoClip);
+ ImGui::CheckboxFlags("_NoSort", p_flags, ImGuiTableColumnFlags_NoSort);
+ ImGui::CheckboxFlags("_NoSortAscending", p_flags, ImGuiTableColumnFlags_NoSortAscending);
+ ImGui::CheckboxFlags("_NoSortDescending", p_flags, ImGuiTableColumnFlags_NoSortDescending);
+ ImGui::CheckboxFlags("_NoHeaderLabel", p_flags, ImGuiTableColumnFlags_NoHeaderLabel);
+ ImGui::CheckboxFlags("_NoHeaderWidth", p_flags, ImGuiTableColumnFlags_NoHeaderWidth);
+ ImGui::CheckboxFlags("_PreferSortAscending", p_flags, ImGuiTableColumnFlags_PreferSortAscending);
+ ImGui::CheckboxFlags("_PreferSortDescending", p_flags, ImGuiTableColumnFlags_PreferSortDescending);
+ ImGui::CheckboxFlags("_IndentEnable", p_flags, ImGuiTableColumnFlags_IndentEnable); ImGui::SameLine(); HelpMarker("Default for column 0");
+ ImGui::CheckboxFlags("_IndentDisable", p_flags, ImGuiTableColumnFlags_IndentDisable); ImGui::SameLine(); HelpMarker("Default for column >0");
+}
+
+static void ShowTableColumnsStatusFlags(ImGuiTableColumnFlags flags)
+{
+ ImGui::CheckboxFlags("_IsEnabled", &flags, ImGuiTableColumnFlags_IsEnabled);
+ ImGui::CheckboxFlags("_IsVisible", &flags, ImGuiTableColumnFlags_IsVisible);
+ ImGui::CheckboxFlags("_IsSorted", &flags, ImGuiTableColumnFlags_IsSorted);
+ ImGui::CheckboxFlags("_IsHovered", &flags, ImGuiTableColumnFlags_IsHovered);
+}
+
+static void ShowDemoWindowTables()
+{
+ //ImGui::SetNextItemOpen(true, ImGuiCond_Once);
+ IMGUI_DEMO_MARKER("Tables");
+ if (!ImGui::CollapsingHeader("Tables & Columns"))
+ return;
+
+ // Using those as a base value to create width/height that are factor of the size of our font
+ const float TEXT_BASE_WIDTH = ImGui::CalcTextSize("A").x;
+ const float TEXT_BASE_HEIGHT = ImGui::GetTextLineHeightWithSpacing();
+
+ ImGui::PushID("Tables");
+
+ int open_action = -1;
+ if (ImGui::Button("Open all"))
+ open_action = 1;
+ ImGui::SameLine();
+ if (ImGui::Button("Close all"))
+ open_action = 0;
+ ImGui::SameLine();
+
+ // Options
+ static bool disable_indent = false;
+ ImGui::Checkbox("Disable tree indentation", &disable_indent);
+ ImGui::SameLine();
+ HelpMarker("Disable the indenting of tree nodes so demo tables can use the full window width.");
+ ImGui::Separator();
+ if (disable_indent)
+ ImGui::PushStyleVar(ImGuiStyleVar_IndentSpacing, 0.0f);
+
+ // About Styling of tables
+ // Most settings are configured on a per-table basis via the flags passed to BeginTable() and TableSetupColumns APIs.
+ // There are however a few settings that a shared and part of the ImGuiStyle structure:
+ // style.CellPadding // Padding within each cell
+ // style.Colors[ImGuiCol_TableHeaderBg] // Table header background
+ // style.Colors[ImGuiCol_TableBorderStrong] // Table outer and header borders
+ // style.Colors[ImGuiCol_TableBorderLight] // Table inner borders
+ // style.Colors[ImGuiCol_TableRowBg] // Table row background when ImGuiTableFlags_RowBg is enabled (even rows)
+ // style.Colors[ImGuiCol_TableRowBgAlt] // Table row background when ImGuiTableFlags_RowBg is enabled (odds rows)
+
+ // Demos
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Basic");
+ if (ImGui::TreeNode("Basic"))
+ {
+ // Here we will showcase three different ways to output a table.
+ // They are very simple variations of a same thing!
+
+ // [Method 1] Using TableNextRow() to create a new row, and TableSetColumnIndex() to select the column.
+ // In many situations, this is the most flexible and easy to use pattern.
+ HelpMarker("Using TableNextRow() + calling TableSetColumnIndex() _before_ each cell, in a loop.");
+ if (ImGui::BeginTable("table1", 3))
+ {
+ for (int row = 0; row < 4; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("Row %d Column %d", row, column);
+ }
+ }
+ ImGui::EndTable();
+ }
+
+ // [Method 2] Using TableNextColumn() called multiple times, instead of using a for loop + TableSetColumnIndex().
+ // This is generally more convenient when you have code manually submitting the contents of each columns.
+ HelpMarker("Using TableNextRow() + calling TableNextColumn() _before_ each cell, manually.");
+ if (ImGui::BeginTable("table2", 3))
+ {
+ for (int row = 0; row < 4; row++)
+ {
+ ImGui::TableNextRow();
+ ImGui::TableNextColumn();
+ ImGui::Text("Row %d", row);
+ ImGui::TableNextColumn();
+ ImGui::Text("Some contents");
+ ImGui::TableNextColumn();
+ ImGui::Text("123.456");
+ }
+ ImGui::EndTable();
+ }
+
+ // [Method 3] We call TableNextColumn() _before_ each cell. We never call TableNextRow(),
+ // as TableNextColumn() will automatically wrap around and create new roes as needed.
+ // This is generally more convenient when your cells all contains the same type of data.
+ HelpMarker(
+ "Only using TableNextColumn(), which tends to be convenient for tables where every cells contains the same type of contents.\n"
+ "This is also more similar to the old NextColumn() function of the Columns API, and provided to facilitate the Columns->Tables API transition.");
+ if (ImGui::BeginTable("table3", 3))
+ {
+ for (int item = 0; item < 14; item++)
+ {
+ ImGui::TableNextColumn();
+ ImGui::Text("Item %d", item);
+ }
+ ImGui::EndTable();
+ }
+
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Borders, background");
+ if (ImGui::TreeNode("Borders, background"))
+ {
+ // Expose a few Borders related flags interactively
+ enum ContentsType { CT_Text, CT_FillButton };
+ static ImGuiTableFlags flags = ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg;
+ static bool display_headers = false;
+ static int contents_type = CT_Text;
+
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_RowBg", &flags, ImGuiTableFlags_RowBg);
+ ImGui::CheckboxFlags("ImGuiTableFlags_Borders", &flags, ImGuiTableFlags_Borders);
+ ImGui::SameLine(); HelpMarker("ImGuiTableFlags_Borders\n = ImGuiTableFlags_BordersInnerV\n | ImGuiTableFlags_BordersOuterV\n | ImGuiTableFlags_BordersInnerV\n | ImGuiTableFlags_BordersOuterH");
+ ImGui::Indent();
+
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersH", &flags, ImGuiTableFlags_BordersH);
+ ImGui::Indent();
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuterH", &flags, ImGuiTableFlags_BordersOuterH);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersInnerH", &flags, ImGuiTableFlags_BordersInnerH);
+ ImGui::Unindent();
+
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", &flags, ImGuiTableFlags_BordersV);
+ ImGui::Indent();
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuterV", &flags, ImGuiTableFlags_BordersOuterV);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersInnerV", &flags, ImGuiTableFlags_BordersInnerV);
+ ImGui::Unindent();
+
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuter", &flags, ImGuiTableFlags_BordersOuter);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersInner", &flags, ImGuiTableFlags_BordersInner);
+ ImGui::Unindent();
+
+ ImGui::AlignTextToFramePadding(); ImGui::Text("Cell contents:");
+ ImGui::SameLine(); ImGui::RadioButton("Text", &contents_type, CT_Text);
+ ImGui::SameLine(); ImGui::RadioButton("FillButton", &contents_type, CT_FillButton);
+ ImGui::Checkbox("Display headers", &display_headers);
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoBordersInBody", &flags, ImGuiTableFlags_NoBordersInBody); ImGui::SameLine(); HelpMarker("Disable vertical borders in columns Body (borders will always appears in Headers");
+ PopStyleCompact();
+
+ if (ImGui::BeginTable("table1", 3, flags))
+ {
+ // Display headers so we can inspect their interaction with borders.
+ // (Headers are not the main purpose of this section of the demo, so we are not elaborating on them too much. See other sections for details)
+ if (display_headers)
+ {
+ ImGui::TableSetupColumn("One");
+ ImGui::TableSetupColumn("Two");
+ ImGui::TableSetupColumn("Three");
+ ImGui::TableHeadersRow();
+ }
+
+ for (int row = 0; row < 5; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ char buf[32];
+ sprintf(buf, "Hello %d,%d", column, row);
+ if (contents_type == CT_Text)
+ ImGui::TextUnformatted(buf);
+ else if (contents_type == CT_FillButton)
+ ImGui::Button(buf, ImVec2(-FLT_MIN, 0.0f));
+ }
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Resizable, stretch");
+ if (ImGui::TreeNode("Resizable, stretch"))
+ {
+ // By default, if we don't enable ScrollX the sizing policy for each columns is "Stretch"
+ // Each columns maintain a sizing weight, and they will occupy all available width.
+ static ImGuiTableFlags flags = ImGuiTableFlags_SizingStretchSame | ImGuiTableFlags_Resizable | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_ContextMenuInBody;
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", &flags, ImGuiTableFlags_Resizable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", &flags, ImGuiTableFlags_BordersV);
+ ImGui::SameLine(); HelpMarker("Using the _Resizable flag automatically enables the _BordersInnerV flag as well, this is why the resize borders are still showing when unchecking this.");
+ PopStyleCompact();
+
+ if (ImGui::BeginTable("table1", 3, flags))
+ {
+ for (int row = 0; row < 5; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("Hello %d,%d", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Resizable, fixed");
+ if (ImGui::TreeNode("Resizable, fixed"))
+ {
+ // Here we use ImGuiTableFlags_SizingFixedFit (even though _ScrollX is not set)
+ // So columns will adopt the "Fixed" policy and will maintain a fixed width regardless of the whole available width (unless table is small)
+ // If there is not enough available width to fit all columns, they will however be resized down.
+ // FIXME-TABLE: Providing a stretch-on-init would make sense especially for tables which don't have saved settings
+ HelpMarker(
+ "Using _Resizable + _SizingFixedFit flags.\n"
+ "Fixed-width columns generally makes more sense if you want to use horizontal scrolling.\n\n"
+ "Double-click a column border to auto-fit the column to its contents.");
+ PushStyleCompact();
+ static ImGuiTableFlags flags = ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_Resizable | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_ContextMenuInBody;
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoHostExtendX", &flags, ImGuiTableFlags_NoHostExtendX);
+ PopStyleCompact();
+
+ if (ImGui::BeginTable("table1", 3, flags))
+ {
+ for (int row = 0; row < 5; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("Hello %d,%d", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Resizable, mixed");
+ if (ImGui::TreeNode("Resizable, mixed"))
+ {
+ HelpMarker(
+ "Using TableSetupColumn() to alter resizing policy on a per-column basis.\n\n"
+ "When combining Fixed and Stretch columns, generally you only want one, maybe two trailing columns to use _WidthStretch.");
+ static ImGuiTableFlags flags = ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_RowBg | ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable;
+
+ if (ImGui::BeginTable("table1", 3, flags))
+ {
+ ImGui::TableSetupColumn("AAA", ImGuiTableColumnFlags_WidthFixed);
+ ImGui::TableSetupColumn("BBB", ImGuiTableColumnFlags_WidthFixed);
+ ImGui::TableSetupColumn("CCC", ImGuiTableColumnFlags_WidthStretch);
+ ImGui::TableHeadersRow();
+ for (int row = 0; row < 5; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("%s %d,%d", (column == 2) ? "Stretch" : "Fixed", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+ if (ImGui::BeginTable("table2", 6, flags))
+ {
+ ImGui::TableSetupColumn("AAA", ImGuiTableColumnFlags_WidthFixed);
+ ImGui::TableSetupColumn("BBB", ImGuiTableColumnFlags_WidthFixed);
+ ImGui::TableSetupColumn("CCC", ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_DefaultHide);
+ ImGui::TableSetupColumn("DDD", ImGuiTableColumnFlags_WidthStretch);
+ ImGui::TableSetupColumn("EEE", ImGuiTableColumnFlags_WidthStretch);
+ ImGui::TableSetupColumn("FFF", ImGuiTableColumnFlags_WidthStretch | ImGuiTableColumnFlags_DefaultHide);
+ ImGui::TableHeadersRow();
+ for (int row = 0; row < 5; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 6; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("%s %d,%d", (column >= 3) ? "Stretch" : "Fixed", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Reorderable, hideable, with headers");
+ if (ImGui::TreeNode("Reorderable, hideable, with headers"))
+ {
+ HelpMarker(
+ "Click and drag column headers to reorder columns.\n\n"
+ "Right-click on a header to open a context menu.");
+ static ImGuiTableFlags flags = ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV;
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", &flags, ImGuiTableFlags_Resizable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_Reorderable", &flags, ImGuiTableFlags_Reorderable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_Hideable", &flags, ImGuiTableFlags_Hideable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoBordersInBody", &flags, ImGuiTableFlags_NoBordersInBody);
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoBordersInBodyUntilResize", &flags, ImGuiTableFlags_NoBordersInBodyUntilResize); ImGui::SameLine(); HelpMarker("Disable vertical borders in columns Body until hovered for resize (borders will always appears in Headers)");
+ PopStyleCompact();
+
+ if (ImGui::BeginTable("table1", 3, flags))
+ {
+ // Submit columns name with TableSetupColumn() and call TableHeadersRow() to create a row with a header in each column.
+ // (Later we will show how TableSetupColumn() has other uses, optional flags, sizing weight etc.)
+ ImGui::TableSetupColumn("One");
+ ImGui::TableSetupColumn("Two");
+ ImGui::TableSetupColumn("Three");
+ ImGui::TableHeadersRow();
+ for (int row = 0; row < 6; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("Hello %d,%d", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+
+ // Use outer_size.x == 0.0f instead of default to make the table as tight as possible (only valid when no scrolling and no stretch column)
+ if (ImGui::BeginTable("table2", 3, flags | ImGuiTableFlags_SizingFixedFit, ImVec2(0.0f, 0.0f)))
+ {
+ ImGui::TableSetupColumn("One");
+ ImGui::TableSetupColumn("Two");
+ ImGui::TableSetupColumn("Three");
+ ImGui::TableHeadersRow();
+ for (int row = 0; row < 6; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("Fixed %d,%d", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Padding");
+ if (ImGui::TreeNode("Padding"))
+ {
+ // First example: showcase use of padding flags and effect of BorderOuterV/BorderInnerV on X padding.
+ // We don't expose BorderOuterH/BorderInnerH here because they have no effect on X padding.
+ HelpMarker(
+ "We often want outer padding activated when any using features which makes the edges of a column visible:\n"
+ "e.g.:\n"
+ "- BorderOuterV\n"
+ "- any form of row selection\n"
+ "Because of this, activating BorderOuterV sets the default to PadOuterX. Using PadOuterX or NoPadOuterX you can override the default.\n\n"
+ "Actual padding values are using style.CellPadding.\n\n"
+ "In this demo we don't show horizontal borders to emphasis how they don't affect default horizontal padding.");
+
+ static ImGuiTableFlags flags1 = ImGuiTableFlags_BordersV;
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_PadOuterX", &flags1, ImGuiTableFlags_PadOuterX);
+ ImGui::SameLine(); HelpMarker("Enable outer-most padding (default if ImGuiTableFlags_BordersOuterV is set)");
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoPadOuterX", &flags1, ImGuiTableFlags_NoPadOuterX);
+ ImGui::SameLine(); HelpMarker("Disable outer-most padding (default if ImGuiTableFlags_BordersOuterV is not set)");
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoPadInnerX", &flags1, ImGuiTableFlags_NoPadInnerX);
+ ImGui::SameLine(); HelpMarker("Disable inner padding between columns (double inner padding if BordersOuterV is on, single inner padding if BordersOuterV is off)");
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuterV", &flags1, ImGuiTableFlags_BordersOuterV);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersInnerV", &flags1, ImGuiTableFlags_BordersInnerV);
+ static bool show_headers = false;
+ ImGui::Checkbox("show_headers", &show_headers);
+ PopStyleCompact();
+
+ if (ImGui::BeginTable("table_padding", 3, flags1))
+ {
+ if (show_headers)
+ {
+ ImGui::TableSetupColumn("One");
+ ImGui::TableSetupColumn("Two");
+ ImGui::TableSetupColumn("Three");
+ ImGui::TableHeadersRow();
+ }
+
+ for (int row = 0; row < 5; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ if (row == 0)
+ {
+ ImGui::Text("Avail %.2f", ImGui::GetContentRegionAvail().x);
+ }
+ else
+ {
+ char buf[32];
+ sprintf(buf, "Hello %d,%d", column, row);
+ ImGui::Button(buf, ImVec2(-FLT_MIN, 0.0f));
+ }
+ //if (ImGui::TableGetColumnFlags() & ImGuiTableColumnFlags_IsHovered)
+ // ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, IM_COL32(0, 100, 0, 255));
+ }
+ }
+ ImGui::EndTable();
+ }
+
+ // Second example: set style.CellPadding to (0.0) or a custom value.
+ // FIXME-TABLE: Vertical border effectively not displayed the same way as horizontal one...
+ HelpMarker("Setting style.CellPadding to (0,0) or a custom value.");
+ static ImGuiTableFlags flags2 = ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg;
+ static ImVec2 cell_padding(0.0f, 0.0f);
+ static bool show_widget_frame_bg = true;
+
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_Borders", &flags2, ImGuiTableFlags_Borders);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersH", &flags2, ImGuiTableFlags_BordersH);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", &flags2, ImGuiTableFlags_BordersV);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersInner", &flags2, ImGuiTableFlags_BordersInner);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuter", &flags2, ImGuiTableFlags_BordersOuter);
+ ImGui::CheckboxFlags("ImGuiTableFlags_RowBg", &flags2, ImGuiTableFlags_RowBg);
+ ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", &flags2, ImGuiTableFlags_Resizable);
+ ImGui::Checkbox("show_widget_frame_bg", &show_widget_frame_bg);
+ ImGui::SliderFloat2("CellPadding", &cell_padding.x, 0.0f, 10.0f, "%.0f");
+ PopStyleCompact();
+
+ ImGui::PushStyleVar(ImGuiStyleVar_CellPadding, cell_padding);
+ if (ImGui::BeginTable("table_padding_2", 3, flags2))
+ {
+ static char text_bufs[3 * 5][16]; // Mini text storage for 3x5 cells
+ static bool init = true;
+ if (!show_widget_frame_bg)
+ ImGui::PushStyleColor(ImGuiCol_FrameBg, 0);
+ for (int cell = 0; cell < 3 * 5; cell++)
+ {
+ ImGui::TableNextColumn();
+ if (init)
+ strcpy(text_bufs[cell], "edit me");
+ ImGui::SetNextItemWidth(-FLT_MIN);
+ ImGui::PushID(cell);
+ ImGui::InputText("##cell", text_bufs[cell], IM_ARRAYSIZE(text_bufs[cell]));
+ ImGui::PopID();
+ }
+ if (!show_widget_frame_bg)
+ ImGui::PopStyleColor();
+ init = false;
+ ImGui::EndTable();
+ }
+ ImGui::PopStyleVar();
+
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Explicit widths");
+ if (ImGui::TreeNode("Sizing policies"))
+ {
+ static ImGuiTableFlags flags1 = ImGuiTableFlags_BordersV | ImGuiTableFlags_BordersOuterH | ImGuiTableFlags_RowBg | ImGuiTableFlags_ContextMenuInBody;
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", &flags1, ImGuiTableFlags_Resizable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoHostExtendX", &flags1, ImGuiTableFlags_NoHostExtendX);
+ PopStyleCompact();
+
+ static ImGuiTableFlags sizing_policy_flags[4] = { ImGuiTableFlags_SizingFixedFit, ImGuiTableFlags_SizingFixedSame, ImGuiTableFlags_SizingStretchProp, ImGuiTableFlags_SizingStretchSame };
+ for (int table_n = 0; table_n < 4; table_n++)
+ {
+ ImGui::PushID(table_n);
+ ImGui::SetNextItemWidth(TEXT_BASE_WIDTH * 30);
+ EditTableSizingFlags(&sizing_policy_flags[table_n]);
+
+ // To make it easier to understand the different sizing policy,
+ // For each policy: we display one table where the columns have equal contents width, and one where the columns have different contents width.
+ if (ImGui::BeginTable("table1", 3, sizing_policy_flags[table_n] | flags1))
+ {
+ for (int row = 0; row < 3; row++)
+ {
+ ImGui::TableNextRow();
+ ImGui::TableNextColumn(); ImGui::Text("Oh dear");
+ ImGui::TableNextColumn(); ImGui::Text("Oh dear");
+ ImGui::TableNextColumn(); ImGui::Text("Oh dear");
+ }
+ ImGui::EndTable();
+ }
+ if (ImGui::BeginTable("table2", 3, sizing_policy_flags[table_n] | flags1))
+ {
+ for (int row = 0; row < 3; row++)
+ {
+ ImGui::TableNextRow();
+ ImGui::TableNextColumn(); ImGui::Text("AAAA");
+ ImGui::TableNextColumn(); ImGui::Text("BBBBBBBB");
+ ImGui::TableNextColumn(); ImGui::Text("CCCCCCCCCCCC");
+ }
+ ImGui::EndTable();
+ }
+ ImGui::PopID();
+ }
+
+ ImGui::Spacing();
+ ImGui::TextUnformatted("Advanced");
+ ImGui::SameLine();
+ HelpMarker("This section allows you to interact and see the effect of various sizing policies depending on whether Scroll is enabled and the contents of your columns.");
+
+ enum ContentsType { CT_ShowWidth, CT_ShortText, CT_LongText, CT_Button, CT_FillButton, CT_InputText };
+ static ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg | ImGuiTableFlags_Resizable;
+ static int contents_type = CT_ShowWidth;
+ static int column_count = 3;
+
+ PushStyleCompact();
+ ImGui::PushID("Advanced");
+ ImGui::PushItemWidth(TEXT_BASE_WIDTH * 30);
+ EditTableSizingFlags(&flags);
+ ImGui::Combo("Contents", &contents_type, "Show width\0Short Text\0Long Text\0Button\0Fill Button\0InputText\0");
+ if (contents_type == CT_FillButton)
+ {
+ ImGui::SameLine();
+ HelpMarker("Be mindful that using right-alignment (e.g. size.x = -FLT_MIN) creates a feedback loop where contents width can feed into auto-column width can feed into contents width.");
+ }
+ ImGui::DragInt("Columns", &column_count, 0.1f, 1, 64, "%d", ImGuiSliderFlags_AlwaysClamp);
+ ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", &flags, ImGuiTableFlags_Resizable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_PreciseWidths", &flags, ImGuiTableFlags_PreciseWidths);
+ ImGui::SameLine(); HelpMarker("Disable distributing remainder width to stretched columns (width allocation on a 100-wide table with 3 columns: Without this flag: 33,33,34. With this flag: 33,33,33). With larger number of columns, resizing will appear to be less smooth.");
+ ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", &flags, ImGuiTableFlags_ScrollX);
+ ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", &flags, ImGuiTableFlags_ScrollY);
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoClip", &flags, ImGuiTableFlags_NoClip);
+ ImGui::PopItemWidth();
+ ImGui::PopID();
+ PopStyleCompact();
+
+ if (ImGui::BeginTable("table2", column_count, flags, ImVec2(0.0f, TEXT_BASE_HEIGHT * 7)))
+ {
+ for (int cell = 0; cell < 10 * column_count; cell++)
+ {
+ ImGui::TableNextColumn();
+ int column = ImGui::TableGetColumnIndex();
+ int row = ImGui::TableGetRowIndex();
+
+ ImGui::PushID(cell);
+ char label[32];
+ static char text_buf[32] = "";
+ sprintf(label, "Hello %d,%d", column, row);
+ switch (contents_type)
+ {
+ case CT_ShortText: ImGui::TextUnformatted(label); break;
+ case CT_LongText: ImGui::Text("Some %s text %d,%d\nOver two lines..", column == 0 ? "long" : "longeeer", column, row); break;
+ case CT_ShowWidth: ImGui::Text("W: %.1f", ImGui::GetContentRegionAvail().x); break;
+ case CT_Button: ImGui::Button(label); break;
+ case CT_FillButton: ImGui::Button(label, ImVec2(-FLT_MIN, 0.0f)); break;
+ case CT_InputText: ImGui::SetNextItemWidth(-FLT_MIN); ImGui::InputText("##", text_buf, IM_ARRAYSIZE(text_buf)); break;
+ }
+ ImGui::PopID();
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Vertical scrolling, with clipping");
+ if (ImGui::TreeNode("Vertical scrolling, with clipping"))
+ {
+ HelpMarker("Here we activate ScrollY, which will create a child window container to allow hosting scrollable contents.\n\nWe also demonstrate using ImGuiListClipper to virtualize the submission of many items.");
+ static ImGuiTableFlags flags = ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable;
+
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", &flags, ImGuiTableFlags_ScrollY);
+ PopStyleCompact();
+
+ // When using ScrollX or ScrollY we need to specify a size for our table container!
+ // Otherwise by default the table will fit all available space, like a BeginChild() call.
+ ImVec2 outer_size = ImVec2(0.0f, TEXT_BASE_HEIGHT * 8);
+ if (ImGui::BeginTable("table_scrolly", 3, flags, outer_size))
+ {
+ ImGui::TableSetupScrollFreeze(0, 1); // Make top row always visible
+ ImGui::TableSetupColumn("One", ImGuiTableColumnFlags_None);
+ ImGui::TableSetupColumn("Two", ImGuiTableColumnFlags_None);
+ ImGui::TableSetupColumn("Three", ImGuiTableColumnFlags_None);
+ ImGui::TableHeadersRow();
+
+ // Demonstrate using clipper for large vertical lists
+ ImGuiListClipper clipper;
+ clipper.Begin(1000);
+ while (clipper.Step())
+ {
+ for (int row = clipper.DisplayStart; row < clipper.DisplayEnd; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("Hello %d,%d", column, row);
+ }
+ }
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Horizontal scrolling");
+ if (ImGui::TreeNode("Horizontal scrolling"))
+ {
+ HelpMarker(
+ "When ScrollX is enabled, the default sizing policy becomes ImGuiTableFlags_SizingFixedFit, "
+ "as automatically stretching columns doesn't make much sense with horizontal scrolling.\n\n"
+ "Also note that as of the current version, you will almost always want to enable ScrollY along with ScrollX,"
+ "because the container window won't automatically extend vertically to fix contents (this may be improved in future versions).");
+ static ImGuiTableFlags flags = ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable;
+ static int freeze_cols = 1;
+ static int freeze_rows = 1;
+
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", &flags, ImGuiTableFlags_Resizable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", &flags, ImGuiTableFlags_ScrollX);
+ ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", &flags, ImGuiTableFlags_ScrollY);
+ ImGui::SetNextItemWidth(ImGui::GetFrameHeight());
+ ImGui::DragInt("freeze_cols", &freeze_cols, 0.2f, 0, 9, NULL, ImGuiSliderFlags_NoInput);
+ ImGui::SetNextItemWidth(ImGui::GetFrameHeight());
+ ImGui::DragInt("freeze_rows", &freeze_rows, 0.2f, 0, 9, NULL, ImGuiSliderFlags_NoInput);
+ PopStyleCompact();
+
+ // When using ScrollX or ScrollY we need to specify a size for our table container!
+ // Otherwise by default the table will fit all available space, like a BeginChild() call.
+ ImVec2 outer_size = ImVec2(0.0f, TEXT_BASE_HEIGHT * 8);
+ if (ImGui::BeginTable("table_scrollx", 7, flags, outer_size))
+ {
+ ImGui::TableSetupScrollFreeze(freeze_cols, freeze_rows);
+ ImGui::TableSetupColumn("Line #", ImGuiTableColumnFlags_NoHide); // Make the first column not hideable to match our use of TableSetupScrollFreeze()
+ ImGui::TableSetupColumn("One");
+ ImGui::TableSetupColumn("Two");
+ ImGui::TableSetupColumn("Three");
+ ImGui::TableSetupColumn("Four");
+ ImGui::TableSetupColumn("Five");
+ ImGui::TableSetupColumn("Six");
+ ImGui::TableHeadersRow();
+ for (int row = 0; row < 20; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 7; column++)
+ {
+ // Both TableNextColumn() and TableSetColumnIndex() return true when a column is visible or performing width measurement.
+ // Because here we know that:
+ // - A) all our columns are contributing the same to row height
+ // - B) column 0 is always visible,
+ // We only always submit this one column and can skip others.
+ // More advanced per-column clipping behaviors may benefit from polling the status flags via TableGetColumnFlags().
+ if (!ImGui::TableSetColumnIndex(column) && column > 0)
+ continue;
+ if (column == 0)
+ ImGui::Text("Line %d", row);
+ else
+ ImGui::Text("Hello world %d,%d", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+
+ ImGui::Spacing();
+ ImGui::TextUnformatted("Stretch + ScrollX");
+ ImGui::SameLine();
+ HelpMarker(
+ "Showcase using Stretch columns + ScrollX together: "
+ "this is rather unusual and only makes sense when specifying an 'inner_width' for the table!\n"
+ "Without an explicit value, inner_width is == outer_size.x and therefore using Stretch columns + ScrollX together doesn't make sense.");
+ static ImGuiTableFlags flags2 = ImGuiTableFlags_SizingStretchSame | ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_RowBg | ImGuiTableFlags_ContextMenuInBody;
+ static float inner_width = 1000.0f;
+ PushStyleCompact();
+ ImGui::PushID("flags3");
+ ImGui::PushItemWidth(TEXT_BASE_WIDTH * 30);
+ ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", &flags2, ImGuiTableFlags_ScrollX);
+ ImGui::DragFloat("inner_width", &inner_width, 1.0f, 0.0f, FLT_MAX, "%.1f");
+ ImGui::PopItemWidth();
+ ImGui::PopID();
+ PopStyleCompact();
+ if (ImGui::BeginTable("table2", 7, flags2, outer_size, inner_width))
+ {
+ for (int cell = 0; cell < 20 * 7; cell++)
+ {
+ ImGui::TableNextColumn();
+ ImGui::Text("Hello world %d,%d", ImGui::TableGetColumnIndex(), ImGui::TableGetRowIndex());
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Columns flags");
+ if (ImGui::TreeNode("Columns flags"))
+ {
+ // Create a first table just to show all the options/flags we want to make visible in our example!
+ const int column_count = 3;
+ const char* column_names[column_count] = { "One", "Two", "Three" };
+ static ImGuiTableColumnFlags column_flags[column_count] = { ImGuiTableColumnFlags_DefaultSort, ImGuiTableColumnFlags_None, ImGuiTableColumnFlags_DefaultHide };
+ static ImGuiTableColumnFlags column_flags_out[column_count] = { 0, 0, 0 }; // Output from TableGetColumnFlags()
+
+ if (ImGui::BeginTable("table_columns_flags_checkboxes", column_count, ImGuiTableFlags_None))
+ {
+ PushStyleCompact();
+ for (int column = 0; column < column_count; column++)
+ {
+ ImGui::TableNextColumn();
+ ImGui::PushID(column);
+ ImGui::AlignTextToFramePadding(); // FIXME-TABLE: Workaround for wrong text baseline propagation across columns
+ ImGui::Text("'%s'", column_names[column]);
+ ImGui::Spacing();
+ ImGui::Text("Input flags:");
+ EditTableColumnsFlags(&column_flags[column]);
+ ImGui::Spacing();
+ ImGui::Text("Output flags:");
+ ImGui::BeginDisabled();
+ ShowTableColumnsStatusFlags(column_flags_out[column]);
+ ImGui::EndDisabled();
+ ImGui::PopID();
+ }
+ PopStyleCompact();
+ ImGui::EndTable();
+ }
+
+ // Create the real table we care about for the example!
+ // We use a scrolling table to be able to showcase the difference between the _IsEnabled and _IsVisible flags above, otherwise in
+ // a non-scrolling table columns are always visible (unless using ImGuiTableFlags_NoKeepColumnsVisible + resizing the parent window down)
+ const ImGuiTableFlags flags
+ = ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY
+ | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV
+ | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Sortable;
+ ImVec2 outer_size = ImVec2(0.0f, TEXT_BASE_HEIGHT * 9);
+ if (ImGui::BeginTable("table_columns_flags", column_count, flags, outer_size))
+ {
+ for (int column = 0; column < column_count; column++)
+ ImGui::TableSetupColumn(column_names[column], column_flags[column]);
+ ImGui::TableHeadersRow();
+ for (int column = 0; column < column_count; column++)
+ column_flags_out[column] = ImGui::TableGetColumnFlags(column);
+ float indent_step = (float)((int)TEXT_BASE_WIDTH / 2);
+ for (int row = 0; row < 8; row++)
+ {
+ ImGui::Indent(indent_step); // Add some indentation to demonstrate usage of per-column IndentEnable/IndentDisable flags.
+ ImGui::TableNextRow();
+ for (int column = 0; column < column_count; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("%s %s", (column == 0) ? "Indented" : "Hello", ImGui::TableGetColumnName(column));
+ }
+ }
+ ImGui::Unindent(indent_step * 8.0f);
+
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Columns widths");
+ if (ImGui::TreeNode("Columns widths"))
+ {
+ HelpMarker("Using TableSetupColumn() to setup default width.");
+
+ static ImGuiTableFlags flags1 = ImGuiTableFlags_Borders | ImGuiTableFlags_NoBordersInBodyUntilResize;
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", &flags1, ImGuiTableFlags_Resizable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoBordersInBodyUntilResize", &flags1, ImGuiTableFlags_NoBordersInBodyUntilResize);
+ PopStyleCompact();
+ if (ImGui::BeginTable("table1", 3, flags1))
+ {
+ // We could also set ImGuiTableFlags_SizingFixedFit on the table and all columns will default to ImGuiTableColumnFlags_WidthFixed.
+ ImGui::TableSetupColumn("one", ImGuiTableColumnFlags_WidthFixed, 100.0f); // Default to 100.0f
+ ImGui::TableSetupColumn("two", ImGuiTableColumnFlags_WidthFixed, 200.0f); // Default to 200.0f
+ ImGui::TableSetupColumn("three", ImGuiTableColumnFlags_WidthFixed); // Default to auto
+ ImGui::TableHeadersRow();
+ for (int row = 0; row < 4; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ if (row == 0)
+ ImGui::Text("(w: %5.1f)", ImGui::GetContentRegionAvail().x);
+ else
+ ImGui::Text("Hello %d,%d", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+
+ HelpMarker("Using TableSetupColumn() to setup explicit width.\n\nUnless _NoKeepColumnsVisible is set, fixed columns with set width may still be shrunk down if there's not enough space in the host.");
+
+ static ImGuiTableFlags flags2 = ImGuiTableFlags_None;
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoKeepColumnsVisible", &flags2, ImGuiTableFlags_NoKeepColumnsVisible);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersInnerV", &flags2, ImGuiTableFlags_BordersInnerV);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuterV", &flags2, ImGuiTableFlags_BordersOuterV);
+ PopStyleCompact();
+ if (ImGui::BeginTable("table2", 4, flags2))
+ {
+ // We could also set ImGuiTableFlags_SizingFixedFit on the table and all columns will default to ImGuiTableColumnFlags_WidthFixed.
+ ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, 100.0f);
+ ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, TEXT_BASE_WIDTH * 15.0f);
+ ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, TEXT_BASE_WIDTH * 30.0f);
+ ImGui::TableSetupColumn("", ImGuiTableColumnFlags_WidthFixed, TEXT_BASE_WIDTH * 15.0f);
+ for (int row = 0; row < 5; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 4; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ if (row == 0)
+ ImGui::Text("(w: %5.1f)", ImGui::GetContentRegionAvail().x);
+ else
+ ImGui::Text("Hello %d,%d", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Nested tables");
+ if (ImGui::TreeNode("Nested tables"))
+ {
+ HelpMarker("This demonstrate embedding a table into another table cell.");
+
+ if (ImGui::BeginTable("table_nested1", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable))
+ {
+ ImGui::TableSetupColumn("A0");
+ ImGui::TableSetupColumn("A1");
+ ImGui::TableHeadersRow();
+
+ ImGui::TableNextColumn();
+ ImGui::Text("A0 Row 0");
+ {
+ float rows_height = TEXT_BASE_HEIGHT * 2;
+ if (ImGui::BeginTable("table_nested2", 2, ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable))
+ {
+ ImGui::TableSetupColumn("B0");
+ ImGui::TableSetupColumn("B1");
+ ImGui::TableHeadersRow();
+
+ ImGui::TableNextRow(ImGuiTableRowFlags_None, rows_height);
+ ImGui::TableNextColumn();
+ ImGui::Text("B0 Row 0");
+ ImGui::TableNextColumn();
+ ImGui::Text("B1 Row 0");
+ ImGui::TableNextRow(ImGuiTableRowFlags_None, rows_height);
+ ImGui::TableNextColumn();
+ ImGui::Text("B0 Row 1");
+ ImGui::TableNextColumn();
+ ImGui::Text("B1 Row 1");
+
+ ImGui::EndTable();
+ }
+ }
+ ImGui::TableNextColumn(); ImGui::Text("A1 Row 0");
+ ImGui::TableNextColumn(); ImGui::Text("A0 Row 1");
+ ImGui::TableNextColumn(); ImGui::Text("A1 Row 1");
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Row height");
+ if (ImGui::TreeNode("Row height"))
+ {
+ HelpMarker("You can pass a 'min_row_height' to TableNextRow().\n\nRows are padded with 'style.CellPadding.y' on top and bottom, so effectively the minimum row height will always be >= 'style.CellPadding.y * 2.0f'.\n\nWe cannot honor a _maximum_ row height as that would requires a unique clipping rectangle per row.");
+ if (ImGui::BeginTable("table_row_height", 1, ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersInnerV))
+ {
+ for (int row = 0; row < 10; row++)
+ {
+ float min_row_height = (float)(int)(TEXT_BASE_HEIGHT * 0.30f * row);
+ ImGui::TableNextRow(ImGuiTableRowFlags_None, min_row_height);
+ ImGui::TableNextColumn();
+ ImGui::Text("min_row_height = %.2f", min_row_height);
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Outer size");
+ if (ImGui::TreeNode("Outer size"))
+ {
+ // Showcasing use of ImGuiTableFlags_NoHostExtendX and ImGuiTableFlags_NoHostExtendY
+ // Important to that note how the two flags have slightly different behaviors!
+ ImGui::Text("Using NoHostExtendX and NoHostExtendY:");
+ PushStyleCompact();
+ static ImGuiTableFlags flags = ImGuiTableFlags_Borders | ImGuiTableFlags_Resizable | ImGuiTableFlags_ContextMenuInBody | ImGuiTableFlags_RowBg | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoHostExtendX;
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoHostExtendX", &flags, ImGuiTableFlags_NoHostExtendX);
+ ImGui::SameLine(); HelpMarker("Make outer width auto-fit to columns, overriding outer_size.x value.\n\nOnly available when ScrollX/ScrollY are disabled and Stretch columns are not used.");
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoHostExtendY", &flags, ImGuiTableFlags_NoHostExtendY);
+ ImGui::SameLine(); HelpMarker("Make outer height stop exactly at outer_size.y (prevent auto-extending table past the limit).\n\nOnly available when ScrollX/ScrollY are disabled. Data below the limit will be clipped and not visible.");
+ PopStyleCompact();
+
+ ImVec2 outer_size = ImVec2(0.0f, TEXT_BASE_HEIGHT * 5.5f);
+ if (ImGui::BeginTable("table1", 3, flags, outer_size))
+ {
+ for (int row = 0; row < 10; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableNextColumn();
+ ImGui::Text("Cell %d,%d", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+ ImGui::SameLine();
+ ImGui::Text("Hello!");
+
+ ImGui::Spacing();
+
+ ImGui::Text("Using explicit size:");
+ if (ImGui::BeginTable("table2", 3, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg, ImVec2(TEXT_BASE_WIDTH * 30, 0.0f)))
+ {
+ for (int row = 0; row < 5; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableNextColumn();
+ ImGui::Text("Cell %d,%d", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+ ImGui::SameLine();
+ if (ImGui::BeginTable("table3", 3, ImGuiTableFlags_Borders | ImGuiTableFlags_RowBg, ImVec2(TEXT_BASE_WIDTH * 30, 0.0f)))
+ {
+ for (int row = 0; row < 3; row++)
+ {
+ ImGui::TableNextRow(0, TEXT_BASE_HEIGHT * 1.5f);
+ for (int column = 0; column < 3; column++)
+ {
+ ImGui::TableNextColumn();
+ ImGui::Text("Cell %d,%d", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Background color");
+ if (ImGui::TreeNode("Background color"))
+ {
+ static ImGuiTableFlags flags = ImGuiTableFlags_RowBg;
+ static int row_bg_type = 1;
+ static int row_bg_target = 1;
+ static int cell_bg_type = 1;
+
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_Borders", &flags, ImGuiTableFlags_Borders);
+ ImGui::CheckboxFlags("ImGuiTableFlags_RowBg", &flags, ImGuiTableFlags_RowBg);
+ ImGui::SameLine(); HelpMarker("ImGuiTableFlags_RowBg automatically sets RowBg0 to alternative colors pulled from the Style.");
+ ImGui::Combo("row bg type", (int*)&row_bg_type, "None\0Red\0Gradient\0");
+ ImGui::Combo("row bg target", (int*)&row_bg_target, "RowBg0\0RowBg1\0"); ImGui::SameLine(); HelpMarker("Target RowBg0 to override the alternating odd/even colors,\nTarget RowBg1 to blend with them.");
+ ImGui::Combo("cell bg type", (int*)&cell_bg_type, "None\0Blue\0"); ImGui::SameLine(); HelpMarker("We are colorizing cells to B1->C2 here.");
+ IM_ASSERT(row_bg_type >= 0 && row_bg_type <= 2);
+ IM_ASSERT(row_bg_target >= 0 && row_bg_target <= 1);
+ IM_ASSERT(cell_bg_type >= 0 && cell_bg_type <= 1);
+ PopStyleCompact();
+
+ if (ImGui::BeginTable("table1", 5, flags))
+ {
+ for (int row = 0; row < 6; row++)
+ {
+ ImGui::TableNextRow();
+
+ // Demonstrate setting a row background color with 'ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBgX, ...)'
+ // We use a transparent color so we can see the one behind in case our target is RowBg1 and RowBg0 was already targeted by the ImGuiTableFlags_RowBg flag.
+ if (row_bg_type != 0)
+ {
+ ImU32 row_bg_color = ImGui::GetColorU32(row_bg_type == 1 ? ImVec4(0.7f, 0.3f, 0.3f, 0.65f) : ImVec4(0.2f + row * 0.1f, 0.2f, 0.2f, 0.65f)); // Flat or Gradient?
+ ImGui::TableSetBgColor(ImGuiTableBgTarget_RowBg0 + row_bg_target, row_bg_color);
+ }
+
+ // Fill cells
+ for (int column = 0; column < 5; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("%c%c", 'A' + row, '0' + column);
+
+ // Change background of Cells B1->C2
+ // Demonstrate setting a cell background color with 'ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, ...)'
+ // (the CellBg color will be blended over the RowBg and ColumnBg colors)
+ // We can also pass a column number as a third parameter to TableSetBgColor() and do this outside the column loop.
+ if (row >= 1 && row <= 2 && column >= 1 && column <= 2 && cell_bg_type == 1)
+ {
+ ImU32 cell_bg_color = ImGui::GetColorU32(ImVec4(0.3f, 0.3f, 0.7f, 0.65f));
+ ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg, cell_bg_color);
+ }
+ }
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Tree view");
+ if (ImGui::TreeNode("Tree view"))
+ {
+ static ImGuiTableFlags flags = ImGuiTableFlags_BordersV | ImGuiTableFlags_BordersOuterH | ImGuiTableFlags_Resizable | ImGuiTableFlags_RowBg | ImGuiTableFlags_NoBordersInBody;
+
+ if (ImGui::BeginTable("3ways", 3, flags))
+ {
+ // The first column will use the default _WidthStretch when ScrollX is Off and _WidthFixed when ScrollX is On
+ ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_NoHide);
+ ImGui::TableSetupColumn("Size", ImGuiTableColumnFlags_WidthFixed, TEXT_BASE_WIDTH * 12.0f);
+ ImGui::TableSetupColumn("Type", ImGuiTableColumnFlags_WidthFixed, TEXT_BASE_WIDTH * 18.0f);
+ ImGui::TableHeadersRow();
+
+ // Simple storage to output a dummy file-system.
+ struct MyTreeNode
+ {
+ const char* Name;
+ const char* Type;
+ int Size;
+ int ChildIdx;
+ int ChildCount;
+ static void DisplayNode(const MyTreeNode* node, const MyTreeNode* all_nodes)
+ {
+ ImGui::TableNextRow();
+ ImGui::TableNextColumn();
+ const bool is_folder = (node->ChildCount > 0);
+ if (is_folder)
+ {
+ bool open = ImGui::TreeNodeEx(node->Name, ImGuiTreeNodeFlags_SpanFullWidth);
+ ImGui::TableNextColumn();
+ ImGui::TextDisabled("--");
+ ImGui::TableNextColumn();
+ ImGui::TextUnformatted(node->Type);
+ if (open)
+ {
+ for (int child_n = 0; child_n < node->ChildCount; child_n++)
+ DisplayNode(&all_nodes[node->ChildIdx + child_n], all_nodes);
+ ImGui::TreePop();
+ }
+ }
+ else
+ {
+ ImGui::TreeNodeEx(node->Name, ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_Bullet | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_SpanFullWidth);
+ ImGui::TableNextColumn();
+ ImGui::Text("%d", node->Size);
+ ImGui::TableNextColumn();
+ ImGui::TextUnformatted(node->Type);
+ }
+ }
+ };
+ static const MyTreeNode nodes[] =
+ {
+ { "Root", "Folder", -1, 1, 3 }, // 0
+ { "Music", "Folder", -1, 4, 2 }, // 1
+ { "Textures", "Folder", -1, 6, 3 }, // 2
+ { "desktop.ini", "System file", 1024, -1,-1 }, // 3
+ { "File1_a.wav", "Audio file", 123000, -1,-1 }, // 4
+ { "File1_b.wav", "Audio file", 456000, -1,-1 }, // 5
+ { "Image001.png", "Image file", 203128, -1,-1 }, // 6
+ { "Copy of Image001.png", "Image file", 203256, -1,-1 }, // 7
+ { "Copy of Image001 (Final2).png","Image file", 203512, -1,-1 }, // 8
+ };
+
+ MyTreeNode::DisplayNode(&nodes[0], nodes);
+
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Item width");
+ if (ImGui::TreeNode("Item width"))
+ {
+ HelpMarker(
+ "Showcase using PushItemWidth() and how it is preserved on a per-column basis.\n\n"
+ "Note that on auto-resizing non-resizable fixed columns, querying the content width for e.g. right-alignment doesn't make sense.");
+ if (ImGui::BeginTable("table_item_width", 3, ImGuiTableFlags_Borders))
+ {
+ ImGui::TableSetupColumn("small");
+ ImGui::TableSetupColumn("half");
+ ImGui::TableSetupColumn("right-align");
+ ImGui::TableHeadersRow();
+
+ for (int row = 0; row < 3; row++)
+ {
+ ImGui::TableNextRow();
+ if (row == 0)
+ {
+ // Setup ItemWidth once (instead of setting up every time, which is also possible but less efficient)
+ ImGui::TableSetColumnIndex(0);
+ ImGui::PushItemWidth(TEXT_BASE_WIDTH * 3.0f); // Small
+ ImGui::TableSetColumnIndex(1);
+ ImGui::PushItemWidth(-ImGui::GetContentRegionAvail().x * 0.5f);
+ ImGui::TableSetColumnIndex(2);
+ ImGui::PushItemWidth(-FLT_MIN); // Right-aligned
+ }
+
+ // Draw our contents
+ static float dummy_f = 0.0f;
+ ImGui::PushID(row);
+ ImGui::TableSetColumnIndex(0);
+ ImGui::SliderFloat("float0", &dummy_f, 0.0f, 1.0f);
+ ImGui::TableSetColumnIndex(1);
+ ImGui::SliderFloat("float1", &dummy_f, 0.0f, 1.0f);
+ ImGui::TableSetColumnIndex(2);
+ ImGui::SliderFloat("##float2", &dummy_f, 0.0f, 1.0f); // No visible label since right-aligned
+ ImGui::PopID();
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ // Demonstrate using TableHeader() calls instead of TableHeadersRow()
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Custom headers");
+ if (ImGui::TreeNode("Custom headers"))
+ {
+ const int COLUMNS_COUNT = 3;
+ if (ImGui::BeginTable("table_custom_headers", COLUMNS_COUNT, ImGuiTableFlags_Borders | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable))
+ {
+ ImGui::TableSetupColumn("Apricot");
+ ImGui::TableSetupColumn("Banana");
+ ImGui::TableSetupColumn("Cherry");
+
+ // Dummy entire-column selection storage
+ // FIXME: It would be nice to actually demonstrate full-featured selection using those checkbox.
+ static bool column_selected[3] = {};
+
+ // Instead of calling TableHeadersRow() we'll submit custom headers ourselves
+ ImGui::TableNextRow(ImGuiTableRowFlags_Headers);
+ for (int column = 0; column < COLUMNS_COUNT; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ const char* column_name = ImGui::TableGetColumnName(column); // Retrieve name passed to TableSetupColumn()
+ ImGui::PushID(column);
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(0, 0));
+ ImGui::Checkbox("##checkall", &column_selected[column]);
+ ImGui::PopStyleVar();
+ ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
+ ImGui::TableHeader(column_name);
+ ImGui::PopID();
+ }
+
+ for (int row = 0; row < 5; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < 3; column++)
+ {
+ char buf[32];
+ sprintf(buf, "Cell %d,%d", column, row);
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Selectable(buf, column_selected[column]);
+ }
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ // Demonstrate creating custom context menus inside columns, while playing it nice with context menus provided by TableHeadersRow()/TableHeader()
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Context menus");
+ if (ImGui::TreeNode("Context menus"))
+ {
+ HelpMarker("By default, right-clicking over a TableHeadersRow()/TableHeader() line will open the default context-menu.\nUsing ImGuiTableFlags_ContextMenuInBody we also allow right-clicking over columns body.");
+ static ImGuiTableFlags flags1 = ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Borders | ImGuiTableFlags_ContextMenuInBody;
+
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_ContextMenuInBody", &flags1, ImGuiTableFlags_ContextMenuInBody);
+ PopStyleCompact();
+
+ // Context Menus: first example
+ // [1.1] Right-click on the TableHeadersRow() line to open the default table context menu.
+ // [1.2] Right-click in columns also open the default table context menu (if ImGuiTableFlags_ContextMenuInBody is set)
+ const int COLUMNS_COUNT = 3;
+ if (ImGui::BeginTable("table_context_menu", COLUMNS_COUNT, flags1))
+ {
+ ImGui::TableSetupColumn("One");
+ ImGui::TableSetupColumn("Two");
+ ImGui::TableSetupColumn("Three");
+
+ // [1.1]] Right-click on the TableHeadersRow() line to open the default table context menu.
+ ImGui::TableHeadersRow();
+
+ // Submit dummy contents
+ for (int row = 0; row < 4; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < COLUMNS_COUNT; column++)
+ {
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("Cell %d,%d", column, row);
+ }
+ }
+ ImGui::EndTable();
+ }
+
+ // Context Menus: second example
+ // [2.1] Right-click on the TableHeadersRow() line to open the default table context menu.
+ // [2.2] Right-click on the ".." to open a custom popup
+ // [2.3] Right-click in columns to open another custom popup
+ HelpMarker("Demonstrate mixing table context menu (over header), item context button (over button) and custom per-colum context menu (over column body).");
+ ImGuiTableFlags flags2 = ImGuiTableFlags_Resizable | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Borders;
+ if (ImGui::BeginTable("table_context_menu_2", COLUMNS_COUNT, flags2))
+ {
+ ImGui::TableSetupColumn("One");
+ ImGui::TableSetupColumn("Two");
+ ImGui::TableSetupColumn("Three");
+
+ // [2.1] Right-click on the TableHeadersRow() line to open the default table context menu.
+ ImGui::TableHeadersRow();
+ for (int row = 0; row < 4; row++)
+ {
+ ImGui::TableNextRow();
+ for (int column = 0; column < COLUMNS_COUNT; column++)
+ {
+ // Submit dummy contents
+ ImGui::TableSetColumnIndex(column);
+ ImGui::Text("Cell %d,%d", column, row);
+ ImGui::SameLine();
+
+ // [2.2] Right-click on the ".." to open a custom popup
+ ImGui::PushID(row * COLUMNS_COUNT + column);
+ ImGui::SmallButton("..");
+ if (ImGui::BeginPopupContextItem())
+ {
+ ImGui::Text("This is the popup for Button(\"..\") in Cell %d,%d", column, row);
+ if (ImGui::Button("Close"))
+ ImGui::CloseCurrentPopup();
+ ImGui::EndPopup();
+ }
+ ImGui::PopID();
+ }
+ }
+
+ // [2.3] Right-click anywhere in columns to open another custom popup
+ // (instead of testing for !IsAnyItemHovered() we could also call OpenPopup() with ImGuiPopupFlags_NoOpenOverExistingPopup
+ // to manage popup priority as the popups triggers, here "are we hovering a column" are overlapping)
+ int hovered_column = -1;
+ for (int column = 0; column < COLUMNS_COUNT + 1; column++)
+ {
+ ImGui::PushID(column);
+ if (ImGui::TableGetColumnFlags(column) & ImGuiTableColumnFlags_IsHovered)
+ hovered_column = column;
+ if (hovered_column == column && !ImGui::IsAnyItemHovered() && ImGui::IsMouseReleased(1))
+ ImGui::OpenPopup("MyPopup");
+ if (ImGui::BeginPopup("MyPopup"))
+ {
+ if (column == COLUMNS_COUNT)
+ ImGui::Text("This is a custom popup for unused space after the last column.");
+ else
+ ImGui::Text("This is a custom popup for Column %d", column);
+ if (ImGui::Button("Close"))
+ ImGui::CloseCurrentPopup();
+ ImGui::EndPopup();
+ }
+ ImGui::PopID();
+ }
+
+ ImGui::EndTable();
+ ImGui::Text("Hovered column: %d", hovered_column);
+ }
+ ImGui::TreePop();
+ }
+
+ // Demonstrate creating multiple tables with the same ID
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Synced instances");
+ if (ImGui::TreeNode("Synced instances"))
+ {
+ HelpMarker("Multiple tables with the same identifier will share their settings, width, visibility, order etc.");
+ for (int n = 0; n < 3; n++)
+ {
+ char buf[32];
+ sprintf(buf, "Synced Table %d", n);
+ bool open = ImGui::CollapsingHeader(buf, ImGuiTreeNodeFlags_DefaultOpen);
+ if (open && ImGui::BeginTable("Table", 3, ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Borders | ImGuiTableFlags_SizingFixedFit | ImGuiTableFlags_NoSavedSettings))
+ {
+ ImGui::TableSetupColumn("One");
+ ImGui::TableSetupColumn("Two");
+ ImGui::TableSetupColumn("Three");
+ ImGui::TableHeadersRow();
+ for (int cell = 0; cell < 9; cell++)
+ {
+ ImGui::TableNextColumn();
+ ImGui::Text("this cell %d", cell);
+ }
+ ImGui::EndTable();
+ }
+ }
+ ImGui::TreePop();
+ }
+
+ // Demonstrate using Sorting facilities
+ // This is a simplified version of the "Advanced" example, where we mostly focus on the code necessary to handle sorting.
+ // Note that the "Advanced" example also showcase manually triggering a sort (e.g. if item quantities have been modified)
+ static const char* template_items_names[] =
+ {
+ "Banana", "Apple", "Cherry", "Watermelon", "Grapefruit", "Strawberry", "Mango",
+ "Kiwi", "Orange", "Pineapple", "Blueberry", "Plum", "Coconut", "Pear", "Apricot"
+ };
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Sorting");
+ if (ImGui::TreeNode("Sorting"))
+ {
+ // Create item list
+ static ImVector<MyItem> items;
+ if (items.Size == 0)
+ {
+ items.resize(50, MyItem());
+ for (int n = 0; n < items.Size; n++)
+ {
+ const int template_n = n % IM_ARRAYSIZE(template_items_names);
+ MyItem& item = items[n];
+ item.ID = n;
+ item.Name = template_items_names[template_n];
+ item.Quantity = (n * n - n) % 20; // Assign default quantities
+ }
+ }
+
+ // Options
+ static ImGuiTableFlags flags =
+ ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Sortable | ImGuiTableFlags_SortMulti
+ | ImGuiTableFlags_RowBg | ImGuiTableFlags_BordersOuter | ImGuiTableFlags_BordersV | ImGuiTableFlags_NoBordersInBody
+ | ImGuiTableFlags_ScrollY;
+ PushStyleCompact();
+ ImGui::CheckboxFlags("ImGuiTableFlags_SortMulti", &flags, ImGuiTableFlags_SortMulti);
+ ImGui::SameLine(); HelpMarker("When sorting is enabled: hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1).");
+ ImGui::CheckboxFlags("ImGuiTableFlags_SortTristate", &flags, ImGuiTableFlags_SortTristate);
+ ImGui::SameLine(); HelpMarker("When sorting is enabled: allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0).");
+ PopStyleCompact();
+
+ if (ImGui::BeginTable("table_sorting", 4, flags, ImVec2(0.0f, TEXT_BASE_HEIGHT * 15), 0.0f))
+ {
+ // Declare columns
+ // We use the "user_id" parameter of TableSetupColumn() to specify a user id that will be stored in the sort specifications.
+ // This is so our sort function can identify a column given our own identifier. We could also identify them based on their index!
+ // Demonstrate using a mixture of flags among available sort-related flags:
+ // - ImGuiTableColumnFlags_DefaultSort
+ // - ImGuiTableColumnFlags_NoSort / ImGuiTableColumnFlags_NoSortAscending / ImGuiTableColumnFlags_NoSortDescending
+ // - ImGuiTableColumnFlags_PreferSortAscending / ImGuiTableColumnFlags_PreferSortDescending
+ ImGui::TableSetupColumn("ID", ImGuiTableColumnFlags_DefaultSort | ImGuiTableColumnFlags_WidthFixed, 0.0f, MyItemColumnID_ID);
+ ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthFixed, 0.0f, MyItemColumnID_Name);
+ ImGui::TableSetupColumn("Action", ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, 0.0f, MyItemColumnID_Action);
+ ImGui::TableSetupColumn("Quantity", ImGuiTableColumnFlags_PreferSortDescending | ImGuiTableColumnFlags_WidthStretch, 0.0f, MyItemColumnID_Quantity);
+ ImGui::TableSetupScrollFreeze(0, 1); // Make row always visible
+ ImGui::TableHeadersRow();
+
+ // Sort our data if sort specs have been changed!
+ if (ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs())
+ if (sorts_specs->SpecsDirty)
+ {
+ MyItem::s_current_sort_specs = sorts_specs; // Store in variable accessible by the sort function.
+ if (items.Size > 1)
+ qsort(&items[0], (size_t)items.Size, sizeof(items[0]), MyItem::CompareWithSortSpecs);
+ MyItem::s_current_sort_specs = NULL;
+ sorts_specs->SpecsDirty = false;
+ }
+
+ // Demonstrate using clipper for large vertical lists
+ ImGuiListClipper clipper;
+ clipper.Begin(items.Size);
+ while (clipper.Step())
+ for (int row_n = clipper.DisplayStart; row_n < clipper.DisplayEnd; row_n++)
+ {
+ // Display a data item
+ MyItem* item = &items[row_n];
+ ImGui::PushID(item->ID);
+ ImGui::TableNextRow();
+ ImGui::TableNextColumn();
+ ImGui::Text("%04d", item->ID);
+ ImGui::TableNextColumn();
+ ImGui::TextUnformatted(item->Name);
+ ImGui::TableNextColumn();
+ ImGui::SmallButton("None");
+ ImGui::TableNextColumn();
+ ImGui::Text("%d", item->Quantity);
+ ImGui::PopID();
+ }
+ ImGui::EndTable();
+ }
+ ImGui::TreePop();
+ }
+
+ // In this example we'll expose most table flags and settings.
+ // For specific flags and settings refer to the corresponding section for more detailed explanation.
+ // This section is mostly useful to experiment with combining certain flags or settings with each others.
+ //ImGui::SetNextItemOpen(true, ImGuiCond_Once); // [DEBUG]
+ if (open_action != -1)
+ ImGui::SetNextItemOpen(open_action != 0);
+ IMGUI_DEMO_MARKER("Tables/Advanced");
+ if (ImGui::TreeNode("Advanced"))
+ {
+ static ImGuiTableFlags flags =
+ ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable
+ | ImGuiTableFlags_Sortable | ImGuiTableFlags_SortMulti
+ | ImGuiTableFlags_RowBg | ImGuiTableFlags_Borders | ImGuiTableFlags_NoBordersInBody
+ | ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY
+ | ImGuiTableFlags_SizingFixedFit;
+
+ enum ContentsType { CT_Text, CT_Button, CT_SmallButton, CT_FillButton, CT_Selectable, CT_SelectableSpanRow };
+ static int contents_type = CT_SelectableSpanRow;
+ const char* contents_type_names[] = { "Text", "Button", "SmallButton", "FillButton", "Selectable", "Selectable (span row)" };
+ static int freeze_cols = 1;
+ static int freeze_rows = 1;
+ static int items_count = IM_ARRAYSIZE(template_items_names) * 2;
+ static ImVec2 outer_size_value = ImVec2(0.0f, TEXT_BASE_HEIGHT * 12);
+ static float row_min_height = 0.0f; // Auto
+ static float inner_width_with_scroll = 0.0f; // Auto-extend
+ static bool outer_size_enabled = true;
+ static bool show_headers = true;
+ static bool show_wrapped_text = false;
+ //static ImGuiTextFilter filter;
+ //ImGui::SetNextItemOpen(true, ImGuiCond_Once); // FIXME-TABLE: Enabling this results in initial clipped first pass on table which tend to affects column sizing
+ if (ImGui::TreeNode("Options"))
+ {
+ // Make the UI compact because there are so many fields
+ PushStyleCompact();
+ ImGui::PushItemWidth(TEXT_BASE_WIDTH * 28.0f);
+
+ if (ImGui::TreeNodeEx("Features:", ImGuiTreeNodeFlags_DefaultOpen))
+ {
+ ImGui::CheckboxFlags("ImGuiTableFlags_Resizable", &flags, ImGuiTableFlags_Resizable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_Reorderable", &flags, ImGuiTableFlags_Reorderable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_Hideable", &flags, ImGuiTableFlags_Hideable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_Sortable", &flags, ImGuiTableFlags_Sortable);
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoSavedSettings", &flags, ImGuiTableFlags_NoSavedSettings);
+ ImGui::CheckboxFlags("ImGuiTableFlags_ContextMenuInBody", &flags, ImGuiTableFlags_ContextMenuInBody);
+ ImGui::TreePop();
+ }
+
+ if (ImGui::TreeNodeEx("Decorations:", ImGuiTreeNodeFlags_DefaultOpen))
+ {
+ ImGui::CheckboxFlags("ImGuiTableFlags_RowBg", &flags, ImGuiTableFlags_RowBg);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersV", &flags, ImGuiTableFlags_BordersV);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuterV", &flags, ImGuiTableFlags_BordersOuterV);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersInnerV", &flags, ImGuiTableFlags_BordersInnerV);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersH", &flags, ImGuiTableFlags_BordersH);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersOuterH", &flags, ImGuiTableFlags_BordersOuterH);
+ ImGui::CheckboxFlags("ImGuiTableFlags_BordersInnerH", &flags, ImGuiTableFlags_BordersInnerH);
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoBordersInBody", &flags, ImGuiTableFlags_NoBordersInBody); ImGui::SameLine(); HelpMarker("Disable vertical borders in columns Body (borders will always appears in Headers");
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoBordersInBodyUntilResize", &flags, ImGuiTableFlags_NoBordersInBodyUntilResize); ImGui::SameLine(); HelpMarker("Disable vertical borders in columns Body until hovered for resize (borders will always appears in Headers)");
+ ImGui::TreePop();
+ }
+
+ if (ImGui::TreeNodeEx("Sizing:", ImGuiTreeNodeFlags_DefaultOpen))
+ {
+ EditTableSizingFlags(&flags);
+ ImGui::SameLine(); HelpMarker("In the Advanced demo we override the policy of each column so those table-wide settings have less effect that typical.");
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoHostExtendX", &flags, ImGuiTableFlags_NoHostExtendX);
+ ImGui::SameLine(); HelpMarker("Make outer width auto-fit to columns, overriding outer_size.x value.\n\nOnly available when ScrollX/ScrollY are disabled and Stretch columns are not used.");
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoHostExtendY", &flags, ImGuiTableFlags_NoHostExtendY);
+ ImGui::SameLine(); HelpMarker("Make outer height stop exactly at outer_size.y (prevent auto-extending table past the limit).\n\nOnly available when ScrollX/ScrollY are disabled. Data below the limit will be clipped and not visible.");
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoKeepColumnsVisible", &flags, ImGuiTableFlags_NoKeepColumnsVisible);
+ ImGui::SameLine(); HelpMarker("Only available if ScrollX is disabled.");
+ ImGui::CheckboxFlags("ImGuiTableFlags_PreciseWidths", &flags, ImGuiTableFlags_PreciseWidths);
+ ImGui::SameLine(); HelpMarker("Disable distributing remainder width to stretched columns (width allocation on a 100-wide table with 3 columns: Without this flag: 33,33,34. With this flag: 33,33,33). With larger number of columns, resizing will appear to be less smooth.");
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoClip", &flags, ImGuiTableFlags_NoClip);
+ ImGui::SameLine(); HelpMarker("Disable clipping rectangle for every individual columns (reduce draw command count, items will be able to overflow into other columns). Generally incompatible with ScrollFreeze options.");
+ ImGui::TreePop();
+ }
+
+ if (ImGui::TreeNodeEx("Padding:", ImGuiTreeNodeFlags_DefaultOpen))
+ {
+ ImGui::CheckboxFlags("ImGuiTableFlags_PadOuterX", &flags, ImGuiTableFlags_PadOuterX);
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoPadOuterX", &flags, ImGuiTableFlags_NoPadOuterX);
+ ImGui::CheckboxFlags("ImGuiTableFlags_NoPadInnerX", &flags, ImGuiTableFlags_NoPadInnerX);
+ ImGui::TreePop();
+ }
+
+ if (ImGui::TreeNodeEx("Scrolling:", ImGuiTreeNodeFlags_DefaultOpen))
+ {
+ ImGui::CheckboxFlags("ImGuiTableFlags_ScrollX", &flags, ImGuiTableFlags_ScrollX);
+ ImGui::SameLine();
+ ImGui::SetNextItemWidth(ImGui::GetFrameHeight());
+ ImGui::DragInt("freeze_cols", &freeze_cols, 0.2f, 0, 9, NULL, ImGuiSliderFlags_NoInput);
+ ImGui::CheckboxFlags("ImGuiTableFlags_ScrollY", &flags, ImGuiTableFlags_ScrollY);
+ ImGui::SameLine();
+ ImGui::SetNextItemWidth(ImGui::GetFrameHeight());
+ ImGui::DragInt("freeze_rows", &freeze_rows, 0.2f, 0, 9, NULL, ImGuiSliderFlags_NoInput);
+ ImGui::TreePop();
+ }
+
+ if (ImGui::TreeNodeEx("Sorting:", ImGuiTreeNodeFlags_DefaultOpen))
+ {
+ ImGui::CheckboxFlags("ImGuiTableFlags_SortMulti", &flags, ImGuiTableFlags_SortMulti);
+ ImGui::SameLine(); HelpMarker("When sorting is enabled: hold shift when clicking headers to sort on multiple column. TableGetSortSpecs() may return specs where (SpecsCount > 1).");
+ ImGui::CheckboxFlags("ImGuiTableFlags_SortTristate", &flags, ImGuiTableFlags_SortTristate);
+ ImGui::SameLine(); HelpMarker("When sorting is enabled: allow no sorting, disable default sorting. TableGetSortSpecs() may return specs where (SpecsCount == 0).");
+ ImGui::TreePop();
+ }
+
+ if (ImGui::TreeNodeEx("Other:", ImGuiTreeNodeFlags_DefaultOpen))
+ {
+ ImGui::Checkbox("show_headers", &show_headers);
+ ImGui::Checkbox("show_wrapped_text", &show_wrapped_text);
+
+ ImGui::DragFloat2("##OuterSize", &outer_size_value.x);
+ ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
+ ImGui::Checkbox("outer_size", &outer_size_enabled);
+ ImGui::SameLine();
+ HelpMarker("If scrolling is disabled (ScrollX and ScrollY not set):\n"
+ "- The table is output directly in the parent window.\n"
+ "- OuterSize.x < 0.0f will right-align the table.\n"
+ "- OuterSize.x = 0.0f will narrow fit the table unless there are any Stretch column.\n"
+ "- OuterSize.y then becomes the minimum size for the table, which will extend vertically if there are more rows (unless NoHostExtendY is set).");
+
+ // From a user point of view we will tend to use 'inner_width' differently depending on whether our table is embedding scrolling.
+ // To facilitate toying with this demo we will actually pass 0.0f to the BeginTable() when ScrollX is disabled.
+ ImGui::DragFloat("inner_width (when ScrollX active)", &inner_width_with_scroll, 1.0f, 0.0f, FLT_MAX);
+
+ ImGui::DragFloat("row_min_height", &row_min_height, 1.0f, 0.0f, FLT_MAX);
+ ImGui::SameLine(); HelpMarker("Specify height of the Selectable item.");
+
+ ImGui::DragInt("items_count", &items_count, 0.1f, 0, 9999);
+ ImGui::Combo("items_type (first column)", &contents_type, contents_type_names, IM_ARRAYSIZE(contents_type_names));
+ //filter.Draw("filter");
+ ImGui::TreePop();
+ }
+
+ ImGui::PopItemWidth();
+ PopStyleCompact();
+ ImGui::Spacing();
+ ImGui::TreePop();
+ }
+
+ // Update item list if we changed the number of items
+ static ImVector<MyItem> items;
+ static ImVector<int> selection;
+ static bool items_need_sort = false;
+ if (items.Size != items_count)
+ {
+ items.resize(items_count, MyItem());
+ for (int n = 0; n < items_count; n++)
+ {
+ const int template_n = n % IM_ARRAYSIZE(template_items_names);
+ MyItem& item = items[n];
+ item.ID = n;
+ item.Name = template_items_names[template_n];
+ item.Quantity = (template_n == 3) ? 10 : (template_n == 4) ? 20 : 0; // Assign default quantities
+ }
+ }
+
+ const ImDrawList* parent_draw_list = ImGui::GetWindowDrawList();
+ const int parent_draw_list_draw_cmd_count = parent_draw_list->CmdBuffer.Size;
+ ImVec2 table_scroll_cur, table_scroll_max; // For debug display
+ const ImDrawList* table_draw_list = NULL; // "
+
+ // Submit table
+ const float inner_width_to_use = (flags & ImGuiTableFlags_ScrollX) ? inner_width_with_scroll : 0.0f;
+ if (ImGui::BeginTable("table_advanced", 6, flags, outer_size_enabled ? outer_size_value : ImVec2(0, 0), inner_width_to_use))
+ {
+ // Declare columns
+ // We use the "user_id" parameter of TableSetupColumn() to specify a user id that will be stored in the sort specifications.
+ // This is so our sort function can identify a column given our own identifier. We could also identify them based on their index!
+ ImGui::TableSetupColumn("ID", ImGuiTableColumnFlags_DefaultSort | ImGuiTableColumnFlags_WidthFixed | ImGuiTableColumnFlags_NoHide, 0.0f, MyItemColumnID_ID);
+ ImGui::TableSetupColumn("Name", ImGuiTableColumnFlags_WidthFixed, 0.0f, MyItemColumnID_Name);
+ ImGui::TableSetupColumn("Action", ImGuiTableColumnFlags_NoSort | ImGuiTableColumnFlags_WidthFixed, 0.0f, MyItemColumnID_Action);
+ ImGui::TableSetupColumn("Quantity", ImGuiTableColumnFlags_PreferSortDescending, 0.0f, MyItemColumnID_Quantity);
+ ImGui::TableSetupColumn("Description", (flags & ImGuiTableFlags_NoHostExtendX) ? 0 : ImGuiTableColumnFlags_WidthStretch, 0.0f, MyItemColumnID_Description);
+ ImGui::TableSetupColumn("Hidden", ImGuiTableColumnFlags_DefaultHide | ImGuiTableColumnFlags_NoSort);
+ ImGui::TableSetupScrollFreeze(freeze_cols, freeze_rows);
+
+ // Sort our data if sort specs have been changed!
+ ImGuiTableSortSpecs* sorts_specs = ImGui::TableGetSortSpecs();
+ if (sorts_specs && sorts_specs->SpecsDirty)
+ items_need_sort = true;
+ if (sorts_specs && items_need_sort && items.Size > 1)
+ {
+ MyItem::s_current_sort_specs = sorts_specs; // Store in variable accessible by the sort function.
+ qsort(&items[0], (size_t)items.Size, sizeof(items[0]), MyItem::CompareWithSortSpecs);
+ MyItem::s_current_sort_specs = NULL;
+ sorts_specs->SpecsDirty = false;
+ }
+ items_need_sort = false;
+
+ // Take note of whether we are currently sorting based on the Quantity field,
+ // we will use this to trigger sorting when we know the data of this column has been modified.
+ const bool sorts_specs_using_quantity = (ImGui::TableGetColumnFlags(3) & ImGuiTableColumnFlags_IsSorted) != 0;
+
+ // Show headers
+ if (show_headers)
+ ImGui::TableHeadersRow();
+
+ // Show data
+ // FIXME-TABLE FIXME-NAV: How we can get decent up/down even though we have the buttons here?
+ ImGui::PushButtonRepeat(true);
+#if 1
+ // Demonstrate using clipper for large vertical lists
+ ImGuiListClipper clipper;
+ clipper.Begin(items.Size);
+ while (clipper.Step())
+ {
+ for (int row_n = clipper.DisplayStart; row_n < clipper.DisplayEnd; row_n++)
+#else
+ // Without clipper
+ {
+ for (int row_n = 0; row_n < items.Size; row_n++)
+#endif
+ {
+ MyItem* item = &items[row_n];
+ //if (!filter.PassFilter(item->Name))
+ // continue;
+
+ const bool item_is_selected = selection.contains(item->ID);
+ ImGui::PushID(item->ID);
+ ImGui::TableNextRow(ImGuiTableRowFlags_None, row_min_height);
+
+ // For the demo purpose we can select among different type of items submitted in the first column
+ ImGui::TableSetColumnIndex(0);
+ char label[32];
+ sprintf(label, "%04d", item->ID);
+ if (contents_type == CT_Text)
+ ImGui::TextUnformatted(label);
+ else if (contents_type == CT_Button)
+ ImGui::Button(label);
+ else if (contents_type == CT_SmallButton)
+ ImGui::SmallButton(label);
+ else if (contents_type == CT_FillButton)
+ ImGui::Button(label, ImVec2(-FLT_MIN, 0.0f));
+ else if (contents_type == CT_Selectable || contents_type == CT_SelectableSpanRow)
+ {
+ ImGuiSelectableFlags selectable_flags = (contents_type == CT_SelectableSpanRow) ? ImGuiSelectableFlags_SpanAllColumns | ImGuiSelectableFlags_AllowItemOverlap : ImGuiSelectableFlags_None;
+ if (ImGui::Selectable(label, item_is_selected, selectable_flags, ImVec2(0, row_min_height)))
+ {
+ if (ImGui::GetIO().KeyCtrl)
+ {
+ if (item_is_selected)
+ selection.find_erase_unsorted(item->ID);
+ else
+ selection.push_back(item->ID);
+ }
+ else
+ {
+ selection.clear();
+ selection.push_back(item->ID);
+ }
+ }
+ }
+
+ if (ImGui::TableSetColumnIndex(1))
+ ImGui::TextUnformatted(item->Name);
+
+ // Here we demonstrate marking our data set as needing to be sorted again if we modified a quantity,
+ // and we are currently sorting on the column showing the Quantity.
+ // To avoid triggering a sort while holding the button, we only trigger it when the button has been released.
+ // You will probably need a more advanced system in your code if you want to automatically sort when a specific entry changes.
+ if (ImGui::TableSetColumnIndex(2))
+ {
+ if (ImGui::SmallButton("Chop")) { item->Quantity += 1; }
+ if (sorts_specs_using_quantity && ImGui::IsItemDeactivated()) { items_need_sort = true; }
+ ImGui::SameLine();
+ if (ImGui::SmallButton("Eat")) { item->Quantity -= 1; }
+ if (sorts_specs_using_quantity && ImGui::IsItemDeactivated()) { items_need_sort = true; }
+ }
+
+ if (ImGui::TableSetColumnIndex(3))
+ ImGui::Text("%d", item->Quantity);
+
+ ImGui::TableSetColumnIndex(4);
+ if (show_wrapped_text)
+ ImGui::TextWrapped("Lorem ipsum dolor sit amet");
+ else
+ ImGui::Text("Lorem ipsum dolor sit amet");
+
+ if (ImGui::TableSetColumnIndex(5))
+ ImGui::Text("1234");
+
+ ImGui::PopID();
+ }
+ }
+ ImGui::PopButtonRepeat();
+
+ // Store some info to display debug details below
+ table_scroll_cur = ImVec2(ImGui::GetScrollX(), ImGui::GetScrollY());
+ table_scroll_max = ImVec2(ImGui::GetScrollMaxX(), ImGui::GetScrollMaxY());
+ table_draw_list = ImGui::GetWindowDrawList();
+ ImGui::EndTable();
+ }
+ static bool show_debug_details = false;
+ ImGui::Checkbox("Debug details", &show_debug_details);
+ if (show_debug_details && table_draw_list)
+ {
+ ImGui::SameLine(0.0f, 0.0f);
+ const int table_draw_list_draw_cmd_count = table_draw_list->CmdBuffer.Size;
+ if (table_draw_list == parent_draw_list)
+ ImGui::Text(": DrawCmd: +%d (in same window)",
+ table_draw_list_draw_cmd_count - parent_draw_list_draw_cmd_count);
+ else
+ ImGui::Text(": DrawCmd: +%d (in child window), Scroll: (%.f/%.f) (%.f/%.f)",
+ table_draw_list_draw_cmd_count - 1, table_scroll_cur.x, table_scroll_max.x, table_scroll_cur.y, table_scroll_max.y);
+ }
+ ImGui::TreePop();
+ }
+
+ ImGui::PopID();
+
+ ShowDemoWindowColumns();
+
+ if (disable_indent)
+ ImGui::PopStyleVar();
+}
+
+// Demonstrate old/legacy Columns API!
+// [2020: Columns are under-featured and not maintained. Prefer using the more flexible and powerful BeginTable() API!]
+static void ShowDemoWindowColumns()
+{
+ IMGUI_DEMO_MARKER("Columns (legacy API)");
+ bool open = ImGui::TreeNode("Legacy Columns API");
+ ImGui::SameLine();
+ HelpMarker("Columns() is an old API! Prefer using the more flexible and powerful BeginTable() API!");
+ if (!open)
+ return;
+
+ // Basic columns
+ IMGUI_DEMO_MARKER("Columns (legacy API)/Basic");
+ if (ImGui::TreeNode("Basic"))
+ {
+ ImGui::Text("Without border:");
+ ImGui::Columns(3, "mycolumns3", false); // 3-ways, no border
+ ImGui::Separator();
+ for (int n = 0; n < 14; n++)
+ {
+ char label[32];
+ sprintf(label, "Item %d", n);
+ if (ImGui::Selectable(label)) {}
+ //if (ImGui::Button(label, ImVec2(-FLT_MIN,0.0f))) {}
+ ImGui::NextColumn();
+ }
+ ImGui::Columns(1);
+ ImGui::Separator();
+
+ ImGui::Text("With border:");
+ ImGui::Columns(4, "mycolumns"); // 4-ways, with border
+ ImGui::Separator();
+ ImGui::Text("ID"); ImGui::NextColumn();
+ ImGui::Text("Name"); ImGui::NextColumn();
+ ImGui::Text("Path"); ImGui::NextColumn();
+ ImGui::Text("Hovered"); ImGui::NextColumn();
+ ImGui::Separator();
+ const char* names[3] = { "One", "Two", "Three" };
+ const char* paths[3] = { "/path/one", "/path/two", "/path/three" };
+ static int selected = -1;
+ for (int i = 0; i < 3; i++)
+ {
+ char label[32];
+ sprintf(label, "%04d", i);
+ if (ImGui::Selectable(label, selected == i, ImGuiSelectableFlags_SpanAllColumns))
+ selected = i;
+ bool hovered = ImGui::IsItemHovered();
+ ImGui::NextColumn();
+ ImGui::Text(names[i]); ImGui::NextColumn();
+ ImGui::Text(paths[i]); ImGui::NextColumn();
+ ImGui::Text("%d", hovered); ImGui::NextColumn();
+ }
+ ImGui::Columns(1);
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Columns (legacy API)/Borders");
+ if (ImGui::TreeNode("Borders"))
+ {
+ // NB: Future columns API should allow automatic horizontal borders.
+ static bool h_borders = true;
+ static bool v_borders = true;
+ static int columns_count = 4;
+ const int lines_count = 3;
+ ImGui::SetNextItemWidth(ImGui::GetFontSize() * 8);
+ ImGui::DragInt("##columns_count", &columns_count, 0.1f, 2, 10, "%d columns");
+ if (columns_count < 2)
+ columns_count = 2;
+ ImGui::SameLine();
+ ImGui::Checkbox("horizontal", &h_borders);
+ ImGui::SameLine();
+ ImGui::Checkbox("vertical", &v_borders);
+ ImGui::Columns(columns_count, NULL, v_borders);
+ for (int i = 0; i < columns_count * lines_count; i++)
+ {
+ if (h_borders && ImGui::GetColumnIndex() == 0)
+ ImGui::Separator();
+ ImGui::Text("%c%c%c", 'a' + i, 'a' + i, 'a' + i);
+ ImGui::Text("Width %.2f", ImGui::GetColumnWidth());
+ ImGui::Text("Avail %.2f", ImGui::GetContentRegionAvail().x);
+ ImGui::Text("Offset %.2f", ImGui::GetColumnOffset());
+ ImGui::Text("Long text that is likely to clip");
+ ImGui::Button("Button", ImVec2(-FLT_MIN, 0.0f));
+ ImGui::NextColumn();
+ }
+ ImGui::Columns(1);
+ if (h_borders)
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+
+ // Create multiple items in a same cell before switching to next column
+ IMGUI_DEMO_MARKER("Columns (legacy API)/Mixed items");
+ if (ImGui::TreeNode("Mixed items"))
+ {
+ ImGui::Columns(3, "mixed");
+ ImGui::Separator();
+
+ ImGui::Text("Hello");
+ ImGui::Button("Banana");
+ ImGui::NextColumn();
+
+ ImGui::Text("ImGui");
+ ImGui::Button("Apple");
+ static float foo = 1.0f;
+ ImGui::InputFloat("red", &foo, 0.05f, 0, "%.3f");
+ ImGui::Text("An extra line here.");
+ ImGui::NextColumn();
+
+ ImGui::Text("Sailor");
+ ImGui::Button("Corniflower");
+ static float bar = 1.0f;
+ ImGui::InputFloat("blue", &bar, 0.05f, 0, "%.3f");
+ ImGui::NextColumn();
+
+ if (ImGui::CollapsingHeader("Category A")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
+ if (ImGui::CollapsingHeader("Category B")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
+ if (ImGui::CollapsingHeader("Category C")) { ImGui::Text("Blah blah blah"); } ImGui::NextColumn();
+ ImGui::Columns(1);
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+
+ // Word wrapping
+ IMGUI_DEMO_MARKER("Columns (legacy API)/Word-wrapping");
+ if (ImGui::TreeNode("Word-wrapping"))
+ {
+ ImGui::Columns(2, "word-wrapping");
+ ImGui::Separator();
+ ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
+ ImGui::TextWrapped("Hello Left");
+ ImGui::NextColumn();
+ ImGui::TextWrapped("The quick brown fox jumps over the lazy dog.");
+ ImGui::TextWrapped("Hello Right");
+ ImGui::Columns(1);
+ ImGui::Separator();
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Columns (legacy API)/Horizontal Scrolling");
+ if (ImGui::TreeNode("Horizontal Scrolling"))
+ {
+ ImGui::SetNextWindowContentSize(ImVec2(1500.0f, 0.0f));
+ ImVec2 child_size = ImVec2(0, ImGui::GetFontSize() * 20.0f);
+ ImGui::BeginChild("##ScrollingRegion", child_size, false, ImGuiWindowFlags_HorizontalScrollbar);
+ ImGui::Columns(10);
+
+ // Also demonstrate using clipper for large vertical lists
+ int ITEMS_COUNT = 2000;
+ ImGuiListClipper clipper;
+ clipper.Begin(ITEMS_COUNT);
+ while (clipper.Step())
+ {
+ for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+ for (int j = 0; j < 10; j++)
+ {
+ ImGui::Text("Line %d Column %d...", i, j);
+ ImGui::NextColumn();
+ }
+ }
+ ImGui::Columns(1);
+ ImGui::EndChild();
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Columns (legacy API)/Tree");
+ if (ImGui::TreeNode("Tree"))
+ {
+ ImGui::Columns(2, "tree", true);
+ for (int x = 0; x < 3; x++)
+ {
+ bool open1 = ImGui::TreeNode((void*)(intptr_t)x, "Node%d", x);
+ ImGui::NextColumn();
+ ImGui::Text("Node contents");
+ ImGui::NextColumn();
+ if (open1)
+ {
+ for (int y = 0; y < 3; y++)
+ {
+ bool open2 = ImGui::TreeNode((void*)(intptr_t)y, "Node%d.%d", x, y);
+ ImGui::NextColumn();
+ ImGui::Text("Node contents");
+ if (open2)
+ {
+ ImGui::Text("Even more contents");
+ if (ImGui::TreeNode("Tree in column"))
+ {
+ ImGui::Text("The quick brown fox jumps over the lazy dog");
+ ImGui::TreePop();
+ }
+ }
+ ImGui::NextColumn();
+ if (open2)
+ ImGui::TreePop();
+ }
+ ImGui::TreePop();
+ }
+ }
+ ImGui::Columns(1);
+ ImGui::TreePop();
+ }
+
+ ImGui::TreePop();
+}
+
+namespace ImGui { extern ImGuiKeyData* GetKeyData(ImGuiKey key); }
+
+static void ShowDemoWindowMisc()
+{
+ IMGUI_DEMO_MARKER("Filtering");
+ if (ImGui::CollapsingHeader("Filtering"))
+ {
+ // Helper class to easy setup a text filter.
+ // You may want to implement a more feature-full filtering scheme in your own application.
+ static ImGuiTextFilter filter;
+ ImGui::Text("Filter usage:\n"
+ " \"\" display all lines\n"
+ " \"xxx\" display lines containing \"xxx\"\n"
+ " \"xxx,yyy\" display lines containing \"xxx\" or \"yyy\"\n"
+ " \"-xxx\" hide lines containing \"xxx\"");
+ filter.Draw();
+ const char* lines[] = { "aaa1.c", "bbb1.c", "ccc1.c", "aaa2.cpp", "bbb2.cpp", "ccc2.cpp", "abc.h", "hello, world" };
+ for (int i = 0; i < IM_ARRAYSIZE(lines); i++)
+ if (filter.PassFilter(lines[i]))
+ ImGui::BulletText("%s", lines[i]);
+ }
+
+ IMGUI_DEMO_MARKER("Inputs, Navigation & Focus");
+ if (ImGui::CollapsingHeader("Inputs, Navigation & Focus"))
+ {
+ ImGuiIO& io = ImGui::GetIO();
+
+ // Display ImGuiIO output flags
+ IMGUI_DEMO_MARKER("Inputs, Navigation & Focus/Output");
+ ImGui::SetNextItemOpen(true, ImGuiCond_Once);
+ if (ImGui::TreeNode("Output"))
+ {
+ ImGui::Text("io.WantCaptureMouse: %d", io.WantCaptureMouse);
+ ImGui::Text("io.WantCaptureMouseUnlessPopupClose: %d", io.WantCaptureMouseUnlessPopupClose);
+ ImGui::Text("io.WantCaptureKeyboard: %d", io.WantCaptureKeyboard);
+ ImGui::Text("io.WantTextInput: %d", io.WantTextInput);
+ ImGui::Text("io.WantSetMousePos: %d", io.WantSetMousePos);
+ ImGui::Text("io.NavActive: %d, io.NavVisible: %d", io.NavActive, io.NavVisible);
+ ImGui::TreePop();
+ }
+
+ // Display Mouse state
+ IMGUI_DEMO_MARKER("Inputs, Navigation & Focus/Mouse State");
+ if (ImGui::TreeNode("Mouse State"))
+ {
+ if (ImGui::IsMousePosValid())
+ ImGui::Text("Mouse pos: (%g, %g)", io.MousePos.x, io.MousePos.y);
+ else
+ ImGui::Text("Mouse pos: <INVALID>");
+ ImGui::Text("Mouse delta: (%g, %g)", io.MouseDelta.x, io.MouseDelta.y);
+
+ int count = IM_ARRAYSIZE(io.MouseDown);
+ ImGui::Text("Mouse down:"); for (int i = 0; i < count; i++) if (ImGui::IsMouseDown(i)) { ImGui::SameLine(); ImGui::Text("b%d (%.02f secs)", i, io.MouseDownDuration[i]); }
+ ImGui::Text("Mouse clicked:"); for (int i = 0; i < count; i++) if (ImGui::IsMouseClicked(i)) { ImGui::SameLine(); ImGui::Text("b%d (%d)", i, ImGui::GetMouseClickedCount(i)); }
+ ImGui::Text("Mouse released:"); for (int i = 0; i < count; i++) if (ImGui::IsMouseReleased(i)) { ImGui::SameLine(); ImGui::Text("b%d", i); }
+ ImGui::Text("Mouse wheel: %.1f", io.MouseWheel);
+ ImGui::Text("Pen Pressure: %.1f", io.PenPressure); // Note: currently unused
+ ImGui::TreePop();
+ }
+
+ // Display Keyboard/Mouse state
+ IMGUI_DEMO_MARKER("Inputs, Navigation & Focus/Keyboard, Gamepad & Navigation State");
+ if (ImGui::TreeNode("Keyboard, Gamepad & Navigation State"))
+ {
+ // We iterate both legacy native range and named ImGuiKey ranges, which is a little odd but this allow displaying the data for old/new backends.
+ // User code should never have to go through such hoops: old code may use native keycodes, new code may use ImGuiKey codes.
+#ifdef IMGUI_DISABLE_OBSOLETE_KEYIO
+ struct funcs { static bool IsLegacyNativeDupe(ImGuiKey) { return false; } };
+ const ImGuiKey key_first = ImGuiKey_NamedKey_BEGIN;
+#else
+ struct funcs { static bool IsLegacyNativeDupe(ImGuiKey key) { return key < 512 && ImGui::GetIO().KeyMap[key] != -1; } }; // Hide Native<>ImGuiKey duplicates when both exists in the array
+ const ImGuiKey key_first = 0;
+ //ImGui::Text("Legacy raw:"); for (ImGuiKey key = key_first; key < ImGuiKey_COUNT; key++) { if (io.KeysDown[key]) { ImGui::SameLine(); ImGui::Text("\"%s\" %d", ImGui::GetKeyName(key), key); } }
+#endif
+ ImGui::Text("Keys down:"); for (ImGuiKey key = key_first; key < ImGuiKey_COUNT; key++) { if (funcs::IsLegacyNativeDupe(key)) continue; if (ImGui::IsKeyDown(key)) { ImGui::SameLine(); ImGui::Text("\"%s\" %d (%.02f secs)", ImGui::GetKeyName(key), key, ImGui::GetKeyData(key)->DownDuration); } }
+ ImGui::Text("Keys pressed:"); for (ImGuiKey key = key_first; key < ImGuiKey_COUNT; key++) { if (funcs::IsLegacyNativeDupe(key)) continue; if (ImGui::IsKeyPressed(key)) { ImGui::SameLine(); ImGui::Text("\"%s\" %d", ImGui::GetKeyName(key), key); } }
+ ImGui::Text("Keys released:"); for (ImGuiKey key = key_first; key < ImGuiKey_COUNT; key++) { if (funcs::IsLegacyNativeDupe(key)) continue; if (ImGui::IsKeyReleased(key)) { ImGui::SameLine(); ImGui::Text("\"%s\" %d", ImGui::GetKeyName(key), key); } }
+ ImGui::Text("Keys mods: %s%s%s%s", io.KeyCtrl ? "CTRL " : "", io.KeyShift ? "SHIFT " : "", io.KeyAlt ? "ALT " : "", io.KeySuper ? "SUPER " : "");
+ ImGui::Text("Chars queue:"); for (int i = 0; i < io.InputQueueCharacters.Size; i++) { ImWchar c = io.InputQueueCharacters[i]; ImGui::SameLine(); ImGui::Text("\'%c\' (0x%04X)", (c > ' ' && c <= 255) ? (char)c : '?', c); } // FIXME: We should convert 'c' to UTF-8 here but the functions are not public.
+ ImGui::Text("NavInputs down:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputs[i] > 0.0f) { ImGui::SameLine(); ImGui::Text("[%d] %.2f (%.02f secs)", i, io.NavInputs[i], io.NavInputsDownDuration[i]); }
+ ImGui::Text("NavInputs pressed:"); for (int i = 0; i < IM_ARRAYSIZE(io.NavInputs); i++) if (io.NavInputsDownDuration[i] == 0.0f) { ImGui::SameLine(); ImGui::Text("[%d]", i); }
+
+ // Draw an arbitrary US keyboard layout to visualize translated keys
+ {
+ const ImVec2 key_size = ImVec2(35.0f, 35.0f);
+ const float key_rounding = 3.0f;
+ const ImVec2 key_face_size = ImVec2(25.0f, 25.0f);
+ const ImVec2 key_face_pos = ImVec2(5.0f, 3.0f);
+ const float key_face_rounding = 2.0f;
+ const ImVec2 key_label_pos = ImVec2(7.0f, 4.0f);
+ const ImVec2 key_step = ImVec2(key_size.x - 1.0f, key_size.y - 1.0f);
+ const float key_row_offset = 9.0f;
+
+ ImVec2 board_min = ImGui::GetCursorScreenPos();
+ ImVec2 board_max = ImVec2(board_min.x + 3 * key_step.x + 2 * key_row_offset + 10.0f, board_min.y + 3 * key_step.y + 10.0f);
+ ImVec2 start_pos = ImVec2(board_min.x + 5.0f - key_step.x, board_min.y);
+
+ struct KeyLayoutData { int Row, Col; const char* Label; ImGuiKey Key; };
+ const KeyLayoutData keys_to_display[] =
+ {
+ { 0, 0, "", ImGuiKey_Tab }, { 0, 1, "Q", ImGuiKey_Q }, { 0, 2, "W", ImGuiKey_W }, { 0, 3, "E", ImGuiKey_E }, { 0, 4, "R", ImGuiKey_R },
+ { 1, 0, "", ImGuiKey_CapsLock }, { 1, 1, "A", ImGuiKey_A }, { 1, 2, "S", ImGuiKey_S }, { 1, 3, "D", ImGuiKey_D }, { 1, 4, "F", ImGuiKey_F },
+ { 2, 0, "", ImGuiKey_LeftShift },{ 2, 1, "Z", ImGuiKey_Z }, { 2, 2, "X", ImGuiKey_X }, { 2, 3, "C", ImGuiKey_C }, { 2, 4, "V", ImGuiKey_V }
+ };
+
+ // Elements rendered manually via ImDrawList API are not clipped automatically.
+ // While not strictly necessary, here IsItemVisible() is used to avoid rendering these shapes when they are out of view.
+ ImGui::Dummy(ImVec2(board_max.x - board_min.x, board_max.y - board_min.y));
+ if (ImGui::IsItemVisible())
+ {
+ ImDrawList* draw_list = ImGui::GetWindowDrawList();
+ draw_list->PushClipRect(board_min, board_max, true);
+ for (int n = 0; n < IM_ARRAYSIZE(keys_to_display); n++)
+ {
+ const KeyLayoutData* key_data = &keys_to_display[n];
+ ImVec2 key_min = ImVec2(start_pos.x + key_data->Col * key_step.x + key_data->Row * key_row_offset, start_pos.y + key_data->Row * key_step.y);
+ ImVec2 key_max = ImVec2(key_min.x + key_size.x, key_min.y + key_size.y);
+ draw_list->AddRectFilled(key_min, key_max, IM_COL32(204, 204, 204, 255), key_rounding);
+ draw_list->AddRect(key_min, key_max, IM_COL32(24, 24, 24, 255), key_rounding);
+ ImVec2 face_min = ImVec2(key_min.x + key_face_pos.x, key_min.y + key_face_pos.y);
+ ImVec2 face_max = ImVec2(face_min.x + key_face_size.x, face_min.y + key_face_size.y);
+ draw_list->AddRect(face_min, face_max, IM_COL32(193, 193, 193, 255), key_face_rounding, ImDrawFlags_None, 2.0f);
+ draw_list->AddRectFilled(face_min, face_max, IM_COL32(252, 252, 252, 255), key_face_rounding);
+ ImVec2 label_min = ImVec2(key_min.x + key_label_pos.x, key_min.y + key_label_pos.y);
+ draw_list->AddText(label_min, IM_COL32(64, 64, 64, 255), key_data->Label);
+ if (ImGui::IsKeyDown(key_data->Key))
+ draw_list->AddRectFilled(key_min, key_max, IM_COL32(255, 0, 0, 128), key_rounding);
+ }
+ draw_list->PopClipRect();
+ }
+ }
+ ImGui::TreePop();
+ }
+
+ if (ImGui::TreeNode("Capture override"))
+ {
+ HelpMarker(
+ "The value of io.WantCaptureMouse and io.WantCaptureKeyboard are normally set by Dear ImGui "
+ "to instruct your application of how to route inputs. Typically, when a value is true, it means "
+ "Dear ImGui wants the corresponding inputs and we expect the underlying application to ignore them.\n\n"
+ "The most typical case is: when hovering a window, Dear ImGui set io.WantCaptureMouse to true, "
+ "and underlying application should ignore mouse inputs (in practice there are many and more subtle "
+ "rules leading to how those flags are set).");
+
+ ImGui::Text("io.WantCaptureMouse: %d", io.WantCaptureMouse);
+ ImGui::Text("io.WantCaptureMouseUnlessPopupClose: %d", io.WantCaptureMouseUnlessPopupClose);
+ ImGui::Text("io.WantCaptureKeyboard: %d", io.WantCaptureKeyboard);
+
+ HelpMarker(
+ "Hovering the colored canvas will override io.WantCaptureXXX fields.\n"
+ "Notice how normally (when set to none), the value of io.WantCaptureKeyboard would be false when hovering and true when clicking.");
+ static int capture_override_mouse = -1;
+ static int capture_override_keyboard = -1;
+ const char* capture_override_desc[] = { "None", "Set to false", "Set to true" };
+ ImGui::SetNextItemWidth(ImGui::GetFontSize() * 15);
+ ImGui::SliderInt("SetNextFrameWantCaptureMouse()", &capture_override_mouse, -1, +1, capture_override_desc[capture_override_mouse + 1], ImGuiSliderFlags_AlwaysClamp);
+ ImGui::SetNextItemWidth(ImGui::GetFontSize() * 15);
+ ImGui::SliderInt("SetNextFrameWantCaptureKeyboard()", &capture_override_keyboard, -1, +1, capture_override_desc[capture_override_keyboard + 1], ImGuiSliderFlags_AlwaysClamp);
+
+ ImGui::ColorButton("##panel", ImVec4(0.7f, 0.1f, 0.7f, 1.0f), ImGuiColorEditFlags_NoTooltip | ImGuiColorEditFlags_NoDragDrop, ImVec2(256.0f, 192.0f)); // Dummy item
+ if (ImGui::IsItemHovered() && capture_override_mouse != -1)
+ ImGui::SetNextFrameWantCaptureMouse(capture_override_mouse == 1);
+ if (ImGui::IsItemHovered() && capture_override_keyboard != -1)
+ ImGui::SetNextFrameWantCaptureKeyboard(capture_override_keyboard == 1);
+
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Inputs, Navigation & Focus/Tabbing");
+ if (ImGui::TreeNode("Tabbing"))
+ {
+ ImGui::Text("Use TAB/SHIFT+TAB to cycle through keyboard editable fields.");
+ static char buf[32] = "hello";
+ ImGui::InputText("1", buf, IM_ARRAYSIZE(buf));
+ ImGui::InputText("2", buf, IM_ARRAYSIZE(buf));
+ ImGui::InputText("3", buf, IM_ARRAYSIZE(buf));
+ ImGui::PushAllowKeyboardFocus(false);
+ ImGui::InputText("4 (tab skip)", buf, IM_ARRAYSIZE(buf));
+ ImGui::SameLine(); HelpMarker("Item won't be cycled through when using TAB or Shift+Tab.");
+ ImGui::PopAllowKeyboardFocus();
+ ImGui::InputText("5", buf, IM_ARRAYSIZE(buf));
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Inputs, Navigation & Focus/Focus from code");
+ if (ImGui::TreeNode("Focus from code"))
+ {
+ bool focus_1 = ImGui::Button("Focus on 1"); ImGui::SameLine();
+ bool focus_2 = ImGui::Button("Focus on 2"); ImGui::SameLine();
+ bool focus_3 = ImGui::Button("Focus on 3");
+ int has_focus = 0;
+ static char buf[128] = "click on a button to set focus";
+
+ if (focus_1) ImGui::SetKeyboardFocusHere();
+ ImGui::InputText("1", buf, IM_ARRAYSIZE(buf));
+ if (ImGui::IsItemActive()) has_focus = 1;
+
+ if (focus_2) ImGui::SetKeyboardFocusHere();
+ ImGui::InputText("2", buf, IM_ARRAYSIZE(buf));
+ if (ImGui::IsItemActive()) has_focus = 2;
+
+ ImGui::PushAllowKeyboardFocus(false);
+ if (focus_3) ImGui::SetKeyboardFocusHere();
+ ImGui::InputText("3 (tab skip)", buf, IM_ARRAYSIZE(buf));
+ if (ImGui::IsItemActive()) has_focus = 3;
+ ImGui::SameLine(); HelpMarker("Item won't be cycled through when using TAB or Shift+Tab.");
+ ImGui::PopAllowKeyboardFocus();
+
+ if (has_focus)
+ ImGui::Text("Item with focus: %d", has_focus);
+ else
+ ImGui::Text("Item with focus: <none>");
+
+ // Use >= 0 parameter to SetKeyboardFocusHere() to focus an upcoming item
+ static float f3[3] = { 0.0f, 0.0f, 0.0f };
+ int focus_ahead = -1;
+ if (ImGui::Button("Focus on X")) { focus_ahead = 0; } ImGui::SameLine();
+ if (ImGui::Button("Focus on Y")) { focus_ahead = 1; } ImGui::SameLine();
+ if (ImGui::Button("Focus on Z")) { focus_ahead = 2; }
+ if (focus_ahead != -1) ImGui::SetKeyboardFocusHere(focus_ahead);
+ ImGui::SliderFloat3("Float3", &f3[0], 0.0f, 1.0f);
+
+ ImGui::TextWrapped("NB: Cursor & selection are preserved when refocusing last used item in code.");
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Inputs, Navigation & Focus/Dragging");
+ if (ImGui::TreeNode("Dragging"))
+ {
+ ImGui::TextWrapped("You can use ImGui::GetMouseDragDelta(0) to query for the dragged amount on any widget.");
+ for (int button = 0; button < 3; button++)
+ {
+ ImGui::Text("IsMouseDragging(%d):", button);
+ ImGui::Text(" w/ default threshold: %d,", ImGui::IsMouseDragging(button));
+ ImGui::Text(" w/ zero threshold: %d,", ImGui::IsMouseDragging(button, 0.0f));
+ ImGui::Text(" w/ large threshold: %d,", ImGui::IsMouseDragging(button, 20.0f));
+ }
+
+ ImGui::Button("Drag Me");
+ if (ImGui::IsItemActive())
+ ImGui::GetForegroundDrawList()->AddLine(io.MouseClickedPos[0], io.MousePos, ImGui::GetColorU32(ImGuiCol_Button), 4.0f); // Draw a line between the button and the mouse cursor
+
+ // Drag operations gets "unlocked" when the mouse has moved past a certain threshold
+ // (the default threshold is stored in io.MouseDragThreshold). You can request a lower or higher
+ // threshold using the second parameter of IsMouseDragging() and GetMouseDragDelta().
+ ImVec2 value_raw = ImGui::GetMouseDragDelta(0, 0.0f);
+ ImVec2 value_with_lock_threshold = ImGui::GetMouseDragDelta(0);
+ ImVec2 mouse_delta = io.MouseDelta;
+ ImGui::Text("GetMouseDragDelta(0):");
+ ImGui::Text(" w/ default threshold: (%.1f, %.1f)", value_with_lock_threshold.x, value_with_lock_threshold.y);
+ ImGui::Text(" w/ zero threshold: (%.1f, %.1f)", value_raw.x, value_raw.y);
+ ImGui::Text("io.MouseDelta: (%.1f, %.1f)", mouse_delta.x, mouse_delta.y);
+ ImGui::TreePop();
+ }
+
+ IMGUI_DEMO_MARKER("Inputs, Navigation & Focus/Mouse cursors");
+ if (ImGui::TreeNode("Mouse cursors"))
+ {
+ const char* mouse_cursors_names[] = { "Arrow", "TextInput", "ResizeAll", "ResizeNS", "ResizeEW", "ResizeNESW", "ResizeNWSE", "Hand", "NotAllowed" };
+ IM_ASSERT(IM_ARRAYSIZE(mouse_cursors_names) == ImGuiMouseCursor_COUNT);
+
+ ImGuiMouseCursor current = ImGui::GetMouseCursor();
+ ImGui::Text("Current mouse cursor = %d: %s", current, mouse_cursors_names[current]);
+ ImGui::Text("Hover to see mouse cursors:");
+ ImGui::SameLine(); HelpMarker(
+ "Your application can render a different mouse cursor based on what ImGui::GetMouseCursor() returns. "
+ "If software cursor rendering (io.MouseDrawCursor) is set ImGui will draw the right cursor for you, "
+ "otherwise your backend needs to handle it.");
+ for (int i = 0; i < ImGuiMouseCursor_COUNT; i++)
+ {
+ char label[32];
+ sprintf(label, "Mouse cursor %d: %s", i, mouse_cursors_names[i]);
+ ImGui::Bullet(); ImGui::Selectable(label, false);
+ if (ImGui::IsItemHovered())
+ ImGui::SetMouseCursor(i);
+ }
+ ImGui::TreePop();
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] About Window / ShowAboutWindow()
+// Access from Dear ImGui Demo -> Tools -> About
+//-----------------------------------------------------------------------------
+
+void ImGui::ShowAboutWindow(bool* p_open)
+{
+ if (!ImGui::Begin("About Dear ImGui", p_open, ImGuiWindowFlags_AlwaysAutoResize))
+ {
+ ImGui::End();
+ return;
+ }
+ IMGUI_DEMO_MARKER("Tools/About Dear ImGui");
+ ImGui::Text("Dear ImGui %s", ImGui::GetVersion());
+ ImGui::Separator();
+ ImGui::Text("By Omar Cornut and all Dear ImGui contributors.");
+ ImGui::Text("Dear ImGui is licensed under the MIT License, see LICENSE for more information.");
+
+ static bool show_config_info = false;
+ ImGui::Checkbox("Config/Build Information", &show_config_info);
+ if (show_config_info)
+ {
+ ImGuiIO& io = ImGui::GetIO();
+ ImGuiStyle& style = ImGui::GetStyle();
+
+ bool copy_to_clipboard = ImGui::Button("Copy to clipboard");
+ ImVec2 child_size = ImVec2(0, ImGui::GetTextLineHeightWithSpacing() * 18);
+ ImGui::BeginChildFrame(ImGui::GetID("cfg_infos"), child_size, ImGuiWindowFlags_NoMove);
+ if (copy_to_clipboard)
+ {
+ ImGui::LogToClipboard();
+ ImGui::LogText("```\n"); // Back quotes will make text appears without formatting when pasting on GitHub
+ }
+
+ ImGui::Text("Dear ImGui %s (%d)", IMGUI_VERSION, IMGUI_VERSION_NUM);
+ ImGui::Separator();
+ ImGui::Text("sizeof(size_t): %d, sizeof(ImDrawIdx): %d, sizeof(ImDrawVert): %d", (int)sizeof(size_t), (int)sizeof(ImDrawIdx), (int)sizeof(ImDrawVert));
+ ImGui::Text("define: __cplusplus=%d", (int)__cplusplus);
+#ifdef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ ImGui::Text("define: IMGUI_DISABLE_OBSOLETE_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_OBSOLETE_KEYIO
+ ImGui::Text("define: IMGUI_DISABLE_OBSOLETE_KEYIO");
+#endif
+#ifdef IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS
+ ImGui::Text("define: IMGUI_DISABLE_WIN32_DEFAULT_CLIPBOARD_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS
+ ImGui::Text("define: IMGUI_DISABLE_WIN32_DEFAULT_IME_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_WIN32_FUNCTIONS
+ ImGui::Text("define: IMGUI_DISABLE_WIN32_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
+ ImGui::Text("define: IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
+ ImGui::Text("define: IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
+ ImGui::Text("define: IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_FILE_FUNCTIONS
+ ImGui::Text("define: IMGUI_DISABLE_FILE_FUNCTIONS");
+#endif
+#ifdef IMGUI_DISABLE_DEFAULT_ALLOCATORS
+ ImGui::Text("define: IMGUI_DISABLE_DEFAULT_ALLOCATORS");
+#endif
+#ifdef IMGUI_USE_BGRA_PACKED_COLOR
+ ImGui::Text("define: IMGUI_USE_BGRA_PACKED_COLOR");
+#endif
+#ifdef _WIN32
+ ImGui::Text("define: _WIN32");
+#endif
+#ifdef _WIN64
+ ImGui::Text("define: _WIN64");
+#endif
+#ifdef __linux__
+ ImGui::Text("define: __linux__");
+#endif
+#ifdef __APPLE__
+ ImGui::Text("define: __APPLE__");
+#endif
+#ifdef _MSC_VER
+ ImGui::Text("define: _MSC_VER=%d", _MSC_VER);
+#endif
+#ifdef _MSVC_LANG
+ ImGui::Text("define: _MSVC_LANG=%d", (int)_MSVC_LANG);
+#endif
+#ifdef __MINGW32__
+ ImGui::Text("define: __MINGW32__");
+#endif
+#ifdef __MINGW64__
+ ImGui::Text("define: __MINGW64__");
+#endif
+#ifdef __GNUC__
+ ImGui::Text("define: __GNUC__=%d", (int)__GNUC__);
+#endif
+#ifdef __clang_version__
+ ImGui::Text("define: __clang_version__=%s", __clang_version__);
+#endif
+ ImGui::Separator();
+ ImGui::Text("io.BackendPlatformName: %s", io.BackendPlatformName ? io.BackendPlatformName : "NULL");
+ ImGui::Text("io.BackendRendererName: %s", io.BackendRendererName ? io.BackendRendererName : "NULL");
+ ImGui::Text("io.ConfigFlags: 0x%08X", io.ConfigFlags);
+ if (io.ConfigFlags & ImGuiConfigFlags_NavEnableKeyboard) ImGui::Text(" NavEnableKeyboard");
+ if (io.ConfigFlags & ImGuiConfigFlags_NavEnableGamepad) ImGui::Text(" NavEnableGamepad");
+ if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) ImGui::Text(" NavEnableSetMousePos");
+ if (io.ConfigFlags & ImGuiConfigFlags_NavNoCaptureKeyboard) ImGui::Text(" NavNoCaptureKeyboard");
+ if (io.ConfigFlags & ImGuiConfigFlags_NoMouse) ImGui::Text(" NoMouse");
+ if (io.ConfigFlags & ImGuiConfigFlags_NoMouseCursorChange) ImGui::Text(" NoMouseCursorChange");
+ if (io.MouseDrawCursor) ImGui::Text("io.MouseDrawCursor");
+ if (io.ConfigMacOSXBehaviors) ImGui::Text("io.ConfigMacOSXBehaviors");
+ if (io.ConfigInputTextCursorBlink) ImGui::Text("io.ConfigInputTextCursorBlink");
+ if (io.ConfigWindowsResizeFromEdges) ImGui::Text("io.ConfigWindowsResizeFromEdges");
+ if (io.ConfigWindowsMoveFromTitleBarOnly) ImGui::Text("io.ConfigWindowsMoveFromTitleBarOnly");
+ if (io.ConfigMemoryCompactTimer >= 0.0f) ImGui::Text("io.ConfigMemoryCompactTimer = %.1f", io.ConfigMemoryCompactTimer);
+ ImGui::Text("io.BackendFlags: 0x%08X", io.BackendFlags);
+ if (io.BackendFlags & ImGuiBackendFlags_HasGamepad) ImGui::Text(" HasGamepad");
+ if (io.BackendFlags & ImGuiBackendFlags_HasMouseCursors) ImGui::Text(" HasMouseCursors");
+ if (io.BackendFlags & ImGuiBackendFlags_HasSetMousePos) ImGui::Text(" HasSetMousePos");
+ if (io.BackendFlags & ImGuiBackendFlags_RendererHasVtxOffset) ImGui::Text(" RendererHasVtxOffset");
+ ImGui::Separator();
+ ImGui::Text("io.Fonts: %d fonts, Flags: 0x%08X, TexSize: %d,%d", io.Fonts->Fonts.Size, io.Fonts->Flags, io.Fonts->TexWidth, io.Fonts->TexHeight);
+ ImGui::Text("io.DisplaySize: %.2f,%.2f", io.DisplaySize.x, io.DisplaySize.y);
+ ImGui::Text("io.DisplayFramebufferScale: %.2f,%.2f", io.DisplayFramebufferScale.x, io.DisplayFramebufferScale.y);
+ ImGui::Separator();
+ ImGui::Text("style.WindowPadding: %.2f,%.2f", style.WindowPadding.x, style.WindowPadding.y);
+ ImGui::Text("style.WindowBorderSize: %.2f", style.WindowBorderSize);
+ ImGui::Text("style.FramePadding: %.2f,%.2f", style.FramePadding.x, style.FramePadding.y);
+ ImGui::Text("style.FrameRounding: %.2f", style.FrameRounding);
+ ImGui::Text("style.FrameBorderSize: %.2f", style.FrameBorderSize);
+ ImGui::Text("style.ItemSpacing: %.2f,%.2f", style.ItemSpacing.x, style.ItemSpacing.y);
+ ImGui::Text("style.ItemInnerSpacing: %.2f,%.2f", style.ItemInnerSpacing.x, style.ItemInnerSpacing.y);
+
+ if (copy_to_clipboard)
+ {
+ ImGui::LogText("\n```\n");
+ ImGui::LogFinish();
+ }
+ ImGui::EndChildFrame();
+ }
+ ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Style Editor / ShowStyleEditor()
+//-----------------------------------------------------------------------------
+// - ShowFontSelector()
+// - ShowStyleSelector()
+// - ShowStyleEditor()
+//-----------------------------------------------------------------------------
+
+// Forward declare ShowFontAtlas() which isn't worth putting in public API yet
+namespace ImGui { IMGUI_API void ShowFontAtlas(ImFontAtlas* atlas); }
+
+// Demo helper function to select among loaded fonts.
+// Here we use the regular BeginCombo()/EndCombo() api which is the more flexible one.
+void ImGui::ShowFontSelector(const char* label)
+{
+ ImGuiIO& io = ImGui::GetIO();
+ ImFont* font_current = ImGui::GetFont();
+ if (ImGui::BeginCombo(label, font_current->GetDebugName()))
+ {
+ for (int n = 0; n < io.Fonts->Fonts.Size; n++)
+ {
+ ImFont* font = io.Fonts->Fonts[n];
+ ImGui::PushID((void*)font);
+ if (ImGui::Selectable(font->GetDebugName(), font == font_current))
+ io.FontDefault = font;
+ ImGui::PopID();
+ }
+ ImGui::EndCombo();
+ }
+ ImGui::SameLine();
+ HelpMarker(
+ "- Load additional fonts with io.Fonts->AddFontFromFileTTF().\n"
+ "- The font atlas is built when calling io.Fonts->GetTexDataAsXXXX() or io.Fonts->Build().\n"
+ "- Read FAQ and docs/FONTS.md for more details.\n"
+ "- If you need to add/remove fonts at runtime (e.g. for DPI change), do it before calling NewFrame().");
+}
+
+// Demo helper function to select among default colors. See ShowStyleEditor() for more advanced options.
+// Here we use the simplified Combo() api that packs items into a single literal string.
+// Useful for quick combo boxes where the choices are known locally.
+bool ImGui::ShowStyleSelector(const char* label)
+{
+ static int style_idx = -1;
+ if (ImGui::Combo(label, &style_idx, "Dark\0Light\0Classic\0"))
+ {
+ switch (style_idx)
+ {
+ case 0: ImGui::StyleColorsDark(); break;
+ case 1: ImGui::StyleColorsLight(); break;
+ case 2: ImGui::StyleColorsClassic(); break;
+ }
+ return true;
+ }
+ return false;
+}
+
+void ImGui::ShowStyleEditor(ImGuiStyle* ref)
+{
+ IMGUI_DEMO_MARKER("Tools/Style Editor");
+ // You can pass in a reference ImGuiStyle structure to compare to, revert to and save to
+ // (without a reference style pointer, we will use one compared locally as a reference)
+ ImGuiStyle& style = ImGui::GetStyle();
+ static ImGuiStyle ref_saved_style;
+
+ // Default to using internal storage as reference
+ static bool init = true;
+ if (init && ref == NULL)
+ ref_saved_style = style;
+ init = false;
+ if (ref == NULL)
+ ref = &ref_saved_style;
+
+ ImGui::PushItemWidth(ImGui::GetWindowWidth() * 0.50f);
+
+ if (ImGui::ShowStyleSelector("Colors##Selector"))
+ ref_saved_style = style;
+ ImGui::ShowFontSelector("Fonts##Selector");
+
+ // Simplified Settings (expose floating-pointer border sizes as boolean representing 0.0f or 1.0f)
+ if (ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f"))
+ style.GrabRounding = style.FrameRounding; // Make GrabRounding always the same value as FrameRounding
+ { bool border = (style.WindowBorderSize > 0.0f); if (ImGui::Checkbox("WindowBorder", &border)) { style.WindowBorderSize = border ? 1.0f : 0.0f; } }
+ ImGui::SameLine();
+ { bool border = (style.FrameBorderSize > 0.0f); if (ImGui::Checkbox("FrameBorder", &border)) { style.FrameBorderSize = border ? 1.0f : 0.0f; } }
+ ImGui::SameLine();
+ { bool border = (style.PopupBorderSize > 0.0f); if (ImGui::Checkbox("PopupBorder", &border)) { style.PopupBorderSize = border ? 1.0f : 0.0f; } }
+
+ // Save/Revert button
+ if (ImGui::Button("Save Ref"))
+ *ref = ref_saved_style = style;
+ ImGui::SameLine();
+ if (ImGui::Button("Revert Ref"))
+ style = *ref;
+ ImGui::SameLine();
+ HelpMarker(
+ "Save/Revert in local non-persistent storage. Default Colors definition are not affected. "
+ "Use \"Export\" below to save them somewhere.");
+
+ ImGui::Separator();
+
+ if (ImGui::BeginTabBar("##tabs", ImGuiTabBarFlags_None))
+ {
+ if (ImGui::BeginTabItem("Sizes"))
+ {
+ ImGui::Text("Main");
+ ImGui::SliderFloat2("WindowPadding", (float*)&style.WindowPadding, 0.0f, 20.0f, "%.0f");
+ ImGui::SliderFloat2("FramePadding", (float*)&style.FramePadding, 0.0f, 20.0f, "%.0f");
+ ImGui::SliderFloat2("CellPadding", (float*)&style.CellPadding, 0.0f, 20.0f, "%.0f");
+ ImGui::SliderFloat2("ItemSpacing", (float*)&style.ItemSpacing, 0.0f, 20.0f, "%.0f");
+ ImGui::SliderFloat2("ItemInnerSpacing", (float*)&style.ItemInnerSpacing, 0.0f, 20.0f, "%.0f");
+ ImGui::SliderFloat2("TouchExtraPadding", (float*)&style.TouchExtraPadding, 0.0f, 10.0f, "%.0f");
+ ImGui::SliderFloat("IndentSpacing", &style.IndentSpacing, 0.0f, 30.0f, "%.0f");
+ ImGui::SliderFloat("ScrollbarSize", &style.ScrollbarSize, 1.0f, 20.0f, "%.0f");
+ ImGui::SliderFloat("GrabMinSize", &style.GrabMinSize, 1.0f, 20.0f, "%.0f");
+ ImGui::Text("Borders");
+ ImGui::SliderFloat("WindowBorderSize", &style.WindowBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::SliderFloat("ChildBorderSize", &style.ChildBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::SliderFloat("PopupBorderSize", &style.PopupBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::SliderFloat("FrameBorderSize", &style.FrameBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::SliderFloat("TabBorderSize", &style.TabBorderSize, 0.0f, 1.0f, "%.0f");
+ ImGui::Text("Rounding");
+ ImGui::SliderFloat("WindowRounding", &style.WindowRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("ChildRounding", &style.ChildRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("FrameRounding", &style.FrameRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("PopupRounding", &style.PopupRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("ScrollbarRounding", &style.ScrollbarRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("GrabRounding", &style.GrabRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("LogSliderDeadzone", &style.LogSliderDeadzone, 0.0f, 12.0f, "%.0f");
+ ImGui::SliderFloat("TabRounding", &style.TabRounding, 0.0f, 12.0f, "%.0f");
+ ImGui::Text("Alignment");
+ ImGui::SliderFloat2("WindowTitleAlign", (float*)&style.WindowTitleAlign, 0.0f, 1.0f, "%.2f");
+ int window_menu_button_position = style.WindowMenuButtonPosition + 1;
+ if (ImGui::Combo("WindowMenuButtonPosition", (int*)&window_menu_button_position, "None\0Left\0Right\0"))
+ style.WindowMenuButtonPosition = window_menu_button_position - 1;
+ ImGui::Combo("ColorButtonPosition", (int*)&style.ColorButtonPosition, "Left\0Right\0");
+ ImGui::SliderFloat2("ButtonTextAlign", (float*)&style.ButtonTextAlign, 0.0f, 1.0f, "%.2f");
+ ImGui::SameLine(); HelpMarker("Alignment applies when a button is larger than its text content.");
+ ImGui::SliderFloat2("SelectableTextAlign", (float*)&style.SelectableTextAlign, 0.0f, 1.0f, "%.2f");
+ ImGui::SameLine(); HelpMarker("Alignment applies when a selectable is larger than its text content.");
+ ImGui::Text("Safe Area Padding");
+ ImGui::SameLine(); HelpMarker("Adjust if you cannot see the edges of your screen (e.g. on a TV where scaling has not been configured).");
+ ImGui::SliderFloat2("DisplaySafeAreaPadding", (float*)&style.DisplaySafeAreaPadding, 0.0f, 30.0f, "%.0f");
+ ImGui::EndTabItem();
+ }
+
+ if (ImGui::BeginTabItem("Colors"))
+ {
+ static int output_dest = 0;
+ static bool output_only_modified = true;
+ if (ImGui::Button("Export"))
+ {
+ if (output_dest == 0)
+ ImGui::LogToClipboard();
+ else
+ ImGui::LogToTTY();
+ ImGui::LogText("ImVec4* colors = ImGui::GetStyle().Colors;" IM_NEWLINE);
+ for (int i = 0; i < ImGuiCol_COUNT; i++)
+ {
+ const ImVec4& col = style.Colors[i];
+ const char* name = ImGui::GetStyleColorName(i);
+ if (!output_only_modified || memcmp(&col, &ref->Colors[i], sizeof(ImVec4)) != 0)
+ ImGui::LogText("colors[ImGuiCol_%s]%*s= ImVec4(%.2ff, %.2ff, %.2ff, %.2ff);" IM_NEWLINE,
+ name, 23 - (int)strlen(name), "", col.x, col.y, col.z, col.w);
+ }
+ ImGui::LogFinish();
+ }
+ ImGui::SameLine(); ImGui::SetNextItemWidth(120); ImGui::Combo("##output_type", &output_dest, "To Clipboard\0To TTY\0");
+ ImGui::SameLine(); ImGui::Checkbox("Only Modified Colors", &output_only_modified);
+
+ static ImGuiTextFilter filter;
+ filter.Draw("Filter colors", ImGui::GetFontSize() * 16);
+
+ static ImGuiColorEditFlags alpha_flags = 0;
+ if (ImGui::RadioButton("Opaque", alpha_flags == ImGuiColorEditFlags_None)) { alpha_flags = ImGuiColorEditFlags_None; } ImGui::SameLine();
+ if (ImGui::RadioButton("Alpha", alpha_flags == ImGuiColorEditFlags_AlphaPreview)) { alpha_flags = ImGuiColorEditFlags_AlphaPreview; } ImGui::SameLine();
+ if (ImGui::RadioButton("Both", alpha_flags == ImGuiColorEditFlags_AlphaPreviewHalf)) { alpha_flags = ImGuiColorEditFlags_AlphaPreviewHalf; } ImGui::SameLine();
+ HelpMarker(
+ "In the color list:\n"
+ "Left-click on color square to open color picker,\n"
+ "Right-click to open edit options menu.");
+
+ ImGui::BeginChild("##colors", ImVec2(0, 0), true, ImGuiWindowFlags_AlwaysVerticalScrollbar | ImGuiWindowFlags_AlwaysHorizontalScrollbar | ImGuiWindowFlags_NavFlattened);
+ ImGui::PushItemWidth(-160);
+ for (int i = 0; i < ImGuiCol_COUNT; i++)
+ {
+ const char* name = ImGui::GetStyleColorName(i);
+ if (!filter.PassFilter(name))
+ continue;
+ ImGui::PushID(i);
+ ImGui::ColorEdit4("##color", (float*)&style.Colors[i], ImGuiColorEditFlags_AlphaBar | alpha_flags);
+ if (memcmp(&style.Colors[i], &ref->Colors[i], sizeof(ImVec4)) != 0)
+ {
+ // Tips: in a real user application, you may want to merge and use an icon font into the main font,
+ // so instead of "Save"/"Revert" you'd use icons!
+ // Read the FAQ and docs/FONTS.md about using icon fonts. It's really easy and super convenient!
+ ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Save")) { ref->Colors[i] = style.Colors[i]; }
+ ImGui::SameLine(0.0f, style.ItemInnerSpacing.x); if (ImGui::Button("Revert")) { style.Colors[i] = ref->Colors[i]; }
+ }
+ ImGui::SameLine(0.0f, style.ItemInnerSpacing.x);
+ ImGui::TextUnformatted(name);
+ ImGui::PopID();
+ }
+ ImGui::PopItemWidth();
+ ImGui::EndChild();
+
+ ImGui::EndTabItem();
+ }
+
+ if (ImGui::BeginTabItem("Fonts"))
+ {
+ ImGuiIO& io = ImGui::GetIO();
+ ImFontAtlas* atlas = io.Fonts;
+ HelpMarker("Read FAQ and docs/FONTS.md for details on font loading.");
+ ImGui::ShowFontAtlas(atlas);
+
+ // Post-baking font scaling. Note that this is NOT the nice way of scaling fonts, read below.
+ // (we enforce hard clamping manually as by default DragFloat/SliderFloat allows CTRL+Click text to get out of bounds).
+ const float MIN_SCALE = 0.3f;
+ const float MAX_SCALE = 2.0f;
+ HelpMarker(
+ "Those are old settings provided for convenience.\n"
+ "However, the _correct_ way of scaling your UI is currently to reload your font at the designed size, "
+ "rebuild the font atlas, and call style.ScaleAllSizes() on a reference ImGuiStyle structure.\n"
+ "Using those settings here will give you poor quality results.");
+ static float window_scale = 1.0f;
+ ImGui::PushItemWidth(ImGui::GetFontSize() * 8);
+ if (ImGui::DragFloat("window scale", &window_scale, 0.005f, MIN_SCALE, MAX_SCALE, "%.2f", ImGuiSliderFlags_AlwaysClamp)) // Scale only this window
+ ImGui::SetWindowFontScale(window_scale);
+ ImGui::DragFloat("global scale", &io.FontGlobalScale, 0.005f, MIN_SCALE, MAX_SCALE, "%.2f", ImGuiSliderFlags_AlwaysClamp); // Scale everything
+ ImGui::PopItemWidth();
+
+ ImGui::EndTabItem();
+ }
+
+ if (ImGui::BeginTabItem("Rendering"))
+ {
+ ImGui::Checkbox("Anti-aliased lines", &style.AntiAliasedLines);
+ ImGui::SameLine();
+ HelpMarker("When disabling anti-aliasing lines, you'll probably want to disable borders in your style as well.");
+
+ ImGui::Checkbox("Anti-aliased lines use texture", &style.AntiAliasedLinesUseTex);
+ ImGui::SameLine();
+ HelpMarker("Faster lines using texture data. Require backend to render with bilinear filtering (not point/nearest filtering).");
+
+ ImGui::Checkbox("Anti-aliased fill", &style.AntiAliasedFill);
+ ImGui::PushItemWidth(ImGui::GetFontSize() * 8);
+ ImGui::DragFloat("Curve Tessellation Tolerance", &style.CurveTessellationTol, 0.02f, 0.10f, 10.0f, "%.2f");
+ if (style.CurveTessellationTol < 0.10f) style.CurveTessellationTol = 0.10f;
+
+ // When editing the "Circle Segment Max Error" value, draw a preview of its effect on auto-tessellated circles.
+ ImGui::DragFloat("Circle Tessellation Max Error", &style.CircleTessellationMaxError , 0.005f, 0.10f, 5.0f, "%.2f", ImGuiSliderFlags_AlwaysClamp);
+ if (ImGui::IsItemActive())
+ {
+ ImGui::SetNextWindowPos(ImGui::GetCursorScreenPos());
+ ImGui::BeginTooltip();
+ ImGui::TextUnformatted("(R = radius, N = number of segments)");
+ ImGui::Spacing();
+ ImDrawList* draw_list = ImGui::GetWindowDrawList();
+ const float min_widget_width = ImGui::CalcTextSize("N: MMM\nR: MMM").x;
+ for (int n = 0; n < 8; n++)
+ {
+ const float RAD_MIN = 5.0f;
+ const float RAD_MAX = 70.0f;
+ const float rad = RAD_MIN + (RAD_MAX - RAD_MIN) * (float)n / (8.0f - 1.0f);
+
+ ImGui::BeginGroup();
+
+ ImGui::Text("R: %.f\nN: %d", rad, draw_list->_CalcCircleAutoSegmentCount(rad));
+
+ const float canvas_width = IM_MAX(min_widget_width, rad * 2.0f);
+ const float offset_x = floorf(canvas_width * 0.5f);
+ const float offset_y = floorf(RAD_MAX);
+
+ const ImVec2 p1 = ImGui::GetCursorScreenPos();
+ draw_list->AddCircle(ImVec2(p1.x + offset_x, p1.y + offset_y), rad, ImGui::GetColorU32(ImGuiCol_Text));
+ ImGui::Dummy(ImVec2(canvas_width, RAD_MAX * 2));
+
+ /*
+ const ImVec2 p2 = ImGui::GetCursorScreenPos();
+ draw_list->AddCircleFilled(ImVec2(p2.x + offset_x, p2.y + offset_y), rad, ImGui::GetColorU32(ImGuiCol_Text));
+ ImGui::Dummy(ImVec2(canvas_width, RAD_MAX * 2));
+ */
+
+ ImGui::EndGroup();
+ ImGui::SameLine();
+ }
+ ImGui::EndTooltip();
+ }
+ ImGui::SameLine();
+ HelpMarker("When drawing circle primitives with \"num_segments == 0\" tesselation will be calculated automatically.");
+
+ ImGui::DragFloat("Global Alpha", &style.Alpha, 0.005f, 0.20f, 1.0f, "%.2f"); // Not exposing zero here so user doesn't "lose" the UI (zero alpha clips all widgets). But application code could have a toggle to switch between zero and non-zero.
+ ImGui::DragFloat("Disabled Alpha", &style.DisabledAlpha, 0.005f, 0.0f, 1.0f, "%.2f"); ImGui::SameLine(); HelpMarker("Additional alpha multiplier for disabled items (multiply over current value of Alpha).");
+ ImGui::PopItemWidth();
+
+ ImGui::EndTabItem();
+ }
+
+ ImGui::EndTabBar();
+ }
+
+ ImGui::PopItemWidth();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Main Menu Bar / ShowExampleAppMainMenuBar()
+//-----------------------------------------------------------------------------
+// - ShowExampleAppMainMenuBar()
+// - ShowExampleMenuFile()
+//-----------------------------------------------------------------------------
+
+// Demonstrate creating a "main" fullscreen menu bar and populating it.
+// Note the difference between BeginMainMenuBar() and BeginMenuBar():
+// - BeginMenuBar() = menu-bar inside current window (which needs the ImGuiWindowFlags_MenuBar flag!)
+// - BeginMainMenuBar() = helper to create menu-bar-sized window at the top of the main viewport + call BeginMenuBar() into it.
+static void ShowExampleAppMainMenuBar()
+{
+ if (ImGui::BeginMainMenuBar())
+ {
+ if (ImGui::BeginMenu("File"))
+ {
+ ShowExampleMenuFile();
+ ImGui::EndMenu();
+ }
+ if (ImGui::BeginMenu("Edit"))
+ {
+ if (ImGui::MenuItem("Undo", "CTRL+Z")) {}
+ if (ImGui::MenuItem("Redo", "CTRL+Y", false, false)) {} // Disabled item
+ ImGui::Separator();
+ if (ImGui::MenuItem("Cut", "CTRL+X")) {}
+ if (ImGui::MenuItem("Copy", "CTRL+C")) {}
+ if (ImGui::MenuItem("Paste", "CTRL+V")) {}
+ ImGui::EndMenu();
+ }
+ ImGui::EndMainMenuBar();
+ }
+}
+
+// Note that shortcuts are currently provided for display only
+// (future version will add explicit flags to BeginMenu() to request processing shortcuts)
+static void ShowExampleMenuFile()
+{
+ IMGUI_DEMO_MARKER("Examples/Menu");
+ ImGui::MenuItem("(demo menu)", NULL, false, false);
+ if (ImGui::MenuItem("New")) {}
+ if (ImGui::MenuItem("Open", "Ctrl+O")) {}
+ if (ImGui::BeginMenu("Open Recent"))
+ {
+ ImGui::MenuItem("fish_hat.c");
+ ImGui::MenuItem("fish_hat.inl");
+ ImGui::MenuItem("fish_hat.h");
+ if (ImGui::BeginMenu("More.."))
+ {
+ ImGui::MenuItem("Hello");
+ ImGui::MenuItem("Sailor");
+ if (ImGui::BeginMenu("Recurse.."))
+ {
+ ShowExampleMenuFile();
+ ImGui::EndMenu();
+ }
+ ImGui::EndMenu();
+ }
+ ImGui::EndMenu();
+ }
+ if (ImGui::MenuItem("Save", "Ctrl+S")) {}
+ if (ImGui::MenuItem("Save As..")) {}
+
+ ImGui::Separator();
+ IMGUI_DEMO_MARKER("Examples/Menu/Options");
+ if (ImGui::BeginMenu("Options"))
+ {
+ static bool enabled = true;
+ ImGui::MenuItem("Enabled", "", &enabled);
+ ImGui::BeginChild("child", ImVec2(0, 60), true);
+ for (int i = 0; i < 10; i++)
+ ImGui::Text("Scrolling Text %d", i);
+ ImGui::EndChild();
+ static float f = 0.5f;
+ static int n = 0;
+ ImGui::SliderFloat("Value", &f, 0.0f, 1.0f);
+ ImGui::InputFloat("Input", &f, 0.1f);
+ ImGui::Combo("Combo", &n, "Yes\0No\0Maybe\0\0");
+ ImGui::EndMenu();
+ }
+
+ IMGUI_DEMO_MARKER("Examples/Menu/Colors");
+ if (ImGui::BeginMenu("Colors"))
+ {
+ float sz = ImGui::GetTextLineHeight();
+ for (int i = 0; i < ImGuiCol_COUNT; i++)
+ {
+ const char* name = ImGui::GetStyleColorName((ImGuiCol)i);
+ ImVec2 p = ImGui::GetCursorScreenPos();
+ ImGui::GetWindowDrawList()->AddRectFilled(p, ImVec2(p.x + sz, p.y + sz), ImGui::GetColorU32((ImGuiCol)i));
+ ImGui::Dummy(ImVec2(sz, sz));
+ ImGui::SameLine();
+ ImGui::MenuItem(name);
+ }
+ ImGui::EndMenu();
+ }
+
+ // Here we demonstrate appending again to the "Options" menu (which we already created above)
+ // Of course in this demo it is a little bit silly that this function calls BeginMenu("Options") twice.
+ // In a real code-base using it would make senses to use this feature from very different code locations.
+ if (ImGui::BeginMenu("Options")) // <-- Append!
+ {
+ IMGUI_DEMO_MARKER("Examples/Menu/Append to an existing menu");
+ static bool b = true;
+ ImGui::Checkbox("SomeOption", &b);
+ ImGui::EndMenu();
+ }
+
+ if (ImGui::BeginMenu("Disabled", false)) // Disabled
+ {
+ IM_ASSERT(0);
+ }
+ if (ImGui::MenuItem("Checked", NULL, true)) {}
+ if (ImGui::MenuItem("Quit", "Alt+F4")) {}
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Debug Console / ShowExampleAppConsole()
+//-----------------------------------------------------------------------------
+
+// Demonstrate creating a simple console window, with scrolling, filtering, completion and history.
+// For the console example, we are using a more C++ like approach of declaring a class to hold both data and functions.
+struct ExampleAppConsole
+{
+ char InputBuf[256];
+ ImVector<char*> Items;
+ ImVector<const char*> Commands;
+ ImVector<char*> History;
+ int HistoryPos; // -1: new line, 0..History.Size-1 browsing history.
+ ImGuiTextFilter Filter;
+ bool AutoScroll;
+ bool ScrollToBottom;
+
+ ExampleAppConsole()
+ {
+ IMGUI_DEMO_MARKER("Examples/Console");
+ ClearLog();
+ memset(InputBuf, 0, sizeof(InputBuf));
+ HistoryPos = -1;
+
+ // "CLASSIFY" is here to provide the test case where "C"+[tab] completes to "CL" and display multiple matches.
+ Commands.push_back("HELP");
+ Commands.push_back("HISTORY");
+ Commands.push_back("CLEAR");
+ Commands.push_back("CLASSIFY");
+ AutoScroll = true;
+ ScrollToBottom = false;
+ AddLog("Welcome to Dear ImGui!");
+ }
+ ~ExampleAppConsole()
+ {
+ ClearLog();
+ for (int i = 0; i < History.Size; i++)
+ free(History[i]);
+ }
+
+ // Portable helpers
+ static int Stricmp(const char* s1, const char* s2) { int d; while ((d = toupper(*s2) - toupper(*s1)) == 0 && *s1) { s1++; s2++; } return d; }
+ static int Strnicmp(const char* s1, const char* s2, int n) { int d = 0; while (n > 0 && (d = toupper(*s2) - toupper(*s1)) == 0 && *s1) { s1++; s2++; n--; } return d; }
+ static char* Strdup(const char* s) { IM_ASSERT(s); size_t len = strlen(s) + 1; void* buf = malloc(len); IM_ASSERT(buf); return (char*)memcpy(buf, (const void*)s, len); }
+ static void Strtrim(char* s) { char* str_end = s + strlen(s); while (str_end > s && str_end[-1] == ' ') str_end--; *str_end = 0; }
+
+ void ClearLog()
+ {
+ for (int i = 0; i < Items.Size; i++)
+ free(Items[i]);
+ Items.clear();
+ }
+
+ void AddLog(const char* fmt, ...) IM_FMTARGS(2)
+ {
+ // FIXME-OPT
+ char buf[1024];
+ va_list args;
+ va_start(args, fmt);
+ vsnprintf(buf, IM_ARRAYSIZE(buf), fmt, args);
+ buf[IM_ARRAYSIZE(buf)-1] = 0;
+ va_end(args);
+ Items.push_back(Strdup(buf));
+ }
+
+ void Draw(const char* title, bool* p_open)
+ {
+ ImGui::SetNextWindowSize(ImVec2(520, 600), ImGuiCond_FirstUseEver);
+ if (!ImGui::Begin(title, p_open))
+ {
+ ImGui::End();
+ return;
+ }
+
+ // As a specific feature guaranteed by the library, after calling Begin() the last Item represent the title bar.
+ // So e.g. IsItemHovered() will return true when hovering the title bar.
+ // Here we create a context menu only available from the title bar.
+ if (ImGui::BeginPopupContextItem())
+ {
+ if (ImGui::MenuItem("Close Console"))
+ *p_open = false;
+ ImGui::EndPopup();
+ }
+
+ ImGui::TextWrapped(
+ "This example implements a console with basic coloring, completion (TAB key) and history (Up/Down keys). A more elaborate "
+ "implementation may want to store entries along with extra data such as timestamp, emitter, etc.");
+ ImGui::TextWrapped("Enter 'HELP' for help.");
+
+ // TODO: display items starting from the bottom
+
+ if (ImGui::SmallButton("Add Debug Text")) { AddLog("%d some text", Items.Size); AddLog("some more text"); AddLog("display very important message here!"); }
+ ImGui::SameLine();
+ if (ImGui::SmallButton("Add Debug Error")) { AddLog("[error] something went wrong"); }
+ ImGui::SameLine();
+ if (ImGui::SmallButton("Clear")) { ClearLog(); }
+ ImGui::SameLine();
+ bool copy_to_clipboard = ImGui::SmallButton("Copy");
+ //static float t = 0.0f; if (ImGui::GetTime() - t > 0.02f) { t = ImGui::GetTime(); AddLog("Spam %f", t); }
+
+ ImGui::Separator();
+
+ // Options menu
+ if (ImGui::BeginPopup("Options"))
+ {
+ ImGui::Checkbox("Auto-scroll", &AutoScroll);
+ ImGui::EndPopup();
+ }
+
+ // Options, Filter
+ if (ImGui::Button("Options"))
+ ImGui::OpenPopup("Options");
+ ImGui::SameLine();
+ Filter.Draw("Filter (\"incl,-excl\") (\"error\")", 180);
+ ImGui::Separator();
+
+ // Reserve enough left-over height for 1 separator + 1 input text
+ const float footer_height_to_reserve = ImGui::GetStyle().ItemSpacing.y + ImGui::GetFrameHeightWithSpacing();
+ ImGui::BeginChild("ScrollingRegion", ImVec2(0, -footer_height_to_reserve), false, ImGuiWindowFlags_HorizontalScrollbar);
+ if (ImGui::BeginPopupContextWindow())
+ {
+ if (ImGui::Selectable("Clear")) ClearLog();
+ ImGui::EndPopup();
+ }
+
+ // Display every line as a separate entry so we can change their color or add custom widgets.
+ // If you only want raw text you can use ImGui::TextUnformatted(log.begin(), log.end());
+ // NB- if you have thousands of entries this approach may be too inefficient and may require user-side clipping
+ // to only process visible items. The clipper will automatically measure the height of your first item and then
+ // "seek" to display only items in the visible area.
+ // To use the clipper we can replace your standard loop:
+ // for (int i = 0; i < Items.Size; i++)
+ // With:
+ // ImGuiListClipper clipper;
+ // clipper.Begin(Items.Size);
+ // while (clipper.Step())
+ // for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+ // - That your items are evenly spaced (same height)
+ // - That you have cheap random access to your elements (you can access them given their index,
+ // without processing all the ones before)
+ // You cannot this code as-is if a filter is active because it breaks the 'cheap random-access' property.
+ // We would need random-access on the post-filtered list.
+ // A typical application wanting coarse clipping and filtering may want to pre-compute an array of indices
+ // or offsets of items that passed the filtering test, recomputing this array when user changes the filter,
+ // and appending newly elements as they are inserted. This is left as a task to the user until we can manage
+ // to improve this example code!
+ // If your items are of variable height:
+ // - Split them into same height items would be simpler and facilitate random-seeking into your list.
+ // - Consider using manual call to IsRectVisible() and skipping extraneous decoration from your items.
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(4, 1)); // Tighten spacing
+ if (copy_to_clipboard)
+ ImGui::LogToClipboard();
+ for (int i = 0; i < Items.Size; i++)
+ {
+ const char* item = Items[i];
+ if (!Filter.PassFilter(item))
+ continue;
+
+ // Normally you would store more information in your item than just a string.
+ // (e.g. make Items[] an array of structure, store color/type etc.)
+ ImVec4 color;
+ bool has_color = false;
+ if (strstr(item, "[error]")) { color = ImVec4(1.0f, 0.4f, 0.4f, 1.0f); has_color = true; }
+ else if (strncmp(item, "# ", 2) == 0) { color = ImVec4(1.0f, 0.8f, 0.6f, 1.0f); has_color = true; }
+ if (has_color)
+ ImGui::PushStyleColor(ImGuiCol_Text, color);
+ ImGui::TextUnformatted(item);
+ if (has_color)
+ ImGui::PopStyleColor();
+ }
+ if (copy_to_clipboard)
+ ImGui::LogFinish();
+
+ if (ScrollToBottom || (AutoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY()))
+ ImGui::SetScrollHereY(1.0f);
+ ScrollToBottom = false;
+
+ ImGui::PopStyleVar();
+ ImGui::EndChild();
+ ImGui::Separator();
+
+ // Command-line
+ bool reclaim_focus = false;
+ ImGuiInputTextFlags input_text_flags = ImGuiInputTextFlags_EnterReturnsTrue | ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_CallbackHistory;
+ if (ImGui::InputText("Input", InputBuf, IM_ARRAYSIZE(InputBuf), input_text_flags, &TextEditCallbackStub, (void*)this))
+ {
+ char* s = InputBuf;
+ Strtrim(s);
+ if (s[0])
+ ExecCommand(s);
+ strcpy(s, "");
+ reclaim_focus = true;
+ }
+
+ // Auto-focus on window apparition
+ ImGui::SetItemDefaultFocus();
+ if (reclaim_focus)
+ ImGui::SetKeyboardFocusHere(-1); // Auto focus previous widget
+
+ ImGui::End();
+ }
+
+ void ExecCommand(const char* command_line)
+ {
+ AddLog("# %s\n", command_line);
+
+ // Insert into history. First find match and delete it so it can be pushed to the back.
+ // This isn't trying to be smart or optimal.
+ HistoryPos = -1;
+ for (int i = History.Size - 1; i >= 0; i--)
+ if (Stricmp(History[i], command_line) == 0)
+ {
+ free(History[i]);
+ History.erase(History.begin() + i);
+ break;
+ }
+ History.push_back(Strdup(command_line));
+
+ // Process command
+ if (Stricmp(command_line, "CLEAR") == 0)
+ {
+ ClearLog();
+ }
+ else if (Stricmp(command_line, "HELP") == 0)
+ {
+ AddLog("Commands:");
+ for (int i = 0; i < Commands.Size; i++)
+ AddLog("- %s", Commands[i]);
+ }
+ else if (Stricmp(command_line, "HISTORY") == 0)
+ {
+ int first = History.Size - 10;
+ for (int i = first > 0 ? first : 0; i < History.Size; i++)
+ AddLog("%3d: %s\n", i, History[i]);
+ }
+ else
+ {
+ AddLog("Unknown command: '%s'\n", command_line);
+ }
+
+ // On command input, we scroll to bottom even if AutoScroll==false
+ ScrollToBottom = true;
+ }
+
+ // In C++11 you'd be better off using lambdas for this sort of forwarding callbacks
+ static int TextEditCallbackStub(ImGuiInputTextCallbackData* data)
+ {
+ ExampleAppConsole* console = (ExampleAppConsole*)data->UserData;
+ return console->TextEditCallback(data);
+ }
+
+ int TextEditCallback(ImGuiInputTextCallbackData* data)
+ {
+ //AddLog("cursor: %d, selection: %d-%d", data->CursorPos, data->SelectionStart, data->SelectionEnd);
+ switch (data->EventFlag)
+ {
+ case ImGuiInputTextFlags_CallbackCompletion:
+ {
+ // Example of TEXT COMPLETION
+
+ // Locate beginning of current word
+ const char* word_end = data->Buf + data->CursorPos;
+ const char* word_start = word_end;
+ while (word_start > data->Buf)
+ {
+ const char c = word_start[-1];
+ if (c == ' ' || c == '\t' || c == ',' || c == ';')
+ break;
+ word_start--;
+ }
+
+ // Build a list of candidates
+ ImVector<const char*> candidates;
+ for (int i = 0; i < Commands.Size; i++)
+ if (Strnicmp(Commands[i], word_start, (int)(word_end - word_start)) == 0)
+ candidates.push_back(Commands[i]);
+
+ if (candidates.Size == 0)
+ {
+ // No match
+ AddLog("No match for \"%.*s\"!\n", (int)(word_end - word_start), word_start);
+ }
+ else if (candidates.Size == 1)
+ {
+ // Single match. Delete the beginning of the word and replace it entirely so we've got nice casing.
+ data->DeleteChars((int)(word_start - data->Buf), (int)(word_end - word_start));
+ data->InsertChars(data->CursorPos, candidates[0]);
+ data->InsertChars(data->CursorPos, " ");
+ }
+ else
+ {
+ // Multiple matches. Complete as much as we can..
+ // So inputing "C"+Tab will complete to "CL" then display "CLEAR" and "CLASSIFY" as matches.
+ int match_len = (int)(word_end - word_start);
+ for (;;)
+ {
+ int c = 0;
+ bool all_candidates_matches = true;
+ for (int i = 0; i < candidates.Size && all_candidates_matches; i++)
+ if (i == 0)
+ c = toupper(candidates[i][match_len]);
+ else if (c == 0 || c != toupper(candidates[i][match_len]))
+ all_candidates_matches = false;
+ if (!all_candidates_matches)
+ break;
+ match_len++;
+ }
+
+ if (match_len > 0)
+ {
+ data->DeleteChars((int)(word_start - data->Buf), (int)(word_end - word_start));
+ data->InsertChars(data->CursorPos, candidates[0], candidates[0] + match_len);
+ }
+
+ // List matches
+ AddLog("Possible matches:\n");
+ for (int i = 0; i < candidates.Size; i++)
+ AddLog("- %s\n", candidates[i]);
+ }
+
+ break;
+ }
+ case ImGuiInputTextFlags_CallbackHistory:
+ {
+ // Example of HISTORY
+ const int prev_history_pos = HistoryPos;
+ if (data->EventKey == ImGuiKey_UpArrow)
+ {
+ if (HistoryPos == -1)
+ HistoryPos = History.Size - 1;
+ else if (HistoryPos > 0)
+ HistoryPos--;
+ }
+ else if (data->EventKey == ImGuiKey_DownArrow)
+ {
+ if (HistoryPos != -1)
+ if (++HistoryPos >= History.Size)
+ HistoryPos = -1;
+ }
+
+ // A better implementation would preserve the data on the current input line along with cursor position.
+ if (prev_history_pos != HistoryPos)
+ {
+ const char* history_str = (HistoryPos >= 0) ? History[HistoryPos] : "";
+ data->DeleteChars(0, data->BufTextLen);
+ data->InsertChars(0, history_str);
+ }
+ }
+ }
+ return 0;
+ }
+};
+
+static void ShowExampleAppConsole(bool* p_open)
+{
+ static ExampleAppConsole console;
+ console.Draw("Example: Console", p_open);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Debug Log / ShowExampleAppLog()
+//-----------------------------------------------------------------------------
+
+// Usage:
+// static ExampleAppLog my_log;
+// my_log.AddLog("Hello %d world\n", 123);
+// my_log.Draw("title");
+struct ExampleAppLog
+{
+ ImGuiTextBuffer Buf;
+ ImGuiTextFilter Filter;
+ ImVector<int> LineOffsets; // Index to lines offset. We maintain this with AddLog() calls.
+ bool AutoScroll; // Keep scrolling if already at the bottom.
+
+ ExampleAppLog()
+ {
+ AutoScroll = true;
+ Clear();
+ }
+
+ void Clear()
+ {
+ Buf.clear();
+ LineOffsets.clear();
+ LineOffsets.push_back(0);
+ }
+
+ void AddLog(const char* fmt, ...) IM_FMTARGS(2)
+ {
+ int old_size = Buf.size();
+ va_list args;
+ va_start(args, fmt);
+ Buf.appendfv(fmt, args);
+ va_end(args);
+ for (int new_size = Buf.size(); old_size < new_size; old_size++)
+ if (Buf[old_size] == '\n')
+ LineOffsets.push_back(old_size + 1);
+ }
+
+ void Draw(const char* title, bool* p_open = NULL)
+ {
+ if (!ImGui::Begin(title, p_open))
+ {
+ ImGui::End();
+ return;
+ }
+
+ // Options menu
+ if (ImGui::BeginPopup("Options"))
+ {
+ ImGui::Checkbox("Auto-scroll", &AutoScroll);
+ ImGui::EndPopup();
+ }
+
+ // Main window
+ if (ImGui::Button("Options"))
+ ImGui::OpenPopup("Options");
+ ImGui::SameLine();
+ bool clear = ImGui::Button("Clear");
+ ImGui::SameLine();
+ bool copy = ImGui::Button("Copy");
+ ImGui::SameLine();
+ Filter.Draw("Filter", -100.0f);
+
+ ImGui::Separator();
+ ImGui::BeginChild("scrolling", ImVec2(0, 0), false, ImGuiWindowFlags_HorizontalScrollbar);
+
+ if (clear)
+ Clear();
+ if (copy)
+ ImGui::LogToClipboard();
+
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
+ const char* buf = Buf.begin();
+ const char* buf_end = Buf.end();
+ if (Filter.IsActive())
+ {
+ // In this example we don't use the clipper when Filter is enabled.
+ // This is because we don't have a random access on the result on our filter.
+ // A real application processing logs with ten of thousands of entries may want to store the result of
+ // search/filter.. especially if the filtering function is not trivial (e.g. reg-exp).
+ for (int line_no = 0; line_no < LineOffsets.Size; line_no++)
+ {
+ const char* line_start = buf + LineOffsets[line_no];
+ const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
+ if (Filter.PassFilter(line_start, line_end))
+ ImGui::TextUnformatted(line_start, line_end);
+ }
+ }
+ else
+ {
+ // The simplest and easy way to display the entire buffer:
+ // ImGui::TextUnformatted(buf_begin, buf_end);
+ // And it'll just work. TextUnformatted() has specialization for large blob of text and will fast-forward
+ // to skip non-visible lines. Here we instead demonstrate using the clipper to only process lines that are
+ // within the visible area.
+ // If you have tens of thousands of items and their processing cost is non-negligible, coarse clipping them
+ // on your side is recommended. Using ImGuiListClipper requires
+ // - A) random access into your data
+ // - B) items all being the same height,
+ // both of which we can handle since we an array pointing to the beginning of each line of text.
+ // When using the filter (in the block of code above) we don't have random access into the data to display
+ // anymore, which is why we don't use the clipper. Storing or skimming through the search result would make
+ // it possible (and would be recommended if you want to search through tens of thousands of entries).
+ ImGuiListClipper clipper;
+ clipper.Begin(LineOffsets.Size);
+ while (clipper.Step())
+ {
+ for (int line_no = clipper.DisplayStart; line_no < clipper.DisplayEnd; line_no++)
+ {
+ const char* line_start = buf + LineOffsets[line_no];
+ const char* line_end = (line_no + 1 < LineOffsets.Size) ? (buf + LineOffsets[line_no + 1] - 1) : buf_end;
+ ImGui::TextUnformatted(line_start, line_end);
+ }
+ }
+ clipper.End();
+ }
+ ImGui::PopStyleVar();
+
+ if (AutoScroll && ImGui::GetScrollY() >= ImGui::GetScrollMaxY())
+ ImGui::SetScrollHereY(1.0f);
+
+ ImGui::EndChild();
+ ImGui::End();
+ }
+};
+
+// Demonstrate creating a simple log window with basic filtering.
+static void ShowExampleAppLog(bool* p_open)
+{
+ static ExampleAppLog log;
+
+ // For the demo: add a debug button _BEFORE_ the normal log window contents
+ // We take advantage of a rarely used feature: multiple calls to Begin()/End() are appending to the _same_ window.
+ // Most of the contents of the window will be added by the log.Draw() call.
+ ImGui::SetNextWindowSize(ImVec2(500, 400), ImGuiCond_FirstUseEver);
+ ImGui::Begin("Example: Log", p_open);
+ IMGUI_DEMO_MARKER("Examples/Log");
+ if (ImGui::SmallButton("[Debug] Add 5 entries"))
+ {
+ static int counter = 0;
+ const char* categories[3] = { "info", "warn", "error" };
+ const char* words[] = { "Bumfuzzled", "Cattywampus", "Snickersnee", "Abibliophobia", "Absquatulate", "Nincompoop", "Pauciloquent" };
+ for (int n = 0; n < 5; n++)
+ {
+ const char* category = categories[counter % IM_ARRAYSIZE(categories)];
+ const char* word = words[counter % IM_ARRAYSIZE(words)];
+ log.AddLog("[%05d] [%s] Hello, current time is %.1f, here's a word: '%s'\n",
+ ImGui::GetFrameCount(), category, ImGui::GetTime(), word);
+ counter++;
+ }
+ }
+ ImGui::End();
+
+ // Actually call in the regular Log helper (which will Begin() into the same window as we just did)
+ log.Draw("Example: Log", p_open);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Simple Layout / ShowExampleAppLayout()
+//-----------------------------------------------------------------------------
+
+// Demonstrate create a window with multiple child windows.
+static void ShowExampleAppLayout(bool* p_open)
+{
+ ImGui::SetNextWindowSize(ImVec2(500, 440), ImGuiCond_FirstUseEver);
+ if (ImGui::Begin("Example: Simple layout", p_open, ImGuiWindowFlags_MenuBar))
+ {
+ IMGUI_DEMO_MARKER("Examples/Simple layout");
+ if (ImGui::BeginMenuBar())
+ {
+ if (ImGui::BeginMenu("File"))
+ {
+ if (ImGui::MenuItem("Close")) *p_open = false;
+ ImGui::EndMenu();
+ }
+ ImGui::EndMenuBar();
+ }
+
+ // Left
+ static int selected = 0;
+ {
+ ImGui::BeginChild("left pane", ImVec2(150, 0), true);
+ for (int i = 0; i < 100; i++)
+ {
+ // FIXME: Good candidate to use ImGuiSelectableFlags_SelectOnNav
+ char label[128];
+ sprintf(label, "MyObject %d", i);
+ if (ImGui::Selectable(label, selected == i))
+ selected = i;
+ }
+ ImGui::EndChild();
+ }
+ ImGui::SameLine();
+
+ // Right
+ {
+ ImGui::BeginGroup();
+ ImGui::BeginChild("item view", ImVec2(0, -ImGui::GetFrameHeightWithSpacing())); // Leave room for 1 line below us
+ ImGui::Text("MyObject: %d", selected);
+ ImGui::Separator();
+ if (ImGui::BeginTabBar("##Tabs", ImGuiTabBarFlags_None))
+ {
+ if (ImGui::BeginTabItem("Description"))
+ {
+ ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. ");
+ ImGui::EndTabItem();
+ }
+ if (ImGui::BeginTabItem("Details"))
+ {
+ ImGui::Text("ID: 0123456789");
+ ImGui::EndTabItem();
+ }
+ ImGui::EndTabBar();
+ }
+ ImGui::EndChild();
+ if (ImGui::Button("Revert")) {}
+ ImGui::SameLine();
+ if (ImGui::Button("Save")) {}
+ ImGui::EndGroup();
+ }
+ }
+ ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Property Editor / ShowExampleAppPropertyEditor()
+//-----------------------------------------------------------------------------
+
+static void ShowPlaceholderObject(const char* prefix, int uid)
+{
+ // Use object uid as identifier. Most commonly you could also use the object pointer as a base ID.
+ ImGui::PushID(uid);
+
+ // Text and Tree nodes are less high than framed widgets, using AlignTextToFramePadding() we add vertical spacing to make the tree lines equal high.
+ ImGui::TableNextRow();
+ ImGui::TableSetColumnIndex(0);
+ ImGui::AlignTextToFramePadding();
+ bool node_open = ImGui::TreeNode("Object", "%s_%u", prefix, uid);
+ ImGui::TableSetColumnIndex(1);
+ ImGui::Text("my sailor is rich");
+
+ if (node_open)
+ {
+ static float placeholder_members[8] = { 0.0f, 0.0f, 1.0f, 3.1416f, 100.0f, 999.0f };
+ for (int i = 0; i < 8; i++)
+ {
+ ImGui::PushID(i); // Use field index as identifier.
+ if (i < 2)
+ {
+ ShowPlaceholderObject("Child", 424242);
+ }
+ else
+ {
+ // Here we use a TreeNode to highlight on hover (we could use e.g. Selectable as well)
+ ImGui::TableNextRow();
+ ImGui::TableSetColumnIndex(0);
+ ImGui::AlignTextToFramePadding();
+ ImGuiTreeNodeFlags flags = ImGuiTreeNodeFlags_Leaf | ImGuiTreeNodeFlags_NoTreePushOnOpen | ImGuiTreeNodeFlags_Bullet;
+ ImGui::TreeNodeEx("Field", flags, "Field_%d", i);
+
+ ImGui::TableSetColumnIndex(1);
+ ImGui::SetNextItemWidth(-FLT_MIN);
+ if (i >= 5)
+ ImGui::InputFloat("##value", &placeholder_members[i], 1.0f);
+ else
+ ImGui::DragFloat("##value", &placeholder_members[i], 0.01f);
+ ImGui::NextColumn();
+ }
+ ImGui::PopID();
+ }
+ ImGui::TreePop();
+ }
+ ImGui::PopID();
+}
+
+// Demonstrate create a simple property editor.
+static void ShowExampleAppPropertyEditor(bool* p_open)
+{
+ ImGui::SetNextWindowSize(ImVec2(430, 450), ImGuiCond_FirstUseEver);
+ if (!ImGui::Begin("Example: Property editor", p_open))
+ {
+ ImGui::End();
+ return;
+ }
+ IMGUI_DEMO_MARKER("Examples/Property Editor");
+
+ HelpMarker(
+ "This example shows how you may implement a property editor using two columns.\n"
+ "All objects/fields data are dummies here.\n"
+ "Remember that in many simple cases, you can use ImGui::SameLine(xxx) to position\n"
+ "your cursor horizontally instead of using the Columns() API.");
+
+ ImGui::PushStyleVar(ImGuiStyleVar_FramePadding, ImVec2(2, 2));
+ if (ImGui::BeginTable("split", 2, ImGuiTableFlags_BordersOuter | ImGuiTableFlags_Resizable))
+ {
+ // Iterate placeholder objects (all the same data)
+ for (int obj_i = 0; obj_i < 4; obj_i++)
+ {
+ ShowPlaceholderObject("Object", obj_i);
+ //ImGui::Separator();
+ }
+ ImGui::EndTable();
+ }
+ ImGui::PopStyleVar();
+ ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Long Text / ShowExampleAppLongText()
+//-----------------------------------------------------------------------------
+
+// Demonstrate/test rendering huge amount of text, and the incidence of clipping.
+static void ShowExampleAppLongText(bool* p_open)
+{
+ ImGui::SetNextWindowSize(ImVec2(520, 600), ImGuiCond_FirstUseEver);
+ if (!ImGui::Begin("Example: Long text display", p_open))
+ {
+ ImGui::End();
+ return;
+ }
+ IMGUI_DEMO_MARKER("Examples/Long text display");
+
+ static int test_type = 0;
+ static ImGuiTextBuffer log;
+ static int lines = 0;
+ ImGui::Text("Printing unusually long amount of text.");
+ ImGui::Combo("Test type", &test_type,
+ "Single call to TextUnformatted()\0"
+ "Multiple calls to Text(), clipped\0"
+ "Multiple calls to Text(), not clipped (slow)\0");
+ ImGui::Text("Buffer contents: %d lines, %d bytes", lines, log.size());
+ if (ImGui::Button("Clear")) { log.clear(); lines = 0; }
+ ImGui::SameLine();
+ if (ImGui::Button("Add 1000 lines"))
+ {
+ for (int i = 0; i < 1000; i++)
+ log.appendf("%i The quick brown fox jumps over the lazy dog\n", lines + i);
+ lines += 1000;
+ }
+ ImGui::BeginChild("Log");
+ switch (test_type)
+ {
+ case 0:
+ // Single call to TextUnformatted() with a big buffer
+ ImGui::TextUnformatted(log.begin(), log.end());
+ break;
+ case 1:
+ {
+ // Multiple calls to Text(), manually coarsely clipped - demonstrate how to use the ImGuiListClipper helper.
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
+ ImGuiListClipper clipper;
+ clipper.Begin(lines);
+ while (clipper.Step())
+ for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+ ImGui::Text("%i The quick brown fox jumps over the lazy dog", i);
+ ImGui::PopStyleVar();
+ break;
+ }
+ case 2:
+ // Multiple calls to Text(), not clipped (slow)
+ ImGui::PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
+ for (int i = 0; i < lines; i++)
+ ImGui::Text("%i The quick brown fox jumps over the lazy dog", i);
+ ImGui::PopStyleVar();
+ break;
+ }
+ ImGui::EndChild();
+ ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Auto Resize / ShowExampleAppAutoResize()
+//-----------------------------------------------------------------------------
+
+// Demonstrate creating a window which gets auto-resized according to its content.
+static void ShowExampleAppAutoResize(bool* p_open)
+{
+ if (!ImGui::Begin("Example: Auto-resizing window", p_open, ImGuiWindowFlags_AlwaysAutoResize))
+ {
+ ImGui::End();
+ return;
+ }
+ IMGUI_DEMO_MARKER("Examples/Auto-resizing window");
+
+ static int lines = 10;
+ ImGui::TextUnformatted(
+ "Window will resize every-frame to the size of its content.\n"
+ "Note that you probably don't want to query the window size to\n"
+ "output your content because that would create a feedback loop.");
+ ImGui::SliderInt("Number of lines", &lines, 1, 20);
+ for (int i = 0; i < lines; i++)
+ ImGui::Text("%*sThis is line %d", i * 4, "", i); // Pad with space to extend size horizontally
+ ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Constrained Resize / ShowExampleAppConstrainedResize()
+//-----------------------------------------------------------------------------
+
+// Demonstrate creating a window with custom resize constraints.
+static void ShowExampleAppConstrainedResize(bool* p_open)
+{
+ struct CustomConstraints
+ {
+ // Helper functions to demonstrate programmatic constraints
+ static void Square(ImGuiSizeCallbackData* data) { data->DesiredSize.x = data->DesiredSize.y = IM_MAX(data->DesiredSize.x, data->DesiredSize.y); }
+ static void Step(ImGuiSizeCallbackData* data) { float step = (float)(int)(intptr_t)data->UserData; data->DesiredSize = ImVec2((int)(data->DesiredSize.x / step + 0.5f) * step, (int)(data->DesiredSize.y / step + 0.5f) * step); }
+ };
+
+ const char* test_desc[] =
+ {
+ "Resize vertical only",
+ "Resize horizontal only",
+ "Width > 100, Height > 100",
+ "Width 400-500",
+ "Height 400-500",
+ "Custom: Always Square",
+ "Custom: Fixed Steps (100)",
+ };
+
+ static bool auto_resize = false;
+ static int type = 0;
+ static int display_lines = 10;
+ if (type == 0) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 0), ImVec2(-1, FLT_MAX)); // Vertical only
+ if (type == 1) ImGui::SetNextWindowSizeConstraints(ImVec2(0, -1), ImVec2(FLT_MAX, -1)); // Horizontal only
+ if (type == 2) ImGui::SetNextWindowSizeConstraints(ImVec2(100, 100), ImVec2(FLT_MAX, FLT_MAX)); // Width > 100, Height > 100
+ if (type == 3) ImGui::SetNextWindowSizeConstraints(ImVec2(400, -1), ImVec2(500, -1)); // Width 400-500
+ if (type == 4) ImGui::SetNextWindowSizeConstraints(ImVec2(-1, 400), ImVec2(-1, 500)); // Height 400-500
+ if (type == 5) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Square); // Always Square
+ if (type == 6) ImGui::SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, FLT_MAX), CustomConstraints::Step, (void*)(intptr_t)100); // Fixed Step
+
+ ImGuiWindowFlags flags = auto_resize ? ImGuiWindowFlags_AlwaysAutoResize : 0;
+ if (ImGui::Begin("Example: Constrained Resize", p_open, flags))
+ {
+ IMGUI_DEMO_MARKER("Examples/Constrained Resizing window");
+ if (ImGui::Button("200x200")) { ImGui::SetWindowSize(ImVec2(200, 200)); } ImGui::SameLine();
+ if (ImGui::Button("500x500")) { ImGui::SetWindowSize(ImVec2(500, 500)); } ImGui::SameLine();
+ if (ImGui::Button("800x200")) { ImGui::SetWindowSize(ImVec2(800, 200)); }
+ ImGui::SetNextItemWidth(200);
+ ImGui::Combo("Constraint", &type, test_desc, IM_ARRAYSIZE(test_desc));
+ ImGui::SetNextItemWidth(200);
+ ImGui::DragInt("Lines", &display_lines, 0.2f, 1, 100);
+ ImGui::Checkbox("Auto-resize", &auto_resize);
+ for (int i = 0; i < display_lines; i++)
+ ImGui::Text("%*sHello, sailor! Making this line long enough for the example.", i * 4, "");
+ }
+ ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Simple overlay / ShowExampleAppSimpleOverlay()
+//-----------------------------------------------------------------------------
+
+// Demonstrate creating a simple static window with no decoration
+// + a context-menu to choose which corner of the screen to use.
+static void ShowExampleAppSimpleOverlay(bool* p_open)
+{
+ static int corner = 0;
+ ImGuiIO& io = ImGui::GetIO();
+ ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoFocusOnAppearing | ImGuiWindowFlags_NoNav;
+ if (corner != -1)
+ {
+ const float PAD = 10.0f;
+ const ImGuiViewport* viewport = ImGui::GetMainViewport();
+ ImVec2 work_pos = viewport->WorkPos; // Use work area to avoid menu-bar/task-bar, if any!
+ ImVec2 work_size = viewport->WorkSize;
+ ImVec2 window_pos, window_pos_pivot;
+ window_pos.x = (corner & 1) ? (work_pos.x + work_size.x - PAD) : (work_pos.x + PAD);
+ window_pos.y = (corner & 2) ? (work_pos.y + work_size.y - PAD) : (work_pos.y + PAD);
+ window_pos_pivot.x = (corner & 1) ? 1.0f : 0.0f;
+ window_pos_pivot.y = (corner & 2) ? 1.0f : 0.0f;
+ ImGui::SetNextWindowPos(window_pos, ImGuiCond_Always, window_pos_pivot);
+ window_flags |= ImGuiWindowFlags_NoMove;
+ }
+ ImGui::SetNextWindowBgAlpha(0.35f); // Transparent background
+ if (ImGui::Begin("Example: Simple overlay", p_open, window_flags))
+ {
+ IMGUI_DEMO_MARKER("Examples/Simple Overlay");
+ ImGui::Text("Simple overlay\n" "in the corner of the screen.\n" "(right-click to change position)");
+ ImGui::Separator();
+ if (ImGui::IsMousePosValid())
+ ImGui::Text("Mouse Position: (%.1f,%.1f)", io.MousePos.x, io.MousePos.y);
+ else
+ ImGui::Text("Mouse Position: <invalid>");
+ if (ImGui::BeginPopupContextWindow())
+ {
+ if (ImGui::MenuItem("Custom", NULL, corner == -1)) corner = -1;
+ if (ImGui::MenuItem("Top-left", NULL, corner == 0)) corner = 0;
+ if (ImGui::MenuItem("Top-right", NULL, corner == 1)) corner = 1;
+ if (ImGui::MenuItem("Bottom-left", NULL, corner == 2)) corner = 2;
+ if (ImGui::MenuItem("Bottom-right", NULL, corner == 3)) corner = 3;
+ if (p_open && ImGui::MenuItem("Close")) *p_open = false;
+ ImGui::EndPopup();
+ }
+ }
+ ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Fullscreen window / ShowExampleAppFullscreen()
+//-----------------------------------------------------------------------------
+
+// Demonstrate creating a window covering the entire screen/viewport
+static void ShowExampleAppFullscreen(bool* p_open)
+{
+ static bool use_work_area = true;
+ static ImGuiWindowFlags flags = ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoSavedSettings;
+
+ // We demonstrate using the full viewport area or the work area (without menu-bars, task-bars etc.)
+ // Based on your use case you may want one of the other.
+ const ImGuiViewport* viewport = ImGui::GetMainViewport();
+ ImGui::SetNextWindowPos(use_work_area ? viewport->WorkPos : viewport->Pos);
+ ImGui::SetNextWindowSize(use_work_area ? viewport->WorkSize : viewport->Size);
+
+ if (ImGui::Begin("Example: Fullscreen window", p_open, flags))
+ {
+ ImGui::Checkbox("Use work area instead of main area", &use_work_area);
+ ImGui::SameLine();
+ HelpMarker("Main Area = entire viewport,\nWork Area = entire viewport minus sections used by the main menu bars, task bars etc.\n\nEnable the main-menu bar in Examples menu to see the difference.");
+
+ ImGui::CheckboxFlags("ImGuiWindowFlags_NoBackground", &flags, ImGuiWindowFlags_NoBackground);
+ ImGui::CheckboxFlags("ImGuiWindowFlags_NoDecoration", &flags, ImGuiWindowFlags_NoDecoration);
+ ImGui::Indent();
+ ImGui::CheckboxFlags("ImGuiWindowFlags_NoTitleBar", &flags, ImGuiWindowFlags_NoTitleBar);
+ ImGui::CheckboxFlags("ImGuiWindowFlags_NoCollapse", &flags, ImGuiWindowFlags_NoCollapse);
+ ImGui::CheckboxFlags("ImGuiWindowFlags_NoScrollbar", &flags, ImGuiWindowFlags_NoScrollbar);
+ ImGui::Unindent();
+
+ if (p_open && ImGui::Button("Close this window"))
+ *p_open = false;
+ }
+ ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Manipulating Window Titles / ShowExampleAppWindowTitles()
+//-----------------------------------------------------------------------------
+
+// Demonstrate using "##" and "###" in identifiers to manipulate ID generation.
+// This apply to all regular items as well.
+// Read FAQ section "How can I have multiple widgets with the same label?" for details.
+static void ShowExampleAppWindowTitles(bool*)
+{
+ const ImGuiViewport* viewport = ImGui::GetMainViewport();
+ const ImVec2 base_pos = viewport->Pos;
+
+ // By default, Windows are uniquely identified by their title.
+ // You can use the "##" and "###" markers to manipulate the display/ID.
+
+ // Using "##" to display same title but have unique identifier.
+ ImGui::SetNextWindowPos(ImVec2(base_pos.x + 100, base_pos.y + 100), ImGuiCond_FirstUseEver);
+ ImGui::Begin("Same title as another window##1");
+ IMGUI_DEMO_MARKER("Examples/Manipulating window titles");
+ ImGui::Text("This is window 1.\nMy title is the same as window 2, but my identifier is unique.");
+ ImGui::End();
+
+ ImGui::SetNextWindowPos(ImVec2(base_pos.x + 100, base_pos.y + 200), ImGuiCond_FirstUseEver);
+ ImGui::Begin("Same title as another window##2");
+ ImGui::Text("This is window 2.\nMy title is the same as window 1, but my identifier is unique.");
+ ImGui::End();
+
+ // Using "###" to display a changing title but keep a static identifier "AnimatedTitle"
+ char buf[128];
+ sprintf(buf, "Animated title %c %d###AnimatedTitle", "|/-\\"[(int)(ImGui::GetTime() / 0.25f) & 3], ImGui::GetFrameCount());
+ ImGui::SetNextWindowPos(ImVec2(base_pos.x + 100, base_pos.y + 300), ImGuiCond_FirstUseEver);
+ ImGui::Begin(buf);
+ ImGui::Text("This window has a changing title.");
+ ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Custom Rendering using ImDrawList API / ShowExampleAppCustomRendering()
+//-----------------------------------------------------------------------------
+
+// Demonstrate using the low-level ImDrawList to draw custom shapes.
+static void ShowExampleAppCustomRendering(bool* p_open)
+{
+ if (!ImGui::Begin("Example: Custom rendering", p_open))
+ {
+ ImGui::End();
+ return;
+ }
+ IMGUI_DEMO_MARKER("Examples/Custom Rendering");
+
+ // Tip: If you do a lot of custom rendering, you probably want to use your own geometrical types and benefit of
+ // overloaded operators, etc. Define IM_VEC2_CLASS_EXTRA in imconfig.h to create implicit conversions between your
+ // types and ImVec2/ImVec4. Dear ImGui defines overloaded operators but they are internal to imgui.cpp and not
+ // exposed outside (to avoid messing with your types) In this example we are not using the maths operators!
+
+ if (ImGui::BeginTabBar("##TabBar"))
+ {
+ if (ImGui::BeginTabItem("Primitives"))
+ {
+ ImGui::PushItemWidth(-ImGui::GetFontSize() * 15);
+ ImDrawList* draw_list = ImGui::GetWindowDrawList();
+
+ // Draw gradients
+ // (note that those are currently exacerbating our sRGB/Linear issues)
+ // Calling ImGui::GetColorU32() multiplies the given colors by the current Style Alpha, but you may pass the IM_COL32() directly as well..
+ ImGui::Text("Gradients");
+ ImVec2 gradient_size = ImVec2(ImGui::CalcItemWidth(), ImGui::GetFrameHeight());
+ {
+ ImVec2 p0 = ImGui::GetCursorScreenPos();
+ ImVec2 p1 = ImVec2(p0.x + gradient_size.x, p0.y + gradient_size.y);
+ ImU32 col_a = ImGui::GetColorU32(IM_COL32(0, 0, 0, 255));
+ ImU32 col_b = ImGui::GetColorU32(IM_COL32(255, 255, 255, 255));
+ draw_list->AddRectFilledMultiColor(p0, p1, col_a, col_b, col_b, col_a);
+ ImGui::InvisibleButton("##gradient1", gradient_size);
+ }
+ {
+ ImVec2 p0 = ImGui::GetCursorScreenPos();
+ ImVec2 p1 = ImVec2(p0.x + gradient_size.x, p0.y + gradient_size.y);
+ ImU32 col_a = ImGui::GetColorU32(IM_COL32(0, 255, 0, 255));
+ ImU32 col_b = ImGui::GetColorU32(IM_COL32(255, 0, 0, 255));
+ draw_list->AddRectFilledMultiColor(p0, p1, col_a, col_b, col_b, col_a);
+ ImGui::InvisibleButton("##gradient2", gradient_size);
+ }
+
+ // Draw a bunch of primitives
+ ImGui::Text("All primitives");
+ static float sz = 36.0f;
+ static float thickness = 3.0f;
+ static int ngon_sides = 6;
+ static bool circle_segments_override = false;
+ static int circle_segments_override_v = 12;
+ static bool curve_segments_override = false;
+ static int curve_segments_override_v = 8;
+ static ImVec4 colf = ImVec4(1.0f, 1.0f, 0.4f, 1.0f);
+ ImGui::DragFloat("Size", &sz, 0.2f, 2.0f, 100.0f, "%.0f");
+ ImGui::DragFloat("Thickness", &thickness, 0.05f, 1.0f, 8.0f, "%.02f");
+ ImGui::SliderInt("N-gon sides", &ngon_sides, 3, 12);
+ ImGui::Checkbox("##circlesegmentoverride", &circle_segments_override);
+ ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
+ circle_segments_override |= ImGui::SliderInt("Circle segments override", &circle_segments_override_v, 3, 40);
+ ImGui::Checkbox("##curvessegmentoverride", &curve_segments_override);
+ ImGui::SameLine(0.0f, ImGui::GetStyle().ItemInnerSpacing.x);
+ curve_segments_override |= ImGui::SliderInt("Curves segments override", &curve_segments_override_v, 3, 40);
+ ImGui::ColorEdit4("Color", &colf.x);
+
+ const ImVec2 p = ImGui::GetCursorScreenPos();
+ const ImU32 col = ImColor(colf);
+ const float spacing = 10.0f;
+ const ImDrawFlags corners_tl_br = ImDrawFlags_RoundCornersTopLeft | ImDrawFlags_RoundCornersBottomRight;
+ const float rounding = sz / 5.0f;
+ const int circle_segments = circle_segments_override ? circle_segments_override_v : 0;
+ const int curve_segments = curve_segments_override ? curve_segments_override_v : 0;
+ float x = p.x + 4.0f;
+ float y = p.y + 4.0f;
+ for (int n = 0; n < 2; n++)
+ {
+ // First line uses a thickness of 1.0f, second line uses the configurable thickness
+ float th = (n == 0) ? 1.0f : thickness;
+ draw_list->AddNgon(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, ngon_sides, th); x += sz + spacing; // N-gon
+ draw_list->AddCircle(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, circle_segments, th); x += sz + spacing; // Circle
+ draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 0.0f, ImDrawFlags_None, th); x += sz + spacing; // Square
+ draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, rounding, ImDrawFlags_None, th); x += sz + spacing; // Square with all rounded corners
+ draw_list->AddRect(ImVec2(x, y), ImVec2(x + sz, y + sz), col, rounding, corners_tl_br, th); x += sz + spacing; // Square with two rounded corners
+ draw_list->AddTriangle(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col, th);x += sz + spacing; // Triangle
+ //draw_list->AddTriangle(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col, th);x+= sz*0.4f + spacing; // Thin triangle
+ draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y), col, th); x += sz + spacing; // Horizontal line (note: drawing a filled rectangle will be faster!)
+ draw_list->AddLine(ImVec2(x, y), ImVec2(x, y + sz), col, th); x += spacing; // Vertical line (note: drawing a filled rectangle will be faster!)
+ draw_list->AddLine(ImVec2(x, y), ImVec2(x + sz, y + sz), col, th); x += sz + spacing; // Diagonal line
+
+ // Quadratic Bezier Curve (3 control points)
+ ImVec2 cp3[3] = { ImVec2(x, y + sz * 0.6f), ImVec2(x + sz * 0.5f, y - sz * 0.4f), ImVec2(x + sz, y + sz) };
+ draw_list->AddBezierQuadratic(cp3[0], cp3[1], cp3[2], col, th, curve_segments); x += sz + spacing;
+
+ // Cubic Bezier Curve (4 control points)
+ ImVec2 cp4[4] = { ImVec2(x, y), ImVec2(x + sz * 1.3f, y + sz * 0.3f), ImVec2(x + sz - sz * 1.3f, y + sz - sz * 0.3f), ImVec2(x + sz, y + sz) };
+ draw_list->AddBezierCubic(cp4[0], cp4[1], cp4[2], cp4[3], col, th, curve_segments);
+
+ x = p.x + 4;
+ y += sz + spacing;
+ }
+ draw_list->AddNgonFilled(ImVec2(x + sz * 0.5f, y + sz * 0.5f), sz*0.5f, col, ngon_sides); x += sz + spacing; // N-gon
+ draw_list->AddCircleFilled(ImVec2(x + sz*0.5f, y + sz*0.5f), sz*0.5f, col, circle_segments); x += sz + spacing; // Circle
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col); x += sz + spacing; // Square
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f); x += sz + spacing; // Square with all rounded corners
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + sz), col, 10.0f, corners_tl_br); x += sz + spacing; // Square with two rounded corners
+ draw_list->AddTriangleFilled(ImVec2(x+sz*0.5f,y), ImVec2(x+sz, y+sz-0.5f), ImVec2(x, y+sz-0.5f), col); x += sz + spacing; // Triangle
+ //draw_list->AddTriangleFilled(ImVec2(x+sz*0.2f,y), ImVec2(x, y+sz-0.5f), ImVec2(x+sz*0.4f, y+sz-0.5f), col); x += sz*0.4f + spacing; // Thin triangle
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + sz, y + thickness), col); x += sz + spacing; // Horizontal line (faster than AddLine, but only handle integer thickness)
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + thickness, y + sz), col); x += spacing * 2.0f;// Vertical line (faster than AddLine, but only handle integer thickness)
+ draw_list->AddRectFilled(ImVec2(x, y), ImVec2(x + 1, y + 1), col); x += sz; // Pixel (faster than AddLine)
+ draw_list->AddRectFilledMultiColor(ImVec2(x, y), ImVec2(x + sz, y + sz), IM_COL32(0, 0, 0, 255), IM_COL32(255, 0, 0, 255), IM_COL32(255, 255, 0, 255), IM_COL32(0, 255, 0, 255));
+
+ ImGui::Dummy(ImVec2((sz + spacing) * 10.2f, (sz + spacing) * 3.0f));
+ ImGui::PopItemWidth();
+ ImGui::EndTabItem();
+ }
+
+ if (ImGui::BeginTabItem("Canvas"))
+ {
+ static ImVector<ImVec2> points;
+ static ImVec2 scrolling(0.0f, 0.0f);
+ static bool opt_enable_grid = true;
+ static bool opt_enable_context_menu = true;
+ static bool adding_line = false;
+
+ ImGui::Checkbox("Enable grid", &opt_enable_grid);
+ ImGui::Checkbox("Enable context menu", &opt_enable_context_menu);
+ ImGui::Text("Mouse Left: drag to add lines,\nMouse Right: drag to scroll, click for context menu.");
+
+ // Typically you would use a BeginChild()/EndChild() pair to benefit from a clipping region + own scrolling.
+ // Here we demonstrate that this can be replaced by simple offsetting + custom drawing + PushClipRect/PopClipRect() calls.
+ // To use a child window instead we could use, e.g:
+ // ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); // Disable padding
+ // ImGui::PushStyleColor(ImGuiCol_ChildBg, IM_COL32(50, 50, 50, 255)); // Set a background color
+ // ImGui::BeginChild("canvas", ImVec2(0.0f, 0.0f), true, ImGuiWindowFlags_NoMove);
+ // ImGui::PopStyleColor();
+ // ImGui::PopStyleVar();
+ // [...]
+ // ImGui::EndChild();
+
+ // Using InvisibleButton() as a convenience 1) it will advance the layout cursor and 2) allows us to use IsItemHovered()/IsItemActive()
+ ImVec2 canvas_p0 = ImGui::GetCursorScreenPos(); // ImDrawList API uses screen coordinates!
+ ImVec2 canvas_sz = ImGui::GetContentRegionAvail(); // Resize canvas to what's available
+ if (canvas_sz.x < 50.0f) canvas_sz.x = 50.0f;
+ if (canvas_sz.y < 50.0f) canvas_sz.y = 50.0f;
+ ImVec2 canvas_p1 = ImVec2(canvas_p0.x + canvas_sz.x, canvas_p0.y + canvas_sz.y);
+
+ // Draw border and background color
+ ImGuiIO& io = ImGui::GetIO();
+ ImDrawList* draw_list = ImGui::GetWindowDrawList();
+ draw_list->AddRectFilled(canvas_p0, canvas_p1, IM_COL32(50, 50, 50, 255));
+ draw_list->AddRect(canvas_p0, canvas_p1, IM_COL32(255, 255, 255, 255));
+
+ // This will catch our interactions
+ ImGui::InvisibleButton("canvas", canvas_sz, ImGuiButtonFlags_MouseButtonLeft | ImGuiButtonFlags_MouseButtonRight);
+ const bool is_hovered = ImGui::IsItemHovered(); // Hovered
+ const bool is_active = ImGui::IsItemActive(); // Held
+ const ImVec2 origin(canvas_p0.x + scrolling.x, canvas_p0.y + scrolling.y); // Lock scrolled origin
+ const ImVec2 mouse_pos_in_canvas(io.MousePos.x - origin.x, io.MousePos.y - origin.y);
+
+ // Add first and second point
+ if (is_hovered && !adding_line && ImGui::IsMouseClicked(ImGuiMouseButton_Left))
+ {
+ points.push_back(mouse_pos_in_canvas);
+ points.push_back(mouse_pos_in_canvas);
+ adding_line = true;
+ }
+ if (adding_line)
+ {
+ points.back() = mouse_pos_in_canvas;
+ if (!ImGui::IsMouseDown(ImGuiMouseButton_Left))
+ adding_line = false;
+ }
+
+ // Pan (we use a zero mouse threshold when there's no context menu)
+ // You may decide to make that threshold dynamic based on whether the mouse is hovering something etc.
+ const float mouse_threshold_for_pan = opt_enable_context_menu ? -1.0f : 0.0f;
+ if (is_active && ImGui::IsMouseDragging(ImGuiMouseButton_Right, mouse_threshold_for_pan))
+ {
+ scrolling.x += io.MouseDelta.x;
+ scrolling.y += io.MouseDelta.y;
+ }
+
+ // Context menu (under default mouse threshold)
+ ImVec2 drag_delta = ImGui::GetMouseDragDelta(ImGuiMouseButton_Right);
+ if (opt_enable_context_menu && drag_delta.x == 0.0f && drag_delta.y == 0.0f)
+ ImGui::OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight);
+ if (ImGui::BeginPopup("context"))
+ {
+ if (adding_line)
+ points.resize(points.size() - 2);
+ adding_line = false;
+ if (ImGui::MenuItem("Remove one", NULL, false, points.Size > 0)) { points.resize(points.size() - 2); }
+ if (ImGui::MenuItem("Remove all", NULL, false, points.Size > 0)) { points.clear(); }
+ ImGui::EndPopup();
+ }
+
+ // Draw grid + all lines in the canvas
+ draw_list->PushClipRect(canvas_p0, canvas_p1, true);
+ if (opt_enable_grid)
+ {
+ const float GRID_STEP = 64.0f;
+ for (float x = fmodf(scrolling.x, GRID_STEP); x < canvas_sz.x; x += GRID_STEP)
+ draw_list->AddLine(ImVec2(canvas_p0.x + x, canvas_p0.y), ImVec2(canvas_p0.x + x, canvas_p1.y), IM_COL32(200, 200, 200, 40));
+ for (float y = fmodf(scrolling.y, GRID_STEP); y < canvas_sz.y; y += GRID_STEP)
+ draw_list->AddLine(ImVec2(canvas_p0.x, canvas_p0.y + y), ImVec2(canvas_p1.x, canvas_p0.y + y), IM_COL32(200, 200, 200, 40));
+ }
+ for (int n = 0; n < points.Size; n += 2)
+ draw_list->AddLine(ImVec2(origin.x + points[n].x, origin.y + points[n].y), ImVec2(origin.x + points[n + 1].x, origin.y + points[n + 1].y), IM_COL32(255, 255, 0, 255), 2.0f);
+ draw_list->PopClipRect();
+
+ ImGui::EndTabItem();
+ }
+
+ if (ImGui::BeginTabItem("BG/FG draw lists"))
+ {
+ static bool draw_bg = true;
+ static bool draw_fg = true;
+ ImGui::Checkbox("Draw in Background draw list", &draw_bg);
+ ImGui::SameLine(); HelpMarker("The Background draw list will be rendered below every Dear ImGui windows.");
+ ImGui::Checkbox("Draw in Foreground draw list", &draw_fg);
+ ImGui::SameLine(); HelpMarker("The Foreground draw list will be rendered over every Dear ImGui windows.");
+ ImVec2 window_pos = ImGui::GetWindowPos();
+ ImVec2 window_size = ImGui::GetWindowSize();
+ ImVec2 window_center = ImVec2(window_pos.x + window_size.x * 0.5f, window_pos.y + window_size.y * 0.5f);
+ if (draw_bg)
+ ImGui::GetBackgroundDrawList()->AddCircle(window_center, window_size.x * 0.6f, IM_COL32(255, 0, 0, 200), 0, 10 + 4);
+ if (draw_fg)
+ ImGui::GetForegroundDrawList()->AddCircle(window_center, window_size.y * 0.6f, IM_COL32(0, 255, 0, 200), 0, 10);
+ ImGui::EndTabItem();
+ }
+
+ ImGui::EndTabBar();
+ }
+
+ ImGui::End();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Example App: Documents Handling / ShowExampleAppDocuments()
+//-----------------------------------------------------------------------------
+
+// Simplified structure to mimic a Document model
+struct MyDocument
+{
+ const char* Name; // Document title
+ bool Open; // Set when open (we keep an array of all available documents to simplify demo code!)
+ bool OpenPrev; // Copy of Open from last update.
+ bool Dirty; // Set when the document has been modified
+ bool WantClose; // Set when the document
+ ImVec4 Color; // An arbitrary variable associated to the document
+
+ MyDocument(const char* name, bool open = true, const ImVec4& color = ImVec4(1.0f, 1.0f, 1.0f, 1.0f))
+ {
+ Name = name;
+ Open = OpenPrev = open;
+ Dirty = false;
+ WantClose = false;
+ Color = color;
+ }
+ void DoOpen() { Open = true; }
+ void DoQueueClose() { WantClose = true; }
+ void DoForceClose() { Open = false; Dirty = false; }
+ void DoSave() { Dirty = false; }
+
+ // Display placeholder contents for the Document
+ static void DisplayContents(MyDocument* doc)
+ {
+ ImGui::PushID(doc);
+ ImGui::Text("Document \"%s\"", doc->Name);
+ ImGui::PushStyleColor(ImGuiCol_Text, doc->Color);
+ ImGui::TextWrapped("Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.");
+ ImGui::PopStyleColor();
+ if (ImGui::Button("Modify", ImVec2(100, 0)))
+ doc->Dirty = true;
+ ImGui::SameLine();
+ if (ImGui::Button("Save", ImVec2(100, 0)))
+ doc->DoSave();
+ ImGui::ColorEdit3("color", &doc->Color.x); // Useful to test drag and drop and hold-dragged-to-open-tab behavior.
+ ImGui::PopID();
+ }
+
+ // Display context menu for the Document
+ static void DisplayContextMenu(MyDocument* doc)
+ {
+ if (!ImGui::BeginPopupContextItem())
+ return;
+
+ char buf[256];
+ sprintf(buf, "Save %s", doc->Name);
+ if (ImGui::MenuItem(buf, "CTRL+S", false, doc->Open))
+ doc->DoSave();
+ if (ImGui::MenuItem("Close", "CTRL+W", false, doc->Open))
+ doc->DoQueueClose();
+ ImGui::EndPopup();
+ }
+};
+
+struct ExampleAppDocuments
+{
+ ImVector<MyDocument> Documents;
+
+ ExampleAppDocuments()
+ {
+ Documents.push_back(MyDocument("Lettuce", true, ImVec4(0.4f, 0.8f, 0.4f, 1.0f)));
+ Documents.push_back(MyDocument("Eggplant", true, ImVec4(0.8f, 0.5f, 1.0f, 1.0f)));
+ Documents.push_back(MyDocument("Carrot", true, ImVec4(1.0f, 0.8f, 0.5f, 1.0f)));
+ Documents.push_back(MyDocument("Tomato", false, ImVec4(1.0f, 0.3f, 0.4f, 1.0f)));
+ Documents.push_back(MyDocument("A Rather Long Title", false));
+ Documents.push_back(MyDocument("Some Document", false));
+ }
+};
+
+// [Optional] Notify the system of Tabs/Windows closure that happened outside the regular tab interface.
+// If a tab has been closed programmatically (aka closed from another source such as the Checkbox() in the demo,
+// as opposed to clicking on the regular tab closing button) and stops being submitted, it will take a frame for
+// the tab bar to notice its absence. During this frame there will be a gap in the tab bar, and if the tab that has
+// disappeared was the selected one, the tab bar will report no selected tab during the frame. This will effectively
+// give the impression of a flicker for one frame.
+// We call SetTabItemClosed() to manually notify the Tab Bar or Docking system of removed tabs to avoid this glitch.
+// Note that this completely optional, and only affect tab bars with the ImGuiTabBarFlags_Reorderable flag.
+static void NotifyOfDocumentsClosedElsewhere(ExampleAppDocuments& app)
+{
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ {
+ MyDocument* doc = &app.Documents[doc_n];
+ if (!doc->Open && doc->OpenPrev)
+ ImGui::SetTabItemClosed(doc->Name);
+ doc->OpenPrev = doc->Open;
+ }
+}
+
+void ShowExampleAppDocuments(bool* p_open)
+{
+ static ExampleAppDocuments app;
+
+ // Options
+ static bool opt_reorderable = true;
+ static ImGuiTabBarFlags opt_fitting_flags = ImGuiTabBarFlags_FittingPolicyDefault_;
+
+ bool window_contents_visible = ImGui::Begin("Example: Documents", p_open, ImGuiWindowFlags_MenuBar);
+ if (!window_contents_visible)
+ {
+ ImGui::End();
+ return;
+ }
+
+ // Menu
+ if (ImGui::BeginMenuBar())
+ {
+ if (ImGui::BeginMenu("File"))
+ {
+ int open_count = 0;
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ open_count += app.Documents[doc_n].Open ? 1 : 0;
+
+ if (ImGui::BeginMenu("Open", open_count < app.Documents.Size))
+ {
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ {
+ MyDocument* doc = &app.Documents[doc_n];
+ if (!doc->Open)
+ if (ImGui::MenuItem(doc->Name))
+ doc->DoOpen();
+ }
+ ImGui::EndMenu();
+ }
+ if (ImGui::MenuItem("Close All Documents", NULL, false, open_count > 0))
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ app.Documents[doc_n].DoQueueClose();
+ if (ImGui::MenuItem("Exit", "Alt+F4")) {}
+ ImGui::EndMenu();
+ }
+ ImGui::EndMenuBar();
+ }
+
+ // [Debug] List documents with one checkbox for each
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ {
+ MyDocument* doc = &app.Documents[doc_n];
+ if (doc_n > 0)
+ ImGui::SameLine();
+ ImGui::PushID(doc);
+ if (ImGui::Checkbox(doc->Name, &doc->Open))
+ if (!doc->Open)
+ doc->DoForceClose();
+ ImGui::PopID();
+ }
+
+ ImGui::Separator();
+
+ // About the ImGuiWindowFlags_UnsavedDocument / ImGuiTabItemFlags_UnsavedDocument flags.
+ // They have multiple effects:
+ // - Display a dot next to the title.
+ // - Tab is selected when clicking the X close button.
+ // - Closure is not assumed (will wait for user to stop submitting the tab).
+ // Otherwise closure is assumed when pressing the X, so if you keep submitting the tab may reappear at end of tab bar.
+ // We need to assume closure by default otherwise waiting for "lack of submission" on the next frame would leave an empty
+ // hole for one-frame, both in the tab-bar and in tab-contents when closing a tab/window.
+ // The rarely used SetTabItemClosed() function is a way to notify of programmatic closure to avoid the one-frame hole.
+
+ // Submit Tab Bar and Tabs
+ {
+ ImGuiTabBarFlags tab_bar_flags = (opt_fitting_flags) | (opt_reorderable ? ImGuiTabBarFlags_Reorderable : 0);
+ if (ImGui::BeginTabBar("##tabs", tab_bar_flags))
+ {
+ if (opt_reorderable)
+ NotifyOfDocumentsClosedElsewhere(app);
+
+ // [DEBUG] Stress tests
+ //if ((ImGui::GetFrameCount() % 30) == 0) docs[1].Open ^= 1; // [DEBUG] Automatically show/hide a tab. Test various interactions e.g. dragging with this on.
+ //if (ImGui::GetIO().KeyCtrl) ImGui::SetTabItemSelected(docs[1].Name); // [DEBUG] Test SetTabItemSelected(), probably not very useful as-is anyway..
+
+ // Submit Tabs
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ {
+ MyDocument* doc = &app.Documents[doc_n];
+ if (!doc->Open)
+ continue;
+
+ ImGuiTabItemFlags tab_flags = (doc->Dirty ? ImGuiTabItemFlags_UnsavedDocument : 0);
+ bool visible = ImGui::BeginTabItem(doc->Name, &doc->Open, tab_flags);
+
+ // Cancel attempt to close when unsaved add to save queue so we can display a popup.
+ if (!doc->Open && doc->Dirty)
+ {
+ doc->Open = true;
+ doc->DoQueueClose();
+ }
+
+ MyDocument::DisplayContextMenu(doc);
+ if (visible)
+ {
+ MyDocument::DisplayContents(doc);
+ ImGui::EndTabItem();
+ }
+ }
+
+ ImGui::EndTabBar();
+ }
+ }
+
+ // Update closing queue
+ static ImVector<MyDocument*> close_queue;
+ if (close_queue.empty())
+ {
+ // Close queue is locked once we started a popup
+ for (int doc_n = 0; doc_n < app.Documents.Size; doc_n++)
+ {
+ MyDocument* doc = &app.Documents[doc_n];
+ if (doc->WantClose)
+ {
+ doc->WantClose = false;
+ close_queue.push_back(doc);
+ }
+ }
+ }
+
+ // Display closing confirmation UI
+ if (!close_queue.empty())
+ {
+ int close_queue_unsaved_documents = 0;
+ for (int n = 0; n < close_queue.Size; n++)
+ if (close_queue[n]->Dirty)
+ close_queue_unsaved_documents++;
+
+ if (close_queue_unsaved_documents == 0)
+ {
+ // Close documents when all are unsaved
+ for (int n = 0; n < close_queue.Size; n++)
+ close_queue[n]->DoForceClose();
+ close_queue.clear();
+ }
+ else
+ {
+ if (!ImGui::IsPopupOpen("Save?"))
+ ImGui::OpenPopup("Save?");
+ if (ImGui::BeginPopupModal("Save?", NULL, ImGuiWindowFlags_AlwaysAutoResize))
+ {
+ ImGui::Text("Save change to the following items?");
+ float item_height = ImGui::GetTextLineHeightWithSpacing();
+ if (ImGui::BeginChildFrame(ImGui::GetID("frame"), ImVec2(-FLT_MIN, 6.25f * item_height)))
+ {
+ for (int n = 0; n < close_queue.Size; n++)
+ if (close_queue[n]->Dirty)
+ ImGui::Text("%s", close_queue[n]->Name);
+ ImGui::EndChildFrame();
+ }
+
+ ImVec2 button_size(ImGui::GetFontSize() * 7.0f, 0.0f);
+ if (ImGui::Button("Yes", button_size))
+ {
+ for (int n = 0; n < close_queue.Size; n++)
+ {
+ if (close_queue[n]->Dirty)
+ close_queue[n]->DoSave();
+ close_queue[n]->DoForceClose();
+ }
+ close_queue.clear();
+ ImGui::CloseCurrentPopup();
+ }
+ ImGui::SameLine();
+ if (ImGui::Button("No", button_size))
+ {
+ for (int n = 0; n < close_queue.Size; n++)
+ close_queue[n]->DoForceClose();
+ close_queue.clear();
+ ImGui::CloseCurrentPopup();
+ }
+ ImGui::SameLine();
+ if (ImGui::Button("Cancel", button_size))
+ {
+ close_queue.clear();
+ ImGui::CloseCurrentPopup();
+ }
+ ImGui::EndPopup();
+ }
+ }
+ }
+
+ ImGui::End();
+}
+
+// End of Demo code
+#else
+
+void ImGui::ShowAboutWindow(bool*) {}
+void ImGui::ShowDemoWindow(bool*) {}
+void ImGui::ShowUserGuide() {}
+void ImGui::ShowStyleEditor(ImGuiStyle*) {}
+
+#endif
+
+#endif // #ifndef IMGUI_DISABLE
diff --git a/tests/manual/rhi/shared/imgui/imgui/imgui_draw.cpp b/tests/manual/rhi/shared/imgui/imgui/imgui_draw.cpp
new file mode 100644
index 0000000000..fcdb9dfe88
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/imgui_draw.cpp
@@ -0,0 +1,4162 @@
+// dear imgui, v1.88
+// (drawing and font code)
+
+/*
+
+Index of this file:
+
+// [SECTION] STB libraries implementation
+// [SECTION] Style functions
+// [SECTION] ImDrawList
+// [SECTION] ImDrawListSplitter
+// [SECTION] ImDrawData
+// [SECTION] Helpers ShadeVertsXXX functions
+// [SECTION] ImFontConfig
+// [SECTION] ImFontAtlas
+// [SECTION] ImFontAtlas glyph ranges helpers
+// [SECTION] ImFontGlyphRangesBuilder
+// [SECTION] ImFont
+// [SECTION] ImGui Internal Render Helpers
+// [SECTION] Decompression code
+// [SECTION] Default font data (ProggyClean.ttf)
+
+*/
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "imgui.h"
+#ifndef IMGUI_DISABLE
+
+#ifndef IMGUI_DEFINE_MATH_OPERATORS
+#define IMGUI_DEFINE_MATH_OPERATORS
+#endif
+
+#include "imgui_internal.h"
+#ifdef IMGUI_ENABLE_FREETYPE
+#include "misc/freetype/imgui_freetype.h"
+#endif
+
+#include <stdio.h> // vsnprintf, sscanf, printf
+#if !defined(alloca)
+#if defined(__GLIBC__) || defined(__sun) || defined(__APPLE__) || defined(__NEWLIB__)
+#include <alloca.h> // alloca (glibc uses <alloca.h>. Note that Cygwin may have _WIN32 defined, so the order matters here)
+#elif defined(_WIN32)
+#include <malloc.h> // alloca
+#if !defined(alloca)
+#define alloca _alloca // for clang with MS Codegen
+#endif
+#else
+#include <stdlib.h> // alloca
+#endif
+#endif
+
+// Visual Studio warnings
+#ifdef _MSC_VER
+#pragma warning (disable: 4127) // condition expression is constant
+#pragma warning (disable: 4505) // unreferenced local function has been removed (stb stuff)
+#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
+#pragma warning (disable: 6255) // [Static Analyzer] _alloca indicates failure by raising a stack overflow exception. Consider using _malloca instead.
+#pragma warning (disable: 26451) // [Static Analyzer] Arithmetic overflow : Using operator 'xxx' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator 'xxx' to avoid overflow(io.2).
+#pragma warning (disable: 26812) // [Static Analyzer] The enum type 'xxx' is unscoped. Prefer 'enum class' over 'enum' (Enum.3). [MSVC Static Analyzer)
+#endif
+
+// Clang/GCC warnings with -Weverything
+#if defined(__clang__)
+#if __has_warning("-Wunknown-warning-option")
+#pragma clang diagnostic ignored "-Wunknown-warning-option" // warning: unknown warning group 'xxx' // not all warnings are known by all Clang versions and they tend to be rename-happy.. so ignoring warnings triggers new warnings on some configuration. Great!
+#endif
+#if __has_warning("-Walloca")
+#pragma clang diagnostic ignored "-Walloca" // warning: use of function '__builtin_alloca' is discouraged
+#endif
+#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning: unknown warning group 'xxx'
+#pragma clang diagnostic ignored "-Wold-style-cast" // warning: use of old-style cast // yes, they are more terse.
+#pragma clang diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe // storing and comparing against same constants ok.
+#pragma clang diagnostic ignored "-Wglobal-constructors" // warning: declaration requires a global destructor // similar to above, not sure what the exact difference is.
+#pragma clang diagnostic ignored "-Wsign-conversion" // warning: implicit conversion changes signedness
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning: zero as null pointer constant // some standard header variations use #define NULL 0
+#pragma clang diagnostic ignored "-Wcomma" // warning: possible misuse of comma operator here
+#pragma clang diagnostic ignored "-Wreserved-id-macro" // warning: macro name is a reserved identifier
+#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" // warning: implicit conversion from 'xxx' to 'float' may lose precision
+#elif defined(__GNUC__)
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wunused-function" // warning: 'xxxx' defined but not used
+#pragma GCC diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function
+#pragma GCC diagnostic ignored "-Wconversion" // warning: conversion to 'xxxx' from 'xxxx' may alter its value
+#pragma GCC diagnostic ignored "-Wstack-protector" // warning: stack protector not protecting local variables: variable length buffer
+#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
+#endif
+
+//-------------------------------------------------------------------------
+// [SECTION] STB libraries implementation (for stb_truetype and stb_rect_pack)
+//-------------------------------------------------------------------------
+
+// Compile time options:
+//#define IMGUI_STB_NAMESPACE ImStb
+//#define IMGUI_STB_TRUETYPE_FILENAME "my_folder/stb_truetype.h"
+//#define IMGUI_STB_RECT_PACK_FILENAME "my_folder/stb_rect_pack.h"
+//#define IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION
+//#define IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION
+
+#ifdef IMGUI_STB_NAMESPACE
+namespace IMGUI_STB_NAMESPACE
+{
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (push)
+#pragma warning (disable: 4456) // declaration of 'xx' hides previous local declaration
+#pragma warning (disable: 6011) // (stb_rectpack) Dereferencing NULL pointer 'cur->next'.
+#pragma warning (disable: 6385) // (stb_truetype) Reading invalid data from 'buffer': the readable size is '_Old_3`kernel_width' bytes, but '3' bytes may be read.
+#pragma warning (disable: 28182) // (stb_rectpack) Dereferencing NULL pointer. 'cur' contains the same NULL value as 'cur->next' did.
+#endif
+
+#if defined(__clang__)
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunused-function"
+#pragma clang diagnostic ignored "-Wmissing-prototypes"
+#pragma clang diagnostic ignored "-Wimplicit-fallthrough"
+#pragma clang diagnostic ignored "-Wcast-qual" // warning: cast from 'const xxxx *' to 'xxx *' drops const qualifier
+#endif
+
+#if defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wtype-limits" // warning: comparison is always true due to limited range of data type [-Wtype-limits]
+#pragma GCC diagnostic ignored "-Wcast-qual" // warning: cast from type 'const xxxx *' to type 'xxxx *' casts away qualifiers
+#endif
+
+#ifndef STB_RECT_PACK_IMPLEMENTATION // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds)
+#ifndef IMGUI_DISABLE_STB_RECT_PACK_IMPLEMENTATION // in case the user already have an implementation in another compilation unit
+#define STBRP_STATIC
+#define STBRP_ASSERT(x) do { IM_ASSERT(x); } while (0)
+#define STBRP_SORT ImQsort
+#define STB_RECT_PACK_IMPLEMENTATION
+#endif
+#ifdef IMGUI_STB_RECT_PACK_FILENAME
+#include IMGUI_STB_RECT_PACK_FILENAME
+#else
+#include "imstb_rectpack.h"
+#endif
+#endif
+
+#ifdef IMGUI_ENABLE_STB_TRUETYPE
+#ifndef STB_TRUETYPE_IMPLEMENTATION // in case the user already have an implementation in the _same_ compilation unit (e.g. unity builds)
+#ifndef IMGUI_DISABLE_STB_TRUETYPE_IMPLEMENTATION // in case the user already have an implementation in another compilation unit
+#define STBTT_malloc(x,u) ((void)(u), IM_ALLOC(x))
+#define STBTT_free(x,u) ((void)(u), IM_FREE(x))
+#define STBTT_assert(x) do { IM_ASSERT(x); } while(0)
+#define STBTT_fmod(x,y) ImFmod(x,y)
+#define STBTT_sqrt(x) ImSqrt(x)
+#define STBTT_pow(x,y) ImPow(x,y)
+#define STBTT_fabs(x) ImFabs(x)
+#define STBTT_ifloor(x) ((int)ImFloorSigned(x))
+#define STBTT_iceil(x) ((int)ImCeil(x))
+#define STBTT_STATIC
+#define STB_TRUETYPE_IMPLEMENTATION
+#else
+#define STBTT_DEF extern
+#endif
+#ifdef IMGUI_STB_TRUETYPE_FILENAME
+#include IMGUI_STB_TRUETYPE_FILENAME
+#else
+#include "imstb_truetype.h"
+#endif
+#endif
+#endif // IMGUI_ENABLE_STB_TRUETYPE
+
+#if defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#endif
+
+#if defined(_MSC_VER)
+#pragma warning (pop)
+#endif
+
+#ifdef IMGUI_STB_NAMESPACE
+} // namespace ImStb
+using namespace IMGUI_STB_NAMESPACE;
+#endif
+
+//-----------------------------------------------------------------------------
+// [SECTION] Style functions
+//-----------------------------------------------------------------------------
+
+void ImGui::StyleColorsDark(ImGuiStyle* dst)
+{
+ ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
+ ImVec4* colors = style->Colors;
+
+ colors[ImGuiCol_Text] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
+ colors[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.50f, 1.00f);
+ colors[ImGuiCol_WindowBg] = ImVec4(0.06f, 0.06f, 0.06f, 0.94f);
+ colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_PopupBg] = ImVec4(0.08f, 0.08f, 0.08f, 0.94f);
+ colors[ImGuiCol_Border] = ImVec4(0.43f, 0.43f, 0.50f, 0.50f);
+ colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_FrameBg] = ImVec4(0.16f, 0.29f, 0.48f, 0.54f);
+ colors[ImGuiCol_FrameBgHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+ colors[ImGuiCol_FrameBgActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+ colors[ImGuiCol_TitleBg] = ImVec4(0.04f, 0.04f, 0.04f, 1.00f);
+ colors[ImGuiCol_TitleBgActive] = ImVec4(0.16f, 0.29f, 0.48f, 1.00f);
+ colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.00f, 0.00f, 0.00f, 0.51f);
+ colors[ImGuiCol_MenuBarBg] = ImVec4(0.14f, 0.14f, 0.14f, 1.00f);
+ colors[ImGuiCol_ScrollbarBg] = ImVec4(0.02f, 0.02f, 0.02f, 0.53f);
+ colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.31f, 0.31f, 0.31f, 1.00f);
+ colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.41f, 0.41f, 0.41f, 1.00f);
+ colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.51f, 0.51f, 0.51f, 1.00f);
+ colors[ImGuiCol_CheckMark] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_SliderGrab] = ImVec4(0.24f, 0.52f, 0.88f, 1.00f);
+ colors[ImGuiCol_SliderGrabActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_Button] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+ colors[ImGuiCol_ButtonHovered] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_ButtonActive] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
+ colors[ImGuiCol_Header] = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
+ colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
+ colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_Separator] = colors[ImGuiCol_Border];
+ colors[ImGuiCol_SeparatorHovered] = ImVec4(0.10f, 0.40f, 0.75f, 0.78f);
+ colors[ImGuiCol_SeparatorActive] = ImVec4(0.10f, 0.40f, 0.75f, 1.00f);
+ colors[ImGuiCol_ResizeGrip] = ImVec4(0.26f, 0.59f, 0.98f, 0.20f);
+ colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+ colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
+ colors[ImGuiCol_Tab] = ImLerp(colors[ImGuiCol_Header], colors[ImGuiCol_TitleBgActive], 0.80f);
+ colors[ImGuiCol_TabHovered] = colors[ImGuiCol_HeaderHovered];
+ colors[ImGuiCol_TabActive] = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
+ colors[ImGuiCol_TabUnfocused] = ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f);
+ colors[ImGuiCol_TabUnfocusedActive] = ImLerp(colors[ImGuiCol_TabActive], colors[ImGuiCol_TitleBg], 0.40f);
+ colors[ImGuiCol_PlotLines] = ImVec4(0.61f, 0.61f, 0.61f, 1.00f);
+ colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
+ colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+ colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
+ colors[ImGuiCol_TableHeaderBg] = ImVec4(0.19f, 0.19f, 0.20f, 1.00f);
+ colors[ImGuiCol_TableBorderStrong] = ImVec4(0.31f, 0.31f, 0.35f, 1.00f); // Prefer using Alpha=1.0 here
+ colors[ImGuiCol_TableBorderLight] = ImVec4(0.23f, 0.23f, 0.25f, 1.00f); // Prefer using Alpha=1.0 here
+ colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.06f);
+ colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
+ colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
+ colors[ImGuiCol_NavHighlight] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
+ colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
+ colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.35f);
+}
+
+void ImGui::StyleColorsClassic(ImGuiStyle* dst)
+{
+ ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
+ ImVec4* colors = style->Colors;
+
+ colors[ImGuiCol_Text] = ImVec4(0.90f, 0.90f, 0.90f, 1.00f);
+ colors[ImGuiCol_TextDisabled] = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
+ colors[ImGuiCol_WindowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.85f);
+ colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_PopupBg] = ImVec4(0.11f, 0.11f, 0.14f, 0.92f);
+ colors[ImGuiCol_Border] = ImVec4(0.50f, 0.50f, 0.50f, 0.50f);
+ colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_FrameBg] = ImVec4(0.43f, 0.43f, 0.43f, 0.39f);
+ colors[ImGuiCol_FrameBgHovered] = ImVec4(0.47f, 0.47f, 0.69f, 0.40f);
+ colors[ImGuiCol_FrameBgActive] = ImVec4(0.42f, 0.41f, 0.64f, 0.69f);
+ colors[ImGuiCol_TitleBg] = ImVec4(0.27f, 0.27f, 0.54f, 0.83f);
+ colors[ImGuiCol_TitleBgActive] = ImVec4(0.32f, 0.32f, 0.63f, 0.87f);
+ colors[ImGuiCol_TitleBgCollapsed] = ImVec4(0.40f, 0.40f, 0.80f, 0.20f);
+ colors[ImGuiCol_MenuBarBg] = ImVec4(0.40f, 0.40f, 0.55f, 0.80f);
+ colors[ImGuiCol_ScrollbarBg] = ImVec4(0.20f, 0.25f, 0.30f, 0.60f);
+ colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.40f, 0.40f, 0.80f, 0.30f);
+ colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.40f, 0.40f, 0.80f, 0.40f);
+ colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.41f, 0.39f, 0.80f, 0.60f);
+ colors[ImGuiCol_CheckMark] = ImVec4(0.90f, 0.90f, 0.90f, 0.50f);
+ colors[ImGuiCol_SliderGrab] = ImVec4(1.00f, 1.00f, 1.00f, 0.30f);
+ colors[ImGuiCol_SliderGrabActive] = ImVec4(0.41f, 0.39f, 0.80f, 0.60f);
+ colors[ImGuiCol_Button] = ImVec4(0.35f, 0.40f, 0.61f, 0.62f);
+ colors[ImGuiCol_ButtonHovered] = ImVec4(0.40f, 0.48f, 0.71f, 0.79f);
+ colors[ImGuiCol_ButtonActive] = ImVec4(0.46f, 0.54f, 0.80f, 1.00f);
+ colors[ImGuiCol_Header] = ImVec4(0.40f, 0.40f, 0.90f, 0.45f);
+ colors[ImGuiCol_HeaderHovered] = ImVec4(0.45f, 0.45f, 0.90f, 0.80f);
+ colors[ImGuiCol_HeaderActive] = ImVec4(0.53f, 0.53f, 0.87f, 0.80f);
+ colors[ImGuiCol_Separator] = ImVec4(0.50f, 0.50f, 0.50f, 0.60f);
+ colors[ImGuiCol_SeparatorHovered] = ImVec4(0.60f, 0.60f, 0.70f, 1.00f);
+ colors[ImGuiCol_SeparatorActive] = ImVec4(0.70f, 0.70f, 0.90f, 1.00f);
+ colors[ImGuiCol_ResizeGrip] = ImVec4(1.00f, 1.00f, 1.00f, 0.10f);
+ colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.78f, 0.82f, 1.00f, 0.60f);
+ colors[ImGuiCol_ResizeGripActive] = ImVec4(0.78f, 0.82f, 1.00f, 0.90f);
+ colors[ImGuiCol_Tab] = ImLerp(colors[ImGuiCol_Header], colors[ImGuiCol_TitleBgActive], 0.80f);
+ colors[ImGuiCol_TabHovered] = colors[ImGuiCol_HeaderHovered];
+ colors[ImGuiCol_TabActive] = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
+ colors[ImGuiCol_TabUnfocused] = ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f);
+ colors[ImGuiCol_TabUnfocusedActive] = ImLerp(colors[ImGuiCol_TabActive], colors[ImGuiCol_TitleBg], 0.40f);
+ colors[ImGuiCol_PlotLines] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
+ colors[ImGuiCol_PlotLinesHovered] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+ colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+ colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.60f, 0.00f, 1.00f);
+ colors[ImGuiCol_TableHeaderBg] = ImVec4(0.27f, 0.27f, 0.38f, 1.00f);
+ colors[ImGuiCol_TableBorderStrong] = ImVec4(0.31f, 0.31f, 0.45f, 1.00f); // Prefer using Alpha=1.0 here
+ colors[ImGuiCol_TableBorderLight] = ImVec4(0.26f, 0.26f, 0.28f, 1.00f); // Prefer using Alpha=1.0 here
+ colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_TableRowBgAlt] = ImVec4(1.00f, 1.00f, 1.00f, 0.07f);
+ colors[ImGuiCol_TextSelectedBg] = ImVec4(0.00f, 0.00f, 1.00f, 0.35f);
+ colors[ImGuiCol_DragDropTarget] = ImVec4(1.00f, 1.00f, 0.00f, 0.90f);
+ colors[ImGuiCol_NavHighlight] = colors[ImGuiCol_HeaderHovered];
+ colors[ImGuiCol_NavWindowingHighlight] = ImVec4(1.00f, 1.00f, 1.00f, 0.70f);
+ colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.80f, 0.80f, 0.80f, 0.20f);
+ colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
+}
+
+// Those light colors are better suited with a thicker font than the default one + FrameBorder
+void ImGui::StyleColorsLight(ImGuiStyle* dst)
+{
+ ImGuiStyle* style = dst ? dst : &ImGui::GetStyle();
+ ImVec4* colors = style->Colors;
+
+ colors[ImGuiCol_Text] = ImVec4(0.00f, 0.00f, 0.00f, 1.00f);
+ colors[ImGuiCol_TextDisabled] = ImVec4(0.60f, 0.60f, 0.60f, 1.00f);
+ colors[ImGuiCol_WindowBg] = ImVec4(0.94f, 0.94f, 0.94f, 1.00f);
+ colors[ImGuiCol_ChildBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_PopupBg] = ImVec4(1.00f, 1.00f, 1.00f, 0.98f);
+ colors[ImGuiCol_Border] = ImVec4(0.00f, 0.00f, 0.00f, 0.30f);
+ colors[ImGuiCol_BorderShadow] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_FrameBg] = ImVec4(1.00f, 1.00f, 1.00f, 1.00f);
+ colors[ImGuiCol_FrameBgHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+ colors[ImGuiCol_FrameBgActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+ colors[ImGuiCol_TitleBg] = ImVec4(0.96f, 0.96f, 0.96f, 1.00f);
+ colors[ImGuiCol_TitleBgActive] = ImVec4(0.82f, 0.82f, 0.82f, 1.00f);
+ colors[ImGuiCol_TitleBgCollapsed] = ImVec4(1.00f, 1.00f, 1.00f, 0.51f);
+ colors[ImGuiCol_MenuBarBg] = ImVec4(0.86f, 0.86f, 0.86f, 1.00f);
+ colors[ImGuiCol_ScrollbarBg] = ImVec4(0.98f, 0.98f, 0.98f, 0.53f);
+ colors[ImGuiCol_ScrollbarGrab] = ImVec4(0.69f, 0.69f, 0.69f, 0.80f);
+ colors[ImGuiCol_ScrollbarGrabHovered] = ImVec4(0.49f, 0.49f, 0.49f, 0.80f);
+ colors[ImGuiCol_ScrollbarGrabActive] = ImVec4(0.49f, 0.49f, 0.49f, 1.00f);
+ colors[ImGuiCol_CheckMark] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_SliderGrab] = ImVec4(0.26f, 0.59f, 0.98f, 0.78f);
+ colors[ImGuiCol_SliderGrabActive] = ImVec4(0.46f, 0.54f, 0.80f, 0.60f);
+ colors[ImGuiCol_Button] = ImVec4(0.26f, 0.59f, 0.98f, 0.40f);
+ colors[ImGuiCol_ButtonHovered] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_ButtonActive] = ImVec4(0.06f, 0.53f, 0.98f, 1.00f);
+ colors[ImGuiCol_Header] = ImVec4(0.26f, 0.59f, 0.98f, 0.31f);
+ colors[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.80f);
+ colors[ImGuiCol_HeaderActive] = ImVec4(0.26f, 0.59f, 0.98f, 1.00f);
+ colors[ImGuiCol_Separator] = ImVec4(0.39f, 0.39f, 0.39f, 0.62f);
+ colors[ImGuiCol_SeparatorHovered] = ImVec4(0.14f, 0.44f, 0.80f, 0.78f);
+ colors[ImGuiCol_SeparatorActive] = ImVec4(0.14f, 0.44f, 0.80f, 1.00f);
+ colors[ImGuiCol_ResizeGrip] = ImVec4(0.35f, 0.35f, 0.35f, 0.17f);
+ colors[ImGuiCol_ResizeGripHovered] = ImVec4(0.26f, 0.59f, 0.98f, 0.67f);
+ colors[ImGuiCol_ResizeGripActive] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
+ colors[ImGuiCol_Tab] = ImLerp(colors[ImGuiCol_Header], colors[ImGuiCol_TitleBgActive], 0.90f);
+ colors[ImGuiCol_TabHovered] = colors[ImGuiCol_HeaderHovered];
+ colors[ImGuiCol_TabActive] = ImLerp(colors[ImGuiCol_HeaderActive], colors[ImGuiCol_TitleBgActive], 0.60f);
+ colors[ImGuiCol_TabUnfocused] = ImLerp(colors[ImGuiCol_Tab], colors[ImGuiCol_TitleBg], 0.80f);
+ colors[ImGuiCol_TabUnfocusedActive] = ImLerp(colors[ImGuiCol_TabActive], colors[ImGuiCol_TitleBg], 0.40f);
+ colors[ImGuiCol_PlotLines] = ImVec4(0.39f, 0.39f, 0.39f, 1.00f);
+ colors[ImGuiCol_PlotLinesHovered] = ImVec4(1.00f, 0.43f, 0.35f, 1.00f);
+ colors[ImGuiCol_PlotHistogram] = ImVec4(0.90f, 0.70f, 0.00f, 1.00f);
+ colors[ImGuiCol_PlotHistogramHovered] = ImVec4(1.00f, 0.45f, 0.00f, 1.00f);
+ colors[ImGuiCol_TableHeaderBg] = ImVec4(0.78f, 0.87f, 0.98f, 1.00f);
+ colors[ImGuiCol_TableBorderStrong] = ImVec4(0.57f, 0.57f, 0.64f, 1.00f); // Prefer using Alpha=1.0 here
+ colors[ImGuiCol_TableBorderLight] = ImVec4(0.68f, 0.68f, 0.74f, 1.00f); // Prefer using Alpha=1.0 here
+ colors[ImGuiCol_TableRowBg] = ImVec4(0.00f, 0.00f, 0.00f, 0.00f);
+ colors[ImGuiCol_TableRowBgAlt] = ImVec4(0.30f, 0.30f, 0.30f, 0.09f);
+ colors[ImGuiCol_TextSelectedBg] = ImVec4(0.26f, 0.59f, 0.98f, 0.35f);
+ colors[ImGuiCol_DragDropTarget] = ImVec4(0.26f, 0.59f, 0.98f, 0.95f);
+ colors[ImGuiCol_NavHighlight] = colors[ImGuiCol_HeaderHovered];
+ colors[ImGuiCol_NavWindowingHighlight] = ImVec4(0.70f, 0.70f, 0.70f, 0.70f);
+ colors[ImGuiCol_NavWindowingDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.20f);
+ colors[ImGuiCol_ModalWindowDimBg] = ImVec4(0.20f, 0.20f, 0.20f, 0.35f);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImDrawList
+//-----------------------------------------------------------------------------
+
+ImDrawListSharedData::ImDrawListSharedData()
+{
+ memset(this, 0, sizeof(*this));
+ for (int i = 0; i < IM_ARRAYSIZE(ArcFastVtx); i++)
+ {
+ const float a = ((float)i * 2 * IM_PI) / (float)IM_ARRAYSIZE(ArcFastVtx);
+ ArcFastVtx[i] = ImVec2(ImCos(a), ImSin(a));
+ }
+ ArcFastRadiusCutoff = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC_R(IM_DRAWLIST_ARCFAST_SAMPLE_MAX, CircleSegmentMaxError);
+}
+
+void ImDrawListSharedData::SetCircleTessellationMaxError(float max_error)
+{
+ if (CircleSegmentMaxError == max_error)
+ return;
+
+ IM_ASSERT(max_error > 0.0f);
+ CircleSegmentMaxError = max_error;
+ for (int i = 0; i < IM_ARRAYSIZE(CircleSegmentCounts); i++)
+ {
+ const float radius = (float)i;
+ CircleSegmentCounts[i] = (ImU8)((i > 0) ? IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, CircleSegmentMaxError) : IM_DRAWLIST_ARCFAST_SAMPLE_MAX);
+ }
+ ArcFastRadiusCutoff = IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC_R(IM_DRAWLIST_ARCFAST_SAMPLE_MAX, CircleSegmentMaxError);
+}
+
+// Initialize before use in a new frame. We always have a command ready in the buffer.
+void ImDrawList::_ResetForNewFrame()
+{
+ // Verify that the ImDrawCmd fields we want to memcmp() are contiguous in memory.
+ IM_STATIC_ASSERT(IM_OFFSETOF(ImDrawCmd, ClipRect) == 0);
+ IM_STATIC_ASSERT(IM_OFFSETOF(ImDrawCmd, TextureId) == sizeof(ImVec4));
+ IM_STATIC_ASSERT(IM_OFFSETOF(ImDrawCmd, VtxOffset) == sizeof(ImVec4) + sizeof(ImTextureID));
+
+ CmdBuffer.resize(0);
+ IdxBuffer.resize(0);
+ VtxBuffer.resize(0);
+ Flags = _Data->InitialFlags;
+ memset(&_CmdHeader, 0, sizeof(_CmdHeader));
+ _VtxCurrentIdx = 0;
+ _VtxWritePtr = NULL;
+ _IdxWritePtr = NULL;
+ _ClipRectStack.resize(0);
+ _TextureIdStack.resize(0);
+ _Path.resize(0);
+ _Splitter.Clear();
+ CmdBuffer.push_back(ImDrawCmd());
+ _FringeScale = 1.0f;
+}
+
+void ImDrawList::_ClearFreeMemory()
+{
+ CmdBuffer.clear();
+ IdxBuffer.clear();
+ VtxBuffer.clear();
+ Flags = ImDrawListFlags_None;
+ _VtxCurrentIdx = 0;
+ _VtxWritePtr = NULL;
+ _IdxWritePtr = NULL;
+ _ClipRectStack.clear();
+ _TextureIdStack.clear();
+ _Path.clear();
+ _Splitter.ClearFreeMemory();
+}
+
+ImDrawList* ImDrawList::CloneOutput() const
+{
+ ImDrawList* dst = IM_NEW(ImDrawList(_Data));
+ dst->CmdBuffer = CmdBuffer;
+ dst->IdxBuffer = IdxBuffer;
+ dst->VtxBuffer = VtxBuffer;
+ dst->Flags = Flags;
+ return dst;
+}
+
+void ImDrawList::AddDrawCmd()
+{
+ ImDrawCmd draw_cmd;
+ draw_cmd.ClipRect = _CmdHeader.ClipRect; // Same as calling ImDrawCmd_HeaderCopy()
+ draw_cmd.TextureId = _CmdHeader.TextureId;
+ draw_cmd.VtxOffset = _CmdHeader.VtxOffset;
+ draw_cmd.IdxOffset = IdxBuffer.Size;
+
+ IM_ASSERT(draw_cmd.ClipRect.x <= draw_cmd.ClipRect.z && draw_cmd.ClipRect.y <= draw_cmd.ClipRect.w);
+ CmdBuffer.push_back(draw_cmd);
+}
+
+// Pop trailing draw command (used before merging or presenting to user)
+// Note that this leaves the ImDrawList in a state unfit for further commands, as most code assume that CmdBuffer.Size > 0 && CmdBuffer.back().UserCallback == NULL
+void ImDrawList::_PopUnusedDrawCmd()
+{
+ if (CmdBuffer.Size == 0)
+ return;
+ ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
+ if (curr_cmd->ElemCount == 0 && curr_cmd->UserCallback == NULL)
+ CmdBuffer.pop_back();
+}
+
+void ImDrawList::AddCallback(ImDrawCallback callback, void* callback_data)
+{
+ IM_ASSERT_PARANOID(CmdBuffer.Size > 0);
+ ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
+ IM_ASSERT(curr_cmd->UserCallback == NULL);
+ if (curr_cmd->ElemCount != 0)
+ {
+ AddDrawCmd();
+ curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
+ }
+ curr_cmd->UserCallback = callback;
+ curr_cmd->UserCallbackData = callback_data;
+
+ AddDrawCmd(); // Force a new command after us (see comment below)
+}
+
+// Compare ClipRect, TextureId and VtxOffset with a single memcmp()
+#define ImDrawCmd_HeaderSize (IM_OFFSETOF(ImDrawCmd, VtxOffset) + sizeof(unsigned int))
+#define ImDrawCmd_HeaderCompare(CMD_LHS, CMD_RHS) (memcmp(CMD_LHS, CMD_RHS, ImDrawCmd_HeaderSize)) // Compare ClipRect, TextureId, VtxOffset
+#define ImDrawCmd_HeaderCopy(CMD_DST, CMD_SRC) (memcpy(CMD_DST, CMD_SRC, ImDrawCmd_HeaderSize)) // Copy ClipRect, TextureId, VtxOffset
+#define ImDrawCmd_AreSequentialIdxOffset(CMD_0, CMD_1) (CMD_0->IdxOffset + CMD_0->ElemCount == CMD_1->IdxOffset)
+
+// Try to merge two last draw commands
+void ImDrawList::_TryMergeDrawCmds()
+{
+ IM_ASSERT_PARANOID(CmdBuffer.Size > 0);
+ ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
+ ImDrawCmd* prev_cmd = curr_cmd - 1;
+ if (ImDrawCmd_HeaderCompare(curr_cmd, prev_cmd) == 0 && ImDrawCmd_AreSequentialIdxOffset(prev_cmd, curr_cmd) && curr_cmd->UserCallback == NULL && prev_cmd->UserCallback == NULL)
+ {
+ prev_cmd->ElemCount += curr_cmd->ElemCount;
+ CmdBuffer.pop_back();
+ }
+}
+
+// Our scheme may appears a bit unusual, basically we want the most-common calls AddLine AddRect etc. to not have to perform any check so we always have a command ready in the stack.
+// The cost of figuring out if a new command has to be added or if we can merge is paid in those Update** functions only.
+void ImDrawList::_OnChangedClipRect()
+{
+ // If current command is used with different settings we need to add a new command
+ IM_ASSERT_PARANOID(CmdBuffer.Size > 0);
+ ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
+ if (curr_cmd->ElemCount != 0 && memcmp(&curr_cmd->ClipRect, &_CmdHeader.ClipRect, sizeof(ImVec4)) != 0)
+ {
+ AddDrawCmd();
+ return;
+ }
+ IM_ASSERT(curr_cmd->UserCallback == NULL);
+
+ // Try to merge with previous command if it matches, else use current command
+ ImDrawCmd* prev_cmd = curr_cmd - 1;
+ if (curr_cmd->ElemCount == 0 && CmdBuffer.Size > 1 && ImDrawCmd_HeaderCompare(&_CmdHeader, prev_cmd) == 0 && ImDrawCmd_AreSequentialIdxOffset(prev_cmd, curr_cmd) && prev_cmd->UserCallback == NULL)
+ {
+ CmdBuffer.pop_back();
+ return;
+ }
+
+ curr_cmd->ClipRect = _CmdHeader.ClipRect;
+}
+
+void ImDrawList::_OnChangedTextureID()
+{
+ // If current command is used with different settings we need to add a new command
+ IM_ASSERT_PARANOID(CmdBuffer.Size > 0);
+ ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
+ if (curr_cmd->ElemCount != 0 && curr_cmd->TextureId != _CmdHeader.TextureId)
+ {
+ AddDrawCmd();
+ return;
+ }
+ IM_ASSERT(curr_cmd->UserCallback == NULL);
+
+ // Try to merge with previous command if it matches, else use current command
+ ImDrawCmd* prev_cmd = curr_cmd - 1;
+ if (curr_cmd->ElemCount == 0 && CmdBuffer.Size > 1 && ImDrawCmd_HeaderCompare(&_CmdHeader, prev_cmd) == 0 && ImDrawCmd_AreSequentialIdxOffset(prev_cmd, curr_cmd) && prev_cmd->UserCallback == NULL)
+ {
+ CmdBuffer.pop_back();
+ return;
+ }
+
+ curr_cmd->TextureId = _CmdHeader.TextureId;
+}
+
+void ImDrawList::_OnChangedVtxOffset()
+{
+ // We don't need to compare curr_cmd->VtxOffset != _CmdHeader.VtxOffset because we know it'll be different at the time we call this.
+ _VtxCurrentIdx = 0;
+ IM_ASSERT_PARANOID(CmdBuffer.Size > 0);
+ ImDrawCmd* curr_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
+ //IM_ASSERT(curr_cmd->VtxOffset != _CmdHeader.VtxOffset); // See #3349
+ if (curr_cmd->ElemCount != 0)
+ {
+ AddDrawCmd();
+ return;
+ }
+ IM_ASSERT(curr_cmd->UserCallback == NULL);
+ curr_cmd->VtxOffset = _CmdHeader.VtxOffset;
+}
+
+int ImDrawList::_CalcCircleAutoSegmentCount(float radius) const
+{
+ // Automatic segment count
+ const int radius_idx = (int)(radius + 0.999999f); // ceil to never reduce accuracy
+ if (radius_idx < IM_ARRAYSIZE(_Data->CircleSegmentCounts))
+ return _Data->CircleSegmentCounts[radius_idx]; // Use cached value
+ else
+ return IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(radius, _Data->CircleSegmentMaxError);
+}
+
+// Render-level scissoring. This is passed down to your render function but not used for CPU-side coarse clipping. Prefer using higher-level ImGui::PushClipRect() to affect logic (hit-testing and widget culling)
+void ImDrawList::PushClipRect(const ImVec2& cr_min, const ImVec2& cr_max, bool intersect_with_current_clip_rect)
+{
+ ImVec4 cr(cr_min.x, cr_min.y, cr_max.x, cr_max.y);
+ if (intersect_with_current_clip_rect)
+ {
+ ImVec4 current = _CmdHeader.ClipRect;
+ if (cr.x < current.x) cr.x = current.x;
+ if (cr.y < current.y) cr.y = current.y;
+ if (cr.z > current.z) cr.z = current.z;
+ if (cr.w > current.w) cr.w = current.w;
+ }
+ cr.z = ImMax(cr.x, cr.z);
+ cr.w = ImMax(cr.y, cr.w);
+
+ _ClipRectStack.push_back(cr);
+ _CmdHeader.ClipRect = cr;
+ _OnChangedClipRect();
+}
+
+void ImDrawList::PushClipRectFullScreen()
+{
+ PushClipRect(ImVec2(_Data->ClipRectFullscreen.x, _Data->ClipRectFullscreen.y), ImVec2(_Data->ClipRectFullscreen.z, _Data->ClipRectFullscreen.w));
+}
+
+void ImDrawList::PopClipRect()
+{
+ _ClipRectStack.pop_back();
+ _CmdHeader.ClipRect = (_ClipRectStack.Size == 0) ? _Data->ClipRectFullscreen : _ClipRectStack.Data[_ClipRectStack.Size - 1];
+ _OnChangedClipRect();
+}
+
+void ImDrawList::PushTextureID(ImTextureID texture_id)
+{
+ _TextureIdStack.push_back(texture_id);
+ _CmdHeader.TextureId = texture_id;
+ _OnChangedTextureID();
+}
+
+void ImDrawList::PopTextureID()
+{
+ _TextureIdStack.pop_back();
+ _CmdHeader.TextureId = (_TextureIdStack.Size == 0) ? (ImTextureID)NULL : _TextureIdStack.Data[_TextureIdStack.Size - 1];
+ _OnChangedTextureID();
+}
+
+// Reserve space for a number of vertices and indices.
+// You must finish filling your reserved data before calling PrimReserve() again, as it may reallocate or
+// submit the intermediate results. PrimUnreserve() can be used to release unused allocations.
+void ImDrawList::PrimReserve(int idx_count, int vtx_count)
+{
+ // Large mesh support (when enabled)
+ IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0);
+ if (sizeof(ImDrawIdx) == 2 && (_VtxCurrentIdx + vtx_count >= (1 << 16)) && (Flags & ImDrawListFlags_AllowVtxOffset))
+ {
+ // FIXME: In theory we should be testing that vtx_count <64k here.
+ // In practice, RenderText() relies on reserving ahead for a worst case scenario so it is currently useful for us
+ // to not make that check until we rework the text functions to handle clipping and large horizontal lines better.
+ _CmdHeader.VtxOffset = VtxBuffer.Size;
+ _OnChangedVtxOffset();
+ }
+
+ ImDrawCmd* draw_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
+ draw_cmd->ElemCount += idx_count;
+
+ int vtx_buffer_old_size = VtxBuffer.Size;
+ VtxBuffer.resize(vtx_buffer_old_size + vtx_count);
+ _VtxWritePtr = VtxBuffer.Data + vtx_buffer_old_size;
+
+ int idx_buffer_old_size = IdxBuffer.Size;
+ IdxBuffer.resize(idx_buffer_old_size + idx_count);
+ _IdxWritePtr = IdxBuffer.Data + idx_buffer_old_size;
+}
+
+// Release the a number of reserved vertices/indices from the end of the last reservation made with PrimReserve().
+void ImDrawList::PrimUnreserve(int idx_count, int vtx_count)
+{
+ IM_ASSERT_PARANOID(idx_count >= 0 && vtx_count >= 0);
+
+ ImDrawCmd* draw_cmd = &CmdBuffer.Data[CmdBuffer.Size - 1];
+ draw_cmd->ElemCount -= idx_count;
+ VtxBuffer.shrink(VtxBuffer.Size - vtx_count);
+ IdxBuffer.shrink(IdxBuffer.Size - idx_count);
+}
+
+// Fully unrolled with inline call to keep our debug builds decently fast.
+void ImDrawList::PrimRect(const ImVec2& a, const ImVec2& c, ImU32 col)
+{
+ ImVec2 b(c.x, a.y), d(a.x, c.y), uv(_Data->TexUvWhitePixel);
+ ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx;
+ _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2);
+ _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3);
+ _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
+ _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col;
+ _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv; _VtxWritePtr[2].col = col;
+ _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv; _VtxWritePtr[3].col = col;
+ _VtxWritePtr += 4;
+ _VtxCurrentIdx += 4;
+ _IdxWritePtr += 6;
+}
+
+void ImDrawList::PrimRectUV(const ImVec2& a, const ImVec2& c, const ImVec2& uv_a, const ImVec2& uv_c, ImU32 col)
+{
+ ImVec2 b(c.x, a.y), d(a.x, c.y), uv_b(uv_c.x, uv_a.y), uv_d(uv_a.x, uv_c.y);
+ ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx;
+ _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2);
+ _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3);
+ _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col = col;
+ _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col = col;
+ _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col = col;
+ _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col = col;
+ _VtxWritePtr += 4;
+ _VtxCurrentIdx += 4;
+ _IdxWritePtr += 6;
+}
+
+void ImDrawList::PrimQuadUV(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& d, const ImVec2& uv_a, const ImVec2& uv_b, const ImVec2& uv_c, const ImVec2& uv_d, ImU32 col)
+{
+ ImDrawIdx idx = (ImDrawIdx)_VtxCurrentIdx;
+ _IdxWritePtr[0] = idx; _IdxWritePtr[1] = (ImDrawIdx)(idx+1); _IdxWritePtr[2] = (ImDrawIdx)(idx+2);
+ _IdxWritePtr[3] = idx; _IdxWritePtr[4] = (ImDrawIdx)(idx+2); _IdxWritePtr[5] = (ImDrawIdx)(idx+3);
+ _VtxWritePtr[0].pos = a; _VtxWritePtr[0].uv = uv_a; _VtxWritePtr[0].col = col;
+ _VtxWritePtr[1].pos = b; _VtxWritePtr[1].uv = uv_b; _VtxWritePtr[1].col = col;
+ _VtxWritePtr[2].pos = c; _VtxWritePtr[2].uv = uv_c; _VtxWritePtr[2].col = col;
+ _VtxWritePtr[3].pos = d; _VtxWritePtr[3].uv = uv_d; _VtxWritePtr[3].col = col;
+ _VtxWritePtr += 4;
+ _VtxCurrentIdx += 4;
+ _IdxWritePtr += 6;
+}
+
+// On AddPolyline() and AddConvexPolyFilled() we intentionally avoid using ImVec2 and superfluous function calls to optimize debug/non-inlined builds.
+// - Those macros expects l-values and need to be used as their own statement.
+// - Those macros are intentionally not surrounded by the 'do {} while (0)' idiom because even that translates to runtime with debug compilers.
+#define IM_NORMALIZE2F_OVER_ZERO(VX,VY) { float d2 = VX*VX + VY*VY; if (d2 > 0.0f) { float inv_len = ImRsqrt(d2); VX *= inv_len; VY *= inv_len; } } (void)0
+#define IM_FIXNORMAL2F_MAX_INVLEN2 100.0f // 500.0f (see #4053, #3366)
+#define IM_FIXNORMAL2F(VX,VY) { float d2 = VX*VX + VY*VY; if (d2 > 0.000001f) { float inv_len2 = 1.0f / d2; if (inv_len2 > IM_FIXNORMAL2F_MAX_INVLEN2) inv_len2 = IM_FIXNORMAL2F_MAX_INVLEN2; VX *= inv_len2; VY *= inv_len2; } } (void)0
+
+// TODO: Thickness anti-aliased lines cap are missing their AA fringe.
+// We avoid using the ImVec2 math operators here to reduce cost to a minimum for debug/non-inlined builds.
+void ImDrawList::AddPolyline(const ImVec2* points, const int points_count, ImU32 col, ImDrawFlags flags, float thickness)
+{
+ if (points_count < 2)
+ return;
+
+ const bool closed = (flags & ImDrawFlags_Closed) != 0;
+ const ImVec2 opaque_uv = _Data->TexUvWhitePixel;
+ const int count = closed ? points_count : points_count - 1; // The number of line segments we need to draw
+ const bool thick_line = (thickness > _FringeScale);
+
+ if (Flags & ImDrawListFlags_AntiAliasedLines)
+ {
+ // Anti-aliased stroke
+ const float AA_SIZE = _FringeScale;
+ const ImU32 col_trans = col & ~IM_COL32_A_MASK;
+
+ // Thicknesses <1.0 should behave like thickness 1.0
+ thickness = ImMax(thickness, 1.0f);
+ const int integer_thickness = (int)thickness;
+ const float fractional_thickness = thickness - integer_thickness;
+
+ // Do we want to draw this line using a texture?
+ // - For now, only draw integer-width lines using textures to avoid issues with the way scaling occurs, could be improved.
+ // - If AA_SIZE is not 1.0f we cannot use the texture path.
+ const bool use_texture = (Flags & ImDrawListFlags_AntiAliasedLinesUseTex) && (integer_thickness < IM_DRAWLIST_TEX_LINES_WIDTH_MAX) && (fractional_thickness <= 0.00001f) && (AA_SIZE == 1.0f);
+
+ // We should never hit this, because NewFrame() doesn't set ImDrawListFlags_AntiAliasedLinesUseTex unless ImFontAtlasFlags_NoBakedLines is off
+ IM_ASSERT_PARANOID(!use_texture || !(_Data->Font->ContainerAtlas->Flags & ImFontAtlasFlags_NoBakedLines));
+
+ const int idx_count = use_texture ? (count * 6) : (thick_line ? count * 18 : count * 12);
+ const int vtx_count = use_texture ? (points_count * 2) : (thick_line ? points_count * 4 : points_count * 3);
+ PrimReserve(idx_count, vtx_count);
+
+ // Temporary buffer
+ // The first <points_count> items are normals at each line point, then after that there are either 2 or 4 temp points for each line point
+ ImVec2* temp_normals = (ImVec2*)alloca(points_count * ((use_texture || !thick_line) ? 3 : 5) * sizeof(ImVec2)); //-V630
+ ImVec2* temp_points = temp_normals + points_count;
+
+ // Calculate normals (tangents) for each line segment
+ for (int i1 = 0; i1 < count; i1++)
+ {
+ const int i2 = (i1 + 1) == points_count ? 0 : i1 + 1;
+ float dx = points[i2].x - points[i1].x;
+ float dy = points[i2].y - points[i1].y;
+ IM_NORMALIZE2F_OVER_ZERO(dx, dy);
+ temp_normals[i1].x = dy;
+ temp_normals[i1].y = -dx;
+ }
+ if (!closed)
+ temp_normals[points_count - 1] = temp_normals[points_count - 2];
+
+ // If we are drawing a one-pixel-wide line without a texture, or a textured line of any width, we only need 2 or 3 vertices per point
+ if (use_texture || !thick_line)
+ {
+ // [PATH 1] Texture-based lines (thick or non-thick)
+ // [PATH 2] Non texture-based lines (non-thick)
+
+ // The width of the geometry we need to draw - this is essentially <thickness> pixels for the line itself, plus "one pixel" for AA.
+ // - In the texture-based path, we don't use AA_SIZE here because the +1 is tied to the generated texture
+ // (see ImFontAtlasBuildRenderLinesTexData() function), and so alternate values won't work without changes to that code.
+ // - In the non texture-based paths, we would allow AA_SIZE to potentially be != 1.0f with a patch (e.g. fringe_scale patch to
+ // allow scaling geometry while preserving one-screen-pixel AA fringe).
+ const float half_draw_size = use_texture ? ((thickness * 0.5f) + 1) : AA_SIZE;
+
+ // If line is not closed, the first and last points need to be generated differently as there are no normals to blend
+ if (!closed)
+ {
+ temp_points[0] = points[0] + temp_normals[0] * half_draw_size;
+ temp_points[1] = points[0] - temp_normals[0] * half_draw_size;
+ temp_points[(points_count-1)*2+0] = points[points_count-1] + temp_normals[points_count-1] * half_draw_size;
+ temp_points[(points_count-1)*2+1] = points[points_count-1] - temp_normals[points_count-1] * half_draw_size;
+ }
+
+ // Generate the indices to form a number of triangles for each line segment, and the vertices for the line edges
+ // This takes points n and n+1 and writes into n+1, with the first point in a closed line being generated from the final one (as n+1 wraps)
+ // FIXME-OPT: Merge the different loops, possibly remove the temporary buffer.
+ unsigned int idx1 = _VtxCurrentIdx; // Vertex index for start of line segment
+ for (int i1 = 0; i1 < count; i1++) // i1 is the first point of the line segment
+ {
+ const int i2 = (i1 + 1) == points_count ? 0 : i1 + 1; // i2 is the second point of the line segment
+ const unsigned int idx2 = ((i1 + 1) == points_count) ? _VtxCurrentIdx : (idx1 + (use_texture ? 2 : 3)); // Vertex index for end of segment
+
+ // Average normals
+ float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f;
+ float dm_y = (temp_normals[i1].y + temp_normals[i2].y) * 0.5f;
+ IM_FIXNORMAL2F(dm_x, dm_y);
+ dm_x *= half_draw_size; // dm_x, dm_y are offset to the outer edge of the AA area
+ dm_y *= half_draw_size;
+
+ // Add temporary vertexes for the outer edges
+ ImVec2* out_vtx = &temp_points[i2 * 2];
+ out_vtx[0].x = points[i2].x + dm_x;
+ out_vtx[0].y = points[i2].y + dm_y;
+ out_vtx[1].x = points[i2].x - dm_x;
+ out_vtx[1].y = points[i2].y - dm_y;
+
+ if (use_texture)
+ {
+ // Add indices for two triangles
+ _IdxWritePtr[0] = (ImDrawIdx)(idx2 + 0); _IdxWritePtr[1] = (ImDrawIdx)(idx1 + 0); _IdxWritePtr[2] = (ImDrawIdx)(idx1 + 1); // Right tri
+ _IdxWritePtr[3] = (ImDrawIdx)(idx2 + 1); _IdxWritePtr[4] = (ImDrawIdx)(idx1 + 1); _IdxWritePtr[5] = (ImDrawIdx)(idx2 + 0); // Left tri
+ _IdxWritePtr += 6;
+ }
+ else
+ {
+ // Add indexes for four triangles
+ _IdxWritePtr[0] = (ImDrawIdx)(idx2 + 0); _IdxWritePtr[1] = (ImDrawIdx)(idx1 + 0); _IdxWritePtr[2] = (ImDrawIdx)(idx1 + 2); // Right tri 1
+ _IdxWritePtr[3] = (ImDrawIdx)(idx1 + 2); _IdxWritePtr[4] = (ImDrawIdx)(idx2 + 2); _IdxWritePtr[5] = (ImDrawIdx)(idx2 + 0); // Right tri 2
+ _IdxWritePtr[6] = (ImDrawIdx)(idx2 + 1); _IdxWritePtr[7] = (ImDrawIdx)(idx1 + 1); _IdxWritePtr[8] = (ImDrawIdx)(idx1 + 0); // Left tri 1
+ _IdxWritePtr[9] = (ImDrawIdx)(idx1 + 0); _IdxWritePtr[10] = (ImDrawIdx)(idx2 + 0); _IdxWritePtr[11] = (ImDrawIdx)(idx2 + 1); // Left tri 2
+ _IdxWritePtr += 12;
+ }
+
+ idx1 = idx2;
+ }
+
+ // Add vertexes for each point on the line
+ if (use_texture)
+ {
+ // If we're using textures we only need to emit the left/right edge vertices
+ ImVec4 tex_uvs = _Data->TexUvLines[integer_thickness];
+ /*if (fractional_thickness != 0.0f) // Currently always zero when use_texture==false!
+ {
+ const ImVec4 tex_uvs_1 = _Data->TexUvLines[integer_thickness + 1];
+ tex_uvs.x = tex_uvs.x + (tex_uvs_1.x - tex_uvs.x) * fractional_thickness; // inlined ImLerp()
+ tex_uvs.y = tex_uvs.y + (tex_uvs_1.y - tex_uvs.y) * fractional_thickness;
+ tex_uvs.z = tex_uvs.z + (tex_uvs_1.z - tex_uvs.z) * fractional_thickness;
+ tex_uvs.w = tex_uvs.w + (tex_uvs_1.w - tex_uvs.w) * fractional_thickness;
+ }*/
+ ImVec2 tex_uv0(tex_uvs.x, tex_uvs.y);
+ ImVec2 tex_uv1(tex_uvs.z, tex_uvs.w);
+ for (int i = 0; i < points_count; i++)
+ {
+ _VtxWritePtr[0].pos = temp_points[i * 2 + 0]; _VtxWritePtr[0].uv = tex_uv0; _VtxWritePtr[0].col = col; // Left-side outer edge
+ _VtxWritePtr[1].pos = temp_points[i * 2 + 1]; _VtxWritePtr[1].uv = tex_uv1; _VtxWritePtr[1].col = col; // Right-side outer edge
+ _VtxWritePtr += 2;
+ }
+ }
+ else
+ {
+ // If we're not using a texture, we need the center vertex as well
+ for (int i = 0; i < points_count; i++)
+ {
+ _VtxWritePtr[0].pos = points[i]; _VtxWritePtr[0].uv = opaque_uv; _VtxWritePtr[0].col = col; // Center of line
+ _VtxWritePtr[1].pos = temp_points[i * 2 + 0]; _VtxWritePtr[1].uv = opaque_uv; _VtxWritePtr[1].col = col_trans; // Left-side outer edge
+ _VtxWritePtr[2].pos = temp_points[i * 2 + 1]; _VtxWritePtr[2].uv = opaque_uv; _VtxWritePtr[2].col = col_trans; // Right-side outer edge
+ _VtxWritePtr += 3;
+ }
+ }
+ }
+ else
+ {
+ // [PATH 2] Non texture-based lines (thick): we need to draw the solid line core and thus require four vertices per point
+ const float half_inner_thickness = (thickness - AA_SIZE) * 0.5f;
+
+ // If line is not closed, the first and last points need to be generated differently as there are no normals to blend
+ if (!closed)
+ {
+ const int points_last = points_count - 1;
+ temp_points[0] = points[0] + temp_normals[0] * (half_inner_thickness + AA_SIZE);
+ temp_points[1] = points[0] + temp_normals[0] * (half_inner_thickness);
+ temp_points[2] = points[0] - temp_normals[0] * (half_inner_thickness);
+ temp_points[3] = points[0] - temp_normals[0] * (half_inner_thickness + AA_SIZE);
+ temp_points[points_last * 4 + 0] = points[points_last] + temp_normals[points_last] * (half_inner_thickness + AA_SIZE);
+ temp_points[points_last * 4 + 1] = points[points_last] + temp_normals[points_last] * (half_inner_thickness);
+ temp_points[points_last * 4 + 2] = points[points_last] - temp_normals[points_last] * (half_inner_thickness);
+ temp_points[points_last * 4 + 3] = points[points_last] - temp_normals[points_last] * (half_inner_thickness + AA_SIZE);
+ }
+
+ // Generate the indices to form a number of triangles for each line segment, and the vertices for the line edges
+ // This takes points n and n+1 and writes into n+1, with the first point in a closed line being generated from the final one (as n+1 wraps)
+ // FIXME-OPT: Merge the different loops, possibly remove the temporary buffer.
+ unsigned int idx1 = _VtxCurrentIdx; // Vertex index for start of line segment
+ for (int i1 = 0; i1 < count; i1++) // i1 is the first point of the line segment
+ {
+ const int i2 = (i1 + 1) == points_count ? 0 : (i1 + 1); // i2 is the second point of the line segment
+ const unsigned int idx2 = (i1 + 1) == points_count ? _VtxCurrentIdx : (idx1 + 4); // Vertex index for end of segment
+
+ // Average normals
+ float dm_x = (temp_normals[i1].x + temp_normals[i2].x) * 0.5f;
+ float dm_y = (temp_normals[i1].y + temp_normals[i2].y) * 0.5f;
+ IM_FIXNORMAL2F(dm_x, dm_y);
+ float dm_out_x = dm_x * (half_inner_thickness + AA_SIZE);
+ float dm_out_y = dm_y * (half_inner_thickness + AA_SIZE);
+ float dm_in_x = dm_x * half_inner_thickness;
+ float dm_in_y = dm_y * half_inner_thickness;
+
+ // Add temporary vertices
+ ImVec2* out_vtx = &temp_points[i2 * 4];
+ out_vtx[0].x = points[i2].x + dm_out_x;
+ out_vtx[0].y = points[i2].y + dm_out_y;
+ out_vtx[1].x = points[i2].x + dm_in_x;
+ out_vtx[1].y = points[i2].y + dm_in_y;
+ out_vtx[2].x = points[i2].x - dm_in_x;
+ out_vtx[2].y = points[i2].y - dm_in_y;
+ out_vtx[3].x = points[i2].x - dm_out_x;
+ out_vtx[3].y = points[i2].y - dm_out_y;
+
+ // Add indexes
+ _IdxWritePtr[0] = (ImDrawIdx)(idx2 + 1); _IdxWritePtr[1] = (ImDrawIdx)(idx1 + 1); _IdxWritePtr[2] = (ImDrawIdx)(idx1 + 2);
+ _IdxWritePtr[3] = (ImDrawIdx)(idx1 + 2); _IdxWritePtr[4] = (ImDrawIdx)(idx2 + 2); _IdxWritePtr[5] = (ImDrawIdx)(idx2 + 1);
+ _IdxWritePtr[6] = (ImDrawIdx)(idx2 + 1); _IdxWritePtr[7] = (ImDrawIdx)(idx1 + 1); _IdxWritePtr[8] = (ImDrawIdx)(idx1 + 0);
+ _IdxWritePtr[9] = (ImDrawIdx)(idx1 + 0); _IdxWritePtr[10] = (ImDrawIdx)(idx2 + 0); _IdxWritePtr[11] = (ImDrawIdx)(idx2 + 1);
+ _IdxWritePtr[12] = (ImDrawIdx)(idx2 + 2); _IdxWritePtr[13] = (ImDrawIdx)(idx1 + 2); _IdxWritePtr[14] = (ImDrawIdx)(idx1 + 3);
+ _IdxWritePtr[15] = (ImDrawIdx)(idx1 + 3); _IdxWritePtr[16] = (ImDrawIdx)(idx2 + 3); _IdxWritePtr[17] = (ImDrawIdx)(idx2 + 2);
+ _IdxWritePtr += 18;
+
+ idx1 = idx2;
+ }
+
+ // Add vertices
+ for (int i = 0; i < points_count; i++)
+ {
+ _VtxWritePtr[0].pos = temp_points[i * 4 + 0]; _VtxWritePtr[0].uv = opaque_uv; _VtxWritePtr[0].col = col_trans;
+ _VtxWritePtr[1].pos = temp_points[i * 4 + 1]; _VtxWritePtr[1].uv = opaque_uv; _VtxWritePtr[1].col = col;
+ _VtxWritePtr[2].pos = temp_points[i * 4 + 2]; _VtxWritePtr[2].uv = opaque_uv; _VtxWritePtr[2].col = col;
+ _VtxWritePtr[3].pos = temp_points[i * 4 + 3]; _VtxWritePtr[3].uv = opaque_uv; _VtxWritePtr[3].col = col_trans;
+ _VtxWritePtr += 4;
+ }
+ }
+ _VtxCurrentIdx += (ImDrawIdx)vtx_count;
+ }
+ else
+ {
+ // [PATH 4] Non texture-based, Non anti-aliased lines
+ const int idx_count = count * 6;
+ const int vtx_count = count * 4; // FIXME-OPT: Not sharing edges
+ PrimReserve(idx_count, vtx_count);
+
+ for (int i1 = 0; i1 < count; i1++)
+ {
+ const int i2 = (i1 + 1) == points_count ? 0 : i1 + 1;
+ const ImVec2& p1 = points[i1];
+ const ImVec2& p2 = points[i2];
+
+ float dx = p2.x - p1.x;
+ float dy = p2.y - p1.y;
+ IM_NORMALIZE2F_OVER_ZERO(dx, dy);
+ dx *= (thickness * 0.5f);
+ dy *= (thickness * 0.5f);
+
+ _VtxWritePtr[0].pos.x = p1.x + dy; _VtxWritePtr[0].pos.y = p1.y - dx; _VtxWritePtr[0].uv = opaque_uv; _VtxWritePtr[0].col = col;
+ _VtxWritePtr[1].pos.x = p2.x + dy; _VtxWritePtr[1].pos.y = p2.y - dx; _VtxWritePtr[1].uv = opaque_uv; _VtxWritePtr[1].col = col;
+ _VtxWritePtr[2].pos.x = p2.x - dy; _VtxWritePtr[2].pos.y = p2.y + dx; _VtxWritePtr[2].uv = opaque_uv; _VtxWritePtr[2].col = col;
+ _VtxWritePtr[3].pos.x = p1.x - dy; _VtxWritePtr[3].pos.y = p1.y + dx; _VtxWritePtr[3].uv = opaque_uv; _VtxWritePtr[3].col = col;
+ _VtxWritePtr += 4;
+
+ _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx + 1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx + 2);
+ _IdxWritePtr[3] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[4] = (ImDrawIdx)(_VtxCurrentIdx + 2); _IdxWritePtr[5] = (ImDrawIdx)(_VtxCurrentIdx + 3);
+ _IdxWritePtr += 6;
+ _VtxCurrentIdx += 4;
+ }
+ }
+}
+
+// - We intentionally avoid using ImVec2 and its math operators here to reduce cost to a minimum for debug/non-inlined builds.
+// - Filled shapes must always use clockwise winding order. The anti-aliasing fringe depends on it. Counter-clockwise shapes will have "inward" anti-aliasing.
+void ImDrawList::AddConvexPolyFilled(const ImVec2* points, const int points_count, ImU32 col)
+{
+ if (points_count < 3)
+ return;
+
+ const ImVec2 uv = _Data->TexUvWhitePixel;
+
+ if (Flags & ImDrawListFlags_AntiAliasedFill)
+ {
+ // Anti-aliased Fill
+ const float AA_SIZE = _FringeScale;
+ const ImU32 col_trans = col & ~IM_COL32_A_MASK;
+ const int idx_count = (points_count - 2)*3 + points_count * 6;
+ const int vtx_count = (points_count * 2);
+ PrimReserve(idx_count, vtx_count);
+
+ // Add indexes for fill
+ unsigned int vtx_inner_idx = _VtxCurrentIdx;
+ unsigned int vtx_outer_idx = _VtxCurrentIdx + 1;
+ for (int i = 2; i < points_count; i++)
+ {
+ _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx + ((i - 1) << 1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_inner_idx + (i << 1));
+ _IdxWritePtr += 3;
+ }
+
+ // Compute normals
+ ImVec2* temp_normals = (ImVec2*)alloca(points_count * sizeof(ImVec2)); //-V630
+ for (int i0 = points_count - 1, i1 = 0; i1 < points_count; i0 = i1++)
+ {
+ const ImVec2& p0 = points[i0];
+ const ImVec2& p1 = points[i1];
+ float dx = p1.x - p0.x;
+ float dy = p1.y - p0.y;
+ IM_NORMALIZE2F_OVER_ZERO(dx, dy);
+ temp_normals[i0].x = dy;
+ temp_normals[i0].y = -dx;
+ }
+
+ for (int i0 = points_count - 1, i1 = 0; i1 < points_count; i0 = i1++)
+ {
+ // Average normals
+ const ImVec2& n0 = temp_normals[i0];
+ const ImVec2& n1 = temp_normals[i1];
+ float dm_x = (n0.x + n1.x) * 0.5f;
+ float dm_y = (n0.y + n1.y) * 0.5f;
+ IM_FIXNORMAL2F(dm_x, dm_y);
+ dm_x *= AA_SIZE * 0.5f;
+ dm_y *= AA_SIZE * 0.5f;
+
+ // Add vertices
+ _VtxWritePtr[0].pos.x = (points[i1].x - dm_x); _VtxWritePtr[0].pos.y = (points[i1].y - dm_y); _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col; // Inner
+ _VtxWritePtr[1].pos.x = (points[i1].x + dm_x); _VtxWritePtr[1].pos.y = (points[i1].y + dm_y); _VtxWritePtr[1].uv = uv; _VtxWritePtr[1].col = col_trans; // Outer
+ _VtxWritePtr += 2;
+
+ // Add indexes for fringes
+ _IdxWritePtr[0] = (ImDrawIdx)(vtx_inner_idx + (i1 << 1)); _IdxWritePtr[1] = (ImDrawIdx)(vtx_inner_idx + (i0 << 1)); _IdxWritePtr[2] = (ImDrawIdx)(vtx_outer_idx + (i0 << 1));
+ _IdxWritePtr[3] = (ImDrawIdx)(vtx_outer_idx + (i0 << 1)); _IdxWritePtr[4] = (ImDrawIdx)(vtx_outer_idx + (i1 << 1)); _IdxWritePtr[5] = (ImDrawIdx)(vtx_inner_idx + (i1 << 1));
+ _IdxWritePtr += 6;
+ }
+ _VtxCurrentIdx += (ImDrawIdx)vtx_count;
+ }
+ else
+ {
+ // Non Anti-aliased Fill
+ const int idx_count = (points_count - 2)*3;
+ const int vtx_count = points_count;
+ PrimReserve(idx_count, vtx_count);
+ for (int i = 0; i < vtx_count; i++)
+ {
+ _VtxWritePtr[0].pos = points[i]; _VtxWritePtr[0].uv = uv; _VtxWritePtr[0].col = col;
+ _VtxWritePtr++;
+ }
+ for (int i = 2; i < points_count; i++)
+ {
+ _IdxWritePtr[0] = (ImDrawIdx)(_VtxCurrentIdx); _IdxWritePtr[1] = (ImDrawIdx)(_VtxCurrentIdx + i - 1); _IdxWritePtr[2] = (ImDrawIdx)(_VtxCurrentIdx + i);
+ _IdxWritePtr += 3;
+ }
+ _VtxCurrentIdx += (ImDrawIdx)vtx_count;
+ }
+}
+
+void ImDrawList::_PathArcToFastEx(const ImVec2& center, float radius, int a_min_sample, int a_max_sample, int a_step)
+{
+ if (radius < 0.5f)
+ {
+ _Path.push_back(center);
+ return;
+ }
+
+ // Calculate arc auto segment step size
+ if (a_step <= 0)
+ a_step = IM_DRAWLIST_ARCFAST_SAMPLE_MAX / _CalcCircleAutoSegmentCount(radius);
+
+ // Make sure we never do steps larger than one quarter of the circle
+ a_step = ImClamp(a_step, 1, IM_DRAWLIST_ARCFAST_TABLE_SIZE / 4);
+
+ const int sample_range = ImAbs(a_max_sample - a_min_sample);
+ const int a_next_step = a_step;
+
+ int samples = sample_range + 1;
+ bool extra_max_sample = false;
+ if (a_step > 1)
+ {
+ samples = sample_range / a_step + 1;
+ const int overstep = sample_range % a_step;
+
+ if (overstep > 0)
+ {
+ extra_max_sample = true;
+ samples++;
+
+ // When we have overstep to avoid awkwardly looking one long line and one tiny one at the end,
+ // distribute first step range evenly between them by reducing first step size.
+ if (sample_range > 0)
+ a_step -= (a_step - overstep) / 2;
+ }
+ }
+
+ _Path.resize(_Path.Size + samples);
+ ImVec2* out_ptr = _Path.Data + (_Path.Size - samples);
+
+ int sample_index = a_min_sample;
+ if (sample_index < 0 || sample_index >= IM_DRAWLIST_ARCFAST_SAMPLE_MAX)
+ {
+ sample_index = sample_index % IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
+ if (sample_index < 0)
+ sample_index += IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
+ }
+
+ if (a_max_sample >= a_min_sample)
+ {
+ for (int a = a_min_sample; a <= a_max_sample; a += a_step, sample_index += a_step, a_step = a_next_step)
+ {
+ // a_step is clamped to IM_DRAWLIST_ARCFAST_SAMPLE_MAX, so we have guaranteed that it will not wrap over range twice or more
+ if (sample_index >= IM_DRAWLIST_ARCFAST_SAMPLE_MAX)
+ sample_index -= IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
+
+ const ImVec2 s = _Data->ArcFastVtx[sample_index];
+ out_ptr->x = center.x + s.x * radius;
+ out_ptr->y = center.y + s.y * radius;
+ out_ptr++;
+ }
+ }
+ else
+ {
+ for (int a = a_min_sample; a >= a_max_sample; a -= a_step, sample_index -= a_step, a_step = a_next_step)
+ {
+ // a_step is clamped to IM_DRAWLIST_ARCFAST_SAMPLE_MAX, so we have guaranteed that it will not wrap over range twice or more
+ if (sample_index < 0)
+ sample_index += IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
+
+ const ImVec2 s = _Data->ArcFastVtx[sample_index];
+ out_ptr->x = center.x + s.x * radius;
+ out_ptr->y = center.y + s.y * radius;
+ out_ptr++;
+ }
+ }
+
+ if (extra_max_sample)
+ {
+ int normalized_max_sample = a_max_sample % IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
+ if (normalized_max_sample < 0)
+ normalized_max_sample += IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
+
+ const ImVec2 s = _Data->ArcFastVtx[normalized_max_sample];
+ out_ptr->x = center.x + s.x * radius;
+ out_ptr->y = center.y + s.y * radius;
+ out_ptr++;
+ }
+
+ IM_ASSERT_PARANOID(_Path.Data + _Path.Size == out_ptr);
+}
+
+void ImDrawList::_PathArcToN(const ImVec2& center, float radius, float a_min, float a_max, int num_segments)
+{
+ if (radius < 0.5f)
+ {
+ _Path.push_back(center);
+ return;
+ }
+
+ // Note that we are adding a point at both a_min and a_max.
+ // If you are trying to draw a full closed circle you don't want the overlapping points!
+ _Path.reserve(_Path.Size + (num_segments + 1));
+ for (int i = 0; i <= num_segments; i++)
+ {
+ const float a = a_min + ((float)i / (float)num_segments) * (a_max - a_min);
+ _Path.push_back(ImVec2(center.x + ImCos(a) * radius, center.y + ImSin(a) * radius));
+ }
+}
+
+// 0: East, 3: South, 6: West, 9: North, 12: East
+void ImDrawList::PathArcToFast(const ImVec2& center, float radius, int a_min_of_12, int a_max_of_12)
+{
+ if (radius < 0.5f)
+ {
+ _Path.push_back(center);
+ return;
+ }
+ _PathArcToFastEx(center, radius, a_min_of_12 * IM_DRAWLIST_ARCFAST_SAMPLE_MAX / 12, a_max_of_12 * IM_DRAWLIST_ARCFAST_SAMPLE_MAX / 12, 0);
+}
+
+void ImDrawList::PathArcTo(const ImVec2& center, float radius, float a_min, float a_max, int num_segments)
+{
+ if (radius < 0.5f)
+ {
+ _Path.push_back(center);
+ return;
+ }
+
+ if (num_segments > 0)
+ {
+ _PathArcToN(center, radius, a_min, a_max, num_segments);
+ return;
+ }
+
+ // Automatic segment count
+ if (radius <= _Data->ArcFastRadiusCutoff)
+ {
+ const bool a_is_reverse = a_max < a_min;
+
+ // We are going to use precomputed values for mid samples.
+ // Determine first and last sample in lookup table that belong to the arc.
+ const float a_min_sample_f = IM_DRAWLIST_ARCFAST_SAMPLE_MAX * a_min / (IM_PI * 2.0f);
+ const float a_max_sample_f = IM_DRAWLIST_ARCFAST_SAMPLE_MAX * a_max / (IM_PI * 2.0f);
+
+ const int a_min_sample = a_is_reverse ? (int)ImFloorSigned(a_min_sample_f) : (int)ImCeil(a_min_sample_f);
+ const int a_max_sample = a_is_reverse ? (int)ImCeil(a_max_sample_f) : (int)ImFloorSigned(a_max_sample_f);
+ const int a_mid_samples = a_is_reverse ? ImMax(a_min_sample - a_max_sample, 0) : ImMax(a_max_sample - a_min_sample, 0);
+
+ const float a_min_segment_angle = a_min_sample * IM_PI * 2.0f / IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
+ const float a_max_segment_angle = a_max_sample * IM_PI * 2.0f / IM_DRAWLIST_ARCFAST_SAMPLE_MAX;
+ const bool a_emit_start = ImAbs(a_min_segment_angle - a_min) >= 1e-5f;
+ const bool a_emit_end = ImAbs(a_max - a_max_segment_angle) >= 1e-5f;
+
+ _Path.reserve(_Path.Size + (a_mid_samples + 1 + (a_emit_start ? 1 : 0) + (a_emit_end ? 1 : 0)));
+ if (a_emit_start)
+ _Path.push_back(ImVec2(center.x + ImCos(a_min) * radius, center.y + ImSin(a_min) * radius));
+ if (a_mid_samples > 0)
+ _PathArcToFastEx(center, radius, a_min_sample, a_max_sample, 0);
+ if (a_emit_end)
+ _Path.push_back(ImVec2(center.x + ImCos(a_max) * radius, center.y + ImSin(a_max) * radius));
+ }
+ else
+ {
+ const float arc_length = ImAbs(a_max - a_min);
+ const int circle_segment_count = _CalcCircleAutoSegmentCount(radius);
+ const int arc_segment_count = ImMax((int)ImCeil(circle_segment_count * arc_length / (IM_PI * 2.0f)), (int)(2.0f * IM_PI / arc_length));
+ _PathArcToN(center, radius, a_min, a_max, arc_segment_count);
+ }
+}
+
+ImVec2 ImBezierCubicCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t)
+{
+ float u = 1.0f - t;
+ float w1 = u * u * u;
+ float w2 = 3 * u * u * t;
+ float w3 = 3 * u * t * t;
+ float w4 = t * t * t;
+ return ImVec2(w1 * p1.x + w2 * p2.x + w3 * p3.x + w4 * p4.x, w1 * p1.y + w2 * p2.y + w3 * p3.y + w4 * p4.y);
+}
+
+ImVec2 ImBezierQuadraticCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, float t)
+{
+ float u = 1.0f - t;
+ float w1 = u * u;
+ float w2 = 2 * u * t;
+ float w3 = t * t;
+ return ImVec2(w1 * p1.x + w2 * p2.x + w3 * p3.x, w1 * p1.y + w2 * p2.y + w3 * p3.y);
+}
+
+// Closely mimics ImBezierCubicClosestPointCasteljau() in imgui.cpp
+static void PathBezierCubicCurveToCasteljau(ImVector<ImVec2>* path, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float tess_tol, int level)
+{
+ float dx = x4 - x1;
+ float dy = y4 - y1;
+ float d2 = (x2 - x4) * dy - (y2 - y4) * dx;
+ float d3 = (x3 - x4) * dy - (y3 - y4) * dx;
+ d2 = (d2 >= 0) ? d2 : -d2;
+ d3 = (d3 >= 0) ? d3 : -d3;
+ if ((d2 + d3) * (d2 + d3) < tess_tol * (dx * dx + dy * dy))
+ {
+ path->push_back(ImVec2(x4, y4));
+ }
+ else if (level < 10)
+ {
+ float x12 = (x1 + x2) * 0.5f, y12 = (y1 + y2) * 0.5f;
+ float x23 = (x2 + x3) * 0.5f, y23 = (y2 + y3) * 0.5f;
+ float x34 = (x3 + x4) * 0.5f, y34 = (y3 + y4) * 0.5f;
+ float x123 = (x12 + x23) * 0.5f, y123 = (y12 + y23) * 0.5f;
+ float x234 = (x23 + x34) * 0.5f, y234 = (y23 + y34) * 0.5f;
+ float x1234 = (x123 + x234) * 0.5f, y1234 = (y123 + y234) * 0.5f;
+ PathBezierCubicCurveToCasteljau(path, x1, y1, x12, y12, x123, y123, x1234, y1234, tess_tol, level + 1);
+ PathBezierCubicCurveToCasteljau(path, x1234, y1234, x234, y234, x34, y34, x4, y4, tess_tol, level + 1);
+ }
+}
+
+static void PathBezierQuadraticCurveToCasteljau(ImVector<ImVec2>* path, float x1, float y1, float x2, float y2, float x3, float y3, float tess_tol, int level)
+{
+ float dx = x3 - x1, dy = y3 - y1;
+ float det = (x2 - x3) * dy - (y2 - y3) * dx;
+ if (det * det * 4.0f < tess_tol * (dx * dx + dy * dy))
+ {
+ path->push_back(ImVec2(x3, y3));
+ }
+ else if (level < 10)
+ {
+ float x12 = (x1 + x2) * 0.5f, y12 = (y1 + y2) * 0.5f;
+ float x23 = (x2 + x3) * 0.5f, y23 = (y2 + y3) * 0.5f;
+ float x123 = (x12 + x23) * 0.5f, y123 = (y12 + y23) * 0.5f;
+ PathBezierQuadraticCurveToCasteljau(path, x1, y1, x12, y12, x123, y123, tess_tol, level + 1);
+ PathBezierQuadraticCurveToCasteljau(path, x123, y123, x23, y23, x3, y3, tess_tol, level + 1);
+ }
+}
+
+void ImDrawList::PathBezierCubicCurveTo(const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, int num_segments)
+{
+ ImVec2 p1 = _Path.back();
+ if (num_segments == 0)
+ {
+ PathBezierCubicCurveToCasteljau(&_Path, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, p4.x, p4.y, _Data->CurveTessellationTol, 0); // Auto-tessellated
+ }
+ else
+ {
+ float t_step = 1.0f / (float)num_segments;
+ for (int i_step = 1; i_step <= num_segments; i_step++)
+ _Path.push_back(ImBezierCubicCalc(p1, p2, p3, p4, t_step * i_step));
+ }
+}
+
+void ImDrawList::PathBezierQuadraticCurveTo(const ImVec2& p2, const ImVec2& p3, int num_segments)
+{
+ ImVec2 p1 = _Path.back();
+ if (num_segments == 0)
+ {
+ PathBezierQuadraticCurveToCasteljau(&_Path, p1.x, p1.y, p2.x, p2.y, p3.x, p3.y, _Data->CurveTessellationTol, 0);// Auto-tessellated
+ }
+ else
+ {
+ float t_step = 1.0f / (float)num_segments;
+ for (int i_step = 1; i_step <= num_segments; i_step++)
+ _Path.push_back(ImBezierQuadraticCalc(p1, p2, p3, t_step * i_step));
+ }
+}
+
+IM_STATIC_ASSERT(ImDrawFlags_RoundCornersTopLeft == (1 << 4));
+static inline ImDrawFlags FixRectCornerFlags(ImDrawFlags flags)
+{
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ // Legacy Support for hard coded ~0 (used to be a suggested equivalent to ImDrawCornerFlags_All)
+ // ~0 --> ImDrawFlags_RoundCornersAll or 0
+ if (flags == ~0)
+ return ImDrawFlags_RoundCornersAll;
+
+ // Legacy Support for hard coded 0x01 to 0x0F (matching 15 out of 16 old flags combinations)
+ // 0x01 --> ImDrawFlags_RoundCornersTopLeft (VALUE 0x01 OVERLAPS ImDrawFlags_Closed but ImDrawFlags_Closed is never valid in this path!)
+ // 0x02 --> ImDrawFlags_RoundCornersTopRight
+ // 0x03 --> ImDrawFlags_RoundCornersTopLeft | ImDrawFlags_RoundCornersTopRight
+ // 0x04 --> ImDrawFlags_RoundCornersBotLeft
+ // 0x05 --> ImDrawFlags_RoundCornersTopLeft | ImDrawFlags_RoundCornersBotLeft
+ // ...
+ // 0x0F --> ImDrawFlags_RoundCornersAll or 0
+ // (See all values in ImDrawCornerFlags_)
+ if (flags >= 0x01 && flags <= 0x0F)
+ return (flags << 4);
+
+ // We cannot support hard coded 0x00 with 'float rounding > 0.0f' --> replace with ImDrawFlags_RoundCornersNone or use 'float rounding = 0.0f'
+#endif
+
+ // If this triggers, please update your code replacing hardcoded values with new ImDrawFlags_RoundCorners* values.
+ // Note that ImDrawFlags_Closed (== 0x01) is an invalid flag for AddRect(), AddRectFilled(), PathRect() etc...
+ IM_ASSERT((flags & 0x0F) == 0 && "Misuse of legacy hardcoded ImDrawCornerFlags values!");
+
+ if ((flags & ImDrawFlags_RoundCornersMask_) == 0)
+ flags |= ImDrawFlags_RoundCornersAll;
+
+ return flags;
+}
+
+void ImDrawList::PathRect(const ImVec2& a, const ImVec2& b, float rounding, ImDrawFlags flags)
+{
+ flags = FixRectCornerFlags(flags);
+ rounding = ImMin(rounding, ImFabs(b.x - a.x) * ( ((flags & ImDrawFlags_RoundCornersTop) == ImDrawFlags_RoundCornersTop) || ((flags & ImDrawFlags_RoundCornersBottom) == ImDrawFlags_RoundCornersBottom) ? 0.5f : 1.0f ) - 1.0f);
+ rounding = ImMin(rounding, ImFabs(b.y - a.y) * ( ((flags & ImDrawFlags_RoundCornersLeft) == ImDrawFlags_RoundCornersLeft) || ((flags & ImDrawFlags_RoundCornersRight) == ImDrawFlags_RoundCornersRight) ? 0.5f : 1.0f ) - 1.0f);
+
+ if (rounding < 0.5f || (flags & ImDrawFlags_RoundCornersMask_) == ImDrawFlags_RoundCornersNone)
+ {
+ PathLineTo(a);
+ PathLineTo(ImVec2(b.x, a.y));
+ PathLineTo(b);
+ PathLineTo(ImVec2(a.x, b.y));
+ }
+ else
+ {
+ const float rounding_tl = (flags & ImDrawFlags_RoundCornersTopLeft) ? rounding : 0.0f;
+ const float rounding_tr = (flags & ImDrawFlags_RoundCornersTopRight) ? rounding : 0.0f;
+ const float rounding_br = (flags & ImDrawFlags_RoundCornersBottomRight) ? rounding : 0.0f;
+ const float rounding_bl = (flags & ImDrawFlags_RoundCornersBottomLeft) ? rounding : 0.0f;
+ PathArcToFast(ImVec2(a.x + rounding_tl, a.y + rounding_tl), rounding_tl, 6, 9);
+ PathArcToFast(ImVec2(b.x - rounding_tr, a.y + rounding_tr), rounding_tr, 9, 12);
+ PathArcToFast(ImVec2(b.x - rounding_br, b.y - rounding_br), rounding_br, 0, 3);
+ PathArcToFast(ImVec2(a.x + rounding_bl, b.y - rounding_bl), rounding_bl, 3, 6);
+ }
+}
+
+void ImDrawList::AddLine(const ImVec2& p1, const ImVec2& p2, ImU32 col, float thickness)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+ PathLineTo(p1 + ImVec2(0.5f, 0.5f));
+ PathLineTo(p2 + ImVec2(0.5f, 0.5f));
+ PathStroke(col, 0, thickness);
+}
+
+// p_min = upper-left, p_max = lower-right
+// Note we don't render 1 pixels sized rectangles properly.
+void ImDrawList::AddRect(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding, ImDrawFlags flags, float thickness)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+ if (Flags & ImDrawListFlags_AntiAliasedLines)
+ PathRect(p_min + ImVec2(0.50f, 0.50f), p_max - ImVec2(0.50f, 0.50f), rounding, flags);
+ else
+ PathRect(p_min + ImVec2(0.50f, 0.50f), p_max - ImVec2(0.49f, 0.49f), rounding, flags); // Better looking lower-right corner and rounded non-AA shapes.
+ PathStroke(col, ImDrawFlags_Closed, thickness);
+}
+
+void ImDrawList::AddRectFilled(const ImVec2& p_min, const ImVec2& p_max, ImU32 col, float rounding, ImDrawFlags flags)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+ if (rounding < 0.5f || (flags & ImDrawFlags_RoundCornersMask_) == ImDrawFlags_RoundCornersNone)
+ {
+ PrimReserve(6, 4);
+ PrimRect(p_min, p_max, col);
+ }
+ else
+ {
+ PathRect(p_min, p_max, rounding, flags);
+ PathFillConvex(col);
+ }
+}
+
+// p_min = upper-left, p_max = lower-right
+void ImDrawList::AddRectFilledMultiColor(const ImVec2& p_min, const ImVec2& p_max, ImU32 col_upr_left, ImU32 col_upr_right, ImU32 col_bot_right, ImU32 col_bot_left)
+{
+ if (((col_upr_left | col_upr_right | col_bot_right | col_bot_left) & IM_COL32_A_MASK) == 0)
+ return;
+
+ const ImVec2 uv = _Data->TexUvWhitePixel;
+ PrimReserve(6, 4);
+ PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 1)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2));
+ PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 2)); PrimWriteIdx((ImDrawIdx)(_VtxCurrentIdx + 3));
+ PrimWriteVtx(p_min, uv, col_upr_left);
+ PrimWriteVtx(ImVec2(p_max.x, p_min.y), uv, col_upr_right);
+ PrimWriteVtx(p_max, uv, col_bot_right);
+ PrimWriteVtx(ImVec2(p_min.x, p_max.y), uv, col_bot_left);
+}
+
+void ImDrawList::AddQuad(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ PathLineTo(p1);
+ PathLineTo(p2);
+ PathLineTo(p3);
+ PathLineTo(p4);
+ PathStroke(col, ImDrawFlags_Closed, thickness);
+}
+
+void ImDrawList::AddQuadFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ PathLineTo(p1);
+ PathLineTo(p2);
+ PathLineTo(p3);
+ PathLineTo(p4);
+ PathFillConvex(col);
+}
+
+void ImDrawList::AddTriangle(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ PathLineTo(p1);
+ PathLineTo(p2);
+ PathLineTo(p3);
+ PathStroke(col, ImDrawFlags_Closed, thickness);
+}
+
+void ImDrawList::AddTriangleFilled(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ PathLineTo(p1);
+ PathLineTo(p2);
+ PathLineTo(p3);
+ PathFillConvex(col);
+}
+
+void ImDrawList::AddCircle(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness)
+{
+ if ((col & IM_COL32_A_MASK) == 0 || radius < 0.5f)
+ return;
+
+ if (num_segments <= 0)
+ {
+ // Use arc with automatic segment count
+ _PathArcToFastEx(center, radius - 0.5f, 0, IM_DRAWLIST_ARCFAST_SAMPLE_MAX, 0);
+ _Path.Size--;
+ }
+ else
+ {
+ // Explicit segment count (still clamp to avoid drawing insanely tessellated shapes)
+ num_segments = ImClamp(num_segments, 3, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX);
+
+ // Because we are filling a closed shape we remove 1 from the count of segments/points
+ const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
+ PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
+ }
+
+ PathStroke(col, ImDrawFlags_Closed, thickness);
+}
+
+void ImDrawList::AddCircleFilled(const ImVec2& center, float radius, ImU32 col, int num_segments)
+{
+ if ((col & IM_COL32_A_MASK) == 0 || radius < 0.5f)
+ return;
+
+ if (num_segments <= 0)
+ {
+ // Use arc with automatic segment count
+ _PathArcToFastEx(center, radius, 0, IM_DRAWLIST_ARCFAST_SAMPLE_MAX, 0);
+ _Path.Size--;
+ }
+ else
+ {
+ // Explicit segment count (still clamp to avoid drawing insanely tessellated shapes)
+ num_segments = ImClamp(num_segments, 3, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX);
+
+ // Because we are filling a closed shape we remove 1 from the count of segments/points
+ const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
+ PathArcTo(center, radius, 0.0f, a_max, num_segments - 1);
+ }
+
+ PathFillConvex(col);
+}
+
+// Guaranteed to honor 'num_segments'
+void ImDrawList::AddNgon(const ImVec2& center, float radius, ImU32 col, int num_segments, float thickness)
+{
+ if ((col & IM_COL32_A_MASK) == 0 || num_segments <= 2)
+ return;
+
+ // Because we are filling a closed shape we remove 1 from the count of segments/points
+ const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
+ PathArcTo(center, radius - 0.5f, 0.0f, a_max, num_segments - 1);
+ PathStroke(col, ImDrawFlags_Closed, thickness);
+}
+
+// Guaranteed to honor 'num_segments'
+void ImDrawList::AddNgonFilled(const ImVec2& center, float radius, ImU32 col, int num_segments)
+{
+ if ((col & IM_COL32_A_MASK) == 0 || num_segments <= 2)
+ return;
+
+ // Because we are filling a closed shape we remove 1 from the count of segments/points
+ const float a_max = (IM_PI * 2.0f) * ((float)num_segments - 1.0f) / (float)num_segments;
+ PathArcTo(center, radius, 0.0f, a_max, num_segments - 1);
+ PathFillConvex(col);
+}
+
+// Cubic Bezier takes 4 controls points
+void ImDrawList::AddBezierCubic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, ImU32 col, float thickness, int num_segments)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ PathLineTo(p1);
+ PathBezierCubicCurveTo(p2, p3, p4, num_segments);
+ PathStroke(col, 0, thickness);
+}
+
+// Quadratic Bezier takes 3 controls points
+void ImDrawList::AddBezierQuadratic(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, ImU32 col, float thickness, int num_segments)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ PathLineTo(p1);
+ PathBezierQuadraticCurveTo(p2, p3, num_segments);
+ PathStroke(col, 0, thickness);
+}
+
+void ImDrawList::AddText(const ImFont* font, float font_size, const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end, float wrap_width, const ImVec4* cpu_fine_clip_rect)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ if (text_end == NULL)
+ text_end = text_begin + strlen(text_begin);
+ if (text_begin == text_end)
+ return;
+
+ // Pull default font/size from the shared ImDrawListSharedData instance
+ if (font == NULL)
+ font = _Data->Font;
+ if (font_size == 0.0f)
+ font_size = _Data->FontSize;
+
+ IM_ASSERT(font->ContainerAtlas->TexID == _CmdHeader.TextureId); // Use high-level ImGui::PushFont() or low-level ImDrawList::PushTextureId() to change font.
+
+ ImVec4 clip_rect = _CmdHeader.ClipRect;
+ if (cpu_fine_clip_rect)
+ {
+ clip_rect.x = ImMax(clip_rect.x, cpu_fine_clip_rect->x);
+ clip_rect.y = ImMax(clip_rect.y, cpu_fine_clip_rect->y);
+ clip_rect.z = ImMin(clip_rect.z, cpu_fine_clip_rect->z);
+ clip_rect.w = ImMin(clip_rect.w, cpu_fine_clip_rect->w);
+ }
+ font->RenderText(this, font_size, pos, col, clip_rect, text_begin, text_end, wrap_width, cpu_fine_clip_rect != NULL);
+}
+
+void ImDrawList::AddText(const ImVec2& pos, ImU32 col, const char* text_begin, const char* text_end)
+{
+ AddText(NULL, 0.0f, pos, col, text_begin, text_end);
+}
+
+void ImDrawList::AddImage(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ const bool push_texture_id = user_texture_id != _CmdHeader.TextureId;
+ if (push_texture_id)
+ PushTextureID(user_texture_id);
+
+ PrimReserve(6, 4);
+ PrimRectUV(p_min, p_max, uv_min, uv_max, col);
+
+ if (push_texture_id)
+ PopTextureID();
+}
+
+void ImDrawList::AddImageQuad(ImTextureID user_texture_id, const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& uv1, const ImVec2& uv2, const ImVec2& uv3, const ImVec2& uv4, ImU32 col)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ const bool push_texture_id = user_texture_id != _CmdHeader.TextureId;
+ if (push_texture_id)
+ PushTextureID(user_texture_id);
+
+ PrimReserve(6, 4);
+ PrimQuadUV(p1, p2, p3, p4, uv1, uv2, uv3, uv4, col);
+
+ if (push_texture_id)
+ PopTextureID();
+}
+
+void ImDrawList::AddImageRounded(ImTextureID user_texture_id, const ImVec2& p_min, const ImVec2& p_max, const ImVec2& uv_min, const ImVec2& uv_max, ImU32 col, float rounding, ImDrawFlags flags)
+{
+ if ((col & IM_COL32_A_MASK) == 0)
+ return;
+
+ flags = FixRectCornerFlags(flags);
+ if (rounding < 0.5f || (flags & ImDrawFlags_RoundCornersMask_) == ImDrawFlags_RoundCornersNone)
+ {
+ AddImage(user_texture_id, p_min, p_max, uv_min, uv_max, col);
+ return;
+ }
+
+ const bool push_texture_id = user_texture_id != _CmdHeader.TextureId;
+ if (push_texture_id)
+ PushTextureID(user_texture_id);
+
+ int vert_start_idx = VtxBuffer.Size;
+ PathRect(p_min, p_max, rounding, flags);
+ PathFillConvex(col);
+ int vert_end_idx = VtxBuffer.Size;
+ ImGui::ShadeVertsLinearUV(this, vert_start_idx, vert_end_idx, p_min, p_max, uv_min, uv_max, true);
+
+ if (push_texture_id)
+ PopTextureID();
+}
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImDrawListSplitter
+//-----------------------------------------------------------------------------
+// FIXME: This may be a little confusing, trying to be a little too low-level/optimal instead of just doing vector swap..
+//-----------------------------------------------------------------------------
+
+void ImDrawListSplitter::ClearFreeMemory()
+{
+ for (int i = 0; i < _Channels.Size; i++)
+ {
+ if (i == _Current)
+ memset(&_Channels[i], 0, sizeof(_Channels[i])); // Current channel is a copy of CmdBuffer/IdxBuffer, don't destruct again
+ _Channels[i]._CmdBuffer.clear();
+ _Channels[i]._IdxBuffer.clear();
+ }
+ _Current = 0;
+ _Count = 1;
+ _Channels.clear();
+}
+
+void ImDrawListSplitter::Split(ImDrawList* draw_list, int channels_count)
+{
+ IM_UNUSED(draw_list);
+ IM_ASSERT(_Current == 0 && _Count <= 1 && "Nested channel splitting is not supported. Please use separate instances of ImDrawListSplitter.");
+ int old_channels_count = _Channels.Size;
+ if (old_channels_count < channels_count)
+ {
+ _Channels.reserve(channels_count); // Avoid over reserving since this is likely to stay stable
+ _Channels.resize(channels_count);
+ }
+ _Count = channels_count;
+
+ // Channels[] (24/32 bytes each) hold storage that we'll swap with draw_list->_CmdBuffer/_IdxBuffer
+ // The content of Channels[0] at this point doesn't matter. We clear it to make state tidy in a debugger but we don't strictly need to.
+ // When we switch to the next channel, we'll copy draw_list->_CmdBuffer/_IdxBuffer into Channels[0] and then Channels[1] into draw_list->CmdBuffer/_IdxBuffer
+ memset(&_Channels[0], 0, sizeof(ImDrawChannel));
+ for (int i = 1; i < channels_count; i++)
+ {
+ if (i >= old_channels_count)
+ {
+ IM_PLACEMENT_NEW(&_Channels[i]) ImDrawChannel();
+ }
+ else
+ {
+ _Channels[i]._CmdBuffer.resize(0);
+ _Channels[i]._IdxBuffer.resize(0);
+ }
+ }
+}
+
+void ImDrawListSplitter::Merge(ImDrawList* draw_list)
+{
+ // Note that we never use or rely on _Channels.Size because it is merely a buffer that we never shrink back to 0 to keep all sub-buffers ready for use.
+ if (_Count <= 1)
+ return;
+
+ SetCurrentChannel(draw_list, 0);
+ draw_list->_PopUnusedDrawCmd();
+
+ // Calculate our final buffer sizes. Also fix the incorrect IdxOffset values in each command.
+ int new_cmd_buffer_count = 0;
+ int new_idx_buffer_count = 0;
+ ImDrawCmd* last_cmd = (_Count > 0 && draw_list->CmdBuffer.Size > 0) ? &draw_list->CmdBuffer.back() : NULL;
+ int idx_offset = last_cmd ? last_cmd->IdxOffset + last_cmd->ElemCount : 0;
+ for (int i = 1; i < _Count; i++)
+ {
+ ImDrawChannel& ch = _Channels[i];
+ if (ch._CmdBuffer.Size > 0 && ch._CmdBuffer.back().ElemCount == 0 && ch._CmdBuffer.back().UserCallback == NULL) // Equivalent of PopUnusedDrawCmd()
+ ch._CmdBuffer.pop_back();
+
+ if (ch._CmdBuffer.Size > 0 && last_cmd != NULL)
+ {
+ // Do not include ImDrawCmd_AreSequentialIdxOffset() in the compare as we rebuild IdxOffset values ourselves.
+ // Manipulating IdxOffset (e.g. by reordering draw commands like done by RenderDimmedBackgroundBehindWindow()) is not supported within a splitter.
+ ImDrawCmd* next_cmd = &ch._CmdBuffer[0];
+ if (ImDrawCmd_HeaderCompare(last_cmd, next_cmd) == 0 && last_cmd->UserCallback == NULL && next_cmd->UserCallback == NULL)
+ {
+ // Merge previous channel last draw command with current channel first draw command if matching.
+ last_cmd->ElemCount += next_cmd->ElemCount;
+ idx_offset += next_cmd->ElemCount;
+ ch._CmdBuffer.erase(ch._CmdBuffer.Data); // FIXME-OPT: Improve for multiple merges.
+ }
+ }
+ if (ch._CmdBuffer.Size > 0)
+ last_cmd = &ch._CmdBuffer.back();
+ new_cmd_buffer_count += ch._CmdBuffer.Size;
+ new_idx_buffer_count += ch._IdxBuffer.Size;
+ for (int cmd_n = 0; cmd_n < ch._CmdBuffer.Size; cmd_n++)
+ {
+ ch._CmdBuffer.Data[cmd_n].IdxOffset = idx_offset;
+ idx_offset += ch._CmdBuffer.Data[cmd_n].ElemCount;
+ }
+ }
+ draw_list->CmdBuffer.resize(draw_list->CmdBuffer.Size + new_cmd_buffer_count);
+ draw_list->IdxBuffer.resize(draw_list->IdxBuffer.Size + new_idx_buffer_count);
+
+ // Write commands and indices in order (they are fairly small structures, we don't copy vertices only indices)
+ ImDrawCmd* cmd_write = draw_list->CmdBuffer.Data + draw_list->CmdBuffer.Size - new_cmd_buffer_count;
+ ImDrawIdx* idx_write = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size - new_idx_buffer_count;
+ for (int i = 1; i < _Count; i++)
+ {
+ ImDrawChannel& ch = _Channels[i];
+ if (int sz = ch._CmdBuffer.Size) { memcpy(cmd_write, ch._CmdBuffer.Data, sz * sizeof(ImDrawCmd)); cmd_write += sz; }
+ if (int sz = ch._IdxBuffer.Size) { memcpy(idx_write, ch._IdxBuffer.Data, sz * sizeof(ImDrawIdx)); idx_write += sz; }
+ }
+ draw_list->_IdxWritePtr = idx_write;
+
+ // Ensure there's always a non-callback draw command trailing the command-buffer
+ if (draw_list->CmdBuffer.Size == 0 || draw_list->CmdBuffer.back().UserCallback != NULL)
+ draw_list->AddDrawCmd();
+
+ // If current command is used with different settings we need to add a new command
+ ImDrawCmd* curr_cmd = &draw_list->CmdBuffer.Data[draw_list->CmdBuffer.Size - 1];
+ if (curr_cmd->ElemCount == 0)
+ ImDrawCmd_HeaderCopy(curr_cmd, &draw_list->_CmdHeader); // Copy ClipRect, TextureId, VtxOffset
+ else if (ImDrawCmd_HeaderCompare(curr_cmd, &draw_list->_CmdHeader) != 0)
+ draw_list->AddDrawCmd();
+
+ _Count = 1;
+}
+
+void ImDrawListSplitter::SetCurrentChannel(ImDrawList* draw_list, int idx)
+{
+ IM_ASSERT(idx >= 0 && idx < _Count);
+ if (_Current == idx)
+ return;
+
+ // Overwrite ImVector (12/16 bytes), four times. This is merely a silly optimization instead of doing .swap()
+ memcpy(&_Channels.Data[_Current]._CmdBuffer, &draw_list->CmdBuffer, sizeof(draw_list->CmdBuffer));
+ memcpy(&_Channels.Data[_Current]._IdxBuffer, &draw_list->IdxBuffer, sizeof(draw_list->IdxBuffer));
+ _Current = idx;
+ memcpy(&draw_list->CmdBuffer, &_Channels.Data[idx]._CmdBuffer, sizeof(draw_list->CmdBuffer));
+ memcpy(&draw_list->IdxBuffer, &_Channels.Data[idx]._IdxBuffer, sizeof(draw_list->IdxBuffer));
+ draw_list->_IdxWritePtr = draw_list->IdxBuffer.Data + draw_list->IdxBuffer.Size;
+
+ // If current command is used with different settings we need to add a new command
+ ImDrawCmd* curr_cmd = (draw_list->CmdBuffer.Size == 0) ? NULL : &draw_list->CmdBuffer.Data[draw_list->CmdBuffer.Size - 1];
+ if (curr_cmd == NULL)
+ draw_list->AddDrawCmd();
+ else if (curr_cmd->ElemCount == 0)
+ ImDrawCmd_HeaderCopy(curr_cmd, &draw_list->_CmdHeader); // Copy ClipRect, TextureId, VtxOffset
+ else if (ImDrawCmd_HeaderCompare(curr_cmd, &draw_list->_CmdHeader) != 0)
+ draw_list->AddDrawCmd();
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImDrawData
+//-----------------------------------------------------------------------------
+
+// For backward compatibility: convert all buffers from indexed to de-indexed, in case you cannot render indexed. Note: this is slow and most likely a waste of resources. Always prefer indexed rendering!
+void ImDrawData::DeIndexAllBuffers()
+{
+ ImVector<ImDrawVert> new_vtx_buffer;
+ TotalVtxCount = TotalIdxCount = 0;
+ for (int i = 0; i < CmdListsCount; i++)
+ {
+ ImDrawList* cmd_list = CmdLists[i];
+ if (cmd_list->IdxBuffer.empty())
+ continue;
+ new_vtx_buffer.resize(cmd_list->IdxBuffer.Size);
+ for (int j = 0; j < cmd_list->IdxBuffer.Size; j++)
+ new_vtx_buffer[j] = cmd_list->VtxBuffer[cmd_list->IdxBuffer[j]];
+ cmd_list->VtxBuffer.swap(new_vtx_buffer);
+ cmd_list->IdxBuffer.resize(0);
+ TotalVtxCount += cmd_list->VtxBuffer.Size;
+ }
+}
+
+// Helper to scale the ClipRect field of each ImDrawCmd.
+// Use if your final output buffer is at a different scale than draw_data->DisplaySize,
+// or if there is a difference between your window resolution and framebuffer resolution.
+void ImDrawData::ScaleClipRects(const ImVec2& fb_scale)
+{
+ for (int i = 0; i < CmdListsCount; i++)
+ {
+ ImDrawList* cmd_list = CmdLists[i];
+ for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
+ {
+ ImDrawCmd* cmd = &cmd_list->CmdBuffer[cmd_i];
+ cmd->ClipRect = ImVec4(cmd->ClipRect.x * fb_scale.x, cmd->ClipRect.y * fb_scale.y, cmd->ClipRect.z * fb_scale.x, cmd->ClipRect.w * fb_scale.y);
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Helpers ShadeVertsXXX functions
+//-----------------------------------------------------------------------------
+
+// Generic linear color gradient, write to RGB fields, leave A untouched.
+void ImGui::ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1)
+{
+ ImVec2 gradient_extent = gradient_p1 - gradient_p0;
+ float gradient_inv_length2 = 1.0f / ImLengthSqr(gradient_extent);
+ ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx;
+ ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx;
+ const int col0_r = (int)(col0 >> IM_COL32_R_SHIFT) & 0xFF;
+ const int col0_g = (int)(col0 >> IM_COL32_G_SHIFT) & 0xFF;
+ const int col0_b = (int)(col0 >> IM_COL32_B_SHIFT) & 0xFF;
+ const int col_delta_r = ((int)(col1 >> IM_COL32_R_SHIFT) & 0xFF) - col0_r;
+ const int col_delta_g = ((int)(col1 >> IM_COL32_G_SHIFT) & 0xFF) - col0_g;
+ const int col_delta_b = ((int)(col1 >> IM_COL32_B_SHIFT) & 0xFF) - col0_b;
+ for (ImDrawVert* vert = vert_start; vert < vert_end; vert++)
+ {
+ float d = ImDot(vert->pos - gradient_p0, gradient_extent);
+ float t = ImClamp(d * gradient_inv_length2, 0.0f, 1.0f);
+ int r = (int)(col0_r + col_delta_r * t);
+ int g = (int)(col0_g + col_delta_g * t);
+ int b = (int)(col0_b + col_delta_b * t);
+ vert->col = (r << IM_COL32_R_SHIFT) | (g << IM_COL32_G_SHIFT) | (b << IM_COL32_B_SHIFT) | (vert->col & IM_COL32_A_MASK);
+ }
+}
+
+// Distribute UV over (a, b) rectangle
+void ImGui::ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp)
+{
+ const ImVec2 size = b - a;
+ const ImVec2 uv_size = uv_b - uv_a;
+ const ImVec2 scale = ImVec2(
+ size.x != 0.0f ? (uv_size.x / size.x) : 0.0f,
+ size.y != 0.0f ? (uv_size.y / size.y) : 0.0f);
+
+ ImDrawVert* vert_start = draw_list->VtxBuffer.Data + vert_start_idx;
+ ImDrawVert* vert_end = draw_list->VtxBuffer.Data + vert_end_idx;
+ if (clamp)
+ {
+ const ImVec2 min = ImMin(uv_a, uv_b);
+ const ImVec2 max = ImMax(uv_a, uv_b);
+ for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex)
+ vertex->uv = ImClamp(uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale), min, max);
+ }
+ else
+ {
+ for (ImDrawVert* vertex = vert_start; vertex < vert_end; ++vertex)
+ vertex->uv = uv_a + ImMul(ImVec2(vertex->pos.x, vertex->pos.y) - a, scale);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImFontConfig
+//-----------------------------------------------------------------------------
+
+ImFontConfig::ImFontConfig()
+{
+ memset(this, 0, sizeof(*this));
+ FontDataOwnedByAtlas = true;
+ OversampleH = 3; // FIXME: 2 may be a better default?
+ OversampleV = 1;
+ GlyphMaxAdvanceX = FLT_MAX;
+ RasterizerMultiply = 1.0f;
+ EllipsisChar = (ImWchar)-1;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImFontAtlas
+//-----------------------------------------------------------------------------
+
+// A work of art lies ahead! (. = white layer, X = black layer, others are blank)
+// The 2x2 white texels on the top left are the ones we'll use everywhere in Dear ImGui to render filled shapes.
+// (This is used when io.MouseDrawCursor = true)
+const int FONT_ATLAS_DEFAULT_TEX_DATA_W = 122; // Actual texture will be 2 times that + 1 spacing.
+const int FONT_ATLAS_DEFAULT_TEX_DATA_H = 27;
+static const char FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS[FONT_ATLAS_DEFAULT_TEX_DATA_W * FONT_ATLAS_DEFAULT_TEX_DATA_H + 1] =
+{
+ "..- -XXXXXXX- X - X -XXXXXXX - XXXXXXX- XX - XX XX "
+ "..- -X.....X- X.X - X.X -X.....X - X.....X- X..X -X..X X..X"
+ "--- -XXX.XXX- X...X - X...X -X....X - X....X- X..X -X...X X...X"
+ "X - X.X - X.....X - X.....X -X...X - X...X- X..X - X...X X...X "
+ "XX - X.X -X.......X- X.......X -X..X.X - X.X..X- X..X - X...X...X "
+ "X.X - X.X -XXXX.XXXX- XXXX.XXXX -X.X X.X - X.X X.X- X..XXX - X.....X "
+ "X..X - X.X - X.X - X.X -XX X.X - X.X XX- X..X..XXX - X...X "
+ "X...X - X.X - X.X - XX X.X XX - X.X - X.X - X..X..X..XX - X.X "
+ "X....X - X.X - X.X - X.X X.X X.X - X.X - X.X - X..X..X..X.X - X...X "
+ "X.....X - X.X - X.X - X..X X.X X..X - X.X - X.X -XXX X..X..X..X..X- X.....X "
+ "X......X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X XX-XX X.X -X..XX........X..X- X...X...X "
+ "X.......X - X.X - X.X -X.....................X- X.X X.X-X.X X.X -X...X...........X- X...X X...X "
+ "X........X - X.X - X.X - X...XXXXXX.XXXXXX...X - X.X..X-X..X.X - X..............X-X...X X...X"
+ "X.........X -XXX.XXX- X.X - X..X X.X X..X - X...X-X...X - X.............X-X..X X..X"
+ "X..........X-X.....X- X.X - X.X X.X X.X - X....X-X....X - X.............X- XX XX "
+ "X......XXXXX-XXXXXXX- X.X - XX X.X XX - X.....X-X.....X - X............X--------------"
+ "X...X..X --------- X.X - X.X - XXXXXXX-XXXXXXX - X...........X - "
+ "X..X X..X - -XXXX.XXXX- XXXX.XXXX ------------------------------------- X..........X - "
+ "X.X X..X - -X.......X- X.......X - XX XX - - X..........X - "
+ "XX X..X - - X.....X - X.....X - X.X X.X - - X........X - "
+ " X..X - - X...X - X...X - X..X X..X - - X........X - "
+ " XX - - X.X - X.X - X...XXXXXXXXXXXXX...X - - XXXXXXXXXX - "
+ "------------- - X - X -X.....................X- ------------------- "
+ " ----------------------------------- X...XXXXXXXXXXXXX...X - "
+ " - X..X X..X - "
+ " - X.X X.X - "
+ " - XX XX - "
+};
+
+static const ImVec2 FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[ImGuiMouseCursor_COUNT][3] =
+{
+ // Pos ........ Size ......... Offset ......
+ { ImVec2( 0,3), ImVec2(12,19), ImVec2( 0, 0) }, // ImGuiMouseCursor_Arrow
+ { ImVec2(13,0), ImVec2( 7,16), ImVec2( 1, 8) }, // ImGuiMouseCursor_TextInput
+ { ImVec2(31,0), ImVec2(23,23), ImVec2(11,11) }, // ImGuiMouseCursor_ResizeAll
+ { ImVec2(21,0), ImVec2( 9,23), ImVec2( 4,11) }, // ImGuiMouseCursor_ResizeNS
+ { ImVec2(55,18),ImVec2(23, 9), ImVec2(11, 4) }, // ImGuiMouseCursor_ResizeEW
+ { ImVec2(73,0), ImVec2(17,17), ImVec2( 8, 8) }, // ImGuiMouseCursor_ResizeNESW
+ { ImVec2(55,0), ImVec2(17,17), ImVec2( 8, 8) }, // ImGuiMouseCursor_ResizeNWSE
+ { ImVec2(91,0), ImVec2(17,22), ImVec2( 5, 0) }, // ImGuiMouseCursor_Hand
+ { ImVec2(109,0),ImVec2(13,15), ImVec2( 6, 7) }, // ImGuiMouseCursor_NotAllowed
+};
+
+ImFontAtlas::ImFontAtlas()
+{
+ memset(this, 0, sizeof(*this));
+ TexGlyphPadding = 1;
+ PackIdMouseCursors = PackIdLines = -1;
+}
+
+ImFontAtlas::~ImFontAtlas()
+{
+ IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+ Clear();
+}
+
+void ImFontAtlas::ClearInputData()
+{
+ IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+ for (int i = 0; i < ConfigData.Size; i++)
+ if (ConfigData[i].FontData && ConfigData[i].FontDataOwnedByAtlas)
+ {
+ IM_FREE(ConfigData[i].FontData);
+ ConfigData[i].FontData = NULL;
+ }
+
+ // When clearing this we lose access to the font name and other information used to build the font.
+ for (int i = 0; i < Fonts.Size; i++)
+ if (Fonts[i]->ConfigData >= ConfigData.Data && Fonts[i]->ConfigData < ConfigData.Data + ConfigData.Size)
+ {
+ Fonts[i]->ConfigData = NULL;
+ Fonts[i]->ConfigDataCount = 0;
+ }
+ ConfigData.clear();
+ CustomRects.clear();
+ PackIdMouseCursors = PackIdLines = -1;
+ // Important: we leave TexReady untouched
+}
+
+void ImFontAtlas::ClearTexData()
+{
+ IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+ if (TexPixelsAlpha8)
+ IM_FREE(TexPixelsAlpha8);
+ if (TexPixelsRGBA32)
+ IM_FREE(TexPixelsRGBA32);
+ TexPixelsAlpha8 = NULL;
+ TexPixelsRGBA32 = NULL;
+ TexPixelsUseColors = false;
+ // Important: we leave TexReady untouched
+}
+
+void ImFontAtlas::ClearFonts()
+{
+ IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+ Fonts.clear_delete();
+ TexReady = false;
+}
+
+void ImFontAtlas::Clear()
+{
+ ClearInputData();
+ ClearTexData();
+ ClearFonts();
+}
+
+void ImFontAtlas::GetTexDataAsAlpha8(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel)
+{
+ // Build atlas on demand
+ if (TexPixelsAlpha8 == NULL)
+ Build();
+
+ *out_pixels = TexPixelsAlpha8;
+ if (out_width) *out_width = TexWidth;
+ if (out_height) *out_height = TexHeight;
+ if (out_bytes_per_pixel) *out_bytes_per_pixel = 1;
+}
+
+void ImFontAtlas::GetTexDataAsRGBA32(unsigned char** out_pixels, int* out_width, int* out_height, int* out_bytes_per_pixel)
+{
+ // Convert to RGBA32 format on demand
+ // Although it is likely to be the most commonly used format, our font rendering is 1 channel / 8 bpp
+ if (!TexPixelsRGBA32)
+ {
+ unsigned char* pixels = NULL;
+ GetTexDataAsAlpha8(&pixels, NULL, NULL);
+ if (pixels)
+ {
+ TexPixelsRGBA32 = (unsigned int*)IM_ALLOC((size_t)TexWidth * (size_t)TexHeight * 4);
+ const unsigned char* src = pixels;
+ unsigned int* dst = TexPixelsRGBA32;
+ for (int n = TexWidth * TexHeight; n > 0; n--)
+ *dst++ = IM_COL32(255, 255, 255, (unsigned int)(*src++));
+ }
+ }
+
+ *out_pixels = (unsigned char*)TexPixelsRGBA32;
+ if (out_width) *out_width = TexWidth;
+ if (out_height) *out_height = TexHeight;
+ if (out_bytes_per_pixel) *out_bytes_per_pixel = 4;
+}
+
+ImFont* ImFontAtlas::AddFont(const ImFontConfig* font_cfg)
+{
+ IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+ IM_ASSERT(font_cfg->FontData != NULL && font_cfg->FontDataSize > 0);
+ IM_ASSERT(font_cfg->SizePixels > 0.0f);
+
+ // Create new font
+ if (!font_cfg->MergeMode)
+ Fonts.push_back(IM_NEW(ImFont));
+ else
+ IM_ASSERT(!Fonts.empty() && "Cannot use MergeMode for the first font"); // When using MergeMode make sure that a font has already been added before. You can use ImGui::GetIO().Fonts->AddFontDefault() to add the default imgui font.
+
+ ConfigData.push_back(*font_cfg);
+ ImFontConfig& new_font_cfg = ConfigData.back();
+ if (new_font_cfg.DstFont == NULL)
+ new_font_cfg.DstFont = Fonts.back();
+ if (!new_font_cfg.FontDataOwnedByAtlas)
+ {
+ new_font_cfg.FontData = IM_ALLOC(new_font_cfg.FontDataSize);
+ new_font_cfg.FontDataOwnedByAtlas = true;
+ memcpy(new_font_cfg.FontData, font_cfg->FontData, (size_t)new_font_cfg.FontDataSize);
+ }
+
+ if (new_font_cfg.DstFont->EllipsisChar == (ImWchar)-1)
+ new_font_cfg.DstFont->EllipsisChar = font_cfg->EllipsisChar;
+
+ // Invalidate texture
+ TexReady = false;
+ ClearTexData();
+ return new_font_cfg.DstFont;
+}
+
+// Default font TTF is compressed with stb_compress then base85 encoded (see misc/fonts/binary_to_compressed_c.cpp for encoder)
+static unsigned int stb_decompress_length(const unsigned char* input);
+static unsigned int stb_decompress(unsigned char* output, const unsigned char* input, unsigned int length);
+static const char* GetDefaultCompressedFontDataTTFBase85();
+static unsigned int Decode85Byte(char c) { return c >= '\\' ? c-36 : c-35; }
+static void Decode85(const unsigned char* src, unsigned char* dst)
+{
+ while (*src)
+ {
+ unsigned int tmp = Decode85Byte(src[0]) + 85 * (Decode85Byte(src[1]) + 85 * (Decode85Byte(src[2]) + 85 * (Decode85Byte(src[3]) + 85 * Decode85Byte(src[4]))));
+ dst[0] = ((tmp >> 0) & 0xFF); dst[1] = ((tmp >> 8) & 0xFF); dst[2] = ((tmp >> 16) & 0xFF); dst[3] = ((tmp >> 24) & 0xFF); // We can't assume little-endianness.
+ src += 5;
+ dst += 4;
+ }
+}
+
+// Load embedded ProggyClean.ttf at size 13, disable oversampling
+ImFont* ImFontAtlas::AddFontDefault(const ImFontConfig* font_cfg_template)
+{
+ ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
+ if (!font_cfg_template)
+ {
+ font_cfg.OversampleH = font_cfg.OversampleV = 1;
+ font_cfg.PixelSnapH = true;
+ }
+ if (font_cfg.SizePixels <= 0.0f)
+ font_cfg.SizePixels = 13.0f * 1.0f;
+ if (font_cfg.Name[0] == '\0')
+ ImFormatString(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "ProggyClean.ttf, %dpx", (int)font_cfg.SizePixels);
+ font_cfg.EllipsisChar = (ImWchar)0x0085;
+ font_cfg.GlyphOffset.y = 1.0f * IM_FLOOR(font_cfg.SizePixels / 13.0f); // Add +1 offset per 13 units
+
+ const char* ttf_compressed_base85 = GetDefaultCompressedFontDataTTFBase85();
+ const ImWchar* glyph_ranges = font_cfg.GlyphRanges != NULL ? font_cfg.GlyphRanges : GetGlyphRangesDefault();
+ ImFont* font = AddFontFromMemoryCompressedBase85TTF(ttf_compressed_base85, font_cfg.SizePixels, &font_cfg, glyph_ranges);
+ return font;
+}
+
+ImFont* ImFontAtlas::AddFontFromFileTTF(const char* filename, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
+{
+ IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+ size_t data_size = 0;
+ void* data = ImFileLoadToMemory(filename, "rb", &data_size, 0);
+ if (!data)
+ {
+ IM_ASSERT_USER_ERROR(0, "Could not load font file!");
+ return NULL;
+ }
+ ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
+ if (font_cfg.Name[0] == '\0')
+ {
+ // Store a short copy of filename into into the font name for convenience
+ const char* p;
+ for (p = filename + strlen(filename); p > filename && p[-1] != '/' && p[-1] != '\\'; p--) {}
+ ImFormatString(font_cfg.Name, IM_ARRAYSIZE(font_cfg.Name), "%s, %.0fpx", p, size_pixels);
+ }
+ return AddFontFromMemoryTTF(data, (int)data_size, size_pixels, &font_cfg, glyph_ranges);
+}
+
+// NB: Transfer ownership of 'ttf_data' to ImFontAtlas, unless font_cfg_template->FontDataOwnedByAtlas == false. Owned TTF buffer will be deleted after Build().
+ImFont* ImFontAtlas::AddFontFromMemoryTTF(void* ttf_data, int ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
+{
+ IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+ ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
+ IM_ASSERT(font_cfg.FontData == NULL);
+ font_cfg.FontData = ttf_data;
+ font_cfg.FontDataSize = ttf_size;
+ font_cfg.SizePixels = size_pixels > 0.0f ? size_pixels : font_cfg.SizePixels;
+ if (glyph_ranges)
+ font_cfg.GlyphRanges = glyph_ranges;
+ return AddFont(&font_cfg);
+}
+
+ImFont* ImFontAtlas::AddFontFromMemoryCompressedTTF(const void* compressed_ttf_data, int compressed_ttf_size, float size_pixels, const ImFontConfig* font_cfg_template, const ImWchar* glyph_ranges)
+{
+ const unsigned int buf_decompressed_size = stb_decompress_length((const unsigned char*)compressed_ttf_data);
+ unsigned char* buf_decompressed_data = (unsigned char*)IM_ALLOC(buf_decompressed_size);
+ stb_decompress(buf_decompressed_data, (const unsigned char*)compressed_ttf_data, (unsigned int)compressed_ttf_size);
+
+ ImFontConfig font_cfg = font_cfg_template ? *font_cfg_template : ImFontConfig();
+ IM_ASSERT(font_cfg.FontData == NULL);
+ font_cfg.FontDataOwnedByAtlas = true;
+ return AddFontFromMemoryTTF(buf_decompressed_data, (int)buf_decompressed_size, size_pixels, &font_cfg, glyph_ranges);
+}
+
+ImFont* ImFontAtlas::AddFontFromMemoryCompressedBase85TTF(const char* compressed_ttf_data_base85, float size_pixels, const ImFontConfig* font_cfg, const ImWchar* glyph_ranges)
+{
+ int compressed_ttf_size = (((int)strlen(compressed_ttf_data_base85) + 4) / 5) * 4;
+ void* compressed_ttf = IM_ALLOC((size_t)compressed_ttf_size);
+ Decode85((const unsigned char*)compressed_ttf_data_base85, (unsigned char*)compressed_ttf);
+ ImFont* font = AddFontFromMemoryCompressedTTF(compressed_ttf, compressed_ttf_size, size_pixels, font_cfg, glyph_ranges);
+ IM_FREE(compressed_ttf);
+ return font;
+}
+
+int ImFontAtlas::AddCustomRectRegular(int width, int height)
+{
+ IM_ASSERT(width > 0 && width <= 0xFFFF);
+ IM_ASSERT(height > 0 && height <= 0xFFFF);
+ ImFontAtlasCustomRect r;
+ r.Width = (unsigned short)width;
+ r.Height = (unsigned short)height;
+ CustomRects.push_back(r);
+ return CustomRects.Size - 1; // Return index
+}
+
+int ImFontAtlas::AddCustomRectFontGlyph(ImFont* font, ImWchar id, int width, int height, float advance_x, const ImVec2& offset)
+{
+#ifdef IMGUI_USE_WCHAR32
+ IM_ASSERT(id <= IM_UNICODE_CODEPOINT_MAX);
+#endif
+ IM_ASSERT(font != NULL);
+ IM_ASSERT(width > 0 && width <= 0xFFFF);
+ IM_ASSERT(height > 0 && height <= 0xFFFF);
+ ImFontAtlasCustomRect r;
+ r.Width = (unsigned short)width;
+ r.Height = (unsigned short)height;
+ r.GlyphID = id;
+ r.GlyphAdvanceX = advance_x;
+ r.GlyphOffset = offset;
+ r.Font = font;
+ CustomRects.push_back(r);
+ return CustomRects.Size - 1; // Return index
+}
+
+void ImFontAtlas::CalcCustomRectUV(const ImFontAtlasCustomRect* rect, ImVec2* out_uv_min, ImVec2* out_uv_max) const
+{
+ IM_ASSERT(TexWidth > 0 && TexHeight > 0); // Font atlas needs to be built before we can calculate UV coordinates
+ IM_ASSERT(rect->IsPacked()); // Make sure the rectangle has been packed
+ *out_uv_min = ImVec2((float)rect->X * TexUvScale.x, (float)rect->Y * TexUvScale.y);
+ *out_uv_max = ImVec2((float)(rect->X + rect->Width) * TexUvScale.x, (float)(rect->Y + rect->Height) * TexUvScale.y);
+}
+
+bool ImFontAtlas::GetMouseCursorTexData(ImGuiMouseCursor cursor_type, ImVec2* out_offset, ImVec2* out_size, ImVec2 out_uv_border[2], ImVec2 out_uv_fill[2])
+{
+ if (cursor_type <= ImGuiMouseCursor_None || cursor_type >= ImGuiMouseCursor_COUNT)
+ return false;
+ if (Flags & ImFontAtlasFlags_NoMouseCursors)
+ return false;
+
+ IM_ASSERT(PackIdMouseCursors != -1);
+ ImFontAtlasCustomRect* r = GetCustomRectByIndex(PackIdMouseCursors);
+ ImVec2 pos = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][0] + ImVec2((float)r->X, (float)r->Y);
+ ImVec2 size = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][1];
+ *out_size = size;
+ *out_offset = FONT_ATLAS_DEFAULT_TEX_CURSOR_DATA[cursor_type][2];
+ out_uv_border[0] = (pos) * TexUvScale;
+ out_uv_border[1] = (pos + size) * TexUvScale;
+ pos.x += FONT_ATLAS_DEFAULT_TEX_DATA_W + 1;
+ out_uv_fill[0] = (pos) * TexUvScale;
+ out_uv_fill[1] = (pos + size) * TexUvScale;
+ return true;
+}
+
+bool ImFontAtlas::Build()
+{
+ IM_ASSERT(!Locked && "Cannot modify a locked ImFontAtlas between NewFrame() and EndFrame/Render()!");
+
+ // Default font is none are specified
+ if (ConfigData.Size == 0)
+ AddFontDefault();
+
+ // Select builder
+ // - Note that we do not reassign to atlas->FontBuilderIO, since it is likely to point to static data which
+ // may mess with some hot-reloading schemes. If you need to assign to this (for dynamic selection) AND are
+ // using a hot-reloading scheme that messes up static data, store your own instance of ImFontBuilderIO somewhere
+ // and point to it instead of pointing directly to return value of the GetBuilderXXX functions.
+ const ImFontBuilderIO* builder_io = FontBuilderIO;
+ if (builder_io == NULL)
+ {
+#ifdef IMGUI_ENABLE_FREETYPE
+ builder_io = ImGuiFreeType::GetBuilderForFreeType();
+#elif defined(IMGUI_ENABLE_STB_TRUETYPE)
+ builder_io = ImFontAtlasGetBuilderForStbTruetype();
+#else
+ IM_ASSERT(0); // Invalid Build function
+#endif
+ }
+
+ // Build
+ return builder_io->FontBuilder_Build(this);
+}
+
+void ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_brighten_factor)
+{
+ for (unsigned int i = 0; i < 256; i++)
+ {
+ unsigned int value = (unsigned int)(i * in_brighten_factor);
+ out_table[i] = value > 255 ? 255 : (value & 0xFF);
+ }
+}
+
+void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride)
+{
+ unsigned char* data = pixels + x + y * stride;
+ for (int j = h; j > 0; j--, data += stride)
+ for (int i = 0; i < w; i++)
+ data[i] = table[data[i]];
+}
+
+#ifdef IMGUI_ENABLE_STB_TRUETYPE
+// Temporary data for one source font (multiple source fonts can be merged into one destination ImFont)
+// (C++03 doesn't allow instancing ImVector<> with function-local types so we declare the type here.)
+struct ImFontBuildSrcData
+{
+ stbtt_fontinfo FontInfo;
+ stbtt_pack_range PackRange; // Hold the list of codepoints to pack (essentially points to Codepoints.Data)
+ stbrp_rect* Rects; // Rectangle to pack. We first fill in their size and the packer will give us their position.
+ stbtt_packedchar* PackedChars; // Output glyphs
+ const ImWchar* SrcRanges; // Ranges as requested by user (user is allowed to request too much, e.g. 0x0020..0xFFFF)
+ int DstIndex; // Index into atlas->Fonts[] and dst_tmp_array[]
+ int GlyphsHighest; // Highest requested codepoint
+ int GlyphsCount; // Glyph count (excluding missing glyphs and glyphs already set by an earlier source font)
+ ImBitVector GlyphsSet; // Glyph bit map (random access, 1-bit per codepoint. This will be a maximum of 8KB)
+ ImVector<int> GlyphsList; // Glyph codepoints list (flattened version of GlyphsMap)
+};
+
+// Temporary data for one destination ImFont* (multiple source fonts can be merged into one destination ImFont)
+struct ImFontBuildDstData
+{
+ int SrcCount; // Number of source fonts targeting this destination font.
+ int GlyphsHighest;
+ int GlyphsCount;
+ ImBitVector GlyphsSet; // This is used to resolve collision when multiple sources are merged into a same destination font.
+};
+
+static void UnpackBitVectorToFlatIndexList(const ImBitVector* in, ImVector<int>* out)
+{
+ IM_ASSERT(sizeof(in->Storage.Data[0]) == sizeof(int));
+ const ImU32* it_begin = in->Storage.begin();
+ const ImU32* it_end = in->Storage.end();
+ for (const ImU32* it = it_begin; it < it_end; it++)
+ if (ImU32 entries_32 = *it)
+ for (ImU32 bit_n = 0; bit_n < 32; bit_n++)
+ if (entries_32 & ((ImU32)1 << bit_n))
+ out->push_back((int)(((it - it_begin) << 5) + bit_n));
+}
+
+static bool ImFontAtlasBuildWithStbTruetype(ImFontAtlas* atlas)
+{
+ IM_ASSERT(atlas->ConfigData.Size > 0);
+
+ ImFontAtlasBuildInit(atlas);
+
+ // Clear atlas
+ atlas->TexID = (ImTextureID)NULL;
+ atlas->TexWidth = atlas->TexHeight = 0;
+ atlas->TexUvScale = ImVec2(0.0f, 0.0f);
+ atlas->TexUvWhitePixel = ImVec2(0.0f, 0.0f);
+ atlas->ClearTexData();
+
+ // Temporary storage for building
+ ImVector<ImFontBuildSrcData> src_tmp_array;
+ ImVector<ImFontBuildDstData> dst_tmp_array;
+ src_tmp_array.resize(atlas->ConfigData.Size);
+ dst_tmp_array.resize(atlas->Fonts.Size);
+ memset(src_tmp_array.Data, 0, (size_t)src_tmp_array.size_in_bytes());
+ memset(dst_tmp_array.Data, 0, (size_t)dst_tmp_array.size_in_bytes());
+
+ // 1. Initialize font loading structure, check font data validity
+ for (int src_i = 0; src_i < atlas->ConfigData.Size; src_i++)
+ {
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ ImFontConfig& cfg = atlas->ConfigData[src_i];
+ IM_ASSERT(cfg.DstFont && (!cfg.DstFont->IsLoaded() || cfg.DstFont->ContainerAtlas == atlas));
+
+ // Find index from cfg.DstFont (we allow the user to set cfg.DstFont. Also it makes casual debugging nicer than when storing indices)
+ src_tmp.DstIndex = -1;
+ for (int output_i = 0; output_i < atlas->Fonts.Size && src_tmp.DstIndex == -1; output_i++)
+ if (cfg.DstFont == atlas->Fonts[output_i])
+ src_tmp.DstIndex = output_i;
+ if (src_tmp.DstIndex == -1)
+ {
+ IM_ASSERT(src_tmp.DstIndex != -1); // cfg.DstFont not pointing within atlas->Fonts[] array?
+ return false;
+ }
+ // Initialize helper structure for font loading and verify that the TTF/OTF data is correct
+ const int font_offset = stbtt_GetFontOffsetForIndex((unsigned char*)cfg.FontData, cfg.FontNo);
+ IM_ASSERT(font_offset >= 0 && "FontData is incorrect, or FontNo cannot be found.");
+ if (!stbtt_InitFont(&src_tmp.FontInfo, (unsigned char*)cfg.FontData, font_offset))
+ return false;
+
+ // Measure highest codepoints
+ ImFontBuildDstData& dst_tmp = dst_tmp_array[src_tmp.DstIndex];
+ src_tmp.SrcRanges = cfg.GlyphRanges ? cfg.GlyphRanges : atlas->GetGlyphRangesDefault();
+ for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2)
+ src_tmp.GlyphsHighest = ImMax(src_tmp.GlyphsHighest, (int)src_range[1]);
+ dst_tmp.SrcCount++;
+ dst_tmp.GlyphsHighest = ImMax(dst_tmp.GlyphsHighest, src_tmp.GlyphsHighest);
+ }
+
+ // 2. For every requested codepoint, check for their presence in the font data, and handle redundancy or overlaps between source fonts to avoid unused glyphs.
+ int total_glyphs_count = 0;
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+ {
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ ImFontBuildDstData& dst_tmp = dst_tmp_array[src_tmp.DstIndex];
+ src_tmp.GlyphsSet.Create(src_tmp.GlyphsHighest + 1);
+ if (dst_tmp.GlyphsSet.Storage.empty())
+ dst_tmp.GlyphsSet.Create(dst_tmp.GlyphsHighest + 1);
+
+ for (const ImWchar* src_range = src_tmp.SrcRanges; src_range[0] && src_range[1]; src_range += 2)
+ for (unsigned int codepoint = src_range[0]; codepoint <= src_range[1]; codepoint++)
+ {
+ if (dst_tmp.GlyphsSet.TestBit(codepoint)) // Don't overwrite existing glyphs. We could make this an option for MergeMode (e.g. MergeOverwrite==true)
+ continue;
+ if (!stbtt_FindGlyphIndex(&src_tmp.FontInfo, codepoint)) // It is actually in the font?
+ continue;
+
+ // Add to avail set/counters
+ src_tmp.GlyphsCount++;
+ dst_tmp.GlyphsCount++;
+ src_tmp.GlyphsSet.SetBit(codepoint);
+ dst_tmp.GlyphsSet.SetBit(codepoint);
+ total_glyphs_count++;
+ }
+ }
+
+ // 3. Unpack our bit map into a flat list (we now have all the Unicode points that we know are requested _and_ available _and_ not overlapping another)
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+ {
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ src_tmp.GlyphsList.reserve(src_tmp.GlyphsCount);
+ UnpackBitVectorToFlatIndexList(&src_tmp.GlyphsSet, &src_tmp.GlyphsList);
+ src_tmp.GlyphsSet.Clear();
+ IM_ASSERT(src_tmp.GlyphsList.Size == src_tmp.GlyphsCount);
+ }
+ for (int dst_i = 0; dst_i < dst_tmp_array.Size; dst_i++)
+ dst_tmp_array[dst_i].GlyphsSet.Clear();
+ dst_tmp_array.clear();
+
+ // Allocate packing character data and flag packed characters buffer as non-packed (x0=y0=x1=y1=0)
+ // (We technically don't need to zero-clear buf_rects, but let's do it for the sake of sanity)
+ ImVector<stbrp_rect> buf_rects;
+ ImVector<stbtt_packedchar> buf_packedchars;
+ buf_rects.resize(total_glyphs_count);
+ buf_packedchars.resize(total_glyphs_count);
+ memset(buf_rects.Data, 0, (size_t)buf_rects.size_in_bytes());
+ memset(buf_packedchars.Data, 0, (size_t)buf_packedchars.size_in_bytes());
+
+ // 4. Gather glyphs sizes so we can pack them in our virtual canvas.
+ int total_surface = 0;
+ int buf_rects_out_n = 0;
+ int buf_packedchars_out_n = 0;
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+ {
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ if (src_tmp.GlyphsCount == 0)
+ continue;
+
+ src_tmp.Rects = &buf_rects[buf_rects_out_n];
+ src_tmp.PackedChars = &buf_packedchars[buf_packedchars_out_n];
+ buf_rects_out_n += src_tmp.GlyphsCount;
+ buf_packedchars_out_n += src_tmp.GlyphsCount;
+
+ // Convert our ranges in the format stb_truetype wants
+ ImFontConfig& cfg = atlas->ConfigData[src_i];
+ src_tmp.PackRange.font_size = cfg.SizePixels;
+ src_tmp.PackRange.first_unicode_codepoint_in_range = 0;
+ src_tmp.PackRange.array_of_unicode_codepoints = src_tmp.GlyphsList.Data;
+ src_tmp.PackRange.num_chars = src_tmp.GlyphsList.Size;
+ src_tmp.PackRange.chardata_for_range = src_tmp.PackedChars;
+ src_tmp.PackRange.h_oversample = (unsigned char)cfg.OversampleH;
+ src_tmp.PackRange.v_oversample = (unsigned char)cfg.OversampleV;
+
+ // Gather the sizes of all rectangles we will need to pack (this loop is based on stbtt_PackFontRangesGatherRects)
+ const float scale = (cfg.SizePixels > 0) ? stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels) : stbtt_ScaleForMappingEmToPixels(&src_tmp.FontInfo, -cfg.SizePixels);
+ const int padding = atlas->TexGlyphPadding;
+ for (int glyph_i = 0; glyph_i < src_tmp.GlyphsList.Size; glyph_i++)
+ {
+ int x0, y0, x1, y1;
+ const int glyph_index_in_font = stbtt_FindGlyphIndex(&src_tmp.FontInfo, src_tmp.GlyphsList[glyph_i]);
+ IM_ASSERT(glyph_index_in_font != 0);
+ stbtt_GetGlyphBitmapBoxSubpixel(&src_tmp.FontInfo, glyph_index_in_font, scale * cfg.OversampleH, scale * cfg.OversampleV, 0, 0, &x0, &y0, &x1, &y1);
+ src_tmp.Rects[glyph_i].w = (stbrp_coord)(x1 - x0 + padding + cfg.OversampleH - 1);
+ src_tmp.Rects[glyph_i].h = (stbrp_coord)(y1 - y0 + padding + cfg.OversampleV - 1);
+ total_surface += src_tmp.Rects[glyph_i].w * src_tmp.Rects[glyph_i].h;
+ }
+ }
+
+ // We need a width for the skyline algorithm, any width!
+ // The exact width doesn't really matter much, but some API/GPU have texture size limitations and increasing width can decrease height.
+ // User can override TexDesiredWidth and TexGlyphPadding if they wish, otherwise we use a simple heuristic to select the width based on expected surface.
+ const int surface_sqrt = (int)ImSqrt((float)total_surface) + 1;
+ atlas->TexHeight = 0;
+ if (atlas->TexDesiredWidth > 0)
+ atlas->TexWidth = atlas->TexDesiredWidth;
+ else
+ atlas->TexWidth = (surface_sqrt >= 4096 * 0.7f) ? 4096 : (surface_sqrt >= 2048 * 0.7f) ? 2048 : (surface_sqrt >= 1024 * 0.7f) ? 1024 : 512;
+
+ // 5. Start packing
+ // Pack our extra data rectangles first, so it will be on the upper-left corner of our texture (UV will have small values).
+ const int TEX_HEIGHT_MAX = 1024 * 32;
+ stbtt_pack_context spc = {};
+ stbtt_PackBegin(&spc, NULL, atlas->TexWidth, TEX_HEIGHT_MAX, 0, atlas->TexGlyphPadding, NULL);
+ ImFontAtlasBuildPackCustomRects(atlas, spc.pack_info);
+
+ // 6. Pack each source font. No rendering yet, we are working with rectangles in an infinitely tall texture at this point.
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+ {
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ if (src_tmp.GlyphsCount == 0)
+ continue;
+
+ stbrp_pack_rects((stbrp_context*)spc.pack_info, src_tmp.Rects, src_tmp.GlyphsCount);
+
+ // Extend texture height and mark missing glyphs as non-packed so we won't render them.
+ // FIXME: We are not handling packing failure here (would happen if we got off TEX_HEIGHT_MAX or if a single if larger than TexWidth?)
+ for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++)
+ if (src_tmp.Rects[glyph_i].was_packed)
+ atlas->TexHeight = ImMax(atlas->TexHeight, src_tmp.Rects[glyph_i].y + src_tmp.Rects[glyph_i].h);
+ }
+
+ // 7. Allocate texture
+ atlas->TexHeight = (atlas->Flags & ImFontAtlasFlags_NoPowerOfTwoHeight) ? (atlas->TexHeight + 1) : ImUpperPowerOfTwo(atlas->TexHeight);
+ atlas->TexUvScale = ImVec2(1.0f / atlas->TexWidth, 1.0f / atlas->TexHeight);
+ atlas->TexPixelsAlpha8 = (unsigned char*)IM_ALLOC(atlas->TexWidth * atlas->TexHeight);
+ memset(atlas->TexPixelsAlpha8, 0, atlas->TexWidth * atlas->TexHeight);
+ spc.pixels = atlas->TexPixelsAlpha8;
+ spc.height = atlas->TexHeight;
+
+ // 8. Render/rasterize font characters into the texture
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+ {
+ ImFontConfig& cfg = atlas->ConfigData[src_i];
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ if (src_tmp.GlyphsCount == 0)
+ continue;
+
+ stbtt_PackFontRangesRenderIntoRects(&spc, &src_tmp.FontInfo, &src_tmp.PackRange, 1, src_tmp.Rects);
+
+ // Apply multiply operator
+ if (cfg.RasterizerMultiply != 1.0f)
+ {
+ unsigned char multiply_table[256];
+ ImFontAtlasBuildMultiplyCalcLookupTable(multiply_table, cfg.RasterizerMultiply);
+ stbrp_rect* r = &src_tmp.Rects[0];
+ for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++, r++)
+ if (r->was_packed)
+ ImFontAtlasBuildMultiplyRectAlpha8(multiply_table, atlas->TexPixelsAlpha8, r->x, r->y, r->w, r->h, atlas->TexWidth * 1);
+ }
+ src_tmp.Rects = NULL;
+ }
+
+ // End packing
+ stbtt_PackEnd(&spc);
+ buf_rects.clear();
+
+ // 9. Setup ImFont and glyphs for runtime
+ for (int src_i = 0; src_i < src_tmp_array.Size; src_i++)
+ {
+ ImFontBuildSrcData& src_tmp = src_tmp_array[src_i];
+ if (src_tmp.GlyphsCount == 0)
+ continue;
+
+ // When merging fonts with MergeMode=true:
+ // - We can have multiple input fonts writing into a same destination font.
+ // - dst_font->ConfigData is != from cfg which is our source configuration.
+ ImFontConfig& cfg = atlas->ConfigData[src_i];
+ ImFont* dst_font = cfg.DstFont;
+
+ const float font_scale = stbtt_ScaleForPixelHeight(&src_tmp.FontInfo, cfg.SizePixels);
+ int unscaled_ascent, unscaled_descent, unscaled_line_gap;
+ stbtt_GetFontVMetrics(&src_tmp.FontInfo, &unscaled_ascent, &unscaled_descent, &unscaled_line_gap);
+
+ const float ascent = ImFloor(unscaled_ascent * font_scale + ((unscaled_ascent > 0.0f) ? +1 : -1));
+ const float descent = ImFloor(unscaled_descent * font_scale + ((unscaled_descent > 0.0f) ? +1 : -1));
+ ImFontAtlasBuildSetupFont(atlas, dst_font, &cfg, ascent, descent);
+ const float font_off_x = cfg.GlyphOffset.x;
+ const float font_off_y = cfg.GlyphOffset.y + IM_ROUND(dst_font->Ascent);
+
+ for (int glyph_i = 0; glyph_i < src_tmp.GlyphsCount; glyph_i++)
+ {
+ // Register glyph
+ const int codepoint = src_tmp.GlyphsList[glyph_i];
+ const stbtt_packedchar& pc = src_tmp.PackedChars[glyph_i];
+ stbtt_aligned_quad q;
+ float unused_x = 0.0f, unused_y = 0.0f;
+ stbtt_GetPackedQuad(src_tmp.PackedChars, atlas->TexWidth, atlas->TexHeight, glyph_i, &unused_x, &unused_y, &q, 0);
+ dst_font->AddGlyph(&cfg, (ImWchar)codepoint, q.x0 + font_off_x, q.y0 + font_off_y, q.x1 + font_off_x, q.y1 + font_off_y, q.s0, q.t0, q.s1, q.t1, pc.xadvance);
+ }
+ }
+
+ // Cleanup
+ src_tmp_array.clear_destruct();
+
+ ImFontAtlasBuildFinish(atlas);
+ return true;
+}
+
+const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype()
+{
+ static ImFontBuilderIO io;
+ io.FontBuilder_Build = ImFontAtlasBuildWithStbTruetype;
+ return &io;
+}
+
+#endif // IMGUI_ENABLE_STB_TRUETYPE
+
+void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent)
+{
+ if (!font_config->MergeMode)
+ {
+ font->ClearOutputData();
+ font->FontSize = font_config->SizePixels;
+ font->ConfigData = font_config;
+ font->ConfigDataCount = 0;
+ font->ContainerAtlas = atlas;
+ font->Ascent = ascent;
+ font->Descent = descent;
+ }
+ font->ConfigDataCount++;
+}
+
+void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque)
+{
+ stbrp_context* pack_context = (stbrp_context*)stbrp_context_opaque;
+ IM_ASSERT(pack_context != NULL);
+
+ ImVector<ImFontAtlasCustomRect>& user_rects = atlas->CustomRects;
+ IM_ASSERT(user_rects.Size >= 1); // We expect at least the default custom rects to be registered, else something went wrong.
+
+ ImVector<stbrp_rect> pack_rects;
+ pack_rects.resize(user_rects.Size);
+ memset(pack_rects.Data, 0, (size_t)pack_rects.size_in_bytes());
+ for (int i = 0; i < user_rects.Size; i++)
+ {
+ pack_rects[i].w = user_rects[i].Width;
+ pack_rects[i].h = user_rects[i].Height;
+ }
+ stbrp_pack_rects(pack_context, &pack_rects[0], pack_rects.Size);
+ for (int i = 0; i < pack_rects.Size; i++)
+ if (pack_rects[i].was_packed)
+ {
+ user_rects[i].X = (unsigned short)pack_rects[i].x;
+ user_rects[i].Y = (unsigned short)pack_rects[i].y;
+ IM_ASSERT(pack_rects[i].w == user_rects[i].Width && pack_rects[i].h == user_rects[i].Height);
+ atlas->TexHeight = ImMax(atlas->TexHeight, pack_rects[i].y + pack_rects[i].h);
+ }
+}
+
+void ImFontAtlasBuildRender8bppRectFromString(ImFontAtlas* atlas, int x, int y, int w, int h, const char* in_str, char in_marker_char, unsigned char in_marker_pixel_value)
+{
+ IM_ASSERT(x >= 0 && x + w <= atlas->TexWidth);
+ IM_ASSERT(y >= 0 && y + h <= atlas->TexHeight);
+ unsigned char* out_pixel = atlas->TexPixelsAlpha8 + x + (y * atlas->TexWidth);
+ for (int off_y = 0; off_y < h; off_y++, out_pixel += atlas->TexWidth, in_str += w)
+ for (int off_x = 0; off_x < w; off_x++)
+ out_pixel[off_x] = (in_str[off_x] == in_marker_char) ? in_marker_pixel_value : 0x00;
+}
+
+void ImFontAtlasBuildRender32bppRectFromString(ImFontAtlas* atlas, int x, int y, int w, int h, const char* in_str, char in_marker_char, unsigned int in_marker_pixel_value)
+{
+ IM_ASSERT(x >= 0 && x + w <= atlas->TexWidth);
+ IM_ASSERT(y >= 0 && y + h <= atlas->TexHeight);
+ unsigned int* out_pixel = atlas->TexPixelsRGBA32 + x + (y * atlas->TexWidth);
+ for (int off_y = 0; off_y < h; off_y++, out_pixel += atlas->TexWidth, in_str += w)
+ for (int off_x = 0; off_x < w; off_x++)
+ out_pixel[off_x] = (in_str[off_x] == in_marker_char) ? in_marker_pixel_value : IM_COL32_BLACK_TRANS;
+}
+
+static void ImFontAtlasBuildRenderDefaultTexData(ImFontAtlas* atlas)
+{
+ ImFontAtlasCustomRect* r = atlas->GetCustomRectByIndex(atlas->PackIdMouseCursors);
+ IM_ASSERT(r->IsPacked());
+
+ const int w = atlas->TexWidth;
+ if (!(atlas->Flags & ImFontAtlasFlags_NoMouseCursors))
+ {
+ // Render/copy pixels
+ IM_ASSERT(r->Width == FONT_ATLAS_DEFAULT_TEX_DATA_W * 2 + 1 && r->Height == FONT_ATLAS_DEFAULT_TEX_DATA_H);
+ const int x_for_white = r->X;
+ const int x_for_black = r->X + FONT_ATLAS_DEFAULT_TEX_DATA_W + 1;
+ if (atlas->TexPixelsAlpha8 != NULL)
+ {
+ ImFontAtlasBuildRender8bppRectFromString(atlas, x_for_white, r->Y, FONT_ATLAS_DEFAULT_TEX_DATA_W, FONT_ATLAS_DEFAULT_TEX_DATA_H, FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS, '.', 0xFF);
+ ImFontAtlasBuildRender8bppRectFromString(atlas, x_for_black, r->Y, FONT_ATLAS_DEFAULT_TEX_DATA_W, FONT_ATLAS_DEFAULT_TEX_DATA_H, FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS, 'X', 0xFF);
+ }
+ else
+ {
+ ImFontAtlasBuildRender32bppRectFromString(atlas, x_for_white, r->Y, FONT_ATLAS_DEFAULT_TEX_DATA_W, FONT_ATLAS_DEFAULT_TEX_DATA_H, FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS, '.', IM_COL32_WHITE);
+ ImFontAtlasBuildRender32bppRectFromString(atlas, x_for_black, r->Y, FONT_ATLAS_DEFAULT_TEX_DATA_W, FONT_ATLAS_DEFAULT_TEX_DATA_H, FONT_ATLAS_DEFAULT_TEX_DATA_PIXELS, 'X', IM_COL32_WHITE);
+ }
+ }
+ else
+ {
+ // Render 4 white pixels
+ IM_ASSERT(r->Width == 2 && r->Height == 2);
+ const int offset = (int)r->X + (int)r->Y * w;
+ if (atlas->TexPixelsAlpha8 != NULL)
+ {
+ atlas->TexPixelsAlpha8[offset] = atlas->TexPixelsAlpha8[offset + 1] = atlas->TexPixelsAlpha8[offset + w] = atlas->TexPixelsAlpha8[offset + w + 1] = 0xFF;
+ }
+ else
+ {
+ atlas->TexPixelsRGBA32[offset] = atlas->TexPixelsRGBA32[offset + 1] = atlas->TexPixelsRGBA32[offset + w] = atlas->TexPixelsRGBA32[offset + w + 1] = IM_COL32_WHITE;
+ }
+ }
+ atlas->TexUvWhitePixel = ImVec2((r->X + 0.5f) * atlas->TexUvScale.x, (r->Y + 0.5f) * atlas->TexUvScale.y);
+}
+
+static void ImFontAtlasBuildRenderLinesTexData(ImFontAtlas* atlas)
+{
+ if (atlas->Flags & ImFontAtlasFlags_NoBakedLines)
+ return;
+
+ // This generates a triangular shape in the texture, with the various line widths stacked on top of each other to allow interpolation between them
+ ImFontAtlasCustomRect* r = atlas->GetCustomRectByIndex(atlas->PackIdLines);
+ IM_ASSERT(r->IsPacked());
+ for (unsigned int n = 0; n < IM_DRAWLIST_TEX_LINES_WIDTH_MAX + 1; n++) // +1 because of the zero-width row
+ {
+ // Each line consists of at least two empty pixels at the ends, with a line of solid pixels in the middle
+ unsigned int y = n;
+ unsigned int line_width = n;
+ unsigned int pad_left = (r->Width - line_width) / 2;
+ unsigned int pad_right = r->Width - (pad_left + line_width);
+
+ // Write each slice
+ IM_ASSERT(pad_left + line_width + pad_right == r->Width && y < r->Height); // Make sure we're inside the texture bounds before we start writing pixels
+ if (atlas->TexPixelsAlpha8 != NULL)
+ {
+ unsigned char* write_ptr = &atlas->TexPixelsAlpha8[r->X + ((r->Y + y) * atlas->TexWidth)];
+ for (unsigned int i = 0; i < pad_left; i++)
+ *(write_ptr + i) = 0x00;
+
+ for (unsigned int i = 0; i < line_width; i++)
+ *(write_ptr + pad_left + i) = 0xFF;
+
+ for (unsigned int i = 0; i < pad_right; i++)
+ *(write_ptr + pad_left + line_width + i) = 0x00;
+ }
+ else
+ {
+ unsigned int* write_ptr = &atlas->TexPixelsRGBA32[r->X + ((r->Y + y) * atlas->TexWidth)];
+ for (unsigned int i = 0; i < pad_left; i++)
+ *(write_ptr + i) = IM_COL32(255, 255, 255, 0);
+
+ for (unsigned int i = 0; i < line_width; i++)
+ *(write_ptr + pad_left + i) = IM_COL32_WHITE;
+
+ for (unsigned int i = 0; i < pad_right; i++)
+ *(write_ptr + pad_left + line_width + i) = IM_COL32(255, 255, 255, 0);
+ }
+
+ // Calculate UVs for this line
+ ImVec2 uv0 = ImVec2((float)(r->X + pad_left - 1), (float)(r->Y + y)) * atlas->TexUvScale;
+ ImVec2 uv1 = ImVec2((float)(r->X + pad_left + line_width + 1), (float)(r->Y + y + 1)) * atlas->TexUvScale;
+ float half_v = (uv0.y + uv1.y) * 0.5f; // Calculate a constant V in the middle of the row to avoid sampling artifacts
+ atlas->TexUvLines[n] = ImVec4(uv0.x, half_v, uv1.x, half_v);
+ }
+}
+
+// Note: this is called / shared by both the stb_truetype and the FreeType builder
+void ImFontAtlasBuildInit(ImFontAtlas* atlas)
+{
+ // Register texture region for mouse cursors or standard white pixels
+ if (atlas->PackIdMouseCursors < 0)
+ {
+ if (!(atlas->Flags & ImFontAtlasFlags_NoMouseCursors))
+ atlas->PackIdMouseCursors = atlas->AddCustomRectRegular(FONT_ATLAS_DEFAULT_TEX_DATA_W * 2 + 1, FONT_ATLAS_DEFAULT_TEX_DATA_H);
+ else
+ atlas->PackIdMouseCursors = atlas->AddCustomRectRegular(2, 2);
+ }
+
+ // Register texture region for thick lines
+ // The +2 here is to give space for the end caps, whilst height +1 is to accommodate the fact we have a zero-width row
+ if (atlas->PackIdLines < 0)
+ {
+ if (!(atlas->Flags & ImFontAtlasFlags_NoBakedLines))
+ atlas->PackIdLines = atlas->AddCustomRectRegular(IM_DRAWLIST_TEX_LINES_WIDTH_MAX + 2, IM_DRAWLIST_TEX_LINES_WIDTH_MAX + 1);
+ }
+}
+
+// This is called/shared by both the stb_truetype and the FreeType builder.
+void ImFontAtlasBuildFinish(ImFontAtlas* atlas)
+{
+ // Render into our custom data blocks
+ IM_ASSERT(atlas->TexPixelsAlpha8 != NULL || atlas->TexPixelsRGBA32 != NULL);
+ ImFontAtlasBuildRenderDefaultTexData(atlas);
+ ImFontAtlasBuildRenderLinesTexData(atlas);
+
+ // Register custom rectangle glyphs
+ for (int i = 0; i < atlas->CustomRects.Size; i++)
+ {
+ const ImFontAtlasCustomRect* r = &atlas->CustomRects[i];
+ if (r->Font == NULL || r->GlyphID == 0)
+ continue;
+
+ // Will ignore ImFontConfig settings: GlyphMinAdvanceX, GlyphMinAdvanceY, GlyphExtraSpacing, PixelSnapH
+ IM_ASSERT(r->Font->ContainerAtlas == atlas);
+ ImVec2 uv0, uv1;
+ atlas->CalcCustomRectUV(r, &uv0, &uv1);
+ r->Font->AddGlyph(NULL, (ImWchar)r->GlyphID, r->GlyphOffset.x, r->GlyphOffset.y, r->GlyphOffset.x + r->Width, r->GlyphOffset.y + r->Height, uv0.x, uv0.y, uv1.x, uv1.y, r->GlyphAdvanceX);
+ }
+
+ // Build all fonts lookup tables
+ for (int i = 0; i < atlas->Fonts.Size; i++)
+ if (atlas->Fonts[i]->DirtyLookupTables)
+ atlas->Fonts[i]->BuildLookupTable();
+
+ atlas->TexReady = true;
+}
+
+// Retrieve list of range (2 int per range, values are inclusive)
+const ImWchar* ImFontAtlas::GetGlyphRangesDefault()
+{
+ static const ImWchar ranges[] =
+ {
+ 0x0020, 0x00FF, // Basic Latin + Latin Supplement
+ 0,
+ };
+ return &ranges[0];
+}
+
+const ImWchar* ImFontAtlas::GetGlyphRangesKorean()
+{
+ static const ImWchar ranges[] =
+ {
+ 0x0020, 0x00FF, // Basic Latin + Latin Supplement
+ 0x3131, 0x3163, // Korean alphabets
+ 0xAC00, 0xD7A3, // Korean characters
+ 0xFFFD, 0xFFFD, // Invalid
+ 0,
+ };
+ return &ranges[0];
+}
+
+const ImWchar* ImFontAtlas::GetGlyphRangesChineseFull()
+{
+ static const ImWchar ranges[] =
+ {
+ 0x0020, 0x00FF, // Basic Latin + Latin Supplement
+ 0x2000, 0x206F, // General Punctuation
+ 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
+ 0x31F0, 0x31FF, // Katakana Phonetic Extensions
+ 0xFF00, 0xFFEF, // Half-width characters
+ 0xFFFD, 0xFFFD, // Invalid
+ 0x4e00, 0x9FAF, // CJK Ideograms
+ 0,
+ };
+ return &ranges[0];
+}
+
+static void UnpackAccumulativeOffsetsIntoRanges(int base_codepoint, const short* accumulative_offsets, int accumulative_offsets_count, ImWchar* out_ranges)
+{
+ for (int n = 0; n < accumulative_offsets_count; n++, out_ranges += 2)
+ {
+ out_ranges[0] = out_ranges[1] = (ImWchar)(base_codepoint + accumulative_offsets[n]);
+ base_codepoint += accumulative_offsets[n];
+ }
+ out_ranges[0] = 0;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] ImFontAtlas glyph ranges helpers
+//-------------------------------------------------------------------------
+
+const ImWchar* ImFontAtlas::GetGlyphRangesChineseSimplifiedCommon()
+{
+ // Store 2500 regularly used characters for Simplified Chinese.
+ // Sourced from https://zh.wiktionary.org/wiki/%E9%99%84%E5%BD%95:%E7%8E%B0%E4%BB%A3%E6%B1%89%E8%AF%AD%E5%B8%B8%E7%94%A8%E5%AD%97%E8%A1%A8
+ // This table covers 97.97% of all characters used during the month in July, 1987.
+ // You can use ImFontGlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters.
+ // (Stored as accumulative offsets from the initial unicode codepoint 0x4E00. This encoding is designed to helps us compact the source code size.)
+ static const short accumulative_offsets_from_0x4E00[] =
+ {
+ 0,1,2,4,1,1,1,1,2,1,3,2,1,2,2,1,1,1,1,1,5,2,1,2,3,3,3,2,2,4,1,1,1,2,1,5,2,3,1,2,1,2,1,1,2,1,1,2,2,1,4,1,1,1,1,5,10,1,2,19,2,1,2,1,2,1,2,1,2,
+ 1,5,1,6,3,2,1,2,2,1,1,1,4,8,5,1,1,4,1,1,3,1,2,1,5,1,2,1,1,1,10,1,1,5,2,4,6,1,4,2,2,2,12,2,1,1,6,1,1,1,4,1,1,4,6,5,1,4,2,2,4,10,7,1,1,4,2,4,
+ 2,1,4,3,6,10,12,5,7,2,14,2,9,1,1,6,7,10,4,7,13,1,5,4,8,4,1,1,2,28,5,6,1,1,5,2,5,20,2,2,9,8,11,2,9,17,1,8,6,8,27,4,6,9,20,11,27,6,68,2,2,1,1,
+ 1,2,1,2,2,7,6,11,3,3,1,1,3,1,2,1,1,1,1,1,3,1,1,8,3,4,1,5,7,2,1,4,4,8,4,2,1,2,1,1,4,5,6,3,6,2,12,3,1,3,9,2,4,3,4,1,5,3,3,1,3,7,1,5,1,1,1,1,2,
+ 3,4,5,2,3,2,6,1,1,2,1,7,1,7,3,4,5,15,2,2,1,5,3,22,19,2,1,1,1,1,2,5,1,1,1,6,1,1,12,8,2,9,18,22,4,1,1,5,1,16,1,2,7,10,15,1,1,6,2,4,1,2,4,1,6,
+ 1,1,3,2,4,1,6,4,5,1,2,1,1,2,1,10,3,1,3,2,1,9,3,2,5,7,2,19,4,3,6,1,1,1,1,1,4,3,2,1,1,1,2,5,3,1,1,1,2,2,1,1,2,1,1,2,1,3,1,1,1,3,7,1,4,1,1,2,1,
+ 1,2,1,2,4,4,3,8,1,1,1,2,1,3,5,1,3,1,3,4,6,2,2,14,4,6,6,11,9,1,15,3,1,28,5,2,5,5,3,1,3,4,5,4,6,14,3,2,3,5,21,2,7,20,10,1,2,19,2,4,28,28,2,3,
+ 2,1,14,4,1,26,28,42,12,40,3,52,79,5,14,17,3,2,2,11,3,4,6,3,1,8,2,23,4,5,8,10,4,2,7,3,5,1,1,6,3,1,2,2,2,5,28,1,1,7,7,20,5,3,29,3,17,26,1,8,4,
+ 27,3,6,11,23,5,3,4,6,13,24,16,6,5,10,25,35,7,3,2,3,3,14,3,6,2,6,1,4,2,3,8,2,1,1,3,3,3,4,1,1,13,2,2,4,5,2,1,14,14,1,2,2,1,4,5,2,3,1,14,3,12,
+ 3,17,2,16,5,1,2,1,8,9,3,19,4,2,2,4,17,25,21,20,28,75,1,10,29,103,4,1,2,1,1,4,2,4,1,2,3,24,2,2,2,1,1,2,1,3,8,1,1,1,2,1,1,3,1,1,1,6,1,5,3,1,1,
+ 1,3,4,1,1,5,2,1,5,6,13,9,16,1,1,1,1,3,2,3,2,4,5,2,5,2,2,3,7,13,7,2,2,1,1,1,1,2,3,3,2,1,6,4,9,2,1,14,2,14,2,1,18,3,4,14,4,11,41,15,23,15,23,
+ 176,1,3,4,1,1,1,1,5,3,1,2,3,7,3,1,1,2,1,2,4,4,6,2,4,1,9,7,1,10,5,8,16,29,1,1,2,2,3,1,3,5,2,4,5,4,1,1,2,2,3,3,7,1,6,10,1,17,1,44,4,6,2,1,1,6,
+ 5,4,2,10,1,6,9,2,8,1,24,1,2,13,7,8,8,2,1,4,1,3,1,3,3,5,2,5,10,9,4,9,12,2,1,6,1,10,1,1,7,7,4,10,8,3,1,13,4,3,1,6,1,3,5,2,1,2,17,16,5,2,16,6,
+ 1,4,2,1,3,3,6,8,5,11,11,1,3,3,2,4,6,10,9,5,7,4,7,4,7,1,1,4,2,1,3,6,8,7,1,6,11,5,5,3,24,9,4,2,7,13,5,1,8,82,16,61,1,1,1,4,2,2,16,10,3,8,1,1,
+ 6,4,2,1,3,1,1,1,4,3,8,4,2,2,1,1,1,1,1,6,3,5,1,1,4,6,9,2,1,1,1,2,1,7,2,1,6,1,5,4,4,3,1,8,1,3,3,1,3,2,2,2,2,3,1,6,1,2,1,2,1,3,7,1,8,2,1,2,1,5,
+ 2,5,3,5,10,1,2,1,1,3,2,5,11,3,9,3,5,1,1,5,9,1,2,1,5,7,9,9,8,1,3,3,3,6,8,2,3,2,1,1,32,6,1,2,15,9,3,7,13,1,3,10,13,2,14,1,13,10,2,1,3,10,4,15,
+ 2,15,15,10,1,3,9,6,9,32,25,26,47,7,3,2,3,1,6,3,4,3,2,8,5,4,1,9,4,2,2,19,10,6,2,3,8,1,2,2,4,2,1,9,4,4,4,6,4,8,9,2,3,1,1,1,1,3,5,5,1,3,8,4,6,
+ 2,1,4,12,1,5,3,7,13,2,5,8,1,6,1,2,5,14,6,1,5,2,4,8,15,5,1,23,6,62,2,10,1,1,8,1,2,2,10,4,2,2,9,2,1,1,3,2,3,1,5,3,3,2,1,3,8,1,1,1,11,3,1,1,4,
+ 3,7,1,14,1,2,3,12,5,2,5,1,6,7,5,7,14,11,1,3,1,8,9,12,2,1,11,8,4,4,2,6,10,9,13,1,1,3,1,5,1,3,2,4,4,1,18,2,3,14,11,4,29,4,2,7,1,3,13,9,2,2,5,
+ 3,5,20,7,16,8,5,72,34,6,4,22,12,12,28,45,36,9,7,39,9,191,1,1,1,4,11,8,4,9,2,3,22,1,1,1,1,4,17,1,7,7,1,11,31,10,2,4,8,2,3,2,1,4,2,16,4,32,2,
+ 3,19,13,4,9,1,5,2,14,8,1,1,3,6,19,6,5,1,16,6,2,10,8,5,1,2,3,1,5,5,1,11,6,6,1,3,3,2,6,3,8,1,1,4,10,7,5,7,7,5,8,9,2,1,3,4,1,1,3,1,3,3,2,6,16,
+ 1,4,6,3,1,10,6,1,3,15,2,9,2,10,25,13,9,16,6,2,2,10,11,4,3,9,1,2,6,6,5,4,30,40,1,10,7,12,14,33,6,3,6,7,3,1,3,1,11,14,4,9,5,12,11,49,18,51,31,
+ 140,31,2,2,1,5,1,8,1,10,1,4,4,3,24,1,10,1,3,6,6,16,3,4,5,2,1,4,2,57,10,6,22,2,22,3,7,22,6,10,11,36,18,16,33,36,2,5,5,1,1,1,4,10,1,4,13,2,7,
+ 5,2,9,3,4,1,7,43,3,7,3,9,14,7,9,1,11,1,1,3,7,4,18,13,1,14,1,3,6,10,73,2,2,30,6,1,11,18,19,13,22,3,46,42,37,89,7,3,16,34,2,2,3,9,1,7,1,1,1,2,
+ 2,4,10,7,3,10,3,9,5,28,9,2,6,13,7,3,1,3,10,2,7,2,11,3,6,21,54,85,2,1,4,2,2,1,39,3,21,2,2,5,1,1,1,4,1,1,3,4,15,1,3,2,4,4,2,3,8,2,20,1,8,7,13,
+ 4,1,26,6,2,9,34,4,21,52,10,4,4,1,5,12,2,11,1,7,2,30,12,44,2,30,1,1,3,6,16,9,17,39,82,2,2,24,7,1,7,3,16,9,14,44,2,1,2,1,2,3,5,2,4,1,6,7,5,3,
+ 2,6,1,11,5,11,2,1,18,19,8,1,3,24,29,2,1,3,5,2,2,1,13,6,5,1,46,11,3,5,1,1,5,8,2,10,6,12,6,3,7,11,2,4,16,13,2,5,1,1,2,2,5,2,28,5,2,23,10,8,4,
+ 4,22,39,95,38,8,14,9,5,1,13,5,4,3,13,12,11,1,9,1,27,37,2,5,4,4,63,211,95,2,2,2,1,3,5,2,1,1,2,2,1,1,1,3,2,4,1,2,1,1,5,2,2,1,1,2,3,1,3,1,1,1,
+ 3,1,4,2,1,3,6,1,1,3,7,15,5,3,2,5,3,9,11,4,2,22,1,6,3,8,7,1,4,28,4,16,3,3,25,4,4,27,27,1,4,1,2,2,7,1,3,5,2,28,8,2,14,1,8,6,16,25,3,3,3,14,3,
+ 3,1,1,2,1,4,6,3,8,4,1,1,1,2,3,6,10,6,2,3,18,3,2,5,5,4,3,1,5,2,5,4,23,7,6,12,6,4,17,11,9,5,1,1,10,5,12,1,1,11,26,33,7,3,6,1,17,7,1,5,12,1,11,
+ 2,4,1,8,14,17,23,1,2,1,7,8,16,11,9,6,5,2,6,4,16,2,8,14,1,11,8,9,1,1,1,9,25,4,11,19,7,2,15,2,12,8,52,7,5,19,2,16,4,36,8,1,16,8,24,26,4,6,2,9,
+ 5,4,36,3,28,12,25,15,37,27,17,12,59,38,5,32,127,1,2,9,17,14,4,1,2,1,1,8,11,50,4,14,2,19,16,4,17,5,4,5,26,12,45,2,23,45,104,30,12,8,3,10,2,2,
+ 3,3,1,4,20,7,2,9,6,15,2,20,1,3,16,4,11,15,6,134,2,5,59,1,2,2,2,1,9,17,3,26,137,10,211,59,1,2,4,1,4,1,1,1,2,6,2,3,1,1,2,3,2,3,1,3,4,4,2,3,3,
+ 1,4,3,1,7,2,2,3,1,2,1,3,3,3,2,2,3,2,1,3,14,6,1,3,2,9,6,15,27,9,34,145,1,1,2,1,1,1,1,2,1,1,1,1,2,2,2,3,1,2,1,1,1,2,3,5,8,3,5,2,4,1,3,2,2,2,12,
+ 4,1,1,1,10,4,5,1,20,4,16,1,15,9,5,12,2,9,2,5,4,2,26,19,7,1,26,4,30,12,15,42,1,6,8,172,1,1,4,2,1,1,11,2,2,4,2,1,2,1,10,8,1,2,1,4,5,1,2,5,1,8,
+ 4,1,3,4,2,1,6,2,1,3,4,1,2,1,1,1,1,12,5,7,2,4,3,1,1,1,3,3,6,1,2,2,3,3,3,2,1,2,12,14,11,6,6,4,12,2,8,1,7,10,1,35,7,4,13,15,4,3,23,21,28,52,5,
+ 26,5,6,1,7,10,2,7,53,3,2,1,1,1,2,163,532,1,10,11,1,3,3,4,8,2,8,6,2,2,23,22,4,2,2,4,2,1,3,1,3,3,5,9,8,2,1,2,8,1,10,2,12,21,20,15,105,2,3,1,1,
+ 3,2,3,1,1,2,5,1,4,15,11,19,1,1,1,1,5,4,5,1,1,2,5,3,5,12,1,2,5,1,11,1,1,15,9,1,4,5,3,26,8,2,1,3,1,1,15,19,2,12,1,2,5,2,7,2,19,2,20,6,26,7,5,
+ 2,2,7,34,21,13,70,2,128,1,1,2,1,1,2,1,1,3,2,2,2,15,1,4,1,3,4,42,10,6,1,49,85,8,1,2,1,1,4,4,2,3,6,1,5,7,4,3,211,4,1,2,1,2,5,1,2,4,2,2,6,5,6,
+ 10,3,4,48,100,6,2,16,296,5,27,387,2,2,3,7,16,8,5,38,15,39,21,9,10,3,7,59,13,27,21,47,5,21,6
+ };
+ static ImWchar base_ranges[] = // not zero-terminated
+ {
+ 0x0020, 0x00FF, // Basic Latin + Latin Supplement
+ 0x2000, 0x206F, // General Punctuation
+ 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
+ 0x31F0, 0x31FF, // Katakana Phonetic Extensions
+ 0xFF00, 0xFFEF, // Half-width characters
+ 0xFFFD, 0xFFFD // Invalid
+ };
+ static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00) * 2 + 1] = { 0 };
+ if (!full_ranges[0])
+ {
+ memcpy(full_ranges, base_ranges, sizeof(base_ranges));
+ UnpackAccumulativeOffsetsIntoRanges(0x4E00, accumulative_offsets_from_0x4E00, IM_ARRAYSIZE(accumulative_offsets_from_0x4E00), full_ranges + IM_ARRAYSIZE(base_ranges));
+ }
+ return &full_ranges[0];
+}
+
+const ImWchar* ImFontAtlas::GetGlyphRangesJapanese()
+{
+ // 2999 ideograms code points for Japanese
+ // - 2136 Joyo (meaning "for regular use" or "for common use") Kanji code points
+ // - 863 Jinmeiyo (meaning "for personal name") Kanji code points
+ // - Sourced from the character information database of the Information-technology Promotion Agency, Japan
+ // - https://mojikiban.ipa.go.jp/mji/
+ // - Available under the terms of the Creative Commons Attribution-ShareAlike 2.1 Japan (CC BY-SA 2.1 JP).
+ // - https://creativecommons.org/licenses/by-sa/2.1/jp/deed.en
+ // - https://creativecommons.org/licenses/by-sa/2.1/jp/legalcode
+ // - You can generate this code by the script at:
+ // - https://github.com/vaiorabbit/everyday_use_kanji
+ // - References:
+ // - List of Joyo Kanji
+ // - (Official list by the Agency for Cultural Affairs) https://www.bunka.go.jp/kokugo_nihongo/sisaku/joho/joho/kakuki/14/tosin02/index.html
+ // - (Wikipedia) https://en.wikipedia.org/wiki/List_of_j%C5%8Dy%C5%8D_kanji
+ // - List of Jinmeiyo Kanji
+ // - (Official list by the Ministry of Justice) http://www.moj.go.jp/MINJI/minji86.html
+ // - (Wikipedia) https://en.wikipedia.org/wiki/Jinmeiy%C5%8D_kanji
+ // - Missing 1 Joyo Kanji: U+20B9F (Kun'yomi: Shikaru, On'yomi: Shitsu,shichi), see https://github.com/ocornut/imgui/pull/3627 for details.
+ // You can use ImFontGlyphRangesBuilder to create your own ranges derived from this, by merging existing ranges or adding new characters.
+ // (Stored as accumulative offsets from the initial unicode codepoint 0x4E00. This encoding is designed to helps us compact the source code size.)
+ static const short accumulative_offsets_from_0x4E00[] =
+ {
+ 0,1,2,4,1,1,1,1,2,1,3,3,2,2,1,5,3,5,7,5,6,1,2,1,7,2,6,3,1,8,1,1,4,1,1,18,2,11,2,6,2,1,2,1,5,1,2,1,3,1,2,1,2,3,3,1,1,2,3,1,1,1,12,7,9,1,4,5,1,
+ 1,2,1,10,1,1,9,2,2,4,5,6,9,3,1,1,1,1,9,3,18,5,2,2,2,2,1,6,3,7,1,1,1,1,2,2,4,2,1,23,2,10,4,3,5,2,4,10,2,4,13,1,6,1,9,3,1,1,6,6,7,6,3,1,2,11,3,
+ 2,2,3,2,15,2,2,5,4,3,6,4,1,2,5,2,12,16,6,13,9,13,2,1,1,7,16,4,7,1,19,1,5,1,2,2,7,7,8,2,6,5,4,9,18,7,4,5,9,13,11,8,15,2,1,1,1,2,1,2,2,1,2,2,8,
+ 2,9,3,3,1,1,4,4,1,1,1,4,9,1,4,3,5,5,2,7,5,3,4,8,2,1,13,2,3,3,1,14,1,1,4,5,1,3,6,1,5,2,1,1,3,3,3,3,1,1,2,7,6,6,7,1,4,7,6,1,1,1,1,1,12,3,3,9,5,
+ 2,6,1,5,6,1,2,3,18,2,4,14,4,1,3,6,1,1,6,3,5,5,3,2,2,2,2,12,3,1,4,2,3,2,3,11,1,7,4,1,2,1,3,17,1,9,1,24,1,1,4,2,2,4,1,2,7,1,1,1,3,1,2,2,4,15,1,
+ 1,2,1,1,2,1,5,2,5,20,2,5,9,1,10,8,7,6,1,1,1,1,1,1,6,2,1,2,8,1,1,1,1,5,1,1,3,1,1,1,1,3,1,1,12,4,1,3,1,1,1,1,1,10,3,1,7,5,13,1,2,3,4,6,1,1,30,
+ 2,9,9,1,15,38,11,3,1,8,24,7,1,9,8,10,2,1,9,31,2,13,6,2,9,4,49,5,2,15,2,1,10,2,1,1,1,2,2,6,15,30,35,3,14,18,8,1,16,10,28,12,19,45,38,1,3,2,3,
+ 13,2,1,7,3,6,5,3,4,3,1,5,7,8,1,5,3,18,5,3,6,1,21,4,24,9,24,40,3,14,3,21,3,2,1,2,4,2,3,1,15,15,6,5,1,1,3,1,5,6,1,9,7,3,3,2,1,4,3,8,21,5,16,4,
+ 5,2,10,11,11,3,6,3,2,9,3,6,13,1,2,1,1,1,1,11,12,6,6,1,4,2,6,5,2,1,1,3,3,6,13,3,1,1,5,1,2,3,3,14,2,1,2,2,2,5,1,9,5,1,1,6,12,3,12,3,4,13,2,14,
+ 2,8,1,17,5,1,16,4,2,2,21,8,9,6,23,20,12,25,19,9,38,8,3,21,40,25,33,13,4,3,1,4,1,2,4,1,2,5,26,2,1,1,2,1,3,6,2,1,1,1,1,1,1,2,3,1,1,1,9,2,3,1,1,
+ 1,3,6,3,2,1,1,6,6,1,8,2,2,2,1,4,1,2,3,2,7,3,2,4,1,2,1,2,2,1,1,1,1,1,3,1,2,5,4,10,9,4,9,1,1,1,1,1,1,5,3,2,1,6,4,9,6,1,10,2,31,17,8,3,7,5,40,1,
+ 7,7,1,6,5,2,10,7,8,4,15,39,25,6,28,47,18,10,7,1,3,1,1,2,1,1,1,3,3,3,1,1,1,3,4,2,1,4,1,3,6,10,7,8,6,2,2,1,3,3,2,5,8,7,9,12,2,15,1,1,4,1,2,1,1,
+ 1,3,2,1,3,3,5,6,2,3,2,10,1,4,2,8,1,1,1,11,6,1,21,4,16,3,1,3,1,4,2,3,6,5,1,3,1,1,3,3,4,6,1,1,10,4,2,7,10,4,7,4,2,9,4,3,1,1,1,4,1,8,3,4,1,3,1,
+ 6,1,4,2,1,4,7,2,1,8,1,4,5,1,1,2,2,4,6,2,7,1,10,1,1,3,4,11,10,8,21,4,6,1,3,5,2,1,2,28,5,5,2,3,13,1,2,3,1,4,2,1,5,20,3,8,11,1,3,3,3,1,8,10,9,2,
+ 10,9,2,3,1,1,2,4,1,8,3,6,1,7,8,6,11,1,4,29,8,4,3,1,2,7,13,1,4,1,6,2,6,12,12,2,20,3,2,3,6,4,8,9,2,7,34,5,1,18,6,1,1,4,4,5,7,9,1,2,2,4,3,4,1,7,
+ 2,2,2,6,2,3,25,5,3,6,1,4,6,7,4,2,1,4,2,13,6,4,4,3,1,5,3,4,4,3,2,1,1,4,1,2,1,1,3,1,11,1,6,3,1,7,3,6,2,8,8,6,9,3,4,11,3,2,10,12,2,5,11,1,6,4,5,
+ 3,1,8,5,4,6,6,3,5,1,1,3,2,1,2,2,6,17,12,1,10,1,6,12,1,6,6,19,9,6,16,1,13,4,4,15,7,17,6,11,9,15,12,6,7,2,1,2,2,15,9,3,21,4,6,49,18,7,3,2,3,1,
+ 6,8,2,2,6,2,9,1,3,6,4,4,1,2,16,2,5,2,1,6,2,3,5,3,1,2,5,1,2,1,9,3,1,8,6,4,8,11,3,1,1,1,1,3,1,13,8,4,1,3,2,2,1,4,1,11,1,5,2,1,5,2,5,8,6,1,1,7,
+ 4,3,8,3,2,7,2,1,5,1,5,2,4,7,6,2,8,5,1,11,4,5,3,6,18,1,2,13,3,3,1,21,1,1,4,1,4,1,1,1,8,1,2,2,7,1,2,4,2,2,9,2,1,1,1,4,3,6,3,12,5,1,1,1,5,6,3,2,
+ 4,8,2,2,4,2,7,1,8,9,5,2,3,2,1,3,2,13,7,14,6,5,1,1,2,1,4,2,23,2,1,1,6,3,1,4,1,15,3,1,7,3,9,14,1,3,1,4,1,1,5,8,1,3,8,3,8,15,11,4,14,4,4,2,5,5,
+ 1,7,1,6,14,7,7,8,5,15,4,8,6,5,6,2,1,13,1,20,15,11,9,2,5,6,2,11,2,6,2,5,1,5,8,4,13,19,25,4,1,1,11,1,34,2,5,9,14,6,2,2,6,1,1,14,1,3,14,13,1,6,
+ 12,21,14,14,6,32,17,8,32,9,28,1,2,4,11,8,3,1,14,2,5,15,1,1,1,1,3,6,4,1,3,4,11,3,1,1,11,30,1,5,1,4,1,5,8,1,1,3,2,4,3,17,35,2,6,12,17,3,1,6,2,
+ 1,1,12,2,7,3,3,2,1,16,2,8,3,6,5,4,7,3,3,8,1,9,8,5,1,2,1,3,2,8,1,2,9,12,1,1,2,3,8,3,24,12,4,3,7,5,8,3,3,3,3,3,3,1,23,10,3,1,2,2,6,3,1,16,1,16,
+ 22,3,10,4,11,6,9,7,7,3,6,2,2,2,4,10,2,1,1,2,8,7,1,6,4,1,3,3,3,5,10,12,12,2,3,12,8,15,1,1,16,6,6,1,5,9,11,4,11,4,2,6,12,1,17,5,13,1,4,9,5,1,11,
+ 2,1,8,1,5,7,28,8,3,5,10,2,17,3,38,22,1,2,18,12,10,4,38,18,1,4,44,19,4,1,8,4,1,12,1,4,31,12,1,14,7,75,7,5,10,6,6,13,3,2,11,11,3,2,5,28,15,6,18,
+ 18,5,6,4,3,16,1,7,18,7,36,3,5,3,1,7,1,9,1,10,7,2,4,2,6,2,9,7,4,3,32,12,3,7,10,2,23,16,3,1,12,3,31,4,11,1,3,8,9,5,1,30,15,6,12,3,2,2,11,19,9,
+ 14,2,6,2,3,19,13,17,5,3,3,25,3,14,1,1,1,36,1,3,2,19,3,13,36,9,13,31,6,4,16,34,2,5,4,2,3,3,5,1,1,1,4,3,1,17,3,2,3,5,3,1,3,2,3,5,6,3,12,11,1,3,
+ 1,2,26,7,12,7,2,14,3,3,7,7,11,25,25,28,16,4,36,1,2,1,6,2,1,9,3,27,17,4,3,4,13,4,1,3,2,2,1,10,4,2,4,6,3,8,2,1,18,1,1,24,2,2,4,33,2,3,63,7,1,6,
+ 40,7,3,4,4,2,4,15,18,1,16,1,1,11,2,41,14,1,3,18,13,3,2,4,16,2,17,7,15,24,7,18,13,44,2,2,3,6,1,1,7,5,1,7,1,4,3,3,5,10,8,2,3,1,8,1,1,27,4,2,1,
+ 12,1,2,1,10,6,1,6,7,5,2,3,7,11,5,11,3,6,6,2,3,15,4,9,1,1,2,1,2,11,2,8,12,8,5,4,2,3,1,5,2,2,1,14,1,12,11,4,1,11,17,17,4,3,2,5,5,7,3,1,5,9,9,8,
+ 2,5,6,6,13,13,2,1,2,6,1,2,2,49,4,9,1,2,10,16,7,8,4,3,2,23,4,58,3,29,1,14,19,19,11,11,2,7,5,1,3,4,6,2,18,5,12,12,17,17,3,3,2,4,1,6,2,3,4,3,1,
+ 1,1,1,5,1,1,9,1,3,1,3,6,1,8,1,1,2,6,4,14,3,1,4,11,4,1,3,32,1,2,4,13,4,1,2,4,2,1,3,1,11,1,4,2,1,4,4,6,3,5,1,6,5,7,6,3,23,3,5,3,5,3,3,13,3,9,10,
+ 1,12,10,2,3,18,13,7,160,52,4,2,2,3,2,14,5,4,12,4,6,4,1,20,4,11,6,2,12,27,1,4,1,2,2,7,4,5,2,28,3,7,25,8,3,19,3,6,10,2,2,1,10,2,5,4,1,3,4,1,5,
+ 3,2,6,9,3,6,2,16,3,3,16,4,5,5,3,2,1,2,16,15,8,2,6,21,2,4,1,22,5,8,1,1,21,11,2,1,11,11,19,13,12,4,2,3,2,3,6,1,8,11,1,4,2,9,5,2,1,11,2,9,1,1,2,
+ 14,31,9,3,4,21,14,4,8,1,7,2,2,2,5,1,4,20,3,3,4,10,1,11,9,8,2,1,4,5,14,12,14,2,17,9,6,31,4,14,1,20,13,26,5,2,7,3,6,13,2,4,2,19,6,2,2,18,9,3,5,
+ 12,12,14,4,6,2,3,6,9,5,22,4,5,25,6,4,8,5,2,6,27,2,35,2,16,3,7,8,8,6,6,5,9,17,2,20,6,19,2,13,3,1,1,1,4,17,12,2,14,7,1,4,18,12,38,33,2,10,1,1,
+ 2,13,14,17,11,50,6,33,20,26,74,16,23,45,50,13,38,33,6,6,7,4,4,2,1,3,2,5,8,7,8,9,3,11,21,9,13,1,3,10,6,7,1,2,2,18,5,5,1,9,9,2,68,9,19,13,2,5,
+ 1,4,4,7,4,13,3,9,10,21,17,3,26,2,1,5,2,4,5,4,1,7,4,7,3,4,2,1,6,1,1,20,4,1,9,2,2,1,3,3,2,3,2,1,1,1,20,2,3,1,6,2,3,6,2,4,8,1,3,2,10,3,5,3,4,4,
+ 3,4,16,1,6,1,10,2,4,2,1,1,2,10,11,2,2,3,1,24,31,4,10,10,2,5,12,16,164,15,4,16,7,9,15,19,17,1,2,1,1,5,1,1,1,1,1,3,1,4,3,1,3,1,3,1,2,1,1,3,3,7,
+ 2,8,1,2,2,2,1,3,4,3,7,8,12,92,2,10,3,1,3,14,5,25,16,42,4,7,7,4,2,21,5,27,26,27,21,25,30,31,2,1,5,13,3,22,5,6,6,11,9,12,1,5,9,7,5,5,22,60,3,5,
+ 13,1,1,8,1,1,3,3,2,1,9,3,3,18,4,1,2,3,7,6,3,1,2,3,9,1,3,1,3,2,1,3,1,1,1,2,1,11,3,1,6,9,1,3,2,3,1,2,1,5,1,1,4,3,4,1,2,2,4,4,1,7,2,1,2,2,3,5,13,
+ 18,3,4,14,9,9,4,16,3,7,5,8,2,6,48,28,3,1,1,4,2,14,8,2,9,2,1,15,2,4,3,2,10,16,12,8,7,1,1,3,1,1,1,2,7,4,1,6,4,38,39,16,23,7,15,15,3,2,12,7,21,
+ 37,27,6,5,4,8,2,10,8,8,6,5,1,2,1,3,24,1,16,17,9,23,10,17,6,1,51,55,44,13,294,9,3,6,2,4,2,2,15,1,1,1,13,21,17,68,14,8,9,4,1,4,9,3,11,7,1,1,1,
+ 5,6,3,2,1,1,1,2,3,8,1,2,2,4,1,5,5,2,1,4,3,7,13,4,1,4,1,3,1,1,1,5,5,10,1,6,1,5,2,1,5,2,4,1,4,5,7,3,18,2,9,11,32,4,3,3,2,4,7,11,16,9,11,8,13,38,
+ 32,8,4,2,1,1,2,1,2,4,4,1,1,1,4,1,21,3,11,1,16,1,1,6,1,3,2,4,9,8,57,7,44,1,3,3,13,3,10,1,1,7,5,2,7,21,47,63,3,15,4,7,1,16,1,1,2,8,2,3,42,15,4,
+ 1,29,7,22,10,3,78,16,12,20,18,4,67,11,5,1,3,15,6,21,31,32,27,18,13,71,35,5,142,4,10,1,2,50,19,33,16,35,37,16,19,27,7,1,133,19,1,4,8,7,20,1,4,
+ 4,1,10,3,1,6,1,2,51,5,40,15,24,43,22928,11,1,13,154,70,3,1,1,7,4,10,1,2,1,1,2,1,2,1,2,2,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,
+ 3,2,1,1,1,1,2,1,1,
+ };
+ static ImWchar base_ranges[] = // not zero-terminated
+ {
+ 0x0020, 0x00FF, // Basic Latin + Latin Supplement
+ 0x3000, 0x30FF, // CJK Symbols and Punctuations, Hiragana, Katakana
+ 0x31F0, 0x31FF, // Katakana Phonetic Extensions
+ 0xFF00, 0xFFEF, // Half-width characters
+ 0xFFFD, 0xFFFD // Invalid
+ };
+ static ImWchar full_ranges[IM_ARRAYSIZE(base_ranges) + IM_ARRAYSIZE(accumulative_offsets_from_0x4E00)*2 + 1] = { 0 };
+ if (!full_ranges[0])
+ {
+ memcpy(full_ranges, base_ranges, sizeof(base_ranges));
+ UnpackAccumulativeOffsetsIntoRanges(0x4E00, accumulative_offsets_from_0x4E00, IM_ARRAYSIZE(accumulative_offsets_from_0x4E00), full_ranges + IM_ARRAYSIZE(base_ranges));
+ }
+ return &full_ranges[0];
+}
+
+const ImWchar* ImFontAtlas::GetGlyphRangesCyrillic()
+{
+ static const ImWchar ranges[] =
+ {
+ 0x0020, 0x00FF, // Basic Latin + Latin Supplement
+ 0x0400, 0x052F, // Cyrillic + Cyrillic Supplement
+ 0x2DE0, 0x2DFF, // Cyrillic Extended-A
+ 0xA640, 0xA69F, // Cyrillic Extended-B
+ 0,
+ };
+ return &ranges[0];
+}
+
+const ImWchar* ImFontAtlas::GetGlyphRangesThai()
+{
+ static const ImWchar ranges[] =
+ {
+ 0x0020, 0x00FF, // Basic Latin
+ 0x2010, 0x205E, // Punctuations
+ 0x0E00, 0x0E7F, // Thai
+ 0,
+ };
+ return &ranges[0];
+}
+
+const ImWchar* ImFontAtlas::GetGlyphRangesVietnamese()
+{
+ static const ImWchar ranges[] =
+ {
+ 0x0020, 0x00FF, // Basic Latin
+ 0x0102, 0x0103,
+ 0x0110, 0x0111,
+ 0x0128, 0x0129,
+ 0x0168, 0x0169,
+ 0x01A0, 0x01A1,
+ 0x01AF, 0x01B0,
+ 0x1EA0, 0x1EF9,
+ 0,
+ };
+ return &ranges[0];
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImFontGlyphRangesBuilder
+//-----------------------------------------------------------------------------
+
+void ImFontGlyphRangesBuilder::AddText(const char* text, const char* text_end)
+{
+ while (text_end ? (text < text_end) : *text)
+ {
+ unsigned int c = 0;
+ int c_len = ImTextCharFromUtf8(&c, text, text_end);
+ text += c_len;
+ if (c_len == 0)
+ break;
+ AddChar((ImWchar)c);
+ }
+}
+
+void ImFontGlyphRangesBuilder::AddRanges(const ImWchar* ranges)
+{
+ for (; ranges[0]; ranges += 2)
+ for (unsigned int c = ranges[0]; c <= ranges[1] && c <= IM_UNICODE_CODEPOINT_MAX; c++) //-V560
+ AddChar((ImWchar)c);
+}
+
+void ImFontGlyphRangesBuilder::BuildRanges(ImVector<ImWchar>* out_ranges)
+{
+ const int max_codepoint = IM_UNICODE_CODEPOINT_MAX;
+ for (int n = 0; n <= max_codepoint; n++)
+ if (GetBit(n))
+ {
+ out_ranges->push_back((ImWchar)n);
+ while (n < max_codepoint && GetBit(n + 1))
+ n++;
+ out_ranges->push_back((ImWchar)n);
+ }
+ out_ranges->push_back(0);
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImFont
+//-----------------------------------------------------------------------------
+
+ImFont::ImFont()
+{
+ FontSize = 0.0f;
+ FallbackAdvanceX = 0.0f;
+ FallbackChar = (ImWchar)-1;
+ EllipsisChar = (ImWchar)-1;
+ DotChar = (ImWchar)-1;
+ FallbackGlyph = NULL;
+ ContainerAtlas = NULL;
+ ConfigData = NULL;
+ ConfigDataCount = 0;
+ DirtyLookupTables = false;
+ Scale = 1.0f;
+ Ascent = Descent = 0.0f;
+ MetricsTotalSurface = 0;
+ memset(Used4kPagesMap, 0, sizeof(Used4kPagesMap));
+}
+
+ImFont::~ImFont()
+{
+ ClearOutputData();
+}
+
+void ImFont::ClearOutputData()
+{
+ FontSize = 0.0f;
+ FallbackAdvanceX = 0.0f;
+ Glyphs.clear();
+ IndexAdvanceX.clear();
+ IndexLookup.clear();
+ FallbackGlyph = NULL;
+ ContainerAtlas = NULL;
+ DirtyLookupTables = true;
+ Ascent = Descent = 0.0f;
+ MetricsTotalSurface = 0;
+}
+
+static ImWchar FindFirstExistingGlyph(ImFont* font, const ImWchar* candidate_chars, int candidate_chars_count)
+{
+ for (int n = 0; n < candidate_chars_count; n++)
+ if (font->FindGlyphNoFallback(candidate_chars[n]) != NULL)
+ return candidate_chars[n];
+ return (ImWchar)-1;
+}
+
+void ImFont::BuildLookupTable()
+{
+ int max_codepoint = 0;
+ for (int i = 0; i != Glyphs.Size; i++)
+ max_codepoint = ImMax(max_codepoint, (int)Glyphs[i].Codepoint);
+
+ // Build lookup table
+ IM_ASSERT(Glyphs.Size < 0xFFFF); // -1 is reserved
+ IndexAdvanceX.clear();
+ IndexLookup.clear();
+ DirtyLookupTables = false;
+ memset(Used4kPagesMap, 0, sizeof(Used4kPagesMap));
+ GrowIndex(max_codepoint + 1);
+ for (int i = 0; i < Glyphs.Size; i++)
+ {
+ int codepoint = (int)Glyphs[i].Codepoint;
+ IndexAdvanceX[codepoint] = Glyphs[i].AdvanceX;
+ IndexLookup[codepoint] = (ImWchar)i;
+
+ // Mark 4K page as used
+ const int page_n = codepoint / 4096;
+ Used4kPagesMap[page_n >> 3] |= 1 << (page_n & 7);
+ }
+
+ // Create a glyph to handle TAB
+ // FIXME: Needs proper TAB handling but it needs to be contextualized (or we could arbitrary say that each string starts at "column 0" ?)
+ if (FindGlyph((ImWchar)' '))
+ {
+ if (Glyphs.back().Codepoint != '\t') // So we can call this function multiple times (FIXME: Flaky)
+ Glyphs.resize(Glyphs.Size + 1);
+ ImFontGlyph& tab_glyph = Glyphs.back();
+ tab_glyph = *FindGlyph((ImWchar)' ');
+ tab_glyph.Codepoint = '\t';
+ tab_glyph.AdvanceX *= IM_TABSIZE;
+ IndexAdvanceX[(int)tab_glyph.Codepoint] = (float)tab_glyph.AdvanceX;
+ IndexLookup[(int)tab_glyph.Codepoint] = (ImWchar)(Glyphs.Size - 1);
+ }
+
+ // Mark special glyphs as not visible (note that AddGlyph already mark as non-visible glyphs with zero-size polygons)
+ SetGlyphVisible((ImWchar)' ', false);
+ SetGlyphVisible((ImWchar)'\t', false);
+
+ // Ellipsis character is required for rendering elided text. We prefer using U+2026 (horizontal ellipsis).
+ // However some old fonts may contain ellipsis at U+0085. Here we auto-detect most suitable ellipsis character.
+ // FIXME: Note that 0x2026 is rarely included in our font ranges. Because of this we are more likely to use three individual dots.
+ const ImWchar ellipsis_chars[] = { (ImWchar)0x2026, (ImWchar)0x0085 };
+ const ImWchar dots_chars[] = { (ImWchar)'.', (ImWchar)0xFF0E };
+ if (EllipsisChar == (ImWchar)-1)
+ EllipsisChar = FindFirstExistingGlyph(this, ellipsis_chars, IM_ARRAYSIZE(ellipsis_chars));
+ if (DotChar == (ImWchar)-1)
+ DotChar = FindFirstExistingGlyph(this, dots_chars, IM_ARRAYSIZE(dots_chars));
+
+ // Setup fallback character
+ const ImWchar fallback_chars[] = { (ImWchar)IM_UNICODE_CODEPOINT_INVALID, (ImWchar)'?', (ImWchar)' ' };
+ FallbackGlyph = FindGlyphNoFallback(FallbackChar);
+ if (FallbackGlyph == NULL)
+ {
+ FallbackChar = FindFirstExistingGlyph(this, fallback_chars, IM_ARRAYSIZE(fallback_chars));
+ FallbackGlyph = FindGlyphNoFallback(FallbackChar);
+ if (FallbackGlyph == NULL)
+ {
+ FallbackGlyph = &Glyphs.back();
+ FallbackChar = (ImWchar)FallbackGlyph->Codepoint;
+ }
+ }
+
+ FallbackAdvanceX = FallbackGlyph->AdvanceX;
+ for (int i = 0; i < max_codepoint + 1; i++)
+ if (IndexAdvanceX[i] < 0.0f)
+ IndexAdvanceX[i] = FallbackAdvanceX;
+}
+
+// API is designed this way to avoid exposing the 4K page size
+// e.g. use with IsGlyphRangeUnused(0, 255)
+bool ImFont::IsGlyphRangeUnused(unsigned int c_begin, unsigned int c_last)
+{
+ unsigned int page_begin = (c_begin / 4096);
+ unsigned int page_last = (c_last / 4096);
+ for (unsigned int page_n = page_begin; page_n <= page_last; page_n++)
+ if ((page_n >> 3) < sizeof(Used4kPagesMap))
+ if (Used4kPagesMap[page_n >> 3] & (1 << (page_n & 7)))
+ return false;
+ return true;
+}
+
+void ImFont::SetGlyphVisible(ImWchar c, bool visible)
+{
+ if (ImFontGlyph* glyph = (ImFontGlyph*)(void*)FindGlyph((ImWchar)c))
+ glyph->Visible = visible ? 1 : 0;
+}
+
+void ImFont::GrowIndex(int new_size)
+{
+ IM_ASSERT(IndexAdvanceX.Size == IndexLookup.Size);
+ if (new_size <= IndexLookup.Size)
+ return;
+ IndexAdvanceX.resize(new_size, -1.0f);
+ IndexLookup.resize(new_size, (ImWchar)-1);
+}
+
+// x0/y0/x1/y1 are offset from the character upper-left layout position, in pixels. Therefore x0/y0 are often fairly close to zero.
+// Not to be mistaken with texture coordinates, which are held by u0/v0/u1/v1 in normalized format (0.0..1.0 on each texture axis).
+// 'cfg' is not necessarily == 'this->ConfigData' because multiple source fonts+configs can be used to build one target font.
+void ImFont::AddGlyph(const ImFontConfig* cfg, ImWchar codepoint, float x0, float y0, float x1, float y1, float u0, float v0, float u1, float v1, float advance_x)
+{
+ if (cfg != NULL)
+ {
+ // Clamp & recenter if needed
+ const float advance_x_original = advance_x;
+ advance_x = ImClamp(advance_x, cfg->GlyphMinAdvanceX, cfg->GlyphMaxAdvanceX);
+ if (advance_x != advance_x_original)
+ {
+ float char_off_x = cfg->PixelSnapH ? ImFloor((advance_x - advance_x_original) * 0.5f) : (advance_x - advance_x_original) * 0.5f;
+ x0 += char_off_x;
+ x1 += char_off_x;
+ }
+
+ // Snap to pixel
+ if (cfg->PixelSnapH)
+ advance_x = IM_ROUND(advance_x);
+
+ // Bake spacing
+ advance_x += cfg->GlyphExtraSpacing.x;
+ }
+
+ Glyphs.resize(Glyphs.Size + 1);
+ ImFontGlyph& glyph = Glyphs.back();
+ glyph.Codepoint = (unsigned int)codepoint;
+ glyph.Visible = (x0 != x1) && (y0 != y1);
+ glyph.Colored = false;
+ glyph.X0 = x0;
+ glyph.Y0 = y0;
+ glyph.X1 = x1;
+ glyph.Y1 = y1;
+ glyph.U0 = u0;
+ glyph.V0 = v0;
+ glyph.U1 = u1;
+ glyph.V1 = v1;
+ glyph.AdvanceX = advance_x;
+
+ // Compute rough surface usage metrics (+1 to account for average padding, +0.99 to round)
+ // We use (U1-U0)*TexWidth instead of X1-X0 to account for oversampling.
+ float pad = ContainerAtlas->TexGlyphPadding + 0.99f;
+ DirtyLookupTables = true;
+ MetricsTotalSurface += (int)((glyph.U1 - glyph.U0) * ContainerAtlas->TexWidth + pad) * (int)((glyph.V1 - glyph.V0) * ContainerAtlas->TexHeight + pad);
+}
+
+void ImFont::AddRemapChar(ImWchar dst, ImWchar src, bool overwrite_dst)
+{
+ IM_ASSERT(IndexLookup.Size > 0); // Currently this can only be called AFTER the font has been built, aka after calling ImFontAtlas::GetTexDataAs*() function.
+ unsigned int index_size = (unsigned int)IndexLookup.Size;
+
+ if (dst < index_size && IndexLookup.Data[dst] == (ImWchar)-1 && !overwrite_dst) // 'dst' already exists
+ return;
+ if (src >= index_size && dst >= index_size) // both 'dst' and 'src' don't exist -> no-op
+ return;
+
+ GrowIndex(dst + 1);
+ IndexLookup[dst] = (src < index_size) ? IndexLookup.Data[src] : (ImWchar)-1;
+ IndexAdvanceX[dst] = (src < index_size) ? IndexAdvanceX.Data[src] : 1.0f;
+}
+
+const ImFontGlyph* ImFont::FindGlyph(ImWchar c) const
+{
+ if (c >= (size_t)IndexLookup.Size)
+ return FallbackGlyph;
+ const ImWchar i = IndexLookup.Data[c];
+ if (i == (ImWchar)-1)
+ return FallbackGlyph;
+ return &Glyphs.Data[i];
+}
+
+const ImFontGlyph* ImFont::FindGlyphNoFallback(ImWchar c) const
+{
+ if (c >= (size_t)IndexLookup.Size)
+ return NULL;
+ const ImWchar i = IndexLookup.Data[c];
+ if (i == (ImWchar)-1)
+ return NULL;
+ return &Glyphs.Data[i];
+}
+
+const char* ImFont::CalcWordWrapPositionA(float scale, const char* text, const char* text_end, float wrap_width) const
+{
+ // Simple word-wrapping for English, not full-featured. Please submit failing cases!
+ // FIXME: Much possible improvements (don't cut things like "word !", "word!!!" but cut within "word,,,,", more sensible support for punctuations, support for Unicode punctuations, etc.)
+
+ // For references, possible wrap point marked with ^
+ // "aaa bbb, ccc,ddd. eee fff. ggg!"
+ // ^ ^ ^ ^ ^__ ^ ^
+
+ // List of hardcoded separators: .,;!?'"
+
+ // Skip extra blanks after a line returns (that includes not counting them in width computation)
+ // e.g. "Hello world" --> "Hello" "World"
+
+ // Cut words that cannot possibly fit within one line.
+ // e.g.: "The tropical fish" with ~5 characters worth of width --> "The tr" "opical" "fish"
+
+ float line_width = 0.0f;
+ float word_width = 0.0f;
+ float blank_width = 0.0f;
+ wrap_width /= scale; // We work with unscaled widths to avoid scaling every characters
+
+ const char* word_end = text;
+ const char* prev_word_end = NULL;
+ bool inside_word = true;
+
+ const char* s = text;
+ while (s < text_end)
+ {
+ unsigned int c = (unsigned int)*s;
+ const char* next_s;
+ if (c < 0x80)
+ next_s = s + 1;
+ else
+ next_s = s + ImTextCharFromUtf8(&c, s, text_end);
+ if (c == 0)
+ break;
+
+ if (c < 32)
+ {
+ if (c == '\n')
+ {
+ line_width = word_width = blank_width = 0.0f;
+ inside_word = true;
+ s = next_s;
+ continue;
+ }
+ if (c == '\r')
+ {
+ s = next_s;
+ continue;
+ }
+ }
+
+ const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX.Data[c] : FallbackAdvanceX);
+ if (ImCharIsBlankW(c))
+ {
+ if (inside_word)
+ {
+ line_width += blank_width;
+ blank_width = 0.0f;
+ word_end = s;
+ }
+ blank_width += char_width;
+ inside_word = false;
+ }
+ else
+ {
+ word_width += char_width;
+ if (inside_word)
+ {
+ word_end = next_s;
+ }
+ else
+ {
+ prev_word_end = word_end;
+ line_width += word_width + blank_width;
+ word_width = blank_width = 0.0f;
+ }
+
+ // Allow wrapping after punctuation.
+ inside_word = (c != '.' && c != ',' && c != ';' && c != '!' && c != '?' && c != '\"');
+ }
+
+ // We ignore blank width at the end of the line (they can be skipped)
+ if (line_width + word_width > wrap_width)
+ {
+ // Words that cannot possibly fit within an entire line will be cut anywhere.
+ if (word_width < wrap_width)
+ s = prev_word_end ? prev_word_end : word_end;
+ break;
+ }
+
+ s = next_s;
+ }
+
+ return s;
+}
+
+ImVec2 ImFont::CalcTextSizeA(float size, float max_width, float wrap_width, const char* text_begin, const char* text_end, const char** remaining) const
+{
+ if (!text_end)
+ text_end = text_begin + strlen(text_begin); // FIXME-OPT: Need to avoid this.
+
+ const float line_height = size;
+ const float scale = size / FontSize;
+
+ ImVec2 text_size = ImVec2(0, 0);
+ float line_width = 0.0f;
+
+ const bool word_wrap_enabled = (wrap_width > 0.0f);
+ const char* word_wrap_eol = NULL;
+
+ const char* s = text_begin;
+ while (s < text_end)
+ {
+ if (word_wrap_enabled)
+ {
+ // Calculate how far we can render. Requires two passes on the string data but keeps the code simple and not intrusive for what's essentially an uncommon feature.
+ if (!word_wrap_eol)
+ {
+ word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - line_width);
+ if (word_wrap_eol == s) // Wrap_width is too small to fit anything. Force displaying 1 character to minimize the height discontinuity.
+ word_wrap_eol++; // +1 may not be a character start point in UTF-8 but it's ok because we use s >= word_wrap_eol below
+ }
+
+ if (s >= word_wrap_eol)
+ {
+ if (text_size.x < line_width)
+ text_size.x = line_width;
+ text_size.y += line_height;
+ line_width = 0.0f;
+ word_wrap_eol = NULL;
+
+ // Wrapping skips upcoming blanks
+ while (s < text_end)
+ {
+ const char c = *s;
+ if (ImCharIsBlankA(c)) { s++; } else if (c == '\n') { s++; break; } else { break; }
+ }
+ continue;
+ }
+ }
+
+ // Decode and advance source
+ const char* prev_s = s;
+ unsigned int c = (unsigned int)*s;
+ if (c < 0x80)
+ {
+ s += 1;
+ }
+ else
+ {
+ s += ImTextCharFromUtf8(&c, s, text_end);
+ if (c == 0) // Malformed UTF-8?
+ break;
+ }
+
+ if (c < 32)
+ {
+ if (c == '\n')
+ {
+ text_size.x = ImMax(text_size.x, line_width);
+ text_size.y += line_height;
+ line_width = 0.0f;
+ continue;
+ }
+ if (c == '\r')
+ continue;
+ }
+
+ const float char_width = ((int)c < IndexAdvanceX.Size ? IndexAdvanceX.Data[c] : FallbackAdvanceX) * scale;
+ if (line_width + char_width >= max_width)
+ {
+ s = prev_s;
+ break;
+ }
+
+ line_width += char_width;
+ }
+
+ if (text_size.x < line_width)
+ text_size.x = line_width;
+
+ if (line_width > 0 || text_size.y == 0.0f)
+ text_size.y += line_height;
+
+ if (remaining)
+ *remaining = s;
+
+ return text_size;
+}
+
+// Note: as with every ImDrawList drawing function, this expects that the font atlas texture is bound.
+void ImFont::RenderChar(ImDrawList* draw_list, float size, const ImVec2& pos, ImU32 col, ImWchar c) const
+{
+ const ImFontGlyph* glyph = FindGlyph(c);
+ if (!glyph || !glyph->Visible)
+ return;
+ if (glyph->Colored)
+ col |= ~IM_COL32_A_MASK;
+ float scale = (size >= 0.0f) ? (size / FontSize) : 1.0f;
+ float x = IM_FLOOR(pos.x);
+ float y = IM_FLOOR(pos.y);
+ draw_list->PrimReserve(6, 4);
+ draw_list->PrimRectUV(ImVec2(x + glyph->X0 * scale, y + glyph->Y0 * scale), ImVec2(x + glyph->X1 * scale, y + glyph->Y1 * scale), ImVec2(glyph->U0, glyph->V0), ImVec2(glyph->U1, glyph->V1), col);
+}
+
+// Note: as with every ImDrawList drawing function, this expects that the font atlas texture is bound.
+void ImFont::RenderText(ImDrawList* draw_list, float size, const ImVec2& pos, ImU32 col, const ImVec4& clip_rect, const char* text_begin, const char* text_end, float wrap_width, bool cpu_fine_clip) const
+{
+ if (!text_end)
+ text_end = text_begin + strlen(text_begin); // ImGui:: functions generally already provides a valid text_end, so this is merely to handle direct calls.
+
+ // Align to be pixel perfect
+ float x = IM_FLOOR(pos.x);
+ float y = IM_FLOOR(pos.y);
+ if (y > clip_rect.w)
+ return;
+
+ const float start_x = x;
+ const float scale = size / FontSize;
+ const float line_height = FontSize * scale;
+ const bool word_wrap_enabled = (wrap_width > 0.0f);
+ const char* word_wrap_eol = NULL;
+
+ // Fast-forward to first visible line
+ const char* s = text_begin;
+ if (y + line_height < clip_rect.y && !word_wrap_enabled)
+ while (y + line_height < clip_rect.y && s < text_end)
+ {
+ s = (const char*)memchr(s, '\n', text_end - s);
+ s = s ? s + 1 : text_end;
+ y += line_height;
+ }
+
+ // For large text, scan for the last visible line in order to avoid over-reserving in the call to PrimReserve()
+ // Note that very large horizontal line will still be affected by the issue (e.g. a one megabyte string buffer without a newline will likely crash atm)
+ if (text_end - s > 10000 && !word_wrap_enabled)
+ {
+ const char* s_end = s;
+ float y_end = y;
+ while (y_end < clip_rect.w && s_end < text_end)
+ {
+ s_end = (const char*)memchr(s_end, '\n', text_end - s_end);
+ s_end = s_end ? s_end + 1 : text_end;
+ y_end += line_height;
+ }
+ text_end = s_end;
+ }
+ if (s == text_end)
+ return;
+
+ // Reserve vertices for remaining worse case (over-reserving is useful and easily amortized)
+ const int vtx_count_max = (int)(text_end - s) * 4;
+ const int idx_count_max = (int)(text_end - s) * 6;
+ const int idx_expected_size = draw_list->IdxBuffer.Size + idx_count_max;
+ draw_list->PrimReserve(idx_count_max, vtx_count_max);
+
+ ImDrawVert* vtx_write = draw_list->_VtxWritePtr;
+ ImDrawIdx* idx_write = draw_list->_IdxWritePtr;
+ unsigned int vtx_current_idx = draw_list->_VtxCurrentIdx;
+
+ const ImU32 col_untinted = col | ~IM_COL32_A_MASK;
+
+ while (s < text_end)
+ {
+ if (word_wrap_enabled)
+ {
+ // Calculate how far we can render. Requires two passes on the string data but keeps the code simple and not intrusive for what's essentially an uncommon feature.
+ if (!word_wrap_eol)
+ {
+ word_wrap_eol = CalcWordWrapPositionA(scale, s, text_end, wrap_width - (x - start_x));
+ if (word_wrap_eol == s) // Wrap_width is too small to fit anything. Force displaying 1 character to minimize the height discontinuity.
+ word_wrap_eol++; // +1 may not be a character start point in UTF-8 but it's ok because we use s >= word_wrap_eol below
+ }
+
+ if (s >= word_wrap_eol)
+ {
+ x = start_x;
+ y += line_height;
+ word_wrap_eol = NULL;
+
+ // Wrapping skips upcoming blanks
+ while (s < text_end)
+ {
+ const char c = *s;
+ if (ImCharIsBlankA(c)) { s++; } else if (c == '\n') { s++; break; } else { break; }
+ }
+ continue;
+ }
+ }
+
+ // Decode and advance source
+ unsigned int c = (unsigned int)*s;
+ if (c < 0x80)
+ {
+ s += 1;
+ }
+ else
+ {
+ s += ImTextCharFromUtf8(&c, s, text_end);
+ if (c == 0) // Malformed UTF-8?
+ break;
+ }
+
+ if (c < 32)
+ {
+ if (c == '\n')
+ {
+ x = start_x;
+ y += line_height;
+ if (y > clip_rect.w)
+ break; // break out of main loop
+ continue;
+ }
+ if (c == '\r')
+ continue;
+ }
+
+ const ImFontGlyph* glyph = FindGlyph((ImWchar)c);
+ if (glyph == NULL)
+ continue;
+
+ float char_width = glyph->AdvanceX * scale;
+ if (glyph->Visible)
+ {
+ // We don't do a second finer clipping test on the Y axis as we've already skipped anything before clip_rect.y and exit once we pass clip_rect.w
+ float x1 = x + glyph->X0 * scale;
+ float x2 = x + glyph->X1 * scale;
+ float y1 = y + glyph->Y0 * scale;
+ float y2 = y + glyph->Y1 * scale;
+ if (x1 <= clip_rect.z && x2 >= clip_rect.x)
+ {
+ // Render a character
+ float u1 = glyph->U0;
+ float v1 = glyph->V0;
+ float u2 = glyph->U1;
+ float v2 = glyph->V1;
+
+ // CPU side clipping used to fit text in their frame when the frame is too small. Only does clipping for axis aligned quads.
+ if (cpu_fine_clip)
+ {
+ if (x1 < clip_rect.x)
+ {
+ u1 = u1 + (1.0f - (x2 - clip_rect.x) / (x2 - x1)) * (u2 - u1);
+ x1 = clip_rect.x;
+ }
+ if (y1 < clip_rect.y)
+ {
+ v1 = v1 + (1.0f - (y2 - clip_rect.y) / (y2 - y1)) * (v2 - v1);
+ y1 = clip_rect.y;
+ }
+ if (x2 > clip_rect.z)
+ {
+ u2 = u1 + ((clip_rect.z - x1) / (x2 - x1)) * (u2 - u1);
+ x2 = clip_rect.z;
+ }
+ if (y2 > clip_rect.w)
+ {
+ v2 = v1 + ((clip_rect.w - y1) / (y2 - y1)) * (v2 - v1);
+ y2 = clip_rect.w;
+ }
+ if (y1 >= y2)
+ {
+ x += char_width;
+ continue;
+ }
+ }
+
+ // Support for untinted glyphs
+ ImU32 glyph_col = glyph->Colored ? col_untinted : col;
+
+ // We are NOT calling PrimRectUV() here because non-inlined causes too much overhead in a debug builds. Inlined here:
+ {
+ idx_write[0] = (ImDrawIdx)(vtx_current_idx); idx_write[1] = (ImDrawIdx)(vtx_current_idx+1); idx_write[2] = (ImDrawIdx)(vtx_current_idx+2);
+ idx_write[3] = (ImDrawIdx)(vtx_current_idx); idx_write[4] = (ImDrawIdx)(vtx_current_idx+2); idx_write[5] = (ImDrawIdx)(vtx_current_idx+3);
+ vtx_write[0].pos.x = x1; vtx_write[0].pos.y = y1; vtx_write[0].col = glyph_col; vtx_write[0].uv.x = u1; vtx_write[0].uv.y = v1;
+ vtx_write[1].pos.x = x2; vtx_write[1].pos.y = y1; vtx_write[1].col = glyph_col; vtx_write[1].uv.x = u2; vtx_write[1].uv.y = v1;
+ vtx_write[2].pos.x = x2; vtx_write[2].pos.y = y2; vtx_write[2].col = glyph_col; vtx_write[2].uv.x = u2; vtx_write[2].uv.y = v2;
+ vtx_write[3].pos.x = x1; vtx_write[3].pos.y = y2; vtx_write[3].col = glyph_col; vtx_write[3].uv.x = u1; vtx_write[3].uv.y = v2;
+ vtx_write += 4;
+ vtx_current_idx += 4;
+ idx_write += 6;
+ }
+ }
+ }
+ x += char_width;
+ }
+
+ // Give back unused vertices (clipped ones, blanks) ~ this is essentially a PrimUnreserve() action.
+ draw_list->VtxBuffer.Size = (int)(vtx_write - draw_list->VtxBuffer.Data); // Same as calling shrink()
+ draw_list->IdxBuffer.Size = (int)(idx_write - draw_list->IdxBuffer.Data);
+ draw_list->CmdBuffer[draw_list->CmdBuffer.Size - 1].ElemCount -= (idx_expected_size - draw_list->IdxBuffer.Size);
+ draw_list->_VtxWritePtr = vtx_write;
+ draw_list->_IdxWritePtr = idx_write;
+ draw_list->_VtxCurrentIdx = vtx_current_idx;
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGui Internal Render Helpers
+//-----------------------------------------------------------------------------
+// Vaguely redesigned to stop accessing ImGui global state:
+// - RenderArrow()
+// - RenderBullet()
+// - RenderCheckMark()
+// - RenderArrowPointingAt()
+// - RenderRectFilledRangeH()
+// - RenderRectFilledWithHole()
+//-----------------------------------------------------------------------------
+// Function in need of a redesign (legacy mess)
+// - RenderColorRectWithAlphaCheckerboard()
+//-----------------------------------------------------------------------------
+
+// Render an arrow aimed to be aligned with text (p_min is a position in the same space text would be positioned). To e.g. denote expanded/collapsed state
+void ImGui::RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale)
+{
+ const float h = draw_list->_Data->FontSize * 1.00f;
+ float r = h * 0.40f * scale;
+ ImVec2 center = pos + ImVec2(h * 0.50f, h * 0.50f * scale);
+
+ ImVec2 a, b, c;
+ switch (dir)
+ {
+ case ImGuiDir_Up:
+ case ImGuiDir_Down:
+ if (dir == ImGuiDir_Up) r = -r;
+ a = ImVec2(+0.000f, +0.750f) * r;
+ b = ImVec2(-0.866f, -0.750f) * r;
+ c = ImVec2(+0.866f, -0.750f) * r;
+ break;
+ case ImGuiDir_Left:
+ case ImGuiDir_Right:
+ if (dir == ImGuiDir_Left) r = -r;
+ a = ImVec2(+0.750f, +0.000f) * r;
+ b = ImVec2(-0.750f, +0.866f) * r;
+ c = ImVec2(-0.750f, -0.866f) * r;
+ break;
+ case ImGuiDir_None:
+ case ImGuiDir_COUNT:
+ IM_ASSERT(0);
+ break;
+ }
+ draw_list->AddTriangleFilled(center + a, center + b, center + c, col);
+}
+
+void ImGui::RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col)
+{
+ draw_list->AddCircleFilled(pos, draw_list->_Data->FontSize * 0.20f, col, 8);
+}
+
+void ImGui::RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz)
+{
+ float thickness = ImMax(sz / 5.0f, 1.0f);
+ sz -= thickness * 0.5f;
+ pos += ImVec2(thickness * 0.25f, thickness * 0.25f);
+
+ float third = sz / 3.0f;
+ float bx = pos.x + third;
+ float by = pos.y + sz - third * 0.5f;
+ draw_list->PathLineTo(ImVec2(bx - third, by - third));
+ draw_list->PathLineTo(ImVec2(bx, by));
+ draw_list->PathLineTo(ImVec2(bx + third * 2.0f, by - third * 2.0f));
+ draw_list->PathStroke(col, 0, thickness);
+}
+
+// Render an arrow. 'pos' is position of the arrow tip. half_sz.x is length from base to tip. half_sz.y is length on each side.
+void ImGui::RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col)
+{
+ switch (direction)
+ {
+ case ImGuiDir_Left: draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), pos, col); return;
+ case ImGuiDir_Right: draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), pos, col); return;
+ case ImGuiDir_Up: draw_list->AddTriangleFilled(ImVec2(pos.x + half_sz.x, pos.y + half_sz.y), ImVec2(pos.x - half_sz.x, pos.y + half_sz.y), pos, col); return;
+ case ImGuiDir_Down: draw_list->AddTriangleFilled(ImVec2(pos.x - half_sz.x, pos.y - half_sz.y), ImVec2(pos.x + half_sz.x, pos.y - half_sz.y), pos, col); return;
+ case ImGuiDir_None: case ImGuiDir_COUNT: break; // Fix warnings
+ }
+}
+
+static inline float ImAcos01(float x)
+{
+ if (x <= 0.0f) return IM_PI * 0.5f;
+ if (x >= 1.0f) return 0.0f;
+ return ImAcos(x);
+ //return (-0.69813170079773212f * x * x - 0.87266462599716477f) * x + 1.5707963267948966f; // Cheap approximation, may be enough for what we do.
+}
+
+// FIXME: Cleanup and move code to ImDrawList.
+void ImGui::RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding)
+{
+ if (x_end_norm == x_start_norm)
+ return;
+ if (x_start_norm > x_end_norm)
+ ImSwap(x_start_norm, x_end_norm);
+
+ ImVec2 p0 = ImVec2(ImLerp(rect.Min.x, rect.Max.x, x_start_norm), rect.Min.y);
+ ImVec2 p1 = ImVec2(ImLerp(rect.Min.x, rect.Max.x, x_end_norm), rect.Max.y);
+ if (rounding == 0.0f)
+ {
+ draw_list->AddRectFilled(p0, p1, col, 0.0f);
+ return;
+ }
+
+ rounding = ImClamp(ImMin((rect.Max.x - rect.Min.x) * 0.5f, (rect.Max.y - rect.Min.y) * 0.5f) - 1.0f, 0.0f, rounding);
+ const float inv_rounding = 1.0f / rounding;
+ const float arc0_b = ImAcos01(1.0f - (p0.x - rect.Min.x) * inv_rounding);
+ const float arc0_e = ImAcos01(1.0f - (p1.x - rect.Min.x) * inv_rounding);
+ const float half_pi = IM_PI * 0.5f; // We will == compare to this because we know this is the exact value ImAcos01 can return.
+ const float x0 = ImMax(p0.x, rect.Min.x + rounding);
+ if (arc0_b == arc0_e)
+ {
+ draw_list->PathLineTo(ImVec2(x0, p1.y));
+ draw_list->PathLineTo(ImVec2(x0, p0.y));
+ }
+ else if (arc0_b == 0.0f && arc0_e == half_pi)
+ {
+ draw_list->PathArcToFast(ImVec2(x0, p1.y - rounding), rounding, 3, 6); // BL
+ draw_list->PathArcToFast(ImVec2(x0, p0.y + rounding), rounding, 6, 9); // TR
+ }
+ else
+ {
+ draw_list->PathArcTo(ImVec2(x0, p1.y - rounding), rounding, IM_PI - arc0_e, IM_PI - arc0_b, 3); // BL
+ draw_list->PathArcTo(ImVec2(x0, p0.y + rounding), rounding, IM_PI + arc0_b, IM_PI + arc0_e, 3); // TR
+ }
+ if (p1.x > rect.Min.x + rounding)
+ {
+ const float arc1_b = ImAcos01(1.0f - (rect.Max.x - p1.x) * inv_rounding);
+ const float arc1_e = ImAcos01(1.0f - (rect.Max.x - p0.x) * inv_rounding);
+ const float x1 = ImMin(p1.x, rect.Max.x - rounding);
+ if (arc1_b == arc1_e)
+ {
+ draw_list->PathLineTo(ImVec2(x1, p0.y));
+ draw_list->PathLineTo(ImVec2(x1, p1.y));
+ }
+ else if (arc1_b == 0.0f && arc1_e == half_pi)
+ {
+ draw_list->PathArcToFast(ImVec2(x1, p0.y + rounding), rounding, 9, 12); // TR
+ draw_list->PathArcToFast(ImVec2(x1, p1.y - rounding), rounding, 0, 3); // BR
+ }
+ else
+ {
+ draw_list->PathArcTo(ImVec2(x1, p0.y + rounding), rounding, -arc1_e, -arc1_b, 3); // TR
+ draw_list->PathArcTo(ImVec2(x1, p1.y - rounding), rounding, +arc1_b, +arc1_e, 3); // BR
+ }
+ }
+ draw_list->PathFillConvex(col);
+}
+
+void ImGui::RenderRectFilledWithHole(ImDrawList* draw_list, const ImRect& outer, const ImRect& inner, ImU32 col, float rounding)
+{
+ const bool fill_L = (inner.Min.x > outer.Min.x);
+ const bool fill_R = (inner.Max.x < outer.Max.x);
+ const bool fill_U = (inner.Min.y > outer.Min.y);
+ const bool fill_D = (inner.Max.y < outer.Max.y);
+ if (fill_L) draw_list->AddRectFilled(ImVec2(outer.Min.x, inner.Min.y), ImVec2(inner.Min.x, inner.Max.y), col, rounding, ImDrawFlags_RoundCornersNone | (fill_U ? 0 : ImDrawFlags_RoundCornersTopLeft) | (fill_D ? 0 : ImDrawFlags_RoundCornersBottomLeft));
+ if (fill_R) draw_list->AddRectFilled(ImVec2(inner.Max.x, inner.Min.y), ImVec2(outer.Max.x, inner.Max.y), col, rounding, ImDrawFlags_RoundCornersNone | (fill_U ? 0 : ImDrawFlags_RoundCornersTopRight) | (fill_D ? 0 : ImDrawFlags_RoundCornersBottomRight));
+ if (fill_U) draw_list->AddRectFilled(ImVec2(inner.Min.x, outer.Min.y), ImVec2(inner.Max.x, inner.Min.y), col, rounding, ImDrawFlags_RoundCornersNone | (fill_L ? 0 : ImDrawFlags_RoundCornersTopLeft) | (fill_R ? 0 : ImDrawFlags_RoundCornersTopRight));
+ if (fill_D) draw_list->AddRectFilled(ImVec2(inner.Min.x, inner.Max.y), ImVec2(inner.Max.x, outer.Max.y), col, rounding, ImDrawFlags_RoundCornersNone | (fill_L ? 0 : ImDrawFlags_RoundCornersBottomLeft) | (fill_R ? 0 : ImDrawFlags_RoundCornersBottomRight));
+ if (fill_L && fill_U) draw_list->AddRectFilled(ImVec2(outer.Min.x, outer.Min.y), ImVec2(inner.Min.x, inner.Min.y), col, rounding, ImDrawFlags_RoundCornersTopLeft);
+ if (fill_R && fill_U) draw_list->AddRectFilled(ImVec2(inner.Max.x, outer.Min.y), ImVec2(outer.Max.x, inner.Min.y), col, rounding, ImDrawFlags_RoundCornersTopRight);
+ if (fill_L && fill_D) draw_list->AddRectFilled(ImVec2(outer.Min.x, inner.Max.y), ImVec2(inner.Min.x, outer.Max.y), col, rounding, ImDrawFlags_RoundCornersBottomLeft);
+ if (fill_R && fill_D) draw_list->AddRectFilled(ImVec2(inner.Max.x, inner.Max.y), ImVec2(outer.Max.x, outer.Max.y), col, rounding, ImDrawFlags_RoundCornersBottomRight);
+}
+
+// Helper for ColorPicker4()
+// NB: This is rather brittle and will show artifact when rounding this enabled if rounded corners overlap multiple cells. Caller currently responsible for avoiding that.
+// Spent a non reasonable amount of time trying to getting this right for ColorButton with rounding+anti-aliasing+ImGuiColorEditFlags_HalfAlphaPreview flag + various grid sizes and offsets, and eventually gave up... probably more reasonable to disable rounding altogether.
+// FIXME: uses ImGui::GetColorU32
+void ImGui::RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 col, float grid_step, ImVec2 grid_off, float rounding, ImDrawFlags flags)
+{
+ if ((flags & ImDrawFlags_RoundCornersMask_) == 0)
+ flags = ImDrawFlags_RoundCornersDefault_;
+ if (((col & IM_COL32_A_MASK) >> IM_COL32_A_SHIFT) < 0xFF)
+ {
+ ImU32 col_bg1 = GetColorU32(ImAlphaBlendColors(IM_COL32(204, 204, 204, 255), col));
+ ImU32 col_bg2 = GetColorU32(ImAlphaBlendColors(IM_COL32(128, 128, 128, 255), col));
+ draw_list->AddRectFilled(p_min, p_max, col_bg1, rounding, flags);
+
+ int yi = 0;
+ for (float y = p_min.y + grid_off.y; y < p_max.y; y += grid_step, yi++)
+ {
+ float y1 = ImClamp(y, p_min.y, p_max.y), y2 = ImMin(y + grid_step, p_max.y);
+ if (y2 <= y1)
+ continue;
+ for (float x = p_min.x + grid_off.x + (yi & 1) * grid_step; x < p_max.x; x += grid_step * 2.0f)
+ {
+ float x1 = ImClamp(x, p_min.x, p_max.x), x2 = ImMin(x + grid_step, p_max.x);
+ if (x2 <= x1)
+ continue;
+ ImDrawFlags cell_flags = ImDrawFlags_RoundCornersNone;
+ if (y1 <= p_min.y) { if (x1 <= p_min.x) cell_flags |= ImDrawFlags_RoundCornersTopLeft; if (x2 >= p_max.x) cell_flags |= ImDrawFlags_RoundCornersTopRight; }
+ if (y2 >= p_max.y) { if (x1 <= p_min.x) cell_flags |= ImDrawFlags_RoundCornersBottomLeft; if (x2 >= p_max.x) cell_flags |= ImDrawFlags_RoundCornersBottomRight; }
+
+ // Combine flags
+ cell_flags = (flags == ImDrawFlags_RoundCornersNone || cell_flags == ImDrawFlags_RoundCornersNone) ? ImDrawFlags_RoundCornersNone : (cell_flags & flags);
+ draw_list->AddRectFilled(ImVec2(x1, y1), ImVec2(x2, y2), col_bg2, rounding, cell_flags);
+ }
+ }
+ }
+ else
+ {
+ draw_list->AddRectFilled(p_min, p_max, col, rounding, flags);
+ }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Decompression code
+//-----------------------------------------------------------------------------
+// Compressed with stb_compress() then converted to a C array and encoded as base85.
+// Use the program in misc/fonts/binary_to_compressed_c.cpp to create the array from a TTF file.
+// The purpose of encoding as base85 instead of "0x00,0x01,..." style is only save on _source code_ size.
+// Decompression from stb.h (public domain) by Sean Barrett https://github.com/nothings/stb/blob/master/stb.h
+//-----------------------------------------------------------------------------
+
+static unsigned int stb_decompress_length(const unsigned char *input)
+{
+ return (input[8] << 24) + (input[9] << 16) + (input[10] << 8) + input[11];
+}
+
+static unsigned char *stb__barrier_out_e, *stb__barrier_out_b;
+static const unsigned char *stb__barrier_in_b;
+static unsigned char *stb__dout;
+static void stb__match(const unsigned char *data, unsigned int length)
+{
+ // INVERSE of memmove... write each byte before copying the next...
+ IM_ASSERT(stb__dout + length <= stb__barrier_out_e);
+ if (stb__dout + length > stb__barrier_out_e) { stb__dout += length; return; }
+ if (data < stb__barrier_out_b) { stb__dout = stb__barrier_out_e+1; return; }
+ while (length--) *stb__dout++ = *data++;
+}
+
+static void stb__lit(const unsigned char *data, unsigned int length)
+{
+ IM_ASSERT(stb__dout + length <= stb__barrier_out_e);
+ if (stb__dout + length > stb__barrier_out_e) { stb__dout += length; return; }
+ if (data < stb__barrier_in_b) { stb__dout = stb__barrier_out_e+1; return; }
+ memcpy(stb__dout, data, length);
+ stb__dout += length;
+}
+
+#define stb__in2(x) ((i[x] << 8) + i[(x)+1])
+#define stb__in3(x) ((i[x] << 16) + stb__in2((x)+1))
+#define stb__in4(x) ((i[x] << 24) + stb__in3((x)+1))
+
+static const unsigned char *stb_decompress_token(const unsigned char *i)
+{
+ if (*i >= 0x20) { // use fewer if's for cases that expand small
+ if (*i >= 0x80) stb__match(stb__dout-i[1]-1, i[0] - 0x80 + 1), i += 2;
+ else if (*i >= 0x40) stb__match(stb__dout-(stb__in2(0) - 0x4000 + 1), i[2]+1), i += 3;
+ else /* *i >= 0x20 */ stb__lit(i+1, i[0] - 0x20 + 1), i += 1 + (i[0] - 0x20 + 1);
+ } else { // more ifs for cases that expand large, since overhead is amortized
+ if (*i >= 0x18) stb__match(stb__dout-(stb__in3(0) - 0x180000 + 1), i[3]+1), i += 4;
+ else if (*i >= 0x10) stb__match(stb__dout-(stb__in3(0) - 0x100000 + 1), stb__in2(3)+1), i += 5;
+ else if (*i >= 0x08) stb__lit(i+2, stb__in2(0) - 0x0800 + 1), i += 2 + (stb__in2(0) - 0x0800 + 1);
+ else if (*i == 0x07) stb__lit(i+3, stb__in2(1) + 1), i += 3 + (stb__in2(1) + 1);
+ else if (*i == 0x06) stb__match(stb__dout-(stb__in3(1)+1), i[4]+1), i += 5;
+ else if (*i == 0x04) stb__match(stb__dout-(stb__in3(1)+1), stb__in2(4)+1), i += 6;
+ }
+ return i;
+}
+
+static unsigned int stb_adler32(unsigned int adler32, unsigned char *buffer, unsigned int buflen)
+{
+ const unsigned long ADLER_MOD = 65521;
+ unsigned long s1 = adler32 & 0xffff, s2 = adler32 >> 16;
+ unsigned long blocklen = buflen % 5552;
+
+ unsigned long i;
+ while (buflen) {
+ for (i=0; i + 7 < blocklen; i += 8) {
+ s1 += buffer[0], s2 += s1;
+ s1 += buffer[1], s2 += s1;
+ s1 += buffer[2], s2 += s1;
+ s1 += buffer[3], s2 += s1;
+ s1 += buffer[4], s2 += s1;
+ s1 += buffer[5], s2 += s1;
+ s1 += buffer[6], s2 += s1;
+ s1 += buffer[7], s2 += s1;
+
+ buffer += 8;
+ }
+
+ for (; i < blocklen; ++i)
+ s1 += *buffer++, s2 += s1;
+
+ s1 %= ADLER_MOD, s2 %= ADLER_MOD;
+ buflen -= blocklen;
+ blocklen = 5552;
+ }
+ return (unsigned int)(s2 << 16) + (unsigned int)s1;
+}
+
+static unsigned int stb_decompress(unsigned char *output, const unsigned char *i, unsigned int /*length*/)
+{
+ if (stb__in4(0) != 0x57bC0000) return 0;
+ if (stb__in4(4) != 0) return 0; // error! stream is > 4GB
+ const unsigned int olen = stb_decompress_length(i);
+ stb__barrier_in_b = i;
+ stb__barrier_out_e = output + olen;
+ stb__barrier_out_b = output;
+ i += 16;
+
+ stb__dout = output;
+ for (;;) {
+ const unsigned char *old_i = i;
+ i = stb_decompress_token(i);
+ if (i == old_i) {
+ if (*i == 0x05 && i[1] == 0xfa) {
+ IM_ASSERT(stb__dout == output + olen);
+ if (stb__dout != output + olen) return 0;
+ if (stb_adler32(1, output, olen) != (unsigned int) stb__in4(2))
+ return 0;
+ return olen;
+ } else {
+ IM_ASSERT(0); /* NOTREACHED */
+ return 0;
+ }
+ }
+ IM_ASSERT(stb__dout <= output + olen);
+ if (stb__dout > output + olen)
+ return 0;
+ }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Default font data (ProggyClean.ttf)
+//-----------------------------------------------------------------------------
+// ProggyClean.ttf
+// Copyright (c) 2004, 2005 Tristan Grimmer
+// MIT license (see License.txt in http://www.upperbounds.net/download/ProggyClean.ttf.zip)
+// Download and more information at http://upperbounds.net
+//-----------------------------------------------------------------------------
+// File: 'ProggyClean.ttf' (41208 bytes)
+// Exported using misc/fonts/binary_to_compressed_c.cpp (with compression + base85 string encoding).
+// The purpose of encoding as base85 instead of "0x00,0x01,..." style is only save on _source code_ size.
+//-----------------------------------------------------------------------------
+static const char proggy_clean_ttf_compressed_data_base85[11980 + 1] =
+ "7])#######hV0qs'/###[),##/l:$#Q6>##5[n42>c-TH`->>#/e>11NNV=Bv(*:.F?uu#(gRU.o0XGH`$vhLG1hxt9?W`#,5LsCp#-i>.r$<$6pD>Lb';9Crc6tgXmKVeU2cD4Eo3R/"
+ "2*>]b(MC;$jPfY.;h^`IWM9<Lh2TlS+f-s$o6Q<BWH`YiU.xfLq$N;$0iR/GX:U(jcW2p/W*q?-qmnUCI;jHSAiFWM.R*kU@C=GH?a9wp8f$e.-4^Qg1)Q-GL(lf(r/7GrRgwV%MS=C#"
+ "`8ND>Qo#t'X#(v#Y9w0#1D$CIf;W'#pWUPXOuxXuU(H9M(1<q-UE31#^-V'8IRUo7Qf./L>=Ke$$'5F%)]0^#0X@U.a<r:QLtFsLcL6##lOj)#.Y5<-R&KgLwqJfLgN&;Q?gI^#DY2uL"
+ "i@^rMl9t=cWq6##weg>$FBjVQTSDgEKnIS7EM9>ZY9w0#L;>>#Mx&4Mvt//L[MkA#W@lK.N'[0#7RL_&#w+F%HtG9M#XL`N&.,GM4Pg;-<nLENhvx>-VsM.M0rJfLH2eTM`*oJMHRC`N"
+ "kfimM2J,W-jXS:)r0wK#@Fge$U>`w'N7G#$#fB#$E^$#:9:hk+eOe--6x)F7*E%?76%^GMHePW-Z5l'&GiF#$956:rS?dA#fiK:)Yr+`&#0j@'DbG&#^$PG.Ll+DNa<XCMKEV*N)LN/N"
+ "*b=%Q6pia-Xg8I$<MR&,VdJe$<(7G;Ckl'&hF;;$<_=X(b.RS%%)###MPBuuE1V:v&cX&#2m#(&cV]`k9OhLMbn%s$G2,B$BfD3X*sp5#l,$R#]x_X1xKX%b5U*[r5iMfUo9U`N99hG)"
+ "tm+/Us9pG)XPu`<0s-)WTt(gCRxIg(%6sfh=ktMKn3j)<6<b5Sk_/0(^]AaN#(p/L>&VZ>1i%h1S9u5o@YaaW$e+b<TWFn/Z:Oh(Cx2$lNEoN^e)#CFY@@I;BOQ*sRwZtZxRcU7uW6CX"
+ "ow0i(?$Q[cjOd[P4d)]>ROPOpxTO7Stwi1::iB1q)C_=dV26J;2,]7op$]uQr@_V7$q^%lQwtuHY]=DX,n3L#0PHDO4f9>dC@O>HBuKPpP*E,N+b3L#lpR/MrTEH.IAQk.a>D[.e;mc."
+ "x]Ip.PH^'/aqUO/$1WxLoW0[iLA<QT;5HKD+@qQ'NQ(3_PLhE48R.qAPSwQ0/WK?Z,[x?-J;jQTWA0X@KJ(_Y8N-:/M74:/-ZpKrUss?d#dZq]DAbkU*JqkL+nwX@@47`5>w=4h(9.`G"
+ "CRUxHPeR`5Mjol(dUWxZa(>STrPkrJiWx`5U7F#.g*jrohGg`cg:lSTvEY/EV_7H4Q9[Z%cnv;JQYZ5q.l7Zeas:HOIZOB?G<Nald$qs]@]L<J7bR*>gv:[7MI2k).'2($5FNP&EQ(,)"
+ "U]W]+fh18.vsai00);D3@4ku5P?DP8aJt+;qUM]=+b'8@;mViBKx0DE[-auGl8:PJ&Dj+M6OC]O^((##]`0i)drT;-7X`=-H3[igUnPG-NZlo.#k@h#=Ork$m>a>$-?Tm$UV(?#P6YY#"
+ "'/###xe7q.73rI3*pP/$1>s9)W,JrM7SN]'/4C#v$U`0#V.[0>xQsH$fEmPMgY2u7Kh(G%siIfLSoS+MK2eTM$=5,M8p`A.;_R%#u[K#$x4AG8.kK/HSB==-'Ie/QTtG?-.*^N-4B/ZM"
+ "_3YlQC7(p7q)&](`6_c)$/*JL(L-^(]$wIM`dPtOdGA,U3:w2M-0<q-]L_?^)1vw'.,MRsqVr.L;aN&#/EgJ)PBc[-f>+WomX2u7lqM2iEumMTcsF?-aT=Z-97UEnXglEn1K-bnEO`gu"
+ "Ft(c%=;Am_Qs@jLooI&NX;]0#j4#F14;gl8-GQpgwhrq8'=l_f-b49'UOqkLu7-##oDY2L(te+Mch&gLYtJ,MEtJfLh'x'M=$CS-ZZ%P]8bZ>#S?YY#%Q&q'3^Fw&?D)UDNrocM3A76/"
+ "/oL?#h7gl85[qW/NDOk%16ij;+:1a'iNIdb-ou8.P*w,v5#EI$TWS>Pot-R*H'-SEpA:g)f+O$%%`kA#G=8RMmG1&O`>to8bC]T&$,n.LoO>29sp3dt-52U%VM#q7'DHpg+#Z9%H[K<L"
+ "%a2E-grWVM3@2=-k22tL]4$##6We'8UJCKE[d_=%wI;'6X-GsLX4j^SgJ$##R*w,vP3wK#iiW&#*h^D&R?jp7+/u&#(AP##XU8c$fSYW-J95_-Dp[g9wcO&#M-h1OcJlc-*vpw0xUX&#"
+ "OQFKNX@QI'IoPp7nb,QU//MQ&ZDkKP)X<WSVL(68uVl&#c'[0#(s1X&xm$Y%B7*K:eDA323j998GXbA#pwMs-jgD$9QISB-A_(aN4xoFM^@C58D0+Q+q3n0#3U1InDjF682-SjMXJK)("
+ "h$hxua_K]ul92%'BOU&#BRRh-slg8KDlr:%L71Ka:.A;%YULjDPmL<LYs8i#XwJOYaKPKc1h:'9Ke,g)b),78=I39B;xiY$bgGw-&.Zi9InXDuYa%G*f2Bq7mn9^#p1vv%#(Wi-;/Z5h"
+ "o;#2:;%d&#x9v68C5g?ntX0X)pT`;%pB3q7mgGN)3%(P8nTd5L7GeA-GL@+%J3u2:(Yf>et`e;)f#Km8&+DC$I46>#Kr]]u-[=99tts1.qb#q72g1WJO81q+eN'03'eM>&1XxY-caEnO"
+ "j%2n8)),?ILR5^.Ibn<-X-Mq7[a82Lq:F&#ce+S9wsCK*x`569E8ew'He]h:sI[2LM$[guka3ZRd6:t%IG:;$%YiJ:Nq=?eAw;/:nnDq0(CYcMpG)qLN4$##&J<j$UpK<Q4a1]MupW^-"
+ "sj_$%[HK%'F####QRZJ::Y3EGl4'@%FkiAOg#p[##O`gukTfBHagL<LHw%q&OV0##F=6/:chIm0@eCP8X]:kFI%hl8hgO@RcBhS-@Qb$%+m=hPDLg*%K8ln(wcf3/'DW-$.lR?n[nCH-"
+ "eXOONTJlh:.RYF%3'p6sq:UIMA945&^HFS87@$EP2iG<-lCO$%c`uKGD3rC$x0BL8aFn--`ke%#HMP'vh1/R&O_J9'um,.<tx[@%wsJk&bUT2`0uMv7gg#qp/ij.L56'hl;.s5CUrxjO"
+ "M7-##.l+Au'A&O:-T72L]P`&=;ctp'XScX*rU.>-XTt,%OVU4)S1+R-#dg0/Nn?Ku1^0f$B*P:Rowwm-`0PKjYDDM'3]d39VZHEl4,.j']Pk-M.h^&:0FACm$maq-&sgw0t7/6(^xtk%"
+ "LuH88Fj-ekm>GA#_>568x6(OFRl-IZp`&b,_P'$M<Jnq79VsJW/mWS*PUiq76;]/NM_>hLbxfc$mj`,O;&%W2m`Zh:/)Uetw:aJ%]K9h:TcF]u_-Sj9,VK3M.*'&0D[Ca]J9gp8,kAW]"
+ "%(?A%R$f<->Zts'^kn=-^@c4%-pY6qI%J%1IGxfLU9CP8cbPlXv);C=b),<2mOvP8up,UVf3839acAWAW-W?#ao/^#%KYo8fRULNd2.>%m]UK:n%r$'sw]J;5pAoO_#2mO3n,'=H5(et"
+ "Hg*`+RLgv>=4U8guD$I%D:W>-r5V*%j*W:Kvej.Lp$<M-SGZ':+Q_k+uvOSLiEo(<aD/K<CCc`'Lx>'?;++O'>()jLR-^u68PHm8ZFWe+ej8h:9r6L*0//c&iH&R8pRbA#Kjm%upV1g:"
+ "a_#Ur7FuA#(tRh#.Y5K+@?3<-8m0$PEn;J:rh6?I6uG<-`wMU'ircp0LaE_OtlMb&1#6T.#FDKu#1Lw%u%+GM+X'e?YLfjM[VO0MbuFp7;>Q&#WIo)0@F%q7c#4XAXN-U&VB<HFF*qL("
+ "$/V,;(kXZejWO`<[5?\?ewY(*9=%wDc;,u<'9t3W-(H1th3+G]ucQ]kLs7df($/*JL]@*t7Bu_G3_7mp7<iaQjO@.kLg;x3B0lqp7Hf,^Ze7-##@/c58Mo(3;knp0%)A7?-W+eI'o8)b<"
+ "nKnw'Ho8C=Y>pqB>0ie&jhZ[?iLR@@_AvA-iQC(=ksRZRVp7`.=+NpBC%rh&3]R:8XDmE5^V8O(x<<aG/1N$#FX$0V5Y6x'aErI3I$7x%E`v<-BY,)%-?Psf*l?%C3.mM(=/M0:JxG'?"
+ "7WhH%o'a<-80g0NBxoO(GH<dM]n.+%q@jH?f.UsJ2Ggs&4<-e47&Kl+f//9@`b+?.TeN_&B8Ss?v;^Trk;f#YvJkl&w$]>-+k?'(<S:68tq*WoDfZu';mM?8X[ma8W%*`-=;D.(nc7/;"
+ ")g:T1=^J$&BRV(-lTmNB6xqB[@0*o.erM*<SWF]u2=st-*(6v>^](H.aREZSi,#1:[IXaZFOm<-ui#qUq2$##Ri;u75OK#(RtaW-K-F`S+cF]uN`-KMQ%rP/Xri.LRcB##=YL3BgM/3M"
+ "D?@f&1'BW-)Ju<L25gl8uhVm1hL$##*8###'A3/LkKW+(^rWX?5W_8g)a(m&K8P>#bmmWCMkk&#TR`C,5d>g)F;t,4:@_l8G/5h4vUd%&%950:VXD'QdWoY-F$BtUwmfe$YqL'8(PWX("
+ "P?^@Po3$##`MSs?DWBZ/S>+4%>fX,VWv/w'KD`LP5IbH;rTV>n3cEK8U#bX]l-/V+^lj3;vlMb&[5YQ8#pekX9JP3XUC72L,,?+Ni&co7ApnO*5NK,((W-i:$,kp'UDAO(G0Sq7MVjJs"
+ "bIu)'Z,*[>br5fX^:FPAWr-m2KgL<LUN098kTF&#lvo58=/vjDo;.;)Ka*hLR#/k=rKbxuV`>Q_nN6'8uTG&#1T5g)uLv:873UpTLgH+#FgpH'_o1780Ph8KmxQJ8#H72L4@768@Tm&Q"
+ "h4CB/5OvmA&,Q&QbUoi$a_%3M01H)4x7I^&KQVgtFnV+;[Pc>[m4k//,]1?#`VY[Jr*3&&slRfLiVZJ:]?=K3Sw=[$=uRB?3xk48@aeg<Z'<$#4H)6,>e0jT6'N#(q%.O=?2S]u*(m<-"
+ "V8J'(1)G][68hW$5'q[GC&5j`TE?m'esFGNRM)j,ffZ?-qx8;->g4t*:CIP/[Qap7/9'#(1sao7w-.qNUdkJ)tCF&#B^;xGvn2r9FEPFFFcL@.iFNkTve$m%#QvQS8U@)2Z+3K:AKM5i"
+ "sZ88+dKQ)W6>J%CL<KE>`.d*(B`-n8D9oK<Up]c$X$(,)M8Zt7/[rdkqTgl-0cuGMv'?>-XV1q['-5k'cAZ69e;D_?$ZPP&s^+7])$*$#@QYi9,5P&#9r+$%CE=68>K8r0=dSC%%(@p7"
+ ".m7jilQ02'0-VWAg<a/''3u.=4L$Y)6k/K:_[3=&jvL<L0C/2'v:^;-DIBW,B4E68:kZ;%?8(Q8BH=kO65BW?xSG&#@uU,DS*,?.+(o(#1vCS8#CHF>TlGW'b)Tq7VT9q^*^$$.:&N@@"
+ "$&)WHtPm*5_rO0&e%K&#-30j(E4#'Zb.o/(Tpm$>K'f@[PvFl,hfINTNU6u'0pao7%XUp9]5.>%h`8_=VYbxuel.NTSsJfLacFu3B'lQSu/m6-Oqem8T+oE--$0a/k]uj9EwsG>%veR*"
+ "hv^BFpQj:K'#SJ,sB-'#](j.Lg92rTw-*n%@/;39rrJF,l#qV%OrtBeC6/,;qB3ebNW[?,Hqj2L.1NP&GjUR=1D8QaS3Up&@*9wP?+lo7b?@%'k4`p0Z$22%K3+iCZj?XJN4Nm&+YF]u"
+ "@-W$U%VEQ/,,>>#)D<h#`)h0:<Q6909ua+&VU%n2:cG3FJ-%@Bj-DgLr`Hw&HAKjKjseK</xKT*)B,N9X3]krc12t'pgTV(Lv-tL[xg_%=M_q7a^x?7Ubd>#%8cY#YZ?=,`Wdxu/ae&#"
+ "w6)R89tI#6@s'(6Bf7a&?S=^ZI_kS&ai`&=tE72L_D,;^R)7[$s<Eh#c&)q.MXI%#v9ROa5FZO%sF7q7Nwb&#ptUJ:aqJe$Sl68%.D###EC><?-aF&#RNQv>o8lKN%5/$(vdfq7+ebA#"
+ "u1p]ovUKW&Y%q]'>$1@-[xfn$7ZTp7mM,G,Ko7a&Gu%G[RMxJs[0MM%wci.LFDK)(<c`Q8N)jEIF*+?P2a8g%)$q]o2aH8C&<SibC/q,(e:v;-b#6[$NtDZ84Je2KNvB#$P5?tQ3nt(0"
+ "d=j.LQf./Ll33+(;q3L-w=8dX$#WF&uIJ@-bfI>%:_i2B5CsR8&9Z&#=mPEnm0f`<&c)QL5uJ#%u%lJj+D-r;BoF&#4DoS97h5g)E#o:&S4weDF,9^Hoe`h*L+_a*NrLW-1pG_&2UdB8"
+ "6e%B/:=>)N4xeW.*wft-;$'58-ESqr<b?UI(_%@[P46>#U`'6AQ]m&6/`Z>#S?YY#Vc;r7U2&326d=w&H####?TZ`*4?&.MK?LP8Vxg>$[QXc%QJv92.(Db*B)gb*BM9dM*hJMAo*c&#"
+ "b0v=Pjer]$gG&JXDf->'StvU7505l9$AFvgYRI^&<^b68?j#q9QX4SM'RO#&sL1IM.rJfLUAj221]d##DW=m83u5;'bYx,*Sl0hL(W;;$doB&O/TQ:(Z^xBdLjL<Lni;''X.`$#8+1GD"
+ ":k$YUWsbn8ogh6rxZ2Z9]%nd+>V#*8U_72Lh+2Q8Cj0i:6hp&$C/:p(HK>T8Y[gHQ4`4)'$Ab(Nof%V'8hL&#<NEdtg(n'=S1A(Q1/I&4([%dM`,Iu'1:_hL>SfD07&6D<fp8dHM7/g+"
+ "tlPN9J*rKaPct&?'uBCem^jn%9_K)<,C5K3s=5g&GmJb*[SYq7K;TRLGCsM-$$;S%:Y@r7AK0pprpL<Lrh,q7e/%KWK:50I^+m'vi`3?%Zp+<-d+$L-Sv:@.o19n$s0&39;kn;S%BSq*"
+ "$3WoJSCLweV[aZ'MQIjO<7;X-X;&+dMLvu#^UsGEC9WEc[X(wI7#2.(F0jV*eZf<-Qv3J-c+J5AlrB#$p(H68LvEA'q3n0#m,[`*8Ft)FcYgEud]CWfm68,(aLA$@EFTgLXoBq/UPlp7"
+ ":d[/;r_ix=:TF`S5H-b<LI&HY(K=h#)]Lk$K14lVfm:x$H<3^Ql<M`$OhapBnkup'D#L$Pb_`N*g]2e;X/Dtg,bsj&K#2[-:iYr'_wgH)NUIR8a1n#S?Yej'h8^58UbZd+^FKD*T@;6A"
+ "7aQC[K8d-(v6GI$x:T<&'Gp5Uf>@M.*J:;$-rv29'M]8qMv-tLp,'886iaC=Hb*YJoKJ,(j%K=H`K.v9HggqBIiZu'QvBT.#=)0ukruV&.)3=(^1`o*Pj4<-<aN((^7('#Z0wK#5GX@7"
+ "u][`*S^43933A4rl][`*O4CgLEl]v$1Q3AeF37dbXk,.)vj#x'd`;qgbQR%FW,2(?LO=s%Sc68%NP'##Aotl8x=BE#j1UD([3$M(]UI2LX3RpKN@;/#f'f/&_mt&F)XdF<9t4)Qa.*kT"
+ "LwQ'(TTB9.xH'>#MJ+gLq9-##@HuZPN0]u:h7.T..G:;$/Usj(T7`Q8tT72LnYl<-qx8;-HV7Q-&Xdx%1a,hC=0u+HlsV>nuIQL-5<N?)NBS)QN*_I,?&)2'IM%L3I)X((e/dl2&8'<M"
+ ":^#M*Q+[T.Xri.LYS3v%fF`68h;b-X[/En'CR.q7E)p'/kle2HM,u;^%OKC-N+Ll%F9CF<Nf'^#t2L,;27W:0O@6##U6W7:$rJfLWHj$#)woqBefIZ.PK<b*t7ed;p*_m;4ExK#h@&]>"
+ "_>@kXQtMacfD.m-VAb8;IReM3$wf0''hra*so568'Ip&vRs849'MRYSp%:t:h5qSgwpEr$B>Q,;s(C#$)`svQuF$##-D,##,g68@2[T;.XSdN9Qe)rpt._K-#5wF)sP'##p#C0c%-Gb%"
+ "hd+<-j'Ai*x&&HMkT]C'OSl##5RG[JXaHN;d'uA#x._U;.`PU@(Z3dt4r152@:v,'R.Sj'w#0<-;kPI)FfJ&#AYJ&#//)>-k=m=*XnK$>=)72L]0I%>.G690a:$##<,);?;72#?x9+d;"
+ "^V'9;jY@;)br#q^YQpx:X#Te$Z^'=-=bGhLf:D6&bNwZ9-ZD#n^9HhLMr5G;']d&6'wYmTFmL<LD)F^%[tC'8;+9E#C$g%#5Y>q9wI>P(9mI[>kC-ekLC/R&CH+s'B;K-M6$EB%is00:"
+ "+A4[7xks.LrNk0&E)wILYF@2L'0Nb$+pv<(2.768/FrY&h$^3i&@+G%JT'<-,v`3;_)I9M^AE]CN?Cl2AZg+%4iTpT3<n-&%H%b<FDj2M<hH=&Eh<2Len$b*aTX=-8QxN)k11IM1c^j%"
+ "9s<L<NFSo)B?+<-(GxsF,^-Eh@$4dXhN$+#rxK8'je'D7k`e;)2pYwPA'_p9&@^18ml1^[@g4t*[JOa*[=Qp7(qJ_oOL^('7fB&Hq-:sf,sNj8xq^>$U4O]GKx'm9)b@p7YsvK3w^YR-"
+ "CdQ*:Ir<($u&)#(&?L9Rg3H)4fiEp^iI9O8KnTj,]H?D*r7'M;PwZ9K0E^k&-cpI;.p/6_vwoFMV<->#%Xi.LxVnrU(4&8/P+:hLSKj$#U%]49t'I:rgMi'FL@a:0Y-uA[39',(vbma*"
+ "hU%<-SRF`Tt:542R_VV$p@[p8DV[A,?1839FWdF<TddF<9Ah-6&9tWoDlh]&1SpGMq>Ti1O*H&#(AL8[_P%.M>v^-))qOT*F5Cq0`Ye%+$B6i:7@0IX<N+T+0MlMBPQ*Vj>SsD<U4JHY"
+ "8kD2)2fU/M#$e.)T4,_=8hLim[&);?UkK'-x?'(:siIfL<$pFM`i<?%W(mGDHM%>iWP,##P`%/L<eXi:@Z9C.7o=@(pXdAO/NLQ8lPl+HPOQa8wD8=^GlPa8TKI1CjhsCTSLJM'/Wl>-"
+ "S(qw%sf/@%#B6;/U7K]uZbi^Oc^2n<bhPmUkMw>%t<)'mEVE''n`WnJra$^TKvX5B>;_aSEK',(hwa0:i4G?.Bci.(X[?b*($,=-n<.Q%`(X=?+@Am*Js0&=3bh8K]mL<LoNs'6,'85`"
+ "0?t/'_U59@]ddF<#LdF<eWdF<OuN/45rY<-L@&#+fm>69=Lb,OcZV/);TTm8VI;?%OtJ<(b4mq7M6:u?KRdF<gR@2L=FNU-<b[(9c/ML3m;Z[$oF3g)GAWqpARc=<ROu7cL5l;-[A]%/"
+ "+fsd;l#SafT/f*W]0=O'$(Tb<[)*@e775R-:Yob%g*>l*:xP?Yb.5)%w_I?7uk5JC+FS(m#i'k.'a0i)9<7b'fs'59hq$*5Uhv##pi^8+hIEBF`nvo`;'l0.^S1<-wUK2/Coh58KKhLj"
+ "M=SO*rfO`+qC`W-On.=AJ56>>i2@2LH6A:&5q`?9I3@@'04&p2/LVa*T-4<-i3;M9UvZd+N7>b*eIwg:CC)c<>nO&#<IGe;__.thjZl<%w(Wk2xmp4Q@I#I9,DF]u7-P=.-_:YJ]aS@V"
+ "?6*C()dOp7:WL,b&3Rg/.cmM9&r^>$(>.Z-I&J(Q0Hd5Q%7Co-b`-c<N(6r@ip+AurK<m86QIth*#v;-OBqi+L7wDE-Ir8K['m+DDSLwK&/.?-V%U_%3:qKNu$_b*B-kp7NaD'QdWQPK"
+ "Yq[@>P)hI;*_F]u`Rb[.j8_Q/<&>uu+VsH$sM9TA%?)(vmJ80),P7E>)tjD%2L=-t#fK[%`v=Q8<FfNkgg^oIbah*#8/Qt$F&:K*-(N/'+1vMB,u()-a.VUU*#[e%gAAO(S>WlA2);Sa"
+ ">gXm8YB`1d@K#n]76-a$U,mF<fX]idqd)<3,]J7JmW4`6]uks=4-72L(jEk+:bJ0M^q-8Dm_Z?0olP1C9Sa&H[d&c$ooQUj]Exd*3ZM@-WGW2%s',B-_M%>%Ul:#/'xoFM9QX-$.QN'>"
+ "[%$Z$uF6pA6Ki2O5:8w*vP1<-1`[G,)-m#>0`P&#eb#.3i)rtB61(o'$?X3B</R90;eZ]%Ncq;-Tl]#F>2Qft^ae_5tKL9MUe9b*sLEQ95C&`=G?@Mj=wh*'3E>=-<)Gt*Iw)'QG:`@I"
+ "wOf7&]1i'S01B+Ev/Nac#9S;=;YQpg_6U`*kVY39xK,[/6Aj7:'1Bm-_1EYfa1+o&o4hp7KN_Q(OlIo@S%;jVdn0'1<Vc52=u`3^o-n1'g4v58Hj&6_t7$##?M)c<$bgQ_'SY((-xkA#"
+ "Y(,p'H9rIVY-b,'%bCPF7.J<Up^,(dU1VY*5#WkTU>h19w,WQhLI)3S#f$2(eb,jr*b;3Vw]*7NH%$c4Vs,eD9>XW8?N]o+(*pgC%/72LV-u<Hp,3@e^9UB1J+ak9-TN/mhKPg+AJYd$"
+ "MlvAF_jCK*.O-^(63adMT->W%iewS8W6m2rtCpo'RS1R84=@paTKt)>=%&1[)*vp'u+x,VrwN;&]kuO9JDbg=pO$J*.jVe;u'm0dr9l,<*wMK*Oe=g8lV_KEBFkO'oU]^=[-792#ok,)"
+ "i]lR8qQ2oA8wcRCZ^7w/Njh;?.stX?Q1>S1q4Bn$)K1<-rGdO'$Wr.Lc.CG)$/*JL4tNR/,SVO3,aUw'DJN:)Ss;wGn9A32ijw%FL+Z0Fn.U9;reSq)bmI32U==5ALuG&#Vf1398/pVo"
+ "1*c-(aY168o<`JsSbk-,1N;$>0:OUas(3:8Z972LSfF8eb=c-;>SPw7.6hn3m`9^Xkn(r.qS[0;T%&Qc=+STRxX'q1BNk3&*eu2;&8q$&x>Q#Q7^Tf+6<(d%ZVmj2bDi%.3L2n+4W'$P"
+ "iDDG)g,r%+?,$@?uou5tSe2aN_AQU*<h`e-GI7)?OK2A.d7_c)?wQ5AS@DL3r#7fSkgl6-++D:'A,uq7SvlB$pcpH'q3n0#_%dY#xCpr-l<F0NR@-##FEV6NTF6##$l84N1w?AO>'IAO"
+ "URQ##V^Fv-XFbGM7Fl(N<3DhLGF%q.1rC$#:T__&Pi68%0xi_&[qFJ(77j_&JWoF.V735&T,[R*:xFR*K5>>#`bW-?4Ne_&6Ne_&6Ne_&n`kr-#GJcM6X;uM6X;uM(.a..^2TkL%oR(#"
+ ";u.T%fAr%4tJ8&><1=GHZ_+m9/#H1F^R#SC#*N=BA9(D?v[UiFY>>^8p,KKF.W]L29uLkLlu/+4T<XoIB&hx=T1PcDaB&;HH+-AFr?(m9HZV)FKS8JCw;SD=6[^/DZUL`EUDf]GGlG&>"
+ "w$)F./^n3+rlo+DB;5sIYGNk+i1t-69Jg--0pao7Sm#K)pdHW&;LuDNH@H>#/X-TI(;P>#,Gc>#0Su>#4`1?#8lC?#<xU?#@.i?#D:%@#HF7@#LRI@#P_[@#Tkn@#Xw*A#]-=A#a9OA#"
+ "d<F&#*;G##.GY##2Sl##6`($#:l:$#>xL$#B.`$#F:r$#JF.%#NR@%#R_R%#Vke%#Zww%#_-4&#3^Rh%Sflr-k'MS.o?.5/sWel/wpEM0%3'/1)K^f1-d>G21&v(35>V`39V7A4=onx4"
+ "A1OY5EI0;6Ibgr6M$HS7Q<)58C5w,;WoA*#[%T*#`1g*#d=#+#hI5+#lUG+#pbY+#tnl+#x$),#&1;,#*=M,#.I`,#2Ur,#6b.-#;w[H#iQtA#m^0B#qjBB#uvTB##-hB#'9$C#+E6C#"
+ "/QHC#3^ZC#7jmC#;v)D#?,<D#C8ND#GDaD#KPsD#O]/E#g1A5#KA*1#gC17#MGd;#8(02#L-d3#rWM4#Hga1#,<w0#T.j<#O#'2#CYN1#qa^:#_4m3#o@/=#eG8=#t8J5#`+78#4uI-#"
+ "m3B2#SB[8#Q0@8#i[*9#iOn8#1Nm;#^sN9#qh<9#:=x-#P;K2#$%X9#bC+.#Rg;<#mN=.#MTF.#RZO.#2?)4#Y#(/#[)1/#b;L/#dAU/#0Sv;#lY$0#n`-0#sf60#(F24#wrH0#%/e0#"
+ "TmD<#%JSMFove:CTBEXI:<eh2g)B,3h2^G3i;#d3jD>)4kMYD4lVu`4m`:&5niUA5@(A5BA1]PBB:xlBCC=2CDLXMCEUtiCf&0g2'tN?PGT4CPGT4CPGT4CPGT4CPGT4CPGT4CPGT4CP"
+ "GT4CPGT4CPGT4CPGT4CPGT4CPGT4CP-qekC`.9kEg^+F$kwViFJTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5KTB&5o,^<-28ZI'O?;xp"
+ "O?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xpO?;xp;7q-#lLYI:xvD=#";
+
+static const char* GetDefaultCompressedFontDataTTFBase85()
+{
+ return proggy_clean_ttf_compressed_data_base85;
+}
+
+#endif // #ifndef IMGUI_DISABLE
diff --git a/tests/manual/rhi/shared/imgui/imgui/imgui_internal.h b/tests/manual/rhi/shared/imgui/imgui/imgui_internal.h
new file mode 100644
index 0000000000..81d41fd7b3
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/imgui_internal.h
@@ -0,0 +1,2975 @@
+// dear imgui, v1.88
+// (internal structures/api)
+
+// You may use this file to debug, understand or extend ImGui features but we don't provide any guarantee of forward compatibility!
+// Set:
+// #define IMGUI_DEFINE_MATH_OPERATORS
+// To implement maths operators for ImVec2 (disabled by default to not collide with using IM_VEC2_CLASS_EXTRA along with your own math types+operators)
+
+/*
+
+Index of this file:
+
+// [SECTION] Header mess
+// [SECTION] Forward declarations
+// [SECTION] Context pointer
+// [SECTION] STB libraries includes
+// [SECTION] Macros
+// [SECTION] Generic helpers
+// [SECTION] ImDrawList support
+// [SECTION] Widgets support: flags, enums, data structures
+// [SECTION] Inputs support
+// [SECTION] Clipper support
+// [SECTION] Navigation support
+// [SECTION] Columns support
+// [SECTION] Multi-select support
+// [SECTION] Docking support
+// [SECTION] Viewport support
+// [SECTION] Settings support
+// [SECTION] Metrics, Debug tools
+// [SECTION] Generic context hooks
+// [SECTION] ImGuiContext (main imgui context)
+// [SECTION] ImGuiWindowTempData, ImGuiWindow
+// [SECTION] Tab bar, Tab item support
+// [SECTION] Table support
+// [SECTION] ImGui internal API
+// [SECTION] ImFontAtlas internal API
+// [SECTION] Test Engine specific hooks (imgui_test_engine)
+
+*/
+
+#pragma once
+#ifndef IMGUI_DISABLE
+
+//-----------------------------------------------------------------------------
+// [SECTION] Header mess
+//-----------------------------------------------------------------------------
+
+#ifndef IMGUI_VERSION
+#include "imgui.h"
+#endif
+
+#include <stdio.h> // FILE*, sscanf
+#include <stdlib.h> // NULL, malloc, free, qsort, atoi, atof
+#include <math.h> // sqrtf, fabsf, fmodf, powf, floorf, ceilf, cosf, sinf
+#include <limits.h> // INT_MIN, INT_MAX
+
+// Enable SSE intrinsics if available
+#if (defined __SSE__ || defined __x86_64__ || defined _M_X64) && !defined(IMGUI_DISABLE_SSE)
+#define IMGUI_ENABLE_SSE
+#include <immintrin.h>
+#endif
+
+// Visual Studio warnings
+#ifdef _MSC_VER
+#pragma warning (push)
+#pragma warning (disable: 4251) // class 'xxx' needs to have dll-interface to be used by clients of struct 'xxx' // when IMGUI_API is set to__declspec(dllexport)
+#pragma warning (disable: 26812) // The enum type 'xxx' is unscoped. Prefer 'enum class' over 'enum' (Enum.3). [MSVC Static Analyzer)
+#pragma warning (disable: 26495) // [Static Analyzer] Variable 'XXX' is uninitialized. Always initialize a member variable (type.6).
+#if defined(_MSC_VER) && _MSC_VER >= 1922 // MSVC 2019 16.2 or later
+#pragma warning (disable: 5054) // operator '|': deprecated between enumerations of different types
+#endif
+#endif
+
+// Clang/GCC warnings with -Weverything
+#if defined(__clang__)
+#pragma clang diagnostic push
+#if __has_warning("-Wunknown-warning-option")
+#pragma clang diagnostic ignored "-Wunknown-warning-option" // warning: unknown warning group 'xxx'
+#endif
+#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning: unknown warning group 'xxx'
+#pragma clang diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe // storing and comparing against same constants ok, for ImFloorSigned()
+#pragma clang diagnostic ignored "-Wunused-function" // for stb_textedit.h
+#pragma clang diagnostic ignored "-Wmissing-prototypes" // for stb_textedit.h
+#pragma clang diagnostic ignored "-Wold-style-cast"
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
+#pragma clang diagnostic ignored "-Wdouble-promotion"
+#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" // warning: implicit conversion from 'xxx' to 'float' may lose precision
+#pragma clang diagnostic ignored "-Wmissing-noreturn" // warning: function 'xxx' could be declared with attribute 'noreturn'
+#elif defined(__GNUC__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
+#endif
+
+// Legacy defines
+#ifdef IMGUI_DISABLE_FORMAT_STRING_FUNCTIONS // Renamed in 1.74
+#error Use IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
+#endif
+#ifdef IMGUI_DISABLE_MATH_FUNCTIONS // Renamed in 1.74
+#error Use IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
+#endif
+
+// Enable stb_truetype by default unless FreeType is enabled.
+// You can compile with both by defining both IMGUI_ENABLE_FREETYPE and IMGUI_ENABLE_STB_TRUETYPE together.
+#ifndef IMGUI_ENABLE_FREETYPE
+#define IMGUI_ENABLE_STB_TRUETYPE
+#endif
+
+//-----------------------------------------------------------------------------
+// [SECTION] Forward declarations
+//-----------------------------------------------------------------------------
+
+struct ImBitVector; // Store 1-bit per value
+struct ImRect; // An axis-aligned rectangle (2 points)
+struct ImDrawDataBuilder; // Helper to build a ImDrawData instance
+struct ImDrawListSharedData; // Data shared between all ImDrawList instances
+struct ImGuiColorMod; // Stacked color modifier, backup of modified data so we can restore it
+struct ImGuiContext; // Main Dear ImGui context
+struct ImGuiContextHook; // Hook for extensions like ImGuiTestEngine
+struct ImGuiDataTypeInfo; // Type information associated to a ImGuiDataType enum
+struct ImGuiGroupData; // Stacked storage data for BeginGroup()/EndGroup()
+struct ImGuiInputTextState; // Internal state of the currently focused/edited text input box
+struct ImGuiLastItemData; // Status storage for last submitted items
+struct ImGuiMenuColumns; // Simple column measurement, currently used for MenuItem() only
+struct ImGuiNavItemData; // Result of a gamepad/keyboard directional navigation move query result
+struct ImGuiMetricsConfig; // Storage for ShowMetricsWindow() and DebugNodeXXX() functions
+struct ImGuiNextWindowData; // Storage for SetNextWindow** functions
+struct ImGuiNextItemData; // Storage for SetNextItem** functions
+struct ImGuiOldColumnData; // Storage data for a single column for legacy Columns() api
+struct ImGuiOldColumns; // Storage data for a columns set for legacy Columns() api
+struct ImGuiPopupData; // Storage for current popup stack
+struct ImGuiSettingsHandler; // Storage for one type registered in the .ini file
+struct ImGuiStackSizes; // Storage of stack sizes for debugging/asserting
+struct ImGuiStyleMod; // Stacked style modifier, backup of modified data so we can restore it
+struct ImGuiTabBar; // Storage for a tab bar
+struct ImGuiTabItem; // Storage for a tab item (within a tab bar)
+struct ImGuiTable; // Storage for a table
+struct ImGuiTableColumn; // Storage for one column of a table
+struct ImGuiTableInstanceData; // Storage for one instance of a same table
+struct ImGuiTableTempData; // Temporary storage for one table (one per table in the stack), shared between tables.
+struct ImGuiTableSettings; // Storage for a table .ini settings
+struct ImGuiTableColumnsSettings; // Storage for a column .ini settings
+struct ImGuiWindow; // Storage for one window
+struct ImGuiWindowTempData; // Temporary storage for one window (that's the data which in theory we could ditch at the end of the frame, in practice we currently keep it for each window)
+struct ImGuiWindowSettings; // Storage for a window .ini settings (we keep one of those even if the actual window wasn't instanced during this session)
+
+// Use your programming IDE "Go to definition" facility on the names of the center columns to find the actual flags/enum lists.
+typedef int ImGuiLayoutType; // -> enum ImGuiLayoutType_ // Enum: Horizontal or vertical
+typedef int ImGuiActivateFlags; // -> enum ImGuiActivateFlags_ // Flags: for navigation/focus function (will be for ActivateItem() later)
+typedef int ImGuiDebugLogFlags; // -> enum ImGuiDebugLogFlags_ // Flags: for ShowDebugLogWindow(), g.DebugLogFlags
+typedef int ImGuiItemFlags; // -> enum ImGuiItemFlags_ // Flags: for PushItemFlag()
+typedef int ImGuiItemStatusFlags; // -> enum ImGuiItemStatusFlags_ // Flags: for DC.LastItemStatusFlags
+typedef int ImGuiOldColumnFlags; // -> enum ImGuiOldColumnFlags_ // Flags: for BeginColumns()
+typedef int ImGuiNavHighlightFlags; // -> enum ImGuiNavHighlightFlags_ // Flags: for RenderNavHighlight()
+typedef int ImGuiNavDirSourceFlags; // -> enum ImGuiNavDirSourceFlags_ // Flags: for GetNavInputAmount2d()
+typedef int ImGuiNavMoveFlags; // -> enum ImGuiNavMoveFlags_ // Flags: for navigation requests
+typedef int ImGuiNextItemDataFlags; // -> enum ImGuiNextItemDataFlags_ // Flags: for SetNextItemXXX() functions
+typedef int ImGuiNextWindowDataFlags; // -> enum ImGuiNextWindowDataFlags_// Flags: for SetNextWindowXXX() functions
+typedef int ImGuiScrollFlags; // -> enum ImGuiScrollFlags_ // Flags: for ScrollToItem() and navigation requests
+typedef int ImGuiSeparatorFlags; // -> enum ImGuiSeparatorFlags_ // Flags: for SeparatorEx()
+typedef int ImGuiTextFlags; // -> enum ImGuiTextFlags_ // Flags: for TextEx()
+typedef int ImGuiTooltipFlags; // -> enum ImGuiTooltipFlags_ // Flags: for BeginTooltipEx()
+
+typedef void (*ImGuiErrorLogCallback)(void* user_data, const char* fmt, ...);
+
+//-----------------------------------------------------------------------------
+// [SECTION] Context pointer
+// See implementation of this variable in imgui.cpp for comments and details.
+//-----------------------------------------------------------------------------
+
+#ifndef GImGui
+extern IMGUI_API ImGuiContext* GImGui; // Current implicit context pointer
+#endif
+
+//-------------------------------------------------------------------------
+// [SECTION] STB libraries includes
+//-------------------------------------------------------------------------
+
+namespace ImStb
+{
+
+#undef STB_TEXTEDIT_STRING
+#undef STB_TEXTEDIT_CHARTYPE
+#define STB_TEXTEDIT_STRING ImGuiInputTextState
+#define STB_TEXTEDIT_CHARTYPE ImWchar
+#define STB_TEXTEDIT_GETWIDTH_NEWLINE (-1.0f)
+#define STB_TEXTEDIT_UNDOSTATECOUNT 99
+#define STB_TEXTEDIT_UNDOCHARCOUNT 999
+#include "imstb_textedit.h"
+
+} // namespace ImStb
+
+//-----------------------------------------------------------------------------
+// [SECTION] Macros
+//-----------------------------------------------------------------------------
+
+// Debug Printing Into TTY
+// (since IMGUI_VERSION_NUM >= 18729: IMGUI_DEBUG_LOG was reworked into IMGUI_DEBUG_PRINTF (and removed framecount from it). If you were using a #define IMGUI_DEBUG_LOG please rename)
+#ifndef IMGUI_DEBUG_PRINTF
+#ifndef IMGUI_DISABLE_DEFAULT_FORMAT_FUNCTIONS
+#define IMGUI_DEBUG_PRINTF(_FMT,...) printf(_FMT, __VA_ARGS__)
+#else
+#define IMGUI_DEBUG_PRINTF(_FMT,...)
+#endif
+#endif
+
+// Debug Logging for ShowDebugLogWindow(). This is designed for relatively rare events so please don't spam.
+#define IMGUI_DEBUG_LOG(...) ImGui::DebugLog(__VA_ARGS__);
+#define IMGUI_DEBUG_LOG_ACTIVEID(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventActiveId) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
+#define IMGUI_DEBUG_LOG_FOCUS(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventFocus) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
+#define IMGUI_DEBUG_LOG_POPUP(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventPopup) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
+#define IMGUI_DEBUG_LOG_NAV(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventNav) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
+#define IMGUI_DEBUG_LOG_IO(...) do { if (g.DebugLogFlags & ImGuiDebugLogFlags_EventIO) IMGUI_DEBUG_LOG(__VA_ARGS__); } while (0)
+
+// Static Asserts
+#define IM_STATIC_ASSERT(_COND) static_assert(_COND, "")
+
+// "Paranoid" Debug Asserts are meant to only be enabled during specific debugging/work, otherwise would slow down the code too much.
+// We currently don't have many of those so the effect is currently negligible, but onward intent to add more aggressive ones in the code.
+//#define IMGUI_DEBUG_PARANOID
+#ifdef IMGUI_DEBUG_PARANOID
+#define IM_ASSERT_PARANOID(_EXPR) IM_ASSERT(_EXPR)
+#else
+#define IM_ASSERT_PARANOID(_EXPR)
+#endif
+
+// Error handling
+// Down the line in some frameworks/languages we would like to have a way to redirect those to the programmer and recover from more faults.
+#ifndef IM_ASSERT_USER_ERROR
+#define IM_ASSERT_USER_ERROR(_EXP,_MSG) IM_ASSERT((_EXP) && _MSG) // Recoverable User Error
+#endif
+
+// Misc Macros
+#define IM_PI 3.14159265358979323846f
+#ifdef _WIN32
+#define IM_NEWLINE "\r\n" // Play it nice with Windows users (Update: since 2018-05, Notepad finally appears to support Unix-style carriage returns!)
+#else
+#define IM_NEWLINE "\n"
+#endif
+#define IM_TABSIZE (4)
+#define IM_MEMALIGN(_OFF,_ALIGN) (((_OFF) + ((_ALIGN) - 1)) & ~((_ALIGN) - 1)) // Memory align e.g. IM_ALIGN(0,4)=0, IM_ALIGN(1,4)=4, IM_ALIGN(4,4)=4, IM_ALIGN(5,4)=8
+#define IM_F32_TO_INT8_UNBOUND(_VAL) ((int)((_VAL) * 255.0f + ((_VAL)>=0 ? 0.5f : -0.5f))) // Unsaturated, for display purpose
+#define IM_F32_TO_INT8_SAT(_VAL) ((int)(ImSaturate(_VAL) * 255.0f + 0.5f)) // Saturated, always output 0..255
+#define IM_FLOOR(_VAL) ((float)(int)(_VAL)) // ImFloor() is not inlined in MSVC debug builds
+#define IM_ROUND(_VAL) ((float)(int)((_VAL) + 0.5f)) //
+
+// Enforce cdecl calling convention for functions called by the standard library, in case compilation settings changed the default to e.g. __vectorcall
+#ifdef _MSC_VER
+#define IMGUI_CDECL __cdecl
+#else
+#define IMGUI_CDECL
+#endif
+
+// Warnings
+#if defined(_MSC_VER) && !defined(__clang__)
+#define IM_MSVC_WARNING_SUPPRESS(XXXX) __pragma(warning(suppress: XXXX))
+#else
+#define IM_MSVC_WARNING_SUPPRESS(XXXX)
+#endif
+
+// Debug Tools
+// Use 'Metrics/Debugger->Tools->Item Picker' to break into the call-stack of a specific item.
+// This will call IM_DEBUG_BREAK() which you may redefine yourself. See https://github.com/scottt/debugbreak for more reference.
+#ifndef IM_DEBUG_BREAK
+#if defined (_MSC_VER)
+#define IM_DEBUG_BREAK() __debugbreak()
+#elif defined(__clang__)
+#define IM_DEBUG_BREAK() __builtin_debugtrap()
+#elif defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__))
+#define IM_DEBUG_BREAK() __asm__ volatile("int $0x03")
+#elif defined(__GNUC__) && defined(__thumb__)
+#define IM_DEBUG_BREAK() __asm__ volatile(".inst 0xde01")
+#elif defined(__GNUC__) && defined(__arm__) && !defined(__thumb__)
+#define IM_DEBUG_BREAK() __asm__ volatile(".inst 0xe7f001f0");
+#else
+#define IM_DEBUG_BREAK() IM_ASSERT(0) // It is expected that you define IM_DEBUG_BREAK() into something that will break nicely in a debugger!
+#endif
+#endif // #ifndef IM_DEBUG_BREAK
+
+//-----------------------------------------------------------------------------
+// [SECTION] Generic helpers
+// Note that the ImXXX helpers functions are lower-level than ImGui functions.
+// ImGui functions or the ImGui context are never called/used from other ImXXX functions.
+//-----------------------------------------------------------------------------
+// - Helpers: Hashing
+// - Helpers: Sorting
+// - Helpers: Bit manipulation
+// - Helpers: String
+// - Helpers: Formatting
+// - Helpers: UTF-8 <> wchar conversions
+// - Helpers: ImVec2/ImVec4 operators
+// - Helpers: Maths
+// - Helpers: Geometry
+// - Helper: ImVec1
+// - Helper: ImVec2ih
+// - Helper: ImRect
+// - Helper: ImBitArray
+// - Helper: ImBitVector
+// - Helper: ImSpan<>, ImSpanAllocator<>
+// - Helper: ImPool<>
+// - Helper: ImChunkStream<>
+//-----------------------------------------------------------------------------
+
+// Helpers: Hashing
+IMGUI_API ImGuiID ImHashData(const void* data, size_t data_size, ImU32 seed = 0);
+IMGUI_API ImGuiID ImHashStr(const char* data, size_t data_size = 0, ImU32 seed = 0);
+
+// Helpers: Sorting
+#ifndef ImQsort
+static inline void ImQsort(void* base, size_t count, size_t size_of_element, int(IMGUI_CDECL *compare_func)(void const*, void const*)) { if (count > 1) qsort(base, count, size_of_element, compare_func); }
+#endif
+
+// Helpers: Color Blending
+IMGUI_API ImU32 ImAlphaBlendColors(ImU32 col_a, ImU32 col_b);
+
+// Helpers: Bit manipulation
+static inline bool ImIsPowerOfTwo(int v) { return v != 0 && (v & (v - 1)) == 0; }
+static inline bool ImIsPowerOfTwo(ImU64 v) { return v != 0 && (v & (v - 1)) == 0; }
+static inline int ImUpperPowerOfTwo(int v) { v--; v |= v >> 1; v |= v >> 2; v |= v >> 4; v |= v >> 8; v |= v >> 16; v++; return v; }
+
+// Helpers: String
+IMGUI_API int ImStricmp(const char* str1, const char* str2);
+IMGUI_API int ImStrnicmp(const char* str1, const char* str2, size_t count);
+IMGUI_API void ImStrncpy(char* dst, const char* src, size_t count);
+IMGUI_API char* ImStrdup(const char* str);
+IMGUI_API char* ImStrdupcpy(char* dst, size_t* p_dst_size, const char* str);
+IMGUI_API const char* ImStrchrRange(const char* str_begin, const char* str_end, char c);
+IMGUI_API int ImStrlenW(const ImWchar* str);
+IMGUI_API const char* ImStreolRange(const char* str, const char* str_end); // End end-of-line
+IMGUI_API const ImWchar*ImStrbolW(const ImWchar* buf_mid_line, const ImWchar* buf_begin); // Find beginning-of-line
+IMGUI_API const char* ImStristr(const char* haystack, const char* haystack_end, const char* needle, const char* needle_end);
+IMGUI_API void ImStrTrimBlanks(char* str);
+IMGUI_API const char* ImStrSkipBlank(const char* str);
+static inline bool ImCharIsBlankA(char c) { return c == ' ' || c == '\t'; }
+static inline bool ImCharIsBlankW(unsigned int c) { return c == ' ' || c == '\t' || c == 0x3000; }
+
+// Helpers: Formatting
+IMGUI_API int ImFormatString(char* buf, size_t buf_size, const char* fmt, ...) IM_FMTARGS(3);
+IMGUI_API int ImFormatStringV(char* buf, size_t buf_size, const char* fmt, va_list args) IM_FMTLIST(3);
+IMGUI_API void ImFormatStringToTempBuffer(const char** out_buf, const char** out_buf_end, const char* fmt, ...) IM_FMTARGS(3);
+IMGUI_API void ImFormatStringToTempBufferV(const char** out_buf, const char** out_buf_end, const char* fmt, va_list args) IM_FMTLIST(3);
+IMGUI_API const char* ImParseFormatFindStart(const char* format);
+IMGUI_API const char* ImParseFormatFindEnd(const char* format);
+IMGUI_API const char* ImParseFormatTrimDecorations(const char* format, char* buf, size_t buf_size);
+IMGUI_API void ImParseFormatSanitizeForPrinting(const char* fmt_in, char* fmt_out, size_t fmt_out_size);
+IMGUI_API const char* ImParseFormatSanitizeForScanning(const char* fmt_in, char* fmt_out, size_t fmt_out_size);
+IMGUI_API int ImParseFormatPrecision(const char* format, int default_value);
+
+// Helpers: UTF-8 <> wchar conversions
+IMGUI_API const char* ImTextCharToUtf8(char out_buf[5], unsigned int c); // return out_buf
+IMGUI_API int ImTextStrToUtf8(char* out_buf, int out_buf_size, const ImWchar* in_text, const ImWchar* in_text_end); // return output UTF-8 bytes count
+IMGUI_API int ImTextCharFromUtf8(unsigned int* out_char, const char* in_text, const char* in_text_end); // read one character. return input UTF-8 bytes count
+IMGUI_API int ImTextStrFromUtf8(ImWchar* out_buf, int out_buf_size, const char* in_text, const char* in_text_end, const char** in_remaining = NULL); // return input UTF-8 bytes count
+IMGUI_API int ImTextCountCharsFromUtf8(const char* in_text, const char* in_text_end); // return number of UTF-8 code-points (NOT bytes count)
+IMGUI_API int ImTextCountUtf8BytesFromChar(const char* in_text, const char* in_text_end); // return number of bytes to express one char in UTF-8
+IMGUI_API int ImTextCountUtf8BytesFromStr(const ImWchar* in_text, const ImWchar* in_text_end); // return number of bytes to express string in UTF-8
+
+// Helpers: ImVec2/ImVec4 operators
+// We are keeping those disabled by default so they don't leak in user space, to allow user enabling implicit cast operators between ImVec2 and their own types (using IM_VEC2_CLASS_EXTRA etc.)
+// We unfortunately don't have a unary- operator for ImVec2 because this would needs to be defined inside the class itself.
+#ifdef IMGUI_DEFINE_MATH_OPERATORS
+IM_MSVC_RUNTIME_CHECKS_OFF
+static inline ImVec2 operator*(const ImVec2& lhs, const float rhs) { return ImVec2(lhs.x * rhs, lhs.y * rhs); }
+static inline ImVec2 operator/(const ImVec2& lhs, const float rhs) { return ImVec2(lhs.x / rhs, lhs.y / rhs); }
+static inline ImVec2 operator+(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x + rhs.x, lhs.y + rhs.y); }
+static inline ImVec2 operator-(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x - rhs.x, lhs.y - rhs.y); }
+static inline ImVec2 operator*(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); }
+static inline ImVec2 operator/(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x / rhs.x, lhs.y / rhs.y); }
+static inline ImVec2& operator*=(ImVec2& lhs, const float rhs) { lhs.x *= rhs; lhs.y *= rhs; return lhs; }
+static inline ImVec2& operator/=(ImVec2& lhs, const float rhs) { lhs.x /= rhs; lhs.y /= rhs; return lhs; }
+static inline ImVec2& operator+=(ImVec2& lhs, const ImVec2& rhs) { lhs.x += rhs.x; lhs.y += rhs.y; return lhs; }
+static inline ImVec2& operator-=(ImVec2& lhs, const ImVec2& rhs) { lhs.x -= rhs.x; lhs.y -= rhs.y; return lhs; }
+static inline ImVec2& operator*=(ImVec2& lhs, const ImVec2& rhs) { lhs.x *= rhs.x; lhs.y *= rhs.y; return lhs; }
+static inline ImVec2& operator/=(ImVec2& lhs, const ImVec2& rhs) { lhs.x /= rhs.x; lhs.y /= rhs.y; return lhs; }
+static inline ImVec4 operator+(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x + rhs.x, lhs.y + rhs.y, lhs.z + rhs.z, lhs.w + rhs.w); }
+static inline ImVec4 operator-(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x - rhs.x, lhs.y - rhs.y, lhs.z - rhs.z, lhs.w - rhs.w); }
+static inline ImVec4 operator*(const ImVec4& lhs, const ImVec4& rhs) { return ImVec4(lhs.x * rhs.x, lhs.y * rhs.y, lhs.z * rhs.z, lhs.w * rhs.w); }
+IM_MSVC_RUNTIME_CHECKS_RESTORE
+#endif
+
+// Helpers: File System
+#ifdef IMGUI_DISABLE_FILE_FUNCTIONS
+#define IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
+typedef void* ImFileHandle;
+static inline ImFileHandle ImFileOpen(const char*, const char*) { return NULL; }
+static inline bool ImFileClose(ImFileHandle) { return false; }
+static inline ImU64 ImFileGetSize(ImFileHandle) { return (ImU64)-1; }
+static inline ImU64 ImFileRead(void*, ImU64, ImU64, ImFileHandle) { return 0; }
+static inline ImU64 ImFileWrite(const void*, ImU64, ImU64, ImFileHandle) { return 0; }
+#endif
+#ifndef IMGUI_DISABLE_DEFAULT_FILE_FUNCTIONS
+typedef FILE* ImFileHandle;
+IMGUI_API ImFileHandle ImFileOpen(const char* filename, const char* mode);
+IMGUI_API bool ImFileClose(ImFileHandle file);
+IMGUI_API ImU64 ImFileGetSize(ImFileHandle file);
+IMGUI_API ImU64 ImFileRead(void* data, ImU64 size, ImU64 count, ImFileHandle file);
+IMGUI_API ImU64 ImFileWrite(const void* data, ImU64 size, ImU64 count, ImFileHandle file);
+#else
+#define IMGUI_DISABLE_TTY_FUNCTIONS // Can't use stdout, fflush if we are not using default file functions
+#endif
+IMGUI_API void* ImFileLoadToMemory(const char* filename, const char* mode, size_t* out_file_size = NULL, int padding_bytes = 0);
+
+// Helpers: Maths
+IM_MSVC_RUNTIME_CHECKS_OFF
+// - Wrapper for standard libs functions. (Note that imgui_demo.cpp does _not_ use them to keep the code easy to copy)
+#ifndef IMGUI_DISABLE_DEFAULT_MATH_FUNCTIONS
+#define ImFabs(X) fabsf(X)
+#define ImSqrt(X) sqrtf(X)
+#define ImFmod(X, Y) fmodf((X), (Y))
+#define ImCos(X) cosf(X)
+#define ImSin(X) sinf(X)
+#define ImAcos(X) acosf(X)
+#define ImAtan2(Y, X) atan2f((Y), (X))
+#define ImAtof(STR) atof(STR)
+//#define ImFloorStd(X) floorf(X) // We use our own, see ImFloor() and ImFloorSigned()
+#define ImCeil(X) ceilf(X)
+static inline float ImPow(float x, float y) { return powf(x, y); } // DragBehaviorT/SliderBehaviorT uses ImPow with either float/double and need the precision
+static inline double ImPow(double x, double y) { return pow(x, y); }
+static inline float ImLog(float x) { return logf(x); } // DragBehaviorT/SliderBehaviorT uses ImLog with either float/double and need the precision
+static inline double ImLog(double x) { return log(x); }
+static inline int ImAbs(int x) { return x < 0 ? -x : x; }
+static inline float ImAbs(float x) { return fabsf(x); }
+static inline double ImAbs(double x) { return fabs(x); }
+static inline float ImSign(float x) { return (x < 0.0f) ? -1.0f : (x > 0.0f) ? 1.0f : 0.0f; } // Sign operator - returns -1, 0 or 1 based on sign of argument
+static inline double ImSign(double x) { return (x < 0.0) ? -1.0 : (x > 0.0) ? 1.0 : 0.0; }
+#ifdef IMGUI_ENABLE_SSE
+static inline float ImRsqrt(float x) { return _mm_cvtss_f32(_mm_rsqrt_ss(_mm_set_ss(x))); }
+#else
+static inline float ImRsqrt(float x) { return 1.0f / sqrtf(x); }
+#endif
+static inline double ImRsqrt(double x) { return 1.0 / sqrt(x); }
+#endif
+// - ImMin/ImMax/ImClamp/ImLerp/ImSwap are used by widgets which support variety of types: signed/unsigned int/long long float/double
+// (Exceptionally using templates here but we could also redefine them for those types)
+template<typename T> static inline T ImMin(T lhs, T rhs) { return lhs < rhs ? lhs : rhs; }
+template<typename T> static inline T ImMax(T lhs, T rhs) { return lhs >= rhs ? lhs : rhs; }
+template<typename T> static inline T ImClamp(T v, T mn, T mx) { return (v < mn) ? mn : (v > mx) ? mx : v; }
+template<typename T> static inline T ImLerp(T a, T b, float t) { return (T)(a + (b - a) * t); }
+template<typename T> static inline void ImSwap(T& a, T& b) { T tmp = a; a = b; b = tmp; }
+template<typename T> static inline T ImAddClampOverflow(T a, T b, T mn, T mx) { if (b < 0 && (a < mn - b)) return mn; if (b > 0 && (a > mx - b)) return mx; return a + b; }
+template<typename T> static inline T ImSubClampOverflow(T a, T b, T mn, T mx) { if (b > 0 && (a < mn + b)) return mn; if (b < 0 && (a > mx + b)) return mx; return a - b; }
+// - Misc maths helpers
+static inline ImVec2 ImMin(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x < rhs.x ? lhs.x : rhs.x, lhs.y < rhs.y ? lhs.y : rhs.y); }
+static inline ImVec2 ImMax(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x >= rhs.x ? lhs.x : rhs.x, lhs.y >= rhs.y ? lhs.y : rhs.y); }
+static inline ImVec2 ImClamp(const ImVec2& v, const ImVec2& mn, ImVec2 mx) { return ImVec2((v.x < mn.x) ? mn.x : (v.x > mx.x) ? mx.x : v.x, (v.y < mn.y) ? mn.y : (v.y > mx.y) ? mx.y : v.y); }
+static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, float t) { return ImVec2(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t); }
+static inline ImVec2 ImLerp(const ImVec2& a, const ImVec2& b, const ImVec2& t) { return ImVec2(a.x + (b.x - a.x) * t.x, a.y + (b.y - a.y) * t.y); }
+static inline ImVec4 ImLerp(const ImVec4& a, const ImVec4& b, float t) { return ImVec4(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t, a.z + (b.z - a.z) * t, a.w + (b.w - a.w) * t); }
+static inline float ImSaturate(float f) { return (f < 0.0f) ? 0.0f : (f > 1.0f) ? 1.0f : f; }
+static inline float ImLengthSqr(const ImVec2& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y); }
+static inline float ImLengthSqr(const ImVec4& lhs) { return (lhs.x * lhs.x) + (lhs.y * lhs.y) + (lhs.z * lhs.z) + (lhs.w * lhs.w); }
+static inline float ImInvLength(const ImVec2& lhs, float fail_value) { float d = (lhs.x * lhs.x) + (lhs.y * lhs.y); if (d > 0.0f) return ImRsqrt(d); return fail_value; }
+static inline float ImFloor(float f) { return (float)(int)(f); }
+static inline float ImFloorSigned(float f) { return (float)((f >= 0 || (float)(int)f == f) ? (int)f : (int)f - 1); } // Decent replacement for floorf()
+static inline ImVec2 ImFloor(const ImVec2& v) { return ImVec2((float)(int)(v.x), (float)(int)(v.y)); }
+static inline ImVec2 ImFloorSigned(const ImVec2& v) { return ImVec2(ImFloorSigned(v.x), ImFloorSigned(v.y)); }
+static inline int ImModPositive(int a, int b) { return (a + b) % b; }
+static inline float ImDot(const ImVec2& a, const ImVec2& b) { return a.x * b.x + a.y * b.y; }
+static inline ImVec2 ImRotate(const ImVec2& v, float cos_a, float sin_a) { return ImVec2(v.x * cos_a - v.y * sin_a, v.x * sin_a + v.y * cos_a); }
+static inline float ImLinearSweep(float current, float target, float speed) { if (current < target) return ImMin(current + speed, target); if (current > target) return ImMax(current - speed, target); return current; }
+static inline ImVec2 ImMul(const ImVec2& lhs, const ImVec2& rhs) { return ImVec2(lhs.x * rhs.x, lhs.y * rhs.y); }
+static inline bool ImIsFloatAboveGuaranteedIntegerPrecision(float f) { return f <= -16777216 || f >= 16777216; }
+IM_MSVC_RUNTIME_CHECKS_RESTORE
+
+// Helpers: Geometry
+IMGUI_API ImVec2 ImBezierCubicCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, float t);
+IMGUI_API ImVec2 ImBezierCubicClosestPoint(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, int num_segments); // For curves with explicit number of segments
+IMGUI_API ImVec2 ImBezierCubicClosestPointCasteljau(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, const ImVec2& p4, const ImVec2& p, float tess_tol);// For auto-tessellated curves you can use tess_tol = style.CurveTessellationTol
+IMGUI_API ImVec2 ImBezierQuadraticCalc(const ImVec2& p1, const ImVec2& p2, const ImVec2& p3, float t);
+IMGUI_API ImVec2 ImLineClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& p);
+IMGUI_API bool ImTriangleContainsPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
+IMGUI_API ImVec2 ImTriangleClosestPoint(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p);
+IMGUI_API void ImTriangleBarycentricCoords(const ImVec2& a, const ImVec2& b, const ImVec2& c, const ImVec2& p, float& out_u, float& out_v, float& out_w);
+inline float ImTriangleArea(const ImVec2& a, const ImVec2& b, const ImVec2& c) { return ImFabs((a.x * (b.y - c.y)) + (b.x * (c.y - a.y)) + (c.x * (a.y - b.y))) * 0.5f; }
+IMGUI_API ImGuiDir ImGetDirQuadrantFromDelta(float dx, float dy);
+
+// Helper: ImVec1 (1D vector)
+// (this odd construct is used to facilitate the transition between 1D and 2D, and the maintenance of some branches/patches)
+IM_MSVC_RUNTIME_CHECKS_OFF
+struct ImVec1
+{
+ float x;
+ constexpr ImVec1() : x(0.0f) { }
+ constexpr ImVec1(float _x) : x(_x) { }
+};
+
+// Helper: ImVec2ih (2D vector, half-size integer, for long-term packed storage)
+struct ImVec2ih
+{
+ short x, y;
+ constexpr ImVec2ih() : x(0), y(0) {}
+ constexpr ImVec2ih(short _x, short _y) : x(_x), y(_y) {}
+ constexpr explicit ImVec2ih(const ImVec2& rhs) : x((short)rhs.x), y((short)rhs.y) {}
+};
+
+// Helper: ImRect (2D axis aligned bounding-box)
+// NB: we can't rely on ImVec2 math operators being available here!
+struct IMGUI_API ImRect
+{
+ ImVec2 Min; // Upper-left
+ ImVec2 Max; // Lower-right
+
+ constexpr ImRect() : Min(0.0f, 0.0f), Max(0.0f, 0.0f) {}
+ constexpr ImRect(const ImVec2& min, const ImVec2& max) : Min(min), Max(max) {}
+ constexpr ImRect(const ImVec4& v) : Min(v.x, v.y), Max(v.z, v.w) {}
+ constexpr ImRect(float x1, float y1, float x2, float y2) : Min(x1, y1), Max(x2, y2) {}
+
+ ImVec2 GetCenter() const { return ImVec2((Min.x + Max.x) * 0.5f, (Min.y + Max.y) * 0.5f); }
+ ImVec2 GetSize() const { return ImVec2(Max.x - Min.x, Max.y - Min.y); }
+ float GetWidth() const { return Max.x - Min.x; }
+ float GetHeight() const { return Max.y - Min.y; }
+ float GetArea() const { return (Max.x - Min.x) * (Max.y - Min.y); }
+ ImVec2 GetTL() const { return Min; } // Top-left
+ ImVec2 GetTR() const { return ImVec2(Max.x, Min.y); } // Top-right
+ ImVec2 GetBL() const { return ImVec2(Min.x, Max.y); } // Bottom-left
+ ImVec2 GetBR() const { return Max; } // Bottom-right
+ bool Contains(const ImVec2& p) const { return p.x >= Min.x && p.y >= Min.y && p.x < Max.x && p.y < Max.y; }
+ bool Contains(const ImRect& r) const { return r.Min.x >= Min.x && r.Min.y >= Min.y && r.Max.x <= Max.x && r.Max.y <= Max.y; }
+ bool Overlaps(const ImRect& r) const { return r.Min.y < Max.y && r.Max.y > Min.y && r.Min.x < Max.x && r.Max.x > Min.x; }
+ void Add(const ImVec2& p) { if (Min.x > p.x) Min.x = p.x; if (Min.y > p.y) Min.y = p.y; if (Max.x < p.x) Max.x = p.x; if (Max.y < p.y) Max.y = p.y; }
+ void Add(const ImRect& r) { if (Min.x > r.Min.x) Min.x = r.Min.x; if (Min.y > r.Min.y) Min.y = r.Min.y; if (Max.x < r.Max.x) Max.x = r.Max.x; if (Max.y < r.Max.y) Max.y = r.Max.y; }
+ void Expand(const float amount) { Min.x -= amount; Min.y -= amount; Max.x += amount; Max.y += amount; }
+ void Expand(const ImVec2& amount) { Min.x -= amount.x; Min.y -= amount.y; Max.x += amount.x; Max.y += amount.y; }
+ void Translate(const ImVec2& d) { Min.x += d.x; Min.y += d.y; Max.x += d.x; Max.y += d.y; }
+ void TranslateX(float dx) { Min.x += dx; Max.x += dx; }
+ void TranslateY(float dy) { Min.y += dy; Max.y += dy; }
+ void ClipWith(const ImRect& r) { Min = ImMax(Min, r.Min); Max = ImMin(Max, r.Max); } // Simple version, may lead to an inverted rectangle, which is fine for Contains/Overlaps test but not for display.
+ void ClipWithFull(const ImRect& r) { Min = ImClamp(Min, r.Min, r.Max); Max = ImClamp(Max, r.Min, r.Max); } // Full version, ensure both points are fully clipped.
+ void Floor() { Min.x = IM_FLOOR(Min.x); Min.y = IM_FLOOR(Min.y); Max.x = IM_FLOOR(Max.x); Max.y = IM_FLOOR(Max.y); }
+ bool IsInverted() const { return Min.x > Max.x || Min.y > Max.y; }
+ ImVec4 ToVec4() const { return ImVec4(Min.x, Min.y, Max.x, Max.y); }
+};
+IM_MSVC_RUNTIME_CHECKS_RESTORE
+
+// Helper: ImBitArray
+inline bool ImBitArrayTestBit(const ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); return (arr[n >> 5] & mask) != 0; }
+inline void ImBitArrayClearBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] &= ~mask; }
+inline void ImBitArraySetBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] |= mask; }
+inline void ImBitArraySetBitRange(ImU32* arr, int n, int n2) // Works on range [n..n2)
+{
+ n2--;
+ while (n <= n2)
+ {
+ int a_mod = (n & 31);
+ int b_mod = (n2 > (n | 31) ? 31 : (n2 & 31)) + 1;
+ ImU32 mask = (ImU32)(((ImU64)1 << b_mod) - 1) & ~(ImU32)(((ImU64)1 << a_mod) - 1);
+ arr[n >> 5] |= mask;
+ n = (n + 32) & ~31;
+ }
+}
+
+// Helper: ImBitArray class (wrapper over ImBitArray functions)
+// Store 1-bit per value.
+template<int BITCOUNT, int OFFSET = 0>
+struct ImBitArray
+{
+ ImU32 Storage[(BITCOUNT + 31) >> 5];
+ ImBitArray() { ClearAllBits(); }
+ void ClearAllBits() { memset(Storage, 0, sizeof(Storage)); }
+ void SetAllBits() { memset(Storage, 255, sizeof(Storage)); }
+ bool TestBit(int n) const { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); return ImBitArrayTestBit(Storage, n); }
+ void SetBit(int n) { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); ImBitArraySetBit(Storage, n); }
+ void ClearBit(int n) { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); ImBitArrayClearBit(Storage, n); }
+ void SetBitRange(int n, int n2) { n += OFFSET; n2 += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT && n2 > n && n2 <= BITCOUNT); ImBitArraySetBitRange(Storage, n, n2); } // Works on range [n..n2)
+ bool operator[](int n) const { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); return ImBitArrayTestBit(Storage, n); }
+};
+
+// Helper: ImBitVector
+// Store 1-bit per value.
+struct IMGUI_API ImBitVector
+{
+ ImVector<ImU32> Storage;
+ void Create(int sz) { Storage.resize((sz + 31) >> 5); memset(Storage.Data, 0, (size_t)Storage.Size * sizeof(Storage.Data[0])); }
+ void Clear() { Storage.clear(); }
+ bool TestBit(int n) const { IM_ASSERT(n < (Storage.Size << 5)); return ImBitArrayTestBit(Storage.Data, n); }
+ void SetBit(int n) { IM_ASSERT(n < (Storage.Size << 5)); ImBitArraySetBit(Storage.Data, n); }
+ void ClearBit(int n) { IM_ASSERT(n < (Storage.Size << 5)); ImBitArrayClearBit(Storage.Data, n); }
+};
+
+// Helper: ImSpan<>
+// Pointing to a span of data we don't own.
+template<typename T>
+struct ImSpan
+{
+ T* Data;
+ T* DataEnd;
+
+ // Constructors, destructor
+ inline ImSpan() { Data = DataEnd = NULL; }
+ inline ImSpan(T* data, int size) { Data = data; DataEnd = data + size; }
+ inline ImSpan(T* data, T* data_end) { Data = data; DataEnd = data_end; }
+
+ inline void set(T* data, int size) { Data = data; DataEnd = data + size; }
+ inline void set(T* data, T* data_end) { Data = data; DataEnd = data_end; }
+ inline int size() const { return (int)(ptrdiff_t)(DataEnd - Data); }
+ inline int size_in_bytes() const { return (int)(ptrdiff_t)(DataEnd - Data) * (int)sizeof(T); }
+ inline T& operator[](int i) { T* p = Data + i; IM_ASSERT(p >= Data && p < DataEnd); return *p; }
+ inline const T& operator[](int i) const { const T* p = Data + i; IM_ASSERT(p >= Data && p < DataEnd); return *p; }
+
+ inline T* begin() { return Data; }
+ inline const T* begin() const { return Data; }
+ inline T* end() { return DataEnd; }
+ inline const T* end() const { return DataEnd; }
+
+ // Utilities
+ inline int index_from_ptr(const T* it) const { IM_ASSERT(it >= Data && it < DataEnd); const ptrdiff_t off = it - Data; return (int)off; }
+};
+
+// Helper: ImSpanAllocator<>
+// Facilitate storing multiple chunks into a single large block (the "arena")
+// - Usage: call Reserve() N times, allocate GetArenaSizeInBytes() worth, pass it to SetArenaBasePtr(), call GetSpan() N times to retrieve the aligned ranges.
+template<int CHUNKS>
+struct ImSpanAllocator
+{
+ char* BasePtr;
+ int CurrOff;
+ int CurrIdx;
+ int Offsets[CHUNKS];
+ int Sizes[CHUNKS];
+
+ ImSpanAllocator() { memset(this, 0, sizeof(*this)); }
+ inline void Reserve(int n, size_t sz, int a=4) { IM_ASSERT(n == CurrIdx && n < CHUNKS); CurrOff = IM_MEMALIGN(CurrOff, a); Offsets[n] = CurrOff; Sizes[n] = (int)sz; CurrIdx++; CurrOff += (int)sz; }
+ inline int GetArenaSizeInBytes() { return CurrOff; }
+ inline void SetArenaBasePtr(void* base_ptr) { BasePtr = (char*)base_ptr; }
+ inline void* GetSpanPtrBegin(int n) { IM_ASSERT(n >= 0 && n < CHUNKS && CurrIdx == CHUNKS); return (void*)(BasePtr + Offsets[n]); }
+ inline void* GetSpanPtrEnd(int n) { IM_ASSERT(n >= 0 && n < CHUNKS && CurrIdx == CHUNKS); return (void*)(BasePtr + Offsets[n] + Sizes[n]); }
+ template<typename T>
+ inline void GetSpan(int n, ImSpan<T>* span) { span->set((T*)GetSpanPtrBegin(n), (T*)GetSpanPtrEnd(n)); }
+};
+
+// Helper: ImPool<>
+// Basic keyed storage for contiguous instances, slow/amortized insertion, O(1) indexable, O(Log N) queries by ID over a dense/hot buffer,
+// Honor constructor/destructor. Add/remove invalidate all pointers. Indexes have the same lifetime as the associated object.
+typedef int ImPoolIdx;
+template<typename T>
+struct ImPool
+{
+ ImVector<T> Buf; // Contiguous data
+ ImGuiStorage Map; // ID->Index
+ ImPoolIdx FreeIdx; // Next free idx to use
+ ImPoolIdx AliveCount; // Number of active/alive items (for display purpose)
+
+ ImPool() { FreeIdx = AliveCount = 0; }
+ ~ImPool() { Clear(); }
+ T* GetByKey(ImGuiID key) { int idx = Map.GetInt(key, -1); return (idx != -1) ? &Buf[idx] : NULL; }
+ T* GetByIndex(ImPoolIdx n) { return &Buf[n]; }
+ ImPoolIdx GetIndex(const T* p) const { IM_ASSERT(p >= Buf.Data && p < Buf.Data + Buf.Size); return (ImPoolIdx)(p - Buf.Data); }
+ T* GetOrAddByKey(ImGuiID key) { int* p_idx = Map.GetIntRef(key, -1); if (*p_idx != -1) return &Buf[*p_idx]; *p_idx = FreeIdx; return Add(); }
+ bool Contains(const T* p) const { return (p >= Buf.Data && p < Buf.Data + Buf.Size); }
+ void Clear() { for (int n = 0; n < Map.Data.Size; n++) { int idx = Map.Data[n].val_i; if (idx != -1) Buf[idx].~T(); } Map.Clear(); Buf.clear(); FreeIdx = AliveCount = 0; }
+ T* Add() { int idx = FreeIdx; if (idx == Buf.Size) { Buf.resize(Buf.Size + 1); FreeIdx++; } else { FreeIdx = *(int*)&Buf[idx]; } IM_PLACEMENT_NEW(&Buf[idx]) T(); AliveCount++; return &Buf[idx]; }
+ void Remove(ImGuiID key, const T* p) { Remove(key, GetIndex(p)); }
+ void Remove(ImGuiID key, ImPoolIdx idx) { Buf[idx].~T(); *(int*)&Buf[idx] = FreeIdx; FreeIdx = idx; Map.SetInt(key, -1); AliveCount--; }
+ void Reserve(int capacity) { Buf.reserve(capacity); Map.Data.reserve(capacity); }
+
+ // To iterate a ImPool: for (int n = 0; n < pool.GetMapSize(); n++) if (T* t = pool.TryGetMapData(n)) { ... }
+ // Can be avoided if you know .Remove() has never been called on the pool, or AliveCount == GetMapSize()
+ int GetAliveCount() const { return AliveCount; } // Number of active/alive items in the pool (for display purpose)
+ int GetBufSize() const { return Buf.Size; }
+ int GetMapSize() const { return Map.Data.Size; } // It is the map we need iterate to find valid items, since we don't have "alive" storage anywhere
+ T* TryGetMapData(ImPoolIdx n) { int idx = Map.Data[n].val_i; if (idx == -1) return NULL; return GetByIndex(idx); }
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ int GetSize() { return GetMapSize(); } // For ImPlot: should use GetMapSize() from (IMGUI_VERSION_NUM >= 18304)
+#endif
+};
+
+// Helper: ImChunkStream<>
+// Build and iterate a contiguous stream of variable-sized structures.
+// This is used by Settings to store persistent data while reducing allocation count.
+// We store the chunk size first, and align the final size on 4 bytes boundaries.
+// The tedious/zealous amount of casting is to avoid -Wcast-align warnings.
+template<typename T>
+struct ImChunkStream
+{
+ ImVector<char> Buf;
+
+ void clear() { Buf.clear(); }
+ bool empty() const { return Buf.Size == 0; }
+ int size() const { return Buf.Size; }
+ T* alloc_chunk(size_t sz) { size_t HDR_SZ = 4; sz = IM_MEMALIGN(HDR_SZ + sz, 4u); int off = Buf.Size; Buf.resize(off + (int)sz); ((int*)(void*)(Buf.Data + off))[0] = (int)sz; return (T*)(void*)(Buf.Data + off + (int)HDR_SZ); }
+ T* begin() { size_t HDR_SZ = 4; if (!Buf.Data) return NULL; return (T*)(void*)(Buf.Data + HDR_SZ); }
+ T* next_chunk(T* p) { size_t HDR_SZ = 4; IM_ASSERT(p >= begin() && p < end()); p = (T*)(void*)((char*)(void*)p + chunk_size(p)); if (p == (T*)(void*)((char*)end() + HDR_SZ)) return (T*)0; IM_ASSERT(p < end()); return p; }
+ int chunk_size(const T* p) { return ((const int*)p)[-1]; }
+ T* end() { return (T*)(void*)(Buf.Data + Buf.Size); }
+ int offset_from_ptr(const T* p) { IM_ASSERT(p >= begin() && p < end()); const ptrdiff_t off = (const char*)p - Buf.Data; return (int)off; }
+ T* ptr_from_offset(int off) { IM_ASSERT(off >= 4 && off < Buf.Size); return (T*)(void*)(Buf.Data + off); }
+ void swap(ImChunkStream<T>& rhs) { rhs.Buf.swap(Buf); }
+
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImDrawList support
+//-----------------------------------------------------------------------------
+
+// ImDrawList: Helper function to calculate a circle's segment count given its radius and a "maximum error" value.
+// Estimation of number of circle segment based on error is derived using method described in https://stackoverflow.com/a/2244088/15194693
+// Number of segments (N) is calculated using equation:
+// N = ceil ( pi / acos(1 - error / r) ) where r > 0, error <= r
+// Our equation is significantly simpler that one in the post thanks for choosing segment that is
+// perpendicular to X axis. Follow steps in the article from this starting condition and you will
+// will get this result.
+//
+// Rendering circles with an odd number of segments, while mathematically correct will produce
+// asymmetrical results on the raster grid. Therefore we're rounding N to next even number (7->8, 8->8, 9->10 etc.)
+#define IM_ROUNDUP_TO_EVEN(_V) ((((_V) + 1) / 2) * 2)
+#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN 4
+#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX 512
+#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC(_RAD,_MAXERROR) ImClamp(IM_ROUNDUP_TO_EVEN((int)ImCeil(IM_PI / ImAcos(1 - ImMin((_MAXERROR), (_RAD)) / (_RAD)))), IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MIN, IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_MAX)
+
+// Raw equation from IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC rewritten for 'r' and 'error'.
+#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC_R(_N,_MAXERROR) ((_MAXERROR) / (1 - ImCos(IM_PI / ImMax((float)(_N), IM_PI))))
+#define IM_DRAWLIST_CIRCLE_AUTO_SEGMENT_CALC_ERROR(_N,_RAD) ((1 - ImCos(IM_PI / ImMax((float)(_N), IM_PI))) / (_RAD))
+
+// ImDrawList: Lookup table size for adaptive arc drawing, cover full circle.
+#ifndef IM_DRAWLIST_ARCFAST_TABLE_SIZE
+#define IM_DRAWLIST_ARCFAST_TABLE_SIZE 48 // Number of samples in lookup table.
+#endif
+#define IM_DRAWLIST_ARCFAST_SAMPLE_MAX IM_DRAWLIST_ARCFAST_TABLE_SIZE // Sample index _PathArcToFastEx() for 360 angle.
+
+// Data shared between all ImDrawList instances
+// You may want to create your own instance of this if you want to use ImDrawList completely without ImGui. In that case, watch out for future changes to this structure.
+struct IMGUI_API ImDrawListSharedData
+{
+ ImVec2 TexUvWhitePixel; // UV of white pixel in the atlas
+ ImFont* Font; // Current/default font (optional, for simplified AddText overload)
+ float FontSize; // Current/default font size (optional, for simplified AddText overload)
+ float CurveTessellationTol; // Tessellation tolerance when using PathBezierCurveTo()
+ float CircleSegmentMaxError; // Number of circle segments to use per pixel of radius for AddCircle() etc
+ ImVec4 ClipRectFullscreen; // Value for PushClipRectFullscreen()
+ ImDrawListFlags InitialFlags; // Initial flags at the beginning of the frame (it is possible to alter flags on a per-drawlist basis afterwards)
+
+ // [Internal] Lookup tables
+ ImVec2 ArcFastVtx[IM_DRAWLIST_ARCFAST_TABLE_SIZE]; // Sample points on the quarter of the circle.
+ float ArcFastRadiusCutoff; // Cutoff radius after which arc drawing will fallback to slower PathArcTo()
+ ImU8 CircleSegmentCounts[64]; // Precomputed segment count for given radius before we calculate it dynamically (to avoid calculation overhead)
+ const ImVec4* TexUvLines; // UV of anti-aliased lines in the atlas
+
+ ImDrawListSharedData();
+ void SetCircleTessellationMaxError(float max_error);
+};
+
+struct ImDrawDataBuilder
+{
+ ImVector<ImDrawList*> Layers[2]; // Global layers for: regular, tooltip
+
+ void Clear() { for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) Layers[n].resize(0); }
+ void ClearFreeMemory() { for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) Layers[n].clear(); }
+ int GetDrawListCount() const { int count = 0; for (int n = 0; n < IM_ARRAYSIZE(Layers); n++) count += Layers[n].Size; return count; }
+ IMGUI_API void FlattenIntoSingleLayer();
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Widgets support: flags, enums, data structures
+//-----------------------------------------------------------------------------
+
+// Transient per-window flags, reset at the beginning of the frame. For child window, inherited from parent on first Begin().
+// This is going to be exposed in imgui.h when stabilized enough.
+enum ImGuiItemFlags_
+{
+ ImGuiItemFlags_None = 0,
+ ImGuiItemFlags_NoTabStop = 1 << 0, // false // Disable keyboard tabbing (FIXME: should merge with _NoNav)
+ ImGuiItemFlags_ButtonRepeat = 1 << 1, // false // Button() will return true multiple times based on io.KeyRepeatDelay and io.KeyRepeatRate settings.
+ ImGuiItemFlags_Disabled = 1 << 2, // false // Disable interactions but doesn't affect visuals. See BeginDisabled()/EndDisabled(). See github.com/ocornut/imgui/issues/211
+ ImGuiItemFlags_NoNav = 1 << 3, // false // Disable keyboard/gamepad directional navigation (FIXME: should merge with _NoTabStop)
+ ImGuiItemFlags_NoNavDefaultFocus = 1 << 4, // false // Disable item being a candidate for default focus (e.g. used by title bar items)
+ ImGuiItemFlags_SelectableDontClosePopup = 1 << 5, // false // Disable MenuItem/Selectable() automatically closing their popup window
+ ImGuiItemFlags_MixedValue = 1 << 6, // false // [BETA] Represent a mixed/indeterminate value, generally multi-selection where values differ. Currently only supported by Checkbox() (later should support all sorts of widgets)
+ ImGuiItemFlags_ReadOnly = 1 << 7, // false // [ALPHA] Allow hovering interactions but underlying value is not changed.
+ ImGuiItemFlags_Inputable = 1 << 8 // false // [WIP] Auto-activate input mode when tab focused. Currently only used and supported by a few items before it becomes a generic feature.
+};
+
+// Storage for LastItem data
+enum ImGuiItemStatusFlags_
+{
+ ImGuiItemStatusFlags_None = 0,
+ ImGuiItemStatusFlags_HoveredRect = 1 << 0, // Mouse position is within item rectangle (does NOT mean that the window is in correct z-order and can be hovered!, this is only one part of the most-common IsItemHovered test)
+ ImGuiItemStatusFlags_HasDisplayRect = 1 << 1, // g.LastItemData.DisplayRect is valid
+ ImGuiItemStatusFlags_Edited = 1 << 2, // Value exposed by item was edited in the current frame (should match the bool return value of most widgets)
+ ImGuiItemStatusFlags_ToggledSelection = 1 << 3, // Set when Selectable(), TreeNode() reports toggling a selection. We can't report "Selected", only state changes, in order to easily handle clipping with less issues.
+ ImGuiItemStatusFlags_ToggledOpen = 1 << 4, // Set when TreeNode() reports toggling their open state.
+ ImGuiItemStatusFlags_HasDeactivated = 1 << 5, // Set if the widget/group is able to provide data for the ImGuiItemStatusFlags_Deactivated flag.
+ ImGuiItemStatusFlags_Deactivated = 1 << 6, // Only valid if ImGuiItemStatusFlags_HasDeactivated is set.
+ ImGuiItemStatusFlags_HoveredWindow = 1 << 7, // Override the HoveredWindow test to allow cross-window hover testing.
+ ImGuiItemStatusFlags_FocusedByTabbing = 1 << 8 // Set when the Focusable item just got focused by Tabbing (FIXME: to be removed soon)
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ , // [imgui_tests only]
+ ImGuiItemStatusFlags_Openable = 1 << 20, // Item is an openable (e.g. TreeNode)
+ ImGuiItemStatusFlags_Opened = 1 << 21, //
+ ImGuiItemStatusFlags_Checkable = 1 << 22, // Item is a checkable (e.g. CheckBox, MenuItem)
+ ImGuiItemStatusFlags_Checked = 1 << 23 //
+#endif
+};
+
+// Extend ImGuiInputTextFlags_
+enum ImGuiInputTextFlagsPrivate_
+{
+ // [Internal]
+ ImGuiInputTextFlags_Multiline = 1 << 26, // For internal use by InputTextMultiline()
+ ImGuiInputTextFlags_NoMarkEdited = 1 << 27, // For internal use by functions using InputText() before reformatting data
+ ImGuiInputTextFlags_MergedItem = 1 << 28 // For internal use by TempInputText(), will skip calling ItemAdd(). Require bounding-box to strictly match.
+};
+
+// Extend ImGuiButtonFlags_
+enum ImGuiButtonFlagsPrivate_
+{
+ ImGuiButtonFlags_PressedOnClick = 1 << 4, // return true on click (mouse down event)
+ ImGuiButtonFlags_PressedOnClickRelease = 1 << 5, // [Default] return true on click + release on same item <-- this is what the majority of Button are using
+ ImGuiButtonFlags_PressedOnClickReleaseAnywhere = 1 << 6, // return true on click + release even if the release event is not done while hovering the item
+ ImGuiButtonFlags_PressedOnRelease = 1 << 7, // return true on release (default requires click+release)
+ ImGuiButtonFlags_PressedOnDoubleClick = 1 << 8, // return true on double-click (default requires click+release)
+ ImGuiButtonFlags_PressedOnDragDropHold = 1 << 9, // return true when held into while we are drag and dropping another item (used by e.g. tree nodes, collapsing headers)
+ ImGuiButtonFlags_Repeat = 1 << 10, // hold to repeat
+ ImGuiButtonFlags_FlattenChildren = 1 << 11, // allow interactions even if a child window is overlapping
+ ImGuiButtonFlags_AllowItemOverlap = 1 << 12, // require previous frame HoveredId to either match id or be null before being usable, use along with SetItemAllowOverlap()
+ ImGuiButtonFlags_DontClosePopups = 1 << 13, // disable automatically closing parent popup on press // [UNUSED]
+ //ImGuiButtonFlags_Disabled = 1 << 14, // disable interactions -> use BeginDisabled() or ImGuiItemFlags_Disabled
+ ImGuiButtonFlags_AlignTextBaseLine = 1 << 15, // vertically align button to match text baseline - ButtonEx() only // FIXME: Should be removed and handled by SmallButton(), not possible currently because of DC.CursorPosPrevLine
+ ImGuiButtonFlags_NoKeyModifiers = 1 << 16, // disable mouse interaction if a key modifier is held
+ ImGuiButtonFlags_NoHoldingActiveId = 1 << 17, // don't set ActiveId while holding the mouse (ImGuiButtonFlags_PressedOnClick only)
+ ImGuiButtonFlags_NoNavFocus = 1 << 18, // don't override navigation focus when activated
+ ImGuiButtonFlags_NoHoveredOnFocus = 1 << 19, // don't report as hovered when nav focus is on this item
+ ImGuiButtonFlags_PressedOnMask_ = ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere | ImGuiButtonFlags_PressedOnRelease | ImGuiButtonFlags_PressedOnDoubleClick | ImGuiButtonFlags_PressedOnDragDropHold,
+ ImGuiButtonFlags_PressedOnDefault_ = ImGuiButtonFlags_PressedOnClickRelease
+};
+
+// Extend ImGuiComboFlags_
+enum ImGuiComboFlagsPrivate_
+{
+ ImGuiComboFlags_CustomPreview = 1 << 20 // enable BeginComboPreview()
+};
+
+// Extend ImGuiSliderFlags_
+enum ImGuiSliderFlagsPrivate_
+{
+ ImGuiSliderFlags_Vertical = 1 << 20, // Should this slider be orientated vertically?
+ ImGuiSliderFlags_ReadOnly = 1 << 21
+};
+
+// Extend ImGuiSelectableFlags_
+enum ImGuiSelectableFlagsPrivate_
+{
+ // NB: need to be in sync with last value of ImGuiSelectableFlags_
+ ImGuiSelectableFlags_NoHoldingActiveID = 1 << 20,
+ ImGuiSelectableFlags_SelectOnNav = 1 << 21, // (WIP) Auto-select when moved into. This is not exposed in public API as to handle multi-select and modifiers we will need user to explicitly control focus scope. May be replaced with a BeginSelection() API.
+ ImGuiSelectableFlags_SelectOnClick = 1 << 22, // Override button behavior to react on Click (default is Click+Release)
+ ImGuiSelectableFlags_SelectOnRelease = 1 << 23, // Override button behavior to react on Release (default is Click+Release)
+ ImGuiSelectableFlags_SpanAvailWidth = 1 << 24, // Span all avail width even if we declared less for layout purpose. FIXME: We may be able to remove this (added in 6251d379, 2bcafc86 for menus)
+ ImGuiSelectableFlags_DrawHoveredWhenHeld = 1 << 25, // Always show active when held, even is not hovered. This concept could probably be renamed/formalized somehow.
+ ImGuiSelectableFlags_SetNavIdOnHover = 1 << 26, // Set Nav/Focus ID on mouse hover (used by MenuItem)
+ ImGuiSelectableFlags_NoPadWithHalfSpacing = 1 << 27 // Disable padding each side with ItemSpacing * 0.5f
+};
+
+// Extend ImGuiTreeNodeFlags_
+enum ImGuiTreeNodeFlagsPrivate_
+{
+ ImGuiTreeNodeFlags_ClipLabelForTrailingButton = 1 << 20
+};
+
+enum ImGuiSeparatorFlags_
+{
+ ImGuiSeparatorFlags_None = 0,
+ ImGuiSeparatorFlags_Horizontal = 1 << 0, // Axis default to current layout type, so generally Horizontal unless e.g. in a menu bar
+ ImGuiSeparatorFlags_Vertical = 1 << 1,
+ ImGuiSeparatorFlags_SpanAllColumns = 1 << 2
+};
+
+enum ImGuiTextFlags_
+{
+ ImGuiTextFlags_None = 0,
+ ImGuiTextFlags_NoWidthForLargeClippedText = 1 << 0
+};
+
+enum ImGuiTooltipFlags_
+{
+ ImGuiTooltipFlags_None = 0,
+ ImGuiTooltipFlags_OverridePreviousTooltip = 1 << 0 // Override will clear/ignore previously submitted tooltip (defaults to append)
+};
+
+// FIXME: this is in development, not exposed/functional as a generic feature yet.
+// Horizontal/Vertical enums are fixed to 0/1 so they may be used to index ImVec2
+enum ImGuiLayoutType_
+{
+ ImGuiLayoutType_Horizontal = 0,
+ ImGuiLayoutType_Vertical = 1
+};
+
+enum ImGuiLogType
+{
+ ImGuiLogType_None = 0,
+ ImGuiLogType_TTY,
+ ImGuiLogType_File,
+ ImGuiLogType_Buffer,
+ ImGuiLogType_Clipboard
+};
+
+// X/Y enums are fixed to 0/1 so they may be used to index ImVec2
+enum ImGuiAxis
+{
+ ImGuiAxis_None = -1,
+ ImGuiAxis_X = 0,
+ ImGuiAxis_Y = 1
+};
+
+enum ImGuiPlotType
+{
+ ImGuiPlotType_Lines,
+ ImGuiPlotType_Histogram
+};
+
+enum ImGuiPopupPositionPolicy
+{
+ ImGuiPopupPositionPolicy_Default,
+ ImGuiPopupPositionPolicy_ComboBox,
+ ImGuiPopupPositionPolicy_Tooltip
+};
+
+struct ImGuiDataTypeTempStorage
+{
+ ImU8 Data[8]; // Can fit any data up to ImGuiDataType_COUNT
+};
+
+// Type information associated to one ImGuiDataType. Retrieve with DataTypeGetInfo().
+struct ImGuiDataTypeInfo
+{
+ size_t Size; // Size in bytes
+ const char* Name; // Short descriptive name for the type, for debugging
+ const char* PrintFmt; // Default printf format for the type
+ const char* ScanFmt; // Default scanf format for the type
+};
+
+// Extend ImGuiDataType_
+enum ImGuiDataTypePrivate_
+{
+ ImGuiDataType_String = ImGuiDataType_COUNT + 1,
+ ImGuiDataType_Pointer,
+ ImGuiDataType_ID
+};
+
+// Stacked color modifier, backup of modified data so we can restore it
+struct ImGuiColorMod
+{
+ ImGuiCol Col;
+ ImVec4 BackupValue;
+};
+
+// Stacked style modifier, backup of modified data so we can restore it. Data type inferred from the variable.
+struct ImGuiStyleMod
+{
+ ImGuiStyleVar VarIdx;
+ union { int BackupInt[2]; float BackupFloat[2]; };
+ ImGuiStyleMod(ImGuiStyleVar idx, int v) { VarIdx = idx; BackupInt[0] = v; }
+ ImGuiStyleMod(ImGuiStyleVar idx, float v) { VarIdx = idx; BackupFloat[0] = v; }
+ ImGuiStyleMod(ImGuiStyleVar idx, ImVec2 v) { VarIdx = idx; BackupFloat[0] = v.x; BackupFloat[1] = v.y; }
+};
+
+// Storage data for BeginComboPreview()/EndComboPreview()
+struct IMGUI_API ImGuiComboPreviewData
+{
+ ImRect PreviewRect;
+ ImVec2 BackupCursorPos;
+ ImVec2 BackupCursorMaxPos;
+ ImVec2 BackupCursorPosPrevLine;
+ float BackupPrevLineTextBaseOffset;
+ ImGuiLayoutType BackupLayout;
+
+ ImGuiComboPreviewData() { memset(this, 0, sizeof(*this)); }
+};
+
+// Stacked storage data for BeginGroup()/EndGroup()
+struct IMGUI_API ImGuiGroupData
+{
+ ImGuiID WindowID;
+ ImVec2 BackupCursorPos;
+ ImVec2 BackupCursorMaxPos;
+ ImVec1 BackupIndent;
+ ImVec1 BackupGroupOffset;
+ ImVec2 BackupCurrLineSize;
+ float BackupCurrLineTextBaseOffset;
+ ImGuiID BackupActiveIdIsAlive;
+ bool BackupActiveIdPreviousFrameIsAlive;
+ bool BackupHoveredIdIsAlive;
+ bool EmitItem;
+};
+
+// Simple column measurement, currently used for MenuItem() only.. This is very short-sighted/throw-away code and NOT a generic helper.
+struct IMGUI_API ImGuiMenuColumns
+{
+ ImU32 TotalWidth;
+ ImU32 NextTotalWidth;
+ ImU16 Spacing;
+ ImU16 OffsetIcon; // Always zero for now
+ ImU16 OffsetLabel; // Offsets are locked in Update()
+ ImU16 OffsetShortcut;
+ ImU16 OffsetMark;
+ ImU16 Widths[4]; // Width of: Icon, Label, Shortcut, Mark (accumulators for current frame)
+
+ ImGuiMenuColumns() { memset(this, 0, sizeof(*this)); }
+ void Update(float spacing, bool window_reappearing);
+ float DeclColumns(float w_icon, float w_label, float w_shortcut, float w_mark);
+ void CalcNextTotalWidth(bool update_offsets);
+};
+
+// Internal state of the currently focused/edited text input box
+// For a given item ID, access with ImGui::GetInputTextState()
+struct IMGUI_API ImGuiInputTextState
+{
+ ImGuiID ID; // widget id owning the text state
+ int CurLenW, CurLenA; // we need to maintain our buffer length in both UTF-8 and wchar format. UTF-8 length is valid even if TextA is not.
+ ImVector<ImWchar> TextW; // edit buffer, we need to persist but can't guarantee the persistence of the user-provided buffer. so we copy into own buffer.
+ ImVector<char> TextA; // temporary UTF8 buffer for callbacks and other operations. this is not updated in every code-path! size=capacity.
+ ImVector<char> InitialTextA; // backup of end-user buffer at the time of focus (in UTF-8, unaltered)
+ bool TextAIsValid; // temporary UTF8 buffer is not initially valid before we make the widget active (until then we pull the data from user argument)
+ int BufCapacityA; // end-user buffer capacity
+ float ScrollX; // horizontal scrolling/offset
+ ImStb::STB_TexteditState Stb; // state for stb_textedit.h
+ float CursorAnim; // timer for cursor blink, reset on every user action so the cursor reappears immediately
+ bool CursorFollow; // set when we want scrolling to follow the current cursor position (not always!)
+ bool SelectedAllMouseLock; // after a double-click to select all, we ignore further mouse drags to update selection
+ bool Edited; // edited this frame
+ ImGuiInputTextFlags Flags; // copy of InputText() flags
+
+ ImGuiInputTextState() { memset(this, 0, sizeof(*this)); }
+ void ClearText() { CurLenW = CurLenA = 0; TextW[0] = 0; TextA[0] = 0; CursorClamp(); }
+ void ClearFreeMemory() { TextW.clear(); TextA.clear(); InitialTextA.clear(); }
+ int GetUndoAvailCount() const { return Stb.undostate.undo_point; }
+ int GetRedoAvailCount() const { return STB_TEXTEDIT_UNDOSTATECOUNT - Stb.undostate.redo_point; }
+ void OnKeyPressed(int key); // Cannot be inline because we call in code in stb_textedit.h implementation
+
+ // Cursor & Selection
+ void CursorAnimReset() { CursorAnim = -0.30f; } // After a user-input the cursor stays on for a while without blinking
+ void CursorClamp() { Stb.cursor = ImMin(Stb.cursor, CurLenW); Stb.select_start = ImMin(Stb.select_start, CurLenW); Stb.select_end = ImMin(Stb.select_end, CurLenW); }
+ bool HasSelection() const { return Stb.select_start != Stb.select_end; }
+ void ClearSelection() { Stb.select_start = Stb.select_end = Stb.cursor; }
+ int GetCursorPos() const { return Stb.cursor; }
+ int GetSelectionStart() const { return Stb.select_start; }
+ int GetSelectionEnd() const { return Stb.select_end; }
+ void SelectAll() { Stb.select_start = 0; Stb.cursor = Stb.select_end = CurLenW; Stb.has_preferred_x = 0; }
+};
+
+// Storage for current popup stack
+struct ImGuiPopupData
+{
+ ImGuiID PopupId; // Set on OpenPopup()
+ ImGuiWindow* Window; // Resolved on BeginPopup() - may stay unresolved if user never calls OpenPopup()
+ ImGuiWindow* SourceWindow; // Set on OpenPopup() copy of NavWindow at the time of opening the popup
+ int ParentNavLayer; // Resolved on BeginPopup(). Actually a ImGuiNavLayer type (declared down below), initialized to -1 which is not part of an enum, but serves well-enough as "not any of layers" value
+ int OpenFrameCount; // Set on OpenPopup()
+ ImGuiID OpenParentId; // Set on OpenPopup(), we need this to differentiate multiple menu sets from each others (e.g. inside menu bar vs loose menu items)
+ ImVec2 OpenPopupPos; // Set on OpenPopup(), preferred popup position (typically == OpenMousePos when using mouse)
+ ImVec2 OpenMousePos; // Set on OpenPopup(), copy of mouse position at the time of opening popup
+
+ ImGuiPopupData() { memset(this, 0, sizeof(*this)); ParentNavLayer = OpenFrameCount = -1; }
+};
+
+enum ImGuiNextWindowDataFlags_
+{
+ ImGuiNextWindowDataFlags_None = 0,
+ ImGuiNextWindowDataFlags_HasPos = 1 << 0,
+ ImGuiNextWindowDataFlags_HasSize = 1 << 1,
+ ImGuiNextWindowDataFlags_HasContentSize = 1 << 2,
+ ImGuiNextWindowDataFlags_HasCollapsed = 1 << 3,
+ ImGuiNextWindowDataFlags_HasSizeConstraint = 1 << 4,
+ ImGuiNextWindowDataFlags_HasFocus = 1 << 5,
+ ImGuiNextWindowDataFlags_HasBgAlpha = 1 << 6,
+ ImGuiNextWindowDataFlags_HasScroll = 1 << 7
+};
+
+// Storage for SetNexWindow** functions
+struct ImGuiNextWindowData
+{
+ ImGuiNextWindowDataFlags Flags;
+ ImGuiCond PosCond;
+ ImGuiCond SizeCond;
+ ImGuiCond CollapsedCond;
+ ImVec2 PosVal;
+ ImVec2 PosPivotVal;
+ ImVec2 SizeVal;
+ ImVec2 ContentSizeVal;
+ ImVec2 ScrollVal;
+ bool CollapsedVal;
+ ImRect SizeConstraintRect;
+ ImGuiSizeCallback SizeCallback;
+ void* SizeCallbackUserData;
+ float BgAlphaVal; // Override background alpha
+ ImVec2 MenuBarOffsetMinVal; // (Always on) This is not exposed publicly, so we don't clear it and it doesn't have a corresponding flag (could we? for consistency?)
+
+ ImGuiNextWindowData() { memset(this, 0, sizeof(*this)); }
+ inline void ClearFlags() { Flags = ImGuiNextWindowDataFlags_None; }
+};
+
+enum ImGuiNextItemDataFlags_
+{
+ ImGuiNextItemDataFlags_None = 0,
+ ImGuiNextItemDataFlags_HasWidth = 1 << 0,
+ ImGuiNextItemDataFlags_HasOpen = 1 << 1
+};
+
+struct ImGuiNextItemData
+{
+ ImGuiNextItemDataFlags Flags;
+ float Width; // Set by SetNextItemWidth()
+ ImGuiID FocusScopeId; // Set by SetNextItemMultiSelectData() (!= 0 signify value has been set, so it's an alternate version of HasSelectionData, we don't use Flags for this because they are cleared too early. This is mostly used for debugging)
+ ImGuiCond OpenCond;
+ bool OpenVal; // Set by SetNextItemOpen()
+
+ ImGuiNextItemData() { memset(this, 0, sizeof(*this)); }
+ inline void ClearFlags() { Flags = ImGuiNextItemDataFlags_None; } // Also cleared manually by ItemAdd()!
+};
+
+// Status storage for the last submitted item
+struct ImGuiLastItemData
+{
+ ImGuiID ID;
+ ImGuiItemFlags InFlags; // See ImGuiItemFlags_
+ ImGuiItemStatusFlags StatusFlags; // See ImGuiItemStatusFlags_
+ ImRect Rect; // Full rectangle
+ ImRect NavRect; // Navigation scoring rectangle (not displayed)
+ ImRect DisplayRect; // Display rectangle (only if ImGuiItemStatusFlags_HasDisplayRect is set)
+
+ ImGuiLastItemData() { memset(this, 0, sizeof(*this)); }
+};
+
+struct IMGUI_API ImGuiStackSizes
+{
+ short SizeOfIDStack;
+ short SizeOfColorStack;
+ short SizeOfStyleVarStack;
+ short SizeOfFontStack;
+ short SizeOfFocusScopeStack;
+ short SizeOfGroupStack;
+ short SizeOfItemFlagsStack;
+ short SizeOfBeginPopupStack;
+ short SizeOfDisabledStack;
+
+ ImGuiStackSizes() { memset(this, 0, sizeof(*this)); }
+ void SetToCurrentState();
+ void CompareWithCurrentState();
+};
+
+// Data saved for each window pushed into the stack
+struct ImGuiWindowStackData
+{
+ ImGuiWindow* Window;
+ ImGuiLastItemData ParentLastItemDataBackup;
+ ImGuiStackSizes StackSizesOnBegin; // Store size of various stacks for asserting
+};
+
+struct ImGuiShrinkWidthItem
+{
+ int Index;
+ float Width;
+ float InitialWidth;
+};
+
+struct ImGuiPtrOrIndex
+{
+ void* Ptr; // Either field can be set, not both. e.g. Dock node tab bars are loose while BeginTabBar() ones are in a pool.
+ int Index; // Usually index in a main pool.
+
+ ImGuiPtrOrIndex(void* ptr) { Ptr = ptr; Index = -1; }
+ ImGuiPtrOrIndex(int index) { Ptr = NULL; Index = index; }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Inputs support
+//-----------------------------------------------------------------------------
+
+typedef ImBitArray<ImGuiKey_NamedKey_COUNT, -ImGuiKey_NamedKey_BEGIN> ImBitArrayForNamedKeys;
+
+enum ImGuiKeyPrivate_
+{
+ ImGuiKey_LegacyNativeKey_BEGIN = 0,
+ ImGuiKey_LegacyNativeKey_END = 512,
+ ImGuiKey_Gamepad_BEGIN = ImGuiKey_GamepadStart,
+ ImGuiKey_Gamepad_END = ImGuiKey_GamepadRStickRight + 1
+};
+
+enum ImGuiInputEventType
+{
+ ImGuiInputEventType_None = 0,
+ ImGuiInputEventType_MousePos,
+ ImGuiInputEventType_MouseWheel,
+ ImGuiInputEventType_MouseButton,
+ ImGuiInputEventType_Key,
+ ImGuiInputEventType_Text,
+ ImGuiInputEventType_Focus,
+ ImGuiInputEventType_COUNT
+};
+
+enum ImGuiInputSource
+{
+ ImGuiInputSource_None = 0,
+ ImGuiInputSource_Mouse,
+ ImGuiInputSource_Keyboard,
+ ImGuiInputSource_Gamepad,
+ ImGuiInputSource_Clipboard, // Currently only used by InputText()
+ ImGuiInputSource_Nav, // Stored in g.ActiveIdSource only
+ ImGuiInputSource_COUNT
+};
+
+// FIXME: Structures in the union below need to be declared as anonymous unions appears to be an extension?
+// Using ImVec2() would fail on Clang 'union member 'MousePos' has a non-trivial default constructor'
+struct ImGuiInputEventMousePos { float PosX, PosY; };
+struct ImGuiInputEventMouseWheel { float WheelX, WheelY; };
+struct ImGuiInputEventMouseButton { int Button; bool Down; };
+struct ImGuiInputEventKey { ImGuiKey Key; bool Down; float AnalogValue; };
+struct ImGuiInputEventText { unsigned int Char; };
+struct ImGuiInputEventAppFocused { bool Focused; };
+
+struct ImGuiInputEvent
+{
+ ImGuiInputEventType Type;
+ ImGuiInputSource Source;
+ union
+ {
+ ImGuiInputEventMousePos MousePos; // if Type == ImGuiInputEventType_MousePos
+ ImGuiInputEventMouseWheel MouseWheel; // if Type == ImGuiInputEventType_MouseWheel
+ ImGuiInputEventMouseButton MouseButton; // if Type == ImGuiInputEventType_MouseButton
+ ImGuiInputEventKey Key; // if Type == ImGuiInputEventType_Key
+ ImGuiInputEventText Text; // if Type == ImGuiInputEventType_Text
+ ImGuiInputEventAppFocused AppFocused; // if Type == ImGuiInputEventType_Focus
+ };
+ bool AddedByTestEngine;
+
+ ImGuiInputEvent() { memset(this, 0, sizeof(*this)); }
+};
+
+// FIXME-NAV: Clarify/expose various repeat delay/rate
+enum ImGuiNavReadMode
+{
+ ImGuiNavReadMode_Down,
+ ImGuiNavReadMode_Pressed,
+ ImGuiNavReadMode_Released,
+ ImGuiNavReadMode_Repeat,
+ ImGuiNavReadMode_RepeatSlow,
+ ImGuiNavReadMode_RepeatFast
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Clipper support
+//-----------------------------------------------------------------------------
+
+struct ImGuiListClipperRange
+{
+ int Min;
+ int Max;
+ bool PosToIndexConvert; // Begin/End are absolute position (will be converted to indices later)
+ ImS8 PosToIndexOffsetMin; // Add to Min after converting to indices
+ ImS8 PosToIndexOffsetMax; // Add to Min after converting to indices
+
+ static ImGuiListClipperRange FromIndices(int min, int max) { ImGuiListClipperRange r = { min, max, false, 0, 0 }; return r; }
+ static ImGuiListClipperRange FromPositions(float y1, float y2, int off_min, int off_max) { ImGuiListClipperRange r = { (int)y1, (int)y2, true, (ImS8)off_min, (ImS8)off_max }; return r; }
+};
+
+// Temporary clipper data, buffers shared/reused between instances
+struct ImGuiListClipperData
+{
+ ImGuiListClipper* ListClipper;
+ float LossynessOffset;
+ int StepNo;
+ int ItemsFrozen;
+ ImVector<ImGuiListClipperRange> Ranges;
+
+ ImGuiListClipperData() { memset(this, 0, sizeof(*this)); }
+ void Reset(ImGuiListClipper* clipper) { ListClipper = clipper; StepNo = ItemsFrozen = 0; Ranges.resize(0); }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Navigation support
+//-----------------------------------------------------------------------------
+
+enum ImGuiActivateFlags_
+{
+ ImGuiActivateFlags_None = 0,
+ ImGuiActivateFlags_PreferInput = 1 << 0, // Favor activation that requires keyboard text input (e.g. for Slider/Drag). Default if keyboard is available.
+ ImGuiActivateFlags_PreferTweak = 1 << 1, // Favor activation for tweaking with arrows or gamepad (e.g. for Slider/Drag). Default if keyboard is not available.
+ ImGuiActivateFlags_TryToPreserveState = 1 << 2 // Request widget to preserve state if it can (e.g. InputText will try to preserve cursor/selection)
+};
+
+// Early work-in-progress API for ScrollToItem()
+enum ImGuiScrollFlags_
+{
+ ImGuiScrollFlags_None = 0,
+ ImGuiScrollFlags_KeepVisibleEdgeX = 1 << 0, // If item is not visible: scroll as little as possible on X axis to bring item back into view [default for X axis]
+ ImGuiScrollFlags_KeepVisibleEdgeY = 1 << 1, // If item is not visible: scroll as little as possible on Y axis to bring item back into view [default for Y axis for windows that are already visible]
+ ImGuiScrollFlags_KeepVisibleCenterX = 1 << 2, // If item is not visible: scroll to make the item centered on X axis [rarely used]
+ ImGuiScrollFlags_KeepVisibleCenterY = 1 << 3, // If item is not visible: scroll to make the item centered on Y axis
+ ImGuiScrollFlags_AlwaysCenterX = 1 << 4, // Always center the result item on X axis [rarely used]
+ ImGuiScrollFlags_AlwaysCenterY = 1 << 5, // Always center the result item on Y axis [default for Y axis for appearing window)
+ ImGuiScrollFlags_NoScrollParent = 1 << 6, // Disable forwarding scrolling to parent window if required to keep item/rect visible (only scroll window the function was applied to).
+ ImGuiScrollFlags_MaskX_ = ImGuiScrollFlags_KeepVisibleEdgeX | ImGuiScrollFlags_KeepVisibleCenterX | ImGuiScrollFlags_AlwaysCenterX,
+ ImGuiScrollFlags_MaskY_ = ImGuiScrollFlags_KeepVisibleEdgeY | ImGuiScrollFlags_KeepVisibleCenterY | ImGuiScrollFlags_AlwaysCenterY
+};
+
+enum ImGuiNavHighlightFlags_
+{
+ ImGuiNavHighlightFlags_None = 0,
+ ImGuiNavHighlightFlags_TypeDefault = 1 << 0,
+ ImGuiNavHighlightFlags_TypeThin = 1 << 1,
+ ImGuiNavHighlightFlags_AlwaysDraw = 1 << 2, // Draw rectangular highlight if (g.NavId == id) _even_ when using the mouse.
+ ImGuiNavHighlightFlags_NoRounding = 1 << 3
+};
+
+enum ImGuiNavDirSourceFlags_
+{
+ ImGuiNavDirSourceFlags_None = 0,
+ ImGuiNavDirSourceFlags_RawKeyboard = 1 << 0, // Raw keyboard (not pulled from nav), facilitate use of some functions before we can unify nav and keys
+ ImGuiNavDirSourceFlags_Keyboard = 1 << 1,
+ ImGuiNavDirSourceFlags_PadDPad = 1 << 2,
+ ImGuiNavDirSourceFlags_PadLStick = 1 << 3
+};
+
+enum ImGuiNavMoveFlags_
+{
+ ImGuiNavMoveFlags_None = 0,
+ ImGuiNavMoveFlags_LoopX = 1 << 0, // On failed request, restart from opposite side
+ ImGuiNavMoveFlags_LoopY = 1 << 1,
+ ImGuiNavMoveFlags_WrapX = 1 << 2, // On failed request, request from opposite side one line down (when NavDir==right) or one line up (when NavDir==left)
+ ImGuiNavMoveFlags_WrapY = 1 << 3, // This is not super useful but provided for completeness
+ ImGuiNavMoveFlags_AllowCurrentNavId = 1 << 4, // Allow scoring and considering the current NavId as a move target candidate. This is used when the move source is offset (e.g. pressing PageDown actually needs to send a Up move request, if we are pressing PageDown from the bottom-most item we need to stay in place)
+ ImGuiNavMoveFlags_AlsoScoreVisibleSet = 1 << 5, // Store alternate result in NavMoveResultLocalVisible that only comprise elements that are already fully visible (used by PageUp/PageDown)
+ ImGuiNavMoveFlags_ScrollToEdgeY = 1 << 6, // Force scrolling to min/max (used by Home/End) // FIXME-NAV: Aim to remove or reword, probably unnecessary
+ ImGuiNavMoveFlags_Forwarded = 1 << 7,
+ ImGuiNavMoveFlags_DebugNoResult = 1 << 8, // Dummy scoring for debug purpose, don't apply result
+ ImGuiNavMoveFlags_FocusApi = 1 << 9,
+ ImGuiNavMoveFlags_Tabbing = 1 << 10, // == Focus + Activate if item is Inputable + DontChangeNavHighlight
+ ImGuiNavMoveFlags_Activate = 1 << 11,
+ ImGuiNavMoveFlags_DontSetNavHighlight = 1 << 12 // Do not alter the visible state of keyboard vs mouse nav highlight
+};
+
+enum ImGuiNavLayer
+{
+ ImGuiNavLayer_Main = 0, // Main scrolling layer
+ ImGuiNavLayer_Menu = 1, // Menu layer (access with Alt/ImGuiNavInput_Menu)
+ ImGuiNavLayer_COUNT
+};
+
+struct ImGuiNavItemData
+{
+ ImGuiWindow* Window; // Init,Move // Best candidate window (result->ItemWindow->RootWindowForNav == request->Window)
+ ImGuiID ID; // Init,Move // Best candidate item ID
+ ImGuiID FocusScopeId; // Init,Move // Best candidate focus scope ID
+ ImRect RectRel; // Init,Move // Best candidate bounding box in window relative space
+ ImGuiItemFlags InFlags; // ????,Move // Best candidate item flags
+ float DistBox; // Move // Best candidate box distance to current NavId
+ float DistCenter; // Move // Best candidate center distance to current NavId
+ float DistAxial; // Move // Best candidate axial distance to current NavId
+
+ ImGuiNavItemData() { Clear(); }
+ void Clear() { Window = NULL; ID = FocusScopeId = 0; InFlags = 0; DistBox = DistCenter = DistAxial = FLT_MAX; }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Columns support
+//-----------------------------------------------------------------------------
+
+// Flags for internal's BeginColumns(). Prefix using BeginTable() nowadays!
+enum ImGuiOldColumnFlags_
+{
+ ImGuiOldColumnFlags_None = 0,
+ ImGuiOldColumnFlags_NoBorder = 1 << 0, // Disable column dividers
+ ImGuiOldColumnFlags_NoResize = 1 << 1, // Disable resizing columns when clicking on the dividers
+ ImGuiOldColumnFlags_NoPreserveWidths = 1 << 2, // Disable column width preservation when adjusting columns
+ ImGuiOldColumnFlags_NoForceWithinWindow = 1 << 3, // Disable forcing columns to fit within window
+ ImGuiOldColumnFlags_GrowParentContentsSize = 1 << 4 // (WIP) Restore pre-1.51 behavior of extending the parent window contents size but _without affecting the columns width at all_. Will eventually remove.
+
+ // Obsolete names (will be removed)
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ , ImGuiColumnsFlags_None = ImGuiOldColumnFlags_None,
+ ImGuiColumnsFlags_NoBorder = ImGuiOldColumnFlags_NoBorder,
+ ImGuiColumnsFlags_NoResize = ImGuiOldColumnFlags_NoResize,
+ ImGuiColumnsFlags_NoPreserveWidths = ImGuiOldColumnFlags_NoPreserveWidths,
+ ImGuiColumnsFlags_NoForceWithinWindow = ImGuiOldColumnFlags_NoForceWithinWindow,
+ ImGuiColumnsFlags_GrowParentContentsSize = ImGuiOldColumnFlags_GrowParentContentsSize
+#endif
+};
+
+struct ImGuiOldColumnData
+{
+ float OffsetNorm; // Column start offset, normalized 0.0 (far left) -> 1.0 (far right)
+ float OffsetNormBeforeResize;
+ ImGuiOldColumnFlags Flags; // Not exposed
+ ImRect ClipRect;
+
+ ImGuiOldColumnData() { memset(this, 0, sizeof(*this)); }
+};
+
+struct ImGuiOldColumns
+{
+ ImGuiID ID;
+ ImGuiOldColumnFlags Flags;
+ bool IsFirstFrame;
+ bool IsBeingResized;
+ int Current;
+ int Count;
+ float OffMinX, OffMaxX; // Offsets from HostWorkRect.Min.x
+ float LineMinY, LineMaxY;
+ float HostCursorPosY; // Backup of CursorPos at the time of BeginColumns()
+ float HostCursorMaxPosX; // Backup of CursorMaxPos at the time of BeginColumns()
+ ImRect HostInitialClipRect; // Backup of ClipRect at the time of BeginColumns()
+ ImRect HostBackupClipRect; // Backup of ClipRect during PushColumnsBackground()/PopColumnsBackground()
+ ImRect HostBackupParentWorkRect;//Backup of WorkRect at the time of BeginColumns()
+ ImVector<ImGuiOldColumnData> Columns;
+ ImDrawListSplitter Splitter;
+
+ ImGuiOldColumns() { memset(this, 0, sizeof(*this)); }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Multi-select support
+//-----------------------------------------------------------------------------
+
+#ifdef IMGUI_HAS_MULTI_SELECT
+// <this is filled in 'range_select' branch>
+#endif // #ifdef IMGUI_HAS_MULTI_SELECT
+
+//-----------------------------------------------------------------------------
+// [SECTION] Docking support
+//-----------------------------------------------------------------------------
+
+#ifdef IMGUI_HAS_DOCK
+// <this is filled in 'docking' branch>
+#endif // #ifdef IMGUI_HAS_DOCK
+
+//-----------------------------------------------------------------------------
+// [SECTION] Viewport support
+//-----------------------------------------------------------------------------
+
+// ImGuiViewport Private/Internals fields (cardinal sin: we are using inheritance!)
+// Every instance of ImGuiViewport is in fact a ImGuiViewportP.
+struct ImGuiViewportP : public ImGuiViewport
+{
+ int DrawListsLastFrame[2]; // Last frame number the background (0) and foreground (1) draw lists were used
+ ImDrawList* DrawLists[2]; // Convenience background (0) and foreground (1) draw lists. We use them to draw software mouser cursor when io.MouseDrawCursor is set and to draw most debug overlays.
+ ImDrawData DrawDataP;
+ ImDrawDataBuilder DrawDataBuilder;
+
+ ImVec2 WorkOffsetMin; // Work Area: Offset from Pos to top-left corner of Work Area. Generally (0,0) or (0,+main_menu_bar_height). Work Area is Full Area but without menu-bars/status-bars (so WorkArea always fit inside Pos/Size!)
+ ImVec2 WorkOffsetMax; // Work Area: Offset from Pos+Size to bottom-right corner of Work Area. Generally (0,0) or (0,-status_bar_height).
+ ImVec2 BuildWorkOffsetMin; // Work Area: Offset being built during current frame. Generally >= 0.0f.
+ ImVec2 BuildWorkOffsetMax; // Work Area: Offset being built during current frame. Generally <= 0.0f.
+
+ ImGuiViewportP() { DrawListsLastFrame[0] = DrawListsLastFrame[1] = -1; DrawLists[0] = DrawLists[1] = NULL; }
+ ~ImGuiViewportP() { if (DrawLists[0]) IM_DELETE(DrawLists[0]); if (DrawLists[1]) IM_DELETE(DrawLists[1]); }
+
+ // Calculate work rect pos/size given a set of offset (we have 1 pair of offset for rect locked from last frame data, and 1 pair for currently building rect)
+ ImVec2 CalcWorkRectPos(const ImVec2& off_min) const { return ImVec2(Pos.x + off_min.x, Pos.y + off_min.y); }
+ ImVec2 CalcWorkRectSize(const ImVec2& off_min, const ImVec2& off_max) const { return ImVec2(ImMax(0.0f, Size.x - off_min.x + off_max.x), ImMax(0.0f, Size.y - off_min.y + off_max.y)); }
+ void UpdateWorkRect() { WorkPos = CalcWorkRectPos(WorkOffsetMin); WorkSize = CalcWorkRectSize(WorkOffsetMin, WorkOffsetMax); } // Update public fields
+
+ // Helpers to retrieve ImRect (we don't need to store BuildWorkRect as every access tend to change it, hence the code asymmetry)
+ ImRect GetMainRect() const { return ImRect(Pos.x, Pos.y, Pos.x + Size.x, Pos.y + Size.y); }
+ ImRect GetWorkRect() const { return ImRect(WorkPos.x, WorkPos.y, WorkPos.x + WorkSize.x, WorkPos.y + WorkSize.y); }
+ ImRect GetBuildWorkRect() const { ImVec2 pos = CalcWorkRectPos(BuildWorkOffsetMin); ImVec2 size = CalcWorkRectSize(BuildWorkOffsetMin, BuildWorkOffsetMax); return ImRect(pos.x, pos.y, pos.x + size.x, pos.y + size.y); }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Settings support
+//-----------------------------------------------------------------------------
+
+// Windows data saved in imgui.ini file
+// Because we never destroy or rename ImGuiWindowSettings, we can store the names in a separate buffer easily.
+// (this is designed to be stored in a ImChunkStream buffer, with the variable-length Name following our structure)
+struct ImGuiWindowSettings
+{
+ ImGuiID ID;
+ ImVec2ih Pos;
+ ImVec2ih Size;
+ bool Collapsed;
+ bool WantApply; // Set when loaded from .ini data (to enable merging/loading .ini data into an already running context)
+
+ ImGuiWindowSettings() { memset(this, 0, sizeof(*this)); }
+ char* GetName() { return (char*)(this + 1); }
+};
+
+struct ImGuiSettingsHandler
+{
+ const char* TypeName; // Short description stored in .ini file. Disallowed characters: '[' ']'
+ ImGuiID TypeHash; // == ImHashStr(TypeName)
+ void (*ClearAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Clear all settings data
+ void (*ReadInitFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Read: Called before reading (in registration order)
+ void* (*ReadOpenFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, const char* name); // Read: Called when entering into a new ini entry e.g. "[Window][Name]"
+ void (*ReadLineFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, void* entry, const char* line); // Read: Called for every line of text within an ini entry
+ void (*ApplyAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler); // Read: Called after reading (in registration order)
+ void (*WriteAllFn)(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* out_buf); // Write: Output every entries into 'out_buf'
+ void* UserData;
+
+ ImGuiSettingsHandler() { memset(this, 0, sizeof(*this)); }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Metrics, Debug Tools
+//-----------------------------------------------------------------------------
+
+enum ImGuiDebugLogFlags_
+{
+ // Event types
+ ImGuiDebugLogFlags_None = 0,
+ ImGuiDebugLogFlags_EventActiveId = 1 << 0,
+ ImGuiDebugLogFlags_EventFocus = 1 << 1,
+ ImGuiDebugLogFlags_EventPopup = 1 << 2,
+ ImGuiDebugLogFlags_EventNav = 1 << 3,
+ ImGuiDebugLogFlags_EventIO = 1 << 4,
+ ImGuiDebugLogFlags_EventMask_ = ImGuiDebugLogFlags_EventActiveId | ImGuiDebugLogFlags_EventFocus | ImGuiDebugLogFlags_EventPopup | ImGuiDebugLogFlags_EventNav | ImGuiDebugLogFlags_EventIO,
+ ImGuiDebugLogFlags_OutputToTTY = 1 << 10 // Also send output to TTY
+};
+
+struct ImGuiMetricsConfig
+{
+ bool ShowDebugLog;
+ bool ShowStackTool;
+ bool ShowWindowsRects;
+ bool ShowWindowsBeginOrder;
+ bool ShowTablesRects;
+ bool ShowDrawCmdMesh;
+ bool ShowDrawCmdBoundingBoxes;
+ int ShowWindowsRectsType;
+ int ShowTablesRectsType;
+
+ ImGuiMetricsConfig()
+ {
+ ShowDebugLog = ShowStackTool = ShowWindowsRects = ShowWindowsBeginOrder = ShowTablesRects = false;
+ ShowDrawCmdMesh = true;
+ ShowDrawCmdBoundingBoxes = true;
+ ShowWindowsRectsType = ShowTablesRectsType = -1;
+ }
+};
+
+struct ImGuiStackLevelInfo
+{
+ ImGuiID ID;
+ ImS8 QueryFrameCount; // >= 1: Query in progress
+ bool QuerySuccess; // Obtained result from DebugHookIdInfo()
+ ImGuiDataType DataType : 8;
+ char Desc[57]; // Arbitrarily sized buffer to hold a result (FIXME: could replace Results[] with a chunk stream?) FIXME: Now that we added CTRL+C this should be fixed.
+
+ ImGuiStackLevelInfo() { memset(this, 0, sizeof(*this)); }
+};
+
+// State for Stack tool queries
+struct ImGuiStackTool
+{
+ int LastActiveFrame;
+ int StackLevel; // -1: query stack and resize Results, >= 0: individual stack level
+ ImGuiID QueryId; // ID to query details for
+ ImVector<ImGuiStackLevelInfo> Results;
+ bool CopyToClipboardOnCtrlC;
+ float CopyToClipboardLastTime;
+
+ ImGuiStackTool() { memset(this, 0, sizeof(*this)); CopyToClipboardLastTime = -FLT_MAX; }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Generic context hooks
+//-----------------------------------------------------------------------------
+
+typedef void (*ImGuiContextHookCallback)(ImGuiContext* ctx, ImGuiContextHook* hook);
+enum ImGuiContextHookType { ImGuiContextHookType_NewFramePre, ImGuiContextHookType_NewFramePost, ImGuiContextHookType_EndFramePre, ImGuiContextHookType_EndFramePost, ImGuiContextHookType_RenderPre, ImGuiContextHookType_RenderPost, ImGuiContextHookType_Shutdown, ImGuiContextHookType_PendingRemoval_ };
+
+struct ImGuiContextHook
+{
+ ImGuiID HookId; // A unique ID assigned by AddContextHook()
+ ImGuiContextHookType Type;
+ ImGuiID Owner;
+ ImGuiContextHookCallback Callback;
+ void* UserData;
+
+ ImGuiContextHook() { memset(this, 0, sizeof(*this)); }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiContext (main Dear ImGui context)
+//-----------------------------------------------------------------------------
+
+struct ImGuiContext
+{
+ bool Initialized;
+ bool FontAtlasOwnedByContext; // IO.Fonts-> is owned by the ImGuiContext and will be destructed along with it.
+ ImGuiIO IO;
+ ImVector<ImGuiInputEvent> InputEventsQueue; // Input events which will be tricked/written into IO structure.
+ ImVector<ImGuiInputEvent> InputEventsTrail; // Past input events processed in NewFrame(). This is to allow domain-specific application to access e.g mouse/pen trail.
+ ImGuiStyle Style;
+ ImFont* Font; // (Shortcut) == FontStack.empty() ? IO.Font : FontStack.back()
+ float FontSize; // (Shortcut) == FontBaseSize * g.CurrentWindow->FontWindowScale == window->FontSize(). Text height for current window.
+ float FontBaseSize; // (Shortcut) == IO.FontGlobalScale * Font->Scale * Font->FontSize. Base text height.
+ ImDrawListSharedData DrawListSharedData;
+ double Time;
+ int FrameCount;
+ int FrameCountEnded;
+ int FrameCountRendered;
+ bool WithinFrameScope; // Set by NewFrame(), cleared by EndFrame()
+ bool WithinFrameScopeWithImplicitWindow; // Set by NewFrame(), cleared by EndFrame() when the implicit debug window has been pushed
+ bool WithinEndChild; // Set within EndChild()
+ bool GcCompactAll; // Request full GC
+ bool TestEngineHookItems; // Will call test engine hooks: ImGuiTestEngineHook_ItemAdd(), ImGuiTestEngineHook_ItemInfo(), ImGuiTestEngineHook_Log()
+ void* TestEngine; // Test engine user data
+
+ // Windows state
+ ImVector<ImGuiWindow*> Windows; // Windows, sorted in display order, back to front
+ ImVector<ImGuiWindow*> WindowsFocusOrder; // Root windows, sorted in focus order, back to front.
+ ImVector<ImGuiWindow*> WindowsTempSortBuffer; // Temporary buffer used in EndFrame() to reorder windows so parents are kept before their child
+ ImVector<ImGuiWindowStackData> CurrentWindowStack;
+ ImGuiStorage WindowsById; // Map window's ImGuiID to ImGuiWindow*
+ int WindowsActiveCount; // Number of unique windows submitted by frame
+ ImVec2 WindowsHoverPadding; // Padding around resizable windows for which hovering on counts as hovering the window == ImMax(style.TouchExtraPadding, WINDOWS_HOVER_PADDING)
+ ImGuiWindow* CurrentWindow; // Window being drawn into
+ ImGuiWindow* HoveredWindow; // Window the mouse is hovering. Will typically catch mouse inputs.
+ ImGuiWindow* HoveredWindowUnderMovingWindow; // Hovered window ignoring MovingWindow. Only set if MovingWindow is set.
+ ImGuiWindow* MovingWindow; // Track the window we clicked on (in order to preserve focus). The actual window that is moved is generally MovingWindow->RootWindow.
+ ImGuiWindow* WheelingWindow; // Track the window we started mouse-wheeling on. Until a timer elapse or mouse has moved, generally keep scrolling the same window even if during the course of scrolling the mouse ends up hovering a child window.
+ ImVec2 WheelingWindowRefMousePos;
+ float WheelingWindowTimer;
+
+ // Item/widgets state and tracking information
+ ImGuiID DebugHookIdInfo; // Will call core hooks: DebugHookIdInfo() from GetID functions, used by Stack Tool [next HoveredId/ActiveId to not pull in an extra cache-line]
+ ImGuiID HoveredId; // Hovered widget, filled during the frame
+ ImGuiID HoveredIdPreviousFrame;
+ bool HoveredIdAllowOverlap;
+ bool HoveredIdUsingMouseWheel; // Hovered widget will use mouse wheel. Blocks scrolling the underlying window.
+ bool HoveredIdPreviousFrameUsingMouseWheel;
+ bool HoveredIdDisabled; // At least one widget passed the rect test, but has been discarded by disabled flag or popup inhibit. May be true even if HoveredId == 0.
+ float HoveredIdTimer; // Measure contiguous hovering time
+ float HoveredIdNotActiveTimer; // Measure contiguous hovering time where the item has not been active
+ ImGuiID ActiveId; // Active widget
+ ImGuiID ActiveIdIsAlive; // Active widget has been seen this frame (we can't use a bool as the ActiveId may change within the frame)
+ float ActiveIdTimer;
+ bool ActiveIdIsJustActivated; // Set at the time of activation for one frame
+ bool ActiveIdAllowOverlap; // Active widget allows another widget to steal active id (generally for overlapping widgets, but not always)
+ bool ActiveIdNoClearOnFocusLoss; // Disable losing active id if the active id window gets unfocused.
+ bool ActiveIdHasBeenPressedBefore; // Track whether the active id led to a press (this is to allow changing between PressOnClick and PressOnRelease without pressing twice). Used by range_select branch.
+ bool ActiveIdHasBeenEditedBefore; // Was the value associated to the widget Edited over the course of the Active state.
+ bool ActiveIdHasBeenEditedThisFrame;
+ ImVec2 ActiveIdClickOffset; // Clicked offset from upper-left corner, if applicable (currently only set by ButtonBehavior)
+ ImGuiWindow* ActiveIdWindow;
+ ImGuiInputSource ActiveIdSource; // Activating with mouse or nav (gamepad/keyboard)
+ int ActiveIdMouseButton;
+ ImGuiID ActiveIdPreviousFrame;
+ bool ActiveIdPreviousFrameIsAlive;
+ bool ActiveIdPreviousFrameHasBeenEditedBefore;
+ ImGuiWindow* ActiveIdPreviousFrameWindow;
+ ImGuiID LastActiveId; // Store the last non-zero ActiveId, useful for animation.
+ float LastActiveIdTimer; // Store the last non-zero ActiveId timer since the beginning of activation, useful for animation.
+
+ // Input Ownership
+ bool ActiveIdUsingMouseWheel; // Active widget will want to read mouse wheel. Blocks scrolling the underlying window.
+ ImU32 ActiveIdUsingNavDirMask; // Active widget will want to read those nav move requests (e.g. can activate a button and move away from it)
+ ImU32 ActiveIdUsingNavInputMask; // Active widget will want to read those nav inputs.
+ ImBitArrayForNamedKeys ActiveIdUsingKeyInputMask; // Active widget will want to read those key inputs. When we grow the ImGuiKey enum we'll need to either to order the enum to make useful keys come first, either redesign this into e.g. a small array.
+
+ // Next window/item data
+ ImGuiItemFlags CurrentItemFlags; // == g.ItemFlagsStack.back()
+ ImGuiNextItemData NextItemData; // Storage for SetNextItem** functions
+ ImGuiLastItemData LastItemData; // Storage for last submitted item (setup by ItemAdd)
+ ImGuiNextWindowData NextWindowData; // Storage for SetNextWindow** functions
+
+ // Shared stacks
+ ImVector<ImGuiColorMod> ColorStack; // Stack for PushStyleColor()/PopStyleColor() - inherited by Begin()
+ ImVector<ImGuiStyleMod> StyleVarStack; // Stack for PushStyleVar()/PopStyleVar() - inherited by Begin()
+ ImVector<ImFont*> FontStack; // Stack for PushFont()/PopFont() - inherited by Begin()
+ ImVector<ImGuiID> FocusScopeStack; // Stack for PushFocusScope()/PopFocusScope() - not inherited by Begin(), unless child window
+ ImVector<ImGuiItemFlags>ItemFlagsStack; // Stack for PushItemFlag()/PopItemFlag() - inherited by Begin()
+ ImVector<ImGuiGroupData>GroupStack; // Stack for BeginGroup()/EndGroup() - not inherited by Begin()
+ ImVector<ImGuiPopupData>OpenPopupStack; // Which popups are open (persistent)
+ ImVector<ImGuiPopupData>BeginPopupStack; // Which level of BeginPopup() we are in (reset every frame)
+ int BeginMenuCount;
+
+ // Viewports
+ ImVector<ImGuiViewportP*> Viewports; // Active viewports (Size==1 in 'master' branch). Each viewports hold their copy of ImDrawData.
+
+ // Gamepad/keyboard Navigation
+ ImGuiWindow* NavWindow; // Focused window for navigation. Could be called 'FocusedWindow'
+ ImGuiID NavId; // Focused item for navigation
+ ImGuiID NavFocusScopeId; // Identify a selection scope (selection code often wants to "clear other items" when landing on an item of the selection set)
+ ImGuiID NavActivateId; // ~~ (g.ActiveId == 0) && IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0, also set when calling ActivateItem()
+ ImGuiID NavActivateDownId; // ~~ IsNavInputDown(ImGuiNavInput_Activate) ? NavId : 0
+ ImGuiID NavActivatePressedId; // ~~ IsNavInputPressed(ImGuiNavInput_Activate) ? NavId : 0
+ ImGuiID NavActivateInputId; // ~~ IsNavInputPressed(ImGuiNavInput_Input) ? NavId : 0; ImGuiActivateFlags_PreferInput will be set and NavActivateId will be 0.
+ ImGuiActivateFlags NavActivateFlags;
+ ImGuiID NavJustMovedToId; // Just navigated to this id (result of a successfully MoveRequest).
+ ImGuiID NavJustMovedToFocusScopeId; // Just navigated to this focus scope id (result of a successfully MoveRequest).
+ ImGuiModFlags NavJustMovedToKeyMods;
+ ImGuiID NavNextActivateId; // Set by ActivateItem(), queued until next frame.
+ ImGuiActivateFlags NavNextActivateFlags;
+ ImGuiInputSource NavInputSource; // Keyboard or Gamepad mode? THIS WILL ONLY BE None or NavGamepad or NavKeyboard.
+ ImGuiNavLayer NavLayer; // Layer we are navigating on. For now the system is hard-coded for 0=main contents and 1=menu/title bar, may expose layers later.
+ bool NavIdIsAlive; // Nav widget has been seen this frame ~~ NavRectRel is valid
+ bool NavMousePosDirty; // When set we will update mouse position if (io.ConfigFlags & ImGuiConfigFlags_NavEnableSetMousePos) if set (NB: this not enabled by default)
+ bool NavDisableHighlight; // When user starts using mouse, we hide gamepad/keyboard highlight (NB: but they are still available, which is why NavDisableHighlight isn't always != NavDisableMouseHover)
+ bool NavDisableMouseHover; // When user starts using gamepad/keyboard, we hide mouse hovering highlight until mouse is touched again.
+
+ // Navigation: Init & Move Requests
+ bool NavAnyRequest; // ~~ NavMoveRequest || NavInitRequest this is to perform early out in ItemAdd()
+ bool NavInitRequest; // Init request for appearing window to select first item
+ bool NavInitRequestFromMove;
+ ImGuiID NavInitResultId; // Init request result (first item of the window, or one for which SetItemDefaultFocus() was called)
+ ImRect NavInitResultRectRel; // Init request result rectangle (relative to parent window)
+ bool NavMoveSubmitted; // Move request submitted, will process result on next NewFrame()
+ bool NavMoveScoringItems; // Move request submitted, still scoring incoming items
+ bool NavMoveForwardToNextFrame;
+ ImGuiNavMoveFlags NavMoveFlags;
+ ImGuiScrollFlags NavMoveScrollFlags;
+ ImGuiModFlags NavMoveKeyMods;
+ ImGuiDir NavMoveDir; // Direction of the move request (left/right/up/down)
+ ImGuiDir NavMoveDirForDebug;
+ ImGuiDir NavMoveClipDir; // FIXME-NAV: Describe the purpose of this better. Might want to rename?
+ ImRect NavScoringRect; // Rectangle used for scoring, in screen space. Based of window->NavRectRel[], modified for directional navigation scoring.
+ ImRect NavScoringNoClipRect; // Some nav operations (such as PageUp/PageDown) enforce a region which clipper will attempt to always keep submitted
+ int NavScoringDebugCount; // Metrics for debugging
+ int NavTabbingDir; // Generally -1 or +1, 0 when tabbing without a nav id
+ int NavTabbingCounter; // >0 when counting items for tabbing
+ ImGuiNavItemData NavMoveResultLocal; // Best move request candidate within NavWindow
+ ImGuiNavItemData NavMoveResultLocalVisible; // Best move request candidate within NavWindow that are mostly visible (when using ImGuiNavMoveFlags_AlsoScoreVisibleSet flag)
+ ImGuiNavItemData NavMoveResultOther; // Best move request candidate within NavWindow's flattened hierarchy (when using ImGuiWindowFlags_NavFlattened flag)
+ ImGuiNavItemData NavTabbingResultFirst; // First tabbing request candidate within NavWindow and flattened hierarchy
+
+ // Navigation: Windowing (CTRL+TAB for list, or Menu button + keys or directional pads to move/resize)
+ ImGuiWindow* NavWindowingTarget; // Target window when doing CTRL+Tab (or Pad Menu + FocusPrev/Next), this window is temporarily displayed top-most!
+ ImGuiWindow* NavWindowingTargetAnim; // Record of last valid NavWindowingTarget until DimBgRatio and NavWindowingHighlightAlpha becomes 0.0f, so the fade-out can stay on it.
+ ImGuiWindow* NavWindowingListWindow; // Internal window actually listing the CTRL+Tab contents
+ float NavWindowingTimer;
+ float NavWindowingHighlightAlpha;
+ bool NavWindowingToggleLayer;
+
+ // Render
+ float DimBgRatio; // 0.0..1.0 animation when fading in a dimming background (for modal window and CTRL+TAB list)
+ ImGuiMouseCursor MouseCursor;
+
+ // Drag and Drop
+ bool DragDropActive;
+ bool DragDropWithinSource; // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag source.
+ bool DragDropWithinTarget; // Set when within a BeginDragDropXXX/EndDragDropXXX block for a drag target.
+ ImGuiDragDropFlags DragDropSourceFlags;
+ int DragDropSourceFrameCount;
+ int DragDropMouseButton;
+ ImGuiPayload DragDropPayload;
+ ImRect DragDropTargetRect; // Store rectangle of current target candidate (we favor small targets when overlapping)
+ ImGuiID DragDropTargetId;
+ ImGuiDragDropFlags DragDropAcceptFlags;
+ float DragDropAcceptIdCurrRectSurface; // Target item surface (we resolve overlapping targets by prioritizing the smaller surface)
+ ImGuiID DragDropAcceptIdCurr; // Target item id (set at the time of accepting the payload)
+ ImGuiID DragDropAcceptIdPrev; // Target item id from previous frame (we need to store this to allow for overlapping drag and drop targets)
+ int DragDropAcceptFrameCount; // Last time a target expressed a desire to accept the source
+ ImGuiID DragDropHoldJustPressedId; // Set when holding a payload just made ButtonBehavior() return a press.
+ ImVector<unsigned char> DragDropPayloadBufHeap; // We don't expose the ImVector<> directly, ImGuiPayload only holds pointer+size
+ unsigned char DragDropPayloadBufLocal[16]; // Local buffer for small payloads
+
+ // Clipper
+ int ClipperTempDataStacked;
+ ImVector<ImGuiListClipperData> ClipperTempData;
+
+ // Tables
+ ImGuiTable* CurrentTable;
+ int TablesTempDataStacked; // Temporary table data size (because we leave previous instances undestructed, we generally don't use TablesTempData.Size)
+ ImVector<ImGuiTableTempData> TablesTempData; // Temporary table data (buffers reused/shared across instances, support nesting)
+ ImPool<ImGuiTable> Tables; // Persistent table data
+ ImVector<float> TablesLastTimeActive; // Last used timestamp of each tables (SOA, for efficient GC)
+ ImVector<ImDrawChannel> DrawChannelsTempMergeBuffer;
+
+ // Tab bars
+ ImGuiTabBar* CurrentTabBar;
+ ImPool<ImGuiTabBar> TabBars;
+ ImVector<ImGuiPtrOrIndex> CurrentTabBarStack;
+ ImVector<ImGuiShrinkWidthItem> ShrinkWidthBuffer;
+
+ // Widget state
+ ImVec2 MouseLastValidPos;
+ ImGuiInputTextState InputTextState;
+ ImFont InputTextPasswordFont;
+ ImGuiID TempInputId; // Temporary text input when CTRL+clicking on a slider, etc.
+ ImGuiColorEditFlags ColorEditOptions; // Store user options for color edit widgets
+ float ColorEditLastHue; // Backup of last Hue associated to LastColor, so we can restore Hue in lossy RGB<>HSV round trips
+ float ColorEditLastSat; // Backup of last Saturation associated to LastColor, so we can restore Saturation in lossy RGB<>HSV round trips
+ ImU32 ColorEditLastColor; // RGB value with alpha set to 0.
+ ImVec4 ColorPickerRef; // Initial/reference color at the time of opening the color picker.
+ ImGuiComboPreviewData ComboPreviewData;
+ float SliderGrabClickOffset;
+ float SliderCurrentAccum; // Accumulated slider delta when using navigation controls.
+ bool SliderCurrentAccumDirty; // Has the accumulated slider delta changed since last time we tried to apply it?
+ bool DragCurrentAccumDirty;
+ float DragCurrentAccum; // Accumulator for dragging modification. Always high-precision, not rounded by end-user precision settings
+ float DragSpeedDefaultRatio; // If speed == 0.0f, uses (max-min) * DragSpeedDefaultRatio
+ float ScrollbarClickDeltaToGrabCenter; // Distance between mouse and center of grab box, normalized in parent space. Use storage?
+ float DisabledAlphaBackup; // Backup for style.Alpha for BeginDisabled()
+ short DisabledStackSize;
+ short TooltipOverrideCount;
+ float TooltipSlowDelay; // Time before slow tooltips appears (FIXME: This is temporary until we merge in tooltip timer+priority work)
+ ImVector<char> ClipboardHandlerData; // If no custom clipboard handler is defined
+ ImVector<ImGuiID> MenusIdSubmittedThisFrame; // A list of menu IDs that were rendered at least once
+
+ // Platform support
+ ImGuiPlatformImeData PlatformImeData; // Data updated by current frame
+ ImGuiPlatformImeData PlatformImeDataPrev; // Previous frame data (when changing we will call io.SetPlatformImeDataFn
+ char PlatformLocaleDecimalPoint; // '.' or *localeconv()->decimal_point
+
+ // Settings
+ bool SettingsLoaded;
+ float SettingsDirtyTimer; // Save .ini Settings to memory when time reaches zero
+ ImGuiTextBuffer SettingsIniData; // In memory .ini settings
+ ImVector<ImGuiSettingsHandler> SettingsHandlers; // List of .ini settings handlers
+ ImChunkStream<ImGuiWindowSettings> SettingsWindows; // ImGuiWindow .ini settings entries
+ ImChunkStream<ImGuiTableSettings> SettingsTables; // ImGuiTable .ini settings entries
+ ImVector<ImGuiContextHook> Hooks; // Hooks for extensions (e.g. test engine)
+ ImGuiID HookIdNext; // Next available HookId
+
+ // Capture/Logging
+ bool LogEnabled; // Currently capturing
+ ImGuiLogType LogType; // Capture target
+ ImFileHandle LogFile; // If != NULL log to stdout/ file
+ ImGuiTextBuffer LogBuffer; // Accumulation buffer when log to clipboard. This is pointer so our GImGui static constructor doesn't call heap allocators.
+ const char* LogNextPrefix;
+ const char* LogNextSuffix;
+ float LogLinePosY;
+ bool LogLineFirstItem;
+ int LogDepthRef;
+ int LogDepthToExpand;
+ int LogDepthToExpandDefault; // Default/stored value for LogDepthMaxExpand if not specified in the LogXXX function call.
+
+ // Debug Tools
+ ImGuiDebugLogFlags DebugLogFlags;
+ ImGuiTextBuffer DebugLogBuf;
+ bool DebugItemPickerActive; // Item picker is active (started with DebugStartItemPicker())
+ ImGuiID DebugItemPickerBreakId; // Will call IM_DEBUG_BREAK() when encountering this ID
+ ImGuiMetricsConfig DebugMetricsConfig;
+ ImGuiStackTool DebugStackTool;
+
+ // Misc
+ float FramerateSecPerFrame[120]; // Calculate estimate of framerate for user over the last 2 seconds.
+ int FramerateSecPerFrameIdx;
+ int FramerateSecPerFrameCount;
+ float FramerateSecPerFrameAccum;
+ int WantCaptureMouseNextFrame; // Explicit capture override via SetNextFrameWantCaptureMouse()/SetNextFrameWantCaptureKeyboard(). Default to -1.
+ int WantCaptureKeyboardNextFrame; // "
+ int WantTextInputNextFrame;
+ ImVector<char> TempBuffer; // Temporary text buffer
+
+ ImGuiContext(ImFontAtlas* shared_font_atlas)
+ {
+ Initialized = false;
+ FontAtlasOwnedByContext = shared_font_atlas ? false : true;
+ Font = NULL;
+ FontSize = FontBaseSize = 0.0f;
+ IO.Fonts = shared_font_atlas ? shared_font_atlas : IM_NEW(ImFontAtlas)();
+ Time = 0.0f;
+ FrameCount = 0;
+ FrameCountEnded = FrameCountRendered = -1;
+ WithinFrameScope = WithinFrameScopeWithImplicitWindow = WithinEndChild = false;
+ GcCompactAll = false;
+ TestEngineHookItems = false;
+ TestEngine = NULL;
+
+ WindowsActiveCount = 0;
+ CurrentWindow = NULL;
+ HoveredWindow = NULL;
+ HoveredWindowUnderMovingWindow = NULL;
+ MovingWindow = NULL;
+ WheelingWindow = NULL;
+ WheelingWindowTimer = 0.0f;
+
+ DebugHookIdInfo = 0;
+ HoveredId = HoveredIdPreviousFrame = 0;
+ HoveredIdAllowOverlap = false;
+ HoveredIdUsingMouseWheel = HoveredIdPreviousFrameUsingMouseWheel = false;
+ HoveredIdDisabled = false;
+ HoveredIdTimer = HoveredIdNotActiveTimer = 0.0f;
+ ActiveId = 0;
+ ActiveIdIsAlive = 0;
+ ActiveIdTimer = 0.0f;
+ ActiveIdIsJustActivated = false;
+ ActiveIdAllowOverlap = false;
+ ActiveIdNoClearOnFocusLoss = false;
+ ActiveIdHasBeenPressedBefore = false;
+ ActiveIdHasBeenEditedBefore = false;
+ ActiveIdHasBeenEditedThisFrame = false;
+ ActiveIdClickOffset = ImVec2(-1, -1);
+ ActiveIdWindow = NULL;
+ ActiveIdSource = ImGuiInputSource_None;
+ ActiveIdMouseButton = -1;
+ ActiveIdPreviousFrame = 0;
+ ActiveIdPreviousFrameIsAlive = false;
+ ActiveIdPreviousFrameHasBeenEditedBefore = false;
+ ActiveIdPreviousFrameWindow = NULL;
+ LastActiveId = 0;
+ LastActiveIdTimer = 0.0f;
+
+ ActiveIdUsingMouseWheel = false;
+ ActiveIdUsingNavDirMask = 0x00;
+ ActiveIdUsingNavInputMask = 0x00;
+ ActiveIdUsingKeyInputMask.ClearAllBits();
+
+ CurrentItemFlags = ImGuiItemFlags_None;
+ BeginMenuCount = 0;
+
+ NavWindow = NULL;
+ NavId = NavFocusScopeId = NavActivateId = NavActivateDownId = NavActivatePressedId = NavActivateInputId = 0;
+ NavJustMovedToId = NavJustMovedToFocusScopeId = NavNextActivateId = 0;
+ NavActivateFlags = NavNextActivateFlags = ImGuiActivateFlags_None;
+ NavJustMovedToKeyMods = ImGuiModFlags_None;
+ NavInputSource = ImGuiInputSource_None;
+ NavLayer = ImGuiNavLayer_Main;
+ NavIdIsAlive = false;
+ NavMousePosDirty = false;
+ NavDisableHighlight = true;
+ NavDisableMouseHover = false;
+ NavAnyRequest = false;
+ NavInitRequest = false;
+ NavInitRequestFromMove = false;
+ NavInitResultId = 0;
+ NavMoveSubmitted = false;
+ NavMoveScoringItems = false;
+ NavMoveForwardToNextFrame = false;
+ NavMoveFlags = ImGuiNavMoveFlags_None;
+ NavMoveScrollFlags = ImGuiScrollFlags_None;
+ NavMoveKeyMods = ImGuiModFlags_None;
+ NavMoveDir = NavMoveDirForDebug = NavMoveClipDir = ImGuiDir_None;
+ NavScoringDebugCount = 0;
+ NavTabbingDir = 0;
+ NavTabbingCounter = 0;
+
+ NavWindowingTarget = NavWindowingTargetAnim = NavWindowingListWindow = NULL;
+ NavWindowingTimer = NavWindowingHighlightAlpha = 0.0f;
+ NavWindowingToggleLayer = false;
+
+ DimBgRatio = 0.0f;
+ MouseCursor = ImGuiMouseCursor_Arrow;
+
+ DragDropActive = DragDropWithinSource = DragDropWithinTarget = false;
+ DragDropSourceFlags = ImGuiDragDropFlags_None;
+ DragDropSourceFrameCount = -1;
+ DragDropMouseButton = -1;
+ DragDropTargetId = 0;
+ DragDropAcceptFlags = ImGuiDragDropFlags_None;
+ DragDropAcceptIdCurrRectSurface = 0.0f;
+ DragDropAcceptIdPrev = DragDropAcceptIdCurr = 0;
+ DragDropAcceptFrameCount = -1;
+ DragDropHoldJustPressedId = 0;
+ memset(DragDropPayloadBufLocal, 0, sizeof(DragDropPayloadBufLocal));
+
+ ClipperTempDataStacked = 0;
+
+ CurrentTable = NULL;
+ TablesTempDataStacked = 0;
+ CurrentTabBar = NULL;
+
+ TempInputId = 0;
+ ColorEditOptions = ImGuiColorEditFlags_DefaultOptions_;
+ ColorEditLastHue = ColorEditLastSat = 0.0f;
+ ColorEditLastColor = 0;
+ SliderGrabClickOffset = 0.0f;
+ SliderCurrentAccum = 0.0f;
+ SliderCurrentAccumDirty = false;
+ DragCurrentAccumDirty = false;
+ DragCurrentAccum = 0.0f;
+ DragSpeedDefaultRatio = 1.0f / 100.0f;
+ DisabledAlphaBackup = 0.0f;
+ DisabledStackSize = 0;
+ ScrollbarClickDeltaToGrabCenter = 0.0f;
+ TooltipOverrideCount = 0;
+ TooltipSlowDelay = 0.50f;
+
+ PlatformImeData.InputPos = ImVec2(0.0f, 0.0f);
+ PlatformImeDataPrev.InputPos = ImVec2(-1.0f, -1.0f); // Different to ensure initial submission
+ PlatformLocaleDecimalPoint = '.';
+
+ SettingsLoaded = false;
+ SettingsDirtyTimer = 0.0f;
+ HookIdNext = 0;
+
+ LogEnabled = false;
+ LogType = ImGuiLogType_None;
+ LogNextPrefix = LogNextSuffix = NULL;
+ LogFile = NULL;
+ LogLinePosY = FLT_MAX;
+ LogLineFirstItem = false;
+ LogDepthRef = 0;
+ LogDepthToExpand = LogDepthToExpandDefault = 2;
+
+ DebugLogFlags = ImGuiDebugLogFlags_OutputToTTY;
+ DebugItemPickerActive = false;
+ DebugItemPickerBreakId = 0;
+
+ memset(FramerateSecPerFrame, 0, sizeof(FramerateSecPerFrame));
+ FramerateSecPerFrameIdx = FramerateSecPerFrameCount = 0;
+ FramerateSecPerFrameAccum = 0.0f;
+ WantCaptureMouseNextFrame = WantCaptureKeyboardNextFrame = WantTextInputNextFrame = -1;
+ }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGuiWindowTempData, ImGuiWindow
+//-----------------------------------------------------------------------------
+
+// Transient per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the DC variable name in ImGuiWindow.
+// (That's theory, in practice the delimitation between ImGuiWindow and ImGuiWindowTempData is quite tenuous and could be reconsidered..)
+// (This doesn't need a constructor because we zero-clear it as part of ImGuiWindow and all frame-temporary data are setup on Begin)
+struct IMGUI_API ImGuiWindowTempData
+{
+ // Layout
+ ImVec2 CursorPos; // Current emitting position, in absolute coordinates.
+ ImVec2 CursorPosPrevLine;
+ ImVec2 CursorStartPos; // Initial position after Begin(), generally ~ window position + WindowPadding.
+ ImVec2 CursorMaxPos; // Used to implicitly calculate ContentSize at the beginning of next frame, for scrolling range and auto-resize. Always growing during the frame.
+ ImVec2 IdealMaxPos; // Used to implicitly calculate ContentSizeIdeal at the beginning of next frame, for auto-resize only. Always growing during the frame.
+ ImVec2 CurrLineSize;
+ ImVec2 PrevLineSize;
+ float CurrLineTextBaseOffset; // Baseline offset (0.0f by default on a new line, generally == style.FramePadding.y when a framed item has been added).
+ float PrevLineTextBaseOffset;
+ bool IsSameLine;
+ ImVec1 Indent; // Indentation / start position from left of window (increased by TreePush/TreePop, etc.)
+ ImVec1 ColumnsOffset; // Offset to the current column (if ColumnsCurrent > 0). FIXME: This and the above should be a stack to allow use cases like Tree->Column->Tree. Need revamp columns API.
+ ImVec1 GroupOffset;
+ ImVec2 CursorStartPosLossyness;// Record the loss of precision of CursorStartPos due to really large scrolling amount. This is used by clipper to compensentate and fix the most common use case of large scroll area.
+
+ // Keyboard/Gamepad navigation
+ ImGuiNavLayer NavLayerCurrent; // Current layer, 0..31 (we currently only use 0..1)
+ short NavLayersActiveMask; // Which layers have been written to (result from previous frame)
+ short NavLayersActiveMaskNext;// Which layers have been written to (accumulator for current frame)
+ ImGuiID NavFocusScopeIdCurrent; // Current focus scope ID while appending
+ bool NavHideHighlightOneFrame;
+ bool NavHasScroll; // Set when scrolling can be used (ScrollMax > 0.0f)
+
+ // Miscellaneous
+ bool MenuBarAppending; // FIXME: Remove this
+ ImVec2 MenuBarOffset; // MenuBarOffset.x is sort of equivalent of a per-layer CursorPos.x, saved/restored as we switch to the menu bar. The only situation when MenuBarOffset.y is > 0 if when (SafeAreaPadding.y > FramePadding.y), often used on TVs.
+ ImGuiMenuColumns MenuColumns; // Simplified columns storage for menu items measurement
+ int TreeDepth; // Current tree depth.
+ ImU32 TreeJumpToParentOnPopMask; // Store a copy of !g.NavIdIsAlive for TreeDepth 0..31.. Could be turned into a ImU64 if necessary.
+ ImVector<ImGuiWindow*> ChildWindows;
+ ImGuiStorage* StateStorage; // Current persistent per-window storage (store e.g. tree node open/close state)
+ ImGuiOldColumns* CurrentColumns; // Current columns set
+ int CurrentTableIdx; // Current table index (into g.Tables)
+ ImGuiLayoutType LayoutType;
+ ImGuiLayoutType ParentLayoutType; // Layout type of parent window at the time of Begin()
+
+ // Local parameters stacks
+ // We store the current settings outside of the vectors to increase memory locality (reduce cache misses). The vectors are rarely modified. Also it allows us to not heap allocate for short-lived windows which are not using those settings.
+ float ItemWidth; // Current item width (>0.0: width in pixels, <0.0: align xx pixels to the right of window).
+ float TextWrapPos; // Current text wrap pos.
+ ImVector<float> ItemWidthStack; // Store item widths to restore (attention: .back() is not == ItemWidth)
+ ImVector<float> TextWrapPosStack; // Store text wrap pos to restore (attention: .back() is not == TextWrapPos)
+};
+
+// Storage for one window
+struct IMGUI_API ImGuiWindow
+{
+ char* Name; // Window name, owned by the window.
+ ImGuiID ID; // == ImHashStr(Name)
+ ImGuiWindowFlags Flags; // See enum ImGuiWindowFlags_
+ ImGuiViewportP* Viewport; // Always set in Begin(). Inactive windows may have a NULL value here if their viewport was discarded.
+ ImVec2 Pos; // Position (always rounded-up to nearest pixel)
+ ImVec2 Size; // Current size (==SizeFull or collapsed title bar size)
+ ImVec2 SizeFull; // Size when non collapsed
+ ImVec2 ContentSize; // Size of contents/scrollable client area (calculated from the extents reach of the cursor) from previous frame. Does not include window decoration or window padding.
+ ImVec2 ContentSizeIdeal;
+ ImVec2 ContentSizeExplicit; // Size of contents/scrollable client area explicitly request by the user via SetNextWindowContentSize().
+ ImVec2 WindowPadding; // Window padding at the time of Begin().
+ float WindowRounding; // Window rounding at the time of Begin(). May be clamped lower to avoid rendering artifacts with title bar, menu bar etc.
+ float WindowBorderSize; // Window border size at the time of Begin().
+ int NameBufLen; // Size of buffer storing Name. May be larger than strlen(Name)!
+ ImGuiID MoveId; // == window->GetID("#MOVE")
+ ImGuiID ChildId; // ID of corresponding item in parent window (for navigation to return from child window to parent window)
+ ImVec2 Scroll;
+ ImVec2 ScrollMax;
+ ImVec2 ScrollTarget; // target scroll position. stored as cursor position with scrolling canceled out, so the highest point is always 0.0f. (FLT_MAX for no change)
+ ImVec2 ScrollTargetCenterRatio; // 0.0f = scroll so that target position is at top, 0.5f = scroll so that target position is centered
+ ImVec2 ScrollTargetEdgeSnapDist; // 0.0f = no snapping, >0.0f snapping threshold
+ ImVec2 ScrollbarSizes; // Size taken by each scrollbars on their smaller axis. Pay attention! ScrollbarSizes.x == width of the vertical scrollbar, ScrollbarSizes.y = height of the horizontal scrollbar.
+ bool ScrollbarX, ScrollbarY; // Are scrollbars visible?
+ bool Active; // Set to true on Begin(), unless Collapsed
+ bool WasActive;
+ bool WriteAccessed; // Set to true when any widget access the current window
+ bool Collapsed; // Set when collapsing window to become only title-bar
+ bool WantCollapseToggle;
+ bool SkipItems; // Set when items can safely be all clipped (e.g. window not visible or collapsed)
+ bool Appearing; // Set during the frame where the window is appearing (or re-appearing)
+ bool Hidden; // Do not display (== HiddenFrames*** > 0)
+ bool IsFallbackWindow; // Set on the "Debug##Default" window.
+ bool IsExplicitChild; // Set when passed _ChildWindow, left to false by BeginDocked()
+ bool HasCloseButton; // Set when the window has a close button (p_open != NULL)
+ signed char ResizeBorderHeld; // Current border being held for resize (-1: none, otherwise 0-3)
+ short BeginCount; // Number of Begin() during the current frame (generally 0 or 1, 1+ if appending via multiple Begin/End pairs)
+ short BeginOrderWithinParent; // Begin() order within immediate parent window, if we are a child window. Otherwise 0.
+ short BeginOrderWithinContext; // Begin() order within entire imgui context. This is mostly used for debugging submission order related issues.
+ short FocusOrder; // Order within WindowsFocusOrder[], altered when windows are focused.
+ ImGuiID PopupId; // ID in the popup stack when this window is used as a popup/menu (because we use generic Name/ID for recycling)
+ ImS8 AutoFitFramesX, AutoFitFramesY;
+ ImS8 AutoFitChildAxises;
+ bool AutoFitOnlyGrows;
+ ImGuiDir AutoPosLastDirection;
+ ImS8 HiddenFramesCanSkipItems; // Hide the window for N frames
+ ImS8 HiddenFramesCannotSkipItems; // Hide the window for N frames while allowing items to be submitted so we can measure their size
+ ImS8 HiddenFramesForRenderOnly; // Hide the window until frame N at Render() time only
+ ImS8 DisableInputsFrames; // Disable window interactions for N frames
+ ImGuiCond SetWindowPosAllowFlags : 8; // store acceptable condition flags for SetNextWindowPos() use.
+ ImGuiCond SetWindowSizeAllowFlags : 8; // store acceptable condition flags for SetNextWindowSize() use.
+ ImGuiCond SetWindowCollapsedAllowFlags : 8; // store acceptable condition flags for SetNextWindowCollapsed() use.
+ ImVec2 SetWindowPosVal; // store window position when using a non-zero Pivot (position set needs to be processed when we know the window size)
+ ImVec2 SetWindowPosPivot; // store window pivot for positioning. ImVec2(0, 0) when positioning from top-left corner; ImVec2(0.5f, 0.5f) for centering; ImVec2(1, 1) for bottom right.
+
+ ImVector<ImGuiID> IDStack; // ID stack. ID are hashes seeded with the value at the top of the stack. (In theory this should be in the TempData structure)
+ ImGuiWindowTempData DC; // Temporary per-window data, reset at the beginning of the frame. This used to be called ImGuiDrawContext, hence the "DC" variable name.
+
+ // The best way to understand what those rectangles are is to use the 'Metrics->Tools->Show Windows Rectangles' viewer.
+ // The main 'OuterRect', omitted as a field, is window->Rect().
+ ImRect OuterRectClipped; // == Window->Rect() just after setup in Begin(). == window->Rect() for root window.
+ ImRect InnerRect; // Inner rectangle (omit title bar, menu bar, scroll bar)
+ ImRect InnerClipRect; // == InnerRect shrunk by WindowPadding*0.5f on each side, clipped within viewport or parent clip rect.
+ ImRect WorkRect; // Initially covers the whole scrolling region. Reduced by containers e.g columns/tables when active. Shrunk by WindowPadding*1.0f on each side. This is meant to replace ContentRegionRect over time (from 1.71+ onward).
+ ImRect ParentWorkRect; // Backup of WorkRect before entering a container such as columns/tables. Used by e.g. SpanAllColumns functions to easily access. Stacked containers are responsible for maintaining this. // FIXME-WORKRECT: Could be a stack?
+ ImRect ClipRect; // Current clipping/scissoring rectangle, evolve as we are using PushClipRect(), etc. == DrawList->clip_rect_stack.back().
+ ImRect ContentRegionRect; // FIXME: This is currently confusing/misleading. It is essentially WorkRect but not handling of scrolling. We currently rely on it as right/bottom aligned sizing operation need some size to rely on.
+ ImVec2ih HitTestHoleSize; // Define an optional rectangular hole where mouse will pass-through the window.
+ ImVec2ih HitTestHoleOffset;
+
+ int LastFrameActive; // Last frame number the window was Active.
+ float LastTimeActive; // Last timestamp the window was Active (using float as we don't need high precision there)
+ float ItemWidthDefault;
+ ImGuiStorage StateStorage;
+ ImVector<ImGuiOldColumns> ColumnsStorage;
+ float FontWindowScale; // User scale multiplier per-window, via SetWindowFontScale()
+ int SettingsOffset; // Offset into SettingsWindows[] (offsets are always valid as we only grow the array from the back)
+
+ ImDrawList* DrawList; // == &DrawListInst (for backward compatibility reason with code using imgui_internal.h we keep this a pointer)
+ ImDrawList DrawListInst;
+ ImGuiWindow* ParentWindow; // If we are a child _or_ popup _or_ docked window, this is pointing to our parent. Otherwise NULL.
+ ImGuiWindow* ParentWindowInBeginStack;
+ ImGuiWindow* RootWindow; // Point to ourself or first ancestor that is not a child window. Doesn't cross through popups/dock nodes.
+ ImGuiWindow* RootWindowPopupTree; // Point to ourself or first ancestor that is not a child window. Cross through popups parent<>child.
+ ImGuiWindow* RootWindowForTitleBarHighlight; // Point to ourself or first ancestor which will display TitleBgActive color when this window is active.
+ ImGuiWindow* RootWindowForNav; // Point to ourself or first ancestor which doesn't have the NavFlattened flag.
+
+ ImGuiWindow* NavLastChildNavWindow; // When going to the menu bar, we remember the child window we came from. (This could probably be made implicit if we kept g.Windows sorted by last focused including child window.)
+ ImGuiID NavLastIds[ImGuiNavLayer_COUNT]; // Last known NavId for this window, per layer (0/1)
+ ImRect NavRectRel[ImGuiNavLayer_COUNT]; // Reference rectangle, in window relative space
+
+ int MemoryDrawListIdxCapacity; // Backup of last idx/vtx count, so when waking up the window we can preallocate and avoid iterative alloc/copy
+ int MemoryDrawListVtxCapacity;
+ bool MemoryCompacted; // Set when window extraneous data have been garbage collected
+
+public:
+ ImGuiWindow(ImGuiContext* context, const char* name);
+ ~ImGuiWindow();
+
+ ImGuiID GetID(const char* str, const char* str_end = NULL);
+ ImGuiID GetID(const void* ptr);
+ ImGuiID GetID(int n);
+ ImGuiID GetIDFromRectangle(const ImRect& r_abs);
+
+ // We don't use g.FontSize because the window may be != g.CurrentWidow.
+ ImRect Rect() const { return ImRect(Pos.x, Pos.y, Pos.x + Size.x, Pos.y + Size.y); }
+ float CalcFontSize() const { ImGuiContext& g = *GImGui; float scale = g.FontBaseSize * FontWindowScale; if (ParentWindow) scale *= ParentWindow->FontWindowScale; return scale; }
+ float TitleBarHeight() const { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_NoTitleBar) ? 0.0f : CalcFontSize() + g.Style.FramePadding.y * 2.0f; }
+ ImRect TitleBarRect() const { return ImRect(Pos, ImVec2(Pos.x + SizeFull.x, Pos.y + TitleBarHeight())); }
+ float MenuBarHeight() const { ImGuiContext& g = *GImGui; return (Flags & ImGuiWindowFlags_MenuBar) ? DC.MenuBarOffset.y + CalcFontSize() + g.Style.FramePadding.y * 2.0f : 0.0f; }
+ ImRect MenuBarRect() const { float y1 = Pos.y + TitleBarHeight(); return ImRect(Pos.x, y1, Pos.x + SizeFull.x, y1 + MenuBarHeight()); }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Tab bar, Tab item support
+//-----------------------------------------------------------------------------
+
+// Extend ImGuiTabBarFlags_
+enum ImGuiTabBarFlagsPrivate_
+{
+ ImGuiTabBarFlags_DockNode = 1 << 20, // Part of a dock node [we don't use this in the master branch but it facilitate branch syncing to keep this around]
+ ImGuiTabBarFlags_IsFocused = 1 << 21,
+ ImGuiTabBarFlags_SaveSettings = 1 << 22 // FIXME: Settings are handled by the docking system, this only request the tab bar to mark settings dirty when reordering tabs
+};
+
+// Extend ImGuiTabItemFlags_
+enum ImGuiTabItemFlagsPrivate_
+{
+ ImGuiTabItemFlags_SectionMask_ = ImGuiTabItemFlags_Leading | ImGuiTabItemFlags_Trailing,
+ ImGuiTabItemFlags_NoCloseButton = 1 << 20, // Track whether p_open was set or not (we'll need this info on the next frame to recompute ContentWidth during layout)
+ ImGuiTabItemFlags_Button = 1 << 21 // Used by TabItemButton, change the tab item behavior to mimic a button
+};
+
+// Storage for one active tab item (sizeof() 40 bytes)
+struct ImGuiTabItem
+{
+ ImGuiID ID;
+ ImGuiTabItemFlags Flags;
+ int LastFrameVisible;
+ int LastFrameSelected; // This allows us to infer an ordered list of the last activated tabs with little maintenance
+ float Offset; // Position relative to beginning of tab
+ float Width; // Width currently displayed
+ float ContentWidth; // Width of label, stored during BeginTabItem() call
+ float RequestedWidth; // Width optionally requested by caller, -1.0f is unused
+ ImS32 NameOffset; // When Window==NULL, offset to name within parent ImGuiTabBar::TabsNames
+ ImS16 BeginOrder; // BeginTabItem() order, used to re-order tabs after toggling ImGuiTabBarFlags_Reorderable
+ ImS16 IndexDuringLayout; // Index only used during TabBarLayout()
+ bool WantClose; // Marked as closed by SetTabItemClosed()
+
+ ImGuiTabItem() { memset(this, 0, sizeof(*this)); LastFrameVisible = LastFrameSelected = -1; NameOffset = -1; BeginOrder = IndexDuringLayout = -1; }
+};
+
+// Storage for a tab bar (sizeof() 152 bytes)
+struct IMGUI_API ImGuiTabBar
+{
+ ImVector<ImGuiTabItem> Tabs;
+ ImGuiTabBarFlags Flags;
+ ImGuiID ID; // Zero for tab-bars used by docking
+ ImGuiID SelectedTabId; // Selected tab/window
+ ImGuiID NextSelectedTabId; // Next selected tab/window. Will also trigger a scrolling animation
+ ImGuiID VisibleTabId; // Can occasionally be != SelectedTabId (e.g. when previewing contents for CTRL+TAB preview)
+ int CurrFrameVisible;
+ int PrevFrameVisible;
+ ImRect BarRect;
+ float CurrTabsContentsHeight;
+ float PrevTabsContentsHeight; // Record the height of contents submitted below the tab bar
+ float WidthAllTabs; // Actual width of all tabs (locked during layout)
+ float WidthAllTabsIdeal; // Ideal width if all tabs were visible and not clipped
+ float ScrollingAnim;
+ float ScrollingTarget;
+ float ScrollingTargetDistToVisibility;
+ float ScrollingSpeed;
+ float ScrollingRectMinX;
+ float ScrollingRectMaxX;
+ ImGuiID ReorderRequestTabId;
+ ImS16 ReorderRequestOffset;
+ ImS8 BeginCount;
+ bool WantLayout;
+ bool VisibleTabWasSubmitted;
+ bool TabsAddedNew; // Set to true when a new tab item or button has been added to the tab bar during last frame
+ ImS16 TabsActiveCount; // Number of tabs submitted this frame.
+ ImS16 LastTabItemIdx; // Index of last BeginTabItem() tab for use by EndTabItem()
+ float ItemSpacingY;
+ ImVec2 FramePadding; // style.FramePadding locked at the time of BeginTabBar()
+ ImVec2 BackupCursorPos;
+ ImGuiTextBuffer TabsNames; // For non-docking tab bar we re-append names in a contiguous buffer.
+
+ ImGuiTabBar();
+ int GetTabOrder(const ImGuiTabItem* tab) const { return Tabs.index_from_ptr(tab); }
+ const char* GetTabName(const ImGuiTabItem* tab) const
+ {
+ IM_ASSERT(tab->NameOffset != -1 && tab->NameOffset < TabsNames.Buf.Size);
+ return TabsNames.Buf.Data + tab->NameOffset;
+ }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] Table support
+//-----------------------------------------------------------------------------
+
+#define IM_COL32_DISABLE IM_COL32(0,0,0,1) // Special sentinel code which cannot be used as a regular color.
+#define IMGUI_TABLE_MAX_COLUMNS 64 // sizeof(ImU64) * 8. This is solely because we frequently encode columns set in a ImU64.
+#define IMGUI_TABLE_MAX_DRAW_CHANNELS (4 + 64 * 2) // See TableSetupDrawChannels()
+
+// Our current column maximum is 64 but we may raise that in the future.
+typedef ImS8 ImGuiTableColumnIdx;
+typedef ImU8 ImGuiTableDrawChannelIdx;
+
+// [Internal] sizeof() ~ 104
+// We use the terminology "Enabled" to refer to a column that is not Hidden by user/api.
+// We use the terminology "Clipped" to refer to a column that is out of sight because of scrolling/clipping.
+// This is in contrast with some user-facing api such as IsItemVisible() / IsRectVisible() which use "Visible" to mean "not clipped".
+struct ImGuiTableColumn
+{
+ ImGuiTableColumnFlags Flags; // Flags after some patching (not directly same as provided by user). See ImGuiTableColumnFlags_
+ float WidthGiven; // Final/actual width visible == (MaxX - MinX), locked in TableUpdateLayout(). May be > WidthRequest to honor minimum width, may be < WidthRequest to honor shrinking columns down in tight space.
+ float MinX; // Absolute positions
+ float MaxX;
+ float WidthRequest; // Master width absolute value when !(Flags & _WidthStretch). When Stretch this is derived every frame from StretchWeight in TableUpdateLayout()
+ float WidthAuto; // Automatic width
+ float StretchWeight; // Master width weight when (Flags & _WidthStretch). Often around ~1.0f initially.
+ float InitStretchWeightOrWidth; // Value passed to TableSetupColumn(). For Width it is a content width (_without padding_).
+ ImRect ClipRect; // Clipping rectangle for the column
+ ImGuiID UserID; // Optional, value passed to TableSetupColumn()
+ float WorkMinX; // Contents region min ~(MinX + CellPaddingX + CellSpacingX1) == cursor start position when entering column
+ float WorkMaxX; // Contents region max ~(MaxX - CellPaddingX - CellSpacingX2)
+ float ItemWidth; // Current item width for the column, preserved across rows
+ float ContentMaxXFrozen; // Contents maximum position for frozen rows (apart from headers), from which we can infer content width.
+ float ContentMaxXUnfrozen;
+ float ContentMaxXHeadersUsed; // Contents maximum position for headers rows (regardless of freezing). TableHeader() automatically softclip itself + report ideal desired size, to avoid creating extraneous draw calls
+ float ContentMaxXHeadersIdeal;
+ ImS16 NameOffset; // Offset into parent ColumnsNames[]
+ ImGuiTableColumnIdx DisplayOrder; // Index within Table's IndexToDisplayOrder[] (column may be reordered by users)
+ ImGuiTableColumnIdx IndexWithinEnabledSet; // Index within enabled/visible set (<= IndexToDisplayOrder)
+ ImGuiTableColumnIdx PrevEnabledColumn; // Index of prev enabled/visible column within Columns[], -1 if first enabled/visible column
+ ImGuiTableColumnIdx NextEnabledColumn; // Index of next enabled/visible column within Columns[], -1 if last enabled/visible column
+ ImGuiTableColumnIdx SortOrder; // Index of this column within sort specs, -1 if not sorting on this column, 0 for single-sort, may be >0 on multi-sort
+ ImGuiTableDrawChannelIdx DrawChannelCurrent; // Index within DrawSplitter.Channels[]
+ ImGuiTableDrawChannelIdx DrawChannelFrozen; // Draw channels for frozen rows (often headers)
+ ImGuiTableDrawChannelIdx DrawChannelUnfrozen; // Draw channels for unfrozen rows
+ bool IsEnabled; // IsUserEnabled && (Flags & ImGuiTableColumnFlags_Disabled) == 0
+ bool IsUserEnabled; // Is the column not marked Hidden by the user? (unrelated to being off view, e.g. clipped by scrolling).
+ bool IsUserEnabledNextFrame;
+ bool IsVisibleX; // Is actually in view (e.g. overlapping the host window clipping rectangle, not scrolled).
+ bool IsVisibleY;
+ bool IsRequestOutput; // Return value for TableSetColumnIndex() / TableNextColumn(): whether we request user to output contents or not.
+ bool IsSkipItems; // Do we want item submissions to this column to be completely ignored (no layout will happen).
+ bool IsPreserveWidthAuto;
+ ImS8 NavLayerCurrent; // ImGuiNavLayer in 1 byte
+ ImU8 AutoFitQueue; // Queue of 8 values for the next 8 frames to request auto-fit
+ ImU8 CannotSkipItemsQueue; // Queue of 8 values for the next 8 frames to disable Clipped/SkipItem
+ ImU8 SortDirection : 2; // ImGuiSortDirection_Ascending or ImGuiSortDirection_Descending
+ ImU8 SortDirectionsAvailCount : 2; // Number of available sort directions (0 to 3)
+ ImU8 SortDirectionsAvailMask : 4; // Mask of available sort directions (1-bit each)
+ ImU8 SortDirectionsAvailList; // Ordered of available sort directions (2-bits each)
+
+ ImGuiTableColumn()
+ {
+ memset(this, 0, sizeof(*this));
+ StretchWeight = WidthRequest = -1.0f;
+ NameOffset = -1;
+ DisplayOrder = IndexWithinEnabledSet = -1;
+ PrevEnabledColumn = NextEnabledColumn = -1;
+ SortOrder = -1;
+ SortDirection = ImGuiSortDirection_None;
+ DrawChannelCurrent = DrawChannelFrozen = DrawChannelUnfrozen = (ImU8)-1;
+ }
+};
+
+// Transient cell data stored per row.
+// sizeof() ~ 6
+struct ImGuiTableCellData
+{
+ ImU32 BgColor; // Actual color
+ ImGuiTableColumnIdx Column; // Column number
+};
+
+// Per-instance data that needs preserving across frames (seemingly most others do not need to be preserved aside from debug needs, does that needs they could be moved to ImGuiTableTempData ?)
+struct ImGuiTableInstanceData
+{
+ float LastOuterHeight; // Outer height from last frame // FIXME: multi-instance issue (#3955)
+ float LastFirstRowHeight; // Height of first row from last frame // FIXME: possible multi-instance issue?
+
+ ImGuiTableInstanceData() { LastOuterHeight = LastFirstRowHeight = 0.0f; }
+};
+
+// FIXME-TABLE: more transient data could be stored in a per-stacked table structure: DrawSplitter, SortSpecs, incoming RowData
+struct IMGUI_API ImGuiTable
+{
+ ImGuiID ID;
+ ImGuiTableFlags Flags;
+ void* RawData; // Single allocation to hold Columns[], DisplayOrderToIndex[] and RowCellData[]
+ ImGuiTableTempData* TempData; // Transient data while table is active. Point within g.CurrentTableStack[]
+ ImSpan<ImGuiTableColumn> Columns; // Point within RawData[]
+ ImSpan<ImGuiTableColumnIdx> DisplayOrderToIndex; // Point within RawData[]. Store display order of columns (when not reordered, the values are 0...Count-1)
+ ImSpan<ImGuiTableCellData> RowCellData; // Point within RawData[]. Store cells background requests for current row.
+ ImU64 EnabledMaskByDisplayOrder; // Column DisplayOrder -> IsEnabled map
+ ImU64 EnabledMaskByIndex; // Column Index -> IsEnabled map (== not hidden by user/api) in a format adequate for iterating column without touching cold data
+ ImU64 VisibleMaskByIndex; // Column Index -> IsVisibleX|IsVisibleY map (== not hidden by user/api && not hidden by scrolling/cliprect)
+ ImU64 RequestOutputMaskByIndex; // Column Index -> IsVisible || AutoFit (== expect user to submit items)
+ ImGuiTableFlags SettingsLoadedFlags; // Which data were loaded from the .ini file (e.g. when order is not altered we won't save order)
+ int SettingsOffset; // Offset in g.SettingsTables
+ int LastFrameActive;
+ int ColumnsCount; // Number of columns declared in BeginTable()
+ int CurrentRow;
+ int CurrentColumn;
+ ImS16 InstanceCurrent; // Count of BeginTable() calls with same ID in the same frame (generally 0). This is a little bit similar to BeginCount for a window, but multiple table with same ID look are multiple tables, they are just synched.
+ ImS16 InstanceInteracted; // Mark which instance (generally 0) of the same ID is being interacted with
+ float RowPosY1;
+ float RowPosY2;
+ float RowMinHeight; // Height submitted to TableNextRow()
+ float RowTextBaseline;
+ float RowIndentOffsetX;
+ ImGuiTableRowFlags RowFlags : 16; // Current row flags, see ImGuiTableRowFlags_
+ ImGuiTableRowFlags LastRowFlags : 16;
+ int RowBgColorCounter; // Counter for alternating background colors (can be fast-forwarded by e.g clipper), not same as CurrentRow because header rows typically don't increase this.
+ ImU32 RowBgColor[2]; // Background color override for current row.
+ ImU32 BorderColorStrong;
+ ImU32 BorderColorLight;
+ float BorderX1;
+ float BorderX2;
+ float HostIndentX;
+ float MinColumnWidth;
+ float OuterPaddingX;
+ float CellPaddingX; // Padding from each borders
+ float CellPaddingY;
+ float CellSpacingX1; // Spacing between non-bordered cells
+ float CellSpacingX2;
+ float InnerWidth; // User value passed to BeginTable(), see comments at the top of BeginTable() for details.
+ float ColumnsGivenWidth; // Sum of current column width
+ float ColumnsAutoFitWidth; // Sum of ideal column width in order nothing to be clipped, used for auto-fitting and content width submission in outer window
+ float ColumnsStretchSumWeights; // Sum of weight of all enabled stretching columns
+ float ResizedColumnNextWidth;
+ float ResizeLockMinContentsX2; // Lock minimum contents width while resizing down in order to not create feedback loops. But we allow growing the table.
+ float RefScale; // Reference scale to be able to rescale columns on font/dpi changes.
+ ImRect OuterRect; // Note: for non-scrolling table, OuterRect.Max.y is often FLT_MAX until EndTable(), unless a height has been specified in BeginTable().
+ ImRect InnerRect; // InnerRect but without decoration. As with OuterRect, for non-scrolling tables, InnerRect.Max.y is
+ ImRect WorkRect;
+ ImRect InnerClipRect;
+ ImRect BgClipRect; // We use this to cpu-clip cell background color fill, evolve during the frame as we cross frozen rows boundaries
+ ImRect Bg0ClipRectForDrawCmd; // Actual ImDrawCmd clip rect for BG0/1 channel. This tends to be == OuterWindow->ClipRect at BeginTable() because output in BG0/BG1 is cpu-clipped
+ ImRect Bg2ClipRectForDrawCmd; // Actual ImDrawCmd clip rect for BG2 channel. This tends to be a correct, tight-fit, because output to BG2 are done by widgets relying on regular ClipRect.
+ ImRect HostClipRect; // This is used to check if we can eventually merge our columns draw calls into the current draw call of the current window.
+ ImRect HostBackupInnerClipRect; // Backup of InnerWindow->ClipRect during PushTableBackground()/PopTableBackground()
+ ImGuiWindow* OuterWindow; // Parent window for the table
+ ImGuiWindow* InnerWindow; // Window holding the table data (== OuterWindow or a child window)
+ ImGuiTextBuffer ColumnsNames; // Contiguous buffer holding columns names
+ ImDrawListSplitter* DrawSplitter; // Shortcut to TempData->DrawSplitter while in table. Isolate draw commands per columns to avoid switching clip rect constantly
+ ImGuiTableInstanceData InstanceDataFirst;
+ ImVector<ImGuiTableInstanceData> InstanceDataExtra; // FIXME-OPT: Using a small-vector pattern would be good.
+ ImGuiTableColumnSortSpecs SortSpecsSingle;
+ ImVector<ImGuiTableColumnSortSpecs> SortSpecsMulti; // FIXME-OPT: Using a small-vector pattern would be good.
+ ImGuiTableSortSpecs SortSpecs; // Public facing sorts specs, this is what we return in TableGetSortSpecs()
+ ImGuiTableColumnIdx SortSpecsCount;
+ ImGuiTableColumnIdx ColumnsEnabledCount; // Number of enabled columns (<= ColumnsCount)
+ ImGuiTableColumnIdx ColumnsEnabledFixedCount; // Number of enabled columns (<= ColumnsCount)
+ ImGuiTableColumnIdx DeclColumnsCount; // Count calls to TableSetupColumn()
+ ImGuiTableColumnIdx HoveredColumnBody; // Index of column whose visible region is being hovered. Important: == ColumnsCount when hovering empty region after the right-most column!
+ ImGuiTableColumnIdx HoveredColumnBorder; // Index of column whose right-border is being hovered (for resizing).
+ ImGuiTableColumnIdx AutoFitSingleColumn; // Index of single column requesting auto-fit.
+ ImGuiTableColumnIdx ResizedColumn; // Index of column being resized. Reset when InstanceCurrent==0.
+ ImGuiTableColumnIdx LastResizedColumn; // Index of column being resized from previous frame.
+ ImGuiTableColumnIdx HeldHeaderColumn; // Index of column header being held.
+ ImGuiTableColumnIdx ReorderColumn; // Index of column being reordered. (not cleared)
+ ImGuiTableColumnIdx ReorderColumnDir; // -1 or +1
+ ImGuiTableColumnIdx LeftMostEnabledColumn; // Index of left-most non-hidden column.
+ ImGuiTableColumnIdx RightMostEnabledColumn; // Index of right-most non-hidden column.
+ ImGuiTableColumnIdx LeftMostStretchedColumn; // Index of left-most stretched column.
+ ImGuiTableColumnIdx RightMostStretchedColumn; // Index of right-most stretched column.
+ ImGuiTableColumnIdx ContextPopupColumn; // Column right-clicked on, of -1 if opening context menu from a neutral/empty spot
+ ImGuiTableColumnIdx FreezeRowsRequest; // Requested frozen rows count
+ ImGuiTableColumnIdx FreezeRowsCount; // Actual frozen row count (== FreezeRowsRequest, or == 0 when no scrolling offset)
+ ImGuiTableColumnIdx FreezeColumnsRequest; // Requested frozen columns count
+ ImGuiTableColumnIdx FreezeColumnsCount; // Actual frozen columns count (== FreezeColumnsRequest, or == 0 when no scrolling offset)
+ ImGuiTableColumnIdx RowCellDataCurrent; // Index of current RowCellData[] entry in current row
+ ImGuiTableDrawChannelIdx DummyDrawChannel; // Redirect non-visible columns here.
+ ImGuiTableDrawChannelIdx Bg2DrawChannelCurrent; // For Selectable() and other widgets drawing across columns after the freezing line. Index within DrawSplitter.Channels[]
+ ImGuiTableDrawChannelIdx Bg2DrawChannelUnfrozen;
+ bool IsLayoutLocked; // Set by TableUpdateLayout() which is called when beginning the first row.
+ bool IsInsideRow; // Set when inside TableBeginRow()/TableEndRow().
+ bool IsInitializing;
+ bool IsSortSpecsDirty;
+ bool IsUsingHeaders; // Set when the first row had the ImGuiTableRowFlags_Headers flag.
+ bool IsContextPopupOpen; // Set when default context menu is open (also see: ContextPopupColumn, InstanceInteracted).
+ bool IsSettingsRequestLoad;
+ bool IsSettingsDirty; // Set when table settings have changed and needs to be reported into ImGuiTableSetttings data.
+ bool IsDefaultDisplayOrder; // Set when display order is unchanged from default (DisplayOrder contains 0...Count-1)
+ bool IsResetAllRequest;
+ bool IsResetDisplayOrderRequest;
+ bool IsUnfrozenRows; // Set when we got past the frozen row.
+ bool IsDefaultSizingPolicy; // Set if user didn't explicitly set a sizing policy in BeginTable()
+ bool MemoryCompacted;
+ bool HostSkipItems; // Backup of InnerWindow->SkipItem at the end of BeginTable(), because we will overwrite InnerWindow->SkipItem on a per-column basis
+
+ ImGuiTable() { memset(this, 0, sizeof(*this)); LastFrameActive = -1; }
+ ~ImGuiTable() { IM_FREE(RawData); }
+};
+
+// Transient data that are only needed between BeginTable() and EndTable(), those buffers are shared (1 per level of stacked table).
+// - Accessing those requires chasing an extra pointer so for very frequently used data we leave them in the main table structure.
+// - We also leave out of this structure data that tend to be particularly useful for debugging/metrics.
+struct IMGUI_API ImGuiTableTempData
+{
+ int TableIndex; // Index in g.Tables.Buf[] pool
+ float LastTimeActive; // Last timestamp this structure was used
+
+ ImVec2 UserOuterSize; // outer_size.x passed to BeginTable()
+ ImDrawListSplitter DrawSplitter;
+
+ ImRect HostBackupWorkRect; // Backup of InnerWindow->WorkRect at the end of BeginTable()
+ ImRect HostBackupParentWorkRect; // Backup of InnerWindow->ParentWorkRect at the end of BeginTable()
+ ImVec2 HostBackupPrevLineSize; // Backup of InnerWindow->DC.PrevLineSize at the end of BeginTable()
+ ImVec2 HostBackupCurrLineSize; // Backup of InnerWindow->DC.CurrLineSize at the end of BeginTable()
+ ImVec2 HostBackupCursorMaxPos; // Backup of InnerWindow->DC.CursorMaxPos at the end of BeginTable()
+ ImVec1 HostBackupColumnsOffset; // Backup of OuterWindow->DC.ColumnsOffset at the end of BeginTable()
+ float HostBackupItemWidth; // Backup of OuterWindow->DC.ItemWidth at the end of BeginTable()
+ int HostBackupItemWidthStackSize;//Backup of OuterWindow->DC.ItemWidthStack.Size at the end of BeginTable()
+
+ ImGuiTableTempData() { memset(this, 0, sizeof(*this)); LastTimeActive = -1.0f; }
+};
+
+// sizeof() ~ 12
+struct ImGuiTableColumnSettings
+{
+ float WidthOrWeight;
+ ImGuiID UserID;
+ ImGuiTableColumnIdx Index;
+ ImGuiTableColumnIdx DisplayOrder;
+ ImGuiTableColumnIdx SortOrder;
+ ImU8 SortDirection : 2;
+ ImU8 IsEnabled : 1; // "Visible" in ini file
+ ImU8 IsStretch : 1;
+
+ ImGuiTableColumnSettings()
+ {
+ WidthOrWeight = 0.0f;
+ UserID = 0;
+ Index = -1;
+ DisplayOrder = SortOrder = -1;
+ SortDirection = ImGuiSortDirection_None;
+ IsEnabled = 1;
+ IsStretch = 0;
+ }
+};
+
+// This is designed to be stored in a single ImChunkStream (1 header followed by N ImGuiTableColumnSettings, etc.)
+struct ImGuiTableSettings
+{
+ ImGuiID ID; // Set to 0 to invalidate/delete the setting
+ ImGuiTableFlags SaveFlags; // Indicate data we want to save using the Resizable/Reorderable/Sortable/Hideable flags (could be using its own flags..)
+ float RefScale; // Reference scale to be able to rescale columns on font/dpi changes.
+ ImGuiTableColumnIdx ColumnsCount;
+ ImGuiTableColumnIdx ColumnsCountMax; // Maximum number of columns this settings instance can store, we can recycle a settings instance with lower number of columns but not higher
+ bool WantApply; // Set when loaded from .ini data (to enable merging/loading .ini data into an already running context)
+
+ ImGuiTableSettings() { memset(this, 0, sizeof(*this)); }
+ ImGuiTableColumnSettings* GetColumnSettings() { return (ImGuiTableColumnSettings*)(this + 1); }
+};
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImGui internal API
+// No guarantee of forward compatibility here!
+//-----------------------------------------------------------------------------
+
+namespace ImGui
+{
+ // Windows
+ // We should always have a CurrentWindow in the stack (there is an implicit "Debug" window)
+ // If this ever crash because g.CurrentWindow is NULL it means that either
+ // - ImGui::NewFrame() has never been called, which is illegal.
+ // - You are calling ImGui functions after ImGui::EndFrame()/ImGui::Render() and before the next ImGui::NewFrame(), which is also illegal.
+ inline ImGuiWindow* GetCurrentWindowRead() { ImGuiContext& g = *GImGui; return g.CurrentWindow; }
+ inline ImGuiWindow* GetCurrentWindow() { ImGuiContext& g = *GImGui; g.CurrentWindow->WriteAccessed = true; return g.CurrentWindow; }
+ IMGUI_API ImGuiWindow* FindWindowByID(ImGuiID id);
+ IMGUI_API ImGuiWindow* FindWindowByName(const char* name);
+ IMGUI_API void UpdateWindowParentAndRootLinks(ImGuiWindow* window, ImGuiWindowFlags flags, ImGuiWindow* parent_window);
+ IMGUI_API ImVec2 CalcWindowNextAutoFitSize(ImGuiWindow* window);
+ IMGUI_API bool IsWindowChildOf(ImGuiWindow* window, ImGuiWindow* potential_parent, bool popup_hierarchy);
+ IMGUI_API bool IsWindowWithinBeginStackOf(ImGuiWindow* window, ImGuiWindow* potential_parent);
+ IMGUI_API bool IsWindowAbove(ImGuiWindow* potential_above, ImGuiWindow* potential_below);
+ IMGUI_API bool IsWindowNavFocusable(ImGuiWindow* window);
+ IMGUI_API void SetWindowPos(ImGuiWindow* window, const ImVec2& pos, ImGuiCond cond = 0);
+ IMGUI_API void SetWindowSize(ImGuiWindow* window, const ImVec2& size, ImGuiCond cond = 0);
+ IMGUI_API void SetWindowCollapsed(ImGuiWindow* window, bool collapsed, ImGuiCond cond = 0);
+ IMGUI_API void SetWindowHitTestHole(ImGuiWindow* window, const ImVec2& pos, const ImVec2& size);
+ inline ImRect WindowRectAbsToRel(ImGuiWindow* window, const ImRect& r) { ImVec2 off = window->DC.CursorStartPos; return ImRect(r.Min.x - off.x, r.Min.y - off.y, r.Max.x - off.x, r.Max.y - off.y); }
+ inline ImRect WindowRectRelToAbs(ImGuiWindow* window, const ImRect& r) { ImVec2 off = window->DC.CursorStartPos; return ImRect(r.Min.x + off.x, r.Min.y + off.y, r.Max.x + off.x, r.Max.y + off.y); }
+
+ // Windows: Display Order and Focus Order
+ IMGUI_API void FocusWindow(ImGuiWindow* window);
+ IMGUI_API void FocusTopMostWindowUnderOne(ImGuiWindow* under_this_window, ImGuiWindow* ignore_window);
+ IMGUI_API void BringWindowToFocusFront(ImGuiWindow* window);
+ IMGUI_API void BringWindowToDisplayFront(ImGuiWindow* window);
+ IMGUI_API void BringWindowToDisplayBack(ImGuiWindow* window);
+ IMGUI_API void BringWindowToDisplayBehind(ImGuiWindow* window, ImGuiWindow* above_window);
+ IMGUI_API int FindWindowDisplayIndex(ImGuiWindow* window);
+ IMGUI_API ImGuiWindow* FindBottomMostVisibleWindowWithinBeginStack(ImGuiWindow* window);
+
+ // Fonts, drawing
+ IMGUI_API void SetCurrentFont(ImFont* font);
+ inline ImFont* GetDefaultFont() { ImGuiContext& g = *GImGui; return g.IO.FontDefault ? g.IO.FontDefault : g.IO.Fonts->Fonts[0]; }
+ inline ImDrawList* GetForegroundDrawList(ImGuiWindow* window) { IM_UNUSED(window); return GetForegroundDrawList(); } // This seemingly unnecessary wrapper simplifies compatibility between the 'master' and 'docking' branches.
+ IMGUI_API ImDrawList* GetBackgroundDrawList(ImGuiViewport* viewport); // get background draw list for the given viewport. this draw list will be the first rendering one. Useful to quickly draw shapes/text behind dear imgui contents.
+ IMGUI_API ImDrawList* GetForegroundDrawList(ImGuiViewport* viewport); // get foreground draw list for the given viewport. this draw list will be the last rendered one. Useful to quickly draw shapes/text over dear imgui contents.
+
+ // Init
+ IMGUI_API void Initialize();
+ IMGUI_API void Shutdown(); // Since 1.60 this is a _private_ function. You can call DestroyContext() to destroy the context created by CreateContext().
+
+ // NewFrame
+ IMGUI_API void UpdateInputEvents(bool trickle_fast_inputs);
+ IMGUI_API void UpdateHoveredWindowAndCaptureFlags();
+ IMGUI_API void StartMouseMovingWindow(ImGuiWindow* window);
+ IMGUI_API void UpdateMouseMovingWindowNewFrame();
+ IMGUI_API void UpdateMouseMovingWindowEndFrame();
+
+ // Generic context hooks
+ IMGUI_API ImGuiID AddContextHook(ImGuiContext* context, const ImGuiContextHook* hook);
+ IMGUI_API void RemoveContextHook(ImGuiContext* context, ImGuiID hook_to_remove);
+ IMGUI_API void CallContextHooks(ImGuiContext* context, ImGuiContextHookType type);
+
+ // Viewports
+ IMGUI_API void SetWindowViewport(ImGuiWindow* window, ImGuiViewportP* viewport);
+
+ // Settings
+ IMGUI_API void MarkIniSettingsDirty();
+ IMGUI_API void MarkIniSettingsDirty(ImGuiWindow* window);
+ IMGUI_API void ClearIniSettings();
+ IMGUI_API ImGuiWindowSettings* CreateNewWindowSettings(const char* name);
+ IMGUI_API ImGuiWindowSettings* FindWindowSettings(ImGuiID id);
+ IMGUI_API ImGuiWindowSettings* FindOrCreateWindowSettings(const char* name);
+ IMGUI_API void AddSettingsHandler(const ImGuiSettingsHandler* handler);
+ IMGUI_API void RemoveSettingsHandler(const char* type_name);
+ IMGUI_API ImGuiSettingsHandler* FindSettingsHandler(const char* type_name);
+
+ // Scrolling
+ IMGUI_API void SetNextWindowScroll(const ImVec2& scroll); // Use -1.0f on one axis to leave as-is
+ IMGUI_API void SetScrollX(ImGuiWindow* window, float scroll_x);
+ IMGUI_API void SetScrollY(ImGuiWindow* window, float scroll_y);
+ IMGUI_API void SetScrollFromPosX(ImGuiWindow* window, float local_x, float center_x_ratio);
+ IMGUI_API void SetScrollFromPosY(ImGuiWindow* window, float local_y, float center_y_ratio);
+
+ // Early work-in-progress API (ScrollToItem() will become public)
+ IMGUI_API void ScrollToItem(ImGuiScrollFlags flags = 0);
+ IMGUI_API void ScrollToRect(ImGuiWindow* window, const ImRect& rect, ImGuiScrollFlags flags = 0);
+ IMGUI_API ImVec2 ScrollToRectEx(ImGuiWindow* window, const ImRect& rect, ImGuiScrollFlags flags = 0);
+//#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ inline void ScrollToBringRectIntoView(ImGuiWindow* window, const ImRect& rect) { ScrollToRect(window, rect, ImGuiScrollFlags_KeepVisibleEdgeY); }
+//#endif
+
+ // Basic Accessors
+ inline ImGuiID GetItemID() { ImGuiContext& g = *GImGui; return g.LastItemData.ID; } // Get ID of last item (~~ often same ImGui::GetID(label) beforehand)
+ inline ImGuiItemStatusFlags GetItemStatusFlags(){ ImGuiContext& g = *GImGui; return g.LastItemData.StatusFlags; }
+ inline ImGuiItemFlags GetItemFlags() { ImGuiContext& g = *GImGui; return g.LastItemData.InFlags; }
+ inline ImGuiID GetActiveID() { ImGuiContext& g = *GImGui; return g.ActiveId; }
+ inline ImGuiID GetFocusID() { ImGuiContext& g = *GImGui; return g.NavId; }
+ IMGUI_API void SetActiveID(ImGuiID id, ImGuiWindow* window);
+ IMGUI_API void SetFocusID(ImGuiID id, ImGuiWindow* window);
+ IMGUI_API void ClearActiveID();
+ IMGUI_API ImGuiID GetHoveredID();
+ IMGUI_API void SetHoveredID(ImGuiID id);
+ IMGUI_API void KeepAliveID(ImGuiID id);
+ IMGUI_API void MarkItemEdited(ImGuiID id); // Mark data associated to given item as "edited", used by IsItemDeactivatedAfterEdit() function.
+ IMGUI_API void PushOverrideID(ImGuiID id); // Push given value as-is at the top of the ID stack (whereas PushID combines old and new hashes)
+ IMGUI_API ImGuiID GetIDWithSeed(const char* str_id_begin, const char* str_id_end, ImGuiID seed);
+
+ // Basic Helpers for widget code
+ IMGUI_API void ItemSize(const ImVec2& size, float text_baseline_y = -1.0f);
+ inline void ItemSize(const ImRect& bb, float text_baseline_y = -1.0f) { ItemSize(bb.GetSize(), text_baseline_y); } // FIXME: This is a misleading API since we expect CursorPos to be bb.Min.
+ IMGUI_API bool ItemAdd(const ImRect& bb, ImGuiID id, const ImRect* nav_bb = NULL, ImGuiItemFlags extra_flags = 0);
+ IMGUI_API bool ItemHoverable(const ImRect& bb, ImGuiID id);
+ IMGUI_API bool IsClippedEx(const ImRect& bb, ImGuiID id);
+ IMGUI_API void SetLastItemData(ImGuiID item_id, ImGuiItemFlags in_flags, ImGuiItemStatusFlags status_flags, const ImRect& item_rect);
+ IMGUI_API ImVec2 CalcItemSize(ImVec2 size, float default_w, float default_h);
+ IMGUI_API float CalcWrapWidthForPos(const ImVec2& pos, float wrap_pos_x);
+ IMGUI_API void PushMultiItemsWidths(int components, float width_full);
+ IMGUI_API bool IsItemToggledSelection(); // Was the last item selection toggled? (after Selectable(), TreeNode() etc. We only returns toggle _event_ in order to handle clipping correctly)
+ IMGUI_API ImVec2 GetContentRegionMaxAbs();
+ IMGUI_API void ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess);
+
+ // Parameter stacks
+ IMGUI_API void PushItemFlag(ImGuiItemFlags option, bool enabled);
+ IMGUI_API void PopItemFlag();
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ // Currently refactoring focus/nav/tabbing system
+ // If you have old/custom copy-and-pasted widgets that used FocusableItemRegister():
+ // (Old) IMGUI_VERSION_NUM < 18209: using 'ItemAdd(....)' and 'bool tab_focused = FocusableItemRegister(...)'
+ // (Old) IMGUI_VERSION_NUM >= 18209: using 'ItemAdd(..., ImGuiItemAddFlags_Focusable)' and 'bool tab_focused = (GetItemStatusFlags() & ImGuiItemStatusFlags_Focused) != 0'
+ // (New) IMGUI_VERSION_NUM >= 18413: using 'ItemAdd(..., ImGuiItemFlags_Inputable)' and 'bool tab_focused = (GetItemStatusFlags() & ImGuiItemStatusFlags_FocusedTabbing) != 0 || g.NavActivateInputId == id' (WIP)
+ // Widget code are simplified as there's no need to call FocusableItemUnregister() while managing the transition from regular widget to TempInputText()
+ inline bool FocusableItemRegister(ImGuiWindow* window, ImGuiID id) { IM_ASSERT(0); IM_UNUSED(window); IM_UNUSED(id); return false; } // -> pass ImGuiItemAddFlags_Inputable flag to ItemAdd()
+ inline void FocusableItemUnregister(ImGuiWindow* window) { IM_ASSERT(0); IM_UNUSED(window); } // -> unnecessary: TempInputText() uses ImGuiInputTextFlags_MergedItem
+#endif
+
+ // Logging/Capture
+ IMGUI_API void LogBegin(ImGuiLogType type, int auto_open_depth); // -> BeginCapture() when we design v2 api, for now stay under the radar by using the old name.
+ IMGUI_API void LogToBuffer(int auto_open_depth = -1); // Start logging/capturing to internal buffer
+ IMGUI_API void LogRenderedText(const ImVec2* ref_pos, const char* text, const char* text_end = NULL);
+ IMGUI_API void LogSetNextTextDecoration(const char* prefix, const char* suffix);
+
+ // Popups, Modals, Tooltips
+ IMGUI_API bool BeginChildEx(const char* name, ImGuiID id, const ImVec2& size_arg, bool border, ImGuiWindowFlags flags);
+ IMGUI_API void OpenPopupEx(ImGuiID id, ImGuiPopupFlags popup_flags = ImGuiPopupFlags_None);
+ IMGUI_API void ClosePopupToLevel(int remaining, bool restore_focus_to_window_under_popup);
+ IMGUI_API void ClosePopupsOverWindow(ImGuiWindow* ref_window, bool restore_focus_to_window_under_popup);
+ IMGUI_API void ClosePopupsExceptModals();
+ IMGUI_API bool IsPopupOpen(ImGuiID id, ImGuiPopupFlags popup_flags);
+ IMGUI_API bool BeginPopupEx(ImGuiID id, ImGuiWindowFlags extra_flags);
+ IMGUI_API void BeginTooltipEx(ImGuiTooltipFlags tooltip_flags, ImGuiWindowFlags extra_window_flags);
+ IMGUI_API ImRect GetPopupAllowedExtentRect(ImGuiWindow* window);
+ IMGUI_API ImGuiWindow* GetTopMostPopupModal();
+ IMGUI_API ImGuiWindow* GetTopMostAndVisiblePopupModal();
+ IMGUI_API ImVec2 FindBestWindowPosForPopup(ImGuiWindow* window);
+ IMGUI_API ImVec2 FindBestWindowPosForPopupEx(const ImVec2& ref_pos, const ImVec2& size, ImGuiDir* last_dir, const ImRect& r_outer, const ImRect& r_avoid, ImGuiPopupPositionPolicy policy);
+
+ // Menus
+ IMGUI_API bool BeginViewportSideBar(const char* name, ImGuiViewport* viewport, ImGuiDir dir, float size, ImGuiWindowFlags window_flags);
+ IMGUI_API bool BeginMenuEx(const char* label, const char* icon, bool enabled = true);
+ IMGUI_API bool MenuItemEx(const char* label, const char* icon, const char* shortcut = NULL, bool selected = false, bool enabled = true);
+
+ // Combos
+ IMGUI_API bool BeginComboPopup(ImGuiID popup_id, const ImRect& bb, ImGuiComboFlags flags);
+ IMGUI_API bool BeginComboPreview();
+ IMGUI_API void EndComboPreview();
+
+ // Gamepad/Keyboard Navigation
+ IMGUI_API void NavInitWindow(ImGuiWindow* window, bool force_reinit);
+ IMGUI_API void NavInitRequestApplyResult();
+ IMGUI_API bool NavMoveRequestButNoResultYet();
+ IMGUI_API void NavMoveRequestSubmit(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags);
+ IMGUI_API void NavMoveRequestForward(ImGuiDir move_dir, ImGuiDir clip_dir, ImGuiNavMoveFlags move_flags, ImGuiScrollFlags scroll_flags);
+ IMGUI_API void NavMoveRequestResolveWithLastItem(ImGuiNavItemData* result);
+ IMGUI_API void NavMoveRequestCancel();
+ IMGUI_API void NavMoveRequestApplyResult();
+ IMGUI_API void NavMoveRequestTryWrapping(ImGuiWindow* window, ImGuiNavMoveFlags move_flags);
+ IMGUI_API const char* GetNavInputName(ImGuiNavInput n);
+ IMGUI_API float GetNavInputAmount(ImGuiNavInput n, ImGuiNavReadMode mode);
+ IMGUI_API ImVec2 GetNavInputAmount2d(ImGuiNavDirSourceFlags dir_sources, ImGuiNavReadMode mode, float slow_factor = 0.0f, float fast_factor = 0.0f);
+ IMGUI_API int CalcTypematicRepeatAmount(float t0, float t1, float repeat_delay, float repeat_rate);
+ IMGUI_API void ActivateItem(ImGuiID id); // Remotely activate a button, checkbox, tree node etc. given its unique ID. activation is queued and processed on the next frame when the item is encountered again.
+ IMGUI_API void SetNavWindow(ImGuiWindow* window);
+ IMGUI_API void SetNavID(ImGuiID id, ImGuiNavLayer nav_layer, ImGuiID focus_scope_id, const ImRect& rect_rel);
+
+ // Focus Scope (WIP)
+ // This is generally used to identify a selection set (multiple of which may be in the same window), as selection
+ // patterns generally need to react (e.g. clear selection) when landing on an item of the set.
+ IMGUI_API void PushFocusScope(ImGuiID id);
+ IMGUI_API void PopFocusScope();
+ inline ImGuiID GetFocusedFocusScope() { ImGuiContext& g = *GImGui; return g.NavFocusScopeId; } // Focus scope which is actually active
+ inline ImGuiID GetFocusScope() { ImGuiContext& g = *GImGui; return g.CurrentWindow->DC.NavFocusScopeIdCurrent; } // Focus scope we are outputting into, set by PushFocusScope()
+
+ // Inputs
+ // FIXME: Eventually we should aim to move e.g. IsActiveIdUsingKey() into IsKeyXXX functions.
+ inline bool IsNamedKey(ImGuiKey key) { return key >= ImGuiKey_NamedKey_BEGIN && key < ImGuiKey_NamedKey_END; }
+ inline bool IsLegacyKey(ImGuiKey key) { return key >= ImGuiKey_LegacyNativeKey_BEGIN && key < ImGuiKey_LegacyNativeKey_END; }
+ inline bool IsGamepadKey(ImGuiKey key) { return key >= ImGuiKey_Gamepad_BEGIN && key < ImGuiKey_Gamepad_END; }
+ IMGUI_API ImGuiKeyData* GetKeyData(ImGuiKey key);
+ IMGUI_API void SetItemUsingMouseWheel();
+ IMGUI_API void SetActiveIdUsingNavAndKeys();
+ inline bool IsActiveIdUsingNavDir(ImGuiDir dir) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavDirMask & (1 << dir)) != 0; }
+ inline bool IsActiveIdUsingNavInput(ImGuiNavInput input) { ImGuiContext& g = *GImGui; return (g.ActiveIdUsingNavInputMask & (1 << input)) != 0; }
+ inline bool IsActiveIdUsingKey(ImGuiKey key) { ImGuiContext& g = *GImGui; return g.ActiveIdUsingKeyInputMask[key]; }
+ inline void SetActiveIdUsingKey(ImGuiKey key) { ImGuiContext& g = *GImGui; g.ActiveIdUsingKeyInputMask.SetBit(key); }
+ IMGUI_API bool IsMouseDragPastThreshold(ImGuiMouseButton button, float lock_threshold = -1.0f);
+ inline bool IsNavInputDown(ImGuiNavInput n) { ImGuiContext& g = *GImGui; return g.IO.NavInputs[n] > 0.0f; }
+ inline bool IsNavInputTest(ImGuiNavInput n, ImGuiNavReadMode rm) { return (GetNavInputAmount(n, rm) > 0.0f); }
+ IMGUI_API ImGuiModFlags GetMergedModFlags();
+#ifndef IMGUI_DISABLE_OBSOLETE_KEYIO
+ inline bool IsKeyPressedMap(ImGuiKey key, bool repeat = true) { IM_ASSERT(IsNamedKey(key)); return IsKeyPressed(key, repeat); } // [removed in 1.87]
+#endif
+
+ // Drag and Drop
+ IMGUI_API bool IsDragDropActive();
+ IMGUI_API bool BeginDragDropTargetCustom(const ImRect& bb, ImGuiID id);
+ IMGUI_API void ClearDragDrop();
+ IMGUI_API bool IsDragDropPayloadBeingAccepted();
+
+ // Internal Columns API (this is not exposed because we will encourage transitioning to the Tables API)
+ IMGUI_API void SetWindowClipRectBeforeSetChannel(ImGuiWindow* window, const ImRect& clip_rect);
+ IMGUI_API void BeginColumns(const char* str_id, int count, ImGuiOldColumnFlags flags = 0); // setup number of columns. use an identifier to distinguish multiple column sets. close with EndColumns().
+ IMGUI_API void EndColumns(); // close columns
+ IMGUI_API void PushColumnClipRect(int column_index);
+ IMGUI_API void PushColumnsBackground();
+ IMGUI_API void PopColumnsBackground();
+ IMGUI_API ImGuiID GetColumnsID(const char* str_id, int count);
+ IMGUI_API ImGuiOldColumns* FindOrCreateColumns(ImGuiWindow* window, ImGuiID id);
+ IMGUI_API float GetColumnOffsetFromNorm(const ImGuiOldColumns* columns, float offset_norm);
+ IMGUI_API float GetColumnNormFromOffset(const ImGuiOldColumns* columns, float offset);
+
+ // Tables: Candidates for public API
+ IMGUI_API void TableOpenContextMenu(int column_n = -1);
+ IMGUI_API void TableSetColumnWidth(int column_n, float width);
+ IMGUI_API void TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs);
+ IMGUI_API int TableGetHoveredColumn(); // May use (TableGetColumnFlags() & ImGuiTableColumnFlags_IsHovered) instead. Return hovered column. return -1 when table is not hovered. return columns_count if the unused space at the right of visible columns is hovered.
+ IMGUI_API float TableGetHeaderRowHeight();
+ IMGUI_API void TablePushBackgroundChannel();
+ IMGUI_API void TablePopBackgroundChannel();
+
+ // Tables: Internals
+ inline ImGuiTable* GetCurrentTable() { ImGuiContext& g = *GImGui; return g.CurrentTable; }
+ IMGUI_API ImGuiTable* TableFindByID(ImGuiID id);
+ IMGUI_API bool BeginTableEx(const char* name, ImGuiID id, int columns_count, ImGuiTableFlags flags = 0, const ImVec2& outer_size = ImVec2(0, 0), float inner_width = 0.0f);
+ IMGUI_API void TableBeginInitMemory(ImGuiTable* table, int columns_count);
+ IMGUI_API void TableBeginApplyRequests(ImGuiTable* table);
+ IMGUI_API void TableSetupDrawChannels(ImGuiTable* table);
+ IMGUI_API void TableUpdateLayout(ImGuiTable* table);
+ IMGUI_API void TableUpdateBorders(ImGuiTable* table);
+ IMGUI_API void TableUpdateColumnsWeightFromWidth(ImGuiTable* table);
+ IMGUI_API void TableDrawBorders(ImGuiTable* table);
+ IMGUI_API void TableDrawContextMenu(ImGuiTable* table);
+ IMGUI_API void TableMergeDrawChannels(ImGuiTable* table);
+ inline ImGuiTableInstanceData* TableGetInstanceData(ImGuiTable* table, int instance_no) { if (instance_no == 0) return &table->InstanceDataFirst; return &table->InstanceDataExtra[instance_no - 1]; }
+ IMGUI_API void TableSortSpecsSanitize(ImGuiTable* table);
+ IMGUI_API void TableSortSpecsBuild(ImGuiTable* table);
+ IMGUI_API ImGuiSortDirection TableGetColumnNextSortDirection(ImGuiTableColumn* column);
+ IMGUI_API void TableFixColumnSortDirection(ImGuiTable* table, ImGuiTableColumn* column);
+ IMGUI_API float TableGetColumnWidthAuto(ImGuiTable* table, ImGuiTableColumn* column);
+ IMGUI_API void TableBeginRow(ImGuiTable* table);
+ IMGUI_API void TableEndRow(ImGuiTable* table);
+ IMGUI_API void TableBeginCell(ImGuiTable* table, int column_n);
+ IMGUI_API void TableEndCell(ImGuiTable* table);
+ IMGUI_API ImRect TableGetCellBgRect(const ImGuiTable* table, int column_n);
+ IMGUI_API const char* TableGetColumnName(const ImGuiTable* table, int column_n);
+ IMGUI_API ImGuiID TableGetColumnResizeID(const ImGuiTable* table, int column_n, int instance_no = 0);
+ IMGUI_API float TableGetMaxColumnWidth(const ImGuiTable* table, int column_n);
+ IMGUI_API void TableSetColumnWidthAutoSingle(ImGuiTable* table, int column_n);
+ IMGUI_API void TableSetColumnWidthAutoAll(ImGuiTable* table);
+ IMGUI_API void TableRemove(ImGuiTable* table);
+ IMGUI_API void TableGcCompactTransientBuffers(ImGuiTable* table);
+ IMGUI_API void TableGcCompactTransientBuffers(ImGuiTableTempData* table);
+ IMGUI_API void TableGcCompactSettings();
+
+ // Tables: Settings
+ IMGUI_API void TableLoadSettings(ImGuiTable* table);
+ IMGUI_API void TableSaveSettings(ImGuiTable* table);
+ IMGUI_API void TableResetSettings(ImGuiTable* table);
+ IMGUI_API ImGuiTableSettings* TableGetBoundSettings(ImGuiTable* table);
+ IMGUI_API void TableSettingsAddSettingsHandler();
+ IMGUI_API ImGuiTableSettings* TableSettingsCreate(ImGuiID id, int columns_count);
+ IMGUI_API ImGuiTableSettings* TableSettingsFindByID(ImGuiID id);
+
+ // Tab Bars
+ IMGUI_API bool BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& bb, ImGuiTabBarFlags flags);
+ IMGUI_API ImGuiTabItem* TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id);
+ IMGUI_API void TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id);
+ IMGUI_API void TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab);
+ IMGUI_API void TabBarQueueReorder(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, int offset);
+ IMGUI_API void TabBarQueueReorderFromMousePos(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, ImVec2 mouse_pos);
+ IMGUI_API bool TabBarProcessReorder(ImGuiTabBar* tab_bar);
+ IMGUI_API bool TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags);
+ IMGUI_API ImVec2 TabItemCalcSize(const char* label, bool has_close_button);
+ IMGUI_API void TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col);
+ IMGUI_API void TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id, bool is_contents_visible, bool* out_just_closed, bool* out_text_clipped);
+
+ // Render helpers
+ // AVOID USING OUTSIDE OF IMGUI.CPP! NOT FOR PUBLIC CONSUMPTION. THOSE FUNCTIONS ARE A MESS. THEIR SIGNATURE AND BEHAVIOR WILL CHANGE, THEY NEED TO BE REFACTORED INTO SOMETHING DECENT.
+ // NB: All position are in absolute pixels coordinates (we are never using window coordinates internally)
+ IMGUI_API void RenderText(ImVec2 pos, const char* text, const char* text_end = NULL, bool hide_text_after_hash = true);
+ IMGUI_API void RenderTextWrapped(ImVec2 pos, const char* text, const char* text_end, float wrap_width);
+ IMGUI_API void RenderTextClipped(const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL);
+ IMGUI_API void RenderTextClippedEx(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, const char* text, const char* text_end, const ImVec2* text_size_if_known, const ImVec2& align = ImVec2(0, 0), const ImRect* clip_rect = NULL);
+ IMGUI_API void RenderTextEllipsis(ImDrawList* draw_list, const ImVec2& pos_min, const ImVec2& pos_max, float clip_max_x, float ellipsis_max_x, const char* text, const char* text_end, const ImVec2* text_size_if_known);
+ IMGUI_API void RenderFrame(ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, bool border = true, float rounding = 0.0f);
+ IMGUI_API void RenderFrameBorder(ImVec2 p_min, ImVec2 p_max, float rounding = 0.0f);
+ IMGUI_API void RenderColorRectWithAlphaCheckerboard(ImDrawList* draw_list, ImVec2 p_min, ImVec2 p_max, ImU32 fill_col, float grid_step, ImVec2 grid_off, float rounding = 0.0f, ImDrawFlags flags = 0);
+ IMGUI_API void RenderNavHighlight(const ImRect& bb, ImGuiID id, ImGuiNavHighlightFlags flags = ImGuiNavHighlightFlags_TypeDefault); // Navigation highlight
+ IMGUI_API const char* FindRenderedTextEnd(const char* text, const char* text_end = NULL); // Find the optional ## from which we stop displaying text.
+ IMGUI_API void RenderMouseCursor(ImVec2 pos, float scale, ImGuiMouseCursor mouse_cursor, ImU32 col_fill, ImU32 col_border, ImU32 col_shadow);
+
+ // Render helpers (those functions don't access any ImGui state!)
+ IMGUI_API void RenderArrow(ImDrawList* draw_list, ImVec2 pos, ImU32 col, ImGuiDir dir, float scale = 1.0f);
+ IMGUI_API void RenderBullet(ImDrawList* draw_list, ImVec2 pos, ImU32 col);
+ IMGUI_API void RenderCheckMark(ImDrawList* draw_list, ImVec2 pos, ImU32 col, float sz);
+ IMGUI_API void RenderArrowPointingAt(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, ImGuiDir direction, ImU32 col);
+ IMGUI_API void RenderRectFilledRangeH(ImDrawList* draw_list, const ImRect& rect, ImU32 col, float x_start_norm, float x_end_norm, float rounding);
+ IMGUI_API void RenderRectFilledWithHole(ImDrawList* draw_list, const ImRect& outer, const ImRect& inner, ImU32 col, float rounding);
+
+ // Widgets
+ IMGUI_API void TextEx(const char* text, const char* text_end = NULL, ImGuiTextFlags flags = 0);
+ IMGUI_API bool ButtonEx(const char* label, const ImVec2& size_arg = ImVec2(0, 0), ImGuiButtonFlags flags = 0);
+ IMGUI_API bool CloseButton(ImGuiID id, const ImVec2& pos);
+ IMGUI_API bool CollapseButton(ImGuiID id, const ImVec2& pos);
+ IMGUI_API bool ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size_arg, ImGuiButtonFlags flags = 0);
+ IMGUI_API void Scrollbar(ImGuiAxis axis);
+ IMGUI_API bool ScrollbarEx(const ImRect& bb, ImGuiID id, ImGuiAxis axis, ImS64* p_scroll_v, ImS64 avail_v, ImS64 contents_v, ImDrawFlags flags);
+ IMGUI_API bool ImageButtonEx(ImGuiID id, ImTextureID texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, const ImVec2& padding, const ImVec4& bg_col, const ImVec4& tint_col);
+ IMGUI_API ImRect GetWindowScrollbarRect(ImGuiWindow* window, ImGuiAxis axis);
+ IMGUI_API ImGuiID GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis);
+ IMGUI_API ImGuiID GetWindowResizeCornerID(ImGuiWindow* window, int n); // 0..3: corners
+ IMGUI_API ImGuiID GetWindowResizeBorderID(ImGuiWindow* window, ImGuiDir dir);
+ IMGUI_API void SeparatorEx(ImGuiSeparatorFlags flags);
+ IMGUI_API bool CheckboxFlags(const char* label, ImS64* flags, ImS64 flags_value);
+ IMGUI_API bool CheckboxFlags(const char* label, ImU64* flags, ImU64 flags_value);
+
+ // Widgets low-level behaviors
+ IMGUI_API bool ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags = 0);
+ IMGUI_API bool DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags);
+ IMGUI_API bool SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags, ImRect* out_grab_bb);
+ IMGUI_API bool SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend = 0.0f, float hover_visibility_delay = 0.0f);
+ IMGUI_API bool TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end = NULL);
+ IMGUI_API bool TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags = 0); // Consume previous SetNextItemOpen() data, if any. May return true when logging
+ IMGUI_API void TreePushOverrideID(ImGuiID id);
+
+ // Template functions are instantiated in imgui_widgets.cpp for a finite number of types.
+ // To use them externally (for custom widget) you may need an "extern template" statement in your code in order to link to existing instances and silence Clang warnings (see #2036).
+ // e.g. " extern template IMGUI_API float RoundScalarWithFormatT<float, float>(const char* format, ImGuiDataType data_type, float v); "
+ template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API float ScaleRatioFromValueT(ImGuiDataType data_type, T v, T v_min, T v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_size);
+ template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API T ScaleValueFromRatioT(ImGuiDataType data_type, float t, T v_min, T v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_size);
+ template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API bool DragBehaviorT(ImGuiDataType data_type, T* v, float v_speed, T v_min, T v_max, const char* format, ImGuiSliderFlags flags);
+ template<typename T, typename SIGNED_T, typename FLOAT_T> IMGUI_API bool SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, T* v, T v_min, T v_max, const char* format, ImGuiSliderFlags flags, ImRect* out_grab_bb);
+ template<typename T> IMGUI_API T RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, T v);
+ template<typename T> IMGUI_API bool CheckboxFlagsT(const char* label, T* flags, T flags_value);
+
+ // Data type helpers
+ IMGUI_API const ImGuiDataTypeInfo* DataTypeGetInfo(ImGuiDataType data_type);
+ IMGUI_API int DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format);
+ IMGUI_API void DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, const void* arg_1, const void* arg_2);
+ IMGUI_API bool DataTypeApplyFromText(const char* buf, ImGuiDataType data_type, void* p_data, const char* format);
+ IMGUI_API int DataTypeCompare(ImGuiDataType data_type, const void* arg_1, const void* arg_2);
+ IMGUI_API bool DataTypeClamp(ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max);
+
+ // InputText
+ IMGUI_API bool InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback = NULL, void* user_data = NULL);
+ IMGUI_API bool TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* buf, int buf_size, ImGuiInputTextFlags flags);
+ IMGUI_API bool TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* p_data, const char* format, const void* p_clamp_min = NULL, const void* p_clamp_max = NULL);
+ inline bool TempInputIsActive(ImGuiID id) { ImGuiContext& g = *GImGui; return (g.ActiveId == id && g.TempInputId == id); }
+ inline ImGuiInputTextState* GetInputTextState(ImGuiID id) { ImGuiContext& g = *GImGui; return (g.InputTextState.ID == id) ? &g.InputTextState : NULL; } // Get input text state if active
+
+ // Color
+ IMGUI_API void ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags);
+ IMGUI_API void ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags);
+ IMGUI_API void ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags);
+
+ // Plot
+ IMGUI_API int PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size);
+
+ // Shade functions (write over already created vertices)
+ IMGUI_API void ShadeVertsLinearColorGradientKeepAlpha(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, ImVec2 gradient_p0, ImVec2 gradient_p1, ImU32 col0, ImU32 col1);
+ IMGUI_API void ShadeVertsLinearUV(ImDrawList* draw_list, int vert_start_idx, int vert_end_idx, const ImVec2& a, const ImVec2& b, const ImVec2& uv_a, const ImVec2& uv_b, bool clamp);
+
+ // Garbage collection
+ IMGUI_API void GcCompactTransientMiscBuffers();
+ IMGUI_API void GcCompactTransientWindowBuffers(ImGuiWindow* window);
+ IMGUI_API void GcAwakeTransientWindowBuffers(ImGuiWindow* window);
+
+ // Debug Log
+ IMGUI_API void DebugLog(const char* fmt, ...) IM_FMTARGS(1);
+ IMGUI_API void DebugLogV(const char* fmt, va_list args) IM_FMTLIST(1);
+
+ // Debug Tools
+ IMGUI_API void ErrorCheckEndFrameRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
+ IMGUI_API void ErrorCheckEndWindowRecover(ImGuiErrorLogCallback log_callback, void* user_data = NULL);
+ inline void DebugDrawItemRect(ImU32 col = IM_COL32(255,0,0,255)) { ImGuiContext& g = *GImGui; ImGuiWindow* window = g.CurrentWindow; GetForegroundDrawList(window)->AddRect(g.LastItemData.Rect.Min, g.LastItemData.Rect.Max, col); }
+ inline void DebugStartItemPicker() { ImGuiContext& g = *GImGui; g.DebugItemPickerActive = true; }
+ IMGUI_API void ShowFontAtlas(ImFontAtlas* atlas);
+ IMGUI_API void DebugHookIdInfo(ImGuiID id, ImGuiDataType data_type, const void* data_id, const void* data_id_end);
+ IMGUI_API void DebugNodeColumns(ImGuiOldColumns* columns);
+ IMGUI_API void DebugNodeDrawList(ImGuiWindow* window, const ImDrawList* draw_list, const char* label);
+ IMGUI_API void DebugNodeDrawCmdShowMeshAndBoundingBox(ImDrawList* out_draw_list, const ImDrawList* draw_list, const ImDrawCmd* draw_cmd, bool show_mesh, bool show_aabb);
+ IMGUI_API void DebugNodeFont(ImFont* font);
+ IMGUI_API void DebugNodeFontGlyph(ImFont* font, const ImFontGlyph* glyph);
+ IMGUI_API void DebugNodeStorage(ImGuiStorage* storage, const char* label);
+ IMGUI_API void DebugNodeTabBar(ImGuiTabBar* tab_bar, const char* label);
+ IMGUI_API void DebugNodeTable(ImGuiTable* table);
+ IMGUI_API void DebugNodeTableSettings(ImGuiTableSettings* settings);
+ IMGUI_API void DebugNodeInputTextState(ImGuiInputTextState* state);
+ IMGUI_API void DebugNodeWindow(ImGuiWindow* window, const char* label);
+ IMGUI_API void DebugNodeWindowSettings(ImGuiWindowSettings* settings);
+ IMGUI_API void DebugNodeWindowsList(ImVector<ImGuiWindow*>* windows, const char* label);
+ IMGUI_API void DebugNodeWindowsListByBeginStackParent(ImGuiWindow** windows, int windows_size, ImGuiWindow* parent_in_begin_stack);
+ IMGUI_API void DebugNodeViewport(ImGuiViewportP* viewport);
+ IMGUI_API void DebugRenderViewportThumbnail(ImDrawList* draw_list, ImGuiViewportP* viewport, const ImRect& bb);
+
+} // namespace ImGui
+
+
+//-----------------------------------------------------------------------------
+// [SECTION] ImFontAtlas internal API
+//-----------------------------------------------------------------------------
+
+// This structure is likely to evolve as we add support for incremental atlas updates
+struct ImFontBuilderIO
+{
+ bool (*FontBuilder_Build)(ImFontAtlas* atlas);
+};
+
+// Helper for font builder
+#ifdef IMGUI_ENABLE_STB_TRUETYPE
+IMGUI_API const ImFontBuilderIO* ImFontAtlasGetBuilderForStbTruetype();
+#endif
+IMGUI_API void ImFontAtlasBuildInit(ImFontAtlas* atlas);
+IMGUI_API void ImFontAtlasBuildSetupFont(ImFontAtlas* atlas, ImFont* font, ImFontConfig* font_config, float ascent, float descent);
+IMGUI_API void ImFontAtlasBuildPackCustomRects(ImFontAtlas* atlas, void* stbrp_context_opaque);
+IMGUI_API void ImFontAtlasBuildFinish(ImFontAtlas* atlas);
+IMGUI_API void ImFontAtlasBuildRender8bppRectFromString(ImFontAtlas* atlas, int x, int y, int w, int h, const char* in_str, char in_marker_char, unsigned char in_marker_pixel_value);
+IMGUI_API void ImFontAtlasBuildRender32bppRectFromString(ImFontAtlas* atlas, int x, int y, int w, int h, const char* in_str, char in_marker_char, unsigned int in_marker_pixel_value);
+IMGUI_API void ImFontAtlasBuildMultiplyCalcLookupTable(unsigned char out_table[256], float in_multiply_factor);
+IMGUI_API void ImFontAtlasBuildMultiplyRectAlpha8(const unsigned char table[256], unsigned char* pixels, int x, int y, int w, int h, int stride);
+
+//-----------------------------------------------------------------------------
+// [SECTION] Test Engine specific hooks (imgui_test_engine)
+//-----------------------------------------------------------------------------
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+extern void ImGuiTestEngineHook_ItemAdd(ImGuiContext* ctx, const ImRect& bb, ImGuiID id);
+extern void ImGuiTestEngineHook_ItemInfo(ImGuiContext* ctx, ImGuiID id, const char* label, ImGuiItemStatusFlags flags);
+extern void ImGuiTestEngineHook_Log(ImGuiContext* ctx, const char* fmt, ...);
+extern const char* ImGuiTestEngine_FindItemDebugLabel(ImGuiContext* ctx, ImGuiID id);
+
+#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB,_ID) if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemAdd(&g, _BB, _ID) // Register item bounding box
+#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS) if (g.TestEngineHookItems) ImGuiTestEngineHook_ItemInfo(&g, _ID, _LABEL, _FLAGS) // Register item label and status flags (optional)
+#define IMGUI_TEST_ENGINE_LOG(_FMT,...) if (g.TestEngineHookItems) ImGuiTestEngineHook_Log(&g, _FMT, __VA_ARGS__) // Custom log entry from user land into test log
+#else
+#define IMGUI_TEST_ENGINE_ITEM_ADD(_BB,_ID) ((void)0)
+#define IMGUI_TEST_ENGINE_ITEM_INFO(_ID,_LABEL,_FLAGS) ((void)g)
+#endif
+
+//-----------------------------------------------------------------------------
+
+#if defined(__clang__)
+#pragma clang diagnostic pop
+#elif defined(__GNUC__)
+#pragma GCC diagnostic pop
+#endif
+
+#ifdef _MSC_VER
+#pragma warning (pop)
+#endif
+
+#endif // #ifndef IMGUI_DISABLE
diff --git a/tests/manual/rhi/shared/imgui/imgui/imgui_tables.cpp b/tests/manual/rhi/shared/imgui/imgui/imgui_tables.cpp
new file mode 100644
index 0000000000..c3e24af35b
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/imgui_tables.cpp
@@ -0,0 +1,4068 @@
+// dear imgui, v1.88
+// (tables and columns code)
+
+/*
+
+Index of this file:
+
+// [SECTION] Commentary
+// [SECTION] Header mess
+// [SECTION] Tables: Main code
+// [SECTION] Tables: Simple accessors
+// [SECTION] Tables: Row changes
+// [SECTION] Tables: Columns changes
+// [SECTION] Tables: Columns width management
+// [SECTION] Tables: Drawing
+// [SECTION] Tables: Sorting
+// [SECTION] Tables: Headers
+// [SECTION] Tables: Context Menu
+// [SECTION] Tables: Settings (.ini data)
+// [SECTION] Tables: Garbage Collection
+// [SECTION] Tables: Debugging
+// [SECTION] Columns, BeginColumns, EndColumns, etc.
+
+*/
+
+// Navigating this file:
+// - In Visual Studio IDE: CTRL+comma ("Edit.GoToAll") can follow symbols in comments, whereas CTRL+F12 ("Edit.GoToImplementation") cannot.
+// - With Visual Assist installed: ALT+G ("VAssistX.GoToImplementation") can also follow symbols in comments.
+
+//-----------------------------------------------------------------------------
+// [SECTION] Commentary
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// Typical tables call flow: (root level is generally public API):
+//-----------------------------------------------------------------------------
+// - BeginTable() user begin into a table
+// | BeginChild() - (if ScrollX/ScrollY is set)
+// | TableBeginInitMemory() - first time table is used
+// | TableResetSettings() - on settings reset
+// | TableLoadSettings() - on settings load
+// | TableBeginApplyRequests() - apply queued resizing/reordering/hiding requests
+// | - TableSetColumnWidth() - apply resizing width (for mouse resize, often requested by previous frame)
+// | - TableUpdateColumnsWeightFromWidth()- recompute columns weights (of stretch columns) from their respective width
+// - TableSetupColumn() user submit columns details (optional)
+// - TableSetupScrollFreeze() user submit scroll freeze information (optional)
+//-----------------------------------------------------------------------------
+// - TableUpdateLayout() [Internal] followup to BeginTable(): setup everything: widths, columns positions, clipping rectangles. Automatically called by the FIRST call to TableNextRow() or TableHeadersRow().
+// | TableSetupDrawChannels() - setup ImDrawList channels
+// | TableUpdateBorders() - detect hovering columns for resize, ahead of contents submission
+// | TableDrawContextMenu() - draw right-click context menu
+//-----------------------------------------------------------------------------
+// - TableHeadersRow() or TableHeader() user submit a headers row (optional)
+// | TableSortSpecsClickColumn() - when left-clicked: alter sort order and sort direction
+// | TableOpenContextMenu() - when right-clicked: trigger opening of the default context menu
+// - TableGetSortSpecs() user queries updated sort specs (optional, generally after submitting headers)
+// - TableNextRow() user begin into a new row (also automatically called by TableHeadersRow())
+// | TableEndRow() - finish existing row
+// | TableBeginRow() - add a new row
+// - TableSetColumnIndex() / TableNextColumn() user begin into a cell
+// | TableEndCell() - close existing column/cell
+// | TableBeginCell() - enter into current column/cell
+// - [...] user emit contents
+//-----------------------------------------------------------------------------
+// - EndTable() user ends the table
+// | TableDrawBorders() - draw outer borders, inner vertical borders
+// | TableMergeDrawChannels() - merge draw channels if clipping isn't required
+// | EndChild() - (if ScrollX/ScrollY is set)
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// TABLE SIZING
+//-----------------------------------------------------------------------------
+// (Read carefully because this is subtle but it does make sense!)
+//-----------------------------------------------------------------------------
+// About 'outer_size':
+// Its meaning needs to differ slightly depending on if we are using ScrollX/ScrollY flags.
+// Default value is ImVec2(0.0f, 0.0f).
+// X
+// - outer_size.x <= 0.0f -> Right-align from window/work-rect right-most edge. With -FLT_MIN or 0.0f will align exactly on right-most edge.
+// - outer_size.x > 0.0f -> Set Fixed width.
+// Y with ScrollX/ScrollY disabled: we output table directly in current window
+// - outer_size.y < 0.0f -> Bottom-align (but will auto extend, unless _NoHostExtendY is set). Not meaningful is parent window can vertically scroll.
+// - outer_size.y = 0.0f -> No minimum height (but will auto extend, unless _NoHostExtendY is set)
+// - outer_size.y > 0.0f -> Set Minimum height (but will auto extend, unless _NoHostExtenY is set)
+// Y with ScrollX/ScrollY enabled: using a child window for scrolling
+// - outer_size.y < 0.0f -> Bottom-align. Not meaningful is parent window can vertically scroll.
+// - outer_size.y = 0.0f -> Bottom-align, consistent with BeginChild(). Not recommended unless table is last item in parent window.
+// - outer_size.y > 0.0f -> Set Exact height. Recommended when using Scrolling on any axis.
+//-----------------------------------------------------------------------------
+// Outer size is also affected by the NoHostExtendX/NoHostExtendY flags.
+// Important to that note how the two flags have slightly different behaviors!
+// - ImGuiTableFlags_NoHostExtendX -> Make outer width auto-fit to columns (overriding outer_size.x value). Only available when ScrollX/ScrollY are disabled and Stretch columns are not used.
+// - ImGuiTableFlags_NoHostExtendY -> Make outer height stop exactly at outer_size.y (prevent auto-extending table past the limit). Only available when ScrollX/ScrollY is disabled. Data below the limit will be clipped and not visible.
+// In theory ImGuiTableFlags_NoHostExtendY could be the default and any non-scrolling tables with outer_size.y != 0.0f would use exact height.
+// This would be consistent but perhaps less useful and more confusing (as vertically clipped items are not easily noticeable)
+//-----------------------------------------------------------------------------
+// About 'inner_width':
+// With ScrollX disabled:
+// - inner_width -> *ignored*
+// With ScrollX enabled:
+// - inner_width < 0.0f -> *illegal* fit in known width (right align from outer_size.x) <-- weird
+// - inner_width = 0.0f -> fit in outer_width: Fixed size columns will take space they need (if avail, otherwise shrink down), Stretch columns becomes Fixed columns.
+// - inner_width > 0.0f -> override scrolling width, generally to be larger than outer_size.x. Fixed column take space they need (if avail, otherwise shrink down), Stretch columns share remaining space!
+//-----------------------------------------------------------------------------
+// Details:
+// - If you want to use Stretch columns with ScrollX, you generally need to specify 'inner_width' otherwise the concept
+// of "available space" doesn't make sense.
+// - Even if not really useful, we allow 'inner_width < outer_size.x' for consistency and to facilitate understanding
+// of what the value does.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// COLUMNS SIZING POLICIES
+//-----------------------------------------------------------------------------
+// About overriding column sizing policy and width/weight with TableSetupColumn():
+// We use a default parameter of 'init_width_or_weight == -1'.
+// - with ImGuiTableColumnFlags_WidthFixed, init_width <= 0 (default) --> width is automatic
+// - with ImGuiTableColumnFlags_WidthFixed, init_width > 0 (explicit) --> width is custom
+// - with ImGuiTableColumnFlags_WidthStretch, init_weight <= 0 (default) --> weight is 1.0f
+// - with ImGuiTableColumnFlags_WidthStretch, init_weight > 0 (explicit) --> weight is custom
+// Widths are specified _without_ CellPadding. If you specify a width of 100.0f, the column will be cover (100.0f + Padding * 2.0f)
+// and you can fit a 100.0f wide item in it without clipping and with full padding.
+//-----------------------------------------------------------------------------
+// About default sizing policy (if you don't specify a ImGuiTableColumnFlags_WidthXXXX flag)
+// - with Table policy ImGuiTableFlags_SizingFixedFit --> default Column policy is ImGuiTableColumnFlags_WidthFixed, default Width is equal to contents width
+// - with Table policy ImGuiTableFlags_SizingFixedSame --> default Column policy is ImGuiTableColumnFlags_WidthFixed, default Width is max of all contents width
+// - with Table policy ImGuiTableFlags_SizingStretchSame --> default Column policy is ImGuiTableColumnFlags_WidthStretch, default Weight is 1.0f
+// - with Table policy ImGuiTableFlags_SizingStretchWeight --> default Column policy is ImGuiTableColumnFlags_WidthStretch, default Weight is proportional to contents
+// Default Width and default Weight can be overridden when calling TableSetupColumn().
+//-----------------------------------------------------------------------------
+// About mixing Fixed/Auto and Stretch columns together:
+// - the typical use of mixing sizing policies is: any number of LEADING Fixed columns, followed by one or two TRAILING Stretch columns.
+// - using mixed policies with ScrollX does not make much sense, as using Stretch columns with ScrollX does not make much sense in the first place!
+// that is, unless 'inner_width' is passed to BeginTable() to explicitly provide a total width to layout columns in.
+// - when using ImGuiTableFlags_SizingFixedSame with mixed columns, only the Fixed/Auto columns will match their widths to the width of the maximum contents.
+// - when using ImGuiTableFlags_SizingStretchSame with mixed columns, only the Stretch columns will match their weight/widths.
+//-----------------------------------------------------------------------------
+// About using column width:
+// If a column is manual resizable or has a width specified with TableSetupColumn():
+// - you may use GetContentRegionAvail().x to query the width available in a given column.
+// - right-side alignment features such as SetNextItemWidth(-x) or PushItemWidth(-x) will rely on this width.
+// If the column is not resizable and has no width specified with TableSetupColumn():
+// - its width will be automatic and be set to the max of items submitted.
+// - therefore you generally cannot have ALL items of the columns use e.g. SetNextItemWidth(-FLT_MIN).
+// - but if the column has one or more items of known/fixed size, this will become the reference width used by SetNextItemWidth(-FLT_MIN).
+//-----------------------------------------------------------------------------
+
+
+//-----------------------------------------------------------------------------
+// TABLES CLIPPING/CULLING
+//-----------------------------------------------------------------------------
+// About clipping/culling of Rows in Tables:
+// - For large numbers of rows, it is recommended you use ImGuiListClipper to only submit visible rows.
+// ImGuiListClipper is reliant on the fact that rows are of equal height.
+// See 'Demo->Tables->Vertical Scrolling' or 'Demo->Tables->Advanced' for a demo of using the clipper.
+// - Note that auto-resizing columns don't play well with using the clipper.
+// By default a table with _ScrollX but without _Resizable will have column auto-resize.
+// So, if you want to use the clipper, make sure to either enable _Resizable, either setup columns width explicitly with _WidthFixed.
+//-----------------------------------------------------------------------------
+// About clipping/culling of Columns in Tables:
+// - Both TableSetColumnIndex() and TableNextColumn() return true when the column is visible or performing
+// width measurements. Otherwise, you may skip submitting the contents of a cell/column, BUT ONLY if you know
+// it is not going to contribute to row height.
+// In many situations, you may skip submitting contents for every column but one (e.g. the first one).
+// - Case A: column is not hidden by user, and at least partially in sight (most common case).
+// - Case B: column is clipped / out of sight (because of scrolling or parent ClipRect): TableNextColumn() return false as a hint but we still allow layout output.
+// - Case C: column is hidden explicitly by the user (e.g. via the context menu, or _DefaultHide column flag, etc.).
+//
+// [A] [B] [C]
+// TableNextColumn(): true false false -> [userland] when TableNextColumn() / TableSetColumnIndex() return false, user can skip submitting items but only if the column doesn't contribute to row height.
+// SkipItems: false false true -> [internal] when SkipItems is true, most widgets will early out if submitted, resulting is no layout output.
+// ClipRect: normal zero-width zero-width -> [internal] when ClipRect is zero, ItemAdd() will return false and most widgets will early out mid-way.
+// ImDrawList output: normal dummy dummy -> [internal] when using the dummy channel, ImDrawList submissions (if any) will be wasted (because cliprect is zero-width anyway).
+//
+// - We need to distinguish those cases because non-hidden columns that are clipped outside of scrolling bounds should still contribute their height to the row.
+// However, in the majority of cases, the contribution to row height is the same for all columns, or the tallest cells are known by the programmer.
+//-----------------------------------------------------------------------------
+// About clipping/culling of whole Tables:
+// - Scrolling tables with a known outer size can be clipped earlier as BeginTable() will return false.
+//-----------------------------------------------------------------------------
+
+//-----------------------------------------------------------------------------
+// [SECTION] Header mess
+//-----------------------------------------------------------------------------
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "imgui.h"
+#ifndef IMGUI_DISABLE
+
+#ifndef IMGUI_DEFINE_MATH_OPERATORS
+#define IMGUI_DEFINE_MATH_OPERATORS
+#endif
+#include "imgui_internal.h"
+
+// System includes
+#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
+#include <stddef.h> // intptr_t
+#else
+#include <stdint.h> // intptr_t
+#endif
+
+// Visual Studio warnings
+#ifdef _MSC_VER
+#pragma warning (disable: 4127) // condition expression is constant
+#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
+#if defined(_MSC_VER) && _MSC_VER >= 1922 // MSVC 2019 16.2 or later
+#pragma warning (disable: 5054) // operator '|': deprecated between enumerations of different types
+#endif
+#pragma warning (disable: 26451) // [Static Analyzer] Arithmetic overflow : Using operator 'xxx' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator 'xxx' to avoid overflow(io.2).
+#pragma warning (disable: 26812) // [Static Analyzer] The enum type 'xxx' is unscoped. Prefer 'enum class' over 'enum' (Enum.3).
+#endif
+
+// Clang/GCC warnings with -Weverything
+#if defined(__clang__)
+#if __has_warning("-Wunknown-warning-option")
+#pragma clang diagnostic ignored "-Wunknown-warning-option" // warning: unknown warning group 'xxx' // not all warnings are known by all Clang versions and they tend to be rename-happy.. so ignoring warnings triggers new warnings on some configuration. Great!
+#endif
+#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning: unknown warning group 'xxx'
+#pragma clang diagnostic ignored "-Wold-style-cast" // warning: use of old-style cast // yes, they are more terse.
+#pragma clang diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe // storing and comparing against same constants (typically 0.0f) is ok.
+#pragma clang diagnostic ignored "-Wformat-nonliteral" // warning: format string is not a string literal // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
+#pragma clang diagnostic ignored "-Wsign-conversion" // warning: implicit conversion changes signedness
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning: zero as null pointer constant // some standard header variations use #define NULL 0
+#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#pragma clang diagnostic ignored "-Wenum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_')
+#pragma clang diagnostic ignored "-Wdeprecated-enum-enum-conversion"// warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated
+#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" // warning: implicit conversion from 'xxx' to 'float' may lose precision
+#elif defined(__GNUC__)
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked
+#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
+#endif
+
+//-----------------------------------------------------------------------------
+// [SECTION] Tables: Main code
+//-----------------------------------------------------------------------------
+// - TableFixFlags() [Internal]
+// - TableFindByID() [Internal]
+// - BeginTable()
+// - BeginTableEx() [Internal]
+// - TableBeginInitMemory() [Internal]
+// - TableBeginApplyRequests() [Internal]
+// - TableSetupColumnFlags() [Internal]
+// - TableUpdateLayout() [Internal]
+// - TableUpdateBorders() [Internal]
+// - EndTable()
+// - TableSetupColumn()
+// - TableSetupScrollFreeze()
+//-----------------------------------------------------------------------------
+
+// Configuration
+static const int TABLE_DRAW_CHANNEL_BG0 = 0;
+static const int TABLE_DRAW_CHANNEL_BG2_FROZEN = 1;
+static const int TABLE_DRAW_CHANNEL_NOCLIP = 2; // When using ImGuiTableFlags_NoClip (this becomes the last visible channel)
+static const float TABLE_BORDER_SIZE = 1.0f; // FIXME-TABLE: Currently hard-coded because of clipping assumptions with outer borders rendering.
+static const float TABLE_RESIZE_SEPARATOR_HALF_THICKNESS = 4.0f; // Extend outside inner borders.
+static const float TABLE_RESIZE_SEPARATOR_FEEDBACK_TIMER = 0.06f; // Delay/timer before making the hover feedback (color+cursor) visible because tables/columns tends to be more cramped.
+
+// Helper
+inline ImGuiTableFlags TableFixFlags(ImGuiTableFlags flags, ImGuiWindow* outer_window)
+{
+ // Adjust flags: set default sizing policy
+ if ((flags & ImGuiTableFlags_SizingMask_) == 0)
+ flags |= ((flags & ImGuiTableFlags_ScrollX) || (outer_window->Flags & ImGuiWindowFlags_AlwaysAutoResize)) ? ImGuiTableFlags_SizingFixedFit : ImGuiTableFlags_SizingStretchSame;
+
+ // Adjust flags: enable NoKeepColumnsVisible when using ImGuiTableFlags_SizingFixedSame
+ if ((flags & ImGuiTableFlags_SizingMask_) == ImGuiTableFlags_SizingFixedSame)
+ flags |= ImGuiTableFlags_NoKeepColumnsVisible;
+
+ // Adjust flags: enforce borders when resizable
+ if (flags & ImGuiTableFlags_Resizable)
+ flags |= ImGuiTableFlags_BordersInnerV;
+
+ // Adjust flags: disable NoHostExtendX/NoHostExtendY if we have any scrolling going on
+ if (flags & (ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY))
+ flags &= ~(ImGuiTableFlags_NoHostExtendX | ImGuiTableFlags_NoHostExtendY);
+
+ // Adjust flags: NoBordersInBodyUntilResize takes priority over NoBordersInBody
+ if (flags & ImGuiTableFlags_NoBordersInBodyUntilResize)
+ flags &= ~ImGuiTableFlags_NoBordersInBody;
+
+ // Adjust flags: disable saved settings if there's nothing to save
+ if ((flags & (ImGuiTableFlags_Resizable | ImGuiTableFlags_Hideable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Sortable)) == 0)
+ flags |= ImGuiTableFlags_NoSavedSettings;
+
+ // Inherit _NoSavedSettings from top-level window (child windows always have _NoSavedSettings set)
+ if (outer_window->RootWindow->Flags & ImGuiWindowFlags_NoSavedSettings)
+ flags |= ImGuiTableFlags_NoSavedSettings;
+
+ return flags;
+}
+
+ImGuiTable* ImGui::TableFindByID(ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ return g.Tables.GetByKey(id);
+}
+
+// Read about "TABLE SIZING" at the top of this file.
+bool ImGui::BeginTable(const char* str_id, int columns_count, ImGuiTableFlags flags, const ImVec2& outer_size, float inner_width)
+{
+ ImGuiID id = GetID(str_id);
+ return BeginTableEx(str_id, id, columns_count, flags, outer_size, inner_width);
+}
+
+bool ImGui::BeginTableEx(const char* name, ImGuiID id, int columns_count, ImGuiTableFlags flags, const ImVec2& outer_size, float inner_width)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* outer_window = GetCurrentWindow();
+ if (outer_window->SkipItems) // Consistent with other tables + beneficial side effect that assert on miscalling EndTable() will be more visible.
+ return false;
+
+ // Sanity checks
+ IM_ASSERT(columns_count > 0 && columns_count <= IMGUI_TABLE_MAX_COLUMNS && "Only 1..64 columns allowed!");
+ if (flags & ImGuiTableFlags_ScrollX)
+ IM_ASSERT(inner_width >= 0.0f);
+
+ // If an outer size is specified ahead we will be able to early out when not visible. Exact clipping rules may evolve.
+ const bool use_child_window = (flags & (ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY)) != 0;
+ const ImVec2 avail_size = GetContentRegionAvail();
+ ImVec2 actual_outer_size = CalcItemSize(outer_size, ImMax(avail_size.x, 1.0f), use_child_window ? ImMax(avail_size.y, 1.0f) : 0.0f);
+ ImRect outer_rect(outer_window->DC.CursorPos, outer_window->DC.CursorPos + actual_outer_size);
+ if (use_child_window && IsClippedEx(outer_rect, 0))
+ {
+ ItemSize(outer_rect);
+ return false;
+ }
+
+ // Acquire storage for the table
+ ImGuiTable* table = g.Tables.GetOrAddByKey(id);
+ const int instance_no = (table->LastFrameActive != g.FrameCount) ? 0 : table->InstanceCurrent + 1;
+ const ImGuiID instance_id = id + instance_no;
+ const ImGuiTableFlags table_last_flags = table->Flags;
+ if (instance_no > 0)
+ IM_ASSERT(table->ColumnsCount == columns_count && "BeginTable(): Cannot change columns count mid-frame while preserving same ID");
+
+ // Acquire temporary buffers
+ const int table_idx = g.Tables.GetIndex(table);
+ if (++g.TablesTempDataStacked > g.TablesTempData.Size)
+ g.TablesTempData.resize(g.TablesTempDataStacked, ImGuiTableTempData());
+ ImGuiTableTempData* temp_data = table->TempData = &g.TablesTempData[g.TablesTempDataStacked - 1];
+ temp_data->TableIndex = table_idx;
+ table->DrawSplitter = &table->TempData->DrawSplitter;
+ table->DrawSplitter->Clear();
+
+ // Fix flags
+ table->IsDefaultSizingPolicy = (flags & ImGuiTableFlags_SizingMask_) == 0;
+ flags = TableFixFlags(flags, outer_window);
+
+ // Initialize
+ table->ID = id;
+ table->Flags = flags;
+ table->InstanceCurrent = (ImS16)instance_no;
+ table->LastFrameActive = g.FrameCount;
+ table->OuterWindow = table->InnerWindow = outer_window;
+ table->ColumnsCount = columns_count;
+ table->IsLayoutLocked = false;
+ table->InnerWidth = inner_width;
+ temp_data->UserOuterSize = outer_size;
+ if (instance_no > 0 && table->InstanceDataExtra.Size < instance_no)
+ table->InstanceDataExtra.push_back(ImGuiTableInstanceData());
+
+ // When not using a child window, WorkRect.Max will grow as we append contents.
+ if (use_child_window)
+ {
+ // Ensure no vertical scrollbar appears if we only want horizontal one, to make flag consistent
+ // (we have no other way to disable vertical scrollbar of a window while keeping the horizontal one showing)
+ ImVec2 override_content_size(FLT_MAX, FLT_MAX);
+ if ((flags & ImGuiTableFlags_ScrollX) && !(flags & ImGuiTableFlags_ScrollY))
+ override_content_size.y = FLT_MIN;
+
+ // Ensure specified width (when not specified, Stretched columns will act as if the width == OuterWidth and
+ // never lead to any scrolling). We don't handle inner_width < 0.0f, we could potentially use it to right-align
+ // based on the right side of the child window work rect, which would require knowing ahead if we are going to
+ // have decoration taking horizontal spaces (typically a vertical scrollbar).
+ if ((flags & ImGuiTableFlags_ScrollX) && inner_width > 0.0f)
+ override_content_size.x = inner_width;
+
+ if (override_content_size.x != FLT_MAX || override_content_size.y != FLT_MAX)
+ SetNextWindowContentSize(ImVec2(override_content_size.x != FLT_MAX ? override_content_size.x : 0.0f, override_content_size.y != FLT_MAX ? override_content_size.y : 0.0f));
+
+ // Reset scroll if we are reactivating it
+ if ((table_last_flags & (ImGuiTableFlags_ScrollX | ImGuiTableFlags_ScrollY)) == 0)
+ SetNextWindowScroll(ImVec2(0.0f, 0.0f));
+
+ // Create scrolling region (without border and zero window padding)
+ ImGuiWindowFlags child_flags = (flags & ImGuiTableFlags_ScrollX) ? ImGuiWindowFlags_HorizontalScrollbar : ImGuiWindowFlags_None;
+ BeginChildEx(name, instance_id, outer_rect.GetSize(), false, child_flags);
+ table->InnerWindow = g.CurrentWindow;
+ table->WorkRect = table->InnerWindow->WorkRect;
+ table->OuterRect = table->InnerWindow->Rect();
+ table->InnerRect = table->InnerWindow->InnerRect;
+ IM_ASSERT(table->InnerWindow->WindowPadding.x == 0.0f && table->InnerWindow->WindowPadding.y == 0.0f && table->InnerWindow->WindowBorderSize == 0.0f);
+ }
+ else
+ {
+ // For non-scrolling tables, WorkRect == OuterRect == InnerRect.
+ // But at this point we do NOT have a correct value for .Max.y (unless a height has been explicitly passed in). It will only be updated in EndTable().
+ table->WorkRect = table->OuterRect = table->InnerRect = outer_rect;
+ }
+
+ // Push a standardized ID for both child-using and not-child-using tables
+ PushOverrideID(instance_id);
+
+ // Backup a copy of host window members we will modify
+ ImGuiWindow* inner_window = table->InnerWindow;
+ table->HostIndentX = inner_window->DC.Indent.x;
+ table->HostClipRect = inner_window->ClipRect;
+ table->HostSkipItems = inner_window->SkipItems;
+ temp_data->HostBackupWorkRect = inner_window->WorkRect;
+ temp_data->HostBackupParentWorkRect = inner_window->ParentWorkRect;
+ temp_data->HostBackupColumnsOffset = outer_window->DC.ColumnsOffset;
+ temp_data->HostBackupPrevLineSize = inner_window->DC.PrevLineSize;
+ temp_data->HostBackupCurrLineSize = inner_window->DC.CurrLineSize;
+ temp_data->HostBackupCursorMaxPos = inner_window->DC.CursorMaxPos;
+ temp_data->HostBackupItemWidth = outer_window->DC.ItemWidth;
+ temp_data->HostBackupItemWidthStackSize = outer_window->DC.ItemWidthStack.Size;
+ inner_window->DC.PrevLineSize = inner_window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
+
+ // Padding and Spacing
+ // - None ........Content..... Pad .....Content........
+ // - PadOuter | Pad ..Content..... Pad .....Content.. Pad |
+ // - PadInner ........Content.. Pad | Pad ..Content........
+ // - PadOuter+PadInner | Pad ..Content.. Pad | Pad ..Content.. Pad |
+ const bool pad_outer_x = (flags & ImGuiTableFlags_NoPadOuterX) ? false : (flags & ImGuiTableFlags_PadOuterX) ? true : (flags & ImGuiTableFlags_BordersOuterV) != 0;
+ const bool pad_inner_x = (flags & ImGuiTableFlags_NoPadInnerX) ? false : true;
+ const float inner_spacing_for_border = (flags & ImGuiTableFlags_BordersInnerV) ? TABLE_BORDER_SIZE : 0.0f;
+ const float inner_spacing_explicit = (pad_inner_x && (flags & ImGuiTableFlags_BordersInnerV) == 0) ? g.Style.CellPadding.x : 0.0f;
+ const float inner_padding_explicit = (pad_inner_x && (flags & ImGuiTableFlags_BordersInnerV) != 0) ? g.Style.CellPadding.x : 0.0f;
+ table->CellSpacingX1 = inner_spacing_explicit + inner_spacing_for_border;
+ table->CellSpacingX2 = inner_spacing_explicit;
+ table->CellPaddingX = inner_padding_explicit;
+ table->CellPaddingY = g.Style.CellPadding.y;
+
+ const float outer_padding_for_border = (flags & ImGuiTableFlags_BordersOuterV) ? TABLE_BORDER_SIZE : 0.0f;
+ const float outer_padding_explicit = pad_outer_x ? g.Style.CellPadding.x : 0.0f;
+ table->OuterPaddingX = (outer_padding_for_border + outer_padding_explicit) - table->CellPaddingX;
+
+ table->CurrentColumn = -1;
+ table->CurrentRow = -1;
+ table->RowBgColorCounter = 0;
+ table->LastRowFlags = ImGuiTableRowFlags_None;
+ table->InnerClipRect = (inner_window == outer_window) ? table->WorkRect : inner_window->ClipRect;
+ table->InnerClipRect.ClipWith(table->WorkRect); // We need this to honor inner_width
+ table->InnerClipRect.ClipWithFull(table->HostClipRect);
+ table->InnerClipRect.Max.y = (flags & ImGuiTableFlags_NoHostExtendY) ? ImMin(table->InnerClipRect.Max.y, inner_window->WorkRect.Max.y) : inner_window->ClipRect.Max.y;
+
+ table->RowPosY1 = table->RowPosY2 = table->WorkRect.Min.y; // This is needed somehow
+ table->RowTextBaseline = 0.0f; // This will be cleared again by TableBeginRow()
+ table->FreezeRowsRequest = table->FreezeRowsCount = 0; // This will be setup by TableSetupScrollFreeze(), if any
+ table->FreezeColumnsRequest = table->FreezeColumnsCount = 0;
+ table->IsUnfrozenRows = true;
+ table->DeclColumnsCount = 0;
+
+ // Using opaque colors facilitate overlapping elements of the grid
+ table->BorderColorStrong = GetColorU32(ImGuiCol_TableBorderStrong);
+ table->BorderColorLight = GetColorU32(ImGuiCol_TableBorderLight);
+
+ // Make table current
+ g.CurrentTable = table;
+ outer_window->DC.CurrentTableIdx = table_idx;
+ if (inner_window != outer_window) // So EndChild() within the inner window can restore the table properly.
+ inner_window->DC.CurrentTableIdx = table_idx;
+
+ if ((table_last_flags & ImGuiTableFlags_Reorderable) && (flags & ImGuiTableFlags_Reorderable) == 0)
+ table->IsResetDisplayOrderRequest = true;
+
+ // Mark as used
+ if (table_idx >= g.TablesLastTimeActive.Size)
+ g.TablesLastTimeActive.resize(table_idx + 1, -1.0f);
+ g.TablesLastTimeActive[table_idx] = (float)g.Time;
+ temp_data->LastTimeActive = (float)g.Time;
+ table->MemoryCompacted = false;
+
+ // Setup memory buffer (clear data if columns count changed)
+ ImGuiTableColumn* old_columns_to_preserve = NULL;
+ void* old_columns_raw_data = NULL;
+ const int old_columns_count = table->Columns.size();
+ if (old_columns_count != 0 && old_columns_count != columns_count)
+ {
+ // Attempt to preserve width on column count change (#4046)
+ old_columns_to_preserve = table->Columns.Data;
+ old_columns_raw_data = table->RawData;
+ table->RawData = NULL;
+ }
+ if (table->RawData == NULL)
+ {
+ TableBeginInitMemory(table, columns_count);
+ table->IsInitializing = table->IsSettingsRequestLoad = true;
+ }
+ if (table->IsResetAllRequest)
+ TableResetSettings(table);
+ if (table->IsInitializing)
+ {
+ // Initialize
+ table->SettingsOffset = -1;
+ table->IsSortSpecsDirty = true;
+ table->InstanceInteracted = -1;
+ table->ContextPopupColumn = -1;
+ table->ReorderColumn = table->ResizedColumn = table->LastResizedColumn = -1;
+ table->AutoFitSingleColumn = -1;
+ table->HoveredColumnBody = table->HoveredColumnBorder = -1;
+ for (int n = 0; n < columns_count; n++)
+ {
+ ImGuiTableColumn* column = &table->Columns[n];
+ if (old_columns_to_preserve && n < old_columns_count)
+ {
+ // FIXME: We don't attempt to preserve column order in this path.
+ *column = old_columns_to_preserve[n];
+ }
+ else
+ {
+ float width_auto = column->WidthAuto;
+ *column = ImGuiTableColumn();
+ column->WidthAuto = width_auto;
+ column->IsPreserveWidthAuto = true; // Preserve WidthAuto when reinitializing a live table: not technically necessary but remove a visible flicker
+ column->IsEnabled = column->IsUserEnabled = column->IsUserEnabledNextFrame = true;
+ }
+ column->DisplayOrder = table->DisplayOrderToIndex[n] = (ImGuiTableColumnIdx)n;
+ }
+ }
+ if (old_columns_raw_data)
+ IM_FREE(old_columns_raw_data);
+
+ // Load settings
+ if (table->IsSettingsRequestLoad)
+ TableLoadSettings(table);
+
+ // Handle DPI/font resize
+ // This is designed to facilitate DPI changes with the assumption that e.g. style.CellPadding has been scaled as well.
+ // It will also react to changing fonts with mixed results. It doesn't need to be perfect but merely provide a decent transition.
+ // FIXME-DPI: Provide consistent standards for reference size. Perhaps using g.CurrentDpiScale would be more self explanatory.
+ // This is will lead us to non-rounded WidthRequest in columns, which should work but is a poorly tested path.
+ const float new_ref_scale_unit = g.FontSize; // g.Font->GetCharAdvance('A') ?
+ if (table->RefScale != 0.0f && table->RefScale != new_ref_scale_unit)
+ {
+ const float scale_factor = new_ref_scale_unit / table->RefScale;
+ //IMGUI_DEBUG_PRINT("[table] %08X RefScaleUnit %.3f -> %.3f, scaling width by %.3f\n", table->ID, table->RefScaleUnit, new_ref_scale_unit, scale_factor);
+ for (int n = 0; n < columns_count; n++)
+ table->Columns[n].WidthRequest = table->Columns[n].WidthRequest * scale_factor;
+ }
+ table->RefScale = new_ref_scale_unit;
+
+ // Disable output until user calls TableNextRow() or TableNextColumn() leading to the TableUpdateLayout() call..
+ // This is not strictly necessary but will reduce cases were "out of table" output will be misleading to the user.
+ // Because we cannot safely assert in EndTable() when no rows have been created, this seems like our best option.
+ inner_window->SkipItems = true;
+
+ // Clear names
+ // At this point the ->NameOffset field of each column will be invalid until TableUpdateLayout() or the first call to TableSetupColumn()
+ if (table->ColumnsNames.Buf.Size > 0)
+ table->ColumnsNames.Buf.resize(0);
+
+ // Apply queued resizing/reordering/hiding requests
+ TableBeginApplyRequests(table);
+
+ return true;
+}
+
+// For reference, the average total _allocation count_ for a table is:
+// + 0 (for ImGuiTable instance, we are pooling allocations in g.Tables)
+// + 1 (for table->RawData allocated below)
+// + 1 (for table->ColumnsNames, if names are used)
+// Shared allocations per number of nested tables
+// + 1 (for table->Splitter._Channels)
+// + 2 * active_channels_count (for ImDrawCmd and ImDrawIdx buffers inside channels)
+// Where active_channels_count is variable but often == columns_count or columns_count + 1, see TableSetupDrawChannels() for details.
+// Unused channels don't perform their +2 allocations.
+void ImGui::TableBeginInitMemory(ImGuiTable* table, int columns_count)
+{
+ // Allocate single buffer for our arrays
+ ImSpanAllocator<3> span_allocator;
+ span_allocator.Reserve(0, columns_count * sizeof(ImGuiTableColumn));
+ span_allocator.Reserve(1, columns_count * sizeof(ImGuiTableColumnIdx));
+ span_allocator.Reserve(2, columns_count * sizeof(ImGuiTableCellData), 4);
+ table->RawData = IM_ALLOC(span_allocator.GetArenaSizeInBytes());
+ memset(table->RawData, 0, span_allocator.GetArenaSizeInBytes());
+ span_allocator.SetArenaBasePtr(table->RawData);
+ span_allocator.GetSpan(0, &table->Columns);
+ span_allocator.GetSpan(1, &table->DisplayOrderToIndex);
+ span_allocator.GetSpan(2, &table->RowCellData);
+}
+
+// Apply queued resizing/reordering/hiding requests
+void ImGui::TableBeginApplyRequests(ImGuiTable* table)
+{
+ // Handle resizing request
+ // (We process this at the first TableBegin of the frame)
+ // FIXME-TABLE: Contains columns if our work area doesn't allow for scrolling?
+ if (table->InstanceCurrent == 0)
+ {
+ if (table->ResizedColumn != -1 && table->ResizedColumnNextWidth != FLT_MAX)
+ TableSetColumnWidth(table->ResizedColumn, table->ResizedColumnNextWidth);
+ table->LastResizedColumn = table->ResizedColumn;
+ table->ResizedColumnNextWidth = FLT_MAX;
+ table->ResizedColumn = -1;
+
+ // Process auto-fit for single column, which is a special case for stretch columns and fixed columns with FixedSame policy.
+ // FIXME-TABLE: Would be nice to redistribute available stretch space accordingly to other weights, instead of giving it all to siblings.
+ if (table->AutoFitSingleColumn != -1)
+ {
+ TableSetColumnWidth(table->AutoFitSingleColumn, table->Columns[table->AutoFitSingleColumn].WidthAuto);
+ table->AutoFitSingleColumn = -1;
+ }
+ }
+
+ // Handle reordering request
+ // Note: we don't clear ReorderColumn after handling the request.
+ if (table->InstanceCurrent == 0)
+ {
+ if (table->HeldHeaderColumn == -1 && table->ReorderColumn != -1)
+ table->ReorderColumn = -1;
+ table->HeldHeaderColumn = -1;
+ if (table->ReorderColumn != -1 && table->ReorderColumnDir != 0)
+ {
+ // We need to handle reordering across hidden columns.
+ // In the configuration below, moving C to the right of E will lead to:
+ // ... C [D] E ---> ... [D] E C (Column name/index)
+ // ... 2 3 4 ... 2 3 4 (Display order)
+ const int reorder_dir = table->ReorderColumnDir;
+ IM_ASSERT(reorder_dir == -1 || reorder_dir == +1);
+ IM_ASSERT(table->Flags & ImGuiTableFlags_Reorderable);
+ ImGuiTableColumn* src_column = &table->Columns[table->ReorderColumn];
+ ImGuiTableColumn* dst_column = &table->Columns[(reorder_dir == -1) ? src_column->PrevEnabledColumn : src_column->NextEnabledColumn];
+ IM_UNUSED(dst_column);
+ const int src_order = src_column->DisplayOrder;
+ const int dst_order = dst_column->DisplayOrder;
+ src_column->DisplayOrder = (ImGuiTableColumnIdx)dst_order;
+ for (int order_n = src_order + reorder_dir; order_n != dst_order + reorder_dir; order_n += reorder_dir)
+ table->Columns[table->DisplayOrderToIndex[order_n]].DisplayOrder -= (ImGuiTableColumnIdx)reorder_dir;
+ IM_ASSERT(dst_column->DisplayOrder == dst_order - reorder_dir);
+
+ // Display order is stored in both columns->IndexDisplayOrder and table->DisplayOrder[],
+ // rebuild the later from the former.
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ table->DisplayOrderToIndex[table->Columns[column_n].DisplayOrder] = (ImGuiTableColumnIdx)column_n;
+ table->ReorderColumnDir = 0;
+ table->IsSettingsDirty = true;
+ }
+ }
+
+ // Handle display order reset request
+ if (table->IsResetDisplayOrderRequest)
+ {
+ for (int n = 0; n < table->ColumnsCount; n++)
+ table->DisplayOrderToIndex[n] = table->Columns[n].DisplayOrder = (ImGuiTableColumnIdx)n;
+ table->IsResetDisplayOrderRequest = false;
+ table->IsSettingsDirty = true;
+ }
+}
+
+// Adjust flags: default width mode + stretch columns are not allowed when auto extending
+static void TableSetupColumnFlags(ImGuiTable* table, ImGuiTableColumn* column, ImGuiTableColumnFlags flags_in)
+{
+ ImGuiTableColumnFlags flags = flags_in;
+
+ // Sizing Policy
+ if ((flags & ImGuiTableColumnFlags_WidthMask_) == 0)
+ {
+ const ImGuiTableFlags table_sizing_policy = (table->Flags & ImGuiTableFlags_SizingMask_);
+ if (table_sizing_policy == ImGuiTableFlags_SizingFixedFit || table_sizing_policy == ImGuiTableFlags_SizingFixedSame)
+ flags |= ImGuiTableColumnFlags_WidthFixed;
+ else
+ flags |= ImGuiTableColumnFlags_WidthStretch;
+ }
+ else
+ {
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiTableColumnFlags_WidthMask_)); // Check that only 1 of each set is used.
+ }
+
+ // Resize
+ if ((table->Flags & ImGuiTableFlags_Resizable) == 0)
+ flags |= ImGuiTableColumnFlags_NoResize;
+
+ // Sorting
+ if ((flags & ImGuiTableColumnFlags_NoSortAscending) && (flags & ImGuiTableColumnFlags_NoSortDescending))
+ flags |= ImGuiTableColumnFlags_NoSort;
+
+ // Indentation
+ if ((flags & ImGuiTableColumnFlags_IndentMask_) == 0)
+ flags |= (table->Columns.index_from_ptr(column) == 0) ? ImGuiTableColumnFlags_IndentEnable : ImGuiTableColumnFlags_IndentDisable;
+
+ // Alignment
+ //if ((flags & ImGuiTableColumnFlags_AlignMask_) == 0)
+ // flags |= ImGuiTableColumnFlags_AlignCenter;
+ //IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiTableColumnFlags_AlignMask_)); // Check that only 1 of each set is used.
+
+ // Preserve status flags
+ column->Flags = flags | (column->Flags & ImGuiTableColumnFlags_StatusMask_);
+
+ // Build an ordered list of available sort directions
+ column->SortDirectionsAvailCount = column->SortDirectionsAvailMask = column->SortDirectionsAvailList = 0;
+ if (table->Flags & ImGuiTableFlags_Sortable)
+ {
+ int count = 0, mask = 0, list = 0;
+ if ((flags & ImGuiTableColumnFlags_PreferSortAscending) != 0 && (flags & ImGuiTableColumnFlags_NoSortAscending) == 0) { mask |= 1 << ImGuiSortDirection_Ascending; list |= ImGuiSortDirection_Ascending << (count << 1); count++; }
+ if ((flags & ImGuiTableColumnFlags_PreferSortDescending) != 0 && (flags & ImGuiTableColumnFlags_NoSortDescending) == 0) { mask |= 1 << ImGuiSortDirection_Descending; list |= ImGuiSortDirection_Descending << (count << 1); count++; }
+ if ((flags & ImGuiTableColumnFlags_PreferSortAscending) == 0 && (flags & ImGuiTableColumnFlags_NoSortAscending) == 0) { mask |= 1 << ImGuiSortDirection_Ascending; list |= ImGuiSortDirection_Ascending << (count << 1); count++; }
+ if ((flags & ImGuiTableColumnFlags_PreferSortDescending) == 0 && (flags & ImGuiTableColumnFlags_NoSortDescending) == 0) { mask |= 1 << ImGuiSortDirection_Descending; list |= ImGuiSortDirection_Descending << (count << 1); count++; }
+ if ((table->Flags & ImGuiTableFlags_SortTristate) || count == 0) { mask |= 1 << ImGuiSortDirection_None; count++; }
+ column->SortDirectionsAvailList = (ImU8)list;
+ column->SortDirectionsAvailMask = (ImU8)mask;
+ column->SortDirectionsAvailCount = (ImU8)count;
+ ImGui::TableFixColumnSortDirection(table, column);
+ }
+}
+
+// Layout columns for the frame. This is in essence the followup to BeginTable().
+// Runs on the first call to TableNextRow(), to give a chance for TableSetupColumn() to be called first.
+// FIXME-TABLE: Our width (and therefore our WorkRect) will be minimal in the first frame for _WidthAuto columns.
+// Increase feedback side-effect with widgets relying on WorkRect.Max.x... Maybe provide a default distribution for _WidthAuto columns?
+void ImGui::TableUpdateLayout(ImGuiTable* table)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(table->IsLayoutLocked == false);
+
+ const ImGuiTableFlags table_sizing_policy = (table->Flags & ImGuiTableFlags_SizingMask_);
+ table->IsDefaultDisplayOrder = true;
+ table->ColumnsEnabledCount = 0;
+ table->EnabledMaskByIndex = 0x00;
+ table->EnabledMaskByDisplayOrder = 0x00;
+ table->LeftMostEnabledColumn = -1;
+ table->MinColumnWidth = ImMax(1.0f, g.Style.FramePadding.x * 1.0f); // g.Style.ColumnsMinSpacing; // FIXME-TABLE
+
+ // [Part 1] Apply/lock Enabled and Order states. Calculate auto/ideal width for columns. Count fixed/stretch columns.
+ // Process columns in their visible orders as we are building the Prev/Next indices.
+ int count_fixed = 0; // Number of columns that have fixed sizing policies
+ int count_stretch = 0; // Number of columns that have stretch sizing policies
+ int prev_visible_column_idx = -1;
+ bool has_auto_fit_request = false;
+ bool has_resizable = false;
+ float stretch_sum_width_auto = 0.0f;
+ float fixed_max_width_auto = 0.0f;
+ for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
+ {
+ const int column_n = table->DisplayOrderToIndex[order_n];
+ if (column_n != order_n)
+ table->IsDefaultDisplayOrder = false;
+ ImGuiTableColumn* column = &table->Columns[column_n];
+
+ // Clear column setup if not submitted by user. Currently we make it mandatory to call TableSetupColumn() every frame.
+ // It would easily work without but we're not ready to guarantee it since e.g. names need resubmission anyway.
+ // We take a slight shortcut but in theory we could be calling TableSetupColumn() here with dummy values, it should yield the same effect.
+ if (table->DeclColumnsCount <= column_n)
+ {
+ TableSetupColumnFlags(table, column, ImGuiTableColumnFlags_None);
+ column->NameOffset = -1;
+ column->UserID = 0;
+ column->InitStretchWeightOrWidth = -1.0f;
+ }
+
+ // Update Enabled state, mark settings and sort specs dirty
+ if (!(table->Flags & ImGuiTableFlags_Hideable) || (column->Flags & ImGuiTableColumnFlags_NoHide))
+ column->IsUserEnabledNextFrame = true;
+ if (column->IsUserEnabled != column->IsUserEnabledNextFrame)
+ {
+ column->IsUserEnabled = column->IsUserEnabledNextFrame;
+ table->IsSettingsDirty = true;
+ }
+ column->IsEnabled = column->IsUserEnabled && (column->Flags & ImGuiTableColumnFlags_Disabled) == 0;
+
+ if (column->SortOrder != -1 && !column->IsEnabled)
+ table->IsSortSpecsDirty = true;
+ if (column->SortOrder > 0 && !(table->Flags & ImGuiTableFlags_SortMulti))
+ table->IsSortSpecsDirty = true;
+
+ // Auto-fit unsized columns
+ const bool start_auto_fit = (column->Flags & ImGuiTableColumnFlags_WidthFixed) ? (column->WidthRequest < 0.0f) : (column->StretchWeight < 0.0f);
+ if (start_auto_fit)
+ column->AutoFitQueue = column->CannotSkipItemsQueue = (1 << 3) - 1; // Fit for three frames
+
+ if (!column->IsEnabled)
+ {
+ column->IndexWithinEnabledSet = -1;
+ continue;
+ }
+
+ // Mark as enabled and link to previous/next enabled column
+ column->PrevEnabledColumn = (ImGuiTableColumnIdx)prev_visible_column_idx;
+ column->NextEnabledColumn = -1;
+ if (prev_visible_column_idx != -1)
+ table->Columns[prev_visible_column_idx].NextEnabledColumn = (ImGuiTableColumnIdx)column_n;
+ else
+ table->LeftMostEnabledColumn = (ImGuiTableColumnIdx)column_n;
+ column->IndexWithinEnabledSet = table->ColumnsEnabledCount++;
+ table->EnabledMaskByIndex |= (ImU64)1 << column_n;
+ table->EnabledMaskByDisplayOrder |= (ImU64)1 << column->DisplayOrder;
+ prev_visible_column_idx = column_n;
+ IM_ASSERT(column->IndexWithinEnabledSet <= column->DisplayOrder);
+
+ // Calculate ideal/auto column width (that's the width required for all contents to be visible without clipping)
+ // Combine width from regular rows + width from headers unless requested not to.
+ if (!column->IsPreserveWidthAuto)
+ column->WidthAuto = TableGetColumnWidthAuto(table, column);
+
+ // Non-resizable columns keep their requested width (apply user value regardless of IsPreserveWidthAuto)
+ const bool column_is_resizable = (column->Flags & ImGuiTableColumnFlags_NoResize) == 0;
+ if (column_is_resizable)
+ has_resizable = true;
+ if ((column->Flags & ImGuiTableColumnFlags_WidthFixed) && column->InitStretchWeightOrWidth > 0.0f && !column_is_resizable)
+ column->WidthAuto = column->InitStretchWeightOrWidth;
+
+ if (column->AutoFitQueue != 0x00)
+ has_auto_fit_request = true;
+ if (column->Flags & ImGuiTableColumnFlags_WidthStretch)
+ {
+ stretch_sum_width_auto += column->WidthAuto;
+ count_stretch++;
+ }
+ else
+ {
+ fixed_max_width_auto = ImMax(fixed_max_width_auto, column->WidthAuto);
+ count_fixed++;
+ }
+ }
+ if ((table->Flags & ImGuiTableFlags_Sortable) && table->SortSpecsCount == 0 && !(table->Flags & ImGuiTableFlags_SortTristate))
+ table->IsSortSpecsDirty = true;
+ table->RightMostEnabledColumn = (ImGuiTableColumnIdx)prev_visible_column_idx;
+ IM_ASSERT(table->LeftMostEnabledColumn >= 0 && table->RightMostEnabledColumn >= 0);
+
+ // [Part 2] Disable child window clipping while fitting columns. This is not strictly necessary but makes it possible
+ // to avoid the column fitting having to wait until the first visible frame of the child container (may or not be a good thing).
+ // FIXME-TABLE: for always auto-resizing columns may not want to do that all the time.
+ if (has_auto_fit_request && table->OuterWindow != table->InnerWindow)
+ table->InnerWindow->SkipItems = false;
+ if (has_auto_fit_request)
+ table->IsSettingsDirty = true;
+
+ // [Part 3] Fix column flags and record a few extra information.
+ float sum_width_requests = 0.0f; // Sum of all width for fixed and auto-resize columns, excluding width contributed by Stretch columns but including spacing/padding.
+ float stretch_sum_weights = 0.0f; // Sum of all weights for stretch columns.
+ table->LeftMostStretchedColumn = table->RightMostStretchedColumn = -1;
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ if (!(table->EnabledMaskByIndex & ((ImU64)1 << column_n)))
+ continue;
+ ImGuiTableColumn* column = &table->Columns[column_n];
+
+ const bool column_is_resizable = (column->Flags & ImGuiTableColumnFlags_NoResize) == 0;
+ if (column->Flags & ImGuiTableColumnFlags_WidthFixed)
+ {
+ // Apply same widths policy
+ float width_auto = column->WidthAuto;
+ if (table_sizing_policy == ImGuiTableFlags_SizingFixedSame && (column->AutoFitQueue != 0x00 || !column_is_resizable))
+ width_auto = fixed_max_width_auto;
+
+ // Apply automatic width
+ // Latch initial size for fixed columns and update it constantly for auto-resizing column (unless clipped!)
+ if (column->AutoFitQueue != 0x00)
+ column->WidthRequest = width_auto;
+ else if ((column->Flags & ImGuiTableColumnFlags_WidthFixed) && !column_is_resizable && (table->RequestOutputMaskByIndex & ((ImU64)1 << column_n)))
+ column->WidthRequest = width_auto;
+
+ // FIXME-TABLE: Increase minimum size during init frame to avoid biasing auto-fitting widgets
+ // (e.g. TextWrapped) too much. Otherwise what tends to happen is that TextWrapped would output a very
+ // large height (= first frame scrollbar display very off + clipper would skip lots of items).
+ // This is merely making the side-effect less extreme, but doesn't properly fixes it.
+ // FIXME: Move this to ->WidthGiven to avoid temporary lossyless?
+ // FIXME: This break IsPreserveWidthAuto from not flickering if the stored WidthAuto was smaller.
+ if (column->AutoFitQueue > 0x01 && table->IsInitializing && !column->IsPreserveWidthAuto)
+ column->WidthRequest = ImMax(column->WidthRequest, table->MinColumnWidth * 4.0f); // FIXME-TABLE: Another constant/scale?
+ sum_width_requests += column->WidthRequest;
+ }
+ else
+ {
+ // Initialize stretch weight
+ if (column->AutoFitQueue != 0x00 || column->StretchWeight < 0.0f || !column_is_resizable)
+ {
+ if (column->InitStretchWeightOrWidth > 0.0f)
+ column->StretchWeight = column->InitStretchWeightOrWidth;
+ else if (table_sizing_policy == ImGuiTableFlags_SizingStretchProp)
+ column->StretchWeight = (column->WidthAuto / stretch_sum_width_auto) * count_stretch;
+ else
+ column->StretchWeight = 1.0f;
+ }
+
+ stretch_sum_weights += column->StretchWeight;
+ if (table->LeftMostStretchedColumn == -1 || table->Columns[table->LeftMostStretchedColumn].DisplayOrder > column->DisplayOrder)
+ table->LeftMostStretchedColumn = (ImGuiTableColumnIdx)column_n;
+ if (table->RightMostStretchedColumn == -1 || table->Columns[table->RightMostStretchedColumn].DisplayOrder < column->DisplayOrder)
+ table->RightMostStretchedColumn = (ImGuiTableColumnIdx)column_n;
+ }
+ column->IsPreserveWidthAuto = false;
+ sum_width_requests += table->CellPaddingX * 2.0f;
+ }
+ table->ColumnsEnabledFixedCount = (ImGuiTableColumnIdx)count_fixed;
+ table->ColumnsStretchSumWeights = stretch_sum_weights;
+
+ // [Part 4] Apply final widths based on requested widths
+ const ImRect work_rect = table->WorkRect;
+ const float width_spacings = (table->OuterPaddingX * 2.0f) + (table->CellSpacingX1 + table->CellSpacingX2) * (table->ColumnsEnabledCount - 1);
+ const float width_avail = ((table->Flags & ImGuiTableFlags_ScrollX) && table->InnerWidth == 0.0f) ? table->InnerClipRect.GetWidth() : work_rect.GetWidth();
+ const float width_avail_for_stretched_columns = width_avail - width_spacings - sum_width_requests;
+ float width_remaining_for_stretched_columns = width_avail_for_stretched_columns;
+ table->ColumnsGivenWidth = width_spacings + (table->CellPaddingX * 2.0f) * table->ColumnsEnabledCount;
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ if (!(table->EnabledMaskByIndex & ((ImU64)1 << column_n)))
+ continue;
+ ImGuiTableColumn* column = &table->Columns[column_n];
+
+ // Allocate width for stretched/weighted columns (StretchWeight gets converted into WidthRequest)
+ if (column->Flags & ImGuiTableColumnFlags_WidthStretch)
+ {
+ float weight_ratio = column->StretchWeight / stretch_sum_weights;
+ column->WidthRequest = IM_FLOOR(ImMax(width_avail_for_stretched_columns * weight_ratio, table->MinColumnWidth) + 0.01f);
+ width_remaining_for_stretched_columns -= column->WidthRequest;
+ }
+
+ // [Resize Rule 1] The right-most Visible column is not resizable if there is at least one Stretch column
+ // See additional comments in TableSetColumnWidth().
+ if (column->NextEnabledColumn == -1 && table->LeftMostStretchedColumn != -1)
+ column->Flags |= ImGuiTableColumnFlags_NoDirectResize_;
+
+ // Assign final width, record width in case we will need to shrink
+ column->WidthGiven = ImFloor(ImMax(column->WidthRequest, table->MinColumnWidth));
+ table->ColumnsGivenWidth += column->WidthGiven;
+ }
+
+ // [Part 5] Redistribute stretch remainder width due to rounding (remainder width is < 1.0f * number of Stretch column).
+ // Using right-to-left distribution (more likely to match resizing cursor).
+ if (width_remaining_for_stretched_columns >= 1.0f && !(table->Flags & ImGuiTableFlags_PreciseWidths))
+ for (int order_n = table->ColumnsCount - 1; stretch_sum_weights > 0.0f && width_remaining_for_stretched_columns >= 1.0f && order_n >= 0; order_n--)
+ {
+ if (!(table->EnabledMaskByDisplayOrder & ((ImU64)1 << order_n)))
+ continue;
+ ImGuiTableColumn* column = &table->Columns[table->DisplayOrderToIndex[order_n]];
+ if (!(column->Flags & ImGuiTableColumnFlags_WidthStretch))
+ continue;
+ column->WidthRequest += 1.0f;
+ column->WidthGiven += 1.0f;
+ width_remaining_for_stretched_columns -= 1.0f;
+ }
+
+ ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent);
+ table->HoveredColumnBody = -1;
+ table->HoveredColumnBorder = -1;
+ const ImRect mouse_hit_rect(table->OuterRect.Min.x, table->OuterRect.Min.y, table->OuterRect.Max.x, ImMax(table->OuterRect.Max.y, table->OuterRect.Min.y + table_instance->LastOuterHeight));
+ const bool is_hovering_table = ItemHoverable(mouse_hit_rect, 0);
+
+ // [Part 6] Setup final position, offset, skip/clip states and clipping rectangles, detect hovered column
+ // Process columns in their visible orders as we are comparing the visible order and adjusting host_clip_rect while looping.
+ int visible_n = 0;
+ bool offset_x_frozen = (table->FreezeColumnsCount > 0);
+ float offset_x = ((table->FreezeColumnsCount > 0) ? table->OuterRect.Min.x : work_rect.Min.x) + table->OuterPaddingX - table->CellSpacingX1;
+ ImRect host_clip_rect = table->InnerClipRect;
+ //host_clip_rect.Max.x += table->CellPaddingX + table->CellSpacingX2;
+ table->VisibleMaskByIndex = 0x00;
+ table->RequestOutputMaskByIndex = 0x00;
+ for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
+ {
+ const int column_n = table->DisplayOrderToIndex[order_n];
+ ImGuiTableColumn* column = &table->Columns[column_n];
+
+ column->NavLayerCurrent = (ImS8)((table->FreezeRowsCount > 0 || column_n < table->FreezeColumnsCount) ? ImGuiNavLayer_Menu : ImGuiNavLayer_Main);
+
+ if (offset_x_frozen && table->FreezeColumnsCount == visible_n)
+ {
+ offset_x += work_rect.Min.x - table->OuterRect.Min.x;
+ offset_x_frozen = false;
+ }
+
+ // Clear status flags
+ column->Flags &= ~ImGuiTableColumnFlags_StatusMask_;
+
+ if ((table->EnabledMaskByDisplayOrder & ((ImU64)1 << order_n)) == 0)
+ {
+ // Hidden column: clear a few fields and we are done with it for the remainder of the function.
+ // We set a zero-width clip rect but set Min.y/Max.y properly to not interfere with the clipper.
+ column->MinX = column->MaxX = column->WorkMinX = column->ClipRect.Min.x = column->ClipRect.Max.x = offset_x;
+ column->WidthGiven = 0.0f;
+ column->ClipRect.Min.y = work_rect.Min.y;
+ column->ClipRect.Max.y = FLT_MAX;
+ column->ClipRect.ClipWithFull(host_clip_rect);
+ column->IsVisibleX = column->IsVisibleY = column->IsRequestOutput = false;
+ column->IsSkipItems = true;
+ column->ItemWidth = 1.0f;
+ continue;
+ }
+
+ // Detect hovered column
+ if (is_hovering_table && g.IO.MousePos.x >= column->ClipRect.Min.x && g.IO.MousePos.x < column->ClipRect.Max.x)
+ table->HoveredColumnBody = (ImGuiTableColumnIdx)column_n;
+
+ // Lock start position
+ column->MinX = offset_x;
+
+ // Lock width based on start position and minimum/maximum width for this position
+ float max_width = TableGetMaxColumnWidth(table, column_n);
+ column->WidthGiven = ImMin(column->WidthGiven, max_width);
+ column->WidthGiven = ImMax(column->WidthGiven, ImMin(column->WidthRequest, table->MinColumnWidth));
+ column->MaxX = offset_x + column->WidthGiven + table->CellSpacingX1 + table->CellSpacingX2 + table->CellPaddingX * 2.0f;
+
+ // Lock other positions
+ // - ClipRect.Min.x: Because merging draw commands doesn't compare min boundaries, we make ClipRect.Min.x match left bounds to be consistent regardless of merging.
+ // - ClipRect.Max.x: using WorkMaxX instead of MaxX (aka including padding) makes things more consistent when resizing down, tho slightly detrimental to visibility in very-small column.
+ // - ClipRect.Max.x: using MaxX makes it easier for header to receive hover highlight with no discontinuity and display sorting arrow.
+ // - FIXME-TABLE: We want equal width columns to have equal (ClipRect.Max.x - WorkMinX) width, which means ClipRect.max.x cannot stray off host_clip_rect.Max.x else right-most column may appear shorter.
+ column->WorkMinX = column->MinX + table->CellPaddingX + table->CellSpacingX1;
+ column->WorkMaxX = column->MaxX - table->CellPaddingX - table->CellSpacingX2; // Expected max
+ column->ItemWidth = ImFloor(column->WidthGiven * 0.65f);
+ column->ClipRect.Min.x = column->MinX;
+ column->ClipRect.Min.y = work_rect.Min.y;
+ column->ClipRect.Max.x = column->MaxX; //column->WorkMaxX;
+ column->ClipRect.Max.y = FLT_MAX;
+ column->ClipRect.ClipWithFull(host_clip_rect);
+
+ // Mark column as Clipped (not in sight)
+ // Note that scrolling tables (where inner_window != outer_window) handle Y clipped earlier in BeginTable() so IsVisibleY really only applies to non-scrolling tables.
+ // FIXME-TABLE: Because InnerClipRect.Max.y is conservatively ==outer_window->ClipRect.Max.y, we never can mark columns _Above_ the scroll line as not IsVisibleY.
+ // Taking advantage of LastOuterHeight would yield good results there...
+ // FIXME-TABLE: Y clipping is disabled because it effectively means not submitting will reduce contents width which is fed to outer_window->DC.CursorMaxPos.x,
+ // and this may be used (e.g. typically by outer_window using AlwaysAutoResize or outer_window's horizontal scrollbar, but could be something else).
+ // Possible solution to preserve last known content width for clipped column. Test 'table_reported_size' fails when enabling Y clipping and window is resized small.
+ column->IsVisibleX = (column->ClipRect.Max.x > column->ClipRect.Min.x);
+ column->IsVisibleY = true; // (column->ClipRect.Max.y > column->ClipRect.Min.y);
+ const bool is_visible = column->IsVisibleX; //&& column->IsVisibleY;
+ if (is_visible)
+ table->VisibleMaskByIndex |= ((ImU64)1 << column_n);
+
+ // Mark column as requesting output from user. Note that fixed + non-resizable sets are auto-fitting at all times and therefore always request output.
+ column->IsRequestOutput = is_visible || column->AutoFitQueue != 0 || column->CannotSkipItemsQueue != 0;
+ if (column->IsRequestOutput)
+ table->RequestOutputMaskByIndex |= ((ImU64)1 << column_n);
+
+ // Mark column as SkipItems (ignoring all items/layout)
+ column->IsSkipItems = !column->IsEnabled || table->HostSkipItems;
+ if (column->IsSkipItems)
+ IM_ASSERT(!is_visible);
+
+ // Update status flags
+ column->Flags |= ImGuiTableColumnFlags_IsEnabled;
+ if (is_visible)
+ column->Flags |= ImGuiTableColumnFlags_IsVisible;
+ if (column->SortOrder != -1)
+ column->Flags |= ImGuiTableColumnFlags_IsSorted;
+ if (table->HoveredColumnBody == column_n)
+ column->Flags |= ImGuiTableColumnFlags_IsHovered;
+
+ // Alignment
+ // FIXME-TABLE: This align based on the whole column width, not per-cell, and therefore isn't useful in
+ // many cases (to be able to honor this we might be able to store a log of cells width, per row, for
+ // visible rows, but nav/programmatic scroll would have visible artifacts.)
+ //if (column->Flags & ImGuiTableColumnFlags_AlignRight)
+ // column->WorkMinX = ImMax(column->WorkMinX, column->MaxX - column->ContentWidthRowsUnfrozen);
+ //else if (column->Flags & ImGuiTableColumnFlags_AlignCenter)
+ // column->WorkMinX = ImLerp(column->WorkMinX, ImMax(column->StartX, column->MaxX - column->ContentWidthRowsUnfrozen), 0.5f);
+
+ // Reset content width variables
+ column->ContentMaxXFrozen = column->ContentMaxXUnfrozen = column->WorkMinX;
+ column->ContentMaxXHeadersUsed = column->ContentMaxXHeadersIdeal = column->WorkMinX;
+
+ // Don't decrement auto-fit counters until container window got a chance to submit its items
+ if (table->HostSkipItems == false)
+ {
+ column->AutoFitQueue >>= 1;
+ column->CannotSkipItemsQueue >>= 1;
+ }
+
+ if (visible_n < table->FreezeColumnsCount)
+ host_clip_rect.Min.x = ImClamp(column->MaxX + TABLE_BORDER_SIZE, host_clip_rect.Min.x, host_clip_rect.Max.x);
+
+ offset_x += column->WidthGiven + table->CellSpacingX1 + table->CellSpacingX2 + table->CellPaddingX * 2.0f;
+ visible_n++;
+ }
+
+ // [Part 7] Detect/store when we are hovering the unused space after the right-most column (so e.g. context menus can react on it)
+ // Clear Resizable flag if none of our column are actually resizable (either via an explicit _NoResize flag, either
+ // because of using _WidthAuto/_WidthStretch). This will hide the resizing option from the context menu.
+ const float unused_x1 = ImMax(table->WorkRect.Min.x, table->Columns[table->RightMostEnabledColumn].ClipRect.Max.x);
+ if (is_hovering_table && table->HoveredColumnBody == -1)
+ {
+ if (g.IO.MousePos.x >= unused_x1)
+ table->HoveredColumnBody = (ImGuiTableColumnIdx)table->ColumnsCount;
+ }
+ if (has_resizable == false && (table->Flags & ImGuiTableFlags_Resizable))
+ table->Flags &= ~ImGuiTableFlags_Resizable;
+
+ // [Part 8] Lock actual OuterRect/WorkRect right-most position.
+ // This is done late to handle the case of fixed-columns tables not claiming more widths that they need.
+ // Because of this we are careful with uses of WorkRect and InnerClipRect before this point.
+ if (table->RightMostStretchedColumn != -1)
+ table->Flags &= ~ImGuiTableFlags_NoHostExtendX;
+ if (table->Flags & ImGuiTableFlags_NoHostExtendX)
+ {
+ table->OuterRect.Max.x = table->WorkRect.Max.x = unused_x1;
+ table->InnerClipRect.Max.x = ImMin(table->InnerClipRect.Max.x, unused_x1);
+ }
+ table->InnerWindow->ParentWorkRect = table->WorkRect;
+ table->BorderX1 = table->InnerClipRect.Min.x;// +((table->Flags & ImGuiTableFlags_BordersOuter) ? 0.0f : -1.0f);
+ table->BorderX2 = table->InnerClipRect.Max.x;// +((table->Flags & ImGuiTableFlags_BordersOuter) ? 0.0f : +1.0f);
+
+ // [Part 9] Allocate draw channels and setup background cliprect
+ TableSetupDrawChannels(table);
+
+ // [Part 10] Hit testing on borders
+ if (table->Flags & ImGuiTableFlags_Resizable)
+ TableUpdateBorders(table);
+ table_instance->LastFirstRowHeight = 0.0f;
+ table->IsLayoutLocked = true;
+ table->IsUsingHeaders = false;
+
+ // [Part 11] Context menu
+ if (table->IsContextPopupOpen && table->InstanceCurrent == table->InstanceInteracted)
+ {
+ const ImGuiID context_menu_id = ImHashStr("##ContextMenu", 0, table->ID);
+ if (BeginPopupEx(context_menu_id, ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings))
+ {
+ TableDrawContextMenu(table);
+ EndPopup();
+ }
+ else
+ {
+ table->IsContextPopupOpen = false;
+ }
+ }
+
+ // [Part 13] Sanitize and build sort specs before we have a change to use them for display.
+ // This path will only be exercised when sort specs are modified before header rows (e.g. init or visibility change)
+ if (table->IsSortSpecsDirty && (table->Flags & ImGuiTableFlags_Sortable))
+ TableSortSpecsBuild(table);
+
+ // Initial state
+ ImGuiWindow* inner_window = table->InnerWindow;
+ if (table->Flags & ImGuiTableFlags_NoClip)
+ table->DrawSplitter->SetCurrentChannel(inner_window->DrawList, TABLE_DRAW_CHANNEL_NOCLIP);
+ else
+ inner_window->DrawList->PushClipRect(inner_window->ClipRect.Min, inner_window->ClipRect.Max, false);
+}
+
+// Process hit-testing on resizing borders. Actual size change will be applied in EndTable()
+// - Set table->HoveredColumnBorder with a short delay/timer to reduce feedback noise
+// - Submit ahead of table contents and header, use ImGuiButtonFlags_AllowItemOverlap to prioritize widgets
+// overlapping the same area.
+void ImGui::TableUpdateBorders(ImGuiTable* table)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(table->Flags & ImGuiTableFlags_Resizable);
+
+ // At this point OuterRect height may be zero or under actual final height, so we rely on temporal coherency and
+ // use the final height from last frame. Because this is only affecting _interaction_ with columns, it is not
+ // really problematic (whereas the actual visual will be displayed in EndTable() and using the current frame height).
+ // Actual columns highlight/render will be performed in EndTable() and not be affected.
+ ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent);
+ const float hit_half_width = TABLE_RESIZE_SEPARATOR_HALF_THICKNESS;
+ const float hit_y1 = table->OuterRect.Min.y;
+ const float hit_y2_body = ImMax(table->OuterRect.Max.y, hit_y1 + table_instance->LastOuterHeight);
+ const float hit_y2_head = hit_y1 + table_instance->LastFirstRowHeight;
+
+ for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
+ {
+ if (!(table->EnabledMaskByDisplayOrder & ((ImU64)1 << order_n)))
+ continue;
+
+ const int column_n = table->DisplayOrderToIndex[order_n];
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ if (column->Flags & (ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_NoDirectResize_))
+ continue;
+
+ // ImGuiTableFlags_NoBordersInBodyUntilResize will be honored in TableDrawBorders()
+ const float border_y2_hit = (table->Flags & ImGuiTableFlags_NoBordersInBody) ? hit_y2_head : hit_y2_body;
+ if ((table->Flags & ImGuiTableFlags_NoBordersInBody) && table->IsUsingHeaders == false)
+ continue;
+
+ if (!column->IsVisibleX && table->LastResizedColumn != column_n)
+ continue;
+
+ ImGuiID column_id = TableGetColumnResizeID(table, column_n, table->InstanceCurrent);
+ ImRect hit_rect(column->MaxX - hit_half_width, hit_y1, column->MaxX + hit_half_width, border_y2_hit);
+ //GetForegroundDrawList()->AddRect(hit_rect.Min, hit_rect.Max, IM_COL32(255, 0, 0, 100));
+ KeepAliveID(column_id);
+
+ bool hovered = false, held = false;
+ bool pressed = ButtonBehavior(hit_rect, column_id, &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_AllowItemOverlap | ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_PressedOnDoubleClick | ImGuiButtonFlags_NoNavFocus);
+ if (pressed && IsMouseDoubleClicked(0))
+ {
+ TableSetColumnWidthAutoSingle(table, column_n);
+ ClearActiveID();
+ held = hovered = false;
+ }
+ if (held)
+ {
+ if (table->LastResizedColumn == -1)
+ table->ResizeLockMinContentsX2 = table->RightMostEnabledColumn != -1 ? table->Columns[table->RightMostEnabledColumn].MaxX : -FLT_MAX;
+ table->ResizedColumn = (ImGuiTableColumnIdx)column_n;
+ table->InstanceInteracted = table->InstanceCurrent;
+ }
+ if ((hovered && g.HoveredIdTimer > TABLE_RESIZE_SEPARATOR_FEEDBACK_TIMER) || held)
+ {
+ table->HoveredColumnBorder = (ImGuiTableColumnIdx)column_n;
+ SetMouseCursor(ImGuiMouseCursor_ResizeEW);
+ }
+ }
+}
+
+void ImGui::EndTable()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ IM_ASSERT(table != NULL && "Only call EndTable() if BeginTable() returns true!");
+
+ // This assert would be very useful to catch a common error... unfortunately it would probably trigger in some
+ // cases, and for consistency user may sometimes output empty tables (and still benefit from e.g. outer border)
+ //IM_ASSERT(table->IsLayoutLocked && "Table unused: never called TableNextRow(), is that the intent?");
+
+ // If the user never got to call TableNextRow() or TableNextColumn(), we call layout ourselves to ensure all our
+ // code paths are consistent (instead of just hoping that TableBegin/TableEnd will work), get borders drawn, etc.
+ if (!table->IsLayoutLocked)
+ TableUpdateLayout(table);
+
+ const ImGuiTableFlags flags = table->Flags;
+ ImGuiWindow* inner_window = table->InnerWindow;
+ ImGuiWindow* outer_window = table->OuterWindow;
+ ImGuiTableTempData* temp_data = table->TempData;
+ IM_ASSERT(inner_window == g.CurrentWindow);
+ IM_ASSERT(outer_window == inner_window || outer_window == inner_window->ParentWindow);
+
+ if (table->IsInsideRow)
+ TableEndRow(table);
+
+ // Context menu in columns body
+ if (flags & ImGuiTableFlags_ContextMenuInBody)
+ if (table->HoveredColumnBody != -1 && !IsAnyItemHovered() && IsMouseReleased(ImGuiMouseButton_Right))
+ TableOpenContextMenu((int)table->HoveredColumnBody);
+
+ // Finalize table height
+ ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent);
+ inner_window->DC.PrevLineSize = temp_data->HostBackupPrevLineSize;
+ inner_window->DC.CurrLineSize = temp_data->HostBackupCurrLineSize;
+ inner_window->DC.CursorMaxPos = temp_data->HostBackupCursorMaxPos;
+ const float inner_content_max_y = table->RowPosY2;
+ IM_ASSERT(table->RowPosY2 == inner_window->DC.CursorPos.y);
+ if (inner_window != outer_window)
+ inner_window->DC.CursorMaxPos.y = inner_content_max_y;
+ else if (!(flags & ImGuiTableFlags_NoHostExtendY))
+ table->OuterRect.Max.y = table->InnerRect.Max.y = ImMax(table->OuterRect.Max.y, inner_content_max_y); // Patch OuterRect/InnerRect height
+ table->WorkRect.Max.y = ImMax(table->WorkRect.Max.y, table->OuterRect.Max.y);
+ table_instance->LastOuterHeight = table->OuterRect.GetHeight();
+
+ // Setup inner scrolling range
+ // FIXME: This ideally should be done earlier, in BeginTable() SetNextWindowContentSize call, just like writing to inner_window->DC.CursorMaxPos.y,
+ // but since the later is likely to be impossible to do we'd rather update both axises together.
+ if (table->Flags & ImGuiTableFlags_ScrollX)
+ {
+ const float outer_padding_for_border = (table->Flags & ImGuiTableFlags_BordersOuterV) ? TABLE_BORDER_SIZE : 0.0f;
+ float max_pos_x = table->InnerWindow->DC.CursorMaxPos.x;
+ if (table->RightMostEnabledColumn != -1)
+ max_pos_x = ImMax(max_pos_x, table->Columns[table->RightMostEnabledColumn].WorkMaxX + table->CellPaddingX + table->OuterPaddingX - outer_padding_for_border);
+ if (table->ResizedColumn != -1)
+ max_pos_x = ImMax(max_pos_x, table->ResizeLockMinContentsX2);
+ table->InnerWindow->DC.CursorMaxPos.x = max_pos_x;
+ }
+
+ // Pop clipping rect
+ if (!(flags & ImGuiTableFlags_NoClip))
+ inner_window->DrawList->PopClipRect();
+ inner_window->ClipRect = inner_window->DrawList->_ClipRectStack.back();
+
+ // Draw borders
+ if ((flags & ImGuiTableFlags_Borders) != 0)
+ TableDrawBorders(table);
+
+#if 0
+ // Strip out dummy channel draw calls
+ // We have no way to prevent user submitting direct ImDrawList calls into a hidden column (but ImGui:: calls will be clipped out)
+ // Pros: remove draw calls which will have no effect. since they'll have zero-size cliprect they may be early out anyway.
+ // Cons: making it harder for users watching metrics/debugger to spot the wasted vertices.
+ if (table->DummyDrawChannel != (ImGuiTableColumnIdx)-1)
+ {
+ ImDrawChannel* dummy_channel = &table->DrawSplitter._Channels[table->DummyDrawChannel];
+ dummy_channel->_CmdBuffer.resize(0);
+ dummy_channel->_IdxBuffer.resize(0);
+ }
+#endif
+
+ // Flatten channels and merge draw calls
+ ImDrawListSplitter* splitter = table->DrawSplitter;
+ splitter->SetCurrentChannel(inner_window->DrawList, 0);
+ if ((table->Flags & ImGuiTableFlags_NoClip) == 0)
+ TableMergeDrawChannels(table);
+ splitter->Merge(inner_window->DrawList);
+
+ // Update ColumnsAutoFitWidth to get us ahead for host using our size to auto-resize without waiting for next BeginTable()
+ float auto_fit_width_for_fixed = 0.0f;
+ float auto_fit_width_for_stretched = 0.0f;
+ float auto_fit_width_for_stretched_min = 0.0f;
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ if (table->EnabledMaskByIndex & ((ImU64)1 << column_n))
+ {
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ float column_width_request = ((column->Flags & ImGuiTableColumnFlags_WidthFixed) && !(column->Flags & ImGuiTableColumnFlags_NoResize)) ? column->WidthRequest : TableGetColumnWidthAuto(table, column);
+ if (column->Flags & ImGuiTableColumnFlags_WidthFixed)
+ auto_fit_width_for_fixed += column_width_request;
+ else
+ auto_fit_width_for_stretched += column_width_request;
+ if ((column->Flags & ImGuiTableColumnFlags_WidthStretch) && (column->Flags & ImGuiTableColumnFlags_NoResize) != 0)
+ auto_fit_width_for_stretched_min = ImMax(auto_fit_width_for_stretched_min, column_width_request / (column->StretchWeight / table->ColumnsStretchSumWeights));
+ }
+ const float width_spacings = (table->OuterPaddingX * 2.0f) + (table->CellSpacingX1 + table->CellSpacingX2) * (table->ColumnsEnabledCount - 1);
+ table->ColumnsAutoFitWidth = width_spacings + (table->CellPaddingX * 2.0f) * table->ColumnsEnabledCount + auto_fit_width_for_fixed + ImMax(auto_fit_width_for_stretched, auto_fit_width_for_stretched_min);
+
+ // Update scroll
+ if ((table->Flags & ImGuiTableFlags_ScrollX) == 0 && inner_window != outer_window)
+ {
+ inner_window->Scroll.x = 0.0f;
+ }
+ else if (table->LastResizedColumn != -1 && table->ResizedColumn == -1 && inner_window->ScrollbarX && table->InstanceInteracted == table->InstanceCurrent)
+ {
+ // When releasing a column being resized, scroll to keep the resulting column in sight
+ const float neighbor_width_to_keep_visible = table->MinColumnWidth + table->CellPaddingX * 2.0f;
+ ImGuiTableColumn* column = &table->Columns[table->LastResizedColumn];
+ if (column->MaxX < table->InnerClipRect.Min.x)
+ SetScrollFromPosX(inner_window, column->MaxX - inner_window->Pos.x - neighbor_width_to_keep_visible, 1.0f);
+ else if (column->MaxX > table->InnerClipRect.Max.x)
+ SetScrollFromPosX(inner_window, column->MaxX - inner_window->Pos.x + neighbor_width_to_keep_visible, 1.0f);
+ }
+
+ // Apply resizing/dragging at the end of the frame
+ if (table->ResizedColumn != -1 && table->InstanceCurrent == table->InstanceInteracted)
+ {
+ ImGuiTableColumn* column = &table->Columns[table->ResizedColumn];
+ const float new_x2 = (g.IO.MousePos.x - g.ActiveIdClickOffset.x + TABLE_RESIZE_SEPARATOR_HALF_THICKNESS);
+ const float new_width = ImFloor(new_x2 - column->MinX - table->CellSpacingX1 - table->CellPaddingX * 2.0f);
+ table->ResizedColumnNextWidth = new_width;
+ }
+
+ // Pop from id stack
+ IM_ASSERT_USER_ERROR(inner_window->IDStack.back() == table->ID + table->InstanceCurrent, "Mismatching PushID/PopID!");
+ IM_ASSERT_USER_ERROR(outer_window->DC.ItemWidthStack.Size >= temp_data->HostBackupItemWidthStackSize, "Too many PopItemWidth!");
+ PopID();
+
+ // Restore window data that we modified
+ const ImVec2 backup_outer_max_pos = outer_window->DC.CursorMaxPos;
+ inner_window->WorkRect = temp_data->HostBackupWorkRect;
+ inner_window->ParentWorkRect = temp_data->HostBackupParentWorkRect;
+ inner_window->SkipItems = table->HostSkipItems;
+ outer_window->DC.CursorPos = table->OuterRect.Min;
+ outer_window->DC.ItemWidth = temp_data->HostBackupItemWidth;
+ outer_window->DC.ItemWidthStack.Size = temp_data->HostBackupItemWidthStackSize;
+ outer_window->DC.ColumnsOffset = temp_data->HostBackupColumnsOffset;
+
+ // Layout in outer window
+ // (FIXME: To allow auto-fit and allow desirable effect of SameLine() we dissociate 'used' vs 'ideal' size by overriding
+ // CursorPosPrevLine and CursorMaxPos manually. That should be a more general layout feature, see same problem e.g. #3414)
+ if (inner_window != outer_window)
+ {
+ EndChild();
+ }
+ else
+ {
+ ItemSize(table->OuterRect.GetSize());
+ ItemAdd(table->OuterRect, 0);
+ }
+
+ // Override declared contents width/height to enable auto-resize while not needlessly adding a scrollbar
+ if (table->Flags & ImGuiTableFlags_NoHostExtendX)
+ {
+ // FIXME-TABLE: Could we remove this section?
+ // ColumnsAutoFitWidth may be one frame ahead here since for Fixed+NoResize is calculated from latest contents
+ IM_ASSERT((table->Flags & ImGuiTableFlags_ScrollX) == 0);
+ outer_window->DC.CursorMaxPos.x = ImMax(backup_outer_max_pos.x, table->OuterRect.Min.x + table->ColumnsAutoFitWidth);
+ }
+ else if (temp_data->UserOuterSize.x <= 0.0f)
+ {
+ const float decoration_size = (table->Flags & ImGuiTableFlags_ScrollX) ? inner_window->ScrollbarSizes.x : 0.0f;
+ outer_window->DC.IdealMaxPos.x = ImMax(outer_window->DC.IdealMaxPos.x, table->OuterRect.Min.x + table->ColumnsAutoFitWidth + decoration_size - temp_data->UserOuterSize.x);
+ outer_window->DC.CursorMaxPos.x = ImMax(backup_outer_max_pos.x, ImMin(table->OuterRect.Max.x, table->OuterRect.Min.x + table->ColumnsAutoFitWidth));
+ }
+ else
+ {
+ outer_window->DC.CursorMaxPos.x = ImMax(backup_outer_max_pos.x, table->OuterRect.Max.x);
+ }
+ if (temp_data->UserOuterSize.y <= 0.0f)
+ {
+ const float decoration_size = (table->Flags & ImGuiTableFlags_ScrollY) ? inner_window->ScrollbarSizes.y : 0.0f;
+ outer_window->DC.IdealMaxPos.y = ImMax(outer_window->DC.IdealMaxPos.y, inner_content_max_y + decoration_size - temp_data->UserOuterSize.y);
+ outer_window->DC.CursorMaxPos.y = ImMax(backup_outer_max_pos.y, ImMin(table->OuterRect.Max.y, inner_content_max_y));
+ }
+ else
+ {
+ // OuterRect.Max.y may already have been pushed downward from the initial value (unless ImGuiTableFlags_NoHostExtendY is set)
+ outer_window->DC.CursorMaxPos.y = ImMax(backup_outer_max_pos.y, table->OuterRect.Max.y);
+ }
+
+ // Save settings
+ if (table->IsSettingsDirty)
+ TableSaveSettings(table);
+ table->IsInitializing = false;
+
+ // Clear or restore current table, if any
+ IM_ASSERT(g.CurrentWindow == outer_window && g.CurrentTable == table);
+ IM_ASSERT(g.TablesTempDataStacked > 0);
+ temp_data = (--g.TablesTempDataStacked > 0) ? &g.TablesTempData[g.TablesTempDataStacked - 1] : NULL;
+ g.CurrentTable = temp_data ? g.Tables.GetByIndex(temp_data->TableIndex) : NULL;
+ if (g.CurrentTable)
+ {
+ g.CurrentTable->TempData = temp_data;
+ g.CurrentTable->DrawSplitter = &temp_data->DrawSplitter;
+ }
+ outer_window->DC.CurrentTableIdx = g.CurrentTable ? g.Tables.GetIndex(g.CurrentTable) : -1;
+}
+
+// See "COLUMN SIZING POLICIES" comments at the top of this file
+// If (init_width_or_weight <= 0.0f) it is ignored
+void ImGui::TableSetupColumn(const char* label, ImGuiTableColumnFlags flags, float init_width_or_weight, ImGuiID user_id)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ IM_ASSERT(table != NULL && "Need to call TableSetupColumn() after BeginTable()!");
+ IM_ASSERT(table->IsLayoutLocked == false && "Need to call call TableSetupColumn() before first row!");
+ IM_ASSERT((flags & ImGuiTableColumnFlags_StatusMask_) == 0 && "Illegal to pass StatusMask values to TableSetupColumn()");
+ if (table->DeclColumnsCount >= table->ColumnsCount)
+ {
+ IM_ASSERT_USER_ERROR(table->DeclColumnsCount < table->ColumnsCount, "Called TableSetupColumn() too many times!");
+ return;
+ }
+
+ ImGuiTableColumn* column = &table->Columns[table->DeclColumnsCount];
+ table->DeclColumnsCount++;
+
+ // Assert when passing a width or weight if policy is entirely left to default, to avoid storing width into weight and vice-versa.
+ // Give a grace to users of ImGuiTableFlags_ScrollX.
+ if (table->IsDefaultSizingPolicy && (flags & ImGuiTableColumnFlags_WidthMask_) == 0 && (flags & ImGuiTableFlags_ScrollX) == 0)
+ IM_ASSERT(init_width_or_weight <= 0.0f && "Can only specify width/weight if sizing policy is set explicitly in either Table or Column.");
+
+ // When passing a width automatically enforce WidthFixed policy
+ // (whereas TableSetupColumnFlags would default to WidthAuto if table is not Resizable)
+ if ((flags & ImGuiTableColumnFlags_WidthMask_) == 0 && init_width_or_weight > 0.0f)
+ if ((table->Flags & ImGuiTableFlags_SizingMask_) == ImGuiTableFlags_SizingFixedFit || (table->Flags & ImGuiTableFlags_SizingMask_) == ImGuiTableFlags_SizingFixedSame)
+ flags |= ImGuiTableColumnFlags_WidthFixed;
+
+ TableSetupColumnFlags(table, column, flags);
+ column->UserID = user_id;
+ flags = column->Flags;
+
+ // Initialize defaults
+ column->InitStretchWeightOrWidth = init_width_or_weight;
+ if (table->IsInitializing)
+ {
+ // Init width or weight
+ if (column->WidthRequest < 0.0f && column->StretchWeight < 0.0f)
+ {
+ if ((flags & ImGuiTableColumnFlags_WidthFixed) && init_width_or_weight > 0.0f)
+ column->WidthRequest = init_width_or_weight;
+ if (flags & ImGuiTableColumnFlags_WidthStretch)
+ column->StretchWeight = (init_width_or_weight > 0.0f) ? init_width_or_weight : -1.0f;
+
+ // Disable auto-fit if an explicit width/weight has been specified
+ if (init_width_or_weight > 0.0f)
+ column->AutoFitQueue = 0x00;
+ }
+
+ // Init default visibility/sort state
+ if ((flags & ImGuiTableColumnFlags_DefaultHide) && (table->SettingsLoadedFlags & ImGuiTableFlags_Hideable) == 0)
+ column->IsUserEnabled = column->IsUserEnabledNextFrame = false;
+ if (flags & ImGuiTableColumnFlags_DefaultSort && (table->SettingsLoadedFlags & ImGuiTableFlags_Sortable) == 0)
+ {
+ column->SortOrder = 0; // Multiple columns using _DefaultSort will be reassigned unique SortOrder values when building the sort specs.
+ column->SortDirection = (column->Flags & ImGuiTableColumnFlags_PreferSortDescending) ? (ImS8)ImGuiSortDirection_Descending : (ImU8)(ImGuiSortDirection_Ascending);
+ }
+ }
+
+ // Store name (append with zero-terminator in contiguous buffer)
+ column->NameOffset = -1;
+ if (label != NULL && label[0] != 0)
+ {
+ column->NameOffset = (ImS16)table->ColumnsNames.size();
+ table->ColumnsNames.append(label, label + strlen(label) + 1);
+ }
+}
+
+// [Public]
+void ImGui::TableSetupScrollFreeze(int columns, int rows)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ IM_ASSERT(table != NULL && "Need to call TableSetupColumn() after BeginTable()!");
+ IM_ASSERT(table->IsLayoutLocked == false && "Need to call TableSetupColumn() before first row!");
+ IM_ASSERT(columns >= 0 && columns < IMGUI_TABLE_MAX_COLUMNS);
+ IM_ASSERT(rows >= 0 && rows < 128); // Arbitrary limit
+
+ table->FreezeColumnsRequest = (table->Flags & ImGuiTableFlags_ScrollX) ? (ImGuiTableColumnIdx)ImMin(columns, table->ColumnsCount) : 0;
+ table->FreezeColumnsCount = (table->InnerWindow->Scroll.x != 0.0f) ? table->FreezeColumnsRequest : 0;
+ table->FreezeRowsRequest = (table->Flags & ImGuiTableFlags_ScrollY) ? (ImGuiTableColumnIdx)rows : 0;
+ table->FreezeRowsCount = (table->InnerWindow->Scroll.y != 0.0f) ? table->FreezeRowsRequest : 0;
+ table->IsUnfrozenRows = (table->FreezeRowsCount == 0); // Make sure this is set before TableUpdateLayout() so ImGuiListClipper can benefit from it.b
+
+ // Ensure frozen columns are ordered in their section. We still allow multiple frozen columns to be reordered.
+ // FIXME-TABLE: This work for preserving 2143 into 21|43. How about 4321 turning into 21|43? (preserve relative order in each section)
+ for (int column_n = 0; column_n < table->FreezeColumnsRequest; column_n++)
+ {
+ int order_n = table->DisplayOrderToIndex[column_n];
+ if (order_n != column_n && order_n >= table->FreezeColumnsRequest)
+ {
+ ImSwap(table->Columns[table->DisplayOrderToIndex[order_n]].DisplayOrder, table->Columns[table->DisplayOrderToIndex[column_n]].DisplayOrder);
+ ImSwap(table->DisplayOrderToIndex[order_n], table->DisplayOrderToIndex[column_n]);
+ }
+ }
+}
+
+//-----------------------------------------------------------------------------
+// [SECTION] Tables: Simple accessors
+//-----------------------------------------------------------------------------
+// - TableGetColumnCount()
+// - TableGetColumnName()
+// - TableGetColumnName() [Internal]
+// - TableSetColumnEnabled()
+// - TableGetColumnFlags()
+// - TableGetCellBgRect() [Internal]
+// - TableGetColumnResizeID() [Internal]
+// - TableGetHoveredColumn() [Internal]
+// - TableSetBgColor()
+//-----------------------------------------------------------------------------
+
+int ImGui::TableGetColumnCount()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ return table ? table->ColumnsCount : 0;
+}
+
+const char* ImGui::TableGetColumnName(int column_n)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ if (!table)
+ return NULL;
+ if (column_n < 0)
+ column_n = table->CurrentColumn;
+ return TableGetColumnName(table, column_n);
+}
+
+const char* ImGui::TableGetColumnName(const ImGuiTable* table, int column_n)
+{
+ if (table->IsLayoutLocked == false && column_n >= table->DeclColumnsCount)
+ return ""; // NameOffset is invalid at this point
+ const ImGuiTableColumn* column = &table->Columns[column_n];
+ if (column->NameOffset == -1)
+ return "";
+ return &table->ColumnsNames.Buf[column->NameOffset];
+}
+
+// Change user accessible enabled/disabled state of a column (often perceived as "showing/hiding" from users point of view)
+// Note that end-user can use the context menu to change this themselves (right-click in headers, or right-click in columns body with ImGuiTableFlags_ContextMenuInBody)
+// - Require table to have the ImGuiTableFlags_Hideable flag because we are manipulating user accessible state.
+// - Request will be applied during next layout, which happens on the first call to TableNextRow() after BeginTable().
+// - For the getter you can test (TableGetColumnFlags() & ImGuiTableColumnFlags_IsEnabled) != 0.
+// - Alternative: the ImGuiTableColumnFlags_Disabled is an overriding/master disable flag which will also hide the column from context menu.
+void ImGui::TableSetColumnEnabled(int column_n, bool enabled)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ IM_ASSERT(table != NULL);
+ if (!table)
+ return;
+ IM_ASSERT(table->Flags & ImGuiTableFlags_Hideable); // See comments above
+ if (column_n < 0)
+ column_n = table->CurrentColumn;
+ IM_ASSERT(column_n >= 0 && column_n < table->ColumnsCount);
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ column->IsUserEnabledNextFrame = enabled;
+}
+
+// We allow querying for an extra column in order to poll the IsHovered state of the right-most section
+ImGuiTableColumnFlags ImGui::TableGetColumnFlags(int column_n)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ if (!table)
+ return ImGuiTableColumnFlags_None;
+ if (column_n < 0)
+ column_n = table->CurrentColumn;
+ if (column_n == table->ColumnsCount)
+ return (table->HoveredColumnBody == column_n) ? ImGuiTableColumnFlags_IsHovered : ImGuiTableColumnFlags_None;
+ return table->Columns[column_n].Flags;
+}
+
+// Return the cell rectangle based on currently known height.
+// - Important: we generally don't know our row height until the end of the row, so Max.y will be incorrect in many situations.
+// The only case where this is correct is if we provided a min_row_height to TableNextRow() and don't go below it, or in TableEndRow() when we locked that height.
+// - Important: if ImGuiTableFlags_PadOuterX is set but ImGuiTableFlags_PadInnerX is not set, the outer-most left and right
+// columns report a small offset so their CellBgRect can extend up to the outer border.
+// FIXME: But the rendering code in TableEndRow() nullifies that with clamping required for scrolling.
+ImRect ImGui::TableGetCellBgRect(const ImGuiTable* table, int column_n)
+{
+ const ImGuiTableColumn* column = &table->Columns[column_n];
+ float x1 = column->MinX;
+ float x2 = column->MaxX;
+ //if (column->PrevEnabledColumn == -1)
+ // x1 -= table->OuterPaddingX;
+ //if (column->NextEnabledColumn == -1)
+ // x2 += table->OuterPaddingX;
+ x1 = ImMax(x1, table->WorkRect.Min.x);
+ x2 = ImMin(x2, table->WorkRect.Max.x);
+ return ImRect(x1, table->RowPosY1, x2, table->RowPosY2);
+}
+
+// Return the resizing ID for the right-side of the given column.
+ImGuiID ImGui::TableGetColumnResizeID(const ImGuiTable* table, int column_n, int instance_no)
+{
+ IM_ASSERT(column_n >= 0 && column_n < table->ColumnsCount);
+ ImGuiID id = table->ID + 1 + (instance_no * table->ColumnsCount) + column_n;
+ return id;
+}
+
+// Return -1 when table is not hovered. return columns_count if the unused space at the right of visible columns is hovered.
+int ImGui::TableGetHoveredColumn()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ if (!table)
+ return -1;
+ return (int)table->HoveredColumnBody;
+}
+
+void ImGui::TableSetBgColor(ImGuiTableBgTarget target, ImU32 color, int column_n)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ IM_ASSERT(target != ImGuiTableBgTarget_None);
+
+ if (color == IM_COL32_DISABLE)
+ color = 0;
+
+ // We cannot draw neither the cell or row background immediately as we don't know the row height at this point in time.
+ switch (target)
+ {
+ case ImGuiTableBgTarget_CellBg:
+ {
+ if (table->RowPosY1 > table->InnerClipRect.Max.y) // Discard
+ return;
+ if (column_n == -1)
+ column_n = table->CurrentColumn;
+ if ((table->VisibleMaskByIndex & ((ImU64)1 << column_n)) == 0)
+ return;
+ if (table->RowCellDataCurrent < 0 || table->RowCellData[table->RowCellDataCurrent].Column != column_n)
+ table->RowCellDataCurrent++;
+ ImGuiTableCellData* cell_data = &table->RowCellData[table->RowCellDataCurrent];
+ cell_data->BgColor = color;
+ cell_data->Column = (ImGuiTableColumnIdx)column_n;
+ break;
+ }
+ case ImGuiTableBgTarget_RowBg0:
+ case ImGuiTableBgTarget_RowBg1:
+ {
+ if (table->RowPosY1 > table->InnerClipRect.Max.y) // Discard
+ return;
+ IM_ASSERT(column_n == -1);
+ int bg_idx = (target == ImGuiTableBgTarget_RowBg1) ? 1 : 0;
+ table->RowBgColor[bg_idx] = color;
+ break;
+ }
+ default:
+ IM_ASSERT(0);
+ }
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Tables: Row changes
+//-------------------------------------------------------------------------
+// - TableGetRowIndex()
+// - TableNextRow()
+// - TableBeginRow() [Internal]
+// - TableEndRow() [Internal]
+//-------------------------------------------------------------------------
+
+// [Public] Note: for row coloring we use ->RowBgColorCounter which is the same value without counting header rows
+int ImGui::TableGetRowIndex()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ if (!table)
+ return 0;
+ return table->CurrentRow;
+}
+
+// [Public] Starts into the first cell of a new row
+void ImGui::TableNextRow(ImGuiTableRowFlags row_flags, float row_min_height)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+
+ if (!table->IsLayoutLocked)
+ TableUpdateLayout(table);
+ if (table->IsInsideRow)
+ TableEndRow(table);
+
+ table->LastRowFlags = table->RowFlags;
+ table->RowFlags = row_flags;
+ table->RowMinHeight = row_min_height;
+ TableBeginRow(table);
+
+ // We honor min_row_height requested by user, but cannot guarantee per-row maximum height,
+ // because that would essentially require a unique clipping rectangle per-cell.
+ table->RowPosY2 += table->CellPaddingY * 2.0f;
+ table->RowPosY2 = ImMax(table->RowPosY2, table->RowPosY1 + row_min_height);
+
+ // Disable output until user calls TableNextColumn()
+ table->InnerWindow->SkipItems = true;
+}
+
+// [Internal] Called by TableNextRow()
+void ImGui::TableBeginRow(ImGuiTable* table)
+{
+ ImGuiWindow* window = table->InnerWindow;
+ IM_ASSERT(!table->IsInsideRow);
+
+ // New row
+ table->CurrentRow++;
+ table->CurrentColumn = -1;
+ table->RowBgColor[0] = table->RowBgColor[1] = IM_COL32_DISABLE;
+ table->RowCellDataCurrent = -1;
+ table->IsInsideRow = true;
+
+ // Begin frozen rows
+ float next_y1 = table->RowPosY2;
+ if (table->CurrentRow == 0 && table->FreezeRowsCount > 0)
+ next_y1 = window->DC.CursorPos.y = table->OuterRect.Min.y;
+
+ table->RowPosY1 = table->RowPosY2 = next_y1;
+ table->RowTextBaseline = 0.0f;
+ table->RowIndentOffsetX = window->DC.Indent.x - table->HostIndentX; // Lock indent
+ window->DC.PrevLineTextBaseOffset = 0.0f;
+ window->DC.CursorMaxPos.y = next_y1;
+
+ // Making the header BG color non-transparent will allow us to overlay it multiple times when handling smooth dragging.
+ if (table->RowFlags & ImGuiTableRowFlags_Headers)
+ {
+ TableSetBgColor(ImGuiTableBgTarget_RowBg0, GetColorU32(ImGuiCol_TableHeaderBg));
+ if (table->CurrentRow == 0)
+ table->IsUsingHeaders = true;
+ }
+}
+
+// [Internal] Called by TableNextRow()
+void ImGui::TableEndRow(ImGuiTable* table)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ IM_ASSERT(window == table->InnerWindow);
+ IM_ASSERT(table->IsInsideRow);
+
+ if (table->CurrentColumn != -1)
+ TableEndCell(table);
+
+ // Logging
+ if (g.LogEnabled)
+ LogRenderedText(NULL, "|");
+
+ // Position cursor at the bottom of our row so it can be used for e.g. clipping calculation. However it is
+ // likely that the next call to TableBeginCell() will reposition the cursor to take account of vertical padding.
+ window->DC.CursorPos.y = table->RowPosY2;
+
+ // Row background fill
+ const float bg_y1 = table->RowPosY1;
+ const float bg_y2 = table->RowPosY2;
+ const bool unfreeze_rows_actual = (table->CurrentRow + 1 == table->FreezeRowsCount);
+ const bool unfreeze_rows_request = (table->CurrentRow + 1 == table->FreezeRowsRequest);
+ if (table->CurrentRow == 0)
+ TableGetInstanceData(table, table->InstanceCurrent)->LastFirstRowHeight = bg_y2 - bg_y1;
+
+ const bool is_visible = (bg_y2 >= table->InnerClipRect.Min.y && bg_y1 <= table->InnerClipRect.Max.y);
+ if (is_visible)
+ {
+ // Decide of background color for the row
+ ImU32 bg_col0 = 0;
+ ImU32 bg_col1 = 0;
+ if (table->RowBgColor[0] != IM_COL32_DISABLE)
+ bg_col0 = table->RowBgColor[0];
+ else if (table->Flags & ImGuiTableFlags_RowBg)
+ bg_col0 = GetColorU32((table->RowBgColorCounter & 1) ? ImGuiCol_TableRowBgAlt : ImGuiCol_TableRowBg);
+ if (table->RowBgColor[1] != IM_COL32_DISABLE)
+ bg_col1 = table->RowBgColor[1];
+
+ // Decide of top border color
+ ImU32 border_col = 0;
+ const float border_size = TABLE_BORDER_SIZE;
+ if (table->CurrentRow > 0 || table->InnerWindow == table->OuterWindow)
+ if (table->Flags & ImGuiTableFlags_BordersInnerH)
+ border_col = (table->LastRowFlags & ImGuiTableRowFlags_Headers) ? table->BorderColorStrong : table->BorderColorLight;
+
+ const bool draw_cell_bg_color = table->RowCellDataCurrent >= 0;
+ const bool draw_strong_bottom_border = unfreeze_rows_actual;
+ if ((bg_col0 | bg_col1 | border_col) != 0 || draw_strong_bottom_border || draw_cell_bg_color)
+ {
+ // In theory we could call SetWindowClipRectBeforeSetChannel() but since we know TableEndRow() is
+ // always followed by a change of clipping rectangle we perform the smallest overwrite possible here.
+ if ((table->Flags & ImGuiTableFlags_NoClip) == 0)
+ window->DrawList->_CmdHeader.ClipRect = table->Bg0ClipRectForDrawCmd.ToVec4();
+ table->DrawSplitter->SetCurrentChannel(window->DrawList, TABLE_DRAW_CHANNEL_BG0);
+ }
+
+ // Draw row background
+ // We soft/cpu clip this so all backgrounds and borders can share the same clipping rectangle
+ if (bg_col0 || bg_col1)
+ {
+ ImRect row_rect(table->WorkRect.Min.x, bg_y1, table->WorkRect.Max.x, bg_y2);
+ row_rect.ClipWith(table->BgClipRect);
+ if (bg_col0 != 0 && row_rect.Min.y < row_rect.Max.y)
+ window->DrawList->AddRectFilled(row_rect.Min, row_rect.Max, bg_col0);
+ if (bg_col1 != 0 && row_rect.Min.y < row_rect.Max.y)
+ window->DrawList->AddRectFilled(row_rect.Min, row_rect.Max, bg_col1);
+ }
+
+ // Draw cell background color
+ if (draw_cell_bg_color)
+ {
+ ImGuiTableCellData* cell_data_end = &table->RowCellData[table->RowCellDataCurrent];
+ for (ImGuiTableCellData* cell_data = &table->RowCellData[0]; cell_data <= cell_data_end; cell_data++)
+ {
+ // As we render the BG here we need to clip things (for layout we would not)
+ // FIXME: This cancels the OuterPadding addition done by TableGetCellBgRect(), need to keep it while rendering correctly while scrolling.
+ const ImGuiTableColumn* column = &table->Columns[cell_data->Column];
+ ImRect cell_bg_rect = TableGetCellBgRect(table, cell_data->Column);
+ cell_bg_rect.ClipWith(table->BgClipRect);
+ cell_bg_rect.Min.x = ImMax(cell_bg_rect.Min.x, column->ClipRect.Min.x); // So that first column after frozen one gets clipped when scrolling
+ cell_bg_rect.Max.x = ImMin(cell_bg_rect.Max.x, column->MaxX);
+ window->DrawList->AddRectFilled(cell_bg_rect.Min, cell_bg_rect.Max, cell_data->BgColor);
+ }
+ }
+
+ // Draw top border
+ if (border_col && bg_y1 >= table->BgClipRect.Min.y && bg_y1 < table->BgClipRect.Max.y)
+ window->DrawList->AddLine(ImVec2(table->BorderX1, bg_y1), ImVec2(table->BorderX2, bg_y1), border_col, border_size);
+
+ // Draw bottom border at the row unfreezing mark (always strong)
+ if (draw_strong_bottom_border && bg_y2 >= table->BgClipRect.Min.y && bg_y2 < table->BgClipRect.Max.y)
+ window->DrawList->AddLine(ImVec2(table->BorderX1, bg_y2), ImVec2(table->BorderX2, bg_y2), table->BorderColorStrong, border_size);
+ }
+
+ // End frozen rows (when we are past the last frozen row line, teleport cursor and alter clipping rectangle)
+ // We need to do that in TableEndRow() instead of TableBeginRow() so the list clipper can mark end of row and
+ // get the new cursor position.
+ if (unfreeze_rows_request)
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ column->NavLayerCurrent = (ImS8)((column_n < table->FreezeColumnsCount) ? ImGuiNavLayer_Menu : ImGuiNavLayer_Main);
+ }
+ if (unfreeze_rows_actual)
+ {
+ IM_ASSERT(table->IsUnfrozenRows == false);
+ table->IsUnfrozenRows = true;
+
+ // BgClipRect starts as table->InnerClipRect, reduce it now and make BgClipRectForDrawCmd == BgClipRect
+ float y0 = ImMax(table->RowPosY2 + 1, window->InnerClipRect.Min.y);
+ table->BgClipRect.Min.y = table->Bg2ClipRectForDrawCmd.Min.y = ImMin(y0, window->InnerClipRect.Max.y);
+ table->BgClipRect.Max.y = table->Bg2ClipRectForDrawCmd.Max.y = window->InnerClipRect.Max.y;
+ table->Bg2DrawChannelCurrent = table->Bg2DrawChannelUnfrozen;
+ IM_ASSERT(table->Bg2ClipRectForDrawCmd.Min.y <= table->Bg2ClipRectForDrawCmd.Max.y);
+
+ float row_height = table->RowPosY2 - table->RowPosY1;
+ table->RowPosY2 = window->DC.CursorPos.y = table->WorkRect.Min.y + table->RowPosY2 - table->OuterRect.Min.y;
+ table->RowPosY1 = table->RowPosY2 - row_height;
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ column->DrawChannelCurrent = column->DrawChannelUnfrozen;
+ column->ClipRect.Min.y = table->Bg2ClipRectForDrawCmd.Min.y;
+ }
+
+ // Update cliprect ahead of TableBeginCell() so clipper can access to new ClipRect->Min.y
+ SetWindowClipRectBeforeSetChannel(window, table->Columns[0].ClipRect);
+ table->DrawSplitter->SetCurrentChannel(window->DrawList, table->Columns[0].DrawChannelCurrent);
+ }
+
+ if (!(table->RowFlags & ImGuiTableRowFlags_Headers))
+ table->RowBgColorCounter++;
+ table->IsInsideRow = false;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Tables: Columns changes
+//-------------------------------------------------------------------------
+// - TableGetColumnIndex()
+// - TableSetColumnIndex()
+// - TableNextColumn()
+// - TableBeginCell() [Internal]
+// - TableEndCell() [Internal]
+//-------------------------------------------------------------------------
+
+int ImGui::TableGetColumnIndex()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ if (!table)
+ return 0;
+ return table->CurrentColumn;
+}
+
+// [Public] Append into a specific column
+bool ImGui::TableSetColumnIndex(int column_n)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ if (!table)
+ return false;
+
+ if (table->CurrentColumn != column_n)
+ {
+ if (table->CurrentColumn != -1)
+ TableEndCell(table);
+ IM_ASSERT(column_n >= 0 && table->ColumnsCount);
+ TableBeginCell(table, column_n);
+ }
+
+ // Return whether the column is visible. User may choose to skip submitting items based on this return value,
+ // however they shouldn't skip submitting for columns that may have the tallest contribution to row height.
+ return (table->RequestOutputMaskByIndex & ((ImU64)1 << column_n)) != 0;
+}
+
+// [Public] Append into the next column, wrap and create a new row when already on last column
+bool ImGui::TableNextColumn()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ if (!table)
+ return false;
+
+ if (table->IsInsideRow && table->CurrentColumn + 1 < table->ColumnsCount)
+ {
+ if (table->CurrentColumn != -1)
+ TableEndCell(table);
+ TableBeginCell(table, table->CurrentColumn + 1);
+ }
+ else
+ {
+ TableNextRow();
+ TableBeginCell(table, 0);
+ }
+
+ // Return whether the column is visible. User may choose to skip submitting items based on this return value,
+ // however they shouldn't skip submitting for columns that may have the tallest contribution to row height.
+ int column_n = table->CurrentColumn;
+ return (table->RequestOutputMaskByIndex & ((ImU64)1 << column_n)) != 0;
+}
+
+
+// [Internal] Called by TableSetColumnIndex()/TableNextColumn()
+// This is called very frequently, so we need to be mindful of unnecessary overhead.
+// FIXME-TABLE FIXME-OPT: Could probably shortcut some things for non-active or clipped columns.
+void ImGui::TableBeginCell(ImGuiTable* table, int column_n)
+{
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ ImGuiWindow* window = table->InnerWindow;
+ table->CurrentColumn = column_n;
+
+ // Start position is roughly ~~ CellRect.Min + CellPadding + Indent
+ float start_x = column->WorkMinX;
+ if (column->Flags & ImGuiTableColumnFlags_IndentEnable)
+ start_x += table->RowIndentOffsetX; // ~~ += window.DC.Indent.x - table->HostIndentX, except we locked it for the row.
+
+ window->DC.CursorPos.x = start_x;
+ window->DC.CursorPos.y = table->RowPosY1 + table->CellPaddingY;
+ window->DC.CursorMaxPos.x = window->DC.CursorPos.x;
+ window->DC.ColumnsOffset.x = start_x - window->Pos.x - window->DC.Indent.x; // FIXME-WORKRECT
+ window->DC.CurrLineTextBaseOffset = table->RowTextBaseline;
+ window->DC.NavLayerCurrent = (ImGuiNavLayer)column->NavLayerCurrent;
+
+ window->WorkRect.Min.y = window->DC.CursorPos.y;
+ window->WorkRect.Min.x = column->WorkMinX;
+ window->WorkRect.Max.x = column->WorkMaxX;
+ window->DC.ItemWidth = column->ItemWidth;
+
+ // To allow ImGuiListClipper to function we propagate our row height
+ if (!column->IsEnabled)
+ window->DC.CursorPos.y = ImMax(window->DC.CursorPos.y, table->RowPosY2);
+
+ window->SkipItems = column->IsSkipItems;
+ if (column->IsSkipItems)
+ {
+ ImGuiContext& g = *GImGui;
+ g.LastItemData.ID = 0;
+ g.LastItemData.StatusFlags = 0;
+ }
+
+ if (table->Flags & ImGuiTableFlags_NoClip)
+ {
+ // FIXME: if we end up drawing all borders/bg in EndTable, could remove this and just assert that channel hasn't changed.
+ table->DrawSplitter->SetCurrentChannel(window->DrawList, TABLE_DRAW_CHANNEL_NOCLIP);
+ //IM_ASSERT(table->DrawSplitter._Current == TABLE_DRAW_CHANNEL_NOCLIP);
+ }
+ else
+ {
+ // FIXME-TABLE: Could avoid this if draw channel is dummy channel?
+ SetWindowClipRectBeforeSetChannel(window, column->ClipRect);
+ table->DrawSplitter->SetCurrentChannel(window->DrawList, column->DrawChannelCurrent);
+ }
+
+ // Logging
+ ImGuiContext& g = *GImGui;
+ if (g.LogEnabled && !column->IsSkipItems)
+ {
+ LogRenderedText(&window->DC.CursorPos, "|");
+ g.LogLinePosY = FLT_MAX;
+ }
+}
+
+// [Internal] Called by TableNextRow()/TableSetColumnIndex()/TableNextColumn()
+void ImGui::TableEndCell(ImGuiTable* table)
+{
+ ImGuiTableColumn* column = &table->Columns[table->CurrentColumn];
+ ImGuiWindow* window = table->InnerWindow;
+
+ // Report maximum position so we can infer content size per column.
+ float* p_max_pos_x;
+ if (table->RowFlags & ImGuiTableRowFlags_Headers)
+ p_max_pos_x = &column->ContentMaxXHeadersUsed; // Useful in case user submit contents in header row that is not a TableHeader() call
+ else
+ p_max_pos_x = table->IsUnfrozenRows ? &column->ContentMaxXUnfrozen : &column->ContentMaxXFrozen;
+ *p_max_pos_x = ImMax(*p_max_pos_x, window->DC.CursorMaxPos.x);
+ table->RowPosY2 = ImMax(table->RowPosY2, window->DC.CursorMaxPos.y + table->CellPaddingY);
+ column->ItemWidth = window->DC.ItemWidth;
+
+ // Propagate text baseline for the entire row
+ // FIXME-TABLE: Here we propagate text baseline from the last line of the cell.. instead of the first one.
+ table->RowTextBaseline = ImMax(table->RowTextBaseline, window->DC.PrevLineTextBaseOffset);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Tables: Columns width management
+//-------------------------------------------------------------------------
+// - TableGetMaxColumnWidth() [Internal]
+// - TableGetColumnWidthAuto() [Internal]
+// - TableSetColumnWidth()
+// - TableSetColumnWidthAutoSingle() [Internal]
+// - TableSetColumnWidthAutoAll() [Internal]
+// - TableUpdateColumnsWeightFromWidth() [Internal]
+//-------------------------------------------------------------------------
+
+// Maximum column content width given current layout. Use column->MinX so this value on a per-column basis.
+float ImGui::TableGetMaxColumnWidth(const ImGuiTable* table, int column_n)
+{
+ const ImGuiTableColumn* column = &table->Columns[column_n];
+ float max_width = FLT_MAX;
+ const float min_column_distance = table->MinColumnWidth + table->CellPaddingX * 2.0f + table->CellSpacingX1 + table->CellSpacingX2;
+ if (table->Flags & ImGuiTableFlags_ScrollX)
+ {
+ // Frozen columns can't reach beyond visible width else scrolling will naturally break.
+ // (we use DisplayOrder as within a set of multiple frozen column reordering is possible)
+ if (column->DisplayOrder < table->FreezeColumnsRequest)
+ {
+ max_width = (table->InnerClipRect.Max.x - (table->FreezeColumnsRequest - column->DisplayOrder) * min_column_distance) - column->MinX;
+ max_width = max_width - table->OuterPaddingX - table->CellPaddingX - table->CellSpacingX2;
+ }
+ }
+ else if ((table->Flags & ImGuiTableFlags_NoKeepColumnsVisible) == 0)
+ {
+ // If horizontal scrolling if disabled, we apply a final lossless shrinking of columns in order to make
+ // sure they are all visible. Because of this we also know that all of the columns will always fit in
+ // table->WorkRect and therefore in table->InnerRect (because ScrollX is off)
+ // FIXME-TABLE: This is solved incorrectly but also quite a difficult problem to fix as we also want ClipRect width to match.
+ // See "table_width_distrib" and "table_width_keep_visible" tests
+ max_width = table->WorkRect.Max.x - (table->ColumnsEnabledCount - column->IndexWithinEnabledSet - 1) * min_column_distance - column->MinX;
+ //max_width -= table->CellSpacingX1;
+ max_width -= table->CellSpacingX2;
+ max_width -= table->CellPaddingX * 2.0f;
+ max_width -= table->OuterPaddingX;
+ }
+ return max_width;
+}
+
+// Note this is meant to be stored in column->WidthAuto, please generally use the WidthAuto field
+float ImGui::TableGetColumnWidthAuto(ImGuiTable* table, ImGuiTableColumn* column)
+{
+ const float content_width_body = ImMax(column->ContentMaxXFrozen, column->ContentMaxXUnfrozen) - column->WorkMinX;
+ const float content_width_headers = column->ContentMaxXHeadersIdeal - column->WorkMinX;
+ float width_auto = content_width_body;
+ if (!(column->Flags & ImGuiTableColumnFlags_NoHeaderWidth))
+ width_auto = ImMax(width_auto, content_width_headers);
+
+ // Non-resizable fixed columns preserve their requested width
+ if ((column->Flags & ImGuiTableColumnFlags_WidthFixed) && column->InitStretchWeightOrWidth > 0.0f)
+ if (!(table->Flags & ImGuiTableFlags_Resizable) || (column->Flags & ImGuiTableColumnFlags_NoResize))
+ width_auto = column->InitStretchWeightOrWidth;
+
+ return ImMax(width_auto, table->MinColumnWidth);
+}
+
+// 'width' = inner column width, without padding
+void ImGui::TableSetColumnWidth(int column_n, float width)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ IM_ASSERT(table != NULL && table->IsLayoutLocked == false);
+ IM_ASSERT(column_n >= 0 && column_n < table->ColumnsCount);
+ ImGuiTableColumn* column_0 = &table->Columns[column_n];
+ float column_0_width = width;
+
+ // Apply constraints early
+ // Compare both requested and actual given width to avoid overwriting requested width when column is stuck (minimum size, bounded)
+ IM_ASSERT(table->MinColumnWidth > 0.0f);
+ const float min_width = table->MinColumnWidth;
+ const float max_width = ImMax(min_width, TableGetMaxColumnWidth(table, column_n));
+ column_0_width = ImClamp(column_0_width, min_width, max_width);
+ if (column_0->WidthGiven == column_0_width || column_0->WidthRequest == column_0_width)
+ return;
+
+ //IMGUI_DEBUG_PRINT("TableSetColumnWidth(%d, %.1f->%.1f)\n", column_0_idx, column_0->WidthGiven, column_0_width);
+ ImGuiTableColumn* column_1 = (column_0->NextEnabledColumn != -1) ? &table->Columns[column_0->NextEnabledColumn] : NULL;
+
+ // In this surprisingly not simple because of how we support mixing Fixed and multiple Stretch columns.
+ // - All fixed: easy.
+ // - All stretch: easy.
+ // - One or more fixed + one stretch: easy.
+ // - One or more fixed + more than one stretch: tricky.
+ // Qt when manual resize is enabled only support a single _trailing_ stretch column.
+
+ // When forwarding resize from Wn| to Fn+1| we need to be considerate of the _NoResize flag on Fn+1.
+ // FIXME-TABLE: Find a way to rewrite all of this so interactions feel more consistent for the user.
+ // Scenarios:
+ // - F1 F2 F3 resize from F1| or F2| --> ok: alter ->WidthRequested of Fixed column. Subsequent columns will be offset.
+ // - F1 F2 F3 resize from F3| --> ok: alter ->WidthRequested of Fixed column. If active, ScrollX extent can be altered.
+ // - F1 F2 W3 resize from F1| or F2| --> ok: alter ->WidthRequested of Fixed column. If active, ScrollX extent can be altered, but it doesn't make much sense as the Stretch column will always be minimal size.
+ // - F1 F2 W3 resize from W3| --> ok: no-op (disabled by Resize Rule 1)
+ // - W1 W2 W3 resize from W1| or W2| --> ok
+ // - W1 W2 W3 resize from W3| --> ok: no-op (disabled by Resize Rule 1)
+ // - W1 F2 F3 resize from F3| --> ok: no-op (disabled by Resize Rule 1)
+ // - W1 F2 resize from F2| --> ok: no-op (disabled by Resize Rule 1)
+ // - W1 W2 F3 resize from W1| or W2| --> ok
+ // - W1 F2 W3 resize from W1| or F2| --> ok
+ // - F1 W2 F3 resize from W2| --> ok
+ // - F1 W3 F2 resize from W3| --> ok
+ // - W1 F2 F3 resize from W1| --> ok: equivalent to resizing |F2. F3 will not move.
+ // - W1 F2 F3 resize from F2| --> ok
+ // All resizes from a Wx columns are locking other columns.
+
+ // Possible improvements:
+ // - W1 W2 W3 resize W1| --> to not be stuck, both W2 and W3 would stretch down. Seems possible to fix. Would be most beneficial to simplify resize of all-weighted columns.
+ // - W3 F1 F2 resize W3| --> to not be stuck past F1|, both F1 and F2 would need to stretch down, which would be lossy or ambiguous. Seems hard to fix.
+
+ // [Resize Rule 1] Can't resize from right of right-most visible column if there is any Stretch column. Implemented in TableUpdateLayout().
+
+ // If we have all Fixed columns OR resizing a Fixed column that doesn't come after a Stretch one, we can do an offsetting resize.
+ // This is the preferred resize path
+ if (column_0->Flags & ImGuiTableColumnFlags_WidthFixed)
+ if (!column_1 || table->LeftMostStretchedColumn == -1 || table->Columns[table->LeftMostStretchedColumn].DisplayOrder >= column_0->DisplayOrder)
+ {
+ column_0->WidthRequest = column_0_width;
+ table->IsSettingsDirty = true;
+ return;
+ }
+
+ // We can also use previous column if there's no next one (this is used when doing an auto-fit on the right-most stretch column)
+ if (column_1 == NULL)
+ column_1 = (column_0->PrevEnabledColumn != -1) ? &table->Columns[column_0->PrevEnabledColumn] : NULL;
+ if (column_1 == NULL)
+ return;
+
+ // Resizing from right-side of a Stretch column before a Fixed column forward sizing to left-side of fixed column.
+ // (old_a + old_b == new_a + new_b) --> (new_a == old_a + old_b - new_b)
+ float column_1_width = ImMax(column_1->WidthRequest - (column_0_width - column_0->WidthRequest), min_width);
+ column_0_width = column_0->WidthRequest + column_1->WidthRequest - column_1_width;
+ IM_ASSERT(column_0_width > 0.0f && column_1_width > 0.0f);
+ column_0->WidthRequest = column_0_width;
+ column_1->WidthRequest = column_1_width;
+ if ((column_0->Flags | column_1->Flags) & ImGuiTableColumnFlags_WidthStretch)
+ TableUpdateColumnsWeightFromWidth(table);
+ table->IsSettingsDirty = true;
+}
+
+// Disable clipping then auto-fit, will take 2 frames
+// (we don't take a shortcut for unclipped columns to reduce inconsistencies when e.g. resizing multiple columns)
+void ImGui::TableSetColumnWidthAutoSingle(ImGuiTable* table, int column_n)
+{
+ // Single auto width uses auto-fit
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ if (!column->IsEnabled)
+ return;
+ column->CannotSkipItemsQueue = (1 << 0);
+ table->AutoFitSingleColumn = (ImGuiTableColumnIdx)column_n;
+}
+
+void ImGui::TableSetColumnWidthAutoAll(ImGuiTable* table)
+{
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ if (!column->IsEnabled && !(column->Flags & ImGuiTableColumnFlags_WidthStretch)) // Cannot reset weight of hidden stretch column
+ continue;
+ column->CannotSkipItemsQueue = (1 << 0);
+ column->AutoFitQueue = (1 << 1);
+ }
+}
+
+void ImGui::TableUpdateColumnsWeightFromWidth(ImGuiTable* table)
+{
+ IM_ASSERT(table->LeftMostStretchedColumn != -1 && table->RightMostStretchedColumn != -1);
+
+ // Measure existing quantity
+ float visible_weight = 0.0f;
+ float visible_width = 0.0f;
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ if (!column->IsEnabled || !(column->Flags & ImGuiTableColumnFlags_WidthStretch))
+ continue;
+ IM_ASSERT(column->StretchWeight > 0.0f);
+ visible_weight += column->StretchWeight;
+ visible_width += column->WidthRequest;
+ }
+ IM_ASSERT(visible_weight > 0.0f && visible_width > 0.0f);
+
+ // Apply new weights
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ if (!column->IsEnabled || !(column->Flags & ImGuiTableColumnFlags_WidthStretch))
+ continue;
+ column->StretchWeight = (column->WidthRequest / visible_width) * visible_weight;
+ IM_ASSERT(column->StretchWeight > 0.0f);
+ }
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Tables: Drawing
+//-------------------------------------------------------------------------
+// - TablePushBackgroundChannel() [Internal]
+// - TablePopBackgroundChannel() [Internal]
+// - TableSetupDrawChannels() [Internal]
+// - TableMergeDrawChannels() [Internal]
+// - TableDrawBorders() [Internal]
+//-------------------------------------------------------------------------
+
+// Bg2 is used by Selectable (and possibly other widgets) to render to the background.
+// Unlike our Bg0/1 channel which we uses for RowBg/CellBg/Borders and where we guarantee all shapes to be CPU-clipped, the Bg2 channel being widgets-facing will rely on regular ClipRect.
+void ImGui::TablePushBackgroundChannel()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiTable* table = g.CurrentTable;
+
+ // Optimization: avoid SetCurrentChannel() + PushClipRect()
+ table->HostBackupInnerClipRect = window->ClipRect;
+ SetWindowClipRectBeforeSetChannel(window, table->Bg2ClipRectForDrawCmd);
+ table->DrawSplitter->SetCurrentChannel(window->DrawList, table->Bg2DrawChannelCurrent);
+}
+
+void ImGui::TablePopBackgroundChannel()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiTable* table = g.CurrentTable;
+ ImGuiTableColumn* column = &table->Columns[table->CurrentColumn];
+
+ // Optimization: avoid PopClipRect() + SetCurrentChannel()
+ SetWindowClipRectBeforeSetChannel(window, table->HostBackupInnerClipRect);
+ table->DrawSplitter->SetCurrentChannel(window->DrawList, column->DrawChannelCurrent);
+}
+
+// Allocate draw channels. Called by TableUpdateLayout()
+// - We allocate them following storage order instead of display order so reordering columns won't needlessly
+// increase overall dormant memory cost.
+// - We isolate headers draw commands in their own channels instead of just altering clip rects.
+// This is in order to facilitate merging of draw commands.
+// - After crossing FreezeRowsCount, all columns see their current draw channel changed to a second set of channels.
+// - We only use the dummy draw channel so we can push a null clipping rectangle into it without affecting other
+// channels, while simplifying per-row/per-cell overhead. It will be empty and discarded when merged.
+// - We allocate 1 or 2 background draw channels. This is because we know TablePushBackgroundChannel() is only used for
+// horizontal spanning. If we allowed vertical spanning we'd need one background draw channel per merge group (1-4).
+// Draw channel allocation (before merging):
+// - NoClip --> 2+D+1 channels: bg0/1 + bg2 + foreground (same clip rect == always 1 draw call)
+// - Clip --> 2+D+N channels
+// - FreezeRows --> 2+D+N*2 (unless scrolling value is zero)
+// - FreezeRows || FreezeColunns --> 3+D+N*2 (unless scrolling value is zero)
+// Where D is 1 if any column is clipped or hidden (dummy channel) otherwise 0.
+void ImGui::TableSetupDrawChannels(ImGuiTable* table)
+{
+ const int freeze_row_multiplier = (table->FreezeRowsCount > 0) ? 2 : 1;
+ const int channels_for_row = (table->Flags & ImGuiTableFlags_NoClip) ? 1 : table->ColumnsEnabledCount;
+ const int channels_for_bg = 1 + 1 * freeze_row_multiplier;
+ const int channels_for_dummy = (table->ColumnsEnabledCount < table->ColumnsCount || table->VisibleMaskByIndex != table->EnabledMaskByIndex) ? +1 : 0;
+ const int channels_total = channels_for_bg + (channels_for_row * freeze_row_multiplier) + channels_for_dummy;
+ table->DrawSplitter->Split(table->InnerWindow->DrawList, channels_total);
+ table->DummyDrawChannel = (ImGuiTableDrawChannelIdx)((channels_for_dummy > 0) ? channels_total - 1 : -1);
+ table->Bg2DrawChannelCurrent = TABLE_DRAW_CHANNEL_BG2_FROZEN;
+ table->Bg2DrawChannelUnfrozen = (ImGuiTableDrawChannelIdx)((table->FreezeRowsCount > 0) ? 2 + channels_for_row : TABLE_DRAW_CHANNEL_BG2_FROZEN);
+
+ int draw_channel_current = 2;
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ if (column->IsVisibleX && column->IsVisibleY)
+ {
+ column->DrawChannelFrozen = (ImGuiTableDrawChannelIdx)(draw_channel_current);
+ column->DrawChannelUnfrozen = (ImGuiTableDrawChannelIdx)(draw_channel_current + (table->FreezeRowsCount > 0 ? channels_for_row + 1 : 0));
+ if (!(table->Flags & ImGuiTableFlags_NoClip))
+ draw_channel_current++;
+ }
+ else
+ {
+ column->DrawChannelFrozen = column->DrawChannelUnfrozen = table->DummyDrawChannel;
+ }
+ column->DrawChannelCurrent = column->DrawChannelFrozen;
+ }
+
+ // Initial draw cmd starts with a BgClipRect that matches the one of its host, to facilitate merge draw commands by default.
+ // All our cell highlight are manually clipped with BgClipRect. When unfreezing it will be made smaller to fit scrolling rect.
+ // (This technically isn't part of setting up draw channels, but is reasonably related to be done here)
+ table->BgClipRect = table->InnerClipRect;
+ table->Bg0ClipRectForDrawCmd = table->OuterWindow->ClipRect;
+ table->Bg2ClipRectForDrawCmd = table->HostClipRect;
+ IM_ASSERT(table->BgClipRect.Min.y <= table->BgClipRect.Max.y);
+}
+
+// This function reorder draw channels based on matching clip rectangle, to facilitate merging them. Called by EndTable().
+// For simplicity we call it TableMergeDrawChannels() but in fact it only reorder channels + overwrite ClipRect,
+// actual merging is done by table->DrawSplitter.Merge() which is called right after TableMergeDrawChannels().
+//
+// Columns where the contents didn't stray off their local clip rectangle can be merged. To achieve
+// this we merge their clip rect and make them contiguous in the channel list, so they can be merged
+// by the call to DrawSplitter.Merge() following to the call to this function.
+// We reorder draw commands by arranging them into a maximum of 4 distinct groups:
+//
+// 1 group: 2 groups: 2 groups: 4 groups:
+// [ 0. ] no freeze [ 0. ] row freeze [ 01 ] col freeze [ 01 ] row+col freeze
+// [ .. ] or no scroll [ 2. ] and v-scroll [ .. ] and h-scroll [ 23 ] and v+h-scroll
+//
+// Each column itself can use 1 channel (row freeze disabled) or 2 channels (row freeze enabled).
+// When the contents of a column didn't stray off its limit, we move its channels into the corresponding group
+// based on its position (within frozen rows/columns groups or not).
+// At the end of the operation our 1-4 groups will each have a ImDrawCmd using the same ClipRect.
+// This function assume that each column are pointing to a distinct draw channel,
+// otherwise merge_group->ChannelsCount will not match set bit count of merge_group->ChannelsMask.
+//
+// Column channels will not be merged into one of the 1-4 groups in the following cases:
+// - The contents stray off its clipping rectangle (we only compare the MaxX value, not the MinX value).
+// Direct ImDrawList calls won't be taken into account by default, if you use them make sure the ImGui:: bounds
+// matches, by e.g. calling SetCursorScreenPos().
+// - The channel uses more than one draw command itself. We drop all our attempt at merging stuff here..
+// we could do better but it's going to be rare and probably not worth the hassle.
+// Columns for which the draw channel(s) haven't been merged with other will use their own ImDrawCmd.
+//
+// This function is particularly tricky to understand.. take a breath.
+void ImGui::TableMergeDrawChannels(ImGuiTable* table)
+{
+ ImGuiContext& g = *GImGui;
+ ImDrawListSplitter* splitter = table->DrawSplitter;
+ const bool has_freeze_v = (table->FreezeRowsCount > 0);
+ const bool has_freeze_h = (table->FreezeColumnsCount > 0);
+ IM_ASSERT(splitter->_Current == 0);
+
+ // Track which groups we are going to attempt to merge, and which channels goes into each group.
+ struct MergeGroup
+ {
+ ImRect ClipRect;
+ int ChannelsCount;
+ ImBitArray<IMGUI_TABLE_MAX_DRAW_CHANNELS> ChannelsMask;
+
+ MergeGroup() { ChannelsCount = 0; }
+ };
+ int merge_group_mask = 0x00;
+ MergeGroup merge_groups[4];
+
+ // 1. Scan channels and take note of those which can be merged
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ if ((table->VisibleMaskByIndex & ((ImU64)1 << column_n)) == 0)
+ continue;
+ ImGuiTableColumn* column = &table->Columns[column_n];
+
+ const int merge_group_sub_count = has_freeze_v ? 2 : 1;
+ for (int merge_group_sub_n = 0; merge_group_sub_n < merge_group_sub_count; merge_group_sub_n++)
+ {
+ const int channel_no = (merge_group_sub_n == 0) ? column->DrawChannelFrozen : column->DrawChannelUnfrozen;
+
+ // Don't attempt to merge if there are multiple draw calls within the column
+ ImDrawChannel* src_channel = &splitter->_Channels[channel_no];
+ if (src_channel->_CmdBuffer.Size > 0 && src_channel->_CmdBuffer.back().ElemCount == 0 && src_channel->_CmdBuffer.back().UserCallback == NULL) // Equivalent of PopUnusedDrawCmd()
+ src_channel->_CmdBuffer.pop_back();
+ if (src_channel->_CmdBuffer.Size != 1)
+ continue;
+
+ // Find out the width of this merge group and check if it will fit in our column
+ // (note that we assume that rendering didn't stray on the left direction. we should need a CursorMinPos to detect it)
+ if (!(column->Flags & ImGuiTableColumnFlags_NoClip))
+ {
+ float content_max_x;
+ if (!has_freeze_v)
+ content_max_x = ImMax(column->ContentMaxXUnfrozen, column->ContentMaxXHeadersUsed); // No row freeze
+ else if (merge_group_sub_n == 0)
+ content_max_x = ImMax(column->ContentMaxXFrozen, column->ContentMaxXHeadersUsed); // Row freeze: use width before freeze
+ else
+ content_max_x = column->ContentMaxXUnfrozen; // Row freeze: use width after freeze
+ if (content_max_x > column->ClipRect.Max.x)
+ continue;
+ }
+
+ const int merge_group_n = (has_freeze_h && column_n < table->FreezeColumnsCount ? 0 : 1) + (has_freeze_v && merge_group_sub_n == 0 ? 0 : 2);
+ IM_ASSERT(channel_no < IMGUI_TABLE_MAX_DRAW_CHANNELS);
+ MergeGroup* merge_group = &merge_groups[merge_group_n];
+ if (merge_group->ChannelsCount == 0)
+ merge_group->ClipRect = ImRect(+FLT_MAX, +FLT_MAX, -FLT_MAX, -FLT_MAX);
+ merge_group->ChannelsMask.SetBit(channel_no);
+ merge_group->ChannelsCount++;
+ merge_group->ClipRect.Add(src_channel->_CmdBuffer[0].ClipRect);
+ merge_group_mask |= (1 << merge_group_n);
+ }
+
+ // Invalidate current draw channel
+ // (we don't clear DrawChannelFrozen/DrawChannelUnfrozen solely to facilitate debugging/later inspection of data)
+ column->DrawChannelCurrent = (ImGuiTableDrawChannelIdx)-1;
+ }
+
+ // [DEBUG] Display merge groups
+#if 0
+ if (g.IO.KeyShift)
+ for (int merge_group_n = 0; merge_group_n < IM_ARRAYSIZE(merge_groups); merge_group_n++)
+ {
+ MergeGroup* merge_group = &merge_groups[merge_group_n];
+ if (merge_group->ChannelsCount == 0)
+ continue;
+ char buf[32];
+ ImFormatString(buf, 32, "MG%d:%d", merge_group_n, merge_group->ChannelsCount);
+ ImVec2 text_pos = merge_group->ClipRect.Min + ImVec2(4, 4);
+ ImVec2 text_size = CalcTextSize(buf, NULL);
+ GetForegroundDrawList()->AddRectFilled(text_pos, text_pos + text_size, IM_COL32(0, 0, 0, 255));
+ GetForegroundDrawList()->AddText(text_pos, IM_COL32(255, 255, 0, 255), buf, NULL);
+ GetForegroundDrawList()->AddRect(merge_group->ClipRect.Min, merge_group->ClipRect.Max, IM_COL32(255, 255, 0, 255));
+ }
+#endif
+
+ // 2. Rewrite channel list in our preferred order
+ if (merge_group_mask != 0)
+ {
+ // We skip channel 0 (Bg0/Bg1) and 1 (Bg2 frozen) from the shuffling since they won't move - see channels allocation in TableSetupDrawChannels().
+ const int LEADING_DRAW_CHANNELS = 2;
+ g.DrawChannelsTempMergeBuffer.resize(splitter->_Count - LEADING_DRAW_CHANNELS); // Use shared temporary storage so the allocation gets amortized
+ ImDrawChannel* dst_tmp = g.DrawChannelsTempMergeBuffer.Data;
+ ImBitArray<IMGUI_TABLE_MAX_DRAW_CHANNELS> remaining_mask; // We need 132-bit of storage
+ remaining_mask.SetBitRange(LEADING_DRAW_CHANNELS, splitter->_Count);
+ remaining_mask.ClearBit(table->Bg2DrawChannelUnfrozen);
+ IM_ASSERT(has_freeze_v == false || table->Bg2DrawChannelUnfrozen != TABLE_DRAW_CHANNEL_BG2_FROZEN);
+ int remaining_count = splitter->_Count - (has_freeze_v ? LEADING_DRAW_CHANNELS + 1 : LEADING_DRAW_CHANNELS);
+ //ImRect host_rect = (table->InnerWindow == table->OuterWindow) ? table->InnerClipRect : table->HostClipRect;
+ ImRect host_rect = table->HostClipRect;
+ for (int merge_group_n = 0; merge_group_n < IM_ARRAYSIZE(merge_groups); merge_group_n++)
+ {
+ if (int merge_channels_count = merge_groups[merge_group_n].ChannelsCount)
+ {
+ MergeGroup* merge_group = &merge_groups[merge_group_n];
+ ImRect merge_clip_rect = merge_group->ClipRect;
+
+ // Extend outer-most clip limits to match those of host, so draw calls can be merged even if
+ // outer-most columns have some outer padding offsetting them from their parent ClipRect.
+ // The principal cases this is dealing with are:
+ // - On a same-window table (not scrolling = single group), all fitting columns ClipRect -> will extend and match host ClipRect -> will merge
+ // - Columns can use padding and have left-most ClipRect.Min.x and right-most ClipRect.Max.x != from host ClipRect -> will extend and match host ClipRect -> will merge
+ // FIXME-TABLE FIXME-WORKRECT: We are wasting a merge opportunity on tables without scrolling if column doesn't fit
+ // within host clip rect, solely because of the half-padding difference between window->WorkRect and window->InnerClipRect.
+ if ((merge_group_n & 1) == 0 || !has_freeze_h)
+ merge_clip_rect.Min.x = ImMin(merge_clip_rect.Min.x, host_rect.Min.x);
+ if ((merge_group_n & 2) == 0 || !has_freeze_v)
+ merge_clip_rect.Min.y = ImMin(merge_clip_rect.Min.y, host_rect.Min.y);
+ if ((merge_group_n & 1) != 0)
+ merge_clip_rect.Max.x = ImMax(merge_clip_rect.Max.x, host_rect.Max.x);
+ if ((merge_group_n & 2) != 0 && (table->Flags & ImGuiTableFlags_NoHostExtendY) == 0)
+ merge_clip_rect.Max.y = ImMax(merge_clip_rect.Max.y, host_rect.Max.y);
+#if 0
+ GetOverlayDrawList()->AddRect(merge_group->ClipRect.Min, merge_group->ClipRect.Max, IM_COL32(255, 0, 0, 200), 0.0f, 0, 1.0f);
+ GetOverlayDrawList()->AddLine(merge_group->ClipRect.Min, merge_clip_rect.Min, IM_COL32(255, 100, 0, 200));
+ GetOverlayDrawList()->AddLine(merge_group->ClipRect.Max, merge_clip_rect.Max, IM_COL32(255, 100, 0, 200));
+#endif
+ remaining_count -= merge_group->ChannelsCount;
+ for (int n = 0; n < IM_ARRAYSIZE(remaining_mask.Storage); n++)
+ remaining_mask.Storage[n] &= ~merge_group->ChannelsMask.Storage[n];
+ for (int n = 0; n < splitter->_Count && merge_channels_count != 0; n++)
+ {
+ // Copy + overwrite new clip rect
+ if (!merge_group->ChannelsMask.TestBit(n))
+ continue;
+ merge_group->ChannelsMask.ClearBit(n);
+ merge_channels_count--;
+
+ ImDrawChannel* channel = &splitter->_Channels[n];
+ IM_ASSERT(channel->_CmdBuffer.Size == 1 && merge_clip_rect.Contains(ImRect(channel->_CmdBuffer[0].ClipRect)));
+ channel->_CmdBuffer[0].ClipRect = merge_clip_rect.ToVec4();
+ memcpy(dst_tmp++, channel, sizeof(ImDrawChannel));
+ }
+ }
+
+ // Make sure Bg2DrawChannelUnfrozen appears in the middle of our groups (whereas Bg0/Bg1 and Bg2 frozen are fixed to 0 and 1)
+ if (merge_group_n == 1 && has_freeze_v)
+ memcpy(dst_tmp++, &splitter->_Channels[table->Bg2DrawChannelUnfrozen], sizeof(ImDrawChannel));
+ }
+
+ // Append unmergeable channels that we didn't reorder at the end of the list
+ for (int n = 0; n < splitter->_Count && remaining_count != 0; n++)
+ {
+ if (!remaining_mask.TestBit(n))
+ continue;
+ ImDrawChannel* channel = &splitter->_Channels[n];
+ memcpy(dst_tmp++, channel, sizeof(ImDrawChannel));
+ remaining_count--;
+ }
+ IM_ASSERT(dst_tmp == g.DrawChannelsTempMergeBuffer.Data + g.DrawChannelsTempMergeBuffer.Size);
+ memcpy(splitter->_Channels.Data + LEADING_DRAW_CHANNELS, g.DrawChannelsTempMergeBuffer.Data, (splitter->_Count - LEADING_DRAW_CHANNELS) * sizeof(ImDrawChannel));
+ }
+}
+
+// FIXME-TABLE: This is a mess, need to redesign how we render borders (as some are also done in TableEndRow)
+void ImGui::TableDrawBorders(ImGuiTable* table)
+{
+ ImGuiWindow* inner_window = table->InnerWindow;
+ if (!table->OuterWindow->ClipRect.Overlaps(table->OuterRect))
+ return;
+
+ ImDrawList* inner_drawlist = inner_window->DrawList;
+ table->DrawSplitter->SetCurrentChannel(inner_drawlist, TABLE_DRAW_CHANNEL_BG0);
+ inner_drawlist->PushClipRect(table->Bg0ClipRectForDrawCmd.Min, table->Bg0ClipRectForDrawCmd.Max, false);
+
+ // Draw inner border and resizing feedback
+ ImGuiTableInstanceData* table_instance = TableGetInstanceData(table, table->InstanceCurrent);
+ const float border_size = TABLE_BORDER_SIZE;
+ const float draw_y1 = table->InnerRect.Min.y;
+ const float draw_y2_body = table->InnerRect.Max.y;
+ const float draw_y2_head = table->IsUsingHeaders ? ImMin(table->InnerRect.Max.y, (table->FreezeRowsCount >= 1 ? table->InnerRect.Min.y : table->WorkRect.Min.y) + table_instance->LastFirstRowHeight) : draw_y1;
+ if (table->Flags & ImGuiTableFlags_BordersInnerV)
+ {
+ for (int order_n = 0; order_n < table->ColumnsCount; order_n++)
+ {
+ if (!(table->EnabledMaskByDisplayOrder & ((ImU64)1 << order_n)))
+ continue;
+
+ const int column_n = table->DisplayOrderToIndex[order_n];
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ const bool is_hovered = (table->HoveredColumnBorder == column_n);
+ const bool is_resized = (table->ResizedColumn == column_n) && (table->InstanceInteracted == table->InstanceCurrent);
+ const bool is_resizable = (column->Flags & (ImGuiTableColumnFlags_NoResize | ImGuiTableColumnFlags_NoDirectResize_)) == 0;
+ const bool is_frozen_separator = (table->FreezeColumnsCount == order_n + 1);
+ if (column->MaxX > table->InnerClipRect.Max.x && !is_resized)
+ continue;
+
+ // Decide whether right-most column is visible
+ if (column->NextEnabledColumn == -1 && !is_resizable)
+ if ((table->Flags & ImGuiTableFlags_SizingMask_) != ImGuiTableFlags_SizingFixedSame || (table->Flags & ImGuiTableFlags_NoHostExtendX))
+ continue;
+ if (column->MaxX <= column->ClipRect.Min.x) // FIXME-TABLE FIXME-STYLE: Assume BorderSize==1, this is problematic if we want to increase the border size..
+ continue;
+
+ // Draw in outer window so right-most column won't be clipped
+ // Always draw full height border when being resized/hovered, or on the delimitation of frozen column scrolling.
+ ImU32 col;
+ float draw_y2;
+ if (is_hovered || is_resized || is_frozen_separator)
+ {
+ draw_y2 = draw_y2_body;
+ col = is_resized ? GetColorU32(ImGuiCol_SeparatorActive) : is_hovered ? GetColorU32(ImGuiCol_SeparatorHovered) : table->BorderColorStrong;
+ }
+ else
+ {
+ draw_y2 = (table->Flags & (ImGuiTableFlags_NoBordersInBody | ImGuiTableFlags_NoBordersInBodyUntilResize)) ? draw_y2_head : draw_y2_body;
+ col = (table->Flags & (ImGuiTableFlags_NoBordersInBody | ImGuiTableFlags_NoBordersInBodyUntilResize)) ? table->BorderColorStrong : table->BorderColorLight;
+ }
+
+ if (draw_y2 > draw_y1)
+ inner_drawlist->AddLine(ImVec2(column->MaxX, draw_y1), ImVec2(column->MaxX, draw_y2), col, border_size);
+ }
+ }
+
+ // Draw outer border
+ // FIXME: could use AddRect or explicit VLine/HLine helper?
+ if (table->Flags & ImGuiTableFlags_BordersOuter)
+ {
+ // Display outer border offset by 1 which is a simple way to display it without adding an extra draw call
+ // (Without the offset, in outer_window it would be rendered behind cells, because child windows are above their
+ // parent. In inner_window, it won't reach out over scrollbars. Another weird solution would be to display part
+ // of it in inner window, and the part that's over scrollbars in the outer window..)
+ // Either solution currently won't allow us to use a larger border size: the border would clipped.
+ const ImRect outer_border = table->OuterRect;
+ const ImU32 outer_col = table->BorderColorStrong;
+ if ((table->Flags & ImGuiTableFlags_BordersOuter) == ImGuiTableFlags_BordersOuter)
+ {
+ inner_drawlist->AddRect(outer_border.Min, outer_border.Max, outer_col, 0.0f, 0, border_size);
+ }
+ else if (table->Flags & ImGuiTableFlags_BordersOuterV)
+ {
+ inner_drawlist->AddLine(outer_border.Min, ImVec2(outer_border.Min.x, outer_border.Max.y), outer_col, border_size);
+ inner_drawlist->AddLine(ImVec2(outer_border.Max.x, outer_border.Min.y), outer_border.Max, outer_col, border_size);
+ }
+ else if (table->Flags & ImGuiTableFlags_BordersOuterH)
+ {
+ inner_drawlist->AddLine(outer_border.Min, ImVec2(outer_border.Max.x, outer_border.Min.y), outer_col, border_size);
+ inner_drawlist->AddLine(ImVec2(outer_border.Min.x, outer_border.Max.y), outer_border.Max, outer_col, border_size);
+ }
+ }
+ if ((table->Flags & ImGuiTableFlags_BordersInnerH) && table->RowPosY2 < table->OuterRect.Max.y)
+ {
+ // Draw bottom-most row border
+ const float border_y = table->RowPosY2;
+ if (border_y >= table->BgClipRect.Min.y && border_y < table->BgClipRect.Max.y)
+ inner_drawlist->AddLine(ImVec2(table->BorderX1, border_y), ImVec2(table->BorderX2, border_y), table->BorderColorLight, border_size);
+ }
+
+ inner_drawlist->PopClipRect();
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Tables: Sorting
+//-------------------------------------------------------------------------
+// - TableGetSortSpecs()
+// - TableFixColumnSortDirection() [Internal]
+// - TableGetColumnNextSortDirection() [Internal]
+// - TableSetColumnSortDirection() [Internal]
+// - TableSortSpecsSanitize() [Internal]
+// - TableSortSpecsBuild() [Internal]
+//-------------------------------------------------------------------------
+
+// Return NULL if no sort specs (most often when ImGuiTableFlags_Sortable is not set)
+// You can sort your data again when 'SpecsChanged == true'. It will be true with sorting specs have changed since
+// last call, or the first time.
+// Lifetime: don't hold on this pointer over multiple frames or past any subsequent call to BeginTable()!
+ImGuiTableSortSpecs* ImGui::TableGetSortSpecs()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ IM_ASSERT(table != NULL);
+
+ if (!(table->Flags & ImGuiTableFlags_Sortable))
+ return NULL;
+
+ // Require layout (in case TableHeadersRow() hasn't been called) as it may alter IsSortSpecsDirty in some paths.
+ if (!table->IsLayoutLocked)
+ TableUpdateLayout(table);
+
+ TableSortSpecsBuild(table);
+
+ return &table->SortSpecs;
+}
+
+static inline ImGuiSortDirection TableGetColumnAvailSortDirection(ImGuiTableColumn* column, int n)
+{
+ IM_ASSERT(n < column->SortDirectionsAvailCount);
+ return (column->SortDirectionsAvailList >> (n << 1)) & 0x03;
+}
+
+// Fix sort direction if currently set on a value which is unavailable (e.g. activating NoSortAscending/NoSortDescending)
+void ImGui::TableFixColumnSortDirection(ImGuiTable* table, ImGuiTableColumn* column)
+{
+ if (column->SortOrder == -1 || (column->SortDirectionsAvailMask & (1 << column->SortDirection)) != 0)
+ return;
+ column->SortDirection = (ImU8)TableGetColumnAvailSortDirection(column, 0);
+ table->IsSortSpecsDirty = true;
+}
+
+// Calculate next sort direction that would be set after clicking the column
+// - If the PreferSortDescending flag is set, we will default to a Descending direction on the first click.
+// - Note that the PreferSortAscending flag is never checked, it is essentially the default and therefore a no-op.
+IM_STATIC_ASSERT(ImGuiSortDirection_None == 0 && ImGuiSortDirection_Ascending == 1 && ImGuiSortDirection_Descending == 2);
+ImGuiSortDirection ImGui::TableGetColumnNextSortDirection(ImGuiTableColumn* column)
+{
+ IM_ASSERT(column->SortDirectionsAvailCount > 0);
+ if (column->SortOrder == -1)
+ return TableGetColumnAvailSortDirection(column, 0);
+ for (int n = 0; n < 3; n++)
+ if (column->SortDirection == TableGetColumnAvailSortDirection(column, n))
+ return TableGetColumnAvailSortDirection(column, (n + 1) % column->SortDirectionsAvailCount);
+ IM_ASSERT(0);
+ return ImGuiSortDirection_None;
+}
+
+// Note that the NoSortAscending/NoSortDescending flags are processed in TableSortSpecsSanitize(), and they may change/revert
+// the value of SortDirection. We could technically also do it here but it would be unnecessary and duplicate code.
+void ImGui::TableSetColumnSortDirection(int column_n, ImGuiSortDirection sort_direction, bool append_to_sort_specs)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+
+ if (!(table->Flags & ImGuiTableFlags_SortMulti))
+ append_to_sort_specs = false;
+ if (!(table->Flags & ImGuiTableFlags_SortTristate))
+ IM_ASSERT(sort_direction != ImGuiSortDirection_None);
+
+ ImGuiTableColumnIdx sort_order_max = 0;
+ if (append_to_sort_specs)
+ for (int other_column_n = 0; other_column_n < table->ColumnsCount; other_column_n++)
+ sort_order_max = ImMax(sort_order_max, table->Columns[other_column_n].SortOrder);
+
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ column->SortDirection = (ImU8)sort_direction;
+ if (column->SortDirection == ImGuiSortDirection_None)
+ column->SortOrder = -1;
+ else if (column->SortOrder == -1 || !append_to_sort_specs)
+ column->SortOrder = append_to_sort_specs ? sort_order_max + 1 : 0;
+
+ for (int other_column_n = 0; other_column_n < table->ColumnsCount; other_column_n++)
+ {
+ ImGuiTableColumn* other_column = &table->Columns[other_column_n];
+ if (other_column != column && !append_to_sort_specs)
+ other_column->SortOrder = -1;
+ TableFixColumnSortDirection(table, other_column);
+ }
+ table->IsSettingsDirty = true;
+ table->IsSortSpecsDirty = true;
+}
+
+void ImGui::TableSortSpecsSanitize(ImGuiTable* table)
+{
+ IM_ASSERT(table->Flags & ImGuiTableFlags_Sortable);
+
+ // Clear SortOrder from hidden column and verify that there's no gap or duplicate.
+ int sort_order_count = 0;
+ ImU64 sort_order_mask = 0x00;
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ if (column->SortOrder != -1 && !column->IsEnabled)
+ column->SortOrder = -1;
+ if (column->SortOrder == -1)
+ continue;
+ sort_order_count++;
+ sort_order_mask |= ((ImU64)1 << column->SortOrder);
+ IM_ASSERT(sort_order_count < (int)sizeof(sort_order_mask) * 8);
+ }
+
+ const bool need_fix_linearize = ((ImU64)1 << sort_order_count) != (sort_order_mask + 1);
+ const bool need_fix_single_sort_order = (sort_order_count > 1) && !(table->Flags & ImGuiTableFlags_SortMulti);
+ if (need_fix_linearize || need_fix_single_sort_order)
+ {
+ ImU64 fixed_mask = 0x00;
+ for (int sort_n = 0; sort_n < sort_order_count; sort_n++)
+ {
+ // Fix: Rewrite sort order fields if needed so they have no gap or duplicate.
+ // (e.g. SortOrder 0 disappeared, SortOrder 1..2 exists --> rewrite then as SortOrder 0..1)
+ int column_with_smallest_sort_order = -1;
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ if ((fixed_mask & ((ImU64)1 << (ImU64)column_n)) == 0 && table->Columns[column_n].SortOrder != -1)
+ if (column_with_smallest_sort_order == -1 || table->Columns[column_n].SortOrder < table->Columns[column_with_smallest_sort_order].SortOrder)
+ column_with_smallest_sort_order = column_n;
+ IM_ASSERT(column_with_smallest_sort_order != -1);
+ fixed_mask |= ((ImU64)1 << column_with_smallest_sort_order);
+ table->Columns[column_with_smallest_sort_order].SortOrder = (ImGuiTableColumnIdx)sort_n;
+
+ // Fix: Make sure only one column has a SortOrder if ImGuiTableFlags_MultiSortable is not set.
+ if (need_fix_single_sort_order)
+ {
+ sort_order_count = 1;
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ if (column_n != column_with_smallest_sort_order)
+ table->Columns[column_n].SortOrder = -1;
+ break;
+ }
+ }
+ }
+
+ // Fallback default sort order (if no column had the ImGuiTableColumnFlags_DefaultSort flag)
+ if (sort_order_count == 0 && !(table->Flags & ImGuiTableFlags_SortTristate))
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ if (column->IsEnabled && !(column->Flags & ImGuiTableColumnFlags_NoSort))
+ {
+ sort_order_count = 1;
+ column->SortOrder = 0;
+ column->SortDirection = (ImU8)TableGetColumnAvailSortDirection(column, 0);
+ break;
+ }
+ }
+
+ table->SortSpecsCount = (ImGuiTableColumnIdx)sort_order_count;
+}
+
+void ImGui::TableSortSpecsBuild(ImGuiTable* table)
+{
+ bool dirty = table->IsSortSpecsDirty;
+ if (dirty)
+ {
+ TableSortSpecsSanitize(table);
+ table->SortSpecsMulti.resize(table->SortSpecsCount <= 1 ? 0 : table->SortSpecsCount);
+ table->SortSpecs.SpecsDirty = true; // Mark as dirty for user
+ table->IsSortSpecsDirty = false; // Mark as not dirty for us
+ }
+
+ // Write output
+ ImGuiTableColumnSortSpecs* sort_specs = (table->SortSpecsCount == 0) ? NULL : (table->SortSpecsCount == 1) ? &table->SortSpecsSingle : table->SortSpecsMulti.Data;
+ if (dirty && sort_specs != NULL)
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ {
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ if (column->SortOrder == -1)
+ continue;
+ IM_ASSERT(column->SortOrder < table->SortSpecsCount);
+ ImGuiTableColumnSortSpecs* sort_spec = &sort_specs[column->SortOrder];
+ sort_spec->ColumnUserID = column->UserID;
+ sort_spec->ColumnIndex = (ImGuiTableColumnIdx)column_n;
+ sort_spec->SortOrder = (ImGuiTableColumnIdx)column->SortOrder;
+ sort_spec->SortDirection = column->SortDirection;
+ }
+
+ table->SortSpecs.Specs = sort_specs;
+ table->SortSpecs.SpecsCount = table->SortSpecsCount;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Tables: Headers
+//-------------------------------------------------------------------------
+// - TableGetHeaderRowHeight() [Internal]
+// - TableHeadersRow()
+// - TableHeader()
+//-------------------------------------------------------------------------
+
+float ImGui::TableGetHeaderRowHeight()
+{
+ // Caring for a minor edge case:
+ // Calculate row height, for the unlikely case that some labels may be taller than others.
+ // If we didn't do that, uneven header height would highlight but smaller one before the tallest wouldn't catch input for all height.
+ // In your custom header row you may omit this all together and just call TableNextRow() without a height...
+ float row_height = GetTextLineHeight();
+ int columns_count = TableGetColumnCount();
+ for (int column_n = 0; column_n < columns_count; column_n++)
+ {
+ ImGuiTableColumnFlags flags = TableGetColumnFlags(column_n);
+ if ((flags & ImGuiTableColumnFlags_IsEnabled) && !(flags & ImGuiTableColumnFlags_NoHeaderLabel))
+ row_height = ImMax(row_height, CalcTextSize(TableGetColumnName(column_n)).y);
+ }
+ row_height += GetStyle().CellPadding.y * 2.0f;
+ return row_height;
+}
+
+// [Public] This is a helper to output TableHeader() calls based on the column names declared in TableSetupColumn().
+// The intent is that advanced users willing to create customized headers would not need to use this helper
+// and can create their own! For example: TableHeader() may be preceeded by Checkbox() or other custom widgets.
+// See 'Demo->Tables->Custom headers' for a demonstration of implementing a custom version of this.
+// This code is constructed to not make much use of internal functions, as it is intended to be a template to copy.
+// FIXME-TABLE: TableOpenContextMenu() and TableGetHeaderRowHeight() are not public.
+void ImGui::TableHeadersRow()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ IM_ASSERT(table != NULL && "Need to call TableHeadersRow() after BeginTable()!");
+
+ // Layout if not already done (this is automatically done by TableNextRow, we do it here solely to facilitate stepping in debugger as it is frequent to step in TableUpdateLayout)
+ if (!table->IsLayoutLocked)
+ TableUpdateLayout(table);
+
+ // Open row
+ const float row_y1 = GetCursorScreenPos().y;
+ const float row_height = TableGetHeaderRowHeight();
+ TableNextRow(ImGuiTableRowFlags_Headers, row_height);
+ if (table->HostSkipItems) // Merely an optimization, you may skip in your own code.
+ return;
+
+ const int columns_count = TableGetColumnCount();
+ for (int column_n = 0; column_n < columns_count; column_n++)
+ {
+ if (!TableSetColumnIndex(column_n))
+ continue;
+
+ // Push an id to allow unnamed labels (generally accidental, but let's behave nicely with them)
+ // - in your own code you may omit the PushID/PopID all-together, provided you know they won't collide
+ // - table->InstanceCurrent is only >0 when we use multiple BeginTable/EndTable calls with same identifier.
+ const char* name = (TableGetColumnFlags(column_n) & ImGuiTableColumnFlags_NoHeaderLabel) ? "" : TableGetColumnName(column_n);
+ PushID(table->InstanceCurrent * table->ColumnsCount + column_n);
+ TableHeader(name);
+ PopID();
+ }
+
+ // Allow opening popup from the right-most section after the last column.
+ ImVec2 mouse_pos = ImGui::GetMousePos();
+ if (IsMouseReleased(1) && TableGetHoveredColumn() == columns_count)
+ if (mouse_pos.y >= row_y1 && mouse_pos.y < row_y1 + row_height)
+ TableOpenContextMenu(-1); // Will open a non-column-specific popup.
+}
+
+// Emit a column header (text + optional sort order)
+// We cpu-clip text here so that all columns headers can be merged into a same draw call.
+// Note that because of how we cpu-clip and display sorting indicators, you _cannot_ use SameLine() after a TableHeader()
+void ImGui::TableHeader(const char* label)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return;
+
+ ImGuiTable* table = g.CurrentTable;
+ IM_ASSERT(table != NULL && "Need to call TableHeader() after BeginTable()!");
+ IM_ASSERT(table->CurrentColumn != -1);
+ const int column_n = table->CurrentColumn;
+ ImGuiTableColumn* column = &table->Columns[column_n];
+
+ // Label
+ if (label == NULL)
+ label = "";
+ const char* label_end = FindRenderedTextEnd(label);
+ ImVec2 label_size = CalcTextSize(label, label_end, true);
+ ImVec2 label_pos = window->DC.CursorPos;
+
+ // If we already got a row height, there's use that.
+ // FIXME-TABLE: Padding problem if the correct outer-padding CellBgRect strays off our ClipRect?
+ ImRect cell_r = TableGetCellBgRect(table, column_n);
+ float label_height = ImMax(label_size.y, table->RowMinHeight - table->CellPaddingY * 2.0f);
+
+ // Calculate ideal size for sort order arrow
+ float w_arrow = 0.0f;
+ float w_sort_text = 0.0f;
+ char sort_order_suf[4] = "";
+ const float ARROW_SCALE = 0.65f;
+ if ((table->Flags & ImGuiTableFlags_Sortable) && !(column->Flags & ImGuiTableColumnFlags_NoSort))
+ {
+ w_arrow = ImFloor(g.FontSize * ARROW_SCALE + g.Style.FramePadding.x);
+ if (column->SortOrder > 0)
+ {
+ ImFormatString(sort_order_suf, IM_ARRAYSIZE(sort_order_suf), "%d", column->SortOrder + 1);
+ w_sort_text = g.Style.ItemInnerSpacing.x + CalcTextSize(sort_order_suf).x;
+ }
+ }
+
+ // We feed our unclipped width to the column without writing on CursorMaxPos, so that column is still considering for merging.
+ float max_pos_x = label_pos.x + label_size.x + w_sort_text + w_arrow;
+ column->ContentMaxXHeadersUsed = ImMax(column->ContentMaxXHeadersUsed, column->WorkMaxX);
+ column->ContentMaxXHeadersIdeal = ImMax(column->ContentMaxXHeadersIdeal, max_pos_x);
+
+ // Keep header highlighted when context menu is open.
+ const bool selected = (table->IsContextPopupOpen && table->ContextPopupColumn == column_n && table->InstanceInteracted == table->InstanceCurrent);
+ ImGuiID id = window->GetID(label);
+ ImRect bb(cell_r.Min.x, cell_r.Min.y, cell_r.Max.x, ImMax(cell_r.Max.y, cell_r.Min.y + label_height + g.Style.CellPadding.y * 2.0f));
+ ItemSize(ImVec2(0.0f, label_height)); // Don't declare unclipped width, it'll be fed ContentMaxPosHeadersIdeal
+ if (!ItemAdd(bb, id))
+ return;
+
+ //GetForegroundDrawList()->AddRect(cell_r.Min, cell_r.Max, IM_COL32(255, 0, 0, 255)); // [DEBUG]
+ //GetForegroundDrawList()->AddRect(bb.Min, bb.Max, IM_COL32(255, 0, 0, 255)); // [DEBUG]
+
+ // Using AllowItemOverlap mode because we cover the whole cell, and we want user to be able to submit subsequent items.
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_AllowItemOverlap);
+ if (g.ActiveId != id)
+ SetItemAllowOverlap();
+ if (held || hovered || selected)
+ {
+ const ImU32 col = GetColorU32(held ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
+ //RenderFrame(bb.Min, bb.Max, col, false, 0.0f);
+ TableSetBgColor(ImGuiTableBgTarget_CellBg, col, table->CurrentColumn);
+ }
+ else
+ {
+ // Submit single cell bg color in the case we didn't submit a full header row
+ if ((table->RowFlags & ImGuiTableRowFlags_Headers) == 0)
+ TableSetBgColor(ImGuiTableBgTarget_CellBg, GetColorU32(ImGuiCol_TableHeaderBg), table->CurrentColumn);
+ }
+ RenderNavHighlight(bb, id, ImGuiNavHighlightFlags_TypeThin | ImGuiNavHighlightFlags_NoRounding);
+ if (held)
+ table->HeldHeaderColumn = (ImGuiTableColumnIdx)column_n;
+ window->DC.CursorPos.y -= g.Style.ItemSpacing.y * 0.5f;
+
+ // Drag and drop to re-order columns.
+ // FIXME-TABLE: Scroll request while reordering a column and it lands out of the scrolling zone.
+ if (held && (table->Flags & ImGuiTableFlags_Reorderable) && IsMouseDragging(0) && !g.DragDropActive)
+ {
+ // While moving a column it will jump on the other side of the mouse, so we also test for MouseDelta.x
+ table->ReorderColumn = (ImGuiTableColumnIdx)column_n;
+ table->InstanceInteracted = table->InstanceCurrent;
+
+ // We don't reorder: through the frozen<>unfrozen line, or through a column that is marked with ImGuiTableColumnFlags_NoReorder.
+ if (g.IO.MouseDelta.x < 0.0f && g.IO.MousePos.x < cell_r.Min.x)
+ if (ImGuiTableColumn* prev_column = (column->PrevEnabledColumn != -1) ? &table->Columns[column->PrevEnabledColumn] : NULL)
+ if (!((column->Flags | prev_column->Flags) & ImGuiTableColumnFlags_NoReorder))
+ if ((column->IndexWithinEnabledSet < table->FreezeColumnsRequest) == (prev_column->IndexWithinEnabledSet < table->FreezeColumnsRequest))
+ table->ReorderColumnDir = -1;
+ if (g.IO.MouseDelta.x > 0.0f && g.IO.MousePos.x > cell_r.Max.x)
+ if (ImGuiTableColumn* next_column = (column->NextEnabledColumn != -1) ? &table->Columns[column->NextEnabledColumn] : NULL)
+ if (!((column->Flags | next_column->Flags) & ImGuiTableColumnFlags_NoReorder))
+ if ((column->IndexWithinEnabledSet < table->FreezeColumnsRequest) == (next_column->IndexWithinEnabledSet < table->FreezeColumnsRequest))
+ table->ReorderColumnDir = +1;
+ }
+
+ // Sort order arrow
+ const float ellipsis_max = cell_r.Max.x - w_arrow - w_sort_text;
+ if ((table->Flags & ImGuiTableFlags_Sortable) && !(column->Flags & ImGuiTableColumnFlags_NoSort))
+ {
+ if (column->SortOrder != -1)
+ {
+ float x = ImMax(cell_r.Min.x, cell_r.Max.x - w_arrow - w_sort_text);
+ float y = label_pos.y;
+ if (column->SortOrder > 0)
+ {
+ PushStyleColor(ImGuiCol_Text, GetColorU32(ImGuiCol_Text, 0.70f));
+ RenderText(ImVec2(x + g.Style.ItemInnerSpacing.x, y), sort_order_suf);
+ PopStyleColor();
+ x += w_sort_text;
+ }
+ RenderArrow(window->DrawList, ImVec2(x, y), GetColorU32(ImGuiCol_Text), column->SortDirection == ImGuiSortDirection_Ascending ? ImGuiDir_Up : ImGuiDir_Down, ARROW_SCALE);
+ }
+
+ // Handle clicking on column header to adjust Sort Order
+ if (pressed && table->ReorderColumn != column_n)
+ {
+ ImGuiSortDirection sort_direction = TableGetColumnNextSortDirection(column);
+ TableSetColumnSortDirection(column_n, sort_direction, g.IO.KeyShift);
+ }
+ }
+
+ // Render clipped label. Clipping here ensure that in the majority of situations, all our header cells will
+ // be merged into a single draw call.
+ //window->DrawList->AddCircleFilled(ImVec2(ellipsis_max, label_pos.y), 40, IM_COL32_WHITE);
+ RenderTextEllipsis(window->DrawList, label_pos, ImVec2(ellipsis_max, label_pos.y + label_height + g.Style.FramePadding.y), ellipsis_max, ellipsis_max, label, label_end, &label_size);
+
+ const bool text_clipped = label_size.x > (ellipsis_max - label_pos.x);
+ if (text_clipped && hovered && g.HoveredIdNotActiveTimer > g.TooltipSlowDelay)
+ SetTooltip("%.*s", (int)(label_end - label), label);
+
+ // We don't use BeginPopupContextItem() because we want the popup to stay up even after the column is hidden
+ if (IsMouseReleased(1) && IsItemHovered())
+ TableOpenContextMenu(column_n);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Tables: Context Menu
+//-------------------------------------------------------------------------
+// - TableOpenContextMenu() [Internal]
+// - TableDrawContextMenu() [Internal]
+//-------------------------------------------------------------------------
+
+// Use -1 to open menu not specific to a given column.
+void ImGui::TableOpenContextMenu(int column_n)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTable* table = g.CurrentTable;
+ if (column_n == -1 && table->CurrentColumn != -1) // When called within a column automatically use this one (for consistency)
+ column_n = table->CurrentColumn;
+ if (column_n == table->ColumnsCount) // To facilitate using with TableGetHoveredColumn()
+ column_n = -1;
+ IM_ASSERT(column_n >= -1 && column_n < table->ColumnsCount);
+ if (table->Flags & (ImGuiTableFlags_Resizable | ImGuiTableFlags_Reorderable | ImGuiTableFlags_Hideable))
+ {
+ table->IsContextPopupOpen = true;
+ table->ContextPopupColumn = (ImGuiTableColumnIdx)column_n;
+ table->InstanceInteracted = table->InstanceCurrent;
+ const ImGuiID context_menu_id = ImHashStr("##ContextMenu", 0, table->ID);
+ OpenPopupEx(context_menu_id, ImGuiPopupFlags_None);
+ }
+}
+
+// Output context menu into current window (generally a popup)
+// FIXME-TABLE: Ideally this should be writable by the user. Full programmatic access to that data?
+void ImGui::TableDrawContextMenu(ImGuiTable* table)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return;
+
+ bool want_separator = false;
+ const int column_n = (table->ContextPopupColumn >= 0 && table->ContextPopupColumn < table->ColumnsCount) ? table->ContextPopupColumn : -1;
+ ImGuiTableColumn* column = (column_n != -1) ? &table->Columns[column_n] : NULL;
+
+ // Sizing
+ if (table->Flags & ImGuiTableFlags_Resizable)
+ {
+ if (column != NULL)
+ {
+ const bool can_resize = !(column->Flags & ImGuiTableColumnFlags_NoResize) && column->IsEnabled;
+ if (MenuItem("Size column to fit###SizeOne", NULL, false, can_resize))
+ TableSetColumnWidthAutoSingle(table, column_n);
+ }
+
+ const char* size_all_desc;
+ if (table->ColumnsEnabledFixedCount == table->ColumnsEnabledCount && (table->Flags & ImGuiTableFlags_SizingMask_) != ImGuiTableFlags_SizingFixedSame)
+ size_all_desc = "Size all columns to fit###SizeAll"; // All fixed
+ else
+ size_all_desc = "Size all columns to default###SizeAll"; // All stretch or mixed
+ if (MenuItem(size_all_desc, NULL))
+ TableSetColumnWidthAutoAll(table);
+ want_separator = true;
+ }
+
+ // Ordering
+ if (table->Flags & ImGuiTableFlags_Reorderable)
+ {
+ if (MenuItem("Reset order", NULL, false, !table->IsDefaultDisplayOrder))
+ table->IsResetDisplayOrderRequest = true;
+ want_separator = true;
+ }
+
+ // Reset all (should work but seems unnecessary/noisy to expose?)
+ //if (MenuItem("Reset all"))
+ // table->IsResetAllRequest = true;
+
+ // Sorting
+ // (modify TableOpenContextMenu() to add _Sortable flag if enabling this)
+#if 0
+ if ((table->Flags & ImGuiTableFlags_Sortable) && column != NULL && (column->Flags & ImGuiTableColumnFlags_NoSort) == 0)
+ {
+ if (want_separator)
+ Separator();
+ want_separator = true;
+
+ bool append_to_sort_specs = g.IO.KeyShift;
+ if (MenuItem("Sort in Ascending Order", NULL, column->SortOrder != -1 && column->SortDirection == ImGuiSortDirection_Ascending, (column->Flags & ImGuiTableColumnFlags_NoSortAscending) == 0))
+ TableSetColumnSortDirection(table, column_n, ImGuiSortDirection_Ascending, append_to_sort_specs);
+ if (MenuItem("Sort in Descending Order", NULL, column->SortOrder != -1 && column->SortDirection == ImGuiSortDirection_Descending, (column->Flags & ImGuiTableColumnFlags_NoSortDescending) == 0))
+ TableSetColumnSortDirection(table, column_n, ImGuiSortDirection_Descending, append_to_sort_specs);
+ }
+#endif
+
+ // Hiding / Visibility
+ if (table->Flags & ImGuiTableFlags_Hideable)
+ {
+ if (want_separator)
+ Separator();
+ want_separator = true;
+
+ PushItemFlag(ImGuiItemFlags_SelectableDontClosePopup, true);
+ for (int other_column_n = 0; other_column_n < table->ColumnsCount; other_column_n++)
+ {
+ ImGuiTableColumn* other_column = &table->Columns[other_column_n];
+ if (other_column->Flags & ImGuiTableColumnFlags_Disabled)
+ continue;
+
+ const char* name = TableGetColumnName(table, other_column_n);
+ if (name == NULL || name[0] == 0)
+ name = "<Unknown>";
+
+ // Make sure we can't hide the last active column
+ bool menu_item_active = (other_column->Flags & ImGuiTableColumnFlags_NoHide) ? false : true;
+ if (other_column->IsUserEnabled && table->ColumnsEnabledCount <= 1)
+ menu_item_active = false;
+ if (MenuItem(name, NULL, other_column->IsUserEnabled, menu_item_active))
+ other_column->IsUserEnabledNextFrame = !other_column->IsUserEnabled;
+ }
+ PopItemFlag();
+ }
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Tables: Settings (.ini data)
+//-------------------------------------------------------------------------
+// FIXME: The binding/finding/creating flow are too confusing.
+//-------------------------------------------------------------------------
+// - TableSettingsInit() [Internal]
+// - TableSettingsCalcChunkSize() [Internal]
+// - TableSettingsCreate() [Internal]
+// - TableSettingsFindByID() [Internal]
+// - TableGetBoundSettings() [Internal]
+// - TableResetSettings()
+// - TableSaveSettings() [Internal]
+// - TableLoadSettings() [Internal]
+// - TableSettingsHandler_ClearAll() [Internal]
+// - TableSettingsHandler_ApplyAll() [Internal]
+// - TableSettingsHandler_ReadOpen() [Internal]
+// - TableSettingsHandler_ReadLine() [Internal]
+// - TableSettingsHandler_WriteAll() [Internal]
+// - TableSettingsInstallHandler() [Internal]
+//-------------------------------------------------------------------------
+// [Init] 1: TableSettingsHandler_ReadXXXX() Load and parse .ini file into TableSettings.
+// [Main] 2: TableLoadSettings() When table is created, bind Table to TableSettings, serialize TableSettings data into Table.
+// [Main] 3: TableSaveSettings() When table properties are modified, serialize Table data into bound or new TableSettings, mark .ini as dirty.
+// [Main] 4: TableSettingsHandler_WriteAll() When .ini file is dirty (which can come from other source), save TableSettings into .ini file.
+//-------------------------------------------------------------------------
+
+// Clear and initialize empty settings instance
+static void TableSettingsInit(ImGuiTableSettings* settings, ImGuiID id, int columns_count, int columns_count_max)
+{
+ IM_PLACEMENT_NEW(settings) ImGuiTableSettings();
+ ImGuiTableColumnSettings* settings_column = settings->GetColumnSettings();
+ for (int n = 0; n < columns_count_max; n++, settings_column++)
+ IM_PLACEMENT_NEW(settings_column) ImGuiTableColumnSettings();
+ settings->ID = id;
+ settings->ColumnsCount = (ImGuiTableColumnIdx)columns_count;
+ settings->ColumnsCountMax = (ImGuiTableColumnIdx)columns_count_max;
+ settings->WantApply = true;
+}
+
+static size_t TableSettingsCalcChunkSize(int columns_count)
+{
+ return sizeof(ImGuiTableSettings) + (size_t)columns_count * sizeof(ImGuiTableColumnSettings);
+}
+
+ImGuiTableSettings* ImGui::TableSettingsCreate(ImGuiID id, int columns_count)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiTableSettings* settings = g.SettingsTables.alloc_chunk(TableSettingsCalcChunkSize(columns_count));
+ TableSettingsInit(settings, id, columns_count, columns_count);
+ return settings;
+}
+
+// Find existing settings
+ImGuiTableSettings* ImGui::TableSettingsFindByID(ImGuiID id)
+{
+ // FIXME-OPT: Might want to store a lookup map for this?
+ ImGuiContext& g = *GImGui;
+ for (ImGuiTableSettings* settings = g.SettingsTables.begin(); settings != NULL; settings = g.SettingsTables.next_chunk(settings))
+ if (settings->ID == id)
+ return settings;
+ return NULL;
+}
+
+// Get settings for a given table, NULL if none
+ImGuiTableSettings* ImGui::TableGetBoundSettings(ImGuiTable* table)
+{
+ if (table->SettingsOffset != -1)
+ {
+ ImGuiContext& g = *GImGui;
+ ImGuiTableSettings* settings = g.SettingsTables.ptr_from_offset(table->SettingsOffset);
+ IM_ASSERT(settings->ID == table->ID);
+ if (settings->ColumnsCountMax >= table->ColumnsCount)
+ return settings; // OK
+ settings->ID = 0; // Invalidate storage, we won't fit because of a count change
+ }
+ return NULL;
+}
+
+// Restore initial state of table (with or without saved settings)
+void ImGui::TableResetSettings(ImGuiTable* table)
+{
+ table->IsInitializing = table->IsSettingsDirty = true;
+ table->IsResetAllRequest = false;
+ table->IsSettingsRequestLoad = false; // Don't reload from ini
+ table->SettingsLoadedFlags = ImGuiTableFlags_None; // Mark as nothing loaded so our initialized data becomes authoritative
+}
+
+void ImGui::TableSaveSettings(ImGuiTable* table)
+{
+ table->IsSettingsDirty = false;
+ if (table->Flags & ImGuiTableFlags_NoSavedSettings)
+ return;
+
+ // Bind or create settings data
+ ImGuiContext& g = *GImGui;
+ ImGuiTableSettings* settings = TableGetBoundSettings(table);
+ if (settings == NULL)
+ {
+ settings = TableSettingsCreate(table->ID, table->ColumnsCount);
+ table->SettingsOffset = g.SettingsTables.offset_from_ptr(settings);
+ }
+ settings->ColumnsCount = (ImGuiTableColumnIdx)table->ColumnsCount;
+
+ // Serialize ImGuiTable/ImGuiTableColumn into ImGuiTableSettings/ImGuiTableColumnSettings
+ IM_ASSERT(settings->ID == table->ID);
+ IM_ASSERT(settings->ColumnsCount == table->ColumnsCount && settings->ColumnsCountMax >= settings->ColumnsCount);
+ ImGuiTableColumn* column = table->Columns.Data;
+ ImGuiTableColumnSettings* column_settings = settings->GetColumnSettings();
+
+ bool save_ref_scale = false;
+ settings->SaveFlags = ImGuiTableFlags_None;
+ for (int n = 0; n < table->ColumnsCount; n++, column++, column_settings++)
+ {
+ const float width_or_weight = (column->Flags & ImGuiTableColumnFlags_WidthStretch) ? column->StretchWeight : column->WidthRequest;
+ column_settings->WidthOrWeight = width_or_weight;
+ column_settings->Index = (ImGuiTableColumnIdx)n;
+ column_settings->DisplayOrder = column->DisplayOrder;
+ column_settings->SortOrder = column->SortOrder;
+ column_settings->SortDirection = column->SortDirection;
+ column_settings->IsEnabled = column->IsUserEnabled;
+ column_settings->IsStretch = (column->Flags & ImGuiTableColumnFlags_WidthStretch) ? 1 : 0;
+ if ((column->Flags & ImGuiTableColumnFlags_WidthStretch) == 0)
+ save_ref_scale = true;
+
+ // We skip saving some data in the .ini file when they are unnecessary to restore our state.
+ // Note that fixed width where initial width was derived from auto-fit will always be saved as InitStretchWeightOrWidth will be 0.0f.
+ // FIXME-TABLE: We don't have logic to easily compare SortOrder to DefaultSortOrder yet so it's always saved when present.
+ if (width_or_weight != column->InitStretchWeightOrWidth)
+ settings->SaveFlags |= ImGuiTableFlags_Resizable;
+ if (column->DisplayOrder != n)
+ settings->SaveFlags |= ImGuiTableFlags_Reorderable;
+ if (column->SortOrder != -1)
+ settings->SaveFlags |= ImGuiTableFlags_Sortable;
+ if (column->IsUserEnabled != ((column->Flags & ImGuiTableColumnFlags_DefaultHide) == 0))
+ settings->SaveFlags |= ImGuiTableFlags_Hideable;
+ }
+ settings->SaveFlags &= table->Flags;
+ settings->RefScale = save_ref_scale ? table->RefScale : 0.0f;
+
+ MarkIniSettingsDirty();
+}
+
+void ImGui::TableLoadSettings(ImGuiTable* table)
+{
+ ImGuiContext& g = *GImGui;
+ table->IsSettingsRequestLoad = false;
+ if (table->Flags & ImGuiTableFlags_NoSavedSettings)
+ return;
+
+ // Bind settings
+ ImGuiTableSettings* settings;
+ if (table->SettingsOffset == -1)
+ {
+ settings = TableSettingsFindByID(table->ID);
+ if (settings == NULL)
+ return;
+ if (settings->ColumnsCount != table->ColumnsCount) // Allow settings if columns count changed. We could otherwise decide to return...
+ table->IsSettingsDirty = true;
+ table->SettingsOffset = g.SettingsTables.offset_from_ptr(settings);
+ }
+ else
+ {
+ settings = TableGetBoundSettings(table);
+ }
+
+ table->SettingsLoadedFlags = settings->SaveFlags;
+ table->RefScale = settings->RefScale;
+
+ // Serialize ImGuiTableSettings/ImGuiTableColumnSettings into ImGuiTable/ImGuiTableColumn
+ ImGuiTableColumnSettings* column_settings = settings->GetColumnSettings();
+ ImU64 display_order_mask = 0;
+ for (int data_n = 0; data_n < settings->ColumnsCount; data_n++, column_settings++)
+ {
+ int column_n = column_settings->Index;
+ if (column_n < 0 || column_n >= table->ColumnsCount)
+ continue;
+
+ ImGuiTableColumn* column = &table->Columns[column_n];
+ if (settings->SaveFlags & ImGuiTableFlags_Resizable)
+ {
+ if (column_settings->IsStretch)
+ column->StretchWeight = column_settings->WidthOrWeight;
+ else
+ column->WidthRequest = column_settings->WidthOrWeight;
+ column->AutoFitQueue = 0x00;
+ }
+ if (settings->SaveFlags & ImGuiTableFlags_Reorderable)
+ column->DisplayOrder = column_settings->DisplayOrder;
+ else
+ column->DisplayOrder = (ImGuiTableColumnIdx)column_n;
+ display_order_mask |= (ImU64)1 << column->DisplayOrder;
+ column->IsUserEnabled = column->IsUserEnabledNextFrame = column_settings->IsEnabled;
+ column->SortOrder = column_settings->SortOrder;
+ column->SortDirection = column_settings->SortDirection;
+ }
+
+ // Validate and fix invalid display order data
+ const ImU64 expected_display_order_mask = (settings->ColumnsCount == 64) ? ~0 : ((ImU64)1 << settings->ColumnsCount) - 1;
+ if (display_order_mask != expected_display_order_mask)
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ table->Columns[column_n].DisplayOrder = (ImGuiTableColumnIdx)column_n;
+
+ // Rebuild index
+ for (int column_n = 0; column_n < table->ColumnsCount; column_n++)
+ table->DisplayOrderToIndex[table->Columns[column_n].DisplayOrder] = (ImGuiTableColumnIdx)column_n;
+}
+
+static void TableSettingsHandler_ClearAll(ImGuiContext* ctx, ImGuiSettingsHandler*)
+{
+ ImGuiContext& g = *ctx;
+ for (int i = 0; i != g.Tables.GetMapSize(); i++)
+ if (ImGuiTable* table = g.Tables.TryGetMapData(i))
+ table->SettingsOffset = -1;
+ g.SettingsTables.clear();
+}
+
+// Apply to existing windows (if any)
+static void TableSettingsHandler_ApplyAll(ImGuiContext* ctx, ImGuiSettingsHandler*)
+{
+ ImGuiContext& g = *ctx;
+ for (int i = 0; i != g.Tables.GetMapSize(); i++)
+ if (ImGuiTable* table = g.Tables.TryGetMapData(i))
+ {
+ table->IsSettingsRequestLoad = true;
+ table->SettingsOffset = -1;
+ }
+}
+
+static void* TableSettingsHandler_ReadOpen(ImGuiContext*, ImGuiSettingsHandler*, const char* name)
+{
+ ImGuiID id = 0;
+ int columns_count = 0;
+ if (sscanf(name, "0x%08X,%d", &id, &columns_count) < 2)
+ return NULL;
+
+ if (ImGuiTableSettings* settings = ImGui::TableSettingsFindByID(id))
+ {
+ if (settings->ColumnsCountMax >= columns_count)
+ {
+ TableSettingsInit(settings, id, columns_count, settings->ColumnsCountMax); // Recycle
+ return settings;
+ }
+ settings->ID = 0; // Invalidate storage, we won't fit because of a count change
+ }
+ return ImGui::TableSettingsCreate(id, columns_count);
+}
+
+static void TableSettingsHandler_ReadLine(ImGuiContext*, ImGuiSettingsHandler*, void* entry, const char* line)
+{
+ // "Column 0 UserID=0x42AD2D21 Width=100 Visible=1 Order=0 Sort=0v"
+ ImGuiTableSettings* settings = (ImGuiTableSettings*)entry;
+ float f = 0.0f;
+ int column_n = 0, r = 0, n = 0;
+
+ if (sscanf(line, "RefScale=%f", &f) == 1) { settings->RefScale = f; return; }
+
+ if (sscanf(line, "Column %d%n", &column_n, &r) == 1)
+ {
+ if (column_n < 0 || column_n >= settings->ColumnsCount)
+ return;
+ line = ImStrSkipBlank(line + r);
+ char c = 0;
+ ImGuiTableColumnSettings* column = settings->GetColumnSettings() + column_n;
+ column->Index = (ImGuiTableColumnIdx)column_n;
+ if (sscanf(line, "UserID=0x%08X%n", (ImU32*)&n, &r)==1) { line = ImStrSkipBlank(line + r); column->UserID = (ImGuiID)n; }
+ if (sscanf(line, "Width=%d%n", &n, &r) == 1) { line = ImStrSkipBlank(line + r); column->WidthOrWeight = (float)n; column->IsStretch = 0; settings->SaveFlags |= ImGuiTableFlags_Resizable; }
+ if (sscanf(line, "Weight=%f%n", &f, &r) == 1) { line = ImStrSkipBlank(line + r); column->WidthOrWeight = f; column->IsStretch = 1; settings->SaveFlags |= ImGuiTableFlags_Resizable; }
+ if (sscanf(line, "Visible=%d%n", &n, &r) == 1) { line = ImStrSkipBlank(line + r); column->IsEnabled = (ImU8)n; settings->SaveFlags |= ImGuiTableFlags_Hideable; }
+ if (sscanf(line, "Order=%d%n", &n, &r) == 1) { line = ImStrSkipBlank(line + r); column->DisplayOrder = (ImGuiTableColumnIdx)n; settings->SaveFlags |= ImGuiTableFlags_Reorderable; }
+ if (sscanf(line, "Sort=%d%c%n", &n, &c, &r) == 2) { line = ImStrSkipBlank(line + r); column->SortOrder = (ImGuiTableColumnIdx)n; column->SortDirection = (c == '^') ? ImGuiSortDirection_Descending : ImGuiSortDirection_Ascending; settings->SaveFlags |= ImGuiTableFlags_Sortable; }
+ }
+}
+
+static void TableSettingsHandler_WriteAll(ImGuiContext* ctx, ImGuiSettingsHandler* handler, ImGuiTextBuffer* buf)
+{
+ ImGuiContext& g = *ctx;
+ for (ImGuiTableSettings* settings = g.SettingsTables.begin(); settings != NULL; settings = g.SettingsTables.next_chunk(settings))
+ {
+ if (settings->ID == 0) // Skip ditched settings
+ continue;
+
+ // TableSaveSettings() may clear some of those flags when we establish that the data can be stripped
+ // (e.g. Order was unchanged)
+ const bool save_size = (settings->SaveFlags & ImGuiTableFlags_Resizable) != 0;
+ const bool save_visible = (settings->SaveFlags & ImGuiTableFlags_Hideable) != 0;
+ const bool save_order = (settings->SaveFlags & ImGuiTableFlags_Reorderable) != 0;
+ const bool save_sort = (settings->SaveFlags & ImGuiTableFlags_Sortable) != 0;
+ if (!save_size && !save_visible && !save_order && !save_sort)
+ continue;
+
+ buf->reserve(buf->size() + 30 + settings->ColumnsCount * 50); // ballpark reserve
+ buf->appendf("[%s][0x%08X,%d]\n", handler->TypeName, settings->ID, settings->ColumnsCount);
+ if (settings->RefScale != 0.0f)
+ buf->appendf("RefScale=%g\n", settings->RefScale);
+ ImGuiTableColumnSettings* column = settings->GetColumnSettings();
+ for (int column_n = 0; column_n < settings->ColumnsCount; column_n++, column++)
+ {
+ // "Column 0 UserID=0x42AD2D21 Width=100 Visible=1 Order=0 Sort=0v"
+ bool save_column = column->UserID != 0 || save_size || save_visible || save_order || (save_sort && column->SortOrder != -1);
+ if (!save_column)
+ continue;
+ buf->appendf("Column %-2d", column_n);
+ if (column->UserID != 0) buf->appendf(" UserID=%08X", column->UserID);
+ if (save_size && column->IsStretch) buf->appendf(" Weight=%.4f", column->WidthOrWeight);
+ if (save_size && !column->IsStretch) buf->appendf(" Width=%d", (int)column->WidthOrWeight);
+ if (save_visible) buf->appendf(" Visible=%d", column->IsEnabled);
+ if (save_order) buf->appendf(" Order=%d", column->DisplayOrder);
+ if (save_sort && column->SortOrder != -1) buf->appendf(" Sort=%d%c", column->SortOrder, (column->SortDirection == ImGuiSortDirection_Ascending) ? 'v' : '^');
+ buf->append("\n");
+ }
+ buf->append("\n");
+ }
+}
+
+void ImGui::TableSettingsAddSettingsHandler()
+{
+ ImGuiSettingsHandler ini_handler;
+ ini_handler.TypeName = "Table";
+ ini_handler.TypeHash = ImHashStr("Table");
+ ini_handler.ClearAllFn = TableSettingsHandler_ClearAll;
+ ini_handler.ReadOpenFn = TableSettingsHandler_ReadOpen;
+ ini_handler.ReadLineFn = TableSettingsHandler_ReadLine;
+ ini_handler.ApplyAllFn = TableSettingsHandler_ApplyAll;
+ ini_handler.WriteAllFn = TableSettingsHandler_WriteAll;
+ AddSettingsHandler(&ini_handler);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Tables: Garbage Collection
+//-------------------------------------------------------------------------
+// - TableRemove() [Internal]
+// - TableGcCompactTransientBuffers() [Internal]
+// - TableGcCompactSettings() [Internal]
+//-------------------------------------------------------------------------
+
+// Remove Table (currently only used by TestEngine)
+void ImGui::TableRemove(ImGuiTable* table)
+{
+ //IMGUI_DEBUG_PRINT("TableRemove() id=0x%08X\n", table->ID);
+ ImGuiContext& g = *GImGui;
+ int table_idx = g.Tables.GetIndex(table);
+ //memset(table->RawData.Data, 0, table->RawData.size_in_bytes());
+ //memset(table, 0, sizeof(ImGuiTable));
+ g.Tables.Remove(table->ID, table);
+ g.TablesLastTimeActive[table_idx] = -1.0f;
+}
+
+// Free up/compact internal Table buffers for when it gets unused
+void ImGui::TableGcCompactTransientBuffers(ImGuiTable* table)
+{
+ //IMGUI_DEBUG_PRINT("TableGcCompactTransientBuffers() id=0x%08X\n", table->ID);
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(table->MemoryCompacted == false);
+ table->SortSpecs.Specs = NULL;
+ table->SortSpecsMulti.clear();
+ table->IsSortSpecsDirty = true; // FIXME: shouldn't have to leak into user performing a sort
+ table->ColumnsNames.clear();
+ table->MemoryCompacted = true;
+ for (int n = 0; n < table->ColumnsCount; n++)
+ table->Columns[n].NameOffset = -1;
+ g.TablesLastTimeActive[g.Tables.GetIndex(table)] = -1.0f;
+}
+
+void ImGui::TableGcCompactTransientBuffers(ImGuiTableTempData* temp_data)
+{
+ temp_data->DrawSplitter.ClearFreeMemory();
+ temp_data->LastTimeActive = -1.0f;
+}
+
+// Compact and remove unused settings data (currently only used by TestEngine)
+void ImGui::TableGcCompactSettings()
+{
+ ImGuiContext& g = *GImGui;
+ int required_memory = 0;
+ for (ImGuiTableSettings* settings = g.SettingsTables.begin(); settings != NULL; settings = g.SettingsTables.next_chunk(settings))
+ if (settings->ID != 0)
+ required_memory += (int)TableSettingsCalcChunkSize(settings->ColumnsCount);
+ if (required_memory == g.SettingsTables.Buf.Size)
+ return;
+ ImChunkStream<ImGuiTableSettings> new_chunk_stream;
+ new_chunk_stream.Buf.reserve(required_memory);
+ for (ImGuiTableSettings* settings = g.SettingsTables.begin(); settings != NULL; settings = g.SettingsTables.next_chunk(settings))
+ if (settings->ID != 0)
+ memcpy(new_chunk_stream.alloc_chunk(TableSettingsCalcChunkSize(settings->ColumnsCount)), settings, TableSettingsCalcChunkSize(settings->ColumnsCount));
+ g.SettingsTables.swap(new_chunk_stream);
+}
+
+
+//-------------------------------------------------------------------------
+// [SECTION] Tables: Debugging
+//-------------------------------------------------------------------------
+// - DebugNodeTable() [Internal]
+//-------------------------------------------------------------------------
+
+#ifndef IMGUI_DISABLE_DEBUG_TOOLS
+
+static const char* DebugNodeTableGetSizingPolicyDesc(ImGuiTableFlags sizing_policy)
+{
+ sizing_policy &= ImGuiTableFlags_SizingMask_;
+ if (sizing_policy == ImGuiTableFlags_SizingFixedFit) { return "FixedFit"; }
+ if (sizing_policy == ImGuiTableFlags_SizingFixedSame) { return "FixedSame"; }
+ if (sizing_policy == ImGuiTableFlags_SizingStretchProp) { return "StretchProp"; }
+ if (sizing_policy == ImGuiTableFlags_SizingStretchSame) { return "StretchSame"; }
+ return "N/A";
+}
+
+void ImGui::DebugNodeTable(ImGuiTable* table)
+{
+ char buf[512];
+ char* p = buf;
+ const char* buf_end = buf + IM_ARRAYSIZE(buf);
+ const bool is_active = (table->LastFrameActive >= ImGui::GetFrameCount() - 2); // Note that fully clipped early out scrolling tables will appear as inactive here.
+ ImFormatString(p, buf_end - p, "Table 0x%08X (%d columns, in '%s')%s", table->ID, table->ColumnsCount, table->OuterWindow->Name, is_active ? "" : " *Inactive*");
+ if (!is_active) { PushStyleColor(ImGuiCol_Text, GetStyleColorVec4(ImGuiCol_TextDisabled)); }
+ bool open = TreeNode(table, "%s", buf);
+ if (!is_active) { PopStyleColor(); }
+ if (IsItemHovered())
+ GetForegroundDrawList()->AddRect(table->OuterRect.Min, table->OuterRect.Max, IM_COL32(255, 255, 0, 255));
+ if (IsItemVisible() && table->HoveredColumnBody != -1)
+ GetForegroundDrawList()->AddRect(GetItemRectMin(), GetItemRectMax(), IM_COL32(255, 255, 0, 255));
+ if (!open)
+ return;
+ if (table->InstanceCurrent > 0)
+ ImGui::Text("** %d instances of same table! Some data below will refer to last instance.", table->InstanceCurrent + 1);
+ bool clear_settings = SmallButton("Clear settings");
+ BulletText("OuterRect: Pos: (%.1f,%.1f) Size: (%.1f,%.1f) Sizing: '%s'", table->OuterRect.Min.x, table->OuterRect.Min.y, table->OuterRect.GetWidth(), table->OuterRect.GetHeight(), DebugNodeTableGetSizingPolicyDesc(table->Flags));
+ BulletText("ColumnsGivenWidth: %.1f, ColumnsAutoFitWidth: %.1f, InnerWidth: %.1f%s", table->ColumnsGivenWidth, table->ColumnsAutoFitWidth, table->InnerWidth, table->InnerWidth == 0.0f ? " (auto)" : "");
+ BulletText("CellPaddingX: %.1f, CellSpacingX: %.1f/%.1f, OuterPaddingX: %.1f", table->CellPaddingX, table->CellSpacingX1, table->CellSpacingX2, table->OuterPaddingX);
+ BulletText("HoveredColumnBody: %d, HoveredColumnBorder: %d", table->HoveredColumnBody, table->HoveredColumnBorder);
+ BulletText("ResizedColumn: %d, ReorderColumn: %d, HeldHeaderColumn: %d", table->ResizedColumn, table->ReorderColumn, table->HeldHeaderColumn);
+ //BulletText("BgDrawChannels: %d/%d", 0, table->BgDrawChannelUnfrozen);
+ float sum_weights = 0.0f;
+ for (int n = 0; n < table->ColumnsCount; n++)
+ if (table->Columns[n].Flags & ImGuiTableColumnFlags_WidthStretch)
+ sum_weights += table->Columns[n].StretchWeight;
+ for (int n = 0; n < table->ColumnsCount; n++)
+ {
+ ImGuiTableColumn* column = &table->Columns[n];
+ const char* name = TableGetColumnName(table, n);
+ ImFormatString(buf, IM_ARRAYSIZE(buf),
+ "Column %d order %d '%s': offset %+.2f to %+.2f%s\n"
+ "Enabled: %d, VisibleX/Y: %d/%d, RequestOutput: %d, SkipItems: %d, DrawChannels: %d,%d\n"
+ "WidthGiven: %.1f, Request/Auto: %.1f/%.1f, StretchWeight: %.3f (%.1f%%)\n"
+ "MinX: %.1f, MaxX: %.1f (%+.1f), ClipRect: %.1f to %.1f (+%.1f)\n"
+ "ContentWidth: %.1f,%.1f, HeadersUsed/Ideal %.1f/%.1f\n"
+ "Sort: %d%s, UserID: 0x%08X, Flags: 0x%04X: %s%s%s..",
+ n, column->DisplayOrder, name, column->MinX - table->WorkRect.Min.x, column->MaxX - table->WorkRect.Min.x, (n < table->FreezeColumnsRequest) ? " (Frozen)" : "",
+ column->IsEnabled, column->IsVisibleX, column->IsVisibleY, column->IsRequestOutput, column->IsSkipItems, column->DrawChannelFrozen, column->DrawChannelUnfrozen,
+ column->WidthGiven, column->WidthRequest, column->WidthAuto, column->StretchWeight, column->StretchWeight > 0.0f ? (column->StretchWeight / sum_weights) * 100.0f : 0.0f,
+ column->MinX, column->MaxX, column->MaxX - column->MinX, column->ClipRect.Min.x, column->ClipRect.Max.x, column->ClipRect.Max.x - column->ClipRect.Min.x,
+ column->ContentMaxXFrozen - column->WorkMinX, column->ContentMaxXUnfrozen - column->WorkMinX, column->ContentMaxXHeadersUsed - column->WorkMinX, column->ContentMaxXHeadersIdeal - column->WorkMinX,
+ column->SortOrder, (column->SortDirection == ImGuiSortDirection_Ascending) ? " (Asc)" : (column->SortDirection == ImGuiSortDirection_Descending) ? " (Des)" : "", column->UserID, column->Flags,
+ (column->Flags & ImGuiTableColumnFlags_WidthStretch) ? "WidthStretch " : "",
+ (column->Flags & ImGuiTableColumnFlags_WidthFixed) ? "WidthFixed " : "",
+ (column->Flags & ImGuiTableColumnFlags_NoResize) ? "NoResize " : "");
+ Bullet();
+ Selectable(buf);
+ if (IsItemHovered())
+ {
+ ImRect r(column->MinX, table->OuterRect.Min.y, column->MaxX, table->OuterRect.Max.y);
+ GetForegroundDrawList()->AddRect(r.Min, r.Max, IM_COL32(255, 255, 0, 255));
+ }
+ }
+ if (ImGuiTableSettings* settings = TableGetBoundSettings(table))
+ DebugNodeTableSettings(settings);
+ if (clear_settings)
+ table->IsResetAllRequest = true;
+ TreePop();
+}
+
+void ImGui::DebugNodeTableSettings(ImGuiTableSettings* settings)
+{
+ if (!TreeNode((void*)(intptr_t)settings->ID, "Settings 0x%08X (%d columns)", settings->ID, settings->ColumnsCount))
+ return;
+ BulletText("SaveFlags: 0x%08X", settings->SaveFlags);
+ BulletText("ColumnsCount: %d (max %d)", settings->ColumnsCount, settings->ColumnsCountMax);
+ for (int n = 0; n < settings->ColumnsCount; n++)
+ {
+ ImGuiTableColumnSettings* column_settings = &settings->GetColumnSettings()[n];
+ ImGuiSortDirection sort_dir = (column_settings->SortOrder != -1) ? (ImGuiSortDirection)column_settings->SortDirection : ImGuiSortDirection_None;
+ BulletText("Column %d Order %d SortOrder %d %s Vis %d %s %7.3f UserID 0x%08X",
+ n, column_settings->DisplayOrder, column_settings->SortOrder,
+ (sort_dir == ImGuiSortDirection_Ascending) ? "Asc" : (sort_dir == ImGuiSortDirection_Descending) ? "Des" : "---",
+ column_settings->IsEnabled, column_settings->IsStretch ? "Weight" : "Width ", column_settings->WidthOrWeight, column_settings->UserID);
+ }
+ TreePop();
+}
+
+#else // #ifndef IMGUI_DISABLE_DEBUG_TOOLS
+
+void ImGui::DebugNodeTable(ImGuiTable*) {}
+void ImGui::DebugNodeTableSettings(ImGuiTableSettings*) {}
+
+#endif
+
+
+//-------------------------------------------------------------------------
+// [SECTION] Columns, BeginColumns, EndColumns, etc.
+// (This is a legacy API, prefer using BeginTable/EndTable!)
+//-------------------------------------------------------------------------
+// FIXME: sizing is lossy when columns width is very small (default width may turn negative etc.)
+//-------------------------------------------------------------------------
+// - SetWindowClipRectBeforeSetChannel() [Internal]
+// - GetColumnIndex()
+// - GetColumnsCount()
+// - GetColumnOffset()
+// - GetColumnWidth()
+// - SetColumnOffset()
+// - SetColumnWidth()
+// - PushColumnClipRect() [Internal]
+// - PushColumnsBackground() [Internal]
+// - PopColumnsBackground() [Internal]
+// - FindOrCreateColumns() [Internal]
+// - GetColumnsID() [Internal]
+// - BeginColumns()
+// - NextColumn()
+// - EndColumns()
+// - Columns()
+//-------------------------------------------------------------------------
+
+// [Internal] Small optimization to avoid calls to PopClipRect/SetCurrentChannel/PushClipRect in sequences,
+// they would meddle many times with the underlying ImDrawCmd.
+// Instead, we do a preemptive overwrite of clipping rectangle _without_ altering the command-buffer and let
+// the subsequent single call to SetCurrentChannel() does it things once.
+void ImGui::SetWindowClipRectBeforeSetChannel(ImGuiWindow* window, const ImRect& clip_rect)
+{
+ ImVec4 clip_rect_vec4 = clip_rect.ToVec4();
+ window->ClipRect = clip_rect;
+ window->DrawList->_CmdHeader.ClipRect = clip_rect_vec4;
+ window->DrawList->_ClipRectStack.Data[window->DrawList->_ClipRectStack.Size - 1] = clip_rect_vec4;
+}
+
+int ImGui::GetColumnIndex()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->DC.CurrentColumns ? window->DC.CurrentColumns->Current : 0;
+}
+
+int ImGui::GetColumnsCount()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ return window->DC.CurrentColumns ? window->DC.CurrentColumns->Count : 1;
+}
+
+float ImGui::GetColumnOffsetFromNorm(const ImGuiOldColumns* columns, float offset_norm)
+{
+ return offset_norm * (columns->OffMaxX - columns->OffMinX);
+}
+
+float ImGui::GetColumnNormFromOffset(const ImGuiOldColumns* columns, float offset)
+{
+ return offset / (columns->OffMaxX - columns->OffMinX);
+}
+
+static const float COLUMNS_HIT_RECT_HALF_WIDTH = 4.0f;
+
+static float GetDraggedColumnOffset(ImGuiOldColumns* columns, int column_index)
+{
+ // Active (dragged) column always follow mouse. The reason we need this is that dragging a column to the right edge of an auto-resizing
+ // window creates a feedback loop because we store normalized positions. So while dragging we enforce absolute positioning.
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ IM_ASSERT(column_index > 0); // We are not supposed to drag column 0.
+ IM_ASSERT(g.ActiveId == columns->ID + ImGuiID(column_index));
+
+ float x = g.IO.MousePos.x - g.ActiveIdClickOffset.x + COLUMNS_HIT_RECT_HALF_WIDTH - window->Pos.x;
+ x = ImMax(x, ImGui::GetColumnOffset(column_index - 1) + g.Style.ColumnsMinSpacing);
+ if ((columns->Flags & ImGuiOldColumnFlags_NoPreserveWidths))
+ x = ImMin(x, ImGui::GetColumnOffset(column_index + 1) - g.Style.ColumnsMinSpacing);
+
+ return x;
+}
+
+float ImGui::GetColumnOffset(int column_index)
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiOldColumns* columns = window->DC.CurrentColumns;
+ if (columns == NULL)
+ return 0.0f;
+
+ if (column_index < 0)
+ column_index = columns->Current;
+ IM_ASSERT(column_index < columns->Columns.Size);
+
+ const float t = columns->Columns[column_index].OffsetNorm;
+ const float x_offset = ImLerp(columns->OffMinX, columns->OffMaxX, t);
+ return x_offset;
+}
+
+static float GetColumnWidthEx(ImGuiOldColumns* columns, int column_index, bool before_resize = false)
+{
+ if (column_index < 0)
+ column_index = columns->Current;
+
+ float offset_norm;
+ if (before_resize)
+ offset_norm = columns->Columns[column_index + 1].OffsetNormBeforeResize - columns->Columns[column_index].OffsetNormBeforeResize;
+ else
+ offset_norm = columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm;
+ return ImGui::GetColumnOffsetFromNorm(columns, offset_norm);
+}
+
+float ImGui::GetColumnWidth(int column_index)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiOldColumns* columns = window->DC.CurrentColumns;
+ if (columns == NULL)
+ return GetContentRegionAvail().x;
+
+ if (column_index < 0)
+ column_index = columns->Current;
+ return GetColumnOffsetFromNorm(columns, columns->Columns[column_index + 1].OffsetNorm - columns->Columns[column_index].OffsetNorm);
+}
+
+void ImGui::SetColumnOffset(int column_index, float offset)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiOldColumns* columns = window->DC.CurrentColumns;
+ IM_ASSERT(columns != NULL);
+
+ if (column_index < 0)
+ column_index = columns->Current;
+ IM_ASSERT(column_index < columns->Columns.Size);
+
+ const bool preserve_width = !(columns->Flags & ImGuiOldColumnFlags_NoPreserveWidths) && (column_index < columns->Count - 1);
+ const float width = preserve_width ? GetColumnWidthEx(columns, column_index, columns->IsBeingResized) : 0.0f;
+
+ if (!(columns->Flags & ImGuiOldColumnFlags_NoForceWithinWindow))
+ offset = ImMin(offset, columns->OffMaxX - g.Style.ColumnsMinSpacing * (columns->Count - column_index));
+ columns->Columns[column_index].OffsetNorm = GetColumnNormFromOffset(columns, offset - columns->OffMinX);
+
+ if (preserve_width)
+ SetColumnOffset(column_index + 1, offset + ImMax(g.Style.ColumnsMinSpacing, width));
+}
+
+void ImGui::SetColumnWidth(int column_index, float width)
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiOldColumns* columns = window->DC.CurrentColumns;
+ IM_ASSERT(columns != NULL);
+
+ if (column_index < 0)
+ column_index = columns->Current;
+ SetColumnOffset(column_index + 1, GetColumnOffset(column_index) + width);
+}
+
+void ImGui::PushColumnClipRect(int column_index)
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiOldColumns* columns = window->DC.CurrentColumns;
+ if (column_index < 0)
+ column_index = columns->Current;
+
+ ImGuiOldColumnData* column = &columns->Columns[column_index];
+ PushClipRect(column->ClipRect.Min, column->ClipRect.Max, false);
+}
+
+// Get into the columns background draw command (which is generally the same draw command as before we called BeginColumns)
+void ImGui::PushColumnsBackground()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiOldColumns* columns = window->DC.CurrentColumns;
+ if (columns->Count == 1)
+ return;
+
+ // Optimization: avoid SetCurrentChannel() + PushClipRect()
+ columns->HostBackupClipRect = window->ClipRect;
+ SetWindowClipRectBeforeSetChannel(window, columns->HostInitialClipRect);
+ columns->Splitter.SetCurrentChannel(window->DrawList, 0);
+}
+
+void ImGui::PopColumnsBackground()
+{
+ ImGuiWindow* window = GetCurrentWindowRead();
+ ImGuiOldColumns* columns = window->DC.CurrentColumns;
+ if (columns->Count == 1)
+ return;
+
+ // Optimization: avoid PopClipRect() + SetCurrentChannel()
+ SetWindowClipRectBeforeSetChannel(window, columns->HostBackupClipRect);
+ columns->Splitter.SetCurrentChannel(window->DrawList, columns->Current + 1);
+}
+
+ImGuiOldColumns* ImGui::FindOrCreateColumns(ImGuiWindow* window, ImGuiID id)
+{
+ // We have few columns per window so for now we don't need bother much with turning this into a faster lookup.
+ for (int n = 0; n < window->ColumnsStorage.Size; n++)
+ if (window->ColumnsStorage[n].ID == id)
+ return &window->ColumnsStorage[n];
+
+ window->ColumnsStorage.push_back(ImGuiOldColumns());
+ ImGuiOldColumns* columns = &window->ColumnsStorage.back();
+ columns->ID = id;
+ return columns;
+}
+
+ImGuiID ImGui::GetColumnsID(const char* str_id, int columns_count)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+
+ // Differentiate column ID with an arbitrary prefix for cases where users name their columns set the same as another widget.
+ // In addition, when an identifier isn't explicitly provided we include the number of columns in the hash to make it uniquer.
+ PushID(0x11223347 + (str_id ? 0 : columns_count));
+ ImGuiID id = window->GetID(str_id ? str_id : "columns");
+ PopID();
+
+ return id;
+}
+
+void ImGui::BeginColumns(const char* str_id, int columns_count, ImGuiOldColumnFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+
+ IM_ASSERT(columns_count >= 1);
+ IM_ASSERT(window->DC.CurrentColumns == NULL); // Nested columns are currently not supported
+
+ // Acquire storage for the columns set
+ ImGuiID id = GetColumnsID(str_id, columns_count);
+ ImGuiOldColumns* columns = FindOrCreateColumns(window, id);
+ IM_ASSERT(columns->ID == id);
+ columns->Current = 0;
+ columns->Count = columns_count;
+ columns->Flags = flags;
+ window->DC.CurrentColumns = columns;
+
+ columns->HostCursorPosY = window->DC.CursorPos.y;
+ columns->HostCursorMaxPosX = window->DC.CursorMaxPos.x;
+ columns->HostInitialClipRect = window->ClipRect;
+ columns->HostBackupParentWorkRect = window->ParentWorkRect;
+ window->ParentWorkRect = window->WorkRect;
+
+ // Set state for first column
+ // We aim so that the right-most column will have the same clipping width as other after being clipped by parent ClipRect
+ const float column_padding = g.Style.ItemSpacing.x;
+ const float half_clip_extend_x = ImFloor(ImMax(window->WindowPadding.x * 0.5f, window->WindowBorderSize));
+ const float max_1 = window->WorkRect.Max.x + column_padding - ImMax(column_padding - window->WindowPadding.x, 0.0f);
+ const float max_2 = window->WorkRect.Max.x + half_clip_extend_x;
+ columns->OffMinX = window->DC.Indent.x - column_padding + ImMax(column_padding - window->WindowPadding.x, 0.0f);
+ columns->OffMaxX = ImMax(ImMin(max_1, max_2) - window->Pos.x, columns->OffMinX + 1.0f);
+ columns->LineMinY = columns->LineMaxY = window->DC.CursorPos.y;
+
+ // Clear data if columns count changed
+ if (columns->Columns.Size != 0 && columns->Columns.Size != columns_count + 1)
+ columns->Columns.resize(0);
+
+ // Initialize default widths
+ columns->IsFirstFrame = (columns->Columns.Size == 0);
+ if (columns->Columns.Size == 0)
+ {
+ columns->Columns.reserve(columns_count + 1);
+ for (int n = 0; n < columns_count + 1; n++)
+ {
+ ImGuiOldColumnData column;
+ column.OffsetNorm = n / (float)columns_count;
+ columns->Columns.push_back(column);
+ }
+ }
+
+ for (int n = 0; n < columns_count; n++)
+ {
+ // Compute clipping rectangle
+ ImGuiOldColumnData* column = &columns->Columns[n];
+ float clip_x1 = IM_ROUND(window->Pos.x + GetColumnOffset(n));
+ float clip_x2 = IM_ROUND(window->Pos.x + GetColumnOffset(n + 1) - 1.0f);
+ column->ClipRect = ImRect(clip_x1, -FLT_MAX, clip_x2, +FLT_MAX);
+ column->ClipRect.ClipWithFull(window->ClipRect);
+ }
+
+ if (columns->Count > 1)
+ {
+ columns->Splitter.Split(window->DrawList, 1 + columns->Count);
+ columns->Splitter.SetCurrentChannel(window->DrawList, 1);
+ PushColumnClipRect(0);
+ }
+
+ // We don't generally store Indent.x inside ColumnsOffset because it may be manipulated by the user.
+ float offset_0 = GetColumnOffset(columns->Current);
+ float offset_1 = GetColumnOffset(columns->Current + 1);
+ float width = offset_1 - offset_0;
+ PushItemWidth(width * 0.65f);
+ window->DC.ColumnsOffset.x = ImMax(column_padding - window->WindowPadding.x, 0.0f);
+ window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+ window->WorkRect.Max.x = window->Pos.x + offset_1 - column_padding;
+}
+
+void ImGui::NextColumn()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems || window->DC.CurrentColumns == NULL)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ ImGuiOldColumns* columns = window->DC.CurrentColumns;
+
+ if (columns->Count == 1)
+ {
+ window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+ IM_ASSERT(columns->Current == 0);
+ return;
+ }
+
+ // Next column
+ if (++columns->Current == columns->Count)
+ columns->Current = 0;
+
+ PopItemWidth();
+
+ // Optimization: avoid PopClipRect() + SetCurrentChannel() + PushClipRect()
+ // (which would needlessly attempt to update commands in the wrong channel, then pop or overwrite them),
+ ImGuiOldColumnData* column = &columns->Columns[columns->Current];
+ SetWindowClipRectBeforeSetChannel(window, column->ClipRect);
+ columns->Splitter.SetCurrentChannel(window->DrawList, columns->Current + 1);
+
+ const float column_padding = g.Style.ItemSpacing.x;
+ columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y);
+ if (columns->Current > 0)
+ {
+ // Columns 1+ ignore IndentX (by canceling it out)
+ // FIXME-COLUMNS: Unnecessary, could be locked?
+ window->DC.ColumnsOffset.x = GetColumnOffset(columns->Current) - window->DC.Indent.x + column_padding;
+ }
+ else
+ {
+ // New row/line: column 0 honor IndentX.
+ window->DC.ColumnsOffset.x = ImMax(column_padding - window->WindowPadding.x, 0.0f);
+ columns->LineMinY = columns->LineMaxY;
+ }
+ window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+ window->DC.CursorPos.y = columns->LineMinY;
+ window->DC.CurrLineSize = ImVec2(0.0f, 0.0f);
+ window->DC.CurrLineTextBaseOffset = 0.0f;
+
+ // FIXME-COLUMNS: Share code with BeginColumns() - move code on columns setup.
+ float offset_0 = GetColumnOffset(columns->Current);
+ float offset_1 = GetColumnOffset(columns->Current + 1);
+ float width = offset_1 - offset_0;
+ PushItemWidth(width * 0.65f);
+ window->WorkRect.Max.x = window->Pos.x + offset_1 - column_padding;
+}
+
+void ImGui::EndColumns()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ ImGuiOldColumns* columns = window->DC.CurrentColumns;
+ IM_ASSERT(columns != NULL);
+
+ PopItemWidth();
+ if (columns->Count > 1)
+ {
+ PopClipRect();
+ columns->Splitter.Merge(window->DrawList);
+ }
+
+ const ImGuiOldColumnFlags flags = columns->Flags;
+ columns->LineMaxY = ImMax(columns->LineMaxY, window->DC.CursorPos.y);
+ window->DC.CursorPos.y = columns->LineMaxY;
+ if (!(flags & ImGuiOldColumnFlags_GrowParentContentsSize))
+ window->DC.CursorMaxPos.x = columns->HostCursorMaxPosX; // Restore cursor max pos, as columns don't grow parent
+
+ // Draw columns borders and handle resize
+ // The IsBeingResized flag ensure we preserve pre-resize columns width so back-and-forth are not lossy
+ bool is_being_resized = false;
+ if (!(flags & ImGuiOldColumnFlags_NoBorder) && !window->SkipItems)
+ {
+ // We clip Y boundaries CPU side because very long triangles are mishandled by some GPU drivers.
+ const float y1 = ImMax(columns->HostCursorPosY, window->ClipRect.Min.y);
+ const float y2 = ImMin(window->DC.CursorPos.y, window->ClipRect.Max.y);
+ int dragging_column = -1;
+ for (int n = 1; n < columns->Count; n++)
+ {
+ ImGuiOldColumnData* column = &columns->Columns[n];
+ float x = window->Pos.x + GetColumnOffset(n);
+ const ImGuiID column_id = columns->ID + ImGuiID(n);
+ const float column_hit_hw = COLUMNS_HIT_RECT_HALF_WIDTH;
+ const ImRect column_hit_rect(ImVec2(x - column_hit_hw, y1), ImVec2(x + column_hit_hw, y2));
+ KeepAliveID(column_id);
+ if (IsClippedEx(column_hit_rect, column_id)) // FIXME: Can be removed or replaced with a lower-level test
+ continue;
+
+ bool hovered = false, held = false;
+ if (!(flags & ImGuiOldColumnFlags_NoResize))
+ {
+ ButtonBehavior(column_hit_rect, column_id, &hovered, &held);
+ if (hovered || held)
+ g.MouseCursor = ImGuiMouseCursor_ResizeEW;
+ if (held && !(column->Flags & ImGuiOldColumnFlags_NoResize))
+ dragging_column = n;
+ }
+
+ // Draw column
+ const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : hovered ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);
+ const float xi = IM_FLOOR(x);
+ window->DrawList->AddLine(ImVec2(xi, y1 + 1.0f), ImVec2(xi, y2), col);
+ }
+
+ // Apply dragging after drawing the column lines, so our rendered lines are in sync with how items were displayed during the frame.
+ if (dragging_column != -1)
+ {
+ if (!columns->IsBeingResized)
+ for (int n = 0; n < columns->Count + 1; n++)
+ columns->Columns[n].OffsetNormBeforeResize = columns->Columns[n].OffsetNorm;
+ columns->IsBeingResized = is_being_resized = true;
+ float x = GetDraggedColumnOffset(columns, dragging_column);
+ SetColumnOffset(dragging_column, x);
+ }
+ }
+ columns->IsBeingResized = is_being_resized;
+
+ window->WorkRect = window->ParentWorkRect;
+ window->ParentWorkRect = columns->HostBackupParentWorkRect;
+ window->DC.CurrentColumns = NULL;
+ window->DC.ColumnsOffset.x = 0.0f;
+ window->DC.CursorPos.x = IM_FLOOR(window->Pos.x + window->DC.Indent.x + window->DC.ColumnsOffset.x);
+}
+
+void ImGui::Columns(int columns_count, const char* id, bool border)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ IM_ASSERT(columns_count >= 1);
+
+ ImGuiOldColumnFlags flags = (border ? 0 : ImGuiOldColumnFlags_NoBorder);
+ //flags |= ImGuiOldColumnFlags_NoPreserveWidths; // NB: Legacy behavior
+ ImGuiOldColumns* columns = window->DC.CurrentColumns;
+ if (columns != NULL && columns->Count == columns_count && columns->Flags == flags)
+ return;
+
+ if (columns != NULL)
+ EndColumns();
+
+ if (columns_count != 1)
+ BeginColumns(id, columns_count, flags);
+}
+
+//-------------------------------------------------------------------------
+
+#endif // #ifndef IMGUI_DISABLE
diff --git a/tests/manual/rhi/shared/imgui/imgui/imgui_widgets.cpp b/tests/manual/rhi/shared/imgui/imgui/imgui_widgets.cpp
new file mode 100644
index 0000000000..ef91630f23
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/imgui_widgets.cpp
@@ -0,0 +1,8394 @@
+// dear imgui, v1.88
+// (widgets code)
+
+/*
+
+Index of this file:
+
+// [SECTION] Forward Declarations
+// [SECTION] Widgets: Text, etc.
+// [SECTION] Widgets: Main (Button, Image, Checkbox, RadioButton, ProgressBar, Bullet, etc.)
+// [SECTION] Widgets: Low-level Layout helpers (Spacing, Dummy, NewLine, Separator, etc.)
+// [SECTION] Widgets: ComboBox
+// [SECTION] Data Type and Data Formatting Helpers
+// [SECTION] Widgets: DragScalar, DragFloat, DragInt, etc.
+// [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc.
+// [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc.
+// [SECTION] Widgets: InputText, InputTextMultiline
+// [SECTION] Widgets: ColorEdit, ColorPicker, ColorButton, etc.
+// [SECTION] Widgets: TreeNode, CollapsingHeader, etc.
+// [SECTION] Widgets: Selectable
+// [SECTION] Widgets: ListBox
+// [SECTION] Widgets: PlotLines, PlotHistogram
+// [SECTION] Widgets: Value helpers
+// [SECTION] Widgets: MenuItem, BeginMenu, EndMenu, etc.
+// [SECTION] Widgets: BeginTabBar, EndTabBar, etc.
+// [SECTION] Widgets: BeginTabItem, EndTabItem, etc.
+// [SECTION] Widgets: Columns, BeginColumns, EndColumns, etc.
+
+*/
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#include "imgui.h"
+#ifndef IMGUI_DISABLE
+
+#ifndef IMGUI_DEFINE_MATH_OPERATORS
+#define IMGUI_DEFINE_MATH_OPERATORS
+#endif
+#include "imgui_internal.h"
+
+// System includes
+#include <ctype.h> // toupper
+#if defined(_MSC_VER) && _MSC_VER <= 1500 // MSVC 2008 or earlier
+#include <stddef.h> // intptr_t
+#else
+#include <stdint.h> // intptr_t
+#endif
+
+//-------------------------------------------------------------------------
+// Warnings
+//-------------------------------------------------------------------------
+
+// Visual Studio warnings
+#ifdef _MSC_VER
+#pragma warning (disable: 4127) // condition expression is constant
+#pragma warning (disable: 4996) // 'This function or variable may be unsafe': strcpy, strdup, sprintf, vsnprintf, sscanf, fopen
+#if defined(_MSC_VER) && _MSC_VER >= 1922 // MSVC 2019 16.2 or later
+#pragma warning (disable: 5054) // operator '|': deprecated between enumerations of different types
+#endif
+#pragma warning (disable: 26451) // [Static Analyzer] Arithmetic overflow : Using operator 'xxx' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling operator 'xxx' to avoid overflow(io.2).
+#pragma warning (disable: 26812) // [Static Analyzer] The enum type 'xxx' is unscoped. Prefer 'enum class' over 'enum' (Enum.3).
+#endif
+
+// Clang/GCC warnings with -Weverything
+#if defined(__clang__)
+#if __has_warning("-Wunknown-warning-option")
+#pragma clang diagnostic ignored "-Wunknown-warning-option" // warning: unknown warning group 'xxx' // not all warnings are known by all Clang versions and they tend to be rename-happy.. so ignoring warnings triggers new warnings on some configuration. Great!
+#endif
+#pragma clang diagnostic ignored "-Wunknown-pragmas" // warning: unknown warning group 'xxx'
+#pragma clang diagnostic ignored "-Wold-style-cast" // warning: use of old-style cast // yes, they are more terse.
+#pragma clang diagnostic ignored "-Wfloat-equal" // warning: comparing floating point with == or != is unsafe // storing and comparing against same constants (typically 0.0f) is ok.
+#pragma clang diagnostic ignored "-Wformat-nonliteral" // warning: format string is not a string literal // passing non-literal to vsnformat(). yes, user passing incorrect format strings can crash the code.
+#pragma clang diagnostic ignored "-Wsign-conversion" // warning: implicit conversion changes signedness
+#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant" // warning: zero as null pointer constant // some standard header variations use #define NULL 0
+#pragma clang diagnostic ignored "-Wdouble-promotion" // warning: implicit conversion from 'float' to 'double' when passing argument to function // using printf() is a misery with this as C++ va_arg ellipsis changes float to double.
+#pragma clang diagnostic ignored "-Wenum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_')
+#pragma clang diagnostic ignored "-Wdeprecated-enum-enum-conversion"// warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated
+#pragma clang diagnostic ignored "-Wimplicit-int-float-conversion" // warning: implicit conversion from 'xxx' to 'float' may lose precision
+#elif defined(__GNUC__)
+#pragma GCC diagnostic ignored "-Wpragmas" // warning: unknown option after '#pragma GCC diagnostic' kind
+#pragma GCC diagnostic ignored "-Wformat-nonliteral" // warning: format not a string literal, format string not checked
+#pragma GCC diagnostic ignored "-Wclass-memaccess" // [__GNUC__ >= 8] warning: 'memset/memcpy' clearing/writing an object of type 'xxxx' with no trivial copy-assignment; use assignment or value-initialization instead
+#pragma GCC diagnostic ignored "-Wdeprecated-enum-enum-conversion" // warning: bitwise operation between different enumeration types ('XXXFlags_' and 'XXXFlagsPrivate_') is deprecated
+#endif
+
+//-------------------------------------------------------------------------
+// Data
+//-------------------------------------------------------------------------
+
+// Widgets
+static const float DRAGDROP_HOLD_TO_OPEN_TIMER = 0.70f; // Time for drag-hold to activate items accepting the ImGuiButtonFlags_PressedOnDragDropHold button behavior.
+static const float DRAG_MOUSE_THRESHOLD_FACTOR = 0.50f; // Multiplier for the default value of io.MouseDragThreshold to make DragFloat/DragInt react faster to mouse drags.
+
+// Those MIN/MAX values are not define because we need to point to them
+static const signed char IM_S8_MIN = -128;
+static const signed char IM_S8_MAX = 127;
+static const unsigned char IM_U8_MIN = 0;
+static const unsigned char IM_U8_MAX = 0xFF;
+static const signed short IM_S16_MIN = -32768;
+static const signed short IM_S16_MAX = 32767;
+static const unsigned short IM_U16_MIN = 0;
+static const unsigned short IM_U16_MAX = 0xFFFF;
+static const ImS32 IM_S32_MIN = INT_MIN; // (-2147483647 - 1), (0x80000000);
+static const ImS32 IM_S32_MAX = INT_MAX; // (2147483647), (0x7FFFFFFF)
+static const ImU32 IM_U32_MIN = 0;
+static const ImU32 IM_U32_MAX = UINT_MAX; // (0xFFFFFFFF)
+#ifdef LLONG_MIN
+static const ImS64 IM_S64_MIN = LLONG_MIN; // (-9223372036854775807ll - 1ll);
+static const ImS64 IM_S64_MAX = LLONG_MAX; // (9223372036854775807ll);
+#else
+static const ImS64 IM_S64_MIN = -9223372036854775807LL - 1;
+static const ImS64 IM_S64_MAX = 9223372036854775807LL;
+#endif
+static const ImU64 IM_U64_MIN = 0;
+#ifdef ULLONG_MAX
+static const ImU64 IM_U64_MAX = ULLONG_MAX; // (0xFFFFFFFFFFFFFFFFull);
+#else
+static const ImU64 IM_U64_MAX = (2ULL * 9223372036854775807LL + 1);
+#endif
+
+//-------------------------------------------------------------------------
+// [SECTION] Forward Declarations
+//-------------------------------------------------------------------------
+
+// For InputTextEx()
+static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data, ImGuiInputSource input_source);
+static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end);
+static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining = NULL, ImVec2* out_offset = NULL, bool stop_on_new_line = false);
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Text, etc.
+//-------------------------------------------------------------------------
+// - TextEx() [Internal]
+// - TextUnformatted()
+// - Text()
+// - TextV()
+// - TextColored()
+// - TextColoredV()
+// - TextDisabled()
+// - TextDisabledV()
+// - TextWrapped()
+// - TextWrappedV()
+// - LabelText()
+// - LabelTextV()
+// - BulletText()
+// - BulletTextV()
+//-------------------------------------------------------------------------
+
+void ImGui::TextEx(const char* text, const char* text_end, ImGuiTextFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+ ImGuiContext& g = *GImGui;
+
+ // Accept null ranges
+ if (text == text_end)
+ text = text_end = "";
+
+ // Calculate length
+ const char* text_begin = text;
+ if (text_end == NULL)
+ text_end = text + strlen(text); // FIXME-OPT
+
+ const ImVec2 text_pos(window->DC.CursorPos.x, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset);
+ const float wrap_pos_x = window->DC.TextWrapPos;
+ const bool wrap_enabled = (wrap_pos_x >= 0.0f);
+ if (text_end - text <= 2000 || wrap_enabled)
+ {
+ // Common case
+ const float wrap_width = wrap_enabled ? CalcWrapWidthForPos(window->DC.CursorPos, wrap_pos_x) : 0.0f;
+ const ImVec2 text_size = CalcTextSize(text_begin, text_end, false, wrap_width);
+
+ ImRect bb(text_pos, text_pos + text_size);
+ ItemSize(text_size, 0.0f);
+ if (!ItemAdd(bb, 0))
+ return;
+
+ // Render (we don't hide text after ## in this end-user function)
+ RenderTextWrapped(bb.Min, text_begin, text_end, wrap_width);
+ }
+ else
+ {
+ // Long text!
+ // Perform manual coarse clipping to optimize for long multi-line text
+ // - From this point we will only compute the width of lines that are visible. Optimization only available when word-wrapping is disabled.
+ // - We also don't vertically center the text within the line full height, which is unlikely to matter because we are likely the biggest and only item on the line.
+ // - We use memchr(), pay attention that well optimized versions of those str/mem functions are much faster than a casually written loop.
+ const char* line = text;
+ const float line_height = GetTextLineHeight();
+ ImVec2 text_size(0, 0);
+
+ // Lines to skip (can't skip when logging text)
+ ImVec2 pos = text_pos;
+ if (!g.LogEnabled)
+ {
+ int lines_skippable = (int)((window->ClipRect.Min.y - text_pos.y) / line_height);
+ if (lines_skippable > 0)
+ {
+ int lines_skipped = 0;
+ while (line < text_end && lines_skipped < lines_skippable)
+ {
+ const char* line_end = (const char*)memchr(line, '\n', text_end - line);
+ if (!line_end)
+ line_end = text_end;
+ if ((flags & ImGuiTextFlags_NoWidthForLargeClippedText) == 0)
+ text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
+ line = line_end + 1;
+ lines_skipped++;
+ }
+ pos.y += lines_skipped * line_height;
+ }
+ }
+
+ // Lines to render
+ if (line < text_end)
+ {
+ ImRect line_rect(pos, pos + ImVec2(FLT_MAX, line_height));
+ while (line < text_end)
+ {
+ if (IsClippedEx(line_rect, 0))
+ break;
+
+ const char* line_end = (const char*)memchr(line, '\n', text_end - line);
+ if (!line_end)
+ line_end = text_end;
+ text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
+ RenderText(pos, line, line_end, false);
+ line = line_end + 1;
+ line_rect.Min.y += line_height;
+ line_rect.Max.y += line_height;
+ pos.y += line_height;
+ }
+
+ // Count remaining lines
+ int lines_skipped = 0;
+ while (line < text_end)
+ {
+ const char* line_end = (const char*)memchr(line, '\n', text_end - line);
+ if (!line_end)
+ line_end = text_end;
+ if ((flags & ImGuiTextFlags_NoWidthForLargeClippedText) == 0)
+ text_size.x = ImMax(text_size.x, CalcTextSize(line, line_end).x);
+ line = line_end + 1;
+ lines_skipped++;
+ }
+ pos.y += lines_skipped * line_height;
+ }
+ text_size.y = (pos - text_pos).y;
+
+ ImRect bb(text_pos, text_pos + text_size);
+ ItemSize(text_size, 0.0f);
+ ItemAdd(bb, 0);
+ }
+}
+
+void ImGui::TextUnformatted(const char* text, const char* text_end)
+{
+ TextEx(text, text_end, ImGuiTextFlags_NoWidthForLargeClippedText);
+}
+
+void ImGui::Text(const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ TextV(fmt, args);
+ va_end(args);
+}
+
+void ImGui::TextV(const char* fmt, va_list args)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+
+ // FIXME-OPT: Handle the %s shortcut?
+ const char* text, *text_end;
+ ImFormatStringToTempBufferV(&text, &text_end, fmt, args);
+ TextEx(text, text_end, ImGuiTextFlags_NoWidthForLargeClippedText);
+}
+
+void ImGui::TextColored(const ImVec4& col, const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ TextColoredV(col, fmt, args);
+ va_end(args);
+}
+
+void ImGui::TextColoredV(const ImVec4& col, const char* fmt, va_list args)
+{
+ PushStyleColor(ImGuiCol_Text, col);
+ if (fmt[0] == '%' && fmt[1] == 's' && fmt[2] == 0)
+ TextEx(va_arg(args, const char*), NULL, ImGuiTextFlags_NoWidthForLargeClippedText); // Skip formatting
+ else
+ TextV(fmt, args);
+ PopStyleColor();
+}
+
+void ImGui::TextDisabled(const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ TextDisabledV(fmt, args);
+ va_end(args);
+}
+
+void ImGui::TextDisabledV(const char* fmt, va_list args)
+{
+ ImGuiContext& g = *GImGui;
+ PushStyleColor(ImGuiCol_Text, g.Style.Colors[ImGuiCol_TextDisabled]);
+ if (fmt[0] == '%' && fmt[1] == 's' && fmt[2] == 0)
+ TextEx(va_arg(args, const char*), NULL, ImGuiTextFlags_NoWidthForLargeClippedText); // Skip formatting
+ else
+ TextV(fmt, args);
+ PopStyleColor();
+}
+
+void ImGui::TextWrapped(const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ TextWrappedV(fmt, args);
+ va_end(args);
+}
+
+void ImGui::TextWrappedV(const char* fmt, va_list args)
+{
+ ImGuiContext& g = *GImGui;
+ bool need_backup = (g.CurrentWindow->DC.TextWrapPos < 0.0f); // Keep existing wrap position if one is already set
+ if (need_backup)
+ PushTextWrapPos(0.0f);
+ if (fmt[0] == '%' && fmt[1] == 's' && fmt[2] == 0)
+ TextEx(va_arg(args, const char*), NULL, ImGuiTextFlags_NoWidthForLargeClippedText); // Skip formatting
+ else
+ TextV(fmt, args);
+ if (need_backup)
+ PopTextWrapPos();
+}
+
+void ImGui::LabelText(const char* label, const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ LabelTextV(label, fmt, args);
+ va_end(args);
+}
+
+// Add a label+text combo aligned to other label+value widgets
+void ImGui::LabelTextV(const char* label, const char* fmt, va_list args)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ const float w = CalcItemWidth();
+
+ const char* value_text_begin, *value_text_end;
+ ImFormatStringToTempBufferV(&value_text_begin, &value_text_end, fmt, args);
+ const ImVec2 value_size = CalcTextSize(value_text_begin, value_text_end, false);
+ const ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+ const ImVec2 pos = window->DC.CursorPos;
+ const ImRect value_bb(pos, pos + ImVec2(w, value_size.y + style.FramePadding.y * 2));
+ const ImRect total_bb(pos, pos + ImVec2(w + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), ImMax(value_size.y, label_size.y) + style.FramePadding.y * 2));
+ ItemSize(total_bb, style.FramePadding.y);
+ if (!ItemAdd(total_bb, 0))
+ return;
+
+ // Render
+ RenderTextClipped(value_bb.Min + style.FramePadding, value_bb.Max, value_text_begin, value_text_end, &value_size, ImVec2(0.0f, 0.0f));
+ if (label_size.x > 0.0f)
+ RenderText(ImVec2(value_bb.Max.x + style.ItemInnerSpacing.x, value_bb.Min.y + style.FramePadding.y), label);
+}
+
+void ImGui::BulletText(const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ BulletTextV(fmt, args);
+ va_end(args);
+}
+
+// Text with a little bullet aligned to the typical tree node.
+void ImGui::BulletTextV(const char* fmt, va_list args)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+
+ const char* text_begin, *text_end;
+ ImFormatStringToTempBufferV(&text_begin, &text_end, fmt, args);
+ const ImVec2 label_size = CalcTextSize(text_begin, text_end, false);
+ const ImVec2 total_size = ImVec2(g.FontSize + (label_size.x > 0.0f ? (label_size.x + style.FramePadding.x * 2) : 0.0f), label_size.y); // Empty text doesn't add padding
+ ImVec2 pos = window->DC.CursorPos;
+ pos.y += window->DC.CurrLineTextBaseOffset;
+ ItemSize(total_size, 0.0f);
+ const ImRect bb(pos, pos + total_size);
+ if (!ItemAdd(bb, 0))
+ return;
+
+ // Render
+ ImU32 text_col = GetColorU32(ImGuiCol_Text);
+ RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize * 0.5f, g.FontSize * 0.5f), text_col);
+ RenderText(bb.Min + ImVec2(g.FontSize + style.FramePadding.x * 2, 0.0f), text_begin, text_end, false);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Main
+//-------------------------------------------------------------------------
+// - ButtonBehavior() [Internal]
+// - Button()
+// - SmallButton()
+// - InvisibleButton()
+// - ArrowButton()
+// - CloseButton() [Internal]
+// - CollapseButton() [Internal]
+// - GetWindowScrollbarID() [Internal]
+// - GetWindowScrollbarRect() [Internal]
+// - Scrollbar() [Internal]
+// - ScrollbarEx() [Internal]
+// - Image()
+// - ImageButton()
+// - Checkbox()
+// - CheckboxFlagsT() [Internal]
+// - CheckboxFlags()
+// - RadioButton()
+// - ProgressBar()
+// - Bullet()
+//-------------------------------------------------------------------------
+
+// The ButtonBehavior() function is key to many interactions and used by many/most widgets.
+// Because we handle so many cases (keyboard/gamepad navigation, drag and drop) and many specific behavior (via ImGuiButtonFlags_),
+// this code is a little complex.
+// By far the most common path is interacting with the Mouse using the default ImGuiButtonFlags_PressedOnClickRelease button behavior.
+// See the series of events below and the corresponding state reported by dear imgui:
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnClickRelease: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked()
+// Frame N+0 (mouse is outside bb) - - - - - -
+// Frame N+1 (mouse moves inside bb) - true - - - -
+// Frame N+2 (mouse button is down) - true true true - true
+// Frame N+3 (mouse button is down) - true true - - -
+// Frame N+4 (mouse moves outside bb) - - true - - -
+// Frame N+5 (mouse moves inside bb) - true true - - -
+// Frame N+6 (mouse button is released) true true - - true -
+// Frame N+7 (mouse button is released) - true - - - -
+// Frame N+8 (mouse moves outside bb) - - - - - -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnClick: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked()
+// Frame N+2 (mouse button is down) true true true true - true
+// Frame N+3 (mouse button is down) - true true - - -
+// Frame N+6 (mouse button is released) - true - - true -
+// Frame N+7 (mouse button is released) - true - - - -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnRelease: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked()
+// Frame N+2 (mouse button is down) - true - - - true
+// Frame N+3 (mouse button is down) - true - - - -
+// Frame N+6 (mouse button is released) true true - - - -
+// Frame N+7 (mouse button is released) - true - - - -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// with PressedOnDoubleClick: return-value IsItemHovered() IsItemActive() IsItemActivated() IsItemDeactivated() IsItemClicked()
+// Frame N+0 (mouse button is down) - true - - - true
+// Frame N+1 (mouse button is down) - true - - - -
+// Frame N+2 (mouse button is released) - true - - - -
+// Frame N+3 (mouse button is released) - true - - - -
+// Frame N+4 (mouse button is down) true true true true - true
+// Frame N+5 (mouse button is down) - true true - - -
+// Frame N+6 (mouse button is released) - true - - true -
+// Frame N+7 (mouse button is released) - true - - - -
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// Note that some combinations are supported,
+// - PressedOnDragDropHold can generally be associated with any flag.
+// - PressedOnDoubleClick can be associated by PressedOnClickRelease/PressedOnRelease, in which case the second release event won't be reported.
+//------------------------------------------------------------------------------------------------------------------------------------------------
+// The behavior of the return-value changes when ImGuiButtonFlags_Repeat is set:
+// Repeat+ Repeat+ Repeat+ Repeat+
+// PressedOnClickRelease PressedOnClick PressedOnRelease PressedOnDoubleClick
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+// Frame N+0 (mouse button is down) - true - true
+// ... - - - -
+// Frame N + RepeatDelay true true - true
+// ... - - - -
+// Frame N + RepeatDelay + RepeatRate*N true true - true
+//-------------------------------------------------------------------------------------------------------------------------------------------------
+
+bool ImGui::ButtonBehavior(const ImRect& bb, ImGuiID id, bool* out_hovered, bool* out_held, ImGuiButtonFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+
+ // Default only reacts to left mouse button
+ if ((flags & ImGuiButtonFlags_MouseButtonMask_) == 0)
+ flags |= ImGuiButtonFlags_MouseButtonDefault_;
+
+ // Default behavior requires click + release inside bounding box
+ if ((flags & ImGuiButtonFlags_PressedOnMask_) == 0)
+ flags |= ImGuiButtonFlags_PressedOnDefault_;
+
+ ImGuiWindow* backup_hovered_window = g.HoveredWindow;
+ const bool flatten_hovered_children = (flags & ImGuiButtonFlags_FlattenChildren) && g.HoveredWindow && g.HoveredWindow->RootWindow == window;
+ if (flatten_hovered_children)
+ g.HoveredWindow = window;
+
+#ifdef IMGUI_ENABLE_TEST_ENGINE
+ if (id != 0 && g.LastItemData.ID != id)
+ IMGUI_TEST_ENGINE_ITEM_ADD(bb, id);
+#endif
+
+ bool pressed = false;
+ bool hovered = ItemHoverable(bb, id);
+
+ // Drag source doesn't report as hovered
+ if (hovered && g.DragDropActive && g.DragDropPayload.SourceId == id && !(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoDisableHover))
+ hovered = false;
+
+ // Special mode for Drag and Drop where holding button pressed for a long time while dragging another item triggers the button
+ if (g.DragDropActive && (flags & ImGuiButtonFlags_PressedOnDragDropHold) && !(g.DragDropSourceFlags & ImGuiDragDropFlags_SourceNoHoldToOpenOthers))
+ if (IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByActiveItem))
+ {
+ hovered = true;
+ SetHoveredID(id);
+ if (g.HoveredIdTimer - g.IO.DeltaTime <= DRAGDROP_HOLD_TO_OPEN_TIMER && g.HoveredIdTimer >= DRAGDROP_HOLD_TO_OPEN_TIMER)
+ {
+ pressed = true;
+ g.DragDropHoldJustPressedId = id;
+ FocusWindow(window);
+ }
+ }
+
+ if (flatten_hovered_children)
+ g.HoveredWindow = backup_hovered_window;
+
+ // AllowOverlap mode (rarely used) requires previous frame HoveredId to be null or to match. This allows using patterns where a later submitted widget overlaps a previous one.
+ if (hovered && (flags & ImGuiButtonFlags_AllowItemOverlap) && (g.HoveredIdPreviousFrame != id && g.HoveredIdPreviousFrame != 0))
+ hovered = false;
+
+ // Mouse handling
+ if (hovered)
+ {
+ if (!(flags & ImGuiButtonFlags_NoKeyModifiers) || (!g.IO.KeyCtrl && !g.IO.KeyShift && !g.IO.KeyAlt))
+ {
+ // Poll buttons
+ int mouse_button_clicked = -1;
+ if ((flags & ImGuiButtonFlags_MouseButtonLeft) && g.IO.MouseClicked[0]) { mouse_button_clicked = 0; }
+ else if ((flags & ImGuiButtonFlags_MouseButtonRight) && g.IO.MouseClicked[1]) { mouse_button_clicked = 1; }
+ else if ((flags & ImGuiButtonFlags_MouseButtonMiddle) && g.IO.MouseClicked[2]) { mouse_button_clicked = 2; }
+
+ if (mouse_button_clicked != -1 && g.ActiveId != id)
+ {
+ if (flags & (ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnClickReleaseAnywhere))
+ {
+ SetActiveID(id, window);
+ g.ActiveIdMouseButton = mouse_button_clicked;
+ if (!(flags & ImGuiButtonFlags_NoNavFocus))
+ SetFocusID(id, window);
+ FocusWindow(window);
+ }
+ if ((flags & ImGuiButtonFlags_PressedOnClick) || ((flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseClickedCount[mouse_button_clicked] == 2))
+ {
+ pressed = true;
+ if (flags & ImGuiButtonFlags_NoHoldingActiveId)
+ ClearActiveID();
+ else
+ SetActiveID(id, window); // Hold on ID
+ if (!(flags & ImGuiButtonFlags_NoNavFocus))
+ SetFocusID(id, window);
+ g.ActiveIdMouseButton = mouse_button_clicked;
+ FocusWindow(window);
+ }
+ }
+ if (flags & ImGuiButtonFlags_PressedOnRelease)
+ {
+ int mouse_button_released = -1;
+ if ((flags & ImGuiButtonFlags_MouseButtonLeft) && g.IO.MouseReleased[0]) { mouse_button_released = 0; }
+ else if ((flags & ImGuiButtonFlags_MouseButtonRight) && g.IO.MouseReleased[1]) { mouse_button_released = 1; }
+ else if ((flags & ImGuiButtonFlags_MouseButtonMiddle) && g.IO.MouseReleased[2]) { mouse_button_released = 2; }
+ if (mouse_button_released != -1)
+ {
+ const bool has_repeated_at_least_once = (flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[mouse_button_released] >= g.IO.KeyRepeatDelay; // Repeat mode trumps on release behavior
+ if (!has_repeated_at_least_once)
+ pressed = true;
+ if (!(flags & ImGuiButtonFlags_NoNavFocus))
+ SetFocusID(id, window);
+ ClearActiveID();
+ }
+ }
+
+ // 'Repeat' mode acts when held regardless of _PressedOn flags (see table above).
+ // Relies on repeat logic of IsMouseClicked() but we may as well do it ourselves if we end up exposing finer RepeatDelay/RepeatRate settings.
+ if (g.ActiveId == id && (flags & ImGuiButtonFlags_Repeat))
+ if (g.IO.MouseDownDuration[g.ActiveIdMouseButton] > 0.0f && IsMouseClicked(g.ActiveIdMouseButton, true))
+ pressed = true;
+ }
+
+ if (pressed)
+ g.NavDisableHighlight = true;
+ }
+
+ // Gamepad/Keyboard navigation
+ // We report navigated item as hovered but we don't set g.HoveredId to not interfere with mouse.
+ if (g.NavId == id && !g.NavDisableHighlight && g.NavDisableMouseHover && (g.ActiveId == 0 || g.ActiveId == id || g.ActiveId == window->MoveId))
+ if (!(flags & ImGuiButtonFlags_NoHoveredOnFocus))
+ hovered = true;
+ if (g.NavActivateDownId == id)
+ {
+ bool nav_activated_by_code = (g.NavActivateId == id);
+ bool nav_activated_by_inputs = IsNavInputTest(ImGuiNavInput_Activate, (flags & ImGuiButtonFlags_Repeat) ? ImGuiNavReadMode_Repeat : ImGuiNavReadMode_Pressed);
+ if (nav_activated_by_code || nav_activated_by_inputs)
+ {
+ // Set active id so it can be queried by user via IsItemActive(), equivalent of holding the mouse button.
+ pressed = true;
+ SetActiveID(id, window);
+ g.ActiveIdSource = ImGuiInputSource_Nav;
+ if (!(flags & ImGuiButtonFlags_NoNavFocus))
+ SetFocusID(id, window);
+ }
+ }
+
+ // Process while held
+ bool held = false;
+ if (g.ActiveId == id)
+ {
+ if (g.ActiveIdSource == ImGuiInputSource_Mouse)
+ {
+ if (g.ActiveIdIsJustActivated)
+ g.ActiveIdClickOffset = g.IO.MousePos - bb.Min;
+
+ const int mouse_button = g.ActiveIdMouseButton;
+ IM_ASSERT(mouse_button >= 0 && mouse_button < ImGuiMouseButton_COUNT);
+ if (g.IO.MouseDown[mouse_button])
+ {
+ held = true;
+ }
+ else
+ {
+ bool release_in = hovered && (flags & ImGuiButtonFlags_PressedOnClickRelease) != 0;
+ bool release_anywhere = (flags & ImGuiButtonFlags_PressedOnClickReleaseAnywhere) != 0;
+ if ((release_in || release_anywhere) && !g.DragDropActive)
+ {
+ // Report as pressed when releasing the mouse (this is the most common path)
+ bool is_double_click_release = (flags & ImGuiButtonFlags_PressedOnDoubleClick) && g.IO.MouseReleased[mouse_button] && g.IO.MouseClickedLastCount[mouse_button] == 2;
+ bool is_repeating_already = (flags & ImGuiButtonFlags_Repeat) && g.IO.MouseDownDurationPrev[mouse_button] >= g.IO.KeyRepeatDelay; // Repeat mode trumps <on release>
+ if (!is_double_click_release && !is_repeating_already)
+ pressed = true;
+ }
+ ClearActiveID();
+ }
+ if (!(flags & ImGuiButtonFlags_NoNavFocus))
+ g.NavDisableHighlight = true;
+ }
+ else if (g.ActiveIdSource == ImGuiInputSource_Nav)
+ {
+ // When activated using Nav, we hold on the ActiveID until activation button is released
+ if (g.NavActivateDownId != id)
+ ClearActiveID();
+ }
+ if (pressed)
+ g.ActiveIdHasBeenPressedBefore = true;
+ }
+
+ if (out_hovered) *out_hovered = hovered;
+ if (out_held) *out_held = held;
+
+ return pressed;
+}
+
+bool ImGui::ButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = window->GetID(label);
+ const ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+ ImVec2 pos = window->DC.CursorPos;
+ if ((flags & ImGuiButtonFlags_AlignTextBaseLine) && style.FramePadding.y < window->DC.CurrLineTextBaseOffset) // Try to vertically align buttons that are smaller/have no padding so that text baseline matches (bit hacky, since it shouldn't be a flag)
+ pos.y += window->DC.CurrLineTextBaseOffset - style.FramePadding.y;
+ ImVec2 size = CalcItemSize(size_arg, label_size.x + style.FramePadding.x * 2.0f, label_size.y + style.FramePadding.y * 2.0f);
+
+ const ImRect bb(pos, pos + size);
+ ItemSize(size, style.FramePadding.y);
+ if (!ItemAdd(bb, id))
+ return false;
+
+ if (g.LastItemData.InFlags & ImGuiItemFlags_ButtonRepeat)
+ flags |= ImGuiButtonFlags_Repeat;
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags);
+
+ // Render
+ const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+ RenderNavHighlight(bb, id);
+ RenderFrame(bb.Min, bb.Max, col, true, style.FrameRounding);
+
+ if (g.LogEnabled)
+ LogSetNextTextDecoration("[", "]");
+ RenderTextClipped(bb.Min + style.FramePadding, bb.Max - style.FramePadding, label, NULL, &label_size, style.ButtonTextAlign, &bb);
+
+ // Automatically close popups
+ //if (pressed && !(flags & ImGuiButtonFlags_DontClosePopups) && (window->Flags & ImGuiWindowFlags_Popup))
+ // CloseCurrentPopup();
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags);
+ return pressed;
+}
+
+bool ImGui::Button(const char* label, const ImVec2& size_arg)
+{
+ return ButtonEx(label, size_arg, ImGuiButtonFlags_None);
+}
+
+// Small buttons fits within text without additional vertical spacing.
+bool ImGui::SmallButton(const char* label)
+{
+ ImGuiContext& g = *GImGui;
+ float backup_padding_y = g.Style.FramePadding.y;
+ g.Style.FramePadding.y = 0.0f;
+ bool pressed = ButtonEx(label, ImVec2(0, 0), ImGuiButtonFlags_AlignTextBaseLine);
+ g.Style.FramePadding.y = backup_padding_y;
+ return pressed;
+}
+
+// Tip: use ImGui::PushID()/PopID() to push indices or pointers in the ID stack.
+// Then you can keep 'str_id' empty or the same for all your buttons (instead of creating a string based on a non-string id)
+bool ImGui::InvisibleButton(const char* str_id, const ImVec2& size_arg, ImGuiButtonFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ // Cannot use zero-size for InvisibleButton(). Unlike Button() there is not way to fallback using the label size.
+ IM_ASSERT(size_arg.x != 0.0f && size_arg.y != 0.0f);
+
+ const ImGuiID id = window->GetID(str_id);
+ ImVec2 size = CalcItemSize(size_arg, 0.0f, 0.0f);
+ const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
+ ItemSize(size);
+ if (!ItemAdd(bb, id))
+ return false;
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags);
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, str_id, g.LastItemData.StatusFlags);
+ return pressed;
+}
+
+bool ImGui::ArrowButtonEx(const char* str_id, ImGuiDir dir, ImVec2 size, ImGuiButtonFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ const ImGuiID id = window->GetID(str_id);
+ const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
+ const float default_size = GetFrameHeight();
+ ItemSize(size, (size.y >= default_size) ? g.Style.FramePadding.y : -1.0f);
+ if (!ItemAdd(bb, id))
+ return false;
+
+ if (g.LastItemData.InFlags & ImGuiItemFlags_ButtonRepeat)
+ flags |= ImGuiButtonFlags_Repeat;
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags);
+
+ // Render
+ const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+ const ImU32 text_col = GetColorU32(ImGuiCol_Text);
+ RenderNavHighlight(bb, id);
+ RenderFrame(bb.Min, bb.Max, bg_col, true, g.Style.FrameRounding);
+ RenderArrow(window->DrawList, bb.Min + ImVec2(ImMax(0.0f, (size.x - g.FontSize) * 0.5f), ImMax(0.0f, (size.y - g.FontSize) * 0.5f)), text_col, dir);
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, str_id, g.LastItemData.StatusFlags);
+ return pressed;
+}
+
+bool ImGui::ArrowButton(const char* str_id, ImGuiDir dir)
+{
+ float sz = GetFrameHeight();
+ return ArrowButtonEx(str_id, dir, ImVec2(sz, sz), ImGuiButtonFlags_None);
+}
+
+// Button to close a window
+bool ImGui::CloseButton(ImGuiID id, const ImVec2& pos)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ // Tweak 1: Shrink hit-testing area if button covers an abnormally large proportion of the visible region. That's in order to facilitate moving the window away. (#3825)
+ // This may better be applied as a general hit-rect reduction mechanism for all widgets to ensure the area to move window is always accessible?
+ const ImRect bb(pos, pos + ImVec2(g.FontSize, g.FontSize) + g.Style.FramePadding * 2.0f);
+ ImRect bb_interact = bb;
+ const float area_to_visible_ratio = window->OuterRectClipped.GetArea() / bb.GetArea();
+ if (area_to_visible_ratio < 1.5f)
+ bb_interact.Expand(ImFloor(bb_interact.GetSize() * -0.25f));
+
+ // Tweak 2: We intentionally allow interaction when clipped so that a mechanical Alt,Right,Activate sequence can always close a window.
+ // (this isn't the regular behavior of buttons, but it doesn't affect the user much because navigation tends to keep items visible).
+ bool is_clipped = !ItemAdd(bb_interact, id);
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb_interact, id, &hovered, &held);
+ if (is_clipped)
+ return pressed;
+
+ // Render
+ // FIXME: Clarify this mess
+ ImU32 col = GetColorU32(held ? ImGuiCol_ButtonActive : ImGuiCol_ButtonHovered);
+ ImVec2 center = bb.GetCenter();
+ if (hovered)
+ window->DrawList->AddCircleFilled(center, ImMax(2.0f, g.FontSize * 0.5f + 1.0f), col, 12);
+
+ float cross_extent = g.FontSize * 0.5f * 0.7071f - 1.0f;
+ ImU32 cross_col = GetColorU32(ImGuiCol_Text);
+ center -= ImVec2(0.5f, 0.5f);
+ window->DrawList->AddLine(center + ImVec2(+cross_extent, +cross_extent), center + ImVec2(-cross_extent, -cross_extent), cross_col, 1.0f);
+ window->DrawList->AddLine(center + ImVec2(+cross_extent, -cross_extent), center + ImVec2(-cross_extent, +cross_extent), cross_col, 1.0f);
+
+ return pressed;
+}
+
+bool ImGui::CollapseButton(ImGuiID id, const ImVec2& pos)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ ImRect bb(pos, pos + ImVec2(g.FontSize, g.FontSize) + g.Style.FramePadding * 2.0f);
+ ItemAdd(bb, id);
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_None);
+
+ // Render
+ ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+ ImU32 text_col = GetColorU32(ImGuiCol_Text);
+ if (hovered || held)
+ window->DrawList->AddCircleFilled(bb.GetCenter()/*+ ImVec2(0.0f, -0.5f)*/, g.FontSize * 0.5f + 1.0f, bg_col, 12);
+ RenderArrow(window->DrawList, bb.Min + g.Style.FramePadding, text_col, window->Collapsed ? ImGuiDir_Right : ImGuiDir_Down, 1.0f);
+
+ // Switch to moving the window after mouse is moved beyond the initial drag threshold
+ if (IsItemActive() && IsMouseDragging(0))
+ StartMouseMovingWindow(window);
+
+ return pressed;
+}
+
+ImGuiID ImGui::GetWindowScrollbarID(ImGuiWindow* window, ImGuiAxis axis)
+{
+ return window->GetID(axis == ImGuiAxis_X ? "#SCROLLX" : "#SCROLLY");
+}
+
+// Return scrollbar rectangle, must only be called for corresponding axis if window->ScrollbarX/Y is set.
+ImRect ImGui::GetWindowScrollbarRect(ImGuiWindow* window, ImGuiAxis axis)
+{
+ const ImRect outer_rect = window->Rect();
+ const ImRect inner_rect = window->InnerRect;
+ const float border_size = window->WindowBorderSize;
+ const float scrollbar_size = window->ScrollbarSizes[axis ^ 1]; // (ScrollbarSizes.x = width of Y scrollbar; ScrollbarSizes.y = height of X scrollbar)
+ IM_ASSERT(scrollbar_size > 0.0f);
+ if (axis == ImGuiAxis_X)
+ return ImRect(inner_rect.Min.x, ImMax(outer_rect.Min.y, outer_rect.Max.y - border_size - scrollbar_size), inner_rect.Max.x, outer_rect.Max.y);
+ else
+ return ImRect(ImMax(outer_rect.Min.x, outer_rect.Max.x - border_size - scrollbar_size), inner_rect.Min.y, outer_rect.Max.x, inner_rect.Max.y);
+}
+
+void ImGui::Scrollbar(ImGuiAxis axis)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ const ImGuiID id = GetWindowScrollbarID(window, axis);
+
+ // Calculate scrollbar bounding box
+ ImRect bb = GetWindowScrollbarRect(window, axis);
+ ImDrawFlags rounding_corners = ImDrawFlags_RoundCornersNone;
+ if (axis == ImGuiAxis_X)
+ {
+ rounding_corners |= ImDrawFlags_RoundCornersBottomLeft;
+ if (!window->ScrollbarY)
+ rounding_corners |= ImDrawFlags_RoundCornersBottomRight;
+ }
+ else
+ {
+ if ((window->Flags & ImGuiWindowFlags_NoTitleBar) && !(window->Flags & ImGuiWindowFlags_MenuBar))
+ rounding_corners |= ImDrawFlags_RoundCornersTopRight;
+ if (!window->ScrollbarX)
+ rounding_corners |= ImDrawFlags_RoundCornersBottomRight;
+ }
+ float size_avail = window->InnerRect.Max[axis] - window->InnerRect.Min[axis];
+ float size_contents = window->ContentSize[axis] + window->WindowPadding[axis] * 2.0f;
+ ImS64 scroll = (ImS64)window->Scroll[axis];
+ ScrollbarEx(bb, id, axis, &scroll, (ImS64)size_avail, (ImS64)size_contents, rounding_corners);
+ window->Scroll[axis] = (float)scroll;
+}
+
+// Vertical/Horizontal scrollbar
+// The entire piece of code below is rather confusing because:
+// - We handle absolute seeking (when first clicking outside the grab) and relative manipulation (afterward or when clicking inside the grab)
+// - We store values as normalized ratio and in a form that allows the window content to change while we are holding on a scrollbar
+// - We handle both horizontal and vertical scrollbars, which makes the terminology not ideal.
+// Still, the code should probably be made simpler..
+bool ImGui::ScrollbarEx(const ImRect& bb_frame, ImGuiID id, ImGuiAxis axis, ImS64* p_scroll_v, ImS64 size_avail_v, ImS64 size_contents_v, ImDrawFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ KeepAliveID(id);
+
+ const float bb_frame_width = bb_frame.GetWidth();
+ const float bb_frame_height = bb_frame.GetHeight();
+ if (bb_frame_width <= 0.0f || bb_frame_height <= 0.0f)
+ return false;
+
+ // When we are too small, start hiding and disabling the grab (this reduce visual noise on very small window and facilitate using the window resize grab)
+ float alpha = 1.0f;
+ if ((axis == ImGuiAxis_Y) && bb_frame_height < g.FontSize + g.Style.FramePadding.y * 2.0f)
+ alpha = ImSaturate((bb_frame_height - g.FontSize) / (g.Style.FramePadding.y * 2.0f));
+ if (alpha <= 0.0f)
+ return false;
+
+ const ImGuiStyle& style = g.Style;
+ const bool allow_interaction = (alpha >= 1.0f);
+
+ ImRect bb = bb_frame;
+ bb.Expand(ImVec2(-ImClamp(IM_FLOOR((bb_frame_width - 2.0f) * 0.5f), 0.0f, 3.0f), -ImClamp(IM_FLOOR((bb_frame_height - 2.0f) * 0.5f), 0.0f, 3.0f)));
+
+ // V denote the main, longer axis of the scrollbar (= height for a vertical scrollbar)
+ const float scrollbar_size_v = (axis == ImGuiAxis_X) ? bb.GetWidth() : bb.GetHeight();
+
+ // Calculate the height of our grabbable box. It generally represent the amount visible (vs the total scrollable amount)
+ // But we maintain a minimum size in pixel to allow for the user to still aim inside.
+ IM_ASSERT(ImMax(size_contents_v, size_avail_v) > 0.0f); // Adding this assert to check if the ImMax(XXX,1.0f) is still needed. PLEASE CONTACT ME if this triggers.
+ const ImS64 win_size_v = ImMax(ImMax(size_contents_v, size_avail_v), (ImS64)1);
+ const float grab_h_pixels = ImClamp(scrollbar_size_v * ((float)size_avail_v / (float)win_size_v), style.GrabMinSize, scrollbar_size_v);
+ const float grab_h_norm = grab_h_pixels / scrollbar_size_v;
+
+ // Handle input right away. None of the code of Begin() is relying on scrolling position before calling Scrollbar().
+ bool held = false;
+ bool hovered = false;
+ ButtonBehavior(bb, id, &hovered, &held, ImGuiButtonFlags_NoNavFocus);
+
+ const ImS64 scroll_max = ImMax((ImS64)1, size_contents_v - size_avail_v);
+ float scroll_ratio = ImSaturate((float)*p_scroll_v / (float)scroll_max);
+ float grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v; // Grab position in normalized space
+ if (held && allow_interaction && grab_h_norm < 1.0f)
+ {
+ const float scrollbar_pos_v = bb.Min[axis];
+ const float mouse_pos_v = g.IO.MousePos[axis];
+
+ // Click position in scrollbar normalized space (0.0f->1.0f)
+ const float clicked_v_norm = ImSaturate((mouse_pos_v - scrollbar_pos_v) / scrollbar_size_v);
+ SetHoveredID(id);
+
+ bool seek_absolute = false;
+ if (g.ActiveIdIsJustActivated)
+ {
+ // On initial click calculate the distance between mouse and the center of the grab
+ seek_absolute = (clicked_v_norm < grab_v_norm || clicked_v_norm > grab_v_norm + grab_h_norm);
+ if (seek_absolute)
+ g.ScrollbarClickDeltaToGrabCenter = 0.0f;
+ else
+ g.ScrollbarClickDeltaToGrabCenter = clicked_v_norm - grab_v_norm - grab_h_norm * 0.5f;
+ }
+
+ // Apply scroll (p_scroll_v will generally point on one member of window->Scroll)
+ // It is ok to modify Scroll here because we are being called in Begin() after the calculation of ContentSize and before setting up our starting position
+ const float scroll_v_norm = ImSaturate((clicked_v_norm - g.ScrollbarClickDeltaToGrabCenter - grab_h_norm * 0.5f) / (1.0f - grab_h_norm));
+ *p_scroll_v = (ImS64)(scroll_v_norm * scroll_max);
+
+ // Update values for rendering
+ scroll_ratio = ImSaturate((float)*p_scroll_v / (float)scroll_max);
+ grab_v_norm = scroll_ratio * (scrollbar_size_v - grab_h_pixels) / scrollbar_size_v;
+
+ // Update distance to grab now that we have seeked and saturated
+ if (seek_absolute)
+ g.ScrollbarClickDeltaToGrabCenter = clicked_v_norm - grab_v_norm - grab_h_norm * 0.5f;
+ }
+
+ // Render
+ const ImU32 bg_col = GetColorU32(ImGuiCol_ScrollbarBg);
+ const ImU32 grab_col = GetColorU32(held ? ImGuiCol_ScrollbarGrabActive : hovered ? ImGuiCol_ScrollbarGrabHovered : ImGuiCol_ScrollbarGrab, alpha);
+ window->DrawList->AddRectFilled(bb_frame.Min, bb_frame.Max, bg_col, window->WindowRounding, flags);
+ ImRect grab_rect;
+ if (axis == ImGuiAxis_X)
+ grab_rect = ImRect(ImLerp(bb.Min.x, bb.Max.x, grab_v_norm), bb.Min.y, ImLerp(bb.Min.x, bb.Max.x, grab_v_norm) + grab_h_pixels, bb.Max.y);
+ else
+ grab_rect = ImRect(bb.Min.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm), bb.Max.x, ImLerp(bb.Min.y, bb.Max.y, grab_v_norm) + grab_h_pixels);
+ window->DrawList->AddRectFilled(grab_rect.Min, grab_rect.Max, grab_col, style.ScrollbarRounding);
+
+ return held;
+}
+
+void ImGui::Image(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, const ImVec4& tint_col, const ImVec4& border_col)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+
+ ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
+ if (border_col.w > 0.0f)
+ bb.Max += ImVec2(2, 2);
+ ItemSize(bb);
+ if (!ItemAdd(bb, 0))
+ return;
+
+ if (border_col.w > 0.0f)
+ {
+ window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(border_col), 0.0f);
+ window->DrawList->AddImage(user_texture_id, bb.Min + ImVec2(1, 1), bb.Max - ImVec2(1, 1), uv0, uv1, GetColorU32(tint_col));
+ }
+ else
+ {
+ window->DrawList->AddImage(user_texture_id, bb.Min, bb.Max, uv0, uv1, GetColorU32(tint_col));
+ }
+}
+
+// ImageButton() is flawed as 'id' is always derived from 'texture_id' (see #2464 #1390)
+// We provide this internal helper to write your own variant while we figure out how to redesign the public ImageButton() API.
+bool ImGui::ImageButtonEx(ImGuiID id, ImTextureID texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, const ImVec2& padding, const ImVec4& bg_col, const ImVec4& tint_col)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size + padding * 2);
+ ItemSize(bb);
+ if (!ItemAdd(bb, id))
+ return false;
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held);
+
+ // Render
+ const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+ RenderNavHighlight(bb, id);
+ RenderFrame(bb.Min, bb.Max, col, true, ImClamp((float)ImMin(padding.x, padding.y), 0.0f, g.Style.FrameRounding));
+ if (bg_col.w > 0.0f)
+ window->DrawList->AddRectFilled(bb.Min + padding, bb.Max - padding, GetColorU32(bg_col));
+ window->DrawList->AddImage(texture_id, bb.Min + padding, bb.Max - padding, uv0, uv1, GetColorU32(tint_col));
+
+ return pressed;
+}
+
+// frame_padding < 0: uses FramePadding from style (default)
+// frame_padding = 0: no framing
+// frame_padding > 0: set framing size
+bool ImGui::ImageButton(ImTextureID user_texture_id, const ImVec2& size, const ImVec2& uv0, const ImVec2& uv1, int frame_padding, const ImVec4& bg_col, const ImVec4& tint_col)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ // Default to using texture ID as ID. User can still push string/integer prefixes.
+ PushID((void*)(intptr_t)user_texture_id);
+ const ImGuiID id = window->GetID("#image");
+ PopID();
+
+ const ImVec2 padding = (frame_padding >= 0) ? ImVec2((float)frame_padding, (float)frame_padding) : g.Style.FramePadding;
+ return ImageButtonEx(id, user_texture_id, size, uv0, uv1, padding, bg_col, tint_col);
+}
+
+bool ImGui::Checkbox(const char* label, bool* v)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = window->GetID(label);
+ const ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+ const float square_sz = GetFrameHeight();
+ const ImVec2 pos = window->DC.CursorPos;
+ const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f));
+ ItemSize(total_bb, style.FramePadding.y);
+ if (!ItemAdd(total_bb, id))
+ {
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
+ return false;
+ }
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
+ if (pressed)
+ {
+ *v = !(*v);
+ MarkItemEdited(id);
+ }
+
+ const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz));
+ RenderNavHighlight(total_bb, id);
+ RenderFrame(check_bb.Min, check_bb.Max, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), true, style.FrameRounding);
+ ImU32 check_col = GetColorU32(ImGuiCol_CheckMark);
+ bool mixed_value = (g.LastItemData.InFlags & ImGuiItemFlags_MixedValue) != 0;
+ if (mixed_value)
+ {
+ // Undocumented tristate/mixed/indeterminate checkbox (#2644)
+ // This may seem awkwardly designed because the aim is to make ImGuiItemFlags_MixedValue supported by all widgets (not just checkbox)
+ ImVec2 pad(ImMax(1.0f, IM_FLOOR(square_sz / 3.6f)), ImMax(1.0f, IM_FLOOR(square_sz / 3.6f)));
+ window->DrawList->AddRectFilled(check_bb.Min + pad, check_bb.Max - pad, check_col, style.FrameRounding);
+ }
+ else if (*v)
+ {
+ const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f));
+ RenderCheckMark(window->DrawList, check_bb.Min + ImVec2(pad, pad), check_col, square_sz - pad * 2.0f);
+ }
+
+ ImVec2 label_pos = ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y);
+ if (g.LogEnabled)
+ LogRenderedText(&label_pos, mixed_value ? "[~]" : *v ? "[x]" : "[ ]");
+ if (label_size.x > 0.0f)
+ RenderText(label_pos, label);
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags | ImGuiItemStatusFlags_Checkable | (*v ? ImGuiItemStatusFlags_Checked : 0));
+ return pressed;
+}
+
+template<typename T>
+bool ImGui::CheckboxFlagsT(const char* label, T* flags, T flags_value)
+{
+ bool all_on = (*flags & flags_value) == flags_value;
+ bool any_on = (*flags & flags_value) != 0;
+ bool pressed;
+ if (!all_on && any_on)
+ {
+ ImGuiContext& g = *GImGui;
+ ImGuiItemFlags backup_item_flags = g.CurrentItemFlags;
+ g.CurrentItemFlags |= ImGuiItemFlags_MixedValue;
+ pressed = Checkbox(label, &all_on);
+ g.CurrentItemFlags = backup_item_flags;
+ }
+ else
+ {
+ pressed = Checkbox(label, &all_on);
+
+ }
+ if (pressed)
+ {
+ if (all_on)
+ *flags |= flags_value;
+ else
+ *flags &= ~flags_value;
+ }
+ return pressed;
+}
+
+bool ImGui::CheckboxFlags(const char* label, int* flags, int flags_value)
+{
+ return CheckboxFlagsT(label, flags, flags_value);
+}
+
+bool ImGui::CheckboxFlags(const char* label, unsigned int* flags, unsigned int flags_value)
+{
+ return CheckboxFlagsT(label, flags, flags_value);
+}
+
+bool ImGui::CheckboxFlags(const char* label, ImS64* flags, ImS64 flags_value)
+{
+ return CheckboxFlagsT(label, flags, flags_value);
+}
+
+bool ImGui::CheckboxFlags(const char* label, ImU64* flags, ImU64 flags_value)
+{
+ return CheckboxFlagsT(label, flags, flags_value);
+}
+
+bool ImGui::RadioButton(const char* label, bool active)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = window->GetID(label);
+ const ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+ const float square_sz = GetFrameHeight();
+ const ImVec2 pos = window->DC.CursorPos;
+ const ImRect check_bb(pos, pos + ImVec2(square_sz, square_sz));
+ const ImRect total_bb(pos, pos + ImVec2(square_sz + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), label_size.y + style.FramePadding.y * 2.0f));
+ ItemSize(total_bb, style.FramePadding.y);
+ if (!ItemAdd(total_bb, id))
+ return false;
+
+ ImVec2 center = check_bb.GetCenter();
+ center.x = IM_ROUND(center.x);
+ center.y = IM_ROUND(center.y);
+ const float radius = (square_sz - 1.0f) * 0.5f;
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(total_bb, id, &hovered, &held);
+ if (pressed)
+ MarkItemEdited(id);
+
+ RenderNavHighlight(total_bb, id);
+ window->DrawList->AddCircleFilled(center, radius, GetColorU32((held && hovered) ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg), 16);
+ if (active)
+ {
+ const float pad = ImMax(1.0f, IM_FLOOR(square_sz / 6.0f));
+ window->DrawList->AddCircleFilled(center, radius - pad, GetColorU32(ImGuiCol_CheckMark), 16);
+ }
+
+ if (style.FrameBorderSize > 0.0f)
+ {
+ window->DrawList->AddCircle(center + ImVec2(1, 1), radius, GetColorU32(ImGuiCol_BorderShadow), 16, style.FrameBorderSize);
+ window->DrawList->AddCircle(center, radius, GetColorU32(ImGuiCol_Border), 16, style.FrameBorderSize);
+ }
+
+ ImVec2 label_pos = ImVec2(check_bb.Max.x + style.ItemInnerSpacing.x, check_bb.Min.y + style.FramePadding.y);
+ if (g.LogEnabled)
+ LogRenderedText(&label_pos, active ? "(x)" : "( )");
+ if (label_size.x > 0.0f)
+ RenderText(label_pos, label);
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags);
+ return pressed;
+}
+
+// FIXME: This would work nicely if it was a public template, e.g. 'template<T> RadioButton(const char* label, T* v, T v_button)', but I'm not sure how we would expose it..
+bool ImGui::RadioButton(const char* label, int* v, int v_button)
+{
+ const bool pressed = RadioButton(label, *v == v_button);
+ if (pressed)
+ *v = v_button;
+ return pressed;
+}
+
+// size_arg (for each axis) < 0.0f: align to end, 0.0f: auto, > 0.0f: specified size
+void ImGui::ProgressBar(float fraction, const ImVec2& size_arg, const char* overlay)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+
+ ImVec2 pos = window->DC.CursorPos;
+ ImVec2 size = CalcItemSize(size_arg, CalcItemWidth(), g.FontSize + style.FramePadding.y * 2.0f);
+ ImRect bb(pos, pos + size);
+ ItemSize(size, style.FramePadding.y);
+ if (!ItemAdd(bb, 0))
+ return;
+
+ // Render
+ fraction = ImSaturate(fraction);
+ RenderFrame(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
+ bb.Expand(ImVec2(-style.FrameBorderSize, -style.FrameBorderSize));
+ const ImVec2 fill_br = ImVec2(ImLerp(bb.Min.x, bb.Max.x, fraction), bb.Max.y);
+ RenderRectFilledRangeH(window->DrawList, bb, GetColorU32(ImGuiCol_PlotHistogram), 0.0f, fraction, style.FrameRounding);
+
+ // Default displaying the fraction as percentage string, but user can override it
+ char overlay_buf[32];
+ if (!overlay)
+ {
+ ImFormatString(overlay_buf, IM_ARRAYSIZE(overlay_buf), "%.0f%%", fraction * 100 + 0.01f);
+ overlay = overlay_buf;
+ }
+
+ ImVec2 overlay_size = CalcTextSize(overlay, NULL);
+ if (overlay_size.x > 0.0f)
+ RenderTextClipped(ImVec2(ImClamp(fill_br.x + style.ItemSpacing.x, bb.Min.x, bb.Max.x - overlay_size.x - style.ItemInnerSpacing.x), bb.Min.y), bb.Max, overlay, NULL, &overlay_size, ImVec2(0.0f, 0.5f), &bb);
+}
+
+void ImGui::Bullet()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ const float line_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + style.FramePadding.y * 2), g.FontSize);
+ const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(g.FontSize, line_height));
+ ItemSize(bb);
+ if (!ItemAdd(bb, 0))
+ {
+ SameLine(0, style.FramePadding.x * 2);
+ return;
+ }
+
+ // Render and stay on same line
+ ImU32 text_col = GetColorU32(ImGuiCol_Text);
+ RenderBullet(window->DrawList, bb.Min + ImVec2(style.FramePadding.x + g.FontSize * 0.5f, line_height * 0.5f), text_col);
+ SameLine(0, style.FramePadding.x * 2.0f);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Low-level Layout helpers
+//-------------------------------------------------------------------------
+// - Spacing()
+// - Dummy()
+// - NewLine()
+// - AlignTextToFramePadding()
+// - SeparatorEx() [Internal]
+// - Separator()
+// - SplitterBehavior() [Internal]
+// - ShrinkWidths() [Internal]
+//-------------------------------------------------------------------------
+
+void ImGui::Spacing()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+ ItemSize(ImVec2(0, 0));
+}
+
+void ImGui::Dummy(const ImVec2& size)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+
+ const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
+ ItemSize(size);
+ ItemAdd(bb, 0);
+}
+
+void ImGui::NewLine()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiLayoutType backup_layout_type = window->DC.LayoutType;
+ window->DC.LayoutType = ImGuiLayoutType_Vertical;
+ window->DC.IsSameLine = false;
+ if (window->DC.CurrLineSize.y > 0.0f) // In the event that we are on a line with items that is smaller that FontSize high, we will preserve its height.
+ ItemSize(ImVec2(0, 0));
+ else
+ ItemSize(ImVec2(0.0f, g.FontSize));
+ window->DC.LayoutType = backup_layout_type;
+}
+
+void ImGui::AlignTextToFramePadding()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ window->DC.CurrLineSize.y = ImMax(window->DC.CurrLineSize.y, g.FontSize + g.Style.FramePadding.y * 2);
+ window->DC.CurrLineTextBaseOffset = ImMax(window->DC.CurrLineTextBaseOffset, g.Style.FramePadding.y);
+}
+
+// Horizontal/vertical separating line
+void ImGui::SeparatorEx(ImGuiSeparatorFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(ImIsPowerOfTwo(flags & (ImGuiSeparatorFlags_Horizontal | ImGuiSeparatorFlags_Vertical))); // Check that only 1 option is selected
+
+ float thickness_draw = 1.0f;
+ float thickness_layout = 0.0f;
+ if (flags & ImGuiSeparatorFlags_Vertical)
+ {
+ // Vertical separator, for menu bars (use current line height). Not exposed because it is misleading and it doesn't have an effect on regular layout.
+ float y1 = window->DC.CursorPos.y;
+ float y2 = window->DC.CursorPos.y + window->DC.CurrLineSize.y;
+ const ImRect bb(ImVec2(window->DC.CursorPos.x, y1), ImVec2(window->DC.CursorPos.x + thickness_draw, y2));
+ ItemSize(ImVec2(thickness_layout, 0.0f));
+ if (!ItemAdd(bb, 0))
+ return;
+
+ // Draw
+ window->DrawList->AddLine(ImVec2(bb.Min.x, bb.Min.y), ImVec2(bb.Min.x, bb.Max.y), GetColorU32(ImGuiCol_Separator));
+ if (g.LogEnabled)
+ LogText(" |");
+ }
+ else if (flags & ImGuiSeparatorFlags_Horizontal)
+ {
+ // Horizontal Separator
+ float x1 = window->Pos.x;
+ float x2 = window->Pos.x + window->Size.x;
+
+ // FIXME-WORKRECT: old hack (#205) until we decide of consistent behavior with WorkRect/Indent and Separator
+ if (g.GroupStack.Size > 0 && g.GroupStack.back().WindowID == window->ID)
+ x1 += window->DC.Indent.x;
+
+ // FIXME-WORKRECT: In theory we should simply be using WorkRect.Min.x/Max.x everywhere but it isn't aesthetically what we want,
+ // need to introduce a variant of WorkRect for that purpose. (#4787)
+ if (ImGuiTable* table = g.CurrentTable)
+ {
+ x1 = table->Columns[table->CurrentColumn].MinX;
+ x2 = table->Columns[table->CurrentColumn].MaxX;
+ }
+
+ ImGuiOldColumns* columns = (flags & ImGuiSeparatorFlags_SpanAllColumns) ? window->DC.CurrentColumns : NULL;
+ if (columns)
+ PushColumnsBackground();
+
+ // We don't provide our width to the layout so that it doesn't get feed back into AutoFit
+ // FIXME: This prevents ->CursorMaxPos based bounding box evaluation from working (e.g. TableEndCell)
+ const ImRect bb(ImVec2(x1, window->DC.CursorPos.y), ImVec2(x2, window->DC.CursorPos.y + thickness_draw));
+ ItemSize(ImVec2(0.0f, thickness_layout));
+ const bool item_visible = ItemAdd(bb, 0);
+ if (item_visible)
+ {
+ // Draw
+ window->DrawList->AddLine(bb.Min, ImVec2(bb.Max.x, bb.Min.y), GetColorU32(ImGuiCol_Separator));
+ if (g.LogEnabled)
+ LogRenderedText(&bb.Min, "--------------------------------\n");
+
+ }
+ if (columns)
+ {
+ PopColumnsBackground();
+ columns->LineMinY = window->DC.CursorPos.y;
+ }
+ }
+}
+
+void ImGui::Separator()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return;
+
+ // Those flags should eventually be overridable by the user
+ ImGuiSeparatorFlags flags = (window->DC.LayoutType == ImGuiLayoutType_Horizontal) ? ImGuiSeparatorFlags_Vertical : ImGuiSeparatorFlags_Horizontal;
+ flags |= ImGuiSeparatorFlags_SpanAllColumns; // NB: this only applies to legacy Columns() api as they relied on Separator() a lot.
+ SeparatorEx(flags);
+}
+
+// Using 'hover_visibility_delay' allows us to hide the highlight and mouse cursor for a short time, which can be convenient to reduce visual noise.
+bool ImGui::SplitterBehavior(const ImRect& bb, ImGuiID id, ImGuiAxis axis, float* size1, float* size2, float min_size1, float min_size2, float hover_extend, float hover_visibility_delay)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ const ImGuiItemFlags item_flags_backup = g.CurrentItemFlags;
+ g.CurrentItemFlags |= ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus;
+ bool item_add = ItemAdd(bb, id);
+ g.CurrentItemFlags = item_flags_backup;
+ if (!item_add)
+ return false;
+
+ bool hovered, held;
+ ImRect bb_interact = bb;
+ bb_interact.Expand(axis == ImGuiAxis_Y ? ImVec2(0.0f, hover_extend) : ImVec2(hover_extend, 0.0f));
+ ButtonBehavior(bb_interact, id, &hovered, &held, ImGuiButtonFlags_FlattenChildren | ImGuiButtonFlags_AllowItemOverlap);
+ if (hovered)
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_HoveredRect; // for IsItemHovered(), because bb_interact is larger than bb
+ if (g.ActiveId != id)
+ SetItemAllowOverlap();
+
+ if (held || (hovered && g.HoveredIdPreviousFrame == id && g.HoveredIdTimer >= hover_visibility_delay))
+ SetMouseCursor(axis == ImGuiAxis_Y ? ImGuiMouseCursor_ResizeNS : ImGuiMouseCursor_ResizeEW);
+
+ ImRect bb_render = bb;
+ if (held)
+ {
+ ImVec2 mouse_delta_2d = g.IO.MousePos - g.ActiveIdClickOffset - bb_interact.Min;
+ float mouse_delta = (axis == ImGuiAxis_Y) ? mouse_delta_2d.y : mouse_delta_2d.x;
+
+ // Minimum pane size
+ float size_1_maximum_delta = ImMax(0.0f, *size1 - min_size1);
+ float size_2_maximum_delta = ImMax(0.0f, *size2 - min_size2);
+ if (mouse_delta < -size_1_maximum_delta)
+ mouse_delta = -size_1_maximum_delta;
+ if (mouse_delta > size_2_maximum_delta)
+ mouse_delta = size_2_maximum_delta;
+
+ // Apply resize
+ if (mouse_delta != 0.0f)
+ {
+ if (mouse_delta < 0.0f)
+ IM_ASSERT(*size1 + mouse_delta >= min_size1);
+ if (mouse_delta > 0.0f)
+ IM_ASSERT(*size2 - mouse_delta >= min_size2);
+ *size1 += mouse_delta;
+ *size2 -= mouse_delta;
+ bb_render.Translate((axis == ImGuiAxis_X) ? ImVec2(mouse_delta, 0.0f) : ImVec2(0.0f, mouse_delta));
+ MarkItemEdited(id);
+ }
+ }
+
+ // Render
+ const ImU32 col = GetColorU32(held ? ImGuiCol_SeparatorActive : (hovered && g.HoveredIdTimer >= hover_visibility_delay) ? ImGuiCol_SeparatorHovered : ImGuiCol_Separator);
+ window->DrawList->AddRectFilled(bb_render.Min, bb_render.Max, col, 0.0f);
+
+ return held;
+}
+
+static int IMGUI_CDECL ShrinkWidthItemComparer(const void* lhs, const void* rhs)
+{
+ const ImGuiShrinkWidthItem* a = (const ImGuiShrinkWidthItem*)lhs;
+ const ImGuiShrinkWidthItem* b = (const ImGuiShrinkWidthItem*)rhs;
+ if (int d = (int)(b->Width - a->Width))
+ return d;
+ return (b->Index - a->Index);
+}
+
+// Shrink excess width from a set of item, by removing width from the larger items first.
+// Set items Width to -1.0f to disable shrinking this item.
+void ImGui::ShrinkWidths(ImGuiShrinkWidthItem* items, int count, float width_excess)
+{
+ if (count == 1)
+ {
+ if (items[0].Width >= 0.0f)
+ items[0].Width = ImMax(items[0].Width - width_excess, 1.0f);
+ return;
+ }
+ ImQsort(items, (size_t)count, sizeof(ImGuiShrinkWidthItem), ShrinkWidthItemComparer);
+ int count_same_width = 1;
+ while (width_excess > 0.0f && count_same_width < count)
+ {
+ while (count_same_width < count && items[0].Width <= items[count_same_width].Width)
+ count_same_width++;
+ float max_width_to_remove_per_item = (count_same_width < count && items[count_same_width].Width >= 0.0f) ? (items[0].Width - items[count_same_width].Width) : (items[0].Width - 1.0f);
+ if (max_width_to_remove_per_item <= 0.0f)
+ break;
+ float width_to_remove_per_item = ImMin(width_excess / count_same_width, max_width_to_remove_per_item);
+ for (int item_n = 0; item_n < count_same_width; item_n++)
+ items[item_n].Width -= width_to_remove_per_item;
+ width_excess -= width_to_remove_per_item * count_same_width;
+ }
+
+ // Round width and redistribute remainder
+ // Ensure that e.g. the right-most tab of a shrunk tab-bar always reaches exactly at the same distance from the right-most edge of the tab bar separator.
+ width_excess = 0.0f;
+ for (int n = 0; n < count; n++)
+ {
+ float width_rounded = ImFloor(items[n].Width);
+ width_excess += items[n].Width - width_rounded;
+ items[n].Width = width_rounded;
+ }
+ while (width_excess > 0.0f)
+ for (int n = 0; n < count; n++)
+ if (items[n].Width + 1.0f <= items[n].InitialWidth)
+ {
+ items[n].Width += 1.0f;
+ width_excess -= 1.0f;
+ }
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: ComboBox
+//-------------------------------------------------------------------------
+// - CalcMaxPopupHeightFromItemCount() [Internal]
+// - BeginCombo()
+// - BeginComboPopup() [Internal]
+// - EndCombo()
+// - BeginComboPreview() [Internal]
+// - EndComboPreview() [Internal]
+// - Combo()
+//-------------------------------------------------------------------------
+
+static float CalcMaxPopupHeightFromItemCount(int items_count)
+{
+ ImGuiContext& g = *GImGui;
+ if (items_count <= 0)
+ return FLT_MAX;
+ return (g.FontSize + g.Style.ItemSpacing.y) * items_count - g.Style.ItemSpacing.y + (g.Style.WindowPadding.y * 2);
+}
+
+bool ImGui::BeginCombo(const char* label, const char* preview_value, ImGuiComboFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+
+ ImGuiNextWindowDataFlags backup_next_window_data_flags = g.NextWindowData.Flags;
+ g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
+ if (window->SkipItems)
+ return false;
+
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = window->GetID(label);
+ IM_ASSERT((flags & (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)) != (ImGuiComboFlags_NoArrowButton | ImGuiComboFlags_NoPreview)); // Can't use both flags together
+
+ const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight();
+ const ImVec2 label_size = CalcTextSize(label, NULL, true);
+ const float w = (flags & ImGuiComboFlags_NoPreview) ? arrow_size : CalcItemWidth();
+ const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y * 2.0f));
+ const ImRect total_bb(bb.Min, bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
+ ItemSize(total_bb, style.FramePadding.y);
+ if (!ItemAdd(total_bb, id, &bb))
+ return false;
+
+ // Open on click
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held);
+ const ImGuiID popup_id = ImHashStr("##ComboPopup", 0, id);
+ bool popup_open = IsPopupOpen(popup_id, ImGuiPopupFlags_None);
+ if (pressed && !popup_open)
+ {
+ OpenPopupEx(popup_id, ImGuiPopupFlags_None);
+ popup_open = true;
+ }
+
+ // Render shape
+ const ImU32 frame_col = GetColorU32(hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
+ const float value_x2 = ImMax(bb.Min.x, bb.Max.x - arrow_size);
+ RenderNavHighlight(bb, id);
+ if (!(flags & ImGuiComboFlags_NoPreview))
+ window->DrawList->AddRectFilled(bb.Min, ImVec2(value_x2, bb.Max.y), frame_col, style.FrameRounding, (flags & ImGuiComboFlags_NoArrowButton) ? ImDrawFlags_RoundCornersAll : ImDrawFlags_RoundCornersLeft);
+ if (!(flags & ImGuiComboFlags_NoArrowButton))
+ {
+ ImU32 bg_col = GetColorU32((popup_open || hovered) ? ImGuiCol_ButtonHovered : ImGuiCol_Button);
+ ImU32 text_col = GetColorU32(ImGuiCol_Text);
+ window->DrawList->AddRectFilled(ImVec2(value_x2, bb.Min.y), bb.Max, bg_col, style.FrameRounding, (w <= arrow_size) ? ImDrawFlags_RoundCornersAll : ImDrawFlags_RoundCornersRight);
+ if (value_x2 + arrow_size - style.FramePadding.x <= bb.Max.x)
+ RenderArrow(window->DrawList, ImVec2(value_x2 + style.FramePadding.y, bb.Min.y + style.FramePadding.y), text_col, ImGuiDir_Down, 1.0f);
+ }
+ RenderFrameBorder(bb.Min, bb.Max, style.FrameRounding);
+
+ // Custom preview
+ if (flags & ImGuiComboFlags_CustomPreview)
+ {
+ g.ComboPreviewData.PreviewRect = ImRect(bb.Min.x, bb.Min.y, value_x2, bb.Max.y);
+ IM_ASSERT(preview_value == NULL || preview_value[0] == 0);
+ preview_value = NULL;
+ }
+
+ // Render preview and label
+ if (preview_value != NULL && !(flags & ImGuiComboFlags_NoPreview))
+ {
+ if (g.LogEnabled)
+ LogSetNextTextDecoration("{", "}");
+ RenderTextClipped(bb.Min + style.FramePadding, ImVec2(value_x2, bb.Max.y), preview_value, NULL, NULL);
+ }
+ if (label_size.x > 0)
+ RenderText(ImVec2(bb.Max.x + style.ItemInnerSpacing.x, bb.Min.y + style.FramePadding.y), label);
+
+ if (!popup_open)
+ return false;
+
+ g.NextWindowData.Flags = backup_next_window_data_flags;
+ return BeginComboPopup(popup_id, bb, flags);
+}
+
+bool ImGui::BeginComboPopup(ImGuiID popup_id, const ImRect& bb, ImGuiComboFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ if (!IsPopupOpen(popup_id, ImGuiPopupFlags_None))
+ {
+ g.NextWindowData.ClearFlags();
+ return false;
+ }
+
+ // Set popup size
+ float w = bb.GetWidth();
+ if (g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint)
+ {
+ g.NextWindowData.SizeConstraintRect.Min.x = ImMax(g.NextWindowData.SizeConstraintRect.Min.x, w);
+ }
+ else
+ {
+ if ((flags & ImGuiComboFlags_HeightMask_) == 0)
+ flags |= ImGuiComboFlags_HeightRegular;
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiComboFlags_HeightMask_)); // Only one
+ int popup_max_height_in_items = -1;
+ if (flags & ImGuiComboFlags_HeightRegular) popup_max_height_in_items = 8;
+ else if (flags & ImGuiComboFlags_HeightSmall) popup_max_height_in_items = 4;
+ else if (flags & ImGuiComboFlags_HeightLarge) popup_max_height_in_items = 20;
+ SetNextWindowSizeConstraints(ImVec2(w, 0.0f), ImVec2(FLT_MAX, CalcMaxPopupHeightFromItemCount(popup_max_height_in_items)));
+ }
+
+ // This is essentially a specialized version of BeginPopupEx()
+ char name[16];
+ ImFormatString(name, IM_ARRAYSIZE(name), "##Combo_%02d", g.BeginPopupStack.Size); // Recycle windows based on depth
+
+ // Set position given a custom constraint (peak into expected window size so we can position it)
+ // FIXME: This might be easier to express with an hypothetical SetNextWindowPosConstraints() function?
+ // FIXME: This might be moved to Begin() or at least around the same spot where Tooltips and other Popups are calling FindBestWindowPosForPopupEx()?
+ if (ImGuiWindow* popup_window = FindWindowByName(name))
+ if (popup_window->WasActive)
+ {
+ // Always override 'AutoPosLastDirection' to not leave a chance for a past value to affect us.
+ ImVec2 size_expected = CalcWindowNextAutoFitSize(popup_window);
+ popup_window->AutoPosLastDirection = (flags & ImGuiComboFlags_PopupAlignLeft) ? ImGuiDir_Left : ImGuiDir_Down; // Left = "Below, Toward Left", Down = "Below, Toward Right (default)"
+ ImRect r_outer = GetPopupAllowedExtentRect(popup_window);
+ ImVec2 pos = FindBestWindowPosForPopupEx(bb.GetBL(), size_expected, &popup_window->AutoPosLastDirection, r_outer, bb, ImGuiPopupPositionPolicy_ComboBox);
+ SetNextWindowPos(pos);
+ }
+
+ // We don't use BeginPopupEx() solely because we have a custom name string, which we could make an argument to BeginPopupEx()
+ ImGuiWindowFlags window_flags = ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_Popup | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoMove;
+ PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(g.Style.FramePadding.x, g.Style.WindowPadding.y)); // Horizontally align ourselves with the framed text
+ bool ret = Begin(name, NULL, window_flags);
+ PopStyleVar();
+ if (!ret)
+ {
+ EndPopup();
+ IM_ASSERT(0); // This should never happen as we tested for IsPopupOpen() above
+ return false;
+ }
+ return true;
+}
+
+void ImGui::EndCombo()
+{
+ EndPopup();
+}
+
+// Call directly after the BeginCombo/EndCombo block. The preview is designed to only host non-interactive elements
+// (Experimental, see GitHub issues: #1658, #4168)
+bool ImGui::BeginComboPreview()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiComboPreviewData* preview_data = &g.ComboPreviewData;
+
+ if (window->SkipItems || !window->ClipRect.Overlaps(g.LastItemData.Rect)) // FIXME: Because we don't have a ImGuiItemStatusFlags_Visible flag to test last ItemAdd() result
+ return false;
+ IM_ASSERT(g.LastItemData.Rect.Min.x == preview_data->PreviewRect.Min.x && g.LastItemData.Rect.Min.y == preview_data->PreviewRect.Min.y); // Didn't call after BeginCombo/EndCombo block or forgot to pass ImGuiComboFlags_CustomPreview flag?
+ if (!window->ClipRect.Contains(preview_data->PreviewRect)) // Narrower test (optional)
+ return false;
+
+ // FIXME: This could be contained in a PushWorkRect() api
+ preview_data->BackupCursorPos = window->DC.CursorPos;
+ preview_data->BackupCursorMaxPos = window->DC.CursorMaxPos;
+ preview_data->BackupCursorPosPrevLine = window->DC.CursorPosPrevLine;
+ preview_data->BackupPrevLineTextBaseOffset = window->DC.PrevLineTextBaseOffset;
+ preview_data->BackupLayout = window->DC.LayoutType;
+ window->DC.CursorPos = preview_data->PreviewRect.Min + g.Style.FramePadding;
+ window->DC.CursorMaxPos = window->DC.CursorPos;
+ window->DC.LayoutType = ImGuiLayoutType_Horizontal;
+ window->DC.IsSameLine = false;
+ PushClipRect(preview_data->PreviewRect.Min, preview_data->PreviewRect.Max, true);
+
+ return true;
+}
+
+void ImGui::EndComboPreview()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiComboPreviewData* preview_data = &g.ComboPreviewData;
+
+ // FIXME: Using CursorMaxPos approximation instead of correct AABB which we will store in ImDrawCmd in the future
+ ImDrawList* draw_list = window->DrawList;
+ if (window->DC.CursorMaxPos.x < preview_data->PreviewRect.Max.x && window->DC.CursorMaxPos.y < preview_data->PreviewRect.Max.y)
+ if (draw_list->CmdBuffer.Size > 1) // Unlikely case that the PushClipRect() didn't create a command
+ {
+ draw_list->_CmdHeader.ClipRect = draw_list->CmdBuffer[draw_list->CmdBuffer.Size - 1].ClipRect = draw_list->CmdBuffer[draw_list->CmdBuffer.Size - 2].ClipRect;
+ draw_list->_TryMergeDrawCmds();
+ }
+ PopClipRect();
+ window->DC.CursorPos = preview_data->BackupCursorPos;
+ window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, preview_data->BackupCursorMaxPos);
+ window->DC.CursorPosPrevLine = preview_data->BackupCursorPosPrevLine;
+ window->DC.PrevLineTextBaseOffset = preview_data->BackupPrevLineTextBaseOffset;
+ window->DC.LayoutType = preview_data->BackupLayout;
+ window->DC.IsSameLine = false;
+ preview_data->PreviewRect = ImRect();
+}
+
+// Getter for the old Combo() API: const char*[]
+static bool Items_ArrayGetter(void* data, int idx, const char** out_text)
+{
+ const char* const* items = (const char* const*)data;
+ if (out_text)
+ *out_text = items[idx];
+ return true;
+}
+
+// Getter for the old Combo() API: "item1\0item2\0item3\0"
+static bool Items_SingleStringGetter(void* data, int idx, const char** out_text)
+{
+ // FIXME-OPT: we could pre-compute the indices to fasten this. But only 1 active combo means the waste is limited.
+ const char* items_separated_by_zeros = (const char*)data;
+ int items_count = 0;
+ const char* p = items_separated_by_zeros;
+ while (*p)
+ {
+ if (idx == items_count)
+ break;
+ p += strlen(p) + 1;
+ items_count++;
+ }
+ if (!*p)
+ return false;
+ if (out_text)
+ *out_text = p;
+ return true;
+}
+
+// Old API, prefer using BeginCombo() nowadays if you can.
+bool ImGui::Combo(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int popup_max_height_in_items)
+{
+ ImGuiContext& g = *GImGui;
+
+ // Call the getter to obtain the preview string which is a parameter to BeginCombo()
+ const char* preview_value = NULL;
+ if (*current_item >= 0 && *current_item < items_count)
+ items_getter(data, *current_item, &preview_value);
+
+ // The old Combo() API exposed "popup_max_height_in_items". The new more general BeginCombo() API doesn't have/need it, but we emulate it here.
+ if (popup_max_height_in_items != -1 && !(g.NextWindowData.Flags & ImGuiNextWindowDataFlags_HasSizeConstraint))
+ SetNextWindowSizeConstraints(ImVec2(0, 0), ImVec2(FLT_MAX, CalcMaxPopupHeightFromItemCount(popup_max_height_in_items)));
+
+ if (!BeginCombo(label, preview_value, ImGuiComboFlags_None))
+ return false;
+
+ // Display items
+ // FIXME-OPT: Use clipper (but we need to disable it on the appearing frame to make sure our call to SetItemDefaultFocus() is processed)
+ bool value_changed = false;
+ for (int i = 0; i < items_count; i++)
+ {
+ PushID(i);
+ const bool item_selected = (i == *current_item);
+ const char* item_text;
+ if (!items_getter(data, i, &item_text))
+ item_text = "*Unknown item*";
+ if (Selectable(item_text, item_selected))
+ {
+ value_changed = true;
+ *current_item = i;
+ }
+ if (item_selected)
+ SetItemDefaultFocus();
+ PopID();
+ }
+
+ EndCombo();
+
+ if (value_changed)
+ MarkItemEdited(g.LastItemData.ID);
+
+ return value_changed;
+}
+
+// Combo box helper allowing to pass an array of strings.
+bool ImGui::Combo(const char* label, int* current_item, const char* const items[], int items_count, int height_in_items)
+{
+ const bool value_changed = Combo(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_in_items);
+ return value_changed;
+}
+
+// Combo box helper allowing to pass all items in a single string literal holding multiple zero-terminated items "item1\0item2\0"
+bool ImGui::Combo(const char* label, int* current_item, const char* items_separated_by_zeros, int height_in_items)
+{
+ int items_count = 0;
+ const char* p = items_separated_by_zeros; // FIXME-OPT: Avoid computing this, or at least only when combo is open
+ while (*p)
+ {
+ p += strlen(p) + 1;
+ items_count++;
+ }
+ bool value_changed = Combo(label, current_item, Items_SingleStringGetter, (void*)items_separated_by_zeros, items_count, height_in_items);
+ return value_changed;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Data Type and Data Formatting Helpers [Internal]
+//-------------------------------------------------------------------------
+// - PatchFormatStringFloatToInt()
+// - DataTypeGetInfo()
+// - DataTypeFormatString()
+// - DataTypeApplyOp()
+// - DataTypeApplyOpFromText()
+// - DataTypeClamp()
+// - GetMinimumStepAtDecimalPrecision
+// - RoundScalarWithFormat<>()
+//-------------------------------------------------------------------------
+
+static const ImGuiDataTypeInfo GDataTypeInfo[] =
+{
+ { sizeof(char), "S8", "%d", "%d" }, // ImGuiDataType_S8
+ { sizeof(unsigned char), "U8", "%u", "%u" },
+ { sizeof(short), "S16", "%d", "%d" }, // ImGuiDataType_S16
+ { sizeof(unsigned short), "U16", "%u", "%u" },
+ { sizeof(int), "S32", "%d", "%d" }, // ImGuiDataType_S32
+ { sizeof(unsigned int), "U32", "%u", "%u" },
+#ifdef _MSC_VER
+ { sizeof(ImS64), "S64", "%I64d","%I64d" }, // ImGuiDataType_S64
+ { sizeof(ImU64), "U64", "%I64u","%I64u" },
+#else
+ { sizeof(ImS64), "S64", "%lld", "%lld" }, // ImGuiDataType_S64
+ { sizeof(ImU64), "U64", "%llu", "%llu" },
+#endif
+ { sizeof(float), "float", "%.3f","%f" }, // ImGuiDataType_Float (float are promoted to double in va_arg)
+ { sizeof(double), "double","%f", "%lf" }, // ImGuiDataType_Double
+};
+IM_STATIC_ASSERT(IM_ARRAYSIZE(GDataTypeInfo) == ImGuiDataType_COUNT);
+
+// FIXME-LEGACY: Prior to 1.61 our DragInt() function internally used floats and because of this the compile-time default value for format was "%.0f".
+// Even though we changed the compile-time default, we expect users to have carried %f around, which would break the display of DragInt() calls.
+// To honor backward compatibility we are rewriting the format string, unless IMGUI_DISABLE_OBSOLETE_FUNCTIONS is enabled. What could possibly go wrong?!
+static const char* PatchFormatStringFloatToInt(const char* fmt)
+{
+ if (fmt[0] == '%' && fmt[1] == '.' && fmt[2] == '0' && fmt[3] == 'f' && fmt[4] == 0) // Fast legacy path for "%.0f" which is expected to be the most common case.
+ return "%d";
+ const char* fmt_start = ImParseFormatFindStart(fmt); // Find % (if any, and ignore %%)
+ const char* fmt_end = ImParseFormatFindEnd(fmt_start); // Find end of format specifier, which itself is an exercise of confidence/recklessness (because snprintf is dependent on libc or user).
+ if (fmt_end > fmt_start && fmt_end[-1] == 'f')
+ {
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+ if (fmt_start == fmt && fmt_end[0] == 0)
+ return "%d";
+ const char* tmp_format;
+ ImFormatStringToTempBuffer(&tmp_format, NULL, "%.*s%%d%s", (int)(fmt_start - fmt), fmt, fmt_end); // Honor leading and trailing decorations, but lose alignment/precision.
+ return tmp_format;
+#else
+ IM_ASSERT(0 && "DragInt(): Invalid format string!"); // Old versions used a default parameter of "%.0f", please replace with e.g. "%d"
+#endif
+ }
+ return fmt;
+}
+
+const ImGuiDataTypeInfo* ImGui::DataTypeGetInfo(ImGuiDataType data_type)
+{
+ IM_ASSERT(data_type >= 0 && data_type < ImGuiDataType_COUNT);
+ return &GDataTypeInfo[data_type];
+}
+
+int ImGui::DataTypeFormatString(char* buf, int buf_size, ImGuiDataType data_type, const void* p_data, const char* format)
+{
+ // Signedness doesn't matter when pushing integer arguments
+ if (data_type == ImGuiDataType_S32 || data_type == ImGuiDataType_U32)
+ return ImFormatString(buf, buf_size, format, *(const ImU32*)p_data);
+ if (data_type == ImGuiDataType_S64 || data_type == ImGuiDataType_U64)
+ return ImFormatString(buf, buf_size, format, *(const ImU64*)p_data);
+ if (data_type == ImGuiDataType_Float)
+ return ImFormatString(buf, buf_size, format, *(const float*)p_data);
+ if (data_type == ImGuiDataType_Double)
+ return ImFormatString(buf, buf_size, format, *(const double*)p_data);
+ if (data_type == ImGuiDataType_S8)
+ return ImFormatString(buf, buf_size, format, *(const ImS8*)p_data);
+ if (data_type == ImGuiDataType_U8)
+ return ImFormatString(buf, buf_size, format, *(const ImU8*)p_data);
+ if (data_type == ImGuiDataType_S16)
+ return ImFormatString(buf, buf_size, format, *(const ImS16*)p_data);
+ if (data_type == ImGuiDataType_U16)
+ return ImFormatString(buf, buf_size, format, *(const ImU16*)p_data);
+ IM_ASSERT(0);
+ return 0;
+}
+
+void ImGui::DataTypeApplyOp(ImGuiDataType data_type, int op, void* output, const void* arg1, const void* arg2)
+{
+ IM_ASSERT(op == '+' || op == '-');
+ switch (data_type)
+ {
+ case ImGuiDataType_S8:
+ if (op == '+') { *(ImS8*)output = ImAddClampOverflow(*(const ImS8*)arg1, *(const ImS8*)arg2, IM_S8_MIN, IM_S8_MAX); }
+ if (op == '-') { *(ImS8*)output = ImSubClampOverflow(*(const ImS8*)arg1, *(const ImS8*)arg2, IM_S8_MIN, IM_S8_MAX); }
+ return;
+ case ImGuiDataType_U8:
+ if (op == '+') { *(ImU8*)output = ImAddClampOverflow(*(const ImU8*)arg1, *(const ImU8*)arg2, IM_U8_MIN, IM_U8_MAX); }
+ if (op == '-') { *(ImU8*)output = ImSubClampOverflow(*(const ImU8*)arg1, *(const ImU8*)arg2, IM_U8_MIN, IM_U8_MAX); }
+ return;
+ case ImGuiDataType_S16:
+ if (op == '+') { *(ImS16*)output = ImAddClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); }
+ if (op == '-') { *(ImS16*)output = ImSubClampOverflow(*(const ImS16*)arg1, *(const ImS16*)arg2, IM_S16_MIN, IM_S16_MAX); }
+ return;
+ case ImGuiDataType_U16:
+ if (op == '+') { *(ImU16*)output = ImAddClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); }
+ if (op == '-') { *(ImU16*)output = ImSubClampOverflow(*(const ImU16*)arg1, *(const ImU16*)arg2, IM_U16_MIN, IM_U16_MAX); }
+ return;
+ case ImGuiDataType_S32:
+ if (op == '+') { *(ImS32*)output = ImAddClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); }
+ if (op == '-') { *(ImS32*)output = ImSubClampOverflow(*(const ImS32*)arg1, *(const ImS32*)arg2, IM_S32_MIN, IM_S32_MAX); }
+ return;
+ case ImGuiDataType_U32:
+ if (op == '+') { *(ImU32*)output = ImAddClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); }
+ if (op == '-') { *(ImU32*)output = ImSubClampOverflow(*(const ImU32*)arg1, *(const ImU32*)arg2, IM_U32_MIN, IM_U32_MAX); }
+ return;
+ case ImGuiDataType_S64:
+ if (op == '+') { *(ImS64*)output = ImAddClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); }
+ if (op == '-') { *(ImS64*)output = ImSubClampOverflow(*(const ImS64*)arg1, *(const ImS64*)arg2, IM_S64_MIN, IM_S64_MAX); }
+ return;
+ case ImGuiDataType_U64:
+ if (op == '+') { *(ImU64*)output = ImAddClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); }
+ if (op == '-') { *(ImU64*)output = ImSubClampOverflow(*(const ImU64*)arg1, *(const ImU64*)arg2, IM_U64_MIN, IM_U64_MAX); }
+ return;
+ case ImGuiDataType_Float:
+ if (op == '+') { *(float*)output = *(const float*)arg1 + *(const float*)arg2; }
+ if (op == '-') { *(float*)output = *(const float*)arg1 - *(const float*)arg2; }
+ return;
+ case ImGuiDataType_Double:
+ if (op == '+') { *(double*)output = *(const double*)arg1 + *(const double*)arg2; }
+ if (op == '-') { *(double*)output = *(const double*)arg1 - *(const double*)arg2; }
+ return;
+ case ImGuiDataType_COUNT: break;
+ }
+ IM_ASSERT(0);
+}
+
+// User can input math operators (e.g. +100) to edit a numerical values.
+// NB: This is _not_ a full expression evaluator. We should probably add one and replace this dumb mess..
+bool ImGui::DataTypeApplyFromText(const char* buf, ImGuiDataType data_type, void* p_data, const char* format)
+{
+ while (ImCharIsBlankA(*buf))
+ buf++;
+ if (!buf[0])
+ return false;
+
+ // Copy the value in an opaque buffer so we can compare at the end of the function if it changed at all.
+ const ImGuiDataTypeInfo* type_info = DataTypeGetInfo(data_type);
+ ImGuiDataTypeTempStorage data_backup;
+ memcpy(&data_backup, p_data, type_info->Size);
+
+ // Sanitize format
+ // For float/double we have to ignore format with precision (e.g. "%.2f") because sscanf doesn't take them in, so force them into %f and %lf
+ char format_sanitized[32];
+ if (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double)
+ format = type_info->ScanFmt;
+ else
+ format = ImParseFormatSanitizeForScanning(format, format_sanitized, IM_ARRAYSIZE(format_sanitized));
+
+ // Small types need a 32-bit buffer to receive the result from scanf()
+ int v32 = 0;
+ if (sscanf(buf, format, type_info->Size >= 4 ? p_data : &v32) < 1)
+ return false;
+ if (type_info->Size < 4)
+ {
+ if (data_type == ImGuiDataType_S8)
+ *(ImS8*)p_data = (ImS8)ImClamp(v32, (int)IM_S8_MIN, (int)IM_S8_MAX);
+ else if (data_type == ImGuiDataType_U8)
+ *(ImU8*)p_data = (ImU8)ImClamp(v32, (int)IM_U8_MIN, (int)IM_U8_MAX);
+ else if (data_type == ImGuiDataType_S16)
+ *(ImS16*)p_data = (ImS16)ImClamp(v32, (int)IM_S16_MIN, (int)IM_S16_MAX);
+ else if (data_type == ImGuiDataType_U16)
+ *(ImU16*)p_data = (ImU16)ImClamp(v32, (int)IM_U16_MIN, (int)IM_U16_MAX);
+ else
+ IM_ASSERT(0);
+ }
+
+ return memcmp(&data_backup, p_data, type_info->Size) != 0;
+}
+
+template<typename T>
+static int DataTypeCompareT(const T* lhs, const T* rhs)
+{
+ if (*lhs < *rhs) return -1;
+ if (*lhs > *rhs) return +1;
+ return 0;
+}
+
+int ImGui::DataTypeCompare(ImGuiDataType data_type, const void* arg_1, const void* arg_2)
+{
+ switch (data_type)
+ {
+ case ImGuiDataType_S8: return DataTypeCompareT<ImS8 >((const ImS8* )arg_1, (const ImS8* )arg_2);
+ case ImGuiDataType_U8: return DataTypeCompareT<ImU8 >((const ImU8* )arg_1, (const ImU8* )arg_2);
+ case ImGuiDataType_S16: return DataTypeCompareT<ImS16 >((const ImS16* )arg_1, (const ImS16* )arg_2);
+ case ImGuiDataType_U16: return DataTypeCompareT<ImU16 >((const ImU16* )arg_1, (const ImU16* )arg_2);
+ case ImGuiDataType_S32: return DataTypeCompareT<ImS32 >((const ImS32* )arg_1, (const ImS32* )arg_2);
+ case ImGuiDataType_U32: return DataTypeCompareT<ImU32 >((const ImU32* )arg_1, (const ImU32* )arg_2);
+ case ImGuiDataType_S64: return DataTypeCompareT<ImS64 >((const ImS64* )arg_1, (const ImS64* )arg_2);
+ case ImGuiDataType_U64: return DataTypeCompareT<ImU64 >((const ImU64* )arg_1, (const ImU64* )arg_2);
+ case ImGuiDataType_Float: return DataTypeCompareT<float >((const float* )arg_1, (const float* )arg_2);
+ case ImGuiDataType_Double: return DataTypeCompareT<double>((const double*)arg_1, (const double*)arg_2);
+ case ImGuiDataType_COUNT: break;
+ }
+ IM_ASSERT(0);
+ return 0;
+}
+
+template<typename T>
+static bool DataTypeClampT(T* v, const T* v_min, const T* v_max)
+{
+ // Clamp, both sides are optional, return true if modified
+ if (v_min && *v < *v_min) { *v = *v_min; return true; }
+ if (v_max && *v > *v_max) { *v = *v_max; return true; }
+ return false;
+}
+
+bool ImGui::DataTypeClamp(ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max)
+{
+ switch (data_type)
+ {
+ case ImGuiDataType_S8: return DataTypeClampT<ImS8 >((ImS8* )p_data, (const ImS8* )p_min, (const ImS8* )p_max);
+ case ImGuiDataType_U8: return DataTypeClampT<ImU8 >((ImU8* )p_data, (const ImU8* )p_min, (const ImU8* )p_max);
+ case ImGuiDataType_S16: return DataTypeClampT<ImS16 >((ImS16* )p_data, (const ImS16* )p_min, (const ImS16* )p_max);
+ case ImGuiDataType_U16: return DataTypeClampT<ImU16 >((ImU16* )p_data, (const ImU16* )p_min, (const ImU16* )p_max);
+ case ImGuiDataType_S32: return DataTypeClampT<ImS32 >((ImS32* )p_data, (const ImS32* )p_min, (const ImS32* )p_max);
+ case ImGuiDataType_U32: return DataTypeClampT<ImU32 >((ImU32* )p_data, (const ImU32* )p_min, (const ImU32* )p_max);
+ case ImGuiDataType_S64: return DataTypeClampT<ImS64 >((ImS64* )p_data, (const ImS64* )p_min, (const ImS64* )p_max);
+ case ImGuiDataType_U64: return DataTypeClampT<ImU64 >((ImU64* )p_data, (const ImU64* )p_min, (const ImU64* )p_max);
+ case ImGuiDataType_Float: return DataTypeClampT<float >((float* )p_data, (const float* )p_min, (const float* )p_max);
+ case ImGuiDataType_Double: return DataTypeClampT<double>((double*)p_data, (const double*)p_min, (const double*)p_max);
+ case ImGuiDataType_COUNT: break;
+ }
+ IM_ASSERT(0);
+ return false;
+}
+
+static float GetMinimumStepAtDecimalPrecision(int decimal_precision)
+{
+ static const float min_steps[10] = { 1.0f, 0.1f, 0.01f, 0.001f, 0.0001f, 0.00001f, 0.000001f, 0.0000001f, 0.00000001f, 0.000000001f };
+ if (decimal_precision < 0)
+ return FLT_MIN;
+ return (decimal_precision < IM_ARRAYSIZE(min_steps)) ? min_steps[decimal_precision] : ImPow(10.0f, (float)-decimal_precision);
+}
+
+template<typename TYPE>
+TYPE ImGui::RoundScalarWithFormatT(const char* format, ImGuiDataType data_type, TYPE v)
+{
+ IM_UNUSED(data_type);
+ IM_ASSERT(data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double);
+ const char* fmt_start = ImParseFormatFindStart(format);
+ if (fmt_start[0] != '%' || fmt_start[1] == '%') // Don't apply if the value is not visible in the format string
+ return v;
+
+ // Sanitize format
+ char fmt_sanitized[32];
+ ImParseFormatSanitizeForPrinting(fmt_start, fmt_sanitized, IM_ARRAYSIZE(fmt_sanitized));
+ fmt_start = fmt_sanitized;
+
+ // Format value with our rounding, and read back
+ char v_str[64];
+ ImFormatString(v_str, IM_ARRAYSIZE(v_str), fmt_start, v);
+ const char* p = v_str;
+ while (*p == ' ')
+ p++;
+ v = (TYPE)ImAtof(p);
+
+ return v;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: DragScalar, DragFloat, DragInt, etc.
+//-------------------------------------------------------------------------
+// - DragBehaviorT<>() [Internal]
+// - DragBehavior() [Internal]
+// - DragScalar()
+// - DragScalarN()
+// - DragFloat()
+// - DragFloat2()
+// - DragFloat3()
+// - DragFloat4()
+// - DragFloatRange2()
+// - DragInt()
+// - DragInt2()
+// - DragInt3()
+// - DragInt4()
+// - DragIntRange2()
+//-------------------------------------------------------------------------
+
+// This is called by DragBehavior() when the widget is active (held by mouse or being manipulated with Nav controls)
+template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE>
+bool ImGui::DragBehaviorT(ImGuiDataType data_type, TYPE* v, float v_speed, const TYPE v_min, const TYPE v_max, const char* format, ImGuiSliderFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ const ImGuiAxis axis = (flags & ImGuiSliderFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X;
+ const bool is_clamped = (v_min < v_max);
+ const bool is_logarithmic = (flags & ImGuiSliderFlags_Logarithmic) != 0;
+ const bool is_floating_point = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double);
+
+ // Default tweak speed
+ if (v_speed == 0.0f && is_clamped && (v_max - v_min < FLT_MAX))
+ v_speed = (float)((v_max - v_min) * g.DragSpeedDefaultRatio);
+
+ // Inputs accumulates into g.DragCurrentAccum, which is flushed into the current value as soon as it makes a difference with our precision settings
+ float adjust_delta = 0.0f;
+ if (g.ActiveIdSource == ImGuiInputSource_Mouse && IsMousePosValid() && IsMouseDragPastThreshold(0, g.IO.MouseDragThreshold * DRAG_MOUSE_THRESHOLD_FACTOR))
+ {
+ adjust_delta = g.IO.MouseDelta[axis];
+ if (g.IO.KeyAlt)
+ adjust_delta *= 1.0f / 100.0f;
+ if (g.IO.KeyShift)
+ adjust_delta *= 10.0f;
+ }
+ else if (g.ActiveIdSource == ImGuiInputSource_Nav)
+ {
+ const int decimal_precision = is_floating_point ? ImParseFormatPrecision(format, 3) : 0;
+ adjust_delta = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiNavReadMode_RepeatFast, 1.0f / 10.0f, 10.0f)[axis];
+ v_speed = ImMax(v_speed, GetMinimumStepAtDecimalPrecision(decimal_precision));
+ }
+ adjust_delta *= v_speed;
+
+ // For vertical drag we currently assume that Up=higher value (like we do with vertical sliders). This may become a parameter.
+ if (axis == ImGuiAxis_Y)
+ adjust_delta = -adjust_delta;
+
+ // For logarithmic use our range is effectively 0..1 so scale the delta into that range
+ if (is_logarithmic && (v_max - v_min < FLT_MAX) && ((v_max - v_min) > 0.000001f)) // Epsilon to avoid /0
+ adjust_delta /= (float)(v_max - v_min);
+
+ // Clear current value on activation
+ // Avoid altering values and clamping when we are _already_ past the limits and heading in the same direction, so e.g. if range is 0..255, current value is 300 and we are pushing to the right side, keep the 300.
+ bool is_just_activated = g.ActiveIdIsJustActivated;
+ bool is_already_past_limits_and_pushing_outward = is_clamped && ((*v >= v_max && adjust_delta > 0.0f) || (*v <= v_min && adjust_delta < 0.0f));
+ if (is_just_activated || is_already_past_limits_and_pushing_outward)
+ {
+ g.DragCurrentAccum = 0.0f;
+ g.DragCurrentAccumDirty = false;
+ }
+ else if (adjust_delta != 0.0f)
+ {
+ g.DragCurrentAccum += adjust_delta;
+ g.DragCurrentAccumDirty = true;
+ }
+
+ if (!g.DragCurrentAccumDirty)
+ return false;
+
+ TYPE v_cur = *v;
+ FLOATTYPE v_old_ref_for_accum_remainder = (FLOATTYPE)0.0f;
+
+ float logarithmic_zero_epsilon = 0.0f; // Only valid when is_logarithmic is true
+ const float zero_deadzone_halfsize = 0.0f; // Drag widgets have no deadzone (as it doesn't make sense)
+ if (is_logarithmic)
+ {
+ // When using logarithmic sliders, we need to clamp to avoid hitting zero, but our choice of clamp value greatly affects slider precision. We attempt to use the specified precision to estimate a good lower bound.
+ const int decimal_precision = is_floating_point ? ImParseFormatPrecision(format, 3) : 1;
+ logarithmic_zero_epsilon = ImPow(0.1f, (float)decimal_precision);
+
+ // Convert to parametric space, apply delta, convert back
+ float v_old_parametric = ScaleRatioFromValueT<TYPE, SIGNEDTYPE, FLOATTYPE>(data_type, v_cur, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize);
+ float v_new_parametric = v_old_parametric + g.DragCurrentAccum;
+ v_cur = ScaleValueFromRatioT<TYPE, SIGNEDTYPE, FLOATTYPE>(data_type, v_new_parametric, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize);
+ v_old_ref_for_accum_remainder = v_old_parametric;
+ }
+ else
+ {
+ v_cur += (SIGNEDTYPE)g.DragCurrentAccum;
+ }
+
+ // Round to user desired precision based on format string
+ if (is_floating_point && !(flags & ImGuiSliderFlags_NoRoundToFormat))
+ v_cur = RoundScalarWithFormatT<TYPE>(format, data_type, v_cur);
+
+ // Preserve remainder after rounding has been applied. This also allow slow tweaking of values.
+ g.DragCurrentAccumDirty = false;
+ if (is_logarithmic)
+ {
+ // Convert to parametric space, apply delta, convert back
+ float v_new_parametric = ScaleRatioFromValueT<TYPE, SIGNEDTYPE, FLOATTYPE>(data_type, v_cur, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize);
+ g.DragCurrentAccum -= (float)(v_new_parametric - v_old_ref_for_accum_remainder);
+ }
+ else
+ {
+ g.DragCurrentAccum -= (float)((SIGNEDTYPE)v_cur - (SIGNEDTYPE)*v);
+ }
+
+ // Lose zero sign for float/double
+ if (v_cur == (TYPE)-0)
+ v_cur = (TYPE)0;
+
+ // Clamp values (+ handle overflow/wrap-around for integer types)
+ if (*v != v_cur && is_clamped)
+ {
+ if (v_cur < v_min || (v_cur > *v && adjust_delta < 0.0f && !is_floating_point))
+ v_cur = v_min;
+ if (v_cur > v_max || (v_cur < *v && adjust_delta > 0.0f && !is_floating_point))
+ v_cur = v_max;
+ }
+
+ // Apply result
+ if (*v == v_cur)
+ return false;
+ *v = v_cur;
+ return true;
+}
+
+bool ImGui::DragBehavior(ImGuiID id, ImGuiDataType data_type, void* p_v, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags)
+{
+ // Read imgui.cpp "API BREAKING CHANGES" section for 1.78 if you hit this assert.
+ IM_ASSERT((flags == 1 || (flags & ImGuiSliderFlags_InvalidMask_) == 0) && "Invalid ImGuiSliderFlags flags! Has the 'float power' argument been mistakenly cast to flags? Call function with ImGuiSliderFlags_Logarithmic flags instead.");
+
+ ImGuiContext& g = *GImGui;
+ if (g.ActiveId == id)
+ {
+ if (g.ActiveIdSource == ImGuiInputSource_Mouse && !g.IO.MouseDown[0])
+ ClearActiveID();
+ else if (g.ActiveIdSource == ImGuiInputSource_Nav && g.NavActivatePressedId == id && !g.ActiveIdIsJustActivated)
+ ClearActiveID();
+ }
+ if (g.ActiveId != id)
+ return false;
+ if ((g.LastItemData.InFlags & ImGuiItemFlags_ReadOnly) || (flags & ImGuiSliderFlags_ReadOnly))
+ return false;
+
+ switch (data_type)
+ {
+ case ImGuiDataType_S8: { ImS32 v32 = (ImS32)*(ImS8*)p_v; bool r = DragBehaviorT<ImS32, ImS32, float>(ImGuiDataType_S32, &v32, v_speed, p_min ? *(const ImS8*) p_min : IM_S8_MIN, p_max ? *(const ImS8*)p_max : IM_S8_MAX, format, flags); if (r) *(ImS8*)p_v = (ImS8)v32; return r; }
+ case ImGuiDataType_U8: { ImU32 v32 = (ImU32)*(ImU8*)p_v; bool r = DragBehaviorT<ImU32, ImS32, float>(ImGuiDataType_U32, &v32, v_speed, p_min ? *(const ImU8*) p_min : IM_U8_MIN, p_max ? *(const ImU8*)p_max : IM_U8_MAX, format, flags); if (r) *(ImU8*)p_v = (ImU8)v32; return r; }
+ case ImGuiDataType_S16: { ImS32 v32 = (ImS32)*(ImS16*)p_v; bool r = DragBehaviorT<ImS32, ImS32, float>(ImGuiDataType_S32, &v32, v_speed, p_min ? *(const ImS16*)p_min : IM_S16_MIN, p_max ? *(const ImS16*)p_max : IM_S16_MAX, format, flags); if (r) *(ImS16*)p_v = (ImS16)v32; return r; }
+ case ImGuiDataType_U16: { ImU32 v32 = (ImU32)*(ImU16*)p_v; bool r = DragBehaviorT<ImU32, ImS32, float>(ImGuiDataType_U32, &v32, v_speed, p_min ? *(const ImU16*)p_min : IM_U16_MIN, p_max ? *(const ImU16*)p_max : IM_U16_MAX, format, flags); if (r) *(ImU16*)p_v = (ImU16)v32; return r; }
+ case ImGuiDataType_S32: return DragBehaviorT<ImS32, ImS32, float >(data_type, (ImS32*)p_v, v_speed, p_min ? *(const ImS32* )p_min : IM_S32_MIN, p_max ? *(const ImS32* )p_max : IM_S32_MAX, format, flags);
+ case ImGuiDataType_U32: return DragBehaviorT<ImU32, ImS32, float >(data_type, (ImU32*)p_v, v_speed, p_min ? *(const ImU32* )p_min : IM_U32_MIN, p_max ? *(const ImU32* )p_max : IM_U32_MAX, format, flags);
+ case ImGuiDataType_S64: return DragBehaviorT<ImS64, ImS64, double>(data_type, (ImS64*)p_v, v_speed, p_min ? *(const ImS64* )p_min : IM_S64_MIN, p_max ? *(const ImS64* )p_max : IM_S64_MAX, format, flags);
+ case ImGuiDataType_U64: return DragBehaviorT<ImU64, ImS64, double>(data_type, (ImU64*)p_v, v_speed, p_min ? *(const ImU64* )p_min : IM_U64_MIN, p_max ? *(const ImU64* )p_max : IM_U64_MAX, format, flags);
+ case ImGuiDataType_Float: return DragBehaviorT<float, float, float >(data_type, (float*)p_v, v_speed, p_min ? *(const float* )p_min : -FLT_MAX, p_max ? *(const float* )p_max : FLT_MAX, format, flags);
+ case ImGuiDataType_Double: return DragBehaviorT<double,double,double>(data_type, (double*)p_v, v_speed, p_min ? *(const double*)p_min : -DBL_MAX, p_max ? *(const double*)p_max : DBL_MAX, format, flags);
+ case ImGuiDataType_COUNT: break;
+ }
+ IM_ASSERT(0);
+ return false;
+}
+
+// Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a Drag widget, p_min and p_max are optional.
+// Read code of e.g. DragFloat(), DragInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly.
+bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = window->GetID(label);
+ const float w = CalcItemWidth();
+
+ const ImVec2 label_size = CalcTextSize(label, NULL, true);
+ const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y * 2.0f));
+ const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
+
+ const bool temp_input_allowed = (flags & ImGuiSliderFlags_NoInput) == 0;
+ ItemSize(total_bb, style.FramePadding.y);
+ if (!ItemAdd(total_bb, id, &frame_bb, temp_input_allowed ? ImGuiItemFlags_Inputable : 0))
+ return false;
+
+ // Default format string when passing NULL
+ if (format == NULL)
+ format = DataTypeGetInfo(data_type)->PrintFmt;
+ else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
+ format = PatchFormatStringFloatToInt(format);
+
+ const bool hovered = ItemHoverable(frame_bb, id);
+ bool temp_input_is_active = temp_input_allowed && TempInputIsActive(id);
+ if (!temp_input_is_active)
+ {
+ // Tabbing or CTRL-clicking on Drag turns it into an InputText
+ const bool input_requested_by_tabbing = temp_input_allowed && (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_FocusedByTabbing) != 0;
+ const bool clicked = (hovered && g.IO.MouseClicked[0]);
+ const bool double_clicked = (hovered && g.IO.MouseClickedCount[0] == 2);
+ const bool make_active = (input_requested_by_tabbing || clicked || double_clicked || g.NavActivateId == id || g.NavActivateInputId == id);
+ if (make_active && temp_input_allowed)
+ if (input_requested_by_tabbing || (clicked && g.IO.KeyCtrl) || double_clicked || g.NavActivateInputId == id)
+ temp_input_is_active = true;
+
+ // (Optional) simple click (without moving) turns Drag into an InputText
+ if (g.IO.ConfigDragClickToInputText && temp_input_allowed && !temp_input_is_active)
+ if (g.ActiveId == id && hovered && g.IO.MouseReleased[0] && !IsMouseDragPastThreshold(0, g.IO.MouseDragThreshold * DRAG_MOUSE_THRESHOLD_FACTOR))
+ {
+ g.NavActivateId = g.NavActivateInputId = id;
+ g.NavActivateFlags = ImGuiActivateFlags_PreferInput;
+ temp_input_is_active = true;
+ }
+
+ if (make_active && !temp_input_is_active)
+ {
+ SetActiveID(id, window);
+ SetFocusID(id, window);
+ FocusWindow(window);
+ g.ActiveIdUsingNavDirMask = (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
+ }
+ }
+
+ if (temp_input_is_active)
+ {
+ // Only clamp CTRL+Click input when ImGuiSliderFlags_AlwaysClamp is set
+ const bool is_clamp_input = (flags & ImGuiSliderFlags_AlwaysClamp) != 0 && (p_min == NULL || p_max == NULL || DataTypeCompare(data_type, p_min, p_max) < 0);
+ return TempInputScalar(frame_bb, id, label, data_type, p_data, format, is_clamp_input ? p_min : NULL, is_clamp_input ? p_max : NULL);
+ }
+
+ // Draw frame
+ const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
+ RenderNavHighlight(frame_bb, id);
+ RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, style.FrameRounding);
+
+ // Drag behavior
+ const bool value_changed = DragBehavior(id, data_type, p_data, v_speed, p_min, p_max, format, flags);
+ if (value_changed)
+ MarkItemEdited(id);
+
+ // Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
+ char value_buf[64];
+ const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format);
+ if (g.LogEnabled)
+ LogSetNextTextDecoration("{", "}");
+ RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f, 0.5f));
+
+ if (label_size.x > 0.0f)
+ RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags);
+ return value_changed;
+}
+
+bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ bool value_changed = false;
+ BeginGroup();
+ PushID(label);
+ PushMultiItemsWidths(components, CalcItemWidth());
+ size_t type_size = GDataTypeInfo[data_type].Size;
+ for (int i = 0; i < components; i++)
+ {
+ PushID(i);
+ if (i > 0)
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+ value_changed |= DragScalar("", data_type, p_data, v_speed, p_min, p_max, format, flags);
+ PopID();
+ PopItemWidth();
+ p_data = (void*)((char*)p_data + type_size);
+ }
+ PopID();
+
+ const char* label_end = FindRenderedTextEnd(label);
+ if (label != label_end)
+ {
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+ TextEx(label, label_end);
+ }
+
+ EndGroup();
+ return value_changed;
+}
+
+bool ImGui::DragFloat(const char* label, float* v, float v_speed, float v_min, float v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return DragScalar(label, ImGuiDataType_Float, v, v_speed, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::DragFloat2(const char* label, float v[2], float v_speed, float v_min, float v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return DragScalarN(label, ImGuiDataType_Float, v, 2, v_speed, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::DragFloat3(const char* label, float v[3], float v_speed, float v_min, float v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return DragScalarN(label, ImGuiDataType_Float, v, 3, v_speed, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::DragFloat4(const char* label, float v[4], float v_speed, float v_min, float v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return DragScalarN(label, ImGuiDataType_Float, v, 4, v_speed, &v_min, &v_max, format, flags);
+}
+
+// NB: You likely want to specify the ImGuiSliderFlags_AlwaysClamp when using this.
+bool ImGui::DragFloatRange2(const char* label, float* v_current_min, float* v_current_max, float v_speed, float v_min, float v_max, const char* format, const char* format_max, ImGuiSliderFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ PushID(label);
+ BeginGroup();
+ PushMultiItemsWidths(2, CalcItemWidth());
+
+ float min_min = (v_min >= v_max) ? -FLT_MAX : v_min;
+ float min_max = (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max);
+ ImGuiSliderFlags min_flags = flags | ((min_min == min_max) ? ImGuiSliderFlags_ReadOnly : 0);
+ bool value_changed = DragScalar("##min", ImGuiDataType_Float, v_current_min, v_speed, &min_min, &min_max, format, min_flags);
+ PopItemWidth();
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+
+ float max_min = (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min);
+ float max_max = (v_min >= v_max) ? FLT_MAX : v_max;
+ ImGuiSliderFlags max_flags = flags | ((max_min == max_max) ? ImGuiSliderFlags_ReadOnly : 0);
+ value_changed |= DragScalar("##max", ImGuiDataType_Float, v_current_max, v_speed, &max_min, &max_max, format_max ? format_max : format, max_flags);
+ PopItemWidth();
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+
+ TextEx(label, FindRenderedTextEnd(label));
+ EndGroup();
+ PopID();
+
+ return value_changed;
+}
+
+// NB: v_speed is float to allow adjusting the drag speed with more precision
+bool ImGui::DragInt(const char* label, int* v, float v_speed, int v_min, int v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return DragScalar(label, ImGuiDataType_S32, v, v_speed, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::DragInt2(const char* label, int v[2], float v_speed, int v_min, int v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return DragScalarN(label, ImGuiDataType_S32, v, 2, v_speed, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::DragInt3(const char* label, int v[3], float v_speed, int v_min, int v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return DragScalarN(label, ImGuiDataType_S32, v, 3, v_speed, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::DragInt4(const char* label, int v[4], float v_speed, int v_min, int v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return DragScalarN(label, ImGuiDataType_S32, v, 4, v_speed, &v_min, &v_max, format, flags);
+}
+
+// NB: You likely want to specify the ImGuiSliderFlags_AlwaysClamp when using this.
+bool ImGui::DragIntRange2(const char* label, int* v_current_min, int* v_current_max, float v_speed, int v_min, int v_max, const char* format, const char* format_max, ImGuiSliderFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ PushID(label);
+ BeginGroup();
+ PushMultiItemsWidths(2, CalcItemWidth());
+
+ int min_min = (v_min >= v_max) ? INT_MIN : v_min;
+ int min_max = (v_min >= v_max) ? *v_current_max : ImMin(v_max, *v_current_max);
+ ImGuiSliderFlags min_flags = flags | ((min_min == min_max) ? ImGuiSliderFlags_ReadOnly : 0);
+ bool value_changed = DragInt("##min", v_current_min, v_speed, min_min, min_max, format, min_flags);
+ PopItemWidth();
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+
+ int max_min = (v_min >= v_max) ? *v_current_min : ImMax(v_min, *v_current_min);
+ int max_max = (v_min >= v_max) ? INT_MAX : v_max;
+ ImGuiSliderFlags max_flags = flags | ((max_min == max_max) ? ImGuiSliderFlags_ReadOnly : 0);
+ value_changed |= DragInt("##max", v_current_max, v_speed, max_min, max_max, format_max ? format_max : format, max_flags);
+ PopItemWidth();
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+
+ TextEx(label, FindRenderedTextEnd(label));
+ EndGroup();
+ PopID();
+
+ return value_changed;
+}
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+
+// Obsolete versions with power parameter. See https://github.com/ocornut/imgui/issues/3361 for details.
+bool ImGui::DragScalar(const char* label, ImGuiDataType data_type, void* p_data, float v_speed, const void* p_min, const void* p_max, const char* format, float power)
+{
+ ImGuiSliderFlags drag_flags = ImGuiSliderFlags_None;
+ if (power != 1.0f)
+ {
+ IM_ASSERT(power == 1.0f && "Call function with ImGuiSliderFlags_Logarithmic flags instead of using the old 'float power' function!");
+ IM_ASSERT(p_min != NULL && p_max != NULL); // When using a power curve the drag needs to have known bounds
+ drag_flags |= ImGuiSliderFlags_Logarithmic; // Fallback for non-asserting paths
+ }
+ return DragScalar(label, data_type, p_data, v_speed, p_min, p_max, format, drag_flags);
+}
+
+bool ImGui::DragScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, float v_speed, const void* p_min, const void* p_max, const char* format, float power)
+{
+ ImGuiSliderFlags drag_flags = ImGuiSliderFlags_None;
+ if (power != 1.0f)
+ {
+ IM_ASSERT(power == 1.0f && "Call function with ImGuiSliderFlags_Logarithmic flags instead of using the old 'float power' function!");
+ IM_ASSERT(p_min != NULL && p_max != NULL); // When using a power curve the drag needs to have known bounds
+ drag_flags |= ImGuiSliderFlags_Logarithmic; // Fallback for non-asserting paths
+ }
+ return DragScalarN(label, data_type, p_data, components, v_speed, p_min, p_max, format, drag_flags);
+}
+
+#endif // IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: SliderScalar, SliderFloat, SliderInt, etc.
+//-------------------------------------------------------------------------
+// - ScaleRatioFromValueT<> [Internal]
+// - ScaleValueFromRatioT<> [Internal]
+// - SliderBehaviorT<>() [Internal]
+// - SliderBehavior() [Internal]
+// - SliderScalar()
+// - SliderScalarN()
+// - SliderFloat()
+// - SliderFloat2()
+// - SliderFloat3()
+// - SliderFloat4()
+// - SliderAngle()
+// - SliderInt()
+// - SliderInt2()
+// - SliderInt3()
+// - SliderInt4()
+// - VSliderScalar()
+// - VSliderFloat()
+// - VSliderInt()
+//-------------------------------------------------------------------------
+
+// Convert a value v in the output space of a slider into a parametric position on the slider itself (the logical opposite of ScaleValueFromRatioT)
+template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE>
+float ImGui::ScaleRatioFromValueT(ImGuiDataType data_type, TYPE v, TYPE v_min, TYPE v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_halfsize)
+{
+ if (v_min == v_max)
+ return 0.0f;
+ IM_UNUSED(data_type);
+
+ const TYPE v_clamped = (v_min < v_max) ? ImClamp(v, v_min, v_max) : ImClamp(v, v_max, v_min);
+ if (is_logarithmic)
+ {
+ bool flipped = v_max < v_min;
+
+ if (flipped) // Handle the case where the range is backwards
+ ImSwap(v_min, v_max);
+
+ // Fudge min/max to avoid getting close to log(0)
+ FLOATTYPE v_min_fudged = (ImAbs((FLOATTYPE)v_min) < logarithmic_zero_epsilon) ? ((v_min < 0.0f) ? -logarithmic_zero_epsilon : logarithmic_zero_epsilon) : (FLOATTYPE)v_min;
+ FLOATTYPE v_max_fudged = (ImAbs((FLOATTYPE)v_max) < logarithmic_zero_epsilon) ? ((v_max < 0.0f) ? -logarithmic_zero_epsilon : logarithmic_zero_epsilon) : (FLOATTYPE)v_max;
+
+ // Awkward special cases - we need ranges of the form (-100 .. 0) to convert to (-100 .. -epsilon), not (-100 .. epsilon)
+ if ((v_min == 0.0f) && (v_max < 0.0f))
+ v_min_fudged = -logarithmic_zero_epsilon;
+ else if ((v_max == 0.0f) && (v_min < 0.0f))
+ v_max_fudged = -logarithmic_zero_epsilon;
+
+ float result;
+ if (v_clamped <= v_min_fudged)
+ result = 0.0f; // Workaround for values that are in-range but below our fudge
+ else if (v_clamped >= v_max_fudged)
+ result = 1.0f; // Workaround for values that are in-range but above our fudge
+ else if ((v_min * v_max) < 0.0f) // Range crosses zero, so split into two portions
+ {
+ float zero_point_center = (-(float)v_min) / ((float)v_max - (float)v_min); // The zero point in parametric space. There's an argument we should take the logarithmic nature into account when calculating this, but for now this should do (and the most common case of a symmetrical range works fine)
+ float zero_point_snap_L = zero_point_center - zero_deadzone_halfsize;
+ float zero_point_snap_R = zero_point_center + zero_deadzone_halfsize;
+ if (v == 0.0f)
+ result = zero_point_center; // Special case for exactly zero
+ else if (v < 0.0f)
+ result = (1.0f - (float)(ImLog(-(FLOATTYPE)v_clamped / logarithmic_zero_epsilon) / ImLog(-v_min_fudged / logarithmic_zero_epsilon))) * zero_point_snap_L;
+ else
+ result = zero_point_snap_R + ((float)(ImLog((FLOATTYPE)v_clamped / logarithmic_zero_epsilon) / ImLog(v_max_fudged / logarithmic_zero_epsilon)) * (1.0f - zero_point_snap_R));
+ }
+ else if ((v_min < 0.0f) || (v_max < 0.0f)) // Entirely negative slider
+ result = 1.0f - (float)(ImLog(-(FLOATTYPE)v_clamped / -v_max_fudged) / ImLog(-v_min_fudged / -v_max_fudged));
+ else
+ result = (float)(ImLog((FLOATTYPE)v_clamped / v_min_fudged) / ImLog(v_max_fudged / v_min_fudged));
+
+ return flipped ? (1.0f - result) : result;
+ }
+ else
+ {
+ // Linear slider
+ return (float)((FLOATTYPE)(SIGNEDTYPE)(v_clamped - v_min) / (FLOATTYPE)(SIGNEDTYPE)(v_max - v_min));
+ }
+}
+
+// Convert a parametric position on a slider into a value v in the output space (the logical opposite of ScaleRatioFromValueT)
+template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE>
+TYPE ImGui::ScaleValueFromRatioT(ImGuiDataType data_type, float t, TYPE v_min, TYPE v_max, bool is_logarithmic, float logarithmic_zero_epsilon, float zero_deadzone_halfsize)
+{
+ // We special-case the extents because otherwise our logarithmic fudging can lead to "mathematically correct"
+ // but non-intuitive behaviors like a fully-left slider not actually reaching the minimum value. Also generally simpler.
+ if (t <= 0.0f || v_min == v_max)
+ return v_min;
+ if (t >= 1.0f)
+ return v_max;
+
+ TYPE result = (TYPE)0;
+ if (is_logarithmic)
+ {
+ // Fudge min/max to avoid getting silly results close to zero
+ FLOATTYPE v_min_fudged = (ImAbs((FLOATTYPE)v_min) < logarithmic_zero_epsilon) ? ((v_min < 0.0f) ? -logarithmic_zero_epsilon : logarithmic_zero_epsilon) : (FLOATTYPE)v_min;
+ FLOATTYPE v_max_fudged = (ImAbs((FLOATTYPE)v_max) < logarithmic_zero_epsilon) ? ((v_max < 0.0f) ? -logarithmic_zero_epsilon : logarithmic_zero_epsilon) : (FLOATTYPE)v_max;
+
+ const bool flipped = v_max < v_min; // Check if range is "backwards"
+ if (flipped)
+ ImSwap(v_min_fudged, v_max_fudged);
+
+ // Awkward special case - we need ranges of the form (-100 .. 0) to convert to (-100 .. -epsilon), not (-100 .. epsilon)
+ if ((v_max == 0.0f) && (v_min < 0.0f))
+ v_max_fudged = -logarithmic_zero_epsilon;
+
+ float t_with_flip = flipped ? (1.0f - t) : t; // t, but flipped if necessary to account for us flipping the range
+
+ if ((v_min * v_max) < 0.0f) // Range crosses zero, so we have to do this in two parts
+ {
+ float zero_point_center = (-(float)ImMin(v_min, v_max)) / ImAbs((float)v_max - (float)v_min); // The zero point in parametric space
+ float zero_point_snap_L = zero_point_center - zero_deadzone_halfsize;
+ float zero_point_snap_R = zero_point_center + zero_deadzone_halfsize;
+ if (t_with_flip >= zero_point_snap_L && t_with_flip <= zero_point_snap_R)
+ result = (TYPE)0.0f; // Special case to make getting exactly zero possible (the epsilon prevents it otherwise)
+ else if (t_with_flip < zero_point_center)
+ result = (TYPE)-(logarithmic_zero_epsilon * ImPow(-v_min_fudged / logarithmic_zero_epsilon, (FLOATTYPE)(1.0f - (t_with_flip / zero_point_snap_L))));
+ else
+ result = (TYPE)(logarithmic_zero_epsilon * ImPow(v_max_fudged / logarithmic_zero_epsilon, (FLOATTYPE)((t_with_flip - zero_point_snap_R) / (1.0f - zero_point_snap_R))));
+ }
+ else if ((v_min < 0.0f) || (v_max < 0.0f)) // Entirely negative slider
+ result = (TYPE)-(-v_max_fudged * ImPow(-v_min_fudged / -v_max_fudged, (FLOATTYPE)(1.0f - t_with_flip)));
+ else
+ result = (TYPE)(v_min_fudged * ImPow(v_max_fudged / v_min_fudged, (FLOATTYPE)t_with_flip));
+ }
+ else
+ {
+ // Linear slider
+ const bool is_floating_point = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double);
+ if (is_floating_point)
+ {
+ result = ImLerp(v_min, v_max, t);
+ }
+ else if (t < 1.0)
+ {
+ // - For integer values we want the clicking position to match the grab box so we round above
+ // This code is carefully tuned to work with large values (e.g. high ranges of U64) while preserving this property..
+ // - Not doing a *1.0 multiply at the end of a range as it tends to be lossy. While absolute aiming at a large s64/u64
+ // range is going to be imprecise anyway, with this check we at least make the edge values matches expected limits.
+ FLOATTYPE v_new_off_f = (SIGNEDTYPE)(v_max - v_min) * t;
+ result = (TYPE)((SIGNEDTYPE)v_min + (SIGNEDTYPE)(v_new_off_f + (FLOATTYPE)(v_min > v_max ? -0.5 : 0.5)));
+ }
+ }
+
+ return result;
+}
+
+// FIXME: Try to move more of the code into shared SliderBehavior()
+template<typename TYPE, typename SIGNEDTYPE, typename FLOATTYPE>
+bool ImGui::SliderBehaviorT(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, TYPE* v, const TYPE v_min, const TYPE v_max, const char* format, ImGuiSliderFlags flags, ImRect* out_grab_bb)
+{
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+
+ const ImGuiAxis axis = (flags & ImGuiSliderFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X;
+ const bool is_logarithmic = (flags & ImGuiSliderFlags_Logarithmic) != 0;
+ const bool is_floating_point = (data_type == ImGuiDataType_Float) || (data_type == ImGuiDataType_Double);
+ const SIGNEDTYPE v_range = (v_min < v_max ? v_max - v_min : v_min - v_max);
+
+ // Calculate bounds
+ const float grab_padding = 2.0f; // FIXME: Should be part of style.
+ const float slider_sz = (bb.Max[axis] - bb.Min[axis]) - grab_padding * 2.0f;
+ float grab_sz = style.GrabMinSize;
+ if (!is_floating_point && v_range >= 0) // v_range < 0 may happen on integer overflows
+ grab_sz = ImMax((float)(slider_sz / (v_range + 1)), style.GrabMinSize); // For integer sliders: if possible have the grab size represent 1 unit
+ grab_sz = ImMin(grab_sz, slider_sz);
+ const float slider_usable_sz = slider_sz - grab_sz;
+ const float slider_usable_pos_min = bb.Min[axis] + grab_padding + grab_sz * 0.5f;
+ const float slider_usable_pos_max = bb.Max[axis] - grab_padding - grab_sz * 0.5f;
+
+ float logarithmic_zero_epsilon = 0.0f; // Only valid when is_logarithmic is true
+ float zero_deadzone_halfsize = 0.0f; // Only valid when is_logarithmic is true
+ if (is_logarithmic)
+ {
+ // When using logarithmic sliders, we need to clamp to avoid hitting zero, but our choice of clamp value greatly affects slider precision. We attempt to use the specified precision to estimate a good lower bound.
+ const int decimal_precision = is_floating_point ? ImParseFormatPrecision(format, 3) : 1;
+ logarithmic_zero_epsilon = ImPow(0.1f, (float)decimal_precision);
+ zero_deadzone_halfsize = (style.LogSliderDeadzone * 0.5f) / ImMax(slider_usable_sz, 1.0f);
+ }
+
+ // Process interacting with the slider
+ bool value_changed = false;
+ if (g.ActiveId == id)
+ {
+ bool set_new_value = false;
+ float clicked_t = 0.0f;
+ if (g.ActiveIdSource == ImGuiInputSource_Mouse)
+ {
+ if (!g.IO.MouseDown[0])
+ {
+ ClearActiveID();
+ }
+ else
+ {
+ const float mouse_abs_pos = g.IO.MousePos[axis];
+ if (g.ActiveIdIsJustActivated)
+ {
+ float grab_t = ScaleRatioFromValueT<TYPE, SIGNEDTYPE, FLOATTYPE>(data_type, *v, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize);
+ if (axis == ImGuiAxis_Y)
+ grab_t = 1.0f - grab_t;
+ const float grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t);
+ const bool clicked_around_grab = (mouse_abs_pos >= grab_pos - grab_sz * 0.5f - 1.0f) && (mouse_abs_pos <= grab_pos + grab_sz * 0.5f + 1.0f); // No harm being extra generous here.
+ g.SliderGrabClickOffset = (clicked_around_grab && is_floating_point) ? mouse_abs_pos - grab_pos : 0.0f;
+ }
+ if (slider_usable_sz > 0.0f)
+ clicked_t = ImSaturate((mouse_abs_pos - g.SliderGrabClickOffset - slider_usable_pos_min) / slider_usable_sz);
+ if (axis == ImGuiAxis_Y)
+ clicked_t = 1.0f - clicked_t;
+ set_new_value = true;
+ }
+ }
+ else if (g.ActiveIdSource == ImGuiInputSource_Nav)
+ {
+ if (g.ActiveIdIsJustActivated)
+ {
+ g.SliderCurrentAccum = 0.0f; // Reset any stored nav delta upon activation
+ g.SliderCurrentAccumDirty = false;
+ }
+
+ const ImVec2 input_delta2 = GetNavInputAmount2d(ImGuiNavDirSourceFlags_Keyboard | ImGuiNavDirSourceFlags_PadDPad, ImGuiNavReadMode_RepeatFast, 0.0f, 0.0f);
+ float input_delta = (axis == ImGuiAxis_X) ? input_delta2.x : -input_delta2.y;
+ if (input_delta != 0.0f)
+ {
+ const int decimal_precision = is_floating_point ? ImParseFormatPrecision(format, 3) : 0;
+ if (decimal_precision > 0)
+ {
+ input_delta /= 100.0f; // Gamepad/keyboard tweak speeds in % of slider bounds
+ if (IsNavInputDown(ImGuiNavInput_TweakSlow))
+ input_delta /= 10.0f;
+ }
+ else
+ {
+ if ((v_range >= -100.0f && v_range <= 100.0f) || IsNavInputDown(ImGuiNavInput_TweakSlow))
+ input_delta = ((input_delta < 0.0f) ? -1.0f : +1.0f) / (float)v_range; // Gamepad/keyboard tweak speeds in integer steps
+ else
+ input_delta /= 100.0f;
+ }
+ if (IsNavInputDown(ImGuiNavInput_TweakFast))
+ input_delta *= 10.0f;
+
+ g.SliderCurrentAccum += input_delta;
+ g.SliderCurrentAccumDirty = true;
+ }
+
+ float delta = g.SliderCurrentAccum;
+ if (g.NavActivatePressedId == id && !g.ActiveIdIsJustActivated)
+ {
+ ClearActiveID();
+ }
+ else if (g.SliderCurrentAccumDirty)
+ {
+ clicked_t = ScaleRatioFromValueT<TYPE, SIGNEDTYPE, FLOATTYPE>(data_type, *v, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize);
+
+ if ((clicked_t >= 1.0f && delta > 0.0f) || (clicked_t <= 0.0f && delta < 0.0f)) // This is to avoid applying the saturation when already past the limits
+ {
+ set_new_value = false;
+ g.SliderCurrentAccum = 0.0f; // If pushing up against the limits, don't continue to accumulate
+ }
+ else
+ {
+ set_new_value = true;
+ float old_clicked_t = clicked_t;
+ clicked_t = ImSaturate(clicked_t + delta);
+
+ // Calculate what our "new" clicked_t will be, and thus how far we actually moved the slider, and subtract this from the accumulator
+ TYPE v_new = ScaleValueFromRatioT<TYPE, SIGNEDTYPE, FLOATTYPE>(data_type, clicked_t, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize);
+ if (is_floating_point && !(flags & ImGuiSliderFlags_NoRoundToFormat))
+ v_new = RoundScalarWithFormatT<TYPE>(format, data_type, v_new);
+ float new_clicked_t = ScaleRatioFromValueT<TYPE, SIGNEDTYPE, FLOATTYPE>(data_type, v_new, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize);
+
+ if (delta > 0)
+ g.SliderCurrentAccum -= ImMin(new_clicked_t - old_clicked_t, delta);
+ else
+ g.SliderCurrentAccum -= ImMax(new_clicked_t - old_clicked_t, delta);
+ }
+
+ g.SliderCurrentAccumDirty = false;
+ }
+ }
+
+ if (set_new_value)
+ {
+ TYPE v_new = ScaleValueFromRatioT<TYPE, SIGNEDTYPE, FLOATTYPE>(data_type, clicked_t, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize);
+
+ // Round to user desired precision based on format string
+ if (is_floating_point && !(flags & ImGuiSliderFlags_NoRoundToFormat))
+ v_new = RoundScalarWithFormatT<TYPE>(format, data_type, v_new);
+
+ // Apply result
+ if (*v != v_new)
+ {
+ *v = v_new;
+ value_changed = true;
+ }
+ }
+ }
+
+ if (slider_sz < 1.0f)
+ {
+ *out_grab_bb = ImRect(bb.Min, bb.Min);
+ }
+ else
+ {
+ // Output grab position so it can be displayed by the caller
+ float grab_t = ScaleRatioFromValueT<TYPE, SIGNEDTYPE, FLOATTYPE>(data_type, *v, v_min, v_max, is_logarithmic, logarithmic_zero_epsilon, zero_deadzone_halfsize);
+ if (axis == ImGuiAxis_Y)
+ grab_t = 1.0f - grab_t;
+ const float grab_pos = ImLerp(slider_usable_pos_min, slider_usable_pos_max, grab_t);
+ if (axis == ImGuiAxis_X)
+ *out_grab_bb = ImRect(grab_pos - grab_sz * 0.5f, bb.Min.y + grab_padding, grab_pos + grab_sz * 0.5f, bb.Max.y - grab_padding);
+ else
+ *out_grab_bb = ImRect(bb.Min.x + grab_padding, grab_pos - grab_sz * 0.5f, bb.Max.x - grab_padding, grab_pos + grab_sz * 0.5f);
+ }
+
+ return value_changed;
+}
+
+// For 32-bit and larger types, slider bounds are limited to half the natural type range.
+// So e.g. an integer Slider between INT_MAX-10 and INT_MAX will fail, but an integer Slider between INT_MAX/2-10 and INT_MAX/2 will be ok.
+// It would be possible to lift that limitation with some work but it doesn't seem to be worth it for sliders.
+bool ImGui::SliderBehavior(const ImRect& bb, ImGuiID id, ImGuiDataType data_type, void* p_v, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags, ImRect* out_grab_bb)
+{
+ // Read imgui.cpp "API BREAKING CHANGES" section for 1.78 if you hit this assert.
+ IM_ASSERT((flags == 1 || (flags & ImGuiSliderFlags_InvalidMask_) == 0) && "Invalid ImGuiSliderFlags flag! Has the 'float power' argument been mistakenly cast to flags? Call function with ImGuiSliderFlags_Logarithmic flags instead.");
+
+ ImGuiContext& g = *GImGui;
+ if ((g.LastItemData.InFlags & ImGuiItemFlags_ReadOnly) || (flags & ImGuiSliderFlags_ReadOnly))
+ return false;
+
+ switch (data_type)
+ {
+ case ImGuiDataType_S8: { ImS32 v32 = (ImS32)*(ImS8*)p_v; bool r = SliderBehaviorT<ImS32, ImS32, float>(bb, id, ImGuiDataType_S32, &v32, *(const ImS8*)p_min, *(const ImS8*)p_max, format, flags, out_grab_bb); if (r) *(ImS8*)p_v = (ImS8)v32; return r; }
+ case ImGuiDataType_U8: { ImU32 v32 = (ImU32)*(ImU8*)p_v; bool r = SliderBehaviorT<ImU32, ImS32, float>(bb, id, ImGuiDataType_U32, &v32, *(const ImU8*)p_min, *(const ImU8*)p_max, format, flags, out_grab_bb); if (r) *(ImU8*)p_v = (ImU8)v32; return r; }
+ case ImGuiDataType_S16: { ImS32 v32 = (ImS32)*(ImS16*)p_v; bool r = SliderBehaviorT<ImS32, ImS32, float>(bb, id, ImGuiDataType_S32, &v32, *(const ImS16*)p_min, *(const ImS16*)p_max, format, flags, out_grab_bb); if (r) *(ImS16*)p_v = (ImS16)v32; return r; }
+ case ImGuiDataType_U16: { ImU32 v32 = (ImU32)*(ImU16*)p_v; bool r = SliderBehaviorT<ImU32, ImS32, float>(bb, id, ImGuiDataType_U32, &v32, *(const ImU16*)p_min, *(const ImU16*)p_max, format, flags, out_grab_bb); if (r) *(ImU16*)p_v = (ImU16)v32; return r; }
+ case ImGuiDataType_S32:
+ IM_ASSERT(*(const ImS32*)p_min >= IM_S32_MIN / 2 && *(const ImS32*)p_max <= IM_S32_MAX / 2);
+ return SliderBehaviorT<ImS32, ImS32, float >(bb, id, data_type, (ImS32*)p_v, *(const ImS32*)p_min, *(const ImS32*)p_max, format, flags, out_grab_bb);
+ case ImGuiDataType_U32:
+ IM_ASSERT(*(const ImU32*)p_max <= IM_U32_MAX / 2);
+ return SliderBehaviorT<ImU32, ImS32, float >(bb, id, data_type, (ImU32*)p_v, *(const ImU32*)p_min, *(const ImU32*)p_max, format, flags, out_grab_bb);
+ case ImGuiDataType_S64:
+ IM_ASSERT(*(const ImS64*)p_min >= IM_S64_MIN / 2 && *(const ImS64*)p_max <= IM_S64_MAX / 2);
+ return SliderBehaviorT<ImS64, ImS64, double>(bb, id, data_type, (ImS64*)p_v, *(const ImS64*)p_min, *(const ImS64*)p_max, format, flags, out_grab_bb);
+ case ImGuiDataType_U64:
+ IM_ASSERT(*(const ImU64*)p_max <= IM_U64_MAX / 2);
+ return SliderBehaviorT<ImU64, ImS64, double>(bb, id, data_type, (ImU64*)p_v, *(const ImU64*)p_min, *(const ImU64*)p_max, format, flags, out_grab_bb);
+ case ImGuiDataType_Float:
+ IM_ASSERT(*(const float*)p_min >= -FLT_MAX / 2.0f && *(const float*)p_max <= FLT_MAX / 2.0f);
+ return SliderBehaviorT<float, float, float >(bb, id, data_type, (float*)p_v, *(const float*)p_min, *(const float*)p_max, format, flags, out_grab_bb);
+ case ImGuiDataType_Double:
+ IM_ASSERT(*(const double*)p_min >= -DBL_MAX / 2.0f && *(const double*)p_max <= DBL_MAX / 2.0f);
+ return SliderBehaviorT<double, double, double>(bb, id, data_type, (double*)p_v, *(const double*)p_min, *(const double*)p_max, format, flags, out_grab_bb);
+ case ImGuiDataType_COUNT: break;
+ }
+ IM_ASSERT(0);
+ return false;
+}
+
+// Note: p_data, p_min and p_max are _pointers_ to a memory address holding the data. For a slider, they are all required.
+// Read code of e.g. SliderFloat(), SliderInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly.
+bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = window->GetID(label);
+ const float w = CalcItemWidth();
+
+ const ImVec2 label_size = CalcTextSize(label, NULL, true);
+ const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y * 2.0f));
+ const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
+
+ const bool temp_input_allowed = (flags & ImGuiSliderFlags_NoInput) == 0;
+ ItemSize(total_bb, style.FramePadding.y);
+ if (!ItemAdd(total_bb, id, &frame_bb, temp_input_allowed ? ImGuiItemFlags_Inputable : 0))
+ return false;
+
+ // Default format string when passing NULL
+ if (format == NULL)
+ format = DataTypeGetInfo(data_type)->PrintFmt;
+ else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
+ format = PatchFormatStringFloatToInt(format);
+
+ const bool hovered = ItemHoverable(frame_bb, id);
+ bool temp_input_is_active = temp_input_allowed && TempInputIsActive(id);
+ if (!temp_input_is_active)
+ {
+ // Tabbing or CTRL-clicking on Slider turns it into an input box
+ const bool input_requested_by_tabbing = temp_input_allowed && (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_FocusedByTabbing) != 0;
+ const bool clicked = (hovered && g.IO.MouseClicked[0]);
+ const bool make_active = (input_requested_by_tabbing || clicked || g.NavActivateId == id || g.NavActivateInputId == id);
+ if (make_active && temp_input_allowed)
+ if (input_requested_by_tabbing || (clicked && g.IO.KeyCtrl) || g.NavActivateInputId == id)
+ temp_input_is_active = true;
+
+ if (make_active && !temp_input_is_active)
+ {
+ SetActiveID(id, window);
+ SetFocusID(id, window);
+ FocusWindow(window);
+ g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
+ }
+ }
+
+ if (temp_input_is_active)
+ {
+ // Only clamp CTRL+Click input when ImGuiSliderFlags_AlwaysClamp is set
+ const bool is_clamp_input = (flags & ImGuiSliderFlags_AlwaysClamp) != 0;
+ return TempInputScalar(frame_bb, id, label, data_type, p_data, format, is_clamp_input ? p_min : NULL, is_clamp_input ? p_max : NULL);
+ }
+
+ // Draw frame
+ const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
+ RenderNavHighlight(frame_bb, id);
+ RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, g.Style.FrameRounding);
+
+ // Slider behavior
+ ImRect grab_bb;
+ const bool value_changed = SliderBehavior(frame_bb, id, data_type, p_data, p_min, p_max, format, flags, &grab_bb);
+ if (value_changed)
+ MarkItemEdited(id);
+
+ // Render grab
+ if (grab_bb.Max.x > grab_bb.Min.x)
+ window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding);
+
+ // Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
+ char value_buf[64];
+ const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format);
+ if (g.LogEnabled)
+ LogSetNextTextDecoration("{", "}");
+ RenderTextClipped(frame_bb.Min, frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f, 0.5f));
+
+ if (label_size.x > 0.0f)
+ RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags);
+ return value_changed;
+}
+
+// Add multiple sliders on 1 line for compact edition of multiple components
+bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format, ImGuiSliderFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ bool value_changed = false;
+ BeginGroup();
+ PushID(label);
+ PushMultiItemsWidths(components, CalcItemWidth());
+ size_t type_size = GDataTypeInfo[data_type].Size;
+ for (int i = 0; i < components; i++)
+ {
+ PushID(i);
+ if (i > 0)
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+ value_changed |= SliderScalar("", data_type, v, v_min, v_max, format, flags);
+ PopID();
+ PopItemWidth();
+ v = (void*)((char*)v + type_size);
+ }
+ PopID();
+
+ const char* label_end = FindRenderedTextEnd(label);
+ if (label != label_end)
+ {
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+ TextEx(label, label_end);
+ }
+
+ EndGroup();
+ return value_changed;
+}
+
+bool ImGui::SliderFloat(const char* label, float* v, float v_min, float v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return SliderScalar(label, ImGuiDataType_Float, v, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::SliderFloat2(const char* label, float v[2], float v_min, float v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return SliderScalarN(label, ImGuiDataType_Float, v, 2, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::SliderFloat3(const char* label, float v[3], float v_min, float v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return SliderScalarN(label, ImGuiDataType_Float, v, 3, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::SliderFloat4(const char* label, float v[4], float v_min, float v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return SliderScalarN(label, ImGuiDataType_Float, v, 4, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::SliderAngle(const char* label, float* v_rad, float v_degrees_min, float v_degrees_max, const char* format, ImGuiSliderFlags flags)
+{
+ if (format == NULL)
+ format = "%.0f deg";
+ float v_deg = (*v_rad) * 360.0f / (2 * IM_PI);
+ bool value_changed = SliderFloat(label, &v_deg, v_degrees_min, v_degrees_max, format, flags);
+ *v_rad = v_deg * (2 * IM_PI) / 360.0f;
+ return value_changed;
+}
+
+bool ImGui::SliderInt(const char* label, int* v, int v_min, int v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return SliderScalar(label, ImGuiDataType_S32, v, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::SliderInt2(const char* label, int v[2], int v_min, int v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return SliderScalarN(label, ImGuiDataType_S32, v, 2, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::SliderInt3(const char* label, int v[3], int v_min, int v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return SliderScalarN(label, ImGuiDataType_S32, v, 3, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::SliderInt4(const char* label, int v[4], int v_min, int v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return SliderScalarN(label, ImGuiDataType_S32, v, 4, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::VSliderScalar(const char* label, const ImVec2& size, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, ImGuiSliderFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = window->GetID(label);
+
+ const ImVec2 label_size = CalcTextSize(label, NULL, true);
+ const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + size);
+ const ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
+
+ ItemSize(bb, style.FramePadding.y);
+ if (!ItemAdd(frame_bb, id))
+ return false;
+
+ // Default format string when passing NULL
+ if (format == NULL)
+ format = DataTypeGetInfo(data_type)->PrintFmt;
+ else if (data_type == ImGuiDataType_S32 && strcmp(format, "%d") != 0) // (FIXME-LEGACY: Patch old "%.0f" format string to use "%d", read function more details.)
+ format = PatchFormatStringFloatToInt(format);
+
+ const bool hovered = ItemHoverable(frame_bb, id);
+ if ((hovered && g.IO.MouseClicked[0]) || g.NavActivateId == id || g.NavActivateInputId == id)
+ {
+ SetActiveID(id, window);
+ SetFocusID(id, window);
+ FocusWindow(window);
+ g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
+ }
+
+ // Draw frame
+ const ImU32 frame_col = GetColorU32(g.ActiveId == id ? ImGuiCol_FrameBgActive : hovered ? ImGuiCol_FrameBgHovered : ImGuiCol_FrameBg);
+ RenderNavHighlight(frame_bb, id);
+ RenderFrame(frame_bb.Min, frame_bb.Max, frame_col, true, g.Style.FrameRounding);
+
+ // Slider behavior
+ ImRect grab_bb;
+ const bool value_changed = SliderBehavior(frame_bb, id, data_type, p_data, p_min, p_max, format, flags | ImGuiSliderFlags_Vertical, &grab_bb);
+ if (value_changed)
+ MarkItemEdited(id);
+
+ // Render grab
+ if (grab_bb.Max.y > grab_bb.Min.y)
+ window->DrawList->AddRectFilled(grab_bb.Min, grab_bb.Max, GetColorU32(g.ActiveId == id ? ImGuiCol_SliderGrabActive : ImGuiCol_SliderGrab), style.GrabRounding);
+
+ // Display value using user-provided display format so user can add prefix/suffix/decorations to the value.
+ // For the vertical slider we allow centered text to overlap the frame padding
+ char value_buf[64];
+ const char* value_buf_end = value_buf + DataTypeFormatString(value_buf, IM_ARRAYSIZE(value_buf), data_type, p_data, format);
+ RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, value_buf, value_buf_end, NULL, ImVec2(0.5f, 0.0f));
+ if (label_size.x > 0.0f)
+ RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+
+ return value_changed;
+}
+
+bool ImGui::VSliderFloat(const char* label, const ImVec2& size, float* v, float v_min, float v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return VSliderScalar(label, size, ImGuiDataType_Float, v, &v_min, &v_max, format, flags);
+}
+
+bool ImGui::VSliderInt(const char* label, const ImVec2& size, int* v, int v_min, int v_max, const char* format, ImGuiSliderFlags flags)
+{
+ return VSliderScalar(label, size, ImGuiDataType_S32, v, &v_min, &v_max, format, flags);
+}
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+
+// Obsolete versions with power parameter. See https://github.com/ocornut/imgui/issues/3361 for details.
+bool ImGui::SliderScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_min, const void* p_max, const char* format, float power)
+{
+ ImGuiSliderFlags slider_flags = ImGuiSliderFlags_None;
+ if (power != 1.0f)
+ {
+ IM_ASSERT(power == 1.0f && "Call function with ImGuiSliderFlags_Logarithmic flags instead of using the old 'float power' function!");
+ slider_flags |= ImGuiSliderFlags_Logarithmic; // Fallback for non-asserting paths
+ }
+ return SliderScalar(label, data_type, p_data, p_min, p_max, format, slider_flags);
+}
+
+bool ImGui::SliderScalarN(const char* label, ImGuiDataType data_type, void* v, int components, const void* v_min, const void* v_max, const char* format, float power)
+{
+ ImGuiSliderFlags slider_flags = ImGuiSliderFlags_None;
+ if (power != 1.0f)
+ {
+ IM_ASSERT(power == 1.0f && "Call function with ImGuiSliderFlags_Logarithmic flags instead of using the old 'float power' function!");
+ slider_flags |= ImGuiSliderFlags_Logarithmic; // Fallback for non-asserting paths
+ }
+ return SliderScalarN(label, data_type, v, components, v_min, v_max, format, slider_flags);
+}
+
+#endif // IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: InputScalar, InputFloat, InputInt, etc.
+//-------------------------------------------------------------------------
+// - ImParseFormatFindStart() [Internal]
+// - ImParseFormatFindEnd() [Internal]
+// - ImParseFormatTrimDecorations() [Internal]
+// - ImParseFormatSanitizeForPrinting() [Internal]
+// - ImParseFormatSanitizeForScanning() [Internal]
+// - ImParseFormatPrecision() [Internal]
+// - TempInputTextScalar() [Internal]
+// - InputScalar()
+// - InputScalarN()
+// - InputFloat()
+// - InputFloat2()
+// - InputFloat3()
+// - InputFloat4()
+// - InputInt()
+// - InputInt2()
+// - InputInt3()
+// - InputInt4()
+// - InputDouble()
+//-------------------------------------------------------------------------
+
+// We don't use strchr() because our strings are usually very short and often start with '%'
+const char* ImParseFormatFindStart(const char* fmt)
+{
+ while (char c = fmt[0])
+ {
+ if (c == '%' && fmt[1] != '%')
+ return fmt;
+ else if (c == '%')
+ fmt++;
+ fmt++;
+ }
+ return fmt;
+}
+
+const char* ImParseFormatFindEnd(const char* fmt)
+{
+ // Printf/scanf types modifiers: I/L/h/j/l/t/w/z. Other uppercase letters qualify as types aka end of the format.
+ if (fmt[0] != '%')
+ return fmt;
+ const unsigned int ignored_uppercase_mask = (1 << ('I'-'A')) | (1 << ('L'-'A'));
+ const unsigned int ignored_lowercase_mask = (1 << ('h'-'a')) | (1 << ('j'-'a')) | (1 << ('l'-'a')) | (1 << ('t'-'a')) | (1 << ('w'-'a')) | (1 << ('z'-'a'));
+ for (char c; (c = *fmt) != 0; fmt++)
+ {
+ if (c >= 'A' && c <= 'Z' && ((1 << (c - 'A')) & ignored_uppercase_mask) == 0)
+ return fmt + 1;
+ if (c >= 'a' && c <= 'z' && ((1 << (c - 'a')) & ignored_lowercase_mask) == 0)
+ return fmt + 1;
+ }
+ return fmt;
+}
+
+// Extract the format out of a format string with leading or trailing decorations
+// fmt = "blah blah" -> return fmt
+// fmt = "%.3f" -> return fmt
+// fmt = "hello %.3f" -> return fmt + 6
+// fmt = "%.3f hello" -> return buf written with "%.3f"
+const char* ImParseFormatTrimDecorations(const char* fmt, char* buf, size_t buf_size)
+{
+ const char* fmt_start = ImParseFormatFindStart(fmt);
+ if (fmt_start[0] != '%')
+ return fmt;
+ const char* fmt_end = ImParseFormatFindEnd(fmt_start);
+ if (fmt_end[0] == 0) // If we only have leading decoration, we don't need to copy the data.
+ return fmt_start;
+ ImStrncpy(buf, fmt_start, ImMin((size_t)(fmt_end - fmt_start) + 1, buf_size));
+ return buf;
+}
+
+// Sanitize format
+// - Zero terminate so extra characters after format (e.g. "%f123") don't confuse atof/atoi
+// - stb_sprintf.h supports several new modifiers which format numbers in a way that also makes them incompatible atof/atoi.
+void ImParseFormatSanitizeForPrinting(const char* fmt_in, char* fmt_out, size_t fmt_out_size)
+{
+ const char* fmt_end = ImParseFormatFindEnd(fmt_in);
+ IM_UNUSED(fmt_out_size);
+ IM_ASSERT((size_t)(fmt_end - fmt_in + 1) < fmt_out_size); // Format is too long, let us know if this happens to you!
+ while (fmt_in < fmt_end)
+ {
+ char c = *fmt_in++;
+ if (c != '\'' && c != '$' && c != '_') // Custom flags provided by stb_sprintf.h. POSIX 2008 also supports '.
+ *(fmt_out++) = c;
+ }
+ *fmt_out = 0; // Zero-terminate
+}
+
+// - For scanning we need to remove all width and precision fields "%3.7f" -> "%f". BUT don't strip types like "%I64d" which includes digits. ! "%07I64d" -> "%I64d"
+const char* ImParseFormatSanitizeForScanning(const char* fmt_in, char* fmt_out, size_t fmt_out_size)
+{
+ const char* fmt_end = ImParseFormatFindEnd(fmt_in);
+ const char* fmt_out_begin = fmt_out;
+ IM_UNUSED(fmt_out_size);
+ IM_ASSERT((size_t)(fmt_end - fmt_in + 1) < fmt_out_size); // Format is too long, let us know if this happens to you!
+ bool has_type = false;
+ while (fmt_in < fmt_end)
+ {
+ char c = *fmt_in++;
+ if (!has_type && ((c >= '0' && c <= '9') || c == '.'))
+ continue;
+ has_type |= ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')); // Stop skipping digits
+ if (c != '\'' && c != '$' && c != '_') // Custom flags provided by stb_sprintf.h. POSIX 2008 also supports '.
+ *(fmt_out++) = c;
+ }
+ *fmt_out = 0; // Zero-terminate
+ return fmt_out_begin;
+}
+
+template<typename TYPE>
+static const char* ImAtoi(const char* src, TYPE* output)
+{
+ int negative = 0;
+ if (*src == '-') { negative = 1; src++; }
+ if (*src == '+') { src++; }
+ TYPE v = 0;
+ while (*src >= '0' && *src <= '9')
+ v = (v * 10) + (*src++ - '0');
+ *output = negative ? -v : v;
+ return src;
+}
+
+// Parse display precision back from the display format string
+// FIXME: This is still used by some navigation code path to infer a minimum tweak step, but we should aim to rework widgets so it isn't needed.
+int ImParseFormatPrecision(const char* fmt, int default_precision)
+{
+ fmt = ImParseFormatFindStart(fmt);
+ if (fmt[0] != '%')
+ return default_precision;
+ fmt++;
+ while (*fmt >= '0' && *fmt <= '9')
+ fmt++;
+ int precision = INT_MAX;
+ if (*fmt == '.')
+ {
+ fmt = ImAtoi<int>(fmt + 1, &precision);
+ if (precision < 0 || precision > 99)
+ precision = default_precision;
+ }
+ if (*fmt == 'e' || *fmt == 'E') // Maximum precision with scientific notation
+ precision = -1;
+ if ((*fmt == 'g' || *fmt == 'G') && precision == INT_MAX)
+ precision = -1;
+ return (precision == INT_MAX) ? default_precision : precision;
+}
+
+// Create text input in place of another active widget (e.g. used when doing a CTRL+Click on drag/slider widgets)
+// FIXME: Facilitate using this in variety of other situations.
+bool ImGui::TempInputText(const ImRect& bb, ImGuiID id, const char* label, char* buf, int buf_size, ImGuiInputTextFlags flags)
+{
+ // On the first frame, g.TempInputTextId == 0, then on subsequent frames it becomes == id.
+ // We clear ActiveID on the first frame to allow the InputText() taking it back.
+ ImGuiContext& g = *GImGui;
+ const bool init = (g.TempInputId != id);
+ if (init)
+ ClearActiveID();
+
+ g.CurrentWindow->DC.CursorPos = bb.Min;
+ bool value_changed = InputTextEx(label, NULL, buf, buf_size, bb.GetSize(), flags | ImGuiInputTextFlags_MergedItem);
+ if (init)
+ {
+ // First frame we started displaying the InputText widget, we expect it to take the active id.
+ IM_ASSERT(g.ActiveId == id);
+ g.TempInputId = g.ActiveId;
+ }
+ return value_changed;
+}
+
+static inline ImGuiInputTextFlags InputScalar_DefaultCharsFilter(ImGuiDataType data_type, const char* format)
+{
+ if (data_type == ImGuiDataType_Float || data_type == ImGuiDataType_Double)
+ return ImGuiInputTextFlags_CharsScientific;
+ const char format_last_char = format[0] ? format[strlen(format) - 1] : 0;
+ return (format_last_char == 'x' || format_last_char == 'X') ? ImGuiInputTextFlags_CharsHexadecimal : ImGuiInputTextFlags_CharsDecimal;
+}
+
+// Note that Drag/Slider functions are only forwarding the min/max values clamping values if the ImGuiSliderFlags_AlwaysClamp flag is set!
+// This is intended: this way we allow CTRL+Click manual input to set a value out of bounds, for maximum flexibility.
+// However this may not be ideal for all uses, as some user code may break on out of bound values.
+bool ImGui::TempInputScalar(const ImRect& bb, ImGuiID id, const char* label, ImGuiDataType data_type, void* p_data, const char* format, const void* p_clamp_min, const void* p_clamp_max)
+{
+ char fmt_buf[32];
+ char data_buf[32];
+ format = ImParseFormatTrimDecorations(format, fmt_buf, IM_ARRAYSIZE(fmt_buf));
+ DataTypeFormatString(data_buf, IM_ARRAYSIZE(data_buf), data_type, p_data, format);
+ ImStrTrimBlanks(data_buf);
+
+ ImGuiInputTextFlags flags = ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_NoMarkEdited;
+ flags |= InputScalar_DefaultCharsFilter(data_type, format);
+
+ bool value_changed = false;
+ if (TempInputText(bb, id, label, data_buf, IM_ARRAYSIZE(data_buf), flags))
+ {
+ // Backup old value
+ size_t data_type_size = DataTypeGetInfo(data_type)->Size;
+ ImGuiDataTypeTempStorage data_backup;
+ memcpy(&data_backup, p_data, data_type_size);
+
+ // Apply new value (or operations) then clamp
+ DataTypeApplyFromText(data_buf, data_type, p_data, format);
+ if (p_clamp_min || p_clamp_max)
+ {
+ if (p_clamp_min && p_clamp_max && DataTypeCompare(data_type, p_clamp_min, p_clamp_max) > 0)
+ ImSwap(p_clamp_min, p_clamp_max);
+ DataTypeClamp(data_type, p_data, p_clamp_min, p_clamp_max);
+ }
+
+ // Only mark as edited if new value is different
+ value_changed = memcmp(&data_backup, p_data, data_type_size) != 0;
+ if (value_changed)
+ MarkItemEdited(id);
+ }
+ return value_changed;
+}
+
+// Note: p_data, p_step, p_step_fast are _pointers_ to a memory address holding the data. For an Input widget, p_step and p_step_fast are optional.
+// Read code of e.g. InputFloat(), InputInt() etc. or examples in 'Demo->Widgets->Data Types' to understand how to use this function directly.
+bool ImGui::InputScalar(const char* label, ImGuiDataType data_type, void* p_data, const void* p_step, const void* p_step_fast, const char* format, ImGuiInputTextFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ ImGuiStyle& style = g.Style;
+
+ if (format == NULL)
+ format = DataTypeGetInfo(data_type)->PrintFmt;
+
+ char buf[64];
+ DataTypeFormatString(buf, IM_ARRAYSIZE(buf), data_type, p_data, format);
+
+ // Testing ActiveId as a minor optimization as filtering is not needed until active
+ if (g.ActiveId == 0 && (flags & (ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsScientific)) == 0)
+ flags |= InputScalar_DefaultCharsFilter(data_type, format);
+ flags |= ImGuiInputTextFlags_AutoSelectAll | ImGuiInputTextFlags_NoMarkEdited; // We call MarkItemEdited() ourselves by comparing the actual data rather than the string.
+
+ bool value_changed = false;
+ if (p_step != NULL)
+ {
+ const float button_size = GetFrameHeight();
+
+ BeginGroup(); // The only purpose of the group here is to allow the caller to query item data e.g. IsItemActive()
+ PushID(label);
+ SetNextItemWidth(ImMax(1.0f, CalcItemWidth() - (button_size + style.ItemInnerSpacing.x) * 2));
+ if (InputText("", buf, IM_ARRAYSIZE(buf), flags)) // PushId(label) + "" gives us the expected ID from outside point of view
+ value_changed = DataTypeApplyFromText(buf, data_type, p_data, format);
+
+ // Step buttons
+ const ImVec2 backup_frame_padding = style.FramePadding;
+ style.FramePadding.x = style.FramePadding.y;
+ ImGuiButtonFlags button_flags = ImGuiButtonFlags_Repeat | ImGuiButtonFlags_DontClosePopups;
+ if (flags & ImGuiInputTextFlags_ReadOnly)
+ BeginDisabled();
+ SameLine(0, style.ItemInnerSpacing.x);
+ if (ButtonEx("-", ImVec2(button_size, button_size), button_flags))
+ {
+ DataTypeApplyOp(data_type, '-', p_data, p_data, g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step);
+ value_changed = true;
+ }
+ SameLine(0, style.ItemInnerSpacing.x);
+ if (ButtonEx("+", ImVec2(button_size, button_size), button_flags))
+ {
+ DataTypeApplyOp(data_type, '+', p_data, p_data, g.IO.KeyCtrl && p_step_fast ? p_step_fast : p_step);
+ value_changed = true;
+ }
+ if (flags & ImGuiInputTextFlags_ReadOnly)
+ EndDisabled();
+
+ const char* label_end = FindRenderedTextEnd(label);
+ if (label != label_end)
+ {
+ SameLine(0, style.ItemInnerSpacing.x);
+ TextEx(label, label_end);
+ }
+ style.FramePadding = backup_frame_padding;
+
+ PopID();
+ EndGroup();
+ }
+ else
+ {
+ if (InputText(label, buf, IM_ARRAYSIZE(buf), flags))
+ value_changed = DataTypeApplyFromText(buf, data_type, p_data, format);
+ }
+ if (value_changed)
+ MarkItemEdited(g.LastItemData.ID);
+
+ return value_changed;
+}
+
+bool ImGui::InputScalarN(const char* label, ImGuiDataType data_type, void* p_data, int components, const void* p_step, const void* p_step_fast, const char* format, ImGuiInputTextFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ bool value_changed = false;
+ BeginGroup();
+ PushID(label);
+ PushMultiItemsWidths(components, CalcItemWidth());
+ size_t type_size = GDataTypeInfo[data_type].Size;
+ for (int i = 0; i < components; i++)
+ {
+ PushID(i);
+ if (i > 0)
+ SameLine(0, g.Style.ItemInnerSpacing.x);
+ value_changed |= InputScalar("", data_type, p_data, p_step, p_step_fast, format, flags);
+ PopID();
+ PopItemWidth();
+ p_data = (void*)((char*)p_data + type_size);
+ }
+ PopID();
+
+ const char* label_end = FindRenderedTextEnd(label);
+ if (label != label_end)
+ {
+ SameLine(0.0f, g.Style.ItemInnerSpacing.x);
+ TextEx(label, label_end);
+ }
+
+ EndGroup();
+ return value_changed;
+}
+
+bool ImGui::InputFloat(const char* label, float* v, float step, float step_fast, const char* format, ImGuiInputTextFlags flags)
+{
+ flags |= ImGuiInputTextFlags_CharsScientific;
+ return InputScalar(label, ImGuiDataType_Float, (void*)v, (void*)(step > 0.0f ? &step : NULL), (void*)(step_fast > 0.0f ? &step_fast : NULL), format, flags);
+}
+
+bool ImGui::InputFloat2(const char* label, float v[2], const char* format, ImGuiInputTextFlags flags)
+{
+ return InputScalarN(label, ImGuiDataType_Float, v, 2, NULL, NULL, format, flags);
+}
+
+bool ImGui::InputFloat3(const char* label, float v[3], const char* format, ImGuiInputTextFlags flags)
+{
+ return InputScalarN(label, ImGuiDataType_Float, v, 3, NULL, NULL, format, flags);
+}
+
+bool ImGui::InputFloat4(const char* label, float v[4], const char* format, ImGuiInputTextFlags flags)
+{
+ return InputScalarN(label, ImGuiDataType_Float, v, 4, NULL, NULL, format, flags);
+}
+
+bool ImGui::InputInt(const char* label, int* v, int step, int step_fast, ImGuiInputTextFlags flags)
+{
+ // Hexadecimal input provided as a convenience but the flag name is awkward. Typically you'd use InputText() to parse your own data, if you want to handle prefixes.
+ const char* format = (flags & ImGuiInputTextFlags_CharsHexadecimal) ? "%08X" : "%d";
+ return InputScalar(label, ImGuiDataType_S32, (void*)v, (void*)(step > 0 ? &step : NULL), (void*)(step_fast > 0 ? &step_fast : NULL), format, flags);
+}
+
+bool ImGui::InputInt2(const char* label, int v[2], ImGuiInputTextFlags flags)
+{
+ return InputScalarN(label, ImGuiDataType_S32, v, 2, NULL, NULL, "%d", flags);
+}
+
+bool ImGui::InputInt3(const char* label, int v[3], ImGuiInputTextFlags flags)
+{
+ return InputScalarN(label, ImGuiDataType_S32, v, 3, NULL, NULL, "%d", flags);
+}
+
+bool ImGui::InputInt4(const char* label, int v[4], ImGuiInputTextFlags flags)
+{
+ return InputScalarN(label, ImGuiDataType_S32, v, 4, NULL, NULL, "%d", flags);
+}
+
+bool ImGui::InputDouble(const char* label, double* v, double step, double step_fast, const char* format, ImGuiInputTextFlags flags)
+{
+ flags |= ImGuiInputTextFlags_CharsScientific;
+ return InputScalar(label, ImGuiDataType_Double, (void*)v, (void*)(step > 0.0 ? &step : NULL), (void*)(step_fast > 0.0 ? &step_fast : NULL), format, flags);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: InputText, InputTextMultiline, InputTextWithHint
+//-------------------------------------------------------------------------
+// - InputText()
+// - InputTextWithHint()
+// - InputTextMultiline()
+// - InputTextGetCharInfo() [Internal]
+// - InputTextReindexLines() [Internal]
+// - InputTextReindexLinesRange() [Internal]
+// - InputTextEx() [Internal]
+// - DebugNodeInputTextState() [Internal]
+//-------------------------------------------------------------------------
+
+bool ImGui::InputText(const char* label, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
+{
+ IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline()
+ return InputTextEx(label, NULL, buf, (int)buf_size, ImVec2(0, 0), flags, callback, user_data);
+}
+
+bool ImGui::InputTextMultiline(const char* label, char* buf, size_t buf_size, const ImVec2& size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
+{
+ return InputTextEx(label, NULL, buf, (int)buf_size, size, flags | ImGuiInputTextFlags_Multiline, callback, user_data);
+}
+
+bool ImGui::InputTextWithHint(const char* label, const char* hint, char* buf, size_t buf_size, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data)
+{
+ IM_ASSERT(!(flags & ImGuiInputTextFlags_Multiline)); // call InputTextMultiline()
+ return InputTextEx(label, hint, buf, (int)buf_size, ImVec2(0, 0), flags, callback, user_data);
+}
+
+static int InputTextCalcTextLenAndLineCount(const char* text_begin, const char** out_text_end)
+{
+ int line_count = 0;
+ const char* s = text_begin;
+ while (char c = *s++) // We are only matching for \n so we can ignore UTF-8 decoding
+ if (c == '\n')
+ line_count++;
+ s--;
+ if (s[0] != '\n' && s[0] != '\r')
+ line_count++;
+ *out_text_end = s;
+ return line_count;
+}
+
+static ImVec2 InputTextCalcTextSizeW(const ImWchar* text_begin, const ImWchar* text_end, const ImWchar** remaining, ImVec2* out_offset, bool stop_on_new_line)
+{
+ ImGuiContext& g = *GImGui;
+ ImFont* font = g.Font;
+ const float line_height = g.FontSize;
+ const float scale = line_height / font->FontSize;
+
+ ImVec2 text_size = ImVec2(0, 0);
+ float line_width = 0.0f;
+
+ const ImWchar* s = text_begin;
+ while (s < text_end)
+ {
+ unsigned int c = (unsigned int)(*s++);
+ if (c == '\n')
+ {
+ text_size.x = ImMax(text_size.x, line_width);
+ text_size.y += line_height;
+ line_width = 0.0f;
+ if (stop_on_new_line)
+ break;
+ continue;
+ }
+ if (c == '\r')
+ continue;
+
+ const float char_width = font->GetCharAdvance((ImWchar)c) * scale;
+ line_width += char_width;
+ }
+
+ if (text_size.x < line_width)
+ text_size.x = line_width;
+
+ if (out_offset)
+ *out_offset = ImVec2(line_width, text_size.y + line_height); // offset allow for the possibility of sitting after a trailing \n
+
+ if (line_width > 0 || text_size.y == 0.0f) // whereas size.y will ignore the trailing \n
+ text_size.y += line_height;
+
+ if (remaining)
+ *remaining = s;
+
+ return text_size;
+}
+
+// Wrapper for stb_textedit.h to edit text (our wrapper is for: statically sized buffer, single-line, wchar characters. InputText converts between UTF-8 and wchar)
+namespace ImStb
+{
+
+static int STB_TEXTEDIT_STRINGLEN(const ImGuiInputTextState* obj) { return obj->CurLenW; }
+static ImWchar STB_TEXTEDIT_GETCHAR(const ImGuiInputTextState* obj, int idx) { return obj->TextW[idx]; }
+static float STB_TEXTEDIT_GETWIDTH(ImGuiInputTextState* obj, int line_start_idx, int char_idx) { ImWchar c = obj->TextW[line_start_idx + char_idx]; if (c == '\n') return STB_TEXTEDIT_GETWIDTH_NEWLINE; ImGuiContext& g = *GImGui; return g.Font->GetCharAdvance(c) * (g.FontSize / g.Font->FontSize); }
+static int STB_TEXTEDIT_KEYTOTEXT(int key) { return key >= 0x200000 ? 0 : key; }
+static ImWchar STB_TEXTEDIT_NEWLINE = '\n';
+static void STB_TEXTEDIT_LAYOUTROW(StbTexteditRow* r, ImGuiInputTextState* obj, int line_start_idx)
+{
+ const ImWchar* text = obj->TextW.Data;
+ const ImWchar* text_remaining = NULL;
+ const ImVec2 size = InputTextCalcTextSizeW(text + line_start_idx, text + obj->CurLenW, &text_remaining, NULL, true);
+ r->x0 = 0.0f;
+ r->x1 = size.x;
+ r->baseline_y_delta = size.y;
+ r->ymin = 0.0f;
+ r->ymax = size.y;
+ r->num_chars = (int)(text_remaining - (text + line_start_idx));
+}
+
+// When ImGuiInputTextFlags_Password is set, we don't want actions such as CTRL+Arrow to leak the fact that underlying data are blanks or separators.
+static bool is_separator(unsigned int c) { return ImCharIsBlankW(c) || c==',' || c==';' || c=='(' || c==')' || c=='{' || c=='}' || c=='[' || c==']' || c=='|' || c=='\n' || c=='\r'; }
+static int is_word_boundary_from_right(ImGuiInputTextState* obj, int idx) { if (obj->Flags & ImGuiInputTextFlags_Password) return 0; return idx > 0 ? (is_separator(obj->TextW[idx - 1]) && !is_separator(obj->TextW[idx]) ) : 1; }
+static int is_word_boundary_from_left(ImGuiInputTextState* obj, int idx) { if (obj->Flags & ImGuiInputTextFlags_Password) return 0; return idx > 0 ? (!is_separator(obj->TextW[idx - 1]) && is_separator(obj->TextW[idx])) : 1; }
+static int STB_TEXTEDIT_MOVEWORDLEFT_IMPL(ImGuiInputTextState* obj, int idx) { idx--; while (idx >= 0 && !is_word_boundary_from_right(obj, idx)) idx--; return idx < 0 ? 0 : idx; }
+static int STB_TEXTEDIT_MOVEWORDRIGHT_MAC(ImGuiInputTextState* obj, int idx) { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_left(obj, idx)) idx++; return idx > len ? len : idx; }
+#define STB_TEXTEDIT_MOVEWORDLEFT STB_TEXTEDIT_MOVEWORDLEFT_IMPL // They need to be #define for stb_textedit.h
+#ifdef __APPLE__ // FIXME: Move setting to IO structure
+#define STB_TEXTEDIT_MOVEWORDRIGHT STB_TEXTEDIT_MOVEWORDRIGHT_MAC
+#else
+static int STB_TEXTEDIT_MOVEWORDRIGHT_WIN(ImGuiInputTextState* obj, int idx) { idx++; int len = obj->CurLenW; while (idx < len && !is_word_boundary_from_right(obj, idx)) idx++; return idx > len ? len : idx; }
+#define STB_TEXTEDIT_MOVEWORDRIGHT STB_TEXTEDIT_MOVEWORDRIGHT_WIN
+#endif
+
+static void STB_TEXTEDIT_DELETECHARS(ImGuiInputTextState* obj, int pos, int n)
+{
+ ImWchar* dst = obj->TextW.Data + pos;
+
+ // We maintain our buffer length in both UTF-8 and wchar formats
+ obj->Edited = true;
+ obj->CurLenA -= ImTextCountUtf8BytesFromStr(dst, dst + n);
+ obj->CurLenW -= n;
+
+ // Offset remaining text (FIXME-OPT: Use memmove)
+ const ImWchar* src = obj->TextW.Data + pos + n;
+ while (ImWchar c = *src++)
+ *dst++ = c;
+ *dst = '\0';
+}
+
+static bool STB_TEXTEDIT_INSERTCHARS(ImGuiInputTextState* obj, int pos, const ImWchar* new_text, int new_text_len)
+{
+ const bool is_resizable = (obj->Flags & ImGuiInputTextFlags_CallbackResize) != 0;
+ const int text_len = obj->CurLenW;
+ IM_ASSERT(pos <= text_len);
+
+ const int new_text_len_utf8 = ImTextCountUtf8BytesFromStr(new_text, new_text + new_text_len);
+ if (!is_resizable && (new_text_len_utf8 + obj->CurLenA + 1 > obj->BufCapacityA))
+ return false;
+
+ // Grow internal buffer if needed
+ if (new_text_len + text_len + 1 > obj->TextW.Size)
+ {
+ if (!is_resizable)
+ return false;
+ IM_ASSERT(text_len < obj->TextW.Size);
+ obj->TextW.resize(text_len + ImClamp(new_text_len * 4, 32, ImMax(256, new_text_len)) + 1);
+ }
+
+ ImWchar* text = obj->TextW.Data;
+ if (pos != text_len)
+ memmove(text + pos + new_text_len, text + pos, (size_t)(text_len - pos) * sizeof(ImWchar));
+ memcpy(text + pos, new_text, (size_t)new_text_len * sizeof(ImWchar));
+
+ obj->Edited = true;
+ obj->CurLenW += new_text_len;
+ obj->CurLenA += new_text_len_utf8;
+ obj->TextW[obj->CurLenW] = '\0';
+
+ return true;
+}
+
+// We don't use an enum so we can build even with conflicting symbols (if another user of stb_textedit.h leak their STB_TEXTEDIT_K_* symbols)
+#define STB_TEXTEDIT_K_LEFT 0x200000 // keyboard input to move cursor left
+#define STB_TEXTEDIT_K_RIGHT 0x200001 // keyboard input to move cursor right
+#define STB_TEXTEDIT_K_UP 0x200002 // keyboard input to move cursor up
+#define STB_TEXTEDIT_K_DOWN 0x200003 // keyboard input to move cursor down
+#define STB_TEXTEDIT_K_LINESTART 0x200004 // keyboard input to move cursor to start of line
+#define STB_TEXTEDIT_K_LINEEND 0x200005 // keyboard input to move cursor to end of line
+#define STB_TEXTEDIT_K_TEXTSTART 0x200006 // keyboard input to move cursor to start of text
+#define STB_TEXTEDIT_K_TEXTEND 0x200007 // keyboard input to move cursor to end of text
+#define STB_TEXTEDIT_K_DELETE 0x200008 // keyboard input to delete selection or character under cursor
+#define STB_TEXTEDIT_K_BACKSPACE 0x200009 // keyboard input to delete selection or character left of cursor
+#define STB_TEXTEDIT_K_UNDO 0x20000A // keyboard input to perform undo
+#define STB_TEXTEDIT_K_REDO 0x20000B // keyboard input to perform redo
+#define STB_TEXTEDIT_K_WORDLEFT 0x20000C // keyboard input to move cursor left one word
+#define STB_TEXTEDIT_K_WORDRIGHT 0x20000D // keyboard input to move cursor right one word
+#define STB_TEXTEDIT_K_PGUP 0x20000E // keyboard input to move cursor up a page
+#define STB_TEXTEDIT_K_PGDOWN 0x20000F // keyboard input to move cursor down a page
+#define STB_TEXTEDIT_K_SHIFT 0x400000
+
+#define STB_TEXTEDIT_IMPLEMENTATION
+#include "imstb_textedit.h"
+
+// stb_textedit internally allows for a single undo record to do addition and deletion, but somehow, calling
+// the stb_textedit_paste() function creates two separate records, so we perform it manually. (FIXME: Report to nothings/stb?)
+static void stb_textedit_replace(ImGuiInputTextState* str, STB_TexteditState* state, const STB_TEXTEDIT_CHARTYPE* text, int text_len)
+{
+ stb_text_makeundo_replace(str, state, 0, str->CurLenW, text_len);
+ ImStb::STB_TEXTEDIT_DELETECHARS(str, 0, str->CurLenW);
+ if (text_len <= 0)
+ return;
+ if (ImStb::STB_TEXTEDIT_INSERTCHARS(str, 0, text, text_len))
+ {
+ state->cursor = text_len;
+ state->has_preferred_x = 0;
+ return;
+ }
+ IM_ASSERT(0); // Failed to insert character, normally shouldn't happen because of how we currently use stb_textedit_replace()
+}
+
+} // namespace ImStb
+
+void ImGuiInputTextState::OnKeyPressed(int key)
+{
+ stb_textedit_key(this, &Stb, key);
+ CursorFollow = true;
+ CursorAnimReset();
+}
+
+ImGuiInputTextCallbackData::ImGuiInputTextCallbackData()
+{
+ memset(this, 0, sizeof(*this));
+}
+
+// Public API to manipulate UTF-8 text
+// We expose UTF-8 to the user (unlike the STB_TEXTEDIT_* functions which are manipulating wchar)
+// FIXME: The existence of this rarely exercised code path is a bit of a nuisance.
+void ImGuiInputTextCallbackData::DeleteChars(int pos, int bytes_count)
+{
+ IM_ASSERT(pos + bytes_count <= BufTextLen);
+ char* dst = Buf + pos;
+ const char* src = Buf + pos + bytes_count;
+ while (char c = *src++)
+ *dst++ = c;
+ *dst = '\0';
+
+ if (CursorPos >= pos + bytes_count)
+ CursorPos -= bytes_count;
+ else if (CursorPos >= pos)
+ CursorPos = pos;
+ SelectionStart = SelectionEnd = CursorPos;
+ BufDirty = true;
+ BufTextLen -= bytes_count;
+}
+
+void ImGuiInputTextCallbackData::InsertChars(int pos, const char* new_text, const char* new_text_end)
+{
+ const bool is_resizable = (Flags & ImGuiInputTextFlags_CallbackResize) != 0;
+ const int new_text_len = new_text_end ? (int)(new_text_end - new_text) : (int)strlen(new_text);
+ if (new_text_len + BufTextLen >= BufSize)
+ {
+ if (!is_resizable)
+ return;
+
+ // Contrary to STB_TEXTEDIT_INSERTCHARS() this is working in the UTF8 buffer, hence the mildly similar code (until we remove the U16 buffer altogether!)
+ ImGuiContext& g = *GImGui;
+ ImGuiInputTextState* edit_state = &g.InputTextState;
+ IM_ASSERT(edit_state->ID != 0 && g.ActiveId == edit_state->ID);
+ IM_ASSERT(Buf == edit_state->TextA.Data);
+ int new_buf_size = BufTextLen + ImClamp(new_text_len * 4, 32, ImMax(256, new_text_len)) + 1;
+ edit_state->TextA.reserve(new_buf_size + 1);
+ Buf = edit_state->TextA.Data;
+ BufSize = edit_state->BufCapacityA = new_buf_size;
+ }
+
+ if (BufTextLen != pos)
+ memmove(Buf + pos + new_text_len, Buf + pos, (size_t)(BufTextLen - pos));
+ memcpy(Buf + pos, new_text, (size_t)new_text_len * sizeof(char));
+ Buf[BufTextLen + new_text_len] = '\0';
+
+ if (CursorPos >= pos)
+ CursorPos += new_text_len;
+ SelectionStart = SelectionEnd = CursorPos;
+ BufDirty = true;
+ BufTextLen += new_text_len;
+}
+
+// Return false to discard a character.
+static bool InputTextFilterCharacter(unsigned int* p_char, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* user_data, ImGuiInputSource input_source)
+{
+ IM_ASSERT(input_source == ImGuiInputSource_Keyboard || input_source == ImGuiInputSource_Clipboard);
+ unsigned int c = *p_char;
+
+ // Filter non-printable (NB: isprint is unreliable! see #2467)
+ bool apply_named_filters = true;
+ if (c < 0x20)
+ {
+ bool pass = false;
+ pass |= (c == '\n' && (flags & ImGuiInputTextFlags_Multiline)); // Note that an Enter KEY will emit \r and be ignored (we poll for KEY in InputText() code)
+ pass |= (c == '\t' && (flags & ImGuiInputTextFlags_AllowTabInput));
+ if (!pass)
+ return false;
+ apply_named_filters = false; // Override named filters below so newline and tabs can still be inserted.
+ }
+
+ if (input_source != ImGuiInputSource_Clipboard)
+ {
+ // We ignore Ascii representation of delete (emitted from Backspace on OSX, see #2578, #2817)
+ if (c == 127)
+ return false;
+
+ // Filter private Unicode range. GLFW on OSX seems to send private characters for special keys like arrow keys (FIXME)
+ if (c >= 0xE000 && c <= 0xF8FF)
+ return false;
+ }
+
+ // Filter Unicode ranges we are not handling in this build
+ if (c > IM_UNICODE_CODEPOINT_MAX)
+ return false;
+
+ // Generic named filters
+ if (apply_named_filters && (flags & (ImGuiInputTextFlags_CharsDecimal | ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase | ImGuiInputTextFlags_CharsNoBlank | ImGuiInputTextFlags_CharsScientific)))
+ {
+ // The libc allows overriding locale, with e.g. 'setlocale(LC_NUMERIC, "de_DE.UTF-8");' which affect the output/input of printf/scanf to use e.g. ',' instead of '.'.
+ // The standard mandate that programs starts in the "C" locale where the decimal point is '.'.
+ // We don't really intend to provide widespread support for it, but out of empathy for people stuck with using odd API, we support the bare minimum aka overriding the decimal point.
+ // Change the default decimal_point with:
+ // ImGui::GetCurrentContext()->PlatformLocaleDecimalPoint = *localeconv()->decimal_point;
+ // Users of non-default decimal point (in particular ',') may be affected by word-selection logic (is_word_boundary_from_right/is_word_boundary_from_left) functions.
+ ImGuiContext& g = *GImGui;
+ const unsigned c_decimal_point = (unsigned int)g.PlatformLocaleDecimalPoint;
+
+ // Allow 0-9 . - + * /
+ if (flags & ImGuiInputTextFlags_CharsDecimal)
+ if (!(c >= '0' && c <= '9') && (c != c_decimal_point) && (c != '-') && (c != '+') && (c != '*') && (c != '/'))
+ return false;
+
+ // Allow 0-9 . - + * / e E
+ if (flags & ImGuiInputTextFlags_CharsScientific)
+ if (!(c >= '0' && c <= '9') && (c != c_decimal_point) && (c != '-') && (c != '+') && (c != '*') && (c != '/') && (c != 'e') && (c != 'E'))
+ return false;
+
+ // Allow 0-9 a-F A-F
+ if (flags & ImGuiInputTextFlags_CharsHexadecimal)
+ if (!(c >= '0' && c <= '9') && !(c >= 'a' && c <= 'f') && !(c >= 'A' && c <= 'F'))
+ return false;
+
+ // Turn a-z into A-Z
+ if (flags & ImGuiInputTextFlags_CharsUppercase)
+ if (c >= 'a' && c <= 'z')
+ *p_char = (c += (unsigned int)('A' - 'a'));
+
+ if (flags & ImGuiInputTextFlags_CharsNoBlank)
+ if (ImCharIsBlankW(c))
+ return false;
+ }
+
+ // Custom callback filter
+ if (flags & ImGuiInputTextFlags_CallbackCharFilter)
+ {
+ ImGuiInputTextCallbackData callback_data;
+ memset(&callback_data, 0, sizeof(ImGuiInputTextCallbackData));
+ callback_data.EventFlag = ImGuiInputTextFlags_CallbackCharFilter;
+ callback_data.EventChar = (ImWchar)c;
+ callback_data.Flags = flags;
+ callback_data.UserData = user_data;
+ if (callback(&callback_data) != 0)
+ return false;
+ *p_char = callback_data.EventChar;
+ if (!callback_data.EventChar)
+ return false;
+ }
+
+ return true;
+}
+
+// Find the shortest single replacement we can make to get the new text from the old text.
+// Important: needs to be run before TextW is rewritten with the new characters because calling STB_TEXTEDIT_GETCHAR() at the end.
+// FIXME: Ideally we should transition toward (1) making InsertChars()/DeleteChars() update undo-stack (2) discourage (and keep reconcile) or obsolete (and remove reconcile) accessing buffer directly.
+static void InputTextReconcileUndoStateAfterUserCallback(ImGuiInputTextState* state, const char* new_buf_a, int new_length_a)
+{
+ ImGuiContext& g = *GImGui;
+ const ImWchar* old_buf = state->TextW.Data;
+ const int old_length = state->CurLenW;
+ const int new_length = ImTextCountCharsFromUtf8(new_buf_a, new_buf_a + new_length_a);
+ g.TempBuffer.reserve_discard((new_length + 1) * sizeof(ImWchar));
+ ImWchar* new_buf = (ImWchar*)(void*)g.TempBuffer.Data;
+ ImTextStrFromUtf8(new_buf, new_length + 1, new_buf_a, new_buf_a + new_length_a);
+
+ const int shorter_length = ImMin(old_length, new_length);
+ int first_diff;
+ for (first_diff = 0; first_diff < shorter_length; first_diff++)
+ if (old_buf[first_diff] != new_buf[first_diff])
+ break;
+ if (first_diff == old_length && first_diff == new_length)
+ return;
+
+ int old_last_diff = old_length - 1;
+ int new_last_diff = new_length - 1;
+ for (; old_last_diff >= first_diff && new_last_diff >= first_diff; old_last_diff--, new_last_diff--)
+ if (old_buf[old_last_diff] != new_buf[new_last_diff])
+ break;
+
+ const int insert_len = new_last_diff - first_diff + 1;
+ const int delete_len = old_last_diff - first_diff + 1;
+ if (insert_len > 0 || delete_len > 0)
+ if (STB_TEXTEDIT_CHARTYPE* p = stb_text_createundo(&state->Stb.undostate, first_diff, delete_len, insert_len))
+ for (int i = 0; i < delete_len; i++)
+ p[i] = ImStb::STB_TEXTEDIT_GETCHAR(state, first_diff + i);
+}
+
+// Edit a string of text
+// - buf_size account for the zero-terminator, so a buf_size of 6 can hold "Hello" but not "Hello!".
+// This is so we can easily call InputText() on static arrays using ARRAYSIZE() and to match
+// Note that in std::string world, capacity() would omit 1 byte used by the zero-terminator.
+// - When active, hold on a privately held copy of the text (and apply back to 'buf'). So changing 'buf' while the InputText is active has no effect.
+// - If you want to use ImGui::InputText() with std::string, see misc/cpp/imgui_stdlib.h
+// (FIXME: Rather confusing and messy function, among the worse part of our codebase, expecting to rewrite a V2 at some point.. Partly because we are
+// doing UTF8 > U16 > UTF8 conversions on the go to easily interface with stb_textedit. Ideally should stay in UTF-8 all the time. See https://github.com/nothings/stb/issues/188)
+bool ImGui::InputTextEx(const char* label, const char* hint, char* buf, int buf_size, const ImVec2& size_arg, ImGuiInputTextFlags flags, ImGuiInputTextCallback callback, void* callback_user_data)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ IM_ASSERT(buf != NULL && buf_size >= 0);
+ IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackHistory) && (flags & ImGuiInputTextFlags_Multiline))); // Can't use both together (they both use up/down keys)
+ IM_ASSERT(!((flags & ImGuiInputTextFlags_CallbackCompletion) && (flags & ImGuiInputTextFlags_AllowTabInput))); // Can't use both together (they both use tab key)
+
+ ImGuiContext& g = *GImGui;
+ ImGuiIO& io = g.IO;
+ const ImGuiStyle& style = g.Style;
+
+ const bool RENDER_SELECTION_WHEN_INACTIVE = false;
+ const bool is_multiline = (flags & ImGuiInputTextFlags_Multiline) != 0;
+ const bool is_readonly = (flags & ImGuiInputTextFlags_ReadOnly) != 0;
+ const bool is_password = (flags & ImGuiInputTextFlags_Password) != 0;
+ const bool is_undoable = (flags & ImGuiInputTextFlags_NoUndoRedo) == 0;
+ const bool is_resizable = (flags & ImGuiInputTextFlags_CallbackResize) != 0;
+ if (is_resizable)
+ IM_ASSERT(callback != NULL); // Must provide a callback if you set the ImGuiInputTextFlags_CallbackResize flag!
+
+ if (is_multiline) // Open group before calling GetID() because groups tracks id created within their scope (including the scrollbar)
+ BeginGroup();
+ const ImGuiID id = window->GetID(label);
+ const ImVec2 label_size = CalcTextSize(label, NULL, true);
+ const ImVec2 frame_size = CalcItemSize(size_arg, CalcItemWidth(), (is_multiline ? g.FontSize * 8.0f : label_size.y) + style.FramePadding.y * 2.0f); // Arbitrary default of 8 lines high for multi-line
+ const ImVec2 total_size = ImVec2(frame_size.x + (label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f), frame_size.y);
+
+ const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
+ const ImRect total_bb(frame_bb.Min, frame_bb.Min + total_size);
+
+ ImGuiWindow* draw_window = window;
+ ImVec2 inner_size = frame_size;
+ ImGuiItemStatusFlags item_status_flags = 0;
+ ImGuiLastItemData item_data_backup;
+ if (is_multiline)
+ {
+ ImVec2 backup_pos = window->DC.CursorPos;
+ ItemSize(total_bb, style.FramePadding.y);
+ if (!ItemAdd(total_bb, id, &frame_bb, ImGuiItemFlags_Inputable))
+ {
+ EndGroup();
+ return false;
+ }
+ item_status_flags = g.LastItemData.StatusFlags;
+ item_data_backup = g.LastItemData;
+ window->DC.CursorPos = backup_pos;
+
+ // We reproduce the contents of BeginChildFrame() in order to provide 'label' so our window internal data are easier to read/debug.
+ // FIXME-NAV: Pressing NavActivate will trigger general child activation right before triggering our own below. Harmless but bizarre.
+ PushStyleColor(ImGuiCol_ChildBg, style.Colors[ImGuiCol_FrameBg]);
+ PushStyleVar(ImGuiStyleVar_ChildRounding, style.FrameRounding);
+ PushStyleVar(ImGuiStyleVar_ChildBorderSize, style.FrameBorderSize);
+ PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0, 0)); // Ensure no clip rect so mouse hover can reach FramePadding edges
+ bool child_visible = BeginChildEx(label, id, frame_bb.GetSize(), true, ImGuiWindowFlags_NoMove);
+ PopStyleVar(3);
+ PopStyleColor();
+ if (!child_visible)
+ {
+ EndChild();
+ EndGroup();
+ return false;
+ }
+ draw_window = g.CurrentWindow; // Child window
+ draw_window->DC.NavLayersActiveMaskNext |= (1 << draw_window->DC.NavLayerCurrent); // This is to ensure that EndChild() will display a navigation highlight so we can "enter" into it.
+ draw_window->DC.CursorPos += style.FramePadding;
+ inner_size.x -= draw_window->ScrollbarSizes.x;
+ }
+ else
+ {
+ // Support for internal ImGuiInputTextFlags_MergedItem flag, which could be redesigned as an ItemFlags if needed (with test performed in ItemAdd)
+ ItemSize(total_bb, style.FramePadding.y);
+ if (!(flags & ImGuiInputTextFlags_MergedItem))
+ if (!ItemAdd(total_bb, id, &frame_bb, ImGuiItemFlags_Inputable))
+ return false;
+ item_status_flags = g.LastItemData.StatusFlags;
+ }
+ const bool hovered = ItemHoverable(frame_bb, id);
+ if (hovered)
+ g.MouseCursor = ImGuiMouseCursor_TextInput;
+
+ // We are only allowed to access the state if we are already the active widget.
+ ImGuiInputTextState* state = GetInputTextState(id);
+
+ const bool input_requested_by_tabbing = (item_status_flags & ImGuiItemStatusFlags_FocusedByTabbing) != 0;
+ const bool input_requested_by_nav = (g.ActiveId != id) && ((g.NavActivateInputId == id) || (g.NavActivateId == id && g.NavInputSource == ImGuiInputSource_Keyboard));
+
+ const bool user_clicked = hovered && io.MouseClicked[0];
+ const bool user_scroll_finish = is_multiline && state != NULL && g.ActiveId == 0 && g.ActiveIdPreviousFrame == GetWindowScrollbarID(draw_window, ImGuiAxis_Y);
+ const bool user_scroll_active = is_multiline && state != NULL && g.ActiveId == GetWindowScrollbarID(draw_window, ImGuiAxis_Y);
+ bool clear_active_id = false;
+ bool select_all = false;
+
+ float scroll_y = is_multiline ? draw_window->Scroll.y : FLT_MAX;
+
+ const bool init_changed_specs = (state != NULL && state->Stb.single_line != !is_multiline);
+ const bool init_make_active = (user_clicked || user_scroll_finish || input_requested_by_nav || input_requested_by_tabbing);
+ const bool init_state = (init_make_active || user_scroll_active);
+ if ((init_state && g.ActiveId != id) || init_changed_specs)
+ {
+ // Access state even if we don't own it yet.
+ state = &g.InputTextState;
+ state->CursorAnimReset();
+
+ // Take a copy of the initial buffer value (both in original UTF-8 format and converted to wchar)
+ // From the moment we focused we are ignoring the content of 'buf' (unless we are in read-only mode)
+ const int buf_len = (int)strlen(buf);
+ state->InitialTextA.resize(buf_len + 1); // UTF-8. we use +1 to make sure that .Data is always pointing to at least an empty string.
+ memcpy(state->InitialTextA.Data, buf, buf_len + 1);
+
+ // Preserve cursor position and undo/redo stack if we come back to same widget
+ // FIXME: Since we reworked this on 2022/06, may want to differenciate recycle_cursor vs recycle_undostate?
+ bool recycle_state = (state->ID == id && !init_changed_specs);
+ if (recycle_state && (state->CurLenA != buf_len || (state->TextAIsValid && strncmp(state->TextA.Data, buf, buf_len) != 0)))
+ recycle_state = false;
+
+ // Start edition
+ const char* buf_end = NULL;
+ state->ID = id;
+ state->TextW.resize(buf_size + 1); // wchar count <= UTF-8 count. we use +1 to make sure that .Data is always pointing to at least an empty string.
+ state->TextA.resize(0);
+ state->TextAIsValid = false; // TextA is not valid yet (we will display buf until then)
+ state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, buf_size, buf, NULL, &buf_end);
+ state->CurLenA = (int)(buf_end - buf); // We can't get the result from ImStrncpy() above because it is not UTF-8 aware. Here we'll cut off malformed UTF-8.
+
+ if (recycle_state)
+ {
+ // Recycle existing cursor/selection/undo stack but clamp position
+ // Note a single mouse click will override the cursor/position immediately by calling stb_textedit_click handler.
+ state->CursorClamp();
+ }
+ else
+ {
+ state->ScrollX = 0.0f;
+ stb_textedit_initialize_state(&state->Stb, !is_multiline);
+ }
+
+ if (!is_multiline)
+ {
+ if (flags & ImGuiInputTextFlags_AutoSelectAll)
+ select_all = true;
+ if (input_requested_by_nav && (!recycle_state || !(g.NavActivateFlags & ImGuiActivateFlags_TryToPreserveState)))
+ select_all = true;
+ if (input_requested_by_tabbing || (user_clicked && io.KeyCtrl))
+ select_all = true;
+ }
+
+ if (flags & ImGuiInputTextFlags_AlwaysOverwrite)
+ state->Stb.insert_mode = 1; // stb field name is indeed incorrect (see #2863)
+ }
+
+ if (g.ActiveId != id && init_make_active)
+ {
+ IM_ASSERT(state && state->ID == id);
+ SetActiveID(id, window);
+ SetFocusID(id, window);
+ FocusWindow(window);
+
+ // Declare our inputs
+ IM_ASSERT(ImGuiNavInput_COUNT < 32);
+ g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Left) | (1 << ImGuiDir_Right);
+ if (is_multiline || (flags & ImGuiInputTextFlags_CallbackHistory))
+ g.ActiveIdUsingNavDirMask |= (1 << ImGuiDir_Up) | (1 << ImGuiDir_Down);
+ g.ActiveIdUsingNavInputMask |= (1 << ImGuiNavInput_Cancel);
+ SetActiveIdUsingKey(ImGuiKey_Home);
+ SetActiveIdUsingKey(ImGuiKey_End);
+ if (is_multiline)
+ {
+ SetActiveIdUsingKey(ImGuiKey_PageUp);
+ SetActiveIdUsingKey(ImGuiKey_PageDown);
+ }
+ if (flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_AllowTabInput)) // Disable keyboard tabbing out as we will use the \t character.
+ {
+ SetActiveIdUsingKey(ImGuiKey_Tab);
+ }
+ }
+
+ // We have an edge case if ActiveId was set through another widget (e.g. widget being swapped), clear id immediately (don't wait until the end of the function)
+ if (g.ActiveId == id && state == NULL)
+ ClearActiveID();
+
+ // Release focus when we click outside
+ if (g.ActiveId == id && io.MouseClicked[0] && !init_state && !init_make_active) //-V560
+ clear_active_id = true;
+
+ // Lock the decision of whether we are going to take the path displaying the cursor or selection
+ const bool render_cursor = (g.ActiveId == id) || (state && user_scroll_active);
+ bool render_selection = state && (state->HasSelection() || select_all) && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor);
+ bool value_changed = false;
+ bool enter_pressed = false;
+
+ // When read-only we always use the live data passed to the function
+ // FIXME-OPT: Because our selection/cursor code currently needs the wide text we need to convert it when active, which is not ideal :(
+ if (is_readonly && state != NULL && (render_cursor || render_selection))
+ {
+ const char* buf_end = NULL;
+ state->TextW.resize(buf_size + 1);
+ state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, state->TextW.Size, buf, NULL, &buf_end);
+ state->CurLenA = (int)(buf_end - buf);
+ state->CursorClamp();
+ render_selection &= state->HasSelection();
+ }
+
+ // Select the buffer to render.
+ const bool buf_display_from_state = (render_cursor || render_selection || g.ActiveId == id) && !is_readonly && state && state->TextAIsValid;
+ const bool is_displaying_hint = (hint != NULL && (buf_display_from_state ? state->TextA.Data : buf)[0] == 0);
+
+ // Password pushes a temporary font with only a fallback glyph
+ if (is_password && !is_displaying_hint)
+ {
+ const ImFontGlyph* glyph = g.Font->FindGlyph('*');
+ ImFont* password_font = &g.InputTextPasswordFont;
+ password_font->FontSize = g.Font->FontSize;
+ password_font->Scale = g.Font->Scale;
+ password_font->Ascent = g.Font->Ascent;
+ password_font->Descent = g.Font->Descent;
+ password_font->ContainerAtlas = g.Font->ContainerAtlas;
+ password_font->FallbackGlyph = glyph;
+ password_font->FallbackAdvanceX = glyph->AdvanceX;
+ IM_ASSERT(password_font->Glyphs.empty() && password_font->IndexAdvanceX.empty() && password_font->IndexLookup.empty());
+ PushFont(password_font);
+ }
+
+ // Process mouse inputs and character inputs
+ int backup_current_text_length = 0;
+ if (g.ActiveId == id)
+ {
+ IM_ASSERT(state != NULL);
+ backup_current_text_length = state->CurLenA;
+ state->Edited = false;
+ state->BufCapacityA = buf_size;
+ state->Flags = flags;
+
+ // Although we are active we don't prevent mouse from hovering other elements unless we are interacting right now with the widget.
+ // Down the line we should have a cleaner library-wide concept of Selected vs Active.
+ g.ActiveIdAllowOverlap = !io.MouseDown[0];
+ g.WantTextInputNextFrame = 1;
+
+ // Edit in progress
+ const float mouse_x = (io.MousePos.x - frame_bb.Min.x - style.FramePadding.x) + state->ScrollX;
+ const float mouse_y = (is_multiline ? (io.MousePos.y - draw_window->DC.CursorPos.y) : (g.FontSize * 0.5f));
+
+ const bool is_osx = io.ConfigMacOSXBehaviors;
+ if (select_all)
+ {
+ state->SelectAll();
+ state->SelectedAllMouseLock = true;
+ }
+ else if (hovered && io.MouseClickedCount[0] >= 2 && !io.KeyShift)
+ {
+ stb_textedit_click(state, &state->Stb, mouse_x, mouse_y);
+ const int multiclick_count = (io.MouseClickedCount[0] - 2);
+ if ((multiclick_count % 2) == 0)
+ {
+ // Double-click: Select word
+ // We always use the "Mac" word advance for double-click select vs CTRL+Right which use the platform dependent variant:
+ // FIXME: There are likely many ways to improve this behavior, but there's no "right" behavior (depends on use-case, software, OS)
+ const bool is_bol = (state->Stb.cursor == 0) || ImStb::STB_TEXTEDIT_GETCHAR(state, state->Stb.cursor - 1) == '\n';
+ if (STB_TEXT_HAS_SELECTION(&state->Stb) || !is_bol)
+ state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT);
+ //state->OnKeyPressed(STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT);
+ if (!STB_TEXT_HAS_SELECTION(&state->Stb))
+ ImStb::stb_textedit_prep_selection_at_cursor(&state->Stb);
+ state->Stb.cursor = ImStb::STB_TEXTEDIT_MOVEWORDRIGHT_MAC(state, state->Stb.cursor);
+ state->Stb.select_end = state->Stb.cursor;
+ ImStb::stb_textedit_clamp(state, &state->Stb);
+ }
+ else
+ {
+ // Triple-click: Select line
+ const bool is_eol = ImStb::STB_TEXTEDIT_GETCHAR(state, state->Stb.cursor) == '\n';
+ state->OnKeyPressed(STB_TEXTEDIT_K_LINESTART);
+ state->OnKeyPressed(STB_TEXTEDIT_K_LINEEND | STB_TEXTEDIT_K_SHIFT);
+ state->OnKeyPressed(STB_TEXTEDIT_K_RIGHT | STB_TEXTEDIT_K_SHIFT);
+ if (!is_eol && is_multiline)
+ {
+ ImSwap(state->Stb.select_start, state->Stb.select_end);
+ state->Stb.cursor = state->Stb.select_end;
+ }
+ state->CursorFollow = false;
+ }
+ state->CursorAnimReset();
+ }
+ else if (io.MouseClicked[0] && !state->SelectedAllMouseLock)
+ {
+ // FIXME: unselect on late click could be done release?
+ if (hovered)
+ {
+ stb_textedit_click(state, &state->Stb, mouse_x, mouse_y);
+ state->CursorAnimReset();
+ }
+ }
+ else if (io.MouseDown[0] && !state->SelectedAllMouseLock && (io.MouseDelta.x != 0.0f || io.MouseDelta.y != 0.0f))
+ {
+ stb_textedit_drag(state, &state->Stb, mouse_x, mouse_y);
+ state->CursorAnimReset();
+ state->CursorFollow = true;
+ }
+ if (state->SelectedAllMouseLock && !io.MouseDown[0])
+ state->SelectedAllMouseLock = false;
+
+ // We except backends to emit a Tab key but some also emit a Tab character which we ignore (#2467, #1336)
+ // (For Tab and Enter: Win32/SFML/Allegro are sending both keys and chars, GLFW and SDL are only sending keys. For Space they all send all threes)
+ const bool ignore_char_inputs = (io.KeyCtrl && !io.KeyAlt) || (is_osx && io.KeySuper);
+ if ((flags & ImGuiInputTextFlags_AllowTabInput) && IsKeyPressed(ImGuiKey_Tab) && !ignore_char_inputs && !io.KeyShift && !is_readonly)
+ {
+ unsigned int c = '\t'; // Insert TAB
+ if (InputTextFilterCharacter(&c, flags, callback, callback_user_data, ImGuiInputSource_Keyboard))
+ state->OnKeyPressed((int)c);
+ }
+
+ // Process regular text input (before we check for Return because using some IME will effectively send a Return?)
+ // We ignore CTRL inputs, but need to allow ALT+CTRL as some keyboards (e.g. German) use AltGR (which _is_ Alt+Ctrl) to input certain characters.
+ if (io.InputQueueCharacters.Size > 0)
+ {
+ if (!ignore_char_inputs && !is_readonly && !input_requested_by_nav)
+ for (int n = 0; n < io.InputQueueCharacters.Size; n++)
+ {
+ // Insert character if they pass filtering
+ unsigned int c = (unsigned int)io.InputQueueCharacters[n];
+ if (c == '\t') // Skip Tab, see above.
+ continue;
+ if (InputTextFilterCharacter(&c, flags, callback, callback_user_data, ImGuiInputSource_Keyboard))
+ state->OnKeyPressed((int)c);
+ }
+
+ // Consume characters
+ io.InputQueueCharacters.resize(0);
+ }
+ }
+
+ // Process other shortcuts/key-presses
+ bool cancel_edit = false;
+ if (g.ActiveId == id && !g.ActiveIdIsJustActivated && !clear_active_id)
+ {
+ IM_ASSERT(state != NULL);
+
+ const int row_count_per_page = ImMax((int)((inner_size.y - style.FramePadding.y) / g.FontSize), 1);
+ state->Stb.row_count_per_page = row_count_per_page;
+
+ const int k_mask = (io.KeyShift ? STB_TEXTEDIT_K_SHIFT : 0);
+ const bool is_osx = io.ConfigMacOSXBehaviors;
+ const bool is_osx_shift_shortcut = is_osx && (io.KeyMods == (ImGuiModFlags_Super | ImGuiModFlags_Shift));
+ const bool is_wordmove_key_down = is_osx ? io.KeyAlt : io.KeyCtrl; // OS X style: Text editing cursor movement using Alt instead of Ctrl
+ const bool is_startend_key_down = is_osx && io.KeySuper && !io.KeyCtrl && !io.KeyAlt; // OS X style: Line/Text Start and End using Cmd+Arrows instead of Home/End
+ const bool is_ctrl_key_only = (io.KeyMods == ImGuiModFlags_Ctrl);
+ const bool is_shift_key_only = (io.KeyMods == ImGuiModFlags_Shift);
+ const bool is_shortcut_key = g.IO.ConfigMacOSXBehaviors ? (io.KeyMods == ImGuiModFlags_Super) : (io.KeyMods == ImGuiModFlags_Ctrl);
+
+ const bool is_cut = ((is_shortcut_key && IsKeyPressed(ImGuiKey_X)) || (is_shift_key_only && IsKeyPressed(ImGuiKey_Delete))) && !is_readonly && !is_password && (!is_multiline || state->HasSelection());
+ const bool is_copy = ((is_shortcut_key && IsKeyPressed(ImGuiKey_C)) || (is_ctrl_key_only && IsKeyPressed(ImGuiKey_Insert))) && !is_password && (!is_multiline || state->HasSelection());
+ const bool is_paste = ((is_shortcut_key && IsKeyPressed(ImGuiKey_V)) || (is_shift_key_only && IsKeyPressed(ImGuiKey_Insert))) && !is_readonly;
+ const bool is_undo = ((is_shortcut_key && IsKeyPressed(ImGuiKey_Z)) && !is_readonly && is_undoable);
+ const bool is_redo = ((is_shortcut_key && IsKeyPressed(ImGuiKey_Y)) || (is_osx_shift_shortcut && IsKeyPressed(ImGuiKey_Z))) && !is_readonly && is_undoable;
+
+ // We allow validate/cancel with Nav source (gamepad) to makes it easier to undo an accidental NavInput press with no keyboard wired, but otherwise it isn't very useful.
+ const bool is_validate_enter = IsKeyPressed(ImGuiKey_Enter) || IsKeyPressed(ImGuiKey_KeypadEnter);
+ const bool is_validate_nav = (IsNavInputTest(ImGuiNavInput_Activate, ImGuiNavReadMode_Pressed) && !IsKeyPressed(ImGuiKey_Space)) || IsNavInputTest(ImGuiNavInput_Input, ImGuiNavReadMode_Pressed);
+ const bool is_cancel = IsKeyPressed(ImGuiKey_Escape) || IsNavInputTest(ImGuiNavInput_Cancel, ImGuiNavReadMode_Pressed);
+
+ if (IsKeyPressed(ImGuiKey_LeftArrow)) { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINESTART : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDLEFT : STB_TEXTEDIT_K_LEFT) | k_mask); }
+ else if (IsKeyPressed(ImGuiKey_RightArrow)) { state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_LINEEND : is_wordmove_key_down ? STB_TEXTEDIT_K_WORDRIGHT : STB_TEXTEDIT_K_RIGHT) | k_mask); }
+ else if (IsKeyPressed(ImGuiKey_UpArrow) && is_multiline) { if (io.KeyCtrl) SetScrollY(draw_window, ImMax(draw_window->Scroll.y - g.FontSize, 0.0f)); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTSTART : STB_TEXTEDIT_K_UP) | k_mask); }
+ else if (IsKeyPressed(ImGuiKey_DownArrow) && is_multiline) { if (io.KeyCtrl) SetScrollY(draw_window, ImMin(draw_window->Scroll.y + g.FontSize, GetScrollMaxY())); else state->OnKeyPressed((is_startend_key_down ? STB_TEXTEDIT_K_TEXTEND : STB_TEXTEDIT_K_DOWN) | k_mask); }
+ else if (IsKeyPressed(ImGuiKey_PageUp) && is_multiline) { state->OnKeyPressed(STB_TEXTEDIT_K_PGUP | k_mask); scroll_y -= row_count_per_page * g.FontSize; }
+ else if (IsKeyPressed(ImGuiKey_PageDown) && is_multiline) { state->OnKeyPressed(STB_TEXTEDIT_K_PGDOWN | k_mask); scroll_y += row_count_per_page * g.FontSize; }
+ else if (IsKeyPressed(ImGuiKey_Home)) { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTSTART | k_mask : STB_TEXTEDIT_K_LINESTART | k_mask); }
+ else if (IsKeyPressed(ImGuiKey_End)) { state->OnKeyPressed(io.KeyCtrl ? STB_TEXTEDIT_K_TEXTEND | k_mask : STB_TEXTEDIT_K_LINEEND | k_mask); }
+ else if (IsKeyPressed(ImGuiKey_Delete) && !is_readonly && !is_cut) { state->OnKeyPressed(STB_TEXTEDIT_K_DELETE | k_mask); }
+ else if (IsKeyPressed(ImGuiKey_Backspace) && !is_readonly)
+ {
+ if (!state->HasSelection())
+ {
+ if (is_wordmove_key_down)
+ state->OnKeyPressed(STB_TEXTEDIT_K_WORDLEFT | STB_TEXTEDIT_K_SHIFT);
+ else if (is_osx && io.KeySuper && !io.KeyAlt && !io.KeyCtrl)
+ state->OnKeyPressed(STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT);
+ }
+ state->OnKeyPressed(STB_TEXTEDIT_K_BACKSPACE | k_mask);
+ }
+ else if (is_validate_enter)
+ {
+ bool ctrl_enter_for_new_line = (flags & ImGuiInputTextFlags_CtrlEnterForNewLine) != 0;
+ if (!is_multiline || (ctrl_enter_for_new_line && !io.KeyCtrl) || (!ctrl_enter_for_new_line && io.KeyCtrl))
+ {
+ enter_pressed = clear_active_id = true;
+ }
+ else if (!is_readonly)
+ {
+ unsigned int c = '\n'; // Insert new line
+ if (InputTextFilterCharacter(&c, flags, callback, callback_user_data, ImGuiInputSource_Keyboard))
+ state->OnKeyPressed((int)c);
+ }
+ }
+ else if (is_validate_nav)
+ {
+ IM_ASSERT(!is_validate_enter);
+ enter_pressed = clear_active_id = true;
+ }
+ else if (is_cancel)
+ {
+ clear_active_id = cancel_edit = true;
+ }
+ else if (is_undo || is_redo)
+ {
+ state->OnKeyPressed(is_undo ? STB_TEXTEDIT_K_UNDO : STB_TEXTEDIT_K_REDO);
+ state->ClearSelection();
+ }
+ else if (is_shortcut_key && IsKeyPressed(ImGuiKey_A))
+ {
+ state->SelectAll();
+ state->CursorFollow = true;
+ }
+ else if (is_cut || is_copy)
+ {
+ // Cut, Copy
+ if (io.SetClipboardTextFn)
+ {
+ const int ib = state->HasSelection() ? ImMin(state->Stb.select_start, state->Stb.select_end) : 0;
+ const int ie = state->HasSelection() ? ImMax(state->Stb.select_start, state->Stb.select_end) : state->CurLenW;
+ const int clipboard_data_len = ImTextCountUtf8BytesFromStr(state->TextW.Data + ib, state->TextW.Data + ie) + 1;
+ char* clipboard_data = (char*)IM_ALLOC(clipboard_data_len * sizeof(char));
+ ImTextStrToUtf8(clipboard_data, clipboard_data_len, state->TextW.Data + ib, state->TextW.Data + ie);
+ SetClipboardText(clipboard_data);
+ MemFree(clipboard_data);
+ }
+ if (is_cut)
+ {
+ if (!state->HasSelection())
+ state->SelectAll();
+ state->CursorFollow = true;
+ stb_textedit_cut(state, &state->Stb);
+ }
+ }
+ else if (is_paste)
+ {
+ if (const char* clipboard = GetClipboardText())
+ {
+ // Filter pasted buffer
+ const int clipboard_len = (int)strlen(clipboard);
+ ImWchar* clipboard_filtered = (ImWchar*)IM_ALLOC((clipboard_len + 1) * sizeof(ImWchar));
+ int clipboard_filtered_len = 0;
+ for (const char* s = clipboard; *s; )
+ {
+ unsigned int c;
+ s += ImTextCharFromUtf8(&c, s, NULL);
+ if (c == 0)
+ break;
+ if (!InputTextFilterCharacter(&c, flags, callback, callback_user_data, ImGuiInputSource_Clipboard))
+ continue;
+ clipboard_filtered[clipboard_filtered_len++] = (ImWchar)c;
+ }
+ clipboard_filtered[clipboard_filtered_len] = 0;
+ if (clipboard_filtered_len > 0) // If everything was filtered, ignore the pasting operation
+ {
+ stb_textedit_paste(state, &state->Stb, clipboard_filtered, clipboard_filtered_len);
+ state->CursorFollow = true;
+ }
+ MemFree(clipboard_filtered);
+ }
+ }
+
+ // Update render selection flag after events have been handled, so selection highlight can be displayed during the same frame.
+ render_selection |= state->HasSelection() && (RENDER_SELECTION_WHEN_INACTIVE || render_cursor);
+ }
+
+ // Process callbacks and apply result back to user's buffer.
+ const char* apply_new_text = NULL;
+ int apply_new_text_length = 0;
+ if (g.ActiveId == id)
+ {
+ IM_ASSERT(state != NULL);
+ if (cancel_edit)
+ {
+ // Restore initial value. Only return true if restoring to the initial value changes the current buffer contents.
+ if (!is_readonly && strcmp(buf, state->InitialTextA.Data) != 0)
+ {
+ // Push records into the undo stack so we can CTRL+Z the revert operation itself
+ apply_new_text = state->InitialTextA.Data;
+ apply_new_text_length = state->InitialTextA.Size - 1;
+ ImVector<ImWchar> w_text;
+ if (apply_new_text_length > 0)
+ {
+ w_text.resize(ImTextCountCharsFromUtf8(apply_new_text, apply_new_text + apply_new_text_length) + 1);
+ ImTextStrFromUtf8(w_text.Data, w_text.Size, apply_new_text, apply_new_text + apply_new_text_length);
+ }
+ stb_textedit_replace(state, &state->Stb, w_text.Data, (apply_new_text_length > 0) ? (w_text.Size - 1) : 0);
+ }
+ }
+
+ // Apply ASCII value
+ if (!is_readonly)
+ {
+ state->TextAIsValid = true;
+ state->TextA.resize(state->TextW.Size * 4 + 1);
+ ImTextStrToUtf8(state->TextA.Data, state->TextA.Size, state->TextW.Data, NULL);
+ }
+
+ // When using 'ImGuiInputTextFlags_EnterReturnsTrue' as a special case we reapply the live buffer back to the input buffer before clearing ActiveId, even though strictly speaking it wasn't modified on this frame.
+ // If we didn't do that, code like InputInt() with ImGuiInputTextFlags_EnterReturnsTrue would fail.
+ // This also allows the user to use InputText() with ImGuiInputTextFlags_EnterReturnsTrue without maintaining any user-side storage (please note that if you use this property along ImGuiInputTextFlags_CallbackResize you can end up with your temporary string object unnecessarily allocating once a frame, either store your string data, either if you don't then don't use ImGuiInputTextFlags_CallbackResize).
+ const bool apply_edit_back_to_user_buffer = !cancel_edit || (enter_pressed && (flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0);
+ if (apply_edit_back_to_user_buffer)
+ {
+ // Apply new value immediately - copy modified buffer back
+ // Note that as soon as the input box is active, the in-widget value gets priority over any underlying modification of the input buffer
+ // FIXME: We actually always render 'buf' when calling DrawList->AddText, making the comment above incorrect.
+ // FIXME-OPT: CPU waste to do this every time the widget is active, should mark dirty state from the stb_textedit callbacks.
+
+ // User callback
+ if ((flags & (ImGuiInputTextFlags_CallbackCompletion | ImGuiInputTextFlags_CallbackHistory | ImGuiInputTextFlags_CallbackEdit | ImGuiInputTextFlags_CallbackAlways)) != 0)
+ {
+ IM_ASSERT(callback != NULL);
+
+ // The reason we specify the usage semantic (Completion/History) is that Completion needs to disable keyboard TABBING at the moment.
+ ImGuiInputTextFlags event_flag = 0;
+ ImGuiKey event_key = ImGuiKey_None;
+ if ((flags & ImGuiInputTextFlags_CallbackCompletion) != 0 && IsKeyPressed(ImGuiKey_Tab))
+ {
+ event_flag = ImGuiInputTextFlags_CallbackCompletion;
+ event_key = ImGuiKey_Tab;
+ }
+ else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressed(ImGuiKey_UpArrow))
+ {
+ event_flag = ImGuiInputTextFlags_CallbackHistory;
+ event_key = ImGuiKey_UpArrow;
+ }
+ else if ((flags & ImGuiInputTextFlags_CallbackHistory) != 0 && IsKeyPressed(ImGuiKey_DownArrow))
+ {
+ event_flag = ImGuiInputTextFlags_CallbackHistory;
+ event_key = ImGuiKey_DownArrow;
+ }
+ else if ((flags & ImGuiInputTextFlags_CallbackEdit) && state->Edited)
+ {
+ event_flag = ImGuiInputTextFlags_CallbackEdit;
+ }
+ else if (flags & ImGuiInputTextFlags_CallbackAlways)
+ {
+ event_flag = ImGuiInputTextFlags_CallbackAlways;
+ }
+
+ if (event_flag)
+ {
+ ImGuiInputTextCallbackData callback_data;
+ memset(&callback_data, 0, sizeof(ImGuiInputTextCallbackData));
+ callback_data.EventFlag = event_flag;
+ callback_data.Flags = flags;
+ callback_data.UserData = callback_user_data;
+
+ char* callback_buf = is_readonly ? buf : state->TextA.Data;
+ callback_data.EventKey = event_key;
+ callback_data.Buf = callback_buf;
+ callback_data.BufTextLen = state->CurLenA;
+ callback_data.BufSize = state->BufCapacityA;
+ callback_data.BufDirty = false;
+
+ // We have to convert from wchar-positions to UTF-8-positions, which can be pretty slow (an incentive to ditch the ImWchar buffer, see https://github.com/nothings/stb/issues/188)
+ ImWchar* text = state->TextW.Data;
+ const int utf8_cursor_pos = callback_data.CursorPos = ImTextCountUtf8BytesFromStr(text, text + state->Stb.cursor);
+ const int utf8_selection_start = callback_data.SelectionStart = ImTextCountUtf8BytesFromStr(text, text + state->Stb.select_start);
+ const int utf8_selection_end = callback_data.SelectionEnd = ImTextCountUtf8BytesFromStr(text, text + state->Stb.select_end);
+
+ // Call user code
+ callback(&callback_data);
+
+ // Read back what user may have modified
+ callback_buf = is_readonly ? buf : state->TextA.Data; // Pointer may have been invalidated by a resize callback
+ IM_ASSERT(callback_data.Buf == callback_buf); // Invalid to modify those fields
+ IM_ASSERT(callback_data.BufSize == state->BufCapacityA);
+ IM_ASSERT(callback_data.Flags == flags);
+ const bool buf_dirty = callback_data.BufDirty;
+ if (callback_data.CursorPos != utf8_cursor_pos || buf_dirty) { state->Stb.cursor = ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.CursorPos); state->CursorFollow = true; }
+ if (callback_data.SelectionStart != utf8_selection_start || buf_dirty) { state->Stb.select_start = (callback_data.SelectionStart == callback_data.CursorPos) ? state->Stb.cursor : ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionStart); }
+ if (callback_data.SelectionEnd != utf8_selection_end || buf_dirty) { state->Stb.select_end = (callback_data.SelectionEnd == callback_data.SelectionStart) ? state->Stb.select_start : ImTextCountCharsFromUtf8(callback_data.Buf, callback_data.Buf + callback_data.SelectionEnd); }
+ if (buf_dirty)
+ {
+ IM_ASSERT(callback_data.BufTextLen == (int)strlen(callback_data.Buf)); // You need to maintain BufTextLen if you change the text!
+ InputTextReconcileUndoStateAfterUserCallback(state, callback_data.Buf, callback_data.BufTextLen); // FIXME: Move the rest of this block inside function and rename to InputTextReconcileStateAfterUserCallback() ?
+ if (callback_data.BufTextLen > backup_current_text_length && is_resizable)
+ state->TextW.resize(state->TextW.Size + (callback_data.BufTextLen - backup_current_text_length)); // Worse case scenario resize
+ state->CurLenW = ImTextStrFromUtf8(state->TextW.Data, state->TextW.Size, callback_data.Buf, NULL);
+ state->CurLenA = callback_data.BufTextLen; // Assume correct length and valid UTF-8 from user, saves us an extra strlen()
+ state->CursorAnimReset();
+ }
+ }
+ }
+
+ // Will copy result string if modified
+ if (!is_readonly && strcmp(state->TextA.Data, buf) != 0)
+ {
+ apply_new_text = state->TextA.Data;
+ apply_new_text_length = state->CurLenA;
+ }
+ }
+
+ // Clear temporary user storage
+ state->Flags = ImGuiInputTextFlags_None;
+ }
+
+ // Copy result to user buffer. This can currently only happen when (g.ActiveId == id)
+ if (apply_new_text != NULL)
+ {
+ // We cannot test for 'backup_current_text_length != apply_new_text_length' here because we have no guarantee that the size
+ // of our owned buffer matches the size of the string object held by the user, and by design we allow InputText() to be used
+ // without any storage on user's side.
+ IM_ASSERT(apply_new_text_length >= 0);
+ if (is_resizable)
+ {
+ ImGuiInputTextCallbackData callback_data;
+ callback_data.EventFlag = ImGuiInputTextFlags_CallbackResize;
+ callback_data.Flags = flags;
+ callback_data.Buf = buf;
+ callback_data.BufTextLen = apply_new_text_length;
+ callback_data.BufSize = ImMax(buf_size, apply_new_text_length + 1);
+ callback_data.UserData = callback_user_data;
+ callback(&callback_data);
+ buf = callback_data.Buf;
+ buf_size = callback_data.BufSize;
+ apply_new_text_length = ImMin(callback_data.BufTextLen, buf_size - 1);
+ IM_ASSERT(apply_new_text_length <= buf_size);
+ }
+ //IMGUI_DEBUG_PRINT("InputText(\"%s\"): apply_new_text length %d\n", label, apply_new_text_length);
+
+ // If the underlying buffer resize was denied or not carried to the next frame, apply_new_text_length+1 may be >= buf_size.
+ ImStrncpy(buf, apply_new_text, ImMin(apply_new_text_length + 1, buf_size));
+ value_changed = true;
+ }
+
+ // Release active ID at the end of the function (so e.g. pressing Return still does a final application of the value)
+ if (clear_active_id && g.ActiveId == id)
+ ClearActiveID();
+
+ // Render frame
+ if (!is_multiline)
+ {
+ RenderNavHighlight(frame_bb, id);
+ RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
+ }
+
+ const ImVec4 clip_rect(frame_bb.Min.x, frame_bb.Min.y, frame_bb.Min.x + inner_size.x, frame_bb.Min.y + inner_size.y); // Not using frame_bb.Max because we have adjusted size
+ ImVec2 draw_pos = is_multiline ? draw_window->DC.CursorPos : frame_bb.Min + style.FramePadding;
+ ImVec2 text_size(0.0f, 0.0f);
+
+ // Set upper limit of single-line InputTextEx() at 2 million characters strings. The current pathological worst case is a long line
+ // without any carriage return, which would makes ImFont::RenderText() reserve too many vertices and probably crash. Avoid it altogether.
+ // Note that we only use this limit on single-line InputText(), so a pathologically large line on a InputTextMultiline() would still crash.
+ const int buf_display_max_length = 2 * 1024 * 1024;
+ const char* buf_display = buf_display_from_state ? state->TextA.Data : buf; //-V595
+ const char* buf_display_end = NULL; // We have specialized paths below for setting the length
+ if (is_displaying_hint)
+ {
+ buf_display = hint;
+ buf_display_end = hint + strlen(hint);
+ }
+
+ // Render text. We currently only render selection when the widget is active or while scrolling.
+ // FIXME: We could remove the '&& render_cursor' to keep rendering selection when inactive.
+ if (render_cursor || render_selection)
+ {
+ IM_ASSERT(state != NULL);
+ if (!is_displaying_hint)
+ buf_display_end = buf_display + state->CurLenA;
+
+ // Render text (with cursor and selection)
+ // This is going to be messy. We need to:
+ // - Display the text (this alone can be more easily clipped)
+ // - Handle scrolling, highlight selection, display cursor (those all requires some form of 1d->2d cursor position calculation)
+ // - Measure text height (for scrollbar)
+ // We are attempting to do most of that in **one main pass** to minimize the computation cost (non-negligible for large amount of text) + 2nd pass for selection rendering (we could merge them by an extra refactoring effort)
+ // FIXME: This should occur on buf_display but we'd need to maintain cursor/select_start/select_end for UTF-8.
+ const ImWchar* text_begin = state->TextW.Data;
+ ImVec2 cursor_offset, select_start_offset;
+
+ {
+ // Find lines numbers straddling 'cursor' (slot 0) and 'select_start' (slot 1) positions.
+ const ImWchar* searches_input_ptr[2] = { NULL, NULL };
+ int searches_result_line_no[2] = { -1000, -1000 };
+ int searches_remaining = 0;
+ if (render_cursor)
+ {
+ searches_input_ptr[0] = text_begin + state->Stb.cursor;
+ searches_result_line_no[0] = -1;
+ searches_remaining++;
+ }
+ if (render_selection)
+ {
+ searches_input_ptr[1] = text_begin + ImMin(state->Stb.select_start, state->Stb.select_end);
+ searches_result_line_no[1] = -1;
+ searches_remaining++;
+ }
+
+ // Iterate all lines to find our line numbers
+ // In multi-line mode, we never exit the loop until all lines are counted, so add one extra to the searches_remaining counter.
+ searches_remaining += is_multiline ? 1 : 0;
+ int line_count = 0;
+ //for (const ImWchar* s = text_begin; (s = (const ImWchar*)wcschr((const wchar_t*)s, (wchar_t)'\n')) != NULL; s++) // FIXME-OPT: Could use this when wchar_t are 16-bit
+ for (const ImWchar* s = text_begin; *s != 0; s++)
+ if (*s == '\n')
+ {
+ line_count++;
+ if (searches_result_line_no[0] == -1 && s >= searches_input_ptr[0]) { searches_result_line_no[0] = line_count; if (--searches_remaining <= 0) break; }
+ if (searches_result_line_no[1] == -1 && s >= searches_input_ptr[1]) { searches_result_line_no[1] = line_count; if (--searches_remaining <= 0) break; }
+ }
+ line_count++;
+ if (searches_result_line_no[0] == -1)
+ searches_result_line_no[0] = line_count;
+ if (searches_result_line_no[1] == -1)
+ searches_result_line_no[1] = line_count;
+
+ // Calculate 2d position by finding the beginning of the line and measuring distance
+ cursor_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[0], text_begin), searches_input_ptr[0]).x;
+ cursor_offset.y = searches_result_line_no[0] * g.FontSize;
+ if (searches_result_line_no[1] >= 0)
+ {
+ select_start_offset.x = InputTextCalcTextSizeW(ImStrbolW(searches_input_ptr[1], text_begin), searches_input_ptr[1]).x;
+ select_start_offset.y = searches_result_line_no[1] * g.FontSize;
+ }
+
+ // Store text height (note that we haven't calculated text width at all, see GitHub issues #383, #1224)
+ if (is_multiline)
+ text_size = ImVec2(inner_size.x, line_count * g.FontSize);
+ }
+
+ // Scroll
+ if (render_cursor && state->CursorFollow)
+ {
+ // Horizontal scroll in chunks of quarter width
+ if (!(flags & ImGuiInputTextFlags_NoHorizontalScroll))
+ {
+ const float scroll_increment_x = inner_size.x * 0.25f;
+ const float visible_width = inner_size.x - style.FramePadding.x;
+ if (cursor_offset.x < state->ScrollX)
+ state->ScrollX = IM_FLOOR(ImMax(0.0f, cursor_offset.x - scroll_increment_x));
+ else if (cursor_offset.x - visible_width >= state->ScrollX)
+ state->ScrollX = IM_FLOOR(cursor_offset.x - visible_width + scroll_increment_x);
+ }
+ else
+ {
+ state->ScrollX = 0.0f;
+ }
+
+ // Vertical scroll
+ if (is_multiline)
+ {
+ // Test if cursor is vertically visible
+ if (cursor_offset.y - g.FontSize < scroll_y)
+ scroll_y = ImMax(0.0f, cursor_offset.y - g.FontSize);
+ else if (cursor_offset.y - (inner_size.y - style.FramePadding.y * 2.0f) >= scroll_y)
+ scroll_y = cursor_offset.y - inner_size.y + style.FramePadding.y * 2.0f;
+ const float scroll_max_y = ImMax((text_size.y + style.FramePadding.y * 2.0f) - inner_size.y, 0.0f);
+ scroll_y = ImClamp(scroll_y, 0.0f, scroll_max_y);
+ draw_pos.y += (draw_window->Scroll.y - scroll_y); // Manipulate cursor pos immediately avoid a frame of lag
+ draw_window->Scroll.y = scroll_y;
+ }
+
+ state->CursorFollow = false;
+ }
+
+ // Draw selection
+ const ImVec2 draw_scroll = ImVec2(state->ScrollX, 0.0f);
+ if (render_selection)
+ {
+ const ImWchar* text_selected_begin = text_begin + ImMin(state->Stb.select_start, state->Stb.select_end);
+ const ImWchar* text_selected_end = text_begin + ImMax(state->Stb.select_start, state->Stb.select_end);
+
+ ImU32 bg_color = GetColorU32(ImGuiCol_TextSelectedBg, render_cursor ? 1.0f : 0.6f); // FIXME: current code flow mandate that render_cursor is always true here, we are leaving the transparent one for tests.
+ float bg_offy_up = is_multiline ? 0.0f : -1.0f; // FIXME: those offsets should be part of the style? they don't play so well with multi-line selection.
+ float bg_offy_dn = is_multiline ? 0.0f : 2.0f;
+ ImVec2 rect_pos = draw_pos + select_start_offset - draw_scroll;
+ for (const ImWchar* p = text_selected_begin; p < text_selected_end; )
+ {
+ if (rect_pos.y > clip_rect.w + g.FontSize)
+ break;
+ if (rect_pos.y < clip_rect.y)
+ {
+ //p = (const ImWchar*)wmemchr((const wchar_t*)p, '\n', text_selected_end - p); // FIXME-OPT: Could use this when wchar_t are 16-bit
+ //p = p ? p + 1 : text_selected_end;
+ while (p < text_selected_end)
+ if (*p++ == '\n')
+ break;
+ }
+ else
+ {
+ ImVec2 rect_size = InputTextCalcTextSizeW(p, text_selected_end, &p, NULL, true);
+ if (rect_size.x <= 0.0f) rect_size.x = IM_FLOOR(g.Font->GetCharAdvance((ImWchar)' ') * 0.50f); // So we can see selected empty lines
+ ImRect rect(rect_pos + ImVec2(0.0f, bg_offy_up - g.FontSize), rect_pos + ImVec2(rect_size.x, bg_offy_dn));
+ rect.ClipWith(clip_rect);
+ if (rect.Overlaps(clip_rect))
+ draw_window->DrawList->AddRectFilled(rect.Min, rect.Max, bg_color);
+ }
+ rect_pos.x = draw_pos.x - draw_scroll.x;
+ rect_pos.y += g.FontSize;
+ }
+ }
+
+ // We test for 'buf_display_max_length' as a way to avoid some pathological cases (e.g. single-line 1 MB string) which would make ImDrawList crash.
+ if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length)
+ {
+ ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text);
+ draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos - draw_scroll, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect);
+ }
+
+ // Draw blinking cursor
+ if (render_cursor)
+ {
+ state->CursorAnim += io.DeltaTime;
+ bool cursor_is_visible = (!g.IO.ConfigInputTextCursorBlink) || (state->CursorAnim <= 0.0f) || ImFmod(state->CursorAnim, 1.20f) <= 0.80f;
+ ImVec2 cursor_screen_pos = ImFloor(draw_pos + cursor_offset - draw_scroll);
+ ImRect cursor_screen_rect(cursor_screen_pos.x, cursor_screen_pos.y - g.FontSize + 0.5f, cursor_screen_pos.x + 1.0f, cursor_screen_pos.y - 1.5f);
+ if (cursor_is_visible && cursor_screen_rect.Overlaps(clip_rect))
+ draw_window->DrawList->AddLine(cursor_screen_rect.Min, cursor_screen_rect.GetBL(), GetColorU32(ImGuiCol_Text));
+
+ // Notify OS of text input position for advanced IME (-1 x offset so that Windows IME can cover our cursor. Bit of an extra nicety.)
+ if (!is_readonly)
+ {
+ g.PlatformImeData.WantVisible = true;
+ g.PlatformImeData.InputPos = ImVec2(cursor_screen_pos.x - 1.0f, cursor_screen_pos.y - g.FontSize);
+ g.PlatformImeData.InputLineHeight = g.FontSize;
+ }
+ }
+ }
+ else
+ {
+ // Render text only (no selection, no cursor)
+ if (is_multiline)
+ text_size = ImVec2(inner_size.x, InputTextCalcTextLenAndLineCount(buf_display, &buf_display_end) * g.FontSize); // We don't need width
+ else if (!is_displaying_hint && g.ActiveId == id)
+ buf_display_end = buf_display + state->CurLenA;
+ else if (!is_displaying_hint)
+ buf_display_end = buf_display + strlen(buf_display);
+
+ if (is_multiline || (buf_display_end - buf_display) < buf_display_max_length)
+ {
+ ImU32 col = GetColorU32(is_displaying_hint ? ImGuiCol_TextDisabled : ImGuiCol_Text);
+ draw_window->DrawList->AddText(g.Font, g.FontSize, draw_pos, col, buf_display, buf_display_end, 0.0f, is_multiline ? NULL : &clip_rect);
+ }
+ }
+
+ if (is_password && !is_displaying_hint)
+ PopFont();
+
+ if (is_multiline)
+ {
+ // For focus requests to work on our multiline we need to ensure our child ItemAdd() call specifies the ImGuiItemFlags_Inputable (ref issue #4761)...
+ Dummy(ImVec2(text_size.x, text_size.y + style.FramePadding.y));
+ ImGuiItemFlags backup_item_flags = g.CurrentItemFlags;
+ g.CurrentItemFlags |= ImGuiItemFlags_Inputable | ImGuiItemFlags_NoTabStop;
+ EndChild();
+ item_data_backup.StatusFlags |= (g.LastItemData.StatusFlags & ImGuiItemStatusFlags_HoveredWindow);
+ g.CurrentItemFlags = backup_item_flags;
+
+ // ...and then we need to undo the group overriding last item data, which gets a bit messy as EndGroup() tries to forward scrollbar being active...
+ // FIXME: This quite messy/tricky, should attempt to get rid of the child window.
+ EndGroup();
+ if (g.LastItemData.ID == 0)
+ {
+ g.LastItemData.ID = id;
+ g.LastItemData.InFlags = item_data_backup.InFlags;
+ g.LastItemData.StatusFlags = item_data_backup.StatusFlags;
+ }
+ }
+
+ // Log as text
+ if (g.LogEnabled && (!is_password || is_displaying_hint))
+ {
+ LogSetNextTextDecoration("{", "}");
+ LogRenderedText(&draw_pos, buf_display, buf_display_end);
+ }
+
+ if (label_size.x > 0)
+ RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y), label);
+
+ if (value_changed && !(flags & ImGuiInputTextFlags_NoMarkEdited))
+ MarkItemEdited(id);
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags);
+ if ((flags & ImGuiInputTextFlags_EnterReturnsTrue) != 0)
+ return enter_pressed;
+ else
+ return value_changed;
+}
+
+void ImGui::DebugNodeInputTextState(ImGuiInputTextState* state)
+{
+#ifndef IMGUI_DISABLE_DEBUG_TOOLS
+ ImGuiContext& g = *GImGui;
+ ImStb::STB_TexteditState* stb_state = &state->Stb;
+ ImStb::StbUndoState* undo_state = &stb_state->undostate;
+ Text("ID: 0x%08X, ActiveID: 0x%08X", state->ID, g.ActiveId);
+ Text("CurLenW: %d, CurLenA: %d, Cursor: %d, Selection: %d..%d", state->CurLenA, state->CurLenW, stb_state->cursor, stb_state->select_start, stb_state->select_end);
+ Text("undo_point: %d, redo_point: %d, undo_char_point: %d, redo_char_point: %d", undo_state->undo_point, undo_state->redo_point, undo_state->undo_char_point, undo_state->redo_char_point);
+ if (BeginChild("undopoints", ImVec2(0.0f, GetTextLineHeight() * 15), true)) // Visualize undo state
+ {
+ PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(0, 0));
+ for (int n = 0; n < STB_TEXTEDIT_UNDOSTATECOUNT; n++)
+ {
+ ImStb::StbUndoRecord* undo_rec = &undo_state->undo_rec[n];
+ const char undo_rec_type = (n < undo_state->undo_point) ? 'u' : (n >= undo_state->redo_point) ? 'r' : ' ';
+ if (undo_rec_type == ' ')
+ BeginDisabled();
+ char buf[64] = "";
+ if (undo_rec_type != ' ' && undo_rec->char_storage != -1)
+ ImTextStrToUtf8(buf, IM_ARRAYSIZE(buf), undo_state->undo_char + undo_rec->char_storage, undo_state->undo_char + undo_rec->char_storage + undo_rec->insert_length);
+ Text("%c [%02d] where %03d, insert %03d, delete %03d, char_storage %03d \"%s\"",
+ undo_rec_type, n, undo_rec->where, undo_rec->insert_length, undo_rec->delete_length, undo_rec->char_storage, buf);
+ if (undo_rec_type == ' ')
+ EndDisabled();
+ }
+ PopStyleVar();
+ }
+ EndChild();
+#else
+ IM_UNUSED(state);
+#endif
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: ColorEdit, ColorPicker, ColorButton, etc.
+//-------------------------------------------------------------------------
+// - ColorEdit3()
+// - ColorEdit4()
+// - ColorPicker3()
+// - RenderColorRectWithAlphaCheckerboard() [Internal]
+// - ColorPicker4()
+// - ColorButton()
+// - SetColorEditOptions()
+// - ColorTooltip() [Internal]
+// - ColorEditOptionsPopup() [Internal]
+// - ColorPickerOptionsPopup() [Internal]
+//-------------------------------------------------------------------------
+
+bool ImGui::ColorEdit3(const char* label, float col[3], ImGuiColorEditFlags flags)
+{
+ return ColorEdit4(label, col, flags | ImGuiColorEditFlags_NoAlpha);
+}
+
+// ColorEdit supports RGB and HSV inputs. In case of RGB input resulting color may have undefined hue and/or saturation.
+// Since widget displays both RGB and HSV values we must preserve hue and saturation to prevent these values resetting.
+static void ColorEditRestoreHS(const float* col, float* H, float* S, float* V)
+{
+ // This check is optional. Suppose we have two color widgets side by side, both widgets display different colors, but both colors have hue and/or saturation undefined.
+ // With color check: hue/saturation is preserved in one widget. Editing color in one widget would reset hue/saturation in another one.
+ // Without color check: common hue/saturation would be displayed in all widgets that have hue/saturation undefined.
+ // g.ColorEditLastColor is stored as ImU32 RGB value: this essentially gives us color equality check with reduced precision.
+ // Tiny external color changes would not be detected and this check would still pass. This is OK, since we only restore hue/saturation _only_ if they are undefined,
+ // therefore this change flipping hue/saturation from undefined to a very tiny value would still be represented in color picker.
+ ImGuiContext& g = *GImGui;
+ if (g.ColorEditLastColor != ImGui::ColorConvertFloat4ToU32(ImVec4(col[0], col[1], col[2], 0)))
+ return;
+
+ // When S == 0, H is undefined.
+ // When H == 1 it wraps around to 0.
+ if (*S == 0.0f || (*H == 0.0f && g.ColorEditLastHue == 1))
+ *H = g.ColorEditLastHue;
+
+ // When V == 0, S is undefined.
+ if (*V == 0.0f)
+ *S = g.ColorEditLastSat;
+}
+
+// Edit colors components (each component in 0.0f..1.0f range).
+// See enum ImGuiColorEditFlags_ for available options. e.g. Only access 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
+// With typical options: Left-click on color square to open color picker. Right-click to open option menu. CTRL-Click over input fields to edit them and TAB to go to next item.
+bool ImGui::ColorEdit4(const char* label, float col[4], ImGuiColorEditFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ const float square_sz = GetFrameHeight();
+ const float w_full = CalcItemWidth();
+ const float w_button = (flags & ImGuiColorEditFlags_NoSmallPreview) ? 0.0f : (square_sz + style.ItemInnerSpacing.x);
+ const float w_inputs = w_full - w_button;
+ const char* label_display_end = FindRenderedTextEnd(label);
+ g.NextItemData.ClearFlags();
+
+ BeginGroup();
+ PushID(label);
+
+ // If we're not showing any slider there's no point in doing any HSV conversions
+ const ImGuiColorEditFlags flags_untouched = flags;
+ if (flags & ImGuiColorEditFlags_NoInputs)
+ flags = (flags & (~ImGuiColorEditFlags_DisplayMask_)) | ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_NoOptions;
+
+ // Context menu: display and modify options (before defaults are applied)
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ ColorEditOptionsPopup(col, flags);
+
+ // Read stored options
+ if (!(flags & ImGuiColorEditFlags_DisplayMask_))
+ flags |= (g.ColorEditOptions & ImGuiColorEditFlags_DisplayMask_);
+ if (!(flags & ImGuiColorEditFlags_DataTypeMask_))
+ flags |= (g.ColorEditOptions & ImGuiColorEditFlags_DataTypeMask_);
+ if (!(flags & ImGuiColorEditFlags_PickerMask_))
+ flags |= (g.ColorEditOptions & ImGuiColorEditFlags_PickerMask_);
+ if (!(flags & ImGuiColorEditFlags_InputMask_))
+ flags |= (g.ColorEditOptions & ImGuiColorEditFlags_InputMask_);
+ flags |= (g.ColorEditOptions & ~(ImGuiColorEditFlags_DisplayMask_ | ImGuiColorEditFlags_DataTypeMask_ | ImGuiColorEditFlags_PickerMask_ | ImGuiColorEditFlags_InputMask_));
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_DisplayMask_)); // Check that only 1 is selected
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_InputMask_)); // Check that only 1 is selected
+
+ const bool alpha = (flags & ImGuiColorEditFlags_NoAlpha) == 0;
+ const bool hdr = (flags & ImGuiColorEditFlags_HDR) != 0;
+ const int components = alpha ? 4 : 3;
+
+ // Convert to the formats we need
+ float f[4] = { col[0], col[1], col[2], alpha ? col[3] : 1.0f };
+ if ((flags & ImGuiColorEditFlags_InputHSV) && (flags & ImGuiColorEditFlags_DisplayRGB))
+ ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
+ else if ((flags & ImGuiColorEditFlags_InputRGB) && (flags & ImGuiColorEditFlags_DisplayHSV))
+ {
+ // Hue is lost when converting from greyscale rgb (saturation=0). Restore it.
+ ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
+ ColorEditRestoreHS(col, &f[0], &f[1], &f[2]);
+ }
+ int i[4] = { IM_F32_TO_INT8_UNBOUND(f[0]), IM_F32_TO_INT8_UNBOUND(f[1]), IM_F32_TO_INT8_UNBOUND(f[2]), IM_F32_TO_INT8_UNBOUND(f[3]) };
+
+ bool value_changed = false;
+ bool value_changed_as_float = false;
+
+ const ImVec2 pos = window->DC.CursorPos;
+ const float inputs_offset_x = (style.ColorButtonPosition == ImGuiDir_Left) ? w_button : 0.0f;
+ window->DC.CursorPos.x = pos.x + inputs_offset_x;
+
+ if ((flags & (ImGuiColorEditFlags_DisplayRGB | ImGuiColorEditFlags_DisplayHSV)) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
+ {
+ // RGB/HSV 0..255 Sliders
+ const float w_item_one = ImMax(1.0f, IM_FLOOR((w_inputs - (style.ItemInnerSpacing.x) * (components - 1)) / (float)components));
+ const float w_item_last = ImMax(1.0f, IM_FLOOR(w_inputs - (w_item_one + style.ItemInnerSpacing.x) * (components - 1)));
+
+ const bool hide_prefix = (w_item_one <= CalcTextSize((flags & ImGuiColorEditFlags_Float) ? "M:0.000" : "M:000").x);
+ static const char* ids[4] = { "##X", "##Y", "##Z", "##W" };
+ static const char* fmt_table_int[3][4] =
+ {
+ { "%3d", "%3d", "%3d", "%3d" }, // Short display
+ { "R:%3d", "G:%3d", "B:%3d", "A:%3d" }, // Long display for RGBA
+ { "H:%3d", "S:%3d", "V:%3d", "A:%3d" } // Long display for HSVA
+ };
+ static const char* fmt_table_float[3][4] =
+ {
+ { "%0.3f", "%0.3f", "%0.3f", "%0.3f" }, // Short display
+ { "R:%0.3f", "G:%0.3f", "B:%0.3f", "A:%0.3f" }, // Long display for RGBA
+ { "H:%0.3f", "S:%0.3f", "V:%0.3f", "A:%0.3f" } // Long display for HSVA
+ };
+ const int fmt_idx = hide_prefix ? 0 : (flags & ImGuiColorEditFlags_DisplayHSV) ? 2 : 1;
+
+ for (int n = 0; n < components; n++)
+ {
+ if (n > 0)
+ SameLine(0, style.ItemInnerSpacing.x);
+ SetNextItemWidth((n + 1 < components) ? w_item_one : w_item_last);
+
+ // FIXME: When ImGuiColorEditFlags_HDR flag is passed HS values snap in weird ways when SV values go below 0.
+ if (flags & ImGuiColorEditFlags_Float)
+ {
+ value_changed |= DragFloat(ids[n], &f[n], 1.0f / 255.0f, 0.0f, hdr ? 0.0f : 1.0f, fmt_table_float[fmt_idx][n]);
+ value_changed_as_float |= value_changed;
+ }
+ else
+ {
+ value_changed |= DragInt(ids[n], &i[n], 1.0f, 0, hdr ? 0 : 255, fmt_table_int[fmt_idx][n]);
+ }
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight);
+ }
+ }
+ else if ((flags & ImGuiColorEditFlags_DisplayHex) != 0 && (flags & ImGuiColorEditFlags_NoInputs) == 0)
+ {
+ // RGB Hexadecimal Input
+ char buf[64];
+ if (alpha)
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", ImClamp(i[0], 0, 255), ImClamp(i[1], 0, 255), ImClamp(i[2], 0, 255), ImClamp(i[3], 0, 255));
+ else
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", ImClamp(i[0], 0, 255), ImClamp(i[1], 0, 255), ImClamp(i[2], 0, 255));
+ SetNextItemWidth(w_inputs);
+ if (InputText("##Text", buf, IM_ARRAYSIZE(buf), ImGuiInputTextFlags_CharsHexadecimal | ImGuiInputTextFlags_CharsUppercase))
+ {
+ value_changed = true;
+ char* p = buf;
+ while (*p == '#' || ImCharIsBlankA(*p))
+ p++;
+ i[0] = i[1] = i[2] = 0;
+ i[3] = 0xFF; // alpha default to 255 is not parsed by scanf (e.g. inputting #FFFFFF omitting alpha)
+ int r;
+ if (alpha)
+ r = sscanf(p, "%02X%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2], (unsigned int*)&i[3]); // Treat at unsigned (%X is unsigned)
+ else
+ r = sscanf(p, "%02X%02X%02X", (unsigned int*)&i[0], (unsigned int*)&i[1], (unsigned int*)&i[2]);
+ IM_UNUSED(r); // Fixes C6031: Return value ignored: 'sscanf'.
+ }
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight);
+ }
+
+ ImGuiWindow* picker_active_window = NULL;
+ if (!(flags & ImGuiColorEditFlags_NoSmallPreview))
+ {
+ const float button_offset_x = ((flags & ImGuiColorEditFlags_NoInputs) || (style.ColorButtonPosition == ImGuiDir_Left)) ? 0.0f : w_inputs + style.ItemInnerSpacing.x;
+ window->DC.CursorPos = ImVec2(pos.x + button_offset_x, pos.y);
+
+ const ImVec4 col_v4(col[0], col[1], col[2], alpha ? col[3] : 1.0f);
+ if (ColorButton("##ColorButton", col_v4, flags))
+ {
+ if (!(flags & ImGuiColorEditFlags_NoPicker))
+ {
+ // Store current color and open a picker
+ g.ColorPickerRef = col_v4;
+ OpenPopup("picker");
+ SetNextWindowPos(g.LastItemData.Rect.GetBL() + ImVec2(0.0f, style.ItemSpacing.y));
+ }
+ }
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight);
+
+ if (BeginPopup("picker"))
+ {
+ picker_active_window = g.CurrentWindow;
+ if (label != label_display_end)
+ {
+ TextEx(label, label_display_end);
+ Spacing();
+ }
+ ImGuiColorEditFlags picker_flags_to_forward = ImGuiColorEditFlags_DataTypeMask_ | ImGuiColorEditFlags_PickerMask_ | ImGuiColorEditFlags_InputMask_ | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaBar;
+ ImGuiColorEditFlags picker_flags = (flags_untouched & picker_flags_to_forward) | ImGuiColorEditFlags_DisplayMask_ | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_AlphaPreviewHalf;
+ SetNextItemWidth(square_sz * 12.0f); // Use 256 + bar sizes?
+ value_changed |= ColorPicker4("##picker", col, picker_flags, &g.ColorPickerRef.x);
+ EndPopup();
+ }
+ }
+
+ if (label != label_display_end && !(flags & ImGuiColorEditFlags_NoLabel))
+ {
+ SameLine(0.0f, style.ItemInnerSpacing.x);
+ TextEx(label, label_display_end);
+ }
+
+ // Convert back
+ if (value_changed && picker_active_window == NULL)
+ {
+ if (!value_changed_as_float)
+ for (int n = 0; n < 4; n++)
+ f[n] = i[n] / 255.0f;
+ if ((flags & ImGuiColorEditFlags_DisplayHSV) && (flags & ImGuiColorEditFlags_InputRGB))
+ {
+ g.ColorEditLastHue = f[0];
+ g.ColorEditLastSat = f[1];
+ ColorConvertHSVtoRGB(f[0], f[1], f[2], f[0], f[1], f[2]);
+ g.ColorEditLastColor = ColorConvertFloat4ToU32(ImVec4(f[0], f[1], f[2], 0));
+ }
+ if ((flags & ImGuiColorEditFlags_DisplayRGB) && (flags & ImGuiColorEditFlags_InputHSV))
+ ColorConvertRGBtoHSV(f[0], f[1], f[2], f[0], f[1], f[2]);
+
+ col[0] = f[0];
+ col[1] = f[1];
+ col[2] = f[2];
+ if (alpha)
+ col[3] = f[3];
+ }
+
+ PopID();
+ EndGroup();
+
+ // Drag and Drop Target
+ // NB: The flag test is merely an optional micro-optimization, BeginDragDropTarget() does the same test.
+ if ((g.LastItemData.StatusFlags & ImGuiItemStatusFlags_HoveredRect) && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropTarget())
+ {
+ bool accepted_drag_drop = false;
+ if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F))
+ {
+ memcpy((float*)col, payload->Data, sizeof(float) * 3); // Preserve alpha if any //-V512
+ value_changed = accepted_drag_drop = true;
+ }
+ if (const ImGuiPayload* payload = AcceptDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F))
+ {
+ memcpy((float*)col, payload->Data, sizeof(float) * components);
+ value_changed = accepted_drag_drop = true;
+ }
+
+ // Drag-drop payloads are always RGB
+ if (accepted_drag_drop && (flags & ImGuiColorEditFlags_InputHSV))
+ ColorConvertRGBtoHSV(col[0], col[1], col[2], col[0], col[1], col[2]);
+ EndDragDropTarget();
+ }
+
+ // When picker is being actively used, use its active id so IsItemActive() will function on ColorEdit4().
+ if (picker_active_window && g.ActiveId != 0 && g.ActiveIdWindow == picker_active_window)
+ g.LastItemData.ID = g.ActiveId;
+
+ if (value_changed)
+ MarkItemEdited(g.LastItemData.ID);
+
+ return value_changed;
+}
+
+bool ImGui::ColorPicker3(const char* label, float col[3], ImGuiColorEditFlags flags)
+{
+ float col4[4] = { col[0], col[1], col[2], 1.0f };
+ if (!ColorPicker4(label, col4, flags | ImGuiColorEditFlags_NoAlpha))
+ return false;
+ col[0] = col4[0]; col[1] = col4[1]; col[2] = col4[2];
+ return true;
+}
+
+// Helper for ColorPicker4()
+static void RenderArrowsForVerticalBar(ImDrawList* draw_list, ImVec2 pos, ImVec2 half_sz, float bar_w, float alpha)
+{
+ ImU32 alpha8 = IM_F32_TO_INT8_SAT(alpha);
+ ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x + 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Right, IM_COL32(0,0,0,alpha8));
+ ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + half_sz.x, pos.y), half_sz, ImGuiDir_Right, IM_COL32(255,255,255,alpha8));
+ ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x - 1, pos.y), ImVec2(half_sz.x + 2, half_sz.y + 1), ImGuiDir_Left, IM_COL32(0,0,0,alpha8));
+ ImGui::RenderArrowPointingAt(draw_list, ImVec2(pos.x + bar_w - half_sz.x, pos.y), half_sz, ImGuiDir_Left, IM_COL32(255,255,255,alpha8));
+}
+
+// Note: ColorPicker4() only accesses 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
+// (In C++ the 'float col[4]' notation for a function argument is equivalent to 'float* col', we only specify a size to facilitate understanding of the code.)
+// FIXME: we adjust the big color square height based on item width, which may cause a flickering feedback loop (if automatic height makes a vertical scrollbar appears, affecting automatic width..)
+// FIXME: this is trying to be aware of style.Alpha but not fully correct. Also, the color wheel will have overlapping glitches with (style.Alpha < 1.0)
+bool ImGui::ColorPicker4(const char* label, float col[4], ImGuiColorEditFlags flags, const float* ref_col)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImDrawList* draw_list = window->DrawList;
+ ImGuiStyle& style = g.Style;
+ ImGuiIO& io = g.IO;
+
+ const float width = CalcItemWidth();
+ g.NextItemData.ClearFlags();
+
+ PushID(label);
+ BeginGroup();
+
+ if (!(flags & ImGuiColorEditFlags_NoSidePreview))
+ flags |= ImGuiColorEditFlags_NoSmallPreview;
+
+ // Context menu: display and store options.
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ ColorPickerOptionsPopup(col, flags);
+
+ // Read stored options
+ if (!(flags & ImGuiColorEditFlags_PickerMask_))
+ flags |= ((g.ColorEditOptions & ImGuiColorEditFlags_PickerMask_) ? g.ColorEditOptions : ImGuiColorEditFlags_DefaultOptions_) & ImGuiColorEditFlags_PickerMask_;
+ if (!(flags & ImGuiColorEditFlags_InputMask_))
+ flags |= ((g.ColorEditOptions & ImGuiColorEditFlags_InputMask_) ? g.ColorEditOptions : ImGuiColorEditFlags_DefaultOptions_) & ImGuiColorEditFlags_InputMask_;
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_PickerMask_)); // Check that only 1 is selected
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_InputMask_)); // Check that only 1 is selected
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ flags |= (g.ColorEditOptions & ImGuiColorEditFlags_AlphaBar);
+
+ // Setup
+ int components = (flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4;
+ bool alpha_bar = (flags & ImGuiColorEditFlags_AlphaBar) && !(flags & ImGuiColorEditFlags_NoAlpha);
+ ImVec2 picker_pos = window->DC.CursorPos;
+ float square_sz = GetFrameHeight();
+ float bars_width = square_sz; // Arbitrary smallish width of Hue/Alpha picking bars
+ float sv_picker_size = ImMax(bars_width * 1, width - (alpha_bar ? 2 : 1) * (bars_width + style.ItemInnerSpacing.x)); // Saturation/Value picking box
+ float bar0_pos_x = picker_pos.x + sv_picker_size + style.ItemInnerSpacing.x;
+ float bar1_pos_x = bar0_pos_x + bars_width + style.ItemInnerSpacing.x;
+ float bars_triangles_half_sz = IM_FLOOR(bars_width * 0.20f);
+
+ float backup_initial_col[4];
+ memcpy(backup_initial_col, col, components * sizeof(float));
+
+ float wheel_thickness = sv_picker_size * 0.08f;
+ float wheel_r_outer = sv_picker_size * 0.50f;
+ float wheel_r_inner = wheel_r_outer - wheel_thickness;
+ ImVec2 wheel_center(picker_pos.x + (sv_picker_size + bars_width)*0.5f, picker_pos.y + sv_picker_size * 0.5f);
+
+ // Note: the triangle is displayed rotated with triangle_pa pointing to Hue, but most coordinates stays unrotated for logic.
+ float triangle_r = wheel_r_inner - (int)(sv_picker_size * 0.027f);
+ ImVec2 triangle_pa = ImVec2(triangle_r, 0.0f); // Hue point.
+ ImVec2 triangle_pb = ImVec2(triangle_r * -0.5f, triangle_r * -0.866025f); // Black point.
+ ImVec2 triangle_pc = ImVec2(triangle_r * -0.5f, triangle_r * +0.866025f); // White point.
+
+ float H = col[0], S = col[1], V = col[2];
+ float R = col[0], G = col[1], B = col[2];
+ if (flags & ImGuiColorEditFlags_InputRGB)
+ {
+ // Hue is lost when converting from greyscale rgb (saturation=0). Restore it.
+ ColorConvertRGBtoHSV(R, G, B, H, S, V);
+ ColorEditRestoreHS(col, &H, &S, &V);
+ }
+ else if (flags & ImGuiColorEditFlags_InputHSV)
+ {
+ ColorConvertHSVtoRGB(H, S, V, R, G, B);
+ }
+
+ bool value_changed = false, value_changed_h = false, value_changed_sv = false;
+
+ PushItemFlag(ImGuiItemFlags_NoNav, true);
+ if (flags & ImGuiColorEditFlags_PickerHueWheel)
+ {
+ // Hue wheel + SV triangle logic
+ InvisibleButton("hsv", ImVec2(sv_picker_size + style.ItemInnerSpacing.x + bars_width, sv_picker_size));
+ if (IsItemActive())
+ {
+ ImVec2 initial_off = g.IO.MouseClickedPos[0] - wheel_center;
+ ImVec2 current_off = g.IO.MousePos - wheel_center;
+ float initial_dist2 = ImLengthSqr(initial_off);
+ if (initial_dist2 >= (wheel_r_inner - 1) * (wheel_r_inner - 1) && initial_dist2 <= (wheel_r_outer + 1) * (wheel_r_outer + 1))
+ {
+ // Interactive with Hue wheel
+ H = ImAtan2(current_off.y, current_off.x) / IM_PI * 0.5f;
+ if (H < 0.0f)
+ H += 1.0f;
+ value_changed = value_changed_h = true;
+ }
+ float cos_hue_angle = ImCos(-H * 2.0f * IM_PI);
+ float sin_hue_angle = ImSin(-H * 2.0f * IM_PI);
+ if (ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, ImRotate(initial_off, cos_hue_angle, sin_hue_angle)))
+ {
+ // Interacting with SV triangle
+ ImVec2 current_off_unrotated = ImRotate(current_off, cos_hue_angle, sin_hue_angle);
+ if (!ImTriangleContainsPoint(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated))
+ current_off_unrotated = ImTriangleClosestPoint(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated);
+ float uu, vv, ww;
+ ImTriangleBarycentricCoords(triangle_pa, triangle_pb, triangle_pc, current_off_unrotated, uu, vv, ww);
+ V = ImClamp(1.0f - vv, 0.0001f, 1.0f);
+ S = ImClamp(uu / V, 0.0001f, 1.0f);
+ value_changed = value_changed_sv = true;
+ }
+ }
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight);
+ }
+ else if (flags & ImGuiColorEditFlags_PickerHueBar)
+ {
+ // SV rectangle logic
+ InvisibleButton("sv", ImVec2(sv_picker_size, sv_picker_size));
+ if (IsItemActive())
+ {
+ S = ImSaturate((io.MousePos.x - picker_pos.x) / (sv_picker_size - 1));
+ V = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size - 1));
+
+ // Greatly reduces hue jitter and reset to 0 when hue == 255 and color is rapidly modified using SV square.
+ if (g.ColorEditLastColor == ColorConvertFloat4ToU32(ImVec4(col[0], col[1], col[2], 0)))
+ H = g.ColorEditLastHue;
+ value_changed = value_changed_sv = true;
+ }
+ if (!(flags & ImGuiColorEditFlags_NoOptions))
+ OpenPopupOnItemClick("context", ImGuiPopupFlags_MouseButtonRight);
+
+ // Hue bar logic
+ SetCursorScreenPos(ImVec2(bar0_pos_x, picker_pos.y));
+ InvisibleButton("hue", ImVec2(bars_width, sv_picker_size));
+ if (IsItemActive())
+ {
+ H = ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size - 1));
+ value_changed = value_changed_h = true;
+ }
+ }
+
+ // Alpha bar logic
+ if (alpha_bar)
+ {
+ SetCursorScreenPos(ImVec2(bar1_pos_x, picker_pos.y));
+ InvisibleButton("alpha", ImVec2(bars_width, sv_picker_size));
+ if (IsItemActive())
+ {
+ col[3] = 1.0f - ImSaturate((io.MousePos.y - picker_pos.y) / (sv_picker_size - 1));
+ value_changed = true;
+ }
+ }
+ PopItemFlag(); // ImGuiItemFlags_NoNav
+
+ if (!(flags & ImGuiColorEditFlags_NoSidePreview))
+ {
+ SameLine(0, style.ItemInnerSpacing.x);
+ BeginGroup();
+ }
+
+ if (!(flags & ImGuiColorEditFlags_NoLabel))
+ {
+ const char* label_display_end = FindRenderedTextEnd(label);
+ if (label != label_display_end)
+ {
+ if ((flags & ImGuiColorEditFlags_NoSidePreview))
+ SameLine(0, style.ItemInnerSpacing.x);
+ TextEx(label, label_display_end);
+ }
+ }
+
+ if (!(flags & ImGuiColorEditFlags_NoSidePreview))
+ {
+ PushItemFlag(ImGuiItemFlags_NoNavDefaultFocus, true);
+ ImVec4 col_v4(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
+ if ((flags & ImGuiColorEditFlags_NoLabel))
+ Text("Current");
+
+ ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags_InputMask_ | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf | ImGuiColorEditFlags_NoTooltip;
+ ColorButton("##current", col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2));
+ if (ref_col != NULL)
+ {
+ Text("Original");
+ ImVec4 ref_col_v4(ref_col[0], ref_col[1], ref_col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : ref_col[3]);
+ if (ColorButton("##original", ref_col_v4, (flags & sub_flags_to_forward), ImVec2(square_sz * 3, square_sz * 2)))
+ {
+ memcpy(col, ref_col, components * sizeof(float));
+ value_changed = true;
+ }
+ }
+ PopItemFlag();
+ EndGroup();
+ }
+
+ // Convert back color to RGB
+ if (value_changed_h || value_changed_sv)
+ {
+ if (flags & ImGuiColorEditFlags_InputRGB)
+ {
+ ColorConvertHSVtoRGB(H, S, V, col[0], col[1], col[2]);
+ g.ColorEditLastHue = H;
+ g.ColorEditLastSat = S;
+ g.ColorEditLastColor = ColorConvertFloat4ToU32(ImVec4(col[0], col[1], col[2], 0));
+ }
+ else if (flags & ImGuiColorEditFlags_InputHSV)
+ {
+ col[0] = H;
+ col[1] = S;
+ col[2] = V;
+ }
+ }
+
+ // R,G,B and H,S,V slider color editor
+ bool value_changed_fix_hue_wrap = false;
+ if ((flags & ImGuiColorEditFlags_NoInputs) == 0)
+ {
+ PushItemWidth((alpha_bar ? bar1_pos_x : bar0_pos_x) + bars_width - picker_pos.x);
+ ImGuiColorEditFlags sub_flags_to_forward = ImGuiColorEditFlags_DataTypeMask_ | ImGuiColorEditFlags_InputMask_ | ImGuiColorEditFlags_HDR | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoSmallPreview | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf;
+ ImGuiColorEditFlags sub_flags = (flags & sub_flags_to_forward) | ImGuiColorEditFlags_NoPicker;
+ if (flags & ImGuiColorEditFlags_DisplayRGB || (flags & ImGuiColorEditFlags_DisplayMask_) == 0)
+ if (ColorEdit4("##rgb", col, sub_flags | ImGuiColorEditFlags_DisplayRGB))
+ {
+ // FIXME: Hackily differentiating using the DragInt (ActiveId != 0 && !ActiveIdAllowOverlap) vs. using the InputText or DropTarget.
+ // For the later we don't want to run the hue-wrap canceling code. If you are well versed in HSV picker please provide your input! (See #2050)
+ value_changed_fix_hue_wrap = (g.ActiveId != 0 && !g.ActiveIdAllowOverlap);
+ value_changed = true;
+ }
+ if (flags & ImGuiColorEditFlags_DisplayHSV || (flags & ImGuiColorEditFlags_DisplayMask_) == 0)
+ value_changed |= ColorEdit4("##hsv", col, sub_flags | ImGuiColorEditFlags_DisplayHSV);
+ if (flags & ImGuiColorEditFlags_DisplayHex || (flags & ImGuiColorEditFlags_DisplayMask_) == 0)
+ value_changed |= ColorEdit4("##hex", col, sub_flags | ImGuiColorEditFlags_DisplayHex);
+ PopItemWidth();
+ }
+
+ // Try to cancel hue wrap (after ColorEdit4 call), if any
+ if (value_changed_fix_hue_wrap && (flags & ImGuiColorEditFlags_InputRGB))
+ {
+ float new_H, new_S, new_V;
+ ColorConvertRGBtoHSV(col[0], col[1], col[2], new_H, new_S, new_V);
+ if (new_H <= 0 && H > 0)
+ {
+ if (new_V <= 0 && V != new_V)
+ ColorConvertHSVtoRGB(H, S, new_V <= 0 ? V * 0.5f : new_V, col[0], col[1], col[2]);
+ else if (new_S <= 0)
+ ColorConvertHSVtoRGB(H, new_S <= 0 ? S * 0.5f : new_S, new_V, col[0], col[1], col[2]);
+ }
+ }
+
+ if (value_changed)
+ {
+ if (flags & ImGuiColorEditFlags_InputRGB)
+ {
+ R = col[0];
+ G = col[1];
+ B = col[2];
+ ColorConvertRGBtoHSV(R, G, B, H, S, V);
+ ColorEditRestoreHS(col, &H, &S, &V); // Fix local Hue as display below will use it immediately.
+ }
+ else if (flags & ImGuiColorEditFlags_InputHSV)
+ {
+ H = col[0];
+ S = col[1];
+ V = col[2];
+ ColorConvertHSVtoRGB(H, S, V, R, G, B);
+ }
+ }
+
+ const int style_alpha8 = IM_F32_TO_INT8_SAT(style.Alpha);
+ const ImU32 col_black = IM_COL32(0,0,0,style_alpha8);
+ const ImU32 col_white = IM_COL32(255,255,255,style_alpha8);
+ const ImU32 col_midgrey = IM_COL32(128,128,128,style_alpha8);
+ const ImU32 col_hues[6 + 1] = { IM_COL32(255,0,0,style_alpha8), IM_COL32(255,255,0,style_alpha8), IM_COL32(0,255,0,style_alpha8), IM_COL32(0,255,255,style_alpha8), IM_COL32(0,0,255,style_alpha8), IM_COL32(255,0,255,style_alpha8), IM_COL32(255,0,0,style_alpha8) };
+
+ ImVec4 hue_color_f(1, 1, 1, style.Alpha); ColorConvertHSVtoRGB(H, 1, 1, hue_color_f.x, hue_color_f.y, hue_color_f.z);
+ ImU32 hue_color32 = ColorConvertFloat4ToU32(hue_color_f);
+ ImU32 user_col32_striped_of_alpha = ColorConvertFloat4ToU32(ImVec4(R, G, B, style.Alpha)); // Important: this is still including the main rendering/style alpha!!
+
+ ImVec2 sv_cursor_pos;
+
+ if (flags & ImGuiColorEditFlags_PickerHueWheel)
+ {
+ // Render Hue Wheel
+ const float aeps = 0.5f / wheel_r_outer; // Half a pixel arc length in radians (2pi cancels out).
+ const int segment_per_arc = ImMax(4, (int)wheel_r_outer / 12);
+ for (int n = 0; n < 6; n++)
+ {
+ const float a0 = (n) /6.0f * 2.0f * IM_PI - aeps;
+ const float a1 = (n+1.0f)/6.0f * 2.0f * IM_PI + aeps;
+ const int vert_start_idx = draw_list->VtxBuffer.Size;
+ draw_list->PathArcTo(wheel_center, (wheel_r_inner + wheel_r_outer)*0.5f, a0, a1, segment_per_arc);
+ draw_list->PathStroke(col_white, 0, wheel_thickness);
+ const int vert_end_idx = draw_list->VtxBuffer.Size;
+
+ // Paint colors over existing vertices
+ ImVec2 gradient_p0(wheel_center.x + ImCos(a0) * wheel_r_inner, wheel_center.y + ImSin(a0) * wheel_r_inner);
+ ImVec2 gradient_p1(wheel_center.x + ImCos(a1) * wheel_r_inner, wheel_center.y + ImSin(a1) * wheel_r_inner);
+ ShadeVertsLinearColorGradientKeepAlpha(draw_list, vert_start_idx, vert_end_idx, gradient_p0, gradient_p1, col_hues[n], col_hues[n + 1]);
+ }
+
+ // Render Cursor + preview on Hue Wheel
+ float cos_hue_angle = ImCos(H * 2.0f * IM_PI);
+ float sin_hue_angle = ImSin(H * 2.0f * IM_PI);
+ ImVec2 hue_cursor_pos(wheel_center.x + cos_hue_angle * (wheel_r_inner + wheel_r_outer) * 0.5f, wheel_center.y + sin_hue_angle * (wheel_r_inner + wheel_r_outer) * 0.5f);
+ float hue_cursor_rad = value_changed_h ? wheel_thickness * 0.65f : wheel_thickness * 0.55f;
+ int hue_cursor_segments = ImClamp((int)(hue_cursor_rad / 1.4f), 9, 32);
+ draw_list->AddCircleFilled(hue_cursor_pos, hue_cursor_rad, hue_color32, hue_cursor_segments);
+ draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad + 1, col_midgrey, hue_cursor_segments);
+ draw_list->AddCircle(hue_cursor_pos, hue_cursor_rad, col_white, hue_cursor_segments);
+
+ // Render SV triangle (rotated according to hue)
+ ImVec2 tra = wheel_center + ImRotate(triangle_pa, cos_hue_angle, sin_hue_angle);
+ ImVec2 trb = wheel_center + ImRotate(triangle_pb, cos_hue_angle, sin_hue_angle);
+ ImVec2 trc = wheel_center + ImRotate(triangle_pc, cos_hue_angle, sin_hue_angle);
+ ImVec2 uv_white = GetFontTexUvWhitePixel();
+ draw_list->PrimReserve(6, 6);
+ draw_list->PrimVtx(tra, uv_white, hue_color32);
+ draw_list->PrimVtx(trb, uv_white, hue_color32);
+ draw_list->PrimVtx(trc, uv_white, col_white);
+ draw_list->PrimVtx(tra, uv_white, 0);
+ draw_list->PrimVtx(trb, uv_white, col_black);
+ draw_list->PrimVtx(trc, uv_white, 0);
+ draw_list->AddTriangle(tra, trb, trc, col_midgrey, 1.5f);
+ sv_cursor_pos = ImLerp(ImLerp(trc, tra, ImSaturate(S)), trb, ImSaturate(1 - V));
+ }
+ else if (flags & ImGuiColorEditFlags_PickerHueBar)
+ {
+ // Render SV Square
+ draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), col_white, hue_color32, hue_color32, col_white);
+ draw_list->AddRectFilledMultiColor(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), 0, 0, col_black, col_black);
+ RenderFrameBorder(picker_pos, picker_pos + ImVec2(sv_picker_size, sv_picker_size), 0.0f);
+ sv_cursor_pos.x = ImClamp(IM_ROUND(picker_pos.x + ImSaturate(S) * sv_picker_size), picker_pos.x + 2, picker_pos.x + sv_picker_size - 2); // Sneakily prevent the circle to stick out too much
+ sv_cursor_pos.y = ImClamp(IM_ROUND(picker_pos.y + ImSaturate(1 - V) * sv_picker_size), picker_pos.y + 2, picker_pos.y + sv_picker_size - 2);
+
+ // Render Hue Bar
+ for (int i = 0; i < 6; ++i)
+ draw_list->AddRectFilledMultiColor(ImVec2(bar0_pos_x, picker_pos.y + i * (sv_picker_size / 6)), ImVec2(bar0_pos_x + bars_width, picker_pos.y + (i + 1) * (sv_picker_size / 6)), col_hues[i], col_hues[i], col_hues[i + 1], col_hues[i + 1]);
+ float bar0_line_y = IM_ROUND(picker_pos.y + H * sv_picker_size);
+ RenderFrameBorder(ImVec2(bar0_pos_x, picker_pos.y), ImVec2(bar0_pos_x + bars_width, picker_pos.y + sv_picker_size), 0.0f);
+ RenderArrowsForVerticalBar(draw_list, ImVec2(bar0_pos_x - 1, bar0_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f, style.Alpha);
+ }
+
+ // Render cursor/preview circle (clamp S/V within 0..1 range because floating points colors may lead HSV values to be out of range)
+ float sv_cursor_rad = value_changed_sv ? 10.0f : 6.0f;
+ draw_list->AddCircleFilled(sv_cursor_pos, sv_cursor_rad, user_col32_striped_of_alpha, 12);
+ draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad + 1, col_midgrey, 12);
+ draw_list->AddCircle(sv_cursor_pos, sv_cursor_rad, col_white, 12);
+
+ // Render alpha bar
+ if (alpha_bar)
+ {
+ float alpha = ImSaturate(col[3]);
+ ImRect bar1_bb(bar1_pos_x, picker_pos.y, bar1_pos_x + bars_width, picker_pos.y + sv_picker_size);
+ RenderColorRectWithAlphaCheckerboard(draw_list, bar1_bb.Min, bar1_bb.Max, 0, bar1_bb.GetWidth() / 2.0f, ImVec2(0.0f, 0.0f));
+ draw_list->AddRectFilledMultiColor(bar1_bb.Min, bar1_bb.Max, user_col32_striped_of_alpha, user_col32_striped_of_alpha, user_col32_striped_of_alpha & ~IM_COL32_A_MASK, user_col32_striped_of_alpha & ~IM_COL32_A_MASK);
+ float bar1_line_y = IM_ROUND(picker_pos.y + (1.0f - alpha) * sv_picker_size);
+ RenderFrameBorder(bar1_bb.Min, bar1_bb.Max, 0.0f);
+ RenderArrowsForVerticalBar(draw_list, ImVec2(bar1_pos_x - 1, bar1_line_y), ImVec2(bars_triangles_half_sz + 1, bars_triangles_half_sz), bars_width + 2.0f, style.Alpha);
+ }
+
+ EndGroup();
+
+ if (value_changed && memcmp(backup_initial_col, col, components * sizeof(float)) == 0)
+ value_changed = false;
+ if (value_changed)
+ MarkItemEdited(g.LastItemData.ID);
+
+ PopID();
+
+ return value_changed;
+}
+
+// A little color square. Return true when clicked.
+// FIXME: May want to display/ignore the alpha component in the color display? Yet show it in the tooltip.
+// 'desc_id' is not called 'label' because we don't display it next to the button, but only in the tooltip.
+// Note that 'col' may be encoded in HSV if ImGuiColorEditFlags_InputHSV is set.
+bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFlags flags, const ImVec2& size_arg)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiID id = window->GetID(desc_id);
+ const float default_size = GetFrameHeight();
+ const ImVec2 size(size_arg.x == 0.0f ? default_size : size_arg.x, size_arg.y == 0.0f ? default_size : size_arg.y);
+ const ImRect bb(window->DC.CursorPos, window->DC.CursorPos + size);
+ ItemSize(bb, (size.y >= default_size) ? g.Style.FramePadding.y : 0.0f);
+ if (!ItemAdd(bb, id))
+ return false;
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held);
+
+ if (flags & ImGuiColorEditFlags_NoAlpha)
+ flags &= ~(ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf);
+
+ ImVec4 col_rgb = col;
+ if (flags & ImGuiColorEditFlags_InputHSV)
+ ColorConvertHSVtoRGB(col_rgb.x, col_rgb.y, col_rgb.z, col_rgb.x, col_rgb.y, col_rgb.z);
+
+ ImVec4 col_rgb_without_alpha(col_rgb.x, col_rgb.y, col_rgb.z, 1.0f);
+ float grid_step = ImMin(size.x, size.y) / 2.99f;
+ float rounding = ImMin(g.Style.FrameRounding, grid_step * 0.5f);
+ ImRect bb_inner = bb;
+ float off = 0.0f;
+ if ((flags & ImGuiColorEditFlags_NoBorder) == 0)
+ {
+ off = -0.75f; // The border (using Col_FrameBg) tends to look off when color is near-opaque and rounding is enabled. This offset seemed like a good middle ground to reduce those artifacts.
+ bb_inner.Expand(off);
+ }
+ if ((flags & ImGuiColorEditFlags_AlphaPreviewHalf) && col_rgb.w < 1.0f)
+ {
+ float mid_x = IM_ROUND((bb_inner.Min.x + bb_inner.Max.x) * 0.5f);
+ RenderColorRectWithAlphaCheckerboard(window->DrawList, ImVec2(bb_inner.Min.x + grid_step, bb_inner.Min.y), bb_inner.Max, GetColorU32(col_rgb), grid_step, ImVec2(-grid_step + off, off), rounding, ImDrawFlags_RoundCornersRight);
+ window->DrawList->AddRectFilled(bb_inner.Min, ImVec2(mid_x, bb_inner.Max.y), GetColorU32(col_rgb_without_alpha), rounding, ImDrawFlags_RoundCornersLeft);
+ }
+ else
+ {
+ // Because GetColorU32() multiplies by the global style Alpha and we don't want to display a checkerboard if the source code had no alpha
+ ImVec4 col_source = (flags & ImGuiColorEditFlags_AlphaPreview) ? col_rgb : col_rgb_without_alpha;
+ if (col_source.w < 1.0f)
+ RenderColorRectWithAlphaCheckerboard(window->DrawList, bb_inner.Min, bb_inner.Max, GetColorU32(col_source), grid_step, ImVec2(off, off), rounding);
+ else
+ window->DrawList->AddRectFilled(bb_inner.Min, bb_inner.Max, GetColorU32(col_source), rounding);
+ }
+ RenderNavHighlight(bb, id);
+ if ((flags & ImGuiColorEditFlags_NoBorder) == 0)
+ {
+ if (g.Style.FrameBorderSize > 0.0f)
+ RenderFrameBorder(bb.Min, bb.Max, rounding);
+ else
+ window->DrawList->AddRect(bb.Min, bb.Max, GetColorU32(ImGuiCol_FrameBg), rounding); // Color button are often in need of some sort of border
+ }
+
+ // Drag and Drop Source
+ // NB: The ActiveId test is merely an optional micro-optimization, BeginDragDropSource() does the same test.
+ if (g.ActiveId == id && !(flags & ImGuiColorEditFlags_NoDragDrop) && BeginDragDropSource())
+ {
+ if (flags & ImGuiColorEditFlags_NoAlpha)
+ SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_3F, &col_rgb, sizeof(float) * 3, ImGuiCond_Once);
+ else
+ SetDragDropPayload(IMGUI_PAYLOAD_TYPE_COLOR_4F, &col_rgb, sizeof(float) * 4, ImGuiCond_Once);
+ ColorButton(desc_id, col, flags);
+ SameLine();
+ TextEx("Color");
+ EndDragDropSource();
+ }
+
+ // Tooltip
+ if (!(flags & ImGuiColorEditFlags_NoTooltip) && hovered)
+ ColorTooltip(desc_id, &col.x, flags & (ImGuiColorEditFlags_InputMask_ | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf));
+
+ return pressed;
+}
+
+// Initialize/override default color options
+void ImGui::SetColorEditOptions(ImGuiColorEditFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ if ((flags & ImGuiColorEditFlags_DisplayMask_) == 0)
+ flags |= ImGuiColorEditFlags_DefaultOptions_ & ImGuiColorEditFlags_DisplayMask_;
+ if ((flags & ImGuiColorEditFlags_DataTypeMask_) == 0)
+ flags |= ImGuiColorEditFlags_DefaultOptions_ & ImGuiColorEditFlags_DataTypeMask_;
+ if ((flags & ImGuiColorEditFlags_PickerMask_) == 0)
+ flags |= ImGuiColorEditFlags_DefaultOptions_ & ImGuiColorEditFlags_PickerMask_;
+ if ((flags & ImGuiColorEditFlags_InputMask_) == 0)
+ flags |= ImGuiColorEditFlags_DefaultOptions_ & ImGuiColorEditFlags_InputMask_;
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_DisplayMask_)); // Check only 1 option is selected
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_DataTypeMask_)); // Check only 1 option is selected
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_PickerMask_)); // Check only 1 option is selected
+ IM_ASSERT(ImIsPowerOfTwo(flags & ImGuiColorEditFlags_InputMask_)); // Check only 1 option is selected
+ g.ColorEditOptions = flags;
+}
+
+// Note: only access 3 floats if ImGuiColorEditFlags_NoAlpha flag is set.
+void ImGui::ColorTooltip(const char* text, const float* col, ImGuiColorEditFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+
+ BeginTooltipEx(ImGuiTooltipFlags_OverridePreviousTooltip, ImGuiWindowFlags_None);
+ const char* text_end = text ? FindRenderedTextEnd(text, NULL) : text;
+ if (text_end > text)
+ {
+ TextEx(text, text_end);
+ Separator();
+ }
+
+ ImVec2 sz(g.FontSize * 3 + g.Style.FramePadding.y * 2, g.FontSize * 3 + g.Style.FramePadding.y * 2);
+ ImVec4 cf(col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
+ int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
+ ColorButton("##preview", cf, (flags & (ImGuiColorEditFlags_InputMask_ | ImGuiColorEditFlags_NoAlpha | ImGuiColorEditFlags_AlphaPreview | ImGuiColorEditFlags_AlphaPreviewHalf)) | ImGuiColorEditFlags_NoTooltip, sz);
+ SameLine();
+ if ((flags & ImGuiColorEditFlags_InputRGB) || !(flags & ImGuiColorEditFlags_InputMask_))
+ {
+ if (flags & ImGuiColorEditFlags_NoAlpha)
+ Text("#%02X%02X%02X\nR: %d, G: %d, B: %d\n(%.3f, %.3f, %.3f)", cr, cg, cb, cr, cg, cb, col[0], col[1], col[2]);
+ else
+ Text("#%02X%02X%02X%02X\nR:%d, G:%d, B:%d, A:%d\n(%.3f, %.3f, %.3f, %.3f)", cr, cg, cb, ca, cr, cg, cb, ca, col[0], col[1], col[2], col[3]);
+ }
+ else if (flags & ImGuiColorEditFlags_InputHSV)
+ {
+ if (flags & ImGuiColorEditFlags_NoAlpha)
+ Text("H: %.3f, S: %.3f, V: %.3f", col[0], col[1], col[2]);
+ else
+ Text("H: %.3f, S: %.3f, V: %.3f, A: %.3f", col[0], col[1], col[2], col[3]);
+ }
+ EndTooltip();
+}
+
+void ImGui::ColorEditOptionsPopup(const float* col, ImGuiColorEditFlags flags)
+{
+ bool allow_opt_inputs = !(flags & ImGuiColorEditFlags_DisplayMask_);
+ bool allow_opt_datatype = !(flags & ImGuiColorEditFlags_DataTypeMask_);
+ if ((!allow_opt_inputs && !allow_opt_datatype) || !BeginPopup("context"))
+ return;
+ ImGuiContext& g = *GImGui;
+ ImGuiColorEditFlags opts = g.ColorEditOptions;
+ if (allow_opt_inputs)
+ {
+ if (RadioButton("RGB", (opts & ImGuiColorEditFlags_DisplayRGB) != 0)) opts = (opts & ~ImGuiColorEditFlags_DisplayMask_) | ImGuiColorEditFlags_DisplayRGB;
+ if (RadioButton("HSV", (opts & ImGuiColorEditFlags_DisplayHSV) != 0)) opts = (opts & ~ImGuiColorEditFlags_DisplayMask_) | ImGuiColorEditFlags_DisplayHSV;
+ if (RadioButton("Hex", (opts & ImGuiColorEditFlags_DisplayHex) != 0)) opts = (opts & ~ImGuiColorEditFlags_DisplayMask_) | ImGuiColorEditFlags_DisplayHex;
+ }
+ if (allow_opt_datatype)
+ {
+ if (allow_opt_inputs) Separator();
+ if (RadioButton("0..255", (opts & ImGuiColorEditFlags_Uint8) != 0)) opts = (opts & ~ImGuiColorEditFlags_DataTypeMask_) | ImGuiColorEditFlags_Uint8;
+ if (RadioButton("0.00..1.00", (opts & ImGuiColorEditFlags_Float) != 0)) opts = (opts & ~ImGuiColorEditFlags_DataTypeMask_) | ImGuiColorEditFlags_Float;
+ }
+
+ if (allow_opt_inputs || allow_opt_datatype)
+ Separator();
+ if (Button("Copy as..", ImVec2(-1, 0)))
+ OpenPopup("Copy");
+ if (BeginPopup("Copy"))
+ {
+ int cr = IM_F32_TO_INT8_SAT(col[0]), cg = IM_F32_TO_INT8_SAT(col[1]), cb = IM_F32_TO_INT8_SAT(col[2]), ca = (flags & ImGuiColorEditFlags_NoAlpha) ? 255 : IM_F32_TO_INT8_SAT(col[3]);
+ char buf[64];
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "(%.3ff, %.3ff, %.3ff, %.3ff)", col[0], col[1], col[2], (flags & ImGuiColorEditFlags_NoAlpha) ? 1.0f : col[3]);
+ if (Selectable(buf))
+ SetClipboardText(buf);
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "(%d,%d,%d,%d)", cr, cg, cb, ca);
+ if (Selectable(buf))
+ SetClipboardText(buf);
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X", cr, cg, cb);
+ if (Selectable(buf))
+ SetClipboardText(buf);
+ if (!(flags & ImGuiColorEditFlags_NoAlpha))
+ {
+ ImFormatString(buf, IM_ARRAYSIZE(buf), "#%02X%02X%02X%02X", cr, cg, cb, ca);
+ if (Selectable(buf))
+ SetClipboardText(buf);
+ }
+ EndPopup();
+ }
+
+ g.ColorEditOptions = opts;
+ EndPopup();
+}
+
+void ImGui::ColorPickerOptionsPopup(const float* ref_col, ImGuiColorEditFlags flags)
+{
+ bool allow_opt_picker = !(flags & ImGuiColorEditFlags_PickerMask_);
+ bool allow_opt_alpha_bar = !(flags & ImGuiColorEditFlags_NoAlpha) && !(flags & ImGuiColorEditFlags_AlphaBar);
+ if ((!allow_opt_picker && !allow_opt_alpha_bar) || !BeginPopup("context"))
+ return;
+ ImGuiContext& g = *GImGui;
+ if (allow_opt_picker)
+ {
+ ImVec2 picker_size(g.FontSize * 8, ImMax(g.FontSize * 8 - (GetFrameHeight() + g.Style.ItemInnerSpacing.x), 1.0f)); // FIXME: Picker size copied from main picker function
+ PushItemWidth(picker_size.x);
+ for (int picker_type = 0; picker_type < 2; picker_type++)
+ {
+ // Draw small/thumbnail version of each picker type (over an invisible button for selection)
+ if (picker_type > 0) Separator();
+ PushID(picker_type);
+ ImGuiColorEditFlags picker_flags = ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoOptions | ImGuiColorEditFlags_NoLabel | ImGuiColorEditFlags_NoSidePreview | (flags & ImGuiColorEditFlags_NoAlpha);
+ if (picker_type == 0) picker_flags |= ImGuiColorEditFlags_PickerHueBar;
+ if (picker_type == 1) picker_flags |= ImGuiColorEditFlags_PickerHueWheel;
+ ImVec2 backup_pos = GetCursorScreenPos();
+ if (Selectable("##selectable", false, 0, picker_size)) // By default, Selectable() is closing popup
+ g.ColorEditOptions = (g.ColorEditOptions & ~ImGuiColorEditFlags_PickerMask_) | (picker_flags & ImGuiColorEditFlags_PickerMask_);
+ SetCursorScreenPos(backup_pos);
+ ImVec4 previewing_ref_col;
+ memcpy(&previewing_ref_col, ref_col, sizeof(float) * ((picker_flags & ImGuiColorEditFlags_NoAlpha) ? 3 : 4));
+ ColorPicker4("##previewing_picker", &previewing_ref_col.x, picker_flags);
+ PopID();
+ }
+ PopItemWidth();
+ }
+ if (allow_opt_alpha_bar)
+ {
+ if (allow_opt_picker) Separator();
+ CheckboxFlags("Alpha Bar", &g.ColorEditOptions, ImGuiColorEditFlags_AlphaBar);
+ }
+ EndPopup();
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: TreeNode, CollapsingHeader, etc.
+//-------------------------------------------------------------------------
+// - TreeNode()
+// - TreeNodeV()
+// - TreeNodeEx()
+// - TreeNodeExV()
+// - TreeNodeBehavior() [Internal]
+// - TreePush()
+// - TreePop()
+// - GetTreeNodeToLabelSpacing()
+// - SetNextItemOpen()
+// - CollapsingHeader()
+//-------------------------------------------------------------------------
+
+bool ImGui::TreeNode(const char* str_id, const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ bool is_open = TreeNodeExV(str_id, 0, fmt, args);
+ va_end(args);
+ return is_open;
+}
+
+bool ImGui::TreeNode(const void* ptr_id, const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ bool is_open = TreeNodeExV(ptr_id, 0, fmt, args);
+ va_end(args);
+ return is_open;
+}
+
+bool ImGui::TreeNode(const char* label)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+ return TreeNodeBehavior(window->GetID(label), 0, label, NULL);
+}
+
+bool ImGui::TreeNodeV(const char* str_id, const char* fmt, va_list args)
+{
+ return TreeNodeExV(str_id, 0, fmt, args);
+}
+
+bool ImGui::TreeNodeV(const void* ptr_id, const char* fmt, va_list args)
+{
+ return TreeNodeExV(ptr_id, 0, fmt, args);
+}
+
+bool ImGui::TreeNodeEx(const char* label, ImGuiTreeNodeFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ return TreeNodeBehavior(window->GetID(label), flags, label, NULL);
+}
+
+bool ImGui::TreeNodeEx(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ bool is_open = TreeNodeExV(str_id, flags, fmt, args);
+ va_end(args);
+ return is_open;
+}
+
+bool ImGui::TreeNodeEx(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, ...)
+{
+ va_list args;
+ va_start(args, fmt);
+ bool is_open = TreeNodeExV(ptr_id, flags, fmt, args);
+ va_end(args);
+ return is_open;
+}
+
+bool ImGui::TreeNodeExV(const char* str_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ const char* label, *label_end;
+ ImFormatStringToTempBufferV(&label, &label_end, fmt, args);
+ return TreeNodeBehavior(window->GetID(str_id), flags, label, label_end);
+}
+
+bool ImGui::TreeNodeExV(const void* ptr_id, ImGuiTreeNodeFlags flags, const char* fmt, va_list args)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ const char* label, *label_end;
+ ImFormatStringToTempBufferV(&label, &label_end, fmt, args);
+ return TreeNodeBehavior(window->GetID(ptr_id), flags, label, label_end);
+}
+
+bool ImGui::TreeNodeBehaviorIsOpen(ImGuiID id, ImGuiTreeNodeFlags flags)
+{
+ if (flags & ImGuiTreeNodeFlags_Leaf)
+ return true;
+
+ // We only write to the tree storage if the user clicks (or explicitly use the SetNextItemOpen function)
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ ImGuiStorage* storage = window->DC.StateStorage;
+
+ bool is_open;
+ if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasOpen)
+ {
+ if (g.NextItemData.OpenCond & ImGuiCond_Always)
+ {
+ is_open = g.NextItemData.OpenVal;
+ storage->SetInt(id, is_open);
+ }
+ else
+ {
+ // We treat ImGuiCond_Once and ImGuiCond_FirstUseEver the same because tree node state are not saved persistently.
+ const int stored_value = storage->GetInt(id, -1);
+ if (stored_value == -1)
+ {
+ is_open = g.NextItemData.OpenVal;
+ storage->SetInt(id, is_open);
+ }
+ else
+ {
+ is_open = stored_value != 0;
+ }
+ }
+ }
+ else
+ {
+ is_open = storage->GetInt(id, (flags & ImGuiTreeNodeFlags_DefaultOpen) ? 1 : 0) != 0;
+ }
+
+ // When logging is enabled, we automatically expand tree nodes (but *NOT* collapsing headers.. seems like sensible behavior).
+ // NB- If we are above max depth we still allow manually opened nodes to be logged.
+ if (g.LogEnabled && !(flags & ImGuiTreeNodeFlags_NoAutoOpenOnLog) && (window->DC.TreeDepth - g.LogDepthRef) < g.LogDepthToExpand)
+ is_open = true;
+
+ return is_open;
+}
+
+bool ImGui::TreeNodeBehavior(ImGuiID id, ImGuiTreeNodeFlags flags, const char* label, const char* label_end)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ const bool display_frame = (flags & ImGuiTreeNodeFlags_Framed) != 0;
+ const ImVec2 padding = (display_frame || (flags & ImGuiTreeNodeFlags_FramePadding)) ? style.FramePadding : ImVec2(style.FramePadding.x, ImMin(window->DC.CurrLineTextBaseOffset, style.FramePadding.y));
+
+ if (!label_end)
+ label_end = FindRenderedTextEnd(label);
+ const ImVec2 label_size = CalcTextSize(label, label_end, false);
+
+ // We vertically grow up to current line height up the typical widget height.
+ const float frame_height = ImMax(ImMin(window->DC.CurrLineSize.y, g.FontSize + style.FramePadding.y * 2), label_size.y + padding.y * 2);
+ ImRect frame_bb;
+ frame_bb.Min.x = (flags & ImGuiTreeNodeFlags_SpanFullWidth) ? window->WorkRect.Min.x : window->DC.CursorPos.x;
+ frame_bb.Min.y = window->DC.CursorPos.y;
+ frame_bb.Max.x = window->WorkRect.Max.x;
+ frame_bb.Max.y = window->DC.CursorPos.y + frame_height;
+ if (display_frame)
+ {
+ // Framed header expand a little outside the default padding, to the edge of InnerClipRect
+ // (FIXME: May remove this at some point and make InnerClipRect align with WindowPadding.x instead of WindowPadding.x*0.5f)
+ frame_bb.Min.x -= IM_FLOOR(window->WindowPadding.x * 0.5f - 1.0f);
+ frame_bb.Max.x += IM_FLOOR(window->WindowPadding.x * 0.5f);
+ }
+
+ const float text_offset_x = g.FontSize + (display_frame ? padding.x * 3 : padding.x * 2); // Collapser arrow width + Spacing
+ const float text_offset_y = ImMax(padding.y, window->DC.CurrLineTextBaseOffset); // Latch before ItemSize changes it
+ const float text_width = g.FontSize + (label_size.x > 0.0f ? label_size.x + padding.x * 2 : 0.0f); // Include collapser
+ ImVec2 text_pos(window->DC.CursorPos.x + text_offset_x, window->DC.CursorPos.y + text_offset_y);
+ ItemSize(ImVec2(text_width, frame_height), padding.y);
+
+ // For regular tree nodes, we arbitrary allow to click past 2 worth of ItemSpacing
+ ImRect interact_bb = frame_bb;
+ if (!display_frame && (flags & (ImGuiTreeNodeFlags_SpanAvailWidth | ImGuiTreeNodeFlags_SpanFullWidth)) == 0)
+ interact_bb.Max.x = frame_bb.Min.x + text_width + style.ItemSpacing.x * 2.0f;
+
+ // Store a flag for the current depth to tell if we will allow closing this node when navigating one of its child.
+ // For this purpose we essentially compare if g.NavIdIsAlive went from 0 to 1 between TreeNode() and TreePop().
+ // This is currently only support 32 level deep and we are fine with (1 << Depth) overflowing into a zero.
+ const bool is_leaf = (flags & ImGuiTreeNodeFlags_Leaf) != 0;
+ bool is_open = TreeNodeBehaviorIsOpen(id, flags);
+ if (is_open && !g.NavIdIsAlive && (flags & ImGuiTreeNodeFlags_NavLeftJumpsBackHere) && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
+ window->DC.TreeJumpToParentOnPopMask |= (1 << window->DC.TreeDepth);
+
+ bool item_add = ItemAdd(interact_bb, id);
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_HasDisplayRect;
+ g.LastItemData.DisplayRect = frame_bb;
+
+ if (!item_add)
+ {
+ if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
+ TreePushOverrideID(id);
+ IMGUI_TEST_ENGINE_ITEM_INFO(g.LastItemData.ID, label, g.LastItemData.StatusFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
+ return is_open;
+ }
+
+ ImGuiButtonFlags button_flags = ImGuiTreeNodeFlags_None;
+ if (flags & ImGuiTreeNodeFlags_AllowItemOverlap)
+ button_flags |= ImGuiButtonFlags_AllowItemOverlap;
+ if (!is_leaf)
+ button_flags |= ImGuiButtonFlags_PressedOnDragDropHold;
+
+ // We allow clicking on the arrow section with keyboard modifiers held, in order to easily
+ // allow browsing a tree while preserving selection with code implementing multi-selection patterns.
+ // When clicking on the rest of the tree node we always disallow keyboard modifiers.
+ const float arrow_hit_x1 = (text_pos.x - text_offset_x) - style.TouchExtraPadding.x;
+ const float arrow_hit_x2 = (text_pos.x - text_offset_x) + (g.FontSize + padding.x * 2.0f) + style.TouchExtraPadding.x;
+ const bool is_mouse_x_over_arrow = (g.IO.MousePos.x >= arrow_hit_x1 && g.IO.MousePos.x < arrow_hit_x2);
+ if (window != g.HoveredWindow || !is_mouse_x_over_arrow)
+ button_flags |= ImGuiButtonFlags_NoKeyModifiers;
+
+ // Open behaviors can be altered with the _OpenOnArrow and _OnOnDoubleClick flags.
+ // Some alteration have subtle effects (e.g. toggle on MouseUp vs MouseDown events) due to requirements for multi-selection and drag and drop support.
+ // - Single-click on label = Toggle on MouseUp (default, when _OpenOnArrow=0)
+ // - Single-click on arrow = Toggle on MouseDown (when _OpenOnArrow=0)
+ // - Single-click on arrow = Toggle on MouseDown (when _OpenOnArrow=1)
+ // - Double-click on label = Toggle on MouseDoubleClick (when _OpenOnDoubleClick=1)
+ // - Double-click on arrow = Toggle on MouseDoubleClick (when _OpenOnDoubleClick=1 and _OpenOnArrow=0)
+ // It is rather standard that arrow click react on Down rather than Up.
+ // We set ImGuiButtonFlags_PressedOnClickRelease on OpenOnDoubleClick because we want the item to be active on the initial MouseDown in order for drag and drop to work.
+ if (is_mouse_x_over_arrow)
+ button_flags |= ImGuiButtonFlags_PressedOnClick;
+ else if (flags & ImGuiTreeNodeFlags_OpenOnDoubleClick)
+ button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick;
+ else
+ button_flags |= ImGuiButtonFlags_PressedOnClickRelease;
+
+ bool selected = (flags & ImGuiTreeNodeFlags_Selected) != 0;
+ const bool was_selected = selected;
+
+ bool hovered, held;
+ bool pressed = ButtonBehavior(interact_bb, id, &hovered, &held, button_flags);
+ bool toggled = false;
+ if (!is_leaf)
+ {
+ if (pressed && g.DragDropHoldJustPressedId != id)
+ {
+ if ((flags & (ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick)) == 0 || (g.NavActivateId == id))
+ toggled = true;
+ if (flags & ImGuiTreeNodeFlags_OpenOnArrow)
+ toggled |= is_mouse_x_over_arrow && !g.NavDisableMouseHover; // Lightweight equivalent of IsMouseHoveringRect() since ButtonBehavior() already did the job
+ if ((flags & ImGuiTreeNodeFlags_OpenOnDoubleClick) && g.IO.MouseClickedCount[0] == 2)
+ toggled = true;
+ }
+ else if (pressed && g.DragDropHoldJustPressedId == id)
+ {
+ IM_ASSERT(button_flags & ImGuiButtonFlags_PressedOnDragDropHold);
+ if (!is_open) // When using Drag and Drop "hold to open" we keep the node highlighted after opening, but never close it again.
+ toggled = true;
+ }
+
+ if (g.NavId == id && g.NavMoveDir == ImGuiDir_Left && is_open)
+ {
+ toggled = true;
+ NavMoveRequestCancel();
+ }
+ if (g.NavId == id && g.NavMoveDir == ImGuiDir_Right && !is_open) // If there's something upcoming on the line we may want to give it the priority?
+ {
+ toggled = true;
+ NavMoveRequestCancel();
+ }
+
+ if (toggled)
+ {
+ is_open = !is_open;
+ window->DC.StateStorage->SetInt(id, is_open);
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_ToggledOpen;
+ }
+ }
+ if (flags & ImGuiTreeNodeFlags_AllowItemOverlap)
+ SetItemAllowOverlap();
+
+ // In this branch, TreeNodeBehavior() cannot toggle the selection so this will never trigger.
+ if (selected != was_selected) //-V547
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_ToggledSelection;
+
+ // Render
+ const ImU32 text_col = GetColorU32(ImGuiCol_Text);
+ ImGuiNavHighlightFlags nav_highlight_flags = ImGuiNavHighlightFlags_TypeThin;
+ if (display_frame)
+ {
+ // Framed type
+ const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
+ RenderFrame(frame_bb.Min, frame_bb.Max, bg_col, true, style.FrameRounding);
+ RenderNavHighlight(frame_bb, id, nav_highlight_flags);
+ if (flags & ImGuiTreeNodeFlags_Bullet)
+ RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.60f, text_pos.y + g.FontSize * 0.5f), text_col);
+ else if (!is_leaf)
+ RenderArrow(window->DrawList, ImVec2(text_pos.x - text_offset_x + padding.x, text_pos.y), text_col, is_open ? ImGuiDir_Down : ImGuiDir_Right, 1.0f);
+ else // Leaf without bullet, left-adjusted text
+ text_pos.x -= text_offset_x;
+ if (flags & ImGuiTreeNodeFlags_ClipLabelForTrailingButton)
+ frame_bb.Max.x -= g.FontSize + style.FramePadding.x;
+
+ if (g.LogEnabled)
+ LogSetNextTextDecoration("###", "###");
+ RenderTextClipped(text_pos, frame_bb.Max, label, label_end, &label_size);
+ }
+ else
+ {
+ // Unframed typed for tree nodes
+ if (hovered || selected)
+ {
+ const ImU32 bg_col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
+ RenderFrame(frame_bb.Min, frame_bb.Max, bg_col, false);
+ }
+ RenderNavHighlight(frame_bb, id, nav_highlight_flags);
+ if (flags & ImGuiTreeNodeFlags_Bullet)
+ RenderBullet(window->DrawList, ImVec2(text_pos.x - text_offset_x * 0.5f, text_pos.y + g.FontSize * 0.5f), text_col);
+ else if (!is_leaf)
+ RenderArrow(window->DrawList, ImVec2(text_pos.x - text_offset_x + padding.x, text_pos.y + g.FontSize * 0.15f), text_col, is_open ? ImGuiDir_Down : ImGuiDir_Right, 0.70f);
+ if (g.LogEnabled)
+ LogSetNextTextDecoration(">", NULL);
+ RenderText(text_pos, label, label_end, false);
+ }
+
+ if (is_open && !(flags & ImGuiTreeNodeFlags_NoTreePushOnOpen))
+ TreePushOverrideID(id);
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags | (is_leaf ? 0 : ImGuiItemStatusFlags_Openable) | (is_open ? ImGuiItemStatusFlags_Opened : 0));
+ return is_open;
+}
+
+void ImGui::TreePush(const char* str_id)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ Indent();
+ window->DC.TreeDepth++;
+ PushID(str_id);
+}
+
+void ImGui::TreePush(const void* ptr_id)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ Indent();
+ window->DC.TreeDepth++;
+ PushID(ptr_id);
+}
+
+void ImGui::TreePushOverrideID(ImGuiID id)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ Indent();
+ window->DC.TreeDepth++;
+ PushOverrideID(id);
+}
+
+void ImGui::TreePop()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ Unindent();
+
+ window->DC.TreeDepth--;
+ ImU32 tree_depth_mask = (1 << window->DC.TreeDepth);
+
+ // Handle Left arrow to move to parent tree node (when ImGuiTreeNodeFlags_NavLeftJumpsBackHere is enabled)
+ if (g.NavMoveDir == ImGuiDir_Left && g.NavWindow == window && NavMoveRequestButNoResultYet())
+ if (g.NavIdIsAlive && (window->DC.TreeJumpToParentOnPopMask & tree_depth_mask))
+ {
+ SetNavID(window->IDStack.back(), g.NavLayer, 0, ImRect());
+ NavMoveRequestCancel();
+ }
+ window->DC.TreeJumpToParentOnPopMask &= tree_depth_mask - 1;
+
+ IM_ASSERT(window->IDStack.Size > 1); // There should always be 1 element in the IDStack (pushed during window creation). If this triggers you called TreePop/PopID too much.
+ PopID();
+}
+
+// Horizontal distance preceding label when using TreeNode() or Bullet()
+float ImGui::GetTreeNodeToLabelSpacing()
+{
+ ImGuiContext& g = *GImGui;
+ return g.FontSize + (g.Style.FramePadding.x * 2.0f);
+}
+
+// Set next TreeNode/CollapsingHeader open state.
+void ImGui::SetNextItemOpen(bool is_open, ImGuiCond cond)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.CurrentWindow->SkipItems)
+ return;
+ g.NextItemData.Flags |= ImGuiNextItemDataFlags_HasOpen;
+ g.NextItemData.OpenVal = is_open;
+ g.NextItemData.OpenCond = cond ? cond : ImGuiCond_Always;
+}
+
+// CollapsingHeader returns true when opened but do not indent nor push into the ID stack (because of the ImGuiTreeNodeFlags_NoTreePushOnOpen flag).
+// This is basically the same as calling TreeNodeEx(label, ImGuiTreeNodeFlags_CollapsingHeader). You can remove the _NoTreePushOnOpen flag if you want behavior closer to normal TreeNode().
+bool ImGui::CollapsingHeader(const char* label, ImGuiTreeNodeFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ return TreeNodeBehavior(window->GetID(label), flags | ImGuiTreeNodeFlags_CollapsingHeader, label);
+}
+
+// p_visible == NULL : regular collapsing header
+// p_visible != NULL && *p_visible == true : show a small close button on the corner of the header, clicking the button will set *p_visible = false
+// p_visible != NULL && *p_visible == false : do not show the header at all
+// Do not mistake this with the Open state of the header itself, which you can adjust with SetNextItemOpen() or ImGuiTreeNodeFlags_DefaultOpen.
+bool ImGui::CollapsingHeader(const char* label, bool* p_visible, ImGuiTreeNodeFlags flags)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ if (p_visible && !*p_visible)
+ return false;
+
+ ImGuiID id = window->GetID(label);
+ flags |= ImGuiTreeNodeFlags_CollapsingHeader;
+ if (p_visible)
+ flags |= ImGuiTreeNodeFlags_AllowItemOverlap | ImGuiTreeNodeFlags_ClipLabelForTrailingButton;
+ bool is_open = TreeNodeBehavior(id, flags, label);
+ if (p_visible != NULL)
+ {
+ // Create a small overlapping close button
+ // FIXME: We can evolve this into user accessible helpers to add extra buttons on title bars, headers, etc.
+ // FIXME: CloseButton can overlap into text, need find a way to clip the text somehow.
+ ImGuiContext& g = *GImGui;
+ ImGuiLastItemData last_item_backup = g.LastItemData;
+ float button_size = g.FontSize;
+ float button_x = ImMax(g.LastItemData.Rect.Min.x, g.LastItemData.Rect.Max.x - g.Style.FramePadding.x * 2.0f - button_size);
+ float button_y = g.LastItemData.Rect.Min.y;
+ ImGuiID close_button_id = GetIDWithSeed("#CLOSE", NULL, id);
+ if (CloseButton(close_button_id, ImVec2(button_x, button_y)))
+ *p_visible = false;
+ g.LastItemData = last_item_backup;
+ }
+
+ return is_open;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Selectable
+//-------------------------------------------------------------------------
+// - Selectable()
+//-------------------------------------------------------------------------
+
+// Tip: pass a non-visible label (e.g. "##hello") then you can use the space to draw other text or image.
+// But you need to make sure the ID is unique, e.g. enclose calls in PushID/PopID or use ##unique_id.
+// With this scheme, ImGuiSelectableFlags_SpanAllColumns and ImGuiSelectableFlags_AllowItemOverlap are also frequently used flags.
+// FIXME: Selectable() with (size.x == 0.0f) and (SelectableTextAlign.x > 0.0f) followed by SameLine() is currently not supported.
+bool ImGui::Selectable(const char* label, bool selected, ImGuiSelectableFlags flags, const ImVec2& size_arg)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+
+ // Submit label or explicit size to ItemSize(), whereas ItemAdd() will submit a larger/spanning rectangle.
+ ImGuiID id = window->GetID(label);
+ ImVec2 label_size = CalcTextSize(label, NULL, true);
+ ImVec2 size(size_arg.x != 0.0f ? size_arg.x : label_size.x, size_arg.y != 0.0f ? size_arg.y : label_size.y);
+ ImVec2 pos = window->DC.CursorPos;
+ pos.y += window->DC.CurrLineTextBaseOffset;
+ ItemSize(size, 0.0f);
+
+ // Fill horizontal space
+ // We don't support (size < 0.0f) in Selectable() because the ItemSpacing extension would make explicitly right-aligned sizes not visibly match other widgets.
+ const bool span_all_columns = (flags & ImGuiSelectableFlags_SpanAllColumns) != 0;
+ const float min_x = span_all_columns ? window->ParentWorkRect.Min.x : pos.x;
+ const float max_x = span_all_columns ? window->ParentWorkRect.Max.x : window->WorkRect.Max.x;
+ if (size_arg.x == 0.0f || (flags & ImGuiSelectableFlags_SpanAvailWidth))
+ size.x = ImMax(label_size.x, max_x - min_x);
+
+ // Text stays at the submission position, but bounding box may be extended on both sides
+ const ImVec2 text_min = pos;
+ const ImVec2 text_max(min_x + size.x, pos.y + size.y);
+
+ // Selectables are meant to be tightly packed together with no click-gap, so we extend their box to cover spacing between selectable.
+ ImRect bb(min_x, pos.y, text_max.x, text_max.y);
+ if ((flags & ImGuiSelectableFlags_NoPadWithHalfSpacing) == 0)
+ {
+ const float spacing_x = span_all_columns ? 0.0f : style.ItemSpacing.x;
+ const float spacing_y = style.ItemSpacing.y;
+ const float spacing_L = IM_FLOOR(spacing_x * 0.50f);
+ const float spacing_U = IM_FLOOR(spacing_y * 0.50f);
+ bb.Min.x -= spacing_L;
+ bb.Min.y -= spacing_U;
+ bb.Max.x += (spacing_x - spacing_L);
+ bb.Max.y += (spacing_y - spacing_U);
+ }
+ //if (g.IO.KeyCtrl) { GetForegroundDrawList()->AddRect(bb.Min, bb.Max, IM_COL32(0, 255, 0, 255)); }
+
+ // Modify ClipRect for the ItemAdd(), faster than doing a PushColumnsBackground/PushTableBackground for every Selectable..
+ const float backup_clip_rect_min_x = window->ClipRect.Min.x;
+ const float backup_clip_rect_max_x = window->ClipRect.Max.x;
+ if (span_all_columns)
+ {
+ window->ClipRect.Min.x = window->ParentWorkRect.Min.x;
+ window->ClipRect.Max.x = window->ParentWorkRect.Max.x;
+ }
+
+ const bool disabled_item = (flags & ImGuiSelectableFlags_Disabled) != 0;
+ const bool item_add = ItemAdd(bb, id, NULL, disabled_item ? ImGuiItemFlags_Disabled : ImGuiItemFlags_None);
+ if (span_all_columns)
+ {
+ window->ClipRect.Min.x = backup_clip_rect_min_x;
+ window->ClipRect.Max.x = backup_clip_rect_max_x;
+ }
+
+ if (!item_add)
+ return false;
+
+ const bool disabled_global = (g.CurrentItemFlags & ImGuiItemFlags_Disabled) != 0;
+ if (disabled_item && !disabled_global) // Only testing this as an optimization
+ BeginDisabled();
+
+ // FIXME: We can standardize the behavior of those two, we could also keep the fast path of override ClipRect + full push on render only,
+ // which would be advantageous since most selectable are not selected.
+ if (span_all_columns && window->DC.CurrentColumns)
+ PushColumnsBackground();
+ else if (span_all_columns && g.CurrentTable)
+ TablePushBackgroundChannel();
+
+ // We use NoHoldingActiveID on menus so user can click and _hold_ on a menu then drag to browse child entries
+ ImGuiButtonFlags button_flags = 0;
+ if (flags & ImGuiSelectableFlags_NoHoldingActiveID) { button_flags |= ImGuiButtonFlags_NoHoldingActiveId; }
+ if (flags & ImGuiSelectableFlags_SelectOnClick) { button_flags |= ImGuiButtonFlags_PressedOnClick; }
+ if (flags & ImGuiSelectableFlags_SelectOnRelease) { button_flags |= ImGuiButtonFlags_PressedOnRelease; }
+ if (flags & ImGuiSelectableFlags_AllowDoubleClick) { button_flags |= ImGuiButtonFlags_PressedOnClickRelease | ImGuiButtonFlags_PressedOnDoubleClick; }
+ if (flags & ImGuiSelectableFlags_AllowItemOverlap) { button_flags |= ImGuiButtonFlags_AllowItemOverlap; }
+
+ const bool was_selected = selected;
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held, button_flags);
+
+ // Auto-select when moved into
+ // - This will be more fully fleshed in the range-select branch
+ // - This is not exposed as it won't nicely work with some user side handling of shift/control
+ // - We cannot do 'if (g.NavJustMovedToId != id) { selected = false; pressed = was_selected; }' for two reasons
+ // - (1) it would require focus scope to be set, need exposing PushFocusScope() or equivalent (e.g. BeginSelection() calling PushFocusScope())
+ // - (2) usage will fail with clipped items
+ // The multi-select API aim to fix those issues, e.g. may be replaced with a BeginSelection() API.
+ if ((flags & ImGuiSelectableFlags_SelectOnNav) && g.NavJustMovedToId != 0 && g.NavJustMovedToFocusScopeId == window->DC.NavFocusScopeIdCurrent)
+ if (g.NavJustMovedToId == id)
+ selected = pressed = true;
+
+ // Update NavId when clicking or when Hovering (this doesn't happen on most widgets), so navigation can be resumed with gamepad/keyboard
+ if (pressed || (hovered && (flags & ImGuiSelectableFlags_SetNavIdOnHover)))
+ {
+ if (!g.NavDisableMouseHover && g.NavWindow == window && g.NavLayer == window->DC.NavLayerCurrent)
+ {
+ SetNavID(id, window->DC.NavLayerCurrent, window->DC.NavFocusScopeIdCurrent, WindowRectAbsToRel(window, bb)); // (bb == NavRect)
+ g.NavDisableHighlight = true;
+ }
+ }
+ if (pressed)
+ MarkItemEdited(id);
+
+ if (flags & ImGuiSelectableFlags_AllowItemOverlap)
+ SetItemAllowOverlap();
+
+ // In this branch, Selectable() cannot toggle the selection so this will never trigger.
+ if (selected != was_selected) //-V547
+ g.LastItemData.StatusFlags |= ImGuiItemStatusFlags_ToggledSelection;
+
+ // Render
+ if (held && (flags & ImGuiSelectableFlags_DrawHoveredWhenHeld))
+ hovered = true;
+ if (hovered || selected)
+ {
+ const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_HeaderActive : hovered ? ImGuiCol_HeaderHovered : ImGuiCol_Header);
+ RenderFrame(bb.Min, bb.Max, col, false, 0.0f);
+ }
+ RenderNavHighlight(bb, id, ImGuiNavHighlightFlags_TypeThin | ImGuiNavHighlightFlags_NoRounding);
+
+ if (span_all_columns && window->DC.CurrentColumns)
+ PopColumnsBackground();
+ else if (span_all_columns && g.CurrentTable)
+ TablePopBackgroundChannel();
+
+ RenderTextClipped(text_min, text_max, label, NULL, &label_size, style.SelectableTextAlign, &bb);
+
+ // Automatically close popups
+ if (pressed && (window->Flags & ImGuiWindowFlags_Popup) && !(flags & ImGuiSelectableFlags_DontClosePopups) && !(g.LastItemData.InFlags & ImGuiItemFlags_SelectableDontClosePopup))
+ CloseCurrentPopup();
+
+ if (disabled_item && !disabled_global)
+ EndDisabled();
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags);
+ return pressed; //-V1020
+}
+
+bool ImGui::Selectable(const char* label, bool* p_selected, ImGuiSelectableFlags flags, const ImVec2& size_arg)
+{
+ if (Selectable(label, *p_selected, flags, size_arg))
+ {
+ *p_selected = !*p_selected;
+ return true;
+ }
+ return false;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: ListBox
+//-------------------------------------------------------------------------
+// - BeginListBox()
+// - EndListBox()
+// - ListBox()
+//-------------------------------------------------------------------------
+
+// Tip: To have a list filling the entire window width, use size.x = -FLT_MIN and pass an non-visible label e.g. "##empty"
+// Tip: If your vertical size is calculated from an item count (e.g. 10 * item_height) consider adding a fractional part to facilitate seeing scrolling boundaries (e.g. 10.25 * item_height).
+bool ImGui::BeginListBox(const char* label, const ImVec2& size_arg)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = GetID(label);
+ const ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+ // Size default to hold ~7.25 items.
+ // Fractional number of items helps seeing that we can scroll down/up without looking at scrollbar.
+ ImVec2 size = ImFloor(CalcItemSize(size_arg, CalcItemWidth(), GetTextLineHeightWithSpacing() * 7.25f + style.FramePadding.y * 2.0f));
+ ImVec2 frame_size = ImVec2(size.x, ImMax(size.y, label_size.y));
+ ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
+ ImRect bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0.0f));
+ g.NextItemData.ClearFlags();
+
+ if (!IsRectVisible(bb.Min, bb.Max))
+ {
+ ItemSize(bb.GetSize(), style.FramePadding.y);
+ ItemAdd(bb, 0, &frame_bb);
+ return false;
+ }
+
+ // FIXME-OPT: We could omit the BeginGroup() if label_size.x but would need to omit the EndGroup() as well.
+ BeginGroup();
+ if (label_size.x > 0.0f)
+ {
+ ImVec2 label_pos = ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, frame_bb.Min.y + style.FramePadding.y);
+ RenderText(label_pos, label);
+ window->DC.CursorMaxPos = ImMax(window->DC.CursorMaxPos, label_pos + label_size);
+ }
+
+ BeginChildFrame(id, frame_bb.GetSize());
+ return true;
+}
+
+#ifndef IMGUI_DISABLE_OBSOLETE_FUNCTIONS
+// OBSOLETED in 1.81 (from February 2021)
+bool ImGui::ListBoxHeader(const char* label, int items_count, int height_in_items)
+{
+ // If height_in_items == -1, default height is maximum 7.
+ ImGuiContext& g = *GImGui;
+ float height_in_items_f = (height_in_items < 0 ? ImMin(items_count, 7) : height_in_items) + 0.25f;
+ ImVec2 size;
+ size.x = 0.0f;
+ size.y = GetTextLineHeightWithSpacing() * height_in_items_f + g.Style.FramePadding.y * 2.0f;
+ return BeginListBox(label, size);
+}
+#endif
+
+void ImGui::EndListBox()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ IM_ASSERT((window->Flags & ImGuiWindowFlags_ChildWindow) && "Mismatched BeginListBox/EndListBox calls. Did you test the return value of BeginListBox?");
+ IM_UNUSED(window);
+
+ EndChildFrame();
+ EndGroup(); // This is only required to be able to do IsItemXXX query on the whole ListBox including label
+}
+
+bool ImGui::ListBox(const char* label, int* current_item, const char* const items[], int items_count, int height_items)
+{
+ const bool value_changed = ListBox(label, current_item, Items_ArrayGetter, (void*)items, items_count, height_items);
+ return value_changed;
+}
+
+// This is merely a helper around BeginListBox(), EndListBox().
+// Considering using those directly to submit custom data or store selection differently.
+bool ImGui::ListBox(const char* label, int* current_item, bool (*items_getter)(void*, int, const char**), void* data, int items_count, int height_in_items)
+{
+ ImGuiContext& g = *GImGui;
+
+ // Calculate size from "height_in_items"
+ if (height_in_items < 0)
+ height_in_items = ImMin(items_count, 7);
+ float height_in_items_f = height_in_items + 0.25f;
+ ImVec2 size(0.0f, ImFloor(GetTextLineHeightWithSpacing() * height_in_items_f + g.Style.FramePadding.y * 2.0f));
+
+ if (!BeginListBox(label, size))
+ return false;
+
+ // Assume all items have even height (= 1 line of text). If you need items of different height,
+ // you can create a custom version of ListBox() in your code without using the clipper.
+ bool value_changed = false;
+ ImGuiListClipper clipper;
+ clipper.Begin(items_count, GetTextLineHeightWithSpacing()); // We know exactly our line height here so we pass it as a minor optimization, but generally you don't need to.
+ while (clipper.Step())
+ for (int i = clipper.DisplayStart; i < clipper.DisplayEnd; i++)
+ {
+ const char* item_text;
+ if (!items_getter(data, i, &item_text))
+ item_text = "*Unknown item*";
+
+ PushID(i);
+ const bool item_selected = (i == *current_item);
+ if (Selectable(item_text, item_selected))
+ {
+ *current_item = i;
+ value_changed = true;
+ }
+ if (item_selected)
+ SetItemDefaultFocus();
+ PopID();
+ }
+ EndListBox();
+
+ if (value_changed)
+ MarkItemEdited(g.LastItemData.ID);
+
+ return value_changed;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: PlotLines, PlotHistogram
+//-------------------------------------------------------------------------
+// - PlotEx() [Internal]
+// - PlotLines()
+// - PlotHistogram()
+//-------------------------------------------------------------------------
+// Plot/Graph widgets are not very good.
+// Consider writing your own, or using a third-party one, see:
+// - ImPlot https://github.com/epezent/implot
+// - others https://github.com/ocornut/imgui/wiki/Useful-Extensions
+//-------------------------------------------------------------------------
+
+int ImGui::PlotEx(ImGuiPlotType plot_type, const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 frame_size)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return -1;
+
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = window->GetID(label);
+
+ const ImVec2 label_size = CalcTextSize(label, NULL, true);
+ if (frame_size.x == 0.0f)
+ frame_size.x = CalcItemWidth();
+ if (frame_size.y == 0.0f)
+ frame_size.y = label_size.y + (style.FramePadding.y * 2);
+
+ const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + frame_size);
+ const ImRect inner_bb(frame_bb.Min + style.FramePadding, frame_bb.Max - style.FramePadding);
+ const ImRect total_bb(frame_bb.Min, frame_bb.Max + ImVec2(label_size.x > 0.0f ? style.ItemInnerSpacing.x + label_size.x : 0.0f, 0));
+ ItemSize(total_bb, style.FramePadding.y);
+ if (!ItemAdd(total_bb, 0, &frame_bb))
+ return -1;
+ const bool hovered = ItemHoverable(frame_bb, id);
+
+ // Determine scale from values if not specified
+ if (scale_min == FLT_MAX || scale_max == FLT_MAX)
+ {
+ float v_min = FLT_MAX;
+ float v_max = -FLT_MAX;
+ for (int i = 0; i < values_count; i++)
+ {
+ const float v = values_getter(data, i);
+ if (v != v) // Ignore NaN values
+ continue;
+ v_min = ImMin(v_min, v);
+ v_max = ImMax(v_max, v);
+ }
+ if (scale_min == FLT_MAX)
+ scale_min = v_min;
+ if (scale_max == FLT_MAX)
+ scale_max = v_max;
+ }
+
+ RenderFrame(frame_bb.Min, frame_bb.Max, GetColorU32(ImGuiCol_FrameBg), true, style.FrameRounding);
+
+ const int values_count_min = (plot_type == ImGuiPlotType_Lines) ? 2 : 1;
+ int idx_hovered = -1;
+ if (values_count >= values_count_min)
+ {
+ int res_w = ImMin((int)frame_size.x, values_count) + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
+ int item_count = values_count + ((plot_type == ImGuiPlotType_Lines) ? -1 : 0);
+
+ // Tooltip on hover
+ if (hovered && inner_bb.Contains(g.IO.MousePos))
+ {
+ const float t = ImClamp((g.IO.MousePos.x - inner_bb.Min.x) / (inner_bb.Max.x - inner_bb.Min.x), 0.0f, 0.9999f);
+ const int v_idx = (int)(t * item_count);
+ IM_ASSERT(v_idx >= 0 && v_idx < values_count);
+
+ const float v0 = values_getter(data, (v_idx + values_offset) % values_count);
+ const float v1 = values_getter(data, (v_idx + 1 + values_offset) % values_count);
+ if (plot_type == ImGuiPlotType_Lines)
+ SetTooltip("%d: %8.4g\n%d: %8.4g", v_idx, v0, v_idx + 1, v1);
+ else if (plot_type == ImGuiPlotType_Histogram)
+ SetTooltip("%d: %8.4g", v_idx, v0);
+ idx_hovered = v_idx;
+ }
+
+ const float t_step = 1.0f / (float)res_w;
+ const float inv_scale = (scale_min == scale_max) ? 0.0f : (1.0f / (scale_max - scale_min));
+
+ float v0 = values_getter(data, (0 + values_offset) % values_count);
+ float t0 = 0.0f;
+ ImVec2 tp0 = ImVec2( t0, 1.0f - ImSaturate((v0 - scale_min) * inv_scale) ); // Point in the normalized space of our target rectangle
+ float histogram_zero_line_t = (scale_min * scale_max < 0.0f) ? (1 + scale_min * inv_scale) : (scale_min < 0.0f ? 0.0f : 1.0f); // Where does the zero line stands
+
+ const ImU32 col_base = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLines : ImGuiCol_PlotHistogram);
+ const ImU32 col_hovered = GetColorU32((plot_type == ImGuiPlotType_Lines) ? ImGuiCol_PlotLinesHovered : ImGuiCol_PlotHistogramHovered);
+
+ for (int n = 0; n < res_w; n++)
+ {
+ const float t1 = t0 + t_step;
+ const int v1_idx = (int)(t0 * item_count + 0.5f);
+ IM_ASSERT(v1_idx >= 0 && v1_idx < values_count);
+ const float v1 = values_getter(data, (v1_idx + values_offset + 1) % values_count);
+ const ImVec2 tp1 = ImVec2( t1, 1.0f - ImSaturate((v1 - scale_min) * inv_scale) );
+
+ // NB: Draw calls are merged together by the DrawList system. Still, we should render our batch are lower level to save a bit of CPU.
+ ImVec2 pos0 = ImLerp(inner_bb.Min, inner_bb.Max, tp0);
+ ImVec2 pos1 = ImLerp(inner_bb.Min, inner_bb.Max, (plot_type == ImGuiPlotType_Lines) ? tp1 : ImVec2(tp1.x, histogram_zero_line_t));
+ if (plot_type == ImGuiPlotType_Lines)
+ {
+ window->DrawList->AddLine(pos0, pos1, idx_hovered == v1_idx ? col_hovered : col_base);
+ }
+ else if (plot_type == ImGuiPlotType_Histogram)
+ {
+ if (pos1.x >= pos0.x + 2.0f)
+ pos1.x -= 1.0f;
+ window->DrawList->AddRectFilled(pos0, pos1, idx_hovered == v1_idx ? col_hovered : col_base);
+ }
+
+ t0 = t1;
+ tp0 = tp1;
+ }
+ }
+
+ // Text overlay
+ if (overlay_text)
+ RenderTextClipped(ImVec2(frame_bb.Min.x, frame_bb.Min.y + style.FramePadding.y), frame_bb.Max, overlay_text, NULL, NULL, ImVec2(0.5f, 0.0f));
+
+ if (label_size.x > 0.0f)
+ RenderText(ImVec2(frame_bb.Max.x + style.ItemInnerSpacing.x, inner_bb.Min.y), label);
+
+ // Return hovered index or -1 if none are hovered.
+ // This is currently not exposed in the public API because we need a larger redesign of the whole thing, but in the short-term we are making it available in PlotEx().
+ return idx_hovered;
+}
+
+struct ImGuiPlotArrayGetterData
+{
+ const float* Values;
+ int Stride;
+
+ ImGuiPlotArrayGetterData(const float* values, int stride) { Values = values; Stride = stride; }
+};
+
+static float Plot_ArrayGetter(void* data, int idx)
+{
+ ImGuiPlotArrayGetterData* plot_data = (ImGuiPlotArrayGetterData*)data;
+ const float v = *(const float*)(const void*)((const unsigned char*)plot_data->Values + (size_t)idx * plot_data->Stride);
+ return v;
+}
+
+void ImGui::PlotLines(const char* label, const float* values, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride)
+{
+ ImGuiPlotArrayGetterData data(values, stride);
+ PlotEx(ImGuiPlotType_Lines, label, &Plot_ArrayGetter, (void*)&data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
+}
+
+void ImGui::PlotLines(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size)
+{
+ PlotEx(ImGuiPlotType_Lines, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
+}
+
+void ImGui::PlotHistogram(const char* label, const float* values, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size, int stride)
+{
+ ImGuiPlotArrayGetterData data(values, stride);
+ PlotEx(ImGuiPlotType_Histogram, label, &Plot_ArrayGetter, (void*)&data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
+}
+
+void ImGui::PlotHistogram(const char* label, float (*values_getter)(void* data, int idx), void* data, int values_count, int values_offset, const char* overlay_text, float scale_min, float scale_max, ImVec2 graph_size)
+{
+ PlotEx(ImGuiPlotType_Histogram, label, values_getter, data, values_count, values_offset, overlay_text, scale_min, scale_max, graph_size);
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: Value helpers
+// Those is not very useful, legacy API.
+//-------------------------------------------------------------------------
+// - Value()
+//-------------------------------------------------------------------------
+
+void ImGui::Value(const char* prefix, bool b)
+{
+ Text("%s: %s", prefix, (b ? "true" : "false"));
+}
+
+void ImGui::Value(const char* prefix, int v)
+{
+ Text("%s: %d", prefix, v);
+}
+
+void ImGui::Value(const char* prefix, unsigned int v)
+{
+ Text("%s: %d", prefix, v);
+}
+
+void ImGui::Value(const char* prefix, float v, const char* float_format)
+{
+ if (float_format)
+ {
+ char fmt[64];
+ ImFormatString(fmt, IM_ARRAYSIZE(fmt), "%%s: %s", float_format);
+ Text(fmt, prefix, v);
+ }
+ else
+ {
+ Text("%s: %.3f", prefix, v);
+ }
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] MenuItem, BeginMenu, EndMenu, etc.
+//-------------------------------------------------------------------------
+// - ImGuiMenuColumns [Internal]
+// - BeginMenuBar()
+// - EndMenuBar()
+// - BeginMainMenuBar()
+// - EndMainMenuBar()
+// - BeginMenu()
+// - EndMenu()
+// - MenuItemEx() [Internal]
+// - MenuItem()
+//-------------------------------------------------------------------------
+
+// Helpers for internal use
+void ImGuiMenuColumns::Update(float spacing, bool window_reappearing)
+{
+ if (window_reappearing)
+ memset(Widths, 0, sizeof(Widths));
+ Spacing = (ImU16)spacing;
+ CalcNextTotalWidth(true);
+ memset(Widths, 0, sizeof(Widths));
+ TotalWidth = NextTotalWidth;
+ NextTotalWidth = 0;
+}
+
+void ImGuiMenuColumns::CalcNextTotalWidth(bool update_offsets)
+{
+ ImU16 offset = 0;
+ bool want_spacing = false;
+ for (int i = 0; i < IM_ARRAYSIZE(Widths); i++)
+ {
+ ImU16 width = Widths[i];
+ if (want_spacing && width > 0)
+ offset += Spacing;
+ want_spacing |= (width > 0);
+ if (update_offsets)
+ {
+ if (i == 1) { OffsetLabel = offset; }
+ if (i == 2) { OffsetShortcut = offset; }
+ if (i == 3) { OffsetMark = offset; }
+ }
+ offset += width;
+ }
+ NextTotalWidth = offset;
+}
+
+float ImGuiMenuColumns::DeclColumns(float w_icon, float w_label, float w_shortcut, float w_mark)
+{
+ Widths[0] = ImMax(Widths[0], (ImU16)w_icon);
+ Widths[1] = ImMax(Widths[1], (ImU16)w_label);
+ Widths[2] = ImMax(Widths[2], (ImU16)w_shortcut);
+ Widths[3] = ImMax(Widths[3], (ImU16)w_mark);
+ CalcNextTotalWidth(false);
+ return (float)ImMax(TotalWidth, NextTotalWidth);
+}
+
+// FIXME: Provided a rectangle perhaps e.g. a BeginMenuBarEx() could be used anywhere..
+// Currently the main responsibility of this function being to setup clip-rect + horizontal layout + menu navigation layer.
+// Ideally we also want this to be responsible for claiming space out of the main window scrolling rectangle, in which case ImGuiWindowFlags_MenuBar will become unnecessary.
+// Then later the same system could be used for multiple menu-bars, scrollbars, side-bars.
+bool ImGui::BeginMenuBar()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+ if (!(window->Flags & ImGuiWindowFlags_MenuBar))
+ return false;
+
+ IM_ASSERT(!window->DC.MenuBarAppending);
+ BeginGroup(); // Backup position on layer 0 // FIXME: Misleading to use a group for that backup/restore
+ PushID("##menubar");
+
+ // We don't clip with current window clipping rectangle as it is already set to the area below. However we clip with window full rect.
+ // We remove 1 worth of rounding to Max.x to that text in long menus and small windows don't tend to display over the lower-right rounded area, which looks particularly glitchy.
+ ImRect bar_rect = window->MenuBarRect();
+ ImRect clip_rect(IM_ROUND(bar_rect.Min.x + window->WindowBorderSize), IM_ROUND(bar_rect.Min.y + window->WindowBorderSize), IM_ROUND(ImMax(bar_rect.Min.x, bar_rect.Max.x - ImMax(window->WindowRounding, window->WindowBorderSize))), IM_ROUND(bar_rect.Max.y));
+ clip_rect.ClipWith(window->OuterRectClipped);
+ PushClipRect(clip_rect.Min, clip_rect.Max, false);
+
+ // We overwrite CursorMaxPos because BeginGroup sets it to CursorPos (essentially the .EmitItem hack in EndMenuBar() would need something analogous here, maybe a BeginGroupEx() with flags).
+ window->DC.CursorPos = window->DC.CursorMaxPos = ImVec2(bar_rect.Min.x + window->DC.MenuBarOffset.x, bar_rect.Min.y + window->DC.MenuBarOffset.y);
+ window->DC.LayoutType = ImGuiLayoutType_Horizontal;
+ window->DC.IsSameLine = false;
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Menu;
+ window->DC.MenuBarAppending = true;
+ AlignTextToFramePadding();
+ return true;
+}
+
+void ImGui::EndMenuBar()
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return;
+ ImGuiContext& g = *GImGui;
+
+ // Nav: When a move request within one of our child menu failed, capture the request to navigate among our siblings.
+ if (NavMoveRequestButNoResultYet() && (g.NavMoveDir == ImGuiDir_Left || g.NavMoveDir == ImGuiDir_Right) && (g.NavWindow->Flags & ImGuiWindowFlags_ChildMenu))
+ {
+ // Try to find out if the request is for one of our child menu
+ ImGuiWindow* nav_earliest_child = g.NavWindow;
+ while (nav_earliest_child->ParentWindow && (nav_earliest_child->ParentWindow->Flags & ImGuiWindowFlags_ChildMenu))
+ nav_earliest_child = nav_earliest_child->ParentWindow;
+ if (nav_earliest_child->ParentWindow == window && nav_earliest_child->DC.ParentLayoutType == ImGuiLayoutType_Horizontal && (g.NavMoveFlags & ImGuiNavMoveFlags_Forwarded) == 0)
+ {
+ // To do so we claim focus back, restore NavId and then process the movement request for yet another frame.
+ // This involve a one-frame delay which isn't very problematic in this situation. We could remove it by scoring in advance for multiple window (probably not worth bothering)
+ const ImGuiNavLayer layer = ImGuiNavLayer_Menu;
+ IM_ASSERT(window->DC.NavLayersActiveMaskNext & (1 << layer)); // Sanity check
+ FocusWindow(window);
+ SetNavID(window->NavLastIds[layer], layer, 0, window->NavRectRel[layer]);
+ g.NavDisableHighlight = true; // Hide highlight for the current frame so we don't see the intermediary selection.
+ g.NavDisableMouseHover = g.NavMousePosDirty = true;
+ NavMoveRequestForward(g.NavMoveDir, g.NavMoveClipDir, g.NavMoveFlags, g.NavMoveScrollFlags); // Repeat
+ }
+ }
+
+ IM_MSVC_WARNING_SUPPRESS(6011); // Static Analysis false positive "warning C6011: Dereferencing NULL pointer 'window'"
+ IM_ASSERT(window->Flags & ImGuiWindowFlags_MenuBar);
+ IM_ASSERT(window->DC.MenuBarAppending);
+ PopClipRect();
+ PopID();
+ window->DC.MenuBarOffset.x = window->DC.CursorPos.x - window->Pos.x; // Save horizontal position so next append can reuse it. This is kinda equivalent to a per-layer CursorPos.
+ g.GroupStack.back().EmitItem = false;
+ EndGroup(); // Restore position on layer 0
+ window->DC.LayoutType = ImGuiLayoutType_Vertical;
+ window->DC.IsSameLine = false;
+ window->DC.NavLayerCurrent = ImGuiNavLayer_Main;
+ window->DC.MenuBarAppending = false;
+}
+
+// Important: calling order matters!
+// FIXME: Somehow overlapping with docking tech.
+// FIXME: The "rect-cut" aspect of this could be formalized into a lower-level helper (rect-cut: https://halt.software/dead-simple-layouts)
+bool ImGui::BeginViewportSideBar(const char* name, ImGuiViewport* viewport_p, ImGuiDir dir, float axis_size, ImGuiWindowFlags window_flags)
+{
+ IM_ASSERT(dir != ImGuiDir_None);
+
+ ImGuiWindow* bar_window = FindWindowByName(name);
+ if (bar_window == NULL || bar_window->BeginCount == 0)
+ {
+ // Calculate and set window size/position
+ ImGuiViewportP* viewport = (ImGuiViewportP*)(void*)(viewport_p ? viewport_p : GetMainViewport());
+ ImRect avail_rect = viewport->GetBuildWorkRect();
+ ImGuiAxis axis = (dir == ImGuiDir_Up || dir == ImGuiDir_Down) ? ImGuiAxis_Y : ImGuiAxis_X;
+ ImVec2 pos = avail_rect.Min;
+ if (dir == ImGuiDir_Right || dir == ImGuiDir_Down)
+ pos[axis] = avail_rect.Max[axis] - axis_size;
+ ImVec2 size = avail_rect.GetSize();
+ size[axis] = axis_size;
+ SetNextWindowPos(pos);
+ SetNextWindowSize(size);
+
+ // Report our size into work area (for next frame) using actual window size
+ if (dir == ImGuiDir_Up || dir == ImGuiDir_Left)
+ viewport->BuildWorkOffsetMin[axis] += axis_size;
+ else if (dir == ImGuiDir_Down || dir == ImGuiDir_Right)
+ viewport->BuildWorkOffsetMax[axis] -= axis_size;
+ }
+
+ window_flags |= ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove;
+ PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
+ PushStyleVar(ImGuiStyleVar_WindowMinSize, ImVec2(0, 0)); // Lift normal size constraint
+ bool is_open = Begin(name, NULL, window_flags);
+ PopStyleVar(2);
+
+ return is_open;
+}
+
+bool ImGui::BeginMainMenuBar()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiViewportP* viewport = (ImGuiViewportP*)(void*)GetMainViewport();
+
+ // For the main menu bar, which cannot be moved, we honor g.Style.DisplaySafeAreaPadding to ensure text can be visible on a TV set.
+ // FIXME: This could be generalized as an opt-in way to clamp window->DC.CursorStartPos to avoid SafeArea?
+ // FIXME: Consider removing support for safe area down the line... it's messy. Nowadays consoles have support for TV calibration in OS settings.
+ g.NextWindowData.MenuBarOffsetMinVal = ImVec2(g.Style.DisplaySafeAreaPadding.x, ImMax(g.Style.DisplaySafeAreaPadding.y - g.Style.FramePadding.y, 0.0f));
+ ImGuiWindowFlags window_flags = ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_MenuBar;
+ float height = GetFrameHeight();
+ bool is_open = BeginViewportSideBar("##MainMenuBar", viewport, ImGuiDir_Up, height, window_flags);
+ g.NextWindowData.MenuBarOffsetMinVal = ImVec2(0.0f, 0.0f);
+
+ if (is_open)
+ BeginMenuBar();
+ else
+ End();
+ return is_open;
+}
+
+void ImGui::EndMainMenuBar()
+{
+ EndMenuBar();
+
+ // When the user has left the menu layer (typically: closed menus through activation of an item), we restore focus to the previous window
+ // FIXME: With this strategy we won't be able to restore a NULL focus.
+ ImGuiContext& g = *GImGui;
+ if (g.CurrentWindow == g.NavWindow && g.NavLayer == ImGuiNavLayer_Main && !g.NavAnyRequest)
+ FocusTopMostWindowUnderOne(g.NavWindow, NULL);
+
+ End();
+}
+
+static bool IsRootOfOpenMenuSet()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if ((g.OpenPopupStack.Size <= g.BeginPopupStack.Size) || (window->Flags & ImGuiWindowFlags_ChildMenu))
+ return false;
+
+ // Initially we used 'upper_popup->OpenParentId == window->IDStack.back()' to differentiate multiple menu sets from each others
+ // (e.g. inside menu bar vs loose menu items) based on parent ID.
+ // This would however prevent the use of e.g. PuhsID() user code submitting menus.
+ // Previously this worked between popup and a first child menu because the first child menu always had the _ChildWindow flag,
+ // making hovering on parent popup possible while first child menu was focused - but this was generally a bug with other side effects.
+ // Instead we don't treat Popup specifically (in order to consistently support menu features in them), maybe the first child menu of a Popup
+ // doesn't have the _ChildWindow flag, and we rely on this IsRootOfOpenMenuSet() check to allow hovering between root window/popup and first child menu.
+ // In the end, lack of ID check made it so we could no longer differentiate between separate menu sets. To compensate for that, we at least check parent window nav layer.
+ // This fixes the most common case of menu opening on hover when moving between window content and menu bar. Multiple different menu sets in same nav layer would still
+ // open on hover, but that should be a lesser problem, because if such menus are close in proximity in window content then it won't feel weird and if they are far apart
+ // it likely won't be a problem anyone runs into.
+ const ImGuiPopupData* upper_popup = &g.OpenPopupStack[g.BeginPopupStack.Size];
+ return (window->DC.NavLayerCurrent == upper_popup->ParentNavLayer && upper_popup->Window && (upper_popup->Window->Flags & ImGuiWindowFlags_ChildMenu));
+}
+
+bool ImGui::BeginMenuEx(const char* label, const char* icon, bool enabled)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = window->GetID(label);
+ bool menu_is_open = IsPopupOpen(id, ImGuiPopupFlags_None);
+
+ // Sub-menus are ChildWindow so that mouse can be hovering across them (otherwise top-most popup menu would steal focus and not allow hovering on parent menu)
+ // The first menu in a hierarchy isn't so hovering doesn't get across (otherwise e.g. resizing borders with ImGuiButtonFlags_FlattenChildren would react), but top-most BeginMenu() will bypass that limitation.
+ ImGuiWindowFlags flags = ImGuiWindowFlags_ChildMenu | ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoSavedSettings | ImGuiWindowFlags_NoNavFocus;
+ if (window->Flags & ImGuiWindowFlags_ChildMenu)
+ flags |= ImGuiWindowFlags_ChildWindow;
+
+ // If a menu with same the ID was already submitted, we will append to it, matching the behavior of Begin().
+ // We are relying on a O(N) search - so O(N log N) over the frame - which seems like the most efficient for the expected small amount of BeginMenu() calls per frame.
+ // If somehow this is ever becoming a problem we can switch to use e.g. ImGuiStorage mapping key to last frame used.
+ if (g.MenusIdSubmittedThisFrame.contains(id))
+ {
+ if (menu_is_open)
+ menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
+ else
+ g.NextWindowData.ClearFlags(); // we behave like Begin() and need to consume those values
+ return menu_is_open;
+ }
+
+ // Tag menu as used. Next time BeginMenu() with same ID is called it will append to existing menu
+ g.MenusIdSubmittedThisFrame.push_back(id);
+
+ ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+ // Odd hack to allow hovering across menus of a same menu-set (otherwise we wouldn't be able to hover parent without always being a Child window)
+ const bool menuset_is_open = IsRootOfOpenMenuSet();
+ ImGuiWindow* backed_nav_window = g.NavWindow;
+ if (menuset_is_open)
+ g.NavWindow = window;
+
+ // The reference position stored in popup_pos will be used by Begin() to find a suitable position for the child menu,
+ // However the final position is going to be different! It is chosen by FindBestWindowPosForPopup().
+ // e.g. Menus tend to overlap each other horizontally to amplify relative Z-ordering.
+ ImVec2 popup_pos, pos = window->DC.CursorPos;
+ PushID(label);
+ if (!enabled)
+ BeginDisabled();
+ const ImGuiMenuColumns* offsets = &window->DC.MenuColumns;
+ bool pressed;
+ const ImGuiSelectableFlags selectable_flags = ImGuiSelectableFlags_NoHoldingActiveID | ImGuiSelectableFlags_SelectOnClick | ImGuiSelectableFlags_DontClosePopups;
+ if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
+ {
+ // Menu inside an horizontal menu bar
+ // Selectable extend their highlight by half ItemSpacing in each direction.
+ // For ChildMenu, the popup position will be overwritten by the call to FindBestWindowPosForPopup() in Begin()
+ popup_pos = ImVec2(pos.x - 1.0f - IM_FLOOR(style.ItemSpacing.x * 0.5f), pos.y - style.FramePadding.y + window->MenuBarHeight());
+ window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f);
+ PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y));
+ float w = label_size.x;
+ ImVec2 text_pos(window->DC.CursorPos.x + offsets->OffsetLabel, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset);
+ pressed = Selectable("", menu_is_open, selectable_flags, ImVec2(w, 0.0f));
+ RenderText(text_pos, label);
+ PopStyleVar();
+ window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
+ }
+ else
+ {
+ // Menu inside a regular/vertical menu
+ // (In a typical menu window where all items are BeginMenu() or MenuItem() calls, extra_w will always be 0.0f.
+ // Only when they are other items sticking out we're going to add spacing, yet only register minimum width into the layout system.
+ popup_pos = ImVec2(pos.x, pos.y - style.WindowPadding.y);
+ float icon_w = (icon && icon[0]) ? CalcTextSize(icon, NULL).x : 0.0f;
+ float checkmark_w = IM_FLOOR(g.FontSize * 1.20f);
+ float min_w = window->DC.MenuColumns.DeclColumns(icon_w, label_size.x, 0.0f, checkmark_w); // Feedback to next frame
+ float extra_w = ImMax(0.0f, GetContentRegionAvail().x - min_w);
+ ImVec2 text_pos(window->DC.CursorPos.x + offsets->OffsetLabel, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset);
+ pressed = Selectable("", menu_is_open, selectable_flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f));
+ RenderText(text_pos, label);
+ if (icon_w > 0.0f)
+ RenderText(pos + ImVec2(offsets->OffsetIcon, 0.0f), icon);
+ RenderArrow(window->DrawList, pos + ImVec2(offsets->OffsetMark + extra_w + g.FontSize * 0.30f, 0.0f), GetColorU32(ImGuiCol_Text), ImGuiDir_Right);
+ }
+ if (!enabled)
+ EndDisabled();
+
+ const bool hovered = (g.HoveredId == id) && enabled && !g.NavDisableMouseHover;
+ if (menuset_is_open)
+ g.NavWindow = backed_nav_window;
+
+ bool want_open = false;
+ bool want_close = false;
+ if (window->DC.LayoutType == ImGuiLayoutType_Vertical) // (window->Flags & (ImGuiWindowFlags_Popup|ImGuiWindowFlags_ChildMenu))
+ {
+ // Close menu when not hovering it anymore unless we are moving roughly in the direction of the menu
+ // Implement http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown to avoid using timers, so menus feels more reactive.
+ bool moving_toward_child_menu = false;
+ ImGuiWindow* child_menu_window = (g.BeginPopupStack.Size < g.OpenPopupStack.Size && g.OpenPopupStack[g.BeginPopupStack.Size].SourceWindow == window) ? g.OpenPopupStack[g.BeginPopupStack.Size].Window : NULL;
+ if (g.HoveredWindow == window && child_menu_window != NULL && !(window->Flags & ImGuiWindowFlags_MenuBar))
+ {
+ float ref_unit = g.FontSize; // FIXME-DPI
+ ImRect next_window_rect = child_menu_window->Rect();
+ ImVec2 ta = (g.IO.MousePos - g.IO.MouseDelta);
+ ImVec2 tb = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetTL() : next_window_rect.GetTR();
+ ImVec2 tc = (window->Pos.x < child_menu_window->Pos.x) ? next_window_rect.GetBL() : next_window_rect.GetBR();
+ float extra = ImClamp(ImFabs(ta.x - tb.x) * 0.30f, ref_unit * 0.5f, ref_unit * 2.5f); // add a bit of extra slack.
+ ta.x += (window->Pos.x < child_menu_window->Pos.x) ? -0.5f : +0.5f; // to avoid numerical issues (FIXME: ??)
+ tb.y = ta.y + ImMax((tb.y - extra) - ta.y, -ref_unit * 8.0f); // triangle has maximum height to limit the slope and the bias toward large sub-menus
+ tc.y = ta.y + ImMin((tc.y + extra) - ta.y, +ref_unit * 8.0f);
+ moving_toward_child_menu = ImTriangleContainsPoint(ta, tb, tc, g.IO.MousePos);
+ //GetForegroundDrawList()->AddTriangleFilled(ta, tb, tc, moving_toward_other_child_menu ? IM_COL32(0,128,0,128) : IM_COL32(128,0,0,128)); // [DEBUG]
+ }
+
+ // The 'HovereWindow == window' check creates an inconsistency (e.g. moving away from menu slowly tends to hit same window, whereas moving away fast does not)
+ // But we also need to not close the top-menu menu when moving over void. Perhaps we should extend the triangle check to a larger polygon.
+ // (Remember to test this on BeginPopup("A")->BeginMenu("B") sequence which behaves slightly differently as B isn't a Child of A and hovering isn't shared.)
+ if (menu_is_open && !hovered && g.HoveredWindow == window && !moving_toward_child_menu)
+ want_close = true;
+
+ // Open
+ if (!menu_is_open && pressed) // Click/activate to open
+ want_open = true;
+ else if (!menu_is_open && hovered && !moving_toward_child_menu) // Hover to open
+ want_open = true;
+ if (g.NavId == id && g.NavMoveDir == ImGuiDir_Right) // Nav-Right to open
+ {
+ want_open = true;
+ NavMoveRequestCancel();
+ }
+ }
+ else
+ {
+ // Menu bar
+ if (menu_is_open && pressed && menuset_is_open) // Click an open menu again to close it
+ {
+ want_close = true;
+ want_open = menu_is_open = false;
+ }
+ else if (pressed || (hovered && menuset_is_open && !menu_is_open)) // First click to open, then hover to open others
+ {
+ want_open = true;
+ }
+ else if (g.NavId == id && g.NavMoveDir == ImGuiDir_Down) // Nav-Down to open
+ {
+ want_open = true;
+ NavMoveRequestCancel();
+ }
+ }
+
+ if (!enabled) // explicitly close if an open menu becomes disabled, facilitate users code a lot in pattern such as 'if (BeginMenu("options", has_object)) { ..use object.. }'
+ want_close = true;
+ if (want_close && IsPopupOpen(id, ImGuiPopupFlags_None))
+ ClosePopupToLevel(g.BeginPopupStack.Size, true);
+
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags | ImGuiItemStatusFlags_Openable | (menu_is_open ? ImGuiItemStatusFlags_Opened : 0));
+ PopID();
+
+ if (!menu_is_open && want_open && g.OpenPopupStack.Size > g.BeginPopupStack.Size)
+ {
+ // Don't recycle same menu level in the same frame, first close the other menu and yield for a frame.
+ OpenPopup(label);
+ return false;
+ }
+
+ menu_is_open |= want_open;
+ if (want_open)
+ OpenPopup(label);
+
+ if (menu_is_open)
+ {
+ SetNextWindowPos(popup_pos, ImGuiCond_Always); // Note: this is super misleading! The value will serve as reference for FindBestWindowPosForPopup(), not actual pos.
+ PushStyleVar(ImGuiStyleVar_ChildRounding, style.PopupRounding); // First level will use _PopupRounding, subsequent will use _ChildRounding
+ menu_is_open = BeginPopupEx(id, flags); // menu_is_open can be 'false' when the popup is completely clipped (e.g. zero size display)
+ PopStyleVar();
+ }
+ else
+ {
+ g.NextWindowData.ClearFlags(); // We behave like Begin() and need to consume those values
+ }
+
+ return menu_is_open;
+}
+
+bool ImGui::BeginMenu(const char* label, bool enabled)
+{
+ return BeginMenuEx(label, NULL, enabled);
+}
+
+void ImGui::EndMenu()
+{
+ // Nav: When a left move request _within our child menu_ failed, close ourselves (the _parent_ menu).
+ // A menu doesn't close itself because EndMenuBar() wants the catch the last Left<>Right inputs.
+ // However, it means that with the current code, a BeginMenu() from outside another menu or a menu-bar won't be closable with the Left direction.
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (g.NavMoveDir == ImGuiDir_Left && NavMoveRequestButNoResultYet() && window->DC.LayoutType == ImGuiLayoutType_Vertical)
+ if (g.NavWindow && (g.NavWindow->RootWindowForNav->Flags & ImGuiWindowFlags_Popup) && g.NavWindow->RootWindowForNav->ParentWindow == window)
+ {
+ ClosePopupToLevel(g.BeginPopupStack.Size, true);
+ NavMoveRequestCancel();
+ }
+
+ EndPopup();
+}
+
+bool ImGui::MenuItemEx(const char* label, const char* icon, const char* shortcut, bool selected, bool enabled)
+{
+ ImGuiWindow* window = GetCurrentWindow();
+ if (window->SkipItems)
+ return false;
+
+ ImGuiContext& g = *GImGui;
+ ImGuiStyle& style = g.Style;
+ ImVec2 pos = window->DC.CursorPos;
+ ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+ const bool menuset_is_open = IsRootOfOpenMenuSet();
+ ImGuiWindow* backed_nav_window = g.NavWindow;
+ if (menuset_is_open)
+ g.NavWindow = window;
+
+ // We've been using the equivalent of ImGuiSelectableFlags_SetNavIdOnHover on all Selectable() since early Nav system days (commit 43ee5d73),
+ // but I am unsure whether this should be kept at all. For now moved it to be an opt-in feature used by menus only.
+ bool pressed;
+ PushID(label);
+ if (!enabled)
+ BeginDisabled();
+
+ const ImGuiSelectableFlags selectable_flags = ImGuiSelectableFlags_SelectOnRelease | ImGuiSelectableFlags_SetNavIdOnHover;
+ const ImGuiMenuColumns* offsets = &window->DC.MenuColumns;
+ if (window->DC.LayoutType == ImGuiLayoutType_Horizontal)
+ {
+ // Mimic the exact layout spacing of BeginMenu() to allow MenuItem() inside a menu bar, which is a little misleading but may be useful
+ // Note that in this situation: we don't render the shortcut, we render a highlight instead of the selected tick mark.
+ float w = label_size.x;
+ window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * 0.5f);
+ ImVec2 text_pos(window->DC.CursorPos.x + offsets->OffsetLabel, window->DC.CursorPos.y + window->DC.CurrLineTextBaseOffset);
+ PushStyleVar(ImGuiStyleVar_ItemSpacing, ImVec2(style.ItemSpacing.x * 2.0f, style.ItemSpacing.y));
+ pressed = Selectable("", selected, selectable_flags, ImVec2(w, 0.0f));
+ PopStyleVar();
+ RenderText(text_pos, label);
+ window->DC.CursorPos.x += IM_FLOOR(style.ItemSpacing.x * (-1.0f + 0.5f)); // -1 spacing to compensate the spacing added when Selectable() did a SameLine(). It would also work to call SameLine() ourselves after the PopStyleVar().
+ }
+ else
+ {
+ // Menu item inside a vertical menu
+ // (In a typical menu window where all items are BeginMenu() or MenuItem() calls, extra_w will always be 0.0f.
+ // Only when they are other items sticking out we're going to add spacing, yet only register minimum width into the layout system.
+ float icon_w = (icon && icon[0]) ? CalcTextSize(icon, NULL).x : 0.0f;
+ float shortcut_w = (shortcut && shortcut[0]) ? CalcTextSize(shortcut, NULL).x : 0.0f;
+ float checkmark_w = IM_FLOOR(g.FontSize * 1.20f);
+ float min_w = window->DC.MenuColumns.DeclColumns(icon_w, label_size.x, shortcut_w, checkmark_w); // Feedback for next frame
+ float stretch_w = ImMax(0.0f, GetContentRegionAvail().x - min_w);
+ pressed = Selectable("", false, selectable_flags | ImGuiSelectableFlags_SpanAvailWidth, ImVec2(min_w, 0.0f));
+ RenderText(pos + ImVec2(offsets->OffsetLabel, 0.0f), label);
+ if (icon_w > 0.0f)
+ RenderText(pos + ImVec2(offsets->OffsetIcon, 0.0f), icon);
+ if (shortcut_w > 0.0f)
+ {
+ PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]);
+ RenderText(pos + ImVec2(offsets->OffsetShortcut + stretch_w, 0.0f), shortcut, NULL, false);
+ PopStyleColor();
+ }
+ if (selected)
+ RenderCheckMark(window->DrawList, pos + ImVec2(offsets->OffsetMark + stretch_w + g.FontSize * 0.40f, g.FontSize * 0.134f * 0.5f), GetColorU32(ImGuiCol_Text), g.FontSize * 0.866f);
+ }
+ IMGUI_TEST_ENGINE_ITEM_INFO(g.LastItemData.ID, label, g.LastItemData.StatusFlags | ImGuiItemStatusFlags_Checkable | (selected ? ImGuiItemStatusFlags_Checked : 0));
+ if (!enabled)
+ EndDisabled();
+ PopID();
+ if (menuset_is_open)
+ g.NavWindow = backed_nav_window;
+
+ return pressed;
+}
+
+bool ImGui::MenuItem(const char* label, const char* shortcut, bool selected, bool enabled)
+{
+ return MenuItemEx(label, NULL, shortcut, selected, enabled);
+}
+
+bool ImGui::MenuItem(const char* label, const char* shortcut, bool* p_selected, bool enabled)
+{
+ if (MenuItemEx(label, NULL, shortcut, p_selected ? *p_selected : false, enabled))
+ {
+ if (p_selected)
+ *p_selected = !*p_selected;
+ return true;
+ }
+ return false;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: BeginTabBar, EndTabBar, etc.
+//-------------------------------------------------------------------------
+// - BeginTabBar()
+// - BeginTabBarEx() [Internal]
+// - EndTabBar()
+// - TabBarLayout() [Internal]
+// - TabBarCalcTabID() [Internal]
+// - TabBarCalcMaxTabWidth() [Internal]
+// - TabBarFindTabById() [Internal]
+// - TabBarRemoveTab() [Internal]
+// - TabBarCloseTab() [Internal]
+// - TabBarScrollClamp() [Internal]
+// - TabBarScrollToTab() [Internal]
+// - TabBarQueueChangeTabOrder() [Internal]
+// - TabBarScrollingButtons() [Internal]
+// - TabBarTabListPopupButton() [Internal]
+//-------------------------------------------------------------------------
+
+struct ImGuiTabBarSection
+{
+ int TabCount; // Number of tabs in this section.
+ float Width; // Sum of width of tabs in this section (after shrinking down)
+ float Spacing; // Horizontal spacing at the end of the section.
+
+ ImGuiTabBarSection() { memset(this, 0, sizeof(*this)); }
+};
+
+namespace ImGui
+{
+ static void TabBarLayout(ImGuiTabBar* tab_bar);
+ static ImU32 TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label);
+ static float TabBarCalcMaxTabWidth();
+ static float TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling);
+ static void TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiID tab_id, ImGuiTabBarSection* sections);
+ static ImGuiTabItem* TabBarScrollingButtons(ImGuiTabBar* tab_bar);
+ static ImGuiTabItem* TabBarTabListPopupButton(ImGuiTabBar* tab_bar);
+}
+
+ImGuiTabBar::ImGuiTabBar()
+{
+ memset(this, 0, sizeof(*this));
+ CurrFrameVisible = PrevFrameVisible = -1;
+ LastTabItemIdx = -1;
+}
+
+static inline int TabItemGetSectionIdx(const ImGuiTabItem* tab)
+{
+ return (tab->Flags & ImGuiTabItemFlags_Leading) ? 0 : (tab->Flags & ImGuiTabItemFlags_Trailing) ? 2 : 1;
+}
+
+static int IMGUI_CDECL TabItemComparerBySection(const void* lhs, const void* rhs)
+{
+ const ImGuiTabItem* a = (const ImGuiTabItem*)lhs;
+ const ImGuiTabItem* b = (const ImGuiTabItem*)rhs;
+ const int a_section = TabItemGetSectionIdx(a);
+ const int b_section = TabItemGetSectionIdx(b);
+ if (a_section != b_section)
+ return a_section - b_section;
+ return (int)(a->IndexDuringLayout - b->IndexDuringLayout);
+}
+
+static int IMGUI_CDECL TabItemComparerByBeginOrder(const void* lhs, const void* rhs)
+{
+ const ImGuiTabItem* a = (const ImGuiTabItem*)lhs;
+ const ImGuiTabItem* b = (const ImGuiTabItem*)rhs;
+ return (int)(a->BeginOrder - b->BeginOrder);
+}
+
+static ImGuiTabBar* GetTabBarFromTabBarRef(const ImGuiPtrOrIndex& ref)
+{
+ ImGuiContext& g = *GImGui;
+ return ref.Ptr ? (ImGuiTabBar*)ref.Ptr : g.TabBars.GetByIndex(ref.Index);
+}
+
+static ImGuiPtrOrIndex GetTabBarRefFromTabBar(ImGuiTabBar* tab_bar)
+{
+ ImGuiContext& g = *GImGui;
+ if (g.TabBars.Contains(tab_bar))
+ return ImGuiPtrOrIndex(g.TabBars.GetIndex(tab_bar));
+ return ImGuiPtrOrIndex(tab_bar);
+}
+
+bool ImGui::BeginTabBar(const char* str_id, ImGuiTabBarFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ ImGuiID id = window->GetID(str_id);
+ ImGuiTabBar* tab_bar = g.TabBars.GetOrAddByKey(id);
+ ImRect tab_bar_bb = ImRect(window->DC.CursorPos.x, window->DC.CursorPos.y, window->WorkRect.Max.x, window->DC.CursorPos.y + g.FontSize + g.Style.FramePadding.y * 2);
+ tab_bar->ID = id;
+ return BeginTabBarEx(tab_bar, tab_bar_bb, flags | ImGuiTabBarFlags_IsFocused);
+}
+
+bool ImGui::BeginTabBarEx(ImGuiTabBar* tab_bar, const ImRect& tab_bar_bb, ImGuiTabBarFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ if ((flags & ImGuiTabBarFlags_DockNode) == 0)
+ PushOverrideID(tab_bar->ID);
+
+ // Add to stack
+ g.CurrentTabBarStack.push_back(GetTabBarRefFromTabBar(tab_bar));
+ g.CurrentTabBar = tab_bar;
+
+ // Append with multiple BeginTabBar()/EndTabBar() pairs.
+ tab_bar->BackupCursorPos = window->DC.CursorPos;
+ if (tab_bar->CurrFrameVisible == g.FrameCount)
+ {
+ window->DC.CursorPos = ImVec2(tab_bar->BarRect.Min.x, tab_bar->BarRect.Max.y + tab_bar->ItemSpacingY);
+ tab_bar->BeginCount++;
+ return true;
+ }
+
+ // Ensure correct ordering when toggling ImGuiTabBarFlags_Reorderable flag, or when a new tab was added while being not reorderable
+ if ((flags & ImGuiTabBarFlags_Reorderable) != (tab_bar->Flags & ImGuiTabBarFlags_Reorderable) || (tab_bar->TabsAddedNew && !(flags & ImGuiTabBarFlags_Reorderable)))
+ ImQsort(tab_bar->Tabs.Data, tab_bar->Tabs.Size, sizeof(ImGuiTabItem), TabItemComparerByBeginOrder);
+ tab_bar->TabsAddedNew = false;
+
+ // Flags
+ if ((flags & ImGuiTabBarFlags_FittingPolicyMask_) == 0)
+ flags |= ImGuiTabBarFlags_FittingPolicyDefault_;
+
+ tab_bar->Flags = flags;
+ tab_bar->BarRect = tab_bar_bb;
+ tab_bar->WantLayout = true; // Layout will be done on the first call to ItemTab()
+ tab_bar->PrevFrameVisible = tab_bar->CurrFrameVisible;
+ tab_bar->CurrFrameVisible = g.FrameCount;
+ tab_bar->PrevTabsContentsHeight = tab_bar->CurrTabsContentsHeight;
+ tab_bar->CurrTabsContentsHeight = 0.0f;
+ tab_bar->ItemSpacingY = g.Style.ItemSpacing.y;
+ tab_bar->FramePadding = g.Style.FramePadding;
+ tab_bar->TabsActiveCount = 0;
+ tab_bar->BeginCount = 1;
+
+ // Set cursor pos in a way which only be used in the off-chance the user erroneously submits item before BeginTabItem(): items will overlap
+ window->DC.CursorPos = ImVec2(tab_bar->BarRect.Min.x, tab_bar->BarRect.Max.y + tab_bar->ItemSpacingY);
+
+ // Draw separator
+ const ImU32 col = GetColorU32((flags & ImGuiTabBarFlags_IsFocused) ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive);
+ const float y = tab_bar->BarRect.Max.y - 1.0f;
+ {
+ const float separator_min_x = tab_bar->BarRect.Min.x - IM_FLOOR(window->WindowPadding.x * 0.5f);
+ const float separator_max_x = tab_bar->BarRect.Max.x + IM_FLOOR(window->WindowPadding.x * 0.5f);
+ window->DrawList->AddLine(ImVec2(separator_min_x, y), ImVec2(separator_max_x, y), col, 1.0f);
+ }
+ return true;
+}
+
+void ImGui::EndTabBar()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return;
+
+ ImGuiTabBar* tab_bar = g.CurrentTabBar;
+ if (tab_bar == NULL)
+ {
+ IM_ASSERT_USER_ERROR(tab_bar != NULL, "Mismatched BeginTabBar()/EndTabBar()!");
+ return;
+ }
+
+ // Fallback in case no TabItem have been submitted
+ if (tab_bar->WantLayout)
+ TabBarLayout(tab_bar);
+
+ // Restore the last visible height if no tab is visible, this reduce vertical flicker/movement when a tabs gets removed without calling SetTabItemClosed().
+ const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount);
+ if (tab_bar->VisibleTabWasSubmitted || tab_bar->VisibleTabId == 0 || tab_bar_appearing)
+ {
+ tab_bar->CurrTabsContentsHeight = ImMax(window->DC.CursorPos.y - tab_bar->BarRect.Max.y, tab_bar->CurrTabsContentsHeight);
+ window->DC.CursorPos.y = tab_bar->BarRect.Max.y + tab_bar->CurrTabsContentsHeight;
+ }
+ else
+ {
+ window->DC.CursorPos.y = tab_bar->BarRect.Max.y + tab_bar->PrevTabsContentsHeight;
+ }
+ if (tab_bar->BeginCount > 1)
+ window->DC.CursorPos = tab_bar->BackupCursorPos;
+
+ if ((tab_bar->Flags & ImGuiTabBarFlags_DockNode) == 0)
+ PopID();
+
+ g.CurrentTabBarStack.pop_back();
+ g.CurrentTabBar = g.CurrentTabBarStack.empty() ? NULL : GetTabBarFromTabBarRef(g.CurrentTabBarStack.back());
+}
+
+// This is called only once a frame before by the first call to ItemTab()
+// The reason we're not calling it in BeginTabBar() is to leave a chance to the user to call the SetTabItemClosed() functions.
+static void ImGui::TabBarLayout(ImGuiTabBar* tab_bar)
+{
+ ImGuiContext& g = *GImGui;
+ tab_bar->WantLayout = false;
+
+ // Garbage collect by compacting list
+ // Detect if we need to sort out tab list (e.g. in rare case where a tab changed section)
+ int tab_dst_n = 0;
+ bool need_sort_by_section = false;
+ ImGuiTabBarSection sections[3]; // Layout sections: Leading, Central, Trailing
+ for (int tab_src_n = 0; tab_src_n < tab_bar->Tabs.Size; tab_src_n++)
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_src_n];
+ if (tab->LastFrameVisible < tab_bar->PrevFrameVisible || tab->WantClose)
+ {
+ // Remove tab
+ if (tab_bar->VisibleTabId == tab->ID) { tab_bar->VisibleTabId = 0; }
+ if (tab_bar->SelectedTabId == tab->ID) { tab_bar->SelectedTabId = 0; }
+ if (tab_bar->NextSelectedTabId == tab->ID) { tab_bar->NextSelectedTabId = 0; }
+ continue;
+ }
+ if (tab_dst_n != tab_src_n)
+ tab_bar->Tabs[tab_dst_n] = tab_bar->Tabs[tab_src_n];
+
+ tab = &tab_bar->Tabs[tab_dst_n];
+ tab->IndexDuringLayout = (ImS16)tab_dst_n;
+
+ // We will need sorting if tabs have changed section (e.g. moved from one of Leading/Central/Trailing to another)
+ int curr_tab_section_n = TabItemGetSectionIdx(tab);
+ if (tab_dst_n > 0)
+ {
+ ImGuiTabItem* prev_tab = &tab_bar->Tabs[tab_dst_n - 1];
+ int prev_tab_section_n = TabItemGetSectionIdx(prev_tab);
+ if (curr_tab_section_n == 0 && prev_tab_section_n != 0)
+ need_sort_by_section = true;
+ if (prev_tab_section_n == 2 && curr_tab_section_n != 2)
+ need_sort_by_section = true;
+ }
+
+ sections[curr_tab_section_n].TabCount++;
+ tab_dst_n++;
+ }
+ if (tab_bar->Tabs.Size != tab_dst_n)
+ tab_bar->Tabs.resize(tab_dst_n);
+
+ if (need_sort_by_section)
+ ImQsort(tab_bar->Tabs.Data, tab_bar->Tabs.Size, sizeof(ImGuiTabItem), TabItemComparerBySection);
+
+ // Calculate spacing between sections
+ sections[0].Spacing = sections[0].TabCount > 0 && (sections[1].TabCount + sections[2].TabCount) > 0 ? g.Style.ItemInnerSpacing.x : 0.0f;
+ sections[1].Spacing = sections[1].TabCount > 0 && sections[2].TabCount > 0 ? g.Style.ItemInnerSpacing.x : 0.0f;
+
+ // Setup next selected tab
+ ImGuiID scroll_to_tab_id = 0;
+ if (tab_bar->NextSelectedTabId)
+ {
+ tab_bar->SelectedTabId = tab_bar->NextSelectedTabId;
+ tab_bar->NextSelectedTabId = 0;
+ scroll_to_tab_id = tab_bar->SelectedTabId;
+ }
+
+ // Process order change request (we could probably process it when requested but it's just saner to do it in a single spot).
+ if (tab_bar->ReorderRequestTabId != 0)
+ {
+ if (TabBarProcessReorder(tab_bar))
+ if (tab_bar->ReorderRequestTabId == tab_bar->SelectedTabId)
+ scroll_to_tab_id = tab_bar->ReorderRequestTabId;
+ tab_bar->ReorderRequestTabId = 0;
+ }
+
+ // Tab List Popup (will alter tab_bar->BarRect and therefore the available width!)
+ const bool tab_list_popup_button = (tab_bar->Flags & ImGuiTabBarFlags_TabListPopupButton) != 0;
+ if (tab_list_popup_button)
+ if (ImGuiTabItem* tab_to_select = TabBarTabListPopupButton(tab_bar)) // NB: Will alter BarRect.Min.x!
+ scroll_to_tab_id = tab_bar->SelectedTabId = tab_to_select->ID;
+
+ // Leading/Trailing tabs will be shrink only if central one aren't visible anymore, so layout the shrink data as: leading, trailing, central
+ // (whereas our tabs are stored as: leading, central, trailing)
+ int shrink_buffer_indexes[3] = { 0, sections[0].TabCount + sections[2].TabCount, sections[0].TabCount };
+ g.ShrinkWidthBuffer.resize(tab_bar->Tabs.Size);
+
+ // Compute ideal tabs widths + store them into shrink buffer
+ ImGuiTabItem* most_recently_selected_tab = NULL;
+ int curr_section_n = -1;
+ bool found_selected_tab_id = false;
+ for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+ IM_ASSERT(tab->LastFrameVisible >= tab_bar->PrevFrameVisible);
+
+ if ((most_recently_selected_tab == NULL || most_recently_selected_tab->LastFrameSelected < tab->LastFrameSelected) && !(tab->Flags & ImGuiTabItemFlags_Button))
+ most_recently_selected_tab = tab;
+ if (tab->ID == tab_bar->SelectedTabId)
+ found_selected_tab_id = true;
+ if (scroll_to_tab_id == 0 && g.NavJustMovedToId == tab->ID)
+ scroll_to_tab_id = tab->ID;
+
+ // Refresh tab width immediately, otherwise changes of style e.g. style.FramePadding.x would noticeably lag in the tab bar.
+ // Additionally, when using TabBarAddTab() to manipulate tab bar order we occasionally insert new tabs that don't have a width yet,
+ // and we cannot wait for the next BeginTabItem() call. We cannot compute this width within TabBarAddTab() because font size depends on the active window.
+ const char* tab_name = tab_bar->GetTabName(tab);
+ const bool has_close_button = (tab->Flags & ImGuiTabItemFlags_NoCloseButton) ? false : true;
+ tab->ContentWidth = (tab->RequestedWidth > 0.0f) ? tab->RequestedWidth : TabItemCalcSize(tab_name, has_close_button).x;
+
+ int section_n = TabItemGetSectionIdx(tab);
+ ImGuiTabBarSection* section = &sections[section_n];
+ section->Width += tab->ContentWidth + (section_n == curr_section_n ? g.Style.ItemInnerSpacing.x : 0.0f);
+ curr_section_n = section_n;
+
+ // Store data so we can build an array sorted by width if we need to shrink tabs down
+ IM_MSVC_WARNING_SUPPRESS(6385);
+ ImGuiShrinkWidthItem* shrink_width_item = &g.ShrinkWidthBuffer[shrink_buffer_indexes[section_n]++];
+ shrink_width_item->Index = tab_n;
+ shrink_width_item->Width = shrink_width_item->InitialWidth = tab->ContentWidth;
+
+ IM_ASSERT(tab->ContentWidth > 0.0f);
+ tab->Width = tab->ContentWidth;
+ }
+
+ // Compute total ideal width (used for e.g. auto-resizing a window)
+ tab_bar->WidthAllTabsIdeal = 0.0f;
+ for (int section_n = 0; section_n < 3; section_n++)
+ tab_bar->WidthAllTabsIdeal += sections[section_n].Width + sections[section_n].Spacing;
+
+ // Horizontal scrolling buttons
+ // (note that TabBarScrollButtons() will alter BarRect.Max.x)
+ if ((tab_bar->WidthAllTabsIdeal > tab_bar->BarRect.GetWidth() && tab_bar->Tabs.Size > 1) && !(tab_bar->Flags & ImGuiTabBarFlags_NoTabListScrollingButtons) && (tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyScroll))
+ if (ImGuiTabItem* scroll_and_select_tab = TabBarScrollingButtons(tab_bar))
+ {
+ scroll_to_tab_id = scroll_and_select_tab->ID;
+ if ((scroll_and_select_tab->Flags & ImGuiTabItemFlags_Button) == 0)
+ tab_bar->SelectedTabId = scroll_to_tab_id;
+ }
+
+ // Shrink widths if full tabs don't fit in their allocated space
+ float section_0_w = sections[0].Width + sections[0].Spacing;
+ float section_1_w = sections[1].Width + sections[1].Spacing;
+ float section_2_w = sections[2].Width + sections[2].Spacing;
+ bool central_section_is_visible = (section_0_w + section_2_w) < tab_bar->BarRect.GetWidth();
+ float width_excess;
+ if (central_section_is_visible)
+ width_excess = ImMax(section_1_w - (tab_bar->BarRect.GetWidth() - section_0_w - section_2_w), 0.0f); // Excess used to shrink central section
+ else
+ width_excess = (section_0_w + section_2_w) - tab_bar->BarRect.GetWidth(); // Excess used to shrink leading/trailing section
+
+ // With ImGuiTabBarFlags_FittingPolicyScroll policy, we will only shrink leading/trailing if the central section is not visible anymore
+ if (width_excess > 0.0f && ((tab_bar->Flags & ImGuiTabBarFlags_FittingPolicyResizeDown) || !central_section_is_visible))
+ {
+ int shrink_data_count = (central_section_is_visible ? sections[1].TabCount : sections[0].TabCount + sections[2].TabCount);
+ int shrink_data_offset = (central_section_is_visible ? sections[0].TabCount + sections[2].TabCount : 0);
+ ShrinkWidths(g.ShrinkWidthBuffer.Data + shrink_data_offset, shrink_data_count, width_excess);
+
+ // Apply shrunk values into tabs and sections
+ for (int tab_n = shrink_data_offset; tab_n < shrink_data_offset + shrink_data_count; tab_n++)
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[g.ShrinkWidthBuffer[tab_n].Index];
+ float shrinked_width = IM_FLOOR(g.ShrinkWidthBuffer[tab_n].Width);
+ if (shrinked_width < 0.0f)
+ continue;
+
+ int section_n = TabItemGetSectionIdx(tab);
+ sections[section_n].Width -= (tab->Width - shrinked_width);
+ tab->Width = shrinked_width;
+ }
+ }
+
+ // Layout all active tabs
+ int section_tab_index = 0;
+ float tab_offset = 0.0f;
+ tab_bar->WidthAllTabs = 0.0f;
+ for (int section_n = 0; section_n < 3; section_n++)
+ {
+ ImGuiTabBarSection* section = &sections[section_n];
+ if (section_n == 2)
+ tab_offset = ImMin(ImMax(0.0f, tab_bar->BarRect.GetWidth() - section->Width), tab_offset);
+
+ for (int tab_n = 0; tab_n < section->TabCount; tab_n++)
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[section_tab_index + tab_n];
+ tab->Offset = tab_offset;
+ tab_offset += tab->Width + (tab_n < section->TabCount - 1 ? g.Style.ItemInnerSpacing.x : 0.0f);
+ }
+ tab_bar->WidthAllTabs += ImMax(section->Width + section->Spacing, 0.0f);
+ tab_offset += section->Spacing;
+ section_tab_index += section->TabCount;
+ }
+
+ // If we have lost the selected tab, select the next most recently active one
+ if (found_selected_tab_id == false)
+ tab_bar->SelectedTabId = 0;
+ if (tab_bar->SelectedTabId == 0 && tab_bar->NextSelectedTabId == 0 && most_recently_selected_tab != NULL)
+ scroll_to_tab_id = tab_bar->SelectedTabId = most_recently_selected_tab->ID;
+
+ // Lock in visible tab
+ tab_bar->VisibleTabId = tab_bar->SelectedTabId;
+ tab_bar->VisibleTabWasSubmitted = false;
+
+ // Update scrolling
+ if (scroll_to_tab_id != 0)
+ TabBarScrollToTab(tab_bar, scroll_to_tab_id, sections);
+ tab_bar->ScrollingAnim = TabBarScrollClamp(tab_bar, tab_bar->ScrollingAnim);
+ tab_bar->ScrollingTarget = TabBarScrollClamp(tab_bar, tab_bar->ScrollingTarget);
+ if (tab_bar->ScrollingAnim != tab_bar->ScrollingTarget)
+ {
+ // Scrolling speed adjust itself so we can always reach our target in 1/3 seconds.
+ // Teleport if we are aiming far off the visible line
+ tab_bar->ScrollingSpeed = ImMax(tab_bar->ScrollingSpeed, 70.0f * g.FontSize);
+ tab_bar->ScrollingSpeed = ImMax(tab_bar->ScrollingSpeed, ImFabs(tab_bar->ScrollingTarget - tab_bar->ScrollingAnim) / 0.3f);
+ const bool teleport = (tab_bar->PrevFrameVisible + 1 < g.FrameCount) || (tab_bar->ScrollingTargetDistToVisibility > 10.0f * g.FontSize);
+ tab_bar->ScrollingAnim = teleport ? tab_bar->ScrollingTarget : ImLinearSweep(tab_bar->ScrollingAnim, tab_bar->ScrollingTarget, g.IO.DeltaTime * tab_bar->ScrollingSpeed);
+ }
+ else
+ {
+ tab_bar->ScrollingSpeed = 0.0f;
+ }
+ tab_bar->ScrollingRectMinX = tab_bar->BarRect.Min.x + sections[0].Width + sections[0].Spacing;
+ tab_bar->ScrollingRectMaxX = tab_bar->BarRect.Max.x - sections[2].Width - sections[1].Spacing;
+
+ // Clear name buffers
+ if ((tab_bar->Flags & ImGuiTabBarFlags_DockNode) == 0)
+ tab_bar->TabsNames.Buf.resize(0);
+
+ // Actual layout in host window (we don't do it in BeginTabBar() so as not to waste an extra frame)
+ ImGuiWindow* window = g.CurrentWindow;
+ window->DC.CursorPos = tab_bar->BarRect.Min;
+ ItemSize(ImVec2(tab_bar->WidthAllTabs, tab_bar->BarRect.GetHeight()), tab_bar->FramePadding.y);
+ window->DC.IdealMaxPos.x = ImMax(window->DC.IdealMaxPos.x, tab_bar->BarRect.Min.x + tab_bar->WidthAllTabsIdeal);
+}
+
+// Dockables uses Name/ID in the global namespace. Non-dockable items use the ID stack.
+static ImU32 ImGui::TabBarCalcTabID(ImGuiTabBar* tab_bar, const char* label)
+{
+ if (tab_bar->Flags & ImGuiTabBarFlags_DockNode)
+ {
+ ImGuiID id = ImHashStr(label);
+ KeepAliveID(id);
+ return id;
+ }
+ else
+ {
+ ImGuiWindow* window = GImGui->CurrentWindow;
+ return window->GetID(label);
+ }
+}
+
+static float ImGui::TabBarCalcMaxTabWidth()
+{
+ ImGuiContext& g = *GImGui;
+ return g.FontSize * 20.0f;
+}
+
+ImGuiTabItem* ImGui::TabBarFindTabByID(ImGuiTabBar* tab_bar, ImGuiID tab_id)
+{
+ if (tab_id != 0)
+ for (int n = 0; n < tab_bar->Tabs.Size; n++)
+ if (tab_bar->Tabs[n].ID == tab_id)
+ return &tab_bar->Tabs[n];
+ return NULL;
+}
+
+// The *TabId fields be already set by the docking system _before_ the actual TabItem was created, so we clear them regardless.
+void ImGui::TabBarRemoveTab(ImGuiTabBar* tab_bar, ImGuiID tab_id)
+{
+ if (ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id))
+ tab_bar->Tabs.erase(tab);
+ if (tab_bar->VisibleTabId == tab_id) { tab_bar->VisibleTabId = 0; }
+ if (tab_bar->SelectedTabId == tab_id) { tab_bar->SelectedTabId = 0; }
+ if (tab_bar->NextSelectedTabId == tab_id) { tab_bar->NextSelectedTabId = 0; }
+}
+
+// Called on manual closure attempt
+void ImGui::TabBarCloseTab(ImGuiTabBar* tab_bar, ImGuiTabItem* tab)
+{
+ IM_ASSERT(!(tab->Flags & ImGuiTabItemFlags_Button));
+ if (!(tab->Flags & ImGuiTabItemFlags_UnsavedDocument))
+ {
+ // This will remove a frame of lag for selecting another tab on closure.
+ // However we don't run it in the case where the 'Unsaved' flag is set, so user gets a chance to fully undo the closure
+ tab->WantClose = true;
+ if (tab_bar->VisibleTabId == tab->ID)
+ {
+ tab->LastFrameVisible = -1;
+ tab_bar->SelectedTabId = tab_bar->NextSelectedTabId = 0;
+ }
+ }
+ else
+ {
+ // Actually select before expecting closure attempt (on an UnsavedDocument tab user is expect to e.g. show a popup)
+ if (tab_bar->VisibleTabId != tab->ID)
+ tab_bar->NextSelectedTabId = tab->ID;
+ }
+}
+
+static float ImGui::TabBarScrollClamp(ImGuiTabBar* tab_bar, float scrolling)
+{
+ scrolling = ImMin(scrolling, tab_bar->WidthAllTabs - tab_bar->BarRect.GetWidth());
+ return ImMax(scrolling, 0.0f);
+}
+
+// Note: we may scroll to tab that are not selected! e.g. using keyboard arrow keys
+static void ImGui::TabBarScrollToTab(ImGuiTabBar* tab_bar, ImGuiID tab_id, ImGuiTabBarSection* sections)
+{
+ ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id);
+ if (tab == NULL)
+ return;
+ if (tab->Flags & ImGuiTabItemFlags_SectionMask_)
+ return;
+
+ ImGuiContext& g = *GImGui;
+ float margin = g.FontSize * 1.0f; // When to scroll to make Tab N+1 visible always make a bit of N visible to suggest more scrolling area (since we don't have a scrollbar)
+ int order = tab_bar->GetTabOrder(tab);
+
+ // Scrolling happens only in the central section (leading/trailing sections are not scrolling)
+ // FIXME: This is all confusing.
+ float scrollable_width = tab_bar->BarRect.GetWidth() - sections[0].Width - sections[2].Width - sections[1].Spacing;
+
+ // We make all tabs positions all relative Sections[0].Width to make code simpler
+ float tab_x1 = tab->Offset - sections[0].Width + (order > sections[0].TabCount - 1 ? -margin : 0.0f);
+ float tab_x2 = tab->Offset - sections[0].Width + tab->Width + (order + 1 < tab_bar->Tabs.Size - sections[2].TabCount ? margin : 1.0f);
+ tab_bar->ScrollingTargetDistToVisibility = 0.0f;
+ if (tab_bar->ScrollingTarget > tab_x1 || (tab_x2 - tab_x1 >= scrollable_width))
+ {
+ // Scroll to the left
+ tab_bar->ScrollingTargetDistToVisibility = ImMax(tab_bar->ScrollingAnim - tab_x2, 0.0f);
+ tab_bar->ScrollingTarget = tab_x1;
+ }
+ else if (tab_bar->ScrollingTarget < tab_x2 - scrollable_width)
+ {
+ // Scroll to the right
+ tab_bar->ScrollingTargetDistToVisibility = ImMax((tab_x1 - scrollable_width) - tab_bar->ScrollingAnim, 0.0f);
+ tab_bar->ScrollingTarget = tab_x2 - scrollable_width;
+ }
+}
+
+void ImGui::TabBarQueueReorder(ImGuiTabBar* tab_bar, const ImGuiTabItem* tab, int offset)
+{
+ IM_ASSERT(offset != 0);
+ IM_ASSERT(tab_bar->ReorderRequestTabId == 0);
+ tab_bar->ReorderRequestTabId = tab->ID;
+ tab_bar->ReorderRequestOffset = (ImS16)offset;
+}
+
+void ImGui::TabBarQueueReorderFromMousePos(ImGuiTabBar* tab_bar, const ImGuiTabItem* src_tab, ImVec2 mouse_pos)
+{
+ ImGuiContext& g = *GImGui;
+ IM_ASSERT(tab_bar->ReorderRequestTabId == 0);
+ if ((tab_bar->Flags & ImGuiTabBarFlags_Reorderable) == 0)
+ return;
+
+ const bool is_central_section = (src_tab->Flags & ImGuiTabItemFlags_SectionMask_) == 0;
+ const float bar_offset = tab_bar->BarRect.Min.x - (is_central_section ? tab_bar->ScrollingTarget : 0);
+
+ // Count number of contiguous tabs we are crossing over
+ const int dir = (bar_offset + src_tab->Offset) > mouse_pos.x ? -1 : +1;
+ const int src_idx = tab_bar->Tabs.index_from_ptr(src_tab);
+ int dst_idx = src_idx;
+ for (int i = src_idx; i >= 0 && i < tab_bar->Tabs.Size; i += dir)
+ {
+ // Reordered tabs must share the same section
+ const ImGuiTabItem* dst_tab = &tab_bar->Tabs[i];
+ if (dst_tab->Flags & ImGuiTabItemFlags_NoReorder)
+ break;
+ if ((dst_tab->Flags & ImGuiTabItemFlags_SectionMask_) != (src_tab->Flags & ImGuiTabItemFlags_SectionMask_))
+ break;
+ dst_idx = i;
+
+ // Include spacing after tab, so when mouse cursor is between tabs we would not continue checking further tabs that are not hovered.
+ const float x1 = bar_offset + dst_tab->Offset - g.Style.ItemInnerSpacing.x;
+ const float x2 = bar_offset + dst_tab->Offset + dst_tab->Width + g.Style.ItemInnerSpacing.x;
+ //GetForegroundDrawList()->AddRect(ImVec2(x1, tab_bar->BarRect.Min.y), ImVec2(x2, tab_bar->BarRect.Max.y), IM_COL32(255, 0, 0, 255));
+ if ((dir < 0 && mouse_pos.x > x1) || (dir > 0 && mouse_pos.x < x2))
+ break;
+ }
+
+ if (dst_idx != src_idx)
+ TabBarQueueReorder(tab_bar, src_tab, dst_idx - src_idx);
+}
+
+bool ImGui::TabBarProcessReorder(ImGuiTabBar* tab_bar)
+{
+ ImGuiTabItem* tab1 = TabBarFindTabByID(tab_bar, tab_bar->ReorderRequestTabId);
+ if (tab1 == NULL || (tab1->Flags & ImGuiTabItemFlags_NoReorder))
+ return false;
+
+ //IM_ASSERT(tab_bar->Flags & ImGuiTabBarFlags_Reorderable); // <- this may happen when using debug tools
+ int tab2_order = tab_bar->GetTabOrder(tab1) + tab_bar->ReorderRequestOffset;
+ if (tab2_order < 0 || tab2_order >= tab_bar->Tabs.Size)
+ return false;
+
+ // Reordered tabs must share the same section
+ // (Note: TabBarQueueReorderFromMousePos() also has a similar test but since we allow direct calls to TabBarQueueReorder() we do it here too)
+ ImGuiTabItem* tab2 = &tab_bar->Tabs[tab2_order];
+ if (tab2->Flags & ImGuiTabItemFlags_NoReorder)
+ return false;
+ if ((tab1->Flags & ImGuiTabItemFlags_SectionMask_) != (tab2->Flags & ImGuiTabItemFlags_SectionMask_))
+ return false;
+
+ ImGuiTabItem item_tmp = *tab1;
+ ImGuiTabItem* src_tab = (tab_bar->ReorderRequestOffset > 0) ? tab1 + 1 : tab2;
+ ImGuiTabItem* dst_tab = (tab_bar->ReorderRequestOffset > 0) ? tab1 : tab2 + 1;
+ const int move_count = (tab_bar->ReorderRequestOffset > 0) ? tab_bar->ReorderRequestOffset : -tab_bar->ReorderRequestOffset;
+ memmove(dst_tab, src_tab, move_count * sizeof(ImGuiTabItem));
+ *tab2 = item_tmp;
+
+ if (tab_bar->Flags & ImGuiTabBarFlags_SaveSettings)
+ MarkIniSettingsDirty();
+ return true;
+}
+
+static ImGuiTabItem* ImGui::TabBarScrollingButtons(ImGuiTabBar* tab_bar)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ const ImVec2 arrow_button_size(g.FontSize - 2.0f, g.FontSize + g.Style.FramePadding.y * 2.0f);
+ const float scrolling_buttons_width = arrow_button_size.x * 2.0f;
+
+ const ImVec2 backup_cursor_pos = window->DC.CursorPos;
+ //window->DrawList->AddRect(ImVec2(tab_bar->BarRect.Max.x - scrolling_buttons_width, tab_bar->BarRect.Min.y), ImVec2(tab_bar->BarRect.Max.x, tab_bar->BarRect.Max.y), IM_COL32(255,0,0,255));
+
+ int select_dir = 0;
+ ImVec4 arrow_col = g.Style.Colors[ImGuiCol_Text];
+ arrow_col.w *= 0.5f;
+
+ PushStyleColor(ImGuiCol_Text, arrow_col);
+ PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));
+ const float backup_repeat_delay = g.IO.KeyRepeatDelay;
+ const float backup_repeat_rate = g.IO.KeyRepeatRate;
+ g.IO.KeyRepeatDelay = 0.250f;
+ g.IO.KeyRepeatRate = 0.200f;
+ float x = ImMax(tab_bar->BarRect.Min.x, tab_bar->BarRect.Max.x - scrolling_buttons_width);
+ window->DC.CursorPos = ImVec2(x, tab_bar->BarRect.Min.y);
+ if (ArrowButtonEx("##<", ImGuiDir_Left, arrow_button_size, ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_Repeat))
+ select_dir = -1;
+ window->DC.CursorPos = ImVec2(x + arrow_button_size.x, tab_bar->BarRect.Min.y);
+ if (ArrowButtonEx("##>", ImGuiDir_Right, arrow_button_size, ImGuiButtonFlags_PressedOnClick | ImGuiButtonFlags_Repeat))
+ select_dir = +1;
+ PopStyleColor(2);
+ g.IO.KeyRepeatRate = backup_repeat_rate;
+ g.IO.KeyRepeatDelay = backup_repeat_delay;
+
+ ImGuiTabItem* tab_to_scroll_to = NULL;
+ if (select_dir != 0)
+ if (ImGuiTabItem* tab_item = TabBarFindTabByID(tab_bar, tab_bar->SelectedTabId))
+ {
+ int selected_order = tab_bar->GetTabOrder(tab_item);
+ int target_order = selected_order + select_dir;
+
+ // Skip tab item buttons until another tab item is found or end is reached
+ while (tab_to_scroll_to == NULL)
+ {
+ // If we are at the end of the list, still scroll to make our tab visible
+ tab_to_scroll_to = &tab_bar->Tabs[(target_order >= 0 && target_order < tab_bar->Tabs.Size) ? target_order : selected_order];
+
+ // Cross through buttons
+ // (even if first/last item is a button, return it so we can update the scroll)
+ if (tab_to_scroll_to->Flags & ImGuiTabItemFlags_Button)
+ {
+ target_order += select_dir;
+ selected_order += select_dir;
+ tab_to_scroll_to = (target_order < 0 || target_order >= tab_bar->Tabs.Size) ? tab_to_scroll_to : NULL;
+ }
+ }
+ }
+ window->DC.CursorPos = backup_cursor_pos;
+ tab_bar->BarRect.Max.x -= scrolling_buttons_width + 1.0f;
+
+ return tab_to_scroll_to;
+}
+
+static ImGuiTabItem* ImGui::TabBarTabListPopupButton(ImGuiTabBar* tab_bar)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+
+ // We use g.Style.FramePadding.y to match the square ArrowButton size
+ const float tab_list_popup_button_width = g.FontSize + g.Style.FramePadding.y;
+ const ImVec2 backup_cursor_pos = window->DC.CursorPos;
+ window->DC.CursorPos = ImVec2(tab_bar->BarRect.Min.x - g.Style.FramePadding.y, tab_bar->BarRect.Min.y);
+ tab_bar->BarRect.Min.x += tab_list_popup_button_width;
+
+ ImVec4 arrow_col = g.Style.Colors[ImGuiCol_Text];
+ arrow_col.w *= 0.5f;
+ PushStyleColor(ImGuiCol_Text, arrow_col);
+ PushStyleColor(ImGuiCol_Button, ImVec4(0, 0, 0, 0));
+ bool open = BeginCombo("##v", NULL, ImGuiComboFlags_NoPreview | ImGuiComboFlags_HeightLargest);
+ PopStyleColor(2);
+
+ ImGuiTabItem* tab_to_select = NULL;
+ if (open)
+ {
+ for (int tab_n = 0; tab_n < tab_bar->Tabs.Size; tab_n++)
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_n];
+ if (tab->Flags & ImGuiTabItemFlags_Button)
+ continue;
+
+ const char* tab_name = tab_bar->GetTabName(tab);
+ if (Selectable(tab_name, tab_bar->SelectedTabId == tab->ID))
+ tab_to_select = tab;
+ }
+ EndCombo();
+ }
+
+ window->DC.CursorPos = backup_cursor_pos;
+ return tab_to_select;
+}
+
+//-------------------------------------------------------------------------
+// [SECTION] Widgets: BeginTabItem, EndTabItem, etc.
+//-------------------------------------------------------------------------
+// - BeginTabItem()
+// - EndTabItem()
+// - TabItemButton()
+// - TabItemEx() [Internal]
+// - SetTabItemClosed()
+// - TabItemCalcSize() [Internal]
+// - TabItemBackground() [Internal]
+// - TabItemLabelAndCloseButton() [Internal]
+//-------------------------------------------------------------------------
+
+bool ImGui::BeginTabItem(const char* label, bool* p_open, ImGuiTabItemFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ ImGuiTabBar* tab_bar = g.CurrentTabBar;
+ if (tab_bar == NULL)
+ {
+ IM_ASSERT_USER_ERROR(tab_bar, "Needs to be called between BeginTabBar() and EndTabBar()!");
+ return false;
+ }
+ IM_ASSERT(!(flags & ImGuiTabItemFlags_Button)); // BeginTabItem() Can't be used with button flags, use TabItemButton() instead!
+
+ bool ret = TabItemEx(tab_bar, label, p_open, flags);
+ if (ret && !(flags & ImGuiTabItemFlags_NoPushId))
+ {
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
+ PushOverrideID(tab->ID); // We already hashed 'label' so push into the ID stack directly instead of doing another hash through PushID(label)
+ }
+ return ret;
+}
+
+void ImGui::EndTabItem()
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return;
+
+ ImGuiTabBar* tab_bar = g.CurrentTabBar;
+ if (tab_bar == NULL)
+ {
+ IM_ASSERT_USER_ERROR(tab_bar != NULL, "Needs to be called between BeginTabBar() and EndTabBar()!");
+ return;
+ }
+ IM_ASSERT(tab_bar->LastTabItemIdx >= 0);
+ ImGuiTabItem* tab = &tab_bar->Tabs[tab_bar->LastTabItemIdx];
+ if (!(tab->Flags & ImGuiTabItemFlags_NoPushId))
+ PopID();
+}
+
+bool ImGui::TabItemButton(const char* label, ImGuiTabItemFlags flags)
+{
+ ImGuiContext& g = *GImGui;
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ ImGuiTabBar* tab_bar = g.CurrentTabBar;
+ if (tab_bar == NULL)
+ {
+ IM_ASSERT_USER_ERROR(tab_bar != NULL, "Needs to be called between BeginTabBar() and EndTabBar()!");
+ return false;
+ }
+ return TabItemEx(tab_bar, label, NULL, flags | ImGuiTabItemFlags_Button | ImGuiTabItemFlags_NoReorder);
+}
+
+bool ImGui::TabItemEx(ImGuiTabBar* tab_bar, const char* label, bool* p_open, ImGuiTabItemFlags flags)
+{
+ // Layout whole tab bar if not already done
+ ImGuiContext& g = *GImGui;
+ if (tab_bar->WantLayout)
+ {
+ ImGuiNextItemData backup_next_item_data = g.NextItemData;
+ TabBarLayout(tab_bar);
+ g.NextItemData = backup_next_item_data;
+ }
+ ImGuiWindow* window = g.CurrentWindow;
+ if (window->SkipItems)
+ return false;
+
+ const ImGuiStyle& style = g.Style;
+ const ImGuiID id = TabBarCalcTabID(tab_bar, label);
+
+ // If the user called us with *p_open == false, we early out and don't render.
+ // We make a call to ItemAdd() so that attempts to use a contextual popup menu with an implicit ID won't use an older ID.
+ IMGUI_TEST_ENGINE_ITEM_INFO(id, label, g.LastItemData.StatusFlags);
+ if (p_open && !*p_open)
+ {
+ ItemAdd(ImRect(), id, NULL, ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus);
+ return false;
+ }
+
+ IM_ASSERT(!p_open || !(flags & ImGuiTabItemFlags_Button));
+ IM_ASSERT((flags & (ImGuiTabItemFlags_Leading | ImGuiTabItemFlags_Trailing)) != (ImGuiTabItemFlags_Leading | ImGuiTabItemFlags_Trailing)); // Can't use both Leading and Trailing
+
+ // Store into ImGuiTabItemFlags_NoCloseButton, also honor ImGuiTabItemFlags_NoCloseButton passed by user (although not documented)
+ if (flags & ImGuiTabItemFlags_NoCloseButton)
+ p_open = NULL;
+ else if (p_open == NULL)
+ flags |= ImGuiTabItemFlags_NoCloseButton;
+
+ // Acquire tab data
+ ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, id);
+ bool tab_is_new = false;
+ if (tab == NULL)
+ {
+ tab_bar->Tabs.push_back(ImGuiTabItem());
+ tab = &tab_bar->Tabs.back();
+ tab->ID = id;
+ tab_bar->TabsAddedNew = tab_is_new = true;
+ }
+ tab_bar->LastTabItemIdx = (ImS16)tab_bar->Tabs.index_from_ptr(tab);
+
+ // Calculate tab contents size
+ ImVec2 size = TabItemCalcSize(label, p_open != NULL);
+ tab->RequestedWidth = -1.0f;
+ if (g.NextItemData.Flags & ImGuiNextItemDataFlags_HasWidth)
+ size.x = tab->RequestedWidth = g.NextItemData.Width;
+ if (tab_is_new)
+ tab->Width = size.x;
+ tab->ContentWidth = size.x;
+ tab->BeginOrder = tab_bar->TabsActiveCount++;
+
+ const bool tab_bar_appearing = (tab_bar->PrevFrameVisible + 1 < g.FrameCount);
+ const bool tab_bar_focused = (tab_bar->Flags & ImGuiTabBarFlags_IsFocused) != 0;
+ const bool tab_appearing = (tab->LastFrameVisible + 1 < g.FrameCount);
+ const bool is_tab_button = (flags & ImGuiTabItemFlags_Button) != 0;
+ tab->LastFrameVisible = g.FrameCount;
+ tab->Flags = flags;
+
+ // Append name with zero-terminator
+ tab->NameOffset = (ImS32)tab_bar->TabsNames.size();
+ tab_bar->TabsNames.append(label, label + strlen(label) + 1);
+
+ // Update selected tab
+ if (!is_tab_button)
+ {
+ if (tab_appearing && (tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs) && tab_bar->NextSelectedTabId == 0)
+ if (!tab_bar_appearing || tab_bar->SelectedTabId == 0)
+ tab_bar->NextSelectedTabId = id; // New tabs gets activated
+ if ((flags & ImGuiTabItemFlags_SetSelected) && (tab_bar->SelectedTabId != id)) // _SetSelected can only be passed on explicit tab bar
+ tab_bar->NextSelectedTabId = id;
+ }
+
+ // Lock visibility
+ // (Note: tab_contents_visible != tab_selected... because CTRL+TAB operations may preview some tabs without selecting them!)
+ bool tab_contents_visible = (tab_bar->VisibleTabId == id);
+ if (tab_contents_visible)
+ tab_bar->VisibleTabWasSubmitted = true;
+
+ // On the very first frame of a tab bar we let first tab contents be visible to minimize appearing glitches
+ if (!tab_contents_visible && tab_bar->SelectedTabId == 0 && tab_bar_appearing)
+ if (tab_bar->Tabs.Size == 1 && !(tab_bar->Flags & ImGuiTabBarFlags_AutoSelectNewTabs))
+ tab_contents_visible = true;
+
+ // Note that tab_is_new is not necessarily the same as tab_appearing! When a tab bar stops being submitted
+ // and then gets submitted again, the tabs will have 'tab_appearing=true' but 'tab_is_new=false'.
+ if (tab_appearing && (!tab_bar_appearing || tab_is_new))
+ {
+ ItemAdd(ImRect(), id, NULL, ImGuiItemFlags_NoNav | ImGuiItemFlags_NoNavDefaultFocus);
+ if (is_tab_button)
+ return false;
+ return tab_contents_visible;
+ }
+
+ if (tab_bar->SelectedTabId == id)
+ tab->LastFrameSelected = g.FrameCount;
+
+ // Backup current layout position
+ const ImVec2 backup_main_cursor_pos = window->DC.CursorPos;
+
+ // Layout
+ const bool is_central_section = (tab->Flags & ImGuiTabItemFlags_SectionMask_) == 0;
+ size.x = tab->Width;
+ if (is_central_section)
+ window->DC.CursorPos = tab_bar->BarRect.Min + ImVec2(IM_FLOOR(tab->Offset - tab_bar->ScrollingAnim), 0.0f);
+ else
+ window->DC.CursorPos = tab_bar->BarRect.Min + ImVec2(tab->Offset, 0.0f);
+ ImVec2 pos = window->DC.CursorPos;
+ ImRect bb(pos, pos + size);
+
+ // We don't have CPU clipping primitives to clip the CloseButton (until it becomes a texture), so need to add an extra draw call (temporary in the case of vertical animation)
+ const bool want_clip_rect = is_central_section && (bb.Min.x < tab_bar->ScrollingRectMinX || bb.Max.x > tab_bar->ScrollingRectMaxX);
+ if (want_clip_rect)
+ PushClipRect(ImVec2(ImMax(bb.Min.x, tab_bar->ScrollingRectMinX), bb.Min.y - 1), ImVec2(tab_bar->ScrollingRectMaxX, bb.Max.y), true);
+
+ ImVec2 backup_cursor_max_pos = window->DC.CursorMaxPos;
+ ItemSize(bb.GetSize(), style.FramePadding.y);
+ window->DC.CursorMaxPos = backup_cursor_max_pos;
+
+ if (!ItemAdd(bb, id))
+ {
+ if (want_clip_rect)
+ PopClipRect();
+ window->DC.CursorPos = backup_main_cursor_pos;
+ return tab_contents_visible;
+ }
+
+ // Click to Select a tab
+ ImGuiButtonFlags button_flags = ((is_tab_button ? ImGuiButtonFlags_PressedOnClickRelease : ImGuiButtonFlags_PressedOnClick) | ImGuiButtonFlags_AllowItemOverlap);
+ if (g.DragDropActive)
+ button_flags |= ImGuiButtonFlags_PressedOnDragDropHold;
+ bool hovered, held;
+ bool pressed = ButtonBehavior(bb, id, &hovered, &held, button_flags);
+ if (pressed && !is_tab_button)
+ tab_bar->NextSelectedTabId = id;
+
+ // Allow the close button to overlap unless we are dragging (in which case we don't want any overlapping tabs to be hovered)
+ if (g.ActiveId != id)
+ SetItemAllowOverlap();
+
+ // Drag and drop: re-order tabs
+ if (held && !tab_appearing && IsMouseDragging(0))
+ {
+ if (!g.DragDropActive && (tab_bar->Flags & ImGuiTabBarFlags_Reorderable))
+ {
+ // While moving a tab it will jump on the other side of the mouse, so we also test for MouseDelta.x
+ if (g.IO.MouseDelta.x < 0.0f && g.IO.MousePos.x < bb.Min.x)
+ {
+ TabBarQueueReorderFromMousePos(tab_bar, tab, g.IO.MousePos);
+ }
+ else if (g.IO.MouseDelta.x > 0.0f && g.IO.MousePos.x > bb.Max.x)
+ {
+ TabBarQueueReorderFromMousePos(tab_bar, tab, g.IO.MousePos);
+ }
+ }
+ }
+
+#if 0
+ if (hovered && g.HoveredIdNotActiveTimer > TOOLTIP_DELAY && bb.GetWidth() < tab->ContentWidth)
+ {
+ // Enlarge tab display when hovering
+ bb.Max.x = bb.Min.x + IM_FLOOR(ImLerp(bb.GetWidth(), tab->ContentWidth, ImSaturate((g.HoveredIdNotActiveTimer - 0.40f) * 6.0f)));
+ display_draw_list = GetForegroundDrawList(window);
+ TabItemBackground(display_draw_list, bb, flags, GetColorU32(ImGuiCol_TitleBgActive));
+ }
+#endif
+
+ // Render tab shape
+ ImDrawList* display_draw_list = window->DrawList;
+ const ImU32 tab_col = GetColorU32((held || hovered) ? ImGuiCol_TabHovered : tab_contents_visible ? (tab_bar_focused ? ImGuiCol_TabActive : ImGuiCol_TabUnfocusedActive) : (tab_bar_focused ? ImGuiCol_Tab : ImGuiCol_TabUnfocused));
+ TabItemBackground(display_draw_list, bb, flags, tab_col);
+ RenderNavHighlight(bb, id);
+
+ // Select with right mouse button. This is so the common idiom for context menu automatically highlight the current widget.
+ const bool hovered_unblocked = IsItemHovered(ImGuiHoveredFlags_AllowWhenBlockedByPopup);
+ if (hovered_unblocked && (IsMouseClicked(1) || IsMouseReleased(1)))
+ if (!is_tab_button)
+ tab_bar->NextSelectedTabId = id;
+
+ if (tab_bar->Flags & ImGuiTabBarFlags_NoCloseWithMiddleMouseButton)
+ flags |= ImGuiTabItemFlags_NoCloseWithMiddleMouseButton;
+
+ // Render tab label, process close button
+ const ImGuiID close_button_id = p_open ? GetIDWithSeed("#CLOSE", NULL, id) : 0;
+ bool just_closed;
+ bool text_clipped;
+ TabItemLabelAndCloseButton(display_draw_list, bb, flags, tab_bar->FramePadding, label, id, close_button_id, tab_contents_visible, &just_closed, &text_clipped);
+ if (just_closed && p_open != NULL)
+ {
+ *p_open = false;
+ TabBarCloseTab(tab_bar, tab);
+ }
+
+ // Restore main window position so user can draw there
+ if (want_clip_rect)
+ PopClipRect();
+ window->DC.CursorPos = backup_main_cursor_pos;
+
+ // Tooltip
+ // (Won't work over the close button because ItemOverlap systems messes up with HoveredIdTimer-> seems ok)
+ // (We test IsItemHovered() to discard e.g. when another item is active or drag and drop over the tab bar, which g.HoveredId ignores)
+ // FIXME: This is a mess.
+ // FIXME: We may want disabled tab to still display the tooltip?
+ if (text_clipped && g.HoveredId == id && !held && g.HoveredIdNotActiveTimer > g.TooltipSlowDelay && IsItemHovered())
+ if (!(tab_bar->Flags & ImGuiTabBarFlags_NoTooltip) && !(tab->Flags & ImGuiTabItemFlags_NoTooltip))
+ SetTooltip("%.*s", (int)(FindRenderedTextEnd(label) - label), label);
+
+ IM_ASSERT(!is_tab_button || !(tab_bar->SelectedTabId == tab->ID && is_tab_button)); // TabItemButton should not be selected
+ if (is_tab_button)
+ return pressed;
+ return tab_contents_visible;
+}
+
+// [Public] This is call is 100% optional but it allows to remove some one-frame glitches when a tab has been unexpectedly removed.
+// To use it to need to call the function SetTabItemClosed() between BeginTabBar() and EndTabBar().
+// Tabs closed by the close button will automatically be flagged to avoid this issue.
+void ImGui::SetTabItemClosed(const char* label)
+{
+ ImGuiContext& g = *GImGui;
+ bool is_within_manual_tab_bar = g.CurrentTabBar && !(g.CurrentTabBar->Flags & ImGuiTabBarFlags_DockNode);
+ if (is_within_manual_tab_bar)
+ {
+ ImGuiTabBar* tab_bar = g.CurrentTabBar;
+ ImGuiID tab_id = TabBarCalcTabID(tab_bar, label);
+ if (ImGuiTabItem* tab = TabBarFindTabByID(tab_bar, tab_id))
+ tab->WantClose = true; // Will be processed by next call to TabBarLayout()
+ }
+}
+
+ImVec2 ImGui::TabItemCalcSize(const char* label, bool has_close_button)
+{
+ ImGuiContext& g = *GImGui;
+ ImVec2 label_size = CalcTextSize(label, NULL, true);
+ ImVec2 size = ImVec2(label_size.x + g.Style.FramePadding.x, label_size.y + g.Style.FramePadding.y * 2.0f);
+ if (has_close_button)
+ size.x += g.Style.FramePadding.x + (g.Style.ItemInnerSpacing.x + g.FontSize); // We use Y intentionally to fit the close button circle.
+ else
+ size.x += g.Style.FramePadding.x + 1.0f;
+ return ImVec2(ImMin(size.x, TabBarCalcMaxTabWidth()), size.y);
+}
+
+void ImGui::TabItemBackground(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImU32 col)
+{
+ // While rendering tabs, we trim 1 pixel off the top of our bounding box so they can fit within a regular frame height while looking "detached" from it.
+ ImGuiContext& g = *GImGui;
+ const float width = bb.GetWidth();
+ IM_UNUSED(flags);
+ IM_ASSERT(width > 0.0f);
+ const float rounding = ImMax(0.0f, ImMin((flags & ImGuiTabItemFlags_Button) ? g.Style.FrameRounding : g.Style.TabRounding, width * 0.5f - 1.0f));
+ const float y1 = bb.Min.y + 1.0f;
+ const float y2 = bb.Max.y - 1.0f;
+ draw_list->PathLineTo(ImVec2(bb.Min.x, y2));
+ draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding, y1 + rounding), rounding, 6, 9);
+ draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding, y1 + rounding), rounding, 9, 12);
+ draw_list->PathLineTo(ImVec2(bb.Max.x, y2));
+ draw_list->PathFillConvex(col);
+ if (g.Style.TabBorderSize > 0.0f)
+ {
+ draw_list->PathLineTo(ImVec2(bb.Min.x + 0.5f, y2));
+ draw_list->PathArcToFast(ImVec2(bb.Min.x + rounding + 0.5f, y1 + rounding + 0.5f), rounding, 6, 9);
+ draw_list->PathArcToFast(ImVec2(bb.Max.x - rounding - 0.5f, y1 + rounding + 0.5f), rounding, 9, 12);
+ draw_list->PathLineTo(ImVec2(bb.Max.x - 0.5f, y2));
+ draw_list->PathStroke(GetColorU32(ImGuiCol_Border), 0, g.Style.TabBorderSize);
+ }
+}
+
+// Render text label (with custom clipping) + Unsaved Document marker + Close Button logic
+// We tend to lock style.FramePadding for a given tab-bar, hence the 'frame_padding' parameter.
+void ImGui::TabItemLabelAndCloseButton(ImDrawList* draw_list, const ImRect& bb, ImGuiTabItemFlags flags, ImVec2 frame_padding, const char* label, ImGuiID tab_id, ImGuiID close_button_id, bool is_contents_visible, bool* out_just_closed, bool* out_text_clipped)
+{
+ ImGuiContext& g = *GImGui;
+ ImVec2 label_size = CalcTextSize(label, NULL, true);
+
+ if (out_just_closed)
+ *out_just_closed = false;
+ if (out_text_clipped)
+ *out_text_clipped = false;
+
+ if (bb.GetWidth() <= 1.0f)
+ return;
+
+ // In Style V2 we'll have full override of all colors per state (e.g. focused, selected)
+ // But right now if you want to alter text color of tabs this is what you need to do.
+#if 0
+ const float backup_alpha = g.Style.Alpha;
+ if (!is_contents_visible)
+ g.Style.Alpha *= 0.7f;
+#endif
+
+ // Render text label (with clipping + alpha gradient) + unsaved marker
+ ImRect text_pixel_clip_bb(bb.Min.x + frame_padding.x, bb.Min.y + frame_padding.y, bb.Max.x - frame_padding.x, bb.Max.y);
+ ImRect text_ellipsis_clip_bb = text_pixel_clip_bb;
+
+ // Return clipped state ignoring the close button
+ if (out_text_clipped)
+ {
+ *out_text_clipped = (text_ellipsis_clip_bb.Min.x + label_size.x) > text_pixel_clip_bb.Max.x;
+ //draw_list->AddCircle(text_ellipsis_clip_bb.Min, 3.0f, *out_text_clipped ? IM_COL32(255, 0, 0, 255) : IM_COL32(0, 255, 0, 255));
+ }
+
+ const float button_sz = g.FontSize;
+ const ImVec2 button_pos(ImMax(bb.Min.x, bb.Max.x - frame_padding.x * 2.0f - button_sz), bb.Min.y);
+
+ // Close Button & Unsaved Marker
+ // We are relying on a subtle and confusing distinction between 'hovered' and 'g.HoveredId' which happens because we are using ImGuiButtonFlags_AllowOverlapMode + SetItemAllowOverlap()
+ // 'hovered' will be true when hovering the Tab but NOT when hovering the close button
+ // 'g.HoveredId==id' will be true when hovering the Tab including when hovering the close button
+ // 'g.ActiveId==close_button_id' will be true when we are holding on the close button, in which case both hovered booleans are false
+ bool close_button_pressed = false;
+ bool close_button_visible = false;
+ if (close_button_id != 0)
+ if (is_contents_visible || bb.GetWidth() >= ImMax(button_sz, g.Style.TabMinWidthForCloseButton))
+ if (g.HoveredId == tab_id || g.HoveredId == close_button_id || g.ActiveId == tab_id || g.ActiveId == close_button_id)
+ close_button_visible = true;
+ bool unsaved_marker_visible = (flags & ImGuiTabItemFlags_UnsavedDocument) != 0 && (button_pos.x + button_sz <= bb.Max.x);
+
+ if (close_button_visible)
+ {
+ ImGuiLastItemData last_item_backup = g.LastItemData;
+ PushStyleVar(ImGuiStyleVar_FramePadding, frame_padding);
+ if (CloseButton(close_button_id, button_pos))
+ close_button_pressed = true;
+ PopStyleVar();
+ g.LastItemData = last_item_backup;
+
+ // Close with middle mouse button
+ if (!(flags & ImGuiTabItemFlags_NoCloseWithMiddleMouseButton) && IsMouseClicked(2))
+ close_button_pressed = true;
+ }
+ else if (unsaved_marker_visible)
+ {
+ const ImRect bullet_bb(button_pos, button_pos + ImVec2(button_sz, button_sz) + g.Style.FramePadding * 2.0f);
+ RenderBullet(draw_list, bullet_bb.GetCenter(), GetColorU32(ImGuiCol_Text));
+ }
+
+ // This is all rather complicated
+ // (the main idea is that because the close button only appears on hover, we don't want it to alter the ellipsis position)
+ // FIXME: if FramePadding is noticeably large, ellipsis_max_x will be wrong here (e.g. #3497), maybe for consistency that parameter of RenderTextEllipsis() shouldn't exist..
+ float ellipsis_max_x = close_button_visible ? text_pixel_clip_bb.Max.x : bb.Max.x - 1.0f;
+ if (close_button_visible || unsaved_marker_visible)
+ {
+ text_pixel_clip_bb.Max.x -= close_button_visible ? (button_sz) : (button_sz * 0.80f);
+ text_ellipsis_clip_bb.Max.x -= unsaved_marker_visible ? (button_sz * 0.80f) : 0.0f;
+ ellipsis_max_x = text_pixel_clip_bb.Max.x;
+ }
+ RenderTextEllipsis(draw_list, text_ellipsis_clip_bb.Min, text_ellipsis_clip_bb.Max, text_pixel_clip_bb.Max.x, ellipsis_max_x, label, NULL, &label_size);
+
+#if 0
+ if (!is_contents_visible)
+ g.Style.Alpha = backup_alpha;
+#endif
+
+ if (out_just_closed)
+ *out_just_closed = close_button_pressed;
+}
+
+
+#endif // #ifndef IMGUI_DISABLE
diff --git a/tests/manual/rhi/shared/imgui/imgui/imstb_rectpack.h b/tests/manual/rhi/shared/imgui/imgui/imstb_rectpack.h
new file mode 100644
index 0000000000..f6917e7a6e
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/imstb_rectpack.h
@@ -0,0 +1,627 @@
+// [DEAR IMGUI]
+// This is a slightly modified version of stb_rect_pack.h 1.01.
+// Grep for [DEAR IMGUI] to find the changes.
+//
+// stb_rect_pack.h - v1.01 - public domain - rectangle packing
+// Sean Barrett 2014
+//
+// Useful for e.g. packing rectangular textures into an atlas.
+// Does not do rotation.
+//
+// Before #including,
+//
+// #define STB_RECT_PACK_IMPLEMENTATION
+//
+// in the file that you want to have the implementation.
+//
+// Not necessarily the awesomest packing method, but better than
+// the totally naive one in stb_truetype (which is primarily what
+// this is meant to replace).
+//
+// Has only had a few tests run, may have issues.
+//
+// More docs to come.
+//
+// No memory allocations; uses qsort() and assert() from stdlib.
+// Can override those by defining STBRP_SORT and STBRP_ASSERT.
+//
+// This library currently uses the Skyline Bottom-Left algorithm.
+//
+// Please note: better rectangle packers are welcome! Please
+// implement them to the same API, but with a different init
+// function.
+//
+// Credits
+//
+// Library
+// Sean Barrett
+// Minor features
+// Martins Mozeiko
+// github:IntellectualKitty
+//
+// Bugfixes / warning fixes
+// Jeremy Jaussaud
+// Fabian Giesen
+//
+// Version history:
+//
+// 1.01 (2021-07-11) always use large rect mode, expose STBRP__MAXVAL in public section
+// 1.00 (2019-02-25) avoid small space waste; gracefully fail too-wide rectangles
+// 0.99 (2019-02-07) warning fixes
+// 0.11 (2017-03-03) return packing success/fail result
+// 0.10 (2016-10-25) remove cast-away-const to avoid warnings
+// 0.09 (2016-08-27) fix compiler warnings
+// 0.08 (2015-09-13) really fix bug with empty rects (w=0 or h=0)
+// 0.07 (2015-09-13) fix bug with empty rects (w=0 or h=0)
+// 0.06 (2015-04-15) added STBRP_SORT to allow replacing qsort
+// 0.05: added STBRP_ASSERT to allow replacing assert
+// 0.04: fixed minor bug in STBRP_LARGE_RECTS support
+// 0.01: initial release
+//
+// LICENSE
+//
+// See end of file for license information.
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// INCLUDE SECTION
+//
+
+#ifndef STB_INCLUDE_STB_RECT_PACK_H
+#define STB_INCLUDE_STB_RECT_PACK_H
+
+#define STB_RECT_PACK_VERSION 1
+
+#ifdef STBRP_STATIC
+#define STBRP_DEF static
+#else
+#define STBRP_DEF extern
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct stbrp_context stbrp_context;
+typedef struct stbrp_node stbrp_node;
+typedef struct stbrp_rect stbrp_rect;
+
+typedef int stbrp_coord;
+
+#define STBRP__MAXVAL 0x7fffffff
+// Mostly for internal use, but this is the maximum supported coordinate value.
+
+STBRP_DEF int stbrp_pack_rects (stbrp_context *context, stbrp_rect *rects, int num_rects);
+// Assign packed locations to rectangles. The rectangles are of type
+// 'stbrp_rect' defined below, stored in the array 'rects', and there
+// are 'num_rects' many of them.
+//
+// Rectangles which are successfully packed have the 'was_packed' flag
+// set to a non-zero value and 'x' and 'y' store the minimum location
+// on each axis (i.e. bottom-left in cartesian coordinates, top-left
+// if you imagine y increasing downwards). Rectangles which do not fit
+// have the 'was_packed' flag set to 0.
+//
+// You should not try to access the 'rects' array from another thread
+// while this function is running, as the function temporarily reorders
+// the array while it executes.
+//
+// To pack into another rectangle, you need to call stbrp_init_target
+// again. To continue packing into the same rectangle, you can call
+// this function again. Calling this multiple times with multiple rect
+// arrays will probably produce worse packing results than calling it
+// a single time with the full rectangle array, but the option is
+// available.
+//
+// The function returns 1 if all of the rectangles were successfully
+// packed and 0 otherwise.
+
+struct stbrp_rect
+{
+ // reserved for your use:
+ int id;
+
+ // input:
+ stbrp_coord w, h;
+
+ // output:
+ stbrp_coord x, y;
+ int was_packed; // non-zero if valid packing
+
+}; // 16 bytes, nominally
+
+
+STBRP_DEF void stbrp_init_target (stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes);
+// Initialize a rectangle packer to:
+// pack a rectangle that is 'width' by 'height' in dimensions
+// using temporary storage provided by the array 'nodes', which is 'num_nodes' long
+//
+// You must call this function every time you start packing into a new target.
+//
+// There is no "shutdown" function. The 'nodes' memory must stay valid for
+// the following stbrp_pack_rects() call (or calls), but can be freed after
+// the call (or calls) finish.
+//
+// Note: to guarantee best results, either:
+// 1. make sure 'num_nodes' >= 'width'
+// or 2. call stbrp_allow_out_of_mem() defined below with 'allow_out_of_mem = 1'
+//
+// If you don't do either of the above things, widths will be quantized to multiples
+// of small integers to guarantee the algorithm doesn't run out of temporary storage.
+//
+// If you do #2, then the non-quantized algorithm will be used, but the algorithm
+// may run out of temporary storage and be unable to pack some rectangles.
+
+STBRP_DEF void stbrp_setup_allow_out_of_mem (stbrp_context *context, int allow_out_of_mem);
+// Optionally call this function after init but before doing any packing to
+// change the handling of the out-of-temp-memory scenario, described above.
+// If you call init again, this will be reset to the default (false).
+
+
+STBRP_DEF void stbrp_setup_heuristic (stbrp_context *context, int heuristic);
+// Optionally select which packing heuristic the library should use. Different
+// heuristics will produce better/worse results for different data sets.
+// If you call init again, this will be reset to the default.
+
+enum
+{
+ STBRP_HEURISTIC_Skyline_default=0,
+ STBRP_HEURISTIC_Skyline_BL_sortHeight = STBRP_HEURISTIC_Skyline_default,
+ STBRP_HEURISTIC_Skyline_BF_sortHeight
+};
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// the details of the following structures don't matter to you, but they must
+// be visible so you can handle the memory allocations for them
+
+struct stbrp_node
+{
+ stbrp_coord x,y;
+ stbrp_node *next;
+};
+
+struct stbrp_context
+{
+ int width;
+ int height;
+ int align;
+ int init_mode;
+ int heuristic;
+ int num_nodes;
+ stbrp_node *active_head;
+ stbrp_node *free_head;
+ stbrp_node extra[2]; // we allocate two extra nodes so optimal user-node-count is 'width' not 'width+2'
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// IMPLEMENTATION SECTION
+//
+
+#ifdef STB_RECT_PACK_IMPLEMENTATION
+#ifndef STBRP_SORT
+#include <stdlib.h>
+#define STBRP_SORT qsort
+#endif
+
+#ifndef STBRP_ASSERT
+#include <assert.h>
+#define STBRP_ASSERT assert
+#endif
+
+#ifdef _MSC_VER
+#define STBRP__NOTUSED(v) (void)(v)
+#define STBRP__CDECL __cdecl
+#else
+#define STBRP__NOTUSED(v) (void)sizeof(v)
+#define STBRP__CDECL
+#endif
+
+enum
+{
+ STBRP__INIT_skyline = 1
+};
+
+STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
+{
+ switch (context->init_mode) {
+ case STBRP__INIT_skyline:
+ STBRP_ASSERT(heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight || heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight);
+ context->heuristic = heuristic;
+ break;
+ default:
+ STBRP_ASSERT(0);
+ }
+}
+
+STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int allow_out_of_mem)
+{
+ if (allow_out_of_mem)
+ // if it's ok to run out of memory, then don't bother aligning them;
+ // this gives better packing, but may fail due to OOM (even though
+ // the rectangles easily fit). @TODO a smarter approach would be to only
+ // quantize once we've hit OOM, then we could get rid of this parameter.
+ context->align = 1;
+ else {
+ // if it's not ok to run out of memory, then quantize the widths
+ // so that num_nodes is always enough nodes.
+ //
+ // I.e. num_nodes * align >= width
+ // align >= width / num_nodes
+ // align = ceil(width/num_nodes)
+
+ context->align = (context->width + context->num_nodes-1) / context->num_nodes;
+ }
+}
+
+STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes)
+{
+ int i;
+
+ for (i=0; i < num_nodes-1; ++i)
+ nodes[i].next = &nodes[i+1];
+ nodes[i].next = NULL;
+ context->init_mode = STBRP__INIT_skyline;
+ context->heuristic = STBRP_HEURISTIC_Skyline_default;
+ context->free_head = &nodes[0];
+ context->active_head = &context->extra[0];
+ context->width = width;
+ context->height = height;
+ context->num_nodes = num_nodes;
+ stbrp_setup_allow_out_of_mem(context, 0);
+
+ // node 0 is the full width, node 1 is the sentinel (lets us not store width explicitly)
+ context->extra[0].x = 0;
+ context->extra[0].y = 0;
+ context->extra[0].next = &context->extra[1];
+ context->extra[1].x = (stbrp_coord) width;
+ context->extra[1].y = (1<<30);
+ context->extra[1].next = NULL;
+}
+
+// find minimum y position if it starts at x1
+static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first, int x0, int width, int *pwaste)
+{
+ stbrp_node *node = first;
+ int x1 = x0 + width;
+ int min_y, visited_width, waste_area;
+
+ STBRP__NOTUSED(c);
+
+ STBRP_ASSERT(first->x <= x0);
+
+ #if 0
+ // skip in case we're past the node
+ while (node->next->x <= x0)
+ ++node;
+ #else
+ STBRP_ASSERT(node->next->x > x0); // we ended up handling this in the caller for efficiency
+ #endif
+
+ STBRP_ASSERT(node->x <= x0);
+
+ min_y = 0;
+ waste_area = 0;
+ visited_width = 0;
+ while (node->x < x1) {
+ if (node->y > min_y) {
+ // raise min_y higher.
+ // we've accounted for all waste up to min_y,
+ // but we'll now add more waste for everything we've visted
+ waste_area += visited_width * (node->y - min_y);
+ min_y = node->y;
+ // the first time through, visited_width might be reduced
+ if (node->x < x0)
+ visited_width += node->next->x - x0;
+ else
+ visited_width += node->next->x - node->x;
+ } else {
+ // add waste area
+ int under_width = node->next->x - node->x;
+ if (under_width + visited_width > width)
+ under_width = width - visited_width;
+ waste_area += under_width * (min_y - node->y);
+ visited_width += under_width;
+ }
+ node = node->next;
+ }
+
+ *pwaste = waste_area;
+ return min_y;
+}
+
+typedef struct
+{
+ int x,y;
+ stbrp_node **prev_link;
+} stbrp__findresult;
+
+static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int width, int height)
+{
+ int best_waste = (1<<30), best_x, best_y = (1 << 30);
+ stbrp__findresult fr;
+ stbrp_node **prev, *node, *tail, **best = NULL;
+
+ // align to multiple of c->align
+ width = (width + c->align - 1);
+ width -= width % c->align;
+ STBRP_ASSERT(width % c->align == 0);
+
+ // if it can't possibly fit, bail immediately
+ if (width > c->width || height > c->height) {
+ fr.prev_link = NULL;
+ fr.x = fr.y = 0;
+ return fr;
+ }
+
+ node = c->active_head;
+ prev = &c->active_head;
+ while (node->x + width <= c->width) {
+ int y,waste;
+ y = stbrp__skyline_find_min_y(c, node, node->x, width, &waste);
+ if (c->heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight) { // actually just want to test BL
+ // bottom left
+ if (y < best_y) {
+ best_y = y;
+ best = prev;
+ }
+ } else {
+ // best-fit
+ if (y + height <= c->height) {
+ // can only use it if it first vertically
+ if (y < best_y || (y == best_y && waste < best_waste)) {
+ best_y = y;
+ best_waste = waste;
+ best = prev;
+ }
+ }
+ }
+ prev = &node->next;
+ node = node->next;
+ }
+
+ best_x = (best == NULL) ? 0 : (*best)->x;
+
+ // if doing best-fit (BF), we also have to try aligning right edge to each node position
+ //
+ // e.g, if fitting
+ //
+ // ____________________
+ // |____________________|
+ //
+ // into
+ //
+ // | |
+ // | ____________|
+ // |____________|
+ //
+ // then right-aligned reduces waste, but bottom-left BL is always chooses left-aligned
+ //
+ // This makes BF take about 2x the time
+
+ if (c->heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight) {
+ tail = c->active_head;
+ node = c->active_head;
+ prev = &c->active_head;
+ // find first node that's admissible
+ while (tail->x < width)
+ tail = tail->next;
+ while (tail) {
+ int xpos = tail->x - width;
+ int y,waste;
+ STBRP_ASSERT(xpos >= 0);
+ // find the left position that matches this
+ while (node->next->x <= xpos) {
+ prev = &node->next;
+ node = node->next;
+ }
+ STBRP_ASSERT(node->next->x > xpos && node->x <= xpos);
+ y = stbrp__skyline_find_min_y(c, node, xpos, width, &waste);
+ if (y + height <= c->height) {
+ if (y <= best_y) {
+ if (y < best_y || waste < best_waste || (waste==best_waste && xpos < best_x)) {
+ best_x = xpos;
+ //STBRP_ASSERT(y <= best_y); [DEAR IMGUI]
+ best_y = y;
+ best_waste = waste;
+ best = prev;
+ }
+ }
+ }
+ tail = tail->next;
+ }
+ }
+
+ fr.prev_link = best;
+ fr.x = best_x;
+ fr.y = best_y;
+ return fr;
+}
+
+static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, int width, int height)
+{
+ // find best position according to heuristic
+ stbrp__findresult res = stbrp__skyline_find_best_pos(context, width, height);
+ stbrp_node *node, *cur;
+
+ // bail if:
+ // 1. it failed
+ // 2. the best node doesn't fit (we don't always check this)
+ // 3. we're out of memory
+ if (res.prev_link == NULL || res.y + height > context->height || context->free_head == NULL) {
+ res.prev_link = NULL;
+ return res;
+ }
+
+ // on success, create new node
+ node = context->free_head;
+ node->x = (stbrp_coord) res.x;
+ node->y = (stbrp_coord) (res.y + height);
+
+ context->free_head = node->next;
+
+ // insert the new node into the right starting point, and
+ // let 'cur' point to the remaining nodes needing to be
+ // stiched back in
+
+ cur = *res.prev_link;
+ if (cur->x < res.x) {
+ // preserve the existing one, so start testing with the next one
+ stbrp_node *next = cur->next;
+ cur->next = node;
+ cur = next;
+ } else {
+ *res.prev_link = node;
+ }
+
+ // from here, traverse cur and free the nodes, until we get to one
+ // that shouldn't be freed
+ while (cur->next && cur->next->x <= res.x + width) {
+ stbrp_node *next = cur->next;
+ // move the current node to the free list
+ cur->next = context->free_head;
+ context->free_head = cur;
+ cur = next;
+ }
+
+ // stitch the list back in
+ node->next = cur;
+
+ if (cur->x < res.x + width)
+ cur->x = (stbrp_coord) (res.x + width);
+
+#ifdef _DEBUG
+ cur = context->active_head;
+ while (cur->x < context->width) {
+ STBRP_ASSERT(cur->x < cur->next->x);
+ cur = cur->next;
+ }
+ STBRP_ASSERT(cur->next == NULL);
+
+ {
+ int count=0;
+ cur = context->active_head;
+ while (cur) {
+ cur = cur->next;
+ ++count;
+ }
+ cur = context->free_head;
+ while (cur) {
+ cur = cur->next;
+ ++count;
+ }
+ STBRP_ASSERT(count == context->num_nodes+2);
+ }
+#endif
+
+ return res;
+}
+
+static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
+{
+ const stbrp_rect *p = (const stbrp_rect *) a;
+ const stbrp_rect *q = (const stbrp_rect *) b;
+ if (p->h > q->h)
+ return -1;
+ if (p->h < q->h)
+ return 1;
+ return (p->w > q->w) ? -1 : (p->w < q->w);
+}
+
+static int STBRP__CDECL rect_original_order(const void *a, const void *b)
+{
+ const stbrp_rect *p = (const stbrp_rect *) a;
+ const stbrp_rect *q = (const stbrp_rect *) b;
+ return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed);
+}
+
+STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects)
+{
+ int i, all_rects_packed = 1;
+
+ // we use the 'was_packed' field internally to allow sorting/unsorting
+ for (i=0; i < num_rects; ++i) {
+ rects[i].was_packed = i;
+ }
+
+ // sort according to heuristic
+ STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_height_compare);
+
+ for (i=0; i < num_rects; ++i) {
+ if (rects[i].w == 0 || rects[i].h == 0) {
+ rects[i].x = rects[i].y = 0; // empty rect needs no space
+ } else {
+ stbrp__findresult fr = stbrp__skyline_pack_rectangle(context, rects[i].w, rects[i].h);
+ if (fr.prev_link) {
+ rects[i].x = (stbrp_coord) fr.x;
+ rects[i].y = (stbrp_coord) fr.y;
+ } else {
+ rects[i].x = rects[i].y = STBRP__MAXVAL;
+ }
+ }
+ }
+
+ // unsort
+ STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_original_order);
+
+ // set was_packed flags and all_rects_packed status
+ for (i=0; i < num_rects; ++i) {
+ rects[i].was_packed = !(rects[i].x == STBRP__MAXVAL && rects[i].y == STBRP__MAXVAL);
+ if (!rects[i].was_packed)
+ all_rects_packed = 0;
+ }
+
+ // return the all_rects_packed status
+ return all_rects_packed;
+}
+#endif
+
+/*
+------------------------------------------------------------------------------
+This software is available under 2 licenses -- choose whichever you prefer.
+------------------------------------------------------------------------------
+ALTERNATIVE A - MIT License
+Copyright (c) 2017 Sean Barrett
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+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:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+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
+AUTHORS 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 IN THE
+SOFTWARE.
+------------------------------------------------------------------------------
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+This is free and unencumbered software released into the public domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
+software, either in source code form or as a compiled binary, for any purpose,
+commercial or non-commercial, and by any means.
+In jurisdictions that recognize copyright laws, the author or authors of this
+software dedicate any and all copyright interest in the software to the public
+domain. We make this dedication for the benefit of the public at large and to
+the detriment of our heirs and successors. We intend this dedication to be an
+overt act of relinquishment in perpetuity of all present and future rights to
+this software under copyright law.
+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
+AUTHORS 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 IN THE SOFTWARE.
+------------------------------------------------------------------------------
+*/
diff --git a/tests/manual/rhi/shared/imgui/imgui/imstb_textedit.h b/tests/manual/rhi/shared/imgui/imgui/imstb_textedit.h
new file mode 100644
index 0000000000..75a159dac7
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/imstb_textedit.h
@@ -0,0 +1,1447 @@
+// [DEAR IMGUI]
+// This is a slightly modified version of stb_textedit.h 1.14.
+// Those changes would need to be pushed into nothings/stb:
+// - Fix in stb_textedit_discard_redo (see https://github.com/nothings/stb/issues/321)
+// Grep for [DEAR IMGUI] to find the changes.
+
+// stb_textedit.h - v1.14 - public domain - Sean Barrett
+// Development of this library was sponsored by RAD Game Tools
+//
+// This C header file implements the guts of a multi-line text-editing
+// widget; you implement display, word-wrapping, and low-level string
+// insertion/deletion, and stb_textedit will map user inputs into
+// insertions & deletions, plus updates to the cursor position,
+// selection state, and undo state.
+//
+// It is intended for use in games and other systems that need to build
+// their own custom widgets and which do not have heavy text-editing
+// requirements (this library is not recommended for use for editing large
+// texts, as its performance does not scale and it has limited undo).
+//
+// Non-trivial behaviors are modelled after Windows text controls.
+//
+//
+// LICENSE
+//
+// See end of file for license information.
+//
+//
+// DEPENDENCIES
+//
+// Uses the C runtime function 'memmove', which you can override
+// by defining STB_TEXTEDIT_memmove before the implementation.
+// Uses no other functions. Performs no runtime allocations.
+//
+//
+// VERSION HISTORY
+//
+// 1.14 (2021-07-11) page up/down, various fixes
+// 1.13 (2019-02-07) fix bug in undo size management
+// 1.12 (2018-01-29) user can change STB_TEXTEDIT_KEYTYPE, fix redo to avoid crash
+// 1.11 (2017-03-03) fix HOME on last line, dragging off single-line textfield
+// 1.10 (2016-10-25) supress warnings about casting away const with -Wcast-qual
+// 1.9 (2016-08-27) customizable move-by-word
+// 1.8 (2016-04-02) better keyboard handling when mouse button is down
+// 1.7 (2015-09-13) change y range handling in case baseline is non-0
+// 1.6 (2015-04-15) allow STB_TEXTEDIT_memmove
+// 1.5 (2014-09-10) add support for secondary keys for OS X
+// 1.4 (2014-08-17) fix signed/unsigned warnings
+// 1.3 (2014-06-19) fix mouse clicking to round to nearest char boundary
+// 1.2 (2014-05-27) fix some RAD types that had crept into the new code
+// 1.1 (2013-12-15) move-by-word (requires STB_TEXTEDIT_IS_SPACE )
+// 1.0 (2012-07-26) improve documentation, initial public release
+// 0.3 (2012-02-24) bugfixes, single-line mode; insert mode
+// 0.2 (2011-11-28) fixes to undo/redo
+// 0.1 (2010-07-08) initial version
+//
+// ADDITIONAL CONTRIBUTORS
+//
+// Ulf Winklemann: move-by-word in 1.1
+// Fabian Giesen: secondary key inputs in 1.5
+// Martins Mozeiko: STB_TEXTEDIT_memmove in 1.6
+// Louis Schnellbach: page up/down in 1.14
+//
+// Bugfixes:
+// Scott Graham
+// Daniel Keller
+// Omar Cornut
+// Dan Thompson
+//
+// USAGE
+//
+// This file behaves differently depending on what symbols you define
+// before including it.
+//
+//
+// Header-file mode:
+//
+// If you do not define STB_TEXTEDIT_IMPLEMENTATION before including this,
+// it will operate in "header file" mode. In this mode, it declares a
+// single public symbol, STB_TexteditState, which encapsulates the current
+// state of a text widget (except for the string, which you will store
+// separately).
+//
+// To compile in this mode, you must define STB_TEXTEDIT_CHARTYPE to a
+// primitive type that defines a single character (e.g. char, wchar_t, etc).
+//
+// To save space or increase undo-ability, you can optionally define the
+// following things that are used by the undo system:
+//
+// STB_TEXTEDIT_POSITIONTYPE small int type encoding a valid cursor position
+// STB_TEXTEDIT_UNDOSTATECOUNT the number of undo states to allow
+// STB_TEXTEDIT_UNDOCHARCOUNT the number of characters to store in the undo buffer
+//
+// If you don't define these, they are set to permissive types and
+// moderate sizes. The undo system does no memory allocations, so
+// it grows STB_TexteditState by the worst-case storage which is (in bytes):
+//
+// [4 + 3 * sizeof(STB_TEXTEDIT_POSITIONTYPE)] * STB_TEXTEDIT_UNDOSTATECOUNT
+// + sizeof(STB_TEXTEDIT_CHARTYPE) * STB_TEXTEDIT_UNDOCHARCOUNT
+//
+//
+// Implementation mode:
+//
+// If you define STB_TEXTEDIT_IMPLEMENTATION before including this, it
+// will compile the implementation of the text edit widget, depending
+// on a large number of symbols which must be defined before the include.
+//
+// The implementation is defined only as static functions. You will then
+// need to provide your own APIs in the same file which will access the
+// static functions.
+//
+// The basic concept is that you provide a "string" object which
+// behaves like an array of characters. stb_textedit uses indices to
+// refer to positions in the string, implicitly representing positions
+// in the displayed textedit. This is true for both plain text and
+// rich text; even with rich text stb_truetype interacts with your
+// code as if there was an array of all the displayed characters.
+//
+// Symbols that must be the same in header-file and implementation mode:
+//
+// STB_TEXTEDIT_CHARTYPE the character type
+// STB_TEXTEDIT_POSITIONTYPE small type that is a valid cursor position
+// STB_TEXTEDIT_UNDOSTATECOUNT the number of undo states to allow
+// STB_TEXTEDIT_UNDOCHARCOUNT the number of characters to store in the undo buffer
+//
+// Symbols you must define for implementation mode:
+//
+// STB_TEXTEDIT_STRING the type of object representing a string being edited,
+// typically this is a wrapper object with other data you need
+//
+// STB_TEXTEDIT_STRINGLEN(obj) the length of the string (ideally O(1))
+// STB_TEXTEDIT_LAYOUTROW(&r,obj,n) returns the results of laying out a line of characters
+// starting from character #n (see discussion below)
+// STB_TEXTEDIT_GETWIDTH(obj,n,i) returns the pixel delta from the xpos of the i'th character
+// to the xpos of the i+1'th char for a line of characters
+// starting at character #n (i.e. accounts for kerning
+// with previous char)
+// STB_TEXTEDIT_KEYTOTEXT(k) maps a keyboard input to an insertable character
+// (return type is int, -1 means not valid to insert)
+// STB_TEXTEDIT_GETCHAR(obj,i) returns the i'th character of obj, 0-based
+// STB_TEXTEDIT_NEWLINE the character returned by _GETCHAR() we recognize
+// as manually wordwrapping for end-of-line positioning
+//
+// STB_TEXTEDIT_DELETECHARS(obj,i,n) delete n characters starting at i
+// STB_TEXTEDIT_INSERTCHARS(obj,i,c*,n) insert n characters at i (pointed to by STB_TEXTEDIT_CHARTYPE*)
+//
+// STB_TEXTEDIT_K_SHIFT a power of two that is or'd in to a keyboard input to represent the shift key
+//
+// STB_TEXTEDIT_K_LEFT keyboard input to move cursor left
+// STB_TEXTEDIT_K_RIGHT keyboard input to move cursor right
+// STB_TEXTEDIT_K_UP keyboard input to move cursor up
+// STB_TEXTEDIT_K_DOWN keyboard input to move cursor down
+// STB_TEXTEDIT_K_PGUP keyboard input to move cursor up a page
+// STB_TEXTEDIT_K_PGDOWN keyboard input to move cursor down a page
+// STB_TEXTEDIT_K_LINESTART keyboard input to move cursor to start of line // e.g. HOME
+// STB_TEXTEDIT_K_LINEEND keyboard input to move cursor to end of line // e.g. END
+// STB_TEXTEDIT_K_TEXTSTART keyboard input to move cursor to start of text // e.g. ctrl-HOME
+// STB_TEXTEDIT_K_TEXTEND keyboard input to move cursor to end of text // e.g. ctrl-END
+// STB_TEXTEDIT_K_DELETE keyboard input to delete selection or character under cursor
+// STB_TEXTEDIT_K_BACKSPACE keyboard input to delete selection or character left of cursor
+// STB_TEXTEDIT_K_UNDO keyboard input to perform undo
+// STB_TEXTEDIT_K_REDO keyboard input to perform redo
+//
+// Optional:
+// STB_TEXTEDIT_K_INSERT keyboard input to toggle insert mode
+// STB_TEXTEDIT_IS_SPACE(ch) true if character is whitespace (e.g. 'isspace'),
+// required for default WORDLEFT/WORDRIGHT handlers
+// STB_TEXTEDIT_MOVEWORDLEFT(obj,i) custom handler for WORDLEFT, returns index to move cursor to
+// STB_TEXTEDIT_MOVEWORDRIGHT(obj,i) custom handler for WORDRIGHT, returns index to move cursor to
+// STB_TEXTEDIT_K_WORDLEFT keyboard input to move cursor left one word // e.g. ctrl-LEFT
+// STB_TEXTEDIT_K_WORDRIGHT keyboard input to move cursor right one word // e.g. ctrl-RIGHT
+// STB_TEXTEDIT_K_LINESTART2 secondary keyboard input to move cursor to start of line
+// STB_TEXTEDIT_K_LINEEND2 secondary keyboard input to move cursor to end of line
+// STB_TEXTEDIT_K_TEXTSTART2 secondary keyboard input to move cursor to start of text
+// STB_TEXTEDIT_K_TEXTEND2 secondary keyboard input to move cursor to end of text
+//
+// Keyboard input must be encoded as a single integer value; e.g. a character code
+// and some bitflags that represent shift states. to simplify the interface, SHIFT must
+// be a bitflag, so we can test the shifted state of cursor movements to allow selection,
+// i.e. (STB_TEXTEDIT_K_RIGHT|STB_TEXTEDIT_K_SHIFT) should be shifted right-arrow.
+//
+// You can encode other things, such as CONTROL or ALT, in additional bits, and
+// then test for their presence in e.g. STB_TEXTEDIT_K_WORDLEFT. For example,
+// my Windows implementations add an additional CONTROL bit, and an additional KEYDOWN
+// bit. Then all of the STB_TEXTEDIT_K_ values bitwise-or in the KEYDOWN bit,
+// and I pass both WM_KEYDOWN and WM_CHAR events to the "key" function in the
+// API below. The control keys will only match WM_KEYDOWN events because of the
+// keydown bit I add, and STB_TEXTEDIT_KEYTOTEXT only tests for the KEYDOWN
+// bit so it only decodes WM_CHAR events.
+//
+// STB_TEXTEDIT_LAYOUTROW returns information about the shape of one displayed
+// row of characters assuming they start on the i'th character--the width and
+// the height and the number of characters consumed. This allows this library
+// to traverse the entire layout incrementally. You need to compute word-wrapping
+// here.
+//
+// Each textfield keeps its own insert mode state, which is not how normal
+// applications work. To keep an app-wide insert mode, update/copy the
+// "insert_mode" field of STB_TexteditState before/after calling API functions.
+//
+// API
+//
+// void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line)
+//
+// void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
+// void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
+// int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+// int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len)
+// void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXEDIT_KEYTYPE key)
+//
+// Each of these functions potentially updates the string and updates the
+// state.
+//
+// initialize_state:
+// set the textedit state to a known good default state when initially
+// constructing the textedit.
+//
+// click:
+// call this with the mouse x,y on a mouse down; it will update the cursor
+// and reset the selection start/end to the cursor point. the x,y must
+// be relative to the text widget, with (0,0) being the top left.
+//
+// drag:
+// call this with the mouse x,y on a mouse drag/up; it will update the
+// cursor and the selection end point
+//
+// cut:
+// call this to delete the current selection; returns true if there was
+// one. you should FIRST copy the current selection to the system paste buffer.
+// (To copy, just copy the current selection out of the string yourself.)
+//
+// paste:
+// call this to paste text at the current cursor point or over the current
+// selection if there is one.
+//
+// key:
+// call this for keyboard inputs sent to the textfield. you can use it
+// for "key down" events or for "translated" key events. if you need to
+// do both (as in Win32), or distinguish Unicode characters from control
+// inputs, set a high bit to distinguish the two; then you can define the
+// various definitions like STB_TEXTEDIT_K_LEFT have the is-key-event bit
+// set, and make STB_TEXTEDIT_KEYTOCHAR check that the is-key-event bit is
+// clear. STB_TEXTEDIT_KEYTYPE defaults to int, but you can #define it to
+// anything other type you wante before including.
+//
+//
+// When rendering, you can read the cursor position and selection state from
+// the STB_TexteditState.
+//
+//
+// Notes:
+//
+// This is designed to be usable in IMGUI, so it allows for the possibility of
+// running in an IMGUI that has NOT cached the multi-line layout. For this
+// reason, it provides an interface that is compatible with computing the
+// layout incrementally--we try to make sure we make as few passes through
+// as possible. (For example, to locate the mouse pointer in the text, we
+// could define functions that return the X and Y positions of characters
+// and binary search Y and then X, but if we're doing dynamic layout this
+// will run the layout algorithm many times, so instead we manually search
+// forward in one pass. Similar logic applies to e.g. up-arrow and
+// down-arrow movement.)
+//
+// If it's run in a widget that *has* cached the layout, then this is less
+// efficient, but it's not horrible on modern computers. But you wouldn't
+// want to edit million-line files with it.
+
+
+////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////
+////
+//// Header-file mode
+////
+////
+
+#ifndef INCLUDE_STB_TEXTEDIT_H
+#define INCLUDE_STB_TEXTEDIT_H
+
+////////////////////////////////////////////////////////////////////////
+//
+// STB_TexteditState
+//
+// Definition of STB_TexteditState which you should store
+// per-textfield; it includes cursor position, selection state,
+// and undo state.
+//
+
+#ifndef STB_TEXTEDIT_UNDOSTATECOUNT
+#define STB_TEXTEDIT_UNDOSTATECOUNT 99
+#endif
+#ifndef STB_TEXTEDIT_UNDOCHARCOUNT
+#define STB_TEXTEDIT_UNDOCHARCOUNT 999
+#endif
+#ifndef STB_TEXTEDIT_CHARTYPE
+#define STB_TEXTEDIT_CHARTYPE int
+#endif
+#ifndef STB_TEXTEDIT_POSITIONTYPE
+#define STB_TEXTEDIT_POSITIONTYPE int
+#endif
+
+typedef struct
+{
+ // private data
+ STB_TEXTEDIT_POSITIONTYPE where;
+ STB_TEXTEDIT_POSITIONTYPE insert_length;
+ STB_TEXTEDIT_POSITIONTYPE delete_length;
+ int char_storage;
+} StbUndoRecord;
+
+typedef struct
+{
+ // private data
+ StbUndoRecord undo_rec [STB_TEXTEDIT_UNDOSTATECOUNT];
+ STB_TEXTEDIT_CHARTYPE undo_char[STB_TEXTEDIT_UNDOCHARCOUNT];
+ short undo_point, redo_point;
+ int undo_char_point, redo_char_point;
+} StbUndoState;
+
+typedef struct
+{
+ /////////////////////
+ //
+ // public data
+ //
+
+ int cursor;
+ // position of the text cursor within the string
+
+ int select_start; // selection start point
+ int select_end;
+ // selection start and end point in characters; if equal, no selection.
+ // note that start may be less than or greater than end (e.g. when
+ // dragging the mouse, start is where the initial click was, and you
+ // can drag in either direction)
+
+ unsigned char insert_mode;
+ // each textfield keeps its own insert mode state. to keep an app-wide
+ // insert mode, copy this value in/out of the app state
+
+ int row_count_per_page;
+ // page size in number of row.
+ // this value MUST be set to >0 for pageup or pagedown in multilines documents.
+
+ /////////////////////
+ //
+ // private data
+ //
+ unsigned char cursor_at_end_of_line; // not implemented yet
+ unsigned char initialized;
+ unsigned char has_preferred_x;
+ unsigned char single_line;
+ unsigned char padding1, padding2, padding3;
+ float preferred_x; // this determines where the cursor up/down tries to seek to along x
+ StbUndoState undostate;
+} STB_TexteditState;
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// StbTexteditRow
+//
+// Result of layout query, used by stb_textedit to determine where
+// the text in each row is.
+
+// result of layout query
+typedef struct
+{
+ float x0,x1; // starting x location, end x location (allows for align=right, etc)
+ float baseline_y_delta; // position of baseline relative to previous row's baseline
+ float ymin,ymax; // height of row above and below baseline
+ int num_chars;
+} StbTexteditRow;
+#endif //INCLUDE_STB_TEXTEDIT_H
+
+
+////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////
+////
+//// Implementation mode
+////
+////
+
+
+// implementation isn't include-guarded, since it might have indirectly
+// included just the "header" portion
+#ifdef STB_TEXTEDIT_IMPLEMENTATION
+
+#ifndef STB_TEXTEDIT_memmove
+#include <string.h>
+#define STB_TEXTEDIT_memmove memmove
+#endif
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Mouse input handling
+//
+
+// traverse the layout to locate the nearest character to a display position
+static int stb_text_locate_coord(STB_TEXTEDIT_STRING *str, float x, float y)
+{
+ StbTexteditRow r;
+ int n = STB_TEXTEDIT_STRINGLEN(str);
+ float base_y = 0, prev_x;
+ int i=0, k;
+
+ r.x0 = r.x1 = 0;
+ r.ymin = r.ymax = 0;
+ r.num_chars = 0;
+
+ // search rows to find one that straddles 'y'
+ while (i < n) {
+ STB_TEXTEDIT_LAYOUTROW(&r, str, i);
+ if (r.num_chars <= 0)
+ return n;
+
+ if (i==0 && y < base_y + r.ymin)
+ return 0;
+
+ if (y < base_y + r.ymax)
+ break;
+
+ i += r.num_chars;
+ base_y += r.baseline_y_delta;
+ }
+
+ // below all text, return 'after' last character
+ if (i >= n)
+ return n;
+
+ // check if it's before the beginning of the line
+ if (x < r.x0)
+ return i;
+
+ // check if it's before the end of the line
+ if (x < r.x1) {
+ // search characters in row for one that straddles 'x'
+ prev_x = r.x0;
+ for (k=0; k < r.num_chars; ++k) {
+ float w = STB_TEXTEDIT_GETWIDTH(str, i, k);
+ if (x < prev_x+w) {
+ if (x < prev_x+w/2)
+ return k+i;
+ else
+ return k+i+1;
+ }
+ prev_x += w;
+ }
+ // shouldn't happen, but if it does, fall through to end-of-line case
+ }
+
+ // if the last character is a newline, return that. otherwise return 'after' the last character
+ if (STB_TEXTEDIT_GETCHAR(str, i+r.num_chars-1) == STB_TEXTEDIT_NEWLINE)
+ return i+r.num_chars-1;
+ else
+ return i+r.num_chars;
+}
+
+// API click: on mouse down, move the cursor to the clicked location, and reset the selection
+static void stb_textedit_click(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
+{
+ // In single-line mode, just always make y = 0. This lets the drag keep working if the mouse
+ // goes off the top or bottom of the text
+ if( state->single_line )
+ {
+ StbTexteditRow r;
+ STB_TEXTEDIT_LAYOUTROW(&r, str, 0);
+ y = r.ymin;
+ }
+
+ state->cursor = stb_text_locate_coord(str, x, y);
+ state->select_start = state->cursor;
+ state->select_end = state->cursor;
+ state->has_preferred_x = 0;
+}
+
+// API drag: on mouse drag, move the cursor and selection endpoint to the clicked location
+static void stb_textedit_drag(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, float x, float y)
+{
+ int p = 0;
+
+ // In single-line mode, just always make y = 0. This lets the drag keep working if the mouse
+ // goes off the top or bottom of the text
+ if( state->single_line )
+ {
+ StbTexteditRow r;
+ STB_TEXTEDIT_LAYOUTROW(&r, str, 0);
+ y = r.ymin;
+ }
+
+ if (state->select_start == state->select_end)
+ state->select_start = state->cursor;
+
+ p = stb_text_locate_coord(str, x, y);
+ state->cursor = state->select_end = p;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Keyboard input handling
+//
+
+// forward declarations
+static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state);
+static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state);
+static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length);
+static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length);
+static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length);
+
+typedef struct
+{
+ float x,y; // position of n'th character
+ float height; // height of line
+ int first_char, length; // first char of row, and length
+ int prev_first; // first char of previous row
+} StbFindState;
+
+// find the x/y location of a character, and remember info about the previous row in
+// case we get a move-up event (for page up, we'll have to rescan)
+static void stb_textedit_find_charpos(StbFindState *find, STB_TEXTEDIT_STRING *str, int n, int single_line)
+{
+ StbTexteditRow r;
+ int prev_start = 0;
+ int z = STB_TEXTEDIT_STRINGLEN(str);
+ int i=0, first;
+
+ if (n == z) {
+ // if it's at the end, then find the last line -- simpler than trying to
+ // explicitly handle this case in the regular code
+ if (single_line) {
+ STB_TEXTEDIT_LAYOUTROW(&r, str, 0);
+ find->y = 0;
+ find->first_char = 0;
+ find->length = z;
+ find->height = r.ymax - r.ymin;
+ find->x = r.x1;
+ } else {
+ find->y = 0;
+ find->x = 0;
+ find->height = 1;
+ while (i < z) {
+ STB_TEXTEDIT_LAYOUTROW(&r, str, i);
+ prev_start = i;
+ i += r.num_chars;
+ }
+ find->first_char = i;
+ find->length = 0;
+ find->prev_first = prev_start;
+ }
+ return;
+ }
+
+ // search rows to find the one that straddles character n
+ find->y = 0;
+
+ for(;;) {
+ STB_TEXTEDIT_LAYOUTROW(&r, str, i);
+ if (n < i + r.num_chars)
+ break;
+ prev_start = i;
+ i += r.num_chars;
+ find->y += r.baseline_y_delta;
+ }
+
+ find->first_char = first = i;
+ find->length = r.num_chars;
+ find->height = r.ymax - r.ymin;
+ find->prev_first = prev_start;
+
+ // now scan to find xpos
+ find->x = r.x0;
+ for (i=0; first+i < n; ++i)
+ find->x += STB_TEXTEDIT_GETWIDTH(str, first, i);
+}
+
+#define STB_TEXT_HAS_SELECTION(s) ((s)->select_start != (s)->select_end)
+
+// make the selection/cursor state valid if client altered the string
+static void stb_textedit_clamp(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+ int n = STB_TEXTEDIT_STRINGLEN(str);
+ if (STB_TEXT_HAS_SELECTION(state)) {
+ if (state->select_start > n) state->select_start = n;
+ if (state->select_end > n) state->select_end = n;
+ // if clamping forced them to be equal, move the cursor to match
+ if (state->select_start == state->select_end)
+ state->cursor = state->select_start;
+ }
+ if (state->cursor > n) state->cursor = n;
+}
+
+// delete characters while updating undo
+static void stb_textedit_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int len)
+{
+ stb_text_makeundo_delete(str, state, where, len);
+ STB_TEXTEDIT_DELETECHARS(str, where, len);
+ state->has_preferred_x = 0;
+}
+
+// delete the section
+static void stb_textedit_delete_selection(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+ stb_textedit_clamp(str, state);
+ if (STB_TEXT_HAS_SELECTION(state)) {
+ if (state->select_start < state->select_end) {
+ stb_textedit_delete(str, state, state->select_start, state->select_end - state->select_start);
+ state->select_end = state->cursor = state->select_start;
+ } else {
+ stb_textedit_delete(str, state, state->select_end, state->select_start - state->select_end);
+ state->select_start = state->cursor = state->select_end;
+ }
+ state->has_preferred_x = 0;
+ }
+}
+
+// canoncialize the selection so start <= end
+static void stb_textedit_sortselection(STB_TexteditState *state)
+{
+ if (state->select_end < state->select_start) {
+ int temp = state->select_end;
+ state->select_end = state->select_start;
+ state->select_start = temp;
+ }
+}
+
+// move cursor to first character of selection
+static void stb_textedit_move_to_first(STB_TexteditState *state)
+{
+ if (STB_TEXT_HAS_SELECTION(state)) {
+ stb_textedit_sortselection(state);
+ state->cursor = state->select_start;
+ state->select_end = state->select_start;
+ state->has_preferred_x = 0;
+ }
+}
+
+// move cursor to last character of selection
+static void stb_textedit_move_to_last(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+ if (STB_TEXT_HAS_SELECTION(state)) {
+ stb_textedit_sortselection(state);
+ stb_textedit_clamp(str, state);
+ state->cursor = state->select_end;
+ state->select_start = state->select_end;
+ state->has_preferred_x = 0;
+ }
+}
+
+#ifdef STB_TEXTEDIT_IS_SPACE
+static int is_word_boundary( STB_TEXTEDIT_STRING *str, int idx )
+{
+ return idx > 0 ? (STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str,idx-1) ) && !STB_TEXTEDIT_IS_SPACE( STB_TEXTEDIT_GETCHAR(str, idx) ) ) : 1;
+}
+
+#ifndef STB_TEXTEDIT_MOVEWORDLEFT
+static int stb_textedit_move_to_word_previous( STB_TEXTEDIT_STRING *str, int c )
+{
+ --c; // always move at least one character
+ while( c >= 0 && !is_word_boundary( str, c ) )
+ --c;
+
+ if( c < 0 )
+ c = 0;
+
+ return c;
+}
+#define STB_TEXTEDIT_MOVEWORDLEFT stb_textedit_move_to_word_previous
+#endif
+
+#ifndef STB_TEXTEDIT_MOVEWORDRIGHT
+static int stb_textedit_move_to_word_next( STB_TEXTEDIT_STRING *str, int c )
+{
+ const int len = STB_TEXTEDIT_STRINGLEN(str);
+ ++c; // always move at least one character
+ while( c < len && !is_word_boundary( str, c ) )
+ ++c;
+
+ if( c > len )
+ c = len;
+
+ return c;
+}
+#define STB_TEXTEDIT_MOVEWORDRIGHT stb_textedit_move_to_word_next
+#endif
+
+#endif
+
+// update selection and cursor to match each other
+static void stb_textedit_prep_selection_at_cursor(STB_TexteditState *state)
+{
+ if (!STB_TEXT_HAS_SELECTION(state))
+ state->select_start = state->select_end = state->cursor;
+ else
+ state->cursor = state->select_end;
+}
+
+// API cut: delete selection
+static int stb_textedit_cut(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+ if (STB_TEXT_HAS_SELECTION(state)) {
+ stb_textedit_delete_selection(str,state); // implicitly clamps
+ state->has_preferred_x = 0;
+ return 1;
+ }
+ return 0;
+}
+
+// API paste: replace existing selection with passed-in text
+static int stb_textedit_paste_internal(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE *text, int len)
+{
+ // if there's a selection, the paste should delete it
+ stb_textedit_clamp(str, state);
+ stb_textedit_delete_selection(str,state);
+ // try to insert the characters
+ if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, text, len)) {
+ stb_text_makeundo_insert(state, state->cursor, len);
+ state->cursor += len;
+ state->has_preferred_x = 0;
+ return 1;
+ }
+ // note: paste failure will leave deleted selection, may be restored with an undo (see https://github.com/nothings/stb/issues/734 for details)
+ return 0;
+}
+
+#ifndef STB_TEXTEDIT_KEYTYPE
+#define STB_TEXTEDIT_KEYTYPE int
+#endif
+
+// API key: process a keyboard input
+static void stb_textedit_key(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_KEYTYPE key)
+{
+retry:
+ switch (key) {
+ default: {
+ int c = STB_TEXTEDIT_KEYTOTEXT(key);
+ if (c > 0) {
+ STB_TEXTEDIT_CHARTYPE ch = (STB_TEXTEDIT_CHARTYPE) c;
+
+ // can't add newline in single-line mode
+ if (c == '\n' && state->single_line)
+ break;
+
+ if (state->insert_mode && !STB_TEXT_HAS_SELECTION(state) && state->cursor < STB_TEXTEDIT_STRINGLEN(str)) {
+ stb_text_makeundo_replace(str, state, state->cursor, 1, 1);
+ STB_TEXTEDIT_DELETECHARS(str, state->cursor, 1);
+ if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) {
+ ++state->cursor;
+ state->has_preferred_x = 0;
+ }
+ } else {
+ stb_textedit_delete_selection(str,state); // implicitly clamps
+ if (STB_TEXTEDIT_INSERTCHARS(str, state->cursor, &ch, 1)) {
+ stb_text_makeundo_insert(state, state->cursor, 1);
+ ++state->cursor;
+ state->has_preferred_x = 0;
+ }
+ }
+ }
+ break;
+ }
+
+#ifdef STB_TEXTEDIT_K_INSERT
+ case STB_TEXTEDIT_K_INSERT:
+ state->insert_mode = !state->insert_mode;
+ break;
+#endif
+
+ case STB_TEXTEDIT_K_UNDO:
+ stb_text_undo(str, state);
+ state->has_preferred_x = 0;
+ break;
+
+ case STB_TEXTEDIT_K_REDO:
+ stb_text_redo(str, state);
+ state->has_preferred_x = 0;
+ break;
+
+ case STB_TEXTEDIT_K_LEFT:
+ // if currently there's a selection, move cursor to start of selection
+ if (STB_TEXT_HAS_SELECTION(state))
+ stb_textedit_move_to_first(state);
+ else
+ if (state->cursor > 0)
+ --state->cursor;
+ state->has_preferred_x = 0;
+ break;
+
+ case STB_TEXTEDIT_K_RIGHT:
+ // if currently there's a selection, move cursor to end of selection
+ if (STB_TEXT_HAS_SELECTION(state))
+ stb_textedit_move_to_last(str, state);
+ else
+ ++state->cursor;
+ stb_textedit_clamp(str, state);
+ state->has_preferred_x = 0;
+ break;
+
+ case STB_TEXTEDIT_K_LEFT | STB_TEXTEDIT_K_SHIFT:
+ stb_textedit_clamp(str, state);
+ stb_textedit_prep_selection_at_cursor(state);
+ // move selection left
+ if (state->select_end > 0)
+ --state->select_end;
+ state->cursor = state->select_end;
+ state->has_preferred_x = 0;
+ break;
+
+#ifdef STB_TEXTEDIT_MOVEWORDLEFT
+ case STB_TEXTEDIT_K_WORDLEFT:
+ if (STB_TEXT_HAS_SELECTION(state))
+ stb_textedit_move_to_first(state);
+ else {
+ state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor);
+ stb_textedit_clamp( str, state );
+ }
+ break;
+
+ case STB_TEXTEDIT_K_WORDLEFT | STB_TEXTEDIT_K_SHIFT:
+ if( !STB_TEXT_HAS_SELECTION( state ) )
+ stb_textedit_prep_selection_at_cursor(state);
+
+ state->cursor = STB_TEXTEDIT_MOVEWORDLEFT(str, state->cursor);
+ state->select_end = state->cursor;
+
+ stb_textedit_clamp( str, state );
+ break;
+#endif
+
+#ifdef STB_TEXTEDIT_MOVEWORDRIGHT
+ case STB_TEXTEDIT_K_WORDRIGHT:
+ if (STB_TEXT_HAS_SELECTION(state))
+ stb_textedit_move_to_last(str, state);
+ else {
+ state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor);
+ stb_textedit_clamp( str, state );
+ }
+ break;
+
+ case STB_TEXTEDIT_K_WORDRIGHT | STB_TEXTEDIT_K_SHIFT:
+ if( !STB_TEXT_HAS_SELECTION( state ) )
+ stb_textedit_prep_selection_at_cursor(state);
+
+ state->cursor = STB_TEXTEDIT_MOVEWORDRIGHT(str, state->cursor);
+ state->select_end = state->cursor;
+
+ stb_textedit_clamp( str, state );
+ break;
+#endif
+
+ case STB_TEXTEDIT_K_RIGHT | STB_TEXTEDIT_K_SHIFT:
+ stb_textedit_prep_selection_at_cursor(state);
+ // move selection right
+ ++state->select_end;
+ stb_textedit_clamp(str, state);
+ state->cursor = state->select_end;
+ state->has_preferred_x = 0;
+ break;
+
+ case STB_TEXTEDIT_K_DOWN:
+ case STB_TEXTEDIT_K_DOWN | STB_TEXTEDIT_K_SHIFT:
+ case STB_TEXTEDIT_K_PGDOWN:
+ case STB_TEXTEDIT_K_PGDOWN | STB_TEXTEDIT_K_SHIFT: {
+ StbFindState find;
+ StbTexteditRow row;
+ int i, j, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0;
+ int is_page = (key & ~STB_TEXTEDIT_K_SHIFT) == STB_TEXTEDIT_K_PGDOWN;
+ int row_count = is_page ? state->row_count_per_page : 1;
+
+ if (!is_page && state->single_line) {
+ // on windows, up&down in single-line behave like left&right
+ key = STB_TEXTEDIT_K_RIGHT | (key & STB_TEXTEDIT_K_SHIFT);
+ goto retry;
+ }
+
+ if (sel)
+ stb_textedit_prep_selection_at_cursor(state);
+ else if (STB_TEXT_HAS_SELECTION(state))
+ stb_textedit_move_to_last(str, state);
+
+ // compute current position of cursor point
+ stb_textedit_clamp(str, state);
+ stb_textedit_find_charpos(&find, str, state->cursor, state->single_line);
+
+ for (j = 0; j < row_count; ++j) {
+ float x, goal_x = state->has_preferred_x ? state->preferred_x : find.x;
+ int start = find.first_char + find.length;
+
+ if (find.length == 0)
+ break;
+
+ // [DEAR IMGUI]
+ // going down while being on the last line shouldn't bring us to that line end
+ if (STB_TEXTEDIT_GETCHAR(str, find.first_char + find.length - 1) != STB_TEXTEDIT_NEWLINE)
+ break;
+
+ // now find character position down a row
+ state->cursor = start;
+ STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor);
+ x = row.x0;
+ for (i=0; i < row.num_chars; ++i) {
+ float dx = STB_TEXTEDIT_GETWIDTH(str, start, i);
+ #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE
+ if (dx == STB_TEXTEDIT_GETWIDTH_NEWLINE)
+ break;
+ #endif
+ x += dx;
+ if (x > goal_x)
+ break;
+ ++state->cursor;
+ }
+ stb_textedit_clamp(str, state);
+
+ state->has_preferred_x = 1;
+ state->preferred_x = goal_x;
+
+ if (sel)
+ state->select_end = state->cursor;
+
+ // go to next line
+ find.first_char = find.first_char + find.length;
+ find.length = row.num_chars;
+ }
+ break;
+ }
+
+ case STB_TEXTEDIT_K_UP:
+ case STB_TEXTEDIT_K_UP | STB_TEXTEDIT_K_SHIFT:
+ case STB_TEXTEDIT_K_PGUP:
+ case STB_TEXTEDIT_K_PGUP | STB_TEXTEDIT_K_SHIFT: {
+ StbFindState find;
+ StbTexteditRow row;
+ int i, j, prev_scan, sel = (key & STB_TEXTEDIT_K_SHIFT) != 0;
+ int is_page = (key & ~STB_TEXTEDIT_K_SHIFT) == STB_TEXTEDIT_K_PGUP;
+ int row_count = is_page ? state->row_count_per_page : 1;
+
+ if (!is_page && state->single_line) {
+ // on windows, up&down become left&right
+ key = STB_TEXTEDIT_K_LEFT | (key & STB_TEXTEDIT_K_SHIFT);
+ goto retry;
+ }
+
+ if (sel)
+ stb_textedit_prep_selection_at_cursor(state);
+ else if (STB_TEXT_HAS_SELECTION(state))
+ stb_textedit_move_to_first(state);
+
+ // compute current position of cursor point
+ stb_textedit_clamp(str, state);
+ stb_textedit_find_charpos(&find, str, state->cursor, state->single_line);
+
+ for (j = 0; j < row_count; ++j) {
+ float x, goal_x = state->has_preferred_x ? state->preferred_x : find.x;
+
+ // can only go up if there's a previous row
+ if (find.prev_first == find.first_char)
+ break;
+
+ // now find character position up a row
+ state->cursor = find.prev_first;
+ STB_TEXTEDIT_LAYOUTROW(&row, str, state->cursor);
+ x = row.x0;
+ for (i=0; i < row.num_chars; ++i) {
+ float dx = STB_TEXTEDIT_GETWIDTH(str, find.prev_first, i);
+ #ifdef STB_TEXTEDIT_GETWIDTH_NEWLINE
+ if (dx == STB_TEXTEDIT_GETWIDTH_NEWLINE)
+ break;
+ #endif
+ x += dx;
+ if (x > goal_x)
+ break;
+ ++state->cursor;
+ }
+ stb_textedit_clamp(str, state);
+
+ state->has_preferred_x = 1;
+ state->preferred_x = goal_x;
+
+ if (sel)
+ state->select_end = state->cursor;
+
+ // go to previous line
+ // (we need to scan previous line the hard way. maybe we could expose this as a new API function?)
+ prev_scan = find.prev_first > 0 ? find.prev_first - 1 : 0;
+ while (prev_scan > 0 && STB_TEXTEDIT_GETCHAR(str, prev_scan - 1) != STB_TEXTEDIT_NEWLINE)
+ --prev_scan;
+ find.first_char = find.prev_first;
+ find.prev_first = prev_scan;
+ }
+ break;
+ }
+
+ case STB_TEXTEDIT_K_DELETE:
+ case STB_TEXTEDIT_K_DELETE | STB_TEXTEDIT_K_SHIFT:
+ if (STB_TEXT_HAS_SELECTION(state))
+ stb_textedit_delete_selection(str, state);
+ else {
+ int n = STB_TEXTEDIT_STRINGLEN(str);
+ if (state->cursor < n)
+ stb_textedit_delete(str, state, state->cursor, 1);
+ }
+ state->has_preferred_x = 0;
+ break;
+
+ case STB_TEXTEDIT_K_BACKSPACE:
+ case STB_TEXTEDIT_K_BACKSPACE | STB_TEXTEDIT_K_SHIFT:
+ if (STB_TEXT_HAS_SELECTION(state))
+ stb_textedit_delete_selection(str, state);
+ else {
+ stb_textedit_clamp(str, state);
+ if (state->cursor > 0) {
+ stb_textedit_delete(str, state, state->cursor-1, 1);
+ --state->cursor;
+ }
+ }
+ state->has_preferred_x = 0;
+ break;
+
+#ifdef STB_TEXTEDIT_K_TEXTSTART2
+ case STB_TEXTEDIT_K_TEXTSTART2:
+#endif
+ case STB_TEXTEDIT_K_TEXTSTART:
+ state->cursor = state->select_start = state->select_end = 0;
+ state->has_preferred_x = 0;
+ break;
+
+#ifdef STB_TEXTEDIT_K_TEXTEND2
+ case STB_TEXTEDIT_K_TEXTEND2:
+#endif
+ case STB_TEXTEDIT_K_TEXTEND:
+ state->cursor = STB_TEXTEDIT_STRINGLEN(str);
+ state->select_start = state->select_end = 0;
+ state->has_preferred_x = 0;
+ break;
+
+#ifdef STB_TEXTEDIT_K_TEXTSTART2
+ case STB_TEXTEDIT_K_TEXTSTART2 | STB_TEXTEDIT_K_SHIFT:
+#endif
+ case STB_TEXTEDIT_K_TEXTSTART | STB_TEXTEDIT_K_SHIFT:
+ stb_textedit_prep_selection_at_cursor(state);
+ state->cursor = state->select_end = 0;
+ state->has_preferred_x = 0;
+ break;
+
+#ifdef STB_TEXTEDIT_K_TEXTEND2
+ case STB_TEXTEDIT_K_TEXTEND2 | STB_TEXTEDIT_K_SHIFT:
+#endif
+ case STB_TEXTEDIT_K_TEXTEND | STB_TEXTEDIT_K_SHIFT:
+ stb_textedit_prep_selection_at_cursor(state);
+ state->cursor = state->select_end = STB_TEXTEDIT_STRINGLEN(str);
+ state->has_preferred_x = 0;
+ break;
+
+
+#ifdef STB_TEXTEDIT_K_LINESTART2
+ case STB_TEXTEDIT_K_LINESTART2:
+#endif
+ case STB_TEXTEDIT_K_LINESTART:
+ stb_textedit_clamp(str, state);
+ stb_textedit_move_to_first(state);
+ if (state->single_line)
+ state->cursor = 0;
+ else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE)
+ --state->cursor;
+ state->has_preferred_x = 0;
+ break;
+
+#ifdef STB_TEXTEDIT_K_LINEEND2
+ case STB_TEXTEDIT_K_LINEEND2:
+#endif
+ case STB_TEXTEDIT_K_LINEEND: {
+ int n = STB_TEXTEDIT_STRINGLEN(str);
+ stb_textedit_clamp(str, state);
+ stb_textedit_move_to_first(state);
+ if (state->single_line)
+ state->cursor = n;
+ else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE)
+ ++state->cursor;
+ state->has_preferred_x = 0;
+ break;
+ }
+
+#ifdef STB_TEXTEDIT_K_LINESTART2
+ case STB_TEXTEDIT_K_LINESTART2 | STB_TEXTEDIT_K_SHIFT:
+#endif
+ case STB_TEXTEDIT_K_LINESTART | STB_TEXTEDIT_K_SHIFT:
+ stb_textedit_clamp(str, state);
+ stb_textedit_prep_selection_at_cursor(state);
+ if (state->single_line)
+ state->cursor = 0;
+ else while (state->cursor > 0 && STB_TEXTEDIT_GETCHAR(str, state->cursor-1) != STB_TEXTEDIT_NEWLINE)
+ --state->cursor;
+ state->select_end = state->cursor;
+ state->has_preferred_x = 0;
+ break;
+
+#ifdef STB_TEXTEDIT_K_LINEEND2
+ case STB_TEXTEDIT_K_LINEEND2 | STB_TEXTEDIT_K_SHIFT:
+#endif
+ case STB_TEXTEDIT_K_LINEEND | STB_TEXTEDIT_K_SHIFT: {
+ int n = STB_TEXTEDIT_STRINGLEN(str);
+ stb_textedit_clamp(str, state);
+ stb_textedit_prep_selection_at_cursor(state);
+ if (state->single_line)
+ state->cursor = n;
+ else while (state->cursor < n && STB_TEXTEDIT_GETCHAR(str, state->cursor) != STB_TEXTEDIT_NEWLINE)
+ ++state->cursor;
+ state->select_end = state->cursor;
+ state->has_preferred_x = 0;
+ break;
+ }
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Undo processing
+//
+// @OPTIMIZE: the undo/redo buffer should be circular
+
+static void stb_textedit_flush_redo(StbUndoState *state)
+{
+ state->redo_point = STB_TEXTEDIT_UNDOSTATECOUNT;
+ state->redo_char_point = STB_TEXTEDIT_UNDOCHARCOUNT;
+}
+
+// discard the oldest entry in the undo list
+static void stb_textedit_discard_undo(StbUndoState *state)
+{
+ if (state->undo_point > 0) {
+ // if the 0th undo state has characters, clean those up
+ if (state->undo_rec[0].char_storage >= 0) {
+ int n = state->undo_rec[0].insert_length, i;
+ // delete n characters from all other records
+ state->undo_char_point -= n;
+ STB_TEXTEDIT_memmove(state->undo_char, state->undo_char + n, (size_t) (state->undo_char_point*sizeof(STB_TEXTEDIT_CHARTYPE)));
+ for (i=0; i < state->undo_point; ++i)
+ if (state->undo_rec[i].char_storage >= 0)
+ state->undo_rec[i].char_storage -= n; // @OPTIMIZE: get rid of char_storage and infer it
+ }
+ --state->undo_point;
+ STB_TEXTEDIT_memmove(state->undo_rec, state->undo_rec+1, (size_t) (state->undo_point*sizeof(state->undo_rec[0])));
+ }
+}
+
+// discard the oldest entry in the redo list--it's bad if this
+// ever happens, but because undo & redo have to store the actual
+// characters in different cases, the redo character buffer can
+// fill up even though the undo buffer didn't
+static void stb_textedit_discard_redo(StbUndoState *state)
+{
+ int k = STB_TEXTEDIT_UNDOSTATECOUNT-1;
+
+ if (state->redo_point <= k) {
+ // if the k'th undo state has characters, clean those up
+ if (state->undo_rec[k].char_storage >= 0) {
+ int n = state->undo_rec[k].insert_length, i;
+ // move the remaining redo character data to the end of the buffer
+ state->redo_char_point += n;
+ STB_TEXTEDIT_memmove(state->undo_char + state->redo_char_point, state->undo_char + state->redo_char_point-n, (size_t) ((STB_TEXTEDIT_UNDOCHARCOUNT - state->redo_char_point)*sizeof(STB_TEXTEDIT_CHARTYPE)));
+ // adjust the position of all the other records to account for above memmove
+ for (i=state->redo_point; i < k; ++i)
+ if (state->undo_rec[i].char_storage >= 0)
+ state->undo_rec[i].char_storage += n;
+ }
+ // now move all the redo records towards the end of the buffer; the first one is at 'redo_point'
+ // [DEAR IMGUI]
+ size_t move_size = (size_t)((STB_TEXTEDIT_UNDOSTATECOUNT - state->redo_point - 1) * sizeof(state->undo_rec[0]));
+ const char* buf_begin = (char*)state->undo_rec; (void)buf_begin;
+ const char* buf_end = (char*)state->undo_rec + sizeof(state->undo_rec); (void)buf_end;
+ IM_ASSERT(((char*)(state->undo_rec + state->redo_point)) >= buf_begin);
+ IM_ASSERT(((char*)(state->undo_rec + state->redo_point + 1) + move_size) <= buf_end);
+ STB_TEXTEDIT_memmove(state->undo_rec + state->redo_point+1, state->undo_rec + state->redo_point, move_size);
+
+ // now move redo_point to point to the new one
+ ++state->redo_point;
+ }
+}
+
+static StbUndoRecord *stb_text_create_undo_record(StbUndoState *state, int numchars)
+{
+ // any time we create a new undo record, we discard redo
+ stb_textedit_flush_redo(state);
+
+ // if we have no free records, we have to make room, by sliding the
+ // existing records down
+ if (state->undo_point == STB_TEXTEDIT_UNDOSTATECOUNT)
+ stb_textedit_discard_undo(state);
+
+ // if the characters to store won't possibly fit in the buffer, we can't undo
+ if (numchars > STB_TEXTEDIT_UNDOCHARCOUNT) {
+ state->undo_point = 0;
+ state->undo_char_point = 0;
+ return NULL;
+ }
+
+ // if we don't have enough free characters in the buffer, we have to make room
+ while (state->undo_char_point + numchars > STB_TEXTEDIT_UNDOCHARCOUNT)
+ stb_textedit_discard_undo(state);
+
+ return &state->undo_rec[state->undo_point++];
+}
+
+static STB_TEXTEDIT_CHARTYPE *stb_text_createundo(StbUndoState *state, int pos, int insert_len, int delete_len)
+{
+ StbUndoRecord *r = stb_text_create_undo_record(state, insert_len);
+ if (r == NULL)
+ return NULL;
+
+ r->where = pos;
+ r->insert_length = (STB_TEXTEDIT_POSITIONTYPE) insert_len;
+ r->delete_length = (STB_TEXTEDIT_POSITIONTYPE) delete_len;
+
+ if (insert_len == 0) {
+ r->char_storage = -1;
+ return NULL;
+ } else {
+ r->char_storage = state->undo_char_point;
+ state->undo_char_point += insert_len;
+ return &state->undo_char[r->char_storage];
+ }
+}
+
+static void stb_text_undo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+ StbUndoState *s = &state->undostate;
+ StbUndoRecord u, *r;
+ if (s->undo_point == 0)
+ return;
+
+ // we need to do two things: apply the undo record, and create a redo record
+ u = s->undo_rec[s->undo_point-1];
+ r = &s->undo_rec[s->redo_point-1];
+ r->char_storage = -1;
+
+ r->insert_length = u.delete_length;
+ r->delete_length = u.insert_length;
+ r->where = u.where;
+
+ if (u.delete_length) {
+ // if the undo record says to delete characters, then the redo record will
+ // need to re-insert the characters that get deleted, so we need to store
+ // them.
+
+ // there are three cases:
+ // there's enough room to store the characters
+ // characters stored for *redoing* don't leave room for redo
+ // characters stored for *undoing* don't leave room for redo
+ // if the last is true, we have to bail
+
+ if (s->undo_char_point + u.delete_length >= STB_TEXTEDIT_UNDOCHARCOUNT) {
+ // the undo records take up too much character space; there's no space to store the redo characters
+ r->insert_length = 0;
+ } else {
+ int i;
+
+ // there's definitely room to store the characters eventually
+ while (s->undo_char_point + u.delete_length > s->redo_char_point) {
+ // should never happen:
+ if (s->redo_point == STB_TEXTEDIT_UNDOSTATECOUNT)
+ return;
+ // there's currently not enough room, so discard a redo record
+ stb_textedit_discard_redo(s);
+ }
+ r = &s->undo_rec[s->redo_point-1];
+
+ r->char_storage = s->redo_char_point - u.delete_length;
+ s->redo_char_point = s->redo_char_point - u.delete_length;
+
+ // now save the characters
+ for (i=0; i < u.delete_length; ++i)
+ s->undo_char[r->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u.where + i);
+ }
+
+ // now we can carry out the deletion
+ STB_TEXTEDIT_DELETECHARS(str, u.where, u.delete_length);
+ }
+
+ // check type of recorded action:
+ if (u.insert_length) {
+ // easy case: was a deletion, so we need to insert n characters
+ STB_TEXTEDIT_INSERTCHARS(str, u.where, &s->undo_char[u.char_storage], u.insert_length);
+ s->undo_char_point -= u.insert_length;
+ }
+
+ state->cursor = u.where + u.insert_length;
+
+ s->undo_point--;
+ s->redo_point--;
+}
+
+static void stb_text_redo(STB_TEXTEDIT_STRING *str, STB_TexteditState *state)
+{
+ StbUndoState *s = &state->undostate;
+ StbUndoRecord *u, r;
+ if (s->redo_point == STB_TEXTEDIT_UNDOSTATECOUNT)
+ return;
+
+ // we need to do two things: apply the redo record, and create an undo record
+ u = &s->undo_rec[s->undo_point];
+ r = s->undo_rec[s->redo_point];
+
+ // we KNOW there must be room for the undo record, because the redo record
+ // was derived from an undo record
+
+ u->delete_length = r.insert_length;
+ u->insert_length = r.delete_length;
+ u->where = r.where;
+ u->char_storage = -1;
+
+ if (r.delete_length) {
+ // the redo record requires us to delete characters, so the undo record
+ // needs to store the characters
+
+ if (s->undo_char_point + u->insert_length > s->redo_char_point) {
+ u->insert_length = 0;
+ u->delete_length = 0;
+ } else {
+ int i;
+ u->char_storage = s->undo_char_point;
+ s->undo_char_point = s->undo_char_point + u->insert_length;
+
+ // now save the characters
+ for (i=0; i < u->insert_length; ++i)
+ s->undo_char[u->char_storage + i] = STB_TEXTEDIT_GETCHAR(str, u->where + i);
+ }
+
+ STB_TEXTEDIT_DELETECHARS(str, r.where, r.delete_length);
+ }
+
+ if (r.insert_length) {
+ // easy case: need to insert n characters
+ STB_TEXTEDIT_INSERTCHARS(str, r.where, &s->undo_char[r.char_storage], r.insert_length);
+ s->redo_char_point += r.insert_length;
+ }
+
+ state->cursor = r.where + r.insert_length;
+
+ s->undo_point++;
+ s->redo_point++;
+}
+
+static void stb_text_makeundo_insert(STB_TexteditState *state, int where, int length)
+{
+ stb_text_createundo(&state->undostate, where, 0, length);
+}
+
+static void stb_text_makeundo_delete(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int length)
+{
+ int i;
+ STB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, length, 0);
+ if (p) {
+ for (i=0; i < length; ++i)
+ p[i] = STB_TEXTEDIT_GETCHAR(str, where+i);
+ }
+}
+
+static void stb_text_makeundo_replace(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, int where, int old_length, int new_length)
+{
+ int i;
+ STB_TEXTEDIT_CHARTYPE *p = stb_text_createundo(&state->undostate, where, old_length, new_length);
+ if (p) {
+ for (i=0; i < old_length; ++i)
+ p[i] = STB_TEXTEDIT_GETCHAR(str, where+i);
+ }
+}
+
+// reset the state to default
+static void stb_textedit_clear_state(STB_TexteditState *state, int is_single_line)
+{
+ state->undostate.undo_point = 0;
+ state->undostate.undo_char_point = 0;
+ state->undostate.redo_point = STB_TEXTEDIT_UNDOSTATECOUNT;
+ state->undostate.redo_char_point = STB_TEXTEDIT_UNDOCHARCOUNT;
+ state->select_end = state->select_start = 0;
+ state->cursor = 0;
+ state->has_preferred_x = 0;
+ state->preferred_x = 0;
+ state->cursor_at_end_of_line = 0;
+ state->initialized = 1;
+ state->single_line = (unsigned char) is_single_line;
+ state->insert_mode = 0;
+ state->row_count_per_page = 0;
+}
+
+// API initialize
+static void stb_textedit_initialize_state(STB_TexteditState *state, int is_single_line)
+{
+ stb_textedit_clear_state(state, is_single_line);
+}
+
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
+#endif
+
+static int stb_textedit_paste(STB_TEXTEDIT_STRING *str, STB_TexteditState *state, STB_TEXTEDIT_CHARTYPE const *ctext, int len)
+{
+ return stb_textedit_paste_internal(str, state, (STB_TEXTEDIT_CHARTYPE *) ctext, len);
+}
+
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
+
+#endif//STB_TEXTEDIT_IMPLEMENTATION
+
+/*
+------------------------------------------------------------------------------
+This software is available under 2 licenses -- choose whichever you prefer.
+------------------------------------------------------------------------------
+ALTERNATIVE A - MIT License
+Copyright (c) 2017 Sean Barrett
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+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:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+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
+AUTHORS 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 IN THE
+SOFTWARE.
+------------------------------------------------------------------------------
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+This is free and unencumbered software released into the public domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
+software, either in source code form or as a compiled binary, for any purpose,
+commercial or non-commercial, and by any means.
+In jurisdictions that recognize copyright laws, the author or authors of this
+software dedicate any and all copyright interest in the software to the public
+domain. We make this dedication for the benefit of the public at large and to
+the detriment of our heirs and successors. We intend this dedication to be an
+overt act of relinquishment in perpetuity of all present and future rights to
+this software under copyright law.
+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
+AUTHORS 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 IN THE SOFTWARE.
+------------------------------------------------------------------------------
+*/
diff --git a/tests/manual/rhi/shared/imgui/imgui/imstb_truetype.h b/tests/manual/rhi/shared/imgui/imgui/imstb_truetype.h
new file mode 100644
index 0000000000..643d37899e
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/imgui/imstb_truetype.h
@@ -0,0 +1,5085 @@
+// [DEAR IMGUI]
+// This is a slightly modified version of stb_truetype.h 1.26.
+// Mostly fixing for compiler and static analyzer warnings.
+// Grep for [DEAR IMGUI] to find the changes.
+
+// stb_truetype.h - v1.26 - public domain
+// authored from 2009-2021 by Sean Barrett / RAD Game Tools
+//
+// =======================================================================
+//
+// NO SECURITY GUARANTEE -- DO NOT USE THIS ON UNTRUSTED FONT FILES
+//
+// This library does no range checking of the offsets found in the file,
+// meaning an attacker can use it to read arbitrary memory.
+//
+// =======================================================================
+//
+// This library processes TrueType files:
+// parse files
+// extract glyph metrics
+// extract glyph shapes
+// render glyphs to one-channel bitmaps with antialiasing (box filter)
+// render glyphs to one-channel SDF bitmaps (signed-distance field/function)
+//
+// Todo:
+// non-MS cmaps
+// crashproof on bad data
+// hinting? (no longer patented)
+// cleartype-style AA?
+// optimize: use simple memory allocator for intermediates
+// optimize: build edge-list directly from curves
+// optimize: rasterize directly from curves?
+//
+// ADDITIONAL CONTRIBUTORS
+//
+// Mikko Mononen: compound shape support, more cmap formats
+// Tor Andersson: kerning, subpixel rendering
+// Dougall Johnson: OpenType / Type 2 font handling
+// Daniel Ribeiro Maciel: basic GPOS-based kerning
+//
+// Misc other:
+// Ryan Gordon
+// Simon Glass
+// github:IntellectualKitty
+// Imanol Celaya
+// Daniel Ribeiro Maciel
+//
+// Bug/warning reports/fixes:
+// "Zer" on mollyrocket Fabian "ryg" Giesen github:NiLuJe
+// Cass Everitt Martins Mozeiko github:aloucks
+// stoiko (Haemimont Games) Cap Petschulat github:oyvindjam
+// Brian Hook Omar Cornut github:vassvik
+// Walter van Niftrik Ryan Griege
+// David Gow Peter LaValle
+// David Given Sergey Popov
+// Ivan-Assen Ivanov Giumo X. Clanjor
+// Anthony Pesch Higor Euripedes
+// Johan Duparc Thomas Fields
+// Hou Qiming Derek Vinyard
+// Rob Loach Cort Stratton
+// Kenney Phillis Jr. Brian Costabile
+// Ken Voskuil (kaesve)
+//
+// VERSION HISTORY
+//
+// 1.26 (2021-08-28) fix broken rasterizer
+// 1.25 (2021-07-11) many fixes
+// 1.24 (2020-02-05) fix warning
+// 1.23 (2020-02-02) query SVG data for glyphs; query whole kerning table (but only kern not GPOS)
+// 1.22 (2019-08-11) minimize missing-glyph duplication; fix kerning if both 'GPOS' and 'kern' are defined
+// 1.21 (2019-02-25) fix warning
+// 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics()
+// 1.19 (2018-02-11) GPOS kerning, STBTT_fmod
+// 1.18 (2018-01-29) add missing function
+// 1.17 (2017-07-23) make more arguments const; doc fix
+// 1.16 (2017-07-12) SDF support
+// 1.15 (2017-03-03) make more arguments const
+// 1.14 (2017-01-16) num-fonts-in-TTC function
+// 1.13 (2017-01-02) support OpenType fonts, certain Apple fonts
+// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual
+// 1.11 (2016-04-02) fix unused-variable warning
+// 1.10 (2016-04-02) user-defined fabs(); rare memory leak; remove duplicate typedef
+// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use allocation userdata properly
+// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges
+// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints;
+// variant PackFontRanges to pack and render in separate phases;
+// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?);
+// fixed an assert() bug in the new rasterizer
+// replace assert() with STBTT_assert() in new rasterizer
+//
+// Full history can be found at the end of this file.
+//
+// LICENSE
+//
+// See end of file for license information.
+//
+// USAGE
+//
+// Include this file in whatever places need to refer to it. In ONE C/C++
+// file, write:
+// #define STB_TRUETYPE_IMPLEMENTATION
+// before the #include of this file. This expands out the actual
+// implementation into that C/C++ file.
+//
+// To make the implementation private to the file that generates the implementation,
+// #define STBTT_STATIC
+//
+// Simple 3D API (don't ship this, but it's fine for tools and quick start)
+// stbtt_BakeFontBitmap() -- bake a font to a bitmap for use as texture
+// stbtt_GetBakedQuad() -- compute quad to draw for a given char
+//
+// Improved 3D API (more shippable):
+// #include "stb_rect_pack.h" -- optional, but you really want it
+// stbtt_PackBegin()
+// stbtt_PackSetOversampling() -- for improved quality on small fonts
+// stbtt_PackFontRanges() -- pack and renders
+// stbtt_PackEnd()
+// stbtt_GetPackedQuad()
+//
+// "Load" a font file from a memory buffer (you have to keep the buffer loaded)
+// stbtt_InitFont()
+// stbtt_GetFontOffsetForIndex() -- indexing for TTC font collections
+// stbtt_GetNumberOfFonts() -- number of fonts for TTC font collections
+//
+// Render a unicode codepoint to a bitmap
+// stbtt_GetCodepointBitmap() -- allocates and returns a bitmap
+// stbtt_MakeCodepointBitmap() -- renders into bitmap you provide
+// stbtt_GetCodepointBitmapBox() -- how big the bitmap must be
+//
+// Character advance/positioning
+// stbtt_GetCodepointHMetrics()
+// stbtt_GetFontVMetrics()
+// stbtt_GetFontVMetricsOS2()
+// stbtt_GetCodepointKernAdvance()
+//
+// Starting with version 1.06, the rasterizer was replaced with a new,
+// faster and generally-more-precise rasterizer. The new rasterizer more
+// accurately measures pixel coverage for anti-aliasing, except in the case
+// where multiple shapes overlap, in which case it overestimates the AA pixel
+// coverage. Thus, anti-aliasing of intersecting shapes may look wrong. If
+// this turns out to be a problem, you can re-enable the old rasterizer with
+// #define STBTT_RASTERIZER_VERSION 1
+// which will incur about a 15% speed hit.
+//
+// ADDITIONAL DOCUMENTATION
+//
+// Immediately after this block comment are a series of sample programs.
+//
+// After the sample programs is the "header file" section. This section
+// includes documentation for each API function.
+//
+// Some important concepts to understand to use this library:
+//
+// Codepoint
+// Characters are defined by unicode codepoints, e.g. 65 is
+// uppercase A, 231 is lowercase c with a cedilla, 0x7e30 is
+// the hiragana for "ma".
+//
+// Glyph
+// A visual character shape (every codepoint is rendered as
+// some glyph)
+//
+// Glyph index
+// A font-specific integer ID representing a glyph
+//
+// Baseline
+// Glyph shapes are defined relative to a baseline, which is the
+// bottom of uppercase characters. Characters extend both above
+// and below the baseline.
+//
+// Current Point
+// As you draw text to the screen, you keep track of a "current point"
+// which is the origin of each character. The current point's vertical
+// position is the baseline. Even "baked fonts" use this model.
+//
+// Vertical Font Metrics
+// The vertical qualities of the font, used to vertically position
+// and space the characters. See docs for stbtt_GetFontVMetrics.
+//
+// Font Size in Pixels or Points
+// The preferred interface for specifying font sizes in stb_truetype
+// is to specify how tall the font's vertical extent should be in pixels.
+// If that sounds good enough, skip the next paragraph.
+//
+// Most font APIs instead use "points", which are a common typographic
+// measurement for describing font size, defined as 72 points per inch.
+// stb_truetype provides a point API for compatibility. However, true
+// "per inch" conventions don't make much sense on computer displays
+// since different monitors have different number of pixels per
+// inch. For example, Windows traditionally uses a convention that
+// there are 96 pixels per inch, thus making 'inch' measurements have
+// nothing to do with inches, and thus effectively defining a point to
+// be 1.333 pixels. Additionally, the TrueType font data provides
+// an explicit scale factor to scale a given font's glyphs to points,
+// but the author has observed that this scale factor is often wrong
+// for non-commercial fonts, thus making fonts scaled in points
+// according to the TrueType spec incoherently sized in practice.
+//
+// DETAILED USAGE:
+//
+// Scale:
+// Select how high you want the font to be, in points or pixels.
+// Call ScaleForPixelHeight or ScaleForMappingEmToPixels to compute
+// a scale factor SF that will be used by all other functions.
+//
+// Baseline:
+// You need to select a y-coordinate that is the baseline of where
+// your text will appear. Call GetFontBoundingBox to get the baseline-relative
+// bounding box for all characters. SF*-y0 will be the distance in pixels
+// that the worst-case character could extend above the baseline, so if
+// you want the top edge of characters to appear at the top of the
+// screen where y=0, then you would set the baseline to SF*-y0.
+//
+// Current point:
+// Set the current point where the first character will appear. The
+// first character could extend left of the current point; this is font
+// dependent. You can either choose a current point that is the leftmost
+// point and hope, or add some padding, or check the bounding box or
+// left-side-bearing of the first character to be displayed and set
+// the current point based on that.
+//
+// Displaying a character:
+// Compute the bounding box of the character. It will contain signed values
+// relative to <current_point, baseline>. I.e. if it returns x0,y0,x1,y1,
+// then the character should be displayed in the rectangle from
+// <current_point+SF*x0, baseline+SF*y0> to <current_point+SF*x1,baseline+SF*y1).
+//
+// Advancing for the next character:
+// Call GlyphHMetrics, and compute 'current_point += SF * advance'.
+//
+//
+// ADVANCED USAGE
+//
+// Quality:
+//
+// - Use the functions with Subpixel at the end to allow your characters
+// to have subpixel positioning. Since the font is anti-aliased, not
+// hinted, this is very import for quality. (This is not possible with
+// baked fonts.)
+//
+// - Kerning is now supported, and if you're supporting subpixel rendering
+// then kerning is worth using to give your text a polished look.
+//
+// Performance:
+//
+// - Convert Unicode codepoints to glyph indexes and operate on the glyphs;
+// if you don't do this, stb_truetype is forced to do the conversion on
+// every call.
+//
+// - There are a lot of memory allocations. We should modify it to take
+// a temp buffer and allocate from the temp buffer (without freeing),
+// should help performance a lot.
+//
+// NOTES
+//
+// The system uses the raw data found in the .ttf file without changing it
+// and without building auxiliary data structures. This is a bit inefficient
+// on little-endian systems (the data is big-endian), but assuming you're
+// caching the bitmaps or glyph shapes this shouldn't be a big deal.
+//
+// It appears to be very hard to programmatically determine what font a
+// given file is in a general way. I provide an API for this, but I don't
+// recommend it.
+//
+//
+// PERFORMANCE MEASUREMENTS FOR 1.06:
+//
+// 32-bit 64-bit
+// Previous release: 8.83 s 7.68 s
+// Pool allocations: 7.72 s 6.34 s
+// Inline sort : 6.54 s 5.65 s
+// New rasterizer : 5.63 s 5.00 s
+
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+////
+//// SAMPLE PROGRAMS
+////
+//
+// Incomplete text-in-3d-api example, which draws quads properly aligned to be lossless.
+// See "tests/truetype_demo_win32.c" for a complete version.
+#if 0
+#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation
+#include "stb_truetype.h"
+
+unsigned char ttf_buffer[1<<20];
+unsigned char temp_bitmap[512*512];
+
+stbtt_bakedchar cdata[96]; // ASCII 32..126 is 95 glyphs
+GLuint ftex;
+
+void my_stbtt_initfont(void)
+{
+ fread(ttf_buffer, 1, 1<<20, fopen("c:/windows/fonts/times.ttf", "rb"));
+ stbtt_BakeFontBitmap(ttf_buffer,0, 32.0, temp_bitmap,512,512, 32,96, cdata); // no guarantee this fits!
+ // can free ttf_buffer at this point
+ glGenTextures(1, &ftex);
+ glBindTexture(GL_TEXTURE_2D, ftex);
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 512,512, 0, GL_ALPHA, GL_UNSIGNED_BYTE, temp_bitmap);
+ // can free temp_bitmap at this point
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+}
+
+void my_stbtt_print(float x, float y, char *text)
+{
+ // assume orthographic projection with units = screen pixels, origin at top left
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_TEXTURE_2D);
+ glBindTexture(GL_TEXTURE_2D, ftex);
+ glBegin(GL_QUADS);
+ while (*text) {
+ if (*text >= 32 && *text < 128) {
+ stbtt_aligned_quad q;
+ stbtt_GetBakedQuad(cdata, 512,512, *text-32, &x,&y,&q,1);//1=opengl & d3d10+,0=d3d9
+ glTexCoord2f(q.s0,q.t0); glVertex2f(q.x0,q.y0);
+ glTexCoord2f(q.s1,q.t0); glVertex2f(q.x1,q.y0);
+ glTexCoord2f(q.s1,q.t1); glVertex2f(q.x1,q.y1);
+ glTexCoord2f(q.s0,q.t1); glVertex2f(q.x0,q.y1);
+ }
+ ++text;
+ }
+ glEnd();
+}
+#endif
+//
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Complete program (this compiles): get a single bitmap, print as ASCII art
+//
+#if 0
+#include <stdio.h>
+#define STB_TRUETYPE_IMPLEMENTATION // force following include to generate implementation
+#include "stb_truetype.h"
+
+char ttf_buffer[1<<25];
+
+int main(int argc, char **argv)
+{
+ stbtt_fontinfo font;
+ unsigned char *bitmap;
+ int w,h,i,j,c = (argc > 1 ? atoi(argv[1]) : 'a'), s = (argc > 2 ? atoi(argv[2]) : 20);
+
+ fread(ttf_buffer, 1, 1<<25, fopen(argc > 3 ? argv[3] : "c:/windows/fonts/arialbd.ttf", "rb"));
+
+ stbtt_InitFont(&font, ttf_buffer, stbtt_GetFontOffsetForIndex(ttf_buffer,0));
+ bitmap = stbtt_GetCodepointBitmap(&font, 0,stbtt_ScaleForPixelHeight(&font, s), c, &w, &h, 0,0);
+
+ for (j=0; j < h; ++j) {
+ for (i=0; i < w; ++i)
+ putchar(" .:ioVM@"[bitmap[j*w+i]>>5]);
+ putchar('\n');
+ }
+ return 0;
+}
+#endif
+//
+// Output:
+//
+// .ii.
+// @@@@@@.
+// V@Mio@@o
+// :i. V@V
+// :oM@@M
+// :@@@MM@M
+// @@o o@M
+// :@@. M@M
+// @@@o@@@@
+// :M@@V:@@.
+//
+//////////////////////////////////////////////////////////////////////////////
+//
+// Complete program: print "Hello World!" banner, with bugs
+//
+#if 0
+char buffer[24<<20];
+unsigned char screen[20][79];
+
+int main(int arg, char **argv)
+{
+ stbtt_fontinfo font;
+ int i,j,ascent,baseline,ch=0;
+ float scale, xpos=2; // leave a little padding in case the character extends left
+ char *text = "Heljo World!"; // intentionally misspelled to show 'lj' brokenness
+
+ fread(buffer, 1, 1000000, fopen("c:/windows/fonts/arialbd.ttf", "rb"));
+ stbtt_InitFont(&font, buffer, 0);
+
+ scale = stbtt_ScaleForPixelHeight(&font, 15);
+ stbtt_GetFontVMetrics(&font, &ascent,0,0);
+ baseline = (int) (ascent*scale);
+
+ while (text[ch]) {
+ int advance,lsb,x0,y0,x1,y1;
+ float x_shift = xpos - (float) floor(xpos);
+ stbtt_GetCodepointHMetrics(&font, text[ch], &advance, &lsb);
+ stbtt_GetCodepointBitmapBoxSubpixel(&font, text[ch], scale,scale,x_shift,0, &x0,&y0,&x1,&y1);
+ stbtt_MakeCodepointBitmapSubpixel(&font, &screen[baseline + y0][(int) xpos + x0], x1-x0,y1-y0, 79, scale,scale,x_shift,0, text[ch]);
+ // note that this stomps the old data, so where character boxes overlap (e.g. 'lj') it's wrong
+ // because this API is really for baking character bitmaps into textures. if you want to render
+ // a sequence of characters, you really need to render each bitmap to a temp buffer, then
+ // "alpha blend" that into the working buffer
+ xpos += (advance * scale);
+ if (text[ch+1])
+ xpos += scale*stbtt_GetCodepointKernAdvance(&font, text[ch],text[ch+1]);
+ ++ch;
+ }
+
+ for (j=0; j < 20; ++j) {
+ for (i=0; i < 78; ++i)
+ putchar(" .:ioVM@"[screen[j][i]>>5]);
+ putchar('\n');
+ }
+
+ return 0;
+}
+#endif
+
+
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+////
+//// INTEGRATION WITH YOUR CODEBASE
+////
+//// The following sections allow you to supply alternate definitions
+//// of C library functions used by stb_truetype, e.g. if you don't
+//// link with the C runtime library.
+
+#ifdef STB_TRUETYPE_IMPLEMENTATION
+ // #define your own (u)stbtt_int8/16/32 before including to override this
+ #ifndef stbtt_uint8
+ typedef unsigned char stbtt_uint8;
+ typedef signed char stbtt_int8;
+ typedef unsigned short stbtt_uint16;
+ typedef signed short stbtt_int16;
+ typedef unsigned int stbtt_uint32;
+ typedef signed int stbtt_int32;
+ #endif
+
+ typedef char stbtt__check_size32[sizeof(stbtt_int32)==4 ? 1 : -1];
+ typedef char stbtt__check_size16[sizeof(stbtt_int16)==2 ? 1 : -1];
+
+ // e.g. #define your own STBTT_ifloor/STBTT_iceil() to avoid math.h
+ #ifndef STBTT_ifloor
+ #include <math.h>
+ #define STBTT_ifloor(x) ((int) floor(x))
+ #define STBTT_iceil(x) ((int) ceil(x))
+ #endif
+
+ #ifndef STBTT_sqrt
+ #include <math.h>
+ #define STBTT_sqrt(x) sqrt(x)
+ #define STBTT_pow(x,y) pow(x,y)
+ #endif
+
+ #ifndef STBTT_fmod
+ #include <math.h>
+ #define STBTT_fmod(x,y) fmod(x,y)
+ #endif
+
+ #ifndef STBTT_cos
+ #include <math.h>
+ #define STBTT_cos(x) cos(x)
+ #define STBTT_acos(x) acos(x)
+ #endif
+
+ #ifndef STBTT_fabs
+ #include <math.h>
+ #define STBTT_fabs(x) fabs(x)
+ #endif
+
+ // #define your own functions "STBTT_malloc" / "STBTT_free" to avoid malloc.h
+ #ifndef STBTT_malloc
+ #include <stdlib.h>
+ #define STBTT_malloc(x,u) ((void)(u),malloc(x))
+ #define STBTT_free(x,u) ((void)(u),free(x))
+ #endif
+
+ #ifndef STBTT_assert
+ #include <assert.h>
+ #define STBTT_assert(x) assert(x)
+ #endif
+
+ #ifndef STBTT_strlen
+ #include <string.h>
+ #define STBTT_strlen(x) strlen(x)
+ #endif
+
+ #ifndef STBTT_memcpy
+ #include <string.h>
+ #define STBTT_memcpy memcpy
+ #define STBTT_memset memset
+ #endif
+#endif
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+////
+//// INTERFACE
+////
+////
+
+#ifndef __STB_INCLUDE_STB_TRUETYPE_H__
+#define __STB_INCLUDE_STB_TRUETYPE_H__
+
+#ifdef STBTT_STATIC
+#define STBTT_DEF static
+#else
+#define STBTT_DEF extern
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// private structure
+typedef struct
+{
+ unsigned char *data;
+ int cursor;
+ int size;
+} stbtt__buf;
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// TEXTURE BAKING API
+//
+// If you use this API, you only have to call two functions ever.
+//
+
+typedef struct
+{
+ unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap
+ float xoff,yoff,xadvance;
+} stbtt_bakedchar;
+
+STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset, // font location (use offset=0 for plain .ttf)
+ float pixel_height, // height of font in pixels
+ unsigned char *pixels, int pw, int ph, // bitmap to be filled in
+ int first_char, int num_chars, // characters to bake
+ stbtt_bakedchar *chardata); // you allocate this, it's num_chars long
+// if return is positive, the first unused row of the bitmap
+// if return is negative, returns the negative of the number of characters that fit
+// if return is 0, no characters fit and no rows were used
+// This uses a very crappy packing.
+
+typedef struct
+{
+ float x0,y0,s0,t0; // top-left
+ float x1,y1,s1,t1; // bottom-right
+} stbtt_aligned_quad;
+
+STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, // same data as above
+ int char_index, // character to display
+ float *xpos, float *ypos, // pointers to current position in screen pixel space
+ stbtt_aligned_quad *q, // output: quad to draw
+ int opengl_fillrule); // true if opengl fill rule; false if DX9 or earlier
+// Call GetBakedQuad with char_index = 'character - first_char', and it
+// creates the quad you need to draw and advances the current position.
+//
+// The coordinate system used assumes y increases downwards.
+//
+// Characters will extend both above and below the current position;
+// see discussion of "BASELINE" above.
+//
+// It's inefficient; you might want to c&p it and optimize it.
+
+STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap);
+// Query the font vertical metrics without having to create a font first.
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// NEW TEXTURE BAKING API
+//
+// This provides options for packing multiple fonts into one atlas, not
+// perfectly but better than nothing.
+
+typedef struct
+{
+ unsigned short x0,y0,x1,y1; // coordinates of bbox in bitmap
+ float xoff,yoff,xadvance;
+ float xoff2,yoff2;
+} stbtt_packedchar;
+
+typedef struct stbtt_pack_context stbtt_pack_context;
+typedef struct stbtt_fontinfo stbtt_fontinfo;
+#ifndef STB_RECT_PACK_VERSION
+typedef struct stbrp_rect stbrp_rect;
+#endif
+
+STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int width, int height, int stride_in_bytes, int padding, void *alloc_context);
+// Initializes a packing context stored in the passed-in stbtt_pack_context.
+// Future calls using this context will pack characters into the bitmap passed
+// in here: a 1-channel bitmap that is width * height. stride_in_bytes is
+// the distance from one row to the next (or 0 to mean they are packed tightly
+// together). "padding" is the amount of padding to leave between each
+// character (normally you want '1' for bitmaps you'll use as textures with
+// bilinear filtering).
+//
+// Returns 0 on failure, 1 on success.
+
+STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc);
+// Cleans up the packing context and frees all memory.
+
+#define STBTT_POINT_SIZE(x) (-(x))
+
+STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size,
+ int first_unicode_char_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range);
+// Creates character bitmaps from the font_index'th font found in fontdata (use
+// font_index=0 if you don't know what that is). It creates num_chars_in_range
+// bitmaps for characters with unicode values starting at first_unicode_char_in_range
+// and increasing. Data for how to render them is stored in chardata_for_range;
+// pass these to stbtt_GetPackedQuad to get back renderable quads.
+//
+// font_size is the full height of the character from ascender to descender,
+// as computed by stbtt_ScaleForPixelHeight. To use a point size as computed
+// by stbtt_ScaleForMappingEmToPixels, wrap the point size in STBTT_POINT_SIZE()
+// and pass that result as 'font_size':
+// ..., 20 , ... // font max minus min y is 20 pixels tall
+// ..., STBTT_POINT_SIZE(20), ... // 'M' is 20 pixels tall
+
+typedef struct
+{
+ float font_size;
+ int first_unicode_codepoint_in_range; // if non-zero, then the chars are continuous, and this is the first codepoint
+ int *array_of_unicode_codepoints; // if non-zero, then this is an array of unicode codepoints
+ int num_chars;
+ stbtt_packedchar *chardata_for_range; // output
+ unsigned char h_oversample, v_oversample; // don't set these, they're used internally
+} stbtt_pack_range;
+
+STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges);
+// Creates character bitmaps from multiple ranges of characters stored in
+// ranges. This will usually create a better-packed bitmap than multiple
+// calls to stbtt_PackFontRange. Note that you can call this multiple
+// times within a single PackBegin/PackEnd.
+
+STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample);
+// Oversampling a font increases the quality by allowing higher-quality subpixel
+// positioning, and is especially valuable at smaller text sizes.
+//
+// This function sets the amount of oversampling for all following calls to
+// stbtt_PackFontRange(s) or stbtt_PackFontRangesGatherRects for a given
+// pack context. The default (no oversampling) is achieved by h_oversample=1
+// and v_oversample=1. The total number of pixels required is
+// h_oversample*v_oversample larger than the default; for example, 2x2
+// oversampling requires 4x the storage of 1x1. For best results, render
+// oversampled textures with bilinear filtering. Look at the readme in
+// stb/tests/oversample for information about oversampled fonts
+//
+// To use with PackFontRangesGather etc., you must set it before calls
+// call to PackFontRangesGatherRects.
+
+STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip);
+// If skip != 0, this tells stb_truetype to skip any codepoints for which
+// there is no corresponding glyph. If skip=0, which is the default, then
+// codepoints without a glyph recived the font's "missing character" glyph,
+// typically an empty box by convention.
+
+STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, // same data as above
+ int char_index, // character to display
+ float *xpos, float *ypos, // pointers to current position in screen pixel space
+ stbtt_aligned_quad *q, // output: quad to draw
+ int align_to_integer);
+
+STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects);
+STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects);
+STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects);
+// Calling these functions in sequence is roughly equivalent to calling
+// stbtt_PackFontRanges(). If you more control over the packing of multiple
+// fonts, or if you want to pack custom data into a font texture, take a look
+// at the source to of stbtt_PackFontRanges() and create a custom version
+// using these functions, e.g. call GatherRects multiple times,
+// building up a single array of rects, then call PackRects once,
+// then call RenderIntoRects repeatedly. This may result in a
+// better packing than calling PackFontRanges multiple times
+// (or it may not).
+
+// this is an opaque structure that you shouldn't mess with which holds
+// all the context needed from PackBegin to PackEnd.
+struct stbtt_pack_context {
+ void *user_allocator_context;
+ void *pack_info;
+ int width;
+ int height;
+ int stride_in_bytes;
+ int padding;
+ int skip_missing;
+ unsigned int h_oversample, v_oversample;
+ unsigned char *pixels;
+ void *nodes;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// FONT LOADING
+//
+//
+
+STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data);
+// This function will determine the number of fonts in a font file. TrueType
+// collection (.ttc) files may contain multiple fonts, while TrueType font
+// (.ttf) files only contain one font. The number of fonts can be used for
+// indexing with the previous function where the index is between zero and one
+// less than the total fonts. If an error occurs, -1 is returned.
+
+STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index);
+// Each .ttf/.ttc file may have more than one font. Each font has a sequential
+// index number starting from 0. Call this function to get the font offset for
+// a given index; it returns -1 if the index is out of range. A regular .ttf
+// file will only define one font and it always be at offset 0, so it will
+// return '0' for index 0, and -1 for all other indices.
+
+// The following structure is defined publicly so you can declare one on
+// the stack or as a global or etc, but you should treat it as opaque.
+struct stbtt_fontinfo
+{
+ void * userdata;
+ unsigned char * data; // pointer to .ttf file
+ int fontstart; // offset of start of font
+
+ int numGlyphs; // number of glyphs, needed for range checking
+
+ int loca,head,glyf,hhea,hmtx,kern,gpos,svg; // table locations as offset from start of .ttf
+ int index_map; // a cmap mapping for our chosen character encoding
+ int indexToLocFormat; // format needed to map from glyph index to glyph
+
+ stbtt__buf cff; // cff font data
+ stbtt__buf charstrings; // the charstring index
+ stbtt__buf gsubrs; // global charstring subroutines index
+ stbtt__buf subrs; // private charstring subroutines index
+ stbtt__buf fontdicts; // array of font dicts
+ stbtt__buf fdselect; // map from glyph to fontdict
+};
+
+STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset);
+// Given an offset into the file that defines a font, this function builds
+// the necessary cached info for the rest of the system. You must allocate
+// the stbtt_fontinfo yourself, and stbtt_InitFont will fill it out. You don't
+// need to do anything special to free it, because the contents are pure
+// value data with no additional data structures. Returns 0 on failure.
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// CHARACTER TO GLYPH-INDEX CONVERSIOn
+
+STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint);
+// If you're going to perform multiple operations on the same character
+// and you want a speed-up, call this function with the character you're
+// going to process, then use glyph-based functions instead of the
+// codepoint-based functions.
+// Returns 0 if the character codepoint is not defined in the font.
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// CHARACTER PROPERTIES
+//
+
+STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float pixels);
+// computes a scale factor to produce a font whose "height" is 'pixels' tall.
+// Height is measured as the distance from the highest ascender to the lowest
+// descender; in other words, it's equivalent to calling stbtt_GetFontVMetrics
+// and computing:
+// scale = pixels / (ascent - descent)
+// so if you prefer to measure height by the ascent only, use a similar calculation.
+
+STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels);
+// computes a scale factor to produce a font whose EM size is mapped to
+// 'pixels' tall. This is probably what traditional APIs compute, but
+// I'm not positive.
+
+STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap);
+// ascent is the coordinate above the baseline the font extends; descent
+// is the coordinate below the baseline the font extends (i.e. it is typically negative)
+// lineGap is the spacing between one row's descent and the next row's ascent...
+// so you should advance the vertical position by "*ascent - *descent + *lineGap"
+// these are expressed in unscaled coordinates, so you must multiply by
+// the scale factor for a given size
+
+STBTT_DEF int stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap);
+// analogous to GetFontVMetrics, but returns the "typographic" values from the OS/2
+// table (specific to MS/Windows TTF files).
+//
+// Returns 1 on success (table present), 0 on failure.
+
+STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1);
+// the bounding box around all possible characters
+
+STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing);
+// leftSideBearing is the offset from the current horizontal position to the left edge of the character
+// advanceWidth is the offset from the current horizontal position to the next horizontal position
+// these are expressed in unscaled coordinates
+
+STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2);
+// an additional amount to add to the 'advance' value between ch1 and ch2
+
+STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1);
+// Gets the bounding box of the visible part of the glyph, in unscaled coordinates
+
+STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing);
+STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2);
+STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1);
+// as above, but takes one or more glyph indices for greater efficiency
+
+typedef struct stbtt_kerningentry
+{
+ int glyph1; // use stbtt_FindGlyphIndex
+ int glyph2;
+ int advance;
+} stbtt_kerningentry;
+
+STBTT_DEF int stbtt_GetKerningTableLength(const stbtt_fontinfo *info);
+STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_kerningentry* table, int table_length);
+// Retrieves a complete list of all of the kerning pairs provided by the font
+// stbtt_GetKerningTable never writes more than table_length entries and returns how many entries it did write.
+// The table will be sorted by (a.glyph1 == b.glyph1)?(a.glyph2 < b.glyph2):(a.glyph1 < b.glyph1)
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// GLYPH SHAPES (you probably don't need these, but they have to go before
+// the bitmaps for C declaration-order reasons)
+//
+
+#ifndef STBTT_vmove // you can predefine these to use different values (but why?)
+ enum {
+ STBTT_vmove=1,
+ STBTT_vline,
+ STBTT_vcurve,
+ STBTT_vcubic
+ };
+#endif
+
+#ifndef stbtt_vertex // you can predefine this to use different values
+ // (we share this with other code at RAD)
+ #define stbtt_vertex_type short // can't use stbtt_int16 because that's not visible in the header file
+ typedef struct
+ {
+ stbtt_vertex_type x,y,cx,cy,cx1,cy1;
+ unsigned char type,padding;
+ } stbtt_vertex;
+#endif
+
+STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index);
+// returns non-zero if nothing is drawn for this glyph
+
+STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices);
+STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **vertices);
+// returns # of vertices and fills *vertices with the pointer to them
+// these are expressed in "unscaled" coordinates
+//
+// The shape is a series of contours. Each one starts with
+// a STBTT_moveto, then consists of a series of mixed
+// STBTT_lineto and STBTT_curveto segments. A lineto
+// draws a line from previous endpoint to its x,y; a curveto
+// draws a quadratic bezier from previous endpoint to
+// its x,y, using cx,cy as the bezier control point.
+
+STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *vertices);
+// frees the data allocated above
+
+STBTT_DEF unsigned char *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl);
+STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unicode_codepoint, const char **svg);
+STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char **svg);
+// fills svg with the character's SVG data.
+// returns data size or 0 if SVG not found.
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// BITMAP RENDERING
+//
+
+STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata);
+// frees the bitmap allocated below
+
+STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff);
+// allocates a large-enough single-channel 8bpp bitmap and renders the
+// specified character/glyph at the specified scale into it, with
+// antialiasing. 0 is no coverage (transparent), 255 is fully covered (opaque).
+// *width & *height are filled out with the width & height of the bitmap,
+// which is stored left-to-right, top-to-bottom.
+//
+// xoff/yoff are the offset it pixel space from the glyph origin to the top-left of the bitmap
+
+STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff);
+// the same as stbtt_GetCodepoitnBitmap, but you can specify a subpixel
+// shift for the character
+
+STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint);
+// the same as stbtt_GetCodepointBitmap, but you pass in storage for the bitmap
+// in the form of 'output', with row spacing of 'out_stride' bytes. the bitmap
+// is clipped to out_w/out_h bytes. Call stbtt_GetCodepointBitmapBox to get the
+// width and height and positioning info for it first.
+
+STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint);
+// same as stbtt_MakeCodepointBitmap, but you can specify a subpixel
+// shift for the character
+
+STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint);
+// same as stbtt_MakeCodepointBitmapSubpixel, but prefiltering
+// is performed (see stbtt_PackSetOversampling)
+
+STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1);
+// get the bbox of the bitmap centered around the glyph origin; so the
+// bitmap width is ix1-ix0, height is iy1-iy0, and location to place
+// the bitmap top left is (leftSideBearing*scale,iy0).
+// (Note that the bitmap uses y-increases-down, but the shape uses
+// y-increases-up, so CodepointBitmapBox and CodepointBox are inverted.)
+
+STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1);
+// same as stbtt_GetCodepointBitmapBox, but you can specify a subpixel
+// shift for the character
+
+// the following functions are equivalent to the above functions, but operate
+// on glyph indices instead of Unicode codepoints (for efficiency)
+STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff);
+STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff);
+STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph);
+STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph);
+STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int glyph);
+STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1);
+STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1);
+
+
+// @TODO: don't expose this structure
+typedef struct
+{
+ int w,h,stride;
+ unsigned char *pixels;
+} stbtt__bitmap;
+
+// rasterize a shape with quadratic beziers into a bitmap
+STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, // 1-channel bitmap to draw into
+ float flatness_in_pixels, // allowable error of curve in pixels
+ stbtt_vertex *vertices, // array of vertices defining shape
+ int num_verts, // number of vertices in above array
+ float scale_x, float scale_y, // scale applied to input vertices
+ float shift_x, float shift_y, // translation applied to input vertices
+ int x_off, int y_off, // another translation applied to input
+ int invert, // if non-zero, vertically flip shape
+ void *userdata); // context for to STBTT_MALLOC
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Signed Distance Function (or Field) rendering
+
+STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata);
+// frees the SDF bitmap allocated below
+
+STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff);
+STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff);
+// These functions compute a discretized SDF field for a single character, suitable for storing
+// in a single-channel texture, sampling with bilinear filtering, and testing against
+// larger than some threshold to produce scalable fonts.
+// info -- the font
+// scale -- controls the size of the resulting SDF bitmap, same as it would be creating a regular bitmap
+// glyph/codepoint -- the character to generate the SDF for
+// padding -- extra "pixels" around the character which are filled with the distance to the character (not 0),
+// which allows effects like bit outlines
+// onedge_value -- value 0-255 to test the SDF against to reconstruct the character (i.e. the isocontour of the character)
+// pixel_dist_scale -- what value the SDF should increase by when moving one SDF "pixel" away from the edge (on the 0..255 scale)
+// if positive, > onedge_value is inside; if negative, < onedge_value is inside
+// width,height -- output height & width of the SDF bitmap (including padding)
+// xoff,yoff -- output origin of the character
+// return value -- a 2D array of bytes 0..255, width*height in size
+//
+// pixel_dist_scale & onedge_value are a scale & bias that allows you to make
+// optimal use of the limited 0..255 for your application, trading off precision
+// and special effects. SDF values outside the range 0..255 are clamped to 0..255.
+//
+// Example:
+// scale = stbtt_ScaleForPixelHeight(22)
+// padding = 5
+// onedge_value = 180
+// pixel_dist_scale = 180/5.0 = 36.0
+//
+// This will create an SDF bitmap in which the character is about 22 pixels
+// high but the whole bitmap is about 22+5+5=32 pixels high. To produce a filled
+// shape, sample the SDF at each pixel and fill the pixel if the SDF value
+// is greater than or equal to 180/255. (You'll actually want to antialias,
+// which is beyond the scope of this example.) Additionally, you can compute
+// offset outlines (e.g. to stroke the character border inside & outside,
+// or only outside). For example, to fill outside the character up to 3 SDF
+// pixels, you would compare against (180-36.0*3)/255 = 72/255. The above
+// choice of variables maps a range from 5 pixels outside the shape to
+// 2 pixels inside the shape to 0..255; this is intended primarily for apply
+// outside effects only (the interior range is needed to allow proper
+// antialiasing of the font at *smaller* sizes)
+//
+// The function computes the SDF analytically at each SDF pixel, not by e.g.
+// building a higher-res bitmap and approximating it. In theory the quality
+// should be as high as possible for an SDF of this size & representation, but
+// unclear if this is true in practice (perhaps building a higher-res bitmap
+// and computing from that can allow drop-out prevention).
+//
+// The algorithm has not been optimized at all, so expect it to be slow
+// if computing lots of characters or very large sizes.
+
+
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Finding the right font...
+//
+// You should really just solve this offline, keep your own tables
+// of what font is what, and don't try to get it out of the .ttf file.
+// That's because getting it out of the .ttf file is really hard, because
+// the names in the file can appear in many possible encodings, in many
+// possible languages, and e.g. if you need a case-insensitive comparison,
+// the details of that depend on the encoding & language in a complex way
+// (actually underspecified in truetype, but also gigantic).
+//
+// But you can use the provided functions in two possible ways:
+// stbtt_FindMatchingFont() will use *case-sensitive* comparisons on
+// unicode-encoded names to try to find the font you want;
+// you can run this before calling stbtt_InitFont()
+//
+// stbtt_GetFontNameString() lets you get any of the various strings
+// from the file yourself and do your own comparisons on them.
+// You have to have called stbtt_InitFont() first.
+
+
+STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags);
+// returns the offset (not index) of the font that matches, or -1 if none
+// if you use STBTT_MACSTYLE_DONTCARE, use a font name like "Arial Bold".
+// if you use any other flag, use a font name like "Arial"; this checks
+// the 'macStyle' header field; i don't know if fonts set this consistently
+#define STBTT_MACSTYLE_DONTCARE 0
+#define STBTT_MACSTYLE_BOLD 1
+#define STBTT_MACSTYLE_ITALIC 2
+#define STBTT_MACSTYLE_UNDERSCORE 4
+#define STBTT_MACSTYLE_NONE 8 // <= not same as 0, this makes us check the bitfield is 0
+
+STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2);
+// returns 1/0 whether the first string interpreted as utf8 is identical to
+// the second string interpreted as big-endian utf16... useful for strings from next func
+
+STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID);
+// returns the string (which may be big-endian double byte, e.g. for unicode)
+// and puts the length in bytes in *length.
+//
+// some of the values for the IDs are below; for more see the truetype spec:
+// http://developer.apple.com/textfonts/TTRefMan/RM06/Chap6name.html
+// http://www.microsoft.com/typography/otspec/name.htm
+
+enum { // platformID
+ STBTT_PLATFORM_ID_UNICODE =0,
+ STBTT_PLATFORM_ID_MAC =1,
+ STBTT_PLATFORM_ID_ISO =2,
+ STBTT_PLATFORM_ID_MICROSOFT =3
+};
+
+enum { // encodingID for STBTT_PLATFORM_ID_UNICODE
+ STBTT_UNICODE_EID_UNICODE_1_0 =0,
+ STBTT_UNICODE_EID_UNICODE_1_1 =1,
+ STBTT_UNICODE_EID_ISO_10646 =2,
+ STBTT_UNICODE_EID_UNICODE_2_0_BMP=3,
+ STBTT_UNICODE_EID_UNICODE_2_0_FULL=4
+};
+
+enum { // encodingID for STBTT_PLATFORM_ID_MICROSOFT
+ STBTT_MS_EID_SYMBOL =0,
+ STBTT_MS_EID_UNICODE_BMP =1,
+ STBTT_MS_EID_SHIFTJIS =2,
+ STBTT_MS_EID_UNICODE_FULL =10
+};
+
+enum { // encodingID for STBTT_PLATFORM_ID_MAC; same as Script Manager codes
+ STBTT_MAC_EID_ROMAN =0, STBTT_MAC_EID_ARABIC =4,
+ STBTT_MAC_EID_JAPANESE =1, STBTT_MAC_EID_HEBREW =5,
+ STBTT_MAC_EID_CHINESE_TRAD =2, STBTT_MAC_EID_GREEK =6,
+ STBTT_MAC_EID_KOREAN =3, STBTT_MAC_EID_RUSSIAN =7
+};
+
+enum { // languageID for STBTT_PLATFORM_ID_MICROSOFT; same as LCID...
+ // problematic because there are e.g. 16 english LCIDs and 16 arabic LCIDs
+ STBTT_MS_LANG_ENGLISH =0x0409, STBTT_MS_LANG_ITALIAN =0x0410,
+ STBTT_MS_LANG_CHINESE =0x0804, STBTT_MS_LANG_JAPANESE =0x0411,
+ STBTT_MS_LANG_DUTCH =0x0413, STBTT_MS_LANG_KOREAN =0x0412,
+ STBTT_MS_LANG_FRENCH =0x040c, STBTT_MS_LANG_RUSSIAN =0x0419,
+ STBTT_MS_LANG_GERMAN =0x0407, STBTT_MS_LANG_SPANISH =0x0409,
+ STBTT_MS_LANG_HEBREW =0x040d, STBTT_MS_LANG_SWEDISH =0x041D
+};
+
+enum { // languageID for STBTT_PLATFORM_ID_MAC
+ STBTT_MAC_LANG_ENGLISH =0 , STBTT_MAC_LANG_JAPANESE =11,
+ STBTT_MAC_LANG_ARABIC =12, STBTT_MAC_LANG_KOREAN =23,
+ STBTT_MAC_LANG_DUTCH =4 , STBTT_MAC_LANG_RUSSIAN =32,
+ STBTT_MAC_LANG_FRENCH =1 , STBTT_MAC_LANG_SPANISH =6 ,
+ STBTT_MAC_LANG_GERMAN =2 , STBTT_MAC_LANG_SWEDISH =5 ,
+ STBTT_MAC_LANG_HEBREW =10, STBTT_MAC_LANG_CHINESE_SIMPLIFIED =33,
+ STBTT_MAC_LANG_ITALIAN =3 , STBTT_MAC_LANG_CHINESE_TRAD =19
+};
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // __STB_INCLUDE_STB_TRUETYPE_H__
+
+///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+////
+//// IMPLEMENTATION
+////
+////
+
+#ifdef STB_TRUETYPE_IMPLEMENTATION
+
+#ifndef STBTT_MAX_OVERSAMPLE
+#define STBTT_MAX_OVERSAMPLE 8
+#endif
+
+#if STBTT_MAX_OVERSAMPLE > 255
+#error "STBTT_MAX_OVERSAMPLE cannot be > 255"
+#endif
+
+typedef int stbtt__test_oversample_pow2[(STBTT_MAX_OVERSAMPLE & (STBTT_MAX_OVERSAMPLE-1)) == 0 ? 1 : -1];
+
+#ifndef STBTT_RASTERIZER_VERSION
+#define STBTT_RASTERIZER_VERSION 2
+#endif
+
+#ifdef _MSC_VER
+#define STBTT__NOTUSED(v) (void)(v)
+#else
+#define STBTT__NOTUSED(v) (void)sizeof(v)
+#endif
+
+//////////////////////////////////////////////////////////////////////////
+//
+// stbtt__buf helpers to parse data from file
+//
+
+static stbtt_uint8 stbtt__buf_get8(stbtt__buf *b)
+{
+ if (b->cursor >= b->size)
+ return 0;
+ return b->data[b->cursor++];
+}
+
+static stbtt_uint8 stbtt__buf_peek8(stbtt__buf *b)
+{
+ if (b->cursor >= b->size)
+ return 0;
+ return b->data[b->cursor];
+}
+
+static void stbtt__buf_seek(stbtt__buf *b, int o)
+{
+ STBTT_assert(!(o > b->size || o < 0));
+ b->cursor = (o > b->size || o < 0) ? b->size : o;
+}
+
+static void stbtt__buf_skip(stbtt__buf *b, int o)
+{
+ stbtt__buf_seek(b, b->cursor + o);
+}
+
+static stbtt_uint32 stbtt__buf_get(stbtt__buf *b, int n)
+{
+ stbtt_uint32 v = 0;
+ int i;
+ STBTT_assert(n >= 1 && n <= 4);
+ for (i = 0; i < n; i++)
+ v = (v << 8) | stbtt__buf_get8(b);
+ return v;
+}
+
+static stbtt__buf stbtt__new_buf(const void *p, size_t size)
+{
+ stbtt__buf r;
+ STBTT_assert(size < 0x40000000);
+ r.data = (stbtt_uint8*) p;
+ r.size = (int) size;
+ r.cursor = 0;
+ return r;
+}
+
+#define stbtt__buf_get16(b) stbtt__buf_get((b), 2)
+#define stbtt__buf_get32(b) stbtt__buf_get((b), 4)
+
+static stbtt__buf stbtt__buf_range(const stbtt__buf *b, int o, int s)
+{
+ stbtt__buf r = stbtt__new_buf(NULL, 0);
+ if (o < 0 || s < 0 || o > b->size || s > b->size - o) return r;
+ r.data = b->data + o;
+ r.size = s;
+ return r;
+}
+
+static stbtt__buf stbtt__cff_get_index(stbtt__buf *b)
+{
+ int count, start, offsize;
+ start = b->cursor;
+ count = stbtt__buf_get16(b);
+ if (count) {
+ offsize = stbtt__buf_get8(b);
+ STBTT_assert(offsize >= 1 && offsize <= 4);
+ stbtt__buf_skip(b, offsize * count);
+ stbtt__buf_skip(b, stbtt__buf_get(b, offsize) - 1);
+ }
+ return stbtt__buf_range(b, start, b->cursor - start);
+}
+
+static stbtt_uint32 stbtt__cff_int(stbtt__buf *b)
+{
+ int b0 = stbtt__buf_get8(b);
+ if (b0 >= 32 && b0 <= 246) return b0 - 139;
+ else if (b0 >= 247 && b0 <= 250) return (b0 - 247)*256 + stbtt__buf_get8(b) + 108;
+ else if (b0 >= 251 && b0 <= 254) return -(b0 - 251)*256 - stbtt__buf_get8(b) - 108;
+ else if (b0 == 28) return stbtt__buf_get16(b);
+ else if (b0 == 29) return stbtt__buf_get32(b);
+ STBTT_assert(0);
+ return 0;
+}
+
+static void stbtt__cff_skip_operand(stbtt__buf *b) {
+ int v, b0 = stbtt__buf_peek8(b);
+ STBTT_assert(b0 >= 28);
+ if (b0 == 30) {
+ stbtt__buf_skip(b, 1);
+ while (b->cursor < b->size) {
+ v = stbtt__buf_get8(b);
+ if ((v & 0xF) == 0xF || (v >> 4) == 0xF)
+ break;
+ }
+ } else {
+ stbtt__cff_int(b);
+ }
+}
+
+static stbtt__buf stbtt__dict_get(stbtt__buf *b, int key)
+{
+ stbtt__buf_seek(b, 0);
+ while (b->cursor < b->size) {
+ int start = b->cursor, end, op;
+ while (stbtt__buf_peek8(b) >= 28)
+ stbtt__cff_skip_operand(b);
+ end = b->cursor;
+ op = stbtt__buf_get8(b);
+ if (op == 12) op = stbtt__buf_get8(b) | 0x100;
+ if (op == key) return stbtt__buf_range(b, start, end-start);
+ }
+ return stbtt__buf_range(b, 0, 0);
+}
+
+static void stbtt__dict_get_ints(stbtt__buf *b, int key, int outcount, stbtt_uint32 *out)
+{
+ int i;
+ stbtt__buf operands = stbtt__dict_get(b, key);
+ for (i = 0; i < outcount && operands.cursor < operands.size; i++)
+ out[i] = stbtt__cff_int(&operands);
+}
+
+static int stbtt__cff_index_count(stbtt__buf *b)
+{
+ stbtt__buf_seek(b, 0);
+ return stbtt__buf_get16(b);
+}
+
+static stbtt__buf stbtt__cff_index_get(stbtt__buf b, int i)
+{
+ int count, offsize, start, end;
+ stbtt__buf_seek(&b, 0);
+ count = stbtt__buf_get16(&b);
+ offsize = stbtt__buf_get8(&b);
+ STBTT_assert(i >= 0 && i < count);
+ STBTT_assert(offsize >= 1 && offsize <= 4);
+ stbtt__buf_skip(&b, i*offsize);
+ start = stbtt__buf_get(&b, offsize);
+ end = stbtt__buf_get(&b, offsize);
+ return stbtt__buf_range(&b, 2+(count+1)*offsize+start, end - start);
+}
+
+//////////////////////////////////////////////////////////////////////////
+//
+// accessors to parse data from file
+//
+
+// on platforms that don't allow misaligned reads, if we want to allow
+// truetype fonts that aren't padded to alignment, define ALLOW_UNALIGNED_TRUETYPE
+
+#define ttBYTE(p) (* (stbtt_uint8 *) (p))
+#define ttCHAR(p) (* (stbtt_int8 *) (p))
+#define ttFixed(p) ttLONG(p)
+
+static stbtt_uint16 ttUSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
+static stbtt_int16 ttSHORT(stbtt_uint8 *p) { return p[0]*256 + p[1]; }
+static stbtt_uint32 ttULONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; }
+static stbtt_int32 ttLONG(stbtt_uint8 *p) { return (p[0]<<24) + (p[1]<<16) + (p[2]<<8) + p[3]; }
+
+#define stbtt_tag4(p,c0,c1,c2,c3) ((p)[0] == (c0) && (p)[1] == (c1) && (p)[2] == (c2) && (p)[3] == (c3))
+#define stbtt_tag(p,str) stbtt_tag4(p,str[0],str[1],str[2],str[3])
+
+static int stbtt__isfont(stbtt_uint8 *font)
+{
+ // check the version number
+ if (stbtt_tag4(font, '1',0,0,0)) return 1; // TrueType 1
+ if (stbtt_tag(font, "typ1")) return 1; // TrueType with type 1 font -- we don't support this!
+ if (stbtt_tag(font, "OTTO")) return 1; // OpenType with CFF
+ if (stbtt_tag4(font, 0,1,0,0)) return 1; // OpenType 1.0
+ if (stbtt_tag(font, "true")) return 1; // Apple specification for TrueType fonts
+ return 0;
+}
+
+// @OPTIMIZE: binary search
+static stbtt_uint32 stbtt__find_table(stbtt_uint8 *data, stbtt_uint32 fontstart, const char *tag)
+{
+ stbtt_int32 num_tables = ttUSHORT(data+fontstart+4);
+ stbtt_uint32 tabledir = fontstart + 12;
+ stbtt_int32 i;
+ for (i=0; i < num_tables; ++i) {
+ stbtt_uint32 loc = tabledir + 16*i;
+ if (stbtt_tag(data+loc+0, tag))
+ return ttULONG(data+loc+8);
+ }
+ return 0;
+}
+
+static int stbtt_GetFontOffsetForIndex_internal(unsigned char *font_collection, int index)
+{
+ // if it's just a font, there's only one valid index
+ if (stbtt__isfont(font_collection))
+ return index == 0 ? 0 : -1;
+
+ // check if it's a TTC
+ if (stbtt_tag(font_collection, "ttcf")) {
+ // version 1?
+ if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) {
+ stbtt_int32 n = ttLONG(font_collection+8);
+ if (index >= n)
+ return -1;
+ return ttULONG(font_collection+12+index*4);
+ }
+ }
+ return -1;
+}
+
+static int stbtt_GetNumberOfFonts_internal(unsigned char *font_collection)
+{
+ // if it's just a font, there's only one valid font
+ if (stbtt__isfont(font_collection))
+ return 1;
+
+ // check if it's a TTC
+ if (stbtt_tag(font_collection, "ttcf")) {
+ // version 1?
+ if (ttULONG(font_collection+4) == 0x00010000 || ttULONG(font_collection+4) == 0x00020000) {
+ return ttLONG(font_collection+8);
+ }
+ }
+ return 0;
+}
+
+static stbtt__buf stbtt__get_subrs(stbtt__buf cff, stbtt__buf fontdict)
+{
+ stbtt_uint32 subrsoff = 0, private_loc[2] = { 0, 0 };
+ stbtt__buf pdict;
+ stbtt__dict_get_ints(&fontdict, 18, 2, private_loc);
+ if (!private_loc[1] || !private_loc[0]) return stbtt__new_buf(NULL, 0);
+ pdict = stbtt__buf_range(&cff, private_loc[1], private_loc[0]);
+ stbtt__dict_get_ints(&pdict, 19, 1, &subrsoff);
+ if (!subrsoff) return stbtt__new_buf(NULL, 0);
+ stbtt__buf_seek(&cff, private_loc[1]+subrsoff);
+ return stbtt__cff_get_index(&cff);
+}
+
+// since most people won't use this, find this table the first time it's needed
+static int stbtt__get_svg(stbtt_fontinfo *info)
+{
+ stbtt_uint32 t;
+ if (info->svg < 0) {
+ t = stbtt__find_table(info->data, info->fontstart, "SVG ");
+ if (t) {
+ stbtt_uint32 offset = ttULONG(info->data + t + 2);
+ info->svg = t + offset;
+ } else {
+ info->svg = 0;
+ }
+ }
+ return info->svg;
+}
+
+static int stbtt_InitFont_internal(stbtt_fontinfo *info, unsigned char *data, int fontstart)
+{
+ stbtt_uint32 cmap, t;
+ stbtt_int32 i,numTables;
+
+ info->data = data;
+ info->fontstart = fontstart;
+ info->cff = stbtt__new_buf(NULL, 0);
+
+ cmap = stbtt__find_table(data, fontstart, "cmap"); // required
+ info->loca = stbtt__find_table(data, fontstart, "loca"); // required
+ info->head = stbtt__find_table(data, fontstart, "head"); // required
+ info->glyf = stbtt__find_table(data, fontstart, "glyf"); // required
+ info->hhea = stbtt__find_table(data, fontstart, "hhea"); // required
+ info->hmtx = stbtt__find_table(data, fontstart, "hmtx"); // required
+ info->kern = stbtt__find_table(data, fontstart, "kern"); // not required
+ info->gpos = stbtt__find_table(data, fontstart, "GPOS"); // not required
+
+ if (!cmap || !info->head || !info->hhea || !info->hmtx)
+ return 0;
+ if (info->glyf) {
+ // required for truetype
+ if (!info->loca) return 0;
+ } else {
+ // initialization for CFF / Type2 fonts (OTF)
+ stbtt__buf b, topdict, topdictidx;
+ stbtt_uint32 cstype = 2, charstrings = 0, fdarrayoff = 0, fdselectoff = 0;
+ stbtt_uint32 cff;
+
+ cff = stbtt__find_table(data, fontstart, "CFF ");
+ if (!cff) return 0;
+
+ info->fontdicts = stbtt__new_buf(NULL, 0);
+ info->fdselect = stbtt__new_buf(NULL, 0);
+
+ // @TODO this should use size from table (not 512MB)
+ info->cff = stbtt__new_buf(data+cff, 512*1024*1024);
+ b = info->cff;
+
+ // read the header
+ stbtt__buf_skip(&b, 2);
+ stbtt__buf_seek(&b, stbtt__buf_get8(&b)); // hdrsize
+
+ // @TODO the name INDEX could list multiple fonts,
+ // but we just use the first one.
+ stbtt__cff_get_index(&b); // name INDEX
+ topdictidx = stbtt__cff_get_index(&b);
+ topdict = stbtt__cff_index_get(topdictidx, 0);
+ stbtt__cff_get_index(&b); // string INDEX
+ info->gsubrs = stbtt__cff_get_index(&b);
+
+ stbtt__dict_get_ints(&topdict, 17, 1, &charstrings);
+ stbtt__dict_get_ints(&topdict, 0x100 | 6, 1, &cstype);
+ stbtt__dict_get_ints(&topdict, 0x100 | 36, 1, &fdarrayoff);
+ stbtt__dict_get_ints(&topdict, 0x100 | 37, 1, &fdselectoff);
+ info->subrs = stbtt__get_subrs(b, topdict);
+
+ // we only support Type 2 charstrings
+ if (cstype != 2) return 0;
+ if (charstrings == 0) return 0;
+
+ if (fdarrayoff) {
+ // looks like a CID font
+ if (!fdselectoff) return 0;
+ stbtt__buf_seek(&b, fdarrayoff);
+ info->fontdicts = stbtt__cff_get_index(&b);
+ info->fdselect = stbtt__buf_range(&b, fdselectoff, b.size-fdselectoff);
+ }
+
+ stbtt__buf_seek(&b, charstrings);
+ info->charstrings = stbtt__cff_get_index(&b);
+ }
+
+ t = stbtt__find_table(data, fontstart, "maxp");
+ if (t)
+ info->numGlyphs = ttUSHORT(data+t+4);
+ else
+ info->numGlyphs = 0xffff;
+
+ info->svg = -1;
+
+ // find a cmap encoding table we understand *now* to avoid searching
+ // later. (todo: could make this installable)
+ // the same regardless of glyph.
+ numTables = ttUSHORT(data + cmap + 2);
+ info->index_map = 0;
+ for (i=0; i < numTables; ++i) {
+ stbtt_uint32 encoding_record = cmap + 4 + 8 * i;
+ // find an encoding we understand:
+ switch(ttUSHORT(data+encoding_record)) {
+ case STBTT_PLATFORM_ID_MICROSOFT:
+ switch (ttUSHORT(data+encoding_record+2)) {
+ case STBTT_MS_EID_UNICODE_BMP:
+ case STBTT_MS_EID_UNICODE_FULL:
+ // MS/Unicode
+ info->index_map = cmap + ttULONG(data+encoding_record+4);
+ break;
+ }
+ break;
+ case STBTT_PLATFORM_ID_UNICODE:
+ // Mac/iOS has these
+ // all the encodingIDs are unicode, so we don't bother to check it
+ info->index_map = cmap + ttULONG(data+encoding_record+4);
+ break;
+ }
+ }
+ if (info->index_map == 0)
+ return 0;
+
+ info->indexToLocFormat = ttUSHORT(data+info->head + 50);
+ return 1;
+}
+
+STBTT_DEF int stbtt_FindGlyphIndex(const stbtt_fontinfo *info, int unicode_codepoint)
+{
+ stbtt_uint8 *data = info->data;
+ stbtt_uint32 index_map = info->index_map;
+
+ stbtt_uint16 format = ttUSHORT(data + index_map + 0);
+ if (format == 0) { // apple byte encoding
+ stbtt_int32 bytes = ttUSHORT(data + index_map + 2);
+ if (unicode_codepoint < bytes-6)
+ return ttBYTE(data + index_map + 6 + unicode_codepoint);
+ return 0;
+ } else if (format == 6) {
+ stbtt_uint32 first = ttUSHORT(data + index_map + 6);
+ stbtt_uint32 count = ttUSHORT(data + index_map + 8);
+ if ((stbtt_uint32) unicode_codepoint >= first && (stbtt_uint32) unicode_codepoint < first+count)
+ return ttUSHORT(data + index_map + 10 + (unicode_codepoint - first)*2);
+ return 0;
+ } else if (format == 2) {
+ STBTT_assert(0); // @TODO: high-byte mapping for japanese/chinese/korean
+ return 0;
+ } else if (format == 4) { // standard mapping for windows fonts: binary search collection of ranges
+ stbtt_uint16 segcount = ttUSHORT(data+index_map+6) >> 1;
+ stbtt_uint16 searchRange = ttUSHORT(data+index_map+8) >> 1;
+ stbtt_uint16 entrySelector = ttUSHORT(data+index_map+10);
+ stbtt_uint16 rangeShift = ttUSHORT(data+index_map+12) >> 1;
+
+ // do a binary search of the segments
+ stbtt_uint32 endCount = index_map + 14;
+ stbtt_uint32 search = endCount;
+
+ if (unicode_codepoint > 0xffff)
+ return 0;
+
+ // they lie from endCount .. endCount + segCount
+ // but searchRange is the nearest power of two, so...
+ if (unicode_codepoint >= ttUSHORT(data + search + rangeShift*2))
+ search += rangeShift*2;
+
+ // now decrement to bias correctly to find smallest
+ search -= 2;
+ while (entrySelector) {
+ stbtt_uint16 end;
+ searchRange >>= 1;
+ end = ttUSHORT(data + search + searchRange*2);
+ if (unicode_codepoint > end)
+ search += searchRange*2;
+ --entrySelector;
+ }
+ search += 2;
+
+ {
+ stbtt_uint16 offset, start, last;
+ stbtt_uint16 item = (stbtt_uint16) ((search - endCount) >> 1);
+
+ start = ttUSHORT(data + index_map + 14 + segcount*2 + 2 + 2*item);
+ last = ttUSHORT(data + endCount + 2*item);
+ if (unicode_codepoint < start || unicode_codepoint > last)
+ return 0;
+
+ offset = ttUSHORT(data + index_map + 14 + segcount*6 + 2 + 2*item);
+ if (offset == 0)
+ return (stbtt_uint16) (unicode_codepoint + ttSHORT(data + index_map + 14 + segcount*4 + 2 + 2*item));
+
+ return ttUSHORT(data + offset + (unicode_codepoint-start)*2 + index_map + 14 + segcount*6 + 2 + 2*item);
+ }
+ } else if (format == 12 || format == 13) {
+ stbtt_uint32 ngroups = ttULONG(data+index_map+12);
+ stbtt_int32 low,high;
+ low = 0; high = (stbtt_int32)ngroups;
+ // Binary search the right group.
+ while (low < high) {
+ stbtt_int32 mid = low + ((high-low) >> 1); // rounds down, so low <= mid < high
+ stbtt_uint32 start_char = ttULONG(data+index_map+16+mid*12);
+ stbtt_uint32 end_char = ttULONG(data+index_map+16+mid*12+4);
+ if ((stbtt_uint32) unicode_codepoint < start_char)
+ high = mid;
+ else if ((stbtt_uint32) unicode_codepoint > end_char)
+ low = mid+1;
+ else {
+ stbtt_uint32 start_glyph = ttULONG(data+index_map+16+mid*12+8);
+ if (format == 12)
+ return start_glyph + unicode_codepoint-start_char;
+ else // format == 13
+ return start_glyph;
+ }
+ }
+ return 0; // not found
+ }
+ // @TODO
+ STBTT_assert(0);
+ return 0;
+}
+
+STBTT_DEF int stbtt_GetCodepointShape(const stbtt_fontinfo *info, int unicode_codepoint, stbtt_vertex **vertices)
+{
+ return stbtt_GetGlyphShape(info, stbtt_FindGlyphIndex(info, unicode_codepoint), vertices);
+}
+
+static void stbtt_setvertex(stbtt_vertex *v, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy)
+{
+ v->type = type;
+ v->x = (stbtt_int16) x;
+ v->y = (stbtt_int16) y;
+ v->cx = (stbtt_int16) cx;
+ v->cy = (stbtt_int16) cy;
+}
+
+static int stbtt__GetGlyfOffset(const stbtt_fontinfo *info, int glyph_index)
+{
+ int g1,g2;
+
+ STBTT_assert(!info->cff.size);
+
+ if (glyph_index >= info->numGlyphs) return -1; // glyph index out of range
+ if (info->indexToLocFormat >= 2) return -1; // unknown index->glyph map format
+
+ if (info->indexToLocFormat == 0) {
+ g1 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2) * 2;
+ g2 = info->glyf + ttUSHORT(info->data + info->loca + glyph_index * 2 + 2) * 2;
+ } else {
+ g1 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4);
+ g2 = info->glyf + ttULONG (info->data + info->loca + glyph_index * 4 + 4);
+ }
+
+ return g1==g2 ? -1 : g1; // if length is 0, return -1
+}
+
+static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1);
+
+STBTT_DEF int stbtt_GetGlyphBox(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1)
+{
+ if (info->cff.size) {
+ stbtt__GetGlyphInfoT2(info, glyph_index, x0, y0, x1, y1);
+ } else {
+ int g = stbtt__GetGlyfOffset(info, glyph_index);
+ if (g < 0) return 0;
+
+ if (x0) *x0 = ttSHORT(info->data + g + 2);
+ if (y0) *y0 = ttSHORT(info->data + g + 4);
+ if (x1) *x1 = ttSHORT(info->data + g + 6);
+ if (y1) *y1 = ttSHORT(info->data + g + 8);
+ }
+ return 1;
+}
+
+STBTT_DEF int stbtt_GetCodepointBox(const stbtt_fontinfo *info, int codepoint, int *x0, int *y0, int *x1, int *y1)
+{
+ return stbtt_GetGlyphBox(info, stbtt_FindGlyphIndex(info,codepoint), x0,y0,x1,y1);
+}
+
+STBTT_DEF int stbtt_IsGlyphEmpty(const stbtt_fontinfo *info, int glyph_index)
+{
+ stbtt_int16 numberOfContours;
+ int g;
+ if (info->cff.size)
+ return stbtt__GetGlyphInfoT2(info, glyph_index, NULL, NULL, NULL, NULL) == 0;
+ g = stbtt__GetGlyfOffset(info, glyph_index);
+ if (g < 0) return 1;
+ numberOfContours = ttSHORT(info->data + g);
+ return numberOfContours == 0;
+}
+
+static int stbtt__close_shape(stbtt_vertex *vertices, int num_vertices, int was_off, int start_off,
+ stbtt_int32 sx, stbtt_int32 sy, stbtt_int32 scx, stbtt_int32 scy, stbtt_int32 cx, stbtt_int32 cy)
+{
+ if (start_off) {
+ if (was_off)
+ stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+scx)>>1, (cy+scy)>>1, cx,cy);
+ stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, sx,sy,scx,scy);
+ } else {
+ if (was_off)
+ stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve,sx,sy,cx,cy);
+ else
+ stbtt_setvertex(&vertices[num_vertices++], STBTT_vline,sx,sy,0,0);
+ }
+ return num_vertices;
+}
+
+static int stbtt__GetGlyphShapeTT(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
+{
+ stbtt_int16 numberOfContours;
+ stbtt_uint8 *endPtsOfContours;
+ stbtt_uint8 *data = info->data;
+ stbtt_vertex *vertices=0;
+ int num_vertices=0;
+ int g = stbtt__GetGlyfOffset(info, glyph_index);
+
+ *pvertices = NULL;
+
+ if (g < 0) return 0;
+
+ numberOfContours = ttSHORT(data + g);
+
+ if (numberOfContours > 0) {
+ stbtt_uint8 flags=0,flagcount;
+ stbtt_int32 ins, i,j=0,m,n, next_move, was_off=0, off, start_off=0;
+ stbtt_int32 x,y,cx,cy,sx,sy, scx,scy;
+ stbtt_uint8 *points;
+ endPtsOfContours = (data + g + 10);
+ ins = ttUSHORT(data + g + 10 + numberOfContours * 2);
+ points = data + g + 10 + numberOfContours * 2 + 2 + ins;
+
+ n = 1+ttUSHORT(endPtsOfContours + numberOfContours*2-2);
+
+ m = n + 2*numberOfContours; // a loose bound on how many vertices we might need
+ vertices = (stbtt_vertex *) STBTT_malloc(m * sizeof(vertices[0]), info->userdata);
+ if (vertices == 0)
+ return 0;
+
+ next_move = 0;
+ flagcount=0;
+
+ // in first pass, we load uninterpreted data into the allocated array
+ // above, shifted to the end of the array so we won't overwrite it when
+ // we create our final data starting from the front
+
+ off = m - n; // starting offset for uninterpreted data, regardless of how m ends up being calculated
+
+ // first load flags
+
+ for (i=0; i < n; ++i) {
+ if (flagcount == 0) {
+ flags = *points++;
+ if (flags & 8)
+ flagcount = *points++;
+ } else
+ --flagcount;
+ vertices[off+i].type = flags;
+ }
+
+ // now load x coordinates
+ x=0;
+ for (i=0; i < n; ++i) {
+ flags = vertices[off+i].type;
+ if (flags & 2) {
+ stbtt_int16 dx = *points++;
+ x += (flags & 16) ? dx : -dx; // ???
+ } else {
+ if (!(flags & 16)) {
+ x = x + (stbtt_int16) (points[0]*256 + points[1]);
+ points += 2;
+ }
+ }
+ vertices[off+i].x = (stbtt_int16) x;
+ }
+
+ // now load y coordinates
+ y=0;
+ for (i=0; i < n; ++i) {
+ flags = vertices[off+i].type;
+ if (flags & 4) {
+ stbtt_int16 dy = *points++;
+ y += (flags & 32) ? dy : -dy; // ???
+ } else {
+ if (!(flags & 32)) {
+ y = y + (stbtt_int16) (points[0]*256 + points[1]);
+ points += 2;
+ }
+ }
+ vertices[off+i].y = (stbtt_int16) y;
+ }
+
+ // now convert them to our format
+ num_vertices=0;
+ sx = sy = cx = cy = scx = scy = 0;
+ for (i=0; i < n; ++i) {
+ flags = vertices[off+i].type;
+ x = (stbtt_int16) vertices[off+i].x;
+ y = (stbtt_int16) vertices[off+i].y;
+
+ if (next_move == i) {
+ if (i != 0)
+ num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy);
+
+ // now start the new one
+ start_off = !(flags & 1);
+ if (start_off) {
+ // if we start off with an off-curve point, then when we need to find a point on the curve
+ // where we can start, and we need to save some state for when we wraparound.
+ scx = x;
+ scy = y;
+ if (!(vertices[off+i+1].type & 1)) {
+ // next point is also a curve point, so interpolate an on-point curve
+ sx = (x + (stbtt_int32) vertices[off+i+1].x) >> 1;
+ sy = (y + (stbtt_int32) vertices[off+i+1].y) >> 1;
+ } else {
+ // otherwise just use the next point as our start point
+ sx = (stbtt_int32) vertices[off+i+1].x;
+ sy = (stbtt_int32) vertices[off+i+1].y;
+ ++i; // we're using point i+1 as the starting point, so skip it
+ }
+ } else {
+ sx = x;
+ sy = y;
+ }
+ stbtt_setvertex(&vertices[num_vertices++], STBTT_vmove,sx,sy,0,0);
+ was_off = 0;
+ next_move = 1 + ttUSHORT(endPtsOfContours+j*2);
+ ++j;
+ } else {
+ if (!(flags & 1)) { // if it's a curve
+ if (was_off) // two off-curve control points in a row means interpolate an on-curve midpoint
+ stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, (cx+x)>>1, (cy+y)>>1, cx, cy);
+ cx = x;
+ cy = y;
+ was_off = 1;
+ } else {
+ if (was_off)
+ stbtt_setvertex(&vertices[num_vertices++], STBTT_vcurve, x,y, cx, cy);
+ else
+ stbtt_setvertex(&vertices[num_vertices++], STBTT_vline, x,y,0,0);
+ was_off = 0;
+ }
+ }
+ }
+ num_vertices = stbtt__close_shape(vertices, num_vertices, was_off, start_off, sx,sy,scx,scy,cx,cy);
+ } else if (numberOfContours < 0) {
+ // Compound shapes.
+ int more = 1;
+ stbtt_uint8 *comp = data + g + 10;
+ num_vertices = 0;
+ vertices = 0;
+ while (more) {
+ stbtt_uint16 flags, gidx;
+ int comp_num_verts = 0, i;
+ stbtt_vertex *comp_verts = 0, *tmp = 0;
+ float mtx[6] = {1,0,0,1,0,0}, m, n;
+
+ flags = ttSHORT(comp); comp+=2;
+ gidx = ttSHORT(comp); comp+=2;
+
+ if (flags & 2) { // XY values
+ if (flags & 1) { // shorts
+ mtx[4] = ttSHORT(comp); comp+=2;
+ mtx[5] = ttSHORT(comp); comp+=2;
+ } else {
+ mtx[4] = ttCHAR(comp); comp+=1;
+ mtx[5] = ttCHAR(comp); comp+=1;
+ }
+ }
+ else {
+ // @TODO handle matching point
+ STBTT_assert(0);
+ }
+ if (flags & (1<<3)) { // WE_HAVE_A_SCALE
+ mtx[0] = mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
+ mtx[1] = mtx[2] = 0;
+ } else if (flags & (1<<6)) { // WE_HAVE_AN_X_AND_YSCALE
+ mtx[0] = ttSHORT(comp)/16384.0f; comp+=2;
+ mtx[1] = mtx[2] = 0;
+ mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
+ } else if (flags & (1<<7)) { // WE_HAVE_A_TWO_BY_TWO
+ mtx[0] = ttSHORT(comp)/16384.0f; comp+=2;
+ mtx[1] = ttSHORT(comp)/16384.0f; comp+=2;
+ mtx[2] = ttSHORT(comp)/16384.0f; comp+=2;
+ mtx[3] = ttSHORT(comp)/16384.0f; comp+=2;
+ }
+
+ // Find transformation scales.
+ m = (float) STBTT_sqrt(mtx[0]*mtx[0] + mtx[1]*mtx[1]);
+ n = (float) STBTT_sqrt(mtx[2]*mtx[2] + mtx[3]*mtx[3]);
+
+ // Get indexed glyph.
+ comp_num_verts = stbtt_GetGlyphShape(info, gidx, &comp_verts);
+ if (comp_num_verts > 0) {
+ // Transform vertices.
+ for (i = 0; i < comp_num_verts; ++i) {
+ stbtt_vertex* v = &comp_verts[i];
+ stbtt_vertex_type x,y;
+ x=v->x; y=v->y;
+ v->x = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4]));
+ v->y = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5]));
+ x=v->cx; y=v->cy;
+ v->cx = (stbtt_vertex_type)(m * (mtx[0]*x + mtx[2]*y + mtx[4]));
+ v->cy = (stbtt_vertex_type)(n * (mtx[1]*x + mtx[3]*y + mtx[5]));
+ }
+ // Append vertices.
+ tmp = (stbtt_vertex*)STBTT_malloc((num_vertices+comp_num_verts)*sizeof(stbtt_vertex), info->userdata);
+ if (!tmp) {
+ if (vertices) STBTT_free(vertices, info->userdata);
+ if (comp_verts) STBTT_free(comp_verts, info->userdata);
+ return 0;
+ }
+ if (num_vertices > 0 && vertices) STBTT_memcpy(tmp, vertices, num_vertices*sizeof(stbtt_vertex));
+ STBTT_memcpy(tmp+num_vertices, comp_verts, comp_num_verts*sizeof(stbtt_vertex));
+ if (vertices) STBTT_free(vertices, info->userdata);
+ vertices = tmp;
+ STBTT_free(comp_verts, info->userdata);
+ num_vertices += comp_num_verts;
+ }
+ // More components ?
+ more = flags & (1<<5);
+ }
+ } else {
+ // numberOfCounters == 0, do nothing
+ }
+
+ *pvertices = vertices;
+ return num_vertices;
+}
+
+typedef struct
+{
+ int bounds;
+ int started;
+ float first_x, first_y;
+ float x, y;
+ stbtt_int32 min_x, max_x, min_y, max_y;
+
+ stbtt_vertex *pvertices;
+ int num_vertices;
+} stbtt__csctx;
+
+#define STBTT__CSCTX_INIT(bounds) {bounds,0, 0,0, 0,0, 0,0,0,0, NULL, 0}
+
+static void stbtt__track_vertex(stbtt__csctx *c, stbtt_int32 x, stbtt_int32 y)
+{
+ if (x > c->max_x || !c->started) c->max_x = x;
+ if (y > c->max_y || !c->started) c->max_y = y;
+ if (x < c->min_x || !c->started) c->min_x = x;
+ if (y < c->min_y || !c->started) c->min_y = y;
+ c->started = 1;
+}
+
+static void stbtt__csctx_v(stbtt__csctx *c, stbtt_uint8 type, stbtt_int32 x, stbtt_int32 y, stbtt_int32 cx, stbtt_int32 cy, stbtt_int32 cx1, stbtt_int32 cy1)
+{
+ if (c->bounds) {
+ stbtt__track_vertex(c, x, y);
+ if (type == STBTT_vcubic) {
+ stbtt__track_vertex(c, cx, cy);
+ stbtt__track_vertex(c, cx1, cy1);
+ }
+ } else {
+ stbtt_setvertex(&c->pvertices[c->num_vertices], type, x, y, cx, cy);
+ c->pvertices[c->num_vertices].cx1 = (stbtt_int16) cx1;
+ c->pvertices[c->num_vertices].cy1 = (stbtt_int16) cy1;
+ }
+ c->num_vertices++;
+}
+
+static void stbtt__csctx_close_shape(stbtt__csctx *ctx)
+{
+ if (ctx->first_x != ctx->x || ctx->first_y != ctx->y)
+ stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->first_x, (int)ctx->first_y, 0, 0, 0, 0);
+}
+
+static void stbtt__csctx_rmove_to(stbtt__csctx *ctx, float dx, float dy)
+{
+ stbtt__csctx_close_shape(ctx);
+ ctx->first_x = ctx->x = ctx->x + dx;
+ ctx->first_y = ctx->y = ctx->y + dy;
+ stbtt__csctx_v(ctx, STBTT_vmove, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0);
+}
+
+static void stbtt__csctx_rline_to(stbtt__csctx *ctx, float dx, float dy)
+{
+ ctx->x += dx;
+ ctx->y += dy;
+ stbtt__csctx_v(ctx, STBTT_vline, (int)ctx->x, (int)ctx->y, 0, 0, 0, 0);
+}
+
+static void stbtt__csctx_rccurve_to(stbtt__csctx *ctx, float dx1, float dy1, float dx2, float dy2, float dx3, float dy3)
+{
+ float cx1 = ctx->x + dx1;
+ float cy1 = ctx->y + dy1;
+ float cx2 = cx1 + dx2;
+ float cy2 = cy1 + dy2;
+ ctx->x = cx2 + dx3;
+ ctx->y = cy2 + dy3;
+ stbtt__csctx_v(ctx, STBTT_vcubic, (int)ctx->x, (int)ctx->y, (int)cx1, (int)cy1, (int)cx2, (int)cy2);
+}
+
+static stbtt__buf stbtt__get_subr(stbtt__buf idx, int n)
+{
+ int count = stbtt__cff_index_count(&idx);
+ int bias = 107;
+ if (count >= 33900)
+ bias = 32768;
+ else if (count >= 1240)
+ bias = 1131;
+ n += bias;
+ if (n < 0 || n >= count)
+ return stbtt__new_buf(NULL, 0);
+ return stbtt__cff_index_get(idx, n);
+}
+
+static stbtt__buf stbtt__cid_get_glyph_subrs(const stbtt_fontinfo *info, int glyph_index)
+{
+ stbtt__buf fdselect = info->fdselect;
+ int nranges, start, end, v, fmt, fdselector = -1, i;
+
+ stbtt__buf_seek(&fdselect, 0);
+ fmt = stbtt__buf_get8(&fdselect);
+ if (fmt == 0) {
+ // untested
+ stbtt__buf_skip(&fdselect, glyph_index);
+ fdselector = stbtt__buf_get8(&fdselect);
+ } else if (fmt == 3) {
+ nranges = stbtt__buf_get16(&fdselect);
+ start = stbtt__buf_get16(&fdselect);
+ for (i = 0; i < nranges; i++) {
+ v = stbtt__buf_get8(&fdselect);
+ end = stbtt__buf_get16(&fdselect);
+ if (glyph_index >= start && glyph_index < end) {
+ fdselector = v;
+ break;
+ }
+ start = end;
+ }
+ }
+ if (fdselector == -1) stbtt__new_buf(NULL, 0);
+ return stbtt__get_subrs(info->cff, stbtt__cff_index_get(info->fontdicts, fdselector));
+}
+
+static int stbtt__run_charstring(const stbtt_fontinfo *info, int glyph_index, stbtt__csctx *c)
+{
+ int in_header = 1, maskbits = 0, subr_stack_height = 0, sp = 0, v, i, b0;
+ int has_subrs = 0, clear_stack;
+ float s[48];
+ stbtt__buf subr_stack[10], subrs = info->subrs, b;
+ float f;
+
+#define STBTT__CSERR(s) (0)
+
+ // this currently ignores the initial width value, which isn't needed if we have hmtx
+ b = stbtt__cff_index_get(info->charstrings, glyph_index);
+ while (b.cursor < b.size) {
+ i = 0;
+ clear_stack = 1;
+ b0 = stbtt__buf_get8(&b);
+ switch (b0) {
+ // @TODO implement hinting
+ case 0x13: // hintmask
+ case 0x14: // cntrmask
+ if (in_header)
+ maskbits += (sp / 2); // implicit "vstem"
+ in_header = 0;
+ stbtt__buf_skip(&b, (maskbits + 7) / 8);
+ break;
+
+ case 0x01: // hstem
+ case 0x03: // vstem
+ case 0x12: // hstemhm
+ case 0x17: // vstemhm
+ maskbits += (sp / 2);
+ break;
+
+ case 0x15: // rmoveto
+ in_header = 0;
+ if (sp < 2) return STBTT__CSERR("rmoveto stack");
+ stbtt__csctx_rmove_to(c, s[sp-2], s[sp-1]);
+ break;
+ case 0x04: // vmoveto
+ in_header = 0;
+ if (sp < 1) return STBTT__CSERR("vmoveto stack");
+ stbtt__csctx_rmove_to(c, 0, s[sp-1]);
+ break;
+ case 0x16: // hmoveto
+ in_header = 0;
+ if (sp < 1) return STBTT__CSERR("hmoveto stack");
+ stbtt__csctx_rmove_to(c, s[sp-1], 0);
+ break;
+
+ case 0x05: // rlineto
+ if (sp < 2) return STBTT__CSERR("rlineto stack");
+ for (; i + 1 < sp; i += 2)
+ stbtt__csctx_rline_to(c, s[i], s[i+1]);
+ break;
+
+ // hlineto/vlineto and vhcurveto/hvcurveto alternate horizontal and vertical
+ // starting from a different place.
+
+ case 0x07: // vlineto
+ if (sp < 1) return STBTT__CSERR("vlineto stack");
+ goto vlineto;
+ case 0x06: // hlineto
+ if (sp < 1) return STBTT__CSERR("hlineto stack");
+ for (;;) {
+ if (i >= sp) break;
+ stbtt__csctx_rline_to(c, s[i], 0);
+ i++;
+ vlineto:
+ if (i >= sp) break;
+ stbtt__csctx_rline_to(c, 0, s[i]);
+ i++;
+ }
+ break;
+
+ case 0x1F: // hvcurveto
+ if (sp < 4) return STBTT__CSERR("hvcurveto stack");
+ goto hvcurveto;
+ case 0x1E: // vhcurveto
+ if (sp < 4) return STBTT__CSERR("vhcurveto stack");
+ for (;;) {
+ if (i + 3 >= sp) break;
+ stbtt__csctx_rccurve_to(c, 0, s[i], s[i+1], s[i+2], s[i+3], (sp - i == 5) ? s[i + 4] : 0.0f);
+ i += 4;
+ hvcurveto:
+ if (i + 3 >= sp) break;
+ stbtt__csctx_rccurve_to(c, s[i], 0, s[i+1], s[i+2], (sp - i == 5) ? s[i+4] : 0.0f, s[i+3]);
+ i += 4;
+ }
+ break;
+
+ case 0x08: // rrcurveto
+ if (sp < 6) return STBTT__CSERR("rcurveline stack");
+ for (; i + 5 < sp; i += 6)
+ stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
+ break;
+
+ case 0x18: // rcurveline
+ if (sp < 8) return STBTT__CSERR("rcurveline stack");
+ for (; i + 5 < sp - 2; i += 6)
+ stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
+ if (i + 1 >= sp) return STBTT__CSERR("rcurveline stack");
+ stbtt__csctx_rline_to(c, s[i], s[i+1]);
+ break;
+
+ case 0x19: // rlinecurve
+ if (sp < 8) return STBTT__CSERR("rlinecurve stack");
+ for (; i + 1 < sp - 6; i += 2)
+ stbtt__csctx_rline_to(c, s[i], s[i+1]);
+ if (i + 5 >= sp) return STBTT__CSERR("rlinecurve stack");
+ stbtt__csctx_rccurve_to(c, s[i], s[i+1], s[i+2], s[i+3], s[i+4], s[i+5]);
+ break;
+
+ case 0x1A: // vvcurveto
+ case 0x1B: // hhcurveto
+ if (sp < 4) return STBTT__CSERR("(vv|hh)curveto stack");
+ f = 0.0;
+ if (sp & 1) { f = s[i]; i++; }
+ for (; i + 3 < sp; i += 4) {
+ if (b0 == 0x1B)
+ stbtt__csctx_rccurve_to(c, s[i], f, s[i+1], s[i+2], s[i+3], 0.0);
+ else
+ stbtt__csctx_rccurve_to(c, f, s[i], s[i+1], s[i+2], 0.0, s[i+3]);
+ f = 0.0;
+ }
+ break;
+
+ case 0x0A: // callsubr
+ if (!has_subrs) {
+ if (info->fdselect.size)
+ subrs = stbtt__cid_get_glyph_subrs(info, glyph_index);
+ has_subrs = 1;
+ }
+ // FALLTHROUGH
+ case 0x1D: // callgsubr
+ if (sp < 1) return STBTT__CSERR("call(g|)subr stack");
+ v = (int) s[--sp];
+ if (subr_stack_height >= 10) return STBTT__CSERR("recursion limit");
+ subr_stack[subr_stack_height++] = b;
+ b = stbtt__get_subr(b0 == 0x0A ? subrs : info->gsubrs, v);
+ if (b.size == 0) return STBTT__CSERR("subr not found");
+ b.cursor = 0;
+ clear_stack = 0;
+ break;
+
+ case 0x0B: // return
+ if (subr_stack_height <= 0) return STBTT__CSERR("return outside subr");
+ b = subr_stack[--subr_stack_height];
+ clear_stack = 0;
+ break;
+
+ case 0x0E: // endchar
+ stbtt__csctx_close_shape(c);
+ return 1;
+
+ case 0x0C: { // two-byte escape
+ float dx1, dx2, dx3, dx4, dx5, dx6, dy1, dy2, dy3, dy4, dy5, dy6;
+ float dx, dy;
+ int b1 = stbtt__buf_get8(&b);
+ switch (b1) {
+ // @TODO These "flex" implementations ignore the flex-depth and resolution,
+ // and always draw beziers.
+ case 0x22: // hflex
+ if (sp < 7) return STBTT__CSERR("hflex stack");
+ dx1 = s[0];
+ dx2 = s[1];
+ dy2 = s[2];
+ dx3 = s[3];
+ dx4 = s[4];
+ dx5 = s[5];
+ dx6 = s[6];
+ stbtt__csctx_rccurve_to(c, dx1, 0, dx2, dy2, dx3, 0);
+ stbtt__csctx_rccurve_to(c, dx4, 0, dx5, -dy2, dx6, 0);
+ break;
+
+ case 0x23: // flex
+ if (sp < 13) return STBTT__CSERR("flex stack");
+ dx1 = s[0];
+ dy1 = s[1];
+ dx2 = s[2];
+ dy2 = s[3];
+ dx3 = s[4];
+ dy3 = s[5];
+ dx4 = s[6];
+ dy4 = s[7];
+ dx5 = s[8];
+ dy5 = s[9];
+ dx6 = s[10];
+ dy6 = s[11];
+ //fd is s[12]
+ stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3);
+ stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6);
+ break;
+
+ case 0x24: // hflex1
+ if (sp < 9) return STBTT__CSERR("hflex1 stack");
+ dx1 = s[0];
+ dy1 = s[1];
+ dx2 = s[2];
+ dy2 = s[3];
+ dx3 = s[4];
+ dx4 = s[5];
+ dx5 = s[6];
+ dy5 = s[7];
+ dx6 = s[8];
+ stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, 0);
+ stbtt__csctx_rccurve_to(c, dx4, 0, dx5, dy5, dx6, -(dy1+dy2+dy5));
+ break;
+
+ case 0x25: // flex1
+ if (sp < 11) return STBTT__CSERR("flex1 stack");
+ dx1 = s[0];
+ dy1 = s[1];
+ dx2 = s[2];
+ dy2 = s[3];
+ dx3 = s[4];
+ dy3 = s[5];
+ dx4 = s[6];
+ dy4 = s[7];
+ dx5 = s[8];
+ dy5 = s[9];
+ dx6 = dy6 = s[10];
+ dx = dx1+dx2+dx3+dx4+dx5;
+ dy = dy1+dy2+dy3+dy4+dy5;
+ if (STBTT_fabs(dx) > STBTT_fabs(dy))
+ dy6 = -dy;
+ else
+ dx6 = -dx;
+ stbtt__csctx_rccurve_to(c, dx1, dy1, dx2, dy2, dx3, dy3);
+ stbtt__csctx_rccurve_to(c, dx4, dy4, dx5, dy5, dx6, dy6);
+ break;
+
+ default:
+ return STBTT__CSERR("unimplemented");
+ }
+ } break;
+
+ default:
+ if (b0 != 255 && b0 != 28 && b0 < 32)
+ return STBTT__CSERR("reserved operator");
+
+ // push immediate
+ if (b0 == 255) {
+ f = (float)(stbtt_int32)stbtt__buf_get32(&b) / 0x10000;
+ } else {
+ stbtt__buf_skip(&b, -1);
+ f = (float)(stbtt_int16)stbtt__cff_int(&b);
+ }
+ if (sp >= 48) return STBTT__CSERR("push stack overflow");
+ s[sp++] = f;
+ clear_stack = 0;
+ break;
+ }
+ if (clear_stack) sp = 0;
+ }
+ return STBTT__CSERR("no endchar");
+
+#undef STBTT__CSERR
+}
+
+static int stbtt__GetGlyphShapeT2(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
+{
+ // runs the charstring twice, once to count and once to output (to avoid realloc)
+ stbtt__csctx count_ctx = STBTT__CSCTX_INIT(1);
+ stbtt__csctx output_ctx = STBTT__CSCTX_INIT(0);
+ if (stbtt__run_charstring(info, glyph_index, &count_ctx)) {
+ *pvertices = (stbtt_vertex*)STBTT_malloc(count_ctx.num_vertices*sizeof(stbtt_vertex), info->userdata);
+ output_ctx.pvertices = *pvertices;
+ if (stbtt__run_charstring(info, glyph_index, &output_ctx)) {
+ STBTT_assert(output_ctx.num_vertices == count_ctx.num_vertices);
+ return output_ctx.num_vertices;
+ }
+ }
+ *pvertices = NULL;
+ return 0;
+}
+
+static int stbtt__GetGlyphInfoT2(const stbtt_fontinfo *info, int glyph_index, int *x0, int *y0, int *x1, int *y1)
+{
+ stbtt__csctx c = STBTT__CSCTX_INIT(1);
+ int r = stbtt__run_charstring(info, glyph_index, &c);
+ if (x0) *x0 = r ? c.min_x : 0;
+ if (y0) *y0 = r ? c.min_y : 0;
+ if (x1) *x1 = r ? c.max_x : 0;
+ if (y1) *y1 = r ? c.max_y : 0;
+ return r ? c.num_vertices : 0;
+}
+
+STBTT_DEF int stbtt_GetGlyphShape(const stbtt_fontinfo *info, int glyph_index, stbtt_vertex **pvertices)
+{
+ if (!info->cff.size)
+ return stbtt__GetGlyphShapeTT(info, glyph_index, pvertices);
+ else
+ return stbtt__GetGlyphShapeT2(info, glyph_index, pvertices);
+}
+
+STBTT_DEF void stbtt_GetGlyphHMetrics(const stbtt_fontinfo *info, int glyph_index, int *advanceWidth, int *leftSideBearing)
+{
+ stbtt_uint16 numOfLongHorMetrics = ttUSHORT(info->data+info->hhea + 34);
+ if (glyph_index < numOfLongHorMetrics) {
+ if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*glyph_index);
+ if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*glyph_index + 2);
+ } else {
+ if (advanceWidth) *advanceWidth = ttSHORT(info->data + info->hmtx + 4*(numOfLongHorMetrics-1));
+ if (leftSideBearing) *leftSideBearing = ttSHORT(info->data + info->hmtx + 4*numOfLongHorMetrics + 2*(glyph_index - numOfLongHorMetrics));
+ }
+}
+
+STBTT_DEF int stbtt_GetKerningTableLength(const stbtt_fontinfo *info)
+{
+ stbtt_uint8 *data = info->data + info->kern;
+
+ // we only look at the first table. it must be 'horizontal' and format 0.
+ if (!info->kern)
+ return 0;
+ if (ttUSHORT(data+2) < 1) // number of tables, need at least 1
+ return 0;
+ if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format
+ return 0;
+
+ return ttUSHORT(data+10);
+}
+
+STBTT_DEF int stbtt_GetKerningTable(const stbtt_fontinfo *info, stbtt_kerningentry* table, int table_length)
+{
+ stbtt_uint8 *data = info->data + info->kern;
+ int k, length;
+
+ // we only look at the first table. it must be 'horizontal' and format 0.
+ if (!info->kern)
+ return 0;
+ if (ttUSHORT(data+2) < 1) // number of tables, need at least 1
+ return 0;
+ if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format
+ return 0;
+
+ length = ttUSHORT(data+10);
+ if (table_length < length)
+ length = table_length;
+
+ for (k = 0; k < length; k++)
+ {
+ table[k].glyph1 = ttUSHORT(data+18+(k*6));
+ table[k].glyph2 = ttUSHORT(data+20+(k*6));
+ table[k].advance = ttSHORT(data+22+(k*6));
+ }
+
+ return length;
+}
+
+static int stbtt__GetGlyphKernInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2)
+{
+ stbtt_uint8 *data = info->data + info->kern;
+ stbtt_uint32 needle, straw;
+ int l, r, m;
+
+ // we only look at the first table. it must be 'horizontal' and format 0.
+ if (!info->kern)
+ return 0;
+ if (ttUSHORT(data+2) < 1) // number of tables, need at least 1
+ return 0;
+ if (ttUSHORT(data+8) != 1) // horizontal flag must be set in format
+ return 0;
+
+ l = 0;
+ r = ttUSHORT(data+10) - 1;
+ needle = glyph1 << 16 | glyph2;
+ while (l <= r) {
+ m = (l + r) >> 1;
+ straw = ttULONG(data+18+(m*6)); // note: unaligned read
+ if (needle < straw)
+ r = m - 1;
+ else if (needle > straw)
+ l = m + 1;
+ else
+ return ttSHORT(data+22+(m*6));
+ }
+ return 0;
+}
+
+static stbtt_int32 stbtt__GetCoverageIndex(stbtt_uint8 *coverageTable, int glyph)
+{
+ stbtt_uint16 coverageFormat = ttUSHORT(coverageTable);
+ switch (coverageFormat) {
+ case 1: {
+ stbtt_uint16 glyphCount = ttUSHORT(coverageTable + 2);
+
+ // Binary search.
+ stbtt_int32 l=0, r=glyphCount-1, m;
+ int straw, needle=glyph;
+ while (l <= r) {
+ stbtt_uint8 *glyphArray = coverageTable + 4;
+ stbtt_uint16 glyphID;
+ m = (l + r) >> 1;
+ glyphID = ttUSHORT(glyphArray + 2 * m);
+ straw = glyphID;
+ if (needle < straw)
+ r = m - 1;
+ else if (needle > straw)
+ l = m + 1;
+ else {
+ return m;
+ }
+ }
+ break;
+ }
+
+ case 2: {
+ stbtt_uint16 rangeCount = ttUSHORT(coverageTable + 2);
+ stbtt_uint8 *rangeArray = coverageTable + 4;
+
+ // Binary search.
+ stbtt_int32 l=0, r=rangeCount-1, m;
+ int strawStart, strawEnd, needle=glyph;
+ while (l <= r) {
+ stbtt_uint8 *rangeRecord;
+ m = (l + r) >> 1;
+ rangeRecord = rangeArray + 6 * m;
+ strawStart = ttUSHORT(rangeRecord);
+ strawEnd = ttUSHORT(rangeRecord + 2);
+ if (needle < strawStart)
+ r = m - 1;
+ else if (needle > strawEnd)
+ l = m + 1;
+ else {
+ stbtt_uint16 startCoverageIndex = ttUSHORT(rangeRecord + 4);
+ return startCoverageIndex + glyph - strawStart;
+ }
+ }
+ break;
+ }
+
+ default: return -1; // unsupported
+ }
+
+ return -1;
+}
+
+static stbtt_int32 stbtt__GetGlyphClass(stbtt_uint8 *classDefTable, int glyph)
+{
+ stbtt_uint16 classDefFormat = ttUSHORT(classDefTable);
+ switch (classDefFormat)
+ {
+ case 1: {
+ stbtt_uint16 startGlyphID = ttUSHORT(classDefTable + 2);
+ stbtt_uint16 glyphCount = ttUSHORT(classDefTable + 4);
+ stbtt_uint8 *classDef1ValueArray = classDefTable + 6;
+
+ if (glyph >= startGlyphID && glyph < startGlyphID + glyphCount)
+ return (stbtt_int32)ttUSHORT(classDef1ValueArray + 2 * (glyph - startGlyphID));
+ break;
+ }
+
+ case 2: {
+ stbtt_uint16 classRangeCount = ttUSHORT(classDefTable + 2);
+ stbtt_uint8 *classRangeRecords = classDefTable + 4;
+
+ // Binary search.
+ stbtt_int32 l=0, r=classRangeCount-1, m;
+ int strawStart, strawEnd, needle=glyph;
+ while (l <= r) {
+ stbtt_uint8 *classRangeRecord;
+ m = (l + r) >> 1;
+ classRangeRecord = classRangeRecords + 6 * m;
+ strawStart = ttUSHORT(classRangeRecord);
+ strawEnd = ttUSHORT(classRangeRecord + 2);
+ if (needle < strawStart)
+ r = m - 1;
+ else if (needle > strawEnd)
+ l = m + 1;
+ else
+ return (stbtt_int32)ttUSHORT(classRangeRecord + 4);
+ }
+ break;
+ }
+
+ default:
+ return -1; // Unsupported definition type, return an error.
+ }
+
+ // "All glyphs not assigned to a class fall into class 0". (OpenType spec)
+ return 0;
+}
+
+// Define to STBTT_assert(x) if you want to break on unimplemented formats.
+#define STBTT_GPOS_TODO_assert(x)
+
+static stbtt_int32 stbtt__GetGlyphGPOSInfoAdvance(const stbtt_fontinfo *info, int glyph1, int glyph2)
+{
+ stbtt_uint16 lookupListOffset;
+ stbtt_uint8 *lookupList;
+ stbtt_uint16 lookupCount;
+ stbtt_uint8 *data;
+ stbtt_int32 i, sti;
+
+ if (!info->gpos) return 0;
+
+ data = info->data + info->gpos;
+
+ if (ttUSHORT(data+0) != 1) return 0; // Major version 1
+ if (ttUSHORT(data+2) != 0) return 0; // Minor version 0
+
+ lookupListOffset = ttUSHORT(data+8);
+ lookupList = data + lookupListOffset;
+ lookupCount = ttUSHORT(lookupList);
+
+ for (i=0; i<lookupCount; ++i) {
+ stbtt_uint16 lookupOffset = ttUSHORT(lookupList + 2 + 2 * i);
+ stbtt_uint8 *lookupTable = lookupList + lookupOffset;
+
+ stbtt_uint16 lookupType = ttUSHORT(lookupTable);
+ stbtt_uint16 subTableCount = ttUSHORT(lookupTable + 4);
+ stbtt_uint8 *subTableOffsets = lookupTable + 6;
+ if (lookupType != 2) // Pair Adjustment Positioning Subtable
+ continue;
+
+ for (sti=0; sti<subTableCount; sti++) {
+ stbtt_uint16 subtableOffset = ttUSHORT(subTableOffsets + 2 * sti);
+ stbtt_uint8 *table = lookupTable + subtableOffset;
+ stbtt_uint16 posFormat = ttUSHORT(table);
+ stbtt_uint16 coverageOffset = ttUSHORT(table + 2);
+ stbtt_int32 coverageIndex = stbtt__GetCoverageIndex(table + coverageOffset, glyph1);
+ if (coverageIndex == -1) continue;
+
+ switch (posFormat) {
+ case 1: {
+ stbtt_int32 l, r, m;
+ int straw, needle;
+ stbtt_uint16 valueFormat1 = ttUSHORT(table + 4);
+ stbtt_uint16 valueFormat2 = ttUSHORT(table + 6);
+ if (valueFormat1 == 4 && valueFormat2 == 0) { // Support more formats?
+ stbtt_int32 valueRecordPairSizeInBytes = 2;
+ stbtt_uint16 pairSetCount = ttUSHORT(table + 8);
+ stbtt_uint16 pairPosOffset = ttUSHORT(table + 10 + 2 * coverageIndex);
+ stbtt_uint8 *pairValueTable = table + pairPosOffset;
+ stbtt_uint16 pairValueCount = ttUSHORT(pairValueTable);
+ stbtt_uint8 *pairValueArray = pairValueTable + 2;
+
+ if (coverageIndex >= pairSetCount) return 0;
+
+ needle=glyph2;
+ r=pairValueCount-1;
+ l=0;
+
+ // Binary search.
+ while (l <= r) {
+ stbtt_uint16 secondGlyph;
+ stbtt_uint8 *pairValue;
+ m = (l + r) >> 1;
+ pairValue = pairValueArray + (2 + valueRecordPairSizeInBytes) * m;
+ secondGlyph = ttUSHORT(pairValue);
+ straw = secondGlyph;
+ if (needle < straw)
+ r = m - 1;
+ else if (needle > straw)
+ l = m + 1;
+ else {
+ stbtt_int16 xAdvance = ttSHORT(pairValue + 2);
+ return xAdvance;
+ }
+ }
+ } else
+ return 0;
+ break;
+ }
+
+ case 2: {
+ stbtt_uint16 valueFormat1 = ttUSHORT(table + 4);
+ stbtt_uint16 valueFormat2 = ttUSHORT(table + 6);
+ if (valueFormat1 == 4 && valueFormat2 == 0) { // Support more formats?
+ stbtt_uint16 classDef1Offset = ttUSHORT(table + 8);
+ stbtt_uint16 classDef2Offset = ttUSHORT(table + 10);
+ int glyph1class = stbtt__GetGlyphClass(table + classDef1Offset, glyph1);
+ int glyph2class = stbtt__GetGlyphClass(table + classDef2Offset, glyph2);
+
+ stbtt_uint16 class1Count = ttUSHORT(table + 12);
+ stbtt_uint16 class2Count = ttUSHORT(table + 14);
+ stbtt_uint8 *class1Records, *class2Records;
+ stbtt_int16 xAdvance;
+
+ if (glyph1class < 0 || glyph1class >= class1Count) return 0; // malformed
+ if (glyph2class < 0 || glyph2class >= class2Count) return 0; // malformed
+
+ class1Records = table + 16;
+ class2Records = class1Records + 2 * (glyph1class * class2Count);
+ xAdvance = ttSHORT(class2Records + 2 * glyph2class);
+ return xAdvance;
+ } else
+ return 0;
+ break;
+ }
+
+ default:
+ return 0; // Unsupported position format
+ }
+ }
+ }
+
+ return 0;
+}
+
+STBTT_DEF int stbtt_GetGlyphKernAdvance(const stbtt_fontinfo *info, int g1, int g2)
+{
+ int xAdvance = 0;
+
+ if (info->gpos)
+ xAdvance += stbtt__GetGlyphGPOSInfoAdvance(info, g1, g2);
+ else if (info->kern)
+ xAdvance += stbtt__GetGlyphKernInfoAdvance(info, g1, g2);
+
+ return xAdvance;
+}
+
+STBTT_DEF int stbtt_GetCodepointKernAdvance(const stbtt_fontinfo *info, int ch1, int ch2)
+{
+ if (!info->kern && !info->gpos) // if no kerning table, don't waste time looking up both codepoint->glyphs
+ return 0;
+ return stbtt_GetGlyphKernAdvance(info, stbtt_FindGlyphIndex(info,ch1), stbtt_FindGlyphIndex(info,ch2));
+}
+
+STBTT_DEF void stbtt_GetCodepointHMetrics(const stbtt_fontinfo *info, int codepoint, int *advanceWidth, int *leftSideBearing)
+{
+ stbtt_GetGlyphHMetrics(info, stbtt_FindGlyphIndex(info,codepoint), advanceWidth, leftSideBearing);
+}
+
+STBTT_DEF void stbtt_GetFontVMetrics(const stbtt_fontinfo *info, int *ascent, int *descent, int *lineGap)
+{
+ if (ascent ) *ascent = ttSHORT(info->data+info->hhea + 4);
+ if (descent) *descent = ttSHORT(info->data+info->hhea + 6);
+ if (lineGap) *lineGap = ttSHORT(info->data+info->hhea + 8);
+}
+
+STBTT_DEF int stbtt_GetFontVMetricsOS2(const stbtt_fontinfo *info, int *typoAscent, int *typoDescent, int *typoLineGap)
+{
+ int tab = stbtt__find_table(info->data, info->fontstart, "OS/2");
+ if (!tab)
+ return 0;
+ if (typoAscent ) *typoAscent = ttSHORT(info->data+tab + 68);
+ if (typoDescent) *typoDescent = ttSHORT(info->data+tab + 70);
+ if (typoLineGap) *typoLineGap = ttSHORT(info->data+tab + 72);
+ return 1;
+}
+
+STBTT_DEF void stbtt_GetFontBoundingBox(const stbtt_fontinfo *info, int *x0, int *y0, int *x1, int *y1)
+{
+ *x0 = ttSHORT(info->data + info->head + 36);
+ *y0 = ttSHORT(info->data + info->head + 38);
+ *x1 = ttSHORT(info->data + info->head + 40);
+ *y1 = ttSHORT(info->data + info->head + 42);
+}
+
+STBTT_DEF float stbtt_ScaleForPixelHeight(const stbtt_fontinfo *info, float height)
+{
+ int fheight = ttSHORT(info->data + info->hhea + 4) - ttSHORT(info->data + info->hhea + 6);
+ return (float) height / fheight;
+}
+
+STBTT_DEF float stbtt_ScaleForMappingEmToPixels(const stbtt_fontinfo *info, float pixels)
+{
+ int unitsPerEm = ttUSHORT(info->data + info->head + 18);
+ return pixels / unitsPerEm;
+}
+
+STBTT_DEF void stbtt_FreeShape(const stbtt_fontinfo *info, stbtt_vertex *v)
+{
+ STBTT_free(v, info->userdata);
+}
+
+STBTT_DEF stbtt_uint8 *stbtt_FindSVGDoc(const stbtt_fontinfo *info, int gl)
+{
+ int i;
+ stbtt_uint8 *data = info->data;
+ stbtt_uint8 *svg_doc_list = data + stbtt__get_svg((stbtt_fontinfo *) info);
+
+ int numEntries = ttUSHORT(svg_doc_list);
+ stbtt_uint8 *svg_docs = svg_doc_list + 2;
+
+ for(i=0; i<numEntries; i++) {
+ stbtt_uint8 *svg_doc = svg_docs + (12 * i);
+ if ((gl >= ttUSHORT(svg_doc)) && (gl <= ttUSHORT(svg_doc + 2)))
+ return svg_doc;
+ }
+ return 0;
+}
+
+STBTT_DEF int stbtt_GetGlyphSVG(const stbtt_fontinfo *info, int gl, const char **svg)
+{
+ stbtt_uint8 *data = info->data;
+ stbtt_uint8 *svg_doc;
+
+ if (info->svg == 0)
+ return 0;
+
+ svg_doc = stbtt_FindSVGDoc(info, gl);
+ if (svg_doc != NULL) {
+ *svg = (char *) data + info->svg + ttULONG(svg_doc + 4);
+ return ttULONG(svg_doc + 8);
+ } else {
+ return 0;
+ }
+}
+
+STBTT_DEF int stbtt_GetCodepointSVG(const stbtt_fontinfo *info, int unicode_codepoint, const char **svg)
+{
+ return stbtt_GetGlyphSVG(info, stbtt_FindGlyphIndex(info, unicode_codepoint), svg);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// antialiasing software rasterizer
+//
+
+STBTT_DEF void stbtt_GetGlyphBitmapBoxSubpixel(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y,float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1)
+{
+ int x0=0,y0=0,x1,y1; // =0 suppresses compiler warning
+ if (!stbtt_GetGlyphBox(font, glyph, &x0,&y0,&x1,&y1)) {
+ // e.g. space character
+ if (ix0) *ix0 = 0;
+ if (iy0) *iy0 = 0;
+ if (ix1) *ix1 = 0;
+ if (iy1) *iy1 = 0;
+ } else {
+ // move to integral bboxes (treating pixels as little squares, what pixels get touched)?
+ if (ix0) *ix0 = STBTT_ifloor( x0 * scale_x + shift_x);
+ if (iy0) *iy0 = STBTT_ifloor(-y1 * scale_y + shift_y);
+ if (ix1) *ix1 = STBTT_iceil ( x1 * scale_x + shift_x);
+ if (iy1) *iy1 = STBTT_iceil (-y0 * scale_y + shift_y);
+ }
+}
+
+STBTT_DEF void stbtt_GetGlyphBitmapBox(const stbtt_fontinfo *font, int glyph, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1)
+{
+ stbtt_GetGlyphBitmapBoxSubpixel(font, glyph, scale_x, scale_y,0.0f,0.0f, ix0, iy0, ix1, iy1);
+}
+
+STBTT_DEF void stbtt_GetCodepointBitmapBoxSubpixel(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, float shift_x, float shift_y, int *ix0, int *iy0, int *ix1, int *iy1)
+{
+ stbtt_GetGlyphBitmapBoxSubpixel(font, stbtt_FindGlyphIndex(font,codepoint), scale_x, scale_y,shift_x,shift_y, ix0,iy0,ix1,iy1);
+}
+
+STBTT_DEF void stbtt_GetCodepointBitmapBox(const stbtt_fontinfo *font, int codepoint, float scale_x, float scale_y, int *ix0, int *iy0, int *ix1, int *iy1)
+{
+ stbtt_GetCodepointBitmapBoxSubpixel(font, codepoint, scale_x, scale_y,0.0f,0.0f, ix0,iy0,ix1,iy1);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// Rasterizer
+
+typedef struct stbtt__hheap_chunk
+{
+ struct stbtt__hheap_chunk *next;
+} stbtt__hheap_chunk;
+
+typedef struct stbtt__hheap
+{
+ struct stbtt__hheap_chunk *head;
+ void *first_free;
+ int num_remaining_in_head_chunk;
+} stbtt__hheap;
+
+static void *stbtt__hheap_alloc(stbtt__hheap *hh, size_t size, void *userdata)
+{
+ if (hh->first_free) {
+ void *p = hh->first_free;
+ hh->first_free = * (void **) p;
+ return p;
+ } else {
+ if (hh->num_remaining_in_head_chunk == 0) {
+ int count = (size < 32 ? 2000 : size < 128 ? 800 : 100);
+ stbtt__hheap_chunk *c = (stbtt__hheap_chunk *) STBTT_malloc(sizeof(stbtt__hheap_chunk) + size * count, userdata);
+ if (c == NULL)
+ return NULL;
+ c->next = hh->head;
+ hh->head = c;
+ hh->num_remaining_in_head_chunk = count;
+ }
+ --hh->num_remaining_in_head_chunk;
+ return (char *) (hh->head) + sizeof(stbtt__hheap_chunk) + size * hh->num_remaining_in_head_chunk;
+ }
+}
+
+static void stbtt__hheap_free(stbtt__hheap *hh, void *p)
+{
+ *(void **) p = hh->first_free;
+ hh->first_free = p;
+}
+
+static void stbtt__hheap_cleanup(stbtt__hheap *hh, void *userdata)
+{
+ stbtt__hheap_chunk *c = hh->head;
+ while (c) {
+ stbtt__hheap_chunk *n = c->next;
+ STBTT_free(c, userdata);
+ c = n;
+ }
+}
+
+typedef struct stbtt__edge {
+ float x0,y0, x1,y1;
+ int invert;
+} stbtt__edge;
+
+
+typedef struct stbtt__active_edge
+{
+ struct stbtt__active_edge *next;
+ #if STBTT_RASTERIZER_VERSION==1
+ int x,dx;
+ float ey;
+ int direction;
+ #elif STBTT_RASTERIZER_VERSION==2
+ float fx,fdx,fdy;
+ float direction;
+ float sy;
+ float ey;
+ #else
+ #error "Unrecognized value of STBTT_RASTERIZER_VERSION"
+ #endif
+} stbtt__active_edge;
+
+#if STBTT_RASTERIZER_VERSION == 1
+#define STBTT_FIXSHIFT 10
+#define STBTT_FIX (1 << STBTT_FIXSHIFT)
+#define STBTT_FIXMASK (STBTT_FIX-1)
+
+static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata)
+{
+ stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata);
+ float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
+ STBTT_assert(z != NULL);
+ if (!z) return z;
+
+ // round dx down to avoid overshooting
+ if (dxdy < 0)
+ z->dx = -STBTT_ifloor(STBTT_FIX * -dxdy);
+ else
+ z->dx = STBTT_ifloor(STBTT_FIX * dxdy);
+
+ z->x = STBTT_ifloor(STBTT_FIX * e->x0 + z->dx * (start_point - e->y0)); // use z->dx so when we offset later it's by the same amount
+ z->x -= off_x * STBTT_FIX;
+
+ z->ey = e->y1;
+ z->next = 0;
+ z->direction = e->invert ? 1 : -1;
+ return z;
+}
+#elif STBTT_RASTERIZER_VERSION == 2
+static stbtt__active_edge *stbtt__new_active(stbtt__hheap *hh, stbtt__edge *e, int off_x, float start_point, void *userdata)
+{
+ stbtt__active_edge *z = (stbtt__active_edge *) stbtt__hheap_alloc(hh, sizeof(*z), userdata);
+ float dxdy = (e->x1 - e->x0) / (e->y1 - e->y0);
+ STBTT_assert(z != NULL);
+ //STBTT_assert(e->y0 <= start_point);
+ if (!z) return z;
+ z->fdx = dxdy;
+ z->fdy = dxdy != 0.0f ? (1.0f/dxdy) : 0.0f;
+ z->fx = e->x0 + dxdy * (start_point - e->y0);
+ z->fx -= off_x;
+ z->direction = e->invert ? 1.0f : -1.0f;
+ z->sy = e->y0;
+ z->ey = e->y1;
+ z->next = 0;
+ return z;
+}
+#else
+#error "Unrecognized value of STBTT_RASTERIZER_VERSION"
+#endif
+
+#if STBTT_RASTERIZER_VERSION == 1
+// note: this routine clips fills that extend off the edges... ideally this
+// wouldn't happen, but it could happen if the truetype glyph bounding boxes
+// are wrong, or if the user supplies a too-small bitmap
+static void stbtt__fill_active_edges(unsigned char *scanline, int len, stbtt__active_edge *e, int max_weight)
+{
+ // non-zero winding fill
+ int x0=0, w=0;
+
+ while (e) {
+ if (w == 0) {
+ // if we're currently at zero, we need to record the edge start point
+ x0 = e->x; w += e->direction;
+ } else {
+ int x1 = e->x; w += e->direction;
+ // if we went to zero, we need to draw
+ if (w == 0) {
+ int i = x0 >> STBTT_FIXSHIFT;
+ int j = x1 >> STBTT_FIXSHIFT;
+
+ if (i < len && j >= 0) {
+ if (i == j) {
+ // x0,x1 are the same pixel, so compute combined coverage
+ scanline[i] = scanline[i] + (stbtt_uint8) ((x1 - x0) * max_weight >> STBTT_FIXSHIFT);
+ } else {
+ if (i >= 0) // add antialiasing for x0
+ scanline[i] = scanline[i] + (stbtt_uint8) (((STBTT_FIX - (x0 & STBTT_FIXMASK)) * max_weight) >> STBTT_FIXSHIFT);
+ else
+ i = -1; // clip
+
+ if (j < len) // add antialiasing for x1
+ scanline[j] = scanline[j] + (stbtt_uint8) (((x1 & STBTT_FIXMASK) * max_weight) >> STBTT_FIXSHIFT);
+ else
+ j = len; // clip
+
+ for (++i; i < j; ++i) // fill pixels between x0 and x1
+ scanline[i] = scanline[i] + (stbtt_uint8) max_weight;
+ }
+ }
+ }
+ }
+
+ e = e->next;
+ }
+}
+
+static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata)
+{
+ stbtt__hheap hh = { 0, 0, 0 };
+ stbtt__active_edge *active = NULL;
+ int y,j=0;
+ int max_weight = (255 / vsubsample); // weight per vertical scanline
+ int s; // vertical subsample index
+ unsigned char scanline_data[512], *scanline;
+
+ if (result->w > 512)
+ scanline = (unsigned char *) STBTT_malloc(result->w, userdata);
+ else
+ scanline = scanline_data;
+
+ y = off_y * vsubsample;
+ e[n].y0 = (off_y + result->h) * (float) vsubsample + 1;
+
+ while (j < result->h) {
+ STBTT_memset(scanline, 0, result->w);
+ for (s=0; s < vsubsample; ++s) {
+ // find center of pixel for this scanline
+ float scan_y = y + 0.5f;
+ stbtt__active_edge **step = &active;
+
+ // update all active edges;
+ // remove all active edges that terminate before the center of this scanline
+ while (*step) {
+ stbtt__active_edge * z = *step;
+ if (z->ey <= scan_y) {
+ *step = z->next; // delete from list
+ STBTT_assert(z->direction);
+ z->direction = 0;
+ stbtt__hheap_free(&hh, z);
+ } else {
+ z->x += z->dx; // advance to position for current scanline
+ step = &((*step)->next); // advance through list
+ }
+ }
+
+ // resort the list if needed
+ for(;;) {
+ int changed=0;
+ step = &active;
+ while (*step && (*step)->next) {
+ if ((*step)->x > (*step)->next->x) {
+ stbtt__active_edge *t = *step;
+ stbtt__active_edge *q = t->next;
+
+ t->next = q->next;
+ q->next = t;
+ *step = q;
+ changed = 1;
+ }
+ step = &(*step)->next;
+ }
+ if (!changed) break;
+ }
+
+ // insert all edges that start before the center of this scanline -- omit ones that also end on this scanline
+ while (e->y0 <= scan_y) {
+ if (e->y1 > scan_y) {
+ stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y, userdata);
+ if (z != NULL) {
+ // find insertion point
+ if (active == NULL)
+ active = z;
+ else if (z->x < active->x) {
+ // insert at front
+ z->next = active;
+ active = z;
+ } else {
+ // find thing to insert AFTER
+ stbtt__active_edge *p = active;
+ while (p->next && p->next->x < z->x)
+ p = p->next;
+ // at this point, p->next->x is NOT < z->x
+ z->next = p->next;
+ p->next = z;
+ }
+ }
+ }
+ ++e;
+ }
+
+ // now process all active edges in XOR fashion
+ if (active)
+ stbtt__fill_active_edges(scanline, result->w, active, max_weight);
+
+ ++y;
+ }
+ STBTT_memcpy(result->pixels + j * result->stride, scanline, result->w);
+ ++j;
+ }
+
+ stbtt__hheap_cleanup(&hh, userdata);
+
+ if (scanline != scanline_data)
+ STBTT_free(scanline, userdata);
+}
+
+#elif STBTT_RASTERIZER_VERSION == 2
+
+// the edge passed in here does not cross the vertical line at x or the vertical line at x+1
+// (i.e. it has already been clipped to those)
+static void stbtt__handle_clipped_edge(float *scanline, int x, stbtt__active_edge *e, float x0, float y0, float x1, float y1)
+{
+ if (y0 == y1) return;
+ STBTT_assert(y0 < y1);
+ STBTT_assert(e->sy <= e->ey);
+ if (y0 > e->ey) return;
+ if (y1 < e->sy) return;
+ if (y0 < e->sy) {
+ x0 += (x1-x0) * (e->sy - y0) / (y1-y0);
+ y0 = e->sy;
+ }
+ if (y1 > e->ey) {
+ x1 += (x1-x0) * (e->ey - y1) / (y1-y0);
+ y1 = e->ey;
+ }
+
+ if (x0 == x)
+ STBTT_assert(x1 <= x+1);
+ else if (x0 == x+1)
+ STBTT_assert(x1 >= x);
+ else if (x0 <= x)
+ STBTT_assert(x1 <= x);
+ else if (x0 >= x+1)
+ STBTT_assert(x1 >= x+1);
+ else
+ STBTT_assert(x1 >= x && x1 <= x+1);
+
+ if (x0 <= x && x1 <= x)
+ scanline[x] += e->direction * (y1-y0);
+ else if (x0 >= x+1 && x1 >= x+1)
+ ;
+ else {
+ STBTT_assert(x0 >= x && x0 <= x+1 && x1 >= x && x1 <= x+1);
+ scanline[x] += e->direction * (y1-y0) * (1-((x0-x)+(x1-x))/2); // coverage = 1 - average x position
+ }
+}
+
+static float stbtt__sized_trapezoid_area(float height, float top_width, float bottom_width)
+{
+ STBTT_assert(top_width >= 0);
+ STBTT_assert(bottom_width >= 0);
+ return (top_width + bottom_width) / 2.0f * height;
+}
+
+static float stbtt__position_trapezoid_area(float height, float tx0, float tx1, float bx0, float bx1)
+{
+ return stbtt__sized_trapezoid_area(height, tx1 - tx0, bx1 - bx0);
+}
+
+static float stbtt__sized_triangle_area(float height, float width)
+{
+ return height * width / 2;
+}
+
+static void stbtt__fill_active_edges_new(float *scanline, float *scanline_fill, int len, stbtt__active_edge *e, float y_top)
+{
+ float y_bottom = y_top+1;
+
+ while (e) {
+ // brute force every pixel
+
+ // compute intersection points with top & bottom
+ STBTT_assert(e->ey >= y_top);
+
+ if (e->fdx == 0) {
+ float x0 = e->fx;
+ if (x0 < len) {
+ if (x0 >= 0) {
+ stbtt__handle_clipped_edge(scanline,(int) x0,e, x0,y_top, x0,y_bottom);
+ stbtt__handle_clipped_edge(scanline_fill-1,(int) x0+1,e, x0,y_top, x0,y_bottom);
+ } else {
+ stbtt__handle_clipped_edge(scanline_fill-1,0,e, x0,y_top, x0,y_bottom);
+ }
+ }
+ } else {
+ float x0 = e->fx;
+ float dx = e->fdx;
+ float xb = x0 + dx;
+ float x_top, x_bottom;
+ float sy0,sy1;
+ float dy = e->fdy;
+ STBTT_assert(e->sy <= y_bottom && e->ey >= y_top);
+
+ // compute endpoints of line segment clipped to this scanline (if the
+ // line segment starts on this scanline. x0 is the intersection of the
+ // line with y_top, but that may be off the line segment.
+ if (e->sy > y_top) {
+ x_top = x0 + dx * (e->sy - y_top);
+ sy0 = e->sy;
+ } else {
+ x_top = x0;
+ sy0 = y_top;
+ }
+ if (e->ey < y_bottom) {
+ x_bottom = x0 + dx * (e->ey - y_top);
+ sy1 = e->ey;
+ } else {
+ x_bottom = xb;
+ sy1 = y_bottom;
+ }
+
+ if (x_top >= 0 && x_bottom >= 0 && x_top < len && x_bottom < len) {
+ // from here on, we don't have to range check x values
+
+ if ((int) x_top == (int) x_bottom) {
+ float height;
+ // simple case, only spans one pixel
+ int x = (int) x_top;
+ height = (sy1 - sy0) * e->direction;
+ STBTT_assert(x >= 0 && x < len);
+ scanline[x] += stbtt__position_trapezoid_area(height, x_top, x+1.0f, x_bottom, x+1.0f);
+ scanline_fill[x] += height; // everything right of this pixel is filled
+ } else {
+ int x,x1,x2;
+ float y_crossing, y_final, step, sign, area;
+ // covers 2+ pixels
+ if (x_top > x_bottom) {
+ // flip scanline vertically; signed area is the same
+ float t;
+ sy0 = y_bottom - (sy0 - y_top);
+ sy1 = y_bottom - (sy1 - y_top);
+ t = sy0, sy0 = sy1, sy1 = t;
+ t = x_bottom, x_bottom = x_top, x_top = t;
+ dx = -dx;
+ dy = -dy;
+ t = x0, x0 = xb, xb = t;
+ }
+ STBTT_assert(dy >= 0);
+ STBTT_assert(dx >= 0);
+
+ x1 = (int) x_top;
+ x2 = (int) x_bottom;
+ // compute intersection with y axis at x1+1
+ y_crossing = y_top + dy * (x1+1 - x0);
+
+ // compute intersection with y axis at x2
+ y_final = y_top + dy * (x2 - x0);
+
+ // x1 x_top x2 x_bottom
+ // y_top +------|-----+------------+------------+--------|---+------------+
+ // | | | | | |
+ // | | | | | |
+ // sy0 | Txxxxx|............|............|............|............|
+ // y_crossing | *xxxxx.......|............|............|............|
+ // | | xxxxx..|............|............|............|
+ // | | /- xx*xxxx........|............|............|
+ // | | dy < | xxxxxx..|............|............|
+ // y_final | | \- | xx*xxx.........|............|
+ // sy1 | | | | xxxxxB...|............|
+ // | | | | | |
+ // | | | | | |
+ // y_bottom +------------+------------+------------+------------+------------+
+ //
+ // goal is to measure the area covered by '.' in each pixel
+
+ // if x2 is right at the right edge of x1, y_crossing can blow up, github #1057
+ // @TODO: maybe test against sy1 rather than y_bottom?
+ if (y_crossing > y_bottom)
+ y_crossing = y_bottom;
+
+ sign = e->direction;
+
+ // area of the rectangle covered from sy0..y_crossing
+ area = sign * (y_crossing-sy0);
+
+ // area of the triangle (x_top,sy0), (x1+1,sy0), (x1+1,y_crossing)
+ scanline[x1] += stbtt__sized_triangle_area(area, x1+1 - x_top);
+
+ // check if final y_crossing is blown up; no test case for this
+ if (y_final > y_bottom) {
+ int denom = (x2 - (x1+1));
+ y_final = y_bottom;
+ if (denom != 0) { // [DEAR IMGUI] Avoid div by zero (https://github.com/nothings/stb/issues/1316)
+ dy = (y_final - y_crossing ) / denom; // if denom=0, y_final = y_crossing, so y_final <= y_bottom
+ }
+ }
+
+ // in second pixel, area covered by line segment found in first pixel
+ // is always a rectangle 1 wide * the height of that line segment; this
+ // is exactly what the variable 'area' stores. it also gets a contribution
+ // from the line segment within it. the THIRD pixel will get the first
+ // pixel's rectangle contribution, the second pixel's rectangle contribution,
+ // and its own contribution. the 'own contribution' is the same in every pixel except
+ // the leftmost and rightmost, a trapezoid that slides down in each pixel.
+ // the second pixel's contribution to the third pixel will be the
+ // rectangle 1 wide times the height change in the second pixel, which is dy.
+
+ step = sign * dy * 1; // dy is dy/dx, change in y for every 1 change in x,
+ // which multiplied by 1-pixel-width is how much pixel area changes for each step in x
+ // so the area advances by 'step' every time
+
+ for (x = x1+1; x < x2; ++x) {
+ scanline[x] += area + step/2; // area of trapezoid is 1*step/2
+ area += step;
+ }
+ STBTT_assert(STBTT_fabs(area) <= 1.01f); // accumulated error from area += step unless we round step down
+ STBTT_assert(sy1 > y_final-0.01f);
+
+ // area covered in the last pixel is the rectangle from all the pixels to the left,
+ // plus the trapezoid filled by the line segment in this pixel all the way to the right edge
+ scanline[x2] += area + sign * stbtt__position_trapezoid_area(sy1-y_final, (float) x2, x2+1.0f, x_bottom, x2+1.0f);
+
+ // the rest of the line is filled based on the total height of the line segment in this pixel
+ scanline_fill[x2] += sign * (sy1-sy0);
+ }
+ } else {
+ // if edge goes outside of box we're drawing, we require
+ // clipping logic. since this does not match the intended use
+ // of this library, we use a different, very slow brute
+ // force implementation
+ // note though that this does happen some of the time because
+ // x_top and x_bottom can be extrapolated at the top & bottom of
+ // the shape and actually lie outside the bounding box
+ int x;
+ for (x=0; x < len; ++x) {
+ // cases:
+ //
+ // there can be up to two intersections with the pixel. any intersection
+ // with left or right edges can be handled by splitting into two (or three)
+ // regions. intersections with top & bottom do not necessitate case-wise logic.
+ //
+ // the old way of doing this found the intersections with the left & right edges,
+ // then used some simple logic to produce up to three segments in sorted order
+ // from top-to-bottom. however, this had a problem: if an x edge was epsilon
+ // across the x border, then the corresponding y position might not be distinct
+ // from the other y segment, and it might ignored as an empty segment. to avoid
+ // that, we need to explicitly produce segments based on x positions.
+
+ // rename variables to clearly-defined pairs
+ float y0 = y_top;
+ float x1 = (float) (x);
+ float x2 = (float) (x+1);
+ float x3 = xb;
+ float y3 = y_bottom;
+
+ // x = e->x + e->dx * (y-y_top)
+ // (y-y_top) = (x - e->x) / e->dx
+ // y = (x - e->x) / e->dx + y_top
+ float y1 = (x - x0) / dx + y_top;
+ float y2 = (x+1 - x0) / dx + y_top;
+
+ if (x0 < x1 && x3 > x2) { // three segments descending down-right
+ stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1);
+ stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x2,y2);
+ stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3);
+ } else if (x3 < x1 && x0 > x2) { // three segments descending down-left
+ stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2);
+ stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x1,y1);
+ stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3);
+ } else if (x0 < x1 && x3 > x1) { // two segments across x, down-right
+ stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1);
+ stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3);
+ } else if (x3 < x1 && x0 > x1) { // two segments across x, down-left
+ stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x1,y1);
+ stbtt__handle_clipped_edge(scanline,x,e, x1,y1, x3,y3);
+ } else if (x0 < x2 && x3 > x2) { // two segments across x+1, down-right
+ stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2);
+ stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3);
+ } else if (x3 < x2 && x0 > x2) { // two segments across x+1, down-left
+ stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x2,y2);
+ stbtt__handle_clipped_edge(scanline,x,e, x2,y2, x3,y3);
+ } else { // one segment
+ stbtt__handle_clipped_edge(scanline,x,e, x0,y0, x3,y3);
+ }
+ }
+ }
+ }
+ e = e->next;
+ }
+}
+
+// directly AA rasterize edges w/o supersampling
+static void stbtt__rasterize_sorted_edges(stbtt__bitmap *result, stbtt__edge *e, int n, int vsubsample, int off_x, int off_y, void *userdata)
+{
+ stbtt__hheap hh = { 0, 0, 0 };
+ stbtt__active_edge *active = NULL;
+ int y,j=0, i;
+ float scanline_data[129], *scanline, *scanline2;
+
+ STBTT__NOTUSED(vsubsample);
+
+ if (result->w > 64)
+ scanline = (float *) STBTT_malloc((result->w*2+1) * sizeof(float), userdata);
+ else
+ scanline = scanline_data;
+
+ scanline2 = scanline + result->w;
+
+ y = off_y;
+ e[n].y0 = (float) (off_y + result->h) + 1;
+
+ while (j < result->h) {
+ // find center of pixel for this scanline
+ float scan_y_top = y + 0.0f;
+ float scan_y_bottom = y + 1.0f;
+ stbtt__active_edge **step = &active;
+
+ STBTT_memset(scanline , 0, result->w*sizeof(scanline[0]));
+ STBTT_memset(scanline2, 0, (result->w+1)*sizeof(scanline[0]));
+
+ // update all active edges;
+ // remove all active edges that terminate before the top of this scanline
+ while (*step) {
+ stbtt__active_edge * z = *step;
+ if (z->ey <= scan_y_top) {
+ *step = z->next; // delete from list
+ STBTT_assert(z->direction);
+ z->direction = 0;
+ stbtt__hheap_free(&hh, z);
+ } else {
+ step = &((*step)->next); // advance through list
+ }
+ }
+
+ // insert all edges that start before the bottom of this scanline
+ while (e->y0 <= scan_y_bottom) {
+ if (e->y0 != e->y1) {
+ stbtt__active_edge *z = stbtt__new_active(&hh, e, off_x, scan_y_top, userdata);
+ if (z != NULL) {
+ if (j == 0 && off_y != 0) {
+ if (z->ey < scan_y_top) {
+ // this can happen due to subpixel positioning and some kind of fp rounding error i think
+ z->ey = scan_y_top;
+ }
+ }
+ STBTT_assert(z->ey >= scan_y_top); // if we get really unlucky a tiny bit of an edge can be out of bounds
+ // insert at front
+ z->next = active;
+ active = z;
+ }
+ }
+ ++e;
+ }
+
+ // now process all active edges
+ if (active)
+ stbtt__fill_active_edges_new(scanline, scanline2+1, result->w, active, scan_y_top);
+
+ {
+ float sum = 0;
+ for (i=0; i < result->w; ++i) {
+ float k;
+ int m;
+ sum += scanline2[i];
+ k = scanline[i] + sum;
+ k = (float) STBTT_fabs(k)*255 + 0.5f;
+ m = (int) k;
+ if (m > 255) m = 255;
+ result->pixels[j*result->stride + i] = (unsigned char) m;
+ }
+ }
+ // advance all the edges
+ step = &active;
+ while (*step) {
+ stbtt__active_edge *z = *step;
+ z->fx += z->fdx; // advance to position for current scanline
+ step = &((*step)->next); // advance through list
+ }
+
+ ++y;
+ ++j;
+ }
+
+ stbtt__hheap_cleanup(&hh, userdata);
+
+ if (scanline != scanline_data)
+ STBTT_free(scanline, userdata);
+}
+#else
+#error "Unrecognized value of STBTT_RASTERIZER_VERSION"
+#endif
+
+#define STBTT__COMPARE(a,b) ((a)->y0 < (b)->y0)
+
+static void stbtt__sort_edges_ins_sort(stbtt__edge *p, int n)
+{
+ int i,j;
+ for (i=1; i < n; ++i) {
+ stbtt__edge t = p[i], *a = &t;
+ j = i;
+ while (j > 0) {
+ stbtt__edge *b = &p[j-1];
+ int c = STBTT__COMPARE(a,b);
+ if (!c) break;
+ p[j] = p[j-1];
+ --j;
+ }
+ if (i != j)
+ p[j] = t;
+ }
+}
+
+static void stbtt__sort_edges_quicksort(stbtt__edge *p, int n)
+{
+ /* threshold for transitioning to insertion sort */
+ while (n > 12) {
+ stbtt__edge t;
+ int c01,c12,c,m,i,j;
+
+ /* compute median of three */
+ m = n >> 1;
+ c01 = STBTT__COMPARE(&p[0],&p[m]);
+ c12 = STBTT__COMPARE(&p[m],&p[n-1]);
+ /* if 0 >= mid >= end, or 0 < mid < end, then use mid */
+ if (c01 != c12) {
+ /* otherwise, we'll need to swap something else to middle */
+ int z;
+ c = STBTT__COMPARE(&p[0],&p[n-1]);
+ /* 0>mid && mid<n: 0>n => n; 0<n => 0 */
+ /* 0<mid && mid>n: 0>n => 0; 0<n => n */
+ z = (c == c12) ? 0 : n-1;
+ t = p[z];
+ p[z] = p[m];
+ p[m] = t;
+ }
+ /* now p[m] is the median-of-three */
+ /* swap it to the beginning so it won't move around */
+ t = p[0];
+ p[0] = p[m];
+ p[m] = t;
+
+ /* partition loop */
+ i=1;
+ j=n-1;
+ for(;;) {
+ /* handling of equality is crucial here */
+ /* for sentinels & efficiency with duplicates */
+ for (;;++i) {
+ if (!STBTT__COMPARE(&p[i], &p[0])) break;
+ }
+ for (;;--j) {
+ if (!STBTT__COMPARE(&p[0], &p[j])) break;
+ }
+ /* make sure we haven't crossed */
+ if (i >= j) break;
+ t = p[i];
+ p[i] = p[j];
+ p[j] = t;
+
+ ++i;
+ --j;
+ }
+ /* recurse on smaller side, iterate on larger */
+ if (j < (n-i)) {
+ stbtt__sort_edges_quicksort(p,j);
+ p = p+i;
+ n = n-i;
+ } else {
+ stbtt__sort_edges_quicksort(p+i, n-i);
+ n = j;
+ }
+ }
+}
+
+static void stbtt__sort_edges(stbtt__edge *p, int n)
+{
+ stbtt__sort_edges_quicksort(p, n);
+ stbtt__sort_edges_ins_sort(p, n);
+}
+
+typedef struct
+{
+ float x,y;
+} stbtt__point;
+
+static void stbtt__rasterize(stbtt__bitmap *result, stbtt__point *pts, int *wcount, int windings, float scale_x, float scale_y, float shift_x, float shift_y, int off_x, int off_y, int invert, void *userdata)
+{
+ float y_scale_inv = invert ? -scale_y : scale_y;
+ stbtt__edge *e;
+ int n,i,j,k,m;
+#if STBTT_RASTERIZER_VERSION == 1
+ int vsubsample = result->h < 8 ? 15 : 5;
+#elif STBTT_RASTERIZER_VERSION == 2
+ int vsubsample = 1;
+#else
+ #error "Unrecognized value of STBTT_RASTERIZER_VERSION"
+#endif
+ // vsubsample should divide 255 evenly; otherwise we won't reach full opacity
+
+ // now we have to blow out the windings into explicit edge lists
+ n = 0;
+ for (i=0; i < windings; ++i)
+ n += wcount[i];
+
+ e = (stbtt__edge *) STBTT_malloc(sizeof(*e) * (n+1), userdata); // add an extra one as a sentinel
+ if (e == 0) return;
+ n = 0;
+
+ m=0;
+ for (i=0; i < windings; ++i) {
+ stbtt__point *p = pts + m;
+ m += wcount[i];
+ j = wcount[i]-1;
+ for (k=0; k < wcount[i]; j=k++) {
+ int a=k,b=j;
+ // skip the edge if horizontal
+ if (p[j].y == p[k].y)
+ continue;
+ // add edge from j to k to the list
+ e[n].invert = 0;
+ if (invert ? p[j].y > p[k].y : p[j].y < p[k].y) {
+ e[n].invert = 1;
+ a=j,b=k;
+ }
+ e[n].x0 = p[a].x * scale_x + shift_x;
+ e[n].y0 = (p[a].y * y_scale_inv + shift_y) * vsubsample;
+ e[n].x1 = p[b].x * scale_x + shift_x;
+ e[n].y1 = (p[b].y * y_scale_inv + shift_y) * vsubsample;
+ ++n;
+ }
+ }
+
+ // now sort the edges by their highest point (should snap to integer, and then by x)
+ //STBTT_sort(e, n, sizeof(e[0]), stbtt__edge_compare);
+ stbtt__sort_edges(e, n);
+
+ // now, traverse the scanlines and find the intersections on each scanline, use xor winding rule
+ stbtt__rasterize_sorted_edges(result, e, n, vsubsample, off_x, off_y, userdata);
+
+ STBTT_free(e, userdata);
+}
+
+static void stbtt__add_point(stbtt__point *points, int n, float x, float y)
+{
+ if (!points) return; // during first pass, it's unallocated
+ points[n].x = x;
+ points[n].y = y;
+}
+
+// tessellate until threshold p is happy... @TODO warped to compensate for non-linear stretching
+static int stbtt__tesselate_curve(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float objspace_flatness_squared, int n)
+{
+ // midpoint
+ float mx = (x0 + 2*x1 + x2)/4;
+ float my = (y0 + 2*y1 + y2)/4;
+ // versus directly drawn line
+ float dx = (x0+x2)/2 - mx;
+ float dy = (y0+y2)/2 - my;
+ if (n > 16) // 65536 segments on one curve better be enough!
+ return 1;
+ if (dx*dx+dy*dy > objspace_flatness_squared) { // half-pixel error allowed... need to be smaller if AA
+ stbtt__tesselate_curve(points, num_points, x0,y0, (x0+x1)/2.0f,(y0+y1)/2.0f, mx,my, objspace_flatness_squared,n+1);
+ stbtt__tesselate_curve(points, num_points, mx,my, (x1+x2)/2.0f,(y1+y2)/2.0f, x2,y2, objspace_flatness_squared,n+1);
+ } else {
+ stbtt__add_point(points, *num_points,x2,y2);
+ *num_points = *num_points+1;
+ }
+ return 1;
+}
+
+static void stbtt__tesselate_cubic(stbtt__point *points, int *num_points, float x0, float y0, float x1, float y1, float x2, float y2, float x3, float y3, float objspace_flatness_squared, int n)
+{
+ // @TODO this "flatness" calculation is just made-up nonsense that seems to work well enough
+ float dx0 = x1-x0;
+ float dy0 = y1-y0;
+ float dx1 = x2-x1;
+ float dy1 = y2-y1;
+ float dx2 = x3-x2;
+ float dy2 = y3-y2;
+ float dx = x3-x0;
+ float dy = y3-y0;
+ float longlen = (float) (STBTT_sqrt(dx0*dx0+dy0*dy0)+STBTT_sqrt(dx1*dx1+dy1*dy1)+STBTT_sqrt(dx2*dx2+dy2*dy2));
+ float shortlen = (float) STBTT_sqrt(dx*dx+dy*dy);
+ float flatness_squared = longlen*longlen-shortlen*shortlen;
+
+ if (n > 16) // 65536 segments on one curve better be enough!
+ return;
+
+ if (flatness_squared > objspace_flatness_squared) {
+ float x01 = (x0+x1)/2;
+ float y01 = (y0+y1)/2;
+ float x12 = (x1+x2)/2;
+ float y12 = (y1+y2)/2;
+ float x23 = (x2+x3)/2;
+ float y23 = (y2+y3)/2;
+
+ float xa = (x01+x12)/2;
+ float ya = (y01+y12)/2;
+ float xb = (x12+x23)/2;
+ float yb = (y12+y23)/2;
+
+ float mx = (xa+xb)/2;
+ float my = (ya+yb)/2;
+
+ stbtt__tesselate_cubic(points, num_points, x0,y0, x01,y01, xa,ya, mx,my, objspace_flatness_squared,n+1);
+ stbtt__tesselate_cubic(points, num_points, mx,my, xb,yb, x23,y23, x3,y3, objspace_flatness_squared,n+1);
+ } else {
+ stbtt__add_point(points, *num_points,x3,y3);
+ *num_points = *num_points+1;
+ }
+}
+
+// returns number of contours
+static stbtt__point *stbtt_FlattenCurves(stbtt_vertex *vertices, int num_verts, float objspace_flatness, int **contour_lengths, int *num_contours, void *userdata)
+{
+ stbtt__point *points=0;
+ int num_points=0;
+
+ float objspace_flatness_squared = objspace_flatness * objspace_flatness;
+ int i,n=0,start=0, pass;
+
+ // count how many "moves" there are to get the contour count
+ for (i=0; i < num_verts; ++i)
+ if (vertices[i].type == STBTT_vmove)
+ ++n;
+
+ *num_contours = n;
+ if (n == 0) return 0;
+
+ *contour_lengths = (int *) STBTT_malloc(sizeof(**contour_lengths) * n, userdata);
+
+ if (*contour_lengths == 0) {
+ *num_contours = 0;
+ return 0;
+ }
+
+ // make two passes through the points so we don't need to realloc
+ for (pass=0; pass < 2; ++pass) {
+ float x=0,y=0;
+ if (pass == 1) {
+ points = (stbtt__point *) STBTT_malloc(num_points * sizeof(points[0]), userdata);
+ if (points == NULL) goto error;
+ }
+ num_points = 0;
+ n= -1;
+ for (i=0; i < num_verts; ++i) {
+ switch (vertices[i].type) {
+ case STBTT_vmove:
+ // start the next contour
+ if (n >= 0)
+ (*contour_lengths)[n] = num_points - start;
+ ++n;
+ start = num_points;
+
+ x = vertices[i].x, y = vertices[i].y;
+ stbtt__add_point(points, num_points++, x,y);
+ break;
+ case STBTT_vline:
+ x = vertices[i].x, y = vertices[i].y;
+ stbtt__add_point(points, num_points++, x, y);
+ break;
+ case STBTT_vcurve:
+ stbtt__tesselate_curve(points, &num_points, x,y,
+ vertices[i].cx, vertices[i].cy,
+ vertices[i].x, vertices[i].y,
+ objspace_flatness_squared, 0);
+ x = vertices[i].x, y = vertices[i].y;
+ break;
+ case STBTT_vcubic:
+ stbtt__tesselate_cubic(points, &num_points, x,y,
+ vertices[i].cx, vertices[i].cy,
+ vertices[i].cx1, vertices[i].cy1,
+ vertices[i].x, vertices[i].y,
+ objspace_flatness_squared, 0);
+ x = vertices[i].x, y = vertices[i].y;
+ break;
+ }
+ }
+ (*contour_lengths)[n] = num_points - start;
+ }
+
+ return points;
+error:
+ STBTT_free(points, userdata);
+ STBTT_free(*contour_lengths, userdata);
+ *contour_lengths = 0;
+ *num_contours = 0;
+ return NULL;
+}
+
+STBTT_DEF void stbtt_Rasterize(stbtt__bitmap *result, float flatness_in_pixels, stbtt_vertex *vertices, int num_verts, float scale_x, float scale_y, float shift_x, float shift_y, int x_off, int y_off, int invert, void *userdata)
+{
+ float scale = scale_x > scale_y ? scale_y : scale_x;
+ int winding_count = 0;
+ int *winding_lengths = NULL;
+ stbtt__point *windings = stbtt_FlattenCurves(vertices, num_verts, flatness_in_pixels / scale, &winding_lengths, &winding_count, userdata);
+ if (windings) {
+ stbtt__rasterize(result, windings, winding_lengths, winding_count, scale_x, scale_y, shift_x, shift_y, x_off, y_off, invert, userdata);
+ STBTT_free(winding_lengths, userdata);
+ STBTT_free(windings, userdata);
+ }
+}
+
+STBTT_DEF void stbtt_FreeBitmap(unsigned char *bitmap, void *userdata)
+{
+ STBTT_free(bitmap, userdata);
+}
+
+STBTT_DEF unsigned char *stbtt_GetGlyphBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int glyph, int *width, int *height, int *xoff, int *yoff)
+{
+ int ix0,iy0,ix1,iy1;
+ stbtt__bitmap gbm;
+ stbtt_vertex *vertices;
+ int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
+
+ if (scale_x == 0) scale_x = scale_y;
+ if (scale_y == 0) {
+ if (scale_x == 0) {
+ STBTT_free(vertices, info->userdata);
+ return NULL;
+ }
+ scale_y = scale_x;
+ }
+
+ stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,&ix1,&iy1);
+
+ // now we get the size
+ gbm.w = (ix1 - ix0);
+ gbm.h = (iy1 - iy0);
+ gbm.pixels = NULL; // in case we error
+
+ if (width ) *width = gbm.w;
+ if (height) *height = gbm.h;
+ if (xoff ) *xoff = ix0;
+ if (yoff ) *yoff = iy0;
+
+ if (gbm.w && gbm.h) {
+ gbm.pixels = (unsigned char *) STBTT_malloc(gbm.w * gbm.h, info->userdata);
+ if (gbm.pixels) {
+ gbm.stride = gbm.w;
+
+ stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0, iy0, 1, info->userdata);
+ }
+ }
+ STBTT_free(vertices, info->userdata);
+ return gbm.pixels;
+}
+
+STBTT_DEF unsigned char *stbtt_GetGlyphBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int glyph, int *width, int *height, int *xoff, int *yoff)
+{
+ return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y, 0.0f, 0.0f, glyph, width, height, xoff, yoff);
+}
+
+STBTT_DEF void stbtt_MakeGlyphBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int glyph)
+{
+ int ix0,iy0;
+ stbtt_vertex *vertices;
+ int num_verts = stbtt_GetGlyphShape(info, glyph, &vertices);
+ stbtt__bitmap gbm;
+
+ stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale_x, scale_y, shift_x, shift_y, &ix0,&iy0,0,0);
+ gbm.pixels = output;
+ gbm.w = out_w;
+ gbm.h = out_h;
+ gbm.stride = out_stride;
+
+ if (gbm.w && gbm.h)
+ stbtt_Rasterize(&gbm, 0.35f, vertices, num_verts, scale_x, scale_y, shift_x, shift_y, ix0,iy0, 1, info->userdata);
+
+ STBTT_free(vertices, info->userdata);
+}
+
+STBTT_DEF void stbtt_MakeGlyphBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int glyph)
+{
+ stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, glyph);
+}
+
+STBTT_DEF unsigned char *stbtt_GetCodepointBitmapSubpixel(const stbtt_fontinfo *info, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
+{
+ return stbtt_GetGlyphBitmapSubpixel(info, scale_x, scale_y,shift_x,shift_y, stbtt_FindGlyphIndex(info,codepoint), width,height,xoff,yoff);
+}
+
+STBTT_DEF void stbtt_MakeCodepointBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int oversample_x, int oversample_y, float *sub_x, float *sub_y, int codepoint)
+{
+ stbtt_MakeGlyphBitmapSubpixelPrefilter(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, oversample_x, oversample_y, sub_x, sub_y, stbtt_FindGlyphIndex(info,codepoint));
+}
+
+STBTT_DEF void stbtt_MakeCodepointBitmapSubpixel(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int codepoint)
+{
+ stbtt_MakeGlyphBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, shift_x, shift_y, stbtt_FindGlyphIndex(info,codepoint));
+}
+
+STBTT_DEF unsigned char *stbtt_GetCodepointBitmap(const stbtt_fontinfo *info, float scale_x, float scale_y, int codepoint, int *width, int *height, int *xoff, int *yoff)
+{
+ return stbtt_GetCodepointBitmapSubpixel(info, scale_x, scale_y, 0.0f,0.0f, codepoint, width,height,xoff,yoff);
+}
+
+STBTT_DEF void stbtt_MakeCodepointBitmap(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, int codepoint)
+{
+ stbtt_MakeCodepointBitmapSubpixel(info, output, out_w, out_h, out_stride, scale_x, scale_y, 0.0f,0.0f, codepoint);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// bitmap baking
+//
+// This is SUPER-CRAPPY packing to keep source code small
+
+static int stbtt_BakeFontBitmap_internal(unsigned char *data, int offset, // font location (use offset=0 for plain .ttf)
+ float pixel_height, // height of font in pixels
+ unsigned char *pixels, int pw, int ph, // bitmap to be filled in
+ int first_char, int num_chars, // characters to bake
+ stbtt_bakedchar *chardata)
+{
+ float scale;
+ int x,y,bottom_y, i;
+ stbtt_fontinfo f;
+ f.userdata = NULL;
+ if (!stbtt_InitFont(&f, data, offset))
+ return -1;
+ STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels
+ x=y=1;
+ bottom_y = 1;
+
+ scale = stbtt_ScaleForPixelHeight(&f, pixel_height);
+
+ for (i=0; i < num_chars; ++i) {
+ int advance, lsb, x0,y0,x1,y1,gw,gh;
+ int g = stbtt_FindGlyphIndex(&f, first_char + i);
+ stbtt_GetGlyphHMetrics(&f, g, &advance, &lsb);
+ stbtt_GetGlyphBitmapBox(&f, g, scale,scale, &x0,&y0,&x1,&y1);
+ gw = x1-x0;
+ gh = y1-y0;
+ if (x + gw + 1 >= pw)
+ y = bottom_y, x = 1; // advance to next row
+ if (y + gh + 1 >= ph) // check if it fits vertically AFTER potentially moving to next row
+ return -i;
+ STBTT_assert(x+gw < pw);
+ STBTT_assert(y+gh < ph);
+ stbtt_MakeGlyphBitmap(&f, pixels+x+y*pw, gw,gh,pw, scale,scale, g);
+ chardata[i].x0 = (stbtt_int16) x;
+ chardata[i].y0 = (stbtt_int16) y;
+ chardata[i].x1 = (stbtt_int16) (x + gw);
+ chardata[i].y1 = (stbtt_int16) (y + gh);
+ chardata[i].xadvance = scale * advance;
+ chardata[i].xoff = (float) x0;
+ chardata[i].yoff = (float) y0;
+ x = x + gw + 1;
+ if (y+gh+1 > bottom_y)
+ bottom_y = y+gh+1;
+ }
+ return bottom_y;
+}
+
+STBTT_DEF void stbtt_GetBakedQuad(const stbtt_bakedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int opengl_fillrule)
+{
+ float d3d_bias = opengl_fillrule ? 0 : -0.5f;
+ float ipw = 1.0f / pw, iph = 1.0f / ph;
+ const stbtt_bakedchar *b = chardata + char_index;
+ int round_x = STBTT_ifloor((*xpos + b->xoff) + 0.5f);
+ int round_y = STBTT_ifloor((*ypos + b->yoff) + 0.5f);
+
+ q->x0 = round_x + d3d_bias;
+ q->y0 = round_y + d3d_bias;
+ q->x1 = round_x + b->x1 - b->x0 + d3d_bias;
+ q->y1 = round_y + b->y1 - b->y0 + d3d_bias;
+
+ q->s0 = b->x0 * ipw;
+ q->t0 = b->y0 * iph;
+ q->s1 = b->x1 * ipw;
+ q->t1 = b->y1 * iph;
+
+ *xpos += b->xadvance;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// rectangle packing replacement routines if you don't have stb_rect_pack.h
+//
+
+#ifndef STB_RECT_PACK_VERSION
+
+typedef int stbrp_coord;
+
+////////////////////////////////////////////////////////////////////////////////////
+// //
+// //
+// COMPILER WARNING ?!?!? //
+// //
+// //
+// if you get a compile warning due to these symbols being defined more than //
+// once, move #include "stb_rect_pack.h" before #include "stb_truetype.h" //
+// //
+////////////////////////////////////////////////////////////////////////////////////
+
+typedef struct
+{
+ int width,height;
+ int x,y,bottom_y;
+} stbrp_context;
+
+typedef struct
+{
+ unsigned char x;
+} stbrp_node;
+
+struct stbrp_rect
+{
+ stbrp_coord x,y;
+ int id,w,h,was_packed;
+};
+
+static void stbrp_init_target(stbrp_context *con, int pw, int ph, stbrp_node *nodes, int num_nodes)
+{
+ con->width = pw;
+ con->height = ph;
+ con->x = 0;
+ con->y = 0;
+ con->bottom_y = 0;
+ STBTT__NOTUSED(nodes);
+ STBTT__NOTUSED(num_nodes);
+}
+
+static void stbrp_pack_rects(stbrp_context *con, stbrp_rect *rects, int num_rects)
+{
+ int i;
+ for (i=0; i < num_rects; ++i) {
+ if (con->x + rects[i].w > con->width) {
+ con->x = 0;
+ con->y = con->bottom_y;
+ }
+ if (con->y + rects[i].h > con->height)
+ break;
+ rects[i].x = con->x;
+ rects[i].y = con->y;
+ rects[i].was_packed = 1;
+ con->x += rects[i].w;
+ if (con->y + rects[i].h > con->bottom_y)
+ con->bottom_y = con->y + rects[i].h;
+ }
+ for ( ; i < num_rects; ++i)
+ rects[i].was_packed = 0;
+}
+#endif
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// bitmap baking
+//
+// This is SUPER-AWESOME (tm Ryan Gordon) packing using stb_rect_pack.h. If
+// stb_rect_pack.h isn't available, it uses the BakeFontBitmap strategy.
+
+STBTT_DEF int stbtt_PackBegin(stbtt_pack_context *spc, unsigned char *pixels, int pw, int ph, int stride_in_bytes, int padding, void *alloc_context)
+{
+ stbrp_context *context = (stbrp_context *) STBTT_malloc(sizeof(*context) ,alloc_context);
+ int num_nodes = pw - padding;
+ stbrp_node *nodes = (stbrp_node *) STBTT_malloc(sizeof(*nodes ) * num_nodes,alloc_context);
+
+ if (context == NULL || nodes == NULL) {
+ if (context != NULL) STBTT_free(context, alloc_context);
+ if (nodes != NULL) STBTT_free(nodes , alloc_context);
+ return 0;
+ }
+
+ spc->user_allocator_context = alloc_context;
+ spc->width = pw;
+ spc->height = ph;
+ spc->pixels = pixels;
+ spc->pack_info = context;
+ spc->nodes = nodes;
+ spc->padding = padding;
+ spc->stride_in_bytes = stride_in_bytes != 0 ? stride_in_bytes : pw;
+ spc->h_oversample = 1;
+ spc->v_oversample = 1;
+ spc->skip_missing = 0;
+
+ stbrp_init_target(context, pw-padding, ph-padding, nodes, num_nodes);
+
+ if (pixels)
+ STBTT_memset(pixels, 0, pw*ph); // background of 0 around pixels
+
+ return 1;
+}
+
+STBTT_DEF void stbtt_PackEnd (stbtt_pack_context *spc)
+{
+ STBTT_free(spc->nodes , spc->user_allocator_context);
+ STBTT_free(spc->pack_info, spc->user_allocator_context);
+}
+
+STBTT_DEF void stbtt_PackSetOversampling(stbtt_pack_context *spc, unsigned int h_oversample, unsigned int v_oversample)
+{
+ STBTT_assert(h_oversample <= STBTT_MAX_OVERSAMPLE);
+ STBTT_assert(v_oversample <= STBTT_MAX_OVERSAMPLE);
+ if (h_oversample <= STBTT_MAX_OVERSAMPLE)
+ spc->h_oversample = h_oversample;
+ if (v_oversample <= STBTT_MAX_OVERSAMPLE)
+ spc->v_oversample = v_oversample;
+}
+
+STBTT_DEF void stbtt_PackSetSkipMissingCodepoints(stbtt_pack_context *spc, int skip)
+{
+ spc->skip_missing = skip;
+}
+
+#define STBTT__OVER_MASK (STBTT_MAX_OVERSAMPLE-1)
+
+static void stbtt__h_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width)
+{
+ unsigned char buffer[STBTT_MAX_OVERSAMPLE];
+ int safe_w = w - kernel_width;
+ int j;
+ STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze
+ for (j=0; j < h; ++j) {
+ int i;
+ unsigned int total;
+ STBTT_memset(buffer, 0, kernel_width);
+
+ total = 0;
+
+ // make kernel_width a constant in common cases so compiler can optimize out the divide
+ switch (kernel_width) {
+ case 2:
+ for (i=0; i <= safe_w; ++i) {
+ total += pixels[i] - buffer[i & STBTT__OVER_MASK];
+ buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
+ pixels[i] = (unsigned char) (total / 2);
+ }
+ break;
+ case 3:
+ for (i=0; i <= safe_w; ++i) {
+ total += pixels[i] - buffer[i & STBTT__OVER_MASK];
+ buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
+ pixels[i] = (unsigned char) (total / 3);
+ }
+ break;
+ case 4:
+ for (i=0; i <= safe_w; ++i) {
+ total += pixels[i] - buffer[i & STBTT__OVER_MASK];
+ buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
+ pixels[i] = (unsigned char) (total / 4);
+ }
+ break;
+ case 5:
+ for (i=0; i <= safe_w; ++i) {
+ total += pixels[i] - buffer[i & STBTT__OVER_MASK];
+ buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
+ pixels[i] = (unsigned char) (total / 5);
+ }
+ break;
+ default:
+ for (i=0; i <= safe_w; ++i) {
+ total += pixels[i] - buffer[i & STBTT__OVER_MASK];
+ buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i];
+ pixels[i] = (unsigned char) (total / kernel_width);
+ }
+ break;
+ }
+
+ for (; i < w; ++i) {
+ STBTT_assert(pixels[i] == 0);
+ total -= buffer[i & STBTT__OVER_MASK];
+ pixels[i] = (unsigned char) (total / kernel_width);
+ }
+
+ pixels += stride_in_bytes;
+ }
+}
+
+static void stbtt__v_prefilter(unsigned char *pixels, int w, int h, int stride_in_bytes, unsigned int kernel_width)
+{
+ unsigned char buffer[STBTT_MAX_OVERSAMPLE];
+ int safe_h = h - kernel_width;
+ int j;
+ STBTT_memset(buffer, 0, STBTT_MAX_OVERSAMPLE); // suppress bogus warning from VS2013 -analyze
+ for (j=0; j < w; ++j) {
+ int i;
+ unsigned int total;
+ STBTT_memset(buffer, 0, kernel_width);
+
+ total = 0;
+
+ // make kernel_width a constant in common cases so compiler can optimize out the divide
+ switch (kernel_width) {
+ case 2:
+ for (i=0; i <= safe_h; ++i) {
+ total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
+ buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
+ pixels[i*stride_in_bytes] = (unsigned char) (total / 2);
+ }
+ break;
+ case 3:
+ for (i=0; i <= safe_h; ++i) {
+ total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
+ buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
+ pixels[i*stride_in_bytes] = (unsigned char) (total / 3);
+ }
+ break;
+ case 4:
+ for (i=0; i <= safe_h; ++i) {
+ total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
+ buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
+ pixels[i*stride_in_bytes] = (unsigned char) (total / 4);
+ }
+ break;
+ case 5:
+ for (i=0; i <= safe_h; ++i) {
+ total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
+ buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
+ pixels[i*stride_in_bytes] = (unsigned char) (total / 5);
+ }
+ break;
+ default:
+ for (i=0; i <= safe_h; ++i) {
+ total += pixels[i*stride_in_bytes] - buffer[i & STBTT__OVER_MASK];
+ buffer[(i+kernel_width) & STBTT__OVER_MASK] = pixels[i*stride_in_bytes];
+ pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width);
+ }
+ break;
+ }
+
+ for (; i < h; ++i) {
+ STBTT_assert(pixels[i*stride_in_bytes] == 0);
+ total -= buffer[i & STBTT__OVER_MASK];
+ pixels[i*stride_in_bytes] = (unsigned char) (total / kernel_width);
+ }
+
+ pixels += 1;
+ }
+}
+
+static float stbtt__oversample_shift(int oversample)
+{
+ if (!oversample)
+ return 0.0f;
+
+ // The prefilter is a box filter of width "oversample",
+ // which shifts phase by (oversample - 1)/2 pixels in
+ // oversampled space. We want to shift in the opposite
+ // direction to counter this.
+ return (float)-(oversample - 1) / (2.0f * (float)oversample);
+}
+
+// rects array must be big enough to accommodate all characters in the given ranges
+STBTT_DEF int stbtt_PackFontRangesGatherRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
+{
+ int i,j,k;
+ int missing_glyph_added = 0;
+
+ k=0;
+ for (i=0; i < num_ranges; ++i) {
+ float fh = ranges[i].font_size;
+ float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh);
+ ranges[i].h_oversample = (unsigned char) spc->h_oversample;
+ ranges[i].v_oversample = (unsigned char) spc->v_oversample;
+ for (j=0; j < ranges[i].num_chars; ++j) {
+ int x0,y0,x1,y1;
+ int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j];
+ int glyph = stbtt_FindGlyphIndex(info, codepoint);
+ if (glyph == 0 && (spc->skip_missing || missing_glyph_added)) {
+ rects[k].w = rects[k].h = 0;
+ } else {
+ stbtt_GetGlyphBitmapBoxSubpixel(info,glyph,
+ scale * spc->h_oversample,
+ scale * spc->v_oversample,
+ 0,0,
+ &x0,&y0,&x1,&y1);
+ rects[k].w = (stbrp_coord) (x1-x0 + spc->padding + spc->h_oversample-1);
+ rects[k].h = (stbrp_coord) (y1-y0 + spc->padding + spc->v_oversample-1);
+ if (glyph == 0)
+ missing_glyph_added = 1;
+ }
+ ++k;
+ }
+ }
+
+ return k;
+}
+
+STBTT_DEF void stbtt_MakeGlyphBitmapSubpixelPrefilter(const stbtt_fontinfo *info, unsigned char *output, int out_w, int out_h, int out_stride, float scale_x, float scale_y, float shift_x, float shift_y, int prefilter_x, int prefilter_y, float *sub_x, float *sub_y, int glyph)
+{
+ stbtt_MakeGlyphBitmapSubpixel(info,
+ output,
+ out_w - (prefilter_x - 1),
+ out_h - (prefilter_y - 1),
+ out_stride,
+ scale_x,
+ scale_y,
+ shift_x,
+ shift_y,
+ glyph);
+
+ if (prefilter_x > 1)
+ stbtt__h_prefilter(output, out_w, out_h, out_stride, prefilter_x);
+
+ if (prefilter_y > 1)
+ stbtt__v_prefilter(output, out_w, out_h, out_stride, prefilter_y);
+
+ *sub_x = stbtt__oversample_shift(prefilter_x);
+ *sub_y = stbtt__oversample_shift(prefilter_y);
+}
+
+// rects array must be big enough to accommodate all characters in the given ranges
+STBTT_DEF int stbtt_PackFontRangesRenderIntoRects(stbtt_pack_context *spc, const stbtt_fontinfo *info, stbtt_pack_range *ranges, int num_ranges, stbrp_rect *rects)
+{
+ int i,j,k, missing_glyph = -1, return_value = 1;
+
+ // save current values
+ int old_h_over = spc->h_oversample;
+ int old_v_over = spc->v_oversample;
+
+ k = 0;
+ for (i=0; i < num_ranges; ++i) {
+ float fh = ranges[i].font_size;
+ float scale = fh > 0 ? stbtt_ScaleForPixelHeight(info, fh) : stbtt_ScaleForMappingEmToPixels(info, -fh);
+ float recip_h,recip_v,sub_x,sub_y;
+ spc->h_oversample = ranges[i].h_oversample;
+ spc->v_oversample = ranges[i].v_oversample;
+ recip_h = 1.0f / spc->h_oversample;
+ recip_v = 1.0f / spc->v_oversample;
+ sub_x = stbtt__oversample_shift(spc->h_oversample);
+ sub_y = stbtt__oversample_shift(spc->v_oversample);
+ for (j=0; j < ranges[i].num_chars; ++j) {
+ stbrp_rect *r = &rects[k];
+ if (r->was_packed && r->w != 0 && r->h != 0) {
+ stbtt_packedchar *bc = &ranges[i].chardata_for_range[j];
+ int advance, lsb, x0,y0,x1,y1;
+ int codepoint = ranges[i].array_of_unicode_codepoints == NULL ? ranges[i].first_unicode_codepoint_in_range + j : ranges[i].array_of_unicode_codepoints[j];
+ int glyph = stbtt_FindGlyphIndex(info, codepoint);
+ stbrp_coord pad = (stbrp_coord) spc->padding;
+
+ // pad on left and top
+ r->x += pad;
+ r->y += pad;
+ r->w -= pad;
+ r->h -= pad;
+ stbtt_GetGlyphHMetrics(info, glyph, &advance, &lsb);
+ stbtt_GetGlyphBitmapBox(info, glyph,
+ scale * spc->h_oversample,
+ scale * spc->v_oversample,
+ &x0,&y0,&x1,&y1);
+ stbtt_MakeGlyphBitmapSubpixel(info,
+ spc->pixels + r->x + r->y*spc->stride_in_bytes,
+ r->w - spc->h_oversample+1,
+ r->h - spc->v_oversample+1,
+ spc->stride_in_bytes,
+ scale * spc->h_oversample,
+ scale * spc->v_oversample,
+ 0,0,
+ glyph);
+
+ if (spc->h_oversample > 1)
+ stbtt__h_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes,
+ r->w, r->h, spc->stride_in_bytes,
+ spc->h_oversample);
+
+ if (spc->v_oversample > 1)
+ stbtt__v_prefilter(spc->pixels + r->x + r->y*spc->stride_in_bytes,
+ r->w, r->h, spc->stride_in_bytes,
+ spc->v_oversample);
+
+ bc->x0 = (stbtt_int16) r->x;
+ bc->y0 = (stbtt_int16) r->y;
+ bc->x1 = (stbtt_int16) (r->x + r->w);
+ bc->y1 = (stbtt_int16) (r->y + r->h);
+ bc->xadvance = scale * advance;
+ bc->xoff = (float) x0 * recip_h + sub_x;
+ bc->yoff = (float) y0 * recip_v + sub_y;
+ bc->xoff2 = (x0 + r->w) * recip_h + sub_x;
+ bc->yoff2 = (y0 + r->h) * recip_v + sub_y;
+
+ if (glyph == 0)
+ missing_glyph = j;
+ } else if (spc->skip_missing) {
+ return_value = 0;
+ } else if (r->was_packed && r->w == 0 && r->h == 0 && missing_glyph >= 0) {
+ ranges[i].chardata_for_range[j] = ranges[i].chardata_for_range[missing_glyph];
+ } else {
+ return_value = 0; // if any fail, report failure
+ }
+
+ ++k;
+ }
+ }
+
+ // restore original values
+ spc->h_oversample = old_h_over;
+ spc->v_oversample = old_v_over;
+
+ return return_value;
+}
+
+STBTT_DEF void stbtt_PackFontRangesPackRects(stbtt_pack_context *spc, stbrp_rect *rects, int num_rects)
+{
+ stbrp_pack_rects((stbrp_context *) spc->pack_info, rects, num_rects);
+}
+
+STBTT_DEF int stbtt_PackFontRanges(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, stbtt_pack_range *ranges, int num_ranges)
+{
+ stbtt_fontinfo info;
+ int i, j, n, return_value; // [DEAR IMGUI] removed = 1;
+ //stbrp_context *context = (stbrp_context *) spc->pack_info;
+ stbrp_rect *rects;
+
+ // flag all characters as NOT packed
+ for (i=0; i < num_ranges; ++i)
+ for (j=0; j < ranges[i].num_chars; ++j)
+ ranges[i].chardata_for_range[j].x0 =
+ ranges[i].chardata_for_range[j].y0 =
+ ranges[i].chardata_for_range[j].x1 =
+ ranges[i].chardata_for_range[j].y1 = 0;
+
+ n = 0;
+ for (i=0; i < num_ranges; ++i)
+ n += ranges[i].num_chars;
+
+ rects = (stbrp_rect *) STBTT_malloc(sizeof(*rects) * n, spc->user_allocator_context);
+ if (rects == NULL)
+ return 0;
+
+ info.userdata = spc->user_allocator_context;
+ stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata,font_index));
+
+ n = stbtt_PackFontRangesGatherRects(spc, &info, ranges, num_ranges, rects);
+
+ stbtt_PackFontRangesPackRects(spc, rects, n);
+
+ return_value = stbtt_PackFontRangesRenderIntoRects(spc, &info, ranges, num_ranges, rects);
+
+ STBTT_free(rects, spc->user_allocator_context);
+ return return_value;
+}
+
+STBTT_DEF int stbtt_PackFontRange(stbtt_pack_context *spc, const unsigned char *fontdata, int font_index, float font_size,
+ int first_unicode_codepoint_in_range, int num_chars_in_range, stbtt_packedchar *chardata_for_range)
+{
+ stbtt_pack_range range;
+ range.first_unicode_codepoint_in_range = first_unicode_codepoint_in_range;
+ range.array_of_unicode_codepoints = NULL;
+ range.num_chars = num_chars_in_range;
+ range.chardata_for_range = chardata_for_range;
+ range.font_size = font_size;
+ return stbtt_PackFontRanges(spc, fontdata, font_index, &range, 1);
+}
+
+STBTT_DEF void stbtt_GetScaledFontVMetrics(const unsigned char *fontdata, int index, float size, float *ascent, float *descent, float *lineGap)
+{
+ int i_ascent, i_descent, i_lineGap;
+ float scale;
+ stbtt_fontinfo info;
+ stbtt_InitFont(&info, fontdata, stbtt_GetFontOffsetForIndex(fontdata, index));
+ scale = size > 0 ? stbtt_ScaleForPixelHeight(&info, size) : stbtt_ScaleForMappingEmToPixels(&info, -size);
+ stbtt_GetFontVMetrics(&info, &i_ascent, &i_descent, &i_lineGap);
+ *ascent = (float) i_ascent * scale;
+ *descent = (float) i_descent * scale;
+ *lineGap = (float) i_lineGap * scale;
+}
+
+STBTT_DEF void stbtt_GetPackedQuad(const stbtt_packedchar *chardata, int pw, int ph, int char_index, float *xpos, float *ypos, stbtt_aligned_quad *q, int align_to_integer)
+{
+ float ipw = 1.0f / pw, iph = 1.0f / ph;
+ const stbtt_packedchar *b = chardata + char_index;
+
+ if (align_to_integer) {
+ float x = (float) STBTT_ifloor((*xpos + b->xoff) + 0.5f);
+ float y = (float) STBTT_ifloor((*ypos + b->yoff) + 0.5f);
+ q->x0 = x;
+ q->y0 = y;
+ q->x1 = x + b->xoff2 - b->xoff;
+ q->y1 = y + b->yoff2 - b->yoff;
+ } else {
+ q->x0 = *xpos + b->xoff;
+ q->y0 = *ypos + b->yoff;
+ q->x1 = *xpos + b->xoff2;
+ q->y1 = *ypos + b->yoff2;
+ }
+
+ q->s0 = b->x0 * ipw;
+ q->t0 = b->y0 * iph;
+ q->s1 = b->x1 * ipw;
+ q->t1 = b->y1 * iph;
+
+ *xpos += b->xadvance;
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// sdf computation
+//
+
+#define STBTT_min(a,b) ((a) < (b) ? (a) : (b))
+#define STBTT_max(a,b) ((a) < (b) ? (b) : (a))
+
+static int stbtt__ray_intersect_bezier(float orig[2], float ray[2], float q0[2], float q1[2], float q2[2], float hits[2][2])
+{
+ float q0perp = q0[1]*ray[0] - q0[0]*ray[1];
+ float q1perp = q1[1]*ray[0] - q1[0]*ray[1];
+ float q2perp = q2[1]*ray[0] - q2[0]*ray[1];
+ float roperp = orig[1]*ray[0] - orig[0]*ray[1];
+
+ float a = q0perp - 2*q1perp + q2perp;
+ float b = q1perp - q0perp;
+ float c = q0perp - roperp;
+
+ float s0 = 0., s1 = 0.;
+ int num_s = 0;
+
+ if (a != 0.0) {
+ float discr = b*b - a*c;
+ if (discr > 0.0) {
+ float rcpna = -1 / a;
+ float d = (float) STBTT_sqrt(discr);
+ s0 = (b+d) * rcpna;
+ s1 = (b-d) * rcpna;
+ if (s0 >= 0.0 && s0 <= 1.0)
+ num_s = 1;
+ if (d > 0.0 && s1 >= 0.0 && s1 <= 1.0) {
+ if (num_s == 0) s0 = s1;
+ ++num_s;
+ }
+ }
+ } else {
+ // 2*b*s + c = 0
+ // s = -c / (2*b)
+ s0 = c / (-2 * b);
+ if (s0 >= 0.0 && s0 <= 1.0)
+ num_s = 1;
+ }
+
+ if (num_s == 0)
+ return 0;
+ else {
+ float rcp_len2 = 1 / (ray[0]*ray[0] + ray[1]*ray[1]);
+ float rayn_x = ray[0] * rcp_len2, rayn_y = ray[1] * rcp_len2;
+
+ float q0d = q0[0]*rayn_x + q0[1]*rayn_y;
+ float q1d = q1[0]*rayn_x + q1[1]*rayn_y;
+ float q2d = q2[0]*rayn_x + q2[1]*rayn_y;
+ float rod = orig[0]*rayn_x + orig[1]*rayn_y;
+
+ float q10d = q1d - q0d;
+ float q20d = q2d - q0d;
+ float q0rd = q0d - rod;
+
+ hits[0][0] = q0rd + s0*(2.0f - 2.0f*s0)*q10d + s0*s0*q20d;
+ hits[0][1] = a*s0+b;
+
+ if (num_s > 1) {
+ hits[1][0] = q0rd + s1*(2.0f - 2.0f*s1)*q10d + s1*s1*q20d;
+ hits[1][1] = a*s1+b;
+ return 2;
+ } else {
+ return 1;
+ }
+ }
+}
+
+static int equal(float *a, float *b)
+{
+ return (a[0] == b[0] && a[1] == b[1]);
+}
+
+static int stbtt__compute_crossings_x(float x, float y, int nverts, stbtt_vertex *verts)
+{
+ int i;
+ float orig[2], ray[2] = { 1, 0 };
+ float y_frac;
+ int winding = 0;
+
+ // make sure y never passes through a vertex of the shape
+ y_frac = (float) STBTT_fmod(y, 1.0f);
+ if (y_frac < 0.01f)
+ y += 0.01f;
+ else if (y_frac > 0.99f)
+ y -= 0.01f;
+
+ orig[0] = x;
+ orig[1] = y;
+
+ // test a ray from (-infinity,y) to (x,y)
+ for (i=0; i < nverts; ++i) {
+ if (verts[i].type == STBTT_vline) {
+ int x0 = (int) verts[i-1].x, y0 = (int) verts[i-1].y;
+ int x1 = (int) verts[i ].x, y1 = (int) verts[i ].y;
+ if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) {
+ float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0;
+ if (x_inter < x)
+ winding += (y0 < y1) ? 1 : -1;
+ }
+ }
+ if (verts[i].type == STBTT_vcurve) {
+ int x0 = (int) verts[i-1].x , y0 = (int) verts[i-1].y ;
+ int x1 = (int) verts[i ].cx, y1 = (int) verts[i ].cy;
+ int x2 = (int) verts[i ].x , y2 = (int) verts[i ].y ;
+ int ax = STBTT_min(x0,STBTT_min(x1,x2)), ay = STBTT_min(y0,STBTT_min(y1,y2));
+ int by = STBTT_max(y0,STBTT_max(y1,y2));
+ if (y > ay && y < by && x > ax) {
+ float q0[2],q1[2],q2[2];
+ float hits[2][2];
+ q0[0] = (float)x0;
+ q0[1] = (float)y0;
+ q1[0] = (float)x1;
+ q1[1] = (float)y1;
+ q2[0] = (float)x2;
+ q2[1] = (float)y2;
+ if (equal(q0,q1) || equal(q1,q2)) {
+ x0 = (int)verts[i-1].x;
+ y0 = (int)verts[i-1].y;
+ x1 = (int)verts[i ].x;
+ y1 = (int)verts[i ].y;
+ if (y > STBTT_min(y0,y1) && y < STBTT_max(y0,y1) && x > STBTT_min(x0,x1)) {
+ float x_inter = (y - y0) / (y1 - y0) * (x1-x0) + x0;
+ if (x_inter < x)
+ winding += (y0 < y1) ? 1 : -1;
+ }
+ } else {
+ int num_hits = stbtt__ray_intersect_bezier(orig, ray, q0, q1, q2, hits);
+ if (num_hits >= 1)
+ if (hits[0][0] < 0)
+ winding += (hits[0][1] < 0 ? -1 : 1);
+ if (num_hits >= 2)
+ if (hits[1][0] < 0)
+ winding += (hits[1][1] < 0 ? -1 : 1);
+ }
+ }
+ }
+ }
+ return winding;
+}
+
+static float stbtt__cuberoot( float x )
+{
+ if (x<0)
+ return -(float) STBTT_pow(-x,1.0f/3.0f);
+ else
+ return (float) STBTT_pow( x,1.0f/3.0f);
+}
+
+// x^3 + a*x^2 + b*x + c = 0
+static int stbtt__solve_cubic(float a, float b, float c, float* r)
+{
+ float s = -a / 3;
+ float p = b - a*a / 3;
+ float q = a * (2*a*a - 9*b) / 27 + c;
+ float p3 = p*p*p;
+ float d = q*q + 4*p3 / 27;
+ if (d >= 0) {
+ float z = (float) STBTT_sqrt(d);
+ float u = (-q + z) / 2;
+ float v = (-q - z) / 2;
+ u = stbtt__cuberoot(u);
+ v = stbtt__cuberoot(v);
+ r[0] = s + u + v;
+ return 1;
+ } else {
+ float u = (float) STBTT_sqrt(-p/3);
+ float v = (float) STBTT_acos(-STBTT_sqrt(-27/p3) * q / 2) / 3; // p3 must be negative, since d is negative
+ float m = (float) STBTT_cos(v);
+ float n = (float) STBTT_cos(v-3.141592/2)*1.732050808f;
+ r[0] = s + u * 2 * m;
+ r[1] = s - u * (m + n);
+ r[2] = s - u * (m - n);
+
+ //STBTT_assert( STBTT_fabs(((r[0]+a)*r[0]+b)*r[0]+c) < 0.05f); // these asserts may not be safe at all scales, though they're in bezier t parameter units so maybe?
+ //STBTT_assert( STBTT_fabs(((r[1]+a)*r[1]+b)*r[1]+c) < 0.05f);
+ //STBTT_assert( STBTT_fabs(((r[2]+a)*r[2]+b)*r[2]+c) < 0.05f);
+ return 3;
+ }
+}
+
+STBTT_DEF unsigned char * stbtt_GetGlyphSDF(const stbtt_fontinfo *info, float scale, int glyph, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff)
+{
+ float scale_x = scale, scale_y = scale;
+ int ix0,iy0,ix1,iy1;
+ int w,h;
+ unsigned char *data;
+
+ if (scale == 0) return NULL;
+
+ stbtt_GetGlyphBitmapBoxSubpixel(info, glyph, scale, scale, 0.0f,0.0f, &ix0,&iy0,&ix1,&iy1);
+
+ // if empty, return NULL
+ if (ix0 == ix1 || iy0 == iy1)
+ return NULL;
+
+ ix0 -= padding;
+ iy0 -= padding;
+ ix1 += padding;
+ iy1 += padding;
+
+ w = (ix1 - ix0);
+ h = (iy1 - iy0);
+
+ if (width ) *width = w;
+ if (height) *height = h;
+ if (xoff ) *xoff = ix0;
+ if (yoff ) *yoff = iy0;
+
+ // invert for y-downwards bitmaps
+ scale_y = -scale_y;
+
+ {
+ int x,y,i,j;
+ float *precompute;
+ stbtt_vertex *verts;
+ int num_verts = stbtt_GetGlyphShape(info, glyph, &verts);
+ data = (unsigned char *) STBTT_malloc(w * h, info->userdata);
+ precompute = (float *) STBTT_malloc(num_verts * sizeof(float), info->userdata);
+
+ for (i=0,j=num_verts-1; i < num_verts; j=i++) {
+ if (verts[i].type == STBTT_vline) {
+ float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y;
+ float x1 = verts[j].x*scale_x, y1 = verts[j].y*scale_y;
+ float dist = (float) STBTT_sqrt((x1-x0)*(x1-x0) + (y1-y0)*(y1-y0));
+ precompute[i] = (dist == 0) ? 0.0f : 1.0f / dist;
+ } else if (verts[i].type == STBTT_vcurve) {
+ float x2 = verts[j].x *scale_x, y2 = verts[j].y *scale_y;
+ float x1 = verts[i].cx*scale_x, y1 = verts[i].cy*scale_y;
+ float x0 = verts[i].x *scale_x, y0 = verts[i].y *scale_y;
+ float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2;
+ float len2 = bx*bx + by*by;
+ if (len2 != 0.0f)
+ precompute[i] = 1.0f / (bx*bx + by*by);
+ else
+ precompute[i] = 0.0f;
+ } else
+ precompute[i] = 0.0f;
+ }
+
+ for (y=iy0; y < iy1; ++y) {
+ for (x=ix0; x < ix1; ++x) {
+ float val;
+ float min_dist = 999999.0f;
+ float sx = (float) x + 0.5f;
+ float sy = (float) y + 0.5f;
+ float x_gspace = (sx / scale_x);
+ float y_gspace = (sy / scale_y);
+
+ int winding = stbtt__compute_crossings_x(x_gspace, y_gspace, num_verts, verts); // @OPTIMIZE: this could just be a rasterization, but needs to be line vs. non-tesselated curves so a new path
+
+ for (i=0; i < num_verts; ++i) {
+ float x0 = verts[i].x*scale_x, y0 = verts[i].y*scale_y;
+
+ if (verts[i].type == STBTT_vline && precompute[i] != 0.0f) {
+ float x1 = verts[i-1].x*scale_x, y1 = verts[i-1].y*scale_y;
+
+ float dist,dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy);
+ if (dist2 < min_dist*min_dist)
+ min_dist = (float) STBTT_sqrt(dist2);
+
+ // coarse culling against bbox
+ //if (sx > STBTT_min(x0,x1)-min_dist && sx < STBTT_max(x0,x1)+min_dist &&
+ // sy > STBTT_min(y0,y1)-min_dist && sy < STBTT_max(y0,y1)+min_dist)
+ dist = (float) STBTT_fabs((x1-x0)*(y0-sy) - (y1-y0)*(x0-sx)) * precompute[i];
+ STBTT_assert(i != 0);
+ if (dist < min_dist) {
+ // check position along line
+ // x' = x0 + t*(x1-x0), y' = y0 + t*(y1-y0)
+ // minimize (x'-sx)*(x'-sx)+(y'-sy)*(y'-sy)
+ float dx = x1-x0, dy = y1-y0;
+ float px = x0-sx, py = y0-sy;
+ // minimize (px+t*dx)^2 + (py+t*dy)^2 = px*px + 2*px*dx*t + t^2*dx*dx + py*py + 2*py*dy*t + t^2*dy*dy
+ // derivative: 2*px*dx + 2*py*dy + (2*dx*dx+2*dy*dy)*t, set to 0 and solve
+ float t = -(px*dx + py*dy) / (dx*dx + dy*dy);
+ if (t >= 0.0f && t <= 1.0f)
+ min_dist = dist;
+ }
+ } else if (verts[i].type == STBTT_vcurve) {
+ float x2 = verts[i-1].x *scale_x, y2 = verts[i-1].y *scale_y;
+ float x1 = verts[i ].cx*scale_x, y1 = verts[i ].cy*scale_y;
+ float box_x0 = STBTT_min(STBTT_min(x0,x1),x2);
+ float box_y0 = STBTT_min(STBTT_min(y0,y1),y2);
+ float box_x1 = STBTT_max(STBTT_max(x0,x1),x2);
+ float box_y1 = STBTT_max(STBTT_max(y0,y1),y2);
+ // coarse culling against bbox to avoid computing cubic unnecessarily
+ if (sx > box_x0-min_dist && sx < box_x1+min_dist && sy > box_y0-min_dist && sy < box_y1+min_dist) {
+ int num=0;
+ float ax = x1-x0, ay = y1-y0;
+ float bx = x0 - 2*x1 + x2, by = y0 - 2*y1 + y2;
+ float mx = x0 - sx, my = y0 - sy;
+ float res[3] = {0.f,0.f,0.f};
+ float px,py,t,it,dist2;
+ float a_inv = precompute[i];
+ if (a_inv == 0.0) { // if a_inv is 0, it's 2nd degree so use quadratic formula
+ float a = 3*(ax*bx + ay*by);
+ float b = 2*(ax*ax + ay*ay) + (mx*bx+my*by);
+ float c = mx*ax+my*ay;
+ if (a == 0.0) { // if a is 0, it's linear
+ if (b != 0.0) {
+ res[num++] = -c/b;
+ }
+ } else {
+ float discriminant = b*b - 4*a*c;
+ if (discriminant < 0)
+ num = 0;
+ else {
+ float root = (float) STBTT_sqrt(discriminant);
+ res[0] = (-b - root)/(2*a);
+ res[1] = (-b + root)/(2*a);
+ num = 2; // don't bother distinguishing 1-solution case, as code below will still work
+ }
+ }
+ } else {
+ float b = 3*(ax*bx + ay*by) * a_inv; // could precompute this as it doesn't depend on sample point
+ float c = (2*(ax*ax + ay*ay) + (mx*bx+my*by)) * a_inv;
+ float d = (mx*ax+my*ay) * a_inv;
+ num = stbtt__solve_cubic(b, c, d, res);
+ }
+ dist2 = (x0-sx)*(x0-sx) + (y0-sy)*(y0-sy);
+ if (dist2 < min_dist*min_dist)
+ min_dist = (float) STBTT_sqrt(dist2);
+
+ if (num >= 1 && res[0] >= 0.0f && res[0] <= 1.0f) {
+ t = res[0], it = 1.0f - t;
+ px = it*it*x0 + 2*t*it*x1 + t*t*x2;
+ py = it*it*y0 + 2*t*it*y1 + t*t*y2;
+ dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy);
+ if (dist2 < min_dist * min_dist)
+ min_dist = (float) STBTT_sqrt(dist2);
+ }
+ if (num >= 2 && res[1] >= 0.0f && res[1] <= 1.0f) {
+ t = res[1], it = 1.0f - t;
+ px = it*it*x0 + 2*t*it*x1 + t*t*x2;
+ py = it*it*y0 + 2*t*it*y1 + t*t*y2;
+ dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy);
+ if (dist2 < min_dist * min_dist)
+ min_dist = (float) STBTT_sqrt(dist2);
+ }
+ if (num >= 3 && res[2] >= 0.0f && res[2] <= 1.0f) {
+ t = res[2], it = 1.0f - t;
+ px = it*it*x0 + 2*t*it*x1 + t*t*x2;
+ py = it*it*y0 + 2*t*it*y1 + t*t*y2;
+ dist2 = (px-sx)*(px-sx) + (py-sy)*(py-sy);
+ if (dist2 < min_dist * min_dist)
+ min_dist = (float) STBTT_sqrt(dist2);
+ }
+ }
+ }
+ }
+ if (winding == 0)
+ min_dist = -min_dist; // if outside the shape, value is negative
+ val = onedge_value + pixel_dist_scale * min_dist;
+ if (val < 0)
+ val = 0;
+ else if (val > 255)
+ val = 255;
+ data[(y-iy0)*w+(x-ix0)] = (unsigned char) val;
+ }
+ }
+ STBTT_free(precompute, info->userdata);
+ STBTT_free(verts, info->userdata);
+ }
+ return data;
+}
+
+STBTT_DEF unsigned char * stbtt_GetCodepointSDF(const stbtt_fontinfo *info, float scale, int codepoint, int padding, unsigned char onedge_value, float pixel_dist_scale, int *width, int *height, int *xoff, int *yoff)
+{
+ return stbtt_GetGlyphSDF(info, scale, stbtt_FindGlyphIndex(info, codepoint), padding, onedge_value, pixel_dist_scale, width, height, xoff, yoff);
+}
+
+STBTT_DEF void stbtt_FreeSDF(unsigned char *bitmap, void *userdata)
+{
+ STBTT_free(bitmap, userdata);
+}
+
+//////////////////////////////////////////////////////////////////////////////
+//
+// font name matching -- recommended not to use this
+//
+
+// check if a utf8 string contains a prefix which is the utf16 string; if so return length of matching utf8 string
+static stbtt_int32 stbtt__CompareUTF8toUTF16_bigendian_prefix(stbtt_uint8 *s1, stbtt_int32 len1, stbtt_uint8 *s2, stbtt_int32 len2)
+{
+ stbtt_int32 i=0;
+
+ // convert utf16 to utf8 and compare the results while converting
+ while (len2) {
+ stbtt_uint16 ch = s2[0]*256 + s2[1];
+ if (ch < 0x80) {
+ if (i >= len1) return -1;
+ if (s1[i++] != ch) return -1;
+ } else if (ch < 0x800) {
+ if (i+1 >= len1) return -1;
+ if (s1[i++] != 0xc0 + (ch >> 6)) return -1;
+ if (s1[i++] != 0x80 + (ch & 0x3f)) return -1;
+ } else if (ch >= 0xd800 && ch < 0xdc00) {
+ stbtt_uint32 c;
+ stbtt_uint16 ch2 = s2[2]*256 + s2[3];
+ if (i+3 >= len1) return -1;
+ c = ((ch - 0xd800) << 10) + (ch2 - 0xdc00) + 0x10000;
+ if (s1[i++] != 0xf0 + (c >> 18)) return -1;
+ if (s1[i++] != 0x80 + ((c >> 12) & 0x3f)) return -1;
+ if (s1[i++] != 0x80 + ((c >> 6) & 0x3f)) return -1;
+ if (s1[i++] != 0x80 + ((c ) & 0x3f)) return -1;
+ s2 += 2; // plus another 2 below
+ len2 -= 2;
+ } else if (ch >= 0xdc00 && ch < 0xe000) {
+ return -1;
+ } else {
+ if (i+2 >= len1) return -1;
+ if (s1[i++] != 0xe0 + (ch >> 12)) return -1;
+ if (s1[i++] != 0x80 + ((ch >> 6) & 0x3f)) return -1;
+ if (s1[i++] != 0x80 + ((ch ) & 0x3f)) return -1;
+ }
+ s2 += 2;
+ len2 -= 2;
+ }
+ return i;
+}
+
+static int stbtt_CompareUTF8toUTF16_bigendian_internal(char *s1, int len1, char *s2, int len2)
+{
+ return len1 == stbtt__CompareUTF8toUTF16_bigendian_prefix((stbtt_uint8*) s1, len1, (stbtt_uint8*) s2, len2);
+}
+
+// returns results in whatever encoding you request... but note that 2-byte encodings
+// will be BIG-ENDIAN... use stbtt_CompareUTF8toUTF16_bigendian() to compare
+STBTT_DEF const char *stbtt_GetFontNameString(const stbtt_fontinfo *font, int *length, int platformID, int encodingID, int languageID, int nameID)
+{
+ stbtt_int32 i,count,stringOffset;
+ stbtt_uint8 *fc = font->data;
+ stbtt_uint32 offset = font->fontstart;
+ stbtt_uint32 nm = stbtt__find_table(fc, offset, "name");
+ if (!nm) return NULL;
+
+ count = ttUSHORT(fc+nm+2);
+ stringOffset = nm + ttUSHORT(fc+nm+4);
+ for (i=0; i < count; ++i) {
+ stbtt_uint32 loc = nm + 6 + 12 * i;
+ if (platformID == ttUSHORT(fc+loc+0) && encodingID == ttUSHORT(fc+loc+2)
+ && languageID == ttUSHORT(fc+loc+4) && nameID == ttUSHORT(fc+loc+6)) {
+ *length = ttUSHORT(fc+loc+8);
+ return (const char *) (fc+stringOffset+ttUSHORT(fc+loc+10));
+ }
+ }
+ return NULL;
+}
+
+static int stbtt__matchpair(stbtt_uint8 *fc, stbtt_uint32 nm, stbtt_uint8 *name, stbtt_int32 nlen, stbtt_int32 target_id, stbtt_int32 next_id)
+{
+ stbtt_int32 i;
+ stbtt_int32 count = ttUSHORT(fc+nm+2);
+ stbtt_int32 stringOffset = nm + ttUSHORT(fc+nm+4);
+
+ for (i=0; i < count; ++i) {
+ stbtt_uint32 loc = nm + 6 + 12 * i;
+ stbtt_int32 id = ttUSHORT(fc+loc+6);
+ if (id == target_id) {
+ // find the encoding
+ stbtt_int32 platform = ttUSHORT(fc+loc+0), encoding = ttUSHORT(fc+loc+2), language = ttUSHORT(fc+loc+4);
+
+ // is this a Unicode encoding?
+ if (platform == 0 || (platform == 3 && encoding == 1) || (platform == 3 && encoding == 10)) {
+ stbtt_int32 slen = ttUSHORT(fc+loc+8);
+ stbtt_int32 off = ttUSHORT(fc+loc+10);
+
+ // check if there's a prefix match
+ stbtt_int32 matchlen = stbtt__CompareUTF8toUTF16_bigendian_prefix(name, nlen, fc+stringOffset+off,slen);
+ if (matchlen >= 0) {
+ // check for target_id+1 immediately following, with same encoding & language
+ if (i+1 < count && ttUSHORT(fc+loc+12+6) == next_id && ttUSHORT(fc+loc+12) == platform && ttUSHORT(fc+loc+12+2) == encoding && ttUSHORT(fc+loc+12+4) == language) {
+ slen = ttUSHORT(fc+loc+12+8);
+ off = ttUSHORT(fc+loc+12+10);
+ if (slen == 0) {
+ if (matchlen == nlen)
+ return 1;
+ } else if (matchlen < nlen && name[matchlen] == ' ') {
+ ++matchlen;
+ if (stbtt_CompareUTF8toUTF16_bigendian_internal((char*) (name+matchlen), nlen-matchlen, (char*)(fc+stringOffset+off),slen))
+ return 1;
+ }
+ } else {
+ // if nothing immediately following
+ if (matchlen == nlen)
+ return 1;
+ }
+ }
+ }
+
+ // @TODO handle other encodings
+ }
+ }
+ return 0;
+}
+
+static int stbtt__matches(stbtt_uint8 *fc, stbtt_uint32 offset, stbtt_uint8 *name, stbtt_int32 flags)
+{
+ stbtt_int32 nlen = (stbtt_int32) STBTT_strlen((char *) name);
+ stbtt_uint32 nm,hd;
+ if (!stbtt__isfont(fc+offset)) return 0;
+
+ // check italics/bold/underline flags in macStyle...
+ if (flags) {
+ hd = stbtt__find_table(fc, offset, "head");
+ if ((ttUSHORT(fc+hd+44) & 7) != (flags & 7)) return 0;
+ }
+
+ nm = stbtt__find_table(fc, offset, "name");
+ if (!nm) return 0;
+
+ if (flags) {
+ // if we checked the macStyle flags, then just check the family and ignore the subfamily
+ if (stbtt__matchpair(fc, nm, name, nlen, 16, -1)) return 1;
+ if (stbtt__matchpair(fc, nm, name, nlen, 1, -1)) return 1;
+ if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1;
+ } else {
+ if (stbtt__matchpair(fc, nm, name, nlen, 16, 17)) return 1;
+ if (stbtt__matchpair(fc, nm, name, nlen, 1, 2)) return 1;
+ if (stbtt__matchpair(fc, nm, name, nlen, 3, -1)) return 1;
+ }
+
+ return 0;
+}
+
+static int stbtt_FindMatchingFont_internal(unsigned char *font_collection, char *name_utf8, stbtt_int32 flags)
+{
+ stbtt_int32 i;
+ for (i=0;;++i) {
+ stbtt_int32 off = stbtt_GetFontOffsetForIndex(font_collection, i);
+ if (off < 0) return off;
+ if (stbtt__matches((stbtt_uint8 *) font_collection, off, (stbtt_uint8*) name_utf8, flags))
+ return off;
+ }
+}
+
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-qual"
+#endif
+
+STBTT_DEF int stbtt_BakeFontBitmap(const unsigned char *data, int offset,
+ float pixel_height, unsigned char *pixels, int pw, int ph,
+ int first_char, int num_chars, stbtt_bakedchar *chardata)
+{
+ return stbtt_BakeFontBitmap_internal((unsigned char *) data, offset, pixel_height, pixels, pw, ph, first_char, num_chars, chardata);
+}
+
+STBTT_DEF int stbtt_GetFontOffsetForIndex(const unsigned char *data, int index)
+{
+ return stbtt_GetFontOffsetForIndex_internal((unsigned char *) data, index);
+}
+
+STBTT_DEF int stbtt_GetNumberOfFonts(const unsigned char *data)
+{
+ return stbtt_GetNumberOfFonts_internal((unsigned char *) data);
+}
+
+STBTT_DEF int stbtt_InitFont(stbtt_fontinfo *info, const unsigned char *data, int offset)
+{
+ return stbtt_InitFont_internal(info, (unsigned char *) data, offset);
+}
+
+STBTT_DEF int stbtt_FindMatchingFont(const unsigned char *fontdata, const char *name, int flags)
+{
+ return stbtt_FindMatchingFont_internal((unsigned char *) fontdata, (char *) name, flags);
+}
+
+STBTT_DEF int stbtt_CompareUTF8toUTF16_bigendian(const char *s1, int len1, const char *s2, int len2)
+{
+ return stbtt_CompareUTF8toUTF16_bigendian_internal((char *) s1, len1, (char *) s2, len2);
+}
+
+#if defined(__GNUC__) || defined(__clang__)
+#pragma GCC diagnostic pop
+#endif
+
+#endif // STB_TRUETYPE_IMPLEMENTATION
+
+
+// FULL VERSION HISTORY
+//
+// 1.25 (2021-07-11) many fixes
+// 1.24 (2020-02-05) fix warning
+// 1.23 (2020-02-02) query SVG data for glyphs; query whole kerning table (but only kern not GPOS)
+// 1.22 (2019-08-11) minimize missing-glyph duplication; fix kerning if both 'GPOS' and 'kern' are defined
+// 1.21 (2019-02-25) fix warning
+// 1.20 (2019-02-07) PackFontRange skips missing codepoints; GetScaleFontVMetrics()
+// 1.19 (2018-02-11) OpenType GPOS kerning (horizontal only), STBTT_fmod
+// 1.18 (2018-01-29) add missing function
+// 1.17 (2017-07-23) make more arguments const; doc fix
+// 1.16 (2017-07-12) SDF support
+// 1.15 (2017-03-03) make more arguments const
+// 1.14 (2017-01-16) num-fonts-in-TTC function
+// 1.13 (2017-01-02) support OpenType fonts, certain Apple fonts
+// 1.12 (2016-10-25) suppress warnings about casting away const with -Wcast-qual
+// 1.11 (2016-04-02) fix unused-variable warning
+// 1.10 (2016-04-02) allow user-defined fabs() replacement
+// fix memory leak if fontsize=0.0
+// fix warning from duplicate typedef
+// 1.09 (2016-01-16) warning fix; avoid crash on outofmem; use alloc userdata for PackFontRanges
+// 1.08 (2015-09-13) document stbtt_Rasterize(); fixes for vertical & horizontal edges
+// 1.07 (2015-08-01) allow PackFontRanges to accept arrays of sparse codepoints;
+// allow PackFontRanges to pack and render in separate phases;
+// fix stbtt_GetFontOFfsetForIndex (never worked for non-0 input?);
+// fixed an assert() bug in the new rasterizer
+// replace assert() with STBTT_assert() in new rasterizer
+// 1.06 (2015-07-14) performance improvements (~35% faster on x86 and x64 on test machine)
+// also more precise AA rasterizer, except if shapes overlap
+// remove need for STBTT_sort
+// 1.05 (2015-04-15) fix misplaced definitions for STBTT_STATIC
+// 1.04 (2015-04-15) typo in example
+// 1.03 (2015-04-12) STBTT_STATIC, fix memory leak in new packing, various fixes
+// 1.02 (2014-12-10) fix various warnings & compile issues w/ stb_rect_pack, C++
+// 1.01 (2014-12-08) fix subpixel position when oversampling to exactly match
+// non-oversampled; STBTT_POINT_SIZE for packed case only
+// 1.00 (2014-12-06) add new PackBegin etc. API, w/ support for oversampling
+// 0.99 (2014-09-18) fix multiple bugs with subpixel rendering (ryg)
+// 0.9 (2014-08-07) support certain mac/iOS fonts without an MS platformID
+// 0.8b (2014-07-07) fix a warning
+// 0.8 (2014-05-25) fix a few more warnings
+// 0.7 (2013-09-25) bugfix: subpixel glyph bug fixed in 0.5 had come back
+// 0.6c (2012-07-24) improve documentation
+// 0.6b (2012-07-20) fix a few more warnings
+// 0.6 (2012-07-17) fix warnings; added stbtt_ScaleForMappingEmToPixels,
+// stbtt_GetFontBoundingBox, stbtt_IsGlyphEmpty
+// 0.5 (2011-12-09) bugfixes:
+// subpixel glyph renderer computed wrong bounding box
+// first vertex of shape can be off-curve (FreeSans)
+// 0.4b (2011-12-03) fixed an error in the font baking example
+// 0.4 (2011-12-01) kerning, subpixel rendering (tor)
+// bugfixes for:
+// codepoint-to-glyph conversion using table fmt=12
+// codepoint-to-glyph conversion using table fmt=4
+// stbtt_GetBakedQuad with non-square texture (Zer)
+// updated Hello World! sample to use kerning and subpixel
+// fixed some warnings
+// 0.3 (2009-06-24) cmap fmt=12, compound shapes (MM)
+// userdata, malloc-from-userdata, non-zero fill (stb)
+// 0.2 (2009-03-11) Fix unsigned/signed char warnings
+// 0.1 (2009-03-09) First public release
+//
+
+/*
+------------------------------------------------------------------------------
+This software is available under 2 licenses -- choose whichever you prefer.
+------------------------------------------------------------------------------
+ALTERNATIVE A - MIT License
+Copyright (c) 2017 Sean Barrett
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+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:
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+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
+AUTHORS 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 IN THE
+SOFTWARE.
+------------------------------------------------------------------------------
+ALTERNATIVE B - Public Domain (www.unlicense.org)
+This is free and unencumbered software released into the public domain.
+Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
+software, either in source code form or as a compiled binary, for any purpose,
+commercial or non-commercial, and by any means.
+In jurisdictions that recognize copyright laws, the author or authors of this
+software dedicate any and all copyright interest in the software to the public
+domain. We make this dedication for the benefit of the public at large and to
+the detriment of our heirs and successors. We intend this dedication to be an
+overt act of relinquishment in perpetuity of all present and future rights to
+this software under copyright law.
+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
+AUTHORS 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 IN THE SOFTWARE.
+------------------------------------------------------------------------------
+*/
diff --git a/tests/manual/rhi/shared/imgui/qrhiimgui.cpp b/tests/manual/rhi/shared/imgui/qrhiimgui.cpp
new file mode 100644
index 0000000000..88b0a5d897
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/qrhiimgui.cpp
@@ -0,0 +1,612 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "qrhiimgui_p.h"
+#include <QtCore/qfile.h>
+#include <QtGui/qguiapplication.h>
+#include <QtGui/qevent.h>
+#include <QtGui/qclipboard.h>
+#include <QtGui/qimage.h>
+
+#include "imgui.h"
+
+// the imgui default
+static_assert(sizeof(ImDrawVert) == 20);
+// switched to uint in imconfig.h to avoid trouble with 4 byte offset alignment reqs
+static_assert(sizeof(ImDrawIdx) == 4);
+
+QT_BEGIN_NAMESPACE
+
+static QShader getShader(const QString &name)
+{
+ QFile f(name);
+ if (f.open(QIODevice::ReadOnly))
+ return QShader::fromSerialized(f.readAll());
+
+ return QShader();
+}
+
+QRhiImguiRenderer::~QRhiImguiRenderer()
+{
+ releaseResources();
+}
+
+void QRhiImguiRenderer::releaseResources()
+{
+ for (Texture &t : m_textures) {
+ delete t.tex;
+ delete t.srb;
+ }
+ m_textures.clear();
+
+ m_vbuf.reset();
+ m_ibuf.reset();
+ m_ubuf.reset();
+ m_ps.reset();
+ m_sampler.reset();
+
+ m_rhi = nullptr;
+}
+
+void QRhiImguiRenderer::prepare(QRhi *rhi,
+ QRhiRenderTarget *rt,
+ QRhiCommandBuffer *cb,
+ const QMatrix4x4 &mvp,
+ float opacity,
+ float hdrWhiteLevelMultiplierOrZeroForSDRsRGB)
+{
+ if (!m_rhi) {
+ m_rhi = rhi;
+ } else if (m_rhi != rhi) {
+ releaseResources();
+ m_rhi = rhi;
+ }
+
+ if (!m_rhi || f.draw.isEmpty())
+ return;
+
+ m_rt = rt;
+ m_cb = cb;
+
+ if (!m_vbuf) {
+ m_vbuf.reset(m_rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::VertexBuffer, f.totalVbufSize));
+ m_vbuf->setName(QByteArrayLiteral("imgui vertex buffer"));
+ if (!m_vbuf->create())
+ return;
+ } else {
+ if (f.totalVbufSize > m_vbuf->size()) {
+ m_vbuf->setSize(f.totalVbufSize);
+ if (!m_vbuf->create())
+ return;
+ }
+ }
+ if (!m_ibuf) {
+ m_ibuf.reset(m_rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::IndexBuffer, f.totalIbufSize));
+ m_ibuf->setName(QByteArrayLiteral("imgui index buffer"));
+ if (!m_ibuf->create())
+ return;
+ } else {
+ if (f.totalIbufSize > m_ibuf->size()) {
+ m_ibuf->setSize(f.totalIbufSize);
+ if (!m_ibuf->create())
+ return;
+ }
+ }
+
+ if (!m_ubuf) {
+ m_ubuf.reset(m_rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64 + 4 + 4));
+ m_ubuf->setName(QByteArrayLiteral("imgui uniform buffer"));
+ if (!m_ubuf->create())
+ return;
+ }
+
+ if (!m_sampler) {
+ m_sampler.reset(m_rhi->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
+ QRhiSampler::Repeat, QRhiSampler::Repeat));
+ m_sampler->setName(QByteArrayLiteral("imgui sampler"));
+ if (!m_sampler->create())
+ return;
+ }
+
+ if (m_textures.isEmpty()) {
+ Texture fontTex;
+ fontTex.image = sf.fontTextureData;
+ m_textures.append(fontTex);
+ } else if (!sf.fontTextureData.isNull()) {
+ Texture fontTex;
+ fontTex.image = sf.fontTextureData;
+ delete m_textures[0].tex;
+ delete m_textures[0].srb;
+ m_textures[0] = fontTex;
+ }
+
+ QVarLengthArray<int, 8> texturesNeedUpdate;
+ for (int i = 0; i < m_textures.count(); ++i) {
+ Texture &t(m_textures[i]);
+ if (!t.tex) {
+ t.tex = m_rhi->newTexture(QRhiTexture::RGBA8, t.image.size());
+ t.tex->setName(QByteArrayLiteral("imgui texture ") + QByteArray::number(i));
+ if (!t.tex->create())
+ return;
+ texturesNeedUpdate.append(i);
+ }
+ if (!t.srb) {
+ t.srb = m_rhi->newShaderResourceBindings();
+ t.srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, m_ubuf.get()),
+ QRhiShaderResourceBinding::sampledTexture(1, QRhiShaderResourceBinding::FragmentStage, t.tex, m_sampler.get())
+ });
+ if (!t.srb->create())
+ return;
+ }
+ }
+
+ // If layer.enabled is toggled on the item or an ancestor, the render
+ // target is then suddenly different and may not be compatible.
+ if (m_ps && m_rt->renderPassDescriptor()->serializedFormat() != m_renderPassFormat)
+ m_ps.reset();
+
+ if (!m_ps) {
+ QShader vs = getShader(QLatin1String(":/imgui.vert.qsb"));
+ QShader fs = getShader(QLatin1String(":/imgui.frag.qsb"));
+ if (!vs.isValid() || !fs.isValid()) {
+ qWarning("Failed to load imgui shaders");
+ return;
+ }
+
+ m_ps.reset(m_rhi->newGraphicsPipeline());
+ QRhiGraphicsPipeline::TargetBlend blend;
+ blend.enable = true;
+ // Premultiplied alpha (matches imgui.frag). Would not be needed if we
+ // only cared about outputting to the window (the common case), but
+ // once going through a texture (Item layer, ShaderEffect) which is
+ // then sampled by Quick, the result wouldn't be correct otherwise.
+ blend.srcColor = QRhiGraphicsPipeline::One;
+ blend.dstColor = QRhiGraphicsPipeline::OneMinusSrcAlpha;
+ blend.srcAlpha = QRhiGraphicsPipeline::One;
+ blend.dstAlpha = QRhiGraphicsPipeline::OneMinusSrcAlpha;
+ m_ps->setTargetBlends({ blend });
+ m_ps->setCullMode(QRhiGraphicsPipeline::None);
+ m_ps->setDepthTest(true);
+ m_ps->setDepthOp(QRhiGraphicsPipeline::LessOrEqual);
+ m_ps->setDepthWrite(false);
+ m_ps->setFlags(QRhiGraphicsPipeline::UsesScissor);
+
+ m_ps->setShaderStages({
+ { QRhiShaderStage::Vertex, vs },
+ { QRhiShaderStage::Fragment, fs }
+ });
+
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 4 * sizeof(float) + sizeof(quint32) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float2, 2 * sizeof(float) },
+ { 0, 2, QRhiVertexInputAttribute::UNormByte4, 4 * sizeof(float) }
+ });
+
+ m_ps->setVertexInputLayout(inputLayout);
+ m_ps->setShaderResourceBindings(m_textures[0].srb);
+ m_ps->setRenderPassDescriptor(m_rt->renderPassDescriptor());
+ m_renderPassFormat = m_rt->renderPassDescriptor()->serializedFormat();
+
+ if (!m_ps->create())
+ return;
+ }
+
+ QRhiResourceUpdateBatch *u = m_rhi->nextResourceUpdateBatch();
+
+ for (const CmdListBuffer &b : f.vbuf)
+ u->updateDynamicBuffer(m_vbuf.get(), b.offset, b.data.size(), b.data.constData());
+
+ for (const CmdListBuffer &b : f.ibuf)
+ u->updateDynamicBuffer(m_ibuf.get(), b.offset, b.data.size(), b.data.constData());
+
+ u->updateDynamicBuffer(m_ubuf.get(), 0, 64, mvp.constData());
+ u->updateDynamicBuffer(m_ubuf.get(), 64, 4, &opacity);
+ u->updateDynamicBuffer(m_ubuf.get(), 68, 4, &hdrWhiteLevelMultiplierOrZeroForSDRsRGB);
+
+ for (int i = 0; i < texturesNeedUpdate.count(); ++i) {
+ Texture &t(m_textures[texturesNeedUpdate[i]]);
+ u->uploadTexture(t.tex, t.image);
+ t.image = QImage();
+ }
+
+ m_cb->resourceUpdate(u);
+}
+
+void QRhiImguiRenderer::render()
+{
+ if (!m_rhi || f.draw.isEmpty() || !m_ps)
+ return;
+
+ m_cb->setGraphicsPipeline(m_ps.get());
+
+ const QSize viewportSize = m_rt->pixelSize();
+ bool needsViewport = true;
+
+ for (const DrawCmd &c : f.draw) {
+ QRhiCommandBuffer::VertexInput vbufBinding(m_vbuf.get(), f.vbuf[c.cmdListBufferIdx].offset);
+ if (needsViewport) {
+ needsViewport = false;
+ m_cb->setViewport({ 0, 0, float(viewportSize.width()), float(viewportSize.height()) });
+ }
+ const float sx1 = c.clipRect.x() + c.itemPixelOffset.x();
+ const float sy1 = c.clipRect.y() + c.itemPixelOffset.y();
+ const float sx2 = c.clipRect.z() + c.itemPixelOffset.x();
+ const float sy2 = c.clipRect.w() + c.itemPixelOffset.y();
+ QPoint scissorPos = QPointF(sx1, viewportSize.height() - sy2).toPoint();
+ QSize scissorSize = QSizeF(sx2 - sx1, sy2 - sy1).toSize();
+ scissorPos.setX(qMax(0, scissorPos.x()));
+ scissorPos.setY(qMax(0, scissorPos.y()));
+ scissorSize.setWidth(qMin(viewportSize.width(), scissorSize.width()));
+ scissorSize.setHeight(qMin(viewportSize.height(), scissorSize.height()));
+ m_cb->setScissor({ scissorPos.x(), scissorPos.y(), scissorSize.width(), scissorSize.height() });
+ m_cb->setShaderResources(m_textures[c.textureIndex].srb);
+ m_cb->setVertexInput(0, 1, &vbufBinding, m_ibuf.get(), c.indexOffset, QRhiCommandBuffer::IndexUInt32);
+ m_cb->drawIndexed(c.elemCount);
+ }
+}
+
+static const char *getClipboardText(void *)
+{
+ static QByteArray contents;
+ contents = QGuiApplication::clipboard()->text().toUtf8();
+ return contents.constData();
+}
+
+static void setClipboardText(void *, const char *text)
+{
+ QGuiApplication::clipboard()->setText(QString::fromUtf8(text));
+}
+
+QRhiImgui::QRhiImgui()
+{
+ ImGui::CreateContext();
+ rebuildFontAtlas();
+ ImGuiIO &io(ImGui::GetIO());
+ io.GetClipboardTextFn = getClipboardText;
+ io.SetClipboardTextFn = setClipboardText;
+}
+
+QRhiImgui::~QRhiImgui()
+{
+ ImGui::DestroyContext();
+}
+
+void QRhiImgui::rebuildFontAtlas()
+{
+ unsigned char *pixels;
+ int w, h;
+ ImGuiIO &io(ImGui::GetIO());
+ io.Fonts->GetTexDataAsRGBA32(&pixels, &w, &h);
+ const QImage wrapperImg(const_cast<const uchar *>(pixels), w, h, QImage::Format_RGBA8888);
+ sf.fontTextureData = wrapperImg.copy();
+ io.Fonts->SetTexID(reinterpret_cast<ImTextureID>(quintptr(0)));
+}
+
+void QRhiImgui::nextFrame(const QSizeF &logicalOutputSize, float dpr, const QPointF &logicalOffset, FrameFunc frameFunc)
+{
+ ImGuiIO &io(ImGui::GetIO());
+
+ const QPointF itemPixelOffset = logicalOffset * dpr;
+ f.outputPixelSize = (logicalOutputSize * dpr).toSize();
+ io.DisplaySize.x = logicalOutputSize.width();
+ io.DisplaySize.y = logicalOutputSize.height();
+ io.DisplayFramebufferScale = ImVec2(dpr, dpr);
+
+ ImGui::NewFrame();
+ if (frameFunc)
+ frameFunc();
+ ImGui::Render();
+
+ ImDrawData *draw = ImGui::GetDrawData();
+ draw->ScaleClipRects(ImVec2(dpr, dpr));
+
+ f.vbuf.resize(draw->CmdListsCount);
+ f.ibuf.resize(draw->CmdListsCount);
+ f.totalVbufSize = 0;
+ f.totalIbufSize = 0;
+ for (int n = 0; n < draw->CmdListsCount; ++n) {
+ const ImDrawList *cmdList = draw->CmdLists[n];
+ const int vbufSize = cmdList->VtxBuffer.Size * sizeof(ImDrawVert);
+ f.vbuf[n].offset = f.totalVbufSize;
+ f.totalVbufSize += vbufSize;
+ const int ibufSize = cmdList->IdxBuffer.Size * sizeof(ImDrawIdx);
+ f.ibuf[n].offset = f.totalIbufSize;
+ f.totalIbufSize += ibufSize;
+ }
+ f.draw.clear();
+ for (int n = 0; n < draw->CmdListsCount; ++n) {
+ const ImDrawList *cmdList = draw->CmdLists[n];
+ f.vbuf[n].data = QByteArray(reinterpret_cast<const char *>(cmdList->VtxBuffer.Data),
+ cmdList->VtxBuffer.Size * sizeof(ImDrawVert));
+ f.ibuf[n].data = QByteArray(reinterpret_cast<const char *>(cmdList->IdxBuffer.Data),
+ cmdList->IdxBuffer.Size * sizeof(ImDrawIdx));
+ const ImDrawIdx *indexBufOffset = nullptr;
+ for (int i = 0; i < cmdList->CmdBuffer.Size; ++i) {
+ const ImDrawCmd *cmd = &cmdList->CmdBuffer[i];
+ const quint32 indexOffset = f.ibuf[n].offset + quintptr(indexBufOffset);
+ if (!cmd->UserCallback) {
+ QRhiImguiRenderer::DrawCmd dc;
+ dc.cmdListBufferIdx = n;
+ dc.textureIndex = int(reinterpret_cast<qintptr>(cmd->TextureId));
+ dc.indexOffset = indexOffset;
+ dc.elemCount = cmd->ElemCount;
+ dc.itemPixelOffset = itemPixelOffset;
+ dc.clipRect = QVector4D(cmd->ClipRect.x, cmd->ClipRect.y, cmd->ClipRect.z, cmd->ClipRect.w);
+ f.draw.append(dc);
+ } else {
+ cmd->UserCallback(cmdList, cmd);
+ }
+ indexBufOffset += cmd->ElemCount;
+ }
+ }
+}
+
+void QRhiImgui::syncRenderer(QRhiImguiRenderer *renderer)
+{
+ renderer->sf = sf;
+ sf.fontTextureData = QImage();
+ renderer->f = std::move(f);
+}
+
+static void updateKeyboardModifiers(Qt::KeyboardModifiers modifiers)
+{
+ ImGuiIO &io(ImGui::GetIO());
+ io.AddKeyEvent(ImGuiKey_ModCtrl, modifiers.testFlag(Qt::ControlModifier));
+ io.AddKeyEvent(ImGuiKey_ModShift, modifiers.testFlag(Qt::ShiftModifier));
+ io.AddKeyEvent(ImGuiKey_ModAlt, modifiers.testFlag(Qt::AltModifier));
+ io.AddKeyEvent(ImGuiKey_ModSuper, modifiers.testFlag(Qt::MetaModifier));
+}
+
+static ImGuiKey mapKey(int k)
+{
+ switch (k) {
+ case Qt::Key_Space:
+ return ImGuiKey_Space;
+ case Qt::Key_Apostrophe:
+ return ImGuiKey_Apostrophe;
+ case Qt::Key_Comma:
+ return ImGuiKey_Comma;
+ case Qt::Key_Minus:
+ return ImGuiKey_Minus;
+ case Qt::Key_Period:
+ return ImGuiKey_Period;
+ case Qt::Key_Slash:
+ return ImGuiKey_Slash;
+ case Qt::Key_0:
+ return ImGuiKey_0;
+ case Qt::Key_1:
+ return ImGuiKey_1;
+ case Qt::Key_2:
+ return ImGuiKey_2;
+ case Qt::Key_3:
+ return ImGuiKey_3;
+ case Qt::Key_4:
+ return ImGuiKey_4;
+ case Qt::Key_5:
+ return ImGuiKey_5;
+ case Qt::Key_6:
+ return ImGuiKey_6;
+ case Qt::Key_7:
+ return ImGuiKey_8;
+ case Qt::Key_8:
+ return ImGuiKey_8;
+ case Qt::Key_9:
+ return ImGuiKey_9;
+ case Qt::Key_Semicolon:
+ return ImGuiKey_Semicolon;
+ case Qt::Key_Equal:
+ return ImGuiKey_Equal;
+ case Qt::Key_A:
+ return ImGuiKey_A;
+ case Qt::Key_B:
+ return ImGuiKey_B;
+ case Qt::Key_C:
+ return ImGuiKey_C;
+ case Qt::Key_D:
+ return ImGuiKey_D;
+ case Qt::Key_E:
+ return ImGuiKey_E;
+ case Qt::Key_F:
+ return ImGuiKey_F;
+ case Qt::Key_G:
+ return ImGuiKey_G;
+ case Qt::Key_H:
+ return ImGuiKey_H;
+ case Qt::Key_I:
+ return ImGuiKey_I;
+ case Qt::Key_J:
+ return ImGuiKey_J;
+ case Qt::Key_K:
+ return ImGuiKey_K;
+ case Qt::Key_L:
+ return ImGuiKey_L;
+ case Qt::Key_M:
+ return ImGuiKey_M;
+ case Qt::Key_N:
+ return ImGuiKey_N;
+ case Qt::Key_O:
+ return ImGuiKey_O;
+ case Qt::Key_P:
+ return ImGuiKey_P;
+ case Qt::Key_Q:
+ return ImGuiKey_Q;
+ case Qt::Key_R:
+ return ImGuiKey_R;
+ case Qt::Key_S:
+ return ImGuiKey_S;
+ case Qt::Key_T:
+ return ImGuiKey_T;
+ case Qt::Key_U:
+ return ImGuiKey_U;
+ case Qt::Key_V:
+ return ImGuiKey_V;
+ case Qt::Key_W:
+ return ImGuiKey_W;
+ case Qt::Key_X:
+ return ImGuiKey_X;
+ case Qt::Key_Y:
+ return ImGuiKey_Y;
+ case Qt::Key_Z:
+ return ImGuiKey_Z;
+ case Qt::Key_BracketLeft:
+ return ImGuiKey_LeftBracket;
+ case Qt::Key_Backslash:
+ return ImGuiKey_Backslash;
+ case Qt::Key_BracketRight:
+ return ImGuiKey_RightBracket;
+ case Qt::Key_QuoteLeft:
+ return ImGuiKey_GraveAccent;
+ case Qt::Key_Escape:
+ return ImGuiKey_Escape;
+ case Qt::Key_Tab:
+ return ImGuiKey_Tab;
+ case Qt::Key_Backspace:
+ return ImGuiKey_Backspace;
+ case Qt::Key_Return:
+ case Qt::Key_Enter:
+ return ImGuiKey_Enter;
+ case Qt::Key_Insert:
+ return ImGuiKey_Insert;
+ case Qt::Key_Delete:
+ return ImGuiKey_Delete;
+ case Qt::Key_Pause:
+ return ImGuiKey_Pause;
+ case Qt::Key_Print:
+ return ImGuiKey_PrintScreen;
+ case Qt::Key_Home:
+ return ImGuiKey_Home;
+ case Qt::Key_End:
+ return ImGuiKey_End;
+ case Qt::Key_Left:
+ return ImGuiKey_LeftArrow;
+ case Qt::Key_Up:
+ return ImGuiKey_UpArrow;
+ case Qt::Key_Right:
+ return ImGuiKey_RightArrow;
+ case Qt::Key_Down:
+ return ImGuiKey_DownArrow;
+ case Qt::Key_PageUp:
+ return ImGuiKey_PageUp;
+ case Qt::Key_PageDown:
+ return ImGuiKey_PageDown;
+ case Qt::Key_Shift:
+ return ImGuiKey_LeftShift;
+ case Qt::Key_Control:
+ return ImGuiKey_LeftCtrl;
+ case Qt::Key_Meta:
+ return ImGuiKey_LeftSuper;
+ case Qt::Key_Alt:
+ return ImGuiKey_LeftAlt;
+ case Qt::Key_CapsLock:
+ return ImGuiKey_CapsLock;
+ case Qt::Key_NumLock:
+ return ImGuiKey_NumLock;
+ case Qt::Key_ScrollLock:
+ return ImGuiKey_ScrollLock;
+ case Qt::Key_F1:
+ return ImGuiKey_F1;
+ case Qt::Key_F2:
+ return ImGuiKey_F2;
+ case Qt::Key_F3:
+ return ImGuiKey_F3;
+ case Qt::Key_F4:
+ return ImGuiKey_F4;
+ case Qt::Key_F5:
+ return ImGuiKey_F5;
+ case Qt::Key_F6:
+ return ImGuiKey_F6;
+ case Qt::Key_F7:
+ return ImGuiKey_F7;
+ case Qt::Key_F8:
+ return ImGuiKey_F8;
+ case Qt::Key_F9:
+ return ImGuiKey_F9;
+ case Qt::Key_F10:
+ return ImGuiKey_F10;
+ case Qt::Key_F11:
+ return ImGuiKey_F11;
+ case Qt::Key_F12:
+ return ImGuiKey_F12;
+ default:
+ break;
+ }
+ return ImGuiKey_None;
+}
+
+bool QRhiImgui::processEvent(QEvent *event)
+{
+ ImGuiIO &io(ImGui::GetIO());
+
+ switch (event->type()) {
+ case QEvent::MouseButtonPress:
+ {
+ QMouseEvent *me = static_cast<QMouseEvent *>(event);
+ updateKeyboardModifiers(me->modifiers());
+ Qt::MouseButtons buttons = me->buttons();
+ if (buttons.testFlag(Qt::LeftButton) && !pressedMouseButtons.testFlag(Qt::LeftButton))
+ io.AddMouseButtonEvent(0, true);
+ if (buttons.testFlag(Qt::RightButton) && !pressedMouseButtons.testFlag(Qt::RightButton))
+ io.AddMouseButtonEvent(1, true);
+ if (buttons.testFlag(Qt::MiddleButton) && !pressedMouseButtons.testFlag(Qt::MiddleButton))
+ io.AddMouseButtonEvent(2, true);
+ pressedMouseButtons = buttons;
+ }
+ return true;
+
+ case QEvent::MouseButtonRelease:
+ {
+ QMouseEvent *me = static_cast<QMouseEvent *>(event);
+ Qt::MouseButtons buttons = me->buttons();
+ if (!buttons.testFlag(Qt::LeftButton) && pressedMouseButtons.testFlag(Qt::LeftButton))
+ io.AddMouseButtonEvent(0, false);
+ if (!buttons.testFlag(Qt::RightButton) && pressedMouseButtons.testFlag(Qt::RightButton))
+ io.AddMouseButtonEvent(1, false);
+ if (!buttons.testFlag(Qt::MiddleButton) && pressedMouseButtons.testFlag(Qt::MiddleButton))
+ io.AddMouseButtonEvent(2, false);
+ pressedMouseButtons = buttons;
+ }
+ return true;
+
+ case QEvent::MouseMove:
+ {
+ QMouseEvent *me = static_cast<QMouseEvent *>(event);
+ const QPointF pos = me->position();
+ io.AddMousePosEvent(pos.x(), pos.y());
+ }
+ return true;
+
+ case QEvent::Wheel:
+ {
+ QWheelEvent *we = static_cast<QWheelEvent *>(event);
+ QPointF wheel(we->angleDelta().x() / 120.0f, we->angleDelta().y() / 120.0f);
+ io.AddMouseWheelEvent(wheel.x(), wheel.y());
+ }
+ return true;
+
+ case QEvent::KeyPress:
+ case QEvent::KeyRelease:
+ {
+ QKeyEvent *ke = static_cast<QKeyEvent *>(event);
+ const bool down = event->type() == QEvent::KeyPress;
+ updateKeyboardModifiers(ke->modifiers());
+ io.AddKeyEvent(mapKey(ke->key()), down);
+ if (down && !ke->text().isEmpty()) {
+ const QByteArray text = ke->text().toUtf8();
+ io.AddInputCharactersUTF8(text.constData());
+ }
+ }
+ return true;
+
+ default:
+ break;
+ }
+
+ return false;
+}
+
+QT_END_NAMESPACE
diff --git a/tests/manual/rhi/shared/imgui/qrhiimgui_p.h b/tests/manual/rhi/shared/imgui/qrhiimgui_p.h
new file mode 100644
index 0000000000..ec86c2af7f
--- /dev/null
+++ b/tests/manual/rhi/shared/imgui/qrhiimgui_p.h
@@ -0,0 +1,98 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef QRHIIMGUI_P_H
+#define QRHIIMGUI_P_H
+
+#include <rhi/qrhi.h>
+
+QT_BEGIN_NAMESPACE
+
+class QEvent;
+
+class QRhiImguiRenderer
+{
+public:
+ ~QRhiImguiRenderer();
+
+ struct CmdListBuffer {
+ quint32 offset;
+ QByteArray data;
+ };
+
+ struct DrawCmd {
+ int cmdListBufferIdx;
+ int textureIndex;
+ quint32 indexOffset;
+ quint32 elemCount;
+ QPointF itemPixelOffset;
+ QVector4D clipRect;
+ };
+
+ struct StaticRenderData {
+ QImage fontTextureData;
+ };
+
+ struct FrameRenderData {
+ quint32 totalVbufSize = 0;
+ quint32 totalIbufSize = 0;
+ QVarLengthArray<CmdListBuffer, 4> vbuf;
+ QVarLengthArray<CmdListBuffer, 4> ibuf;
+ QVarLengthArray<DrawCmd, 4> draw;
+ QSize outputPixelSize;
+ };
+
+ StaticRenderData sf;
+ FrameRenderData f;
+
+ void prepare(QRhi *rhi,
+ QRhiRenderTarget *rt,
+ QRhiCommandBuffer *cb,
+ const QMatrix4x4 &mvp,
+ float opacity = 1.0f,
+ float hdrWhiteLevelMultiplierOrZeroForSDRsRGB = 0.0f);
+ void render();
+ void releaseResources();
+
+private:
+ QRhi *m_rhi = nullptr;
+ QRhiRenderTarget *m_rt = nullptr;
+ QRhiCommandBuffer *m_cb = nullptr;
+
+ std::unique_ptr<QRhiBuffer> m_vbuf;
+ std::unique_ptr<QRhiBuffer> m_ibuf;
+ std::unique_ptr<QRhiBuffer> m_ubuf;
+ std::unique_ptr<QRhiGraphicsPipeline> m_ps;
+ QVector<quint32> m_renderPassFormat;
+ std::unique_ptr<QRhiSampler> m_sampler;
+
+ struct Texture {
+ QImage image;
+ QRhiTexture *tex = nullptr;
+ QRhiShaderResourceBindings *srb = nullptr;
+ };
+ QVector<Texture> m_textures;
+};
+
+class QRhiImgui
+{
+public:
+ QRhiImgui();
+ ~QRhiImgui();
+
+ using FrameFunc = std::function<void()>;
+ void nextFrame(const QSizeF &logicalOutputSize, float dpr, const QPointF &logicalOffset, FrameFunc frameFunc);
+ void syncRenderer(QRhiImguiRenderer *renderer);
+ bool processEvent(QEvent *e);
+
+ void rebuildFontAtlas();
+
+private:
+ QRhiImguiRenderer::StaticRenderData sf;
+ QRhiImguiRenderer::FrameRenderData f;
+ Qt::MouseButtons pressedMouseButtons;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/tests/manual/rhi/shared/texture.frag.qsb b/tests/manual/rhi/shared/texture.frag.qsb
index b535db90a5..fc1896df76 100644
--- a/tests/manual/rhi/shared/texture.frag.qsb
+++ b/tests/manual/rhi/shared/texture.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/shared/texture.vert.qsb b/tests/manual/rhi/shared/texture.vert.qsb
index f09ed73ef8..40ac8a0691 100644
--- a/tests/manual/rhi/shared/texture.vert.qsb
+++ b/tests/manual/rhi/shared/texture.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/shared/texture_arr.frag.qsb b/tests/manual/rhi/shared/texture_arr.frag.qsb
index 3674fdad1d..7229c9f5fc 100644
--- a/tests/manual/rhi/shared/texture_arr.frag.qsb
+++ b/tests/manual/rhi/shared/texture_arr.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/shared/texture_arr.vert.qsb b/tests/manual/rhi/shared/texture_arr.vert.qsb
index fe46d2c385..fd34dcaf51 100644
--- a/tests/manual/rhi/shared/texture_arr.vert.qsb
+++ b/tests/manual/rhi/shared/texture_arr.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/shared/texture_ms4.frag.qsb b/tests/manual/rhi/shared/texture_ms4.frag.qsb
index 4080308652..896df41645 100644
--- a/tests/manual/rhi/shared/texture_ms4.frag.qsb
+++ b/tests/manual/rhi/shared/texture_ms4.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/stenciloutline/CMakeLists.txt b/tests/manual/rhi/stenciloutline/CMakeLists.txt
new file mode 100644
index 0000000000..fbd2631482
--- /dev/null
+++ b/tests/manual/rhi/stenciloutline/CMakeLists.txt
@@ -0,0 +1,19 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(stenciloutline
+ GUI
+ SOURCES
+ stenciloutline.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
+
+qt_internal_add_resource(stenciloutline "stenciloutline"
+ PREFIX
+ "/"
+ FILES
+ "material.frag.qsb"
+ "material.vert.qsb"
+)
diff --git a/tests/manual/rhi/stenciloutline/buildshaders.bat b/tests/manual/rhi/stenciloutline/buildshaders.bat
new file mode 100644
index 0000000000..fc274eeec2
--- /dev/null
+++ b/tests/manual/rhi/stenciloutline/buildshaders.bat
@@ -0,0 +1,2 @@
+qsb --glsl "100 es,120,150" --hlsl 50 --msl 12 material.vert -o material.vert.qsb
+qsb --glsl "100 es,120,150" --hlsl 50 --msl 12 material.frag -o material.frag.qsb
diff --git a/tests/manual/rhi/stenciloutline/material.frag b/tests/manual/rhi/stenciloutline/material.frag
new file mode 100644
index 0000000000..8fc52e014d
--- /dev/null
+++ b/tests/manual/rhi/stenciloutline/material.frag
@@ -0,0 +1,13 @@
+#version 440
+
+layout(location = 0) out vec4 fragColor;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ vec3 color;
+};
+
+void main()
+{
+ fragColor = vec4(color, 1.0);
+}
diff --git a/tests/manual/rhi/stenciloutline/material.frag.qsb b/tests/manual/rhi/stenciloutline/material.frag.qsb
new file mode 100644
index 0000000000..1c238b51ca
--- /dev/null
+++ b/tests/manual/rhi/stenciloutline/material.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/stenciloutline/material.vert b/tests/manual/rhi/stenciloutline/material.vert
new file mode 100644
index 0000000000..0fd83be568
--- /dev/null
+++ b/tests/manual/rhi/stenciloutline/material.vert
@@ -0,0 +1,13 @@
+#version 440
+
+layout(location = 0) in vec4 position;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 mvp;
+ vec3 color;
+};
+
+void main()
+{
+ gl_Position = mvp * position;
+}
diff --git a/tests/manual/rhi/stenciloutline/material.vert.qsb b/tests/manual/rhi/stenciloutline/material.vert.qsb
new file mode 100644
index 0000000000..b05d9c9c23
--- /dev/null
+++ b/tests/manual/rhi/stenciloutline/material.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/stenciloutline/stenciloutline.cpp b/tests/manual/rhi/stenciloutline/stenciloutline.cpp
new file mode 100644
index 0000000000..dfa4cdbbff
--- /dev/null
+++ b/tests/manual/rhi/stenciloutline/stenciloutline.cpp
@@ -0,0 +1,154 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "../shared/examplefw.h"
+#include "../shared/cube.h"
+
+static const quint32 UBUF_SIZE = 76;
+static const float OUTLINE_SIZE = 1.05f;
+
+struct {
+ QList<QRhiResource *> releasePool;
+
+ QRhiBuffer *vbuf;
+ QRhiBuffer *ubuf;
+ QRhiShaderResourceBindings *srb;
+ QRhiGraphicsPipeline *psPass1;
+ QRhiGraphicsPipeline *psPass2;
+ float rot = 0.0f;
+
+ QRhiResourceUpdateBatch *initialUpdates = nullptr;
+} d;
+
+void Window::customInit()
+{
+ d.initialUpdates = m_r->nextResourceUpdateBatch();
+
+ d.vbuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(cube));
+ d.vbuf->create();
+ d.releasePool << d.vbuf;
+
+ d.initialUpdates->uploadStaticBuffer(d.vbuf, cube);
+
+ d.ubuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 2 * m_r->ubufAligned(UBUF_SIZE));
+ d.ubuf->create();
+ d.releasePool << d.ubuf;
+
+ d.srb = m_r->newShaderResourceBindings();
+ d.releasePool << d.srb;
+ d.srb->setBindings({
+ QRhiShaderResourceBinding::uniformBufferWithDynamicOffset(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage, d.ubuf, UBUF_SIZE)
+ });
+ d.srb->create();
+
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 3 * sizeof(float) },
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
+ });
+
+ const QRhiShaderStage stages[] = {
+ { QRhiShaderStage::Vertex, getShader(QLatin1String(":/material.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/material.frag.qsb")) }
+ };
+
+ d.psPass1 = m_r->newGraphicsPipeline();
+ d.releasePool << d.psPass1;
+ d.psPass1->setShaderStages(stages, stages + 2);
+ d.psPass1->setFlags(QRhiGraphicsPipeline::UsesStencilRef);
+ d.psPass1->setDepthTest(true);
+ d.psPass1->setDepthWrite(true);
+ QRhiGraphicsPipeline::StencilOpState stencilPass1 = { QRhiGraphicsPipeline::Keep,
+ QRhiGraphicsPipeline::Keep,
+ QRhiGraphicsPipeline::Replace,
+ QRhiGraphicsPipeline::Always };
+ d.psPass1->setStencilFront(stencilPass1);
+ d.psPass1->setCullMode(QRhiGraphicsPipeline::Back);
+ //d.psPass1->setStencilBack(stencilPass1);
+ d.psPass1->setStencilTest(true);
+ d.psPass1->setVertexInputLayout(inputLayout);
+ d.psPass1->setShaderResourceBindings(d.srb);
+ d.psPass1->setRenderPassDescriptor(m_rp);
+ d.psPass1->create();
+
+ d.psPass2 = m_r->newGraphicsPipeline();
+ d.releasePool << d.psPass2;
+ d.psPass2->setShaderStages(stages, stages + 2);
+ d.psPass2->setFlags(QRhiGraphicsPipeline::UsesStencilRef);
+ d.psPass2->setDepthTest(false);
+ d.psPass2->setDepthWrite(false);
+ QRhiGraphicsPipeline::StencilOpState stencilPass2 = { QRhiGraphicsPipeline::Keep,
+ QRhiGraphicsPipeline::Keep,
+ QRhiGraphicsPipeline::Replace,
+ QRhiGraphicsPipeline::NotEqual };
+ d.psPass2->setStencilFront(stencilPass2);
+ d.psPass2->setCullMode(QRhiGraphicsPipeline::Back);
+ //d.psPass2->setStencilBack(stencilPass2);
+ d.psPass2->setStencilTest(true);
+ d.psPass2->setStencilWriteMask(0);
+ d.psPass2->setVertexInputLayout(inputLayout);
+ d.psPass2->setShaderResourceBindings(d.srb);
+ d.psPass2->setRenderPassDescriptor(m_rp);
+ d.psPass2->create();
+}
+
+void Window::customRelease()
+{
+ qDeleteAll(d.releasePool);
+ d.releasePool.clear();
+}
+
+void Window::customRender()
+{
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiResourceUpdateBatch *u = nullptr;
+ if (d.initialUpdates) {
+ u = d.initialUpdates;
+ d.initialUpdates = nullptr;
+ }
+
+ char *p = d.ubuf->beginFullDynamicBufferUpdateForCurrentFrame();
+ QMatrix4x4 mvp = m_proj;
+ mvp.rotate(d.rot, 1, 1, 0);
+ mvp.scale(0.5f);
+
+ memcpy(p, mvp.constData(), 64);
+ const float color[] = { 1.0f, 0.0f, 0.0f };
+ memcpy(p + 64, color, 3 * sizeof(float));
+
+ static const size_t pass2Ofs = m_r->ubufAligned(UBUF_SIZE);
+ mvp.scale(OUTLINE_SIZE);
+ memcpy(p + pass2Ofs, mvp.constData(), 64);
+ const float pass2Color[] = { 0.0f, 0.0f, 1.0f };
+ memcpy(p + pass2Ofs + 64, pass2Color, 3 * sizeof(float));
+
+ d.ubuf->endFullDynamicBufferUpdateForCurrentFrame();
+
+ const QRhiCommandBuffer::VertexInput vbufBinding[] = {
+ { d.vbuf, 0 },
+ };
+
+ cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 }, u, QRhiCommandBuffer::DoNotTrackResourcesForCompute);
+
+ cb->setGraphicsPipeline(d.psPass1);
+ cb->setViewport({ 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) });
+ QRhiCommandBuffer::DynamicOffset pass1DynOffset = { 0, 0 };
+ cb->setShaderResources(d.srb, 1, &pass1DynOffset);
+ cb->setVertexInput(0, 1, vbufBinding);
+ cb->setStencilRef(1);
+ cb->draw(36);
+
+ cb->setGraphicsPipeline(d.psPass2);
+ QRhiCommandBuffer::DynamicOffset pass2DynOffset = { 0, m_r->ubufAligned(UBUF_SIZE) };
+ cb->setShaderResources(d.srb, 1, &pass2DynOffset);
+ cb->setVertexInput(0, 1, vbufBinding);
+ cb->setStencilRef(1);
+ cb->draw(36);
+
+ cb->endPass();
+
+ d.rot += 1;
+}
diff --git a/tests/manual/rhi/stereo/CMakeLists.txt b/tests/manual/rhi/stereo/CMakeLists.txt
new file mode 100644
index 0000000000..329be75f42
--- /dev/null
+++ b/tests/manual/rhi/stereo/CMakeLists.txt
@@ -0,0 +1,34 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## stereo Binary:
+#####################################################################
+
+qt_internal_add_manual_test(stereo
+ SOURCES
+ main.cpp
+ window.cpp window.h
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
+
+# Resources:
+set_source_files_properties("../shared/color.frag.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "color.frag.qsb"
+)
+set_source_files_properties("../shared/color.vert.qsb"
+ PROPERTIES QT_RESOURCE_ALIAS "color.vert.qsb"
+)
+set(stereo_resource_files
+ "../shared/color.frag.qsb"
+ "../shared/color.vert.qsb"
+)
+
+qt_internal_add_resource(stereo "stereo"
+ PREFIX
+ "/"
+ FILES
+ ${stereo_resource_files}
+)
diff --git a/tests/manual/rhi/stereo/main.cpp b/tests/manual/rhi/stereo/main.cpp
new file mode 100644
index 0000000000..cae25c8d24
--- /dev/null
+++ b/tests/manual/rhi/stereo/main.cpp
@@ -0,0 +1,36 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+// This is a demo showing stereoscopic rendering.
+// For now, the backend is hardcoded to be OpenGL, because that's the only
+// supported backend.
+
+#include <QGuiApplication>
+#include <QCommandLineParser>
+#include "window.h"
+
+int main(int argc, char **argv)
+{
+ QGuiApplication app(argc, argv);
+
+ QSurfaceFormat fmt;
+ fmt.setDepthBufferSize(24);
+ fmt.setStencilBufferSize(8);
+
+ // Request stereoscopic rendering support with left/right buffers
+ fmt.setStereo(true);
+
+ QSurfaceFormat::setDefaultFormat(fmt);
+
+ Window w{QRhi::Vulkan};
+ w.resize(1280, 720);
+ w.setTitle(QCoreApplication::applicationName());
+ w.show();
+
+ int ret = app.exec();
+
+ if (w.handle())
+ w.releaseSwapChain();
+
+ return ret;
+}
diff --git a/tests/manual/rhi/stereo/stereo.pro b/tests/manual/rhi/stereo/stereo.pro
new file mode 100644
index 0000000000..524c83a7f1
--- /dev/null
+++ b/tests/manual/rhi/stereo/stereo.pro
@@ -0,0 +1,12 @@
+TEMPLATE = app
+CONFIG += console
+QT += gui-private
+
+SOURCES = \
+ main.cpp \
+ window.cpp
+
+HEADERS = \
+ window.h
+
+RESOURCES = stereo.qrc
diff --git a/tests/manual/rhi/stereo/stereo.qrc b/tests/manual/rhi/stereo/stereo.qrc
new file mode 100644
index 0000000000..8cec4fa9ec
--- /dev/null
+++ b/tests/manual/rhi/stereo/stereo.qrc
@@ -0,0 +1,6 @@
+<!DOCTYPE RCC><RCC version="1.0">
+<qresource>
+ <file alias="color.vert.qsb">../shared/color.vert.qsb</file>
+ <file alias="color.frag.qsb">../shared/color.frag.qsb</file>
+</qresource>
+</RCC>
diff --git a/tests/manual/rhi/stereo/window.cpp b/tests/manual/rhi/stereo/window.cpp
new file mode 100644
index 0000000000..18e1ecc409
--- /dev/null
+++ b/tests/manual/rhi/stereo/window.cpp
@@ -0,0 +1,313 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "window.h"
+#include <QPlatformSurfaceEvent>
+#include <QTimer>
+#include <QFile>
+#include <rhi/qshader.h>
+#include "../shared/cube.h"
+
+Window::Window(QRhi::Implementation graphicsApi)
+ :m_graphicsApi(graphicsApi)
+{
+ switch (graphicsApi) {
+ default:
+ case QRhi::OpenGLES2:
+ setSurfaceType(OpenGLSurface);
+ break;
+ case QRhi::Vulkan:
+ instance.setLayers({ "VK_LAYER_KHRONOS_validation" });
+ instance.create();
+ setVulkanInstance(&instance);
+ setSurfaceType(VulkanSurface);
+ break;
+ case QRhi::D3D11:
+ case QRhi::D3D12:
+ setSurfaceType(Direct3DSurface);
+ break;
+ }
+}
+
+void Window::exposeEvent(QExposeEvent *)
+{
+ if (isExposed() && !m_running) {
+ m_running = true;
+ init();
+ resizeSwapChain();
+ }
+
+ const QSize surfaceSize = m_hasSwapChain ? m_sc->surfacePixelSize() : QSize();
+ if ((!isExposed() || (m_hasSwapChain && surfaceSize.isEmpty())) && m_running && !m_notExposed)
+ m_notExposed = true;
+
+ if (isExposed() && m_running && m_notExposed && !surfaceSize.isEmpty()) {
+ m_notExposed = false;
+ m_newlyExposed = true;
+ }
+
+ if (isExposed() && !surfaceSize.isEmpty())
+ render();
+}
+
+bool Window::event(QEvent *e)
+{
+ switch (e->type()) {
+ case QEvent::UpdateRequest:
+ render();
+ break;
+
+ case QEvent::PlatformSurface:
+ if (static_cast<QPlatformSurfaceEvent *>(e)->surfaceEventType() == QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed)
+ releaseSwapChain();
+ break;
+
+ default:
+ break;
+ }
+
+ return QWindow::event(e);
+}
+
+void Window::init()
+{
+ QRhi::Flags rhiFlags = QRhi::EnableDebugMarkers;
+
+ switch (m_graphicsApi) {
+ case QRhi::Vulkan:
+ {
+ QRhiVulkanInitParams params;
+ params.window = this;
+ params.inst = vulkanInstance();
+ m_rhi.reset(QRhi::create(QRhi::Vulkan, &params, rhiFlags));
+ break;
+ }
+ case QRhi::Null:
+ case QRhi::Metal:
+ case QRhi::OpenGLES2:
+ {
+ m_fallbackSurface.reset(QRhiGles2InitParams::newFallbackSurface());
+ QRhiGles2InitParams params;
+ params.fallbackSurface = m_fallbackSurface.get();
+ params.window = this;
+ m_rhi.reset(QRhi::create(QRhi::OpenGLES2, &params, rhiFlags));
+ break;
+ }
+#ifdef Q_OS_WIN
+ case QRhi::D3D11:
+ {
+ QRhiD3D11InitParams params;
+ m_rhi.reset(QRhi::create(QRhi::D3D11, &params, rhiFlags));
+ break;
+ }
+ case QRhi::D3D12:
+ {
+ QRhiD3D12InitParams params;
+ params.enableDebugLayer = true;
+ m_rhi.reset(QRhi::create(QRhi::D3D12, &params, rhiFlags));
+ break;
+ }
+#endif
+ default:
+ break;
+ }
+
+ m_sc.reset(m_rhi->newSwapChain());
+ m_ds.reset(m_rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil,
+ QSize(),
+ 1,
+ QRhiRenderBuffer::UsedWithSwapChainOnly));
+ m_sc->setWindow(this);
+ m_sc->setDepthStencil(m_ds.get());
+ m_rp.reset(m_sc->newCompatibleRenderPassDescriptor());
+ m_sc->setRenderPassDescriptor(m_rp.get());
+
+ m_vbuf.reset(m_rhi->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(cube)));
+ m_vbuf->setName(QByteArrayLiteral("vbuf"));
+ m_vbuf->create();
+ m_vbufReady = false;
+
+ m_ubuf.reset(m_rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64 + 4));
+ m_ubuf->setName(QByteArrayLiteral("Left eye"));
+ m_ubuf->create();
+
+ m_srb.reset(m_rhi->newShaderResourceBindings());
+ m_srb->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage,
+ m_ubuf.get())
+ });
+ m_srb->create();
+
+
+ m_ubuf2.reset(m_rhi->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64 + 4));
+ m_ubuf2->setName(QByteArrayLiteral("Right eye"));
+ m_ubuf2->create();
+
+ m_srb2.reset(m_rhi->newShaderResourceBindings());
+ m_srb2->setBindings({
+ QRhiShaderResourceBinding::uniformBuffer(0, QRhiShaderResourceBinding::VertexStage | QRhiShaderResourceBinding::FragmentStage,
+ m_ubuf2.get())
+ });
+ m_srb2->create();
+
+ m_ps.reset(m_rhi->newGraphicsPipeline());
+
+ QRhiGraphicsPipeline::TargetBlend premulAlphaBlend;
+ premulAlphaBlend.enable = true;
+ m_ps->setTargetBlends({ premulAlphaBlend });
+
+ const QShader vs = getShader(QLatin1String(":/color.vert.qsb"));
+ if (!vs.isValid())
+ qFatal("Failed to load shader pack (vertex)");
+ const QShader fs = getShader(QLatin1String(":/color.frag.qsb"));
+ if (!fs.isValid())
+ qFatal("Failed to load shader pack (fragment)");
+
+ m_ps->setShaderStages({
+ { QRhiShaderStage::Vertex, vs },
+ { QRhiShaderStage::Fragment, fs }
+ });
+
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({
+ { 3 * sizeof(float) },
+ { 2 * sizeof(float) }
+ });
+ inputLayout.setAttributes({
+ { 0, 0, QRhiVertexInputAttribute::Float3, 0 },
+ { 1, 1, QRhiVertexInputAttribute::Float2, 0 }
+ });
+
+ m_ps->setVertexInputLayout(inputLayout);
+ m_ps->setShaderResourceBindings(m_srb.get());
+ m_ps->setRenderPassDescriptor(m_rp.get());
+
+ m_ps->create();
+
+ m_ps->setDepthTest(true);
+ m_ps->setDepthWrite(true);
+ m_ps->setDepthOp(QRhiGraphicsPipeline::Less);
+
+ m_ps->setCullMode(QRhiGraphicsPipeline::Back);
+ m_ps->setFrontFace(QRhiGraphicsPipeline::CCW);
+}
+
+void Window::resizeSwapChain()
+{
+ m_hasSwapChain = m_sc->createOrResize(); // also handles m_ds
+
+ const QSize outputSize = m_sc->currentPixelSize();
+ m_proj = m_rhi->clipSpaceCorrMatrix();
+ m_proj.perspective(45.0f, outputSize.width() / (float) outputSize.height(), 0.01f, 1000.0f);
+ m_proj.translate(0, 0, -4);
+}
+
+void Window::releaseSwapChain()
+{
+ if (m_hasSwapChain) {
+ m_hasSwapChain = false;
+ m_sc->destroy();
+ }
+}
+
+void Window::render()
+{
+ if (!m_hasSwapChain || m_notExposed)
+ return;
+
+ if (m_sc->currentPixelSize() != m_sc->surfacePixelSize() || m_newlyExposed) {
+ resizeSwapChain();
+ if (!m_hasSwapChain)
+ return;
+ m_newlyExposed = false;
+ }
+
+ QRhi::FrameOpResult r = m_rhi->beginFrame(m_sc.get());
+ if (r == QRhi::FrameOpSwapChainOutOfDate) {
+ resizeSwapChain();
+ if (!m_hasSwapChain)
+ return;
+ r = m_rhi->beginFrame(m_sc.get());
+ }
+ if (r != QRhi::FrameOpSuccess) {
+ qDebug("beginFrame failed with %d, retry", r);
+ requestUpdate();
+ return;
+ }
+
+ recordFrame();
+
+ m_rhi->endFrame(m_sc.get());
+
+ QTimer::singleShot(0, this, [this] { render(); });
+}
+
+QShader Window::getShader(const QString &name)
+{
+ QFile f(name);
+ if (f.open(QIODevice::ReadOnly))
+ return QShader::fromSerialized(f.readAll());
+
+ return QShader();
+}
+
+// called once per frame
+void Window::recordFrame()
+{
+ QRhiResourceUpdateBatch *u = m_rhi->nextResourceUpdateBatch();
+ if (!m_vbufReady) {
+ m_vbufReady = true;
+ u->uploadStaticBuffer(m_vbuf.get(), cube);
+ }
+
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+
+ const QColor clearColor = QColor::fromRgbF(0.15f, 0.15f, 0.15f, 1.0f);
+ const QRhiDepthStencilClearValue depthStencil = { 1.0f, 0 };
+ const QRhiViewport viewPort = { 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) };
+ const QRhiCommandBuffer::VertexInput vbufBindings[] = {
+ { m_vbuf.get(), 0 },
+ { m_vbuf.get(), quint32(36 * 3 * sizeof(float)) }
+ };
+
+ QMatrix4x4 mvp = m_rhi->clipSpaceCorrMatrix();
+ mvp.perspective(45.0f, outputSizeInPixels.width() / (float) outputSizeInPixels.height(), 0.01f, 100.0f);
+
+ m_translation += m_translationDir * 0.05f;
+ if (m_translation < -10.0f || m_translation > -5.0f) {
+ m_translationDir *= -1;
+ m_translation = qBound(-10.0f, m_translation, -5.0f);
+ }
+ mvp.translate(0, 0, m_translation);
+ m_rotation += .5f;
+ mvp.rotate(m_rotation, 0, 1, 0);
+ u->updateDynamicBuffer(m_ubuf.get(), 0, 64, mvp.constData());
+
+ float opacity = 1.0f;
+ u->updateDynamicBuffer(m_ubuf.get(), 64, 4, &opacity);
+
+ QMatrix4x4 mvp2 = mvp;
+ mvp2.translate(-2.f, 0, 0);
+
+ u->updateDynamicBuffer(m_ubuf2.get(), 0, 64, mvp2.constData());
+ u->updateDynamicBuffer(m_ubuf2.get(), 64, 4, &opacity);
+
+ cb->resourceUpdate(u);
+
+ cb->beginPass(m_sc->currentFrameRenderTarget(QRhiSwapChain::LeftBuffer), clearColor, depthStencil);
+ cb->setGraphicsPipeline(m_ps.get());
+ cb->setViewport(viewPort);
+ cb->setShaderResources(m_srb.get());
+ cb->setVertexInput(0, 2, vbufBindings);
+ cb->draw(36);
+ cb->endPass();
+
+ cb->beginPass(m_sc->currentFrameRenderTarget(QRhiSwapChain::RightBuffer), clearColor, depthStencil);
+ cb->setGraphicsPipeline(m_ps.get());
+ cb->setViewport(viewPort);
+ cb->setShaderResources(m_srb2.get());
+ cb->setVertexInput(0, 2, vbufBindings);
+ cb->draw(36);
+ cb->endPass();
+}
diff --git a/tests/manual/rhi/stereo/window.h b/tests/manual/rhi/stereo/window.h
new file mode 100644
index 0000000000..0a175e31a0
--- /dev/null
+++ b/tests/manual/rhi/stereo/window.h
@@ -0,0 +1,58 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include <QWindow>
+#include <QOffscreenSurface>
+#include <rhi/qrhi.h>
+
+class Window : public QWindow
+{
+public:
+ Window(QRhi::Implementation graphicsApi);
+
+ void releaseSwapChain();
+
+protected:
+ QVulkanInstance instance;
+ std::unique_ptr<QOffscreenSurface> m_fallbackSurface;
+ std::unique_ptr<QRhi> m_rhi;
+ std::unique_ptr<QRhiSwapChain> m_sc;
+ std::unique_ptr<QRhiRenderBuffer> m_ds;
+ std::unique_ptr<QRhiRenderPassDescriptor> m_rp;
+
+ QRhi::Implementation m_graphicsApi;
+ bool m_hasSwapChain = false;
+ QMatrix4x4 m_proj;
+
+private:
+ void init();
+ void resizeSwapChain();
+ void render();
+ void recordFrame();
+
+ void exposeEvent(QExposeEvent *) override;
+ bool event(QEvent *) override;
+
+ bool m_running = false;
+ bool m_notExposed = false;
+ bool m_newlyExposed = false;
+
+ QShader getShader(const QString &name);
+
+ std::unique_ptr<QRhiBuffer> m_vbuf;
+ bool m_vbufReady = false;
+ std::unique_ptr<QRhiBuffer> m_ubuf;
+ std::unique_ptr<QRhiBuffer> m_ubuf2;
+ std::unique_ptr<QRhiShaderResourceBindings> m_srb;
+ std::unique_ptr<QRhiShaderResourceBindings> m_srb2;
+ std::unique_ptr<QRhiGraphicsPipeline> m_ps;
+
+ float m_rotation = 0;
+ float m_translation = -5;
+ int m_translationDir = -1;
+};
+
+#endif
diff --git a/tests/manual/rhi/tessellation/CMakeLists.txt b/tests/manual/rhi/tessellation/CMakeLists.txt
index 74752dbd96..bdb3d8d2f7 100644
--- a/tests/manual/rhi/tessellation/CMakeLists.txt
+++ b/tests/manual/rhi/tessellation/CMakeLists.txt
@@ -1,8 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_manual_test(tessellation
GUI
SOURCES
tessellation.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
diff --git a/tests/manual/rhi/tessellation/buildshaders.bat b/tests/manual/rhi/tessellation/buildshaders.bat
index c44916067d..bc992dc28c 100644
--- a/tests/manual/rhi/tessellation/buildshaders.bat
+++ b/tests/manual/rhi/tessellation/buildshaders.bat
@@ -1,4 +1,6 @@
-qsb --glsl 320es,410 test.vert -o test.vert.qsb
-qsb --glsl 320es,410 test.tesc -o test.tesc.qsb
-qsb --glsl 320es,410 test.tese -o test.tese.qsb
-qsb --glsl 320es,410 test.frag -o test.frag.qsb
+qsb --glsl 320es,410 --hlsl 50 --msl 12 --msltess test.vert -o test.vert.qsb
+qsb --glsl 320es,410 --msl 12 --tess-mode triangles test.tesc -o test.tesc.qsb
+qsb -r hlsl,50,test_hull.hlsl test.tesc.qsb
+qsb --glsl 320es,410 --msl 12 --tess-vertex-count 3 test.tese -o test.tese.qsb
+qsb -r hlsl,50,test_domain.hlsl test.tese.qsb
+qsb --glsl 320es,410 --hlsl 50 --msl 12 test.frag -o test.frag.qsb
diff --git a/tests/manual/rhi/tessellation/tessellation.cpp b/tests/manual/rhi/tessellation/tessellation.cpp
index e8a031a1cf..a50ddeeeb2 100644
--- a/tests/manual/rhi/tessellation/tessellation.cpp
+++ b/tests/manual/rhi/tessellation/tessellation.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
@@ -56,9 +9,13 @@ static const float tri[] = {
0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f,
};
+static const bool INDEXED = false;
+static const quint32 indices[] = { 0, 1, 2 };
+
struct {
QVector<QRhiResource *> releasePool;
QRhiBuffer *vbuf = nullptr;
+ QRhiBuffer *ibuf = nullptr;
QRhiBuffer *ubuf = nullptr;
QRhiShaderResourceBindings *srb = nullptr;
QRhiGraphicsPipeline *ps = nullptr;
@@ -76,6 +33,12 @@ void Window::customInit()
d.vbuf->create();
d.releasePool << d.vbuf;
+ if (INDEXED) {
+ d.ibuf = m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::IndexBuffer, sizeof(indices));
+ d.ibuf->create();
+ d.releasePool << d.ibuf;
+ }
+
d.ubuf = m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, 64 + 4 + 4);
d.ubuf->create();
d.releasePool << d.ubuf;
@@ -100,6 +63,7 @@ void Window::customInit()
});
d.ps->setCullMode(QRhiGraphicsPipeline::Back);
+ d.ps->setPolygonMode(QRhiGraphicsPipeline::Line);
d.ps->setDepthTest(true);
d.ps->setDepthWrite(true);
QRhiVertexInputLayout inputLayout;
@@ -117,8 +81,12 @@ void Window::customInit()
d.initialUpdates = m_r->nextResourceUpdateBatch();
d.initialUpdates->uploadStaticBuffer(d.vbuf, tri);
+
const float amplitude = 0.5f;
d.initialUpdates->updateDynamicBuffer(d.ubuf, 68, 4, &amplitude);
+
+ if (INDEXED)
+ d.initialUpdates->uploadStaticBuffer(d.ibuf, indices);
}
void Window::customRelease()
@@ -142,14 +110,20 @@ void Window::customRender()
u->updateDynamicBuffer(d.ubuf, 0, 64, d.winProj.constData());
}
u->updateDynamicBuffer(d.ubuf, 64, 4, &d.time);
- d.time += 0.1f;
+ d.time += 0.01f;
cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 }, u);
cb->setGraphicsPipeline(d.ps);
cb->setViewport({ 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) });
cb->setShaderResources();
QRhiCommandBuffer::VertexInput vbufBinding(d.vbuf, 0);
- cb->setVertexInput(0, 1, &vbufBinding);
- cb->draw(3);
+ if (INDEXED) {
+ cb->setVertexInput(0, 1, &vbufBinding, d.ibuf, 0, QRhiCommandBuffer::IndexUInt32);
+ cb->drawIndexed(3);
+ } else {
+ cb->setVertexInput(0, 1, &vbufBinding);
+ cb->draw(3);
+ }
+
cb->endPass();
}
diff --git a/tests/manual/rhi/tessellation/test.frag.qsb b/tests/manual/rhi/tessellation/test.frag.qsb
index d680373221..4d49ede3ff 100644
--- a/tests/manual/rhi/tessellation/test.frag.qsb
+++ b/tests/manual/rhi/tessellation/test.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/tessellation/test.tesc b/tests/manual/rhi/tessellation/test.tesc
index 9cbf9c12c7..54937967fa 100644
--- a/tests/manual/rhi/tessellation/test.tesc
+++ b/tests/manual/rhi/tessellation/test.tesc
@@ -6,6 +6,10 @@ layout(location = 0) in vec3 inColor[];
layout(location = 0) out vec3 outColor[];
+// these serve no purpose, just exist to test per-patch outputs
+layout(location = 1) patch out vec3 stuff;
+layout(location = 2) patch out float more_stuff;
+
void main()
{
if (gl_InvocationID == 0) {
@@ -18,4 +22,6 @@ void main()
gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position;
outColor[gl_InvocationID] = inColor[gl_InvocationID];
+ stuff = vec3(1.0);
+ more_stuff = 1.0;
}
diff --git a/tests/manual/rhi/tessellation/test.tesc.qsb b/tests/manual/rhi/tessellation/test.tesc.qsb
index fc9dfbaea1..064e26040a 100644
--- a/tests/manual/rhi/tessellation/test.tesc.qsb
+++ b/tests/manual/rhi/tessellation/test.tesc.qsb
Binary files differ
diff --git a/tests/manual/rhi/tessellation/test.tese b/tests/manual/rhi/tessellation/test.tese
index c82344af8e..c50230f852 100644
--- a/tests/manual/rhi/tessellation/test.tese
+++ b/tests/manual/rhi/tessellation/test.tese
@@ -6,6 +6,10 @@ layout(location = 0) in vec3 inColor[];
layout(location = 0) out vec3 outColor;
+// these serve no purpose, just exist to test per-patch outputs
+layout(location = 1) patch in vec3 stuff;
+layout(location = 2) patch in float more_stuff;
+
layout(std140, binding = 0) uniform buf {
mat4 mvp;
float time;
@@ -14,7 +18,10 @@ layout(std140, binding = 0) uniform buf {
void main()
{
- gl_Position = mvp * ((gl_TessCoord.x * gl_in[0].gl_Position) + (gl_TessCoord.y * gl_in[1].gl_Position) + (gl_TessCoord.z * gl_in[2].gl_Position));
- gl_Position.x += sin(time + gl_Position.y) * amplitude;
- outColor = gl_TessCoord.x * inColor[0] + gl_TessCoord.y * inColor[1] + gl_TessCoord.z * inColor[2];
+ vec4 pos = (gl_TessCoord.x * gl_in[0].gl_Position) + (gl_TessCoord.y * gl_in[1].gl_Position) + (gl_TessCoord.z * gl_in[2].gl_Position);
+ gl_Position = mvp * pos;
+ gl_Position.x += sin(time + pos.y) * amplitude;
+ outColor = gl_TessCoord.x * inColor[0] + gl_TessCoord.y * inColor[1] + gl_TessCoord.z * inColor[2]
+ // these are all 1.0, just here to exercise the shader generation and the runtime pipeline setup
+ * stuff.x * more_stuff * (gl_TessLevelOuter[0] / 4.0) * (gl_TessLevelInner[0] / 4.0);
}
diff --git a/tests/manual/rhi/tessellation/test.tese.qsb b/tests/manual/rhi/tessellation/test.tese.qsb
index fe99cd5001..a6caab67c3 100644
--- a/tests/manual/rhi/tessellation/test.tese.qsb
+++ b/tests/manual/rhi/tessellation/test.tese.qsb
Binary files differ
diff --git a/tests/manual/rhi/tessellation/test.vert.qsb b/tests/manual/rhi/tessellation/test.vert.qsb
index 18f2e7b297..39734b6d5d 100644
--- a/tests/manual/rhi/tessellation/test.vert.qsb
+++ b/tests/manual/rhi/tessellation/test.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/tessellation/test_domain.hlsl b/tests/manual/rhi/tessellation/test_domain.hlsl
new file mode 100644
index 0000000000..a9697d32cf
--- /dev/null
+++ b/tests/manual/rhi/tessellation/test_domain.hlsl
@@ -0,0 +1,38 @@
+struct Input
+{
+ float edges[3] : SV_TessFactor;
+ float inside : SV_InsideTessFactor;
+};
+
+struct PatchInput
+{
+ float3 position : POSITION;
+ float3 color : COLOR;
+};
+
+struct PixelInput
+{
+ float3 color : TEXCOORD0;
+ float4 position : SV_POSITION;
+};
+
+cbuffer buf : register(b0)
+{
+ row_major float4x4 mvp : packoffset(c0);
+ float time : packoffset(c4);
+ float amplitude : packoffset(c4.y);
+};
+
+[domain("tri")]
+PixelInput main(Input input, float3 uvwCoord : SV_DomainLocation, const OutputPatch<PatchInput, 3> patch)
+{
+ PixelInput output;
+
+ float3 vertexPosition = uvwCoord.x * patch[0].position + uvwCoord.y * patch[1].position + uvwCoord.z * patch[2].position;
+ output.position = mul(float4(vertexPosition, 1.0f), mvp);
+ output.position.x += sin(time + vertexPosition.y) * amplitude;
+
+ output.color = uvwCoord.x * patch[0].color + uvwCoord.y * patch[1].color + uvwCoord.z * patch[2].color;
+
+ return output;
+}
diff --git a/tests/manual/rhi/tessellation/test_hull.hlsl b/tests/manual/rhi/tessellation/test_hull.hlsl
new file mode 100644
index 0000000000..3d09307159
--- /dev/null
+++ b/tests/manual/rhi/tessellation/test_hull.hlsl
@@ -0,0 +1,40 @@
+struct Input
+{
+ float3 color : TEXCOORD0;
+ float4 position : SV_Position;
+};
+
+struct Output
+{
+ float3 position : POSITION;
+ float3 color : COLOR;
+};
+
+struct ConstantData
+{
+ float edges[3] : SV_TessFactor;
+ float inside : SV_InsideTessFactor;
+};
+
+ConstantData patchConstFunc(InputPatch<Input, 3> ip, uint PatchID : SV_PrimitiveID )
+{
+ ConstantData d;
+ d.edges[0] = 4.0;
+ d.edges[1] = 4.0;
+ d.edges[2] = 4.0;
+ d.inside = 4.0;
+ return d;
+}
+
+[domain("tri")]
+[partitioning("integer")]
+[outputtopology("triangle_cw")]
+[outputcontrolpoints(3)]
+[patchconstantfunc("patchConstFunc")]
+Output main(InputPatch<Input, 3> patch, uint pointId : SV_OutputControlPointID, uint patchId : SV_PrimitiveID)
+{
+ Output output;
+ output.position = patch[pointId].position;
+ output.color = patch[pointId].color;
+ return output;
+}
diff --git a/tests/manual/rhi/tex1d/CMakeLists.txt b/tests/manual/rhi/tex1d/CMakeLists.txt
new file mode 100644
index 0000000000..f456b35d56
--- /dev/null
+++ b/tests/manual/rhi/tex1d/CMakeLists.txt
@@ -0,0 +1,23 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(tex1d
+ GUI
+ SOURCES
+ tex1d.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::GuiPrivate
+)
+
+set(tex1d_resource_files
+ "texture1d.vert.qsb"
+ "texture1d.frag.qsb"
+)
+
+qt_internal_add_resource(tex1d "tex1d"
+ PREFIX
+ "/"
+ FILES
+ ${tex1d_resource_files}
+)
diff --git a/tests/manual/rhi/tex1d/buildshaders.bat b/tests/manual/rhi/tex1d/buildshaders.bat
new file mode 100644
index 0000000000..37934cf362
--- /dev/null
+++ b/tests/manual/rhi/tex1d/buildshaders.bat
@@ -0,0 +1,2 @@
+qsb --glsl "120,150,300 es" --hlsl 50 --msl 12 -c texture1d.vert -o texture1d.vert.qsb
+qsb --glsl "120,150,300 es" --hlsl 50 --msl 12 -c texture1d.frag -o texture1d.frag.qsb
diff --git a/tests/manual/rhi/tex1d/tex1d.cpp b/tests/manual/rhi/tex1d/tex1d.cpp
new file mode 100644
index 0000000000..7791c840ca
--- /dev/null
+++ b/tests/manual/rhi/tex1d/tex1d.cpp
@@ -0,0 +1,625 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "../shared/examplefw.h"
+#include <QImage>
+#include <QPainter>
+#include <functional>
+
+static float quadVertexData[] = { // Y up, CCW
+ -0.5f, 0.5f, 0.0f, 0.0f, -0.5f, -0.5f, 0.0f, 1.0f,
+ 0.5f, -0.5f, 1.0f, 1.0f, 0.5f, 0.5f, 1.0f, 0.0f
+};
+
+static quint16 quadIndexData[] = { 0, 1, 2, 0, 2, 3 };
+
+struct
+{
+ QList<QRhiResource *> releasePool;
+ QRhiResourceUpdateBatch *initialUpdates = nullptr;
+
+ QRhiBuffer *vertexBuffer = nullptr;
+ QRhiBuffer *indexBuffer = nullptr;
+ QRhiBuffer *uniformBuffer = nullptr;
+ QRhiGraphicsPipeline *ps = nullptr;
+ QRhiShaderResourceBindings *srb = nullptr;
+ int index = 0;
+} d;
+
+void readBackCompleted(QRhiReadbackResult *result, const QByteArray &expected)
+{
+ if (result->data != expected) {
+ qFatal("texture readback data did not match expected values");
+ }
+
+ delete result;
+}
+
+void Window::customInit()
+{
+ if (!m_r->isFeatureSupported(QRhi::Feature::OneDimensionalTextures))
+ qFatal("1D textures are not supported");
+
+ const bool mipmaps = m_r->isFeatureSupported(QRhi::Feature::OneDimensionalTextureMipmaps);
+
+ d.initialUpdates = m_r->nextResourceUpdateBatch();
+
+ QRhiTexture *texture = nullptr;
+ QRhiReadbackResult *readbackResult = nullptr;
+ QRhiReadbackDescription readbackDescription;
+ QByteArray data;
+
+ QList<QRhiShaderResourceBinding> shaderResouceBindings;
+
+ //
+ // Create vertex buffer
+ //
+ d.vertexBuffer =
+ m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::VertexBuffer, sizeof(quadVertexData));
+ d.vertexBuffer->create();
+ d.releasePool << d.vertexBuffer;
+
+ d.initialUpdates->uploadStaticBuffer(d.vertexBuffer, 0, sizeof(quadVertexData), quadVertexData);
+
+ //
+ // Create index buffer
+ //
+ d.indexBuffer =
+ m_r->newBuffer(QRhiBuffer::Immutable, QRhiBuffer::IndexBuffer, sizeof(quadIndexData));
+ d.indexBuffer->create();
+ d.releasePool << d.indexBuffer;
+
+ d.initialUpdates->uploadStaticBuffer(d.indexBuffer, quadIndexData);
+
+ //
+ // Create uniform buffer
+ //
+ d.uniformBuffer =
+ m_r->newBuffer(QRhiBuffer::Dynamic, QRhiBuffer::UniformBuffer, m_r->ubufAligned(4));
+ d.uniformBuffer->create();
+ d.releasePool << d.uniformBuffer;
+
+ shaderResouceBindings.append(QRhiShaderResourceBinding::uniformBuffer(
+ 0, QRhiShaderResourceBinding::StageFlag::FragmentStage, d.uniformBuffer, 0, 4));
+
+ //
+ // Create samplers
+ //
+ QRhiSampler *samplerNearest = m_r->newSampler(
+ QRhiSampler::Filter::Nearest, QRhiSampler::Filter::Nearest,
+ QRhiSampler::Filter::Nearest, QRhiSampler::AddressMode::ClampToEdge,
+ QRhiSampler::AddressMode::ClampToEdge, QRhiSampler::AddressMode::ClampToEdge);
+ d.releasePool << samplerNearest;
+ samplerNearest->create();
+
+ QRhiSampler *samplerNone = m_r->newSampler(
+ QRhiSampler::Filter::Nearest, QRhiSampler::Filter::Nearest, QRhiSampler::Filter::None,
+ QRhiSampler::AddressMode::ClampToEdge, QRhiSampler::AddressMode::ClampToEdge,
+ QRhiSampler::AddressMode::ClampToEdge);
+ d.releasePool << samplerNone;
+ samplerNone->create();
+
+ //
+ // 1D texture with generated mipmaps. Contains grey colormap
+ //
+ texture = m_r->newTexture(QRhiTexture::Format::RGBA8, 8, 0, 0, 1,
+ QRhiTexture::Flag::OneDimensional
+ | QRhiTexture::Flag::UsedAsTransferSource
+ | (mipmaps ? (QRhiTexture::Flag::MipMapped
+ | QRhiTexture::Flag::UsedWithGenerateMips)
+ : QRhiTexture::Flag(0)));
+ d.releasePool << texture;
+ texture->create();
+
+ shaderResouceBindings.append(QRhiShaderResourceBinding::sampledTexture(
+ 1, QRhiShaderResourceBinding::FragmentStage, texture,
+ texture->flags().testFlag(QRhiTexture::Flag::MipMapped) ? samplerNearest
+ : samplerNone));
+
+ for (int i = 0; i < 8; ++i) {
+ data.append(char(i) * 32);
+ data.append(char(i) * 32);
+ data.append(char(i) * 32);
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture, QRhiTextureUploadEntry(0, 0, QRhiTextureSubresourceUploadDescription(data)));
+ if (mipmaps)
+ d.initialUpdates->generateMips(texture);
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(0);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ //
+ // 1D texture array with generated mipmaps. layer 0 contains red colormap, layer 1 contains
+ // green colormap
+ //
+ texture =
+ m_r->newTextureArray(QRhiTexture::RGBA8, 2, QSize(8, 0), 1,
+ QRhiTexture::Flag::TextureArray | QRhiTexture::Flag::OneDimensional
+ | QRhiTexture::Flag::UsedAsTransferSource
+ | (mipmaps ? (QRhiTexture::Flag::MipMapped
+ | QRhiTexture::Flag::UsedWithGenerateMips)
+ : QRhiTexture::Flag(0)));
+ d.releasePool << texture;
+ texture->create();
+
+ shaderResouceBindings.append(QRhiShaderResourceBinding::sampledTexture(
+ 2, QRhiShaderResourceBinding::FragmentStage, texture,
+ texture->flags().testFlag(QRhiTexture::Flag::MipMapped) ? samplerNearest
+ : samplerNone));
+
+ data.clear();
+ for (int i = 0; i < 8; ++i) {
+ data.append(char(i * 32));
+ data.append(char(0));
+ data.append(char(0));
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture, QRhiTextureUploadEntry(0, 0, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(0);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ data.clear();
+ for (int i = 0; i < 8; ++i) {
+ data.append(char(0));
+ data.append(char(i * 32));
+ data.append(char(0));
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture, QRhiTextureUploadEntry(1, 0, QRhiTextureSubresourceUploadDescription(data)));
+ if (mipmaps)
+ d.initialUpdates->generateMips(texture);
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(1);
+ readbackDescription.setLevel(0);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ //
+ // 1D texture with uploaded mipmaps. Contains yellow colormap
+ //
+ texture = m_r->newTexture(
+ QRhiTexture::Format::RGBA8, 8, 0, 0, 1,
+ QRhiTexture::Flag::OneDimensional | QRhiTexture::Flag::UsedAsTransferSource
+ | (mipmaps ? QRhiTexture::Flag::MipMapped : QRhiTexture::Flag(0)));
+ d.releasePool << texture;
+ texture->create();
+
+ shaderResouceBindings.append(QRhiShaderResourceBinding::sampledTexture(
+ 3, QRhiShaderResourceBinding::FragmentStage, texture,
+ texture->flags().testFlag(QRhiTexture::Flag::MipMapped) ? samplerNearest
+ : samplerNone));
+
+ data.clear();
+ for (int i = 0; i < 8; ++i) {
+ data.append(char(i * 32));
+ data.append(char(i * 32));
+ data.append(char(0));
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture, QRhiTextureUploadEntry(0, 0, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(0);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ QRhiTexture *textureSource = texture;
+ QByteArray textureCopyData = data.mid(data.size() / 2).append(data.mid(0, data.size() / 2));
+
+ if (mipmaps) {
+
+ data.clear();
+ for (int i = 0; i < 4; ++i) {
+ data.append(char(i * 64));
+ data.append(char(i * 64));
+ data.append(char(0));
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture,
+ QRhiTextureUploadEntry(0, 1, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(1);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ data.clear();
+ for (int i = 0; i < 2; ++i) {
+ data.append(char(i * 128));
+ data.append(char(i * 128));
+ data.append(char(0));
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture,
+ QRhiTextureUploadEntry(0, 2, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(2);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ data.clear();
+ data.append(char(128));
+ data.append(char(128));
+ data.append(char(0));
+ data.append(char(255));
+ d.initialUpdates->uploadTexture(
+ texture,
+ QRhiTextureUploadEntry(0, 3, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(3);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+ }
+
+ //
+ // 1D texture array with uploaded mipmaps. Layer 0 contains blue colormap, layer 1 contains
+ // magenta colormap
+ //
+ texture = m_r->newTextureArray(
+ QRhiTexture::Format::RGBA8, 2, QSize(8, 0), 1,
+ QRhiTexture::Flag::TextureArray | QRhiTexture::Flag::OneDimensional
+ | QRhiTexture::Flag::UsedAsTransferSource
+ | (mipmaps ? QRhiTexture::Flag::MipMapped : QRhiTexture::Flag(0)));
+ d.releasePool << texture;
+ texture->create();
+
+ shaderResouceBindings.append(QRhiShaderResourceBinding::sampledTexture(
+ 4, QRhiShaderResourceBinding::FragmentStage, texture,
+ texture->flags().testFlag(QRhiTexture::Flag::MipMapped) ? samplerNearest
+ : samplerNone));
+
+ data.clear();
+ for (int i = 0; i < 8; ++i) {
+ data.append(char(0));
+ data.append(char(0));
+ data.append(char(i * 32));
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture, QRhiTextureUploadEntry(0, 0, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(0);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ QRhiTexture *textureArraySource = texture;
+ QList<QByteArray> textureArrayCopyData;
+ textureArrayCopyData.append(data.mid(data.size() / 2).append(data.mid(0, data.size() / 2)));
+
+ if (mipmaps) {
+
+ data.clear();
+ for (int i = 0; i < 4; ++i) {
+ data.append(char(0));
+ data.append(char(0));
+ data.append(char(i * 64));
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture,
+ QRhiTextureUploadEntry(0, 1, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(1);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ data.clear();
+ for (int i = 0; i < 2; ++i) {
+ data.append(char(0));
+ data.append(char(0));
+ data.append(char(i * 128));
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture,
+ QRhiTextureUploadEntry(0, 2, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(2);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ data.clear();
+ data.append(char(0));
+ data.append(char(0));
+ data.append(char(128));
+ data.append(char(255));
+ d.initialUpdates->uploadTexture(
+ texture,
+ QRhiTextureUploadEntry(0, 3, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(3);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+ }
+
+ data.clear();
+ for (int i = 0; i < 8; ++i) {
+ data.append(char(i * 32));
+ data.append(char(0));
+ data.append(char(i * 32));
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture, QRhiTextureUploadEntry(1, 0, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(1);
+ readbackDescription.setLevel(0);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ textureArrayCopyData.append(data.mid(data.size() / 2).append(data.mid(0, data.size() / 2)));
+
+ if (mipmaps) {
+
+ data.clear();
+ for (int i = 0; i < 4; ++i) {
+ data.append(char(i * 64));
+ data.append(char(0));
+ data.append(char(i * 64));
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture,
+ QRhiTextureUploadEntry(1, 1, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(1);
+ readbackDescription.setLevel(1);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ data.clear();
+ for (int i = 0; i < 2; ++i) {
+ data.append(char(i * 128));
+ data.append(char(0));
+ data.append(char(i * 128));
+ data.append(char(255));
+ }
+ d.initialUpdates->uploadTexture(
+ texture,
+ QRhiTextureUploadEntry(1, 2, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(1);
+ readbackDescription.setLevel(2);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ data.clear();
+ data.append(char(128));
+ data.append(char(0));
+ data.append(char(128));
+ data.append(char(255));
+ d.initialUpdates->uploadTexture(
+ texture,
+ QRhiTextureUploadEntry(1, 3, QRhiTextureSubresourceUploadDescription(data)));
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, data);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(1);
+ readbackDescription.setLevel(3);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+ }
+
+ //
+ // 1D Texture loaded from image - contains rainbow colormap
+ //
+ QImage image(256, 1, QImage::Format_RGBA8888);
+ for (int i = 0; i < image.width(); ++i) {
+ float x = float(i) / float(image.width() - 1);
+ if (x < 2.0f / 5.0f) {
+ image.setPixelColor(i, 0, QColor::fromRgbF(1.0f, 5.0f / 2.0f * x, 0.0f));
+ } else if (x < 3.0f / 5.0f) {
+ image.setPixelColor(i, 0, QColor::fromRgbF(-5.0f * x + 3.0f, 1.0f, 0.0f));
+ } else if (x < 4.0f / 5.0f) {
+ image.setPixelColor(i, 0, QColor::fromRgbF(0.0f, -5.0f * x + 4.0f, 5.0f * x - 3.0f));
+ } else {
+ image.setPixelColor(i, 0, QColor::fromRgbF(10.0f / 3.0f * x - 8.0f / 3.0f, 0.0f, 1.0f));
+ }
+ }
+
+ texture = m_r->newTexture(QRhiTexture::Format::RGBA8, image.width(), 0, 0, 1,
+ QRhiTexture::Flag::OneDimensional);
+ d.releasePool << texture;
+ texture->create();
+
+ shaderResouceBindings.append(QRhiShaderResourceBinding::sampledTexture(
+ 5, QRhiShaderResourceBinding::FragmentStage, texture,
+ texture->flags().testFlag(QRhiTexture::Flag::MipMapped) ? samplerNearest
+ : samplerNone));
+
+ d.initialUpdates->uploadTexture(texture, image);
+
+ //
+ // 1D Texture copied
+ //
+ texture = m_r->newTexture(QRhiTexture::Format::RGBA8, 8, 0, 0, 1,
+ QRhiTexture::Flag::OneDimensional
+ | QRhiTexture::Flag::UsedAsTransferSource);
+ d.releasePool << texture;
+ texture->create();
+
+ shaderResouceBindings.append(QRhiShaderResourceBinding::sampledTexture(
+ 6, QRhiShaderResourceBinding::FragmentStage, texture,
+ texture->flags().testFlag(QRhiTexture::Flag::MipMapped) ? samplerNearest
+ : samplerNone));
+
+ QRhiTextureCopyDescription copyDescription;
+ copyDescription.setSourceLayer(0);
+ copyDescription.setSourceLevel(0);
+ copyDescription.setSourceTopLeft(QPoint(4, 0));
+ copyDescription.setDestinationLayer(0);
+ copyDescription.setDestinationLevel(0);
+ copyDescription.setDestinationTopLeft(QPoint(0, 0));
+ copyDescription.setPixelSize(QSize(4, 1));
+
+ d.initialUpdates->copyTexture(texture, textureSource, copyDescription);
+
+ copyDescription.setSourceTopLeft(QPoint(0, 0));
+ copyDescription.setDestinationTopLeft(QPoint(4, 0));
+
+ d.initialUpdates->copyTexture(texture, textureSource, copyDescription);
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed = std::bind(readBackCompleted, readbackResult, textureCopyData);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(0);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ //
+ // 1D Texture array copied
+ //
+ texture = m_r->newTextureArray(QRhiTexture::Format::RGBA8, 2, QSize(8, 0), 1,
+ QRhiTexture::Flag::OneDimensional
+ | QRhiTexture::Flag::UsedAsTransferSource);
+ d.releasePool << texture;
+ texture->create();
+
+ shaderResouceBindings.append(QRhiShaderResourceBinding::sampledTexture(
+ 7, QRhiShaderResourceBinding::FragmentStage, texture,
+ texture->flags().testFlag(QRhiTexture::Flag::MipMapped) ? samplerNearest
+ : samplerNone));
+
+ copyDescription.setSourceLayer(1);
+ copyDescription.setSourceLevel(0);
+ copyDescription.setSourceTopLeft(QPoint(4, 0));
+ copyDescription.setDestinationLayer(0);
+ copyDescription.setDestinationLevel(0);
+ copyDescription.setDestinationTopLeft(QPoint(0, 0));
+ copyDescription.setPixelSize(QSize(4, 1));
+ d.initialUpdates->copyTexture(texture, textureArraySource, copyDescription);
+
+ copyDescription.setSourceTopLeft(QPoint(0, 0));
+ copyDescription.setDestinationTopLeft(QPoint(4, 0));
+ d.initialUpdates->copyTexture(texture, textureArraySource, copyDescription);
+
+ copyDescription.setSourceLayer(0);
+ copyDescription.setDestinationLayer(1);
+ d.initialUpdates->copyTexture(texture, textureArraySource, copyDescription);
+
+ copyDescription.setSourceTopLeft(QPoint(4, 0));
+ copyDescription.setDestinationTopLeft(QPoint(0, 0));
+ d.initialUpdates->copyTexture(texture, textureArraySource, copyDescription);
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed =
+ std::bind(readBackCompleted, readbackResult, textureArrayCopyData[0]);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(1);
+ readbackDescription.setLevel(0);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ readbackResult = new QRhiReadbackResult;
+ readbackResult->completed =
+ std::bind(readBackCompleted, readbackResult, textureArrayCopyData[1]);
+ readbackDescription.setTexture(texture);
+ readbackDescription.setLayer(0);
+ readbackDescription.setLevel(0);
+ d.initialUpdates->readBackTexture(readbackDescription, readbackResult);
+
+ //
+ // Shader resource bindings
+ //
+ d.srb = m_r->newShaderResourceBindings();
+ d.releasePool << d.srb;
+ d.srb->setBindings(shaderResouceBindings.cbegin(), shaderResouceBindings.cend());
+ d.srb->create();
+
+ //
+ // Pipeline
+ //
+ d.ps = m_r->newGraphicsPipeline();
+ d.releasePool << d.ps;
+ d.ps->setShaderStages(
+ { { QRhiShaderStage::Vertex, getShader(QLatin1String(":/texture1d.vert.qsb")) },
+ { QRhiShaderStage::Fragment, getShader(QLatin1String(":/texture1d.frag.qsb")) } });
+
+ QRhiVertexInputLayout inputLayout;
+ inputLayout.setBindings({ { 4 * sizeof(float) } });
+ inputLayout.setAttributes(
+ { { 0, 0, QRhiVertexInputAttribute::Float2, 0 },
+ { 0, 1, QRhiVertexInputAttribute::Float2, quint32(2 * sizeof(float)) } });
+
+ d.ps->setVertexInputLayout(inputLayout);
+ d.ps->setShaderResourceBindings(d.srb);
+ d.ps->setRenderPassDescriptor(m_rp);
+ d.ps->create();
+}
+
+void Window::customRelease()
+{
+ qDeleteAll(d.releasePool);
+ d.releasePool.clear();
+}
+
+void Window::customRender()
+{
+ QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ QRhiResourceUpdateBatch *u = m_r->nextResourceUpdateBatch();
+
+ if (d.initialUpdates) {
+ u->merge(d.initialUpdates);
+ d.initialUpdates->release();
+ d.initialUpdates = nullptr;
+ }
+
+ u->updateDynamicBuffer(d.uniformBuffer, 0, 4, &d.index);
+ d.index++;
+
+ cb->beginPass(m_sc->currentFrameRenderTarget(), m_clearColor, { 1.0f, 0 }, u);
+ cb->setGraphicsPipeline(d.ps);
+ cb->setShaderResources(d.srb);
+ const QSize outputSizeInPixels = m_sc->currentPixelSize();
+ cb->setViewport(
+ { 0, 0, float(outputSizeInPixels.width()), float(outputSizeInPixels.height()) });
+ QRhiCommandBuffer::VertexInput vbufBinding(d.vertexBuffer, 0);
+ cb->setVertexInput(0, 1, &vbufBinding, d.indexBuffer, 0, QRhiCommandBuffer::IndexUInt16);
+ cb->drawIndexed(6);
+ cb->endPass();
+}
diff --git a/tests/manual/rhi/tex1d/texture1d.frag b/tests/manual/rhi/tex1d/texture1d.frag
new file mode 100644
index 0000000000..e5e0f3a6ca
--- /dev/null
+++ b/tests/manual/rhi/tex1d/texture1d.frag
@@ -0,0 +1,51 @@
+#version 440
+
+layout(location = 0) in vec2 v_texcoord;
+
+layout(location = 0) out vec4 fragColor;
+
+layout(std140, binding = 0) uniform buf {
+ int idx;
+} ubuf;
+
+layout(binding = 1) uniform sampler1D tex;
+layout(binding = 2) uniform sampler1DArray texArray;
+layout(binding = 3) uniform sampler1D texA;
+layout(binding = 4) uniform sampler1DArray texArrayA;
+layout(binding = 5) uniform sampler1D texB;
+layout(binding = 6) uniform sampler1D texC;
+layout(binding = 7) uniform sampler1DArray texArrayB;
+
+void main()
+{
+ vec4 c = vec4(v_texcoord, 0, 1);
+
+ vec2 coord = vec2(v_texcoord.x, floor(v_texcoord.y*2));
+
+ switch((ubuf.idx/(60*2))%7) {
+ case 0:
+ c = textureLod(tex, v_texcoord.x, float((ubuf.idx/30)%4));
+ break;
+ case 1:
+ c = textureLod(texArray, coord, float((ubuf.idx/30)%4));
+ break;
+ case 2:
+ c = textureLod(texA, v_texcoord.x, float((ubuf.idx/30)%4));
+ break;
+ case 3:
+ c = textureLod(texArrayA, coord, float((ubuf.idx/30)%4));
+ break;
+ case 4:
+ c = texture(texB, v_texcoord.x);
+ break;
+ case 5:
+ c = texture(texC, v_texcoord.x);
+ break;
+ case 6:
+ c = texture(texArrayB, coord);
+ break;
+ }
+
+ fragColor = vec4(c.rgb*c.a, c.a);
+
+}
diff --git a/tests/manual/rhi/tex1d/texture1d.frag.qsb b/tests/manual/rhi/tex1d/texture1d.frag.qsb
new file mode 100644
index 0000000000..4999c00077
--- /dev/null
+++ b/tests/manual/rhi/tex1d/texture1d.frag.qsb
Binary files differ
diff --git a/tests/manual/rhi/tex1d/texture1d.vert b/tests/manual/rhi/tex1d/texture1d.vert
new file mode 100644
index 0000000000..97cccf8610
--- /dev/null
+++ b/tests/manual/rhi/tex1d/texture1d.vert
@@ -0,0 +1,14 @@
+#version 440
+
+layout(location = 0) in vec4 position;
+layout(location = 1) in vec2 texcoord;
+
+layout(location = 0) out vec2 v_texcoord;
+
+out gl_PerVertex { vec4 gl_Position; };
+
+void main()
+{
+ v_texcoord = texcoord;
+ gl_Position = position;
+}
diff --git a/tests/manual/rhi/tex1d/texture1d.vert.qsb b/tests/manual/rhi/tex1d/texture1d.vert.qsb
new file mode 100644
index 0000000000..3d11a5cadd
--- /dev/null
+++ b/tests/manual/rhi/tex1d/texture1d.vert.qsb
Binary files differ
diff --git a/tests/manual/rhi/tex3d/CMakeLists.txt b/tests/manual/rhi/tex3d/CMakeLists.txt
index 380a76f262..8b2ac292cf 100644
--- a/tests/manual/rhi/tex3d/CMakeLists.txt
+++ b/tests/manual/rhi/tex3d/CMakeLists.txt
@@ -1,8 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_manual_test(tex3d
GUI
SOURCES
tex3d.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
diff --git a/tests/manual/rhi/tex3d/tex3d.cpp b/tests/manual/rhi/tex3d/tex3d.cpp
index a03bc7b553..33c4cab8d1 100644
--- a/tests/manual/rhi/tex3d/tex3d.cpp
+++ b/tests/manual/rhi/tex3d/tex3d.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
#include <QImage>
diff --git a/tests/manual/rhi/texturearray/CMakeLists.txt b/tests/manual/rhi/texturearray/CMakeLists.txt
index 39e49d5287..e4618f939e 100644
--- a/tests/manual/rhi/texturearray/CMakeLists.txt
+++ b/tests/manual/rhi/texturearray/CMakeLists.txt
@@ -1,8 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_manual_test(texturearray
GUI
SOURCES
texturearray.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
diff --git a/tests/manual/rhi/texturearray/texturearray.cpp b/tests/manual/rhi/texturearray/texturearray.cpp
index 206730464e..241f440e01 100644
--- a/tests/manual/rhi/texturearray/texturearray.cpp
+++ b/tests/manual/rhi/texturearray/texturearray.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
#include <QElapsedTimer>
@@ -90,7 +43,9 @@ void Window::customInit()
if (!m_r->isFeatureSupported(QRhi::TextureArrays))
qFatal("Texture array objects are not supported by this backend");
- d.texArr = m_r->newTextureArray(QRhiTexture::RGBA8, ARRAY_SIZE, QSize(512, 512));
+ d.texArr = m_r->newTextureArray(QRhiTexture::RGBA8, ARRAY_SIZE, QSize(512, 512), 1,
+ // mipmaps will be generated, to exercise that too
+ QRhiTexture::MipMapped | QRhiTexture::UsedWithGenerateMips);
d.releasePool << d.texArr;
d.texArr->create();
@@ -106,7 +61,9 @@ void Window::customInit()
img.fill(Qt::yellow);
d.initialUpdates->uploadTexture(d.texArr, QRhiTextureUploadDescription(QRhiTextureUploadEntry(3, 0, QRhiTextureSubresourceUploadDescription(img))));
- d.sampler = m_r->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::None,
+ d.initialUpdates->generateMips(d.texArr);
+
+ d.sampler = m_r->newSampler(QRhiSampler::Linear, QRhiSampler::Linear, QRhiSampler::Linear,
QRhiSampler::ClampToEdge, QRhiSampler::ClampToEdge);
d.releasePool << d.sampler;
d.sampler->create();
diff --git a/tests/manual/rhi/texuploads/CMakeLists.txt b/tests/manual/rhi/texuploads/CMakeLists.txt
index ce37af18ed..49e596f7e6 100644
--- a/tests/manual/rhi/texuploads/CMakeLists.txt
+++ b/tests/manual/rhi/texuploads/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from texuploads.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## texuploads Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(texuploads
GUI
SOURCES
texuploads.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -35,7 +36,3 @@ qt_internal_add_resource(texuploads "texuploads"
FILES
${texuploads_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:texuploads.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/texuploads/texuploads.cpp b/tests/manual/rhi/texuploads/texuploads.cpp
index 36be237a3d..5723d19be9 100644
--- a/tests/manual/rhi/texuploads/texuploads.cpp
+++ b/tests/manual/rhi/texuploads/texuploads.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "../shared/examplefw.h"
#include "../shared/cube.h"
@@ -239,7 +192,7 @@ void Window::customRender()
if (d.testStage == 6) {
const QRhiTexture::NativeTexture nativeTexture = d.tex->nativeTexture();
if (nativeTexture.object) {
-#if defined(Q_OS_MACOS) || defined(Q_OS_IOS)
+#if QT_CONFIG(metal)
if (graphicsApi == Metal) {
qDebug() << "Metal texture: " << nativeTexture.object;
// Now could cast to id<MTLTexture> and do something with
diff --git a/tests/manual/rhi/triquadcube/CMakeLists.txt b/tests/manual/rhi/triquadcube/CMakeLists.txt
index 8c343890b3..babf468728 100644
--- a/tests/manual/rhi/triquadcube/CMakeLists.txt
+++ b/tests/manual/rhi/triquadcube/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from triquadcube.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## triquadcube Binary:
@@ -12,7 +13,7 @@ qt_internal_add_manual_test(triquadcube
triangleoncuberenderer.cpp triangleoncuberenderer.h
trianglerenderer.cpp trianglerenderer.h
triquadcube.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
@@ -47,7 +48,3 @@ qt_internal_add_resource(triquadcube "triquadcube"
FILES
${triquadcube_resource_files}
)
-
-
-#### Keys ignored in scope 1:.:.:triquadcube.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/rhi/triquadcube/quadrenderer.cpp b/tests/manual/rhi/triquadcube/quadrenderer.cpp
index 98de7d07e7..67392dc583 100644
--- a/tests/manual/rhi/triquadcube/quadrenderer.cpp
+++ b/tests/manual/rhi/triquadcube/quadrenderer.cpp
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "quadrenderer.h"
#include <QFile>
-#include <QtGui/private/qshader_p.h>
+#include <rhi/qshader.h>
// Renders a quad using indexed drawing. No QRhiGraphicsPipeline is created, it
// expects to reuse the one created by TriangleRenderer. A separate
diff --git a/tests/manual/rhi/triquadcube/quadrenderer.h b/tests/manual/rhi/triquadcube/quadrenderer.h
index 79d5b8209d..8e5b556e06 100644
--- a/tests/manual/rhi/triquadcube/quadrenderer.h
+++ b/tests/manual/rhi/triquadcube/quadrenderer.h
@@ -1,57 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QUADRENDERER_H
#define QUADRENDERER_H
-#include <QtGui/private/qrhi_p.h>
+#include <rhi/qrhi.h>
class QuadRenderer
{
diff --git a/tests/manual/rhi/triquadcube/texturedcuberenderer.cpp b/tests/manual/rhi/triquadcube/texturedcuberenderer.cpp
index 9659f765f4..452c593e16 100644
--- a/tests/manual/rhi/triquadcube/texturedcuberenderer.cpp
+++ b/tests/manual/rhi/triquadcube/texturedcuberenderer.cpp
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "texturedcuberenderer.h"
#include <QFile>
-#include <QtGui/private/qshader_p.h>
+#include <rhi/qshader.h>
#include "../shared/cube.h"
diff --git a/tests/manual/rhi/triquadcube/texturedcuberenderer.h b/tests/manual/rhi/triquadcube/texturedcuberenderer.h
index 879f875209..53fc9a30d1 100644
--- a/tests/manual/rhi/triquadcube/texturedcuberenderer.h
+++ b/tests/manual/rhi/triquadcube/texturedcuberenderer.h
@@ -1,57 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef TEXTUREDCUBERENDERER_H
#define TEXTUREDCUBERENDERER_H
-#include <QtGui/private/qrhi_p.h>
+#include <rhi/qrhi.h>
class TexturedCubeRenderer
{
diff --git a/tests/manual/rhi/triquadcube/triangleoncuberenderer.cpp b/tests/manual/rhi/triquadcube/triangleoncuberenderer.cpp
index 0f2f7047ef..33dc0776d7 100644
--- a/tests/manual/rhi/triquadcube/triangleoncuberenderer.cpp
+++ b/tests/manual/rhi/triquadcube/triangleoncuberenderer.cpp
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "triangleoncuberenderer.h"
#include <QFile>
-#include <QtGui/private/qshader_p.h>
+#include <rhi/qshader.h>
// toggle to test the preserved content (no clear) path
const bool IMAGE_UNDER_OFFSCREEN_RENDERING = false;
diff --git a/tests/manual/rhi/triquadcube/triangleoncuberenderer.h b/tests/manual/rhi/triquadcube/triangleoncuberenderer.h
index 5a56bf6bd1..9d77feb253 100644
--- a/tests/manual/rhi/triquadcube/triangleoncuberenderer.h
+++ b/tests/manual/rhi/triquadcube/triangleoncuberenderer.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef TRIANGLEONCUBERENDERER_H
#define TRIANGLEONCUBERENDERER_H
diff --git a/tests/manual/rhi/triquadcube/trianglerenderer.cpp b/tests/manual/rhi/triquadcube/trianglerenderer.cpp
index a57a5242bb..21e3e791b4 100644
--- a/tests/manual/rhi/triquadcube/trianglerenderer.cpp
+++ b/tests/manual/rhi/triquadcube/trianglerenderer.cpp
@@ -1,56 +1,9 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "trianglerenderer.h"
#include <QFile>
-#include <QtGui/private/qshader_p.h>
+#include <rhi/qshader.h>
//#define VBUF_IS_DYNAMIC
diff --git a/tests/manual/rhi/triquadcube/trianglerenderer.h b/tests/manual/rhi/triquadcube/trianglerenderer.h
index 53d6926a62..bad2198be5 100644
--- a/tests/manual/rhi/triquadcube/trianglerenderer.h
+++ b/tests/manual/rhi/triquadcube/trianglerenderer.h
@@ -1,57 +1,10 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef TRIANGLERENDERER_H
#define TRIANGLERENDERER_H
-#include <QtGui/private/qrhi_p.h>
+#include <rhi/qrhi.h>
class TriangleRenderer
{
diff --git a/tests/manual/rhi/triquadcube/triquadcube.cpp b/tests/manual/rhi/triquadcube/triquadcube.cpp
index d3b574e126..2ef0d567db 100644
--- a/tests/manual/rhi/triquadcube/triquadcube.cpp
+++ b/tests/manual/rhi/triquadcube/triquadcube.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// An example exercising more than a single feature. Enables profiling
// (resource logging to a file) and inserts debug markers and sets some
@@ -82,7 +35,6 @@ struct {
QSize lastOutputSize;
int frameCount = 0;
QFile profOut;
- QVarLengthArray<float, 64> gpuFrameTimes;
QElapsedTimer gpuFrameTimePrintTimer;
} d;
@@ -181,22 +133,10 @@ void Window::customInit()
qDebug("MaxVertexOutputs: %d", m_r->resourceLimit(QRhi::MaxVertexOutputs));
// With Vulkan at least we should see some details from the memory allocator.
- qDebug() << m_r->graphicsMemoryAllocationStatistics();
+ qDebug() << m_r->statistics();
- // Every two seconds try printing an average of the gpu frame times.
+ // Every two seconds try printing last known gpu frame time.
d.gpuFrameTimePrintTimer.start();
- m_r->addGpuFrameTimeCallback([](float elapsedMs) {
- d.gpuFrameTimes.append(elapsedMs);
- if (d.gpuFrameTimePrintTimer.elapsed() > 2000) {
- float at = 0.0f;
- for (float t : d.gpuFrameTimes)
- at += t;
- at /= d.gpuFrameTimes.count();
- qDebug() << "Average GPU frame time" << at;
- d.gpuFrameTimes.clear();
- d.gpuFrameTimePrintTimer.restart();
- }
- });
}
void Window::customRelease()
@@ -217,6 +157,11 @@ void Window::customRender()
const QSize outputSize = m_sc->currentPixelSize();
QRhiCommandBuffer *cb = m_sc->currentFrameCommandBuffer();
+ if (d.gpuFrameTimePrintTimer.elapsed() > 2000) {
+ qDebug() << "Last completed GPU frame time" << cb->lastCompletedGpuTime() << "seconds";
+ d.gpuFrameTimePrintTimer.restart();
+ }
+
if (outputSize != d.lastOutputSize) {
d.triRenderer.resize(outputSize);
if (!d.triangleOnly) {
diff --git a/tests/manual/shortcuts/CMakeLists.txt b/tests/manual/shortcuts/CMakeLists.txt
index 23d468e228..6e821e327a 100644
--- a/tests/manual/shortcuts/CMakeLists.txt
+++ b/tests/manual/shortcuts/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from shortcuts.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## shortcuts Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(shortcuts
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:shortcuts.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/shortcuts/main.cpp b/tests/manual/shortcuts/main.cpp
index c3093ba593..514d62a484 100644
--- a/tests/manual/shortcuts/main.cpp
+++ b/tests/manual/shortcuts/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 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 <QVBoxLayout>
@@ -33,6 +8,7 @@
#include <QLabel>
#include <QPushButton>
#include <QDebug>
+#include <QtVersion>
class ShortcutTester : public QWidget
{
diff --git a/tests/manual/socketengine/CMakeLists.txt b/tests/manual/socketengine/CMakeLists.txt
index 02de148455..8ade1f5f30 100644
--- a/tests/manual/socketengine/CMakeLists.txt
+++ b/tests/manual/socketengine/CMakeLists.txt
@@ -1,23 +1,19 @@
-# Generated from socketengine.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_socketengine Binary:
#####################################################################
-# special case begin
if (NOT QT_FEATURE_private_tests)
return()
endif()
-# special case end
qt_internal_add_manual_test(tst_socketengine
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::NetworkPrivate
Qt::Test
)
-
-#### Keys ignored in scope 1:.:.:socketengine.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/socketengine/main.cpp b/tests/manual/socketengine/main.cpp
index 1ae5a42e65..54457ed20c 100644
--- a/tests/manual/socketengine/main.cpp
+++ b/tests/manual/socketengine/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 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 <QDebug>
#include <qtest.h>
@@ -38,6 +13,8 @@
#include <cstdio>
#include <QCoreApplication>
+using namespace std::chrono_literals;
+
const int bufsize = 16*1024;
char buf[bufsize];
@@ -64,7 +41,7 @@ int main(int argc, char**argv)
int r = socketEngine->connectToHost(QHostAddress("74.125.77.99"), 80); // google
bool readyToRead = false;
bool readyToWrite = false;
- socketEngine->waitForReadOrWrite(&readyToRead, &readyToWrite, true, true, 10*1000);
+ socketEngine->waitForReadOrWrite(&readyToRead, &readyToWrite, true, true, 10s);
if (r <= 0) //timeout or error
exit(1);
if (readyToWrite) {
@@ -74,7 +51,7 @@ int main(int argc, char**argv)
if (ret == request.length()) {
// read the response in a loop
do {
- bool waitReadResult = socketEngine->waitForRead(10*1000);
+ bool waitReadResult = socketEngine->waitForRead(10s);
int available = socketEngine->bytesAvailable();
if (waitReadResult == true && available == 0) {
// disconnected
diff --git a/tests/manual/startsystemmove/main.cpp b/tests/manual/startsystemmove/main.cpp
index ea0c0d98f3..2889bdc4f7 100644
--- a/tests/manual/startsystemmove/main.cpp
+++ b/tests/manual/startsystemmove/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QtGui>
diff --git a/tests/manual/stereographicsview/CMakeLists.txt b/tests/manual/stereographicsview/CMakeLists.txt
new file mode 100644
index 0000000000..6e43c660dd
--- /dev/null
+++ b/tests/manual/stereographicsview/CMakeLists.txt
@@ -0,0 +1,27 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## stereographicsview Binary:
+#####################################################################
+
+set(CMAKE_AUTOUIC ON)
+
+qt_internal_add_manual_test(stereographicsview
+ GUI
+ SOURCES
+ main.cpp
+ mainwindow.cpp
+ mainwindow.h
+ mainwindow.ui
+ mygraphicsview.h
+ mygraphicsview.cpp
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::OpenGL
+ Qt::OpenGLWidgets
+ Qt::Widgets
+ Qt::WidgetsPrivate
+)
diff --git a/tests/manual/stereographicsview/main.cpp b/tests/manual/stereographicsview/main.cpp
new file mode 100644
index 0000000000..a085f782b3
--- /dev/null
+++ b/tests/manual/stereographicsview/main.cpp
@@ -0,0 +1,26 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "mainwindow.h"
+
+#include <QApplication>
+#include <QSurfaceFormat>
+
+int main(int argc, char *argv[])
+{
+ QApplication a(argc, argv);
+
+ QSurfaceFormat format;
+ format.setDepthBufferSize(24);
+ format.setStencilBufferSize(8);
+ format.setSamples(16);
+ format.setStereo(true);
+ QSurfaceFormat::setDefaultFormat(format);
+
+ MainWindow w;
+ w.show();
+ return a.exec();
+}
+
+
+#include "main.moc"
diff --git a/tests/manual/stereographicsview/mainwindow.cpp b/tests/manual/stereographicsview/mainwindow.cpp
new file mode 100644
index 0000000000..86269b096c
--- /dev/null
+++ b/tests/manual/stereographicsview/mainwindow.cpp
@@ -0,0 +1,79 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "mainwindow.h"
+#include "./ui_mainwindow.h"
+#include <QPushButton>
+#include <QSlider>
+#include <QLabel>
+#include <QGraphicsEllipseItem>
+#include <QRandomGenerator>
+#include <QOpenGLWidget>
+
+MainWindow::MainWindow(QWidget *parent)
+ : QMainWindow(parent)
+ , ui(new Ui::MainWindow)
+{
+ ui->setupUi(this);
+
+ ui->graphicsView->setViewport(new QOpenGLWidget);
+ ui->graphicsView->setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
+
+ QRect rect = ui->graphicsView->rect();
+ QGraphicsScene *m_scene = new QGraphicsScene(rect);
+ ui->graphicsView->setScene(m_scene);
+
+ QSize initialSize(150, 150);
+ m_ellipse = m_scene->addEllipse(
+ rect.width() / 2 - initialSize.width() / 2,
+ rect.height() / 2 - initialSize.height() / 2,
+ initialSize.width(),
+ initialSize.height(),
+ QPen(Qt::magenta, 5),
+ Qt::blue);
+
+ QPushButton *button = new QPushButton();
+ button->setGeometry(QRect(rect.width() / 2 - 75, 100, 150, 50));
+ button->setText("Random ellipse color");
+ QObject::connect(button, &QPushButton::pressed, [&]() {
+ m_ellipse->setBrush(QColor::fromRgb(QRandomGenerator::global()->generate()));
+ m_ellipse->setPen(QPen(QColor::fromRgb(QRandomGenerator::global()->generate()), 5));
+ });
+ m_scene->addWidget(button);
+
+ m_label = new QLabel();
+ m_label->setGeometry(QRect(rect.width() / 2 - 50, rect.height() - 100, 100, 50));
+ m_label->setAlignment(Qt::AlignCenter);
+ m_scene->addWidget(m_label);
+
+ QSlider *slider = new QSlider(Qt::Horizontal);
+ slider->setGeometry(QRect(rect.width() / 2 - 100, rect.height() - 50, 200, 50));
+ slider->setMinimum(10);
+ slider->setMaximum(300);
+ slider->setValue(initialSize.width());
+ QObject::connect(slider, &QAbstractSlider::valueChanged, [this](int value){
+ QRectF rect = m_ellipse->rect();
+ rect.setWidth(value);
+ rect.setHeight(value);
+ m_ellipse->setRect(rect);
+ m_label->setText("Ellipse size: " + QString::number(value));
+ });
+ emit slider->valueChanged(initialSize.width());
+ m_scene->addWidget(slider);
+
+ QMenu *screenShotMenu = menuBar()->addMenu("&Screenshot");
+ screenShotMenu->addAction("Left buffer", this, [this](){
+ ui->graphicsView->saveImage(QOpenGLWidget::LeftBuffer);
+ });
+
+ screenShotMenu->addAction("Right buffer", this, [this](){
+ ui->graphicsView->saveImage(QOpenGLWidget::RightBuffer);
+ });
+
+}
+
+MainWindow::~MainWindow()
+{
+ delete ui;
+}
+
diff --git a/tests/manual/stereographicsview/mainwindow.h b/tests/manual/stereographicsview/mainwindow.h
new file mode 100644
index 0000000000..5219aae644
--- /dev/null
+++ b/tests/manual/stereographicsview/mainwindow.h
@@ -0,0 +1,30 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef MAINWINDOW_H
+#define MAINWINDOW_H
+
+#include <QMainWindow>
+
+QT_BEGIN_NAMESPACE
+namespace Ui { class MainWindow; }
+QT_END_NAMESPACE
+
+class QGraphicsEllipseItem;
+class QLabel;
+
+class MainWindow : public QMainWindow
+{
+ Q_OBJECT
+
+public:
+ MainWindow(QWidget *parent = nullptr);
+ ~MainWindow();
+
+private:
+ QGraphicsEllipseItem *m_ellipse;
+ QLabel *m_label;
+
+ Ui::MainWindow *ui;
+};
+#endif // MAINWINDOW_H
diff --git a/tests/manual/stereographicsview/mainwindow.ui b/tests/manual/stereographicsview/mainwindow.ui
new file mode 100644
index 0000000000..2ebb6b8caa
--- /dev/null
+++ b/tests/manual/stereographicsview/mainwindow.ui
@@ -0,0 +1,101 @@
+<?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>1120</width>
+ <height>695</height>
+ </rect>
+ </property>
+ <property name="windowTitle">
+ <string>MainWindow</string>
+ </property>
+ <widget class="QWidget" name="centralwidget">
+ <layout class="QHBoxLayout" name="horizontalLayout">
+ <item>
+ <widget class="MyGraphicsView" name="graphicsView">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="MinimumExpanding" vsizetype="MinimumExpanding">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="minimumSize">
+ <size>
+ <width>0</width>
+ <height>0</height>
+ </size>
+ </property>
+ <property name="sizeAdjustPolicy">
+ <enum>QAbstractScrollArea::AdjustToContentsOnFirstShow</enum>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <widget class="QFrame" name="frame">
+ <property name="sizePolicy">
+ <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
+ </property>
+ <property name="frameShape">
+ <enum>QFrame::StyledPanel</enum>
+ </property>
+ <property name="frameShadow">
+ <enum>QFrame::Raised</enum>
+ </property>
+ <layout class="QVBoxLayout" name="verticalLayout">
+ <item>
+ <widget class="QLabel" name="label">
+ <property name="text">
+ <string>QGraphicsView Stereoscopic Example</string>
+ </property>
+ <property name="alignment">
+ <set>Qt::AlignCenter</set>
+ </property>
+ </widget>
+ </item>
+ <item>
+ <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>
+ </layout>
+ </widget>
+ <widget class="QMenuBar" name="menubar">
+ <property name="geometry">
+ <rect>
+ <x>0</x>
+ <y>0</y>
+ <width>1120</width>
+ <height>21</height>
+ </rect>
+ </property>
+ </widget>
+ <widget class="QStatusBar" name="statusbar"/>
+ </widget>
+ <customwidgets>
+ <customwidget>
+ <class>MyGraphicsView</class>
+ <extends>QGraphicsView</extends>
+ <header>mygraphicsview.h</header>
+ </customwidget>
+ </customwidgets>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/tests/manual/stereographicsview/mygraphicsview.cpp b/tests/manual/stereographicsview/mygraphicsview.cpp
new file mode 100644
index 0000000000..933ee00835
--- /dev/null
+++ b/tests/manual/stereographicsview/mygraphicsview.cpp
@@ -0,0 +1,209 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "mygraphicsview.h"
+#include <QResizeEvent>
+#include <QFileDialog>
+
+Q_OPENGL_EXPORT QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha);
+
+MyGraphicsView::MyGraphicsView(QWidget *parent) :
+ QGraphicsView(parent),
+ m_indexBuf(QOpenGLBuffer::IndexBuffer)
+{
+
+}
+
+MyGraphicsView::MyGraphicsView(QGraphicsScene *scene, QWidget *parent) :
+ QGraphicsView(scene, parent)
+{
+
+}
+
+void MyGraphicsView::saveImage(QOpenGLWidget::TargetBuffer targetBuffer)
+{
+ QOpenGLWidget *w = static_cast<QOpenGLWidget*>(viewport());
+ Q_ASSERT(w);
+
+ w->makeCurrent(targetBuffer);
+ draw(targetBuffer);
+
+ QImage img = qt_gl_read_framebuffer(w->size() * w->devicePixelRatio(), true, true);
+
+ if (img.isNull()) {
+ qFatal("Failed to grab framebuffer");
+ }
+
+ const char *fn =
+ targetBuffer == QOpenGLWidget::LeftBuffer
+ ? "leftBuffer.png" : "rightBuffer.png";
+
+ QFileDialog fd(this);
+ fd.setAcceptMode(QFileDialog::AcceptSave);
+ fd.setDefaultSuffix("png");
+ fd.selectFile(fn);
+ if (fd.exec() == QDialog::Accepted)
+ img.save(fd.selectedFiles().first());
+}
+
+void MyGraphicsView::drawBackground(QPainter *painter, const QRectF &rect)
+{
+ if (!m_initialized)
+ init();
+
+ QOpenGLWidget *w = static_cast<QOpenGLWidget*>(viewport());
+
+ painter->beginNativePainting();
+
+ draw(w->currentTargetBuffer());
+
+ painter->endNativePainting();
+
+
+ m_yaw += 0.5;
+ if (m_yaw > 360)
+ m_yaw = 0;
+}
+
+void MyGraphicsView::resizeEvent(QResizeEvent *event)
+{
+ QGraphicsView::resizeEvent(event);
+
+ resize(event->size().width(), event->size().height());
+}
+
+void MyGraphicsView::init()
+{
+ if (m_initialized)
+ return;
+
+ initializeOpenGLFunctions();
+
+ initShaders();
+ initCube();
+
+ resize(viewport()->width(), viewport()->height());
+
+ m_initialized = true;
+}
+
+void MyGraphicsView::initShaders()
+{
+ static const char *vertexShaderSource =
+ "#ifdef GL_ES\n"
+ "// Set default precision to medium\n"
+ "precision mediump int;\n"
+ "precision mediump float;\n"
+ "#endif\n"
+ "attribute vec4 a_position;\n"
+ "uniform mat4 u_mvp;\n"
+ "void main() {\n"
+ "gl_Position = u_mvp * a_position;\n"
+ "}\n";
+
+ static const char *fragmentShaderSource =
+ "#ifdef GL_ES\n"
+ "// Set default precision to medium\n"
+ "precision mediump int;\n"
+ "precision mediump float;\n"
+ "#endif\n"
+ "void main() {\n"
+ "gl_FragColor = vec4(0.7, 0.1, 0.0, 1.0);\n"
+ "}\n";
+
+ if (!m_program.addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource))
+ close();
+
+ if (!m_program.addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource))
+ close();
+
+ if (!m_program.link())
+ close();
+
+ if (!m_program.bind())
+ close();
+}
+
+void MyGraphicsView::initCube()
+{
+ m_arrayBuf.create();
+ m_indexBuf.create();
+
+ QVector3D vertices[] = {
+ QVector3D(-1.0f, -1.0f, 1.0f),
+ QVector3D( 1.0f, -1.0f, 1.0f),
+ QVector3D(-1.0f, 1.0f, 1.0f),
+ QVector3D( 1.0f, 1.0f, 1.0f),
+ QVector3D( 1.0f, -1.0f, 1.0f),
+ QVector3D( 1.0f, -1.0f, -1.0f),
+ QVector3D( 1.0f, 1.0f, 1.0f),
+ QVector3D( 1.0f, 1.0f, -1.0f),
+ QVector3D( 1.0f, -1.0f, -1.0f),
+ QVector3D(-1.0f, -1.0f, -1.0f),
+ QVector3D( 1.0f, 1.0f, -1.0f),
+ QVector3D(-1.0f, 1.0f, -1.0f),
+ QVector3D(-1.0f, -1.0f, -1.0f),
+ QVector3D(-1.0f, -1.0f, 1.0f),
+ QVector3D(-1.0f, 1.0f, -1.0f),
+ QVector3D(-1.0f, 1.0f, 1.0f),
+ QVector3D(-1.0f, -1.0f, -1.0f),
+ QVector3D( 1.0f, -1.0f, -1.0f),
+ QVector3D(-1.0f, -1.0f, 1.0f),
+ QVector3D( 1.0f, -1.0f, 1.0f),
+ QVector3D(-1.0f, 1.0f, 1.0f),
+ QVector3D( 1.0f, 1.0f, 1.0f),
+ QVector3D(-1.0f, 1.0f, -1.0f),
+ QVector3D( 1.0f, 1.0f, -1.0f)
+ };
+
+ GLushort indices[] = {
+ 0, 1, 2, 3, 3,
+ 4, 4, 5, 6, 7, 7,
+ 8, 8, 9, 10, 11, 11,
+ 12, 12, 13, 14, 15, 15,
+ 16, 16, 17, 18, 19, 19,
+ 20, 20, 21, 22, 23
+ };
+
+
+ m_arrayBuf.bind();
+ m_arrayBuf.allocate(vertices, 24 * sizeof(QVector3D));
+
+ m_indexBuf.bind();
+ m_indexBuf.allocate(indices, 34 * sizeof(GLushort));
+}
+
+void MyGraphicsView::draw(QOpenGLWidget::TargetBuffer targetBuffer)
+{
+ glClearColor(0.0f, 0.7f, 0.0f, 1.0f);
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ m_program.bind();
+ m_arrayBuf.bind();
+ m_indexBuf.bind();
+
+ QMatrix4x4 matrix;
+ matrix.translate(targetBuffer == QOpenGLWidget::LeftBuffer ? -2.0 : 2.0,
+ 0.0,
+ -10.0);
+ matrix.scale(2.0);
+ matrix.rotate(QQuaternion::fromEulerAngles(10, m_yaw, 0));
+ m_program.setUniformValue("u_mvp", m_projection * matrix);
+
+ int vertexLocation = m_program.attributeLocation("a_position");
+ m_program.enableAttributeArray(vertexLocation);
+ m_program.setAttributeBuffer(vertexLocation, GL_FLOAT, 0, 3, sizeof(QVector3D));
+
+ glDrawElements(GL_TRIANGLE_STRIP, 34, GL_UNSIGNED_SHORT, nullptr);
+}
+
+void MyGraphicsView::resize(int w, int h)
+{
+ qreal aspect = qreal(w) / qreal(h ? h : 1);
+ const qreal zNear = 0.0, zFar = 100.0, fov = 45.0;
+ m_projection.setToIdentity();
+ m_projection.perspective(fov, aspect, zNear, zFar);
+
+ if (m_initialized)
+ glViewport(0, 0, w, h);
+}
diff --git a/tests/manual/stereographicsview/mygraphicsview.h b/tests/manual/stereographicsview/mygraphicsview.h
new file mode 100644
index 0000000000..57cf902d5d
--- /dev/null
+++ b/tests/manual/stereographicsview/mygraphicsview.h
@@ -0,0 +1,47 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef MYGRAPHICSVIEW_H
+#define MYGRAPHICSVIEW_H
+
+#include <QOpenGLFunctions>
+#include <QGraphicsView>
+#include <QOpenGLShaderProgram>
+#include <QOpenGLBuffer>
+#include <QMatrix4x4>
+#include <QOpenGLWidget>
+
+class MyGraphicsView : public QGraphicsView, protected QOpenGLFunctions
+{
+public:
+ MyGraphicsView(QWidget *parent = nullptr);
+ MyGraphicsView(QGraphicsScene *scene, QWidget *parent = nullptr);
+
+ void saveImage(QOpenGLWidget::TargetBuffer targetBuffer);
+
+protected:
+ void drawBackground(QPainter *painter, const QRectF &rect) override;
+
+ void resizeEvent(QResizeEvent *event) override;
+
+private:
+ void init();
+ void initShaders();
+ void initCube();
+
+ void draw(QOpenGLWidget::TargetBuffer targetBuffer);
+
+ void resize(int w, int h);
+
+
+ bool m_initialized = false;
+
+ QOpenGLShaderProgram m_program;
+ QMatrix4x4 m_projection;
+ QOpenGLBuffer m_arrayBuf;
+ QOpenGLBuffer m_indexBuf;
+
+ qreal m_yaw = 0;
+};
+
+#endif // MYGRAPHICSVIEW_H
diff --git a/tests/manual/stereographicsview/stereographicsview.pro b/tests/manual/stereographicsview/stereographicsview.pro
new file mode 100644
index 0000000000..597166367c
--- /dev/null
+++ b/tests/manual/stereographicsview/stereographicsview.pro
@@ -0,0 +1,13 @@
+QT += widgets widgets-private gui-private core-private
+
+TARGET = stereographicsview
+TEMPLATE = app
+
+SOURCES += main.cpp \
+ mainwindow.cpp \
+ mainwindow.h \
+ mainwindow.ui \
+ mygraphicsview.h \
+ mygraphicsview.cpp \
+
+HEADERS += openglwidget.h
diff --git a/tests/manual/textrendering/CMakeLists.txt b/tests/manual/textrendering/CMakeLists.txt
index 788f9fc34f..cd06705ce5 100644
--- a/tests/manual/textrendering/CMakeLists.txt
+++ b/tests/manual/textrendering/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from textrendering.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(glyphshaping)
add_subdirectory(textperformance)
diff --git a/tests/manual/textrendering/codeeditor/CMakeLists.txt b/tests/manual/textrendering/codeeditor/CMakeLists.txt
new file mode 100644
index 0000000000..0e8a3b49ff
--- /dev/null
+++ b/tests/manual/textrendering/codeeditor/CMakeLists.txt
@@ -0,0 +1,37 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_minimum_required(VERSION 3.16)
+project(codeeditor LANGUAGES CXX)
+
+if(NOT DEFINED INSTALL_EXAMPLESDIR)
+ set(INSTALL_EXAMPLESDIR "examples")
+endif()
+
+set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/widgets/codeeditor")
+
+find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets)
+
+qt_standard_project_setup()
+
+qt_add_executable(codeeditor
+ codeeditor.cpp codeeditor.h
+ main.cpp
+)
+
+set_target_properties(codeeditor PROPERTIES
+ WIN32_EXECUTABLE TRUE
+ MACOSX_BUNDLE TRUE
+)
+
+target_link_libraries(codeeditor PRIVATE
+ Qt6::Core
+ Qt6::Gui
+ Qt6::Widgets
+)
+
+install(TARGETS codeeditor
+ RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}"
+ BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}"
+ LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}"
+)
diff --git a/tests/manual/textrendering/codeeditor/codeeditor.cpp b/tests/manual/textrendering/codeeditor/codeeditor.cpp
new file mode 100644
index 0000000000..3b7fd58d30
--- /dev/null
+++ b/tests/manual/textrendering/codeeditor/codeeditor.cpp
@@ -0,0 +1,134 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "codeeditor.h"
+
+#include <QPainter>
+#include <QTextBlock>
+
+//![constructor]
+
+CodeEditor::CodeEditor(QWidget *parent) : QPlainTextEdit(parent)
+{
+ lineNumberArea = new LineNumberArea(this);
+
+ connect(this, &CodeEditor::blockCountChanged, this, &CodeEditor::updateLineNumberAreaWidth);
+ connect(this, &CodeEditor::updateRequest, this, &CodeEditor::updateLineNumberArea);
+ connect(this, &CodeEditor::cursorPositionChanged, this, &CodeEditor::highlightCurrentLine);
+
+ updateLineNumberAreaWidth(0);
+ highlightCurrentLine();
+}
+
+//![constructor]
+
+//![extraAreaWidth]
+
+int CodeEditor::lineNumberAreaWidth()
+{
+ int digits = 1;
+ int max = qMax(1, blockCount());
+ while (max >= 10) {
+ max /= 10;
+ ++digits;
+ }
+
+ int space = 3 + fontMetrics().horizontalAdvance(QLatin1Char('9')) * digits;
+
+ return space;
+}
+
+//![extraAreaWidth]
+
+//![slotUpdateExtraAreaWidth]
+
+void CodeEditor::updateLineNumberAreaWidth(int /* newBlockCount */)
+{
+ setViewportMargins(lineNumberAreaWidth(), 0, 0, 0);
+}
+
+//![slotUpdateExtraAreaWidth]
+
+//![slotUpdateRequest]
+
+void CodeEditor::updateLineNumberArea(const QRect &rect, int dy)
+{
+ if (dy)
+ lineNumberArea->scroll(0, dy);
+ else
+ lineNumberArea->update(0, rect.y(), lineNumberArea->width(), rect.height());
+
+ if (rect.contains(viewport()->rect()))
+ updateLineNumberAreaWidth(0);
+}
+
+//![slotUpdateRequest]
+
+//![resizeEvent]
+
+void CodeEditor::resizeEvent(QResizeEvent *e)
+{
+ QPlainTextEdit::resizeEvent(e);
+
+ QRect cr = contentsRect();
+ lineNumberArea->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height()));
+}
+
+//![resizeEvent]
+
+//![cursorPositionChanged]
+
+void CodeEditor::highlightCurrentLine()
+{
+ QList<QTextEdit::ExtraSelection> extraSelections;
+
+ if (!isReadOnly()) {
+ QTextEdit::ExtraSelection selection;
+
+ QColor lineColor = QColor(Qt::yellow).lighter(160);
+
+ selection.format.setBackground(lineColor);
+ selection.format.setProperty(QTextFormat::FullWidthSelection, true);
+ selection.cursor = textCursor();
+ selection.cursor.clearSelection();
+ extraSelections.append(selection);
+ }
+
+ setExtraSelections(extraSelections);
+}
+
+//![cursorPositionChanged]
+
+//![extraAreaPaintEvent_0]
+
+void CodeEditor::lineNumberAreaPaintEvent(QPaintEvent *event)
+{
+ QPainter painter(lineNumberArea);
+ painter.fillRect(event->rect(), Qt::lightGray);
+
+//![extraAreaPaintEvent_0]
+
+//![extraAreaPaintEvent_1]
+ QTextBlock block = firstVisibleBlock();
+ int blockNumber = block.blockNumber();
+ int top = qRound(blockBoundingGeometry(block).translated(contentOffset()).top());
+ int bottom = top + qRound(blockBoundingRect(block).height());
+//![extraAreaPaintEvent_1]
+
+//![extraAreaPaintEvent_2]
+ while (block.isValid() && top <= event->rect().bottom()) {
+ if (block.isVisible() && bottom >= event->rect().top()) {
+ QString number = QString::number(blockNumber + 1);
+ painter.setPen(Qt::black);
+ painter.drawText(0, top, lineNumberArea->width(), fontMetrics().height(),
+ Qt::AlignRight, number);
+ }
+
+ block = block.next();
+ top = bottom;
+ bottom = top + qRound(blockBoundingRect(block).height());
+ ++blockNumber;
+ }
+}
+//![extraAreaPaintEvent_2]
+
diff --git a/tests/manual/textrendering/codeeditor/codeeditor.h b/tests/manual/textrendering/codeeditor/codeeditor.h
new file mode 100644
index 0000000000..583bf3b4a0
--- /dev/null
+++ b/tests/manual/textrendering/codeeditor/codeeditor.h
@@ -0,0 +1,68 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef CODEEDITOR_H
+#define CODEEDITOR_H
+
+#include <QPlainTextEdit>
+
+QT_BEGIN_NAMESPACE
+class QPaintEvent;
+class QResizeEvent;
+class QSize;
+class QWidget;
+QT_END_NAMESPACE
+
+class LineNumberArea;
+
+//![codeeditordefinition]
+
+class CodeEditor : public QPlainTextEdit
+{
+ Q_OBJECT
+
+public:
+ CodeEditor(QWidget *parent = nullptr);
+
+ void lineNumberAreaPaintEvent(QPaintEvent *event);
+ int lineNumberAreaWidth();
+
+protected:
+ void resizeEvent(QResizeEvent *event) override;
+
+private slots:
+ void updateLineNumberAreaWidth(int newBlockCount);
+ void highlightCurrentLine();
+ void updateLineNumberArea(const QRect &rect, int dy);
+
+private:
+ QWidget *lineNumberArea;
+};
+
+//![codeeditordefinition]
+//![extraarea]
+
+class LineNumberArea : public QWidget
+{
+public:
+ LineNumberArea(CodeEditor *editor) : QWidget(editor), codeEditor(editor)
+ {}
+
+ QSize sizeHint() const override
+ {
+ return QSize(codeEditor->lineNumberAreaWidth(), 0);
+ }
+
+protected:
+ void paintEvent(QPaintEvent *event) override
+ {
+ codeEditor->lineNumberAreaPaintEvent(event);
+ }
+
+private:
+ CodeEditor *codeEditor;
+};
+
+//![extraarea]
+
+#endif
diff --git a/tests/manual/textrendering/codeeditor/codeeditor.pro b/tests/manual/textrendering/codeeditor/codeeditor.pro
new file mode 100644
index 0000000000..5618160d17
--- /dev/null
+++ b/tests/manual/textrendering/codeeditor/codeeditor.pro
@@ -0,0 +1,8 @@
+QT += widgets
+
+HEADERS = codeeditor.h
+SOURCES = main.cpp \
+ codeeditor.cpp
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/widgets/widgets/codeeditor
+INSTALLS += target
diff --git a/tests/manual/textrendering/codeeditor/codeeditor.qdoc b/tests/manual/textrendering/codeeditor/codeeditor.qdoc
new file mode 100644
index 0000000000..f3b417c5b8
--- /dev/null
+++ b/tests/manual/textrendering/codeeditor/codeeditor.qdoc
@@ -0,0 +1,173 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example widgets/codeeditor
+ \title Code Editor Example
+ \ingroup examples-widgets
+ \brief The Code Editor example shows how to create a simple editor that
+ has line numbers and that highlights the current line.
+
+ \borderedimage codeeditor-example.png
+
+ As can be seen from the image, the editor displays the line
+ numbers in an area to the left of the area for editing. The editor
+ will highlight the line containing the cursor.
+
+ We implement the editor in \c CodeEditor, which is a widget that
+ inherits QPlainTextEdit. We keep a separate widget in \c
+ CodeEditor (\c LineNumberArea) onto which we draw the line
+ numbers.
+
+ QPlainTextEdit inherits from QAbstractScrollArea, and editing
+ takes place within its \l{QAbstractScrollArea::}{viewport()}'s
+ margins. We make room for our line number area by setting the left
+ margin of the viewport to the size we need to draw the line
+ numbers.
+
+ When it comes to editing code, we prefer QPlainTextEdit over
+ QTextEdit because it is optimized for handling plain text. See
+ the QPlainTextEdit class description for details.
+
+ QPlainTextEdit lets us add selections in addition to the
+ selection the user can make with the mouse or keyboard. We use
+ this functionality to highlight the current line. More on this
+ later.
+
+ We will now move on to the definitions and implementations of \c
+ CodeEditor and \c LineNumberArea. Let's start with the \c
+ LineNumberArea class.
+
+ \section1 The LineNumberArea Class
+
+ We paint the line numbers on this widget, and place it over the \c
+ CodeEditor's \l{QAbstractScrollArea::}{viewport()}'s left margin
+ area.
+
+ We need to use protected functions in QPlainTextEdit while
+ painting the area. So to keep things simple, we paint the area in
+ the \c CodeEditor class. The area also asks the editor to
+ calculate its size hint.
+
+ Note that we could simply paint the line numbers directly on the
+ code editor, and drop the LineNumberArea class. However, the
+ QWidget class helps us to \l{QWidget::}{scroll()} its contents.
+ Also, having a separate widget is the right choice if we wish to
+ extend the editor with breakpoints or other code editor features.
+ The widget would then help in the handling of mouse events.
+
+ \snippet widgets/codeeditor/codeeditor.h extraarea
+
+ \section1 CodeEditor Class Definition
+
+ Here is the code editor's class definition:
+
+ \snippet widgets/codeeditor/codeeditor.h codeeditordefinition
+
+ In the editor we resize and draw the line numbers on the \c
+ LineNumberArea. We need to do this when the number of lines in the
+ editor changes, and when the editor's viewport() is scrolled. Of
+ course, it is also done when the editor's size changes. We do
+ this in \c updateLineNumberWidth() and \c updateLineNumberArea().
+
+ Whenever, the cursor's position changes, we highlight the current
+ line in \c highlightCurrentLine().
+
+ \section1 CodeEditor Class Implementation
+
+ We will now go through the code editors implementation, starting
+ off with the constructor.
+
+ \snippet widgets/codeeditor/codeeditor.cpp constructor
+
+ In the constructor we connect our slots to signals in
+ QPlainTextEdit. It is necessary to calculate the line number area
+ width and highlight the first line when the editor is created.
+
+ \snippet widgets/codeeditor/codeeditor.cpp extraAreaWidth
+
+ The \c lineNumberAreaWidth() function calculates the width of the
+ \c LineNumberArea widget. We take the number of digits in the last
+ line of the editor and multiply that with the maximum width of a
+ digit.
+
+ \snippet widgets/codeeditor/codeeditor.cpp slotUpdateExtraAreaWidth
+
+ When we update the width of the line number area, we simply call
+ QAbstractScrollArea::setViewportMargins().
+
+ \snippet widgets/codeeditor/codeeditor.cpp slotUpdateRequest
+
+ This slot is invoked when the editors viewport has been scrolled.
+ The QRect given as argument is the part of the editing area that
+ is do be updated (redrawn). \c dy holds the number of pixels the
+ view has been scrolled vertically.
+
+ \snippet widgets/codeeditor/codeeditor.cpp resizeEvent
+
+ When the size of the editor changes, we also need to resize the
+ line number area.
+
+ \snippet widgets/codeeditor/codeeditor.cpp cursorPositionChanged
+
+ When the cursor position changes, we highlight the current line,
+ i.e., the line containing the cursor.
+
+ QPlainTextEdit gives the possibility to have more than one
+ selection at the same time. we can set the character format
+ (QTextCharFormat) of these selections. We clear the cursors
+ selection before setting the new
+ QPlainTextEdit::ExtraSelection, else several lines would get
+ highlighted when the user selects multiple lines with the mouse.
+ \omit ask someone how this works \endomit
+
+ One sets the selection with a text cursor. When using the
+ FullWidthSelection property, the current cursor text block (line)
+ will be selected. If you want to select just a portion of the text
+ block, the cursor should be moved with QTextCursor::movePosition()
+ from a position set with \l{QTextCursor::}{setPosition()}.
+
+ \snippet widgets/codeeditor/codeeditor.cpp extraAreaPaintEvent_0
+
+ The \c lineNumberAreaPaintEvent() is called from \c LineNumberArea
+ whenever it receives a paint event. We start off by painting the
+ widget's background.
+
+ \snippet widgets/codeeditor/codeeditor.cpp extraAreaPaintEvent_1
+
+ We will now loop through all visible lines and paint the line
+ numbers in the extra area for each line. Notice that in a plain
+ text edit each line will consist of one QTextBlock; though, if
+ line wrapping is enabled, a line may span several rows in the text
+ edit's viewport.
+
+ We get the top and bottom y-coordinate of the first text block,
+ and adjust these values by the height of the current text block in
+ each iteration in the loop.
+
+ \snippet widgets/codeeditor/codeeditor.cpp extraAreaPaintEvent_2
+
+ Notice that we check if the block is visible in addition to check
+ if it is in the areas viewport - a block can, for example, be
+ hidden by a window placed over the text edit.
+
+ \section1 Suggestions for Extending the Code Editor
+
+ No self-respecting code editor is without a syntax
+ highligther; the \l{Syntax Highlighter Example} shows how to
+ create one.
+
+ In addition to line numbers, you can add more to the extra area,
+ for instance, break points.
+
+ QSyntaxHighlighter gives the possibility to add user data to each
+ text block with
+ \l{QSyntaxHighlighter::}{setCurrentBlockUserData()}. This can be
+ used to implement parenthesis matching. In the \c
+ highlightCurrentLine(), the data of the currentBlock() can be
+ fetched with QTextBlock::userData(). Matching parentheses can be
+ highlighted with an extra selection. The "Matching Parentheses
+ with QSyntaxHighlighter" article in Qt Quarterly 31 implements
+ this. You find it here: \l{http://doc.qt.io/archives/qq/}.
+
+*/
diff --git a/tests/manual/textrendering/codeeditor/main.cpp b/tests/manual/textrendering/codeeditor/main.cpp
new file mode 100644
index 0000000000..3e3d98ae31
--- /dev/null
+++ b/tests/manual/textrendering/codeeditor/main.cpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QApplication>
+
+#include "codeeditor.h"
+
+int main(int argv, char **args)
+{
+ QApplication app(argv, args);
+
+ CodeEditor editor;
+ editor.setWindowTitle(QObject::tr("Code Editor Example"));
+ editor.show();
+
+ return app.exec();
+}
+
diff --git a/tests/manual/textrendering/glyphshaping/CMakeLists.txt b/tests/manual/textrendering/glyphshaping/CMakeLists.txt
index e0a69745e8..8965070139 100644
--- a/tests/manual/textrendering/glyphshaping/CMakeLists.txt
+++ b/tests/manual/textrendering/glyphshaping/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from glyphshaping.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## glyphshaping Binary:
@@ -8,12 +9,7 @@ qt_internal_add_manual_test(glyphshaping
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:glyphshaping.pro:<TRUE>:
-# DEPLOYMENT = "glyphshaping_data"
-# glyphshaping_data.files = "$$PWD/glyphshaping_data.xml"
-# glyphshaping_data.path = "."
diff --git a/tests/manual/textrendering/glyphshaping/main.cpp b/tests/manual/textrendering/glyphshaping/main.cpp
index e76084cf1b..bbe36a8abf 100644
--- a/tests/manual/textrendering/glyphshaping/main.cpp
+++ b/tests/manual/textrendering/glyphshaping/main.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QApplication>
#include <QDir>
diff --git a/tests/manual/textrendering/nativetext/CMakeLists.txt b/tests/manual/textrendering/nativetext/CMakeLists.txt
index 447288e6df..67918640af 100644
--- a/tests/manual/textrendering/nativetext/CMakeLists.txt
+++ b/tests/manual/textrendering/nativetext/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from nativetext.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## nativetext Binary:
@@ -7,7 +8,7 @@
qt_internal_add_manual_test(nativetext
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::GuiPrivate
@@ -18,7 +19,7 @@ qt_internal_add_manual_test(nativetext
#####################################################################
qt_internal_extend_target(nativetext CONDITION APPLE
- PUBLIC_LIBRARIES
+ LIBRARIES
${FWAppKit}
${FWCoreGraphics}
${FWFoundation}
diff --git a/tests/manual/textrendering/nativetext/main.cpp b/tests/manual/textrendering/nativetext/main.cpp
index ae87dfa929..65a361eddb 100644
--- a/tests/manual/textrendering/nativetext/main.cpp
+++ b/tests/manual/textrendering/nativetext/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 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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets>
diff --git a/tests/manual/textrendering/textperformance/CMakeLists.txt b/tests/manual/textrendering/textperformance/CMakeLists.txt
index ed1664dd2a..56e67d3688 100644
--- a/tests/manual/textrendering/textperformance/CMakeLists.txt
+++ b/tests/manual/textrendering/textperformance/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from textperformance.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## textperformance Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(textperformance
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/textrendering/textperformance/main.cpp b/tests/manual/textrendering/textperformance/main.cpp
index 8cbef84119..babeb2f810 100644
--- a/tests/manual/textrendering/textperformance/main.cpp
+++ b/tests/manual/textrendering/textperformance/main.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** 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
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include <QApplication>
#include <QDialog>
diff --git a/tests/manual/touch/CMakeLists.txt b/tests/manual/touch/CMakeLists.txt
index 2d941a6c94..72ed405048 100644
--- a/tests/manual/touch/CMakeLists.txt
+++ b/tests/manual/touch/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from touch.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## touch Binary:
@@ -7,11 +8,8 @@
qt_internal_add_manual_test(touch
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:touch.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/touch/main.cpp b/tests/manual/touch/main.cpp
index 7e20565213..dcc29799aa 100644
--- a/tests/manual/touch/main.cpp
+++ b/tests/manual/touch/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 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 <QAction>
@@ -407,7 +382,7 @@ void TouchTestWidget::paintEvent(QPaintEvent *)
const QRectF geom = QRectF(QPointF(0, 0), QSizeF(size()));
painter.fillRect(geom, Qt::white);
painter.drawRect(QRectF(geom.topLeft(), geom.bottomRight() - QPointF(1, 1)));
- for (const Point &point : qAsConst(m_points)) {
+ for (const Point &point : std::as_const(m_points)) {
if (geom.contains(point.pos)) {
if (point.type == MouseRelease)
drawEllipse(point.pos, point.horizontalDiameter, point.verticalDiameter, point.color(), painter);
@@ -415,7 +390,7 @@ void TouchTestWidget::paintEvent(QPaintEvent *)
fillEllipse(point.pos, point.horizontalDiameter, point.verticalDiameter, point.color(), painter);
}
}
- for (const GesturePtr &gp : qAsConst(m_gestures))
+ for (const GesturePtr &gp : std::as_const(m_gestures))
gp->draw(geom, painter);
}
diff --git a/tests/manual/touchGraphicsItem/CMakeLists.txt b/tests/manual/touchGraphicsItem/CMakeLists.txt
index 870b297ba6..82e0523184 100644
--- a/tests/manual/touchGraphicsItem/CMakeLists.txt
+++ b/tests/manual/touchGraphicsItem/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from touchGraphicsItem.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## touchGraphicsItem Binary:
@@ -10,10 +11,7 @@ qt_internal_add_manual_test(touchGraphicsItem
main.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:touchGraphicsItem.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/touchGraphicsItem/main.cpp b/tests/manual/touchGraphicsItem/main.cpp
index 80265a46f8..7ec9272a86 100644
--- a/tests/manual/touchGraphicsItem/main.cpp
+++ b/tests/manual/touchGraphicsItem/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2018 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: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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets>
diff --git a/tests/manual/transientwindow/CMakeLists.txt b/tests/manual/transientwindow/CMakeLists.txt
index 20d37bbc69..6e918aa6e0 100644
--- a/tests/manual/transientwindow/CMakeLists.txt
+++ b/tests/manual/transientwindow/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from transientwindow.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## transientwindow Binary:
@@ -9,10 +10,7 @@ qt_internal_add_manual_test(transientwindow
SOURCES
main.cpp
mainwindow.cpp mainwindow.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:transientwindow.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/transientwindow/main.cpp b/tests/manual/transientwindow/main.cpp
index a125f1c316..67b731dc95 100644
--- a/tests/manual/transientwindow/main.cpp
+++ b/tests/manual/transientwindow/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 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 "mainwindow.h"
#include <QApplication>
diff --git a/tests/manual/transientwindow/mainwindow.cpp b/tests/manual/transientwindow/mainwindow.cpp
index 1b84343ffa..747304605d 100644
--- a/tests/manual/transientwindow/mainwindow.cpp
+++ b/tests/manual/transientwindow/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 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 "mainwindow.h"
#include <QDebug>
diff --git a/tests/manual/transientwindow/mainwindow.h b/tests/manual/transientwindow/mainwindow.h
index d822442b15..8659f122e9 100644
--- a/tests/manual/transientwindow/mainwindow.h
+++ b/tests/manual/transientwindow/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 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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/tests/manual/triangulator/CMakeLists.txt b/tests/manual/triangulator/CMakeLists.txt
index e9fe7f50ef..a424bc5ecc 100644
--- a/tests/manual/triangulator/CMakeLists.txt
+++ b/tests/manual/triangulator/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from triangulator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## triangulator Binary:
@@ -9,11 +10,8 @@ qt_internal_add_manual_test(triangulator
SOURCES
main.cpp
triviswidget.cpp triviswidget.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:triangulator.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/triangulator/main.cpp b/tests/manual/triangulator/main.cpp
index 066c9f374e..3a384f5888 100644
--- a/tests/manual/triangulator/main.cpp
+++ b/tests/manual/triangulator/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QApplication>
#include <QMainWindow>
diff --git a/tests/manual/triangulator/triviswidget.cpp b/tests/manual/triangulator/triviswidget.cpp
index de1efdb4a0..5a14fc9ca1 100644
--- a/tests/manual/triangulator/triviswidget.cpp
+++ b/tests/manual/triangulator/triviswidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "triviswidget.h"
#include <QVBoxLayout>
diff --git a/tests/manual/triangulator/triviswidget.h b/tests/manual/triangulator/triviswidget.h
index 7419746236..d52d9c2942 100644
--- a/tests/manual/triangulator/triviswidget.h
+++ b/tests/manual/triangulator/triviswidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef TRIVISWIDGET_H
#define TRIVISWIDGET_H
diff --git a/tests/manual/unc/CMakeLists.txt b/tests/manual/unc/CMakeLists.txt
index e8c90cbd65..b811a661ac 100644
--- a/tests/manual/unc/CMakeLists.txt
+++ b/tests/manual/unc/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from unc.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## unc Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(unc
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:unc.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/unc/main.cpp b/tests/manual/unc/main.cpp
index 9798ed4e5d..98b50e775c 100644
--- a/tests/manual/unc/main.cpp
+++ b/tests/manual/unc/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 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 <QDialog>
diff --git a/tests/manual/wasm/CMakeLists.txt b/tests/manual/wasm/CMakeLists.txt
index 4bd7341d66..b13f6781b8 100644
--- a/tests/manual/wasm/CMakeLists.txt
+++ b/tests/manual/wasm/CMakeLists.txt
@@ -1,7 +1,13 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
add_subdirectory(eventloop)
add_subdirectory(rasterwindow)
+add_subdirectory(a11y)
if(QT_FEATURE_widgets)
add_subdirectory(cursors)
add_subdirectory(localfiles)
+add_subdirectory(localfonts)
+add_subdirectory(qstdweb)
add_subdirectory(clipboard)
endif()
diff --git a/tests/manual/wasm/README.md b/tests/manual/wasm/README.md
index 5117e2f70b..9266f38cc6 100644
--- a/tests/manual/wasm/README.md
+++ b/tests/manual/wasm/README.md
@@ -12,3 +12,4 @@ Content
eventloop Event loops, application startup, dialog exec()
localfiles Local file download and upload
rasterwindow Basic GUI app, event handling
+ qtwasmtestlib native auto test framework
diff --git a/tests/manual/wasm/a11y/CMakeLists.txt b/tests/manual/wasm/a11y/CMakeLists.txt
new file mode 100644
index 0000000000..5268d53c8b
--- /dev/null
+++ b/tests/manual/wasm/a11y/CMakeLists.txt
@@ -0,0 +1,3 @@
+if(QT_FEATURE_widgets)
+add_subdirectory(basic_widgets)
+endif()
diff --git a/tests/manual/wasm/a11y/basic_widgets/CMakeLists.txt b/tests/manual/wasm/a11y/basic_widgets/CMakeLists.txt
new file mode 100644
index 0000000000..11534bdf68
--- /dev/null
+++ b/tests/manual/wasm/a11y/basic_widgets/CMakeLists.txt
@@ -0,0 +1,21 @@
+qt_internal_add_manual_test(a11y_basic_widgets
+ GUI
+ SOURCES
+ tabswidget.cpp
+ tabswidget.h
+ basica11ywidget.h
+ basica11ywidget.cpp
+ main.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
+
+add_custom_command(
+ TARGET a11y_basic_widgets PRE_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/basic_widgets.html
+ ${CMAKE_CURRENT_BINARY_DIR}/basic_widgets.html
+ DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/basic_widgets.html
+)
diff --git a/tests/manual/wasm/a11y/basic_widgets/basic_widgets.html b/tests/manual/wasm/a11y/basic_widgets/basic_widgets.html
new file mode 100644
index 0000000000..091809be5c
--- /dev/null
+++ b/tests/manual/wasm/a11y/basic_widgets/basic_widgets.html
@@ -0,0 +1,24 @@
+<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+
+<script src="a11y_basic_widgets.js" async></script>
+
+<script>
+ window.onload = async () => {
+ let qt_instance = await a11y_basic_widgets_entry({
+ qtContainerElements: [document.getElementById("qt_container")],
+ });
+ }
+</script>
+
+
+</head>
+
+<body>
+ <h1>Qt Accessibility Tester</H1>
+ <div id="qt_container" style="width:640px; height:640px"></div>
+</body>
+
+</html>
diff --git a/tests/manual/wasm/a11y/basic_widgets/basica11ywidget.cpp b/tests/manual/wasm/a11y/basic_widgets/basica11ywidget.cpp
new file mode 100644
index 0000000000..dc1688f5b9
--- /dev/null
+++ b/tests/manual/wasm/a11y/basic_widgets/basica11ywidget.cpp
@@ -0,0 +1,114 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "basica11ywidget.h"
+
+BasicA11yWidget::BasicA11yWidget() :
+ m_toolBar (new QToolBar()),
+ m_layout(new QVBoxLayout),
+ m_tabWidget(new QTabWidget)
+{
+ createActions();
+ createMenus();
+ createToolBar();
+ m_lblDateTime =new QLabel("Select Chrono Menu for todays date and time.");
+ m_layout->addWidget(m_lblDateTime);
+ m_tabWidget->addTab(new GeneralTab(), ("General Widget"));
+ m_editView =new EditViewTab();
+ m_tabWidget->addTab(m_editView, ("Edit Widget"));
+ m_layout->addWidget(m_tabWidget);
+
+ m_layout->addStretch();
+
+ connect(m_editView, &EditViewTab::connectToToolBar, this,&BasicA11yWidget::connectToolBar);
+ setLayout(m_layout);
+
+}
+void BasicA11yWidget::handleButton() {
+
+ QDialog *asmSmplDlg = new QDialog(this);
+ QVBoxLayout *vlayout = new QVBoxLayout(asmSmplDlg);
+ asmSmplDlg->setWindowTitle("WebAssembly Dialog box ");
+ QLabel *label = new QLabel("Accessibility Demo sample application developed in Qt.");
+ QAbstractButton *bExit = new QPushButton("Exit");
+ vlayout->addWidget(label);
+ vlayout->addWidget(bExit);
+ asmSmplDlg->setLayout(vlayout);
+ auto p = asmSmplDlg->palette();
+ p.setColor( asmSmplDlg->backgroundRole(), Qt::gray);
+ asmSmplDlg->setPalette(p);
+ asmSmplDlg->show();
+ asmSmplDlg->connect(bExit, SIGNAL(clicked()), asmSmplDlg, SLOT(close()));
+}
+
+void BasicA11yWidget::createToolBar()
+{
+ m_copyAct = new QAction(tr("&Copy"), this);
+ m_copyAct->setShortcuts(QKeySequence::Copy);
+
+ m_pasteAct = new QAction(tr("&Paste"), this);
+ m_pasteAct->setStatusTip(tr("To paste selected text"));
+ m_pasteAct->setShortcuts(QKeySequence::Paste);
+
+ m_cutAct = new QAction(tr("C&ut"), this);
+ m_cutAct->setShortcuts(QKeySequence::Cut);
+
+ m_toolBar->addAction(m_copyAct);
+ m_toolBar->addAction(m_cutAct);
+ m_toolBar->addAction(m_pasteAct);
+ m_layout->addWidget(m_toolBar);
+
+}
+void BasicA11yWidget::connectToolBar()
+{
+ connect(m_copyAct, &QAction::triggered, m_editView->getTextEdit(), &QPlainTextEdit::copy);
+ connect(m_pasteAct, &QAction::triggered, m_editView->getTextEdit(), &QPlainTextEdit::paste);
+ connect(m_cutAct, &QAction::triggered, m_editView->getTextEdit(), &QPlainTextEdit::cut);
+}
+void BasicA11yWidget::createActions()
+{
+ m_DateAct = new QAction( tr("&Date"), this);
+ m_DateAct->setStatusTip(tr("To tell you todays date."));
+ connect(m_DateAct, &QAction::triggered, this, &BasicA11yWidget::todaysDate);
+
+ m_TimeAct = new QAction(tr("&Time"), this);
+ m_TimeAct->setStatusTip(tr("To tell you current time."));
+ connect(m_TimeAct, &QAction::triggered, this, &BasicA11yWidget::currentTime);
+
+}
+void BasicA11yWidget::createMenus()
+{
+ m_menuBar = new QMenuBar();
+
+ m_TodayMenu = m_menuBar->addMenu(tr("&Chrono"));
+ m_TodayMenu->addAction(m_DateAct);
+ m_TodayMenu->addAction(m_TimeAct);
+
+ m_aboutAct = new QAction(tr("&About"), this);
+ m_aboutAct->setStatusTip(tr("Show the application's About box"));
+ connect(m_aboutAct, &QAction::triggered, this, &BasicA11yWidget::about);
+
+ m_helpMenu = m_menuBar->addMenu(tr("&Help"));
+ m_helpMenu->addAction(m_aboutAct);
+
+ m_layout->setMenuBar(m_menuBar);
+}
+
+void BasicA11yWidget::todaysDate()
+{
+ QDateTime dt=QDateTime::currentDateTime();
+ QString str = "Today's Date:"+ dt.date().toString();
+ m_lblDateTime->setText(str);
+}
+
+void BasicA11yWidget::currentTime()
+{
+ QDateTime dt=QDateTime::currentDateTime();
+ QString str = "Current Time:"+ dt.time().toString();
+ m_lblDateTime->setText(str);
+}
+
+void BasicA11yWidget::about()
+{
+ handleButton();
+}
diff --git a/tests/manual/wasm/a11y/basic_widgets/basica11ywidget.h b/tests/manual/wasm/a11y/basic_widgets/basica11ywidget.h
new file mode 100644
index 0000000000..b990d163e5
--- /dev/null
+++ b/tests/manual/wasm/a11y/basic_widgets/basica11ywidget.h
@@ -0,0 +1,41 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtWidgets>
+#include "tabswidget.h"
+
+class BasicA11yWidget: public QWidget
+{
+ Q_OBJECT
+private:
+ QMenu* m_helpMenu = nullptr;
+ QMenu* m_TodayMenu = nullptr;
+ QMenuBar* m_menuBar = nullptr;
+ QToolBar* m_toolBar = nullptr;
+ QLabel* m_lblDateTime = nullptr;
+ QVBoxLayout* m_layout = nullptr ;
+ QTabWidget* m_tabWidget = nullptr;
+ EditViewTab *m_editView = nullptr;
+
+ QAction* m_DateAct = nullptr;
+ QAction* m_TimeAct = nullptr;
+ QAction* m_aboutAct = nullptr;
+ QAction* m_copyAct = nullptr;
+ QAction* m_pasteAct = nullptr;
+ QAction* m_cutAct = nullptr;
+
+public slots:
+ void connectToolBar();
+public:
+ BasicA11yWidget() ;
+ void createActions();
+ void createMenus();
+ void createToolBar();
+
+ void todaysDate();
+ void currentTime();
+ void about();
+ QToolBar* getToolbar(){return m_toolBar;}
+ void handleButton();
+
+};
diff --git a/tests/manual/wasm/a11y/basic_widgets/main.cpp b/tests/manual/wasm/a11y/basic_widgets/main.cpp
new file mode 100644
index 0000000000..52d72428bb
--- /dev/null
+++ b/tests/manual/wasm/a11y/basic_widgets/main.cpp
@@ -0,0 +1,17 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QApplication>
+#include <QtWidgets>
+#include "basica11ywidget.h"
+
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ BasicA11yWidget a11yWidget;
+ a11yWidget.show();
+
+ return app.exec();
+}
+
diff --git a/tests/manual/wasm/a11y/basic_widgets/tabswidget.cpp b/tests/manual/wasm/a11y/basic_widgets/tabswidget.cpp
new file mode 100644
index 0000000000..63428c965a
--- /dev/null
+++ b/tests/manual/wasm/a11y/basic_widgets/tabswidget.cpp
@@ -0,0 +1,63 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "tabswidget.h"
+
+GeneralTab::GeneralTab(QWidget *parent)
+ : QWidget(parent)
+{
+ QVBoxLayout *layout = new QVBoxLayout();
+ layout->setSizeConstraint(QLayout::SetMaximumSize);
+
+ layout->addWidget(new QLabel("This is a text label"));
+
+ QPushButton *btn = new QPushButton("This is a push button");
+ layout->addWidget(btn);
+ connect(btn, &QPushButton::released, this, [=] () {
+ btn->setText("You clicked me");
+ });
+
+ layout->addWidget(new QCheckBox("This is a check box"));
+
+ layout->addWidget(new QRadioButton("Radio 1"));
+ layout->addWidget(new QRadioButton("Radio 2"));
+
+ QSlider *slider = new QSlider(Qt::Horizontal);
+ slider->setTickInterval(10);
+ slider->setTickPosition(QSlider::TicksAbove);
+ layout->addWidget(slider);
+
+ QSpinBox *spin = new QSpinBox();
+ spin->setValue(10);
+ spin->setSingleStep(1);
+ layout->addWidget(spin);
+ layout->addStretch();
+
+ QScrollBar *scrollBar = new QScrollBar(Qt::Horizontal);
+ scrollBar->setFocusPolicy(Qt::StrongFocus);
+ layout->addWidget(scrollBar);
+
+ setLayout(layout);
+}
+
+
+EditViewTab::EditViewTab(QWidget *parent) :
+ QWidget(parent)
+{
+ QVBoxLayout *layout = new QVBoxLayout();
+ layout->setSizeConstraint(QLayout::SetMaximumSize);
+ textEdit = new QPlainTextEdit();
+ textEdit->setPlaceholderText("Enter Text here");
+ layout->addWidget(textEdit);
+ setLayout(layout);
+
+}
+
+void EditViewTab::showEvent( QShowEvent* event ) {
+ if (!b_connected)
+ {
+ emit connectToToolBar();
+ b_connected=true;
+ }
+ QWidget::showEvent( event );
+}
diff --git a/tests/manual/wasm/a11y/basic_widgets/tabswidget.h b/tests/manual/wasm/a11y/basic_widgets/tabswidget.h
new file mode 100644
index 0000000000..6405c0dab7
--- /dev/null
+++ b/tests/manual/wasm/a11y/basic_widgets/tabswidget.h
@@ -0,0 +1,34 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef TABDIALOG_H
+#define TABDIALOG_H
+#include <QTabWidget>
+#include <QtWidgets>
+
+class GeneralTab : public QWidget
+{
+ Q_OBJECT
+
+public:
+
+ explicit GeneralTab(QWidget *parent = nullptr);
+};
+
+class EditViewTab : public QWidget
+{
+
+ Q_OBJECT
+private:
+ bool b_connected = false;
+ QPlainTextEdit* textEdit =nullptr;
+ QToolBar* m_toolbar= nullptr;
+public:
+ void showEvent( QShowEvent* event ) ;
+ QPlainTextEdit* getTextEdit(){return textEdit;}
+ explicit EditViewTab( QWidget *parent = nullptr);
+signals:
+ void connectToToolBar();
+};
+
+#endif
diff --git a/tests/manual/wasm/clipboard/CMakeLists.txt b/tests/manual/wasm/clipboard/CMakeLists.txt
index 4bc60a5edc..40fb8ca308 100644
--- a/tests/manual/wasm/clipboard/CMakeLists.txt
+++ b/tests/manual/wasm/clipboard/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from clipboard.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## clipboard Binary:
@@ -9,7 +10,9 @@ qt_internal_add_manual_test(clipboard
SOURCES
main.cpp
mainwindow.cpp mainwindow.h mainwindow.ui
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ main.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::Core
Qt::Gui
Qt::Widgets
@@ -32,15 +35,6 @@ qt_internal_add_resource(clipboard "data"
#####################################################################
qt_internal_extend_target(clipboard CONDITION (QT_MAJOR_VERSION GREATER 4)
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
)
-
-#### Keys ignored in scope 3:.:.:clipboard.pro:QNX:
-# target.path = "/tmp/$${TARGET}/bin"
-
-#### Keys ignored in scope 5:.:.:clipboard.pro:UNIX AND NOT ANDROID:
-# target.path = "/opt/$${TARGET}/bin"
-
-#### Keys ignored in scope 6:.:.:clipboard.pro:NOT target.path_ISEMPTY:
-# INSTALLS = "target"
diff --git a/tests/manual/wasm/clipboard/clipboard.pro b/tests/manual/wasm/clipboard/clipboard.pro
index 3286049225..cffce46997 100644
--- a/tests/manual/wasm/clipboard/clipboard.pro
+++ b/tests/manual/wasm/clipboard/clipboard.pro
@@ -6,7 +6,7 @@ CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
-#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
+#DEFINES += QT_DISABLE_DEPRECATED_UP_TO=0x060000 # disables all APIs deprecated in Qt 6.0.0 and earlier
SOURCES += \
main.cpp \
diff --git a/tests/manual/wasm/clipboard/main.cpp b/tests/manual/wasm/clipboard/main.cpp
index cdffd01766..aa838f6670 100644
--- a/tests/manual/wasm/clipboard/main.cpp
+++ b/tests/manual/wasm/clipboard/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "mainwindow.h"
diff --git a/tests/manual/wasm/clipboard/mainwindow.cpp b/tests/manual/wasm/clipboard/mainwindow.cpp
index 2b8a162c2d..81a95c4218 100644
--- a/tests/manual/wasm/clipboard/mainwindow.cpp
+++ b/tests/manual/wasm/clipboard/mainwindow.cpp
@@ -1,52 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "mainwindow.h"
#include "ui_mainwindow.h"
@@ -57,6 +12,9 @@
#include <QRandomGenerator>
#include <QPainter>
#include <QKeyEvent>
+#include <QMimeDatabase>
+#include <QFileInfo>
+#include <QCryptographicHash>
#ifdef Q_OS_WASM
#include <emscripten.h>
@@ -79,6 +37,8 @@ MainWindow::MainWindow(QWidget *parent)
ui->imageLabel->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
ui->imageLabel->setScaledContents(true);
+ setAcceptDrops(true);
+
clipboard = QGuiApplication::clipboard();
connect(
clipboard, &QClipboard::dataChanged,
@@ -283,5 +243,72 @@ void MainWindow::on_pasteHtmlButton_clicked()
void MainWindow::on_clearButton_clicked()
{
ui->textEdit_2->clear();
+ ui->imageLabel->clear();
+ ui->imageLabel->setText("Paste or drop image here");
+}
+
+void MainWindow::dragEnterEvent(QDragEnterEvent* e)
+{
+ e->acceptProposedAction();
}
+void MainWindow::dropEvent(QDropEvent* e)
+{
+ QString sizeStr;
+ ui->textEdit_2->insertPlainText("New Drop has mime formats: " + e->mimeData()->formats().join(", ") + "\n");
+
+ QString urlMessage = QString(" Drop contains %1 urls\n").arg(e->mimeData()->urls().count());
+ ui->textEdit_2->insertPlainText(urlMessage);
+
+ foreach (const QUrl &url, e->mimeData()->urls()) {
+
+ QString urlStr = url.toDisplayString();
+ int size = urlStr.length();
+ sizeStr.setNum(size);
+
+ QString fileName = url.toLocalFile();
+ QString sha1;
+ QFile file(fileName);
+ if (file.exists()) {
+ file.open(QFile::ReadOnly);
+ sha1 = QCryptographicHash::hash(file.readAll(), QCryptographicHash::Sha1).toHex();
+ }
+
+ ui->textEdit_2->insertPlainText(" Drop has url data length: " + sizeStr + "\n");
+ ui->textEdit_2->insertPlainText(" " + urlStr + " sha1 " + sha1.left(8) + "\n");
+ }
+ ui->textEdit_2->insertPlainText("\n");
+
+ if (e->mimeData()->hasImage()) {
+ qsizetype imageSize = qvariant_cast<QImage>(e->mimeData()->imageData()).sizeInBytes();
+ sizeStr.setNum(imageSize);
+ ui->textEdit_2->insertPlainText(" Drop has Image data length: " + sizeStr + "\n");
+ QImage image = qvariant_cast<QImage>(e->mimeData()->imageData());
+ setImage(image);
+ const QString message = tr("Obtained image from drop, %1x%2, Depth: %3")
+ .arg(image.width()).arg(image.height()).arg(image.depth());
+ statusBar()->showMessage(message);
+ }
+
+ if (e->mimeData()->hasHtml()) {
+ int size = e->mimeData()->html().length();
+ sizeStr.setNum(size);
+ ui->textEdit_2->insertPlainText(" Drop has html data length: " + sizeStr + "\n");
+ for (const auto &line : e->mimeData()->html().split('\n', Qt::SkipEmptyParts))
+ ui->textEdit_2->insertPlainText(" " + line + "\n");
+ }
+ if (e->mimeData()->hasText()) {
+ int size = e->mimeData()->text().length();
+ sizeStr.setNum(size);
+ ui->textEdit_2->insertPlainText(" Drop has text data length: " + sizeStr + "\n");
+ for (const auto &line : e->mimeData()->text().split('\n', Qt::SkipEmptyParts))
+ ui->textEdit_2->insertPlainText(" " + line + "\n");
+ }
+
+ const QString message = tr(" Drop accepted, %1 ")
+ .arg(e->mimeData()->formats().join(' '));
+
+ statusBar()->showMessage(message + sizeStr);
+
+ e->acceptProposedAction();
+}
diff --git a/tests/manual/wasm/clipboard/mainwindow.h b/tests/manual/wasm/clipboard/mainwindow.h
index 69e21ba8a2..fe101ad494 100644
--- a/tests/manual/wasm/clipboard/mainwindow.h
+++ b/tests/manual/wasm/clipboard/mainwindow.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
@@ -90,5 +43,10 @@ private:
bool eventFilter(QObject *obj, QEvent *event) override;
QColor generateRandomColor();
+
+protected:
+ void dragEnterEvent(QDragEnterEvent *e) override;
+ void dropEvent(QDropEvent *e) override;
+
};
#endif // MAINWINDOW_H
diff --git a/tests/manual/wasm/clipboard/mainwindow.ui b/tests/manual/wasm/clipboard/mainwindow.ui
index 84606598cc..17368fdc68 100644
--- a/tests/manual/wasm/clipboard/mainwindow.ui
+++ b/tests/manual/wasm/clipboard/mainwindow.ui
@@ -144,13 +144,13 @@
</property>
<property name="html">
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
-&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
+&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;meta charset=&quot;utf-8&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
-&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
+&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'.AppleSystemUIFont'; font-size:13pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;img src=&quot;:/data/qticon64.png&quot; /&gt;&lt;/p&gt;
-&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a name=&quot;tw-target&quot;&gt;&lt;/a&gt;&lt;span style=&quot; font-family:'monospace'; font-weight:600;&quot;&gt;L&lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-weight:600;&quot;&gt;orem&lt;/span&gt;&lt;span style=&quot; font-family:'monospace';&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-style:italic;&quot;&gt;ipsum&lt;/span&gt;&lt;span style=&quot; font-family:'monospace';&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; text-decoration: underline;&quot;&gt;dolor&lt;/span&gt;&lt;span style=&quot; font-family:'monospace';&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; vertical-align:super;&quot;&gt;sit&lt;/span&gt;&lt;span style=&quot; font-family:'monospace';&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; vertical-align:sub;&quot;&gt;amet&lt;/span&gt;&lt;span style=&quot; font-family:'monospace';&quot;&gt;, &lt;/span&gt;&lt;a href=&quot;http://localhost&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;consectetur&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-family:'monospace';&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; color:#7320a4;&quot;&gt;adipiscing&lt;/span&gt;&lt;span style=&quot; font-family:'monospace';&quot;&gt; elit. Som medlemmer av byrået ønsker imidlertid en eiendomsmegler. Ullamcorper største lekseforfatter. Dolor et consectetuer litt ernæring. Maecenas smile jord sitter Vulputate medlemmer og, basketball ethvert problem. Reservert lever nå propaganda. På makroen investere laoreet kan, av enhver latter. Jasmine som en TV -tegneserie.&lt;/span&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
-&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'monospace';&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;a name=&quot;tw-target&quot;&gt;&lt;/a&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt; font-weight:600;&quot;&gt;L&lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt; font-weight:600;&quot;&gt;orem&lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt; font-style:italic;&quot;&gt;ipsum&lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt; text-decoration: underline;&quot;&gt;dolor&lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt; vertical-align:super;&quot;&gt;sit&lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt; vertical-align:sub;&quot;&gt;amet&lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt;&quot;&gt;, &lt;/span&gt;&lt;a href=&quot;http://localhost&quot;&gt;&lt;span style=&quot; font-family:'Sans Serif'; font-size:9pt; text-decoration: underline; color:#0000ff;&quot;&gt;consectetur&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt; color:#7320a4;&quot;&gt;adipiscing&lt;/span&gt;&lt;span style=&quot; font-family:'monospace'; font-size:9pt;&quot;&gt; elit. Som medlemmer av byrået ønsker imidlertid en eiendomsmegler. Ullamcorper største lekseforfatter. Dolor et consectetuer litt ernæring. Maecenas smile jord sitter Vulputate medlemmer og, basketball ethvert problem. Reservert lever nå propaganda. På makroen investere laoreet kan, av enhver latter. Jasmine som en TV -tegneserie.&lt;/span&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
+&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'monospace'; font-size:9pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
@@ -172,7 +172,7 @@ p, li { white-space: pre-wrap; }
<enum>QFrame::Raised</enum>
</property>
<property name="text">
- <string>Paste image here</string>
+ <string>Paste or drop content here</string>
</property>
<property name="scaledContents">
<bool>true</bool>
@@ -211,7 +211,7 @@ p, li { white-space: pre-wrap; }
<x>0</x>
<y>0</y>
<width>1222</width>
- <height>29</height>
+ <height>24</height>
</rect>
</property>
</widget>
diff --git a/tests/manual/wasm/cursors/CMakeLists.txt b/tests/manual/wasm/cursors/CMakeLists.txt
index 674c6d4d2b..93f93064cf 100644
--- a/tests/manual/wasm/cursors/CMakeLists.txt
+++ b/tests/manual/wasm/cursors/CMakeLists.txt
@@ -1,9 +1,12 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_manual_test(cursors
GUI
SOURCES
MainWindow.cpp MainWindow.h MainWindow.ui
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Gui
Qt::Widgets
diff --git a/tests/manual/wasm/cursors/MainWindow.cpp b/tests/manual/wasm/cursors/MainWindow.cpp
index a850856ab3..c6e4fbcca1 100644
--- a/tests/manual/wasm/cursors/MainWindow.cpp
+++ b/tests/manual/wasm/cursors/MainWindow.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "MainWindow.h"
#include "ui_MainWindow.h"
diff --git a/tests/manual/wasm/cursors/MainWindow.h b/tests/manual/wasm/cursors/MainWindow.h
index cda4ef19ba..ebaeed9e5c 100644
--- a/tests/manual/wasm/cursors/MainWindow.h
+++ b/tests/manual/wasm/cursors/MainWindow.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#pragma once
#include <QMainWindow>
diff --git a/tests/manual/wasm/cursors/main.cpp b/tests/manual/wasm/cursors/main.cpp
index c0b90f2c37..9a59cdd994 100644
--- a/tests/manual/wasm/cursors/main.cpp
+++ b/tests/manual/wasm/cursors/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "MainWindow.h"
#include <QApplication>
diff --git a/tests/manual/wasm/eventloop/CMakeLists.txt b/tests/manual/wasm/eventloop/CMakeLists.txt
index 96c7fd45bb..132fd15dbb 100644
--- a/tests/manual/wasm/eventloop/CMakeLists.txt
+++ b/tests/manual/wasm/eventloop/CMakeLists.txt
@@ -1,4 +1,8 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
add_subdirectory(asyncify_exec)
+add_subdirectory(eventloop_auto)
add_subdirectory(main_exec)
add_subdirectory(main_noexec)
add_subdirectory(thread_exec)
diff --git a/tests/manual/wasm/eventloop/README.md b/tests/manual/wasm/eventloop/README.md
index e5d4b92306..e1a5a1a3b7 100644
--- a/tests/manual/wasm/eventloop/README.md
+++ b/tests/manual/wasm/eventloop/README.md
@@ -12,3 +12,4 @@ Contents
main_noexec Qt main() without QApplication::exec()
dialog_exec Shows how QDialog::exec() also does not return
thread_exec Shows how to use QThread::exec()
+ eventloop_auto Event loop autotest (manually run)
diff --git a/tests/manual/wasm/eventloop/asyncify_exec/CMakeLists.txt b/tests/manual/wasm/eventloop/asyncify_exec/CMakeLists.txt
index 09b5cdb1e9..fe7cfb9030 100644
--- a/tests/manual/wasm/eventloop/asyncify_exec/CMakeLists.txt
+++ b/tests/manual/wasm/eventloop/asyncify_exec/CMakeLists.txt
@@ -1,6 +1,12 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_manual_test(asyncify_exec
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
)
+
+# Enable asyncify for this test. Also enable optimizations in order to reduce the binary size.
+target_link_options(asyncify_exec PUBLIC -sASYNCIFY -Os)
diff --git a/tests/manual/wasm/eventloop/asyncify_exec/main.cpp b/tests/manual/wasm/eventloop/asyncify_exec/main.cpp
index d2b6d83474..f09163184d 100644
--- a/tests/manual/wasm/eventloop/asyncify_exec/main.cpp
+++ b/tests/manual/wasm/eventloop/asyncify_exec/main.cpp
@@ -1,62 +1,13 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtCore>
-// This test shows how to asyncify enables blocking
-// the main thread on QEventLoop::exec(), while event
-// provessing continues.
+// This test shows how to use asyncify to enable blocking the main
+// thread on QEventLoop::exec(), while event processing continues.
int main(int argc, char **argv)
{
QCoreApplication app(argc, argv);
-#ifdef QT_HAVE_EMSCRIPTEN_ASYNCIFY
QTimer::singleShot(1000, []() {
QEventLoop loop;
@@ -69,10 +20,6 @@ int main(int argc, char **argv)
loop.exec();
qDebug() << "Returned from QEventLoop::exec()";
});
-#else
- qDebug() << "This test requires Emscripten asyncify. To enable,"
- << "configure Qt with -device-option QT_EMSCRIPTEN_ASYNCIFY=1";
-#endif
app.exec();
}
diff --git a/tests/manual/wasm/eventloop/dialog_exec/CMakeLists.txt b/tests/manual/wasm/eventloop/dialog_exec/CMakeLists.txt
index 00bbca0b9d..ac18643c63 100644
--- a/tests/manual/wasm/eventloop/dialog_exec/CMakeLists.txt
+++ b/tests/manual/wasm/eventloop/dialog_exec/CMakeLists.txt
@@ -1,8 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_manual_test(dialog_exec
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Gui
Qt::Widgets
diff --git a/tests/manual/wasm/eventloop/dialog_exec/main.cpp b/tests/manual/wasm/eventloop/dialog_exec/main.cpp
index d10230262d..f5b072fc0b 100644
--- a/tests/manual/wasm/eventloop/dialog_exec/main.cpp
+++ b/tests/manual/wasm/eventloop/dialog_exec/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui>
#include <QtWidgets>
diff --git a/tests/manual/wasm/eventloop/eventloop_auto/CMakeLists.txt b/tests/manual/wasm/eventloop/eventloop_auto/CMakeLists.txt
new file mode 100644
index 0000000000..9bfa875be7
--- /dev/null
+++ b/tests/manual/wasm/eventloop/eventloop_auto/CMakeLists.txt
@@ -0,0 +1,43 @@
+include_directories(../../qtwasmtestlib/)
+
+# default buid
+qt_internal_add_manual_test(eventloop_auto
+ SOURCES
+ main.cpp
+ ../../qtwasmtestlib/qtwasmtestlib.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::CorePrivate
+)
+
+add_custom_command(
+ TARGET eventloop_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/eventloop_auto.html
+ ${CMAKE_CURRENT_BINARY_DIR}/eventloop_auto.html)
+
+add_custom_command(
+ TARGET eventloop_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../qtwasmtestlib/qtwasmtestlib.js
+ ${CMAKE_CURRENT_BINARY_DIR}/qtwasmtestlib.js)
+
+# asyncify enabled build
+qt_internal_add_manual_test(eventloop_auto_asyncify
+ SOURCES
+ main.cpp
+ ../../qtwasmtestlib/qtwasmtestlib.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::CorePrivate
+)
+
+target_link_options(eventloop_auto_asyncify PRIVATE -sASYNCIFY -Os)
+
+add_custom_command(
+ TARGET eventloop_auto_asyncify POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/eventloop_auto_asyncify.html
+ ${CMAKE_CURRENT_BINARY_DIR}/eventloop_auto_asyncify.html)
+
+
diff --git a/tests/manual/wasm/eventloop/eventloop_auto/eventloop_auto.html b/tests/manual/wasm/eventloop/eventloop_auto/eventloop_auto.html
new file mode 100644
index 0000000000..e8e35abcbb
--- /dev/null
+++ b/tests/manual/wasm/eventloop/eventloop_auto/eventloop_auto.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<script type="text/javascript" src="qtwasmtestlib.js"></script>
+<script type="text/javascript" src="eventloop_auto.js"></script>
+<script>
+ window.onload = () => {
+ runTestCase(eventloop_auto_entry, document.getElementById("log"));
+ };
+</script>
+<p>Running event dispatcher auto test.</p>
+<div id="log"></div>
diff --git a/tests/manual/wasm/eventloop/eventloop_auto/eventloop_auto_asyncify.html b/tests/manual/wasm/eventloop/eventloop_auto/eventloop_auto_asyncify.html
new file mode 100644
index 0000000000..f09b29d85b
--- /dev/null
+++ b/tests/manual/wasm/eventloop/eventloop_auto/eventloop_auto_asyncify.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<script type="text/javascript" src="qtwasmtestlib.js"></script>
+<script type="text/javascript" src="eventloop_auto_asyncify.js"></script>
+<script>
+ window.onload = () => {
+ runTestCase(eventloop_auto_asyncify_entry, document.getElementById("log"));
+ };
+</script>
+<p>Running event dispatcher auto test.</p>
+<div id="log"></div>
diff --git a/tests/manual/wasm/eventloop/eventloop_auto/main.cpp b/tests/manual/wasm/eventloop/eventloop_auto/main.cpp
new file mode 100644
index 0000000000..32af372b62
--- /dev/null
+++ b/tests/manual/wasm/eventloop/eventloop_auto/main.cpp
@@ -0,0 +1,327 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QCoreApplication>
+#include <QtCore/QEvent>
+#include <QtCore/QMutex>
+#include <QtCore/QObject>
+#include <QtCore/QThread>
+#include <QtCore/QTimer>
+#include <QtCore/private/qstdweb_p.h>
+
+#include <qtwasmtestlib.h>
+
+#include "emscripten.h"
+
+const int timerTimeout = 10;
+
+class WasmEventDispatcherTest: public QObject
+{
+ Q_OBJECT
+private slots:
+ void postEventMainThread();
+ void timerMainThread();
+ void timerMainThreadMultiple();
+
+#if QT_CONFIG(thread)
+ void postEventSecondaryThread();
+ void postEventSecondaryThreads();
+ void postEventToSecondaryThread();
+ void timerSecondaryThread();
+#endif
+
+ void postEventAsyncify();
+ void timerAsyncify();
+ void postEventAsyncifyLoop();
+
+private:
+// Disabled test function: Asyncify wait on pthread_join is not supported,
+// see https://github.com/emscripten-core/emscripten/issues/9910
+#if QT_CONFIG(thread)
+ void threadAsyncifyWait();
+#endif
+};
+
+class EventTarget : public QObject
+{
+ Q_OBJECT
+
+public:
+ static EventTarget *create(std::function<void()> callback)
+ {
+ return new EventTarget(callback);
+ }
+
+ static QEvent *createEvent()
+ {
+ return new QEvent(QEvent::User);
+ }
+
+protected:
+ EventTarget(std::function<void()> callback)
+ : m_callback(callback) { }
+
+ bool event(QEvent *evt)
+ {
+ if (evt->type() == QEvent::User) {
+ m_callback();
+ deleteLater();
+ return true;
+ }
+ return QObject::event(evt);
+ }
+
+private:
+ std::function<void()> m_callback;
+};
+
+class CompleteTestFunctionRefGuard {
+public:
+ CompleteTestFunctionRefGuard(CompleteTestFunctionRefGuard const&) = delete;
+ CompleteTestFunctionRefGuard& operator=(CompleteTestFunctionRefGuard const&) = delete;
+
+ static CompleteTestFunctionRefGuard *create() {
+ return new CompleteTestFunctionRefGuard();
+ }
+
+ void ref() {
+ QMutexLocker lock(&mutex);
+ ++m_counter;
+ }
+
+ void deref() {
+ const bool finalDeref = [this] {
+ QMutexLocker lock(&mutex);
+ return --m_counter == 0;
+ }();
+
+ if (finalDeref)
+ QtWasmTest::completeTestFunction();
+ }
+private:
+ CompleteTestFunctionRefGuard() { };
+
+ QMutex mutex;
+ int m_counter = 0;
+};
+
+#if QT_CONFIG(thread)
+
+class TestThread : public QThread
+{
+public:
+ static QThread *create(std::function<void()> started, std::function<void()> finished)
+ {
+ TestThread *thread = new TestThread();
+ connect(thread, &QThread::started, [started]() {
+ started();
+ });
+ connect(thread, &QThread::finished, [thread, finished]() {
+ finished();
+ thread->deleteLater();
+ });
+ thread->start();
+ return thread;
+ }
+};
+
+#endif
+
+// Post event to the main thread and verify that it is processed.
+void WasmEventDispatcherTest::postEventMainThread()
+{
+ QCoreApplication::postEvent(EventTarget::create([](){
+ QtWasmTest::completeTestFunction();
+ }), EventTarget::createEvent());
+}
+
+// Create a timer on the main thread and verify that it fires
+void WasmEventDispatcherTest::timerMainThread()
+{
+ QTimer::singleShot(timerTimeout, [](){
+ QtWasmTest::completeTestFunction();
+ });
+}
+
+void WasmEventDispatcherTest::timerMainThreadMultiple()
+{
+ CompleteTestFunctionRefGuard *completeGuard = CompleteTestFunctionRefGuard::create();
+ int timers = 10;
+ for (int i = 0; i < timers; ++i) {
+ completeGuard->ref();
+ QTimer::singleShot(timerTimeout * i, [completeGuard](){
+ completeGuard->deref();
+ });
+ }
+}
+
+#if QT_CONFIG(thread)
+
+// Post event on a secondary thread and verify that it is processed.
+void WasmEventDispatcherTest::postEventSecondaryThread()
+{
+ auto started = [](){
+ QCoreApplication::postEvent(EventTarget::create([](){
+ QThread::currentThread()->quit();
+ }), EventTarget::createEvent());
+ };
+
+ auto finished = [](){
+ QtWasmTest::completeTestFunction();
+ };
+
+ TestThread::create(started, finished);
+}
+
+// Post event _to_ a secondary thread and verify that it is processed.
+void WasmEventDispatcherTest::postEventToSecondaryThread()
+{
+ auto started = [](){};
+ auto finished = [](){
+ QtWasmTest::completeTestFunction();
+ };
+
+ QThread *t = TestThread::create(started, finished);
+ EventTarget *target = EventTarget::create([](){
+ QThread::currentThread()->quit();
+ });
+ target->moveToThread(t);
+ QCoreApplication::postEvent(target, EventTarget::createEvent());
+}
+
+// Post events to many secondary threads and verify that they are processed.
+void WasmEventDispatcherTest::postEventSecondaryThreads()
+{
+ // This test completes afer all threads has finished
+ CompleteTestFunctionRefGuard *completeGuard = CompleteTestFunctionRefGuard::create();
+ completeGuard->ref(); // including this thread
+
+ auto started = [](){
+ QCoreApplication::postEvent(EventTarget::create([](){
+ QThread::currentThread()->quit();
+ }), EventTarget::createEvent());
+ };
+
+ auto finished = [completeGuard](){
+ completeGuard->deref();
+ };
+
+ // Start a nymber of threads in parallel, keeping in mind that the browser
+ // has some max number of concurrent web workers (maybe 20), and that starting
+ // a new web worker requires completing a GET network request for the worker's JS.
+ const int numThreads = 10;
+ for (int i = 0; i < numThreads; ++i) {
+ completeGuard->ref();
+ TestThread::create(started, finished);
+ }
+
+ completeGuard->deref();
+}
+
+// Create a timer a secondary thread and verify that it fires
+void WasmEventDispatcherTest::timerSecondaryThread()
+{
+ auto started = [](){
+ QTimer::singleShot(timerTimeout, [](){
+ QThread::currentThread()->quit();
+ });
+ };
+
+ auto finished = [](){
+ QtWasmTest::completeTestFunction();
+ };
+
+ TestThread::create(started, finished);
+}
+
+#endif
+
+// Post an event to the main thread and asyncify wait for it
+void WasmEventDispatcherTest::postEventAsyncify()
+{
+ if (!qstdweb::haveAsyncify()) {
+ QtWasmTest::completeTestFunction(QtWasmTest::TestResult::Skip, "requires asyncify");
+ return;
+ }
+
+ QEventLoop loop;
+ QCoreApplication::postEvent(EventTarget::create([&loop](){
+ loop.quit();
+ }), EventTarget::createEvent());
+ loop.exec();
+
+ QtWasmTest::completeTestFunction();
+}
+
+// Create a timer on the main thread and asyncify wait for it
+void WasmEventDispatcherTest::timerAsyncify()
+{
+ if (!qstdweb::haveAsyncify()) {
+ QtWasmTest::completeTestFunction(QtWasmTest::TestResult::Skip, "requires asyncify");
+ return;
+ }
+
+ QEventLoop loop;
+ QTimer::singleShot(timerTimeout, [&loop](){
+ loop.quit();
+ });
+ loop.exec();
+
+ QtWasmTest::completeTestFunction();
+}
+
+// Asyncify wait in a loop
+void WasmEventDispatcherTest::postEventAsyncifyLoop()
+{
+ if (!qstdweb::haveAsyncify()) {
+ QtWasmTest::completeTestFunction(QtWasmTest::TestResult::Skip, "requires asyncify");
+ return;
+ }
+
+ for (int i = 0; i < 10; ++i) {
+ QEventLoop loop;
+ QCoreApplication::postEvent(EventTarget::create([&loop]() {
+ loop.quit();
+ }), EventTarget::createEvent());
+ loop.exec();
+ }
+
+ QtWasmTest::completeTestFunction();
+}
+
+#if QT_CONFIG(thread)
+// Asyncify wait for QThread::wait() / pthread_join()
+void WasmEventDispatcherTest::threadAsyncifyWait()
+{
+ if (!qstdweb::haveAsyncify())
+ QtWasmTest::completeTestFunction(QtWasmTest::TestResult::Skip, "requires asyncify");
+
+ const int threadCount = 15;
+
+ QVector<QThread *> threads;
+ threads.reserve(threadCount);
+
+ for (int i = 0; i < threadCount; ++i) {
+ QThread *thread = new QThread();
+ threads.push_back(thread);
+ thread->start();
+ }
+
+ for (int i = 0; i < threadCount; ++i) {
+ QThread *thread = threads[i];
+ thread->wait();
+ delete thread;
+ }
+
+ QtWasmTest::completeTestFunction();
+}
+#endif
+
+int main(int argc, char **argv)
+{
+ auto testObject = std::make_shared<WasmEventDispatcherTest>();
+ QtWasmTest::initTestCase<QCoreApplication>(argc, argv, testObject);
+ return 0;
+}
+
+#include "main.moc"
diff --git a/tests/manual/wasm/eventloop/main_exec/CMakeLists.txt b/tests/manual/wasm/eventloop/main_exec/CMakeLists.txt
index b5d987f8cb..1f263ddbcf 100644
--- a/tests/manual/wasm/eventloop/main_exec/CMakeLists.txt
+++ b/tests/manual/wasm/eventloop/main_exec/CMakeLists.txt
@@ -1,8 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_manual_test(main_exec
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Gui
)
diff --git a/tests/manual/wasm/eventloop/main_exec/main.cpp b/tests/manual/wasm/eventloop/main_exec/main.cpp
index d1eeaeaae3..17eccafe18 100644
--- a/tests/manual/wasm/eventloop/main_exec/main.cpp
+++ b/tests/manual/wasm/eventloop/main_exec/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui>
// This example demonstrates how the standard Qt main()
diff --git a/tests/manual/wasm/eventloop/main_noexec/CMakeLists.txt b/tests/manual/wasm/eventloop/main_noexec/CMakeLists.txt
index 23d48b626f..e929089479 100644
--- a/tests/manual/wasm/eventloop/main_noexec/CMakeLists.txt
+++ b/tests/manual/wasm/eventloop/main_noexec/CMakeLists.txt
@@ -1,8 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_manual_test(main_noexec
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Gui
)
diff --git a/tests/manual/wasm/eventloop/main_noexec/main.cpp b/tests/manual/wasm/eventloop/main_noexec/main.cpp
index 16f5a2b026..6ddd88bd14 100644
--- a/tests/manual/wasm/eventloop/main_noexec/main.cpp
+++ b/tests/manual/wasm/eventloop/main_noexec/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui>
// This example demonstrates how to create QGuiApplication
diff --git a/tests/manual/wasm/eventloop/thread_exec/CMakeLists.txt b/tests/manual/wasm/eventloop/thread_exec/CMakeLists.txt
index 1c845510df..765ccee4f1 100644
--- a/tests/manual/wasm/eventloop/thread_exec/CMakeLists.txt
+++ b/tests/manual/wasm/eventloop/thread_exec/CMakeLists.txt
@@ -1,8 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_manual_test(thread_exec
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Gui
)
diff --git a/tests/manual/wasm/eventloop/thread_exec/main.cpp b/tests/manual/wasm/eventloop/thread_exec/main.cpp
index fb477843d8..589066b34d 100644
--- a/tests/manual/wasm/eventloop/thread_exec/main.cpp
+++ b/tests/manual/wasm/eventloop/thread_exec/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui>
class EventTarget : public QObject
diff --git a/tests/manual/wasm/localfiles/CMakeLists.txt b/tests/manual/wasm/localfiles/CMakeLists.txt
index 4e06a916ad..6d607d1f5a 100644
--- a/tests/manual/wasm/localfiles/CMakeLists.txt
+++ b/tests/manual/wasm/localfiles/CMakeLists.txt
@@ -1,8 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_manual_test(localfiles
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Gui
Qt::Widgets
diff --git a/tests/manual/wasm/localfiles/main.cpp b/tests/manual/wasm/localfiles/main.cpp
index 9dfc30885c..862bff50a4 100644
--- a/tests/manual/wasm/localfiles/main.cpp
+++ b/tests/manual/wasm/localfiles/main.cpp
@@ -1,100 +1,138 @@
-/****************************************************************************
-**
-** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets/QtWidgets>
+#include <emscripten/val.h>
+#include <emscripten.h>
+
+class AppWindow : public QObject
+{
+Q_OBJECT
+public:
+ AppWindow() : m_layout(new QVBoxLayout(&m_loadFileUi)),
+ m_window(emscripten::val::global("window")),
+ m_showOpenFilePickerFunction(m_window["showOpenFilePicker"]),
+ m_showSaveFilePickerFunction(m_window["showSaveFilePicker"])
+ {
+ addWidget<QLabel>("Filename filter");
+
+ const bool localFileApiAvailable =
+ !m_showOpenFilePickerFunction.isUndefined() && !m_showSaveFilePickerFunction.isUndefined();
+
+ m_useLocalFileApisCheckbox = addWidget<QCheckBox>("Use the window.showXFilePicker APIs");
+ m_useLocalFileApisCheckbox->setEnabled(localFileApiAvailable);
+ m_useLocalFileApisCheckbox->setChecked(localFileApiAvailable);
+
+ m_filterEdit = addWidget<QLineEdit>("Images (*.png *.jpg);;PDF (*.pdf);;*.txt");
+
+ auto* loadFile = addWidget<QPushButton>("Load File");
+
+ m_fileInfo = addWidget<QLabel>("Opened file:");
+ m_fileInfo->setTextInteractionFlags(Qt::TextSelectableByMouse);
+
+ m_fileHash = addWidget<QLabel>("Sha256:");
+ m_fileHash->setTextInteractionFlags(Qt::TextSelectableByMouse);
+
+ addWidget<QLabel>("Saved file name");
+ m_savedFileNameEdit = addWidget<QLineEdit>("qttestresult");
+
+ m_saveFile = addWidget<QPushButton>("Save File");
+ m_saveFile->setEnabled(false);
+
+ m_layout->addStretch();
+
+ m_loadFileUi.setLayout(m_layout);
+
+ QObject::connect(m_useLocalFileApisCheckbox, &QCheckBox::toggled, std::bind(&AppWindow::onUseLocalFileApisCheckboxToggled, this));
+
+ QObject::connect(loadFile, &QPushButton::clicked, this, &AppWindow::onLoadClicked);
+
+ QObject::connect(m_saveFile, &QPushButton::clicked, std::bind(&AppWindow::onSaveClicked, this));
+ }
+
+ void show() {
+ m_loadFileUi.show();
+ }
+
+ ~AppWindow() = default;
+
+private Q_SLOTS:
+ void onUseLocalFileApisCheckboxToggled()
+ {
+ m_window.set("showOpenFilePicker",
+ m_useLocalFileApisCheckbox->isChecked() ?
+ m_showOpenFilePickerFunction : emscripten::val::undefined());
+ m_window.set("showSaveFilePicker",
+ m_useLocalFileApisCheckbox->isChecked() ?
+ m_showSaveFilePickerFunction : emscripten::val::undefined());
+ }
+
+ void onFileContentReady(const QString &fileName, const QByteArray &fileContents)
+ {
+ m_fileContent = fileContents;
+ m_fileInfo->setText(QString("Opened file: %1 size: %2").arg(fileName).arg(fileContents.size()));
+ m_saveFile->setEnabled(true);
+
+ QTimer::singleShot(100, this, &AppWindow::computeAndDisplayFileHash); // update UI before computing hash
+ }
+
+ void computeAndDisplayFileHash()
+ {
+ QByteArray hash = QCryptographicHash::hash(m_fileContent, QCryptographicHash::Sha256);
+ m_fileHash->setText(QString("Sha256: %1").arg(QString(hash.toHex())));
+ }
+
+ void onFileSaved(bool success)
+ {
+ m_fileInfo->setText(QString("File save result: %1").arg(success ? "success" : "failed"));
+ }
+
+ void onLoadClicked()
+ {
+ QFileDialog::getOpenFileContent(
+ m_filterEdit->text(),
+ std::bind(&AppWindow::onFileContentReady, this, std::placeholders::_1, std::placeholders::_2),
+ &m_loadFileUi);
+ }
+
+ void onSaveClicked()
+ {
+ m_fileInfo->setText("Saving file... (no result information with current API)");
+ QFileDialog::saveFileContent(m_fileContent, m_savedFileNameEdit->text());
+ }
+
+private:
+ template <class T, class... Args>
+ T* addWidget(Args... args)
+ {
+ T* widget = new T(std::forward<Args>(args)..., &m_loadFileUi);
+ m_layout->addWidget(widget);
+ return widget;
+ }
+
+ QWidget m_loadFileUi;
+
+ QCheckBox* m_useLocalFileApisCheckbox;
+ QLineEdit* m_filterEdit;
+ QVBoxLayout *m_layout;
+ QLabel* m_fileInfo;
+ QLabel* m_fileHash;
+ QLineEdit* m_savedFileNameEdit;
+ QPushButton* m_saveFile;
+
+ emscripten::val m_window;
+ emscripten::val m_showOpenFilePickerFunction;
+ emscripten::val m_showSaveFilePickerFunction;
+
+ QByteArray m_fileContent;
+};
+
int main(int argc, char **argv)
{
- QApplication app(argc, argv);
-
- QByteArray content;
-
- QWidget loadFileUi;
- QVBoxLayout *layout = new QVBoxLayout();
- QPushButton *loadFile = new QPushButton("Load File");
- QLabel *fileInfo = new QLabel("Opened file:");
- fileInfo->setTextInteractionFlags(Qt::TextSelectableByMouse);
- QLabel *fileHash = new QLabel("Sha256:");
- fileHash->setTextInteractionFlags(Qt::TextSelectableByMouse);
- QPushButton *saveFile = new QPushButton("Save File");
- saveFile->setEnabled(false);
-
- auto onFileReady = [=, &content](const QString &fileName, const QByteArray &fileContents) {
- content = fileContents;
- fileInfo->setText(QString("Opened file: %1 size: %2").arg(fileName).arg(fileContents.size()));
- saveFile->setEnabled(true);
-
- auto computeDisplayFileHash = [=](){
- QByteArray hash = QCryptographicHash::hash(fileContents, QCryptographicHash::Sha256);
- fileHash->setText(QString("Sha256: %1").arg(QString(hash.toHex())));
- };
-
- QTimer::singleShot(100, computeDisplayFileHash); // update UI before computing hash
- };
- auto onLoadClicked = [=](){
- QFileDialog::getOpenFileContent("*.*", onFileReady);
- };
- QObject::connect(loadFile, &QPushButton::clicked, onLoadClicked);
-
- auto onSaveClicked = [=, &content]() {
- QFileDialog::saveFileContent(content, "qtsavefiletest.dat");
- };
- QObject::connect(saveFile, &QPushButton::clicked, onSaveClicked);
-
- layout->addWidget(loadFile);
- layout->addWidget(fileInfo);
- layout->addWidget(fileHash);
- layout->addWidget(saveFile);
- layout->addStretch();
-
- loadFileUi.setLayout(layout);
- loadFileUi.show();
-
- return app.exec();
+ QApplication application(argc, argv);
+ AppWindow window;
+ window.show();
+ return application.exec();
}
+
+#include "main.moc"
diff --git a/tests/manual/wasm/localfonts/CMakeLists.txt b/tests/manual/wasm/localfonts/CMakeLists.txt
new file mode 100644
index 0000000000..b5df4ad9fa
--- /dev/null
+++ b/tests/manual/wasm/localfonts/CMakeLists.txt
@@ -0,0 +1,4 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+add_subdirectory(fontloading)
diff --git a/tests/manual/wasm/localfonts/fontloading/CMakeLists.txt b/tests/manual/wasm/localfonts/fontloading/CMakeLists.txt
new file mode 100644
index 0000000000..c3dc37d27d
--- /dev/null
+++ b/tests/manual/wasm/localfonts/fontloading/CMakeLists.txt
@@ -0,0 +1,20 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(fontloading
+ GUI
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::Gui
+ Qt::Widgets
+)
+
+add_custom_command(
+ TARGET fontloading POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/fontloading.html
+ ${CMAKE_CURRENT_BINARY_DIR}/fontloading.html)
+#add_custom_target(html DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/fontloading.html)
+#add_dependencies(fontloading html)
diff --git a/tests/manual/wasm/localfonts/fontloading/fontloading.html b/tests/manual/wasm/localfonts/fontloading/fontloading.html
new file mode 100644
index 0000000000..619217205b
--- /dev/null
+++ b/tests/manual/wasm/localfonts/fontloading/fontloading.html
@@ -0,0 +1,167 @@
+<!doctype html>
+
+<script src="qtloader.js"></script>
+<script src="fontloading.js"></script>
+
+<style>
+ body {
+ padding: 5px;
+ }
+
+ .container {
+ display: flex;
+ }
+
+ .column {
+ flex: 1;
+ }
+</style>
+
+
+<script>
+
+ // UI
+ let familyCount;
+ let families;
+
+ // Data
+ let fontFamilies = new Set();
+ let loadStartTime;
+
+ // App
+ let instance;
+
+ async function updatePermissionStatus() {
+ let permissonStatusElement = document.getElementById("permissonStatus");
+ let permissionStatus = await navigator.permissions.query({ name: "local-fonts" })
+ permissonStatusElement.innerHTML = permissionStatus.state;
+ }
+
+ window.onload = async () => {
+ let supported = document.getElementById("supported");
+ let permissonStatus = document.getElementById("permissonStatus");
+ let permission = document.getElementById("permission");
+ let defaultfonts = document.getElementById("defaultfonts");
+ let allfonts = document.getElementById("allfonts");
+ let start = document.getElementById("start");
+ let loadFonts = document.getElementById("loadFonts");
+ startupTime = document.getElementById("startupTime");
+ familyCount = document.getElementById("familyCount");
+ families = document.getElementById("families");
+
+ fontFamilies.clear();
+
+ let localFontsAccessSupported = window.queryLocalFonts ? true : false
+ if (localFontsAccessSupported) {
+ supported.innerHTML = "True"
+ } else {
+ supported.innerHTML = "False"
+ return;
+ }
+
+ updatePermissionStatus();
+
+ const module = WebAssembly.compileStreaming(fetch('fontloading.wasm'));
+
+ start.onclick = async () => {
+
+ // Delete any previous instance.
+ if (instance) {
+ instance.deleteapp(); // see main.cpp
+ instance = null;
+ }
+
+ loadStartTime = performance.now();
+ startupTime.innerHTML = 0;
+ familyCount.innerHTML = 0;
+ let localFontFamilyLoadCollection = "NoFontFamilies"
+ if (defaultfonts.checked)
+ localFontFamilyLoadCollection = "DefaultFontFamilies"
+ else if (allfonts.checked)
+ localFontFamilyLoadCollection = "AllFontFamilies"
+
+ let qtcontainer = document.getElementById("qtcontainer");
+ qtcontainer.innerHTML = ""; // clear children
+ qtcontainer.style.visibility = "hidden";
+
+ let extraFonts = document.getElementById("extrafonts").value.split(",");
+
+ let config = {
+ qt: {
+ module: module,
+ containerElements: [qtcontainer],
+ onLoaded: () => {
+ console.log("JS: onLoaded")
+ qtcontainer.style.visibility = "visible";
+ },
+ entryFunction: window.fontloading_entry,
+ localFonts: {
+ requestPermission: permission.checked,
+ familiesCollection: localFontFamilyLoadCollection,
+ extraFamilies: extraFonts,
+ }
+ }
+ }
+ instance = await qtLoad(config);
+
+ updatePermissionStatus();
+ }
+
+ loadFonts.onclick = async () => {
+ loadStartTime = null; // disable timer
+ let fontsFamilies = document.getElementById("extraRuntimeFontFamilies").value.split(",");
+ console.log("extraRuntimeFontFamilies: " + fontsFamilies);
+ instance.qtLoadLocalFontFamilies(fontsFamilies);
+ }
+ };
+
+ function fontFamiliesLoaded(count) {
+ familyCount.innerHTML = count;
+ if (loadStartTime) {
+ elapsed = performance.now() - loadStartTime;
+ startupTime.innerHTML = Math.round(elapsed + 1);
+ }
+ }
+
+ function fontFamilyLoaded(family) {
+ fontFamilies.add(family);
+ }
+
+</script>
+
+<h2>Local Font Loading Test</h2>
+<p>Click "Load" button below to load the Qt test app with the specified settings. This test provides additional logs on the JavaScript console.</p>
+
+<div class="container">
+ <div class="column">
+ <span>Browser supports the Local Font Access API: </span><span id="supported" style="font-weight: bold;"></span><br>
+ <span>Local Font Access permission status: </span><span id="permissonStatus" style="font-weight: bold;"></span><br>
+ <br>
+ <input type="checkbox" id="permission"><label for="permission">Ask for Local Font access permission on startup</label><br>
+ <input type="radio" id="nofonts" name="fontset"></input><label for="nofonts">No local fonts</label><br>
+ <input type="radio" id="defaultfonts" name="fontset" checked></input><label for="defaultfonts">Default local fonts (web-safe fonts)</label><br>
+ <input type="radio" id="allfonts" name="fontset"></input><label for="allfonts">All local fonts (warning: extremely slow)</label><br>
+ <br>
+ <label for="extrafonts">Extra Font Families (comma separated) </label><input type="text" id="extrafonts" value=""></input><br>
+ <br>
+ <input type="checkbox" id="permission"><label for="permission">Enable 'Fonts' Logging Category</label><br>
+ <input type="checkbox" id="permission"><label for="permission">Enable Font Streaming</label><br>
+ <br>
+ <button type="button" id="start">Start Application</button><br>
+ <br>
+
+ <span>Startup time: </span><span id="startupTime"></span><br>
+ <span>Font family count: </span><span id="familyCount"></span><br>
+ <span>Font families: </span><span id="families"></span><br>
+ <br>
+
+ <button type="button" id="loadFonts">Load Extra Fonts</button>
+ <input type="text" id="extraRuntimeFontFamilies" value=""></input><br>
+ </div>
+
+ <div class="column">
+ <div id="qtcontainer" style="width: 100%; height: 300px; visibility: hidden;"></div>
+ </div>
+</div>
+
+
diff --git a/tests/manual/wasm/localfonts/fontloading/main.cpp b/tests/manual/wasm/localfonts/fontloading/main.cpp
new file mode 100644
index 0000000000..3824c8b871
--- /dev/null
+++ b/tests/manual/wasm/localfonts/fontloading/main.cpp
@@ -0,0 +1,78 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtGui>
+#include <QtWidgets>
+
+#include <emscripten/bind.h>
+#include <emscripten/val.h>
+
+using namespace emscripten;
+
+class FontViewer : public QWidget
+{
+public:
+ FontViewer() {
+ QTextEdit *edit = new QTextEdit;
+ edit->setPlainText("The quick brown fox jumps over the lazy dog\nHow quickly daft jumping zebras vex\nPack my box with five dozen liquor jugs");
+
+ QComboBox *combo = new QComboBox;
+ combo->addItems(QFontDatabase::families());
+
+ connect(combo, &QComboBox::currentTextChanged, [=](const QString &family) {
+ QFont font(family);
+ edit->setFont(font);
+ });
+
+ QObject::connect(qApp, &QGuiApplication::fontDatabaseChanged, [=]() {
+ QStringList families = QFontDatabase::families();
+ combo->clear();
+ combo->addItems(families);
+ });
+
+ QLayout *layout = new QVBoxLayout;
+ layout->addWidget(edit);
+ layout->addWidget(combo);
+ setLayout(layout);
+ }
+};
+
+FontViewer *g_viewer = nullptr;
+QApplication *g_app = nullptr;
+
+void deleteapp() {
+ delete g_viewer;
+ delete g_app;
+};
+
+EMSCRIPTEN_BINDINGS(fonloading) {
+ function("deleteapp", &deleteapp);
+}
+
+int main(int argc, char **argv)
+{
+ qDebug() << "C++ main: Creating application";
+ g_app = new QApplication(argc, argv);
+
+ // Make sure there is one call to fontFamiliesLoaded at startup,
+ // even if no further fonts are loaded.
+ QTimer::singleShot(0, [=]() {
+ emscripten::val window = emscripten::val::global("window");
+ window.call<void>("fontFamiliesLoaded", QFontDatabase::families().count());
+ });
+
+ g_viewer = new FontViewer();
+ g_viewer->show();
+
+ QObject::connect(g_app, &QGuiApplication::fontDatabaseChanged, [=]() {
+ QStringList families = QFontDatabase::families();
+
+ emscripten::val window = emscripten::val::global("window");
+
+ window.call<void>("fontFamiliesLoaded", families.count());
+ for (int i = 0; i < families.count(); ++i) {
+ window.call<void>("fontFamilyLoaded", families[i].toStdString());
+ }
+ });
+}
+
diff --git a/tests/manual/wasm/network/CMakeLists.txt b/tests/manual/wasm/network/CMakeLists.txt
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/tests/manual/wasm/network/CMakeLists.txt
diff --git a/tests/manual/wasm/network/echo_client_mainthread/CMakeLists.txt b/tests/manual/wasm/network/echo_client_mainthread/CMakeLists.txt
new file mode 100644
index 0000000000..05416c0b66
--- /dev/null
+++ b/tests/manual/wasm/network/echo_client_mainthread/CMakeLists.txt
@@ -0,0 +1,8 @@
+qt_internal_add_manual_test(echo_client_mainthread
+ GUI
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::Network
+)
diff --git a/tests/manual/wasm/network/echo_client_mainthread/main.cpp b/tests/manual/wasm/network/echo_client_mainthread/main.cpp
new file mode 100644
index 0000000000..ef696e5978
--- /dev/null
+++ b/tests/manual/wasm/network/echo_client_mainthread/main.cpp
@@ -0,0 +1,52 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore>
+#include <QtNetwork>
+
+int main(int argc, char **argv) {
+
+ QCoreApplication app(argc, argv);
+
+ // This example connects to localhost, but note that the host can
+ // be any host reachable from the client using webscokets, at any port.
+ QString hostName = "localhost";
+ int port = 1515;
+ qDebug() << "This example connects to a server at" << hostName << "port" << port << ","
+ << "where it expects to find a WebSockify server, which forwards to the fortune server.";
+
+ auto echo = [hostName, port]() {
+ QTcpSocket *socket = new QTcpSocket();
+
+ QObject::connect(socket, &QAbstractSocket::connected, [socket]() {
+ qDebug() << "Connected";
+ socket->write("Hello, echo server!");
+ socket->flush();
+ });
+
+ QObject::connect(socket, &QIODevice::readyRead, [socket]() {
+ QByteArray data = socket->readAll();
+ qDebug() << "Ready Read, got echo:" << data;
+ socket->disconnectFromHost();
+ socket->deleteLater();
+ });
+
+ QObject::connect(socket, &QAbstractSocket::errorOccurred, [socket]() {
+ qDebug() << "Error Occurred" << socket->error();
+ });
+
+ QObject::connect(socket, &QAbstractSocket::disconnected, [socket]() {
+ qDebug() << "Disconnected";
+ socket->deleteLater();
+ });
+
+ qDebug() << "Connect to host" << hostName << port;
+ socket->connectToHost(hostName, port);
+ };
+
+ QTimer::singleShot(500, [echo](){
+ echo();
+ });
+
+ return app.exec();
+}
diff --git a/tests/manual/wasm/network/echo_client_secondarythread/CMakeLists.txt b/tests/manual/wasm/network/echo_client_secondarythread/CMakeLists.txt
new file mode 100644
index 0000000000..a1f2bef254
--- /dev/null
+++ b/tests/manual/wasm/network/echo_client_secondarythread/CMakeLists.txt
@@ -0,0 +1,8 @@
+qt_internal_add_manual_test(echo_client_secondarythread
+ GUI
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::Network
+)
diff --git a/tests/manual/wasm/network/echo_client_secondarythread/main.cpp b/tests/manual/wasm/network/echo_client_secondarythread/main.cpp
new file mode 100644
index 0000000000..52cea93495
--- /dev/null
+++ b/tests/manual/wasm/network/echo_client_secondarythread/main.cpp
@@ -0,0 +1,50 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore>
+#include <QtNetwork>
+
+int main(int argc, char **argv) {
+
+ QCoreApplication app(argc, argv);
+
+ // This example connects to localhost, but note that the host can
+ // be any host reachable from the client using webscokets, at any port.
+ QString hostName = "localhost";
+ int port = 1515;
+ qDebug() << "## This example connects to a server at" << hostName << "port" << port << ","
+ << "where it expects to find a WebSockify server, which forwards to the fortune server.";
+
+ auto echo = [hostName, port]() {
+ qDebug() << "Connecting to" << hostName << port;
+
+ QTcpSocket socket;
+ socket.connectToHost(hostName, port);
+ bool connected = socket.waitForConnected(3000);
+ if (!connected) {
+ qDebug() << "connect failure";
+ return;
+ }
+
+ qDebug() << "Connected";
+ socket.write("echo:Hello, echo server!;");
+ socket.flush();
+
+ qDebug() << "Calling waitForReadyRead()";
+ socket.waitForReadyRead(20000);
+ QByteArray data = socket.readAll();
+ qDebug() << "Got echo:" << data;
+
+ socket.disconnectFromHost();
+ socket.deleteLater();
+ qDebug() << "Disconnected";
+ };
+
+ QThread thread;
+ QObject::connect(&thread, &QThread::started, [echo](){
+ echo();
+ });
+ thread.start();
+
+ app.exec();
+}
diff --git a/tests/manual/wasm/network/echo_server/CMakeLists.txt b/tests/manual/wasm/network/echo_server/CMakeLists.txt
new file mode 100644
index 0000000000..cf98163fb8
--- /dev/null
+++ b/tests/manual/wasm/network/echo_server/CMakeLists.txt
@@ -0,0 +1,14 @@
+project(echo_server)
+cmake_minimum_required(VERSION 3.19)
+
+find_package(Qt6 COMPONENTS Core)
+find_package(Qt6 COMPONENTS network)
+
+qt_add_executable(echo_server
+ main.cpp
+)
+
+target_link_libraries(echo_server PUBLIC
+ Qt::Core
+ Qt::Network
+)
diff --git a/tests/manual/wasm/network/echo_server/main.cpp b/tests/manual/wasm/network/echo_server/main.cpp
new file mode 100644
index 0000000000..3a67cabc79
--- /dev/null
+++ b/tests/manual/wasm/network/echo_server/main.cpp
@@ -0,0 +1,80 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore>
+#include <QtNetwork>
+
+const int timeout = 60 * 1000;
+
+int main(int argc, char **argv)
+{
+ QCoreApplication app(argc, argv);
+
+ QTcpServer server;
+ QObject::connect(&server, &QTcpServer::newConnection, [&server](){
+ qDebug() << "new connection";
+
+ QByteArray *receiveBuffer = new QByteArray();
+
+ QTcpSocket *socket = server.nextPendingConnection();
+ QObject::connect(socket, &QIODevice::readyRead, [socket, receiveBuffer](){
+
+ // This implements a very simple command protocol, where the server
+ // processes a stream of commands delimited by ';', and then performs
+ // an action in reply. The supported commands with actions are:
+ //
+ // echo:<message>; writes the received <message> back
+ // close; closes the socket
+ //
+
+ // We might receive multiple or partial commands; read all available data
+ // and then scan the buffer for complete commands.
+ QByteArray newData = socket->readAll();
+ *receiveBuffer += newData;
+
+ int pos = receiveBuffer->indexOf(";");
+ while (pos != -1) {
+ QByteArray command = receiveBuffer->left(pos);
+ receiveBuffer->remove(0, pos + 1);
+ pos = receiveBuffer->indexOf(";");
+
+ if (command.startsWith("echo")) {
+ // Echo expects echo:<message>
+ QList<QByteArray> parts = command.split(':');
+ QByteArray reply = parts.last() + ';';
+ qDebug() << "Command: echo:" << parts.last();
+ socket->write(reply);
+ socket->flush();
+
+ } else if (command.startsWith("close")) {
+ qDebug() << "Command: close";
+ socket->write("bye!;");
+ socket->flush();
+ socket->close();
+ break;
+ } else {
+ qDebug() << "Unknown command:" << command;
+ }
+ }
+ });
+
+ QObject::connect(socket, &QAbstractSocket::disconnected, [socket, receiveBuffer](){
+ delete receiveBuffer;
+ socket->deleteLater();
+ });
+ });
+
+ // This is example is intended to be used together with WebSockify on
+ // the server and acts as a counterpart to the client examples which
+ // run in the browser. (This example does not run in the browser).
+
+ qDebug() << "\nStarting echo server at port 1516. You should now start the"
+ << "\nWebSockify forwarding server, and then connect from one of"
+ << "\nthe client examples."
+ << "\n websockify 1515 localhost:1516";
+
+ server.listen(QHostAddress::Any, 1516);
+
+ return app.exec();
+}
+
diff --git a/tests/manual/wasm/network/sockify_sockets_auto/CMakeLists.txt b/tests/manual/wasm/network/sockify_sockets_auto/CMakeLists.txt
new file mode 100644
index 0000000000..fb9a9f8543
--- /dev/null
+++ b/tests/manual/wasm/network/sockify_sockets_auto/CMakeLists.txt
@@ -0,0 +1,22 @@
+qt_internal_add_manual_test(sockify_sockets_auto
+ SOURCES
+ main.cpp
+ ../../qtwasmtestlib/qtwasmtestlib.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::Network
+)
+
+include_directories(../../qtwasmtestlib/)
+
+add_custom_command(
+ TARGET sockify_sockets_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/sockify_sockets_auto.html
+ ${CMAKE_CURRENT_BINARY_DIR}/sockify_sockets_auto.html)
+
+add_custom_command(
+ TARGET sockify_sockets_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../qtwasmtestlib/qtwasmtestlib.js
+ ${CMAKE_CURRENT_BINARY_DIR}/qtwasmtestlib.js)
diff --git a/tests/manual/wasm/network/sockify_sockets_auto/main.cpp b/tests/manual/wasm/network/sockify_sockets_auto/main.cpp
new file mode 100644
index 0000000000..b6aa232b4a
--- /dev/null
+++ b/tests/manual/wasm/network/sockify_sockets_auto/main.cpp
@@ -0,0 +1,318 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <qtwasmtestlib.h>
+#include <QtCore>
+#include <QtNetwork>
+
+const int socketWait = 1000;
+const QString hostName = "localhost";
+const int port = 1515;
+
+class SockifySocketsTest: public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void echo();
+ void echoMultipleMessages();
+ void echoMultipleSockets();
+ void remoteClose();
+
+#if QT_CONFIG(thread)
+ void thread_echo();
+ void thread_remoteClose();
+ void thread_echoMultipleSockets();
+#endif
+
+#ifdef QT_HAVE_EMSCRIPTEN_ASYNCIFY
+ void asyncify_echo();
+ void asyncify_remoteClose();
+#endif
+};
+
+class CompleteTestFunctionRefGuard {
+public:
+ CompleteTestFunctionRefGuard(CompleteTestFunctionRefGuard const&) = delete;
+ CompleteTestFunctionRefGuard& operator=(CompleteTestFunctionRefGuard const&) = delete;
+
+ static CompleteTestFunctionRefGuard *create() {
+ return new CompleteTestFunctionRefGuard();
+ }
+
+ void ref() {
+ QMutexLocker lock(&mutex);
+ ++counter;
+ }
+
+ void deref() {
+ bool itsTheFinalDeref = [this] {
+ QMutexLocker lock(&mutex);
+ return --counter == 0;
+ }();
+
+ if (itsTheFinalDeref) {
+ delete this;
+ QtWasmTest::completeTestFunction();
+ }
+ }
+private:
+ CompleteTestFunctionRefGuard() { };
+
+ QMutex mutex;
+ int counter = 0;
+};
+
+#if QT_CONFIG(thread)
+
+class TestThread : public QThread
+{
+public:
+ static QThread *create(std::function<void()> started, std::function<void()> finished)
+ {
+ TestThread *thread = new TestThread();
+ connect(thread, &QThread::started, [started]() {
+ started();
+ });
+ connect(thread, &QThread::finished, [thread, finished]() {
+ finished();
+ thread->deleteLater();
+ });
+ thread->start();
+ return thread;
+ }
+};
+
+#endif
+
+void blockingEchoTest()
+{
+ QTcpSocket socket;
+ socket.connectToHost(hostName, port);
+ if (!socket.waitForConnected(socketWait))
+ qFatal("socket connect error");
+
+ QByteArray message = "Hello, echo server!";
+
+ QByteArray command = "echo:" + message + ';';
+ socket.write(command);
+ socket.flush();
+
+ socket.waitForReadyRead(socketWait);
+ QByteArray expectedReply = message + ';';
+ QByteArray reply = socket.readAll();
+ if (reply != expectedReply)
+ qFatal("echo_multiple received incorrect reply");
+ socket.disconnectFromHost();
+}
+
+void blockingRemoteClose()
+{
+ QTcpSocket socket;
+
+ qDebug() << "## connectToHost";
+ socket.connectToHost(hostName, port);
+
+ qDebug() << "## waitForConnected";
+ socket.waitForConnected(socketWait);
+ socket.write("close;");
+ socket.flush();
+
+ qDebug() << "## waitForBytesWritten";
+ socket.waitForBytesWritten(socketWait);
+
+ qDebug() << "## waitForReadyRead";
+ socket.waitForReadyRead(200);
+
+ qDebug() << "## waitForDisconnected";
+ socket.waitForDisconnected(socketWait);
+ qDebug() << "## done";
+}
+
+// Verify that sending one echo command and receiving the reply works
+void SockifySocketsTest::echo()
+{
+ QTcpSocket *socket = new QTcpSocket();
+ socket->connectToHost(hostName, port);
+
+ QByteArray message = "Hello, echo server!";
+
+ QObject::connect(socket, &QAbstractSocket::connected, [socket, message]() {
+ QByteArray command = "echo:" + message + ';';
+ socket->write(command);
+ socket->flush();
+ });
+
+ QByteArray *reply = new QByteArray();
+ QObject::connect(socket, &QIODevice::readyRead, [socket, reply, message]() {
+ *reply += socket->readAll();
+ if (reply->contains(';')) {
+ bool match = (*reply == message + ';');
+ socket->disconnectFromHost();
+ socket->deleteLater();
+ delete reply;
+ QtWasmTest::completeTestFunction(match ? QtWasmTest::TestResult::Pass : QtWasmTest::TestResult::Fail, std::string());
+ }
+ });
+}
+
+void SockifySocketsTest::echoMultipleMessages()
+{
+ const int count = 20;
+
+ QTcpSocket *socket = new QTcpSocket();
+ socket->connectToHost(hostName, port);
+ QByteArray message = "Hello, echo server!";
+
+ QObject::connect(socket, &QAbstractSocket::connected, [socket, message]() {
+ QByteArray command = "echo:" + message + ';';
+ for (int i = 0; i < count; ++i) {
+ quint64 written = socket->write(command);
+ if (written != quint64(command.size()))
+ qFatal("Unable to write to socket");
+ }
+ socket->flush();
+ });
+
+ QByteArray expectedReply;
+ for (int i = 0; i < count; ++i)
+ expectedReply += (message + ';');
+ QByteArray *receivedReply = new QByteArray;
+ QObject::connect(socket, &QIODevice::readyRead, [socket, receivedReply, expectedReply]() {
+ QByteArray reply = socket->readAll();
+ *receivedReply += reply;
+
+ if (*receivedReply == expectedReply) {
+ socket->disconnectFromHost();
+ socket->deleteLater();
+ delete receivedReply;
+ QtWasmTest::completeTestFunction();
+ }
+ });
+}
+
+void SockifySocketsTest::echoMultipleSockets()
+{
+ const int connections = 5;
+ auto guard = CompleteTestFunctionRefGuard::create();
+
+ QByteArray message = "Hello, echo server!";
+
+ for (int i = 0; i < connections; ++i) {
+ guard->ref();
+
+ QTcpSocket *socket = new QTcpSocket();
+ socket->connectToHost(hostName, port);
+
+ QObject::connect(socket, &QAbstractSocket::connected, [socket, message]() {
+ QByteArray command = "echo:" + message + ';';
+ socket->write(command);
+ socket->flush();
+ });
+
+ QObject::connect(socket, &QIODevice::readyRead, [guard, socket, message]() {
+ QByteArray reply = socket->readAll();
+ socket->disconnectFromHost();
+ socket->deleteLater();
+ if (reply != (message + ';'))
+ qFatal("echo_multiple received incorrect reply");
+ guard->deref();
+ });
+ }
+}
+
+void SockifySocketsTest::remoteClose()
+{
+ QTcpSocket *socket = new QTcpSocket();
+ socket->connectToHost(hostName, port);
+ QObject::connect(socket, &QAbstractSocket::connected, [socket]() {
+ socket->write("close;");
+ socket->flush();
+ });
+ QObject::connect(socket, &QAbstractSocket::disconnected, [socket]() {
+ qDebug() << "disconnected";
+ socket->deleteLater();
+ QtWasmTest::completeTestFunction();
+ });
+}
+
+#if QT_CONFIG(thread)
+
+void SockifySocketsTest::thread_echo()
+{
+ auto started = []() {
+ blockingEchoTest();
+ QThread::currentThread()->quit();
+ };
+
+ auto finished = [](){
+ QtWasmTest::completeTestFunction();
+ };
+
+ TestThread::create(started, finished);
+}
+
+void SockifySocketsTest::thread_echoMultipleSockets()
+{
+ const int connections = 2; // TODO: test more threads
+ auto guard = CompleteTestFunctionRefGuard::create();
+ guard->ref();
+
+ for (int i = 0; i < connections; ++i) {
+ guard->ref();
+ auto started = [](){
+ blockingEchoTest();
+ QThread::currentThread()->quit();
+ };
+
+ auto finished = [guard](){
+ guard->deref();
+ };
+
+ TestThread::create(started, finished);
+ }
+
+ guard->deref();
+}
+
+void SockifySocketsTest::thread_remoteClose()
+{
+ auto started = [](){
+ blockingRemoteClose();
+ QThread::currentThread()->quit();
+ };
+
+ auto finished = [](){
+ QtWasmTest::completeTestFunction();
+ };
+
+ TestThread::create(started, finished);
+}
+
+#endif
+
+#ifdef QT_HAVE_EMSCRIPTEN_ASYNCIFY
+
+// Post an event to the main thread and asyncify wait for it
+void SockifySocketsTest::asyncify_echo()
+{
+ blockingEchoTest();
+ QtWasmTest::completeTestFunction();
+}
+
+void SockifySocketsTest::asyncify_remoteClose()
+{
+ blockingRemoteClose();
+ QtWasmTest::completeTestFunction();
+}
+
+#endif
+
+int main(int argc, char **argv)
+{
+ auto testObject = std::make_shared<SockifySocketsTest>();
+ QtWasmTest::initTestCase<QCoreApplication>(argc, argv, testObject);
+ return 0;
+}
+
+#include "main.moc"
diff --git a/tests/manual/wasm/network/sockify_sockets_auto/sockify_sockets_auto.html b/tests/manual/wasm/network/sockify_sockets_auto/sockify_sockets_auto.html
new file mode 100644
index 0000000000..080ada94e7
--- /dev/null
+++ b/tests/manual/wasm/network/sockify_sockets_auto/sockify_sockets_auto.html
@@ -0,0 +1,17 @@
+<!doctype html>
+<script type="text/javascript" src="qtwasmtestlib.js"></script>
+<script type="text/javascript" src="sockify_sockets_auto.js"></script>
+<script>
+ window.onload = async () => {
+ runTestCase(sockify_sockets_auto_entry, document.getElementById("log"));
+ };
+</script>
+<p> Sockify tunneled sockets auto test.
+
+<p>This test requires running echo_server and <a href=https://github.com/novnc/websockify>websockify</a> (or equivalent) on the host:
+<pre>
+ /path/to/qtbase/tests/manual/wasm/network/echo_server/echo_server
+ websockify 1515 localhost:1516
+</pre>
+
+<div id="log"></div>
diff --git a/tests/manual/wasm/qstdweb/CMakeLists.txt b/tests/manual/wasm/qstdweb/CMakeLists.txt
new file mode 100644
index 0000000000..5242999ec4
--- /dev/null
+++ b/tests/manual/wasm/qstdweb/CMakeLists.txt
@@ -0,0 +1,97 @@
+qt_internal_add_manual_test(promise_auto
+ SOURCES
+ promise_main.cpp
+ ../qtwasmtestlib/qtwasmtestlib.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::CorePrivate
+)
+
+include_directories(../qtwasmtestlib/)
+
+add_custom_command(
+ TARGET promise_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/promise_auto.html
+ ${CMAKE_CURRENT_BINARY_DIR}/promise_auto.html)
+
+add_custom_command(
+ TARGET promise_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/../qtwasmtestlib/qtwasmtestlib.js
+ ${CMAKE_CURRENT_BINARY_DIR}/qtwasmtestlib.js)
+
+qt_internal_add_manual_test(files_auto
+ SOURCES
+ files_main.cpp
+ ../qtwasmtestlib/qtwasmtestlib.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::CorePrivate
+ Qt::GuiPrivate
+)
+
+include_directories(../qtwasmtestlib/)
+
+add_custom_command(
+ TARGET files_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/files_auto.html
+ ${CMAKE_CURRENT_BINARY_DIR}/files_auto.html)
+
+add_custom_command(
+ TARGET files_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/../qtwasmtestlib/qtwasmtestlib.js
+ ${CMAKE_CURRENT_BINARY_DIR}/qtwasmtestlib.js)
+
+qt_internal_add_manual_test(qwasmcompositor_auto
+ SOURCES
+ qwasmcompositor_main.cpp
+ ../qtwasmtestlib/qtwasmtestlib.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::CorePrivate
+ Qt::GuiPrivate
+)
+
+include_directories(../qtwasmtestlib/)
+
+add_custom_command(
+ TARGET qwasmcompositor_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/qwasmcompositor_auto.html
+ ${CMAKE_CURRENT_BINARY_DIR}/qwasmcompositor_auto.html)
+
+add_custom_command(
+ TARGET qwasmcompositor_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/../qtwasmtestlib/qtwasmtestlib.js
+ ${CMAKE_CURRENT_BINARY_DIR}/qtwasmtestlib.js)
+
+target_link_options(qwasmcompositor_auto PRIVATE -sASYNCIFY -Os)
+
+qt_internal_add_manual_test(iodevices_auto
+ SOURCES
+ iodevices_main.cpp
+ ../qtwasmtestlib/qtwasmtestlib.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::CorePrivate
+ Qt::GuiPrivate
+)
+
+add_custom_command(
+ TARGET iodevices_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/iodevices_auto.html
+ ${CMAKE_CURRENT_BINARY_DIR}/iodevices_auto.html)
+
+add_custom_command(
+ TARGET iodevices_auto POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/../qtwasmtestlib/qtwasmtestlib.js
+ ${CMAKE_CURRENT_BINARY_DIR}/qtwasmtestlib.js)
+
+target_link_options(iodevices_auto PRIVATE -sASYNCIFY -Os)
+
diff --git a/tests/manual/wasm/qstdweb/files_auto.html b/tests/manual/wasm/qstdweb/files_auto.html
new file mode 100644
index 0000000000..9027fdc660
--- /dev/null
+++ b/tests/manual/wasm/qstdweb/files_auto.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<script type="text/javascript" src="https://sinonjs.org/releases/sinon-14.0.0.js"
+ integrity="sha384-z8J4N1s2hPDn6ClmFXDQkKD/e738VOWcR8JmhztPRa+PgezxQupgZu3LzoBO4Jw8"
+ crossorigin="anonymous"></script>
+<script type="text/javascript" src="qtwasmtestlib.js"></script>
+<script type="text/javascript" src="files_auto.js"></script>
+<script>
+ window.onload = () => {
+ runTestCase(files_auto_entry, document.getElementById("log"));
+ };
+</script>
+<p>Running files auto test.</p>
+<div id="log"></div>
diff --git a/tests/manual/wasm/qstdweb/files_main.cpp b/tests/manual/wasm/qstdweb/files_main.cpp
new file mode 100644
index 0000000000..45939feb10
--- /dev/null
+++ b/tests/manual/wasm/qstdweb/files_main.cpp
@@ -0,0 +1,471 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QCoreApplication>
+#include <QtCore/QEvent>
+#include <QtCore/QMutex>
+#include <QtCore/QObject>
+#include <QtCore/QTimer>
+#include <QtGui/private/qwasmlocalfileaccess_p.h>
+
+#include <qtwasmtestlib.h>
+#include <emscripten.h>
+#include <emscripten/bind.h>
+#include <emscripten/val.h>
+
+#include <string_view>
+
+using namespace emscripten;
+
+class FilesTest : public QObject
+{
+ Q_OBJECT
+
+public:
+ FilesTest() : m_window(val::global("window")), m_testSupport(val::object()) {}
+
+ ~FilesTest() noexcept {
+ for (auto& cleanup: m_cleanup) {
+ cleanup();
+ }
+ }
+
+private:
+ void init() {
+ EM_ASM({
+ window.testSupport = {};
+
+ window.showOpenFilePicker = sinon.stub();
+
+ window.mockOpenFileDialog = (files) => {
+ window.showOpenFilePicker.withArgs(sinon.match.any).callsFake(
+ (options) => Promise.resolve(files.map(file => {
+ const getFile = sinon.stub();
+ getFile.callsFake(() => Promise.resolve({
+ name: file.name,
+ size: file.content.length,
+ slice: () => new Blob([new TextEncoder().encode(file.content)]),
+ }));
+ return {
+ kind: 'file',
+ name: file.name,
+ getFile
+ };
+ }))
+ );
+ };
+
+ window.showSaveFilePicker = sinon.stub();
+
+ window.mockSaveFilePicker = (file) => {
+ window.showSaveFilePicker.withArgs(sinon.match.any).callsFake(
+ (options) => {
+ const createWritable = sinon.stub();
+ createWritable.callsFake(() => {
+ const write = file.writeFn ?? (() => {
+ const write = sinon.stub();
+ write.callsFake((stuff) => {
+ if (file.content !== new TextDecoder().decode(stuff)) {
+ const message = `Bad file content ${file.content} !== ${new TextDecoder().decode(stuff)}`;
+ Module.qtWasmFail(message);
+ return Promise.reject(message);
+ }
+
+ return Promise.resolve();
+ });
+ return write;
+ })();
+
+ window.testSupport.write = write;
+
+ const close = file.closeFn ?? (() => {
+ const close = sinon.stub();
+ close.callsFake(() => Promise.resolve());
+ return close;
+ })();
+
+ window.testSupport.close = close;
+
+ return Promise.resolve({
+ write,
+ close
+ });
+ });
+ return Promise.resolve({
+ kind: 'file',
+ name: file.name,
+ createWritable
+ });
+ }
+ );
+ };
+ });
+ }
+
+ template <class T>
+ T* Own(T* plainPtr) {
+ m_cleanup.emplace_back([plainPtr]() mutable {
+ delete plainPtr;
+ });
+ return plainPtr;
+ }
+
+ val m_window;
+ val m_testSupport;
+
+ std::vector<std::function<void()>> m_cleanup;
+
+private slots:
+ void selectOneFileWithFileDialog();
+ void selectMultipleFilesWithFileDialog();
+ void cancelFileDialog();
+ void rejectFile();
+ void saveFileWithFileDialog();
+};
+
+class BarrierCallback {
+public:
+ BarrierCallback(int number, std::function<void()> onDone)
+ : m_remaining(number), m_onDone(std::move(onDone)) {}
+
+ void operator()() {
+ if (!--m_remaining) {
+ m_onDone();
+ }
+ }
+
+private:
+ int m_remaining;
+ std::function<void()> m_onDone;
+};
+
+
+template <class Arg>
+std::string argToString(std::add_lvalue_reference_t<std::add_const_t<Arg>> arg) {
+ return std::to_string(arg);
+}
+
+template <>
+std::string argToString<bool>(const bool& value) {
+ return value ? "true" : "false";
+}
+
+template <>
+std::string argToString<std::string>(const std::string& arg) {
+ return arg;
+}
+
+template <>
+std::string argToString<const std::string&>(const std::string& arg) {
+ return arg;
+}
+
+template<class Type>
+struct Matcher {
+ virtual ~Matcher() = default;
+
+ virtual bool matches(std::string* explanation, const Type& actual) const = 0;
+};
+
+template<class Type>
+struct AnyMatcher : public Matcher<Type> {
+ bool matches(std::string* explanation, const Type& actual) const final {
+ Q_UNUSED(explanation);
+ Q_UNUSED(actual);
+ return true;
+ }
+
+ Type m_value;
+};
+
+template<class Type>
+struct EqualsMatcher : public Matcher<Type> {
+ EqualsMatcher(Type value) : m_value(std::forward<Type>(value)) {}
+
+ bool matches(std::string* explanation, const Type& actual) const final {
+ const bool ret = actual == m_value;
+ if (!ret)
+ *explanation += argToString<Type>(actual) + " != " + argToString<Type>(m_value);
+ return actual == m_value;
+ }
+
+ // It is crucial to hold a copy, otherwise we lose const refs.
+ std::remove_reference_t<Type> m_value;
+};
+
+template<class Type>
+std::unique_ptr<EqualsMatcher<Type>> equals(Type value) {
+ return std::make_unique<EqualsMatcher<Type>>(value);
+}
+
+template<class Type>
+std::unique_ptr<AnyMatcher<Type>> any(Type value) {
+ return std::make_unique<AnyMatcher<Type>>(value);
+}
+
+template <class ...Types>
+struct Expectation {
+ std::tuple<std::unique_ptr<Matcher<Types>>...> m_argMatchers;
+ int m_callCount = 0;
+ int m_expectedCalls = 1;
+
+ template<std::size_t... Indices>
+ bool match(std::string* explanation, const std::tuple<Types...>& tuple, std::index_sequence<Indices...>) const {
+ return ( ... && (std::get<Indices>(m_argMatchers)->matches(explanation, std::get<Indices>(tuple))));
+ }
+
+ bool matches(std::string* explanation, Types... args) const {
+ if (m_callCount >= m_expectedCalls) {
+ *explanation += "Too many calls\n";
+ return false;
+ }
+ return match(explanation, std::make_tuple(args...), std::make_index_sequence<std::tuple_size_v<std::tuple<Types...>>>());
+ }
+};
+
+template <class R, class ...Types>
+struct Behavior {
+ std::function<R(Types...)> m_callback;
+
+ void call(std::function<R(Types...)> callback) {
+ m_callback = std::move(callback);
+ }
+};
+
+template<class... Args>
+std::string argsToString(Args... args) {
+ return (... + (", " + argToString<Args>(args)));
+}
+
+template<>
+std::string argsToString<>() {
+ return "";
+}
+
+template<class R, class ...Types>
+struct ExpectationToBehaviorMapping {
+ Expectation<Types...> expectation;
+ Behavior<R, Types...> behavior;
+};
+
+template<class R, class... Args>
+class MockCallback {
+public:
+ std::function<R(Args...)> get() {
+ return [this](Args... result) -> R {
+ return processCall(std::forward<Args>(result)...);
+ };
+ }
+
+ Behavior<R, Args...>& expectCallWith(std::unique_ptr<Matcher<Args>>... matcherArgs) {
+ auto matchers = std::make_tuple(std::move(matcherArgs)...);
+ m_behaviorByExpectation.push_back({Expectation<Args...> {std::move(matchers)}, Behavior<R, Args...> {}});
+ return m_behaviorByExpectation.back().behavior;
+ }
+
+ Behavior<R, Args...>& expectRepeatedCallWith(int times, std::unique_ptr<Matcher<Args>>... matcherArgs) {
+ auto matchers = std::make_tuple(std::move(matcherArgs)...);
+ m_behaviorByExpectation.push_back({Expectation<Args...> {std::move(matchers), 0, times}, Behavior<R, Args...> {}});
+ return m_behaviorByExpectation.back().behavior;
+ }
+
+private:
+ R processCall(Args... args) {
+ std::string argsAsString = argsToString(args...);
+ std::string triedExpectations;
+ auto it = std::find_if(m_behaviorByExpectation.begin(), m_behaviorByExpectation.end(),
+ [&](const ExpectationToBehaviorMapping<R, Args...>& behavior) {
+ return behavior.expectation.matches(&triedExpectations, std::forward<Args>(args)...);
+ });
+ if (it != m_behaviorByExpectation.end()) {
+ ++it->expectation.m_callCount;
+ return it->behavior.m_callback(args...);
+ } else {
+ QWASMFAIL("Unexpected call with " + argsAsString + ". Tried: " + triedExpectations);
+ }
+ return R();
+ }
+
+ std::vector<ExpectationToBehaviorMapping<R, Args...>> m_behaviorByExpectation;
+};
+
+void FilesTest::selectOneFileWithFileDialog()
+{
+ init();
+
+ static constexpr std::string_view testFileContent = "This is a happy case.";
+
+ EM_ASM({
+ mockOpenFileDialog([{
+ name: 'file1.jpg',
+ content: UTF8ToString($0)
+ }]);
+ }, testFileContent.data());
+
+ auto* fileSelectedCallback = Own(new MockCallback<void, bool>());
+ fileSelectedCallback->expectCallWith(equals(true)).call([](bool) mutable {});
+
+ auto* fileBuffer = Own(new QByteArray());
+
+ auto* acceptFileCallback = Own(new MockCallback<char*, uint64_t, const std::string&>());
+ acceptFileCallback->expectCallWith(equals<uint64_t>(testFileContent.size()), equals<const std::string&>("file1.jpg"))
+ .call([fileBuffer](uint64_t, std::string) mutable -> char* {
+ fileBuffer->resize(testFileContent.size());
+ return fileBuffer->data();
+ });
+
+ auto* fileDataReadyCallback = Own(new MockCallback<void>());
+ fileDataReadyCallback->expectCallWith().call([fileBuffer]() mutable {
+ QWASMCOMPARE(fileBuffer->data(), std::string(testFileContent));
+ QWASMSUCCESS();
+ });
+
+ QWasmLocalFileAccess::openFile("*", fileSelectedCallback->get(), acceptFileCallback->get(),
+ fileDataReadyCallback->get());
+}
+
+void FilesTest::selectMultipleFilesWithFileDialog()
+{
+ static constexpr std::array<std::string_view, 3> testFileContent =
+ { "Cont 1", "2s content", "What is hiding in 3?"};
+
+ init();
+
+ EM_ASM({
+ mockOpenFileDialog([{
+ name: 'file1.jpg',
+ content: UTF8ToString($0)
+ }, {
+ name: 'file2.jpg',
+ content: UTF8ToString($1)
+ }, {
+ name: 'file3.jpg',
+ content: UTF8ToString($2)
+ }]);
+ }, testFileContent[0].data(), testFileContent[1].data(), testFileContent[2].data());
+
+ auto* fileSelectedCallback = Own(new MockCallback<void, int>());
+ fileSelectedCallback->expectCallWith(equals(3)).call([](int) mutable {});
+
+ auto fileBuffer = std::make_shared<QByteArray>();
+
+ auto* acceptFileCallback = Own(new MockCallback<char*, uint64_t, const std::string&>());
+ acceptFileCallback->expectCallWith(equals<uint64_t>(testFileContent[0].size()), equals<const std::string&>("file1.jpg"))
+ .call([fileBuffer](uint64_t, std::string) mutable -> char* {
+ fileBuffer->resize(testFileContent[0].size());
+ return fileBuffer->data();
+ });
+ acceptFileCallback->expectCallWith(equals<uint64_t>(testFileContent[1].size()), equals<const std::string&>("file2.jpg"))
+ .call([fileBuffer](uint64_t, std::string) mutable -> char* {
+ fileBuffer->resize(testFileContent[1].size());
+ return fileBuffer->data();
+ });
+ acceptFileCallback->expectCallWith(equals<uint64_t>(testFileContent[2].size()), equals<const std::string&>("file3.jpg"))
+ .call([fileBuffer](uint64_t, std::string) mutable -> char* {
+ fileBuffer->resize(testFileContent[2].size());
+ return fileBuffer->data();
+ });
+
+ auto* fileDataReadyCallback = Own(new MockCallback<void>());
+ fileDataReadyCallback->expectRepeatedCallWith(3).call([fileBuffer]() mutable {
+ static int callCount = 0;
+ QWASMCOMPARE(fileBuffer->data(), std::string(testFileContent[callCount]));
+
+ callCount++;
+ if (callCount == 3) {
+ QWASMSUCCESS();
+ }
+ });
+
+ QWasmLocalFileAccess::openFiles("*", QWasmLocalFileAccess::FileSelectMode::MultipleFiles,
+ fileSelectedCallback->get(), acceptFileCallback->get(),
+ fileDataReadyCallback->get());
+}
+
+void FilesTest::cancelFileDialog()
+{
+ init();
+
+ EM_ASM({
+ window.showOpenFilePicker.withArgs(sinon.match.any).returns(Promise.reject("The user cancelled the dialog"));
+ });
+
+ auto* fileSelectedCallback = Own(new MockCallback<void, bool>());
+ fileSelectedCallback->expectCallWith(equals(false)).call([](bool) mutable {
+ QWASMSUCCESS();
+ });
+
+ auto* acceptFileCallback = Own(new MockCallback<char*, uint64_t, const std::string&>());
+ auto* fileDataReadyCallback = Own(new MockCallback<void>());
+
+ QWasmLocalFileAccess::openFile("*", fileSelectedCallback->get(), acceptFileCallback->get(),
+ fileDataReadyCallback->get());
+}
+
+void FilesTest::rejectFile()
+{
+ init();
+
+ static constexpr std::string_view testFileContent = "We don't want this file.";
+
+ EM_ASM({
+ mockOpenFileDialog([{
+ name: 'dontwant.dat',
+ content: UTF8ToString($0)
+ }]);
+ }, testFileContent.data());
+
+ auto* fileSelectedCallback = Own(new MockCallback<void, bool>());
+ fileSelectedCallback->expectCallWith(equals(true)).call([](bool) mutable {});
+
+ auto* fileDataReadyCallback = Own(new MockCallback<void>());
+
+ auto* acceptFileCallback = Own(new MockCallback<char*, uint64_t, const std::string&>());
+ acceptFileCallback->expectCallWith(equals<uint64_t>(std::string_view(testFileContent).size()), equals<const std::string&>("dontwant.dat"))
+ .call([](uint64_t, const std::string) {
+ QTimer::singleShot(0, []() {
+ // No calls to fileDataReadyCallback
+ QWASMSUCCESS();
+ });
+ return nullptr;
+ });
+
+ QWasmLocalFileAccess::openFile("*", fileSelectedCallback->get(), acceptFileCallback->get(),
+ fileDataReadyCallback->get());
+}
+
+void FilesTest::saveFileWithFileDialog()
+{
+ init();
+
+ static constexpr std::string_view testFileContent = "Save this important content";
+
+ EM_ASM({
+ mockSaveFilePicker({
+ name: 'somename',
+ content: UTF8ToString($0),
+ closeFn: (() => {
+ const close = sinon.stub();
+ close.callsFake(() =>
+ new Promise(resolve => {
+ resolve();
+ Module.qtWasmPass();
+ }));
+ return close;
+ })()
+ });
+ }, testFileContent.data());
+
+ QByteArray data;
+ data.prepend(testFileContent);
+ QWasmLocalFileAccess::saveFile(data, "hintie");
+}
+
+int main(int argc, char **argv)
+{
+ auto testObject = std::make_shared<FilesTest>();
+ QtWasmTest::initTestCase<QCoreApplication>(argc, argv, testObject);
+ return 0;
+}
+
+#include "files_main.moc"
diff --git a/tests/manual/wasm/qstdweb/iodevices_auto.html b/tests/manual/wasm/qstdweb/iodevices_auto.html
new file mode 100644
index 0000000000..7937b8a483
--- /dev/null
+++ b/tests/manual/wasm/qstdweb/iodevices_auto.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<script type="text/javascript" src="qtwasmtestlib.js"></script>
+<script type="text/javascript" src="iodevices_auto.js"></script>
+<script>
+ window.onload = () => {
+ runTestCase(iodevices_auto_entry, document.getElementById("log"));
+ };
+</script>
+<p>Running qstdweb iodevices auto test.</p>
+<div id="log"></div>
diff --git a/tests/manual/wasm/qstdweb/iodevices_main.cpp b/tests/manual/wasm/qstdweb/iodevices_main.cpp
new file mode 100644
index 0000000000..0dbdd0084e
--- /dev/null
+++ b/tests/manual/wasm/qstdweb/iodevices_main.cpp
@@ -0,0 +1,103 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QtCore>
+#include <QtCore/private/qstdweb_p.h>
+
+#include <qtwasmtestlib.h>
+
+#include "emscripten.h"
+
+using qstdweb::ArrayBuffer;
+using qstdweb::Uint8Array;
+using qstdweb::Blob;
+using qstdweb::BlobIODevice;
+using qstdweb::Uint8ArrayIODevice;
+
+class WasmIoDevicesTest: public QObject
+{
+ Q_OBJECT
+
+private slots:
+ void blobIODevice();
+ void uint8ArrayIODevice();
+};
+
+// Creates a test arraybuffer with byte values [0..size] % 256 * 2
+char testByteValue(int i) { return (i % 256) * 2; }
+ArrayBuffer createTestArrayBuffer(int size)
+{
+ ArrayBuffer buffer(size);
+ Uint8Array array(buffer);
+ for (int i = 0; i < size; ++i)
+ array.val().set(i, testByteValue(i));
+ return buffer;
+}
+
+void WasmIoDevicesTest::blobIODevice()
+{
+ if (!qstdweb::canBlockCallingThread()) {
+ QtWasmTest::completeTestFunction(QtWasmTest::TestResult::Skip, "requires asyncify");
+ return;
+ }
+
+ // Create test buffer and BlobIODevice
+ const int bufferSize = 16;
+ BlobIODevice blobDevice(Blob::fromArrayBuffer(createTestArrayBuffer(bufferSize)));
+
+ // Read back byte for byte from the device
+ QWASMVERIFY(blobDevice.open(QIODevice::ReadOnly));
+ for (int i = 0; i < bufferSize; ++i) {
+ char byte;
+ blobDevice.seek(i);
+ blobDevice.read(&byte, 1);
+ QWASMCOMPARE(byte, testByteValue(i));
+ }
+
+ blobDevice.close();
+ QWASMVERIFY(!blobDevice.open(QIODevice::WriteOnly));
+ QWASMSUCCESS();
+}
+
+void WasmIoDevicesTest::uint8ArrayIODevice()
+{
+ // Create test buffer and Uint8ArrayIODevice
+ const int bufferSize = 1024;
+ Uint8Array array(createTestArrayBuffer(bufferSize));
+ Uint8ArrayIODevice arrayDevice(array);
+
+ // Read back byte for byte from the device
+ QWASMVERIFY(arrayDevice.open(QIODevice::ReadWrite));
+ for (int i = 0; i < bufferSize; ++i) {
+ char byte;
+ arrayDevice.seek(i);
+ arrayDevice.read(&byte, 1);
+ QWASMCOMPARE(byte, testByteValue(i));
+ }
+
+ // Write a different set of bytes
+ QWASMCOMPARE(arrayDevice.seek(0), true);
+ for (int i = 0; i < bufferSize; ++i) {
+ char byte = testByteValue(i + 1);
+ arrayDevice.seek(i);
+ QWASMCOMPARE(arrayDevice.write(&byte, 1), 1);
+ }
+
+ // Verify that the original array was updated
+ QByteArray copy = QByteArray::fromEcmaUint8Array(array.val());
+ for (int i = 0; i < bufferSize; ++i)
+ QWASMCOMPARE(copy.at(i), testByteValue(i + 1));
+
+ arrayDevice.close();
+ QWASMSUCCESS();
+}
+
+int main(int argc, char **argv)
+{
+ auto testObject = std::make_shared<WasmIoDevicesTest>();
+ QtWasmTest::initTestCase<QCoreApplication>(argc, argv, testObject);
+ return 0;
+}
+
+#include "iodevices_main.moc"
+
diff --git a/tests/manual/wasm/qstdweb/promise_auto.html b/tests/manual/wasm/qstdweb/promise_auto.html
new file mode 100644
index 0000000000..94a8dbb88a
--- /dev/null
+++ b/tests/manual/wasm/qstdweb/promise_auto.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<script type="text/javascript" src="qtwasmtestlib.js"></script>
+<script type="text/javascript" src="promise_auto.js"></script>
+<script>
+ window.onload = () => {
+ runTestCase(promise_auto_entry, document.getElementById("log"));
+ };
+</script>
+<p>Running promise auto test.</p>
+<div id="log"></div>
diff --git a/tests/manual/wasm/qstdweb/promise_main.cpp b/tests/manual/wasm/qstdweb/promise_main.cpp
new file mode 100644
index 0000000000..c5f6f7f412
--- /dev/null
+++ b/tests/manual/wasm/qstdweb/promise_main.cpp
@@ -0,0 +1,486 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QCoreApplication>
+#include <QtCore/QEvent>
+#include <QtCore/QMutex>
+#include <QtCore/QObject>
+#include <QtCore/private/qstdweb_p.h>
+
+#include <qtwasmtestlib.h>
+#include <emscripten.h>
+
+using namespace emscripten;
+
+class WasmPromiseTest : public QObject
+{
+ Q_OBJECT
+
+public:
+ WasmPromiseTest() : m_window(val::global("window")), m_testSupport(val::object()) {}
+
+ ~WasmPromiseTest() noexcept = default;
+
+private:
+ void init() {
+ m_testSupport = val::object();
+ m_window.set("testSupport", m_testSupport);
+
+ EM_ASM({
+ testSupport.resolve = {};
+ testSupport.reject = {};
+ testSupport.promises = {};
+ testSupport.waitConditionPromise = new Promise((resolve, reject) => {
+ testSupport.finishWaiting = resolve;
+ });
+
+ testSupport.makeTestPromise = (param) => {
+ testSupport.promises[param] = new Promise((resolve, reject) => {
+ testSupport.resolve[param] = resolve;
+ testSupport.reject[param] = reject;
+ });
+
+ return testSupport.promises[param];
+ };
+ });
+ }
+
+ val m_window;
+ val m_testSupport;
+
+private slots:
+ void simpleResolve();
+ void multipleResolve();
+ void simpleReject();
+ void multipleReject();
+ void throwInThen();
+ void bareFinally();
+ void finallyWithThen();
+ void finallyWithThrow();
+ void finallyWithThrowInThen();
+ void nested();
+ void all();
+ void allWithThrow();
+ void allWithFinally();
+ void allWithFinallyAndThrow();
+};
+
+class BarrierCallback {
+public:
+ BarrierCallback(int number, std::function<void()> onDone)
+ : m_remaining(number), m_onDone(std::move(onDone)) {}
+
+ void operator()() {
+ if (!--m_remaining) {
+ m_onDone();
+ }
+ }
+
+private:
+ int m_remaining;
+ std::function<void()> m_onDone;
+};
+
+// Post event to the main thread and verify that it is processed.
+void WasmPromiseTest::simpleResolve()
+{
+ init();
+
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .thenFunc = [](val result) {
+ QWASMVERIFY(result.isString());
+ QWASMCOMPARE("Some lovely data", result.as<std::string>());
+
+ QWASMSUCCESS();
+ },
+ .catchFunc = [](val error) {
+ Q_UNUSED(error);
+
+ QWASMFAIL("Unexpected catch");
+ }
+ }, std::string("simpleResolve"));
+
+ EM_ASM({
+ testSupport.resolve["simpleResolve"]("Some lovely data");
+ });
+}
+
+void WasmPromiseTest::multipleResolve()
+{
+ init();
+
+ static constexpr int promiseCount = 1000;
+
+ auto onThen = std::make_shared<BarrierCallback>(promiseCount, []() {
+ QWASMSUCCESS();
+ });
+
+ for (int i = 0; i < promiseCount; ++i) {
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .thenFunc = [=](val result) {
+ QWASMVERIFY(result.isString());
+ QWASMCOMPARE(QString::number(i).toStdString(), result.as<std::string>());
+
+ (*onThen)();
+ },
+ .catchFunc = [](val error) {
+ Q_UNUSED(error);
+ QWASMFAIL("Unexpected catch");
+ }
+ }, (QStringLiteral("test") + QString::number(i)).toStdString());
+ }
+
+ EM_ASM({
+ for (let i = $0 - 1; i >= 0; --i) {
+ testSupport.resolve['test' + i](`${i}`);
+ }
+ }, promiseCount);
+}
+
+void WasmPromiseTest::simpleReject()
+{
+ init();
+
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .thenFunc = [](val result) {
+ Q_UNUSED(result);
+ QWASMFAIL("Unexpected then");
+ },
+ .catchFunc = [](val result) {
+ QWASMVERIFY(result.isString());
+ QWASMCOMPARE("Evil error", result.as<std::string>());
+ QWASMSUCCESS();
+ }
+ }, std::string("simpleReject"));
+
+ EM_ASM({
+ testSupport.reject["simpleReject"]("Evil error");
+ });
+}
+
+void WasmPromiseTest::multipleReject()
+{
+ static constexpr int promiseCount = 1000;
+
+ auto onCatch = std::make_shared<BarrierCallback>(promiseCount, []() {
+ QWASMSUCCESS();
+ });
+
+ for (int i = 0; i < promiseCount; ++i) {
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .thenFunc = [=](val result) {
+ QWASMVERIFY(result.isString());
+ QWASMCOMPARE(QString::number(i).toStdString(), result.as<std::string>());
+
+ (*onCatch)();
+ },
+ .catchFunc = [](val error) {
+ Q_UNUSED(error);
+ QWASMFAIL("Unexpected catch");
+ }
+ }, (QStringLiteral("test") + QString::number(i)).toStdString());
+ }
+
+ EM_ASM({
+ for (let i = $0 - 1; i >= 0; --i) {
+ testSupport.resolve['test' + i](`${i}`);
+ }
+ }, promiseCount);
+}
+
+void WasmPromiseTest::throwInThen()
+{
+ init();
+
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .thenFunc = [](val result) {
+ Q_UNUSED(result);
+ EM_ASM({
+ throw "Expected error";
+ });
+ },
+ .catchFunc = [](val error) {
+ QWASMCOMPARE("Expected error", error.as<std::string>());
+ QWASMSUCCESS();
+ }
+ }, std::string("throwInThen"));
+
+ EM_ASM({
+ testSupport.resolve["throwInThen"]();
+ });
+}
+
+void WasmPromiseTest::bareFinally()
+{
+ init();
+
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .finallyFunc = []() {
+ QWASMSUCCESS();
+ }
+ }, std::string("bareFinally"));
+
+ EM_ASM({
+ testSupport.resolve["bareFinally"]();
+ });
+}
+
+void WasmPromiseTest::finallyWithThen()
+{
+ init();
+
+ auto thenCalled = std::make_shared<bool>();
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .thenFunc = [thenCalled] (val result) {
+ Q_UNUSED(result);
+ *thenCalled = true;
+ },
+ .finallyFunc = [thenCalled]() {
+ QWASMVERIFY(*thenCalled);
+ QWASMSUCCESS();
+ }
+ }, std::string("finallyWithThen"));
+
+ EM_ASM({
+ testSupport.resolve["finallyWithThen"]();
+ });
+}
+
+void WasmPromiseTest::finallyWithThrow()
+{
+ init();
+
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .catchFunc = [](val error) {
+ Q_UNUSED(error);
+ },
+ .finallyFunc = []() {
+ QWASMSUCCESS();
+ }
+ }, std::string("finallyWithThrow"));
+
+ EM_ASM({
+ testSupport.reject["finallyWithThrow"]();
+ });
+}
+
+void WasmPromiseTest::finallyWithThrowInThen()
+{
+ init();
+
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .thenFunc = [](val result) {
+ Q_UNUSED(result);
+ EM_ASM({
+ throw "Expected error";
+ });
+ },
+ .catchFunc = [](val result) {
+ QWASMVERIFY(result.isString());
+ QWASMCOMPARE("Expected error", result.as<std::string>());
+ },
+ .finallyFunc = []() {
+ QWASMSUCCESS();
+ }
+ }, std::string("bareFinallyWithThen"));
+
+ EM_ASM({
+ testSupport.resolve["bareFinallyWithThen"]();
+ });
+}
+
+void WasmPromiseTest::nested()
+{
+ init();
+
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .thenFunc = [this](val result) {
+ QWASMVERIFY(result.isString());
+ QWASMCOMPARE("Outer data", result.as<std::string>());
+
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .thenFunc = [this](val innerResult) {
+ QWASMVERIFY(innerResult.isString());
+ QWASMCOMPARE("Inner data", innerResult.as<std::string>());
+
+ qstdweb::Promise::make(m_testSupport, "makeTestPromise", {
+ .thenFunc = [](val innerResult) {
+ QWASMVERIFY(innerResult.isString());
+ QWASMCOMPARE("Innermost data", innerResult.as<std::string>());
+
+ QWASMSUCCESS();
+ },
+ .catchFunc = [](val error) {
+ Q_UNUSED(error);
+ QWASMFAIL("Unexpected catch");
+ }
+ }, std::string("innermost"));
+
+ EM_ASM({
+ testSupport.resolve["innermost"]("Innermost data");
+ });
+ },
+ .catchFunc = [](val error) {
+ Q_UNUSED(error);
+ QWASMFAIL("Unexpected catch");
+ }
+ }, std::string("inner"));
+
+ EM_ASM({
+ testSupport.resolve["inner"]("Inner data");
+ });
+ },
+ .catchFunc = [](val error) {
+ Q_UNUSED(error);
+ QWASMFAIL("Unexpected catch");
+ }
+ }, std::string("outer"));
+
+ EM_ASM({
+ testSupport.resolve["outer"]("Outer data");
+ });
+}
+
+void WasmPromiseTest::all()
+{
+ init();
+
+ static constexpr int promiseCount = 1000;
+ auto thenCalledOnce = std::shared_ptr<bool>();
+ *thenCalledOnce = true;
+
+ std::vector<val> promises;
+ promises.reserve(promiseCount);
+
+ for (int i = 0; i < promiseCount; ++i) {
+ promises.push_back(m_testSupport.call<val>("makeTestPromise", val(("all" + QString::number(i)).toStdString())));
+ }
+
+ qstdweb::Promise::all(std::move(promises), {
+ .thenFunc = [=](val result) {
+ QWASMVERIFY(*thenCalledOnce);
+ *thenCalledOnce = false;
+
+ QWASMVERIFY(result.isArray());
+ QWASMCOMPARE(promiseCount, result["length"].as<int>());
+ for (int i = 0; i < promiseCount; ++i) {
+ QWASMCOMPARE(QStringLiteral("Data %1").arg(i).toStdString(), result[i].as<std::string>());
+ }
+
+ QWASMSUCCESS();
+ },
+ .catchFunc = [](val error) {
+ Q_UNUSED(error);
+ QWASMFAIL("Unexpected catch");
+ }
+ });
+
+ EM_ASM({
+ console.log('Resolving');
+ for (let i = $0 - 1; i >= 0; --i) {
+ testSupport.resolve['all' + i](`Data ${i}`);
+ }
+ }, promiseCount);
+}
+
+void WasmPromiseTest::allWithThrow()
+{
+ init();
+
+ val promise1 = m_testSupport.call<val>("makeTestPromise", val("promise1"));
+ val promise2 = m_testSupport.call<val>("makeTestPromise", val("promise2"));
+ val promise3 = m_testSupport.call<val>("makeTestPromise", val("promise3"));
+
+ auto catchCalledOnce = std::shared_ptr<bool>();
+ *catchCalledOnce = true;
+
+ qstdweb::Promise::all({promise1, promise2, promise3}, {
+ .thenFunc = [](val result) {
+ Q_UNUSED(result);
+ QWASMFAIL("Unexpected then");
+ },
+ .catchFunc = [catchCalledOnce](val result) {
+ QWASMVERIFY(*catchCalledOnce);
+ *catchCalledOnce = false;
+ QWASMVERIFY(result.isString());
+ QWASMCOMPARE("Error 2", result.as<std::string>());
+ QWASMSUCCESS();
+ }
+ });
+
+ EM_ASM({
+ testSupport.resolve["promise3"]("Data 3");
+ testSupport.resolve["promise1"]("Data 1");
+ testSupport.reject["promise2"]("Error 2");
+ });
+}
+
+void WasmPromiseTest::allWithFinally()
+{
+ init();
+
+ val promise1 = m_testSupport.call<val>("makeTestPromise", val("promise1"));
+ val promise2 = m_testSupport.call<val>("makeTestPromise", val("promise2"));
+ val promise3 = m_testSupport.call<val>("makeTestPromise", val("promise3"));
+
+ auto finallyCalledOnce = std::shared_ptr<bool>();
+ *finallyCalledOnce = true;
+
+ qstdweb::Promise::all({promise1, promise2, promise3}, {
+ .thenFunc = [](val result) {
+ Q_UNUSED(result);
+ },
+ .finallyFunc = [finallyCalledOnce]() {
+ QWASMVERIFY(*finallyCalledOnce);
+ *finallyCalledOnce = false;
+ QWASMSUCCESS();
+ }
+ });
+
+ EM_ASM({
+ testSupport.resolve["promise3"]("Data 3");
+ testSupport.resolve["promise1"]("Data 1");
+ testSupport.resolve["promise2"]("Data 2");
+ });
+}
+
+void WasmPromiseTest::allWithFinallyAndThrow()
+{
+ init();
+
+ val promise1 = m_testSupport.call<val>("makeTestPromise", val("promise1"));
+ val promise2 = m_testSupport.call<val>("makeTestPromise", val("promise2"));
+ val promise3 = m_testSupport.call<val>("makeTestPromise", val("promise3"));
+
+ auto finallyCalledOnce = std::shared_ptr<bool>();
+ *finallyCalledOnce = true;
+
+ qstdweb::Promise::all({promise1, promise2, promise3}, {
+ .thenFunc = [](val result) {
+ Q_UNUSED(result);
+ EM_ASM({
+ throw "This breaks it all!!!";
+ });
+ },
+ .finallyFunc = [finallyCalledOnce]() {
+ QWASMVERIFY(*finallyCalledOnce);
+ *finallyCalledOnce = false;
+ QWASMSUCCESS();
+ }
+ });
+
+ EM_ASM({
+ testSupport.resolve["promise3"]("Data 3");
+ testSupport.resolve["promise1"]("Data 1");
+ testSupport.resolve["promise2"]("Data 2");
+ });
+}
+
+int main(int argc, char **argv)
+{
+ auto testObject = std::make_shared<WasmPromiseTest>();
+ QtWasmTest::initTestCase<QCoreApplication>(argc, argv, testObject);
+ return 0;
+}
+
+#include "promise_main.moc"
diff --git a/tests/manual/wasm/qstdweb/qwasmcompositor_auto.html b/tests/manual/wasm/qstdweb/qwasmcompositor_auto.html
new file mode 100644
index 0000000000..f33aab0b9c
--- /dev/null
+++ b/tests/manual/wasm/qstdweb/qwasmcompositor_auto.html
@@ -0,0 +1,10 @@
+<!doctype html>
+<script type="text/javascript" src="qtwasmtestlib.js"></script>
+<script type="text/javascript" src="qwasmcompositor_auto.js"></script>
+<script>
+ window.onload = () => {
+ runTestCase(qwasmcompositor_auto_entry, document.getElementById("log"));
+ };
+</script>
+<p>Running files auto test.</p>
+<div id="log"></div>
diff --git a/tests/manual/wasm/qstdweb/qwasmcompositor_main.cpp b/tests/manual/wasm/qstdweb/qwasmcompositor_main.cpp
new file mode 100644
index 0000000000..e1a9cf604d
--- /dev/null
+++ b/tests/manual/wasm/qstdweb/qwasmcompositor_main.cpp
@@ -0,0 +1,172 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtCore/QEvent>
+#include <QtCore/QObject>
+#include <QtGui/qwindow.h>
+#include <QtGui/qguiapplication.h>
+#include <QtGui/qoffscreensurface.h>
+#include <QtGui/qpa/qwindowsysteminterface.h>
+#include <QtGui/rhi/qrhi.h>
+
+#include <qtwasmtestlib.h>
+
+#include <emscripten.h>
+#include <emscripten/val.h>
+
+#include <functional>
+#include <memory>
+#include <vector>
+
+namespace tst_qwasmcompositor_internal {
+namespace {
+class Window : public QWindow
+{
+ Q_OBJECT
+public:
+ Window();
+ ~Window() override { qDebug() << "dtor Window"; }
+
+ void keyPressEvent(QKeyEvent *) final;
+
+signals:
+ void exposed();
+ void keyEventReceived();
+ void initFailed();
+
+protected:
+private:
+ void init();
+
+ void exposeEvent(QExposeEvent *) override;
+ bool m_exposedOnce = false;
+
+ std::unique_ptr<QOffscreenSurface> m_fallbackSurface;
+ std::unique_ptr<QRhi> m_rhi;
+};
+
+Window::Window()
+{
+ setSurfaceType(OpenGLSurface);
+}
+
+void Window::exposeEvent(QExposeEvent *)
+{
+ if (isExposed() && !m_exposedOnce) {
+ m_exposedOnce = true;
+ init();
+ emit exposed();
+ }
+}
+
+void Window::keyPressEvent(QKeyEvent *)
+{
+ emit keyEventReceived();
+}
+
+void Window::init()
+{
+ QRhi::Flags rhiFlags = QRhi::EnableDebugMarkers;
+
+ m_fallbackSurface.reset(QRhiGles2InitParams::newFallbackSurface());
+ QRhiGles2InitParams params;
+ params.fallbackSurface = m_fallbackSurface.get();
+ params.window = this;
+
+ // Double init of RHI causes the OpenGL context to be destroyed, which causes a bug with input.
+ m_rhi.reset(QRhi::create(QRhi::OpenGLES2, &params, rhiFlags));
+ m_rhi.reset(QRhi::create(QRhi::OpenGLES2, &params, rhiFlags));
+
+ if (!m_rhi)
+ emit initFailed();
+}
+
+} // namespace
+} // namespace tst_qwasmcompositor_internal
+
+using namespace emscripten;
+
+class QWasmCompositorTest : public QObject
+{
+ Q_OBJECT
+
+public:
+ QWasmCompositorTest() : m_window(val::global("window")), m_testSupport(val::object())
+ {
+ m_window.set("testSupport", m_testSupport);
+ m_testSupport.set("qtSetContainerElements",
+ emscripten::val::module_property("qtSetContainerElements"));
+ }
+
+ ~QWasmCompositorTest() noexcept
+ {
+ qDebug() << this << "In dtor";
+ for (auto it = m_cleanup.rbegin(); it != m_cleanup.rend(); ++it)
+ (*it)();
+ m_window.set("testSupport", emscripten::val::undefined());
+ }
+
+private:
+ void init()
+ {
+ EM_ASM({
+ testSupport.screenElement = document.createElement("div");
+ testSupport.screenElement.id = "test-canvas-qwasmcompositor";
+ document.body.appendChild(testSupport.screenElement);
+ });
+ m_cleanup.emplace_back([]() mutable {
+ EM_ASM({
+ testSupport.qtSetContainerElements([]);
+ testSupport.screenElement.parentElement.removeChild(testSupport.screenElement);
+ });
+ });
+
+ EM_ASM({ testSupport.qtSetContainerElements([testSupport.screenElement]); });
+ }
+
+ template<class T>
+ T *Own(T *plainPtr)
+ {
+ m_cleanup.emplace_back([plainPtr]() mutable { delete plainPtr; });
+ return plainPtr;
+ }
+
+ val m_window;
+ val m_testSupport;
+
+ std::vector<std::function<void()>> m_cleanup;
+
+private slots:
+ void testReceivingKeyboardEventsAfterOpenGLContextReset();
+};
+
+void QWasmCompositorTest::testReceivingKeyboardEventsAfterOpenGLContextReset()
+{
+ init();
+
+ using Window = tst_qwasmcompositor_internal::Window;
+ Window *window = Own(new Window);
+ window->show();
+ window->requestActivate();
+
+ QWindowSystemInterface::flushWindowSystemEvents();
+
+ QObject::connect(window, &Window::keyEventReceived, []() { QWASMSUCCESS(); });
+ QObject::connect(window, &Window::initFailed,
+ []() { QWASMFAIL("Cannot initialize test window"); });
+ QObject::connect(window, &Window::exposed, []() {
+ EM_ASM({
+ testSupport.screenElement.shadowRoot.querySelector('.qt-window')
+ .dispatchEvent(new KeyboardEvent('keydown', { key : 'a' }));
+ });
+ });
+}
+
+int main(int argc, char **argv)
+{
+ auto testObject = std::make_shared<QWasmCompositorTest>();
+ QtWasmTest::initTestCase<QGuiApplication>(argc, argv, testObject);
+ return 0;
+}
+
+#include "qwasmcompositor_main.moc"
diff --git a/tests/manual/wasm/qtloader/tst_qtloader.html b/tests/manual/wasm/qtloader/tst_qtloader.html
new file mode 100644
index 0000000000..c85bccc68d
--- /dev/null
+++ b/tests/manual/wasm/qtloader/tst_qtloader.html
@@ -0,0 +1,19 @@
+<!--
+Copyright (C) 2022 The Qt Company Ltd.
+SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+-->
+
+<!doctype html>
+<html>
+
+<head>
+ <meta charset="utf-8">
+ <title>Qt Loader tests</title>
+ <script type="text/javascript" src="https://sinonjs.org/releases/sinon-14.0.0.js"
+ integrity="sha384-z8J4N1s2hPDn6ClmFXDQkKD/e738VOWcR8JmhztPRa+PgezxQupgZu3LzoBO4Jw8"
+ crossorigin="anonymous"></script>
+ <script src="/src/plugins/platforms/wasm/qtloader.js"></script>
+ <script src="tst_qtloader.js" type="module" defer></script>
+</head>
+<body></body>
+</html>
diff --git a/tests/manual/wasm/qtloader/tst_qtloader.js b/tests/manual/wasm/qtloader/tst_qtloader.js
new file mode 100644
index 0000000000..39e0d12807
--- /dev/null
+++ b/tests/manual/wasm/qtloader/tst_qtloader.js
@@ -0,0 +1,42 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import { TestRunner } from '../shared/testrunner.js';
+
+class QtLoaderTests
+{
+ async beforeEach() { sinon.stub(window, 'alert'); }
+
+ async afterEach() { sinon.restore(); }
+
+ async sampleTestCase()
+ {
+ await new Promise(resolve =>
+ {
+ window.alert();
+ sinon.assert.calledOnce(window.alert);
+ window.setTimeout(resolve, 4000);
+ });
+ }
+
+ async sampleTestCase2()
+ {
+ await new Promise(resolve =>
+ {
+ window.alert();
+ sinon.assert.calledOnce(window.alert);
+ window.setTimeout(resolve, 1000);
+ });
+ }
+
+ async constructQtLoader()
+ {
+ new QtLoader({});
+ }
+}
+
+(async () =>
+{
+ const runner = new TestRunner(new QtLoaderTests());
+ await runner.runAll();
+})();
diff --git a/tests/manual/wasm/qtloader_integration/CMakeLists.txt b/tests/manual/wasm/qtloader_integration/CMakeLists.txt
new file mode 100644
index 0000000000..2603a05135
--- /dev/null
+++ b/tests/manual/wasm/qtloader_integration/CMakeLists.txt
@@ -0,0 +1,45 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_internal_add_manual_test(tst_qtloader_integration
+ GUI
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Core
+ Qt::Gui
+ Qt::GuiPrivate
+ Qt::Widgets
+)
+
+set_target_properties(tst_qtloader_integration PROPERTIES QT_WASM_EXTRA_EXPORTED_METHODS "ENV")
+
+add_custom_command(
+ TARGET tst_qtloader_integration POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/tst_qtloader_integration.html
+ ${CMAKE_CURRENT_BINARY_DIR}/tst_qtloader_integration.html)
+
+add_custom_command(
+ TARGET tst_qtloader_integration POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/plugins/platforms/wasm/qtloader.js
+ ${CMAKE_CURRENT_BINARY_DIR}/qtloader.js)
+
+add_custom_command(
+ TARGET tst_qtloader_integration POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/../shared/testrunner.js
+ ${CMAKE_CURRENT_BINARY_DIR}/testrunner.js)
+
+add_custom_command(
+ TARGET tst_qtloader_integration POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/test_body.js
+ ${CMAKE_CURRENT_BINARY_DIR}/test_body.js)
+
+add_custom_command(
+ TARGET tst_qtloader_integration POST_BUILD
+ COMMAND ${CMAKE_COMMAND} -E copy
+ ${CMAKE_CURRENT_SOURCE_DIR}/preload.json
+ ${CMAKE_CURRENT_BINARY_DIR}/preload.json)
diff --git a/tests/manual/wasm/qtloader_integration/main.cpp b/tests/manual/wasm/qtloader_integration/main.cpp
new file mode 100644
index 0000000000..4bb502b69c
--- /dev/null
+++ b/tests/manual/wasm/qtloader_integration/main.cpp
@@ -0,0 +1,183 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+#include <QtWidgets/QtWidgets>
+
+#include <iostream>
+#include <sstream>
+
+#include <emscripten/bind.h>
+#include <emscripten/val.h>
+#include <emscripten.h>
+
+#include <QtGui/qpa/qplatformscreen.h>
+
+namespace {
+constexpr int ExitValueImmediateReturn = 42;
+constexpr int ExitValueFromExitApp = 22;
+
+std::string screenInformation()
+{
+ auto screens = qGuiApp->screens();
+ std::ostringstream out;
+ out << "[";
+ const char *separator = "";
+ for (const auto &screen : screens) {
+ out << separator;
+ out << "[" << std::to_string(screen->geometry().x()) << ","
+ << std::to_string(screen->geometry().y()) << ","
+ << std::to_string(screen->geometry().width()) << ","
+ << std::to_string(screen->geometry().height()) << "]";
+ separator = ",";
+ }
+ out << "]";
+ return out.str();
+}
+
+std::string logicalDpi()
+{
+ auto screens = qGuiApp->screens();
+ std::ostringstream out;
+ out << "[";
+ const char *separator = "";
+ for (const auto &screen : screens) {
+ out << separator;
+ out << "[" << std::to_string(screen->handle()->logicalDpi().first) << ", "
+ << std::to_string(screen->handle()->logicalDpi().second) << "]";
+ separator = ",";
+ }
+ out << "]";
+ return out.str();
+}
+
+std::string preloadedFiles()
+{
+ QStringList files = QDir("/preload").entryList(QDir::Files);
+ std::ostringstream out;
+ out << "[";
+ const char *separator = "";
+ for (const auto &file : files) {
+ out << separator;
+ out << file.toStdString();
+ separator = ",";
+ }
+ out << "]";
+ return out.str();
+}
+
+void crash()
+{
+ std::abort();
+}
+
+void stackOverflow()
+{
+ stackOverflow(); // should eventually termniate with exception
+}
+
+void exitApp()
+{
+ emscripten_force_exit(ExitValueFromExitApp);
+}
+
+void produceOutput()
+{
+ fprintf(stdout, "Sample output!\n");
+}
+
+std::string retrieveArguments()
+{
+ auto arguments = QApplication::arguments();
+ std::ostringstream out;
+ out << "[";
+ const char *separator = "";
+ for (const auto &argument : arguments) {
+ out << separator;
+ out << "'" << argument.toStdString() << "'";
+ separator = ",";
+ }
+ out << "]";
+ return out.str();
+}
+
+std::string getEnvironmentVariable(std::string name) {
+ return QString::fromLatin1(qgetenv(name.c_str())).toStdString();
+}
+} // namespace
+
+class AppWindow : public QObject
+{
+ Q_OBJECT
+public:
+ AppWindow() : m_layout(new QVBoxLayout(&m_ui))
+ {
+ addWidget<QLabel>("Qt Loader integration tests");
+
+ m_ui.setLayout(m_layout);
+ }
+
+ void show() { m_ui.show(); }
+
+ ~AppWindow() = default;
+
+private:
+ template<class T, class... Args>
+ T *addWidget(Args... args)
+ {
+ T *widget = new T(std::forward<Args>(args)..., &m_ui);
+ m_layout->addWidget(widget);
+ return widget;
+ }
+
+ QWidget m_ui;
+ QVBoxLayout *m_layout;
+};
+
+int main(int argc, char **argv)
+{
+ QApplication application(argc, argv);
+ const auto arguments = application.arguments();
+ const bool exitImmediately =
+ std::find(arguments.begin(), arguments.end(), QStringLiteral("--exit-immediately"))
+ != arguments.end();
+ if (exitImmediately)
+ emscripten_force_exit(ExitValueImmediateReturn);
+
+ const bool crashImmediately =
+ std::find(arguments.begin(), arguments.end(), QStringLiteral("--crash-immediately"))
+ != arguments.end();
+ if (crashImmediately)
+ crash();
+
+ const bool stackOverflowImmediately =
+ std::find(arguments.begin(), arguments.end(), QStringLiteral("--stack-owerflow-immediately"))
+ != arguments.end();
+ if (stackOverflowImmediately)
+ stackOverflow();
+
+ const bool noGui = std::find(arguments.begin(), arguments.end(), QStringLiteral("--no-gui"))
+ != arguments.end();
+
+ if (!noGui) {
+ AppWindow window;
+ window.show();
+ return application.exec();
+ }
+ return application.exec();
+}
+
+EMSCRIPTEN_BINDINGS(qtLoaderIntegrationTest)
+{
+ emscripten::constant("EXIT_VALUE_IMMEDIATE_RETURN", ExitValueImmediateReturn);
+ emscripten::constant("EXIT_VALUE_FROM_EXIT_APP", ExitValueFromExitApp);
+
+ emscripten::function("screenInformation", &screenInformation);
+ emscripten::function("logicalDpi", &logicalDpi);
+ emscripten::function("preloadedFiles", &preloadedFiles);
+ emscripten::function("crash", &crash);
+ emscripten::function("exitApp", &exitApp);
+ emscripten::function("produceOutput", &produceOutput);
+ emscripten::function("retrieveArguments", &retrieveArguments);
+ emscripten::function("getEnvironmentVariable", &getEnvironmentVariable);
+}
+
+#include "main.moc"
diff --git a/tests/manual/wasm/qtloader_integration/preload.json b/tests/manual/wasm/qtloader_integration/preload.json
new file mode 100644
index 0000000000..d7e09911ff
--- /dev/null
+++ b/tests/manual/wasm/qtloader_integration/preload.json
@@ -0,0 +1,10 @@
+[
+ {
+ "source": "qtloader.js",
+ "destination": "/preload/qtloader.js"
+ },
+ {
+ "source": "$QTDIR/qtlogo.svg",
+ "destination": "/preload/qtlogo.svg"
+ }
+]
diff --git a/tests/manual/wasm/qtloader_integration/test_body.js b/tests/manual/wasm/qtloader_integration/test_body.js
new file mode 100644
index 0000000000..e08ffdefbb
--- /dev/null
+++ b/tests/manual/wasm/qtloader_integration/test_body.js
@@ -0,0 +1,517 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDXLicenseIdentifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import { Mock, assert, TestRunner } from './testrunner.js';
+
+export class QtLoaderIntegrationTests
+{
+ #testScreenContainers = []
+
+ async beforeEach()
+ {
+ this.#addScreenContainer('screen-container-0', { width: '200px', height: '300px' });
+ }
+
+ async afterEach()
+ {
+ this.#testScreenContainers.forEach(screenContainer =>
+ {
+ document.body.removeChild(screenContainer);
+ });
+ this.#testScreenContainers = [];
+ }
+
+ async missingConfig()
+ {
+ let caughtException;
+ try {
+ await qtLoad();
+ } catch (e) {
+ caughtException = e;
+ }
+
+ assert.isNotUndefined(caughtException);
+ assert.equal('config is required, expected an object', caughtException.message);
+ }
+
+ async missingQtSection()
+ {
+ let caughtException;
+ try {
+ await qtLoad({});
+ } catch (e) {
+ caughtException = e;
+ }
+
+ assert.isNotUndefined(caughtException);
+ assert.equal(
+ 'config.qt is required, expected an object', caughtException.message);
+ }
+
+ async missingEntryFunction()
+ {
+ let caughtException;
+ try {
+ await qtLoad({ qt: {}});
+ } catch (e) {
+ caughtException = e;
+ }
+
+ assert.isNotUndefined(caughtException);
+ assert.equal(
+ 'config.qt.entryFunction is required, expected a function', caughtException.message);
+ }
+
+ async badEntryFunction()
+ {
+ let caughtException;
+ try {
+ await qtLoad({ qt: { entryFunction: 'invalid' }});
+ } catch (e) {
+ caughtException = e;
+ }
+
+ assert.isNotUndefined(caughtException);
+ assert.equal(
+ 'config.qt.entryFunction is required, expected a function', caughtException.message);
+ }
+
+ async environmentVariables()
+ {
+ const instance = await qtLoad({
+ qt: {
+ environment: {
+ variable1: 'value1',
+ variable2: 'value2'
+ },
+ entryFunction: tst_qtloader_integration_entry,
+ containerElements: [this.#testScreenContainers[0]]
+ }
+ });
+ assert.isTrue(instance.getEnvironmentVariable('variable1') === 'value1');
+ assert.isTrue(instance.getEnvironmentVariable('variable2') === 'value2');
+ }
+
+ async screenContainerManipulations()
+ {
+ // ... (do other things), then call addContainerElement() to add a new container/screen.
+ // This can happen either before or after load() is called - loader will route the
+ // call to instance when it's ready.
+ this.#addScreenContainer('appcontainer1', { width: '100px', height: '100px' })
+
+ const instance = await qtLoad({
+ qt: {
+ entryFunction: tst_qtloader_integration_entry,
+ containerElements: this.#testScreenContainers
+ }
+ });
+ {
+ const screenInformation = this.#getScreenInformation(instance);
+
+ assert.equal(2, screenInformation.length);
+ assert.equal(200, screenInformation[0].width);
+ assert.equal(300, screenInformation[0].height);
+ assert.equal(100, screenInformation[1].width);
+ assert.equal(100, screenInformation[1].height);
+ }
+
+ this.#addScreenContainer('appcontainer2', { width: '234px', height: '99px' })
+ instance.qtSetContainerElements(this.#testScreenContainers);
+
+ {
+ const screenInformation = this.#getScreenInformation(instance);
+
+ assert.equal(3, screenInformation.length);
+ assert.equal(200, screenInformation[0].width);
+ assert.equal(300, screenInformation[0].height);
+ assert.equal(100, screenInformation[1].width);
+ assert.equal(100, screenInformation[1].height);
+ assert.equal(234, screenInformation[2].width);
+ assert.equal(99, screenInformation[2].height);
+ }
+
+ document.body.removeChild(this.#testScreenContainers.splice(2, 1)[0]);
+ instance.qtSetContainerElements(this.#testScreenContainers);
+ {
+ const screenInformation = this.#getScreenInformation(instance);
+
+ assert.equal(2, screenInformation.length);
+ assert.equal(200, screenInformation[0].width);
+ assert.equal(300, screenInformation[0].height);
+ assert.equal(100, screenInformation[1].width);
+ assert.equal(100, screenInformation[1].height);
+ }
+ }
+
+ async primaryScreenIsAlwaysFirst()
+ {
+ const instance = await qtLoad({
+ qt: {
+ entryFunction: tst_qtloader_integration_entry,
+ containerElements: this.#testScreenContainers,
+ }
+ });
+ this.#addScreenContainer(
+ 'appcontainer3', { width: '12px', height: '24px' },
+ container => this.#testScreenContainers.splice(0, 0, container));
+ this.#addScreenContainer(
+ 'appcontainer4', { width: '34px', height: '68px' },
+ container => this.#testScreenContainers.splice(1, 0, container));
+
+ instance.qtSetContainerElements(this.#testScreenContainers);
+ {
+ const screenInformation = this.#getScreenInformation(instance);
+
+ assert.equal(3, screenInformation.length);
+ // The primary screen (at position 0) is always at 0
+ assert.equal(12, screenInformation[0].width);
+ assert.equal(24, screenInformation[0].height);
+ // Other screens are pushed at the back
+ assert.equal(200, screenInformation[1].width);
+ assert.equal(300, screenInformation[1].height);
+ assert.equal(34, screenInformation[2].width);
+ assert.equal(68, screenInformation[2].height);
+ }
+
+ this.#testScreenContainers.forEach(screenContainer =>
+ {
+ document.body.removeChild(screenContainer);
+ });
+ this.#testScreenContainers = [
+ this.#addScreenContainer('appcontainer5', { width: '11px', height: '12px' }),
+ this.#addScreenContainer('appcontainer6', { width: '13px', height: '14px' }),
+ ];
+
+ instance.qtSetContainerElements(this.#testScreenContainers);
+ {
+ const screenInformation = this.#getScreenInformation(instance);
+
+ assert.equal(2, screenInformation.length);
+ assert.equal(11, screenInformation[0].width);
+ assert.equal(12, screenInformation[0].height);
+ assert.equal(13, screenInformation[1].width);
+ assert.equal(14, screenInformation[1].height);
+ }
+ }
+
+ async multipleInstances()
+ {
+ // Fetch/Compile the module once; reuse for each instance. This is also if the page wants to
+ // initiate the .wasm file download fetch as early as possible, before the browser has
+ // finished fetching and parsing testapp.js and qtloader.js
+ const module = WebAssembly.compileStreaming(fetch('tst_qtloader_integration.wasm'));
+
+ const instances = await Promise.all([1, 2, 3].map(i => qtLoad({
+ qt: {
+ entryFunction: tst_qtloader_integration_entry,
+ containerElements: [this.#addScreenContainer(`screen-container-${i}`, {
+ width: `${i * 10}px`,
+ height: `${i * 10}px`,
+ })],
+ module,
+ }
+ })));
+ // Confirm the identity of instances by querying their screen widths and heights
+ {
+ const screenInformation = this.#getScreenInformation(instances[0]);
+ console.log();
+ assert.equal(1, screenInformation.length);
+ assert.equal(10, screenInformation[0].width);
+ assert.equal(10, screenInformation[0].height);
+ }
+ {
+ const screenInformation = this.#getScreenInformation(instances[1]);
+ assert.equal(1, screenInformation.length);
+ assert.equal(20, screenInformation[0].width);
+ assert.equal(20, screenInformation[0].height);
+ }
+ {
+ const screenInformation = this.#getScreenInformation(instances[2]);
+ assert.equal(1, screenInformation.length);
+ assert.equal(30, screenInformation[0].width);
+ assert.equal(30, screenInformation[0].height);
+ }
+ }
+
+ async consoleMode()
+ {
+ // 'Console mode' for autotesting type scenarios
+ let accumulatedStdout = '';
+ const instance = await qtLoad({
+ arguments: ['--no-gui'],
+ print: output =>
+ {
+ accumulatedStdout += output;
+ },
+ qt: {
+ entryFunction: tst_qtloader_integration_entry,
+ }
+ });
+
+ this.#callTestInstanceApi(instance, 'produceOutput');
+ assert.equal('Sample output!', accumulatedStdout);
+ }
+
+ async modulePromiseProvided()
+ {
+ await qtLoad({
+ qt: {
+ entryFunction: createQtAppInstance,
+ containerElements: [this.#testScreenContainers[0]],
+ module: WebAssembly.compileStreaming(
+ fetch('tst_qtloader_integration.wasm'))
+ }
+ });
+ }
+
+ async moduleProvided()
+ {
+ await qtLoad({
+ qt: {
+ entryFunction: tst_qtloader_integration_entry,
+ containerElements: [this.#testScreenContainers[0]],
+ module: await WebAssembly.compileStreaming(
+ fetch('tst_qtloader_integration.wasm'))
+ }
+ });
+ }
+
+ async arguments()
+ {
+ const instance = await qtLoad({
+ arguments: ['--no-gui', 'arg1', 'other', 'yetanotherarg'],
+ qt: {
+ entryFunction: tst_qtloader_integration_entry,
+ }
+ });
+ const args = this.#callTestInstanceApi(instance, 'retrieveArguments');
+ assert.equal(5, args.length);
+ assert.isTrue('arg1' === args[2]);
+ assert.equal('other', args[3]);
+ assert.equal('yetanotherarg', args[4]);
+ }
+
+ async moduleProvided_exceptionThrownInFactory()
+ {
+ let caughtException;
+ try {
+ await qtLoad({
+ qt: {
+ entryFunction: tst_qtloader_integration_entry,
+ containerElements: [this.#testScreenContainers[0]],
+ module: Promise.reject(new Error('Failed to load')),
+ }
+ });
+ } catch (e) {
+ caughtException = e;
+ }
+ assert.isTrue(caughtException !== undefined);
+ assert.equal('Failed to load', caughtException.message);
+ }
+
+ async abort()
+ {
+ const onExitMock = new Mock();
+ const instance = await qtLoad({
+ arguments: ['--no-gui'],
+ qt: {
+ onExit: onExitMock,
+ entryFunction: tst_qtloader_integration_entry,
+ }
+ });
+ try {
+ instance.crash();
+ } catch { }
+ assert.equal(1, onExitMock.calls.length);
+ const exitStatus = onExitMock.calls[0][0];
+ assert.isTrue(exitStatus.crashed);
+ assert.isUndefined(exitStatus.code);
+ assert.isNotUndefined(exitStatus.text);
+ }
+
+ async abortImmediately()
+ {
+ const onExitMock = new Mock();
+ let caughtException;
+ try {
+ await qtLoad({
+ arguments: ['--no-gui', '--crash-immediately'],
+ qt: {
+ onExit: onExitMock,
+ entryFunction: tst_qtloader_integration_entry,
+ }
+ });
+ } catch (e) {
+ caughtException = e;
+ }
+
+ assert.isTrue(caughtException !== undefined);
+ assert.equal(1, onExitMock.calls.length);
+ const exitStatus = onExitMock.calls[0][0];
+ assert.isTrue(exitStatus.crashed);
+ assert.isUndefined(exitStatus.code);
+ assert.isNotUndefined(exitStatus.text);
+ }
+
+ async stackOwerflowImmediately()
+ {
+ const onExitMock = new Mock();
+ let caughtException;
+ try {
+ await qtLoad({
+ arguments: ['--no-gui', '--stack-owerflow-immediately'],
+ qt: {
+ onExit: onExitMock,
+ entryFunction: tst_qtloader_integration_entry,
+ }
+ });
+ } catch (e) {
+ caughtException = e;
+ }
+
+ assert.isTrue(caughtException !== undefined);
+ assert.equal(1, onExitMock.calls.length);
+ const exitStatus = onExitMock.calls[0][0];
+ assert.isTrue(exitStatus.crashed);
+ assert.isUndefined(exitStatus.code);
+ // text should be "RangeError: Maximum call stack
+ // size exceeded", or similar.
+ assert.isNotUndefined(exitStatus.text);
+ }
+
+ async userAbortCallbackCalled()
+ {
+ const onAbortMock = new Mock();
+ let instance = await qtLoad({
+ arguments: ['--no-gui'],
+ onAbort: onAbortMock,
+ qt: {
+ entryFunction: tst_qtloader_integration_entry,
+ }
+ });
+ try {
+ instance.crash();
+ } catch (e) {
+ // emscripten throws an 'Aborted' error here, which we ignore for the sake of the test
+ }
+ assert.equal(1, onAbortMock.calls.length);
+ }
+
+ async exit()
+ {
+ const onExitMock = new Mock();
+ let instance = await qtLoad({
+ arguments: ['--no-gui'],
+ qt: {
+ onExit: onExitMock,
+ entryFunction: tst_qtloader_integration_entry,
+ }
+ });
+ // The module is running. onExit should not have been called.
+ assert.equal(0, onExitMock.calls.length);
+ try {
+ instance.exitApp();
+ } catch (e) {
+ // emscripten throws a 'Runtime error: unreachable' error here. We ignore it for the
+ // sake of the test.
+ }
+ assert.equal(1, onExitMock.calls.length);
+ const exitStatus = onExitMock.calls[0][0];
+ assert.isFalse(exitStatus.crashed);
+ assert.equal(instance.EXIT_VALUE_FROM_EXIT_APP, exitStatus.code);
+ assert.isUndefined(exitStatus.text);
+ }
+
+ async exitImmediately()
+ {
+ const onExitMock = new Mock();
+ const instance = await qtLoad({
+ arguments: ['--no-gui', '--exit-immediately'],
+ qt: {
+ onExit: onExitMock,
+ entryFunction: tst_qtloader_integration_entry,
+ }
+ });
+ assert.equal(1, onExitMock.calls.length);
+
+ const exitStatusFromOnExit = onExitMock.calls[0][0];
+
+ assert.isFalse(exitStatusFromOnExit.crashed);
+ assert.equal(instance.EXIT_VALUE_IMMEDIATE_RETURN, exitStatusFromOnExit.code);
+ assert.isUndefined(exitStatusFromOnExit.text);
+ }
+
+ async userQuitCallbackCalled()
+ {
+ const quitMock = new Mock();
+ let instance = await qtLoad({
+ arguments: ['--no-gui'],
+ quit: quitMock,
+ qt: {
+ entryFunction: tst_qtloader_integration_entry,
+ }
+ });
+ try {
+ instance.exitApp();
+ } catch (e) {
+ // emscripten throws a 'Runtime error: unreachable' error here. We ignore it for the
+ // sake of the test.
+ }
+ assert.equal(1, quitMock.calls.length);
+ const [exitCode, exception] = quitMock.calls[0];
+ assert.equal(instance.EXIT_VALUE_FROM_EXIT_APP, exitCode);
+ assert.equal('ExitStatus', exception.name);
+ }
+
+ async preloadFiles()
+ {
+ const instance = await qtLoad({
+ arguments: ["--no-gui"],
+ qt: {
+ preload: ['preload.json'],
+ qtdir: '.',
+ }
+ });
+ const preloadedFiles = instance.preloadedFiles();
+ // Verify that preloaded file list matches files specified in preload.json
+ assert.equal("[qtloader.js,qtlogo.svg]", preloadedFiles);
+ }
+
+ #callTestInstanceApi(instance, apiName)
+ {
+ return eval(instance[apiName]());
+ }
+
+ #getScreenInformation(instance)
+ {
+ return this.#callTestInstanceApi(instance, 'screenInformation').map(elem => ({
+ x: elem[0],
+ y: elem[1],
+ width: elem[2],
+ height: elem[3],
+ }));
+ }
+
+ #addScreenContainer(id, style, inserter)
+ {
+ const container = (() =>
+ {
+ const container = document.createElement('div');
+ container.id = id;
+ container.style.width = style.width;
+ container.style.height = style.height;
+ document.body.appendChild(container);
+ return container;
+ })();
+ inserter ? inserter(container) : this.#testScreenContainers.push(container);
+ return container;
+ }
+}
+
+(async () =>
+{
+ const runner = new TestRunner(new QtLoaderIntegrationTests(), {
+ timeoutSeconds: 10
+ });
+ await runner.runAll();
+})();
diff --git a/tests/manual/wasm/qtloader_integration/tst_qtloader_integration.html b/tests/manual/wasm/qtloader_integration/tst_qtloader_integration.html
new file mode 100644
index 0000000000..7aa7528a1d
--- /dev/null
+++ b/tests/manual/wasm/qtloader_integration/tst_qtloader_integration.html
@@ -0,0 +1,13 @@
+<!doctype html>
+<html lang="en-us">
+
+<head>
+ <title>tst_qtloader_integration</title>
+ <script src='tst_qtloader_integration.js'></script>
+ <script src="qtloader.js" defer></script>
+ <script type="module" src="test_body.js" defer></script>
+</head>
+
+<body></body>
+
+</html>
diff --git a/tests/manual/wasm/qtwasmtestlib/README.md b/tests/manual/wasm/qtwasmtestlib/README.md
new file mode 100644
index 0000000000..6de81fe8b4
--- /dev/null
+++ b/tests/manual/wasm/qtwasmtestlib/README.md
@@ -0,0 +1,75 @@
+QtWasmTestLib - async auto tests for WebAssembly
+================================================
+
+QtWasmTestLib supports auto-test cases in the web browser. Like QTestLib, each
+test case is defined by a QObject subclass with one or more test functions. The
+test functions may be asynchronous, where they return early and then complete
+at some later point.
+
+The test lib is implemented as a C++ and JavaScript library, where the test is written
+using C++ and a hosting html page calls JavaScript API to run the test.
+
+Implementing a basic test case
+------------------------------
+
+In the test cpp file, define the test functions as private slots. All test
+functions must call completeTestFunction() exactly once, or will time out
+otherwise. Subsequent calls to completeTestFunction will be disregarded.
+It is advised to use QWASMSUCCESS/QWASMFAIL for reporting the test execution
+status and QWASMCOMPARE/QWASMVERIFY to assert on test conditions. The call can
+be made after the test function itself has returned.
+
+ class TestTest: public QObject
+ {
+ Q_OBJECT
+ private slots:
+ void timerTest() {
+ QTimer::singleShot(timeout, [](){
+ completeTestFunction();
+ });
+ }
+ };
+
+Then define a main() function which calls initTestCase(). The main()
+function is async too, as per Emscripten default. Build the .cpp file
+as a normal Qt for WebAssembly app.
+
+ int main(int argc, char **argv)
+ {
+ auto testObject = std::make_shared<TestTest>();
+ initTestCase<QCoreApplication>(argc, argv, testObject);
+ return 0;
+ }
+
+Finally provide an html file which hosts the test runner and calls runTestCase()
+
+ <!doctype html>
+ <script type="text/javascript" src="qtwasmtestlib.js"></script>
+ <script type="text/javascript" src="test_case.js"></script>
+ <script>
+ window.onload = async () => {
+ runTestCase(entryFunction, document.getElementById("log"));
+ };
+ </script>
+ <p>Running Foo auto test.</p>
+ <div id="log"></div>
+
+Implementing a GUI test case
+----------------------------
+
+This is similar to implementing a basic test case, with the difference that the hosting
+html file provides container elements which becomes QScreens for the test code.
+
+ <!doctype html>
+ <script type="text/javascript" src="qtwasmtestlib.js"></script>
+ <script type="text/javascript" src="test_case.js"></script>
+ <script>
+ window.onload = async () => {
+ let log = document.getElementById("log")
+ let containers = [document.getElementById("container")];
+ runTestCase(entryFunction, log, containers);
+ };
+ </script>
+ <p>Running Foo auto test.</p>
+ <div id="container"></div>
+ <div id="log"></div>
diff --git a/tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.cpp b/tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.cpp
new file mode 100644
index 0000000000..ec03c7209a
--- /dev/null
+++ b/tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.cpp
@@ -0,0 +1,175 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "qtwasmtestlib.h"
+
+#include <QtCore/qmetaobject.h>
+
+#include <emscripten/bind.h>
+#include <emscripten.h>
+#include <emscripten/threading.h>
+
+namespace QtWasmTest {
+namespace {
+QObject *g_testObject = nullptr;
+std::string g_currentTestName;
+std::function<void ()> g_cleanup;
+}
+
+void runOnMainThread(std::function<void(void)> fn);
+static bool isValidSlot(const QMetaMethod &sl);
+
+
+//
+// Public API
+//
+
+// Initializes the test case with a test object and cleanup function. The
+// cleanup function is called when all test functions have completed.
+void initTestCase(QObject *testObject, std::function<void ()> cleanup)
+{
+ g_testObject = testObject;
+ g_cleanup = cleanup;
+}
+
+void verify(bool condition, std::string_view conditionString, std::string_view file, int line)
+{
+ if (!condition) {
+ completeTestFunction(
+ TestResult::Fail,
+ formatMessage(file, line, "Condition failed: " + std::string(conditionString)));
+ }
+}
+
+// Completes the currently running test function with a result. This function is
+// thread-safe and call be called from any thread.
+void completeTestFunction(TestResult result, std::string message)
+{
+ auto resultString = [](TestResult result) {
+ switch (result) {
+ case TestResult::Pass:
+ return "PASS";
+ break;
+ case TestResult::Fail:
+ return "FAIL";
+ break;
+ case TestResult::Skip:
+ return "SKIP";
+ break;
+ }
+ };
+
+ // Report test result to JavaScript test runner, on the main thread
+ runOnMainThread([resultString = resultString(result), message](){
+ EM_ASM({
+ completeTestFunction(UTF8ToString($0), UTF8ToString($1), UTF8ToString($2));
+ }, g_currentTestName.c_str(), resultString, message.c_str());
+ });
+}
+
+// Completes the currently running test function with a Pass result.
+void completeTestFunction()
+{
+ completeTestFunction(TestResult::Pass, std::string());
+}
+
+//
+// Private API for the Javascript test runnner
+//
+
+std::string formatMessage(std::string_view file, int line, std::string_view message)
+{
+ return "[" + std::string(file) + ":" + QString::number(line).toStdString() + "] " + std::string(message);
+}
+
+void cleanupTestCase()
+{
+ g_testObject = nullptr;
+ g_cleanup();
+}
+
+std::string getTestFunctions()
+{
+ std::string testFunctions;
+
+ // Duplicate qPrintTestSlots (private QTestLib function) logic.
+ for (int i = 0; i < g_testObject->metaObject()->methodCount(); ++i) {
+ QMetaMethod sl = g_testObject->metaObject()->method(i);
+ if (!isValidSlot(sl))
+ continue;
+ QByteArray signature = sl.methodSignature();
+ Q_ASSERT(signature.endsWith("()"));
+ signature.chop(2);
+ if (!testFunctions.empty())
+ testFunctions += " ";
+ testFunctions += std::string(signature.constData());
+ }
+
+ return testFunctions;
+}
+
+void runTestFunction(std::string name)
+{
+ g_currentTestName = name;
+ QMetaObject::invokeMethod(g_testObject, name.c_str());
+}
+
+void failTest(std::string message)
+{
+ completeTestFunction(QtWasmTest::Fail, std::move(message));
+}
+
+void passTest()
+{
+ completeTestFunction(QtWasmTest::Pass, "");
+}
+
+EMSCRIPTEN_BINDINGS(qtwebtestrunner) {
+ emscripten::function("cleanupTestCase", &cleanupTestCase);
+ emscripten::function("getTestFunctions", &getTestFunctions);
+ emscripten::function("runTestFunction", &runTestFunction);
+ emscripten::function("qtWasmFail", &failTest);
+ emscripten::function("qtWasmPass", &passTest);
+}
+
+//
+// Test lib implementation
+//
+
+static bool isValidSlot(const QMetaMethod &sl)
+{
+ if (sl.access() != QMetaMethod::Private || sl.parameterCount() != 0
+ || sl.returnType() != QMetaType::Void || sl.methodType() != QMetaMethod::Slot)
+ return false;
+ const QByteArray name = sl.name();
+ return !(name.isEmpty() || name.endsWith("_data")
+ || name == "initTestCase" || name == "cleanupTestCase"
+ || name == "init" || name == "cleanup");
+}
+
+void trampoline(void *context)
+{
+ Q_ASSERT(emscripten_is_main_runtime_thread());
+
+ emscripten_async_call([](void *context) {
+ std::function<void(void)> *fn = reinterpret_cast<std::function<void(void)> *>(context);
+ (*fn)();
+ delete fn;
+ }, context, 0);
+}
+
+// Runs the given function on the main thread, asynchronously
+void runOnMainThread(std::function<void(void)> fn)
+{
+ void *context = new std::function<void(void)>(fn);
+ if (emscripten_is_main_runtime_thread()) {
+ trampoline(context);
+ } else {
+#if QT_CONFIG(thread)
+ emscripten_async_run_in_main_runtime_thread_(EM_FUNC_SIG_VI, reinterpret_cast<void *>(trampoline), context);
+#endif
+ }
+}
+
+} // namespace QtWasmTest
+
diff --git a/tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.h b/tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.h
new file mode 100644
index 0000000000..2307ed1ccd
--- /dev/null
+++ b/tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.h
@@ -0,0 +1,73 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef QT_WASM_TESTRUNNER_H
+#define QT_WASM_TESTRUNNER_H
+
+#include <QtCore/qobject.h>
+
+#include <functional>
+
+namespace QtWasmTest {
+
+enum TestResult {
+ Pass,
+ Fail,
+ Skip,
+};
+
+std::string formatMessage(std::string_view file,
+ int line,
+ std::string_view message);
+
+void completeTestFunction(TestResult result, std::string message);
+void completeTestFunction();
+void initTestCase(QObject *testObject, std::function<void ()> cleanup);
+template <typename App>
+void initTestCase(int argc,
+ char **argv,
+ std::shared_ptr<QObject> testObject)
+{
+ auto app = std::make_shared<App>(argc, argv);
+ auto cleanup = [testObject, app]() mutable {
+ // C++ lambda capture destruction order is unspecified;
+ // delete test before app by calling reset().
+ testObject.reset();
+ app.reset();
+ };
+ initTestCase(testObject.get(), cleanup);
+}
+void verify(bool condition,
+ std::string_view conditionString,
+ std::string_view file,
+ int line);
+
+template<class L, class R>
+void compare(const L& lhs,
+ const R& rhs,
+ std::string_view lhsString,
+ std::string_view rhsString,
+ std::string_view file,
+ int line) {
+ if (lhs != rhs) {
+ completeTestFunction(
+ TestResult::Fail,
+ formatMessage(file, line, "Comparison failed: " + std::string(lhsString) + " == " + std::string(rhsString)));
+ }
+}
+
+} // namespace QtWasmTest
+
+#define QWASMVERIFY(condition) \
+ QtWasmTest::verify((condition), #condition, __FILE__, __LINE__);
+
+#define QWASMCOMPARE(left, right) \
+ QtWasmTest::compare((left), (right), #left, #right, __FILE__, __LINE__);
+
+#define QWASMSUCCESS() \
+ QtWasmTest::completeTestFunction(QtWasmTest::Pass, "")
+
+#define QWASMFAIL(message) \
+ QtWasmTest::completeTestFunction(QtWasmTest::Fail, QtWasmTest::formatMessage(__FILE__, __LINE__, message))
+
+#endif
diff --git a/tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.js b/tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.js
new file mode 100644
index 0000000000..d4f815b887
--- /dev/null
+++ b/tests/manual/wasm/qtwasmtestlib/qtwasmtestlib.js
@@ -0,0 +1,137 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+// A minimal async test runner for Qt async auto tests.
+//
+// Usage: Call runTest(name, testFunctionCompleted), where "name" is the name of the app
+// (the .wasm file name), and testFunctionCompleted is a test-function-complete
+// callback. The test runner will then instantiate the app and run tests.
+//
+// The test runner expects that the app instance defines the following
+// functions:
+//
+// void cleanupTestCase()
+// string getTestFunctions()
+// runTestFunction(string)
+//
+// Further, the test runner expects that the app instance calls
+// completeTestFunction() (below - note that both the instance and this
+// file have a function with that name) when a test function finishes. This
+// can be done during runTestFunction(), or after it has returned (this
+// is the part which enables async testing). Test functions which fail
+// to call completeTestFunction() will time out after 2000ms.
+//
+const g_maxTime = 2000;
+
+class TestFunction {
+ constructor(instance, name) {
+ this.instance = instance;
+ this.name = name;
+ this.resolve = undefined;
+ this.reject = undefined;
+ this.timeoutId = undefined;
+ }
+
+ complete(result, details) {
+ // Reset timeout
+ clearTimeout(this.timeoutId);
+ this.timeoutId = undefined;
+
+ const callback = result.startsWith('FAIL') ? this.reject : this.resolve;
+ callback(`${result}${details ? ': ' + details : ''}`);
+ }
+
+ run() {
+ // Set timer which will catch test functions
+ // which fail to call completeTestFunction()
+ this.timeoutId = setTimeout(() => {
+ completeTestFunction(this.name, 'FAIL', `Timeout after ${g_maxTime} ms`)
+ }, g_maxTime);
+
+ return new Promise((resolve, reject) => {
+ this.resolve = resolve;
+ this.reject = reject;
+
+ this.instance.runTestFunction(this.name);
+ });
+ }
+};
+
+function completeTestFunction(testFunctionName, result, details) {
+ if (!window.currentTestFunction || testFunctionName !== window.currentTestFunction.name)
+ return;
+
+ window.currentTestFunction.complete(result, details);
+}
+
+async function runTestFunction(instance, name) {
+ if (window.currentTestFunction) {
+ throw new Error(`While trying to run ${name}: Last function hasn't yet finished`);
+ }
+ window.currentTestFunction = new TestFunction(instance, name);
+ try {
+ const result = await window.currentTestFunction.run();
+ return result;
+ } finally {
+ delete window.currentTestFunction;
+ }
+}
+
+async function runTestCaseImpl(entryFunction, testFunctionStarted, testFunctionCompleted, qtContainers)
+{
+ // Create test case instance
+ const config = {
+ qtContainerElements: qtContainers || []
+ }
+ const instance = await entryFunction(config);
+
+ // Run all test functions
+ const functionsString = instance.getTestFunctions();
+ const functions = functionsString.split(" ").filter(Boolean);
+ for (const name of functions) {
+ testFunctionStarted(name);
+ try {
+ const result = await runTestFunction(instance, name);
+ testFunctionCompleted(result);
+ } catch (err) {
+ testFunctionCompleted(err.message ?? err);
+ }
+ }
+
+ // Cleanup
+ instance.cleanupTestCase();
+}
+
+var g_htmlLogElement = undefined;
+
+function testFunctionStarted(name) {
+ let line = name + ": ";
+ g_htmlLogElement.innerHTML += line;
+}
+
+function testFunctionCompleted(status) {
+
+ const color = (status) => {
+ if (status.startsWith("PASS"))
+ return "green";
+ if (status.startsWith("FAIL"))
+ return "red";
+ if (status.startsWith("SKIP"))
+ return "tan";
+ return "black";
+ };
+
+ const line = `<span style='color: ${color(status)};'>${status}</text><br>`;
+ g_htmlLogElement.innerHTML += line;
+}
+
+async function runTestCase(entryFunction, htmlLogElement, qtContainers)
+{
+ g_htmlLogElement = htmlLogElement;
+ try {
+ await runTestCaseImpl(entryFunction, testFunctionStarted, testFunctionCompleted, qtContainers);
+ g_htmlLogElement.innerHTML += "<br> DONE"
+ } catch (err) {
+ g_htmlLogElement.innerHTML += err
+ }
+}
diff --git a/tests/manual/wasm/rasterwindow/CMakeLists.txt b/tests/manual/wasm/rasterwindow/CMakeLists.txt
index cd3a2eef3d..ed5b7ecd18 100644
--- a/tests/manual/wasm/rasterwindow/CMakeLists.txt
+++ b/tests/manual/wasm/rasterwindow/CMakeLists.txt
@@ -1,8 +1,11 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
qt_internal_add_manual_test(rasterwindow
GUI
SOURCES
main.cpp rasterwindow.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Core
Qt::Gui
)
diff --git a/tests/manual/wasm/rasterwindow/main.cpp b/tests/manual/wasm/rasterwindow/main.cpp
index fad3803282..576b73112b 100644
--- a/tests/manual/wasm/rasterwindow/main.cpp
+++ b/tests/manual/wasm/rasterwindow/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtGui>
#include "rasterwindow.h"
diff --git a/tests/manual/wasm/rasterwindow/rasterwindow.cpp b/tests/manual/wasm/rasterwindow/rasterwindow.cpp
index d46a6bc5b6..8fd036c274 100644
--- a/tests/manual/wasm/rasterwindow/rasterwindow.cpp
+++ b/tests/manual/wasm/rasterwindow/rasterwindow.cpp
@@ -1,57 +1,12 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "rasterwindow.h"
RasterWindow::RasterWindow()
:m_eventCount(0)
,m_timeoutCount(0)
+,m_frameCount(0)
+,m_fps(0)
,m_pressed(false)
{
qDebug() << "RasterWindow()";
@@ -64,6 +19,8 @@ RasterWindow::RasterWindow()
QTimer *timer = new QTimer(this);
connect(timer, &QTimer::timeout, [this](){
++m_timeoutCount;
+ m_fps = m_frameCount;
+ m_frameCount = 0;
update();
});
timer->start(1000);
@@ -74,6 +31,8 @@ void RasterWindow::paintEvent(QPaintEvent * event)
QRect r = event->rect();
qDebug() << "RasterWindow::paintEvent" << r;
+ ++m_frameCount;
+
QPainter p(this);
QColor fillColor(0, 102, 153);
@@ -96,12 +55,13 @@ void RasterWindow::paintEvent(QPaintEvent * event)
text += QString("Screen Geometry: %1 %2 %3 %4\n").arg(sg.x()).arg(sg.y()).arg(sg.width()).arg(sg.height());
text += QString("Received Events: %1\n").arg(m_eventCount);
text += QString("Received Timers: %1\n").arg(m_timeoutCount);
+ text += QString("Frames Per Second: %1\n").arg(m_fps);
p.drawText(QRectF(0, 0, width(), height()), Qt::AlignCenter, text);
}
void RasterWindow::exposeEvent(QExposeEvent * ev)
{
- qDebug() << __PRETTY_FUNCTION__ << ev->region();
+ qDebug() << __PRETTY_FUNCTION__;
QRasterWindow::exposeEvent(ev);
incrementEventCount();
}
@@ -155,8 +115,8 @@ void RasterWindow::mouseMoveEvent(QMouseEvent * ev)
incrementEventCount();
if (m_pressed)
- m_offset += ev->localPos().toPoint() - m_lastPos;
- m_lastPos = ev->localPos().toPoint();
+ m_offset += ev->position().toPoint() - m_lastPos;
+ m_lastPos = ev->position().toPoint();
}
void RasterWindow::mousePressEvent(QMouseEvent * ev)
@@ -215,6 +175,7 @@ void RasterWindow::wheelEvent(QWheelEvent * ev)
qDebug() << __PRETTY_FUNCTION__;
QRasterWindow::wheelEvent(ev);
incrementEventCount();
+ m_offset += ev->pixelDelta();
}
void RasterWindow::incrementEventCount()
diff --git a/tests/manual/wasm/rasterwindow/rasterwindow.h b/tests/manual/wasm/rasterwindow/rasterwindow.h
index 8f13182015..e488420440 100644
--- a/tests/manual/wasm/rasterwindow/rasterwindow.h
+++ b/tests/manual/wasm/rasterwindow/rasterwindow.h
@@ -1,52 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef RASTERWINDOW_H
#define RASTERWINDOW_H
@@ -80,6 +33,8 @@ private:
void incrementEventCount();
int m_eventCount;
int m_timeoutCount;
+ int m_frameCount;
+ int m_fps;
QPoint m_offset;
QPoint m_lastPos;
bool m_pressed;
diff --git a/tests/manual/wasm/shared/.gitignore b/tests/manual/wasm/shared/.gitignore
new file mode 100644
index 0000000000..ba077a4031
--- /dev/null
+++ b/tests/manual/wasm/shared/.gitignore
@@ -0,0 +1 @@
+bin
diff --git a/tests/manual/wasm/shared/run.sh b/tests/manual/wasm/shared/run.sh
new file mode 100755
index 0000000000..f04e45278c
--- /dev/null
+++ b/tests/manual/wasm/shared/run.sh
@@ -0,0 +1,30 @@
+#! /bin/bash
+
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+set -m
+
+function removeServer()
+{
+ kill $cleanupPid
+}
+
+if [ -z "$1"]
+then
+ echo "Usage: $0 testname, where testname is a test in the tests/manual/wasm directory" >&2
+ exit 1
+fi
+
+trap removeServer EXIT
+
+script_dir=`dirname ${BASH_SOURCE[0]}`
+cd "$script_dir/../../../../"
+python3 util/wasm/qtwasmserver/qtwasmserver.py -p 8001 &
+cleanupPid=$!
+cd -
+
+python3 -m webbrowser "http://localhost:8001/tests/manual/wasm/$1/tst_$1.html"
+
+echo 'Press any key to continue...' >&2
+read -n 1
diff --git a/tests/manual/wasm/shared/testrunner.js b/tests/manual/wasm/shared/testrunner.js
new file mode 100644
index 0000000000..197e3bfa6d
--- /dev/null
+++ b/tests/manual/wasm/shared/testrunner.js
@@ -0,0 +1,161 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+function parseQuery()
+{
+ const trimmed = window.location.search.substring(1);
+ return new Map(
+ trimmed.length === 0 ?
+ [] :
+ trimmed.split('&').map(paramNameAndValue =>
+ {
+ const [name, value] = paramNameAndValue.split('=');
+ return [decodeURIComponent(name), value ? decodeURIComponent(value) : ''];
+ }));
+}
+
+export class assert
+{
+ static isFalse(value)
+ {
+ if (value !== false)
+ throw new Error(`Assertion failed, expected to be false, was ${value}`);
+ }
+
+ static isTrue(value)
+ {
+ if (value !== true)
+ throw new Error(`Assertion failed, expected to be true, was ${value}`);
+ }
+
+ static isUndefined(value)
+ {
+ if (typeof value !== 'undefined')
+ throw new Error(`Assertion failed, expected to be undefined, was ${value}`);
+ }
+
+ static isNotUndefined(value)
+ {
+ if (typeof value === 'undefined')
+ throw new Error(`Assertion failed, expected not to be undefined, was ${value}`);
+ }
+
+ static equal(expected, actual)
+ {
+ if (expected !== actual)
+ throw new Error(`Assertion failed, expected to be ${expected}, was ${actual}`);
+ }
+
+ static notEqual(expected, actual)
+ {
+ if (expected === actual)
+ throw new Error(`Assertion failed, expected not to be ${expected}`);
+ }
+}
+
+export class Mock extends Function
+{
+ #calls = [];
+
+ constructor()
+ {
+ super()
+ const proxy = new Proxy(this, {
+ apply: (target, _, args) => target.onCall(...args)
+ });
+ proxy.thisMock = this;
+
+ return proxy;
+ }
+
+ get calls()
+ {
+ return this.thisMock.#calls;
+ }
+
+ onCall(...args)
+ {
+ this.#calls.push(args);
+ }
+}
+
+function output(message)
+{
+ const outputLine = document.createElement('div');
+ outputLine.style.fontFamily = 'monospace';
+ outputLine.innerText = message;
+
+ document.body.appendChild(outputLine);
+
+ console.log(message);
+}
+
+export class TestRunner
+{
+ #testClassInstance
+ #timeoutSeconds
+
+ constructor(testClassInstance, config)
+ {
+ this.#testClassInstance = testClassInstance;
+ this.#timeoutSeconds = config?.timeoutSeconds ?? 2;
+ }
+
+ async run(testCase)
+ {
+ const prototype = Object.getPrototypeOf(this.#testClassInstance);
+ try {
+ output(`Running ${testCase}`);
+ if (!prototype.hasOwnProperty(testCase))
+ throw new Error(`No such testcase ${testCase}`);
+
+ if (prototype.beforeEach) {
+ await prototype.beforeEach.apply(this.#testClassInstance);
+ }
+
+ await new Promise((resolve, reject) =>
+ {
+ let rejected = false;
+ const timeout = window.setTimeout(() =>
+ {
+ rejected = true;
+ reject(new Error(`Timeout after ${this.#timeoutSeconds} seconds`));
+ }, this.#timeoutSeconds * 1000);
+ prototype[testCase].apply(this.#testClassInstance).then(() =>
+ {
+ if (!rejected) {
+ window.clearTimeout(timeout);
+ output(`✅ Test passed ${testCase}`);
+ resolve();
+ }
+ }).catch(reject);
+ });
+ } catch (e) {
+ output(`⌠Failed ${testCase}: exception ${e} ${e.stack}`);
+ } finally {
+ if (prototype.afterEach) {
+ await prototype.afterEach.apply(this.#testClassInstance);
+ }
+ }
+ }
+
+ async runAll()
+ {
+ const query = parseQuery();
+ const testFilter = query.has('testfilter') ? new RegExp(query.get('testfilter')) : undefined;
+
+ const SPECIAL_FUNCTIONS =
+ ['beforeEach', 'afterEach', 'beforeAll', 'afterAll', 'constructor'];
+ const prototype = Object.getPrototypeOf(this.#testClassInstance);
+ const testFunctions =
+ Object.getOwnPropertyNames(prototype).filter(
+ entry => SPECIAL_FUNCTIONS.indexOf(entry) === -1 && (!testFilter || entry.match(testFilter)));
+
+ if (prototype.beforeAll)
+ await prototype.beforeAll.apply(this.#testClassInstance);
+ for (const fn of testFunctions)
+ await this.run(fn);
+ if (prototype.afterAll)
+ await prototype.afterAll.apply(this.#testClassInstance);
+ }
+}
diff --git a/tests/manual/widgetgrab/CMakeLists.txt b/tests/manual/widgetgrab/CMakeLists.txt
index 1ad19e581b..78bb05df49 100644
--- a/tests/manual/widgetgrab/CMakeLists.txt
+++ b/tests/manual/widgetgrab/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from widgetgrab.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## widgetgrab Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(widgetgrab
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:widgetgrab.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgetgrab/main.cpp b/tests/manual/widgetgrab/main.cpp
index cc69732cfa..d454b238fd 100644
--- a/tests/manual/widgetgrab/main.cpp
+++ b/tests/manual/widgetgrab/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QApplication>
#include <QDebug>
diff --git a/tests/manual/widgets/CMakeLists.txt b/tests/manual/widgets/CMakeLists.txt
index ac50f6c1ae..6b7969e8b7 100644
--- a/tests/manual/widgets/CMakeLists.txt
+++ b/tests/manual/widgets/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from widgets.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(itemviews)
add_subdirectory(qgraphicsview)
diff --git a/tests/manual/widgets/itemviews/CMakeLists.txt b/tests/manual/widgets/itemviews/CMakeLists.txt
index 2e6a7e563b..25348ad347 100644
--- a/tests/manual/widgets/itemviews/CMakeLists.txt
+++ b/tests/manual/widgets/itemviews/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from itemviews.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(delegate)
add_subdirectory(qconcatenatetablesproxymodel)
diff --git a/tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/CMakeLists.txt b/tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/CMakeLists.txt
index e37182121b..4d83d39783 100644
--- a/tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/CMakeLists.txt
+++ b/tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from testtable1.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## testtable1 Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(testtable1
GUI
SOURCES
testtable1.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/testtable1.cpp b/tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/testtable1.cpp
index b85293f9fe..c3573a7852 100644
--- a/tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/testtable1.cpp
+++ b/tests/manual/widgets/itemviews/autoResizePrecision/tablehorz/testtable1.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]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) 2012 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets/QtWidgets>
diff --git a/tests/manual/widgets/itemviews/autoResizePrecision/tablevert/CMakeLists.txt b/tests/manual/widgets/itemviews/autoResizePrecision/tablevert/CMakeLists.txt
index ccb4477247..48da8d86a6 100644
--- a/tests/manual/widgets/itemviews/autoResizePrecision/tablevert/CMakeLists.txt
+++ b/tests/manual/widgets/itemviews/autoResizePrecision/tablevert/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from testtable2.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## testtable2 Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(testtable2
GUI
SOURCES
testtable2.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/widgets/itemviews/autoResizePrecision/tablevert/testtable2.cpp b/tests/manual/widgets/itemviews/autoResizePrecision/tablevert/testtable2.cpp
index 28d0aa370c..4157dab9c3 100644
--- a/tests/manual/widgets/itemviews/autoResizePrecision/tablevert/testtable2.cpp
+++ b/tests/manual/widgets/itemviews/autoResizePrecision/tablevert/testtable2.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]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) 2012 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets/QtWidgets>
diff --git a/tests/manual/widgets/itemviews/autoResizePrecision/treeview/CMakeLists.txt b/tests/manual/widgets/itemviews/autoResizePrecision/treeview/CMakeLists.txt
index 30fad7c910..8898ce2f12 100644
--- a/tests/manual/widgets/itemviews/autoResizePrecision/treeview/CMakeLists.txt
+++ b/tests/manual/widgets/itemviews/autoResizePrecision/treeview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from testtree.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## testtree Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(testtree
GUI
SOURCES
testtree.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/widgets/itemviews/autoResizePrecision/treeview/testtree.cpp b/tests/manual/widgets/itemviews/autoResizePrecision/treeview/testtree.cpp
index 96478e4553..37c6df7002 100644
--- a/tests/manual/widgets/itemviews/autoResizePrecision/treeview/testtree.cpp
+++ b/tests/manual/widgets/itemviews/autoResizePrecision/treeview/testtree.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]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) 2012 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets/QtWidgets>
diff --git a/tests/manual/widgets/itemviews/delegate/CMakeLists.txt b/tests/manual/widgets/itemviews/delegate/CMakeLists.txt
index 62ff4e33ca..8fb4d3e092 100644
--- a/tests/manual/widgets/itemviews/delegate/CMakeLists.txt
+++ b/tests/manual/widgets/itemviews/delegate/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from delegate.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## delegate Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(delegate
GUI
SOURCES
example.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:delegate.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/itemviews/delegate/example.cpp b/tests/manual/widgets/itemviews/delegate/example.cpp
index 3108c65654..7dbbf445df 100644
--- a/tests/manual/widgets/itemviews/delegate/example.cpp
+++ b/tests/manual/widgets/itemviews/delegate/example.cpp
@@ -1,36 +1,11 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]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) 2012 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QLineEdit>
#include <QApplication>
#include <QTableView>
#include <QStandardItemModel>
-#include <QItemDelegate>
+#include <QStyledItemDelegate>
#include <QDebug>
#include <QComboBox>
@@ -41,10 +16,10 @@ public:
~ExampleEditor() { QApplication::instance()->quit(); }
};
-class ExampleDelegate : public QItemDelegate
+class ExampleDelegate : public QStyledItemDelegate
{
public:
- ExampleDelegate() : QItemDelegate()
+ ExampleDelegate() : QStyledItemDelegate()
{
m_editor = new ExampleEditor(0);
m_combobox = new QComboBox(0);
diff --git a/tests/manual/widgets/itemviews/qconcatenatetablesproxymodel/CMakeLists.txt b/tests/manual/widgets/itemviews/qconcatenatetablesproxymodel/CMakeLists.txt
index 0859204297..c24d765331 100644
--- a/tests/manual/widgets/itemviews/qconcatenatetablesproxymodel/CMakeLists.txt
+++ b/tests/manual/widgets/itemviews/qconcatenatetablesproxymodel/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qconcatenatetablesproxymodel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qconcatenatetablesproxymodel Binary:
@@ -10,10 +11,7 @@ qt_internal_add_manual_test(qconcatenatetablesproxymodel
main.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qconcatenatetablesproxymodel.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/itemviews/qconcatenatetablesproxymodel/main.cpp b/tests/manual/widgets/itemviews/qconcatenatetablesproxymodel/main.cpp
index 2c1825f29f..ce99a93d1f 100644
--- a/tests/manual/widgets/itemviews/qconcatenatetablesproxymodel/main.cpp
+++ b/tests/manual/widgets/itemviews/qconcatenatetablesproxymodel/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
-** 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 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QApplication>
#include <QConcatenateTablesProxyModel>
diff --git a/tests/manual/widgets/itemviews/qheaderview/CMakeLists.txt b/tests/manual/widgets/itemviews/qheaderview/CMakeLists.txt
index 02dc7fd5b1..1ab78071bd 100644
--- a/tests/manual/widgets/itemviews/qheaderview/CMakeLists.txt
+++ b/tests/manual/widgets/itemviews/qheaderview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qheaderview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qheaderview Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(qheaderview
GUI
SOURCES
qheaderviewtest1.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qheaderview.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/itemviews/qheaderview/qheaderviewtest1.cpp b/tests/manual/widgets/itemviews/qheaderview/qheaderviewtest1.cpp
index e78f4a5e37..437dbb6126 100644
--- a/tests/manual/widgets/itemviews/qheaderview/qheaderviewtest1.cpp
+++ b/tests/manual/widgets/itemviews/qheaderview/qheaderviewtest1.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]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) 2012 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets/QtWidgets>
diff --git a/tests/manual/widgets/itemviews/qtreeview/CMakeLists.txt b/tests/manual/widgets/itemviews/qtreeview/CMakeLists.txt
index 719ef928c9..f591354556 100644
--- a/tests/manual/widgets/itemviews/qtreeview/CMakeLists.txt
+++ b/tests/manual/widgets/itemviews/qtreeview/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtreeview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtreeview Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(qtreeview
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qtreeview.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/itemviews/qtreeview/main.cpp b/tests/manual/widgets/itemviews/qtreeview/main.cpp
index 1c94fb96e7..327d8ecb84 100644
--- a/tests/manual/widgets/itemviews/qtreeview/main.cpp
+++ b/tests/manual/widgets/itemviews/qtreeview/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 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 <QtWidgets>
diff --git a/tests/manual/widgets/itemviews/qtreewidget/CMakeLists.txt b/tests/manual/widgets/itemviews/qtreewidget/CMakeLists.txt
index 1cefae616c..01c4989997 100644
--- a/tests/manual/widgets/itemviews/qtreewidget/CMakeLists.txt
+++ b/tests/manual/widgets/itemviews/qtreewidget/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtreewidget.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtreewidget Binary:
@@ -8,11 +9,8 @@ qt_internal_add_manual_test(qtreewidget
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:qtreewidget.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/itemviews/qtreewidget/main.cpp b/tests/manual/widgets/itemviews/qtreewidget/main.cpp
index fb72c404a5..1b292c1c3b 100644
--- a/tests/manual/widgets/itemviews/qtreewidget/main.cpp
+++ b/tests/manual/widgets/itemviews/qtreewidget/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]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) 2012 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QVBoxLayout>
#include <QTreeWidget>
diff --git a/tests/manual/widgets/itemviews/tableview-span-navigation/CMakeLists.txt b/tests/manual/widgets/itemviews/tableview-span-navigation/CMakeLists.txt
index a1ff2f70da..cc08160952 100644
--- a/tests/manual/widgets/itemviews/tableview-span-navigation/CMakeLists.txt
+++ b/tests/manual/widgets/itemviews/tableview-span-navigation/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from tableview-span-navigation.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tableview-span-navigation Binary:
@@ -10,10 +11,7 @@ qt_internal_add_manual_test(tableview-span-navigation
main.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:tableview-span-navigation.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/itemviews/tableview-span-navigation/main.cpp b/tests/manual/widgets/itemviews/tableview-span-navigation/main.cpp
index 5b8ddcbd44..1e053eeb05 100644
--- a/tests/manual/widgets/itemviews/tableview-span-navigation/main.cpp
+++ b/tests/manual/widgets/itemviews/tableview-span-navigation/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 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 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) 2014 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 <QApplication>
#include <QStandardItemModel>
diff --git a/tests/manual/widgets/kernel/CMakeLists.txt b/tests/manual/widgets/kernel/CMakeLists.txt
index b4443fa3e2..c394151047 100644
--- a/tests/manual/widgets/kernel/CMakeLists.txt
+++ b/tests/manual/widgets/kernel/CMakeLists.txt
@@ -1,6 +1,7 @@
-# Generated from kernel.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-# add_subdirectory(qtooltip) # special case broken in dev
+# add_subdirectory(qtooltip) # TODO: broken in dev
add_subdirectory(sizeonhide)
add_subdirectory(layoutreplace)
add_subdirectory(setscreen)
diff --git a/tests/manual/widgets/kernel/layoutreplace/CMakeLists.txt b/tests/manual/widgets/kernel/layoutreplace/CMakeLists.txt
index e6a54cfea3..7befd90454 100644
--- a/tests/manual/widgets/kernel/layoutreplace/CMakeLists.txt
+++ b/tests/manual/widgets/kernel/layoutreplace/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from layoutreplace.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## layoutreplace Binary:
@@ -8,7 +9,7 @@ qt_internal_add_manual_test(layoutreplace
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/widgets/kernel/layoutreplace/main.cpp b/tests/manual/widgets/kernel/layoutreplace/main.cpp
index c73a5921de..7d80efff8e 100644
--- a/tests/manual/widgets/kernel/layoutreplace/main.cpp
+++ b/tests/manual/widgets/kernel/layoutreplace/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Thorbjørn Martsum - tmartsum[at]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) 2013 Thorbjørn Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QGridLayout>
#include <QFormLayout>
diff --git a/tests/manual/widgets/kernel/qtooltip/CMakeLists.txt b/tests/manual/widgets/kernel/qtooltip/CMakeLists.txt
index bc076cf523..1ea3488ea3 100644
--- a/tests/manual/widgets/kernel/qtooltip/CMakeLists.txt
+++ b/tests/manual/widgets/kernel/qtooltip/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from qtooltip.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## qtooltip Binary:
@@ -7,7 +8,7 @@
qt_internal_add_manual_test(qtooltip
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Test
Qt::Widgets
diff --git a/tests/manual/widgets/kernel/qtooltip/main.cpp b/tests/manual/widgets/kernel/qtooltip/main.cpp
index 62351f9303..245738fb58 100644
--- a/tests/manual/widgets/kernel/qtooltip/main.cpp
+++ b/tests/manual/widgets/kernel/qtooltip/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Thorbjørn Lund Martsum - tmartsum[at]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) 2013 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QTest>
#include <QDialog>
diff --git a/tests/manual/widgets/kernel/setscreen/CMakeLists.txt b/tests/manual/widgets/kernel/setscreen/CMakeLists.txt
index 6754450481..12123107f4 100644
--- a/tests/manual/widgets/kernel/setscreen/CMakeLists.txt
+++ b/tests/manual/widgets/kernel/setscreen/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from setscreen.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## setscreen Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(setscreen
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:setscreen.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/kernel/setscreen/main.cpp b/tests/manual/widgets/kernel/setscreen/main.cpp
index a8b9a6585a..3610c9ff35 100644
--- a/tests/manual/widgets/kernel/setscreen/main.cpp
+++ b/tests/manual/widgets/kernel/setscreen/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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 <QtWidgets>
diff --git a/tests/manual/widgets/kernel/sizeonhide/CMakeLists.txt b/tests/manual/widgets/kernel/sizeonhide/CMakeLists.txt
index f1b420f1b2..e98c131f96 100644
--- a/tests/manual/widgets/kernel/sizeonhide/CMakeLists.txt
+++ b/tests/manual/widgets/kernel/sizeonhide/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from sizeonhide.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## sizeonhide Binary:
@@ -8,11 +9,8 @@ qt_internal_add_manual_test(sizeonhide
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::CorePrivate
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:sizeonhide.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/kernel/sizeonhide/main.cpp b/tests/manual/widgets/kernel/sizeonhide/main.cpp
index a8f1f49d47..a20e6d3827 100644
--- a/tests/manual/widgets/kernel/sizeonhide/main.cpp
+++ b/tests/manual/widgets/kernel/sizeonhide/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2013 Thorbjørn Martsum - tmartsum[at]gmail.com
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtWidgets 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) 2013 Thorbjørn Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets>
diff --git a/tests/manual/widgets/qgraphicsview/CMakeLists.txt b/tests/manual/widgets/qgraphicsview/CMakeLists.txt
index 5fd7e47ccd..4d79d7db57 100644
--- a/tests/manual/widgets/qgraphicsview/CMakeLists.txt
+++ b/tests/manual/widgets/qgraphicsview/CMakeLists.txt
@@ -1,3 +1,4 @@
-# Generated from qgraphicsview.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(rubberband)
diff --git a/tests/manual/widgets/qgraphicsview/rubberband/CMakeLists.txt b/tests/manual/widgets/qgraphicsview/rubberband/CMakeLists.txt
index 1e265eda2a..697e827991 100644
--- a/tests/manual/widgets/qgraphicsview/rubberband/CMakeLists.txt
+++ b/tests/manual/widgets/qgraphicsview/rubberband/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from rubberband.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## rubberband Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(rubberband
GUI
SOURCES
rubberbandtest.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:rubberband.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/qgraphicsview/rubberband/rubberbandtest.cpp b/tests/manual/widgets/qgraphicsview/rubberband/rubberbandtest.cpp
index f2c5494ebc..8a4c57e63d 100644
--- a/tests/manual/widgets/qgraphicsview/rubberband/rubberbandtest.cpp
+++ b/tests/manual/widgets/qgraphicsview/rubberband/rubberbandtest.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2012 Thorbjørn Lund Martsum - tmartsum[at]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) 2012 Thorbjørn Lund Martsum - tmartsum[at]gmail.com
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets>
diff --git a/tests/manual/widgets/styles/CMakeLists.txt b/tests/manual/widgets/styles/CMakeLists.txt
index c134472355..c417236c5d 100644
--- a/tests/manual/widgets/styles/CMakeLists.txt
+++ b/tests/manual/widgets/styles/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from styles.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_manual_styles Binary:
@@ -7,9 +8,6 @@
qt_internal_add_manual_test(tst_manual_styles
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:styles.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/styles/main.cpp b/tests/manual/widgets/styles/main.cpp
index 5566d722c4..89050b90e1 100644
--- a/tests/manual/widgets/styles/main.cpp
+++ b/tests/manual/widgets/styles/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QAction>
#include <QApplication>
diff --git a/tests/manual/widgets/widgets/CMakeLists.txt b/tests/manual/widgets/widgets/CMakeLists.txt
index 446a3dfb03..b4477ce00a 100644
--- a/tests/manual/widgets/widgets/CMakeLists.txt
+++ b/tests/manual/widgets/widgets/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from widgets.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
add_subdirectory(bigmenucreator)
add_subdirectory(defaultUpMenuBar)
diff --git a/tests/manual/widgets/widgets/bigmenucreator/CMakeLists.txt b/tests/manual/widgets/widgets/bigmenucreator/CMakeLists.txt
index c44d839714..92557ec622 100644
--- a/tests/manual/widgets/widgets/bigmenucreator/CMakeLists.txt
+++ b/tests/manual/widgets/widgets/bigmenucreator/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from bigmenucreator.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## BigMenuCreator Binary:
@@ -11,12 +12,9 @@ qt_internal_add_manual_test(BigMenuCreator
mainwindow.cpp mainwindow.h mainwindow.ui
DEFINES
QT_DEPRECATED_WARNINGS
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
uic
)
-
-#### Keys ignored in scope 1:.:.:bigmenucreator.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/widgets/bigmenucreator/bigmenucreator.pro b/tests/manual/widgets/widgets/bigmenucreator/bigmenucreator.pro
index 408dab6482..d5dbe729b9 100644
--- a/tests/manual/widgets/widgets/bigmenucreator/bigmenucreator.pro
+++ b/tests/manual/widgets/widgets/bigmenucreator/bigmenucreator.pro
@@ -18,7 +18,7 @@ DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
-#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
+#DEFINES += QT_DISABLE_DEPRECATED_UP_TO=0x060000 # disables all APIs deprecated in Qt 6.0.0 and earlier
SOURCES += \
diff --git a/tests/manual/widgets/widgets/bigmenucreator/main.cpp b/tests/manual/widgets/widgets/bigmenucreator/main.cpp
index 303552c1d5..4afe0e018b 100644
--- a/tests/manual/widgets/widgets/bigmenucreator/main.cpp
+++ b/tests/manual/widgets/widgets/bigmenucreator/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "mainwindow.h"
#include <QApplication>
diff --git a/tests/manual/widgets/widgets/bigmenucreator/mainwindow.cpp b/tests/manual/widgets/widgets/bigmenucreator/mainwindow.cpp
index 5b30c1be0b..a2d6c79311 100644
--- a/tests/manual/widgets/widgets/bigmenucreator/mainwindow.cpp
+++ b/tests/manual/widgets/widgets/bigmenucreator/mainwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "mainwindow.h"
#include "ui_mainwindow.h"
diff --git a/tests/manual/widgets/widgets/bigmenucreator/mainwindow.h b/tests/manual/widgets/widgets/bigmenucreator/mainwindow.h
index 6d19d0e649..008820275d 100644
--- a/tests/manual/widgets/widgets/bigmenucreator/mainwindow.h
+++ b/tests/manual/widgets/widgets/bigmenucreator/mainwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/tests/manual/widgets/widgets/defaultUpMenuBar/CMakeLists.txt b/tests/manual/widgets/widgets/defaultUpMenuBar/CMakeLists.txt
index 7e973fdcf2..8c40824284 100644
--- a/tests/manual/widgets/widgets/defaultUpMenuBar/CMakeLists.txt
+++ b/tests/manual/widgets/widgets/defaultUpMenuBar/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from defaultUpMenuBar.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## defaultUpMenuBar Binary:
@@ -8,11 +9,8 @@ qt_internal_add_manual_test(defaultUpMenuBar
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:defaultUpMenuBar.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/widgets/defaultUpMenuBar/main.cpp b/tests/manual/widgets/widgets/defaultUpMenuBar/main.cpp
index a6b9ca218f..c1d7c032d0 100644
--- a/tests/manual/widgets/widgets/defaultUpMenuBar/main.cpp
+++ b/tests/manual/widgets/widgets/defaultUpMenuBar/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
- **
- ** Copyright (C) 2018 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: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) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// This test is to check that the menus in a menubar are displayed correctly in both the top and
// bottom cases. Especially when using multiple screens. If possible relayout the screens in order
@@ -118,9 +71,11 @@ int main(int argc, char **argv)
MainWindow *mainWindow = new MainWindow;
mainWindow->setGeometry(screen->geometry());
mainWindow->winId();
+#ifdef Q_OS_WIN
using namespace QNativeInterface::Private;
if (auto *windowsWindow = dynamic_cast<QWindowsWindow *>(mainWindow->windowHandle()->handle()))
windowsWindow->setHasBorderInFullScreen(true);
+#endif
mainWindow->showMaximized();
}
int ret = a.exec();
diff --git a/tests/manual/widgets/widgets/multiscreen-menus/CMakeLists.txt b/tests/manual/widgets/widgets/multiscreen-menus/CMakeLists.txt
index b5e97479fb..b1aab749d7 100644
--- a/tests/manual/widgets/widgets/multiscreen-menus/CMakeLists.txt
+++ b/tests/manual/widgets/widgets/multiscreen-menus/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from multiscreen-menus.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## multiscreen-menus Binary:
@@ -9,12 +10,9 @@ qt_internal_add_manual_test(multiscreen-menus
SOURCES
main.cpp
mainwindow.cpp mainwindow.h mainwindow.ui
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
ENABLE_AUTOGEN_TOOLS
uic
)
-
-#### Keys ignored in scope 1:.:.:multiscreen-menus.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/widgets/multiscreen-menus/main.cpp b/tests/manual/widgets/widgets/multiscreen-menus/main.cpp
index f63d644320..7f9628e374 100644
--- a/tests/manual/widgets/widgets/multiscreen-menus/main.cpp
+++ b/tests/manual/widgets/widgets/multiscreen-menus/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "mainwindow.h"
#include <QApplication>
diff --git a/tests/manual/widgets/widgets/multiscreen-menus/mainwindow.cpp b/tests/manual/widgets/widgets/multiscreen-menus/mainwindow.cpp
index a53eda37fa..a3af329783 100644
--- a/tests/manual/widgets/widgets/multiscreen-menus/mainwindow.cpp
+++ b/tests/manual/widgets/widgets/multiscreen-menus/mainwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "mainwindow.h"
#include "ui_mainwindow.h"
diff --git a/tests/manual/widgets/widgets/multiscreen-menus/mainwindow.h b/tests/manual/widgets/widgets/multiscreen-menus/mainwindow.h
index 9500d501ef..7a70b44657 100644
--- a/tests/manual/widgets/widgets/multiscreen-menus/mainwindow.h
+++ b/tests/manual/widgets/widgets/multiscreen-menus/mainwindow.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
diff --git a/tests/manual/widgets/widgets/qmainwindow/saveStateSize/CMakeLists.txt b/tests/manual/widgets/widgets/qmainwindow/saveStateSize/CMakeLists.txt
index 183855d6b2..a5eb676d69 100644
--- a/tests/manual/widgets/widgets/qmainwindow/saveStateSize/CMakeLists.txt
+++ b/tests/manual/widgets/widgets/qmainwindow/saveStateSize/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from saveStateSize.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## saveStateSize Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(saveStateSize
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:saveStateSize.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/widgets/qmainwindow/saveStateSize/main.cpp b/tests/manual/widgets/widgets/qmainwindow/saveStateSize/main.cpp
index dbca6df454..6576bcf8ab 100644
--- a/tests/manual/widgets/widgets/qmainwindow/saveStateSize/main.cpp
+++ b/tests/manual/widgets/widgets/qmainwindow/saveStateSize/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
- **
- ** Copyright (C) 2019 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) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// Test that the size of the saved state bytearray does not change due to moving a
// toolbar from one area to another. It should stay the same size as the first time
diff --git a/tests/manual/widgets/widgets/qtabbar/CMakeLists.txt b/tests/manual/widgets/widgets/qtabbar/CMakeLists.txt
index 2b8b71eb44..56345e2797 100644
--- a/tests/manual/widgets/widgets/qtabbar/CMakeLists.txt
+++ b/tests/manual/widgets/widgets/qtabbar/CMakeLists.txt
@@ -1,14 +1,4 @@
-# Generated from qtabbar.pro.
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
-#####################################################################
-## qtabbar Binary:
-#####################################################################
-
-qt_internal_add_manual_test(qtabbar
- GUI
- PUBLIC_LIBRARIES
- Qt::Gui
-)
-
-#### Keys ignored in scope 1:.:.:qtabbar.pro:<TRUE>:
-# SUBDIRS = "stylesheet"
+add_subdirectory(stylesheet)
diff --git a/tests/manual/widgets/widgets/qtabbar/stylesheet/CMakeLists.txt b/tests/manual/widgets/widgets/qtabbar/stylesheet/CMakeLists.txt
new file mode 100644
index 0000000000..f0723ae3e1
--- /dev/null
+++ b/tests/manual/widgets/widgets/qtabbar/stylesheet/CMakeLists.txt
@@ -0,0 +1,15 @@
+# Copyright (C) 2023 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtabbar Binary:
+#####################################################################
+
+qt_internal_add_manual_test(qtabbar
+ GUI
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::Widgets
+)
diff --git a/tests/manual/widgets/widgets/qtabbar/stylesheet/main.cpp b/tests/manual/widgets/widgets/qtabbar/stylesheet/main.cpp
index 02393f66f9..7d886d1ebc 100644
--- a/tests/manual/widgets/widgets/qtabbar/stylesheet/main.cpp
+++ b/tests/manual/widgets/widgets/qtabbar/stylesheet/main.cpp
@@ -1,52 +1,5 @@
-/****************************************************************************
- **
- ** 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: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) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
// This test is for checking that when there is padding set on the stylesheet and the elide mode is
// set that it is correctly shown as elided and not clipped.
diff --git a/tests/manual/widgets/widgets/qtoolbutton/menuOnMultiScreens/CMakeLists.txt b/tests/manual/widgets/widgets/qtoolbutton/menuOnMultiScreens/CMakeLists.txt
index f1a4a13462..8f9e46d098 100644
--- a/tests/manual/widgets/widgets/qtoolbutton/menuOnMultiScreens/CMakeLists.txt
+++ b/tests/manual/widgets/widgets/qtoolbutton/menuOnMultiScreens/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from menuOnMultiScreens.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## menuOnMultiScreens Binary:
@@ -8,10 +9,7 @@ qt_internal_add_manual_test(menuOnMultiScreens
GUI
SOURCES
main.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:menuOnMultiScreens.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/widgets/widgets/qtoolbutton/menuOnMultiScreens/main.cpp b/tests/manual/widgets/widgets/qtoolbutton/menuOnMultiScreens/main.cpp
index c048cd3609..3a575d8fe6 100644
--- a/tests/manual/widgets/widgets/qtoolbutton/menuOnMultiScreens/main.cpp
+++ b/tests/manual/widgets/widgets/qtoolbutton/menuOnMultiScreens/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
- **
- ** 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
// This tests that when in a multiple screen setup, that screens that have a top-left of 0x0 or
// a top left of being above/below the other screen then showing the toolbutton menu will be
diff --git a/tests/manual/windowactivation/main.cpp b/tests/manual/windowactivation/main.cpp
index 94f4afdde8..f171075089 100644
--- a/tests/manual/windowactivation/main.cpp
+++ b/tests/manual/windowactivation/main.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QtWidgets>
diff --git a/tests/manual/windowchildgeometry/CMakeLists.txt b/tests/manual/windowchildgeometry/CMakeLists.txt
index 17117ce80f..b3884c30cf 100644
--- a/tests/manual/windowchildgeometry/CMakeLists.txt
+++ b/tests/manual/windowchildgeometry/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from windowchildgeometry.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## windowchildgeometry Binary:
@@ -10,14 +11,9 @@ qt_internal_add_manual_test(windowchildgeometry
../windowflags/controls.cpp ../windowflags/controls.h
controllerwidget.cpp controllerwidget.h
main.cpp
- DEFINES
- QT_DISABLE_DEPRECATED_BEFORE=0
INCLUDE_DIRECTORIES
../windowflags
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:windowchildgeometry.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/windowchildgeometry/controllerwidget.cpp b/tests/manual/windowchildgeometry/controllerwidget.cpp
index 4d0aac1732..8478ba5411 100644
--- a/tests/manual/windowchildgeometry/controllerwidget.cpp
+++ b/tests/manual/windowchildgeometry/controllerwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "controllerwidget.h"
#include <controls.h>
diff --git a/tests/manual/windowchildgeometry/controllerwidget.h b/tests/manual/windowchildgeometry/controllerwidget.h
index d255953dd7..c2ebb8c07d 100644
--- a/tests/manual/windowchildgeometry/controllerwidget.h
+++ b/tests/manual/windowchildgeometry/controllerwidget.h
@@ -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
#ifndef CONTROLLERWIDGET_H
#define CONTROLLERWIDGET_H
diff --git a/tests/manual/windowchildgeometry/main.cpp b/tests/manual/windowchildgeometry/main.cpp
index 7a4550bf99..8c2b6df4d3 100644
--- a/tests/manual/windowchildgeometry/main.cpp
+++ b/tests/manual/windowchildgeometry/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 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 "controllerwidget.h"
diff --git a/tests/manual/windowchildgeometry/windowchildgeometry.pro b/tests/manual/windowchildgeometry/windowchildgeometry.pro
index 7722547ce7..b9a5f37362 100644
--- a/tests/manual/windowchildgeometry/windowchildgeometry.pro
+++ b/tests/manual/windowchildgeometry/windowchildgeometry.pro
@@ -5,5 +5,3 @@ TEMPLATE = app
INCLUDEPATH += ../windowflags
SOURCES += $$PWD/main.cpp controllerwidget.cpp ../windowflags/controls.cpp
HEADERS += controllerwidget.h ../windowflags/controls.h
-
-DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0
diff --git a/tests/manual/windowflags/CMakeLists.txt b/tests/manual/windowflags/CMakeLists.txt
index 5c4941bec8..27e4fd5ba6 100644
--- a/tests/manual/windowflags/CMakeLists.txt
+++ b/tests/manual/windowflags/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from windowflags.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## tst_manual_windowflags Binary:
@@ -11,7 +12,9 @@ qt_internal_add_manual_test(tst_manual_windowflags
controls.cpp controls.h
main.cpp
previewwindow.cpp previewwindow.h
- PUBLIC_LIBRARIES
+ NO_PCH_SOURCES
+ controls.cpp # undef QT_NO_FOREACH
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
diff --git a/tests/manual/windowflags/controllerwindow.cpp b/tests/manual/windowflags/controllerwindow.cpp
index ff53a4adb1..32979c1cd3 100644
--- a/tests/manual/windowflags/controllerwindow.cpp
+++ b/tests/manual/windowflags/controllerwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "controllerwindow.h"
#include "controls.h"
@@ -233,7 +208,7 @@ static Qt::WindowStates windowState(const QObject *o)
return states;
}
if (o->isWindowType())
- return static_cast<const QWindow *>(o)->windowState();
+ return static_cast<const QWindow *>(o)->windowStates();
return Qt::WindowNoState;
}
diff --git a/tests/manual/windowflags/controllerwindow.h b/tests/manual/windowflags/controllerwindow.h
index e4d8f2df0c..c51ed45a2e 100644
--- a/tests/manual/windowflags/controllerwindow.h
+++ b/tests/manual/windowflags/controllerwindow.h
@@ -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
#ifndef CONTROLLERWINDOW_H
#define CONTROLLERWINDOW_H
diff --git a/tests/manual/windowflags/controls.cpp b/tests/manual/windowflags/controls.cpp
index 62edeba443..97bedd0331 100644
--- a/tests/manual/windowflags/controls.cpp
+++ b/tests/manual/windowflags/controls.cpp
@@ -1,30 +1,7 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#undef QT_NO_FOREACH // this file contains unported legacy Q_FOREACH uses
#include "controls.h"
@@ -54,6 +31,7 @@ HintControl::HintControl(QWidget *parent)
, windowStaysOnBottomCheckBox(new QCheckBox(tr("Window stays on bottom")))
, customizeWindowHintCheckBox(new QCheckBox(tr("Customize window")))
, transparentForInputCheckBox(new QCheckBox(tr("Transparent for input")))
+ , noDropShadowCheckBox(new QCheckBox(tr("No drop shadow")))
{
connect(msWindowsFixedSizeDialogCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged()));
connect(x11BypassWindowManagerCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged()));
@@ -70,6 +48,7 @@ HintControl::HintControl(QWidget *parent)
connect(windowStaysOnBottomCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged()));
connect(customizeWindowHintCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged()));
connect(transparentForInputCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged()));
+ connect(noDropShadowCheckBox, SIGNAL(clicked()), this, SLOT(slotCheckBoxChanged()));
QGridLayout *layout = new QGridLayout(this);
layout->setSpacing(0);
layout->setContentsMargins(ControlLayoutMargin, ControlLayoutMargin,
@@ -89,6 +68,7 @@ HintControl::HintControl(QWidget *parent)
layout->addWidget(windowStaysOnBottomCheckBox, 7, 1);
layout->addWidget(customizeWindowHintCheckBox, 5, 0);
layout->addWidget(transparentForInputCheckBox, 6, 0);
+ layout->addWidget(noDropShadowCheckBox, 7, 0);
}
Qt::WindowFlags HintControl::hints() const
@@ -124,6 +104,8 @@ Qt::WindowFlags HintControl::hints() const
flags |= Qt::CustomizeWindowHint;
if (transparentForInputCheckBox->isChecked())
flags |= Qt::WindowTransparentForInput;
+ if (noDropShadowCheckBox->isChecked())
+ flags |= Qt::NoDropShadowWindowHint;
return flags;
}
@@ -144,6 +126,7 @@ void HintControl::setHints(Qt::WindowFlags flags)
windowStaysOnBottomCheckBox->setChecked(flags & Qt::WindowStaysOnBottomHint);
customizeWindowHintCheckBox->setChecked(flags & Qt::CustomizeWindowHint);
transparentForInputCheckBox->setChecked(flags & Qt::WindowTransparentForInput);
+ noDropShadowCheckBox->setChecked(flags & Qt::NoDropShadowWindowHint);
}
void HintControl::slotCheckBoxChanged()
diff --git a/tests/manual/windowflags/controls.h b/tests/manual/windowflags/controls.h
index e140d813cc..7918468be8 100644
--- a/tests/manual/windowflags/controls.h
+++ b/tests/manual/windowflags/controls.h
@@ -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
#ifndef CONTROLS_H
#define CONTROLS_H
@@ -71,6 +46,7 @@ private:
QCheckBox *windowStaysOnBottomCheckBox;
QCheckBox *customizeWindowHintCheckBox;
QCheckBox *transparentForInputCheckBox;
+ QCheckBox *noDropShadowCheckBox;
};
// Control for the Qt::WindowState enum, optional with a "visible" QCheckbox
diff --git a/tests/manual/windowflags/main.cpp b/tests/manual/windowflags/main.cpp
index 4da878d8cc..ad99b92d13 100644
--- a/tests/manual/windowflags/main.cpp
+++ b/tests/manual/windowflags/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 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 <QStringList>
diff --git a/tests/manual/windowflags/previewwindow.cpp b/tests/manual/windowflags/previewwindow.cpp
index b827d031bf..5a048ef5cf 100644
--- a/tests/manual/windowflags/previewwindow.cpp
+++ b/tests/manual/windowflags/previewwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include <QPlainTextEdit>
#include <QPushButton>
diff --git a/tests/manual/windowflags/previewwindow.h b/tests/manual/windowflags/previewwindow.h
index ab309a0139..3bfae9c0e9 100644
--- a/tests/manual/windowflags/previewwindow.h
+++ b/tests/manual/windowflags/previewwindow.h
@@ -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
#ifndef PREVIEWWINDOW_H
#define PREVIEWWINDOW_H
diff --git a/tests/manual/windowgeometry/CMakeLists.txt b/tests/manual/windowgeometry/CMakeLists.txt
index 0467958e59..0c81455767 100644
--- a/tests/manual/windowgeometry/CMakeLists.txt
+++ b/tests/manual/windowgeometry/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from windowgeometry.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## windowgeometry Binary:
@@ -12,10 +13,7 @@ qt_internal_add_manual_test(windowgeometry
main.cpp
INCLUDE_DIRECTORIES
../windowflags
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:windowgeometry.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/windowgeometry/controllerwidget.cpp b/tests/manual/windowgeometry/controllerwidget.cpp
index b2b5810158..8328b58e7c 100644
--- a/tests/manual/windowgeometry/controllerwidget.cpp
+++ b/tests/manual/windowgeometry/controllerwidget.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#include "controllerwidget.h"
#include <controls.h>
diff --git a/tests/manual/windowgeometry/controllerwidget.h b/tests/manual/windowgeometry/controllerwidget.h
index e492f965b5..6358311be9 100644
--- a/tests/manual/windowgeometry/controllerwidget.h
+++ b/tests/manual/windowgeometry/controllerwidget.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef CONTROLLERWIDGET_H
#define CONTROLLERWIDGET_H
diff --git a/tests/manual/windowgeometry/main.cpp b/tests/manual/windowgeometry/main.cpp
index 7a4550bf99..8c2b6df4d3 100644
--- a/tests/manual/windowgeometry/main.cpp
+++ b/tests/manual/windowgeometry/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 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 "controllerwidget.h"
diff --git a/tests/manual/windowmask/CMakeLists.txt b/tests/manual/windowmask/CMakeLists.txt
new file mode 100644
index 0000000000..e1417bedbe
--- /dev/null
+++ b/tests/manual/windowmask/CMakeLists.txt
@@ -0,0 +1,14 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## windowmask Binary:
+#####################################################################
+
+qt_internal_add_manual_test(windowmask
+ SOURCES
+ main.cpp
+ LIBRARIES
+ Qt::Gui
+ Qt::Widgets
+)
diff --git a/tests/manual/windowmask/main.cpp b/tests/manual/windowmask/main.cpp
new file mode 100644
index 0000000000..3055e18a42
--- /dev/null
+++ b/tests/manual/windowmask/main.cpp
@@ -0,0 +1,124 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QtWidgets>
+
+template<typename Paintable>
+class Circle : public Paintable
+{
+public:
+ using Paintable::setMinimumSize;
+ using Paintable::setMaximumSize;
+ using Paintable::width;
+ using Paintable::height;
+ using Paintable::screen;
+ using Paintable::devicePixelRatio;
+ using Paintable::metaObject;
+ using Paintable::setMask;
+ using Paintable::frameGeometry;
+ using Paintable::setPosition;
+ using Paintable::startSystemMove;
+ using Paintable::setFlags;
+ using Paintable::requestUpdate;
+
+ Circle()
+ {
+ setMinimumSize({200, 200});
+ setMaximumSize({200, 200});
+ setFlags(Qt::Window | Qt::FramelessWindowHint);
+ }
+
+protected:
+ void paintEvent(QPaintEvent *) override
+ {
+ qWarning() << "Painting into a" << this << "with DPR" << devicePixelRatio()
+ << "on a screen with DPR" << screen()->devicePixelRatio();
+ QPainter painter(static_cast<Paintable *>(this));
+ painter.fillRect(0, 0, width(), height(), devicePixelRatio() == 1 ? Qt::red : Qt::green);
+ painter.setPen(QPen(Qt::black, 5));
+ painter.drawRect(10, 10, width() - 20, height() - 20);
+ painter.drawText(0, 0, width(), height(), Qt::AlignHCenter | Qt::AlignVCenter, metaObject()->className());
+ }
+ void mousePressEvent(QMouseEvent *event) override
+ {
+ if (event->button() == Qt::LeftButton) {
+ if (event->modifiers() & Qt::ControlModifier)
+ requestUpdate();
+ else if (event->modifiers() & Qt::AltModifier)
+ updateMask();
+ else if (event->modifiers() & Qt::ShiftModifier && startSystemMove())
+ dragPosition = {};
+ else
+ dragPosition = event->globalPosition() - frameGeometry().topLeft();
+ }
+ }
+ void mouseMoveEvent(QMouseEvent *event) override
+ {
+ if (event->buttons() & Qt::LeftButton && !dragPosition.isNull())
+ setPosition((event->globalPosition() - dragPosition).toPoint());
+ }
+ void resizeEvent(QResizeEvent *) override
+ {
+ updateMask();
+ }
+
+ void updateMask()
+ {
+ int side = qMin(width(), height());
+ QRegion maskedRegion(width() / 2 - side / 2, height() / 2 - side / 2, side,
+ side, QRegion::Ellipse);
+ qDebug() << "Updating mask for" << this << "to" << maskedRegion.boundingRect();
+ setMask(maskedRegion);
+ }
+
+ QPointF dragPosition;
+};
+
+class WindowLikeWidget : public QWidget
+{
+public:
+ void setPosition(const QPoint &point) { QWidget::move(point); }
+ bool startSystemMove() { return windowHandle()->startSystemMove(); }
+ void setFlags(Qt::WindowFlags flags) { setWindowFlags(flags); }
+ void requestUpdate() { update(); }
+};
+
+class Widget : public Circle<WindowLikeWidget>
+{
+public:
+ Widget()
+ {
+ setAttribute(Qt::WA_TranslucentBackground);
+ }
+};
+
+class Window : public Circle<QRasterWindow>
+{
+};
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ Widget widget;
+ widget.show();
+
+ Window window;
+ window.show();
+
+ auto dumpScreenData = [](QScreen *screen){
+ qDebug() << "- name:" << screen->name();
+ qDebug() << "- dpr :" << screen->devicePixelRatio();
+ };
+
+ QObject::connect(widget.windowHandle(), &QWindow::screenChanged, &widget, [&]{
+ qDebug() << "Screen changed for" << &widget;
+ dumpScreenData(widget.screen());
+ });
+ QObject::connect(&window, &QWindow::screenChanged, &window, [&]{
+ qDebug() << "Screen changed for" << &window;
+ dumpScreenData(window.screen());
+ });
+
+ return app.exec();
+}
diff --git a/tests/manual/windowmodality/CMakeLists.txt b/tests/manual/windowmodality/CMakeLists.txt
index 63a18701ba..c32a973c5d 100644
--- a/tests/manual/windowmodality/CMakeLists.txt
+++ b/tests/manual/windowmodality/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from windowmodality.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## windowmodality Binary:
@@ -10,7 +11,7 @@ qt_internal_add_manual_test(windowmodality
dialog.ui
main.cpp
widget.ui
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::PrintSupport
Qt::Widgets
diff --git a/tests/manual/windowmodality/main.cpp b/tests/manual/windowmodality/main.cpp
index e3705f78a4..6a11f6c42d 100644
--- a/tests/manual/windowmodality/main.cpp
+++ b/tests/manual/windowmodality/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 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 "ui_dialog.h"
#include "ui_widget.h"
diff --git a/tests/manual/windowtransparency/CMakeLists.txt b/tests/manual/windowtransparency/CMakeLists.txt
index c35f0bebd9..04c21228fb 100644
--- a/tests/manual/windowtransparency/CMakeLists.txt
+++ b/tests/manual/windowtransparency/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from windowtransparency.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## windowtransparency Binary:
@@ -7,7 +8,8 @@
qt_internal_add_manual_test(windowtransparency
SOURCES
windowtransparency.cpp
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
+ Qt::OpenGL
)
diff --git a/tests/manual/windowtransparency/windowtransparency.cpp b/tests/manual/windowtransparency/windowtransparency.cpp
index 8eb44f881c..10ee6960c3 100644
--- a/tests/manual/windowtransparency/windowtransparency.cpp
+++ b/tests/manual/windowtransparency/windowtransparency.cpp
@@ -1,33 +1,9 @@
-/****************************************************************************
-**
-** 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
#include <QtGui>
#include <QtWidgets>
+#include <QtOpenGL/QOpenGLShaderProgram>
class GLWindow : public QWindow
{
diff --git a/tests/manual/xcb_gl_integration/CMakeLists.txt b/tests/manual/xcb_gl_integration/CMakeLists.txt
index 45faaf10f9..4820c991d2 100644
--- a/tests/manual/xcb_gl_integration/CMakeLists.txt
+++ b/tests/manual/xcb_gl_integration/CMakeLists.txt
@@ -1,4 +1,5 @@
-# Generated from xcb_gl_integration.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
## xcb_gl_integration Binary:
@@ -10,10 +11,7 @@ qt_internal_add_manual_test(xcb_gl_integration
main.cpp
INCLUDE_DIRECTORIES
.
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::GuiPrivate
)
-
-#### Keys ignored in scope 1:.:.:xcb_gl_integration.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/xcb_gl_integration/main.cpp b/tests/manual/xcb_gl_integration/main.cpp
index bff56f2ec2..a19505900c 100644
--- a/tests/manual/xcb_gl_integration/main.cpp
+++ b/tests/manual/xcb_gl_integration/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 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 <QtGui/QGuiApplication>
#include <QtGui/QWindow>
diff --git a/tests/manual/xembed-raster/gtk-embedder.py b/tests/manual/xembed-raster/gtk-embedder.py
deleted file mode 100755
index 5c37fd445f..0000000000
--- a/tests/manual/xembed-raster/gtk-embedder.py
+++ /dev/null
@@ -1,61 +0,0 @@
-#!/usr/bin/python
-#############################################################################
-##
-## Copyright (C) 2013 Canonical 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$
-##
-#############################################################################
-
-from gi.repository import Gtk
-from subprocess import Popen
-
-window = Gtk.Window()
-
-box = Gtk.VBox(False, 0)
-window.add(box)
-
-child = None
-def on_button_clicked(button, socket):
- global child
- child = Popen(['./rasterwindow', str(socket.get_id())])
-
-button = Gtk.Button("Press me to embed a Qt client")
-box.pack_start(button, False, False, 0)
-
-socket = Gtk.Socket()
-socket.set_size_request(200, 200)
-box.add(socket)
-
-button.connect("clicked", on_button_clicked, socket)
-window.connect("destroy", Gtk.main_quit)
-
-def plugged_event(widget):
- print("A window was embedded!")
-
-socket.connect("plug-added", plugged_event)
-
-window.show_all()
-Gtk.main()
-if child:
- child.terminate()
diff --git a/tests/manual/xembed-raster/main.cpp b/tests/manual/xembed-raster/main.cpp
deleted file mode 100644
index 9b13b88047..0000000000
--- a/tests/manual/xembed-raster/main.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************************
-**
-** 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$
-**
-****************************************************************************/
-
-#include "rasterwindow.h"
-#include <QDebug>
-
-int main(int argc, char **argv)
-{
- QGuiApplication app(argc, argv);
-
- QStringList args = app.arguments();
-
- WId winId = 0;
- if (args.count() > 1) {
- bool ok;
- winId = args[1].toUInt(&ok);
- Q_ASSERT(ok);
- }
-
- RasterWindow window;
- window.show();
-
- QWindow *foreign = QWindow::fromWinId(winId);
- Q_ASSERT(foreign != 0);
-
- window.setParent(foreign);
-
- return app.exec();
-}
diff --git a/tests/manual/xembed-raster/rasterwindow.h b/tests/manual/xembed-raster/rasterwindow.h
deleted file mode 100644
index faa44f49cc..0000000000
--- a/tests/manual/xembed-raster/rasterwindow.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/****************************************************************************
-**
-** 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$
-**
-****************************************************************************/
-
-#ifndef RASTERWINDOW_H
-#define RASTERWINDOW_H
-
-#include <QtGui>
-
-class RasterWindow : public QWindow
-{
- Q_OBJECT
-public:
- explicit RasterWindow(QWindow *parent = nullptr);
-
- virtual void render(QPainter *painter);
-
-public slots:
- void renderLater();
- void renderNow();
-
-protected:
- bool event(QEvent *event);
-
- void resizeEvent(QResizeEvent *event);
- void exposeEvent(QExposeEvent *event);
-
-private:
- QBackingStore *m_backingStore;
- bool m_update_pending;
-};
-
-#endif // RASTERWINDOW_H
diff --git a/tests/manual/xembed-widgets/gtk-embedder.py b/tests/manual/xembed-widgets/gtk-embedder.py
deleted file mode 100755
index 2a7c92db8f..0000000000
--- a/tests/manual/xembed-widgets/gtk-embedder.py
+++ /dev/null
@@ -1,64 +0,0 @@
-#!/usr/bin/python
-#############################################################################
-##
-## Copyright (C) 2013 Canonical 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$
-##
-#############################################################################
-
-from gi.repository import Gtk
-from subprocess import Popen
-
-window = Gtk.Window()
-
-box = Gtk.VBox(False, 0)
-window.add(box)
-
-child = None
-def on_button_clicked(button, socket):
- global child
- child = Popen(['./lineedits', str(socket.get_id())])
-
-button = Gtk.Button("Press me to embed a Qt client")
-box.pack_start(button, False, False, 0)
-
-entry = Gtk.Entry()
-box.pack_start(entry, False, False, 0)
-
-socket = Gtk.Socket()
-socket.set_size_request(200, 200)
-box.add(socket)
-
-button.connect("clicked", on_button_clicked, socket)
-window.connect("destroy", Gtk.main_quit)
-
-def plugged_event(widget):
- print("A window was embedded!")
-
-socket.connect("plug-added", plugged_event)
-
-window.show_all()
-Gtk.main()
-if child:
- child.terminate()
diff --git a/tests/manual/xembed-widgets/main.cpp b/tests/manual/xembed-widgets/main.cpp
deleted file mode 100644
index 01a53b3957..0000000000
--- a/tests/manual/xembed-widgets/main.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-/****************************************************************************
-**
-** 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$
-**
-****************************************************************************/
-
-#include <QApplication>
-#include <QDebug>
-#include <QWindow>
-
-#include "window.h"
-
-int main(int argc, char *argv[])
-{
- QApplication app(argc, argv);
-
- QStringList args = app.arguments();
-
- WId winId = 0;
- if (args.count() > 1) {
- bool ok;
- winId = args[1].toUInt(&ok);
- Q_ASSERT(ok);
- }
-
- Window window;
- window.show();
-
- QWindow *foreign = QWindow::fromWinId(winId);
- Q_ASSERT(foreign != 0);
-
- window.windowHandle()->setParent(foreign);
-
- return app.exec();
-}
diff --git a/tests/manual/xembed-widgets/window.h b/tests/manual/xembed-widgets/window.h
deleted file mode 100644
index 6166f16d80..0000000000
--- a/tests/manual/xembed-widgets/window.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** 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$
-**
-****************************************************************************/
-
-#ifndef WINDOW_H
-#define WINDOW_H
-
-#include <QWidget>
-
-QT_BEGIN_NAMESPACE
-class QComboBox;
-class QLineEdit;
-QT_END_NAMESPACE
-
-class Window : public QWidget
-{
- Q_OBJECT
-
-public:
- Window();
-
-public slots:
- void echoChanged(int);
- void validatorChanged(int);
- void alignmentChanged(int);
- void inputMaskChanged(int);
- void accessChanged(int);
-
-private:
- QLineEdit *echoLineEdit;
- QLineEdit *validatorLineEdit;
- QLineEdit *alignmentLineEdit;
- QLineEdit *inputMaskLineEdit;
- QLineEdit *accessLineEdit;
-};
-
-#endif
diff --git a/tests/manual/xembed/CMakeLists.txt b/tests/manual/xembed/CMakeLists.txt
new file mode 100644
index 0000000000..f486f202a5
--- /dev/null
+++ b/tests/manual/xembed/CMakeLists.txt
@@ -0,0 +1,6 @@
+
+if(QT_FEATURE_gtk3)
+ add_subdirectory(gtk-container)
+endif()
+add_subdirectory(qt-client-raster)
+add_subdirectory(qt-client-widget)
diff --git a/tests/manual/xembed/gtk-container/CMakeLists.txt b/tests/manual/xembed/gtk-container/CMakeLists.txt
new file mode 100644
index 0000000000..c109bbc95b
--- /dev/null
+++ b/tests/manual/xembed/gtk-container/CMakeLists.txt
@@ -0,0 +1,22 @@
+
+qt_find_package(GTK3)
+qt_find_package(X11)
+
+#####################################################################
+## gtk-container Binary:
+#####################################################################
+
+qt_internal_add_manual_test(gtk-container
+ GUI
+ SOURCES
+ gtk-container.cpp
+ DEFINES
+ GDK_VERSION_MIN_REQUIRED=GDK_VERSION_3_6
+ LIBRARIES
+ PkgConfig::GTK3
+ Qt::Core
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::GuiPrivate
+ X11::X11
+)
diff --git a/tests/manual/xembed/gtk-container/gtk-container.cpp b/tests/manual/xembed/gtk-container/gtk-container.cpp
new file mode 100644
index 0000000000..2ecbe10545
--- /dev/null
+++ b/tests/manual/xembed/gtk-container/gtk-container.cpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <gtk/gtk.h>
+#include <gtk/gtkx.h>
+
+gchar *cmd;
+
+void launch_app(GtkButton */* btn */, guint32 *id)
+{
+ gchar *command = g_strdup_printf("%s %u", cmd, *id);
+ g_spawn_command_line_async(command, NULL);
+}
+
+gint main(gint argc, gchar **argv)
+{
+ if (argc <=1 || argc > 2) {
+ g_print("No client application defined.\n");
+ return 0;
+ }
+
+ cmd = g_strdup_printf("%s", argv[1]);
+
+ gtk_init(&argc, &argv);
+
+ GtkWidget *win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+ GtkWidget *vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
+ GtkWidget *sock = gtk_socket_new();
+ GtkWidget *btn = gtk_button_new_with_label("Hello, World!");
+ g_signal_connect(sock, "plug-removed", gtk_main_quit, NULL);
+ g_signal_connect(win, "delete-event", gtk_main_quit, NULL);
+ gtk_widget_set_size_request(sock, 200, 200);
+ gtk_box_pack_start(GTK_BOX(vbox), btn, FALSE, FALSE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), sock, TRUE, TRUE, 0);
+ gtk_container_add(GTK_CONTAINER(win), vbox);
+ gtk_widget_show_all(win);
+
+ guint32 id = gtk_socket_get_id(GTK_SOCKET(sock));
+ g_signal_connect(btn, "clicked", G_CALLBACK(launch_app), &id);
+
+ gtk_main();
+ return 0;
+}
diff --git a/tests/manual/xembed/gtk-container/gtk-container.pro b/tests/manual/xembed/gtk-container/gtk-container.pro
new file mode 100644
index 0000000000..e98f1d6cfa
--- /dev/null
+++ b/tests/manual/xembed/gtk-container/gtk-container.pro
@@ -0,0 +1,16 @@
+TEMPLATE = app
+TARGET = gtk-container
+QT_FOR_CONFIG += widgets-private
+INCLUDEPATH += .
+CONFIG += X11
+QMAKE_USE += gtk3
+
+# You can make your code fail to compile if you use deprecated APIs.
+# In order to do so, uncomment the following line.
+# Please consult the documentation of the deprecated API in order to know
+# how to port your code away from it.
+# You can also select to disable deprecated APIs only up to a certain version of Qt.
+#DEFINES += QT_DISABLE_DEPRECATED_UP_TO=0x060000 # disables all APIs deprecated in Qt 6.0.0 and earlier
+
+# Input
+SOURCES += gtk-container.cpp
diff --git a/tests/manual/xembed-raster/CMakeLists.txt b/tests/manual/xembed/qt-client-raster/CMakeLists.txt
index 20ec90e2c6..0784f411a3 100644
--- a/tests/manual/xembed-raster/CMakeLists.txt
+++ b/tests/manual/xembed/qt-client-raster/CMakeLists.txt
@@ -1,17 +1,15 @@
-# Generated from xembed-raster.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
-## tst_manual_rasterwindow Binary:
+## qt-client-raster Binary:
#####################################################################
-qt_internal_add_manual_test(tst_manual_rasterwindow
+qt_internal_add_manual_test(qt-client-raster
GUI
SOURCES
main.cpp
rasterwindow.cpp rasterwindow.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
)
-
-#### Keys ignored in scope 1:.:.:xembed-raster.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/xembed/qt-client-raster/main.cpp b/tests/manual/xembed/qt-client-raster/main.cpp
new file mode 100644
index 0000000000..628a9f652c
--- /dev/null
+++ b/tests/manual/xembed/qt-client-raster/main.cpp
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include "rasterwindow.h"
+#include <QDebug>
+
+int main(int argc, char **argv)
+{
+ QGuiApplication app(argc, argv);
+
+ QStringList args = app.arguments();
+
+ WId winId = 0;
+ if (args.count() > 1) {
+ bool ok;
+ winId = args[1].toUInt(&ok);
+ Q_ASSERT(ok);
+ }
+
+ RasterWindow window;
+
+ QWindow *foreign = QWindow::fromWinId(winId);
+ Q_ASSERT(foreign != 0);
+
+ window.setParent(foreign);
+ window.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/xembed-raster/xembed-raster.pro b/tests/manual/xembed/qt-client-raster/qt-client-raster.pro
index 4c9fee07b8..9a47ed41c2 100644
--- a/tests/manual/xembed-raster/xembed-raster.pro
+++ b/tests/manual/xembed/qt-client-raster/qt-client-raster.pro
@@ -1,5 +1,5 @@
TEMPLATE = app
-TARGET= tst_manual_rasterwindow
+TARGET= qt-client-raster
QT += gui
SOURCES += \
diff --git a/tests/manual/xembed-raster/rasterwindow.cpp b/tests/manual/xembed/qt-client-raster/rasterwindow.cpp
index 0da33add8a..89d765f707 100644
--- a/tests/manual/xembed-raster/rasterwindow.cpp
+++ b/tests/manual/xembed/qt-client-raster/rasterwindow.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include "rasterwindow.h"
@@ -32,6 +7,8 @@ RasterWindow::RasterWindow(QWindow *parent)
: QWindow(parent)
, m_update_pending(false)
{
+ winId();
+
m_backingStore = new QBackingStore(this);
create();
diff --git a/tests/manual/xembed/qt-client-raster/rasterwindow.h b/tests/manual/xembed/qt-client-raster/rasterwindow.h
new file mode 100644
index 0000000000..2d41cd8e5d
--- /dev/null
+++ b/tests/manual/xembed/qt-client-raster/rasterwindow.h
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef RASTERWINDOW_H
+#define RASTERWINDOW_H
+
+#include <QtGui>
+
+class RasterWindow : public QWindow
+{
+ Q_OBJECT
+public:
+ explicit RasterWindow(QWindow *parent = nullptr);
+
+ virtual void render(QPainter *painter);
+
+public slots:
+ void renderLater();
+ void renderNow();
+
+protected:
+ bool event(QEvent *event) override;
+
+ void resizeEvent(QResizeEvent *event) override;
+ void exposeEvent(QExposeEvent *event) override;
+
+private:
+ QBackingStore *m_backingStore;
+ bool m_update_pending;
+};
+
+#endif // RASTERWINDOW_H
diff --git a/tests/manual/xembed-widgets/CMakeLists.txt b/tests/manual/xembed/qt-client-widget/CMakeLists.txt
index 411df543e3..8c9ea9e0f8 100644
--- a/tests/manual/xembed-widgets/CMakeLists.txt
+++ b/tests/manual/xembed/qt-client-widget/CMakeLists.txt
@@ -1,18 +1,16 @@
-# Generated from xembed-widgets.pro.
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
#####################################################################
-## tst_manual_lineedits Binary:
+## qt-client-widget Binary:
#####################################################################
-qt_internal_add_manual_test(tst_manual_lineedits
+qt_internal_add_manual_test(qt-client-widget
GUI
SOURCES
main.cpp
window.cpp window.h
- PUBLIC_LIBRARIES
+ LIBRARIES
Qt::Gui
Qt::Widgets
)
-
-#### Keys ignored in scope 1:.:.:xembed-widgets.pro:<TRUE>:
-# TEMPLATE = "app"
diff --git a/tests/manual/xembed/qt-client-widget/main.cpp b/tests/manual/xembed/qt-client-widget/main.cpp
new file mode 100644
index 0000000000..bd8b05b054
--- /dev/null
+++ b/tests/manual/xembed/qt-client-widget/main.cpp
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QApplication>
+#include <QDebug>
+#include <QWindow>
+
+#include "window.h"
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+
+ QStringList args = app.arguments();
+
+ WId winId = 0;
+ if (args.count() > 1) {
+ bool ok;
+ winId = args[1].toUInt(&ok);
+ Q_ASSERT(ok);
+ }
+
+ Window window;
+
+ QWindow *foreign = QWindow::fromWinId(winId);
+ Q_ASSERT(foreign != 0);
+
+ window.windowHandle()->setParent(foreign);
+ window.show();
+
+ return app.exec();
+}
diff --git a/tests/manual/xembed-widgets/xembed-widgets.pro b/tests/manual/xembed/qt-client-widget/qt-client-widget.pro
index 28d13d5b61..3dfe2c9ab1 100644
--- a/tests/manual/xembed-widgets/xembed-widgets.pro
+++ b/tests/manual/xembed/qt-client-widget/qt-client-widget.pro
@@ -1,5 +1,5 @@
TEMPLATE = app
-TARGET= tst_manual_lineedits
+TARGET= qt-client-widget
QT += widgets
SOURCES += \
diff --git a/tests/manual/xembed-widgets/window.cpp b/tests/manual/xembed/qt-client-widget/window.cpp
index 6bfbb0f800..92feca7506 100644
--- a/tests/manual/xembed-widgets/window.cpp
+++ b/tests/manual/xembed/qt-client-widget/window.cpp
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** 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
#include <QtWidgets>
@@ -32,6 +7,10 @@
Window::Window()
{
+ setAttribute(Qt::WA_NativeWindow);
+ setAttribute(Qt::WA_DontCreateNativeAncestors);
+ createWinId();
+
QGroupBox *echoGroup = new QGroupBox(tr("Echo"));
QLabel *echoLabel = new QLabel(tr("Mode:"));
@@ -84,6 +63,11 @@ Window::Window()
accessLineEdit = new QLineEdit;
+ QGroupBox *testGroup = new QGroupBox(tr("Test"));
+
+ QLabel *testLabel = new QLabel(tr("Drag and Drop:"));
+ textEdit = new QTextEdit;
+
connect(echoComboBox, SIGNAL(activated(int)),
this, SLOT(echoChanged(int)));
connect(validatorComboBox, SIGNAL(activated(int)),
@@ -125,12 +109,18 @@ Window::Window()
accessLayout->addWidget(accessLineEdit, 1, 0, 1, 2);
accessGroup->setLayout(accessLayout);
+ QGridLayout *testLayout = new QGridLayout;
+ testLayout->addWidget(testLabel, 0, 0);
+ testLayout->addWidget(textEdit, 1, 0, 1, 2);
+ testGroup->setLayout(testLayout);
+
QGridLayout *layout = new QGridLayout;
layout->addWidget(echoGroup, 0, 0);
layout->addWidget(validatorGroup, 1, 0);
layout->addWidget(alignmentGroup, 2, 0);
layout->addWidget(inputMaskGroup, 0, 1);
layout->addWidget(accessGroup, 1, 1);
+ layout->addWidget(testGroup, 2, 1);
setLayout(layout);
setWindowTitle(tr("Line Edits"));
diff --git a/tests/manual/xembed/qt-client-widget/window.h b/tests/manual/xembed/qt-client-widget/window.h
new file mode 100644
index 0000000000..2b069f1ff0
--- /dev/null
+++ b/tests/manual/xembed/qt-client-widget/window.h
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef WINDOW_H
+#define WINDOW_H
+
+#include <QWidget>
+
+QT_BEGIN_NAMESPACE
+class QComboBox;
+class QLineEdit;
+class QTextEdit;
+QT_END_NAMESPACE
+
+class Window : public QWidget
+{
+ Q_OBJECT
+
+public:
+ Window();
+
+public slots:
+ void echoChanged(int);
+ void validatorChanged(int);
+ void alignmentChanged(int);
+ void inputMaskChanged(int);
+ void accessChanged(int);
+
+private:
+ QLineEdit *echoLineEdit;
+ QLineEdit *validatorLineEdit;
+ QLineEdit *alignmentLineEdit;
+ QLineEdit *inputMaskLineEdit;
+ QLineEdit *accessLineEdit;
+ QTextEdit *textEdit;
+};
+
+#endif
diff --git a/tests/manual/xembed/xembed.pro b/tests/manual/xembed/xembed.pro
new file mode 100644
index 0000000000..14a4ddea44
--- /dev/null
+++ b/tests/manual/xembed/xembed.pro
@@ -0,0 +1,11 @@
+TEMPLATE=subdirs
+QT_FOR_CONFIG += network-private gui-private
+
+TEMPLATE = subdirs
+QT_FOR_CONFIG += widgets-private
+
+SUBDIRS = \
+qt-client-raster \
+qt-client-widget
+
+qtHaveModule(widgets):qtConfig(gtk3): SUBDIRS += gtk-container
diff --git a/tests/manual/xmlstreamlint/CMakeLists.txt b/tests/manual/xmlstreamlint/CMakeLists.txt
new file mode 100644
index 0000000000..5b11c9035d
--- /dev/null
+++ b/tests/manual/xmlstreamlint/CMakeLists.txt
@@ -0,0 +1,24 @@
+# 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(xmlstreamlint LANGUAGES CXX)
+ find_package(Qt6BuildInternals COMPONENTS STANDALONE_TEST)
+ endif()
+
+qt_internal_add_manual_test(xmlstreamlint
+ SOURCES
+ main.cpp
+)
+
+set_target_properties(xmlstreamlint PROPERTIES
+ WIN32_EXECUTABLE FALSE
+ MACOSX_BUNDLE FALSE
+)
+
+target_link_libraries(xmlstreamlint PRIVATE
+ Qt::Core
+ Qt::Xml
+)
+
diff --git a/tests/manual/xmlstreamlint/doc/src/xmlstreamlint.qdoc b/tests/manual/xmlstreamlint/doc/src/xmlstreamlint.qdoc
new file mode 100644
index 0000000000..870203c584
--- /dev/null
+++ b/tests/manual/xmlstreamlint/doc/src/xmlstreamlint.qdoc
@@ -0,0 +1,51 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \example xmlstreamlint
+ \title XML Stream Lint Example
+ \ingroup xml-examples
+ \brief A commandline tool reading from an input file and writing to
+ the standard output file.
+
+ The XML Stream Lint example provides a simple command line utility that
+ accepts a file name as its single argument and writes it to the standard
+ output file.
+
+ The specified file is parsed using an QXmlStreamReader object and written
+ to the standard output file using an QXmlStreamWriter object. If the file
+ does not contain a well-formed XML document or the use of namespaces in
+ the document is incorrect, a description of the error is printed to
+ the standard error file and will appear in the console.
+
+ \section1 Basic Operation
+
+ The main function of the example opens the file specified by the user
+ for input (\c inputFile), and it uses QFile to access the standard output
+ file.
+
+ Reading XML is handled by an instance of the QXmlStreamReader class, which
+ operates on the input file object; writing is handled by an instance of
+ QXmlStreamWriter operating on the output file object:
+
+ \snippet xmlstreamlint/main.cpp 0
+
+ The work of parsing and rewriting the XML is done in a while loop, and is
+ driven by input from the reader:
+
+ \snippet xmlstreamlint/main.cpp 1
+
+ If more input is available, the next token from the input file is read
+ and parsed. If an error occurred, information is written to the standard
+ error file via a stream, and the example exits by returning a non-zero
+ value from the main function.
+
+ \snippet xmlstreamlint/main.cpp 2
+
+ For valid input, the writer is fed the current token from the reader,
+ and this is written to the output file that was specified when it was
+ constructed.
+
+ When there is no more input, the loop terminates, and the example can
+ exit successfully.
+*/
diff --git a/tests/manual/xmlstreamlint/main.cpp b/tests/manual/xmlstreamlint/main.cpp
new file mode 100644
index 0000000000..b825d1e7f5
--- /dev/null
+++ b/tests/manual/xmlstreamlint/main.cpp
@@ -0,0 +1,90 @@
+// Copyright (C) 2016 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#include <QCoreApplication>
+#include <QFile>
+#include <QStringList>
+#include <QTextStream>
+#include <QXmlStreamReader>
+
+/*
+ This class exists for the sole purpose of creating a translation context.
+*/
+class XmlStreamLint
+{
+public:
+ Q_DECLARE_TR_FUNCTIONS(XmlStreamLint)
+};
+
+int main(int argc, char *argv[])
+{
+ enum ExitCode
+ {
+ Success,
+ ParseFailure,
+ ArgumentError,
+ WriteError,
+ FileFailure
+ };
+
+ QCoreApplication app(argc, argv);
+
+ QTextStream errorStream(stderr);
+
+ if (argc != 2)
+ {
+ errorStream << XmlStreamLint::tr(
+ "Usage: xmlstreamlint <path to XML file>\n");
+ return ArgumentError;
+ }
+
+ QString inputFilePath(QCoreApplication::arguments().at(1));
+ QFile inputFile(inputFilePath);
+
+ if (!QFile::exists(inputFilePath))
+ {
+ errorStream << XmlStreamLint::tr(
+ "File %1 does not exist.\n").arg(inputFilePath);
+ return FileFailure;
+
+ } else if (!inputFile.open(QIODevice::ReadOnly)) {
+ errorStream << XmlStreamLint::tr(
+ "Failed to open file %1.\n").arg(inputFilePath);
+ return FileFailure;
+ }
+
+ QFile outputFile;
+ if (!outputFile.open(stdout, QIODevice::WriteOnly))
+ {
+ errorStream << XmlStreamLint::tr("Failed to open stdout.");
+ return WriteError;
+ }
+
+//! [0]
+ QXmlStreamReader reader(&inputFile);
+ QXmlStreamWriter writer(&outputFile);
+//! [0]
+
+//! [1]
+ while (!reader.atEnd())
+ {
+ reader.readNext();
+
+ if (reader.error())
+ {
+ errorStream << XmlStreamLint::tr(
+ "Error: %1 in file %2 at line %3, column %4.\n").arg(
+ reader.errorString(), inputFilePath,
+ QString::number(reader.lineNumber()),
+ QString::number(reader.columnNumber()));
+ return ParseFailure;
+//! [1]
+
+//! [2]
+ } else
+ writer.writeCurrentToken(reader);
+ }
+//! [2]
+
+ return Success;
+}
diff --git a/tests/manual/xmlstreamlint/xmlstreamlint.pro b/tests/manual/xmlstreamlint/xmlstreamlint.pro
new file mode 100644
index 0000000000..90a6387afe
--- /dev/null
+++ b/tests/manual/xmlstreamlint/xmlstreamlint.pro
@@ -0,0 +1,7 @@
+CONFIG += cmdline
+QT -= gui
+SOURCES += main.cpp
+
+# install
+target.path = $$[QT_INSTALL_EXAMPLES]/xml/xmlstreamlint
+INSTALLS += target
diff --git a/tests/shared/fakedirmodel.h b/tests/shared/fakedirmodel.h
index d82ec21ee5..4e28aae431 100644
--- a/tests/shared/fakedirmodel.h
+++ b/tests/shared/fakedirmodel.h
@@ -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
#ifndef FAKEDIRMODEL_H
#define FAKEDIRMODEL_H
diff --git a/tests/shared/filesystem.h b/tests/shared/filesystem.h
index 769c1d843a..23453054a3 100644
--- a/tests/shared/filesystem.h
+++ b/tests/shared/filesystem.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QT_TESTS_SHARED_FILESYSTEM_H_INCLUDED
#define QT_TESTS_SHARED_FILESYSTEM_H_INCLUDED
@@ -50,6 +25,11 @@
#ifndef SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE // MinGW
#define SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE (0x2)
#endif
+QT_BEGIN_NAMESPACE
+namespace QTest {
+ static QString uncServerName() { return qgetenv("COMPUTERNAME"); }
+}
+QT_END_NAMESPACE
#endif
// QTemporaryDir-based helper class for creating file-system hierarchies and cleaning up.
diff --git a/tests/shared/localechange.h b/tests/shared/localechange.h
index 9b6deaa29d..74ed444ba6 100644
--- a/tests/shared/localechange.h
+++ b/tests/shared/localechange.h
@@ -1,30 +1,5 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 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) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
#ifndef QT_TESTS_SHARED_LOCALE_CHANGE_H
#define QT_TESTS_SHARED_LOCALE_CHANGE_H
@@ -37,7 +12,7 @@
namespace QTestLocaleChange {
- QLocale resetSystemLocale()
+ inline QLocale resetSystemLocale()
{
#ifndef QT_NO_SYSTEMLOCALE
{ // Transient instance marks system locale data as stale:
@@ -52,8 +27,7 @@ namespace QTestLocaleChange {
const int m_category;
const QByteArray m_prior;
const bool m_didSet;
-#if !defined(QT_NO_SYSTEMLOCALE) && defined(Q_OS_UNIX) \
- && (!defined(Q_OS_DARWIN) || defined(Q_OS_NACL))
+#if !defined(QT_NO_SYSTEMLOCALE) && defined(Q_OS_UNIX) && !defined(Q_OS_DARWIN)
#define TRANSIENT_ENV
// Unix system locale consults environment variables, so we need to set
// the appropriate one, too.
@@ -65,7 +39,7 @@ namespace QTestLocaleChange {
#define CASE(cat) case cat: return #cat
CASE(LC_ALL); CASE(LC_NUMERIC); CASE(LC_TIME); CASE(LC_MONETARY);
CASE(LC_MESSAGES); CASE(LC_COLLATE);
-#if !defined(Q_OS_QNX) && !defined(Q_OS_INTEGRITY)
+#ifdef LC_MEASUREMENT
CASE(LC_MEASUREMENT);
#endif
#undef CASE
diff --git a/tests/shared/nativewindow.h b/tests/shared/nativewindow.h
new file mode 100644
index 0000000000..932d2d419a
--- /dev/null
+++ b/tests/shared/nativewindow.h
@@ -0,0 +1,304 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+#ifndef NATIVEWINDOW_H
+#define NATIVEWINDOW_H
+
+#if defined(Q_OS_MACOS)
+# include <AppKit/AppKit.h>
+# define VIEW_BASE NSView
+#elif defined(Q_OS_IOS)
+# include <UIKit/UIKit.h>
+# define VIEW_BASE UIView
+#elif defined(Q_OS_WIN)
+# include <QtCore/qt_windows.h>
+#elif QT_CONFIG(xcb)
+# include <xcb/xcb.h>
+#elif defined(ANDROID)
+# include <QtCore/qjniobject.h>
+# include <QtCore/qjnitypes.h>
+# include <QtCore/qnativeinterface.h>
+Q_DECLARE_JNI_CLASS(View, "android/view/View")
+Q_DECLARE_JNI_CLASS(ViewParent, "android/view/ViewParent")
+#endif
+
+class NativeWindow
+{
+ Q_DISABLE_COPY(NativeWindow)
+public:
+#if defined(Q_OS_MACOS)
+ using Handle = NSView*;
+#elif defined(Q_OS_IOS)
+ using Handle = UIView*;
+#elif defined(Q_OS_WIN)
+ using Handle = HWND;
+#elif QT_CONFIG(xcb)
+ using Handle = xcb_window_t;
+#elif defined(ANDROID)
+ using Handle = QtJniTypes::View;
+#endif
+
+ NativeWindow();
+ ~NativeWindow();
+
+ operator WId() const;
+ WId parentWinId() const;
+ bool isParentOf(WId childWinId);
+ void setParent(WId parent);
+
+ void setGeometry(const QRect &rect);
+ QRect geometry() const;
+
+private:
+ Handle m_handle = {};
+};
+
+#if QT_CONFIG(metal)
+
+@interface View : VIEW_BASE
+@end
+
+@implementation View
+- (instancetype)init
+{
+ if ((self = [super init])) {
+#if defined(Q_OS_MACOS)
+ self.wantsLayer = YES;
+#endif
+ self.layer.backgroundColor = CGColorCreateGenericRGB(1.0, 0.5, 1.0, 1.0);
+ }
+ return self;
+}
+
+- (void)dealloc
+{
+ [super dealloc];
+}
+@end
+
+NativeWindow::NativeWindow()
+ : m_handle([View new])
+{
+}
+
+NativeWindow::~NativeWindow()
+{
+ [m_handle release];
+}
+
+void NativeWindow::setGeometry(const QRect &rect)
+{
+ m_handle.frame = QRectF(rect).toCGRect();
+}
+
+QRect NativeWindow::geometry() const
+{
+ return QRectF::fromCGRect(m_handle.frame).toRect();
+}
+
+NativeWindow::operator WId() const
+{
+ return reinterpret_cast<WId>(m_handle);
+}
+
+WId NativeWindow::parentWinId() const
+{
+ return WId(m_handle.superview);
+}
+
+bool NativeWindow::isParentOf(WId childWinId)
+{
+ auto *subview = reinterpret_cast<Handle>(childWinId);
+ return subview.superview == m_handle;
+}
+
+void NativeWindow::setParent(WId parent)
+{
+ if (auto *superview = reinterpret_cast<Handle>(parent))
+ [superview addSubview:m_handle];
+ else
+ [m_handle removeFromSuperview];
+}
+
+#elif defined(Q_OS_WIN)
+
+NativeWindow::NativeWindow()
+{
+ static const LPCWSTR className = []{
+ WNDCLASS wc = {};
+ wc.lpfnWndProc = DefWindowProc;
+ wc.hInstance = GetModuleHandle(nullptr);
+ wc.lpszClassName = L"Native Window";
+ wc.hbrBackground = CreateSolidBrush(RGB(255, 128, 255));
+ RegisterClass(&wc);
+ return wc.lpszClassName;
+ }();
+ m_handle = CreateWindowEx(0, className, nullptr, WS_POPUP,
+ CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
+ nullptr, nullptr, GetModuleHandle(nullptr), nullptr);
+}
+
+NativeWindow::~NativeWindow()
+{
+ DestroyWindow(m_handle);
+}
+
+void NativeWindow::setGeometry(const QRect &rect)
+{
+ MoveWindow(m_handle, rect.x(), rect.y(), rect.width(), rect.height(), false);
+}
+
+QRect NativeWindow::geometry() const
+{
+ WINDOWPLACEMENT wp;
+ wp.length = sizeof(WINDOWPLACEMENT);
+ if (GetWindowPlacement(m_handle, &wp)) {
+ RECT r = wp.rcNormalPosition;
+ return QRect(r.left, r.top, r.right - r.left, r.bottom - r.top);
+ }
+ return {};
+}
+
+NativeWindow::operator WId() const
+{
+ return reinterpret_cast<WId>(m_handle);
+}
+
+WId NativeWindow::parentWinId() const
+{
+ return WId(GetAncestor(m_handle, GA_PARENT));
+}
+
+bool NativeWindow::isParentOf(WId childWinId)
+{
+ return GetAncestor(Handle(childWinId), GA_PARENT) == m_handle;
+}
+
+void NativeWindow::setParent(WId parent)
+{
+ SetParent(m_handle, Handle(parent));
+}
+
+#elif QT_CONFIG(xcb)
+
+struct Connection
+{
+ Connection() : m_connection(xcb_connect(nullptr, nullptr)) {}
+ ~Connection() { xcb_disconnect(m_connection); }
+ operator xcb_connection_t*() const { return m_connection; }
+ xcb_connection_t *m_connection = nullptr;
+};
+
+static Connection connection;
+
+NativeWindow::NativeWindow()
+{
+ m_handle = xcb_generate_id(connection);
+
+ xcb_screen_t *screen = xcb_setup_roots_iterator(xcb_get_setup(connection)).data;
+
+ xcb_create_window(connection, XCB_COPY_FROM_PARENT, m_handle,
+ screen->root, 0, 0, 1, 1, 0, XCB_WINDOW_CLASS_INPUT_OUTPUT,
+ screen->root_visual, XCB_CW_BACK_PIXEL,
+ (const uint32_t []){ 0xffffaaff });
+
+ xcb_flush(connection);
+}
+
+NativeWindow::~NativeWindow()
+{
+ xcb_destroy_window(connection, m_handle);
+}
+
+void NativeWindow::setGeometry(const QRect &rect)
+{
+ const quint32 mask = XCB_CONFIG_WINDOW_X | XCB_CONFIG_WINDOW_Y
+ | XCB_CONFIG_WINDOW_WIDTH | XCB_CONFIG_WINDOW_HEIGHT;
+ const qint32 values[] = { rect.x(), rect.y(), rect.width(), rect.height() };
+ xcb_configure_window(connection, m_handle, mask,
+ reinterpret_cast<const quint32*>(values));
+ xcb_flush(connection);
+}
+
+QRect NativeWindow::geometry() const
+{
+ xcb_get_geometry_reply_t *geometry = xcb_get_geometry_reply(
+ connection, xcb_get_geometry(connection, m_handle), nullptr);
+ const auto cleanup = qScopeGuard([&]{ free(geometry); });
+ return QRect(geometry->x, geometry->y, geometry->width, geometry->height);
+}
+
+NativeWindow::operator WId() const
+{
+ return m_handle;
+}
+
+WId NativeWindow::parentWinId() const
+{
+ xcb_query_tree_reply_t *tree = xcb_query_tree_reply(
+ connection, xcb_query_tree(connection, m_handle), nullptr);
+ const auto cleanup = qScopeGuard([&]{ free(tree); });
+ return tree ? tree->parent : 0;
+}
+
+bool NativeWindow::isParentOf(WId childWinId)
+{
+ xcb_query_tree_reply_t *tree = xcb_query_tree_reply(
+ connection, xcb_query_tree(connection, Handle(childWinId)), nullptr);
+ const auto cleanup = qScopeGuard([&]{ free(tree); });
+ return tree->parent == m_handle;
+}
+
+void NativeWindow::setParent(WId parent)
+{
+ xcb_screen_t *screen = xcb_setup_roots_iterator(xcb_get_setup(connection)).data;
+
+ xcb_reparent_window(connection, m_handle,
+ parent ? Handle(parent) : screen->root, 0, 0);
+}
+
+#elif defined (ANDROID)
+NativeWindow::NativeWindow()
+{
+ m_handle = QJniObject::construct<QtJniTypes::View, QtJniTypes::Context>(
+ QNativeInterface::QAndroidApplication::context());
+ m_handle.callMethod<void>("setBackgroundColor", 0xffffaaff);
+}
+
+NativeWindow::~NativeWindow()
+{
+}
+
+NativeWindow::operator WId() const
+{
+ return reinterpret_cast<WId>(m_handle.object());
+}
+
+void NativeWindow::setGeometry(const QRect &rect)
+{
+ // No-op, the view geometry is handled by the QWindow constructed from it
+}
+
+QRect NativeWindow::geometry() const
+{
+ int x = m_handle.callMethod<jint>("getX");
+ int y = m_handle.callMethod<jint>("getY");
+ int w = m_handle.callMethod<jint>("getWidth");
+ int h = m_handle.callMethod<jint>("getHeight");
+ return QRect(x, y, w, h);
+}
+
+WId NativeWindow::parentWinId() const
+{
+ // TODO note, the returned object is a ViewParent, not necessarily
+ // a View - what is this used for?
+ using namespace QtJniTypes;
+ ViewParent parentView = m_handle.callMethod<ViewParent>("getParent");
+ if (parentView.isValid())
+ return reinterpret_cast<WId>(parentView.object());
+ return 0L;
+}
+
+#endif
+
+#endif // NATIVEWINDOW_H
diff --git a/tests/testserver/apache2/apache2.sh b/tests/testserver/apache2/apache2.sh
index d5075c7096..6ab0071677 100755
--- a/tests/testserver/apache2/apache2.sh
+++ b/tests/testserver/apache2/apache2.sh
@@ -1,33 +1,6 @@
#!/usr/bin/env bash
-
-#############################################################################
-##
-## Copyright (C) 2018 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$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 or (at your option) 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.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-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
set -ex
diff --git a/tests/testserver/common/ssl.sh b/tests/testserver/common/ssl.sh
index 2593a22979..7dab0e194a 100755
--- a/tests/testserver/common/ssl.sh
+++ b/tests/testserver/common/ssl.sh
@@ -1,33 +1,6 @@
#!/usr/bin/env bash
-
-#############################################################################
-##
-## Copyright (C) 2018 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$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 or (at your option) 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.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-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
set -ex
diff --git a/tests/testserver/common/startup.sh b/tests/testserver/common/startup.sh
index 1386314e38..97d48048ab 100755
--- a/tests/testserver/common/startup.sh
+++ b/tests/testserver/common/startup.sh
@@ -1,33 +1,6 @@
#!/usr/bin/env bash
-
-#############################################################################
-##
-## Copyright (C) 2018 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$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 or (at your option) 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.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-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
set -ex
diff --git a/tests/testserver/cyrus/cyrus.sh b/tests/testserver/cyrus/cyrus.sh
index 92c3bfa703..8f7b771fa1 100755
--- a/tests/testserver/cyrus/cyrus.sh
+++ b/tests/testserver/cyrus/cyrus.sh
@@ -1,33 +1,6 @@
#!/usr/bin/env bash
-
-#############################################################################
-##
-## Copyright (C) 2019 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$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 or (at your option) 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.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-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
set -ex
diff --git a/tests/testserver/danted/danted.sh b/tests/testserver/danted/danted.sh
index 97e2142401..ca572944e4 100755
--- a/tests/testserver/danted/danted.sh
+++ b/tests/testserver/danted/danted.sh
@@ -1,33 +1,6 @@
#!/usr/bin/env bash
-
-#############################################################################
-##
-## Copyright (C) 2018 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$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 or (at your option) 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.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-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
set -ex
diff --git a/tests/testserver/docker-compose-qemu-bridge-network.yml b/tests/testserver/docker-compose-qemu-bridge-network.yml
new file mode 100644
index 0000000000..96e85c2db1
--- /dev/null
+++ b/tests/testserver/docker-compose-qemu-bridge-network.yml
@@ -0,0 +1,200 @@
+version: '2.1'
+
+# The tag of images is used by docker compose file to launch the correct
+# docker containers. By default we always launch the "latest" tag.
+#
+# But in the "docker build" phase, we also tag the images with a unique tag,
+# the SHA1 hash of all files used for "docker build" - see sha1tree() in
+# provisioning.
+#
+# So if you want to update the docker image at a specific time, make sure that
+# 1. you modify this file to run the specific image's SHA1 tag, instead of
+# "latest"
+# 2. you build two docker images in provisioning, the currently used one,
+# plus the new one that you tag as "latest"
+# 3. you switch this file to the "latest" tag when ready
+
+# You can run `docker images` to list all the tags of available images:
+# For example:
+# REPOSITORY TAG
+# qt-test-server-apache2 537fe302f61851d1663f41495230d8e3554a4a13
+
+#
+# Configuration in this file is used solely to configure Docker properly
+# when running test on QNX qemu as that requires explicitly exposing
+# ports so that qemu and services in docker container can actually
+# communicate.
+#
+# !!! KEEP THIS FILE IN SYNC WITH GENERAL DOCKER CONFIGURATION FILE!!!
+# -> docker-compose-bridge-network.yml
+#
+
+services:
+ apache2:
+ extends:
+ file: ${SHARED_DATA}/docker-compose-common.yml
+ service: ${SHARED_SERVICE}
+ container_name: qt-test-server-apache2
+ hostname: ${HOST_NAME:-apache2}
+ ports:
+ - "172.31.1.1:80:80"
+ - "172.31.1.1:443:443"
+ build:
+ context: .
+ args:
+ provisioningImage: qt-test-server-apache2:latest
+ shareDir: ./common
+ serviceDir: ./apache2
+ entrypoint: service/startup.sh
+ command: [service/ssl.sh, service/apache2.sh]
+
+ squid:
+ extends:
+ file: ${SHARED_DATA}/docker-compose-common.yml
+ service: ${SHARED_SERVICE}
+ container_name: qt-test-server-squid
+ hostname: ${HOST_NAME:-squid}
+ ports:
+ - "172.31.1.1:3128:3128"
+ - "172.31.1.1:3129:3129"
+ - "172.31.1.1:3130:3130"
+ depends_on:
+ - apache2
+ external_links:
+ - apache2:apache2.${TEST_DOMAIN}
+ - cyrus:cyrus.${TEST_DOMAIN}
+ - iptables:iptables.${TEST_DOMAIN}
+ - vsftpd:vsftpd.${TEST_DOMAIN}
+ - echo:echo.${TEST_DOMAIN}
+ build:
+ context: .
+ args:
+ provisioningImage: qt-test-server-squid:latest
+ shareDir: ./common
+ serviceDir: ./squid
+ entrypoint: service/startup.sh
+ command: service/squid.sh
+
+ vsftpd:
+ extends:
+ file: ${SHARED_DATA}/docker-compose-common.yml
+ service: ${SHARED_SERVICE}
+ container_name: qt-test-server-vsftpd
+ hostname: ${HOST_NAME:-vsftpd}
+ ports:
+ - "172.31.1.1:20:20"
+ - "172.31.1.1:21:21"
+ build:
+ context: .
+ args:
+ provisioningImage: qt-test-server-vsftpd:latest
+ shareDir: ./common
+ serviceDir: ./vsftpd
+ entrypoint: service/startup.sh
+ command: service/vsftpd.sh
+
+ ftp-proxy:
+ extends:
+ file: ${SHARED_DATA}/docker-compose-common.yml
+ service: ${SHARED_SERVICE}
+ container_name: qt-test-server-ftp-proxy
+ hostname: ${HOST_NAME:-ftp-proxy}
+ ports:
+ - "172.31.1.1:2121:2121"
+ depends_on:
+ - vsftpd
+ external_links:
+ - vsftpd:vsftpd.${TEST_DOMAIN}
+ build:
+ context: .
+ args:
+ provisioningImage: qt-test-server-ftp-proxy:latest
+ shareDir: ./common
+ serviceDir: ./ftp-proxy
+ entrypoint: service/startup.sh
+ command: service/ftp-proxy.sh
+
+ danted:
+ extends:
+ file: ${SHARED_DATA}/docker-compose-common.yml
+ service: ${SHARED_SERVICE}
+ container_name: qt-test-server-danted
+ hostname: ${HOST_NAME:-danted}
+ ports:
+ - "172.31.1.1:1080:1080"
+ - "172.31.1.1:1081:1081"
+ depends_on:
+ - apache2
+ - vsftpd
+ - ftp-proxy
+ external_links:
+ - apache2:apache2.${TEST_DOMAIN}
+ - vsftpd:vsftpd.${TEST_DOMAIN}
+ - ftp-proxy:ftp-proxy.${TEST_DOMAIN}
+ - cyrus:cyrus.${TEST_DOMAIN}
+ - echo:echo.${TEST_DOMAIN}
+ build:
+ context: .
+ args:
+ provisioningImage: qt-test-server-danted:latest
+ shareDir: ./common
+ serviceDir: ./danted
+ entrypoint: service/startup.sh
+ command: service/danted.sh
+
+ cyrus:
+ extends:
+ file: ${SHARED_DATA}/docker-compose-common.yml
+ service: ${SHARED_SERVICE}
+ container_name: qt-test-server-cyrus
+ hostname: ${HOST_NAME:-cyrus}
+ ports:
+ - "172.31.1.1:143:143"
+ - "172.31.1.1:993:993"
+ build:
+ context: .
+ args:
+ provisioningImage: qt-test-server-cyrus:latest
+ shareDir: ./common
+ serviceDir: ./cyrus
+ entrypoint: service/startup.sh
+ command: [service/ssl.sh, service/cyrus.sh]
+
+ iptables:
+ extends:
+ file: ${SHARED_DATA}/docker-compose-common.yml
+ service: ${SHARED_SERVICE}
+ container_name: qt-test-server-iptables
+ hostname: ${HOST_NAME:-iptables}
+ ports:
+ - "172.31.1.1:1357:1357"
+ build:
+ context: .
+ args:
+ provisioningImage: qt-test-server-iptables:latest
+ shareDir: ./common
+ serviceDir: ./iptables
+ entrypoint: service/startup.sh
+ command: service/iptables.sh
+ cap_add:
+ - NET_ADMIN
+ - NET_RAW
+
+ echo:
+ extends:
+ file: ${SHARED_DATA}/docker-compose-common.yml
+ service: ${SHARED_SERVICE}
+ container_name: qt-test-server-echo
+ hostname: ${HOST_NAME:-echo}
+ ports:
+ - "172.31.1.1:13:13"
+ - "172.31.1.1:7:7"
+ - "172.31.1.1:7:7/udp"
+ build:
+ context: .
+ args:
+ provisioningImage: qt-test-server-echo:latest
+ shareDir: ./common
+ serviceDir: ./echo
+ entrypoint: service/startup.sh
+ command: service/echo.sh
diff --git a/tests/testserver/ftp-proxy/ftp-proxy.sh b/tests/testserver/ftp-proxy/ftp-proxy.sh
index e5b9631bbb..df9612d2b3 100755
--- a/tests/testserver/ftp-proxy/ftp-proxy.sh
+++ b/tests/testserver/ftp-proxy/ftp-proxy.sh
@@ -1,33 +1,6 @@
#!/usr/bin/env bash
-
-#############################################################################
-##
-## Copyright (C) 2018 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$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 or (at your option) 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.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-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
set -ex
diff --git a/tests/testserver/iptables/iptables.sh b/tests/testserver/iptables/iptables.sh
index 9a48686d8b..9a3ffd25d2 100755
--- a/tests/testserver/iptables/iptables.sh
+++ b/tests/testserver/iptables/iptables.sh
@@ -1,33 +1,6 @@
#!/usr/bin/env bash
-
-#############################################################################
-##
-## Copyright (C) 2019 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$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 or (at your option) 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.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-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
set -ex
diff --git a/tests/testserver/squid/squid.sh b/tests/testserver/squid/squid.sh
index 8e413f2f14..515c881484 100755
--- a/tests/testserver/squid/squid.sh
+++ b/tests/testserver/squid/squid.sh
@@ -1,33 +1,6 @@
#!/usr/bin/env bash
-
-#############################################################################
-##
-## Copyright (C) 2018 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$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 or (at your option) 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.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-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
set -ex
diff --git a/tests/testserver/vsftpd/vsftpd.sh b/tests/testserver/vsftpd/vsftpd.sh
index bd09ad3902..02e2d29f61 100755
--- a/tests/testserver/vsftpd/vsftpd.sh
+++ b/tests/testserver/vsftpd/vsftpd.sh
@@ -1,33 +1,6 @@
#!/usr/bin/env bash
-
-#############################################################################
-##
-## Copyright (C) 2018 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$
-## Commercial License Usage
-## Licensees holding valid commercial Qt licenses may use this file in
-## accordance with the commercial license agreement provided with the
-## Software or, alternatively, in accordance with the terms contained in
-## a written agreement between you and The Qt Company. For licensing terms
-## and conditions see https://www.qt.io/terms-conditions. For further
-## information use the contact form at https://www.qt.io/contact-us.
-##
-## GNU General Public License Usage
-## Alternatively, this file may be used under the terms of the GNU
-## General Public License version 3 or (at your option) 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.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-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
set -ex